Merge "Merge "Add ADPF owners to performance hint files" into main am: 97058d4c2d am: 903345de12" into udc-dev-plus-aosp am: 50c0203ef1 am: 348d7e0b97 am: a26dc3f02b

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

Change-Id: I40f472be7b5c27a17f2473dad78044abd4409a29
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/Android.bp b/Android.bp
index 773528c..be589b2 100644
--- a/Android.bp
+++ b/Android.bp
@@ -100,6 +100,10 @@
         ":android.hardware.gnss-V2-java-source",
         ":android.hardware.graphics.common-V3-java-source",
         ":android.hardware.keymaster-V4-java-source",
+        ":android.hardware.radio-V3-java-source",
+        ":android.hardware.radio.data-V3-java-source",
+        ":android.hardware.radio.network-V3-java-source",
+        ":android.hardware.radio.voice-V3-java-source",
         ":android.hardware.security.keymint-V3-java-source",
         ":android.hardware.security.secureclock-V1-java-source",
         ":android.hardware.thermal-V1-java-source",
@@ -208,24 +212,19 @@
         "android.hardware.contexthub-V1.0-java",
         "android.hardware.contexthub-V1.1-java",
         "android.hardware.contexthub-V1.2-java",
-        "android.hardware.contexthub-V2-java",
+        "android.hardware.contexthub-V3-java",
         "android.hardware.gnss-V1.0-java",
         "android.hardware.gnss-V2.1-java",
         "android.hardware.health-V1.0-java-constants",
-        "android.hardware.radio-V1.0-java",
-        "android.hardware.radio-V1.1-java",
-        "android.hardware.radio-V1.2-java",
-        "android.hardware.radio-V1.3-java",
-        "android.hardware.radio-V1.4-java",
-        "android.hardware.radio-V1.5-java",
         "android.hardware.radio-V1.6-java",
-        "android.hardware.radio.data-V2-java",
-        "android.hardware.radio.ims-V1-java",
-        "android.hardware.radio.messaging-V2-java",
-        "android.hardware.radio.modem-V2-java",
-        "android.hardware.radio.network-V2-java",
-        "android.hardware.radio.sim-V2-java",
-        "android.hardware.radio.voice-V2-java",
+        "android.hardware.radio.data-V3-java",
+        "android.hardware.radio.ims-V2-java",
+        "android.hardware.radio.messaging-V3-java",
+        "android.hardware.radio.modem-V3-java",
+        "android.hardware.radio.network-V3-java",
+        "android.hardware.radio.satellite-V1-java",
+        "android.hardware.radio.sim-V3-java",
+        "android.hardware.radio.voice-V3-java",
         "android.hardware.thermal-V1.0-java-constants",
         "android.hardware.thermal-V1.0-java",
         "android.hardware.thermal-V1.1-java",
@@ -247,7 +246,6 @@
         "android.system.suspend.control.internal-java",
         "devicepolicyprotosnano",
 
-        "com.android.sysprop.apex",
         "com.android.sysprop.init",
         "com.android.sysprop.localization",
         "PlatformProperties",
@@ -369,17 +367,12 @@
         // TODO(b/120066492): remove default_television.xml when the build system
         // propagates "required" properly.
         "default_television.xml",
-        "framework-platform-compat-config",
         // TODO(b/120066492): remove gps_debug and protolog.conf.json when the build
         // system propagates "required" properly.
         "gps_debug.conf",
-        "icu4j-platform-compat-config",
         "protolog.conf.json.gz",
-        "services-platform-compat-config",
-        "TeleService-platform-compat-config",
-        "documents-ui-compat-config",
-        "calendar-provider-compat-config",
-        "contacts-provider-platform-compat-config",
+        // any install dependencies should go into framework-minus-apex-install-dependencies
+        // rather than here to avoid bloating incremental build time
     ],
     libs: [
         "androidx.annotation_annotation",
@@ -487,6 +480,20 @@
     apex_available: ["//apex_available:platform"],
 }
 
+java_library {
+    name: "framework-minus-apex-install-dependencies",
+    required: [
+        "framework-minus-apex",
+        "framework-platform-compat-config",
+        "services-platform-compat-config",
+        "icu4j-platform-compat-config",
+        "TeleService-platform-compat-config",
+        "documents-ui-compat-config",
+        "calendar-provider-compat-config",
+        "contacts-provider-platform-compat-config",
+    ],
+}
+
 platform_compat_config {
     name: "framework-platform-compat-config",
     src: ":framework-minus-apex",
@@ -504,6 +511,13 @@
 }
 
 filegroup {
+    name: "framework-android-os-unit-testable-src",
+    srcs: [
+        "core/java/android/os/DdmSyncState.java",
+    ],
+}
+
+filegroup {
     name: "framework-networkstack-shared-srcs",
     srcs: [
         // TODO: remove these annotations as soon as we can use andoid.support.annotations.*
@@ -641,8 +655,6 @@
     libs: [
         "android.hardware.cas-V1.2-java",
         "android.hardware.health-V1.0-java-constants",
-        "android.hardware.radio-V1.5-java",
-        "android.hardware.radio-V1.6-java",
         "android.hardware.thermal-V1.0-java-constants",
         "android.hardware.thermal-V2.0-java",
         "android.hardware.tv.input-V1.0-java-constants",
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 1b5795f..122e627 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -74,7 +74,15 @@
       ]
     },
     {
-      "name": "ExtServicesUnitTests",
+      "name": "ExtServicesUnitTests-tplus",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
+    },
+    {
+      "name": "ExtServicesUnitTests-sminus",
       "options": [
         {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
@@ -142,7 +150,15 @@
      ]
    },
    {
-     "name": "ExtServicesUnitTests",
+     "name": "ExtServicesUnitTests-tplus",
+     "options": [
+       {
+         "exclude-annotation": "androidx.test.filters.FlakyTest"
+       }
+     ]
+   },
+   {
+     "name": "ExtServicesUnitTests-sminus",
      "options": [
        {
          "exclude-annotation": "androidx.test.filters.FlakyTest"
diff --git a/apct-tests/perftests/core/src/android/accessibility/AccessibilityPerfTest.java b/apct-tests/perftests/core/src/android/accessibility/AccessibilityPerfTest.java
new file mode 100644
index 0000000..7927aa9
--- /dev/null
+++ b/apct-tests/perftests/core/src/android/accessibility/AccessibilityPerfTest.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.accessibility;
+
+import static junit.framework.Assert.assertTrue;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.app.UiAutomation;
+import android.perftests.utils.PerfTestActivity;
+import android.platform.test.annotations.LargeTest;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.benchmark.BenchmarkState;
+import androidx.benchmark.junit4.BenchmarkRule;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.rule.ActivityTestRule;
+
+import com.android.compatibility.common.util.TestUtils;
+
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.RuleChain;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+@LargeTest
+public class AccessibilityPerfTest {
+
+    private static final String TEXT_KEY = "Child";
+
+    BenchmarkRule mBenchmarkRule = new BenchmarkRule();
+    ActivityTestRule<PerfTestActivity> mActivityTestRule =
+            new ActivityTestRule(PerfTestActivity.class);
+
+    @Rule
+    public RuleChain rules =
+            RuleChain.outerRule(mBenchmarkRule).around(mActivityTestRule);
+
+    private static Instrumentation sInstrumentation;
+
+    private Activity mActivity;
+
+    private ViewGroup createTestViewGroup(int children) {
+        ViewGroup group = new LinearLayout(mActivity.getBaseContext());
+        sInstrumentation.runOnMainSync(() -> {
+            mActivity.setContentView(group);
+            for (int i = 0; i < children; i++) {
+                TextView text = new TextView(mActivity.getBaseContext());
+                text.setText(TEXT_KEY);
+                group.addView(text);
+            }
+        });
+
+        return group;
+    }
+
+    @BeforeClass
+    public static void setUpClass() {
+        sInstrumentation = InstrumentationRegistry.getInstrumentation();
+    }
+
+    @Before
+    public void setUp() {
+        mActivity = mActivityTestRule.getActivity();
+    }
+
+    @Test
+    public void testCreateAccessibilityNodeInfo() {
+        final BenchmarkState state = mBenchmarkRule.getState();
+        View view = new View(mActivity.getBaseContext());
+
+        while (state.keepRunning()) {
+            view.createAccessibilityNodeInfo();
+        }
+    }
+
+    @Test
+    public void testCreateViewGroupAccessibilityNodeInfo() {
+        final BenchmarkState state = mBenchmarkRule.getState();
+        ViewGroup group = createTestViewGroup(10);
+
+        while (state.keepRunning()) {
+            group.createAccessibilityNodeInfo();
+        }
+    }
+
+    @Test
+    public void testCreateAccessibilityEvent() {
+        final BenchmarkState state = mBenchmarkRule.getState();
+        View view = new View(mActivity.getBaseContext());
+
+        while (state.keepRunning()) {
+            view.onInitializeAccessibilityEvent(
+                    new AccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED));
+        }
+    }
+
+    @Test
+    public void testPrefetching() throws Exception {
+        final BenchmarkState state = mBenchmarkRule.getState();
+        createTestViewGroup(AccessibilityNodeInfo.MAX_NUMBER_OF_PREFETCHED_NODES);
+        UiAutomation uiAutomation = sInstrumentation.getUiAutomation();
+
+        while (state.keepRunning()) {
+            state.pauseTiming();
+            uiAutomation.clearCache();
+            CountDownLatch latch = new CountDownLatch(
+                    AccessibilityNodeInfo.MAX_NUMBER_OF_PREFETCHED_NODES);
+            uiAutomation.getCache().registerOnNodeAddedListener(
+                    (node) -> {
+                        latch.countDown();
+                    });
+            state.resumeTiming();
+            // Get the root node, and await for the latch to have seen the expected max number
+            // of prefetched nodes.
+            uiAutomation.getRootInActiveWindow(
+                    AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS_HYBRID
+                            | AccessibilityNodeInfo.FLAG_PREFETCH_UNINTERRUPTIBLE);
+            assertTrue(latch.await(100, TimeUnit.MILLISECONDS));
+        }
+    }
+
+    @Test
+    public void testConnectUiAutomation() throws Exception {
+        final BenchmarkState state = mBenchmarkRule.getState();
+        while (state.keepRunning()) {
+            UiAutomation uiAutomation = sInstrumentation.getUiAutomation();
+            state.pauseTiming();
+            uiAutomation.destroy();
+            TestUtils.waitUntil(
+                    "UiAutomation did not disconnect.", 10,
+                    () -> uiAutomation.isDestroyed()
+            );
+            state.resumeTiming();
+        }
+        // We currently run into an exception
+        // if a test ends with UiAutomation explicitly disconnected,
+        // which seems to be the result of some commands being run by benchmarking.
+        sInstrumentation.getUiAutomation();
+    }
+}
diff --git a/apct-tests/perftests/core/src/android/graphics/perftests/RenderNodePerfTest.java b/apct-tests/perftests/core/src/android/graphics/perftests/RenderNodePerfTest.java
index e805ab9..abb0fa7 100644
--- a/apct-tests/perftests/core/src/android/graphics/perftests/RenderNodePerfTest.java
+++ b/apct-tests/perftests/core/src/android/graphics/perftests/RenderNodePerfTest.java
@@ -42,22 +42,6 @@
     }
 
     @Test
-    public void testCreateRenderNodeNoName() {
-        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
-        while (state.keepRunning()) {
-            RenderNode.create(null, null);
-        }
-    }
-
-    @Test
-    public void testCreateRenderNode() {
-        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
-        while (state.keepRunning()) {
-            RenderNode.create("LinearLayout", null);
-        }
-    }
-
-    @Test
     public void testIsValid() {
         final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
         RenderNode node = RenderNode.create("LinearLayout", null);
diff --git a/apct-tests/perftests/core/src/android/input/VelocityTrackerBenchmarkTest.kt b/apct-tests/perftests/core/src/android/input/VelocityTrackerBenchmarkTest.kt
new file mode 100644
index 0000000..530ca7b
--- /dev/null
+++ b/apct-tests/perftests/core/src/android/input/VelocityTrackerBenchmarkTest.kt
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.input
+
+import android.perftests.utils.PerfStatusReporter
+import android.view.InputDevice
+import android.view.MotionEvent
+import android.view.VelocityTracker
+
+import androidx.test.filters.LargeTest
+import androidx.test.runner.AndroidJUnit4
+
+import java.time.Duration
+
+import org.junit.Assert
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/**
+ * Helper class to maintain [MotionEvent]s for tests.
+ *
+ * This is primarily used to create [MotionEvent]s for tests, in a way where a sequence of
+ * [MotionEvent]s created in multiple test runs are exactly the same, as long as [reset] is called
+ * between consecutive sequences of [MotionEvent]s.
+ *
+ * Furthermore, it also contains convenience methods to run any queries/verifications of the
+ * generated [MotionEvent]s.
+ */
+abstract class MotionState {
+    /** Current time, in ms. */
+    protected var currentTime = START_TIME
+
+    /** Resets the state of this instance. */
+    open fun reset() {
+        currentTime = START_TIME
+    }
+
+    /** Creates a [MotionEvent]. */
+    abstract fun createMotionEvent(): MotionEvent
+
+    /** Asserts that the current velocity is not zero, just for verifying there's motion. */
+    abstract fun assertNonZeroVelocity(velocityTracker: VelocityTracker)
+
+    companion object {
+        /** Arbitrarily chosen start time. */
+        val START_TIME = Duration.ofMillis(100)
+        /**
+         * A small enough time jump, which won't be considered by the tracker as big enough to
+         * deduce that a pointer has stopped.
+         */
+        val DEFAULT_TIME_JUMP = Duration.ofMillis(2)
+    }
+}
+
+/** An implementation of [MotionState] for [MotionEvent.AXIS_SCROLL]. */
+private class ScrollMotionState : MotionState() {
+    override fun createMotionEvent(): MotionEvent {
+        val props = MotionEvent.PointerProperties()
+        props.id = 0
+        val coords = MotionEvent.PointerCoords()
+        coords.setAxisValue(MotionEvent.AXIS_SCROLL, DEFAULT_SCROLL_AMOUNT)
+        val motionEvent = MotionEvent.obtain(
+            /*downTime=*/0,
+            currentTime.toMillis(),
+            MotionEvent.ACTION_SCROLL,
+            /*pointerCount=*/1,
+            arrayOf(props),
+            arrayOf(coords),
+            /*metaState=*/0,
+            /*buttonState=*/0,
+            /*xPrecision=*/0f,
+            /*yPrecision=*/0f,
+            /*deviceId=*/1,
+            /*edgeFlags=*/0,
+            InputDevice.SOURCE_ROTARY_ENCODER,
+            /*flags=*/0
+        )
+
+        currentTime = currentTime.plus(DEFAULT_TIME_JUMP)
+
+        return motionEvent
+    }
+
+    override fun assertNonZeroVelocity(velocityTracker: VelocityTracker) {
+        Assert.assertTrue(velocityTracker.getAxisVelocity(MotionEvent.AXIS_SCROLL) != 0f)
+    }
+
+    companion object {
+        private val DEFAULT_SCROLL_AMOUNT: Float = 30f
+    }
+}
+
+/** An implementation of [MotionState] for [MotionEvent.AXIS_X] and [MotionEvent.AXIS_Y]. */
+private class PlanarMotionState : MotionState() {
+    private var x: Float = DEFAULT_X
+    private var y: Float = DEFAULT_Y
+    private var downEventCreated = false
+
+    override fun createMotionEvent(): MotionEvent {
+        val action: Int = if (downEventCreated) MotionEvent.ACTION_MOVE else MotionEvent.ACTION_DOWN
+        val motionEvent = MotionEvent.obtain(
+            /*downTime=*/START_TIME.toMillis(),
+            currentTime.toMillis(),
+            action,
+            x,
+            y,
+            /*metaState=*/0)
+
+        if (downEventCreated) {
+            x += INCREMENT
+            y += INCREMENT
+        } else {
+            downEventCreated = true
+        }
+        currentTime = currentTime.plus(DEFAULT_TIME_JUMP)
+
+        return motionEvent
+    }
+
+    override fun assertNonZeroVelocity(velocityTracker: VelocityTracker) {
+        Assert.assertTrue(velocityTracker.getAxisVelocity(MotionEvent.AXIS_X) != 0f)
+        Assert.assertTrue(velocityTracker.getAxisVelocity(MotionEvent.AXIS_Y) != 0f)
+    }
+
+    override fun reset() {
+        super.reset()
+        x = DEFAULT_X
+        y = DEFAULT_Y
+        downEventCreated = false
+    }
+
+    companion object {
+        /** Arbitrarily chosen constants. No need to have varying velocity for now. */
+        private val DEFAULT_X: Float = 2f
+        private val DEFAULT_Y: Float = 4f
+        private val INCREMENT: Float = 0.7f
+    }
+}
+
+/**
+ * Benchmark tests for [VelocityTracker]
+ *
+ * Build/Install/Run:
+ * atest VelocityTrackerBenchmarkTest
+ */
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+class VelocityTrackerBenchmarkTest {
+    @get:Rule
+    val perfStatusReporter: PerfStatusReporter = PerfStatusReporter()
+
+    private val velocityTracker = VelocityTracker.obtain()
+    @Before
+    fun setup() {
+        velocityTracker.clear()
+    }
+
+    @Test
+    fun addMovement_axisScroll() {
+        testAddMovement(ScrollMotionState())
+    }
+
+    @Test
+    fun computeCurrentVelocity_computeAfterAllAdditions_axisScroll() {
+        testComputeCurrentVelocity_computeAfterAllAdditions(ScrollMotionState())
+    }
+
+    @Test
+    fun computeCurrentVelocity_computeAfterEachAdd_axisScroll() {
+        testComputeCurrentVelocity_computeAfterEachAdd(ScrollMotionState())
+    }
+
+    @Test
+    fun addMovement_planarAxes() {
+        testAddMovement(PlanarMotionState())
+    }
+
+    @Test
+    fun computeCurrentVelocity_computeAfterAllAdditions_planarAxes() {
+        testComputeCurrentVelocity_computeAfterAllAdditions(PlanarMotionState())
+    }
+
+    private fun testAddMovement(motionState: MotionState) {
+        val state = perfStatusReporter.getBenchmarkState()
+        while (state.keepRunning()) {
+            state.pauseTiming()
+            for (i in 0 until TEST_NUM_DATAPOINTS) {
+                val motionEvent = motionState.createMotionEvent()
+                state.resumeTiming()
+                velocityTracker.addMovement(motionEvent)
+                state.pauseTiming()
+            }
+            velocityTracker.computeCurrentVelocity(1000)
+            motionState.assertNonZeroVelocity(velocityTracker)
+            // Clear the tracker for the next run
+            velocityTracker.clear()
+            motionState.reset()
+            state.resumeTiming()
+        }
+    }
+
+    private fun testComputeCurrentVelocity_computeAfterAllAdditions(motionState: MotionState) {
+        val state = perfStatusReporter.getBenchmarkState()
+        while (state.keepRunning()) {
+            // Add the data points
+            state.pauseTiming()
+            for (i in 0 until TEST_NUM_DATAPOINTS) {
+                velocityTracker.addMovement(motionState.createMotionEvent())
+            }
+
+            // Do the velocity computation
+            state.resumeTiming()
+            velocityTracker.computeCurrentVelocity(1000)
+
+            state.pauseTiming()
+            motionState.assertNonZeroVelocity(velocityTracker)
+            // Clear the tracker for the next run
+            velocityTracker.clear()
+            state.resumeTiming()
+        }
+    }
+
+    private fun testComputeCurrentVelocity_computeAfterEachAdd(motionState: MotionState) {
+        val state = perfStatusReporter.getBenchmarkState()
+        while (state.keepRunning()) {
+            state.pauseTiming()
+            for (i in 0 until TEST_NUM_DATAPOINTS) {
+                velocityTracker.addMovement(motionState.createMotionEvent())
+                state.resumeTiming()
+                velocityTracker.computeCurrentVelocity(1000)
+                state.pauseTiming()
+            }
+            motionState.assertNonZeroVelocity(velocityTracker)
+            // Clear the tracker for the next run
+            velocityTracker.clear()
+            state.resumeTiming()
+        }
+    }
+
+    companion object {
+        private const val TEST_NUM_DATAPOINTS = 100
+    }
+}
\ No newline at end of file
diff --git a/apct-tests/perftests/core/src/android/view/ViewShowHidePerfTest.java b/apct-tests/perftests/core/src/android/view/ViewShowHidePerfTest.java
index a69d3ff..818e11b 100644
--- a/apct-tests/perftests/core/src/android/view/ViewShowHidePerfTest.java
+++ b/apct-tests/perftests/core/src/android/view/ViewShowHidePerfTest.java
@@ -18,6 +18,7 @@
 
 import static org.junit.Assert.assertTrue;
 
+import android.app.UiAutomation;
 import android.content.Context;
 import android.graphics.Color;
 import android.graphics.drawable.ColorDrawable;
@@ -29,8 +30,8 @@
 
 import androidx.benchmark.BenchmarkState;
 import androidx.benchmark.junit4.BenchmarkRule;
-import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.LargeTest;
+import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.rule.ActivityTestRule;
 
 import org.junit.Rule;
@@ -142,6 +143,10 @@
     }
 
     private void testParentWithChild(TestCallback callback) throws Throwable {
+        // Make sure that a11y is disabled to prevent the test affected by accessibility events.
+        InstrumentationRegistry.getInstrumentation()
+                .getUiAutomation(UiAutomation.FLAG_DONT_USE_ACCESSIBILITY);
+
         mActivityRule.runOnUiThread(() -> {
             final BenchmarkState state = mBenchmarkRule.getState();
 
diff --git a/apct-tests/perftests/inputmethod/OWNERS b/apct-tests/perftests/inputmethod/OWNERS
index 5deb2ce..cbd94ba 100644
--- a/apct-tests/perftests/inputmethod/OWNERS
+++ b/apct-tests/perftests/inputmethod/OWNERS
@@ -1 +1,2 @@
+# Bug component: 34867
 include /core/java/android/view/inputmethod/OWNERS
diff --git a/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java b/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java
index 6dba5b3..da700aa 100644
--- a/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java
+++ b/apct-tests/perftests/multiuser/src/android/multiuser/UserLifecycleTests.java
@@ -1557,6 +1557,7 @@
     }
 
     private void waitCoolDownPeriod() {
+        // Heuristic value based on local tests. Stability increased compared to no waiting.
         final int tenSeconds = 1000 * 10;
         waitForBroadcastIdle();
         sleep(tenSeconds);
diff --git a/apct-tests/perftests/rubidium/src/android/rubidium/js/JSScriptEnginePerfTests.java b/apct-tests/perftests/rubidium/src/android/rubidium/js/JSScriptEnginePerfTests.java
index cbd602f..ba15796 100644
--- a/apct-tests/perftests/rubidium/src/android/rubidium/js/JSScriptEnginePerfTests.java
+++ b/apct-tests/perftests/rubidium/src/android/rubidium/js/JSScriptEnginePerfTests.java
@@ -44,6 +44,7 @@
 import androidx.test.filters.MediumTest;
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.adservices.LoggerFactory;
 import com.android.adservices.data.adselection.CustomAudienceSignals;
 import com.android.adservices.service.adselection.AdCounterKeyCopier;
 import com.android.adservices.service.adselection.AdCounterKeyCopierNoOpImpl;
@@ -101,9 +102,10 @@
     private static final Context sContext = ApplicationProvider.getApplicationContext();
     private static final ExecutorService sExecutorService = Executors.newFixedThreadPool(10);
 
+    private static final LoggerFactory.Logger sLogger = LoggerFactory.getFledgeLogger();
     private static final JSScriptEngine sJSScriptEngine =
             JSScriptEngine.getInstanceForTesting(
-                    sContext, Profiler.createInstance(JSScriptEngine.TAG));
+                    sContext, Profiler.createInstance(JSScriptEngine.TAG), sLogger);
     private static final Clock CLOCK = Clock.fixed(Instant.now(), ZoneOffset.UTC);
     private static final Instant ACTIVATION_TIME = CLOCK.instant();
     private static final Instant EXPIRATION_TIME = CLOCK.instant().plus(Duration.ofDays(1));
diff --git a/apct-tests/perftests/windowmanager/src/android/wm/RecentsAnimationPerfTest.java b/apct-tests/perftests/windowmanager/src/android/wm/RecentsAnimationPerfTest.java
deleted file mode 100644
index 42fb24f..0000000
--- a/apct-tests/perftests/windowmanager/src/android/wm/RecentsAnimationPerfTest.java
+++ /dev/null
@@ -1,253 +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.wm;
-
-import static android.perftests.utils.ManualBenchmarkState.StatsReport;
-
-import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
-
-import static org.hamcrest.core.AnyOf.anyOf;
-import static org.hamcrest.core.Is.is;
-
-import android.app.ActivityManager;
-import android.app.ActivityTaskManager;
-import android.app.IActivityTaskManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.graphics.Rect;
-import android.os.RemoteException;
-import android.os.SystemClock;
-import android.perftests.utils.ManualBenchmarkState;
-import android.perftests.utils.ManualBenchmarkState.ManualBenchmarkTest;
-import android.perftests.utils.PerfManualStatusReporter;
-import android.util.Pair;
-import android.view.IRecentsAnimationController;
-import android.view.IRecentsAnimationRunner;
-import android.view.RemoteAnimationTarget;
-import android.window.TaskSnapshot;
-
-import androidx.test.filters.LargeTest;
-import androidx.test.runner.lifecycle.Stage;
-
-import org.junit.AfterClass;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.concurrent.Semaphore;
-import java.util.concurrent.TimeUnit;
-
-@RunWith(Parameterized.class)
-@LargeTest
-public class RecentsAnimationPerfTest extends WindowManagerPerfTestBase
-        implements ManualBenchmarkState.CustomizedIterationListener {
-    private static Intent sRecentsIntent;
-
-    @Rule
-    public final PerfManualStatusReporter mPerfStatusReporter = new PerfManualStatusReporter();
-
-    @Rule
-    public final PerfTestActivityRule mActivityRule =
-            new PerfTestActivityRule(true /* launchActivity */);
-
-    private long mMeasuredTimeNs;
-
-    /**
-     * Used to skip each test method if there is error. It cannot be raised in static setup because
-     * that will break the amount of target method count.
-     */
-    private static Exception sSetUpClassException;
-
-    @Parameterized.Parameter(0)
-    public int intervalBetweenOperations;
-
-    @Parameterized.Parameters(name = "interval{0}ms")
-    public static Collection<Object[]> getParameters() {
-        return Arrays.asList(new Object[][] {
-                { 0 },
-                { 100 },
-                { 300 },
-        });
-    }
-
-    @BeforeClass
-    public static void setUpClass() {
-        // Get the permission to invoke startRecentsActivity.
-        getUiAutomation().adoptShellPermissionIdentity();
-
-        final Context context = getInstrumentation().getContext();
-        final PackageManager pm = context.getPackageManager();
-        final ComponentName defaultHome = pm.getHomeActivities(new ArrayList<>());
-
-        try {
-            final ComponentName recentsComponent =
-                    ComponentName.unflattenFromString(context.getResources().getString(
-                            com.android.internal.R.string.config_recentsComponentName));
-            final int enabledState = pm.getComponentEnabledSetting(recentsComponent);
-            Assume.assumeThat(enabledState, anyOf(
-                    is(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT),
-                    is(PackageManager.COMPONENT_ENABLED_STATE_ENABLED)));
-
-            final boolean homeIsRecents =
-                    recentsComponent.getPackageName().equals(defaultHome.getPackageName());
-            sRecentsIntent =
-                    new Intent().setComponent(homeIsRecents ? defaultHome : recentsComponent);
-        } catch (Exception e) {
-            sSetUpClassException = e;
-        }
-    }
-
-    @AfterClass
-    public static void tearDownClass() {
-        sSetUpClassException = null;
-        try {
-            // Recents activity may stop app switches. Restore the state to avoid affecting
-            // the next test.
-            ActivityManager.resumeAppSwitches();
-        } catch (RemoteException ignored) {
-        }
-        getUiAutomation().dropShellPermissionIdentity();
-    }
-
-    @Before
-    public void setUp() {
-        Assume.assumeNoException(sSetUpClassException);
-    }
-
-    /** Simulate the timing of touch. */
-    private void makeInterval() {
-        SystemClock.sleep(intervalBetweenOperations);
-    }
-
-    /**
-     * <pre>
-     * Steps:
-     * (1) Start recents activity (only make it visible).
-     * (2) Finish animation, take turns to execute (a), (b).
-     *     (a) Move recents activity to top.
-     * ({@link com.android.server.wm.RecentsAnimationController#REORDER_MOVE_TO_TOP})
-     *         Move test app to top by startActivityFromRecents.
-     *     (b) Cancel (it is similar to swipe a little distance and give up to enter recents).
-     * ({@link com.android.server.wm.RecentsAnimationController#REORDER_MOVE_TO_ORIGINAL_POSITION})
-     * (3) Loop (1).
-     * </pre>
-     */
-    @Test
-    @ManualBenchmarkTest(
-            warmupDurationNs = TIME_1_S_IN_NS,
-            targetTestDurationNs = TIME_5_S_IN_NS,
-            statsReport = @StatsReport(flags = StatsReport.FLAG_ITERATION | StatsReport.FLAG_MEAN
-                    | StatsReport.FLAG_COEFFICIENT_VAR))
-    public void testRecentsAnimation() throws Throwable {
-        final ManualBenchmarkState state = mPerfStatusReporter.getBenchmarkState();
-        state.setCustomizedIterations(getProfilingIterations(), this);
-        final IActivityTaskManager atm = ActivityTaskManager.getService();
-
-        final ArrayList<Pair<String, Boolean>> finishCases = new ArrayList<>();
-        // Real launch the recents activity.
-        finishCases.add(new Pair<>("finishMoveToTop", true));
-        // Return to the original top.
-        finishCases.add(new Pair<>("finishCancel", false));
-
-        // Ensure startRecentsActivity won't be called before finishing the animation.
-        final Semaphore recentsSemaphore = new Semaphore(1);
-
-        final int testActivityTaskId = mActivityRule.getActivity().getTaskId();
-        final IRecentsAnimationRunner.Stub anim = new IRecentsAnimationRunner.Stub() {
-            int mIteration;
-
-            @Override
-            public void onAnimationStart(IRecentsAnimationController controller,
-                    RemoteAnimationTarget[] apps, RemoteAnimationTarget[] wallpapers,
-                    Rect homeContentInsets, Rect minimizedHomeBounds) throws RemoteException {
-                final Pair<String, Boolean> finishCase = finishCases.get(mIteration++ % 2);
-                final boolean moveRecentsToTop = finishCase.second;
-                makeInterval();
-
-                long startTime = SystemClock.elapsedRealtimeNanos();
-                controller.finish(moveRecentsToTop, false /* sendUserLeaveHint */);
-                final long elapsedTimeNsOfFinish = SystemClock.elapsedRealtimeNanos() - startTime;
-                mMeasuredTimeNs += elapsedTimeNsOfFinish;
-                state.addExtraResult(finishCase.first, elapsedTimeNsOfFinish);
-
-                if (moveRecentsToTop) {
-                    mActivityRule.waitForIdleSync(Stage.STOPPED);
-
-                    startTime = SystemClock.elapsedRealtimeNanos();
-                    atm.startActivityFromRecents(testActivityTaskId, null /* options */);
-                    final long elapsedTimeNs = SystemClock.elapsedRealtimeNanos() - startTime;
-                    mMeasuredTimeNs += elapsedTimeNs;
-                    state.addExtraResult("startFromRecents", elapsedTimeNs);
-
-                    mActivityRule.waitForIdleSync(Stage.RESUMED);
-                }
-
-                makeInterval();
-                recentsSemaphore.release();
-            }
-
-            @Override
-            public void onAnimationCanceled(int[] taskIds, TaskSnapshot[] taskSnapshots)
-                    throws RemoteException {
-                Assume.assumeNoException(
-                        new AssertionError("onAnimationCanceled should not be called"));
-            }
-
-            @Override
-            public void onTasksAppeared(RemoteAnimationTarget[] app) throws RemoteException {
-                /* no-op */
-            }
-        };
-
-        recentsSemaphore.tryAcquire();
-        while (state.keepRunning(mMeasuredTimeNs)) {
-            mMeasuredTimeNs = 0;
-
-            final long startTime = SystemClock.elapsedRealtimeNanos();
-            atm.startRecentsActivity(sRecentsIntent, 0 /* eventTime */, anim);
-            final long elapsedTimeNsOfStart = SystemClock.elapsedRealtimeNanos() - startTime;
-            mMeasuredTimeNs += elapsedTimeNsOfStart;
-            state.addExtraResult("start", elapsedTimeNsOfStart);
-
-            // Ensure the animation callback is done.
-            Assume.assumeTrue(recentsSemaphore.tryAcquire(
-                    sIsProfilingMethod() ? 10 * TIME_5_S_IN_NS : TIME_5_S_IN_NS,
-                    TimeUnit.NANOSECONDS));
-        }
-    }
-
-    @Override
-    public void onStart(int iteration) {
-        startProfiling(RecentsAnimationPerfTest.class.getSimpleName()
-                + "_interval_" + intervalBetweenOperations
-                + "_MethodTracing_" + iteration + ".trace");
-    }
-
-    @Override
-    public void onFinished(int iteration) {
-        stopProfiling();
-    }
-}
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java b/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java
index d5315da..8494326 100644
--- a/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java
+++ b/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java
@@ -52,9 +52,9 @@
 import android.content.res.Resources;
 import android.os.Binder;
 import android.os.ParcelFileDescriptor;
+import android.os.Process;
 import android.os.RevocableFileDescriptor;
 import android.os.UserHandle;
-import android.permission.PermissionManager;
 import android.system.ErrnoException;
 import android.system.Os;
 import android.util.ArrayMap;
@@ -298,8 +298,8 @@
                 }
             }
 
-            final boolean canCallerAccessBlobsAcrossUsers = checkCallerCanAccessBlobsAcrossUsers(
-                    callingPackage, callingUserId);
+            final boolean canCallerAccessBlobsAcrossUsers =
+                    checkCallerCanAccessBlobsAcrossUsers(callingUid);
             if (!canCallerAccessBlobsAcrossUsers) {
                 return false;
             }
@@ -325,12 +325,11 @@
         return false;
     }
 
-    private static boolean checkCallerCanAccessBlobsAcrossUsers(
-            String callingPackage, int callingUserId) {
+    private boolean checkCallerCanAccessBlobsAcrossUsers(int callingUid) {
         final long token = Binder.clearCallingIdentity();
         try {
-            return PermissionManager.checkPackageNamePermission(ACCESS_BLOBS_ACROSS_USERS,
-                    callingPackage, callingUserId) == PackageManager.PERMISSION_GRANTED;
+            return mContext.checkPermission(ACCESS_BLOBS_ACROSS_USERS,
+                    Process.INVALID_PID, callingUid) == PackageManager.PERMISSION_GRANTED;
         } finally {
             Binder.restoreCallingIdentity(token);
         }
diff --git a/apex/jobscheduler/framework/java/android/app/IAlarmManager.aidl b/apex/jobscheduler/framework/java/android/app/IAlarmManager.aidl
index a46e697..80d2c5d 100644
--- a/apex/jobscheduler/framework/java/android/app/IAlarmManager.aidl
+++ b/apex/jobscheduler/framework/java/android/app/IAlarmManager.aidl
@@ -33,8 +33,10 @@
     void set(String callingPackage, int type, long triggerAtTime, long windowLength,
             long interval, int flags, in PendingIntent operation, in IAlarmListener listener,
             String listenerTag, in WorkSource workSource, in AlarmManager.AlarmClockInfo alarmClock);
+    @EnforcePermission("SET_TIME")
     @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
     boolean setTime(long millis);
+    @EnforcePermission("SET_TIME_ZONE")
     void setTimeZone(String zone);
     void remove(in PendingIntent operation, in IAlarmListener listener);
     void removeAll(String packageName);
@@ -43,5 +45,6 @@
     AlarmManager.AlarmClockInfo getNextAlarmClock(int userId);
     boolean canScheduleExactAlarms(String packageName);
     boolean hasScheduleExactAlarm(String packageName, int userId);
+    @EnforcePermission("DUMP")
     int getConfigVersion();
 }
diff --git a/apex/jobscheduler/framework/java/android/app/job/JobInfo.java b/apex/jobscheduler/framework/java/android/app/job/JobInfo.java
index 526e63c..3a05323 100644
--- a/apex/jobscheduler/framework/java/android/app/job/JobInfo.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobInfo.java
@@ -1817,6 +1817,8 @@
         /**
          * Specify that this job should recur with the provided interval and flex. The job can
          * execute at any time in a window of flex length at the end of the period.
+         * If the constraints are not satisfied within the window,
+         * the job will wait until the constraints are satisfied.
          * @param intervalMillis Millisecond interval for which this job will repeat. A minimum
          *                       value of {@link #getMinPeriodMillis()} is enforced.
          * @param flexMillis Millisecond flex for this job. Flex is clamped to be at least
diff --git a/apex/jobscheduler/framework/java/android/app/job/JobParameters.java b/apex/jobscheduler/framework/java/android/app/job/JobParameters.java
index bf4f9a8..f1403bd5 100644
--- a/apex/jobscheduler/framework/java/android/app/job/JobParameters.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobParameters.java
@@ -438,7 +438,10 @@
      * For jobs with {@link android.app.job.JobInfo.Builder#setOverrideDeadline(long)} set, this
      * provides an easy way to tell whether the job is being executed due to the deadline
      * expiring. Note: If the job is running because its deadline expired, it implies that its
-     * constraints will not be met.
+     * constraints will not be met. However,
+     * {@link android.app.job.JobInfo.Builder#setPeriodic(boolean) periodic jobs} will only ever
+     * run when their constraints are satisfied, therefore, the constraints will still be satisfied
+     * for a periodic job even if the deadline has expired.
      */
     public boolean isOverrideDeadlineExpired() {
         return overrideDeadlineExpired;
diff --git a/apex/jobscheduler/framework/java/android/app/job/JobService.java b/apex/jobscheduler/framework/java/android/app/job/JobService.java
index 3b5f11b..29afb27 100644
--- a/apex/jobscheduler/framework/java/android/app/job/JobService.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobService.java
@@ -40,10 +40,26 @@
  * <p>This service executes each incoming job on a {@link android.os.Handler} running on your
  * application's main thread. This means that you <b>must</b> offload your execution logic to
  * another thread/handler/{@link android.os.AsyncTask} of your choosing. Not doing so will result
- * in blocking any future callbacks from the JobManager - specifically
+ * in blocking any future callbacks from the JobScheduler - specifically
  * {@link #onStopJob(android.app.job.JobParameters)}, which is meant to inform you that the
  * scheduling requirements are no longer being met.</p>
  *
+ * <p class="note">
+ * Since the introduction of JobScheduler, if an app did not return from
+ * {@link #onStartJob(JobParameters)} within several seconds, JobScheduler would consider the app
+ * unresponsive and clean up job execution. In such cases, the app was no longer considered
+ * to be running a job and therefore did not have any of the job lifecycle guarantees outlined
+ * in {@link JobScheduler}. However, prior to Android version
+ * {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE}, the failure and cleanup were silent
+ * and apps had no indication that they no longer had job lifecycle guarantees.
+ * Starting with Android version {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE},
+ * JobScheduler will explicitly trigger an ANR in such cases so that apps and developers
+ * can be aware of the issue.
+ * Similar behavior applies to the return time from {@link #onStopJob(JobParameters)} as well.
+ * <br /> <br />
+ * If you see ANRs, then the app may be doing too much work on the UI thread. Ensure that
+ * potentially long operations are moved to a worker thread.
+ *
  * <p>As a subclass of {@link Service}, there will only be one active instance of any JobService
  * subclasses, regardless of job ID. This means that if you schedule multiple jobs with different
  * job IDs but using the same JobService class, that JobService may receive multiple calls to
@@ -240,7 +256,7 @@
      * @param params The parameters identifying this job, similar to what was supplied to the job in
      *               the {@link #onStartJob(JobParameters)} callback, but with the stop reason
      *               included.
-     * @return {@code true} to indicate to the JobManager whether you'd like to reschedule
+     * @return {@code true} to indicate to the JobScheduler whether you'd like to reschedule
      * this job based on the retry criteria provided at job creation-time; or {@code false}
      * to end the job entirely (or, for a periodic job, to reschedule it according to its
      * requested periodic criteria). Regardless of the value returned, your job must stop executing.
diff --git a/apex/jobscheduler/framework/java/android/os/IDeviceIdleController.aidl b/apex/jobscheduler/framework/java/android/os/IDeviceIdleController.aidl
index 9d18dfe..256b68f 100644
--- a/apex/jobscheduler/framework/java/android/os/IDeviceIdleController.aidl
+++ b/apex/jobscheduler/framework/java/android/os/IDeviceIdleController.aidl
@@ -47,7 +47,6 @@
     long addPowerSaveTempWhitelistAppForMms(String name, int userId, int reasonCode, String reason);
     long addPowerSaveTempWhitelistAppForSms(String name, int userId, int reasonCode, String reason);
     long whitelistAppTemporarily(String name, int userId, int reasonCode, String reason);
+    @EnforcePermission("DEVICE_POWER")
     void exitIdle(String reason);
-    int setPreIdleTimeoutMode(int Mode);
-    void resetPreIdleTimeoutMode();
 }
diff --git a/apex/jobscheduler/framework/java/android/os/WearModeManagerInternal.java b/apex/jobscheduler/framework/java/android/os/WearModeManagerInternal.java
new file mode 100644
index 0000000..9699757
--- /dev/null
+++ b/apex/jobscheduler/framework/java/android/os/WearModeManagerInternal.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.os;
+
+import android.annotation.CallbackExecutor;
+import android.annotation.NonNull;
+import android.annotation.StringDef;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.concurrent.Executor;
+import java.util.function.Consumer;
+
+/**
+ * Mode Manager local service interface.
+ * Example usage: LocalServices.get(WearModeManagerInternal.class).
+ *
+ * TODO(b/288115060): consolidate with {@link com.android.server.policy.WearModeServiceInternal}
+ *
+ * @hide
+ */
+public interface WearModeManagerInternal {
+
+    /**
+     * Mode manager quick doze request identifier.
+     *
+     * <p>Unique identifier that can be used as identifier parameter in
+     * registerInternalStateObserver
+     * to listen to changes in quick doze request state from mode manager.
+     *
+     * TODO(b/288276510): convert to int constant
+     */
+    String QUICK_DOZE_REQUEST_IDENTIFIER = "quick_doze_request";
+
+    /**
+     * StringDef for Mode manager identifiers.
+     *
+     * @hide
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @StringDef({
+            QUICK_DOZE_REQUEST_IDENTIFIER
+    })
+    @Target(ElementType.TYPE_USE)
+    @interface Identifier {
+    }
+
+    /**
+     * Method to register a callback in Mode manager.
+     *
+     * <p>Callback is executed when there is a change of active state for the
+     * provided identifier.
+     *
+     * <p>Mode manager has active states and configured states where active state is the state of a
+     * mode/feature as reflected on the device,
+     * configured state refers to the configured value of the state of the mode / feature.
+     * For e.g.: Quick doze might be configured to be disabled by default but in certain modes, it
+     * can be overridden to be enabled. At that point active=enabled, configured=disabled.
+     *
+     * <p>
+     *
+     * @param identifier Observer listens for changes to this {@link Identifier}
+     * @param executor   Executor used to execute the callback.
+     * @param callback   Boolean consumer callback.
+     */
+    <T> void addActiveStateChangeListener(@NonNull @Identifier String identifier,
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull Consumer<T> callback);
+}
diff --git a/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java b/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
index 8316a26..1be07fd 100644
--- a/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
+++ b/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
@@ -23,6 +23,7 @@
 import static android.os.Process.INVALID_UID;
 
 import android.Manifest;
+import android.annotation.EnforcePermission;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SuppressLint;
@@ -78,6 +79,7 @@
 import android.os.SystemClock;
 import android.os.Trace;
 import android.os.UserHandle;
+import android.os.WearModeManagerInternal;
 import android.provider.DeviceConfig;
 import android.telephony.TelephonyCallback;
 import android.telephony.TelephonyManager;
@@ -125,6 +127,7 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
 /**
@@ -369,6 +372,12 @@
     private Location mLastGenericLocation;
     @GuardedBy("this")
     private Location mLastGpsLocation;
+    @GuardedBy("this")
+    private boolean mBatterySaverEnabled;
+    @GuardedBy("this")
+    private boolean mModeManagerRequestedQuickDoze;
+    @GuardedBy("this")
+    private boolean mForceModeManagerQuickDozeRequest;
 
     /** Time in the elapsed realtime timebase when this listener last received a motion event. */
     @GuardedBy("this")
@@ -427,20 +436,7 @@
     private static final int ACTIVE_REASON_FORCED = 6;
     private static final int ACTIVE_REASON_ALARM = 7;
     private static final int ACTIVE_REASON_EMERGENCY_CALL = 8;
-    @VisibleForTesting
-    static final int SET_IDLE_FACTOR_RESULT_UNINIT = -1;
-    @VisibleForTesting
-    static final int SET_IDLE_FACTOR_RESULT_IGNORED = 0;
-    @VisibleForTesting
-    static final int SET_IDLE_FACTOR_RESULT_OK = 1;
-    @VisibleForTesting
-    static final int SET_IDLE_FACTOR_RESULT_NOT_SUPPORT = 2;
-    @VisibleForTesting
-    static final int SET_IDLE_FACTOR_RESULT_INVALID = 3;
-    @VisibleForTesting
-    static final long MIN_STATE_STEP_ALARM_CHANGE = 60 * 1000;
-    @VisibleForTesting
-    static final float MIN_PRE_IDLE_FACTOR_CHANGE = 0.05f;
+    private static final int ACTIVE_REASON_MODE_MANAGER = 9;
 
     @VisibleForTesting
     static String stateToString(int state) {
@@ -523,8 +519,6 @@
      */
     @GuardedBy("this")
     private long mMaintenanceStartTime;
-    @GuardedBy("this")
-    private long mIdleStartTime;
 
     @GuardedBy("this")
     private int mActiveIdleOpCount;
@@ -537,17 +531,6 @@
     @GuardedBy("this")
     private boolean mAlarmsActive;
 
-    /* Factor to apply to INACTIVE_TIMEOUT and IDLE_AFTER_INACTIVE_TIMEOUT in order to enter
-     * STATE_IDLE faster or slower. Don't apply this to SENSING_TIMEOUT or LOCATING_TIMEOUT because:
-     *   - Both of them are shorter
-     *   - Device sensor might take time be to become be stabilized
-     * Also don't apply the factor if the device is in motion because device motion provides a
-     * stronger signal than a prediction algorithm.
-     */
-    @GuardedBy("this")
-    private float mPreIdleFactor;
-    @GuardedBy("this")
-    private float mLastPreIdleFactor;
     @GuardedBy("this")
     private int mActiveReason;
 
@@ -851,6 +834,36 @@
     }
 
     @VisibleForTesting
+    class ModeManagerQuickDozeRequestConsumer implements Consumer<Boolean> {
+        @Override
+        public void accept(Boolean enabled) {
+            Slog.d(TAG, "Mode manager quick doze request: " + enabled);
+            synchronized (DeviceIdleController.this) {
+                if (!mForceModeManagerQuickDozeRequest
+                        && mModeManagerRequestedQuickDoze != enabled) {
+                    mModeManagerRequestedQuickDoze = enabled;
+                    onModeManagerRequestChangedLocked();
+                }
+            }
+        }
+
+        @GuardedBy("DeviceIdleController.this")
+        public void onModeManagerRequestChangedLocked() {
+            // Get into quick doze faster when mode manager requests instead of taking
+            // traditional multi-stage approach.
+            updateQuickDozeFlagLocked();
+            if (!mModeManagerRequestedQuickDoze && !mBatterySaverEnabled) {
+                mActiveReason = ACTIVE_REASON_MODE_MANAGER;
+                becomeActiveLocked("mode_manager", Process.myUid());
+            }
+        }
+    }
+
+    @VisibleForTesting
+    final ModeManagerQuickDozeRequestConsumer mModeManagerQuickDozeRequestConsumer =
+            new ModeManagerQuickDozeRequestConsumer();
+
+    @VisibleForTesting
     final class MotionListener extends TriggerEventListener
             implements SensorEventListener {
 
@@ -1010,11 +1023,8 @@
          * exit doze. Default = true
          */
         private static final String KEY_WAIT_FOR_UNLOCK = "wait_for_unlock";
-        private static final String KEY_PRE_IDLE_FACTOR_LONG =
-                "pre_idle_factor_long";
-        private static final String KEY_PRE_IDLE_FACTOR_SHORT =
-                "pre_idle_factor_short";
         private static final String KEY_USE_WINDOW_ALARMS = "use_window_alarms";
+        private static final String KEY_USE_MODE_MANAGER = "use_mode_manager";
 
         private long mDefaultFlexTimeShort =
                 !COMPRESS_TIME ? 60 * 1000L : 5 * 1000L;
@@ -1073,9 +1083,8 @@
         private long mDefaultSmsTempAppAllowlistDurationMs = 20 * 1000L;
         private long mDefaultNotificationAllowlistDurationMs = 30 * 1000L;
         private boolean mDefaultWaitForUnlock = true;
-        private float mDefaultPreIdleFactorLong = 1.67f;
-        private float mDefaultPreIdleFactorShort = .33f;
         private boolean mDefaultUseWindowAlarms = true;
+        private boolean mDefaultUseModeManager = false;
 
         /**
          * A somewhat short alarm window size that we will tolerate for various alarm timings.
@@ -1308,16 +1317,6 @@
          */
         public long NOTIFICATION_ALLOWLIST_DURATION_MS = mDefaultNotificationAllowlistDurationMs;
 
-        /**
-         * Pre idle time factor use to make idle delay longer
-         */
-        public float PRE_IDLE_FACTOR_LONG = mDefaultPreIdleFactorLong;
-
-        /**
-         * Pre idle time factor use to make idle delay shorter
-         */
-        public float PRE_IDLE_FACTOR_SHORT = mDefaultPreIdleFactorShort;
-
         public boolean WAIT_FOR_UNLOCK = mDefaultWaitForUnlock;
 
         /**
@@ -1326,6 +1325,11 @@
          */
         public boolean USE_WINDOW_ALARMS = mDefaultUseWindowAlarms;
 
+        /**
+         * Whether to use an on/off body signal to affect state transition policy.
+         */
+        public boolean USE_MODE_MANAGER = mDefaultUseModeManager;
+
         private final boolean mSmallBatteryDevice;
 
         public Constants() {
@@ -1430,12 +1434,10 @@
                     com.android.internal.R.integer.device_idle_notification_allowlist_duration_ms);
             mDefaultWaitForUnlock = res.getBoolean(
                     com.android.internal.R.bool.device_idle_wait_for_unlock);
-            mDefaultPreIdleFactorLong = res.getFloat(
-                    com.android.internal.R.integer.device_idle_pre_idle_factor_long);
-            mDefaultPreIdleFactorShort = res.getFloat(
-                    com.android.internal.R.integer.device_idle_pre_idle_factor_short);
             mDefaultUseWindowAlarms = res.getBoolean(
                     com.android.internal.R.bool.device_idle_use_window_alarms);
+            mDefaultUseModeManager = res.getBoolean(
+                    com.android.internal.R.bool.device_idle_use_mode_manager);
 
             FLEX_TIME_SHORT = mDefaultFlexTimeShort;
             LIGHT_IDLE_AFTER_INACTIVE_TIMEOUT = mDefaultLightIdleAfterInactiveTimeout;
@@ -1468,9 +1470,8 @@
             SMS_TEMP_APP_ALLOWLIST_DURATION_MS = mDefaultSmsTempAppAllowlistDurationMs;
             NOTIFICATION_ALLOWLIST_DURATION_MS = mDefaultNotificationAllowlistDurationMs;
             WAIT_FOR_UNLOCK = mDefaultWaitForUnlock;
-            PRE_IDLE_FACTOR_LONG = mDefaultPreIdleFactorLong;
-            PRE_IDLE_FACTOR_SHORT = mDefaultPreIdleFactorShort;
             USE_WINDOW_ALARMS = mDefaultUseWindowAlarms;
+            USE_MODE_MANAGER = mDefaultUseModeManager;
         }
 
         private long getTimeout(long defTimeout, long compTimeout) {
@@ -1628,18 +1629,14 @@
                             WAIT_FOR_UNLOCK = properties.getBoolean(
                                     KEY_WAIT_FOR_UNLOCK, mDefaultWaitForUnlock);
                             break;
-                        case KEY_PRE_IDLE_FACTOR_LONG:
-                            PRE_IDLE_FACTOR_LONG = properties.getFloat(
-                                    KEY_PRE_IDLE_FACTOR_LONG, mDefaultPreIdleFactorLong);
-                            break;
-                        case KEY_PRE_IDLE_FACTOR_SHORT:
-                            PRE_IDLE_FACTOR_SHORT = properties.getFloat(
-                                    KEY_PRE_IDLE_FACTOR_SHORT, mDefaultPreIdleFactorShort);
-                            break;
                         case KEY_USE_WINDOW_ALARMS:
                             USE_WINDOW_ALARMS = properties.getBoolean(
                                     KEY_USE_WINDOW_ALARMS, mDefaultUseWindowAlarms);
                             break;
+                        case KEY_USE_MODE_MANAGER:
+                            USE_MODE_MANAGER = properties.getBoolean(
+                                    KEY_USE_MODE_MANAGER, mDefaultUseModeManager);
+                            break;
                         default:
                             Slog.e(TAG, "Unknown configuration key: " + name);
                             break;
@@ -1774,14 +1771,11 @@
             pw.print("    "); pw.print(KEY_WAIT_FOR_UNLOCK); pw.print("=");
             pw.println(WAIT_FOR_UNLOCK);
 
-            pw.print("    "); pw.print(KEY_PRE_IDLE_FACTOR_LONG); pw.print("=");
-            pw.println(PRE_IDLE_FACTOR_LONG);
-
-            pw.print("    "); pw.print(KEY_PRE_IDLE_FACTOR_SHORT); pw.print("=");
-            pw.println(PRE_IDLE_FACTOR_SHORT);
-
             pw.print("    "); pw.print(KEY_USE_WINDOW_ALARMS); pw.print("=");
             pw.println(USE_WINDOW_ALARMS);
+
+            pw.print("    "); pw.print(KEY_USE_MODE_MANAGER); pw.print("=");
+            pw.println(USE_MODE_MANAGER);
         }
     }
 
@@ -1824,10 +1818,6 @@
     static final int MSG_REPORT_STATIONARY_STATUS = 7;
     private static final int MSG_FINISH_IDLE_OP = 8;
     private static final int MSG_SEND_CONSTRAINT_MONITORING = 10;
-    @VisibleForTesting
-    static final int MSG_UPDATE_PRE_IDLE_TIMEOUT_FACTOR = 11;
-    @VisibleForTesting
-    static final int MSG_RESET_PRE_IDLE_TIMEOUT_FACTOR = 12;
     private static final int MSG_REPORT_TEMP_APP_WHITELIST_CHANGED = 13;
     private static final int MSG_REPORT_TEMP_APP_WHITELIST_ADDED_TO_NPMS = 14;
     private static final int MSG_REPORT_TEMP_APP_WHITELIST_REMOVED_TO_NPMS = 15;
@@ -1974,13 +1964,6 @@
                         constraint.stopMonitoring();
                     }
                 } break;
-                case MSG_UPDATE_PRE_IDLE_TIMEOUT_FACTOR: {
-                    updatePreIdleFactor();
-                } break;
-                case MSG_RESET_PRE_IDLE_TIMEOUT_FACTOR: {
-                    updatePreIdleFactor();
-                    maybeDoImmediateMaintenance("idle factor");
-                } break;
                 case MSG_REPORT_STATIONARY_STATUS: {
                     final DeviceIdleInternal.StationaryListener newListener =
                             (DeviceIdleInternal.StationaryListener) msg.obj;
@@ -2178,9 +2161,9 @@
             return durationMs;
         }
 
+        @EnforcePermission(android.Manifest.permission.DEVICE_POWER)
         @Override public void exitIdle(String reason) {
-            getContext().enforceCallingOrSelfPermission(Manifest.permission.DEVICE_POWER,
-                    null);
+            exitIdle_enforcePermission();
             final long ident = Binder.clearCallingIdentity();
             try {
                 exitIdleInternal(reason);
@@ -2189,28 +2172,6 @@
             }
         }
 
-        @Override public int setPreIdleTimeoutMode(int mode) {
-            getContext().enforceCallingOrSelfPermission(Manifest.permission.DEVICE_POWER,
-                    null);
-            final long ident = Binder.clearCallingIdentity();
-            try {
-                return DeviceIdleController.this.setPreIdleTimeoutMode(mode);
-            } finally {
-                Binder.restoreCallingIdentity(ident);
-            }
-        }
-
-        @Override public void resetPreIdleTimeoutMode() {
-            getContext().enforceCallingOrSelfPermission(Manifest.permission.DEVICE_POWER,
-                    null);
-            final long ident = Binder.clearCallingIdentity();
-            try {
-                DeviceIdleController.this.resetPreIdleTimeoutMode();
-            } finally {
-                Binder.restoreCallingIdentity(ident);
-            }
-        }
-
         @Override protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
             DeviceIdleController.this.dump(fd, pw, args);
         }
@@ -2579,8 +2540,6 @@
             moveToStateLocked(STATE_ACTIVE, "boot");
             moveToLightStateLocked(LIGHT_STATE_ACTIVE, "boot");
             mInactiveTimeout = mConstants.INACTIVE_TIMEOUT;
-            mPreIdleFactor = 1.0f;
-            mLastPreIdleFactor = 1.0f;
         }
 
         mBinderService = new BinderService();
@@ -2681,15 +2640,26 @@
                         mPowerSaveWhitelistAllAppIdArray, mPowerSaveWhitelistExceptIdleAppIdArray);
                 mLocalPowerManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray);
 
+                if (mConstants.USE_MODE_MANAGER) {
+                    WearModeManagerInternal modeManagerInternal = LocalServices.getService(
+                            WearModeManagerInternal.class);
+                    if (modeManagerInternal != null) {
+                        modeManagerInternal.addActiveStateChangeListener(
+                                WearModeManagerInternal.QUICK_DOZE_REQUEST_IDENTIFIER,
+                                AppSchedulingModuleThread.getExecutor(),
+                                mModeManagerQuickDozeRequestConsumer);
+                    }
+                }
                 mLocalPowerManager.registerLowPowerModeObserver(ServiceType.QUICK_DOZE,
                         state -> {
                             synchronized (DeviceIdleController.this) {
-                                updateQuickDozeFlagLocked(state.batterySaverEnabled);
+                                mBatterySaverEnabled = state.batterySaverEnabled;
+                                updateQuickDozeFlagLocked();
                             }
                         });
-                updateQuickDozeFlagLocked(
-                        mLocalPowerManager.getLowPowerState(
-                                ServiceType.QUICK_DOZE).batterySaverEnabled);
+                mBatterySaverEnabled = mLocalPowerManager.getLowPowerState(
+                        ServiceType.QUICK_DOZE).batterySaverEnabled;
+                updateQuickDozeFlagLocked();
 
                 mLocalActivityTaskManager.registerScreenObserver(mScreenObserver);
 
@@ -3380,6 +3350,18 @@
         }
     }
 
+    /** Calls to {@link #updateQuickDozeFlagLocked(boolean)} by considering appropriate signals. */
+    @GuardedBy("this")
+    private void updateQuickDozeFlagLocked() {
+        if (mConstants.USE_MODE_MANAGER) {
+            // Only disable the quick doze flag when mode manager request is false and
+            // battery saver is off.
+            updateQuickDozeFlagLocked(mModeManagerRequestedQuickDoze || mBatterySaverEnabled);
+        } else {
+            updateQuickDozeFlagLocked(mBatterySaverEnabled);
+        }
+    }
+
     /** Updates the quick doze flag and enters deep doze if appropriate. */
     @VisibleForTesting
     @GuardedBy("this")
@@ -3543,9 +3525,6 @@
                 moveToStateLocked(STATE_INACTIVE, "no activity");
                 resetIdleManagementLocked();
                 long delay = mInactiveTimeout;
-                if (shouldUseIdleTimeoutFactorLocked()) {
-                    delay = (long) (mPreIdleFactor * delay);
-                }
                 if (isUpcomingAlarmClock()) {
                     // If there's an upcoming AlarmClock alarm, we won't go into idle, so
                     // setting a wakeup alarm before the upcoming alarm is futile. Set the idle
@@ -3570,7 +3549,6 @@
     private void resetIdleManagementLocked() {
         mNextIdlePendingDelay = 0;
         mNextIdleDelay = 0;
-        mIdleStartTime = 0;
         mQuickDozeActivatedWhileIdling = false;
         cancelAlarmLocked();
         cancelSensingTimeoutAlarmLocked();
@@ -3766,9 +3744,6 @@
                 // for motion and sleep some more while doing so.
                 startMonitoringMotionLocked();
                 long delay = mConstants.IDLE_AFTER_INACTIVE_TIMEOUT;
-                if (shouldUseIdleTimeoutFactorLocked()) {
-                    delay = (long) (mPreIdleFactor * delay);
-                }
                 scheduleAlarmLocked(delay);
                 moveToStateLocked(STATE_IDLE_PENDING, reason);
                 break;
@@ -3848,7 +3823,6 @@
                         " ms.");
                 mNextIdleDelay = (long)(mNextIdleDelay * mConstants.IDLE_FACTOR);
                 if (DEBUG) Slog.d(TAG, "Setting mNextIdleDelay = " + mNextIdleDelay);
-                mIdleStartTime = SystemClock.elapsedRealtime();
                 mNextIdleDelay = Math.min(mNextIdleDelay, mConstants.MAX_IDLE_TIMEOUT);
                 if (mNextIdleDelay < mConstants.IDLE_TIMEOUT) {
                     mNextIdleDelay = mConstants.IDLE_TIMEOUT;
@@ -3949,130 +3923,6 @@
     }
 
     @VisibleForTesting
-    int setPreIdleTimeoutMode(int mode) {
-        return setPreIdleTimeoutFactor(getPreIdleTimeoutByMode(mode));
-    }
-
-    @VisibleForTesting
-    float getPreIdleTimeoutByMode(int mode) {
-        switch (mode) {
-            case PowerManager.PRE_IDLE_TIMEOUT_MODE_LONG: {
-                return mConstants.PRE_IDLE_FACTOR_LONG;
-            }
-            case PowerManager.PRE_IDLE_TIMEOUT_MODE_SHORT: {
-                return mConstants.PRE_IDLE_FACTOR_SHORT;
-            }
-            case PowerManager.PRE_IDLE_TIMEOUT_MODE_NORMAL: {
-                return 1.0f;
-            }
-            default: {
-                Slog.w(TAG, "Invalid time out factor mode: " + mode);
-                return 1.0f;
-            }
-        }
-    }
-
-    @VisibleForTesting
-    float getPreIdleTimeoutFactor() {
-        synchronized (this) {
-            return mPreIdleFactor;
-        }
-    }
-
-    @VisibleForTesting
-    int setPreIdleTimeoutFactor(float ratio) {
-        synchronized (this) {
-            if (!mDeepEnabled) {
-                if (DEBUG) Slog.d(TAG, "setPreIdleTimeoutFactor: Deep Idle disable");
-                return SET_IDLE_FACTOR_RESULT_NOT_SUPPORT;
-            } else if (ratio <= MIN_PRE_IDLE_FACTOR_CHANGE) {
-                if (DEBUG) Slog.d(TAG, "setPreIdleTimeoutFactor: Invalid input");
-                return SET_IDLE_FACTOR_RESULT_INVALID;
-            } else if (Math.abs(ratio - mPreIdleFactor) < MIN_PRE_IDLE_FACTOR_CHANGE) {
-                if (DEBUG) {
-                    Slog.d(TAG, "setPreIdleTimeoutFactor: New factor same as previous factor");
-                }
-                return SET_IDLE_FACTOR_RESULT_IGNORED;
-            }
-            mLastPreIdleFactor = mPreIdleFactor;
-            mPreIdleFactor = ratio;
-        }
-        if (DEBUG) Slog.d(TAG, "setPreIdleTimeoutFactor: " + ratio);
-        postUpdatePreIdleFactor();
-        return SET_IDLE_FACTOR_RESULT_OK;
-    }
-
-    @VisibleForTesting
-    void resetPreIdleTimeoutMode() {
-        synchronized (this) {
-            mLastPreIdleFactor = mPreIdleFactor;
-            mPreIdleFactor = 1.0f;
-        }
-        if (DEBUG) Slog.d(TAG, "resetPreIdleTimeoutMode to 1.0");
-        postResetPreIdleTimeoutFactor();
-    }
-
-    private void postUpdatePreIdleFactor() {
-        mHandler.sendEmptyMessage(MSG_UPDATE_PRE_IDLE_TIMEOUT_FACTOR);
-    }
-
-    private void postResetPreIdleTimeoutFactor() {
-        mHandler.sendEmptyMessage(MSG_RESET_PRE_IDLE_TIMEOUT_FACTOR);
-    }
-
-    private void updatePreIdleFactor() {
-        synchronized (this) {
-            if (!shouldUseIdleTimeoutFactorLocked()) {
-                return;
-            }
-            if (mState == STATE_INACTIVE || mState == STATE_IDLE_PENDING) {
-                if (mNextAlarmTime == 0) {
-                    return;
-                }
-                long delay = mNextAlarmTime - SystemClock.elapsedRealtime();
-                if (delay < MIN_STATE_STEP_ALARM_CHANGE) {
-                    return;
-                }
-                long newDelay = (long) (delay / mLastPreIdleFactor * mPreIdleFactor);
-                if (Math.abs(delay - newDelay) < MIN_STATE_STEP_ALARM_CHANGE) {
-                    return;
-                }
-                scheduleAlarmLocked(newDelay);
-            }
-        }
-    }
-
-    private void maybeDoImmediateMaintenance(String reason) {
-        synchronized (this) {
-            if (mState == STATE_IDLE) {
-                long duration = SystemClock.elapsedRealtime() - mIdleStartTime;
-                // Trigger an immediate maintenance window if it has been IDLE for long enough.
-                if (duration > mConstants.IDLE_TIMEOUT) {
-                    stepIdleStateLocked(reason);
-                }
-            }
-        }
-    }
-
-    @GuardedBy("this")
-    private boolean shouldUseIdleTimeoutFactorLocked() {
-        // exclude ACTIVE_REASON_MOTION, for exclude device in pocket case
-        if (mActiveReason == ACTIVE_REASON_MOTION) {
-            return false;
-        }
-        return true;
-    }
-
-    /** Must only be used in tests. */
-    @VisibleForTesting
-    void setIdleStartTimeForTest(long idleStartTime) {
-        synchronized (this) {
-            mIdleStartTime = idleStartTime;
-            maybeDoImmediateMaintenance("testing");
-        }
-    }
-
-    @VisibleForTesting
     long getNextAlarmTime() {
         synchronized (this) {
             return mNextAlarmTime;
@@ -4610,8 +4460,10 @@
         pw.println("  force-inactive");
         pw.println("    Force to be inactive, ready to freely step idle states.");
         pw.println("  unforce");
-        pw.println("    Resume normal functioning after force-idle or force-inactive.");
-        pw.println("  get [light|deep|force|screen|charging|network]");
+        pw.println(
+                "    Resume normal functioning after force-idle or force-inactive or "
+                        + "force-modemanager-quickdoze.");
+        pw.println("  get [light|deep|force|screen|charging|network|offbody|forcebodystate]");
         pw.println("    Retrieve the current given state.");
         pw.println("  disable [light|deep|all]");
         pw.println("    Completely disable device idle mode.");
@@ -4645,11 +4497,9 @@
                 + "and any [-d] is ignored");
         pw.println("  motion");
         pw.println("    Simulate a motion event to bring the device out of deep doze");
-        pw.println("  pre-idle-factor [0|1|2]");
-        pw.println("    Set a new factor to idle time before step to idle"
-                + "(inactive_to and idle_after_inactive_to)");
-        pw.println("  reset-pre-idle-factor");
-        pw.println("    Reset factor to idle time to default");
+        pw.println("  force-modemanager-quickdoze [true|false]");
+        pw.println("    Simulate mode manager request to enable (true) or disable (false) "
+                + "quick doze. Mode manager changes will be ignored until unforce is called.");
     }
 
     class Shell extends ShellCommand {
@@ -4781,6 +4631,9 @@
                     pw.print(lightStateToString(mLightState));
                     pw.print(", deep state: ");
                     pw.println(stateToString(mState));
+                    mForceModeManagerQuickDozeRequest = false;
+                    pw.println("mForceModeManagerQuickDozeRequest: "
+                            + mForceModeManagerQuickDozeRequest);
                 } finally {
                     Binder.restoreCallingIdentity(token);
                 }
@@ -4801,6 +4654,12 @@
                             case "screen": pw.println(mScreenOn); break;
                             case "charging": pw.println(mCharging); break;
                             case "network": pw.println(mNetworkConnected); break;
+                            case "modemanagerquick":
+                                pw.println(mModeManagerRequestedQuickDoze);
+                                break;
+                            case "forcemodemanagerquick":
+                                pw.println(mForceModeManagerQuickDozeRequest);
+                                break;
                             default: pw.println("Unknown get option: " + arg); break;
                         }
                     } finally {
@@ -5097,51 +4956,31 @@
                     Binder.restoreCallingIdentity(token);
                 }
             }
-        } else if ("pre-idle-factor".equals(cmd)) {
+        } else if ("force-modemanager-quickdoze".equals(cmd)) {
             getContext().enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER,
                     null);
-            synchronized (this) {
-                final long token = Binder.clearCallingIdentity();
-                int ret  = SET_IDLE_FACTOR_RESULT_UNINIT;
-                try {
-                    String arg = shell.getNextArg();
-                    boolean valid = false;
-                    int mode = 0;
-                    if (arg != null) {
-                        mode = Integer.parseInt(arg);
-                        ret = setPreIdleTimeoutMode(mode);
-                        if (ret == SET_IDLE_FACTOR_RESULT_OK) {
-                            pw.println("pre-idle-factor: " + mode);
-                            valid = true;
-                        } else if (ret == SET_IDLE_FACTOR_RESULT_NOT_SUPPORT) {
-                            valid = true;
-                            pw.println("Deep idle not supported");
-                        } else if (ret == SET_IDLE_FACTOR_RESULT_IGNORED) {
-                            valid = true;
-                            pw.println("Idle timeout factor not changed");
-                        }
+            String arg = shell.getNextArg();
+
+            if ("true".equalsIgnoreCase(arg) || "false".equalsIgnoreCase(arg)) {
+                boolean enabled = Boolean.parseBoolean(arg);
+
+                synchronized (DeviceIdleController.this) {
+                    final long token = Binder.clearCallingIdentity();
+                    try {
+                        mForceModeManagerQuickDozeRequest = true;
+                        pw.println("mForceModeManagerQuickDozeRequest: "
+                                + mForceModeManagerQuickDozeRequest);
+                        mModeManagerRequestedQuickDoze = enabled;
+                        pw.println("mModeManagerRequestedQuickDoze: "
+                                + mModeManagerRequestedQuickDoze);
+                        mModeManagerQuickDozeRequestConsumer.onModeManagerRequestChangedLocked();
+                    } finally {
+                        Binder.restoreCallingIdentity(token);
                     }
-                    if (!valid) {
-                        pw.println("Unknown idle timeout factor: " + arg
-                                + ",(error code: " + ret + ")");
-                    }
-                } catch (NumberFormatException e) {
-                    pw.println("Unknown idle timeout factor"
-                            + ",(error code: " + ret + ")");
-                } finally {
-                    Binder.restoreCallingIdentity(token);
                 }
-            }
-        } else if ("reset-pre-idle-factor".equals(cmd)) {
-            getContext().enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER,
-                    null);
-            synchronized (this) {
-                final long token = Binder.clearCallingIdentity();
-                try {
-                    resetPreIdleTimeoutMode();
-                } finally {
-                    Binder.restoreCallingIdentity(token);
-                }
+            } else {
+                pw.println("Provide true or false argument after force-modemanager-quickdoze");
+                return -1;
             }
         } else {
             return shell.handleDefaultCommands(cmd);
@@ -5394,9 +5233,6 @@
             if (mAlarmsActive) {
                 pw.print("  mAlarmsActive="); pw.println(mAlarmsActive);
             }
-            if (Math.abs(mPreIdleFactor - 1.0f) > MIN_PRE_IDLE_FACTOR_CHANGE) {
-                pw.print("  mPreIdleFactor="); pw.println(mPreIdleFactor);
-            }
         }
     }
 
diff --git a/apex/jobscheduler/service/java/com/android/server/alarm/Alarm.java b/apex/jobscheduler/service/java/com/android/server/alarm/Alarm.java
index 4d646de..a720baf 100644
--- a/apex/jobscheduler/service/java/com/android/server/alarm/Alarm.java
+++ b/apex/jobscheduler/service/java/com/android/server/alarm/Alarm.java
@@ -21,6 +21,7 @@
 import static android.app.AlarmManager.RTC;
 import static android.app.AlarmManager.RTC_WAKEUP;
 
+import static com.android.server.alarm.AlarmManagerService.PRIORITY_NORMAL;
 import static com.android.server.alarm.AlarmManagerService.clampPositive;
 
 import android.app.AlarmManager;
@@ -128,8 +129,9 @@
     /** The ultimate delivery time to be used for this alarm */
     private long mWhenElapsed;
     private long mMaxWhenElapsed;
-    public int mExactAllowReason;
-    public AlarmManagerService.PriorityClass priorityClass;
+    public int exactAllowReason;
+    @AlarmManagerService.DispatchPriority
+    public int priorityClass;
     /** Broadcast options to use when delivering this alarm */
     public Bundle mIdleOptions;
     public boolean mUsingReserveQuota;
@@ -158,10 +160,11 @@
         this.uid = uid;
         packageName = pkgName;
         mIdleOptions = idleOptions;
-        mExactAllowReason = exactAllowReason;
+        this.exactAllowReason = exactAllowReason;
         sourcePackage = (operation != null) ? operation.getCreatorPackage() : packageName;
         creatorUid = (operation != null) ? operation.getCreatorUid() : this.uid;
         mUsingReserveQuota = false;
+        priorityClass = PRIORITY_NORMAL;
     }
 
     public static String makeTag(PendingIntent pi, String tag, int type) {
@@ -333,9 +336,9 @@
         }
         ipw.print(" window=");
         TimeUtils.formatDuration(windowLength, ipw);
-        if (mExactAllowReason != EXACT_ALLOW_REASON_NOT_APPLICABLE) {
+        if (exactAllowReason != EXACT_ALLOW_REASON_NOT_APPLICABLE) {
             ipw.print(" exactAllowReason=");
-            ipw.print(exactReasonToString(mExactAllowReason));
+            ipw.print(exactReasonToString(exactAllowReason));
         }
         ipw.print(" repeatInterval=");
         ipw.print(repeatInterval);
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 220aa27..2557c6a 100644
--- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
+++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
@@ -45,7 +45,6 @@
 
 import static com.android.server.SystemClockTime.TIME_CONFIDENCE_HIGH;
 import static com.android.server.SystemTimeZone.TIME_ZONE_CONFIDENCE_HIGH;
-import static com.android.server.SystemTimeZone.getTimeZoneId;
 import static com.android.server.alarm.Alarm.APP_STANDBY_POLICY_INDEX;
 import static com.android.server.alarm.Alarm.BATTERY_SAVER_POLICY_INDEX;
 import static com.android.server.alarm.Alarm.DEVICE_IDLE_POLICY_INDEX;
@@ -70,7 +69,10 @@
 import android.Manifest;
 import android.annotation.CurrentTimeMillisLong;
 import android.annotation.ElapsedRealtimeLong;
+import android.annotation.EnforcePermission;
+import android.annotation.IntDef;
 import android.annotation.NonNull;
+import android.annotation.SuppressLint;
 import android.annotation.UserIdInt;
 import android.app.Activity;
 import android.app.ActivityManagerInternal;
@@ -139,7 +141,6 @@
 import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.annotations.GuardedBy;
-import com.android.internal.annotations.Keep;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.app.IAppOpsCallback;
 import com.android.internal.app.IAppOpsService;
@@ -176,6 +177,8 @@
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -183,7 +186,6 @@
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.Locale;
 import java.util.Set;
 import java.util.TimeZone;
@@ -229,19 +231,6 @@
 
     private static final long TEMPORARY_QUOTA_DURATION = INTERVAL_DAY;
 
-    /*
-     * b/246256335: This compile-time constant controls whether Android attempts to sync the Kernel
-     * time zone offset via settimeofday(null, tz). For <= Android T behavior is the same as
-     * {@code true}, the state for future releases is the same as {@code false}.
-     * It is unlikely anything depends on this, but a compile-time constant has been used to limit
-     * the size of the revert if this proves to be invorrect. The guarded code and associated
-     * methods / native code can be removed after release testing has proved that removing the
-     * behavior doesn't break anything.
-     * TODO(b/246256335): After this change has soaked for a release, remove this constant and
-     * everything it affects.
-     */
-    private static final boolean KERNEL_TIME_ZONE_SYNC_ENABLED = false;
-
     private final Intent mBackgroundIntent
             = new Intent().addFlags(Intent.FLAG_FROM_BACKGROUND);
 
@@ -744,9 +733,6 @@
         @VisibleForTesting
         static final String KEY_MAX_DEVICE_IDLE_FUZZ = "max_device_idle_fuzz";
         @VisibleForTesting
-        static final String KEY_KILL_ON_SCHEDULE_EXACT_ALARM_REVOKED =
-                "kill_on_schedule_exact_alarm_revoked";
-        @VisibleForTesting
         static final String KEY_TEMPORARY_QUOTA_BUMP = "temporary_quota_bump";
         @VisibleForTesting
         static final String KEY_CACHED_LISTENER_REMOVAL_DELAY = "cached_listener_removal_delay";
@@ -789,8 +775,6 @@
         private static final long DEFAULT_MIN_DEVICE_IDLE_FUZZ = 2 * 60_000;
         private static final long DEFAULT_MAX_DEVICE_IDLE_FUZZ = 15 * 60_000;
 
-        private static final boolean DEFAULT_KILL_ON_SCHEDULE_EXACT_ALARM_REVOKED = true;
-
         private static final int DEFAULT_TEMPORARY_QUOTA_BUMP = 0;
 
         private static final boolean DEFAULT_DELAY_NONWAKEUP_ALARMS_WHILE_SCREEN_OFF = true;
@@ -869,13 +853,6 @@
          */
         public long MAX_DEVICE_IDLE_FUZZ = DEFAULT_MAX_DEVICE_IDLE_FUZZ;
 
-        /**
-         * Whether or not to kill app when the permission
-         * {@link Manifest.permission#SCHEDULE_EXACT_ALARM} is revoked.
-         */
-        public boolean KILL_ON_SCHEDULE_EXACT_ALARM_REVOKED =
-                DEFAULT_KILL_ON_SCHEDULE_EXACT_ALARM_REVOKED;
-
         public int USE_TARE_POLICY = EconomyManager.DEFAULT_ENABLE_POLICY_ALARM
                 ? EconomyManager.DEFAULT_ENABLE_TARE_MODE : EconomyManager.ENABLED_MODE_OFF;
 
@@ -927,6 +904,7 @@
                     economyManagerInternal.getEnabledMode(AlarmManagerEconomicPolicy.POLICY_ALARM));
         }
 
+        @SuppressLint("MissingPermission")
         public void updateAllowWhileIdleWhitelistDurationLocked() {
             if (mLastAllowWhileIdleWhitelistDuration != ALLOW_WHILE_IDLE_WHITELIST_DURATION) {
                 mLastAllowWhileIdleWhitelistDuration = ALLOW_WHILE_IDLE_WHITELIST_DURATION;
@@ -1069,11 +1047,6 @@
                                 deviceIdleFuzzBoundariesUpdated = true;
                             }
                             break;
-                        case KEY_KILL_ON_SCHEDULE_EXACT_ALARM_REVOKED:
-                            KILL_ON_SCHEDULE_EXACT_ALARM_REVOKED = properties.getBoolean(
-                                    KEY_KILL_ON_SCHEDULE_EXACT_ALARM_REVOKED,
-                                    DEFAULT_KILL_ON_SCHEDULE_EXACT_ALARM_REVOKED);
-                            break;
                         case KEY_TEMPORARY_QUOTA_BUMP:
                             TEMPORARY_QUOTA_BUMP = properties.getInt(KEY_TEMPORARY_QUOTA_BUMP,
                                     DEFAULT_TEMPORARY_QUOTA_BUMP);
@@ -1317,10 +1290,6 @@
             TimeUtils.formatDuration(MAX_DEVICE_IDLE_FUZZ, pw);
             pw.println();
 
-            pw.print(KEY_KILL_ON_SCHEDULE_EXACT_ALARM_REVOKED,
-                    KILL_ON_SCHEDULE_EXACT_ALARM_REVOKED);
-            pw.println();
-
             pw.print(Settings.Global.ENABLE_TARE,
                     EconomyManager.enabledModeToString(USE_TARE_POLICY));
             pw.println();
@@ -1356,87 +1325,91 @@
 
     Constants mConstants;
 
-    // Alarm delivery ordering bookkeeping
-    static final int PRIO_TICK = 0;
-    static final int PRIO_WAKEUP = 1;
-    static final int PRIO_NORMAL = 2;
+    /** Dispatch priority to use for system alarms. */
+    static final int PRIORITY_SYSTEM = 0;
+    /** Dispatch priority to use for a package that has any wakeup alarm in the pending batch. */
+    static final int PRIORITY_WAKEUP = 1;
+    /** The default dispatch priority to use when no special conditions apply. */
+    static final int PRIORITY_NORMAL = 2;
 
-    final class PriorityClass {
-        int seq;
-        int priority;
+    /**
+     * Priority to assign to alarms in an outgoing batch. Higher priority alarms are considered more
+     * urgent than lower priority ones (smaller value is higher priority). Priorities are assigned
+     * per package, so all alarms in one package will share the same priority in an outgoing batch -
+     * which should be the highest (minimum) priority computed over all its alarms.
+     * This is done to ensure that alarms in the same package preserve their relative ordering.
+     */
+    @IntDef(prefix = "PRIORITY_", value = {
+            PRIORITY_SYSTEM,
+            PRIORITY_WAKEUP,
+            PRIORITY_NORMAL,
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface DispatchPriority {}
 
-        PriorityClass() {
-            seq = mCurrentSeq - 1;
-            priority = PRIO_NORMAL;
+    final Comparator<Alarm> mAlarmDispatchComparator = (lhs, rhs) -> {
+
+        // Alarm to exit device_idle should go out first.
+        final boolean idleUntil1 = (lhs.flags & FLAG_IDLE_UNTIL) != 0;
+        final boolean idleUntil2 = (rhs.flags & FLAG_IDLE_UNTIL) != 0;
+        if (idleUntil1 != idleUntil2) {
+            return idleUntil1 ? -1 : 1;
         }
-    }
 
-    final HashMap<String, PriorityClass> mPriorities = new HashMap<>();
-    int mCurrentSeq = 0;
-
-    final Comparator<Alarm> mAlarmDispatchComparator = new Comparator<Alarm>() {
-        @Override
-        public int compare(Alarm lhs, Alarm rhs) {
-
-            // Alarm to exit device_idle should go out first.
-            final boolean lhsIdleUntil = (lhs.flags & FLAG_IDLE_UNTIL) != 0;
-            final boolean rhsIdleUntil = (rhs.flags & FLAG_IDLE_UNTIL) != 0;
-            if (lhsIdleUntil != rhsIdleUntil) {
-                return lhsIdleUntil ? -1 : 1;
-            }
-
-            // Then, priority class trumps everything.  TICK < WAKEUP < NORMAL
-            if (lhs.priorityClass.priority < rhs.priorityClass.priority) {
-                return -1;
-            } else if (lhs.priorityClass.priority > rhs.priorityClass.priority) {
-                return 1;
-            }
-
-            // within each class, sort by requested delivery time
-            if (lhs.getRequestedElapsed() < rhs.getRequestedElapsed()) {
-                return -1;
-            } else if (lhs.getRequestedElapsed() > rhs.getRequestedElapsed()) {
-                return 1;
-            }
-
-            return 0;
+        // Then, priority class trumps everything.  SYSTEM < WAKEUP < NORMAL
+        if (lhs.priorityClass < rhs.priorityClass) {
+            return -1;
+        } else if (lhs.priorityClass > rhs.priorityClass) {
+            return 1;
         }
+
+        // Within all system alarms, pulling time_tick to the front, as it is time-sensitive.
+        final boolean timeTick1 = (lhs.listener == mTimeTickTrigger);
+        final boolean timeTick2 = (rhs.listener == mTimeTickTrigger);
+        if (timeTick1 != timeTick2) {
+            return timeTick1 ? -1 : 1;
+        }
+
+        // Within each class, sort by requested delivery time
+        if (lhs.getRequestedElapsed() < rhs.getRequestedElapsed()) {
+            return -1;
+        } else if (lhs.getRequestedElapsed() > rhs.getRequestedElapsed()) {
+            return 1;
+        }
+
+        return 0;
     };
 
+    /**
+     * Assigns a {@link DispatchPriority} to each alarm that will be used to order alarms in an
+     * outgoing batch.
+     *
+     * @param alarms The batch of alarms about to be sent.
+     */
     void calculateDeliveryPriorities(ArrayList<Alarm> alarms) {
         final int N = alarms.size();
+
+        // Batches are expected to be small (generally N < 10). So an additional iteration to
+        // collect a small set of UserPackage objects should be unnoticeable.
+        final ArraySet<UserPackage> wakeupPackages = new ArraySet<>(4);
         for (int i = 0; i < N; i++) {
-            Alarm a = alarms.get(i);
-
-            final int alarmPrio;
-            if (a.listener == mTimeTickTrigger) {
-                alarmPrio = PRIO_TICK;
-            } else if (a.wakeup) {
-                alarmPrio = PRIO_WAKEUP;
-            } else {
-                alarmPrio = PRIO_NORMAL;
+            final Alarm a = alarms.get(i);
+            if (a.wakeup) {
+                wakeupPackages.add(
+                        UserPackage.of(UserHandle.getUserId(a.creatorUid), a.sourcePackage));
             }
+        }
 
-            PriorityClass packagePrio = a.priorityClass;
-            String alarmPackage = a.sourcePackage;
-            if (packagePrio == null) packagePrio = mPriorities.get(alarmPackage);
-            if (packagePrio == null) {
-                packagePrio = a.priorityClass = new PriorityClass(); // lowest prio & stale sequence
-                mPriorities.put(alarmPackage, packagePrio);
-            }
-            a.priorityClass = packagePrio;
+        for (int i = 0; i < N; i++) {
+            final Alarm a = alarms.get(i);
 
-            if (packagePrio.seq != mCurrentSeq) {
-                // first alarm we've seen in the current delivery generation from this package
-                packagePrio.priority = alarmPrio;
-                packagePrio.seq = mCurrentSeq;
+            if (a.creatorUid == Process.SYSTEM_UID && "android".equals(a.sourcePackage)) {
+                a.priorityClass = PRIORITY_SYSTEM;
+            } else if (wakeupPackages.contains(
+                    UserPackage.of(UserHandle.getUserId(a.creatorUid), a.sourcePackage))) {
+                a.priorityClass = PRIORITY_WAKEUP;
             } else {
-                // Multiple alarms from this package being delivered in this generation;
-                // bump the package's delivery class if it's warranted.
-                // TICK < WAKEUP < NORMAL
-                if (alarmPrio < packagePrio.priority) {
-                    packagePrio.priority = alarmPrio;
-                }
+                a.priorityClass = PRIORITY_NORMAL;
             }
         }
     }
@@ -1741,6 +1714,7 @@
         final BroadcastStats mBroadcastStats;
         final FilterStats mFilterStats;
         final int mAlarmType;
+        final int mPriorityClass;
 
         InFlight(AlarmManagerService service, Alarm alarm, long nowELAPSED) {
             mPendingIntent = alarm.operation;
@@ -1761,6 +1735,7 @@
             fs.lastTime = nowELAPSED;
             mFilterStats = fs;
             mAlarmType = alarm.type;
+            mPriorityClass = alarm.priorityClass;
         }
 
         boolean isBroadcast() {
@@ -1779,6 +1754,7 @@
                     + ", broadcastStats=" + mBroadcastStats
                     + ", filterStats=" + mFilterStats
                     + ", alarmType=" + mAlarmType
+                    + ", priorityClass=" + mPriorityClass
                     + "}";
         }
 
@@ -1956,13 +1932,6 @@
 
             mNextWakeup = mNextNonWakeup = 0;
 
-            if (KERNEL_TIME_ZONE_SYNC_ENABLED) {
-                // We set the current offset in kernel because the kernel doesn't keep this after a
-                // reboot. Keeping the kernel time zone in sync is "best effort" and can be wrong
-                // for a period after daylight savings transitions.
-                mInjector.syncKernelTimeZoneOffset();
-            }
-
             // Ensure that we're booting with a halfway sensible current time.
             mInjector.initializeTimeIfRequired();
 
@@ -2196,20 +2165,8 @@
             @CurrentTimeMillisLong long newSystemClockTimeMillis, @TimeConfidence int confidence,
             @NonNull String logMsg) {
         synchronized (mLock) {
-            final long oldSystemClockTimeMillis = mInjector.getCurrentTimeMillis();
             mInjector.setCurrentTimeMillis(newSystemClockTimeMillis, confidence, logMsg);
 
-            if (KERNEL_TIME_ZONE_SYNC_ENABLED) {
-                // Changing the time may cross a DST transition; sync the kernel offset if needed.
-                final TimeZone timeZone = TimeZone.getTimeZone(SystemTimeZone.getTimeZoneId());
-                final int currentTzOffset = timeZone.getOffset(oldSystemClockTimeMillis);
-                final int newTzOffset = timeZone.getOffset(newSystemClockTimeMillis);
-                if (currentTzOffset != newTzOffset) {
-                    Slog.i(TAG, "Timezone offset has changed, updating kernel timezone");
-                    mInjector.setKernelTimeZoneOffset(newTzOffset);
-                }
-            }
-
             // The native implementation of setKernelTime can return -1 even when the kernel
             // time was set correctly, so assume setting kernel time was successful and always
             // return true.
@@ -2231,12 +2188,6 @@
             // "GMT" if the ID is unrecognized). The parameter ID is used here rather than
             // newZone.getId(). It will be rejected if it is invalid.
             timeZoneWasChanged = SystemTimeZone.setTimeZoneId(tzId, confidence, logInfo);
-
-            if (KERNEL_TIME_ZONE_SYNC_ENABLED) {
-                // Update the kernel timezone information
-                int utcOffsetMillis = newZone.getOffset(mInjector.getCurrentTimeMillis());
-                mInjector.setKernelTimeZoneOffset(utcOffsetMillis);
-            }
         }
 
         // Clear the default time zone in the system server process. This forces the next call
@@ -3040,11 +2991,10 @@
             return (uid > 0) ? hasScheduleExactAlarmInternal(packageName, uid) : false;
         }
 
+        @EnforcePermission(android.Manifest.permission.SET_TIME)
         @Override
         public boolean setTime(@CurrentTimeMillisLong long millis) {
-            getContext().enforceCallingOrSelfPermission(
-                    "android.permission.SET_TIME",
-                    "setTime");
+            setTime_enforcePermission();
 
             // The public API (and the shell command that also uses this method) have no concept
             // of confidence, but since the time should come either from apps working on behalf of
@@ -3053,11 +3003,10 @@
             return setTimeImpl(millis, timeConfidence, "AlarmManager.setTime() called");
         }
 
+        @EnforcePermission(android.Manifest.permission.SET_TIME_ZONE)
         @Override
         public void setTimeZone(String tz) {
-            getContext().enforceCallingOrSelfPermission(
-                    "android.permission.SET_TIME_ZONE",
-                    "setTimeZone");
+            setTimeZone_enforcePermission();
 
             final long oldId = Binder.clearCallingIdentity();
             try {
@@ -3115,10 +3064,10 @@
             return getNextAlarmClockImpl(userId);
         }
 
+        @EnforcePermission(android.Manifest.permission.DUMP)
         @Override
         public int getConfigVersion() {
-            getContext().enforceCallingOrSelfPermission(Manifest.permission.DUMP,
-                    "getConfigVersion");
+            getConfigVersion_enforcePermission();
             return mConstants.getVersion();
         }
 
@@ -4121,7 +4070,7 @@
             removeAlarmsInternalLocked(whichAlarms, REMOVE_REASON_EXACT_PERMISSION_REVOKED);
         }
 
-        if (killUid && mConstants.KILL_ON_SCHEDULE_EXACT_ALARM_REVOKED) {
+        if (killUid) {
             PermissionManagerService.killUid(UserHandle.getAppId(uid), UserHandle.getUserId(uid),
                     "schedule_exact_alarm revoked");
         }
@@ -4386,16 +4335,6 @@
     private static native void close(long nativeData);
     private static native int set(long nativeData, int type, long seconds, long nanoseconds);
     private static native int waitForAlarm(long nativeData);
-
-    /*
-     * b/246256335: The @Keep ensures that the native definition is kept even when the optimizer can
-     * tell no calls will be made due to a compile-time constant. Allowing this definition to be
-     * optimized away breaks loadLibrary("alarm_jni") at boot time.
-     * TODO(b/246256335): Remove this native method and the associated native code when it is no
-     * longer needed.
-     */
-    @Keep
-    private static native int setKernelTimezone(long nativeData, int minuteswest);
     private static native long getNextAlarm(long nativeData, int type);
 
     @GuardedBy("mLock")
@@ -4470,9 +4409,6 @@
             }
         }
 
-        // This is a new alarm delivery set; bump the sequence number to indicate that
-        // all apps' alarm delivery classes should be recalculated.
-        mCurrentSeq++;
         calculateDeliveryPriorities(triggerList);
         Collections.sort(triggerList, mAlarmDispatchComparator);
 
@@ -4664,20 +4600,6 @@
             return AlarmManagerService.getNextAlarm(mNativeData, type);
         }
 
-        void setKernelTimeZoneOffset(int utcOffsetMillis) {
-            // Kernel tracks time offsets as 'minutes west of GMT'
-            AlarmManagerService.setKernelTimezone(mNativeData, -(utcOffsetMillis / 60000));
-        }
-
-        void syncKernelTimeZoneOffset() {
-            long currentTimeMillis = getCurrentTimeMillis();
-            TimeZone currentTimeZone = TimeZone.getTimeZone(getTimeZoneId());
-            // If the time zone ID is invalid, GMT will be returned and this will set a kernel
-            // offset of zero.
-            int utcOffsetMillis = currentTimeZone.getOffset(currentTimeMillis);
-            setKernelTimeZoneOffset(utcOffsetMillis);
-        }
-
         void initializeTimeIfRequired() {
             SystemClockTime.initializeIfRequired();
         }
@@ -5199,12 +5121,6 @@
         @Override
         public void onReceive(Context context, Intent intent) {
             if (intent.getAction().equals(Intent.ACTION_DATE_CHANGED)) {
-                if (KERNEL_TIME_ZONE_SYNC_ENABLED) {
-                    // Since the kernel does not keep track of DST, we reset the TZ information at
-                    // the beginning of each day. This may miss a DST transition, but it will
-                    // correct itself within 24 hours.
-                    mInjector.syncKernelTimeZoneOffset();
-                }
                 scheduleDateChangedEvent();
             }
         }
@@ -5362,7 +5278,6 @@
                             // external-applications-unavailable case
                             removeLocked(pkg, REMOVE_REASON_UNDEFINED);
                         }
-                        mPriorities.remove(pkg);
                         for (int i = mBroadcastStats.size() - 1; i >= 0; i--) {
                             ArrayMap<String, BroadcastStats> uidStats = mBroadcastStats.valueAt(i);
                             if (uidStats.remove(pkg) != null) {
diff --git a/apex/jobscheduler/service/java/com/android/server/alarm/MetricsHelper.java b/apex/jobscheduler/service/java/com/android/server/alarm/MetricsHelper.java
index eb1848d..90a6455a 100644
--- a/apex/jobscheduler/service/java/com/android/server/alarm/MetricsHelper.java
+++ b/apex/jobscheduler/service/java/com/android/server/alarm/MetricsHelper.java
@@ -112,7 +112,7 @@
                 (a.flags & AlarmManager.FLAG_ALLOW_WHILE_IDLE) != 0,
                 a.alarmClock != null,
                 a.repeatInterval != 0,
-                reasonToStatsReason(a.mExactAllowReason),
+                reasonToStatsReason(a.exactAllowReason),
                 AlarmManagerService.isRtc(a.type),
                 ActivityManager.processStateAmToProto(callerProcState));
     }
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobStore.java b/apex/jobscheduler/service/java/com/android/server/job/JobStore.java
index 0a7bffc..098b2fb 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobStore.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobStore.java
@@ -1184,6 +1184,12 @@
             }
         }
 
+        /** Returns the {@link String#intern() interned} String if it's not null. */
+        @Nullable
+        private static String intern(@Nullable String val) {
+            return val == null ? null : val.intern();
+        }
+
         private List<JobStatus> readJobMapImpl(InputStream fis, boolean rtcIsGood, long nowElapsed)
                 throws XmlPullParserException, IOException {
             TypedXmlPullParser parser = Xml.resolvePullParser(fis);
@@ -1298,8 +1304,8 @@
             }
 
             String sourcePackageName = parser.getAttributeValue(null, "sourcePackageName");
-            final String namespace = parser.getAttributeValue(null, "namespace");
-            final String sourceTag = parser.getAttributeValue(null, "sourceTag");
+            final String namespace = intern(parser.getAttributeValue(null, "namespace"));
+            final String sourceTag = intern(parser.getAttributeValue(null, "sourceTag"));
 
             int eventType;
             // Read out constraints tag.
@@ -1461,7 +1467,7 @@
             final int appBucket = JobSchedulerService.standbyBucketForPackage(sourcePackageName,
                     sourceUserId, nowElapsed);
             JobStatus js = new JobStatus(
-                    builtJob, uid, sourcePackageName, sourceUserId,
+                    builtJob, uid, intern(sourcePackageName), sourceUserId,
                     appBucket, namespace, sourceTag,
                     elapsedRuntimes.first, elapsedRuntimes.second,
                     lastSuccessfulRunTime, lastFailedRunTime, cumulativeExecutionTime,
@@ -1478,8 +1484,8 @@
                 throws XmlPullParserException {
             // Pull out required fields from <job> attributes.
             int jobId = parser.getAttributeInt(null, "jobid");
-            String packageName = parser.getAttributeValue(null, "package");
-            String className = parser.getAttributeValue(null, "class");
+            String packageName = intern(parser.getAttributeValue(null, "package"));
+            String className = intern(parser.getAttributeValue(null, "class"));
             ComponentName cname = new ComponentName(packageName, className);
 
             return new JobInfo.Builder(jobId, cname);
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java
index c272af0..be4b720 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java
@@ -32,6 +32,7 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.modules.expresslog.Counter;
+import com.android.server.AppSchedulingModuleThread;
 import com.android.server.job.JobSchedulerService;
 import com.android.server.job.StateControllerProto;
 
@@ -392,7 +393,8 @@
                 Slog.d(TAG, "Setting " + tag + " for: " + alarmTimeElapsed);
             }
             mAlarmService.set(alarmType, alarmTimeElapsed,
-                    AlarmManager.WINDOW_HEURISTIC, 0, tag, listener, null, ws);
+                    AlarmManager.WINDOW_HEURISTIC, 0, tag, listener,
+                    AppSchedulingModuleThread.getHandler(), ws);
         }
     }
 
diff --git a/apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java b/apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java
index 2550a27..f5487dc7 100644
--- a/apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java
+++ b/apex/jobscheduler/service/java/com/android/server/tare/InternalResourceService.java
@@ -1877,6 +1877,7 @@
                 pw.print(" None");
             }
             pw.decreaseIndent();
+            pw.println();
         }
     }
 }
diff --git a/apex/jobscheduler/service/java/com/android/server/tare/Ledger.java b/apex/jobscheduler/service/java/com/android/server/tare/Ledger.java
index a68170c..92b21e1 100644
--- a/apex/jobscheduler/service/java/com/android/server/tare/Ledger.java
+++ b/apex/jobscheduler/service/java/com/android/server/tare/Ledger.java
@@ -25,7 +25,9 @@
 import android.annotation.CurrentTimeMillisLong;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.os.Build;
 import android.util.IndentingPrintWriter;
+import android.util.Log;
 import android.util.SparseLongArray;
 import android.util.TimeUtils;
 
@@ -38,6 +40,10 @@
  * Ledger to track the last recorded balance and recent activities of an app.
  */
 class Ledger {
+    private static final String TAG = "TARE-" + Ledger.class.getSimpleName();
+    private static final boolean DEBUG = InternalResourceService.DEBUG
+            || Log.isLoggable(TAG, Log.DEBUG);
+
     /** The window size within which rewards will be counted and used towards reward limiting. */
     private static final long TOTAL_REWARD_WINDOW_MS = 24 * HOUR_IN_MILLIS;
     /** The number of buckets to split {@link #TOTAL_REWARD_WINDOW_MS} into. */
@@ -51,7 +57,7 @@
             TOTAL_REWARD_WINDOW_MS / NUM_REWARD_BUCKET_WINDOWS;
     /** The maximum number of transactions to retain in memory at any one time. */
     @VisibleForTesting
-    static final int MAX_TRANSACTION_COUNT = 50;
+    static final int MAX_TRANSACTION_COUNT = Build.IS_ENG || Build.IS_USERDEBUG || DEBUG ? 32 : 4;
 
     static class Transaction {
         public final long startTimeMs;
@@ -67,7 +73,7 @@
             this.startTimeMs = startTimeMs;
             this.endTimeMs = endTimeMs;
             this.eventId = eventId;
-            this.tag = tag;
+            this.tag = tag == null ? null : tag.intern();
             this.delta = delta;
             this.ctp = ctp;
         }
diff --git a/apex/jobscheduler/service/java/com/android/server/tare/Scribe.java b/apex/jobscheduler/service/java/com/android/server/tare/Scribe.java
index 08439f3..87e1249 100644
--- a/apex/jobscheduler/service/java/com/android/server/tare/Scribe.java
+++ b/apex/jobscheduler/service/java/com/android/server/tare/Scribe.java
@@ -433,6 +433,12 @@
         }
     }
 
+    /** Returns the {@link String#intern() interned} String if it's not null. */
+    @Nullable
+    private static String intern(@Nullable String val) {
+        return val == null ? null : val.intern();
+    }
+
     /**
      * @param parser Xml parser at the beginning of a "<ledger/>" tag. The next "parser.next()" call
      *               will take the parser into the body of the ledger tag.
@@ -448,7 +454,7 @@
         final List<Ledger.Transaction> transactions = new ArrayList<>();
         final List<Ledger.RewardBucket> rewardBuckets = new ArrayList<>();
 
-        pkgName = parser.getAttributeValue(null, XML_ATTR_PACKAGE_NAME);
+        pkgName = intern(parser.getAttributeValue(null, XML_ATTR_PACKAGE_NAME));
         curBalance = parser.getAttributeLong(null, XML_ATTR_CURRENT_BALANCE);
 
         final boolean isInstalled = validPackages.contains(pkgName);
@@ -487,7 +493,7 @@
                         }
                         continue;
                     }
-                    final String tag = parser.getAttributeValue(null, XML_ATTR_TAG);
+                    final String tag = intern(parser.getAttributeValue(null, XML_ATTR_TAG));
                     final long startTime = parser.getAttributeLong(null, XML_ATTR_START_TIME);
                     final int eventId = parser.getAttributeInt(null, XML_ATTR_EVENT_ID);
                     final long delta = parser.getAttributeLong(null, XML_ATTR_DELTA);
diff --git a/apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java b/apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java
index fb342b9..913a76a 100644
--- a/apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java
+++ b/apex/jobscheduler/service/java/com/android/server/usage/AppIdleHistory.java
@@ -61,6 +61,7 @@
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.IOException;
@@ -802,6 +803,9 @@
                     }
                 }
             }
+        } catch (FileNotFoundException e) {
+            // Expected on first boot
+            Slog.d(TAG, "App idle file for user " + userId + " does not exist");
         } catch (IOException | XmlPullParserException e) {
             Slog.e(TAG, "Unable to read app idle file for user " + userId, e);
         } finally {
diff --git a/apex/jobscheduler/service/java/com/android/server/usage/TEST_MAPPING b/apex/jobscheduler/service/java/com/android/server/usage/TEST_MAPPING
index 6a4a52a..9ec799f 100644
--- a/apex/jobscheduler/service/java/com/android/server/usage/TEST_MAPPING
+++ b/apex/jobscheduler/service/java/com/android/server/usage/TEST_MAPPING
@@ -4,7 +4,6 @@
       "name": "CtsUsageStatsTestCases",
       "options": [
         {"include-filter": "android.app.usage.cts.UsageStatsTest"},
-        {"include-filter": "android.app.usage.cts.BroadcastResponseStatsTest"},
         {"exclude-annotation": "android.platform.test.annotations.FlakyTest"},
         {"exclude-annotation": "androidx.test.filters.FlakyTest"},
         {"exclude-annotation": "androidx.test.filters.MediumTest"},
@@ -12,6 +11,13 @@
       ]
     },
     {
+      "name": "CtsBRSTestCases",
+      "options": [
+        {"exclude-annotation": "androidx.test.filters.FlakyTest"},
+        {"exclude-annotation": "org.junit.Ignore"}
+      ]
+    },
+    {
       "name": "FrameworksServicesTests",
       "options": [
         {"include-filter": "com.android.server.usage"},
diff --git a/apex/jobscheduler/service/jni/com_android_server_alarm_AlarmManagerService.cpp b/apex/jobscheduler/service/jni/com_android_server_alarm_AlarmManagerService.cpp
index b2ed4d4..3247da7 100644
--- a/apex/jobscheduler/service/jni/com_android_server_alarm_AlarmManagerService.cpp
+++ b/apex/jobscheduler/service/jni/com_android_server_alarm_AlarmManagerService.cpp
@@ -159,24 +159,6 @@
     return result;
 }
 
-static jint android_server_alarm_AlarmManagerService_setKernelTimezone(JNIEnv*, jobject, jlong, jint minswest)
-{
-    struct timezone tz;
-
-    tz.tz_minuteswest = minswest;
-    tz.tz_dsttime = 0;
-
-    int result = settimeofday(NULL, &tz);
-    if (result < 0) {
-        ALOGE("Unable to set kernel timezone to %d: %s\n", minswest, strerror(errno));
-        return -1;
-    } else {
-        ALOGD("Kernel timezone updated to %d minutes west of GMT\n", minswest);
-    }
-
-    return 0;
-}
-
 static void log_timerfd_create_error(clockid_t id)
 {
     if (errno == EINVAL) {
@@ -319,7 +301,6 @@
     {"close", "(J)V", (void*)android_server_alarm_AlarmManagerService_close},
     {"set", "(JIJJ)I", (void*)android_server_alarm_AlarmManagerService_set},
     {"waitForAlarm", "(J)I", (void*)android_server_alarm_AlarmManagerService_waitForAlarm},
-    {"setKernelTimezone", "(JI)I", (void*)android_server_alarm_AlarmManagerService_setKernelTimezone},
     {"getNextAlarm", "(JI)J", (void*)android_server_alarm_AlarmManagerService_getNextAlarm},
 };
 
diff --git a/boot/boot-image-profile.txt b/boot/boot-image-profile.txt
index aebace5..74fbd4a 100644
--- a/boot/boot-image-profile.txt
+++ b/boot/boot-image-profile.txt
@@ -74,7 +74,7 @@
 HSPLandroid/accounts/AccountManager$Future2Task;->internalGetResult(Ljava/lang/Long;Ljava/util/concurrent/TimeUnit;)Ljava/lang/Object;
 HSPLandroid/accounts/AccountManager$Future2Task;->start()Landroid/accounts/AccountManager$Future2Task;
 HSPLandroid/accounts/AccountManager;->-$$Nest$fgetmService(Landroid/accounts/AccountManager;)Landroid/accounts/IAccountManager;
-HSPLandroid/accounts/AccountManager;-><init>(Landroid/content/Context;Landroid/accounts/IAccountManager;)V
+HSPLandroid/accounts/AccountManager;-><init>(Landroid/content/Context;Landroid/accounts/IAccountManager;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLandroid/accounts/AccountManager;->addOnAccountsUpdatedListener(Landroid/accounts/OnAccountsUpdateListener;Landroid/os/Handler;Z)V
 HSPLandroid/accounts/AccountManager;->addOnAccountsUpdatedListener(Landroid/accounts/OnAccountsUpdateListener;Landroid/os/Handler;Z[Ljava/lang/String;)V
 HSPLandroid/accounts/AccountManager;->blockingGetAuthToken(Landroid/accounts/Account;Ljava/lang/String;Z)Ljava/lang/String;
@@ -84,7 +84,7 @@
 HSPLandroid/accounts/AccountManager;->getAccountsAsUser(I)[Landroid/accounts/Account;
 HSPLandroid/accounts/AccountManager;->getAccountsByType(Ljava/lang/String;)[Landroid/accounts/Account;
 HSPLandroid/accounts/AccountManager;->getAccountsByTypeAndFeatures(Ljava/lang/String;[Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;
-HSPLandroid/accounts/AccountManager;->getAccountsByTypeAsUser(Ljava/lang/String;Landroid/os/UserHandle;)[Landroid/accounts/Account;
+HSPLandroid/accounts/AccountManager;->getAccountsByTypeAsUser(Ljava/lang/String;Landroid/os/UserHandle;)[Landroid/accounts/Account;+]Landroid/accounts/IAccountManager;Landroid/accounts/IAccountManager$Stub$Proxy;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;
 HSPLandroid/accounts/AccountManager;->getAccountsByTypeForPackage(Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;
 HSPLandroid/accounts/AccountManager;->getAuthToken(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;ZLandroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;
 HSPLandroid/accounts/AccountManager;->getAuthToken(Landroid/accounts/Account;Ljava/lang/String;ZLandroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;
@@ -102,7 +102,7 @@
 HSPLandroid/accounts/AuthenticatorDescription;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/accounts/IAccountManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/accounts/IAccountManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/accounts/IAccountManager$Stub$Proxy;->getAccountsAsUser(Ljava/lang/String;ILjava/lang/String;)[Landroid/accounts/Account;
+HSPLandroid/accounts/IAccountManager$Stub$Proxy;->getAccountsAsUser(Ljava/lang/String;ILjava/lang/String;)[Landroid/accounts/Account;+]Landroid/accounts/IAccountManager$Stub$Proxy;Landroid/accounts/IAccountManager$Stub$Proxy;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/accounts/IAccountManager$Stub$Proxy;->getAccountsByFeatures(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/accounts/IAccountManager$Stub$Proxy;->getAccountsByTypeForPackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;
 HSPLandroid/accounts/IAccountManager$Stub$Proxy;->getAuthToken(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Ljava/lang/String;ZZLandroid/os/Bundle;)V
@@ -123,7 +123,7 @@
 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$1;->doFrame(J)V
 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
@@ -131,18 +131,33 @@
 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;->doAnimationFrame(J)V+]Landroid/animation/AnimationHandler$AnimationFrameCallback;Landroid/animation/ObjectAnimator;,Lcom/android/internal/dynamicanimation/animation/SpringAnimation;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/AnimationHandler;->doAnimationFrame(J)V
 HSPLandroid/animation/AnimationHandler;->getAnimationCount()I
 HSPLandroid/animation/AnimationHandler;->getInstance()Landroid/animation/AnimationHandler;
 HSPLandroid/animation/AnimationHandler;->getProvider()Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;
 HSPLandroid/animation/AnimationHandler;->isCallbackDue(Landroid/animation/AnimationHandler$AnimationFrameCallback;J)Z
 HSPLandroid/animation/AnimationHandler;->isPauseBgAnimationsEnabledInSystemProperties()Z
+HSPLandroid/animation/AnimationHandler;->lambda$new$0(J)V
 HSPLandroid/animation/AnimationHandler;->removeCallback(Landroid/animation/AnimationHandler$AnimationFrameCallback;)V
 HSPLandroid/animation/AnimationHandler;->requestAnimatorsEnabled(ZLjava/lang/Object;)V
 HSPLandroid/animation/AnimationHandler;->requestAnimatorsEnabledImpl(ZLjava/lang/Object;)V
 HSPLandroid/animation/AnimationHandler;->resumeAnimators()V
 HSPLandroid/animation/AnimationHandler;->setAnimatorPausingEnabled(Z)V
 HSPLandroid/animation/AnimationHandler;->setProvider(Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;)V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda0;-><init>()V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda0;->call(Ljava/lang/Object;Ljava/lang/Object;Z)V+]Landroid/animation/Animator$AnimatorListener;megamorphic_types
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda1;-><init>()V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda1;->call(Ljava/lang/Object;Ljava/lang/Object;Z)V+]Landroid/animation/Animator$AnimatorListener;missing_types
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda2;-><init>()V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda2;->call(Ljava/lang/Object;Ljava/lang/Object;Z)V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda3;-><init>()V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda4;-><init>()V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda5;-><init>()V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda6;-><init>()V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda6;->call(Ljava/lang/Object;Ljava/lang/Object;Z)V
+HSPLandroid/animation/Animator$AnimatorCaller;-><clinit>()V
+HSPLandroid/animation/Animator$AnimatorCaller;->lambda$static$0(Landroid/animation/Animator$AnimatorListener;Landroid/animation/Animator;Z)V+]Landroid/animation/Animator$AnimatorListener;missing_types
+HSPLandroid/animation/Animator$AnimatorCaller;->lambda$static$4(Landroid/animation/ValueAnimator$AnimatorUpdateListener;Landroid/animation/ValueAnimator;Z)V+]Landroid/animation/ValueAnimator$AnimatorUpdateListener;missing_types
 HSPLandroid/animation/Animator$AnimatorConstantState;-><init>(Landroid/animation/Animator;)V
 HSPLandroid/animation/Animator$AnimatorConstantState;->getChangingConfigurations()I
 HSPLandroid/animation/Animator$AnimatorConstantState;->newInstance()Landroid/animation/Animator;
@@ -153,12 +168,16 @@
 HSPLandroid/animation/Animator;->addListener(Landroid/animation/Animator$AnimatorListener;)V
 HSPLandroid/animation/Animator;->addPauseListener(Landroid/animation/Animator$AnimatorPauseListener;)V
 HSPLandroid/animation/Animator;->appendChangingConfigurations(I)V
+HSPLandroid/animation/Animator;->callOnList(Ljava/util/ArrayList;Landroid/animation/Animator$AnimatorCaller;Ljava/lang/Object;Z)V+]Landroid/animation/Animator$AnimatorCaller;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 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;->getStartAndEndTimes(Landroid/util/LongArray;J)V
+HSPLandroid/animation/Animator;->notifyEndListeners(Z)V
+HSPLandroid/animation/Animator;->notifyListeners(Landroid/animation/Animator$AnimatorCaller;Z)V+]Landroid/animation/Animator;missing_types
+HSPLandroid/animation/Animator;->notifyStartListeners(Z)V
 HSPLandroid/animation/Animator;->pause()V
 HSPLandroid/animation/Animator;->removeAllListeners()V
 HSPLandroid/animation/Animator;->removeListener(Landroid/animation/Animator$AnimatorListener;)V
@@ -208,14 +227,11 @@
 HSPLandroid/animation/AnimatorSet;-><init>()V
 HSPLandroid/animation/AnimatorSet;->addAnimationCallback(J)V
 HSPLandroid/animation/AnimatorSet;->addAnimationEndListener()V
-HSPLandroid/animation/AnimatorSet;->animateBasedOnPlayTime(JJZZ)V
-HSPLandroid/animation/AnimatorSet;->animateSkipToEnds(JJZ)V+]Landroid/animation/AnimatorSet;Landroid/animation/AnimatorSet;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;
-HSPLandroid/animation/AnimatorSet;->animateValuesInRange(JJZ)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;
 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+]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/ValueAnimator;
-HSPLandroid/animation/AnimatorSet;->doAnimationFrame(J)Z+]Landroid/animation/AnimatorSet$SeekState;Landroid/animation/AnimatorSet$SeekState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/AnimatorSet;->clone()Landroid/animation/AnimatorSet;
+HSPLandroid/animation/AnimatorSet;->createDependencyGraph()V
+HSPLandroid/animation/AnimatorSet;->doAnimationFrame(J)Z
 HSPLandroid/animation/AnimatorSet;->end()V
 HSPLandroid/animation/AnimatorSet;->endAnimation()V
 HSPLandroid/animation/AnimatorSet;->ensureChildStartAndEndTimes()[J
@@ -235,8 +251,6 @@
 HSPLandroid/animation/AnimatorSet;->isInitialized()Z
 HSPLandroid/animation/AnimatorSet;->isRunning()Z
 HSPLandroid/animation/AnimatorSet;->isStarted()Z
-HSPLandroid/animation/AnimatorSet;->notifyEndListeners(Z)V
-HSPLandroid/animation/AnimatorSet;->notifyStartListeners(Z)V
 HSPLandroid/animation/AnimatorSet;->play(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
 HSPLandroid/animation/AnimatorSet;->playSequentially([Landroid/animation/Animator;)V
 HSPLandroid/animation/AnimatorSet;->playTogether(Ljava/util/Collection;)V
@@ -265,7 +279,7 @@
 HSPLandroid/animation/FloatKeyframeSet;-><init>([Landroid/animation/Keyframe$FloatKeyframe;)V
 HSPLandroid/animation/FloatKeyframeSet;->clone()Landroid/animation/FloatKeyframeSet;
 HSPLandroid/animation/FloatKeyframeSet;->clone()Landroid/animation/Keyframes;
-HSPLandroid/animation/FloatKeyframeSet;->getFloatValue(F)F+]Ljava/lang/Number;Ljava/lang/Float;]Ljava/util/List;Ljava/util/Arrays$ArrayList;]Landroid/animation/Keyframe;Landroid/animation/Keyframe$FloatKeyframe;]Landroid/animation/Keyframe$FloatKeyframe;Landroid/animation/Keyframe$FloatKeyframe;
+HSPLandroid/animation/FloatKeyframeSet;->getFloatValue(F)F
 HSPLandroid/animation/FloatKeyframeSet;->getValue(F)Ljava/lang/Object;
 HSPLandroid/animation/IntKeyframeSet;-><init>([Landroid/animation/Keyframe$IntKeyframe;)V
 HSPLandroid/animation/IntKeyframeSet;->clone()Landroid/animation/IntKeyframeSet;
@@ -343,7 +357,7 @@
 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;
+HSPLandroid/animation/ObjectAnimator;->animateValue(F)V
 HSPLandroid/animation/ObjectAnimator;->clone()Landroid/animation/Animator;
 HSPLandroid/animation/ObjectAnimator;->clone()Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/ObjectAnimator;->getNameForTrace()Ljava/lang/String;
@@ -385,7 +399,7 @@
 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
 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;
@@ -403,6 +417,7 @@
 HSPLandroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;->setupSetter(Ljava/lang/Class;)V
 HSPLandroid/animation/PropertyValuesHolder$PropertyValues;-><init>()V
 HSPLandroid/animation/PropertyValuesHolder;-><init>(Landroid/util/Property;)V
+HSPLandroid/animation/PropertyValuesHolder;-><init>(Landroid/util/Property;Landroid/animation/PropertyValuesHolder-IA;)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
@@ -458,16 +473,14 @@
 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;->animateSkipToEnds(JJZ)V
-HSPLandroid/animation/ValueAnimator;->animateValue(F)V+]Landroid/animation/ValueAnimator$AnimatorUpdateListener;Landroid/view/InsetsController$InternalAnimationControlListener$$ExternalSyntheticLambda0;,Landroid/graphics/drawable/RippleDrawable$$ExternalSyntheticLambda0;,Landroid/view/ViewPropertyAnimator$AnimatorEventListener;]Landroid/animation/TimeInterpolator;missing_types]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLandroid/animation/ValueAnimator;->animateValuesInRange(JJZ)V
+HSPLandroid/animation/ValueAnimator;->animateBasedOnTime(J)Z
+HSPLandroid/animation/ValueAnimator;->animateValue(F)V
 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;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;
-HSPLandroid/animation/ValueAnimator;->doAnimationFrame(J)Z+]Landroid/animation/ValueAnimator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;
+HSPLandroid/animation/ValueAnimator;->clone()Landroid/animation/ValueAnimator;
+HSPLandroid/animation/ValueAnimator;->doAnimationFrame(J)Z
 HSPLandroid/animation/ValueAnimator;->end()V
 HSPLandroid/animation/ValueAnimator;->endAnimation()V
 HSPLandroid/animation/ValueAnimator;->getAnimatedFraction()F
@@ -492,8 +505,6 @@
 HSPLandroid/animation/ValueAnimator;->isPulsingInternal()Z
 HSPLandroid/animation/ValueAnimator;->isRunning()Z
 HSPLandroid/animation/ValueAnimator;->isStarted()Z
-HSPLandroid/animation/ValueAnimator;->notifyEndListeners(Z)V
-HSPLandroid/animation/ValueAnimator;->notifyStartListeners(Z)V
 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;
@@ -692,6 +703,9 @@
 HSPLandroid/app/ActivityClient;->setActivityClientController(Landroid/app/IActivityClientController;)Landroid/app/IActivityClientController;
 HSPLandroid/app/ActivityClient;->setRequestedOrientation(Landroid/os/IBinder;I)V
 HSPLandroid/app/ActivityClient;->setTaskDescription(Landroid/os/IBinder;Landroid/app/ActivityManager$TaskDescription;)V
+HSPLandroid/app/ActivityManager$1;-><init>(Landroid/app/ActivityManager;)V
+HSPLandroid/app/ActivityManager$3;->create()Landroid/app/IActivityManager;
+HSPLandroid/app/ActivityManager$3;->create()Ljava/lang/Object;
 HSPLandroid/app/ActivityManager$AppTask;->getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo;
 HSPLandroid/app/ActivityManager$MemoryInfo;-><init>()V
 HSPLandroid/app/ActivityManager$MemoryInfo;->readFromParcel(Landroid/os/Parcel;)V
@@ -722,7 +736,6 @@
 HSPLandroid/app/ActivityManager$TaskDescription;-><init>()V
 HSPLandroid/app/ActivityManager$TaskDescription;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/ActivityManager$TaskDescription;-><init>(Ljava/lang/String;Landroid/graphics/Bitmap;I)V
-HSPLandroid/app/ActivityManager$TaskDescription;-><init>(Ljava/lang/String;Landroid/graphics/drawable/Icon;IIIIZZIIII)V
 HSPLandroid/app/ActivityManager$TaskDescription;->copyFromPreserveHiddenFields(Landroid/app/ActivityManager$TaskDescription;)V
 HSPLandroid/app/ActivityManager$TaskDescription;->getBackgroundColor()I
 HSPLandroid/app/ActivityManager$TaskDescription;->getIcon()Landroid/graphics/Bitmap;
@@ -740,8 +753,6 @@
 HSPLandroid/app/ActivityManager$TaskDescription;->setPrimaryColor(I)V
 HSPLandroid/app/ActivityManager$TaskDescription;->setStatusBarColor(I)V
 HSPLandroid/app/ActivityManager$TaskDescription;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/app/ActivityManager$UidObserver;->onUidGone(IZ)V
-HSPLandroid/app/ActivityManager$UidObserver;->onUidStateChanged(IIJI)V
 HSPLandroid/app/ActivityManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLandroid/app/ActivityManager;->addOnUidImportanceListener(Landroid/app/ActivityManager$OnUidImportanceListener;I)V
 HSPLandroid/app/ActivityManager;->checkComponentPermission(Ljava/lang/String;IIZ)I
@@ -766,6 +777,7 @@
 HSPLandroid/app/ActivityManager;->isLowMemoryKillReportSupported()Z
 HSPLandroid/app/ActivityManager;->isLowRamDevice()Z
 HSPLandroid/app/ActivityManager;->isLowRamDeviceStatic()Z
+HSPLandroid/app/ActivityManager;->isProcStateCached(I)Z
 HSPLandroid/app/ActivityManager;->isRunningInTestHarness()Z
 HSPLandroid/app/ActivityManager;->isRunningInUserTestHarness()Z
 HSPLandroid/app/ActivityManager;->isStartResultFatalError(I)Z
@@ -794,11 +806,7 @@
 HSPLandroid/app/ActivityTaskManager;->getTasks(IZ)Ljava/util/List;
 HSPLandroid/app/ActivityTaskManager;->getTasks(IZZ)Ljava/util/List;
 HSPLandroid/app/ActivityTaskManager;->supportsMultiWindow(Landroid/content/Context;)Z
-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
 HSPLandroid/app/ActivityThread$3;-><init>(Landroid/app/ActivityThread;)V
@@ -824,7 +832,6 @@
 HSPLandroid/app/ActivityThread$ApplicationThread$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;-><init>(Landroid/app/ActivityThread;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;-><init>(Landroid/app/ActivityThread;Landroid/app/ActivityThread$ApplicationThread-IA;)V
-HSPLandroid/app/ActivityThread$ApplicationThread;->bindApplication(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/ProviderInfoList;Landroid/content/ComponentName;Landroid/app/ProfilerInfo;Landroid/os/Bundle;Landroid/app/IInstrumentationWatcher;Landroid/app/IUiAutomationConnection;IZZZZLandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/util/Map;Landroid/os/Bundle;Ljava/lang/String;Landroid/content/AutofillOptions;Landroid/content/ContentCaptureOptions;[JLandroid/os/SharedMemory;JJ)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->clearDnsCache()V
 HSPLandroid/app/ActivityThread$ApplicationThread;->dispatchPackageBroadcast(I[Ljava/lang/String;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->dumpCacheInfo(Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)V
@@ -840,15 +847,16 @@
 HSPLandroid/app/ActivityThread$ApplicationThread;->notifyContentProviderPublishStatus(Landroid/app/ContentProviderHolder;Ljava/lang/String;IZ)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->requestAssistContextExtras(Landroid/os/IBinder;Landroid/os/IBinder;III)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleApplicationInfoChanged(Landroid/content/pm/ApplicationInfo;)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleBindService(Landroid/os/IBinder;Landroid/content/Intent;ZIJ)V+]Landroid/app/ActivityThread;Landroid/app/ActivityThread;
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleCreateBackupAgent(Landroid/content/pm/ApplicationInfo;III)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleCreateService(Landroid/os/IBinder;Landroid/content/pm/ServiceInfo;Landroid/content/res/CompatibilityInfo;I)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleDestroyBackupAgent(Landroid/content/pm/ApplicationInfo;I)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleEnterAnimationComplete(Landroid/os/IBinder;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleInstallProvider(Landroid/content/pm/ProviderInfo;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleLowMemory()V
-HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleReceiver(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Landroid/content/res/CompatibilityInfo;ILjava/lang/String;Landroid/os/Bundle;ZZIIILjava/lang/String;)V+]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/app/ActivityThread$ApplicationThread;Landroid/app/ActivityThread$ApplicationThread;
-HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleReceiverList(Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/app/ActivityThread$ApplicationThread;Landroid/app/ActivityThread$ApplicationThread;
-HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleRegisteredReceiver(Landroid/content/IIntentReceiver;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIIILjava/lang/String;)V+]Landroid/content/IIntentReceiver;missing_types]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;
+HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleReceiver(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Landroid/content/res/CompatibilityInfo;ILjava/lang/String;Landroid/os/Bundle;ZZIIILjava/lang/String;)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleReceiverList(Ljava/util/List;)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleRegisteredReceiver(Landroid/content/IIntentReceiver;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIIILjava/lang/String;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleServiceArgs(Landroid/os/IBinder;Landroid/content/pm/ParceledListSlice;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleStopService(Landroid/os/IBinder;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleTransaction(Landroid/app/servertransaction/ClientTransaction;)V
@@ -860,7 +868,7 @@
 HSPLandroid/app/ActivityThread$ApplicationThread;->unstableProviderDied(Landroid/os/IBinder;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->updateCompatOverrideScale(Landroid/content/res/CompatibilityInfo;)V
 HSPLandroid/app/ActivityThread$BindServiceData;-><init>()V
-HSPLandroid/app/ActivityThread$BindServiceData;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/app/ActivityThread$BindServiceData;->toString()Ljava/lang/String;
 HSPLandroid/app/ActivityThread$ContextCleanupInfo;-><init>()V
 HSPLandroid/app/ActivityThread$CreateBackupAgentData;-><init>()V
 HSPLandroid/app/ActivityThread$CreateServiceData;-><init>()V
@@ -874,7 +882,6 @@
 HSPLandroid/app/ActivityThread$Idler;-><init>(Landroid/app/ActivityThread;Landroid/app/ActivityThread$Idler-IA;)V
 HSPLandroid/app/ActivityThread$Idler;->queueIdle()Z
 HSPLandroid/app/ActivityThread$Profiler;-><init>()V
-HSPLandroid/app/ActivityThread$ProviderClientRecord;-><init>(Landroid/app/ActivityThread;[Ljava/lang/String;Landroid/content/IContentProvider;Landroid/content/ContentProvider;Landroid/app/ContentProviderHolder;)V
 HSPLandroid/app/ActivityThread$ProviderKey;-><init>(Ljava/lang/String;I)V
 HSPLandroid/app/ActivityThread$ProviderKey;->equals(Ljava/lang/Object;)Z
 HSPLandroid/app/ActivityThread$ProviderKey;->hashCode()I
@@ -886,6 +893,7 @@
 HSPLandroid/app/ActivityThread$ServiceArgsData;-><init>()V
 HSPLandroid/app/ActivityThread$ServiceArgsData;->toString()Ljava/lang/String;
 HSPLandroid/app/ActivityThread;->-$$Nest$fgetmTransactionExecutor(Landroid/app/ActivityThread;)Landroid/app/servertransaction/TransactionExecutor;
+HSPLandroid/app/ActivityThread;->-$$Nest$mgetGetProviderKey(Landroid/app/ActivityThread;Ljava/lang/String;I)Landroid/app/ActivityThread$ProviderKey;
 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
 HSPLandroid/app/ActivityThread;->-$$Nest$mhandleCreateBackupAgent(Landroid/app/ActivityThread;Landroid/app/ActivityThread$CreateBackupAgentData;)V
@@ -905,7 +913,7 @@
 HSPLandroid/app/ActivityThread;->-$$Nest$mpurgePendingResources(Landroid/app/ActivityThread;)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/ContentProvider$Transport;,Landroid/content/ContentProviderProxy;]Landroid/os/IBinder;Landroid/content/ContentProvider$Transport;,Landroid/os/BinderProxy;
+HSPLandroid/app/ActivityThread;->acquireExistingProvider(Landroid/content/Context;Ljava/lang/String;IZ)Landroid/content/IContentProvider;
 HSPLandroid/app/ActivityThread;->acquireProvider(Landroid/content/Context;Ljava/lang/String;IZ)Landroid/content/IContentProvider;
 HSPLandroid/app/ActivityThread;->attach(ZJ)V
 HSPLandroid/app/ActivityThread;->callActivityOnSaveInstanceState(Landroid/app/ActivityThread$ActivityClientRecord;)V
@@ -918,7 +926,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;
@@ -960,7 +968,7 @@
 HSPLandroid/app/ActivityThread;->handleActivityConfigurationChanged(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/content/res/Configuration;IZ)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;->handleBindService(Landroid/app/ActivityThread$BindServiceData;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/app/ActivityThread;->handleConfigurationChanged(Landroid/content/res/Configuration;I)V
 HSPLandroid/app/ActivityThread;->handleCreateBackupAgent(Landroid/app/ActivityThread$CreateBackupAgentData;)V
 HSPLandroid/app/ActivityThread;->handleCreateService(Landroid/app/ActivityThread$CreateServiceData;)V
@@ -981,7 +989,7 @@
 HSPLandroid/app/ActivityThread;->handleRelaunchActivity(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/app/servertransaction/PendingTransactionActions;)V
 HSPLandroid/app/ActivityThread;->handleRelaunchActivityInner(Landroid/app/ActivityThread$ActivityClientRecord;ILjava/util/List;Ljava/util/List;Landroid/app/servertransaction/PendingTransactionActions;ZLandroid/content/res/Configuration;Ljava/lang/String;)V
 HSPLandroid/app/ActivityThread;->handleRequestAssistContextExtras(Landroid/app/ActivityThread$RequestAssistContextExtras;)V
-HSPLandroid/app/ActivityThread;->handleResumeActivity(Landroid/app/ActivityThread$ActivityClientRecord;ZZZLjava/lang/String;)V+]Landroid/view/ViewManager;Landroid/view/WindowManagerImpl;]Landroid/view/View;Lcom/android/internal/policy/DecorView;]Landroid/view/Window;Lcom/android/internal/policy/PhoneWindow;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;]Ljava/util/Map;Ljava/util/Collections$SynchronizedMap;
+HSPLandroid/app/ActivityThread;->handleResumeActivity(Landroid/app/ActivityThread$ActivityClientRecord;ZZZLjava/lang/String;)V
 HSPLandroid/app/ActivityThread;->handleSendResult(Landroid/app/ActivityThread$ActivityClientRecord;Ljava/util/List;Ljava/lang/String;)V
 HSPLandroid/app/ActivityThread;->handleServiceArgs(Landroid/app/ActivityThread$ServiceArgsData;)V
 HSPLandroid/app/ActivityThread;->handleSetContentCaptureOptionsCallback(Ljava/lang/String;)V
@@ -994,7 +1002,7 @@
 HSPLandroid/app/ActivityThread;->handleUnbindService(Landroid/app/ActivityThread$BindServiceData;)V
 HSPLandroid/app/ActivityThread;->handleUnstableProviderDied(Landroid/os/IBinder;Z)V
 HSPLandroid/app/ActivityThread;->handleUnstableProviderDiedLocked(Landroid/os/IBinder;Z)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;->initZipPathValidatorCallback()V
 HSPLandroid/app/ActivityThread;->initializeMainlineModules()V
 HSPLandroid/app/ActivityThread;->installContentProviders(Landroid/content/Context;Ljava/util/List;)V
@@ -1008,7 +1016,6 @@
 HSPLandroid/app/ActivityThread;->isProtectedComponent(Landroid/content/pm/ComponentInfo;Ljava/lang/String;)Z
 HSPLandroid/app/ActivityThread;->isProtectedComponent(Landroid/content/pm/ServiceInfo;)Z
 HSPLandroid/app/ActivityThread;->isSystem()Z
-HSPLandroid/app/ActivityThread;->lambda$attach$2(Landroid/content/res/Configuration;)V
 HSPLandroid/app/ActivityThread;->main([Ljava/lang/String;)V
 HSPLandroid/app/ActivityThread;->onCoreSettingsChange()V
 HSPLandroid/app/ActivityThread;->peekPackageInfo(Ljava/lang/String;Z)Landroid/app/LoadedApk;
@@ -1024,7 +1031,7 @@
 HSPLandroid/app/ActivityThread;->printRow(Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/Object;)V
 HSPLandroid/app/ActivityThread;->purgePendingResources()V
 HSPLandroid/app/ActivityThread;->relaunchAllActivities(ZLjava/lang/String;)V
-HSPLandroid/app/ActivityThread;->releaseProvider(Landroid/content/IContentProvider;Z)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/IContentProvider;Landroid/content/ContentProvider$Transport;
+HSPLandroid/app/ActivityThread;->releaseProvider(Landroid/content/IContentProvider;Z)Z
 HSPLandroid/app/ActivityThread;->reportSizeConfigurations(Landroid/app/ActivityThread$ActivityClientRecord;)V
 HSPLandroid/app/ActivityThread;->reportStop(Landroid/app/servertransaction/PendingTransactionActions;)V
 HSPLandroid/app/ActivityThread;->reportTopResumedActivityChanged(Landroid/app/ActivityThread$ActivityClientRecord;ZLjava/lang/String;)V
@@ -1147,7 +1154,7 @@
 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;
+HSPLandroid/app/AppOpsManager;->pauseNotedAppOpsCollection()Landroid/app/AppOpsManager$PausedNotedAppOpsCollection;
 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
@@ -1163,7 +1170,7 @@
 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;->toReceiverId(Ljava/lang/Object;)Ljava/lang/String;
+HSPLandroid/app/AppOpsManager;->toReceiverId(Ljava/lang/Object;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/app/AppOpsManager;->unsafeCheckOp(Ljava/lang/String;ILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->unsafeCheckOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->unsafeCheckOpRaw(Ljava/lang/String;ILjava/lang/String;)I
@@ -1234,7 +1241,7 @@
 HSPLandroid/app/ApplicationLoaders$CachedClassLoader;-><init>(Landroid/app/ApplicationLoaders$CachedClassLoader-IA;)V
 HSPLandroid/app/ApplicationLoaders;->addNative(Ljava/lang/ClassLoader;Ljava/util/Collection;)V
 HSPLandroid/app/ApplicationLoaders;->createAndCacheNonBootclasspathSystemClassLoader(Landroid/content/pm/SharedLibraryInfo;)V
-HSPLandroid/app/ApplicationLoaders;->createAndCacheNonBootclasspathSystemClassLoaders([Landroid/content/pm/SharedLibraryInfo;)V
+HSPLandroid/app/ApplicationLoaders;->createAndCacheNonBootclasspathSystemClassLoaders(Ljava/util/List;)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;
@@ -1326,6 +1333,7 @@
 HSPLandroid/app/ApplicationPackageManager;->hasSystemFeature(Ljava/lang/String;)Z
 HSPLandroid/app/ApplicationPackageManager;->hasSystemFeature(Ljava/lang/String;I)Z
 HSPLandroid/app/ApplicationPackageManager;->hasUserBadge(I)Z
+HSPLandroid/app/ApplicationPackageManager;->isDeviceUpgrading()Z
 HSPLandroid/app/ApplicationPackageManager;->isInstantApp()Z
 HSPLandroid/app/ApplicationPackageManager;->isInstantApp(Ljava/lang/String;)Z
 HSPLandroid/app/ApplicationPackageManager;->isPackageSuspended(Ljava/lang/String;)Z
@@ -1341,10 +1349,10 @@
 HSPLandroid/app/ApplicationPackageManager;->queryBroadcastReceivers(Landroid/content/Intent;Landroid/content/pm/PackageManager$ResolveInfoFlags;)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryBroadcastReceiversAsUser(Landroid/content/Intent;II)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryBroadcastReceiversAsUser(Landroid/content/Intent;Landroid/content/pm/PackageManager$ResolveInfoFlags;I)Ljava/util/List;
-HSPLandroid/app/ApplicationPackageManager;->queryIntentActivities(Landroid/content/Intent;I)Ljava/util/List;
+HSPLandroid/app/ApplicationPackageManager;->queryIntentActivities(Landroid/content/Intent;I)Ljava/util/List;+]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->queryIntentActivities(Landroid/content/Intent;Landroid/content/pm/PackageManager$ResolveInfoFlags;)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryIntentActivitiesAsUser(Landroid/content/Intent;II)Ljava/util/List;
-HSPLandroid/app/ApplicationPackageManager;->queryIntentActivitiesAsUser(Landroid/content/Intent;Landroid/content/pm/PackageManager$ResolveInfoFlags;I)Ljava/util/List;
+HSPLandroid/app/ApplicationPackageManager;->queryIntentActivitiesAsUser(Landroid/content/Intent;Landroid/content/pm/PackageManager$ResolveInfoFlags;I)Ljava/util/List;+]Landroid/content/pm/IPackageManager;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager$ResolveInfoFlags;Landroid/content/pm/PackageManager$ResolveInfoFlags;]Landroid/content/pm/ParceledListSlice;Landroid/content/pm/ParceledListSlice;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/app/ApplicationPackageManager;->queryIntentContentProviders(Landroid/content/Intent;I)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryIntentContentProviders(Landroid/content/Intent;Landroid/content/pm/PackageManager$ResolveInfoFlags;)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryIntentContentProvidersAsUser(Landroid/content/Intent;II)Ljava/util/List;
@@ -1397,10 +1405,13 @@
 HSPLandroid/app/BroadcastOptions;-><init>()V
 HSPLandroid/app/BroadcastOptions;->isTemporaryAppAllowlistSet()Z
 HSPLandroid/app/BroadcastOptions;->makeBasic()Landroid/app/BroadcastOptions;
+HSPLandroid/app/BroadcastOptions;->resetTemporaryAppAllowlist()V
 HSPLandroid/app/BroadcastOptions;->setTemporaryAppWhitelistDuration(J)V
 HSPLandroid/app/BroadcastOptions;->toBundle()Landroid/os/Bundle;
 HSPLandroid/app/ClientTransactionHandler;-><init>()V
 HSPLandroid/app/ClientTransactionHandler;->scheduleTransaction(Landroid/app/servertransaction/ClientTransaction;)V
+HSPLandroid/app/ComponentOptions;-><init>()V
+HSPLandroid/app/ComponentOptions;->toBundle()Landroid/os/Bundle;+]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLandroid/app/ConfigurationController;-><init>(Landroid/app/ActivityThreadInternal;)V
 HSPLandroid/app/ConfigurationController;->applyCompatConfiguration()Landroid/content/res/Configuration;
 HSPLandroid/app/ConfigurationController;->createNewConfigAndUpdateIfNotNull(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)Landroid/content/res/Configuration;
@@ -1436,9 +1447,9 @@
 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;JLjava/lang/String;Landroid/os/Handler;Ljava/util/concurrent/Executor;Landroid/os/UserHandle;)Z+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;
+HSPLandroid/app/ContextImpl;->bindServiceCommon(Landroid/content/Intent;Landroid/content/ServiceConnection;JLjava/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;->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
@@ -1485,7 +1496,7 @@
 HSPLandroid/app/ContextImpl;->fileList()[Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->finalize()V
 HSPLandroid/app/ContextImpl;->getActivityToken()Landroid/os/IBinder;
-HSPLandroid/app/ContextImpl;->getApplicationContext()Landroid/content/Context;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;
+HSPLandroid/app/ContextImpl;->getApplicationContext()Landroid/content/Context;
 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
@@ -1500,7 +1511,7 @@
 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;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Ljava/io/File;Ljava/io/File;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
+HSPLandroid/app/ContextImpl;->getDataDir()Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getDatabasePath(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getDatabasesDir()Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getDeviceId()I
@@ -1512,7 +1523,7 @@
 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;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
+HSPLandroid/app/ContextImpl;->getExternalFilesDirs(Ljava/lang/String;)[Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getExternalMediaDirs()[Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getFileStreamPath(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getFilesDir()Ljava/io/File;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
@@ -1525,21 +1536,21 @@
 HSPLandroid/app/ContextImpl;->getOuterContext()Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->getPackageCodePath()Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->getPackageManager()Landroid/content/pm/PackageManager;
-HSPLandroid/app/ContextImpl;->getPackageName()Ljava/lang/String;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;
+HSPLandroid/app/ContextImpl;->getPackageName()Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->getPackageResourcePath()Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->getPreferencesDir()Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getReceiverRestrictedContext()Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->getResources()Landroid/content/res/Resources;
-HSPLandroid/app/ContextImpl;->getSharedPreferences(Ljava/io/File;I)Landroid/content/SharedPreferences;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
+HSPLandroid/app/ContextImpl;->getSharedPreferences(Ljava/io/File;I)Landroid/content/SharedPreferences;
 HSPLandroid/app/ContextImpl;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;
-HSPLandroid/app/ContextImpl;->getSharedPreferencesCacheLocked()Landroid/util/ArrayMap;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
+HSPLandroid/app/ContextImpl;->getSharedPreferencesCacheLocked()Landroid/util/ArrayMap;
 HSPLandroid/app/ContextImpl;->getSharedPreferencesPath(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
 HSPLandroid/app/ContextImpl;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->getTheme()Landroid/content/res/Resources$Theme;
 HSPLandroid/app/ContextImpl;->getThemeResId()I
 HSPLandroid/app/ContextImpl;->getUser()Landroid/os/UserHandle;
-HSPLandroid/app/ContextImpl;->getUserId()I+]Landroid/os/UserHandle;Landroid/os/UserHandle;
+HSPLandroid/app/ContextImpl;->getUserId()I
 HSPLandroid/app/ContextImpl;->getWindowContextToken()Landroid/os/IBinder;
 HSPLandroid/app/ContextImpl;->grantUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V
 HSPLandroid/app/ContextImpl;->initializeTheme()V
@@ -1563,7 +1574,7 @@
 HSPLandroid/app/ContextImpl;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;I)Landroid/content/Intent;
 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/ActivityThread;Landroid/app/ActivityThread;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/content/Intent;Landroid/content/Intent;
 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
@@ -1859,10 +1870,10 @@
 HSPLandroid/app/IActivityManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->attachApplication(Landroid/app/IApplicationThread;J)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->backupAgentCreated(Ljava/lang/String;Landroid/os/IBinder;I)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->bindServiceInstance(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;JLjava/lang/String;Ljava/lang/String;I)I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/IActivityManager$Stub$Proxy;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->bindServiceInstance(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;JLjava/lang/String;Ljava/lang/String;I)I
 HSPLandroid/app/IActivityManager$Stub$Proxy;->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
 HSPLandroid/app/IActivityManager$Stub$Proxy;->cancelIntentSender(Landroid/content/IIntentSender;)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->checkPermission(Ljava/lang/String;II)I
+HSPLandroid/app/IActivityManager$Stub$Proxy;->checkPermission(Ljava/lang/String;II)I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/IActivityManager$Stub$Proxy;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->checkUriPermission(Landroid/net/Uri;IIIILandroid/os/IBinder;)I
 HSPLandroid/app/IActivityManager$Stub$Proxy;->finishAttachApplication(J)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V
@@ -1884,10 +1895,10 @@
 HSPLandroid/app/IActivityManager$Stub$Proxy;->isIntentSenderAnActivity(Landroid/content/IIntentSender;)Z
 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;->publishService(Landroid/os/IBinder;Landroid/content/Intent;Landroid/os/IBinder;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/IActivityManager$Stub$Proxy;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 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;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/IActivityManager$Stub$Proxy;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/app/IActivityManager$Stub$Proxy;->registerStrictModeCallback(Landroid/os/IBinder;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/IActivityManager$Stub$Proxy;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->registerStrictModeCallback(Landroid/os/IBinder;)V
 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
@@ -1899,7 +1910,7 @@
 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
 HSPLandroid/app/IActivityManager$Stub$Proxy;->unbindService(Landroid/app/IServiceConnection;)Z
-HSPLandroid/app/IActivityManager$Stub$Proxy;->unregisterReceiver(Landroid/content/IIntentReceiver;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->unregisterReceiver(Landroid/content/IIntentReceiver;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/IActivityManager$Stub$Proxy;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->unstableProviderDied(Landroid/os/IBinder;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->waitForNetworkStateUpdate(J)V
 HSPLandroid/app/IActivityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IActivityManager;
@@ -1950,7 +1961,7 @@
 HSPLandroid/app/INotificationManager$Stub$Proxy;->areNotificationsEnabled(Ljava/lang/String;)Z
 HSPLandroid/app/INotificationManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 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/app/INotificationManager$Stub$Proxy;Landroid/app/INotificationManager$Stub$Proxy;]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
@@ -1985,6 +1996,7 @@
 HSPLandroid/app/IUiModeManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IUiModeManager;
 HSPLandroid/app/IUiModeManagerCallback$Stub;-><init>()V
 HSPLandroid/app/IUiModeManagerCallback$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/app/IUidFrozenStateChangedCallback$Stub;-><init>()V
 HSPLandroid/app/IUidObserver$Stub;-><init>()V
 HSPLandroid/app/IUidObserver$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/app/IUidObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
@@ -2056,15 +2068,15 @@
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher$Args;)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->$r8$lambda$gDuJqgxY6Zb-ifyeubKeivTLAwk(Landroid/app/LoadedApk$ReceiverDispatcher$Args;)V
-HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIILjava/lang/String;)V+]Landroid/content/Intent;Landroid/content/Intent;]Landroid/app/IApplicationThread;Landroid/app/ActivityThread$ApplicationThread;
+HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIILjava/lang/String;)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->getRunnable()Ljava/lang/Runnable;
-HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->lambda$getRunnable$0()V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/app/LoadedApk$ReceiverDispatcher$Args;Landroid/app/LoadedApk$ReceiverDispatcher$Args;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/Context;missing_types]Ljava/lang/Object;missing_types]Landroid/content/BroadcastReceiver;missing_types]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLandroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher;Z)V
+HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->lambda$getRunnable$0()V
+HSPLandroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;-><init>(Landroid/app/IApplicationThread;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$InnerReceiver;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIILjava/lang/String;)V+]Landroid/app/LoadedApk$ReceiverDispatcher;Landroid/app/LoadedApk$ReceiverDispatcher;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
+HSPLandroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIILjava/lang/String;)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher;-><init>(Landroid/app/IApplicationThread;Landroid/content/BroadcastReceiver;Landroid/content/Context;Landroid/os/Handler;Landroid/app/Instrumentation;Z)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher;->getIIntentReceiver()Landroid/content/IIntentReceiver;
-HSPLandroid/app/LoadedApk$ReceiverDispatcher;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIILjava/lang/String;)V+]Landroid/os/Handler;missing_types]Landroid/app/LoadedApk$ReceiverDispatcher$Args;Landroid/app/LoadedApk$ReceiverDispatcher$Args;
+HSPLandroid/app/LoadedApk$ReceiverDispatcher;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIILjava/lang/String;)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher;->validate(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher$ConnectionInfo;-><init>()V
 HSPLandroid/app/LoadedApk$ServiceDispatcher$ConnectionInfo;-><init>(Landroid/app/LoadedApk$ServiceDispatcher$ConnectionInfo-IA;)V
@@ -2074,8 +2086,8 @@
 HSPLandroid/app/LoadedApk$ServiceDispatcher$InnerConnection;->connected(Landroid/content/ComponentName;Landroid/os/IBinder;Z)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher$RunConnection;-><init>(Landroid/app/LoadedApk$ServiceDispatcher;Landroid/content/ComponentName;Landroid/os/IBinder;IZ)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher$RunConnection;->run()V
-HSPLandroid/app/LoadedApk$ServiceDispatcher;-><init>(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;J)V+]Landroid/app/ServiceConnectionLeaked;Landroid/app/ServiceConnectionLeaked;
-HSPLandroid/app/LoadedApk$ServiceDispatcher;-><init>(Landroid/content/ServiceConnection;Landroid/content/Context;Ljava/util/concurrent/Executor;J)V+]Landroid/app/ServiceConnectionLeaked;Landroid/app/ServiceConnectionLeaked;
+HSPLandroid/app/LoadedApk$ServiceDispatcher;-><init>(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;J)V
+HSPLandroid/app/LoadedApk$ServiceDispatcher;-><init>(Landroid/content/ServiceConnection;Landroid/content/Context;Ljava/util/concurrent/Executor;J)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher;->connected(Landroid/content/ComponentName;Landroid/os/IBinder;Z)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher;->death(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher;->doConnected(Landroid/content/ComponentName;Landroid/os/IBinder;Z)V
@@ -2109,7 +2121,7 @@
 HSPLandroid/app/LoadedApk;->createOrUpdateClassLoaderLocked(Ljava/util/List;)V
 HSPLandroid/app/LoadedApk;->createSharedLibrariesLoaders(Ljava/util/List;ZLjava/lang/String;Ljava/lang/String;)Landroid/util/Pair;
 HSPLandroid/app/LoadedApk;->createSharedLibraryLoader(Landroid/content/pm/SharedLibraryInfo;ZLjava/lang/String;Ljava/lang/String;)Ljava/lang/ClassLoader;
-HSPLandroid/app/LoadedApk;->forgetReceiverDispatcher(Landroid/content/Context;Landroid/content/BroadcastReceiver;)Landroid/content/IIntentReceiver;
+HSPLandroid/app/LoadedApk;->forgetReceiverDispatcher(Landroid/content/Context;Landroid/content/BroadcastReceiver;)Landroid/content/IIntentReceiver;+]Landroid/app/LoadedApk$ReceiverDispatcher;Landroid/app/LoadedApk$ReceiverDispatcher;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/app/LoadedApk;->forgetServiceDispatcher(Landroid/content/Context;Landroid/content/ServiceConnection;)Landroid/app/IServiceConnection;
 HSPLandroid/app/LoadedApk;->getAppDir()Ljava/lang/String;
 HSPLandroid/app/LoadedApk;->getAppFactory()Landroid/app/AppComponentFactory;
@@ -2129,7 +2141,7 @@
 HSPLandroid/app/LoadedApk;->getResources()Landroid/content/res/Resources;
 HSPLandroid/app/LoadedApk;->getServiceDispatcher(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;J)Landroid/app/IServiceConnection;
 HSPLandroid/app/LoadedApk;->getServiceDispatcher(Landroid/content/ServiceConnection;Landroid/content/Context;Ljava/util/concurrent/Executor;J)Landroid/app/IServiceConnection;
-HSPLandroid/app/LoadedApk;->getServiceDispatcherCommon(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;Ljava/util/concurrent/Executor;J)Landroid/app/IServiceConnection;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/LoadedApk$ServiceDispatcher;Landroid/app/LoadedApk$ServiceDispatcher;
+HSPLandroid/app/LoadedApk;->getServiceDispatcherCommon(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;Ljava/util/concurrent/Executor;J)Landroid/app/IServiceConnection;
 HSPLandroid/app/LoadedApk;->getSplitClassLoader(Ljava/lang/String;)Ljava/lang/ClassLoader;
 HSPLandroid/app/LoadedApk;->getSplitPaths(Ljava/lang/String;)[Ljava/lang/String;
 HSPLandroid/app/LoadedApk;->getSplitResDirs()[Ljava/lang/String;
@@ -2193,7 +2205,6 @@
 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;->getStyle()Landroid/app/Notification$Style;
 HSPLandroid/app/Notification$Builder;->maybeCloneStrippedForDelivery(Landroid/app/Notification;)Landroid/app/Notification;
 HSPLandroid/app/Notification$Builder;->recoverBuilder(Landroid/content/Context;Landroid/app/Notification;)Landroid/app/Notification$Builder;
@@ -2313,7 +2324,7 @@
 HSPLandroid/app/Notification;->isGroupChild()Z
 HSPLandroid/app/Notification;->isGroupSummary()Z
 HSPLandroid/app/Notification;->isMediaNotification()Z
-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/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/Notification;->readFromParcelImpl(Landroid/os/Parcel;)V
 HSPLandroid/app/Notification;->reduceImageSizes(Landroid/content/Context;)V
 HSPLandroid/app/Notification;->reduceImageSizesForRemoteView(Landroid/widget/RemoteViews;Landroid/content/Context;Z)V
 HSPLandroid/app/Notification;->removeTextSizeSpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
@@ -2326,7 +2337,7 @@
 HSPLandroid/app/Notification;->writeToParcelImpl(Landroid/os/Parcel;I)V
 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;-><init>(Landroid/os/Parcel;)V
+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;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
 HSPLandroid/app/NotificationChannel;-><init>(Ljava/lang/String;Ljava/lang/CharSequence;I)V
 HSPLandroid/app/NotificationChannel;->canBubble()Z
 HSPLandroid/app/NotificationChannel;->canBypassDnd()Z
@@ -2345,13 +2356,12 @@
 HSPLandroid/app/NotificationChannel;->getName()Ljava/lang/CharSequence;
 HSPLandroid/app/NotificationChannel;->getOriginalImportance()I
 HSPLandroid/app/NotificationChannel;->getSound()Landroid/net/Uri;
-HSPLandroid/app/NotificationChannel;->getTrimmedString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/NotificationChannel;->getTrimmedString(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/app/NotificationChannel;->getUserLockedFields()I
 HSPLandroid/app/NotificationChannel;->getVibrationPattern()[J
 HSPLandroid/app/NotificationChannel;->hasUserSetImportance()Z
 HSPLandroid/app/NotificationChannel;->isBlockable()Z
 HSPLandroid/app/NotificationChannel;->isDeleted()Z
-HSPLandroid/app/NotificationChannel;->isFgServiceShown()Z
 HSPLandroid/app/NotificationChannel;->isImportantConversation()Z
 HSPLandroid/app/NotificationChannel;->setBlockable(Z)V
 HSPLandroid/app/NotificationChannel;->setBypassDnd(Z)V
@@ -2412,8 +2422,6 @@
 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;->zenModeToInterruptionFilter(I)I
-HSPLandroid/app/PendingIntent$$ExternalSyntheticLambda1;-><init>()V
-HSPLandroid/app/PendingIntent$$ExternalSyntheticLambda1;->execute(Ljava/lang/Runnable;)V
 HSPLandroid/app/PendingIntent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/PendingIntent$FinishedDispatcher;-><init>(Landroid/app/PendingIntent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;)V
@@ -2423,7 +2431,7 @@
 HSPLandroid/app/PendingIntent;-><init>(Landroid/os/IBinder;Ljava/lang/Object;)V
 HSPLandroid/app/PendingIntent;->buildServicePendingIntent(Landroid/content/Context;ILandroid/content/Intent;II)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->cancel()V
-HSPLandroid/app/PendingIntent;->checkPendingIntent(ILandroid/content/Intent;Landroid/content/Context;)V
+HSPLandroid/app/PendingIntent;->checkPendingIntent(ILandroid/content/Intent;Landroid/content/Context;Z)V+]Landroid/content/Context;missing_types]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/app/PendingIntent;->equals(Ljava/lang/Object;)Z
 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;
@@ -2440,7 +2448,7 @@
 HSPLandroid/app/PendingIntent;->getService(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->hashCode()I
 HSPLandroid/app/PendingIntent;->isActivity()Z
-HSPLandroid/app/PendingIntent;->isNewMutableDisallowedImplicitPendingIntent(ILandroid/content/Intent;)Z+]Landroid/content/Intent;Landroid/content/Intent;
+HSPLandroid/app/PendingIntent;->isNewMutableDisallowedImplicitPendingIntent(ILandroid/content/Intent;Z)Z+]Landroid/content/Intent;Landroid/content/Intent;
 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
@@ -2471,7 +2479,7 @@
 HSPLandroid/app/PictureInPictureParams$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/PictureInPictureParams;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/PropertyInvalidatedCache$1;-><init>(Landroid/app/PropertyInvalidatedCache;IFZ)V
-HSPLandroid/app/PropertyInvalidatedCache$1;->removeEldestEntry(Ljava/util/Map$Entry;)Z
+HSPLandroid/app/PropertyInvalidatedCache$1;->removeEldestEntry(Ljava/util/Map$Entry;)Z+]Landroid/app/PropertyInvalidatedCache$1;Landroid/app/PropertyInvalidatedCache$1;
 HSPLandroid/app/PropertyInvalidatedCache$DefaultComputer;-><init>(Landroid/app/PropertyInvalidatedCache;)V
 HSPLandroid/app/PropertyInvalidatedCache$NoPreloadHolder;-><clinit>()V
 HSPLandroid/app/PropertyInvalidatedCache$NoPreloadHolder;->next()J
@@ -2492,16 +2500,16 @@
 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+]Landroid/os/SystemProperties$Handle;Landroid/os/SystemProperties$Handle;
+HSPLandroid/app/PropertyInvalidatedCache;->getCurrentNonce()J
 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;+]Ljava/util/LinkedHashMap;Landroid/app/PropertyInvalidatedCache$1;]Landroid/app/PropertyInvalidatedCache;megamorphic_types
+HSPLandroid/app/PropertyInvalidatedCache;->query(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/app/PropertyInvalidatedCache;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/app/PropertyInvalidatedCache;->refresh(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/app/PropertyInvalidatedCache;->registerCache()V
+HSPLandroid/app/PropertyInvalidatedCache;->registerCache()V+]Ljava/util/HashSet;Ljava/util/HashSet;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
 HSPLandroid/app/QueuedWork$QueuedWorkHandler;-><init>(Landroid/os/Looper;)V
 HSPLandroid/app/QueuedWork$QueuedWorkHandler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/app/QueuedWork;->-$$Nest$smprocessPendingWork()V
@@ -2515,7 +2523,7 @@
 HSPLandroid/app/ReceiverInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ReceiverInfo;
 HSPLandroid/app/ReceiverInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/ReceiverInfo;-><init>()V
-HSPLandroid/app/ReceiverInfo;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/ReceiverInfo;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/app/ReceiverRestrictedContext;-><init>(Landroid/content/Context;)V
 HSPLandroid/app/RemoteAction$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/RemoteAction;
 HSPLandroid/app/RemoteAction$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -2545,7 +2553,7 @@
 HSPLandroid/app/ResourcesManager$ApkAssetsSupplier;->load(Landroid/app/ResourcesManager$ApkKey;)Landroid/content/res/ApkAssets;
 HSPLandroid/app/ResourcesManager$ApkKey;-><init>(Ljava/lang/String;ZZ)V
 HSPLandroid/app/ResourcesManager$ApkKey;->equals(Ljava/lang/Object;)Z
-HSPLandroid/app/ResourcesManager$ApkKey;->hashCode()I
+HSPLandroid/app/ResourcesManager$ApkKey;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/app/ResourcesManager$UpdateHandler;-><init>(Landroid/app/ResourcesManager;)V
 HSPLandroid/app/ResourcesManager$UpdateHandler;-><init>(Landroid/app/ResourcesManager;Landroid/app/ResourcesManager$UpdateHandler-IA;)V
 HSPLandroid/app/ResourcesManager;->-$$Nest$mloadApkAssets(Landroid/app/ResourcesManager;Landroid/app/ResourcesManager$ApkKey;)Landroid/content/res/ApkAssets;
@@ -2570,7 +2578,7 @@
 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;->extractApkKeys(Landroid/content/res/ResourcesKey;)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;
@@ -2643,8 +2651,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;+]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]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
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->commitToMemory()Landroid/app/SharedPreferencesImpl$MemoryCommitResult;+]Ljava/lang/Object;Ljava/lang/String;,Ljava/lang/Integer;,Ljava/lang/Boolean;,Ljava/lang/Long;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/List;Ljava/util/ArrayList;
+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/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;
@@ -2676,7 +2684,7 @@
 HSPLandroid/app/SharedPreferencesImpl;->getAll()Ljava/util/Map;
 HSPLandroid/app/SharedPreferencesImpl;->getBoolean(Ljava/lang/String;Z)Z
 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;+]Ljava/util/Map;Ljava/util/HashMap;
 HSPLandroid/app/SharedPreferencesImpl;->getStringSet(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;
@@ -2687,7 +2695,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;
@@ -2706,6 +2714,7 @@
 HSPLandroid/app/SystemServiceRegistry$105;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 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;)Landroid/app/slice/SliceManager;
 HSPLandroid/app/SystemServiceRegistry$108;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$109;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$10;->createService(Landroid/app/ContextImpl;)Landroid/media/MediaRouter;
@@ -2755,15 +2764,17 @@
 HSPLandroid/app/SystemServiceRegistry$24;->createService(Landroid/app/ContextImpl;)Landroid/os/BatteryManager;
 HSPLandroid/app/SystemServiceRegistry$24;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$25;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$27;->getService(Landroid/app/ContextImpl;)Landroid/hardware/input/InputManager;
-HSPLandroid/app/SystemServiceRegistry$27;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$27;->createService(Landroid/app/ContextImpl;)Landroid/hardware/input/InputManager;
+HSPLandroid/app/SystemServiceRegistry$27;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$28;->createService(Landroid/app/ContextImpl;)Landroid/hardware/display/DisplayManager;
 HSPLandroid/app/SystemServiceRegistry$28;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$29;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$2;->createService(Landroid/app/ContextImpl;)Landroid/view/accessibility/CaptioningManager;
 HSPLandroid/app/SystemServiceRegistry$2;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$30;->getService(Landroid/app/ContextImpl;)Landroid/view/inputmethod/InputMethodManager;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
-HSPLandroid/app/SystemServiceRegistry$30;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;+]Landroid/app/SystemServiceRegistry$30;Landroid/app/SystemServiceRegistry$30;
+HSPLandroid/app/SystemServiceRegistry$30;->getService(Landroid/app/ContextImpl;)Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/app/SystemServiceRegistry$30;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$31;->createService(Landroid/app/ContextImpl;)Landroid/view/textservice/TextServicesManager;
+HSPLandroid/app/SystemServiceRegistry$31;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$32;->createService(Landroid/app/ContextImpl;)Landroid/app/KeyguardManager;
 HSPLandroid/app/SystemServiceRegistry$32;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$33;->createService(Landroid/app/ContextImpl;)Landroid/view/LayoutInflater;
@@ -2784,6 +2795,7 @@
 HSPLandroid/app/SystemServiceRegistry$42;->createService(Landroid/app/ContextImpl;)Landroid/hardware/SensorManager;
 HSPLandroid/app/SystemServiceRegistry$42;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$43;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$44;->createService(Landroid/app/ContextImpl;)Landroid/app/StatusBarManager;
 HSPLandroid/app/SystemServiceRegistry$44;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$45;->createService(Landroid/app/ContextImpl;)Landroid/os/storage/StorageManager;
 HSPLandroid/app/SystemServiceRegistry$45;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
@@ -2821,7 +2833,7 @@
 HSPLandroid/app/SystemServiceRegistry$65;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$66;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$67;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$68;->createService(Landroid/app/ContextImpl;)Landroid/companion/virtual/VirtualDeviceManager;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLandroid/app/SystemServiceRegistry$68;->createService(Landroid/app/ContextImpl;)Landroid/companion/virtual/VirtualDeviceManager;
 HSPLandroid/app/SystemServiceRegistry$68;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$69;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$71;->createService(Landroid/app/ContextImpl;)Landroid/hardware/fingerprint/FingerprintManager;
@@ -2862,7 +2874,7 @@
 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;+]Landroid/app/SystemServiceRegistry$ServiceFetcher;megamorphic_types]Ljava/util/Map;Landroid/util/ArrayMap;
+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/TaskInfo;-><init>()V
 HSPLandroid/app/TaskInfo;->getWindowingMode()I
@@ -2881,12 +2893,12 @@
 HSPLandroid/app/TaskStackListener;->onTaskRemovalStarted(Landroid/app/ActivityManager$RunningTaskInfo;)V
 HSPLandroid/app/TaskStackListener;->onTaskRemoved(I)V
 HSPLandroid/app/TaskStackListener;->onTaskRequestedOrientationChanged(II)V
-HSPLandroid/app/UiModeManager$1;-><init>(Landroid/app/UiModeManager;)V
 HSPLandroid/app/UiModeManager$OnProjectionStateChangedListenerResourceManager;-><init>()V
 HSPLandroid/app/UiModeManager$OnProjectionStateChangedListenerResourceManager;-><init>(Landroid/app/UiModeManager$OnProjectionStateChangedListenerResourceManager-IA;)V
 HSPLandroid/app/UiModeManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/app/UiModeManager;->getActiveProjectionTypes()I
 HSPLandroid/app/UiModeManager;->getCurrentModeType()I
+HSPLandroid/app/UidObserver;-><init>()V
 HSPLandroid/app/UriGrantsManager$1;->create()Landroid/app/IUriGrantsManager;
 HSPLandroid/app/UriGrantsManager$1;->create()Ljava/lang/Object;
 HSPLandroid/app/UriGrantsManager;->getService()Landroid/app/IUriGrantsManager;
@@ -2908,7 +2920,7 @@
 HSPLandroid/app/WallpaperManager;->setWallpaperZoomOut(Landroid/os/IBinder;F)V
 HSPLandroid/app/WindowConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/WindowConfiguration;
 HSPLandroid/app/WindowConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/WindowConfiguration;-><init>()V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
+HSPLandroid/app/WindowConfiguration;-><init>()V
 HSPLandroid/app/WindowConfiguration;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/WindowConfiguration;->activityTypeToString(I)Ljava/lang/String;
 HSPLandroid/app/WindowConfiguration;->canReceiveKeys()Z
@@ -2943,7 +2955,7 @@
 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;->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
@@ -3107,7 +3119,7 @@
 HSPLandroid/app/backup/IBackupCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupCallback;
 HSPLandroid/app/backup/IBackupManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 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/app/backup/IBackupManager$Stub$Proxy;Landroid/app/backup/IBackupManager$Stub$Proxy;]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
@@ -3146,9 +3158,9 @@
 HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->cancel(Ljava/lang/String;I)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/job/IJobScheduler$Stub$Proxy;Landroid/app/job/IJobScheduler$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->enqueue(Ljava/lang/String;Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I
-HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->getAllPendingJobsInNamespace(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/job/IJobScheduler$Stub$Proxy;Landroid/app/job/IJobScheduler$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->getPendingJob(Ljava/lang/String;I)Landroid/app/job/JobInfo;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/job/IJobScheduler$Stub$Proxy;Landroid/app/job/IJobScheduler$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->schedule(Ljava/lang/String;Landroid/app/job/JobInfo;)I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/job/IJobScheduler$Stub$Proxy;Landroid/app/job/IJobScheduler$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->getAllPendingJobsInNamespace(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->getPendingJob(Ljava/lang/String;I)Landroid/app/job/JobInfo;
+HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->schedule(Ljava/lang/String;Landroid/app/job/JobInfo;)I
 HSPLandroid/app/job/IJobScheduler$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobScheduler;
 HSPLandroid/app/job/IJobService$Stub;-><init>()V
 HSPLandroid/app/job/IJobService$Stub;->asBinder()Landroid/os/IBinder;
@@ -3215,7 +3227,7 @@
 HSPLandroid/app/job/JobInfo$TriggerContentUri;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/job/JobInfo;-><init>(Landroid/app/job/JobInfo$Builder;)V+]Landroid/os/PersistableBundle;Landroid/os/PersistableBundle;]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/job/JobInfo;-><init>(Landroid/app/job/JobInfo$Builder;Landroid/app/job/JobInfo-IA;)V
-HSPLandroid/app/job/JobInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/net/NetworkRequest$1;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/job/JobInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/job/JobInfo;->enforceValidity(ZZ)V
 HSPLandroid/app/job/JobInfo;->getExtras()Landroid/os/PersistableBundle;
 HSPLandroid/app/job/JobInfo;->getFlags()I
@@ -3234,7 +3246,7 @@
 HSPLandroid/app/job/JobInfo;->isPersisted()Z
 HSPLandroid/app/job/JobInfo;->isRequireCharging()Z
 HSPLandroid/app/job/JobInfo;->isRequireDeviceIdle()Z
-HSPLandroid/app/job/JobInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/job/JobInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/net/NetworkRequest;Landroid/net/NetworkRequest;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/job/JobParameters$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/job/JobParameters;
 HSPLandroid/app/job/JobParameters$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/job/JobParameters;-><init>(Landroid/os/Parcel;)V
@@ -3244,6 +3256,7 @@
 HSPLandroid/app/job/JobParameters;->getExtras()Landroid/os/PersistableBundle;
 HSPLandroid/app/job/JobParameters;->getJobId()I
 HSPLandroid/app/job/JobParameters;->getNetwork()Landroid/net/Network;
+HSPLandroid/app/job/JobParameters;->getStopReason()I
 HSPLandroid/app/job/JobParameters;->getTransientExtras()Landroid/os/Bundle;
 HSPLandroid/app/job/JobParameters;->getTriggeredContentAuthorities()[Ljava/lang/String;
 HSPLandroid/app/job/JobParameters;->getTriggeredContentUris()[Landroid/net/Uri;
@@ -3256,16 +3269,19 @@
 HSPLandroid/app/job/JobSchedulerFrameworkInitializer;->lambda$registerServiceWrappers$0(Landroid/content/Context;Landroid/os/IBinder;)Landroid/app/job/JobScheduler;
 HSPLandroid/app/job/JobSchedulerFrameworkInitializer;->lambda$registerServiceWrappers$1(Landroid/content/Context;Landroid/os/IBinder;)Landroid/os/DeviceIdleManager;
 HSPLandroid/app/job/JobService$1;-><init>(Landroid/app/job/JobService;Landroid/app/Service;)V
+HSPLandroid/app/job/JobService$1;->onNetworkChanged(Landroid/app/job/JobParameters;)V
 HSPLandroid/app/job/JobService$1;->onStartJob(Landroid/app/job/JobParameters;)Z
 HSPLandroid/app/job/JobService$1;->onStopJob(Landroid/app/job/JobParameters;)Z
 HSPLandroid/app/job/JobService;-><init>()V
 HSPLandroid/app/job/JobService;->jobFinished(Landroid/app/job/JobParameters;Z)V
 HSPLandroid/app/job/JobService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HSPLandroid/app/job/JobService;->onNetworkChanged(Landroid/app/job/JobParameters;)V
 HSPLandroid/app/job/JobServiceEngine$JobHandler;-><init>(Landroid/app/job/JobServiceEngine;Landroid/os/Looper;)V
 HSPLandroid/app/job/JobServiceEngine$JobHandler;->ackStartMessage(Landroid/app/job/JobParameters;Z)V
 HSPLandroid/app/job/JobServiceEngine$JobHandler;->ackStopMessage(Landroid/app/job/JobParameters;Z)V
 HSPLandroid/app/job/JobServiceEngine$JobHandler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/app/job/JobServiceEngine$JobInterface;-><init>(Landroid/app/job/JobServiceEngine;)V
+HSPLandroid/app/job/JobServiceEngine$JobInterface;->onNetworkChanged(Landroid/app/job/JobParameters;)V
 HSPLandroid/app/job/JobServiceEngine$JobInterface;->startJob(Landroid/app/job/JobParameters;)V
 HSPLandroid/app/job/JobServiceEngine$JobInterface;->stopJob(Landroid/app/job/JobParameters;)V
 HSPLandroid/app/job/JobServiceEngine;-><init>(Landroid/app/Service;)V
@@ -3428,6 +3444,7 @@
 HSPLandroid/app/slice/SliceManager;->bindSlice(Landroid/net/Uri;Ljava/util/Set;)Landroid/app/slice/Slice;
 HSPLandroid/app/slice/SliceManager;->getPinnedSlices()Ljava/util/List;
 HSPLandroid/app/slice/SliceManager;->grantSlicePermission(Ljava/lang/String;Landroid/net/Uri;)V
+HSPLandroid/app/slice/SliceProvider$$ExternalSyntheticLambda0;-><init>(Landroid/app/slice/SliceProvider;)V
 HSPLandroid/app/slice/SliceProvider;-><init>([Ljava/lang/String;)V
 HSPLandroid/app/slice/SliceProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V
 HSPLandroid/app/slice/SliceProvider;->call(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
@@ -3447,6 +3464,7 @@
 HSPLandroid/app/smartspace/SmartspaceConfig;-><clinit>()V
 HSPLandroid/app/smartspace/SmartspaceSessionId$1;-><init>()V
 HSPLandroid/app/smartspace/SmartspaceSessionId;-><clinit>()V
+HSPLandroid/app/smartspace/SmartspaceSessionId;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/smartspace/SmartspaceTarget$1;-><init>()V
 HSPLandroid/app/smartspace/SmartspaceTarget;-><clinit>()V
 HSPLandroid/app/smartspace/SmartspaceTargetEvent$1;-><init>()V
@@ -3504,14 +3522,15 @@
 HSPLandroid/app/usage/UsageEvents;-><init>(Landroid/os/Parcel;)V
 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
-HSPLandroid/app/usage/UsageStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/usage/UsageStats;
+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;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]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;-><init>()V
 HSPLandroid/app/usage/UsageStats;->getPackageName()Ljava/lang/String;
 HSPLandroid/app/usage/UsageStats;->update(Ljava/lang/String;JII)V
 HSPLandroid/app/usage/UsageStatsManager;-><init>(Landroid/content/Context;Landroid/app/usage/IUsageStatsManager;)V
+HSPLandroid/app/usage/UsageStatsManager;->getAppStandbyBucket()I
 HSPLandroid/app/usage/UsageStatsManager;->queryEvents(JJ)Landroid/app/usage/UsageEvents;
 HSPLandroid/app/usage/UsageStatsManager;->queryUsageStats(IJJ)Ljava/util/List;
 HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda0;-><init>()V
@@ -3522,7 +3541,6 @@
 HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
 HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda3;-><init>()V
 HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda3;->apply(I)Ljava/lang/Object;
-HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda4;-><init>(Landroid/appwidget/AppWidgetManager;)V
 HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda4;->run()V
 HSPLandroid/appwidget/AppWidgetManager;-><init>(Landroid/content/Context;Lcom/android/internal/appwidget/IAppWidgetService;)V
 HSPLandroid/appwidget/AppWidgetManager;->getAppWidgetIds(Landroid/content/ComponentName;)[I
@@ -3574,6 +3592,7 @@
 HSPLandroid/content/AttributionSource$ScopedParcelState;->close()V
 HSPLandroid/content/AttributionSource$ScopedParcelState;->getParcel()Landroid/os/Parcel;
 HSPLandroid/content/AttributionSource;-><clinit>()V
+HSPLandroid/content/AttributionSource;-><init>(IILjava/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;)V
 HSPLandroid/content/AttributionSource;-><init>(ILjava/lang/String;Ljava/lang/String;Landroid/os/IBinder;)V
 HSPLandroid/content/AttributionSource;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/util/Set;Landroid/content/AttributionSource;)V
@@ -3592,6 +3611,7 @@
 HSPLandroid/content/AttributionSource;->getRenouncedPermissions()Ljava/util/Set;
 HSPLandroid/content/AttributionSource;->getToken()Landroid/os/IBinder;
 HSPLandroid/content/AttributionSource;->getUid()I
+HSPLandroid/content/AttributionSource;->hashCode()I+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;
 HSPLandroid/content/AttributionSource;->myAttributionSource()Landroid/content/AttributionSource;
 HSPLandroid/content/AttributionSource;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/AttributionSourceState$1;-><init>()V
@@ -3601,7 +3621,7 @@
 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+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/AttributionSourceState;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/content/AttributionSourceState;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/AutofillOptions$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/AutofillOptions;
 HSPLandroid/content/AutofillOptions$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -3687,13 +3707,12 @@
 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;->unflattenFromString(Ljava/lang/String;)Landroid/content/ComponentName;
+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/ContentCaptureOptions$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/ContentCaptureOptions;-><init>(IIIIILandroid/util/ArraySet;)V
-HSPLandroid/content/ContentCaptureOptions;-><init>(ZIIIIIZLandroid/util/ArraySet;)V
 HSPLandroid/content/ContentCaptureOptions;->isWhitelisted(Landroid/content/Context;)Z
 HSPLandroid/content/ContentCaptureOptions;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/ContentProvider$Transport;-><init>(Landroid/content/ContentProvider;)V
@@ -3734,7 +3753,7 @@
 HSPLandroid/content/ContentProvider;->getIContentProvider()Landroid/content/IContentProvider;
 HSPLandroid/content/ContentProvider;->getPathPermissions()[Landroid/content/pm/PathPermission;
 HSPLandroid/content/ContentProvider;->getReadPermission()Ljava/lang/String;
-HSPLandroid/content/ContentProvider;->getUriWithoutUserId(Landroid/net/Uri;)Landroid/net/Uri;
+HSPLandroid/content/ContentProvider;->getUriWithoutUserId(Landroid/net/Uri;)Landroid/net/Uri;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
 HSPLandroid/content/ContentProvider;->getUserIdFromAuthority(Ljava/lang/String;I)I
 HSPLandroid/content/ContentProvider;->getUserIdFromUri(Landroid/net/Uri;)I
 HSPLandroid/content/ContentProvider;->getUserIdFromUri(Landroid/net/Uri;I)I
@@ -3755,7 +3774,7 @@
 HSPLandroid/content/ContentProvider;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
 HSPLandroid/content/ContentProvider;->restoreCallingIdentity(Landroid/content/ContentProvider$CallingIdentity;)V
 HSPLandroid/content/ContentProvider;->setAuthorities(Ljava/lang/String;)V
-HSPLandroid/content/ContentProvider;->setCallingAttributionSource(Landroid/content/AttributionSource;)Landroid/content/AttributionSource;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
+HSPLandroid/content/ContentProvider;->setCallingAttributionSource(Landroid/content/AttributionSource;)Landroid/content/AttributionSource;
 HSPLandroid/content/ContentProvider;->setPathPermissions([Landroid/content/pm/PathPermission;)V
 HSPLandroid/content/ContentProvider;->setReadPermission(Ljava/lang/String;)V
 HSPLandroid/content/ContentProvider;->setTransportLoggingEnabled(Z)V
@@ -3819,9 +3838,9 @@
 HSPLandroid/content/ContentProviderProxy;->call(Landroid/content/AttributionSource;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
 HSPLandroid/content/ContentProviderProxy;->createCancellationSignal()Landroid/os/ICancellationSignal;
 HSPLandroid/content/ContentProviderProxy;->delete(Landroid/content/AttributionSource;Landroid/net/Uri;Landroid/os/Bundle;)I
-HSPLandroid/content/ContentProviderProxy;->insert(Landroid/content/AttributionSource;Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;
+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;
+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/os/ICancellationSignal;Landroid/os/ICancellationSignal$Stub$Proxy;]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;
 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;
@@ -3845,7 +3864,7 @@
 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;->acquireProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;+]Ljava/lang/String;Ljava/lang/String;]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;
@@ -3869,10 +3888,10 @@
 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;->getType(Landroid/net/Uri;)Ljava/lang/String;+]Ljava/lang/String;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
 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;
+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
@@ -3913,25 +3932,25 @@
 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;->equals(Ljava/lang/Object;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+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;
-HSPLandroid/content/ContentValues;->getAsLong(Ljava/lang/String;)Ljava/lang/Long;
+HSPLandroid/content/ContentValues;->getAsLong(Ljava/lang/String;)Ljava/lang/Long;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Number;Ljava/lang/Long;
 HSPLandroid/content/ContentValues;->getAsString(Ljava/lang/String;)Ljava/lang/String;
 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;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/content/ContentValues;->keySet()Ljava/util/Set;
 HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Boolean;)V
 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
-HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Long;)V
-HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Integer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Long;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 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
@@ -3940,7 +3959,7 @@
 HSPLandroid/content/ContentValues;->size()I
 HSPLandroid/content/ContentValues;->toString()Ljava/lang/String;
 HSPLandroid/content/ContentValues;->valueSet()Ljava/util/Set;
-HSPLandroid/content/ContentValues;->writeToParcel(Landroid/os/Parcel;I)V
+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;->getColorStateList(I)Landroid/content/res/ColorStateList;
@@ -3954,8 +3973,8 @@
 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;+]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(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;->registerComponentCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/content/Context;->unregisterComponentCallbacks(Landroid/content/ComponentCallbacks;)V
@@ -4010,7 +4029,7 @@
 HSPLandroid/content/ContextWrapper;->getAttributionSource()Landroid/content/AttributionSource;
 HSPLandroid/content/ContextWrapper;->getAttributionTag()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getAutofillClient()Landroid/view/autofill/AutofillManager$AutofillClient;
-HSPLandroid/content/ContextWrapper;->getAutofillOptions()Landroid/content/AutofillOptions;+]Landroid/content/Context;missing_types
+HSPLandroid/content/ContextWrapper;->getAutofillOptions()Landroid/content/AutofillOptions;
 HSPLandroid/content/ContextWrapper;->getBaseContext()Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->getBasePackageName()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getCacheDir()Ljava/io/File;
@@ -4039,14 +4058,14 @@
 HSPLandroid/content/ContextWrapper;->getOpPackageName()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getPackageCodePath()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getPackageManager()Landroid/content/pm/PackageManager;
-HSPLandroid/content/ContextWrapper;->getPackageName()Ljava/lang/String;+]Landroid/content/Context;missing_types
+HSPLandroid/content/ContextWrapper;->getPackageName()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getPackageResourcePath()Ljava/lang/String;
-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;Landroid/app/ContextImpl;
+HSPLandroid/content/ContextWrapper;->getResources()Landroid/content/res/Resources;
+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;+]Landroid/content/Context;missing_types
-HSPLandroid/content/ContextWrapper;->getTheme()Landroid/content/res/Resources$Theme;+]Landroid/content/Context;missing_types
+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;->getUserId()I
 HSPLandroid/content/ContextWrapper;->getWindowContextToken()Landroid/os/IBinder;
@@ -4136,7 +4155,7 @@
 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;Landroid/net/Uri;)V
+HSPLandroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;)V+]Landroid/content/Intent;Landroid/content/Intent;
 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;
 HSPLandroid/content/Intent;->addFlags(I)Landroid/content/Intent;
@@ -4181,7 +4200,7 @@
 HSPLandroid/content/Intent;->migrateExtraStreamToClipData(Landroid/content/Context;)Z
 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;
+HSPLandroid/content/Intent;->parseUriInternal(Ljava/lang/String;I)Landroid/content/Intent;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/content/Intent;->prepareToEnterProcess(ILandroid/content/AttributionSource;)V
 HSPLandroid/content/Intent;->prepareToEnterProcess(ZLandroid/content/AttributionSource;)V
 HSPLandroid/content/Intent;->prepareToLeaveProcess(Landroid/content/Context;)V
@@ -4231,10 +4250,11 @@
 HSPLandroid/content/Intent;->setType(Ljava/lang/String;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->toShortString(Ljava/lang/StringBuilder;ZZZZ)V
 HSPLandroid/content/Intent;->toString()Ljava/lang/String;
+HSPLandroid/content/Intent;->toString(Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Intent;Landroid/content/Intent;
 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
 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;
@@ -4280,7 +4300,7 @@
 HSPLandroid/content/IntentFilter;->hasCategory(Ljava/lang/String;)Z
 HSPLandroid/content/IntentFilter;->isImplicitlyVisibleToInstantApp()Z
 HSPLandroid/content/IntentFilter;->isVisibleToInstantApp()Z
-HSPLandroid/content/IntentFilter;->lambda$addDataType$0(Ljava/lang/String;Ljava/lang/Boolean;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/content/IntentFilter;->lambda$addDataType$0(Ljava/lang/String;Ljava/lang/Boolean;)V
 HSPLandroid/content/IntentFilter;->match(Landroid/content/ContentResolver;Landroid/content/Intent;ZLjava/lang/String;)I
 HSPLandroid/content/IntentFilter;->match(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Ljava/util/Set;Ljava/lang/String;)I
 HSPLandroid/content/IntentFilter;->match(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Ljava/util/Set;Ljava/lang/String;ZLjava/util/Collection;Landroid/os/Bundle;)I
@@ -4298,7 +4318,7 @@
 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+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/IntentFilter;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/PatternMatcher;Landroid/os/PatternMatcher;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/IntentFilter$AuthorityEntry;Landroid/content/IntentFilter$AuthorityEntry;]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;
@@ -4402,7 +4422,7 @@
 HSPLandroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/pm/ApplicationInfo;-><init>()V
 HSPLandroid/content/pm/ApplicationInfo;-><init>(Landroid/content/pm/ApplicationInfo;)V
-HSPLandroid/content/pm/ApplicationInfo;-><init>(Landroid/os/Parcel;)V+]Lcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;Lcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;Lcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/util/Set;Ljava/util/Collections$EmptySet;
+HSPLandroid/content/pm/ApplicationInfo;-><init>(Landroid/os/Parcel;)V+]Lcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;Lcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;Lcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/ApplicationInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ApplicationInfo-IA;)V
 HSPLandroid/content/pm/ApplicationInfo;->getAllApkPaths()[Ljava/lang/String;
 HSPLandroid/content/pm/ApplicationInfo;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
@@ -4449,7 +4469,7 @@
 HSPLandroid/content/pm/BaseParceledListSlice;->readCreator(Landroid/os/Parcelable$Creator;Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;
 HSPLandroid/content/pm/BaseParceledListSlice;->readVerifyAndAddElement(Landroid/os/Parcelable$Creator;Landroid/os/Parcel;Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Class;
 HSPLandroid/content/pm/BaseParceledListSlice;->verifySameType(Ljava/lang/Class;Ljava/lang/Class;)V
-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/content/pm/ShortcutInfo;,Landroid/view/contentcapture/ContentCaptureEvent;,Landroid/app/NotificationChannelGroup;]Ljava/util/List;Ljava/util/Arrays$ArrayList;,Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/pm/BaseParceledListSlice;->writeToParcel(Landroid/os/Parcel;I)V
 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
@@ -4489,8 +4509,6 @@
 HSPLandroid/content/pm/IOnChecksumsReadyListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/content/pm/IPackageInstaller$Stub$Proxy;->getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;
 HSPLandroid/content/pm/IPackageInstallerCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy$$ExternalSyntheticLambda0;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I
@@ -4502,7 +4520,7 @@
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getInstalledApplications(JI)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getInstalledPackages(JI)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getNameForUid(I)Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getNameForUid(I)Ljava/lang/String;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/content/pm/IPackageManager$Stub$Proxy;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getPackageInfo(Ljava/lang/String;JI)Landroid/content/pm/PackageInfo;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getPackageInstaller()Landroid/content/pm/IPackageInstaller;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getPackageUid(Ljava/lang/String;JI)I
@@ -4514,22 +4532,22 @@
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getSystemAvailableFeatures()Landroid/content/pm/ParceledListSlice;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getSystemSharedLibraryNames()[Ljava/lang/String;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->hasSystemFeature(Ljava/lang/String;I)Z
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isDeviceUpgrading()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;->lambda$notifyDexLoad$0(Landroid/os/Parcel;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isProtectedBroadcast(Ljava/lang/String;)Z+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/content/pm/IPackageManager$Stub$Proxy;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 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
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->notifyPackagesReplacedReceived([Ljava/lang/String;)V
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/content/pm/IPackageManager$Stub$Proxy;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentContentProviders(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentReceivers(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentServices(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentServices(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/content/pm/IPackageManager$Stub$Proxy;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->requestPackageChecksums(Ljava/lang/String;ZIILjava/util/List;Landroid/content/pm/IOnChecksumsReadyListener;I)V
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->resolveContentProvider(Ljava/lang/String;JI)Landroid/content/pm/ProviderInfo;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ResolveInfo;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->resolveService(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ResolveInfo;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->setComponentEnabledSetting(Landroid/content/ComponentName;III)V
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->resolveService(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ResolveInfo;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/content/pm/IPackageManager$Stub$Proxy;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->setComponentEnabledSetting(Landroid/content/ComponentName;IIILjava/lang/String;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/content/pm/IPackageManager$Stub$Proxy;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/IPackageManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageManager;
 HSPLandroid/content/pm/IPackageManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/content/pm/IShortcutService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
@@ -4597,7 +4615,7 @@
 HSPLandroid/content/pm/PackageInstaller;->registerSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;Landroid/os/Handler;)V
 HSPLandroid/content/pm/PackageItemInfo;-><init>()V
 HSPLandroid/content/pm/PackageItemInfo;-><init>(Landroid/content/pm/PackageItemInfo;)V
-HSPLandroid/content/pm/PackageItemInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/text/TextUtils$1;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/pm/PackageItemInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/pm/PackageItemInfo;->forceSafeLabels()V
 HSPLandroid/content/pm/PackageItemInfo;->loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/pm/PackageItemInfo;->loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
@@ -4645,7 +4663,7 @@
 HSPLandroid/content/pm/PackageParser$Activity$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/pm/PackageParser$Activity;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/pm/PackageParser$ActivityIntentInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/PackageParser$ApkLite;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;ZIIIILjava/util/List;Landroid/content/pm/PackageParser$SigningDetails;ZZZZZZZZLjava/lang/String;ZIIII)V
+HSPLandroid/content/pm/PackageParser$ApkLite;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;ZIIIILjava/util/List;Landroid/content/pm/PackageParser$SigningDetails;ZZZZZZZZLjava/lang/String;ZIIII)V+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/content/pm/PackageParser$Component;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/pm/PackageParser$Component;->createIntentsList(Landroid/os/Parcel;)Ljava/util/ArrayList;
 HSPLandroid/content/pm/PackageParser$Component;->getComponentName()Landroid/content/ComponentName;
@@ -4700,7 +4718,7 @@
 HSPLandroid/content/pm/PackageParser;->setOnlyCoreApps(Z)V
 HSPLandroid/content/pm/PackageParser;->setSeparateProcesses([Ljava/lang/String;)V
 HSPLandroid/content/pm/PackageParser;->toSigningKeys([Landroid/content/pm/Signature;)Landroid/util/ArraySet;
-HSPLandroid/content/pm/PackageParser;->validateName(Ljava/lang/String;ZZ)Ljava/lang/String;
+HSPLandroid/content/pm/PackageParser;->validateName(Ljava/lang/String;ZZ)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/content/pm/PackageParserCacheHelper$ReadHelper;->readString(Landroid/os/Parcel;)Ljava/lang/String;
 HSPLandroid/content/pm/PackageStats;-><init>(Ljava/lang/String;)V
 HSPLandroid/content/pm/ParceledListSlice$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ParceledListSlice;
@@ -4769,7 +4787,7 @@
 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;
-HSPLandroid/content/pm/SharedLibraryInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/pm/SharedLibraryInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/pm/SharedLibraryInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/SharedLibraryInfo-IA;)V
 HSPLandroid/content/pm/SharedLibraryInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;JILandroid/content/pm/VersionedPackage;Ljava/util/List;Ljava/util/List;Z)V
 HSPLandroid/content/pm/SharedLibraryInfo;->addDependency(Landroid/content/pm/SharedLibraryInfo;)V
@@ -4857,7 +4875,8 @@
 HSPLandroid/content/pm/Signature;->toCharsString()Ljava/lang/String;
 HSPLandroid/content/pm/SigningDetails$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/SigningDetails;
 HSPLandroid/content/pm/SigningDetails$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/SigningDetails;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/SigningDetails;-><init>(Landroid/os/Parcel;)V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/pm/SigningDetails;->getPastSigningCertificates()[Landroid/content/pm/Signature;
 HSPLandroid/content/pm/SigningDetails;->getSignatures()[Landroid/content/pm/Signature;
 HSPLandroid/content/pm/SigningInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/SigningInfo;
 HSPLandroid/content/pm/SigningInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -4888,6 +4907,7 @@
 HSPLandroid/content/pm/UserPackage;->equals(Ljava/lang/Object;)Z
 HSPLandroid/content/pm/UserPackage;->hashCode()I
 HSPLandroid/content/pm/UserPackage;->of(ILjava/lang/String;)Landroid/content/pm/UserPackage;
+HSPLandroid/content/pm/UserProperties;->isCredentialShareableWithParent()Z
 HSPLandroid/content/pm/UserProperties;->isPresent(J)Z
 HSPLandroid/content/pm/VersionedPackage$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/VersionedPackage;
 HSPLandroid/content/pm/VersionedPackage$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -4909,7 +4929,7 @@
 HSPLandroid/content/pm/parsing/result/ParseTypeImpl;->success(Ljava/lang/Object;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/permission/SplitPermissionInfoParcelable;
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;-><init>(Ljava/lang/String;Ljava/util/List;I)V
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;->getNewPermissions()Ljava/util/List;
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;->getSplitPermission()Ljava/lang/String;
@@ -4925,7 +4945,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;+]Landroid/content/res/StringBlock;Landroid/content/res/StringBlock;
+HSPLandroid/content/res/ApkAssets;->getStringFromPool(I)Ljava/lang/CharSequence;
 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;
@@ -4933,15 +4953,7 @@
 HSPLandroid/content/res/ApkAssets;->openXml(Ljava/lang/String;)Landroid/content/res/XmlResourceParser;
 HSPLandroid/content/res/AssetFileDescriptor$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/res/AssetFileDescriptor$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream$OffsetCorrectFileChannel;-><init>(Landroid/content/res/AssetFileDescriptor$AutoCloseInputStream;Ljava/nio/channels/FileChannel;)V
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream$OffsetCorrectFileChannel;->map(Ljava/nio/channels/FileChannel$MapMode;JJ)Ljava/nio/MappedByteBuffer;
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream$OffsetCorrectFileChannel;->position(J)Ljava/nio/channels/FileChannel;+]Ljava/nio/channels/FileChannel;Lsun/nio/ch/FileChannelImpl;
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream;->-$$Nest$fgetmFileOffset(Landroid/content/res/AssetFileDescriptor$AutoCloseInputStream;)J
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream;->-$$Nest$fgetmTotalSize(Landroid/content/res/AssetFileDescriptor$AutoCloseInputStream;)J
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream;->-$$Nest$fputmOffset(Landroid/content/res/AssetFileDescriptor$AutoCloseInputStream;J)V
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream;->getChannel()Ljava/nio/channels/FileChannel;
 HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream;->read([BII)I
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream;->updateChannelPosition(J)V
 HSPLandroid/content/res/AssetFileDescriptor;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/res/AssetFileDescriptor;-><init>(Landroid/os/ParcelFileDescriptor;JJ)V
 HSPLandroid/content/res/AssetFileDescriptor;-><init>(Landroid/os/ParcelFileDescriptor;JJLandroid/os/Bundle;)V
@@ -4968,7 +4980,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
@@ -5001,7 +5013,7 @@
 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;+]Landroid/content/res/ApkAssets;Landroid/content/res/ApkAssets;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
+HSPLandroid/content/res/AssetManager;->getPooledStringForCookie(II)Ljava/lang/CharSequence;
 HSPLandroid/content/res/AssetManager;->getResourceArray(I[I)I
 HSPLandroid/content/res/AssetManager;->getResourceArraySize(I)I
 HSPLandroid/content/res/AssetManager;->getResourceBagText(II)Ljava/lang/CharSequence;
@@ -5017,9 +5029,9 @@
 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;
+HSPLandroid/content/res/AssetManager;->getThemeValue(JILandroid/util/TypedValue;Z)Z
 HSPLandroid/content/res/AssetManager;->incRefsLocked(J)V
-HSPLandroid/content/res/AssetManager;->isUpToDate()Z
+HSPLandroid/content/res/AssetManager;->isUpToDate()Z+]Landroid/content/res/ApkAssets;Landroid/content/res/ApkAssets;
 HSPLandroid/content/res/AssetManager;->list(Ljava/lang/String;)[Ljava/lang/String;
 HSPLandroid/content/res/AssetManager;->open(Ljava/lang/String;)Ljava/io/InputStream;
 HSPLandroid/content/res/AssetManager;->open(Ljava/lang/String;I)Ljava/io/InputStream;
@@ -5043,7 +5055,7 @@
 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;+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;
+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;-><init>()V
 HSPLandroid/content/res/ColorStateList;-><init>(Landroid/content/res/ColorStateList;)V
@@ -5061,7 +5073,7 @@
 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/ComplexColor;
 HSPLandroid/content/res/ColorStateList;->onColorsChanged()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;->valueOf(I)Landroid/content/res/ColorStateList;
 HSPLandroid/content/res/ColorStateList;->writeToParcel(Landroid/os/Parcel;I)V
 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;
@@ -5091,25 +5103,25 @@
 HSPLandroid/content/res/Configuration;-><init>(Landroid/content/res/Configuration;)V
 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+]Ljava/util/Locale;Ljava/util/Locale;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/os/LocaleList;Landroid/os/LocaleList;
+HSPLandroid/content/res/Configuration;->compareTo(Landroid/content/res/Configuration;)I+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/os/LocaleList;Landroid/os/LocaleList;]Ljava/lang/String;Ljava/lang/String;]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;->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;->fixUpLocaleList()V+]Ljava/util/Locale;Ljava/util/Locale;]Landroid/os/LocaleList;Landroid/os/LocaleList;
+HSPLandroid/content/res/Configuration;->fixUpLocaleList()V
 HSPLandroid/content/res/Configuration;->generateDelta(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)Landroid/content/res/Configuration;
 HSPLandroid/content/res/Configuration;->getGrammaticalGender()I
 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
 HSPLandroid/content/res/Configuration;->isScreenWideColorGamut()Z
 HSPLandroid/content/res/Configuration;->needNewResources(II)Z
-HSPLandroid/content/res/Configuration;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/LocaleList;Landroid/os/LocaleList;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/res/Configuration;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/content/res/Configuration;->readFromProto(Landroid/util/proto/ProtoInputStream;J)V
 HSPLandroid/content/res/Configuration;->reduceScreenLayout(III)I
 HSPLandroid/content/res/Configuration;->resetScreenLayout(I)I
@@ -5121,14 +5133,15 @@
 HSPLandroid/content/res/Configuration;->setToDefaults()V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLandroid/content/res/Configuration;->toString()Ljava/lang/String;
 HSPLandroid/content/res/Configuration;->unset()V
-HSPLandroid/content/res/Configuration;->updateFrom(Landroid/content/res/Configuration;)I
+HSPLandroid/content/res/Configuration;->updateFrom(Landroid/content/res/Configuration;)I+]Ljava/util/Locale;Ljava/util/Locale;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/os/LocaleList;Landroid/os/LocaleList;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 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;->getGeneration()I
 HSPLandroid/content/res/ConfigurationBoundResourceCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;
 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
+HSPLandroid/content/res/ConfigurationBoundResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;I)V
+HSPLandroid/content/res/ConfigurationBoundResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;IZ)V
 HSPLandroid/content/res/ConfigurationBoundResourceCache;->shouldInvalidateEntry(Landroid/content/res/ConstantState;I)Z
 HSPLandroid/content/res/ConfigurationBoundResourceCache;->shouldInvalidateEntry(Ljava/lang/Object;I)Z
 HSPLandroid/content/res/ConstantState;-><init>()V
@@ -5140,8 +5153,9 @@
 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;+]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/FontResourcesParser;->readFamily(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;
 HSPLandroid/content/res/FontScaleConverterFactory;->forScale(F)Landroid/content/res/FontScaleConverter;
+HSPLandroid/content/res/FontScaleConverterFactory;->isNonLinearFontScalingActive(F)Z
 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;
@@ -5162,17 +5176,17 @@
 HSPLandroid/content/res/Resources$Theme;->equals(Ljava/lang/Object;)Z
 HSPLandroid/content/res/Resources$Theme;->getAppliedStyleResId()I
 HSPLandroid/content/res/Resources$Theme;->getChangingConfigurations()I
-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;->getKey()Landroid/content/res/Resources$ThemeKey;
 HSPLandroid/content/res/Resources$Theme;->getParentThemeIdentifier(I)I
 HSPLandroid/content/res/Resources$Theme;->getResources()Landroid/content/res/Resources;
 HSPLandroid/content/res/Resources$Theme;->getTheme()[Ljava/lang/String;
 HSPLandroid/content/res/Resources$Theme;->hashCode()I
-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[I)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/Resources$Theme;->obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;
 HSPLandroid/content/res/Resources$Theme;->obtainStyledAttributes([I)Landroid/content/res/TypedArray;
 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+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
+HSPLandroid/content/res/Resources$Theme;->resolveAttribute(ILandroid/util/TypedValue;Z)Z
 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
@@ -5180,9 +5194,10 @@
 HSPLandroid/content/res/Resources$ThemeKey;-><init>()V
 HSPLandroid/content/res/Resources$ThemeKey;->append(IZ)V
 HSPLandroid/content/res/Resources$ThemeKey;->clone()Landroid/content/res/Resources$ThemeKey;
-HSPLandroid/content/res/Resources$ThemeKey;->containsValue(IZ)Z
-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;->equals(Ljava/lang/Object;)Z
+HSPLandroid/content/res/Resources$ThemeKey;->findValue(IZ)I
 HSPLandroid/content/res/Resources$ThemeKey;->hashCode()I
+HSPLandroid/content/res/Resources$ThemeKey;->moveToLast(I)V
 HSPLandroid/content/res/Resources$ThemeKey;->setTo(Landroid/content/res/Resources$ThemeKey;)V
 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
@@ -5199,16 +5214,16 @@
 HSPLandroid/content/res/Resources;->getBoolean(I)Z
 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+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getColor(ILandroid/content/res/Resources$Theme;)I
 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+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getDimensionPixelSize(I)I
 HSPLandroid/content/res/Resources;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;
-HSPLandroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;
 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;
@@ -5243,7 +5258,7 @@
 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;->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;->loadColorStateList(Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
 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;->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;
@@ -5252,7 +5267,7 @@
 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;+]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;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
+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;->openRawResourceFd(I)Landroid/content/res/AssetFileDescriptor;
@@ -5290,15 +5305,15 @@
 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+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
+HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->resolveAttribute(ILandroid/util/TypedValue;Z)Z
 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;
-HSPLandroid/content/res/ResourcesImpl;-><init>(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;Landroid/view/DisplayAdjustments;)V
+HSPLandroid/content/res/ResourcesImpl;-><init>(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;Landroid/view/DisplayAdjustments;)V+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/util/DisplayMetrics;Landroid/util/DisplayMetrics;
 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;->cacheDrawable(Landroid/util/TypedValue;ZLandroid/content/res/DrawableCache;Landroid/content/res/Resources$Theme;ZJLandroid/graphics/drawable/Drawable;I)V+]Landroid/content/res/DrawableCache;Landroid/content/res/DrawableCache;]Landroid/graphics/drawable/Drawable;megamorphic_types
+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
@@ -5306,7 +5321,7 @@
 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;+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Landroid/content/res/ConstantState;Landroid/content/res/ColorStateList$ColorStateListFactory;
+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;->getConfiguration()Landroid/content/res/Configuration;
 HSPLandroid/content/res/ResourcesImpl;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;
@@ -5327,12 +5342,12 @@
 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;+]Landroid/content/res/ConfigurationBoundResourceCache;Landroid/content/res/ConfigurationBoundResourceCache;]Landroid/content/res/ComplexColor;Landroid/content/res/ColorStateList;,Landroid/content/res/GradientColor;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
-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;Landroid/graphics/drawable/GradientDrawable$GradientState;,Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;,Landroid/graphics/drawable/StateListDrawable$StateListState;,Landroid/graphics/drawable/RippleDrawable$RippleState;,Landroid/graphics/drawable/AnimationDrawable$AnimationState;,Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;,Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;]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;]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;->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;->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;->loadXmlResourceParser(Ljava/lang/String;IILjava/lang/String;)Landroid/content/res/XmlResourceParser;+]Ljava/lang/String;Ljava/lang/String;]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;->openRawResourceFd(ILandroid/util/TypedValue;)Landroid/content/res/AssetFileDescriptor;
@@ -5348,31 +5363,32 @@
 HSPLandroid/content/res/StringBlock;->close()V
 HSPLandroid/content/res/StringBlock;->finalize()V
 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/StringBlock;->getSequence(I)Ljava/lang/CharSequence;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/content/res/ThemedResourceCache;-><init>()V
-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;->get(JLandroid/content/res/Resources$Theme;)Ljava/lang/Object;
+HSPLandroid/content/res/ThemedResourceCache;->getGeneration()I
+HSPLandroid/content/res/ThemedResourceCache;->getThemedLocked(Landroid/content/res/Resources$Theme;Z)Landroid/util/LongSparseArray;
 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;->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/ThemedResourceCache;->pruneLocked(I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/content/res/ThemedResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;I)V
+HSPLandroid/content/res/ThemedResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;IZ)V+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLandroid/content/res/TypedArray;-><init>(Landroid/content/res/Resources;)V
 HSPLandroid/content/res/TypedArray;->extractThemeAttrs()[I
 HSPLandroid/content/res/TypedArray;->extractThemeAttrs([I)[I
 HSPLandroid/content/res/TypedArray;->getBoolean(IZ)Z
 HSPLandroid/content/res/TypedArray;->getChangingConfigurations()I
-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;->getColor(II)I
+HSPLandroid/content/res/TypedArray;->getColorStateList(I)Landroid/content/res/ColorStateList;
 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;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/content/res/TypedArray;->getDrawableForDensity(II)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/res/TypedArray;->getFloat(IF)F
-HSPLandroid/content/res/TypedArray;->getFont(I)Landroid/graphics/Typeface;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/content/res/TypedArray;->getFont(I)Landroid/graphics/Typeface;
 HSPLandroid/content/res/TypedArray;->getFraction(IIIF)F
 HSPLandroid/content/res/TypedArray;->getIndex(I)I
 HSPLandroid/content/res/TypedArray;->getIndexCount()I
@@ -5380,12 +5396,12 @@
 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;->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;+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/content/res/TypedArray;->getString(I)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
@@ -5394,7 +5410,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;+]Landroid/content/res/XmlBlock$Parser;Landroid/content/res/XmlBlock$Parser;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
+HSPLandroid/content/res/TypedArray;->loadStringValueAt(I)Ljava/lang/CharSequence;
 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;
@@ -5410,8 +5426,8 @@
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeName(I)Ljava/lang/String;+]Landroid/content/res/StringBlock;Landroid/content/res/StringBlock;
 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;->getAttributeResourceValue(Ljava/lang/String;Ljava/lang/String;I)I+]Landroid/content/res/XmlBlock$Parser;Landroid/content/res/XmlBlock$Parser;
+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
@@ -5420,13 +5436,13 @@
 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;->getPositionDescription()Ljava/lang/String;
-HSPLandroid/content/res/XmlBlock$Parser;->getSequenceString(Ljava/lang/CharSequence;)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
-HSPLandroid/content/res/XmlBlock$Parser;->getText()Ljava/lang/String;
+HSPLandroid/content/res/XmlBlock$Parser;->getText()Ljava/lang/String;+]Landroid/content/res/StringBlock;Landroid/content/res/StringBlock;
 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
-HSPLandroid/content/res/XmlBlock$Parser;->nextText()Ljava/lang/String;
+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;+]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
@@ -5441,23 +5457,23 @@
 HSPLandroid/content/res/XmlBlock;->-$$Nest$smnativeGetText(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;
 HSPLandroid/content/type/DefaultMimeMapFactory$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/content/type/DefaultMimeMapFactory;->create()Llibcore/content/type/MimeMap;
 HSPLandroid/content/type/DefaultMimeMapFactory;->lambda$create$0(Ljava/lang/Class;Ljava/lang/String;)Ljava/io/InputStream;
-HSPLandroid/content/type/DefaultMimeMapFactory;->parseTypes(Llibcore/content/type/MimeMap$Builder;Ljava/util/function/Function;Ljava/lang/String;)V
+HSPLandroid/content/type/DefaultMimeMapFactory;->parseTypes(Llibcore/content/type/MimeMap$Builder;Ljava/util/function/Function;Ljava/lang/String;)V+]Ljava/util/function/Function;Landroid/content/type/DefaultMimeMapFactory$$ExternalSyntheticLambda0;]Ljava/io/BufferedReader;Ljava/io/BufferedReader;
 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;->close()V+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;]Landroid/database/ContentObservable;Landroid/database/ContentObservable;
+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
+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;->getColumnIndex(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;]Landroid/database/AbstractCursor;Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/AbstractCursor;->getColumnIndexOrThrow(Ljava/lang/String;)I
 HSPLandroid/database/AbstractCursor;->getColumnName(I)Ljava/lang/String;
 HSPLandroid/database/AbstractCursor;->getExtras()Landroid/os/Bundle;
@@ -5470,8 +5486,8 @@
 HSPLandroid/database/AbstractCursor;->move(I)Z
 HSPLandroid/database/AbstractCursor;->moveToFirst()Z
 HSPLandroid/database/AbstractCursor;->moveToLast()Z
-HSPLandroid/database/AbstractCursor;->moveToNext()Z+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
-HSPLandroid/database/AbstractCursor;->moveToPosition(I)Z+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
+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;->onChange(Z)V
 HSPLandroid/database/AbstractCursor;->onDeactivateOrClose()V+]Landroid/database/DataSetObservable;Landroid/database/DataSetObservable;
 HSPLandroid/database/AbstractCursor;->onMove(II)Z
@@ -5488,13 +5504,13 @@
 HSPLandroid/database/AbstractWindowedCursor;->getBlob(I)[B
 HSPLandroid/database/AbstractWindowedCursor;->getDouble(I)D
 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;->getInt(I)I+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;]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;->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;
@@ -5516,7 +5532,7 @@
 HSPLandroid/database/BulkCursorToCursorAdaptor;->getCount()I
 HSPLandroid/database/BulkCursorToCursorAdaptor;->getObserver()Landroid/database/IContentObserver;
 HSPLandroid/database/BulkCursorToCursorAdaptor;->initialize(Landroid/database/BulkCursorDescriptor;)V
-HSPLandroid/database/BulkCursorToCursorAdaptor;->onMove(II)Z
+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
 HSPLandroid/database/ContentObservable;->dispatchChange(ZLandroid/net/Uri;)V
@@ -5555,12 +5571,12 @@
 HSPLandroid/database/CursorWindow;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/database/CursorWindow;-><init>(Landroid/os/Parcel;Landroid/database/CursorWindow-IA;)V
 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;-><init>(Ljava/lang/String;J)V+]Ljava/lang/String;Ljava/lang/String;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/database/CursorWindow;->allocRow()Z
 HSPLandroid/database/CursorWindow;->clear()V
 HSPLandroid/database/CursorWindow;->dispose()V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
-HSPLandroid/database/CursorWindow;->finalize()V
-HSPLandroid/database/CursorWindow;->getBlob(II)[B+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
+HSPLandroid/database/CursorWindow;->finalize()V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
+HSPLandroid/database/CursorWindow;->getBlob(II)[B
 HSPLandroid/database/CursorWindow;->getCursorWindowSize()I
 HSPLandroid/database/CursorWindow;->getDouble(II)D
 HSPLandroid/database/CursorWindow;->getFloat(II)F
@@ -5589,7 +5605,7 @@
 HSPLandroid/database/CursorWrapper;->getCount()I
 HSPLandroid/database/CursorWrapper;->getExtras()Landroid/os/Bundle;
 HSPLandroid/database/CursorWrapper;->getInt(I)I
-HSPLandroid/database/CursorWrapper;->getLong(I)J+]Landroid/database/Cursor;missing_types
+HSPLandroid/database/CursorWrapper;->getLong(I)J+]Landroid/database/Cursor;Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/CursorWrapper;->getPosition()I
 HSPLandroid/database/CursorWrapper;->getString(I)Ljava/lang/String;+]Landroid/database/Cursor;missing_types
 HSPLandroid/database/CursorWrapper;->getType(I)I
@@ -5600,7 +5616,7 @@
 HSPLandroid/database/CursorWrapper;->isNull(I)Z
 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
@@ -5663,7 +5679,7 @@
 HSPLandroid/database/Observable;->unregisterObserver(Ljava/lang/Object;)V
 HSPLandroid/database/sqlite/SQLiteClosable;-><init>()V
 HSPLandroid/database/sqlite/SQLiteClosable;->acquireReference()V
-HSPLandroid/database/sqlite/SQLiteClosable;->close()V+]Landroid/database/sqlite/SQLiteClosable;Landroid/database/CursorWindow;,Landroid/database/sqlite/SQLiteStatement;,Landroid/database/sqlite/SQLiteQuery;,Landroid/database/sqlite/SQLiteDatabase;
+HSPLandroid/database/sqlite/SQLiteClosable;->close()V+]Landroid/database/sqlite/SQLiteClosable;Landroid/database/CursorWindow;,Landroid/database/sqlite/SQLiteStatement;,Landroid/database/sqlite/SQLiteDatabase;,Landroid/database/sqlite/SQLiteQuery;
 HSPLandroid/database/sqlite/SQLiteClosable;->releaseReference()V+]Landroid/database/sqlite/SQLiteClosable;Landroid/database/CursorWindow;,Landroid/database/sqlite/SQLiteStatement;,Landroid/database/sqlite/SQLiteQuery;,Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteCompatibilityWalFlags;->getTruncateSize()J
 HSPLandroid/database/sqlite/SQLiteCompatibilityWalFlags;->init(Ljava/lang/String;)V
@@ -5685,29 +5701,28 @@
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->setResult(J)V
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->setResult(Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatement;-><init>()V
-HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatement;-><init>(Landroid/database/sqlite/SQLiteConnection$PreparedStatement-IA;)V
 HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatementCache;-><init>(Landroid/database/sqlite/SQLiteConnection;I)V
 HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatementCache;->entryRemoved(ZLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatementCache;->entryRemoved(ZLjava/lang/String;Landroid/database/sqlite/SQLiteConnection$PreparedStatement;Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
 HSPLandroid/database/sqlite/SQLiteConnection;->-$$Nest$mfinalizePreparedStatement(Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
 HSPLandroid/database/sqlite/SQLiteConnection;-><init>(Landroid/database/sqlite/SQLiteConnectionPool;Landroid/database/sqlite/SQLiteDatabaseConfiguration;IZ)V
 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;
-HSPLandroid/database/sqlite/SQLiteConnection;->attachCancellationSignal(Landroid/os/CancellationSignal;)V
-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/Long;
+HSPLandroid/database/sqlite/SQLiteConnection;->applyBlockGuardPolicy(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V+]Landroid/database/sqlite/SQLiteDatabaseConfiguration;Landroid/database/sqlite/SQLiteDatabaseConfiguration;]Ldalvik/system/BlockGuard$Policy;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/Double;,Ljava/lang/Long;]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
 HSPLandroid/database/sqlite/SQLiteConnection;->collectDbStats(Ljava/util/ArrayList;)V
-HSPLandroid/database/sqlite/SQLiteConnection;->detachCancellationSignal(Landroid/os/CancellationSignal;)V
+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;->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
-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;->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
+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;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)J+]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
+HSPLandroid/database/sqlite/SQLiteConnection;->executeForString(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)Ljava/lang/String;+]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
 HSPLandroid/database/sqlite/SQLiteConnection;->executePerConnectionSqlFromConfiguration(I)V
 HSPLandroid/database/sqlite/SQLiteConnection;->finalize()V
 HSPLandroid/database/sqlite/SQLiteConnection;->finalizePreparedStatement(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
@@ -5717,13 +5732,12 @@
 HSPLandroid/database/sqlite/SQLiteConnection;->isPreparedStatementInCache(Ljava/lang/String;)Z
 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;
-HSPLandroid/database/sqlite/SQLiteConnection;->open()V
+HSPLandroid/database/sqlite/SQLiteConnection;->open()V+]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
 HSPLandroid/database/sqlite/SQLiteConnection;->open(Landroid/database/sqlite/SQLiteConnectionPool;Landroid/database/sqlite/SQLiteDatabaseConfiguration;IZ)Landroid/database/sqlite/SQLiteConnection;
 HSPLandroid/database/sqlite/SQLiteConnection;->prepare(Ljava/lang/String;Landroid/database/sqlite/SQLiteStatementInfo;)V+]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
 HSPLandroid/database/sqlite/SQLiteConnection;->reconfigure(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)V
 HSPLandroid/database/sqlite/SQLiteConnection;->recyclePreparedStatement(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
-HSPLandroid/database/sqlite/SQLiteConnection;->releasePreparedStatement(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->releasePreparedStatement(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V+]Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;
 HSPLandroid/database/sqlite/SQLiteConnection;->setAutoCheckpointInterval()V
 HSPLandroid/database/sqlite/SQLiteConnection;->setCustomFunctionsFromConfiguration()V
 HSPLandroid/database/sqlite/SQLiteConnection;->setForeignKeyModeFromConfiguration()V
@@ -5757,7 +5771,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+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->finishAcquireConnectionLocked(Landroid/database/sqlite/SQLiteConnection;I)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->getPath()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->getPriority(I)I
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->isSessionBlockingImportantConnectionWaitersLocked(ZI)Z
@@ -5775,16 +5789,16 @@
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->setMaxConnectionPoolSizeLocked()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;+]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;+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Ljava/util/Iterator;Ljava/util/WeakHashMap$KeyIterator;]Ljava/util/Set;Ljava/util/WeakHashMap$KeySet;
-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;->tryAcquireNonPrimaryConnectionLocked(Ljava/lang/String;I)Landroid/database/sqlite/SQLiteConnection;
+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;
 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+]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;->getColumnIndex(Ljava/lang/String;)I
 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;
@@ -5816,11 +5830,11 @@
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;-><init>(ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;IIJLjava/lang/String;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$OpenParams-IA;)V
 HSPLandroid/database/sqlite/SQLiteDatabase;-><init>(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;IIJLjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->beginTransaction()V
-HSPLandroid/database/sqlite/SQLiteDatabase;->beginTransaction(Landroid/database/sqlite/SQLiteTransactionListener;Z)V+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
+HSPLandroid/database/sqlite/SQLiteDatabase;->beginTransaction(Landroid/database/sqlite/SQLiteTransactionListener;Z)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->beginTransactionNonExclusive()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->beginTransactionWithListener(Landroid/database/sqlite/SQLiteTransactionListener;)V
 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;->compileStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteStatement;+]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 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;->deleteDatabase(Ljava/io/File;)Z
@@ -5830,7 +5844,7 @@
 HSPLandroid/database/sqlite/SQLiteDatabase;->dumpAll(Landroid/util/Printer;ZZ)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->dumpDatabaseDirectory(Landroid/util/Printer;Ljava/io/File;Z)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->enableWriteAheadLogging()Z
-HSPLandroid/database/sqlite/SQLiteDatabase;->endTransaction()V+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
+HSPLandroid/database/sqlite/SQLiteDatabase;->endTransaction()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->execSQL(Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->execSQL(Ljava/lang/String;[Ljava/lang/Object;)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->executeSql(Ljava/lang/String;[Ljava/lang/Object;)I
@@ -5843,7 +5857,7 @@
 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;->getThreadSession()Landroid/database/sqlite/SQLiteSession;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getVersion()I
 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
@@ -5853,7 +5867,7 @@
 HSPLandroid/database/sqlite/SQLiteDatabase;->isOpen()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->isReadOnly()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->isReadOnlyLocked()Z
-HSPLandroid/database/sqlite/SQLiteDatabase;->isWriteAheadLoggingEnabled()Z+]Ljava/lang/String;Ljava/lang/String;]Landroid/database/sqlite/SQLiteDatabaseConfiguration;Landroid/database/sqlite/SQLiteDatabaseConfiguration;
+HSPLandroid/database/sqlite/SQLiteDatabase;->isWriteAheadLoggingEnabled()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->onAllReferencesReleased()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->open()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->openDatabase(Ljava/io/File;Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/sqlite/SQLiteDatabase;
@@ -5866,19 +5880,19 @@
 HSPLandroid/database/sqlite/SQLiteDatabase;->query(Ljava/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;
 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;
 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;
+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/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/database/Cursor;+]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 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;
 HSPLandroid/database/sqlite/SQLiteDatabase;->releaseMemory()I
 HSPLandroid/database/sqlite/SQLiteDatabase;->replace(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J
 HSPLandroid/database/sqlite/SQLiteDatabase;->replaceOrThrow(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J
 HSPLandroid/database/sqlite/SQLiteDatabase;->setForeignKeyConstraintsEnabled(Z)V
-HSPLandroid/database/sqlite/SQLiteDatabase;->setTransactionSuccessful()V+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
+HSPLandroid/database/sqlite/SQLiteDatabase;->setTransactionSuccessful()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->update(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I
-HSPLandroid/database/sqlite/SQLiteDatabase;->updateWithOnConflict(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;I)I+]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;->updateWithOnConflict(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;I)I
 HSPLandroid/database/sqlite/SQLiteDatabase;->validateSql(Ljava/lang/String;Landroid/os/CancellationSignal;)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->yieldIfContendedHelper(ZJ)Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->yieldIfContendedSafely(J)Z
@@ -5888,10 +5902,10 @@
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->isLegacyCompatibilityWalEnabled()Z
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->isReadOnlyDatabase()Z
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->isWalEnabledInternal()Z
-HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->resolveJournalMode()Ljava/lang/String;+]Landroid/database/sqlite/SQLiteDatabaseConfiguration;Landroid/database/sqlite/SQLiteDatabaseConfiguration;
+HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->resolveJournalMode()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->resolveSyncMode()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->stripPathForLogs(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->updateParametersFrom(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->updateParametersFrom(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/database/sqlite/SQLiteDebug$NoPreloadHolder;-><clinit>()V
 HSPLandroid/database/sqlite/SQLiteDebug;->getDatabaseInfo()Landroid/database/sqlite/SQLiteDebug$PagerStats;
 HSPLandroid/database/sqlite/SQLiteDebug;->shouldLogSlowQuery(J)Z
@@ -5924,9 +5938,9 @@
 HSPLandroid/database/sqlite/SQLiteOpenHelper;->setIdleConnectionTimeout(J)V
 HSPLandroid/database/sqlite/SQLiteOpenHelper;->setOpenParamsBuilder(Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;)V
 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
+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
+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
@@ -5939,15 +5953,15 @@
 HSPLandroid/database/sqlite/SQLiteProgram;->getDatabase()Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteProgram;->getSession()Landroid/database/sqlite/SQLiteSession;+]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteProgram;->getSql()Ljava/lang/String;
-HSPLandroid/database/sqlite/SQLiteProgram;->onAllReferencesReleased()V+]Landroid/database/sqlite/SQLiteProgram;Landroid/database/sqlite/SQLiteQuery;
+HSPLandroid/database/sqlite/SQLiteProgram;->onAllReferencesReleased()V+]Landroid/database/sqlite/SQLiteProgram;Landroid/database/sqlite/SQLiteStatement;,Landroid/database/sqlite/SQLiteQuery;
 HSPLandroid/database/sqlite/SQLiteQuery;-><init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Landroid/os/CancellationSignal;)V
 HSPLandroid/database/sqlite/SQLiteQuery;->fillWindow(Landroid/database/CursorWindow;IIZ)I+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;]Landroid/database/sqlite/SQLiteQuery;Landroid/database/sqlite/SQLiteQuery;
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;-><init>()V
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->appendClause(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->appendColumns(Ljava/lang/StringBuilder;[Ljava/lang/String;)V
+HSPLandroid/database/sqlite/SQLiteQueryBuilder;->appendColumns(Ljava/lang/StringBuilder;[Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->appendWhere(Ljava/lang/CharSequence;)V
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->buildQuery([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->buildQueryString(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteQueryBuilder;->buildQueryString(ZLjava/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/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->computeProjection([Ljava/lang/String;)[Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->computeSingleProjection(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->computeSingleProjectionOrThrow(Ljava/lang/String;)Ljava/lang/String;
@@ -5969,20 +5983,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+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
+HSPLandroid/database/sqlite/SQLiteSession;->beginTransactionUnchecked(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V
 HSPLandroid/database/sqlite/SQLiteSession;->endTransaction(Landroid/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;->execute(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)V
 HSPLandroid/database/sqlite/SQLiteSession;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)I
 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+]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;->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
+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/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
+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;->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
@@ -5992,9 +6006,9 @@
 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+]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;->execute()V
+HSPLandroid/database/sqlite/SQLiteStatement;->executeInsert()J
+HSPLandroid/database/sqlite/SQLiteStatement;->executeUpdateDelete()I
 HSPLandroid/database/sqlite/SQLiteStatement;->simpleQueryForLong()J
 HSPLandroid/database/sqlite/SQLiteStatement;->simpleQueryForString()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteStatementInfo;-><init>()V
@@ -6011,6 +6025,7 @@
 HSPLandroid/ddm/DdmHandleProfiling;->handleChunk(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk;
 HSPLandroid/graphics/BLASTBufferQueue;-><init>(Ljava/lang/String;Landroid/view/SurfaceControl;III)V
 HSPLandroid/graphics/BLASTBufferQueue;-><init>(Ljava/lang/String;Z)V
+HSPLandroid/graphics/BLASTBufferQueue;->clearSyncTransaction()V
 HSPLandroid/graphics/BLASTBufferQueue;->createSurface()Landroid/view/Surface;
 HSPLandroid/graphics/BLASTBufferQueue;->destroy()V
 HSPLandroid/graphics/BLASTBufferQueue;->finalize()V
@@ -6018,8 +6033,6 @@
 HSPLandroid/graphics/BLASTBufferQueue;->isSameSurfaceControl(Landroid/view/SurfaceControl;)Z
 HSPLandroid/graphics/BLASTBufferQueue;->mergeWithNextTransaction(Landroid/view/SurfaceControl$Transaction;J)V
 HSPLandroid/graphics/BLASTBufferQueue;->setTransactionHangCallback(Landroid/graphics/BLASTBufferQueue$TransactionHangCallback;)V
-HSPLandroid/graphics/BLASTBufferQueue;->syncNextTransaction(Ljava/util/function/Consumer;)V
-HSPLandroid/graphics/BLASTBufferQueue;->syncNextTransaction(ZLjava/util/function/Consumer;)V
 HSPLandroid/graphics/BLASTBufferQueue;->update(Landroid/view/SurfaceControl;III)V
 HSPLandroid/graphics/BaseCanvas;-><init>()V
 HSPLandroid/graphics/BaseCanvas;->drawARGB(IIII)V
@@ -6043,19 +6056,19 @@
 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;->drawCircle(FFFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawColor(I)V+]Landroid/graphics/BlendMode;Landroid/graphics/BlendMode;
+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;->drawLine(FFFFLandroid/graphics/Paint;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;
 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+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/Path;Landroid/graphics/Path;
+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
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(FFFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(Landroid/graphics/Rect;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRoundRect(FFFFFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V+]Landroid/graphics/Paint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/lang/StringBuilder;,Landroid/text/Layout$Ellipsizer;
+HSPLandroid/graphics/BaseRecordingCanvas;->drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawText(Ljava/lang/String;FFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawTextRun([CIIIIFFZLandroid/graphics/Paint;)V
@@ -6066,7 +6079,7 @@
 HSPLandroid/graphics/Bitmap;-><init>(JIIIZ[BLandroid/graphics/NinePatch$InsetStruct;Z)V
 HSPLandroid/graphics/Bitmap;->checkHardware(Ljava/lang/String;)V
 HSPLandroid/graphics/Bitmap;->checkPixelAccess(II)V
-HSPLandroid/graphics/Bitmap;->checkPixelsAccess(IIIIII[I)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
+HSPLandroid/graphics/Bitmap;->checkPixelsAccess(IIIIII[I)V
 HSPLandroid/graphics/Bitmap;->checkRecycled(Ljava/lang/String;)V
 HSPLandroid/graphics/Bitmap;->checkWidthHeight(II)V
 HSPLandroid/graphics/Bitmap;->checkXYSign(II)V
@@ -6100,13 +6113,14 @@
 HSPLandroid/graphics/Bitmap;->getScaledWidth(I)I
 HSPLandroid/graphics/Bitmap;->getWidth()I
 HSPLandroid/graphics/Bitmap;->hasAlpha()Z
+HSPLandroid/graphics/Bitmap;->hasGainmap()Z+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->hasMipMap()Z
 HSPLandroid/graphics/Bitmap;->isMutable()Z
 HSPLandroid/graphics/Bitmap;->isPremultiplied()Z
 HSPLandroid/graphics/Bitmap;->isRecycled()Z
 HSPLandroid/graphics/Bitmap;->noteHardwareBitmapSlowCall()V
 HSPLandroid/graphics/Bitmap;->prepareToDraw()V
-HSPLandroid/graphics/Bitmap;->reconfigure(IILandroid/graphics/Bitmap$Config;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
+HSPLandroid/graphics/Bitmap;->reconfigure(IILandroid/graphics/Bitmap$Config;)V
 HSPLandroid/graphics/Bitmap;->recycle()V
 HSPLandroid/graphics/Bitmap;->reinit(IIZ)V
 HSPLandroid/graphics/Bitmap;->scaleFromDensity(III)I
@@ -6208,7 +6222,7 @@
 HSPLandroid/graphics/Canvas;->saveUnclippedLayer(IIII)I
 HSPLandroid/graphics/Canvas;->scale(FF)V
 HSPLandroid/graphics/Canvas;->scale(FFFF)V
-HSPLandroid/graphics/Canvas;->setBitmap(Landroid/graphics/Bitmap;)V+]Landroid/graphics/Canvas;Landroid/graphics/Canvas;
+HSPLandroid/graphics/Canvas;->setBitmap(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/Canvas;->setCompatibilityVersion(I)V
 HSPLandroid/graphics/Canvas;->setDensity(I)V
 HSPLandroid/graphics/Canvas;->setDrawFilter(Landroid/graphics/DrawFilter;)V
@@ -6235,7 +6249,7 @@
 HSPLandroid/graphics/Color;->green(I)I
 HSPLandroid/graphics/Color;->green(J)F
 HSPLandroid/graphics/Color;->luminance()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
@@ -6371,22 +6385,24 @@
 HSPLandroid/graphics/ImageDecoder$AssetInputStreamSource;->toString()Ljava/lang/String;
 HSPLandroid/graphics/ImageDecoder$ImageDecoderSourceTrace;-><init>(Landroid/graphics/ImageDecoder;)V
 HSPLandroid/graphics/ImageDecoder$ImageDecoderSourceTrace;->close()V
-HSPLandroid/graphics/ImageDecoder$ImageInfo;-><init>(Landroid/graphics/ImageDecoder;)V
+HSPLandroid/graphics/ImageDecoder$ImageInfo;-><init>(Landroid/util/Size;ZLjava/lang/String;Landroid/graphics/ColorSpace;)V
+HSPLandroid/graphics/ImageDecoder$ImageInfo;-><init>(Landroid/util/Size;ZLjava/lang/String;Landroid/graphics/ColorSpace;Landroid/graphics/ImageDecoder$ImageInfo-IA;)V
 HSPLandroid/graphics/ImageDecoder$InputStreamSource;-><init>(Landroid/content/res/Resources;Ljava/io/InputStream;I)V
 HSPLandroid/graphics/ImageDecoder$InputStreamSource;->createImageDecoder(Z)Landroid/graphics/ImageDecoder;
 HSPLandroid/graphics/ImageDecoder$InputStreamSource;->getDensity()I
 HSPLandroid/graphics/ImageDecoder$InputStreamSource;->getResources()Landroid/content/res/Resources;
+HSPLandroid/graphics/ImageDecoder$InputStreamSource;->toString()Ljava/lang/String;
 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;->-$$Nest$smdescribeDecoderForTrace(Landroid/graphics/ImageDecoder;)Ljava/lang/String;
-HSPLandroid/graphics/ImageDecoder;-><init>(JIIZZ)V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
+HSPLandroid/graphics/ImageDecoder;-><init>(JIIZZ)V
 HSPLandroid/graphics/ImageDecoder;->callHeaderDecoded(Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;Landroid/graphics/ImageDecoder$Source;)V
 HSPLandroid/graphics/ImageDecoder;->checkForExtended()Z
 HSPLandroid/graphics/ImageDecoder;->checkState(Z)V
 HSPLandroid/graphics/ImageDecoder;->checkSubset(IILandroid/graphics/Rect;)V
-HSPLandroid/graphics/ImageDecoder;->close()V+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
-HSPLandroid/graphics/ImageDecoder;->computeDensity(Landroid/graphics/ImageDecoder$Source;)I+]Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$AssetInputStreamSource;]Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder;]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/graphics/ImageDecoder;->close()V
+HSPLandroid/graphics/ImageDecoder;->computeDensity(Landroid/graphics/ImageDecoder$Source;)I
 HSPLandroid/graphics/ImageDecoder;->createFromAsset(Landroid/content/res/AssetManager$AssetInputStream;ZLandroid/graphics/ImageDecoder$Source;)Landroid/graphics/ImageDecoder;
 HSPLandroid/graphics/ImageDecoder;->createFromStream(Ljava/io/InputStream;ZZLandroid/graphics/ImageDecoder$Source;)Landroid/graphics/ImageDecoder;
 HSPLandroid/graphics/ImageDecoder;->createSource(Landroid/content/res/Resources;Ljava/io/InputStream;I)Landroid/graphics/ImageDecoder$Source;
@@ -6394,10 +6410,12 @@
 HSPLandroid/graphics/ImageDecoder;->decodeBitmapImpl(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/ImageDecoder;->decodeBitmapInternal()Landroid/graphics/Bitmap;
 HSPLandroid/graphics/ImageDecoder;->decodeDrawable(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/ImageDecoder;->decodeDrawableImpl(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/drawable/Drawable;+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$AssetInputStreamSource;]Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder;]Landroid/graphics/ImageDecoder$ImageDecoderSourceTrace;Landroid/graphics/ImageDecoder$ImageDecoderSourceTrace;
+HSPLandroid/graphics/ImageDecoder;->decodeDrawableImpl(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/ImageDecoder;->describeDecoderForTrace(Landroid/graphics/ImageDecoder;)Ljava/lang/String;
 HSPLandroid/graphics/ImageDecoder;->finalize()V
+HSPLandroid/graphics/ImageDecoder;->getColorSpace()Landroid/graphics/ColorSpace;
 HSPLandroid/graphics/ImageDecoder;->getColorSpacePtr()J
+HSPLandroid/graphics/ImageDecoder;->getMimeType()Ljava/lang/String;
 HSPLandroid/graphics/ImageDecoder;->requestedResize()Z
 HSPLandroid/graphics/ImageDecoder;->setAllocator(I)V
 HSPLandroid/graphics/ImageDecoder;->setTargetSize(II)V
@@ -6412,7 +6430,7 @@
 HSPLandroid/graphics/Insets;->of(IIII)Landroid/graphics/Insets;
 HSPLandroid/graphics/Insets;->of(Landroid/graphics/Rect;)Landroid/graphics/Insets;
 HSPLandroid/graphics/Insets;->toRect()Landroid/graphics/Rect;
-HSPLandroid/graphics/Insets;->toString()Ljava/lang/String;
+HSPLandroid/graphics/Insets;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/graphics/Insets;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/graphics/Interpolator;-><init>(II)V
 HSPLandroid/graphics/Interpolator;->finalize()V
@@ -6429,14 +6447,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+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/graphics/Matrix;-><init>()V
 HSPLandroid/graphics/Matrix;-><init>(Landroid/graphics/Matrix;)V
 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
 HSPLandroid/graphics/Matrix;->mapRect(Landroid/graphics/RectF;Landroid/graphics/RectF;)Z
@@ -6474,13 +6492,13 @@
 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/Path;Landroid/graphics/Path;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/graphics/Outline;->setEmpty()V
 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;->setRoundRect(IIIIF)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Outline;Landroid/graphics/Outline;
+HSPLandroid/graphics/Outline;->setRoundRect(IIIIF)V
 HSPLandroid/graphics/Outline;->setRoundRect(Landroid/graphics/Rect;F)V
 HSPLandroid/graphics/Paint$FontMetrics;-><init>()V
 HSPLandroid/graphics/Paint$FontMetricsInt;-><init>()V
@@ -6504,7 +6522,7 @@
 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/BlendModeColorFilter;,Landroid/graphics/PorterDuffColorFilter;]Landroid/graphics/Paint;missing_types]Landroid/graphics/Shader;Landroid/graphics/LinearGradient;,Landroid/graphics/drawable/RippleShader;,Landroid/graphics/BitmapShader;,Landroid/graphics/RadialGradient;
+HSPLandroid/graphics/Paint;->getNativeInstance()J+]Landroid/graphics/ColorFilter;Landroid/graphics/BlendModeColorFilter;,Landroid/graphics/PorterDuffColorFilter;]Landroid/graphics/Paint;Landroid/graphics/Paint;,Landroid/text/TextPaint;]Landroid/graphics/Shader;Landroid/graphics/drawable/RippleShader;,Landroid/graphics/LinearGradient;,Landroid/graphics/BitmapShader;
 HSPLandroid/graphics/Paint;->getRunAdvance(Ljava/lang/CharSequence;IIIIZI)F
 HSPLandroid/graphics/Paint;->getRunAdvance([CIIIIZI)F
 HSPLandroid/graphics/Paint;->getRunCharacterAdvance(Ljava/lang/CharSequence;IIIIZI[FI)F
@@ -6547,6 +6565,7 @@
 HSPLandroid/graphics/Paint;->measureText(Ljava/lang/String;II)F
 HSPLandroid/graphics/Paint;->reset()V
 HSPLandroid/graphics/Paint;->set(Landroid/graphics/Paint;)V
+HSPLandroid/graphics/Paint;->setARGB(IIII)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/Paint;->setAlpha(I)V
 HSPLandroid/graphics/Paint;->setAntiAlias(Z)V
 HSPLandroid/graphics/Paint;->setBlendMode(Landroid/graphics/BlendMode;)V
@@ -6574,16 +6593,16 @@
 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+]Landroid/os/LocaleList;Landroid/os/LocaleList;
+HSPLandroid/graphics/Paint;->setTextLocales(Landroid/os/LocaleList;)V
 HSPLandroid/graphics/Paint;->setTextScaleX(F)V
 HSPLandroid/graphics/Paint;->setTextSize(F)V
 HSPLandroid/graphics/Paint;->setTextSkewX(F)V
 HSPLandroid/graphics/Paint;->setTypeface(Landroid/graphics/Typeface;)Landroid/graphics/Typeface;
 HSPLandroid/graphics/Paint;->setUnderlineText(Z)V
 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/Paint;->syncTextLocalesWithMinikin()V
 HSPLandroid/graphics/PaintFlagsDrawFilter;-><init>(II)V
-HSPLandroid/graphics/Path;-><init>()V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/graphics/Path;-><init>()V
 HSPLandroid/graphics/Path;-><init>(Landroid/graphics/Path;)V
 HSPLandroid/graphics/Path;->addArc(FFFFFF)V
 HSPLandroid/graphics/Path;->addArc(Landroid/graphics/RectF;FF)V
@@ -6675,8 +6694,8 @@
 HSPLandroid/graphics/RecordingCanvas;->getHeight()I
 HSPLandroid/graphics/RecordingCanvas;->getWidth()I
 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;->obtain(Landroid/graphics/RenderNode;II)Landroid/graphics/RecordingCanvas;
+HSPLandroid/graphics/RecordingCanvas;->recycle()V
 HSPLandroid/graphics/RecordingCanvas;->throwIfCannotDraw(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/Rect$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/Rect;
 HSPLandroid/graphics/Rect$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -6713,9 +6732,9 @@
 HSPLandroid/graphics/Rect;->setEmpty()V
 HSPLandroid/graphics/Rect;->setIntersect(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/Rect;->toShortString(Ljava/lang/StringBuilder;)Ljava/lang/String;
-HSPLandroid/graphics/Rect;->toString()Ljava/lang/String;
+HSPLandroid/graphics/Rect;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/graphics/Rect;->union(IIII)V
-HSPLandroid/graphics/Rect;->union(Landroid/graphics/Rect;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/graphics/Rect;->union(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/Rect;->width()I
 HSPLandroid/graphics/Rect;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/graphics/RectF;-><init>()V
@@ -6725,7 +6744,8 @@
 HSPLandroid/graphics/RectF;->centerX()F
 HSPLandroid/graphics/RectF;->centerY()F
 HSPLandroid/graphics/RectF;->contains(FF)Z
-HSPLandroid/graphics/RectF;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/graphics/RectF;
+HSPLandroid/graphics/RectF;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/RectF;->hashCode()I
 HSPLandroid/graphics/RectF;->height()F
 HSPLandroid/graphics/RectF;->inset(FF)V
 HSPLandroid/graphics/RectF;->intersect(FFFF)Z
@@ -6769,17 +6789,17 @@
 HSPLandroid/graphics/RenderNode$PositionUpdateListener;->callPositionChanged(Ljava/lang/ref/WeakReference;JIIII)Z
 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+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/graphics/RenderNode;-><init>(Ljava/lang/String;Landroid/graphics/RenderNode$AnimationHost;)V
 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;
 HSPLandroid/graphics/RenderNode;->clearStretch()Z
 HSPLandroid/graphics/RenderNode;->create(Ljava/lang/String;Landroid/graphics/RenderNode$AnimationHost;)Landroid/graphics/RenderNode;
 HSPLandroid/graphics/RenderNode;->discardDisplayList()V
-HSPLandroid/graphics/RenderNode;->endRecording()V+]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/graphics/RenderNode;->endRecording()V
 HSPLandroid/graphics/RenderNode;->getClipToOutline()Z
 HSPLandroid/graphics/RenderNode;->getElevation()F
-HSPLandroid/graphics/RenderNode;->getMatrix(Landroid/graphics/Matrix;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
+HSPLandroid/graphics/RenderNode;->getMatrix(Landroid/graphics/Matrix;)V
 HSPLandroid/graphics/RenderNode;->getPivotY()F
 HSPLandroid/graphics/RenderNode;->getRotationX()F
 HSPLandroid/graphics/RenderNode;->getRotationY()F
@@ -6851,7 +6871,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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
+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$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;
@@ -6864,7 +6884,7 @@
 HSPLandroid/graphics/Typeface;->createWeightStyle(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;
 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+]Ljava/lang/Object;Landroid/graphics/Typeface;
+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;->getStyle()I
 HSPLandroid/graphics/Typeface;->getSystemDefaultTypeface(Ljava/lang/String;)Landroid/graphics/Typeface;
@@ -7130,7 +7150,7 @@
 HSPLandroid/graphics/drawable/ColorDrawable;-><init>(Landroid/graphics/drawable/ColorDrawable$ColorState;Landroid/content/res/Resources;Landroid/graphics/drawable/ColorDrawable-IA;)V
 HSPLandroid/graphics/drawable/ColorDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/ColorDrawable;->clearMutated()V
-HSPLandroid/graphics/drawable/ColorDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/drawable/ColorDrawable;Landroid/graphics/drawable/ColorDrawable;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/graphics/drawable/ColorDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/ColorDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/ColorDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/ColorDrawable;->getColor()I
@@ -7178,7 +7198,7 @@
 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
 HSPLandroid/graphics/drawable/Drawable;->isProjected()Z
 HSPLandroid/graphics/drawable/Drawable;->isStateful()Z
 HSPLandroid/graphics/drawable/Drawable;->isVisible()Z
@@ -7189,14 +7209,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+]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/graphics/drawable/Drawable;->resolveDensity(Landroid/content/res/Resources;I)I
 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;megamorphic_types
-HSPLandroid/graphics/drawable/Drawable;->setBounds(Landroid/graphics/Rect;)V+]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/Drawable;->setBounds(IIII)V
+HSPLandroid/graphics/drawable/Drawable;->setBounds(Landroid/graphics/Rect;)V
 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
@@ -7209,7 +7229,7 @@
 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+]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/Drawable;->setVisible(ZZ)Z
 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;->updateTintFilter(Landroid/graphics/PorterDuffColorFilter;Landroid/content/res/ColorStateList;Landroid/graphics/PorterDuff$Mode;)Landroid/graphics/PorterDuffColorFilter;
@@ -7218,8 +7238,8 @@
 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+]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/Drawable;Landroid/graphics/drawable/AnimationDrawable;,Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;,Landroid/graphics/drawable/ColorDrawable;
+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;Landroid/graphics/drawable/InsetDrawable;
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->addChild(Landroid/graphics/drawable/Drawable;)I
 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
@@ -7258,14 +7278,14 @@
 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;->getOpticalInsets()Landroid/graphics/Insets;+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/NinePatchDrawable;
 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+]Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;]Landroid/graphics/drawable/DrawableContainer;Landroid/graphics/drawable/StateListDrawable;,Landroid/graphics/drawable/AnimationDrawable;,Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/DrawableContainer;->getPadding(Landroid/graphics/Rect;)Z+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/graphics/drawable/DrawableContainer;->initializeDrawableForDisplay(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/graphics/drawable/DrawableContainer;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
 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/AnimationDrawable;,Landroid/graphics/drawable/NinePatchDrawable;,Landroid/graphics/drawable/AnimatedVectorDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->needsMirroring()Z
 HSPLandroid/graphics/drawable/DrawableContainer;->onBoundsChange(Landroid/graphics/Rect;)V
@@ -7327,12 +7347,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][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;-><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;->applyDensityScaling(II)V
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->canApplyTheme()Z
-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;->computeOpacity()V
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->getChangingConfigurations()I
 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;
@@ -7345,20 +7365,21 @@
 HSPLandroid/graphics/drawable/GradientDrawable;-><init>()V
 HSPLandroid/graphics/drawable/GradientDrawable;-><init>(Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/GradientDrawable;-><init>(Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/content/res/Resources;Landroid/graphics/drawable/GradientDrawable-IA;)V
+HSPLandroid/graphics/drawable/GradientDrawable;-><init>(Landroid/graphics/drawable/GradientDrawable$Orientation;[I)V
 HSPLandroid/graphics/drawable/GradientDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 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/Paint;Landroid/graphics/Paint;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+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;
 HSPLandroid/graphics/drawable/GradientDrawable;->ensureValidRect()Z
-HSPLandroid/graphics/drawable/GradientDrawable;->getChangingConfigurations()I+]Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/graphics/drawable/GradientDrawable$GradientState;
+HSPLandroid/graphics/drawable/GradientDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/GradientDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/drawable/GradientDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/GradientDrawable;->getFloatOrFraction(Landroid/content/res/TypedArray;IF)F
 HSPLandroid/graphics/drawable/GradientDrawable;->getIntrinsicHeight()I
 HSPLandroid/graphics/drawable/GradientDrawable;->getIntrinsicWidth()I
 HSPLandroid/graphics/drawable/GradientDrawable;->getOpacity()I
-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;->getOutline(Landroid/graphics/Outline;)V
 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
@@ -7391,7 +7412,7 @@
 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+]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;->updateLocalState(Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 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;
@@ -7444,7 +7465,7 @@
 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+]Landroid/graphics/drawable/Drawable$ConstantState;megamorphic_types]Landroid/graphics/drawable/Drawable;megamorphic_types
+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;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->applyDensityScaling(II)V
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->setDensity(I)V
@@ -7464,7 +7485,7 @@
 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+]Landroid/graphics/drawable/LayerDrawable;missing_types
+HSPLandroid/graphics/drawable/LayerDrawable;-><init>(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)V
 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;
@@ -7482,19 +7503,19 @@
 HSPLandroid/graphics/drawable/LayerDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/LayerDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/LayerDrawable;->getDrawable(I)Landroid/graphics/drawable/Drawable;
-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;->getIntrinsicHeight()I
+HSPLandroid/graphics/drawable/LayerDrawable;->getIntrinsicWidth()I
 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+]Landroid/graphics/drawable/LayerDrawable;missing_types
+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/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;
 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;->isAutoMirrored()Z
 HSPLandroid/graphics/drawable/LayerDrawable;->isProjected()Z
 HSPLandroid/graphics/drawable/LayerDrawable;->isStateful()Z
-HSPLandroid/graphics/drawable/LayerDrawable;->jumpToCurrentState()V+]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/LayerDrawable;->jumpToCurrentState()V
 HSPLandroid/graphics/drawable/LayerDrawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/LayerDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->onStateChange([I)Z
@@ -7517,7 +7538,7 @@
 HSPLandroid/graphics/drawable/LayerDrawable;->setVisible(ZZ)Z
 HSPLandroid/graphics/drawable/LayerDrawable;->suspendChildInvalidation()V
 HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerBounds(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;->updateLayerBoundsInternal(Landroid/graphics/Rect;)V+]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;]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
@@ -7534,8 +7555,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;
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
@@ -7615,7 +7636,7 @@
 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+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
+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;Landroid/graphics/drawable/RippleDrawable-IA;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->canApplyTheme()Z
@@ -7628,26 +7649,26 @@
 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
-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;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/drawable/RippleAnimationSession;
+HSPLandroid/graphics/drawable/RippleDrawable;->drawPatterned(Landroid/graphics/Canvas;)V
 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;->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;missing_types
+HSPLandroid/graphics/drawable/RippleDrawable;->getDirtyBounds()Landroid/graphics/Rect;
 HSPLandroid/graphics/drawable/RippleDrawable;->getMaskType()I
 HSPLandroid/graphics/drawable/RippleDrawable;->getOpacity()I
 HSPLandroid/graphics/drawable/RippleDrawable;->getOutline(Landroid/graphics/Outline;)V
 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+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
+HSPLandroid/graphics/drawable/RippleDrawable;->isBounded()Z+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
+HSPLandroid/graphics/drawable/RippleDrawable;->isProjected()Z
 HSPLandroid/graphics/drawable/RippleDrawable;->isStateful()Z
 HSPLandroid/graphics/drawable/RippleDrawable;->jumpToCurrentState()V
 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;->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(ZZZZ)V
@@ -7661,7 +7682,7 @@
 HSPLandroid/graphics/drawable/RippleDrawable;->tryRippleEnter()V
 HSPLandroid/graphics/drawable/RippleDrawable;->updateLocalState()V
 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/PorterDuffColorFilter;Landroid/graphics/PorterDuffColorFilter;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/drawable/RippleAnimationSession;
+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
 HSPLandroid/graphics/drawable/RippleDrawable;->verifyRequiredAttributes(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/RippleForeground$1;->onAnimationEnd(Landroid/animation/Animator;)V
@@ -7703,8 +7724,10 @@
 HSPLandroid/graphics/drawable/RippleShader;->setResolution(FF)V
 HSPLandroid/graphics/drawable/RippleShader;->setShader(Landroid/graphics/Shader;)V
 HSPLandroid/graphics/drawable/RippleShader;->setTouch(FF)V
+HSPLandroid/graphics/drawable/RotateDrawable$RotateState;->-$$Nest$fgetmThemeAttrs(Landroid/graphics/drawable/RotateDrawable$RotateState;)[I
 HSPLandroid/graphics/drawable/RotateDrawable$RotateState;-><init>(Landroid/graphics/drawable/RotateDrawable$RotateState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/RotateDrawable$RotateState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/RotateDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/RotateDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/RotateDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/RotateDrawable;->mutateConstantState()Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;
@@ -7778,7 +7801,7 @@
 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+]Landroid/graphics/drawable/TransitionDrawable;Landroid/graphics/drawable/TransitionDrawable;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/ColorDrawable;,Landroid/graphics/drawable/BitmapDrawable;,Landroid/graphics/drawable/StateListDrawable;
+HSPLandroid/graphics/drawable/TransitionDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/TransitionDrawable;->setCrossFadeEnabled(Z)V
 HSPLandroid/graphics/drawable/TransitionDrawable;->startTransition(I)V
 HSPLandroid/graphics/drawable/VectorDrawable$VClipPath;->canApplyTheme()Z
@@ -7799,12 +7822,12 @@
 HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->inflate(Landroid/content/res/Resources;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->isStateful()Z
 HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V+]Landroid/content/res/ComplexColor;Landroid/content/res/ColorStateList;,Landroid/content/res/GradientColor;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/graphics/Shader;Landroid/graphics/LinearGradient;]Landroid/content/res/GradientColor;Landroid/content/res/GradientColor;
+HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/res/ComplexColor;Landroid/content/res/ColorStateList;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 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;]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$VGroup;,Landroid/graphics/drawable/VectorDrawable$VFullPath;
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;-><init>(Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/util/ArrayMap;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->addChild(Landroid/graphics/drawable/VectorDrawable$VObject;)V
 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;
@@ -7839,7 +7862,7 @@
 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+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/graphics/drawable/VectorDrawable$VGroup;
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->onTreeConstructionFinished()V
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setAlpha(F)Z
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setDensity(I)Z
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setViewportSize(FF)V
@@ -7869,7 +7892,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+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;]Landroid/graphics/ColorFilter;Landroid/graphics/BlendModeColorFilter;,Landroid/graphics/PorterDuffColorFilter;]Landroid/graphics/drawable/VectorDrawable;Landroid/graphics/drawable/VectorDrawable;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/graphics/drawable/VectorDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/VectorDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/VectorDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/VectorDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
@@ -7880,7 +7903,7 @@
 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+]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;->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;->isAutoMirrored()Z
 HSPLandroid/graphics/drawable/VectorDrawable;->isStateful()Z
@@ -7893,7 +7916,7 @@
 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+]Landroid/graphics/drawable/VectorDrawable;Landroid/graphics/drawable/VectorDrawable;
+HSPLandroid/graphics/drawable/VectorDrawable;->updateColorFilters(Landroid/graphics/BlendMode;Landroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/VectorDrawable;->updateLocalState(Landroid/content/res/Resources;)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
@@ -7927,7 +7950,6 @@
 HSPLandroid/graphics/fonts/Font;->getStyle()Landroid/graphics/fonts/FontStyle;
 HSPLandroid/graphics/fonts/FontFamily$Builder;-><init>(Landroid/graphics/fonts/Font;)V
 HSPLandroid/graphics/fonts/FontFamily$Builder;->build()Landroid/graphics/fonts/FontFamily;
-HSPLandroid/graphics/fonts/FontFamily$Builder;->build(Ljava/lang/String;IZZ)Landroid/graphics/fonts/FontFamily;+]Landroid/graphics/fonts/Font;Landroid/graphics/fonts/Font;]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/graphics/fonts/FontFamily$Builder;->makeStyleIdentifier(Landroid/graphics/fonts/Font;)I
 HSPLandroid/graphics/fonts/FontFamily;-><init>(J)V
 HSPLandroid/graphics/fonts/FontFamily;->getFont(I)Landroid/graphics/fonts/Font;
@@ -7947,9 +7969,6 @@
 HSPLandroid/graphics/text/LineBreakConfig$Builder;->setLineBreakStyle(I)Landroid/graphics/text/LineBreakConfig$Builder;
 HSPLandroid/graphics/text/LineBreakConfig$Builder;->setLineBreakWordStyle(I)Landroid/graphics/text/LineBreakConfig$Builder;
 HSPLandroid/graphics/text/LineBreakConfig;-><clinit>()V
-HSPLandroid/graphics/text/LineBreakConfig;-><init>(IIZ)V
-HSPLandroid/graphics/text/LineBreakConfig;-><init>(IIZLandroid/graphics/text/LineBreakConfig-IA;)V
-HSPLandroid/graphics/text/LineBreakConfig;->getAutoPhraseBreaking()Z
 HSPLandroid/graphics/text/LineBreakConfig;->getLineBreakConfig(II)Landroid/graphics/text/LineBreakConfig;
 HSPLandroid/graphics/text/LineBreakConfig;->getLineBreakStyle()I
 HSPLandroid/graphics/text/LineBreakConfig;->getLineBreakWordStyle()I
@@ -7977,8 +7996,8 @@
 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;->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;
+HSPLandroid/graphics/text/MeasuredText$Builder;->appendStyleRun(Landroid/graphics/Paint;Landroid/graphics/text/LineBreakConfig;IZ)Landroid/graphics/text/MeasuredText$Builder;
+HSPLandroid/graphics/text/MeasuredText$Builder;->build()Landroid/graphics/text/MeasuredText;
 HSPLandroid/graphics/text/MeasuredText$Builder;->ensureNativePtrNoReuse()V
 HSPLandroid/graphics/text/MeasuredText$Builder;->setComputeHyphenation(I)Landroid/graphics/text/MeasuredText$Builder;
 HSPLandroid/graphics/text/MeasuredText$Builder;->setComputeHyphenation(Z)Landroid/graphics/text/MeasuredText$Builder;
@@ -8084,6 +8103,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;-><init>(Landroid/hardware/camera2/impl/CameraMetadataNative;)V
 HSPLandroid/hardware/camera2/CameraCharacteristics;->get(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;
 HSPLandroid/hardware/camera2/CameraCharacteristics;->getDeviceStateListener()Landroid/hardware/camera2/CameraManager$DeviceStateListener;
 HSPLandroid/hardware/camera2/CameraCharacteristics;->overrideProperty(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;
@@ -8091,6 +8111,7 @@
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$1;->compare(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$3;-><init>(Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;Landroid/hardware/camera2/CameraManager$AvailabilityCallback;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$6;-><init>(Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;Ljava/lang/String;Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Ljava/lang/String;)V
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->asBinder()Landroid/os/IBinder;
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->cameraIdHasConcurrentStreamsLocked(Ljava/lang/String;)Z
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->connectCameraServiceLocked()V
@@ -8098,19 +8119,23 @@
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->get()Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->getCameraIdList()[Ljava/lang/String;
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->getCameraService()Landroid/hardware/ICameraService;
-HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->getDeviceStateHandler()Landroid/os/Handler;
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->isAvailable(I)Z
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onCameraAccessPrioritiesChanged()V
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onStatusChanged(ILjava/lang/String;)V
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onStatusChangedLocked(ILjava/lang/String;)V
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onTorchStatusChanged(ILjava/lang/String;)V
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onTorchStatusChangedLocked(ILjava/lang/String;)V
-HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->postSingleAccessPriorityChangeUpdate(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Ljava/util/concurrent/Executor;)V+]Ljava/util/concurrent/Executor;Landroid/hardware/camera2/impl/CameraDeviceImpl$CameraHandlerExecutor;,Landroid/os/HandlerExecutor;
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->postSingleAccessPriorityChangeUpdate(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Ljava/util/concurrent/Executor;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->postSingleUpdate(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Ljava/util/concurrent/Executor;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->registerDeviceStateListener(Landroid/hardware/camera2/CameraCharacteristics;Landroid/content/Context;)V
+HSPLandroid/hardware/camera2/CameraManager$FoldStateListener;-><init>(Landroid/content/Context;)V
 HSPLandroid/hardware/camera2/CameraManager$FoldStateListener;->addDeviceStateListener(Landroid/hardware/camera2/CameraManager$DeviceStateListener;)V
 HSPLandroid/hardware/camera2/CameraManager$FoldStateListener;->handleStateChange(I)V
 HSPLandroid/hardware/camera2/CameraManager$FoldStateListener;->onBaseStateChanged(I)V
 HSPLandroid/hardware/camera2/CameraManager$FoldStateListener;->onStateChanged(I)V
 HSPLandroid/hardware/camera2/CameraManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/hardware/camera2/CameraManager;->getCameraCharacteristics(Ljava/lang/String;)Landroid/hardware/camera2/CameraCharacteristics;
+HSPLandroid/hardware/camera2/CameraManager;->getCameraCharacteristics(Ljava/lang/String;Z)Landroid/hardware/camera2/CameraCharacteristics;+]Landroid/hardware/camera2/CameraManager;Landroid/hardware/camera2/CameraManager;]Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;]Landroid/hardware/ICameraService;Landroid/hardware/ICameraService$Stub$Proxy;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLandroid/hardware/camera2/CameraManager;->getCameraIdList()[Ljava/lang/String;
 HSPLandroid/hardware/camera2/CameraManager;->getDisplaySize()Landroid/util/Size;
 HSPLandroid/hardware/camera2/CameraManager;->getPhysicalCameraMultiResolutionConfigs(Ljava/lang/String;Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/ICameraService;)Ljava/util/Map;
@@ -8123,13 +8148,13 @@
 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;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/impl/CameraMetadataNative$Key;->equals(Ljava/lang/Object;)Z
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative$Key;->equals(Ljava/lang/Object;)Z+]Ljava/lang/String;Ljava/lang/String;]Landroid/hardware/camera2/impl/CameraMetadataNative$Key;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;]Ljava/lang/Object;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;]Landroid/hardware/camera2/utils/TypeReference;Landroid/hardware/camera2/utils/TypeReference$SpecializedTypeReference;
 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;->get(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/hardware/camera2/impl/GetCommand;megamorphic_types
+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]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;
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->readValues(I)[B
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setCameraId(I)V
@@ -8139,11 +8164,11 @@
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->updateNativeAllocation()V
 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;megamorphic_types
 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$MarshalerArray;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;+]Landroid/hardware/camera2/marshal/Marshaler;Landroid/hardware/camera2/marshal/impl/MarshalQueryableMeteringRectangle$MarshalerMeteringRectangle;,Landroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;,Landroid/hardware/camera2/marshal/impl/MarshalQueryablePair$MarshalerPair;]Landroid/hardware/camera2/marshal/impl/MarshalQueryableArray$PrimitiveArrayFiller;Landroid/hardware/camera2/marshal/impl/MarshalQueryableArray$PrimitiveArrayFiller$1;,Landroid/hardware/camera2/marshal/impl/MarshalQueryableArray$PrimitiveArrayFiller$2;,Landroid/hardware/camera2/marshal/impl/MarshalQueryableArray$PrimitiveArrayFiller$3;,Landroid/hardware/camera2/marshal/impl/MarshalQueryableArray$PrimitiveArrayFiller$5;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableArray;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableArray;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableBoolean$MarshalerBoolean;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Boolean;
@@ -8156,7 +8181,7 @@
 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;->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;
 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
@@ -8174,8 +8199,8 @@
 HSPLandroid/hardware/camera2/utils/ConcurrentCameraIdCombination;-><init>(Landroid/os/Parcel;Landroid/hardware/camera2/utils/ConcurrentCameraIdCombination-IA;)V
 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;->containsTypeVariable(Ljava/lang/reflect/Type;)Z+]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/hardware/camera2/utils/TypeReference;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;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;
@@ -8187,6 +8212,7 @@
 HSPLandroid/hardware/devicestate/DeviceStateInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/hardware/devicestate/DeviceStateInfo;-><clinit>()V
 HSPLandroid/hardware/devicestate/DeviceStateInfo;-><init>([III)V
+HSPLandroid/hardware/devicestate/DeviceStateManager$DeviceStateCallback;->onBaseStateChanged(I)V
 HSPLandroid/hardware/devicestate/DeviceStateManager$DeviceStateCallback;->onSupportedStatesChanged([I)V
 HSPLandroid/hardware/devicestate/DeviceStateManager;-><init>()V
 HSPLandroid/hardware/devicestate/DeviceStateManager;->registerCallback(Ljava/util/concurrent/Executor;Landroid/hardware/devicestate/DeviceStateManager$DeviceStateCallback;)V
@@ -8196,7 +8222,13 @@
 HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper$$ExternalSyntheticLambda1;->run()V
 HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper$$ExternalSyntheticLambda2;-><init>(Landroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;[I)V
 HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper$$ExternalSyntheticLambda2;->run()V
+HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->$r8$lambda$6u3slsjk-8VI_sfftus20TtEKlU(Landroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;[I)V
+HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->$r8$lambda$FiFeo7UDl_Jzgv3ijVmtwGDn8K0(Landroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;I)V
+HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->$r8$lambda$yXCJCBW7G4qvEFV6LoxaomGrhSE(Landroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;I)V
 HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;-><init>(Landroid/hardware/devicestate/DeviceStateManager$DeviceStateCallback;Ljava/util/concurrent/Executor;)V
+HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->lambda$notifyBaseStateChanged$1(I)V
+HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->lambda$notifyStateChanged$2(I)V
+HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->lambda$notifySupportedStatesChanged$0([I)V
 HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->notifyBaseStateChanged(I)V
 HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->notifyStateChanged(I)V
 HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->notifySupportedStatesChanged([I)V
@@ -8245,18 +8277,28 @@
 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/DisplayManager$$ExternalSyntheticLambda0;-><init>()V
+HSPLandroid/hardware/display/DisplayManager$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
+HSPLandroid/hardware/display/DisplayManager$$ExternalSyntheticLambda2;-><init>()V
+HSPLandroid/hardware/display/DisplayManager$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
+HSPLandroid/hardware/display/DisplayManager$WeakDisplayCache;-><init>()V
+HSPLandroid/hardware/display/DisplayManager$WeakDisplayCache;-><init>(Landroid/hardware/display/DisplayManager$WeakDisplayCache-IA;)V
+HSPLandroid/hardware/display/DisplayManager$WeakDisplayCache;->get(I)Landroid/view/Display;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
+HSPLandroid/hardware/display/DisplayManager$WeakDisplayCache;->put(Landroid/view/Display;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/Display;Landroid/view/Display;
+HSPLandroid/hardware/display/DisplayManager$WeakDisplayCache;->removeStaleEntries()V+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/hardware/display/DisplayManager;->$r8$lambda$SFvjuUGZreFxYU7cOzBlo6b0tEs(Landroid/view/Display;)Z
 HSPLandroid/hardware/display/DisplayManager;-><init>(Landroid/content/Context;)V
-HSPLandroid/hardware/display/DisplayManager;->addAllDisplaysLocked(Ljava/util/ArrayList;[I)V
-HSPLandroid/hardware/display/DisplayManager;->addDisplaysLocked(Ljava/util/ArrayList;[III)V
 HSPLandroid/hardware/display/DisplayManager;->getDisplay(I)Landroid/view/Display;
 HSPLandroid/hardware/display/DisplayManager;->getDisplays()[Landroid/view/Display;
 HSPLandroid/hardware/display/DisplayManager;->getDisplays(Ljava/lang/String;)[Landroid/view/Display;
-HSPLandroid/hardware/display/DisplayManager;->getOrCreateDisplayLocked(IZ)Landroid/view/Display;
+HSPLandroid/hardware/display/DisplayManager;->getDisplays([ILjava/util/function/Predicate;)[Landroid/view/Display;+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Predicate;Landroid/hardware/display/DisplayManager$$ExternalSyntheticLambda2;,Landroid/hardware/display/DisplayManager$$ExternalSyntheticLambda0;
+HSPLandroid/hardware/display/DisplayManager;->getOrCreateDisplay(IZ)Landroid/view/Display;+]Landroid/hardware/display/DisplayManager$WeakDisplayCache;Landroid/hardware/display/DisplayManager$WeakDisplayCache;]Landroid/content/Context;missing_types]Landroid/hardware/display/DisplayManagerGlobal;Landroid/hardware/display/DisplayManagerGlobal;]Landroid/view/Display;Landroid/view/Display;
 HSPLandroid/hardware/display/DisplayManager;->getStableDisplaySize()Landroid/graphics/Point;
 HSPLandroid/hardware/display/DisplayManager;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus;
+HSPLandroid/hardware/display/DisplayManager;->isPresentationDisplay(Landroid/view/Display;)Z
 HSPLandroid/hardware/display/DisplayManager;->registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;)V
 HSPLandroid/hardware/display/DisplayManager;->registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;J)V
 HSPLandroid/hardware/display/DisplayManager;->unregisterDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;)V
@@ -8268,13 +8310,14 @@
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->$r8$lambda$aO0d1U2yv7-42_0MvY8uEf7AtpE(Landroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;JLandroid/os/Message;)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;-><init>(Landroid/hardware/display/DisplayManager$DisplayListener;Ljava/util/concurrent/Executor;J)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->clearEvents()V
-HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->handleMessage(Landroid/os/Message;)V
-HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->lambda$sendDisplayEvent$0(JLandroid/os/Message;)V+]Landroid/os/Message;Landroid/os/Message;]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;
+HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->handleMessage(Landroid/os/Message;)V+]Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/view/Display$HdrSdrRatioListenerWrapper;
+HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->lambda$sendDisplayEvent$0(JLandroid/os/Message;)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->sendDisplayEvent(IILandroid/view/DisplayInfo;)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;-><init>(Landroid/hardware/display/DisplayManagerGlobal;)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;-><init>(Landroid/hardware/display/DisplayManagerGlobal;Landroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback-IA;)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;->onDisplayEvent(II)V
 HSPLandroid/hardware/display/DisplayManagerGlobal;->-$$Nest$fgetmDm(Landroid/hardware/display/DisplayManagerGlobal;)Landroid/hardware/display/IDisplayManager;
+HSPLandroid/hardware/display/DisplayManagerGlobal;->-$$Nest$mhandleDisplayEvent(Landroid/hardware/display/DisplayManagerGlobal;II)V
 HSPLandroid/hardware/display/DisplayManagerGlobal;-><init>(Landroid/hardware/display/IDisplayManager;)V
 HSPLandroid/hardware/display/DisplayManagerGlobal;->calculateEventsMaskLocked()I
 HSPLandroid/hardware/display/DisplayManagerGlobal;->findDisplayListenerLocked(Landroid/hardware/display/DisplayManager$DisplayListener;)I
@@ -8289,7 +8332,7 @@
 HSPLandroid/hardware/display/DisplayManagerGlobal;->getPreferredWideGamutColorSpace()Landroid/graphics/ColorSpace;
 HSPLandroid/hardware/display/DisplayManagerGlobal;->getStableDisplaySize()Landroid/graphics/Point;
 HSPLandroid/hardware/display/DisplayManagerGlobal;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus;
-HSPLandroid/hardware/display/DisplayManagerGlobal;->handleDisplayEvent(II)V
+HSPLandroid/hardware/display/DisplayManagerGlobal;->handleDisplayEvent(II)V+]Landroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;Landroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
 HSPLandroid/hardware/display/DisplayManagerGlobal;->registerCallbackIfNeededLocked()V
 HSPLandroid/hardware/display/DisplayManagerGlobal;->registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;J)V
 HSPLandroid/hardware/display/DisplayManagerGlobal;->registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Ljava/util/concurrent/Executor;J)V
@@ -8303,7 +8346,7 @@
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getDisplayIds(Z)[I
-HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getDisplayInfo(I)Landroid/view/DisplayInfo;
+HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getDisplayInfo(I)Landroid/view/DisplayInfo;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/hardware/display/IDisplayManager$Stub$Proxy;Landroid/hardware/display/IDisplayManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getOverlaySupport()Landroid/hardware/OverlayProperties;
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getPreferredWideGamutColorSpaceId()I
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getStableDisplaySize()Landroid/graphics/Point;
@@ -8349,17 +8392,25 @@
 HSPLandroid/hardware/input/IInputManager$Stub$Proxy;->registerInputDevicesChangedListener(Landroid/hardware/input/IInputDevicesChangedListener;)V
 HSPLandroid/hardware/input/IInputManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/input/IInputManager;
 HSPLandroid/hardware/input/InputDeviceIdentifier;-><init>(Ljava/lang/String;II)V
-HSPLandroid/hardware/input/InputManager;-><init>()V
+HSPLandroid/hardware/input/InputManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/hardware/input/InputManager;->deviceHasKeys(I[I)[Z
 HSPLandroid/hardware/input/InputManager;->getInputDevice(I)Landroid/view/InputDevice;
 HSPLandroid/hardware/input/InputManager;->getInputDeviceIds()[I
 HSPLandroid/hardware/input/InputManager;->getInstance()Landroid/hardware/input/InputManager;
-HSPLandroid/hardware/input/InputManager;->getInstance(Landroid/content/Context;)Landroid/hardware/input/InputManager;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLandroid/hardware/input/InputManager;->registerInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;Landroid/os/Handler;)V
 HSPLandroid/hardware/input/InputManager;->unregisterInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;)V
+HSPLandroid/hardware/input/InputManagerGlobal$InputDeviceListenerDelegate;-><init>(Landroid/hardware/input/InputManager$InputDeviceListener;Landroid/os/Handler;)V
+HSPLandroid/hardware/input/InputManagerGlobal$InputDevicesChangedListener;-><init>(Landroid/hardware/input/InputManagerGlobal;)V
+HSPLandroid/hardware/input/InputManagerGlobal$InputDevicesChangedListener;-><init>(Landroid/hardware/input/InputManagerGlobal;Landroid/hardware/input/InputManagerGlobal$InputDevicesChangedListener-IA;)V
 HSPLandroid/hardware/input/InputManagerGlobal;-><init>(Landroid/hardware/input/IInputManager;)V
+HSPLandroid/hardware/input/InputManagerGlobal;->getInputDevice(I)Landroid/view/InputDevice;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/hardware/input/IInputManager;Landroid/hardware/input/IInputManager$Stub$Proxy;
+HSPLandroid/hardware/input/InputManagerGlobal;->getInputDeviceIds()[I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/hardware/input/InputManagerGlobal;->getInputManagerService()Landroid/hardware/input/IInputManager;
 HSPLandroid/hardware/input/InputManagerGlobal;->getInstance()Landroid/hardware/input/InputManagerGlobal;
+HSPLandroid/hardware/input/InputManagerGlobal;->onInputDevicesChanged([I)V+]Landroid/view/InputDevice;Landroid/view/InputDevice;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/hardware/input/InputManagerGlobal;->populateInputDevicesLocked()V
+HSPLandroid/hardware/input/InputManagerGlobal;->registerInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;Landroid/os/Handler;)V
+HSPLandroid/hardware/input/InputSettings;->isStylusPointerIconEnabled(Landroid/content/Context;)Z
 HSPLandroid/hardware/location/ContextHubClient;-><init>(Landroid/hardware/location/ContextHubInfo;Z)V
 HSPLandroid/hardware/location/ContextHubClient;->sendMessageToNanoApp(Landroid/hardware/location/NanoAppMessage;)I
 HSPLandroid/hardware/location/ContextHubClient;->setClientProxy(Landroid/hardware/location/IContextHubClient;)V
@@ -8443,7 +8494,7 @@
 HSPLandroid/hardware/security/keymint/KeyParameterValue;->integer(I)Landroid/hardware/security/keymint/KeyParameterValue;
 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
+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/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
@@ -8533,8 +8584,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+]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
+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+]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
@@ -8573,7 +8624,7 @@
 HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$CurrencySink;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
 HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$FormattingData;-><init>(Ljava/lang/String;)V
 HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;-><init>(Landroid/icu/util/ULocale;Landroid/icu/impl/ICUResourceBundle;Z)V
-HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->fetchFormattingData(Ljava/lang/String;)Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$FormattingData;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->fetchFormattingData(Ljava/lang/String;)Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$FormattingData;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
 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;
@@ -8589,11 +8640,11 @@
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo$UniqueList;->add(Ljava/lang/Object;)V
 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;+]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;]Landroid/icu/impl/ICUCurrencyMetaInfo$Collector;Landroid/icu/impl/ICUCurrencyMetaInfo$CurrencyCollector;
-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;->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+]Ljava/lang/String;Ljava/lang/String;]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
+HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->getDate(Landroid/icu/impl/ICUResourceBundle;JZ)J+]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceIntVector;
 HSPLandroid/icu/impl/ICUData;->checkStreamForBinaryData(Ljava/io/InputStream;Ljava/lang/String;)V
 HSPLandroid/icu/impl/ICUData;->getStream(Ljava/lang/ClassLoader;Ljava/lang/String;Z)Ljava/io/InputStream;
 HSPLandroid/icu/impl/ICULocaleService$ICUResourceBundleFactory;->getSupportedIDs()Ljava/util/Set;
@@ -8638,15 +8689,15 @@
 HSPLandroid/icu/impl/ICUResourceBundle;-><init>(Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;)V
 HSPLandroid/icu/impl/ICUResourceBundle;->addBundleBaseNamesFromClassLoader(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/util/Set;)V
 HSPLandroid/icu/impl/ICUResourceBundle;->at(I)Landroid/icu/impl/ICUResourceBundle;
-HSPLandroid/icu/impl/ICUResourceBundle;->at(Ljava/lang/String;)Landroid/icu/impl/ICUResourceBundle;
-HSPLandroid/icu/impl/ICUResourceBundle;->countPathKeys(Ljava/lang/String;)I
+HSPLandroid/icu/impl/ICUResourceBundle;->at(Ljava/lang/String;)Landroid/icu/impl/ICUResourceBundle;+]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
+HSPLandroid/icu/impl/ICUResourceBundle;->countPathKeys(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundle;->createBundle(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->createFullLocaleNameSet(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/util/Set;
 HSPLandroid/icu/impl/ICUResourceBundle;->equals(Ljava/lang/Object;)Z
 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$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;]Ljava/lang/String;Ljava/lang/String;]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;
@@ -8661,7 +8712,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;+]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;
+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;Z)Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->getDefaultScript(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundle;->getExplicitParent(Ljava/lang/String;)Ljava/lang/String;
@@ -8691,22 +8742,22 @@
 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;->getSize()I
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;->getContainerResource(I)I+]Landroid/icu/impl/ICUResourceBundleReader$Container;Landroid/icu/impl/ICUResourceBundleReader$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;,Landroid/icu/impl/ICUResourceBundleReader$Array32;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;->getSize()I+]Landroid/icu/impl/ICUResourceBundleReader$Container;Landroid/icu/impl/ICUResourceBundleReader$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;,Landroid/icu/impl/ICUResourceBundleReader$Array32;
 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
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceInt;->getInt()I
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceIntVector;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceIntVector;->getIntVector()[I
-HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceString;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V+]Landroid/icu/impl/ICUResourceBundleReader;Landroid/icu/impl/ICUResourceBundleReader;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceString;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/impl/ICUResourceBundleReader;Landroid/icu/impl/ICUResourceBundleReader;
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceString;->getString()Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceString;->getType()I
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;-><init>(Landroid/icu/impl/ICUResourceBundle$WholeBundle;I)V
-HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V+]Landroid/icu/impl/ICUResourceBundleReader;Landroid/icu/impl/ICUResourceBundleReader;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
 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;+]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;->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$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGetObject(Ljava/lang/String;)Ljava/lang/Object;
 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
@@ -8719,7 +8770,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+]Ljava/nio/CharBuffer;Ljava/nio/ByteBufferAsCharBuffer;
+HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getContainer16Resource(Landroid/icu/impl/ICUResourceBundleReader;I)I
 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
@@ -8741,7 +8792,7 @@
 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;+]Ljava/lang/ref/SoftReference;Ljava/lang/ref/SoftReference;]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->get(I)Ljava/lang/Object;+]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;
 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;
@@ -8753,8 +8804,8 @@
 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+]Landroid/icu/impl/ICUResourceBundleReader$Table;Landroid/icu/impl/ICUResourceBundleReader$Table;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;,Landroid/icu/impl/ICUResourceBundleReader$Table16;
+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
@@ -8762,6 +8813,7 @@
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$mgetInt(Landroid/icu/impl/ICUResourceBundleReader;I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$mgetResourceByteOffset(Landroid/icu/impl/ICUResourceBundleReader;I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$mgetTableKeyOffsets(Landroid/icu/impl/ICUResourceBundleReader;I)[C
+HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$msetKeyFromKey16(Landroid/icu/impl/ICUResourceBundleReader;ILandroid/icu/impl/UResource$Key;)V
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$sfgetNULL_READER()Landroid/icu/impl/ICUResourceBundleReader;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$sfgetPUBLIC_TYPES()[I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$smRES_GET_OFFSET(I)I
@@ -8779,7 +8831,7 @@
 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;->getIndexesInt(I)I
-HSPLandroid/icu/impl/ICUResourceBundleReader;->getInt(I)I+]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getInt(I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getIntVector(I)[I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getInts(II)[I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getKey16String(I)Ljava/lang/String;
@@ -8788,8 +8840,8 @@
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getResourceByteOffset(I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getRootResource()I
 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;->getStringV2(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getTable(I)Landroid/icu/impl/ICUResourceBundleReader$Table;+]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getTable16KeyOffsets(I)[C
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getTableKeyOffsets(I)[C
 HSPLandroid/icu/impl/ICUResourceBundleReader;->init(Ljava/nio/ByteBuffer;)V
@@ -8802,8 +8854,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;+]Landroid/icu/text/UCharacterIterator;Landroid/icu/impl/ReplaceableUCharacterIterator;]Ljava/lang/StringBuffer;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;
 HSPLandroid/icu/impl/IDNA2003;->getSeparatorIndex([CII)I
 HSPLandroid/icu/impl/IDNA2003;->isLDHChar(I)Z
 HSPLandroid/icu/impl/IDNA2003;->isLabelSeparator(I)Z
@@ -8811,22 +8863,22 @@
 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;
 HSPLandroid/icu/impl/LocaleIDParser;->getCountry()Ljava/lang/String;
 HSPLandroid/icu/impl/LocaleIDParser;->getKeyComparator()Ljava/util/Comparator;
 HSPLandroid/icu/impl/LocaleIDParser;->getKeyword()Ljava/lang/String;
-HSPLandroid/icu/impl/LocaleIDParser;->getKeywordMap()Ljava/util/Map;+]Ljava/util/TreeMap;Ljava/util/TreeMap;
-HSPLandroid/icu/impl/LocaleIDParser;->getKeywordValue(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;]Ljava/util/Map;Ljava/util/Collections$EmptyMap;,Ljava/util/TreeMap;
+HSPLandroid/icu/impl/LocaleIDParser;->getKeywordMap()Ljava/util/Map;
+HSPLandroid/icu/impl/LocaleIDParser;->getKeywordValue(Ljava/lang/String;)Ljava/lang/String;+]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;
 HSPLandroid/icu/impl/LocaleIDParser;->getKeywords()Ljava/util/Iterator;
 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
@@ -8837,10 +8889,10 @@
 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+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/icu/impl/LocaleIDParser;->parseCountry()I
 HSPLandroid/icu/impl/LocaleIDParser;->parseKeywords()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;->parseLanguage()I
+HSPLandroid/icu/impl/LocaleIDParser;->parseScript()I
 HSPLandroid/icu/impl/LocaleIDParser;->parseVariant()I
 HSPLandroid/icu/impl/LocaleIDParser;->reset()V
 HSPLandroid/icu/impl/LocaleIDParser;->setKeywordValue(Ljava/lang/String;Ljava/lang/String;)V
@@ -8869,7 +8921,7 @@
 HSPLandroid/icu/impl/Normalizer2Impl;->addToStartSet(Landroid/icu/util/MutableCodePointTrie;II)V
 HSPLandroid/icu/impl/Normalizer2Impl;->composeQuickCheck(Ljava/lang/CharSequence;IIZZ)I
 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+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/icu/impl/Normalizer2Impl;->decompose(Ljava/lang/CharSequence;IILandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)I
 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
@@ -8893,17 +8945,17 @@
 HSPLandroid/icu/impl/OlsonTimeZone;->getNextTransition(JZ)Landroid/icu/util/TimeZoneTransition;
 HSPLandroid/icu/impl/OlsonTimeZone;->getOffset(JZ[I)V
 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;->hashCode()I
 HSPLandroid/icu/impl/OlsonTimeZone;->initTransitionRules()V
 HSPLandroid/icu/impl/OlsonTimeZone;->initialDstOffset()I
 HSPLandroid/icu/impl/OlsonTimeZone;->initialRawOffset()I
 HSPLandroid/icu/impl/OlsonTimeZone;->isFrozen()Z
 HSPLandroid/icu/impl/OlsonTimeZone;->loadRule(Landroid/icu/util/UResourceBundle;Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
-HSPLandroid/icu/impl/OlsonTimeZone;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/icu/impl/OlsonTimeZone;->toString()Ljava/lang/String;
 HSPLandroid/icu/impl/PatternProps;->isWhiteSpace(I)Z
 HSPLandroid/icu/impl/PatternProps;->skipWhiteSpace(Ljava/lang/CharSequence;I)I
 HSPLandroid/icu/impl/PatternTokenizer;-><init>()V
-HSPLandroid/icu/impl/PatternTokenizer;->next(Ljava/lang/StringBuffer;)I
+HSPLandroid/icu/impl/PatternTokenizer;->next(Ljava/lang/StringBuffer;)I+]Landroid/icu/text/UnicodeSet;Landroid/icu/text/UnicodeSet;
 HSPLandroid/icu/impl/PatternTokenizer;->quoteLiteral(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/impl/PatternTokenizer;->setExtraQuotingCharacters(Landroid/icu/text/UnicodeSet;)Landroid/icu/impl/PatternTokenizer;
 HSPLandroid/icu/impl/PatternTokenizer;->setPattern(Ljava/lang/String;)Landroid/icu/impl/PatternTokenizer;
@@ -8941,7 +8993,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;+]Landroid/icu/impl/CacheValue;Landroid/icu/impl/CacheValue$SoftValue;,Landroid/icu/impl/CacheValue$NullValue;]Landroid/icu/impl/SoftCache;megamorphic_types]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
+HSPLandroid/icu/impl/SoftCache;->getInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/icu/impl/CacheValue;Landroid/icu/impl/CacheValue$SoftValue;,Landroid/icu/impl/CacheValue$NullValue;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
 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;
@@ -8951,12 +9003,12 @@
 HSPLandroid/icu/impl/StaticUnicodeSets;->get(Landroid/icu/impl/StaticUnicodeSets$Key;)Landroid/icu/text/UnicodeSet;
 HSPLandroid/icu/impl/StringSegment;-><init>(Ljava/lang/String;Z)V
 HSPLandroid/icu/impl/StringSegment;->adjustOffset(I)V
-HSPLandroid/icu/impl/StringSegment;->charAt(I)C
+HSPLandroid/icu/impl/StringSegment;->charAt(I)C+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/impl/StringSegment;->codePointsEqual(IIZ)Z
-HSPLandroid/icu/impl/StringSegment;->getCodePoint()I
+HSPLandroid/icu/impl/StringSegment;->getCodePoint()I+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/impl/StringSegment;->getCommonPrefixLength(Ljava/lang/CharSequence;)I
 HSPLandroid/icu/impl/StringSegment;->getOffset()I
-HSPLandroid/icu/impl/StringSegment;->getPrefixLengthInternal(Ljava/lang/CharSequence;Z)I
+HSPLandroid/icu/impl/StringSegment;->getPrefixLengthInternal(Ljava/lang/CharSequence;Z)I+]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;
 HSPLandroid/icu/impl/StringSegment;->length()I
 HSPLandroid/icu/impl/StringSegment;->startsWith(Landroid/icu/text/UnicodeSet;)Z
 HSPLandroid/icu/impl/StringSegment;->startsWith(Ljava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;
@@ -9161,7 +9213,7 @@
 HSPLandroid/icu/impl/coll/UVector32;->addElement(I)V
 HSPLandroid/icu/impl/coll/UVector32;->ensureAppendCapacity()V
 HSPLandroid/icu/impl/coll/UVector64;-><init>()V
-HSPLandroid/icu/impl/locale/AsciiUtil;->caseIgnoreMatch(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/icu/impl/locale/AsciiUtil;->caseIgnoreMatch(Ljava/lang/String;Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/impl/locale/AsciiUtil;->isAlpha(C)Z
 HSPLandroid/icu/impl/locale/AsciiUtil;->isAlphaString(Ljava/lang/String;)Z
 HSPLandroid/icu/impl/locale/AsciiUtil;->toLower(C)C
@@ -9179,7 +9231,7 @@
 HSPLandroid/icu/impl/locale/BaseLocale$Key;->-$$Nest$fget_vart(Landroid/icu/impl/locale/BaseLocale$Key;)Ljava/lang/String;
 HSPLandroid/icu/impl/locale/BaseLocale$Key;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/icu/impl/locale/BaseLocale$Key;->equals(Ljava/lang/Object;)Z
-HSPLandroid/icu/impl/locale/BaseLocale$Key;->hashCode()I
+HSPLandroid/icu/impl/locale/BaseLocale$Key;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
 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
@@ -9193,8 +9245,17 @@
 HSPLandroid/icu/impl/locale/InternalLocaleBuilder;->getLocaleExtensions()Landroid/icu/impl/locale/LocaleExtensions;
 HSPLandroid/icu/impl/locale/InternalLocaleBuilder;->setLanguage(Ljava/lang/String;)Landroid/icu/impl/locale/InternalLocaleBuilder;
 HSPLandroid/icu/impl/locale/InternalLocaleBuilder;->setRegion(Ljava/lang/String;)Landroid/icu/impl/locale/InternalLocaleBuilder;
+HSPLandroid/icu/impl/locale/LanguageTag;-><init>()V
+HSPLandroid/icu/impl/locale/LanguageTag;->canonicalizeLanguage(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/locale/LanguageTag;->getExtensions()Ljava/util/List;
+HSPLandroid/icu/impl/locale/LanguageTag;->getLanguage()Ljava/lang/String;
+HSPLandroid/icu/impl/locale/LanguageTag;->getPrivateuse()Ljava/lang/String;
+HSPLandroid/icu/impl/locale/LanguageTag;->getRegion()Ljava/lang/String;
+HSPLandroid/icu/impl/locale/LanguageTag;->getScript()Ljava/lang/String;
+HSPLandroid/icu/impl/locale/LanguageTag;->getVariants()Ljava/util/List;
 HSPLandroid/icu/impl/locale/LanguageTag;->isLanguage(Ljava/lang/String;)Z
 HSPLandroid/icu/impl/locale/LanguageTag;->isRegion(Ljava/lang/String;)Z
+HSPLandroid/icu/impl/locale/LanguageTag;->parseLocale(Landroid/icu/impl/locale/BaseLocale;Landroid/icu/impl/locale/LocaleExtensions;)Landroid/icu/impl/locale/LanguageTag;+]Landroid/icu/impl/locale/LocaleExtensions;Landroid/icu/impl/locale/LocaleExtensions;]Landroid/icu/impl/locale/BaseLocale;Landroid/icu/impl/locale/BaseLocale;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/icu/impl/locale/StringTokenIterator;Landroid/icu/impl/locale/StringTokenIterator;
 HSPLandroid/icu/impl/locale/LocaleExtensions;->getKeys()Ljava/util/Set;
 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;
@@ -9211,20 +9272,20 @@
 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+]Ljava/lang/CharSequence;Ljava/lang/String;
-HSPLandroid/icu/impl/number/AffixUtils;->hasNext(JLjava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/lang/StringBuilder;
+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+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/icu/impl/number/AffixUtils;->nextToken(JLjava/lang/CharSequence;)J
 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+]Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;
+HSPLandroid/icu/impl/number/ConstantAffixModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I
 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
 HSPLandroid/icu/impl/number/ConstantMultiFieldModifier;->getPrefixLength()I
 HSPLandroid/icu/impl/number/CurrencySpacingEnabledModifier;->applyCurrencySpacing(Landroid/icu/impl/FormattedStringBuilder;IIIILandroid/icu/text/DecimalFormatSymbols;)I
 HSPLandroid/icu/impl/number/CurrencySpacingEnabledModifier;->applyCurrencySpacingAffix(Landroid/icu/impl/FormattedStringBuilder;IBLandroid/icu/text/DecimalFormatSymbols;)I
-HSPLandroid/icu/impl/number/CustomSymbolCurrency;->resolve(Landroid/icu/util/Currency;Landroid/icu/util/ULocale;Landroid/icu/text/DecimalFormatSymbols;)Landroid/icu/util/Currency;
+HSPLandroid/icu/impl/number/CustomSymbolCurrency;->resolve(Landroid/icu/util/Currency;Landroid/icu/util/ULocale;Landroid/icu/text/DecimalFormatSymbols;)Landroid/icu/util/Currency;+]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/util/Currency;Landroid/icu/util/Currency;
 HSPLandroid/icu/impl/number/DecimalFormatProperties;-><init>()V
 HSPLandroid/icu/impl/number/DecimalFormatProperties;->_clear()Landroid/icu/impl/number/DecimalFormatProperties;
 HSPLandroid/icu/impl/number/DecimalFormatProperties;->_copyFrom(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/DecimalFormatProperties;
@@ -9307,11 +9368,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+]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;->convertToAccurateDouble()V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->copyFrom(Landroid/icu/impl/number/DecimalQuantity;)V
-HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->fitsInLong()Z
-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;->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;->getLowerDisplayMagnitude()I
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->getMagnitude()I
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->getPluralOperand(Landroid/icu/text/PluralRules$Operand;)D
@@ -9324,20 +9385,20 @@
 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+]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;->roundToMagnitude(ILjava/math/MathContext;Z)V
 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;->setToBigDecimal(Ljava/math/BigDecimal;)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+]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;->setToLong(J)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->signum()Landroid/icu/impl/number/Modifier$Signum;
 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
 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+]Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
+HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(J)V
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(Ljava/lang/Number;)V
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(Ljava/math/BigDecimal;)V
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->compact()V
@@ -9353,9 +9414,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;+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/Grouper;->forProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/Grouper;
 HSPLandroid/icu/impl/number/Grouper;->getInstance(SSS)Landroid/icu/impl/number/Grouper;
-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;->getMinGroupingForLocale(Landroid/icu/util/ULocale;)S
 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
@@ -9377,16 +9438,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+]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;
+HSPLandroid/icu/impl/number/MutablePatternModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I
 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+]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;
+HSPLandroid/icu/impl/number/MutablePatternModifier;->needsPlurals()Z
 HSPLandroid/icu/impl/number/MutablePatternModifier;->prepareAffix(Z)V
-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;->processQuantity(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
 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
@@ -9400,53 +9461,53 @@
 HSPLandroid/icu/impl/number/PatternStringParser$ParserState;-><init>(Ljava/lang/String;)V
 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+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
+HSPLandroid/icu/impl/number/PatternStringParser;->consumeAffix(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)J
 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+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
+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+]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
+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+]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;->consumePattern(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;)V
 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+]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/PatternStringParser;->patternInfoToProperties(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;I)V
 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;
-HSPLandroid/icu/impl/number/PatternStringUtils;->propertiesToPatternString(Landroid/icu/impl/number/DecimalFormatProperties;)Ljava/lang/String;
-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
+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
+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/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;+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->forProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/AffixPatternProvider;
 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
-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/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/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;+]Landroid/icu/number/Scale;Landroid/icu/number/Scale;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/RoundingUtils;->scaleFromProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/number/Scale;
 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
 HSPLandroid/icu/impl/number/parse/AffixMatcher$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/icu/impl/number/parse/AffixMatcher;-><init>(Landroid/icu/impl/number/parse/AffixPatternMatcher;Landroid/icu/impl/number/parse/AffixPatternMatcher;I)V
-HSPLandroid/icu/impl/number/parse/AffixMatcher;->createMatchers(Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/parse/NumberParserImpl;Landroid/icu/impl/number/parse/AffixTokenMatcherFactory;Landroid/icu/impl/number/parse/IgnorablesMatcher;I)V
+HSPLandroid/icu/impl/number/parse/AffixMatcher;->createMatchers(Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/parse/NumberParserImpl;Landroid/icu/impl/number/parse/AffixTokenMatcherFactory;Landroid/icu/impl/number/parse/IgnorablesMatcher;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/number/parse/NumberParserImpl;Landroid/icu/impl/number/parse/NumberParserImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/icu/impl/number/parse/AffixMatcher;->getInstance(Landroid/icu/impl/number/parse/AffixPatternMatcher;Landroid/icu/impl/number/parse/AffixPatternMatcher;I)Landroid/icu/impl/number/parse/AffixMatcher;
 HSPLandroid/icu/impl/number/parse/AffixMatcher;->isInteresting(Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/parse/IgnorablesMatcher;I)Z
 HSPLandroid/icu/impl/number/parse/AffixMatcher;->length(Landroid/icu/impl/number/parse/AffixPatternMatcher;)I
 HSPLandroid/icu/impl/number/parse/AffixMatcher;->match(Landroid/icu/impl/StringSegment;Landroid/icu/impl/number/parse/ParsedNumber;)Z
 HSPLandroid/icu/impl/number/parse/AffixMatcher;->matched(Landroid/icu/impl/number/parse/AffixPatternMatcher;Ljava/lang/String;)Z
 HSPLandroid/icu/impl/number/parse/AffixMatcher;->postProcess(Landroid/icu/impl/number/parse/ParsedNumber;)V
-HSPLandroid/icu/impl/number/parse/AffixMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z
+HSPLandroid/icu/impl/number/parse/AffixMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z+]Landroid/icu/impl/number/parse/AffixPatternMatcher;Landroid/icu/impl/number/parse/AffixPatternMatcher;
 HSPLandroid/icu/impl/number/parse/AffixPatternMatcher;-><init>(Ljava/lang/String;)V
 HSPLandroid/icu/impl/number/parse/AffixPatternMatcher;->consumeToken(I)V
 HSPLandroid/icu/impl/number/parse/AffixPatternMatcher;->equals(Ljava/lang/Object;)Z
@@ -9454,10 +9515,10 @@
 HSPLandroid/icu/impl/number/parse/AffixPatternMatcher;->getPattern()Ljava/lang/String;
 HSPLandroid/icu/impl/number/parse/AffixTokenMatcherFactory;-><init>()V
 HSPLandroid/icu/impl/number/parse/AffixTokenMatcherFactory;->minusSign()Landroid/icu/impl/number/parse/MinusSignMatcher;
-HSPLandroid/icu/impl/number/parse/DecimalMatcher;-><init>(Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/Grouper;I)V
+HSPLandroid/icu/impl/number/parse/DecimalMatcher;-><init>(Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/Grouper;I)V+]Landroid/icu/impl/number/Grouper;Landroid/icu/impl/number/Grouper;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;
 HSPLandroid/icu/impl/number/parse/DecimalMatcher;->getInstance(Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/Grouper;I)Landroid/icu/impl/number/parse/DecimalMatcher;
 HSPLandroid/icu/impl/number/parse/DecimalMatcher;->match(Landroid/icu/impl/StringSegment;Landroid/icu/impl/number/parse/ParsedNumber;)Z
-HSPLandroid/icu/impl/number/parse/DecimalMatcher;->match(Landroid/icu/impl/StringSegment;Landroid/icu/impl/number/parse/ParsedNumber;I)Z+]Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;]Landroid/icu/impl/number/parse/ParsedNumber;Landroid/icu/impl/number/parse/ParsedNumber;]Landroid/icu/text/UnicodeSet;Landroid/icu/text/UnicodeSet;]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;
+HSPLandroid/icu/impl/number/parse/DecimalMatcher;->match(Landroid/icu/impl/StringSegment;Landroid/icu/impl/number/parse/ParsedNumber;I)Z+]Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/impl/number/parse/ParsedNumber;Landroid/icu/impl/number/parse/ParsedNumber;]Landroid/icu/text/UnicodeSet;Landroid/icu/text/UnicodeSet;]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;
 HSPLandroid/icu/impl/number/parse/DecimalMatcher;->postProcess(Landroid/icu/impl/number/parse/ParsedNumber;)V
 HSPLandroid/icu/impl/number/parse/DecimalMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z
 HSPLandroid/icu/impl/number/parse/DecimalMatcher;->validateGroup(IIZ)Z
@@ -9468,10 +9529,10 @@
 HSPLandroid/icu/impl/number/parse/NumberParserImpl;-><init>(I)V
 HSPLandroid/icu/impl/number/parse/NumberParserImpl;->addMatcher(Landroid/icu/impl/number/parse/NumberParseMatcher;)V
 HSPLandroid/icu/impl/number/parse/NumberParserImpl;->addMatchers(Ljava/util/Collection;)V
-HSPLandroid/icu/impl/number/parse/NumberParserImpl;->createParserFromProperties(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/text/DecimalFormatSymbols;Z)Landroid/icu/impl/number/parse/NumberParserImpl;
+HSPLandroid/icu/impl/number/parse/NumberParserImpl;->createParserFromProperties(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/text/DecimalFormatSymbols;Z)Landroid/icu/impl/number/parse/NumberParserImpl;+]Landroid/icu/impl/number/Grouper;Landroid/icu/impl/number/Grouper;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;]Landroid/icu/impl/number/parse/NumberParserImpl;Landroid/icu/impl/number/parse/NumberParserImpl;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
 HSPLandroid/icu/impl/number/parse/NumberParserImpl;->freeze()V
 HSPLandroid/icu/impl/number/parse/NumberParserImpl;->getParseFlags()I
-HSPLandroid/icu/impl/number/parse/NumberParserImpl;->parse(Ljava/lang/String;IZLandroid/icu/impl/number/parse/ParsedNumber;)V+]Landroid/icu/impl/number/parse/ParsedNumber;Landroid/icu/impl/number/parse/ParsedNumber;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/icu/impl/number/parse/NumberParseMatcher;megamorphic_types]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLandroid/icu/impl/number/parse/NumberParserImpl;->parse(Ljava/lang/String;IZLandroid/icu/impl/number/parse/ParsedNumber;)V+]Landroid/icu/impl/number/parse/ParsedNumber;Landroid/icu/impl/number/parse/ParsedNumber;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/icu/impl/number/parse/NumberParseMatcher;megamorphic_types]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;
 HSPLandroid/icu/impl/number/parse/NumberParserImpl;->parseGreedy(Landroid/icu/impl/StringSegment;Landroid/icu/impl/number/parse/ParsedNumber;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/icu/impl/number/parse/NumberParseMatcher;megamorphic_types]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;
 HSPLandroid/icu/impl/number/parse/ParsedNumber;-><init>()V
 HSPLandroid/icu/impl/number/parse/ParsedNumber;->clear()V
@@ -9493,9 +9554,9 @@
 HSPLandroid/icu/impl/number/parse/SeriesMatcher;-><init>()V
 HSPLandroid/icu/impl/number/parse/SeriesMatcher;->addMatcher(Landroid/icu/impl/number/parse/NumberParseMatcher;)V
 HSPLandroid/icu/impl/number/parse/SeriesMatcher;->freeze()V
-HSPLandroid/icu/impl/number/parse/SeriesMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z
+HSPLandroid/icu/impl/number/parse/SeriesMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/icu/impl/number/parse/NumberParseMatcher;Landroid/icu/impl/number/parse/MinusSignMatcher;
 HSPLandroid/icu/impl/number/parse/SymbolMatcher;->postProcess(Landroid/icu/impl/number/parse/ParsedNumber;)V
-HSPLandroid/icu/impl/number/parse/SymbolMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z
+HSPLandroid/icu/impl/number/parse/SymbolMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z+]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;
 HSPLandroid/icu/impl/number/parse/ValidationMatcher;-><init>()V
 HSPLandroid/icu/impl/number/parse/ValidationMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z
 HSPLandroid/icu/impl/number/range/StandardPluralRanges$PluralRangeSetsDataSink;-><clinit>()V
@@ -9511,11 +9572,11 @@
 HSPLandroid/icu/impl/number/range/StandardPluralRanges;->getSetForLocale(Landroid/icu/util/ULocale;)Ljava/lang/String;
 HSPLandroid/icu/impl/number/range/StandardPluralRanges;->setCapacity(I)V
 HSPLandroid/icu/lang/UCharacter;->codePointAt(Ljava/lang/CharSequence;I)I
-HSPLandroid/icu/lang/UCharacter;->digit(I)I
-HSPLandroid/icu/lang/UCharacter;->foldCase(II)I
+HSPLandroid/icu/lang/UCharacter;->digit(I)I+]Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;
+HSPLandroid/icu/lang/UCharacter;->foldCase(II)I+]Landroid/icu/impl/UCaseProps;Landroid/icu/impl/UCaseProps;
 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
@@ -9528,13 +9589,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+]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;->computeCompiled()Z
 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;+]Landroid/icu/number/LocalizedNumberFormatter;Landroid/icu/number/LocalizedNumberFormatter;
+HSPLandroid/icu/number/LocalizedNumberFormatter;->formatImpl(Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;)Landroid/icu/impl/number/MicroProps;
 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;
@@ -9546,25 +9607,25 @@
 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;+]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;
 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;+]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;->preProcessUnsafe(Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
 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+]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;
+HSPLandroid/icu/number/NumberFormatterImpl;->writeAffixes(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/FormattedStringBuilder;II)I
 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+]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/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
 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;->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;+]Landroid/icu/number/UnlocalizedNumberFormatter;Landroid/icu/number/UnlocalizedNumberFormatter;
+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/Precision$FractionRounderImpl;-><init>(II)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;->apply(Landroid/icu/impl/number/DecimalQuantity;)V
 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
@@ -9575,14 +9636,14 @@
 HSPLandroid/icu/number/Precision;->constructFromCurrency(Landroid/icu/number/CurrencyPrecision;Landroid/icu/util/Currency;)Landroid/icu/number/Precision;
 HSPLandroid/icu/number/Precision;->getDisplayMagnitudeFraction(I)I
 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;->setResolvedMinFraction(Landroid/icu/impl/number/DecimalQuantity;I)V
 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;+]Ljava/math/MathContext;Ljava/math/MathContext;
+HSPLandroid/icu/number/Precision;->withMode(Ljava/math/MathContext;)Landroid/icu/number/Precision;
 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;+]Landroid/icu/number/UnlocalizedNumberFormatter;Landroid/icu/number/UnlocalizedNumberFormatter;
+HSPLandroid/icu/number/UnlocalizedNumberFormatter;->create(ILjava/lang/Object;)Landroid/icu/number/NumberFormatterSettings;
 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;
@@ -9594,13 +9655,13 @@
 HSPLandroid/icu/text/Bidi;->DirPropFlag(B)I
 HSPLandroid/icu/text/Bidi;->GetParaLevelAt(I)B
 HSPLandroid/icu/text/Bidi;->directionFromFlags()B
-HSPLandroid/icu/text/Bidi;->getCustomizedClass(I)I+]Landroid/icu/impl/UBiDiProps;Landroid/icu/impl/UBiDiProps;
+HSPLandroid/icu/text/Bidi;->getCustomizedClass(I)I
 HSPLandroid/icu/text/Bidi;->getDirProps()V+]Landroid/icu/text/Bidi;Landroid/icu/text/Bidi;
 HSPLandroid/icu/text/Bidi;->getDirPropsMemory(I)V
 HSPLandroid/icu/text/Bidi;->getLevelsMemory(I)V
 HSPLandroid/icu/text/Bidi;->getMemory(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Class;ZI)Ljava/lang/Object;
 HSPLandroid/icu/text/Bidi;->resolveExplicitLevels()B
-HSPLandroid/icu/text/Bidi;->setPara([CB[B)V+]Landroid/icu/text/Bidi;Landroid/icu/text/Bidi;
+HSPLandroid/icu/text/Bidi;->setPara([CB[B)V
 HSPLandroid/icu/text/Bidi;->verifyRange(III)V
 HSPLandroid/icu/text/BreakIterator$BreakIteratorCache;-><init>(Landroid/icu/util/ULocale;Landroid/icu/text/BreakIterator;)V
 HSPLandroid/icu/text/BreakIterator$BreakIteratorCache;->createBreakInstance()Landroid/icu/text/BreakIterator;
@@ -9632,7 +9693,7 @@
 HSPLandroid/icu/text/CollatorServiceShim;-><init>()V
 HSPLandroid/icu/text/CollatorServiceShim;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/Collator;
 HSPLandroid/icu/text/CollatorServiceShim;->makeInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/Collator;
-HSPLandroid/icu/text/ConstrainedFieldPosition;-><init>()V+]Landroid/icu/text/ConstrainedFieldPosition;Landroid/icu/text/ConstrainedFieldPosition;
+HSPLandroid/icu/text/ConstrainedFieldPosition;-><init>()V
 HSPLandroid/icu/text/ConstrainedFieldPosition;->constrainField(Ljava/text/Format$Field;)V
 HSPLandroid/icu/text/ConstrainedFieldPosition;->getField()Ljava/text/Format$Field;
 HSPLandroid/icu/text/ConstrainedFieldPosition;->getFieldValue()Ljava/lang/Object;
@@ -9684,13 +9745,13 @@
 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;+]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;->getExtendedInstance(Landroid/icu/util/ULocale;Ljava/lang/String;)Landroid/icu/text/DateFormatSymbols$AospExtendedDateFormatSymbols;
 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+]Landroid/icu/text/DateFormatSymbols;Landroid/icu/text/DateFormatSymbols;
+HSPLandroid/icu/text/DateFormatSymbols;->initializeData(Landroid/icu/util/ULocale;Ljava/lang/String;)V
 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
@@ -9698,7 +9759,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;+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;]Landroid/icu/text/SimpleDateFormat;Landroid/icu/text/SimpleDateFormat;
+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;->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;
@@ -9738,6 +9799,7 @@
 HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->getDistance(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;ILandroid/icu/text/DateTimePatternGenerator$DistanceInfo;)I
 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;->toCanonicalString()Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator$DisplayWidth;->cldrKey()Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;-><init>()V
 HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;->addExtra(I)V
@@ -9763,6 +9825,7 @@
 HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->isFieldEmpty(I)Z
 HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->populate(ICI)V
 HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->populate(ILjava/lang/String;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->toCanonicalString(Z)Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->toString(Z)Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator$VariableField;-><init>(Ljava/lang/String;Z)V
 HSPLandroid/icu/text/DateTimePatternGenerator$VariableField;->getCanonicalIndex()I
@@ -9794,8 +9857,10 @@
 HSPLandroid/icu/text/DateTimePatternGenerator;->getBestRaw(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;ILandroid/icu/text/DateTimePatternGenerator$DistanceInfo;Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;)Landroid/icu/text/DateTimePatternGenerator$PatternWithMatcher;
 HSPLandroid/icu/text/DateTimePatternGenerator;->getCLDRFieldAndWidthNumber(Landroid/icu/impl/UResource$Key;)I
 HSPLandroid/icu/text/DateTimePatternGenerator;->getCalendarTypeToUse(Landroid/icu/util/ULocale;)Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getCanonicalChar(IC)C
 HSPLandroid/icu/text/DateTimePatternGenerator;->getCanonicalIndex(Ljava/lang/String;Z)I
 HSPLandroid/icu/text/DateTimePatternGenerator;->getDateTimeFormat()Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getDateTimeFormat(I)Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator;->getFieldDisplayName(ILandroid/icu/text/DateTimePatternGenerator$DisplayWidth;)Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator;->getFilteredPattern(Landroid/icu/text/DateTimePatternGenerator$FormatParser;Ljava/util/BitSet;)Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator;->getFrozenInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/DateTimePatternGenerator;
@@ -9817,9 +9882,9 @@
 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+]Ljava/text/FieldPosition;Ljava/text/DontCareFieldPosition;]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
+HSPLandroid/icu/text/DecimalFormat;->fieldPositionHelper(Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;Ljava/text/FieldPosition;I)V
 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;+]Landroid/icu/number/LocalizedNumberFormatter;Landroid/icu/number/LocalizedNumberFormatter;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DecimalFormat;->format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
 HSPLandroid/icu/text/DecimalFormat;->getDecimalFormatSymbols()Landroid/icu/text/DecimalFormatSymbols;
 HSPLandroid/icu/text/DecimalFormat;->getMaximumFractionDigits()I
 HSPLandroid/icu/text/DecimalFormat;->getMaximumIntegerDigits()I
@@ -9832,15 +9897,15 @@
 HSPLandroid/icu/text/DecimalFormat;->getPositiveSuffix()Ljava/lang/String;
 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;->parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;+]Ljava/lang/String;Ljava/lang/String;]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;->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+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
+HSPLandroid/icu/text/DecimalFormat;->setMaximumIntegerDigits(I)V
 HSPLandroid/icu/text/DecimalFormat;->setMinimumFractionDigits(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;->setMinimumIntegerDigits(I)V
 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
@@ -9887,7 +9952,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+]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;->initialize(Landroid/icu/util/ULocale;Landroid/icu/text/NumberingSystem;)V
 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
@@ -9919,7 +9984,7 @@
 HSPLandroid/icu/text/DecimalFormatSymbols;->setPercentString(Ljava/lang/String;)V
 HSPLandroid/icu/text/DecimalFormatSymbols;->setPlusSign(C)V
 HSPLandroid/icu/text/DecimalFormatSymbols;->setPlusSignString(Ljava/lang/String;)V
-HSPLandroid/icu/text/DecimalFormatSymbols;->setZeroDigit(C)V+][C[C][Ljava/lang/String;[Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->setZeroDigit(C)V
 HSPLandroid/icu/text/DisplayContext;->type()Landroid/icu/text/DisplayContext$Type;
 HSPLandroid/icu/text/Edits$Iterator;->next(Z)Z
 HSPLandroid/icu/text/Edits;-><init>()V
@@ -9947,7 +10012,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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
+HSPLandroid/icu/text/NumberFormat;->getPatternForStyleAndNumberingSystem(Landroid/icu/util/ULocale;Ljava/lang/String;I)Ljava/lang/String;
 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;
@@ -9955,7 +10020,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;+]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;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberingSystem;
 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
@@ -10035,7 +10100,7 @@
 HSPLandroid/icu/text/ReplaceableString;-><init>(Ljava/lang/String;)V
 HSPLandroid/icu/text/ReplaceableString;->charAt(I)C
 HSPLandroid/icu/text/ReplaceableString;->getChars(II[CI)V
-HSPLandroid/icu/text/ReplaceableString;->length()I+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
+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;->addFollowing(IIZ)V
@@ -10064,7 +10129,7 @@
 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+]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;->handleNext()I
 HSPLandroid/icu/text/RuleBasedBreakIterator;->handleSafePrevious(I)I
 HSPLandroid/icu/text/RuleBasedBreakIterator;->isBoundary(I)Z
 HSPLandroid/icu/text/RuleBasedBreakIterator;->next()I
@@ -10210,7 +10275,7 @@
 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+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
+HSPLandroid/icu/util/Calendar;->complete()V
 HSPLandroid/icu/util/Calendar;->computeFields()V
 HSPLandroid/icu/util/Calendar;->computeGregorianAndDOWFields(I)V
 HSPLandroid/icu/util/Calendar;->computeGregorianFields(I)V
@@ -10220,7 +10285,7 @@
 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+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
+HSPLandroid/icu/util/Calendar;->get(I)I
 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;
@@ -10295,7 +10360,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+]Landroid/icu/util/CodePointTrie$Fast8;Landroid/icu/util/CodePointTrie$Fast8;
+HSPLandroid/icu/util/CodePointTrie$Fast8;->get(I)I
 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;
@@ -10469,18 +10534,19 @@
 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
-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;->base()Landroid/icu/impl/locale/BaseLocale;
 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;->equals(Ljava/lang/Object;)Z
-HSPLandroid/icu/util/ULocale;->forLocale(Ljava/util/Locale;)Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/ULocale;->equals(Ljava/lang/Object;)Z+]Ljava/lang/String;Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->extensions()Landroid/icu/impl/locale/LocaleExtensions;+]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;]Landroid/icu/impl/locale/InternalLocaleBuilder;Landroid/icu/impl/locale/InternalLocaleBuilder;
+HSPLandroid/icu/util/ULocale;->forLocale(Ljava/util/Locale;)Landroid/icu/util/ULocale;+]Landroid/icu/impl/SoftCache;Landroid/icu/util/ULocale$2;
 HSPLandroid/icu/util/ULocale;->getBaseName()Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->getBaseName(Ljava/lang/String;)Ljava/lang/String;+]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;
+HSPLandroid/icu/util/ULocale;->getBaseName(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->getCountry()Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->getDefault()Landroid/icu/util/ULocale;+]Ljava/util/Locale;Ljava/util/Locale;
+HSPLandroid/icu/util/ULocale;->getDefault()Landroid/icu/util/ULocale;
 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;
@@ -10493,7 +10559,7 @@
 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;)Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->getShortestSubtagLength(Ljava/lang/String;)I
+HSPLandroid/icu/util/ULocale;->getShortestSubtagLength(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->getVariant()Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->getVariant(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->hashCode()I
@@ -10506,21 +10572,22 @@
 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;
+HSPLandroid/icu/util/ULocale;->toLanguageTag()Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/locale/BaseLocale;Landroid/icu/impl/locale/BaseLocale;]Landroid/icu/impl/locale/LanguageTag;Landroid/icu/impl/locale/LanguageTag;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/icu/util/ULocale;->toLocale()Ljava/util/Locale;
 HSPLandroid/icu/util/ULocale;->toString()Ljava/lang/String;
 HSPLandroid/icu/util/UResourceBundle;-><init>()V
 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;+]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/util/UResourceBundle;
 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;+]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;
+HSPLandroid/icu/util/UResourceBundle;->getRootType(Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/util/UResourceBundle$RootType;
 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;+]Landroid/icu/util/UResourceBundle$RootType;Landroid/icu/util/UResourceBundle$RootType;
+HSPLandroid/icu/util/UResourceBundle;->instantiateBundle(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Landroid/icu/util/UResourceBundle;
 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
@@ -10661,7 +10728,7 @@
 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;
-HSPLandroid/media/AudioAttributes$Builder;->build()Landroid/media/AudioAttributes;
+HSPLandroid/media/AudioAttributes$Builder;->build()Landroid/media/AudioAttributes;+]Ljava/util/HashSet;Ljava/util/HashSet;
 HSPLandroid/media/AudioAttributes$Builder;->replaceFlags(I)Landroid/media/AudioAttributes$Builder;
 HSPLandroid/media/AudioAttributes$Builder;->setAllowedCapturePolicy(I)Landroid/media/AudioAttributes$Builder;
 HSPLandroid/media/AudioAttributes$Builder;->setCapturePreset(I)Landroid/media/AudioAttributes$Builder;
@@ -10684,6 +10751,7 @@
 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;Landroid/media/AudioAttributes-IA;)V
 HSPLandroid/media/AudioAttributes;->areHapticChannelsMuted()Z
 HSPLandroid/media/AudioAttributes;->equals(Ljava/lang/Object;)Z
 HSPLandroid/media/AudioAttributes;->getAllFlags()I
@@ -10727,7 +10795,7 @@
 HSPLandroid/media/AudioFormat;->isEncodingLinearPcm(I)Z
 HSPLandroid/media/AudioFormat;->isPublicEncoding(I)Z
 HSPLandroid/media/AudioHandle;-><init>(I)V
-HSPLandroid/media/AudioHandle;->equals(Ljava/lang/Object;)Z
+HSPLandroid/media/AudioHandle;->equals(Ljava/lang/Object;)Z+]Landroid/media/AudioHandle;Landroid/media/AudioHandle;
 HSPLandroid/media/AudioHandle;->id()I
 HSPLandroid/media/AudioManager$1;-><init>(Landroid/media/AudioManager;)V
 HSPLandroid/media/AudioManager$2;-><init>(Landroid/media/AudioManager;)V
@@ -10806,7 +10874,7 @@
 HSPLandroid/media/AudioManager;->setParameters(Ljava/lang/String;)V
 HSPLandroid/media/AudioManager;->unregisterAudioFocusRequest(Landroid/media/AudioManager$OnAudioFocusChangeListener;)V
 HSPLandroid/media/AudioManager;->updateAudioPortCache(Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)I
-HSPLandroid/media/AudioManager;->updatePortConfig(Landroid/media/AudioPortConfig;Ljava/util/ArrayList;)Landroid/media/AudioPortConfig;
+HSPLandroid/media/AudioManager;->updatePortConfig(Landroid/media/AudioPortConfig;Ljava/util/ArrayList;)Landroid/media/AudioPortConfig;+]Landroid/media/AudioPortConfig;Landroid/media/AudioPortConfig;]Landroid/media/AudioHandle;Landroid/media/AudioHandle;]Landroid/media/AudioPort;Landroid/media/AudioMixPort;,Landroid/media/AudioDevicePort;,Landroid/media/AudioPort;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/media/AudioMixPort;-><init>(Landroid/media/AudioHandle;IILjava/lang/String;Ljava/util/List;[Landroid/media/AudioGain;)V
 HSPLandroid/media/AudioMixPort;-><init>(Landroid/media/AudioHandle;IILjava/lang/String;[I[I[I[I[Landroid/media/AudioGain;)V
 HSPLandroid/media/AudioMixPort;->buildConfig(IIILandroid/media/AudioGainConfig;)Landroid/media/AudioMixPortConfig;
@@ -10819,7 +10887,7 @@
 HSPLandroid/media/AudioPlaybackConfiguration;->getAudioAttributes()Landroid/media/AudioAttributes;
 HSPLandroid/media/AudioPlaybackConfiguration;->isActive()Z
 HSPLandroid/media/AudioPort$$ExternalSyntheticLambda0;->applyAsInt(Ljava/lang/Object;)I
-HSPLandroid/media/AudioPort;-><init>(Landroid/media/AudioHandle;ILjava/lang/String;Ljava/util/List;[Landroid/media/AudioGain;Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/stream/Stream;Ljava/util/stream/IntPipeline$4;,Ljava/util/stream/ReferencePipeline$Head;]Ljava/util/stream/IntStream;Ljava/util/stream/IntPipeline$Head;,Ljava/util/stream/ReferencePipeline$4;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/media/AudioProfile;Landroid/media/AudioProfile;]Ljava/util/Set;Ljava/util/HashSet;
+HSPLandroid/media/AudioPort;-><init>(Landroid/media/AudioHandle;ILjava/lang/String;Ljava/util/List;[Landroid/media/AudioGain;Ljava/util/List;)V
 HSPLandroid/media/AudioPort;-><init>(Landroid/media/AudioHandle;ILjava/lang/String;[I[I[I[I[Landroid/media/AudioGain;)V
 HSPLandroid/media/AudioPort;->handle()Landroid/media/AudioHandle;
 HSPLandroid/media/AudioPort;->id()I
@@ -10879,6 +10947,7 @@
 HSPLandroid/media/AudioTrack;->stop()V
 HSPLandroid/media/AudioTrack;->testDisableNativeRoutingCallbacksLocked()V
 HSPLandroid/media/AudioTrack;->tryToDisableNativeRoutingCallback()V
+HSPLandroid/media/AudioTrack;->write(Ljava/nio/ByteBuffer;II)I+]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;
 HSPLandroid/media/CallbackUtil$LazyListenerManager;-><init>()V
 HSPLandroid/media/IAudioFocusDispatcher$Stub;-><init>()V
 HSPLandroid/media/IAudioFocusDispatcher$Stub;->asBinder()Landroid/os/IBinder;
@@ -10935,13 +11004,13 @@
 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+]Landroid/media/MediaCodec$BufferMap$CodecBuffer;Landroid/media/MediaCodec$BufferMap$CodecBuffer;
+HSPLandroid/media/MediaCodec$BufferMap$CodecBuffer;->setByteBuffer(Ljava/nio/ByteBuffer;)V
 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+]Landroid/media/MediaCodec$BufferMap$CodecBuffer;Landroid/media/MediaCodec$BufferMap$CodecBuffer;]Ljava/util/Map;Ljava/util/HashMap;
-HSPLandroid/media/MediaCodec$BufferMap;->remove(I)V+]Landroid/media/MediaCodec$BufferMap$CodecBuffer;Landroid/media/MediaCodec$BufferMap$CodecBuffer;]Ljava/util/Map;Ljava/util/HashMap;
-HSPLandroid/media/MediaCodec$CryptoInfo$Pattern;-><init>(II)V+]Landroid/media/MediaCodec$CryptoInfo$Pattern;Landroid/media/MediaCodec$CryptoInfo$Pattern;
+HSPLandroid/media/MediaCodec$BufferMap;->put(ILjava/nio/ByteBuffer;)V
+HSPLandroid/media/MediaCodec$BufferMap;->remove(I)V
+HSPLandroid/media/MediaCodec$CryptoInfo$Pattern;-><init>(II)V
 HSPLandroid/media/MediaCodec$CryptoInfo$Pattern;->set(II)V
 HSPLandroid/media/MediaCodec$CryptoInfo;-><init>()V
 HSPLandroid/media/MediaCodec$EventHandler;-><init>(Landroid/media/MediaCodec;Landroid/media/MediaCodec;Landroid/os/Looper;)V
@@ -10952,18 +11021,18 @@
 HSPLandroid/media/MediaCodec;->configure(Landroid/media/MediaFormat;Landroid/view/Surface;Landroid/media/MediaCrypto;Landroid/os/IHwBinder;I)V
 HSPLandroid/media/MediaCodec;->createByCodecName(Ljava/lang/String;)Landroid/media/MediaCodec;
 HSPLandroid/media/MediaCodec;->dequeueInputBuffer(J)I
-HSPLandroid/media/MediaCodec;->dequeueOutputBuffer(Landroid/media/MediaCodec$BufferInfo;J)I+]Landroid/media/MediaCodec$BufferInfo;Landroid/media/MediaCodec$BufferInfo;]Ljava/util/Map;Ljava/util/HashMap;
+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;+]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;->getInputBuffer(I)Ljava/nio/ByteBuffer;
+HSPLandroid/media/MediaCodec;->getOutputBuffer(I)Ljava/nio/ByteBuffer;
 HSPLandroid/media/MediaCodec;->getOutputFormat()Landroid/media/MediaFormat;
-HSPLandroid/media/MediaCodec;->lockAndGetContext()J+]Ljava/util/concurrent/locks/Lock;Ljava/util/concurrent/locks/ReentrantLock;
-HSPLandroid/media/MediaCodec;->queueInputBuffer(IIIJI)V+]Landroid/media/MediaCodec$BufferMap;Landroid/media/MediaCodec$BufferMap;
+HSPLandroid/media/MediaCodec;->lockAndGetContext()J
+HSPLandroid/media/MediaCodec;->queueInputBuffer(IIIJI)V
 HSPLandroid/media/MediaCodec;->release()V
 HSPLandroid/media/MediaCodec;->releaseOutputBuffer(IZ)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;->releaseOutputBufferInternal(IZZJ)V
+HSPLandroid/media/MediaCodec;->setAndUnlockContext(J)V
 HSPLandroid/media/MediaCodec;->start()V
 HSPLandroid/media/MediaCodec;->stop()V
 HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->applyLevelLimits()V
@@ -11013,6 +11082,7 @@
 HSPLandroid/media/MediaCodecInfo;->getCapabilitiesForType(Ljava/lang/String;)Landroid/media/MediaCodecInfo$CodecCapabilities;
 HSPLandroid/media/MediaCodecInfo;->getName()Ljava/lang/String;
 HSPLandroid/media/MediaCodecInfo;->getSupportedTypes()[Ljava/lang/String;
+HSPLandroid/media/MediaCodecInfo;->isAlias()Z
 HSPLandroid/media/MediaCodecInfo;->isEncoder()Z
 HSPLandroid/media/MediaCodecInfo;->isHardwareAccelerated()Z
 HSPLandroid/media/MediaCodecInfo;->isSoftwareOnly()Z
@@ -11235,6 +11305,7 @@
 HSPLandroid/media/MediaRouter;->typesToString(I)Ljava/lang/String;
 HSPLandroid/media/MediaRouter;->updateWifiDisplayStatus(Landroid/hardware/display/WifiDisplayStatus;)V
 HSPLandroid/media/MediaServiceManager$ServiceRegisterer;-><init>(Ljava/lang/String;)V
+HSPLandroid/media/MediaServiceManager$ServiceRegisterer;-><init>(Ljava/lang/String;Z)V
 HSPLandroid/media/MediaServiceManager$ServiceRegisterer;->get()Landroid/os/IBinder;
 HSPLandroid/media/MediaServiceManager;-><init>()V
 HSPLandroid/media/MediaServiceManager;->getMediaCommunicationServiceRegisterer()Landroid/media/MediaServiceManager$ServiceRegisterer;
@@ -11414,8 +11485,11 @@
 HSPLandroid/media/session/MediaSession;->setPlaybackState(Landroid/media/session/PlaybackState;)V
 HSPLandroid/media/session/MediaSession;->setPlaybackToLocal(Landroid/media/AudioAttributes;)V
 HSPLandroid/media/session/MediaSessionManager$OnMediaKeyEventDispatchedListenerStub;-><init>(Landroid/media/session/MediaSessionManager;)V
+HSPLandroid/media/session/MediaSessionManager$OnMediaKeyEventDispatchedListenerStub;-><init>(Landroid/media/session/MediaSessionManager;Landroid/media/session/MediaSessionManager$OnMediaKeyEventDispatchedListenerStub-IA;)V
 HSPLandroid/media/session/MediaSessionManager$OnMediaKeyEventSessionChangedListenerStub;-><init>(Landroid/media/session/MediaSessionManager;)V
+HSPLandroid/media/session/MediaSessionManager$OnMediaKeyEventSessionChangedListenerStub;-><init>(Landroid/media/session/MediaSessionManager;Landroid/media/session/MediaSessionManager$OnMediaKeyEventSessionChangedListenerStub-IA;)V
 HSPLandroid/media/session/MediaSessionManager$RemoteSessionCallbackStub;-><init>(Landroid/media/session/MediaSessionManager;)V
+HSPLandroid/media/session/MediaSessionManager$RemoteSessionCallbackStub;-><init>(Landroid/media/session/MediaSessionManager;Landroid/media/session/MediaSessionManager$RemoteSessionCallbackStub-IA;)V
 HSPLandroid/media/session/MediaSessionManager$RemoteUserInfo;-><init>(Ljava/lang/String;II)V
 HSPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper$1$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper$1;-><init>(Landroid/media/session/MediaSessionManager$SessionsChangedWrapper;)V
@@ -11567,13 +11641,12 @@
 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$Builder;-><init>()V
 HSPLandroid/net/Uri$Builder;->appendEncodedPath(Ljava/lang/String;)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/String;Ljava/lang/String;]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;
@@ -11589,24 +11662,25 @@
 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+]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;->appendSspTo(Ljava/lang/StringBuilder;)V
 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;->generatePath(Landroid/net/Uri$PathPart;)Landroid/net/Uri$PathPart;+]Landroid/net/Uri$Part;Landroid/net/Uri$Part$EmptyPart;,Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$HierarchicalUri;->getAuthority()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->getEncodedAuthority()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->getEncodedFragment()Ljava/lang/String;
 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;+]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;
-HSPLandroid/net/Uri$HierarchicalUri;->getQuery()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->getPathSegments()Ljava/util/List;
+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;+]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;
+HSPLandroid/net/Uri$HierarchicalUri;->makeUriString()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri;+]Ljava/lang/String;Ljava/lang/String;]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;-><init>(Ljava/lang/String;Landroid/net/Uri$Part;Landroid/net/Uri$Part;Landroid/net/Uri$OpaqueUri-IA;)V
 HSPLandroid/net/Uri$OpaqueUri;->getEncodedSchemeSpecificPart()Ljava/lang/String;
@@ -11622,18 +11696,15 @@
 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$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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$PathPart;->appendEncodedSegment(Landroid/net/Uri$PathPart;Ljava/lang/String;)Landroid/net/Uri$PathPart;+]Ljava/lang/String;Ljava/lang/String;]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;+]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;
-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/String;
@@ -11642,9 +11713,9 @@
 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;->findFragmentSeparator()I
-HSPLandroid/net/Uri$StringUri;->findSchemeSeparator()I
+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+]Ljava/lang/String;Ljava/lang/String;
+HSPLandroid/net/Uri$StringUri;->findSchemeSeparator()I+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->getAuthority()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->getAuthorityPart()Landroid/net/Uri$Part;
 HSPLandroid/net/Uri$StringUri;->getEncodedAuthority()Ljava/lang/String;
@@ -11660,16 +11731,16 @@
 HSPLandroid/net/Uri$StringUri;->getQueryPart()Landroid/net/Uri$Part;
 HSPLandroid/net/Uri$StringUri;->getScheme()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->getSchemeSpecificPart()Ljava/lang/String;
-HSPLandroid/net/Uri$StringUri;->isHierarchical()Z
+HSPLandroid/net/Uri$StringUri;->isHierarchical()Z+]Ljava/lang/String;Ljava/lang/String;
 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;+]Ljava/lang/String;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;->parseQuery()Ljava/lang/String;+]Ljava/lang/String;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
@@ -11685,19 +11756,19 @@
 HSPLandroid/net/Uri;->getBooleanQueryParameter(Ljava/lang/String;Z)Z
 HSPLandroid/net/Uri;->getQueryParameter(Ljava/lang/String;)Ljava/lang/String;
 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$HierarchicalUri;,Landroid/net/Uri$StringUri;
 HSPLandroid/net/Uri;->isAbsolute()Z
-HSPLandroid/net/Uri;->isAllowed(CLjava/lang/String;)Z
+HSPLandroid/net/Uri;->isAllowed(CLjava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
 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;->toSafeString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;,Landroid/net/Uri$HierarchicalUri;
 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/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/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
-HSPLandroid/net/UriCodec;->getNextCharacter(Ljava/lang/String;IILjava/lang/String;)C
+HSPLandroid/net/UriCodec;->appendDecoded(Ljava/lang/StringBuilder;Ljava/lang/String;ZLjava/nio/charset/Charset;Z)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/net/UriCodec;->decode(Ljava/lang/String;ZLjava/nio/charset/Charset;Z)Ljava/lang/String;
+HSPLandroid/net/UriCodec;->flushDecodingByteAccumulator(Ljava/lang/StringBuilder;Ljava/nio/charset/CharsetDecoder;Ljava/nio/ByteBuffer;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/net/UriCodec;->getNextCharacter(Ljava/lang/String;IILjava/lang/String;)C+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/net/UriCodec;->hexCharToValue(C)I
 HSPLandroid/net/WebAddress;-><init>(Ljava/lang/String;)V
 HSPLandroid/net/WebAddress;->toString()Ljava/lang/String;
@@ -11780,13 +11851,13 @@
 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;
+HSPLandroid/os/BaseBundle;-><init>(Landroid/os/BaseBundle;Z)V
 HSPLandroid/os/BaseBundle;-><init>(Landroid/os/Parcel;I)V
-HSPLandroid/os/BaseBundle;-><init>(Ljava/lang/ClassLoader;I)V+]Ljava/lang/Object;Landroid/os/PersistableBundle;,Landroid/os/Bundle;]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/os/BaseBundle;-><init>(Ljava/lang/ClassLoader;I)V+]Ljava/lang/Object;Landroid/os/Bundle;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/os/BaseBundle;->clear()V
-HSPLandroid/os/BaseBundle;->containsKey(Ljava/lang/String;)Z
+HSPLandroid/os/BaseBundle;->containsKey(Ljava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->deepCopyValue(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/os/BaseBundle;->get(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/os/BaseBundle;->get(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->get(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
 HSPLandroid/os/BaseBundle;->getArrayList(Ljava/lang/String;Ljava/lang/Class;)Ljava/util/ArrayList;
 HSPLandroid/os/BaseBundle;->getBoolean(Ljava/lang/String;)Z
@@ -11801,24 +11872,24 @@
 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;->getLongArray(Ljava/lang/String;)[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+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->getSerializable(Ljava/lang/String;)Ljava/io/Serializable;
 HSPLandroid/os/BaseBundle;->getSerializable(Ljava/lang/String;Ljava/lang/Class;)Ljava/io/Serializable;
-HSPLandroid/os/BaseBundle;->getString(Ljava/lang/String;)Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->getString(Ljava/lang/String;)Ljava/lang/String;
 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;
-HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
-HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;
-HSPLandroid/os/BaseBundle;->getValueAt(ILjava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;
-HSPLandroid/os/BaseBundle;->initializeFromParcelLocked(Landroid/os/Parcel;ZZ)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/os/BaseBundle;->isEmpty()Z
+HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/BaseBundle;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/Bundle;
+HSPLandroid/os/BaseBundle;->getValueAt(ILjava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/os/BaseBundle;->initializeFromParcelLocked(Landroid/os/Parcel;ZZ)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+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;
 HSPLandroid/os/BaseBundle;->putAll(Landroid/os/PersistableBundle;)V
 HSPLandroid/os/BaseBundle;->putAll(Landroid/util/ArrayMap;)V
 HSPLandroid/os/BaseBundle;->putBoolean(Ljava/lang/String;Z)V
@@ -11826,7 +11897,7 @@
 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;->putDouble(Ljava/lang/String;D)V
+HSPLandroid/os/BaseBundle;->putDouble(Ljava/lang/String;D)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->putFloat(Ljava/lang/String;F)V
 HSPLandroid/os/BaseBundle;->putInt(Ljava/lang/String;I)V
 HSPLandroid/os/BaseBundle;->putIntArray(Ljava/lang/String;[I)V
@@ -11838,14 +11909,14 @@
 HSPLandroid/os/BaseBundle;->putStringArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
 HSPLandroid/os/BaseBundle;->readFromParcelInner(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
+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;->size()I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->unparcel()V+]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->unparcel(Z)V
-HSPLandroid/os/BaseBundle;->unwrapLazyValueFromMapLocked(ILjava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;
+HSPLandroid/os/BaseBundle;->unwrapLazyValueFromMapLocked(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/ref/WeakReference;Ljava/lang/ref/WeakReference;
 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
@@ -11883,7 +11954,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+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/os/Binder;-><init>(Ljava/lang/String;)V
 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
@@ -11898,7 +11969,7 @@
 HSPLandroid/os/Binder;->getMaxTransactionId()I
 HSPLandroid/os/Binder;->getSimpleDescriptor()Ljava/lang/String;
 HSPLandroid/os/Binder;->getTransactionName(I)Ljava/lang/String;
-HSPLandroid/os/Binder;->getTransactionTraceName(I)Ljava/lang/String;+]Landroid/os/Binder;Landroid/app/job/JobServiceEngine$JobInterface;,Landroid/database/ContentObserver$Transport;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/util/concurrent/atomic/AtomicReferenceArray;Ljava/util/concurrent/atomic/AtomicReferenceArray;
+HSPLandroid/os/Binder;->getTransactionTraceName(I)Ljava/lang/String;+]Landroid/os/Binder;Landroid/app/ActivityThread$ApplicationThread;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/util/concurrent/atomic/AtomicReferenceArray;Ljava/util/concurrent/atomic/AtomicReferenceArray;
 HSPLandroid/os/Binder;->isBinderAlive()Z
 HSPLandroid/os/Binder;->isProxy(Landroid/os/IInterface;)Z
 HSPLandroid/os/Binder;->isStackTrackingEnabled()Z
@@ -11914,12 +11985,12 @@
 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;
 HSPLandroid/os/BinderProxy$ProxyMap;->hash(J)I
 HSPLandroid/os/BinderProxy$ProxyMap;->remove(II)V
-HSPLandroid/os/BinderProxy$ProxyMap;->set(JLandroid/os/BinderProxy;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/os/BinderProxy$ProxyMap;->set(JLandroid/os/BinderProxy;)V
 HSPLandroid/os/BinderProxy;-><init>(J)V
 HSPLandroid/os/BinderProxy;->getInstance(JJ)Landroid/os/BinderProxy;
 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
+HSPLandroid/os/BinderProxy;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/os/BinderProxy;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/BluetoothServiceManager$ServiceRegisterer;-><init>(Ljava/lang/String;)V
 HSPLandroid/os/BluetoothServiceManager$ServiceRegisterer;->get()Landroid/os/IBinder;
 HSPLandroid/os/BluetoothServiceManager;-><init>()V
@@ -11945,7 +12016,7 @@
 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
@@ -11954,7 +12025,9 @@
 HSPLandroid/os/Bundle;->getParcelable(Ljava/lang/String;)Landroid/os/Parcelable;
 HSPLandroid/os/Bundle;->getParcelable(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
 HSPLandroid/os/Bundle;->getParcelableArray(Ljava/lang/String;)[Landroid/os/Parcelable;
+HSPLandroid/os/Bundle;->getParcelableArray(Ljava/lang/String;Ljava/lang/Class;)[Ljava/lang/Object;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->getParcelableArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
+HSPLandroid/os/Bundle;->getParcelableArrayList(Ljava/lang/String;Ljava/lang/Class;)Ljava/util/ArrayList;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->getSerializable(Ljava/lang/String;)Ljava/io/Serializable;
 HSPLandroid/os/Bundle;->getSerializable(Ljava/lang/String;Ljava/lang/Class;)Ljava/io/Serializable;
 HSPLandroid/os/Bundle;->getSparseParcelableArray(Ljava/lang/String;)Landroid/util/SparseArray;
@@ -11971,7 +12044,7 @@
 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;->putParcelableArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
+HSPLandroid/os/Bundle;->putParcelableArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->putParcelableList(Ljava/lang/String;Ljava/util/List;)V
 HSPLandroid/os/Bundle;->putSerializable(Ljava/lang/String;Ljava/io/Serializable;)V
 HSPLandroid/os/Bundle;->putSparseParcelableArray(Ljava/lang/String;Landroid/util/SparseArray;)V
@@ -11983,7 +12056,7 @@
 HSPLandroid/os/Bundle;->setDefusable(Landroid/os/Bundle;Z)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;->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
@@ -12003,9 +12076,9 @@
 HSPLandroid/os/ConditionVariable;-><init>()V
 HSPLandroid/os/ConditionVariable;-><init>(Z)V
 HSPLandroid/os/ConditionVariable;->block()V
-HSPLandroid/os/ConditionVariable;->block(J)Z+]Ljava/lang/Object;Landroid/os/ConditionVariable;
+HSPLandroid/os/ConditionVariable;->block(J)Z
 HSPLandroid/os/ConditionVariable;->close()V
-HSPLandroid/os/ConditionVariable;->open()V+]Ljava/lang/Object;Landroid/os/ConditionVariable;
+HSPLandroid/os/ConditionVariable;->open()V
 HSPLandroid/os/DeadObjectException;-><init>()V
 HSPLandroid/os/DeadObjectException;-><init>(Ljava/lang/String;)V
 HSPLandroid/os/Debug$MemoryInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/Debug$MemoryInfo;
@@ -12077,7 +12150,7 @@
 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;+]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;->buildExternalStorageAppFilesDirs(Ljava/lang/String;)[Ljava/io/File;
 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;
@@ -12103,6 +12176,7 @@
 HSPLandroid/os/Environment;->getOemDirectory()Ljava/io/File;
 HSPLandroid/os/Environment;->getProductDirectory()Ljava/io/File;
 HSPLandroid/os/Environment;->getRootDirectory()Ljava/io/File;
+HSPLandroid/os/Environment;->getSystemExtDirectory()Ljava/io/File;
 HSPLandroid/os/Environment;->getUserConfigDirectory(I)Ljava/io/File;
 HSPLandroid/os/Environment;->initForCurrentUser()V
 HSPLandroid/os/Environment;->isExternalStorageEmulated()Z
@@ -12119,7 +12193,7 @@
 HSPLandroid/os/FileObserver;-><init>(Ljava/lang/String;I)V
 HSPLandroid/os/FileObserver;-><init>(Ljava/util/List;I)V
 HSPLandroid/os/FileObserver;->startWatching()V
-HSPLandroid/os/FileUtils;->buildValidExtFilename(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/os/FileUtils;->buildValidExtFilename(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/os/FileUtils;->bytesToFile(Ljava/lang/String;[B)V
 HSPLandroid/os/FileUtils;->closeQuietly(Ljava/lang/AutoCloseable;)V
 HSPLandroid/os/FileUtils;->contains(Ljava/io/File;Ljava/io/File;)Z
@@ -12143,8 +12217,6 @@
 HSPLandroid/os/GraphicsEnvironment;->chooseDriverInternal(Landroid/os/Bundle;Landroid/content/pm/ApplicationInfo;)Ljava/lang/String;
 HSPLandroid/os/GraphicsEnvironment;->debugLayerEnabled(Landroid/os/Bundle;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;)Z
 HSPLandroid/os/GraphicsEnvironment;->getAppInfoWithMetadata(Landroid/content/Context;Landroid/content/pm/PackageManager;Ljava/lang/String;)Landroid/content/pm/ApplicationInfo;
-HSPLandroid/os/GraphicsEnvironment;->getDefaultDriverToUse(Landroid/content/Context;Ljava/lang/String;)I
-HSPLandroid/os/GraphicsEnvironment;->getDriverForPackage(Landroid/content/Context;Landroid/os/Bundle;Ljava/lang/String;)I
 HSPLandroid/os/GraphicsEnvironment;->getGlobalSettingsString(Landroid/content/ContentResolver;Landroid/os/Bundle;Ljava/lang/String;)Ljava/util/List;
 HSPLandroid/os/GraphicsEnvironment;->getInstance()Landroid/os/GraphicsEnvironment;
 HSPLandroid/os/GraphicsEnvironment;->getPackageIndex(Ljava/lang/String;Ljava/util/List;)I
@@ -12156,6 +12228,7 @@
 HSPLandroid/os/GraphicsEnvironment;->setupGpuLayers(Landroid/content/Context;Landroid/os/Bundle;Landroid/content/pm/PackageManager;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;)V
 HSPLandroid/os/GraphicsEnvironment;->shouldShowAngleInUseDialogBox(Landroid/content/Context;)Z
 HSPLandroid/os/GraphicsEnvironment;->shouldUseAngle(Landroid/content/Context;Landroid/os/Bundle;Ljava/lang/String;)Z
+HSPLandroid/os/GraphicsEnvironment;->shouldUseAngleInternal(Landroid/content/Context;Landroid/os/Bundle;Ljava/lang/String;)Z
 HSPLandroid/os/GraphicsEnvironment;->showAngleInUseDialogBox(Landroid/content/Context;)V
 HSPLandroid/os/Handler$BlockingRunnable;-><init>(Ljava/lang/Runnable;)V
 HSPLandroid/os/Handler$BlockingRunnable;->postAndWait(Landroid/os/Handler;J)Z
@@ -12173,7 +12246,7 @@
 HSPLandroid/os/Handler;-><init>(Z)V
 HSPLandroid/os/Handler;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
 HSPLandroid/os/Handler;->disallowNullArgumentIfShared(Ljava/lang/Object;)Ljava/lang/Object;
-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
 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;
@@ -12185,19 +12258,19 @@
 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+]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
+HSPLandroid/os/Handler;->hasMessages(I)Z
 HSPLandroid/os/Handler;->hasMessages(ILjava/lang/Object;)Z
 HSPLandroid/os/Handler;->obtainMessage()Landroid/os/Message;
 HSPLandroid/os/Handler;->obtainMessage(I)Landroid/os/Message;
 HSPLandroid/os/Handler;->obtainMessage(III)Landroid/os/Message;
 HSPLandroid/os/Handler;->obtainMessage(IIILjava/lang/Object;)Landroid/os/Message;
 HSPLandroid/os/Handler;->obtainMessage(ILjava/lang/Object;)Landroid/os/Message;
-HSPLandroid/os/Handler;->post(Ljava/lang/Runnable;)Z
+HSPLandroid/os/Handler;->post(Ljava/lang/Runnable;)Z+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/app/ActivityThread$H;
 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
+HSPLandroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z+]Landroid/os/Handler;Landroid/os/Handler;
 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
@@ -12205,15 +12278,15 @@
 HSPLandroid/os/Handler;->removeMessages(ILjava/lang/Object;)V
 HSPLandroid/os/Handler;->runWithScissors(Ljava/lang/Runnable;J)Z
 HSPLandroid/os/Handler;->sendEmptyMessage(I)Z
-HSPLandroid/os/Handler;->sendEmptyMessageAtTime(IJ)Z+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/view/GestureDetector$GestureHandler;
+HSPLandroid/os/Handler;->sendEmptyMessageAtTime(IJ)Z
 HSPLandroid/os/Handler;->sendEmptyMessageDelayed(IJ)Z
-HSPLandroid/os/Handler;->sendMessage(Landroid/os/Message;)Z+]Landroid/os/Handler;missing_types
+HSPLandroid/os/Handler;->sendMessage(Landroid/os/Message;)Z+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/media/AudioPortEventHandler$1;,Landroid/view/ViewRootImpl$ViewRootHandler;,Landroid/app/ActivityThread$H;
 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;missing_types
+HSPLandroid/os/Handler;->sendMessageDelayed(Landroid/os/Message;J)Z+]Landroid/os/Handler;megamorphic_types
 HSPLandroid/os/Handler;->toString()Ljava/lang/String;
 HSPLandroid/os/HandlerExecutor;-><init>(Landroid/os/Handler;)V
-HSPLandroid/os/HandlerExecutor;->execute(Ljava/lang/Runnable;)V
+HSPLandroid/os/HandlerExecutor;->execute(Ljava/lang/Runnable;)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLandroid/os/HandlerThread;-><init>(Ljava/lang/String;)V
 HSPLandroid/os/HandlerThread;-><init>(Ljava/lang/String;I)V
 HSPLandroid/os/HandlerThread;->getLooper()Landroid/os/Looper;
@@ -12279,7 +12352,7 @@
 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;->updateWakeLockWorkSource(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;)V
+HSPLandroid/os/IPowerManager$Stub$Proxy;->updateWakeLockWorkSource(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/IPowerManager$Stub$Proxy;Landroid/os/IPowerManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/IPowerManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IPowerManager;
 HSPLandroid/os/IPowerManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/os/IRemoteCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
@@ -12307,7 +12380,7 @@
 HSPLandroid/os/IUserManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/os/IUserManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLandroid/os/IUserManager$Stub$Proxy;->getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;
-HSPLandroid/os/IUserManager$Stub$Proxy;->getApplicationRestrictionsForUser(Ljava/lang/String;I)Landroid/os/Bundle;
+HSPLandroid/os/IUserManager$Stub$Proxy;->getApplicationRestrictionsForUser(Ljava/lang/String;I)Landroid/os/Bundle;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/IUserManager$Stub$Proxy;Landroid/os/IUserManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/IUserManager$Stub$Proxy;->getProfileIds(IZ)[I
 HSPLandroid/os/IUserManager$Stub$Proxy;->getProfileParent(I)Landroid/content/pm/UserInfo;
 HSPLandroid/os/IUserManager$Stub$Proxy;->getProfileType(I)Ljava/lang/String;
@@ -12357,7 +12430,7 @@
 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;+]Ljava/util/Locale;Ljava/util/Locale;
+HSPLandroid/os/LocaleList;->getDefault()Landroid/os/LocaleList;
 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;
@@ -12378,7 +12451,7 @@
 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;
-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;->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
@@ -12412,7 +12485,7 @@
 HSPLandroid/os/Message;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/os/Message;->recycle()V
 HSPLandroid/os/Message;->recycleUnchecked()V
-HSPLandroid/os/Message;->sendToTarget()V+]Landroid/os/Handler;missing_types
+HSPLandroid/os/Message;->sendToTarget()V
 HSPLandroid/os/Message;->setAsynchronous(Z)V
 HSPLandroid/os/Message;->setCallback(Ljava/lang/Runnable;)Landroid/os/Message;
 HSPLandroid/os/Message;->setData(Landroid/os/Bundle;)V
@@ -12427,13 +12500,13 @@
 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/MessageQueue$IdleHandler;missing_types]Landroid/os/Message;Landroid/os/Message;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+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;->postSyncBarrier()I
-HSPLandroid/os/MessageQueue;->postSyncBarrier(J)I+]Landroid/os/Message;Landroid/os/Message;
+HSPLandroid/os/MessageQueue;->postSyncBarrier(J)I
 HSPLandroid/os/MessageQueue;->quit(Z)V
 HSPLandroid/os/MessageQueue;->removeAllFutureMessagesLocked()V
 HSPLandroid/os/MessageQueue;->removeAllMessagesLocked()V
@@ -12442,7 +12515,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+]Landroid/os/Message;Landroid/os/Message;
+HSPLandroid/os/MessageQueue;->removeSyncBarrier(I)V
 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;
@@ -12455,15 +12528,15 @@
 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;
+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;
 HSPLandroid/os/Parcel$LazyValue;->writeToParcel(Landroid/os/Parcel;)V
 HSPLandroid/os/Parcel$ReadWriteHelper;->readString16(Landroid/os/Parcel;)Ljava/lang/String;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel$ReadWriteHelper;->readString8(Landroid/os/Parcel;)Ljava/lang/String;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel$ReadWriteHelper;->writeString16(Landroid/os/Parcel;Ljava/lang/String;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/os/Parcel$ReadWriteHelper;->writeString8(Landroid/os/Parcel;Ljava/lang/String;)V
+HSPLandroid/os/Parcel$ReadWriteHelper;->writeString8(Landroid/os/Parcel;Ljava/lang/String;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->-$$Nest$mreadValue(Landroid/os/Parcel;Ljava/lang/ClassLoader;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;
 HSPLandroid/os/Parcel;-><init>(J)V
 HSPLandroid/os/Parcel;->adoptClassCookies(Landroid/os/Parcel;)V
@@ -12477,20 +12550,20 @@
 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
-HSPLandroid/os/Parcel;->createIntArray()[I
-HSPLandroid/os/Parcel;->createLongArray()[J
-HSPLandroid/os/Parcel;->createString16Array()[Ljava/lang/String;
-HSPLandroid/os/Parcel;->createString8Array()[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;
-HSPLandroid/os/Parcel;->createTypedArrayList(Landroid/os/Parcelable$Creator;)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;->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
 HSPLandroid/os/Parcel;->dataSize()I
 HSPLandroid/os/Parcel;->destroy()V
 HSPLandroid/os/Parcel;->enforceInterface(Ljava/lang/String;)V
-HSPLandroid/os/Parcel;->enforceNoDataAvail()V
+HSPLandroid/os/Parcel;->enforceNoDataAvail()V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->ensureReadSquashableParcelables()V
 HSPLandroid/os/Parcel;->finalize()V
 HSPLandroid/os/Parcel;->freeBuffer()V
@@ -12518,11 +12591,11 @@
 HSPLandroid/os/Parcel;->readArraySet(Ljava/lang/ClassLoader;)Landroid/util/ArraySet;
 HSPLandroid/os/Parcel;->readBinderList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->readBlob()[B
-HSPLandroid/os/Parcel;->readBoolean()Z
+HSPLandroid/os/Parcel;->readBoolean()Z+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readBooleanArray([Z)V
-HSPLandroid/os/Parcel;->readBundle()Landroid/os/Bundle;
-HSPLandroid/os/Parcel;->readBundle(Ljava/lang/ClassLoader;)Landroid/os/Bundle;
-HSPLandroid/os/Parcel;->readByte()B
+HSPLandroid/os/Parcel;->readBundle()Landroid/os/Bundle;+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->readBundle(Ljava/lang/ClassLoader;)Landroid/os/Bundle;+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/os/Parcel;Landroid/os/Parcel;
+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;
@@ -12539,9 +12612,9 @@
 HSPLandroid/os/Parcel;->readIntArray([I)V
 HSPLandroid/os/Parcel;->readLazyValue(Ljava/lang/ClassLoader;)Ljava/lang/Object;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readList(Ljava/util/List;Ljava/lang/ClassLoader;)V
-HSPLandroid/os/Parcel;->readList(Ljava/util/List;Ljava/lang/ClassLoader;Ljava/lang/Class;)V
+HSPLandroid/os/Parcel;->readList(Ljava/util/List;Ljava/lang/ClassLoader;Ljava/lang/Class;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readListInternal(Ljava/util/List;ILjava/lang/ClassLoader;)V
-HSPLandroid/os/Parcel;->readListInternal(Ljava/util/List;ILjava/lang/ClassLoader;Ljava/lang/Class;)V
+HSPLandroid/os/Parcel;->readListInternal(Ljava/util/List;ILjava/lang/ClassLoader;Ljava/lang/Class;)V+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/os/Parcel;->readLong()J
 HSPLandroid/os/Parcel;->readLongArray([J)V
 HSPLandroid/os/Parcel;->readMap(Ljava/util/Map;Ljava/lang/ClassLoader;)V
@@ -12551,10 +12624,10 @@
 HSPLandroid/os/Parcel;->readParcelable(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Object;
 HSPLandroid/os/Parcel;->readParcelableArray(Ljava/lang/ClassLoader;)[Landroid/os/Parcelable;
 HSPLandroid/os/Parcel;->readParcelableArray(Ljava/lang/ClassLoader;Ljava/lang/Class;)[Ljava/lang/Object;
-HSPLandroid/os/Parcel;->readParcelableArrayInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/os/Parcel;->readParcelableArrayInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)[Ljava/lang/Object;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readParcelableCreator(Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator;
 HSPLandroid/os/Parcel;->readParcelableCreatorInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)Landroid/os/Parcelable$Creator;+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/Object;Landroid/os/Parcel;]Ljava/lang/reflect/Field;Ljava/lang/reflect/Field;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/os/Parcel;->readParcelableInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Object;
+HSPLandroid/os/Parcel;->readParcelableInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/Parcelable$Creator;megamorphic_types
 HSPLandroid/os/Parcel;->readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List;
 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;
@@ -12562,7 +12635,7 @@
 HSPLandroid/os/Parcel;->readPersistableBundle(Ljava/lang/ClassLoader;)Landroid/os/PersistableBundle;
 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;
+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;->readSparseArray(Ljava/lang/ClassLoader;Ljava/lang/Class;)Landroid/util/SparseArray;
@@ -12576,7 +12649,7 @@
 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;->readStrongBinder()Landroid/os/IBinder;
@@ -12596,13 +12669,13 @@
 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;->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
 HSPLandroid/os/Parcel;->writeBinderList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->writeBlob([B)V
 HSPLandroid/os/Parcel;->writeBoolean(Z)V
 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
 HSPLandroid/os/Parcel;->writeByteArray([B)V
 HSPLandroid/os/Parcel;->writeByteArray([BII)V
@@ -12621,9 +12694,9 @@
 HSPLandroid/os/Parcel;->writeMap(Ljava/util/Map;)V
 HSPLandroid/os/Parcel;->writeMapInternal(Ljava/util/Map;)V
 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;missing_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;missing_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
@@ -12632,12 +12705,12 @@
 HSPLandroid/os/Parcel;->writeSparseIntArray(Landroid/util/SparseIntArray;)V
 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
+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;->writeString8NoHelper(Ljava/lang/String;)V
-HSPLandroid/os/Parcel;->writeStringArray([Ljava/lang/String;)V
+HSPLandroid/os/Parcel;->writeStringArray([Ljava/lang/String;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeStringList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->writeStrongBinder(Landroid/os/IBinder;)V
 HSPLandroid/os/Parcel;->writeStrongInterface(Landroid/os/IInterface;)V
@@ -12646,13 +12719,13 @@
 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
-HSPLandroid/os/Parcel;->writeValue(Ljava/lang/Object;)V
+HSPLandroid/os/Parcel;->writeValue(ILjava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/lang/Double;Ljava/lang/Double;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/lang/Byte;Ljava/lang/Byte;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeValue(Ljava/lang/Object;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 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
 HSPLandroid/os/ParcelFileDescriptor$AutoCloseInputStream;->close()V
-HSPLandroid/os/ParcelFileDescriptor$AutoCloseInputStream;->read([B)I
+HSPLandroid/os/ParcelFileDescriptor$AutoCloseInputStream;->read([B)I+]Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;
 HSPLandroid/os/ParcelFileDescriptor$AutoCloseInputStream;->read([BII)I
 HSPLandroid/os/ParcelFileDescriptor$AutoCloseOutputStream;-><init>(Landroid/os/ParcelFileDescriptor;)V
 HSPLandroid/os/ParcelFileDescriptor$AutoCloseOutputStream;->close()V
@@ -12687,10 +12760,10 @@
 HSPLandroid/os/ParcelUuid$1;->newArray(I)[Landroid/os/ParcelUuid;
 HSPLandroid/os/ParcelUuid$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/os/ParcelUuid;-><init>(Ljava/util/UUID;)V
-HSPLandroid/os/ParcelUuid;->equals(Ljava/lang/Object;)Z
+HSPLandroid/os/ParcelUuid;->equals(Ljava/lang/Object;)Z+]Ljava/util/UUID;Ljava/util/UUID;
 HSPLandroid/os/ParcelUuid;->fromString(Ljava/lang/String;)Landroid/os/ParcelUuid;
 HSPLandroid/os/ParcelUuid;->getUuid()Ljava/util/UUID;
-HSPLandroid/os/ParcelUuid;->hashCode()I
+HSPLandroid/os/ParcelUuid;->hashCode()I+]Ljava/util/UUID;Ljava/util/UUID;
 HSPLandroid/os/ParcelUuid;->toString()Ljava/lang/String;
 HSPLandroid/os/ParcelUuid;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/ParcelableException;-><init>(Ljava/lang/Throwable;)V
@@ -12710,6 +12783,8 @@
 HSPLandroid/os/PatternMatcher;->matchPattern(Ljava/lang/String;Ljava/lang/String;[II)Z
 HSPLandroid/os/PatternMatcher;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/PerformanceHintManager;->createHintSession([IJ)Landroid/os/PerformanceHintManager$Session;
+HSPLandroid/os/PermissionEnforcer;->checkPermission(Ljava/lang/String;II)I+]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLandroid/os/PermissionEnforcer;->enforcePermission(Ljava/lang/String;II)V+]Landroid/os/PermissionEnforcer;Landroid/os/PermissionEnforcer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/os/PersistableBundle$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/PersistableBundle;
 HSPLandroid/os/PersistableBundle$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/PersistableBundle$MyReadMapCallback;-><init>()V
@@ -12718,7 +12793,7 @@
 HSPLandroid/os/PersistableBundle;-><init>(Landroid/os/Parcel;I)V
 HSPLandroid/os/PersistableBundle;-><init>(Landroid/os/PersistableBundle;)V
 HSPLandroid/os/PersistableBundle;-><init>(Landroid/os/PersistableBundle;Z)V
-HSPLandroid/os/PersistableBundle;-><init>(Landroid/util/ArrayMap;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/PersistableBundle;Landroid/os/PersistableBundle;
+HSPLandroid/os/PersistableBundle;-><init>(Landroid/util/ArrayMap;Z)V
 HSPLandroid/os/PersistableBundle;->deepCopy()Landroid/os/PersistableBundle;
 HSPLandroid/os/PersistableBundle;->getPersistableBundle(Ljava/lang/String;)Landroid/os/PersistableBundle;
 HSPLandroid/os/PersistableBundle;->isValidType(Ljava/lang/Object;)Z
@@ -12731,8 +12806,8 @@
 HSPLandroid/os/PowerManager$1;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/os/PowerManager$1;->recompute(Ljava/lang/Void;)Ljava/lang/Boolean;
 HSPLandroid/os/PowerManager$2;-><init>(Landroid/os/PowerManager;ILjava/lang/String;)V
+HSPLandroid/os/PowerManager$2;->recompute(Ljava/lang/Integer;)Ljava/lang/Boolean;+]Landroid/os/IPowerManager;Landroid/os/IPowerManager$Stub$Proxy;
 HSPLandroid/os/PowerManager$2;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/os/PowerManager$2;->recompute(Ljava/lang/Void;)Ljava/lang/Boolean;
 HSPLandroid/os/PowerManager$3$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/os/PowerManager$3;->lambda$onStatusChange$0(Landroid/os/PowerManager$OnThermalStatusChangedListener;I)V
 HSPLandroid/os/PowerManager$3;->onStatusChange(I)V
@@ -12741,13 +12816,13 @@
 HSPLandroid/os/PowerManager$WakeLock;-><init>(Landroid/os/PowerManager;ILjava/lang/String;Ljava/lang/String;I)V
 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;->setReferenceCounted(Z)V
-HSPLandroid/os/PowerManager$WakeLock;->setWorkSource(Landroid/os/WorkSource;)V
+HSPLandroid/os/PowerManager$WakeLock;->setWorkSource(Landroid/os/WorkSource;)V+]Landroid/os/WorkSource;Landroid/os/WorkSource;]Landroid/os/IPowerManager;Landroid/os/IPowerManager$Stub$Proxy;
 HSPLandroid/os/PowerManager;-><init>(Landroid/content/Context;Landroid/os/IPowerManager;Landroid/os/IThermalService;Landroid/os/Handler;)V
 HSPLandroid/os/PowerManager;->addThermalStatusListener(Landroid/os/PowerManager$OnThermalStatusChangedListener;)V
 HSPLandroid/os/PowerManager;->addThermalStatusListener(Ljava/util/concurrent/Executor;Landroid/os/PowerManager$OnThermalStatusChangedListener;)V
@@ -12800,7 +12875,7 @@
 HSPLandroid/os/RemoteCallback;-><init>(Landroid/os/RemoteCallback$OnResultListener;)V
 HSPLandroid/os/RemoteCallback;-><init>(Landroid/os/RemoteCallback$OnResultListener;Landroid/os/Handler;)V
 HSPLandroid/os/RemoteCallback;->sendResult(Landroid/os/Bundle;)V
-HSPLandroid/os/RemoteCallback;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/RemoteCallback;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/IRemoteCallback;Landroid/os/RemoteCallback$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/RemoteCallbackList$Callback;-><init>(Landroid/os/RemoteCallbackList;Landroid/os/IInterface;Ljava/lang/Object;)V
 HSPLandroid/os/RemoteCallbackList$Callback;->binderDied()V
 HSPLandroid/os/RemoteCallbackList;-><init>()V
@@ -12838,6 +12913,7 @@
 HSPLandroid/os/ServiceManager;->isDeclared(Ljava/lang/String;)Z
 HSPLandroid/os/ServiceManager;->rawGetService(Ljava/lang/String;)Landroid/os/IBinder;
 HSPLandroid/os/ServiceManager;->waitForDeclaredService(Ljava/lang/String;)Landroid/os/IBinder;
+HSPLandroid/os/ServiceManager;->waitForService(Ljava/lang/String;)Landroid/os/IBinder;
 HSPLandroid/os/ServiceManagerProxy;->addService(Ljava/lang/String;Landroid/os/IBinder;ZI)V
 HSPLandroid/os/ServiceManagerProxy;->checkService(Ljava/lang/String;)Landroid/os/IBinder;
 HSPLandroid/os/ServiceManagerProxy;->getService(Ljava/lang/String;)Landroid/os/IBinder;
@@ -12891,16 +12967,16 @@
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy$$ExternalSyntheticLambda1;->run()V
 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(Landroid/view/IWindowManager;Ljava/util/ArrayList;)V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->handleViolationWithTimingAttempt(Landroid/os/StrictMode$ViolationInfo;)V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;]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;
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->lambda$handleViolationWithTimingAttempt$0(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
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onThreadPolicyViolation(Landroid/os/StrictMode$ViolationInfo;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Landroid/os/StrictMode$ViolationLogger;Landroid/os/StrictMode$$ExternalSyntheticLambda1;]Ljava/lang/String;Ljava/lang/String;]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;
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onUnbufferedIO()V
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onWriteToDisk()V
 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
@@ -12937,12 +13013,12 @@
 HSPLandroid/os/StrictMode$UnsafeIntentStrictModeCallback;-><init>()V
 HSPLandroid/os/StrictMode$UnsafeIntentStrictModeCallback;-><init>(Landroid/os/StrictMode$UnsafeIntentStrictModeCallback-IA;)V
 HSPLandroid/os/StrictMode$ViolationInfo;->-$$Nest$fgetmViolation(Landroid/os/StrictMode$ViolationInfo;)Landroid/os/strictmode/Violation;
-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/Parcel;Z)V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/util/Deque;Ljava/util/ArrayDeque;
 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/io/StringWriter;Ljava/io/StringWriter;]Landroid/os/strictmode/Violation;Landroid/os/strictmode/DiskReadViolation;,Landroid/os/strictmode/CustomViolation;
+HSPLandroid/os/StrictMode$ViolationInfo;->hashCode()I+]Landroid/os/strictmode/Violation;Landroid/os/strictmode/DiskReadViolation;,Landroid/os/strictmode/LeakedClosableViolation;
 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;]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;
@@ -12982,12 +13058,12 @@
 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;->clampViolationTimeMap(Landroid/util/SparseLongArray;J)V
-HSPLandroid/os/StrictMode;->clearGatheredViolations()V
+HSPLandroid/os/StrictMode;->clampViolationTimeMap(Landroid/util/SparseLongArray;J)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;
+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;->getThreadPolicy()Landroid/os/StrictMode$ThreadPolicy;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/os/StrictMode;->getThreadPolicyMask()I
 HSPLandroid/os/StrictMode;->getVmPolicy()Landroid/os/StrictMode$VmPolicy;
 HSPLandroid/os/StrictMode;->handleApplicationStrictModeViolation(ILandroid/os/StrictMode$ViolationInfo;)V
@@ -13005,12 +13081,12 @@
 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;->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;->registerIntentMatchingRestrictionCallback()V
-HSPLandroid/os/StrictMode;->setBlockGuardPolicy(I)V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;]Ljava/lang/ThreadLocal;Landroid/os/StrictMode$4;
+HSPLandroid/os/StrictMode;->setBlockGuardPolicy(I)V
 HSPLandroid/os/StrictMode;->setBlockGuardVmPolicy(I)V
 HSPLandroid/os/StrictMode;->setCloseGuardEnabled(Z)V
-HSPLandroid/os/StrictMode;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
+HSPLandroid/os/StrictMode;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V
 HSPLandroid/os/StrictMode;->setThreadPolicyMask(I)V
 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
@@ -13044,6 +13120,7 @@
 HSPLandroid/os/SystemProperties;->native_get(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/os/SystemProperties;->set(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/os/SystemVibrator;-><init>(Landroid/content/Context;)V
+HSPLandroid/os/SystemVibrator;->getInfo()Landroid/os/VibratorInfo;
 HSPLandroid/os/SystemVibrator;->hasVibrator()Z
 HSPLandroid/os/SystemVibrator;->vibrate(ILjava/lang/String;Landroid/os/VibrationEffect;Ljava/lang/String;Landroid/os/VibrationAttributes;)V
 HSPLandroid/os/SystemVibratorManager;-><init>(Landroid/content/Context;)V
@@ -13062,18 +13139,18 @@
 HSPLandroid/os/Temperature;->getStatus()I
 HSPLandroid/os/Temperature;->isValidStatus(I)Z
 HSPLandroid/os/ThreadLocalWorkSource$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
-HSPLandroid/os/ThreadLocalWorkSource;->getToken()J+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;
-HSPLandroid/os/ThreadLocalWorkSource;->getUid()I+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;
+HSPLandroid/os/ThreadLocalWorkSource;->getToken()J
+HSPLandroid/os/ThreadLocalWorkSource;->getUid()I
 HSPLandroid/os/ThreadLocalWorkSource;->lambda$static$0()[I
 HSPLandroid/os/ThreadLocalWorkSource;->parseUidFromToken(J)I
-HSPLandroid/os/ThreadLocalWorkSource;->restore(J)V+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;
-HSPLandroid/os/ThreadLocalWorkSource;->setUid(I)J+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;
+HSPLandroid/os/ThreadLocalWorkSource;->restore(J)V
+HSPLandroid/os/ThreadLocalWorkSource;->setUid(I)J
 HSPLandroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V
 HSPLandroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V
 HSPLandroid/os/Trace;->asyncTraceForTrackBegin(JLjava/lang/String;Ljava/lang/String;I)V
 HSPLandroid/os/Trace;->asyncTraceForTrackEnd(JLjava/lang/String;I)V
 HSPLandroid/os/Trace;->beginAsyncSection(Ljava/lang/String;I)V
-HSPLandroid/os/Trace;->beginSection(Ljava/lang/String;)V
+HSPLandroid/os/Trace;->beginSection(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/os/Trace;->endAsyncSection(Ljava/lang/String;I)V
 HSPLandroid/os/Trace;->endSection()V
 HSPLandroid/os/Trace;->instant(JLjava/lang/String;)V
@@ -13085,7 +13162,7 @@
 HSPLandroid/os/Trace;->traceBegin(JLjava/lang/String;)V
 HSPLandroid/os/Trace;->traceCounter(JLjava/lang/String;I)V
 HSPLandroid/os/Trace;->traceEnd(J)V
-HSPLandroid/os/UserHandle$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/UserHandle$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;
 HSPLandroid/os/UserHandle$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/UserHandle;-><init>(I)V
 HSPLandroid/os/UserHandle;->equals(Ljava/lang/Object;)Z
@@ -13128,6 +13205,7 @@
 HSPLandroid/os/UserManager$3;->recompute(Ljava/lang/Integer;)Ljava/lang/String;
 HSPLandroid/os/UserManager$3;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/os/UserManager$4;-><init>(Landroid/os/UserManager;ILjava/lang/String;)V
+HSPLandroid/os/UserManager$4;->recompute(Ljava/lang/Integer;)Landroid/content/pm/UserProperties;+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/IUserManager;Landroid/os/IUserManager$Stub$Proxy;
 HSPLandroid/os/UserManager;->-$$Nest$fgetmService(Landroid/os/UserManager;)Landroid/os/IUserManager;
 HSPLandroid/os/UserManager;-><init>(Landroid/content/Context;Landroid/os/IUserManager;)V
 HSPLandroid/os/UserManager;->convertUserIdsToUserHandles([I)Ljava/util/List;
@@ -13154,6 +13232,7 @@
 HSPLandroid/os/UserManager;->getUserHandles(Z)Ljava/util/List;
 HSPLandroid/os/UserManager;->getUserInfo(I)Landroid/content/pm/UserInfo;
 HSPLandroid/os/UserManager;->getUserProfiles()Ljava/util/List;
+HSPLandroid/os/UserManager;->getUserProperties(Landroid/os/UserHandle;)Landroid/content/pm/UserProperties;+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/app/PropertyInvalidatedCache;Landroid/os/UserManager$4;
 HSPLandroid/os/UserManager;->getUserRestrictionSources(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;
 HSPLandroid/os/UserManager;->getUserRestrictions()Landroid/os/Bundle;
 HSPLandroid/os/UserManager;->getUserRestrictions(Landroid/os/UserHandle;)Landroid/os/Bundle;
@@ -13179,6 +13258,7 @@
 HSPLandroid/os/UserManager;->isUserRunning(Landroid/os/UserHandle;)Z
 HSPLandroid/os/UserManager;->isUserSwitcherEnabled()Z
 HSPLandroid/os/UserManager;->isUserSwitcherEnabled(Z)Z
+HSPLandroid/os/UserManager;->isUserTypeCloneProfile(Ljava/lang/String;)Z
 HSPLandroid/os/UserManager;->isUserTypeManagedProfile(Ljava/lang/String;)Z
 HSPLandroid/os/UserManager;->isUserTypeRestricted(Ljava/lang/String;)Z
 HSPLandroid/os/UserManager;->isUserUnlocked()Z
@@ -13200,6 +13280,7 @@
 HSPLandroid/os/Vibrator;-><init>(Landroid/content/Context;)V
 HSPLandroid/os/Vibrator;->vibrate(Landroid/os/VibrationEffect;Landroid/media/AudioAttributes;)V
 HSPLandroid/os/Vibrator;->vibrate(Landroid/os/VibrationEffect;Landroid/os/VibrationAttributes;)V
+HSPLandroid/os/VibratorInfo;->hasCapability(J)Z
 HSPLandroid/os/VibratorManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/os/WorkSource$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/WorkSource;
 HSPLandroid/os/WorkSource$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -13240,7 +13321,6 @@
 HSPLandroid/os/health/HealthStatsParceler$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/health/HealthStatsParceler;
 HSPLandroid/os/health/HealthStatsParceler$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/health/HealthStatsParceler;->getHealthStats()Landroid/os/health/HealthStats;
-HSPLandroid/os/health/SystemHealthManager;-><init>(Lcom/android/internal/app/IBatteryStats;)V
 HSPLandroid/os/health/SystemHealthManager;->takeMyUidSnapshot()Landroid/os/health/HealthStats;
 HSPLandroid/os/health/SystemHealthManager;->takeUidSnapshot(I)Landroid/os/health/HealthStats;
 HSPLandroid/os/health/TimerStat$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/health/TimerStat;
@@ -13277,7 +13357,7 @@
 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;+]Landroid/os/storage/IStorageManager;Landroid/os/storage/IStorageManager$Stub$Proxy;
+HSPLandroid/os/storage/StorageManager;->getVolumeList(II)[Landroid/os/storage/StorageVolume;
 HSPLandroid/os/storage/StorageManager;->getVolumes()Ljava/util/List;
 HSPLandroid/os/storage/StorageManager;->isEncrypted()Z
 HSPLandroid/os/storage/StorageManager;->isFileEncryptedNativeOnly()Z
@@ -13312,7 +13392,7 @@
 HSPLandroid/os/strictmode/Violation;-><init>(Ljava/lang/String;)V
 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/DiskReadViolation;,Ljava/lang/Class;]Ljava/lang/Throwable;Ljava/lang/Throwable;]Landroid/os/strictmode/Violation;Landroid/os/strictmode/DiskReadViolation;,Landroid/os/strictmode/LeakedClosableViolation;
 HSPLandroid/os/strictmode/Violation;->initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;
 HSPLandroid/os/vibrator/PrebakedSegment;->getDuration()J
 HSPLandroid/os/vibrator/PrebakedSegment;->isValidEffectStrength(I)Z
@@ -13333,7 +13413,6 @@
 HSPLandroid/permission/IPermissionManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/permission/IPermissionManager$Stub$Proxy;->addOnPermissionsChangeListener(Landroid/permission/IOnPermissionsChangeListener;)V
 HSPLandroid/permission/IPermissionManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/permission/IPermissionManager$Stub$Proxy;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;I)I
 HSPLandroid/permission/IPermissionManager$Stub$Proxy;->getPermissionInfo(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;
 HSPLandroid/permission/IPermissionManager$Stub$Proxy;->getSplitPermissions()Ljava/util/List;
 HSPLandroid/permission/IPermissionManager$Stub$Proxy;->removeOnPermissionsChangeListener(Landroid/permission/IOnPermissionsChangeListener;)V
@@ -13352,24 +13431,16 @@
 HSPLandroid/permission/PermissionManager$OnPermissionsChangeListenerDelegate;-><init>(Landroid/permission/PermissionManager;Landroid/content/pm/PackageManager$OnPermissionsChangedListener;Landroid/os/Looper;)V
 HSPLandroid/permission/PermissionManager$OnPermissionsChangeListenerDelegate;->handleMessage(Landroid/os/Message;)Z
 HSPLandroid/permission/PermissionManager$OnPermissionsChangeListenerDelegate;->onPermissionsChanged(I)V
-HSPLandroid/permission/PermissionManager$PackageNamePermissionQuery;-><init>(Ljava/lang/String;Ljava/lang/String;I)V
 HSPLandroid/permission/PermissionManager$PackageNamePermissionQuery;->equals(Ljava/lang/Object;)Z
 HSPLandroid/permission/PermissionManager$PackageNamePermissionQuery;->hashCode()I
-HSPLandroid/permission/PermissionManager$PermissionQuery;-><init>(Ljava/lang/String;II)V
 HSPLandroid/permission/PermissionManager$PermissionQuery;->equals(Ljava/lang/Object;)Z
 HSPLandroid/permission/PermissionManager$PermissionQuery;->hashCode()I
 HSPLandroid/permission/PermissionManager$SplitPermissionInfo;-><init>(Landroid/content/pm/permission/SplitPermissionInfoParcelable;)V
 HSPLandroid/permission/PermissionManager$SplitPermissionInfo;->getNewPermissions()Ljava/util/List;
 HSPLandroid/permission/PermissionManager$SplitPermissionInfo;->getSplitPermission()Ljava/lang/String;
 HSPLandroid/permission/PermissionManager$SplitPermissionInfo;->getTargetSdk()I
-HSPLandroid/permission/PermissionManager;->-$$Nest$smcheckPackageNamePermissionUncached(Ljava/lang/String;Ljava/lang/String;I)I
-HSPLandroid/permission/PermissionManager;->-$$Nest$smcheckPermissionUncached(Ljava/lang/String;II)I
 HSPLandroid/permission/PermissionManager;-><init>(Landroid/content/Context;)V
 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;->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;
 HSPLandroid/permission/PermissionManager;->getSplitPermissions()Ljava/util/List;
@@ -13412,12 +13483,12 @@
 HSPLandroid/provider/SearchIndexablesProvider;->querySiteMapPairs()Landroid/database/Cursor;
 HSPLandroid/provider/SearchIndexablesProvider;->querySliceUriPairs()Landroid/database/Cursor;
 HSPLandroid/provider/Settings$Config;->checkCallingOrSelfPermission(Ljava/lang/String;)I
-HSPLandroid/provider/Settings$Config;->createCompositeName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/provider/Settings$Config;->createCompositeName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/provider/Settings$Config;->createNamespaceUri(Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/provider/Settings$Config;->createPrefix(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/provider/Settings$Config;->createPrefix(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/provider/Settings$Config;->enforceReadPermission(Ljava/lang/String;)V
 HSPLandroid/provider/Settings$Config;->getContentResolver()Landroid/content/ContentResolver;
-HSPLandroid/provider/Settings$Config;->getStrings(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/util/List;)Ljava/util/Map;
+HSPLandroid/provider/Settings$Config;->getStrings(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/util/List;)Ljava/util/Map;+]Landroid/provider/Settings$NameValueCache;Landroid/provider/Settings$NameValueCache;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/String;Ljava/lang/String;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/provider/Settings$Config;->getStrings(Ljava/lang/String;Ljava/util/List;)Ljava/util/Map;
 HSPLandroid/provider/Settings$Config;->registerContentObserver(Ljava/lang/String;ZLandroid/database/ContentObserver;)V
 HSPLandroid/provider/Settings$ContentProviderHolder;->-$$Nest$fgetmUri(Landroid/provider/Settings$ContentProviderHolder;)Landroid/net/Uri;
@@ -13440,7 +13511,7 @@
 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;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;
-HSPLandroid/provider/Settings$NameValueCache;->getStringsForPrefix(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/util/List;)Landroid/util/ArrayMap;
+HSPLandroid/provider/Settings$NameValueCache;->getStringsForPrefix(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/util/List;)Landroid/util/ArrayMap;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/provider/Settings$GenerationTracker;Landroid/provider/Settings$GenerationTracker;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/provider/Settings$ContentProviderHolder;Landroid/provider/Settings$ContentProviderHolder;]Ljava/util/Map;Ljava/util/HashMap;]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;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
 HSPLandroid/provider/Settings$NameValueCache;->isCallerExemptFromReadableRestriction()Z
 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;
@@ -13452,7 +13523,7 @@
 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
@@ -13472,6 +13543,7 @@
 HSPLandroid/provider/Settings$System;->putIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z
 HSPLandroid/provider/Settings$System;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z
 HSPLandroid/provider/Settings$System;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;IZ)Z
+HSPLandroid/provider/Settings;->-$$Nest$smparseFloatSettingWithDefault(Ljava/lang/String;F)F
 HSPLandroid/provider/Settings;->-$$Nest$smparseIntSetting(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/provider/Settings;->-$$Nest$smparseIntSettingWithDefault(Ljava/lang/String;I)I
 HSPLandroid/provider/Settings;->canDrawOverlays(Landroid/content/Context;)Z
@@ -13492,7 +13564,6 @@
 HSPLandroid/security/KeyChain;->bindAsUser(Landroid/content/Context;Landroid/os/Handler;Landroid/os/UserHandle;)Landroid/security/KeyChain$KeyChainConnection;
 HSPLandroid/security/KeyChain;->bindAsUser(Landroid/content/Context;Landroid/os/UserHandle;)Landroid/security/KeyChain$KeyChainConnection;
 HSPLandroid/security/KeyChain;->ensureNotOnMainThread(Landroid/content/Context;)V
-HSPLandroid/security/KeyStore2$$ExternalSyntheticLambda3;-><init>(Landroid/system/keystore2/KeyDescriptor;)V
 HSPLandroid/security/KeyStore2$$ExternalSyntheticLambda3;->execute(Landroid/system/keystore2/IKeystoreService;)Ljava/lang/Object;
 HSPLandroid/security/KeyStore2$$ExternalSyntheticLambda4;->execute(Landroid/system/keystore2/IKeystoreService;)Ljava/lang/Object;
 HSPLandroid/security/KeyStore2;-><init>()V
@@ -13501,7 +13572,6 @@
 HSPLandroid/security/KeyStore2;->getKeyStoreException(ILjava/lang/String;)Landroid/security/KeyStoreException;
 HSPLandroid/security/KeyStore2;->getService(Z)Landroid/system/keystore2/IKeystoreService;
 HSPLandroid/security/KeyStore2;->handleRemoteExceptionWithRetry(Landroid/security/KeyStore2$CheckedRemoteRequest;)Ljava/lang/Object;
-HSPLandroid/security/KeyStore2;->lambda$getKeyEntry$4(Landroid/system/keystore2/KeyDescriptor;Landroid/system/keystore2/IKeystoreService;)Landroid/system/keystore2/KeyEntryResponse;
 HSPLandroid/security/KeyStore;->getInstance()Landroid/security/KeyStore;
 HSPLandroid/security/KeyStoreException;-><init>(ILjava/lang/String;)V
 HSPLandroid/security/KeyStoreException;-><init>(ILjava/lang/String;Ljava/lang/String;)V
@@ -13587,7 +13657,6 @@
 HSPLandroid/security/keystore/KeyGenParameterSpec$Builder;->setBlockModes([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;
 HSPLandroid/security/keystore/KeyGenParameterSpec$Builder;->setEncryptionPaddings([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;
 HSPLandroid/security/keystore/KeyGenParameterSpec$Builder;->setKeySize(I)Landroid/security/keystore/KeyGenParameterSpec$Builder;
-HSPLandroid/security/keystore/KeyGenParameterSpec;-><init>(Ljava/lang/String;IILjava/security/spec/AlgorithmParameterSpec;Ljavax/security/auth/x500/X500Principal;Ljava/math/BigInteger;Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;I[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ZZIIZ[BZ[IZZZZZZZILjava/lang/String;)V
 HSPLandroid/security/keystore/KeyGenParameterSpec;->getBlockModes()[Ljava/lang/String;
 HSPLandroid/security/keystore/KeyGenParameterSpec;->getEncryptionPaddings()[Ljava/lang/String;
 HSPLandroid/security/keystore/KeyGenParameterSpec;->getKeySize()I
@@ -13651,7 +13720,6 @@
 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;->finalize()V
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->flushAAD()V
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->init(ILjava/security/Key;Ljava/security/SecureRandom;)V
@@ -13661,6 +13729,7 @@
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->setKey(Landroid/security/keystore2/AndroidKeyStoreKey;)V
 HSPLandroid/security/keystore2/AndroidKeyStoreKey;-><init>(Landroid/system/keystore2/KeyDescriptor;J[Landroid/system/keystore2/Authorization;Ljava/lang/String;Landroid/security/KeyStoreSecurityLevel;)V
 HSPLandroid/security/keystore2/AndroidKeyStoreKey;->getAlgorithm()Ljava/lang/String;
+HSPLandroid/security/keystore2/AndroidKeyStoreKey;->getAuthorizations()[Landroid/system/keystore2/Authorization;
 HSPLandroid/security/keystore2/AndroidKeyStoreKey;->getFormat()Ljava/lang/String;
 HSPLandroid/security/keystore2/AndroidKeyStoreKey;->getKeyIdDescriptor()Landroid/system/keystore2/KeyDescriptor;
 HSPLandroid/security/keystore2/AndroidKeyStoreKey;->getSecurityLevel()Landroid/security/KeyStoreSecurityLevel;
@@ -13968,6 +14037,8 @@
 HSPLandroid/sysprop/DisplayProperties;->debug_force_rtl()Ljava/util/Optional;
 HSPLandroid/sysprop/DisplayProperties;->debug_layout()Ljava/util/Optional;
 HSPLandroid/sysprop/DisplayProperties;->tryParseBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
+HSPLandroid/sysprop/InputProperties;->force_enable_stylus_pointer_icon()Ljava/util/Optional;
+HSPLandroid/sysprop/InputProperties;->tryParseBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
 HSPLandroid/sysprop/InputProperties;->tryParseString(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/sysprop/TelephonyProperties$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/sysprop/TelephonyProperties$$ExternalSyntheticLambda10;->apply(Ljava/lang/Object;)Ljava/lang/Object;
@@ -14010,7 +14081,7 @@
 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;
@@ -14052,7 +14123,7 @@
 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;
@@ -14293,7 +14364,7 @@
 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+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/telephony/NetworkRegistrationInfo;)V
 HSPLandroid/telephony/NetworkRegistrationInfo;->domainToString(I)Ljava/lang/String;
 HSPLandroid/telephony/NetworkRegistrationInfo;->getAccessNetworkTechnology()I
@@ -14364,7 +14435,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+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/telephony/ServiceState;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/telephony/ServiceState;-><init>(Landroid/telephony/ServiceState;)V
 HSPLandroid/telephony/ServiceState;->copyFrom(Landroid/telephony/ServiceState;)V
 HSPLandroid/telephony/ServiceState;->createLocationInfoSanitizedCopy(Z)Landroid/telephony/ServiceState;
@@ -14487,19 +14558,15 @@
 HSPLandroid/telephony/SubscriptionInfo;->isEmbedded()Z
 HSPLandroid/telephony/SubscriptionInfo;->isOpportunistic()Z
 HSPLandroid/telephony/SubscriptionInfo;->toString()Ljava/lang/String;
-HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda10;->applyOrThrow(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda3;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda5;->applyOrThrow(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda4;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda5;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda6;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda7;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda8;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda9;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda7;->applyOrThrow(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda9;->applyOrThrow(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/telephony/SubscriptionManager$IntegerPropertyInvalidatedCache;->query(Ljava/lang/Integer;)Ljava/lang/Object;
 HSPLandroid/telephony/SubscriptionManager$IntegerPropertyInvalidatedCache;->recompute(Ljava/lang/Integer;)Ljava/lang/Object;
 HSPLandroid/telephony/SubscriptionManager$IntegerPropertyInvalidatedCache;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener$OnSubscriptionsChangedListenerHandler;-><init>(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V
-HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener$OnSubscriptionsChangedListenerHandler;-><init>(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;Landroid/os/Looper;)V
-HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;->-$$Nest$fgetmExecutor(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)Lcom/android/internal/telephony/util/HandlerExecutor;
 HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;-><init>()V
 HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;-><init>(Landroid/os/Looper;)V
 HSPLandroid/telephony/SubscriptionManager$VoidPropertyInvalidatedCache;->query(Ljava/lang/Void;)Ljava/lang/Object;
@@ -14531,7 +14598,6 @@
 HSPLandroid/telephony/SubscriptionManager;->getSlotIndex(I)I
 HSPLandroid/telephony/SubscriptionManager;->getSubId(I)[I
 HSPLandroid/telephony/SubscriptionManager;->getSubscriptionIds(I)[I
-HSPLandroid/telephony/SubscriptionManager;->isSubscriptionManagerServiceEnabled()Z
 HSPLandroid/telephony/SubscriptionManager;->isSubscriptionVisible(Landroid/telephony/SubscriptionInfo;)Z
 HSPLandroid/telephony/SubscriptionManager;->isUsableSubIdValue(I)Z
 HSPLandroid/telephony/SubscriptionManager;->isValidSlotIndex(I)Z
@@ -14623,7 +14689,7 @@
 HSPLandroid/telephony/TelephonyManager;->getSimSpecificCarrierId()I
 HSPLandroid/telephony/TelephonyManager;->getSimState()I
 HSPLandroid/telephony/TelephonyManager;->getSimState(I)I
-HSPLandroid/telephony/TelephonyManager;->getSimStateForSlotIndex(I)I+]Landroid/os/TelephonyServiceManager$ServiceRegisterer;Landroid/os/TelephonyServiceManager$ServiceRegisterer;]Landroid/os/TelephonyServiceManager;Landroid/os/TelephonyServiceManager;]Lcom/android/internal/telephony/ITelephony;Lcom/android/internal/telephony/ITelephony$Stub$Proxy;
+HSPLandroid/telephony/TelephonyManager;->getSimStateForSlotIndex(I)I
 HSPLandroid/telephony/TelephonyManager;->getSimStateIncludingLoaded()I
 HSPLandroid/telephony/TelephonyManager;->getSlotIndex()I
 HSPLandroid/telephony/TelephonyManager;->getSmsService()Lcom/android/internal/telephony/ISms;
@@ -14653,6 +14719,7 @@
 HSPLandroid/telephony/TelephonyManager;->mergeAttributionAndRenouncedPermissions(Landroid/content/Context;Landroid/content/Context;)Landroid/content/Context;
 HSPLandroid/telephony/TelephonyManager;->registerTelephonyCallback(ILjava/util/concurrent/Executor;Landroid/telephony/TelephonyCallback;)V
 HSPLandroid/telephony/TelephonyManager;->registerTelephonyCallback(Ljava/util/concurrent/Executor;Landroid/telephony/TelephonyCallback;)V
+HSPLandroid/telephony/TelephonyManager;->unregisterTelephonyCallback(Landroid/telephony/TelephonyCallback;)V
 HSPLandroid/telephony/TelephonyRegistryManager$$ExternalSyntheticLambda0;-><init>()V
 HSPLandroid/telephony/TelephonyRegistryManager$$ExternalSyntheticLambda0;->applyAsInt(Ljava/lang/Object;)I
 HSPLandroid/telephony/TelephonyRegistryManager$$ExternalSyntheticLambda1;-><init>()V
@@ -14736,7 +14803,7 @@
 HSPLandroid/telephony/ims/RegistrationManager$RegistrationCallback;->setExecutor(Ljava/util/concurrent/Executor;)V
 HSPLandroid/telephony/ims/aidl/IImsRegistrationCallback$Stub;-><init>()V
 HSPLandroid/telephony/ims/aidl/IImsRegistrationCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/text/AndroidBidi;->bidi(I[C[B)I+]Landroid/icu/text/Bidi;Landroid/icu/text/Bidi;
+HSPLandroid/text/AndroidBidi;->bidi(I[C[B)I
 HSPLandroid/text/AndroidBidi;->directions(I[BI[CII)Landroid/text/Layout$Directions;
 HSPLandroid/text/AutoGrowArray$ByteArray;-><init>()V
 HSPLandroid/text/AutoGrowArray$ByteArray;-><init>(I)V
@@ -14784,14 +14851,14 @@
 HSPLandroid/text/BoringLayout;->getLineDescent(I)I
 HSPLandroid/text/BoringLayout;->getLineDirections(I)Landroid/text/Layout$Directions;
 HSPLandroid/text/BoringLayout;->getLineMax(I)F
-HSPLandroid/text/BoringLayout;->getLineStart(I)I+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannedString;
+HSPLandroid/text/BoringLayout;->getLineStart(I)I
 HSPLandroid/text/BoringLayout;->getLineTop(I)I
 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+]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/text/TextLine;Landroid/text/TextLine;
+HSPLandroid/text/BoringLayout;->init(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/Layout$Alignment;Landroid/text/BoringLayout$Metrics;ZZZ)V
 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;missing_types]Landroid/text/TextDirectionHeuristic;Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;
+HSPLandroid/text/BoringLayout;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;ZLandroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics;
 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;
@@ -14816,26 +14883,26 @@
 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;missing_types]Landroid/text/Spannable;missing_types
+HSPLandroid/text/DynamicLayout;->generate(Landroid/text/DynamicLayout$Builder;)V
 HSPLandroid/text/DynamicLayout;->getBlockEndLines()[I
 HSPLandroid/text/DynamicLayout;->getBlockIndices()[I
 HSPLandroid/text/DynamicLayout;->getBlocksAlwaysNeedToBeRedrawn()Landroid/util/ArraySet;
 HSPLandroid/text/DynamicLayout;->getEllipsisCount(I)I
 HSPLandroid/text/DynamicLayout;->getEllipsisStart(I)I
 HSPLandroid/text/DynamicLayout;->getEllipsizedWidth()I
-HSPLandroid/text/DynamicLayout;->getEndHyphenEdit(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/DynamicLayout;->getEndHyphenEdit(I)I
 HSPLandroid/text/DynamicLayout;->getIndexFirstChangedBlock()I
 HSPLandroid/text/DynamicLayout;->getLineContainsTab(I)Z
-HSPLandroid/text/DynamicLayout;->getLineCount()I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/DynamicLayout;->getLineCount()I
 HSPLandroid/text/DynamicLayout;->getLineDescent(I)I
-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+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/DynamicLayout;->getLineDirections(I)Landroid/text/Layout$Directions;
+HSPLandroid/text/DynamicLayout;->getLineExtra(I)I
+HSPLandroid/text/DynamicLayout;->getLineStart(I)I
+HSPLandroid/text/DynamicLayout;->getLineTop(I)I
 HSPLandroid/text/DynamicLayout;->getNumberOfBlocks()I
-HSPLandroid/text/DynamicLayout;->getParagraphDirection(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
-HSPLandroid/text/DynamicLayout;->getStartHyphenEdit(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
-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;->getParagraphDirection(I)I
+HSPLandroid/text/DynamicLayout;->getStartHyphenEdit(I)I
+HSPLandroid/text/DynamicLayout;->reflow(Ljava/lang/CharSequence;III)V
 HSPLandroid/text/DynamicLayout;->setIndexFirstChangedBlock(I)V
 HSPLandroid/text/DynamicLayout;->updateAlwaysNeedsToBeRedrawn(I)V
 HSPLandroid/text/DynamicLayout;->updateBlocks(III)V
@@ -14892,46 +14959,46 @@
 HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
 HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
-HSPLandroid/text/Layout;->drawBackground(Landroid/graphics/Canvas;II)V+]Landroid/text/Spanned;Landroid/text/SpannableString;]Landroid/text/SpanSet;Landroid/text/SpanSet;
-HSPLandroid/text/Layout;->drawText(Landroid/graphics/Canvas;II)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/text/TextLine;Landroid/text/TextLine;]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;missing_types
-HSPLandroid/text/Layout;->drawWithoutText(Landroid/graphics/Canvas;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;III)V+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/text/Layout;->drawBackground(Landroid/graphics/Canvas;II)V
+HSPLandroid/text/Layout;->drawText(Landroid/graphics/Canvas;II)V
+HSPLandroid/text/Layout;->drawWithoutText(Landroid/graphics/Canvas;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;III)V
 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
 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+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/StaticLayout;
+HSPLandroid/text/Layout;->getHeight()I
 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;->getHorizontal(IZIZ)F
 HSPLandroid/text/Layout;->getIndentAdjust(ILandroid/text/Layout$Alignment;)I
-HSPLandroid/text/Layout;->getLineBaseline(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
+HSPLandroid/text/Layout;->getLineBaseline(I)I
 HSPLandroid/text/Layout;->getLineBottom(I)I
-HSPLandroid/text/Layout;->getLineBottom(IZ)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/StaticLayout;
-HSPLandroid/text/Layout;->getLineEnd(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;
+HSPLandroid/text/Layout;->getLineBottom(IZ)I
+HSPLandroid/text/Layout;->getLineEnd(I)I
 HSPLandroid/text/Layout;->getLineExtent(ILandroid/text/Layout$TabStops;Z)F
-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+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
-HSPLandroid/text/Layout;->getLineForVertical(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
-HSPLandroid/text/Layout;->getLineLeft(I)F+]Landroid/text/Layout$Alignment;Landroid/text/Layout$Alignment;]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getLineExtent(IZ)F
+HSPLandroid/text/Layout;->getLineForOffset(I)I
+HSPLandroid/text/Layout;->getLineForVertical(I)I
+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;missing_types
-HSPLandroid/text/Layout;->getLineRight(I)F+]Landroid/text/Layout$Alignment;Landroid/text/Layout$Alignment;]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
-HSPLandroid/text/Layout;->getLineStartPos(III)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getLineRangeForDraw(Landroid/graphics/Canvas;)J
+HSPLandroid/text/Layout;->getLineRight(I)F
+HSPLandroid/text/Layout;->getLineStartPos(III)I
 HSPLandroid/text/Layout;->getLineVisibleEnd(I)I
-HSPLandroid/text/Layout;->getLineVisibleEnd(III)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannableString;
+HSPLandroid/text/Layout;->getLineVisibleEnd(III)I
 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;+]Landroid/text/Layout;Landroid/text/DynamicLayout;
-HSPLandroid/text/Layout;->getParagraphLeadingMargin(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;
-HSPLandroid/text/Layout;->getParagraphLeft(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getParagraphAlignment(I)Landroid/text/Layout$Alignment;
+HSPLandroid/text/Layout;->getParagraphLeadingMargin(I)I
+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;+]Landroid/text/Spanned;Landroid/text/SpannedString;,Landroid/text/SpannableString;
-HSPLandroid/text/Layout;->getPrimaryHorizontal(I)F+]Landroid/text/Layout;Landroid/text/DynamicLayout;
+HSPLandroid/text/Layout;->getParagraphSpans(Landroid/text/Spanned;IILjava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/text/Layout;->getPrimaryHorizontal(I)F
 HSPLandroid/text/Layout;->getPrimaryHorizontal(IZ)F
 HSPLandroid/text/Layout;->getSelection(IILandroid/text/Layout$SelectionRectangleConsumer;)V
 HSPLandroid/text/Layout;->getSelectionPath(IILandroid/graphics/Path;)V
@@ -14944,20 +15011,17 @@
 HSPLandroid/text/Layout;->increaseWidthTo(I)V
 HSPLandroid/text/Layout;->isFallbackLineSpacingEnabled()Z
 HSPLandroid/text/Layout;->isJustificationRequired(I)Z
-HSPLandroid/text/Layout;->isRtlCharAt(I)Z+]Landroid/text/Layout;Landroid/text/DynamicLayout;
+HSPLandroid/text/Layout;->isRtlCharAt(I)Z
 HSPLandroid/text/Layout;->measurePara(Landroid/text/TextPaint;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;)F
-HSPLandroid/text/Layout;->primaryIsTrailingPrevious(I)Z+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->primaryIsTrailingPrevious(I)Z
 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/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
-HSPLandroid/text/MeasuredParagraph;->applyStyleRun(IILandroid/text/TextPaint;Landroid/graphics/text/LineBreakConfig;Landroid/graphics/text/MeasuredText$Builder;)V
 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;Landroid/text/SpannableString;]Landroid/text/AutoGrowArray$IntArray;Landroid/text/AutoGrowArray$IntArray;
+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;
 HSPLandroid/text/MeasuredParagraph;->getCharWidthAt(I)F
 HSPLandroid/text/MeasuredParagraph;->getChars()[C
 HSPLandroid/text/MeasuredParagraph;->getDirections(II)Landroid/text/Layout$Directions;
@@ -14969,11 +15033,11 @@
 HSPLandroid/text/MeasuredParagraph;->obtain()Landroid/text/MeasuredParagraph;
 HSPLandroid/text/MeasuredParagraph;->recycle()V
 HSPLandroid/text/MeasuredParagraph;->release()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
+HSPLandroid/text/MeasuredParagraph;->reset()V
+HSPLandroid/text/MeasuredParagraph;->resetAndAnalyzeBidi(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;)V
 HSPLandroid/text/PackedIntVector;->adjustValuesBelow(III)V
 HSPLandroid/text/PackedIntVector;->deleteAt(II)V
-HSPLandroid/text/PackedIntVector;->getValue(II)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/PackedIntVector;->getValue(II)I
 HSPLandroid/text/PackedIntVector;->growBuffer()V
 HSPLandroid/text/PackedIntVector;->insertAt(I[I)V
 HSPLandroid/text/PackedIntVector;->moveRowGapTo(I)V
@@ -14995,7 +15059,7 @@
 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+]Landroid/text/Spanned;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/Selection;->getSelectionStart(Ljava/lang/CharSequence;)I
 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
@@ -15005,7 +15069,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;missing_types
+HSPLandroid/text/SpanSet;->init(Landroid/text/Spanned;II)V
 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;
@@ -15026,14 +15090,14 @@
 HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;)V
 HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;II)V
 HSPLandroid/text/SpannableStringBuilder;->append(C)Landroid/text/Editable;
-HSPLandroid/text/SpannableStringBuilder;->append(C)Landroid/text/SpannableStringBuilder;+]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
+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;+]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;,Ljava/lang/String;]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
+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+]Landroid/text/SpannableStringBuilder;missing_types
-HSPLandroid/text/SpannableStringBuilder;->checkRange(Ljava/lang/String;II)V+]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->charAt(I)C
+HSPLandroid/text/SpannableStringBuilder;->checkRange(Ljava/lang/String;II)V
 HSPLandroid/text/SpannableStringBuilder;->checkSortBuffer([II)[I
 HSPLandroid/text/SpannableStringBuilder;->clear()V
 HSPLandroid/text/SpannableStringBuilder;->compareSpans(II[I[I)I
@@ -15045,7 +15109,7 @@
 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+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
+HSPLandroid/text/SpannableStringBuilder;->getSpanStart(Ljava/lang/Object;)I
 HSPLandroid/text/SpannableStringBuilder;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
 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
@@ -15066,8 +15130,8 @@
 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;+]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;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->resizeFor(I)V
 HSPLandroid/text/SpannableStringBuilder;->resolveGap(I)I
 HSPLandroid/text/SpannableStringBuilder;->restoreInvariants()V
@@ -15081,14 +15145,14 @@
 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/lang/Integer;Ljava/lang/Integer;]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
+HSPLandroid/text/SpannableStringBuilder;->setSpan(ZLjava/lang/Object;IIIZ)V
 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;+]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->toString()Ljava/lang/String;
 HSPLandroid/text/SpannableStringBuilder;->treeRoot()I
 HSPLandroid/text/SpannableStringBuilder;->updatedIntervalBound(IIIIZZ)I
-HSPLandroid/text/SpannableStringInternal;-><init>(Ljava/lang/CharSequence;IIZ)V+]Ljava/lang/CharSequence;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringInternal;-><init>(Ljava/lang/CharSequence;IIZ)V
 HSPLandroid/text/SpannableStringInternal;->charAt(I)C
 HSPLandroid/text/SpannableStringInternal;->checkRange(Ljava/lang/String;II)V
 HSPLandroid/text/SpannableStringInternal;->copySpansFromInternal(Landroid/text/SpannableStringInternal;IIZ)V
@@ -15098,7 +15162,7 @@
 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;+]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/text/SpannableStringInternal;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
 HSPLandroid/text/SpannableStringInternal;->length()I
 HSPLandroid/text/SpannableStringInternal;->nextSpanTransition(IILjava/lang/Class;)I
 HSPLandroid/text/SpannableStringInternal;->removeSpan(Ljava/lang/Object;I)V
@@ -15137,9 +15201,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;+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
+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;->reviseLineBreakConfig()V
 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;
@@ -15152,10 +15215,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+]Landroid/text/StaticLayout;Landroid/text/StaticLayout;
+HSPLandroid/text/StaticLayout;-><init>(Landroid/text/StaticLayout$Builder;)V
 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/text/TextPaint;Landroid/text/TextPaint;]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/StaticLayout;Landroid/text/StaticLayout;]Landroid/text/Spanned;Landroid/text/SpannableString;
+HSPLandroid/text/StaticLayout;->generate(Landroid/text/StaticLayout$Builder;ZZ)V
 HSPLandroid/text/StaticLayout;->getBottomPadding()I
 HSPLandroid/text/StaticLayout;->getEllipsisCount(I)I
 HSPLandroid/text/StaticLayout;->getEllipsisStart(I)I
@@ -15176,7 +15239,7 @@
 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+]Landroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;]Ljava/lang/CharSequence;Landroid/text/SpannableString;
+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;->packHyphenEdit(II)I
 HSPLandroid/text/StaticLayout;->unpackEndHyphenEdit(I)I
 HSPLandroid/text/StaticLayout;->unpackStartHyphenEdit(I)I
@@ -15198,21 +15261,21 @@
 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+]Landroid/text/TextPaint;Landroid/text/TextPaint;
-HSPLandroid/text/TextLine;->expandMetricsFromPaint(Landroid/text/TextPaint;IIIIZLandroid/graphics/Paint$FontMetricsInt;)V+]Landroid/text/TextPaint;Landroid/text/TextPaint;
+HSPLandroid/text/TextLine;->expandMetricsFromPaint(Landroid/graphics/Paint$FontMetricsInt;Landroid/text/TextPaint;)V
+HSPLandroid/text/TextLine;->expandMetricsFromPaint(Landroid/text/TextPaint;IIIIZLandroid/graphics/Paint$FontMetricsInt;)V
 HSPLandroid/text/TextLine;->extractDecorationInfo(Landroid/text/TextPaint;Landroid/text/TextLine$DecorationInfo;)V
 HSPLandroid/text/TextLine;->getOffsetBeforeAfter(IIIZIZ)I
 HSPLandroid/text/TextLine;->getOffsetToLeftRightOf(IZ)I
 HSPLandroid/text/TextLine;->getRunAdvance(Landroid/text/TextPaint;IIIIZI[FI)F
 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[FI)F+]Landroid/text/TextPaint;missing_types]Landroid/text/style/MetricAffectingSpan;Landroid/text/style/TypefaceSpan;]Landroid/text/style/CharacterStyle;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/SpanSet;Landroid/text/SpanSet;]Landroid/text/TextLine$DecorationInfo;Landroid/text/TextLine$DecorationInfo;
+HSPLandroid/text/TextLine;->handleRun(IIIZLandroid/graphics/Canvas;Landroid/text/TextShaper$GlyphsConsumer;FIIILandroid/graphics/Paint$FontMetricsInt;Z[FI)F
 HSPLandroid/text/TextLine;->handleText(Landroid/text/TextPaint;IIIIZLandroid/graphics/Canvas;Landroid/text/TextShaper$GlyphsConsumer;FIIILandroid/graphics/Paint$FontMetricsInt;ZILjava/util/ArrayList;[FI)F
 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;->metrics(Landroid/graphics/Paint$FontMetricsInt;)F+]Landroid/text/TextLine;Landroid/text/TextLine;
+HSPLandroid/text/TextLine;->measure(IZLandroid/graphics/Paint$FontMetricsInt;)F
+HSPLandroid/text/TextLine;->metrics(Landroid/graphics/Paint$FontMetricsInt;)F
 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;
+HSPLandroid/text/TextLine;->recycle(Landroid/text/TextLine;)Landroid/text/TextLine;
+HSPLandroid/text/TextLine;->set(Landroid/text/TextPaint;Ljava/lang/CharSequence;IIILandroid/text/Layout$Directions;ZLandroid/text/Layout$TabStops;IIZ)V
 HSPLandroid/text/TextLine;->updateMetrics(Landroid/graphics/Paint$FontMetricsInt;IIIII)V
 HSPLandroid/text/TextPaint;-><init>()V
 HSPLandroid/text/TextPaint;-><init>(I)V
@@ -15220,8 +15283,8 @@
 HSPLandroid/text/TextPaint;->getUnderlineThickness()F
 HSPLandroid/text/TextPaint;->set(Landroid/text/TextPaint;)V
 HSPLandroid/text/TextPaint;->setUnderlineText(IF)V
-HSPLandroid/text/TextUtils$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/CharSequence;
-HSPLandroid/text/TextUtils$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/text/TextUtils$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/CharSequence;+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/text/TextUtils$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/text/TextUtils$1;Landroid/text/TextUtils$1;
 HSPLandroid/text/TextUtils$SimpleStringSplitter;-><init>(C)V
 HSPLandroid/text/TextUtils$SimpleStringSplitter;->hasNext()Z
 HSPLandroid/text/TextUtils$SimpleStringSplitter;->iterator()Ljava/util/Iterator;
@@ -15229,6 +15292,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$TruncateAt;->values()[Landroid/text/TextUtils$TruncateAt;
 HSPLandroid/text/TextUtils;->concat([Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->copySpansFrom(Landroid/text/Spanned;IILjava/lang/Class;Landroid/text/Spannable;I)V
 HSPLandroid/text/TextUtils;->couldAffectRtl(C)Z
@@ -15237,23 +15301,23 @@
 HSPLandroid/text/TextUtils;->ellipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLandroid/text/TextUtils$TruncateAt;ZLandroid/text/TextUtils$EllipsizeCallback;)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->ellipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLandroid/text/TextUtils$TruncateAt;ZLandroid/text/TextUtils$EllipsizeCallback;Landroid/text/TextDirectionHeuristic;Ljava/lang/String;)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->emptyIfNull(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/text/TextUtils;->equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z
+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;
+HSPLandroid/text/TextUtils;->formatSimple(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]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$SpannedEllipsizer;,Landroid/text/SpannableString;]Landroid/text/GetChars;Landroid/text/Layout$SpannedEllipsizer;,Landroid/text/SpannableString;
+HSPLandroid/text/TextUtils;->getChars(Ljava/lang/CharSequence;II[CI)V
 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
+HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;CII)I+]Ljava/lang/Object;Ljava/lang/String;
 HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)I
 HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;II)I
 HSPLandroid/text/TextUtils;->isDigitsOnly(Ljava/lang/CharSequence;)Z
-HSPLandroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;missing_types
+HSPLandroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannedString;,Landroid/text/SpannableString;
 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;missing_types]Ljava/util/Iterator;missing_types
+HSPLandroid/text/TextUtils;->join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Iterable;Ljava/util/ArrayList;
 HSPLandroid/text/TextUtils;->join(Ljava/lang/CharSequence;[Ljava/lang/Object;)Ljava/lang/String;
 HSPLandroid/text/TextUtils;->lastIndexOf(Ljava/lang/CharSequence;CI)I
 HSPLandroid/text/TextUtils;->lastIndexOf(Ljava/lang/CharSequence;CII)I
@@ -15266,7 +15330,7 @@
 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;->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;
 HSPLandroid/text/TextUtils;->trimNoCopySpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->trimToParcelableSize(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
@@ -15278,6 +15342,7 @@
 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;->getBestDateTimePattern(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/text/format/DateFormat;->getCompatibleEnglishPattern(Landroid/icu/util/ULocale;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;
 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;
 HSPLandroid/text/format/DateFormat;->getTimeFormat(Landroid/content/Context;)Ljava/text/DateFormat;
@@ -15471,7 +15536,7 @@
 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;->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
@@ -15482,7 +15547,7 @@
 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
@@ -15562,11 +15627,12 @@
 HSPLandroid/util/ArrayMap;->append(Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Object;Ljava/lang/String;
 HSPLandroid/util/ArrayMap;->binarySearchHashes([III)I
 HSPLandroid/util/ArrayMap;->clear()V
-HSPLandroid/util/ArrayMap;->containsKey(Ljava/lang/Object;)Z
+HSPLandroid/util/ArrayMap;->containsKey(Ljava/lang/Object;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/util/ArrayMap;->containsValue(Ljava/lang/Object;)Z
 HSPLandroid/util/ArrayMap;->ensureCapacity(I)V
 HSPLandroid/util/ArrayMap;->entrySet()Ljava/util/Set;
-HSPLandroid/util/ArrayMap;->equals(Ljava/lang/Object;)Z
+HSPLandroid/util/ArrayMap;->equals(Ljava/lang/Object;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Object;Ljava/lang/String;,Ljava/lang/Integer;,Ljava/lang/Long;]Ljava/util/Map;Landroid/util/ArrayMap;
+HSPLandroid/util/ArrayMap;->forEach(Ljava/util/function/BiConsumer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/BiConsumer;missing_types
 HSPLandroid/util/ArrayMap;->freeArrays([I[Ljava/lang/Object;I)V
 HSPLandroid/util/ArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/util/ArrayMap;->getCollection()Landroid/util/MapCollections;
@@ -15579,7 +15645,7 @@
 HSPLandroid/util/ArrayMap;->keyAt(I)Ljava/lang/Object;
 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;missing_types
-HSPLandroid/util/ArrayMap;->putAll(Landroid/util/ArrayMap;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/util/ArrayMap;->putAll(Landroid/util/ArrayMap;)V
 HSPLandroid/util/ArrayMap;->putAll(Ljava/util/Map;)V
 HSPLandroid/util/ArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/ArrayMap;->removeAt(I)Ljava/lang/Object;
@@ -15610,7 +15676,7 @@
 HSPLandroid/util/ArraySet;->contains(Ljava/lang/Object;)Z
 HSPLandroid/util/ArraySet;->ensureCapacity(I)V
 HSPLandroid/util/ArraySet;->equals(Ljava/lang/Object;)Z
-HSPLandroid/util/ArraySet;->forEach(Ljava/util/function/Consumer;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/function/Consumer;megamorphic_types
+HSPLandroid/util/ArraySet;->forEach(Ljava/util/function/Consumer;)V
 HSPLandroid/util/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V
 HSPLandroid/util/ArraySet;->getCollection()Landroid/util/MapCollections;
 HSPLandroid/util/ArraySet;->hashCode()I
@@ -15627,7 +15693,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;+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLandroid/util/ArraySet;->valueAt(I)Ljava/lang/Object;
 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
@@ -15641,14 +15707,22 @@
 HSPLandroid/util/Base64$Decoder;-><init>(I[B)V
 HSPLandroid/util/Base64$Decoder;->process([BIIZ)Z
 HSPLandroid/util/Base64$Encoder;-><init>(I[B)V
+HSPLandroid/util/Base64$Encoder;->maxOutputSize(I)I
 HSPLandroid/util/Base64$Encoder;->process([BIIZ)Z
 HSPLandroid/util/Base64;->decode(Ljava/lang/String;I)[B
 HSPLandroid/util/Base64;->decode([BI)[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+]Landroid/util/Base64$Encoder;Landroid/util/Base64$Encoder;
+HSPLandroid/util/Base64;->encode([BIII)[B
 HSPLandroid/util/Base64;->encodeToString([BI)Ljava/lang/String;
 HSPLandroid/util/Base64;->encodeToString([BIII)Ljava/lang/String;
+HSPLandroid/util/Base64OutputStream;-><init>(Ljava/io/OutputStream;I)V
+HSPLandroid/util/Base64OutputStream;-><init>(Ljava/io/OutputStream;IZ)V
+HSPLandroid/util/Base64OutputStream;->close()V
+HSPLandroid/util/Base64OutputStream;->embiggen([BI)[B
+HSPLandroid/util/Base64OutputStream;->flushBuffer()V
+HSPLandroid/util/Base64OutputStream;->internalWrite([BIIZ)V
+HSPLandroid/util/Base64OutputStream;->write([BII)V
 HSPLandroid/util/CloseGuard;-><init>()V
 HSPLandroid/util/CloseGuard;->close()V
 HSPLandroid/util/CloseGuard;->open(Ljava/lang/String;)V
@@ -15660,7 +15734,7 @@
 HSPLandroid/util/DisplayMetrics;-><init>()V
 HSPLandroid/util/DisplayMetrics;->setTo(Landroid/util/DisplayMetrics;)V
 HSPLandroid/util/DisplayMetrics;->setToDefaults()V
-HSPLandroid/util/DisplayUtils;->getDisplayUniqueIdConfigIndex(Landroid/content/res/Resources;Ljava/lang/String;)I+]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/util/DisplayUtils;->getDisplayUniqueIdConfigIndex(Landroid/content/res/Resources;Ljava/lang/String;)I
 HSPLandroid/util/EventLog$Event;-><init>([B)V
 HSPLandroid/util/EventLog$Event;->decodeObject()Ljava/lang/Object;
 HSPLandroid/util/EventLog$Event;->getData()Ljava/lang/Object;
@@ -15703,35 +15777,35 @@
 HSPLandroid/util/IntArray;->toArray()[I
 HSPLandroid/util/IntProperty;-><init>(Ljava/lang/String;)V
 HSPLandroid/util/JsonReader;-><init>(Ljava/io/Reader;)V
-HSPLandroid/util/JsonReader;->advance()Landroid/util/JsonToken;
+HSPLandroid/util/JsonReader;->advance()Landroid/util/JsonToken;+]Landroid/util/JsonReader;Landroid/util/JsonReader;
 HSPLandroid/util/JsonReader;->beginArray()V
 HSPLandroid/util/JsonReader;->beginObject()V
 HSPLandroid/util/JsonReader;->close()V
-HSPLandroid/util/JsonReader;->decodeLiteral()Landroid/util/JsonToken;
+HSPLandroid/util/JsonReader;->decodeLiteral()Landroid/util/JsonToken;+]Lcom/android/internal/util/StringPool;Lcom/android/internal/util/StringPool;
 HSPLandroid/util/JsonReader;->decodeNumber([CII)Landroid/util/JsonToken;
 HSPLandroid/util/JsonReader;->endArray()V
 HSPLandroid/util/JsonReader;->endObject()V
-HSPLandroid/util/JsonReader;->expect(Landroid/util/JsonToken;)V
-HSPLandroid/util/JsonReader;->fillBuffer(I)Z
-HSPLandroid/util/JsonReader;->hasNext()Z
+HSPLandroid/util/JsonReader;->expect(Landroid/util/JsonToken;)V+]Landroid/util/JsonReader;Landroid/util/JsonReader;
+HSPLandroid/util/JsonReader;->fillBuffer(I)Z+]Ljava/io/Reader;Ljava/io/InputStreamReader;
+HSPLandroid/util/JsonReader;->hasNext()Z+]Landroid/util/JsonReader;Landroid/util/JsonReader;
 HSPLandroid/util/JsonReader;->nextBoolean()Z
 HSPLandroid/util/JsonReader;->nextDouble()D
 HSPLandroid/util/JsonReader;->nextInArray(Z)Landroid/util/JsonToken;
 HSPLandroid/util/JsonReader;->nextInObject(Z)Landroid/util/JsonToken;
 HSPLandroid/util/JsonReader;->nextLiteral(Z)Ljava/lang/String;
-HSPLandroid/util/JsonReader;->nextName()Ljava/lang/String;
+HSPLandroid/util/JsonReader;->nextName()Ljava/lang/String;+]Landroid/util/JsonReader;Landroid/util/JsonReader;
 HSPLandroid/util/JsonReader;->nextNonWhitespace()I
-HSPLandroid/util/JsonReader;->nextString()Ljava/lang/String;
-HSPLandroid/util/JsonReader;->nextString(C)Ljava/lang/String;
+HSPLandroid/util/JsonReader;->nextString()Ljava/lang/String;+]Landroid/util/JsonReader;Landroid/util/JsonReader;
+HSPLandroid/util/JsonReader;->nextString(C)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/internal/util/StringPool;Lcom/android/internal/util/StringPool;
 HSPLandroid/util/JsonReader;->nextValue()Landroid/util/JsonToken;
 HSPLandroid/util/JsonReader;->objectValue()Landroid/util/JsonToken;
-HSPLandroid/util/JsonReader;->peek()Landroid/util/JsonToken;
-HSPLandroid/util/JsonReader;->peekStack()Landroid/util/JsonScope;
+HSPLandroid/util/JsonReader;->peek()Landroid/util/JsonToken;+]Landroid/util/JsonScope;Landroid/util/JsonScope;
+HSPLandroid/util/JsonReader;->peekStack()Landroid/util/JsonScope;+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/util/JsonReader;->pop()Landroid/util/JsonScope;
 HSPLandroid/util/JsonReader;->push(Landroid/util/JsonScope;)V
 HSPLandroid/util/JsonReader;->readEscapeCharacter()C
 HSPLandroid/util/JsonReader;->readLiteral()Landroid/util/JsonToken;
-HSPLandroid/util/JsonReader;->replaceTop(Landroid/util/JsonScope;)V
+HSPLandroid/util/JsonReader;->replaceTop(Landroid/util/JsonScope;)V+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/util/JsonReader;->skipValue()V
 HSPLandroid/util/JsonToken;->values()[Landroid/util/JsonToken;
 HSPLandroid/util/JsonWriter;-><init>(Ljava/io/Writer;)V
@@ -15747,9 +15821,9 @@
 HSPLandroid/util/JsonWriter;->name(Ljava/lang/String;)Landroid/util/JsonWriter;
 HSPLandroid/util/JsonWriter;->newline()V
 HSPLandroid/util/JsonWriter;->open(Landroid/util/JsonScope;Ljava/lang/String;)Landroid/util/JsonWriter;
-HSPLandroid/util/JsonWriter;->peek()Landroid/util/JsonScope;
+HSPLandroid/util/JsonWriter;->peek()Landroid/util/JsonScope;+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/util/JsonWriter;->replaceTop(Landroid/util/JsonScope;)V
-HSPLandroid/util/JsonWriter;->string(Ljava/lang/String;)V
+HSPLandroid/util/JsonWriter;->string(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/Writer;Ljava/io/StringWriter;
 HSPLandroid/util/JsonWriter;->value(J)Landroid/util/JsonWriter;
 HSPLandroid/util/JsonWriter;->value(Ljava/lang/String;)Landroid/util/JsonWriter;
 HSPLandroid/util/JsonWriter;->value(Z)Landroid/util/JsonWriter;
@@ -15777,7 +15851,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+]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;->printlns(IILjava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
 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
@@ -15822,18 +15896,18 @@
 HSPLandroid/util/LruCache;->create(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/LruCache;->entryRemoved(ZLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/util/LruCache;->evictAll()V
-HSPLandroid/util/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/util/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Landroid/util/LruCache;missing_types
 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;+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Landroid/util/LruCache;missing_types
+HSPLandroid/util/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 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+]Ljava/util/Map$Entry;Ljava/util/LinkedHashMap$LinkedHashMapEntry;]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Landroid/util/LruCache;Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;
+HSPLandroid/util/LruCache;->trimToSize(I)V
 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;+]Landroid/util/MapCollections$ArrayIterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/util/MapCollections;Landroid/util/ArraySet$1;,Landroid/util/ArrayMap$1;
@@ -15848,8 +15922,8 @@
 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;-><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;
 HSPLandroid/util/MapCollections$MapIterator;->hasNext()Z
 HSPLandroid/util/MapCollections$MapIterator;->next()Ljava/lang/Object;
@@ -15863,7 +15937,7 @@
 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;+]Ljava/lang/Object;[Ljava/lang/String;]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/util/MapCollections;->toArrayHelper([Ljava/lang/Object;I)[Ljava/lang/Object;
 HSPLandroid/util/MathUtils;->addOrThrow(II)I
 HSPLandroid/util/MathUtils;->constrain(FFF)F
 HSPLandroid/util/MathUtils;->constrain(III)I
@@ -15954,14 +16028,14 @@
 HSPLandroid/util/Slog;->w(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/util/SparseArray;-><init>()V
 HSPLandroid/util/SparseArray;-><init>(I)V
-HSPLandroid/util/SparseArray;->append(ILjava/lang/Object;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+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;->contains(I)Z
-HSPLandroid/util/SparseArray;->contentEquals(Landroid/util/SparseArray;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/util/SparseArray;->contentEquals(Landroid/util/SparseArray;)Z
 HSPLandroid/util/SparseArray;->delete(I)V
 HSPLandroid/util/SparseArray;->gc()V
-HSPLandroid/util/SparseArray;->get(I)Ljava/lang/Object;
+HSPLandroid/util/SparseArray;->get(I)Ljava/lang/Object;+]Landroid/util/SparseArray;missing_types
 HSPLandroid/util/SparseArray;->get(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/SparseArray;->indexOfKey(I)I
 HSPLandroid/util/SparseArray;->indexOfValue(Ljava/lang/Object;)I
@@ -15979,10 +16053,11 @@
 HSPLandroid/util/SparseArrayMap;->get(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/SparseBooleanArray;-><init>()V
 HSPLandroid/util/SparseBooleanArray;-><init>(I)V
-HSPLandroid/util/SparseBooleanArray;->append(IZ)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
+HSPLandroid/util/SparseBooleanArray;->append(IZ)V
 HSPLandroid/util/SparseBooleanArray;->clear()V
 HSPLandroid/util/SparseBooleanArray;->clone()Landroid/util/SparseBooleanArray;
 HSPLandroid/util/SparseBooleanArray;->delete(I)V
+HSPLandroid/util/SparseBooleanArray;->equals(Ljava/lang/Object;)Z
 HSPLandroid/util/SparseBooleanArray;->get(I)Z
 HSPLandroid/util/SparseBooleanArray;->get(IZ)Z
 HSPLandroid/util/SparseBooleanArray;->indexOfKey(I)I
@@ -16011,7 +16086,7 @@
 HSPLandroid/util/SparseLongArray;-><init>(I)V
 HSPLandroid/util/SparseLongArray;->clear()V
 HSPLandroid/util/SparseLongArray;->delete(I)V
-HSPLandroid/util/SparseLongArray;->get(I)J
+HSPLandroid/util/SparseLongArray;->get(I)J+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;
 HSPLandroid/util/SparseLongArray;->get(IJ)J
 HSPLandroid/util/SparseLongArray;->indexOfKey(I)I
 HSPLandroid/util/SparseLongArray;->keyAt(I)I
@@ -16052,6 +16127,9 @@
 HSPLandroid/util/TypedValue;->complexToDimensionPixelSize(ILandroid/util/DisplayMetrics;)I
 HSPLandroid/util/TypedValue;->complexToFloat(I)F
 HSPLandroid/util/TypedValue;->complexToFraction(IFF)F
+HSPLandroid/util/TypedValue;->createComplex(II)I
+HSPLandroid/util/TypedValue;->createComplexDimension(FI)I
+HSPLandroid/util/TypedValue;->floatToComplex(F)I
 HSPLandroid/util/TypedValue;->getComplexUnit()I
 HSPLandroid/util/TypedValue;->getDimension(Landroid/util/DisplayMetrics;)F
 HSPLandroid/util/TypedValue;->getFloat()F
@@ -16149,20 +16227,22 @@
 HSPLandroid/view/Choreographer$CallbackRecord;->run(Landroid/view/Choreographer$FrameData;)V
 HSPLandroid/view/Choreographer$FrameData;->-$$Nest$fgetmFrameTimeNanos(Landroid/view/Choreographer$FrameData;)J
 HSPLandroid/view/Choreographer$FrameData;-><init>()V
+HSPLandroid/view/Choreographer$FrameData;->allocateFrameTimelines(I)V
 HSPLandroid/view/Choreographer$FrameData;->checkInCallback()V
 HSPLandroid/view/Choreographer$FrameData;->getFrameTimeNanos()J
 HSPLandroid/view/Choreographer$FrameData;->getFrameTimelines()[Landroid/view/Choreographer$FrameTimeline;
 HSPLandroid/view/Choreographer$FrameData;->getPreferredFrameTimeline()Landroid/view/Choreographer$FrameTimeline;
 HSPLandroid/view/Choreographer$FrameData;->setInCallback(Z)V+]Landroid/view/Choreographer$FrameTimeline;Landroid/view/Choreographer$FrameTimeline;
 HSPLandroid/view/Choreographer$FrameData;->update(JI)V
-HSPLandroid/view/Choreographer$FrameData;->update(JLandroid/view/DisplayEventReceiver$VsyncEventData;)V+]Landroid/view/Choreographer$FrameTimeline;Landroid/view/Choreographer$FrameTimeline;
-HSPLandroid/view/Choreographer$FrameData;->update(JLandroid/view/DisplayEventReceiver;J)V+]Landroid/view/DisplayEventReceiver;Landroid/view/Choreographer$FrameDisplayEventReceiver;]Landroid/view/Choreographer$FrameData;Landroid/view/Choreographer$FrameData;
+HSPLandroid/view/Choreographer$FrameData;->update(JLandroid/view/DisplayEventReceiver$VsyncEventData;)Landroid/view/Choreographer$FrameTimeline;+]Landroid/view/Choreographer$FrameTimeline;Landroid/view/Choreographer$FrameTimeline;
+HSPLandroid/view/Choreographer$FrameData;->update(JLandroid/view/DisplayEventReceiver;J)Landroid/view/Choreographer$FrameTimeline;+]Landroid/view/DisplayEventReceiver;Landroid/view/Choreographer$FrameDisplayEventReceiver;]Landroid/view/Choreographer$FrameData;Landroid/view/Choreographer$FrameData;
 HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;-><init>(Landroid/view/Choreographer;Landroid/os/Looper;IJ)V
 HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;->onVsync(JJILandroid/view/DisplayEventReceiver$VsyncEventData;)V
 HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;->run()V
 HSPLandroid/view/Choreographer$FrameHandler;-><init>(Landroid/view/Choreographer;Landroid/os/Looper;)V
 HSPLandroid/view/Choreographer$FrameHandler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/view/Choreographer$FrameTimeline;->-$$Nest$fgetmDeadlineNanos(Landroid/view/Choreographer$FrameTimeline;)J
+HSPLandroid/view/Choreographer$FrameTimeline;->-$$Nest$fgetmVsyncId(Landroid/view/Choreographer$FrameTimeline;)J
 HSPLandroid/view/Choreographer$FrameTimeline;-><init>()V
 HSPLandroid/view/Choreographer$FrameTimeline;->getDeadlineNanos()J
 HSPLandroid/view/Choreographer$FrameTimeline;->setInCallback(Z)V
@@ -16195,10 +16275,10 @@
 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+]Landroid/view/Choreographer$CallbackQueue;Landroid/view/Choreographer$CallbackQueue;]Landroid/view/Choreographer$FrameHandler;Landroid/view/Choreographer$FrameHandler;
+HSPLandroid/view/Choreographer;->removeCallbacksInternal(ILjava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/view/Choreographer;->removeFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
 HSPLandroid/view/Choreographer;->scheduleFrameLocked(J)V
-HSPLandroid/view/Choreographer;->scheduleVsyncLocked()V+]Landroid/view/Choreographer$FrameDisplayEventReceiver;Landroid/view/Choreographer$FrameDisplayEventReceiver;
+HSPLandroid/view/Choreographer;->scheduleVsyncLocked()V
 HSPLandroid/view/Choreographer;->setFPSDivisor(I)V
 HSPLandroid/view/ContextThemeWrapper;-><init>()V
 HSPLandroid/view/ContextThemeWrapper;-><init>(Landroid/content/Context;I)V
@@ -16209,17 +16289,17 @@
 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;+]Landroid/view/ContextThemeWrapper;Landroid/view/ContextThemeWrapper;
+HSPLandroid/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme;
 HSPLandroid/view/ContextThemeWrapper;->initializeTheme()V
 HSPLandroid/view/ContextThemeWrapper;->onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V
 HSPLandroid/view/ContextThemeWrapper;->setTheme(I)V
 HSPLandroid/view/CrossWindowBlurListeners;-><clinit>()V
 HSPLandroid/view/Display$HdrCapabilities$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/Display$HdrCapabilities;
 HSPLandroid/view/Display$HdrCapabilities$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/view/Display$HdrCapabilities;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/Display$HdrCapabilities;-><init>(Landroid/os/Parcel;)V+]Landroid/view/Display$HdrCapabilities;Landroid/view/Display$HdrCapabilities;
 HSPLandroid/view/Display$HdrCapabilities;-><init>(Landroid/os/Parcel;Landroid/view/Display$HdrCapabilities-IA;)V
 HSPLandroid/view/Display$HdrCapabilities;->equals(Ljava/lang/Object;)Z
-HSPLandroid/view/Display$HdrCapabilities;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/view/Display$HdrCapabilities;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/Display$HdrCapabilities;->toString()Ljava/lang/String;
 HSPLandroid/view/Display$HdrCapabilities;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/Display$Mode$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/Display$Mode;
@@ -16240,7 +16320,7 @@
 HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/view/DisplayAdjustments;Landroid/content/res/Resources;)V
 HSPLandroid/view/Display;->getAppVsyncOffsetNanos()J
 HSPLandroid/view/Display;->getCutout()Landroid/view/DisplayCutout;
-HSPLandroid/view/Display;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;
+HSPLandroid/view/Display;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;
 HSPLandroid/view/Display;->getDisplayId()I
 HSPLandroid/view/Display;->getDisplayInfo(Landroid/view/DisplayInfo;)Z
 HSPLandroid/view/Display;->getFlags()I
@@ -16264,6 +16344,7 @@
 HSPLandroid/view/Display;->getSupportedWideColorGamut()[Landroid/graphics/ColorSpace;
 HSPLandroid/view/Display;->getWidth()I
 HSPLandroid/view/Display;->hasAccess(IIII)Z
+HSPLandroid/view/Display;->isDozeState(I)Z
 HSPLandroid/view/Display;->isValid()Z
 HSPLandroid/view/Display;->isWideColorGamut()Z
 HSPLandroid/view/Display;->shouldReportMaxBounds()Z
@@ -16310,7 +16391,7 @@
 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;->getBoundingRects()Ljava/util/List;+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/view/DisplayCutout;Landroid/view/DisplayCutout;
+HSPLandroid/view/DisplayCutout;->getBoundingRects()Ljava/util/List;
 HSPLandroid/view/DisplayCutout;->getBoundingRectsAll()[Landroid/graphics/Rect;
 HSPLandroid/view/DisplayCutout;->getCopyOrRef(Landroid/graphics/Rect;Z)Landroid/graphics/Rect;
 HSPLandroid/view/DisplayCutout;->getSafeInsetBottom()I
@@ -16323,18 +16404,20 @@
 HSPLandroid/view/DisplayCutout;->isEmpty()Z
 HSPLandroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;-><init>()V
 HSPLandroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;-><init>(JJJ)V
+HSPLandroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;->copyFrom(Landroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;)V
 HSPLandroid/view/DisplayEventReceiver$VsyncEventData;-><init>()V
-HSPLandroid/view/DisplayEventReceiver$VsyncEventData;-><init>([Landroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;IJ)V
+HSPLandroid/view/DisplayEventReceiver$VsyncEventData;-><init>([Landroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;IIJ)V
+HSPLandroid/view/DisplayEventReceiver$VsyncEventData;->copyFrom(Landroid/view/DisplayEventReceiver$VsyncEventData;)V+]Landroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;Landroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;
 HSPLandroid/view/DisplayEventReceiver$VsyncEventData;->preferredFrameTimeline()Landroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;
 HSPLandroid/view/DisplayEventReceiver;-><init>(Landroid/os/Looper;II)V
 HSPLandroid/view/DisplayEventReceiver;-><init>(Landroid/os/Looper;IIJ)V
-HSPLandroid/view/DisplayEventReceiver;->dispatchVsync(JJI)V+]Landroid/view/DisplayEventReceiver;Landroid/view/Choreographer$FrameDisplayEventReceiver;
+HSPLandroid/view/DisplayEventReceiver;->dispatchVsync(JJI)V
 HSPLandroid/view/DisplayEventReceiver;->getLatestVsyncEventData()Landroid/view/DisplayEventReceiver$VsyncEventData;
 HSPLandroid/view/DisplayEventReceiver;->scheduleVsync()V
 HSPLandroid/view/DisplayInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/DisplayInfo;
 HSPLandroid/view/DisplayInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/DisplayInfo;-><init>()V
-HSPLandroid/view/DisplayInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/DisplayInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;
 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
@@ -16344,7 +16427,7 @@
 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/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLandroid/view/DisplayInfo;->getMode()Landroid/view/Display$Mode;
 HSPLandroid/view/DisplayInfo;->getRefreshRate()F
 HSPLandroid/view/DisplayInfo;->hasAccess(I)Z
@@ -16380,7 +16463,7 @@
 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+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
+HSPLandroid/view/FrameMetricsObserver;->onFrameMetricsAvailable(I)V
 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
@@ -16399,7 +16482,7 @@
 HSPLandroid/view/GestureDetector;->cancelTaps()V
 HSPLandroid/view/GestureDetector;->init(Landroid/content/Context;)V
 HSPLandroid/view/GestureDetector;->isConsideredDoubleTap(Landroid/view/MotionEvent;Landroid/view/MotionEvent;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;->onTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLandroid/view/GestureDetector;->recordGestureClassification(I)V
 HSPLandroid/view/GestureDetector;->setContextClickListener(Landroid/view/GestureDetector$OnContextClickListener;)V
 HSPLandroid/view/GestureDetector;->setIsLongpressEnabled(Z)V
@@ -16450,9 +16533,8 @@
 HSPLandroid/view/IWindow$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/view/IWindowManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/view/IWindowManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/view/IWindowManager$Stub$Proxy;->attachWindowContextToDisplayArea(Landroid/os/IBinder;IILandroid/os/Bundle;)Landroid/content/res/Configuration;
 HSPLandroid/view/IWindowManager$Stub$Proxy;->getCurrentAnimatorScale()F
-HSPLandroid/view/IWindowManager$Stub$Proxy;->getWindowInsets(ILandroid/os/IBinder;Landroid/view/InsetsState;)Z+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/IWindowManager$Stub$Proxy;Landroid/view/IWindowManager$Stub$Proxy;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/view/IWindowManager$Stub$Proxy;->getWindowInsets(ILandroid/os/IBinder;Landroid/view/InsetsState;)Z
 HSPLandroid/view/IWindowManager$Stub$Proxy;->hasNavigationBar(I)Z
 HSPLandroid/view/IWindowManager$Stub$Proxy;->isInTouchMode(I)Z
 HSPLandroid/view/IWindowManager$Stub$Proxy;->isKeyguardLocked()Z
@@ -16475,6 +16557,7 @@
 HSPLandroid/view/IWindowSession$Stub$Proxy;->setInsets(Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
 HSPLandroid/view/IWindowSession$Stub$Proxy;->setOnBackInvokedCallbackInfo(Landroid/view/IWindow;Landroid/window/OnBackInvokedCallbackInfo;)V
 HSPLandroid/view/IWindowSession$Stub$Proxy;->setWallpaperZoomOut(Landroid/os/IBinder;F)V
+HSPLandroid/view/IWindowSession$Stub$Proxy;->updateRequestedVisibleTypes(Landroid/view/IWindow;I)V
 HSPLandroid/view/IWindowSession$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowSession;
 HSPLandroid/view/IWindowSessionCallback$Stub;-><init>()V
 HSPLandroid/view/IWindowSessionCallback$Stub;->asBinder()Landroid/os/IBinder;
@@ -16548,7 +16631,7 @@
 HSPLandroid/view/InputMonitor;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/view/InputMonitor;->writeToParcel(Landroid/os/Parcel;I)V
 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;Landroid/view/inputmethod/ImeTracker$Token;)V+]Landroid/view/InsetsAnimationControlCallbacks;Landroid/view/InsetsAnimationThreadControlRunner$1;]Landroid/view/InsetsAnimationControlImpl;Landroid/view/InsetsAnimationControlImpl;]Landroid/view/WindowInsetsAnimation;Landroid/view/WindowInsetsAnimation;
+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;Landroid/view/inputmethod/ImeTracker$Token;)V
 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;->buildSideControlsMap(Landroid/util/SparseSetArray;Landroid/util/SparseArray;)V
@@ -16565,15 +16648,17 @@
 HSPLandroid/view/InsetsAnimationControlImpl;->getHiddenStateInsets()Landroid/graphics/Insets;
 HSPLandroid/view/InsetsAnimationControlImpl;->getInsetsFromState(Landroid/view/InsetsState;Landroid/graphics/Rect;Landroid/util/SparseIntArray;)Landroid/graphics/Insets;
 HSPLandroid/view/InsetsAnimationControlImpl;->getShownStateInsets()Landroid/graphics/Insets;
+HSPLandroid/view/InsetsAnimationControlImpl;->getStatsToken()Landroid/view/inputmethod/ImeTracker$Token;
 HSPLandroid/view/InsetsAnimationControlImpl;->getTypes()I
 HSPLandroid/view/InsetsAnimationControlImpl;->hasZeroInsetsIme()Z
 HSPLandroid/view/InsetsAnimationControlImpl;->isCancelled()Z
 HSPLandroid/view/InsetsAnimationControlImpl;->notifyControlRevoked(I)V
 HSPLandroid/view/InsetsAnimationControlImpl;->releaseLeashes()V
 HSPLandroid/view/InsetsAnimationControlImpl;->setInsetsAndAlpha(Landroid/graphics/Insets;FF)V
-HSPLandroid/view/InsetsAnimationControlImpl;->setInsetsAndAlpha(Landroid/graphics/Insets;FFZ)V
+HSPLandroid/view/InsetsAnimationControlImpl;->setInsetsAndAlpha(Landroid/graphics/Insets;FFZ)V+]Landroid/view/InsetsAnimationControlCallbacks;Landroid/view/InsetsAnimationThreadControlRunner$1;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLandroid/view/InsetsAnimationControlImpl;->updateLeashesForSide(IIILjava/util/ArrayList;Landroid/view/InsetsState;F)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Landroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams$Builder;Landroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams$Builder;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/InsetsAnimationControlImpl;->updateSurfacePosition(Landroid/util/SparseArray;)V
+HSPLandroid/view/InsetsAnimationControlRunner;->controlsType(I)Z
 HSPLandroid/view/InsetsAnimationThread;->ensureThreadLocked()V
 HSPLandroid/view/InsetsAnimationThread;->getHandler()Landroid/os/Handler;
 HSPLandroid/view/InsetsAnimationThread;->release()V
@@ -16603,11 +16688,14 @@
 HSPLandroid/view/InsetsController$$ExternalSyntheticLambda11;-><init>(Landroid/view/InsetsController;)V
 HSPLandroid/view/InsetsController$$ExternalSyntheticLambda1;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/view/InsetsController$$ExternalSyntheticLambda7;-><init>()V
-HSPLandroid/view/InsetsController$$ExternalSyntheticLambda7;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/view/InsetsController$$ExternalSyntheticLambda8;->get()Ljava/lang/Object;
+HSPLandroid/view/InsetsController$1;->getDisplayContext()Landroid/content/Context;
+HSPLandroid/view/InsetsController$1;->getTargetSurfaceControl()Landroid/view/SurfaceControl;
 HSPLandroid/view/InsetsController$2;->onFinish(Landroid/view/InsetsState;Landroid/view/InsetsState;)V
+HSPLandroid/view/InsetsController$2;->onIdNotFoundInState2(ILandroid/view/InsetsSource;)V
 HSPLandroid/view/InsetsController$3;-><init>(Landroid/view/InsetsController;)V
 HSPLandroid/view/InsetsController$3;->onFinish(Landroid/view/InsetsState;Landroid/view/InsetsState;)V
+HSPLandroid/view/InsetsController$3;->onIdMatch(Landroid/view/InsetsSource;Landroid/view/InsetsSource;)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/InsetsController$3;->onStart(Landroid/view/InsetsState;Landroid/view/InsetsState;)V
 HSPLandroid/view/InsetsController$InternalAnimationControlListener$$ExternalSyntheticLambda0;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
 HSPLandroid/view/InsetsController$InternalAnimationControlListener$$ExternalSyntheticLambda3;->getInterpolation(F)F
@@ -16615,6 +16703,9 @@
 HSPLandroid/view/InsetsController$InternalAnimationControlListener$1;->initialValue()Landroid/animation/AnimationHandler;
 HSPLandroid/view/InsetsController$InternalAnimationControlListener$1;->initialValue()Ljava/lang/Object;
 HSPLandroid/view/InsetsController$InternalAnimationControlListener$2;->onAnimationEnd(Landroid/animation/Animator;)V
+HSPLandroid/view/InsetsController$InternalAnimationControlListener$2;->onAnimationStart(Landroid/animation/Animator;)V
+HSPLandroid/view/InsetsController$InternalAnimationControlListener;->-$$Nest$fgetmHasAnimationCallbacks(Landroid/view/InsetsController$InternalAnimationControlListener;)Z
+HSPLandroid/view/InsetsController$InternalAnimationControlListener;->-$$Nest$fgetmInputMethodJankContext(Landroid/view/InsetsController$InternalAnimationControlListener;)Landroid/view/inputmethod/ImeTracker$InputMethodJankContext;
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;-><init>(ZZIIZILandroid/view/WindowInsetsAnimationControlListener;Landroid/view/inputmethod/ImeTracker$InputMethodJankContext;)V
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->calculateDurationMs()J
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->getAlphaInterpolator()Landroid/view/animation/Interpolator;
@@ -16623,14 +16714,15 @@
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->lambda$getAlphaInterpolator$2(F)F
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->lambda$getAlphaInterpolator$3(F)F
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->lambda$getAlphaInterpolator$4(F)F
+HSPLandroid/view/InsetsController$InternalAnimationControlListener;->lambda$onReady$0(Landroid/view/animation/Interpolator;Landroid/view/WindowInsetsAnimationController;Landroid/graphics/Insets;Landroid/graphics/Insets;Landroid/view/animation/Interpolator;Landroid/animation/ValueAnimator;)V+]Landroid/view/animation/Interpolator;megamorphic_types]Landroid/animation/TypeEvaluator;Landroid/view/InsetsController$$ExternalSyntheticLambda1;]Landroid/view/WindowInsetsAnimationController;Landroid/view/InsetsAnimationControlImpl;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->onAnimationFinish()V
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->onCancelled(Landroid/view/WindowInsetsAnimationController;)V
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->onFinished(Landroid/view/WindowInsetsAnimationController;)V
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->onReady(Landroid/view/WindowInsetsAnimationController;I)V
 HSPLandroid/view/InsetsController$RunningAnimation;-><init>(Landroid/view/InsetsAnimationControlRunner;I)V
+HSPLandroid/view/InsetsController;->-$$Nest$fgetmHost(Landroid/view/InsetsController;)Landroid/view/InsetsController$Host;
 HSPLandroid/view/InsetsController;->-$$Nest$sfgetsEvaluator()Landroid/animation/TypeEvaluator;
 HSPLandroid/view/InsetsController;-><init>(Landroid/view/InsetsController$Host;)V
-HSPLandroid/view/InsetsController;-><init>(Landroid/view/InsetsController$Host;Ljava/util/function/BiFunction;Landroid/os/Handler;)V
 HSPLandroid/view/InsetsController;->abortPendingImeControlRequest()V
 HSPLandroid/view/InsetsController;->applyAnimation(IZZLandroid/view/inputmethod/ImeTracker$Token;)V
 HSPLandroid/view/InsetsController;->applyAnimation(IZZZLandroid/view/inputmethod/ImeTracker$Token;)V
@@ -16642,23 +16734,24 @@
 HSPLandroid/view/InsetsController;->cancelExistingAnimations()V
 HSPLandroid/view/InsetsController;->cancelExistingControllers(I)V
 HSPLandroid/view/InsetsController;->captionInsetsUnchanged()Z
-HSPLandroid/view/InsetsController;->collectSourceControls(ZILandroid/util/SparseArray;ILandroid/view/inputmethod/ImeTracker$Token;)Landroid/util/Pair;+]Landroid/view/InsetsSourceConsumer;Landroid/view/InsetsSourceConsumer;,Landroid/view/ImeInsetsSourceConsumer;]Landroid/view/inputmethod/ImeTracker;Landroid/view/inputmethod/ImeTracker$1;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLandroid/view/InsetsController;->controlAnimationUncheckedInner(ILandroid/os/CancellationSignal;Landroid/view/WindowInsetsAnimationControlListener;Landroid/graphics/Rect;ZJLandroid/view/animation/Interpolator;IIZLandroid/view/inputmethod/ImeTracker$Token;)V+]Landroid/view/WindowInsetsAnimationControlListener;Landroid/view/InsetsController$InternalAnimationControlListener;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/view/InsetsController$Host;Landroid/view/ViewRootInsetsControllerHost;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/view/inputmethod/ImeTracker;Landroid/view/inputmethod/ImeTracker$1;]Landroid/view/inputmethod/ImeTracker$ImeLatencyTracker;Landroid/view/inputmethod/ImeTracker$ImeLatencyTracker;]Lcom/android/internal/inputmethod/ImeTracing;Lcom/android/internal/inputmethod/ImeTracingClientImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/InsetsController;->collectSourceControls(ZILandroid/util/SparseArray;ILandroid/view/inputmethod/ImeTracker$Token;)Landroid/util/Pair;
+HSPLandroid/view/InsetsController;->controlAnimationUncheckedInner(ILandroid/os/CancellationSignal;Landroid/view/WindowInsetsAnimationControlListener;Landroid/graphics/Rect;ZJLandroid/view/animation/Interpolator;IIZLandroid/view/inputmethod/ImeTracker$Token;)V
 HSPLandroid/view/InsetsController;->dispatchAnimationEnd(Landroid/view/WindowInsetsAnimation;)V
 HSPLandroid/view/InsetsController;->getAnimationType(I)I
 HSPLandroid/view/InsetsController;->getHost()Landroid/view/InsetsController$Host;
+HSPLandroid/view/InsetsController;->getImeSourceConsumer()Landroid/view/InsetsSourceConsumer;
 HSPLandroid/view/InsetsController;->getLastDispatchedState()Landroid/view/InsetsState;
 HSPLandroid/view/InsetsController;->getRequestedVisibleTypes()I
-HSPLandroid/view/InsetsController;->getSourceConsumer(Landroid/view/InsetsSource;)Landroid/view/InsetsSourceConsumer;
 HSPLandroid/view/InsetsController;->getState()Landroid/view/InsetsState;
 HSPLandroid/view/InsetsController;->getSystemBarsAppearance()I
 HSPLandroid/view/InsetsController;->hide(I)V
 HSPLandroid/view/InsetsController;->invokeControllableInsetsChangedListeners()I
-HSPLandroid/view/InsetsController;->lambda$new$2(Landroid/view/InsetsController;Landroid/view/InsetsSource;)Landroid/view/InsetsSourceConsumer;
+HSPLandroid/view/InsetsController;->lambda$new$3()V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsAnimationControlRunner;Landroid/view/InsetsAnimationControlImpl;,Landroid/view/InsetsResizeAnimationRunner;]Landroid/view/WindowInsets;Landroid/view/WindowInsets;]Landroid/view/InsetsController$Host;Landroid/view/ViewRootInsetsControllerHost;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/view/InternalInsetsAnimationController;Landroid/view/InsetsAnimationControlImpl;,Landroid/view/InsetsResizeAnimationRunner;]Landroid/view/InsetsController;Landroid/view/InsetsController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/InsetsController;->lambda$static$1(FLandroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;
 HSPLandroid/view/InsetsController;->notifyControlRevoked(Landroid/view/InsetsSourceConsumer;)V
 HSPLandroid/view/InsetsController;->notifyFinished(Landroid/view/InsetsAnimationControlRunner;Z)V
 HSPLandroid/view/InsetsController;->notifyVisibilityChanged()V
+HSPLandroid/view/InsetsController;->onAnimationStateChanged(IZ)V
 HSPLandroid/view/InsetsController;->onControlsChanged([Landroid/view/InsetsSourceControl;)V
 HSPLandroid/view/InsetsController;->onFrameChanged(Landroid/graphics/Rect;)V
 HSPLandroid/view/InsetsController;->onStateChanged(Landroid/view/InsetsState;)Z
@@ -16668,7 +16761,7 @@
 HSPLandroid/view/InsetsController;->reportRequestedVisibleTypes()V
 HSPLandroid/view/InsetsController;->setRequestedVisibleTypes(II)V
 HSPLandroid/view/InsetsController;->show(I)V
-HSPLandroid/view/InsetsController;->show(IZLandroid/view/inputmethod/ImeTracker$Token;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/InsetsController$Host;Landroid/view/ViewRootInsetsControllerHost;]Landroid/view/inputmethod/ImeTracker;Landroid/view/inputmethod/ImeTracker$1;]Landroid/view/inputmethod/ImeTracker$ImeLatencyTracker;Landroid/view/inputmethod/ImeTracker$ImeLatencyTracker;]Lcom/android/internal/inputmethod/ImeTracing;Lcom/android/internal/inputmethod/ImeTracingClientImpl;]Landroid/view/InsetsController;Landroid/view/InsetsController;
+HSPLandroid/view/InsetsController;->show(IZLandroid/view/inputmethod/ImeTracker$Token;)V
 HSPLandroid/view/InsetsController;->updateCompatSysUiVisibility()V
 HSPLandroid/view/InsetsController;->updateDisabledUserAnimationTypes(I)V
 HSPLandroid/view/InsetsController;->updateState(Landroid/view/InsetsState;)V
@@ -16678,17 +16771,17 @@
 HSPLandroid/view/InsetsSource;-><init>(II)V
 HSPLandroid/view/InsetsSource;-><init>(Landroid/os/Parcel;)V
 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;Landroid/graphics/Rect;Z)Landroid/graphics/Insets;
 HSPLandroid/view/InsetsSource;->calculateInsets(Landroid/graphics/Rect;Z)Landroid/graphics/Insets;
 HSPLandroid/view/InsetsSource;->calculateVisibleInsets(Landroid/graphics/Rect;)Landroid/graphics/Insets;
-HSPLandroid/view/InsetsSource;->equals(Ljava/lang/Object;)Z+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
+HSPLandroid/view/InsetsSource;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/InsetsSource;->equals(Ljava/lang/Object;Z)Z
+HSPLandroid/view/InsetsSource;->getFlags()I
 HSPLandroid/view/InsetsSource;->getFrame()Landroid/graphics/Rect;
 HSPLandroid/view/InsetsSource;->getId()I
 HSPLandroid/view/InsetsSource;->getIntersection(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
 HSPLandroid/view/InsetsSource;->getType()I
 HSPLandroid/view/InsetsSource;->getVisibleFrame()Landroid/graphics/Rect;
-HSPLandroid/view/InsetsSource;->insetsRoundedCornerFrame()Z
 HSPLandroid/view/InsetsSource;->isUserControllable()Z
 HSPLandroid/view/InsetsSource;->isVisible()Z
 HSPLandroid/view/InsetsSource;->setVisible(Z)Landroid/view/InsetsSource;
@@ -16700,6 +16793,8 @@
 HSPLandroid/view/InsetsSourceConsumer;->getId()I
 HSPLandroid/view/InsetsSourceConsumer;->getType()I
 HSPLandroid/view/InsetsSourceConsumer;->isRequestedVisibleAwaitingControl()Z
+HSPLandroid/view/InsetsSourceConsumer;->isShowRequested()Z
+HSPLandroid/view/InsetsSourceConsumer;->onAnimationStateChanged(Z)Z
 HSPLandroid/view/InsetsSourceConsumer;->onPerceptible(Z)V
 HSPLandroid/view/InsetsSourceConsumer;->onWindowFocusGained(Z)V
 HSPLandroid/view/InsetsSourceConsumer;->onWindowFocusLost()V
@@ -16760,18 +16855,18 @@
 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;)Landroid/util/SparseArray;+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/view/DisplayCutout$ParcelableWrapper;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/view/InsetsState;->readFromParcel(Landroid/os/Parcel;)Landroid/util/SparseArray;
+HSPLandroid/view/InsetsState;->removeSourceAt(I)V
 HSPLandroid/view/InsetsState;->set(Landroid/view/InsetsState;I)V
 HSPLandroid/view/InsetsState;->set(Landroid/view/InsetsState;Z)V
 HSPLandroid/view/InsetsState;->setDisplayCutout(Landroid/view/DisplayCutout;)V
 HSPLandroid/view/InsetsState;->setDisplayFrame(Landroid/graphics/Rect;)V
 HSPLandroid/view/InsetsState;->setPrivacyIndicatorBounds(Landroid/view/PrivacyIndicatorBounds;)V
 HSPLandroid/view/InsetsState;->setRoundedCorners(Landroid/view/RoundedCorners;)V
-HSPLandroid/view/InsetsState;->sourceAt(I)Landroid/view/InsetsSource;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/view/InsetsState;->sourceAt(I)Landroid/view/InsetsSource;
 HSPLandroid/view/InsetsState;->sourceIdAt(I)I
-HSPLandroid/view/InsetsState;->sourceSize()I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLandroid/view/InsetsState;->toPublicType(I)I
-HSPLandroid/view/InsetsState;->traverse(Landroid/view/InsetsState;Landroid/view/InsetsState;Landroid/view/InsetsState$OnTraverseCallbacks;)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsState$OnTraverseCallbacks;Landroid/view/InsetsController$2;,Landroid/view/InsetsController$3;
+HSPLandroid/view/InsetsState;->sourceSize()I
+HSPLandroid/view/InsetsState;->traverse(Landroid/view/InsetsState;Landroid/view/InsetsState;Landroid/view/InsetsState$OnTraverseCallbacks;)V
 HSPLandroid/view/InsetsState;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/KeyCharacterMap$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/KeyCharacterMap;
 HSPLandroid/view/KeyCharacterMap$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -16822,31 +16917,31 @@
 HSPLandroid/view/LayoutInflater;-><init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V
 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/content/Context;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/Class;Ljava/lang/Class;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;
 HSPLandroid/view/LayoutInflater;->createView(Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
 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/util/AttributeSet;Landroid/content/res/XmlBlock$Parser;]Landroid/view/LayoutInflater;missing_types]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;Z)Landroid/view/View;
 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;+]Landroid/view/View;missing_types]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/view/ViewGroup;missing_types]Landroid/view/LayoutInflater;missing_types]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/LayoutInflater;->inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;Z)Landroid/view/View;
 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/LayoutInflater;missing_types]Landroid/view/ViewGroup;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;->rInflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/View;Landroid/content/Context;Landroid/util/AttributeSet;Z)V
+HSPLandroid/view/LayoutInflater;->rInflateChildren(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/View;Landroid/util/AttributeSet;Z)V
 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;+]Landroid/view/LayoutInflater$Factory2;missing_types
+HSPLandroid/view/LayoutInflater;->tryCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
 HSPLandroid/view/LayoutInflater;->tryInflatePrecompiled(ILandroid/content/res/Resources;Landroid/view/ViewGroup;Z)Landroid/view/View;
-HSPLandroid/view/LayoutInflater;->verifyClassLoader(Ljava/lang/reflect/Constructor;)Z+]Ljava/lang/Class;Ljava/lang/Class;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;]Landroid/content/Context;missing_types
+HSPLandroid/view/LayoutInflater;->verifyClassLoader(Ljava/lang/reflect/Constructor;)Z
 HSPLandroid/view/MenuInflater;-><init>(Landroid/content/Context;)V
 HSPLandroid/view/MotionEvent$PointerCoords;-><init>()V
 HSPLandroid/view/MotionEvent$PointerProperties;-><init>()V
@@ -16864,7 +16959,6 @@
 HSPLandroid/view/MotionEvent;->getDownTime()J
 HSPLandroid/view/MotionEvent;->getEdgeFlags()I
 HSPLandroid/view/MotionEvent;->getEventTime()J
-HSPLandroid/view/MotionEvent;->getEventTimeNano()J
 HSPLandroid/view/MotionEvent;->getFlags()I
 HSPLandroid/view/MotionEvent;->getHistoricalEventTime(I)J
 HSPLandroid/view/MotionEvent;->getHistoricalX(II)F
@@ -16890,7 +16984,7 @@
 HSPLandroid/view/MotionEvent;->initialize(IIIIIIIIIFFFFJJI[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;)Z
 HSPLandroid/view/MotionEvent;->isTargetAccessibilityFocus()Z
 HSPLandroid/view/MotionEvent;->isTouchEvent()Z
-HSPLandroid/view/MotionEvent;->obtain()Landroid/view/MotionEvent;+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HSPLandroid/view/MotionEvent;->obtain()Landroid/view/MotionEvent;
 HSPLandroid/view/MotionEvent;->obtain(JJIFFFFIFFII)Landroid/view/MotionEvent;
 HSPLandroid/view/MotionEvent;->obtain(JJIFFFFIFFIIII)Landroid/view/MotionEvent;
 HSPLandroid/view/MotionEvent;->obtain(JJIFFI)Landroid/view/MotionEvent;
@@ -16964,6 +17058,7 @@
 HSPLandroid/view/ScaleGestureDetector;->setQuickScaleEnabled(Z)V
 HSPLandroid/view/ScaleGestureDetector;->setStylusScaleEnabled(Z)V
 HSPLandroid/view/Surface$CompatibleCanvas;-><init>(Landroid/view/Surface;)V
+HSPLandroid/view/Surface$CompatibleCanvas;-><init>(Landroid/view/Surface;Landroid/view/Surface$CompatibleCanvas-IA;)V
 HSPLandroid/view/Surface;-><init>()V
 HSPLandroid/view/Surface;-><init>(J)V
 HSPLandroid/view/Surface;-><init>(Landroid/graphics/SurfaceTexture;)V
@@ -17003,6 +17098,7 @@
 HSPLandroid/view/SurfaceControl$Builder;->setOpaque(Z)Landroid/view/SurfaceControl$Builder;
 HSPLandroid/view/SurfaceControl$Builder;->setParent(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Builder;
 HSPLandroid/view/SurfaceControl$Builder;->unsetBufferSize()V
+HSPLandroid/view/SurfaceControl$RefreshRateRange;-><init>(FF)V
 HSPLandroid/view/SurfaceControl$Transaction;-><init>()V
 HSPLandroid/view/SurfaceControl$Transaction;-><init>(J)V
 HSPLandroid/view/SurfaceControl$Transaction;->apply()V
@@ -17016,6 +17112,7 @@
 HSPLandroid/view/SurfaceControl$Transaction;->notifyReparentedSurfaces()V
 HSPLandroid/view/SurfaceControl$Transaction;->remove(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceControl$Transaction;->reparent(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
+HSPLandroid/view/SurfaceControl$Transaction;->sanitize(II)V
 HSPLandroid/view/SurfaceControl$Transaction;->setAlpha(Landroid/view/SurfaceControl;F)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceControl$Transaction;->setBufferSize(Landroid/view/SurfaceControl;II)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceControl$Transaction;->setColor(Landroid/view/SurfaceControl;[F)Landroid/view/SurfaceControl$Transaction;
@@ -17033,8 +17130,10 @@
 HSPLandroid/view/SurfaceControl$Transaction;->setWindowCrop(Landroid/view/SurfaceControl;Landroid/graphics/Rect;)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceControl$Transaction;->show(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceControl$Transaction;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/SurfaceControl;->-$$Nest$mcheckNotReleased(Landroid/view/SurfaceControl;)V
 HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeApplyTransaction(JZ)V
 HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeCreateTransaction()J
+HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSanitize(JII)V
 HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSetDestinationFrame(JJIIII)V
 HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSetExtendedRangeBrightness(JJFF)V
 HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSetFlags(JJII)V
@@ -17042,6 +17141,7 @@
 HSPLandroid/view/SurfaceControl;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/view/SurfaceControl;-><init>(Landroid/view/SurfaceControl;Ljava/lang/String;)V
 HSPLandroid/view/SurfaceControl;-><init>(Landroid/view/SurfaceSession;Ljava/lang/String;IIIILandroid/view/SurfaceControl;Landroid/util/SparseIntArray;Ljava/lang/ref/WeakReference;Ljava/lang/String;)V
+HSPLandroid/view/SurfaceControl;->addToRegistry()V
 HSPLandroid/view/SurfaceControl;->assignNativeObject(JLjava/lang/String;)V
 HSPLandroid/view/SurfaceControl;->checkNotReleased()V
 HSPLandroid/view/SurfaceControl;->copyFrom(Landroid/view/SurfaceControl;Ljava/lang/String;)V
@@ -17051,8 +17151,14 @@
 HSPLandroid/view/SurfaceControl;->isValid()Z
 HSPLandroid/view/SurfaceControl;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/view/SurfaceControl;->release()V
+HSPLandroid/view/SurfaceControl;->removeFromRegistry()V
 HSPLandroid/view/SurfaceControl;->rotationToBufferTransform(I)I
 HSPLandroid/view/SurfaceControl;->setTransformHint(I)V
+HSPLandroid/view/SurfaceControl;->setUnreleasedWarningCallSite(Ljava/lang/String;)V
+HSPLandroid/view/SurfaceControlRegistry$DefaultReporter;-><init>()V
+HSPLandroid/view/SurfaceControlRegistry$DefaultReporter;-><init>(Landroid/view/SurfaceControlRegistry$DefaultReporter-IA;)V
+HSPLandroid/view/SurfaceControlRegistry;-><clinit>()V
+HSPLandroid/view/SurfaceControlRegistry;->getProcessInstance()Landroid/view/SurfaceControlRegistry;
 HSPLandroid/view/SurfaceSession;-><init>()V
 HSPLandroid/view/SurfaceSession;->finalize()V
 HSPLandroid/view/SurfaceSession;->kill()V
@@ -17060,8 +17166,6 @@
 HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda1;->onScrollChanged()V
 HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda2;->onPreDraw()Z
 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
 HSPLandroid/view/SurfaceView$SurfaceViewPositionUpdateListener;->positionLost(J)V
@@ -17089,7 +17193,7 @@
 HSPLandroid/view/SurfaceView;->onSetSurfacePositionAndScale(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;IIFF)V
 HSPLandroid/view/SurfaceView;->onWindowVisibilityChanged(I)V
 HSPLandroid/view/SurfaceView;->performDrawFinished()V
-HSPLandroid/view/SurfaceView;->performSurfaceTransaction(Landroid/view/ViewRootImpl;Landroid/content/res/CompatibilityInfo$Translator;ZZZZLandroid/view/SurfaceControl$Transaction;)Z+]Landroid/view/SurfaceView;Landroid/view/SurfaceView;,Landroid/widget/inline/InlineContentView$4;]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/view/SurfaceView;->performSurfaceTransaction(Landroid/view/ViewRootImpl;Landroid/content/res/CompatibilityInfo$Translator;ZZZZLandroid/view/SurfaceControl$Transaction;)Z
 HSPLandroid/view/SurfaceView;->releaseSurfaces(Z)V
 HSPLandroid/view/SurfaceView;->replacePositionUpdateListener(II)V
 HSPLandroid/view/SurfaceView;->requiresSurfaceControlCreation(ZZ)Z
@@ -17103,8 +17207,8 @@
 HSPLandroid/view/SurfaceView;->updateBackgroundVisibility(Landroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/view/SurfaceView;->updateEmbeddedAccessibilityMatrix(Z)V
 HSPLandroid/view/SurfaceView;->updateRelativeZ(Landroid/view/SurfaceControl$Transaction;)V
-HSPLandroid/view/SurfaceView;->updateSurface()V+]Landroid/view/Surface;Landroid/view/Surface;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
-HSPLandroid/view/SurfaceView;->vriDrawStarted(Z)V+]Landroid/view/SurfaceView;Landroid/view/SurfaceView;,Landroid/widget/inline/InlineContentView$4;,Landroid/widget/VideoView;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
+HSPLandroid/view/SurfaceView;->updateSurface()V
+HSPLandroid/view/SurfaceView;->vriDrawStarted(Z)V
 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;
@@ -17146,7 +17250,7 @@
 HSPLandroid/view/ThreadedRenderer;->destroy()V
 HSPLandroid/view/ThreadedRenderer;->destroyHardwareResources(Landroid/view/View;)V
 HSPLandroid/view/ThreadedRenderer;->destroyResources(Landroid/view/View;)V
-HSPLandroid/view/ThreadedRenderer;->draw(Landroid/view/View;Landroid/view/View$AttachInfo;Landroid/view/ThreadedRenderer$DrawCallbacks;)V+]Landroid/view/ViewFrameInfo;Landroid/view/ViewFrameInfo;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/ThreadedRenderer;->draw(Landroid/view/View;Landroid/view/View$AttachInfo;Landroid/view/ThreadedRenderer$DrawCallbacks;)V
 HSPLandroid/view/ThreadedRenderer;->dumpArgsToFlags([Ljava/lang/String;)I
 HSPLandroid/view/ThreadedRenderer;->getHeight()I
 HSPLandroid/view/ThreadedRenderer;->getWidth()I
@@ -17167,9 +17271,9 @@
 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;missing_types]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ThreadedRenderer$DrawCallbacks;Landroid/view/ViewRootImpl;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/ThreadedRenderer;->updateRootDisplayList(Landroid/view/View;Landroid/view/ThreadedRenderer$DrawCallbacks;)V
 HSPLandroid/view/ThreadedRenderer;->updateSurface(Landroid/view/Surface;)V
-HSPLandroid/view/ThreadedRenderer;->updateViewTreeDisplayList(Landroid/view/View;)V+]Landroid/view/View;missing_types
+HSPLandroid/view/ThreadedRenderer;->updateViewTreeDisplayList(Landroid/view/View;)V
 HSPLandroid/view/ThreadedRenderer;->updateWebViewOverlayCallbacks()V
 HSPLandroid/view/TouchDelegate;-><init>(Landroid/graphics/Rect;Landroid/view/View;)V
 HSPLandroid/view/VelocityTracker;-><init>(I)V
@@ -17239,9 +17343,12 @@
 HSPLandroid/view/View$ForegroundInfo;-><init>()V
 HSPLandroid/view/View$ListenerInfo;->-$$Nest$fgetmHandwritingArea(Landroid/view/View$ListenerInfo;)Landroid/graphics/Rect;
 HSPLandroid/view/View$ListenerInfo;->-$$Nest$fgetmKeepClearRects(Landroid/view/View$ListenerInfo;)Ljava/util/List;
+HSPLandroid/view/View$ListenerInfo;->-$$Nest$fgetmOnAttachStateChangeListeners(Landroid/view/View$ListenerInfo;)Ljava/util/concurrent/CopyOnWriteArrayList;
 HSPLandroid/view/View$ListenerInfo;->-$$Nest$fgetmPreferKeepClear(Landroid/view/View$ListenerInfo;)Z
 HSPLandroid/view/View$ListenerInfo;->-$$Nest$fgetmUnrestrictedKeepClearRects(Landroid/view/View$ListenerInfo;)Ljava/util/List;
 HSPLandroid/view/View$ListenerInfo;->-$$Nest$fputmHandwritingArea(Landroid/view/View$ListenerInfo;Landroid/graphics/Rect;)V
+HSPLandroid/view/View$ListenerInfo;->-$$Nest$fputmOnAttachStateChangeListeners(Landroid/view/View$ListenerInfo;Ljava/util/concurrent/CopyOnWriteArrayList;)V
+HSPLandroid/view/View$ListenerInfo;->-$$Nest$fputmOnTouchListener(Landroid/view/View$ListenerInfo;Landroid/view/View$OnTouchListener;)V
 HSPLandroid/view/View$ListenerInfo;->-$$Nest$fputmPositionChangedUpdate(Landroid/view/View$ListenerInfo;Ljava/lang/Runnable;)V
 HSPLandroid/view/View$ListenerInfo;-><init>()V
 HSPLandroid/view/View$MeasureSpec;->getMode(I)I
@@ -17252,13 +17359,14 @@
 HSPLandroid/view/View$ScrollabilityCache;-><init>(Landroid/view/ViewConfiguration;Landroid/view/View;)V
 HSPLandroid/view/View$ScrollabilityCache;->run()V
 HSPLandroid/view/View$TintInfo;-><init>()V
+HSPLandroid/view/View$TransformationInfo;->-$$Nest$fgetmAlpha(Landroid/view/View$TransformationInfo;)F
 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;missing_types]Ljava/lang/Object;missing_types]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;]Landroid/content/Context;missing_types]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;]Landroid/content/Context;missing_types]Ljava/lang/Class;Ljava/lang/Class;
 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;missing_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/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/content/Context;missing_types
 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
@@ -17266,7 +17374,7 @@
 HSPLandroid/view/View;->addOnLayoutChangeListener(Landroid/view/View$OnLayoutChangeListener;)V
 HSPLandroid/view/View;->animate()Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/View;->announceForAccessibility(Ljava/lang/CharSequence;)V
-HSPLandroid/view/View;->appendId(Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/View;missing_types]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/view/View;->appendId(Ljava/lang/StringBuilder;)V
 HSPLandroid/view/View;->applyBackgroundTint()V
 HSPLandroid/view/View;->applyForegroundTint()V
 HSPLandroid/view/View;->applyInsets(Landroid/graphics/Rect;)V
@@ -17279,11 +17387,11 @@
 HSPLandroid/view/View;->buildDrawingCache(Z)V
 HSPLandroid/view/View;->buildDrawingCacheImpl(Z)V
 HSPLandroid/view/View;->buildLayer()V
-HSPLandroid/view/View;->calculateAccessibilityDataSensitive()V+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->calculateIsImportantForContentCapture()Z+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/view/ViewParent;missing_types
+HSPLandroid/view/View;->calculateAccessibilityDataSensitive()V
+HSPLandroid/view/View;->calculateIsImportantForContentCapture()Z
 HSPLandroid/view/View;->canHaveDisplayList()Z
 HSPLandroid/view/View;->canNotifyAutofillEnterExitEvent()Z
-HSPLandroid/view/View;->canReceivePointerEvents()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->canReceivePointerEvents()Z
 HSPLandroid/view/View;->canResolveLayoutDirection()Z
 HSPLandroid/view/View;->canResolveTextDirection()Z
 HSPLandroid/view/View;->canScrollHorizontally(I)Z
@@ -17304,7 +17412,7 @@
 HSPLandroid/view/View;->clearParentsWantFocus()V
 HSPLandroid/view/View;->clearTranslationState()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;->collectPreferKeepClearRects()Ljava/util/List;
 HSPLandroid/view/View;->collectUnrestrictedPreferKeepClearRects()Ljava/util/List;
 HSPLandroid/view/View;->combineMeasuredStates(II)I
 HSPLandroid/view/View;->combineVisibility(II)I
@@ -17312,7 +17420,7 @@
 HSPLandroid/view/View;->computeHorizontalScrollExtent()I
 HSPLandroid/view/View;->computeHorizontalScrollOffset()I
 HSPLandroid/view/View;->computeHorizontalScrollRange()I
-HSPLandroid/view/View;->computeOpaqueFlags()V+]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/view/View;->computeOpaqueFlags()V
 HSPLandroid/view/View;->computeScroll()V
 HSPLandroid/view/View;->computeSystemWindowInsets(Landroid/view/WindowInsets;Landroid/graphics/Rect;)Landroid/view/WindowInsets;
 HSPLandroid/view/View;->computeVerticalScrollExtent()I
@@ -17321,12 +17429,12 @@
 HSPLandroid/view/View;->damageInParent()V
 HSPLandroid/view/View;->destroyDrawingCache()V
 HSPLandroid/view/View;->destroyHardwareResources()V
-HSPLandroid/view/View;->dispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;+]Landroid/view/View;missing_types
-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;
+HSPLandroid/view/View;->dispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
+HSPLandroid/view/View;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V
 HSPLandroid/view/View;->dispatchCancelPendingInputEvents()V
 HSPLandroid/view/View;->dispatchCollectViewAttributes(Landroid/view/View$AttachInfo;I)V
 HSPLandroid/view/View;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLandroid/view/View;->dispatchDetachedFromWindow()V+]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;Landroid/view/ViewOverlay$OverlayViewGroup;]Ljava/util/List;Ljava/util/Collections$EmptyList;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;]Landroid/view/View$OnAttachStateChangeListener;missing_types
+HSPLandroid/view/View;->dispatchDetachedFromWindow()V+]Landroid/view/View;missing_types]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]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
@@ -17354,16 +17462,17 @@
 HSPLandroid/view/View;->dispatchVisibilityChanged(Landroid/view/View;I)V
 HSPLandroid/view/View;->dispatchWindowFocusChanged(Z)V
 HSPLandroid/view/View;->dispatchWindowInsetsAnimationEnd(Landroid/view/WindowInsetsAnimation;)V
+HSPLandroid/view/View;->dispatchWindowInsetsAnimationProgress(Landroid/view/WindowInsets;Ljava/util/List;)Landroid/view/WindowInsets;
 HSPLandroid/view/View;->dispatchWindowSystemUiVisiblityChanged(I)V
 HSPLandroid/view/View;->dispatchWindowVisibilityChanged(I)V
-HSPLandroid/view/View;->draw(Landroid/graphics/Canvas;)V+]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/View;missing_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;
-HSPLandroid/view/View;->drawAutofilledHighlight(Landroid/graphics/Canvas;)V+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->drawBackground(Landroid/graphics/Canvas;)V+]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;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/view/View;->draw(Landroid/graphics/Canvas;Landroid/view/ViewGroup;J)Z
+HSPLandroid/view/View;->drawAutofilledHighlight(Landroid/graphics/Canvas;)V
+HSPLandroid/view/View;->drawBackground(Landroid/graphics/Canvas;)V
 HSPLandroid/view/View;->drawDefaultFocusHighlight(Landroid/graphics/Canvas;)V
-HSPLandroid/view/View;->drawableHotspotChanged(FF)V+]Landroid/view/View;missing_types]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/StateListDrawable;,Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
-HSPLandroid/view/View;->drawableStateChanged()V+]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;]Landroid/view/View;missing_types]Landroid/graphics/drawable/Drawable;missing_types
-HSPLandroid/view/View;->drawsWithRenderNode(Landroid/graphics/Canvas;)Z+]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/view/View;->drawableHotspotChanged(FF)V
+HSPLandroid/view/View;->drawableStateChanged()V
+HSPLandroid/view/View;->drawsWithRenderNode(Landroid/graphics/Canvas;)Z
 HSPLandroid/view/View;->ensureTransformationInfo()V
 HSPLandroid/view/View;->findAccessibilityFocusHost(Z)Landroid/view/View;
 HSPLandroid/view/View;->findFocus()Landroid/view/View;
@@ -17380,7 +17489,7 @@
 HSPLandroid/view/View;->fitSystemWindowsInt(Landroid/graphics/Rect;)Z
 HSPLandroid/view/View;->focusSearch(I)Landroid/view/View;
 HSPLandroid/view/View;->forceLayout()V
-HSPLandroid/view/View;->gatherTransparentRegion(Landroid/graphics/Region;)Z+]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/View;missing_types
+HSPLandroid/view/View;->gatherTransparentRegion(Landroid/graphics/Region;)Z
 HSPLandroid/view/View;->generateViewId()I
 HSPLandroid/view/View;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/view/View;->getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate;
@@ -17399,7 +17508,7 @@
 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+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;Z)V
 HSPLandroid/view/View;->getClipBounds()Landroid/graphics/Rect;
 HSPLandroid/view/View;->getClipToOutline()Z
 HSPLandroid/view/View;->getContentCaptureSession()Landroid/view/contentcapture/ContentCaptureSession;
@@ -17407,12 +17516,12 @@
 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;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;missing_types
+HSPLandroid/view/View;->getDrawableRenderNode(Landroid/graphics/drawable/Drawable;Landroid/graphics/RenderNode;)Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->getDrawableState()[I
 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+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->getElevation()F
 HSPLandroid/view/View;->getFilterTouchesWhenObscured()Z
 HSPLandroid/view/View;->getFinalAlpha()F
 HSPLandroid/view/View;->getFitsSystemWindows()Z
@@ -17422,9 +17531,9 @@
 HSPLandroid/view/View;->getForeground()Landroid/graphics/drawable/Drawable;
 HSPLandroid/view/View;->getForegroundGravity()I
 HSPLandroid/view/View;->getGlobalVisibleRect(Landroid/graphics/Rect;)Z
-HSPLandroid/view/View;->getGlobalVisibleRect(Landroid/graphics/Rect;Landroid/graphics/Point;)Z+]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewParent;missing_types
+HSPLandroid/view/View;->getGlobalVisibleRect(Landroid/graphics/Rect;Landroid/graphics/Point;)Z
 HSPLandroid/view/View;->getHandler()Landroid/os/Handler;
-HSPLandroid/view/View;->getHasOverlappingRendering()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->getHasOverlappingRendering()Z
 HSPLandroid/view/View;->getHeight()I
 HSPLandroid/view/View;->getHitRect(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->getHorizontalFadingEdgeLength()I
@@ -17441,12 +17550,12 @@
 HSPLandroid/view/View;->getLayoutParams()Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/view/View;->getLeft()I
 HSPLandroid/view/View;->getListenerInfo()Landroid/view/View$ListenerInfo;
-HSPLandroid/view/View;->getLocalVisibleRect(Landroid/graphics/Rect;)Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/View;missing_types
+HSPLandroid/view/View;->getLocalVisibleRect(Landroid/graphics/Rect;)Z
 HSPLandroid/view/View;->getLocationInSurface([I)V
-HSPLandroid/view/View;->getLocationInWindow([I)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->getLocationInWindow([I)V
 HSPLandroid/view/View;->getLocationOnScreen()[I
-HSPLandroid/view/View;->getLocationOnScreen([I)V+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]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;->getLocationOnScreen([I)V
+HSPLandroid/view/View;->getMatrix()Landroid/graphics/Matrix;
 HSPLandroid/view/View;->getMeasuredHeight()I
 HSPLandroid/view/View;->getMeasuredState()I
 HSPLandroid/view/View;->getMeasuredWidth()I
@@ -17458,14 +17567,14 @@
 HSPLandroid/view/View;->getOverScrollMode()I
 HSPLandroid/view/View;->getPaddingBottom()I
 HSPLandroid/view/View;->getPaddingEnd()I
-HSPLandroid/view/View;->getPaddingLeft()I+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->getPaddingLeft()I
 HSPLandroid/view/View;->getPaddingRight()I
 HSPLandroid/view/View;->getPaddingStart()I
 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]Landroid/view/View;missing_types
 HSPLandroid/view/View;->getRawLayoutDirection()I
 HSPLandroid/view/View;->getRawTextAlignment()I
 HSPLandroid/view/View;->getRawTextDirection()I
@@ -17485,8 +17594,8 @@
 HSPLandroid/view/View;->getSolidColor()I
 HSPLandroid/view/View;->getStateListAnimator()Landroid/animation/StateListAnimator;
 HSPLandroid/view/View;->getStraightVerticalScrollBarBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-HSPLandroid/view/View;->getSuggestedMinimumHeight()I+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
-HSPLandroid/view/View;->getSuggestedMinimumWidth()I+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
+HSPLandroid/view/View;->getSuggestedMinimumHeight()I
+HSPLandroid/view/View;->getSuggestedMinimumWidth()I
 HSPLandroid/view/View;->getSystemGestureExclusionRects()Ljava/util/List;
 HSPLandroid/view/View;->getSystemUiVisibility()I
 HSPLandroid/view/View;->getTag()Ljava/lang/Object;
@@ -17499,7 +17608,7 @@
 HSPLandroid/view/View;->getTransitionName()Ljava/lang/String;
 HSPLandroid/view/View;->getTranslationX()F
 HSPLandroid/view/View;->getTranslationY()F
-HSPLandroid/view/View;->getTranslationZ()F+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->getTranslationZ()F
 HSPLandroid/view/View;->getVerticalFadingEdgeLength()I
 HSPLandroid/view/View;->getVerticalScrollbarWidth()I
 HSPLandroid/view/View;->getViewRootImpl()Landroid/view/ViewRootImpl;
@@ -17516,7 +17625,7 @@
 HSPLandroid/view/View;->getWindowVisibleDisplayFrame(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->getX()F
 HSPLandroid/view/View;->getY()F
-HSPLandroid/view/View;->getZ()F+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->getZ()F
 HSPLandroid/view/View;->handleFocusGainInternal(ILandroid/graphics/Rect;)V
 HSPLandroid/view/View;->handleScrollBarDragging(Landroid/view/MotionEvent;)Z
 HSPLandroid/view/View;->hasAncestorThatBlocksDescendantFocus()Z
@@ -17531,7 +17640,7 @@
 HSPLandroid/view/View;->hasNestedScrollingParent()Z
 HSPLandroid/view/View;->hasOnClickListeners()Z
 HSPLandroid/view/View;->hasOverlappingRendering()Z
-HSPLandroid/view/View;->hasRtlSupport()Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/Context;missing_types
+HSPLandroid/view/View;->hasRtlSupport()Z
 HSPLandroid/view/View;->hasSize()Z
 HSPLandroid/view/View;->hasTransientState()Z
 HSPLandroid/view/View;->hasTranslationTransientState()Z
@@ -17540,26 +17649,26 @@
 HSPLandroid/view/View;->hasWindowInsetsAnimationCallback()Z
 HSPLandroid/view/View;->hideAutofillHighlight()Z
 HSPLandroid/view/View;->hideTooltip()V
-HSPLandroid/view/View;->includeForAccessibility()Z+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->includeForAccessibility(Z)Z+]Landroid/view/View;missing_types]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
+HSPLandroid/view/View;->includeForAccessibility()Z
+HSPLandroid/view/View;->includeForAccessibility(Z)Z
 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;->initializeFadingEdgeInternal(Landroid/content/res/TypedArray;)V
 HSPLandroid/view/View;->initializeScrollIndicatorsInternal()V
 HSPLandroid/view/View;->initializeScrollbarsInternal(Landroid/content/res/TypedArray;)V
-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+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->internalSetPadding(IIII)V
+HSPLandroid/view/View;->invalidate()V
+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;missing_types]Landroid/graphics/drawable/Drawable;megamorphic_types
-HSPLandroid/view/View;->invalidateInternal(IIIIZZ)V+]Landroid/view/View;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewParent;missing_types]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/view/View;->invalidate(Z)V
+HSPLandroid/view/View;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/view/View;->invalidateInternal(IIIIZZ)V+]Landroid/view/View;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/GhostView;Landroid/view/GhostView;]Landroid/view/ViewParent;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/view/View;->invalidateOutline()V
 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
 HSPLandroid/view/View;->isAccessibilityFocused()Z
 HSPLandroid/view/View;->isAccessibilityFocusedViewOrHost()Z
 HSPLandroid/view/View;->isAccessibilityPane()Z
@@ -17568,7 +17677,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
 HSPLandroid/view/View;->isAutofilled()Z
 HSPLandroid/view/View;->isClickable()Z
 HSPLandroid/view/View;->isContextClickable()Z
@@ -17586,7 +17695,7 @@
 HSPLandroid/view/View;->isHorizontalFadingEdgeEnabled()Z
 HSPLandroid/view/View;->isHorizontalScrollBarEnabled()Z
 HSPLandroid/view/View;->isImportantForAccessibility()Z
-HSPLandroid/view/View;->isImportantForAutofill()Z+]Landroid/view/View;missing_types]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/ViewParent;missing_types
+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
@@ -17594,9 +17703,9 @@
 HSPLandroid/view/View;->isInTouchMode()Z
 HSPLandroid/view/View;->isKeyboardNavigationCluster()Z
 HSPLandroid/view/View;->isLaidOut()Z
-HSPLandroid/view/View;->isLayoutDirectionInherited()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->isLayoutDirectionInherited()Z
 HSPLandroid/view/View;->isLayoutDirectionResolved()Z
-HSPLandroid/view/View;->isLayoutModeOptical(Ljava/lang/Object;)Z+]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/View;->isLayoutModeOptical(Ljava/lang/Object;)Z
 HSPLandroid/view/View;->isLayoutRequested()Z
 HSPLandroid/view/View;->isLayoutRtl()Z
 HSPLandroid/view/View;->isLayoutValid()Z
@@ -17606,8 +17715,9 @@
 HSPLandroid/view/View;->isPaddingResolved()Z
 HSPLandroid/view/View;->isPressed()Z
 HSPLandroid/view/View;->isProjectionReceiver()Z
+HSPLandroid/view/View;->isRelayoutTracingEnabled()Z
 HSPLandroid/view/View;->isRootNamespace()Z
-HSPLandroid/view/View;->isRtlCompatibilityMode()Z+]Landroid/view/View;missing_types]Landroid/content/Context;missing_types
+HSPLandroid/view/View;->isRtlCompatibilityMode()Z
 HSPLandroid/view/View;->isSelected()Z
 HSPLandroid/view/View;->isShowingLayoutBounds()Z
 HSPLandroid/view/View;->isShown()Z
@@ -17617,48 +17727,49 @@
 HSPLandroid/view/View;->isTextAlignmentResolved()Z
 HSPLandroid/view/View;->isTextDirectionInherited()Z
 HSPLandroid/view/View;->isTextDirectionResolved()Z
+HSPLandroid/view/View;->isTraversalTracingEnabled()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+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->jumpDrawablesToCurrentState()V+]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;]Landroid/graphics/drawable/Drawable;missing_types
-HSPLandroid/view/View;->layout(IIII)V+]Landroid/view/View;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/View;->jumpDrawablesToCurrentState()V
+HSPLandroid/view/View;->layout(IIII)V
 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;
-HSPLandroid/view/View;->mapRectFromViewToWindowCoords(Landroid/graphics/RectF;Z)V+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/view/View;missing_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
-HSPLandroid/view/View;->measure(II)V+]Landroid/view/View;missing_types]Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;
+HSPLandroid/view/View;->mapRectFromViewToScreenCoords(Landroid/graphics/RectF;Z)V
+HSPLandroid/view/View;->mapRectFromViewToWindowCoords(Landroid/graphics/RectF;Z)V
+HSPLandroid/view/View;->measure(II)V
 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;missing_types]Landroid/content/Context;missing_types
+HSPLandroid/view/View;->notifyAppearedOrDisappearedForContentCaptureIfNeeded(Z)V
 HSPLandroid/view/View;->notifyAutofillManagerOnClick()V
 HSPLandroid/view/View;->notifyEnterOrExitForAutoFillIfNeeded(Z)V
 HSPLandroid/view/View;->notifyGlobalFocusCleared(Landroid/view/View;)V
 HSPLandroid/view/View;->notifySubtreeAccessibilityStateChangedByParentIfNeeded()V
 HSPLandroid/view/View;->notifySubtreeAccessibilityStateChangedIfNeeded()V
-HSPLandroid/view/View;->notifyViewAccessibilityStateChangedIfNeeded(I)V+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
+HSPLandroid/view/View;->notifyViewAccessibilityStateChangedIfNeeded(I)V
 HSPLandroid/view/View;->offsetLeftAndRight(I)V
-HSPLandroid/view/View;->offsetTopAndBottom(I)V+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->offsetTopAndBottom(I)V
 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;
-HSPLandroid/view/View;->onAttachedToWindow()V+]Landroid/view/accessibility/AccessibilityNodeIdManager;Landroid/view/accessibility/AccessibilityNodeIdManager;]Landroid/view/View;missing_types
+HSPLandroid/view/View;->onAttachedToWindow()V
 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
 HSPLandroid/view/View;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;
 HSPLandroid/view/View;->onDetachedFromWindow()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]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/StateListDrawable;,Landroid/graphics/drawable/RippleDrawable;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/view/View;->onDrawForeground(Landroid/graphics/Canvas;)V
 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/widget/ScrollBarDrawable;Landroid/widget/ScrollBarDrawable;
+HSPLandroid/view/View;->onDrawScrollBars(Landroid/graphics/Canvas;)V
 HSPLandroid/view/View;->onDrawScrollIndicators(Landroid/graphics/Canvas;)V
 HSPLandroid/view/View;->onDrawVerticalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V
 HSPLandroid/view/View;->onFilterTouchEventForSecurity(Landroid/view/MotionEvent;)Z
@@ -17674,7 +17785,7 @@
 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/app/assist/AssistStructure$ViewNodeBuilder;,Landroid/view/contentcapture/ViewNode$ViewStructureImpl;]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/view/View;->onProvideStructure(Landroid/view/ViewStructure;II)V
 HSPLandroid/view/View;->onResolveDrawables(I)V
 HSPLandroid/view/View;->onRestoreInstanceState(Landroid/os/Parcelable;)V
 HSPLandroid/view/View;->onRtlPropertiesChanged(I)V
@@ -17685,7 +17796,7 @@
 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/os/Handler;Landroid/view/View$VisibilityChangeForAutofillHandler;]Landroid/view/View;missing_types]Landroid/os/Message;Landroid/os/Message;]Ljava/util/List;Ljava/util/Collections$EmptyList;]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager;
+HSPLandroid/view/View;->onVisibilityAggregated(Z)V
 HSPLandroid/view/View;->onVisibilityChanged(Landroid/view/View;I)V
 HSPLandroid/view/View;->onWindowFocusChanged(Z)V
 HSPLandroid/view/View;->onWindowSystemUiVisibilityChanged(I)V
@@ -17703,7 +17814,7 @@
 HSPLandroid/view/View;->pointInView(FF)Z
 HSPLandroid/view/View;->pointInView(FFF)Z
 HSPLandroid/view/View;->post(Ljava/lang/Runnable;)Z
-HSPLandroid/view/View;->postDelayed(Ljava/lang/Runnable;J)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
@@ -17711,11 +17822,11 @@
 HSPLandroid/view/View;->postOnAnimationDelayed(Ljava/lang/Runnable;J)V
 HSPLandroid/view/View;->postSendViewScrolledAccessibilityEventCallback(II)V
 HSPLandroid/view/View;->postUpdate(Ljava/lang/Runnable;)V
-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;->rebuildOutline()V
 HSPLandroid/view/View;->recomputePadding()V
-HSPLandroid/view/View;->refreshDrawableState()V+]Landroid/view/View;missing_types]Landroid/view/ViewParent;missing_types
+HSPLandroid/view/View;->refreshDrawableState()V
 HSPLandroid/view/View;->registerPendingFrameMetricsObservers()V
-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;->removeCallbacks(Ljava/lang/Runnable;)Z
 HSPLandroid/view/View;->removeFrameMetricsListener(Landroid/view/Window$OnFrameMetricsAvailableListener;)V
 HSPLandroid/view/View;->removeLongPressCallback()V
 HSPLandroid/view/View;->removeOnAttachStateChangeListener(Landroid/view/View$OnAttachStateChangeListener;)V
@@ -17729,7 +17840,7 @@
 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/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;]Landroid/view/ViewParent;missing_types
+HSPLandroid/view/View;->requestLayout()V
 HSPLandroid/view/View;->requestRectangleOnScreen(Landroid/graphics/Rect;)Z
 HSPLandroid/view/View;->requestRectangleOnScreen(Landroid/graphics/Rect;Z)Z
 HSPLandroid/view/View;->requireViewById(I)Landroid/view/View;
@@ -17742,13 +17853,13 @@
 HSPLandroid/view/View;->resetResolvedPaddingInternal()V
 HSPLandroid/view/View;->resetResolvedTextAlignment()V
 HSPLandroid/view/View;->resetResolvedTextDirection()V
-HSPLandroid/view/View;->resetRtlProperties()V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->resetRtlProperties()V
 HSPLandroid/view/View;->resetSubtreeAccessibilityStateChanged()V
 HSPLandroid/view/View;->resolveDrawables()V
 HSPLandroid/view/View;->resolveLayoutDirection()Z
-HSPLandroid/view/View;->resolveLayoutParams()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup$LayoutParams;missing_types
-HSPLandroid/view/View;->resolvePadding()V+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Landroid/graphics/drawable/Drawable;missing_types]Landroid/view/View;missing_types
-HSPLandroid/view/View;->resolveRtlPropertiesIfNeeded()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->resolveLayoutParams()V
+HSPLandroid/view/View;->resolvePadding()V
+HSPLandroid/view/View;->resolveRtlPropertiesIfNeeded()Z
 HSPLandroid/view/View;->resolveSize(II)I
 HSPLandroid/view/View;->resolveSizeAndState(III)I
 HSPLandroid/view/View;->resolveTextAlignment()Z
@@ -17774,13 +17885,13 @@
 HSPLandroid/view/View;->setActivated(Z)V
 HSPLandroid/view/View;->setAlpha(F)V
 HSPLandroid/view/View;->setAlphaInternal(F)V
-HSPLandroid/view/View;->setAlphaNoInvalidation(F)Z+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->setAlphaNoInvalidation(F)Z
 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;->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;megamorphic_types
+HSPLandroid/view/View;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/view/View;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/view/View;->setBackgroundRenderNodeProperties(Landroid/graphics/RenderNode;)V
 HSPLandroid/view/View;->setBackgroundResource(I)V
 HSPLandroid/view/View;->setBackgroundTintList(Landroid/content/res/ColorStateList;)V
@@ -17791,25 +17902,26 @@
 HSPLandroid/view/View;->setContentDescription(Ljava/lang/CharSequence;)V
 HSPLandroid/view/View;->setDefaultFocusHighlightEnabled(Z)V
 HSPLandroid/view/View;->setDetached(Z)V
-HSPLandroid/view/View;->setDisplayListProperties(Landroid/graphics/RenderNode;)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->setDisplayListProperties(Landroid/graphics/RenderNode;)V
 HSPLandroid/view/View;->setDrawingCacheEnabled(Z)V
 HSPLandroid/view/View;->setElevation(F)V
 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
 HSPLandroid/view/View;->setFocusable(I)V
 HSPLandroid/view/View;->setFocusable(Z)V
 HSPLandroid/view/View;->setFocusableInTouchMode(Z)V
+HSPLandroid/view/View;->setForceDarkAllowed(Z)V+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setForeground(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/view/View;->setForegroundGravity(I)V
-HSPLandroid/view/View;->setFrame(IIII)Z+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->setFrame(IIII)Z
 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+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->setImportantForAccessibility(I)V
 HSPLandroid/view/View;->setImportantForAutofill(I)V
 HSPLandroid/view/View;->setImportantForContentCapture(I)V
 HSPLandroid/view/View;->setIsRootNamespace(Z)V
@@ -17819,7 +17931,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+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/View;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/View;->setLeft(I)V
 HSPLandroid/view/View;->setLeftTopRightBottom(IIII)V
 HSPLandroid/view/View;->setLongClickable(Z)V
@@ -17851,7 +17963,7 @@
 HSPLandroid/view/View;->setPointerIcon(Landroid/view/PointerIcon;)V
 HSPLandroid/view/View;->setPressed(Z)V
 HSPLandroid/view/View;->setRenderEffect(Landroid/graphics/RenderEffect;)V
-HSPLandroid/view/View;->setRight(I)V+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->setRight(I)V
 HSPLandroid/view/View;->setRotation(F)V
 HSPLandroid/view/View;->setRotationX(F)V
 HSPLandroid/view/View;->setRotationY(F)V
@@ -17885,21 +17997,23 @@
 HSPLandroid/view/View;->setVerticalScrollBarEnabled(Z)V
 HSPLandroid/view/View;->setVisibility(I)V
 HSPLandroid/view/View;->setWillNotDraw(Z)V
+HSPLandroid/view/View;->setWindowInsetsAnimationCallback(Landroid/view/WindowInsetsAnimation$Callback;)V
 HSPLandroid/view/View;->setX(F)V
 HSPLandroid/view/View;->setY(F)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;->shouldDrawRoundScrollbar()Z
 HSPLandroid/view/View;->sizeChange(IIII)V
 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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/View;missing_types]Ljava/lang/Object;missing_types]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/view/View;->toString()Ljava/lang/String;
 HSPLandroid/view/View;->transformFromViewToWindowSpace([I)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
+HSPLandroid/view/View;->transformMatrixToGlobal(Landroid/graphics/Matrix;)V+]Landroid/view/View;missing_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 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;missing_types]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->updateDisplayListIfDirty()Landroid/graphics/RenderNode;+]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;Landroid/view/ViewOverlay$OverlayViewGroup;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/view/View;->updateFocusedInCluster(Landroid/view/View;I)V
 HSPLandroid/view/View;->updateHandwritingArea()V
 HSPLandroid/view/View;->updateKeepClearRects()V
@@ -17915,7 +18029,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;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;missing_types
+HSPLandroid/view/ViewConfiguration;->get(Landroid/content/Context;)Landroid/view/ViewConfiguration;
 HSPLandroid/view/ViewConfiguration;->getDoubleTapTimeout()I
 HSPLandroid/view/ViewConfiguration;->getLongPressTimeout()I
 HSPLandroid/view/ViewConfiguration;->getPressedStateDuration()I
@@ -17962,9 +18076,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+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/view/ViewGroup$LayoutParams;->setBaseAttributes(Landroid/content/res/TypedArray;II)V
 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;
 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
@@ -17972,7 +18086,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+]Landroid/view/ViewGroup$MarginLayoutParams;missing_types
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->resolveLayoutDirection(I)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setLayoutDirection(I)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMarginEnd(I)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMarginStart(I)V
@@ -17990,11 +18104,11 @@
 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+]Landroid/view/ViewGroup;missing_types
+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;->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]Landroid/animation/LayoutTransition;Landroid/animation/LayoutTransition;
+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;->bringChildToFront(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->buildOrderedChildList()Ljava/util/ArrayList;
@@ -18016,16 +18130,16 @@
 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+]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V
 HSPLandroid/view/ViewGroup;->dispatchCancelPendingInputEvents()V
 HSPLandroid/view/ViewGroup;->dispatchCollectViewAttributes(Landroid/view/View$AttachInfo;I)V
 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;->dispatchDrawableHotspotChanged(FF)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->dispatchDraw(Landroid/graphics/Canvas;)V
+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/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/View;missing_types
+HSPLandroid/view/ViewGroup;->dispatchGetDisplayList()V+]Landroid/view/View;missing_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
@@ -18039,15 +18153,16 @@
 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/ViewGroup$TouchTarget;Landroid/view/ViewGroup$TouchTarget;]Landroid/view/View;missing_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;
 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+]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->dispatchViewAdded(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->dispatchViewRemoved(Landroid/view/View;)V
-HSPLandroid/view/ViewGroup;->dispatchVisibilityAggregated(Z)Z+]Landroid/view/View;missing_types
+HSPLandroid/view/ViewGroup;->dispatchVisibilityAggregated(Z)Z
 HSPLandroid/view/ViewGroup;->dispatchVisibilityChanged(Landroid/view/View;I)V
 HSPLandroid/view/ViewGroup;->dispatchWindowFocusChanged(Z)V
 HSPLandroid/view/ViewGroup;->dispatchWindowInsetsAnimationEnd(Landroid/view/WindowInsetsAnimation;)V
+HSPLandroid/view/ViewGroup;->dispatchWindowInsetsAnimationProgress(Landroid/view/WindowInsets;Ljava/util/List;)Landroid/view/WindowInsets;+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->dispatchWindowSystemUiVisiblityChanged(I)V
 HSPLandroid/view/ViewGroup;->dispatchWindowVisibilityChanged(I)V
 HSPLandroid/view/ViewGroup;->drawChild(Landroid/graphics/Canvas;Landroid/view/View;J)Z
@@ -18058,24 +18173,24 @@
 HSPLandroid/view/ViewGroup;->findFocus()Landroid/view/View;
 HSPLandroid/view/ViewGroup;->findOnBackInvokedDispatcherForChild(Landroid/view/View;Landroid/view/View;)Landroid/window/OnBackInvokedDispatcher;
 HSPLandroid/view/ViewGroup;->findViewByAutofillIdTraversal(I)Landroid/view/View;
-HSPLandroid/view/ViewGroup;->findViewByPredicateTraversal(Ljava/util/function/Predicate;Landroid/view/View;)Landroid/view/View;+]Landroid/view/View;missing_types]Ljava/util/function/Predicate;megamorphic_types
+HSPLandroid/view/ViewGroup;->findViewByPredicateTraversal(Ljava/util/function/Predicate;Landroid/view/View;)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->findViewTraversal(I)Landroid/view/View;+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->findViewWithTagTraversal(Ljava/lang/Object;)Landroid/view/View;
 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+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/ViewGroup;->gatherTransparentRegion(Landroid/graphics/Region;)Z
 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;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/ViewGroup;->getAndVerifyPreorderedView(Ljava/util/ArrayList;[Landroid/view/View;I)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->getChildAt(I)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->getChildCount()I
 HSPLandroid/view/ViewGroup;->getChildMeasureSpec(III)I
 HSPLandroid/view/ViewGroup;->getChildTransformation()Landroid/view/animation/Transformation;
 HSPLandroid/view/ViewGroup;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z
-HSPLandroid/view/ViewGroup;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;Z)Z+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewParent;Landroid/view/ViewRootImpl;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
+HSPLandroid/view/ViewGroup;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;Z)Z+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/view/View;missing_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/ViewGroup;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewParent;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewGroup;->getChildrenForAutofill(I)Landroid/view/ViewGroup$ChildListForAutoFillOrContentCapture;
 HSPLandroid/view/ViewGroup;->getChildrenForContentCapture()Landroid/view/ViewGroup$ChildListForAutoFillOrContentCapture;
 HSPLandroid/view/ViewGroup;->getClipChildren()Z
@@ -18092,7 +18207,7 @@
 HSPLandroid/view/ViewGroup;->getTouchscreenBlocksFocus()Z
 HSPLandroid/view/ViewGroup;->handleFocusGainInternal(ILandroid/graphics/Rect;)V
 HSPLandroid/view/ViewGroup;->hasBooleanFlag(I)Z
-HSPLandroid/view/ViewGroup;->hasChildWithZ()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/ViewGroup;->hasChildWithZ()Z
 HSPLandroid/view/ViewGroup;->hasDefaultFocus()Z
 HSPLandroid/view/ViewGroup;->hasFocus()Z
 HSPLandroid/view/ViewGroup;->hasFocusable(ZZ)Z
@@ -18101,25 +18216,25 @@
 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+]Landroid/view/ViewGroup;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types
-HSPLandroid/view/ViewGroup;->initViewGroup()V+]Landroid/view/ViewGroup;missing_types]Landroid/content/Context;missing_types
+HSPLandroid/view/ViewGroup;->initFromAttributes(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/view/ViewGroup;->initViewGroup()V
 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;->invalidateChild(Landroid/view/View;Landroid/graphics/Rect;)V
 HSPLandroid/view/ViewGroup;->invalidateChildInParent([ILandroid/graphics/Rect;)Landroid/view/ViewParent;
 HSPLandroid/view/ViewGroup;->isChildrenDrawingOrderEnabled()Z
 HSPLandroid/view/ViewGroup;->isLayoutModeOptical()Z
 HSPLandroid/view/ViewGroup;->isLayoutSuppressed()Z
 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;missing_types
+HSPLandroid/view/ViewGroup;->jumpDrawablesToCurrentState()V
 HSPLandroid/view/ViewGroup;->layout(IIII)V
 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+]Landroid/view/View;missing_types
+HSPLandroid/view/ViewGroup;->measureChildWithMargins(Landroid/view/View;IIII)V
 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;->newDispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
+HSPLandroid/view/ViewGroup;->notifySubtreeAccessibilityStateChangedIfNeeded()V
 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;->onAttachedToWindow()V
@@ -18165,7 +18280,7 @@
 HSPLandroid/view/ViewGroup;->resetTouchState()V
 HSPLandroid/view/ViewGroup;->resolveDrawables()V
 HSPLandroid/view/ViewGroup;->resolveLayoutDirection()Z
-HSPLandroid/view/ViewGroup;->resolveLayoutParams()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resolveLayoutParams()V
 HSPLandroid/view/ViewGroup;->resolvePadding()V
 HSPLandroid/view/ViewGroup;->resolveRtlPropertiesIfNeeded()Z
 HSPLandroid/view/ViewGroup;->resolveTextAlignment()Z
@@ -18183,17 +18298,18 @@
 HSPLandroid/view/ViewGroup;->setMotionEventSplittingEnabled(Z)V
 HSPLandroid/view/ViewGroup;->setOnHierarchyChangeListener(Landroid/view/ViewGroup$OnHierarchyChangeListener;)V
 HSPLandroid/view/ViewGroup;->setTouchscreenBlocksFocus(Z)V
+HSPLandroid/view/ViewGroup;->setWindowInsetsAnimationCallback(Landroid/view/WindowInsetsAnimation$Callback;)V
 HSPLandroid/view/ViewGroup;->shouldBlockFocusForTouchscreen()Z
 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+]Landroid/view/View;missing_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
+HSPLandroid/view/ViewGroup;->transformPointToViewLocal([FLandroid/view/View;)V
 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;missing_types]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/graphics/Outline;Landroid/graphics/Outline;
+HSPLandroid/view/ViewOutlineProvider$1;->getOutline(Landroid/view/View;Landroid/graphics/Outline;)V
 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
@@ -18219,7 +18335,7 @@
 HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationCancel(Landroid/animation/Animator;)V
 HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationEnd(Landroid/animation/Animator;)V
 HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationStart(Landroid/animation/Animator;)V
-HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/view/View;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
+HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
 HSPLandroid/view/ViewPropertyAnimator$NameValuesHolder;-><init>(IFF)V
 HSPLandroid/view/ViewPropertyAnimator$PropertyBundle;-><init>(ILjava/util/ArrayList;)V
 HSPLandroid/view/ViewPropertyAnimator$PropertyBundle;->cancel(I)Z
@@ -18243,22 +18359,11 @@
 HSPLandroid/view/ViewPropertyAnimator;->withEndAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->withLayer()Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->withStartAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda0;-><init>()V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda0;->run()V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;)V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda14;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda14;->run()V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda17;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda1;->onFrameDraw(J)V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda2;->run()V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda3;->run()V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda4;-><init>()V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda4;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda5;-><init>()V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda5;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda6;-><init>()V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda6;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda7;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda7;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/view/ViewRootImpl$2;-><init>(Landroid/view/ViewRootImpl;Landroid/graphics/HardwareRenderer$FrameDrawingCallback;)V
 HSPLandroid/view/ViewRootImpl$2;->onFrameDraw(IJ)Landroid/graphics/HardwareRenderer$FrameCommitCallback;
 HSPLandroid/view/ViewRootImpl$3;-><init>(Landroid/view/ViewRootImpl;)V
@@ -18267,12 +18372,13 @@
 HSPLandroid/view/ViewRootImpl$4;->run()V
 HSPLandroid/view/ViewRootImpl$6$$ExternalSyntheticLambda0;-><init>(Landroid/view/ViewRootImpl$6;J)V
 HSPLandroid/view/ViewRootImpl$6$$ExternalSyntheticLambda0;->onFrameCommit(Z)V
-HSPLandroid/view/ViewRootImpl$6;-><init>(Landroid/view/ViewRootImpl;)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$8$$ExternalSyntheticLambda0;->onFrameCommit(Z)V
-HSPLandroid/view/ViewRootImpl$8;->lambda$onFrameDraw$0(JLandroid/window/SurfaceSyncGroup;ZZ)V
+HSPLandroid/view/ViewRootImpl$8$$ExternalSyntheticLambda1;-><init>(Landroid/view/ViewRootImpl$8;JLandroid/window/SurfaceSyncGroup;Z)V
+HSPLandroid/view/ViewRootImpl$8$$ExternalSyntheticLambda1;->onFrameCommit(Z)V
+HSPLandroid/view/ViewRootImpl$8;->$r8$lambda$6frSHsGsDhUEo8Wl9hChpniTVZ0(Landroid/view/ViewRootImpl$8;JLandroid/window/SurfaceSyncGroup;ZZ)V
+HSPLandroid/view/ViewRootImpl$8;->lambda$onFrameDraw$1(JLandroid/window/SurfaceSyncGroup;ZZ)V
 HSPLandroid/view/ViewRootImpl$8;->onFrameDraw(IJ)Landroid/graphics/HardwareRenderer$FrameCommitCallback;
 HSPLandroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;-><init>(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;->ensureNoConnection()V
@@ -18294,7 +18400,7 @@
 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+]Landroid/view/ViewRootImpl$WindowInputEventReceiver;Landroid/view/ViewRootImpl$WindowInputEventReceiver;
+HSPLandroid/view/ViewRootImpl$InputMetricsListener;->onFrameMetricsAvailable(I)V
 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
@@ -18364,8 +18470,6 @@
 HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onBatchedInputEventPending(I)V
 HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onFocusEvent(Z)V
 HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;)V
-HSPLandroid/view/ViewRootImpl;->$r8$lambda$-qO-Mrvqf-pKzC99nUY2ZolqE1c(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl;->$r8$lambda$930NNnjYChnHXjTS3030S0OyB8g(Landroid/view/ViewRootImpl;ILandroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/view/ViewRootImpl;->$r8$lambda$cb26dxdYlLa0pFTTRhgboKYoMu0(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl;->-$$Nest$fgetmBlastBufferQueue(Landroid/view/ViewRootImpl;)Landroid/graphics/BLASTBufferQueue;
 HSPLandroid/view/ViewRootImpl;->-$$Nest$fputmProfileRendering(Landroid/view/ViewRootImpl;Z)V
@@ -18373,9 +18477,9 @@
 HSPLandroid/view/ViewRootImpl;->-$$Nest$mdispatchResized(Landroid/view/ViewRootImpl;Landroid/window/ClientWindowFrames;ZLandroid/util/MergedConfiguration;Landroid/view/InsetsState;ZZIIZ)V
 HSPLandroid/view/ViewRootImpl;->-$$Nest$mprofileRendering(Landroid/view/ViewRootImpl;Z)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;Landroid/view/WindowLayout;)V+]Landroid/view/WindowLeaked;Landroid/view/WindowLeaked;]Landroid/media/AudioManager;Landroid/media/AudioManager;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/content/Context;missing_types
+HSPLandroid/view/ViewRootImpl;-><init>(Landroid/content/Context;Landroid/view/Display;Landroid/view/IWindowSession;Landroid/view/WindowLayout;)V
 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;->addFrameCommitCallbackIfNeeded()V
 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
@@ -18389,7 +18493,7 @@
 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+]Landroid/view/View;Lcom/android/internal/policy/DecorView;
+HSPLandroid/view/ViewRootImpl;->collectViewAttributes()Z
 HSPLandroid/view/ViewRootImpl;->controlInsetsForCompatibility(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ViewRootImpl;->createSyncIfNeeded()V
 HSPLandroid/view/ViewRootImpl;->deliverInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
@@ -18412,8 +18516,7 @@
 HSPLandroid/view/ViewRootImpl;->doConsumeBatchedInput(J)Z
 HSPLandroid/view/ViewRootImpl;->doDie()V
 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/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/Choreographer;Landroid/view/Choreographer;
+HSPLandroid/view/ViewRootImpl;->doTraversal()V
 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
@@ -18432,12 +18535,11 @@
 HSPLandroid/view/ViewRootImpl;->getAccessibilityFocusedRect(Landroid/graphics/Rect;)Z
 HSPLandroid/view/ViewRootImpl;->getAudioManager()Landroid/media/AudioManager;
 HSPLandroid/view/ViewRootImpl;->getAutofillManager()Landroid/view/autofill/AutofillManager;
-HSPLandroid/view/ViewRootImpl;->getBoundsLayer()Landroid/view/SurfaceControl;
 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;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z
 HSPLandroid/view/ViewRootImpl;->getCompatWindowConfiguration()Landroid/app/WindowConfiguration;
 HSPLandroid/view/ViewRootImpl;->getConfiguration()Landroid/content/res/Configuration;
-HSPLandroid/view/ViewRootImpl;->getDisplayId()I+]Landroid/view/Display;Landroid/view/Display;
+HSPLandroid/view/ViewRootImpl;->getDisplayId()I
 HSPLandroid/view/ViewRootImpl;->getHandwritingInitiator()Landroid/view/HandwritingInitiator;
 HSPLandroid/view/ViewRootImpl;->getHostVisibility()I
 HSPLandroid/view/ViewRootImpl;->getImeFocusController()Landroid/view/ImeFocusController;
@@ -18453,7 +18555,7 @@
 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;->getUpdatedFrameInfo()Landroid/graphics/FrameInfo;
 HSPLandroid/view/ViewRootImpl;->getValidLayoutRequesters(Ljava/util/ArrayList;Z)Ljava/util/ArrayList;
 HSPLandroid/view/ViewRootImpl;->getView()Landroid/view/View;
 HSPLandroid/view/ViewRootImpl;->getViewBoundsSandboxingEnabled()Z
@@ -18472,7 +18574,7 @@
 HSPLandroid/view/ViewRootImpl;->invalidateRectOnScreen(Landroid/graphics/Rect;)V
 HSPLandroid/view/ViewRootImpl;->isContentCaptureEnabled()Z
 HSPLandroid/view/ViewRootImpl;->isContentCaptureReallyEnabled()Z
-HSPLandroid/view/ViewRootImpl;->isHardwareEnabled()Z+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
+HSPLandroid/view/ViewRootImpl;->isHardwareEnabled()Z
 HSPLandroid/view/ViewRootImpl;->isInLayout()Z
 HSPLandroid/view/ViewRootImpl;->isInTouchMode()Z
 HSPLandroid/view/ViewRootImpl;->isInWMSRequestedSync()Z
@@ -18480,22 +18582,20 @@
 HSPLandroid/view/ViewRootImpl;->isNavigationKey(Landroid/view/KeyEvent;)Z
 HSPLandroid/view/ViewRootImpl;->isTextDirectionResolved()Z
 HSPLandroid/view/ViewRootImpl;->keepClearRectsChanged(Z)V
-HSPLandroid/view/ViewRootImpl;->lambda$createSyncIfNeeded$3(ILandroid/view/SurfaceControl$Transaction;)V
-HSPLandroid/view/ViewRootImpl;->lambda$getOrCreateSurfaceSyncGroup$13()V
 HSPLandroid/view/ViewRootImpl;->lambda$getOrCreateSurfaceSyncGroup$14()V
 HSPLandroid/view/ViewRootImpl;->lambda$new$0(Landroid/view/View;)Ljava/util/List;
 HSPLandroid/view/ViewRootImpl;->lambda$new$1(Landroid/view/View;)Ljava/util/List;
 HSPLandroid/view/ViewRootImpl;->lambda$new$2(Landroid/view/View;)Ljava/util/List;
 HSPLandroid/view/ViewRootImpl;->loadSystemProperties()V
 HSPLandroid/view/ViewRootImpl;->maybeFireAccessibilityWindowStateChangedEvent()V
-HSPLandroid/view/ViewRootImpl;->maybeHandleWindowMove(Landroid/graphics/Rect;)V+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
+HSPLandroid/view/ViewRootImpl;->maybeHandleWindowMove(Landroid/graphics/Rect;)V
 HSPLandroid/view/ViewRootImpl;->maybeUpdateTooltip(Landroid/view/MotionEvent;)V
 HSPLandroid/view/ViewRootImpl;->measureHierarchy(Landroid/view/View;Landroid/view/WindowManager$LayoutParams;Landroid/content/res/Resources;IIZ)Z
 HSPLandroid/view/ViewRootImpl;->mergeWithNextTransaction(Landroid/view/SurfaceControl$Transaction;J)V
-HSPLandroid/view/ViewRootImpl;->notifyContentCaptureEvents()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;->notifyContentCaptureEvents()V
 HSPLandroid/view/ViewRootImpl;->notifyDrawStarted(Z)V
 HSPLandroid/view/ViewRootImpl;->notifyInsetsChanged()V
-HSPLandroid/view/ViewRootImpl;->notifyRendererOfFramePending()V+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
+HSPLandroid/view/ViewRootImpl;->notifyRendererOfFramePending()V
 HSPLandroid/view/ViewRootImpl;->notifySurfaceCreated(Landroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/view/ViewRootImpl;->notifySurfaceDestroyed()V
 HSPLandroid/view/ViewRootImpl;->obtainQueuedInputEvent(Landroid/view/InputEvent;Landroid/view/InputEventReceiver;I)Landroid/view/ViewRootImpl$QueuedInputEvent;
@@ -18507,11 +18607,10 @@
 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()Z+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
 HSPLandroid/view/ViewRootImpl;->performHapticFeedback(IZ)Z
 HSPLandroid/view/ViewRootImpl;->performLayout(Landroid/view/WindowManager$LayoutParams;II)V
 HSPLandroid/view/ViewRootImpl;->performMeasure(II)V
-HSPLandroid/view/ViewRootImpl;->performTraversals()V+]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/View;Lcom/android/internal/policy/DecorView;]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/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/view/Display;Landroid/view/Display;
+HSPLandroid/view/ViewRootImpl;->performTraversals()V
 HSPLandroid/view/ViewRootImpl;->playSoundEffect(I)V
 HSPLandroid/view/ViewRootImpl;->pokeDrawLockIfNeeded()V
 HSPLandroid/view/ViewRootImpl;->prepareSurfaces()V
@@ -18545,7 +18644,7 @@
 HSPLandroid/view/ViewRootImpl;->setAccessibilityWindowAttributesIfNeeded()V
 HSPLandroid/view/ViewRootImpl;->setActivityConfigCallback(Landroid/view/ViewRootImpl$ActivityConfigCallback;)V
 HSPLandroid/view/ViewRootImpl;->setBoundsLayerCrop(Landroid/view/SurfaceControl$Transaction;)V
-HSPLandroid/view/ViewRootImpl;->setFrame(Landroid/graphics/Rect;Z)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/InsetsController;Landroid/view/InsetsController;
+HSPLandroid/view/ViewRootImpl;->setFrame(Landroid/graphics/Rect;Z)V
 HSPLandroid/view/ViewRootImpl;->setLayoutParams(Landroid/view/WindowManager$LayoutParams;Z)V
 HSPLandroid/view/ViewRootImpl;->setOnContentApplyWindowInsetsListener(Landroid/view/Window$OnContentApplyWindowInsetsListener;)V
 HSPLandroid/view/ViewRootImpl;->setTag()V
@@ -18555,6 +18654,7 @@
 HSPLandroid/view/ViewRootImpl;->shouldOptimizeMeasure(Landroid/view/WindowManager$LayoutParams;)Z
 HSPLandroid/view/ViewRootImpl;->shouldUseDisplaySize(Landroid/view/WindowManager$LayoutParams;)Z
 HSPLandroid/view/ViewRootImpl;->systemGestureExclusionChanged()V
+HSPLandroid/view/ViewRootImpl;->transformMatrixToGlobal(Landroid/graphics/Matrix;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
 HSPLandroid/view/ViewRootImpl;->unscheduleConsumeBatchedInput()V
 HSPLandroid/view/ViewRootImpl;->unscheduleTraversals()V
 HSPLandroid/view/ViewRootImpl;->updateBlastSurfaceIfNeeded()V
@@ -18564,7 +18664,7 @@
 HSPLandroid/view/ViewRootImpl;->updateCompatSysUiVisibility(III)V
 HSPLandroid/view/ViewRootImpl;->updateCompatSystemUiVisibilityInfo(IIII)V
 HSPLandroid/view/ViewRootImpl;->updateConfiguration(I)V
-HSPLandroid/view/ViewRootImpl;->updateContentDrawBounds()Z+]Landroid/view/WindowCallbacks;Lcom/android/internal/policy/DecorView;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/ViewRootImpl;->updateContentDrawBounds()Z
 HSPLandroid/view/ViewRootImpl;->updateForceDarkMode()V
 HSPLandroid/view/ViewRootImpl;->updateInternalDisplay(ILandroid/content/res/Resources;)V
 HSPLandroid/view/ViewRootImpl;->updateKeepClearForAccessibilityFocusRect()V
@@ -18580,6 +18680,7 @@
 HSPLandroid/view/ViewRootInsetsControllerHost;->dispatchWindowInsetsAnimationEnd(Landroid/view/WindowInsetsAnimation;)V
 HSPLandroid/view/ViewRootInsetsControllerHost;->getHandler()Landroid/os/Handler;
 HSPLandroid/view/ViewRootInsetsControllerHost;->getInputMethodManager()Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/view/ViewRootInsetsControllerHost;->getRootViewContext()Landroid/content/Context;
 HSPLandroid/view/ViewRootInsetsControllerHost;->getSystemBarsAppearance()I
 HSPLandroid/view/ViewRootInsetsControllerHost;->getSystemBarsBehavior()I
 HSPLandroid/view/ViewRootInsetsControllerHost;->getTranslator()Landroid/content/res/CompatibilityInfo$Translator;
@@ -18588,6 +18689,7 @@
 HSPLandroid/view/ViewRootInsetsControllerHost;->isSystemBarsAppearanceControlled()Z
 HSPLandroid/view/ViewRootInsetsControllerHost;->notifyInsetsChanged()V
 HSPLandroid/view/ViewRootInsetsControllerHost;->updateCompatSysUiVisibility(III)V
+HSPLandroid/view/ViewRootInsetsControllerHost;->updateRequestedVisibleTypes(I)V
 HSPLandroid/view/ViewRootRectTracker$ViewInfo;-><init>(Landroid/view/ViewRootRectTracker;Landroid/view/View;)V
 HSPLandroid/view/ViewRootRectTracker$ViewInfo;->getView()Landroid/view/View;
 HSPLandroid/view/ViewRootRectTracker$ViewInfo;->update()I
@@ -18601,7 +18703,7 @@
 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+]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/view/ViewStub;Landroid/view/ViewStub;
+HSPLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/view/ViewStub;->inflate()Landroid/view/View;
 HSPLandroid/view/ViewStub;->setLayoutInflater(Landroid/view/LayoutInflater;)V
 HSPLandroid/view/ViewStub;->setLayoutResource(I)V
@@ -18613,11 +18715,11 @@
 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+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->end()V
 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;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->start()Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;
 HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;-><init>()V
 HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->isEmpty()Z
@@ -18630,13 +18732,14 @@
 HSPLandroid/view/ViewTreeObserver;->addOnGlobalLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V
 HSPLandroid/view/ViewTreeObserver;->addOnPreDrawListener(Landroid/view/ViewTreeObserver$OnPreDrawListener;)V
 HSPLandroid/view/ViewTreeObserver;->addOnScrollChangedListener(Landroid/view/ViewTreeObserver$OnScrollChangedListener;)V
+HSPLandroid/view/ViewTreeObserver;->addOnWindowFocusChangeListener(Landroid/view/ViewTreeObserver$OnWindowFocusChangeListener;)V
 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+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/ViewTreeObserver$OnDrawListener;Landroid/widget/Editor$2;
+HSPLandroid/view/ViewTreeObserver;->dispatchOnDraw()V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnEnterAnimationComplete()V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnGlobalLayout()V
-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;->dispatchOnPreDraw()Z
 HSPLandroid/view/ViewTreeObserver;->dispatchOnScrollChanged()V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnSystemGestureExclusionRectsChanged(Ljava/util/List;)V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnTouchModeChanged(Z)V
@@ -18718,8 +18821,7 @@
 HSPLandroid/view/WindowInsets$Type;->statusBars()I
 HSPLandroid/view/WindowInsets$Type;->systemBars()I
 HSPLandroid/view/WindowInsets$Type;->systemGestures()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;Landroid/view/DisplayShape;IZ)V
+HSPLandroid/view/WindowInsets$Type;->toString(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 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;
@@ -18750,10 +18852,11 @@
 HSPLandroid/view/WindowInsets;->insetUnchecked(IIII)Landroid/view/WindowInsets;
 HSPLandroid/view/WindowInsets;->isConsumed()Z
 HSPLandroid/view/WindowInsets;->isRound()Z
+HSPLandroid/view/WindowInsets;->isVisible(I)Z
 HSPLandroid/view/WindowInsets;->replaceSystemWindowInsets(IIII)Landroid/view/WindowInsets;
-HSPLandroid/view/WindowInsets;->shouldAlwaysConsumeSystemBars()Z
 HSPLandroid/view/WindowInsetsAnimation$Bounds;-><init>(Landroid/graphics/Insets;Landroid/graphics/Insets;)V
 HSPLandroid/view/WindowInsetsAnimation$Callback;-><init>(I)V
+HSPLandroid/view/WindowInsetsAnimation$Callback;->getDispatchMode()I
 HSPLandroid/view/WindowInsetsAnimation;-><init>(ILandroid/view/animation/Interpolator;J)V
 HSPLandroid/view/WindowInsetsAnimation;->getTypeMask()I
 HSPLandroid/view/WindowInsetsAnimation;->setAlpha(F)V
@@ -18767,7 +18870,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+]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/view/WindowManager$LayoutParams;->copyFrom(Landroid/view/WindowManager$LayoutParams;)I
 HSPLandroid/view/WindowManager$LayoutParams;->forRotation(I)Landroid/view/WindowManager$LayoutParams;
 HSPLandroid/view/WindowManager$LayoutParams;->getColorMode()I
 HSPLandroid/view/WindowManager$LayoutParams;->getFitInsetsSides()I
@@ -18783,6 +18886,7 @@
 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;->hasWindowExtensionsEnabled()Z
 HSPLandroid/view/WindowManagerGlobal$1;-><init>()V
 HSPLandroid/view/WindowManagerGlobal$2;-><init>(Landroid/view/WindowManagerGlobal;)V
 HSPLandroid/view/WindowManagerGlobal;-><init>()V
@@ -18842,7 +18946,7 @@
 HSPLandroid/view/accessibility/AccessibilityManager;->getServiceLocked()Landroid/view/accessibility/IAccessibilityManager;
 HSPLandroid/view/accessibility/AccessibilityManager;->hasAnyDirectConnection()Z
 HSPLandroid/view/accessibility/AccessibilityManager;->initialFocusAppearanceLocked(Landroid/content/res/Resources;)V
-HSPLandroid/view/accessibility/AccessibilityManager;->isEnabled()Z+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
+HSPLandroid/view/accessibility/AccessibilityManager;->isEnabled()Z
 HSPLandroid/view/accessibility/AccessibilityManager;->isHighTextContrastEnabled()Z
 HSPLandroid/view/accessibility/AccessibilityManager;->isTouchExplorationEnabled()Z
 HSPLandroid/view/accessibility/AccessibilityManager;->notifyAccessibilityStateChanged()V
@@ -18861,7 +18965,7 @@
 HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->registerViewWithId(Landroid/view/View;I)V
 HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->unregisterViewWithId(I)V
 HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;-><init>(ILjava/lang/CharSequence;)V
-HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->getId()I
 HSPLandroid/view/accessibility/AccessibilityNodeProvider;-><init>()V
 HSPLandroid/view/accessibility/CaptioningManager$CaptionStyle;->getTypeface()Landroid/graphics/Typeface;
@@ -18887,7 +18991,6 @@
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->getEnabledAccessibilityServiceList(II)Ljava/util/List;
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->getFocusColor()I
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->getFocusStrokeWidth()I
-HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->getInstalledAccessibilityServiceList(I)Ljava/util/List;
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->getRecommendedTimeoutMillis()J
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->registerSystemAction(Landroid/app/RemoteAction;I)V
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->unregisterSystemAction(I)V
@@ -18900,9 +19003,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+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/view/accessibility/WeakSparseArray;->append(ILjava/lang/Object;)V
 HSPLandroid/view/accessibility/WeakSparseArray;->remove(I)V
-HSPLandroid/view/accessibility/WeakSparseArray;->removeUnreachableValues()V+]Ljava/lang/ref/ReferenceQueue;Ljava/lang/ref/ReferenceQueue;
+HSPLandroid/view/accessibility/WeakSparseArray;->removeUnreachableValues()V
 HSPLandroid/view/animation/AccelerateDecelerateInterpolator;-><init>()V
 HSPLandroid/view/animation/AccelerateDecelerateInterpolator;->createNativeInterpolator()J
 HSPLandroid/view/animation/AccelerateDecelerateInterpolator;->getInterpolation(F)F
@@ -18997,7 +19100,6 @@
 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;
-HSPLandroid/view/animation/AnimationUtils;->lockAnimationClock(J)V
 HSPLandroid/view/animation/AnimationUtils;->unlockAnimationClock()V
 HSPLandroid/view/animation/BaseInterpolator;-><init>()V
 HSPLandroid/view/animation/BaseInterpolator;->getChangingConfiguration()I
@@ -19066,13 +19168,13 @@
 HSPLandroid/view/autofill/AutofillFeatureFlags;->getDenylistStringFromFlag()Ljava/lang/String;
 HSPLandroid/view/autofill/AutofillFeatureFlags;->getFillDialogEnabledHints()[Ljava/lang/String;
 HSPLandroid/view/autofill/AutofillFeatureFlags;->getNonAutofillableImeActionIdSetFromFlag()Ljava/util/Set;
-HSPLandroid/view/autofill/AutofillFeatureFlags;->isCredentialManagerEnabled()Z
 HSPLandroid/view/autofill/AutofillFeatureFlags;->isFillDialogEnabled()Z
 HSPLandroid/view/autofill/AutofillFeatureFlags;->isTriggerFillRequestOnUnimportantViewEnabled()Z
 HSPLandroid/view/autofill/AutofillFeatureFlags;->lambda$getFillDialogEnabledHints$1(Ljava/lang/String;)Z
-HSPLandroid/view/autofill/AutofillFeatureFlags;->shouldIgnoreCredentialViews()Z
-HSPLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/autofill/AutofillId;
-HSPLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/view/autofill/AutofillFeatureFlags;->shouldIncludeAllChildrenViewInAssistStructure()Z
+HSPLandroid/view/autofill/AutofillFeatureFlags;->shouldIncludeAllViewsAutofillTypeNotNoneInAssistStructrue()Z
+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;+]Landroid/view/autofill/AutofillId$1;Landroid/view/autofill/AutofillId$1;
 HSPLandroid/view/autofill/AutofillId;-><init>(I)V
 HSPLandroid/view/autofill/AutofillId;-><init>(IIJI)V
 HSPLandroid/view/autofill/AutofillId;->equals(Ljava/lang/Object;)Z
@@ -19082,7 +19184,7 @@
 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;->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
 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
@@ -19091,7 +19193,6 @@
 HSPLandroid/view/autofill/AutofillManager$AugmentedAutofillManagerClient;->getViewNodeParcelable(Landroid/view/autofill/AutofillId;)Landroid/app/assist/AssistStructure$ViewNodeParcelable;
 HSPLandroid/view/autofill/AutofillManager$AutofillCallback;-><init>()V
 HSPLandroid/view/autofill/AutofillManager$AutofillManagerClient;->getAugmentedAutofillClient(Lcom/android/internal/os/IResultReceiver;)V
-HSPLandroid/view/autofill/AutofillManager$AutofillManagerClient;->lambda$getAugmentedAutofillClient$15(Landroid/view/autofill/AutofillManager;Lcom/android/internal/os/IResultReceiver;)V
 HSPLandroid/view/autofill/AutofillManager$AutofillManagerClient;->lambda$setState$0(Landroid/view/autofill/AutofillManager;I)V
 HSPLandroid/view/autofill/AutofillManager$AutofillManagerClient;->setState(I)V
 HSPLandroid/view/autofill/AutofillManager;->-$$Nest$mpost(Landroid/view/autofill/AutofillManager;Ljava/lang/Runnable;)V
@@ -19104,15 +19205,20 @@
 HSPLandroid/view/autofill/AutofillManager;->hasAutofillFeature()Z
 HSPLandroid/view/autofill/AutofillManager;->hasFillDialogUiFeature()Z
 HSPLandroid/view/autofill/AutofillManager;->isActiveLocked()Z
+HSPLandroid/view/autofill/AutofillManager;->isActivityAllowedForAutofill()Z
+HSPLandroid/view/autofill/AutofillManager;->isActivityDeniedForAutofill()Z
+HSPLandroid/view/autofill/AutofillManager;->isAutofillable(Landroid/view/View;)Z+]Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager;]Landroid/view/View;missing_types
 HSPLandroid/view/autofill/AutofillManager;->isDisabledByServiceLocked()Z
 HSPLandroid/view/autofill/AutofillManager;->isEnabled()Z
+HSPLandroid/view/autofill/AutofillManager;->isPassingImeActionCheck(Landroid/widget/EditText;)Z+]Ljava/util/Set;Landroid/util/ArraySet;
+HSPLandroid/view/autofill/AutofillManager;->isPassingMultilineCheck(Landroid/widget/EditText;)Z
 HSPLandroid/view/autofill/AutofillManager;->notifyValueChanged(Landroid/view/View;)V
 HSPLandroid/view/autofill/AutofillManager;->notifyViewEntered(Landroid/view/View;I)V
 HSPLandroid/view/autofill/AutofillManager;->notifyViewEnteredForAugmentedAutofill(Landroid/view/View;)V
 HSPLandroid/view/autofill/AutofillManager;->notifyViewEnteredForFillDialog(Landroid/view/View;)V
 HSPLandroid/view/autofill/AutofillManager;->notifyViewExited(Landroid/view/View;)V
 HSPLandroid/view/autofill/AutofillManager;->notifyViewExitedLocked(Landroid/view/View;)V
-HSPLandroid/view/autofill/AutofillManager;->notifyViewVisibilityChangedInternal(Landroid/view/View;IZZ)V
+HSPLandroid/view/autofill/AutofillManager;->notifyViewVisibilityChangedInternal(Landroid/view/View;IZZ)V+]Landroid/view/View;missing_types
 HSPLandroid/view/autofill/AutofillManager;->onActivityFinishing()V
 HSPLandroid/view/autofill/AutofillManager;->onInvisibleForAutofill(Z)V
 HSPLandroid/view/autofill/AutofillManager;->onSaveInstanceState(Landroid/os/Bundle;)V
@@ -19165,15 +19271,15 @@
 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+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/view/contentcapture/ContentCaptureEvent;->writeToParcel(Landroid/os/Parcel;I)V
 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$StrippedContext;-><init>(Landroid/content/Context;)V
-HSPLandroid/view/contentcapture/ContentCaptureManager$StrippedContext;-><init>(Landroid/content/Context;Landroid/view/contentcapture/ContentCaptureManager$StrippedContext-IA;)V
 HSPLandroid/view/contentcapture/ContentCaptureManager;-><init>(Landroid/content/Context;Landroid/view/contentcapture/IContentCaptureManager;Landroid/content/ContentCaptureOptions;)V
+HSPLandroid/view/contentcapture/ContentCaptureManager;->getFlushViewTreeAppearingEventDisabled()Z
 HSPLandroid/view/contentcapture/ContentCaptureManager;->getMainContentCaptureSession()Landroid/view/contentcapture/MainContentCaptureSession;
-HSPLandroid/view/contentcapture/ContentCaptureManager;->isContentCaptureEnabled()Z+]Landroid/view/contentcapture/MainContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;
+HSPLandroid/view/contentcapture/ContentCaptureManager;->isContentCaptureEnabled()Z
 HSPLandroid/view/contentcapture/ContentCaptureManager;->onActivityCreated(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/content/ComponentName;)V
 HSPLandroid/view/contentcapture/ContentCaptureManager;->setFlushViewTreeAppearingEventDisabled(Z)V
 HSPLandroid/view/contentcapture/ContentCaptureManager;->updateWindowAttributes(Landroid/view/WindowManager$LayoutParams;)V
@@ -19222,7 +19328,7 @@
 HSPLandroid/view/contentcapture/MainContentCaptureSession;-><init>(Landroid/view/contentcapture/ContentCaptureManager$StrippedContext;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;->destroySession()V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->flush(I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Handler;Landroid/os/Handler;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/view/contentcapture/IContentCaptureDirectManager;Landroid/view/contentcapture/IContentCaptureDirectManager$Stub$Proxy;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/util/LocalLog;Landroid/util/LocalLog;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->flush(I)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->flushIfNeeded(I)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->getActivityName()Ljava/lang/String;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->getDebugState()Ljava/lang/String;
@@ -19241,9 +19347,9 @@
 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+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->scheduleFlush(IZ)V
 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;]Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->sendEvent(Landroid/view/contentcapture/ContentCaptureEvent;Z)V
 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
@@ -19279,7 +19385,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+]Landroid/view/contentcapture/ViewNode$ViewNodeText;Landroid/view/contentcapture/ViewNode$ViewNodeText;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/view/contentcapture/ViewNode;->writeSelfToParcel(Landroid/os/Parcel;I)V
 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
@@ -19305,6 +19411,16 @@
 HSPLandroid/view/inputmethod/BaseInputConnection;->setComposingSpans(Landroid/text/Spannable;II)V
 HSPLandroid/view/inputmethod/BaseInputConnection;->setComposingText(Ljava/lang/CharSequence;I)Z
 HSPLandroid/view/inputmethod/CursorAnchorInfo$Builder;-><init>()V
+HSPLandroid/view/inputmethod/CursorAnchorInfo$Builder;->addVisibleLineBounds(FFFF)Landroid/view/inputmethod/CursorAnchorInfo$Builder;
+HSPLandroid/view/inputmethod/CursorAnchorInfo$Builder;->reset()V+]Landroid/view/inputmethod/CursorAnchorInfo$Builder;Landroid/view/inputmethod/CursorAnchorInfo$Builder;]Landroid/view/inputmethod/SparseRectFArray$SparseRectFArrayBuilder;Landroid/view/inputmethod/SparseRectFArray$SparseRectFArrayBuilder;
+HSPLandroid/view/inputmethod/CursorAnchorInfo$Builder;->setInsertionMarkerLocation(FFFFI)Landroid/view/inputmethod/CursorAnchorInfo$Builder;
+HSPLandroid/view/inputmethod/CursorAnchorInfo$Builder;->setMatrix(Landroid/graphics/Matrix;)Landroid/view/inputmethod/CursorAnchorInfo$Builder;+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
+HSPLandroid/view/inputmethod/CursorAnchorInfo;-><init>(IIILjava/lang/CharSequence;IFFFFLandroid/view/inputmethod/SparseRectFArray;Landroid/view/inputmethod/EditorBoundsInfo;[F[FLandroid/view/inputmethod/TextAppearanceInfo;)V
+HSPLandroid/view/inputmethod/CursorAnchorInfo;->create(Landroid/view/inputmethod/CursorAnchorInfo$Builder;)Landroid/view/inputmethod/CursorAnchorInfo;+]Landroid/view/inputmethod/SparseRectFArray$SparseRectFArrayBuilder;Landroid/view/inputmethod/SparseRectFArray$SparseRectFArrayBuilder;
+HSPLandroid/view/inputmethod/CursorAnchorInfo;->equals(Ljava/lang/Object;)Z+]Landroid/view/inputmethod/CursorAnchorInfo;Landroid/view/inputmethod/CursorAnchorInfo;
+HSPLandroid/view/inputmethod/CursorAnchorInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/view/inputmethod/EditorBoundsInfo;-><init>(Landroid/view/inputmethod/EditorBoundsInfo$Builder;)V
+HSPLandroid/view/inputmethod/EditorBoundsInfo;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/inputmethod/EditorInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/inputmethod/EditorInfo;
 HSPLandroid/view/inputmethod/EditorInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/inputmethod/EditorInfo;-><init>()V
@@ -19320,7 +19436,8 @@
 HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->getService()Lcom/android/internal/view/IInputMethodManager;
 HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->isAvailable()Z
 HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->isImeTraceEnabled()Z
-HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->onRequestHide(Ljava/lang/String;III)Landroid/view/inputmethod/ImeTracker$Token;+]Lcom/android/internal/inputmethod/IImeTracker;Lcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;
+HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->onFailed(Landroid/view/inputmethod/ImeTracker$Token;I)V
+HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->onRequestHide(Ljava/lang/String;III)Landroid/view/inputmethod/ImeTracker$Token;
 HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->removeImeSurfaceFromWindowAsync(Landroid/os/IBinder;)V
 HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->reportPerceptibleAsync(Landroid/os/IBinder;Z)V
 HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->startInputOrWindowGainedFocus(ILcom/android/internal/inputmethod/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/inputmethod/IRemoteInputConnection;Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;IILandroid/window/ImeOnBackInvokedDispatcher;)Lcom/android/internal/inputmethod/InputBindResult;
@@ -19333,9 +19450,10 @@
 HSPLandroid/view/inputmethod/IInputMethodSessionInvoker;->updateSelectionInternal(IIIIII)V
 HSPLandroid/view/inputmethod/ImeTracker$1$$ExternalSyntheticLambda0;-><init>(Landroid/view/inputmethod/ImeTracker$1;)V
 HSPLandroid/view/inputmethod/ImeTracker$1;-><init>()V
-HSPLandroid/view/inputmethod/ImeTracker$1;->getTag(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/concurrent/ThreadLocalRandom;Ljava/util/concurrent/ThreadLocalRandom;
+HSPLandroid/view/inputmethod/ImeTracker$1;->getTag(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/view/inputmethod/ImeTracker$1;->onFailed(Landroid/view/inputmethod/ImeTracker$Token;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/view/inputmethod/ImeTracker$1;->onProgress(Landroid/view/inputmethod/ImeTracker$Token;I)V
-HSPLandroid/view/inputmethod/ImeTracker$1;->onRequestHide(Ljava/lang/String;III)Landroid/view/inputmethod/ImeTracker$Token;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/view/inputmethod/ImeTracker$1;->onRequestHide(Ljava/lang/String;III)Landroid/view/inputmethod/ImeTracker$Token;
 HSPLandroid/view/inputmethod/ImeTracker$Debug$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V
 HSPLandroid/view/inputmethod/ImeTracker$Debug$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 HSPLandroid/view/inputmethod/ImeTracker$Debug$$ExternalSyntheticLambda1;-><init>()V
@@ -19347,15 +19465,17 @@
 HSPLandroid/view/inputmethod/ImeTracker$Debug;->getFieldMapping(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/Map;
 HSPLandroid/view/inputmethod/ImeTracker$Debug;->getFieldValue(Ljava/lang/reflect/Field;)I
 HSPLandroid/view/inputmethod/ImeTracker$Debug;->lambda$getFieldMapping$0(Ljava/lang/String;Ljava/lang/reflect/Field;)Z
-HSPLandroid/view/inputmethod/ImeTracker$Debug;->originToString(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Map;Ljava/util/HashMap;
-HSPLandroid/view/inputmethod/ImeTracker$Debug;->phaseToString(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Map;Ljava/util/HashMap;
+HSPLandroid/view/inputmethod/ImeTracker$Debug;->originToString(I)Ljava/lang/String;
+HSPLandroid/view/inputmethod/ImeTracker$Debug;->phaseToString(I)Ljava/lang/String;
+HSPLandroid/view/inputmethod/ImeTracker$ImeJankTracker;->onRequestAnimation(Landroid/view/inputmethod/ImeTracker$InputMethodJankContext;IZ)V
 HSPLandroid/view/inputmethod/ImeTracker$Token$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/inputmethod/ImeTracker$Token;
 HSPLandroid/view/inputmethod/ImeTracker$Token$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/inputmethod/ImeTracker$Token;->-$$Nest$fgetmTag(Landroid/view/inputmethod/ImeTracker$Token;)Ljava/lang/String;
-HSPLandroid/view/inputmethod/ImeTracker$Token;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/view/inputmethod/ImeTracker$Token;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/view/inputmethod/ImeTracker$Token;-><init>(Landroid/os/Parcel;Landroid/view/inputmethod/ImeTracker$Token-IA;)V
-HSPLandroid/view/inputmethod/ImeTracker$Token;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/view/inputmethod/ImeTracker$Token;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/inputmethod/ImeTracker;-><clinit>()V
+HSPLandroid/view/inputmethod/ImeTracker;->forJank()Landroid/view/inputmethod/ImeTracker$ImeJankTracker;
 HSPLandroid/view/inputmethod/ImeTracker;->forLogging()Landroid/view/inputmethod/ImeTracker;
 HSPLandroid/view/inputmethod/InlineSuggestionsRequest$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/inputmethod/InlineSuggestionsRequest;
 HSPLandroid/view/inputmethod/InlineSuggestionsRequest$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -19396,13 +19516,16 @@
 HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->onPreWindowGainedFocus(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->onScheduledCheckFocus(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->onViewDetachedFromWindow(Landroid/view/View;Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->onViewFocusChanged(Landroid/view/View;Z)V
 HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->onWindowDismissed(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->onWindowLostFocus(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->setCurrentRootViewLocked(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/inputmethod/InputMethodManager$H$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/view/inputmethod/InputMethodManager$H;-><init>(Landroid/view/inputmethod/InputMethodManager;Landroid/os/Looper;)V
 HSPLandroid/view/inputmethod/InputMethodManager$H;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/view/inputmethod/InputMethodManager$ImeInputEventSender;->onInputEventFinished(IZ)V
 HSPLandroid/view/inputmethod/InputMethodManager$PendingEvent;->run()V
+HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$fgetmFallbackInputConnection(Landroid/view/inputmethod/InputMethodManager;)Landroid/view/inputmethod/RemoteInputConnectionImpl;
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$fgetmFullscreenMode(Landroid/view/inputmethod/InputMethodManager;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$fgetmImeDispatcher(Landroid/view/inputmethod/InputMethodManager;)Landroid/window/ImeOnBackInvokedDispatcher;
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$fgetmImeInsetsConsumer(Landroid/view/inputmethod/InputMethodManager;)Landroid/view/ImeInsetsSourceConsumer;
@@ -19413,6 +19536,7 @@
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$fputmFullscreenMode(Landroid/view/inputmethod/InputMethodManager;Z)V
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$fputmRestartOnNextWindowFocus(Landroid/view/inputmethod/InputMethodManager;Z)V
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$mcheckFocusInternalLocked(Landroid/view/inputmethod/InputMethodManager;ZLandroid/view/ViewRootImpl;)Z
+HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$mclearCurRootViewIfNeeded(Landroid/view/inputmethod/InputMethodManager;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$mforAccessibilitySessionsLocked(Landroid/view/inputmethod/InputMethodManager;Ljava/util/function/Consumer;)V
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$mgetServedViewLocked(Landroid/view/inputmethod/InputMethodManager;)Landroid/view/View;
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$mgetStartInputFlags(Landroid/view/inputmethod/InputMethodManager;Landroid/view/View;I)I
@@ -19422,8 +19546,9 @@
 HSPLandroid/view/inputmethod/InputMethodManager;->areSameInputChannel(Landroid/view/InputChannel;Landroid/view/InputChannel;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->canStartInput(Landroid/view/View;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->checkFocus()V
-HSPLandroid/view/inputmethod/InputMethodManager;->checkFocusInternalLocked(ZLandroid/view/ViewRootImpl;)Z+]Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager;]Landroid/view/inputmethod/RemoteInputConnectionImpl;Landroid/view/inputmethod/RemoteInputConnectionImpl;
+HSPLandroid/view/inputmethod/InputMethodManager;->checkFocusInternalLocked(ZLandroid/view/ViewRootImpl;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->clearConnectionLocked()V
+HSPLandroid/view/inputmethod/InputMethodManager;->clearCurRootViewIfNeeded()Z
 HSPLandroid/view/inputmethod/InputMethodManager;->closeCurrentInput()V
 HSPLandroid/view/inputmethod/InputMethodManager;->createInputConnection(Landroid/view/View;)Landroid/util/Pair;
 HSPLandroid/view/inputmethod/InputMethodManager;->createInstance(ILandroid/os/Looper;)Landroid/view/inputmethod/InputMethodManager;
@@ -19440,16 +19565,16 @@
 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;+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/inputmethod/InputMethodManager;->getFallbackInputMethodManagerIfNecessary(Landroid/view/View;)Landroid/view/inputmethod/InputMethodManager;
 HSPLandroid/view/inputmethod/InputMethodManager;->getServedViewLocked()Landroid/view/View;
 HSPLandroid/view/inputmethod/InputMethodManager;->getStartInputFlags(Landroid/view/View;I)I
-HSPLandroid/view/inputmethod/InputMethodManager;->hasServedByInputMethodLocked(Landroid/view/View;)Z+]Landroid/view/View;missing_types
+HSPLandroid/view/inputmethod/InputMethodManager;->hasServedByInputMethodLocked(Landroid/view/View;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->hideSoftInputFromWindow(Landroid/os/IBinder;I)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->hideSoftInputFromWindow(Landroid/os/IBinder;ILandroid/os/ResultReceiver;)Z
 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+]Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/view/inputmethod/InputMethodManager;->isActive(Landroid/view/View;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->isCursorAnchorInfoEnabled()Z
 HSPLandroid/view/inputmethod/InputMethodManager;->isFullscreenMode()Z
 HSPLandroid/view/inputmethod/InputMethodManager;->isImeSessionAvailableLocked()Z
@@ -19469,6 +19594,7 @@
 HSPLandroid/view/inputmethod/InputMethodManager;->startInputInner(ILandroid/os/IBinder;III)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->startInputOnWindowFocusGainInternal(ILandroid/view/View;III)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->unregisterImeConsumer(Landroid/view/ImeInsetsSourceConsumer;)V
+HSPLandroid/view/inputmethod/InputMethodManager;->updateCursorAnchorInfo(Landroid/view/View;Landroid/view/inputmethod/CursorAnchorInfo;)V+]Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager;]Landroid/view/inputmethod/IInputMethodSessionInvoker;Landroid/view/inputmethod/IInputMethodSessionInvoker;]Landroid/view/inputmethod/RemoteInputConnectionImpl;Landroid/view/inputmethod/RemoteInputConnectionImpl;
 HSPLandroid/view/inputmethod/InputMethodManager;->updateInputChannelLocked(Landroid/view/InputChannel;)V
 HSPLandroid/view/inputmethod/InputMethodManager;->updateSelection(Landroid/view/View;IIII)V
 HSPLandroid/view/inputmethod/InputMethodManager;->viewClicked(Landroid/view/View;)V
@@ -19481,6 +19607,8 @@
 HSPLandroid/view/inputmethod/InputMethodSubtype;->getMode()Ljava/lang/String;
 HSPLandroid/view/inputmethod/InputMethodSubtype;->hashCode()I
 HSPLandroid/view/inputmethod/InputMethodSubtypeArray;->get(I)Landroid/view/inputmethod/InputMethodSubtype;
+HSPLandroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda36;-><init>(Landroid/view/inputmethod/RemoteInputConnectionImpl;I)V
+HSPLandroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda36;->run()V
 HSPLandroid/view/inputmethod/RemoteInputConnectionImpl$1;-><init>(Landroid/view/inputmethod/RemoteInputConnectionImpl;)V
 HSPLandroid/view/inputmethod/RemoteInputConnectionImpl;->$r8$lambda$qFXKyAWDZEWw0AFK9ybLLKWARnY(Landroid/view/inputmethod/RemoteInputConnectionImpl;I)V
 HSPLandroid/view/inputmethod/RemoteInputConnectionImpl;-><init>(Landroid/os/Looper;Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/InputMethodManager;Landroid/view/View;)V
@@ -19495,6 +19623,11 @@
 HSPLandroid/view/inputmethod/SurroundingText;-><init>(Ljava/lang/CharSequence;III)V
 HSPLandroid/view/inputmethod/SurroundingText;->copyWithParcelableSpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 HSPLandroid/view/inputmethod/SurroundingText;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/inputmethod/TextAppearanceInfo$Builder;-><init>()V
+HSPLandroid/view/inputmethod/TextAppearanceInfo;-><init>(Landroid/view/inputmethod/TextAppearanceInfo$Builder;)V
+HSPLandroid/view/inputmethod/TextAppearanceInfo;->createFromTextView(Landroid/widget/TextView;)Landroid/view/inputmethod/TextAppearanceInfo;+]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/view/inputmethod/TextAppearanceInfo$Builder;Landroid/view/inputmethod/TextAppearanceInfo$Builder;]Landroid/graphics/Typeface;Landroid/graphics/Typeface;]Landroid/text/style/CharacterStyle;missing_types]Landroid/widget/TextView;missing_types]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;missing_types
+HSPLandroid/view/inputmethod/TextAppearanceInfo;->equals(Ljava/lang/Object;)Z
+HSPLandroid/view/inputmethod/TextAppearanceInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/LocaleList;Landroid/os/LocaleList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/inputmethod/ViewFocusParameterInfo;-><init>(Landroid/view/inputmethod/EditorInfo;IIII)V
 HSPLandroid/view/inputmethod/ViewFocusParameterInfo;->sameAs(Landroid/view/inputmethod/EditorInfo;IIII)Z
 HSPLandroid/view/textclassifier/ConversationAction$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/ConversationAction;
@@ -19624,7 +19757,7 @@
 HSPLandroid/webkit/IWebViewUpdateService$Stub$Proxy;->isMultiProcessEnabled()Z
 HSPLandroid/webkit/IWebViewUpdateService$Stub$Proxy;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse;
 HSPLandroid/webkit/IWebViewUpdateService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/webkit/IWebViewUpdateService;
-HSPLandroid/webkit/MimeTypeMap;->getMimeTypeFromExtension(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/webkit/MimeTypeMap;->getMimeTypeFromExtension(Ljava/lang/String;)Ljava/lang/String;+]Llibcore/content/type/MimeMap;Llibcore/content/type/MimeMap;
 HSPLandroid/webkit/MimeTypeMap;->getSingleton()Landroid/webkit/MimeTypeMap;
 HSPLandroid/webkit/URLUtil;->isFileUrl(Ljava/lang/String;)Z
 HSPLandroid/webkit/URLUtil;->isHttpUrl(Ljava/lang/String;)Z
@@ -19744,12 +19877,12 @@
 HSPLandroid/widget/AbsListView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/AbsListView;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
 HSPLandroid/widget/AbsListView;->clearChoices()V
-HSPLandroid/widget/AbsListView;->computeVerticalScrollExtent()I
-HSPLandroid/widget/AbsListView;->computeVerticalScrollOffset()I
+HSPLandroid/widget/AbsListView;->computeVerticalScrollExtent()I+]Landroid/widget/AbsListView;Lcom/android/internal/app/AlertController$RecycleListView;
+HSPLandroid/widget/AbsListView;->computeVerticalScrollOffset()I+]Landroid/widget/AbsListView;Lcom/android/internal/app/AlertController$RecycleListView;
 HSPLandroid/widget/AbsListView;->computeVerticalScrollRange()I
 HSPLandroid/widget/AbsListView;->dispatchDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/AbsListView;->dispatchSetPressed(Z)V
-HSPLandroid/widget/AbsListView;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/AbsListView;->draw(Landroid/graphics/Canvas;)V+]Landroid/widget/EdgeEffect;Landroid/widget/EdgeEffect;]Landroid/widget/AbsListView;Landroid/widget/ListView;,Lcom/android/internal/app/AlertController$RecycleListView;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/widget/AbsListView;->drawableStateChanged()V
 HSPLandroid/widget/AbsListView;->generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/widget/AbsListView;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
@@ -19907,7 +20040,7 @@
 HSPLandroid/widget/CompoundButton;->getAutofillValue()Landroid/view/autofill/AutofillValue;
 HSPLandroid/widget/CompoundButton;->getButtonDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/widget/CompoundButton;->getButtonStateDescription()Ljava/lang/CharSequence;
-HSPLandroid/widget/CompoundButton;->getCompoundPaddingLeft()I
+HSPLandroid/widget/CompoundButton;->getCompoundPaddingLeft()I+]Landroid/widget/CompoundButton;Landroid/widget/Switch;
 HSPLandroid/widget/CompoundButton;->getCompoundPaddingRight()I
 HSPLandroid/widget/CompoundButton;->getHorizontalOffsetForDrawables()I
 HSPLandroid/widget/CompoundButton;->isChecked()Z
@@ -19926,7 +20059,7 @@
 HSPLandroid/widget/EdgeEffect;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/EdgeEffect;->calculateDistanceFromGlowValues(FF)F
 HSPLandroid/widget/EdgeEffect;->dampStretchVector(F)F
-HSPLandroid/widget/EdgeEffect;->draw(Landroid/graphics/Canvas;)Z
+HSPLandroid/widget/EdgeEffect;->draw(Landroid/graphics/Canvas;)Z+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/widget/EdgeEffect;->finish()V
 HSPLandroid/widget/EdgeEffect;->getCurrentEdgeEffectBehavior()I
 HSPLandroid/widget/EdgeEffect;->getDistance()F
@@ -19936,7 +20069,7 @@
 HSPLandroid/widget/EdgeEffect;->onPull(FF)V
 HSPLandroid/widget/EdgeEffect;->onPullDistance(FF)F
 HSPLandroid/widget/EdgeEffect;->onRelease()V
-HSPLandroid/widget/EdgeEffect;->setSize(II)V
+HSPLandroid/widget/EdgeEffect;->setSize(II)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/widget/EdgeEffect;->update()V
 HSPLandroid/widget/EdgeEffect;->updateSpring()V
 HSPLandroid/widget/EditText;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
@@ -19959,7 +20092,7 @@
 HSPLandroid/widget/Editor$Blink;->cancel()V
 HSPLandroid/widget/Editor$Blink;->run()V
 HSPLandroid/widget/Editor$Blink;->uncancel()V
-HSPLandroid/widget/Editor$CursorAnchorInfoNotifier;->updatePosition(IIZZ)V+]Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/widget/Editor$CursorAnchorInfoNotifier;->updatePosition(IIZZ)V
 HSPLandroid/widget/Editor$EditOperation;-><init>(Landroid/widget/Editor;Ljava/lang/String;ILjava/lang/String;Z)V
 HSPLandroid/widget/Editor$EditOperation;->commit()V
 HSPLandroid/widget/Editor$EditOperation;->forceMergeWith(Landroid/widget/Editor$EditOperation;)V
@@ -20006,7 +20139,7 @@
 HSPLandroid/widget/Editor$PositionListener;->onPreDraw()Z+]Landroid/widget/Editor$TextViewPositionListener;Landroid/widget/Editor$CursorAnchorInfoNotifier;
 HSPLandroid/widget/Editor$PositionListener;->onScrollChanged()V
 HSPLandroid/widget/Editor$PositionListener;->removeSubscriber(Landroid/widget/Editor$TextViewPositionListener;)V
-HSPLandroid/widget/Editor$PositionListener;->updatePosition()V+]Landroid/widget/TextView;Landroid/widget/SearchView$SearchAutoComplete;
+HSPLandroid/widget/Editor$PositionListener;->updatePosition()V
 HSPLandroid/widget/Editor$ProcessTextIntentActionsHandler;-><init>(Landroid/widget/Editor;)V
 HSPLandroid/widget/Editor$SelectionModifierCursorController;->getMinTouchOffset()I
 HSPLandroid/widget/Editor$SelectionModifierCursorController;->hide()V
@@ -20043,6 +20176,7 @@
 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;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;I)V+]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLandroid/widget/Editor;->drawHardwareAcceleratedInner(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I[I[IIII)I
 HSPLandroid/widget/Editor;->endBatchEdit()V
 HSPLandroid/widget/Editor;->ensureEndedBatchEdit()V
@@ -20052,7 +20186,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;+]Landroid/content/Context;missing_types
+HSPLandroid/widget/Editor;->getInputMethodManager()Landroid/view/inputmethod/InputMethodManager;
 HSPLandroid/widget/Editor;->getInsertionController()Landroid/widget/Editor$InsertionPointCursorController;
 HSPLandroid/widget/Editor;->getLastTapPosition()I
 HSPLandroid/widget/Editor;->getPositionListener()Landroid/widget/Editor$PositionListener;
@@ -20074,7 +20208,7 @@
 HSPLandroid/widget/Editor;->maybeFireScheduledRestartInputForSetText()V
 HSPLandroid/widget/Editor;->onAttachedToWindow()V
 HSPLandroid/widget/Editor;->onDetachedFromWindow()V
-HSPLandroid/widget/Editor;->onDraw(Landroid/graphics/Canvas;Landroid/text/Layout;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;I)V+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/DynamicLayout;]Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager;]Landroid/widget/SelectionActionModeHelper;Landroid/widget/SelectionActionModeHelper;]Landroid/graphics/Canvas;Landroid/graphics/Canvas;,Landroid/graphics/RecordingCanvas;]Landroid/widget/TextView;missing_types]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/widget/Editor$CorrectionHighlighter;Landroid/widget/Editor$CorrectionHighlighter;
+HSPLandroid/widget/Editor;->onDraw(Landroid/graphics/Canvas;Landroid/text/Layout;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
 HSPLandroid/widget/Editor;->onFocusChanged(ZI)V
 HSPLandroid/widget/Editor;->onLocaleChanged()V
 HSPLandroid/widget/Editor;->onScreenStateChanged(I)V
@@ -20114,7 +20248,7 @@
 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+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 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
@@ -20127,13 +20261,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+]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;->getPaddingBottomWithForeground()I
+HSPLandroid/widget/FrameLayout;->getPaddingLeftWithForeground()I
+HSPLandroid/widget/FrameLayout;->getPaddingRightWithForeground()I
 HSPLandroid/widget/FrameLayout;->getPaddingTopWithForeground()I
-HSPLandroid/widget/FrameLayout;->layoutChildren(IIIIZ)V+]Landroid/view/View;missing_types]Landroid/widget/FrameLayout;missing_types
+HSPLandroid/widget/FrameLayout;->layoutChildren(IIIIZ)V
 HSPLandroid/widget/FrameLayout;->onLayout(ZIIII)V
-HSPLandroid/widget/FrameLayout;->onMeasure(II)V+]Landroid/widget/FrameLayout;missing_types]Landroid/view/View;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/widget/FrameLayout;->onMeasure(II)V
 HSPLandroid/widget/FrameLayout;->setForegroundGravity(I)V
 HSPLandroid/widget/FrameLayout;->setMeasureAllChildren(Z)V
 HSPLandroid/widget/FrameLayout;->shouldDelayChildPressedState()Z
@@ -20230,13 +20364,13 @@
 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/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+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;
 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+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/widget/ImageView;->configureBounds()V
 HSPLandroid/widget/ImageView;->drawableHotspotChanged(FF)V
 HSPLandroid/widget/ImageView;->drawableStateChanged()V
 HSPLandroid/widget/ImageView;->getAccessibilityClassName()Ljava/lang/CharSequence;
@@ -20246,14 +20380,14 @@
 HSPLandroid/widget/ImageView;->getScaleType()Landroid/widget/ImageView$ScaleType;
 HSPLandroid/widget/ImageView;->hasOverlappingRendering()Z
 HSPLandroid/widget/ImageView;->initImageView()V
-HSPLandroid/widget/ImageView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/Drawable;missing_types]Landroid/widget/ImageView;missing_types
+HSPLandroid/widget/ImageView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/ImageView;->isFilledByImage()Z
-HSPLandroid/widget/ImageView;->isOpaque()Z+]Landroid/graphics/drawable/Drawable;missing_types
-HSPLandroid/widget/ImageView;->jumpDrawablesToCurrentState()V+]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/widget/ImageView;->isOpaque()Z
+HSPLandroid/widget/ImageView;->jumpDrawablesToCurrentState()V
 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;]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/widget/ImageView;->onDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/ImageView;->onMeasure(II)V
 HSPLandroid/widget/ImageView;->onRtlPropertiesChanged(I)V
 HSPLandroid/widget/ImageView;->onVisibilityAggregated(Z)V
@@ -20280,16 +20414,16 @@
 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+]Landroid/widget/ImageView;missing_types]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/widget/ImageView;->updateDrawable(Landroid/graphics/drawable/Drawable;)V
 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;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 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;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/LinearLayout;->allViewsAreGoneBefore(I)Z
 HSPLandroid/widget/LinearLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
 HSPLandroid/widget/LinearLayout;->forceUniformHeight(II)V
@@ -20311,11 +20445,11 @@
 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+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
-HSPLandroid/widget/LinearLayout;->layoutVertical(IIII)V+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;missing_types
+HSPLandroid/widget/LinearLayout;->layoutHorizontal(IIII)V
+HSPLandroid/widget/LinearLayout;->layoutVertical(IIII)V
 HSPLandroid/widget/LinearLayout;->measureChildBeforeLayout(Landroid/view/View;IIIII)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;->measureHorizontal(II)V
+HSPLandroid/widget/LinearLayout;->measureVertical(II)V+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
 HSPLandroid/widget/LinearLayout;->onDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/LinearLayout;->onLayout(ZIIII)V
 HSPLandroid/widget/LinearLayout;->onMeasure(II)V
@@ -20523,7 +20657,7 @@
 HSPLandroid/widget/RelativeLayout$DependencyGraph;->add(Landroid/view/View;)V
 HSPLandroid/widget/RelativeLayout$DependencyGraph;->clear()V
 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
+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
@@ -20531,16 +20665,16 @@
 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+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/widget/RelativeLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 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+]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
+HSPLandroid/widget/RelativeLayout$LayoutParams;->shouldResolveLayoutDirection(I)Z
 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
@@ -20558,21 +20692,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;+]Landroid/view/View;missing_types]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
+HSPLandroid/widget/RelativeLayout;->getRelatedView([II)Landroid/view/View;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/widget/RelativeLayout;->getRelatedViewBaselineOffset([I)I
 HSPLandroid/widget/RelativeLayout;->getRelatedViewParams([II)Landroid/widget/RelativeLayout$LayoutParams;
 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+]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;
-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;
+HSPLandroid/widget/RelativeLayout;->onLayout(ZIIII)V+]Landroid/widget/RelativeLayout;Landroid/widget/RelativeLayout;]Landroid/view/View;missing_types
+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+]Landroid/widget/RelativeLayout;Landroid/widget/RelativeLayout;]Landroid/view/View;Landroid/widget/Switch;]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
 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;Landroid/widget/RelativeLayout;]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
@@ -20597,8 +20731,6 @@
 HSPLandroid/widget/RemoteViews$MethodKey;->equals(Ljava/lang/Object;)Z
 HSPLandroid/widget/RemoteViews$MethodKey;->hashCode()I
 HSPLandroid/widget/RemoteViews$MethodKey;->set(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)V
-HSPLandroid/widget/RemoteViews$ReflectionAction;-><init>(Landroid/widget/RemoteViews;ILjava/lang/String;ILjava/lang/Object;)V
-HSPLandroid/widget/RemoteViews$ReflectionAction;-><init>(Landroid/widget/RemoteViews;Landroid/os/Parcel;)V
 HSPLandroid/widget/RemoteViews$ReflectionAction;->getActionTag()I
 HSPLandroid/widget/RemoteViews$ReflectionAction;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/widget/RemoteViews$RemoteResponse;-><init>()V
@@ -20651,7 +20783,7 @@
 HSPLandroid/widget/RtlSpacingHelper;->setDirection(Z)V
 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;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/ScrollBarDrawable;->drawThumb(Landroid/graphics/Canvas;Landroid/graphics/Rect;IIZ)V
 HSPLandroid/widget/ScrollBarDrawable;->getSize(Z)I
 HSPLandroid/widget/ScrollBarDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
@@ -20660,7 +20792,7 @@
 HSPLandroid/widget/ScrollBarDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
 HSPLandroid/widget/ScrollBarDrawable;->onStateChange([I)Z
 HSPLandroid/widget/ScrollBarDrawable;->propagateCurrentState(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/widget/ScrollBarDrawable;->setAlpha(I)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
+HSPLandroid/widget/ScrollBarDrawable;->setAlpha(I)V
 HSPLandroid/widget/ScrollBarDrawable;->setAlwaysDrawVerticalTrack(Z)V
 HSPLandroid/widget/ScrollBarDrawable;->setHorizontalThumbDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/ScrollBarDrawable;->setHorizontalTrackDrawable(Landroid/graphics/drawable/Drawable;)V
@@ -20715,9 +20847,12 @@
 HSPLandroid/widget/SelectionActionModeHelper;-><init>(Landroid/widget/Editor;)V
 HSPLandroid/widget/SelectionActionModeHelper;->getText(Landroid/widget/TextView;)Ljava/lang/CharSequence;
 HSPLandroid/widget/SelectionActionModeHelper;->getTextClassificationSettings()Landroid/view/textclassifier/TextClassificationConstants;
-HSPLandroid/widget/SelectionActionModeHelper;->onTextChanged(II)V+]Landroid/widget/SelectionActionModeHelper$SelectionTracker;Landroid/widget/SelectionActionModeHelper$SelectionTracker;
+HSPLandroid/widget/SelectionActionModeHelper;->isDrawingHighlight()Z+]Landroid/widget/SmartSelectSprite;Landroid/widget/SmartSelectSprite;
+HSPLandroid/widget/SelectionActionModeHelper;->onDraw(Landroid/graphics/Canvas;)V+]Landroid/widget/SelectionActionModeHelper;Landroid/widget/SelectionActionModeHelper;
+HSPLandroid/widget/SelectionActionModeHelper;->onTextChanged(II)V
 HSPLandroid/widget/SelectionActionModeHelper;->sortSelectionIndices(II)[I
 HSPLandroid/widget/SmartSelectSprite;-><init>(Landroid/content/Context;ILjava/lang/Runnable;)V
+HSPLandroid/widget/SmartSelectSprite;->isAnimationActive()Z
 HSPLandroid/widget/Space;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/Space;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/Space;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
@@ -20748,7 +20883,7 @@
 HSPLandroid/widget/Switch;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/Switch;->drawableStateChanged()V
 HSPLandroid/widget/Switch;->getButtonStateDescription()Ljava/lang/CharSequence;
-HSPLandroid/widget/Switch;->jumpDrawablesToCurrentState()V
+HSPLandroid/widget/Switch;->jumpDrawablesToCurrentState()V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]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
@@ -20776,27 +20911,27 @@
 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/widget/Editor;Landroid/widget/Editor;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;missing_types]Landroid/widget/TextView;missing_types]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/widget/TextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/util/TypedValue;Landroid/util/TypedValue;]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/widget/Editor;Landroid/widget/Editor;]Landroid/content/Context;missing_types]Landroid/widget/TextView;megamorphic_types
 HSPLandroid/widget/TextView;->addSearchHighlightPaths()V
 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+]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->applyTextAppearance(Landroid/widget/TextView$TextAppearanceAttributes;)V
 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(IZ)Z+]Landroid/text/Layout$Alignment;Landroid/text/Layout$Alignment;]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->bringPointIntoView(IZ)Z
 HSPLandroid/widget/TextView;->bringTextIntoView()Z
 HSPLandroid/widget/TextView;->canMarquee()Z
 HSPLandroid/widget/TextView;->cancelLongPress()V
-HSPLandroid/widget/TextView;->checkForRelayout()V+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/widget/TextView;->checkForRelayout()V
 HSPLandroid/widget/TextView;->checkForResize()V
 HSPLandroid/widget/TextView;->cleanupAutoSizePresetSizes([I)[I
-HSPLandroid/widget/TextView;->compressText(F)Z
+HSPLandroid/widget/TextView;->compressText(F)Z+]Landroid/text/Layout;Landroid/text/BoringLayout;]Landroid/text/TextPaint;Landroid/text/TextPaint;
 HSPLandroid/widget/TextView;->computeHorizontalScrollRange()I
 HSPLandroid/widget/TextView;->computeScroll()V
-HSPLandroid/widget/TextView;->computeVerticalScrollExtent()I
+HSPLandroid/widget/TextView;->computeVerticalScrollExtent()I+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->computeVerticalScrollRange()I
 HSPLandroid/widget/TextView;->convertToLocalHorizontalCoordinate(F)F
 HSPLandroid/widget/TextView;->createEditorIfNeeded()V
@@ -20816,7 +20951,7 @@
 HSPLandroid/widget/TextView;->getBaseline()I
 HSPLandroid/widget/TextView;->getBaselineOffset()I
 HSPLandroid/widget/TextView;->getBottomVerticalOffset(Z)I
-HSPLandroid/widget/TextView;->getBoxHeight(Landroid/text/Layout;)I+]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->getBoxHeight(Landroid/text/Layout;)I
 HSPLandroid/widget/TextView;->getBreakStrategy()I
 HSPLandroid/widget/TextView;->getCompoundDrawablePadding()I
 HSPLandroid/widget/TextView;->getCompoundDrawables()[Landroid/graphics/drawable/Drawable;
@@ -20825,16 +20960,19 @@
 HSPLandroid/widget/TextView;->getCompoundPaddingLeft()I
 HSPLandroid/widget/TextView;->getCompoundPaddingRight()I
 HSPLandroid/widget/TextView;->getCompoundPaddingTop()I
+HSPLandroid/widget/TextView;->getContentVisibleRect(Landroid/graphics/Rect;)Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getCurrentTextColor()I
+HSPLandroid/widget/TextView;->getCursorAnchorInfo(ILandroid/view/inputmethod/CursorAnchorInfo$Builder;Landroid/graphics/Matrix;)Landroid/view/inputmethod/CursorAnchorInfo;+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/view/inputmethod/EditorBoundsInfo$Builder;Landroid/view/inputmethod/EditorBoundsInfo$Builder;]Landroid/view/inputmethod/CursorAnchorInfo$Builder;Landroid/view/inputmethod/CursorAnchorInfo$Builder;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/text/Layout;Landroid/text/DynamicLayout;]Landroid/widget/TextView;missing_types]Ljava/lang/CharSequence;Landroid/text/SpannableStringBuilder;
 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+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
+HSPLandroid/widget/TextView;->getDesiredHeight(Landroid/text/Layout;Z)I
+HSPLandroid/widget/TextView;->getDisplayMetricsOrSystem()Landroid/util/DisplayMetrics;
 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/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
-HSPLandroid/widget/TextView;->getExtendedPaddingTop()I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
+HSPLandroid/widget/TextView;->getExtendedPaddingBottom()I
+HSPLandroid/widget/TextView;->getExtendedPaddingTop()I
 HSPLandroid/widget/TextView;->getFilters()[Landroid/text/InputFilter;
 HSPLandroid/widget/TextView;->getFocusedRect(Landroid/graphics/Rect;)V
 HSPLandroid/widget/TextView;->getFreezesText()Z
@@ -20843,6 +20981,7 @@
 HSPLandroid/widget/TextView;->getHorizontalOffsetForDrawables()I
 HSPLandroid/widget/TextView;->getHorizontallyScrolling()Z
 HSPLandroid/widget/TextView;->getHyphenationFrequency()I
+HSPLandroid/widget/TextView;->getImeOptions()I
 HSPLandroid/widget/TextView;->getIncludeFontPadding()Z
 HSPLandroid/widget/TextView;->getInputMethodManager()Landroid/view/inputmethod/InputMethodManager;
 HSPLandroid/widget/TextView;->getInputType()I
@@ -20860,6 +20999,7 @@
 HSPLandroid/widget/TextView;->getMaxEms()I
 HSPLandroid/widget/TextView;->getMaxLines()I
 HSPLandroid/widget/TextView;->getMinEms()I
+HSPLandroid/widget/TextView;->getMinLines()I
 HSPLandroid/widget/TextView;->getMinWidth()I
 HSPLandroid/widget/TextView;->getOffsetAtCoordinate(IF)I
 HSPLandroid/widget/TextView;->getOffsetForPosition(FF)I
@@ -20887,20 +21027,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/graphics/Path;Landroid/graphics/Path;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/text/Layout;Landroid/text/DynamicLayout;]Landroid/widget/Editor;Landroid/widget/Editor;
-HSPLandroid/widget/TextView;->getVerticalOffset(Z)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Ljava/lang/CharSequence;missing_types
+HSPLandroid/widget/TextView;->getUpdatedHighlightPath()Landroid/graphics/Path;
+HSPLandroid/widget/TextView;->getVerticalOffset(Z)I
 HSPLandroid/widget/TextView;->handleBackInTextActionModeIfNeeded(Landroid/view/KeyEvent;)Z
 HSPLandroid/widget/TextView;->handleTextChanged(Ljava/lang/CharSequence;III)V
 HSPLandroid/widget/TextView;->hasGesturePreviewHighlight()Z
-HSPLandroid/widget/TextView;->hasOverlappingRendering()Z+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
+HSPLandroid/widget/TextView;->hasOverlappingRendering()Z
 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/Path;Landroid/graphics/Path;]Landroid/text/TextPaint;Landroid/text/TextPaint;
+HSPLandroid/widget/TextView;->invalidateCursorPath()V
 HSPLandroid/widget/TextView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/TextView;->invalidateRegion(IIZ)V
 HSPLandroid/widget/TextView;->isAnyPasswordInputType()Z
+HSPLandroid/widget/TextView;->isAutoHandwritingEnabled()Z+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->isAutoSizeEnabled()Z
 HSPLandroid/widget/TextView;->isAutofillable()Z
 HSPLandroid/widget/TextView;->isFallbackLineSpacingForStaticLayout()Z
@@ -20911,7 +21052,7 @@
 HSPLandroid/widget/TextView;->isMarqueeFadeEnabled()Z
 HSPLandroid/widget/TextView;->isMultilineInputType(I)Z
 HSPLandroid/widget/TextView;->isPasswordInputType(I)Z
-HSPLandroid/widget/TextView;->isPositionVisible(FF)Z+]Landroid/view/View;missing_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
+HSPLandroid/widget/TextView;->isPositionVisible(FF)Z
 HSPLandroid/widget/TextView;->isShowingHint()Z
 HSPLandroid/widget/TextView;->isSuggestionsEnabled()Z
 HSPLandroid/widget/TextView;->isTextEditable()Z
@@ -20919,20 +21060,20 @@
 HSPLandroid/widget/TextView;->isVisibleToAccessibility()Z
 HSPLandroid/widget/TextView;->jumpDrawablesToCurrentState()V
 HSPLandroid/widget/TextView;->length()I
-HSPLandroid/widget/TextView;->makeNewLayout(IILandroid/text/BoringLayout$Metrics;Landroid/text/BoringLayout$Metrics;IZ)V+]Landroid/widget/TextView;missing_types]Landroid/text/BoringLayout;Landroid/text/BoringLayout;]Landroid/text/Layout;Landroid/text/BoringLayout;]Landroid/widget/Editor;Landroid/widget/Editor;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout$Builder;
-HSPLandroid/widget/TextView;->makeSingleLayout(ILandroid/text/BoringLayout$Metrics;ILandroid/text/Layout$Alignment;ZLandroid/text/TextUtils$TruncateAt;Z)Landroid/text/Layout;+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;]Landroid/text/DynamicLayout$Builder;Landroid/text/DynamicLayout$Builder;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout$Builder;
-HSPLandroid/widget/TextView;->maybeUpdateHighlightPaths()V+]Ljava/util/List;Ljava/util/ArrayList;
-HSPLandroid/widget/TextView;->notifyContentCaptureTextChanged()V+]Landroid/view/contentcapture/ContentCaptureManager;Landroid/view/contentcapture/ContentCaptureManager;]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;]Landroid/widget/TextView;missing_types
+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;->maybeUpdateHighlightPaths()V
+HSPLandroid/widget/TextView;->notifyContentCaptureTextChanged()V
 HSPLandroid/widget/TextView;->notifyListeningManagersAfterTextChanged()V
 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+]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->onCreateDrawableState(I)[I
 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;missing_types]Landroid/text/TextPaint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;missing_types]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;
+HSPLandroid/widget/TextView;->onDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/TextView;->onEditorAction(I)V
 HSPLandroid/widget/TextView;->onEndBatchEdit()V
 HSPLandroid/widget/TextView;->onFocusChanged(ZILandroid/graphics/Rect;)V
@@ -20943,9 +21084,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;,Landroid/text/DynamicLayout;]Landroid/widget/TextView;missing_types]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannableString;
+HSPLandroid/widget/TextView;->onMeasure(II)V+]Landroid/text/Layout;Landroid/text/BoringLayout;
 HSPLandroid/widget/TextView;->onPreDraw()Z
-HSPLandroid/widget/TextView;->onProvideStructure(Landroid/view/ViewStructure;II)V+]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;
+HSPLandroid/widget/TextView;->onProvideStructure(Landroid/view/ViewStructure;II)V
 HSPLandroid/widget/TextView;->onResolveDrawables(I)V
 HSPLandroid/widget/TextView;->onRestoreInstanceState(Landroid/os/Parcelable;)V
 HSPLandroid/widget/TextView;->onRtlPropertiesChanged(I)V
@@ -20958,9 +21099,9 @@
 HSPLandroid/widget/TextView;->onVisibilityAggregated(Z)V
 HSPLandroid/widget/TextView;->onVisibilityChanged(Landroid/view/View;I)V
 HSPLandroid/widget/TextView;->onWindowFocusChanged(Z)V
-HSPLandroid/widget/TextView;->originalToTransformed(II)I+]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->originalToTransformed(II)I
 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
 HSPLandroid/widget/TextView;->registerForPreDraw()V
 HSPLandroid/widget/TextView;->removeAdjacentSuggestionSpans(I)V
 HSPLandroid/widget/TextView;->removeIntersectingNonAdjacentSpans(IILjava/lang/Class;)V
@@ -20973,15 +21114,15 @@
 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+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/TextWatcher;missing_types
+HSPLandroid/widget/TextView;->sendBeforeTextChanged(Ljava/lang/CharSequence;III)V
 HSPLandroid/widget/TextView;->sendOnTextChanged(Ljava/lang/CharSequence;III)V
 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+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/widget/TextView;missing_types]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;
-HSPLandroid/widget/TextView;->setCompoundDrawablesRelative(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V+]Landroid/widget/TextView$Drawables;Landroid/widget/TextView$Drawables;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;,Landroid/graphics/drawable/StateListDrawable;
+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;->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
@@ -21012,6 +21153,8 @@
 HSPLandroid/widget/TextView;->setKeyListenerOnly(Landroid/text/method/KeyListener;)V
 HSPLandroid/widget/TextView;->setLetterSpacing(F)V
 HSPLandroid/widget/TextView;->setLineHeight(I)V
+HSPLandroid/widget/TextView;->setLineHeight(IF)V+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/widget/TextView;Landroid/widget/TextView;
+HSPLandroid/widget/TextView;->setLineHeightPx(F)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/widget/TextView;Landroid/widget/TextView;
 HSPLandroid/widget/TextView;->setLineSpacing(FF)V
 HSPLandroid/widget/TextView;->setLines(I)V
 HSPLandroid/widget/TextView;->setLinkTextColor(Landroid/content/res/ColorStateList;)V
@@ -21027,7 +21170,7 @@
 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+]Landroid/text/TextPaint;Landroid/text/TextPaint;
+HSPLandroid/widget/TextView;->setRawTextSize(FZ)V
 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
@@ -21036,7 +21179,7 @@
 HSPLandroid/widget/TextView;->setText(I)V
 HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
 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/Editable$Factory;missing_types]Landroid/text/method/TransformationMethod;missing_types]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/text/InputFilter;missing_types]Landroid/widget/TextView;missing_types]Landroid/text/Spannable$Factory;Landroid/text/Spannable$Factory;]Landroid/text/Spanned;missing_types]Landroid/text/method/MovementMethod;Landroid/text/method/LinkMovementMethod;,Landroid/text/method/ArrowKeyMovementMethod;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;missing_types]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/Spannable;missing_types
+HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;ZI)V
 HSPLandroid/widget/TextView;->setTextAppearance(I)V
 HSPLandroid/widget/TextView;->setTextAppearance(Landroid/content/Context;I)V
 HSPLandroid/widget/TextView;->setTextColor(I)V
@@ -21047,14 +21190,13 @@
 HSPLandroid/widget/TextView;->setTextSize(IF)V
 HSPLandroid/widget/TextView;->setTextSizeInternal(IFZ)V
 HSPLandroid/widget/TextView;->setTransformationMethod(Landroid/text/method/TransformationMethod;)V
-HSPLandroid/widget/TextView;->setTransformationMethodInternal(Landroid/text/method/TransformationMethod;)V+]Landroid/text/method/TransformationMethod2;Landroid/text/method/AllCapsTransformationMethod;]Landroid/widget/TextView;missing_types]Landroid/text/Spannable;Landroid/text/SpannableStringBuilder;
-HSPLandroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;)V+]Landroid/text/TextPaint;Landroid/text/TextPaint;
-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;->setTypeface(Landroid/graphics/Typeface;)V
+HSPLandroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;I)V
 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+]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/text/Spanned;missing_types
+HSPLandroid/widget/TextView;->spanChange(Landroid/text/Spanned;Ljava/lang/Object;IIII)V
 HSPLandroid/widget/TextView;->startMarquee()V
 HSPLandroid/widget/TextView;->startStopMarquee(Z)V
 HSPLandroid/widget/TextView;->stopMarquee()V
@@ -21062,10 +21204,11 @@
 HSPLandroid/widget/TextView;->suggestedSizeFitsInSpace(ILandroid/graphics/RectF;)Z
 HSPLandroid/widget/TextView;->supportsAutoSizeText()Z
 HSPLandroid/widget/TextView;->textCanBeSelected()Z
+HSPLandroid/widget/TextView;->transformedToOriginal(II)I
 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/Editor;Landroid/widget/Editor;]Landroid/widget/TextView;missing_types]Ljava/lang/CharSequence;missing_types
+HSPLandroid/widget/TextView;->updateTextColors()V
 HSPLandroid/widget/TextView;->useDynamicLayout()Z
 HSPLandroid/widget/TextView;->validateAndSetAutoSizeTextTypeUniformConfiguration(FFF)V
 HSPLandroid/widget/TextView;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
@@ -21115,6 +21258,7 @@
 HSPLandroid/widget/Toolbar;->shouldCollapse()Z
 HSPLandroid/widget/ViewAnimator;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/ViewAnimator;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/widget/ViewAnimator;->getCurrentView()Landroid/view/View;+]Landroid/widget/ViewAnimator;Landroid/widget/ViewFlipper;
 HSPLandroid/widget/ViewAnimator;->initViewAnimator(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/ViewAnimator;->setAnimateFirstView(Z)V
 HSPLandroid/widget/ViewAnimator;->setDisplayedChild(I)V
@@ -21127,6 +21271,18 @@
 HSPLandroid/widget/inline/InlinePresentationSpec;-><clinit>()V
 HSPLandroid/widget/inline/InlinePresentationSpec;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/widget/inline/InlinePresentationSpec;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/window/BackProgressAnimator$1;->get(Landroid/window/BackProgressAnimator;)Ljava/lang/Float;
+HSPLandroid/window/BackProgressAnimator$1;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/window/BackProgressAnimator$1;->setValue(Landroid/window/BackProgressAnimator;F)V
+HSPLandroid/window/BackProgressAnimator$1;->setValue(Ljava/lang/Object;F)V
+HSPLandroid/window/BackProgressAnimator;->-$$Nest$mgetProgress(Landroid/window/BackProgressAnimator;)F
+HSPLandroid/window/BackProgressAnimator;->-$$Nest$msetProgress(Landroid/window/BackProgressAnimator;F)V
+HSPLandroid/window/BackProgressAnimator;->-$$Nest$mupdateProgressValue(Landroid/window/BackProgressAnimator;F)V
+HSPLandroid/window/BackProgressAnimator;->getProgress()F
+HSPLandroid/window/BackProgressAnimator;->isBackAnimationInProgress()Z
+HSPLandroid/window/BackProgressAnimator;->reset()V
+HSPLandroid/window/BackProgressAnimator;->setProgress(F)V
+HSPLandroid/window/BackProgressAnimator;->updateProgressValue(F)V
 HSPLandroid/window/ClientWindowFrames$1;-><init>()V
 HSPLandroid/window/ClientWindowFrames$1;->createFromParcel(Landroid/os/Parcel;)Landroid/window/ClientWindowFrames;
 HSPLandroid/window/ClientWindowFrames$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -21162,11 +21318,12 @@
 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$$ExternalSyntheticLambda0;-><init>(Landroid/window/OnBackInvokedCallback;)V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->clearCallbacksOnDispatcher()V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->registerOnBackInvokedCallback(ILandroid/window/OnBackInvokedCallback;)V
+HSPLandroid/window/ProxyOnBackInvokedDispatcher;->registerOnBackInvokedCallbackUnchecked(Landroid/window/OnBackInvokedCallback;I)V
+HSPLandroid/window/ProxyOnBackInvokedDispatcher;->registerSystemOnBackInvokedCallback(Landroid/window/OnBackInvokedCallback;)V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->setActualDispatcher(Landroid/window/OnBackInvokedDispatcher;)V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->transferCallbacksToDispatcher()V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->unregisterOnBackInvokedCallback(Landroid/window/OnBackInvokedCallback;)V
@@ -21180,6 +21337,7 @@
 HSPLandroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
 HSPLandroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda5;-><init>()V
 HSPLandroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
+HSPLandroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda6;-><init>(Landroid/window/SurfaceSyncGroup;)V
 HSPLandroid/window/SurfaceSyncGroup$2;-><init>(Landroid/window/SurfaceSyncGroup;Z)V
 HSPLandroid/window/SurfaceSyncGroup$2;->onTransactionReady(Landroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/window/SurfaceSyncGroup$ISurfaceSyncGroupImpl;->getSurfaceSyncGroup()Landroid/window/SurfaceSyncGroup;
@@ -21193,6 +21351,8 @@
 HSPLandroid/window/SurfaceSyncGroup;->add(Landroid/window/ISurfaceSyncGroup;ZLjava/lang/Runnable;)Z
 HSPLandroid/window/SurfaceSyncGroup;->addLocalSync(Landroid/window/ISurfaceSyncGroup;Z)Z
 HSPLandroid/window/SurfaceSyncGroup;->addSyncCompleteCallback(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)V
+HSPLandroid/window/SurfaceSyncGroup;->addTimeout()V+]Landroid/os/HandlerThread;Landroid/os/HandlerThread;]Landroid/os/Handler;Landroid/os/Handler;
+HSPLandroid/window/SurfaceSyncGroup;->addTransaction(Landroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/window/SurfaceSyncGroup;->checkIfSyncIsComplete()V
 HSPLandroid/window/SurfaceSyncGroup;->createTransactionReadyCallback(Z)Landroid/window/ITransactionReadyCallback;
 HSPLandroid/window/SurfaceSyncGroup;->getSurfaceSyncGroup(Landroid/window/ISurfaceSyncGroup;)Landroid/window/SurfaceSyncGroup;
@@ -21230,17 +21390,16 @@
 HSPLandroid/window/WindowMetricsController$$ExternalSyntheticLambda0;-><init>(Landroid/window/WindowMetricsController;Landroid/os/IBinder;Landroid/graphics/Rect;ZI)V
 HSPLandroid/window/WindowMetricsController$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
 HSPLandroid/window/WindowMetricsController;->$r8$lambda$cKRWFCVMf1_GLLOLAIyCbvvCDHM(Landroid/window/WindowMetricsController;Landroid/os/IBinder;Landroid/graphics/Rect;ZI)Landroid/view/WindowInsets;
-HSPLandroid/window/WindowMetricsController;-><clinit>()V
 HSPLandroid/window/WindowMetricsController;-><init>(Landroid/content/Context;)V
 HSPLandroid/window/WindowMetricsController;->getWindowInsetsFromServerForDisplay(ILandroid/os/IBinder;Landroid/graphics/Rect;ZI)Landroid/view/WindowInsets;
-HSPLandroid/window/WindowMetricsController;->getWindowMetricsInternal(Z)Landroid/view/WindowMetrics;+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;Landroid/window/WindowContext;,Landroid/app/ContextImpl;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
+HSPLandroid/window/WindowMetricsController;->getWindowMetricsInternal(Z)Landroid/view/WindowMetrics;
 HSPLandroid/window/WindowMetricsController;->lambda$getWindowMetricsInternal$0(Landroid/os/IBinder;Landroid/graphics/Rect;ZI)Landroid/view/WindowInsets;
+HSPLandroid/window/WindowOnBackInvokedDispatcher$$ExternalSyntheticLambda0;-><init>(Landroid/window/BackProgressAnimator;)V
+HSPLandroid/window/WindowOnBackInvokedDispatcher$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/window/WindowOnBackInvokedDispatcher$Checker;->-$$Nest$mgetContext(Landroid/window/WindowOnBackInvokedDispatcher$Checker;)Landroid/content/Context;
-HSPLandroid/window/WindowOnBackInvokedDispatcher$Checker;->-$$Nest$smisOnBackInvokedCallbackEnabled(Landroid/content/Context;)Z
 HSPLandroid/window/WindowOnBackInvokedDispatcher$Checker;-><init>(Landroid/content/Context;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher$Checker;->checkApplicationCallbackRegistration(ILandroid/window/OnBackInvokedCallback;)Z
 HSPLandroid/window/WindowOnBackInvokedDispatcher$Checker;->getContext()Landroid/content/Context;
-HSPLandroid/window/WindowOnBackInvokedDispatcher$Checker;->isOnBackInvokedCallbackEnabled(Landroid/content/Context;)Z
 HSPLandroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda0;-><init>(Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda1;->run()V
@@ -21264,36 +21423,34 @@
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->isOnBackInvokedCallbackEnabled(Landroid/content/Context;)Z
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->registerOnBackInvokedCallback(ILandroid/window/OnBackInvokedCallback;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->registerOnBackInvokedCallbackUnchecked(Landroid/window/OnBackInvokedCallback;I)V
+HSPLandroid/window/WindowOnBackInvokedDispatcher;->registerSystemOnBackInvokedCallback(Landroid/window/OnBackInvokedCallback;)V
+HSPLandroid/window/WindowOnBackInvokedDispatcher;->sendCancelledIfInProgress(Landroid/window/OnBackInvokedCallback;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->setTopOnBackInvokedCallback(Landroid/window/OnBackInvokedCallback;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->unregisterOnBackInvokedCallback(Landroid/window/OnBackInvokedCallback;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->updateContext(Landroid/content/Context;)V
 HSPLandroid/window/WindowOrganizer;-><init>()V
-HSPLandroid/window/WindowTokenClient$$ExternalSyntheticLambda1;-><init>(Landroid/window/WindowTokenClient;)V
-HSPLandroid/window/WindowTokenClient$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/window/WindowTokenClient;-><clinit>()V
 HSPLandroid/window/WindowTokenClient;-><init>()V
 HSPLandroid/window/WindowTokenClient;->attachContext(Landroid/content/Context;)V
-HSPLandroid/window/WindowTokenClient;->attachToDisplayArea(IILandroid/os/Bundle;)Z
-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
 HSPLcom/android/i18n/phonenumbers/CountryCodeToRegionCodeMap;->getCountryCodeToRegionCodeMap()Ljava/util/Map;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->buildNationalNumberForParsing(Ljava/lang/String;Ljava/lang/StringBuilder;)V
 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;
+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;]Ljava/util/List;Ljava/util/ArrayList;]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;->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;
+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/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;
-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;
+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;]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;->getMetadataForRegion(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/metadata/source/MetadataSource;Lcom/android/i18n/phonenumbers/metadata/source/MetadataSourceImpl;
 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;
@@ -21306,26 +21463,26 @@
 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;->normalize(Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;
+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/String;Ljava/lang/String;]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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;
 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;
+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;
 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/String;Ljava/lang/String;]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;->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;]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;
@@ -21447,8 +21604,8 @@
 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+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
-HSPLcom/android/i18n/timezone/ZoneInfoData;->getOffsetsByUtcTime(J[I)I
+HSPLcom/android/i18n/timezone/ZoneInfoData;->getOffset(J)I
+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+][J[J
 HSPLcom/android/i18n/timezone/ZoneInfoData;->hashCode()I
@@ -21484,30 +21641,30 @@
 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;+]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;->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;->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+]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;->setPosition(Ljava/nio/ByteBuffer;)V
+HSPLcom/android/icu/charset/CharsetDecoderICU;->setPosition(Ljava/nio/CharBuffer;)V
 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;+]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+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
+HSPLcom/android/icu/charset/CharsetEncoderICU;->encodeLoop(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;
+HSPLcom/android/icu/charset/CharsetEncoderICU;->getArray(Ljava/nio/ByteBuffer;)I
+HSPLcom/android/icu/charset/CharsetEncoderICU;->getArray(Ljava/nio/CharBuffer;)I
 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+]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;->setPosition(Ljava/nio/ByteBuffer;)V
+HSPLcom/android/icu/charset/CharsetEncoderICU;->setPosition(Ljava/nio/CharBuffer;)V
 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
@@ -21561,7 +21718,6 @@
 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/R$dimen;-><clinit>()V
 HSPLcom/android/internal/app/AlertController;-><init>(Landroid/content/Context;Landroid/content/DialogInterface;Landroid/view/Window;)V
 HSPLcom/android/internal/app/AlertController;->create(Landroid/content/Context;Landroid/content/DialogInterface;Landroid/view/Window;)Lcom/android/internal/app/AlertController;
 HSPLcom/android/internal/app/AlertController;->installContent()V
@@ -21644,9 +21800,30 @@
 HSPLcom/android/internal/content/ReferrerIntent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLcom/android/internal/display/BrightnessSynchronizer;-><clinit>()V
 HSPLcom/android/internal/display/BrightnessSynchronizer;->floatEquals(FF)Z
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->doAnimationFrame(J)Z+]Lcom/android/internal/dynamicanimation/animation/DynamicAnimation;Lcom/android/internal/dynamicanimation/animation/SpringAnimation;
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->endAnimationInternal(Z)V+]Lcom/android/internal/dynamicanimation/animation/DynamicAnimation;Lcom/android/internal/dynamicanimation/animation/SpringAnimation;]Landroid/animation/AnimationHandler;Landroid/animation/AnimationHandler;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/internal/dynamicanimation/animation/DynamicAnimation$OnAnimationEndListener;Landroid/window/BackProgressAnimator$2;
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->getAnimationHandler()Landroid/animation/AnimationHandler;
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->getPropertyValue()F
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->getValueThreshold()F
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->isCurrentThread()Z
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->isRunning()Z
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->removeNullEntries(Ljava/util/ArrayList;)V
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->setPropertyValue(F)V
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->start()V
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->startAnimationInternal()V
+HSPLcom/android/internal/dynamicanimation/animation/SpringAnimation;->animateToFinalPosition(F)V
+HSPLcom/android/internal/dynamicanimation/animation/SpringAnimation;->canSkipToEnd()Z
+HSPLcom/android/internal/dynamicanimation/animation/SpringAnimation;->sanityCheck()V
+HSPLcom/android/internal/dynamicanimation/animation/SpringAnimation;->skipToEnd()V
+HSPLcom/android/internal/dynamicanimation/animation/SpringAnimation;->start()V
+HSPLcom/android/internal/dynamicanimation/animation/SpringAnimation;->updateValueAndVelocity(J)Z+]Lcom/android/internal/dynamicanimation/animation/SpringAnimation;Lcom/android/internal/dynamicanimation/animation/SpringAnimation;]Lcom/android/internal/dynamicanimation/animation/SpringForce;Lcom/android/internal/dynamicanimation/animation/SpringForce;
+HSPLcom/android/internal/dynamicanimation/animation/SpringForce;->getFinalPosition()F
+HSPLcom/android/internal/dynamicanimation/animation/SpringForce;->setFinalPosition(F)Lcom/android/internal/dynamicanimation/animation/SpringForce;
+HSPLcom/android/internal/dynamicanimation/animation/SpringForce;->setValueThreshold(D)V
 HSPLcom/android/internal/graphics/ColorUtils;->HSLToColor([F)I
 HSPLcom/android/internal/graphics/ColorUtils;->RGBToHSL(III[F)V
 HSPLcom/android/internal/graphics/ColorUtils;->colorToHSL(I[F)V
+HSPLcom/android/internal/graphics/ColorUtils;->colorToXYZ(I[D)V
 HSPLcom/android/internal/graphics/SfVsyncFrameCallbackProvider;-><init>()V
 HSPLcom/android/internal/graphics/SfVsyncFrameCallbackProvider;->getFrameTime()J
 HSPLcom/android/internal/graphics/SfVsyncFrameCallbackProvider;->postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
@@ -21696,7 +21873,7 @@
 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;->getMainHandler()Landroid/os/Handler;
@@ -21715,10 +21892,13 @@
 HSPLcom/android/internal/inputmethod/EditableInputConnection;->setImeConsumesInput(Z)Z
 HSPLcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;->onRequestHide(Ljava/lang/String;III)Landroid/view/inputmethod/ImeTracker$Token;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Lcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;Lcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;->onFailed(Landroid/view/inputmethod/ImeTracker$Token;I)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Lcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;Lcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;->onRequestHide(Ljava/lang/String;III)Landroid/view/inputmethod/ImeTracker$Token;
 HSPLcom/android/internal/inputmethod/IImeTracker$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/inputmethod/IImeTracker;
 HSPLcom/android/internal/inputmethod/IInputMethodClient$Stub;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/internal/inputmethod/IInputMethodClient$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
 HSPLcom/android/internal/inputmethod/IInputMethodClient$Stub;->getMaxTransactionId()I
+HSPLcom/android/internal/inputmethod/IInputMethodClient$Stub;->getTransactionName(I)Ljava/lang/String;
 HSPLcom/android/internal/inputmethod/IInputMethodClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLcom/android/internal/inputmethod/IInputMethodSession$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLcom/android/internal/inputmethod/IInputMethodSession$Stub$Proxy;->asBinder()Landroid/os/IBinder;
@@ -21744,7 +21924,6 @@
 HSPLcom/android/internal/inputmethod/InputBindResult;-><init>(Landroid/os/Parcel;)V
 HSPLcom/android/internal/inputmethod/InputBindResult;-><init>(Landroid/os/Parcel;Lcom/android/internal/inputmethod/InputBindResult-IA;)V
 HSPLcom/android/internal/inputmethod/InputBindResult;->error(I)Lcom/android/internal/inputmethod/InputBindResult;
-HSPLcom/android/internal/inputmethod/InputBindResult;->getVirtualDisplayToScreenMatrix()Landroid/graphics/Matrix;
 HSPLcom/android/internal/inputmethod/InputConnectionCommandHeader$1;-><init>()V
 HSPLcom/android/internal/inputmethod/InputConnectionCommandHeader$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/inputmethod/InputConnectionCommandHeader;
 HSPLcom/android/internal/inputmethod/InputConnectionCommandHeader$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -21752,16 +21931,27 @@
 HSPLcom/android/internal/inputmethod/InputConnectionCommandHeader;-><init>(I)V
 HSPLcom/android/internal/inputmethod/InputMethodDebug;->softInputDisplayReasonToString(I)Ljava/lang/String;
 HSPLcom/android/internal/inputmethod/SubtypeLocaleUtils;->constructLocaleFromString(Ljava/lang/String;)Ljava/util/Locale;
+HSPLcom/android/internal/jank/EventLogTags;->writeJankCujEventsEndRequest(IJJJ)V
 HSPLcom/android/internal/jank/FrameTracker$FrameMetricsWrapper;-><init>()V
 HSPLcom/android/internal/jank/FrameTracker$FrameMetricsWrapper;->getMetric(I)J
 HSPLcom/android/internal/jank/FrameTracker$FrameMetricsWrapper;->getTiming()[J
 HSPLcom/android/internal/jank/FrameTracker$ThreadedRendererWrapper;-><init>(Landroid/view/ThreadedRenderer;)V
 HSPLcom/android/internal/jank/FrameTracker$ThreadedRendererWrapper;->addObserver(Landroid/graphics/HardwareRendererObserver;)V
 HSPLcom/android/internal/jank/FrameTracker$ThreadedRendererWrapper;->removeObserver(Landroid/graphics/HardwareRendererObserver;)V
+HSPLcom/android/internal/jank/FrameTracker;-><init>(Lcom/android/internal/jank/InteractionJankMonitor;Lcom/android/internal/jank/InteractionJankMonitor$Session;Landroid/os/Handler;Lcom/android/internal/jank/FrameTracker$ThreadedRendererWrapper;Lcom/android/internal/jank/FrameTracker$ViewRootWrapper;Lcom/android/internal/jank/FrameTracker$SurfaceControlWrapper;Lcom/android/internal/jank/FrameTracker$ChoreographerWrapper;Lcom/android/internal/jank/FrameTracker$FrameMetricsWrapper;Lcom/android/internal/jank/FrameTracker$StatsLogWrapper;IILcom/android/internal/jank/FrameTracker$FrameTrackerListener;Lcom/android/internal/jank/InteractionJankMonitor$Configuration;)V
 HSPLcom/android/internal/jank/FrameTracker;->begin()V
+HSPLcom/android/internal/jank/FrameTracker;->beginInternal()V
+HSPLcom/android/internal/jank/FrameTracker;->end(I)Z
+HSPLcom/android/internal/jank/FrameTracker;->finish()V+]Landroid/os/Handler;Landroid/app/ActivityThread$H;,Landroid/view/ViewRootImpl$ViewRootHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/jank/FrameTracker$StatsLogWrapper;Lcom/android/internal/jank/FrameTracker$StatsLogWrapper;]Lcom/android/internal/jank/FrameTracker;Lcom/android/internal/jank/FrameTracker;]Lcom/android/internal/jank/InteractionJankMonitor$Session;Lcom/android/internal/jank/InteractionJankMonitor$Session;
+HSPLcom/android/internal/jank/FrameTracker;->getHandler()Landroid/os/Handler;
 HSPLcom/android/internal/jank/FrameTracker;->onFrameMetricsAvailable(I)V
 HSPLcom/android/internal/jank/FrameTracker;->triggerPerfetto()V
 HSPLcom/android/internal/jank/InteractionJankMonitor$$ExternalSyntheticLambda5;-><init>(Lcom/android/internal/jank/InteractionJankMonitor$TimeFunction;JJJ)V
+HSPLcom/android/internal/jank/InteractionJankMonitor$$ExternalSyntheticLambda5;->run()V
+HSPLcom/android/internal/jank/InteractionJankMonitor$$ExternalSyntheticLambda9;->invoke(JJJ)V
+HSPLcom/android/internal/jank/InteractionJankMonitor$Configuration$Builder;-><init>(I)V
+HSPLcom/android/internal/jank/InteractionJankMonitor$Configuration$Builder;->build()Lcom/android/internal/jank/InteractionJankMonitor$Configuration;
+HSPLcom/android/internal/jank/InteractionJankMonitor$Configuration;-><init>(ILandroid/view/View;Ljava/lang/String;JZLandroid/content/Context;Landroid/view/SurfaceControl;Z)V
 HSPLcom/android/internal/jank/InteractionJankMonitor$InstanceHolder;-><clinit>()V
 HSPLcom/android/internal/jank/InteractionJankMonitor$Session;->getName()Ljava/lang/String;
 HSPLcom/android/internal/jank/InteractionJankMonitor$Session;->getStatsdInteractionType()I
@@ -21769,17 +21959,22 @@
 HSPLcom/android/internal/jank/InteractionJankMonitor;->-$$Nest$sfgetDEFAULT_WORKER_NAME()Ljava/lang/String;
 HSPLcom/android/internal/jank/InteractionJankMonitor;-><clinit>()V
 HSPLcom/android/internal/jank/InteractionJankMonitor;-><init>(Landroid/os/HandlerThread;)V
+HSPLcom/android/internal/jank/InteractionJankMonitor;->begin(Lcom/android/internal/jank/InteractionJankMonitor$Configuration$Builder;)Z
+HSPLcom/android/internal/jank/InteractionJankMonitor;->beginInternal(Lcom/android/internal/jank/InteractionJankMonitor$Configuration;)Z
 HSPLcom/android/internal/jank/InteractionJankMonitor;->cancel(I)Z
+HSPLcom/android/internal/jank/InteractionJankMonitor;->createFrameTracker(Lcom/android/internal/jank/InteractionJankMonitor$Configuration;Lcom/android/internal/jank/InteractionJankMonitor$Session;)Lcom/android/internal/jank/FrameTracker;
 HSPLcom/android/internal/jank/InteractionJankMonitor;->end(I)Z
 HSPLcom/android/internal/jank/InteractionJankMonitor;->getInstance()Lcom/android/internal/jank/InteractionJankMonitor;
 HSPLcom/android/internal/jank/InteractionJankMonitor;->getTracker(I)Lcom/android/internal/jank/FrameTracker;
+HSPLcom/android/internal/jank/InteractionJankMonitor;->lambda$end$6(IJJJ)V
+HSPLcom/android/internal/jank/InteractionJankMonitor;->lambda$postEventLogToWorkerThread$11(Lcom/android/internal/jank/InteractionJankMonitor$TimeFunction;JJJ)V
 HSPLcom/android/internal/jank/InteractionJankMonitor;->postEventLogToWorkerThread(Lcom/android/internal/jank/InteractionJankMonitor$TimeFunction;)V
 HSPLcom/android/internal/listeners/ListenerExecutor$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;Ljava/util/function/Supplier;Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;Lcom/android/internal/listeners/ListenerExecutor$FailureCallback;)V
 HSPLcom/android/internal/listeners/ListenerExecutor$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/internal/listeners/ListenerExecutor$ListenerOperation;->onComplete(Z)V
 HSPLcom/android/internal/listeners/ListenerExecutor$ListenerOperation;->onPostExecute(Z)V
 HSPLcom/android/internal/listeners/ListenerExecutor$ListenerOperation;->onPreExecute()V
-HSPLcom/android/internal/listeners/ListenerExecutor;->executeSafely(Ljava/util/concurrent/Executor;Ljava/util/function/Supplier;Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;)V
+HSPLcom/android/internal/listeners/ListenerExecutor;->executeSafely(Ljava/util/concurrent/Executor;Ljava/util/function/Supplier;Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;)V+]Lcom/android/internal/listeners/ListenerExecutor;Landroid/location/LocationManager$LocationListenerTransport;
 HSPLcom/android/internal/listeners/ListenerExecutor;->executeSafely(Ljava/util/concurrent/Executor;Ljava/util/function/Supplier;Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;Lcom/android/internal/listeners/ListenerExecutor$FailureCallback;)V+]Ljava/util/concurrent/Executor;missing_types]Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;Landroid/location/LocationManager$LocationListenerTransport$1;]Ljava/util/function/Supplier;Landroid/location/LocationManager$LocationListenerTransport$$ExternalSyntheticLambda2;
 HSPLcom/android/internal/listeners/ListenerExecutor;->lambda$executeSafely$0(Ljava/lang/Object;Ljava/util/function/Supplier;Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;Lcom/android/internal/listeners/ListenerExecutor$FailureCallback;)V
 HSPLcom/android/internal/logging/AndroidConfig;-><init>()V
@@ -21920,7 +22115,7 @@
 HSPLcom/android/internal/os/RuntimeInit;->setApplicationObject(Landroid/os/IBinder;)V
 HSPLcom/android/internal/os/RuntimeInit;->wtf(Ljava/lang/String;Ljava/lang/Throwable;Z)V
 HSPLcom/android/internal/os/SafeZipPathValidatorCallback;-><init>()V
-HSPLcom/android/internal/os/SafeZipPathValidatorCallback;->onZipEntryAccess(Ljava/lang/String;)V
+HSPLcom/android/internal/os/SafeZipPathValidatorCallback;->onZipEntryAccess(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/internal/os/SomeArgs;-><init>()V
 HSPLcom/android/internal/os/SomeArgs;->clear()V
 HSPLcom/android/internal/os/SomeArgs;->obtain()Lcom/android/internal/os/SomeArgs;
@@ -21986,9 +22181,6 @@
 HSPLcom/android/internal/os/ZygoteInit;->posixCapabilitiesAsBits([I)J
 HSPLcom/android/internal/os/ZygoteInit;->preload(Landroid/util/TimingsTraceLog;)V
 HSPLcom/android/internal/os/ZygoteInit;->preloadClasses()V
-HSPLcom/android/internal/os/ZygoteInit;->preloadColorStateLists(Landroid/content/res/TypedArray;)I
-HSPLcom/android/internal/os/ZygoteInit;->preloadDrawables(Landroid/content/res/TypedArray;)I
-HSPLcom/android/internal/os/ZygoteInit;->preloadResources()V
 HSPLcom/android/internal/os/ZygoteInit;->preloadSharedLibraries()V
 HSPLcom/android/internal/os/ZygoteInit;->preloadTextResources()V
 HSPLcom/android/internal/os/ZygoteInit;->setApiDenylistExemptions([Ljava/lang/String;)V
@@ -22082,9 +22274,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;IIIZZIZZI)V+]Lcom/android/internal/policy/PhoneWindow;Lcom/android/internal/policy/PhoneWindow;]Landroid/view/View;Landroid/view/View;]Lcom/android/internal/policy/DecorView$ColorViewAttributes;Lcom/android/internal/policy/DecorView$ColorViewAttributes;
+HSPLcom/android/internal/policy/DecorView;->updateColorViewInt(Lcom/android/internal/policy/DecorView$ColorViewState;IIIZZIZZI)V
 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;
 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
@@ -22111,6 +22303,7 @@
 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
+HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;-><init>()V
 HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState;-><init>(I)V
 HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState;->onSaveInstanceState()Landroid/os/Parcelable;
@@ -22239,7 +22432,6 @@
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getDefaultVoiceSubId()I
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getPhoneId(I)I
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getSlotIndex(I)I
-HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->isSubscriptionManagerServiceEnabled()Z
 HSPLcom/android/internal/telephony/ISub$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ISub;
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->asBinder()Landroid/os/IBinder;
@@ -22255,7 +22447,7 @@
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getNetworkCountryIsoForPhone(I)Ljava/lang/String;
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getNetworkTypeForSubscriber(ILjava/lang/String;Ljava/lang/String;)I
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getSignalStrength(I)Landroid/telephony/SignalStrength;
-HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getSimStateForSlotIndex(I)I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Lcom/android/internal/telephony/ITelephony$Stub$Proxy;Lcom/android/internal/telephony/ITelephony$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getSimStateForSlotIndex(I)I
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getSubscriptionCarrierId(I)I
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getSubscriptionSpecificCarrierId(I)I
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getVoiceNetworkTypeForSubscriber(ILjava/lang/String;Ljava/lang/String;)I
@@ -22274,7 +22466,7 @@
 HSPLcom/android/internal/telephony/SmsApplication;->getApplicationCollectionInternal(Landroid/content/Context;I)Ljava/util/Collection;
 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;ZLandroid/os/UserHandle;)Landroid/content/ComponentName;+]Landroid/os/UserHandle;Landroid/os/UserHandle;
+HSPLcom/android/internal/telephony/SmsApplication;->getDefaultSmsApplicationAsUser(Landroid/content/Context;ZLandroid/os/UserHandle;)Landroid/content/ComponentName;
 HSPLcom/android/internal/telephony/SmsApplication;->getDefaultSmsPackage(Landroid/content/Context;I)Ljava/lang/String;
 HSPLcom/android/internal/telephony/SmsApplication;->tryFixExclusiveSmsAppops(Landroid/content/Context;Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Z)Z
 HSPLcom/android/internal/telephony/TelephonyPermissions;->checkCallingOrSelfReadDeviceIdentifiers(Landroid/content/Context;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
@@ -22300,7 +22492,7 @@
 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
@@ -22322,7 +22514,7 @@
 HSPLcom/android/internal/util/ArrayUtils;->deepToString(Ljava/lang/Object;)Ljava/lang/String;
 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;+]Ljava/lang/Object;megamorphic_types]Ljava/lang/Class;Ljava/lang/Class;
+HSPLcom/android/internal/util/ArrayUtils;->emptyArray(Ljava/lang/Class;)[Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->emptyIfNull([Ljava/lang/Object;Ljava/lang/Class;)[Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->filter([Ljava/lang/Object;Ljava/util/function/IntFunction;Ljava/util/function/Predicate;)[Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->getOrNull([Ljava/lang/Object;I)Ljava/lang/Object;
@@ -22333,11 +22525,11 @@
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedArray(Ljava/lang/Class;I)[Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedBooleanArray(I)[Z
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedByteArray(I)[B
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedCharArray(I)[C+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
+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;+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedObjectArray(I)[Ljava/lang/Object;
 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
@@ -22355,6 +22547,8 @@
 HSPLcom/android/internal/util/CollectionUtils;->size(Ljava/util/Collection;)I
 HSPLcom/android/internal/util/CollectionUtils;->size(Ljava/util/Map;)I
 HSPLcom/android/internal/util/ConcurrentUtils$DirectExecutor;->execute(Ljava/lang/Runnable;)V
+HSPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->RGBToXYZ(III[D)V
+HSPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->getTempDouble3Array()[D+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLcom/android/internal/util/ExponentiallyBucketedHistogram;-><init>(I)V
 HSPLcom/android/internal/util/ExponentiallyBucketedHistogram;->add(I)V
 HSPLcom/android/internal/util/ExponentiallyBucketedHistogram;->log(Ljava/lang/String;Ljava/lang/CharSequence;)V
@@ -22370,7 +22564,7 @@
 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;->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
@@ -22378,18 +22572,18 @@
 HSPLcom/android/internal/util/FastPrintWriter;->print(Ljava/lang/String;)V
 HSPLcom/android/internal/util/FastPrintWriter;->println()V
 HSPLcom/android/internal/util/FastPrintWriter;->write(I)V
-HSPLcom/android/internal/util/FastPrintWriter;->write(Ljava/lang/String;)V
+HSPLcom/android/internal/util/FastPrintWriter;->write(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/internal/util/FastPrintWriter;->write([CII)V
 HSPLcom/android/internal/util/FastXmlSerializer;-><init>()V
 HSPLcom/android/internal/util/FastXmlSerializer;-><init>(I)V
-HSPLcom/android/internal/util/FastXmlSerializer;->append(C)V+]Lcom/android/internal/util/FastXmlSerializer;Lcom/android/internal/util/FastXmlSerializer;
-HSPLcom/android/internal/util/FastXmlSerializer;->append(Ljava/lang/String;)V
+HSPLcom/android/internal/util/FastXmlSerializer;->append(C)V
+HSPLcom/android/internal/util/FastXmlSerializer;->append(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/internal/util/FastXmlSerializer;->append(Ljava/lang/String;II)V+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/internal/util/FastXmlSerializer;Lcom/android/internal/util/FastXmlSerializer;
-HSPLcom/android/internal/util/FastXmlSerializer;->appendIndent(I)V
+HSPLcom/android/internal/util/FastXmlSerializer;->appendIndent(I)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/internal/util/FastXmlSerializer;->attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
 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;->escapeAndAppendString(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/internal/util/FastXmlSerializer;->flush()V
 HSPLcom/android/internal/util/FastXmlSerializer;->flushBytes()V
 HSPLcom/android/internal/util/FastXmlSerializer;->setFeature(Ljava/lang/String;Z)V
@@ -22406,7 +22600,7 @@
 HSPLcom/android/internal/util/FrameworkStatsLog;->write(ILjava/lang/String;IIF)V
 HSPLcom/android/internal/util/GrowingArrayUtils;->append([III)[I
 HSPLcom/android/internal/util/GrowingArrayUtils;->append([JIJ)[J
-HSPLcom/android/internal/util/GrowingArrayUtils;->append([Ljava/lang/Object;ILjava/lang/Object;)[Ljava/lang/Object;
+HSPLcom/android/internal/util/GrowingArrayUtils;->append([Ljava/lang/Object;ILjava/lang/Object;)[Ljava/lang/Object;+]Ljava/lang/Object;[Ljava/lang/Object;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLcom/android/internal/util/GrowingArrayUtils;->append([ZIZ)[Z
 HSPLcom/android/internal/util/GrowingArrayUtils;->growSize(I)I
 HSPLcom/android/internal/util/GrowingArrayUtils;->insert([IIII)[I
@@ -22420,25 +22614,35 @@
 HSPLcom/android/internal/util/IntPair;->of(II)J
 HSPLcom/android/internal/util/IntPair;->second(J)I
 HSPLcom/android/internal/util/LatencyTracker$$ExternalSyntheticLambda0;-><init>(Lcom/android/internal/util/LatencyTracker;I)V
-HSPLcom/android/internal/util/LatencyTracker$Session;-><init>(ILjava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLcom/android/internal/util/LatencyTracker$Session;->begin(Ljava/lang/Runnable;)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/util/concurrent/TimeUnit;Ljava/util/concurrent/TimeUnit;]Lcom/android/internal/util/LatencyTracker$Session;Lcom/android/internal/util/LatencyTracker$Session;
+HSPLcom/android/internal/util/LatencyTracker$$ExternalSyntheticLambda1;-><init>(Lcom/android/internal/util/LatencyTracker;Landroid/content/Context;)V
+HSPLcom/android/internal/util/LatencyTracker$$ExternalSyntheticLambda1;->run()V
+HSPLcom/android/internal/util/LatencyTracker$SLatencyTrackerHolder;->-$$Nest$sfgetsLatencyTracker()Lcom/android/internal/util/LatencyTracker;
+HSPLcom/android/internal/util/LatencyTracker$SLatencyTrackerHolder;-><clinit>()V
+HSPLcom/android/internal/util/LatencyTracker$Session;-><init>(ILjava/lang/String;)V
+HSPLcom/android/internal/util/LatencyTracker$Session;->begin(Ljava/lang/Runnable;)V
 HSPLcom/android/internal/util/LatencyTracker$Session;->traceName()Ljava/lang/String;
+HSPLcom/android/internal/util/LatencyTracker;->$r8$lambda$uPhaBjaIKsSqJgZ3Mw-LznEJiBg(Lcom/android/internal/util/LatencyTracker;Landroid/content/Context;)V
 HSPLcom/android/internal/util/LatencyTracker;->-$$Nest$smgetTraceNameOfAction(ILjava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/util/LatencyTracker;-><init>()V
 HSPLcom/android/internal/util/LatencyTracker;->getInstance(Landroid/content/Context;)Lcom/android/internal/util/LatencyTracker;
 HSPLcom/android/internal/util/LatencyTracker;->getNameOfAction(I)Ljava/lang/String;
-HSPLcom/android/internal/util/LatencyTracker;->getTraceNameOfAction(ILjava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/internal/util/LatencyTracker;->getTraceNameOfAction(ILjava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/util/LatencyTracker;->isEnabled()Z
+HSPLcom/android/internal/util/LatencyTracker;->isEnabled(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/internal/util/LatencyTracker;->lambda$startListeningForLatencyTrackerConfigChanges$0(Landroid/content/Context;)V
 HSPLcom/android/internal/util/LatencyTracker;->logAction(II)V
+HSPLcom/android/internal/util/LatencyTracker;->onActionCancel(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/internal/util/LatencyTracker;->onActionEnd(I)V
-HSPLcom/android/internal/util/LatencyTracker;->onActionStart(ILjava/lang/String;)V+]Lcom/android/internal/util/LatencyTracker;Lcom/android/internal/util/LatencyTracker;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/util/LatencyTracker$Session;Lcom/android/internal/util/LatencyTracker$Session;
+HSPLcom/android/internal/util/LatencyTracker;->onActionStart(ILjava/lang/String;)V
+HSPLcom/android/internal/util/LatencyTracker;->onDeviceConfigPropertiesUpdated(Landroid/util/SparseArray;)V
+HSPLcom/android/internal/util/LatencyTracker;->startListeningForLatencyTrackerConfigChanges()V
 HSPLcom/android/internal/util/LatencyTracker;->updateProperties(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/internal/util/LineBreakBufferedWriter;-><init>(Ljava/io/Writer;I)V
 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+]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;->println()V
+HSPLcom/android/internal/util/LineBreakBufferedWriter;->write(Ljava/lang/String;II)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/internal/util/LineBreakBufferedWriter;->writeBuffer(I)V
 HSPLcom/android/internal/util/MemInfoReader;-><init>()V
 HSPLcom/android/internal/util/MemInfoReader;->getTotalSize()J
@@ -22464,13 +22668,14 @@
 HSPLcom/android/internal/util/Preconditions;->checkArgumentInRange(FFFLjava/lang/String;)F
 HSPLcom/android/internal/util/Preconditions;->checkArgumentInRange(IIILjava/lang/String;)I
 HSPLcom/android/internal/util/Preconditions;->checkArgumentInRange(JJJLjava/lang/String;)J
+HSPLcom/android/internal/util/Preconditions;->checkArgumentNonNegative(FLjava/lang/String;)F
 HSPLcom/android/internal/util/Preconditions;->checkArgumentNonnegative(I)I
 HSPLcom/android/internal/util/Preconditions;->checkArgumentNonnegative(ILjava/lang/String;)I
 HSPLcom/android/internal/util/Preconditions;->checkArgumentNonnegative(J)J
 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;
 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;
@@ -22534,7 +22739,7 @@
 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;+]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/XmlSerializerWrapper;->text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
 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
@@ -22556,25 +22761,25 @@
 HSPLcom/android/internal/util/XmlUtils;->readLongAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;J)J
 HSPLcom/android/internal/util/XmlUtils;->readMapXml(Ljava/io/InputStream;)Ljava/util/HashMap;
 HSPLcom/android/internal/util/XmlUtils;->readStringAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/internal/util/XmlUtils;->readThisMapXml(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;)Ljava/util/HashMap;
-HSPLcom/android/internal/util/XmlUtils;->readThisPrimitiveValueXml(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;)Ljava/lang/Object;
+HSPLcom/android/internal/util/XmlUtils;->readThisMapXml(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;)Ljava/util/HashMap;+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
+HSPLcom/android/internal/util/XmlUtils;->readThisPrimitiveValueXml(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;)Ljava/lang/Object;+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
 HSPLcom/android/internal/util/XmlUtils;->readThisSetXml(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;Z)Ljava/util/HashSet;
-HSPLcom/android/internal/util/XmlUtils;->readThisValueXml(Lcom/android/modules/utils/TypedXmlPullParser;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;Z)Ljava/lang/Object;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
+HSPLcom/android/internal/util/XmlUtils;->readThisValueXml(Lcom/android/modules/utils/TypedXmlPullParser;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;Z)Ljava/lang/Object;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
 HSPLcom/android/internal/util/XmlUtils;->readValueXml(Lcom/android/modules/utils/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;Lcom/android/modules/utils/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;Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V+]Ljava/util/Map;Ljava/util/HashMap;
 HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/io/OutputStream;)V
 HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/lang/String;Lcom/android/modules/utils/TypedXmlSerializer;)V
 HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/lang/String;Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V
 HSPLcom/android/internal/util/XmlUtils;->writeSetXml(Ljava/util/Set;Ljava/lang/String;Lcom/android/modules/utils/TypedXmlSerializer;)V
 HSPLcom/android/internal/util/XmlUtils;->writeValueXml(Ljava/lang/Object;Ljava/lang/String;Lcom/android/modules/utils/TypedXmlSerializer;)V
 HSPLcom/android/internal/util/XmlUtils;->writeValueXml(Ljava/lang/Object;Ljava/lang/String;Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Ljava/lang/Object;Ljava/lang/String;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/lang/Float;Ljava/lang/Float;
-HSPLcom/android/internal/util/function/pooled/OmniFunction;->run()V
+HSPLcom/android/internal/util/function/pooled/OmniFunction;->run()V+]Lcom/android/internal/util/function/pooled/OmniFunction;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
 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/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/BiConsumer;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(Ljava/util/function/Consumer;Ljava/lang/Object;)Landroid/os/Message;
 HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainRunnable(Lcom/android/internal/util/function/TriConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledRunnable;
 HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainRunnable(Ljava/util/function/BiConsumer;Ljava/lang/Object;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledRunnable;
@@ -22582,21 +22787,21 @@
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;->decodeReturnType(I)I
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;->encode(II)I
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->-$$Nest$smunmask(II)I
-HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->acquire(Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;)Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
-HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->acquire(Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;Ljava/lang/Object;IIILjava/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;)Lcom/android/internal/util/function/pooled/PooledLambda;
+HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->acquire(Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;)Lcom/android/internal/util/function/pooled/PooledLambdaImpl;+]Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;]Lcom/android/internal/util/function/pooled/PooledLambdaImpl;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
+HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->acquire(Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;Ljava/lang/Object;IIILjava/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;)Lcom/android/internal/util/function/pooled/PooledLambda;+]Lcom/android/internal/util/function/pooled/PooledLambdaImpl;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->checkNotRecycled()V
-HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->doInvoke()Ljava/lang/Object;
-HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->doRecycle()V
+HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->doInvoke()Ljava/lang/Object;+]Ljava/util/function/BiConsumer;Landroid/app/UiAutomation$IAccessibilityServiceClientImpl$1$$ExternalSyntheticLambda0;]Lcom/android/internal/util/function/pooled/PooledLambdaImpl;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
+HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->doRecycle()V+]Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->fillInArg(Ljava/lang/Object;)Z
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->getFlags(I)I
-HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->invoke(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;
+HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->invoke(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;+]Lcom/android/internal/util/function/pooled/PooledLambdaImpl;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->isInvocationArgAtIndex(I)Z
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->isRecycleOnUse()Z
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->isRecycled()Z
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->mask(II)I
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->popArg(I)Ljava/lang/Object;
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->recycleOnUse()Lcom/android/internal/util/function/pooled/OmniFunction;
-HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->recycleOnUse()Lcom/android/internal/util/function/pooled/PooledRunnable;
+HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->recycleOnUse()Lcom/android/internal/util/function/pooled/PooledRunnable;+]Lcom/android/internal/util/function/pooled/PooledLambdaImpl;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->setFlags(II)V
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->setIfInBounds([Ljava/lang/Object;ILjava/lang/Object;)V
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->unmask(II)I
@@ -22677,12 +22882,12 @@
 HSPLcom/android/internal/widget/LockPatternUtils;->getLockSettings()Lcom/android/internal/widget/ILockSettings;
 HSPLcom/android/internal/widget/LockPatternUtils;->getPowerButtonInstantlyLocks(I)Z
 HSPLcom/android/internal/widget/LockPatternUtils;->getString(Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/internal/widget/LockPatternUtils;->getUserManager(I)Landroid/os/UserManager;+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/internal/widget/LockPatternUtils;->hasSeparateChallenge(I)Z
 HSPLcom/android/internal/widget/LockPatternUtils;->isManagedProfile(I)Z
 HSPLcom/android/internal/widget/LockPatternUtils;->isOwnerInfoEnabled(I)Z
 HSPLcom/android/internal/widget/LockPatternUtils;->isSecure(I)Z
 HSPLcom/android/internal/widget/LockPatternUtils;->isSeparateProfileChallengeEnabled(I)Z
-HSPLcom/android/internal/widget/LockscreenCredential;-><init>(I[B)V
 HSPLcom/android/modules/utils/TypedXmlPullParser;->getAttributeBoolean(Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/modules/utils/TypedXmlPullParser;->getAttributeFloat(Ljava/lang/String;Ljava/lang/String;)F
 HSPLcom/android/modules/utils/TypedXmlPullParser;->getAttributeIndex(Ljava/lang/String;Ljava/lang/String;)I+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
@@ -22770,7 +22975,7 @@
 HSPLorg/ccil/cowan/tagsoup/HTMLScanner;->scan(Ljava/io/Reader;Lorg/ccil/cowan/tagsoup/ScanHandler;)V
 HSPLorg/ccil/cowan/tagsoup/HTMLScanner;->unread(Ljava/io/PushbackReader;I)V
 HSPLorg/ccil/cowan/tagsoup/Parser$1;-><init>(Lorg/ccil/cowan/tagsoup/Parser;)V
-HSPLorg/ccil/cowan/tagsoup/Parser;-><init>()V+]Ljava/util/HashMap;Ljava/util/HashMap;
+HSPLorg/ccil/cowan/tagsoup/Parser;-><init>()V
 HSPLorg/ccil/cowan/tagsoup/Parser;->aname([CII)V
 HSPLorg/ccil/cowan/tagsoup/Parser;->aval([CII)V
 HSPLorg/ccil/cowan/tagsoup/Parser;->entity([CII)V
@@ -22873,6 +23078,14 @@
 Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;
 Landroid/animation/AnimationHandler$MyFrameCallbackProvider;
 Landroid/animation/AnimationHandler;
+Landroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda0;
+Landroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda1;
+Landroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda2;
+Landroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda3;
+Landroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda4;
+Landroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda5;
+Landroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda6;
+Landroid/animation/Animator$AnimatorCaller;
 Landroid/animation/Animator$AnimatorConstantState;
 Landroid/animation/Animator$AnimatorListener;
 Landroid/animation/Animator$AnimatorPauseListener;
@@ -22880,6 +23093,7 @@
 Landroid/animation/AnimatorInflater$PathDataEvaluator;
 Landroid/animation/AnimatorInflater;
 Landroid/animation/AnimatorListenerAdapter;
+Landroid/animation/AnimatorSet$$ExternalSyntheticLambda0;
 Landroid/animation/AnimatorSet$1;
 Landroid/animation/AnimatorSet$2;
 Landroid/animation/AnimatorSet$3;
@@ -22972,9 +23186,11 @@
 Landroid/app/ActivityClient;
 Landroid/app/ActivityManager$1;
 Landroid/app/ActivityManager$2;
+Landroid/app/ActivityManager$3;
 Landroid/app/ActivityManager$AppTask;
 Landroid/app/ActivityManager$MemoryInfo$1;
 Landroid/app/ActivityManager$MemoryInfo;
+Landroid/app/ActivityManager$MyUidObserver;
 Landroid/app/ActivityManager$OnUidImportanceListener;
 Landroid/app/ActivityManager$PendingIntentInfo$1;
 Landroid/app/ActivityManager$PendingIntentInfo;
@@ -22991,7 +23207,6 @@
 Landroid/app/ActivityManager$RunningTaskInfo;
 Landroid/app/ActivityManager$TaskDescription$1;
 Landroid/app/ActivityManager$TaskDescription;
-Landroid/app/ActivityManager$UidObserver;
 Landroid/app/ActivityManager;
 Landroid/app/ActivityManagerInternal;
 Landroid/app/ActivityOptions$1;
@@ -23304,6 +23519,9 @@
 Landroid/app/IUiModeManager;
 Landroid/app/IUiModeManagerCallback$Stub;
 Landroid/app/IUiModeManagerCallback;
+Landroid/app/IUidFrozenStateChangedCallback$Stub$Proxy;
+Landroid/app/IUidFrozenStateChangedCallback$Stub;
+Landroid/app/IUidFrozenStateChangedCallback;
 Landroid/app/IUidObserver$Stub$Proxy;
 Landroid/app/IUidObserver$Stub;
 Landroid/app/IUidObserver;
@@ -23633,11 +23851,11 @@
 Landroid/app/SystemServiceRegistry;
 Landroid/app/TaskInfo;
 Landroid/app/TaskStackListener;
-Landroid/app/UiModeManager$1;
 Landroid/app/UiModeManager$InnerListener;
 Landroid/app/UiModeManager$OnProjectionStateChangedListener;
 Landroid/app/UiModeManager$OnProjectionStateChangedListenerResourceManager;
 Landroid/app/UiModeManager;
+Landroid/app/UidObserver;
 Landroid/app/UriGrantsManager$1;
 Landroid/app/UriGrantsManager;
 Landroid/app/UserSwitchObserver;
@@ -24584,7 +24802,6 @@
 Landroid/content/pm/verify/domain/IDomainVerificationManager;
 Landroid/content/res/ApkAssets;
 Landroid/content/res/AssetFileDescriptor$1;
-Landroid/content/res/AssetFileDescriptor$AutoCloseInputStream$OffsetCorrectFileChannel;
 Landroid/content/res/AssetFileDescriptor$AutoCloseInputStream;
 Landroid/content/res/AssetFileDescriptor;
 Landroid/content/res/AssetManager$AssetInputStream;
@@ -25440,7 +25657,11 @@
 Landroid/hardware/display/DeviceProductInfo$ManufactureDate$1;
 Landroid/hardware/display/DeviceProductInfo$ManufactureDate;
 Landroid/hardware/display/DeviceProductInfo;
+Landroid/hardware/display/DisplayManager$$ExternalSyntheticLambda0;
+Landroid/hardware/display/DisplayManager$$ExternalSyntheticLambda1;
+Landroid/hardware/display/DisplayManager$$ExternalSyntheticLambda2;
 Landroid/hardware/display/DisplayManager$DisplayListener;
+Landroid/hardware/display/DisplayManager$WeakDisplayCache;
 Landroid/hardware/display/DisplayManager;
 Landroid/hardware/display/DisplayManagerGlobal$1;
 Landroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate$$ExternalSyntheticLambda0;
@@ -25528,7 +25749,6 @@
 Landroid/hardware/fingerprint/IFingerprintServiceReceiver$Stub$Proxy;
 Landroid/hardware/fingerprint/IFingerprintServiceReceiver$Stub;
 Landroid/hardware/fingerprint/IFingerprintServiceReceiver;
-Landroid/hardware/fingerprint/IUdfpsOverlay;
 Landroid/hardware/fingerprint/IUdfpsOverlayController;
 Landroid/hardware/fingerprint/IUdfpsRefreshRateRequestCallback$Stub;
 Landroid/hardware/fingerprint/IUdfpsRefreshRateRequestCallback;
@@ -25555,7 +25775,11 @@
 Landroid/hardware/input/InputDeviceIdentifier;
 Landroid/hardware/input/InputManager$InputDeviceListener;
 Landroid/hardware/input/InputManager;
+Landroid/hardware/input/InputManagerGlobal$InputDeviceListenerDelegate;
+Landroid/hardware/input/InputManagerGlobal$InputDevicesChangedListener;
+Landroid/hardware/input/InputManagerGlobal$OnTabletModeChangedListenerDelegate;
 Landroid/hardware/input/InputManagerGlobal;
+Landroid/hardware/input/InputSettings;
 Landroid/hardware/input/KeyboardLayout$1;
 Landroid/hardware/input/KeyboardLayout;
 Landroid/hardware/input/TouchCalibration$1;
@@ -25880,7 +26104,6 @@
 Landroid/hardware/radio/V1_6/SliceInfo;
 Landroid/hardware/radio/V1_6/SlicingConfig;
 Landroid/hardware/radio/V1_6/TrafficDescriptor;
-Landroid/hardware/radio/config/V1_0/IRadioConfig$Proxy;
 Landroid/hardware/radio/config/V1_0/IRadioConfig;
 Landroid/hardware/radio/config/V1_0/IRadioConfigIndication;
 Landroid/hardware/radio/config/V1_0/IRadioConfigResponse;
@@ -27659,6 +27882,7 @@
 Landroid/media/AudioManager$OnAmPortUpdateListener;
 Landroid/media/AudioManager$OnAudioFocusChangeListener;
 Landroid/media/AudioManager$OnAudioPortUpdateListener;
+Landroid/media/AudioManager$OnModeChangedListener;
 Landroid/media/AudioManager$PlaybackConfigChangeCallbackData;
 Landroid/media/AudioManager$RecordConfigChangeCallbackData;
 Landroid/media/AudioManager$SafeWaitObject;
@@ -27984,7 +28208,6 @@
 Landroid/media/RemoteControlClient;
 Landroid/media/RemoteDisplay;
 Landroid/media/ResampleInputStream;
-Landroid/media/Ringtone$MyOnCompletionListener;
 Landroid/media/Ringtone;
 Landroid/media/RingtoneManager;
 Landroid/media/RouteDiscoveryPreference$1;
@@ -28272,9 +28495,6 @@
 Landroid/net/INetworkScoreService$Stub$Proxy;
 Landroid/net/INetworkScoreService$Stub;
 Landroid/net/INetworkScoreService;
-Landroid/net/ITetheringStatsProvider$Stub$Proxy;
-Landroid/net/ITetheringStatsProvider$Stub;
-Landroid/net/ITetheringStatsProvider;
 Landroid/net/IVpnManager$Stub$Proxy;
 Landroid/net/IVpnManager$Stub;
 Landroid/net/IVpnManager;
@@ -28759,7 +28979,9 @@
 Landroid/os/INetworkManagementService;
 Landroid/os/IPermissionController$Stub;
 Landroid/os/IPermissionController;
+Landroid/os/IPowerManager$LowPowerStandbyPolicy$1;
 Landroid/os/IPowerManager$LowPowerStandbyPolicy;
+Landroid/os/IPowerManager$LowPowerStandbyPortDescription$1;
 Landroid/os/IPowerManager$LowPowerStandbyPortDescription;
 Landroid/os/IPowerManager$Stub$Proxy;
 Landroid/os/IPowerManager$Stub;
@@ -29382,8 +29604,6 @@
 Landroid/security/Credentials;
 Landroid/security/FileIntegrityManager;
 Landroid/security/GateKeeper;
-Landroid/security/GenerateRkpKey$1;
-Landroid/security/GenerateRkpKey;
 Landroid/security/IFileIntegrityService$Stub;
 Landroid/security/IFileIntegrityService;
 Landroid/security/IKeyChainAliasCallback$Stub;
@@ -29401,6 +29621,7 @@
 Landroid/security/KeyStore$State;
 Landroid/security/KeyStore2$$ExternalSyntheticLambda0;
 Landroid/security/KeyStore2$$ExternalSyntheticLambda1;
+Landroid/security/KeyStore2$$ExternalSyntheticLambda2;
 Landroid/security/KeyStore2$$ExternalSyntheticLambda3;
 Landroid/security/KeyStore2$$ExternalSyntheticLambda4;
 Landroid/security/KeyStore2$CheckedRemoteRequest;
@@ -29516,7 +29737,6 @@
 Landroid/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi$$ExternalSyntheticLambda5;
 Landroid/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi$$ExternalSyntheticLambda6;
 Landroid/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi$EC;
-Landroid/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi$GenerateKeyPairHelperResult;
 Landroid/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi;
 Landroid/security/keystore2/AndroidKeyStoreLoadStoreParameter;
 Landroid/security/keystore2/AndroidKeyStorePrivateKey;
@@ -29749,7 +29969,6 @@
 Landroid/service/notification/StatusBarNotification$1;
 Landroid/service/notification/StatusBarNotification;
 Landroid/service/notification/ZenModeConfig$1;
-Landroid/service/notification/ZenModeConfig$Diff;
 Landroid/service/notification/ZenModeConfig$EventInfo;
 Landroid/service/notification/ZenModeConfig$ScheduleInfo;
 Landroid/service/notification/ZenModeConfig$ZenRule$1;
@@ -29876,7 +30095,6 @@
 Landroid/speech/tts/UtteranceProgressListener;
 Landroid/stats/devicepolicy/nano/StringList;
 Landroid/sysprop/AdbProperties;
-Landroid/sysprop/ApexProperties;
 Landroid/sysprop/ContactsProperties;
 Landroid/sysprop/CryptoProperties$state_values;
 Landroid/sysprop/CryptoProperties$type_values;
@@ -30266,7 +30484,6 @@
 Landroid/telephony/SubscriptionManager$CallISubMethodHelper;
 Landroid/telephony/SubscriptionManager$IntegerPropertyInvalidatedCache;
 Landroid/telephony/SubscriptionManager$OnOpportunisticSubscriptionsChangedListener;
-Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener$OnSubscriptionsChangedListenerHandler;
 Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;
 Landroid/telephony/SubscriptionManager$VoidPropertyInvalidatedCache;
 Landroid/telephony/SubscriptionManager;
@@ -30785,6 +31002,7 @@
 Landroid/text/method/DateTimeKeyListener;
 Landroid/text/method/DialerKeyListener;
 Landroid/text/method/DigitsKeyListener;
+Landroid/text/method/InsertModeTransformationMethod;
 Landroid/text/method/KeyListener;
 Landroid/text/method/LinkMovementMethod;
 Landroid/text/method/MetaKeyKeyListener;
@@ -30982,6 +31200,8 @@
 Landroid/util/DataUnit$4;
 Landroid/util/DataUnit$5;
 Landroid/util/DataUnit$6;
+Landroid/util/DataUnit$7;
+Landroid/util/DataUnit$8;
 Landroid/util/DataUnit;
 Landroid/util/DebugUtils;
 Landroid/util/DisplayMetrics;
@@ -31490,6 +31710,9 @@
 Landroid/view/SurfaceControl$TrustedPresentationThresholds;
 Landroid/view/SurfaceControl;
 Landroid/view/SurfaceControlHdrLayerInfoListener;
+Landroid/view/SurfaceControlRegistry$DefaultReporter;
+Landroid/view/SurfaceControlRegistry$Reporter;
+Landroid/view/SurfaceControlRegistry;
 Landroid/view/SurfaceControlViewHost$SurfacePackage$1;
 Landroid/view/SurfaceControlViewHost$SurfacePackage;
 Landroid/view/SurfaceHolder$Callback2;
@@ -31639,6 +31862,7 @@
 Landroid/view/ViewRootImpl$$ExternalSyntheticLambda16;
 Landroid/view/ViewRootImpl$$ExternalSyntheticLambda17;
 Landroid/view/ViewRootImpl$$ExternalSyntheticLambda18;
+Landroid/view/ViewRootImpl$$ExternalSyntheticLambda19;
 Landroid/view/ViewRootImpl$$ExternalSyntheticLambda1;
 Landroid/view/ViewRootImpl$$ExternalSyntheticLambda2;
 Landroid/view/ViewRootImpl$$ExternalSyntheticLambda3;
@@ -31657,7 +31881,7 @@
 Landroid/view/ViewRootImpl$6;
 Landroid/view/ViewRootImpl$7;
 Landroid/view/ViewRootImpl$8$$ExternalSyntheticLambda0;
-Landroid/view/ViewRootImpl$8$1;
+Landroid/view/ViewRootImpl$8$$ExternalSyntheticLambda1;
 Landroid/view/ViewRootImpl$8;
 Landroid/view/ViewRootImpl$AccessibilityInteractionConnection;
 Landroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;
@@ -31866,7 +32090,6 @@
 Landroid/view/autofill/AutofillManager$$ExternalSyntheticLambda2;
 Landroid/view/autofill/AutofillManager$$ExternalSyntheticLambda3;
 Landroid/view/autofill/AutofillManager$$ExternalSyntheticLambda4;
-Landroid/view/autofill/AutofillManager$$ExternalSyntheticLambda5;
 Landroid/view/autofill/AutofillManager$AugmentedAutofillManagerClient;
 Landroid/view/autofill/AutofillManager$AutofillCallback;
 Landroid/view/autofill/AutofillManager$AutofillClient;
@@ -31950,6 +32173,7 @@
 Landroid/view/displayhash/DisplayHashManager;
 Landroid/view/displayhash/DisplayHashResultCallback;
 Landroid/view/inputmethod/BaseInputConnection;
+Landroid/view/inputmethod/CancellableHandwritingGesture;
 Landroid/view/inputmethod/CompletionInfo$1;
 Landroid/view/inputmethod/CompletionInfo;
 Landroid/view/inputmethod/ComposingText;
@@ -32043,6 +32267,7 @@
 Landroid/view/inputmethod/PreviewableHandwritingGesture;
 Landroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda24;
 Landroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda25;
+Landroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda36;
 Landroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda37;
 Landroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda40;
 Landroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda8;
@@ -32748,6 +32973,7 @@
 Landroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda2;
 Landroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda3;
 Landroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda5;
+Landroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda6;
 Landroid/window/SurfaceSyncGroup$1;
 Landroid/window/SurfaceSyncGroup$2;
 Landroid/window/SurfaceSyncGroup$ISurfaceSyncGroupImpl;
@@ -32787,6 +33013,7 @@
 Landroid/window/WindowInfosListener;
 Landroid/window/WindowMetricsController$$ExternalSyntheticLambda0;
 Landroid/window/WindowMetricsController;
+Landroid/window/WindowOnBackInvokedDispatcher$$ExternalSyntheticLambda0;
 Landroid/window/WindowOnBackInvokedDispatcher$Checker;
 Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda0;
 Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda1;
@@ -33537,6 +33764,7 @@
 Lcom/android/internal/compat/IPlatformCompat;
 Lcom/android/internal/compat/IPlatformCompatNative$Stub;
 Lcom/android/internal/compat/IPlatformCompatNative;
+Lcom/android/internal/config/appcloning/AppCloningDeviceConfigHelper$$ExternalSyntheticLambda0;
 Lcom/android/internal/config/appcloning/AppCloningDeviceConfigHelper;
 Lcom/android/internal/content/F2fsUtils;
 Lcom/android/internal/content/NativeLibraryHelper$Handle;
@@ -33583,8 +33811,6 @@
 Lcom/android/internal/dynamicanimation/animation/Force;
 Lcom/android/internal/dynamicanimation/animation/SpringAnimation;
 Lcom/android/internal/dynamicanimation/animation/SpringForce;
-Lcom/android/modules/expresslog/Counter;
-Lcom/android/modules/expresslog/Utils;
 Lcom/android/internal/graphics/ColorUtils$ContrastCalculator;
 Lcom/android/internal/graphics/ColorUtils;
 Lcom/android/internal/graphics/SfVsyncFrameCallbackProvider;
@@ -34309,6 +34535,7 @@
 Lcom/android/internal/telephony/Phone$NetworkSelectMessage;
 Lcom/android/internal/telephony/Phone$SilentRedialParam;
 Lcom/android/internal/telephony/Phone;
+Lcom/android/internal/telephony/PhoneConfigurationManager$$ExternalSyntheticLambda0;
 Lcom/android/internal/telephony/PhoneConfigurationManager$ConfigManagerHandler;
 Lcom/android/internal/telephony/PhoneConfigurationManager$MockableInterface;
 Lcom/android/internal/telephony/PhoneConfigurationManager;
@@ -34458,34 +34685,6 @@
 Lcom/android/internal/telephony/StateMachine$SmHandler$StateInfo;
 Lcom/android/internal/telephony/StateMachine$SmHandler;
 Lcom/android/internal/telephony/StateMachine;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda0;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda10;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda11;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda1;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda2;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda3;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda4;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda5;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda6;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda7;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda8;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda9;
-Lcom/android/internal/telephony/SubscriptionController$1;
-Lcom/android/internal/telephony/SubscriptionController$2;
-Lcom/android/internal/telephony/SubscriptionController$WatchedInt;
-Lcom/android/internal/telephony/SubscriptionController$WatchedSlotIndexToSubIds;
-Lcom/android/internal/telephony/SubscriptionController;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$$ExternalSyntheticLambda0;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$$ExternalSyntheticLambda1;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$$ExternalSyntheticLambda2;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$$ExternalSyntheticLambda3;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$$ExternalSyntheticLambda4;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$$ExternalSyntheticLambda5;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$$ExternalSyntheticLambda6;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$1;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$2;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$UpdateEmbeddedSubsCallback;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater;
 Lcom/android/internal/telephony/TelephonyCapabilities;
 Lcom/android/internal/telephony/TelephonyCommonStatsLog;
 Lcom/android/internal/telephony/TelephonyComponentFactory$$ExternalSyntheticLambda0;
@@ -35036,6 +35235,7 @@
 Lcom/android/internal/telephony/nano/PersistAtomsProto$CellularDataServiceSwitch;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$CellularServiceState;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$DataCallSession;
+Lcom/android/internal/telephony/nano/PersistAtomsProto$EmergencyNumbersInfo;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$GbaEvent;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsDedicatedBearerEvent;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsDedicatedBearerListenerEvent;
@@ -35052,6 +35252,12 @@
 Lcom/android/internal/telephony/nano/PersistAtomsProto$PresenceNotifyEvent;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$RcsAcsProvisioningStats;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$RcsClientProvisioningStats;
+Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteController;
+Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteIncomingDatagram;
+Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteOutgoingDatagram;
+Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteProvision;
+Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteSession;
+Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteSosMessageRecommender;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$SipDelegateStats;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$SipMessageResponse;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$SipTransportFeatureTagStats;
@@ -35497,6 +35703,9 @@
 Lcom/android/internal/util/LatencyTracker$$ExternalSyntheticLambda2;
 Lcom/android/internal/util/LatencyTracker$Action;
 Lcom/android/internal/util/LatencyTracker$ActionProperties;
+Lcom/android/internal/util/LatencyTracker$FrameworkStatsLogEvent;
+Lcom/android/internal/util/LatencyTracker$SLatencyTrackerHolder;
+Lcom/android/internal/util/LatencyTracker$Session$$ExternalSyntheticLambda0;
 Lcom/android/internal/util/LatencyTracker$Session;
 Lcom/android/internal/util/LatencyTracker;
 Lcom/android/internal/util/LineBreakBufferedWriter;
@@ -35734,6 +35943,8 @@
 Lcom/android/internal/widget/floatingtoolbar/FloatingToolbar$$ExternalSyntheticLambda0;
 Lcom/android/internal/widget/floatingtoolbar/FloatingToolbar;
 Lcom/android/internal/widget/floatingtoolbar/FloatingToolbarPopup;
+Lcom/android/modules/expresslog/Counter;
+Lcom/android/modules/expresslog/Utils;
 Lcom/android/modules/utils/BasicShellCommandHandler;
 Lcom/android/modules/utils/TypedXmlPullParser;
 Lcom/android/modules/utils/TypedXmlSerializer;
@@ -36309,6 +36520,10 @@
 Lgov/nist/javax/sip/stack/UDPMessageChannel$PingBackTimerTask;
 Lgov/nist/javax/sip/stack/UDPMessageChannel;
 Lgov/nist/javax/sip/stack/UDPMessageProcessor;
+Ljava/io/InterruptedIOException;
+Ljava/nio/DirectByteBuffer;
+Ljava/text/DecimalFormat;
+Ljava/util/GregorianCalendar;
 Ljavax/microedition/khronos/egl/EGL10;
 Ljavax/microedition/khronos/egl/EGL11;
 Ljavax/microedition/khronos/egl/EGL;
@@ -36738,8 +36953,8 @@
 [Landroid/net/NetworkKey;
 [Landroid/net/Uri;
 [Landroid/net/rtp/AudioCodec;
+[Landroid/opengl/EGLConfig;
 [Landroid/os/AsyncTask$Status;
-[Landroid/os/BatteryConsumer$Dimensions;
 [Landroid/os/BatteryConsumer$Key;
 [Landroid/os/BatteryStats$BitDescription;
 [Landroid/os/BatteryStats$IntToString;
diff --git a/boot/preloaded-classes b/boot/preloaded-classes
index 4293caf..d4dda3a 100644
--- a/boot/preloaded-classes
+++ b/boot/preloaded-classes
@@ -93,6 +93,14 @@
 android.animation.AnimationHandler$AnimationFrameCallbackProvider
 android.animation.AnimationHandler$MyFrameCallbackProvider
 android.animation.AnimationHandler
+android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda0
+android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda1
+android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda2
+android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda3
+android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda4
+android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda5
+android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda6
+android.animation.Animator$AnimatorCaller
 android.animation.Animator$AnimatorConstantState
 android.animation.Animator$AnimatorListener
 android.animation.Animator$AnimatorPauseListener
@@ -100,6 +108,7 @@
 android.animation.AnimatorInflater$PathDataEvaluator
 android.animation.AnimatorInflater
 android.animation.AnimatorListenerAdapter
+android.animation.AnimatorSet$$ExternalSyntheticLambda0
 android.animation.AnimatorSet$1
 android.animation.AnimatorSet$2
 android.animation.AnimatorSet$3
@@ -192,9 +201,11 @@
 android.app.ActivityClient
 android.app.ActivityManager$1
 android.app.ActivityManager$2
+android.app.ActivityManager$3
 android.app.ActivityManager$AppTask
 android.app.ActivityManager$MemoryInfo$1
 android.app.ActivityManager$MemoryInfo
+android.app.ActivityManager$MyUidObserver
 android.app.ActivityManager$OnUidImportanceListener
 android.app.ActivityManager$PendingIntentInfo$1
 android.app.ActivityManager$PendingIntentInfo
@@ -211,7 +222,6 @@
 android.app.ActivityManager$RunningTaskInfo
 android.app.ActivityManager$TaskDescription$1
 android.app.ActivityManager$TaskDescription
-android.app.ActivityManager$MyUidObserver
 android.app.ActivityManager
 android.app.ActivityManagerInternal
 android.app.ActivityOptions$1
@@ -524,6 +534,9 @@
 android.app.IUiModeManager
 android.app.IUiModeManagerCallback$Stub
 android.app.IUiModeManagerCallback
+android.app.IUidFrozenStateChangedCallback$Stub$Proxy
+android.app.IUidFrozenStateChangedCallback$Stub
+android.app.IUidFrozenStateChangedCallback
 android.app.IUidObserver$Stub$Proxy
 android.app.IUidObserver$Stub
 android.app.IUidObserver
@@ -852,11 +865,11 @@
 android.app.SystemServiceRegistry
 android.app.TaskInfo
 android.app.TaskStackListener
-android.app.UiModeManager$1
 android.app.UiModeManager$InnerListener
 android.app.UiModeManager$OnProjectionStateChangedListener
 android.app.UiModeManager$OnProjectionStateChangedListenerResourceManager
 android.app.UiModeManager
+android.app.UidObserver
 android.app.UriGrantsManager$1
 android.app.UriGrantsManager
 android.app.UserSwitchObserver
@@ -1801,7 +1814,6 @@
 android.content.pm.verify.domain.IDomainVerificationManager
 android.content.res.ApkAssets
 android.content.res.AssetFileDescriptor$1
-android.content.res.AssetFileDescriptor$AutoCloseInputStream$OffsetCorrectFileChannel
 android.content.res.AssetFileDescriptor$AutoCloseInputStream
 android.content.res.AssetFileDescriptor
 android.content.res.AssetManager$AssetInputStream
@@ -2656,7 +2668,11 @@
 android.hardware.display.DeviceProductInfo$ManufactureDate$1
 android.hardware.display.DeviceProductInfo$ManufactureDate
 android.hardware.display.DeviceProductInfo
+android.hardware.display.DisplayManager$$ExternalSyntheticLambda0
+android.hardware.display.DisplayManager$$ExternalSyntheticLambda1
+android.hardware.display.DisplayManager$$ExternalSyntheticLambda2
 android.hardware.display.DisplayManager$DisplayListener
+android.hardware.display.DisplayManager$WeakDisplayCache
 android.hardware.display.DisplayManager
 android.hardware.display.DisplayManagerGlobal$1
 android.hardware.display.DisplayManagerGlobal$DisplayListenerDelegate$$ExternalSyntheticLambda0
@@ -2744,7 +2760,6 @@
 android.hardware.fingerprint.IFingerprintServiceReceiver$Stub$Proxy
 android.hardware.fingerprint.IFingerprintServiceReceiver$Stub
 android.hardware.fingerprint.IFingerprintServiceReceiver
-android.hardware.fingerprint.IUdfpsOverlay
 android.hardware.fingerprint.IUdfpsOverlayController
 android.hardware.fingerprint.IUdfpsRefreshRateRequestCallback$Stub
 android.hardware.fingerprint.IUdfpsRefreshRateRequestCallback
@@ -2771,7 +2786,10 @@
 android.hardware.input.InputDeviceIdentifier
 android.hardware.input.InputManager$InputDeviceListener
 android.hardware.input.InputManager
+android.hardware.input.InputManagerGlobal$InputDeviceListenerDelegate
+android.hardware.input.InputManagerGlobal$OnTabletModeChangedListenerDelegate
 android.hardware.input.InputManagerGlobal
+android.hardware.input.InputSettings
 android.hardware.input.KeyboardLayout$1
 android.hardware.input.KeyboardLayout
 android.hardware.input.TouchCalibration$1
@@ -3096,7 +3114,6 @@
 android.hardware.radio.V1_6.SliceInfo
 android.hardware.radio.V1_6.SlicingConfig
 android.hardware.radio.V1_6.TrafficDescriptor
-android.hardware.radio.config.V1_0.IRadioConfig$Proxy
 android.hardware.radio.config.V1_0.IRadioConfig
 android.hardware.radio.config.V1_0.IRadioConfigIndication
 android.hardware.radio.config.V1_0.IRadioConfigResponse
@@ -4875,6 +4892,7 @@
 android.media.AudioManager$OnAmPortUpdateListener
 android.media.AudioManager$OnAudioFocusChangeListener
 android.media.AudioManager$OnAudioPortUpdateListener
+android.media.AudioManager$OnModeChangedListener
 android.media.AudioManager$PlaybackConfigChangeCallbackData
 android.media.AudioManager$RecordConfigChangeCallbackData
 android.media.AudioManager$SafeWaitObject
@@ -5197,7 +5215,6 @@
 android.media.RemoteControlClient
 android.media.RemoteDisplay
 android.media.ResampleInputStream
-android.media.Ringtone$MyOnCompletionListener
 android.media.Ringtone
 android.media.RingtoneManager
 android.media.RouteDiscoveryPreference$1
@@ -5485,9 +5502,6 @@
 android.net.INetworkScoreService$Stub$Proxy
 android.net.INetworkScoreService$Stub
 android.net.INetworkScoreService
-android.net.ITetheringStatsProvider$Stub$Proxy
-android.net.ITetheringStatsProvider$Stub
-android.net.ITetheringStatsProvider
 android.net.IVpnManager$Stub$Proxy
 android.net.IVpnManager$Stub
 android.net.IVpnManager
@@ -5971,7 +5985,9 @@
 android.os.INetworkManagementService
 android.os.IPermissionController$Stub
 android.os.IPermissionController
+android.os.IPowerManager$LowPowerStandbyPolicy$1
 android.os.IPowerManager$LowPowerStandbyPolicy
+android.os.IPowerManager$LowPowerStandbyPortDescription$1
 android.os.IPowerManager$LowPowerStandbyPortDescription
 android.os.IPowerManager$Stub$Proxy
 android.os.IPowerManager$Stub
@@ -6592,8 +6608,6 @@
 android.security.Credentials
 android.security.FileIntegrityManager
 android.security.GateKeeper
-android.security.GenerateRkpKey$1
-android.security.GenerateRkpKey
 android.security.IFileIntegrityService$Stub
 android.security.IFileIntegrityService
 android.security.IKeyChainAliasCallback$Stub
@@ -6726,7 +6740,6 @@
 android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi$$ExternalSyntheticLambda5
 android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi$$ExternalSyntheticLambda6
 android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi$EC
-android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi$GenerateKeyPairHelperResult
 android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi
 android.security.keystore2.AndroidKeyStoreLoadStoreParameter
 android.security.keystore2.AndroidKeyStorePrivateKey
@@ -6956,7 +6969,6 @@
 android.service.notification.StatusBarNotification$1
 android.service.notification.StatusBarNotification
 android.service.notification.ZenModeConfig$1
-android.service.notification.ZenModeConfig$Diff
 android.service.notification.ZenModeConfig$EventInfo
 android.service.notification.ZenModeConfig$ScheduleInfo
 android.service.notification.ZenModeConfig$ZenRule$1
@@ -7080,7 +7092,6 @@
 android.speech.tts.UtteranceProgressListener
 android.stats.devicepolicy.nano.StringList
 android.sysprop.AdbProperties
-android.sysprop.ApexProperties
 android.sysprop.ContactsProperties
 android.sysprop.CryptoProperties$state_values
 android.sysprop.CryptoProperties$type_values
@@ -7377,10 +7388,12 @@
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda19
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda1
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda20
+android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda23
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda24
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda27
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda28
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda2
+android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda31
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda32
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda34
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda38
@@ -7468,7 +7481,6 @@
 android.telephony.SubscriptionManager$CallISubMethodHelper
 android.telephony.SubscriptionManager$IntegerPropertyInvalidatedCache
 android.telephony.SubscriptionManager$OnOpportunisticSubscriptionsChangedListener
-android.telephony.SubscriptionManager$OnSubscriptionsChangedListener$OnSubscriptionsChangedListenerHandler
 android.telephony.SubscriptionManager$OnSubscriptionsChangedListener
 android.telephony.SubscriptionManager$VoidPropertyInvalidatedCache
 android.telephony.SubscriptionManager
@@ -7987,6 +7999,7 @@
 android.text.method.DateTimeKeyListener
 android.text.method.DialerKeyListener
 android.text.method.DigitsKeyListener
+android.text.method.InsertModeTransformationMethod
 android.text.method.KeyListener
 android.text.method.LinkMovementMethod
 android.text.method.MetaKeyKeyListener
@@ -8184,6 +8197,8 @@
 android.util.DataUnit$4
 android.util.DataUnit$5
 android.util.DataUnit$6
+android.util.DataUnit$7
+android.util.DataUnit$8
 android.util.DataUnit
 android.util.DebugUtils
 android.util.DisplayMetrics
@@ -8692,6 +8707,9 @@
 android.view.SurfaceControl$TrustedPresentationThresholds
 android.view.SurfaceControl
 android.view.SurfaceControlHdrLayerInfoListener
+android.view.SurfaceControlRegistry$DefaultReporter
+android.view.SurfaceControlRegistry$Reporter
+android.view.SurfaceControlRegistry
 android.view.SurfaceControlViewHost$SurfacePackage$1
 android.view.SurfaceControlViewHost$SurfacePackage
 android.view.SurfaceHolder$Callback2
@@ -8841,6 +8859,7 @@
 android.view.ViewRootImpl$$ExternalSyntheticLambda16
 android.view.ViewRootImpl$$ExternalSyntheticLambda17
 android.view.ViewRootImpl$$ExternalSyntheticLambda18
+android.view.ViewRootImpl$$ExternalSyntheticLambda19
 android.view.ViewRootImpl$$ExternalSyntheticLambda1
 android.view.ViewRootImpl$$ExternalSyntheticLambda2
 android.view.ViewRootImpl$$ExternalSyntheticLambda3
@@ -8859,7 +8878,7 @@
 android.view.ViewRootImpl$6
 android.view.ViewRootImpl$7
 android.view.ViewRootImpl$8$$ExternalSyntheticLambda0
-android.view.ViewRootImpl$8$1
+android.view.ViewRootImpl$8$$ExternalSyntheticLambda1
 android.view.ViewRootImpl$8
 android.view.ViewRootImpl$AccessibilityInteractionConnection
 android.view.ViewRootImpl$AccessibilityInteractionConnectionManager
@@ -9068,7 +9087,6 @@
 android.view.autofill.AutofillManager$$ExternalSyntheticLambda2
 android.view.autofill.AutofillManager$$ExternalSyntheticLambda3
 android.view.autofill.AutofillManager$$ExternalSyntheticLambda4
-android.view.autofill.AutofillManager$$ExternalSyntheticLambda5
 android.view.autofill.AutofillManager$AugmentedAutofillManagerClient
 android.view.autofill.AutofillManager$AutofillCallback
 android.view.autofill.AutofillManager$AutofillClient
@@ -9152,6 +9170,7 @@
 android.view.displayhash.DisplayHashManager
 android.view.displayhash.DisplayHashResultCallback
 android.view.inputmethod.BaseInputConnection
+android.view.inputmethod.CancellableHandwritingGesture
 android.view.inputmethod.CompletionInfo$1
 android.view.inputmethod.CompletionInfo
 android.view.inputmethod.ComposingText
@@ -9245,6 +9264,7 @@
 android.view.inputmethod.PreviewableHandwritingGesture
 android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda24
 android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda25
+android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda36
 android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda37
 android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda40
 android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda8
@@ -9949,6 +9969,7 @@
 android.window.SurfaceSyncGroup$$ExternalSyntheticLambda2
 android.window.SurfaceSyncGroup$$ExternalSyntheticLambda3
 android.window.SurfaceSyncGroup$$ExternalSyntheticLambda5
+android.window.SurfaceSyncGroup$$ExternalSyntheticLambda6
 android.window.SurfaceSyncGroup$1
 android.window.SurfaceSyncGroup$2
 android.window.SurfaceSyncGroup$ISurfaceSyncGroupImpl
@@ -9988,6 +10009,7 @@
 android.window.WindowInfosListener
 android.window.WindowMetricsController$$ExternalSyntheticLambda0
 android.window.WindowMetricsController
+android.window.WindowOnBackInvokedDispatcher$$ExternalSyntheticLambda0
 android.window.WindowOnBackInvokedDispatcher$Checker
 android.window.WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda0
 android.window.WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda1
@@ -10738,6 +10760,7 @@
 com.android.internal.compat.IPlatformCompat
 com.android.internal.compat.IPlatformCompatNative$Stub
 com.android.internal.compat.IPlatformCompatNative
+com.android.internal.config.appcloning.AppCloningDeviceConfigHelper$$ExternalSyntheticLambda0
 com.android.internal.config.appcloning.AppCloningDeviceConfigHelper
 com.android.internal.content.F2fsUtils
 com.android.internal.content.NativeLibraryHelper$Handle
@@ -10784,8 +10807,6 @@
 com.android.internal.dynamicanimation.animation.Force
 com.android.internal.dynamicanimation.animation.SpringAnimation
 com.android.internal.dynamicanimation.animation.SpringForce
-com.android.modules.expresslog.Counter
-com.android.modules.expresslog.Utils
 com.android.internal.graphics.ColorUtils$ContrastCalculator
 com.android.internal.graphics.ColorUtils
 com.android.internal.graphics.SfVsyncFrameCallbackProvider
@@ -10829,6 +10850,8 @@
 com.android.internal.inputmethod.IAccessibilityInputMethodSession$Stub$Proxy
 com.android.internal.inputmethod.IAccessibilityInputMethodSession$Stub
 com.android.internal.inputmethod.IAccessibilityInputMethodSession
+com.android.internal.inputmethod.IImeTracker$Stub$Proxy
+com.android.internal.inputmethod.IImeTracker$Stub
 com.android.internal.inputmethod.IImeTracker
 com.android.internal.inputmethod.IInputContentUriToken
 com.android.internal.inputmethod.IInputMethod$Stub
@@ -10878,6 +10901,7 @@
 com.android.internal.jank.InteractionJankMonitor$$ExternalSyntheticLambda1
 com.android.internal.jank.InteractionJankMonitor$$ExternalSyntheticLambda2
 com.android.internal.jank.InteractionJankMonitor$$ExternalSyntheticLambda3
+com.android.internal.jank.InteractionJankMonitor$$ExternalSyntheticLambda5
 com.android.internal.jank.InteractionJankMonitor$$ExternalSyntheticLambda6
 com.android.internal.jank.InteractionJankMonitor$$ExternalSyntheticLambda8
 com.android.internal.jank.InteractionJankMonitor$$ExternalSyntheticLambda9
@@ -11652,34 +11676,6 @@
 com.android.internal.telephony.StateMachine$SmHandler$StateInfo
 com.android.internal.telephony.StateMachine$SmHandler
 com.android.internal.telephony.StateMachine
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda0
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda10
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda11
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda1
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda2
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda3
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda4
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda5
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda6
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda7
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda8
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda9
-com.android.internal.telephony.SubscriptionController$1
-com.android.internal.telephony.SubscriptionController$2
-com.android.internal.telephony.SubscriptionController$WatchedInt
-com.android.internal.telephony.SubscriptionController$WatchedSlotIndexToSubIds
-com.android.internal.telephony.SubscriptionController
-com.android.internal.telephony.SubscriptionInfoUpdater$$ExternalSyntheticLambda0
-com.android.internal.telephony.SubscriptionInfoUpdater$$ExternalSyntheticLambda1
-com.android.internal.telephony.SubscriptionInfoUpdater$$ExternalSyntheticLambda2
-com.android.internal.telephony.SubscriptionInfoUpdater$$ExternalSyntheticLambda3
-com.android.internal.telephony.SubscriptionInfoUpdater$$ExternalSyntheticLambda4
-com.android.internal.telephony.SubscriptionInfoUpdater$$ExternalSyntheticLambda5
-com.android.internal.telephony.SubscriptionInfoUpdater$$ExternalSyntheticLambda6
-com.android.internal.telephony.SubscriptionInfoUpdater$1
-com.android.internal.telephony.SubscriptionInfoUpdater$2
-com.android.internal.telephony.SubscriptionInfoUpdater$UpdateEmbeddedSubsCallback
-com.android.internal.telephony.SubscriptionInfoUpdater
 com.android.internal.telephony.TelephonyCapabilities
 com.android.internal.telephony.TelephonyCommonStatsLog
 com.android.internal.telephony.TelephonyComponentFactory$$ExternalSyntheticLambda0
@@ -12230,6 +12226,7 @@
 com.android.internal.telephony.nano.PersistAtomsProto$CellularDataServiceSwitch
 com.android.internal.telephony.nano.PersistAtomsProto$CellularServiceState
 com.android.internal.telephony.nano.PersistAtomsProto$DataCallSession
+com.android.internal.telephony.nano.PersistAtomsProto$EmergencyNumbersInfo
 com.android.internal.telephony.nano.PersistAtomsProto$GbaEvent
 com.android.internal.telephony.nano.PersistAtomsProto$ImsDedicatedBearerEvent
 com.android.internal.telephony.nano.PersistAtomsProto$ImsDedicatedBearerListenerEvent
@@ -12246,6 +12243,12 @@
 com.android.internal.telephony.nano.PersistAtomsProto$PresenceNotifyEvent
 com.android.internal.telephony.nano.PersistAtomsProto$RcsAcsProvisioningStats
 com.android.internal.telephony.nano.PersistAtomsProto$RcsClientProvisioningStats
+com.android.internal.telephony.nano.PersistAtomsProto$SatelliteController
+com.android.internal.telephony.nano.PersistAtomsProto$SatelliteIncomingDatagram
+com.android.internal.telephony.nano.PersistAtomsProto$SatelliteOutgoingDatagram
+com.android.internal.telephony.nano.PersistAtomsProto$SatelliteProvision
+com.android.internal.telephony.nano.PersistAtomsProto$SatelliteSession
+com.android.internal.telephony.nano.PersistAtomsProto$SatelliteSosMessageRecommender
 com.android.internal.telephony.nano.PersistAtomsProto$SipDelegateStats
 com.android.internal.telephony.nano.PersistAtomsProto$SipMessageResponse
 com.android.internal.telephony.nano.PersistAtomsProto$SipTransportFeatureTagStats
@@ -12686,10 +12689,14 @@
 com.android.internal.util.IndentingPrintWriter
 com.android.internal.util.IntPair
 com.android.internal.util.JournaledFile
+com.android.internal.util.LatencyTracker$$ExternalSyntheticLambda0
 com.android.internal.util.LatencyTracker$$ExternalSyntheticLambda1
 com.android.internal.util.LatencyTracker$$ExternalSyntheticLambda2
 com.android.internal.util.LatencyTracker$Action
 com.android.internal.util.LatencyTracker$ActionProperties
+com.android.internal.util.LatencyTracker$FrameworkStatsLogEvent
+com.android.internal.util.LatencyTracker$SLatencyTrackerHolder
+com.android.internal.util.LatencyTracker$Session$$ExternalSyntheticLambda0
 com.android.internal.util.LatencyTracker$Session
 com.android.internal.util.LatencyTracker
 com.android.internal.util.LineBreakBufferedWriter
@@ -12927,6 +12934,8 @@
 com.android.internal.widget.floatingtoolbar.FloatingToolbar$$ExternalSyntheticLambda0
 com.android.internal.widget.floatingtoolbar.FloatingToolbar
 com.android.internal.widget.floatingtoolbar.FloatingToolbarPopup
+com.android.modules.expresslog.Counter
+com.android.modules.expresslog.Utils
 com.android.modules.utils.BasicShellCommandHandler
 com.android.modules.utils.TypedXmlPullParser
 com.android.modules.utils.TypedXmlSerializer
@@ -13501,6 +13510,10 @@
 gov.nist.javax.sip.stack.UDPMessageChannel$PingBackTimerTask
 gov.nist.javax.sip.stack.UDPMessageChannel
 gov.nist.javax.sip.stack.UDPMessageProcessor
+java.io.InterruptedIOException
+java.nio.DirectByteBuffer
+java.text.DecimalFormat
+java.util.GregorianCalendar
 javax.microedition.khronos.egl.EGL10
 javax.microedition.khronos.egl.EGL11
 javax.microedition.khronos.egl.EGL
@@ -13930,7 +13943,6 @@
 [Landroid.net.Uri;
 [Landroid.net.rtp.AudioCodec;
 [Landroid.os.AsyncTask$Status;
-[Landroid.os.BatteryConsumer$Dimensions;
 [Landroid.os.BatteryConsumer$Key;
 [Landroid.os.BatteryStats$BitDescription;
 [Landroid.os.BatteryStats$IntToString;
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java
index b8d24e3..d79131c 100644
--- a/cmds/am/src/com/android/commands/am/Am.java
+++ b/cmds/am/src/com/android/commands/am/Am.java
@@ -193,6 +193,9 @@
                 instrument.alwaysCheckSignature = true;
             } else if (opt.equals("--instrument-sdk-sandbox")) {
                 instrument.instrumentSdkSandbox = true;
+            } else if (opt.equals("--instrument-sdk-in-sandbox")) {
+                instrument.instrumentSdkSandbox = true;
+                instrument.instrumentSdkInSandbox = true;
             } else {
                 System.err.println("Error: Unknown option: " + opt);
                 return;
diff --git a/cmds/am/src/com/android/commands/am/Instrument.java b/cmds/am/src/com/android/commands/am/Instrument.java
index 2604497..e60593e 100644
--- a/cmds/am/src/com/android/commands/am/Instrument.java
+++ b/cmds/am/src/com/android/commands/am/Instrument.java
@@ -20,6 +20,7 @@
 import static android.app.ActivityManager.INSTR_FLAG_DISABLE_HIDDEN_API_CHECKS;
 import static android.app.ActivityManager.INSTR_FLAG_DISABLE_ISOLATED_STORAGE;
 import static android.app.ActivityManager.INSTR_FLAG_DISABLE_TEST_API_CHECKS;
+import static android.app.ActivityManager.INSTR_FLAG_INSTRUMENT_SDK_IN_SANDBOX;
 import static android.app.ActivityManager.INSTR_FLAG_INSTRUMENT_SDK_SANDBOX;
 import static android.app.ActivityManager.INSTR_FLAG_NO_RESTART;
 
@@ -99,6 +100,7 @@
     public String componentNameArg;
     public boolean alwaysCheckSignature = false;
     public boolean instrumentSdkSandbox = false;
+    public boolean instrumentSdkInSandbox = false;
 
     /**
      * Construct the instrument command runner.
@@ -530,6 +532,9 @@
             if (instrumentSdkSandbox) {
                 flags |= INSTR_FLAG_INSTRUMENT_SDK_SANDBOX;
             }
+            if (instrumentSdkInSandbox) {
+                flags |= INSTR_FLAG_INSTRUMENT_SDK_IN_SANDBOX;
+            }
             if (!mAm.startInstrumentation(cn, profileFile, flags, args, watcher, connection, userId,
                         abi)) {
                 throw new AndroidException("INSTRUMENTATION_FAILED: " + cn.flattenToString());
diff --git a/cmds/appops/OWNERS b/cmds/appops/OWNERS
index 999ea0e..2fe78c5 100644
--- a/cmds/appops/OWNERS
+++ b/cmds/appops/OWNERS
@@ -1 +1,2 @@
+#Bug component: 137825
 include /core/java/android/permission/OWNERS
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp
index a8b6c0b..10ce3b8 100644
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -16,6 +16,7 @@
 
 #define LOG_NDEBUG 0
 #define LOG_TAG "BootAnimation"
+#define ATRACE_TAG ATRACE_TAG_GRAPHICS
 
 #include <vector>
 
@@ -28,6 +29,7 @@
 #include <math.h>
 #include <fcntl.h>
 #include <utils/misc.h>
+#include <utils/Trace.h>
 #include <signal.h>
 #include <time.h>
 
@@ -79,18 +81,18 @@
 static constexpr const char* OEM_USERSPACE_REBOOT_ANIMATION_FILE = "/oem/media/userspace-reboot.zip";
 static constexpr const char* SYSTEM_USERSPACE_REBOOT_ANIMATION_FILE = "/system/media/userspace-reboot.zip";
 
-static const char BOOTANIM_DATA_DIR_PATH[] = "/data/bootanim";
+static const char BOOTANIM_DATA_DIR_PATH[] = "/data/misc/bootanim";
 static const char BOOTANIM_TIME_DIR_NAME[] = "time";
-static const char BOOTANIM_TIME_DIR_PATH[] = "/data/bootanim/time";
+static const char BOOTANIM_TIME_DIR_PATH[] = "/data/misc/bootanim/time";
 static const char CLOCK_FONT_ASSET[] = "images/clock_font.png";
 static const char CLOCK_FONT_ZIP_NAME[] = "clock_font.png";
 static const char PROGRESS_FONT_ASSET[] = "images/progress_font.png";
 static const char PROGRESS_FONT_ZIP_NAME[] = "progress_font.png";
 static const char LAST_TIME_CHANGED_FILE_NAME[] = "last_time_change";
-static const char LAST_TIME_CHANGED_FILE_PATH[] = "/data/bootanim/time/last_time_change";
+static const char LAST_TIME_CHANGED_FILE_PATH[] = "/data/misc/bootanim/time/last_time_change";
 static const char ACCURATE_TIME_FLAG_FILE_NAME[] = "time_is_accurate";
-static const char ACCURATE_TIME_FLAG_FILE_PATH[] = "/data/bootanim/time/time_is_accurate";
-static const char TIME_FORMAT_12_HOUR_FLAG_FILE_PATH[] = "/data/bootanim/time/time_format_12_hour";
+static const char ACCURATE_TIME_FLAG_FILE_PATH[] = "/data/misc/bootanim/time/time_is_accurate";
+static const char TIME_FORMAT_12_HOUR_FLAG_FILE_PATH[] = "/data/misc/bootanim/time/time_format_12_hour";
 // Java timestamp format. Don't show the clock if the date is before 2000-01-01 00:00:00.
 static const long long ACCURATE_TIME_EPOCH = 946684800000;
 static constexpr char FONT_BEGIN_CHAR = ' ';
@@ -200,6 +202,7 @@
 BootAnimation::BootAnimation(sp<Callbacks> callbacks)
         : Thread(false), mLooper(new Looper(false)), mClockEnabled(true), mTimeIsAccurate(false),
         mTimeFormat12Hour(false), mTimeCheckThread(nullptr), mCallbacks(callbacks) {
+    ATRACE_CALL();
     mSession = new SurfaceComposerClient();
 
     std::string powerCtl = android::base::GetProperty("sys.powerctl", "");
@@ -213,6 +216,7 @@
 }
 
 BootAnimation::~BootAnimation() {
+    ATRACE_CALL();
     if (mAnimation != nullptr) {
         releaseAnimation(mAnimation);
         mAnimation = nullptr;
@@ -222,6 +226,7 @@
 }
 
 void BootAnimation::onFirstRef() {
+    ATRACE_CALL();
     status_t err = mSession->linkToComposerDeath(this);
     SLOGE_IF(err, "linkToComposerDeath failed (%s) ", strerror(-err));
     if (err == NO_ERROR) {
@@ -240,6 +245,7 @@
 }
 
 void BootAnimation::binderDied(const wp<IBinder>&) {
+    ATRACE_CALL();
     // woah, surfaceflinger died!
     SLOGD("SurfaceFlinger died, exiting...");
 
@@ -251,6 +257,7 @@
 
 static void* decodeImage(const void* encodedData, size_t dataLength, AndroidBitmapInfo* outInfo,
     bool premultiplyAlpha) {
+    ATRACE_CALL();
     AImageDecoder* decoder = nullptr;
     AImageDecoder_createFromBuffer(encodedData, dataLength, &decoder);
     if (!decoder) {
@@ -282,6 +289,7 @@
 
 status_t BootAnimation::initTexture(Texture* texture, AssetManager& assets,
         const char* name, bool premultiplyAlpha) {
+    ATRACE_CALL();
     Asset* asset = assets.open(name, Asset::ACCESS_BUFFER);
     if (asset == nullptr)
         return NO_INIT;
@@ -338,6 +346,7 @@
 
 status_t BootAnimation::initTexture(FileMap* map, int* width, int* height,
     bool premultiplyAlpha) {
+    ATRACE_CALL();
     AndroidBitmapInfo bitmapInfo;
     void* pixels = decodeImage(map->getDataPtr(), map->getDataLength(), &bitmapInfo,
         premultiplyAlpha);
@@ -404,10 +413,12 @@
 
 public:
     DisplayEventCallback(BootAnimation* bootAnimation) {
+        ATRACE_CALL();
         mBootAnimation = bootAnimation;
     }
 
     int handleEvent(int /* fd */, int events, void* /* data */) {
+        ATRACE_CALL();
         if (events & (Looper::EVENT_ERROR | Looper::EVENT_HANGUP)) {
             ALOGE("Display event receiver pipe was closed or an error occurred. events=0x%x",
                     events);
@@ -492,6 +503,7 @@
 }
 
 status_t BootAnimation::readyToRun() {
+    ATRACE_CALL();
     mAssets.addDefaultAssets();
 
     const std::vector<PhysicalDisplayId> ids = SurfaceComposerClient::getPhysicalDisplayIds();
@@ -628,6 +640,7 @@
 }
 
 void BootAnimation::rotateAwayFromNaturalOrientationIfNeeded() {
+    ATRACE_CALL();
     const auto orientation = parseOrientationProperty();
 
     if (orientation == ui::ROTATION_0) {
@@ -650,6 +663,7 @@
 }
 
 ui::Rotation BootAnimation::parseOrientationProperty() {
+    ATRACE_CALL();
     const auto displayIds = SurfaceComposerClient::getPhysicalDisplayIds();
     if (displayIds.size() == 0) {
         return ui::ROTATION_0;
@@ -672,11 +686,13 @@
 }
 
 void BootAnimation::projectSceneToWindow() {
+    ATRACE_CALL();
     glViewport(0, 0, mWidth, mHeight);
     glScissor(0, 0, mWidth, mHeight);
 }
 
 void BootAnimation::resizeSurface(int newWidth, int newHeight) {
+    ATRACE_CALL();
     // We assume this function is called on the animation thread.
     if (newWidth == mWidth && newHeight == mHeight) {
         return;
@@ -704,6 +720,7 @@
 }
 
 bool BootAnimation::preloadAnimation() {
+    ATRACE_CALL();
     findBootAnimationFile();
     if (!mZipFileName.isEmpty()) {
         mAnimation = loadAnimation(mZipFileName);
@@ -714,6 +731,7 @@
 }
 
 bool BootAnimation::findBootAnimationFileInternal(const std::vector<std::string> &files) {
+    ATRACE_CALL();
     for (const std::string& f : files) {
         if (access(f.c_str(), R_OK) == 0) {
             mZipFileName = f.c_str();
@@ -724,6 +742,7 @@
 }
 
 void BootAnimation::findBootAnimationFile() {
+    ATRACE_CALL();
     const bool playDarkAnim = android::base::GetIntProperty("ro.boot.theme", 0) == 1;
     static const std::vector<std::string> bootFiles = {
         APEX_BOOTANIMATION_FILE, playDarkAnim ? PRODUCT_BOOTANIMATION_DARK_FILE : PRODUCT_BOOTANIMATION_FILE,
@@ -747,6 +766,7 @@
 }
 
 GLuint compileShader(GLenum shaderType, const GLchar *source) {
+    ATRACE_CALL();
     GLuint shader = glCreateShader(shaderType);
     glShaderSource(shader, 1, &source, 0);
     glCompileShader(shader);
@@ -765,6 +785,7 @@
 }
 
 GLuint linkShader(GLuint vertexShader, GLuint fragmentShader) {
+    ATRACE_CALL();
     GLuint program = glCreateProgram();
     glAttachShader(program, vertexShader);
     glAttachShader(program, fragmentShader);
@@ -780,6 +801,7 @@
 }
 
 void BootAnimation::initShaders() {
+    ATRACE_CALL();
     bool dynamicColoringEnabled = mAnimation != nullptr && mAnimation->dynamicColoringEnabled;
     GLuint vertexShader = compileShader(GL_VERTEX_SHADER, (const GLchar *)VERTEX_SHADER_SOURCE);
     GLuint imageFragmentShader =
@@ -813,6 +835,7 @@
 }
 
 bool BootAnimation::threadLoop() {
+    ATRACE_CALL();
     bool result;
     initShaders();
 
@@ -838,6 +861,7 @@
 }
 
 bool BootAnimation::android() {
+    ATRACE_CALL();
     glActiveTexture(GL_TEXTURE0);
 
     SLOGD("%sAnimationShownTiming start time: %" PRId64 "ms", mShuttingDown ? "Shutdown" : "Boot",
@@ -905,6 +929,7 @@
 }
 
 void BootAnimation::checkExit() {
+    ATRACE_CALL();
     // Allow surface flinger to gracefully request shutdown
     char value[PROPERTY_VALUE_MAX];
     property_get(EXIT_PROP_NAME, value, "0");
@@ -915,10 +940,12 @@
 }
 
 bool BootAnimation::validClock(const Animation::Part& part) {
+    ATRACE_CALL();
     return part.clockPosX != TEXT_MISSING_VALUE && part.clockPosY != TEXT_MISSING_VALUE;
 }
 
 bool parseTextCoord(const char* str, int* dest) {
+    ATRACE_CALL();
     if (strcmp("c", str) == 0) {
         *dest = TEXT_CENTER_VALUE;
         return true;
@@ -935,6 +962,7 @@
 
 // Parse two position coordinates. If only string is non-empty, treat it as the y value.
 void parsePosition(const char* str1, const char* str2, int* x, int* y) {
+    ATRACE_CALL();
     bool success = false;
     if (strlen(str1) == 0) {  // No values were specified
         // success = false
@@ -963,6 +991,7 @@
 // If the input string isn't valid, parseColor returns false and color is
 // left unchanged.
 static bool parseColor(const char str[7], float color[3]) {
+    ATRACE_CALL();
     float tmpColor[3];
     for (int i = 0; i < 3; i++) {
         int val = 0;
@@ -985,6 +1014,7 @@
 // If the input color string is empty, set color with values in defaultColor.
 static void parseColorDecimalString(const std::string& colorString,
     float color[3], float defaultColor[3]) {
+    ATRACE_CALL();
     if (colorString == "") {
         memcpy(color, defaultColor, sizeof(float) * 3);
         return;
@@ -996,6 +1026,7 @@
 }
 
 static bool readFile(ZipFileRO* zip, const char* name, String8& outString) {
+    ATRACE_CALL();
     ZipEntryRO entry = zip->findEntryByName(name);
     SLOGE_IF(!entry, "couldn't find %s", name);
     if (!entry) {
@@ -1018,6 +1049,7 @@
 // columns are the printable ASCII characters 0x20 - 0x7f.  The
 // top row is regular text; the bottom row is bold.
 status_t BootAnimation::initFont(Font* font, const char* fallback) {
+    ATRACE_CALL();
     status_t status = NO_ERROR;
 
     if (font->map != nullptr) {
@@ -1045,6 +1077,7 @@
 }
 
 void BootAnimation::drawText(const char* str, const Font& font, bool bold, int* x, int* y) {
+    ATRACE_CALL();
     glEnable(GL_BLEND);  // Allow us to draw on top of the animation
     glBindTexture(GL_TEXTURE_2D, font.texture.name);
     glUseProgram(mTextShader);
@@ -1092,6 +1125,7 @@
 
 // We render 12 or 24 hour time.
 void BootAnimation::drawClock(const Font& font, const int xPos, const int yPos) {
+    ATRACE_CALL();
     static constexpr char TIME_FORMAT_12[] = "%l:%M";
     static constexpr char TIME_FORMAT_24[] = "%H:%M";
     static constexpr int TIME_LENGTH = 6;
@@ -1117,6 +1151,7 @@
 }
 
 void BootAnimation::drawProgress(int percent, const Font& font, const int xPos, const int yPos) {
+    ATRACE_CALL();
     static constexpr int PERCENT_LENGTH = 5;
 
     char percentBuff[PERCENT_LENGTH];
@@ -1129,6 +1164,7 @@
 }
 
 bool BootAnimation::parseAnimationDesc(Animation& animation)  {
+    ATRACE_CALL();
     String8 desString;
 
     if (!readFile(animation.zip, "desc.txt", desString)) {
@@ -1252,6 +1288,7 @@
 }
 
 bool BootAnimation::preloadZip(Animation& animation) {
+    ATRACE_CALL();
     // read all the data structures
     const size_t pcount = animation.parts.size();
     void *cookie = nullptr;
@@ -1357,6 +1394,7 @@
 }
 
 bool BootAnimation::movie() {
+    ATRACE_CALL();
     if (mAnimation == nullptr) {
         mAnimation = loadAnimation(mZipFileName);
     }
@@ -1450,6 +1488,7 @@
 bool BootAnimation::shouldStopPlayingPart(const Animation::Part& part,
                                           const int fadedFramesCount,
                                           const int lastDisplayedProgress) {
+    ATRACE_CALL();
     // stop playing only if it is time to exit and it's a partial part which has been faded out
     return exitPending() && !part.playUntilComplete && fadedFramesCount >= part.framesToFadeCount &&
         (lastDisplayedProgress == 0 || lastDisplayedProgress == 100);
@@ -1461,6 +1500,7 @@
 }
 
 void BootAnimation::drawTexturedQuad(float xStart, float yStart, float width, float height) {
+    ATRACE_CALL();
     // Map coordinates from screen space to world space.
     float x0 = mapLinear(xStart, 0, mWidth, -1, 1);
     float y0 = mapLinear(yStart, 0, mHeight, -1, 1);
@@ -1484,6 +1524,7 @@
 }
 
 void BootAnimation::initDynamicColors() {
+    ATRACE_CALL();
     for (int i = 0; i < DYNAMIC_COLOR_COUNT; i++) {
         const auto syspropName = "persist.bootanim.color" + std::to_string(i + 1);
         const auto syspropValue = android::base::GetProperty(syspropName, "");
@@ -1510,6 +1551,7 @@
 }
 
 bool BootAnimation::playAnimation(const Animation& animation) {
+    ATRACE_CALL();
     const size_t pcount = animation.parts.size();
     nsecs_t frameDuration = s2ns(1) / animation.fps;
 
@@ -1720,12 +1762,14 @@
 }
 
 void BootAnimation::processDisplayEvents() {
+    ATRACE_CALL();
     // This will poll mDisplayEventReceiver and if there are new events it'll call
     // displayEventCallback synchronously.
     mLooper->pollOnce(0);
 }
 
 void BootAnimation::handleViewport(nsecs_t timestep) {
+    ATRACE_CALL();
     if (mShuttingDown || !mFlingerSurfaceControl || mTargetInset == 0) {
         return;
     }
@@ -1768,6 +1812,7 @@
 }
 
 void BootAnimation::releaseAnimation(Animation* animation) const {
+    ATRACE_CALL();
     for (Vector<Animation::Part>::iterator it = animation->parts.begin(),
          e = animation->parts.end(); it != e; ++it) {
         if (it->animation)
@@ -1779,6 +1824,7 @@
 }
 
 BootAnimation::Animation* BootAnimation::loadAnimation(const String8& fn) {
+    ATRACE_CALL();
     if (mLoadedFiles.indexOf(fn) >= 0) {
         SLOGE("File \"%s\" is already loaded. Cyclic ref is not allowed",
             fn.string());
@@ -1810,6 +1856,7 @@
 }
 
 bool BootAnimation::updateIsTimeAccurate() {
+    ATRACE_CALL();
     static constexpr long long MAX_TIME_IN_PAST =   60000LL * 60LL * 24LL * 30LL;  // 30 days
     static constexpr long long MAX_TIME_IN_FUTURE = 60000LL * 90LL;  // 90 minutes
 
@@ -1853,11 +1900,13 @@
     mInotifyFd(-1), mBootAnimWd(-1), mTimeWd(-1), mBootAnimation(bootAnimation) {}
 
 BootAnimation::TimeCheckThread::~TimeCheckThread() {
+    ATRACE_CALL();
     // mInotifyFd may be -1 but that's ok since we're not at risk of attempting to close a valid FD.
     close(mInotifyFd);
 }
 
 bool BootAnimation::TimeCheckThread::threadLoop() {
+    ATRACE_CALL();
     bool shouldLoop = doThreadLoop() && !mBootAnimation->mTimeIsAccurate
         && mBootAnimation->mClockEnabled;
     if (!shouldLoop) {
@@ -1868,6 +1917,7 @@
 }
 
 bool BootAnimation::TimeCheckThread::doThreadLoop() {
+    ATRACE_CALL();
     static constexpr int BUFF_LEN (10 * (sizeof(struct inotify_event) + NAME_MAX + 1));
 
     // Poll instead of doing a blocking read so the Thread can exit if requested.
@@ -1905,6 +1955,7 @@
 }
 
 void BootAnimation::TimeCheckThread::addTimeDirWatch() {
+        ATRACE_CALL();
         mTimeWd = inotify_add_watch(mInotifyFd, BOOTANIM_TIME_DIR_PATH,
                 IN_CLOSE_WRITE | IN_MOVED_TO | IN_ATTRIB);
         if (mTimeWd > 0) {
@@ -1915,6 +1966,7 @@
 }
 
 status_t BootAnimation::TimeCheckThread::readyToRun() {
+    ATRACE_CALL();
     mInotifyFd = inotify_init();
     if (mInotifyFd < 0) {
         SLOGE("Could not initialize inotify fd");
diff --git a/cmds/bootanimation/audioplay.cpp b/cmds/bootanimation/audioplay.cpp
index c5e16c6..9b95b04 100644
--- a/cmds/bootanimation/audioplay.cpp
+++ b/cmds/bootanimation/audioplay.cpp
@@ -20,6 +20,8 @@
 #define CHATTY ALOGD
 #define LOG_TAG "audioplay"
 
+#include <binder/IServiceManager.h>
+
 #include "audioplay.h"
 
 #include <string.h>
@@ -316,8 +318,13 @@
         : Thread(false),
           mExampleAudioData(exampleAudioData),
           mExampleAudioLength(exampleAudioLength) {}
+
 private:
     virtual bool threadLoop() {
+        if (defaultServiceManager()->checkService(String16("audio")) == nullptr) {
+            ALOGW("Audio service is not ready yet, ignore creating playback engine");
+            return false;
+        }
         audioplay::create(mExampleAudioData, mExampleAudioLength);
         // Exit immediately
         return false;
@@ -334,6 +341,11 @@
 public:
     void init(const Vector<Animation::Part>& parts) override {
         const Animation::Part* partWithAudio = nullptr;
+
+        if (!playSoundsAllowed()) {
+            return;
+        }
+
         for (const Animation::Part& part : parts) {
             if (part.audioData != nullptr) {
                 partWithAudio = &part;
@@ -401,14 +413,14 @@
 }
 
 bool playClip(const uint8_t* buf, int size) {
-    // Parse the WAV header
-    const ChunkFormat* chunkFormat;
-    if (!parseClipBuf(buf, size, &chunkFormat, &nextBuffer, &nextSize)) {
+    if (!hasPlayer()) {
+        ALOGE("cannot play clip %p without a player", buf);
         return false;
     }
 
-    if (!hasPlayer()) {
-        ALOGD("cannot play clip %p without a player", buf);
+    // Parse the WAV header
+    const ChunkFormat* chunkFormat;
+    if (!parseClipBuf(buf, size, &chunkFormat, &nextBuffer, &nextSize)) {
         return false;
     }
 
@@ -433,11 +445,9 @@
 void setPlaying(bool isPlaying) {
     if (!hasPlayer()) return;
 
-    SLresult result;
-
     if (nullptr != bqPlayerPlay) {
         // set the player's state
-        result = (*bqPlayerPlay)->SetPlayState(bqPlayerPlay,
+        (*bqPlayerPlay)->SetPlayState(bqPlayerPlay,
             isPlaying ? SL_PLAYSTATE_PLAYING : SL_PLAYSTATE_STOPPED);
     }
 
diff --git a/cmds/idmap2/Android.bp b/cmds/idmap2/Android.bp
index 5f06c97..55ec7da 100644
--- a/cmds/idmap2/Android.bp
+++ b/cmds/idmap2/Android.bp
@@ -28,11 +28,14 @@
     tidy_checks: [
         "modernize-*",
         "-modernize-avoid-c-arrays",
+        "-modernize-use-nodiscard",
         "-modernize-use-trailing-return-type",
         "android-*",
         "misc-*",
+        "-misc-const-correctness",
         "readability-*",
         "-readability-identifier-length",
+        "-readability-implicit-bool-conversion",
     ],
     tidy_checks_as_errors: [
         "modernize-*",
@@ -56,6 +59,7 @@
         "-readability-const-return-type",
         "-readability-convert-member-functions-to-static",
         "-readability-duplicate-include",
+        "-readability-implicit-bool-conversion",
         "-readability-else-after-return",
         "-readability-named-parameter",
         "-readability-redundant-access-specifiers",
@@ -80,13 +84,13 @@
                 enabled: false,
             },
             static_libs: [
+                "libidmap2_policies",
                 "libidmap2_protos",
             ],
             shared_libs: [
                 "libandroidfw",
                 "libbase",
                 "libcutils",
-                "libidmap2_policies",
                 "libprotobuf-cpp-lite",
                 "libutils",
                 "libz",
@@ -125,7 +129,7 @@
     },
 }
 
-cc_library {
+cc_library_static {
     name: "libidmap2_policies",
     defaults: [
         "idmap2_defaults",
@@ -142,9 +146,6 @@
             ],
         },
         host: {
-            shared: {
-                enabled: false,
-            },
             static_libs: [
                 "libandroidfw",
             ],
@@ -191,7 +192,6 @@
                 "libandroidfw",
                 "libbase",
                 "libidmap2",
-                "libidmap2_policies",
                 "liblog",
                 "libprotobuf-cpp-lite",
                 "libutils",
@@ -199,6 +199,9 @@
                 "libz",
                 "libziparchive",
             ],
+            static_libs: [
+                "libidmap2_policies",
+            ],
         },
         host: {
             static_libs: [
@@ -255,12 +258,14 @@
                 "libbase",
                 "libcutils",
                 "libidmap2",
-                "libidmap2_policies",
                 "libprotobuf-cpp-lite",
                 "libutils",
                 "libz",
                 "libziparchive",
             ],
+            static_libs: [
+                "libidmap2_policies",
+            ],
         },
         host: {
             static_libs: [
@@ -298,13 +303,13 @@
         "libbinder",
         "libcutils",
         "libidmap2",
-        "libidmap2_policies",
         "libprotobuf-cpp-lite",
         "libutils",
         "libziparchive",
     ],
     static_libs: [
         "libc++fs",
+        "libidmap2_policies",
         "libidmap2_protos",
         "libidmap2daidl",
     ],
diff --git a/cmds/idmap2/idmap2/CreateMultiple.cpp b/cmds/idmap2/idmap2/CreateMultiple.cpp
index 953d99f..68800cd 100644
--- a/cmds/idmap2/idmap2/CreateMultiple.cpp
+++ b/cmds/idmap2/idmap2/CreateMultiple.cpp
@@ -18,8 +18,8 @@
 #include <sys/types.h>  // umask
 
 #include <fstream>
+#include <iostream>
 #include <memory>
-#include <ostream>
 #include <string>
 #include <vector>
 
@@ -51,7 +51,7 @@
 Result<Unit> CreateMultiple(const std::vector<std::string>& args) {
   SYSTRACE << "CreateMultiple " << args;
   std::string target_apk_path;
-  std::string idmap_dir = kIdmapCacheDir;
+  std::string idmap_dir{kIdmapCacheDir};
   std::vector<std::string> overlay_apk_paths;
   std::vector<std::string> policies;
   bool ignore_overlayable = false;
@@ -67,7 +67,7 @@
           .OptionalOption("--idmap-dir",
                           StringPrintf("output: path to the directory in which to write idmap file"
                                        " (defaults to %s)",
-                                       kIdmapCacheDir),
+                                       kIdmapCacheDir.data()),
                           &idmap_dir)
           .OptionalOption("--policy",
                           "input: an overlayable policy this overlay fulfills"
@@ -142,7 +142,7 @@
   }
 
   for (const std::string& idmap_path : idmap_paths) {
-    std::cout << idmap_path << std::endl;
+    std::cout << idmap_path << '\n';
   }
 
   return Unit{};
diff --git a/cmds/idmap2/idmap2/Lookup.cpp b/cmds/idmap2/idmap2/Lookup.cpp
index f41e57c..3704b4a 100644
--- a/cmds/idmap2/idmap2/Lookup.cpp
+++ b/cmds/idmap2/idmap2/Lookup.cpp
@@ -16,9 +16,9 @@
 
 #include <algorithm>
 #include <fstream>
+#include <iostream>
 #include <iterator>
 #include <memory>
-#include <ostream>
 #include <string>
 #include <utility>
 #include <vector>
@@ -174,7 +174,7 @@
     return Error("failed to parse config");
   }
 
-  std::vector<std::unique_ptr<const ApkAssets>> apk_assets;
+  std::vector<AssetManager2::ApkAssetsPtr> apk_assets;
   std::string target_path;
   std::string target_package_name;
   for (size_t i = 0; i < idmap_paths.size(); i++) {
@@ -217,24 +217,21 @@
     apk_assets.push_back(std::move(overlay_apk));
   }
 
-  // AssetManager2::SetApkAssets requires raw ApkAssets pointers, not unique_ptrs
-  std::vector<const ApkAssets*> raw_pointer_apk_assets;
-  std::transform(apk_assets.cbegin(), apk_assets.cend(), std::back_inserter(raw_pointer_apk_assets),
-                 [](const auto& p) -> const ApkAssets* { return p.get(); });
-  AssetManager2 am;
-  am.SetApkAssets(raw_pointer_apk_assets);
-  am.SetConfiguration(config);
+  {
+    // Make sure |apk_assets| vector outlives the asset manager as it doesn't own the assets.
+    AssetManager2 am(apk_assets, config);
 
-  const Result<ResourceId> resid = ParseResReference(am, resid_str, target_package_name);
-  if (!resid) {
-    return Error(resid.GetError(), "failed to parse resource ID");
-  }
+    const Result<ResourceId> resid = ParseResReference(am, resid_str, target_package_name);
+    if (!resid) {
+      return Error(resid.GetError(), "failed to parse resource ID");
+    }
 
-  const Result<std::string> value = GetValue(&am, *resid);
-  if (!value) {
-    return Error(value.GetError(), "resource 0x%08x not found", *resid);
+    const Result<std::string> value = GetValue(&am, *resid);
+    if (!value) {
+      return Error(value.GetError(), "resource 0x%08x not found", *resid);
+    }
+    std::cout << *value << '\n';
   }
-  std::cout << *value << std::endl;
 
   return Unit{};
 }
diff --git a/cmds/idmap2/idmap2/Main.cpp b/cmds/idmap2/idmap2/Main.cpp
index aa6d0e7..5ef15a6 100644
--- a/cmds/idmap2/idmap2/Main.cpp
+++ b/cmds/idmap2/idmap2/Main.cpp
@@ -45,7 +45,7 @@
     }
     out << iter->first;
   }
-  out << "]" << std::endl;
+  out << "]" << '\n';
 }
 
 }  // namespace
@@ -65,18 +65,18 @@
   const std::unique_ptr<std::vector<std::string>> args =
       CommandLineOptions::ConvertArgvToVector(argc - 1, const_cast<const char**>(argv + 1));
   if (!args) {
-    std::cerr << "error: failed to parse command line options" << std::endl;
+    std::cerr << "error: failed to parse command line options" << '\n';
     return EXIT_FAILURE;
   }
   const auto iter = commands.find(argv[1]);
   if (iter == commands.end()) {
-    std::cerr << argv[1] << ": command not found" << std::endl;
+    std::cerr << argv[1] << ": command not found" << '\n';
     PrintUsage(commands, std::cerr);
     return EXIT_FAILURE;
   }
   const auto result = iter->second(*args);
   if (!result) {
-    std::cerr << "error: " << result.GetErrorMessage() << std::endl;
+    std::cerr << "error: " << result.GetErrorMessage() << '\n';
     return EXIT_FAILURE;
   }
   return EXIT_SUCCESS;
diff --git a/cmds/idmap2/idmap2d/Idmap2Service.cpp b/cmds/idmap2/idmap2d/Idmap2Service.cpp
index 10947dc..d76ca5b 100644
--- a/cmds/idmap2/idmap2d/Idmap2Service.cpp
+++ b/cmds/idmap2/idmap2d/Idmap2Service.cpp
@@ -59,7 +59,7 @@
 
 namespace {
 
-constexpr const char* kFrameworkPath = "/system/framework/framework-res.apk";
+constexpr std::string_view kFrameworkPath = "/system/framework/framework-res.apk";
 
 Status ok() {
   return Status::ok();
@@ -207,23 +207,47 @@
 
 idmap2::Result<Idmap2Service::TargetResourceContainerPtr> Idmap2Service::GetTargetContainer(
     const std::string& target_path) {
-  if (target_path == kFrameworkPath) {
-    if (framework_apk_cache_ == nullptr) {
-      // Initialize the framework APK cache.
-      auto target = TargetResourceContainer::FromPath(target_path);
-      if (!target) {
-        return target.GetError();
+  const bool is_framework = target_path == kFrameworkPath;
+  bool use_cache;
+  struct stat st = {};
+  if (is_framework || !::stat(target_path.c_str(), &st)) {
+    use_cache = true;
+  } else {
+    LOG(WARNING) << "failed to stat target path '" << target_path << "' for the cache";
+    use_cache = false;
+  }
+
+  if (use_cache) {
+    std::lock_guard lock(container_cache_mutex_);
+    if (auto cache_it = container_cache_.find(target_path); cache_it != container_cache_.end()) {
+      const auto& item = cache_it->second;
+      if (is_framework ||
+        (item.dev == st.st_dev && item.inode == st.st_ino && item.size == st.st_size
+          && item.mtime.tv_sec == st.st_mtim.tv_sec && item.mtime.tv_nsec == st.st_mtim.tv_nsec)) {
+        return {item.apk.get()};
       }
-      framework_apk_cache_ = std::move(*target);
+      container_cache_.erase(cache_it);
     }
-    return {framework_apk_cache_.get()};
   }
 
   auto target = TargetResourceContainer::FromPath(target_path);
   if (!target) {
     return target.GetError();
   }
-  return {std::move(*target)};
+  if (!use_cache) {
+    return {std::move(*target)};
+  }
+
+  const auto res = target->get();
+  std::lock_guard lock(container_cache_mutex_);
+  container_cache_.emplace(target_path, CachedContainer {
+    .dev = dev_t(st.st_dev),
+    .inode = ino_t(st.st_ino),
+    .size = st.st_size,
+    .mtime = st.st_mtim,
+    .apk = std::move(*target)
+  });
+  return {res};
 }
 
 Status Idmap2Service::createFabricatedOverlay(
@@ -241,7 +265,8 @@
             res.configuration.value_or(std::string()));
     } else if (res.binaryData.has_value()) {
       builder.SetResourceValue(res.resourceName, res.binaryData->get(),
-            res.configuration.value_or(std::string()));
+                               res.binaryDataOffset, res.binaryDataSize,
+                               res.configuration.value_or(std::string()));
     } else {
       builder.SetResourceValue(res.resourceName, res.dataType, res.data,
             res.configuration.value_or(std::string()));
@@ -257,7 +282,7 @@
     const std::string random_suffix = RandomStringForPath(kSuffixLength);
     file_name = StringPrintf("%s-%s-%s.frro", overlay.packageName.c_str(),
                              overlay.overlayName.c_str(), random_suffix.c_str());
-    path = StringPrintf("%s/%s", kIdmapCacheDir, file_name.c_str());
+    path = StringPrintf("%s/%s", kIdmapCacheDir.data(), file_name.c_str());
 
     // Invoking std::filesystem::exists with a file name greater than 255 characters will cause this
     // process to abort since the name exceeds the maximum file name size.
diff --git a/cmds/idmap2/idmap2d/Idmap2Service.h b/cmds/idmap2/idmap2d/Idmap2Service.h
index cc8cc5f..a69fa61 100644
--- a/cmds/idmap2/idmap2d/Idmap2Service.h
+++ b/cmds/idmap2/idmap2d/Idmap2Service.h
@@ -75,7 +75,20 @@
  private:
   // idmap2d is killed after a period of inactivity, so any information stored on this class should
   // be able to be recalculated if idmap2 dies and restarts.
-  std::unique_ptr<idmap2::TargetResourceContainer> framework_apk_cache_;
+
+  // A cache item for the resource containers (apks or frros), with all information needed to
+  // detect if it has changed since it was parsed:
+  //  - (dev, inode) pair uniquely identifies a file on a particular device partition (see stat(2)).
+  //  - (mtime, size) ensure the file data hasn't changed inside that file.
+  struct CachedContainer {
+    dev_t dev;
+    ino_t inode;
+    int64_t size;
+    struct timespec mtime;
+    std::unique_ptr<idmap2::TargetResourceContainer> apk;
+  };
+  std::unordered_map<std::string, CachedContainer> container_cache_;
+  std::mutex container_cache_mutex_;
 
   int32_t frro_iter_id_ = 0;
   std::optional<std::filesystem::directory_iterator> frro_iter_;
diff --git a/cmds/idmap2/idmap2d/aidl/core/android/os/FabricatedOverlayInternalEntry.aidl b/cmds/idmap2/idmap2d/aidl/core/android/os/FabricatedOverlayInternalEntry.aidl
index 3ad6d58..8ebd454 100644
--- a/cmds/idmap2/idmap2d/aidl/core/android/os/FabricatedOverlayInternalEntry.aidl
+++ b/cmds/idmap2/idmap2d/aidl/core/android/os/FabricatedOverlayInternalEntry.aidl
@@ -26,4 +26,6 @@
     @nullable @utf8InCpp String stringData;
     @nullable ParcelFileDescriptor binaryData;
     @nullable @utf8InCpp String configuration;
+    long binaryDataOffset;
+    long binaryDataSize;
 }
\ No newline at end of file
diff --git a/cmds/idmap2/include/idmap2/BinaryStreamVisitor.h b/cmds/idmap2/include/idmap2/BinaryStreamVisitor.h
index 7b38bd1..57af1b6 100644
--- a/cmds/idmap2/include/idmap2/BinaryStreamVisitor.h
+++ b/cmds/idmap2/include/idmap2/BinaryStreamVisitor.h
@@ -18,7 +18,7 @@
 #define IDMAP2_INCLUDE_IDMAP2_BINARYSTREAMVISITOR_H_
 
 #include <cstdint>
-#include <iostream>
+#include <ostream>
 #include <string>
 
 #include "idmap2/Idmap.h"
diff --git a/cmds/idmap2/include/idmap2/FabricatedOverlay.h b/cmds/idmap2/include/idmap2/FabricatedOverlay.h
index 9f57710..1e7d4c2 100644
--- a/cmds/idmap2/include/idmap2/FabricatedOverlay.h
+++ b/cmds/idmap2/include/idmap2/FabricatedOverlay.h
@@ -19,9 +19,10 @@
 
 #include <libidmap2/proto/fabricated_v1.pb.h>
 
-#include <iostream>
+#include <istream>
 #include <map>
 #include <memory>
+#include <ostream>
 #include <string>
 #include <unordered_map>
 #include <vector>
@@ -48,6 +49,8 @@
 
     Builder& SetResourceValue(const std::string& resource_name,
                               std::optional<android::base::borrowed_fd>&& binary_value,
+                              off64_t data_binary_offset,
+                              size_t data_binary_size,
                               const std::string& configuration);
 
     inline Builder& setFrroPath(std::string frro_path) {
@@ -64,6 +67,8 @@
       DataValue data_value;
       std::string data_string_value;
       std::optional<android::base::borrowed_fd> data_binary_value;
+      off64_t data_binary_offset;
+      size_t data_binary_size;
       std::string configuration;
     };
 
@@ -75,6 +80,12 @@
     std::vector<Entry> entries_;
   };
 
+  struct BinaryData {
+    android::base::borrowed_fd file_descriptor;
+    off64_t offset;
+    size_t size;
+  };
+
   Result<Unit> ToBinaryStream(std::ostream& stream) const;
   static Result<FabricatedOverlay> FromBinaryStream(std::istream& stream);
 
@@ -91,13 +102,13 @@
 
   explicit FabricatedOverlay(pb::FabricatedOverlay&& overlay,
                              std::string&& string_pool_data_,
-                             std::vector<android::base::borrowed_fd> binary_files_,
+                             std::vector<FabricatedOverlay::BinaryData> binary_files_,
                              off_t total_binary_bytes_,
                              std::optional<uint32_t> crc_from_disk = {});
 
   pb::FabricatedOverlay overlay_pb_;
   std::string string_pool_data_;
-  std::vector<android::base::borrowed_fd> binary_files_;
+  std::vector<FabricatedOverlay::BinaryData> binary_files_;
   uint32_t total_binary_bytes_;
   std::optional<uint32_t> crc_from_disk_;
   mutable std::optional<SerializedData> data_;
diff --git a/cmds/idmap2/include/idmap2/FileUtils.h b/cmds/idmap2/include/idmap2/FileUtils.h
index bc0bb47..3e99981 100644
--- a/cmds/idmap2/include/idmap2/FileUtils.h
+++ b/cmds/idmap2/include/idmap2/FileUtils.h
@@ -19,12 +19,12 @@
 
 #include <sys/types.h>
 
-#include <random>
 #include <string>
+#include <string_view>
 
 namespace android::idmap2::utils {
 
-constexpr const char* kIdmapCacheDir = "/data/resource-cache";
+constexpr std::string_view kIdmapCacheDir = "/data/resource-cache";
 constexpr const mode_t kIdmapFilePermissionMask = 0133;  // u=rw,g=r,o=r
 
 bool UidHasWriteAccessToPath(uid_t uid, const std::string& path);
diff --git a/cmds/idmap2/include/idmap2/Idmap.h b/cmds/idmap2/include/idmap2/Idmap.h
index 03e714a..e86f814 100644
--- a/cmds/idmap2/include/idmap2/Idmap.h
+++ b/cmds/idmap2/include/idmap2/Idmap.h
@@ -71,9 +71,10 @@
 #ifndef IDMAP2_INCLUDE_IDMAP2_IDMAP_H_
 #define IDMAP2_INCLUDE_IDMAP2_IDMAP_H_
 
-#include <iostream>
+#include <istream>
 #include <memory>
 #include <string>
+#include <string_view>
 #include <vector>
 
 #include "android-base/macros.h"
@@ -272,8 +273,8 @@
 
 class Idmap {
  public:
-  static std::string CanonicalIdmapPathFor(const std::string& absolute_dir,
-                                           const std::string& absolute_apk_path);
+  static std::string CanonicalIdmapPathFor(std::string_view absolute_dir,
+                                           std::string_view absolute_apk_path);
 
   static Result<std::unique_ptr<const Idmap>> FromBinaryStream(std::istream& stream);
 
diff --git a/cmds/idmap2/include/idmap2/LogInfo.h b/cmds/idmap2/include/idmap2/LogInfo.h
index a6237e6..b576152 100644
--- a/cmds/idmap2/include/idmap2/LogInfo.h
+++ b/cmds/idmap2/include/idmap2/LogInfo.h
@@ -61,7 +61,7 @@
 #ifdef __ANDROID__
     LOG(WARNING) << msg.GetString();
 #else
-    std::cerr << "W " << msg.GetString() << std::endl;
+    std::cerr << "W " << msg.GetString() << '\n';
 #endif
     lines_.push_back("W " + msg.GetString());
   }
diff --git a/cmds/idmap2/include/idmap2/PrettyPrintVisitor.h b/cmds/idmap2/include/idmap2/PrettyPrintVisitor.h
index 4464201..ed18d9c 100644
--- a/cmds/idmap2/include/idmap2/PrettyPrintVisitor.h
+++ b/cmds/idmap2/include/idmap2/PrettyPrintVisitor.h
@@ -17,7 +17,7 @@
 #ifndef IDMAP2_INCLUDE_IDMAP2_PRETTYPRINTVISITOR_H_
 #define IDMAP2_INCLUDE_IDMAP2_PRETTYPRINTVISITOR_H_
 
-#include <iostream>
+#include <ostream>
 #include <memory>
 
 #include "androidfw/AssetManager2.h"
diff --git a/cmds/idmap2/include/idmap2/RawPrintVisitor.h b/cmds/idmap2/include/idmap2/RawPrintVisitor.h
index ebd0d1e..849ba11 100644
--- a/cmds/idmap2/include/idmap2/RawPrintVisitor.h
+++ b/cmds/idmap2/include/idmap2/RawPrintVisitor.h
@@ -17,7 +17,7 @@
 #ifndef IDMAP2_INCLUDE_IDMAP2_RAWPRINTVISITOR_H_
 #define IDMAP2_INCLUDE_IDMAP2_RAWPRINTVISITOR_H_
 
-#include <iostream>
+#include <ostream>
 #include <memory>
 #include <string>
 
diff --git a/cmds/idmap2/include/idmap2/ResourceUtils.h b/cmds/idmap2/include/idmap2/ResourceUtils.h
index c2b0abe..d4490ef4 100644
--- a/cmds/idmap2/include/idmap2/ResourceUtils.h
+++ b/cmds/idmap2/include/idmap2/ResourceUtils.h
@@ -43,6 +43,8 @@
   DataValue data_value;
   std::string data_string_value;
   std::optional<android::base::borrowed_fd> data_binary_value;
+  off64_t data_binary_offset;
+  size_t data_binary_size;
 };
 
 struct TargetValueWithConfig {
diff --git a/cmds/idmap2/include/idmap2/XmlParser.h b/cmds/idmap2/include/idmap2/XmlParser.h
index c968a5e..c93b067 100644
--- a/cmds/idmap2/include/idmap2/XmlParser.h
+++ b/cmds/idmap2/include/idmap2/XmlParser.h
@@ -17,8 +17,6 @@
 #ifndef IDMAP2_INCLUDE_IDMAP2_XMLPARSER_H_
 #define IDMAP2_INCLUDE_IDMAP2_XMLPARSER_H_
 
-#include <iostream>
-#include <map>
 #include <memory>
 #include <string>
 
diff --git a/cmds/idmap2/libidmap2/CommandLineOptions.cpp b/cmds/idmap2/libidmap2/CommandLineOptions.cpp
index 8129d99..888b3a5 100644
--- a/cmds/idmap2/libidmap2/CommandLineOptions.cpp
+++ b/cmds/idmap2/libidmap2/CommandLineOptions.cpp
@@ -19,8 +19,8 @@
 #include <algorithm>
 #include <cassert>
 #include <iomanip>
-#include <iostream>
 #include <memory>
+#include <ostream>
 #include <set>
 #include <sstream>
 #include <string>
@@ -131,7 +131,7 @@
       separator = true;
       stream << opt << ": missing mandatory option";
     }
-    stream << std::endl;
+    stream << '\n';
     Usage(stream);
     return Error("%s", stream.str().c_str());
   }
@@ -168,7 +168,7 @@
       out << " [" << opt.name << " arg [..]]";
     }
   }
-  out << std::endl << std::endl;
+  out << "\n\n";
   for (const Option& opt : options_) {
     out << std::left << std::setw(maxLength);
     if (opt.argument) {
@@ -181,7 +181,7 @@
         opt.count == Option::COUNT_OPTIONAL_ONCE_OR_MORE) {
       out << " (can be provided multiple times)";
     }
-    out << std::endl;
+    out << '\n';
   }
 }
 
diff --git a/cmds/idmap2/libidmap2/FabricatedOverlay.cpp b/cmds/idmap2/libidmap2/FabricatedOverlay.cpp
index dd5be21c..47daf23 100644
--- a/cmds/idmap2/libidmap2/FabricatedOverlay.cpp
+++ b/cmds/idmap2/libidmap2/FabricatedOverlay.cpp
@@ -55,7 +55,7 @@
 
 FabricatedOverlay::FabricatedOverlay(pb::FabricatedOverlay&& overlay,
                                      std::string&& string_pool_data,
-                                     std::vector<android::base::borrowed_fd> binary_files,
+                                     std::vector<FabricatedOverlay::BinaryData> binary_files,
                                      off_t total_binary_bytes,
                                      std::optional<uint32_t> crc_from_disk)
     : overlay_pb_(std::forward<pb::FabricatedOverlay>(overlay)),
@@ -81,7 +81,7 @@
     const std::string& resource_name, uint8_t data_type, uint32_t data_value,
     const std::string& configuration) {
   entries_.emplace_back(
-      Entry{resource_name, data_type, data_value, "", std::nullopt, configuration});
+      Entry{resource_name, data_type, data_value, "", std::nullopt, 0, 0, configuration});
   return *this;
 }
 
@@ -89,14 +89,15 @@
     const std::string& resource_name, uint8_t data_type, const std::string& data_string_value,
     const std::string& configuration) {
   entries_.emplace_back(
-      Entry{resource_name, data_type, 0, data_string_value, std::nullopt, configuration});
+      Entry{resource_name, data_type, 0, data_string_value, std::nullopt, 0, 0, configuration});
   return *this;
 }
 
 FabricatedOverlay::Builder& FabricatedOverlay::Builder::SetResourceValue(
     const std::string& resource_name, std::optional<android::base::borrowed_fd>&& binary_value,
-    const std::string& configuration) {
-  entries_.emplace_back(Entry{resource_name, 0, 0, "", binary_value, configuration});
+    off64_t data_binary_offset, size_t data_binary_size, const std::string& configuration) {
+  entries_.emplace_back(Entry{resource_name, 0, 0, "", binary_value,
+                              data_binary_offset, data_binary_size, configuration});
   return *this;
 }
 
@@ -148,7 +149,8 @@
     }
 
     value->second = TargetValue{res_entry.data_type, res_entry.data_value,
-        res_entry.data_string_value, res_entry.data_binary_value};
+                                res_entry.data_string_value, res_entry.data_binary_value,
+                                res_entry.data_binary_offset, res_entry.data_binary_size};
   }
 
   pb::FabricatedOverlay overlay_pb;
@@ -157,7 +159,7 @@
   overlay_pb.set_target_package_name(target_package_name_);
   overlay_pb.set_target_overlayable(target_overlayable_);
 
-  std::vector<android::base::borrowed_fd> binary_files;
+  std::vector<FabricatedOverlay::BinaryData> binary_files;
   size_t total_binary_bytes = 0;
   // 16 for the number of bytes in the frro file before the binary data
   const size_t FRRO_HEADER_SIZE = 16;
@@ -182,16 +184,15 @@
             pb_value->set_data_value(ref.index());
           } else if (value.second.data_binary_value.has_value()) {
               pb_value->set_data_type(Res_value::TYPE_STRING);
-              struct stat s;
-              if (fstat(value.second.data_binary_value->get(), &s) == -1) {
-                return Error("unable to get size of binary file: %d", errno);
-              }
               std::string uri
                   = StringPrintf("frro:/%s?offset=%d&size=%d", frro_path_.c_str(),
                                  static_cast<int> (FRRO_HEADER_SIZE + total_binary_bytes),
-                                 static_cast<int> (s.st_size));
-              total_binary_bytes += s.st_size;
-              binary_files.emplace_back(value.second.data_binary_value->get());
+                                 static_cast<int> (value.second.data_binary_size));
+              total_binary_bytes += value.second.data_binary_size;
+              binary_files.emplace_back(FabricatedOverlay::BinaryData{
+                  value.second.data_binary_value->get(),
+                  value.second.data_binary_offset,
+                  value.second.data_binary_size});
               auto ref = string_pool.MakeRef(std::move(uri));
               pb_value->set_data_value(ref.index());
           } else {
@@ -310,8 +311,9 @@
   Write32(stream, (*data)->pb_crc);
   Write32(stream, total_binary_bytes_);
   std::string file_contents;
-  for (const android::base::borrowed_fd fd : binary_files_) {
-    if (!ReadFdToString(fd, &file_contents)) {
+  for (const FabricatedOverlay::BinaryData fd : binary_files_) {
+    file_contents.resize(fd.size);
+    if (!ReadFullyAtOffset(fd.file_descriptor, file_contents.data(), fd.size, fd.offset)) {
       return Error("Failed to read binary file data.");
     }
     stream.write(file_contents.data(), file_contents.length());
diff --git a/cmds/idmap2/libidmap2/FileUtils.cpp b/cmds/idmap2/libidmap2/FileUtils.cpp
index 98a4cea..bc5654a 100644
--- a/cmds/idmap2/libidmap2/FileUtils.cpp
+++ b/cmds/idmap2/libidmap2/FileUtils.cpp
@@ -16,11 +16,13 @@
 
 #include "idmap2/FileUtils.h"
 
+#include <random>
 #include <string>
+#include <string_view>
 
 #include "android-base/file.h"
 #include "android-base/macros.h"
-#include "android-base/stringprintf.h"
+#include "android-base/strings.h"
 #include "private/android_filesystem_config.h"
 
 namespace android::idmap2::utils {
@@ -33,9 +35,9 @@
     return false;
   }
 
-  const std::string cache_subdir = base::StringPrintf("%s/", kIdmapCacheDir);
-  if (canonical_path == kIdmapCacheDir ||
-      canonical_path.compare(0, cache_subdir.size(), cache_subdir) == 0) {
+  if (base::StartsWith(canonical_path, kIdmapCacheDir) &&
+      (canonical_path.size() == kIdmapCacheDir.size() ||
+       canonical_path[kIdmapCacheDir.size()] == '/')) {
     // limit access to /data/resource-cache to root and system
     return uid == AID_ROOT || uid == AID_SYSTEM;
   }
@@ -47,17 +49,17 @@
 }
 #endif
 
-std::string RandomStringForPath(const size_t length) {
-  constexpr char kChars[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
-  constexpr size_t kCharLastIndex = sizeof(kChars) - 1;
+std::string RandomStringForPath(size_t length) {
+  constexpr std::string_view kChars =
+      "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
 
   std::string out_rand;
-  out_rand.reserve(length);
+  out_rand.resize(length);
 
-  std::random_device rd;
-  std::uniform_int_distribution<int> dist(0, kCharLastIndex);
+  static thread_local std::random_device rd;
+  std::uniform_int_distribution<int> dist(0, kChars.size() - 1);
   for (size_t i = 0; i < length; i++) {
-    out_rand[i] = kChars[dist(rd) % (kCharLastIndex)];
+    out_rand[i] = kChars[dist(rd)];
   }
   return out_rand;
 }
diff --git a/cmds/idmap2/libidmap2/Idmap.cpp b/cmds/idmap2/libidmap2/Idmap.cpp
index 7c0b937..12d9dd9 100644
--- a/cmds/idmap2/libidmap2/Idmap.cpp
+++ b/cmds/idmap2/libidmap2/Idmap.cpp
@@ -18,13 +18,14 @@
 
 #include <algorithm>
 #include <cassert>
-#include <iostream>
+#include <istream>
 #include <iterator>
 #include <limits>
 #include <memory>
 #include <string>
 #include <utility>
 
+#include "android-base/format.h"
 #include "android-base/macros.h"
 #include "androidfw/AssetManager2.h"
 #include "idmap2/ResourceMapping.h"
@@ -80,7 +81,7 @@
   if (padding_size != 0 && !stream.seekg(padding_size, std::ios_base::cur)) {
     return false;
   }
-  *out = buf;
+  *out = std::move(buf);
   return true;
 }
 
@@ -279,13 +280,13 @@
   return std::move(data);
 }
 
-std::string Idmap::CanonicalIdmapPathFor(const std::string& absolute_dir,
-                                         const std::string& absolute_apk_path) {
+std::string Idmap::CanonicalIdmapPathFor(std::string_view absolute_dir,
+                                         std::string_view absolute_apk_path) {
   assert(absolute_dir.size() > 0 && absolute_dir[0] == "/");
   assert(absolute_apk_path.size() > 0 && absolute_apk_path[0] == "/");
-  std::string copy(++absolute_apk_path.cbegin(), absolute_apk_path.cend());
+  std::string copy(absolute_apk_path.begin() + 1, absolute_apk_path.end());
   replace(copy.begin(), copy.end(), '/', '@');
-  return absolute_dir + "/" + copy + "@idmap";
+  return fmt::format("{}/{}@idmap", absolute_dir, copy);
 }
 
 Result<std::unique_ptr<const Idmap>> Idmap::FromBinaryStream(std::istream& stream) {
@@ -332,7 +333,7 @@
         values[cd] = value;
         inline_value_count++;
       }
-      data->target_inline_entries_.push_back({mapping.first, values});
+      data->target_inline_entries_.push_back({mapping.first, std::move(values)});
     }
   }
 
diff --git a/cmds/idmap2/libidmap2/PrettyPrintVisitor.cpp b/cmds/idmap2/libidmap2/PrettyPrintVisitor.cpp
index a44fa75..eb94582 100644
--- a/cmds/idmap2/libidmap2/PrettyPrintVisitor.cpp
+++ b/cmds/idmap2/libidmap2/PrettyPrintVisitor.cpp
@@ -34,21 +34,21 @@
 }
 
 void PrettyPrintVisitor::visit(const IdmapHeader& header) {
-  stream_ << "Paths:" << std::endl
-          << TAB "target path  : " << header.GetTargetPath() << std::endl
-          << TAB "overlay path : " << header.GetOverlayPath() << std::endl;
+  stream_ << "Paths:" << '\n'
+          << TAB "target path  : " << header.GetTargetPath() << '\n'
+          << TAB "overlay path : " << header.GetOverlayPath() << '\n';
 
   if (!header.GetOverlayName().empty()) {
-    stream_ << "Overlay name: " << header.GetOverlayName() << std::endl;
+    stream_ << "Overlay name: " << header.GetOverlayName() << '\n';
   }
 
   const std::string& debug = header.GetDebugInfo();
   if (!debug.empty()) {
     std::istringstream debug_stream(debug);
     std::string line;
-    stream_ << "Debug info:" << std::endl;
+    stream_ << "Debug info:" << '\n';
     while (std::getline(debug_stream, line)) {
-      stream_ << TAB << line << std::endl;
+      stream_ << TAB << line << '\n';
     }
   }
 
@@ -59,7 +59,7 @@
     overlay_ = std::move(*overlay);
   }
 
-  stream_ << "Mapping:" << std::endl;
+  stream_ << "Mapping:" << '\n';
 }
 
 void PrettyPrintVisitor::visit(const IdmapData::Header& header ATTRIBUTE_UNUSED) {
@@ -90,7 +90,7 @@
             << base::StringPrintf("0x%08x -> 0x%08x (%s -> %s)", target_entry.target_id,
                                   target_entry.overlay_id, target_name.c_str(),
                                   overlay_name.c_str())
-            << std::endl;
+            << '\n';
   }
 
   for (auto& target_entry : data.GetTargetInlineEntries()) {
@@ -114,7 +114,7 @@
       }
     }
 
-    stream_ << " (" << target_name << ")" << std::endl;
+    stream_ << " (" << target_name << ")" << '\n';
   }
 }
 
diff --git a/cmds/idmap2/libidmap2/RawPrintVisitor.cpp b/cmds/idmap2/libidmap2/RawPrintVisitor.cpp
index 3531cd7..174d85c 100644
--- a/cmds/idmap2/libidmap2/RawPrintVisitor.cpp
+++ b/cmds/idmap2/libidmap2/RawPrintVisitor.cpp
@@ -161,7 +161,7 @@
   va_end(ap);
 
   stream_ << base::StringPrintf("%08zx:       %02x", offset_, value) << "  " << comment
-          << std::endl;
+          << '\n';
   offset_ += sizeof(uint8_t);
 }
 
@@ -173,7 +173,7 @@
   base::StringAppendV(&comment, fmt, ap);
   va_end(ap);
 
-  stream_ << base::StringPrintf("%08zx:     %04x", offset_, value) << "  " << comment << std::endl;
+  stream_ << base::StringPrintf("%08zx:     %04x", offset_, value) << "  " << comment << '\n';
   offset_ += sizeof(uint16_t);
 }
 
@@ -185,7 +185,7 @@
   base::StringAppendV(&comment, fmt, ap);
   va_end(ap);
 
-  stream_ << base::StringPrintf("%08zx: %08x", offset_, value) << "  " << comment << std::endl;
+  stream_ << base::StringPrintf("%08zx: %08x", offset_, value) << "  " << comment << '\n';
   offset_ += sizeof(uint32_t);
 }
 
@@ -198,7 +198,7 @@
   va_end(ap);
 
   stream_ << base::StringPrintf("%08zx: %08x", offset_, (uint32_t)value.size()) << "  " << comment
-          << " size" << std::endl;
+          << " size" << '\n';
   offset_ += sizeof(uint32_t);
 
   stream_ << base::StringPrintf("%08zx: ", offset_) << "........  " << comment;
@@ -207,7 +207,7 @@
   if (print_value) {
     stream_ << ": " << value;
   }
-  stream_ << std::endl;
+  stream_ << '\n';
 }
 
 void RawPrintVisitor::align() {
diff --git a/cmds/idmap2/libidmap2/ResourceContainer.cpp b/cmds/idmap2/libidmap2/ResourceContainer.cpp
index 0e35904..7869fbd 100644
--- a/cmds/idmap2/libidmap2/ResourceContainer.cpp
+++ b/cmds/idmap2/libidmap2/ResourceContainer.cpp
@@ -262,7 +262,7 @@
 }
 
 struct ResState {
-  std::unique_ptr<ApkAssets> apk_assets;
+  AssetManager2::ApkAssetsPtr apk_assets;
   const LoadedArsc* arsc;
   const LoadedPackage* package;
   std::unique_ptr<AssetManager2> am;
@@ -284,7 +284,7 @@
     }
 
     state.am = std::make_unique<AssetManager2>();
-    if (!state.am->SetApkAssets({state.apk_assets.get()})) {
+    if (!state.am->SetApkAssets({state.apk_assets})) {
       return Error("failed to create asset manager");
     }
 
diff --git a/cmds/idmap2/libidmap2/XmlParser.cpp b/cmds/idmap2/libidmap2/XmlParser.cpp
index 70822c8..766ca56 100644
--- a/cmds/idmap2/libidmap2/XmlParser.cpp
+++ b/cmds/idmap2/libidmap2/XmlParser.cpp
@@ -16,8 +16,6 @@
 
 #include "idmap2/XmlParser.h"
 
-#include <iostream>
-#include <map>
 #include <memory>
 #include <string>
 #include <utility>
diff --git a/cmds/idmap2/self_targeting/SelfTargeting.cpp b/cmds/idmap2/self_targeting/SelfTargeting.cpp
index a8aa033..c7f5cf3 100644
--- a/cmds/idmap2/self_targeting/SelfTargeting.cpp
+++ b/cmds/idmap2/self_targeting/SelfTargeting.cpp
@@ -52,6 +52,7 @@
         const auto dataType = entry_params.data_type;
         if (entry_params.data_binary_value.has_value()) {
             builder.SetResourceValue(entry_params.resource_name, *entry_params.data_binary_value,
+                                     entry_params.binary_data_offset, entry_params.binary_data_size,
                                      entry_params.configuration);
         } else  if (dataType >= Res_value::TYPE_FIRST_INT && dataType <= Res_value::TYPE_LAST_INT) {
            builder.SetResourceValue(entry_params.resource_name, dataType,
diff --git a/cmds/idmap2/tests/FabricatedOverlayTests.cpp b/cmds/idmap2/tests/FabricatedOverlayTests.cpp
index e13a0eb..b460bb3 100644
--- a/cmds/idmap2/tests/FabricatedOverlayTests.cpp
+++ b/cmds/idmap2/tests/FabricatedOverlayTests.cpp
@@ -59,7 +59,7 @@
               Res_value::TYPE_STRING,
               "foobar",
               "en-rUS-normal-xxhdpi-v21")
-          .SetResourceValue("com.example.target:drawable/dr1", fd, "port-xxhdpi-v7")
+          .SetResourceValue("com.example.target:drawable/dr1", fd, 0, 8341, "port-xxhdpi-v7")
           .setFrroPath("/foo/bar/biz.frro")
           .Build();
   ASSERT_TRUE(overlay);
diff --git a/cmds/idmap2/tests/FileUtilsTests.cpp b/cmds/idmap2/tests/FileUtilsTests.cpp
index 5750ca1..b160e8e 100644
--- a/cmds/idmap2/tests/FileUtilsTests.cpp
+++ b/cmds/idmap2/tests/FileUtilsTests.cpp
@@ -27,8 +27,9 @@
 #ifdef __ANDROID__
 TEST(FileUtilsTests, UidHasWriteAccessToPath) {
   constexpr const char* tmp_path = "/data/local/tmp/test@idmap";
-  const std::string cache_path(base::StringPrintf("%s/test@idmap", kIdmapCacheDir));
-  const std::string sneaky_cache_path(base::StringPrintf("/data/../%s/test@idmap", kIdmapCacheDir));
+  const std::string cache_path(base::StringPrintf("%s/test@idmap", kIdmapCacheDir.data()));
+  const std::string sneaky_cache_path(
+      base::StringPrintf("/data/../%s/test@idmap", kIdmapCacheDir.data()));
 
   ASSERT_TRUE(UidHasWriteAccessToPath(AID_ROOT, tmp_path));
   ASSERT_TRUE(UidHasWriteAccessToPath(AID_ROOT, cache_path));
diff --git a/cmds/idmap2/tests/IdmapTests.cpp b/cmds/idmap2/tests/IdmapTests.cpp
index b473f26..a3448fd 100644
--- a/cmds/idmap2/tests/IdmapTests.cpp
+++ b/cmds/idmap2/tests/IdmapTests.cpp
@@ -269,7 +269,7 @@
                   .SetResourceValue("integer/int1", Res_value::TYPE_INT_DEC, 2U, "land-xxhdpi-v7")
                   .SetResourceValue("string/str1", Res_value::TYPE_REFERENCE, 0x7f010000, "land")
                   .SetResourceValue("string/str2", Res_value::TYPE_STRING, "foobar", "xxhdpi-v7")
-                  .SetResourceValue("drawable/dr1", fd, "port-xxhdpi-v7")
+                  .SetResourceValue("drawable/dr1", fd, 0, 8341, "port-xxhdpi-v7")
                   .setFrroPath("/foo/bar/biz.frro")
                   .Build();
 
@@ -613,19 +613,19 @@
   }
 
   void visit(const Idmap& idmap ATTRIBUTE_UNUSED) override {
-    stream_ << "TestVisitor::visit(Idmap)" << std::endl;
+    stream_ << "TestVisitor::visit(Idmap)" << '\n';
   }
 
   void visit(const IdmapHeader& idmap ATTRIBUTE_UNUSED) override {
-    stream_ << "TestVisitor::visit(IdmapHeader)" << std::endl;
+    stream_ << "TestVisitor::visit(IdmapHeader)" << '\n';
   }
 
   void visit(const IdmapData& idmap ATTRIBUTE_UNUSED) override {
-    stream_ << "TestVisitor::visit(IdmapData)" << std::endl;
+    stream_ << "TestVisitor::visit(IdmapData)" << '\n';
   }
 
   void visit(const IdmapData::Header& idmap ATTRIBUTE_UNUSED) override {
-    stream_ << "TestVisitor::visit(IdmapData::Header)" << std::endl;
+    stream_ << "TestVisitor::visit(IdmapData::Header)" << '\n';
   }
 
  private:
diff --git a/cmds/idmap2/tests/ResourceMappingTests.cpp b/cmds/idmap2/tests/ResourceMappingTests.cpp
index 380e462..40f98c2 100644
--- a/cmds/idmap2/tests/ResourceMappingTests.cpp
+++ b/cmds/idmap2/tests/ResourceMappingTests.cpp
@@ -212,7 +212,7 @@
                   .SetResourceValue("integer/int1", Res_value::TYPE_INT_DEC, 2U, "")
                   .SetResourceValue("string/str1", Res_value::TYPE_REFERENCE, 0x7f010000, "")
                   .SetResourceValue("string/str2", Res_value::TYPE_STRING, "foobar", "")
-                  .SetResourceValue("drawable/dr1", fd, "")
+                  .SetResourceValue("drawable/dr1", fd, 0, 8341, "")
                   .setFrroPath("/foo/bar/biz.frro")
                   .Build();
 
diff --git a/cmds/idmap2/tests/ResourceUtilsTests.cpp b/cmds/idmap2/tests/ResourceUtilsTests.cpp
index 6914208..011040b 100644
--- a/cmds/idmap2/tests/ResourceUtilsTests.cpp
+++ b/cmds/idmap2/tests/ResourceUtilsTests.cpp
@@ -38,7 +38,7 @@
     apk_assets_ = ApkAssets::Load(GetTargetApkPath());
     ASSERT_THAT(apk_assets_, NotNull());
 
-    am_.SetApkAssets({apk_assets_.get()});
+    am_.SetApkAssets({apk_assets_});
   }
 
   const AssetManager2& GetAssetManager() {
@@ -47,7 +47,7 @@
 
  private:
   AssetManager2 am_;
-  std::unique_ptr<const ApkAssets> apk_assets_;
+  AssetManager2::ApkAssetsPtr apk_assets_;
 };
 
 TEST_F(ResourceUtilsTests, ResToTypeEntryName) {
diff --git a/cmds/incidentd/src/IncidentService.cpp b/cmds/incidentd/src/IncidentService.cpp
index 05a43ad..4f9059f 100644
--- a/cmds/incidentd/src/IncidentService.cpp
+++ b/cmds/incidentd/src/IncidentService.cpp
@@ -502,9 +502,13 @@
 
     switch (code) {
         case SHELL_COMMAND_TRANSACTION: {
-            int in = data.readFileDescriptor();
-            int out = data.readFileDescriptor();
-            int err = data.readFileDescriptor();
+            unique_fd in, out, err;
+            if (status_t status = data.readUniqueFileDescriptor(&in); status != OK) return status;
+
+            if (status_t status = data.readUniqueFileDescriptor(&out); status != OK) return status;
+
+            if (status_t status = data.readUniqueFileDescriptor(&err); status != OK) return status;
+
             int argc = data.readInt32();
             Vector<String8> args;
             for (int i = 0; i < argc && data.dataAvail() > 0; i++) {
@@ -517,15 +521,15 @@
                 return BAD_VALUE;
             }
 
-            FILE* fin = fdopen(in, "r");
-            FILE* fout = fdopen(out, "w");
-            FILE* ferr = fdopen(err, "w");
+            FILE* fin = fdopen(in.release(), "r");
+            FILE* fout = fdopen(out.release(), "w");
+            FILE* ferr = fdopen(err.release(), "w");
 
             if (fin == NULL || fout == NULL || ferr == NULL) {
                 resultReceiver->send(NO_MEMORY);
             } else {
-                err = command(fin, fout, ferr, args);
-                resultReceiver->send(err);
+                status_t result = command(fin, fout, ferr, args);
+                resultReceiver->send(result);
             }
 
             if (fin != NULL) {
diff --git a/cmds/locksettings/Android.bp b/cmds/locksettings/Android.bp
index 5ee5824..ee31aed 100644
--- a/cmds/locksettings/Android.bp
+++ b/cmds/locksettings/Android.bp
@@ -21,8 +21,7 @@
     default_applicable_licenses: ["frameworks_base_license"],
 }
 
-java_binary {
+sh_binary {
     name: "locksettings",
-    wrapper: "locksettings.sh",
-    srcs: ["**/*.java"],
+    src: "locksettings.sh",
 }
diff --git a/cmds/locksettings/locksettings.sh b/cmds/locksettings/locksettings.sh
index 0ef4fa9..2f8d868 100755
--- a/cmds/locksettings/locksettings.sh
+++ b/cmds/locksettings/locksettings.sh
@@ -1,6 +1,2 @@
 #!/system/bin/sh
-# Script to start "locksettings" on the device
-#
-base=/system
-export CLASSPATH=$base/framework/locksettings.jar
-exec app_process $base/bin com.android.commands.locksettings.LockSettingsCmd "$@"
+cmd lock_settings "$@"
diff --git a/cmds/locksettings/src/com/android/commands/locksettings/LockSettingsCmd.java b/cmds/locksettings/src/com/android/commands/locksettings/LockSettingsCmd.java
deleted file mode 100644
index 7d9260a..0000000
--- a/cmds/locksettings/src/com/android/commands/locksettings/LockSettingsCmd.java
+++ /dev/null
@@ -1,47 +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.commands.locksettings;
-
-import android.os.ResultReceiver;
-import android.os.ServiceManager;
-import android.os.ShellCallback;
-
-import com.android.internal.os.BaseCommand;
-import com.android.internal.widget.ILockSettings;
-
-import java.io.FileDescriptor;
-import java.io.PrintStream;
-
-public final class LockSettingsCmd extends BaseCommand {
-
-    public static void main(String[] args) {
-        (new LockSettingsCmd()).run(args);
-    }
-
-    @Override
-    public void onShowUsage(PrintStream out) {
-        main(new String[] { "help" });
-    }
-
-    @Override
-    public void onRun() throws Exception {
-        ILockSettings lockSettings = ILockSettings.Stub.asInterface(
-                ServiceManager.getService("lock_settings"));
-        lockSettings.asBinder().shellCommand(FileDescriptor.in, FileDescriptor.out,
-                FileDescriptor.err, getRawArgs(), new ShellCallback(), new ResultReceiver(null) {});
-    }
-}
diff --git a/cmds/screencap/screencap.cpp b/cmds/screencap/screencap.cpp
index c18b7ef..ee9c464 100644
--- a/cmds/screencap/screencap.cpp
+++ b/cmds/screencap/screencap.cpp
@@ -206,21 +206,19 @@
     ProcessState::self()->startThreadPool();
 
     sp<SyncScreenCaptureListener> captureListener = new SyncScreenCaptureListener();
-    status_t result = ScreenshotClient::captureDisplay(*displayIdOpt, captureListener);
-    if (result != NO_ERROR) {
-        close(fd);
-        return 1;
-    }
+    ScreenshotClient::captureDisplay(*displayIdOpt, captureListener);
 
     ScreenCaptureResults captureResults = captureListener->waitForResults();
     if (!captureResults.fenceResult.ok()) {
         close(fd);
+        fprintf(stderr, "Failed to take screenshot. Status: %d\n",
+            fenceStatus(captureResults.fenceResult));
         return 1;
     }
     ui::Dataspace dataspace = captureResults.capturedDataspace;
     sp<GraphicBuffer> buffer = captureResults.buffer;
 
-    result = buffer->lock(GraphicBuffer::USAGE_SW_READ_OFTEN, &base);
+    status_t result = buffer->lock(GraphicBuffer::USAGE_SW_READ_OFTEN, &base);
 
     if (base == nullptr || result != NO_ERROR) {
         String8 reason;
diff --git a/cmds/telecom/src/com/android/commands/telecom/Telecom.java b/cmds/telecom/src/com/android/commands/telecom/Telecom.java
index 13c7946..1488e14cf 100644
--- a/cmds/telecom/src/com/android/commands/telecom/Telecom.java
+++ b/cmds/telecom/src/com/android/commands/telecom/Telecom.java
@@ -76,6 +76,8 @@
     private static final String COMMAND_CLEANUP_ORPHAN_PHONE_ACCOUNTS =
             "cleanup-orphan-phone-accounts";
     private static final String COMMAND_RESET_CAR_MODE = "reset-car-mode";
+    private static final String COMMAND_IS_NON_IN_CALL_SERVICE_BOUND =
+            "is-non-ui-in-call-service-bound";
 
     /**
      * Change the system dialer package name if a package name was specified,
@@ -169,6 +171,8 @@
                         + " over Telephony.\n"
                 + "telecom log-mark <MESSAGE>: emits a message into the telecom logs.  Useful for "
                         + "testers to indicate where in the logs various test steps take place.\n"
+                + "telecom is-non-ui-in-call-service-bound <PACKAGE>: queries a particular "
+                + "non-ui-InCallService in InCallController to determine if it is bound \n"
         );
     }
 
@@ -270,6 +274,9 @@
             case COMMAND_GET_MAX_PHONES:
                 runGetMaxPhones();
                 break;
+            case COMMAND_IS_NON_IN_CALL_SERVICE_BOUND:
+                runIsNonUiInCallServiceBound();
+                break;
             case COMMAND_SET_TEST_EMERGENCY_PHONE_ACCOUNT_PACKAGE_FILTER:
                 runSetEmergencyPhoneAccountPackageFilter();
                 break;
@@ -428,6 +435,18 @@
     }
 
     /**
+     * prints out whether a particular non-ui InCallServices is bound in a call
+     */
+    public void runIsNonUiInCallServiceBound() throws RemoteException {
+        if (TextUtils.isEmpty(mArgs.peekNextArg())) {
+            System.out.println("No Argument passed. Please pass a <PACKAGE_NAME> to lookup.");
+        } else {
+            System.out.println(
+                    String.valueOf(mTelecomService.isNonUiInCallServiceBound(nextArg())));
+        }
+    }
+
+    /**
      * Prints the mSIM config to the console.
      * "DSDS" for a phone in DSDS mode
      * "" (empty string) for a phone in SS mode
diff --git a/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java
index 39248730..7489ce3 100644
--- a/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java
+++ b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java
@@ -8,6 +8,7 @@
 import android.app.UiAutomationConnection;
 import android.content.Intent;
 import android.os.HandlerThread;
+import android.os.Looper;
 import android.os.RemoteException;
 
 /**
@@ -26,6 +27,10 @@
             throw new IllegalStateException("Already connected!");
         }
         mHandlerThread.start();
+        // The AccessibilityInteractionClient used by UiAutomation expects the main looper to
+        // be prepared. In most contexts this is normally done automatically, but must be called
+        // explicitly here because this is a shell tool.
+        Looper.prepareMainLooper();
         mUiAutomation = new UiAutomation(mHandlerThread.getLooper(),
                 new UiAutomationConnection());
         mUiAutomation.connect();
diff --git a/cmds/uinput/README.md b/cmds/uinput/README.md
index 47e1dad..bdec8b9 100644
--- a/cmds/uinput/README.md
+++ b/cmds/uinput/README.md
@@ -1,87 +1,99 @@
 # Usage
-##  Two options to use the uinput command:
-### 1. Interactive through stdin:
-type `uinput -` into the terminal, then type/paste commands to send to the binary.
-Use Ctrl+D to signal end of stream to the binary (EOF).
 
-This mode can be also used from an app to send uinput events.
-For an example, see the cts test case at: [InputTestCase.java][2]
+There are two ways to use the `uinput` command:
 
-When using another program to control uinput in interactive mode, registering a
-new input device (for example, a bluetooth joystick) should be the first step.
-After the device is added, you need to wait for the _onInputDeviceAdded_
-(see [InputDeviceListener][1]) notification before issuing commands
-to the device.
-Failure to do so will cause missed events and inconsistent behavior.
+* **Recommended:** `uinput -` reads commands from standard input until End-of-File (Ctrl+D) is sent.
+  This mode can be used interactively from a terminal or used to control uinput from another program
+  or app (such as the CTS tests via [`UinputDevice`][UinputDevice]).
+* `uinput <filename>` reads commands from a file instead of standard input.
 
-### 2. Using a file as an input:
-type `uinput <filename>`, and the file will be used an an input to the binary.
-You must add a sufficient delay after a "register" command to ensure device
-is ready. The interactive mode is the recommended method of communicating
-with the uinput binary.
+[UinputDevice]: https://cs.android.com/android/platform/superproject/main/+/main:cts/libs/input/src/com/android/cts/input/UinputDevice.java
 
-All of the input commands should be in pseudo-JSON format as documented below.
-See examples [here][3].
+## Command format
 
-The file can have multiple commands one after the other (which is not strictly
-legal JSON format, as this would imply multiple root elements).
+Input commands should be in JSON format, though the parser is in [lenient mode] to allow comments,
+and integers can be specified in hexadecimal (e.g. `0xABCD`). The input file (or standard input) can
+contain multiple commands, which will be executed in sequence. Simply add multiple JSON objects to
+the file, one after the other without separators:
 
-## Command description
+```json5
+{
+  "id": 1,
+  "command": "register",
+  // ...
+}
+{
+  "id": 1,
+  "command": "delay",
+  // ...
+}
+```
 
-1. `register`
+Many examples of command files can be found [in the CTS tests][cts-example-jsons].
+
+[lenient mode]: https://developer.android.com/reference/android/util/JsonReader#setLenient(boolean)
+[cts-example-jsons]: https://cs.android.com/android/platform/superproject/main/+/main:cts/tests/tests/hardware/res/raw/
+
+## Command reference
+
+### `register`
+
 Register a new uinput device
 
-| Field         | Type          | Description                |
-|:-------------:|:-------------:|:-------------------------- |
-| id            | integer       | Device id                  |
-| command       | string        | Must be set to "register"  |
-| name          | string        | Device name                |
-| vid           | 16-bit integer| Vendor id                  |
-| pid           | 16-bit integer| Product id                 |
-| bus           | string        | Bus that device should use |
-| configuration | int array     | uinput device configuration|
-| ff_effects_max| integer       | ff_effects_max value       |
-| abs_info      | array         | ABS axes information       |
+| Field            | Type           | Description                |
+|:----------------:|:--------------:|:-------------------------- |
+| `id`             | integer        | Device ID                  |
+| `command`        | string         | Must be set to "register"  |
+| `name`           | string         | Device name                |
+| `vid`            | 16-bit integer | Vendor ID                  |
+| `pid`            | 16-bit integer | Product ID                 |
+| `bus`            | string         | Bus that device should use |
+| `configuration`  | object array   | uinput device configuration|
+| `ff_effects_max` | integer        | `ff_effects_max` value     |
+| `abs_info`       | array          | Absolute axes information  |
 
-Device ID is used for matching the subsequent commands to a specific device
-to avoid ambiguity when multiple devices are registered.
+`id` is used for matching the subsequent commands to a specific device to avoid ambiguity when
+multiple devices are registered.
 
-Device bus is used to determine how the uinput device is connected to the host.
-The options are "usb" and "bluetooth".
+`bus` is used to determine how the uinput device is connected to the host. The options are `"usb"`
+and `"bluetooth"`.
 
-Device configuration is used to configure uinput device.  "type" field provides the UI_SET_*
-control code, and data is a vector of control values to be sent to uinput device, depends on
-the control code.
+Device configuration is used to configure the uinput device. The `type` field provides a `UI_SET_*`
+control code as an integer value or a string label (e.g. `"UI_SET_EVBIT"`), and data is a vector of
+control values to be sent to the uinput device, which depends on the control code.
+
+| Field         |         Type          | Description            |
+|:-------------:|:---------------------:|:-----------------------|
+| `type`        |    integer\|string    | `UI_SET_` control type |
+| `data`        | integer\|string array | control values         |
+
+Due to the sequential nature in which this is parsed, the `type` field must be specified before
+the `data` field in this JSON Object.
+
+`ff_effects_max` must be provided if `UI_SET_FFBIT` is used in `configuration`.
+
+`abs_info` fields are provided to set the device axes information. It is an array of below objects:
+
+| Field         |      Type       | Description             |
+|:-------------:|:---------------:|:------------------------|
+| `code`        | integer\|string | Axis code or label      |
+| `info`        |     object      | Axis information object |
+
+The axis information object is defined as below, with the fields having the same meaning as those
+Linux's [`struct input_absinfo`][struct input_absinfo]:
 
 | Field         | Type          | Description                |
 |:-------------:|:-------------:|:-------------------------- |
-| type          | integer       | UI_SET_ control type       |
-| data          | int array     | control values             |
-
-Device ff_effects_max must be provided if FFBIT is set.
-
-Device abs_info fields are provided to set the device axes information. It is an array of below
-objects:
-| Field         | Type          | Description                |
-|:-------------:|:-------------:|:-------------------------- |
-| code          | integer       | Axis code                  |
-| info          | object        | ABS information object     |
-
-ABS information object is defined as below:
-| Field         | Type          | Description                |
-|:-------------:|:-------------:|:-------------------------- |
-| value         | integer       | Latest reported value      |
-| minimum       | integer       | Minimum value for the axis |
-| maximum       | integer       | Maximum value for the axis |
-| fuzz          | integer       | fuzz value for noise filter|
-| flat          | integer       | values to be discarded     |
-| resolution    | integer       | resolution of axis         |
-
-See [struct input_absinfo][4]) definitions.
+| `value`       | integer       | Latest reported value      |
+| `minimum`     | integer       | Minimum value for the axis |
+| `maximum`     | integer       | Maximum value for the axis |
+| `fuzz`        | integer       | fuzz value for noise filter|
+| `flat`        | integer       | values to be discarded     |
+| `resolution`  | integer       | resolution of axis         |
 
 Example:
-```json
 
+```json5
 {
   "id": 1,
   "command": "register",
@@ -90,33 +102,54 @@
   "pid": 0x2c42,
   "bus": "usb",
   "configuration":[
-        {"type":100, "data":[1, 21]},  // UI_SET_EVBIT : EV_KEY and EV_FF
-        {"type":101, "data":[11, 2, 3, 4]},   // UI_SET_KEYBIT : KEY_0 KEY_1 KEY_2 KEY_3
-        {"type":107, "data":[80]}    //  UI_SET_FFBIT : FF_RUMBLE
+        {"type":"UI_SET_EVBIT", "data":["EV_KEY", "EV_FF"]},
+        {"type":"UI_SET_KEYBIT", "data":["KEY_0", "KEY_1", "KEY_2", "KEY_3"]},
+        {"type":"UI_SET_ABSBIT", "data":["ABS_Y", "ABS_WHEEL"]},
+        {"type":"UI_SET_FFBIT", "data":["FF_RUMBLE"]}
   ],
   "ff_effects_max" : 1,
   "abs_info": [
-        {"code":1, "info": {"value":20, "minimum":-255,
+        {"code":"ABS_Y", "info": {"value":20, "minimum":-255,
                             "maximum":255, "fuzz":0, "flat":0, "resolution":1}
         },
-        {"code":8, "info": {"value":-50, "minimum":-255,
+        {"code":"ABS_WHEEL", "info": {"value":-50, "minimum":-255,
                             "maximum":255, "fuzz":0, "flat":0, "resolution":1}
         }
   ]
 }
-
 ```
-2. `delay`
+
+[struct input_absinfo]: https://cs.android.com/android/platform/superproject/main/+/main:bionic/libc/kernel/uapi/linux/input.h?q=%22struct%20input_absinfo%22
+
+#### Waiting for registration
+
+After the command is sent, there will be a delay before the device is set up by the Android input
+stack, and `uinput` does not wait for that process to finish. Any commands sent to the device during
+that time will be dropped. If you are controlling `uinput` by sending commands through standard
+input from an app, you need to wait for [`onInputDeviceAdded`][onInputDeviceAdded] to be called on
+an `InputDeviceListener` before issuing commands to the device. If you are passing a file to
+`uinput`, add a `delay` after the `register` command to let registration complete.
+
+[onInputDeviceAdded]: https://developer.android.com/reference/android/hardware/input/InputManager.InputDeviceListener.html
+
+#### Unregistering the device
+
+As soon as EOF is reached (either in interactive mode, or in file mode), the device that was created
+will be unregistered. There is no explicit command for unregistering a device.
+
+### `delay`
+
 Add a delay to command processing
 
 | Field         | Type          | Description                |
 |:-------------:|:-------------:|:-------------------------- |
-| id            | integer       | Device id                  |
-| command       | string        | Must be set to "delay"     |
-| duration      | integer       | Delay in milliseconds      |
+| `id`          | integer       | Device ID                  |
+| `command`     | string        | Must be set to "delay"     |
+| `duration`    | integer       | Delay in milliseconds      |
 
 Example:
-```json
+
+```json5
 {
   "id": 1,
   "command": "delay",
@@ -124,43 +157,36 @@
 }
 ```
 
-3. `inject`
-Send an array of uinput event packets [type, code, value] to the uinput device
+### `inject`
 
-| Field         | Type          | Description                |
-|:-------------:|:-------------:|:-------------------------- |
-| id            | integer       | Device id                  |
-| command       | string        | Must be set to "inject"    |
-| events        | integer array | events to inject           |
+Send an array of uinput event packets to the uinput device
 
-The "events" parameter is an array of integers, encapsulates evdev input_event type, code and value,
-see the example below.
+| Field         |         Type          | Description                |
+|:-------------:|:---------------------:|:-------------------------- |
+| `id`          |        integer        | Device ID                  |
+| `command`     |        string         | Must be set to "inject"    |
+| `events`      | integer\|string array | events to inject           |
 
-Example:
-```json
+The `events` parameter is an array of integers in sets of three: a type, an axis code, and an axis
+value, like you'd find in Linux's `struct input_event`. For example, sending presses of the 0 and 1
+keys would look like this:
+
+```json5
 {
   "id": 1,
   "command": "inject",
-  "events": [0x01, 0xb,  0x1,   // EV_KEY, KEY_0, DOWN
-             0x00, 0x00, 0x00,  // EV_SYN, SYN_REPORT, 0
-             0x01, 0x0b, 0x00,  // EV_KEY, KEY_0, UP
-             0x00, 0x00, 0x00,  // EV_SYN, SYN_REPORT, 0
-             0x01, 0x2,  0x1,   // EV_KEY, KEY_1, DOWN
-             0x00, 0x00, 0x01,  // EV_SYN, SYN_REPORT, 0
-             0x01, 0x02, 0x00,  // EV_KEY, KEY_1, UP
-             0x00, 0x00, 0x01   // EV_SYN, SYN_REPORT, 0
+  "events": ["EV_KEY", "KEY_0", 1,
+             "EV_SYN", "SYN_REPORT", 0,
+             "EV_KEY", "KEY_0", 0,
+             "EV_SYN", "SYN_REPORT", 0,
+             "EV_KEY", "KEY_1", 1,
+             "EV_SYN", "SYN_REPORT", 0,
+             "EV_KEY", "KEY_1", 0,
+             "EV_SYN", "SYN_REPORT", 0
             ]
 }
 ```
 
-### Notes
-1. As soon as EOF is reached (either in interactive mode, or in file mode),
-the device that was created will be unregistered. There is no
-explicit command for unregistering a device.
-2. The `getevent` utility can used to print out the key events
-for debugging purposes.
+## Notes
 
-[1]: https://developer.android.com/reference/android/hardware/input/InputManager.InputDeviceListener.html
-[2]: ../../../../cts/tests/tests/hardware/src/android/hardware/input/cts/tests/InputTestCase.java
-[3]: ../../../../cts/tests/tests/hardware/res/raw/
-[4]: ../../../../bionic/libc/kernel/uapi/linux/input.h
+The `getevent` utility can used to print out the key events for debugging purposes.
diff --git a/cmds/uinput/jni/Android.bp b/cmds/uinput/jni/Android.bp
index c56adc3..558bcc5 100644
--- a/cmds/uinput/jni/Android.bp
+++ b/cmds/uinput/jni/Android.bp
@@ -21,6 +21,7 @@
         "libbase",
         "libbinder",
         "liblog",
+        "libinput",
         "libnativehelper",
     ],
 
diff --git a/cmds/uinput/jni/com_android_commands_uinput_Device.cpp b/cmds/uinput/jni/com_android_commands_uinput_Device.cpp
index 3f4163d..7659054 100644
--- a/cmds/uinput/jni/com_android_commands_uinput_Device.cpp
+++ b/cmds/uinput/jni/com_android_commands_uinput_Device.cpp
@@ -16,12 +16,24 @@
 
 #define LOG_TAG "UinputCommandDevice"
 
-#include <linux/uinput.h>
+#include "com_android_commands_uinput_Device.h"
 
+#include <android-base/stringprintf.h>
+#include <android/looper.h>
+#include <android_os_Parcel.h>
 #include <fcntl.h>
+#include <input/InputEventLabels.h>
 #include <inttypes.h>
+#include <jni.h>
+#include <linux/uinput.h>
+#include <log/log.h>
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedLocalRef.h>
+#include <nativehelper/ScopedPrimitiveArray.h>
+#include <nativehelper/ScopedUtfChars.h>
 #include <time.h>
 #include <unistd.h>
+
 #include <algorithm>
 #include <array>
 #include <cstdio>
@@ -30,19 +42,6 @@
 #include <memory>
 #include <vector>
 
-#include <android/looper.h>
-#include <android_os_Parcel.h>
-#include <jni.h>
-#include <log/log.h>
-#include <nativehelper/JNIHelp.h>
-#include <nativehelper/ScopedLocalRef.h>
-#include <nativehelper/ScopedPrimitiveArray.h>
-#include <nativehelper/ScopedUtfChars.h>
-
-#include <android-base/stringprintf.h>
-
-#include "com_android_commands_uinput_Device.h"
-
 namespace android {
 namespace uinput {
 
@@ -307,6 +306,21 @@
     ::ioctl(static_cast<int>(handle), UI_ABS_SETUP, &absSetup);
 }
 
+static jint getEvdevEventTypeByLabel(JNIEnv* env, jclass /* clazz */, jstring rawLabel) {
+    ScopedUtfChars label(env, rawLabel);
+    return InputEventLookup::getLinuxEvdevEventTypeByLabel(label.c_str()).value_or(-1);
+}
+
+static jint getEvdevEventCodeByLabel(JNIEnv* env, jclass /* clazz */, jint type, jstring rawLabel) {
+    ScopedUtfChars label(env, rawLabel);
+    return InputEventLookup::getLinuxEvdevEventCodeByLabel(type, label.c_str()).value_or(-1);
+}
+
+static jint getEvdevInputPropByLabel(JNIEnv* env, jclass /* clazz */, jstring rawLabel) {
+    ScopedUtfChars label(env, rawLabel);
+    return InputEventLookup::getLinuxEvdevInputPropByLabel(label.c_str()).value_or(-1);
+}
+
 static JNINativeMethod sMethods[] = {
         {"nativeOpenUinputDevice",
          "(Ljava/lang/String;IIIIILjava/lang/String;"
@@ -316,6 +330,12 @@
         {"nativeConfigure", "(II[I)V", reinterpret_cast<void*>(configure)},
         {"nativeSetAbsInfo", "(IILandroid/os/Parcel;)V", reinterpret_cast<void*>(setAbsInfo)},
         {"nativeCloseUinputDevice", "(J)V", reinterpret_cast<void*>(closeUinputDevice)},
+        {"nativeGetEvdevEventTypeByLabel", "(Ljava/lang/String;)I",
+         reinterpret_cast<void*>(getEvdevEventTypeByLabel)},
+        {"nativeGetEvdevEventCodeByLabel", "(ILjava/lang/String;)I",
+         reinterpret_cast<void*>(getEvdevEventCodeByLabel)},
+        {"nativeGetEvdevInputPropByLabel", "(Ljava/lang/String;)I",
+         reinterpret_cast<void*>(getEvdevInputPropByLabel)},
 };
 
 int register_com_android_commands_uinput_Device(JNIEnv* env) {
diff --git a/cmds/uinput/src/com/android/commands/uinput/Device.java b/cmds/uinput/src/com/android/commands/uinput/Device.java
index 732b33d..6458eef 100644
--- a/cmds/uinput/src/com/android/commands/uinput/Device.java
+++ b/cmds/uinput/src/com/android/commands/uinput/Device.java
@@ -66,6 +66,9 @@
     private static native void nativeInjectEvent(long ptr, int type, int code, int value);
     private static native void nativeConfigure(int handle, int code, int[] configs);
     private static native void nativeSetAbsInfo(int handle, int axisCode, Parcel axisParcel);
+    private static native int nativeGetEvdevEventTypeByLabel(String label);
+    private static native int nativeGetEvdevEventCodeByLabel(int type, String label);
+    private static native int nativeGetEvdevInputPropByLabel(String label);
 
     public Device(int id, String name, int vid, int pid, int bus,
             SparseArray<int[]> configuration, int ffEffectsMax,
@@ -234,4 +237,32 @@
             msg.sendToTarget();
         }
     }
+
+    static int getEvdevEventTypeByLabel(String label) {
+        final var type = nativeGetEvdevEventTypeByLabel(label);
+        if (type < 0) {
+            throw new IllegalArgumentException(
+                    "Failed to get evdev event type from label: " + label);
+        }
+        return type;
+    }
+
+    static int getEvdevEventCodeByLabel(int type, String label) {
+        final var code = nativeGetEvdevEventCodeByLabel(type, label);
+        if (code < 0) {
+            throw new IllegalArgumentException(
+                    "Failed to get evdev event code for type " + type + " from label: " + label);
+        }
+        return code;
+
+    }
+
+    static int getEvdevInputPropByLabel(String label) {
+        final var prop = nativeGetEvdevInputPropByLabel(label);
+        if (prop < 0) {
+            throw new IllegalArgumentException(
+                    "Failed to get evdev input prop from label: " + label);
+        }
+        return prop;
+    }
 }
diff --git a/cmds/uinput/src/com/android/commands/uinput/Event.java b/cmds/uinput/src/com/android/commands/uinput/Event.java
index 4b090f5..cddb407 100644
--- a/cmds/uinput/src/com/android/commands/uinput/Event.java
+++ b/cmds/uinput/src/com/android/commands/uinput/Event.java
@@ -25,6 +25,9 @@
 import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Function;
 import java.util.stream.IntStream;
 
 import src.com.android.commands.uinput.InputAbsInfo;
@@ -39,7 +42,35 @@
     public static final String COMMAND_REGISTER = "register";
     public static final String COMMAND_DELAY = "delay";
     public static final String COMMAND_INJECT = "inject";
-    private static final int ABS_CNT = 64;
+    private static final int EV_KEY = 0x01;
+    private static final int EV_REL = 0x02;
+    private static final int EV_ABS = 0x03;
+    private static final int EV_MSC = 0x04;
+    private static final int EV_SW = 0x05;
+    private static final int EV_LED = 0x11;
+    private static final int EV_SND = 0x12;
+    private static final int EV_FF = 0x15;
+
+    private enum UinputControlCode {
+        UI_SET_EVBIT("UI_SET_EVBIT", 100),
+        UI_SET_KEYBIT("UI_SET_KEYBIT", 101),
+        UI_SET_RELBIT("UI_SET_RELBIT", 102),
+        UI_SET_ABSBIT("UI_SET_ABSBIT", 103),
+        UI_SET_MSCBIT("UI_SET_MSCBIT", 104),
+        UI_SET_LEDBIT("UI_SET_LEDBIT", 105),
+        UI_SET_SNDBIT("UI_SET_SNDBIT", 106),
+        UI_SET_FFBIT("UI_SET_FFBIT", 107),
+        UI_SET_SWBIT("UI_SET_SWBIT", 109),
+        UI_SET_PROPBIT("UI_SET_PROPBIT", 110);
+
+        final String mName;
+        final int mValue;
+
+        UinputControlCode(String name, int value) {
+            this.mName = name;
+            this.mValue = value;
+        }
+    }
 
     // These constants come from "include/uapi/linux/input.h" in the kernel
     enum Bus {
@@ -257,8 +288,8 @@
                                 eb.setBus(readBus());
                                 break;
                             case "events":
-                                int[] injections = readIntList().stream()
-                                            .mapToInt(Integer::intValue).toArray();
+                                int[] injections = readInjectedEvents().stream()
+                                        .mapToInt(Integer::intValue).toArray();
                                 eb.setInjections(injections);
                                 break;
                             case "configuration":
@@ -293,12 +324,17 @@
             return e;
         }
 
-        private ArrayList<Integer> readIntList() throws IOException {
-            ArrayList<Integer> data = new ArrayList<Integer>();
+        private ArrayList<Integer> readInjectedEvents() throws IOException {
+            ArrayList<Integer> data = new ArrayList<>();
             try {
                 mReader.beginArray();
                 while (mReader.hasNext()) {
-                    data.add(Integer.decode(mReader.nextString()));
+                    // Read events in groups of three, because we expect an event type, event code,
+                    // and event value.
+                    final int type = readEvdevEventType();
+                    data.add(type);
+                    data.add(readEvdevEventCode(type));
+                    data.add(readInt());
                 }
                 mReader.endArray();
             } catch (IllegalStateException | NumberFormatException e) {
@@ -309,22 +345,32 @@
             return data;
         }
 
-        private byte[] readData() throws IOException {
-            ArrayList<Integer> data = readIntList();
-            byte[] rawData = new byte[data.size()];
-            for (int i = 0; i < data.size(); i++) {
-                int d = data.get(i);
-                if ((d & 0xFF) != d) {
-                    throw new IllegalStateException("Invalid data, all values must be byte-sized");
+        private int readValueAsInt(Function<String, Integer> stringToInt) throws IOException {
+            switch (mReader.peek()) {
+                case NUMBER: {
+                    return mReader.nextInt();
                 }
-                rawData[i] = (byte) d;
+                case STRING: {
+                    final var str = mReader.nextString();
+                    try {
+                        // Attempt to first parse the value as an int.
+                        return Integer.decode(str);
+                    } catch (NumberFormatException e) {
+                        // Then fall back to the supplied function.
+                        return stringToInt.apply(str);
+                    }
+                }
+                default: {
+                    throw new IllegalStateException(
+                            "Encountered malformed data. Expected int or string.");
+                }
             }
-            return rawData;
         }
 
         private int readInt() throws IOException {
-            String val = mReader.nextString();
-            return Integer.decode(val);
+            return readValueAsInt((str) -> {
+                throw new IllegalStateException("Encountered malformed data. Expected int.");
+            });
         }
 
         private Bus readBus() throws IOException {
@@ -338,17 +384,20 @@
             try {
                 mReader.beginArray();
                 while (mReader.hasNext()) {
-                    int type = 0;
+                    UinputControlCode controlCode = null;
                     IntStream data = null;
                     mReader.beginObject();
                     while (mReader.hasNext()) {
                         String name = mReader.nextName();
                         switch (name) {
                             case "type":
-                                type = readInt();
+                                controlCode = readUinputControlCode();
                                 break;
                             case "data":
-                                data = readIntList().stream().mapToInt(Integer::intValue);
+                                Objects.requireNonNull(controlCode,
+                                        "Configuration 'type' must be specified before 'data'.");
+                                data = readDataForControlCode(controlCode)
+                                        .stream().mapToInt(Integer::intValue);
                                 break;
                             default:
                                 consumeRemainingElements();
@@ -358,9 +407,9 @@
                         }
                     }
                     mReader.endObject();
-                    if (data != null) {
-                        final int[] existing = configuration.get(type);
-                        configuration.put(type, existing == null ? data.toArray()
+                    if (controlCode != null && data != null) {
+                        final int[] existing = configuration.get(controlCode.mValue);
+                        configuration.put(controlCode.mValue, existing == null ? data.toArray()
                                 : IntStream.concat(IntStream.of(existing), data).toArray());
                     }
                 }
@@ -373,6 +422,60 @@
             return configuration;
         }
 
+        private UinputControlCode readUinputControlCode() throws IOException {
+            var code = readValueAsInt((controlTypeStr) -> {
+                for (UinputControlCode controlCode : UinputControlCode.values()) {
+                    if (controlCode.mName.equals(controlTypeStr)) {
+                        return controlCode.mValue;
+                    }
+                }
+                return -1;
+            });
+            for (UinputControlCode controlCode : UinputControlCode.values()) {
+                if (controlCode.mValue == code) {
+                    return controlCode;
+                }
+            }
+            return null;
+        }
+
+        private List<Integer> readDataForControlCode(
+                UinputControlCode controlCode) throws IOException {
+            return switch (controlCode) {
+                case UI_SET_EVBIT -> readArrayAsInts(this::readEvdevEventType);
+                case UI_SET_KEYBIT -> readArrayAsInts(() -> readEvdevEventCode(EV_KEY));
+                case UI_SET_RELBIT -> readArrayAsInts(() -> readEvdevEventCode(EV_REL));
+                case UI_SET_ABSBIT -> readArrayAsInts(() -> readEvdevEventCode(EV_ABS));
+                case UI_SET_MSCBIT -> readArrayAsInts(() -> readEvdevEventCode(EV_MSC));
+                case UI_SET_LEDBIT -> readArrayAsInts(() -> readEvdevEventCode(EV_LED));
+                case UI_SET_SNDBIT -> readArrayAsInts(() -> readEvdevEventCode(EV_SND));
+                case UI_SET_FFBIT -> readArrayAsInts(() -> readEvdevEventCode(EV_FF));
+                case UI_SET_SWBIT -> readArrayAsInts(() -> readEvdevEventCode(EV_SW));
+                case UI_SET_PROPBIT -> readArrayAsInts(this::readEvdevInputProp);
+            };
+        }
+
+        interface IntValueReader {
+            int readNextValue() throws IOException;
+        }
+
+        private ArrayList<Integer> readArrayAsInts(
+                IntValueReader nextValueReader) throws IOException {
+            ArrayList<Integer> data = new ArrayList<>();
+            try {
+                mReader.beginArray();
+                while (mReader.hasNext()) {
+                    data.add(nextValueReader.readNextValue());
+                }
+                mReader.endArray();
+            } catch (IllegalStateException | NumberFormatException e) {
+                consumeRemainingElements();
+                mReader.endArray();
+                throw new IllegalStateException("Encountered malformed data.", e);
+            }
+            return data;
+        }
+
         private InputAbsInfo readAbsInfo() throws IllegalStateException, IOException {
             InputAbsInfo absInfo = new InputAbsInfo();
             try {
@@ -426,7 +529,7 @@
                         String name = mReader.nextName();
                         switch (name) {
                             case "code":
-                                type = readInt();
+                                type = readEvdevEventCode(EV_ABS);
                                 break;
                             case "info":
                                 absInfo = readAbsInfo();
@@ -452,6 +555,18 @@
             return infoArray;
         }
 
+        private int readEvdevEventType() throws IOException {
+            return readValueAsInt(Device::getEvdevEventTypeByLabel);
+        }
+
+        private int readEvdevEventCode(int type) throws IOException {
+            return readValueAsInt((str) -> Device.getEvdevEventCodeByLabel(type, str));
+        }
+
+        private int readEvdevInputProp() throws IOException {
+            return readValueAsInt(Device::getEvdevInputPropByLabel);
+        }
+
         private void consumeRemainingElements() throws IOException {
             while (mReader.hasNext()) {
                 mReader.skipValue();
diff --git a/config/boot-image-profile.txt b/config/boot-image-profile.txt
index bb07487..b096956 100644
--- a/config/boot-image-profile.txt
+++ b/config/boot-image-profile.txt
@@ -74,7 +74,7 @@
 HSPLandroid/accounts/AccountManager$Future2Task;->internalGetResult(Ljava/lang/Long;Ljava/util/concurrent/TimeUnit;)Ljava/lang/Object;
 HSPLandroid/accounts/AccountManager$Future2Task;->start()Landroid/accounts/AccountManager$Future2Task;
 HSPLandroid/accounts/AccountManager;->-$$Nest$fgetmService(Landroid/accounts/AccountManager;)Landroid/accounts/IAccountManager;
-HSPLandroid/accounts/AccountManager;-><init>(Landroid/content/Context;Landroid/accounts/IAccountManager;)V
+HSPLandroid/accounts/AccountManager;-><init>(Landroid/content/Context;Landroid/accounts/IAccountManager;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLandroid/accounts/AccountManager;->addOnAccountsUpdatedListener(Landroid/accounts/OnAccountsUpdateListener;Landroid/os/Handler;Z)V
 HSPLandroid/accounts/AccountManager;->addOnAccountsUpdatedListener(Landroid/accounts/OnAccountsUpdateListener;Landroid/os/Handler;Z[Ljava/lang/String;)V
 HSPLandroid/accounts/AccountManager;->blockingGetAuthToken(Landroid/accounts/Account;Ljava/lang/String;Z)Ljava/lang/String;
@@ -84,7 +84,7 @@
 HSPLandroid/accounts/AccountManager;->getAccountsAsUser(I)[Landroid/accounts/Account;
 HSPLandroid/accounts/AccountManager;->getAccountsByType(Ljava/lang/String;)[Landroid/accounts/Account;
 HSPLandroid/accounts/AccountManager;->getAccountsByTypeAndFeatures(Ljava/lang/String;[Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;
-HSPLandroid/accounts/AccountManager;->getAccountsByTypeAsUser(Ljava/lang/String;Landroid/os/UserHandle;)[Landroid/accounts/Account;
+HSPLandroid/accounts/AccountManager;->getAccountsByTypeAsUser(Ljava/lang/String;Landroid/os/UserHandle;)[Landroid/accounts/Account;+]Landroid/accounts/IAccountManager;Landroid/accounts/IAccountManager$Stub$Proxy;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;
 HSPLandroid/accounts/AccountManager;->getAccountsByTypeForPackage(Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;
 HSPLandroid/accounts/AccountManager;->getAuthToken(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;ZLandroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;
 HSPLandroid/accounts/AccountManager;->getAuthToken(Landroid/accounts/Account;Ljava/lang/String;ZLandroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;
@@ -102,7 +102,7 @@
 HSPLandroid/accounts/AuthenticatorDescription;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/accounts/IAccountManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/accounts/IAccountManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/accounts/IAccountManager$Stub$Proxy;->getAccountsAsUser(Ljava/lang/String;ILjava/lang/String;)[Landroid/accounts/Account;
+HSPLandroid/accounts/IAccountManager$Stub$Proxy;->getAccountsAsUser(Ljava/lang/String;ILjava/lang/String;)[Landroid/accounts/Account;+]Landroid/accounts/IAccountManager$Stub$Proxy;Landroid/accounts/IAccountManager$Stub$Proxy;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/accounts/IAccountManager$Stub$Proxy;->getAccountsByFeatures(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/accounts/IAccountManager$Stub$Proxy;->getAccountsByTypeForPackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;
 HSPLandroid/accounts/IAccountManager$Stub$Proxy;->getAuthToken(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Ljava/lang/String;ZZLandroid/os/Bundle;)V
@@ -123,7 +123,7 @@
 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$1;->doFrame(J)V
 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
@@ -131,18 +131,33 @@
 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;->doAnimationFrame(J)V+]Landroid/animation/AnimationHandler$AnimationFrameCallback;Landroid/animation/ObjectAnimator;,Lcom/android/internal/dynamicanimation/animation/SpringAnimation;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/AnimationHandler;->doAnimationFrame(J)V
 HSPLandroid/animation/AnimationHandler;->getAnimationCount()I
 HSPLandroid/animation/AnimationHandler;->getInstance()Landroid/animation/AnimationHandler;
 HSPLandroid/animation/AnimationHandler;->getProvider()Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;
 HSPLandroid/animation/AnimationHandler;->isCallbackDue(Landroid/animation/AnimationHandler$AnimationFrameCallback;J)Z
 HSPLandroid/animation/AnimationHandler;->isPauseBgAnimationsEnabledInSystemProperties()Z
+HSPLandroid/animation/AnimationHandler;->lambda$new$0(J)V
 HSPLandroid/animation/AnimationHandler;->removeCallback(Landroid/animation/AnimationHandler$AnimationFrameCallback;)V
 HSPLandroid/animation/AnimationHandler;->requestAnimatorsEnabled(ZLjava/lang/Object;)V
 HSPLandroid/animation/AnimationHandler;->requestAnimatorsEnabledImpl(ZLjava/lang/Object;)V
 HSPLandroid/animation/AnimationHandler;->resumeAnimators()V
 HSPLandroid/animation/AnimationHandler;->setAnimatorPausingEnabled(Z)V
 HSPLandroid/animation/AnimationHandler;->setProvider(Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;)V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda0;-><init>()V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda0;->call(Ljava/lang/Object;Ljava/lang/Object;Z)V+]Landroid/animation/Animator$AnimatorListener;megamorphic_types
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda1;-><init>()V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda1;->call(Ljava/lang/Object;Ljava/lang/Object;Z)V+]Landroid/animation/Animator$AnimatorListener;missing_types
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda2;-><init>()V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda2;->call(Ljava/lang/Object;Ljava/lang/Object;Z)V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda3;-><init>()V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda4;-><init>()V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda5;-><init>()V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda6;-><init>()V
+HSPLandroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda6;->call(Ljava/lang/Object;Ljava/lang/Object;Z)V
+HSPLandroid/animation/Animator$AnimatorCaller;-><clinit>()V
+HSPLandroid/animation/Animator$AnimatorCaller;->lambda$static$0(Landroid/animation/Animator$AnimatorListener;Landroid/animation/Animator;Z)V+]Landroid/animation/Animator$AnimatorListener;missing_types
+HSPLandroid/animation/Animator$AnimatorCaller;->lambda$static$4(Landroid/animation/ValueAnimator$AnimatorUpdateListener;Landroid/animation/ValueAnimator;Z)V+]Landroid/animation/ValueAnimator$AnimatorUpdateListener;missing_types
 HSPLandroid/animation/Animator$AnimatorConstantState;-><init>(Landroid/animation/Animator;)V
 HSPLandroid/animation/Animator$AnimatorConstantState;->getChangingConfigurations()I
 HSPLandroid/animation/Animator$AnimatorConstantState;->newInstance()Landroid/animation/Animator;
@@ -153,12 +168,16 @@
 HSPLandroid/animation/Animator;->addListener(Landroid/animation/Animator$AnimatorListener;)V
 HSPLandroid/animation/Animator;->addPauseListener(Landroid/animation/Animator$AnimatorPauseListener;)V
 HSPLandroid/animation/Animator;->appendChangingConfigurations(I)V
+HSPLandroid/animation/Animator;->callOnList(Ljava/util/ArrayList;Landroid/animation/Animator$AnimatorCaller;Ljava/lang/Object;Z)V+]Landroid/animation/Animator$AnimatorCaller;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 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;->getStartAndEndTimes(Landroid/util/LongArray;J)V
+HSPLandroid/animation/Animator;->notifyEndListeners(Z)V
+HSPLandroid/animation/Animator;->notifyListeners(Landroid/animation/Animator$AnimatorCaller;Z)V+]Landroid/animation/Animator;missing_types
+HSPLandroid/animation/Animator;->notifyStartListeners(Z)V
 HSPLandroid/animation/Animator;->pause()V
 HSPLandroid/animation/Animator;->removeAllListeners()V
 HSPLandroid/animation/Animator;->removeListener(Landroid/animation/Animator$AnimatorListener;)V
@@ -208,14 +227,11 @@
 HSPLandroid/animation/AnimatorSet;-><init>()V
 HSPLandroid/animation/AnimatorSet;->addAnimationCallback(J)V
 HSPLandroid/animation/AnimatorSet;->addAnimationEndListener()V
-HSPLandroid/animation/AnimatorSet;->animateBasedOnPlayTime(JJZZ)V
-HSPLandroid/animation/AnimatorSet;->animateSkipToEnds(JJZ)V+]Landroid/animation/AnimatorSet;Landroid/animation/AnimatorSet;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;
-HSPLandroid/animation/AnimatorSet;->animateValuesInRange(JJZ)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;
 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+]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/ValueAnimator;
-HSPLandroid/animation/AnimatorSet;->doAnimationFrame(J)Z+]Landroid/animation/AnimatorSet$SeekState;Landroid/animation/AnimatorSet$SeekState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/AnimatorSet;->clone()Landroid/animation/AnimatorSet;
+HSPLandroid/animation/AnimatorSet;->createDependencyGraph()V
+HSPLandroid/animation/AnimatorSet;->doAnimationFrame(J)Z
 HSPLandroid/animation/AnimatorSet;->end()V
 HSPLandroid/animation/AnimatorSet;->endAnimation()V
 HSPLandroid/animation/AnimatorSet;->ensureChildStartAndEndTimes()[J
@@ -235,8 +251,6 @@
 HSPLandroid/animation/AnimatorSet;->isInitialized()Z
 HSPLandroid/animation/AnimatorSet;->isRunning()Z
 HSPLandroid/animation/AnimatorSet;->isStarted()Z
-HSPLandroid/animation/AnimatorSet;->notifyEndListeners(Z)V
-HSPLandroid/animation/AnimatorSet;->notifyStartListeners(Z)V
 HSPLandroid/animation/AnimatorSet;->play(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
 HSPLandroid/animation/AnimatorSet;->playSequentially([Landroid/animation/Animator;)V
 HSPLandroid/animation/AnimatorSet;->playTogether(Ljava/util/Collection;)V
@@ -265,7 +279,7 @@
 HSPLandroid/animation/FloatKeyframeSet;-><init>([Landroid/animation/Keyframe$FloatKeyframe;)V
 HSPLandroid/animation/FloatKeyframeSet;->clone()Landroid/animation/FloatKeyframeSet;
 HSPLandroid/animation/FloatKeyframeSet;->clone()Landroid/animation/Keyframes;
-HSPLandroid/animation/FloatKeyframeSet;->getFloatValue(F)F+]Ljava/lang/Number;Ljava/lang/Float;]Ljava/util/List;Ljava/util/Arrays$ArrayList;]Landroid/animation/Keyframe;Landroid/animation/Keyframe$FloatKeyframe;]Landroid/animation/Keyframe$FloatKeyframe;Landroid/animation/Keyframe$FloatKeyframe;
+HSPLandroid/animation/FloatKeyframeSet;->getFloatValue(F)F
 HSPLandroid/animation/FloatKeyframeSet;->getValue(F)Ljava/lang/Object;
 HSPLandroid/animation/IntKeyframeSet;-><init>([Landroid/animation/Keyframe$IntKeyframe;)V
 HSPLandroid/animation/IntKeyframeSet;->clone()Landroid/animation/IntKeyframeSet;
@@ -343,7 +357,7 @@
 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;
+HSPLandroid/animation/ObjectAnimator;->animateValue(F)V
 HSPLandroid/animation/ObjectAnimator;->clone()Landroid/animation/Animator;
 HSPLandroid/animation/ObjectAnimator;->clone()Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/ObjectAnimator;->getNameForTrace()Ljava/lang/String;
@@ -385,7 +399,7 @@
 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
 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;
@@ -403,6 +417,7 @@
 HSPLandroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;->setupSetter(Ljava/lang/Class;)V
 HSPLandroid/animation/PropertyValuesHolder$PropertyValues;-><init>()V
 HSPLandroid/animation/PropertyValuesHolder;-><init>(Landroid/util/Property;)V
+HSPLandroid/animation/PropertyValuesHolder;-><init>(Landroid/util/Property;Landroid/animation/PropertyValuesHolder-IA;)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
@@ -458,16 +473,14 @@
 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;->animateSkipToEnds(JJZ)V
-HSPLandroid/animation/ValueAnimator;->animateValue(F)V+]Landroid/animation/ValueAnimator$AnimatorUpdateListener;Landroid/view/InsetsController$InternalAnimationControlListener$$ExternalSyntheticLambda0;,Landroid/graphics/drawable/RippleDrawable$$ExternalSyntheticLambda0;,Landroid/view/ViewPropertyAnimator$AnimatorEventListener;]Landroid/animation/TimeInterpolator;missing_types]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLandroid/animation/ValueAnimator;->animateValuesInRange(JJZ)V
+HSPLandroid/animation/ValueAnimator;->animateBasedOnTime(J)Z
+HSPLandroid/animation/ValueAnimator;->animateValue(F)V
 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;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;
-HSPLandroid/animation/ValueAnimator;->doAnimationFrame(J)Z+]Landroid/animation/ValueAnimator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;
+HSPLandroid/animation/ValueAnimator;->clone()Landroid/animation/ValueAnimator;
+HSPLandroid/animation/ValueAnimator;->doAnimationFrame(J)Z
 HSPLandroid/animation/ValueAnimator;->end()V
 HSPLandroid/animation/ValueAnimator;->endAnimation()V
 HSPLandroid/animation/ValueAnimator;->getAnimatedFraction()F
@@ -492,8 +505,6 @@
 HSPLandroid/animation/ValueAnimator;->isPulsingInternal()Z
 HSPLandroid/animation/ValueAnimator;->isRunning()Z
 HSPLandroid/animation/ValueAnimator;->isStarted()Z
-HSPLandroid/animation/ValueAnimator;->notifyEndListeners(Z)V
-HSPLandroid/animation/ValueAnimator;->notifyStartListeners(Z)V
 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;
@@ -692,6 +703,9 @@
 HSPLandroid/app/ActivityClient;->setActivityClientController(Landroid/app/IActivityClientController;)Landroid/app/IActivityClientController;
 HSPLandroid/app/ActivityClient;->setRequestedOrientation(Landroid/os/IBinder;I)V
 HSPLandroid/app/ActivityClient;->setTaskDescription(Landroid/os/IBinder;Landroid/app/ActivityManager$TaskDescription;)V
+HSPLandroid/app/ActivityManager$1;-><init>(Landroid/app/ActivityManager;)V
+HSPLandroid/app/ActivityManager$3;->create()Landroid/app/IActivityManager;
+HSPLandroid/app/ActivityManager$3;->create()Ljava/lang/Object;
 HSPLandroid/app/ActivityManager$AppTask;->getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo;
 HSPLandroid/app/ActivityManager$MemoryInfo;-><init>()V
 HSPLandroid/app/ActivityManager$MemoryInfo;->readFromParcel(Landroid/os/Parcel;)V
@@ -722,7 +736,6 @@
 HSPLandroid/app/ActivityManager$TaskDescription;-><init>()V
 HSPLandroid/app/ActivityManager$TaskDescription;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/ActivityManager$TaskDescription;-><init>(Ljava/lang/String;Landroid/graphics/Bitmap;I)V
-HSPLandroid/app/ActivityManager$TaskDescription;-><init>(Ljava/lang/String;Landroid/graphics/drawable/Icon;IIIIZZIIII)V
 HSPLandroid/app/ActivityManager$TaskDescription;->copyFromPreserveHiddenFields(Landroid/app/ActivityManager$TaskDescription;)V
 HSPLandroid/app/ActivityManager$TaskDescription;->getBackgroundColor()I
 HSPLandroid/app/ActivityManager$TaskDescription;->getIcon()Landroid/graphics/Bitmap;
@@ -740,8 +753,6 @@
 HSPLandroid/app/ActivityManager$TaskDescription;->setPrimaryColor(I)V
 HSPLandroid/app/ActivityManager$TaskDescription;->setStatusBarColor(I)V
 HSPLandroid/app/ActivityManager$TaskDescription;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/app/ActivityManager$UidObserver;->onUidGone(IZ)V
-HSPLandroid/app/ActivityManager$UidObserver;->onUidStateChanged(IIJI)V
 HSPLandroid/app/ActivityManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLandroid/app/ActivityManager;->addOnUidImportanceListener(Landroid/app/ActivityManager$OnUidImportanceListener;I)V
 HSPLandroid/app/ActivityManager;->checkComponentPermission(Ljava/lang/String;IIZ)I
@@ -766,6 +777,7 @@
 HSPLandroid/app/ActivityManager;->isLowMemoryKillReportSupported()Z
 HSPLandroid/app/ActivityManager;->isLowRamDevice()Z
 HSPLandroid/app/ActivityManager;->isLowRamDeviceStatic()Z
+HSPLandroid/app/ActivityManager;->isProcStateCached(I)Z
 HSPLandroid/app/ActivityManager;->isRunningInTestHarness()Z
 HSPLandroid/app/ActivityManager;->isRunningInUserTestHarness()Z
 HSPLandroid/app/ActivityManager;->isStartResultFatalError(I)Z
@@ -794,11 +806,7 @@
 HSPLandroid/app/ActivityTaskManager;->getTasks(IZ)Ljava/util/List;
 HSPLandroid/app/ActivityTaskManager;->getTasks(IZZ)Ljava/util/List;
 HSPLandroid/app/ActivityTaskManager;->supportsMultiWindow(Landroid/content/Context;)Z
-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
 HSPLandroid/app/ActivityThread$3;-><init>(Landroid/app/ActivityThread;)V
@@ -824,7 +832,6 @@
 HSPLandroid/app/ActivityThread$ApplicationThread$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;-><init>(Landroid/app/ActivityThread;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;-><init>(Landroid/app/ActivityThread;Landroid/app/ActivityThread$ApplicationThread-IA;)V
-HSPLandroid/app/ActivityThread$ApplicationThread;->bindApplication(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Ljava/lang/String;Landroid/content/pm/ProviderInfoList;Landroid/content/ComponentName;Landroid/app/ProfilerInfo;Landroid/os/Bundle;Landroid/app/IInstrumentationWatcher;Landroid/app/IUiAutomationConnection;IZZZZLandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/util/Map;Landroid/os/Bundle;Ljava/lang/String;Landroid/content/AutofillOptions;Landroid/content/ContentCaptureOptions;[JLandroid/os/SharedMemory;JJ)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->clearDnsCache()V
 HSPLandroid/app/ActivityThread$ApplicationThread;->dispatchPackageBroadcast(I[Ljava/lang/String;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->dumpCacheInfo(Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)V
@@ -840,15 +847,16 @@
 HSPLandroid/app/ActivityThread$ApplicationThread;->notifyContentProviderPublishStatus(Landroid/app/ContentProviderHolder;Ljava/lang/String;IZ)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->requestAssistContextExtras(Landroid/os/IBinder;Landroid/os/IBinder;III)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleApplicationInfoChanged(Landroid/content/pm/ApplicationInfo;)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleBindService(Landroid/os/IBinder;Landroid/content/Intent;ZIJ)V+]Landroid/app/ActivityThread;Landroid/app/ActivityThread;
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleCreateBackupAgent(Landroid/content/pm/ApplicationInfo;III)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleCreateService(Landroid/os/IBinder;Landroid/content/pm/ServiceInfo;Landroid/content/res/CompatibilityInfo;I)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleDestroyBackupAgent(Landroid/content/pm/ApplicationInfo;I)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleEnterAnimationComplete(Landroid/os/IBinder;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleInstallProvider(Landroid/content/pm/ProviderInfo;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleLowMemory()V
-HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleReceiver(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Landroid/content/res/CompatibilityInfo;ILjava/lang/String;Landroid/os/Bundle;ZZIIILjava/lang/String;)V+]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/app/ActivityThread$ApplicationThread;Landroid/app/ActivityThread$ApplicationThread;
-HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleReceiverList(Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/app/ActivityThread$ApplicationThread;Landroid/app/ActivityThread$ApplicationThread;
-HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleRegisteredReceiver(Landroid/content/IIntentReceiver;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIIILjava/lang/String;)V+]Landroid/content/IIntentReceiver;missing_types]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;
+HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleReceiver(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Landroid/content/res/CompatibilityInfo;ILjava/lang/String;Landroid/os/Bundle;ZZIIILjava/lang/String;)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleReceiverList(Ljava/util/List;)V
+HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleRegisteredReceiver(Landroid/content/IIntentReceiver;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIIILjava/lang/String;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleServiceArgs(Landroid/os/IBinder;Landroid/content/pm/ParceledListSlice;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleStopService(Landroid/os/IBinder;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->scheduleTransaction(Landroid/app/servertransaction/ClientTransaction;)V
@@ -860,7 +868,7 @@
 HSPLandroid/app/ActivityThread$ApplicationThread;->unstableProviderDied(Landroid/os/IBinder;)V
 HSPLandroid/app/ActivityThread$ApplicationThread;->updateCompatOverrideScale(Landroid/content/res/CompatibilityInfo;)V
 HSPLandroid/app/ActivityThread$BindServiceData;-><init>()V
-HSPLandroid/app/ActivityThread$BindServiceData;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/app/ActivityThread$BindServiceData;->toString()Ljava/lang/String;
 HSPLandroid/app/ActivityThread$ContextCleanupInfo;-><init>()V
 HSPLandroid/app/ActivityThread$CreateBackupAgentData;-><init>()V
 HSPLandroid/app/ActivityThread$CreateServiceData;-><init>()V
@@ -874,7 +882,6 @@
 HSPLandroid/app/ActivityThread$Idler;-><init>(Landroid/app/ActivityThread;Landroid/app/ActivityThread$Idler-IA;)V
 HSPLandroid/app/ActivityThread$Idler;->queueIdle()Z
 HSPLandroid/app/ActivityThread$Profiler;-><init>()V
-HSPLandroid/app/ActivityThread$ProviderClientRecord;-><init>(Landroid/app/ActivityThread;[Ljava/lang/String;Landroid/content/IContentProvider;Landroid/content/ContentProvider;Landroid/app/ContentProviderHolder;)V
 HSPLandroid/app/ActivityThread$ProviderKey;-><init>(Ljava/lang/String;I)V
 HSPLandroid/app/ActivityThread$ProviderKey;->equals(Ljava/lang/Object;)Z
 HSPLandroid/app/ActivityThread$ProviderKey;->hashCode()I
@@ -886,6 +893,7 @@
 HSPLandroid/app/ActivityThread$ServiceArgsData;-><init>()V
 HSPLandroid/app/ActivityThread$ServiceArgsData;->toString()Ljava/lang/String;
 HSPLandroid/app/ActivityThread;->-$$Nest$fgetmTransactionExecutor(Landroid/app/ActivityThread;)Landroid/app/servertransaction/TransactionExecutor;
+HSPLandroid/app/ActivityThread;->-$$Nest$mgetGetProviderKey(Landroid/app/ActivityThread;Ljava/lang/String;I)Landroid/app/ActivityThread$ProviderKey;
 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
 HSPLandroid/app/ActivityThread;->-$$Nest$mhandleCreateBackupAgent(Landroid/app/ActivityThread;Landroid/app/ActivityThread$CreateBackupAgentData;)V
@@ -905,7 +913,7 @@
 HSPLandroid/app/ActivityThread;->-$$Nest$mpurgePendingResources(Landroid/app/ActivityThread;)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/ContentProvider$Transport;,Landroid/content/ContentProviderProxy;]Landroid/os/IBinder;Landroid/content/ContentProvider$Transport;,Landroid/os/BinderProxy;
+HSPLandroid/app/ActivityThread;->acquireExistingProvider(Landroid/content/Context;Ljava/lang/String;IZ)Landroid/content/IContentProvider;
 HSPLandroid/app/ActivityThread;->acquireProvider(Landroid/content/Context;Ljava/lang/String;IZ)Landroid/content/IContentProvider;
 HSPLandroid/app/ActivityThread;->attach(ZJ)V
 HSPLandroid/app/ActivityThread;->callActivityOnSaveInstanceState(Landroid/app/ActivityThread$ActivityClientRecord;)V
@@ -918,7 +926,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;
@@ -960,7 +968,7 @@
 HSPLandroid/app/ActivityThread;->handleActivityConfigurationChanged(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/content/res/Configuration;IZ)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;->handleBindService(Landroid/app/ActivityThread$BindServiceData;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/app/ActivityThread;->handleConfigurationChanged(Landroid/content/res/Configuration;I)V
 HSPLandroid/app/ActivityThread;->handleCreateBackupAgent(Landroid/app/ActivityThread$CreateBackupAgentData;)V
 HSPLandroid/app/ActivityThread;->handleCreateService(Landroid/app/ActivityThread$CreateServiceData;)V
@@ -981,7 +989,7 @@
 HSPLandroid/app/ActivityThread;->handleRelaunchActivity(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/app/servertransaction/PendingTransactionActions;)V
 HSPLandroid/app/ActivityThread;->handleRelaunchActivityInner(Landroid/app/ActivityThread$ActivityClientRecord;ILjava/util/List;Ljava/util/List;Landroid/app/servertransaction/PendingTransactionActions;ZLandroid/content/res/Configuration;Ljava/lang/String;)V
 HSPLandroid/app/ActivityThread;->handleRequestAssistContextExtras(Landroid/app/ActivityThread$RequestAssistContextExtras;)V
-HSPLandroid/app/ActivityThread;->handleResumeActivity(Landroid/app/ActivityThread$ActivityClientRecord;ZZZLjava/lang/String;)V+]Landroid/view/ViewManager;Landroid/view/WindowManagerImpl;]Landroid/view/View;Lcom/android/internal/policy/DecorView;]Landroid/view/Window;Lcom/android/internal/policy/PhoneWindow;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;]Ljava/util/Map;Ljava/util/Collections$SynchronizedMap;
+HSPLandroid/app/ActivityThread;->handleResumeActivity(Landroid/app/ActivityThread$ActivityClientRecord;ZZZLjava/lang/String;)V
 HSPLandroid/app/ActivityThread;->handleSendResult(Landroid/app/ActivityThread$ActivityClientRecord;Ljava/util/List;Ljava/lang/String;)V
 HSPLandroid/app/ActivityThread;->handleServiceArgs(Landroid/app/ActivityThread$ServiceArgsData;)V
 HSPLandroid/app/ActivityThread;->handleSetContentCaptureOptionsCallback(Ljava/lang/String;)V
@@ -994,7 +1002,7 @@
 HSPLandroid/app/ActivityThread;->handleUnbindService(Landroid/app/ActivityThread$BindServiceData;)V
 HSPLandroid/app/ActivityThread;->handleUnstableProviderDied(Landroid/os/IBinder;Z)V
 HSPLandroid/app/ActivityThread;->handleUnstableProviderDiedLocked(Landroid/os/IBinder;Z)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;->initZipPathValidatorCallback()V
 HSPLandroid/app/ActivityThread;->initializeMainlineModules()V
 HSPLandroid/app/ActivityThread;->installContentProviders(Landroid/content/Context;Ljava/util/List;)V
@@ -1008,7 +1016,6 @@
 HSPLandroid/app/ActivityThread;->isProtectedComponent(Landroid/content/pm/ComponentInfo;Ljava/lang/String;)Z
 HSPLandroid/app/ActivityThread;->isProtectedComponent(Landroid/content/pm/ServiceInfo;)Z
 HSPLandroid/app/ActivityThread;->isSystem()Z
-HSPLandroid/app/ActivityThread;->lambda$attach$2(Landroid/content/res/Configuration;)V
 HSPLandroid/app/ActivityThread;->main([Ljava/lang/String;)V
 HSPLandroid/app/ActivityThread;->onCoreSettingsChange()V
 HSPLandroid/app/ActivityThread;->peekPackageInfo(Ljava/lang/String;Z)Landroid/app/LoadedApk;
@@ -1024,7 +1031,7 @@
 HSPLandroid/app/ActivityThread;->printRow(Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/Object;)V
 HSPLandroid/app/ActivityThread;->purgePendingResources()V
 HSPLandroid/app/ActivityThread;->relaunchAllActivities(ZLjava/lang/String;)V
-HSPLandroid/app/ActivityThread;->releaseProvider(Landroid/content/IContentProvider;Z)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/IContentProvider;Landroid/content/ContentProvider$Transport;
+HSPLandroid/app/ActivityThread;->releaseProvider(Landroid/content/IContentProvider;Z)Z
 HSPLandroid/app/ActivityThread;->reportSizeConfigurations(Landroid/app/ActivityThread$ActivityClientRecord;)V
 HSPLandroid/app/ActivityThread;->reportStop(Landroid/app/servertransaction/PendingTransactionActions;)V
 HSPLandroid/app/ActivityThread;->reportTopResumedActivityChanged(Landroid/app/ActivityThread$ActivityClientRecord;ZLjava/lang/String;)V
@@ -1147,7 +1154,7 @@
 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;
+HSPLandroid/app/AppOpsManager;->pauseNotedAppOpsCollection()Landroid/app/AppOpsManager$PausedNotedAppOpsCollection;
 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
@@ -1163,7 +1170,7 @@
 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;->toReceiverId(Ljava/lang/Object;)Ljava/lang/String;
+HSPLandroid/app/AppOpsManager;->toReceiverId(Ljava/lang/Object;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/app/AppOpsManager;->unsafeCheckOp(Ljava/lang/String;ILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->unsafeCheckOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->unsafeCheckOpRaw(Ljava/lang/String;ILjava/lang/String;)I
@@ -1234,7 +1241,7 @@
 HSPLandroid/app/ApplicationLoaders$CachedClassLoader;-><init>(Landroid/app/ApplicationLoaders$CachedClassLoader-IA;)V
 HSPLandroid/app/ApplicationLoaders;->addNative(Ljava/lang/ClassLoader;Ljava/util/Collection;)V
 HSPLandroid/app/ApplicationLoaders;->createAndCacheNonBootclasspathSystemClassLoader(Landroid/content/pm/SharedLibraryInfo;)V
-HSPLandroid/app/ApplicationLoaders;->createAndCacheNonBootclasspathSystemClassLoaders([Landroid/content/pm/SharedLibraryInfo;)V
+HSPLandroid/app/ApplicationLoaders;->createAndCacheNonBootclasspathSystemClassLoaders(Ljava/util/List;)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;
@@ -1326,6 +1333,7 @@
 HSPLandroid/app/ApplicationPackageManager;->hasSystemFeature(Ljava/lang/String;)Z
 HSPLandroid/app/ApplicationPackageManager;->hasSystemFeature(Ljava/lang/String;I)Z
 HSPLandroid/app/ApplicationPackageManager;->hasUserBadge(I)Z
+HSPLandroid/app/ApplicationPackageManager;->isDeviceUpgrading()Z
 HSPLandroid/app/ApplicationPackageManager;->isInstantApp()Z
 HSPLandroid/app/ApplicationPackageManager;->isInstantApp(Ljava/lang/String;)Z
 HSPLandroid/app/ApplicationPackageManager;->isPackageSuspended(Ljava/lang/String;)Z
@@ -1341,10 +1349,10 @@
 HSPLandroid/app/ApplicationPackageManager;->queryBroadcastReceivers(Landroid/content/Intent;Landroid/content/pm/PackageManager$ResolveInfoFlags;)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryBroadcastReceiversAsUser(Landroid/content/Intent;II)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryBroadcastReceiversAsUser(Landroid/content/Intent;Landroid/content/pm/PackageManager$ResolveInfoFlags;I)Ljava/util/List;
-HSPLandroid/app/ApplicationPackageManager;->queryIntentActivities(Landroid/content/Intent;I)Ljava/util/List;
+HSPLandroid/app/ApplicationPackageManager;->queryIntentActivities(Landroid/content/Intent;I)Ljava/util/List;+]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->queryIntentActivities(Landroid/content/Intent;Landroid/content/pm/PackageManager$ResolveInfoFlags;)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryIntentActivitiesAsUser(Landroid/content/Intent;II)Ljava/util/List;
-HSPLandroid/app/ApplicationPackageManager;->queryIntentActivitiesAsUser(Landroid/content/Intent;Landroid/content/pm/PackageManager$ResolveInfoFlags;I)Ljava/util/List;
+HSPLandroid/app/ApplicationPackageManager;->queryIntentActivitiesAsUser(Landroid/content/Intent;Landroid/content/pm/PackageManager$ResolveInfoFlags;I)Ljava/util/List;+]Landroid/content/pm/IPackageManager;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager$ResolveInfoFlags;Landroid/content/pm/PackageManager$ResolveInfoFlags;]Landroid/content/pm/ParceledListSlice;Landroid/content/pm/ParceledListSlice;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/app/ApplicationPackageManager;->queryIntentContentProviders(Landroid/content/Intent;I)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryIntentContentProviders(Landroid/content/Intent;Landroid/content/pm/PackageManager$ResolveInfoFlags;)Ljava/util/List;
 HSPLandroid/app/ApplicationPackageManager;->queryIntentContentProvidersAsUser(Landroid/content/Intent;II)Ljava/util/List;
@@ -1397,10 +1405,13 @@
 HSPLandroid/app/BroadcastOptions;-><init>()V
 HSPLandroid/app/BroadcastOptions;->isTemporaryAppAllowlistSet()Z
 HSPLandroid/app/BroadcastOptions;->makeBasic()Landroid/app/BroadcastOptions;
+HSPLandroid/app/BroadcastOptions;->resetTemporaryAppAllowlist()V
 HSPLandroid/app/BroadcastOptions;->setTemporaryAppWhitelistDuration(J)V
 HSPLandroid/app/BroadcastOptions;->toBundle()Landroid/os/Bundle;
 HSPLandroid/app/ClientTransactionHandler;-><init>()V
 HSPLandroid/app/ClientTransactionHandler;->scheduleTransaction(Landroid/app/servertransaction/ClientTransaction;)V
+HSPLandroid/app/ComponentOptions;-><init>()V
+HSPLandroid/app/ComponentOptions;->toBundle()Landroid/os/Bundle;+]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLandroid/app/ConfigurationController;-><init>(Landroid/app/ActivityThreadInternal;)V
 HSPLandroid/app/ConfigurationController;->applyCompatConfiguration()Landroid/content/res/Configuration;
 HSPLandroid/app/ConfigurationController;->createNewConfigAndUpdateIfNotNull(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)Landroid/content/res/Configuration;
@@ -1436,9 +1447,9 @@
 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;JLjava/lang/String;Landroid/os/Handler;Ljava/util/concurrent/Executor;Landroid/os/UserHandle;)Z+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;
+HSPLandroid/app/ContextImpl;->bindServiceCommon(Landroid/content/Intent;Landroid/content/ServiceConnection;JLjava/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;->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
@@ -1485,7 +1496,7 @@
 HSPLandroid/app/ContextImpl;->fileList()[Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->finalize()V
 HSPLandroid/app/ContextImpl;->getActivityToken()Landroid/os/IBinder;
-HSPLandroid/app/ContextImpl;->getApplicationContext()Landroid/content/Context;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;
+HSPLandroid/app/ContextImpl;->getApplicationContext()Landroid/content/Context;
 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
@@ -1500,7 +1511,7 @@
 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;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Ljava/io/File;Ljava/io/File;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
+HSPLandroid/app/ContextImpl;->getDataDir()Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getDatabasePath(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getDatabasesDir()Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getDeviceId()I
@@ -1512,7 +1523,7 @@
 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;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
+HSPLandroid/app/ContextImpl;->getExternalFilesDirs(Ljava/lang/String;)[Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getExternalMediaDirs()[Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getFileStreamPath(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getFilesDir()Ljava/io/File;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
@@ -1525,21 +1536,21 @@
 HSPLandroid/app/ContextImpl;->getOuterContext()Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->getPackageCodePath()Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->getPackageManager()Landroid/content/pm/PackageManager;
-HSPLandroid/app/ContextImpl;->getPackageName()Ljava/lang/String;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;
+HSPLandroid/app/ContextImpl;->getPackageName()Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->getPackageResourcePath()Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->getPreferencesDir()Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getReceiverRestrictedContext()Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->getResources()Landroid/content/res/Resources;
-HSPLandroid/app/ContextImpl;->getSharedPreferences(Ljava/io/File;I)Landroid/content/SharedPreferences;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
+HSPLandroid/app/ContextImpl;->getSharedPreferences(Ljava/io/File;I)Landroid/content/SharedPreferences;
 HSPLandroid/app/ContextImpl;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;
-HSPLandroid/app/ContextImpl;->getSharedPreferencesCacheLocked()Landroid/util/ArrayMap;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
+HSPLandroid/app/ContextImpl;->getSharedPreferencesCacheLocked()Landroid/util/ArrayMap;
 HSPLandroid/app/ContextImpl;->getSharedPreferencesPath(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
 HSPLandroid/app/ContextImpl;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->getTheme()Landroid/content/res/Resources$Theme;
 HSPLandroid/app/ContextImpl;->getThemeResId()I
 HSPLandroid/app/ContextImpl;->getUser()Landroid/os/UserHandle;
-HSPLandroid/app/ContextImpl;->getUserId()I+]Landroid/os/UserHandle;Landroid/os/UserHandle;
+HSPLandroid/app/ContextImpl;->getUserId()I
 HSPLandroid/app/ContextImpl;->getWindowContextToken()Landroid/os/IBinder;
 HSPLandroid/app/ContextImpl;->grantUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V
 HSPLandroid/app/ContextImpl;->initializeTheme()V
@@ -1563,7 +1574,7 @@
 HSPLandroid/app/ContextImpl;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;I)Landroid/content/Intent;
 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/ActivityThread;Landroid/app/ActivityThread;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/content/Intent;Landroid/content/Intent;
 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
@@ -1859,10 +1870,10 @@
 HSPLandroid/app/IActivityManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->attachApplication(Landroid/app/IApplicationThread;J)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->backupAgentCreated(Ljava/lang/String;Landroid/os/IBinder;I)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->bindServiceInstance(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;JLjava/lang/String;Ljava/lang/String;I)I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/IActivityManager$Stub$Proxy;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->bindServiceInstance(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;JLjava/lang/String;Ljava/lang/String;I)I
 HSPLandroid/app/IActivityManager$Stub$Proxy;->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
 HSPLandroid/app/IActivityManager$Stub$Proxy;->cancelIntentSender(Landroid/content/IIntentSender;)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->checkPermission(Ljava/lang/String;II)I
+HSPLandroid/app/IActivityManager$Stub$Proxy;->checkPermission(Ljava/lang/String;II)I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/IActivityManager$Stub$Proxy;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->checkUriPermission(Landroid/net/Uri;IIIILandroid/os/IBinder;)I
 HSPLandroid/app/IActivityManager$Stub$Proxy;->finishAttachApplication(J)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V
@@ -1884,10 +1895,10 @@
 HSPLandroid/app/IActivityManager$Stub$Proxy;->isIntentSenderAnActivity(Landroid/content/IIntentSender;)Z
 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;->publishService(Landroid/os/IBinder;Landroid/content/Intent;Landroid/os/IBinder;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/IActivityManager$Stub$Proxy;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 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;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/IActivityManager$Stub$Proxy;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/app/IActivityManager$Stub$Proxy;->registerStrictModeCallback(Landroid/os/IBinder;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/IActivityManager$Stub$Proxy;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->registerStrictModeCallback(Landroid/os/IBinder;)V
 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
@@ -1899,7 +1910,7 @@
 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
 HSPLandroid/app/IActivityManager$Stub$Proxy;->unbindService(Landroid/app/IServiceConnection;)Z
-HSPLandroid/app/IActivityManager$Stub$Proxy;->unregisterReceiver(Landroid/content/IIntentReceiver;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->unregisterReceiver(Landroid/content/IIntentReceiver;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/IActivityManager$Stub$Proxy;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->unstableProviderDied(Landroid/os/IBinder;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->waitForNetworkStateUpdate(J)V
 HSPLandroid/app/IActivityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IActivityManager;
@@ -1950,7 +1961,7 @@
 HSPLandroid/app/INotificationManager$Stub$Proxy;->areNotificationsEnabled(Ljava/lang/String;)Z
 HSPLandroid/app/INotificationManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 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/app/INotificationManager$Stub$Proxy;Landroid/app/INotificationManager$Stub$Proxy;]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
@@ -1985,6 +1996,7 @@
 HSPLandroid/app/IUiModeManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IUiModeManager;
 HSPLandroid/app/IUiModeManagerCallback$Stub;-><init>()V
 HSPLandroid/app/IUiModeManagerCallback$Stub;->asBinder()Landroid/os/IBinder;
+HSPLandroid/app/IUidFrozenStateChangedCallback$Stub;-><init>()V
 HSPLandroid/app/IUidObserver$Stub;-><init>()V
 HSPLandroid/app/IUidObserver$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/app/IUidObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
@@ -2056,15 +2068,15 @@
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher$Args;)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->$r8$lambda$gDuJqgxY6Zb-ifyeubKeivTLAwk(Landroid/app/LoadedApk$ReceiverDispatcher$Args;)V
-HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIILjava/lang/String;)V+]Landroid/content/Intent;Landroid/content/Intent;]Landroid/app/IApplicationThread;Landroid/app/ActivityThread$ApplicationThread;
+HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIILjava/lang/String;)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->getRunnable()Ljava/lang/Runnable;
-HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->lambda$getRunnable$0()V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/app/LoadedApk$ReceiverDispatcher$Args;Landroid/app/LoadedApk$ReceiverDispatcher$Args;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/Context;missing_types]Ljava/lang/Object;missing_types]Landroid/content/BroadcastReceiver;missing_types]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLandroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher;Z)V
+HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->lambda$getRunnable$0()V
+HSPLandroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;-><init>(Landroid/app/IApplicationThread;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$InnerReceiver;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIILjava/lang/String;)V+]Landroid/app/LoadedApk$ReceiverDispatcher;Landroid/app/LoadedApk$ReceiverDispatcher;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
+HSPLandroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIILjava/lang/String;)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher;-><init>(Landroid/app/IApplicationThread;Landroid/content/BroadcastReceiver;Landroid/content/Context;Landroid/os/Handler;Landroid/app/Instrumentation;Z)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher;->getIIntentReceiver()Landroid/content/IIntentReceiver;
-HSPLandroid/app/LoadedApk$ReceiverDispatcher;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIILjava/lang/String;)V+]Landroid/os/Handler;missing_types]Landroid/app/LoadedApk$ReceiverDispatcher$Args;Landroid/app/LoadedApk$ReceiverDispatcher$Args;
+HSPLandroid/app/LoadedApk$ReceiverDispatcher;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIILjava/lang/String;)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher;->validate(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher$ConnectionInfo;-><init>()V
 HSPLandroid/app/LoadedApk$ServiceDispatcher$ConnectionInfo;-><init>(Landroid/app/LoadedApk$ServiceDispatcher$ConnectionInfo-IA;)V
@@ -2074,8 +2086,8 @@
 HSPLandroid/app/LoadedApk$ServiceDispatcher$InnerConnection;->connected(Landroid/content/ComponentName;Landroid/os/IBinder;Z)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher$RunConnection;-><init>(Landroid/app/LoadedApk$ServiceDispatcher;Landroid/content/ComponentName;Landroid/os/IBinder;IZ)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher$RunConnection;->run()V
-HSPLandroid/app/LoadedApk$ServiceDispatcher;-><init>(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;J)V+]Landroid/app/ServiceConnectionLeaked;Landroid/app/ServiceConnectionLeaked;
-HSPLandroid/app/LoadedApk$ServiceDispatcher;-><init>(Landroid/content/ServiceConnection;Landroid/content/Context;Ljava/util/concurrent/Executor;J)V+]Landroid/app/ServiceConnectionLeaked;Landroid/app/ServiceConnectionLeaked;
+HSPLandroid/app/LoadedApk$ServiceDispatcher;-><init>(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;J)V
+HSPLandroid/app/LoadedApk$ServiceDispatcher;-><init>(Landroid/content/ServiceConnection;Landroid/content/Context;Ljava/util/concurrent/Executor;J)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher;->connected(Landroid/content/ComponentName;Landroid/os/IBinder;Z)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher;->death(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 HSPLandroid/app/LoadedApk$ServiceDispatcher;->doConnected(Landroid/content/ComponentName;Landroid/os/IBinder;Z)V
@@ -2109,7 +2121,7 @@
 HSPLandroid/app/LoadedApk;->createOrUpdateClassLoaderLocked(Ljava/util/List;)V
 HSPLandroid/app/LoadedApk;->createSharedLibrariesLoaders(Ljava/util/List;ZLjava/lang/String;Ljava/lang/String;)Landroid/util/Pair;
 HSPLandroid/app/LoadedApk;->createSharedLibraryLoader(Landroid/content/pm/SharedLibraryInfo;ZLjava/lang/String;Ljava/lang/String;)Ljava/lang/ClassLoader;
-HSPLandroid/app/LoadedApk;->forgetReceiverDispatcher(Landroid/content/Context;Landroid/content/BroadcastReceiver;)Landroid/content/IIntentReceiver;
+HSPLandroid/app/LoadedApk;->forgetReceiverDispatcher(Landroid/content/Context;Landroid/content/BroadcastReceiver;)Landroid/content/IIntentReceiver;+]Landroid/app/LoadedApk$ReceiverDispatcher;Landroid/app/LoadedApk$ReceiverDispatcher;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/app/LoadedApk;->forgetServiceDispatcher(Landroid/content/Context;Landroid/content/ServiceConnection;)Landroid/app/IServiceConnection;
 HSPLandroid/app/LoadedApk;->getAppDir()Ljava/lang/String;
 HSPLandroid/app/LoadedApk;->getAppFactory()Landroid/app/AppComponentFactory;
@@ -2129,7 +2141,7 @@
 HSPLandroid/app/LoadedApk;->getResources()Landroid/content/res/Resources;
 HSPLandroid/app/LoadedApk;->getServiceDispatcher(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;J)Landroid/app/IServiceConnection;
 HSPLandroid/app/LoadedApk;->getServiceDispatcher(Landroid/content/ServiceConnection;Landroid/content/Context;Ljava/util/concurrent/Executor;J)Landroid/app/IServiceConnection;
-HSPLandroid/app/LoadedApk;->getServiceDispatcherCommon(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;Ljava/util/concurrent/Executor;J)Landroid/app/IServiceConnection;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/LoadedApk$ServiceDispatcher;Landroid/app/LoadedApk$ServiceDispatcher;
+HSPLandroid/app/LoadedApk;->getServiceDispatcherCommon(Landroid/content/ServiceConnection;Landroid/content/Context;Landroid/os/Handler;Ljava/util/concurrent/Executor;J)Landroid/app/IServiceConnection;
 HSPLandroid/app/LoadedApk;->getSplitClassLoader(Ljava/lang/String;)Ljava/lang/ClassLoader;
 HSPLandroid/app/LoadedApk;->getSplitPaths(Ljava/lang/String;)[Ljava/lang/String;
 HSPLandroid/app/LoadedApk;->getSplitResDirs()[Ljava/lang/String;
@@ -2193,7 +2205,6 @@
 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;->getStyle()Landroid/app/Notification$Style;
 HSPLandroid/app/Notification$Builder;->maybeCloneStrippedForDelivery(Landroid/app/Notification;)Landroid/app/Notification;
 HSPLandroid/app/Notification$Builder;->recoverBuilder(Landroid/content/Context;Landroid/app/Notification;)Landroid/app/Notification$Builder;
@@ -2313,7 +2324,7 @@
 HSPLandroid/app/Notification;->isGroupChild()Z
 HSPLandroid/app/Notification;->isGroupSummary()Z
 HSPLandroid/app/Notification;->isMediaNotification()Z
-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/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/Notification;->readFromParcelImpl(Landroid/os/Parcel;)V
 HSPLandroid/app/Notification;->reduceImageSizes(Landroid/content/Context;)V
 HSPLandroid/app/Notification;->reduceImageSizesForRemoteView(Landroid/widget/RemoteViews;Landroid/content/Context;Z)V
 HSPLandroid/app/Notification;->removeTextSizeSpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
@@ -2326,7 +2337,7 @@
 HSPLandroid/app/Notification;->writeToParcelImpl(Landroid/os/Parcel;I)V
 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;-><init>(Landroid/os/Parcel;)V
+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;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
 HSPLandroid/app/NotificationChannel;-><init>(Ljava/lang/String;Ljava/lang/CharSequence;I)V
 HSPLandroid/app/NotificationChannel;->canBubble()Z
 HSPLandroid/app/NotificationChannel;->canBypassDnd()Z
@@ -2345,13 +2356,12 @@
 HSPLandroid/app/NotificationChannel;->getName()Ljava/lang/CharSequence;
 HSPLandroid/app/NotificationChannel;->getOriginalImportance()I
 HSPLandroid/app/NotificationChannel;->getSound()Landroid/net/Uri;
-HSPLandroid/app/NotificationChannel;->getTrimmedString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/NotificationChannel;->getTrimmedString(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/app/NotificationChannel;->getUserLockedFields()I
 HSPLandroid/app/NotificationChannel;->getVibrationPattern()[J
 HSPLandroid/app/NotificationChannel;->hasUserSetImportance()Z
 HSPLandroid/app/NotificationChannel;->isBlockable()Z
 HSPLandroid/app/NotificationChannel;->isDeleted()Z
-HSPLandroid/app/NotificationChannel;->isFgServiceShown()Z
 HSPLandroid/app/NotificationChannel;->isImportantConversation()Z
 HSPLandroid/app/NotificationChannel;->setBlockable(Z)V
 HSPLandroid/app/NotificationChannel;->setBypassDnd(Z)V
@@ -2412,8 +2422,6 @@
 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;->zenModeToInterruptionFilter(I)I
-HSPLandroid/app/PendingIntent$$ExternalSyntheticLambda1;-><init>()V
-HSPLandroid/app/PendingIntent$$ExternalSyntheticLambda1;->execute(Ljava/lang/Runnable;)V
 HSPLandroid/app/PendingIntent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/PendingIntent$FinishedDispatcher;-><init>(Landroid/app/PendingIntent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;)V
@@ -2423,7 +2431,7 @@
 HSPLandroid/app/PendingIntent;-><init>(Landroid/os/IBinder;Ljava/lang/Object;)V
 HSPLandroid/app/PendingIntent;->buildServicePendingIntent(Landroid/content/Context;ILandroid/content/Intent;II)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->cancel()V
-HSPLandroid/app/PendingIntent;->checkPendingIntent(ILandroid/content/Intent;Landroid/content/Context;)V
+HSPLandroid/app/PendingIntent;->checkPendingIntent(ILandroid/content/Intent;Landroid/content/Context;Z)V+]Landroid/content/Context;missing_types]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/app/PendingIntent;->equals(Ljava/lang/Object;)Z
 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;
@@ -2440,7 +2448,7 @@
 HSPLandroid/app/PendingIntent;->getService(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->hashCode()I
 HSPLandroid/app/PendingIntent;->isActivity()Z
-HSPLandroid/app/PendingIntent;->isNewMutableDisallowedImplicitPendingIntent(ILandroid/content/Intent;)Z+]Landroid/content/Intent;Landroid/content/Intent;
+HSPLandroid/app/PendingIntent;->isNewMutableDisallowedImplicitPendingIntent(ILandroid/content/Intent;Z)Z+]Landroid/content/Intent;Landroid/content/Intent;
 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
@@ -2471,7 +2479,7 @@
 HSPLandroid/app/PictureInPictureParams$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/PictureInPictureParams;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/PropertyInvalidatedCache$1;-><init>(Landroid/app/PropertyInvalidatedCache;IFZ)V
-HSPLandroid/app/PropertyInvalidatedCache$1;->removeEldestEntry(Ljava/util/Map$Entry;)Z
+HSPLandroid/app/PropertyInvalidatedCache$1;->removeEldestEntry(Ljava/util/Map$Entry;)Z+]Landroid/app/PropertyInvalidatedCache$1;Landroid/app/PropertyInvalidatedCache$1;
 HSPLandroid/app/PropertyInvalidatedCache$DefaultComputer;-><init>(Landroid/app/PropertyInvalidatedCache;)V
 HSPLandroid/app/PropertyInvalidatedCache$NoPreloadHolder;-><clinit>()V
 HSPLandroid/app/PropertyInvalidatedCache$NoPreloadHolder;->next()J
@@ -2492,16 +2500,16 @@
 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+]Landroid/os/SystemProperties$Handle;Landroid/os/SystemProperties$Handle;
+HSPLandroid/app/PropertyInvalidatedCache;->getCurrentNonce()J
 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;+]Ljava/util/LinkedHashMap;Landroid/app/PropertyInvalidatedCache$1;]Landroid/app/PropertyInvalidatedCache;megamorphic_types
+HSPLandroid/app/PropertyInvalidatedCache;->query(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/app/PropertyInvalidatedCache;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/app/PropertyInvalidatedCache;->refresh(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/app/PropertyInvalidatedCache;->registerCache()V
+HSPLandroid/app/PropertyInvalidatedCache;->registerCache()V+]Ljava/util/HashSet;Ljava/util/HashSet;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
 HSPLandroid/app/QueuedWork$QueuedWorkHandler;-><init>(Landroid/os/Looper;)V
 HSPLandroid/app/QueuedWork$QueuedWorkHandler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/app/QueuedWork;->-$$Nest$smprocessPendingWork()V
@@ -2515,7 +2523,7 @@
 HSPLandroid/app/ReceiverInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/ReceiverInfo;
 HSPLandroid/app/ReceiverInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/ReceiverInfo;-><init>()V
-HSPLandroid/app/ReceiverInfo;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/ReceiverInfo;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/app/ReceiverRestrictedContext;-><init>(Landroid/content/Context;)V
 HSPLandroid/app/RemoteAction$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/RemoteAction;
 HSPLandroid/app/RemoteAction$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -2545,7 +2553,7 @@
 HSPLandroid/app/ResourcesManager$ApkAssetsSupplier;->load(Landroid/app/ResourcesManager$ApkKey;)Landroid/content/res/ApkAssets;
 HSPLandroid/app/ResourcesManager$ApkKey;-><init>(Ljava/lang/String;ZZ)V
 HSPLandroid/app/ResourcesManager$ApkKey;->equals(Ljava/lang/Object;)Z
-HSPLandroid/app/ResourcesManager$ApkKey;->hashCode()I
+HSPLandroid/app/ResourcesManager$ApkKey;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/app/ResourcesManager$UpdateHandler;-><init>(Landroid/app/ResourcesManager;)V
 HSPLandroid/app/ResourcesManager$UpdateHandler;-><init>(Landroid/app/ResourcesManager;Landroid/app/ResourcesManager$UpdateHandler-IA;)V
 HSPLandroid/app/ResourcesManager;->-$$Nest$mloadApkAssets(Landroid/app/ResourcesManager;Landroid/app/ResourcesManager$ApkKey;)Landroid/content/res/ApkAssets;
@@ -2570,7 +2578,7 @@
 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;->extractApkKeys(Landroid/content/res/ResourcesKey;)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;
@@ -2643,8 +2651,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;+]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]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
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->commitToMemory()Landroid/app/SharedPreferencesImpl$MemoryCommitResult;+]Ljava/lang/Object;Ljava/lang/String;,Ljava/lang/Integer;,Ljava/lang/Boolean;,Ljava/lang/Long;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/List;Ljava/util/ArrayList;
+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/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;
@@ -2676,7 +2684,7 @@
 HSPLandroid/app/SharedPreferencesImpl;->getAll()Ljava/util/Map;
 HSPLandroid/app/SharedPreferencesImpl;->getBoolean(Ljava/lang/String;Z)Z
 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;+]Ljava/util/Map;Ljava/util/HashMap;
 HSPLandroid/app/SharedPreferencesImpl;->getStringSet(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;
@@ -2687,7 +2695,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;
@@ -2706,6 +2714,7 @@
 HSPLandroid/app/SystemServiceRegistry$105;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 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;)Landroid/app/slice/SliceManager;
 HSPLandroid/app/SystemServiceRegistry$108;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$109;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$10;->createService(Landroid/app/ContextImpl;)Landroid/media/MediaRouter;
@@ -2755,15 +2764,17 @@
 HSPLandroid/app/SystemServiceRegistry$24;->createService(Landroid/app/ContextImpl;)Landroid/os/BatteryManager;
 HSPLandroid/app/SystemServiceRegistry$24;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$25;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$27;->getService(Landroid/app/ContextImpl;)Landroid/hardware/input/InputManager;
-HSPLandroid/app/SystemServiceRegistry$27;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$27;->createService(Landroid/app/ContextImpl;)Landroid/hardware/input/InputManager;
+HSPLandroid/app/SystemServiceRegistry$27;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$28;->createService(Landroid/app/ContextImpl;)Landroid/hardware/display/DisplayManager;
 HSPLandroid/app/SystemServiceRegistry$28;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$29;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$2;->createService(Landroid/app/ContextImpl;)Landroid/view/accessibility/CaptioningManager;
 HSPLandroid/app/SystemServiceRegistry$2;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$30;->getService(Landroid/app/ContextImpl;)Landroid/view/inputmethod/InputMethodManager;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
-HSPLandroid/app/SystemServiceRegistry$30;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;+]Landroid/app/SystemServiceRegistry$30;Landroid/app/SystemServiceRegistry$30;
+HSPLandroid/app/SystemServiceRegistry$30;->getService(Landroid/app/ContextImpl;)Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/app/SystemServiceRegistry$30;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$31;->createService(Landroid/app/ContextImpl;)Landroid/view/textservice/TextServicesManager;
+HSPLandroid/app/SystemServiceRegistry$31;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$32;->createService(Landroid/app/ContextImpl;)Landroid/app/KeyguardManager;
 HSPLandroid/app/SystemServiceRegistry$32;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$33;->createService(Landroid/app/ContextImpl;)Landroid/view/LayoutInflater;
@@ -2784,6 +2795,7 @@
 HSPLandroid/app/SystemServiceRegistry$42;->createService(Landroid/app/ContextImpl;)Landroid/hardware/SensorManager;
 HSPLandroid/app/SystemServiceRegistry$42;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$43;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$44;->createService(Landroid/app/ContextImpl;)Landroid/app/StatusBarManager;
 HSPLandroid/app/SystemServiceRegistry$44;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$45;->createService(Landroid/app/ContextImpl;)Landroid/os/storage/StorageManager;
 HSPLandroid/app/SystemServiceRegistry$45;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
@@ -2821,7 +2833,7 @@
 HSPLandroid/app/SystemServiceRegistry$65;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$66;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$67;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry$68;->createService(Landroid/app/ContextImpl;)Landroid/companion/virtual/VirtualDeviceManager;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLandroid/app/SystemServiceRegistry$68;->createService(Landroid/app/ContextImpl;)Landroid/companion/virtual/VirtualDeviceManager;
 HSPLandroid/app/SystemServiceRegistry$68;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$69;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$71;->createService(Landroid/app/ContextImpl;)Landroid/hardware/fingerprint/FingerprintManager;
@@ -2862,7 +2874,7 @@
 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;+]Landroid/app/SystemServiceRegistry$ServiceFetcher;megamorphic_types]Ljava/util/Map;Landroid/util/ArrayMap;
+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/TaskInfo;-><init>()V
 HSPLandroid/app/TaskInfo;->getWindowingMode()I
@@ -2881,12 +2893,12 @@
 HSPLandroid/app/TaskStackListener;->onTaskRemovalStarted(Landroid/app/ActivityManager$RunningTaskInfo;)V
 HSPLandroid/app/TaskStackListener;->onTaskRemoved(I)V
 HSPLandroid/app/TaskStackListener;->onTaskRequestedOrientationChanged(II)V
-HSPLandroid/app/UiModeManager$1;-><init>(Landroid/app/UiModeManager;)V
 HSPLandroid/app/UiModeManager$OnProjectionStateChangedListenerResourceManager;-><init>()V
 HSPLandroid/app/UiModeManager$OnProjectionStateChangedListenerResourceManager;-><init>(Landroid/app/UiModeManager$OnProjectionStateChangedListenerResourceManager-IA;)V
 HSPLandroid/app/UiModeManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/app/UiModeManager;->getActiveProjectionTypes()I
 HSPLandroid/app/UiModeManager;->getCurrentModeType()I
+HSPLandroid/app/UidObserver;-><init>()V
 HSPLandroid/app/UriGrantsManager$1;->create()Landroid/app/IUriGrantsManager;
 HSPLandroid/app/UriGrantsManager$1;->create()Ljava/lang/Object;
 HSPLandroid/app/UriGrantsManager;->getService()Landroid/app/IUriGrantsManager;
@@ -2908,7 +2920,7 @@
 HSPLandroid/app/WallpaperManager;->setWallpaperZoomOut(Landroid/os/IBinder;F)V
 HSPLandroid/app/WindowConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/WindowConfiguration;
 HSPLandroid/app/WindowConfiguration$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/WindowConfiguration;-><init>()V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
+HSPLandroid/app/WindowConfiguration;-><init>()V
 HSPLandroid/app/WindowConfiguration;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/WindowConfiguration;->activityTypeToString(I)Ljava/lang/String;
 HSPLandroid/app/WindowConfiguration;->canReceiveKeys()Z
@@ -2943,7 +2955,7 @@
 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;->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
@@ -3107,7 +3119,7 @@
 HSPLandroid/app/backup/IBackupCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupCallback;
 HSPLandroid/app/backup/IBackupManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 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/app/backup/IBackupManager$Stub$Proxy;Landroid/app/backup/IBackupManager$Stub$Proxy;]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
@@ -3146,9 +3158,9 @@
 HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->cancel(Ljava/lang/String;I)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/job/IJobScheduler$Stub$Proxy;Landroid/app/job/IJobScheduler$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->enqueue(Ljava/lang/String;Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I
-HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->getAllPendingJobsInNamespace(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/job/IJobScheduler$Stub$Proxy;Landroid/app/job/IJobScheduler$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->getPendingJob(Ljava/lang/String;I)Landroid/app/job/JobInfo;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/job/IJobScheduler$Stub$Proxy;Landroid/app/job/IJobScheduler$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->schedule(Ljava/lang/String;Landroid/app/job/JobInfo;)I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/job/IJobScheduler$Stub$Proxy;Landroid/app/job/IJobScheduler$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->getAllPendingJobsInNamespace(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->getPendingJob(Ljava/lang/String;I)Landroid/app/job/JobInfo;
+HSPLandroid/app/job/IJobScheduler$Stub$Proxy;->schedule(Ljava/lang/String;Landroid/app/job/JobInfo;)I
 HSPLandroid/app/job/IJobScheduler$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobScheduler;
 HSPLandroid/app/job/IJobService$Stub;-><init>()V
 HSPLandroid/app/job/IJobService$Stub;->asBinder()Landroid/os/IBinder;
@@ -3215,7 +3227,7 @@
 HSPLandroid/app/job/JobInfo$TriggerContentUri;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/job/JobInfo;-><init>(Landroid/app/job/JobInfo$Builder;)V+]Landroid/os/PersistableBundle;Landroid/os/PersistableBundle;]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/job/JobInfo;-><init>(Landroid/app/job/JobInfo$Builder;Landroid/app/job/JobInfo-IA;)V
-HSPLandroid/app/job/JobInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/net/NetworkRequest$1;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/job/JobInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/job/JobInfo;->enforceValidity(ZZ)V
 HSPLandroid/app/job/JobInfo;->getExtras()Landroid/os/PersistableBundle;
 HSPLandroid/app/job/JobInfo;->getFlags()I
@@ -3234,7 +3246,7 @@
 HSPLandroid/app/job/JobInfo;->isPersisted()Z
 HSPLandroid/app/job/JobInfo;->isRequireCharging()Z
 HSPLandroid/app/job/JobInfo;->isRequireDeviceIdle()Z
-HSPLandroid/app/job/JobInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/job/JobInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/net/NetworkRequest;Landroid/net/NetworkRequest;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/job/JobParameters$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/job/JobParameters;
 HSPLandroid/app/job/JobParameters$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/job/JobParameters;-><init>(Landroid/os/Parcel;)V
@@ -3244,6 +3256,7 @@
 HSPLandroid/app/job/JobParameters;->getExtras()Landroid/os/PersistableBundle;
 HSPLandroid/app/job/JobParameters;->getJobId()I
 HSPLandroid/app/job/JobParameters;->getNetwork()Landroid/net/Network;
+HSPLandroid/app/job/JobParameters;->getStopReason()I
 HSPLandroid/app/job/JobParameters;->getTransientExtras()Landroid/os/Bundle;
 HSPLandroid/app/job/JobParameters;->getTriggeredContentAuthorities()[Ljava/lang/String;
 HSPLandroid/app/job/JobParameters;->getTriggeredContentUris()[Landroid/net/Uri;
@@ -3256,16 +3269,19 @@
 HSPLandroid/app/job/JobSchedulerFrameworkInitializer;->lambda$registerServiceWrappers$0(Landroid/content/Context;Landroid/os/IBinder;)Landroid/app/job/JobScheduler;
 HSPLandroid/app/job/JobSchedulerFrameworkInitializer;->lambda$registerServiceWrappers$1(Landroid/content/Context;Landroid/os/IBinder;)Landroid/os/DeviceIdleManager;
 HSPLandroid/app/job/JobService$1;-><init>(Landroid/app/job/JobService;Landroid/app/Service;)V
+HSPLandroid/app/job/JobService$1;->onNetworkChanged(Landroid/app/job/JobParameters;)V
 HSPLandroid/app/job/JobService$1;->onStartJob(Landroid/app/job/JobParameters;)Z
 HSPLandroid/app/job/JobService$1;->onStopJob(Landroid/app/job/JobParameters;)Z
 HSPLandroid/app/job/JobService;-><init>()V
 HSPLandroid/app/job/JobService;->jobFinished(Landroid/app/job/JobParameters;Z)V
 HSPLandroid/app/job/JobService;->onBind(Landroid/content/Intent;)Landroid/os/IBinder;
+HSPLandroid/app/job/JobService;->onNetworkChanged(Landroid/app/job/JobParameters;)V
 HSPLandroid/app/job/JobServiceEngine$JobHandler;-><init>(Landroid/app/job/JobServiceEngine;Landroid/os/Looper;)V
 HSPLandroid/app/job/JobServiceEngine$JobHandler;->ackStartMessage(Landroid/app/job/JobParameters;Z)V
 HSPLandroid/app/job/JobServiceEngine$JobHandler;->ackStopMessage(Landroid/app/job/JobParameters;Z)V
 HSPLandroid/app/job/JobServiceEngine$JobHandler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/app/job/JobServiceEngine$JobInterface;-><init>(Landroid/app/job/JobServiceEngine;)V
+HSPLandroid/app/job/JobServiceEngine$JobInterface;->onNetworkChanged(Landroid/app/job/JobParameters;)V
 HSPLandroid/app/job/JobServiceEngine$JobInterface;->startJob(Landroid/app/job/JobParameters;)V
 HSPLandroid/app/job/JobServiceEngine$JobInterface;->stopJob(Landroid/app/job/JobParameters;)V
 HSPLandroid/app/job/JobServiceEngine;-><init>(Landroid/app/Service;)V
@@ -3428,6 +3444,7 @@
 HSPLandroid/app/slice/SliceManager;->bindSlice(Landroid/net/Uri;Ljava/util/Set;)Landroid/app/slice/Slice;
 HSPLandroid/app/slice/SliceManager;->getPinnedSlices()Ljava/util/List;
 HSPLandroid/app/slice/SliceManager;->grantSlicePermission(Ljava/lang/String;Landroid/net/Uri;)V
+HSPLandroid/app/slice/SliceProvider$$ExternalSyntheticLambda0;-><init>(Landroid/app/slice/SliceProvider;)V
 HSPLandroid/app/slice/SliceProvider;-><init>([Ljava/lang/String;)V
 HSPLandroid/app/slice/SliceProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V
 HSPLandroid/app/slice/SliceProvider;->call(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
@@ -3447,6 +3464,7 @@
 HSPLandroid/app/smartspace/SmartspaceConfig;-><clinit>()V
 HSPLandroid/app/smartspace/SmartspaceSessionId$1;-><init>()V
 HSPLandroid/app/smartspace/SmartspaceSessionId;-><clinit>()V
+HSPLandroid/app/smartspace/SmartspaceSessionId;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/smartspace/SmartspaceTarget$1;-><init>()V
 HSPLandroid/app/smartspace/SmartspaceTarget;-><clinit>()V
 HSPLandroid/app/smartspace/SmartspaceTargetEvent$1;-><init>()V
@@ -3504,14 +3522,15 @@
 HSPLandroid/app/usage/UsageEvents;-><init>(Landroid/os/Parcel;)V
 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
-HSPLandroid/app/usage/UsageStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/usage/UsageStats;
+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;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]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;-><init>()V
 HSPLandroid/app/usage/UsageStats;->getPackageName()Ljava/lang/String;
 HSPLandroid/app/usage/UsageStats;->update(Ljava/lang/String;JII)V
 HSPLandroid/app/usage/UsageStatsManager;-><init>(Landroid/content/Context;Landroid/app/usage/IUsageStatsManager;)V
+HSPLandroid/app/usage/UsageStatsManager;->getAppStandbyBucket()I
 HSPLandroid/app/usage/UsageStatsManager;->queryEvents(JJ)Landroid/app/usage/UsageEvents;
 HSPLandroid/app/usage/UsageStatsManager;->queryUsageStats(IJJ)Ljava/util/List;
 HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda0;-><init>()V
@@ -3522,7 +3541,6 @@
 HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
 HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda3;-><init>()V
 HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda3;->apply(I)Ljava/lang/Object;
-HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda4;-><init>(Landroid/appwidget/AppWidgetManager;)V
 HSPLandroid/appwidget/AppWidgetManager$$ExternalSyntheticLambda4;->run()V
 HSPLandroid/appwidget/AppWidgetManager;-><init>(Landroid/content/Context;Lcom/android/internal/appwidget/IAppWidgetService;)V
 HSPLandroid/appwidget/AppWidgetManager;->getAppWidgetIds(Landroid/content/ComponentName;)[I
@@ -3577,6 +3595,7 @@
 HSPLandroid/content/AttributionSource$ScopedParcelState;->close()V
 HSPLandroid/content/AttributionSource$ScopedParcelState;->getParcel()Landroid/os/Parcel;
 HSPLandroid/content/AttributionSource;-><clinit>()V
+HSPLandroid/content/AttributionSource;-><init>(IILjava/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;)V
 HSPLandroid/content/AttributionSource;-><init>(ILjava/lang/String;Ljava/lang/String;Landroid/os/IBinder;)V
 HSPLandroid/content/AttributionSource;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/util/Set;Landroid/content/AttributionSource;)V
@@ -3595,6 +3614,7 @@
 HSPLandroid/content/AttributionSource;->getRenouncedPermissions()Ljava/util/Set;
 HSPLandroid/content/AttributionSource;->getToken()Landroid/os/IBinder;
 HSPLandroid/content/AttributionSource;->getUid()I
+HSPLandroid/content/AttributionSource;->hashCode()I+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;
 HSPLandroid/content/AttributionSource;->myAttributionSource()Landroid/content/AttributionSource;
 HSPLandroid/content/AttributionSource;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/AttributionSourceState$1;-><init>()V
@@ -3604,7 +3624,7 @@
 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+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/AttributionSourceState;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/content/AttributionSourceState;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/AutofillOptions$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/AutofillOptions;
 HSPLandroid/content/AutofillOptions$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -3690,13 +3710,12 @@
 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;->unflattenFromString(Ljava/lang/String;)Landroid/content/ComponentName;
+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/ContentCaptureOptions$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/ContentCaptureOptions;-><init>(IIIIILandroid/util/ArraySet;)V
-HSPLandroid/content/ContentCaptureOptions;-><init>(ZIIIIIZLandroid/util/ArraySet;)V
 HSPLandroid/content/ContentCaptureOptions;->isWhitelisted(Landroid/content/Context;)Z
 HSPLandroid/content/ContentCaptureOptions;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/ContentProvider$Transport;-><init>(Landroid/content/ContentProvider;)V
@@ -3737,7 +3756,7 @@
 HSPLandroid/content/ContentProvider;->getIContentProvider()Landroid/content/IContentProvider;
 HSPLandroid/content/ContentProvider;->getPathPermissions()[Landroid/content/pm/PathPermission;
 HSPLandroid/content/ContentProvider;->getReadPermission()Ljava/lang/String;
-HSPLandroid/content/ContentProvider;->getUriWithoutUserId(Landroid/net/Uri;)Landroid/net/Uri;
+HSPLandroid/content/ContentProvider;->getUriWithoutUserId(Landroid/net/Uri;)Landroid/net/Uri;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
 HSPLandroid/content/ContentProvider;->getUserIdFromAuthority(Ljava/lang/String;I)I
 HSPLandroid/content/ContentProvider;->getUserIdFromUri(Landroid/net/Uri;)I
 HSPLandroid/content/ContentProvider;->getUserIdFromUri(Landroid/net/Uri;I)I
@@ -3758,7 +3777,7 @@
 HSPLandroid/content/ContentProvider;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
 HSPLandroid/content/ContentProvider;->restoreCallingIdentity(Landroid/content/ContentProvider$CallingIdentity;)V
 HSPLandroid/content/ContentProvider;->setAuthorities(Ljava/lang/String;)V
-HSPLandroid/content/ContentProvider;->setCallingAttributionSource(Landroid/content/AttributionSource;)Landroid/content/AttributionSource;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
+HSPLandroid/content/ContentProvider;->setCallingAttributionSource(Landroid/content/AttributionSource;)Landroid/content/AttributionSource;
 HSPLandroid/content/ContentProvider;->setPathPermissions([Landroid/content/pm/PathPermission;)V
 HSPLandroid/content/ContentProvider;->setReadPermission(Ljava/lang/String;)V
 HSPLandroid/content/ContentProvider;->setTransportLoggingEnabled(Z)V
@@ -3822,9 +3841,9 @@
 HSPLandroid/content/ContentProviderProxy;->call(Landroid/content/AttributionSource;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
 HSPLandroid/content/ContentProviderProxy;->createCancellationSignal()Landroid/os/ICancellationSignal;
 HSPLandroid/content/ContentProviderProxy;->delete(Landroid/content/AttributionSource;Landroid/net/Uri;Landroid/os/Bundle;)I
-HSPLandroid/content/ContentProviderProxy;->insert(Landroid/content/AttributionSource;Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;
+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;
+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/os/ICancellationSignal;Landroid/os/ICancellationSignal$Stub$Proxy;]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;
 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;
@@ -3848,7 +3867,7 @@
 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;->acquireProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;+]Ljava/lang/String;Ljava/lang/String;]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;
@@ -3872,10 +3891,10 @@
 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;->getType(Landroid/net/Uri;)Ljava/lang/String;+]Ljava/lang/String;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
 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;
+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
@@ -3916,25 +3935,25 @@
 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;->equals(Ljava/lang/Object;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+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;
-HSPLandroid/content/ContentValues;->getAsLong(Ljava/lang/String;)Ljava/lang/Long;
+HSPLandroid/content/ContentValues;->getAsLong(Ljava/lang/String;)Ljava/lang/Long;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Number;Ljava/lang/Long;
 HSPLandroid/content/ContentValues;->getAsString(Ljava/lang/String;)Ljava/lang/String;
 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;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/content/ContentValues;->keySet()Ljava/util/Set;
 HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Boolean;)V
 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
-HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Long;)V
-HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Integer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Long;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 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
@@ -3943,7 +3962,7 @@
 HSPLandroid/content/ContentValues;->size()I
 HSPLandroid/content/ContentValues;->toString()Ljava/lang/String;
 HSPLandroid/content/ContentValues;->valueSet()Ljava/util/Set;
-HSPLandroid/content/ContentValues;->writeToParcel(Landroid/os/Parcel;I)V
+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;->getColorStateList(I)Landroid/content/res/ColorStateList;
@@ -3957,8 +3976,8 @@
 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;+]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(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;->registerComponentCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/content/Context;->unregisterComponentCallbacks(Landroid/content/ComponentCallbacks;)V
@@ -4013,7 +4032,7 @@
 HSPLandroid/content/ContextWrapper;->getAttributionSource()Landroid/content/AttributionSource;
 HSPLandroid/content/ContextWrapper;->getAttributionTag()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getAutofillClient()Landroid/view/autofill/AutofillManager$AutofillClient;
-HSPLandroid/content/ContextWrapper;->getAutofillOptions()Landroid/content/AutofillOptions;+]Landroid/content/Context;missing_types
+HSPLandroid/content/ContextWrapper;->getAutofillOptions()Landroid/content/AutofillOptions;
 HSPLandroid/content/ContextWrapper;->getBaseContext()Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->getBasePackageName()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getCacheDir()Ljava/io/File;
@@ -4042,14 +4061,14 @@
 HSPLandroid/content/ContextWrapper;->getOpPackageName()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getPackageCodePath()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getPackageManager()Landroid/content/pm/PackageManager;
-HSPLandroid/content/ContextWrapper;->getPackageName()Ljava/lang/String;+]Landroid/content/Context;missing_types
+HSPLandroid/content/ContextWrapper;->getPackageName()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getPackageResourcePath()Ljava/lang/String;
-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;Landroid/app/ContextImpl;
+HSPLandroid/content/ContextWrapper;->getResources()Landroid/content/res/Resources;
+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;+]Landroid/content/Context;missing_types
-HSPLandroid/content/ContextWrapper;->getTheme()Landroid/content/res/Resources$Theme;+]Landroid/content/Context;missing_types
+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;->getUserId()I
 HSPLandroid/content/ContextWrapper;->getWindowContextToken()Landroid/os/IBinder;
@@ -4139,7 +4158,7 @@
 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;Landroid/net/Uri;)V
+HSPLandroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;)V+]Landroid/content/Intent;Landroid/content/Intent;
 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;
 HSPLandroid/content/Intent;->addFlags(I)Landroid/content/Intent;
@@ -4184,7 +4203,7 @@
 HSPLandroid/content/Intent;->migrateExtraStreamToClipData(Landroid/content/Context;)Z
 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;
+HSPLandroid/content/Intent;->parseUriInternal(Ljava/lang/String;I)Landroid/content/Intent;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/content/Intent;->prepareToEnterProcess(ILandroid/content/AttributionSource;)V
 HSPLandroid/content/Intent;->prepareToEnterProcess(ZLandroid/content/AttributionSource;)V
 HSPLandroid/content/Intent;->prepareToLeaveProcess(Landroid/content/Context;)V
@@ -4234,10 +4253,11 @@
 HSPLandroid/content/Intent;->setType(Ljava/lang/String;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->toShortString(Ljava/lang/StringBuilder;ZZZZ)V
 HSPLandroid/content/Intent;->toString()Ljava/lang/String;
+HSPLandroid/content/Intent;->toString(Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Intent;Landroid/content/Intent;
 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
 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;
@@ -4283,7 +4303,7 @@
 HSPLandroid/content/IntentFilter;->hasCategory(Ljava/lang/String;)Z
 HSPLandroid/content/IntentFilter;->isImplicitlyVisibleToInstantApp()Z
 HSPLandroid/content/IntentFilter;->isVisibleToInstantApp()Z
-HSPLandroid/content/IntentFilter;->lambda$addDataType$0(Ljava/lang/String;Ljava/lang/Boolean;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/content/IntentFilter;->lambda$addDataType$0(Ljava/lang/String;Ljava/lang/Boolean;)V
 HSPLandroid/content/IntentFilter;->match(Landroid/content/ContentResolver;Landroid/content/Intent;ZLjava/lang/String;)I
 HSPLandroid/content/IntentFilter;->match(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Ljava/util/Set;Ljava/lang/String;)I
 HSPLandroid/content/IntentFilter;->match(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Ljava/util/Set;Ljava/lang/String;ZLjava/util/Collection;Landroid/os/Bundle;)I
@@ -4301,7 +4321,7 @@
 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+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/IntentFilter;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/PatternMatcher;Landroid/os/PatternMatcher;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/IntentFilter$AuthorityEntry;Landroid/content/IntentFilter$AuthorityEntry;]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;
@@ -4405,7 +4425,7 @@
 HSPLandroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/pm/ApplicationInfo;-><init>()V
 HSPLandroid/content/pm/ApplicationInfo;-><init>(Landroid/content/pm/ApplicationInfo;)V
-HSPLandroid/content/pm/ApplicationInfo;-><init>(Landroid/os/Parcel;)V+]Lcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;Lcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;Lcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/util/Set;Ljava/util/Collections$EmptySet;
+HSPLandroid/content/pm/ApplicationInfo;-><init>(Landroid/os/Parcel;)V+]Lcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;Lcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;Lcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/ApplicationInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ApplicationInfo-IA;)V
 HSPLandroid/content/pm/ApplicationInfo;->getAllApkPaths()[Ljava/lang/String;
 HSPLandroid/content/pm/ApplicationInfo;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
@@ -4452,7 +4472,7 @@
 HSPLandroid/content/pm/BaseParceledListSlice;->readCreator(Landroid/os/Parcelable$Creator;Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;
 HSPLandroid/content/pm/BaseParceledListSlice;->readVerifyAndAddElement(Landroid/os/Parcelable$Creator;Landroid/os/Parcel;Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Class;
 HSPLandroid/content/pm/BaseParceledListSlice;->verifySameType(Ljava/lang/Class;Ljava/lang/Class;)V
-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/content/pm/ShortcutInfo;,Landroid/view/contentcapture/ContentCaptureEvent;,Landroid/app/NotificationChannelGroup;]Ljava/util/List;Ljava/util/Arrays$ArrayList;,Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/pm/BaseParceledListSlice;->writeToParcel(Landroid/os/Parcel;I)V
 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
@@ -4492,8 +4512,6 @@
 HSPLandroid/content/pm/IOnChecksumsReadyListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/content/pm/IPackageInstaller$Stub$Proxy;->getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;
 HSPLandroid/content/pm/IPackageInstallerCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy$$ExternalSyntheticLambda0;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I
@@ -4505,7 +4523,7 @@
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getInstalledApplications(JI)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getInstalledPackages(JI)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getNameForUid(I)Ljava/lang/String;
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getNameForUid(I)Ljava/lang/String;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/content/pm/IPackageManager$Stub$Proxy;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getPackageInfo(Ljava/lang/String;JI)Landroid/content/pm/PackageInfo;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getPackageInstaller()Landroid/content/pm/IPackageInstaller;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getPackageUid(Ljava/lang/String;JI)I
@@ -4517,22 +4535,22 @@
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getSystemAvailableFeatures()Landroid/content/pm/ParceledListSlice;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->getSystemSharedLibraryNames()[Ljava/lang/String;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->hasSystemFeature(Ljava/lang/String;I)Z
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isDeviceUpgrading()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;->lambda$notifyDexLoad$0(Landroid/os/Parcel;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isProtectedBroadcast(Ljava/lang/String;)Z+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/content/pm/IPackageManager$Stub$Proxy;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 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
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->notifyPackagesReplacedReceived([Ljava/lang/String;)V
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/content/pm/IPackageManager$Stub$Proxy;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentContentProviders(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentReceivers(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentServices(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->queryIntentServices(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/content/pm/IPackageManager$Stub$Proxy;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->requestPackageChecksums(Ljava/lang/String;ZIILjava/util/List;Landroid/content/pm/IOnChecksumsReadyListener;I)V
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->resolveContentProvider(Ljava/lang/String;JI)Landroid/content/pm/ProviderInfo;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ResolveInfo;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->resolveService(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ResolveInfo;
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->setComponentEnabledSetting(Landroid/content/ComponentName;III)V
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->resolveService(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ResolveInfo;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/content/pm/IPackageManager$Stub$Proxy;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->setComponentEnabledSetting(Landroid/content/ComponentName;IIILjava/lang/String;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/content/pm/IPackageManager$Stub$Proxy;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/IPackageManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageManager;
 HSPLandroid/content/pm/IPackageManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/content/pm/IShortcutService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
@@ -4600,7 +4618,7 @@
 HSPLandroid/content/pm/PackageInstaller;->registerSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;Landroid/os/Handler;)V
 HSPLandroid/content/pm/PackageItemInfo;-><init>()V
 HSPLandroid/content/pm/PackageItemInfo;-><init>(Landroid/content/pm/PackageItemInfo;)V
-HSPLandroid/content/pm/PackageItemInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/text/TextUtils$1;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/pm/PackageItemInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/pm/PackageItemInfo;->forceSafeLabels()V
 HSPLandroid/content/pm/PackageItemInfo;->loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/pm/PackageItemInfo;->loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
@@ -4648,7 +4666,7 @@
 HSPLandroid/content/pm/PackageParser$Activity$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/pm/PackageParser$Activity;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/pm/PackageParser$ActivityIntentInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/pm/PackageParser$ApkLite;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;ZIIIILjava/util/List;Landroid/content/pm/PackageParser$SigningDetails;ZZZZZZZZLjava/lang/String;ZIIII)V
+HSPLandroid/content/pm/PackageParser$ApkLite;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;ZIIIILjava/util/List;Landroid/content/pm/PackageParser$SigningDetails;ZZZZZZZZLjava/lang/String;ZIIII)V+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/content/pm/PackageParser$Component;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/pm/PackageParser$Component;->createIntentsList(Landroid/os/Parcel;)Ljava/util/ArrayList;
 HSPLandroid/content/pm/PackageParser$Component;->getComponentName()Landroid/content/ComponentName;
@@ -4703,7 +4721,7 @@
 HSPLandroid/content/pm/PackageParser;->setOnlyCoreApps(Z)V
 HSPLandroid/content/pm/PackageParser;->setSeparateProcesses([Ljava/lang/String;)V
 HSPLandroid/content/pm/PackageParser;->toSigningKeys([Landroid/content/pm/Signature;)Landroid/util/ArraySet;
-HSPLandroid/content/pm/PackageParser;->validateName(Ljava/lang/String;ZZ)Ljava/lang/String;
+HSPLandroid/content/pm/PackageParser;->validateName(Ljava/lang/String;ZZ)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/content/pm/PackageParserCacheHelper$ReadHelper;->readString(Landroid/os/Parcel;)Ljava/lang/String;
 HSPLandroid/content/pm/PackageStats;-><init>(Ljava/lang/String;)V
 HSPLandroid/content/pm/ParceledListSlice$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ParceledListSlice;
@@ -4772,7 +4790,7 @@
 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;
-HSPLandroid/content/pm/SharedLibraryInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/pm/SharedLibraryInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/pm/SharedLibraryInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/SharedLibraryInfo-IA;)V
 HSPLandroid/content/pm/SharedLibraryInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;JILandroid/content/pm/VersionedPackage;Ljava/util/List;Ljava/util/List;Z)V
 HSPLandroid/content/pm/SharedLibraryInfo;->addDependency(Landroid/content/pm/SharedLibraryInfo;)V
@@ -4860,7 +4878,8 @@
 HSPLandroid/content/pm/Signature;->toCharsString()Ljava/lang/String;
 HSPLandroid/content/pm/SigningDetails$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/SigningDetails;
 HSPLandroid/content/pm/SigningDetails$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/SigningDetails;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/SigningDetails;-><init>(Landroid/os/Parcel;)V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/pm/SigningDetails;->getPastSigningCertificates()[Landroid/content/pm/Signature;
 HSPLandroid/content/pm/SigningDetails;->getSignatures()[Landroid/content/pm/Signature;
 HSPLandroid/content/pm/SigningInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/SigningInfo;
 HSPLandroid/content/pm/SigningInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -4891,6 +4910,7 @@
 HSPLandroid/content/pm/UserPackage;->equals(Ljava/lang/Object;)Z
 HSPLandroid/content/pm/UserPackage;->hashCode()I
 HSPLandroid/content/pm/UserPackage;->of(ILjava/lang/String;)Landroid/content/pm/UserPackage;
+HSPLandroid/content/pm/UserProperties;->isCredentialShareableWithParent()Z
 HSPLandroid/content/pm/UserProperties;->isPresent(J)Z
 HSPLandroid/content/pm/VersionedPackage$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/VersionedPackage;
 HSPLandroid/content/pm/VersionedPackage$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -4912,7 +4932,7 @@
 HSPLandroid/content/pm/parsing/result/ParseTypeImpl;->success(Ljava/lang/Object;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/permission/SplitPermissionInfoParcelable;
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;-><init>(Ljava/lang/String;Ljava/util/List;I)V
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;->getNewPermissions()Ljava/util/List;
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;->getSplitPermission()Ljava/lang/String;
@@ -4928,7 +4948,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;+]Landroid/content/res/StringBlock;Landroid/content/res/StringBlock;
+HSPLandroid/content/res/ApkAssets;->getStringFromPool(I)Ljava/lang/CharSequence;
 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;
@@ -4936,15 +4956,7 @@
 HSPLandroid/content/res/ApkAssets;->openXml(Ljava/lang/String;)Landroid/content/res/XmlResourceParser;
 HSPLandroid/content/res/AssetFileDescriptor$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/res/AssetFileDescriptor$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream$OffsetCorrectFileChannel;-><init>(Landroid/content/res/AssetFileDescriptor$AutoCloseInputStream;Ljava/nio/channels/FileChannel;)V
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream$OffsetCorrectFileChannel;->map(Ljava/nio/channels/FileChannel$MapMode;JJ)Ljava/nio/MappedByteBuffer;
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream$OffsetCorrectFileChannel;->position(J)Ljava/nio/channels/FileChannel;+]Ljava/nio/channels/FileChannel;Lsun/nio/ch/FileChannelImpl;
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream;->-$$Nest$fgetmFileOffset(Landroid/content/res/AssetFileDescriptor$AutoCloseInputStream;)J
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream;->-$$Nest$fgetmTotalSize(Landroid/content/res/AssetFileDescriptor$AutoCloseInputStream;)J
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream;->-$$Nest$fputmOffset(Landroid/content/res/AssetFileDescriptor$AutoCloseInputStream;J)V
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream;->getChannel()Ljava/nio/channels/FileChannel;
 HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream;->read([BII)I
-HSPLandroid/content/res/AssetFileDescriptor$AutoCloseInputStream;->updateChannelPosition(J)V
 HSPLandroid/content/res/AssetFileDescriptor;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/res/AssetFileDescriptor;-><init>(Landroid/os/ParcelFileDescriptor;JJ)V
 HSPLandroid/content/res/AssetFileDescriptor;-><init>(Landroid/os/ParcelFileDescriptor;JJLandroid/os/Bundle;)V
@@ -4971,7 +4983,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
@@ -5004,7 +5016,7 @@
 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;+]Landroid/content/res/ApkAssets;Landroid/content/res/ApkAssets;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
+HSPLandroid/content/res/AssetManager;->getPooledStringForCookie(II)Ljava/lang/CharSequence;
 HSPLandroid/content/res/AssetManager;->getResourceArray(I[I)I
 HSPLandroid/content/res/AssetManager;->getResourceArraySize(I)I
 HSPLandroid/content/res/AssetManager;->getResourceBagText(II)Ljava/lang/CharSequence;
@@ -5020,9 +5032,9 @@
 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;
+HSPLandroid/content/res/AssetManager;->getThemeValue(JILandroid/util/TypedValue;Z)Z
 HSPLandroid/content/res/AssetManager;->incRefsLocked(J)V
-HSPLandroid/content/res/AssetManager;->isUpToDate()Z
+HSPLandroid/content/res/AssetManager;->isUpToDate()Z+]Landroid/content/res/ApkAssets;Landroid/content/res/ApkAssets;
 HSPLandroid/content/res/AssetManager;->list(Ljava/lang/String;)[Ljava/lang/String;
 HSPLandroid/content/res/AssetManager;->open(Ljava/lang/String;)Ljava/io/InputStream;
 HSPLandroid/content/res/AssetManager;->open(Ljava/lang/String;I)Ljava/io/InputStream;
@@ -5046,7 +5058,7 @@
 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;+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;
+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;-><init>()V
 HSPLandroid/content/res/ColorStateList;-><init>(Landroid/content/res/ColorStateList;)V
@@ -5064,7 +5076,7 @@
 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/ComplexColor;
 HSPLandroid/content/res/ColorStateList;->onColorsChanged()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;->valueOf(I)Landroid/content/res/ColorStateList;
 HSPLandroid/content/res/ColorStateList;->writeToParcel(Landroid/os/Parcel;I)V
 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;
@@ -5094,25 +5106,25 @@
 HSPLandroid/content/res/Configuration;-><init>(Landroid/content/res/Configuration;)V
 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+]Ljava/util/Locale;Ljava/util/Locale;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/os/LocaleList;Landroid/os/LocaleList;
+HSPLandroid/content/res/Configuration;->compareTo(Landroid/content/res/Configuration;)I+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/os/LocaleList;Landroid/os/LocaleList;]Ljava/lang/String;Ljava/lang/String;]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;->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;->fixUpLocaleList()V+]Ljava/util/Locale;Ljava/util/Locale;]Landroid/os/LocaleList;Landroid/os/LocaleList;
+HSPLandroid/content/res/Configuration;->fixUpLocaleList()V
 HSPLandroid/content/res/Configuration;->generateDelta(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)Landroid/content/res/Configuration;
 HSPLandroid/content/res/Configuration;->getGrammaticalGender()I
 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
 HSPLandroid/content/res/Configuration;->isScreenWideColorGamut()Z
 HSPLandroid/content/res/Configuration;->needNewResources(II)Z
-HSPLandroid/content/res/Configuration;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/LocaleList;Landroid/os/LocaleList;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/res/Configuration;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/content/res/Configuration;->readFromProto(Landroid/util/proto/ProtoInputStream;J)V
 HSPLandroid/content/res/Configuration;->reduceScreenLayout(III)I
 HSPLandroid/content/res/Configuration;->resetScreenLayout(I)I
@@ -5124,14 +5136,15 @@
 HSPLandroid/content/res/Configuration;->setToDefaults()V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLandroid/content/res/Configuration;->toString()Ljava/lang/String;
 HSPLandroid/content/res/Configuration;->unset()V
-HSPLandroid/content/res/Configuration;->updateFrom(Landroid/content/res/Configuration;)I
+HSPLandroid/content/res/Configuration;->updateFrom(Landroid/content/res/Configuration;)I+]Ljava/util/Locale;Ljava/util/Locale;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/os/LocaleList;Landroid/os/LocaleList;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 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;->getGeneration()I
 HSPLandroid/content/res/ConfigurationBoundResourceCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;
 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
+HSPLandroid/content/res/ConfigurationBoundResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;I)V
+HSPLandroid/content/res/ConfigurationBoundResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;IZ)V
 HSPLandroid/content/res/ConfigurationBoundResourceCache;->shouldInvalidateEntry(Landroid/content/res/ConstantState;I)Z
 HSPLandroid/content/res/ConfigurationBoundResourceCache;->shouldInvalidateEntry(Ljava/lang/Object;I)Z
 HSPLandroid/content/res/ConstantState;-><init>()V
@@ -5143,8 +5156,9 @@
 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;+]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/FontResourcesParser;->readFamily(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;
 HSPLandroid/content/res/FontScaleConverterFactory;->forScale(F)Landroid/content/res/FontScaleConverter;
+HSPLandroid/content/res/FontScaleConverterFactory;->isNonLinearFontScalingActive(F)Z
 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;
@@ -5165,17 +5179,17 @@
 HSPLandroid/content/res/Resources$Theme;->equals(Ljava/lang/Object;)Z
 HSPLandroid/content/res/Resources$Theme;->getAppliedStyleResId()I
 HSPLandroid/content/res/Resources$Theme;->getChangingConfigurations()I
-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;->getKey()Landroid/content/res/Resources$ThemeKey;
 HSPLandroid/content/res/Resources$Theme;->getParentThemeIdentifier(I)I
 HSPLandroid/content/res/Resources$Theme;->getResources()Landroid/content/res/Resources;
 HSPLandroid/content/res/Resources$Theme;->getTheme()[Ljava/lang/String;
 HSPLandroid/content/res/Resources$Theme;->hashCode()I
-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[I)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/Resources$Theme;->obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;
 HSPLandroid/content/res/Resources$Theme;->obtainStyledAttributes([I)Landroid/content/res/TypedArray;
 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+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
+HSPLandroid/content/res/Resources$Theme;->resolveAttribute(ILandroid/util/TypedValue;Z)Z
 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
@@ -5183,9 +5197,10 @@
 HSPLandroid/content/res/Resources$ThemeKey;-><init>()V
 HSPLandroid/content/res/Resources$ThemeKey;->append(IZ)V
 HSPLandroid/content/res/Resources$ThemeKey;->clone()Landroid/content/res/Resources$ThemeKey;
-HSPLandroid/content/res/Resources$ThemeKey;->containsValue(IZ)Z
-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;->equals(Ljava/lang/Object;)Z
+HSPLandroid/content/res/Resources$ThemeKey;->findValue(IZ)I
 HSPLandroid/content/res/Resources$ThemeKey;->hashCode()I
+HSPLandroid/content/res/Resources$ThemeKey;->moveToLast(I)V
 HSPLandroid/content/res/Resources$ThemeKey;->setTo(Landroid/content/res/Resources$ThemeKey;)V
 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
@@ -5202,16 +5217,16 @@
 HSPLandroid/content/res/Resources;->getBoolean(I)Z
 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+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getColor(ILandroid/content/res/Resources$Theme;)I
 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+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getDimensionPixelSize(I)I
 HSPLandroid/content/res/Resources;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;
-HSPLandroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;
 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;
@@ -5246,7 +5261,7 @@
 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;->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;->loadColorStateList(Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
 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;->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;
@@ -5255,7 +5270,7 @@
 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;+]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;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
+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;->openRawResourceFd(I)Landroid/content/res/AssetFileDescriptor;
@@ -5293,15 +5308,15 @@
 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+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
+HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->resolveAttribute(ILandroid/util/TypedValue;Z)Z
 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;
-HSPLandroid/content/res/ResourcesImpl;-><init>(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;Landroid/view/DisplayAdjustments;)V
+HSPLandroid/content/res/ResourcesImpl;-><init>(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;Landroid/view/DisplayAdjustments;)V+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/util/DisplayMetrics;Landroid/util/DisplayMetrics;
 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;->cacheDrawable(Landroid/util/TypedValue;ZLandroid/content/res/DrawableCache;Landroid/content/res/Resources$Theme;ZJLandroid/graphics/drawable/Drawable;I)V+]Landroid/content/res/DrawableCache;Landroid/content/res/DrawableCache;]Landroid/graphics/drawable/Drawable;megamorphic_types
+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
@@ -5309,7 +5324,7 @@
 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;+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Landroid/content/res/ConstantState;Landroid/content/res/ColorStateList$ColorStateListFactory;
+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;->getConfiguration()Landroid/content/res/Configuration;
 HSPLandroid/content/res/ResourcesImpl;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;
@@ -5330,12 +5345,12 @@
 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;+]Landroid/content/res/ConfigurationBoundResourceCache;Landroid/content/res/ConfigurationBoundResourceCache;]Landroid/content/res/ComplexColor;Landroid/content/res/ColorStateList;,Landroid/content/res/GradientColor;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
-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;Landroid/graphics/drawable/GradientDrawable$GradientState;,Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;,Landroid/graphics/drawable/StateListDrawable$StateListState;,Landroid/graphics/drawable/RippleDrawable$RippleState;,Landroid/graphics/drawable/AnimationDrawable$AnimationState;,Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;,Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;]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;]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;->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;->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;->loadXmlResourceParser(Ljava/lang/String;IILjava/lang/String;)Landroid/content/res/XmlResourceParser;+]Ljava/lang/String;Ljava/lang/String;]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;->openRawResourceFd(ILandroid/util/TypedValue;)Landroid/content/res/AssetFileDescriptor;
@@ -5351,31 +5366,32 @@
 HSPLandroid/content/res/StringBlock;->close()V
 HSPLandroid/content/res/StringBlock;->finalize()V
 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/StringBlock;->getSequence(I)Ljava/lang/CharSequence;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/content/res/ThemedResourceCache;-><init>()V
-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;->get(JLandroid/content/res/Resources$Theme;)Ljava/lang/Object;
+HSPLandroid/content/res/ThemedResourceCache;->getGeneration()I
+HSPLandroid/content/res/ThemedResourceCache;->getThemedLocked(Landroid/content/res/Resources$Theme;Z)Landroid/util/LongSparseArray;
 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;->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/ThemedResourceCache;->pruneLocked(I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/content/res/ThemedResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;I)V
+HSPLandroid/content/res/ThemedResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;IZ)V+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLandroid/content/res/TypedArray;-><init>(Landroid/content/res/Resources;)V
 HSPLandroid/content/res/TypedArray;->extractThemeAttrs()[I
 HSPLandroid/content/res/TypedArray;->extractThemeAttrs([I)[I
 HSPLandroid/content/res/TypedArray;->getBoolean(IZ)Z
 HSPLandroid/content/res/TypedArray;->getChangingConfigurations()I
-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;->getColor(II)I
+HSPLandroid/content/res/TypedArray;->getColorStateList(I)Landroid/content/res/ColorStateList;
 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;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/content/res/TypedArray;->getDrawableForDensity(II)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/res/TypedArray;->getFloat(IF)F
-HSPLandroid/content/res/TypedArray;->getFont(I)Landroid/graphics/Typeface;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/content/res/TypedArray;->getFont(I)Landroid/graphics/Typeface;
 HSPLandroid/content/res/TypedArray;->getFraction(IIIF)F
 HSPLandroid/content/res/TypedArray;->getIndex(I)I
 HSPLandroid/content/res/TypedArray;->getIndexCount()I
@@ -5383,12 +5399,12 @@
 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;->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;+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/content/res/TypedArray;->getString(I)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
@@ -5397,7 +5413,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;+]Landroid/content/res/XmlBlock$Parser;Landroid/content/res/XmlBlock$Parser;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
+HSPLandroid/content/res/TypedArray;->loadStringValueAt(I)Ljava/lang/CharSequence;
 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;
@@ -5413,8 +5429,8 @@
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeName(I)Ljava/lang/String;+]Landroid/content/res/StringBlock;Landroid/content/res/StringBlock;
 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;->getAttributeResourceValue(Ljava/lang/String;Ljava/lang/String;I)I+]Landroid/content/res/XmlBlock$Parser;Landroid/content/res/XmlBlock$Parser;
+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
@@ -5423,13 +5439,13 @@
 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;->getPositionDescription()Ljava/lang/String;
-HSPLandroid/content/res/XmlBlock$Parser;->getSequenceString(Ljava/lang/CharSequence;)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
-HSPLandroid/content/res/XmlBlock$Parser;->getText()Ljava/lang/String;
+HSPLandroid/content/res/XmlBlock$Parser;->getText()Ljava/lang/String;+]Landroid/content/res/StringBlock;Landroid/content/res/StringBlock;
 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
-HSPLandroid/content/res/XmlBlock$Parser;->nextText()Ljava/lang/String;
+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;+]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
@@ -5444,23 +5460,23 @@
 HSPLandroid/content/res/XmlBlock;->-$$Nest$smnativeGetText(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;
 HSPLandroid/content/type/DefaultMimeMapFactory$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/content/type/DefaultMimeMapFactory;->create()Llibcore/content/type/MimeMap;
 HSPLandroid/content/type/DefaultMimeMapFactory;->lambda$create$0(Ljava/lang/Class;Ljava/lang/String;)Ljava/io/InputStream;
-HSPLandroid/content/type/DefaultMimeMapFactory;->parseTypes(Llibcore/content/type/MimeMap$Builder;Ljava/util/function/Function;Ljava/lang/String;)V
+HSPLandroid/content/type/DefaultMimeMapFactory;->parseTypes(Llibcore/content/type/MimeMap$Builder;Ljava/util/function/Function;Ljava/lang/String;)V+]Ljava/util/function/Function;Landroid/content/type/DefaultMimeMapFactory$$ExternalSyntheticLambda0;]Ljava/io/BufferedReader;Ljava/io/BufferedReader;
 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;->close()V+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;]Landroid/database/ContentObservable;Landroid/database/ContentObservable;
+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
+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;->getColumnIndex(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;]Landroid/database/AbstractCursor;Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/AbstractCursor;->getColumnIndexOrThrow(Ljava/lang/String;)I
 HSPLandroid/database/AbstractCursor;->getColumnName(I)Ljava/lang/String;
 HSPLandroid/database/AbstractCursor;->getExtras()Landroid/os/Bundle;
@@ -5473,8 +5489,8 @@
 HSPLandroid/database/AbstractCursor;->move(I)Z
 HSPLandroid/database/AbstractCursor;->moveToFirst()Z
 HSPLandroid/database/AbstractCursor;->moveToLast()Z
-HSPLandroid/database/AbstractCursor;->moveToNext()Z+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
-HSPLandroid/database/AbstractCursor;->moveToPosition(I)Z+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
+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;->onChange(Z)V
 HSPLandroid/database/AbstractCursor;->onDeactivateOrClose()V+]Landroid/database/DataSetObservable;Landroid/database/DataSetObservable;
 HSPLandroid/database/AbstractCursor;->onMove(II)Z
@@ -5491,13 +5507,13 @@
 HSPLandroid/database/AbstractWindowedCursor;->getBlob(I)[B
 HSPLandroid/database/AbstractWindowedCursor;->getDouble(I)D
 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;->getInt(I)I+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;]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;->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;
@@ -5519,7 +5535,7 @@
 HSPLandroid/database/BulkCursorToCursorAdaptor;->getCount()I
 HSPLandroid/database/BulkCursorToCursorAdaptor;->getObserver()Landroid/database/IContentObserver;
 HSPLandroid/database/BulkCursorToCursorAdaptor;->initialize(Landroid/database/BulkCursorDescriptor;)V
-HSPLandroid/database/BulkCursorToCursorAdaptor;->onMove(II)Z
+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
 HSPLandroid/database/ContentObservable;->dispatchChange(ZLandroid/net/Uri;)V
@@ -5558,12 +5574,12 @@
 HSPLandroid/database/CursorWindow;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/database/CursorWindow;-><init>(Landroid/os/Parcel;Landroid/database/CursorWindow-IA;)V
 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;-><init>(Ljava/lang/String;J)V+]Ljava/lang/String;Ljava/lang/String;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/database/CursorWindow;->allocRow()Z
 HSPLandroid/database/CursorWindow;->clear()V
 HSPLandroid/database/CursorWindow;->dispose()V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
-HSPLandroid/database/CursorWindow;->finalize()V
-HSPLandroid/database/CursorWindow;->getBlob(II)[B+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
+HSPLandroid/database/CursorWindow;->finalize()V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
+HSPLandroid/database/CursorWindow;->getBlob(II)[B
 HSPLandroid/database/CursorWindow;->getCursorWindowSize()I
 HSPLandroid/database/CursorWindow;->getDouble(II)D
 HSPLandroid/database/CursorWindow;->getFloat(II)F
@@ -5592,7 +5608,7 @@
 HSPLandroid/database/CursorWrapper;->getCount()I
 HSPLandroid/database/CursorWrapper;->getExtras()Landroid/os/Bundle;
 HSPLandroid/database/CursorWrapper;->getInt(I)I
-HSPLandroid/database/CursorWrapper;->getLong(I)J+]Landroid/database/Cursor;missing_types
+HSPLandroid/database/CursorWrapper;->getLong(I)J+]Landroid/database/Cursor;Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/CursorWrapper;->getPosition()I
 HSPLandroid/database/CursorWrapper;->getString(I)Ljava/lang/String;+]Landroid/database/Cursor;missing_types
 HSPLandroid/database/CursorWrapper;->getType(I)I
@@ -5603,7 +5619,7 @@
 HSPLandroid/database/CursorWrapper;->isNull(I)Z
 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
@@ -5666,7 +5682,7 @@
 HSPLandroid/database/Observable;->unregisterObserver(Ljava/lang/Object;)V
 HSPLandroid/database/sqlite/SQLiteClosable;-><init>()V
 HSPLandroid/database/sqlite/SQLiteClosable;->acquireReference()V
-HSPLandroid/database/sqlite/SQLiteClosable;->close()V+]Landroid/database/sqlite/SQLiteClosable;Landroid/database/CursorWindow;,Landroid/database/sqlite/SQLiteStatement;,Landroid/database/sqlite/SQLiteQuery;,Landroid/database/sqlite/SQLiteDatabase;
+HSPLandroid/database/sqlite/SQLiteClosable;->close()V+]Landroid/database/sqlite/SQLiteClosable;Landroid/database/CursorWindow;,Landroid/database/sqlite/SQLiteStatement;,Landroid/database/sqlite/SQLiteDatabase;,Landroid/database/sqlite/SQLiteQuery;
 HSPLandroid/database/sqlite/SQLiteClosable;->releaseReference()V+]Landroid/database/sqlite/SQLiteClosable;Landroid/database/CursorWindow;,Landroid/database/sqlite/SQLiteStatement;,Landroid/database/sqlite/SQLiteQuery;,Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteCompatibilityWalFlags;->getTruncateSize()J
 HSPLandroid/database/sqlite/SQLiteCompatibilityWalFlags;->init(Ljava/lang/String;)V
@@ -5688,29 +5704,28 @@
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->setResult(J)V
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->setResult(Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatement;-><init>()V
-HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatement;-><init>(Landroid/database/sqlite/SQLiteConnection$PreparedStatement-IA;)V
 HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatementCache;-><init>(Landroid/database/sqlite/SQLiteConnection;I)V
 HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatementCache;->entryRemoved(ZLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/database/sqlite/SQLiteConnection$PreparedStatementCache;->entryRemoved(ZLjava/lang/String;Landroid/database/sqlite/SQLiteConnection$PreparedStatement;Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
 HSPLandroid/database/sqlite/SQLiteConnection;->-$$Nest$mfinalizePreparedStatement(Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
 HSPLandroid/database/sqlite/SQLiteConnection;-><init>(Landroid/database/sqlite/SQLiteConnectionPool;Landroid/database/sqlite/SQLiteDatabaseConfiguration;IZ)V
 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;
-HSPLandroid/database/sqlite/SQLiteConnection;->attachCancellationSignal(Landroid/os/CancellationSignal;)V
-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/Long;
+HSPLandroid/database/sqlite/SQLiteConnection;->applyBlockGuardPolicy(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V+]Landroid/database/sqlite/SQLiteDatabaseConfiguration;Landroid/database/sqlite/SQLiteDatabaseConfiguration;]Ldalvik/system/BlockGuard$Policy;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/Double;,Ljava/lang/Long;]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
 HSPLandroid/database/sqlite/SQLiteConnection;->collectDbStats(Ljava/util/ArrayList;)V
-HSPLandroid/database/sqlite/SQLiteConnection;->detachCancellationSignal(Landroid/os/CancellationSignal;)V
+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;->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
-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;->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
+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;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)J+]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
+HSPLandroid/database/sqlite/SQLiteConnection;->executeForString(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)Ljava/lang/String;+]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
 HSPLandroid/database/sqlite/SQLiteConnection;->executePerConnectionSqlFromConfiguration(I)V
 HSPLandroid/database/sqlite/SQLiteConnection;->finalize()V
 HSPLandroid/database/sqlite/SQLiteConnection;->finalizePreparedStatement(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
@@ -5720,13 +5735,12 @@
 HSPLandroid/database/sqlite/SQLiteConnection;->isPreparedStatementInCache(Ljava/lang/String;)Z
 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;
-HSPLandroid/database/sqlite/SQLiteConnection;->open()V
+HSPLandroid/database/sqlite/SQLiteConnection;->open()V+]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
 HSPLandroid/database/sqlite/SQLiteConnection;->open(Landroid/database/sqlite/SQLiteConnectionPool;Landroid/database/sqlite/SQLiteDatabaseConfiguration;IZ)Landroid/database/sqlite/SQLiteConnection;
 HSPLandroid/database/sqlite/SQLiteConnection;->prepare(Ljava/lang/String;Landroid/database/sqlite/SQLiteStatementInfo;)V+]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
 HSPLandroid/database/sqlite/SQLiteConnection;->reconfigure(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)V
 HSPLandroid/database/sqlite/SQLiteConnection;->recyclePreparedStatement(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
-HSPLandroid/database/sqlite/SQLiteConnection;->releasePreparedStatement(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->releasePreparedStatement(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V+]Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;
 HSPLandroid/database/sqlite/SQLiteConnection;->setAutoCheckpointInterval()V
 HSPLandroid/database/sqlite/SQLiteConnection;->setCustomFunctionsFromConfiguration()V
 HSPLandroid/database/sqlite/SQLiteConnection;->setForeignKeyModeFromConfiguration()V
@@ -5760,7 +5774,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+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->finishAcquireConnectionLocked(Landroid/database/sqlite/SQLiteConnection;I)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->getPath()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->getPriority(I)I
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->isSessionBlockingImportantConnectionWaitersLocked(ZI)Z
@@ -5778,16 +5792,16 @@
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->setMaxConnectionPoolSizeLocked()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;+]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;+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Ljava/util/Iterator;Ljava/util/WeakHashMap$KeyIterator;]Ljava/util/Set;Ljava/util/WeakHashMap$KeySet;
-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;->tryAcquireNonPrimaryConnectionLocked(Ljava/lang/String;I)Landroid/database/sqlite/SQLiteConnection;
+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;
 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+]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;->getColumnIndex(Ljava/lang/String;)I
 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;
@@ -5819,11 +5833,11 @@
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams;-><init>(ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;IIJLjava/lang/String;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$OpenParams-IA;)V
 HSPLandroid/database/sqlite/SQLiteDatabase;-><init>(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;IIJLjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->beginTransaction()V
-HSPLandroid/database/sqlite/SQLiteDatabase;->beginTransaction(Landroid/database/sqlite/SQLiteTransactionListener;Z)V+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
+HSPLandroid/database/sqlite/SQLiteDatabase;->beginTransaction(Landroid/database/sqlite/SQLiteTransactionListener;Z)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->beginTransactionNonExclusive()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->beginTransactionWithListener(Landroid/database/sqlite/SQLiteTransactionListener;)V
 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;->compileStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteStatement;+]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 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;->deleteDatabase(Ljava/io/File;)Z
@@ -5833,7 +5847,7 @@
 HSPLandroid/database/sqlite/SQLiteDatabase;->dumpAll(Landroid/util/Printer;ZZ)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->dumpDatabaseDirectory(Landroid/util/Printer;Ljava/io/File;Z)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->enableWriteAheadLogging()Z
-HSPLandroid/database/sqlite/SQLiteDatabase;->endTransaction()V+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
+HSPLandroid/database/sqlite/SQLiteDatabase;->endTransaction()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->execSQL(Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->execSQL(Ljava/lang/String;[Ljava/lang/Object;)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->executeSql(Ljava/lang/String;[Ljava/lang/Object;)I
@@ -5846,7 +5860,7 @@
 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;->getThreadSession()Landroid/database/sqlite/SQLiteSession;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getVersion()I
 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
@@ -5856,7 +5870,7 @@
 HSPLandroid/database/sqlite/SQLiteDatabase;->isOpen()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->isReadOnly()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->isReadOnlyLocked()Z
-HSPLandroid/database/sqlite/SQLiteDatabase;->isWriteAheadLoggingEnabled()Z+]Ljava/lang/String;Ljava/lang/String;]Landroid/database/sqlite/SQLiteDatabaseConfiguration;Landroid/database/sqlite/SQLiteDatabaseConfiguration;
+HSPLandroid/database/sqlite/SQLiteDatabase;->isWriteAheadLoggingEnabled()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->onAllReferencesReleased()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->open()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->openDatabase(Ljava/io/File;Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/sqlite/SQLiteDatabase;
@@ -5869,19 +5883,19 @@
 HSPLandroid/database/sqlite/SQLiteDatabase;->query(Ljava/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;
 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;
 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;
+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/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/database/Cursor;+]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 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;
 HSPLandroid/database/sqlite/SQLiteDatabase;->releaseMemory()I
 HSPLandroid/database/sqlite/SQLiteDatabase;->replace(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J
 HSPLandroid/database/sqlite/SQLiteDatabase;->replaceOrThrow(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J
 HSPLandroid/database/sqlite/SQLiteDatabase;->setForeignKeyConstraintsEnabled(Z)V
-HSPLandroid/database/sqlite/SQLiteDatabase;->setTransactionSuccessful()V+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
+HSPLandroid/database/sqlite/SQLiteDatabase;->setTransactionSuccessful()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->throwIfNotOpenLocked()V
 HSPLandroid/database/sqlite/SQLiteDatabase;->update(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I
-HSPLandroid/database/sqlite/SQLiteDatabase;->updateWithOnConflict(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;I)I+]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;->updateWithOnConflict(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;I)I
 HSPLandroid/database/sqlite/SQLiteDatabase;->validateSql(Ljava/lang/String;Landroid/os/CancellationSignal;)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->yieldIfContendedHelper(ZJ)Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->yieldIfContendedSafely(J)Z
@@ -5891,10 +5905,10 @@
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->isLegacyCompatibilityWalEnabled()Z
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->isReadOnlyDatabase()Z
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->isWalEnabledInternal()Z
-HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->resolveJournalMode()Ljava/lang/String;+]Landroid/database/sqlite/SQLiteDatabaseConfiguration;Landroid/database/sqlite/SQLiteDatabaseConfiguration;
+HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->resolveJournalMode()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->resolveSyncMode()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->stripPathForLogs(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->updateParametersFrom(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/database/sqlite/SQLiteDatabaseConfiguration;->updateParametersFrom(Landroid/database/sqlite/SQLiteDatabaseConfiguration;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/database/sqlite/SQLiteDebug$NoPreloadHolder;-><clinit>()V
 HSPLandroid/database/sqlite/SQLiteDebug;->getDatabaseInfo()Landroid/database/sqlite/SQLiteDebug$PagerStats;
 HSPLandroid/database/sqlite/SQLiteDebug;->shouldLogSlowQuery(J)Z
@@ -5927,9 +5941,9 @@
 HSPLandroid/database/sqlite/SQLiteOpenHelper;->setIdleConnectionTimeout(J)V
 HSPLandroid/database/sqlite/SQLiteOpenHelper;->setOpenParamsBuilder(Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;)V
 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
+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
+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
@@ -5942,15 +5956,15 @@
 HSPLandroid/database/sqlite/SQLiteProgram;->getDatabase()Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteProgram;->getSession()Landroid/database/sqlite/SQLiteSession;+]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteProgram;->getSql()Ljava/lang/String;
-HSPLandroid/database/sqlite/SQLiteProgram;->onAllReferencesReleased()V+]Landroid/database/sqlite/SQLiteProgram;Landroid/database/sqlite/SQLiteQuery;
+HSPLandroid/database/sqlite/SQLiteProgram;->onAllReferencesReleased()V+]Landroid/database/sqlite/SQLiteProgram;Landroid/database/sqlite/SQLiteStatement;,Landroid/database/sqlite/SQLiteQuery;
 HSPLandroid/database/sqlite/SQLiteQuery;-><init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Landroid/os/CancellationSignal;)V
 HSPLandroid/database/sqlite/SQLiteQuery;->fillWindow(Landroid/database/CursorWindow;IIZ)I+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;]Landroid/database/sqlite/SQLiteQuery;Landroid/database/sqlite/SQLiteQuery;
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;-><init>()V
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->appendClause(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->appendColumns(Ljava/lang/StringBuilder;[Ljava/lang/String;)V
+HSPLandroid/database/sqlite/SQLiteQueryBuilder;->appendColumns(Ljava/lang/StringBuilder;[Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->appendWhere(Ljava/lang/CharSequence;)V
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->buildQuery([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/database/sqlite/SQLiteQueryBuilder;->buildQueryString(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteQueryBuilder;->buildQueryString(ZLjava/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/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->computeProjection([Ljava/lang/String;)[Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->computeSingleProjection(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteQueryBuilder;->computeSingleProjectionOrThrow(Ljava/lang/String;)Ljava/lang/String;
@@ -5972,20 +5986,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+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
+HSPLandroid/database/sqlite/SQLiteSession;->beginTransactionUnchecked(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V
 HSPLandroid/database/sqlite/SQLiteSession;->endTransaction(Landroid/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;->execute(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)V
 HSPLandroid/database/sqlite/SQLiteSession;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)I
 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+]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;->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
+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/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
+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;->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
@@ -5995,9 +6009,9 @@
 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+]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;->execute()V
+HSPLandroid/database/sqlite/SQLiteStatement;->executeInsert()J
+HSPLandroid/database/sqlite/SQLiteStatement;->executeUpdateDelete()I
 HSPLandroid/database/sqlite/SQLiteStatement;->simpleQueryForLong()J
 HSPLandroid/database/sqlite/SQLiteStatement;->simpleQueryForString()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteStatementInfo;-><init>()V
@@ -6014,6 +6028,7 @@
 HSPLandroid/ddm/DdmHandleProfiling;->handleChunk(Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk;
 HSPLandroid/graphics/BLASTBufferQueue;-><init>(Ljava/lang/String;Landroid/view/SurfaceControl;III)V
 HSPLandroid/graphics/BLASTBufferQueue;-><init>(Ljava/lang/String;Z)V
+HSPLandroid/graphics/BLASTBufferQueue;->clearSyncTransaction()V
 HSPLandroid/graphics/BLASTBufferQueue;->createSurface()Landroid/view/Surface;
 HSPLandroid/graphics/BLASTBufferQueue;->destroy()V
 HSPLandroid/graphics/BLASTBufferQueue;->finalize()V
@@ -6021,8 +6036,6 @@
 HSPLandroid/graphics/BLASTBufferQueue;->isSameSurfaceControl(Landroid/view/SurfaceControl;)Z
 HSPLandroid/graphics/BLASTBufferQueue;->mergeWithNextTransaction(Landroid/view/SurfaceControl$Transaction;J)V
 HSPLandroid/graphics/BLASTBufferQueue;->setTransactionHangCallback(Landroid/graphics/BLASTBufferQueue$TransactionHangCallback;)V
-HSPLandroid/graphics/BLASTBufferQueue;->syncNextTransaction(Ljava/util/function/Consumer;)V
-HSPLandroid/graphics/BLASTBufferQueue;->syncNextTransaction(ZLjava/util/function/Consumer;)V
 HSPLandroid/graphics/BLASTBufferQueue;->update(Landroid/view/SurfaceControl;III)V
 HSPLandroid/graphics/BaseCanvas;-><init>()V
 HSPLandroid/graphics/BaseCanvas;->drawARGB(IIII)V
@@ -6046,19 +6059,19 @@
 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;->drawCircle(FFFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawColor(I)V+]Landroid/graphics/BlendMode;Landroid/graphics/BlendMode;
+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;->drawLine(FFFFLandroid/graphics/Paint;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;
 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+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/Path;Landroid/graphics/Path;
+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
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(FFFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(Landroid/graphics/Rect;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRoundRect(FFFFFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V+]Landroid/graphics/Paint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/lang/StringBuilder;,Landroid/text/Layout$Ellipsizer;
+HSPLandroid/graphics/BaseRecordingCanvas;->drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawText(Ljava/lang/String;FFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawTextRun([CIIIIFFZLandroid/graphics/Paint;)V
@@ -6069,7 +6082,7 @@
 HSPLandroid/graphics/Bitmap;-><init>(JIIIZ[BLandroid/graphics/NinePatch$InsetStruct;Z)V
 HSPLandroid/graphics/Bitmap;->checkHardware(Ljava/lang/String;)V
 HSPLandroid/graphics/Bitmap;->checkPixelAccess(II)V
-HSPLandroid/graphics/Bitmap;->checkPixelsAccess(IIIIII[I)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
+HSPLandroid/graphics/Bitmap;->checkPixelsAccess(IIIIII[I)V
 HSPLandroid/graphics/Bitmap;->checkRecycled(Ljava/lang/String;)V
 HSPLandroid/graphics/Bitmap;->checkWidthHeight(II)V
 HSPLandroid/graphics/Bitmap;->checkXYSign(II)V
@@ -6103,13 +6116,14 @@
 HSPLandroid/graphics/Bitmap;->getScaledWidth(I)I
 HSPLandroid/graphics/Bitmap;->getWidth()I
 HSPLandroid/graphics/Bitmap;->hasAlpha()Z
+HSPLandroid/graphics/Bitmap;->hasGainmap()Z+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->hasMipMap()Z
 HSPLandroid/graphics/Bitmap;->isMutable()Z
 HSPLandroid/graphics/Bitmap;->isPremultiplied()Z
 HSPLandroid/graphics/Bitmap;->isRecycled()Z
 HSPLandroid/graphics/Bitmap;->noteHardwareBitmapSlowCall()V
 HSPLandroid/graphics/Bitmap;->prepareToDraw()V
-HSPLandroid/graphics/Bitmap;->reconfigure(IILandroid/graphics/Bitmap$Config;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
+HSPLandroid/graphics/Bitmap;->reconfigure(IILandroid/graphics/Bitmap$Config;)V
 HSPLandroid/graphics/Bitmap;->recycle()V
 HSPLandroid/graphics/Bitmap;->reinit(IIZ)V
 HSPLandroid/graphics/Bitmap;->scaleFromDensity(III)I
@@ -6211,7 +6225,7 @@
 HSPLandroid/graphics/Canvas;->saveUnclippedLayer(IIII)I
 HSPLandroid/graphics/Canvas;->scale(FF)V
 HSPLandroid/graphics/Canvas;->scale(FFFF)V
-HSPLandroid/graphics/Canvas;->setBitmap(Landroid/graphics/Bitmap;)V+]Landroid/graphics/Canvas;Landroid/graphics/Canvas;
+HSPLandroid/graphics/Canvas;->setBitmap(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/Canvas;->setCompatibilityVersion(I)V
 HSPLandroid/graphics/Canvas;->setDensity(I)V
 HSPLandroid/graphics/Canvas;->setDrawFilter(Landroid/graphics/DrawFilter;)V
@@ -6238,7 +6252,7 @@
 HSPLandroid/graphics/Color;->green(I)I
 HSPLandroid/graphics/Color;->green(J)F
 HSPLandroid/graphics/Color;->luminance()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
@@ -6374,22 +6388,24 @@
 HSPLandroid/graphics/ImageDecoder$AssetInputStreamSource;->toString()Ljava/lang/String;
 HSPLandroid/graphics/ImageDecoder$ImageDecoderSourceTrace;-><init>(Landroid/graphics/ImageDecoder;)V
 HSPLandroid/graphics/ImageDecoder$ImageDecoderSourceTrace;->close()V
-HSPLandroid/graphics/ImageDecoder$ImageInfo;-><init>(Landroid/graphics/ImageDecoder;)V
+HSPLandroid/graphics/ImageDecoder$ImageInfo;-><init>(Landroid/util/Size;ZLjava/lang/String;Landroid/graphics/ColorSpace;)V
+HSPLandroid/graphics/ImageDecoder$ImageInfo;-><init>(Landroid/util/Size;ZLjava/lang/String;Landroid/graphics/ColorSpace;Landroid/graphics/ImageDecoder$ImageInfo-IA;)V
 HSPLandroid/graphics/ImageDecoder$InputStreamSource;-><init>(Landroid/content/res/Resources;Ljava/io/InputStream;I)V
 HSPLandroid/graphics/ImageDecoder$InputStreamSource;->createImageDecoder(Z)Landroid/graphics/ImageDecoder;
 HSPLandroid/graphics/ImageDecoder$InputStreamSource;->getDensity()I
 HSPLandroid/graphics/ImageDecoder$InputStreamSource;->getResources()Landroid/content/res/Resources;
+HSPLandroid/graphics/ImageDecoder$InputStreamSource;->toString()Ljava/lang/String;
 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;->-$$Nest$smdescribeDecoderForTrace(Landroid/graphics/ImageDecoder;)Ljava/lang/String;
-HSPLandroid/graphics/ImageDecoder;-><init>(JIIZZ)V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
+HSPLandroid/graphics/ImageDecoder;-><init>(JIIZZ)V
 HSPLandroid/graphics/ImageDecoder;->callHeaderDecoded(Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;Landroid/graphics/ImageDecoder$Source;)V
 HSPLandroid/graphics/ImageDecoder;->checkForExtended()Z
 HSPLandroid/graphics/ImageDecoder;->checkState(Z)V
 HSPLandroid/graphics/ImageDecoder;->checkSubset(IILandroid/graphics/Rect;)V
-HSPLandroid/graphics/ImageDecoder;->close()V+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
-HSPLandroid/graphics/ImageDecoder;->computeDensity(Landroid/graphics/ImageDecoder$Source;)I+]Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$AssetInputStreamSource;]Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder;]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/graphics/ImageDecoder;->close()V
+HSPLandroid/graphics/ImageDecoder;->computeDensity(Landroid/graphics/ImageDecoder$Source;)I
 HSPLandroid/graphics/ImageDecoder;->createFromAsset(Landroid/content/res/AssetManager$AssetInputStream;ZLandroid/graphics/ImageDecoder$Source;)Landroid/graphics/ImageDecoder;
 HSPLandroid/graphics/ImageDecoder;->createFromStream(Ljava/io/InputStream;ZZLandroid/graphics/ImageDecoder$Source;)Landroid/graphics/ImageDecoder;
 HSPLandroid/graphics/ImageDecoder;->createSource(Landroid/content/res/Resources;Ljava/io/InputStream;I)Landroid/graphics/ImageDecoder$Source;
@@ -6397,10 +6413,12 @@
 HSPLandroid/graphics/ImageDecoder;->decodeBitmapImpl(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/ImageDecoder;->decodeBitmapInternal()Landroid/graphics/Bitmap;
 HSPLandroid/graphics/ImageDecoder;->decodeDrawable(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/ImageDecoder;->decodeDrawableImpl(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/drawable/Drawable;+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$AssetInputStreamSource;]Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder;]Landroid/graphics/ImageDecoder$ImageDecoderSourceTrace;Landroid/graphics/ImageDecoder$ImageDecoderSourceTrace;
+HSPLandroid/graphics/ImageDecoder;->decodeDrawableImpl(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/ImageDecoder;->describeDecoderForTrace(Landroid/graphics/ImageDecoder;)Ljava/lang/String;
 HSPLandroid/graphics/ImageDecoder;->finalize()V
+HSPLandroid/graphics/ImageDecoder;->getColorSpace()Landroid/graphics/ColorSpace;
 HSPLandroid/graphics/ImageDecoder;->getColorSpacePtr()J
+HSPLandroid/graphics/ImageDecoder;->getMimeType()Ljava/lang/String;
 HSPLandroid/graphics/ImageDecoder;->requestedResize()Z
 HSPLandroid/graphics/ImageDecoder;->setAllocator(I)V
 HSPLandroid/graphics/ImageDecoder;->setTargetSize(II)V
@@ -6415,7 +6433,7 @@
 HSPLandroid/graphics/Insets;->of(IIII)Landroid/graphics/Insets;
 HSPLandroid/graphics/Insets;->of(Landroid/graphics/Rect;)Landroid/graphics/Insets;
 HSPLandroid/graphics/Insets;->toRect()Landroid/graphics/Rect;
-HSPLandroid/graphics/Insets;->toString()Ljava/lang/String;
+HSPLandroid/graphics/Insets;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/graphics/Insets;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/graphics/Interpolator;-><init>(II)V
 HSPLandroid/graphics/Interpolator;->finalize()V
@@ -6432,14 +6450,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+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/graphics/Matrix;-><init>()V
 HSPLandroid/graphics/Matrix;-><init>(Landroid/graphics/Matrix;)V
 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
 HSPLandroid/graphics/Matrix;->mapRect(Landroid/graphics/RectF;Landroid/graphics/RectF;)Z
@@ -6477,13 +6495,13 @@
 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/Path;Landroid/graphics/Path;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/graphics/Outline;->setEmpty()V
 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;->setRoundRect(IIIIF)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Outline;Landroid/graphics/Outline;
+HSPLandroid/graphics/Outline;->setRoundRect(IIIIF)V
 HSPLandroid/graphics/Outline;->setRoundRect(Landroid/graphics/Rect;F)V
 HSPLandroid/graphics/Paint$FontMetrics;-><init>()V
 HSPLandroid/graphics/Paint$FontMetricsInt;-><init>()V
@@ -6507,7 +6525,7 @@
 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/BlendModeColorFilter;,Landroid/graphics/PorterDuffColorFilter;]Landroid/graphics/Paint;missing_types]Landroid/graphics/Shader;Landroid/graphics/LinearGradient;,Landroid/graphics/drawable/RippleShader;,Landroid/graphics/BitmapShader;,Landroid/graphics/RadialGradient;
+HSPLandroid/graphics/Paint;->getNativeInstance()J+]Landroid/graphics/ColorFilter;Landroid/graphics/BlendModeColorFilter;,Landroid/graphics/PorterDuffColorFilter;]Landroid/graphics/Paint;Landroid/graphics/Paint;,Landroid/text/TextPaint;]Landroid/graphics/Shader;Landroid/graphics/drawable/RippleShader;,Landroid/graphics/LinearGradient;,Landroid/graphics/BitmapShader;
 HSPLandroid/graphics/Paint;->getRunAdvance(Ljava/lang/CharSequence;IIIIZI)F
 HSPLandroid/graphics/Paint;->getRunAdvance([CIIIIZI)F
 HSPLandroid/graphics/Paint;->getRunCharacterAdvance(Ljava/lang/CharSequence;IIIIZI[FI)F
@@ -6550,6 +6568,7 @@
 HSPLandroid/graphics/Paint;->measureText(Ljava/lang/String;II)F
 HSPLandroid/graphics/Paint;->reset()V
 HSPLandroid/graphics/Paint;->set(Landroid/graphics/Paint;)V
+HSPLandroid/graphics/Paint;->setARGB(IIII)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/Paint;->setAlpha(I)V
 HSPLandroid/graphics/Paint;->setAntiAlias(Z)V
 HSPLandroid/graphics/Paint;->setBlendMode(Landroid/graphics/BlendMode;)V
@@ -6577,16 +6596,16 @@
 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+]Landroid/os/LocaleList;Landroid/os/LocaleList;
+HSPLandroid/graphics/Paint;->setTextLocales(Landroid/os/LocaleList;)V
 HSPLandroid/graphics/Paint;->setTextScaleX(F)V
 HSPLandroid/graphics/Paint;->setTextSize(F)V
 HSPLandroid/graphics/Paint;->setTextSkewX(F)V
 HSPLandroid/graphics/Paint;->setTypeface(Landroid/graphics/Typeface;)Landroid/graphics/Typeface;
 HSPLandroid/graphics/Paint;->setUnderlineText(Z)V
 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/Paint;->syncTextLocalesWithMinikin()V
 HSPLandroid/graphics/PaintFlagsDrawFilter;-><init>(II)V
-HSPLandroid/graphics/Path;-><init>()V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/graphics/Path;-><init>()V
 HSPLandroid/graphics/Path;-><init>(Landroid/graphics/Path;)V
 HSPLandroid/graphics/Path;->addArc(FFFFFF)V
 HSPLandroid/graphics/Path;->addArc(Landroid/graphics/RectF;FF)V
@@ -6678,8 +6697,8 @@
 HSPLandroid/graphics/RecordingCanvas;->getHeight()I
 HSPLandroid/graphics/RecordingCanvas;->getWidth()I
 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;->obtain(Landroid/graphics/RenderNode;II)Landroid/graphics/RecordingCanvas;
+HSPLandroid/graphics/RecordingCanvas;->recycle()V
 HSPLandroid/graphics/RecordingCanvas;->throwIfCannotDraw(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/Rect$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/Rect;
 HSPLandroid/graphics/Rect$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -6716,9 +6735,9 @@
 HSPLandroid/graphics/Rect;->setEmpty()V
 HSPLandroid/graphics/Rect;->setIntersect(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/Rect;->toShortString(Ljava/lang/StringBuilder;)Ljava/lang/String;
-HSPLandroid/graphics/Rect;->toString()Ljava/lang/String;
+HSPLandroid/graphics/Rect;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/graphics/Rect;->union(IIII)V
-HSPLandroid/graphics/Rect;->union(Landroid/graphics/Rect;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/graphics/Rect;->union(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/Rect;->width()I
 HSPLandroid/graphics/Rect;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/graphics/RectF;-><init>()V
@@ -6728,7 +6747,8 @@
 HSPLandroid/graphics/RectF;->centerX()F
 HSPLandroid/graphics/RectF;->centerY()F
 HSPLandroid/graphics/RectF;->contains(FF)Z
-HSPLandroid/graphics/RectF;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/graphics/RectF;
+HSPLandroid/graphics/RectF;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/RectF;->hashCode()I
 HSPLandroid/graphics/RectF;->height()F
 HSPLandroid/graphics/RectF;->inset(FF)V
 HSPLandroid/graphics/RectF;->intersect(FFFF)Z
@@ -6772,17 +6792,17 @@
 HSPLandroid/graphics/RenderNode$PositionUpdateListener;->callPositionChanged(Ljava/lang/ref/WeakReference;JIIII)Z
 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+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/graphics/RenderNode;-><init>(Ljava/lang/String;Landroid/graphics/RenderNode$AnimationHost;)V
 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;
 HSPLandroid/graphics/RenderNode;->clearStretch()Z
 HSPLandroid/graphics/RenderNode;->create(Ljava/lang/String;Landroid/graphics/RenderNode$AnimationHost;)Landroid/graphics/RenderNode;
 HSPLandroid/graphics/RenderNode;->discardDisplayList()V
-HSPLandroid/graphics/RenderNode;->endRecording()V+]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/graphics/RenderNode;->endRecording()V
 HSPLandroid/graphics/RenderNode;->getClipToOutline()Z
 HSPLandroid/graphics/RenderNode;->getElevation()F
-HSPLandroid/graphics/RenderNode;->getMatrix(Landroid/graphics/Matrix;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
+HSPLandroid/graphics/RenderNode;->getMatrix(Landroid/graphics/Matrix;)V
 HSPLandroid/graphics/RenderNode;->getPivotY()F
 HSPLandroid/graphics/RenderNode;->getRotationX()F
 HSPLandroid/graphics/RenderNode;->getRotationY()F
@@ -6854,7 +6874,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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
+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$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;
@@ -6867,7 +6887,7 @@
 HSPLandroid/graphics/Typeface;->createWeightStyle(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;
 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+]Ljava/lang/Object;Landroid/graphics/Typeface;
+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;->getStyle()I
 HSPLandroid/graphics/Typeface;->getSystemDefaultTypeface(Ljava/lang/String;)Landroid/graphics/Typeface;
@@ -7133,7 +7153,7 @@
 HSPLandroid/graphics/drawable/ColorDrawable;-><init>(Landroid/graphics/drawable/ColorDrawable$ColorState;Landroid/content/res/Resources;Landroid/graphics/drawable/ColorDrawable-IA;)V
 HSPLandroid/graphics/drawable/ColorDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/ColorDrawable;->clearMutated()V
-HSPLandroid/graphics/drawable/ColorDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/drawable/ColorDrawable;Landroid/graphics/drawable/ColorDrawable;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/graphics/drawable/ColorDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/ColorDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/ColorDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/ColorDrawable;->getColor()I
@@ -7181,7 +7201,7 @@
 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
 HSPLandroid/graphics/drawable/Drawable;->isProjected()Z
 HSPLandroid/graphics/drawable/Drawable;->isStateful()Z
 HSPLandroid/graphics/drawable/Drawable;->isVisible()Z
@@ -7192,14 +7212,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+]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/graphics/drawable/Drawable;->resolveDensity(Landroid/content/res/Resources;I)I
 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;megamorphic_types
-HSPLandroid/graphics/drawable/Drawable;->setBounds(Landroid/graphics/Rect;)V+]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/Drawable;->setBounds(IIII)V
+HSPLandroid/graphics/drawable/Drawable;->setBounds(Landroid/graphics/Rect;)V
 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
@@ -7212,7 +7232,7 @@
 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+]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/Drawable;->setVisible(ZZ)Z
 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;->updateTintFilter(Landroid/graphics/PorterDuffColorFilter;Landroid/content/res/ColorStateList;Landroid/graphics/PorterDuff$Mode;)Landroid/graphics/PorterDuffColorFilter;
@@ -7221,8 +7241,8 @@
 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+]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/Drawable;Landroid/graphics/drawable/AnimationDrawable;,Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;,Landroid/graphics/drawable/ColorDrawable;
+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;Landroid/graphics/drawable/InsetDrawable;
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->addChild(Landroid/graphics/drawable/Drawable;)I
 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
@@ -7261,14 +7281,14 @@
 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;->getOpticalInsets()Landroid/graphics/Insets;+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/NinePatchDrawable;
 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+]Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;]Landroid/graphics/drawable/DrawableContainer;Landroid/graphics/drawable/StateListDrawable;,Landroid/graphics/drawable/AnimationDrawable;,Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/DrawableContainer;->getPadding(Landroid/graphics/Rect;)Z+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/graphics/drawable/DrawableContainer;->initializeDrawableForDisplay(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/graphics/drawable/DrawableContainer;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
 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/AnimationDrawable;,Landroid/graphics/drawable/NinePatchDrawable;,Landroid/graphics/drawable/AnimatedVectorDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->needsMirroring()Z
 HSPLandroid/graphics/drawable/DrawableContainer;->onBoundsChange(Landroid/graphics/Rect;)V
@@ -7330,12 +7350,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][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;-><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;->applyDensityScaling(II)V
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->canApplyTheme()Z
-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;->computeOpacity()V
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->getChangingConfigurations()I
 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;
@@ -7348,20 +7368,21 @@
 HSPLandroid/graphics/drawable/GradientDrawable;-><init>()V
 HSPLandroid/graphics/drawable/GradientDrawable;-><init>(Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/GradientDrawable;-><init>(Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/content/res/Resources;Landroid/graphics/drawable/GradientDrawable-IA;)V
+HSPLandroid/graphics/drawable/GradientDrawable;-><init>(Landroid/graphics/drawable/GradientDrawable$Orientation;[I)V
 HSPLandroid/graphics/drawable/GradientDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 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/Paint;Landroid/graphics/Paint;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+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;
 HSPLandroid/graphics/drawable/GradientDrawable;->ensureValidRect()Z
-HSPLandroid/graphics/drawable/GradientDrawable;->getChangingConfigurations()I+]Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/graphics/drawable/GradientDrawable$GradientState;
+HSPLandroid/graphics/drawable/GradientDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/GradientDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/drawable/GradientDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/GradientDrawable;->getFloatOrFraction(Landroid/content/res/TypedArray;IF)F
 HSPLandroid/graphics/drawable/GradientDrawable;->getIntrinsicHeight()I
 HSPLandroid/graphics/drawable/GradientDrawable;->getIntrinsicWidth()I
 HSPLandroid/graphics/drawable/GradientDrawable;->getOpacity()I
-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;->getOutline(Landroid/graphics/Outline;)V
 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
@@ -7394,7 +7415,7 @@
 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+]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;->updateLocalState(Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 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;
@@ -7447,7 +7468,7 @@
 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+]Landroid/graphics/drawable/Drawable$ConstantState;megamorphic_types]Landroid/graphics/drawable/Drawable;megamorphic_types
+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;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->applyDensityScaling(II)V
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->setDensity(I)V
@@ -7467,7 +7488,7 @@
 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+]Landroid/graphics/drawable/LayerDrawable;missing_types
+HSPLandroid/graphics/drawable/LayerDrawable;-><init>(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)V
 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;
@@ -7485,19 +7506,19 @@
 HSPLandroid/graphics/drawable/LayerDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/LayerDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/LayerDrawable;->getDrawable(I)Landroid/graphics/drawable/Drawable;
-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;->getIntrinsicHeight()I
+HSPLandroid/graphics/drawable/LayerDrawable;->getIntrinsicWidth()I
 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+]Landroid/graphics/drawable/LayerDrawable;missing_types
+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/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;
 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;->isAutoMirrored()Z
 HSPLandroid/graphics/drawable/LayerDrawable;->isProjected()Z
 HSPLandroid/graphics/drawable/LayerDrawable;->isStateful()Z
-HSPLandroid/graphics/drawable/LayerDrawable;->jumpToCurrentState()V+]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/LayerDrawable;->jumpToCurrentState()V
 HSPLandroid/graphics/drawable/LayerDrawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/LayerDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->onStateChange([I)Z
@@ -7520,7 +7541,7 @@
 HSPLandroid/graphics/drawable/LayerDrawable;->setVisible(ZZ)Z
 HSPLandroid/graphics/drawable/LayerDrawable;->suspendChildInvalidation()V
 HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerBounds(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;->updateLayerBoundsInternal(Landroid/graphics/Rect;)V+]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;]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
@@ -7537,8 +7558,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;
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
@@ -7618,7 +7639,7 @@
 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+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
+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;Landroid/graphics/drawable/RippleDrawable-IA;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->canApplyTheme()Z
@@ -7631,26 +7652,26 @@
 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
-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;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/drawable/RippleAnimationSession;
+HSPLandroid/graphics/drawable/RippleDrawable;->drawPatterned(Landroid/graphics/Canvas;)V
 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;->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;missing_types
+HSPLandroid/graphics/drawable/RippleDrawable;->getDirtyBounds()Landroid/graphics/Rect;
 HSPLandroid/graphics/drawable/RippleDrawable;->getMaskType()I
 HSPLandroid/graphics/drawable/RippleDrawable;->getOpacity()I
 HSPLandroid/graphics/drawable/RippleDrawable;->getOutline(Landroid/graphics/Outline;)V
 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+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
+HSPLandroid/graphics/drawable/RippleDrawable;->isBounded()Z+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
+HSPLandroid/graphics/drawable/RippleDrawable;->isProjected()Z
 HSPLandroid/graphics/drawable/RippleDrawable;->isStateful()Z
 HSPLandroid/graphics/drawable/RippleDrawable;->jumpToCurrentState()V
 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;->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(ZZZZ)V
@@ -7664,7 +7685,7 @@
 HSPLandroid/graphics/drawable/RippleDrawable;->tryRippleEnter()V
 HSPLandroid/graphics/drawable/RippleDrawable;->updateLocalState()V
 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/PorterDuffColorFilter;Landroid/graphics/PorterDuffColorFilter;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/drawable/RippleAnimationSession;
+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
 HSPLandroid/graphics/drawable/RippleDrawable;->verifyRequiredAttributes(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/RippleForeground$1;->onAnimationEnd(Landroid/animation/Animator;)V
@@ -7706,8 +7727,10 @@
 HSPLandroid/graphics/drawable/RippleShader;->setResolution(FF)V
 HSPLandroid/graphics/drawable/RippleShader;->setShader(Landroid/graphics/Shader;)V
 HSPLandroid/graphics/drawable/RippleShader;->setTouch(FF)V
+HSPLandroid/graphics/drawable/RotateDrawable$RotateState;->-$$Nest$fgetmThemeAttrs(Landroid/graphics/drawable/RotateDrawable$RotateState;)[I
 HSPLandroid/graphics/drawable/RotateDrawable$RotateState;-><init>(Landroid/graphics/drawable/RotateDrawable$RotateState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/RotateDrawable$RotateState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/RotateDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/RotateDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/RotateDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/RotateDrawable;->mutateConstantState()Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;
@@ -7781,7 +7804,7 @@
 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+]Landroid/graphics/drawable/TransitionDrawable;Landroid/graphics/drawable/TransitionDrawable;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/ColorDrawable;,Landroid/graphics/drawable/BitmapDrawable;,Landroid/graphics/drawable/StateListDrawable;
+HSPLandroid/graphics/drawable/TransitionDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/TransitionDrawable;->setCrossFadeEnabled(Z)V
 HSPLandroid/graphics/drawable/TransitionDrawable;->startTransition(I)V
 HSPLandroid/graphics/drawable/VectorDrawable$VClipPath;->canApplyTheme()Z
@@ -7802,12 +7825,12 @@
 HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->inflate(Landroid/content/res/Resources;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->isStateful()Z
 HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V+]Landroid/content/res/ComplexColor;Landroid/content/res/ColorStateList;,Landroid/content/res/GradientColor;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/graphics/Shader;Landroid/graphics/LinearGradient;]Landroid/content/res/GradientColor;Landroid/content/res/GradientColor;
+HSPLandroid/graphics/drawable/VectorDrawable$VFullPath;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/res/ComplexColor;Landroid/content/res/ColorStateList;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 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;]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$VGroup;,Landroid/graphics/drawable/VectorDrawable$VFullPath;
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;-><init>(Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/util/ArrayMap;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->addChild(Landroid/graphics/drawable/VectorDrawable$VObject;)V
 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;
@@ -7842,7 +7865,7 @@
 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+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/graphics/drawable/VectorDrawable$VGroup;
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->onTreeConstructionFinished()V
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setAlpha(F)Z
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setDensity(I)Z
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setViewportSize(FF)V
@@ -7872,7 +7895,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+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;]Landroid/graphics/ColorFilter;Landroid/graphics/BlendModeColorFilter;,Landroid/graphics/PorterDuffColorFilter;]Landroid/graphics/drawable/VectorDrawable;Landroid/graphics/drawable/VectorDrawable;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/graphics/drawable/VectorDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/VectorDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/VectorDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/VectorDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
@@ -7883,7 +7906,7 @@
 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+]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;->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;->isAutoMirrored()Z
 HSPLandroid/graphics/drawable/VectorDrawable;->isStateful()Z
@@ -7896,7 +7919,7 @@
 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+]Landroid/graphics/drawable/VectorDrawable;Landroid/graphics/drawable/VectorDrawable;
+HSPLandroid/graphics/drawable/VectorDrawable;->updateColorFilters(Landroid/graphics/BlendMode;Landroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/VectorDrawable;->updateLocalState(Landroid/content/res/Resources;)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
@@ -7930,7 +7953,6 @@
 HSPLandroid/graphics/fonts/Font;->getStyle()Landroid/graphics/fonts/FontStyle;
 HSPLandroid/graphics/fonts/FontFamily$Builder;-><init>(Landroid/graphics/fonts/Font;)V
 HSPLandroid/graphics/fonts/FontFamily$Builder;->build()Landroid/graphics/fonts/FontFamily;
-HSPLandroid/graphics/fonts/FontFamily$Builder;->build(Ljava/lang/String;IZZ)Landroid/graphics/fonts/FontFamily;+]Landroid/graphics/fonts/Font;Landroid/graphics/fonts/Font;]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/graphics/fonts/FontFamily$Builder;->makeStyleIdentifier(Landroid/graphics/fonts/Font;)I
 HSPLandroid/graphics/fonts/FontFamily;-><init>(J)V
 HSPLandroid/graphics/fonts/FontFamily;->getFont(I)Landroid/graphics/fonts/Font;
@@ -7950,9 +7972,6 @@
 HSPLandroid/graphics/text/LineBreakConfig$Builder;->setLineBreakStyle(I)Landroid/graphics/text/LineBreakConfig$Builder;
 HSPLandroid/graphics/text/LineBreakConfig$Builder;->setLineBreakWordStyle(I)Landroid/graphics/text/LineBreakConfig$Builder;
 HSPLandroid/graphics/text/LineBreakConfig;-><clinit>()V
-HSPLandroid/graphics/text/LineBreakConfig;-><init>(IIZ)V
-HSPLandroid/graphics/text/LineBreakConfig;-><init>(IIZLandroid/graphics/text/LineBreakConfig-IA;)V
-HSPLandroid/graphics/text/LineBreakConfig;->getAutoPhraseBreaking()Z
 HSPLandroid/graphics/text/LineBreakConfig;->getLineBreakConfig(II)Landroid/graphics/text/LineBreakConfig;
 HSPLandroid/graphics/text/LineBreakConfig;->getLineBreakStyle()I
 HSPLandroid/graphics/text/LineBreakConfig;->getLineBreakWordStyle()I
@@ -7980,8 +7999,8 @@
 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;->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;
+HSPLandroid/graphics/text/MeasuredText$Builder;->appendStyleRun(Landroid/graphics/Paint;Landroid/graphics/text/LineBreakConfig;IZ)Landroid/graphics/text/MeasuredText$Builder;
+HSPLandroid/graphics/text/MeasuredText$Builder;->build()Landroid/graphics/text/MeasuredText;
 HSPLandroid/graphics/text/MeasuredText$Builder;->ensureNativePtrNoReuse()V
 HSPLandroid/graphics/text/MeasuredText$Builder;->setComputeHyphenation(I)Landroid/graphics/text/MeasuredText$Builder;
 HSPLandroid/graphics/text/MeasuredText$Builder;->setComputeHyphenation(Z)Landroid/graphics/text/MeasuredText$Builder;
@@ -8087,6 +8106,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;-><init>(Landroid/hardware/camera2/impl/CameraMetadataNative;)V
 HSPLandroid/hardware/camera2/CameraCharacteristics;->get(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;
 HSPLandroid/hardware/camera2/CameraCharacteristics;->getDeviceStateListener()Landroid/hardware/camera2/CameraManager$DeviceStateListener;
 HSPLandroid/hardware/camera2/CameraCharacteristics;->overrideProperty(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;
@@ -8094,6 +8114,7 @@
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$1;->compare(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$3;-><init>(Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;Landroid/hardware/camera2/CameraManager$AvailabilityCallback;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal$6;-><init>(Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;Ljava/lang/String;Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Ljava/lang/String;)V
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->asBinder()Landroid/os/IBinder;
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->cameraIdHasConcurrentStreamsLocked(Ljava/lang/String;)Z
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->connectCameraServiceLocked()V
@@ -8101,19 +8122,23 @@
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->get()Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->getCameraIdList()[Ljava/lang/String;
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->getCameraService()Landroid/hardware/ICameraService;
-HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->getDeviceStateHandler()Landroid/os/Handler;
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->isAvailable(I)Z
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onCameraAccessPrioritiesChanged()V
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onStatusChanged(ILjava/lang/String;)V
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onStatusChangedLocked(ILjava/lang/String;)V
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onTorchStatusChanged(ILjava/lang/String;)V
 HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->onTorchStatusChangedLocked(ILjava/lang/String;)V
-HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->postSingleAccessPriorityChangeUpdate(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Ljava/util/concurrent/Executor;)V+]Ljava/util/concurrent/Executor;Landroid/hardware/camera2/impl/CameraDeviceImpl$CameraHandlerExecutor;,Landroid/os/HandlerExecutor;
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->postSingleAccessPriorityChangeUpdate(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Ljava/util/concurrent/Executor;)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->postSingleUpdate(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Ljava/util/concurrent/Executor;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/hardware/camera2/CameraManager$CameraManagerGlobal;->registerDeviceStateListener(Landroid/hardware/camera2/CameraCharacteristics;Landroid/content/Context;)V
+HSPLandroid/hardware/camera2/CameraManager$FoldStateListener;-><init>(Landroid/content/Context;)V
 HSPLandroid/hardware/camera2/CameraManager$FoldStateListener;->addDeviceStateListener(Landroid/hardware/camera2/CameraManager$DeviceStateListener;)V
 HSPLandroid/hardware/camera2/CameraManager$FoldStateListener;->handleStateChange(I)V
 HSPLandroid/hardware/camera2/CameraManager$FoldStateListener;->onBaseStateChanged(I)V
 HSPLandroid/hardware/camera2/CameraManager$FoldStateListener;->onStateChanged(I)V
 HSPLandroid/hardware/camera2/CameraManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/hardware/camera2/CameraManager;->getCameraCharacteristics(Ljava/lang/String;)Landroid/hardware/camera2/CameraCharacteristics;
+HSPLandroid/hardware/camera2/CameraManager;->getCameraCharacteristics(Ljava/lang/String;Z)Landroid/hardware/camera2/CameraCharacteristics;+]Landroid/hardware/camera2/CameraManager;Landroid/hardware/camera2/CameraManager;]Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;Landroid/hardware/camera2/CameraManager$CameraManagerGlobal;]Landroid/hardware/ICameraService;Landroid/hardware/ICameraService$Stub$Proxy;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLandroid/hardware/camera2/CameraManager;->getCameraIdList()[Ljava/lang/String;
 HSPLandroid/hardware/camera2/CameraManager;->getDisplaySize()Landroid/util/Size;
 HSPLandroid/hardware/camera2/CameraManager;->getPhysicalCameraMultiResolutionConfigs(Ljava/lang/String;Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/ICameraService;)Ljava/util/Map;
@@ -8126,13 +8151,13 @@
 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;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/impl/CameraMetadataNative$Key;->equals(Ljava/lang/Object;)Z
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative$Key;->equals(Ljava/lang/Object;)Z+]Ljava/lang/String;Ljava/lang/String;]Landroid/hardware/camera2/impl/CameraMetadataNative$Key;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;]Ljava/lang/Object;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;]Landroid/hardware/camera2/utils/TypeReference;Landroid/hardware/camera2/utils/TypeReference$SpecializedTypeReference;
 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;->get(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/hardware/camera2/impl/GetCommand;megamorphic_types
+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]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;
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->readValues(I)[B
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setCameraId(I)V
@@ -8142,11 +8167,11 @@
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->updateNativeAllocation()V
 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;megamorphic_types
 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$MarshalerArray;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;+]Landroid/hardware/camera2/marshal/Marshaler;Landroid/hardware/camera2/marshal/impl/MarshalQueryableMeteringRectangle$MarshalerMeteringRectangle;,Landroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;,Landroid/hardware/camera2/marshal/impl/MarshalQueryablePair$MarshalerPair;]Landroid/hardware/camera2/marshal/impl/MarshalQueryableArray$PrimitiveArrayFiller;Landroid/hardware/camera2/marshal/impl/MarshalQueryableArray$PrimitiveArrayFiller$1;,Landroid/hardware/camera2/marshal/impl/MarshalQueryableArray$PrimitiveArrayFiller$2;,Landroid/hardware/camera2/marshal/impl/MarshalQueryableArray$PrimitiveArrayFiller$3;,Landroid/hardware/camera2/marshal/impl/MarshalQueryableArray$PrimitiveArrayFiller$5;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableArray;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableArray;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableBoolean$MarshalerBoolean;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Boolean;
@@ -8159,7 +8184,7 @@
 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;->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;
 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
@@ -8177,8 +8202,8 @@
 HSPLandroid/hardware/camera2/utils/ConcurrentCameraIdCombination;-><init>(Landroid/os/Parcel;Landroid/hardware/camera2/utils/ConcurrentCameraIdCombination-IA;)V
 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;->containsTypeVariable(Ljava/lang/reflect/Type;)Z+]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/hardware/camera2/utils/TypeReference;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;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;
@@ -8190,6 +8215,7 @@
 HSPLandroid/hardware/devicestate/DeviceStateInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/hardware/devicestate/DeviceStateInfo;-><clinit>()V
 HSPLandroid/hardware/devicestate/DeviceStateInfo;-><init>([III)V
+HSPLandroid/hardware/devicestate/DeviceStateManager$DeviceStateCallback;->onBaseStateChanged(I)V
 HSPLandroid/hardware/devicestate/DeviceStateManager$DeviceStateCallback;->onSupportedStatesChanged([I)V
 HSPLandroid/hardware/devicestate/DeviceStateManager;-><init>()V
 HSPLandroid/hardware/devicestate/DeviceStateManager;->registerCallback(Ljava/util/concurrent/Executor;Landroid/hardware/devicestate/DeviceStateManager$DeviceStateCallback;)V
@@ -8199,7 +8225,13 @@
 HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper$$ExternalSyntheticLambda1;->run()V
 HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper$$ExternalSyntheticLambda2;-><init>(Landroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;[I)V
 HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper$$ExternalSyntheticLambda2;->run()V
+HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->$r8$lambda$6u3slsjk-8VI_sfftus20TtEKlU(Landroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;[I)V
+HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->$r8$lambda$FiFeo7UDl_Jzgv3ijVmtwGDn8K0(Landroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;I)V
+HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->$r8$lambda$yXCJCBW7G4qvEFV6LoxaomGrhSE(Landroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;I)V
 HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;-><init>(Landroid/hardware/devicestate/DeviceStateManager$DeviceStateCallback;Ljava/util/concurrent/Executor;)V
+HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->lambda$notifyBaseStateChanged$1(I)V
+HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->lambda$notifyStateChanged$2(I)V
+HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->lambda$notifySupportedStatesChanged$0([I)V
 HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->notifyBaseStateChanged(I)V
 HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->notifyStateChanged(I)V
 HSPLandroid/hardware/devicestate/DeviceStateManagerGlobal$DeviceStateCallbackWrapper;->notifySupportedStatesChanged([I)V
@@ -8248,18 +8280,28 @@
 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/DisplayManager$$ExternalSyntheticLambda0;-><init>()V
+HSPLandroid/hardware/display/DisplayManager$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
+HSPLandroid/hardware/display/DisplayManager$$ExternalSyntheticLambda2;-><init>()V
+HSPLandroid/hardware/display/DisplayManager$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
+HSPLandroid/hardware/display/DisplayManager$WeakDisplayCache;-><init>()V
+HSPLandroid/hardware/display/DisplayManager$WeakDisplayCache;-><init>(Landroid/hardware/display/DisplayManager$WeakDisplayCache-IA;)V
+HSPLandroid/hardware/display/DisplayManager$WeakDisplayCache;->get(I)Landroid/view/Display;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
+HSPLandroid/hardware/display/DisplayManager$WeakDisplayCache;->put(Landroid/view/Display;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/Display;Landroid/view/Display;
+HSPLandroid/hardware/display/DisplayManager$WeakDisplayCache;->removeStaleEntries()V+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/hardware/display/DisplayManager;->$r8$lambda$SFvjuUGZreFxYU7cOzBlo6b0tEs(Landroid/view/Display;)Z
 HSPLandroid/hardware/display/DisplayManager;-><init>(Landroid/content/Context;)V
-HSPLandroid/hardware/display/DisplayManager;->addAllDisplaysLocked(Ljava/util/ArrayList;[I)V
-HSPLandroid/hardware/display/DisplayManager;->addDisplaysLocked(Ljava/util/ArrayList;[III)V
 HSPLandroid/hardware/display/DisplayManager;->getDisplay(I)Landroid/view/Display;
 HSPLandroid/hardware/display/DisplayManager;->getDisplays()[Landroid/view/Display;
 HSPLandroid/hardware/display/DisplayManager;->getDisplays(Ljava/lang/String;)[Landroid/view/Display;
-HSPLandroid/hardware/display/DisplayManager;->getOrCreateDisplayLocked(IZ)Landroid/view/Display;
+HSPLandroid/hardware/display/DisplayManager;->getDisplays([ILjava/util/function/Predicate;)[Landroid/view/Display;+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Predicate;Landroid/hardware/display/DisplayManager$$ExternalSyntheticLambda2;,Landroid/hardware/display/DisplayManager$$ExternalSyntheticLambda0;
+HSPLandroid/hardware/display/DisplayManager;->getOrCreateDisplay(IZ)Landroid/view/Display;+]Landroid/hardware/display/DisplayManager$WeakDisplayCache;Landroid/hardware/display/DisplayManager$WeakDisplayCache;]Landroid/content/Context;missing_types]Landroid/hardware/display/DisplayManagerGlobal;Landroid/hardware/display/DisplayManagerGlobal;]Landroid/view/Display;Landroid/view/Display;
 HSPLandroid/hardware/display/DisplayManager;->getStableDisplaySize()Landroid/graphics/Point;
 HSPLandroid/hardware/display/DisplayManager;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus;
+HSPLandroid/hardware/display/DisplayManager;->isPresentationDisplay(Landroid/view/Display;)Z
 HSPLandroid/hardware/display/DisplayManager;->registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;)V
 HSPLandroid/hardware/display/DisplayManager;->registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;J)V
 HSPLandroid/hardware/display/DisplayManager;->unregisterDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;)V
@@ -8271,13 +8313,14 @@
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->$r8$lambda$aO0d1U2yv7-42_0MvY8uEf7AtpE(Landroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;JLandroid/os/Message;)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;-><init>(Landroid/hardware/display/DisplayManager$DisplayListener;Ljava/util/concurrent/Executor;J)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->clearEvents()V
-HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->handleMessage(Landroid/os/Message;)V
-HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->lambda$sendDisplayEvent$0(JLandroid/os/Message;)V+]Landroid/os/Message;Landroid/os/Message;]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;
+HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->handleMessage(Landroid/os/Message;)V+]Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/view/Display$HdrSdrRatioListenerWrapper;
+HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->lambda$sendDisplayEvent$0(JLandroid/os/Message;)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;->sendDisplayEvent(IILandroid/view/DisplayInfo;)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;-><init>(Landroid/hardware/display/DisplayManagerGlobal;)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;-><init>(Landroid/hardware/display/DisplayManagerGlobal;Landroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback-IA;)V
 HSPLandroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;->onDisplayEvent(II)V
 HSPLandroid/hardware/display/DisplayManagerGlobal;->-$$Nest$fgetmDm(Landroid/hardware/display/DisplayManagerGlobal;)Landroid/hardware/display/IDisplayManager;
+HSPLandroid/hardware/display/DisplayManagerGlobal;->-$$Nest$mhandleDisplayEvent(Landroid/hardware/display/DisplayManagerGlobal;II)V
 HSPLandroid/hardware/display/DisplayManagerGlobal;-><init>(Landroid/hardware/display/IDisplayManager;)V
 HSPLandroid/hardware/display/DisplayManagerGlobal;->calculateEventsMaskLocked()I
 HSPLandroid/hardware/display/DisplayManagerGlobal;->findDisplayListenerLocked(Landroid/hardware/display/DisplayManager$DisplayListener;)I
@@ -8292,7 +8335,7 @@
 HSPLandroid/hardware/display/DisplayManagerGlobal;->getPreferredWideGamutColorSpace()Landroid/graphics/ColorSpace;
 HSPLandroid/hardware/display/DisplayManagerGlobal;->getStableDisplaySize()Landroid/graphics/Point;
 HSPLandroid/hardware/display/DisplayManagerGlobal;->getWifiDisplayStatus()Landroid/hardware/display/WifiDisplayStatus;
-HSPLandroid/hardware/display/DisplayManagerGlobal;->handleDisplayEvent(II)V
+HSPLandroid/hardware/display/DisplayManagerGlobal;->handleDisplayEvent(II)V+]Landroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;Landroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
 HSPLandroid/hardware/display/DisplayManagerGlobal;->registerCallbackIfNeededLocked()V
 HSPLandroid/hardware/display/DisplayManagerGlobal;->registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;J)V
 HSPLandroid/hardware/display/DisplayManagerGlobal;->registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Ljava/util/concurrent/Executor;J)V
@@ -8306,7 +8349,7 @@
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getDisplayIds(Z)[I
-HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getDisplayInfo(I)Landroid/view/DisplayInfo;
+HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getDisplayInfo(I)Landroid/view/DisplayInfo;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/hardware/display/IDisplayManager$Stub$Proxy;Landroid/hardware/display/IDisplayManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getOverlaySupport()Landroid/hardware/OverlayProperties;
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getPreferredWideGamutColorSpaceId()I
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getStableDisplaySize()Landroid/graphics/Point;
@@ -8352,17 +8395,25 @@
 HSPLandroid/hardware/input/IInputManager$Stub$Proxy;->registerInputDevicesChangedListener(Landroid/hardware/input/IInputDevicesChangedListener;)V
 HSPLandroid/hardware/input/IInputManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/input/IInputManager;
 HSPLandroid/hardware/input/InputDeviceIdentifier;-><init>(Ljava/lang/String;II)V
-HSPLandroid/hardware/input/InputManager;-><init>()V
+HSPLandroid/hardware/input/InputManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/hardware/input/InputManager;->deviceHasKeys(I[I)[Z
 HSPLandroid/hardware/input/InputManager;->getInputDevice(I)Landroid/view/InputDevice;
 HSPLandroid/hardware/input/InputManager;->getInputDeviceIds()[I
 HSPLandroid/hardware/input/InputManager;->getInstance()Landroid/hardware/input/InputManager;
-HSPLandroid/hardware/input/InputManager;->getInstance(Landroid/content/Context;)Landroid/hardware/input/InputManager;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLandroid/hardware/input/InputManager;->registerInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;Landroid/os/Handler;)V
 HSPLandroid/hardware/input/InputManager;->unregisterInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;)V
+HSPLandroid/hardware/input/InputManagerGlobal$InputDeviceListenerDelegate;-><init>(Landroid/hardware/input/InputManager$InputDeviceListener;Landroid/os/Handler;)V
+HSPLandroid/hardware/input/InputManagerGlobal$InputDevicesChangedListener;-><init>(Landroid/hardware/input/InputManagerGlobal;)V
+HSPLandroid/hardware/input/InputManagerGlobal$InputDevicesChangedListener;-><init>(Landroid/hardware/input/InputManagerGlobal;Landroid/hardware/input/InputManagerGlobal$InputDevicesChangedListener-IA;)V
 HSPLandroid/hardware/input/InputManagerGlobal;-><init>(Landroid/hardware/input/IInputManager;)V
+HSPLandroid/hardware/input/InputManagerGlobal;->getInputDevice(I)Landroid/view/InputDevice;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/hardware/input/IInputManager;Landroid/hardware/input/IInputManager$Stub$Proxy;
+HSPLandroid/hardware/input/InputManagerGlobal;->getInputDeviceIds()[I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/hardware/input/InputManagerGlobal;->getInputManagerService()Landroid/hardware/input/IInputManager;
 HSPLandroid/hardware/input/InputManagerGlobal;->getInstance()Landroid/hardware/input/InputManagerGlobal;
+HSPLandroid/hardware/input/InputManagerGlobal;->onInputDevicesChanged([I)V+]Landroid/view/InputDevice;Landroid/view/InputDevice;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/hardware/input/InputManagerGlobal;->populateInputDevicesLocked()V
+HSPLandroid/hardware/input/InputManagerGlobal;->registerInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;Landroid/os/Handler;)V
+HSPLandroid/hardware/input/InputSettings;->isStylusPointerIconEnabled(Landroid/content/Context;)Z
 HSPLandroid/hardware/location/ContextHubClient;-><init>(Landroid/hardware/location/ContextHubInfo;Z)V
 HSPLandroid/hardware/location/ContextHubClient;->sendMessageToNanoApp(Landroid/hardware/location/NanoAppMessage;)I
 HSPLandroid/hardware/location/ContextHubClient;->setClientProxy(Landroid/hardware/location/IContextHubClient;)V
@@ -8446,7 +8497,7 @@
 HSPLandroid/hardware/security/keymint/KeyParameterValue;->integer(I)Landroid/hardware/security/keymint/KeyParameterValue;
 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
+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/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
@@ -8536,8 +8587,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+]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
+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+]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
@@ -8576,7 +8627,7 @@
 HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$CurrencySink;->put(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;Z)V
 HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$FormattingData;-><init>(Ljava/lang/String;)V
 HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;-><init>(Landroid/icu/util/ULocale;Landroid/icu/impl/ICUResourceBundle;Z)V
-HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->fetchFormattingData(Ljava/lang/String;)Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$FormattingData;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->fetchFormattingData(Ljava/lang/String;)Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo$FormattingData;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
 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;
@@ -8592,11 +8643,11 @@
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo$UniqueList;->add(Ljava/lang/Object;)V
 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;+]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;]Landroid/icu/impl/ICUCurrencyMetaInfo$Collector;Landroid/icu/impl/ICUCurrencyMetaInfo$CurrencyCollector;
-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;->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+]Ljava/lang/String;Ljava/lang/String;]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
+HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->getDate(Landroid/icu/impl/ICUResourceBundle;JZ)J+]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceIntVector;
 HSPLandroid/icu/impl/ICUData;->checkStreamForBinaryData(Ljava/io/InputStream;Ljava/lang/String;)V
 HSPLandroid/icu/impl/ICUData;->getStream(Ljava/lang/ClassLoader;Ljava/lang/String;Z)Ljava/io/InputStream;
 HSPLandroid/icu/impl/ICULocaleService$ICUResourceBundleFactory;->getSupportedIDs()Ljava/util/Set;
@@ -8641,15 +8692,15 @@
 HSPLandroid/icu/impl/ICUResourceBundle;-><init>(Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;)V
 HSPLandroid/icu/impl/ICUResourceBundle;->addBundleBaseNamesFromClassLoader(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/util/Set;)V
 HSPLandroid/icu/impl/ICUResourceBundle;->at(I)Landroid/icu/impl/ICUResourceBundle;
-HSPLandroid/icu/impl/ICUResourceBundle;->at(Ljava/lang/String;)Landroid/icu/impl/ICUResourceBundle;
-HSPLandroid/icu/impl/ICUResourceBundle;->countPathKeys(Ljava/lang/String;)I
+HSPLandroid/icu/impl/ICUResourceBundle;->at(Ljava/lang/String;)Landroid/icu/impl/ICUResourceBundle;+]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
+HSPLandroid/icu/impl/ICUResourceBundle;->countPathKeys(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundle;->createBundle(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->createFullLocaleNameSet(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/util/Set;
 HSPLandroid/icu/impl/ICUResourceBundle;->equals(Ljava/lang/Object;)Z
 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$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;]Ljava/lang/String;Ljava/lang/String;]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;
@@ -8664,7 +8715,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;+]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;
+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;Z)Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->getDefaultScript(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundle;->getExplicitParent(Ljava/lang/String;)Ljava/lang/String;
@@ -8694,22 +8745,22 @@
 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;->getSize()I
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;->getContainerResource(I)I+]Landroid/icu/impl/ICUResourceBundleReader$Container;Landroid/icu/impl/ICUResourceBundleReader$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;,Landroid/icu/impl/ICUResourceBundleReader$Array32;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;->getSize()I+]Landroid/icu/impl/ICUResourceBundleReader$Container;Landroid/icu/impl/ICUResourceBundleReader$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;,Landroid/icu/impl/ICUResourceBundleReader$Array32;
 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
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceInt;->getInt()I
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceIntVector;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceIntVector;->getIntVector()[I
-HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceString;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V+]Landroid/icu/impl/ICUResourceBundleReader;Landroid/icu/impl/ICUResourceBundleReader;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceString;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/impl/ICUResourceBundleReader;Landroid/icu/impl/ICUResourceBundleReader;
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceString;->getString()Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceString;->getType()I
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;-><init>(Landroid/icu/impl/ICUResourceBundle$WholeBundle;I)V
-HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V+]Landroid/icu/impl/ICUResourceBundleReader;Landroid/icu/impl/ICUResourceBundleReader;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
 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;+]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;->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$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGetObject(Ljava/lang/String;)Ljava/lang/Object;
 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
@@ -8722,7 +8773,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+]Ljava/nio/CharBuffer;Ljava/nio/ByteBufferAsCharBuffer;
+HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getContainer16Resource(Landroid/icu/impl/ICUResourceBundleReader;I)I
 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
@@ -8744,7 +8795,7 @@
 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;+]Ljava/lang/ref/SoftReference;Ljava/lang/ref/SoftReference;]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->get(I)Ljava/lang/Object;+]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;
 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;
@@ -8756,8 +8807,8 @@
 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+]Landroid/icu/impl/ICUResourceBundleReader$Table;Landroid/icu/impl/ICUResourceBundleReader$Table;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;,Landroid/icu/impl/ICUResourceBundleReader$Table16;
+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
@@ -8765,6 +8816,7 @@
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$mgetInt(Landroid/icu/impl/ICUResourceBundleReader;I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$mgetResourceByteOffset(Landroid/icu/impl/ICUResourceBundleReader;I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$mgetTableKeyOffsets(Landroid/icu/impl/ICUResourceBundleReader;I)[C
+HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$msetKeyFromKey16(Landroid/icu/impl/ICUResourceBundleReader;ILandroid/icu/impl/UResource$Key;)V
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$sfgetNULL_READER()Landroid/icu/impl/ICUResourceBundleReader;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$sfgetPUBLIC_TYPES()[I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$smRES_GET_OFFSET(I)I
@@ -8782,7 +8834,7 @@
 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;->getIndexesInt(I)I
-HSPLandroid/icu/impl/ICUResourceBundleReader;->getInt(I)I+]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getInt(I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getIntVector(I)[I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getInts(II)[I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getKey16String(I)Ljava/lang/String;
@@ -8791,8 +8843,8 @@
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getResourceByteOffset(I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getRootResource()I
 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;->getStringV2(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getTable(I)Landroid/icu/impl/ICUResourceBundleReader$Table;+]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getTable16KeyOffsets(I)[C
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getTableKeyOffsets(I)[C
 HSPLandroid/icu/impl/ICUResourceBundleReader;->init(Ljava/nio/ByteBuffer;)V
@@ -8805,8 +8857,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;+]Landroid/icu/text/UCharacterIterator;Landroid/icu/impl/ReplaceableUCharacterIterator;]Ljava/lang/StringBuffer;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;
 HSPLandroid/icu/impl/IDNA2003;->getSeparatorIndex([CII)I
 HSPLandroid/icu/impl/IDNA2003;->isLDHChar(I)Z
 HSPLandroid/icu/impl/IDNA2003;->isLabelSeparator(I)Z
@@ -8814,22 +8866,22 @@
 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;
 HSPLandroid/icu/impl/LocaleIDParser;->getCountry()Ljava/lang/String;
 HSPLandroid/icu/impl/LocaleIDParser;->getKeyComparator()Ljava/util/Comparator;
 HSPLandroid/icu/impl/LocaleIDParser;->getKeyword()Ljava/lang/String;
-HSPLandroid/icu/impl/LocaleIDParser;->getKeywordMap()Ljava/util/Map;+]Ljava/util/TreeMap;Ljava/util/TreeMap;
-HSPLandroid/icu/impl/LocaleIDParser;->getKeywordValue(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;]Ljava/util/Map;Ljava/util/Collections$EmptyMap;,Ljava/util/TreeMap;
+HSPLandroid/icu/impl/LocaleIDParser;->getKeywordMap()Ljava/util/Map;
+HSPLandroid/icu/impl/LocaleIDParser;->getKeywordValue(Ljava/lang/String;)Ljava/lang/String;+]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;
 HSPLandroid/icu/impl/LocaleIDParser;->getKeywords()Ljava/util/Iterator;
 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
@@ -8840,10 +8892,10 @@
 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+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/icu/impl/LocaleIDParser;->parseCountry()I
 HSPLandroid/icu/impl/LocaleIDParser;->parseKeywords()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;->parseLanguage()I
+HSPLandroid/icu/impl/LocaleIDParser;->parseScript()I
 HSPLandroid/icu/impl/LocaleIDParser;->parseVariant()I
 HSPLandroid/icu/impl/LocaleIDParser;->reset()V
 HSPLandroid/icu/impl/LocaleIDParser;->setKeywordValue(Ljava/lang/String;Ljava/lang/String;)V
@@ -8872,7 +8924,7 @@
 HSPLandroid/icu/impl/Normalizer2Impl;->addToStartSet(Landroid/icu/util/MutableCodePointTrie;II)V
 HSPLandroid/icu/impl/Normalizer2Impl;->composeQuickCheck(Ljava/lang/CharSequence;IIZZ)I
 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+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/icu/impl/Normalizer2Impl;->decompose(Ljava/lang/CharSequence;IILandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)I
 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
@@ -8896,17 +8948,17 @@
 HSPLandroid/icu/impl/OlsonTimeZone;->getNextTransition(JZ)Landroid/icu/util/TimeZoneTransition;
 HSPLandroid/icu/impl/OlsonTimeZone;->getOffset(JZ[I)V
 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;->hashCode()I
 HSPLandroid/icu/impl/OlsonTimeZone;->initTransitionRules()V
 HSPLandroid/icu/impl/OlsonTimeZone;->initialDstOffset()I
 HSPLandroid/icu/impl/OlsonTimeZone;->initialRawOffset()I
 HSPLandroid/icu/impl/OlsonTimeZone;->isFrozen()Z
 HSPLandroid/icu/impl/OlsonTimeZone;->loadRule(Landroid/icu/util/UResourceBundle;Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
-HSPLandroid/icu/impl/OlsonTimeZone;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/icu/impl/OlsonTimeZone;->toString()Ljava/lang/String;
 HSPLandroid/icu/impl/PatternProps;->isWhiteSpace(I)Z
 HSPLandroid/icu/impl/PatternProps;->skipWhiteSpace(Ljava/lang/CharSequence;I)I
 HSPLandroid/icu/impl/PatternTokenizer;-><init>()V
-HSPLandroid/icu/impl/PatternTokenizer;->next(Ljava/lang/StringBuffer;)I
+HSPLandroid/icu/impl/PatternTokenizer;->next(Ljava/lang/StringBuffer;)I+]Landroid/icu/text/UnicodeSet;Landroid/icu/text/UnicodeSet;
 HSPLandroid/icu/impl/PatternTokenizer;->quoteLiteral(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/impl/PatternTokenizer;->setExtraQuotingCharacters(Landroid/icu/text/UnicodeSet;)Landroid/icu/impl/PatternTokenizer;
 HSPLandroid/icu/impl/PatternTokenizer;->setPattern(Ljava/lang/String;)Landroid/icu/impl/PatternTokenizer;
@@ -8944,7 +8996,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;+]Landroid/icu/impl/CacheValue;Landroid/icu/impl/CacheValue$SoftValue;,Landroid/icu/impl/CacheValue$NullValue;]Landroid/icu/impl/SoftCache;megamorphic_types]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
+HSPLandroid/icu/impl/SoftCache;->getInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/icu/impl/CacheValue;Landroid/icu/impl/CacheValue$SoftValue;,Landroid/icu/impl/CacheValue$NullValue;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
 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;
@@ -8954,12 +9006,12 @@
 HSPLandroid/icu/impl/StaticUnicodeSets;->get(Landroid/icu/impl/StaticUnicodeSets$Key;)Landroid/icu/text/UnicodeSet;
 HSPLandroid/icu/impl/StringSegment;-><init>(Ljava/lang/String;Z)V
 HSPLandroid/icu/impl/StringSegment;->adjustOffset(I)V
-HSPLandroid/icu/impl/StringSegment;->charAt(I)C
+HSPLandroid/icu/impl/StringSegment;->charAt(I)C+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/impl/StringSegment;->codePointsEqual(IIZ)Z
-HSPLandroid/icu/impl/StringSegment;->getCodePoint()I
+HSPLandroid/icu/impl/StringSegment;->getCodePoint()I+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/impl/StringSegment;->getCommonPrefixLength(Ljava/lang/CharSequence;)I
 HSPLandroid/icu/impl/StringSegment;->getOffset()I
-HSPLandroid/icu/impl/StringSegment;->getPrefixLengthInternal(Ljava/lang/CharSequence;Z)I
+HSPLandroid/icu/impl/StringSegment;->getPrefixLengthInternal(Ljava/lang/CharSequence;Z)I+]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;
 HSPLandroid/icu/impl/StringSegment;->length()I
 HSPLandroid/icu/impl/StringSegment;->startsWith(Landroid/icu/text/UnicodeSet;)Z
 HSPLandroid/icu/impl/StringSegment;->startsWith(Ljava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;
@@ -9164,7 +9216,7 @@
 HSPLandroid/icu/impl/coll/UVector32;->addElement(I)V
 HSPLandroid/icu/impl/coll/UVector32;->ensureAppendCapacity()V
 HSPLandroid/icu/impl/coll/UVector64;-><init>()V
-HSPLandroid/icu/impl/locale/AsciiUtil;->caseIgnoreMatch(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLandroid/icu/impl/locale/AsciiUtil;->caseIgnoreMatch(Ljava/lang/String;Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/impl/locale/AsciiUtil;->isAlpha(C)Z
 HSPLandroid/icu/impl/locale/AsciiUtil;->isAlphaString(Ljava/lang/String;)Z
 HSPLandroid/icu/impl/locale/AsciiUtil;->toLower(C)C
@@ -9182,7 +9234,7 @@
 HSPLandroid/icu/impl/locale/BaseLocale$Key;->-$$Nest$fget_vart(Landroid/icu/impl/locale/BaseLocale$Key;)Ljava/lang/String;
 HSPLandroid/icu/impl/locale/BaseLocale$Key;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/icu/impl/locale/BaseLocale$Key;->equals(Ljava/lang/Object;)Z
-HSPLandroid/icu/impl/locale/BaseLocale$Key;->hashCode()I
+HSPLandroid/icu/impl/locale/BaseLocale$Key;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
 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
@@ -9196,8 +9248,17 @@
 HSPLandroid/icu/impl/locale/InternalLocaleBuilder;->getLocaleExtensions()Landroid/icu/impl/locale/LocaleExtensions;
 HSPLandroid/icu/impl/locale/InternalLocaleBuilder;->setLanguage(Ljava/lang/String;)Landroid/icu/impl/locale/InternalLocaleBuilder;
 HSPLandroid/icu/impl/locale/InternalLocaleBuilder;->setRegion(Ljava/lang/String;)Landroid/icu/impl/locale/InternalLocaleBuilder;
+HSPLandroid/icu/impl/locale/LanguageTag;-><init>()V
+HSPLandroid/icu/impl/locale/LanguageTag;->canonicalizeLanguage(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/locale/LanguageTag;->getExtensions()Ljava/util/List;
+HSPLandroid/icu/impl/locale/LanguageTag;->getLanguage()Ljava/lang/String;
+HSPLandroid/icu/impl/locale/LanguageTag;->getPrivateuse()Ljava/lang/String;
+HSPLandroid/icu/impl/locale/LanguageTag;->getRegion()Ljava/lang/String;
+HSPLandroid/icu/impl/locale/LanguageTag;->getScript()Ljava/lang/String;
+HSPLandroid/icu/impl/locale/LanguageTag;->getVariants()Ljava/util/List;
 HSPLandroid/icu/impl/locale/LanguageTag;->isLanguage(Ljava/lang/String;)Z
 HSPLandroid/icu/impl/locale/LanguageTag;->isRegion(Ljava/lang/String;)Z
+HSPLandroid/icu/impl/locale/LanguageTag;->parseLocale(Landroid/icu/impl/locale/BaseLocale;Landroid/icu/impl/locale/LocaleExtensions;)Landroid/icu/impl/locale/LanguageTag;+]Landroid/icu/impl/locale/LocaleExtensions;Landroid/icu/impl/locale/LocaleExtensions;]Landroid/icu/impl/locale/BaseLocale;Landroid/icu/impl/locale/BaseLocale;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/icu/impl/locale/StringTokenIterator;Landroid/icu/impl/locale/StringTokenIterator;
 HSPLandroid/icu/impl/locale/LocaleExtensions;->getKeys()Ljava/util/Set;
 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;
@@ -9214,20 +9275,20 @@
 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+]Ljava/lang/CharSequence;Ljava/lang/String;
-HSPLandroid/icu/impl/number/AffixUtils;->hasNext(JLjava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/lang/StringBuilder;
+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+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/icu/impl/number/AffixUtils;->nextToken(JLjava/lang/CharSequence;)J
 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+]Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;
+HSPLandroid/icu/impl/number/ConstantAffixModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I
 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
 HSPLandroid/icu/impl/number/ConstantMultiFieldModifier;->getPrefixLength()I
 HSPLandroid/icu/impl/number/CurrencySpacingEnabledModifier;->applyCurrencySpacing(Landroid/icu/impl/FormattedStringBuilder;IIIILandroid/icu/text/DecimalFormatSymbols;)I
 HSPLandroid/icu/impl/number/CurrencySpacingEnabledModifier;->applyCurrencySpacingAffix(Landroid/icu/impl/FormattedStringBuilder;IBLandroid/icu/text/DecimalFormatSymbols;)I
-HSPLandroid/icu/impl/number/CustomSymbolCurrency;->resolve(Landroid/icu/util/Currency;Landroid/icu/util/ULocale;Landroid/icu/text/DecimalFormatSymbols;)Landroid/icu/util/Currency;
+HSPLandroid/icu/impl/number/CustomSymbolCurrency;->resolve(Landroid/icu/util/Currency;Landroid/icu/util/ULocale;Landroid/icu/text/DecimalFormatSymbols;)Landroid/icu/util/Currency;+]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/util/Currency;Landroid/icu/util/Currency;
 HSPLandroid/icu/impl/number/DecimalFormatProperties;-><init>()V
 HSPLandroid/icu/impl/number/DecimalFormatProperties;->_clear()Landroid/icu/impl/number/DecimalFormatProperties;
 HSPLandroid/icu/impl/number/DecimalFormatProperties;->_copyFrom(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/DecimalFormatProperties;
@@ -9310,11 +9371,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+]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;->convertToAccurateDouble()V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->copyFrom(Landroid/icu/impl/number/DecimalQuantity;)V
-HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->fitsInLong()Z
-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;->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;->getLowerDisplayMagnitude()I
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->getMagnitude()I
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->getPluralOperand(Landroid/icu/text/PluralRules$Operand;)D
@@ -9327,20 +9388,20 @@
 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+]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;->roundToMagnitude(ILjava/math/MathContext;Z)V
 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;->setToBigDecimal(Ljava/math/BigDecimal;)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+]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;->setToLong(J)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->signum()Landroid/icu/impl/number/Modifier$Signum;
 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
 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+]Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
+HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(J)V
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(Ljava/lang/Number;)V
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(Ljava/math/BigDecimal;)V
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->compact()V
@@ -9356,9 +9417,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;+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/Grouper;->forProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/Grouper;
 HSPLandroid/icu/impl/number/Grouper;->getInstance(SSS)Landroid/icu/impl/number/Grouper;
-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;->getMinGroupingForLocale(Landroid/icu/util/ULocale;)S
 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
@@ -9380,16 +9441,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+]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;
+HSPLandroid/icu/impl/number/MutablePatternModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I
 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+]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;
+HSPLandroid/icu/impl/number/MutablePatternModifier;->needsPlurals()Z
 HSPLandroid/icu/impl/number/MutablePatternModifier;->prepareAffix(Z)V
-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;->processQuantity(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
 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
@@ -9403,53 +9464,53 @@
 HSPLandroid/icu/impl/number/PatternStringParser$ParserState;-><init>(Ljava/lang/String;)V
 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+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
+HSPLandroid/icu/impl/number/PatternStringParser;->consumeAffix(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)J
 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+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
+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+]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
+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+]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;->consumePattern(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;)V
 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+]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/PatternStringParser;->patternInfoToProperties(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;I)V
 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;
-HSPLandroid/icu/impl/number/PatternStringUtils;->propertiesToPatternString(Landroid/icu/impl/number/DecimalFormatProperties;)Ljava/lang/String;
-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
+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
+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/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;+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->forProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/AffixPatternProvider;
 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
-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/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/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;+]Landroid/icu/number/Scale;Landroid/icu/number/Scale;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/impl/number/RoundingUtils;->scaleFromProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/number/Scale;
 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
 HSPLandroid/icu/impl/number/parse/AffixMatcher$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/icu/impl/number/parse/AffixMatcher;-><init>(Landroid/icu/impl/number/parse/AffixPatternMatcher;Landroid/icu/impl/number/parse/AffixPatternMatcher;I)V
-HSPLandroid/icu/impl/number/parse/AffixMatcher;->createMatchers(Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/parse/NumberParserImpl;Landroid/icu/impl/number/parse/AffixTokenMatcherFactory;Landroid/icu/impl/number/parse/IgnorablesMatcher;I)V
+HSPLandroid/icu/impl/number/parse/AffixMatcher;->createMatchers(Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/parse/NumberParserImpl;Landroid/icu/impl/number/parse/AffixTokenMatcherFactory;Landroid/icu/impl/number/parse/IgnorablesMatcher;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/number/parse/NumberParserImpl;Landroid/icu/impl/number/parse/NumberParserImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/icu/impl/number/parse/AffixMatcher;->getInstance(Landroid/icu/impl/number/parse/AffixPatternMatcher;Landroid/icu/impl/number/parse/AffixPatternMatcher;I)Landroid/icu/impl/number/parse/AffixMatcher;
 HSPLandroid/icu/impl/number/parse/AffixMatcher;->isInteresting(Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/parse/IgnorablesMatcher;I)Z
 HSPLandroid/icu/impl/number/parse/AffixMatcher;->length(Landroid/icu/impl/number/parse/AffixPatternMatcher;)I
 HSPLandroid/icu/impl/number/parse/AffixMatcher;->match(Landroid/icu/impl/StringSegment;Landroid/icu/impl/number/parse/ParsedNumber;)Z
 HSPLandroid/icu/impl/number/parse/AffixMatcher;->matched(Landroid/icu/impl/number/parse/AffixPatternMatcher;Ljava/lang/String;)Z
 HSPLandroid/icu/impl/number/parse/AffixMatcher;->postProcess(Landroid/icu/impl/number/parse/ParsedNumber;)V
-HSPLandroid/icu/impl/number/parse/AffixMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z
+HSPLandroid/icu/impl/number/parse/AffixMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z+]Landroid/icu/impl/number/parse/AffixPatternMatcher;Landroid/icu/impl/number/parse/AffixPatternMatcher;
 HSPLandroid/icu/impl/number/parse/AffixPatternMatcher;-><init>(Ljava/lang/String;)V
 HSPLandroid/icu/impl/number/parse/AffixPatternMatcher;->consumeToken(I)V
 HSPLandroid/icu/impl/number/parse/AffixPatternMatcher;->equals(Ljava/lang/Object;)Z
@@ -9457,10 +9518,10 @@
 HSPLandroid/icu/impl/number/parse/AffixPatternMatcher;->getPattern()Ljava/lang/String;
 HSPLandroid/icu/impl/number/parse/AffixTokenMatcherFactory;-><init>()V
 HSPLandroid/icu/impl/number/parse/AffixTokenMatcherFactory;->minusSign()Landroid/icu/impl/number/parse/MinusSignMatcher;
-HSPLandroid/icu/impl/number/parse/DecimalMatcher;-><init>(Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/Grouper;I)V
+HSPLandroid/icu/impl/number/parse/DecimalMatcher;-><init>(Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/Grouper;I)V+]Landroid/icu/impl/number/Grouper;Landroid/icu/impl/number/Grouper;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;
 HSPLandroid/icu/impl/number/parse/DecimalMatcher;->getInstance(Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/Grouper;I)Landroid/icu/impl/number/parse/DecimalMatcher;
 HSPLandroid/icu/impl/number/parse/DecimalMatcher;->match(Landroid/icu/impl/StringSegment;Landroid/icu/impl/number/parse/ParsedNumber;)Z
-HSPLandroid/icu/impl/number/parse/DecimalMatcher;->match(Landroid/icu/impl/StringSegment;Landroid/icu/impl/number/parse/ParsedNumber;I)Z+]Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;]Landroid/icu/impl/number/parse/ParsedNumber;Landroid/icu/impl/number/parse/ParsedNumber;]Landroid/icu/text/UnicodeSet;Landroid/icu/text/UnicodeSet;]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;
+HSPLandroid/icu/impl/number/parse/DecimalMatcher;->match(Landroid/icu/impl/StringSegment;Landroid/icu/impl/number/parse/ParsedNumber;I)Z+]Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/impl/number/parse/ParsedNumber;Landroid/icu/impl/number/parse/ParsedNumber;]Landroid/icu/text/UnicodeSet;Landroid/icu/text/UnicodeSet;]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;
 HSPLandroid/icu/impl/number/parse/DecimalMatcher;->postProcess(Landroid/icu/impl/number/parse/ParsedNumber;)V
 HSPLandroid/icu/impl/number/parse/DecimalMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z
 HSPLandroid/icu/impl/number/parse/DecimalMatcher;->validateGroup(IIZ)Z
@@ -9471,10 +9532,10 @@
 HSPLandroid/icu/impl/number/parse/NumberParserImpl;-><init>(I)V
 HSPLandroid/icu/impl/number/parse/NumberParserImpl;->addMatcher(Landroid/icu/impl/number/parse/NumberParseMatcher;)V
 HSPLandroid/icu/impl/number/parse/NumberParserImpl;->addMatchers(Ljava/util/Collection;)V
-HSPLandroid/icu/impl/number/parse/NumberParserImpl;->createParserFromProperties(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/text/DecimalFormatSymbols;Z)Landroid/icu/impl/number/parse/NumberParserImpl;
+HSPLandroid/icu/impl/number/parse/NumberParserImpl;->createParserFromProperties(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/text/DecimalFormatSymbols;Z)Landroid/icu/impl/number/parse/NumberParserImpl;+]Landroid/icu/impl/number/Grouper;Landroid/icu/impl/number/Grouper;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;]Landroid/icu/impl/number/parse/NumberParserImpl;Landroid/icu/impl/number/parse/NumberParserImpl;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
 HSPLandroid/icu/impl/number/parse/NumberParserImpl;->freeze()V
 HSPLandroid/icu/impl/number/parse/NumberParserImpl;->getParseFlags()I
-HSPLandroid/icu/impl/number/parse/NumberParserImpl;->parse(Ljava/lang/String;IZLandroid/icu/impl/number/parse/ParsedNumber;)V+]Landroid/icu/impl/number/parse/ParsedNumber;Landroid/icu/impl/number/parse/ParsedNumber;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/icu/impl/number/parse/NumberParseMatcher;megamorphic_types]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLandroid/icu/impl/number/parse/NumberParserImpl;->parse(Ljava/lang/String;IZLandroid/icu/impl/number/parse/ParsedNumber;)V+]Landroid/icu/impl/number/parse/ParsedNumber;Landroid/icu/impl/number/parse/ParsedNumber;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/icu/impl/number/parse/NumberParseMatcher;megamorphic_types]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;
 HSPLandroid/icu/impl/number/parse/NumberParserImpl;->parseGreedy(Landroid/icu/impl/StringSegment;Landroid/icu/impl/number/parse/ParsedNumber;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/icu/impl/number/parse/NumberParseMatcher;megamorphic_types]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;
 HSPLandroid/icu/impl/number/parse/ParsedNumber;-><init>()V
 HSPLandroid/icu/impl/number/parse/ParsedNumber;->clear()V
@@ -9496,9 +9557,9 @@
 HSPLandroid/icu/impl/number/parse/SeriesMatcher;-><init>()V
 HSPLandroid/icu/impl/number/parse/SeriesMatcher;->addMatcher(Landroid/icu/impl/number/parse/NumberParseMatcher;)V
 HSPLandroid/icu/impl/number/parse/SeriesMatcher;->freeze()V
-HSPLandroid/icu/impl/number/parse/SeriesMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z
+HSPLandroid/icu/impl/number/parse/SeriesMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/icu/impl/number/parse/NumberParseMatcher;Landroid/icu/impl/number/parse/MinusSignMatcher;
 HSPLandroid/icu/impl/number/parse/SymbolMatcher;->postProcess(Landroid/icu/impl/number/parse/ParsedNumber;)V
-HSPLandroid/icu/impl/number/parse/SymbolMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z
+HSPLandroid/icu/impl/number/parse/SymbolMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z+]Landroid/icu/impl/StringSegment;Landroid/icu/impl/StringSegment;
 HSPLandroid/icu/impl/number/parse/ValidationMatcher;-><init>()V
 HSPLandroid/icu/impl/number/parse/ValidationMatcher;->smokeTest(Landroid/icu/impl/StringSegment;)Z
 HSPLandroid/icu/impl/number/range/StandardPluralRanges$PluralRangeSetsDataSink;-><clinit>()V
@@ -9514,11 +9575,11 @@
 HSPLandroid/icu/impl/number/range/StandardPluralRanges;->getSetForLocale(Landroid/icu/util/ULocale;)Ljava/lang/String;
 HSPLandroid/icu/impl/number/range/StandardPluralRanges;->setCapacity(I)V
 HSPLandroid/icu/lang/UCharacter;->codePointAt(Ljava/lang/CharSequence;I)I
-HSPLandroid/icu/lang/UCharacter;->digit(I)I
-HSPLandroid/icu/lang/UCharacter;->foldCase(II)I
+HSPLandroid/icu/lang/UCharacter;->digit(I)I+]Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;
+HSPLandroid/icu/lang/UCharacter;->foldCase(II)I+]Landroid/icu/impl/UCaseProps;Landroid/icu/impl/UCaseProps;
 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
@@ -9531,13 +9592,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+]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;->computeCompiled()Z
 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;+]Landroid/icu/number/LocalizedNumberFormatter;Landroid/icu/number/LocalizedNumberFormatter;
+HSPLandroid/icu/number/LocalizedNumberFormatter;->formatImpl(Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;)Landroid/icu/impl/number/MicroProps;
 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;
@@ -9549,25 +9610,25 @@
 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;+]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;
 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;+]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;->preProcessUnsafe(Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
 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+]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;
+HSPLandroid/icu/number/NumberFormatterImpl;->writeAffixes(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/FormattedStringBuilder;II)I
 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+]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/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
 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;->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;+]Landroid/icu/number/UnlocalizedNumberFormatter;Landroid/icu/number/UnlocalizedNumberFormatter;
+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/Precision$FractionRounderImpl;-><init>(II)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;->apply(Landroid/icu/impl/number/DecimalQuantity;)V
 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
@@ -9578,14 +9639,14 @@
 HSPLandroid/icu/number/Precision;->constructFromCurrency(Landroid/icu/number/CurrencyPrecision;Landroid/icu/util/Currency;)Landroid/icu/number/Precision;
 HSPLandroid/icu/number/Precision;->getDisplayMagnitudeFraction(I)I
 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;->setResolvedMinFraction(Landroid/icu/impl/number/DecimalQuantity;I)V
 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;+]Ljava/math/MathContext;Ljava/math/MathContext;
+HSPLandroid/icu/number/Precision;->withMode(Ljava/math/MathContext;)Landroid/icu/number/Precision;
 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;+]Landroid/icu/number/UnlocalizedNumberFormatter;Landroid/icu/number/UnlocalizedNumberFormatter;
+HSPLandroid/icu/number/UnlocalizedNumberFormatter;->create(ILjava/lang/Object;)Landroid/icu/number/NumberFormatterSettings;
 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;
@@ -9597,13 +9658,13 @@
 HSPLandroid/icu/text/Bidi;->DirPropFlag(B)I
 HSPLandroid/icu/text/Bidi;->GetParaLevelAt(I)B
 HSPLandroid/icu/text/Bidi;->directionFromFlags()B
-HSPLandroid/icu/text/Bidi;->getCustomizedClass(I)I+]Landroid/icu/impl/UBiDiProps;Landroid/icu/impl/UBiDiProps;
+HSPLandroid/icu/text/Bidi;->getCustomizedClass(I)I
 HSPLandroid/icu/text/Bidi;->getDirProps()V+]Landroid/icu/text/Bidi;Landroid/icu/text/Bidi;
 HSPLandroid/icu/text/Bidi;->getDirPropsMemory(I)V
 HSPLandroid/icu/text/Bidi;->getLevelsMemory(I)V
 HSPLandroid/icu/text/Bidi;->getMemory(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Class;ZI)Ljava/lang/Object;
 HSPLandroid/icu/text/Bidi;->resolveExplicitLevels()B
-HSPLandroid/icu/text/Bidi;->setPara([CB[B)V+]Landroid/icu/text/Bidi;Landroid/icu/text/Bidi;
+HSPLandroid/icu/text/Bidi;->setPara([CB[B)V
 HSPLandroid/icu/text/Bidi;->verifyRange(III)V
 HSPLandroid/icu/text/BreakIterator$BreakIteratorCache;-><init>(Landroid/icu/util/ULocale;Landroid/icu/text/BreakIterator;)V
 HSPLandroid/icu/text/BreakIterator$BreakIteratorCache;->createBreakInstance()Landroid/icu/text/BreakIterator;
@@ -9635,7 +9696,7 @@
 HSPLandroid/icu/text/CollatorServiceShim;-><init>()V
 HSPLandroid/icu/text/CollatorServiceShim;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/Collator;
 HSPLandroid/icu/text/CollatorServiceShim;->makeInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/Collator;
-HSPLandroid/icu/text/ConstrainedFieldPosition;-><init>()V+]Landroid/icu/text/ConstrainedFieldPosition;Landroid/icu/text/ConstrainedFieldPosition;
+HSPLandroid/icu/text/ConstrainedFieldPosition;-><init>()V
 HSPLandroid/icu/text/ConstrainedFieldPosition;->constrainField(Ljava/text/Format$Field;)V
 HSPLandroid/icu/text/ConstrainedFieldPosition;->getField()Ljava/text/Format$Field;
 HSPLandroid/icu/text/ConstrainedFieldPosition;->getFieldValue()Ljava/lang/Object;
@@ -9687,13 +9748,13 @@
 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;+]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;->getExtendedInstance(Landroid/icu/util/ULocale;Ljava/lang/String;)Landroid/icu/text/DateFormatSymbols$AospExtendedDateFormatSymbols;
 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+]Landroid/icu/text/DateFormatSymbols;Landroid/icu/text/DateFormatSymbols;
+HSPLandroid/icu/text/DateFormatSymbols;->initializeData(Landroid/icu/util/ULocale;Ljava/lang/String;)V
 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
@@ -9701,7 +9762,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;+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;]Landroid/icu/text/SimpleDateFormat;Landroid/icu/text/SimpleDateFormat;
+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;->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;
@@ -9741,6 +9802,7 @@
 HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->getDistance(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;ILandroid/icu/text/DateTimePatternGenerator$DistanceInfo;)I
 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;->toCanonicalString()Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator$DisplayWidth;->cldrKey()Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;-><init>()V
 HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;->addExtra(I)V
@@ -9766,6 +9828,7 @@
 HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->isFieldEmpty(I)Z
 HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->populate(ICI)V
 HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->populate(ILjava/lang/String;)V
+HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->toCanonicalString(Z)Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator$SkeletonFields;->toString(Z)Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator$VariableField;-><init>(Ljava/lang/String;Z)V
 HSPLandroid/icu/text/DateTimePatternGenerator$VariableField;->getCanonicalIndex()I
@@ -9797,8 +9860,10 @@
 HSPLandroid/icu/text/DateTimePatternGenerator;->getBestRaw(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;ILandroid/icu/text/DateTimePatternGenerator$DistanceInfo;Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;)Landroid/icu/text/DateTimePatternGenerator$PatternWithMatcher;
 HSPLandroid/icu/text/DateTimePatternGenerator;->getCLDRFieldAndWidthNumber(Landroid/icu/impl/UResource$Key;)I
 HSPLandroid/icu/text/DateTimePatternGenerator;->getCalendarTypeToUse(Landroid/icu/util/ULocale;)Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getCanonicalChar(IC)C
 HSPLandroid/icu/text/DateTimePatternGenerator;->getCanonicalIndex(Ljava/lang/String;Z)I
 HSPLandroid/icu/text/DateTimePatternGenerator;->getDateTimeFormat()Ljava/lang/String;
+HSPLandroid/icu/text/DateTimePatternGenerator;->getDateTimeFormat(I)Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator;->getFieldDisplayName(ILandroid/icu/text/DateTimePatternGenerator$DisplayWidth;)Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator;->getFilteredPattern(Landroid/icu/text/DateTimePatternGenerator$FormatParser;Ljava/util/BitSet;)Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator;->getFrozenInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/DateTimePatternGenerator;
@@ -9820,9 +9885,9 @@
 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+]Ljava/text/FieldPosition;Ljava/text/DontCareFieldPosition;]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
+HSPLandroid/icu/text/DecimalFormat;->fieldPositionHelper(Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;Ljava/text/FieldPosition;I)V
 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;+]Landroid/icu/number/LocalizedNumberFormatter;Landroid/icu/number/LocalizedNumberFormatter;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DecimalFormat;->format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
 HSPLandroid/icu/text/DecimalFormat;->getDecimalFormatSymbols()Landroid/icu/text/DecimalFormatSymbols;
 HSPLandroid/icu/text/DecimalFormat;->getMaximumFractionDigits()I
 HSPLandroid/icu/text/DecimalFormat;->getMaximumIntegerDigits()I
@@ -9835,15 +9900,15 @@
 HSPLandroid/icu/text/DecimalFormat;->getPositiveSuffix()Ljava/lang/String;
 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;->parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;+]Ljava/lang/String;Ljava/lang/String;]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;->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+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
+HSPLandroid/icu/text/DecimalFormat;->setMaximumIntegerDigits(I)V
 HSPLandroid/icu/text/DecimalFormat;->setMinimumFractionDigits(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;->setMinimumIntegerDigits(I)V
 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
@@ -9890,7 +9955,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+]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;->initialize(Landroid/icu/util/ULocale;Landroid/icu/text/NumberingSystem;)V
 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
@@ -9922,7 +9987,7 @@
 HSPLandroid/icu/text/DecimalFormatSymbols;->setPercentString(Ljava/lang/String;)V
 HSPLandroid/icu/text/DecimalFormatSymbols;->setPlusSign(C)V
 HSPLandroid/icu/text/DecimalFormatSymbols;->setPlusSignString(Ljava/lang/String;)V
-HSPLandroid/icu/text/DecimalFormatSymbols;->setZeroDigit(C)V+][C[C][Ljava/lang/String;[Ljava/lang/String;
+HSPLandroid/icu/text/DecimalFormatSymbols;->setZeroDigit(C)V
 HSPLandroid/icu/text/DisplayContext;->type()Landroid/icu/text/DisplayContext$Type;
 HSPLandroid/icu/text/Edits$Iterator;->next(Z)Z
 HSPLandroid/icu/text/Edits;-><init>()V
@@ -9950,7 +10015,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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
+HSPLandroid/icu/text/NumberFormat;->getPatternForStyleAndNumberingSystem(Landroid/icu/util/ULocale;Ljava/lang/String;I)Ljava/lang/String;
 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;
@@ -9958,7 +10023,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;+]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;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberingSystem;
 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
@@ -10038,7 +10103,7 @@
 HSPLandroid/icu/text/ReplaceableString;-><init>(Ljava/lang/String;)V
 HSPLandroid/icu/text/ReplaceableString;->charAt(I)C
 HSPLandroid/icu/text/ReplaceableString;->getChars(II[CI)V
-HSPLandroid/icu/text/ReplaceableString;->length()I+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
+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;->addFollowing(IIZ)V
@@ -10067,7 +10132,7 @@
 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+]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;->handleNext()I
 HSPLandroid/icu/text/RuleBasedBreakIterator;->handleSafePrevious(I)I
 HSPLandroid/icu/text/RuleBasedBreakIterator;->isBoundary(I)Z
 HSPLandroid/icu/text/RuleBasedBreakIterator;->next()I
@@ -10213,7 +10278,7 @@
 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+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
+HSPLandroid/icu/util/Calendar;->complete()V
 HSPLandroid/icu/util/Calendar;->computeFields()V
 HSPLandroid/icu/util/Calendar;->computeGregorianAndDOWFields(I)V
 HSPLandroid/icu/util/Calendar;->computeGregorianFields(I)V
@@ -10223,7 +10288,7 @@
 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+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
+HSPLandroid/icu/util/Calendar;->get(I)I
 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;
@@ -10298,7 +10363,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+]Landroid/icu/util/CodePointTrie$Fast8;Landroid/icu/util/CodePointTrie$Fast8;
+HSPLandroid/icu/util/CodePointTrie$Fast8;->get(I)I
 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;
@@ -10472,18 +10537,19 @@
 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
-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;->base()Landroid/icu/impl/locale/BaseLocale;
 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;->equals(Ljava/lang/Object;)Z
-HSPLandroid/icu/util/ULocale;->forLocale(Ljava/util/Locale;)Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/ULocale;->equals(Ljava/lang/Object;)Z+]Ljava/lang/String;Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->extensions()Landroid/icu/impl/locale/LocaleExtensions;+]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;]Landroid/icu/impl/locale/InternalLocaleBuilder;Landroid/icu/impl/locale/InternalLocaleBuilder;
+HSPLandroid/icu/util/ULocale;->forLocale(Ljava/util/Locale;)Landroid/icu/util/ULocale;+]Landroid/icu/impl/SoftCache;Landroid/icu/util/ULocale$2;
 HSPLandroid/icu/util/ULocale;->getBaseName()Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->getBaseName(Ljava/lang/String;)Ljava/lang/String;+]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;
+HSPLandroid/icu/util/ULocale;->getBaseName(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->getCountry()Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->getDefault()Landroid/icu/util/ULocale;+]Ljava/util/Locale;Ljava/util/Locale;
+HSPLandroid/icu/util/ULocale;->getDefault()Landroid/icu/util/ULocale;
 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;
@@ -10496,7 +10562,7 @@
 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;)Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->getShortestSubtagLength(Ljava/lang/String;)I
+HSPLandroid/icu/util/ULocale;->getShortestSubtagLength(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->getVariant()Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->getVariant(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->hashCode()I
@@ -10509,21 +10575,22 @@
 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;
+HSPLandroid/icu/util/ULocale;->toLanguageTag()Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/locale/BaseLocale;Landroid/icu/impl/locale/BaseLocale;]Landroid/icu/impl/locale/LanguageTag;Landroid/icu/impl/locale/LanguageTag;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/icu/util/ULocale;->toLocale()Ljava/util/Locale;
 HSPLandroid/icu/util/ULocale;->toString()Ljava/lang/String;
 HSPLandroid/icu/util/UResourceBundle;-><init>()V
 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;+]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/util/UResourceBundle;
 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;+]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;
+HSPLandroid/icu/util/UResourceBundle;->getRootType(Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/util/UResourceBundle$RootType;
 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;+]Landroid/icu/util/UResourceBundle$RootType;Landroid/icu/util/UResourceBundle$RootType;
+HSPLandroid/icu/util/UResourceBundle;->instantiateBundle(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Landroid/icu/util/UResourceBundle;
 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
@@ -10664,7 +10731,7 @@
 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;
-HSPLandroid/media/AudioAttributes$Builder;->build()Landroid/media/AudioAttributes;
+HSPLandroid/media/AudioAttributes$Builder;->build()Landroid/media/AudioAttributes;+]Ljava/util/HashSet;Ljava/util/HashSet;
 HSPLandroid/media/AudioAttributes$Builder;->replaceFlags(I)Landroid/media/AudioAttributes$Builder;
 HSPLandroid/media/AudioAttributes$Builder;->setAllowedCapturePolicy(I)Landroid/media/AudioAttributes$Builder;
 HSPLandroid/media/AudioAttributes$Builder;->setCapturePreset(I)Landroid/media/AudioAttributes$Builder;
@@ -10687,6 +10754,7 @@
 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;Landroid/media/AudioAttributes-IA;)V
 HSPLandroid/media/AudioAttributes;->areHapticChannelsMuted()Z
 HSPLandroid/media/AudioAttributes;->equals(Ljava/lang/Object;)Z
 HSPLandroid/media/AudioAttributes;->getAllFlags()I
@@ -10730,7 +10798,7 @@
 HSPLandroid/media/AudioFormat;->isEncodingLinearPcm(I)Z
 HSPLandroid/media/AudioFormat;->isPublicEncoding(I)Z
 HSPLandroid/media/AudioHandle;-><init>(I)V
-HSPLandroid/media/AudioHandle;->equals(Ljava/lang/Object;)Z
+HSPLandroid/media/AudioHandle;->equals(Ljava/lang/Object;)Z+]Landroid/media/AudioHandle;Landroid/media/AudioHandle;
 HSPLandroid/media/AudioHandle;->id()I
 HSPLandroid/media/AudioManager$1;-><init>(Landroid/media/AudioManager;)V
 HSPLandroid/media/AudioManager$2;-><init>(Landroid/media/AudioManager;)V
@@ -10809,7 +10877,7 @@
 HSPLandroid/media/AudioManager;->setParameters(Ljava/lang/String;)V
 HSPLandroid/media/AudioManager;->unregisterAudioFocusRequest(Landroid/media/AudioManager$OnAudioFocusChangeListener;)V
 HSPLandroid/media/AudioManager;->updateAudioPortCache(Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)I
-HSPLandroid/media/AudioManager;->updatePortConfig(Landroid/media/AudioPortConfig;Ljava/util/ArrayList;)Landroid/media/AudioPortConfig;
+HSPLandroid/media/AudioManager;->updatePortConfig(Landroid/media/AudioPortConfig;Ljava/util/ArrayList;)Landroid/media/AudioPortConfig;+]Landroid/media/AudioPortConfig;Landroid/media/AudioPortConfig;]Landroid/media/AudioHandle;Landroid/media/AudioHandle;]Landroid/media/AudioPort;Landroid/media/AudioMixPort;,Landroid/media/AudioDevicePort;,Landroid/media/AudioPort;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/media/AudioMixPort;-><init>(Landroid/media/AudioHandle;IILjava/lang/String;Ljava/util/List;[Landroid/media/AudioGain;)V
 HSPLandroid/media/AudioMixPort;-><init>(Landroid/media/AudioHandle;IILjava/lang/String;[I[I[I[I[Landroid/media/AudioGain;)V
 HSPLandroid/media/AudioMixPort;->buildConfig(IIILandroid/media/AudioGainConfig;)Landroid/media/AudioMixPortConfig;
@@ -10822,7 +10890,7 @@
 HSPLandroid/media/AudioPlaybackConfiguration;->getAudioAttributes()Landroid/media/AudioAttributes;
 HSPLandroid/media/AudioPlaybackConfiguration;->isActive()Z
 HSPLandroid/media/AudioPort$$ExternalSyntheticLambda0;->applyAsInt(Ljava/lang/Object;)I
-HSPLandroid/media/AudioPort;-><init>(Landroid/media/AudioHandle;ILjava/lang/String;Ljava/util/List;[Landroid/media/AudioGain;Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/stream/Stream;Ljava/util/stream/IntPipeline$4;,Ljava/util/stream/ReferencePipeline$Head;]Ljava/util/stream/IntStream;Ljava/util/stream/IntPipeline$Head;,Ljava/util/stream/ReferencePipeline$4;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/media/AudioProfile;Landroid/media/AudioProfile;]Ljava/util/Set;Ljava/util/HashSet;
+HSPLandroid/media/AudioPort;-><init>(Landroid/media/AudioHandle;ILjava/lang/String;Ljava/util/List;[Landroid/media/AudioGain;Ljava/util/List;)V
 HSPLandroid/media/AudioPort;-><init>(Landroid/media/AudioHandle;ILjava/lang/String;[I[I[I[I[Landroid/media/AudioGain;)V
 HSPLandroid/media/AudioPort;->handle()Landroid/media/AudioHandle;
 HSPLandroid/media/AudioPort;->id()I
@@ -10882,6 +10950,7 @@
 HSPLandroid/media/AudioTrack;->stop()V
 HSPLandroid/media/AudioTrack;->testDisableNativeRoutingCallbacksLocked()V
 HSPLandroid/media/AudioTrack;->tryToDisableNativeRoutingCallback()V
+HSPLandroid/media/AudioTrack;->write(Ljava/nio/ByteBuffer;II)I+]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;
 HSPLandroid/media/CallbackUtil$LazyListenerManager;-><init>()V
 HSPLandroid/media/IAudioFocusDispatcher$Stub;-><init>()V
 HSPLandroid/media/IAudioFocusDispatcher$Stub;->asBinder()Landroid/os/IBinder;
@@ -10938,13 +11007,13 @@
 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+]Landroid/media/MediaCodec$BufferMap$CodecBuffer;Landroid/media/MediaCodec$BufferMap$CodecBuffer;
+HSPLandroid/media/MediaCodec$BufferMap$CodecBuffer;->setByteBuffer(Ljava/nio/ByteBuffer;)V
 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+]Landroid/media/MediaCodec$BufferMap$CodecBuffer;Landroid/media/MediaCodec$BufferMap$CodecBuffer;]Ljava/util/Map;Ljava/util/HashMap;
-HSPLandroid/media/MediaCodec$BufferMap;->remove(I)V+]Landroid/media/MediaCodec$BufferMap$CodecBuffer;Landroid/media/MediaCodec$BufferMap$CodecBuffer;]Ljava/util/Map;Ljava/util/HashMap;
-HSPLandroid/media/MediaCodec$CryptoInfo$Pattern;-><init>(II)V+]Landroid/media/MediaCodec$CryptoInfo$Pattern;Landroid/media/MediaCodec$CryptoInfo$Pattern;
+HSPLandroid/media/MediaCodec$BufferMap;->put(ILjava/nio/ByteBuffer;)V
+HSPLandroid/media/MediaCodec$BufferMap;->remove(I)V
+HSPLandroid/media/MediaCodec$CryptoInfo$Pattern;-><init>(II)V
 HSPLandroid/media/MediaCodec$CryptoInfo$Pattern;->set(II)V
 HSPLandroid/media/MediaCodec$CryptoInfo;-><init>()V
 HSPLandroid/media/MediaCodec$EventHandler;-><init>(Landroid/media/MediaCodec;Landroid/media/MediaCodec;Landroid/os/Looper;)V
@@ -10955,18 +11024,18 @@
 HSPLandroid/media/MediaCodec;->configure(Landroid/media/MediaFormat;Landroid/view/Surface;Landroid/media/MediaCrypto;Landroid/os/IHwBinder;I)V
 HSPLandroid/media/MediaCodec;->createByCodecName(Ljava/lang/String;)Landroid/media/MediaCodec;
 HSPLandroid/media/MediaCodec;->dequeueInputBuffer(J)I
-HSPLandroid/media/MediaCodec;->dequeueOutputBuffer(Landroid/media/MediaCodec$BufferInfo;J)I+]Landroid/media/MediaCodec$BufferInfo;Landroid/media/MediaCodec$BufferInfo;]Ljava/util/Map;Ljava/util/HashMap;
+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;+]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;->getInputBuffer(I)Ljava/nio/ByteBuffer;
+HSPLandroid/media/MediaCodec;->getOutputBuffer(I)Ljava/nio/ByteBuffer;
 HSPLandroid/media/MediaCodec;->getOutputFormat()Landroid/media/MediaFormat;
-HSPLandroid/media/MediaCodec;->lockAndGetContext()J+]Ljava/util/concurrent/locks/Lock;Ljava/util/concurrent/locks/ReentrantLock;
-HSPLandroid/media/MediaCodec;->queueInputBuffer(IIIJI)V+]Landroid/media/MediaCodec$BufferMap;Landroid/media/MediaCodec$BufferMap;
+HSPLandroid/media/MediaCodec;->lockAndGetContext()J
+HSPLandroid/media/MediaCodec;->queueInputBuffer(IIIJI)V
 HSPLandroid/media/MediaCodec;->release()V
 HSPLandroid/media/MediaCodec;->releaseOutputBuffer(IZ)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;->releaseOutputBufferInternal(IZZJ)V
+HSPLandroid/media/MediaCodec;->setAndUnlockContext(J)V
 HSPLandroid/media/MediaCodec;->start()V
 HSPLandroid/media/MediaCodec;->stop()V
 HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->applyLevelLimits()V
@@ -11016,6 +11085,7 @@
 HSPLandroid/media/MediaCodecInfo;->getCapabilitiesForType(Ljava/lang/String;)Landroid/media/MediaCodecInfo$CodecCapabilities;
 HSPLandroid/media/MediaCodecInfo;->getName()Ljava/lang/String;
 HSPLandroid/media/MediaCodecInfo;->getSupportedTypes()[Ljava/lang/String;
+HSPLandroid/media/MediaCodecInfo;->isAlias()Z
 HSPLandroid/media/MediaCodecInfo;->isEncoder()Z
 HSPLandroid/media/MediaCodecInfo;->isHardwareAccelerated()Z
 HSPLandroid/media/MediaCodecInfo;->isSoftwareOnly()Z
@@ -11238,6 +11308,7 @@
 HSPLandroid/media/MediaRouter;->typesToString(I)Ljava/lang/String;
 HSPLandroid/media/MediaRouter;->updateWifiDisplayStatus(Landroid/hardware/display/WifiDisplayStatus;)V
 HSPLandroid/media/MediaServiceManager$ServiceRegisterer;-><init>(Ljava/lang/String;)V
+HSPLandroid/media/MediaServiceManager$ServiceRegisterer;-><init>(Ljava/lang/String;Z)V
 HSPLandroid/media/MediaServiceManager$ServiceRegisterer;->get()Landroid/os/IBinder;
 HSPLandroid/media/MediaServiceManager;-><init>()V
 HSPLandroid/media/MediaServiceManager;->getMediaCommunicationServiceRegisterer()Landroid/media/MediaServiceManager$ServiceRegisterer;
@@ -11417,8 +11488,11 @@
 HSPLandroid/media/session/MediaSession;->setPlaybackState(Landroid/media/session/PlaybackState;)V
 HSPLandroid/media/session/MediaSession;->setPlaybackToLocal(Landroid/media/AudioAttributes;)V
 HSPLandroid/media/session/MediaSessionManager$OnMediaKeyEventDispatchedListenerStub;-><init>(Landroid/media/session/MediaSessionManager;)V
+HSPLandroid/media/session/MediaSessionManager$OnMediaKeyEventDispatchedListenerStub;-><init>(Landroid/media/session/MediaSessionManager;Landroid/media/session/MediaSessionManager$OnMediaKeyEventDispatchedListenerStub-IA;)V
 HSPLandroid/media/session/MediaSessionManager$OnMediaKeyEventSessionChangedListenerStub;-><init>(Landroid/media/session/MediaSessionManager;)V
+HSPLandroid/media/session/MediaSessionManager$OnMediaKeyEventSessionChangedListenerStub;-><init>(Landroid/media/session/MediaSessionManager;Landroid/media/session/MediaSessionManager$OnMediaKeyEventSessionChangedListenerStub-IA;)V
 HSPLandroid/media/session/MediaSessionManager$RemoteSessionCallbackStub;-><init>(Landroid/media/session/MediaSessionManager;)V
+HSPLandroid/media/session/MediaSessionManager$RemoteSessionCallbackStub;-><init>(Landroid/media/session/MediaSessionManager;Landroid/media/session/MediaSessionManager$RemoteSessionCallbackStub-IA;)V
 HSPLandroid/media/session/MediaSessionManager$RemoteUserInfo;-><init>(Ljava/lang/String;II)V
 HSPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper$1$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/media/session/MediaSessionManager$SessionsChangedWrapper$1;-><init>(Landroid/media/session/MediaSessionManager$SessionsChangedWrapper;)V
@@ -11570,13 +11644,12 @@
 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$Builder;-><init>()V
 HSPLandroid/net/Uri$Builder;->appendEncodedPath(Ljava/lang/String;)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/String;Ljava/lang/String;]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;
@@ -11592,24 +11665,25 @@
 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+]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;->appendSspTo(Ljava/lang/StringBuilder;)V
 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;->generatePath(Landroid/net/Uri$PathPart;)Landroid/net/Uri$PathPart;+]Landroid/net/Uri$Part;Landroid/net/Uri$Part$EmptyPart;,Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$HierarchicalUri;->getAuthority()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->getEncodedAuthority()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->getEncodedFragment()Ljava/lang/String;
 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;+]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;
-HSPLandroid/net/Uri$HierarchicalUri;->getQuery()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->getPathSegments()Ljava/util/List;
+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;+]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;
+HSPLandroid/net/Uri$HierarchicalUri;->makeUriString()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri;+]Ljava/lang/String;Ljava/lang/String;]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;-><init>(Ljava/lang/String;Landroid/net/Uri$Part;Landroid/net/Uri$Part;Landroid/net/Uri$OpaqueUri-IA;)V
 HSPLandroid/net/Uri$OpaqueUri;->getEncodedSchemeSpecificPart()Ljava/lang/String;
@@ -11625,18 +11699,15 @@
 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$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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$PathPart;->appendEncodedSegment(Landroid/net/Uri$PathPart;Ljava/lang/String;)Landroid/net/Uri$PathPart;+]Ljava/lang/String;Ljava/lang/String;]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;+]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;
-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/String;
@@ -11645,9 +11716,9 @@
 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;->findFragmentSeparator()I
-HSPLandroid/net/Uri$StringUri;->findSchemeSeparator()I
+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+]Ljava/lang/String;Ljava/lang/String;
+HSPLandroid/net/Uri$StringUri;->findSchemeSeparator()I+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->getAuthority()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->getAuthorityPart()Landroid/net/Uri$Part;
 HSPLandroid/net/Uri$StringUri;->getEncodedAuthority()Ljava/lang/String;
@@ -11663,16 +11734,16 @@
 HSPLandroid/net/Uri$StringUri;->getQueryPart()Landroid/net/Uri$Part;
 HSPLandroid/net/Uri$StringUri;->getScheme()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->getSchemeSpecificPart()Ljava/lang/String;
-HSPLandroid/net/Uri$StringUri;->isHierarchical()Z
+HSPLandroid/net/Uri$StringUri;->isHierarchical()Z+]Ljava/lang/String;Ljava/lang/String;
 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;+]Ljava/lang/String;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;->parseQuery()Ljava/lang/String;+]Ljava/lang/String;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
@@ -11688,19 +11759,19 @@
 HSPLandroid/net/Uri;->getBooleanQueryParameter(Ljava/lang/String;Z)Z
 HSPLandroid/net/Uri;->getQueryParameter(Ljava/lang/String;)Ljava/lang/String;
 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$HierarchicalUri;,Landroid/net/Uri$StringUri;
 HSPLandroid/net/Uri;->isAbsolute()Z
-HSPLandroid/net/Uri;->isAllowed(CLjava/lang/String;)Z
+HSPLandroid/net/Uri;->isAllowed(CLjava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
 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;->toSafeString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;,Landroid/net/Uri$HierarchicalUri;
 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/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/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
-HSPLandroid/net/UriCodec;->getNextCharacter(Ljava/lang/String;IILjava/lang/String;)C
+HSPLandroid/net/UriCodec;->appendDecoded(Ljava/lang/StringBuilder;Ljava/lang/String;ZLjava/nio/charset/Charset;Z)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/net/UriCodec;->decode(Ljava/lang/String;ZLjava/nio/charset/Charset;Z)Ljava/lang/String;
+HSPLandroid/net/UriCodec;->flushDecodingByteAccumulator(Ljava/lang/StringBuilder;Ljava/nio/charset/CharsetDecoder;Ljava/nio/ByteBuffer;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/net/UriCodec;->getNextCharacter(Ljava/lang/String;IILjava/lang/String;)C+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/net/UriCodec;->hexCharToValue(C)I
 HSPLandroid/net/WebAddress;-><init>(Ljava/lang/String;)V
 HSPLandroid/net/WebAddress;->toString()Ljava/lang/String;
@@ -11783,13 +11854,13 @@
 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;
+HSPLandroid/os/BaseBundle;-><init>(Landroid/os/BaseBundle;Z)V
 HSPLandroid/os/BaseBundle;-><init>(Landroid/os/Parcel;I)V
-HSPLandroid/os/BaseBundle;-><init>(Ljava/lang/ClassLoader;I)V+]Ljava/lang/Object;Landroid/os/PersistableBundle;,Landroid/os/Bundle;]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/os/BaseBundle;-><init>(Ljava/lang/ClassLoader;I)V+]Ljava/lang/Object;Landroid/os/Bundle;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/os/BaseBundle;->clear()V
-HSPLandroid/os/BaseBundle;->containsKey(Ljava/lang/String;)Z
+HSPLandroid/os/BaseBundle;->containsKey(Ljava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->deepCopyValue(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/os/BaseBundle;->get(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/os/BaseBundle;->get(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->get(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
 HSPLandroid/os/BaseBundle;->getArrayList(Ljava/lang/String;Ljava/lang/Class;)Ljava/util/ArrayList;
 HSPLandroid/os/BaseBundle;->getBoolean(Ljava/lang/String;)Z
@@ -11804,24 +11875,24 @@
 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;->getLongArray(Ljava/lang/String;)[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+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->getSerializable(Ljava/lang/String;)Ljava/io/Serializable;
 HSPLandroid/os/BaseBundle;->getSerializable(Ljava/lang/String;Ljava/lang/Class;)Ljava/io/Serializable;
-HSPLandroid/os/BaseBundle;->getString(Ljava/lang/String;)Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->getString(Ljava/lang/String;)Ljava/lang/String;
 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;
-HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
-HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;
-HSPLandroid/os/BaseBundle;->getValueAt(ILjava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;
-HSPLandroid/os/BaseBundle;->initializeFromParcelLocked(Landroid/os/Parcel;ZZ)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/os/BaseBundle;->isEmpty()Z
+HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/BaseBundle;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/Bundle;
+HSPLandroid/os/BaseBundle;->getValueAt(ILjava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/os/BaseBundle;->initializeFromParcelLocked(Landroid/os/Parcel;ZZ)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+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;
 HSPLandroid/os/BaseBundle;->putAll(Landroid/os/PersistableBundle;)V
 HSPLandroid/os/BaseBundle;->putAll(Landroid/util/ArrayMap;)V
 HSPLandroid/os/BaseBundle;->putBoolean(Ljava/lang/String;Z)V
@@ -11829,7 +11900,7 @@
 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;->putDouble(Ljava/lang/String;D)V
+HSPLandroid/os/BaseBundle;->putDouble(Ljava/lang/String;D)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->putFloat(Ljava/lang/String;F)V
 HSPLandroid/os/BaseBundle;->putInt(Ljava/lang/String;I)V
 HSPLandroid/os/BaseBundle;->putIntArray(Ljava/lang/String;[I)V
@@ -11841,14 +11912,14 @@
 HSPLandroid/os/BaseBundle;->putStringArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
 HSPLandroid/os/BaseBundle;->readFromParcelInner(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
+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;->size()I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->unparcel()V+]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->unparcel(Z)V
-HSPLandroid/os/BaseBundle;->unwrapLazyValueFromMapLocked(ILjava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;
+HSPLandroid/os/BaseBundle;->unwrapLazyValueFromMapLocked(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/ref/WeakReference;Ljava/lang/ref/WeakReference;
 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
@@ -11886,7 +11957,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+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/os/Binder;-><init>(Ljava/lang/String;)V
 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
@@ -11901,7 +11972,7 @@
 HSPLandroid/os/Binder;->getMaxTransactionId()I
 HSPLandroid/os/Binder;->getSimpleDescriptor()Ljava/lang/String;
 HSPLandroid/os/Binder;->getTransactionName(I)Ljava/lang/String;
-HSPLandroid/os/Binder;->getTransactionTraceName(I)Ljava/lang/String;+]Landroid/os/Binder;Landroid/app/job/JobServiceEngine$JobInterface;,Landroid/database/ContentObserver$Transport;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/util/concurrent/atomic/AtomicReferenceArray;Ljava/util/concurrent/atomic/AtomicReferenceArray;
+HSPLandroid/os/Binder;->getTransactionTraceName(I)Ljava/lang/String;+]Landroid/os/Binder;Landroid/app/ActivityThread$ApplicationThread;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/util/concurrent/atomic/AtomicReferenceArray;Ljava/util/concurrent/atomic/AtomicReferenceArray;
 HSPLandroid/os/Binder;->isBinderAlive()Z
 HSPLandroid/os/Binder;->isProxy(Landroid/os/IInterface;)Z
 HSPLandroid/os/Binder;->isStackTrackingEnabled()Z
@@ -11917,12 +11988,12 @@
 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;
 HSPLandroid/os/BinderProxy$ProxyMap;->hash(J)I
 HSPLandroid/os/BinderProxy$ProxyMap;->remove(II)V
-HSPLandroid/os/BinderProxy$ProxyMap;->set(JLandroid/os/BinderProxy;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/os/BinderProxy$ProxyMap;->set(JLandroid/os/BinderProxy;)V
 HSPLandroid/os/BinderProxy;-><init>(J)V
 HSPLandroid/os/BinderProxy;->getInstance(JJ)Landroid/os/BinderProxy;
 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
+HSPLandroid/os/BinderProxy;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/os/BinderProxy;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/BluetoothServiceManager$ServiceRegisterer;-><init>(Ljava/lang/String;)V
 HSPLandroid/os/BluetoothServiceManager$ServiceRegisterer;->get()Landroid/os/IBinder;
 HSPLandroid/os/BluetoothServiceManager;-><init>()V
@@ -11948,7 +12019,7 @@
 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
@@ -11957,7 +12028,9 @@
 HSPLandroid/os/Bundle;->getParcelable(Ljava/lang/String;)Landroid/os/Parcelable;
 HSPLandroid/os/Bundle;->getParcelable(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
 HSPLandroid/os/Bundle;->getParcelableArray(Ljava/lang/String;)[Landroid/os/Parcelable;
+HSPLandroid/os/Bundle;->getParcelableArray(Ljava/lang/String;Ljava/lang/Class;)[Ljava/lang/Object;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->getParcelableArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
+HSPLandroid/os/Bundle;->getParcelableArrayList(Ljava/lang/String;Ljava/lang/Class;)Ljava/util/ArrayList;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->getSerializable(Ljava/lang/String;)Ljava/io/Serializable;
 HSPLandroid/os/Bundle;->getSerializable(Ljava/lang/String;Ljava/lang/Class;)Ljava/io/Serializable;
 HSPLandroid/os/Bundle;->getSparseParcelableArray(Ljava/lang/String;)Landroid/util/SparseArray;
@@ -11974,7 +12047,7 @@
 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;->putParcelableArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
+HSPLandroid/os/Bundle;->putParcelableArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->putParcelableList(Ljava/lang/String;Ljava/util/List;)V
 HSPLandroid/os/Bundle;->putSerializable(Ljava/lang/String;Ljava/io/Serializable;)V
 HSPLandroid/os/Bundle;->putSparseParcelableArray(Ljava/lang/String;Landroid/util/SparseArray;)V
@@ -11986,7 +12059,7 @@
 HSPLandroid/os/Bundle;->setDefusable(Landroid/os/Bundle;Z)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;->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
@@ -12006,9 +12079,9 @@
 HSPLandroid/os/ConditionVariable;-><init>()V
 HSPLandroid/os/ConditionVariable;-><init>(Z)V
 HSPLandroid/os/ConditionVariable;->block()V
-HSPLandroid/os/ConditionVariable;->block(J)Z+]Ljava/lang/Object;Landroid/os/ConditionVariable;
+HSPLandroid/os/ConditionVariable;->block(J)Z
 HSPLandroid/os/ConditionVariable;->close()V
-HSPLandroid/os/ConditionVariable;->open()V+]Ljava/lang/Object;Landroid/os/ConditionVariable;
+HSPLandroid/os/ConditionVariable;->open()V
 HSPLandroid/os/DeadObjectException;-><init>()V
 HSPLandroid/os/DeadObjectException;-><init>(Ljava/lang/String;)V
 HSPLandroid/os/Debug$MemoryInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/Debug$MemoryInfo;
@@ -12080,7 +12153,7 @@
 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;+]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;->buildExternalStorageAppFilesDirs(Ljava/lang/String;)[Ljava/io/File;
 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;
@@ -12106,6 +12179,7 @@
 HSPLandroid/os/Environment;->getOemDirectory()Ljava/io/File;
 HSPLandroid/os/Environment;->getProductDirectory()Ljava/io/File;
 HSPLandroid/os/Environment;->getRootDirectory()Ljava/io/File;
+HSPLandroid/os/Environment;->getSystemExtDirectory()Ljava/io/File;
 HSPLandroid/os/Environment;->getUserConfigDirectory(I)Ljava/io/File;
 HSPLandroid/os/Environment;->initForCurrentUser()V
 HSPLandroid/os/Environment;->isExternalStorageEmulated()Z
@@ -12122,7 +12196,7 @@
 HSPLandroid/os/FileObserver;-><init>(Ljava/lang/String;I)V
 HSPLandroid/os/FileObserver;-><init>(Ljava/util/List;I)V
 HSPLandroid/os/FileObserver;->startWatching()V
-HSPLandroid/os/FileUtils;->buildValidExtFilename(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/os/FileUtils;->buildValidExtFilename(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/os/FileUtils;->bytesToFile(Ljava/lang/String;[B)V
 HSPLandroid/os/FileUtils;->closeQuietly(Ljava/lang/AutoCloseable;)V
 HSPLandroid/os/FileUtils;->contains(Ljava/io/File;Ljava/io/File;)Z
@@ -12146,8 +12220,6 @@
 HSPLandroid/os/GraphicsEnvironment;->chooseDriverInternal(Landroid/os/Bundle;Landroid/content/pm/ApplicationInfo;)Ljava/lang/String;
 HSPLandroid/os/GraphicsEnvironment;->debugLayerEnabled(Landroid/os/Bundle;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;)Z
 HSPLandroid/os/GraphicsEnvironment;->getAppInfoWithMetadata(Landroid/content/Context;Landroid/content/pm/PackageManager;Ljava/lang/String;)Landroid/content/pm/ApplicationInfo;
-HSPLandroid/os/GraphicsEnvironment;->getDefaultDriverToUse(Landroid/content/Context;Ljava/lang/String;)I
-HSPLandroid/os/GraphicsEnvironment;->getDriverForPackage(Landroid/content/Context;Landroid/os/Bundle;Ljava/lang/String;)I
 HSPLandroid/os/GraphicsEnvironment;->getGlobalSettingsString(Landroid/content/ContentResolver;Landroid/os/Bundle;Ljava/lang/String;)Ljava/util/List;
 HSPLandroid/os/GraphicsEnvironment;->getInstance()Landroid/os/GraphicsEnvironment;
 HSPLandroid/os/GraphicsEnvironment;->getPackageIndex(Ljava/lang/String;Ljava/util/List;)I
@@ -12159,6 +12231,7 @@
 HSPLandroid/os/GraphicsEnvironment;->setupGpuLayers(Landroid/content/Context;Landroid/os/Bundle;Landroid/content/pm/PackageManager;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;)V
 HSPLandroid/os/GraphicsEnvironment;->shouldShowAngleInUseDialogBox(Landroid/content/Context;)Z
 HSPLandroid/os/GraphicsEnvironment;->shouldUseAngle(Landroid/content/Context;Landroid/os/Bundle;Ljava/lang/String;)Z
+HSPLandroid/os/GraphicsEnvironment;->shouldUseAngleInternal(Landroid/content/Context;Landroid/os/Bundle;Ljava/lang/String;)Z
 HSPLandroid/os/GraphicsEnvironment;->showAngleInUseDialogBox(Landroid/content/Context;)V
 HSPLandroid/os/Handler$BlockingRunnable;-><init>(Ljava/lang/Runnable;)V
 HSPLandroid/os/Handler$BlockingRunnable;->postAndWait(Landroid/os/Handler;J)Z
@@ -12176,7 +12249,7 @@
 HSPLandroid/os/Handler;-><init>(Z)V
 HSPLandroid/os/Handler;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
 HSPLandroid/os/Handler;->disallowNullArgumentIfShared(Ljava/lang/Object;)Ljava/lang/Object;
-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
 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;
@@ -12188,19 +12261,19 @@
 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+]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
+HSPLandroid/os/Handler;->hasMessages(I)Z
 HSPLandroid/os/Handler;->hasMessages(ILjava/lang/Object;)Z
 HSPLandroid/os/Handler;->obtainMessage()Landroid/os/Message;
 HSPLandroid/os/Handler;->obtainMessage(I)Landroid/os/Message;
 HSPLandroid/os/Handler;->obtainMessage(III)Landroid/os/Message;
 HSPLandroid/os/Handler;->obtainMessage(IIILjava/lang/Object;)Landroid/os/Message;
 HSPLandroid/os/Handler;->obtainMessage(ILjava/lang/Object;)Landroid/os/Message;
-HSPLandroid/os/Handler;->post(Ljava/lang/Runnable;)Z
+HSPLandroid/os/Handler;->post(Ljava/lang/Runnable;)Z+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/app/ActivityThread$H;
 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
+HSPLandroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z+]Landroid/os/Handler;Landroid/os/Handler;
 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
@@ -12208,15 +12281,15 @@
 HSPLandroid/os/Handler;->removeMessages(ILjava/lang/Object;)V
 HSPLandroid/os/Handler;->runWithScissors(Ljava/lang/Runnable;J)Z
 HSPLandroid/os/Handler;->sendEmptyMessage(I)Z
-HSPLandroid/os/Handler;->sendEmptyMessageAtTime(IJ)Z+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/view/GestureDetector$GestureHandler;
+HSPLandroid/os/Handler;->sendEmptyMessageAtTime(IJ)Z
 HSPLandroid/os/Handler;->sendEmptyMessageDelayed(IJ)Z
-HSPLandroid/os/Handler;->sendMessage(Landroid/os/Message;)Z+]Landroid/os/Handler;missing_types
+HSPLandroid/os/Handler;->sendMessage(Landroid/os/Message;)Z+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/media/AudioPortEventHandler$1;,Landroid/view/ViewRootImpl$ViewRootHandler;,Landroid/app/ActivityThread$H;
 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;missing_types
+HSPLandroid/os/Handler;->sendMessageDelayed(Landroid/os/Message;J)Z+]Landroid/os/Handler;megamorphic_types
 HSPLandroid/os/Handler;->toString()Ljava/lang/String;
 HSPLandroid/os/HandlerExecutor;-><init>(Landroid/os/Handler;)V
-HSPLandroid/os/HandlerExecutor;->execute(Ljava/lang/Runnable;)V
+HSPLandroid/os/HandlerExecutor;->execute(Ljava/lang/Runnable;)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLandroid/os/HandlerThread;-><init>(Ljava/lang/String;)V
 HSPLandroid/os/HandlerThread;-><init>(Ljava/lang/String;I)V
 HSPLandroid/os/HandlerThread;->getLooper()Landroid/os/Looper;
@@ -12282,7 +12355,7 @@
 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;->updateWakeLockWorkSource(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;)V
+HSPLandroid/os/IPowerManager$Stub$Proxy;->updateWakeLockWorkSource(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/IPowerManager$Stub$Proxy;Landroid/os/IPowerManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/IPowerManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IPowerManager;
 HSPLandroid/os/IPowerManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/os/IRemoteCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
@@ -12310,7 +12383,7 @@
 HSPLandroid/os/IUserManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/os/IUserManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLandroid/os/IUserManager$Stub$Proxy;->getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;
-HSPLandroid/os/IUserManager$Stub$Proxy;->getApplicationRestrictionsForUser(Ljava/lang/String;I)Landroid/os/Bundle;
+HSPLandroid/os/IUserManager$Stub$Proxy;->getApplicationRestrictionsForUser(Ljava/lang/String;I)Landroid/os/Bundle;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/IUserManager$Stub$Proxy;Landroid/os/IUserManager$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/IUserManager$Stub$Proxy;->getProfileIds(IZ)[I
 HSPLandroid/os/IUserManager$Stub$Proxy;->getProfileParent(I)Landroid/content/pm/UserInfo;
 HSPLandroid/os/IUserManager$Stub$Proxy;->getProfileType(I)Ljava/lang/String;
@@ -12360,7 +12433,7 @@
 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;+]Ljava/util/Locale;Ljava/util/Locale;
+HSPLandroid/os/LocaleList;->getDefault()Landroid/os/LocaleList;
 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;
@@ -12381,7 +12454,7 @@
 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;
-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;->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
@@ -12415,7 +12488,7 @@
 HSPLandroid/os/Message;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/os/Message;->recycle()V
 HSPLandroid/os/Message;->recycleUnchecked()V
-HSPLandroid/os/Message;->sendToTarget()V+]Landroid/os/Handler;missing_types
+HSPLandroid/os/Message;->sendToTarget()V
 HSPLandroid/os/Message;->setAsynchronous(Z)V
 HSPLandroid/os/Message;->setCallback(Ljava/lang/Runnable;)Landroid/os/Message;
 HSPLandroid/os/Message;->setData(Landroid/os/Bundle;)V
@@ -12430,13 +12503,13 @@
 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/MessageQueue$IdleHandler;missing_types]Landroid/os/Message;Landroid/os/Message;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+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;->postSyncBarrier()I
-HSPLandroid/os/MessageQueue;->postSyncBarrier(J)I+]Landroid/os/Message;Landroid/os/Message;
+HSPLandroid/os/MessageQueue;->postSyncBarrier(J)I
 HSPLandroid/os/MessageQueue;->quit(Z)V
 HSPLandroid/os/MessageQueue;->removeAllFutureMessagesLocked()V
 HSPLandroid/os/MessageQueue;->removeAllMessagesLocked()V
@@ -12445,7 +12518,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+]Landroid/os/Message;Landroid/os/Message;
+HSPLandroid/os/MessageQueue;->removeSyncBarrier(I)V
 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;
@@ -12458,15 +12531,15 @@
 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;
+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;
 HSPLandroid/os/Parcel$LazyValue;->writeToParcel(Landroid/os/Parcel;)V
 HSPLandroid/os/Parcel$ReadWriteHelper;->readString16(Landroid/os/Parcel;)Ljava/lang/String;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel$ReadWriteHelper;->readString8(Landroid/os/Parcel;)Ljava/lang/String;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel$ReadWriteHelper;->writeString16(Landroid/os/Parcel;Ljava/lang/String;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/os/Parcel$ReadWriteHelper;->writeString8(Landroid/os/Parcel;Ljava/lang/String;)V
+HSPLandroid/os/Parcel$ReadWriteHelper;->writeString8(Landroid/os/Parcel;Ljava/lang/String;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->-$$Nest$mreadValue(Landroid/os/Parcel;Ljava/lang/ClassLoader;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;
 HSPLandroid/os/Parcel;-><init>(J)V
 HSPLandroid/os/Parcel;->adoptClassCookies(Landroid/os/Parcel;)V
@@ -12480,20 +12553,20 @@
 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
-HSPLandroid/os/Parcel;->createIntArray()[I
-HSPLandroid/os/Parcel;->createLongArray()[J
-HSPLandroid/os/Parcel;->createString16Array()[Ljava/lang/String;
-HSPLandroid/os/Parcel;->createString8Array()[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;
-HSPLandroid/os/Parcel;->createTypedArrayList(Landroid/os/Parcelable$Creator;)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;->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
 HSPLandroid/os/Parcel;->dataSize()I
 HSPLandroid/os/Parcel;->destroy()V
 HSPLandroid/os/Parcel;->enforceInterface(Ljava/lang/String;)V
-HSPLandroid/os/Parcel;->enforceNoDataAvail()V
+HSPLandroid/os/Parcel;->enforceNoDataAvail()V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->ensureReadSquashableParcelables()V
 HSPLandroid/os/Parcel;->finalize()V
 HSPLandroid/os/Parcel;->freeBuffer()V
@@ -12521,11 +12594,11 @@
 HSPLandroid/os/Parcel;->readArraySet(Ljava/lang/ClassLoader;)Landroid/util/ArraySet;
 HSPLandroid/os/Parcel;->readBinderList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->readBlob()[B
-HSPLandroid/os/Parcel;->readBoolean()Z
+HSPLandroid/os/Parcel;->readBoolean()Z+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readBooleanArray([Z)V
-HSPLandroid/os/Parcel;->readBundle()Landroid/os/Bundle;
-HSPLandroid/os/Parcel;->readBundle(Ljava/lang/ClassLoader;)Landroid/os/Bundle;
-HSPLandroid/os/Parcel;->readByte()B
+HSPLandroid/os/Parcel;->readBundle()Landroid/os/Bundle;+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->readBundle(Ljava/lang/ClassLoader;)Landroid/os/Bundle;+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/os/Parcel;Landroid/os/Parcel;
+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;
@@ -12542,9 +12615,9 @@
 HSPLandroid/os/Parcel;->readIntArray([I)V
 HSPLandroid/os/Parcel;->readLazyValue(Ljava/lang/ClassLoader;)Ljava/lang/Object;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readList(Ljava/util/List;Ljava/lang/ClassLoader;)V
-HSPLandroid/os/Parcel;->readList(Ljava/util/List;Ljava/lang/ClassLoader;Ljava/lang/Class;)V
+HSPLandroid/os/Parcel;->readList(Ljava/util/List;Ljava/lang/ClassLoader;Ljava/lang/Class;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readListInternal(Ljava/util/List;ILjava/lang/ClassLoader;)V
-HSPLandroid/os/Parcel;->readListInternal(Ljava/util/List;ILjava/lang/ClassLoader;Ljava/lang/Class;)V
+HSPLandroid/os/Parcel;->readListInternal(Ljava/util/List;ILjava/lang/ClassLoader;Ljava/lang/Class;)V+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/os/Parcel;->readLong()J
 HSPLandroid/os/Parcel;->readLongArray([J)V
 HSPLandroid/os/Parcel;->readMap(Ljava/util/Map;Ljava/lang/ClassLoader;)V
@@ -12554,10 +12627,10 @@
 HSPLandroid/os/Parcel;->readParcelable(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Object;
 HSPLandroid/os/Parcel;->readParcelableArray(Ljava/lang/ClassLoader;)[Landroid/os/Parcelable;
 HSPLandroid/os/Parcel;->readParcelableArray(Ljava/lang/ClassLoader;Ljava/lang/Class;)[Ljava/lang/Object;
-HSPLandroid/os/Parcel;->readParcelableArrayInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/os/Parcel;->readParcelableArrayInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)[Ljava/lang/Object;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readParcelableCreator(Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator;
 HSPLandroid/os/Parcel;->readParcelableCreatorInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)Landroid/os/Parcelable$Creator;+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/Object;Landroid/os/Parcel;]Ljava/lang/reflect/Field;Ljava/lang/reflect/Field;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/os/Parcel;->readParcelableInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Object;
+HSPLandroid/os/Parcel;->readParcelableInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/Parcelable$Creator;megamorphic_types
 HSPLandroid/os/Parcel;->readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List;
 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;
@@ -12565,7 +12638,7 @@
 HSPLandroid/os/Parcel;->readPersistableBundle(Ljava/lang/ClassLoader;)Landroid/os/PersistableBundle;
 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;
+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;->readSparseArray(Ljava/lang/ClassLoader;Ljava/lang/Class;)Landroid/util/SparseArray;
@@ -12579,7 +12652,7 @@
 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;->readStrongBinder()Landroid/os/IBinder;
@@ -12599,13 +12672,13 @@
 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;->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
 HSPLandroid/os/Parcel;->writeBinderList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->writeBlob([B)V
 HSPLandroid/os/Parcel;->writeBoolean(Z)V
 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
 HSPLandroid/os/Parcel;->writeByteArray([B)V
 HSPLandroid/os/Parcel;->writeByteArray([BII)V
@@ -12624,9 +12697,9 @@
 HSPLandroid/os/Parcel;->writeMap(Ljava/util/Map;)V
 HSPLandroid/os/Parcel;->writeMapInternal(Ljava/util/Map;)V
 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;missing_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;missing_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
@@ -12635,12 +12708,12 @@
 HSPLandroid/os/Parcel;->writeSparseIntArray(Landroid/util/SparseIntArray;)V
 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
+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;->writeString8NoHelper(Ljava/lang/String;)V
-HSPLandroid/os/Parcel;->writeStringArray([Ljava/lang/String;)V
+HSPLandroid/os/Parcel;->writeStringArray([Ljava/lang/String;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeStringList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->writeStrongBinder(Landroid/os/IBinder;)V
 HSPLandroid/os/Parcel;->writeStrongInterface(Landroid/os/IInterface;)V
@@ -12649,13 +12722,13 @@
 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
-HSPLandroid/os/Parcel;->writeValue(Ljava/lang/Object;)V
+HSPLandroid/os/Parcel;->writeValue(ILjava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/lang/Double;Ljava/lang/Double;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/lang/Byte;Ljava/lang/Byte;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeValue(Ljava/lang/Object;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 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
 HSPLandroid/os/ParcelFileDescriptor$AutoCloseInputStream;->close()V
-HSPLandroid/os/ParcelFileDescriptor$AutoCloseInputStream;->read([B)I
+HSPLandroid/os/ParcelFileDescriptor$AutoCloseInputStream;->read([B)I+]Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;
 HSPLandroid/os/ParcelFileDescriptor$AutoCloseInputStream;->read([BII)I
 HSPLandroid/os/ParcelFileDescriptor$AutoCloseOutputStream;-><init>(Landroid/os/ParcelFileDescriptor;)V
 HSPLandroid/os/ParcelFileDescriptor$AutoCloseOutputStream;->close()V
@@ -12690,10 +12763,10 @@
 HSPLandroid/os/ParcelUuid$1;->newArray(I)[Landroid/os/ParcelUuid;
 HSPLandroid/os/ParcelUuid$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/os/ParcelUuid;-><init>(Ljava/util/UUID;)V
-HSPLandroid/os/ParcelUuid;->equals(Ljava/lang/Object;)Z
+HSPLandroid/os/ParcelUuid;->equals(Ljava/lang/Object;)Z+]Ljava/util/UUID;Ljava/util/UUID;
 HSPLandroid/os/ParcelUuid;->fromString(Ljava/lang/String;)Landroid/os/ParcelUuid;
 HSPLandroid/os/ParcelUuid;->getUuid()Ljava/util/UUID;
-HSPLandroid/os/ParcelUuid;->hashCode()I
+HSPLandroid/os/ParcelUuid;->hashCode()I+]Ljava/util/UUID;Ljava/util/UUID;
 HSPLandroid/os/ParcelUuid;->toString()Ljava/lang/String;
 HSPLandroid/os/ParcelUuid;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/ParcelableException;-><init>(Ljava/lang/Throwable;)V
@@ -12713,6 +12786,8 @@
 HSPLandroid/os/PatternMatcher;->matchPattern(Ljava/lang/String;Ljava/lang/String;[II)Z
 HSPLandroid/os/PatternMatcher;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/PerformanceHintManager;->createHintSession([IJ)Landroid/os/PerformanceHintManager$Session;
+HSPLandroid/os/PermissionEnforcer;->checkPermission(Ljava/lang/String;II)I+]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLandroid/os/PermissionEnforcer;->enforcePermission(Ljava/lang/String;II)V+]Landroid/os/PermissionEnforcer;Landroid/os/PermissionEnforcer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/os/PersistableBundle$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/PersistableBundle;
 HSPLandroid/os/PersistableBundle$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/PersistableBundle$MyReadMapCallback;-><init>()V
@@ -12721,7 +12796,7 @@
 HSPLandroid/os/PersistableBundle;-><init>(Landroid/os/Parcel;I)V
 HSPLandroid/os/PersistableBundle;-><init>(Landroid/os/PersistableBundle;)V
 HSPLandroid/os/PersistableBundle;-><init>(Landroid/os/PersistableBundle;Z)V
-HSPLandroid/os/PersistableBundle;-><init>(Landroid/util/ArrayMap;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/PersistableBundle;Landroid/os/PersistableBundle;
+HSPLandroid/os/PersistableBundle;-><init>(Landroid/util/ArrayMap;Z)V
 HSPLandroid/os/PersistableBundle;->deepCopy()Landroid/os/PersistableBundle;
 HSPLandroid/os/PersistableBundle;->getPersistableBundle(Ljava/lang/String;)Landroid/os/PersistableBundle;
 HSPLandroid/os/PersistableBundle;->isValidType(Ljava/lang/Object;)Z
@@ -12734,8 +12809,8 @@
 HSPLandroid/os/PowerManager$1;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/os/PowerManager$1;->recompute(Ljava/lang/Void;)Ljava/lang/Boolean;
 HSPLandroid/os/PowerManager$2;-><init>(Landroid/os/PowerManager;ILjava/lang/String;)V
+HSPLandroid/os/PowerManager$2;->recompute(Ljava/lang/Integer;)Ljava/lang/Boolean;+]Landroid/os/IPowerManager;Landroid/os/IPowerManager$Stub$Proxy;
 HSPLandroid/os/PowerManager$2;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/os/PowerManager$2;->recompute(Ljava/lang/Void;)Ljava/lang/Boolean;
 HSPLandroid/os/PowerManager$3$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/os/PowerManager$3;->lambda$onStatusChange$0(Landroid/os/PowerManager$OnThermalStatusChangedListener;I)V
 HSPLandroid/os/PowerManager$3;->onStatusChange(I)V
@@ -12744,13 +12819,13 @@
 HSPLandroid/os/PowerManager$WakeLock;-><init>(Landroid/os/PowerManager;ILjava/lang/String;Ljava/lang/String;I)V
 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;->setReferenceCounted(Z)V
-HSPLandroid/os/PowerManager$WakeLock;->setWorkSource(Landroid/os/WorkSource;)V
+HSPLandroid/os/PowerManager$WakeLock;->setWorkSource(Landroid/os/WorkSource;)V+]Landroid/os/WorkSource;Landroid/os/WorkSource;]Landroid/os/IPowerManager;Landroid/os/IPowerManager$Stub$Proxy;
 HSPLandroid/os/PowerManager;-><init>(Landroid/content/Context;Landroid/os/IPowerManager;Landroid/os/IThermalService;Landroid/os/Handler;)V
 HSPLandroid/os/PowerManager;->addThermalStatusListener(Landroid/os/PowerManager$OnThermalStatusChangedListener;)V
 HSPLandroid/os/PowerManager;->addThermalStatusListener(Ljava/util/concurrent/Executor;Landroid/os/PowerManager$OnThermalStatusChangedListener;)V
@@ -12803,7 +12878,7 @@
 HSPLandroid/os/RemoteCallback;-><init>(Landroid/os/RemoteCallback$OnResultListener;)V
 HSPLandroid/os/RemoteCallback;-><init>(Landroid/os/RemoteCallback$OnResultListener;Landroid/os/Handler;)V
 HSPLandroid/os/RemoteCallback;->sendResult(Landroid/os/Bundle;)V
-HSPLandroid/os/RemoteCallback;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/RemoteCallback;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/IRemoteCallback;Landroid/os/RemoteCallback$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/RemoteCallbackList$Callback;-><init>(Landroid/os/RemoteCallbackList;Landroid/os/IInterface;Ljava/lang/Object;)V
 HSPLandroid/os/RemoteCallbackList$Callback;->binderDied()V
 HSPLandroid/os/RemoteCallbackList;-><init>()V
@@ -12841,6 +12916,7 @@
 HSPLandroid/os/ServiceManager;->isDeclared(Ljava/lang/String;)Z
 HSPLandroid/os/ServiceManager;->rawGetService(Ljava/lang/String;)Landroid/os/IBinder;
 HSPLandroid/os/ServiceManager;->waitForDeclaredService(Ljava/lang/String;)Landroid/os/IBinder;
+HSPLandroid/os/ServiceManager;->waitForService(Ljava/lang/String;)Landroid/os/IBinder;
 HSPLandroid/os/ServiceManagerProxy;->addService(Ljava/lang/String;Landroid/os/IBinder;ZI)V
 HSPLandroid/os/ServiceManagerProxy;->checkService(Ljava/lang/String;)Landroid/os/IBinder;
 HSPLandroid/os/ServiceManagerProxy;->getService(Ljava/lang/String;)Landroid/os/IBinder;
@@ -12894,16 +12970,16 @@
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy$$ExternalSyntheticLambda1;->run()V
 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(Landroid/view/IWindowManager;Ljava/util/ArrayList;)V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->handleViolationWithTimingAttempt(Landroid/os/StrictMode$ViolationInfo;)V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;]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;
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->lambda$handleViolationWithTimingAttempt$0(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
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onThreadPolicyViolation(Landroid/os/StrictMode$ViolationInfo;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Landroid/os/StrictMode$ViolationLogger;Landroid/os/StrictMode$$ExternalSyntheticLambda1;]Ljava/lang/String;Ljava/lang/String;]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;
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onUnbufferedIO()V
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onWriteToDisk()V
 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
@@ -12940,12 +13016,12 @@
 HSPLandroid/os/StrictMode$UnsafeIntentStrictModeCallback;-><init>()V
 HSPLandroid/os/StrictMode$UnsafeIntentStrictModeCallback;-><init>(Landroid/os/StrictMode$UnsafeIntentStrictModeCallback-IA;)V
 HSPLandroid/os/StrictMode$ViolationInfo;->-$$Nest$fgetmViolation(Landroid/os/StrictMode$ViolationInfo;)Landroid/os/strictmode/Violation;
-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/Parcel;Z)V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/util/Deque;Ljava/util/ArrayDeque;
 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/io/StringWriter;Ljava/io/StringWriter;]Landroid/os/strictmode/Violation;Landroid/os/strictmode/DiskReadViolation;,Landroid/os/strictmode/CustomViolation;
+HSPLandroid/os/StrictMode$ViolationInfo;->hashCode()I+]Landroid/os/strictmode/Violation;Landroid/os/strictmode/DiskReadViolation;,Landroid/os/strictmode/LeakedClosableViolation;
 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;]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;
@@ -12985,12 +13061,12 @@
 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;->clampViolationTimeMap(Landroid/util/SparseLongArray;J)V
-HSPLandroid/os/StrictMode;->clearGatheredViolations()V
+HSPLandroid/os/StrictMode;->clampViolationTimeMap(Landroid/util/SparseLongArray;J)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;
+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;->getThreadPolicy()Landroid/os/StrictMode$ThreadPolicy;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/os/StrictMode;->getThreadPolicyMask()I
 HSPLandroid/os/StrictMode;->getVmPolicy()Landroid/os/StrictMode$VmPolicy;
 HSPLandroid/os/StrictMode;->handleApplicationStrictModeViolation(ILandroid/os/StrictMode$ViolationInfo;)V
@@ -13008,12 +13084,12 @@
 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;->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;->registerIntentMatchingRestrictionCallback()V
-HSPLandroid/os/StrictMode;->setBlockGuardPolicy(I)V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;]Ljava/lang/ThreadLocal;Landroid/os/StrictMode$4;
+HSPLandroid/os/StrictMode;->setBlockGuardPolicy(I)V
 HSPLandroid/os/StrictMode;->setBlockGuardVmPolicy(I)V
 HSPLandroid/os/StrictMode;->setCloseGuardEnabled(Z)V
-HSPLandroid/os/StrictMode;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
+HSPLandroid/os/StrictMode;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V
 HSPLandroid/os/StrictMode;->setThreadPolicyMask(I)V
 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
@@ -13047,6 +13123,7 @@
 HSPLandroid/os/SystemProperties;->native_get(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/os/SystemProperties;->set(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/os/SystemVibrator;-><init>(Landroid/content/Context;)V
+HSPLandroid/os/SystemVibrator;->getInfo()Landroid/os/VibratorInfo;
 HSPLandroid/os/SystemVibrator;->hasVibrator()Z
 HSPLandroid/os/SystemVibrator;->vibrate(ILjava/lang/String;Landroid/os/VibrationEffect;Ljava/lang/String;Landroid/os/VibrationAttributes;)V
 HSPLandroid/os/SystemVibratorManager;-><init>(Landroid/content/Context;)V
@@ -13065,18 +13142,18 @@
 HSPLandroid/os/Temperature;->getStatus()I
 HSPLandroid/os/Temperature;->isValidStatus(I)Z
 HSPLandroid/os/ThreadLocalWorkSource$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
-HSPLandroid/os/ThreadLocalWorkSource;->getToken()J+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;
-HSPLandroid/os/ThreadLocalWorkSource;->getUid()I+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;
+HSPLandroid/os/ThreadLocalWorkSource;->getToken()J
+HSPLandroid/os/ThreadLocalWorkSource;->getUid()I
 HSPLandroid/os/ThreadLocalWorkSource;->lambda$static$0()[I
 HSPLandroid/os/ThreadLocalWorkSource;->parseUidFromToken(J)I
-HSPLandroid/os/ThreadLocalWorkSource;->restore(J)V+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;
-HSPLandroid/os/ThreadLocalWorkSource;->setUid(I)J+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;
+HSPLandroid/os/ThreadLocalWorkSource;->restore(J)V
+HSPLandroid/os/ThreadLocalWorkSource;->setUid(I)J
 HSPLandroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V
 HSPLandroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V
 HSPLandroid/os/Trace;->asyncTraceForTrackBegin(JLjava/lang/String;Ljava/lang/String;I)V
 HSPLandroid/os/Trace;->asyncTraceForTrackEnd(JLjava/lang/String;I)V
 HSPLandroid/os/Trace;->beginAsyncSection(Ljava/lang/String;I)V
-HSPLandroid/os/Trace;->beginSection(Ljava/lang/String;)V
+HSPLandroid/os/Trace;->beginSection(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/os/Trace;->endAsyncSection(Ljava/lang/String;I)V
 HSPLandroid/os/Trace;->endSection()V
 HSPLandroid/os/Trace;->instant(JLjava/lang/String;)V
@@ -13088,7 +13165,7 @@
 HSPLandroid/os/Trace;->traceBegin(JLjava/lang/String;)V
 HSPLandroid/os/Trace;->traceCounter(JLjava/lang/String;I)V
 HSPLandroid/os/Trace;->traceEnd(J)V
-HSPLandroid/os/UserHandle$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/UserHandle$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;
 HSPLandroid/os/UserHandle$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/UserHandle;-><init>(I)V
 HSPLandroid/os/UserHandle;->equals(Ljava/lang/Object;)Z
@@ -13131,6 +13208,7 @@
 HSPLandroid/os/UserManager$3;->recompute(Ljava/lang/Integer;)Ljava/lang/String;
 HSPLandroid/os/UserManager$3;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/os/UserManager$4;-><init>(Landroid/os/UserManager;ILjava/lang/String;)V
+HSPLandroid/os/UserManager$4;->recompute(Ljava/lang/Integer;)Landroid/content/pm/UserProperties;+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/IUserManager;Landroid/os/IUserManager$Stub$Proxy;
 HSPLandroid/os/UserManager;->-$$Nest$fgetmService(Landroid/os/UserManager;)Landroid/os/IUserManager;
 HSPLandroid/os/UserManager;-><init>(Landroid/content/Context;Landroid/os/IUserManager;)V
 HSPLandroid/os/UserManager;->convertUserIdsToUserHandles([I)Ljava/util/List;
@@ -13157,6 +13235,7 @@
 HSPLandroid/os/UserManager;->getUserHandles(Z)Ljava/util/List;
 HSPLandroid/os/UserManager;->getUserInfo(I)Landroid/content/pm/UserInfo;
 HSPLandroid/os/UserManager;->getUserProfiles()Ljava/util/List;
+HSPLandroid/os/UserManager;->getUserProperties(Landroid/os/UserHandle;)Landroid/content/pm/UserProperties;+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/app/PropertyInvalidatedCache;Landroid/os/UserManager$4;
 HSPLandroid/os/UserManager;->getUserRestrictionSources(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;
 HSPLandroid/os/UserManager;->getUserRestrictions()Landroid/os/Bundle;
 HSPLandroid/os/UserManager;->getUserRestrictions(Landroid/os/UserHandle;)Landroid/os/Bundle;
@@ -13182,6 +13261,7 @@
 HSPLandroid/os/UserManager;->isUserRunning(Landroid/os/UserHandle;)Z
 HSPLandroid/os/UserManager;->isUserSwitcherEnabled()Z
 HSPLandroid/os/UserManager;->isUserSwitcherEnabled(Z)Z
+HSPLandroid/os/UserManager;->isUserTypeCloneProfile(Ljava/lang/String;)Z
 HSPLandroid/os/UserManager;->isUserTypeManagedProfile(Ljava/lang/String;)Z
 HSPLandroid/os/UserManager;->isUserTypeRestricted(Ljava/lang/String;)Z
 HSPLandroid/os/UserManager;->isUserUnlocked()Z
@@ -13203,6 +13283,7 @@
 HSPLandroid/os/Vibrator;-><init>(Landroid/content/Context;)V
 HSPLandroid/os/Vibrator;->vibrate(Landroid/os/VibrationEffect;Landroid/media/AudioAttributes;)V
 HSPLandroid/os/Vibrator;->vibrate(Landroid/os/VibrationEffect;Landroid/os/VibrationAttributes;)V
+HSPLandroid/os/VibratorInfo;->hasCapability(J)Z
 HSPLandroid/os/VibratorManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/os/WorkSource$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/WorkSource;
 HSPLandroid/os/WorkSource$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -13243,7 +13324,6 @@
 HSPLandroid/os/health/HealthStatsParceler$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/health/HealthStatsParceler;
 HSPLandroid/os/health/HealthStatsParceler$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/health/HealthStatsParceler;->getHealthStats()Landroid/os/health/HealthStats;
-HSPLandroid/os/health/SystemHealthManager;-><init>(Lcom/android/internal/app/IBatteryStats;)V
 HSPLandroid/os/health/SystemHealthManager;->takeMyUidSnapshot()Landroid/os/health/HealthStats;
 HSPLandroid/os/health/SystemHealthManager;->takeUidSnapshot(I)Landroid/os/health/HealthStats;
 HSPLandroid/os/health/TimerStat$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/health/TimerStat;
@@ -13280,7 +13360,7 @@
 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;+]Landroid/os/storage/IStorageManager;Landroid/os/storage/IStorageManager$Stub$Proxy;
+HSPLandroid/os/storage/StorageManager;->getVolumeList(II)[Landroid/os/storage/StorageVolume;
 HSPLandroid/os/storage/StorageManager;->getVolumes()Ljava/util/List;
 HSPLandroid/os/storage/StorageManager;->isEncrypted()Z
 HSPLandroid/os/storage/StorageManager;->isFileEncryptedNativeOnly()Z
@@ -13315,7 +13395,7 @@
 HSPLandroid/os/strictmode/Violation;-><init>(Ljava/lang/String;)V
 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/DiskReadViolation;,Ljava/lang/Class;]Ljava/lang/Throwable;Ljava/lang/Throwable;]Landroid/os/strictmode/Violation;Landroid/os/strictmode/DiskReadViolation;,Landroid/os/strictmode/LeakedClosableViolation;
 HSPLandroid/os/strictmode/Violation;->initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;
 HSPLandroid/os/vibrator/PrebakedSegment;->getDuration()J
 HSPLandroid/os/vibrator/PrebakedSegment;->isValidEffectStrength(I)Z
@@ -13336,7 +13416,6 @@
 HSPLandroid/permission/IPermissionManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/permission/IPermissionManager$Stub$Proxy;->addOnPermissionsChangeListener(Landroid/permission/IOnPermissionsChangeListener;)V
 HSPLandroid/permission/IPermissionManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/permission/IPermissionManager$Stub$Proxy;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;I)I
 HSPLandroid/permission/IPermissionManager$Stub$Proxy;->getPermissionInfo(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;
 HSPLandroid/permission/IPermissionManager$Stub$Proxy;->getSplitPermissions()Ljava/util/List;
 HSPLandroid/permission/IPermissionManager$Stub$Proxy;->removeOnPermissionsChangeListener(Landroid/permission/IOnPermissionsChangeListener;)V
@@ -13355,24 +13434,16 @@
 HSPLandroid/permission/PermissionManager$OnPermissionsChangeListenerDelegate;-><init>(Landroid/permission/PermissionManager;Landroid/content/pm/PackageManager$OnPermissionsChangedListener;Landroid/os/Looper;)V
 HSPLandroid/permission/PermissionManager$OnPermissionsChangeListenerDelegate;->handleMessage(Landroid/os/Message;)Z
 HSPLandroid/permission/PermissionManager$OnPermissionsChangeListenerDelegate;->onPermissionsChanged(I)V
-HSPLandroid/permission/PermissionManager$PackageNamePermissionQuery;-><init>(Ljava/lang/String;Ljava/lang/String;I)V
 HSPLandroid/permission/PermissionManager$PackageNamePermissionQuery;->equals(Ljava/lang/Object;)Z
 HSPLandroid/permission/PermissionManager$PackageNamePermissionQuery;->hashCode()I
-HSPLandroid/permission/PermissionManager$PermissionQuery;-><init>(Ljava/lang/String;II)V
 HSPLandroid/permission/PermissionManager$PermissionQuery;->equals(Ljava/lang/Object;)Z
 HSPLandroid/permission/PermissionManager$PermissionQuery;->hashCode()I
 HSPLandroid/permission/PermissionManager$SplitPermissionInfo;-><init>(Landroid/content/pm/permission/SplitPermissionInfoParcelable;)V
 HSPLandroid/permission/PermissionManager$SplitPermissionInfo;->getNewPermissions()Ljava/util/List;
 HSPLandroid/permission/PermissionManager$SplitPermissionInfo;->getSplitPermission()Ljava/lang/String;
 HSPLandroid/permission/PermissionManager$SplitPermissionInfo;->getTargetSdk()I
-HSPLandroid/permission/PermissionManager;->-$$Nest$smcheckPackageNamePermissionUncached(Ljava/lang/String;Ljava/lang/String;I)I
-HSPLandroid/permission/PermissionManager;->-$$Nest$smcheckPermissionUncached(Ljava/lang/String;II)I
 HSPLandroid/permission/PermissionManager;-><init>(Landroid/content/Context;)V
 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;->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;
 HSPLandroid/permission/PermissionManager;->getSplitPermissions()Ljava/util/List;
@@ -13415,12 +13486,12 @@
 HSPLandroid/provider/SearchIndexablesProvider;->querySiteMapPairs()Landroid/database/Cursor;
 HSPLandroid/provider/SearchIndexablesProvider;->querySliceUriPairs()Landroid/database/Cursor;
 HSPLandroid/provider/Settings$Config;->checkCallingOrSelfPermission(Ljava/lang/String;)I
-HSPLandroid/provider/Settings$Config;->createCompositeName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/provider/Settings$Config;->createCompositeName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/provider/Settings$Config;->createNamespaceUri(Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/provider/Settings$Config;->createPrefix(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/provider/Settings$Config;->createPrefix(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/provider/Settings$Config;->enforceReadPermission(Ljava/lang/String;)V
 HSPLandroid/provider/Settings$Config;->getContentResolver()Landroid/content/ContentResolver;
-HSPLandroid/provider/Settings$Config;->getStrings(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/util/List;)Ljava/util/Map;
+HSPLandroid/provider/Settings$Config;->getStrings(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/util/List;)Ljava/util/Map;+]Landroid/provider/Settings$NameValueCache;Landroid/provider/Settings$NameValueCache;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/String;Ljava/lang/String;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/provider/Settings$Config;->getStrings(Ljava/lang/String;Ljava/util/List;)Ljava/util/Map;
 HSPLandroid/provider/Settings$Config;->registerContentObserver(Ljava/lang/String;ZLandroid/database/ContentObserver;)V
 HSPLandroid/provider/Settings$ContentProviderHolder;->-$$Nest$fgetmUri(Landroid/provider/Settings$ContentProviderHolder;)Landroid/net/Uri;
@@ -13443,7 +13514,7 @@
 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;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;
-HSPLandroid/provider/Settings$NameValueCache;->getStringsForPrefix(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/util/List;)Landroid/util/ArrayMap;
+HSPLandroid/provider/Settings$NameValueCache;->getStringsForPrefix(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/util/List;)Landroid/util/ArrayMap;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/provider/Settings$GenerationTracker;Landroid/provider/Settings$GenerationTracker;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/provider/Settings$ContentProviderHolder;Landroid/provider/Settings$ContentProviderHolder;]Ljava/util/Map;Ljava/util/HashMap;]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;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
 HSPLandroid/provider/Settings$NameValueCache;->isCallerExemptFromReadableRestriction()Z
 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;
@@ -13455,7 +13526,7 @@
 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
@@ -13475,6 +13546,7 @@
 HSPLandroid/provider/Settings$System;->putIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z
 HSPLandroid/provider/Settings$System;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z
 HSPLandroid/provider/Settings$System;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;IZ)Z
+HSPLandroid/provider/Settings;->-$$Nest$smparseFloatSettingWithDefault(Ljava/lang/String;F)F
 HSPLandroid/provider/Settings;->-$$Nest$smparseIntSetting(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/provider/Settings;->-$$Nest$smparseIntSettingWithDefault(Ljava/lang/String;I)I
 HSPLandroid/provider/Settings;->canDrawOverlays(Landroid/content/Context;)Z
@@ -13495,7 +13567,6 @@
 HSPLandroid/security/KeyChain;->bindAsUser(Landroid/content/Context;Landroid/os/Handler;Landroid/os/UserHandle;)Landroid/security/KeyChain$KeyChainConnection;
 HSPLandroid/security/KeyChain;->bindAsUser(Landroid/content/Context;Landroid/os/UserHandle;)Landroid/security/KeyChain$KeyChainConnection;
 HSPLandroid/security/KeyChain;->ensureNotOnMainThread(Landroid/content/Context;)V
-HSPLandroid/security/KeyStore2$$ExternalSyntheticLambda3;-><init>(Landroid/system/keystore2/KeyDescriptor;)V
 HSPLandroid/security/KeyStore2$$ExternalSyntheticLambda3;->execute(Landroid/system/keystore2/IKeystoreService;)Ljava/lang/Object;
 HSPLandroid/security/KeyStore2$$ExternalSyntheticLambda4;->execute(Landroid/system/keystore2/IKeystoreService;)Ljava/lang/Object;
 HSPLandroid/security/KeyStore2;-><init>()V
@@ -13504,7 +13575,6 @@
 HSPLandroid/security/KeyStore2;->getKeyStoreException(ILjava/lang/String;)Landroid/security/KeyStoreException;
 HSPLandroid/security/KeyStore2;->getService(Z)Landroid/system/keystore2/IKeystoreService;
 HSPLandroid/security/KeyStore2;->handleRemoteExceptionWithRetry(Landroid/security/KeyStore2$CheckedRemoteRequest;)Ljava/lang/Object;
-HSPLandroid/security/KeyStore2;->lambda$getKeyEntry$4(Landroid/system/keystore2/KeyDescriptor;Landroid/system/keystore2/IKeystoreService;)Landroid/system/keystore2/KeyEntryResponse;
 HSPLandroid/security/KeyStore;->getInstance()Landroid/security/KeyStore;
 HSPLandroid/security/KeyStoreException;-><init>(ILjava/lang/String;)V
 HSPLandroid/security/KeyStoreException;-><init>(ILjava/lang/String;Ljava/lang/String;)V
@@ -13590,7 +13660,6 @@
 HSPLandroid/security/keystore/KeyGenParameterSpec$Builder;->setBlockModes([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;
 HSPLandroid/security/keystore/KeyGenParameterSpec$Builder;->setEncryptionPaddings([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;
 HSPLandroid/security/keystore/KeyGenParameterSpec$Builder;->setKeySize(I)Landroid/security/keystore/KeyGenParameterSpec$Builder;
-HSPLandroid/security/keystore/KeyGenParameterSpec;-><init>(Ljava/lang/String;IILjava/security/spec/AlgorithmParameterSpec;Ljavax/security/auth/x500/X500Principal;Ljava/math/BigInteger;Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;I[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ZZIIZ[BZ[IZZZZZZZILjava/lang/String;)V
 HSPLandroid/security/keystore/KeyGenParameterSpec;->getBlockModes()[Ljava/lang/String;
 HSPLandroid/security/keystore/KeyGenParameterSpec;->getEncryptionPaddings()[Ljava/lang/String;
 HSPLandroid/security/keystore/KeyGenParameterSpec;->getKeySize()I
@@ -13654,7 +13723,6 @@
 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;->finalize()V
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->flushAAD()V
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->init(ILjava/security/Key;Ljava/security/SecureRandom;)V
@@ -13664,6 +13732,7 @@
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->setKey(Landroid/security/keystore2/AndroidKeyStoreKey;)V
 HSPLandroid/security/keystore2/AndroidKeyStoreKey;-><init>(Landroid/system/keystore2/KeyDescriptor;J[Landroid/system/keystore2/Authorization;Ljava/lang/String;Landroid/security/KeyStoreSecurityLevel;)V
 HSPLandroid/security/keystore2/AndroidKeyStoreKey;->getAlgorithm()Ljava/lang/String;
+HSPLandroid/security/keystore2/AndroidKeyStoreKey;->getAuthorizations()[Landroid/system/keystore2/Authorization;
 HSPLandroid/security/keystore2/AndroidKeyStoreKey;->getFormat()Ljava/lang/String;
 HSPLandroid/security/keystore2/AndroidKeyStoreKey;->getKeyIdDescriptor()Landroid/system/keystore2/KeyDescriptor;
 HSPLandroid/security/keystore2/AndroidKeyStoreKey;->getSecurityLevel()Landroid/security/KeyStoreSecurityLevel;
@@ -13971,6 +14040,8 @@
 HSPLandroid/sysprop/DisplayProperties;->debug_force_rtl()Ljava/util/Optional;
 HSPLandroid/sysprop/DisplayProperties;->debug_layout()Ljava/util/Optional;
 HSPLandroid/sysprop/DisplayProperties;->tryParseBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
+HSPLandroid/sysprop/InputProperties;->force_enable_stylus_pointer_icon()Ljava/util/Optional;
+HSPLandroid/sysprop/InputProperties;->tryParseBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
 HSPLandroid/sysprop/InputProperties;->tryParseString(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/sysprop/TelephonyProperties$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/sysprop/TelephonyProperties$$ExternalSyntheticLambda10;->apply(Ljava/lang/Object;)Ljava/lang/Object;
@@ -14024,9 +14095,9 @@
 HSPLandroid/system/Os;->fstat(Ljava/io/FileDescriptor;)Landroid/system/StructStat;
 HSPLandroid/system/Os;->getpeername(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;
 HSPLandroid/system/Os;->getpgid(I)I
-HSPLandroid/system/Os;->getpid()I+]Llibcore/io/Os;Landroid/app/ActivityThread$AndroidOs;
-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;->getpid()I
+HSPLandroid/system/Os;->gettid()I
+HSPLandroid/system/Os;->getuid()I
 HSPLandroid/system/Os;->getxattr(Ljava/lang/String;Ljava/lang/String;)[B
 HSPLandroid/system/Os;->ioctlInt(Ljava/io/FileDescriptor;I)I
 HSPLandroid/system/Os;->listen(Ljava/io/FileDescriptor;I)V
@@ -14074,7 +14145,7 @@
 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;
@@ -14116,7 +14187,7 @@
 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;
@@ -14357,7 +14428,7 @@
 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+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/telephony/NetworkRegistrationInfo;)V
 HSPLandroid/telephony/NetworkRegistrationInfo;->domainToString(I)Ljava/lang/String;
 HSPLandroid/telephony/NetworkRegistrationInfo;->getAccessNetworkTechnology()I
@@ -14428,7 +14499,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+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/telephony/ServiceState;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/telephony/ServiceState;-><init>(Landroid/telephony/ServiceState;)V
 HSPLandroid/telephony/ServiceState;->copyFrom(Landroid/telephony/ServiceState;)V
 HSPLandroid/telephony/ServiceState;->createLocationInfoSanitizedCopy(Z)Landroid/telephony/ServiceState;
@@ -14551,19 +14622,15 @@
 HSPLandroid/telephony/SubscriptionInfo;->isEmbedded()Z
 HSPLandroid/telephony/SubscriptionInfo;->isOpportunistic()Z
 HSPLandroid/telephony/SubscriptionInfo;->toString()Ljava/lang/String;
-HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda10;->applyOrThrow(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda3;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda5;->applyOrThrow(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda4;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda5;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda6;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda7;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda8;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda9;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda7;->applyOrThrow(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda9;->applyOrThrow(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/telephony/SubscriptionManager$IntegerPropertyInvalidatedCache;->query(Ljava/lang/Integer;)Ljava/lang/Object;
 HSPLandroid/telephony/SubscriptionManager$IntegerPropertyInvalidatedCache;->recompute(Ljava/lang/Integer;)Ljava/lang/Object;
 HSPLandroid/telephony/SubscriptionManager$IntegerPropertyInvalidatedCache;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener$OnSubscriptionsChangedListenerHandler;-><init>(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V
-HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener$OnSubscriptionsChangedListenerHandler;-><init>(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;Landroid/os/Looper;)V
-HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;->-$$Nest$fgetmExecutor(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)Lcom/android/internal/telephony/util/HandlerExecutor;
 HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;-><init>()V
 HSPLandroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;-><init>(Landroid/os/Looper;)V
 HSPLandroid/telephony/SubscriptionManager$VoidPropertyInvalidatedCache;->query(Ljava/lang/Void;)Ljava/lang/Object;
@@ -14595,7 +14662,6 @@
 HSPLandroid/telephony/SubscriptionManager;->getSlotIndex(I)I
 HSPLandroid/telephony/SubscriptionManager;->getSubId(I)[I
 HSPLandroid/telephony/SubscriptionManager;->getSubscriptionIds(I)[I
-HSPLandroid/telephony/SubscriptionManager;->isSubscriptionManagerServiceEnabled()Z
 HSPLandroid/telephony/SubscriptionManager;->isSubscriptionVisible(Landroid/telephony/SubscriptionInfo;)Z
 HSPLandroid/telephony/SubscriptionManager;->isUsableSubIdValue(I)Z
 HSPLandroid/telephony/SubscriptionManager;->isValidSlotIndex(I)Z
@@ -14687,7 +14753,7 @@
 HSPLandroid/telephony/TelephonyManager;->getSimSpecificCarrierId()I
 HSPLandroid/telephony/TelephonyManager;->getSimState()I
 HSPLandroid/telephony/TelephonyManager;->getSimState(I)I
-HSPLandroid/telephony/TelephonyManager;->getSimStateForSlotIndex(I)I+]Landroid/os/TelephonyServiceManager$ServiceRegisterer;Landroid/os/TelephonyServiceManager$ServiceRegisterer;]Landroid/os/TelephonyServiceManager;Landroid/os/TelephonyServiceManager;]Lcom/android/internal/telephony/ITelephony;Lcom/android/internal/telephony/ITelephony$Stub$Proxy;
+HSPLandroid/telephony/TelephonyManager;->getSimStateForSlotIndex(I)I
 HSPLandroid/telephony/TelephonyManager;->getSimStateIncludingLoaded()I
 HSPLandroid/telephony/TelephonyManager;->getSlotIndex()I
 HSPLandroid/telephony/TelephonyManager;->getSmsService()Lcom/android/internal/telephony/ISms;
@@ -14717,6 +14783,7 @@
 HSPLandroid/telephony/TelephonyManager;->mergeAttributionAndRenouncedPermissions(Landroid/content/Context;Landroid/content/Context;)Landroid/content/Context;
 HSPLandroid/telephony/TelephonyManager;->registerTelephonyCallback(ILjava/util/concurrent/Executor;Landroid/telephony/TelephonyCallback;)V
 HSPLandroid/telephony/TelephonyManager;->registerTelephonyCallback(Ljava/util/concurrent/Executor;Landroid/telephony/TelephonyCallback;)V
+HSPLandroid/telephony/TelephonyManager;->unregisterTelephonyCallback(Landroid/telephony/TelephonyCallback;)V
 HSPLandroid/telephony/TelephonyRegistryManager$$ExternalSyntheticLambda0;-><init>()V
 HSPLandroid/telephony/TelephonyRegistryManager$$ExternalSyntheticLambda0;->applyAsInt(Ljava/lang/Object;)I
 HSPLandroid/telephony/TelephonyRegistryManager$$ExternalSyntheticLambda1;-><init>()V
@@ -14800,7 +14867,7 @@
 HSPLandroid/telephony/ims/RegistrationManager$RegistrationCallback;->setExecutor(Ljava/util/concurrent/Executor;)V
 HSPLandroid/telephony/ims/aidl/IImsRegistrationCallback$Stub;-><init>()V
 HSPLandroid/telephony/ims/aidl/IImsRegistrationCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/text/AndroidBidi;->bidi(I[C[B)I+]Landroid/icu/text/Bidi;Landroid/icu/text/Bidi;
+HSPLandroid/text/AndroidBidi;->bidi(I[C[B)I
 HSPLandroid/text/AndroidBidi;->directions(I[BI[CII)Landroid/text/Layout$Directions;
 HSPLandroid/text/AutoGrowArray$ByteArray;-><init>()V
 HSPLandroid/text/AutoGrowArray$ByteArray;-><init>(I)V
@@ -14848,14 +14915,14 @@
 HSPLandroid/text/BoringLayout;->getLineDescent(I)I
 HSPLandroid/text/BoringLayout;->getLineDirections(I)Landroid/text/Layout$Directions;
 HSPLandroid/text/BoringLayout;->getLineMax(I)F
-HSPLandroid/text/BoringLayout;->getLineStart(I)I+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannedString;
+HSPLandroid/text/BoringLayout;->getLineStart(I)I
 HSPLandroid/text/BoringLayout;->getLineTop(I)I
 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+]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/text/TextLine;Landroid/text/TextLine;
+HSPLandroid/text/BoringLayout;->init(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/Layout$Alignment;Landroid/text/BoringLayout$Metrics;ZZZ)V
 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;missing_types]Landroid/text/TextDirectionHeuristic;Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;
+HSPLandroid/text/BoringLayout;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;ZLandroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics;
 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;
@@ -14880,26 +14947,26 @@
 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;missing_types]Landroid/text/Spannable;missing_types
+HSPLandroid/text/DynamicLayout;->generate(Landroid/text/DynamicLayout$Builder;)V
 HSPLandroid/text/DynamicLayout;->getBlockEndLines()[I
 HSPLandroid/text/DynamicLayout;->getBlockIndices()[I
 HSPLandroid/text/DynamicLayout;->getBlocksAlwaysNeedToBeRedrawn()Landroid/util/ArraySet;
 HSPLandroid/text/DynamicLayout;->getEllipsisCount(I)I
 HSPLandroid/text/DynamicLayout;->getEllipsisStart(I)I
 HSPLandroid/text/DynamicLayout;->getEllipsizedWidth()I
-HSPLandroid/text/DynamicLayout;->getEndHyphenEdit(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/DynamicLayout;->getEndHyphenEdit(I)I
 HSPLandroid/text/DynamicLayout;->getIndexFirstChangedBlock()I
 HSPLandroid/text/DynamicLayout;->getLineContainsTab(I)Z
-HSPLandroid/text/DynamicLayout;->getLineCount()I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/DynamicLayout;->getLineCount()I
 HSPLandroid/text/DynamicLayout;->getLineDescent(I)I
-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+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/DynamicLayout;->getLineDirections(I)Landroid/text/Layout$Directions;
+HSPLandroid/text/DynamicLayout;->getLineExtra(I)I
+HSPLandroid/text/DynamicLayout;->getLineStart(I)I
+HSPLandroid/text/DynamicLayout;->getLineTop(I)I
 HSPLandroid/text/DynamicLayout;->getNumberOfBlocks()I
-HSPLandroid/text/DynamicLayout;->getParagraphDirection(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
-HSPLandroid/text/DynamicLayout;->getStartHyphenEdit(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
-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;->getParagraphDirection(I)I
+HSPLandroid/text/DynamicLayout;->getStartHyphenEdit(I)I
+HSPLandroid/text/DynamicLayout;->reflow(Ljava/lang/CharSequence;III)V
 HSPLandroid/text/DynamicLayout;->setIndexFirstChangedBlock(I)V
 HSPLandroid/text/DynamicLayout;->updateAlwaysNeedsToBeRedrawn(I)V
 HSPLandroid/text/DynamicLayout;->updateBlocks(III)V
@@ -14956,46 +15023,46 @@
 HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
 HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
-HSPLandroid/text/Layout;->drawBackground(Landroid/graphics/Canvas;II)V+]Landroid/text/Spanned;Landroid/text/SpannableString;]Landroid/text/SpanSet;Landroid/text/SpanSet;
-HSPLandroid/text/Layout;->drawText(Landroid/graphics/Canvas;II)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/text/TextLine;Landroid/text/TextLine;]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;missing_types
-HSPLandroid/text/Layout;->drawWithoutText(Landroid/graphics/Canvas;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;III)V+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/text/Layout;->drawBackground(Landroid/graphics/Canvas;II)V
+HSPLandroid/text/Layout;->drawText(Landroid/graphics/Canvas;II)V
+HSPLandroid/text/Layout;->drawWithoutText(Landroid/graphics/Canvas;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;III)V
 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
 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+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/StaticLayout;
+HSPLandroid/text/Layout;->getHeight()I
 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;->getHorizontal(IZIZ)F
 HSPLandroid/text/Layout;->getIndentAdjust(ILandroid/text/Layout$Alignment;)I
-HSPLandroid/text/Layout;->getLineBaseline(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
+HSPLandroid/text/Layout;->getLineBaseline(I)I
 HSPLandroid/text/Layout;->getLineBottom(I)I
-HSPLandroid/text/Layout;->getLineBottom(IZ)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/StaticLayout;
-HSPLandroid/text/Layout;->getLineEnd(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;
+HSPLandroid/text/Layout;->getLineBottom(IZ)I
+HSPLandroid/text/Layout;->getLineEnd(I)I
 HSPLandroid/text/Layout;->getLineExtent(ILandroid/text/Layout$TabStops;Z)F
-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+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
-HSPLandroid/text/Layout;->getLineForVertical(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
-HSPLandroid/text/Layout;->getLineLeft(I)F+]Landroid/text/Layout$Alignment;Landroid/text/Layout$Alignment;]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getLineExtent(IZ)F
+HSPLandroid/text/Layout;->getLineForOffset(I)I
+HSPLandroid/text/Layout;->getLineForVertical(I)I
+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;missing_types
-HSPLandroid/text/Layout;->getLineRight(I)F+]Landroid/text/Layout$Alignment;Landroid/text/Layout$Alignment;]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
-HSPLandroid/text/Layout;->getLineStartPos(III)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getLineRangeForDraw(Landroid/graphics/Canvas;)J
+HSPLandroid/text/Layout;->getLineRight(I)F
+HSPLandroid/text/Layout;->getLineStartPos(III)I
 HSPLandroid/text/Layout;->getLineVisibleEnd(I)I
-HSPLandroid/text/Layout;->getLineVisibleEnd(III)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannableString;
+HSPLandroid/text/Layout;->getLineVisibleEnd(III)I
 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;+]Landroid/text/Layout;Landroid/text/DynamicLayout;
-HSPLandroid/text/Layout;->getParagraphLeadingMargin(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;
-HSPLandroid/text/Layout;->getParagraphLeft(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getParagraphAlignment(I)Landroid/text/Layout$Alignment;
+HSPLandroid/text/Layout;->getParagraphLeadingMargin(I)I
+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;+]Landroid/text/Spanned;Landroid/text/SpannedString;,Landroid/text/SpannableString;
-HSPLandroid/text/Layout;->getPrimaryHorizontal(I)F+]Landroid/text/Layout;Landroid/text/DynamicLayout;
+HSPLandroid/text/Layout;->getParagraphSpans(Landroid/text/Spanned;IILjava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/text/Layout;->getPrimaryHorizontal(I)F
 HSPLandroid/text/Layout;->getPrimaryHorizontal(IZ)F
 HSPLandroid/text/Layout;->getSelection(IILandroid/text/Layout$SelectionRectangleConsumer;)V
 HSPLandroid/text/Layout;->getSelectionPath(IILandroid/graphics/Path;)V
@@ -15008,20 +15075,17 @@
 HSPLandroid/text/Layout;->increaseWidthTo(I)V
 HSPLandroid/text/Layout;->isFallbackLineSpacingEnabled()Z
 HSPLandroid/text/Layout;->isJustificationRequired(I)Z
-HSPLandroid/text/Layout;->isRtlCharAt(I)Z+]Landroid/text/Layout;Landroid/text/DynamicLayout;
+HSPLandroid/text/Layout;->isRtlCharAt(I)Z
 HSPLandroid/text/Layout;->measurePara(Landroid/text/TextPaint;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;)F
-HSPLandroid/text/Layout;->primaryIsTrailingPrevious(I)Z+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->primaryIsTrailingPrevious(I)Z
 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/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
-HSPLandroid/text/MeasuredParagraph;->applyStyleRun(IILandroid/text/TextPaint;Landroid/graphics/text/LineBreakConfig;Landroid/graphics/text/MeasuredText$Builder;)V
 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;Landroid/text/SpannableString;]Landroid/text/AutoGrowArray$IntArray;Landroid/text/AutoGrowArray$IntArray;
+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;
 HSPLandroid/text/MeasuredParagraph;->getCharWidthAt(I)F
 HSPLandroid/text/MeasuredParagraph;->getChars()[C
 HSPLandroid/text/MeasuredParagraph;->getDirections(II)Landroid/text/Layout$Directions;
@@ -15033,11 +15097,11 @@
 HSPLandroid/text/MeasuredParagraph;->obtain()Landroid/text/MeasuredParagraph;
 HSPLandroid/text/MeasuredParagraph;->recycle()V
 HSPLandroid/text/MeasuredParagraph;->release()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
+HSPLandroid/text/MeasuredParagraph;->reset()V
+HSPLandroid/text/MeasuredParagraph;->resetAndAnalyzeBidi(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;)V
 HSPLandroid/text/PackedIntVector;->adjustValuesBelow(III)V
 HSPLandroid/text/PackedIntVector;->deleteAt(II)V
-HSPLandroid/text/PackedIntVector;->getValue(II)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/PackedIntVector;->getValue(II)I
 HSPLandroid/text/PackedIntVector;->growBuffer()V
 HSPLandroid/text/PackedIntVector;->insertAt(I[I)V
 HSPLandroid/text/PackedIntVector;->moveRowGapTo(I)V
@@ -15059,7 +15123,7 @@
 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+]Landroid/text/Spanned;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/Selection;->getSelectionStart(Ljava/lang/CharSequence;)I
 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
@@ -15069,7 +15133,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;missing_types
+HSPLandroid/text/SpanSet;->init(Landroid/text/Spanned;II)V
 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;
@@ -15090,14 +15154,14 @@
 HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;)V
 HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;II)V
 HSPLandroid/text/SpannableStringBuilder;->append(C)Landroid/text/Editable;
-HSPLandroid/text/SpannableStringBuilder;->append(C)Landroid/text/SpannableStringBuilder;+]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
+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;+]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;,Ljava/lang/String;]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
+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+]Landroid/text/SpannableStringBuilder;missing_types
-HSPLandroid/text/SpannableStringBuilder;->checkRange(Ljava/lang/String;II)V+]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->charAt(I)C
+HSPLandroid/text/SpannableStringBuilder;->checkRange(Ljava/lang/String;II)V
 HSPLandroid/text/SpannableStringBuilder;->checkSortBuffer([II)[I
 HSPLandroid/text/SpannableStringBuilder;->clear()V
 HSPLandroid/text/SpannableStringBuilder;->compareSpans(II[I[I)I
@@ -15109,7 +15173,7 @@
 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+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
+HSPLandroid/text/SpannableStringBuilder;->getSpanStart(Ljava/lang/Object;)I
 HSPLandroid/text/SpannableStringBuilder;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
 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
@@ -15130,8 +15194,8 @@
 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;+]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;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->resizeFor(I)V
 HSPLandroid/text/SpannableStringBuilder;->resolveGap(I)I
 HSPLandroid/text/SpannableStringBuilder;->restoreInvariants()V
@@ -15145,14 +15209,14 @@
 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/lang/Integer;Ljava/lang/Integer;]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
+HSPLandroid/text/SpannableStringBuilder;->setSpan(ZLjava/lang/Object;IIIZ)V
 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;+]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->toString()Ljava/lang/String;
 HSPLandroid/text/SpannableStringBuilder;->treeRoot()I
 HSPLandroid/text/SpannableStringBuilder;->updatedIntervalBound(IIIIZZ)I
-HSPLandroid/text/SpannableStringInternal;-><init>(Ljava/lang/CharSequence;IIZ)V+]Ljava/lang/CharSequence;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringInternal;-><init>(Ljava/lang/CharSequence;IIZ)V
 HSPLandroid/text/SpannableStringInternal;->charAt(I)C
 HSPLandroid/text/SpannableStringInternal;->checkRange(Ljava/lang/String;II)V
 HSPLandroid/text/SpannableStringInternal;->copySpansFromInternal(Landroid/text/SpannableStringInternal;IIZ)V
@@ -15162,7 +15226,7 @@
 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;+]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/text/SpannableStringInternal;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
 HSPLandroid/text/SpannableStringInternal;->length()I
 HSPLandroid/text/SpannableStringInternal;->nextSpanTransition(IILjava/lang/Class;)I
 HSPLandroid/text/SpannableStringInternal;->removeSpan(Ljava/lang/Object;I)V
@@ -15201,9 +15265,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;+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
+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;->reviseLineBreakConfig()V
 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;
@@ -15216,10 +15279,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+]Landroid/text/StaticLayout;Landroid/text/StaticLayout;
+HSPLandroid/text/StaticLayout;-><init>(Landroid/text/StaticLayout$Builder;)V
 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/text/TextPaint;Landroid/text/TextPaint;]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/StaticLayout;Landroid/text/StaticLayout;]Landroid/text/Spanned;Landroid/text/SpannableString;
+HSPLandroid/text/StaticLayout;->generate(Landroid/text/StaticLayout$Builder;ZZ)V
 HSPLandroid/text/StaticLayout;->getBottomPadding()I
 HSPLandroid/text/StaticLayout;->getEllipsisCount(I)I
 HSPLandroid/text/StaticLayout;->getEllipsisStart(I)I
@@ -15240,7 +15303,7 @@
 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+]Landroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;]Ljava/lang/CharSequence;Landroid/text/SpannableString;
+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;->packHyphenEdit(II)I
 HSPLandroid/text/StaticLayout;->unpackEndHyphenEdit(I)I
 HSPLandroid/text/StaticLayout;->unpackStartHyphenEdit(I)I
@@ -15262,21 +15325,21 @@
 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+]Landroid/text/TextPaint;Landroid/text/TextPaint;
-HSPLandroid/text/TextLine;->expandMetricsFromPaint(Landroid/text/TextPaint;IIIIZLandroid/graphics/Paint$FontMetricsInt;)V+]Landroid/text/TextPaint;Landroid/text/TextPaint;
+HSPLandroid/text/TextLine;->expandMetricsFromPaint(Landroid/graphics/Paint$FontMetricsInt;Landroid/text/TextPaint;)V
+HSPLandroid/text/TextLine;->expandMetricsFromPaint(Landroid/text/TextPaint;IIIIZLandroid/graphics/Paint$FontMetricsInt;)V
 HSPLandroid/text/TextLine;->extractDecorationInfo(Landroid/text/TextPaint;Landroid/text/TextLine$DecorationInfo;)V
 HSPLandroid/text/TextLine;->getOffsetBeforeAfter(IIIZIZ)I
 HSPLandroid/text/TextLine;->getOffsetToLeftRightOf(IZ)I
 HSPLandroid/text/TextLine;->getRunAdvance(Landroid/text/TextPaint;IIIIZI[FI)F
 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[FI)F+]Landroid/text/TextPaint;missing_types]Landroid/text/style/MetricAffectingSpan;Landroid/text/style/TypefaceSpan;]Landroid/text/style/CharacterStyle;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/SpanSet;Landroid/text/SpanSet;]Landroid/text/TextLine$DecorationInfo;Landroid/text/TextLine$DecorationInfo;
+HSPLandroid/text/TextLine;->handleRun(IIIZLandroid/graphics/Canvas;Landroid/text/TextShaper$GlyphsConsumer;FIIILandroid/graphics/Paint$FontMetricsInt;Z[FI)F
 HSPLandroid/text/TextLine;->handleText(Landroid/text/TextPaint;IIIIZLandroid/graphics/Canvas;Landroid/text/TextShaper$GlyphsConsumer;FIIILandroid/graphics/Paint$FontMetricsInt;ZILjava/util/ArrayList;[FI)F
 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;->metrics(Landroid/graphics/Paint$FontMetricsInt;)F+]Landroid/text/TextLine;Landroid/text/TextLine;
+HSPLandroid/text/TextLine;->measure(IZLandroid/graphics/Paint$FontMetricsInt;)F
+HSPLandroid/text/TextLine;->metrics(Landroid/graphics/Paint$FontMetricsInt;)F
 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;
+HSPLandroid/text/TextLine;->recycle(Landroid/text/TextLine;)Landroid/text/TextLine;
+HSPLandroid/text/TextLine;->set(Landroid/text/TextPaint;Ljava/lang/CharSequence;IIILandroid/text/Layout$Directions;ZLandroid/text/Layout$TabStops;IIZ)V
 HSPLandroid/text/TextLine;->updateMetrics(Landroid/graphics/Paint$FontMetricsInt;IIIII)V
 HSPLandroid/text/TextPaint;-><init>()V
 HSPLandroid/text/TextPaint;-><init>(I)V
@@ -15284,8 +15347,8 @@
 HSPLandroid/text/TextPaint;->getUnderlineThickness()F
 HSPLandroid/text/TextPaint;->set(Landroid/text/TextPaint;)V
 HSPLandroid/text/TextPaint;->setUnderlineText(IF)V
-HSPLandroid/text/TextUtils$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/CharSequence;
-HSPLandroid/text/TextUtils$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/text/TextUtils$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/CharSequence;+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/text/TextUtils$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/text/TextUtils$1;Landroid/text/TextUtils$1;
 HSPLandroid/text/TextUtils$SimpleStringSplitter;-><init>(C)V
 HSPLandroid/text/TextUtils$SimpleStringSplitter;->hasNext()Z
 HSPLandroid/text/TextUtils$SimpleStringSplitter;->iterator()Ljava/util/Iterator;
@@ -15293,6 +15356,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$TruncateAt;->values()[Landroid/text/TextUtils$TruncateAt;
 HSPLandroid/text/TextUtils;->concat([Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->copySpansFrom(Landroid/text/Spanned;IILjava/lang/Class;Landroid/text/Spannable;I)V
 HSPLandroid/text/TextUtils;->couldAffectRtl(C)Z
@@ -15301,23 +15365,23 @@
 HSPLandroid/text/TextUtils;->ellipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLandroid/text/TextUtils$TruncateAt;ZLandroid/text/TextUtils$EllipsizeCallback;)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->ellipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLandroid/text/TextUtils$TruncateAt;ZLandroid/text/TextUtils$EllipsizeCallback;Landroid/text/TextDirectionHeuristic;Ljava/lang/String;)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->emptyIfNull(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/text/TextUtils;->equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z
+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;
+HSPLandroid/text/TextUtils;->formatSimple(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]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$SpannedEllipsizer;,Landroid/text/SpannableString;]Landroid/text/GetChars;Landroid/text/Layout$SpannedEllipsizer;,Landroid/text/SpannableString;
+HSPLandroid/text/TextUtils;->getChars(Ljava/lang/CharSequence;II[CI)V
 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
+HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;CII)I+]Ljava/lang/Object;Ljava/lang/String;
 HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)I
 HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;II)I
 HSPLandroid/text/TextUtils;->isDigitsOnly(Ljava/lang/CharSequence;)Z
-HSPLandroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;missing_types
+HSPLandroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannedString;,Landroid/text/SpannableString;
 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;missing_types]Ljava/util/Iterator;missing_types
+HSPLandroid/text/TextUtils;->join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Iterable;Ljava/util/ArrayList;
 HSPLandroid/text/TextUtils;->join(Ljava/lang/CharSequence;[Ljava/lang/Object;)Ljava/lang/String;
 HSPLandroid/text/TextUtils;->lastIndexOf(Ljava/lang/CharSequence;CI)I
 HSPLandroid/text/TextUtils;->lastIndexOf(Ljava/lang/CharSequence;CII)I
@@ -15330,7 +15394,7 @@
 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;->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;
 HSPLandroid/text/TextUtils;->trimNoCopySpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->trimToParcelableSize(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
@@ -15342,6 +15406,7 @@
 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;->getBestDateTimePattern(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/text/format/DateFormat;->getCompatibleEnglishPattern(Landroid/icu/util/ULocale;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;
 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;
 HSPLandroid/text/format/DateFormat;->getTimeFormat(Landroid/content/Context;)Ljava/text/DateFormat;
@@ -15535,7 +15600,7 @@
 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;->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
@@ -15546,7 +15611,7 @@
 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
@@ -15626,11 +15691,12 @@
 HSPLandroid/util/ArrayMap;->append(Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Object;Ljava/lang/String;
 HSPLandroid/util/ArrayMap;->binarySearchHashes([III)I
 HSPLandroid/util/ArrayMap;->clear()V
-HSPLandroid/util/ArrayMap;->containsKey(Ljava/lang/Object;)Z
+HSPLandroid/util/ArrayMap;->containsKey(Ljava/lang/Object;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/util/ArrayMap;->containsValue(Ljava/lang/Object;)Z
 HSPLandroid/util/ArrayMap;->ensureCapacity(I)V
 HSPLandroid/util/ArrayMap;->entrySet()Ljava/util/Set;
-HSPLandroid/util/ArrayMap;->equals(Ljava/lang/Object;)Z
+HSPLandroid/util/ArrayMap;->equals(Ljava/lang/Object;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Object;Ljava/lang/String;,Ljava/lang/Integer;,Ljava/lang/Long;]Ljava/util/Map;Landroid/util/ArrayMap;
+HSPLandroid/util/ArrayMap;->forEach(Ljava/util/function/BiConsumer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/BiConsumer;missing_types
 HSPLandroid/util/ArrayMap;->freeArrays([I[Ljava/lang/Object;I)V
 HSPLandroid/util/ArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/util/ArrayMap;->getCollection()Landroid/util/MapCollections;
@@ -15643,7 +15709,7 @@
 HSPLandroid/util/ArrayMap;->keyAt(I)Ljava/lang/Object;
 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;missing_types
-HSPLandroid/util/ArrayMap;->putAll(Landroid/util/ArrayMap;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/util/ArrayMap;->putAll(Landroid/util/ArrayMap;)V
 HSPLandroid/util/ArrayMap;->putAll(Ljava/util/Map;)V
 HSPLandroid/util/ArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/ArrayMap;->removeAt(I)Ljava/lang/Object;
@@ -15674,7 +15740,7 @@
 HSPLandroid/util/ArraySet;->contains(Ljava/lang/Object;)Z
 HSPLandroid/util/ArraySet;->ensureCapacity(I)V
 HSPLandroid/util/ArraySet;->equals(Ljava/lang/Object;)Z
-HSPLandroid/util/ArraySet;->forEach(Ljava/util/function/Consumer;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/function/Consumer;megamorphic_types
+HSPLandroid/util/ArraySet;->forEach(Ljava/util/function/Consumer;)V
 HSPLandroid/util/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V
 HSPLandroid/util/ArraySet;->getCollection()Landroid/util/MapCollections;
 HSPLandroid/util/ArraySet;->hashCode()I
@@ -15691,7 +15757,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;+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLandroid/util/ArraySet;->valueAt(I)Ljava/lang/Object;
 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
@@ -15705,14 +15771,22 @@
 HSPLandroid/util/Base64$Decoder;-><init>(I[B)V
 HSPLandroid/util/Base64$Decoder;->process([BIIZ)Z
 HSPLandroid/util/Base64$Encoder;-><init>(I[B)V
+HSPLandroid/util/Base64$Encoder;->maxOutputSize(I)I
 HSPLandroid/util/Base64$Encoder;->process([BIIZ)Z
 HSPLandroid/util/Base64;->decode(Ljava/lang/String;I)[B
 HSPLandroid/util/Base64;->decode([BI)[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+]Landroid/util/Base64$Encoder;Landroid/util/Base64$Encoder;
+HSPLandroid/util/Base64;->encode([BIII)[B
 HSPLandroid/util/Base64;->encodeToString([BI)Ljava/lang/String;
 HSPLandroid/util/Base64;->encodeToString([BIII)Ljava/lang/String;
+HSPLandroid/util/Base64OutputStream;-><init>(Ljava/io/OutputStream;I)V
+HSPLandroid/util/Base64OutputStream;-><init>(Ljava/io/OutputStream;IZ)V
+HSPLandroid/util/Base64OutputStream;->close()V
+HSPLandroid/util/Base64OutputStream;->embiggen([BI)[B
+HSPLandroid/util/Base64OutputStream;->flushBuffer()V
+HSPLandroid/util/Base64OutputStream;->internalWrite([BIIZ)V
+HSPLandroid/util/Base64OutputStream;->write([BII)V
 HSPLandroid/util/CloseGuard;-><init>()V
 HSPLandroid/util/CloseGuard;->close()V
 HSPLandroid/util/CloseGuard;->open(Ljava/lang/String;)V
@@ -15724,7 +15798,7 @@
 HSPLandroid/util/DisplayMetrics;-><init>()V
 HSPLandroid/util/DisplayMetrics;->setTo(Landroid/util/DisplayMetrics;)V
 HSPLandroid/util/DisplayMetrics;->setToDefaults()V
-HSPLandroid/util/DisplayUtils;->getDisplayUniqueIdConfigIndex(Landroid/content/res/Resources;Ljava/lang/String;)I+]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/util/DisplayUtils;->getDisplayUniqueIdConfigIndex(Landroid/content/res/Resources;Ljava/lang/String;)I
 HSPLandroid/util/EventLog$Event;-><init>([B)V
 HSPLandroid/util/EventLog$Event;->decodeObject()Ljava/lang/Object;
 HSPLandroid/util/EventLog$Event;->getData()Ljava/lang/Object;
@@ -15767,35 +15841,35 @@
 HSPLandroid/util/IntArray;->toArray()[I
 HSPLandroid/util/IntProperty;-><init>(Ljava/lang/String;)V
 HSPLandroid/util/JsonReader;-><init>(Ljava/io/Reader;)V
-HSPLandroid/util/JsonReader;->advance()Landroid/util/JsonToken;
+HSPLandroid/util/JsonReader;->advance()Landroid/util/JsonToken;+]Landroid/util/JsonReader;Landroid/util/JsonReader;
 HSPLandroid/util/JsonReader;->beginArray()V
 HSPLandroid/util/JsonReader;->beginObject()V
 HSPLandroid/util/JsonReader;->close()V
-HSPLandroid/util/JsonReader;->decodeLiteral()Landroid/util/JsonToken;
+HSPLandroid/util/JsonReader;->decodeLiteral()Landroid/util/JsonToken;+]Lcom/android/internal/util/StringPool;Lcom/android/internal/util/StringPool;
 HSPLandroid/util/JsonReader;->decodeNumber([CII)Landroid/util/JsonToken;
 HSPLandroid/util/JsonReader;->endArray()V
 HSPLandroid/util/JsonReader;->endObject()V
-HSPLandroid/util/JsonReader;->expect(Landroid/util/JsonToken;)V
-HSPLandroid/util/JsonReader;->fillBuffer(I)Z
-HSPLandroid/util/JsonReader;->hasNext()Z
+HSPLandroid/util/JsonReader;->expect(Landroid/util/JsonToken;)V+]Landroid/util/JsonReader;Landroid/util/JsonReader;
+HSPLandroid/util/JsonReader;->fillBuffer(I)Z+]Ljava/io/Reader;Ljava/io/InputStreamReader;
+HSPLandroid/util/JsonReader;->hasNext()Z+]Landroid/util/JsonReader;Landroid/util/JsonReader;
 HSPLandroid/util/JsonReader;->nextBoolean()Z
 HSPLandroid/util/JsonReader;->nextDouble()D
 HSPLandroid/util/JsonReader;->nextInArray(Z)Landroid/util/JsonToken;
 HSPLandroid/util/JsonReader;->nextInObject(Z)Landroid/util/JsonToken;
 HSPLandroid/util/JsonReader;->nextLiteral(Z)Ljava/lang/String;
-HSPLandroid/util/JsonReader;->nextName()Ljava/lang/String;
+HSPLandroid/util/JsonReader;->nextName()Ljava/lang/String;+]Landroid/util/JsonReader;Landroid/util/JsonReader;
 HSPLandroid/util/JsonReader;->nextNonWhitespace()I
-HSPLandroid/util/JsonReader;->nextString()Ljava/lang/String;
-HSPLandroid/util/JsonReader;->nextString(C)Ljava/lang/String;
+HSPLandroid/util/JsonReader;->nextString()Ljava/lang/String;+]Landroid/util/JsonReader;Landroid/util/JsonReader;
+HSPLandroid/util/JsonReader;->nextString(C)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/internal/util/StringPool;Lcom/android/internal/util/StringPool;
 HSPLandroid/util/JsonReader;->nextValue()Landroid/util/JsonToken;
 HSPLandroid/util/JsonReader;->objectValue()Landroid/util/JsonToken;
-HSPLandroid/util/JsonReader;->peek()Landroid/util/JsonToken;
-HSPLandroid/util/JsonReader;->peekStack()Landroid/util/JsonScope;
+HSPLandroid/util/JsonReader;->peek()Landroid/util/JsonToken;+]Landroid/util/JsonScope;Landroid/util/JsonScope;
+HSPLandroid/util/JsonReader;->peekStack()Landroid/util/JsonScope;+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/util/JsonReader;->pop()Landroid/util/JsonScope;
 HSPLandroid/util/JsonReader;->push(Landroid/util/JsonScope;)V
 HSPLandroid/util/JsonReader;->readEscapeCharacter()C
 HSPLandroid/util/JsonReader;->readLiteral()Landroid/util/JsonToken;
-HSPLandroid/util/JsonReader;->replaceTop(Landroid/util/JsonScope;)V
+HSPLandroid/util/JsonReader;->replaceTop(Landroid/util/JsonScope;)V+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/util/JsonReader;->skipValue()V
 HSPLandroid/util/JsonToken;->values()[Landroid/util/JsonToken;
 HSPLandroid/util/JsonWriter;-><init>(Ljava/io/Writer;)V
@@ -15811,9 +15885,9 @@
 HSPLandroid/util/JsonWriter;->name(Ljava/lang/String;)Landroid/util/JsonWriter;
 HSPLandroid/util/JsonWriter;->newline()V
 HSPLandroid/util/JsonWriter;->open(Landroid/util/JsonScope;Ljava/lang/String;)Landroid/util/JsonWriter;
-HSPLandroid/util/JsonWriter;->peek()Landroid/util/JsonScope;
+HSPLandroid/util/JsonWriter;->peek()Landroid/util/JsonScope;+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/util/JsonWriter;->replaceTop(Landroid/util/JsonScope;)V
-HSPLandroid/util/JsonWriter;->string(Ljava/lang/String;)V
+HSPLandroid/util/JsonWriter;->string(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/Writer;Ljava/io/StringWriter;
 HSPLandroid/util/JsonWriter;->value(J)Landroid/util/JsonWriter;
 HSPLandroid/util/JsonWriter;->value(Ljava/lang/String;)Landroid/util/JsonWriter;
 HSPLandroid/util/JsonWriter;->value(Z)Landroid/util/JsonWriter;
@@ -15841,7 +15915,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+]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;->printlns(IILjava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
 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
@@ -15886,18 +15960,18 @@
 HSPLandroid/util/LruCache;->create(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/LruCache;->entryRemoved(ZLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/util/LruCache;->evictAll()V
-HSPLandroid/util/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/util/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Landroid/util/LruCache;missing_types
 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;+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Landroid/util/LruCache;missing_types
+HSPLandroid/util/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 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+]Ljava/util/Map$Entry;Ljava/util/LinkedHashMap$LinkedHashMapEntry;]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Landroid/util/LruCache;Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;
+HSPLandroid/util/LruCache;->trimToSize(I)V
 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;+]Landroid/util/MapCollections$ArrayIterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/util/MapCollections;Landroid/util/ArraySet$1;,Landroid/util/ArrayMap$1;
@@ -15912,8 +15986,8 @@
 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;-><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;
 HSPLandroid/util/MapCollections$MapIterator;->hasNext()Z
 HSPLandroid/util/MapCollections$MapIterator;->next()Ljava/lang/Object;
@@ -15927,7 +16001,7 @@
 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;+]Ljava/lang/Object;[Ljava/lang/String;]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/util/MapCollections;->toArrayHelper([Ljava/lang/Object;I)[Ljava/lang/Object;
 HSPLandroid/util/MathUtils;->addOrThrow(II)I
 HSPLandroid/util/MathUtils;->constrain(FFF)F
 HSPLandroid/util/MathUtils;->constrain(III)I
@@ -16018,14 +16092,14 @@
 HSPLandroid/util/Slog;->w(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/util/SparseArray;-><init>()V
 HSPLandroid/util/SparseArray;-><init>(I)V
-HSPLandroid/util/SparseArray;->append(ILjava/lang/Object;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+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;->contains(I)Z
-HSPLandroid/util/SparseArray;->contentEquals(Landroid/util/SparseArray;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/util/SparseArray;->contentEquals(Landroid/util/SparseArray;)Z
 HSPLandroid/util/SparseArray;->delete(I)V
 HSPLandroid/util/SparseArray;->gc()V
-HSPLandroid/util/SparseArray;->get(I)Ljava/lang/Object;
+HSPLandroid/util/SparseArray;->get(I)Ljava/lang/Object;+]Landroid/util/SparseArray;missing_types
 HSPLandroid/util/SparseArray;->get(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/SparseArray;->indexOfKey(I)I
 HSPLandroid/util/SparseArray;->indexOfValue(Ljava/lang/Object;)I
@@ -16043,10 +16117,11 @@
 HSPLandroid/util/SparseArrayMap;->get(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/SparseBooleanArray;-><init>()V
 HSPLandroid/util/SparseBooleanArray;-><init>(I)V
-HSPLandroid/util/SparseBooleanArray;->append(IZ)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
+HSPLandroid/util/SparseBooleanArray;->append(IZ)V
 HSPLandroid/util/SparseBooleanArray;->clear()V
 HSPLandroid/util/SparseBooleanArray;->clone()Landroid/util/SparseBooleanArray;
 HSPLandroid/util/SparseBooleanArray;->delete(I)V
+HSPLandroid/util/SparseBooleanArray;->equals(Ljava/lang/Object;)Z
 HSPLandroid/util/SparseBooleanArray;->get(I)Z
 HSPLandroid/util/SparseBooleanArray;->get(IZ)Z
 HSPLandroid/util/SparseBooleanArray;->indexOfKey(I)I
@@ -16075,7 +16150,7 @@
 HSPLandroid/util/SparseLongArray;-><init>(I)V
 HSPLandroid/util/SparseLongArray;->clear()V
 HSPLandroid/util/SparseLongArray;->delete(I)V
-HSPLandroid/util/SparseLongArray;->get(I)J
+HSPLandroid/util/SparseLongArray;->get(I)J+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;
 HSPLandroid/util/SparseLongArray;->get(IJ)J
 HSPLandroid/util/SparseLongArray;->indexOfKey(I)I
 HSPLandroid/util/SparseLongArray;->keyAt(I)I
@@ -16116,6 +16191,9 @@
 HSPLandroid/util/TypedValue;->complexToDimensionPixelSize(ILandroid/util/DisplayMetrics;)I
 HSPLandroid/util/TypedValue;->complexToFloat(I)F
 HSPLandroid/util/TypedValue;->complexToFraction(IFF)F
+HSPLandroid/util/TypedValue;->createComplex(II)I
+HSPLandroid/util/TypedValue;->createComplexDimension(FI)I
+HSPLandroid/util/TypedValue;->floatToComplex(F)I
 HSPLandroid/util/TypedValue;->getComplexUnit()I
 HSPLandroid/util/TypedValue;->getDimension(Landroid/util/DisplayMetrics;)F
 HSPLandroid/util/TypedValue;->getFloat()F
@@ -16213,20 +16291,22 @@
 HSPLandroid/view/Choreographer$CallbackRecord;->run(Landroid/view/Choreographer$FrameData;)V
 HSPLandroid/view/Choreographer$FrameData;->-$$Nest$fgetmFrameTimeNanos(Landroid/view/Choreographer$FrameData;)J
 HSPLandroid/view/Choreographer$FrameData;-><init>()V
+HSPLandroid/view/Choreographer$FrameData;->allocateFrameTimelines(I)V
 HSPLandroid/view/Choreographer$FrameData;->checkInCallback()V
 HSPLandroid/view/Choreographer$FrameData;->getFrameTimeNanos()J
 HSPLandroid/view/Choreographer$FrameData;->getFrameTimelines()[Landroid/view/Choreographer$FrameTimeline;
 HSPLandroid/view/Choreographer$FrameData;->getPreferredFrameTimeline()Landroid/view/Choreographer$FrameTimeline;
 HSPLandroid/view/Choreographer$FrameData;->setInCallback(Z)V+]Landroid/view/Choreographer$FrameTimeline;Landroid/view/Choreographer$FrameTimeline;
 HSPLandroid/view/Choreographer$FrameData;->update(JI)V
-HSPLandroid/view/Choreographer$FrameData;->update(JLandroid/view/DisplayEventReceiver$VsyncEventData;)V+]Landroid/view/Choreographer$FrameTimeline;Landroid/view/Choreographer$FrameTimeline;
-HSPLandroid/view/Choreographer$FrameData;->update(JLandroid/view/DisplayEventReceiver;J)V+]Landroid/view/DisplayEventReceiver;Landroid/view/Choreographer$FrameDisplayEventReceiver;]Landroid/view/Choreographer$FrameData;Landroid/view/Choreographer$FrameData;
+HSPLandroid/view/Choreographer$FrameData;->update(JLandroid/view/DisplayEventReceiver$VsyncEventData;)Landroid/view/Choreographer$FrameTimeline;+]Landroid/view/Choreographer$FrameTimeline;Landroid/view/Choreographer$FrameTimeline;
+HSPLandroid/view/Choreographer$FrameData;->update(JLandroid/view/DisplayEventReceiver;J)Landroid/view/Choreographer$FrameTimeline;+]Landroid/view/DisplayEventReceiver;Landroid/view/Choreographer$FrameDisplayEventReceiver;]Landroid/view/Choreographer$FrameData;Landroid/view/Choreographer$FrameData;
 HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;-><init>(Landroid/view/Choreographer;Landroid/os/Looper;IJ)V
 HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;->onVsync(JJILandroid/view/DisplayEventReceiver$VsyncEventData;)V
 HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;->run()V
 HSPLandroid/view/Choreographer$FrameHandler;-><init>(Landroid/view/Choreographer;Landroid/os/Looper;)V
 HSPLandroid/view/Choreographer$FrameHandler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/view/Choreographer$FrameTimeline;->-$$Nest$fgetmDeadlineNanos(Landroid/view/Choreographer$FrameTimeline;)J
+HSPLandroid/view/Choreographer$FrameTimeline;->-$$Nest$fgetmVsyncId(Landroid/view/Choreographer$FrameTimeline;)J
 HSPLandroid/view/Choreographer$FrameTimeline;-><init>()V
 HSPLandroid/view/Choreographer$FrameTimeline;->getDeadlineNanos()J
 HSPLandroid/view/Choreographer$FrameTimeline;->setInCallback(Z)V
@@ -16259,10 +16339,10 @@
 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+]Landroid/view/Choreographer$CallbackQueue;Landroid/view/Choreographer$CallbackQueue;]Landroid/view/Choreographer$FrameHandler;Landroid/view/Choreographer$FrameHandler;
+HSPLandroid/view/Choreographer;->removeCallbacksInternal(ILjava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/view/Choreographer;->removeFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
 HSPLandroid/view/Choreographer;->scheduleFrameLocked(J)V
-HSPLandroid/view/Choreographer;->scheduleVsyncLocked()V+]Landroid/view/Choreographer$FrameDisplayEventReceiver;Landroid/view/Choreographer$FrameDisplayEventReceiver;
+HSPLandroid/view/Choreographer;->scheduleVsyncLocked()V
 HSPLandroid/view/Choreographer;->setFPSDivisor(I)V
 HSPLandroid/view/ContextThemeWrapper;-><init>()V
 HSPLandroid/view/ContextThemeWrapper;-><init>(Landroid/content/Context;I)V
@@ -16273,17 +16353,17 @@
 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;+]Landroid/view/ContextThemeWrapper;Landroid/view/ContextThemeWrapper;
+HSPLandroid/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme;
 HSPLandroid/view/ContextThemeWrapper;->initializeTheme()V
 HSPLandroid/view/ContextThemeWrapper;->onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V
 HSPLandroid/view/ContextThemeWrapper;->setTheme(I)V
 HSPLandroid/view/CrossWindowBlurListeners;-><clinit>()V
 HSPLandroid/view/Display$HdrCapabilities$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/Display$HdrCapabilities;
 HSPLandroid/view/Display$HdrCapabilities$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/view/Display$HdrCapabilities;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/Display$HdrCapabilities;-><init>(Landroid/os/Parcel;)V+]Landroid/view/Display$HdrCapabilities;Landroid/view/Display$HdrCapabilities;
 HSPLandroid/view/Display$HdrCapabilities;-><init>(Landroid/os/Parcel;Landroid/view/Display$HdrCapabilities-IA;)V
 HSPLandroid/view/Display$HdrCapabilities;->equals(Ljava/lang/Object;)Z
-HSPLandroid/view/Display$HdrCapabilities;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/view/Display$HdrCapabilities;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/Display$HdrCapabilities;->toString()Ljava/lang/String;
 HSPLandroid/view/Display$HdrCapabilities;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/Display$Mode$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/Display$Mode;
@@ -16304,7 +16384,7 @@
 HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/view/DisplayAdjustments;Landroid/content/res/Resources;)V
 HSPLandroid/view/Display;->getAppVsyncOffsetNanos()J
 HSPLandroid/view/Display;->getCutout()Landroid/view/DisplayCutout;
-HSPLandroid/view/Display;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;
+HSPLandroid/view/Display;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;
 HSPLandroid/view/Display;->getDisplayId()I
 HSPLandroid/view/Display;->getDisplayInfo(Landroid/view/DisplayInfo;)Z
 HSPLandroid/view/Display;->getFlags()I
@@ -16328,6 +16408,7 @@
 HSPLandroid/view/Display;->getSupportedWideColorGamut()[Landroid/graphics/ColorSpace;
 HSPLandroid/view/Display;->getWidth()I
 HSPLandroid/view/Display;->hasAccess(IIII)Z
+HSPLandroid/view/Display;->isDozeState(I)Z
 HSPLandroid/view/Display;->isValid()Z
 HSPLandroid/view/Display;->isWideColorGamut()Z
 HSPLandroid/view/Display;->shouldReportMaxBounds()Z
@@ -16374,7 +16455,7 @@
 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;->getBoundingRects()Ljava/util/List;+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/view/DisplayCutout;Landroid/view/DisplayCutout;
+HSPLandroid/view/DisplayCutout;->getBoundingRects()Ljava/util/List;
 HSPLandroid/view/DisplayCutout;->getBoundingRectsAll()[Landroid/graphics/Rect;
 HSPLandroid/view/DisplayCutout;->getCopyOrRef(Landroid/graphics/Rect;Z)Landroid/graphics/Rect;
 HSPLandroid/view/DisplayCutout;->getSafeInsetBottom()I
@@ -16387,18 +16468,20 @@
 HSPLandroid/view/DisplayCutout;->isEmpty()Z
 HSPLandroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;-><init>()V
 HSPLandroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;-><init>(JJJ)V
+HSPLandroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;->copyFrom(Landroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;)V
 HSPLandroid/view/DisplayEventReceiver$VsyncEventData;-><init>()V
-HSPLandroid/view/DisplayEventReceiver$VsyncEventData;-><init>([Landroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;IJ)V
+HSPLandroid/view/DisplayEventReceiver$VsyncEventData;-><init>([Landroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;IIJ)V
+HSPLandroid/view/DisplayEventReceiver$VsyncEventData;->copyFrom(Landroid/view/DisplayEventReceiver$VsyncEventData;)V+]Landroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;Landroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;
 HSPLandroid/view/DisplayEventReceiver$VsyncEventData;->preferredFrameTimeline()Landroid/view/DisplayEventReceiver$VsyncEventData$FrameTimeline;
 HSPLandroid/view/DisplayEventReceiver;-><init>(Landroid/os/Looper;II)V
 HSPLandroid/view/DisplayEventReceiver;-><init>(Landroid/os/Looper;IIJ)V
-HSPLandroid/view/DisplayEventReceiver;->dispatchVsync(JJI)V+]Landroid/view/DisplayEventReceiver;Landroid/view/Choreographer$FrameDisplayEventReceiver;
+HSPLandroid/view/DisplayEventReceiver;->dispatchVsync(JJI)V
 HSPLandroid/view/DisplayEventReceiver;->getLatestVsyncEventData()Landroid/view/DisplayEventReceiver$VsyncEventData;
 HSPLandroid/view/DisplayEventReceiver;->scheduleVsync()V
 HSPLandroid/view/DisplayInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/DisplayInfo;
 HSPLandroid/view/DisplayInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/DisplayInfo;-><init>()V
-HSPLandroid/view/DisplayInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/DisplayInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;
 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
@@ -16408,7 +16491,7 @@
 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/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLandroid/view/DisplayInfo;->getMode()Landroid/view/Display$Mode;
 HSPLandroid/view/DisplayInfo;->getRefreshRate()F
 HSPLandroid/view/DisplayInfo;->hasAccess(I)Z
@@ -16444,7 +16527,7 @@
 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+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
+HSPLandroid/view/FrameMetricsObserver;->onFrameMetricsAvailable(I)V
 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
@@ -16463,7 +16546,7 @@
 HSPLandroid/view/GestureDetector;->cancelTaps()V
 HSPLandroid/view/GestureDetector;->init(Landroid/content/Context;)V
 HSPLandroid/view/GestureDetector;->isConsideredDoubleTap(Landroid/view/MotionEvent;Landroid/view/MotionEvent;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;->onTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLandroid/view/GestureDetector;->recordGestureClassification(I)V
 HSPLandroid/view/GestureDetector;->setContextClickListener(Landroid/view/GestureDetector$OnContextClickListener;)V
 HSPLandroid/view/GestureDetector;->setIsLongpressEnabled(Z)V
@@ -16514,9 +16597,8 @@
 HSPLandroid/view/IWindow$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/view/IWindowManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/view/IWindowManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/view/IWindowManager$Stub$Proxy;->attachWindowContextToDisplayArea(Landroid/os/IBinder;IILandroid/os/Bundle;)Landroid/content/res/Configuration;
 HSPLandroid/view/IWindowManager$Stub$Proxy;->getCurrentAnimatorScale()F
-HSPLandroid/view/IWindowManager$Stub$Proxy;->getWindowInsets(ILandroid/os/IBinder;Landroid/view/InsetsState;)Z+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/IWindowManager$Stub$Proxy;Landroid/view/IWindowManager$Stub$Proxy;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/view/IWindowManager$Stub$Proxy;->getWindowInsets(ILandroid/os/IBinder;Landroid/view/InsetsState;)Z
 HSPLandroid/view/IWindowManager$Stub$Proxy;->hasNavigationBar(I)Z
 HSPLandroid/view/IWindowManager$Stub$Proxy;->isInTouchMode(I)Z
 HSPLandroid/view/IWindowManager$Stub$Proxy;->isKeyguardLocked()Z
@@ -16539,6 +16621,7 @@
 HSPLandroid/view/IWindowSession$Stub$Proxy;->setInsets(Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
 HSPLandroid/view/IWindowSession$Stub$Proxy;->setOnBackInvokedCallbackInfo(Landroid/view/IWindow;Landroid/window/OnBackInvokedCallbackInfo;)V
 HSPLandroid/view/IWindowSession$Stub$Proxy;->setWallpaperZoomOut(Landroid/os/IBinder;F)V
+HSPLandroid/view/IWindowSession$Stub$Proxy;->updateRequestedVisibleTypes(Landroid/view/IWindow;I)V
 HSPLandroid/view/IWindowSession$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowSession;
 HSPLandroid/view/IWindowSessionCallback$Stub;-><init>()V
 HSPLandroid/view/IWindowSessionCallback$Stub;->asBinder()Landroid/os/IBinder;
@@ -16612,7 +16695,7 @@
 HSPLandroid/view/InputMonitor;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/view/InputMonitor;->writeToParcel(Landroid/os/Parcel;I)V
 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;Landroid/view/inputmethod/ImeTracker$Token;)V+]Landroid/view/InsetsAnimationControlCallbacks;Landroid/view/InsetsAnimationThreadControlRunner$1;]Landroid/view/InsetsAnimationControlImpl;Landroid/view/InsetsAnimationControlImpl;]Landroid/view/WindowInsetsAnimation;Landroid/view/WindowInsetsAnimation;
+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;Landroid/view/inputmethod/ImeTracker$Token;)V
 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;->buildSideControlsMap(Landroid/util/SparseSetArray;Landroid/util/SparseArray;)V
@@ -16629,15 +16712,17 @@
 HSPLandroid/view/InsetsAnimationControlImpl;->getHiddenStateInsets()Landroid/graphics/Insets;
 HSPLandroid/view/InsetsAnimationControlImpl;->getInsetsFromState(Landroid/view/InsetsState;Landroid/graphics/Rect;Landroid/util/SparseIntArray;)Landroid/graphics/Insets;
 HSPLandroid/view/InsetsAnimationControlImpl;->getShownStateInsets()Landroid/graphics/Insets;
+HSPLandroid/view/InsetsAnimationControlImpl;->getStatsToken()Landroid/view/inputmethod/ImeTracker$Token;
 HSPLandroid/view/InsetsAnimationControlImpl;->getTypes()I
 HSPLandroid/view/InsetsAnimationControlImpl;->hasZeroInsetsIme()Z
 HSPLandroid/view/InsetsAnimationControlImpl;->isCancelled()Z
 HSPLandroid/view/InsetsAnimationControlImpl;->notifyControlRevoked(I)V
 HSPLandroid/view/InsetsAnimationControlImpl;->releaseLeashes()V
 HSPLandroid/view/InsetsAnimationControlImpl;->setInsetsAndAlpha(Landroid/graphics/Insets;FF)V
-HSPLandroid/view/InsetsAnimationControlImpl;->setInsetsAndAlpha(Landroid/graphics/Insets;FFZ)V
+HSPLandroid/view/InsetsAnimationControlImpl;->setInsetsAndAlpha(Landroid/graphics/Insets;FFZ)V+]Landroid/view/InsetsAnimationControlCallbacks;Landroid/view/InsetsAnimationThreadControlRunner$1;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLandroid/view/InsetsAnimationControlImpl;->updateLeashesForSide(IIILjava/util/ArrayList;Landroid/view/InsetsState;F)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Landroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams$Builder;Landroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams$Builder;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/InsetsAnimationControlImpl;->updateSurfacePosition(Landroid/util/SparseArray;)V
+HSPLandroid/view/InsetsAnimationControlRunner;->controlsType(I)Z
 HSPLandroid/view/InsetsAnimationThread;->ensureThreadLocked()V
 HSPLandroid/view/InsetsAnimationThread;->getHandler()Landroid/os/Handler;
 HSPLandroid/view/InsetsAnimationThread;->release()V
@@ -16667,11 +16752,14 @@
 HSPLandroid/view/InsetsController$$ExternalSyntheticLambda11;-><init>(Landroid/view/InsetsController;)V
 HSPLandroid/view/InsetsController$$ExternalSyntheticLambda1;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/view/InsetsController$$ExternalSyntheticLambda7;-><init>()V
-HSPLandroid/view/InsetsController$$ExternalSyntheticLambda7;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/view/InsetsController$$ExternalSyntheticLambda8;->get()Ljava/lang/Object;
+HSPLandroid/view/InsetsController$1;->getDisplayContext()Landroid/content/Context;
+HSPLandroid/view/InsetsController$1;->getTargetSurfaceControl()Landroid/view/SurfaceControl;
 HSPLandroid/view/InsetsController$2;->onFinish(Landroid/view/InsetsState;Landroid/view/InsetsState;)V
+HSPLandroid/view/InsetsController$2;->onIdNotFoundInState2(ILandroid/view/InsetsSource;)V
 HSPLandroid/view/InsetsController$3;-><init>(Landroid/view/InsetsController;)V
 HSPLandroid/view/InsetsController$3;->onFinish(Landroid/view/InsetsState;Landroid/view/InsetsState;)V
+HSPLandroid/view/InsetsController$3;->onIdMatch(Landroid/view/InsetsSource;Landroid/view/InsetsSource;)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/InsetsController$3;->onStart(Landroid/view/InsetsState;Landroid/view/InsetsState;)V
 HSPLandroid/view/InsetsController$InternalAnimationControlListener$$ExternalSyntheticLambda0;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
 HSPLandroid/view/InsetsController$InternalAnimationControlListener$$ExternalSyntheticLambda3;->getInterpolation(F)F
@@ -16679,6 +16767,9 @@
 HSPLandroid/view/InsetsController$InternalAnimationControlListener$1;->initialValue()Landroid/animation/AnimationHandler;
 HSPLandroid/view/InsetsController$InternalAnimationControlListener$1;->initialValue()Ljava/lang/Object;
 HSPLandroid/view/InsetsController$InternalAnimationControlListener$2;->onAnimationEnd(Landroid/animation/Animator;)V
+HSPLandroid/view/InsetsController$InternalAnimationControlListener$2;->onAnimationStart(Landroid/animation/Animator;)V
+HSPLandroid/view/InsetsController$InternalAnimationControlListener;->-$$Nest$fgetmHasAnimationCallbacks(Landroid/view/InsetsController$InternalAnimationControlListener;)Z
+HSPLandroid/view/InsetsController$InternalAnimationControlListener;->-$$Nest$fgetmInputMethodJankContext(Landroid/view/InsetsController$InternalAnimationControlListener;)Landroid/view/inputmethod/ImeTracker$InputMethodJankContext;
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;-><init>(ZZIIZILandroid/view/WindowInsetsAnimationControlListener;Landroid/view/inputmethod/ImeTracker$InputMethodJankContext;)V
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->calculateDurationMs()J
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->getAlphaInterpolator()Landroid/view/animation/Interpolator;
@@ -16687,14 +16778,15 @@
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->lambda$getAlphaInterpolator$2(F)F
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->lambda$getAlphaInterpolator$3(F)F
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->lambda$getAlphaInterpolator$4(F)F
+HSPLandroid/view/InsetsController$InternalAnimationControlListener;->lambda$onReady$0(Landroid/view/animation/Interpolator;Landroid/view/WindowInsetsAnimationController;Landroid/graphics/Insets;Landroid/graphics/Insets;Landroid/view/animation/Interpolator;Landroid/animation/ValueAnimator;)V+]Landroid/view/animation/Interpolator;megamorphic_types]Landroid/animation/TypeEvaluator;Landroid/view/InsetsController$$ExternalSyntheticLambda1;]Landroid/view/WindowInsetsAnimationController;Landroid/view/InsetsAnimationControlImpl;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->onAnimationFinish()V
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->onCancelled(Landroid/view/WindowInsetsAnimationController;)V
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->onFinished(Landroid/view/WindowInsetsAnimationController;)V
 HSPLandroid/view/InsetsController$InternalAnimationControlListener;->onReady(Landroid/view/WindowInsetsAnimationController;I)V
 HSPLandroid/view/InsetsController$RunningAnimation;-><init>(Landroid/view/InsetsAnimationControlRunner;I)V
+HSPLandroid/view/InsetsController;->-$$Nest$fgetmHost(Landroid/view/InsetsController;)Landroid/view/InsetsController$Host;
 HSPLandroid/view/InsetsController;->-$$Nest$sfgetsEvaluator()Landroid/animation/TypeEvaluator;
 HSPLandroid/view/InsetsController;-><init>(Landroid/view/InsetsController$Host;)V
-HSPLandroid/view/InsetsController;-><init>(Landroid/view/InsetsController$Host;Ljava/util/function/BiFunction;Landroid/os/Handler;)V
 HSPLandroid/view/InsetsController;->abortPendingImeControlRequest()V
 HSPLandroid/view/InsetsController;->applyAnimation(IZZLandroid/view/inputmethod/ImeTracker$Token;)V
 HSPLandroid/view/InsetsController;->applyAnimation(IZZZLandroid/view/inputmethod/ImeTracker$Token;)V
@@ -16706,23 +16798,24 @@
 HSPLandroid/view/InsetsController;->cancelExistingAnimations()V
 HSPLandroid/view/InsetsController;->cancelExistingControllers(I)V
 HSPLandroid/view/InsetsController;->captionInsetsUnchanged()Z
-HSPLandroid/view/InsetsController;->collectSourceControls(ZILandroid/util/SparseArray;ILandroid/view/inputmethod/ImeTracker$Token;)Landroid/util/Pair;+]Landroid/view/InsetsSourceConsumer;Landroid/view/InsetsSourceConsumer;,Landroid/view/ImeInsetsSourceConsumer;]Landroid/view/inputmethod/ImeTracker;Landroid/view/inputmethod/ImeTracker$1;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLandroid/view/InsetsController;->controlAnimationUncheckedInner(ILandroid/os/CancellationSignal;Landroid/view/WindowInsetsAnimationControlListener;Landroid/graphics/Rect;ZJLandroid/view/animation/Interpolator;IIZLandroid/view/inputmethod/ImeTracker$Token;)V+]Landroid/view/WindowInsetsAnimationControlListener;Landroid/view/InsetsController$InternalAnimationControlListener;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/view/InsetsController$Host;Landroid/view/ViewRootInsetsControllerHost;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/view/inputmethod/ImeTracker;Landroid/view/inputmethod/ImeTracker$1;]Landroid/view/inputmethod/ImeTracker$ImeLatencyTracker;Landroid/view/inputmethod/ImeTracker$ImeLatencyTracker;]Lcom/android/internal/inputmethod/ImeTracing;Lcom/android/internal/inputmethod/ImeTracingClientImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/InsetsController;->collectSourceControls(ZILandroid/util/SparseArray;ILandroid/view/inputmethod/ImeTracker$Token;)Landroid/util/Pair;
+HSPLandroid/view/InsetsController;->controlAnimationUncheckedInner(ILandroid/os/CancellationSignal;Landroid/view/WindowInsetsAnimationControlListener;Landroid/graphics/Rect;ZJLandroid/view/animation/Interpolator;IIZLandroid/view/inputmethod/ImeTracker$Token;)V
 HSPLandroid/view/InsetsController;->dispatchAnimationEnd(Landroid/view/WindowInsetsAnimation;)V
 HSPLandroid/view/InsetsController;->getAnimationType(I)I
 HSPLandroid/view/InsetsController;->getHost()Landroid/view/InsetsController$Host;
+HSPLandroid/view/InsetsController;->getImeSourceConsumer()Landroid/view/InsetsSourceConsumer;
 HSPLandroid/view/InsetsController;->getLastDispatchedState()Landroid/view/InsetsState;
 HSPLandroid/view/InsetsController;->getRequestedVisibleTypes()I
-HSPLandroid/view/InsetsController;->getSourceConsumer(Landroid/view/InsetsSource;)Landroid/view/InsetsSourceConsumer;
 HSPLandroid/view/InsetsController;->getState()Landroid/view/InsetsState;
 HSPLandroid/view/InsetsController;->getSystemBarsAppearance()I
 HSPLandroid/view/InsetsController;->hide(I)V
 HSPLandroid/view/InsetsController;->invokeControllableInsetsChangedListeners()I
-HSPLandroid/view/InsetsController;->lambda$new$2(Landroid/view/InsetsController;Landroid/view/InsetsSource;)Landroid/view/InsetsSourceConsumer;
+HSPLandroid/view/InsetsController;->lambda$new$3()V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsAnimationControlRunner;Landroid/view/InsetsAnimationControlImpl;,Landroid/view/InsetsResizeAnimationRunner;]Landroid/view/WindowInsets;Landroid/view/WindowInsets;]Landroid/view/InsetsController$Host;Landroid/view/ViewRootInsetsControllerHost;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/view/InternalInsetsAnimationController;Landroid/view/InsetsAnimationControlImpl;,Landroid/view/InsetsResizeAnimationRunner;]Landroid/view/InsetsController;Landroid/view/InsetsController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/InsetsController;->lambda$static$1(FLandroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;
 HSPLandroid/view/InsetsController;->notifyControlRevoked(Landroid/view/InsetsSourceConsumer;)V
 HSPLandroid/view/InsetsController;->notifyFinished(Landroid/view/InsetsAnimationControlRunner;Z)V
 HSPLandroid/view/InsetsController;->notifyVisibilityChanged()V
+HSPLandroid/view/InsetsController;->onAnimationStateChanged(IZ)V
 HSPLandroid/view/InsetsController;->onControlsChanged([Landroid/view/InsetsSourceControl;)V
 HSPLandroid/view/InsetsController;->onFrameChanged(Landroid/graphics/Rect;)V
 HSPLandroid/view/InsetsController;->onStateChanged(Landroid/view/InsetsState;)Z
@@ -16732,7 +16825,7 @@
 HSPLandroid/view/InsetsController;->reportRequestedVisibleTypes()V
 HSPLandroid/view/InsetsController;->setRequestedVisibleTypes(II)V
 HSPLandroid/view/InsetsController;->show(I)V
-HSPLandroid/view/InsetsController;->show(IZLandroid/view/inputmethod/ImeTracker$Token;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/InsetsController$Host;Landroid/view/ViewRootInsetsControllerHost;]Landroid/view/inputmethod/ImeTracker;Landroid/view/inputmethod/ImeTracker$1;]Landroid/view/inputmethod/ImeTracker$ImeLatencyTracker;Landroid/view/inputmethod/ImeTracker$ImeLatencyTracker;]Lcom/android/internal/inputmethod/ImeTracing;Lcom/android/internal/inputmethod/ImeTracingClientImpl;]Landroid/view/InsetsController;Landroid/view/InsetsController;
+HSPLandroid/view/InsetsController;->show(IZLandroid/view/inputmethod/ImeTracker$Token;)V
 HSPLandroid/view/InsetsController;->updateCompatSysUiVisibility()V
 HSPLandroid/view/InsetsController;->updateDisabledUserAnimationTypes(I)V
 HSPLandroid/view/InsetsController;->updateState(Landroid/view/InsetsState;)V
@@ -16742,17 +16835,17 @@
 HSPLandroid/view/InsetsSource;-><init>(II)V
 HSPLandroid/view/InsetsSource;-><init>(Landroid/os/Parcel;)V
 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;Landroid/graphics/Rect;Z)Landroid/graphics/Insets;
 HSPLandroid/view/InsetsSource;->calculateInsets(Landroid/graphics/Rect;Z)Landroid/graphics/Insets;
 HSPLandroid/view/InsetsSource;->calculateVisibleInsets(Landroid/graphics/Rect;)Landroid/graphics/Insets;
-HSPLandroid/view/InsetsSource;->equals(Ljava/lang/Object;)Z+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
+HSPLandroid/view/InsetsSource;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/InsetsSource;->equals(Ljava/lang/Object;Z)Z
+HSPLandroid/view/InsetsSource;->getFlags()I
 HSPLandroid/view/InsetsSource;->getFrame()Landroid/graphics/Rect;
 HSPLandroid/view/InsetsSource;->getId()I
 HSPLandroid/view/InsetsSource;->getIntersection(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
 HSPLandroid/view/InsetsSource;->getType()I
 HSPLandroid/view/InsetsSource;->getVisibleFrame()Landroid/graphics/Rect;
-HSPLandroid/view/InsetsSource;->insetsRoundedCornerFrame()Z
 HSPLandroid/view/InsetsSource;->isUserControllable()Z
 HSPLandroid/view/InsetsSource;->isVisible()Z
 HSPLandroid/view/InsetsSource;->setVisible(Z)Landroid/view/InsetsSource;
@@ -16764,6 +16857,8 @@
 HSPLandroid/view/InsetsSourceConsumer;->getId()I
 HSPLandroid/view/InsetsSourceConsumer;->getType()I
 HSPLandroid/view/InsetsSourceConsumer;->isRequestedVisibleAwaitingControl()Z
+HSPLandroid/view/InsetsSourceConsumer;->isShowRequested()Z
+HSPLandroid/view/InsetsSourceConsumer;->onAnimationStateChanged(Z)Z
 HSPLandroid/view/InsetsSourceConsumer;->onPerceptible(Z)V
 HSPLandroid/view/InsetsSourceConsumer;->onWindowFocusGained(Z)V
 HSPLandroid/view/InsetsSourceConsumer;->onWindowFocusLost()V
@@ -16824,18 +16919,18 @@
 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;)Landroid/util/SparseArray;+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/view/DisplayCutout$ParcelableWrapper;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/view/InsetsState;->readFromParcel(Landroid/os/Parcel;)Landroid/util/SparseArray;
+HSPLandroid/view/InsetsState;->removeSourceAt(I)V
 HSPLandroid/view/InsetsState;->set(Landroid/view/InsetsState;I)V
 HSPLandroid/view/InsetsState;->set(Landroid/view/InsetsState;Z)V
 HSPLandroid/view/InsetsState;->setDisplayCutout(Landroid/view/DisplayCutout;)V
 HSPLandroid/view/InsetsState;->setDisplayFrame(Landroid/graphics/Rect;)V
 HSPLandroid/view/InsetsState;->setPrivacyIndicatorBounds(Landroid/view/PrivacyIndicatorBounds;)V
 HSPLandroid/view/InsetsState;->setRoundedCorners(Landroid/view/RoundedCorners;)V
-HSPLandroid/view/InsetsState;->sourceAt(I)Landroid/view/InsetsSource;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/view/InsetsState;->sourceAt(I)Landroid/view/InsetsSource;
 HSPLandroid/view/InsetsState;->sourceIdAt(I)I
-HSPLandroid/view/InsetsState;->sourceSize()I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLandroid/view/InsetsState;->toPublicType(I)I
-HSPLandroid/view/InsetsState;->traverse(Landroid/view/InsetsState;Landroid/view/InsetsState;Landroid/view/InsetsState$OnTraverseCallbacks;)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsState$OnTraverseCallbacks;Landroid/view/InsetsController$2;,Landroid/view/InsetsController$3;
+HSPLandroid/view/InsetsState;->sourceSize()I
+HSPLandroid/view/InsetsState;->traverse(Landroid/view/InsetsState;Landroid/view/InsetsState;Landroid/view/InsetsState$OnTraverseCallbacks;)V
 HSPLandroid/view/InsetsState;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/KeyCharacterMap$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/KeyCharacterMap;
 HSPLandroid/view/KeyCharacterMap$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -16886,31 +16981,31 @@
 HSPLandroid/view/LayoutInflater;-><init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V
 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/content/Context;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/Class;Ljava/lang/Class;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;
 HSPLandroid/view/LayoutInflater;->createView(Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
 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/util/AttributeSet;Landroid/content/res/XmlBlock$Parser;]Landroid/view/LayoutInflater;missing_types]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;Z)Landroid/view/View;
 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;+]Landroid/view/View;missing_types]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/view/ViewGroup;missing_types]Landroid/view/LayoutInflater;missing_types]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/LayoutInflater;->inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;Z)Landroid/view/View;
 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/LayoutInflater;missing_types]Landroid/view/ViewGroup;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;->rInflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/View;Landroid/content/Context;Landroid/util/AttributeSet;Z)V
+HSPLandroid/view/LayoutInflater;->rInflateChildren(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/View;Landroid/util/AttributeSet;Z)V
 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;+]Landroid/view/LayoutInflater$Factory2;missing_types
+HSPLandroid/view/LayoutInflater;->tryCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
 HSPLandroid/view/LayoutInflater;->tryInflatePrecompiled(ILandroid/content/res/Resources;Landroid/view/ViewGroup;Z)Landroid/view/View;
-HSPLandroid/view/LayoutInflater;->verifyClassLoader(Ljava/lang/reflect/Constructor;)Z+]Ljava/lang/Class;Ljava/lang/Class;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;]Landroid/content/Context;missing_types
+HSPLandroid/view/LayoutInflater;->verifyClassLoader(Ljava/lang/reflect/Constructor;)Z
 HSPLandroid/view/MenuInflater;-><init>(Landroid/content/Context;)V
 HSPLandroid/view/MotionEvent$PointerCoords;-><init>()V
 HSPLandroid/view/MotionEvent$PointerProperties;-><init>()V
@@ -16928,7 +17023,6 @@
 HSPLandroid/view/MotionEvent;->getDownTime()J
 HSPLandroid/view/MotionEvent;->getEdgeFlags()I
 HSPLandroid/view/MotionEvent;->getEventTime()J
-HSPLandroid/view/MotionEvent;->getEventTimeNano()J
 HSPLandroid/view/MotionEvent;->getFlags()I
 HSPLandroid/view/MotionEvent;->getHistoricalEventTime(I)J
 HSPLandroid/view/MotionEvent;->getHistoricalX(II)F
@@ -16954,7 +17048,7 @@
 HSPLandroid/view/MotionEvent;->initialize(IIIIIIIIIFFFFJJI[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;)Z
 HSPLandroid/view/MotionEvent;->isTargetAccessibilityFocus()Z
 HSPLandroid/view/MotionEvent;->isTouchEvent()Z
-HSPLandroid/view/MotionEvent;->obtain()Landroid/view/MotionEvent;+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HSPLandroid/view/MotionEvent;->obtain()Landroid/view/MotionEvent;
 HSPLandroid/view/MotionEvent;->obtain(JJIFFFFIFFII)Landroid/view/MotionEvent;
 HSPLandroid/view/MotionEvent;->obtain(JJIFFFFIFFIIII)Landroid/view/MotionEvent;
 HSPLandroid/view/MotionEvent;->obtain(JJIFFI)Landroid/view/MotionEvent;
@@ -17028,6 +17122,7 @@
 HSPLandroid/view/ScaleGestureDetector;->setQuickScaleEnabled(Z)V
 HSPLandroid/view/ScaleGestureDetector;->setStylusScaleEnabled(Z)V
 HSPLandroid/view/Surface$CompatibleCanvas;-><init>(Landroid/view/Surface;)V
+HSPLandroid/view/Surface$CompatibleCanvas;-><init>(Landroid/view/Surface;Landroid/view/Surface$CompatibleCanvas-IA;)V
 HSPLandroid/view/Surface;-><init>()V
 HSPLandroid/view/Surface;-><init>(J)V
 HSPLandroid/view/Surface;-><init>(Landroid/graphics/SurfaceTexture;)V
@@ -17067,6 +17162,7 @@
 HSPLandroid/view/SurfaceControl$Builder;->setOpaque(Z)Landroid/view/SurfaceControl$Builder;
 HSPLandroid/view/SurfaceControl$Builder;->setParent(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Builder;
 HSPLandroid/view/SurfaceControl$Builder;->unsetBufferSize()V
+HSPLandroid/view/SurfaceControl$RefreshRateRange;-><init>(FF)V
 HSPLandroid/view/SurfaceControl$Transaction;-><init>()V
 HSPLandroid/view/SurfaceControl$Transaction;-><init>(J)V
 HSPLandroid/view/SurfaceControl$Transaction;->apply()V
@@ -17080,6 +17176,7 @@
 HSPLandroid/view/SurfaceControl$Transaction;->notifyReparentedSurfaces()V
 HSPLandroid/view/SurfaceControl$Transaction;->remove(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceControl$Transaction;->reparent(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
+HSPLandroid/view/SurfaceControl$Transaction;->sanitize(II)V
 HSPLandroid/view/SurfaceControl$Transaction;->setAlpha(Landroid/view/SurfaceControl;F)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceControl$Transaction;->setBufferSize(Landroid/view/SurfaceControl;II)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceControl$Transaction;->setColor(Landroid/view/SurfaceControl;[F)Landroid/view/SurfaceControl$Transaction;
@@ -17097,8 +17194,10 @@
 HSPLandroid/view/SurfaceControl$Transaction;->setWindowCrop(Landroid/view/SurfaceControl;Landroid/graphics/Rect;)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceControl$Transaction;->show(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceControl$Transaction;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/SurfaceControl;->-$$Nest$mcheckNotReleased(Landroid/view/SurfaceControl;)V
 HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeApplyTransaction(JZ)V
 HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeCreateTransaction()J
+HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSanitize(JII)V
 HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSetDestinationFrame(JJIIII)V
 HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSetExtendedRangeBrightness(JJFF)V
 HSPLandroid/view/SurfaceControl;->-$$Nest$smnativeSetFlags(JJII)V
@@ -17106,6 +17205,7 @@
 HSPLandroid/view/SurfaceControl;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/view/SurfaceControl;-><init>(Landroid/view/SurfaceControl;Ljava/lang/String;)V
 HSPLandroid/view/SurfaceControl;-><init>(Landroid/view/SurfaceSession;Ljava/lang/String;IIIILandroid/view/SurfaceControl;Landroid/util/SparseIntArray;Ljava/lang/ref/WeakReference;Ljava/lang/String;)V
+HSPLandroid/view/SurfaceControl;->addToRegistry()V
 HSPLandroid/view/SurfaceControl;->assignNativeObject(JLjava/lang/String;)V
 HSPLandroid/view/SurfaceControl;->checkNotReleased()V
 HSPLandroid/view/SurfaceControl;->copyFrom(Landroid/view/SurfaceControl;Ljava/lang/String;)V
@@ -17115,8 +17215,14 @@
 HSPLandroid/view/SurfaceControl;->isValid()Z
 HSPLandroid/view/SurfaceControl;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/view/SurfaceControl;->release()V
+HSPLandroid/view/SurfaceControl;->removeFromRegistry()V
 HSPLandroid/view/SurfaceControl;->rotationToBufferTransform(I)I
 HSPLandroid/view/SurfaceControl;->setTransformHint(I)V
+HSPLandroid/view/SurfaceControl;->setUnreleasedWarningCallSite(Ljava/lang/String;)V
+HSPLandroid/view/SurfaceControlRegistry$DefaultReporter;-><init>()V
+HSPLandroid/view/SurfaceControlRegistry$DefaultReporter;-><init>(Landroid/view/SurfaceControlRegistry$DefaultReporter-IA;)V
+HSPLandroid/view/SurfaceControlRegistry;-><clinit>()V
+HSPLandroid/view/SurfaceControlRegistry;->getProcessInstance()Landroid/view/SurfaceControlRegistry;
 HSPLandroid/view/SurfaceSession;-><init>()V
 HSPLandroid/view/SurfaceSession;->finalize()V
 HSPLandroid/view/SurfaceSession;->kill()V
@@ -17124,8 +17230,6 @@
 HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda1;->onScrollChanged()V
 HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda2;->onPreDraw()Z
 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
 HSPLandroid/view/SurfaceView$SurfaceViewPositionUpdateListener;->positionLost(J)V
@@ -17153,7 +17257,7 @@
 HSPLandroid/view/SurfaceView;->onSetSurfacePositionAndScale(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;IIFF)V
 HSPLandroid/view/SurfaceView;->onWindowVisibilityChanged(I)V
 HSPLandroid/view/SurfaceView;->performDrawFinished()V
-HSPLandroid/view/SurfaceView;->performSurfaceTransaction(Landroid/view/ViewRootImpl;Landroid/content/res/CompatibilityInfo$Translator;ZZZZLandroid/view/SurfaceControl$Transaction;)Z+]Landroid/view/SurfaceView;Landroid/view/SurfaceView;,Landroid/widget/inline/InlineContentView$4;]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/view/SurfaceView;->performSurfaceTransaction(Landroid/view/ViewRootImpl;Landroid/content/res/CompatibilityInfo$Translator;ZZZZLandroid/view/SurfaceControl$Transaction;)Z
 HSPLandroid/view/SurfaceView;->releaseSurfaces(Z)V
 HSPLandroid/view/SurfaceView;->replacePositionUpdateListener(II)V
 HSPLandroid/view/SurfaceView;->requiresSurfaceControlCreation(ZZ)Z
@@ -17167,8 +17271,8 @@
 HSPLandroid/view/SurfaceView;->updateBackgroundVisibility(Landroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/view/SurfaceView;->updateEmbeddedAccessibilityMatrix(Z)V
 HSPLandroid/view/SurfaceView;->updateRelativeZ(Landroid/view/SurfaceControl$Transaction;)V
-HSPLandroid/view/SurfaceView;->updateSurface()V+]Landroid/view/Surface;Landroid/view/Surface;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
-HSPLandroid/view/SurfaceView;->vriDrawStarted(Z)V+]Landroid/view/SurfaceView;Landroid/view/SurfaceView;,Landroid/widget/inline/InlineContentView$4;,Landroid/widget/VideoView;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
+HSPLandroid/view/SurfaceView;->updateSurface()V
+HSPLandroid/view/SurfaceView;->vriDrawStarted(Z)V
 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;
@@ -17210,7 +17314,7 @@
 HSPLandroid/view/ThreadedRenderer;->destroy()V
 HSPLandroid/view/ThreadedRenderer;->destroyHardwareResources(Landroid/view/View;)V
 HSPLandroid/view/ThreadedRenderer;->destroyResources(Landroid/view/View;)V
-HSPLandroid/view/ThreadedRenderer;->draw(Landroid/view/View;Landroid/view/View$AttachInfo;Landroid/view/ThreadedRenderer$DrawCallbacks;)V+]Landroid/view/ViewFrameInfo;Landroid/view/ViewFrameInfo;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/ThreadedRenderer;->draw(Landroid/view/View;Landroid/view/View$AttachInfo;Landroid/view/ThreadedRenderer$DrawCallbacks;)V
 HSPLandroid/view/ThreadedRenderer;->dumpArgsToFlags([Ljava/lang/String;)I
 HSPLandroid/view/ThreadedRenderer;->getHeight()I
 HSPLandroid/view/ThreadedRenderer;->getWidth()I
@@ -17231,9 +17335,9 @@
 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;missing_types]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ThreadedRenderer$DrawCallbacks;Landroid/view/ViewRootImpl;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/ThreadedRenderer;->updateRootDisplayList(Landroid/view/View;Landroid/view/ThreadedRenderer$DrawCallbacks;)V
 HSPLandroid/view/ThreadedRenderer;->updateSurface(Landroid/view/Surface;)V
-HSPLandroid/view/ThreadedRenderer;->updateViewTreeDisplayList(Landroid/view/View;)V+]Landroid/view/View;missing_types
+HSPLandroid/view/ThreadedRenderer;->updateViewTreeDisplayList(Landroid/view/View;)V
 HSPLandroid/view/ThreadedRenderer;->updateWebViewOverlayCallbacks()V
 HSPLandroid/view/TouchDelegate;-><init>(Landroid/graphics/Rect;Landroid/view/View;)V
 HSPLandroid/view/VelocityTracker;-><init>(I)V
@@ -17303,9 +17407,12 @@
 HSPLandroid/view/View$ForegroundInfo;-><init>()V
 HSPLandroid/view/View$ListenerInfo;->-$$Nest$fgetmHandwritingArea(Landroid/view/View$ListenerInfo;)Landroid/graphics/Rect;
 HSPLandroid/view/View$ListenerInfo;->-$$Nest$fgetmKeepClearRects(Landroid/view/View$ListenerInfo;)Ljava/util/List;
+HSPLandroid/view/View$ListenerInfo;->-$$Nest$fgetmOnAttachStateChangeListeners(Landroid/view/View$ListenerInfo;)Ljava/util/concurrent/CopyOnWriteArrayList;
 HSPLandroid/view/View$ListenerInfo;->-$$Nest$fgetmPreferKeepClear(Landroid/view/View$ListenerInfo;)Z
 HSPLandroid/view/View$ListenerInfo;->-$$Nest$fgetmUnrestrictedKeepClearRects(Landroid/view/View$ListenerInfo;)Ljava/util/List;
 HSPLandroid/view/View$ListenerInfo;->-$$Nest$fputmHandwritingArea(Landroid/view/View$ListenerInfo;Landroid/graphics/Rect;)V
+HSPLandroid/view/View$ListenerInfo;->-$$Nest$fputmOnAttachStateChangeListeners(Landroid/view/View$ListenerInfo;Ljava/util/concurrent/CopyOnWriteArrayList;)V
+HSPLandroid/view/View$ListenerInfo;->-$$Nest$fputmOnTouchListener(Landroid/view/View$ListenerInfo;Landroid/view/View$OnTouchListener;)V
 HSPLandroid/view/View$ListenerInfo;->-$$Nest$fputmPositionChangedUpdate(Landroid/view/View$ListenerInfo;Ljava/lang/Runnable;)V
 HSPLandroid/view/View$ListenerInfo;-><init>()V
 HSPLandroid/view/View$MeasureSpec;->getMode(I)I
@@ -17316,13 +17423,14 @@
 HSPLandroid/view/View$ScrollabilityCache;-><init>(Landroid/view/ViewConfiguration;Landroid/view/View;)V
 HSPLandroid/view/View$ScrollabilityCache;->run()V
 HSPLandroid/view/View$TintInfo;-><init>()V
+HSPLandroid/view/View$TransformationInfo;->-$$Nest$fgetmAlpha(Landroid/view/View$TransformationInfo;)F
 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;missing_types]Ljava/lang/Object;missing_types]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;]Landroid/content/Context;missing_types]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;]Landroid/content/Context;missing_types]Ljava/lang/Class;Ljava/lang/Class;
 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;missing_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/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/content/Context;missing_types
 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
@@ -17330,7 +17438,7 @@
 HSPLandroid/view/View;->addOnLayoutChangeListener(Landroid/view/View$OnLayoutChangeListener;)V
 HSPLandroid/view/View;->animate()Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/View;->announceForAccessibility(Ljava/lang/CharSequence;)V
-HSPLandroid/view/View;->appendId(Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/View;missing_types]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/view/View;->appendId(Ljava/lang/StringBuilder;)V
 HSPLandroid/view/View;->applyBackgroundTint()V
 HSPLandroid/view/View;->applyForegroundTint()V
 HSPLandroid/view/View;->applyInsets(Landroid/graphics/Rect;)V
@@ -17343,11 +17451,11 @@
 HSPLandroid/view/View;->buildDrawingCache(Z)V
 HSPLandroid/view/View;->buildDrawingCacheImpl(Z)V
 HSPLandroid/view/View;->buildLayer()V
-HSPLandroid/view/View;->calculateAccessibilityDataSensitive()V+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->calculateIsImportantForContentCapture()Z+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/view/ViewParent;missing_types
+HSPLandroid/view/View;->calculateAccessibilityDataSensitive()V
+HSPLandroid/view/View;->calculateIsImportantForContentCapture()Z
 HSPLandroid/view/View;->canHaveDisplayList()Z
 HSPLandroid/view/View;->canNotifyAutofillEnterExitEvent()Z
-HSPLandroid/view/View;->canReceivePointerEvents()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->canReceivePointerEvents()Z
 HSPLandroid/view/View;->canResolveLayoutDirection()Z
 HSPLandroid/view/View;->canResolveTextDirection()Z
 HSPLandroid/view/View;->canScrollHorizontally(I)Z
@@ -17368,7 +17476,7 @@
 HSPLandroid/view/View;->clearParentsWantFocus()V
 HSPLandroid/view/View;->clearTranslationState()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;->collectPreferKeepClearRects()Ljava/util/List;
 HSPLandroid/view/View;->collectUnrestrictedPreferKeepClearRects()Ljava/util/List;
 HSPLandroid/view/View;->combineMeasuredStates(II)I
 HSPLandroid/view/View;->combineVisibility(II)I
@@ -17376,7 +17484,7 @@
 HSPLandroid/view/View;->computeHorizontalScrollExtent()I
 HSPLandroid/view/View;->computeHorizontalScrollOffset()I
 HSPLandroid/view/View;->computeHorizontalScrollRange()I
-HSPLandroid/view/View;->computeOpaqueFlags()V+]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/view/View;->computeOpaqueFlags()V
 HSPLandroid/view/View;->computeScroll()V
 HSPLandroid/view/View;->computeSystemWindowInsets(Landroid/view/WindowInsets;Landroid/graphics/Rect;)Landroid/view/WindowInsets;
 HSPLandroid/view/View;->computeVerticalScrollExtent()I
@@ -17385,12 +17493,12 @@
 HSPLandroid/view/View;->damageInParent()V
 HSPLandroid/view/View;->destroyDrawingCache()V
 HSPLandroid/view/View;->destroyHardwareResources()V
-HSPLandroid/view/View;->dispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;+]Landroid/view/View;missing_types
-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;
+HSPLandroid/view/View;->dispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
+HSPLandroid/view/View;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V
 HSPLandroid/view/View;->dispatchCancelPendingInputEvents()V
 HSPLandroid/view/View;->dispatchCollectViewAttributes(Landroid/view/View$AttachInfo;I)V
 HSPLandroid/view/View;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLandroid/view/View;->dispatchDetachedFromWindow()V+]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;Landroid/view/ViewOverlay$OverlayViewGroup;]Ljava/util/List;Ljava/util/Collections$EmptyList;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;]Landroid/view/View$OnAttachStateChangeListener;missing_types
+HSPLandroid/view/View;->dispatchDetachedFromWindow()V+]Landroid/view/View;missing_types]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]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
@@ -17418,16 +17526,17 @@
 HSPLandroid/view/View;->dispatchVisibilityChanged(Landroid/view/View;I)V
 HSPLandroid/view/View;->dispatchWindowFocusChanged(Z)V
 HSPLandroid/view/View;->dispatchWindowInsetsAnimationEnd(Landroid/view/WindowInsetsAnimation;)V
+HSPLandroid/view/View;->dispatchWindowInsetsAnimationProgress(Landroid/view/WindowInsets;Ljava/util/List;)Landroid/view/WindowInsets;
 HSPLandroid/view/View;->dispatchWindowSystemUiVisiblityChanged(I)V
 HSPLandroid/view/View;->dispatchWindowVisibilityChanged(I)V
-HSPLandroid/view/View;->draw(Landroid/graphics/Canvas;)V+]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/View;missing_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;
-HSPLandroid/view/View;->drawAutofilledHighlight(Landroid/graphics/Canvas;)V+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->drawBackground(Landroid/graphics/Canvas;)V+]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;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/view/View;->draw(Landroid/graphics/Canvas;Landroid/view/ViewGroup;J)Z
+HSPLandroid/view/View;->drawAutofilledHighlight(Landroid/graphics/Canvas;)V
+HSPLandroid/view/View;->drawBackground(Landroid/graphics/Canvas;)V
 HSPLandroid/view/View;->drawDefaultFocusHighlight(Landroid/graphics/Canvas;)V
-HSPLandroid/view/View;->drawableHotspotChanged(FF)V+]Landroid/view/View;missing_types]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/StateListDrawable;,Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
-HSPLandroid/view/View;->drawableStateChanged()V+]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;]Landroid/view/View;missing_types]Landroid/graphics/drawable/Drawable;missing_types
-HSPLandroid/view/View;->drawsWithRenderNode(Landroid/graphics/Canvas;)Z+]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/view/View;->drawableHotspotChanged(FF)V
+HSPLandroid/view/View;->drawableStateChanged()V
+HSPLandroid/view/View;->drawsWithRenderNode(Landroid/graphics/Canvas;)Z
 HSPLandroid/view/View;->ensureTransformationInfo()V
 HSPLandroid/view/View;->findAccessibilityFocusHost(Z)Landroid/view/View;
 HSPLandroid/view/View;->findFocus()Landroid/view/View;
@@ -17444,7 +17553,7 @@
 HSPLandroid/view/View;->fitSystemWindowsInt(Landroid/graphics/Rect;)Z
 HSPLandroid/view/View;->focusSearch(I)Landroid/view/View;
 HSPLandroid/view/View;->forceLayout()V
-HSPLandroid/view/View;->gatherTransparentRegion(Landroid/graphics/Region;)Z+]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/View;missing_types
+HSPLandroid/view/View;->gatherTransparentRegion(Landroid/graphics/Region;)Z
 HSPLandroid/view/View;->generateViewId()I
 HSPLandroid/view/View;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/view/View;->getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate;
@@ -17463,7 +17572,7 @@
 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+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;Z)V
 HSPLandroid/view/View;->getClipBounds()Landroid/graphics/Rect;
 HSPLandroid/view/View;->getClipToOutline()Z
 HSPLandroid/view/View;->getContentCaptureSession()Landroid/view/contentcapture/ContentCaptureSession;
@@ -17471,12 +17580,12 @@
 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;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;missing_types
+HSPLandroid/view/View;->getDrawableRenderNode(Landroid/graphics/drawable/Drawable;Landroid/graphics/RenderNode;)Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->getDrawableState()[I
 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+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->getElevation()F
 HSPLandroid/view/View;->getFilterTouchesWhenObscured()Z
 HSPLandroid/view/View;->getFinalAlpha()F
 HSPLandroid/view/View;->getFitsSystemWindows()Z
@@ -17486,9 +17595,9 @@
 HSPLandroid/view/View;->getForeground()Landroid/graphics/drawable/Drawable;
 HSPLandroid/view/View;->getForegroundGravity()I
 HSPLandroid/view/View;->getGlobalVisibleRect(Landroid/graphics/Rect;)Z
-HSPLandroid/view/View;->getGlobalVisibleRect(Landroid/graphics/Rect;Landroid/graphics/Point;)Z+]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewParent;missing_types
+HSPLandroid/view/View;->getGlobalVisibleRect(Landroid/graphics/Rect;Landroid/graphics/Point;)Z
 HSPLandroid/view/View;->getHandler()Landroid/os/Handler;
-HSPLandroid/view/View;->getHasOverlappingRendering()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->getHasOverlappingRendering()Z
 HSPLandroid/view/View;->getHeight()I
 HSPLandroid/view/View;->getHitRect(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->getHorizontalFadingEdgeLength()I
@@ -17505,12 +17614,12 @@
 HSPLandroid/view/View;->getLayoutParams()Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/view/View;->getLeft()I
 HSPLandroid/view/View;->getListenerInfo()Landroid/view/View$ListenerInfo;
-HSPLandroid/view/View;->getLocalVisibleRect(Landroid/graphics/Rect;)Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/View;missing_types
+HSPLandroid/view/View;->getLocalVisibleRect(Landroid/graphics/Rect;)Z
 HSPLandroid/view/View;->getLocationInSurface([I)V
-HSPLandroid/view/View;->getLocationInWindow([I)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->getLocationInWindow([I)V
 HSPLandroid/view/View;->getLocationOnScreen()[I
-HSPLandroid/view/View;->getLocationOnScreen([I)V+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]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;->getLocationOnScreen([I)V
+HSPLandroid/view/View;->getMatrix()Landroid/graphics/Matrix;
 HSPLandroid/view/View;->getMeasuredHeight()I
 HSPLandroid/view/View;->getMeasuredState()I
 HSPLandroid/view/View;->getMeasuredWidth()I
@@ -17522,14 +17631,14 @@
 HSPLandroid/view/View;->getOverScrollMode()I
 HSPLandroid/view/View;->getPaddingBottom()I
 HSPLandroid/view/View;->getPaddingEnd()I
-HSPLandroid/view/View;->getPaddingLeft()I+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->getPaddingLeft()I
 HSPLandroid/view/View;->getPaddingRight()I
 HSPLandroid/view/View;->getPaddingStart()I
 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]Landroid/view/View;missing_types
 HSPLandroid/view/View;->getRawLayoutDirection()I
 HSPLandroid/view/View;->getRawTextAlignment()I
 HSPLandroid/view/View;->getRawTextDirection()I
@@ -17549,8 +17658,8 @@
 HSPLandroid/view/View;->getSolidColor()I
 HSPLandroid/view/View;->getStateListAnimator()Landroid/animation/StateListAnimator;
 HSPLandroid/view/View;->getStraightVerticalScrollBarBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-HSPLandroid/view/View;->getSuggestedMinimumHeight()I+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
-HSPLandroid/view/View;->getSuggestedMinimumWidth()I+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
+HSPLandroid/view/View;->getSuggestedMinimumHeight()I
+HSPLandroid/view/View;->getSuggestedMinimumWidth()I
 HSPLandroid/view/View;->getSystemGestureExclusionRects()Ljava/util/List;
 HSPLandroid/view/View;->getSystemUiVisibility()I
 HSPLandroid/view/View;->getTag()Ljava/lang/Object;
@@ -17563,7 +17672,7 @@
 HSPLandroid/view/View;->getTransitionName()Ljava/lang/String;
 HSPLandroid/view/View;->getTranslationX()F
 HSPLandroid/view/View;->getTranslationY()F
-HSPLandroid/view/View;->getTranslationZ()F+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->getTranslationZ()F
 HSPLandroid/view/View;->getVerticalFadingEdgeLength()I
 HSPLandroid/view/View;->getVerticalScrollbarWidth()I
 HSPLandroid/view/View;->getViewRootImpl()Landroid/view/ViewRootImpl;
@@ -17580,7 +17689,7 @@
 HSPLandroid/view/View;->getWindowVisibleDisplayFrame(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->getX()F
 HSPLandroid/view/View;->getY()F
-HSPLandroid/view/View;->getZ()F+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->getZ()F
 HSPLandroid/view/View;->handleFocusGainInternal(ILandroid/graphics/Rect;)V
 HSPLandroid/view/View;->handleScrollBarDragging(Landroid/view/MotionEvent;)Z
 HSPLandroid/view/View;->hasAncestorThatBlocksDescendantFocus()Z
@@ -17595,7 +17704,7 @@
 HSPLandroid/view/View;->hasNestedScrollingParent()Z
 HSPLandroid/view/View;->hasOnClickListeners()Z
 HSPLandroid/view/View;->hasOverlappingRendering()Z
-HSPLandroid/view/View;->hasRtlSupport()Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/Context;missing_types
+HSPLandroid/view/View;->hasRtlSupport()Z
 HSPLandroid/view/View;->hasSize()Z
 HSPLandroid/view/View;->hasTransientState()Z
 HSPLandroid/view/View;->hasTranslationTransientState()Z
@@ -17604,26 +17713,26 @@
 HSPLandroid/view/View;->hasWindowInsetsAnimationCallback()Z
 HSPLandroid/view/View;->hideAutofillHighlight()Z
 HSPLandroid/view/View;->hideTooltip()V
-HSPLandroid/view/View;->includeForAccessibility()Z+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->includeForAccessibility(Z)Z+]Landroid/view/View;missing_types]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
+HSPLandroid/view/View;->includeForAccessibility()Z
+HSPLandroid/view/View;->includeForAccessibility(Z)Z
 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;->initializeFadingEdgeInternal(Landroid/content/res/TypedArray;)V
 HSPLandroid/view/View;->initializeScrollIndicatorsInternal()V
 HSPLandroid/view/View;->initializeScrollbarsInternal(Landroid/content/res/TypedArray;)V
-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+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->internalSetPadding(IIII)V
+HSPLandroid/view/View;->invalidate()V
+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;missing_types]Landroid/graphics/drawable/Drawable;megamorphic_types
-HSPLandroid/view/View;->invalidateInternal(IIIIZZ)V+]Landroid/view/View;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewParent;missing_types]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/view/View;->invalidate(Z)V
+HSPLandroid/view/View;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/view/View;->invalidateInternal(IIIIZZ)V+]Landroid/view/View;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/GhostView;Landroid/view/GhostView;]Landroid/view/ViewParent;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/view/View;->invalidateOutline()V
 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
 HSPLandroid/view/View;->isAccessibilityFocused()Z
 HSPLandroid/view/View;->isAccessibilityFocusedViewOrHost()Z
 HSPLandroid/view/View;->isAccessibilityPane()Z
@@ -17632,7 +17741,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
 HSPLandroid/view/View;->isAutofilled()Z
 HSPLandroid/view/View;->isClickable()Z
 HSPLandroid/view/View;->isContextClickable()Z
@@ -17650,7 +17759,7 @@
 HSPLandroid/view/View;->isHorizontalFadingEdgeEnabled()Z
 HSPLandroid/view/View;->isHorizontalScrollBarEnabled()Z
 HSPLandroid/view/View;->isImportantForAccessibility()Z
-HSPLandroid/view/View;->isImportantForAutofill()Z+]Landroid/view/View;missing_types]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/ViewParent;missing_types
+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
@@ -17658,9 +17767,9 @@
 HSPLandroid/view/View;->isInTouchMode()Z
 HSPLandroid/view/View;->isKeyboardNavigationCluster()Z
 HSPLandroid/view/View;->isLaidOut()Z
-HSPLandroid/view/View;->isLayoutDirectionInherited()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->isLayoutDirectionInherited()Z
 HSPLandroid/view/View;->isLayoutDirectionResolved()Z
-HSPLandroid/view/View;->isLayoutModeOptical(Ljava/lang/Object;)Z+]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/View;->isLayoutModeOptical(Ljava/lang/Object;)Z
 HSPLandroid/view/View;->isLayoutRequested()Z
 HSPLandroid/view/View;->isLayoutRtl()Z
 HSPLandroid/view/View;->isLayoutValid()Z
@@ -17670,8 +17779,9 @@
 HSPLandroid/view/View;->isPaddingResolved()Z
 HSPLandroid/view/View;->isPressed()Z
 HSPLandroid/view/View;->isProjectionReceiver()Z
+HSPLandroid/view/View;->isRelayoutTracingEnabled()Z
 HSPLandroid/view/View;->isRootNamespace()Z
-HSPLandroid/view/View;->isRtlCompatibilityMode()Z+]Landroid/view/View;missing_types]Landroid/content/Context;missing_types
+HSPLandroid/view/View;->isRtlCompatibilityMode()Z
 HSPLandroid/view/View;->isSelected()Z
 HSPLandroid/view/View;->isShowingLayoutBounds()Z
 HSPLandroid/view/View;->isShown()Z
@@ -17681,48 +17791,49 @@
 HSPLandroid/view/View;->isTextAlignmentResolved()Z
 HSPLandroid/view/View;->isTextDirectionInherited()Z
 HSPLandroid/view/View;->isTextDirectionResolved()Z
+HSPLandroid/view/View;->isTraversalTracingEnabled()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+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->jumpDrawablesToCurrentState()V+]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;]Landroid/graphics/drawable/Drawable;missing_types
-HSPLandroid/view/View;->layout(IIII)V+]Landroid/view/View;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/View;->jumpDrawablesToCurrentState()V
+HSPLandroid/view/View;->layout(IIII)V
 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;
-HSPLandroid/view/View;->mapRectFromViewToWindowCoords(Landroid/graphics/RectF;Z)V+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/view/View;missing_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
-HSPLandroid/view/View;->measure(II)V+]Landroid/view/View;missing_types]Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;
+HSPLandroid/view/View;->mapRectFromViewToScreenCoords(Landroid/graphics/RectF;Z)V
+HSPLandroid/view/View;->mapRectFromViewToWindowCoords(Landroid/graphics/RectF;Z)V
+HSPLandroid/view/View;->measure(II)V
 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;missing_types]Landroid/content/Context;missing_types
+HSPLandroid/view/View;->notifyAppearedOrDisappearedForContentCaptureIfNeeded(Z)V
 HSPLandroid/view/View;->notifyAutofillManagerOnClick()V
 HSPLandroid/view/View;->notifyEnterOrExitForAutoFillIfNeeded(Z)V
 HSPLandroid/view/View;->notifyGlobalFocusCleared(Landroid/view/View;)V
 HSPLandroid/view/View;->notifySubtreeAccessibilityStateChangedByParentIfNeeded()V
 HSPLandroid/view/View;->notifySubtreeAccessibilityStateChangedIfNeeded()V
-HSPLandroid/view/View;->notifyViewAccessibilityStateChangedIfNeeded(I)V+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
+HSPLandroid/view/View;->notifyViewAccessibilityStateChangedIfNeeded(I)V
 HSPLandroid/view/View;->offsetLeftAndRight(I)V
-HSPLandroid/view/View;->offsetTopAndBottom(I)V+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->offsetTopAndBottom(I)V
 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;
-HSPLandroid/view/View;->onAttachedToWindow()V+]Landroid/view/accessibility/AccessibilityNodeIdManager;Landroid/view/accessibility/AccessibilityNodeIdManager;]Landroid/view/View;missing_types
+HSPLandroid/view/View;->onAttachedToWindow()V
 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
 HSPLandroid/view/View;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;
 HSPLandroid/view/View;->onDetachedFromWindow()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]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/StateListDrawable;,Landroid/graphics/drawable/RippleDrawable;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/view/View;->onDrawForeground(Landroid/graphics/Canvas;)V
 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/widget/ScrollBarDrawable;Landroid/widget/ScrollBarDrawable;
+HSPLandroid/view/View;->onDrawScrollBars(Landroid/graphics/Canvas;)V
 HSPLandroid/view/View;->onDrawScrollIndicators(Landroid/graphics/Canvas;)V
 HSPLandroid/view/View;->onDrawVerticalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V
 HSPLandroid/view/View;->onFilterTouchEventForSecurity(Landroid/view/MotionEvent;)Z
@@ -17738,7 +17849,7 @@
 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/app/assist/AssistStructure$ViewNodeBuilder;,Landroid/view/contentcapture/ViewNode$ViewStructureImpl;]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/view/View;->onProvideStructure(Landroid/view/ViewStructure;II)V
 HSPLandroid/view/View;->onResolveDrawables(I)V
 HSPLandroid/view/View;->onRestoreInstanceState(Landroid/os/Parcelable;)V
 HSPLandroid/view/View;->onRtlPropertiesChanged(I)V
@@ -17749,7 +17860,7 @@
 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/os/Handler;Landroid/view/View$VisibilityChangeForAutofillHandler;]Landroid/view/View;missing_types]Landroid/os/Message;Landroid/os/Message;]Ljava/util/List;Ljava/util/Collections$EmptyList;]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager;
+HSPLandroid/view/View;->onVisibilityAggregated(Z)V
 HSPLandroid/view/View;->onVisibilityChanged(Landroid/view/View;I)V
 HSPLandroid/view/View;->onWindowFocusChanged(Z)V
 HSPLandroid/view/View;->onWindowSystemUiVisibilityChanged(I)V
@@ -17767,7 +17878,7 @@
 HSPLandroid/view/View;->pointInView(FF)Z
 HSPLandroid/view/View;->pointInView(FFF)Z
 HSPLandroid/view/View;->post(Ljava/lang/Runnable;)Z
-HSPLandroid/view/View;->postDelayed(Ljava/lang/Runnable;J)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
@@ -17775,11 +17886,11 @@
 HSPLandroid/view/View;->postOnAnimationDelayed(Ljava/lang/Runnable;J)V
 HSPLandroid/view/View;->postSendViewScrolledAccessibilityEventCallback(II)V
 HSPLandroid/view/View;->postUpdate(Ljava/lang/Runnable;)V
-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;->rebuildOutline()V
 HSPLandroid/view/View;->recomputePadding()V
-HSPLandroid/view/View;->refreshDrawableState()V+]Landroid/view/View;missing_types]Landroid/view/ViewParent;missing_types
+HSPLandroid/view/View;->refreshDrawableState()V
 HSPLandroid/view/View;->registerPendingFrameMetricsObservers()V
-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;->removeCallbacks(Ljava/lang/Runnable;)Z
 HSPLandroid/view/View;->removeFrameMetricsListener(Landroid/view/Window$OnFrameMetricsAvailableListener;)V
 HSPLandroid/view/View;->removeLongPressCallback()V
 HSPLandroid/view/View;->removeOnAttachStateChangeListener(Landroid/view/View$OnAttachStateChangeListener;)V
@@ -17793,7 +17904,7 @@
 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/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;]Landroid/view/ViewParent;missing_types
+HSPLandroid/view/View;->requestLayout()V
 HSPLandroid/view/View;->requestRectangleOnScreen(Landroid/graphics/Rect;)Z
 HSPLandroid/view/View;->requestRectangleOnScreen(Landroid/graphics/Rect;Z)Z
 HSPLandroid/view/View;->requireViewById(I)Landroid/view/View;
@@ -17806,13 +17917,13 @@
 HSPLandroid/view/View;->resetResolvedPaddingInternal()V
 HSPLandroid/view/View;->resetResolvedTextAlignment()V
 HSPLandroid/view/View;->resetResolvedTextDirection()V
-HSPLandroid/view/View;->resetRtlProperties()V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->resetRtlProperties()V
 HSPLandroid/view/View;->resetSubtreeAccessibilityStateChanged()V
 HSPLandroid/view/View;->resolveDrawables()V
 HSPLandroid/view/View;->resolveLayoutDirection()Z
-HSPLandroid/view/View;->resolveLayoutParams()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup$LayoutParams;missing_types
-HSPLandroid/view/View;->resolvePadding()V+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Landroid/graphics/drawable/Drawable;missing_types]Landroid/view/View;missing_types
-HSPLandroid/view/View;->resolveRtlPropertiesIfNeeded()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->resolveLayoutParams()V
+HSPLandroid/view/View;->resolvePadding()V
+HSPLandroid/view/View;->resolveRtlPropertiesIfNeeded()Z
 HSPLandroid/view/View;->resolveSize(II)I
 HSPLandroid/view/View;->resolveSizeAndState(III)I
 HSPLandroid/view/View;->resolveTextAlignment()Z
@@ -17838,13 +17949,13 @@
 HSPLandroid/view/View;->setActivated(Z)V
 HSPLandroid/view/View;->setAlpha(F)V
 HSPLandroid/view/View;->setAlphaInternal(F)V
-HSPLandroid/view/View;->setAlphaNoInvalidation(F)Z+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->setAlphaNoInvalidation(F)Z
 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;->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;megamorphic_types
+HSPLandroid/view/View;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/view/View;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/view/View;->setBackgroundRenderNodeProperties(Landroid/graphics/RenderNode;)V
 HSPLandroid/view/View;->setBackgroundResource(I)V
 HSPLandroid/view/View;->setBackgroundTintList(Landroid/content/res/ColorStateList;)V
@@ -17855,25 +17966,26 @@
 HSPLandroid/view/View;->setContentDescription(Ljava/lang/CharSequence;)V
 HSPLandroid/view/View;->setDefaultFocusHighlightEnabled(Z)V
 HSPLandroid/view/View;->setDetached(Z)V
-HSPLandroid/view/View;->setDisplayListProperties(Landroid/graphics/RenderNode;)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->setDisplayListProperties(Landroid/graphics/RenderNode;)V
 HSPLandroid/view/View;->setDrawingCacheEnabled(Z)V
 HSPLandroid/view/View;->setElevation(F)V
 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
 HSPLandroid/view/View;->setFocusable(I)V
 HSPLandroid/view/View;->setFocusable(Z)V
 HSPLandroid/view/View;->setFocusableInTouchMode(Z)V
+HSPLandroid/view/View;->setForceDarkAllowed(Z)V+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setForeground(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/view/View;->setForegroundGravity(I)V
-HSPLandroid/view/View;->setFrame(IIII)Z+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->setFrame(IIII)Z
 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+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->setImportantForAccessibility(I)V
 HSPLandroid/view/View;->setImportantForAutofill(I)V
 HSPLandroid/view/View;->setImportantForContentCapture(I)V
 HSPLandroid/view/View;->setIsRootNamespace(Z)V
@@ -17883,7 +17995,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+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/View;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/View;->setLeft(I)V
 HSPLandroid/view/View;->setLeftTopRightBottom(IIII)V
 HSPLandroid/view/View;->setLongClickable(Z)V
@@ -17915,7 +18027,7 @@
 HSPLandroid/view/View;->setPointerIcon(Landroid/view/PointerIcon;)V
 HSPLandroid/view/View;->setPressed(Z)V
 HSPLandroid/view/View;->setRenderEffect(Landroid/graphics/RenderEffect;)V
-HSPLandroid/view/View;->setRight(I)V+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->setRight(I)V
 HSPLandroid/view/View;->setRotation(F)V
 HSPLandroid/view/View;->setRotationX(F)V
 HSPLandroid/view/View;->setRotationY(F)V
@@ -17949,21 +18061,23 @@
 HSPLandroid/view/View;->setVerticalScrollBarEnabled(Z)V
 HSPLandroid/view/View;->setVisibility(I)V
 HSPLandroid/view/View;->setWillNotDraw(Z)V
+HSPLandroid/view/View;->setWindowInsetsAnimationCallback(Landroid/view/WindowInsetsAnimation$Callback;)V
 HSPLandroid/view/View;->setX(F)V
 HSPLandroid/view/View;->setY(F)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;->shouldDrawRoundScrollbar()Z
 HSPLandroid/view/View;->sizeChange(IIII)V
 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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/View;missing_types]Ljava/lang/Object;missing_types]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/view/View;->toString()Ljava/lang/String;
 HSPLandroid/view/View;->transformFromViewToWindowSpace([I)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
+HSPLandroid/view/View;->transformMatrixToGlobal(Landroid/graphics/Matrix;)V+]Landroid/view/View;missing_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 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;missing_types]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->updateDisplayListIfDirty()Landroid/graphics/RenderNode;+]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;Landroid/view/ViewOverlay$OverlayViewGroup;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/view/View;->updateFocusedInCluster(Landroid/view/View;I)V
 HSPLandroid/view/View;->updateHandwritingArea()V
 HSPLandroid/view/View;->updateKeepClearRects()V
@@ -17979,7 +18093,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;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;missing_types
+HSPLandroid/view/ViewConfiguration;->get(Landroid/content/Context;)Landroid/view/ViewConfiguration;
 HSPLandroid/view/ViewConfiguration;->getDoubleTapTimeout()I
 HSPLandroid/view/ViewConfiguration;->getLongPressTimeout()I
 HSPLandroid/view/ViewConfiguration;->getPressedStateDuration()I
@@ -18026,9 +18140,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+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/view/ViewGroup$LayoutParams;->setBaseAttributes(Landroid/content/res/TypedArray;II)V
 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;
 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
@@ -18036,7 +18150,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+]Landroid/view/ViewGroup$MarginLayoutParams;missing_types
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->resolveLayoutDirection(I)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setLayoutDirection(I)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMarginEnd(I)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMarginStart(I)V
@@ -18054,11 +18168,11 @@
 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+]Landroid/view/ViewGroup;missing_types
+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;->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]Landroid/animation/LayoutTransition;Landroid/animation/LayoutTransition;
+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;->bringChildToFront(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->buildOrderedChildList()Ljava/util/ArrayList;
@@ -18080,16 +18194,16 @@
 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+]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V
 HSPLandroid/view/ViewGroup;->dispatchCancelPendingInputEvents()V
 HSPLandroid/view/ViewGroup;->dispatchCollectViewAttributes(Landroid/view/View$AttachInfo;I)V
 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;->dispatchDrawableHotspotChanged(FF)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->dispatchDraw(Landroid/graphics/Canvas;)V
+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/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/View;missing_types
+HSPLandroid/view/ViewGroup;->dispatchGetDisplayList()V+]Landroid/view/View;missing_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
@@ -18103,15 +18217,16 @@
 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/ViewGroup$TouchTarget;Landroid/view/ViewGroup$TouchTarget;]Landroid/view/View;missing_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;
 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+]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->dispatchViewAdded(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->dispatchViewRemoved(Landroid/view/View;)V
-HSPLandroid/view/ViewGroup;->dispatchVisibilityAggregated(Z)Z+]Landroid/view/View;missing_types
+HSPLandroid/view/ViewGroup;->dispatchVisibilityAggregated(Z)Z
 HSPLandroid/view/ViewGroup;->dispatchVisibilityChanged(Landroid/view/View;I)V
 HSPLandroid/view/ViewGroup;->dispatchWindowFocusChanged(Z)V
 HSPLandroid/view/ViewGroup;->dispatchWindowInsetsAnimationEnd(Landroid/view/WindowInsetsAnimation;)V
+HSPLandroid/view/ViewGroup;->dispatchWindowInsetsAnimationProgress(Landroid/view/WindowInsets;Ljava/util/List;)Landroid/view/WindowInsets;+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->dispatchWindowSystemUiVisiblityChanged(I)V
 HSPLandroid/view/ViewGroup;->dispatchWindowVisibilityChanged(I)V
 HSPLandroid/view/ViewGroup;->drawChild(Landroid/graphics/Canvas;Landroid/view/View;J)Z
@@ -18122,24 +18237,24 @@
 HSPLandroid/view/ViewGroup;->findFocus()Landroid/view/View;
 HSPLandroid/view/ViewGroup;->findOnBackInvokedDispatcherForChild(Landroid/view/View;Landroid/view/View;)Landroid/window/OnBackInvokedDispatcher;
 HSPLandroid/view/ViewGroup;->findViewByAutofillIdTraversal(I)Landroid/view/View;
-HSPLandroid/view/ViewGroup;->findViewByPredicateTraversal(Ljava/util/function/Predicate;Landroid/view/View;)Landroid/view/View;+]Landroid/view/View;missing_types]Ljava/util/function/Predicate;megamorphic_types
+HSPLandroid/view/ViewGroup;->findViewByPredicateTraversal(Ljava/util/function/Predicate;Landroid/view/View;)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->findViewTraversal(I)Landroid/view/View;+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->findViewWithTagTraversal(Ljava/lang/Object;)Landroid/view/View;
 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+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/ViewGroup;->gatherTransparentRegion(Landroid/graphics/Region;)Z
 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;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/ViewGroup;->getAndVerifyPreorderedView(Ljava/util/ArrayList;[Landroid/view/View;I)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->getChildAt(I)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->getChildCount()I
 HSPLandroid/view/ViewGroup;->getChildMeasureSpec(III)I
 HSPLandroid/view/ViewGroup;->getChildTransformation()Landroid/view/animation/Transformation;
 HSPLandroid/view/ViewGroup;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z
-HSPLandroid/view/ViewGroup;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;Z)Z+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewParent;Landroid/view/ViewRootImpl;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
+HSPLandroid/view/ViewGroup;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;Z)Z+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/view/View;missing_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/ViewGroup;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewParent;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewGroup;->getChildrenForAutofill(I)Landroid/view/ViewGroup$ChildListForAutoFillOrContentCapture;
 HSPLandroid/view/ViewGroup;->getChildrenForContentCapture()Landroid/view/ViewGroup$ChildListForAutoFillOrContentCapture;
 HSPLandroid/view/ViewGroup;->getClipChildren()Z
@@ -18156,7 +18271,7 @@
 HSPLandroid/view/ViewGroup;->getTouchscreenBlocksFocus()Z
 HSPLandroid/view/ViewGroup;->handleFocusGainInternal(ILandroid/graphics/Rect;)V
 HSPLandroid/view/ViewGroup;->hasBooleanFlag(I)Z
-HSPLandroid/view/ViewGroup;->hasChildWithZ()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/ViewGroup;->hasChildWithZ()Z
 HSPLandroid/view/ViewGroup;->hasDefaultFocus()Z
 HSPLandroid/view/ViewGroup;->hasFocus()Z
 HSPLandroid/view/ViewGroup;->hasFocusable(ZZ)Z
@@ -18165,25 +18280,25 @@
 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+]Landroid/view/ViewGroup;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types
-HSPLandroid/view/ViewGroup;->initViewGroup()V+]Landroid/view/ViewGroup;missing_types]Landroid/content/Context;missing_types
+HSPLandroid/view/ViewGroup;->initFromAttributes(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/view/ViewGroup;->initViewGroup()V
 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;->invalidateChild(Landroid/view/View;Landroid/graphics/Rect;)V
 HSPLandroid/view/ViewGroup;->invalidateChildInParent([ILandroid/graphics/Rect;)Landroid/view/ViewParent;
 HSPLandroid/view/ViewGroup;->isChildrenDrawingOrderEnabled()Z
 HSPLandroid/view/ViewGroup;->isLayoutModeOptical()Z
 HSPLandroid/view/ViewGroup;->isLayoutSuppressed()Z
 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;missing_types
+HSPLandroid/view/ViewGroup;->jumpDrawablesToCurrentState()V
 HSPLandroid/view/ViewGroup;->layout(IIII)V
 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+]Landroid/view/View;missing_types
+HSPLandroid/view/ViewGroup;->measureChildWithMargins(Landroid/view/View;IIII)V
 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;->newDispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
+HSPLandroid/view/ViewGroup;->notifySubtreeAccessibilityStateChangedIfNeeded()V
 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;->onAttachedToWindow()V
@@ -18229,7 +18344,7 @@
 HSPLandroid/view/ViewGroup;->resetTouchState()V
 HSPLandroid/view/ViewGroup;->resolveDrawables()V
 HSPLandroid/view/ViewGroup;->resolveLayoutDirection()Z
-HSPLandroid/view/ViewGroup;->resolveLayoutParams()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resolveLayoutParams()V
 HSPLandroid/view/ViewGroup;->resolvePadding()V
 HSPLandroid/view/ViewGroup;->resolveRtlPropertiesIfNeeded()Z
 HSPLandroid/view/ViewGroup;->resolveTextAlignment()Z
@@ -18247,17 +18362,18 @@
 HSPLandroid/view/ViewGroup;->setMotionEventSplittingEnabled(Z)V
 HSPLandroid/view/ViewGroup;->setOnHierarchyChangeListener(Landroid/view/ViewGroup$OnHierarchyChangeListener;)V
 HSPLandroid/view/ViewGroup;->setTouchscreenBlocksFocus(Z)V
+HSPLandroid/view/ViewGroup;->setWindowInsetsAnimationCallback(Landroid/view/WindowInsetsAnimation$Callback;)V
 HSPLandroid/view/ViewGroup;->shouldBlockFocusForTouchscreen()Z
 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+]Landroid/view/View;missing_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
+HSPLandroid/view/ViewGroup;->transformPointToViewLocal([FLandroid/view/View;)V
 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;missing_types]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/graphics/Outline;Landroid/graphics/Outline;
+HSPLandroid/view/ViewOutlineProvider$1;->getOutline(Landroid/view/View;Landroid/graphics/Outline;)V
 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
@@ -18283,7 +18399,7 @@
 HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationCancel(Landroid/animation/Animator;)V
 HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationEnd(Landroid/animation/Animator;)V
 HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationStart(Landroid/animation/Animator;)V
-HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/view/View;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
+HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
 HSPLandroid/view/ViewPropertyAnimator$NameValuesHolder;-><init>(IFF)V
 HSPLandroid/view/ViewPropertyAnimator$PropertyBundle;-><init>(ILjava/util/ArrayList;)V
 HSPLandroid/view/ViewPropertyAnimator$PropertyBundle;->cancel(I)Z
@@ -18307,22 +18423,11 @@
 HSPLandroid/view/ViewPropertyAnimator;->withEndAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->withLayer()Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->withStartAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda0;-><init>()V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda0;->run()V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;)V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda14;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda14;->run()V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda17;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda1;->onFrameDraw(J)V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda2;->run()V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda3;->run()V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda4;-><init>()V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda4;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda5;-><init>()V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda5;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda6;-><init>()V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda6;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda7;-><init>(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda7;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/view/ViewRootImpl$2;-><init>(Landroid/view/ViewRootImpl;Landroid/graphics/HardwareRenderer$FrameDrawingCallback;)V
 HSPLandroid/view/ViewRootImpl$2;->onFrameDraw(IJ)Landroid/graphics/HardwareRenderer$FrameCommitCallback;
 HSPLandroid/view/ViewRootImpl$3;-><init>(Landroid/view/ViewRootImpl;)V
@@ -18331,12 +18436,13 @@
 HSPLandroid/view/ViewRootImpl$4;->run()V
 HSPLandroid/view/ViewRootImpl$6$$ExternalSyntheticLambda0;-><init>(Landroid/view/ViewRootImpl$6;J)V
 HSPLandroid/view/ViewRootImpl$6$$ExternalSyntheticLambda0;->onFrameCommit(Z)V
-HSPLandroid/view/ViewRootImpl$6;-><init>(Landroid/view/ViewRootImpl;)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$8$$ExternalSyntheticLambda0;->onFrameCommit(Z)V
-HSPLandroid/view/ViewRootImpl$8;->lambda$onFrameDraw$0(JLandroid/window/SurfaceSyncGroup;ZZ)V
+HSPLandroid/view/ViewRootImpl$8$$ExternalSyntheticLambda1;-><init>(Landroid/view/ViewRootImpl$8;JLandroid/window/SurfaceSyncGroup;Z)V
+HSPLandroid/view/ViewRootImpl$8$$ExternalSyntheticLambda1;->onFrameCommit(Z)V
+HSPLandroid/view/ViewRootImpl$8;->$r8$lambda$6frSHsGsDhUEo8Wl9hChpniTVZ0(Landroid/view/ViewRootImpl$8;JLandroid/window/SurfaceSyncGroup;ZZ)V
+HSPLandroid/view/ViewRootImpl$8;->lambda$onFrameDraw$1(JLandroid/window/SurfaceSyncGroup;ZZ)V
 HSPLandroid/view/ViewRootImpl$8;->onFrameDraw(IJ)Landroid/graphics/HardwareRenderer$FrameCommitCallback;
 HSPLandroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;-><init>(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;->ensureNoConnection()V
@@ -18358,7 +18464,7 @@
 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+]Landroid/view/ViewRootImpl$WindowInputEventReceiver;Landroid/view/ViewRootImpl$WindowInputEventReceiver;
+HSPLandroid/view/ViewRootImpl$InputMetricsListener;->onFrameMetricsAvailable(I)V
 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
@@ -18428,8 +18534,6 @@
 HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onBatchedInputEventPending(I)V
 HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onFocusEvent(Z)V
 HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;)V
-HSPLandroid/view/ViewRootImpl;->$r8$lambda$-qO-Mrvqf-pKzC99nUY2ZolqE1c(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl;->$r8$lambda$930NNnjYChnHXjTS3030S0OyB8g(Landroid/view/ViewRootImpl;ILandroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/view/ViewRootImpl;->$r8$lambda$cb26dxdYlLa0pFTTRhgboKYoMu0(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl;->-$$Nest$fgetmBlastBufferQueue(Landroid/view/ViewRootImpl;)Landroid/graphics/BLASTBufferQueue;
 HSPLandroid/view/ViewRootImpl;->-$$Nest$fputmProfileRendering(Landroid/view/ViewRootImpl;Z)V
@@ -18437,9 +18541,9 @@
 HSPLandroid/view/ViewRootImpl;->-$$Nest$mdispatchResized(Landroid/view/ViewRootImpl;Landroid/window/ClientWindowFrames;ZLandroid/util/MergedConfiguration;Landroid/view/InsetsState;ZZIIZ)V
 HSPLandroid/view/ViewRootImpl;->-$$Nest$mprofileRendering(Landroid/view/ViewRootImpl;Z)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;Landroid/view/WindowLayout;)V+]Landroid/view/WindowLeaked;Landroid/view/WindowLeaked;]Landroid/media/AudioManager;Landroid/media/AudioManager;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/content/Context;missing_types
+HSPLandroid/view/ViewRootImpl;-><init>(Landroid/content/Context;Landroid/view/Display;Landroid/view/IWindowSession;Landroid/view/WindowLayout;)V
 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;->addFrameCommitCallbackIfNeeded()V
 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
@@ -18453,7 +18557,7 @@
 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+]Landroid/view/View;Lcom/android/internal/policy/DecorView;
+HSPLandroid/view/ViewRootImpl;->collectViewAttributes()Z
 HSPLandroid/view/ViewRootImpl;->controlInsetsForCompatibility(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ViewRootImpl;->createSyncIfNeeded()V
 HSPLandroid/view/ViewRootImpl;->deliverInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
@@ -18476,8 +18580,7 @@
 HSPLandroid/view/ViewRootImpl;->doConsumeBatchedInput(J)Z
 HSPLandroid/view/ViewRootImpl;->doDie()V
 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/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/Choreographer;Landroid/view/Choreographer;
+HSPLandroid/view/ViewRootImpl;->doTraversal()V
 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
@@ -18496,12 +18599,11 @@
 HSPLandroid/view/ViewRootImpl;->getAccessibilityFocusedRect(Landroid/graphics/Rect;)Z
 HSPLandroid/view/ViewRootImpl;->getAudioManager()Landroid/media/AudioManager;
 HSPLandroid/view/ViewRootImpl;->getAutofillManager()Landroid/view/autofill/AutofillManager;
-HSPLandroid/view/ViewRootImpl;->getBoundsLayer()Landroid/view/SurfaceControl;
 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;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z
 HSPLandroid/view/ViewRootImpl;->getCompatWindowConfiguration()Landroid/app/WindowConfiguration;
 HSPLandroid/view/ViewRootImpl;->getConfiguration()Landroid/content/res/Configuration;
-HSPLandroid/view/ViewRootImpl;->getDisplayId()I+]Landroid/view/Display;Landroid/view/Display;
+HSPLandroid/view/ViewRootImpl;->getDisplayId()I
 HSPLandroid/view/ViewRootImpl;->getHandwritingInitiator()Landroid/view/HandwritingInitiator;
 HSPLandroid/view/ViewRootImpl;->getHostVisibility()I
 HSPLandroid/view/ViewRootImpl;->getImeFocusController()Landroid/view/ImeFocusController;
@@ -18517,7 +18619,7 @@
 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;->getUpdatedFrameInfo()Landroid/graphics/FrameInfo;
 HSPLandroid/view/ViewRootImpl;->getValidLayoutRequesters(Ljava/util/ArrayList;Z)Ljava/util/ArrayList;
 HSPLandroid/view/ViewRootImpl;->getView()Landroid/view/View;
 HSPLandroid/view/ViewRootImpl;->getViewBoundsSandboxingEnabled()Z
@@ -18536,7 +18638,7 @@
 HSPLandroid/view/ViewRootImpl;->invalidateRectOnScreen(Landroid/graphics/Rect;)V
 HSPLandroid/view/ViewRootImpl;->isContentCaptureEnabled()Z
 HSPLandroid/view/ViewRootImpl;->isContentCaptureReallyEnabled()Z
-HSPLandroid/view/ViewRootImpl;->isHardwareEnabled()Z+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
+HSPLandroid/view/ViewRootImpl;->isHardwareEnabled()Z
 HSPLandroid/view/ViewRootImpl;->isInLayout()Z
 HSPLandroid/view/ViewRootImpl;->isInTouchMode()Z
 HSPLandroid/view/ViewRootImpl;->isInWMSRequestedSync()Z
@@ -18544,22 +18646,20 @@
 HSPLandroid/view/ViewRootImpl;->isNavigationKey(Landroid/view/KeyEvent;)Z
 HSPLandroid/view/ViewRootImpl;->isTextDirectionResolved()Z
 HSPLandroid/view/ViewRootImpl;->keepClearRectsChanged(Z)V
-HSPLandroid/view/ViewRootImpl;->lambda$createSyncIfNeeded$3(ILandroid/view/SurfaceControl$Transaction;)V
-HSPLandroid/view/ViewRootImpl;->lambda$getOrCreateSurfaceSyncGroup$13()V
 HSPLandroid/view/ViewRootImpl;->lambda$getOrCreateSurfaceSyncGroup$14()V
 HSPLandroid/view/ViewRootImpl;->lambda$new$0(Landroid/view/View;)Ljava/util/List;
 HSPLandroid/view/ViewRootImpl;->lambda$new$1(Landroid/view/View;)Ljava/util/List;
 HSPLandroid/view/ViewRootImpl;->lambda$new$2(Landroid/view/View;)Ljava/util/List;
 HSPLandroid/view/ViewRootImpl;->loadSystemProperties()V
 HSPLandroid/view/ViewRootImpl;->maybeFireAccessibilityWindowStateChangedEvent()V
-HSPLandroid/view/ViewRootImpl;->maybeHandleWindowMove(Landroid/graphics/Rect;)V+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
+HSPLandroid/view/ViewRootImpl;->maybeHandleWindowMove(Landroid/graphics/Rect;)V
 HSPLandroid/view/ViewRootImpl;->maybeUpdateTooltip(Landroid/view/MotionEvent;)V
 HSPLandroid/view/ViewRootImpl;->measureHierarchy(Landroid/view/View;Landroid/view/WindowManager$LayoutParams;Landroid/content/res/Resources;IIZ)Z
 HSPLandroid/view/ViewRootImpl;->mergeWithNextTransaction(Landroid/view/SurfaceControl$Transaction;J)V
-HSPLandroid/view/ViewRootImpl;->notifyContentCaptureEvents()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;->notifyContentCaptureEvents()V
 HSPLandroid/view/ViewRootImpl;->notifyDrawStarted(Z)V
 HSPLandroid/view/ViewRootImpl;->notifyInsetsChanged()V
-HSPLandroid/view/ViewRootImpl;->notifyRendererOfFramePending()V+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
+HSPLandroid/view/ViewRootImpl;->notifyRendererOfFramePending()V
 HSPLandroid/view/ViewRootImpl;->notifySurfaceCreated(Landroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/view/ViewRootImpl;->notifySurfaceDestroyed()V
 HSPLandroid/view/ViewRootImpl;->obtainQueuedInputEvent(Landroid/view/InputEvent;Landroid/view/InputEventReceiver;I)Landroid/view/ViewRootImpl$QueuedInputEvent;
@@ -18571,11 +18671,10 @@
 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()Z+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
 HSPLandroid/view/ViewRootImpl;->performHapticFeedback(IZ)Z
 HSPLandroid/view/ViewRootImpl;->performLayout(Landroid/view/WindowManager$LayoutParams;II)V
 HSPLandroid/view/ViewRootImpl;->performMeasure(II)V
-HSPLandroid/view/ViewRootImpl;->performTraversals()V+]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/View;Lcom/android/internal/policy/DecorView;]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/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/view/Display;Landroid/view/Display;
+HSPLandroid/view/ViewRootImpl;->performTraversals()V
 HSPLandroid/view/ViewRootImpl;->playSoundEffect(I)V
 HSPLandroid/view/ViewRootImpl;->pokeDrawLockIfNeeded()V
 HSPLandroid/view/ViewRootImpl;->prepareSurfaces()V
@@ -18609,7 +18708,7 @@
 HSPLandroid/view/ViewRootImpl;->setAccessibilityWindowAttributesIfNeeded()V
 HSPLandroid/view/ViewRootImpl;->setActivityConfigCallback(Landroid/view/ViewRootImpl$ActivityConfigCallback;)V
 HSPLandroid/view/ViewRootImpl;->setBoundsLayerCrop(Landroid/view/SurfaceControl$Transaction;)V
-HSPLandroid/view/ViewRootImpl;->setFrame(Landroid/graphics/Rect;Z)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/InsetsController;Landroid/view/InsetsController;
+HSPLandroid/view/ViewRootImpl;->setFrame(Landroid/graphics/Rect;Z)V
 HSPLandroid/view/ViewRootImpl;->setLayoutParams(Landroid/view/WindowManager$LayoutParams;Z)V
 HSPLandroid/view/ViewRootImpl;->setOnContentApplyWindowInsetsListener(Landroid/view/Window$OnContentApplyWindowInsetsListener;)V
 HSPLandroid/view/ViewRootImpl;->setTag()V
@@ -18619,6 +18718,7 @@
 HSPLandroid/view/ViewRootImpl;->shouldOptimizeMeasure(Landroid/view/WindowManager$LayoutParams;)Z
 HSPLandroid/view/ViewRootImpl;->shouldUseDisplaySize(Landroid/view/WindowManager$LayoutParams;)Z
 HSPLandroid/view/ViewRootImpl;->systemGestureExclusionChanged()V
+HSPLandroid/view/ViewRootImpl;->transformMatrixToGlobal(Landroid/graphics/Matrix;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
 HSPLandroid/view/ViewRootImpl;->unscheduleConsumeBatchedInput()V
 HSPLandroid/view/ViewRootImpl;->unscheduleTraversals()V
 HSPLandroid/view/ViewRootImpl;->updateBlastSurfaceIfNeeded()V
@@ -18628,7 +18728,7 @@
 HSPLandroid/view/ViewRootImpl;->updateCompatSysUiVisibility(III)V
 HSPLandroid/view/ViewRootImpl;->updateCompatSystemUiVisibilityInfo(IIII)V
 HSPLandroid/view/ViewRootImpl;->updateConfiguration(I)V
-HSPLandroid/view/ViewRootImpl;->updateContentDrawBounds()Z+]Landroid/view/WindowCallbacks;Lcom/android/internal/policy/DecorView;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/ViewRootImpl;->updateContentDrawBounds()Z
 HSPLandroid/view/ViewRootImpl;->updateForceDarkMode()V
 HSPLandroid/view/ViewRootImpl;->updateInternalDisplay(ILandroid/content/res/Resources;)V
 HSPLandroid/view/ViewRootImpl;->updateKeepClearForAccessibilityFocusRect()V
@@ -18644,6 +18744,7 @@
 HSPLandroid/view/ViewRootInsetsControllerHost;->dispatchWindowInsetsAnimationEnd(Landroid/view/WindowInsetsAnimation;)V
 HSPLandroid/view/ViewRootInsetsControllerHost;->getHandler()Landroid/os/Handler;
 HSPLandroid/view/ViewRootInsetsControllerHost;->getInputMethodManager()Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/view/ViewRootInsetsControllerHost;->getRootViewContext()Landroid/content/Context;
 HSPLandroid/view/ViewRootInsetsControllerHost;->getSystemBarsAppearance()I
 HSPLandroid/view/ViewRootInsetsControllerHost;->getSystemBarsBehavior()I
 HSPLandroid/view/ViewRootInsetsControllerHost;->getTranslator()Landroid/content/res/CompatibilityInfo$Translator;
@@ -18652,6 +18753,7 @@
 HSPLandroid/view/ViewRootInsetsControllerHost;->isSystemBarsAppearanceControlled()Z
 HSPLandroid/view/ViewRootInsetsControllerHost;->notifyInsetsChanged()V
 HSPLandroid/view/ViewRootInsetsControllerHost;->updateCompatSysUiVisibility(III)V
+HSPLandroid/view/ViewRootInsetsControllerHost;->updateRequestedVisibleTypes(I)V
 HSPLandroid/view/ViewRootRectTracker$ViewInfo;-><init>(Landroid/view/ViewRootRectTracker;Landroid/view/View;)V
 HSPLandroid/view/ViewRootRectTracker$ViewInfo;->getView()Landroid/view/View;
 HSPLandroid/view/ViewRootRectTracker$ViewInfo;->update()I
@@ -18665,7 +18767,7 @@
 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+]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/view/ViewStub;Landroid/view/ViewStub;
+HSPLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/view/ViewStub;->inflate()Landroid/view/View;
 HSPLandroid/view/ViewStub;->setLayoutInflater(Landroid/view/LayoutInflater;)V
 HSPLandroid/view/ViewStub;->setLayoutResource(I)V
@@ -18677,11 +18779,11 @@
 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+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->end()V
 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;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->start()Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;
 HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;-><init>()V
 HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->isEmpty()Z
@@ -18694,13 +18796,14 @@
 HSPLandroid/view/ViewTreeObserver;->addOnGlobalLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V
 HSPLandroid/view/ViewTreeObserver;->addOnPreDrawListener(Landroid/view/ViewTreeObserver$OnPreDrawListener;)V
 HSPLandroid/view/ViewTreeObserver;->addOnScrollChangedListener(Landroid/view/ViewTreeObserver$OnScrollChangedListener;)V
+HSPLandroid/view/ViewTreeObserver;->addOnWindowFocusChangeListener(Landroid/view/ViewTreeObserver$OnWindowFocusChangeListener;)V
 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+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/ViewTreeObserver$OnDrawListener;Landroid/widget/Editor$2;
+HSPLandroid/view/ViewTreeObserver;->dispatchOnDraw()V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnEnterAnimationComplete()V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnGlobalLayout()V
-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;->dispatchOnPreDraw()Z
 HSPLandroid/view/ViewTreeObserver;->dispatchOnScrollChanged()V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnSystemGestureExclusionRectsChanged(Ljava/util/List;)V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnTouchModeChanged(Z)V
@@ -18782,8 +18885,7 @@
 HSPLandroid/view/WindowInsets$Type;->statusBars()I
 HSPLandroid/view/WindowInsets$Type;->systemBars()I
 HSPLandroid/view/WindowInsets$Type;->systemGestures()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;Landroid/view/DisplayShape;IZ)V
+HSPLandroid/view/WindowInsets$Type;->toString(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 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;
@@ -18814,10 +18916,11 @@
 HSPLandroid/view/WindowInsets;->insetUnchecked(IIII)Landroid/view/WindowInsets;
 HSPLandroid/view/WindowInsets;->isConsumed()Z
 HSPLandroid/view/WindowInsets;->isRound()Z
+HSPLandroid/view/WindowInsets;->isVisible(I)Z
 HSPLandroid/view/WindowInsets;->replaceSystemWindowInsets(IIII)Landroid/view/WindowInsets;
-HSPLandroid/view/WindowInsets;->shouldAlwaysConsumeSystemBars()Z
 HSPLandroid/view/WindowInsetsAnimation$Bounds;-><init>(Landroid/graphics/Insets;Landroid/graphics/Insets;)V
 HSPLandroid/view/WindowInsetsAnimation$Callback;-><init>(I)V
+HSPLandroid/view/WindowInsetsAnimation$Callback;->getDispatchMode()I
 HSPLandroid/view/WindowInsetsAnimation;-><init>(ILandroid/view/animation/Interpolator;J)V
 HSPLandroid/view/WindowInsetsAnimation;->getTypeMask()I
 HSPLandroid/view/WindowInsetsAnimation;->setAlpha(F)V
@@ -18831,7 +18934,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+]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/view/WindowManager$LayoutParams;->copyFrom(Landroid/view/WindowManager$LayoutParams;)I
 HSPLandroid/view/WindowManager$LayoutParams;->forRotation(I)Landroid/view/WindowManager$LayoutParams;
 HSPLandroid/view/WindowManager$LayoutParams;->getColorMode()I
 HSPLandroid/view/WindowManager$LayoutParams;->getFitInsetsSides()I
@@ -18847,6 +18950,7 @@
 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;->hasWindowExtensionsEnabled()Z
 HSPLandroid/view/WindowManagerGlobal$1;-><init>()V
 HSPLandroid/view/WindowManagerGlobal$2;-><init>(Landroid/view/WindowManagerGlobal;)V
 HSPLandroid/view/WindowManagerGlobal;-><init>()V
@@ -18906,7 +19010,7 @@
 HSPLandroid/view/accessibility/AccessibilityManager;->getServiceLocked()Landroid/view/accessibility/IAccessibilityManager;
 HSPLandroid/view/accessibility/AccessibilityManager;->hasAnyDirectConnection()Z
 HSPLandroid/view/accessibility/AccessibilityManager;->initialFocusAppearanceLocked(Landroid/content/res/Resources;)V
-HSPLandroid/view/accessibility/AccessibilityManager;->isEnabled()Z+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
+HSPLandroid/view/accessibility/AccessibilityManager;->isEnabled()Z
 HSPLandroid/view/accessibility/AccessibilityManager;->isHighTextContrastEnabled()Z
 HSPLandroid/view/accessibility/AccessibilityManager;->isTouchExplorationEnabled()Z
 HSPLandroid/view/accessibility/AccessibilityManager;->notifyAccessibilityStateChanged()V
@@ -18925,7 +19029,7 @@
 HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->registerViewWithId(Landroid/view/View;I)V
 HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->unregisterViewWithId(I)V
 HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;-><init>(ILjava/lang/CharSequence;)V
-HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;
+HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->getId()I
 HSPLandroid/view/accessibility/AccessibilityNodeProvider;-><init>()V
 HSPLandroid/view/accessibility/CaptioningManager$CaptionStyle;->getTypeface()Landroid/graphics/Typeface;
@@ -18951,7 +19055,6 @@
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->getEnabledAccessibilityServiceList(II)Ljava/util/List;
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->getFocusColor()I
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->getFocusStrokeWidth()I
-HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->getInstalledAccessibilityServiceList(I)Ljava/util/List;
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->getRecommendedTimeoutMillis()J
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->registerSystemAction(Landroid/app/RemoteAction;I)V
 HSPLandroid/view/accessibility/IAccessibilityManager$Stub$Proxy;->unregisterSystemAction(I)V
@@ -18964,9 +19067,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+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/view/accessibility/WeakSparseArray;->append(ILjava/lang/Object;)V
 HSPLandroid/view/accessibility/WeakSparseArray;->remove(I)V
-HSPLandroid/view/accessibility/WeakSparseArray;->removeUnreachableValues()V+]Ljava/lang/ref/ReferenceQueue;Ljava/lang/ref/ReferenceQueue;
+HSPLandroid/view/accessibility/WeakSparseArray;->removeUnreachableValues()V
 HSPLandroid/view/animation/AccelerateDecelerateInterpolator;-><init>()V
 HSPLandroid/view/animation/AccelerateDecelerateInterpolator;->createNativeInterpolator()J
 HSPLandroid/view/animation/AccelerateDecelerateInterpolator;->getInterpolation(F)F
@@ -19061,7 +19164,6 @@
 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;
-HSPLandroid/view/animation/AnimationUtils;->lockAnimationClock(J)V
 HSPLandroid/view/animation/AnimationUtils;->unlockAnimationClock()V
 HSPLandroid/view/animation/BaseInterpolator;-><init>()V
 HSPLandroid/view/animation/BaseInterpolator;->getChangingConfiguration()I
@@ -19130,13 +19232,13 @@
 HSPLandroid/view/autofill/AutofillFeatureFlags;->getDenylistStringFromFlag()Ljava/lang/String;
 HSPLandroid/view/autofill/AutofillFeatureFlags;->getFillDialogEnabledHints()[Ljava/lang/String;
 HSPLandroid/view/autofill/AutofillFeatureFlags;->getNonAutofillableImeActionIdSetFromFlag()Ljava/util/Set;
-HSPLandroid/view/autofill/AutofillFeatureFlags;->isCredentialManagerEnabled()Z
 HSPLandroid/view/autofill/AutofillFeatureFlags;->isFillDialogEnabled()Z
 HSPLandroid/view/autofill/AutofillFeatureFlags;->isTriggerFillRequestOnUnimportantViewEnabled()Z
 HSPLandroid/view/autofill/AutofillFeatureFlags;->lambda$getFillDialogEnabledHints$1(Ljava/lang/String;)Z
-HSPLandroid/view/autofill/AutofillFeatureFlags;->shouldIgnoreCredentialViews()Z
-HSPLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/autofill/AutofillId;
-HSPLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/view/autofill/AutofillFeatureFlags;->shouldIncludeAllChildrenViewInAssistStructure()Z
+HSPLandroid/view/autofill/AutofillFeatureFlags;->shouldIncludeAllViewsAutofillTypeNotNoneInAssistStructrue()Z
+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;+]Landroid/view/autofill/AutofillId$1;Landroid/view/autofill/AutofillId$1;
 HSPLandroid/view/autofill/AutofillId;-><init>(I)V
 HSPLandroid/view/autofill/AutofillId;-><init>(IIJI)V
 HSPLandroid/view/autofill/AutofillId;->equals(Ljava/lang/Object;)Z
@@ -19146,7 +19248,7 @@
 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;->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
 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
@@ -19155,7 +19257,6 @@
 HSPLandroid/view/autofill/AutofillManager$AugmentedAutofillManagerClient;->getViewNodeParcelable(Landroid/view/autofill/AutofillId;)Landroid/app/assist/AssistStructure$ViewNodeParcelable;
 HSPLandroid/view/autofill/AutofillManager$AutofillCallback;-><init>()V
 HSPLandroid/view/autofill/AutofillManager$AutofillManagerClient;->getAugmentedAutofillClient(Lcom/android/internal/os/IResultReceiver;)V
-HSPLandroid/view/autofill/AutofillManager$AutofillManagerClient;->lambda$getAugmentedAutofillClient$15(Landroid/view/autofill/AutofillManager;Lcom/android/internal/os/IResultReceiver;)V
 HSPLandroid/view/autofill/AutofillManager$AutofillManagerClient;->lambda$setState$0(Landroid/view/autofill/AutofillManager;I)V
 HSPLandroid/view/autofill/AutofillManager$AutofillManagerClient;->setState(I)V
 HSPLandroid/view/autofill/AutofillManager;->-$$Nest$mpost(Landroid/view/autofill/AutofillManager;Ljava/lang/Runnable;)V
@@ -19168,15 +19269,20 @@
 HSPLandroid/view/autofill/AutofillManager;->hasAutofillFeature()Z
 HSPLandroid/view/autofill/AutofillManager;->hasFillDialogUiFeature()Z
 HSPLandroid/view/autofill/AutofillManager;->isActiveLocked()Z
+HSPLandroid/view/autofill/AutofillManager;->isActivityAllowedForAutofill()Z
+HSPLandroid/view/autofill/AutofillManager;->isActivityDeniedForAutofill()Z
+HSPLandroid/view/autofill/AutofillManager;->isAutofillable(Landroid/view/View;)Z+]Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager;]Landroid/view/View;missing_types
 HSPLandroid/view/autofill/AutofillManager;->isDisabledByServiceLocked()Z
 HSPLandroid/view/autofill/AutofillManager;->isEnabled()Z
+HSPLandroid/view/autofill/AutofillManager;->isPassingImeActionCheck(Landroid/widget/EditText;)Z+]Ljava/util/Set;Landroid/util/ArraySet;
+HSPLandroid/view/autofill/AutofillManager;->isPassingMultilineCheck(Landroid/widget/EditText;)Z
 HSPLandroid/view/autofill/AutofillManager;->notifyValueChanged(Landroid/view/View;)V
 HSPLandroid/view/autofill/AutofillManager;->notifyViewEntered(Landroid/view/View;I)V
 HSPLandroid/view/autofill/AutofillManager;->notifyViewEnteredForAugmentedAutofill(Landroid/view/View;)V
 HSPLandroid/view/autofill/AutofillManager;->notifyViewEnteredForFillDialog(Landroid/view/View;)V
 HSPLandroid/view/autofill/AutofillManager;->notifyViewExited(Landroid/view/View;)V
 HSPLandroid/view/autofill/AutofillManager;->notifyViewExitedLocked(Landroid/view/View;)V
-HSPLandroid/view/autofill/AutofillManager;->notifyViewVisibilityChangedInternal(Landroid/view/View;IZZ)V
+HSPLandroid/view/autofill/AutofillManager;->notifyViewVisibilityChangedInternal(Landroid/view/View;IZZ)V+]Landroid/view/View;missing_types
 HSPLandroid/view/autofill/AutofillManager;->onActivityFinishing()V
 HSPLandroid/view/autofill/AutofillManager;->onInvisibleForAutofill(Z)V
 HSPLandroid/view/autofill/AutofillManager;->onSaveInstanceState(Landroid/os/Bundle;)V
@@ -19229,15 +19335,15 @@
 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+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/view/contentcapture/ContentCaptureEvent;->writeToParcel(Landroid/os/Parcel;I)V
 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$StrippedContext;-><init>(Landroid/content/Context;)V
-HSPLandroid/view/contentcapture/ContentCaptureManager$StrippedContext;-><init>(Landroid/content/Context;Landroid/view/contentcapture/ContentCaptureManager$StrippedContext-IA;)V
 HSPLandroid/view/contentcapture/ContentCaptureManager;-><init>(Landroid/content/Context;Landroid/view/contentcapture/IContentCaptureManager;Landroid/content/ContentCaptureOptions;)V
+HSPLandroid/view/contentcapture/ContentCaptureManager;->getFlushViewTreeAppearingEventDisabled()Z
 HSPLandroid/view/contentcapture/ContentCaptureManager;->getMainContentCaptureSession()Landroid/view/contentcapture/MainContentCaptureSession;
-HSPLandroid/view/contentcapture/ContentCaptureManager;->isContentCaptureEnabled()Z+]Landroid/view/contentcapture/MainContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;
+HSPLandroid/view/contentcapture/ContentCaptureManager;->isContentCaptureEnabled()Z
 HSPLandroid/view/contentcapture/ContentCaptureManager;->onActivityCreated(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/content/ComponentName;)V
 HSPLandroid/view/contentcapture/ContentCaptureManager;->setFlushViewTreeAppearingEventDisabled(Z)V
 HSPLandroid/view/contentcapture/ContentCaptureManager;->updateWindowAttributes(Landroid/view/WindowManager$LayoutParams;)V
@@ -19286,7 +19392,7 @@
 HSPLandroid/view/contentcapture/MainContentCaptureSession;-><init>(Landroid/view/contentcapture/ContentCaptureManager$StrippedContext;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;->destroySession()V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->flush(I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Handler;Landroid/os/Handler;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/view/contentcapture/IContentCaptureDirectManager;Landroid/view/contentcapture/IContentCaptureDirectManager$Stub$Proxy;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/util/LocalLog;Landroid/util/LocalLog;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->flush(I)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->flushIfNeeded(I)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->getActivityName()Ljava/lang/String;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->getDebugState()Ljava/lang/String;
@@ -19305,9 +19411,9 @@
 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+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->scheduleFlush(IZ)V
 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;]Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->sendEvent(Landroid/view/contentcapture/ContentCaptureEvent;Z)V
 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
@@ -19343,7 +19449,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+]Landroid/view/contentcapture/ViewNode$ViewNodeText;Landroid/view/contentcapture/ViewNode$ViewNodeText;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/view/contentcapture/ViewNode;->writeSelfToParcel(Landroid/os/Parcel;I)V
 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
@@ -19369,6 +19475,16 @@
 HSPLandroid/view/inputmethod/BaseInputConnection;->setComposingSpans(Landroid/text/Spannable;II)V
 HSPLandroid/view/inputmethod/BaseInputConnection;->setComposingText(Ljava/lang/CharSequence;I)Z
 HSPLandroid/view/inputmethod/CursorAnchorInfo$Builder;-><init>()V
+HSPLandroid/view/inputmethod/CursorAnchorInfo$Builder;->addVisibleLineBounds(FFFF)Landroid/view/inputmethod/CursorAnchorInfo$Builder;
+HSPLandroid/view/inputmethod/CursorAnchorInfo$Builder;->reset()V+]Landroid/view/inputmethod/CursorAnchorInfo$Builder;Landroid/view/inputmethod/CursorAnchorInfo$Builder;]Landroid/view/inputmethod/SparseRectFArray$SparseRectFArrayBuilder;Landroid/view/inputmethod/SparseRectFArray$SparseRectFArrayBuilder;
+HSPLandroid/view/inputmethod/CursorAnchorInfo$Builder;->setInsertionMarkerLocation(FFFFI)Landroid/view/inputmethod/CursorAnchorInfo$Builder;
+HSPLandroid/view/inputmethod/CursorAnchorInfo$Builder;->setMatrix(Landroid/graphics/Matrix;)Landroid/view/inputmethod/CursorAnchorInfo$Builder;+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
+HSPLandroid/view/inputmethod/CursorAnchorInfo;-><init>(IIILjava/lang/CharSequence;IFFFFLandroid/view/inputmethod/SparseRectFArray;Landroid/view/inputmethod/EditorBoundsInfo;[F[FLandroid/view/inputmethod/TextAppearanceInfo;)V
+HSPLandroid/view/inputmethod/CursorAnchorInfo;->create(Landroid/view/inputmethod/CursorAnchorInfo$Builder;)Landroid/view/inputmethod/CursorAnchorInfo;+]Landroid/view/inputmethod/SparseRectFArray$SparseRectFArrayBuilder;Landroid/view/inputmethod/SparseRectFArray$SparseRectFArrayBuilder;
+HSPLandroid/view/inputmethod/CursorAnchorInfo;->equals(Ljava/lang/Object;)Z+]Landroid/view/inputmethod/CursorAnchorInfo;Landroid/view/inputmethod/CursorAnchorInfo;
+HSPLandroid/view/inputmethod/CursorAnchorInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/view/inputmethod/EditorBoundsInfo;-><init>(Landroid/view/inputmethod/EditorBoundsInfo$Builder;)V
+HSPLandroid/view/inputmethod/EditorBoundsInfo;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/inputmethod/EditorInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/inputmethod/EditorInfo;
 HSPLandroid/view/inputmethod/EditorInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/inputmethod/EditorInfo;-><init>()V
@@ -19384,7 +19500,8 @@
 HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->getService()Lcom/android/internal/view/IInputMethodManager;
 HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->isAvailable()Z
 HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->isImeTraceEnabled()Z
-HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->onRequestHide(Ljava/lang/String;III)Landroid/view/inputmethod/ImeTracker$Token;+]Lcom/android/internal/inputmethod/IImeTracker;Lcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;
+HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->onFailed(Landroid/view/inputmethod/ImeTracker$Token;I)V
+HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->onRequestHide(Ljava/lang/String;III)Landroid/view/inputmethod/ImeTracker$Token;
 HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->removeImeSurfaceFromWindowAsync(Landroid/os/IBinder;)V
 HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->reportPerceptibleAsync(Landroid/os/IBinder;Z)V
 HSPLandroid/view/inputmethod/IInputMethodManagerGlobalInvoker;->startInputOrWindowGainedFocus(ILcom/android/internal/inputmethod/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/inputmethod/IRemoteInputConnection;Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;IILandroid/window/ImeOnBackInvokedDispatcher;)Lcom/android/internal/inputmethod/InputBindResult;
@@ -19397,9 +19514,10 @@
 HSPLandroid/view/inputmethod/IInputMethodSessionInvoker;->updateSelectionInternal(IIIIII)V
 HSPLandroid/view/inputmethod/ImeTracker$1$$ExternalSyntheticLambda0;-><init>(Landroid/view/inputmethod/ImeTracker$1;)V
 HSPLandroid/view/inputmethod/ImeTracker$1;-><init>()V
-HSPLandroid/view/inputmethod/ImeTracker$1;->getTag(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/concurrent/ThreadLocalRandom;Ljava/util/concurrent/ThreadLocalRandom;
+HSPLandroid/view/inputmethod/ImeTracker$1;->getTag(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/view/inputmethod/ImeTracker$1;->onFailed(Landroid/view/inputmethod/ImeTracker$Token;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/view/inputmethod/ImeTracker$1;->onProgress(Landroid/view/inputmethod/ImeTracker$Token;I)V
-HSPLandroid/view/inputmethod/ImeTracker$1;->onRequestHide(Ljava/lang/String;III)Landroid/view/inputmethod/ImeTracker$Token;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/view/inputmethod/ImeTracker$1;->onRequestHide(Ljava/lang/String;III)Landroid/view/inputmethod/ImeTracker$Token;
 HSPLandroid/view/inputmethod/ImeTracker$Debug$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V
 HSPLandroid/view/inputmethod/ImeTracker$Debug$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 HSPLandroid/view/inputmethod/ImeTracker$Debug$$ExternalSyntheticLambda1;-><init>()V
@@ -19411,15 +19529,17 @@
 HSPLandroid/view/inputmethod/ImeTracker$Debug;->getFieldMapping(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/Map;
 HSPLandroid/view/inputmethod/ImeTracker$Debug;->getFieldValue(Ljava/lang/reflect/Field;)I
 HSPLandroid/view/inputmethod/ImeTracker$Debug;->lambda$getFieldMapping$0(Ljava/lang/String;Ljava/lang/reflect/Field;)Z
-HSPLandroid/view/inputmethod/ImeTracker$Debug;->originToString(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Map;Ljava/util/HashMap;
-HSPLandroid/view/inputmethod/ImeTracker$Debug;->phaseToString(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Map;Ljava/util/HashMap;
+HSPLandroid/view/inputmethod/ImeTracker$Debug;->originToString(I)Ljava/lang/String;
+HSPLandroid/view/inputmethod/ImeTracker$Debug;->phaseToString(I)Ljava/lang/String;
+HSPLandroid/view/inputmethod/ImeTracker$ImeJankTracker;->onRequestAnimation(Landroid/view/inputmethod/ImeTracker$InputMethodJankContext;IZ)V
 HSPLandroid/view/inputmethod/ImeTracker$Token$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/inputmethod/ImeTracker$Token;
 HSPLandroid/view/inputmethod/ImeTracker$Token$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/inputmethod/ImeTracker$Token;->-$$Nest$fgetmTag(Landroid/view/inputmethod/ImeTracker$Token;)Ljava/lang/String;
-HSPLandroid/view/inputmethod/ImeTracker$Token;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/view/inputmethod/ImeTracker$Token;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/view/inputmethod/ImeTracker$Token;-><init>(Landroid/os/Parcel;Landroid/view/inputmethod/ImeTracker$Token-IA;)V
-HSPLandroid/view/inputmethod/ImeTracker$Token;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/view/inputmethod/ImeTracker$Token;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/inputmethod/ImeTracker;-><clinit>()V
+HSPLandroid/view/inputmethod/ImeTracker;->forJank()Landroid/view/inputmethod/ImeTracker$ImeJankTracker;
 HSPLandroid/view/inputmethod/ImeTracker;->forLogging()Landroid/view/inputmethod/ImeTracker;
 HSPLandroid/view/inputmethod/InlineSuggestionsRequest$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/inputmethod/InlineSuggestionsRequest;
 HSPLandroid/view/inputmethod/InlineSuggestionsRequest$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -19460,13 +19580,16 @@
 HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->onPreWindowGainedFocus(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->onScheduledCheckFocus(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->onViewDetachedFromWindow(Landroid/view/View;Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->onViewFocusChanged(Landroid/view/View;Z)V
 HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->onWindowDismissed(Landroid/view/ViewRootImpl;)V
+HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->onWindowLostFocus(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/inputmethod/InputMethodManager$DelegateImpl;->setCurrentRootViewLocked(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/inputmethod/InputMethodManager$H$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/view/inputmethod/InputMethodManager$H;-><init>(Landroid/view/inputmethod/InputMethodManager;Landroid/os/Looper;)V
 HSPLandroid/view/inputmethod/InputMethodManager$H;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/view/inputmethod/InputMethodManager$ImeInputEventSender;->onInputEventFinished(IZ)V
 HSPLandroid/view/inputmethod/InputMethodManager$PendingEvent;->run()V
+HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$fgetmFallbackInputConnection(Landroid/view/inputmethod/InputMethodManager;)Landroid/view/inputmethod/RemoteInputConnectionImpl;
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$fgetmFullscreenMode(Landroid/view/inputmethod/InputMethodManager;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$fgetmImeDispatcher(Landroid/view/inputmethod/InputMethodManager;)Landroid/window/ImeOnBackInvokedDispatcher;
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$fgetmImeInsetsConsumer(Landroid/view/inputmethod/InputMethodManager;)Landroid/view/ImeInsetsSourceConsumer;
@@ -19477,6 +19600,7 @@
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$fputmFullscreenMode(Landroid/view/inputmethod/InputMethodManager;Z)V
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$fputmRestartOnNextWindowFocus(Landroid/view/inputmethod/InputMethodManager;Z)V
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$mcheckFocusInternalLocked(Landroid/view/inputmethod/InputMethodManager;ZLandroid/view/ViewRootImpl;)Z
+HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$mclearCurRootViewIfNeeded(Landroid/view/inputmethod/InputMethodManager;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$mforAccessibilitySessionsLocked(Landroid/view/inputmethod/InputMethodManager;Ljava/util/function/Consumer;)V
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$mgetServedViewLocked(Landroid/view/inputmethod/InputMethodManager;)Landroid/view/View;
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$mgetStartInputFlags(Landroid/view/inputmethod/InputMethodManager;Landroid/view/View;I)I
@@ -19486,8 +19610,9 @@
 HSPLandroid/view/inputmethod/InputMethodManager;->areSameInputChannel(Landroid/view/InputChannel;Landroid/view/InputChannel;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->canStartInput(Landroid/view/View;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->checkFocus()V
-HSPLandroid/view/inputmethod/InputMethodManager;->checkFocusInternalLocked(ZLandroid/view/ViewRootImpl;)Z+]Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager;]Landroid/view/inputmethod/RemoteInputConnectionImpl;Landroid/view/inputmethod/RemoteInputConnectionImpl;
+HSPLandroid/view/inputmethod/InputMethodManager;->checkFocusInternalLocked(ZLandroid/view/ViewRootImpl;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->clearConnectionLocked()V
+HSPLandroid/view/inputmethod/InputMethodManager;->clearCurRootViewIfNeeded()Z
 HSPLandroid/view/inputmethod/InputMethodManager;->closeCurrentInput()V
 HSPLandroid/view/inputmethod/InputMethodManager;->createInputConnection(Landroid/view/View;)Landroid/util/Pair;
 HSPLandroid/view/inputmethod/InputMethodManager;->createInstance(ILandroid/os/Looper;)Landroid/view/inputmethod/InputMethodManager;
@@ -19504,16 +19629,16 @@
 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;+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/inputmethod/InputMethodManager;->getFallbackInputMethodManagerIfNecessary(Landroid/view/View;)Landroid/view/inputmethod/InputMethodManager;
 HSPLandroid/view/inputmethod/InputMethodManager;->getServedViewLocked()Landroid/view/View;
 HSPLandroid/view/inputmethod/InputMethodManager;->getStartInputFlags(Landroid/view/View;I)I
-HSPLandroid/view/inputmethod/InputMethodManager;->hasServedByInputMethodLocked(Landroid/view/View;)Z+]Landroid/view/View;missing_types
+HSPLandroid/view/inputmethod/InputMethodManager;->hasServedByInputMethodLocked(Landroid/view/View;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->hideSoftInputFromWindow(Landroid/os/IBinder;I)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->hideSoftInputFromWindow(Landroid/os/IBinder;ILandroid/os/ResultReceiver;)Z
 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+]Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/view/inputmethod/InputMethodManager;->isActive(Landroid/view/View;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->isCursorAnchorInfoEnabled()Z
 HSPLandroid/view/inputmethod/InputMethodManager;->isFullscreenMode()Z
 HSPLandroid/view/inputmethod/InputMethodManager;->isImeSessionAvailableLocked()Z
@@ -19533,6 +19658,7 @@
 HSPLandroid/view/inputmethod/InputMethodManager;->startInputInner(ILandroid/os/IBinder;III)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->startInputOnWindowFocusGainInternal(ILandroid/view/View;III)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->unregisterImeConsumer(Landroid/view/ImeInsetsSourceConsumer;)V
+HSPLandroid/view/inputmethod/InputMethodManager;->updateCursorAnchorInfo(Landroid/view/View;Landroid/view/inputmethod/CursorAnchorInfo;)V+]Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager;]Landroid/view/inputmethod/IInputMethodSessionInvoker;Landroid/view/inputmethod/IInputMethodSessionInvoker;]Landroid/view/inputmethod/RemoteInputConnectionImpl;Landroid/view/inputmethod/RemoteInputConnectionImpl;
 HSPLandroid/view/inputmethod/InputMethodManager;->updateInputChannelLocked(Landroid/view/InputChannel;)V
 HSPLandroid/view/inputmethod/InputMethodManager;->updateSelection(Landroid/view/View;IIII)V
 HSPLandroid/view/inputmethod/InputMethodManager;->viewClicked(Landroid/view/View;)V
@@ -19545,6 +19671,8 @@
 HSPLandroid/view/inputmethod/InputMethodSubtype;->getMode()Ljava/lang/String;
 HSPLandroid/view/inputmethod/InputMethodSubtype;->hashCode()I
 HSPLandroid/view/inputmethod/InputMethodSubtypeArray;->get(I)Landroid/view/inputmethod/InputMethodSubtype;
+HSPLandroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda36;-><init>(Landroid/view/inputmethod/RemoteInputConnectionImpl;I)V
+HSPLandroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda36;->run()V
 HSPLandroid/view/inputmethod/RemoteInputConnectionImpl$1;-><init>(Landroid/view/inputmethod/RemoteInputConnectionImpl;)V
 HSPLandroid/view/inputmethod/RemoteInputConnectionImpl;->$r8$lambda$qFXKyAWDZEWw0AFK9ybLLKWARnY(Landroid/view/inputmethod/RemoteInputConnectionImpl;I)V
 HSPLandroid/view/inputmethod/RemoteInputConnectionImpl;-><init>(Landroid/os/Looper;Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/InputMethodManager;Landroid/view/View;)V
@@ -19559,6 +19687,11 @@
 HSPLandroid/view/inputmethod/SurroundingText;-><init>(Ljava/lang/CharSequence;III)V
 HSPLandroid/view/inputmethod/SurroundingText;->copyWithParcelableSpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 HSPLandroid/view/inputmethod/SurroundingText;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/inputmethod/TextAppearanceInfo$Builder;-><init>()V
+HSPLandroid/view/inputmethod/TextAppearanceInfo;-><init>(Landroid/view/inputmethod/TextAppearanceInfo$Builder;)V
+HSPLandroid/view/inputmethod/TextAppearanceInfo;->createFromTextView(Landroid/widget/TextView;)Landroid/view/inputmethod/TextAppearanceInfo;+]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/view/inputmethod/TextAppearanceInfo$Builder;Landroid/view/inputmethod/TextAppearanceInfo$Builder;]Landroid/graphics/Typeface;Landroid/graphics/Typeface;]Landroid/text/style/CharacterStyle;missing_types]Landroid/widget/TextView;missing_types]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;missing_types
+HSPLandroid/view/inputmethod/TextAppearanceInfo;->equals(Ljava/lang/Object;)Z
+HSPLandroid/view/inputmethod/TextAppearanceInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/LocaleList;Landroid/os/LocaleList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/inputmethod/ViewFocusParameterInfo;-><init>(Landroid/view/inputmethod/EditorInfo;IIII)V
 HSPLandroid/view/inputmethod/ViewFocusParameterInfo;->sameAs(Landroid/view/inputmethod/EditorInfo;IIII)Z
 HSPLandroid/view/textclassifier/ConversationAction$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/textclassifier/ConversationAction;
@@ -19688,7 +19821,7 @@
 HSPLandroid/webkit/IWebViewUpdateService$Stub$Proxy;->isMultiProcessEnabled()Z
 HSPLandroid/webkit/IWebViewUpdateService$Stub$Proxy;->waitForAndGetProvider()Landroid/webkit/WebViewProviderResponse;
 HSPLandroid/webkit/IWebViewUpdateService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/webkit/IWebViewUpdateService;
-HSPLandroid/webkit/MimeTypeMap;->getMimeTypeFromExtension(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/webkit/MimeTypeMap;->getMimeTypeFromExtension(Ljava/lang/String;)Ljava/lang/String;+]Llibcore/content/type/MimeMap;Llibcore/content/type/MimeMap;
 HSPLandroid/webkit/MimeTypeMap;->getSingleton()Landroid/webkit/MimeTypeMap;
 HSPLandroid/webkit/URLUtil;->isFileUrl(Ljava/lang/String;)Z
 HSPLandroid/webkit/URLUtil;->isHttpUrl(Ljava/lang/String;)Z
@@ -19808,12 +19941,12 @@
 HSPLandroid/widget/AbsListView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/AbsListView;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
 HSPLandroid/widget/AbsListView;->clearChoices()V
-HSPLandroid/widget/AbsListView;->computeVerticalScrollExtent()I
-HSPLandroid/widget/AbsListView;->computeVerticalScrollOffset()I
+HSPLandroid/widget/AbsListView;->computeVerticalScrollExtent()I+]Landroid/widget/AbsListView;Lcom/android/internal/app/AlertController$RecycleListView;
+HSPLandroid/widget/AbsListView;->computeVerticalScrollOffset()I+]Landroid/widget/AbsListView;Lcom/android/internal/app/AlertController$RecycleListView;
 HSPLandroid/widget/AbsListView;->computeVerticalScrollRange()I
 HSPLandroid/widget/AbsListView;->dispatchDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/AbsListView;->dispatchSetPressed(Z)V
-HSPLandroid/widget/AbsListView;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/AbsListView;->draw(Landroid/graphics/Canvas;)V+]Landroid/widget/EdgeEffect;Landroid/widget/EdgeEffect;]Landroid/widget/AbsListView;Landroid/widget/ListView;,Lcom/android/internal/app/AlertController$RecycleListView;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/widget/AbsListView;->drawableStateChanged()V
 HSPLandroid/widget/AbsListView;->generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/widget/AbsListView;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
@@ -19971,7 +20104,7 @@
 HSPLandroid/widget/CompoundButton;->getAutofillValue()Landroid/view/autofill/AutofillValue;
 HSPLandroid/widget/CompoundButton;->getButtonDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/widget/CompoundButton;->getButtonStateDescription()Ljava/lang/CharSequence;
-HSPLandroid/widget/CompoundButton;->getCompoundPaddingLeft()I
+HSPLandroid/widget/CompoundButton;->getCompoundPaddingLeft()I+]Landroid/widget/CompoundButton;Landroid/widget/Switch;
 HSPLandroid/widget/CompoundButton;->getCompoundPaddingRight()I
 HSPLandroid/widget/CompoundButton;->getHorizontalOffsetForDrawables()I
 HSPLandroid/widget/CompoundButton;->isChecked()Z
@@ -19990,7 +20123,7 @@
 HSPLandroid/widget/EdgeEffect;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/EdgeEffect;->calculateDistanceFromGlowValues(FF)F
 HSPLandroid/widget/EdgeEffect;->dampStretchVector(F)F
-HSPLandroid/widget/EdgeEffect;->draw(Landroid/graphics/Canvas;)Z
+HSPLandroid/widget/EdgeEffect;->draw(Landroid/graphics/Canvas;)Z+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/widget/EdgeEffect;->finish()V
 HSPLandroid/widget/EdgeEffect;->getCurrentEdgeEffectBehavior()I
 HSPLandroid/widget/EdgeEffect;->getDistance()F
@@ -20000,7 +20133,7 @@
 HSPLandroid/widget/EdgeEffect;->onPull(FF)V
 HSPLandroid/widget/EdgeEffect;->onPullDistance(FF)F
 HSPLandroid/widget/EdgeEffect;->onRelease()V
-HSPLandroid/widget/EdgeEffect;->setSize(II)V
+HSPLandroid/widget/EdgeEffect;->setSize(II)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/widget/EdgeEffect;->update()V
 HSPLandroid/widget/EdgeEffect;->updateSpring()V
 HSPLandroid/widget/EditText;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
@@ -20023,7 +20156,7 @@
 HSPLandroid/widget/Editor$Blink;->cancel()V
 HSPLandroid/widget/Editor$Blink;->run()V
 HSPLandroid/widget/Editor$Blink;->uncancel()V
-HSPLandroid/widget/Editor$CursorAnchorInfoNotifier;->updatePosition(IIZZ)V+]Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/widget/Editor$CursorAnchorInfoNotifier;->updatePosition(IIZZ)V
 HSPLandroid/widget/Editor$EditOperation;-><init>(Landroid/widget/Editor;Ljava/lang/String;ILjava/lang/String;Z)V
 HSPLandroid/widget/Editor$EditOperation;->commit()V
 HSPLandroid/widget/Editor$EditOperation;->forceMergeWith(Landroid/widget/Editor$EditOperation;)V
@@ -20070,7 +20203,7 @@
 HSPLandroid/widget/Editor$PositionListener;->onPreDraw()Z+]Landroid/widget/Editor$TextViewPositionListener;Landroid/widget/Editor$CursorAnchorInfoNotifier;
 HSPLandroid/widget/Editor$PositionListener;->onScrollChanged()V
 HSPLandroid/widget/Editor$PositionListener;->removeSubscriber(Landroid/widget/Editor$TextViewPositionListener;)V
-HSPLandroid/widget/Editor$PositionListener;->updatePosition()V+]Landroid/widget/TextView;Landroid/widget/SearchView$SearchAutoComplete;
+HSPLandroid/widget/Editor$PositionListener;->updatePosition()V
 HSPLandroid/widget/Editor$ProcessTextIntentActionsHandler;-><init>(Landroid/widget/Editor;)V
 HSPLandroid/widget/Editor$SelectionModifierCursorController;->getMinTouchOffset()I
 HSPLandroid/widget/Editor$SelectionModifierCursorController;->hide()V
@@ -20107,6 +20240,7 @@
 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;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;I)V+]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLandroid/widget/Editor;->drawHardwareAcceleratedInner(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I[I[IIII)I
 HSPLandroid/widget/Editor;->endBatchEdit()V
 HSPLandroid/widget/Editor;->ensureEndedBatchEdit()V
@@ -20116,7 +20250,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;+]Landroid/content/Context;missing_types
+HSPLandroid/widget/Editor;->getInputMethodManager()Landroid/view/inputmethod/InputMethodManager;
 HSPLandroid/widget/Editor;->getInsertionController()Landroid/widget/Editor$InsertionPointCursorController;
 HSPLandroid/widget/Editor;->getLastTapPosition()I
 HSPLandroid/widget/Editor;->getPositionListener()Landroid/widget/Editor$PositionListener;
@@ -20138,7 +20272,7 @@
 HSPLandroid/widget/Editor;->maybeFireScheduledRestartInputForSetText()V
 HSPLandroid/widget/Editor;->onAttachedToWindow()V
 HSPLandroid/widget/Editor;->onDetachedFromWindow()V
-HSPLandroid/widget/Editor;->onDraw(Landroid/graphics/Canvas;Landroid/text/Layout;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;I)V+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/DynamicLayout;]Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager;]Landroid/widget/SelectionActionModeHelper;Landroid/widget/SelectionActionModeHelper;]Landroid/graphics/Canvas;Landroid/graphics/Canvas;,Landroid/graphics/RecordingCanvas;]Landroid/widget/TextView;missing_types]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/widget/Editor$CorrectionHighlighter;Landroid/widget/Editor$CorrectionHighlighter;
+HSPLandroid/widget/Editor;->onDraw(Landroid/graphics/Canvas;Landroid/text/Layout;Ljava/util/List;Ljava/util/List;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
 HSPLandroid/widget/Editor;->onFocusChanged(ZI)V
 HSPLandroid/widget/Editor;->onLocaleChanged()V
 HSPLandroid/widget/Editor;->onScreenStateChanged(I)V
@@ -20178,7 +20312,7 @@
 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+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 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
@@ -20191,13 +20325,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+]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;->getPaddingBottomWithForeground()I
+HSPLandroid/widget/FrameLayout;->getPaddingLeftWithForeground()I
+HSPLandroid/widget/FrameLayout;->getPaddingRightWithForeground()I
 HSPLandroid/widget/FrameLayout;->getPaddingTopWithForeground()I
-HSPLandroid/widget/FrameLayout;->layoutChildren(IIIIZ)V+]Landroid/view/View;missing_types]Landroid/widget/FrameLayout;missing_types
+HSPLandroid/widget/FrameLayout;->layoutChildren(IIIIZ)V
 HSPLandroid/widget/FrameLayout;->onLayout(ZIIII)V
-HSPLandroid/widget/FrameLayout;->onMeasure(II)V+]Landroid/widget/FrameLayout;missing_types]Landroid/view/View;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/widget/FrameLayout;->onMeasure(II)V
 HSPLandroid/widget/FrameLayout;->setForegroundGravity(I)V
 HSPLandroid/widget/FrameLayout;->setMeasureAllChildren(Z)V
 HSPLandroid/widget/FrameLayout;->shouldDelayChildPressedState()Z
@@ -20294,13 +20428,13 @@
 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/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+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;
 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+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/widget/ImageView;->configureBounds()V
 HSPLandroid/widget/ImageView;->drawableHotspotChanged(FF)V
 HSPLandroid/widget/ImageView;->drawableStateChanged()V
 HSPLandroid/widget/ImageView;->getAccessibilityClassName()Ljava/lang/CharSequence;
@@ -20310,14 +20444,14 @@
 HSPLandroid/widget/ImageView;->getScaleType()Landroid/widget/ImageView$ScaleType;
 HSPLandroid/widget/ImageView;->hasOverlappingRendering()Z
 HSPLandroid/widget/ImageView;->initImageView()V
-HSPLandroid/widget/ImageView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/Drawable;missing_types]Landroid/widget/ImageView;missing_types
+HSPLandroid/widget/ImageView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/ImageView;->isFilledByImage()Z
-HSPLandroid/widget/ImageView;->isOpaque()Z+]Landroid/graphics/drawable/Drawable;missing_types
-HSPLandroid/widget/ImageView;->jumpDrawablesToCurrentState()V+]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/widget/ImageView;->isOpaque()Z
+HSPLandroid/widget/ImageView;->jumpDrawablesToCurrentState()V
 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;]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/widget/ImageView;->onDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/ImageView;->onMeasure(II)V
 HSPLandroid/widget/ImageView;->onRtlPropertiesChanged(I)V
 HSPLandroid/widget/ImageView;->onVisibilityAggregated(Z)V
@@ -20344,16 +20478,16 @@
 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+]Landroid/widget/ImageView;missing_types]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/widget/ImageView;->updateDrawable(Landroid/graphics/drawable/Drawable;)V
 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;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 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;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/LinearLayout;->allViewsAreGoneBefore(I)Z
 HSPLandroid/widget/LinearLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
 HSPLandroid/widget/LinearLayout;->forceUniformHeight(II)V
@@ -20375,11 +20509,11 @@
 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+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
-HSPLandroid/widget/LinearLayout;->layoutVertical(IIII)V+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;missing_types
+HSPLandroid/widget/LinearLayout;->layoutHorizontal(IIII)V
+HSPLandroid/widget/LinearLayout;->layoutVertical(IIII)V
 HSPLandroid/widget/LinearLayout;->measureChildBeforeLayout(Landroid/view/View;IIIII)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;->measureHorizontal(II)V
+HSPLandroid/widget/LinearLayout;->measureVertical(II)V+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
 HSPLandroid/widget/LinearLayout;->onDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/LinearLayout;->onLayout(ZIIII)V
 HSPLandroid/widget/LinearLayout;->onMeasure(II)V
@@ -20587,7 +20721,7 @@
 HSPLandroid/widget/RelativeLayout$DependencyGraph;->add(Landroid/view/View;)V
 HSPLandroid/widget/RelativeLayout$DependencyGraph;->clear()V
 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
+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
@@ -20595,16 +20729,16 @@
 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+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/widget/RelativeLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 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+]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
+HSPLandroid/widget/RelativeLayout$LayoutParams;->shouldResolveLayoutDirection(I)Z
 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
@@ -20622,21 +20756,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;+]Landroid/view/View;missing_types]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
+HSPLandroid/widget/RelativeLayout;->getRelatedView([II)Landroid/view/View;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/widget/RelativeLayout;->getRelatedViewBaselineOffset([I)I
 HSPLandroid/widget/RelativeLayout;->getRelatedViewParams([II)Landroid/widget/RelativeLayout$LayoutParams;
 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+]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;
-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;
+HSPLandroid/widget/RelativeLayout;->onLayout(ZIIII)V+]Landroid/widget/RelativeLayout;Landroid/widget/RelativeLayout;]Landroid/view/View;missing_types
+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+]Landroid/widget/RelativeLayout;Landroid/widget/RelativeLayout;]Landroid/view/View;Landroid/widget/Switch;]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
 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;Landroid/widget/RelativeLayout;]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
@@ -20661,8 +20795,6 @@
 HSPLandroid/widget/RemoteViews$MethodKey;->equals(Ljava/lang/Object;)Z
 HSPLandroid/widget/RemoteViews$MethodKey;->hashCode()I
 HSPLandroid/widget/RemoteViews$MethodKey;->set(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)V
-HSPLandroid/widget/RemoteViews$ReflectionAction;-><init>(Landroid/widget/RemoteViews;ILjava/lang/String;ILjava/lang/Object;)V
-HSPLandroid/widget/RemoteViews$ReflectionAction;-><init>(Landroid/widget/RemoteViews;Landroid/os/Parcel;)V
 HSPLandroid/widget/RemoteViews$ReflectionAction;->getActionTag()I
 HSPLandroid/widget/RemoteViews$ReflectionAction;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/widget/RemoteViews$RemoteResponse;-><init>()V
@@ -20715,7 +20847,7 @@
 HSPLandroid/widget/RtlSpacingHelper;->setDirection(Z)V
 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;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/ScrollBarDrawable;->drawThumb(Landroid/graphics/Canvas;Landroid/graphics/Rect;IIZ)V
 HSPLandroid/widget/ScrollBarDrawable;->getSize(Z)I
 HSPLandroid/widget/ScrollBarDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
@@ -20724,7 +20856,7 @@
 HSPLandroid/widget/ScrollBarDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
 HSPLandroid/widget/ScrollBarDrawable;->onStateChange([I)Z
 HSPLandroid/widget/ScrollBarDrawable;->propagateCurrentState(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/widget/ScrollBarDrawable;->setAlpha(I)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
+HSPLandroid/widget/ScrollBarDrawable;->setAlpha(I)V
 HSPLandroid/widget/ScrollBarDrawable;->setAlwaysDrawVerticalTrack(Z)V
 HSPLandroid/widget/ScrollBarDrawable;->setHorizontalThumbDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/ScrollBarDrawable;->setHorizontalTrackDrawable(Landroid/graphics/drawable/Drawable;)V
@@ -20779,9 +20911,12 @@
 HSPLandroid/widget/SelectionActionModeHelper;-><init>(Landroid/widget/Editor;)V
 HSPLandroid/widget/SelectionActionModeHelper;->getText(Landroid/widget/TextView;)Ljava/lang/CharSequence;
 HSPLandroid/widget/SelectionActionModeHelper;->getTextClassificationSettings()Landroid/view/textclassifier/TextClassificationConstants;
-HSPLandroid/widget/SelectionActionModeHelper;->onTextChanged(II)V+]Landroid/widget/SelectionActionModeHelper$SelectionTracker;Landroid/widget/SelectionActionModeHelper$SelectionTracker;
+HSPLandroid/widget/SelectionActionModeHelper;->isDrawingHighlight()Z+]Landroid/widget/SmartSelectSprite;Landroid/widget/SmartSelectSprite;
+HSPLandroid/widget/SelectionActionModeHelper;->onDraw(Landroid/graphics/Canvas;)V+]Landroid/widget/SelectionActionModeHelper;Landroid/widget/SelectionActionModeHelper;
+HSPLandroid/widget/SelectionActionModeHelper;->onTextChanged(II)V
 HSPLandroid/widget/SelectionActionModeHelper;->sortSelectionIndices(II)[I
 HSPLandroid/widget/SmartSelectSprite;-><init>(Landroid/content/Context;ILjava/lang/Runnable;)V
+HSPLandroid/widget/SmartSelectSprite;->isAnimationActive()Z
 HSPLandroid/widget/Space;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/Space;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/Space;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
@@ -20812,7 +20947,7 @@
 HSPLandroid/widget/Switch;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/Switch;->drawableStateChanged()V
 HSPLandroid/widget/Switch;->getButtonStateDescription()Ljava/lang/CharSequence;
-HSPLandroid/widget/Switch;->jumpDrawablesToCurrentState()V
+HSPLandroid/widget/Switch;->jumpDrawablesToCurrentState()V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]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
@@ -20840,27 +20975,27 @@
 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/widget/Editor;Landroid/widget/Editor;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;missing_types]Landroid/widget/TextView;missing_types]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/widget/TextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/util/TypedValue;Landroid/util/TypedValue;]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/widget/Editor;Landroid/widget/Editor;]Landroid/content/Context;missing_types]Landroid/widget/TextView;megamorphic_types
 HSPLandroid/widget/TextView;->addSearchHighlightPaths()V
 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+]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->applyTextAppearance(Landroid/widget/TextView$TextAppearanceAttributes;)V
 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(IZ)Z+]Landroid/text/Layout$Alignment;Landroid/text/Layout$Alignment;]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->bringPointIntoView(IZ)Z
 HSPLandroid/widget/TextView;->bringTextIntoView()Z
 HSPLandroid/widget/TextView;->canMarquee()Z
 HSPLandroid/widget/TextView;->cancelLongPress()V
-HSPLandroid/widget/TextView;->checkForRelayout()V+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/widget/TextView;->checkForRelayout()V
 HSPLandroid/widget/TextView;->checkForResize()V
 HSPLandroid/widget/TextView;->cleanupAutoSizePresetSizes([I)[I
-HSPLandroid/widget/TextView;->compressText(F)Z
+HSPLandroid/widget/TextView;->compressText(F)Z+]Landroid/text/Layout;Landroid/text/BoringLayout;]Landroid/text/TextPaint;Landroid/text/TextPaint;
 HSPLandroid/widget/TextView;->computeHorizontalScrollRange()I
 HSPLandroid/widget/TextView;->computeScroll()V
-HSPLandroid/widget/TextView;->computeVerticalScrollExtent()I
+HSPLandroid/widget/TextView;->computeVerticalScrollExtent()I+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->computeVerticalScrollRange()I
 HSPLandroid/widget/TextView;->convertToLocalHorizontalCoordinate(F)F
 HSPLandroid/widget/TextView;->createEditorIfNeeded()V
@@ -20880,7 +21015,7 @@
 HSPLandroid/widget/TextView;->getBaseline()I
 HSPLandroid/widget/TextView;->getBaselineOffset()I
 HSPLandroid/widget/TextView;->getBottomVerticalOffset(Z)I
-HSPLandroid/widget/TextView;->getBoxHeight(Landroid/text/Layout;)I+]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->getBoxHeight(Landroid/text/Layout;)I
 HSPLandroid/widget/TextView;->getBreakStrategy()I
 HSPLandroid/widget/TextView;->getCompoundDrawablePadding()I
 HSPLandroid/widget/TextView;->getCompoundDrawables()[Landroid/graphics/drawable/Drawable;
@@ -20889,16 +21024,19 @@
 HSPLandroid/widget/TextView;->getCompoundPaddingLeft()I
 HSPLandroid/widget/TextView;->getCompoundPaddingRight()I
 HSPLandroid/widget/TextView;->getCompoundPaddingTop()I
+HSPLandroid/widget/TextView;->getContentVisibleRect(Landroid/graphics/Rect;)Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getCurrentTextColor()I
+HSPLandroid/widget/TextView;->getCursorAnchorInfo(ILandroid/view/inputmethod/CursorAnchorInfo$Builder;Landroid/graphics/Matrix;)Landroid/view/inputmethod/CursorAnchorInfo;+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/view/inputmethod/EditorBoundsInfo$Builder;Landroid/view/inputmethod/EditorBoundsInfo$Builder;]Landroid/view/inputmethod/CursorAnchorInfo$Builder;Landroid/view/inputmethod/CursorAnchorInfo$Builder;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/text/Layout;Landroid/text/DynamicLayout;]Landroid/widget/TextView;missing_types]Ljava/lang/CharSequence;Landroid/text/SpannableStringBuilder;
 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+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
+HSPLandroid/widget/TextView;->getDesiredHeight(Landroid/text/Layout;Z)I
+HSPLandroid/widget/TextView;->getDisplayMetricsOrSystem()Landroid/util/DisplayMetrics;
 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/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
-HSPLandroid/widget/TextView;->getExtendedPaddingTop()I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
+HSPLandroid/widget/TextView;->getExtendedPaddingBottom()I
+HSPLandroid/widget/TextView;->getExtendedPaddingTop()I
 HSPLandroid/widget/TextView;->getFilters()[Landroid/text/InputFilter;
 HSPLandroid/widget/TextView;->getFocusedRect(Landroid/graphics/Rect;)V
 HSPLandroid/widget/TextView;->getFreezesText()Z
@@ -20907,6 +21045,7 @@
 HSPLandroid/widget/TextView;->getHorizontalOffsetForDrawables()I
 HSPLandroid/widget/TextView;->getHorizontallyScrolling()Z
 HSPLandroid/widget/TextView;->getHyphenationFrequency()I
+HSPLandroid/widget/TextView;->getImeOptions()I
 HSPLandroid/widget/TextView;->getIncludeFontPadding()Z
 HSPLandroid/widget/TextView;->getInputMethodManager()Landroid/view/inputmethod/InputMethodManager;
 HSPLandroid/widget/TextView;->getInputType()I
@@ -20924,6 +21063,7 @@
 HSPLandroid/widget/TextView;->getMaxEms()I
 HSPLandroid/widget/TextView;->getMaxLines()I
 HSPLandroid/widget/TextView;->getMinEms()I
+HSPLandroid/widget/TextView;->getMinLines()I
 HSPLandroid/widget/TextView;->getMinWidth()I
 HSPLandroid/widget/TextView;->getOffsetAtCoordinate(IF)I
 HSPLandroid/widget/TextView;->getOffsetForPosition(FF)I
@@ -20951,20 +21091,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/graphics/Path;Landroid/graphics/Path;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/text/Layout;Landroid/text/DynamicLayout;]Landroid/widget/Editor;Landroid/widget/Editor;
-HSPLandroid/widget/TextView;->getVerticalOffset(Z)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Ljava/lang/CharSequence;missing_types
+HSPLandroid/widget/TextView;->getUpdatedHighlightPath()Landroid/graphics/Path;
+HSPLandroid/widget/TextView;->getVerticalOffset(Z)I
 HSPLandroid/widget/TextView;->handleBackInTextActionModeIfNeeded(Landroid/view/KeyEvent;)Z
 HSPLandroid/widget/TextView;->handleTextChanged(Ljava/lang/CharSequence;III)V
 HSPLandroid/widget/TextView;->hasGesturePreviewHighlight()Z
-HSPLandroid/widget/TextView;->hasOverlappingRendering()Z+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
+HSPLandroid/widget/TextView;->hasOverlappingRendering()Z
 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/Path;Landroid/graphics/Path;]Landroid/text/TextPaint;Landroid/text/TextPaint;
+HSPLandroid/widget/TextView;->invalidateCursorPath()V
 HSPLandroid/widget/TextView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/TextView;->invalidateRegion(IIZ)V
 HSPLandroid/widget/TextView;->isAnyPasswordInputType()Z
+HSPLandroid/widget/TextView;->isAutoHandwritingEnabled()Z+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->isAutoSizeEnabled()Z
 HSPLandroid/widget/TextView;->isAutofillable()Z
 HSPLandroid/widget/TextView;->isFallbackLineSpacingForStaticLayout()Z
@@ -20975,7 +21116,7 @@
 HSPLandroid/widget/TextView;->isMarqueeFadeEnabled()Z
 HSPLandroid/widget/TextView;->isMultilineInputType(I)Z
 HSPLandroid/widget/TextView;->isPasswordInputType(I)Z
-HSPLandroid/widget/TextView;->isPositionVisible(FF)Z+]Landroid/view/View;missing_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
+HSPLandroid/widget/TextView;->isPositionVisible(FF)Z
 HSPLandroid/widget/TextView;->isShowingHint()Z
 HSPLandroid/widget/TextView;->isSuggestionsEnabled()Z
 HSPLandroid/widget/TextView;->isTextEditable()Z
@@ -20983,20 +21124,20 @@
 HSPLandroid/widget/TextView;->isVisibleToAccessibility()Z
 HSPLandroid/widget/TextView;->jumpDrawablesToCurrentState()V
 HSPLandroid/widget/TextView;->length()I
-HSPLandroid/widget/TextView;->makeNewLayout(IILandroid/text/BoringLayout$Metrics;Landroid/text/BoringLayout$Metrics;IZ)V+]Landroid/widget/TextView;missing_types]Landroid/text/BoringLayout;Landroid/text/BoringLayout;]Landroid/text/Layout;Landroid/text/BoringLayout;]Landroid/widget/Editor;Landroid/widget/Editor;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout$Builder;
-HSPLandroid/widget/TextView;->makeSingleLayout(ILandroid/text/BoringLayout$Metrics;ILandroid/text/Layout$Alignment;ZLandroid/text/TextUtils$TruncateAt;Z)Landroid/text/Layout;+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;]Landroid/text/DynamicLayout$Builder;Landroid/text/DynamicLayout$Builder;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout$Builder;
-HSPLandroid/widget/TextView;->maybeUpdateHighlightPaths()V+]Ljava/util/List;Ljava/util/ArrayList;
-HSPLandroid/widget/TextView;->notifyContentCaptureTextChanged()V+]Landroid/view/contentcapture/ContentCaptureManager;Landroid/view/contentcapture/ContentCaptureManager;]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;]Landroid/widget/TextView;missing_types
+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;->maybeUpdateHighlightPaths()V
+HSPLandroid/widget/TextView;->notifyContentCaptureTextChanged()V
 HSPLandroid/widget/TextView;->notifyListeningManagersAfterTextChanged()V
 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+]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->onCreateDrawableState(I)[I
 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;missing_types]Landroid/text/TextPaint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;missing_types]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;
+HSPLandroid/widget/TextView;->onDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/TextView;->onEditorAction(I)V
 HSPLandroid/widget/TextView;->onEndBatchEdit()V
 HSPLandroid/widget/TextView;->onFocusChanged(ZILandroid/graphics/Rect;)V
@@ -21007,9 +21148,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;,Landroid/text/DynamicLayout;]Landroid/widget/TextView;missing_types]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannableString;
+HSPLandroid/widget/TextView;->onMeasure(II)V+]Landroid/text/Layout;Landroid/text/BoringLayout;
 HSPLandroid/widget/TextView;->onPreDraw()Z
-HSPLandroid/widget/TextView;->onProvideStructure(Landroid/view/ViewStructure;II)V+]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;
+HSPLandroid/widget/TextView;->onProvideStructure(Landroid/view/ViewStructure;II)V
 HSPLandroid/widget/TextView;->onResolveDrawables(I)V
 HSPLandroid/widget/TextView;->onRestoreInstanceState(Landroid/os/Parcelable;)V
 HSPLandroid/widget/TextView;->onRtlPropertiesChanged(I)V
@@ -21022,9 +21163,9 @@
 HSPLandroid/widget/TextView;->onVisibilityAggregated(Z)V
 HSPLandroid/widget/TextView;->onVisibilityChanged(Landroid/view/View;I)V
 HSPLandroid/widget/TextView;->onWindowFocusChanged(Z)V
-HSPLandroid/widget/TextView;->originalToTransformed(II)I+]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->originalToTransformed(II)I
 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
 HSPLandroid/widget/TextView;->registerForPreDraw()V
 HSPLandroid/widget/TextView;->removeAdjacentSuggestionSpans(I)V
 HSPLandroid/widget/TextView;->removeIntersectingNonAdjacentSpans(IILjava/lang/Class;)V
@@ -21037,15 +21178,15 @@
 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+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/TextWatcher;missing_types
+HSPLandroid/widget/TextView;->sendBeforeTextChanged(Ljava/lang/CharSequence;III)V
 HSPLandroid/widget/TextView;->sendOnTextChanged(Ljava/lang/CharSequence;III)V
 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+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/widget/TextView;missing_types]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;
-HSPLandroid/widget/TextView;->setCompoundDrawablesRelative(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V+]Landroid/widget/TextView$Drawables;Landroid/widget/TextView$Drawables;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;,Landroid/graphics/drawable/StateListDrawable;
+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;->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
@@ -21076,6 +21217,8 @@
 HSPLandroid/widget/TextView;->setKeyListenerOnly(Landroid/text/method/KeyListener;)V
 HSPLandroid/widget/TextView;->setLetterSpacing(F)V
 HSPLandroid/widget/TextView;->setLineHeight(I)V
+HSPLandroid/widget/TextView;->setLineHeight(IF)V+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/widget/TextView;Landroid/widget/TextView;
+HSPLandroid/widget/TextView;->setLineHeightPx(F)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/widget/TextView;Landroid/widget/TextView;
 HSPLandroid/widget/TextView;->setLineSpacing(FF)V
 HSPLandroid/widget/TextView;->setLines(I)V
 HSPLandroid/widget/TextView;->setLinkTextColor(Landroid/content/res/ColorStateList;)V
@@ -21091,7 +21234,7 @@
 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+]Landroid/text/TextPaint;Landroid/text/TextPaint;
+HSPLandroid/widget/TextView;->setRawTextSize(FZ)V
 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
@@ -21100,7 +21243,7 @@
 HSPLandroid/widget/TextView;->setText(I)V
 HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
 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/Editable$Factory;missing_types]Landroid/text/method/TransformationMethod;missing_types]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/text/InputFilter;missing_types]Landroid/widget/TextView;missing_types]Landroid/text/Spannable$Factory;Landroid/text/Spannable$Factory;]Landroid/text/Spanned;missing_types]Landroid/text/method/MovementMethod;Landroid/text/method/LinkMovementMethod;,Landroid/text/method/ArrowKeyMovementMethod;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;missing_types]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/Spannable;missing_types
+HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;ZI)V
 HSPLandroid/widget/TextView;->setTextAppearance(I)V
 HSPLandroid/widget/TextView;->setTextAppearance(Landroid/content/Context;I)V
 HSPLandroid/widget/TextView;->setTextColor(I)V
@@ -21111,14 +21254,13 @@
 HSPLandroid/widget/TextView;->setTextSize(IF)V
 HSPLandroid/widget/TextView;->setTextSizeInternal(IFZ)V
 HSPLandroid/widget/TextView;->setTransformationMethod(Landroid/text/method/TransformationMethod;)V
-HSPLandroid/widget/TextView;->setTransformationMethodInternal(Landroid/text/method/TransformationMethod;)V+]Landroid/text/method/TransformationMethod2;Landroid/text/method/AllCapsTransformationMethod;]Landroid/widget/TextView;missing_types]Landroid/text/Spannable;Landroid/text/SpannableStringBuilder;
-HSPLandroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;)V+]Landroid/text/TextPaint;Landroid/text/TextPaint;
-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;->setTypeface(Landroid/graphics/Typeface;)V
+HSPLandroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;I)V
 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+]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/text/Spanned;missing_types
+HSPLandroid/widget/TextView;->spanChange(Landroid/text/Spanned;Ljava/lang/Object;IIII)V
 HSPLandroid/widget/TextView;->startMarquee()V
 HSPLandroid/widget/TextView;->startStopMarquee(Z)V
 HSPLandroid/widget/TextView;->stopMarquee()V
@@ -21126,10 +21268,11 @@
 HSPLandroid/widget/TextView;->suggestedSizeFitsInSpace(ILandroid/graphics/RectF;)Z
 HSPLandroid/widget/TextView;->supportsAutoSizeText()Z
 HSPLandroid/widget/TextView;->textCanBeSelected()Z
+HSPLandroid/widget/TextView;->transformedToOriginal(II)I
 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/Editor;Landroid/widget/Editor;]Landroid/widget/TextView;missing_types]Ljava/lang/CharSequence;missing_types
+HSPLandroid/widget/TextView;->updateTextColors()V
 HSPLandroid/widget/TextView;->useDynamicLayout()Z
 HSPLandroid/widget/TextView;->validateAndSetAutoSizeTextTypeUniformConfiguration(FFF)V
 HSPLandroid/widget/TextView;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
@@ -21179,6 +21322,7 @@
 HSPLandroid/widget/Toolbar;->shouldCollapse()Z
 HSPLandroid/widget/ViewAnimator;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/ViewAnimator;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/widget/ViewAnimator;->getCurrentView()Landroid/view/View;+]Landroid/widget/ViewAnimator;Landroid/widget/ViewFlipper;
 HSPLandroid/widget/ViewAnimator;->initViewAnimator(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/ViewAnimator;->setAnimateFirstView(Z)V
 HSPLandroid/widget/ViewAnimator;->setDisplayedChild(I)V
@@ -21191,6 +21335,18 @@
 HSPLandroid/widget/inline/InlinePresentationSpec;-><clinit>()V
 HSPLandroid/widget/inline/InlinePresentationSpec;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/widget/inline/InlinePresentationSpec;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/window/BackProgressAnimator$1;->get(Landroid/window/BackProgressAnimator;)Ljava/lang/Float;
+HSPLandroid/window/BackProgressAnimator$1;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/window/BackProgressAnimator$1;->setValue(Landroid/window/BackProgressAnimator;F)V
+HSPLandroid/window/BackProgressAnimator$1;->setValue(Ljava/lang/Object;F)V
+HSPLandroid/window/BackProgressAnimator;->-$$Nest$mgetProgress(Landroid/window/BackProgressAnimator;)F
+HSPLandroid/window/BackProgressAnimator;->-$$Nest$msetProgress(Landroid/window/BackProgressAnimator;F)V
+HSPLandroid/window/BackProgressAnimator;->-$$Nest$mupdateProgressValue(Landroid/window/BackProgressAnimator;F)V
+HSPLandroid/window/BackProgressAnimator;->getProgress()F
+HSPLandroid/window/BackProgressAnimator;->isBackAnimationInProgress()Z
+HSPLandroid/window/BackProgressAnimator;->reset()V
+HSPLandroid/window/BackProgressAnimator;->setProgress(F)V
+HSPLandroid/window/BackProgressAnimator;->updateProgressValue(F)V
 HSPLandroid/window/ClientWindowFrames$1;-><init>()V
 HSPLandroid/window/ClientWindowFrames$1;->createFromParcel(Landroid/os/Parcel;)Landroid/window/ClientWindowFrames;
 HSPLandroid/window/ClientWindowFrames$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -21226,11 +21382,12 @@
 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$$ExternalSyntheticLambda0;-><init>(Landroid/window/OnBackInvokedCallback;)V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->clearCallbacksOnDispatcher()V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->registerOnBackInvokedCallback(ILandroid/window/OnBackInvokedCallback;)V
+HSPLandroid/window/ProxyOnBackInvokedDispatcher;->registerOnBackInvokedCallbackUnchecked(Landroid/window/OnBackInvokedCallback;I)V
+HSPLandroid/window/ProxyOnBackInvokedDispatcher;->registerSystemOnBackInvokedCallback(Landroid/window/OnBackInvokedCallback;)V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->setActualDispatcher(Landroid/window/OnBackInvokedDispatcher;)V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->transferCallbacksToDispatcher()V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->unregisterOnBackInvokedCallback(Landroid/window/OnBackInvokedCallback;)V
@@ -21244,6 +21401,7 @@
 HSPLandroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
 HSPLandroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda5;-><init>()V
 HSPLandroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
+HSPLandroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda6;-><init>(Landroid/window/SurfaceSyncGroup;)V
 HSPLandroid/window/SurfaceSyncGroup$2;-><init>(Landroid/window/SurfaceSyncGroup;Z)V
 HSPLandroid/window/SurfaceSyncGroup$2;->onTransactionReady(Landroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/window/SurfaceSyncGroup$ISurfaceSyncGroupImpl;->getSurfaceSyncGroup()Landroid/window/SurfaceSyncGroup;
@@ -21257,6 +21415,8 @@
 HSPLandroid/window/SurfaceSyncGroup;->add(Landroid/window/ISurfaceSyncGroup;ZLjava/lang/Runnable;)Z
 HSPLandroid/window/SurfaceSyncGroup;->addLocalSync(Landroid/window/ISurfaceSyncGroup;Z)Z
 HSPLandroid/window/SurfaceSyncGroup;->addSyncCompleteCallback(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)V
+HSPLandroid/window/SurfaceSyncGroup;->addTimeout()V+]Landroid/os/HandlerThread;Landroid/os/HandlerThread;]Landroid/os/Handler;Landroid/os/Handler;
+HSPLandroid/window/SurfaceSyncGroup;->addTransaction(Landroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/window/SurfaceSyncGroup;->checkIfSyncIsComplete()V
 HSPLandroid/window/SurfaceSyncGroup;->createTransactionReadyCallback(Z)Landroid/window/ITransactionReadyCallback;
 HSPLandroid/window/SurfaceSyncGroup;->getSurfaceSyncGroup(Landroid/window/ISurfaceSyncGroup;)Landroid/window/SurfaceSyncGroup;
@@ -21294,17 +21454,16 @@
 HSPLandroid/window/WindowMetricsController$$ExternalSyntheticLambda0;-><init>(Landroid/window/WindowMetricsController;Landroid/os/IBinder;Landroid/graphics/Rect;ZI)V
 HSPLandroid/window/WindowMetricsController$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
 HSPLandroid/window/WindowMetricsController;->$r8$lambda$cKRWFCVMf1_GLLOLAIyCbvvCDHM(Landroid/window/WindowMetricsController;Landroid/os/IBinder;Landroid/graphics/Rect;ZI)Landroid/view/WindowInsets;
-HSPLandroid/window/WindowMetricsController;-><clinit>()V
 HSPLandroid/window/WindowMetricsController;-><init>(Landroid/content/Context;)V
 HSPLandroid/window/WindowMetricsController;->getWindowInsetsFromServerForDisplay(ILandroid/os/IBinder;Landroid/graphics/Rect;ZI)Landroid/view/WindowInsets;
-HSPLandroid/window/WindowMetricsController;->getWindowMetricsInternal(Z)Landroid/view/WindowMetrics;+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;Landroid/window/WindowContext;,Landroid/app/ContextImpl;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
+HSPLandroid/window/WindowMetricsController;->getWindowMetricsInternal(Z)Landroid/view/WindowMetrics;
 HSPLandroid/window/WindowMetricsController;->lambda$getWindowMetricsInternal$0(Landroid/os/IBinder;Landroid/graphics/Rect;ZI)Landroid/view/WindowInsets;
+HSPLandroid/window/WindowOnBackInvokedDispatcher$$ExternalSyntheticLambda0;-><init>(Landroid/window/BackProgressAnimator;)V
+HSPLandroid/window/WindowOnBackInvokedDispatcher$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/window/WindowOnBackInvokedDispatcher$Checker;->-$$Nest$mgetContext(Landroid/window/WindowOnBackInvokedDispatcher$Checker;)Landroid/content/Context;
-HSPLandroid/window/WindowOnBackInvokedDispatcher$Checker;->-$$Nest$smisOnBackInvokedCallbackEnabled(Landroid/content/Context;)Z
 HSPLandroid/window/WindowOnBackInvokedDispatcher$Checker;-><init>(Landroid/content/Context;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher$Checker;->checkApplicationCallbackRegistration(ILandroid/window/OnBackInvokedCallback;)Z
 HSPLandroid/window/WindowOnBackInvokedDispatcher$Checker;->getContext()Landroid/content/Context;
-HSPLandroid/window/WindowOnBackInvokedDispatcher$Checker;->isOnBackInvokedCallbackEnabled(Landroid/content/Context;)Z
 HSPLandroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda0;-><init>(Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda1;->run()V
@@ -21328,36 +21487,34 @@
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->isOnBackInvokedCallbackEnabled(Landroid/content/Context;)Z
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->registerOnBackInvokedCallback(ILandroid/window/OnBackInvokedCallback;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->registerOnBackInvokedCallbackUnchecked(Landroid/window/OnBackInvokedCallback;I)V
+HSPLandroid/window/WindowOnBackInvokedDispatcher;->registerSystemOnBackInvokedCallback(Landroid/window/OnBackInvokedCallback;)V
+HSPLandroid/window/WindowOnBackInvokedDispatcher;->sendCancelledIfInProgress(Landroid/window/OnBackInvokedCallback;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->setTopOnBackInvokedCallback(Landroid/window/OnBackInvokedCallback;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->unregisterOnBackInvokedCallback(Landroid/window/OnBackInvokedCallback;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->updateContext(Landroid/content/Context;)V
 HSPLandroid/window/WindowOrganizer;-><init>()V
-HSPLandroid/window/WindowTokenClient$$ExternalSyntheticLambda1;-><init>(Landroid/window/WindowTokenClient;)V
-HSPLandroid/window/WindowTokenClient$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/window/WindowTokenClient;-><clinit>()V
 HSPLandroid/window/WindowTokenClient;-><init>()V
 HSPLandroid/window/WindowTokenClient;->attachContext(Landroid/content/Context;)V
-HSPLandroid/window/WindowTokenClient;->attachToDisplayArea(IILandroid/os/Bundle;)Z
-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
 HSPLcom/android/i18n/phonenumbers/CountryCodeToRegionCodeMap;->getCountryCodeToRegionCodeMap()Ljava/util/Map;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->buildNationalNumberForParsing(Ljava/lang/String;Ljava/lang/StringBuilder;)V
 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;
+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;]Ljava/util/List;Ljava/util/ArrayList;]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;->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;
+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/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;
-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;
+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;]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;->getMetadataForRegion(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/metadata/source/MetadataSource;Lcom/android/i18n/phonenumbers/metadata/source/MetadataSourceImpl;
 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;
@@ -21370,26 +21527,26 @@
 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;->normalize(Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;
+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/String;Ljava/lang/String;]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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;
 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;
+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;
 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/String;Ljava/lang/String;]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;->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;]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;
@@ -21511,8 +21668,8 @@
 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+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
-HSPLcom/android/i18n/timezone/ZoneInfoData;->getOffsetsByUtcTime(J[I)I
+HSPLcom/android/i18n/timezone/ZoneInfoData;->getOffset(J)I
+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+][J[J
 HSPLcom/android/i18n/timezone/ZoneInfoData;->hashCode()I
@@ -21548,30 +21705,30 @@
 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;+]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;->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;->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+]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;->setPosition(Ljava/nio/ByteBuffer;)V
+HSPLcom/android/icu/charset/CharsetDecoderICU;->setPosition(Ljava/nio/CharBuffer;)V
 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;+]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+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
+HSPLcom/android/icu/charset/CharsetEncoderICU;->encodeLoop(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;
+HSPLcom/android/icu/charset/CharsetEncoderICU;->getArray(Ljava/nio/ByteBuffer;)I
+HSPLcom/android/icu/charset/CharsetEncoderICU;->getArray(Ljava/nio/CharBuffer;)I
 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+]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;->setPosition(Ljava/nio/ByteBuffer;)V
+HSPLcom/android/icu/charset/CharsetEncoderICU;->setPosition(Ljava/nio/CharBuffer;)V
 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
@@ -21625,7 +21782,6 @@
 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/R$dimen;-><clinit>()V
 HSPLcom/android/internal/app/AlertController;-><init>(Landroid/content/Context;Landroid/content/DialogInterface;Landroid/view/Window;)V
 HSPLcom/android/internal/app/AlertController;->create(Landroid/content/Context;Landroid/content/DialogInterface;Landroid/view/Window;)Lcom/android/internal/app/AlertController;
 HSPLcom/android/internal/app/AlertController;->installContent()V
@@ -21708,9 +21864,30 @@
 HSPLcom/android/internal/content/ReferrerIntent$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLcom/android/internal/display/BrightnessSynchronizer;-><clinit>()V
 HSPLcom/android/internal/display/BrightnessSynchronizer;->floatEquals(FF)Z
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->doAnimationFrame(J)Z+]Lcom/android/internal/dynamicanimation/animation/DynamicAnimation;Lcom/android/internal/dynamicanimation/animation/SpringAnimation;
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->endAnimationInternal(Z)V+]Lcom/android/internal/dynamicanimation/animation/DynamicAnimation;Lcom/android/internal/dynamicanimation/animation/SpringAnimation;]Landroid/animation/AnimationHandler;Landroid/animation/AnimationHandler;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/internal/dynamicanimation/animation/DynamicAnimation$OnAnimationEndListener;Landroid/window/BackProgressAnimator$2;
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->getAnimationHandler()Landroid/animation/AnimationHandler;
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->getPropertyValue()F
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->getValueThreshold()F
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->isCurrentThread()Z
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->isRunning()Z
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->removeNullEntries(Ljava/util/ArrayList;)V
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->setPropertyValue(F)V
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->start()V
+HSPLcom/android/internal/dynamicanimation/animation/DynamicAnimation;->startAnimationInternal()V
+HSPLcom/android/internal/dynamicanimation/animation/SpringAnimation;->animateToFinalPosition(F)V
+HSPLcom/android/internal/dynamicanimation/animation/SpringAnimation;->canSkipToEnd()Z
+HSPLcom/android/internal/dynamicanimation/animation/SpringAnimation;->sanityCheck()V
+HSPLcom/android/internal/dynamicanimation/animation/SpringAnimation;->skipToEnd()V
+HSPLcom/android/internal/dynamicanimation/animation/SpringAnimation;->start()V
+HSPLcom/android/internal/dynamicanimation/animation/SpringAnimation;->updateValueAndVelocity(J)Z+]Lcom/android/internal/dynamicanimation/animation/SpringAnimation;Lcom/android/internal/dynamicanimation/animation/SpringAnimation;]Lcom/android/internal/dynamicanimation/animation/SpringForce;Lcom/android/internal/dynamicanimation/animation/SpringForce;
+HSPLcom/android/internal/dynamicanimation/animation/SpringForce;->getFinalPosition()F
+HSPLcom/android/internal/dynamicanimation/animation/SpringForce;->setFinalPosition(F)Lcom/android/internal/dynamicanimation/animation/SpringForce;
+HSPLcom/android/internal/dynamicanimation/animation/SpringForce;->setValueThreshold(D)V
 HSPLcom/android/internal/graphics/ColorUtils;->HSLToColor([F)I
 HSPLcom/android/internal/graphics/ColorUtils;->RGBToHSL(III[F)V
 HSPLcom/android/internal/graphics/ColorUtils;->colorToHSL(I[F)V
+HSPLcom/android/internal/graphics/ColorUtils;->colorToXYZ(I[D)V
 HSPLcom/android/internal/graphics/SfVsyncFrameCallbackProvider;-><init>()V
 HSPLcom/android/internal/graphics/SfVsyncFrameCallbackProvider;->getFrameTime()J
 HSPLcom/android/internal/graphics/SfVsyncFrameCallbackProvider;->postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
@@ -21760,7 +21937,7 @@
 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;->getMainHandler()Landroid/os/Handler;
@@ -21779,10 +21956,13 @@
 HSPLcom/android/internal/inputmethod/EditableInputConnection;->setImeConsumesInput(Z)Z
 HSPLcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;->onRequestHide(Ljava/lang/String;III)Landroid/view/inputmethod/ImeTracker$Token;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Lcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;Lcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;->onFailed(Landroid/view/inputmethod/ImeTracker$Token;I)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Lcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;Lcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLcom/android/internal/inputmethod/IImeTracker$Stub$Proxy;->onRequestHide(Ljava/lang/String;III)Landroid/view/inputmethod/ImeTracker$Token;
 HSPLcom/android/internal/inputmethod/IImeTracker$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/inputmethod/IImeTracker;
 HSPLcom/android/internal/inputmethod/IInputMethodClient$Stub;->asBinder()Landroid/os/IBinder;
+HSPLcom/android/internal/inputmethod/IInputMethodClient$Stub;->getDefaultTransactionName(I)Ljava/lang/String;
 HSPLcom/android/internal/inputmethod/IInputMethodClient$Stub;->getMaxTransactionId()I
+HSPLcom/android/internal/inputmethod/IInputMethodClient$Stub;->getTransactionName(I)Ljava/lang/String;
 HSPLcom/android/internal/inputmethod/IInputMethodClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLcom/android/internal/inputmethod/IInputMethodSession$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLcom/android/internal/inputmethod/IInputMethodSession$Stub$Proxy;->asBinder()Landroid/os/IBinder;
@@ -21808,7 +21988,6 @@
 HSPLcom/android/internal/inputmethod/InputBindResult;-><init>(Landroid/os/Parcel;)V
 HSPLcom/android/internal/inputmethod/InputBindResult;-><init>(Landroid/os/Parcel;Lcom/android/internal/inputmethod/InputBindResult-IA;)V
 HSPLcom/android/internal/inputmethod/InputBindResult;->error(I)Lcom/android/internal/inputmethod/InputBindResult;
-HSPLcom/android/internal/inputmethod/InputBindResult;->getVirtualDisplayToScreenMatrix()Landroid/graphics/Matrix;
 HSPLcom/android/internal/inputmethod/InputConnectionCommandHeader$1;-><init>()V
 HSPLcom/android/internal/inputmethod/InputConnectionCommandHeader$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/inputmethod/InputConnectionCommandHeader;
 HSPLcom/android/internal/inputmethod/InputConnectionCommandHeader$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -21816,16 +21995,27 @@
 HSPLcom/android/internal/inputmethod/InputConnectionCommandHeader;-><init>(I)V
 HSPLcom/android/internal/inputmethod/InputMethodDebug;->softInputDisplayReasonToString(I)Ljava/lang/String;
 HSPLcom/android/internal/inputmethod/SubtypeLocaleUtils;->constructLocaleFromString(Ljava/lang/String;)Ljava/util/Locale;
+HSPLcom/android/internal/jank/EventLogTags;->writeJankCujEventsEndRequest(IJJJ)V
 HSPLcom/android/internal/jank/FrameTracker$FrameMetricsWrapper;-><init>()V
 HSPLcom/android/internal/jank/FrameTracker$FrameMetricsWrapper;->getMetric(I)J
 HSPLcom/android/internal/jank/FrameTracker$FrameMetricsWrapper;->getTiming()[J
 HSPLcom/android/internal/jank/FrameTracker$ThreadedRendererWrapper;-><init>(Landroid/view/ThreadedRenderer;)V
 HSPLcom/android/internal/jank/FrameTracker$ThreadedRendererWrapper;->addObserver(Landroid/graphics/HardwareRendererObserver;)V
 HSPLcom/android/internal/jank/FrameTracker$ThreadedRendererWrapper;->removeObserver(Landroid/graphics/HardwareRendererObserver;)V
+HSPLcom/android/internal/jank/FrameTracker;-><init>(Lcom/android/internal/jank/InteractionJankMonitor;Lcom/android/internal/jank/InteractionJankMonitor$Session;Landroid/os/Handler;Lcom/android/internal/jank/FrameTracker$ThreadedRendererWrapper;Lcom/android/internal/jank/FrameTracker$ViewRootWrapper;Lcom/android/internal/jank/FrameTracker$SurfaceControlWrapper;Lcom/android/internal/jank/FrameTracker$ChoreographerWrapper;Lcom/android/internal/jank/FrameTracker$FrameMetricsWrapper;Lcom/android/internal/jank/FrameTracker$StatsLogWrapper;IILcom/android/internal/jank/FrameTracker$FrameTrackerListener;Lcom/android/internal/jank/InteractionJankMonitor$Configuration;)V
 HSPLcom/android/internal/jank/FrameTracker;->begin()V
+HSPLcom/android/internal/jank/FrameTracker;->beginInternal()V
+HSPLcom/android/internal/jank/FrameTracker;->end(I)Z
+HSPLcom/android/internal/jank/FrameTracker;->finish()V+]Landroid/os/Handler;Landroid/app/ActivityThread$H;,Landroid/view/ViewRootImpl$ViewRootHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/jank/FrameTracker$StatsLogWrapper;Lcom/android/internal/jank/FrameTracker$StatsLogWrapper;]Lcom/android/internal/jank/FrameTracker;Lcom/android/internal/jank/FrameTracker;]Lcom/android/internal/jank/InteractionJankMonitor$Session;Lcom/android/internal/jank/InteractionJankMonitor$Session;
+HSPLcom/android/internal/jank/FrameTracker;->getHandler()Landroid/os/Handler;
 HSPLcom/android/internal/jank/FrameTracker;->onFrameMetricsAvailable(I)V
 HSPLcom/android/internal/jank/FrameTracker;->triggerPerfetto()V
 HSPLcom/android/internal/jank/InteractionJankMonitor$$ExternalSyntheticLambda5;-><init>(Lcom/android/internal/jank/InteractionJankMonitor$TimeFunction;JJJ)V
+HSPLcom/android/internal/jank/InteractionJankMonitor$$ExternalSyntheticLambda5;->run()V
+HSPLcom/android/internal/jank/InteractionJankMonitor$$ExternalSyntheticLambda9;->invoke(JJJ)V
+HSPLcom/android/internal/jank/InteractionJankMonitor$Configuration$Builder;-><init>(I)V
+HSPLcom/android/internal/jank/InteractionJankMonitor$Configuration$Builder;->build()Lcom/android/internal/jank/InteractionJankMonitor$Configuration;
+HSPLcom/android/internal/jank/InteractionJankMonitor$Configuration;-><init>(ILandroid/view/View;Ljava/lang/String;JZLandroid/content/Context;Landroid/view/SurfaceControl;Z)V
 HSPLcom/android/internal/jank/InteractionJankMonitor$InstanceHolder;-><clinit>()V
 HSPLcom/android/internal/jank/InteractionJankMonitor$Session;->getName()Ljava/lang/String;
 HSPLcom/android/internal/jank/InteractionJankMonitor$Session;->getStatsdInteractionType()I
@@ -21833,17 +22023,22 @@
 HSPLcom/android/internal/jank/InteractionJankMonitor;->-$$Nest$sfgetDEFAULT_WORKER_NAME()Ljava/lang/String;
 HSPLcom/android/internal/jank/InteractionJankMonitor;-><clinit>()V
 HSPLcom/android/internal/jank/InteractionJankMonitor;-><init>(Landroid/os/HandlerThread;)V
+HSPLcom/android/internal/jank/InteractionJankMonitor;->begin(Lcom/android/internal/jank/InteractionJankMonitor$Configuration$Builder;)Z
+HSPLcom/android/internal/jank/InteractionJankMonitor;->beginInternal(Lcom/android/internal/jank/InteractionJankMonitor$Configuration;)Z
 HSPLcom/android/internal/jank/InteractionJankMonitor;->cancel(I)Z
+HSPLcom/android/internal/jank/InteractionJankMonitor;->createFrameTracker(Lcom/android/internal/jank/InteractionJankMonitor$Configuration;Lcom/android/internal/jank/InteractionJankMonitor$Session;)Lcom/android/internal/jank/FrameTracker;
 HSPLcom/android/internal/jank/InteractionJankMonitor;->end(I)Z
 HSPLcom/android/internal/jank/InteractionJankMonitor;->getInstance()Lcom/android/internal/jank/InteractionJankMonitor;
 HSPLcom/android/internal/jank/InteractionJankMonitor;->getTracker(I)Lcom/android/internal/jank/FrameTracker;
+HSPLcom/android/internal/jank/InteractionJankMonitor;->lambda$end$6(IJJJ)V
+HSPLcom/android/internal/jank/InteractionJankMonitor;->lambda$postEventLogToWorkerThread$11(Lcom/android/internal/jank/InteractionJankMonitor$TimeFunction;JJJ)V
 HSPLcom/android/internal/jank/InteractionJankMonitor;->postEventLogToWorkerThread(Lcom/android/internal/jank/InteractionJankMonitor$TimeFunction;)V
 HSPLcom/android/internal/listeners/ListenerExecutor$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Object;Ljava/util/function/Supplier;Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;Lcom/android/internal/listeners/ListenerExecutor$FailureCallback;)V
 HSPLcom/android/internal/listeners/ListenerExecutor$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/internal/listeners/ListenerExecutor$ListenerOperation;->onComplete(Z)V
 HSPLcom/android/internal/listeners/ListenerExecutor$ListenerOperation;->onPostExecute(Z)V
 HSPLcom/android/internal/listeners/ListenerExecutor$ListenerOperation;->onPreExecute()V
-HSPLcom/android/internal/listeners/ListenerExecutor;->executeSafely(Ljava/util/concurrent/Executor;Ljava/util/function/Supplier;Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;)V
+HSPLcom/android/internal/listeners/ListenerExecutor;->executeSafely(Ljava/util/concurrent/Executor;Ljava/util/function/Supplier;Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;)V+]Lcom/android/internal/listeners/ListenerExecutor;Landroid/location/LocationManager$LocationListenerTransport;
 HSPLcom/android/internal/listeners/ListenerExecutor;->executeSafely(Ljava/util/concurrent/Executor;Ljava/util/function/Supplier;Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;Lcom/android/internal/listeners/ListenerExecutor$FailureCallback;)V+]Ljava/util/concurrent/Executor;missing_types]Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;Landroid/location/LocationManager$LocationListenerTransport$1;]Ljava/util/function/Supplier;Landroid/location/LocationManager$LocationListenerTransport$$ExternalSyntheticLambda2;
 HSPLcom/android/internal/listeners/ListenerExecutor;->lambda$executeSafely$0(Ljava/lang/Object;Ljava/util/function/Supplier;Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;Lcom/android/internal/listeners/ListenerExecutor$FailureCallback;)V
 HSPLcom/android/internal/logging/AndroidConfig;-><init>()V
@@ -21984,7 +22179,7 @@
 HSPLcom/android/internal/os/RuntimeInit;->setApplicationObject(Landroid/os/IBinder;)V
 HSPLcom/android/internal/os/RuntimeInit;->wtf(Ljava/lang/String;Ljava/lang/Throwable;Z)V
 HSPLcom/android/internal/os/SafeZipPathValidatorCallback;-><init>()V
-HSPLcom/android/internal/os/SafeZipPathValidatorCallback;->onZipEntryAccess(Ljava/lang/String;)V
+HSPLcom/android/internal/os/SafeZipPathValidatorCallback;->onZipEntryAccess(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/internal/os/SomeArgs;-><init>()V
 HSPLcom/android/internal/os/SomeArgs;->clear()V
 HSPLcom/android/internal/os/SomeArgs;->obtain()Lcom/android/internal/os/SomeArgs;
@@ -22050,9 +22245,6 @@
 HSPLcom/android/internal/os/ZygoteInit;->posixCapabilitiesAsBits([I)J
 HSPLcom/android/internal/os/ZygoteInit;->preload(Landroid/util/TimingsTraceLog;)V
 HSPLcom/android/internal/os/ZygoteInit;->preloadClasses()V
-HSPLcom/android/internal/os/ZygoteInit;->preloadColorStateLists(Landroid/content/res/TypedArray;)I
-HSPLcom/android/internal/os/ZygoteInit;->preloadDrawables(Landroid/content/res/TypedArray;)I
-HSPLcom/android/internal/os/ZygoteInit;->preloadResources()V
 HSPLcom/android/internal/os/ZygoteInit;->preloadSharedLibraries()V
 HSPLcom/android/internal/os/ZygoteInit;->preloadTextResources()V
 HSPLcom/android/internal/os/ZygoteInit;->setApiDenylistExemptions([Ljava/lang/String;)V
@@ -22146,9 +22338,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;IIIZZIZZI)V+]Lcom/android/internal/policy/PhoneWindow;Lcom/android/internal/policy/PhoneWindow;]Landroid/view/View;Landroid/view/View;]Lcom/android/internal/policy/DecorView$ColorViewAttributes;Lcom/android/internal/policy/DecorView$ColorViewAttributes;
+HSPLcom/android/internal/policy/DecorView;->updateColorViewInt(Lcom/android/internal/policy/DecorView$ColorViewState;IIIZZIZZI)V
 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;
 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
@@ -22175,6 +22367,7 @@
 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
+HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;-><init>()V
 HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState;-><init>(I)V
 HSPLcom/android/internal/policy/PhoneWindow$PanelFeatureState;->onSaveInstanceState()Landroid/os/Parcelable;
@@ -22303,7 +22496,6 @@
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getDefaultVoiceSubId()I
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getPhoneId(I)I
 HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->getSlotIndex(I)I
-HSPLcom/android/internal/telephony/ISub$Stub$Proxy;->isSubscriptionManagerServiceEnabled()Z
 HSPLcom/android/internal/telephony/ISub$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ISub;
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->asBinder()Landroid/os/IBinder;
@@ -22319,7 +22511,7 @@
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getNetworkCountryIsoForPhone(I)Ljava/lang/String;
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getNetworkTypeForSubscriber(ILjava/lang/String;Ljava/lang/String;)I
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getSignalStrength(I)Landroid/telephony/SignalStrength;
-HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getSimStateForSlotIndex(I)I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Lcom/android/internal/telephony/ITelephony$Stub$Proxy;Lcom/android/internal/telephony/ITelephony$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getSimStateForSlotIndex(I)I
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getSubscriptionCarrierId(I)I
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getSubscriptionSpecificCarrierId(I)I
 HSPLcom/android/internal/telephony/ITelephony$Stub$Proxy;->getVoiceNetworkTypeForSubscriber(ILjava/lang/String;Ljava/lang/String;)I
@@ -22338,7 +22530,7 @@
 HSPLcom/android/internal/telephony/SmsApplication;->getApplicationCollectionInternal(Landroid/content/Context;I)Ljava/util/Collection;
 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;ZLandroid/os/UserHandle;)Landroid/content/ComponentName;+]Landroid/os/UserHandle;Landroid/os/UserHandle;
+HSPLcom/android/internal/telephony/SmsApplication;->getDefaultSmsApplicationAsUser(Landroid/content/Context;ZLandroid/os/UserHandle;)Landroid/content/ComponentName;
 HSPLcom/android/internal/telephony/SmsApplication;->getDefaultSmsPackage(Landroid/content/Context;I)Ljava/lang/String;
 HSPLcom/android/internal/telephony/SmsApplication;->tryFixExclusiveSmsAppops(Landroid/content/Context;Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Z)Z
 HSPLcom/android/internal/telephony/TelephonyPermissions;->checkCallingOrSelfReadDeviceIdentifiers(Landroid/content/Context;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
@@ -22364,7 +22556,7 @@
 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
@@ -22386,7 +22578,7 @@
 HSPLcom/android/internal/util/ArrayUtils;->deepToString(Ljava/lang/Object;)Ljava/lang/String;
 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;+]Ljava/lang/Object;megamorphic_types]Ljava/lang/Class;Ljava/lang/Class;
+HSPLcom/android/internal/util/ArrayUtils;->emptyArray(Ljava/lang/Class;)[Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->emptyIfNull([Ljava/lang/Object;Ljava/lang/Class;)[Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->filter([Ljava/lang/Object;Ljava/util/function/IntFunction;Ljava/util/function/Predicate;)[Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->getOrNull([Ljava/lang/Object;I)Ljava/lang/Object;
@@ -22397,11 +22589,11 @@
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedArray(Ljava/lang/Class;I)[Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedBooleanArray(I)[Z
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedByteArray(I)[B
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedCharArray(I)[C+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
+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;+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedObjectArray(I)[Ljava/lang/Object;
 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
@@ -22419,6 +22611,8 @@
 HSPLcom/android/internal/util/CollectionUtils;->size(Ljava/util/Collection;)I
 HSPLcom/android/internal/util/CollectionUtils;->size(Ljava/util/Map;)I
 HSPLcom/android/internal/util/ConcurrentUtils$DirectExecutor;->execute(Ljava/lang/Runnable;)V
+HSPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->RGBToXYZ(III[D)V
+HSPLcom/android/internal/util/ContrastColorUtil$ColorUtilsFromCompat;->getTempDouble3Array()[D+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLcom/android/internal/util/ExponentiallyBucketedHistogram;-><init>(I)V
 HSPLcom/android/internal/util/ExponentiallyBucketedHistogram;->add(I)V
 HSPLcom/android/internal/util/ExponentiallyBucketedHistogram;->log(Ljava/lang/String;Ljava/lang/CharSequence;)V
@@ -22434,7 +22628,7 @@
 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;->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
@@ -22442,18 +22636,18 @@
 HSPLcom/android/internal/util/FastPrintWriter;->print(Ljava/lang/String;)V
 HSPLcom/android/internal/util/FastPrintWriter;->println()V
 HSPLcom/android/internal/util/FastPrintWriter;->write(I)V
-HSPLcom/android/internal/util/FastPrintWriter;->write(Ljava/lang/String;)V
+HSPLcom/android/internal/util/FastPrintWriter;->write(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/internal/util/FastPrintWriter;->write([CII)V
 HSPLcom/android/internal/util/FastXmlSerializer;-><init>()V
 HSPLcom/android/internal/util/FastXmlSerializer;-><init>(I)V
-HSPLcom/android/internal/util/FastXmlSerializer;->append(C)V+]Lcom/android/internal/util/FastXmlSerializer;Lcom/android/internal/util/FastXmlSerializer;
-HSPLcom/android/internal/util/FastXmlSerializer;->append(Ljava/lang/String;)V
+HSPLcom/android/internal/util/FastXmlSerializer;->append(C)V
+HSPLcom/android/internal/util/FastXmlSerializer;->append(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/internal/util/FastXmlSerializer;->append(Ljava/lang/String;II)V+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/internal/util/FastXmlSerializer;Lcom/android/internal/util/FastXmlSerializer;
-HSPLcom/android/internal/util/FastXmlSerializer;->appendIndent(I)V
+HSPLcom/android/internal/util/FastXmlSerializer;->appendIndent(I)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/internal/util/FastXmlSerializer;->attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
 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;->escapeAndAppendString(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/internal/util/FastXmlSerializer;->flush()V
 HSPLcom/android/internal/util/FastXmlSerializer;->flushBytes()V
 HSPLcom/android/internal/util/FastXmlSerializer;->setFeature(Ljava/lang/String;Z)V
@@ -22470,7 +22664,7 @@
 HSPLcom/android/internal/util/FrameworkStatsLog;->write(ILjava/lang/String;IIF)V
 HSPLcom/android/internal/util/GrowingArrayUtils;->append([III)[I
 HSPLcom/android/internal/util/GrowingArrayUtils;->append([JIJ)[J
-HSPLcom/android/internal/util/GrowingArrayUtils;->append([Ljava/lang/Object;ILjava/lang/Object;)[Ljava/lang/Object;
+HSPLcom/android/internal/util/GrowingArrayUtils;->append([Ljava/lang/Object;ILjava/lang/Object;)[Ljava/lang/Object;+]Ljava/lang/Object;[Ljava/lang/Object;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLcom/android/internal/util/GrowingArrayUtils;->append([ZIZ)[Z
 HSPLcom/android/internal/util/GrowingArrayUtils;->growSize(I)I
 HSPLcom/android/internal/util/GrowingArrayUtils;->insert([IIII)[I
@@ -22484,25 +22678,35 @@
 HSPLcom/android/internal/util/IntPair;->of(II)J
 HSPLcom/android/internal/util/IntPair;->second(J)I
 HSPLcom/android/internal/util/LatencyTracker$$ExternalSyntheticLambda0;-><init>(Lcom/android/internal/util/LatencyTracker;I)V
-HSPLcom/android/internal/util/LatencyTracker$Session;-><init>(ILjava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLcom/android/internal/util/LatencyTracker$Session;->begin(Ljava/lang/Runnable;)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/util/concurrent/TimeUnit;Ljava/util/concurrent/TimeUnit;]Lcom/android/internal/util/LatencyTracker$Session;Lcom/android/internal/util/LatencyTracker$Session;
+HSPLcom/android/internal/util/LatencyTracker$$ExternalSyntheticLambda1;-><init>(Lcom/android/internal/util/LatencyTracker;Landroid/content/Context;)V
+HSPLcom/android/internal/util/LatencyTracker$$ExternalSyntheticLambda1;->run()V
+HSPLcom/android/internal/util/LatencyTracker$SLatencyTrackerHolder;->-$$Nest$sfgetsLatencyTracker()Lcom/android/internal/util/LatencyTracker;
+HSPLcom/android/internal/util/LatencyTracker$SLatencyTrackerHolder;-><clinit>()V
+HSPLcom/android/internal/util/LatencyTracker$Session;-><init>(ILjava/lang/String;)V
+HSPLcom/android/internal/util/LatencyTracker$Session;->begin(Ljava/lang/Runnable;)V
 HSPLcom/android/internal/util/LatencyTracker$Session;->traceName()Ljava/lang/String;
+HSPLcom/android/internal/util/LatencyTracker;->$r8$lambda$uPhaBjaIKsSqJgZ3Mw-LznEJiBg(Lcom/android/internal/util/LatencyTracker;Landroid/content/Context;)V
 HSPLcom/android/internal/util/LatencyTracker;->-$$Nest$smgetTraceNameOfAction(ILjava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/util/LatencyTracker;-><init>()V
 HSPLcom/android/internal/util/LatencyTracker;->getInstance(Landroid/content/Context;)Lcom/android/internal/util/LatencyTracker;
 HSPLcom/android/internal/util/LatencyTracker;->getNameOfAction(I)Ljava/lang/String;
-HSPLcom/android/internal/util/LatencyTracker;->getTraceNameOfAction(ILjava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/internal/util/LatencyTracker;->getTraceNameOfAction(ILjava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/util/LatencyTracker;->isEnabled()Z
+HSPLcom/android/internal/util/LatencyTracker;->isEnabled(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/internal/util/LatencyTracker;->lambda$startListeningForLatencyTrackerConfigChanges$0(Landroid/content/Context;)V
 HSPLcom/android/internal/util/LatencyTracker;->logAction(II)V
+HSPLcom/android/internal/util/LatencyTracker;->onActionCancel(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/internal/util/LatencyTracker;->onActionEnd(I)V
-HSPLcom/android/internal/util/LatencyTracker;->onActionStart(ILjava/lang/String;)V+]Lcom/android/internal/util/LatencyTracker;Lcom/android/internal/util/LatencyTracker;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/util/LatencyTracker$Session;Lcom/android/internal/util/LatencyTracker$Session;
+HSPLcom/android/internal/util/LatencyTracker;->onActionStart(ILjava/lang/String;)V
+HSPLcom/android/internal/util/LatencyTracker;->onDeviceConfigPropertiesUpdated(Landroid/util/SparseArray;)V
+HSPLcom/android/internal/util/LatencyTracker;->startListeningForLatencyTrackerConfigChanges()V
 HSPLcom/android/internal/util/LatencyTracker;->updateProperties(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/internal/util/LineBreakBufferedWriter;-><init>(Ljava/io/Writer;I)V
 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+]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;->println()V
+HSPLcom/android/internal/util/LineBreakBufferedWriter;->write(Ljava/lang/String;II)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/internal/util/LineBreakBufferedWriter;->writeBuffer(I)V
 HSPLcom/android/internal/util/MemInfoReader;-><init>()V
 HSPLcom/android/internal/util/MemInfoReader;->getTotalSize()J
@@ -22528,13 +22732,14 @@
 HSPLcom/android/internal/util/Preconditions;->checkArgumentInRange(FFFLjava/lang/String;)F
 HSPLcom/android/internal/util/Preconditions;->checkArgumentInRange(IIILjava/lang/String;)I
 HSPLcom/android/internal/util/Preconditions;->checkArgumentInRange(JJJLjava/lang/String;)J
+HSPLcom/android/internal/util/Preconditions;->checkArgumentNonNegative(FLjava/lang/String;)F
 HSPLcom/android/internal/util/Preconditions;->checkArgumentNonnegative(I)I
 HSPLcom/android/internal/util/Preconditions;->checkArgumentNonnegative(ILjava/lang/String;)I
 HSPLcom/android/internal/util/Preconditions;->checkArgumentNonnegative(J)J
 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;
 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;
@@ -22598,7 +22803,7 @@
 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;+]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/XmlSerializerWrapper;->text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
 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
@@ -22620,25 +22825,25 @@
 HSPLcom/android/internal/util/XmlUtils;->readLongAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;J)J
 HSPLcom/android/internal/util/XmlUtils;->readMapXml(Ljava/io/InputStream;)Ljava/util/HashMap;
 HSPLcom/android/internal/util/XmlUtils;->readStringAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/internal/util/XmlUtils;->readThisMapXml(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;)Ljava/util/HashMap;
-HSPLcom/android/internal/util/XmlUtils;->readThisPrimitiveValueXml(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;)Ljava/lang/Object;
+HSPLcom/android/internal/util/XmlUtils;->readThisMapXml(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;)Ljava/util/HashMap;+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
+HSPLcom/android/internal/util/XmlUtils;->readThisPrimitiveValueXml(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;)Ljava/lang/Object;+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
 HSPLcom/android/internal/util/XmlUtils;->readThisSetXml(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;Z)Ljava/util/HashSet;
-HSPLcom/android/internal/util/XmlUtils;->readThisValueXml(Lcom/android/modules/utils/TypedXmlPullParser;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;Z)Ljava/lang/Object;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
+HSPLcom/android/internal/util/XmlUtils;->readThisValueXml(Lcom/android/modules/utils/TypedXmlPullParser;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;Z)Ljava/lang/Object;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
 HSPLcom/android/internal/util/XmlUtils;->readValueXml(Lcom/android/modules/utils/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;Lcom/android/modules/utils/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;Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V+]Ljava/util/Map;Ljava/util/HashMap;
 HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/io/OutputStream;)V
 HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/lang/String;Lcom/android/modules/utils/TypedXmlSerializer;)V
 HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/lang/String;Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V
 HSPLcom/android/internal/util/XmlUtils;->writeSetXml(Ljava/util/Set;Ljava/lang/String;Lcom/android/modules/utils/TypedXmlSerializer;)V
 HSPLcom/android/internal/util/XmlUtils;->writeValueXml(Ljava/lang/Object;Ljava/lang/String;Lcom/android/modules/utils/TypedXmlSerializer;)V
 HSPLcom/android/internal/util/XmlUtils;->writeValueXml(Ljava/lang/Object;Ljava/lang/String;Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Ljava/lang/Object;Ljava/lang/String;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/lang/Float;Ljava/lang/Float;
-HSPLcom/android/internal/util/function/pooled/OmniFunction;->run()V
+HSPLcom/android/internal/util/function/pooled/OmniFunction;->run()V+]Lcom/android/internal/util/function/pooled/OmniFunction;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
 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/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/BiConsumer;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(Ljava/util/function/Consumer;Ljava/lang/Object;)Landroid/os/Message;
 HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainRunnable(Lcom/android/internal/util/function/TriConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledRunnable;
 HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainRunnable(Ljava/util/function/BiConsumer;Ljava/lang/Object;Ljava/lang/Object;)Lcom/android/internal/util/function/pooled/PooledRunnable;
@@ -22646,21 +22851,21 @@
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;->decodeReturnType(I)I
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl$LambdaType;->encode(II)I
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->-$$Nest$smunmask(II)I
-HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->acquire(Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;)Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
-HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->acquire(Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;Ljava/lang/Object;IIILjava/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;)Lcom/android/internal/util/function/pooled/PooledLambda;
+HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->acquire(Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;)Lcom/android/internal/util/function/pooled/PooledLambdaImpl;+]Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;]Lcom/android/internal/util/function/pooled/PooledLambdaImpl;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
+HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->acquire(Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;Ljava/lang/Object;IIILjava/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;)Lcom/android/internal/util/function/pooled/PooledLambda;+]Lcom/android/internal/util/function/pooled/PooledLambdaImpl;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->checkNotRecycled()V
-HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->doInvoke()Ljava/lang/Object;
-HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->doRecycle()V
+HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->doInvoke()Ljava/lang/Object;+]Ljava/util/function/BiConsumer;Landroid/app/UiAutomation$IAccessibilityServiceClientImpl$1$$ExternalSyntheticLambda0;]Lcom/android/internal/util/function/pooled/PooledLambdaImpl;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
+HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->doRecycle()V+]Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;Lcom/android/internal/util/function/pooled/PooledLambdaImpl$Pool;
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->fillInArg(Ljava/lang/Object;)Z
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->getFlags(I)I
-HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->invoke(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;
+HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->invoke(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;+]Lcom/android/internal/util/function/pooled/PooledLambdaImpl;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->isInvocationArgAtIndex(I)Z
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->isRecycleOnUse()Z
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->isRecycled()Z
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->mask(II)I
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->popArg(I)Ljava/lang/Object;
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->recycleOnUse()Lcom/android/internal/util/function/pooled/OmniFunction;
-HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->recycleOnUse()Lcom/android/internal/util/function/pooled/PooledRunnable;
+HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->recycleOnUse()Lcom/android/internal/util/function/pooled/PooledRunnable;+]Lcom/android/internal/util/function/pooled/PooledLambdaImpl;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->setFlags(II)V
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->setIfInBounds([Ljava/lang/Object;ILjava/lang/Object;)V
 HSPLcom/android/internal/util/function/pooled/PooledLambdaImpl;->unmask(II)I
@@ -22741,12 +22946,12 @@
 HSPLcom/android/internal/widget/LockPatternUtils;->getLockSettings()Lcom/android/internal/widget/ILockSettings;
 HSPLcom/android/internal/widget/LockPatternUtils;->getPowerButtonInstantlyLocks(I)Z
 HSPLcom/android/internal/widget/LockPatternUtils;->getString(Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/internal/widget/LockPatternUtils;->getUserManager(I)Landroid/os/UserManager;+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/internal/widget/LockPatternUtils;->hasSeparateChallenge(I)Z
 HSPLcom/android/internal/widget/LockPatternUtils;->isManagedProfile(I)Z
 HSPLcom/android/internal/widget/LockPatternUtils;->isOwnerInfoEnabled(I)Z
 HSPLcom/android/internal/widget/LockPatternUtils;->isSecure(I)Z
 HSPLcom/android/internal/widget/LockPatternUtils;->isSeparateProfileChallengeEnabled(I)Z
-HSPLcom/android/internal/widget/LockscreenCredential;-><init>(I[B)V
 HSPLcom/android/modules/utils/TypedXmlPullParser;->getAttributeBoolean(Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/modules/utils/TypedXmlPullParser;->getAttributeFloat(Ljava/lang/String;Ljava/lang/String;)F
 HSPLcom/android/modules/utils/TypedXmlPullParser;->getAttributeIndex(Ljava/lang/String;Ljava/lang/String;)I+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
@@ -22763,7 +22968,7 @@
 HSPLcom/android/net/module/util/NetUtils;->maskRawAddress([BI)V
 HSPLcom/android/net/module/util/NetworkCapabilitiesUtils;-><clinit>()V
 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;->equals(Ljava/lang/Object;)Z+]Lcom/android/okhttp/HttpUrl;Lcom/android/okhttp/HttpUrl;]Ljava/lang/Object;Lcom/android/okhttp/Dns$1;,Lcom/android/okhttp/internal/http/AuthenticatorAdapter;
 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;
@@ -22822,16 +23027,16 @@
 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;->checkNameAndValue(Ljava/lang/String;Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 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;+]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;+]Ljava/lang/String;Ljava/lang/String;
+HSPLcom/android/okhttp/Headers;->get([Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/okhttp/Headers;->name(I)Ljava/lang/String;
 HSPLcom/android/okhttp/Headers;->newBuilder()Lcom/android/okhttp/Headers$Builder;
 HSPLcom/android/okhttp/Headers;->size()I
@@ -22851,7 +23056,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
@@ -22863,15 +23068,15 @@
 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;]Ljava/lang/String;Ljava/lang/String;]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;+]Ljava/lang/String;Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl;->canonicalize(Ljava/lang/String;IILjava/lang/String;ZZZZ)Ljava/lang/String;
 HSPLcom/android/okhttp/HttpUrl;->canonicalize(Ljava/lang/String;Ljava/lang/String;ZZZZ)Ljava/lang/String;
 HSPLcom/android/okhttp/HttpUrl;->decodeHexDigit(C)I
 HSPLcom/android/okhttp/HttpUrl;->defaultPort(Ljava/lang/String;)I
-HSPLcom/android/okhttp/HttpUrl;->delimiterOffset(Ljava/lang/String;IILjava/lang/String;)I
+HSPLcom/android/okhttp/HttpUrl;->delimiterOffset(Ljava/lang/String;IILjava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/okhttp/HttpUrl;->encodedFragment()Ljava/lang/String;
 HSPLcom/android/okhttp/HttpUrl;->encodedPassword()Ljava/lang/String;
 HSPLcom/android/okhttp/HttpUrl;->encodedPath()Ljava/lang/String;
@@ -22887,7 +23092,7 @@
 HSPLcom/android/okhttp/HttpUrl;->newBuilder()Lcom/android/okhttp/HttpUrl$Builder;
 HSPLcom/android/okhttp/HttpUrl;->pathSegmentsToString(Ljava/lang/StringBuilder;Ljava/util/List;)V
 HSPLcom/android/okhttp/HttpUrl;->percentDecode(Lcom/android/okhttp/okio/Buffer;Ljava/lang/String;IIZ)V
-HSPLcom/android/okhttp/HttpUrl;->percentDecode(Ljava/lang/String;IIZ)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
+HSPLcom/android/okhttp/HttpUrl;->percentDecode(Ljava/lang/String;IIZ)Ljava/lang/String;
 HSPLcom/android/okhttp/HttpUrl;->percentDecode(Ljava/lang/String;Z)Ljava/lang/String;
 HSPLcom/android/okhttp/HttpUrl;->percentDecode(Ljava/util/List;Z)Ljava/util/List;
 HSPLcom/android/okhttp/HttpUrl;->port()I
@@ -22907,7 +23112,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;
@@ -22964,7 +23169,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;
@@ -22980,7 +23185,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;
@@ -23005,7 +23210,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;
@@ -23101,7 +23306,7 @@
 HSPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSink;->write(Lcom/android/okhttp/okio/Buffer;J)V
 HSPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSource;-><init>(Lcom/android/okhttp/internal/http/Http1xStream;J)V
 HSPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSource;->close()V
-HSPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSource;->read(Lcom/android/okhttp/okio/Buffer;J)J
+HSPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSource;->read(Lcom/android/okhttp/okio/Buffer;J)J+]Lcom/android/okhttp/internal/http/Http1xStream$FixedLengthSource;Lcom/android/okhttp/internal/http/Http1xStream$FixedLengthSource;]Lcom/android/okhttp/okio/BufferedSource;Lcom/android/okhttp/okio/RealBufferedSource;
 HSPLcom/android/okhttp/internal/http/Http1xStream;-><init>(Lcom/android/okhttp/internal/http/StreamAllocation;Lcom/android/okhttp/okio/BufferedSource;Lcom/android/okhttp/okio/BufferedSink;)V
 HSPLcom/android/okhttp/internal/http/Http1xStream;->access$300(Lcom/android/okhttp/internal/http/Http1xStream;)Lcom/android/okhttp/okio/BufferedSink;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->access$400(Lcom/android/okhttp/internal/http/Http1xStream;Lcom/android/okhttp/okio/ForwardingTimeout;)V
@@ -23143,26 +23348,26 @@
 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;->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
 HSPLcom/android/okhttp/internal/http/HttpMethod;->permitsRequestBody(Ljava/lang/String;)Z
 HSPLcom/android/okhttp/internal/http/HttpMethod;->requiresRequestBody(Ljava/lang/String;)Z
-HSPLcom/android/okhttp/internal/http/OkHeaders$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I+]Lcom/android/okhttp/internal/http/OkHeaders$1;Lcom/android/okhttp/internal/http/OkHeaders$1;
-HSPLcom/android/okhttp/internal/http/OkHeaders$1;->compare(Ljava/lang/String;Ljava/lang/String;)I+]Ljava/util/Comparator;Ljava/lang/String$CaseInsensitiveComparator;
+HSPLcom/android/okhttp/internal/http/OkHeaders$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLcom/android/okhttp/internal/http/OkHeaders$1;->compare(Ljava/lang/String;Ljava/lang/String;)I
 HSPLcom/android/okhttp/internal/http/OkHeaders;->contentLength(Lcom/android/okhttp/Headers;)J
 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;
@@ -23199,7 +23404,7 @@
 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
@@ -23261,7 +23466,7 @@
 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
@@ -23331,7 +23536,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
@@ -23355,7 +23560,7 @@
 HSPLcom/android/okhttp/okio/Buffer;->getByte(J)B
 HSPLcom/android/okhttp/okio/Buffer;->indexOf(BJ)J
 HSPLcom/android/okhttp/okio/Buffer;->read(Lcom/android/okhttp/okio/Buffer;J)J
-HSPLcom/android/okhttp/okio/Buffer;->read([BII)I
+HSPLcom/android/okhttp/okio/Buffer;->read([BII)I+]Lcom/android/okhttp/okio/Segment;Lcom/android/okhttp/okio/Segment;
 HSPLcom/android/okhttp/okio/Buffer;->readByte()B
 HSPLcom/android/okhttp/okio/Buffer;->readByteArray()[B
 HSPLcom/android/okhttp/okio/Buffer;->readByteArray(J)[B
@@ -23365,19 +23570,19 @@
 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;+]Lcom/android/okhttp/okio/Buffer;Lcom/android/okhttp/okio/Buffer;
-HSPLcom/android/okhttp/okio/Buffer;->readUtf8Line(J)Ljava/lang/String;+]Lcom/android/okhttp/okio/Buffer;Lcom/android/okhttp/okio/Buffer;
+HSPLcom/android/okhttp/okio/Buffer;->readUtf8(J)Ljava/lang/String;
+HSPLcom/android/okhttp/okio/Buffer;->readUtf8Line(J)Ljava/lang/String;
 HSPLcom/android/okhttp/okio/Buffer;->size()J
 HSPLcom/android/okhttp/okio/Buffer;->skip(J)V+]Lcom/android/okhttp/okio/Segment;Lcom/android/okhttp/okio/Segment;
 HSPLcom/android/okhttp/okio/Buffer;->writableSegment(I)Lcom/android/okhttp/okio/Segment;
-HSPLcom/android/okhttp/okio/Buffer;->write(Lcom/android/okhttp/okio/Buffer;J)V
+HSPLcom/android/okhttp/okio/Buffer;->write(Lcom/android/okhttp/okio/Buffer;J)V+]Lcom/android/okhttp/okio/Segment;Lcom/android/okhttp/okio/Segment;
 HSPLcom/android/okhttp/okio/Buffer;->write([BII)Lcom/android/okhttp/okio/Buffer;
 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;+]Lcom/android/okhttp/okio/Buffer;Lcom/android/okhttp/okio/Buffer;
+HSPLcom/android/okhttp/okio/Buffer;->writeUtf8(Ljava/lang/String;II)Lcom/android/okhttp/okio/Buffer;+]Ljava/lang/String;Ljava/lang/String;]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;
@@ -23403,7 +23608,7 @@
 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$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
+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;
 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
@@ -23435,22 +23640,22 @@
 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
+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;-><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
 HSPLcom/android/okhttp/okio/RealBufferedSource;->buffer()Lcom/android/okhttp/okio/Buffer;
 HSPLcom/android/okhttp/okio/RealBufferedSource;->close()V
 HSPLcom/android/okhttp/okio/RealBufferedSource;->exhausted()Z
-HSPLcom/android/okhttp/okio/RealBufferedSource;->indexOf(B)J+]Lcom/android/okhttp/okio/RealBufferedSource;Lcom/android/okhttp/okio/RealBufferedSource;
-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;->indexOf(B)J
+HSPLcom/android/okhttp/okio/RealBufferedSource;->indexOf(BJ)J
 HSPLcom/android/okhttp/okio/RealBufferedSource;->inputStream()Ljava/io/InputStream;
-HSPLcom/android/okhttp/okio/RealBufferedSource;->read(Lcom/android/okhttp/okio/Buffer;J)J
-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;->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;->readIntLe()I
 HSPLcom/android/okhttp/okio/RealBufferedSource;->readShort()S
-HSPLcom/android/okhttp/okio/RealBufferedSource;->readUtf8LineStrict()Ljava/lang/String;+]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;->request(J)Z+]Lcom/android/okhttp/okio/Source;Lcom/android/okhttp/okio/AsyncTimeout$2;
+HSPLcom/android/okhttp/okio/RealBufferedSource;->readUtf8LineStrict()Ljava/lang/String;
+HSPLcom/android/okhttp/okio/RealBufferedSource;->request(J)Z
 HSPLcom/android/okhttp/okio/RealBufferedSource;->require(J)V
 HSPLcom/android/okhttp/okio/RealBufferedSource;->skip(J)V
 HSPLcom/android/okhttp/okio/RealBufferedSource;->timeout()Lcom/android/okhttp/okio/Timeout;
@@ -23620,14 +23825,14 @@
 HSPLcom/android/org/bouncycastle/crypto/generators/PKCS12ParametersGenerator;->adjust([BI[B)V
 HSPLcom/android/org/bouncycastle/crypto/generators/PKCS12ParametersGenerator;->generateDerivedKey(II)[B
 HSPLcom/android/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;-><init>(Lcom/android/org/bouncycastle/crypto/Digest;)V
-HSPLcom/android/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->F([BI[B[BI)V
+HSPLcom/android/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->F([BI[B[BI)V+]Lcom/android/org/bouncycastle/crypto/Mac;Lcom/android/org/bouncycastle/crypto/macs/HMac;
 HSPLcom/android/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->generateDerivedKey(I)[B
 HSPLcom/android/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->generateDerivedMacParameters(I)Lcom/android/org/bouncycastle/crypto/CipherParameters;
 HSPLcom/android/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->generateDerivedParameters(I)Lcom/android/org/bouncycastle/crypto/CipherParameters;
 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
@@ -23719,26 +23924,26 @@
 HSPLcom/android/org/bouncycastle/util/io/Streams;->readFully(Ljava/io/InputStream;[B)I
 HSPLcom/android/org/bouncycastle/util/io/Streams;->readFully(Ljava/io/InputStream;[BII)I
 HSPLcom/android/org/kxml2/io/KXmlParser;-><init>()V
-HSPLcom/android/org/kxml2/io/KXmlParser;->adjustNsp()Z+]Lcom/android/org/kxml2/io/KXmlParser;Lcom/android/org/kxml2/io/KXmlParser;]Ljava/lang/String;Ljava/lang/String;
+HSPLcom/android/org/kxml2/io/KXmlParser;->adjustNsp()Z+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/org/kxml2/io/KXmlParser;Lcom/android/org/kxml2/io/KXmlParser;
 HSPLcom/android/org/kxml2/io/KXmlParser;->close()V
 HSPLcom/android/org/kxml2/io/KXmlParser;->ensureCapacity([Ljava/lang/String;I)[Ljava/lang/String;
 HSPLcom/android/org/kxml2/io/KXmlParser;->fillBuffer(I)Z+]Ljava/io/Reader;Ljava/io/InputStreamReader;
 HSPLcom/android/org/kxml2/io/KXmlParser;->getAttributeCount()I
 HSPLcom/android/org/kxml2/io/KXmlParser;->getAttributeName(I)Ljava/lang/String;
 HSPLcom/android/org/kxml2/io/KXmlParser;->getAttributeValue(I)Ljava/lang/String;
-HSPLcom/android/org/kxml2/io/KXmlParser;->getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/org/kxml2/io/KXmlParser;->getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/org/kxml2/io/KXmlParser;->getColumnNumber()I
 HSPLcom/android/org/kxml2/io/KXmlParser;->getDepth()I
 HSPLcom/android/org/kxml2/io/KXmlParser;->getEventType()I
 HSPLcom/android/org/kxml2/io/KXmlParser;->getLineNumber()I
 HSPLcom/android/org/kxml2/io/KXmlParser;->getName()Ljava/lang/String;
 HSPLcom/android/org/kxml2/io/KXmlParser;->getNamespace()Ljava/lang/String;
-HSPLcom/android/org/kxml2/io/KXmlParser;->getNamespace(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/org/kxml2/io/KXmlParser;->getNamespace(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/org/kxml2/io/KXmlParser;Lcom/android/org/kxml2/io/KXmlParser;
 HSPLcom/android/org/kxml2/io/KXmlParser;->getNamespaceCount(I)I
 HSPLcom/android/org/kxml2/io/KXmlParser;->getText()Ljava/lang/String;
 HSPLcom/android/org/kxml2/io/KXmlParser;->keepNamespaceAttributes()V
 HSPLcom/android/org/kxml2/io/KXmlParser;->next()I
-HSPLcom/android/org/kxml2/io/KXmlParser;->next(Z)I
+HSPLcom/android/org/kxml2/io/KXmlParser;->next(Z)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/org/kxml2/io/KXmlParser;->nextTag()I
 HSPLcom/android/org/kxml2/io/KXmlParser;->nextToken()I
 HSPLcom/android/org/kxml2/io/KXmlParser;->parseStartTag(ZZ)V
@@ -23747,7 +23952,7 @@
 HSPLcom/android/org/kxml2/io/KXmlParser;->read(C)V
 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;->readEndTag()V+]Ljava/lang/String;Ljava/lang/String;
 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;
@@ -23797,7 +24002,7 @@
 HSPLdalvik/system/BaseDexClassLoader;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;[Ljava/lang/ClassLoader;[Ljava/lang/ClassLoader;)V
 HSPLdalvik/system/BaseDexClassLoader;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;[Ljava/lang/ClassLoader;[Ljava/lang/ClassLoader;Z)V
 HSPLdalvik/system/BaseDexClassLoader;->addNativePath(Ljava/util/Collection;)V
-HSPLdalvik/system/BaseDexClassLoader;->findClass(Ljava/lang/String;)Ljava/lang/Class;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ldalvik/system/DexPathList;Ldalvik/system/DexPathList;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/ClassLoader;Ldalvik/system/PathClassLoader;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/lang/ClassNotFoundException;Ljava/lang/ClassNotFoundException;
+HSPLdalvik/system/BaseDexClassLoader;->findClass(Ljava/lang/String;)Ljava/lang/Class;
 HSPLdalvik/system/BaseDexClassLoader;->findLibrary(Ljava/lang/String;)Ljava/lang/String;
 HSPLdalvik/system/BaseDexClassLoader;->findResource(Ljava/lang/String;)Ljava/net/URL;
 HSPLdalvik/system/BaseDexClassLoader;->findResources(Ljava/lang/String;)Ljava/util/Enumeration;
@@ -23816,7 +24021,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+]Ljava/lang/ThreadLocal;Ldalvik/system/BlockGuard$3;
+HSPLdalvik/system/BlockGuard;->setThreadPolicy(Ldalvik/system/BlockGuard$Policy;)V
 HSPLdalvik/system/BlockGuard;->setVmPolicy(Ldalvik/system/BlockGuard$VmPolicy;)V
 HSPLdalvik/system/CloseGuard;-><init>()V
 HSPLdalvik/system/CloseGuard;->close()V
@@ -23845,7 +24050,7 @@
 HSPLdalvik/system/DexPathList$Element;->findClass(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/util/List;)Ljava/lang/Class;
 HSPLdalvik/system/DexPathList$Element;->findResource(Ljava/lang/String;)Ljava/net/URL;
 HSPLdalvik/system/DexPathList$Element;->maybeInit()V
-HSPLdalvik/system/DexPathList$Element;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Boolean;Ljava/lang/Boolean;
+HSPLdalvik/system/DexPathList$Element;->toString()Ljava/lang/String;
 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
@@ -23896,6 +24101,7 @@
 HSPLdalvik/system/ZipPathValidator$Callback;->onZipEntryAccess(Ljava/lang/String;)V
 HSPLdalvik/system/ZipPathValidator;->clearCallback()V
 HSPLdalvik/system/ZipPathValidator;->getInstance()Ldalvik/system/ZipPathValidator$Callback;
+HSPLdalvik/system/ZipPathValidator;->isClear()Z+]Ljava/lang/Object;Ldalvik/system/ZipPathValidator$1;
 HSPLdalvik/system/ZipPathValidator;->setCallback(Ldalvik/system/ZipPathValidator$Callback;)V
 HSPLdalvik/system/ZygoteHooks;->cleanLocaleCaches()V
 HSPLdalvik/system/ZygoteHooks;->gcAndFinalize()V
@@ -23921,22 +24127,22 @@
 HSPLjava/io/BufferedInputStream;-><init>(Ljava/io/InputStream;I)V
 HSPLjava/io/BufferedInputStream;->available()I
 HSPLjava/io/BufferedInputStream;->close()V
-HSPLjava/io/BufferedInputStream;->fill()V
+HSPLjava/io/BufferedInputStream;->fill()V+]Ljava/io/InputStream;Ljava/io/FileInputStream;
 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
+HSPLjava/io/BufferedInputStream;->read([BII)I+]Ljava/io/InputStream;missing_types
 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+]Ljava/io/OutputStream;Ljava/io/FileOutputStream;
-HSPLjava/io/BufferedOutputStream;->flushBuffer()V+]Ljava/io/OutputStream;Ljava/io/FileOutputStream;
+HSPLjava/io/BufferedOutputStream;->flush()V
+HSPLjava/io/BufferedOutputStream;->flushBuffer()V
 HSPLjava/io/BufferedOutputStream;->write(I)V
-HSPLjava/io/BufferedOutputStream;->write([BII)V
+HSPLjava/io/BufferedOutputStream;->write([BII)V+]Ljava/io/OutputStream;Ljava/io/FileOutputStream;
 HSPLjava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
 HSPLjava/io/BufferedReader;-><init>(Ljava/io/Reader;I)V
 HSPLjava/io/BufferedReader;->close()V
@@ -23945,7 +24151,7 @@
 HSPLjava/io/BufferedReader;->read()I
 HSPLjava/io/BufferedReader;->read([CII)I
 HSPLjava/io/BufferedReader;->read1([CII)I
-HSPLjava/io/BufferedReader;->readLine()Ljava/lang/String;
+HSPLjava/io/BufferedReader;->readLine()Ljava/lang/String;+]Ljava/io/BufferedReader;Ljava/io/BufferedReader;
 HSPLjava/io/BufferedReader;->readLine(Z)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/io/BufferedWriter;-><init>(Ljava/io/Writer;)V
 HSPLjava/io/BufferedWriter;-><init>(Ljava/io/Writer;I)V
@@ -23956,8 +24162,8 @@
 HSPLjava/io/BufferedWriter;->min(II)I
 HSPLjava/io/BufferedWriter;->newLine()V
 HSPLjava/io/BufferedWriter;->write(I)V
-HSPLjava/io/BufferedWriter;->write(Ljava/lang/String;II)V
-HSPLjava/io/BufferedWriter;->write([CII)V+]Ljava/io/BufferedWriter;Ljava/io/BufferedWriter;
+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
 HSPLjava/io/ByteArrayInputStream;-><init>([B)V
 HSPLjava/io/ByteArrayInputStream;-><init>([BII)V
 HSPLjava/io/ByteArrayInputStream;->available()I
@@ -23995,8 +24201,8 @@
 HSPLjava/io/DataInputStream;->readBoolean()Z
 HSPLjava/io/DataInputStream;->readByte()B
 HSPLjava/io/DataInputStream;->readFully([B)V
-HSPLjava/io/DataInputStream;->readFully([BII)V+]Ljava/io/InputStream;Ljava/io/BufferedInputStream;,Ljava/io/ByteArrayInputStream;,Ljava/io/ObjectInputStream$BlockDataInputStream;
-HSPLjava/io/DataInputStream;->readInt()I+]Ljava/io/DataInputStream;Ljava/io/DataInputStream;
+HSPLjava/io/DataInputStream;->readFully([BII)V+]Ljava/io/InputStream;Ljava/io/BufferedInputStream;
+HSPLjava/io/DataInputStream;->readInt()I
 HSPLjava/io/DataInputStream;->readLong()J
 HSPLjava/io/DataInputStream;->readShort()S
 HSPLjava/io/DataInputStream;->readUTF()Ljava/lang/String;
@@ -24008,46 +24214,46 @@
 HSPLjava/io/DataOutputStream;->flush()V
 HSPLjava/io/DataOutputStream;->incCount(I)V
 HSPLjava/io/DataOutputStream;->write(I)V
-HSPLjava/io/DataOutputStream;->write([BII)V+]Ljava/io/OutputStream;missing_types
+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;missing_types
+HSPLjava/io/DataOutputStream;->writeInt(I)V
 HSPLjava/io/DataOutputStream;->writeLong(J)V
 HSPLjava/io/DataOutputStream;->writeShort(I)V
 HSPLjava/io/DataOutputStream;->writeUTF(Ljava/lang/String;)V
-HSPLjava/io/DataOutputStream;->writeUTF(Ljava/lang/String;Ljava/io/DataOutput;)I+]Ljava/io/DataOutput;Ljava/io/DataOutputStream;
+HSPLjava/io/DataOutputStream;->writeUTF(Ljava/lang/String;Ljava/io/DataOutput;)I
 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+]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
+HSPLjava/io/File;-><init>(Ljava/io/File;Ljava/lang/String;)V
+HSPLjava/io/File;-><init>(Ljava/lang/String;)V
 HSPLjava/io/File;-><init>(Ljava/lang/String;I)V
-HSPLjava/io/File;-><init>(Ljava/lang/String;Ljava/io/File;)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;->compareTo(Ljava/io/File;)I+]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
+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
 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
-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;->exists()Z
+HSPLjava/io/File;->getAbsoluteFile()Ljava/io/File;+]Ljava/io/File;Ljava/io/File;]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
 HSPLjava/io/File;->getAbsolutePath()Ljava/lang/String;
 HSPLjava/io/File;->getCanonicalFile()Ljava/io/File;
 HSPLjava/io/File;->getCanonicalPath()Ljava/lang/String;
 HSPLjava/io/File;->getFreeSpace()J
-HSPLjava/io/File;->getName()Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/io/File;->getName()Ljava/lang/String;
 HSPLjava/io/File;->getParent()Ljava/lang/String;
 HSPLjava/io/File;->getParentFile()Ljava/io/File;
 HSPLjava/io/File;->getPath()Ljava/lang/String;
 HSPLjava/io/File;->getPrefixLength()I
 HSPLjava/io/File;->getTotalSpace()J
 HSPLjava/io/File;->getUsableSpace()J
-HSPLjava/io/File;->hashCode()I+]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
+HSPLjava/io/File;->hashCode()I
 HSPLjava/io/File;->isAbsolute()Z
 HSPLjava/io/File;->isDirectory()Z
 HSPLjava/io/File;->isFile()Z
@@ -24070,7 +24276,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
@@ -24083,7 +24289,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+]Ljava/io/File;Ljava/io/File;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
+HSPLjava/io/FileInputStream;-><init>(Ljava/io/File;)V
 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
@@ -24115,13 +24321,13 @@
 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/PushbackInputStream;,Ljava/io/ByteArrayInputStream;,Ljava/io/FileInputStream;
-HSPLjava/io/FilterInputStream;->read([B)I
-HSPLjava/io/FilterInputStream;->read([BII)I+]Ljava/io/InputStream;missing_types
+HSPLjava/io/FilterInputStream;->read()I+]Ljava/io/InputStream;missing_types
+HSPLjava/io/FilterInputStream;->read([B)I+]Ljava/io/FilterInputStream;Ljava/util/zip/InflaterInputStream;,Ljava/util/zip/ZipInputStream;
+HSPLjava/io/FilterInputStream;->read([BII)I+]Ljava/io/InputStream;Ljava/io/BufferedInputStream;,Ljava/io/FileInputStream;,Ljava/io/ByteArrayInputStream;,Ljava/io/PushbackInputStream;
 HSPLjava/io/FilterInputStream;->reset()V
 HSPLjava/io/FilterInputStream;->skip(J)J
 HSPLjava/io/FilterOutputStream;-><init>(Ljava/io/OutputStream;)V
@@ -24138,7 +24344,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
@@ -24158,12 +24364,12 @@
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->peekByte()B+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->read()I+]Ljava/io/ObjectInputStream$PeekInputStream;Ljava/io/ObjectInputStream$PeekInputStream;
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->read([BII)I
-HSPLjava/io/ObjectInputStream$BlockDataInputStream;->read([BIIZ)I
-HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readBlockHeader(Z)I
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->read([BIIZ)I+]Ljava/io/ObjectInputStream$PeekInputStream;Ljava/io/ObjectInputStream$PeekInputStream;
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readBlockHeader(Z)I+]Ljava/io/ObjectInputStream$PeekInputStream;Ljava/io/ObjectInputStream$PeekInputStream;
 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;
@@ -24171,19 +24377,19 @@
 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
 HSPLjava/io/ObjectInputStream$GetField;-><init>()V
-HSPLjava/io/ObjectInputStream$GetFieldImpl;-><init>(Ljava/io/ObjectInputStream;Ljava/io/ObjectStreamClass;)V
+HSPLjava/io/ObjectInputStream$GetFieldImpl;-><init>(Ljava/io/ObjectInputStream;Ljava/io/ObjectStreamClass;)V+]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;
 HSPLjava/io/ObjectInputStream$GetFieldImpl;->get(Ljava/lang/String;D)D
 HSPLjava/io/ObjectInputStream$GetFieldImpl;->get(Ljava/lang/String;I)I
 HSPLjava/io/ObjectInputStream$GetFieldImpl;->get(Ljava/lang/String;J)J
-HSPLjava/io/ObjectInputStream$GetFieldImpl;->get(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/io/ObjectInputStream$GetFieldImpl;->get(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/io/ObjectInputStream$HandleTable;Ljava/io/ObjectInputStream$HandleTable;
 HSPLjava/io/ObjectInputStream$GetFieldImpl;->get(Ljava/lang/String;Z)Z
 HSPLjava/io/ObjectInputStream$GetFieldImpl;->getFieldOffset(Ljava/lang/String;Ljava/lang/Class;)I
-HSPLjava/io/ObjectInputStream$GetFieldImpl;->readFields()V
+HSPLjava/io/ObjectInputStream$GetFieldImpl;->readFields()V+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/ObjectStreamField;Ljava/io/ObjectStreamField;
 HSPLjava/io/ObjectInputStream$HandleTable$HandleList;-><init>()V
 HSPLjava/io/ObjectInputStream$HandleTable$HandleList;->add(I)V
 HSPLjava/io/ObjectInputStream$HandleTable;-><init>(I)V
@@ -24197,43 +24403,43 @@
 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+]Ljava/io/InputStream;Ljava/io/ByteArrayInputStream;
-HSPLjava/io/ObjectInputStream$PeekInputStream;->peek()I+]Ljava/io/InputStream;missing_types
-HSPLjava/io/ObjectInputStream$PeekInputStream;->read()I+]Ljava/io/InputStream;Ljava/io/ByteArrayInputStream;
-HSPLjava/io/ObjectInputStream$PeekInputStream;->read([BII)I+]Ljava/io/InputStream;missing_types
+HSPLjava/io/ObjectInputStream$PeekInputStream;->close()V
+HSPLjava/io/ObjectInputStream$PeekInputStream;->peek()I+]Ljava/io/InputStream;Ljava/io/ByteArrayInputStream;,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;,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;]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 HSPLjava/io/ObjectInputStream;->checkResolve(Ljava/lang/Object;)Ljava/lang/Object;
-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;->clear()V
+HSPLjava/io/ObjectInputStream;->close()V
 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
-HSPLjava/io/ObjectInputStream;->isCustomSubclass()Z
+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/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;->readClassDesc(Z)Ljava/io/ObjectStreamClass;
-HSPLjava/io/ObjectInputStream;->readClassDescriptor()Ljava/io/ObjectStreamClass;
+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;+]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;
 HSPLjava/io/ObjectInputStream;->readEnum(Z)Ljava/lang/Enum;
-HSPLjava/io/ObjectInputStream;->readFields()Ljava/io/ObjectInputStream$GetField;
+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+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
-HSPLjava/io/ObjectInputStream;->readLong()J
-HSPLjava/io/ObjectInputStream;->readNonProxyDesc(Z)Ljava/io/ObjectStreamClass;+]Ljava/io/ObjectInputStream;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;->readObject()Ljava/lang/Object;
+HSPLjava/io/ObjectInputStream;->readInt()I
+HSPLjava/io/ObjectInputStream;->readLong()J+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
+HSPLjava/io/ObjectInputStream;->readNonProxyDesc(Z)Ljava/io/ObjectStreamClass;+]Ljava/io/ObjectInputStream;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;
 HSPLjava/io/ObjectInputStream;->readSerialData(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)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;->readShort()S
+HSPLjava/io/ObjectInputStream;->readShort()S+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 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;
+HSPLjava/io/ObjectInputStream;->readTypeString()Ljava/lang/String;+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 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;
@@ -24243,18 +24449,18 @@
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->drain()V+]Ljava/io/OutputStream;Ljava/io/ByteArrayOutputStream;
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->flush()V
 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;->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;->writeBytes(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeFloat(F)V
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeInt(I)V
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeLong(J)V
 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
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeUTF(Ljava/lang/String;J)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
 HSPLjava/io/ObjectOutputStream$HandleTable;-><init>(IF)V
 HSPLjava/io/ObjectOutputStream$HandleTable;->assign(Ljava/lang/Object;)I
 HSPLjava/io/ObjectOutputStream$HandleTable;->clear()V
@@ -24274,7 +24480,7 @@
 HSPLjava/io/ObjectOutputStream$PutFieldImpl;->writeFields()V
 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$ReplaceTable;->lookup(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/io/ObjectOutputStream$HandleTable;Ljava/io/ObjectOutputStream$HandleTable;
 HSPLjava/io/ObjectOutputStream;-><init>(Ljava/io/OutputStream;)V
 HSPLjava/io/ObjectOutputStream;->annotateClass(Ljava/lang/Class;)V
 HSPLjava/io/ObjectOutputStream;->close()V
@@ -24286,7 +24492,7 @@
 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
@@ -24294,12 +24500,12 @@
 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;->writeString(Ljava/lang/String;Z)V+]Ljava/io/ObjectOutputStream$HandleTable;Ljava/io/ObjectOutputStream$HandleTable;]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
@@ -24332,17 +24538,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+]Ljava/lang/Class;Ljava/lang/Class;
+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+]Lsun/misc/Unsafe;Lsun/misc/Unsafe;]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/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]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;-><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/lang/String;Ljava/lang/String;]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
@@ -24372,12 +24578,12 @@
 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/lang/String;Ljava/lang/String;]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;
 HSPLjava/io/ObjectStreamClass;->getDefaultSerialFields(Ljava/lang/Class;)[Ljava/io/ObjectStreamField;
-HSPLjava/io/ObjectStreamClass;->getField(Ljava/lang/String;Ljava/lang/Class;)Ljava/io/ObjectStreamField;
+HSPLjava/io/ObjectStreamClass;->getField(Ljava/lang/String;Ljava/lang/Class;)Ljava/io/ObjectStreamField;+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/ObjectStreamField;Ljava/io/ObjectStreamField;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/io/ObjectStreamClass;->getFields(Z)[Ljava/io/ObjectStreamField;
 HSPLjava/io/ObjectStreamClass;->getInheritableMethod(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/reflect/Method;
 HSPLjava/io/ObjectStreamClass;->getMethodSignature([Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/String;
@@ -24409,15 +24615,16 @@
 HSPLjava/io/ObjectStreamClass;->isExternalizable()Z
 HSPLjava/io/ObjectStreamClass;->isInstantiable()Z
 HSPLjava/io/ObjectStreamClass;->isProxy()Z
+HSPLjava/io/ObjectStreamClass;->isRecord()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;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;Ljava/io/ObjectInputStream;
 HSPLjava/io/ObjectStreamClass;->requireInitialized()V
-HSPLjava/io/ObjectStreamClass;->setObjFieldValues(Ljava/lang/Object;[Ljava/lang/Object;)V
-HSPLjava/io/ObjectStreamClass;->setPrimFieldValues(Ljava/lang/Object;[B)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+]Ljava/io/ObjectStreamClass$FieldReflector;Ljava/io/ObjectStreamClass$FieldReflector;
 HSPLjava/io/ObjectStreamClass;->writeNonProxy(Ljava/io/ObjectOutputStream;)V
 HSPLjava/io/ObjectStreamField;-><init>(Ljava/lang/String;Ljava/lang/Class;)V
 HSPLjava/io/ObjectStreamField;-><init>(Ljava/lang/String;Ljava/lang/Class;Z)V
@@ -24430,7 +24637,7 @@
 HSPLjava/io/ObjectStreamField;->getOffset()I
 HSPLjava/io/ObjectStreamField;->getSignature()Ljava/lang/String;
 HSPLjava/io/ObjectStreamField;->getType()Ljava/lang/Class;
-HSPLjava/io/ObjectStreamField;->getTypeCode()C
+HSPLjava/io/ObjectStreamField;->getTypeCode()C+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/io/ObjectStreamField;->getTypeString()Ljava/lang/String;
 HSPLjava/io/ObjectStreamField;->isPrimitive()Z
 HSPLjava/io/ObjectStreamField;->isUnshared()Z
@@ -24459,27 +24666,27 @@
 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;+]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;
+HSPLjava/io/PrintWriter;->append(Ljava/lang/CharSequence;)Ljava/io/PrintWriter;
 HSPLjava/io/PrintWriter;->append(Ljava/lang/CharSequence;)Ljava/lang/Appendable;
 HSPLjava/io/PrintWriter;->close()V
 HSPLjava/io/PrintWriter;->ensureOpen()V
-HSPLjava/io/PrintWriter;->flush()V+]Ljava/io/Writer;Landroid/util/Log$ImmediateLogWriter;
+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;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+]Ljava/io/PrintWriter;Lcom/android/internal/util/LineBreakBufferedWriter;,Ljava/io/PrintWriter;
+HSPLjava/io/PrintWriter;->print(Ljava/lang/String;)V
 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+]Ljava/io/PrintWriter;Lcom/android/internal/util/LineBreakBufferedWriter;
-HSPLjava/io/PrintWriter;->println(Ljava/lang/String;)V+]Ljava/io/PrintWriter;Lcom/android/internal/util/LineBreakBufferedWriter;,Ljava/io/PrintWriter;
+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+]Ljava/io/PrintWriter;Lcom/android/internal/util/LineBreakBufferedWriter;,Ljava/io/PrintWriter;
+HSPLjava/io/PrintWriter;->write(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/PrintWriter;Ljava/io/PrintWriter;
 HSPLjava/io/PrintWriter;->write(Ljava/lang/String;II)V
-HSPLjava/io/PrintWriter;->write([CII)V+]Ljava/io/Writer;Landroid/util/Log$ImmediateLogWriter;
+HSPLjava/io/PrintWriter;->write([CII)V
 HSPLjava/io/PushbackInputStream;-><init>(Ljava/io/InputStream;I)V
 HSPLjava/io/PushbackInputStream;->close()V
 HSPLjava/io/PushbackInputStream;->ensureOpen()V
@@ -24504,7 +24711,7 @@
 HSPLjava/io/RandomAccessFile;->read([B)I
 HSPLjava/io/RandomAccessFile;->read([BII)I
 HSPLjava/io/RandomAccessFile;->readByte()B
-HSPLjava/io/RandomAccessFile;->readBytes([BII)I+]Llibcore/io/IoTracker;Llibcore/io/IoTracker;
+HSPLjava/io/RandomAccessFile;->readBytes([BII)I
 HSPLjava/io/RandomAccessFile;->readFully([B)V
 HSPLjava/io/RandomAccessFile;->readFully([BII)V
 HSPLjava/io/RandomAccessFile;->readInt()I
@@ -24540,35 +24747,35 @@
 HSPLjava/io/StringWriter;-><init>(I)V
 HSPLjava/io/StringWriter;->append(C)Ljava/io/StringWriter;
 HSPLjava/io/StringWriter;->append(C)Ljava/io/Writer;
-HSPLjava/io/StringWriter;->append(Ljava/lang/CharSequence;)Ljava/io/StringWriter;+]Ljava/io/StringWriter;Ljava/io/StringWriter;
-HSPLjava/io/StringWriter;->append(Ljava/lang/CharSequence;)Ljava/io/Writer;+]Ljava/io/StringWriter;Ljava/io/StringWriter;
+HSPLjava/io/StringWriter;->append(Ljava/lang/CharSequence;)Ljava/io/StringWriter;
+HSPLjava/io/StringWriter;->append(Ljava/lang/CharSequence;)Ljava/io/Writer;
 HSPLjava/io/StringWriter;->close()V
 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+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
-HSPLjava/io/StringWriter;->write(Ljava/lang/String;)V+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
-HSPLjava/io/StringWriter;->write(Ljava/lang/String;II)V+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
-HSPLjava/io/StringWriter;->write([CII)V
+HSPLjava/io/StringWriter;->write(I)V
+HSPLjava/io/StringWriter;->write(Ljava/lang/String;)V
+HSPLjava/io/StringWriter;->write(Ljava/lang/String;II)V
+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+]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;->checkAccess(Ljava/io/File;I)Z
+HSPLjava/io/UnixFileSystem;->compare(Ljava/io/File;Ljava/io/File;)I
 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;Ldalvik/system/BlockGuard$2;,Landroid/os/StrictMode$5;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
+HSPLjava/io/UnixFileSystem;->getBooleanAttributes(Ljava/io/File;)I
 HSPLjava/io/UnixFileSystem;->getDefaultParent()Ljava/lang/String;
 HSPLjava/io/UnixFileSystem;->getLastModifiedTime(Ljava/io/File;)J
 HSPLjava/io/UnixFileSystem;->getLength(Ljava/io/File;)J
 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;->hashCode(Ljava/io/File;)I
 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;,Landroid/os/StrictMode$5;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
+HSPLjava/io/UnixFileSystem;->list(Ljava/io/File;)[Ljava/lang/String;+]Ljava/io/File;Ljava/io/File;
 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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLjava/io/UnixFileSystem;->resolve(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/io/UnixFileSystem;->setLastModifiedTime(Ljava/io/File;J)Z
 HSPLjava/io/UnixFileSystem;->setPermission(Ljava/io/File;IZZ)Z
 HSPLjava/io/Writer;-><init>()V
@@ -24581,17 +24788,17 @@
 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;,Ljava/lang/StringBuffer;
-HSPLjava/lang/AbstractStringBuilder;->append(J)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;
-HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/AbstractStringBuilder;)Ljava/lang/AbstractStringBuilder;
-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;,Landroid/icu/impl/FormattedStringBuilder;,Ljava/nio/HeapCharBuffer;
-HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/String;)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->append(J)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/AbstractStringBuilder;)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;,Ljava/lang/StringBuffer;
+HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/CharSequence;)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/CharSequence;Ljava/nio/HeapCharBuffer;]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;
+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(Z)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->append([CII)Ljava/lang/AbstractStringBuilder;
-HSPLjava/lang/AbstractStringBuilder;->appendChars(Ljava/lang/CharSequence;II)V+]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/nio/HeapCharBuffer;,Landroid/icu/impl/FormattedStringBuilder;]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;,Ljava/lang/StringBuffer;
+HSPLjava/lang/AbstractStringBuilder;->appendChars(Ljava/lang/CharSequence;II)V+]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/nio/HeapCharBuffer;]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;,Ljava/lang/StringBuffer;
 HSPLjava/lang/AbstractStringBuilder;->appendChars([CII)V+]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;,Ljava/lang/StringBuffer;
-HSPLjava/lang/AbstractStringBuilder;->appendCodePoint(I)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->appendCodePoint(I)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->appendNull()Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->charAt(I)C+]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;,Ljava/lang/StringBuffer;
 HSPLjava/lang/AbstractStringBuilder;->checkRange(III)V
@@ -24606,21 +24813,22 @@
 HSPLjava/lang/AbstractStringBuilder;->getCoder()B
 HSPLjava/lang/AbstractStringBuilder;->indexOf(Ljava/lang/String;)I
 HSPLjava/lang/AbstractStringBuilder;->indexOf(Ljava/lang/String;I)I
+HSPLjava/lang/AbstractStringBuilder;->inflate()V+]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;,Ljava/lang/StringBuffer;
 HSPLjava/lang/AbstractStringBuilder;->insert(IC)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;
 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;
 HSPLjava/lang/AbstractStringBuilder;->isLatin1()Z
 HSPLjava/lang/AbstractStringBuilder;->lastIndexOf(Ljava/lang/String;I)I
 HSPLjava/lang/AbstractStringBuilder;->length()I
 HSPLjava/lang/AbstractStringBuilder;->newCapacity(I)I
 HSPLjava/lang/AbstractStringBuilder;->putStringAt(ILjava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;,Ljava/lang/StringBuffer;
-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
 HSPLjava/lang/AbstractStringBuilder;->shift(II)V
 HSPLjava/lang/AbstractStringBuilder;->subSequence(II)Ljava/lang/CharSequence;
-HSPLjava/lang/AbstractStringBuilder;->substring(I)Ljava/lang/String;
+HSPLjava/lang/AbstractStringBuilder;->substring(I)Ljava/lang/String;+]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->substring(II)Ljava/lang/String;+]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/lang/ArrayIndexOutOfBoundsException;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/Boolean;-><init>(Z)V
@@ -24628,7 +24836,7 @@
 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+]Ljava/lang/Boolean;Ljava/lang/Boolean;
+HSPLjava/lang/Boolean;->equals(Ljava/lang/Object;)Z
 HSPLjava/lang/Boolean;->getBoolean(Ljava/lang/String;)Z
 HSPLjava/lang/Boolean;->hashCode()I
 HSPLjava/lang/Boolean;->hashCode(Z)I
@@ -24655,8 +24863,8 @@
 HSPLjava/lang/Byte;->toString(B)Ljava/lang/String;
 HSPLjava/lang/Byte;->toUnsignedInt(B)I
 HSPLjava/lang/Byte;->valueOf(B)Ljava/lang/Byte;
-HSPLjava/lang/CaseMapper;->toLowerCase(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;+]Ljava/util/Locale;Ljava/util/Locale;
-HSPLjava/lang/CaseMapper;->toUpperCase(Ljava/util/Locale;Ljava/lang/String;I)Ljava/lang/String;+]Ljava/util/Locale;Ljava/util/Locale;
+HSPLjava/lang/CaseMapper;->toLowerCase(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/Locale;Ljava/util/Locale;
+HSPLjava/lang/CaseMapper;->toUpperCase(Ljava/util/Locale;Ljava/lang/String;I)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/Locale;Ljava/util/Locale;
 HSPLjava/lang/CaseMapper;->upperIndex(I)I
 HSPLjava/lang/Character$Subset;->equals(Ljava/lang/Object;)Z
 HSPLjava/lang/Character$Subset;->hashCode()I
@@ -24664,10 +24872,13 @@
 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;megamorphic_types
+HSPLjava/lang/Character;->codePointAt(Ljava/lang/CharSequence;I)I+]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;,Ljava/lang/String;
 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;->compare(CC)I
+HSPLjava/lang/Character;->compareTo(Ljava/lang/Character;)I
+HSPLjava/lang/Character;->compareTo(Ljava/lang/Object;)I+]Ljava/lang/Character;Ljava/lang/Character;
 HSPLjava/lang/Character;->digit(CI)I
 HSPLjava/lang/Character;->digit(II)I
 HSPLjava/lang/Character;->equals(Ljava/lang/Object;)Z
@@ -24725,12 +24936,12 @@
 HSPLjava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
 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;+]Ljava/lang/Class;Ljava/lang/Class;
+HSPLjava/lang/Class;->getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
 HSPLjava/lang/Class;->getCanonicalName()Ljava/lang/String;
 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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Class;Ljava/lang/Class;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;
+HSPLjava/lang/Class;->getConstructor0([Ljava/lang/Class;I)Ljava/lang/reflect/Constructor;+]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;
 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;
@@ -24743,7 +24954,7 @@
 HSPLjava/lang/Class;->getField(Ljava/lang/String;)Ljava/lang/reflect/Field;
 HSPLjava/lang/Class;->getFields()[Ljava/lang/reflect/Field;
 HSPLjava/lang/Class;->getGenericInterfaces()[Ljava/lang/reflect/Type;
-HSPLjava/lang/Class;->getGenericSuperclass()Ljava/lang/reflect/Type;+]Ljava/lang/Class;Ljava/lang/Class;
+HSPLjava/lang/Class;->getGenericSuperclass()Ljava/lang/reflect/Type;+]Llibcore/reflect/GenericSignatureParser;Llibcore/reflect/GenericSignatureParser;]Ljava/lang/Class;Ljava/lang/Class;
 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;
@@ -24758,8 +24969,8 @@
 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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLjava/lang/Class;->getSimpleName()Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Class;Ljava/lang/Class;
-HSPLjava/lang/Class;->getSuperclass()Ljava/lang/Class;+]Ljava/lang/Class;Ljava/lang/Class;
+HSPLjava/lang/Class;->getSimpleName()Ljava/lang/String;
+HSPLjava/lang/Class;->getSuperclass()Ljava/lang/Class;
 HSPLjava/lang/Class;->getTypeName()Ljava/lang/String;
 HSPLjava/lang/Class;->getTypeParameters()[Ljava/lang/reflect/TypeVariable;
 HSPLjava/lang/Class;->isAnnotation()Z
@@ -24767,19 +24978,19 @@
 HSPLjava/lang/Class;->isArray()Z+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->isEnum()Z
-HSPLjava/lang/Class;->isInstance(Ljava/lang/Object;)Z+]Ljava/lang/Object;missing_types]Ljava/lang/Class;Ljava/lang/Class;
+HSPLjava/lang/Class;->isInstance(Ljava/lang/Object;)Z+]Ljava/lang/Object;megamorphic_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;->isMemberClass()Z
 HSPLjava/lang/Class;->isPrimitive()Z
 HSPLjava/lang/Class;->isProxy()Z
+HSPLjava/lang/Class;->isRecord()Z+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->resolveName(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/lang/Class;->toString()Ljava/lang/String;
+HSPLjava/lang/Class;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/ClassCastException;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/ClassLoader;-><init>()V
 HSPLjava/lang/ClassLoader;-><init>(Ljava/lang/ClassLoader;)V
-HSPLjava/lang/ClassLoader;-><init>(Ljava/lang/Void;Ljava/lang/ClassLoader;)V
 HSPLjava/lang/ClassLoader;->checkCreateClassLoader()Ljava/lang/Void;
 HSPLjava/lang/ClassLoader;->definePackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;)Ljava/lang/Package;
 HSPLjava/lang/ClassLoader;->findLoadedClass(Ljava/lang/String;)Ljava/lang/Class;
@@ -24804,6 +25015,7 @@
 HSPLjava/lang/Daemons$FinalizerDaemon;->-$$Nest$fgetprogressCounter(Ljava/lang/Daemons$FinalizerDaemon;)Ljava/util/concurrent/atomic/AtomicInteger;
 HSPLjava/lang/Daemons$FinalizerDaemon;->-$$Nest$sfgetINSTANCE()Ljava/lang/Daemons$FinalizerDaemon;
 HSPLjava/lang/Daemons$FinalizerDaemon;->doFinalize(Ljava/lang/ref/FinalizerReference;)V+]Ljava/lang/Object;missing_types]Ljava/lang/ref/FinalizerReference;Ljava/lang/ref/FinalizerReference;
+HSPLjava/lang/Daemons$FinalizerDaemon;->processReference(Ljava/lang/Object;)V+]Ljava/lang/ref/FinalizerReference;Ljava/lang/ref/FinalizerReference;
 HSPLjava/lang/Daemons$FinalizerDaemon;->runInternal()V
 HSPLjava/lang/Daemons$FinalizerWatchdogDaemon;->-$$Nest$mmonitoringNeeded(Ljava/lang/Daemons$FinalizerWatchdogDaemon;I)V
 HSPLjava/lang/Daemons$FinalizerWatchdogDaemon;->-$$Nest$mmonitoringNotNeeded(Ljava/lang/Daemons$FinalizerWatchdogDaemon;I)V
@@ -24853,12 +25065,12 @@
 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;
-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;missing_types
+HSPLjava/lang/Enum;->valueOf(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;+]Ljava/lang/String;Ljava/lang/String;]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
@@ -24902,7 +25114,7 @@
 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+]Ljava/lang/Integer;Ljava/lang/Integer;
+HSPLjava/lang/Integer;->compareTo(Ljava/lang/Object;)I
 HSPLjava/lang/Integer;->decode(Ljava/lang/String;)Ljava/lang/Integer;
 HSPLjava/lang/Integer;->divideUnsigned(II)I
 HSPLjava/lang/Integer;->doubleValue()D
@@ -24925,7 +25137,7 @@
 HSPLjava/lang/Integer;->numberOfLeadingZeros(I)I
 HSPLjava/lang/Integer;->numberOfTrailingZeros(I)I
 HSPLjava/lang/Integer;->parseInt(Ljava/lang/String;)I
-HSPLjava/lang/Integer;->parseInt(Ljava/lang/String;I)I
+HSPLjava/lang/Integer;->parseInt(Ljava/lang/String;I)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/Integer;->reverse(I)I
 HSPLjava/lang/Integer;->reverseBytes(I)I
 HSPLjava/lang/Integer;->rotateLeft(II)I
@@ -24951,12 +25163,12 @@
 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+]Ljava/lang/Long;Ljava/lang/Long;
+HSPLjava/lang/Long;->compareTo(Ljava/lang/Object;)I
 HSPLjava/lang/Long;->compareUnsigned(JJ)I
 HSPLjava/lang/Long;->decode(Ljava/lang/String;)Ljava/lang/Long;
 HSPLjava/lang/Long;->divideUnsigned(JJ)J
 HSPLjava/lang/Long;->doubleValue()D
-HSPLjava/lang/Long;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/Long;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Long;Ljava/lang/Long;
 HSPLjava/lang/Long;->formatUnsignedLong0(JI[BII)V
 HSPLjava/lang/Long;->getChars(JI[B)I
 HSPLjava/lang/Long;->getChars(JI[C)I
@@ -24972,7 +25184,7 @@
 HSPLjava/lang/Long;->numberOfTrailingZeros(J)I
 HSPLjava/lang/Long;->parseLong(Ljava/lang/CharSequence;III)J
 HSPLjava/lang/Long;->parseLong(Ljava/lang/String;)J
-HSPLjava/lang/Long;->parseLong(Ljava/lang/String;I)J
+HSPLjava/lang/Long;->parseLong(Ljava/lang/String;I)J+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/Long;->reverse(J)J
 HSPLjava/lang/Long;->reverseBytes(J)J
 HSPLjava/lang/Long;->rotateLeft(JI)J
@@ -25019,7 +25231,7 @@
 HSPLjava/lang/Math;->nextAfter(DD)D
 HSPLjava/lang/Math;->powerOfTwoD(I)D
 HSPLjava/lang/Math;->powerOfTwoF(I)F
-HSPLjava/lang/Math;->random()D+]Ljava/util/Random;Ljava/util/Random;
+HSPLjava/lang/Math;->random()D
 HSPLjava/lang/Math;->randomLongInternal()J
 HSPLjava/lang/Math;->round(D)J
 HSPLjava/lang/Math;->round(F)I
@@ -25039,7 +25251,6 @@
 HSPLjava/lang/NullPointerException;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/Number;-><init>()V
 HSPLjava/lang/NumberFormatException;-><init>(Ljava/lang/String;)V
-HSPLjava/lang/NumberFormatException;->forInputString(Ljava/lang/String;)Ljava/lang/NumberFormatException;
 HSPLjava/lang/NumberFormatException;->forInputString(Ljava/lang/String;I)Ljava/lang/NumberFormatException;
 HSPLjava/lang/Object;-><init>()V
 HSPLjava/lang/Object;->clone()Ljava/lang/Object;
@@ -25048,9 +25259,9 @@
 HSPLjava/lang/Object;->getClass()Ljava/lang/Class;
 HSPLjava/lang/Object;->hashCode()I
 HSPLjava/lang/Object;->identityHashCode(Ljava/lang/Object;)I
-HSPLjava/lang/Object;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;missing_types]Ljava/lang/Class;Ljava/lang/Class;
+HSPLjava/lang/Object;->toString()Ljava/lang/String;
 HSPLjava/lang/Object;->wait()V
-HSPLjava/lang/Object;->wait(J)V
+HSPLjava/lang/Object;->wait(J)V+]Ljava/lang/Object;missing_types
 HSPLjava/lang/Package;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;Ljava/lang/ClassLoader;)V
 HSPLjava/lang/Package;->getName()Ljava/lang/String;
 HSPLjava/lang/Process;-><init>()V
@@ -25105,67 +25316,67 @@
 HSPLjava/lang/StackTraceElement;->isNativeMethod()Z
 HSPLjava/lang/StackTraceElement;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/StackTraceElement;Ljava/lang/StackTraceElement;
 HSPLjava/lang/String$CaseInsensitiveComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I+]Ljava/lang/String$CaseInsensitiveComparator;Ljava/lang/String$CaseInsensitiveComparator;
-HSPLjava/lang/String$CaseInsensitiveComparator;->compare(Ljava/lang/String;Ljava/lang/String;)I
+HSPLjava/lang/String$CaseInsensitiveComparator;->compare(Ljava/lang/String;Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->checkBoundsBeginEnd(III)V
 HSPLjava/lang/String;->checkBoundsOffCount(III)V
 HSPLjava/lang/String;->checkIndex(II)V
 HSPLjava/lang/String;->checkOffset(II)V
-HSPLjava/lang/String;->codePointAt(I)I
+HSPLjava/lang/String;->codePointAt(I)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->codePointCount(II)I
 HSPLjava/lang/String;->coder()B
-HSPLjava/lang/String;->compareTo(Ljava/lang/Object;)I
+HSPLjava/lang/String;->compareTo(Ljava/lang/Object;)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->compareToIgnoreCase(Ljava/lang/String;)I
 HSPLjava/lang/String;->contains(Ljava/lang/CharSequence;)Z+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLjava/lang/String;->contentEquals(Ljava/lang/CharSequence;)Z
 HSPLjava/lang/String;->copyValueOf([C)Ljava/lang/String;
 HSPLjava/lang/String;->endsWith(Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
-HSPLjava/lang/String;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/String;->equals(Ljava/lang/Object;)Z+]Ljava/lang/String;Ljava/lang/String;
 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;
-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;->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;->getBytes([BIB)V+]Ljava/lang/String;Ljava/lang/String;
-HSPLjava/lang/String;->getChars(II[CI)V
+HSPLjava/lang/String;->getChars(II[CI)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->getChars([CI)V
-HSPLjava/lang/String;->hashCode()I
-HSPLjava/lang/String;->indexOf(I)I
-HSPLjava/lang/String;->indexOf(II)I
+HSPLjava/lang/String;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/lang/String;->indexOf(I)I+]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/lang/String;->indexOf(II)I+]Ljava/lang/String;Ljava/lang/String;
 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([BBILjava/lang/String;I)I+]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/lang/String;->indexOf(Ljava/lang/String;Ljava/lang/String;I)I+]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/lang/String;->indexOf([BBILjava/lang/String;I)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+]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(II)I+]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/lang/String;->lastIndexOf(Ljava/lang/String;)I
 HSPLjava/lang/String;->lastIndexOf(Ljava/lang/String;I)I
-HSPLjava/lang/String;->lastIndexOf(Ljava/lang/String;Ljava/lang/String;I)I
+HSPLjava/lang/String;->lastIndexOf(Ljava/lang/String;Ljava/lang/String;I)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->lastIndexOf([BBILjava/lang/String;I)I
 HSPLjava/lang/String;->lastIndexOf([CII[CIII)I
 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;->replace(CC)Ljava/lang/String;
+HSPLjava/lang/String;->regionMatches(ILjava/lang/String;II)Z+]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/lang/String;->regionMatches(ZILjava/lang/String;II)Z+]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/lang/String;->replace(CC)Ljava/lang/String;+]Ljava/lang/String;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;->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;
 HSPLjava/lang/String;->startsWith(Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
-HSPLjava/lang/String;->startsWith(Ljava/lang/String;I)Z
+HSPLjava/lang/String;->startsWith(Ljava/lang/String;I)Z+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->subSequence(II)Ljava/lang/CharSequence;+]Ljava/lang/String;Ljava/lang/String;
-HSPLjava/lang/String;->substring(I)Ljava/lang/String;
-HSPLjava/lang/String;->substring(II)Ljava/lang/String;
+HSPLjava/lang/String;->substring(I)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/lang/String;->substring(II)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->toLowerCase()Ljava/lang/String;
 HSPLjava/lang/String;->toLowerCase(Ljava/util/Locale;)Ljava/lang/String;
 HSPLjava/lang/String;->toString()Ljava/lang/String;
 HSPLjava/lang/String;->toUpperCase()Ljava/lang/String;
-HSPLjava/lang/String;->toUpperCase(Ljava/util/Locale;)Ljava/lang/String;
+HSPLjava/lang/String;->toUpperCase(Ljava/util/Locale;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->trim()Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->valueOf(C)Ljava/lang/String;
 HSPLjava/lang/String;->valueOf(D)Ljava/lang/String;
@@ -25181,6 +25392,7 @@
 HSPLjava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;
 HSPLjava/lang/StringBuffer;->append(I)Ljava/lang/StringBuffer;
 HSPLjava/lang/StringBuffer;->append(J)Ljava/lang/StringBuffer;
+HSPLjava/lang/StringBuffer;->append(Ljava/lang/AbstractStringBuilder;)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/StringBuffer;->append(Ljava/lang/AbstractStringBuilder;)Ljava/lang/StringBuffer;
 HSPLjava/lang/StringBuffer;->append(Ljava/lang/CharSequence;)Ljava/lang/Appendable;
 HSPLjava/lang/StringBuffer;->append(Ljava/lang/CharSequence;)Ljava/lang/StringBuffer;
@@ -25201,8 +25413,9 @@
 HSPLjava/lang/StringBuffer;->toString()Ljava/lang/String;+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
 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+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;-><init>(Ljava/lang/CharSequence;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLjava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
+HSPLjava/lang/StringBuilder;->append(C)Ljava/lang/AbstractStringBuilder;+]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;
@@ -25247,25 +25460,28 @@
 HSPLjava/lang/StringFactory;->newStringFromBytes([BI)Ljava/lang/String;
 HSPLjava/lang/StringFactory;->newStringFromBytes([BII)Ljava/lang/String;
 HSPLjava/lang/StringFactory;->newStringFromBytes([BIILjava/lang/String;)Ljava/lang/String;
-HSPLjava/lang/StringFactory;->newStringFromBytes([BIILjava/nio/charset/Charset;)Ljava/lang/String;+]Ljava/nio/charset/Charset;Lcom/android/icu/charset/CharsetICU;
+HSPLjava/lang/StringFactory;->newStringFromBytes([BIILjava/nio/charset/Charset;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/StringFactory;->newStringFromBytes([BLjava/lang/String;)Ljava/lang/String;
 HSPLjava/lang/StringFactory;->newStringFromBytes([BLjava/nio/charset/Charset;)Ljava/lang/String;
 HSPLjava/lang/StringFactory;->newStringFromChars([C)Ljava/lang/String;
 HSPLjava/lang/StringFactory;->newStringFromChars([CII)Ljava/lang/String;
 HSPLjava/lang/StringLatin1;->canEncode(I)Z
-HSPLjava/lang/StringLatin1;->indexOf([BILjava/lang/String;II)I
+HSPLjava/lang/StringLatin1;->indexOf([BILjava/lang/String;II)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/StringLatin1;->inflate([BI[BII)V
 HSPLjava/lang/StringLatin1;->lastIndexOf([BILjava/lang/String;II)I
 HSPLjava/lang/StringLatin1;->newString([BII)Ljava/lang/String;
 HSPLjava/lang/StringUTF16;->checkBoundsBeginEnd(II[B)V
 HSPLjava/lang/StringUTF16;->checkBoundsOffCount(II[B)V
+HSPLjava/lang/StringUTF16;->checkIndex(I[B)V
 HSPLjava/lang/StringUTF16;->getChar([BI)C
 HSPLjava/lang/StringUTF16;->getChars(II[B)I
 HSPLjava/lang/StringUTF16;->getChars([BII[CI)V
 HSPLjava/lang/StringUTF16;->inflate([BI[BII)V
 HSPLjava/lang/StringUTF16;->length([B)I
 HSPLjava/lang/StringUTF16;->newBytesFor(I)[B
+HSPLjava/lang/StringUTF16;->newString([BII)Ljava/lang/String;
 HSPLjava/lang/StringUTF16;->putChar([BII)V
+HSPLjava/lang/StringUTF16;->putCharSB([BII)V
 HSPLjava/lang/System$PropertiesWithNonOverrideableDefaults;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/lang/System$PropertiesWithNonOverrideableDefaults;->remove(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/lang/System;->arraycopy([BI[BII)V
@@ -25279,7 +25495,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;+]Ljava/util/Properties;Ljava/lang/System$PropertiesWithNonOverrideableDefaults;
+HSPLjava/lang/System;->getProperty(Ljava/lang/String;)Ljava/lang/String;
 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;
@@ -25293,9 +25509,9 @@
 HSPLjava/lang/System;->setErr(Ljava/io/PrintStream;)V
 HSPLjava/lang/System;->setOut(Ljava/io/PrintStream;)V
 HSPLjava/lang/System;->setProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/lang/Thread$State;->values()[Ljava/lang/Thread$State;
+HSPLjava/lang/Thread$State;->values()[Ljava/lang/Thread$State;+][Ljava/lang/Thread$State;[Ljava/lang/Thread$State;
 HSPLjava/lang/Thread;-><init>()V
-HSPLjava/lang/Thread;-><init>(Ljava/lang/Runnable;)V
+HSPLjava/lang/Thread;-><init>(Ljava/lang/Runnable;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/lang/Thread;-><init>(Ljava/lang/Runnable;Ljava/lang/String;)V
 HSPLjava/lang/Thread;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/Thread;-><init>(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;)V
@@ -25313,9 +25529,9 @@
 HSPLjava/lang/Thread;->getPriority()I
 HSPLjava/lang/Thread;->getStackTrace()[Ljava/lang/StackTraceElement;
 HSPLjava/lang/Thread;->getState()Ljava/lang/Thread$State;
-HSPLjava/lang/Thread;->getThreadGroup()Ljava/lang/ThreadGroup;
+HSPLjava/lang/Thread;->getThreadGroup()Ljava/lang/ThreadGroup;+]Ljava/lang/Thread;Ljava/lang/Thread;
 HSPLjava/lang/Thread;->getUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;
-HSPLjava/lang/Thread;->init2(Ljava/lang/Thread;Z)V
+HSPLjava/lang/Thread;->init2(Ljava/lang/Thread;Z)V+]Ljava/lang/Thread;Ljava/lang/Thread;
 HSPLjava/lang/Thread;->interrupt()V
 HSPLjava/lang/Thread;->isAlive()Z
 HSPLjava/lang/Thread;->isDaemon()Z
@@ -25335,7 +25551,7 @@
 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
@@ -25362,18 +25578,18 @@
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->-$$Nest$mset(Ljava/lang/ThreadLocal$ThreadLocalMap;Ljava/lang/ThreadLocal;Ljava/lang/Object;)V
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;-><init>(Ljava/lang/ThreadLocal$ThreadLocalMap;)V
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;-><init>(Ljava/lang/ThreadLocal;Ljava/lang/Object;)V
-HSPLjava/lang/ThreadLocal$ThreadLocalMap;->cleanSomeSlots(II)Z
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;->cleanSomeSlots(II)Z+]Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->expungeStaleEntries()V
-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;->expungeStaleEntry(I)I
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;->getEntry(Ljava/lang/ThreadLocal;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;+]Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;->getEntryAfterMiss(Ljava/lang/ThreadLocal;ILjava/lang/ThreadLocal$ThreadLocalMap$Entry;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;+]Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->nextIndex(II)I
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->prevIndex(II)I
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->rehash()V
-HSPLjava/lang/ThreadLocal$ThreadLocalMap;->remove(Ljava/lang/ThreadLocal;)V+]Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;->remove(Ljava/lang/ThreadLocal;)V
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->replaceStaleEntry(Ljava/lang/ThreadLocal;Ljava/lang/Object;I)V
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->resize()V
-HSPLjava/lang/ThreadLocal$ThreadLocalMap;->set(Ljava/lang/ThreadLocal;Ljava/lang/Object;)V
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;->set(Ljava/lang/ThreadLocal;Ljava/lang/Object;)V+]Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->setThreshold(I)V
 HSPLjava/lang/ThreadLocal;->-$$Nest$fgetthreadLocalHashCode(Ljava/lang/ThreadLocal;)I
 HSPLjava/lang/ThreadLocal;-><init>()V
@@ -25383,9 +25599,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+]Ljava/lang/ThreadLocal;Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;,Ljava/lang/ThreadLocal;
+HSPLjava/lang/ThreadLocal;->remove()V
 HSPLjava/lang/ThreadLocal;->set(Ljava/lang/Object;)V+]Ljava/lang/ThreadLocal;missing_types
-HSPLjava/lang/ThreadLocal;->setInitialValue()Ljava/lang/Object;+]Ljava/lang/ThreadLocal;missing_types
+HSPLjava/lang/ThreadLocal;->setInitialValue()Ljava/lang/Object;
 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
@@ -25394,9 +25610,9 @@
 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+]Ljava/io/PrintWriter;Lcom/android/internal/util/LineBreakBufferedWriter;,Lcom/android/internal/util/FastPrintWriter;,Ljava/io/PrintWriter;
-HSPLjava/lang/Throwable;-><init>()V+]Ljava/lang/Throwable;missing_types
-HSPLjava/lang/Throwable;-><init>(Ljava/lang/String;)V+]Ljava/lang/Throwable;missing_types
+HSPLjava/lang/Throwable$WrappedPrintWriter;->println(Ljava/lang/Object;)V
+HSPLjava/lang/Throwable;-><init>()V
+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;ZZ)V
 HSPLjava/lang/Throwable;-><init>(Ljava/lang/Throwable;)V
@@ -25414,9 +25630,9 @@
 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+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Throwable$PrintStreamOrWriter;Ljava/lang/Throwable$WrappedPrintWriter;]Ljava/lang/Throwable;missing_types]Ljava/util/Set;Ljava/util/Collections$SetFromMap;
-HSPLjava/lang/Throwable;->readObject(Ljava/io/ObjectInputStream;)V
+HSPLjava/lang/Throwable;->readObject(Ljava/io/ObjectInputStream;)V+][Ljava/lang/StackTraceElement;[Ljava/lang/StackTraceElement;
 HSPLjava/lang/Throwable;->setStackTrace([Ljava/lang/StackTraceElement;)V
-HSPLjava/lang/Throwable;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;missing_types]Ljava/lang/Throwable;missing_types]Ljava/lang/Class;Ljava/lang/Class;
+HSPLjava/lang/Throwable;->toString()Ljava/lang/String;
 HSPLjava/lang/Throwable;->writeObject(Ljava/io/ObjectOutputStream;)V
 HSPLjava/lang/UNIXProcess$2;-><init>(Ljava/lang/UNIXProcess;[I)V
 HSPLjava/lang/UNIXProcess$2;->run()Ljava/lang/Object;
@@ -25442,7 +25658,7 @@
 HSPLjava/lang/UnsupportedOperationException;-><init>()V
 HSPLjava/lang/UnsupportedOperationException;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/VMClassLoader;->getResource(Ljava/lang/String;)Ljava/net/URL;
-HSPLjava/lang/VMClassLoader;->getResources(Ljava/lang/String;)Ljava/util/List;+]Llibcore/io/ClassPathURLStreamHandler;Llibcore/io/ClassPathURLStreamHandler;
+HSPLjava/lang/VMClassLoader;->getResources(Ljava/lang/String;)Ljava/util/List;
 HSPLjava/lang/invoke/FieldVarHandle;-><init>(Ljava/lang/reflect/Field;Ljava/lang/Class;)V
 HSPLjava/lang/invoke/FieldVarHandle;->create(Ljava/lang/reflect/Field;)Ljava/lang/invoke/FieldVarHandle;
 HSPLjava/lang/invoke/MethodHandle;-><init>(JILjava/lang/invoke/MethodType;)V
@@ -25518,8 +25734,8 @@
 HSPLjava/lang/ref/Reference;->refersTo(Ljava/lang/Object;)Z
 HSPLjava/lang/ref/ReferenceQueue;-><init>()V
 HSPLjava/lang/ref/ReferenceQueue;->add(Ljava/lang/ref/Reference;)V
-HSPLjava/lang/ref/ReferenceQueue;->enqueueLocked(Ljava/lang/ref/Reference;)Z+]Lsun/misc/Cleaner;Lsun/misc/Cleaner;
-HSPLjava/lang/ref/ReferenceQueue;->enqueuePending(Ljava/lang/ref/Reference;Ljava/util/concurrent/atomic/AtomicInteger;)V+]Ljava/lang/Object;Ljava/lang/Object;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
+HSPLjava/lang/ref/ReferenceQueue;->enqueueLocked(Ljava/lang/ref/Reference;)Z
+HSPLjava/lang/ref/ReferenceQueue;->enqueuePending(Ljava/lang/ref/Reference;Ljava/util/concurrent/atomic/AtomicInteger;)V+]Ljava/lang/Object;Ljava/lang/Object;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;]Lsun/misc/Cleaner;Lsun/misc/Cleaner;
 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;
@@ -25533,7 +25749,7 @@
 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+]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;
+HSPLjava/lang/reflect/AccessibleObject;->setAccessible0(Ljava/lang/reflect/AccessibleObject;Z)V
 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;+]Ljava/lang/Class;Ljava/lang/Class;
@@ -25576,22 +25792,22 @@
 HSPLjava/lang/reflect/Executable;->sharedToString(IZ[Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/String;
 HSPLjava/lang/reflect/Field;->getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
 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;->getGenericType()Ljava/lang/reflect/Type;
 HSPLjava/lang/reflect/Field;->getModifiers()I
-HSPLjava/lang/reflect/Field;->getName()Ljava/lang/String;+]Ljava/lang/Class;Ljava/lang/Class;
+HSPLjava/lang/reflect/Field;->getName()Ljava/lang/String;
 HSPLjava/lang/reflect/Field;->getOffset()I
-HSPLjava/lang/reflect/Field;->getSignatureAttribute()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+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;->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;
+HSPLjava/lang/reflect/Field;->isSynthetic()Z
 HSPLjava/lang/reflect/InvocationTargetException;-><init>(Ljava/lang/Throwable;)V
 HSPLjava/lang/reflect/InvocationTargetException;->getCause()Ljava/lang/Throwable;
 HSPLjava/lang/reflect/Method$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLjava/lang/reflect/Method$1;->compare(Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)I
 HSPLjava/lang/reflect/Method;->equalNameAndParameters(Ljava/lang/reflect/Method;)Z
-HSPLjava/lang/reflect/Method;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Ljava/lang/Class;]Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;
+HSPLjava/lang/reflect/Method;->equals(Ljava/lang/Object;)Z
 HSPLjava/lang/reflect/Method;->getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
 HSPLjava/lang/reflect/Method;->getDeclaredAnnotations()[Ljava/lang/annotation/Annotation;
 HSPLjava/lang/reflect/Method;->getDeclaringClass()Ljava/lang/Class;
@@ -25623,11 +25839,11 @@
 HSPLjava/lang/reflect/Modifier;->toString(I)Ljava/lang/String;
 HSPLjava/lang/reflect/Proxy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLjava/lang/reflect/Proxy$1;->compare(Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)I
-HSPLjava/lang/reflect/Proxy$Key1;-><init>(Ljava/lang/Class;)V
-HSPLjava/lang/reflect/Proxy$Key1;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/reflect/Proxy$Key1;-><init>(Ljava/lang/Class;)V+]Ljava/lang/Object;Ljava/lang/Class;
+HSPLjava/lang/reflect/Proxy$Key1;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Ljava/lang/reflect/Proxy$Key1;]Ljava/lang/reflect/Proxy$Key1;Ljava/lang/reflect/Proxy$Key1;
 HSPLjava/lang/reflect/Proxy$Key1;->hashCode()I
 HSPLjava/lang/reflect/Proxy$KeyFactory;->apply(Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Object;
-HSPLjava/lang/reflect/Proxy$KeyFactory;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/lang/reflect/Proxy$KeyFactory;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/reflect/Proxy$KeyFactory;Ljava/lang/reflect/Proxy$KeyFactory;
 HSPLjava/lang/reflect/Proxy$ProxyClassFactory;->apply(Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Class;
 HSPLjava/lang/reflect/Proxy$ProxyClassFactory;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/lang/reflect/Proxy;->-$$Nest$sfgetORDER_BY_SIGNATURE_AND_SUBTYPE()Ljava/util/Comparator;
@@ -25638,14 +25854,14 @@
 HSPLjava/lang/reflect/Proxy;->deduplicateAndGetExceptions(Ljava/util/List;)Ljava/util/List;
 HSPLjava/lang/reflect/Proxy;->getMethods([Ljava/lang/Class;)Ljava/util/List;
 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;->getProxyClass0(Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Class;+]Ljava/lang/reflect/WeakCache;Ljava/lang/reflect/WeakCache;
 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;
 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;+][Ljava/lang/Class;[Ljava/lang/Class;]Ljava/lang/Class;Ljava/lang/Class;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;
 HSPLjava/lang/reflect/Proxy;->validateReturnTypes(Ljava/util/List;)V
 HSPLjava/lang/reflect/WeakCache$CacheKey;-><init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
-HSPLjava/lang/reflect/WeakCache$CacheKey;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/reflect/WeakCache$CacheKey;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Ljava/lang/reflect/WeakCache$CacheKey;]Ljava/lang/reflect/WeakCache$CacheKey;Ljava/lang/reflect/WeakCache$CacheKey;
 HSPLjava/lang/reflect/WeakCache$CacheKey;->hashCode()I
 HSPLjava/lang/reflect/WeakCache$CacheKey;->valueOf(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)Ljava/lang/Object;
 HSPLjava/lang/reflect/WeakCache$CacheValue;-><init>(Ljava/lang/Object;)V
@@ -25654,8 +25870,8 @@
 HSPLjava/lang/reflect/WeakCache$Factory;->get()Ljava/lang/Object;
 HSPLjava/lang/reflect/WeakCache;->-$$Nest$fgetreverseMap(Ljava/lang/reflect/WeakCache;)Ljava/util/concurrent/ConcurrentMap;
 HSPLjava/lang/reflect/WeakCache;->-$$Nest$fgetvalueFactory(Ljava/lang/reflect/WeakCache;)Ljava/util/function/BiFunction;
-HSPLjava/lang/reflect/WeakCache;->expungeStaleEntries()V
-HSPLjava/lang/reflect/WeakCache;->get(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/function/BiFunction;Ljava/lang/reflect/Proxy$KeyFactory;]Ljava/util/concurrent/ConcurrentMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/util/function/Supplier;Ljava/lang/reflect/WeakCache$CacheValue;
+HSPLjava/lang/reflect/WeakCache;->expungeStaleEntries()V+]Ljava/lang/ref/ReferenceQueue;Ljava/lang/ref/ReferenceQueue;
+HSPLjava/lang/reflect/WeakCache;->get(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/function/BiFunction;Ljava/lang/reflect/Proxy$KeyFactory;]Ljava/util/concurrent/ConcurrentMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/util/function/Supplier;Ljava/lang/reflect/WeakCache$Factory;,Ljava/lang/reflect/WeakCache$CacheValue;
 HSPLjava/math/BigDecimal;-><init>(I)V
 HSPLjava/math/BigDecimal;-><init>(J)V
 HSPLjava/math/BigDecimal;-><init>(Ljava/lang/String;)V
@@ -25715,7 +25931,7 @@
 HSPLjava/math/BigInteger;-><init>([BII)V
 HSPLjava/math/BigInteger;-><init>([II)V
 HSPLjava/math/BigInteger;->abs()Ljava/math/BigInteger;
-HSPLjava/math/BigInteger;->add(Ljava/math/BigInteger;)Ljava/math/BigInteger;
+HSPLjava/math/BigInteger;->add(Ljava/math/BigInteger;)Ljava/math/BigInteger;+]Ljava/math/BigInteger;Ljava/math/BigInteger;
 HSPLjava/math/BigInteger;->add([I[I)[I
 HSPLjava/math/BigInteger;->bigEndInts2NewBN([IZ)J
 HSPLjava/math/BigInteger;->bitLength()I
@@ -25744,7 +25960,7 @@
 HSPLjava/math/BigInteger;->pow(I)Ljava/math/BigInteger;
 HSPLjava/math/BigInteger;->readObject(Ljava/io/ObjectInputStream;)V
 HSPLjava/math/BigInteger;->remainder(Ljava/math/BigInteger;)Ljava/math/BigInteger;
-HSPLjava/math/BigInteger;->remainderKnuth(Ljava/math/BigInteger;)Ljava/math/BigInteger;
+HSPLjava/math/BigInteger;->remainderKnuth(Ljava/math/BigInteger;)Ljava/math/BigInteger;+]Ljava/math/MutableBigInteger;Ljava/math/MutableBigInteger;
 HSPLjava/math/BigInteger;->reverse([I)[I
 HSPLjava/math/BigInteger;->shiftLeft(I)Ljava/math/BigInteger;
 HSPLjava/math/BigInteger;->shiftLeft([II)[I
@@ -25752,13 +25968,13 @@
 HSPLjava/math/BigInteger;->shiftRightImpl(I)Ljava/math/BigInteger;
 HSPLjava/math/BigInteger;->signInt()I
 HSPLjava/math/BigInteger;->signum()I
-HSPLjava/math/BigInteger;->smallToString(ILjava/lang/StringBuilder;I)V
+HSPLjava/math/BigInteger;->smallToString(ILjava/lang/StringBuilder;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Ljava/math/BigInteger;Ljava/math/BigInteger;]Ljava/math/MutableBigInteger;Ljava/math/MutableBigInteger;
 HSPLjava/math/BigInteger;->stripLeadingZeroBytes([BII)[I
 HSPLjava/math/BigInteger;->stripLeadingZeroInts([I)[I
-HSPLjava/math/BigInteger;->subtract(Ljava/math/BigInteger;)Ljava/math/BigInteger;
+HSPLjava/math/BigInteger;->subtract(Ljava/math/BigInteger;)Ljava/math/BigInteger;+]Ljava/math/BigInteger;Ljava/math/BigInteger;
 HSPLjava/math/BigInteger;->subtract([I[I)[I
 HSPLjava/math/BigInteger;->testBit(I)Z
-HSPLjava/math/BigInteger;->toByteArray()[B
+HSPLjava/math/BigInteger;->toByteArray()[B+]Ljava/math/BigInteger;Ljava/math/BigInteger;
 HSPLjava/math/BigInteger;->toString()Ljava/lang/String;
 HSPLjava/math/BigInteger;->toString(I)Ljava/lang/String;
 HSPLjava/math/BigInteger;->toString(Ljava/math/BigInteger;Ljava/lang/StringBuilder;II)V
@@ -25779,9 +25995,9 @@
 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;->divideOneWord(ILjava/math/MutableBigInteger;)I+]Ljava/math/MutableBigInteger;Ljava/math/MutableBigInteger;
 HSPLjava/math/MutableBigInteger;->getLowestSetBit()I
 HSPLjava/math/MutableBigInteger;->getMagnitudeArray()[I
 HSPLjava/math/MutableBigInteger;->mulsub([I[IIII)I
@@ -25818,7 +26034,7 @@
 HSPLjava/net/AbstractPlainSocketImpl;->isConnectionReset()Z
 HSPLjava/net/AbstractPlainSocketImpl;->isConnectionResetPending()Z
 HSPLjava/net/AbstractPlainSocketImpl;->listen(I)V
-HSPLjava/net/AbstractPlainSocketImpl;->releaseFD()V
+HSPLjava/net/AbstractPlainSocketImpl;->releaseFD()V+]Ljava/net/AbstractPlainSocketImpl;Ljava/net/SocksSocketImpl;
 HSPLjava/net/AbstractPlainSocketImpl;->setOption(ILjava/lang/Object;)V
 HSPLjava/net/AbstractPlainSocketImpl;->socketClose()V
 HSPLjava/net/AbstractPlainSocketImpl;->socketPreClose()V
@@ -25871,7 +26087,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+]Ljava/net/DatagramSocket;Ljava/net/DatagramSocket;,Ljava/net/MulticastSocket;]Ljava/net/DatagramSocketImpl;Ljava/net/PlainDatagramSocketImpl;
+HSPLjava/net/DatagramSocket;->receive(Ljava/net/DatagramPacket;)V
 HSPLjava/net/DatagramSocket;->send(Ljava/net/DatagramPacket;)V
 HSPLjava/net/DatagramSocket;->setReuseAddress(Z)V
 HSPLjava/net/DatagramSocket;->setSoTimeout(I)V
@@ -26006,7 +26222,7 @@
 HSPLjava/net/InetSocketAddress;->isUnresolved()Z
 HSPLjava/net/InetSocketAddress;->toString()Ljava/lang/String;
 HSPLjava/net/InterfaceAddress;-><init>(Ljava/net/InetAddress;Ljava/net/Inet4Address;Ljava/net/InetAddress;)V
-HSPLjava/net/InterfaceAddress;->countPrefixLength(Ljava/net/InetAddress;)S
+HSPLjava/net/InterfaceAddress;->countPrefixLength(Ljava/net/InetAddress;)S+]Ljava/net/InetAddress;Ljava/net/Inet6Address;,Ljava/net/Inet4Address;
 HSPLjava/net/JarURLConnection;-><init>(Ljava/net/URL;)V
 HSPLjava/net/JarURLConnection;->getEntryName()Ljava/lang/String;
 HSPLjava/net/JarURLConnection;->parseSpecs(Ljava/net/URL;)V
@@ -26016,7 +26232,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/lang/String;Ljava/lang/String;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/net/NetworkInterface;Ljava/net/NetworkInterface;]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;
 HSPLjava/net/NetworkInterface;->getFlags()I
 HSPLjava/net/NetworkInterface;->getHardwareAddress()[B
@@ -26034,7 +26250,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+]Ljava/net/DatagramPacket;Ljava/net/DatagramPacket;]Ljava/net/PlainDatagramSocketImpl;Ljava/net/PlainDatagramSocketImpl;
+HSPLjava/net/PlainDatagramSocketImpl;->doRecv(Ljava/net/DatagramPacket;I)V
 HSPLjava/net/PlainDatagramSocketImpl;->receive0(Ljava/net/DatagramPacket;)V
 HSPLjava/net/PlainDatagramSocketImpl;->send(Ljava/net/DatagramPacket;)V
 HSPLjava/net/PlainDatagramSocketImpl;->socketSetOption(ILjava/lang/Object;)V
@@ -26126,8 +26342,8 @@
 HSPLjava/net/SocketImpl;->setSocket(Ljava/net/Socket;)V
 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([BII)I+]Ljava/net/SocketInputStream;Ljava/net/SocketInputStream;]Ljava/net/AbstractPlainSocketImpl;Ljava/net/SocksSocketImpl;
+HSPLjava/net/SocketInputStream;->read([BIII)I+]Ljava/net/AbstractPlainSocketImpl;Ljava/net/SocksSocketImpl;
 HSPLjava/net/SocketInputStream;->socketRead(Ljava/io/FileDescriptor;[BIII)I
 HSPLjava/net/SocketOutputStream;-><init>(Ljava/net/AbstractPlainSocketImpl;)V
 HSPLjava/net/SocketOutputStream;->finalize()V
@@ -26143,7 +26359,7 @@
 HSPLjava/net/SocksSocketImpl;->remainingMillis(J)I
 HSPLjava/net/URI$Parser;-><init>(Ljava/net/URI;Ljava/lang/String;)V
 HSPLjava/net/URI$Parser;->at(IIC)Z
-HSPLjava/net/URI$Parser;->charAt(I)C
+HSPLjava/net/URI$Parser;->charAt(I)C+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/net/URI$Parser;->checkChar(IJJLjava/lang/String;)V
 HSPLjava/net/URI$Parser;->checkChars(IIJJLjava/lang/String;)V
 HSPLjava/net/URI$Parser;->parse(Z)V
@@ -26216,7 +26432,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/net/URLStreamHandler;Lsun/net/www/protocol/file/Handler;]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/net/URL;->createBuiltinHandler(Ljava/lang/String;)Ljava/net/URLStreamHandler;
 HSPLjava/net/URL;->getAuthority()Ljava/lang/String;
 HSPLjava/net/URL;->getFile()Ljava/lang/String;
@@ -26250,14 +26466,14 @@
 HSPLjava/net/URLConnection;->setReadTimeout(I)V
 HSPLjava/net/URLConnection;->setUseCaches(Z)V
 HSPLjava/net/URLDecoder;->decode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/net/URLDecoder;->decode(Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLjava/net/URLDecoder;->decode(Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/lang/String;
 HSPLjava/net/URLDecoder;->isValidHexChar(C)Z
 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+]Ljava/net/URLStreamHandler;Lcom/android/okhttp/HttpsHandler;]Ljava/lang/String;Ljava/lang/String;]Ljava/net/URL;Ljava/net/URL;
+HSPLjava/net/URLStreamHandler;->parseURL(Ljava/net/URL;Ljava/lang/String;II)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/net/URLStreamHandler;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/lang/String;Ljava/lang/String;]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
@@ -26265,14 +26481,14 @@
 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+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
-HSPLjava/nio/Bits;->getIntL(Ljava/nio/ByteBuffer;I)I
+HSPLjava/nio/Bits;->getIntB(Ljava/nio/ByteBuffer;I)I
+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;->getLongL(Ljava/nio/ByteBuffer;I)J
 HSPLjava/nio/Bits;->getShort(Ljava/nio/ByteBuffer;IZ)S
-HSPLjava/nio/Bits;->getShortB(Ljava/nio/ByteBuffer;I)S
-HSPLjava/nio/Bits;->getShortL(Ljava/nio/ByteBuffer;I)S
+HSPLjava/nio/Bits;->getShortB(Ljava/nio/ByteBuffer;I)S+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLjava/nio/Bits;->getShortL(Ljava/nio/ByteBuffer;I)S+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/Bits;->int0(I)B
 HSPLjava/nio/Bits;->int1(I)B
 HSPLjava/nio/Bits;->int2(I)B
@@ -26295,14 +26511,14 @@
 HSPLjava/nio/Bits;->putCharL(Ljava/nio/ByteBuffer;IC)V
 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;->putIntL(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;->putLongL(Ljava/nio/ByteBuffer;IJ)V
 HSPLjava/nio/Bits;->putShort(Ljava/nio/ByteBuffer;ISZ)V
-HSPLjava/nio/Bits;->putShortB(Ljava/nio/ByteBuffer;IS)V
-HSPLjava/nio/Bits;->putShortL(Ljava/nio/ByteBuffer;IS)V
+HSPLjava/nio/Bits;->putShortB(Ljava/nio/ByteBuffer;IS)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLjava/nio/Bits;->putShortL(Ljava/nio/ByteBuffer;IS)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/Bits;->short0(S)B
 HSPLjava/nio/Bits;->short1(S)B
 HSPLjava/nio/Bits;->unsafe()Lsun/misc/Unsafe;
@@ -26338,19 +26554,19 @@
 HSPLjava/nio/ByteBuffer;->clear()Ljava/nio/Buffer;
 HSPLjava/nio/ByteBuffer;->compare(BB)I
 HSPLjava/nio/ByteBuffer;->compareTo(Ljava/lang/Object;)I
-HSPLjava/nio/ByteBuffer;->compareTo(Ljava/nio/ByteBuffer;)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;->hasArray()Z
-HSPLjava/nio/ByteBuffer;->hashCode()I
+HSPLjava/nio/ByteBuffer;->hashCode()I+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;,Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;
 HSPLjava/nio/ByteBuffer;->mark()Ljava/nio/Buffer;
 HSPLjava/nio/ByteBuffer;->order()Ljava/nio/ByteOrder;
 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;
+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;->reset()Ljava/nio/Buffer;
 HSPLjava/nio/ByteBuffer;->rewind()Ljava/nio/Buffer;
@@ -26358,7 +26574,7 @@
 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+]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;]Ljava/nio/ByteBufferAsCharBuffer;Ljava/nio/ByteBufferAsCharBuffer;
+HSPLjava/nio/ByteBufferAsCharBuffer;->get(I)C
 HSPLjava/nio/ByteBufferAsCharBuffer;->get([CII)Ljava/nio/CharBuffer;
 HSPLjava/nio/ByteBufferAsCharBuffer;->isDirect()Z
 HSPLjava/nio/ByteBufferAsCharBuffer;->ix(I)I
@@ -26370,6 +26586,7 @@
 HSPLjava/nio/ByteBufferAsFloatBuffer;->put(IF)Ljava/nio/FloatBuffer;
 HSPLjava/nio/ByteBufferAsFloatBuffer;->put([FII)Ljava/nio/FloatBuffer;
 HSPLjava/nio/ByteBufferAsIntBuffer;-><init>(Ljava/nio/ByteBuffer;IIIIILjava/nio/ByteOrder;)V
+HSPLjava/nio/ByteBufferAsIntBuffer;->get(I)I+]Ljava/nio/ByteBufferAsIntBuffer;Ljava/nio/ByteBufferAsIntBuffer;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;,Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/ByteBufferAsIntBuffer;->get([III)Ljava/nio/IntBuffer;
 HSPLjava/nio/ByteBufferAsIntBuffer;->ix(I)I
 HSPLjava/nio/ByteBufferAsIntBuffer;->put(I)Ljava/nio/IntBuffer;
@@ -26378,8 +26595,8 @@
 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;->get([SII)Ljava/nio/ShortBuffer;
+HSPLjava/nio/ByteBufferAsShortBuffer;-><init>(Ljava/nio/ByteBuffer;IIIIILjava/nio/ByteOrder;)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLjava/nio/ByteBufferAsShortBuffer;->get([SII)Ljava/nio/ShortBuffer;+]Ljava/nio/ByteBufferAsShortBuffer;Ljava/nio/ByteBufferAsShortBuffer;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/ByteBufferAsShortBuffer;->ix(I)I
 HSPLjava/nio/ByteBufferAsShortBuffer;->put([SII)Ljava/nio/ShortBuffer;
 HSPLjava/nio/ByteOrder;->nativeOrder()Ljava/nio/ByteOrder;
@@ -26388,7 +26605,7 @@
 HSPLjava/nio/CharBuffer;->allocate(I)Ljava/nio/CharBuffer;
 HSPLjava/nio/CharBuffer;->array()[C
 HSPLjava/nio/CharBuffer;->arrayOffset()I
-HSPLjava/nio/CharBuffer;->charAt(I)C+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;,Ljava/nio/ByteBufferAsCharBuffer;
+HSPLjava/nio/CharBuffer;->charAt(I)C
 HSPLjava/nio/CharBuffer;->clear()Ljava/nio/Buffer;
 HSPLjava/nio/CharBuffer;->flip()Ljava/nio/Buffer;
 HSPLjava/nio/CharBuffer;->get([C)Ljava/nio/CharBuffer;
@@ -26402,7 +26619,7 @@
 HSPLjava/nio/CharBuffer;->wrap(Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer;
 HSPLjava/nio/CharBuffer;->wrap([C)Ljava/nio/CharBuffer;
 HSPLjava/nio/CharBuffer;->wrap([CII)Ljava/nio/CharBuffer;
-HSPLjava/nio/DirectByteBuffer$MemoryRef;-><init>(I)V
+HSPLjava/nio/DirectByteBuffer$MemoryRef;-><init>(I)V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
 HSPLjava/nio/DirectByteBuffer$MemoryRef;-><init>(JLjava/lang/Object;)V
 HSPLjava/nio/DirectByteBuffer$MemoryRef;->free()V
 HSPLjava/nio/DirectByteBuffer;-><init>(IJLjava/io/FileDescriptor;Ljava/lang/Runnable;Z)V
@@ -26413,13 +26630,13 @@
 HSPLjava/nio/DirectByteBuffer;->asCharBuffer()Ljava/nio/CharBuffer;
 HSPLjava/nio/DirectByteBuffer;->asFloatBuffer()Ljava/nio/FloatBuffer;
 HSPLjava/nio/DirectByteBuffer;->asIntBuffer()Ljava/nio/IntBuffer;
-HSPLjava/nio/DirectByteBuffer;->asReadOnlyBuffer()Ljava/nio/ByteBuffer;+]Ljava/nio/DirectByteBuffer;Ljava/nio/DirectByteBuffer;
+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;->duplicate()Ljava/nio/MappedByteBuffer;
-HSPLjava/nio/DirectByteBuffer;->get()B
-HSPLjava/nio/DirectByteBuffer;->get(I)B
+HSPLjava/nio/DirectByteBuffer;->duplicate()Ljava/nio/ByteBuffer;+]Ljava/nio/DirectByteBuffer;Ljava/nio/DirectByteBuffer;
+HSPLjava/nio/DirectByteBuffer;->duplicate()Ljava/nio/MappedByteBuffer;+]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;
 HSPLjava/nio/DirectByteBuffer;->getChar()C
@@ -26428,7 +26645,7 @@
 HSPLjava/nio/DirectByteBuffer;->getInt()I
 HSPLjava/nio/DirectByteBuffer;->getInt(I)I+]Ljava/nio/DirectByteBuffer;Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/DirectByteBuffer;->getInt(J)I
-HSPLjava/nio/DirectByteBuffer;->getLong(I)J
+HSPLjava/nio/DirectByteBuffer;->getLong(I)J+]Ljava/nio/DirectByteBuffer;Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/DirectByteBuffer;->getLong(J)J
 HSPLjava/nio/DirectByteBuffer;->getShort()S
 HSPLjava/nio/DirectByteBuffer;->getShort(I)S+]Ljava/nio/DirectByteBuffer;Ljava/nio/DirectByteBuffer;
@@ -26443,14 +26660,14 @@
 HSPLjava/nio/DirectByteBuffer;->put(IB)Ljava/nio/ByteBuffer;
 HSPLjava/nio/DirectByteBuffer;->put(JB)Ljava/nio/ByteBuffer;
 HSPLjava/nio/DirectByteBuffer;->put(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;
-HSPLjava/nio/DirectByteBuffer;->put([BII)Ljava/nio/ByteBuffer;+]Ljava/nio/DirectByteBuffer;Ljava/nio/DirectByteBuffer;
+HSPLjava/nio/DirectByteBuffer;->put([BII)Ljava/nio/ByteBuffer;
 HSPLjava/nio/DirectByteBuffer;->putDouble(JD)Ljava/nio/ByteBuffer;
 HSPLjava/nio/DirectByteBuffer;->putFloat(JF)Ljava/nio/ByteBuffer;
 HSPLjava/nio/DirectByteBuffer;->putFloatUnchecked(IF)V
 HSPLjava/nio/DirectByteBuffer;->putInt(I)Ljava/nio/ByteBuffer;
-HSPLjava/nio/DirectByteBuffer;->putInt(II)Ljava/nio/ByteBuffer;
+HSPLjava/nio/DirectByteBuffer;->putInt(II)Ljava/nio/ByteBuffer;+]Ljava/nio/DirectByteBuffer;Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/DirectByteBuffer;->putInt(JI)Ljava/nio/ByteBuffer;
-HSPLjava/nio/DirectByteBuffer;->putLong(IJ)Ljava/nio/ByteBuffer;
+HSPLjava/nio/DirectByteBuffer;->putLong(IJ)Ljava/nio/ByteBuffer;+]Ljava/nio/DirectByteBuffer;Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/DirectByteBuffer;->putLong(J)Ljava/nio/ByteBuffer;
 HSPLjava/nio/DirectByteBuffer;->putLong(JJ)Ljava/nio/ByteBuffer;
 HSPLjava/nio/DirectByteBuffer;->putUnchecked(I[FII)V
@@ -26471,38 +26688,38 @@
 HSPLjava/nio/HeapByteBuffer;->_put(IB)V
 HSPLjava/nio/HeapByteBuffer;->asIntBuffer()Ljava/nio/IntBuffer;
 HSPLjava/nio/HeapByteBuffer;->asLongBuffer()Ljava/nio/LongBuffer;
-HSPLjava/nio/HeapByteBuffer;->asReadOnlyBuffer()Ljava/nio/ByteBuffer;
-HSPLjava/nio/HeapByteBuffer;->asShortBuffer()Ljava/nio/ShortBuffer;
-HSPLjava/nio/HeapByteBuffer;->compact()Ljava/nio/ByteBuffer;
-HSPLjava/nio/HeapByteBuffer;->duplicate()Ljava/nio/ByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->asReadOnlyBuffer()Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->asShortBuffer()Ljava/nio/ShortBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->compact()Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
+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
-HSPLjava/nio/HeapByteBuffer;->get([BII)Ljava/nio/ByteBuffer;+]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;
 HSPLjava/nio/HeapByteBuffer;->getFloat()F
-HSPLjava/nio/HeapByteBuffer;->getFloat(I)F
+HSPLjava/nio/HeapByteBuffer;->getFloat(I)F+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->getInt()I+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
-HSPLjava/nio/HeapByteBuffer;->getInt(I)I
+HSPLjava/nio/HeapByteBuffer;->getInt(I)I+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->getLong()J
 HSPLjava/nio/HeapByteBuffer;->getLong(I)J
-HSPLjava/nio/HeapByteBuffer;->getShort()S
-HSPLjava/nio/HeapByteBuffer;->getShort(I)S
+HSPLjava/nio/HeapByteBuffer;->getShort()S+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->getShort(I)S+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->getUnchecked(I[III)V
-HSPLjava/nio/HeapByteBuffer;->getUnchecked(I[SII)V
+HSPLjava/nio/HeapByteBuffer;->getUnchecked(I[SII)V+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 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(IB)Ljava/nio/ByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->put(IB)Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->put([BII)Ljava/nio/ByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->putChar(C)Ljava/nio/ByteBuffer;
-HSPLjava/nio/HeapByteBuffer;->putFloat(F)Ljava/nio/ByteBuffer;
-HSPLjava/nio/HeapByteBuffer;->putInt(I)Ljava/nio/ByteBuffer;
-HSPLjava/nio/HeapByteBuffer;->putInt(II)Ljava/nio/ByteBuffer;
+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;
 HSPLjava/nio/HeapByteBuffer;->putLong(IJ)Ljava/nio/ByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->putLong(J)Ljava/nio/ByteBuffer;
-HSPLjava/nio/HeapByteBuffer;->putShort(IS)Ljava/nio/ByteBuffer;
-HSPLjava/nio/HeapByteBuffer;->putShort(S)Ljava/nio/ByteBuffer;
-HSPLjava/nio/HeapByteBuffer;->slice()Ljava/nio/ByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->putShort(IS)Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->putShort(S)Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->slice()Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapCharBuffer;-><init>(II)V
 HSPLjava/nio/HeapCharBuffer;-><init>(IIZ)V
 HSPLjava/nio/HeapCharBuffer;-><init>([CII)V
@@ -26533,16 +26750,16 @@
 HSPLjava/nio/MappedByteBuffer;-><init>(IIIILjava/io/FileDescriptor;)V
 HSPLjava/nio/MappedByteBuffer;-><init>(IIII[BI)V
 HSPLjava/nio/MappedByteBuffer;->checkMapped()V
-HSPLjava/nio/MappedByteBuffer;->load()Ljava/nio/MappedByteBuffer;
+HSPLjava/nio/MappedByteBuffer;->load()Ljava/nio/MappedByteBuffer;+]Ljava/nio/MappedByteBuffer;Ljava/nio/DirectByteBuffer;]Lsun/misc/Unsafe;Lsun/misc/Unsafe;
 HSPLjava/nio/MappedByteBuffer;->mappingAddress(J)J
 HSPLjava/nio/MappedByteBuffer;->mappingLength(J)J
 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+]Ljava/nio/DirectByteBuffer$MemoryRef;Ljava/nio/DirectByteBuffer$MemoryRef;
+HSPLjava/nio/NioUtils;->freeDirectBuffer(Ljava/nio/ByteBuffer;)V
 HSPLjava/nio/ShortBuffer;-><init>(IIII)V
 HSPLjava/nio/ShortBuffer;-><init>(IIII[SI)V
-HSPLjava/nio/ShortBuffer;->get([S)Ljava/nio/ShortBuffer;
+HSPLjava/nio/ShortBuffer;->get([S)Ljava/nio/ShortBuffer;+]Ljava/nio/ShortBuffer;Ljava/nio/ByteBufferAsShortBuffer;
 HSPLjava/nio/ShortBuffer;->limit(I)Ljava/nio/Buffer;
 HSPLjava/nio/ShortBuffer;->position(I)Ljava/nio/Buffer;
 HSPLjava/nio/StringCharBuffer;-><init>(Ljava/lang/CharSequence;II)V
@@ -26550,7 +26767,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/HeapByteBuffer;,Ljava/nio/DirectByteBuffer;]Ljava/io/OutputStream;missing_types
 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;
@@ -26576,9 +26793,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
-HSPLjava/nio/channels/spi/AbstractInterruptibleChannel;->blockedOn(Lsun/nio/ch/Interruptible;)V
-HSPLjava/nio/channels/spi/AbstractInterruptibleChannel;->close()V+]Ljava/nio/channels/spi/AbstractInterruptibleChannel;Lsun/nio/ch/FileChannelImpl;
+HSPLjava/nio/channels/spi/AbstractInterruptibleChannel;->begin()V+]Ljava/lang/Thread;Ljava/lang/Thread;
+HSPLjava/nio/channels/spi/AbstractInterruptibleChannel;->blockedOn(Lsun/nio/ch/Interruptible;)V+]Ljava/lang/Thread;Ljava/lang/Thread;
+HSPLjava/nio/channels/spi/AbstractInterruptibleChannel;->close()V
 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
@@ -26622,27 +26839,27 @@
 HSPLjava/nio/charset/Charset;->forName(Ljava/lang/String;)Ljava/nio/charset/Charset;
 HSPLjava/nio/charset/Charset;->forNameUEE(Ljava/lang/String;)Ljava/nio/charset/Charset;
 HSPLjava/nio/charset/Charset;->isSupported(Ljava/lang/String;)Z
-HSPLjava/nio/charset/Charset;->lookup(Ljava/lang/String;)Ljava/nio/charset/Charset;+]Ljava/util/Map$Entry;Ljava/util/AbstractMap$SimpleImmutableEntry;
+HSPLjava/nio/charset/Charset;->lookup(Ljava/lang/String;)Ljava/nio/charset/Charset;
 HSPLjava/nio/charset/Charset;->lookup2(Ljava/lang/String;)Ljava/nio/charset/Charset;
 HSPLjava/nio/charset/Charset;->name()Ljava/lang/String;
 HSPLjava/nio/charset/CharsetDecoder;-><init>(Ljava/nio/charset/Charset;FF)V
 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;+]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;->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;
+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;
+HSPLjava/nio/charset/CharsetDecoder;->flush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;+]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;
 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;+]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
+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;+]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
+HSPLjava/nio/charset/CharsetDecoder;->replaceWith(Ljava/lang/String;)Ljava/nio/charset/CharsetDecoder;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/nio/charset/CharsetDecoder;->replacement()Ljava/lang/String;
-HSPLjava/nio/charset/CharsetDecoder;->reset()Ljava/nio/charset/CharsetDecoder;+]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
+HSPLjava/nio/charset/CharsetDecoder;->reset()Ljava/nio/charset/CharsetDecoder;
 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
@@ -26652,8 +26869,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;+]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;->encode(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;Z)Ljava/nio/charset/CoderResult;+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;
+HSPLjava/nio/charset/CharsetEncoder;->flush(Ljava/nio/ByteBuffer;)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
@@ -26664,7 +26881,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;+]Ljava/nio/charset/CharsetEncoder;Lcom/android/icu/charset/CharsetEncoderICU;
+HSPLjava/nio/charset/CharsetEncoder;->reset()Ljava/nio/charset/CharsetEncoder;
 HSPLjava/nio/charset/CharsetEncoder;->unmappableCharacterAction()Ljava/nio/charset/CodingErrorAction;
 HSPLjava/nio/charset/CoderResult;->isError()Z
 HSPLjava/nio/charset/CoderResult;->isOverflow()Z
@@ -26688,7 +26905,7 @@
 HSPLjava/nio/file/Files;->provider(Ljava/nio/file/Path;)Ljava/nio/file/spi/FileSystemProvider;
 HSPLjava/nio/file/Files;->read(Ljava/io/InputStream;I)[B
 HSPLjava/nio/file/Files;->readAllBytes(Ljava/nio/file/Path;)[B
-HSPLjava/nio/file/Files;->readAttributes(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes;
+HSPLjava/nio/file/Files;->readAttributes(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes;+]Ljava/nio/file/spi/FileSystemProvider;Lsun/nio/fs/LinuxFileSystemProvider;
 HSPLjava/nio/file/NoSuchFileException;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/nio/file/Paths;->get(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;
 HSPLjava/nio/file/StandardOpenOption;->values()[Ljava/nio/file/StandardOpenOption;
@@ -26696,7 +26913,7 @@
 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;->toMillis()J
-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;
@@ -26707,7 +26924,7 @@
 HSPLjava/security/CodeSigner;-><init>(Ljava/security/cert/CertPath;Ljava/security/Timestamp;)V
 HSPLjava/security/CodeSigner;->getSignerCertPath()Ljava/security/cert/CertPath;
 HSPLjava/security/DigestInputStream;-><init>(Ljava/io/InputStream;Ljava/security/MessageDigest;)V
-HSPLjava/security/DigestInputStream;->read([BII)I
+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
@@ -26753,21 +26970,21 @@
 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;missing_types
+HSPLjava/security/MessageDigest$Delegate;->engineUpdate([BII)V
 HSPLjava/security/MessageDigest;-><init>(Ljava/lang/String;)V
 HSPLjava/security/MessageDigest;->digest()[B
 HSPLjava/security/MessageDigest;->digest([B)[B
-HSPLjava/security/MessageDigest;->digest([BII)I
+HSPLjava/security/MessageDigest;->digest([BII)I+]Ljava/security/MessageDigest;Ljava/security/MessageDigest$Delegate;
 HSPLjava/security/MessageDigest;->getDigestLength()I
 HSPLjava/security/MessageDigest;->getInstance(Ljava/lang/String;)Ljava/security/MessageDigest;
 HSPLjava/security/MessageDigest;->getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/MessageDigest;
 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([BII)V
+HSPLjava/security/MessageDigest;->update([BII)V+]Ljava/security/MessageDigest;Ljava/security/MessageDigest$Delegate;
 HSPLjava/security/MessageDigestSpi;-><init>()V
 HSPLjava/security/MessageDigestSpi;->engineDigest([BII)I
 HSPLjava/security/MessageDigestSpi;->engineUpdate(Ljava/nio/ByteBuffer;)V
@@ -26785,20 +27002,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;+]Ljava/lang/ref/Reference;Ljava/lang/ref/WeakReference;
+HSPLjava/security/Provider$Service;->getImplClass()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;+]Ljava/security/Provider;missing_types]Ljava/util/Map;Ljava/util/HashMap;]Ljava/lang/Class;Ljava/lang/Class;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;
+HSPLjava/security/Provider$Service;->newInstance(Ljava/lang/Object;)Ljava/lang/Object;
 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+]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/security/Provider$ServiceKey;->hashCode()I
 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
@@ -26811,7 +27028,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;+]Ljava/security/Provider$ServiceKey;Ljava/security/Provider$ServiceKey;]Ljava/util/Map;Ljava/util/LinkedHashMap;
+HSPLjava/security/Provider;->getService(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;
 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;
@@ -26824,7 +27041,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;+]Ljava/lang/String;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
@@ -26832,7 +27049,7 @@
 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;+]Lsun/security/jca/GetInstance$Instance;Lsun/security/jca/GetInstance$Instance;
+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/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;
@@ -26977,7 +27194,7 @@
 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;+]Ljava/lang/Number;Ljava/lang/Long;]Ljava/text/DateFormat;Ljava/text/SimpleDateFormat;
+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;->get(IIILjava/util/Locale;)Ljava/text/DateFormat;
 HSPLjava/text/DateFormat;->getDateInstance(ILjava/util/Locale;)Ljava/text/DateFormat;
@@ -27009,7 +27226,7 @@
 HSPLjava/text/DecimalFormat;->clone()Ljava/lang/Object;
 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;+]Ljava/text/FieldPosition;Ljava/text/DontCareFieldPosition;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
+HSPLjava/text/DecimalFormat;->format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
 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;
@@ -27024,31 +27241,31 @@
 HSPLjava/text/DecimalFormat;->initPattern(Ljava/lang/String;)V
 HSPLjava/text/DecimalFormat;->isParseBigDecimal()Z
 HSPLjava/text/DecimalFormat;->isParseIntegerOnly()Z
-HSPLjava/text/DecimalFormat;->parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;+]Ljava/lang/Object;Ljava/lang/Long;]Ljava/text/DecimalFormat;Ljava/text/DecimalFormat;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
+HSPLjava/text/DecimalFormat;->parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Object;Ljava/lang/Long;]Ljava/text/DecimalFormat;Ljava/text/DecimalFormat;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
 HSPLjava/text/DecimalFormat;->setDecimalSeparatorAlwaysShown(Z)V
 HSPLjava/text/DecimalFormat;->setGroupingUsed(Z)V
 HSPLjava/text/DecimalFormat;->setMaximumFractionDigits(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;->setMaximumIntegerDigits(I)V
 HSPLjava/text/DecimalFormat;->setMinimumFractionDigits(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;->setMinimumIntegerDigits(I)V
 HSPLjava/text/DecimalFormat;->setParseIntegerOnly(Z)V
 HSPLjava/text/DecimalFormat;->toPattern()Ljava/lang/String;
-HSPLjava/text/DecimalFormat;->updateFieldsFromIcu()V+]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
+HSPLjava/text/DecimalFormat;->updateFieldsFromIcu()V
 HSPLjava/text/DecimalFormatSymbols;-><init>(Ljava/util/Locale;)V
 HSPLjava/text/DecimalFormatSymbols;->clone()Ljava/lang/Object;
 HSPLjava/text/DecimalFormatSymbols;->findNonFormatChar(Ljava/lang/String;C)C
-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;->fromIcuInstance(Landroid/icu/text/DecimalFormatSymbols;)Ljava/text/DecimalFormatSymbols;
 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;+]Ljava/text/DecimalFormatSymbols;Ljava/text/DecimalFormatSymbols;]Ljava/util/Currency;Ljava/util/Currency;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;
+HSPLjava/text/DecimalFormatSymbols;->getIcuDecimalFormatSymbols()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+]Llibcore/icu/DecimalFormatData;Llibcore/icu/DecimalFormatData;
+HSPLjava/text/DecimalFormatSymbols;->initialize(Ljava/util/Locale;)V+]Ljava/lang/String;Ljava/lang/String;]Llibcore/icu/DecimalFormatData;Llibcore/icu/DecimalFormatData;
 HSPLjava/text/DecimalFormatSymbols;->initializeCurrency(Ljava/util/Locale;)V
-HSPLjava/text/DecimalFormatSymbols;->maybeStripMarkers(Ljava/lang/String;C)C
+HSPLjava/text/DecimalFormatSymbols;->maybeStripMarkers(Ljava/lang/String;C)C+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/text/DecimalFormatSymbols;->setCurrency(Ljava/util/Currency;)V
 HSPLjava/text/DecimalFormatSymbols;->setCurrencySymbol(Ljava/lang/String;)V
 HSPLjava/text/DecimalFormatSymbols;->setDecimalSeparator(C)V
@@ -27080,7 +27297,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;+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/text/Format;Ljava/text/SimpleDateFormat;
+HSPLjava/text/Format;->format(Ljava/lang/Object;)Ljava/lang/String;
 HSPLjava/text/IcuIteratorWrapper;-><init>(Landroid/icu/text/BreakIterator;)V
 HSPLjava/text/IcuIteratorWrapper;->checkOffset(ILjava/text/CharacterIterator;)V
 HSPLjava/text/IcuIteratorWrapper;->following(I)I
@@ -27131,9 +27348,9 @@
 HSPLjava/text/SimpleDateFormat;-><init>(Ljava/lang/String;)V
 HSPLjava/text/SimpleDateFormat;-><init>(Ljava/lang/String;Ljava/util/Locale;)V
 HSPLjava/text/SimpleDateFormat;->checkNegativeNumberExpression()V
-HSPLjava/text/SimpleDateFormat;->compile(Ljava/lang/String;)[C
-HSPLjava/text/SimpleDateFormat;->encode(IILjava/lang/StringBuilder;)V
-HSPLjava/text/SimpleDateFormat;->format(Ljava/util/Date;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;+]Ljava/text/FieldPosition;Ljava/text/FieldPosition;
+HSPLjava/text/SimpleDateFormat;->compile(Ljava/lang/String;)[C+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/text/SimpleDateFormat;->encode(IILjava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+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;+]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;
@@ -27147,16 +27364,16 @@
 HSPLjava/text/SimpleDateFormat;->matchString(Ljava/lang/String;II[Ljava/lang/String;Ljava/text/CalendarBuilder;)I
 HSPLjava/text/SimpleDateFormat;->parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/util/Date;
 HSPLjava/text/SimpleDateFormat;->parseAmbiguousDatesAsAfter(Ljava/util/Date;)V
-HSPLjava/text/SimpleDateFormat;->parseInternal(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/util/Date;+]Ljava/text/CalendarBuilder;Ljava/text/CalendarBuilder;]Ljava/util/Calendar;Ljava/util/GregorianCalendar;
+HSPLjava/text/SimpleDateFormat;->parseInternal(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/util/Date;+]Ljava/lang/String;Ljava/lang/String;]Ljava/text/CalendarBuilder;Ljava/text/CalendarBuilder;]Ljava/util/Calendar;Ljava/util/GregorianCalendar;
 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;->subFormat(IILjava/text/Format$FieldDelegate;Ljava/lang/StringBuffer;Z)V+]Ljava/text/Format$FieldDelegate;Ljava/text/FieldPosition$Delegate;,Ljava/text/DontCareFieldPosition$1;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/util/Calendar;Ljava/util/GregorianCalendar;
 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;->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;->useDateFormatSymbols()Z+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Object;Ljava/util/GregorianCalendar;]Ljava/lang/Class;Ljava/lang/Class;
+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
@@ -27455,8 +27672,8 @@
 HSPLjava/time/temporal/ChronoField;->values()[Ljava/time/temporal/ChronoField;
 HSPLjava/time/temporal/ChronoUnit;->getDuration()Ljava/time/Duration;
 HSPLjava/time/temporal/ChronoUnit;->values()[Ljava/time/temporal/ChronoUnit;
-HSPLjava/time/temporal/TemporalAccessor;->get(Ljava/time/temporal/TemporalField;)I
-HSPLjava/time/temporal/TemporalAccessor;->range(Ljava/time/temporal/TemporalField;)Ljava/time/temporal/ValueRange;
+HSPLjava/time/temporal/TemporalAccessor;->get(Ljava/time/temporal/TemporalField;)I+]Ljava/time/temporal/TemporalAccessor;Ljava/time/format/Parsed;]Ljava/time/temporal/ValueRange;Ljava/time/temporal/ValueRange;
+HSPLjava/time/temporal/TemporalAccessor;->range(Ljava/time/temporal/TemporalField;)Ljava/time/temporal/ValueRange;+]Ljava/time/temporal/TemporalField;Ljava/time/temporal/ChronoField;]Ljava/time/temporal/TemporalAccessor;Ljava/time/format/Parsed;
 HSPLjava/time/temporal/TemporalAdjusters$$ExternalSyntheticLambda11;-><init>(I)V
 HSPLjava/time/temporal/TemporalAdjusters$$ExternalSyntheticLambda11;->adjustInto(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;
 HSPLjava/time/temporal/TemporalAdjusters$$ExternalSyntheticLambda1;-><init>(I)V
@@ -27514,17 +27731,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;Ljava/util/HashSet;,Ljava/util/LinkedHashSet;]Ljava/util/Collection;megamorphic_types]Ljava/util/Iterator;megamorphic_types
+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;->clear()V
-HSPLjava/util/AbstractCollection;->contains(Ljava/lang/Object;)Z
-HSPLjava/util/AbstractCollection;->containsAll(Ljava/util/Collection;)Z
+HSPLjava/util/AbstractCollection;->contains(Ljava/lang/Object;)Z+]Ljava/lang/Object;missing_types]Ljava/util/Iterator;Ljava/util/AbstractList$Itr;
+HSPLjava/util/AbstractCollection;->containsAll(Ljava/util/Collection;)Z+]Ljava/util/AbstractCollection;missing_types]Ljava/util/Collection;missing_types]Ljava/util/Iterator;missing_types
 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;->retainAll(Ljava/util/Collection;)Z
-HSPLjava/util/AbstractCollection;->toArray()[Ljava/lang/Object;+]Ljava/util/AbstractCollection;missing_types]Ljava/util/Iterator;missing_types
+HSPLjava/util/AbstractCollection;->retainAll(Ljava/util/Collection;)Z+]Ljava/util/AbstractCollection;Ljava/util/LinkedHashSet;]Ljava/util/Collection;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/LinkedHashMap$LinkedKeyIterator;
+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;
-HSPLjava/util/AbstractCollection;->toString()Ljava/lang/String;
+HSPLjava/util/AbstractCollection;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/AbstractCollection;Ljava/util/ArrayList;,Ljava/util/PriorityQueue;]Ljava/util/Iterator;Ljava/util/PriorityQueue$Itr;,Ljava/util/ArrayList$Itr;
 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
@@ -27585,11 +27802,12 @@
 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/LinkedHashMap$LinkedHashMapEntry;]Ljava/lang/Object;missing_types]Ljava/util/AbstractMap;Ljava/util/LinkedHashMap;]Ljava/util/Map;Ljava/util/LinkedHashMap;]Ljava/util/Iterator;Ljava/util/LinkedHashMap$LinkedEntryIterator;]Ljava/util/Set;Ljava/util/LinkedHashMap$LinkedEntrySet;
+HSPLjava/util/AbstractMap;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/AbstractMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/AbstractMap;->hashCode()I
-HSPLjava/util/AbstractMap;->isEmpty()Z+]Ljava/util/AbstractMap;missing_types
-HSPLjava/util/AbstractMap;->putAll(Ljava/util/Map;)V+]Ljava/util/Map$Entry;Ljava/util/AbstractMap$SimpleImmutableEntry;]Ljava/util/Map;Ljava/util/Collections$SingletonMap;]Ljava/util/Iterator;Ljava/util/Collections$1;]Ljava/util/Set;Ljava/util/Collections$SingletonSet;
+HSPLjava/util/AbstractMap;->hashCode()I+]Ljava/util/Map$Entry;Ljava/util/LinkedHashMap$LinkedHashMapEntry;]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;->putAll(Ljava/util/Map;)V
+HSPLjava/util/AbstractMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/AbstractMap;->size()I
 HSPLjava/util/AbstractMap;->toString()Ljava/lang/String;
 HSPLjava/util/AbstractMap;->values()Ljava/util/Collection;
@@ -27602,7 +27820,7 @@
 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
+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
 HSPLjava/util/ArrayDeque$$ExternalSyntheticLambda1;-><init>(Ljava/util/ArrayDeque;)V
 HSPLjava/util/ArrayDeque$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
@@ -27617,7 +27835,7 @@
 HSPLjava/util/ArrayDeque;-><init>(I)V
 HSPLjava/util/ArrayDeque;-><init>(Ljava/util/Collection;)V
 HSPLjava/util/ArrayDeque;->add(Ljava/lang/Object;)Z+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
-HSPLjava/util/ArrayDeque;->addAll(Ljava/util/Collection;)Z+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Ljava/util/Collection;Ljava/util/ArrayDeque;
+HSPLjava/util/ArrayDeque;->addAll(Ljava/util/Collection;)Z
 HSPLjava/util/ArrayDeque;->addFirst(Ljava/lang/Object;)V
 HSPLjava/util/ArrayDeque;->addLast(Ljava/lang/Object;)V
 HSPLjava/util/ArrayDeque;->checkInvariants()V
@@ -27629,7 +27847,7 @@
 HSPLjava/util/ArrayDeque;->delete(I)Z
 HSPLjava/util/ArrayDeque;->descendingIterator()Ljava/util/Iterator;
 HSPLjava/util/ArrayDeque;->elementAt([Ljava/lang/Object;I)Ljava/lang/Object;
-HSPLjava/util/ArrayDeque;->forEach(Ljava/util/function/Consumer;)V+]Ljava/util/function/Consumer;Ljava/util/ArrayDeque$$ExternalSyntheticLambda1;
+HSPLjava/util/ArrayDeque;->forEach(Ljava/util/function/Consumer;)V
 HSPLjava/util/ArrayDeque;->getFirst()Ljava/lang/Object;
 HSPLjava/util/ArrayDeque;->getLast()Ljava/lang/Object;
 HSPLjava/util/ArrayDeque;->grow(I)V
@@ -27645,12 +27863,12 @@
 HSPLjava/util/ArrayDeque;->pollFirst()Ljava/lang/Object;
 HSPLjava/util/ArrayDeque;->pollLast()Ljava/lang/Object;
 HSPLjava/util/ArrayDeque;->pop()Ljava/lang/Object;
-HSPLjava/util/ArrayDeque;->push(Ljava/lang/Object;)V
+HSPLjava/util/ArrayDeque;->push(Ljava/lang/Object;)V+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
 HSPLjava/util/ArrayDeque;->remove()Ljava/lang/Object;+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
 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;->sub(III)I
 HSPLjava/util/ArrayDeque;->toArray()[Ljava/lang/Object;
@@ -27690,34 +27908,35 @@
 HSPLjava/util/ArrayList$SubList;->subList(II)Ljava/util/List;
 HSPLjava/util/ArrayList$SubList;->toArray()[Ljava/lang/Object;
 HSPLjava/util/ArrayList$SubList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLjava/util/ArrayList$SubList;->updateSizeAndModCount(I)V
 HSPLjava/util/ArrayList;->-$$Nest$fgetsize(Ljava/util/ArrayList;)I
 HSPLjava/util/ArrayList;-><init>()V
 HSPLjava/util/ArrayList;-><init>(I)V
-HSPLjava/util/ArrayList;-><init>(Ljava/util/Collection;)V+]Ljava/lang/Object;Landroid/net/Uri$PathSegments;]Ljava/util/Collection;Ljava/util/Collections$EmptyList;,Landroid/net/Uri$PathSegments;
+HSPLjava/util/ArrayList;-><init>(Ljava/util/Collection;)V+]Ljava/lang/Object;missing_types]Ljava/util/Collection;missing_types
 HSPLjava/util/ArrayList;->add(ILjava/lang/Object;)V
 HSPLjava/util/ArrayList;->add(Ljava/lang/Object;)Z
 HSPLjava/util/ArrayList;->add(Ljava/lang/Object;[Ljava/lang/Object;I)V
 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;ZII)Z
 HSPLjava/util/ArrayList;->checkForComodification(I)V
 HSPLjava/util/ArrayList;->clear()V
 HSPLjava/util/ArrayList;->clone()Ljava/lang/Object;
-HSPLjava/util/ArrayList;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/ArrayList;->contains(Ljava/lang/Object;)Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLjava/util/ArrayList;->elementAt([Ljava/lang/Object;I)Ljava/lang/Object;
 HSPLjava/util/ArrayList;->elementData(I)Ljava/lang/Object;
 HSPLjava/util/ArrayList;->ensureCapacity(I)V
-HSPLjava/util/ArrayList;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Ljava/util/ArrayList;
+HSPLjava/util/ArrayList;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/ArrayList;->equalsArrayList(Ljava/util/ArrayList;)Z
 HSPLjava/util/ArrayList;->equalsRange(Ljava/util/List;II)Z
 HSPLjava/util/ArrayList;->fastRemove([Ljava/lang/Object;I)V
-HSPLjava/util/ArrayList;->forEach(Ljava/util/function/Consumer;)V
+HSPLjava/util/ArrayList;->forEach(Ljava/util/function/Consumer;)V+]Ljava/util/function/Consumer;Ljava/util/ArrayDeque$$ExternalSyntheticLambda1;
 HSPLjava/util/ArrayList;->get(I)Ljava/lang/Object;+]Ljava/util/ArrayList;missing_types
 HSPLjava/util/ArrayList;->grow()[Ljava/lang/Object;
 HSPLjava/util/ArrayList;->grow(I)[Ljava/lang/Object;
 HSPLjava/util/ArrayList;->hashCode()I
 HSPLjava/util/ArrayList;->hashCodeRange(II)I
-HSPLjava/util/ArrayList;->indexOf(Ljava/lang/Object;)I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLjava/util/ArrayList;->indexOf(Ljava/lang/Object;)I+]Ljava/util/ArrayList;missing_types
 HSPLjava/util/ArrayList;->indexOfRange(Ljava/lang/Object;II)I+]Ljava/lang/Object;missing_types
 HSPLjava/util/ArrayList;->isEmpty()Z
 HSPLjava/util/ArrayList;->iterator()Ljava/util/Iterator;
@@ -27727,7 +27946,7 @@
 HSPLjava/util/ArrayList;->rangeCheckForAdd(I)V
 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;->removeIf(Ljava/util/function/Predicate;II)Z
@@ -27788,9 +28007,9 @@
 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;->deepHashCode([Ljava/lang/Object;)I
+HSPLjava/util/Arrays;->deepHashCode([Ljava/lang/Object;)I+]Ljava/lang/Object;missing_types]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/util/Arrays;->deepToString([Ljava/lang/Object;)Ljava/lang/String;
-HSPLjava/util/Arrays;->deepToString([Ljava/lang/Object;Ljava/lang/StringBuilder;Ljava/util/Set;)V
+HSPLjava/util/Arrays;->deepToString([Ljava/lang/Object;Ljava/lang/StringBuilder;Ljava/util/Set;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;Ljava/lang/StackTraceElement;]Ljava/lang/Class;Ljava/lang/Class;]Ljava/util/Set;Ljava/util/HashSet;
 HSPLjava/util/Arrays;->equals([B[B)Z
 HSPLjava/util/Arrays;->equals([F[F)Z
 HSPLjava/util/Arrays;->equals([I[I)Z
@@ -27814,7 +28033,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
+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
@@ -27839,6 +28058,8 @@
 HSPLjava/util/Base64$Decoder;->decode(Ljava/lang/String;)[B
 HSPLjava/util/Base64$Decoder;->decode([B)[B
 HSPLjava/util/Base64$Decoder;->decode0([BII[B)I
+HSPLjava/util/Base64$Decoder;->decodeBlock([BII[BIZZ)I
+HSPLjava/util/Base64$Decoder;->decodedOutLength([BII)I
 HSPLjava/util/Base64;->getDecoder()Ljava/util/Base64$Decoder;
 HSPLjava/util/Base64;->getEncoder()Ljava/util/Base64$Encoder;
 HSPLjava/util/Base64;->getMimeDecoder()Ljava/util/Base64$Decoder;
@@ -27851,7 +28072,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;+][J[J
+HSPLjava/util/BitSet;->clone()Ljava/lang/Object;
 HSPLjava/util/BitSet;->ensureCapacity(I)V
 HSPLjava/util/BitSet;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/BitSet;->expandTo(I)V
@@ -27913,13 +28134,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+]Ljava/util/Date;Ljava/util/Date;]Ljava/util/Calendar;Ljava/util/GregorianCalendar;
-HSPLjava/util/Calendar;->setTimeInMillis(J)V
+HSPLjava/util/Calendar;->setTime(Ljava/util/Date;)V
+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+]Ljava/util/concurrent/ConcurrentMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/lang/Integer;Ljava/lang/Integer;
+HSPLjava/util/Calendar;->setWeekCountData(Ljava/util/Locale;)V
 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;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/HashMap$EntryIterator;
+HSPLjava/util/Collection;->removeIf(Ljava/util/function/Predicate;)Z+]Ljava/util/Collection;Ljava/util/LinkedList;,Ljava/util/HashSet;,Ljava/util/HashMap$EntrySet;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Ljava/util/HashMap$EntryIterator;,Ljava/util/LinkedList$ListItr;
 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
@@ -28004,12 +28225,12 @@
 HSPLjava/util/Collections$SynchronizedCollection;->isEmpty()Z
 HSPLjava/util/Collections$SynchronizedCollection;->iterator()Ljava/util/Iterator;
 HSPLjava/util/Collections$SynchronizedCollection;->remove(Ljava/lang/Object;)Z
-HSPLjava/util/Collections$SynchronizedCollection;->size()I+]Ljava/util/Collection;Ljava/util/ArrayList;
+HSPLjava/util/Collections$SynchronizedCollection;->size()I
 HSPLjava/util/Collections$SynchronizedCollection;->toArray()[Ljava/lang/Object;
-HSPLjava/util/Collections$SynchronizedCollection;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;+]Ljava/util/Collection;Ljava/util/ArrayList;
+HSPLjava/util/Collections$SynchronizedCollection;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLjava/util/Collections$SynchronizedCollection;->toString()Ljava/lang/String;
 HSPLjava/util/Collections$SynchronizedList;-><init>(Ljava/util/List;)V
-HSPLjava/util/Collections$SynchronizedList;->get(I)Ljava/lang/Object;+]Ljava/util/List;Ljava/util/ArrayList;
+HSPLjava/util/Collections$SynchronizedList;->get(I)Ljava/lang/Object;
 HSPLjava/util/Collections$SynchronizedMap;-><init>(Ljava/util/Map;)V
 HSPLjava/util/Collections$SynchronizedMap;->clear()V
 HSPLjava/util/Collections$SynchronizedMap;->containsKey(Ljava/lang/Object;)Z
@@ -28031,10 +28252,10 @@
 HSPLjava/util/Collections$UnmodifiableCollection$1;->hasNext()Z+]Ljava/util/Iterator;megamorphic_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;megamorphic_types
+HSPLjava/util/Collections$UnmodifiableCollection;->contains(Ljava/lang/Object;)Z+]Ljava/util/Collection;Ljava/util/HashSet;,Ljava/util/RegularEnumSet;,Ljava/util/LinkedHashSet;,Ljava/util/ArrayList;
 HSPLjava/util/Collections$UnmodifiableCollection;->containsAll(Ljava/util/Collection;)Z
 HSPLjava/util/Collections$UnmodifiableCollection;->forEach(Ljava/util/function/Consumer;)V
-HSPLjava/util/Collections$UnmodifiableCollection;->isEmpty()Z+]Ljava/util/Collection;Ljava/util/ArrayList;,Ljava/util/TreeMap$KeySet;
+HSPLjava/util/Collections$UnmodifiableCollection;->isEmpty()Z
 HSPLjava/util/Collections$UnmodifiableCollection;->iterator()Ljava/util/Iterator;
 HSPLjava/util/Collections$UnmodifiableCollection;->size()I+]Ljava/util/Collection;missing_types
 HSPLjava/util/Collections$UnmodifiableCollection;->stream()Ljava/util/stream/Stream;
@@ -28052,24 +28273,24 @@
 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;-><init>(Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;)V+]Ljava/util/Collection;missing_types
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;->hasNext()Z+]Ljava/util/Iterator;missing_types
+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;missing_types
 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;missing_types
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;->getValue()Ljava/lang/Object;+]Ljava/util/Map$Entry;missing_types
 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
 HSPLjava/util/Collections$UnmodifiableMap;->containsKey(Ljava/lang/Object;)Z
-HSPLjava/util/Collections$UnmodifiableMap;->entrySet()Ljava/util/Set;
+HSPLjava/util/Collections$UnmodifiableMap;->entrySet()Ljava/util/Set;+]Ljava/util/Map;missing_types
 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;+]Ljava/util/Map;missing_types
+HSPLjava/util/Collections$UnmodifiableMap;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/Map;Ljava/util/HashMap;,Ljava/util/LinkedHashMap;,Ljava/util/TreeMap;,Ljava/util/EnumMap;
 HSPLjava/util/Collections$UnmodifiableMap;->hashCode()I
 HSPLjava/util/Collections$UnmodifiableMap;->isEmpty()Z
-HSPLjava/util/Collections$UnmodifiableMap;->keySet()Ljava/util/Set;
+HSPLjava/util/Collections$UnmodifiableMap;->keySet()Ljava/util/Set;+]Ljava/util/Map;missing_types
 HSPLjava/util/Collections$UnmodifiableMap;->size()I
 HSPLjava/util/Collections$UnmodifiableMap;->toString()Ljava/lang/String;
 HSPLjava/util/Collections$UnmodifiableMap;->values()Ljava/util/Collection;
@@ -28079,7 +28300,7 @@
 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+]Ljava/util/Collection;Ljava/util/ArrayList;
+HSPLjava/util/Collections;->addAll(Ljava/util/Collection;[Ljava/lang/Object;)Z
 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
@@ -28091,8 +28312,8 @@
 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+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/Comparable;Ljava/lang/Integer;
-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;Ljava/util/ArrayList;
+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/util/Comparator;)Ljava/lang/Object;
@@ -28111,7 +28332,7 @@
 HSPLjava/util/Collections;->singletonList(Ljava/lang/Object;)Ljava/util/List;
 HSPLjava/util/Collections;->singletonMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;
 HSPLjava/util/Collections;->sort(Ljava/util/List;)V
-HSPLjava/util/Collections;->sort(Ljava/util/List;Ljava/util/Comparator;)V
+HSPLjava/util/Collections;->sort(Ljava/util/List;Ljava/util/Comparator;)V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLjava/util/Collections;->swap(Ljava/util/List;II)V
 HSPLjava/util/Collections;->synchronizedCollection(Ljava/util/Collection;)Ljava/util/Collection;
 HSPLjava/util/Collections;->synchronizedCollection(Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/Collection;
@@ -28164,7 +28385,7 @@
 HSPLjava/util/Currency;-><init>(Landroid/icu/util/Currency;)V
 HSPLjava/util/Currency;->getCurrencyCode()Ljava/lang/String;
 HSPLjava/util/Currency;->getInstance(Ljava/lang/String;)Ljava/util/Currency;
-HSPLjava/util/Currency;->getInstance(Ljava/util/Locale;)Ljava/util/Currency;+]Ljava/util/Locale;Ljava/util/Locale;]Landroid/icu/util/Currency;Landroid/icu/util/Currency;
+HSPLjava/util/Currency;->getInstance(Ljava/util/Locale;)Ljava/util/Currency;
 HSPLjava/util/Currency;->getSymbol(Ljava/util/Locale;)Ljava/lang/String;
 HSPLjava/util/Date;-><init>()V
 HSPLjava/util/Date;-><init>(J)V
@@ -28232,9 +28453,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;+]Ljava/lang/Enum;missing_types
+HSPLjava/util/EnumMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/EnumMap;->getKeyUniverse(Ljava/lang/Class;)[Ljava/lang/Enum;
-HSPLjava/util/EnumMap;->isValidKey(Ljava/lang/Object;)Z+]Ljava/lang/Object;missing_types
+HSPLjava/util/EnumMap;->isValidKey(Ljava/lang/Object;)Z
 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;
@@ -28268,66 +28489,59 @@
 HSPLjava/util/Formatter$DateTime;->isValid(C)Z
 HSPLjava/util/Formatter$FixedString;-><init>(Ljava/util/Formatter;Ljava/lang/String;II)V
 HSPLjava/util/Formatter$FixedString;->index()I
-HSPLjava/util/Formatter$FixedString;->print(Ljava/lang/Object;Ljava/util/Locale;)V
+HSPLjava/util/Formatter$FixedString;->print(Ljava/lang/Object;Ljava/util/Locale;)V+]Ljava/lang/Appendable;Ljava/lang/StringBuilder;
 HSPLjava/util/Formatter$Flags;->-$$Nest$madd(Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;)Ljava/util/Formatter$Flags;
 HSPLjava/util/Formatter$Flags;-><init>(I)V
 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;II)Ljava/util/Formatter$Flags;+]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;
+HSPLjava/util/Formatter$Flags;->parse(Ljava/lang/String;II)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;-><init>(Ljava/util/Formatter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/util/Formatter$FormatSpecifier;->addZeros(Ljava/lang/StringBuilder;I)V
 HSPLjava/util/Formatter$FormatSpecifier;->adjustWidth(ILjava/util/Formatter$Flags;Z)I
-HSPLjava/util/Formatter$FormatSpecifier;->appendJustified(Ljava/lang/Appendable;Ljava/lang/CharSequence;)Ljava/lang/Appendable;+]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/lang/StringBuilder;]Ljava/lang/Appendable;Ljava/lang/StringBuilder;
 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;->checkFloat()V
-HSPLjava/util/Formatter$FormatSpecifier;->checkGeneral()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(C)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;->index()I
-HSPLjava/util/Formatter$FormatSpecifier;->index(Ljava/lang/String;)I
 HSPLjava/util/Formatter$FormatSpecifier;->leadingSign(Ljava/lang/StringBuilder;Z)Ljava/lang/StringBuilder;
 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;Ljava/lang/CharSequence;ILjava/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;]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/lang/StringBuilder;
-HSPLjava/util/Formatter$FormatSpecifier;->precision(Ljava/lang/String;)I
+HSPLjava/util/Formatter$FormatSpecifier;->localizedMagnitude(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;ILjava/util/Formatter$Flags;ILjava/util/Locale;)Ljava/lang/StringBuilder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;]Ljava/util/Locale;Ljava/util/Locale;]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;,Ljava/lang/String;]Ljava/text/DecimalFormatSymbols;Ljava/text/DecimalFormatSymbols;
 HSPLjava/util/Formatter$FormatSpecifier;->print(BLjava/util/Locale;)V
 HSPLjava/util/Formatter$FormatSpecifier;->print(DLjava/util/Locale;)V
 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(JLjava/util/Locale;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;
 HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/lang/Object;Ljava/util/Locale;)V
 HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/lang/String;Ljava/util/Locale;)V
-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;DLjava/util/Locale;Ljava/util/Formatter$Flags;CIZ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]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;
 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;Ljava/util/Locale;)V
-HSPLjava/util/Formatter$FormatSpecifier;->printCharacter(Ljava/lang/Object;Ljava/util/Locale;)V+]Ljava/lang/Character;Ljava/lang/Character;
+HSPLjava/util/Formatter$FormatSpecifier;->printCharacter(Ljava/lang/Object;Ljava/util/Locale;)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+]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
 HSPLjava/util/Formatter$FormatSpecifier;->trailingSign(Ljava/lang/StringBuilder;Z)Ljava/lang/StringBuilder;
-HSPLjava/util/Formatter$FormatSpecifier;->trailingZeros(Ljava/lang/StringBuilder;I)V
-HSPLjava/util/Formatter$FormatSpecifier;->width(Ljava/lang/String;)I
-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$FormatSpecifier;->trailingZeros(Ljava/lang/StringBuilder;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLjava/util/Formatter$FormatSpecifierParser;-><init>(Ljava/util/Formatter;Ljava/lang/String;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/util/Formatter$FormatSpecifierParser;->advance()C+]Ljava/lang/String;Ljava/lang/String;
 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;->isEnd()Z+]Ljava/lang/String;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$FormatSpecifierParser;->peek()C+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/util/Formatter;->-$$Nest$fgeta(Ljava/util/Formatter;)Ljava/lang/Appendable;
-HSPLjava/util/Formatter;->-$$Nest$fgetzero(Ljava/util/Formatter;)C
 HSPLjava/util/Formatter;-><init>()V
 HSPLjava/util/Formatter;-><init>(Ljava/lang/Appendable;)V
 HSPLjava/util/Formatter;-><init>(Ljava/lang/Appendable;Ljava/util/Locale;)V
@@ -28335,19 +28549,18 @@
 HSPLjava/util/Formatter;-><init>(Ljava/util/Locale;Ljava/lang/Appendable;)V
 HSPLjava/util/Formatter;->close()V
 HSPLjava/util/Formatter;->ensureOpen()V
-HSPLjava/util/Formatter;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter;
+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/List;Ljava/util/ArrayList;]Ljava/util/Formatter$FormatString;Ljava/util/Formatter$FixedString;,Ljava/util/Formatter$FormatSpecifier;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-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/List;+]Ljava/util/Formatter$FormatSpecifierParser;Ljava/util/Formatter$FormatSpecifierParser;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLjava/util/Formatter;->toString()Ljava/lang/String;
-HSPLjava/util/GregorianCalendar;-><init>()V+]Ljava/util/GregorianCalendar;Ljava/util/GregorianCalendar;
+HSPLjava/util/Formatter;->parse(Ljava/lang/String;)Ljava/util/List;+]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>(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+]Lsun/util/calendar/Gregorian;Lsun/util/calendar/Gregorian;]Ljava/util/GregorianCalendar;Ljava/util/GregorianCalendar;
+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
@@ -28390,7 +28603,7 @@
 HSPLjava/util/HashMap$HashIterator;->nextNode()Ljava/util/HashMap$Node;
 HSPLjava/util/HashMap$HashIterator;->remove()V
 HSPLjava/util/HashMap$HashMapSpliterator;-><init>(Ljava/util/HashMap;IIII)V
-HSPLjava/util/HashMap$HashMapSpliterator;->estimateSize()J
+HSPLjava/util/HashMap$HashMapSpliterator;->estimateSize()J+]Ljava/util/HashMap$HashMapSpliterator;Ljava/util/HashMap$KeySpliterator;
 HSPLjava/util/HashMap$HashMapSpliterator;->getFence()I
 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;
@@ -28414,7 +28627,7 @@
 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;->getTreeNode(ILjava/lang/Object;)Ljava/util/HashMap$TreeNode;
+HSPLjava/util/HashMap$TreeNode;->getTreeNode(ILjava/lang/Object;)Ljava/util/HashMap$TreeNode;+]Ljava/util/HashMap$TreeNode;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;->rotateLeft(Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;)Ljava/util/HashMap$TreeNode;
@@ -28423,7 +28636,7 @@
 HSPLjava/util/HashMap$TreeNode;->treeify([Ljava/util/HashMap$Node;)V
 HSPLjava/util/HashMap$TreeNode;->untreeify(Ljava/util/HashMap;)Ljava/util/HashMap$Node;
 HSPLjava/util/HashMap$ValueIterator;-><init>(Ljava/util/HashMap;)V
-HSPLjava/util/HashMap$ValueIterator;->next()Ljava/lang/Object;
+HSPLjava/util/HashMap$ValueIterator;->next()Ljava/lang/Object;+]Ljava/util/HashMap$ValueIterator;Ljava/util/HashMap$ValueIterator;
 HSPLjava/util/HashMap$ValueSpliterator;-><init>(Ljava/util/HashMap;IIII)V
 HSPLjava/util/HashMap$ValueSpliterator;->characteristics()I
 HSPLjava/util/HashMap$ValueSpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V
@@ -28438,7 +28651,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+]Ljava/util/HashMap;Ljava/util/HashMap;
+HSPLjava/util/HashMap;-><init>(Ljava/util/Map;)V
 HSPLjava/util/HashMap;->afterNodeAccess(Ljava/util/HashMap$Node;)V
 HSPLjava/util/HashMap;->afterNodeInsertion(Z)V
 HSPLjava/util/HashMap;->afterNodeRemoval(Ljava/util/HashMap$Node;)V
@@ -28451,7 +28664,7 @@
 HSPLjava/util/HashMap;->entrySet()Ljava/util/Set;
 HSPLjava/util/HashMap;->forEach(Ljava/util/function/BiConsumer;)V
 HSPLjava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/HashMap;missing_types
-HSPLjava/util/HashMap;->getNode(Ljava/lang/Object;)Ljava/util/HashMap$Node;+]Ljava/lang/Object;megamorphic_types
+HSPLjava/util/HashMap;->getNode(Ljava/lang/Object;)Ljava/util/HashMap$Node;+]Ljava/lang/Object;megamorphic_types]Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;
 HSPLjava/util/HashMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/HashMap;->hash(Ljava/lang/Object;)I+]Ljava/lang/Object;megamorphic_types
 HSPLjava/util/HashMap;->internalWriteEntries(Ljava/io/ObjectOutputStream;)V
@@ -28470,11 +28683,11 @@
 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;->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
-HSPLjava/util/HashMap;->removeNode(ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/util/HashMap$Node;+]Ljava/util/HashMap;missing_types]Ljava/lang/Object;missing_types
+HSPLjava/util/HashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/HashMap;->removeNode(ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/util/HashMap$Node;+]Ljava/util/HashMap;missing_types]Ljava/lang/Object;missing_types]Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;
 HSPLjava/util/HashMap;->replacementNode(Ljava/util/HashMap$Node;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node;
 HSPLjava/util/HashMap;->replacementTreeNode(Ljava/util/HashMap$Node;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode;
-HSPLjava/util/HashMap;->resize()[Ljava/util/HashMap$Node;
+HSPLjava/util/HashMap;->resize()[Ljava/util/HashMap$Node;+]Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;
 HSPLjava/util/HashMap;->size()I
 HSPLjava/util/HashMap;->tableSizeFor(I)I
 HSPLjava/util/HashMap;->treeifyBin([Ljava/util/HashMap$Node;I)V
@@ -28493,8 +28706,8 @@
 HSPLjava/util/HashSet;->isEmpty()Z
 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;
-HSPLjava/util/HashSet;->size()I+]Ljava/util/HashMap;Ljava/util/HashMap;,Ljava/util/LinkedHashMap;
+HSPLjava/util/HashSet;->remove(Ljava/lang/Object;)Z
+HSPLjava/util/HashSet;->size()I
 HSPLjava/util/HashSet;->spliterator()Ljava/util/Spliterator;
 HSPLjava/util/HashSet;->writeObject(Ljava/io/ObjectOutputStream;)V
 HSPLjava/util/Hashtable$EntrySet;-><init>(Ljava/util/Hashtable;)V
@@ -28524,7 +28737,7 @@
 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;+]Ljava/lang/Object;Ljava/lang/String;
+HSPLjava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/Hashtable;->getEnumeration(I)Ljava/util/Enumeration;
 HSPLjava/util/Hashtable;->getIterator(I)Ljava/util/Iterator;
 HSPLjava/util/Hashtable;->isEmpty()Z
@@ -28544,6 +28757,7 @@
 HSPLjava/util/IdentityHashMap$EntryIterator;->next()Ljava/lang/Object;
 HSPLjava/util/IdentityHashMap$EntryIterator;->next()Ljava/util/Map$Entry;
 HSPLjava/util/IdentityHashMap$EntrySet;-><init>(Ljava/util/IdentityHashMap;)V
+HSPLjava/util/IdentityHashMap$EntrySet;-><init>(Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap$EntrySet-IA;)V
 HSPLjava/util/IdentityHashMap$EntrySet;->iterator()Ljava/util/Iterator;
 HSPLjava/util/IdentityHashMap$EntrySet;->size()I
 HSPLjava/util/IdentityHashMap$IdentityHashMapIterator;-><init>(Ljava/util/IdentityHashMap;)V
@@ -28602,9 +28816,10 @@
 HSPLjava/util/ImmutableCollections$SetN;-><init>([Ljava/lang/Object;)V
 HSPLjava/util/ImmutableCollections$SetN;->contains(Ljava/lang/Object;)Z
 HSPLjava/util/ImmutableCollections$SetN;->probe(Ljava/lang/Object;)I
+HSPLjava/util/ImmutableCollections;->-$$Nest$sfgetEMPTY()Ljava/lang/Object;
 HSPLjava/util/ImmutableCollections;-><clinit>()V
 HSPLjava/util/ImmutableCollections;->listCopy(Ljava/util/Collection;)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;
+HSPLjava/util/Iterator;->forEachRemaining(Ljava/util/function/Consumer;)V+]Ljava/util/function/Consumer;megamorphic_types
 HSPLjava/util/JumboEnumSet$EnumSetIterator;-><init>(Ljava/util/JumboEnumSet;)V
 HSPLjava/util/JumboEnumSet$EnumSetIterator;->hasNext()Z
 HSPLjava/util/JumboEnumSet$EnumSetIterator;->next()Ljava/lang/Enum;
@@ -28664,21 +28879,21 @@
 HSPLjava/util/LinkedHashMap;->values()Ljava/util/Collection;
 HSPLjava/util/LinkedHashSet;-><init>()V
 HSPLjava/util/LinkedHashSet;-><init>(I)V
-HSPLjava/util/LinkedHashSet;-><init>(Ljava/util/Collection;)V
+HSPLjava/util/LinkedHashSet;-><init>(Ljava/util/Collection;)V+]Ljava/util/Collection;Ljava/util/ArrayList;]Ljava/util/LinkedHashSet;Ljava/util/LinkedHashSet;
 HSPLjava/util/LinkedList$ListItr;-><init>(Ljava/util/LinkedList;I)V
 HSPLjava/util/LinkedList$ListItr;->add(Ljava/lang/Object;)V
 HSPLjava/util/LinkedList$ListItr;->checkForComodification()V
 HSPLjava/util/LinkedList$ListItr;->hasNext()Z
 HSPLjava/util/LinkedList$ListItr;->hasPrevious()Z
 HSPLjava/util/LinkedList$ListItr;->next()Ljava/lang/Object;
-HSPLjava/util/LinkedList$ListItr;->previous()Ljava/lang/Object;+]Ljava/util/LinkedList$ListItr;Ljava/util/LinkedList$ListItr;
+HSPLjava/util/LinkedList$ListItr;->previous()Ljava/lang/Object;
 HSPLjava/util/LinkedList$ListItr;->remove()V
 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;->add(ILjava/lang/Object;)V
-HSPLjava/util/LinkedList;->add(Ljava/lang/Object;)Z+]Ljava/util/LinkedList;missing_types
+HSPLjava/util/LinkedList;->add(Ljava/lang/Object;)Z
 HSPLjava/util/LinkedList;->addAll(ILjava/util/Collection;)Z
 HSPLjava/util/LinkedList;->addAll(Ljava/util/Collection;)Z
 HSPLjava/util/LinkedList;->addFirst(Ljava/lang/Object;)V
@@ -28709,7 +28924,7 @@
 HSPLjava/util/LinkedList;->pop()Ljava/lang/Object;
 HSPLjava/util/LinkedList;->push(Ljava/lang/Object;)V
 HSPLjava/util/LinkedList;->remove()Ljava/lang/Object;
-HSPLjava/util/LinkedList;->remove(I)Ljava/lang/Object;+]Ljava/util/LinkedList;Ljava/util/LinkedList;
+HSPLjava/util/LinkedList;->remove(I)Ljava/lang/Object;
 HSPLjava/util/LinkedList;->remove(Ljava/lang/Object;)Z
 HSPLjava/util/LinkedList;->removeFirst()Ljava/lang/Object;
 HSPLjava/util/LinkedList;->removeLast()Ljava/lang/Object;
@@ -28726,7 +28941,7 @@
 HSPLjava/util/List;->of(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;
 HSPLjava/util/List;->of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;
 HSPLjava/util/List;->of([Ljava/lang/Object;)Ljava/util/List;
-HSPLjava/util/List;->sort(Ljava/util/Comparator;)V+]Ljava/util/ListIterator;Ljava/util/LinkedList$ListItr;,Ljava/util/ArrayList$SubList$1;]Ljava/util/List;Ljava/util/LinkedList;,Ljava/util/ArrayList$SubList;
+HSPLjava/util/List;->sort(Ljava/util/Comparator;)V+]Ljava/util/ListIterator;Ljava/util/LinkedList$ListItr;]Ljava/util/List;Ljava/util/LinkedList;
 HSPLjava/util/List;->spliterator()Ljava/util/Spliterator;
 HSPLjava/util/Locale$Builder;-><init>()V
 HSPLjava/util/Locale$Builder;->build()Ljava/util/Locale;
@@ -28751,11 +28966,11 @@
 HSPLjava/util/Locale;->clone()Ljava/lang/Object;
 HSPLjava/util/Locale;->convertOldISOCodes(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;]Ljava/lang/String;Ljava/lang/String;]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;+]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
+HSPLjava/util/Locale;->getCountry()Ljava/lang/String;
 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;
@@ -28766,27 +28981,27 @@
 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;->getUnicodeLocaleType(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/util/Locale;->getVariant()Ljava/lang/String;+]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
+HSPLjava/util/Locale;->getVariant()Ljava/lang/String;
 HSPLjava/util/Locale;->hasExtensions()Z
-HSPLjava/util/Locale;->hashCode()I
+HSPLjava/util/Locale;->hashCode()I+]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
 HSPLjava/util/Locale;->isUnicodeExtensionKey(Ljava/lang/String;)Z
 HSPLjava/util/Locale;->isValidBcp47Alpha(Ljava/lang/String;II)Z
 HSPLjava/util/Locale;->normalizeAndValidateLanguage(Ljava/lang/String;Z)Ljava/lang/String;
 HSPLjava/util/Locale;->normalizeAndValidateRegion(Ljava/lang/String;Z)Ljava/lang/String;
-HSPLjava/util/Locale;->readObject(Ljava/io/ObjectInputStream;)V
-HSPLjava/util/Locale;->readResolve()Ljava/lang/Object;
+HSPLjava/util/Locale;->readObject(Ljava/io/ObjectInputStream;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/ObjectInputStream$GetField;Ljava/io/ObjectInputStream$GetFieldImpl;
+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;+]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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
+HSPLjava/util/Locale;->toLanguageTag()Ljava/lang/String;
+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;
+HSPLjava/util/Map;->computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;+]Ljava/util/function/Function;missing_types
 HSPLjava/util/Map;->forEach(Ljava/util/function/BiConsumer;)V
-HSPLjava/util/Map;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/ImmutableCollections$MapN;
+HSPLjava/util/Map;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/Map;->of(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;
 HSPLjava/util/MissingResourceException;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/util/NoSuchElementException;-><init>()V
@@ -28795,7 +29010,7 @@
 HSPLjava/util/Objects;->checkIndex(II)I
 HSPLjava/util/Objects;->equals(Ljava/lang/Object;Ljava/lang/Object;)Z+]Ljava/lang/Object;megamorphic_types
 HSPLjava/util/Objects;->hash([Ljava/lang/Object;)I
-HSPLjava/util/Objects;->hashCode(Ljava/lang/Object;)I+]Ljava/lang/Object;Ljava/lang/String;,Ljava/lang/Integer;,Ljava/lang/Long;
+HSPLjava/util/Objects;->hashCode(Ljava/lang/Object;)I+]Ljava/lang/Object;megamorphic_types
 HSPLjava/util/Objects;->nonNull(Ljava/lang/Object;)Z
 HSPLjava/util/Objects;->requireNonNull(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/Objects;->requireNonNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
@@ -28863,7 +29078,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;+]Ljava/util/Properties;Ljava/util/Properties;
+HSPLjava/util/Properties;->getProperty(Ljava/lang/String;)Ljava/lang/String;
 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
@@ -28967,21 +29182,8 @@
 HSPLjava/util/Scanner;->translateSavedIndexes(I)V
 HSPLjava/util/Scanner;->useDelimiter(Ljava/lang/String;)Ljava/util/Scanner;
 HSPLjava/util/Scanner;->useLocale(Ljava/util/Locale;)Ljava/util/Scanner;
-HSPLjava/util/ServiceLoader$1;-><init>(Ljava/util/ServiceLoader;)V
-HSPLjava/util/ServiceLoader$1;->hasNext()Z
-HSPLjava/util/ServiceLoader$1;->next()Ljava/lang/Object;
-HSPLjava/util/ServiceLoader$LazyIterator;-><init>(Ljava/util/ServiceLoader;Ljava/lang/Class;Ljava/lang/ClassLoader;)V
-HSPLjava/util/ServiceLoader$LazyIterator;->hasNext()Z
-HSPLjava/util/ServiceLoader$LazyIterator;->hasNextService()Z
-HSPLjava/util/ServiceLoader$LazyIterator;->next()Ljava/lang/Object;
-HSPLjava/util/ServiceLoader$LazyIterator;->nextService()Ljava/lang/Object;
-HSPLjava/util/ServiceLoader;->-$$Nest$fgetlookupIterator(Ljava/util/ServiceLoader;)Ljava/util/ServiceLoader$LazyIterator;
-HSPLjava/util/ServiceLoader;->-$$Nest$fgetproviders(Ljava/util/ServiceLoader;)Ljava/util/LinkedHashMap;
-HSPLjava/util/ServiceLoader;-><init>(Ljava/lang/Class;Ljava/lang/ClassLoader;)V
 HSPLjava/util/ServiceLoader;->iterator()Ljava/util/Iterator;
 HSPLjava/util/ServiceLoader;->load(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/ServiceLoader;
-HSPLjava/util/ServiceLoader;->parse(Ljava/lang/Class;Ljava/net/URL;)Ljava/util/Iterator;
-HSPLjava/util/ServiceLoader;->parseLine(Ljava/lang/Class;Ljava/net/URL;Ljava/io/BufferedReader;ILjava/util/List;)I
 HSPLjava/util/ServiceLoader;->reload()V
 HSPLjava/util/Set;->of(Ljava/lang/Object;)Ljava/util/Set;
 HSPLjava/util/Set;->of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;
@@ -29011,7 +29213,7 @@
 HSPLjava/util/Spliterators$IntArraySpliterator;-><init>([IIII)V
 HSPLjava/util/Spliterators$IntArraySpliterator;->characteristics()I
 HSPLjava/util/Spliterators$IntArraySpliterator;->estimateSize()J
-HSPLjava/util/Spliterators$IntArraySpliterator;->forEachRemaining(Ljava/util/function/IntConsumer;)V
+HSPLjava/util/Spliterators$IntArraySpliterator;->forEachRemaining(Ljava/util/function/IntConsumer;)V+]Ljava/util/function/IntConsumer;Ljava/util/stream/IntPipeline$4$1;
 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
@@ -29056,7 +29258,7 @@
 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;->binarySort([Ljava/lang/Object;IIILjava/util/Comparator;)V
+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;->ensureCapacity(I)[Ljava/lang/Object;
 HSPLjava/util/TimSort;->gallopLeft(Ljava/lang/Object;[Ljava/lang/Object;IIILjava/util/Comparator;)I
@@ -29084,8 +29286,6 @@
 HSPLjava/util/TimeZone;->setDefault(Ljava/util/TimeZone;)V
 HSPLjava/util/TimeZone;->setID(Ljava/lang/String;)V
 HSPLjava/util/TimeZone;->toZoneId()Ljava/time/ZoneId;
-HSPLjava/util/Timer$1;-><init>(Ljava/util/Timer;)V
-HSPLjava/util/Timer$1;->finalize()V
 HSPLjava/util/Timer;-><init>()V
 HSPLjava/util/Timer;-><init>(Ljava/lang/String;)V
 HSPLjava/util/Timer;-><init>(Ljava/lang/String;Z)V
@@ -29112,10 +29312,10 @@
 HSPLjava/util/TreeMap$EntryIterator;->next()Ljava/lang/Object;+]Ljava/util/TreeMap$EntryIterator;Ljava/util/TreeMap$EntryIterator;
 HSPLjava/util/TreeMap$EntryIterator;->next()Ljava/util/Map$Entry;+]Ljava/util/TreeMap$EntryIterator;Ljava/util/TreeMap$EntryIterator;
 HSPLjava/util/TreeMap$EntrySet;-><init>(Ljava/util/TreeMap;)V
-HSPLjava/util/TreeMap$EntrySet;->iterator()Ljava/util/Iterator;+]Ljava/util/TreeMap;Ljava/util/TreeMap;
+HSPLjava/util/TreeMap$EntrySet;->iterator()Ljava/util/Iterator;
 HSPLjava/util/TreeMap$EntrySet;->size()I
 HSPLjava/util/TreeMap$KeyIterator;-><init>(Ljava/util/TreeMap;Ljava/util/TreeMap$TreeMapEntry;)V
-HSPLjava/util/TreeMap$KeyIterator;->next()Ljava/lang/Object;
+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;
@@ -29170,12 +29370,12 @@
 HSPLjava/util/TreeMap;->buildFromSorted(IIIILjava/util/Iterator;Ljava/io/ObjectInputStream;Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
 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;+]Ljava/util/TreeMap;Ljava/util/TreeMap;
+HSPLjava/util/TreeMap;->ceilingKey(Ljava/lang/Object;)Ljava/lang/Object;
 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+]Ljava/util/Comparator;missing_types]Ljava/lang/Comparable;missing_types
+HSPLjava/util/TreeMap;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLjava/util/TreeMap;->computeRedLevel(I)I
 HSPLjava/util/TreeMap;->containsKey(Ljava/lang/Object;)Z
 HSPLjava/util/TreeMap;->deleteEntry(Ljava/util/TreeMap$TreeMapEntry;)V
@@ -29209,9 +29409,9 @@
 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;Ljava/util/TreeMap;]Ljava/lang/Comparable;missing_types
+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;->putAll(Ljava/util/Map;)V
-HSPLjava/util/TreeMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/TreeMap;Ljava/util/TreeMap;
+HSPLjava/util/TreeMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/TreeMap;->rightOf(Ljava/util/TreeMap$TreeMapEntry;)Ljava/util/TreeMap$TreeMapEntry;
 HSPLjava/util/TreeMap;->rotateLeft(Ljava/util/TreeMap$TreeMapEntry;)V
 HSPLjava/util/TreeMap;->rotateRight(Ljava/util/TreeMap$TreeMapEntry;)V
@@ -29227,16 +29427,16 @@
 HSPLjava/util/TreeSet;-><init>(Ljava/util/Comparator;)V
 HSPLjava/util/TreeSet;-><init>(Ljava/util/NavigableMap;)V
 HSPLjava/util/TreeSet;-><init>(Ljava/util/SortedSet;)V
-HSPLjava/util/TreeSet;->add(Ljava/lang/Object;)Z
+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;->ceiling(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/TreeSet;->clear()V
 HSPLjava/util/TreeSet;->comparator()Ljava/util/Comparator;
-HSPLjava/util/TreeSet;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/TreeSet;->contains(Ljava/lang/Object;)Z+]Ljava/util/NavigableMap;Ljava/util/TreeMap;
 HSPLjava/util/TreeSet;->descendingSet()Ljava/util/NavigableSet;
 HSPLjava/util/TreeSet;->first()Ljava/lang/Object;
 HSPLjava/util/TreeSet;->floor(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/TreeSet;->isEmpty()Z+]Ljava/util/NavigableMap;Ljava/util/TreeMap;
+HSPLjava/util/TreeSet;->isEmpty()Z
 HSPLjava/util/TreeSet;->iterator()Ljava/util/Iterator;
 HSPLjava/util/TreeSet;->last()Ljava/lang/Object;
 HSPLjava/util/TreeSet;->remove(Ljava/lang/Object;)Z
@@ -29245,10 +29445,10 @@
 HSPLjava/util/TreeSet;->tailSet(Ljava/lang/Object;Z)Ljava/util/NavigableSet;
 HSPLjava/util/UUID;-><init>(JJ)V
 HSPLjava/util/UUID;-><init>([B)V
-HSPLjava/util/UUID;->digits(JI)Ljava/lang/String;
+HSPLjava/util/UUID;->digits(JI)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/util/UUID;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/UUID;->fromString(Ljava/lang/String;)Ljava/util/UUID;
-HSPLjava/util/UUID;->fromStringJava8(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;->fromStringJava8(Ljava/lang/String;)Ljava/util/UUID;
 HSPLjava/util/UUID;->getLeastSignificantBits()J
 HSPLjava/util/UUID;->getMostSignificantBits()J
 HSPLjava/util/UUID;->hashCode()I
@@ -29274,7 +29474,7 @@
 HSPLjava/util/Vector;->elementAt(I)Ljava/lang/Object;
 HSPLjava/util/Vector;->elementData(I)Ljava/lang/Object;
 HSPLjava/util/Vector;->elements()Ljava/util/Enumeration;
-HSPLjava/util/Vector;->get(I)Ljava/lang/Object;
+HSPLjava/util/Vector;->get(I)Ljava/lang/Object;+]Ljava/util/Vector;Ljava/util/Stack;
 HSPLjava/util/Vector;->indexOf(Ljava/lang/Object;)I
 HSPLjava/util/Vector;->indexOf(Ljava/lang/Object;I)I
 HSPLjava/util/Vector;->isEmpty()Z
@@ -29287,7 +29487,7 @@
 HSPLjava/util/Vector;->toArray()[Ljava/lang/Object;
 HSPLjava/util/Vector;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLjava/util/WeakHashMap$Entry;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;ILjava/util/WeakHashMap$Entry;)V
-HSPLjava/util/WeakHashMap$Entry;->getKey()Ljava/lang/Object;
+HSPLjava/util/WeakHashMap$Entry;->getKey()Ljava/lang/Object;+]Ljava/util/WeakHashMap$Entry;Ljava/util/WeakHashMap$Entry;
 HSPLjava/util/WeakHashMap$Entry;->getValue()Ljava/lang/Object;
 HSPLjava/util/WeakHashMap$EntryIterator;-><init>(Ljava/util/WeakHashMap;)V
 HSPLjava/util/WeakHashMap$EntryIterator;->next()Ljava/lang/Object;
@@ -29299,7 +29499,7 @@
 HSPLjava/util/WeakHashMap$HashIterator;->nextEntry()Ljava/util/WeakHashMap$Entry;
 HSPLjava/util/WeakHashMap$KeyIterator;-><init>(Ljava/util/WeakHashMap;)V
 HSPLjava/util/WeakHashMap$KeyIterator;-><init>(Ljava/util/WeakHashMap;Ljava/util/WeakHashMap$KeyIterator-IA;)V
-HSPLjava/util/WeakHashMap$KeyIterator;->next()Ljava/lang/Object;
+HSPLjava/util/WeakHashMap$KeyIterator;->next()Ljava/lang/Object;+]Ljava/util/WeakHashMap$KeyIterator;Ljava/util/WeakHashMap$KeyIterator;]Ljava/util/WeakHashMap$Entry;Ljava/util/WeakHashMap$Entry;
 HSPLjava/util/WeakHashMap$KeySet;-><init>(Ljava/util/WeakHashMap;)V
 HSPLjava/util/WeakHashMap$KeySet;-><init>(Ljava/util/WeakHashMap;Ljava/util/WeakHashMap$KeySet-IA;)V
 HSPLjava/util/WeakHashMap$KeySet;->iterator()Ljava/util/Iterator;
@@ -29315,14 +29515,15 @@
 HSPLjava/util/WeakHashMap;->containsKey(Ljava/lang/Object;)Z
 HSPLjava/util/WeakHashMap;->entrySet()Ljava/util/Set;
 HSPLjava/util/WeakHashMap;->expungeStaleEntries()V+]Ljava/lang/ref/ReferenceQueue;Ljava/lang/ref/ReferenceQueue;
-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;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
 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
+HSPLjava/util/WeakHashMap;->hash(Ljava/lang/Object;)I+]Ljava/lang/Object;Ljava/lang/Class;
 HSPLjava/util/WeakHashMap;->indexFor(II)I
 HSPLjava/util/WeakHashMap;->isEmpty()Z
 HSPLjava/util/WeakHashMap;->keySet()Ljava/util/Set;
 HSPLjava/util/WeakHashMap;->maskNull(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/WeakHashMap;->matchesKey(Ljava/util/WeakHashMap$Entry;Ljava/lang/Object;)Z+]Ljava/util/WeakHashMap$Entry;Ljava/util/WeakHashMap$Entry;
 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;
@@ -29389,7 +29590,7 @@
 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;+]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/util/Iterator;Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;,Ljava/util/concurrent/ConcurrentHashMap$KeyIterator;]Ljava/util/concurrent/ConcurrentHashMap$CollectionView;Ljava/util/concurrent/ConcurrentHashMap$KeySetView;,Ljava/util/concurrent/ConcurrentHashMap$ValuesView;
+HSPLjava/util/concurrent/ConcurrentHashMap$CollectionView;->toArray()[Ljava/lang/Object;
 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;
@@ -29399,7 +29600,7 @@
 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;+]Ljava/util/concurrent/ConcurrentHashMap$KeyIterator;Ljava/util/concurrent/ConcurrentHashMap$KeyIterator;
+HSPLjava/util/concurrent/ConcurrentHashMap$KeyIterator;->next()Ljava/lang/Object;
 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;
@@ -29421,7 +29622,7 @@
 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
+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;->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;
@@ -29439,11 +29640,11 @@
 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;->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;Lsun/util/locale/BaseLocale$Key;
+HSPLjava/util/concurrent/ConcurrentHashMap;->putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;+]Ljava/lang/Object;megamorphic_types
 HSPLjava/util/concurrent/ConcurrentHashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentHashMap;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z
 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;+]Ljava/lang/Object;Lsun/nio/ch/FileKey;,Ljava/lang/reflect/Proxy$Key1;,Lsun/util/locale/BaseLocale;
+HSPLjava/util/concurrent/ConcurrentHashMap;->replaceNode(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 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
@@ -29525,9 +29726,9 @@
 HSPLjava/util/concurrent/CopyOnWriteArrayList$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
 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+]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$COWIterator;->next()Ljava/lang/Object;
+HSPLjava/util/concurrent/CopyOnWriteArrayList;-><init>()V
+HSPLjava/util/concurrent/CopyOnWriteArrayList;-><init>(Ljava/util/Collection;)V
 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
@@ -29544,20 +29745,20 @@
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->getArray()[Ljava/lang/Object;
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->indexOf(Ljava/lang/Object;)I
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->indexOfRange(Ljava/lang/Object;[Ljava/lang/Object;II)I
-HSPLjava/util/concurrent/CopyOnWriteArrayList;->isEmpty()Z+]Ljava/util/concurrent/CopyOnWriteArrayList;missing_types
-HSPLjava/util/concurrent/CopyOnWriteArrayList;->iterator()Ljava/util/Iterator;+]Ljava/util/concurrent/CopyOnWriteArrayList;missing_types
+HSPLjava/util/concurrent/CopyOnWriteArrayList;->isEmpty()Z
+HSPLjava/util/concurrent/CopyOnWriteArrayList;->iterator()Ljava/util/Iterator;
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->lambda$removeAll$0(Ljava/util/Collection;Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->remove(I)Ljava/lang/Object;
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->remove(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->remove(Ljava/lang/Object;[Ljava/lang/Object;I)Z
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->removeAll(Ljava/util/Collection;)Z
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->setArray([Ljava/lang/Object;)V
-HSPLjava/util/concurrent/CopyOnWriteArrayList;->size()I+]Ljava/util/concurrent/CopyOnWriteArrayList;missing_types
+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;+]Ljava/lang/Object;[Ljava/util/logging/Handler;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
+HSPLjava/util/concurrent/CopyOnWriteArrayList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 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;Ljava/util/concurrent/CopyOnWriteArraySet;
+HSPLjava/util/concurrent/CopyOnWriteArraySet;-><init>(Ljava/util/Collection;)V
 HSPLjava/util/concurrent/CopyOnWriteArraySet;->add(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/CopyOnWriteArraySet;->addAll(Ljava/util/Collection;)Z
 HSPLjava/util/concurrent/CopyOnWriteArraySet;->clear()V
@@ -29597,7 +29798,7 @@
 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;
@@ -29614,7 +29815,7 @@
 HSPLjava/util/concurrent/Executors;->unconfigurableExecutorService(Ljava/util/concurrent/ExecutorService;)Ljava/util/concurrent/ExecutorService;
 HSPLjava/util/concurrent/Executors;->unconfigurableScheduledExecutorService(Ljava/util/concurrent/ScheduledExecutorService;)Ljava/util/concurrent/ScheduledExecutorService;
 HSPLjava/util/concurrent/ForkJoinPool;->managedBlock(Ljava/util/concurrent/ForkJoinPool$ManagedBlocker;)V
-HSPLjava/util/concurrent/ForkJoinPool;->unmanagedBlock(Ljava/util/concurrent/ForkJoinPool$ManagedBlocker;)V+]Ljava/util/concurrent/ForkJoinPool$ManagedBlocker;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;
+HSPLjava/util/concurrent/ForkJoinPool;->unmanagedBlock(Ljava/util/concurrent/ForkJoinPool$ManagedBlocker;)V
 HSPLjava/util/concurrent/ForkJoinTask;-><init>()V
 HSPLjava/util/concurrent/FutureTask$WaitNode;-><init>()V
 HSPLjava/util/concurrent/FutureTask;-><init>(Ljava/lang/Runnable;Ljava/lang/Object;)V
@@ -29622,7 +29823,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+]Ljava/util/concurrent/FutureTask;missing_types
+HSPLjava/util/concurrent/FutureTask;->finishCompletion()V+]Ljava/util/concurrent/FutureTask;Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;,Ljava/util/concurrent/FutureTask;
 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
@@ -29630,7 +29831,7 @@
 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+]Ljava/util/concurrent/Callable;missing_types]Ljava/util/concurrent/FutureTask;missing_types
+HSPLjava/util/concurrent/FutureTask;->run()V+]Ljava/util/concurrent/Callable;Ljava/util/concurrent/Executors$RunnableAdapter;]Ljava/util/concurrent/FutureTask;Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;,Ljava/util/concurrent/FutureTask;
 HSPLjava/util/concurrent/FutureTask;->runAndReset()Z
 HSPLjava/util/concurrent/FutureTask;->set(Ljava/lang/Object;)V
 HSPLjava/util/concurrent/FutureTask;->setException(Ljava/lang/Throwable;)V
@@ -29666,13 +29867,13 @@
 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;->poll()Ljava/lang/Object;
+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
-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;->signalNotEmpty()V
 HSPLjava/util/concurrent/LinkedBlockingQueue;->signalNotFull()V
-HSPLjava/util/concurrent/LinkedBlockingQueue;->size()I+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
-HSPLjava/util/concurrent/LinkedBlockingQueue;->take()Ljava/lang/Object;
+HSPLjava/util/concurrent/LinkedBlockingQueue;->size()I
+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
@@ -29697,8 +29898,8 @@
 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;
@@ -29709,32 +29910,32 @@
 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+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->remove(Ljava/lang/Object;)Z
 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+]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;Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;]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
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;-><init>(Ljava/util/concurrent/ScheduledThreadPoolExecutor;Ljava/util/concurrent/Callable;JJ)V
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->cancel(Z)Z+]Ljava/util/concurrent/ScheduledThreadPoolExecutor;missing_types
+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;->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
 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
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->canRunInCurrentRunState(Ljava/util/concurrent/RunnableScheduledFuture;)Z+]Ljava/util/concurrent/ScheduledThreadPoolExecutor;missing_types
 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+]Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;]Ljava/util/concurrent/ScheduledThreadPoolExecutor;missing_types
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->execute(Ljava/lang/Runnable;)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->execute(Ljava/lang/Runnable;)V+]Ljava/util/concurrent/ScheduledThreadPoolExecutor;missing_types
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->getContinueExistingPeriodicTasksAfterShutdownPolicy()Z
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->getExecuteExistingDelayedTasksAfterShutdownPolicy()Z
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->onShutdown()V
@@ -29780,13 +29981,13 @@
 HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->clean(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;)V
 HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->isFulfilling(I)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;
-HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->transfer(Ljava/lang/Object;ZJ)Ljava/lang/Object;
+HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->transfer(Ljava/lang/Object;ZJ)Ljava/lang/Object;+]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$Transferer;-><init>()V
 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+]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;->offer(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/SynchronousQueue;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
 HSPLjava/util/concurrent/SynchronousQueue;->size()I
 HSPLjava/util/concurrent/SynchronousQueue;->take()Ljava/lang/Object;
 HSPLjava/util/concurrent/ThreadLocalRandom;-><clinit>()V
@@ -29797,6 +29998,7 @@
 HSPLjava/util/concurrent/ThreadLocalRandom;->mix32(J)I
 HSPLjava/util/concurrent/ThreadLocalRandom;->mix64(J)J
 HSPLjava/util/concurrent/ThreadLocalRandom;->nextInt()I
+HSPLjava/util/concurrent/ThreadLocalRandom;->nextInt(I)I+]Ljava/util/concurrent/ThreadLocalRandom;Ljava/util/concurrent/ThreadLocalRandom;
 HSPLjava/util/concurrent/ThreadLocalRandom;->nextSecondarySeed()I
 HSPLjava/util/concurrent/ThreadLocalRandom;->nextSeed()J
 HSPLjava/util/concurrent/ThreadLocalRandom;->setSeed(J)V
@@ -29834,7 +30036,7 @@
 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;Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;,Ljava/util/concurrent/LinkedBlockingQueue;,Ljava/util/concurrent/SynchronousQueue;]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
@@ -29845,13 +30047,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+]Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;,Ljava/util/concurrent/SynchronousQueue;,Ljava/util/concurrent/LinkedBlockingQueue;]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+]Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;]Ljava/util/concurrent/ThreadPoolExecutor;missing_types
+HSPLjava/util/concurrent/ThreadPoolExecutor;->processWorkerExit(Ljava/util/concurrent/ThreadPoolExecutor$Worker;Z)V
+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;]Ljava/util/concurrent/Future;Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;
+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+]Ljava/util/concurrent/ThreadPoolExecutor;Ljava/util/concurrent/ScheduledThreadPoolExecutor;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;]Ljava/lang/Runnable;Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;]Ljava/util/concurrent/ThreadPoolExecutor$Worker;Ljava/util/concurrent/ThreadPoolExecutor$Worker;
+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
@@ -29861,9 +30063,9 @@
 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+]Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/LinkedBlockingQueue;,Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;]Ljava/util/concurrent/ThreadPoolExecutor;Ljava/util/concurrent/ThreadPoolExecutor;,Ljava/util/concurrent/ScheduledThreadPoolExecutor;]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/ThreadPoolExecutor;->tryTerminate()V+]Ljava/util/concurrent/ThreadPoolExecutor;Ljava/util/concurrent/ScheduledThreadPoolExecutor;]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/ThreadPoolExecutor;->workerCountOf(I)I
-HSPLjava/util/concurrent/TimeUnit;->convert(JLjava/util/concurrent/TimeUnit;)J
+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
 HSPLjava/util/concurrent/TimeUnit;->sleep(J)V
 HSPLjava/util/concurrent/TimeUnit;->toDays(J)J
@@ -29903,7 +30105,7 @@
 HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->accessCheck(Ljava/lang/Object;)V
 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+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->getAndAdd(Ljava/lang/Object;I)I
 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
@@ -29924,8 +30126,9 @@
 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+]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;->compareAndSet(Ljava/lang/Object;JJ)Z+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 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;->getAndIncrement(Ljava/lang/Object;)J+]Ljava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;Ljava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;
 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;
@@ -29971,16 +30174,16 @@
 HSPLjava/util/concurrent/locks/AbstractOwnableSynchronizer;->setExclusiveOwnerThread(Ljava/lang/Thread;)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;-><init>()V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;->block()Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;->isReleasable()Z
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;->isReleasable()Z+]Ljava/lang/Thread;Ljava/lang/Thread;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;-><init>(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;)V
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->await()V
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->awaitNanos(J)J
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->await()V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;]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$ConditionNode;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->canReacquire(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;)Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->doSignal(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;Z)V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->enableWait(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;)I
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->enableWait(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;)I+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->hasWaiters()Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->isOwnedBy(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;)Z
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->signal()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;->unlinkCancelledWaiters(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ExclusiveNode;-><init>()V
@@ -29988,19 +30191,19 @@
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;->clearStatus()V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;->getAndUnsetStatus(I)I+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;->setPrevRelaxed(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;->setStatusRelaxed(I)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;->setStatusRelaxed(I)V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$SharedNode;-><init>()V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->-$$Nest$sfgetU()Ljdk/internal/misc/Unsafe;
 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;->acquire(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;IZZZJ)I
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquire(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;IZZZJ)I+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ExclusiveNode;,Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;,Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$SharedNode;]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;,Ljava/util/concurrent/CountDownLatch$Sync;,Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireInterruptibly(I)V
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireShared(I)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireShared(I)V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireSharedInterruptibly(I)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->apparentlyFirstQueuedIsExclusive()Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->casTail(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->cleanQueue()V
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->compareAndSetState(II)Z
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->compareAndSetState(II)Z+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->enqueue(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->getFirstQueuedThread()Ljava/lang/Thread;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->getState()I
@@ -30009,7 +30212,7 @@
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->hasWaiters(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->isEnqueued(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->owns(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)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/ThreadPoolExecutor$Worker;
+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/ThreadPoolExecutor$Worker;,Ljava/util/concurrent/locks/ReentrantLock$FairSync;,Ljava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->releaseShared(I)Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;,Ljava/util/concurrent/CountDownLatch$Sync;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->setState(I)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->signalNext(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ExclusiveNode;,Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;,Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$SharedNode;
@@ -30017,45 +30220,45 @@
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->tryAcquireNanos(IJ)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->tryAcquireSharedNanos(IJ)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->tryInitializeHead()V
-HSPLjava/util/concurrent/locks/LockSupport;->park()V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
+HSPLjava/util/concurrent/locks/LockSupport;->park()V
 HSPLjava/util/concurrent/locks/LockSupport;->park(Ljava/lang/Object;)V
 HSPLjava/util/concurrent/locks/LockSupport;->parkNanos(J)V
-HSPLjava/util/concurrent/locks/LockSupport;->parkNanos(Ljava/lang/Object;J)V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
+HSPLjava/util/concurrent/locks/LockSupport;->parkNanos(Ljava/lang/Object;J)V
 HSPLjava/util/concurrent/locks/LockSupport;->setBlocker(Ljava/lang/Thread;Ljava/lang/Object;)V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjava/util/concurrent/locks/LockSupport;->setCurrentBlocker(Ljava/lang/Object;)V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 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;->initialTryLock()Z+]Ljava/util/concurrent/locks/ReentrantLock$FairSync;Ljava/util/concurrent/locks/ReentrantLock$FairSync;
+HSPLjava/util/concurrent/locks/ReentrantLock$FairSync;->initialTryLock()Z
 HSPLjava/util/concurrent/locks/ReentrantLock$FairSync;->tryAcquire(I)Z
 HSPLjava/util/concurrent/locks/ReentrantLock$NonfairSync;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantLock$NonfairSync;->initialTryLock()Z+]Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 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
-HSPLjava/util/concurrent/locks/ReentrantLock$Sync;->lock()V+]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;->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$Sync;->lockInterruptibly()V+]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 HSPLjava/util/concurrent/locks/ReentrantLock$Sync;->newCondition()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
 HSPLjava/util/concurrent/locks/ReentrantLock$Sync;->tryLock()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
-HSPLjava/util/concurrent/locks/ReentrantLock;->isHeldByCurrentThread()Z
-HSPLjava/util/concurrent/locks/ReentrantLock;->lock()V+]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;,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(JLjava/util/concurrent/TimeUnit;)Z
-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
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;-><init>()V
-HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;->readerShouldBlock()Z
+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
-HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;->unlock()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$Sync$HoldCounter;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;->initialValue()Ljava/lang/Object;
@@ -30065,18 +30268,20 @@
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->fullTryAcquireShared(Ljava/lang/Thread;)I
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->getReadHoldCount()I
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->getReadLockCount()I
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->getWriteHoldCount()I+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->isHeldExclusively()Z
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->sharedCount(I)I
-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$ThreadLocalHoldCounter;Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
+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$ThreadLocalHoldCounter;Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;]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;
 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;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;-><init>(Z)V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;->getReadHoldCount()I
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;->getWriteHoldCount()I+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;->readLock()Ljava/util/concurrent/locks/Lock;+]Ljava/util/concurrent/locks/ReentrantReadWriteLock;Ljava/util/concurrent/locks/ReentrantReadWriteLock;
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;->readLock()Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;->writeLock()Ljava/util/concurrent/locks/Lock;
@@ -30109,7 +30314,9 @@
 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
+HSPLjava/util/jar/JarFile;-><init>(Ljava/io/File;ZZI)V
 HSPLjava/util/jar/JarFile;-><init>(Ljava/lang/String;)V
+HSPLjava/util/jar/JarFile;-><init>(Ljava/lang/String;ZZ)V
 HSPLjava/util/jar/JarFile;->getBytes(Ljava/util/zip/ZipEntry;)[B
 HSPLjava/util/jar/JarFile;->getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;
 HSPLjava/util/jar/JarFile;->getInputStream(Ljava/util/zip/ZipEntry;)Ljava/io/InputStream;
@@ -30125,6 +30332,7 @@
 HSPLjava/util/jar/JarVerifier$VerifierStream;->close()V
 HSPLjava/util/jar/JarVerifier$VerifierStream;->read()I
 HSPLjava/util/jar/JarVerifier$VerifierStream;->read([BII)I
+HSPLjava/util/jar/JarVerifier;-><init>(Ljava/lang/String;[B)V
 HSPLjava/util/jar/JarVerifier;->beginEntry(Ljava/util/jar/JarEntry;Lsun/security/util/ManifestEntryVerifier;)V
 HSPLjava/util/jar/JarVerifier;->doneWithMeta()V
 HSPLjava/util/jar/JarVerifier;->mapSignersToCertArray([Ljava/security/CodeSigner;)[Ljava/security/cert/Certificate;
@@ -30140,11 +30348,12 @@
 HSPLjava/util/jar/Manifest$FastInputStream;->readLine([BII)I
 HSPLjava/util/jar/Manifest;-><init>()V
 HSPLjava/util/jar/Manifest;-><init>(Ljava/io/InputStream;)V
-HSPLjava/util/jar/Manifest;->getAttributes(Ljava/lang/String;)Ljava/util/jar/Attributes;
+HSPLjava/util/jar/Manifest;->getAttributes(Ljava/lang/String;)Ljava/util/jar/Attributes;+]Ljava/util/jar/Manifest;Ljava/util/jar/Manifest;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLjava/util/jar/Manifest;->getEntries()Ljava/util/Map;
 HSPLjava/util/jar/Manifest;->getMainAttributes()Ljava/util/jar/Attributes;
 HSPLjava/util/jar/Manifest;->parseName([BI)Ljava/lang/String;
 HSPLjava/util/jar/Manifest;->read(Ljava/io/InputStream;)V
+HSPLjava/util/jar/Manifest;->read(Ljava/io/InputStream;Ljava/lang/String;)V+]Ljava/util/jar/Attributes;Ljava/util/jar/Attributes;]Ljava/util/jar/Manifest;Ljava/util/jar/Manifest;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/jar/Manifest$FastInputStream;Ljava/util/jar/Manifest$FastInputStream;
 HSPLjava/util/jar/Manifest;->toLower(I)I
 HSPLjava/util/logging/ConsoleHandler;->close()V
 HSPLjava/util/logging/ErrorManager;-><init>()V
@@ -30155,7 +30364,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+]Ljava/io/OutputStream;Ljava/io/BufferedOutputStream;
+HSPLjava/util/logging/FileHandler$MeteredStream;->write([BII)V
 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
@@ -30164,7 +30373,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+]Ljava/util/logging/FileHandler;Ljava/util/logging/FileHandler;
+HSPLjava/util/logging/FileHandler;->publish(Ljava/util/logging/LogRecord;)V
 HSPLjava/util/logging/FileHandler;->rotate()V
 HSPLjava/util/logging/Formatter;-><init>()V
 HSPLjava/util/logging/Formatter;->getHead(Ljava/util/logging/Handler;)Ljava/lang/String;
@@ -30175,7 +30384,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+]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;->isLoggable(Ljava/util/logging/LogRecord;)Z
 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
@@ -30242,7 +30451,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+]Ljava/lang/Object;Ljava/util/logging/Level;]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;
+HSPLjava/util/logging/LogRecord;-><init>(Ljava/util/logging/Level;Ljava/lang/String;)V
 HSPLjava/util/logging/LogRecord;->defaultThreadID()I
 HSPLjava/util/logging/LogRecord;->getLevel()Ljava/util/logging/Level;
 HSPLjava/util/logging/LogRecord;->getLoggerName()Ljava/lang/String;
@@ -30263,12 +30472,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+]Ljava/util/logging/LogRecord;Ljava/util/logging/LogRecord;]Ljava/util/logging/Logger;Ljava/util/logging/Logger;
+HSPLjava/util/logging/Logger;->doLog(Ljava/util/logging/LogRecord;)V
 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;+]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;->getEffectiveLoggerBundle()Ljava/util/logging/Logger$LoggerBundle;
 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;
@@ -30280,8 +30489,8 @@
 HSPLjava/util/logging/Logger;->info(Ljava/lang/String;)V
 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+]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;->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;->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
@@ -30300,40 +30509,41 @@
 HSPLjava/util/logging/StreamHandler;-><init>()V
 HSPLjava/util/logging/StreamHandler;->close()V
 HSPLjava/util/logging/StreamHandler;->configure()V
-HSPLjava/util/logging/StreamHandler;->flush()V+]Ljava/io/Writer;Ljava/io/OutputStreamWriter;
+HSPLjava/util/logging/StreamHandler;->flush()V
 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+]Ljava/io/Writer;Ljava/io/OutputStreamWriter;]Ljava/util/logging/StreamHandler;Ljava/util/logging/FileHandler;
+HSPLjava/util/logging/StreamHandler;->publish(Ljava/util/logging/LogRecord;)V
 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+]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
-HSPLjava/util/regex/Matcher;->appendEvaluated(Ljava/lang/StringBuilder;Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLjava/util/regex/Matcher;->appendEvaluated(Ljava/lang/StringBuilder;Ljava/lang/String;)V
+HSPLjava/util/regex/Matcher;->appendExpandedReplacement(Ljava/lang/String;Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/util/regex/Matcher;->appendReplacement(Ljava/lang/StringBuffer;Ljava/lang/String;)Ljava/util/regex/Matcher;
 HSPLjava/util/regex/Matcher;->appendReplacement(Ljava/lang/StringBuilder;Ljava/lang/String;)Ljava/util/regex/Matcher;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
-HSPLjava/util/regex/Matcher;->appendReplacementInternal(Ljava/lang/StringBuilder;Ljava/lang/String;)V+]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
+HSPLjava/util/regex/Matcher;->appendReplacementInternal(Ljava/lang/StringBuilder;Ljava/lang/String;)V
 HSPLjava/util/regex/Matcher;->appendTail(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;
-HSPLjava/util/regex/Matcher;->appendTail(Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/util/regex/Matcher;->appendTail(Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;
 HSPLjava/util/regex/Matcher;->end()I
 HSPLjava/util/regex/Matcher;->end(I)I
 HSPLjava/util/regex/Matcher;->ensureMatch()V
-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
-HSPLjava/util/regex/Matcher;->getSubSequence(II)Ljava/lang/CharSequence;
-HSPLjava/util/regex/Matcher;->getTextLength()I
+HSPLjava/util/regex/Matcher;->find()Z
+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+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/util/regex/Matcher;->group()Ljava/lang/String;
-HSPLjava/util/regex/Matcher;->group(I)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+]Lcom/android/icu/util/regex/MatcherNative;Lcom/android/icu/util/regex/MatcherNative;
 HSPLjava/util/regex/Matcher;->hitEnd()Z
 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/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
+HSPLjava/util/regex/Matcher;->replaceAll(Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/util/regex/Matcher;->replaceFirst(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;
-HSPLjava/util/regex/Matcher;->reset(Ljava/lang/CharSequence;II)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;,Ljava/nio/HeapCharBuffer;
+HSPLjava/util/regex/Matcher;->reset(Ljava/lang/CharSequence;II)Ljava/util/regex/Matcher;+]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;,Ljava/lang/String;,Ljava/nio/HeapCharBuffer;
 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
@@ -30348,18 +30558,18 @@
 HSPLjava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
 HSPLjava/util/regex/Pattern;->matches(Ljava/lang/String;Ljava/lang/CharSequence;)Z
 HSPLjava/util/regex/Pattern;->pattern()Ljava/lang/String;
-HSPLjava/util/regex/Pattern;->quote(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/util/regex/Pattern;->quote(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/util/regex/Pattern;->split(Ljava/lang/CharSequence;)[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;->split(Ljava/lang/CharSequence;I)[Ljava/lang/String;
 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/SortedOps$OfRef;,Ljava/util/stream/ReferencePipeline$3;,Ljava/util/stream/ReferencePipeline$4;
+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;->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;->evaluate(Ljava/util/Spliterator;ZLjava/util/function/IntFunction;)Ljava/util/stream/Node;
-HSPLjava/util/stream/AbstractPipeline;->evaluate(Ljava/util/stream/TerminalOp;)Ljava/lang/Object;
-HSPLjava/util/stream/AbstractPipeline;->evaluateToArrayNode(Ljava/util/function/IntFunction;)Ljava/util/stream/Node;
-HSPLjava/util/stream/AbstractPipeline;->exactOutputSizeIfKnown(Ljava/util/Spliterator;)J
+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;->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;
@@ -30367,8 +30577,8 @@
 HSPLjava/util/stream/AbstractPipeline;->sourceSpliterator(I)Ljava/util/Spliterator;+]Ljava/util/stream/AbstractPipeline;Ljava/util/stream/IntPipeline$4;,Ljava/util/stream/ReferencePipeline$4;
 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;
-HSPLjava/util/stream/AbstractPipeline;->wrapSink(Ljava/util/stream/Sink;)Ljava/util/stream/Sink;
+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/AbstractSpinedBuffer;-><init>()V
 HSPLjava/util/stream/AbstractSpinedBuffer;->count()J
 HSPLjava/util/stream/Collectors$$ExternalSyntheticLambda0;-><init>()V
@@ -30394,8 +30604,7 @@
 HSPLjava/util/stream/Collectors$$ExternalSyntheticLambda66;->get()Ljava/lang/Object;
 HSPLjava/util/stream/Collectors$$ExternalSyntheticLambda74;-><init>()V
 HSPLjava/util/stream/Collectors$$ExternalSyntheticLambda74;->get()Ljava/lang/Object;
-HSPLjava/util/stream/Collectors$$ExternalSyntheticLambda75;-><init>()V
-HSPLjava/util/stream/Collectors$$ExternalSyntheticLambda75;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLjava/util/stream/Collectors$$ExternalSyntheticLambda75;->accept(Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLjava/util/stream/Collectors$$ExternalSyntheticLambda76;-><init>()V
 HSPLjava/util/stream/Collectors$$ExternalSyntheticLambda87;-><init>()V
 HSPLjava/util/stream/Collectors$CollectorImpl;-><init>(Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/function/BinaryOperator;Ljava/util/Set;)V
@@ -30433,10 +30642,6 @@
 HSPLjava/util/stream/DoublePipeline;-><init>(Ljava/util/stream/AbstractPipeline;I)V
 HSPLjava/util/stream/DoublePipeline;->max()Ljava/util/OptionalDouble;
 HSPLjava/util/stream/DoublePipeline;->reduce(Ljava/util/function/DoubleBinaryOperator;)Ljava/util/OptionalDouble;
-HSPLjava/util/stream/FindOps$$ExternalSyntheticLambda4;-><init>()V
-HSPLjava/util/stream/FindOps$$ExternalSyntheticLambda5;-><init>()V
-HSPLjava/util/stream/FindOps$$ExternalSyntheticLambda5;->get()Ljava/lang/Object;
-HSPLjava/util/stream/FindOps$$ExternalSyntheticLambda7;->get()Ljava/lang/Object;
 HSPLjava/util/stream/FindOps$FindOp;-><init>(ZLjava/util/stream/StreamShape;Ljava/lang/Object;Ljava/util/function/Predicate;Ljava/util/function/Supplier;)V
 HSPLjava/util/stream/FindOps$FindOp;->evaluateSequential(Ljava/util/stream/PipelineHelper;Ljava/util/Spliterator;)Ljava/lang/Object;
 HSPLjava/util/stream/FindOps$FindOp;->getOpFlags()I
@@ -30455,19 +30660,13 @@
 HSPLjava/util/stream/ForEachOps$ForEachOp;->get()Ljava/lang/Void;
 HSPLjava/util/stream/ForEachOps$ForEachOp;->getOpFlags()I
 HSPLjava/util/stream/ForEachOps;->makeRef(Ljava/util/function/Consumer;Z)Ljava/util/stream/TerminalOp;
-HSPLjava/util/stream/IntPipeline$$ExternalSyntheticLambda13;->applyAsInt(II)I
 HSPLjava/util/stream/IntPipeline$$ExternalSyntheticLambda7;-><init>()V
 HSPLjava/util/stream/IntPipeline$$ExternalSyntheticLambda7;->apply(I)Ljava/lang/Object;
 HSPLjava/util/stream/IntPipeline$$ExternalSyntheticLambda8;-><init>()V
 HSPLjava/util/stream/IntPipeline$$ExternalSyntheticLambda8;->apply(I)Ljava/lang/Object;
 HSPLjava/util/stream/IntPipeline$4$1;-><init>(Ljava/util/stream/IntPipeline$4;Ljava/util/stream/Sink;)V
-HSPLjava/util/stream/IntPipeline$4$1;->accept(I)V
-HSPLjava/util/stream/IntPipeline$4;-><init>(Ljava/util/stream/IntPipeline;Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;ILjava/util/function/IntFunction;)V
+HSPLjava/util/stream/IntPipeline$4$1;->accept(I)V+]Ljava/util/function/IntFunction;Ljava/util/stream/IntPipeline$$ExternalSyntheticLambda8;]Ljava/util/stream/Sink;Ljava/util/stream/ReduceOps$3ReducingSink;
 HSPLjava/util/stream/IntPipeline$4;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
-HSPLjava/util/stream/IntPipeline$9$1;-><init>(Ljava/util/stream/IntPipeline$9;Ljava/util/stream/Sink;)V
-HSPLjava/util/stream/IntPipeline$9$1;->accept(I)V
-HSPLjava/util/stream/IntPipeline$9$1;->begin(J)V
-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
@@ -30479,21 +30678,20 @@
 HSPLjava/util/stream/IntPipeline;->adapt(Ljava/util/Spliterator;)Ljava/util/Spliterator$OfInt;
 HSPLjava/util/stream/IntPipeline;->adapt(Ljava/util/stream/Sink;)Ljava/util/function/IntConsumer;
 HSPLjava/util/stream/IntPipeline;->allMatch(Ljava/util/function/IntPredicate;)Z
-HSPLjava/util/stream/IntPipeline;->boxed()Ljava/util/stream/Stream;
+HSPLjava/util/stream/IntPipeline;->boxed()Ljava/util/stream/Stream;+]Ljava/util/stream/IntPipeline;Ljava/util/stream/IntPipeline$Head;
 HSPLjava/util/stream/IntPipeline;->distinct()Ljava/util/stream/IntStream;
 HSPLjava/util/stream/IntPipeline;->filter(Ljava/util/function/IntPredicate;)Ljava/util/stream/IntStream;
 HSPLjava/util/stream/IntPipeline;->makeNodeBuilder(JLjava/util/function/IntFunction;)Ljava/util/stream/Node$Builder;
 HSPLjava/util/stream/IntPipeline;->mapToObj(Ljava/util/function/IntFunction;)Ljava/util/stream/Stream;
 HSPLjava/util/stream/IntPipeline;->reduce(ILjava/util/function/IntBinaryOperator;)I
 HSPLjava/util/stream/IntPipeline;->sum()I
-HSPLjava/util/stream/IntPipeline;->toArray()[I
+HSPLjava/util/stream/IntPipeline;->toArray()[I+]Ljava/util/stream/IntPipeline;Ljava/util/stream/ReferencePipeline$4;]Ljava/util/stream/Node$OfInt;Ljava/util/stream/Nodes$IntFixedNodeBuilder;
 HSPLjava/util/stream/IntStream;->empty()Ljava/util/stream/IntStream;
 HSPLjava/util/stream/IntStream;->of([I)Ljava/util/stream/IntStream;
 HSPLjava/util/stream/IntStream;->range(II)Ljava/util/stream/IntStream;
 HSPLjava/util/stream/IntStream;->rangeClosed(II)Ljava/util/stream/IntStream;
 HSPLjava/util/stream/LongPipeline$$ExternalSyntheticLambda4;-><init>()V
 HSPLjava/util/stream/LongPipeline$$ExternalSyntheticLambda7;-><init>()V
-HSPLjava/util/stream/LongPipeline$$ExternalSyntheticLambda7;->applyAsLong(JJ)J
 HSPLjava/util/stream/LongPipeline$StatelessOp;-><init>(Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;I)V
 HSPLjava/util/stream/LongPipeline$StatelessOp;->opIsStateful()Z
 HSPLjava/util/stream/LongPipeline;-><init>(Ljava/util/stream/AbstractPipeline;I)V
@@ -30529,13 +30727,13 @@
 HSPLjava/util/stream/Nodes$FixedNodeBuilder;->build()Ljava/util/stream/Node;
 HSPLjava/util/stream/Nodes$FixedNodeBuilder;->end()V
 HSPLjava/util/stream/Nodes$IntArrayNode;-><init>(J)V
-HSPLjava/util/stream/Nodes$IntArrayNode;->asPrimitiveArray()Ljava/lang/Object;
+HSPLjava/util/stream/Nodes$IntArrayNode;->asPrimitiveArray()Ljava/lang/Object;+]Ljava/util/stream/Nodes$IntArrayNode;Ljava/util/stream/Nodes$IntFixedNodeBuilder;
 HSPLjava/util/stream/Nodes$IntArrayNode;->asPrimitiveArray()[I
 HSPLjava/util/stream/Nodes$IntFixedNodeBuilder;-><init>(J)V
 HSPLjava/util/stream/Nodes$IntFixedNodeBuilder;->accept(I)V
 HSPLjava/util/stream/Nodes$IntFixedNodeBuilder;->begin(J)V
 HSPLjava/util/stream/Nodes$IntFixedNodeBuilder;->build()Ljava/util/stream/Node$OfInt;
-HSPLjava/util/stream/Nodes$IntFixedNodeBuilder;->build()Ljava/util/stream/Node;
+HSPLjava/util/stream/Nodes$IntFixedNodeBuilder;->build()Ljava/util/stream/Node;+]Ljava/util/stream/Nodes$IntFixedNodeBuilder;Ljava/util/stream/Nodes$IntFixedNodeBuilder;
 HSPLjava/util/stream/Nodes$IntFixedNodeBuilder;->end()V
 HSPLjava/util/stream/Nodes$SpinedNodeBuilder;-><clinit>()V
 HSPLjava/util/stream/Nodes$SpinedNodeBuilder;-><init>()V
@@ -30547,11 +30745,9 @@
 HSPLjava/util/stream/Nodes;->builder()Ljava/util/stream/Node$Builder;
 HSPLjava/util/stream/Nodes;->builder(JLjava/util/function/IntFunction;)Ljava/util/stream/Node$Builder;
 HSPLjava/util/stream/Nodes;->flatten(Ljava/util/stream/Node;Ljava/util/function/IntFunction;)Ljava/util/stream/Node;
-HSPLjava/util/stream/Nodes;->flattenInt(Ljava/util/stream/Node$OfInt;)Ljava/util/stream/Node$OfInt;
+HSPLjava/util/stream/Nodes;->flattenInt(Ljava/util/stream/Node$OfInt;)Ljava/util/stream/Node$OfInt;+]Ljava/util/stream/Node$OfInt;Ljava/util/stream/Nodes$IntFixedNodeBuilder;
 HSPLjava/util/stream/Nodes;->intBuilder(J)Ljava/util/stream/Node$Builder$OfInt;
 HSPLjava/util/stream/PipelineHelper;-><init>()V
-HSPLjava/util/stream/ReduceOps$12;-><init>(Ljava/util/stream/StreamShape;Ljava/util/function/DoubleBinaryOperator;)V
-HSPLjava/util/stream/ReduceOps$12;->makeSink()Ljava/util/stream/ReduceOps$12ReducingSink;
 HSPLjava/util/stream/ReduceOps$12;->makeSink()Ljava/util/stream/ReduceOps$AccumulatingSink;
 HSPLjava/util/stream/ReduceOps$12ReducingSink;-><init>(Ljava/util/function/DoubleBinaryOperator;)V
 HSPLjava/util/stream/ReduceOps$12ReducingSink;->accept(D)V
@@ -30567,22 +30763,18 @@
 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
+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;->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;->begin(J)V
-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;
+HSPLjava/util/stream/ReduceOps$3ReducingSink;->accept(Ljava/lang/Object;)V+]Ljava/util/function/BiConsumer;Ljava/util/stream/Collectors$$ExternalSyntheticLambda75;
+HSPLjava/util/stream/ReduceOps$3ReducingSink;->begin(J)V+]Ljava/util/function/Supplier;Ljava/util/stream/Collectors$$ExternalSyntheticLambda74;
 HSPLjava/util/stream/ReduceOps$5;->makeSink()Ljava/util/stream/ReduceOps$AccumulatingSink;
 HSPLjava/util/stream/ReduceOps$5ReducingSink;-><init>(ILjava/util/function/IntBinaryOperator;)V
 HSPLjava/util/stream/ReduceOps$5ReducingSink;->accept(I)V
 HSPLjava/util/stream/ReduceOps$5ReducingSink;->begin(J)V
 HSPLjava/util/stream/ReduceOps$5ReducingSink;->get()Ljava/lang/Integer;
 HSPLjava/util/stream/ReduceOps$5ReducingSink;->get()Ljava/lang/Object;
-HSPLjava/util/stream/ReduceOps$8;-><init>(Ljava/util/stream/StreamShape;Ljava/util/function/LongBinaryOperator;J)V
-HSPLjava/util/stream/ReduceOps$8;->makeSink()Ljava/util/stream/ReduceOps$8ReducingSink;
 HSPLjava/util/stream/ReduceOps$8;->makeSink()Ljava/util/stream/ReduceOps$AccumulatingSink;
 HSPLjava/util/stream/ReduceOps$8ReducingSink;-><init>(JLjava/util/function/LongBinaryOperator;)V
 HSPLjava/util/stream/ReduceOps$8ReducingSink;->accept(J)V
@@ -30592,14 +30784,12 @@
 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;
+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;->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;
 HSPLjava/util/stream/ReduceOps;->makeRef(Ljava/util/function/BinaryOperator;)Ljava/util/stream/TerminalOp;
 HSPLjava/util/stream/ReduceOps;->makeRef(Ljava/util/stream/Collector;)Ljava/util/stream/TerminalOp;+]Ljava/util/stream/Collector;Ljava/util/stream/Collectors$CollectorImpl;
-HSPLjava/util/stream/ReferencePipeline$$ExternalSyntheticLambda2;-><init>()V
-HSPLjava/util/stream/ReferencePipeline$$ExternalSyntheticLambda2;->applyAsLong(Ljava/lang/Object;)J
 HSPLjava/util/stream/ReferencePipeline$2$1;-><init>(Ljava/util/stream/ReferencePipeline$2;Ljava/util/stream/Sink;)V
 HSPLjava/util/stream/ReferencePipeline$2$1;->accept(Ljava/lang/Object;)V
 HSPLjava/util/stream/ReferencePipeline$2$1;->begin(J)V
@@ -30610,7 +30800,7 @@
 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
-HSPLjava/util/stream/ReferencePipeline$4$1;->accept(Ljava/lang/Object;)V
+HSPLjava/util/stream/ReferencePipeline$4$1;->accept(Ljava/lang/Object;)V+]Ljava/util/stream/Sink;Ljava/util/stream/Nodes$IntFixedNodeBuilder;
 HSPLjava/util/stream/ReferencePipeline$4;-><init>(Ljava/util/stream/ReferencePipeline;Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;ILjava/util/function/ToIntFunction;)V
 HSPLjava/util/stream/ReferencePipeline$4;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
 HSPLjava/util/stream/ReferencePipeline$5$1;-><init>(Ljava/util/stream/ReferencePipeline$5;Ljava/util/stream/Sink;)V
@@ -30636,7 +30826,7 @@
 HSPLjava/util/stream/ReferencePipeline;-><init>(Ljava/util/stream/AbstractPipeline;I)V
 HSPLjava/util/stream/ReferencePipeline;->allMatch(Ljava/util/function/Predicate;)Z
 HSPLjava/util/stream/ReferencePipeline;->anyMatch(Ljava/util/function/Predicate;)Z
-HSPLjava/util/stream/ReferencePipeline;->collect(Ljava/util/stream/Collector;)Ljava/lang/Object;
+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;->count()J
 HSPLjava/util/stream/ReferencePipeline;->distinct()Ljava/util/stream/Stream;
 HSPLjava/util/stream/ReferencePipeline;->filter(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
@@ -30645,7 +30835,6 @@
 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;)Z
-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;
 HSPLjava/util/stream/ReferencePipeline;->mapToDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/DoubleStream;
@@ -30659,12 +30848,12 @@
 HSPLjava/util/stream/ReferencePipeline;->toArray(Ljava/util/function/IntFunction;)[Ljava/lang/Object;
 HSPLjava/util/stream/ReferencePipeline;->wrap(Ljava/util/stream/PipelineHelper;Ljava/util/function/Supplier;Z)Ljava/util/Spliterator;
 HSPLjava/util/stream/Sink$ChainedInt;-><init>(Ljava/util/stream/Sink;)V
-HSPLjava/util/stream/Sink$ChainedInt;->begin(J)V
-HSPLjava/util/stream/Sink$ChainedInt;->end()V
+HSPLjava/util/stream/Sink$ChainedInt;->begin(J)V+]Ljava/util/stream/Sink;Ljava/util/stream/ReduceOps$3ReducingSink;
+HSPLjava/util/stream/Sink$ChainedInt;->end()V+]Ljava/util/stream/Sink;Ljava/util/stream/ReduceOps$3ReducingSink;
 HSPLjava/util/stream/Sink$ChainedReference;-><init>(Ljava/util/stream/Sink;)V
-HSPLjava/util/stream/Sink$ChainedReference;->begin(J)V
+HSPLjava/util/stream/Sink$ChainedReference;->begin(J)V+]Ljava/util/stream/Sink;Ljava/util/stream/Nodes$IntFixedNodeBuilder;
 HSPLjava/util/stream/Sink$ChainedReference;->cancellationRequested()Z
-HSPLjava/util/stream/Sink$ChainedReference;->end()V
+HSPLjava/util/stream/Sink$ChainedReference;->end()V+]Ljava/util/stream/Sink;Ljava/util/stream/Nodes$IntFixedNodeBuilder;
 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
@@ -30693,7 +30882,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;Ljava/util/Spliterators$IntArraySpliterator;,Ljava/util/HashMap$KeySpliterator;
 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;
@@ -30731,7 +30920,6 @@
 HSPLjava/util/zip/Deflater;->deflate([BIII)I
 HSPLjava/util/zip/Deflater;->end()V
 HSPLjava/util/zip/Deflater;->ensureOpen()V
-HSPLjava/util/zip/Deflater;->finalize()V
 HSPLjava/util/zip/Deflater;->finish()V
 HSPLjava/util/zip/Deflater;->finished()Z
 HSPLjava/util/zip/Deflater;->getBytesRead()J
@@ -30772,15 +30960,13 @@
 HSPLjava/util/zip/Inflater;-><init>()V
 HSPLjava/util/zip/Inflater;-><init>(Z)V
 HSPLjava/util/zip/Inflater;->end()V
-HSPLjava/util/zip/Inflater;->ended()Z
-HSPLjava/util/zip/Inflater;->ensureOpen()V
-HSPLjava/util/zip/Inflater;->finalize()V
+HSPLjava/util/zip/Inflater;->ensureOpen()V+]Ljava/util/zip/ZStreamRef;Ljava/util/zip/ZStreamRef;
 HSPLjava/util/zip/Inflater;->finished()Z
 HSPLjava/util/zip/Inflater;->getBytesRead()J
 HSPLjava/util/zip/Inflater;->getBytesWritten()J
 HSPLjava/util/zip/Inflater;->getRemaining()I
 HSPLjava/util/zip/Inflater;->getTotalOut()I
-HSPLjava/util/zip/Inflater;->inflate([BII)I
+HSPLjava/util/zip/Inflater;->inflate([BII)I+]Ljava/util/zip/ZStreamRef;Ljava/util/zip/ZStreamRef;
 HSPLjava/util/zip/Inflater;->needsDictionary()Z
 HSPLjava/util/zip/Inflater;->needsInput()Z
 HSPLjava/util/zip/Inflater;->reset()V
@@ -30790,19 +30976,19 @@
 HSPLjava/util/zip/InflaterInputStream;->available()I
 HSPLjava/util/zip/InflaterInputStream;->close()V
 HSPLjava/util/zip/InflaterInputStream;->ensureOpen()V
-HSPLjava/util/zip/InflaterInputStream;->fill()V
+HSPLjava/util/zip/InflaterInputStream;->fill()V+]Ljava/io/InputStream;Ljava/io/PushbackInputStream;]Ljava/util/zip/Inflater;Ljava/util/zip/Inflater;
 HSPLjava/util/zip/InflaterInputStream;->read()I
-HSPLjava/util/zip/InflaterInputStream;->read([BII)I
+HSPLjava/util/zip/InflaterInputStream;->read([BII)I+]Ljava/util/zip/InflaterInputStream;Ljava/util/zip/ZipInputStream;]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
 HSPLjava/util/zip/ZipCoder;-><init>(Ljava/nio/charset/Charset;)V
-HSPLjava/util/zip/ZipCoder;->decoder()Ljava/nio/charset/CharsetDecoder;+]Ljava/nio/charset/Charset;Lcom/android/icu/charset/CharsetICU;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
+HSPLjava/util/zip/ZipCoder;->decoder()Ljava/nio/charset/CharsetDecoder;
 HSPLjava/util/zip/ZipCoder;->encoder()Ljava/nio/charset/CharsetEncoder;
 HSPLjava/util/zip/ZipCoder;->get(Ljava/nio/charset/Charset;)Ljava/util/zip/ZipCoder;
-HSPLjava/util/zip/ZipCoder;->getBytes(Ljava/lang/String;)[B+]Ljava/lang/String;Ljava/lang/String;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/nio/charset/CharsetEncoder;Lcom/android/icu/charset/CharsetEncoderICU;]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;
+HSPLjava/util/zip/ZipCoder;->getBytes(Ljava/lang/String;)[B+]Ljava/lang/String;Ljava/lang/String;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;
 HSPLjava/util/zip/ZipCoder;->isUTF8()Z
-HSPLjava/util/zip/ZipCoder;->toString([BI)Ljava/lang/String;+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
+HSPLjava/util/zip/ZipCoder;->toString([BI)Ljava/lang/String;+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;
 HSPLjava/util/zip/ZipEntry;-><init>()V
 HSPLjava/util/zip/ZipEntry;-><init>(Ljava/lang/String;)V
 HSPLjava/util/zip/ZipEntry;-><init>(Ljava/util/zip/ZipEntry;)V
@@ -30812,41 +30998,32 @@
 HSPLjava/util/zip/ZipEntry;->getName()Ljava/lang/String;
 HSPLjava/util/zip/ZipEntry;->getSize()J
 HSPLjava/util/zip/ZipEntry;->isDirectory()Z
-HSPLjava/util/zip/ZipEntry;->setExtra0([BZ)V
-HSPLjava/util/zip/ZipFile$ZipEntryIterator;-><init>(Ljava/util/zip/ZipFile;)V
 HSPLjava/util/zip/ZipFile$ZipEntryIterator;->hasMoreElements()Z
 HSPLjava/util/zip/ZipFile$ZipEntryIterator;->hasNext()Z
 HSPLjava/util/zip/ZipFile$ZipEntryIterator;->next()Ljava/util/zip/ZipEntry;
 HSPLjava/util/zip/ZipFile$ZipEntryIterator;->nextElement()Ljava/lang/Object;
 HSPLjava/util/zip/ZipFile$ZipEntryIterator;->nextElement()Ljava/util/zip/ZipEntry;
-HSPLjava/util/zip/ZipFile$ZipFileInflaterInputStream;-><init>(Ljava/util/zip/ZipFile;Ljava/util/zip/ZipFile$ZipFileInputStream;Ljava/util/zip/Inflater;I)V
 HSPLjava/util/zip/ZipFile$ZipFileInflaterInputStream;->available()I
 HSPLjava/util/zip/ZipFile$ZipFileInflaterInputStream;->close()V
 HSPLjava/util/zip/ZipFile$ZipFileInflaterInputStream;->fill()V
-HSPLjava/util/zip/ZipFile$ZipFileInflaterInputStream;->finalize()V
-HSPLjava/util/zip/ZipFile$ZipFileInputStream;-><init>(Ljava/util/zip/ZipFile;J)V
 HSPLjava/util/zip/ZipFile$ZipFileInputStream;->available()I
 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
 HSPLjava/util/zip/ZipFile;-><init>(Ljava/io/File;I)V
 HSPLjava/util/zip/ZipFile;-><init>(Ljava/io/File;ILjava/nio/charset/Charset;)V
+HSPLjava/util/zip/ZipFile;-><init>(Ljava/io/File;ILjava/nio/charset/Charset;Z)V+]Ljava/io/File;Ljava/io/File;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
+HSPLjava/util/zip/ZipFile;-><init>(Ljava/io/File;IZ)V
 HSPLjava/util/zip/ZipFile;-><init>(Ljava/lang/String;)V
 HSPLjava/util/zip/ZipFile;->close()V
 HSPLjava/util/zip/ZipFile;->ensureOpen()V
 HSPLjava/util/zip/ZipFile;->ensureOpenOrZipException()V
 HSPLjava/util/zip/ZipFile;->entries()Ljava/util/Enumeration;
-HSPLjava/util/zip/ZipFile;->finalize()V
-HSPLjava/util/zip/ZipFile;->getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;+]Ljava/util/zip/ZipCoder;Ljava/util/zip/ZipCoder;
-HSPLjava/util/zip/ZipFile;->getInflater()Ljava/util/zip/Inflater;
+HSPLjava/util/zip/ZipFile;->getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;
 HSPLjava/util/zip/ZipFile;->getInputStream(Ljava/util/zip/ZipEntry;)Ljava/io/InputStream;
-HSPLjava/util/zip/ZipFile;->getZipEntry(Ljava/lang/String;J)Ljava/util/zip/ZipEntry;
-HSPLjava/util/zip/ZipFile;->onZipEntryAccess([BI)V+]Ldalvik/system/ZipPathValidator$Callback;Ldalvik/system/ZipPathValidator$1;]Ljava/util/zip/ZipCoder;Ljava/util/zip/ZipCoder;
-HSPLjava/util/zip/ZipFile;->releaseInflater(Ljava/util/zip/Inflater;)V
 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
@@ -30854,10 +31031,10 @@
 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;
-HSPLjava/util/zip/ZipInputStream;->read([BII)I
+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
 HSPLjava/util/zip/ZipInputStream;->readFully([BII)V
-HSPLjava/util/zip/ZipInputStream;->readLOC()Ljava/util/zip/ZipEntry;
+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/ZipUtils;->get16([BI)I
 HSPLjava/util/zip/ZipUtils;->get32([BI)J
 HSPLjava/util/zip/ZipUtils;->unixTimeToFileTime(J)Ljava/nio/file/attribute/FileTime;
@@ -30889,8 +31066,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/security/Provider;missing_types]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;]Ljavax/crypto/CipherSpi;missing_types
 HSPLjavax/crypto/Cipher;->unwrap([BLjava/lang/String;I)Ljava/security/Key;
 HSPLjavax/crypto/Cipher;->update([BII[BI)I
 HSPLjavax/crypto/Cipher;->updateAAD([B)V
@@ -30919,17 +31096,17 @@
 HSPLjavax/crypto/Mac;-><init>(Ljava/lang/String;)V
 HSPLjavax/crypto/Mac;-><init>(Ljavax/crypto/MacSpi;Ljava/security/Provider;Ljava/lang/String;)V
 HSPLjavax/crypto/Mac;->chooseFirstProvider()V
-HSPLjavax/crypto/Mac;->chooseProvider(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V
-HSPLjavax/crypto/Mac;->doFinal()[B
+HSPLjavax/crypto/Mac;->chooseProvider(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V+]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;
+HSPLjavax/crypto/Mac;->doFinal()[B+]Ljavax/crypto/Mac;Ljavax/crypto/Mac;
 HSPLjavax/crypto/Mac;->doFinal([B)[B
 HSPLjavax/crypto/Mac;->doFinal([BI)V
 HSPLjavax/crypto/Mac;->getAlgorithm()Ljava/lang/String;
-HSPLjavax/crypto/Mac;->getInstance(Ljava/lang/String;)Ljavax/crypto/Mac;
+HSPLjavax/crypto/Mac;->getInstance(Ljava/lang/String;)Ljavax/crypto/Mac;+]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;
 HSPLjavax/crypto/Mac;->getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/Mac;
 HSPLjavax/crypto/Mac;->getMacLength()I
 HSPLjavax/crypto/Mac;->init(Ljava/security/Key;)V
-HSPLjavax/crypto/Mac;->update(B)V
-HSPLjavax/crypto/Mac;->update([B)V
+HSPLjavax/crypto/Mac;->update(B)V+]Ljavax/crypto/Mac;Ljavax/crypto/Mac;
+HSPLjavax/crypto/Mac;->update([B)V+]Ljavax/crypto/Mac;Ljavax/crypto/Mac;
 HSPLjavax/crypto/Mac;->update([BII)V
 HSPLjavax/crypto/MacSpi;-><init>()V
 HSPLjavax/crypto/SecretKeyFactory;-><init>(Ljava/lang/String;)V
@@ -30950,7 +31127,7 @@
 HSPLjavax/crypto/spec/PBEKeySpec;->getKeyLength()I
 HSPLjavax/crypto/spec/PBEKeySpec;->getPassword()[C
 HSPLjavax/crypto/spec/PBEKeySpec;->getSalt()[B
-HSPLjavax/crypto/spec/SecretKeySpec;-><init>([BLjava/lang/String;)V
+HSPLjavax/crypto/spec/SecretKeySpec;-><init>([BLjava/lang/String;)V+][B[B
 HSPLjavax/crypto/spec/SecretKeySpec;->getAlgorithm()Ljava/lang/String;
 HSPLjavax/crypto/spec/SecretKeySpec;->getEncoded()[B
 HSPLjavax/crypto/spec/SecretKeySpec;->getFormat()Ljava/lang/String;
@@ -31095,14 +31272,14 @@
 HSPLjdk/internal/math/FloatingDecimal$1;->initialValue()Ljava/lang/Object;
 HSPLjdk/internal/math/FloatingDecimal$1;->initialValue()Ljdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;
 HSPLjdk/internal/math/FloatingDecimal$ASCIIToBinaryBuffer;-><init>(ZI[CI)V
-HSPLjdk/internal/math/FloatingDecimal$ASCIIToBinaryBuffer;->doubleValue()D+]Ljdk/internal/math/FDBigInteger;Ljdk/internal/math/FDBigInteger;
+HSPLjdk/internal/math/FloatingDecimal$ASCIIToBinaryBuffer;->doubleValue()D
 HSPLjdk/internal/math/FloatingDecimal$ASCIIToBinaryBuffer;->floatValue()F
 HSPLjdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;->-$$Nest$mdtoa(Ljdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;IJIZ)V
 HSPLjdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;->-$$Nest$msetSign(Ljdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;Z)V
 HSPLjdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;-><init>()V
 HSPLjdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;->appendTo(Ljava/lang/Appendable;)V
 HSPLjdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;->developLongDigits(IJI)V
-HSPLjdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;->dtoa(IJIZ)V
+HSPLjdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;->dtoa(IJIZ)V+]Ljdk/internal/math/FDBigInteger;Ljdk/internal/math/FDBigInteger;
 HSPLjdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;->estimateDecExp(JI)I
 HSPLjdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;->getChars([C)I
 HSPLjdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;->getDecimalExponent()I
@@ -31115,13 +31292,13 @@
 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;->getBinaryToASCIIBuffer()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;
 HSPLjdk/internal/math/FloatingDecimal;->getBinaryToASCIIConverter(F)Ljdk/internal/math/FloatingDecimal$BinaryToASCIIConverter;
 HSPLjdk/internal/math/FloatingDecimal;->parseDouble(Ljava/lang/String;)D
 HSPLjdk/internal/math/FloatingDecimal;->parseFloat(Ljava/lang/String;)F
-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;->readJavaFormatString(Ljava/lang/String;)Ljdk/internal/math/FloatingDecimal$ASCIIToBinaryConverter;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjdk/internal/math/FloatingDecimal;->toJavaFormatString(D)Ljava/lang/String;
 HSPLjdk/internal/math/FloatingDecimal;->toJavaFormatString(F)Ljava/lang/String;
 HSPLjdk/internal/math/FormattedFloatingDecimal$1;-><init>()V
@@ -31131,7 +31308,7 @@
 HSPLjdk/internal/math/FormattedFloatingDecimal$Form;-><init>(Ljava/lang/String;I)V
 HSPLjdk/internal/math/FormattedFloatingDecimal$Form;->values()[Ljdk/internal/math/FormattedFloatingDecimal$Form;
 HSPLjdk/internal/math/FormattedFloatingDecimal;-><clinit>()V
-HSPLjdk/internal/math/FormattedFloatingDecimal;-><init>(ILjdk/internal/math/FormattedFloatingDecimal$Form;Ljdk/internal/math/FloatingDecimal$BinaryToASCIIConverter;)V
+HSPLjdk/internal/math/FormattedFloatingDecimal;-><init>(ILjdk/internal/math/FormattedFloatingDecimal$Form;Ljdk/internal/math/FloatingDecimal$BinaryToASCIIConverter;)V+]Ljdk/internal/math/FormattedFloatingDecimal$Form;Ljdk/internal/math/FormattedFloatingDecimal$Form;]Ljdk/internal/math/FloatingDecimal$BinaryToASCIIConverter;Ljdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;
 HSPLjdk/internal/math/FormattedFloatingDecimal;->applyPrecision(I[CII)I
 HSPLjdk/internal/math/FormattedFloatingDecimal;->create(ZI)[C
 HSPLjdk/internal/math/FormattedFloatingDecimal;->fillDecimal(I[CIIZ)V
@@ -31148,9 +31325,9 @@
 HSPLjdk/internal/misc/Unsafe;->getAndSetLong(Ljava/lang/Object;JJ)J
 HSPLjdk/internal/misc/Unsafe;->getAndSetObject(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;
 HSPLjdk/internal/misc/Unsafe;->getIntAcquire(Ljava/lang/Object;J)I
-HSPLjdk/internal/misc/Unsafe;->getIntUnaligned(Ljava/lang/Object;J)I
+HSPLjdk/internal/misc/Unsafe;->getIntUnaligned(Ljava/lang/Object;J)I+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjdk/internal/misc/Unsafe;->getLongAcquire(Ljava/lang/Object;J)J
-HSPLjdk/internal/misc/Unsafe;->getLongUnaligned(Ljava/lang/Object;J)J
+HSPLjdk/internal/misc/Unsafe;->getLongUnaligned(Ljava/lang/Object;J)J+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjdk/internal/misc/Unsafe;->getObject(Ljava/lang/Object;J)Ljava/lang/Object;
 HSPLjdk/internal/misc/Unsafe;->getObjectAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
 HSPLjdk/internal/misc/Unsafe;->getObjectVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
@@ -31160,7 +31337,7 @@
 HSPLjdk/internal/misc/Unsafe;->objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
 HSPLjdk/internal/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J
 HSPLjdk/internal/misc/Unsafe;->pickPos(II)I
-HSPLjdk/internal/misc/Unsafe;->putIntOpaque(Ljava/lang/Object;JI)V
+HSPLjdk/internal/misc/Unsafe;->putIntOpaque(Ljava/lang/Object;JI)V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjdk/internal/misc/Unsafe;->putIntRelease(Ljava/lang/Object;JI)V
 HSPLjdk/internal/misc/Unsafe;->putLongRelease(Ljava/lang/Object;JJ)V
 HSPLjdk/internal/misc/Unsafe;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V
@@ -31169,8 +31346,8 @@
 HSPLjdk/internal/misc/Unsafe;->putReferenceOpaque(Ljava/lang/Object;JLjava/lang/Object;)V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjdk/internal/misc/Unsafe;->putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjdk/internal/misc/Unsafe;->toUnsignedLong(I)J
-HSPLjdk/internal/misc/Unsafe;->weakCompareAndSetInt(Ljava/lang/Object;JII)Z
-HSPLjdk/internal/misc/Unsafe;->weakCompareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
+HSPLjdk/internal/misc/Unsafe;->weakCompareAndSetInt(Ljava/lang/Object;JII)Z+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
+HSPLjdk/internal/misc/Unsafe;->weakCompareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
 HSPLjdk/internal/misc/VM;->getSavedProperty(Ljava/lang/String;)Ljava/lang/String;
 HSPLjdk/internal/reflect/Reflection;->getCallerClass()Ljava/lang/Class;
 HSPLjdk/internal/util/ArraysSupport;->mismatch([B[BI)I
@@ -31178,10 +31355,11 @@
 HSPLjdk/internal/util/ArraysSupport;->mismatch([I[II)I
 HSPLjdk/internal/util/ArraysSupport;->mismatch([J[JI)I
 HSPLjdk/internal/util/ArraysSupport;->mismatch([Z[ZI)I
+HSPLjdk/internal/util/ArraysSupport;->newLength(III)I
 HSPLjdk/internal/util/ArraysSupport;->vectorizedMismatch(Ljava/lang/Object;JLjava/lang/Object;JII)I+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjdk/internal/util/Preconditions;->checkFromIndexSize(IIILjava/util/function/BiFunction;)I
 HSPLjdk/internal/util/Preconditions;->checkIndex(IILjava/util/function/BiFunction;)I
-HSPLlibcore/content/type/MimeMap$Builder$Element;-><init>(Ljava/lang/String;Z)V
+HSPLlibcore/content/type/MimeMap$Builder$Element;-><init>(Ljava/lang/String;Z)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLlibcore/content/type/MimeMap$Builder$Element;->ofExtensionSpec(Ljava/lang/String;)Llibcore/content/type/MimeMap$Builder$Element;
 HSPLlibcore/content/type/MimeMap$Builder$Element;->ofMimeSpec(Ljava/lang/String;)Llibcore/content/type/MimeMap$Builder$Element;
 HSPLlibcore/content/type/MimeMap$Builder;->addMimeMapping(Ljava/lang/String;Ljava/util/List;)Llibcore/content/type/MimeMap$Builder;
@@ -31190,10 +31368,10 @@
 HSPLlibcore/content/type/MimeMap;-><init>(Ljava/util/Map;Ljava/util/Map;)V
 HSPLlibcore/content/type/MimeMap;->checkValidExtension(Ljava/lang/String;)V
 HSPLlibcore/content/type/MimeMap;->checkValidMimeType(Ljava/lang/String;)V
-HSPLlibcore/content/type/MimeMap;->getDefault()Llibcore/content/type/MimeMap;
-HSPLlibcore/content/type/MimeMap;->guessMimeTypeFromExtension(Ljava/lang/String;)Ljava/lang/String;
-HSPLlibcore/content/type/MimeMap;->isValidMimeTypeOrExtension(Ljava/lang/String;)Z
-HSPLlibcore/content/type/MimeMap;->toLowerCase(Ljava/lang/String;)Ljava/lang/String;
+HSPLlibcore/content/type/MimeMap;->getDefault()Llibcore/content/type/MimeMap;+]Llibcore/content/type/MimeMap$MemoizingSupplier;Llibcore/content/type/MimeMap$MemoizingSupplier;
+HSPLlibcore/content/type/MimeMap;->guessMimeTypeFromExtension(Ljava/lang/String;)Ljava/lang/String;+]Ljava/util/Map;Ljava/util/HashMap;
+HSPLlibcore/content/type/MimeMap;->isValidMimeTypeOrExtension(Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
+HSPLlibcore/content/type/MimeMap;->toLowerCase(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLlibcore/icu/CollationKeyICU;-><init>(Ljava/lang/String;Landroid/icu/text/CollationKey;)V
 HSPLlibcore/icu/CollationKeyICU;->toByteArray()[B
 HSPLlibcore/icu/DecimalFormatData;-><init>(Ljava/util/Locale;)V
@@ -31226,7 +31404,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;+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Ljava/util/Locale;Ljava/util/Locale;
+HSPLlibcore/icu/LocaleData;->getCompatibleLocaleForBug159514442(Ljava/util/Locale;)Ljava/util/Locale;+]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
@@ -31235,10 +31413,10 @@
 HSPLlibcore/icu/SimpleDateFormatData;->getInstance(Ljava/util/Locale;)Llibcore/icu/SimpleDateFormatData;
 HSPLlibcore/icu/SimpleDateFormatData;->getTimeFormat(I)Ljava/lang/String;
 HSPLlibcore/internal/StringPool;-><init>()V
-HSPLlibcore/internal/StringPool;->contentEquals(Ljava/lang/String;[CII)Z
+HSPLlibcore/internal/StringPool;->contentEquals(Ljava/lang/String;[CII)Z+]Ljava/lang/String;Ljava/lang/String;
 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+]Ldalvik/system/BlockGuard$VmPolicy;Ldalvik/system/BlockGuard$2;,Landroid/os/StrictMode$5;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
+HSPLlibcore/io/BlockGuardOs;->access(Ljava/lang/String;I)Z
 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
@@ -31261,7 +31439,7 @@
 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
-HSPLlibcore/io/BlockGuardOs;->read(Ljava/io/FileDescriptor;[BII)I+]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
+HSPLlibcore/io/BlockGuardOs;->read(Ljava/io/FileDescriptor;[BII)I+]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;
 HSPLlibcore/io/BlockGuardOs;->readlink(Ljava/lang/String;)Ljava/lang/String;
 HSPLlibcore/io/BlockGuardOs;->recvfrom(Ljava/io/FileDescriptor;[BIIILjava/net/InetSocketAddress;)I
 HSPLlibcore/io/BlockGuardOs;->remove(Ljava/lang/String;)V
@@ -31272,19 +31450,20 @@
 HSPLlibcore/io/BlockGuardOs;->stat(Ljava/lang/String;)Landroid/system/StructStat;
 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;
+HSPLlibcore/io/BlockGuardOs;->write(Ljava/io/FileDescriptor;[BII)I+]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;
 HSPLlibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection$1;-><init>(Llibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection;Ljava/io/InputStream;)V
 HSPLlibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection$1;->close()V
 HSPLlibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection;-><init>(Llibcore/io/ClassPathURLStreamHandler;Ljava/net/URL;)V
 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;+]Ljava/util/jar/JarFile;Ljava/util/jar/JarFile;
+HSPLlibcore/io/ClassPathURLStreamHandler;-><init>(Ljava/lang/String;Z)V
+HSPLlibcore/io/ClassPathURLStreamHandler;->getEntryUrlOrNull(Ljava/lang/String;)Ljava/net/URL;
 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+]Llibcore/io/Os;Llibcore/io/BlockGuardOs;,Llibcore/io/Linux;
+HSPLlibcore/io/ForwardingOs;->access(Ljava/lang/String;I)Z
 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
@@ -31305,11 +31484,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+]Llibcore/io/Os;Llibcore/io/BlockGuardOs;,Llibcore/io/Linux;
+HSPLlibcore/io/ForwardingOs;->getpid()I
 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+]Llibcore/io/Os;Llibcore/io/BlockGuardOs;,Llibcore/io/Linux;
+HSPLlibcore/io/ForwardingOs;->gettid()I
 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
@@ -31358,16 +31537,16 @@
 HSPLlibcore/io/IoBridge;->open(Ljava/lang/String;I)Ljava/io/FileDescriptor;
 HSPLlibcore/io/IoBridge;->poll(Ljava/io/FileDescriptor;II)V
 HSPLlibcore/io/IoBridge;->postRecvfrom(ZLjava/net/DatagramPacket;Ljava/net/InetSocketAddress;I)I
-HSPLlibcore/io/IoBridge;->read(Ljava/io/FileDescriptor;[BII)I+]Llibcore/io/Os;Landroid/app/ActivityThread$AndroidOs;
+HSPLlibcore/io/IoBridge;->read(Ljava/io/FileDescriptor;[BII)I
 HSPLlibcore/io/IoBridge;->recvfrom(ZLjava/io/FileDescriptor;[BIIILjava/net/DatagramPacket;Z)I
 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
 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;
+HSPLlibcore/io/IoTracker;->trackIo(I)V+]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;
 HSPLlibcore/io/IoTracker;->trackIo(ILlibcore/io/IoTracker$Mode;)V+]Llibcore/io/IoTracker;Llibcore/io/IoTracker;
 HSPLlibcore/io/IoUtils;->acquireRawFd(Ljava/io/FileDescriptor;)I
 HSPLlibcore/io/IoUtils;->canOpenReadOnly(Ljava/lang/String;)Z
@@ -31414,32 +31593,32 @@
 HSPLlibcore/net/http/HttpURLConnectionFactory;->openConnection(Ljava/net/URL;Ljavax/net/SocketFactory;Ljava/net/Proxy;)Ljava/net/URLConnection;
 HSPLlibcore/net/http/HttpURLConnectionFactory;->setDns(Llibcore/net/http/Dns;)V
 HSPLlibcore/net/http/HttpURLConnectionFactory;->setNewConnectionPool(IJLjava/util/concurrent/TimeUnit;)V
-HSPLlibcore/reflect/AnnotationFactory;-><init>(Ljava/lang/Class;[Llibcore/reflect/AnnotationMember;)V+]Llibcore/reflect/AnnotationMember;Llibcore/reflect/AnnotationMember;
-HSPLlibcore/reflect/AnnotationFactory;->createAnnotation(Ljava/lang/Class;[Llibcore/reflect/AnnotationMember;)Ljava/lang/annotation/Annotation;
-HSPLlibcore/reflect/AnnotationFactory;->getElementsDescription(Ljava/lang/Class;)[Llibcore/reflect/AnnotationMember;
-HSPLlibcore/reflect/AnnotationFactory;->invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;]Llibcore/reflect/AnnotationMember;Llibcore/reflect/AnnotationMember;
+HSPLlibcore/reflect/AnnotationFactory;-><init>(Ljava/lang/Class;[Llibcore/reflect/AnnotationMember;)V
+HSPLlibcore/reflect/AnnotationFactory;->createAnnotation(Ljava/lang/Class;[Llibcore/reflect/AnnotationMember;)Ljava/lang/annotation/Annotation;+]Ljava/lang/Class;Ljava/lang/Class;
+HSPLlibcore/reflect/AnnotationFactory;->getElementsDescription(Ljava/lang/Class;)[Llibcore/reflect/AnnotationMember;+]Ljava/util/Map;Ljava/util/WeakHashMap;
+HSPLlibcore/reflect/AnnotationFactory;->invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;
 HSPLlibcore/reflect/AnnotationMember;-><init>(Ljava/lang/String;Ljava/lang/Object;)V
 HSPLlibcore/reflect/AnnotationMember;-><init>(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/reflect/Method;)V
 HSPLlibcore/reflect/AnnotationMember;->copyValue()Ljava/lang/Object;
 HSPLlibcore/reflect/AnnotationMember;->setDefinition(Llibcore/reflect/AnnotationMember;)Llibcore/reflect/AnnotationMember;
-HSPLlibcore/reflect/AnnotationMember;->validateValue()Ljava/lang/Object;+]Ljava/lang/Object;missing_types]Llibcore/reflect/AnnotationMember;Llibcore/reflect/AnnotationMember;
+HSPLlibcore/reflect/AnnotationMember;->validateValue()Ljava/lang/Object;
 HSPLlibcore/reflect/GenericArrayTypeImpl;->getGenericComponentType()Ljava/lang/reflect/Type;
 HSPLlibcore/reflect/GenericSignatureParser;-><init>(Ljava/lang/ClassLoader;)V
-HSPLlibcore/reflect/GenericSignatureParser;->expect(C)V+]Llibcore/reflect/GenericSignatureParser;Llibcore/reflect/GenericSignatureParser;
+HSPLlibcore/reflect/GenericSignatureParser;->expect(C)V
 HSPLlibcore/reflect/GenericSignatureParser;->isStopSymbol(C)Z
-HSPLlibcore/reflect/GenericSignatureParser;->parseClassSignature()V
+HSPLlibcore/reflect/GenericSignatureParser;->parseClassSignature()V+]Llibcore/reflect/GenericSignatureParser;Llibcore/reflect/GenericSignatureParser;
 HSPLlibcore/reflect/GenericSignatureParser;->parseClassTypeSignature()Ljava/lang/reflect/Type;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Llibcore/reflect/GenericSignatureParser;Llibcore/reflect/GenericSignatureParser;
 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
-HSPLlibcore/reflect/GenericSignatureParser;->parseForField(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;)V+]Llibcore/reflect/GenericSignatureParser;Llibcore/reflect/GenericSignatureParser;
+HSPLlibcore/reflect/GenericSignatureParser;->parseForField(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;)V
 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
 HSPLlibcore/reflect/GenericSignatureParser;->parseOptFormalTypeParameters()V
 HSPLlibcore/reflect/GenericSignatureParser;->parseOptTypeArguments()Llibcore/reflect/ListOfTypes;+]Llibcore/reflect/ListOfTypes;Llibcore/reflect/ListOfTypes;]Llibcore/reflect/GenericSignatureParser;Llibcore/reflect/GenericSignatureParser;
 HSPLlibcore/reflect/GenericSignatureParser;->parseReturnType()Ljava/lang/reflect/Type;
-HSPLlibcore/reflect/GenericSignatureParser;->parseTypeArgument()Ljava/lang/reflect/Type;
+HSPLlibcore/reflect/GenericSignatureParser;->parseTypeArgument()Ljava/lang/reflect/Type;+]Llibcore/reflect/ListOfTypes;Llibcore/reflect/ListOfTypes;]Llibcore/reflect/GenericSignatureParser;Llibcore/reflect/GenericSignatureParser;
 HSPLlibcore/reflect/GenericSignatureParser;->parseTypeSignature()Ljava/lang/reflect/Type;
 HSPLlibcore/reflect/GenericSignatureParser;->parseTypeVariableSignature()Llibcore/reflect/TypeVariableImpl;
 HSPLlibcore/reflect/GenericSignatureParser;->scanIdentifier()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Llibcore/reflect/GenericSignatureParser;Llibcore/reflect/GenericSignatureParser;
@@ -31450,16 +31629,16 @@
 HSPLlibcore/reflect/ListOfTypes;->add(Ljava/lang/reflect/Type;)V
 HSPLlibcore/reflect/ListOfTypes;->getResolvedTypes()[Ljava/lang/reflect/Type;
 HSPLlibcore/reflect/ListOfTypes;->length()I
-HSPLlibcore/reflect/ListOfTypes;->resolveTypes(Ljava/util/List;)[Ljava/lang/reflect/Type;
+HSPLlibcore/reflect/ListOfTypes;->resolveTypes(Ljava/util/List;)[Ljava/lang/reflect/Type;+]Ljava/util/List;Ljava/util/ArrayList;]Llibcore/reflect/ParameterizedTypeImpl;Llibcore/reflect/ParameterizedTypeImpl;
 HSPLlibcore/reflect/ListOfVariables;-><init>()V
 HSPLlibcore/reflect/ListOfVariables;->add(Ljava/lang/reflect/TypeVariable;)V
-HSPLlibcore/reflect/ListOfVariables;->getArray()[Ljava/lang/reflect/TypeVariable;
+HSPLlibcore/reflect/ListOfVariables;->getArray()[Ljava/lang/reflect/TypeVariable;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLlibcore/reflect/ParameterizedTypeImpl;-><init>(Llibcore/reflect/ParameterizedTypeImpl;Ljava/lang/String;Llibcore/reflect/ListOfTypes;Ljava/lang/ClassLoader;)V
 HSPLlibcore/reflect/ParameterizedTypeImpl;->equals(Ljava/lang/Object;)Z
-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;+]Llibcore/reflect/ParameterizedTypeImpl;Llibcore/reflect/ParameterizedTypeImpl;
+HSPLlibcore/reflect/ParameterizedTypeImpl;->getRawType()Ljava/lang/reflect/Type;
 HSPLlibcore/reflect/ParameterizedTypeImpl;->getResolvedType()Ljava/lang/reflect/Type;
 HSPLlibcore/reflect/TypeVariableImpl;-><init>(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;)V
 HSPLlibcore/reflect/TypeVariableImpl;-><init>(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;Llibcore/reflect/ListOfTypes;)V
@@ -31479,7 +31658,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;+]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
@@ -31650,7 +31829,7 @@
 HSPLorg/ccil/cowan/tagsoup/HTMLScanner;->scan(Ljava/io/Reader;Lorg/ccil/cowan/tagsoup/ScanHandler;)V
 HSPLorg/ccil/cowan/tagsoup/HTMLScanner;->unread(Ljava/io/PushbackReader;I)V
 HSPLorg/ccil/cowan/tagsoup/Parser$1;-><init>(Lorg/ccil/cowan/tagsoup/Parser;)V
-HSPLorg/ccil/cowan/tagsoup/Parser;-><init>()V+]Ljava/util/HashMap;Ljava/util/HashMap;
+HSPLorg/ccil/cowan/tagsoup/Parser;-><init>()V
 HSPLorg/ccil/cowan/tagsoup/Parser;->aname([CII)V
 HSPLorg/ccil/cowan/tagsoup/Parser;->aval([CII)V
 HSPLorg/ccil/cowan/tagsoup/Parser;->entity([CII)V
@@ -31706,7 +31885,7 @@
 HSPLorg/json/JSONArray;->put(J)Lorg/json/JSONArray;
 HSPLorg/json/JSONArray;->put(Ljava/lang/Object;)Lorg/json/JSONArray;
 HSPLorg/json/JSONArray;->toString()Ljava/lang/String;
-HSPLorg/json/JSONArray;->writeTo(Lorg/json/JSONStringer;)V
+HSPLorg/json/JSONArray;->writeTo(Lorg/json/JSONStringer;)V+]Lorg/json/JSONStringer;Lorg/json/JSONStringer;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLorg/json/JSONException;-><init>(Ljava/lang/String;)V
 HSPLorg/json/JSONObject$1;->toString()Ljava/lang/String;
 HSPLorg/json/JSONObject;-><init>()V
@@ -31714,7 +31893,7 @@
 HSPLorg/json/JSONObject;-><init>(Ljava/util/Map;)V
 HSPLorg/json/JSONObject;-><init>(Lorg/json/JSONTokener;)V
 HSPLorg/json/JSONObject;->checkName(Ljava/lang/String;)Ljava/lang/String;
-HSPLorg/json/JSONObject;->get(Ljava/lang/String;)Ljava/lang/Object;
+HSPLorg/json/JSONObject;->get(Ljava/lang/String;)Ljava/lang/Object;+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;
 HSPLorg/json/JSONObject;->getBoolean(Ljava/lang/String;)Z
 HSPLorg/json/JSONObject;->getDouble(Ljava/lang/String;)D
 HSPLorg/json/JSONObject;->getInt(Ljava/lang/String;)I
@@ -31726,7 +31905,7 @@
 HSPLorg/json/JSONObject;->isNull(Ljava/lang/String;)Z
 HSPLorg/json/JSONObject;->keys()Ljava/util/Iterator;
 HSPLorg/json/JSONObject;->length()I
-HSPLorg/json/JSONObject;->numberToString(Ljava/lang/Number;)Ljava/lang/String;
+HSPLorg/json/JSONObject;->numberToString(Ljava/lang/Number;)Ljava/lang/String;+]Ljava/lang/Object;Ljava/lang/Integer;,Ljava/lang/Float;]Ljava/lang/Number;Ljava/lang/Integer;,Ljava/lang/Float;
 HSPLorg/json/JSONObject;->opt(Ljava/lang/String;)Ljava/lang/Object;
 HSPLorg/json/JSONObject;->optBoolean(Ljava/lang/String;)Z
 HSPLorg/json/JSONObject;->optBoolean(Ljava/lang/String;Z)Z
@@ -31740,42 +31919,42 @@
 HSPLorg/json/JSONObject;->optString(Ljava/lang/String;)Ljava/lang/String;
 HSPLorg/json/JSONObject;->optString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLorg/json/JSONObject;->put(Ljava/lang/String;D)Lorg/json/JSONObject;
-HSPLorg/json/JSONObject;->put(Ljava/lang/String;I)Lorg/json/JSONObject;
+HSPLorg/json/JSONObject;->put(Ljava/lang/String;I)Lorg/json/JSONObject;+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;
 HSPLorg/json/JSONObject;->put(Ljava/lang/String;J)Lorg/json/JSONObject;
-HSPLorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;
+HSPLorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Ljava/lang/Number;Ljava/lang/Integer;,Ljava/lang/Double;,Ljava/lang/Float;]Lorg/json/JSONObject;missing_types
 HSPLorg/json/JSONObject;->put(Ljava/lang/String;Z)Lorg/json/JSONObject;
 HSPLorg/json/JSONObject;->putOpt(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;
 HSPLorg/json/JSONObject;->remove(Ljava/lang/String;)Ljava/lang/Object;
 HSPLorg/json/JSONObject;->toString()Ljava/lang/String;
 HSPLorg/json/JSONObject;->toString(I)Ljava/lang/String;
 HSPLorg/json/JSONObject;->wrap(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLorg/json/JSONObject;->writeTo(Lorg/json/JSONStringer;)V
+HSPLorg/json/JSONObject;->writeTo(Lorg/json/JSONStringer;)V+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Lorg/json/JSONStringer;Lorg/json/JSONStringer;
 HSPLorg/json/JSONStringer;-><init>()V
 HSPLorg/json/JSONStringer;-><init>(I)V
 HSPLorg/json/JSONStringer;->array()Lorg/json/JSONStringer;
-HSPLorg/json/JSONStringer;->beforeKey()V
-HSPLorg/json/JSONStringer;->beforeValue()V
-HSPLorg/json/JSONStringer;->close(Lorg/json/JSONStringer$Scope;Lorg/json/JSONStringer$Scope;Ljava/lang/String;)Lorg/json/JSONStringer;
+HSPLorg/json/JSONStringer;->beforeKey()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLorg/json/JSONStringer;->beforeValue()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLorg/json/JSONStringer;->close(Lorg/json/JSONStringer$Scope;Lorg/json/JSONStringer$Scope;Ljava/lang/String;)Lorg/json/JSONStringer;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLorg/json/JSONStringer;->endArray()Lorg/json/JSONStringer;
-HSPLorg/json/JSONStringer;->endObject()Lorg/json/JSONStringer;
+HSPLorg/json/JSONStringer;->endObject()Lorg/json/JSONStringer;+]Lorg/json/JSONStringer;Lorg/json/JSONStringer;
 HSPLorg/json/JSONStringer;->key(Ljava/lang/String;)Lorg/json/JSONStringer;
 HSPLorg/json/JSONStringer;->newline()V
-HSPLorg/json/JSONStringer;->object()Lorg/json/JSONStringer;
-HSPLorg/json/JSONStringer;->open(Lorg/json/JSONStringer$Scope;Ljava/lang/String;)Lorg/json/JSONStringer;
+HSPLorg/json/JSONStringer;->object()Lorg/json/JSONStringer;+]Lorg/json/JSONStringer;Lorg/json/JSONStringer;
+HSPLorg/json/JSONStringer;->open(Lorg/json/JSONStringer$Scope;Ljava/lang/String;)Lorg/json/JSONStringer;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLorg/json/JSONStringer;->peek()Lorg/json/JSONStringer$Scope;+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLorg/json/JSONStringer;->replaceTop(Lorg/json/JSONStringer$Scope;)V+]Ljava/util/List;Ljava/util/ArrayList;
-HSPLorg/json/JSONStringer;->string(Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLorg/json/JSONStringer;->string(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLorg/json/JSONStringer;->toString()Ljava/lang/String;
-HSPLorg/json/JSONStringer;->value(Ljava/lang/Object;)Lorg/json/JSONStringer;
+HSPLorg/json/JSONStringer;->value(Ljava/lang/Object;)Lorg/json/JSONStringer;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;Ljava/lang/String;]Lorg/json/JSONObject;Lorg/json/JSONObject;]Ljava/util/List;Ljava/util/ArrayList;]Lorg/json/JSONArray;Lorg/json/JSONArray;
 HSPLorg/json/JSONTokener;-><init>(Ljava/lang/String;)V
-HSPLorg/json/JSONTokener;->nextCleanInternal()I
-HSPLorg/json/JSONTokener;->nextString(C)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;
+HSPLorg/json/JSONTokener;->nextCleanInternal()I+]Ljava/lang/String;Ljava/lang/String;
+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;+]Lorg/json/JSONTokener;Lorg/json/JSONTokener;
 HSPLorg/json/JSONTokener;->readArray()Lorg/json/JSONArray;+]Lorg/json/JSONTokener;Lorg/json/JSONTokener;]Lorg/json/JSONArray;Lorg/json/JSONArray;
 HSPLorg/json/JSONTokener;->readEscapeCharacter()C
-HSPLorg/json/JSONTokener;->readLiteral()Ljava/lang/Object;
-HSPLorg/json/JSONTokener;->readObject()Lorg/json/JSONObject;
+HSPLorg/json/JSONTokener;->readLiteral()Ljava/lang/Object;+]Ljava/lang/String;Ljava/lang/String;
+HSPLorg/json/JSONTokener;->readObject()Lorg/json/JSONObject;+]Ljava/lang/String;Ljava/lang/String;]Lorg/json/JSONObject;Lorg/json/JSONObject;]Lorg/json/JSONTokener;Lorg/json/JSONTokener;
 HSPLorg/json/JSONTokener;->syntaxError(Ljava/lang/String;)Lorg/json/JSONException;
 HSPLorg/json/JSONTokener;->toString()Ljava/lang/String;
 HSPLorg/xml/sax/InputSource;-><init>(Ljava/io/InputStream;)V
@@ -31812,14 +31991,15 @@
 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+]Ljava/lang/Runnable;Landroid/graphics/HardwareRenderer$DestroyContextRunnable;,Llibcore/util/NativeAllocationRegistry$CleanerThunk;
+HSPLsun/misc/Cleaner;->clean()V+]Ljava/lang/Runnable;Lsun/nio/ch/FileChannelImpl$Unmapper;
 HSPLsun/misc/Cleaner;->create(Ljava/lang/Object;Ljava/lang/Runnable;)Lsun/misc/Cleaner;
+HSPLsun/misc/Cleaner;->isCleanerQueue(Ljava/lang/ref/ReferenceQueue;)Z
 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+]Ljava/io/InputStream;Lsun/security/util/DerInputBuffer;,Ljava/io/ByteArrayInputStream;
+HSPLsun/misc/IOUtils;->readFully(Ljava/io/InputStream;IZ)[B
 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
@@ -31869,9 +32049,9 @@
 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$Unmapper;->run()V+]Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;
 HSPLsun/nio/ch/FileChannelImpl;-><init>(Ljava/io/FileDescriptor;Ljava/lang/String;ZZZLjava/lang/Object;)V
-HSPLsun/nio/ch/FileChannelImpl;->ensureOpen()V
+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;->finalize()V
 HSPLsun/nio/ch/FileChannelImpl;->force(Z)V
@@ -31885,7 +32065,7 @@
 HSPLsun/nio/ch/FileChannelImpl;->position(J)Ljava/nio/channels/FileChannel;
 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/NativeThreadSet;Lsun/nio/ch/NativeThreadSet;]Lsun/nio/ch/FileDispatcher;Lsun/nio/ch/FileDispatcherImpl;]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/FileDescriptorHolderSocketImpl;-><init>(Ljava/io/FileDescriptor;)V
@@ -31913,8 +32093,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
@@ -32001,17 +32181,17 @@
 HSPLsun/nio/ch/Util$1;->initialValue()Lsun/nio/ch/Util$BufferCache;
 HSPLsun/nio/ch/Util$3;-><init>(Ljava/util/Set;)V
 HSPLsun/nio/ch/Util$BufferCache;-><init>()V
-HSPLsun/nio/ch/Util$BufferCache;->get(I)Ljava/nio/ByteBuffer;
+HSPLsun/nio/ch/Util$BufferCache;->get(I)Ljava/nio/ByteBuffer;+]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;
 HSPLsun/nio/ch/Util$BufferCache;->isEmpty()Z
 HSPLsun/nio/ch/Util$BufferCache;->next(I)I
 HSPLsun/nio/ch/Util$BufferCache;->offerFirst(Ljava/nio/ByteBuffer;)Z
 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
@@ -32021,13 +32201,13 @@
 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;
 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;->read([CII)I+]Lsun/nio/cs/StreamDecoder;Lsun/nio/cs/StreamDecoder;
 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/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
@@ -32040,11 +32220,11 @@
 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+]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;->implWrite([CII)V+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;]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+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/io/OutputStream;Ljava/util/logging/FileHandler$MeteredStream;,Ljava/io/FileOutputStream;
+HSPLsun/nio/cs/StreamEncoder;->writeBytes()V
 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;
@@ -32068,7 +32248,7 @@
 HSPLsun/nio/fs/NativeBuffer;->setOwner(Ljava/lang/Object;)V
 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
+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/UnixChannelFactory$1;-><clinit>()V
@@ -32100,7 +32280,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;
@@ -32137,7 +32317,7 @@
 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/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
@@ -32148,7 +32328,7 @@
 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;->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/ByteBuffer;Ljava/nio/HeapByteBuffer;]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
 HSPLsun/nio/fs/UnixPath;->getFileSystem()Ljava/nio/file/FileSystem;
 HSPLsun/nio/fs/UnixPath;->getFileSystem()Lsun/nio/fs/UnixFileSystem;
@@ -32158,7 +32338,7 @@
 HSPLsun/nio/fs/UnixPath;->initOffsets()V
 HSPLsun/nio/fs/UnixPath;->isEmpty()Z
 HSPLsun/nio/fs/UnixPath;->normalize(Ljava/lang/String;II)Ljava/lang/String;
-HSPLsun/nio/fs/UnixPath;->normalizeAndCheck(Ljava/lang/String;)Ljava/lang/String;
+HSPLsun/nio/fs/UnixPath;->normalizeAndCheck(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLsun/nio/fs/UnixPath;->resolve(Ljava/nio/file/Path;)Ljava/nio/file/Path;
 HSPLsun/nio/fs/UnixPath;->resolve(Ljava/nio/file/Path;)Lsun/nio/fs/UnixPath;
 HSPLsun/nio/fs/UnixPath;->resolve([B)Lsun/nio/fs/UnixPath;
@@ -32185,11 +32365,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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lsun/security/jca/ProviderList;Lsun/security/jca/ProviderList;
+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;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;+]Ljava/security/Provider$Service;Ljava/security/Provider$Service;
+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;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;
@@ -32221,7 +32401,7 @@
 HSPLsun/security/jca/ProviderList;->getProvider(I)Ljava/security/Provider;
 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;+]Lsun/security/jca/ProviderList;Lsun/security/jca/ProviderList;]Ljava/security/Provider;missing_types
+HSPLsun/security/jca/ProviderList;->getService(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;
 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
@@ -32355,7 +32535,7 @@
 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;->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+]Lsun/security/provider/certpath/PolicyNodeImpl;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;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;
@@ -32409,7 +32589,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;+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;]Ljava/lang/Object;Lsun/security/util/DerInputBuffer;
+HSPLsun/security/util/DerInputBuffer;->dup()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
@@ -32422,34 +32602,34 @@
 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+]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/DerInputBuffer;->truncate(I)V
+HSPLsun/security/util/DerInputStream;-><init>(Lsun/security/util/DerInputBuffer;)V
 HSPLsun/security/util/DerInputStream;-><init>([B)V
-HSPLsun/security/util/DerInputStream;->available()I+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;
+HSPLsun/security/util/DerInputStream;->available()I
 HSPLsun/security/util/DerInputStream;->getBigInteger()Ljava/math/BigInteger;
-HSPLsun/security/util/DerInputStream;->getByte()I+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;
+HSPLsun/security/util/DerInputStream;->getByte()I
 HSPLsun/security/util/DerInputStream;->getBytes([B)V
 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+]Ljava/io/InputStream;Lsun/security/util/DerInputBuffer;
+HSPLsun/security/util/DerInputStream;->getLength(Ljava/io/InputStream;)I
 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;+]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;->getSequence(IZ)[Lsun/security/util/DerValue;
+HSPLsun/security/util/DerInputStream;->getSet(I)[Lsun/security/util/DerValue;
 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;
 HSPLsun/security/util/DerInputStream;->getUnalignedBitString()Lsun/security/util/BitArray;
-HSPLsun/security/util/DerInputStream;->init([BIIZ)V+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;
+HSPLsun/security/util/DerInputStream;->init([BIIZ)V
 HSPLsun/security/util/DerInputStream;->mark(I)V
 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+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;
+HSPLsun/security/util/DerInputStream;->reset()V
 HSPLsun/security/util/DerInputStream;->subStream(IZ)Lsun/security/util/DerInputStream;
 HSPLsun/security/util/DerInputStream;->toByteArray()[B
 HSPLsun/security/util/DerOutputStream;-><init>()V
@@ -32473,7 +32653,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+]Lsun/security/util/DerInputStream;Lsun/security/util/DerInputStream;
+HSPLsun/security/util/DerValue;->getDataBytes()[B
 HSPLsun/security/util/DerValue;->getIA5String()Ljava/lang/String;
 HSPLsun/security/util/DerValue;->getInteger()I
 HSPLsun/security/util/DerValue;->getOID()Lsun/security/util/ObjectIdentifier;
@@ -32482,14 +32662,14 @@
 HSPLsun/security/util/DerValue;->getTag()B
 HSPLsun/security/util/DerValue;->getUnalignedBitString()Lsun/security/util/BitArray;
 HSPLsun/security/util/DerValue;->init(BLjava/lang/String;)Lsun/security/util/DerInputStream;
-HSPLsun/security/util/DerValue;->init(ZLjava/io/InputStream;)Lsun/security/util/DerInputStream;+]Ljava/io/InputStream;Lsun/security/util/DerInputBuffer;,Ljava/io/ByteArrayInputStream;
+HSPLsun/security/util/DerValue;->init(ZLjava/io/InputStream;)Lsun/security/util/DerInputStream;+]Ljava/io/InputStream;Lsun/security/util/DerInputBuffer;
 HSPLsun/security/util/DerValue;->isConstructed()Z
 HSPLsun/security/util/DerValue;->isContextSpecific()Z
 HSPLsun/security/util/DerValue;->isContextSpecific(B)Z
 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+]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;->toByteArray()[B
 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
@@ -32513,7 +32693,7 @@
 HSPLsun/security/util/ManifestEntryVerifier;-><init>(Ljava/util/jar/Manifest;)V
 HSPLsun/security/util/ManifestEntryVerifier;->getEntry()Ljava/util/jar/JarEntry;
 HSPLsun/security/util/ManifestEntryVerifier;->setEntry(Ljava/lang/String;Ljava/util/jar/JarEntry;)V
-HSPLsun/security/util/ManifestEntryVerifier;->update(B)V
+HSPLsun/security/util/ManifestEntryVerifier;->update(B)V+]Ljava/security/MessageDigest;Ljava/security/MessageDigest$Delegate;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLsun/security/util/ManifestEntryVerifier;->update([BII)V
 HSPLsun/security/util/ManifestEntryVerifier;->verify(Ljava/util/Hashtable;Ljava/util/Hashtable;)[Ljava/security/CodeSigner;
 HSPLsun/security/util/MemoryCache$SoftCacheEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;JLjava/lang/ref/ReferenceQueue;)V
@@ -32529,7 +32709,7 @@
 HSPLsun/security/util/ObjectIdentifier;->encode(Lsun/security/util/DerOutputStream;)V
 HSPLsun/security/util/ObjectIdentifier;->equals(Ljava/lang/Object;)Z
 HSPLsun/security/util/ObjectIdentifier;->hashCode()I
-HSPLsun/security/util/ObjectIdentifier;->toString()Ljava/lang/String;+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
+HSPLsun/security/util/ObjectIdentifier;->toString()Ljava/lang/String;
 HSPLsun/security/util/SignatureFileVerifier;-><init>(Ljava/util/ArrayList;Lsun/security/util/ManifestDigester;Ljava/lang/String;[B)V
 HSPLsun/security/util/SignatureFileVerifier;->getDigest(Ljava/lang/String;)Ljava/security/MessageDigest;
 HSPLsun/security/util/SignatureFileVerifier;->getSigners([Lsun/security/pkcs/SignerInfo;Lsun/security/pkcs/PKCS7;)[Ljava/security/CodeSigner;
@@ -32552,7 +32732,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;+]Lsun/security/util/ObjectIdentifier;Lsun/security/util/ObjectIdentifier;]Ljava/util/Map;Ljava/util/HashMap;,Ljava/util/Collections$EmptyMap;
+HSPLsun/security/x509/AVAKeyword;->getKeyword(Lsun/security/util/ObjectIdentifier;ILjava/util/Map;)Ljava/lang/String;
 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
@@ -32659,20 +32839,20 @@
 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+]Lsun/security/x509/X500Name;Lsun/security/x509/X500Name;
+HSPLsun/security/x509/X500Name;->equals(Ljava/lang/Object;)Z
 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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lsun/security/x509/RDN;Lsun/security/x509/RDN;
+HSPLsun/security/x509/X500Name;->getRFC2253CanonicalName()Ljava/lang/String;
 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;->isEmpty()Z
-HSPLsun/security/x509/X500Name;->parseDER(Lsun/security/util/DerInputStream;)V+]Lsun/security/util/DerInputStream;Lsun/security/util/DerInputStream;
+HSPLsun/security/x509/X500Name;->parseDER(Lsun/security/util/DerInputStream;)V
 HSPLsun/security/x509/X500Name;->parseDN(Ljava/lang/String;Ljava/util/Map;)V
-HSPLsun/security/x509/X509AttributeName;-><init>(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
+HSPLsun/security/x509/X509AttributeName;-><init>(Ljava/lang/String;)V
 HSPLsun/security/x509/X509AttributeName;->getPrefix()Ljava/lang/String;
 HSPLsun/security/x509/X509AttributeName;->getSuffix()Ljava/lang/String;
 HSPLsun/security/x509/X509CertImpl;-><init>([B)V
@@ -32808,68 +32988,76 @@
 HSPLsun/util/locale/BaseLocale$Key;->-$$Nest$mgetBaseLocale(Lsun/util/locale/BaseLocale$Key;)Lsun/util/locale/BaseLocale;
 HSPLsun/util/locale/BaseLocale$Key;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V
 HSPLsun/util/locale/BaseLocale$Key;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLsun/util/locale/BaseLocale$Key-IA;)V
-HSPLsun/util/locale/BaseLocale$Key;->equals(Ljava/lang/Object;)Z
-HSPLsun/util/locale/BaseLocale$Key;->getBaseLocale()Lsun/util/locale/BaseLocale;
+HSPLsun/util/locale/BaseLocale$Key;->equals(Ljava/lang/Object;)Z+]Ljava/lang/String;Ljava/lang/String;]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
+HSPLsun/util/locale/BaseLocale$Key;->getBaseLocale()Lsun/util/locale/BaseLocale;+]Ljava/lang/ref/SoftReference;Ljava/lang/ref/SoftReference;
 HSPLsun/util/locale/BaseLocale$Key;->hashCode()I
-HSPLsun/util/locale/BaseLocale$Key;->hashCode(Lsun/util/locale/BaseLocale;)I
-HSPLsun/util/locale/BaseLocale$Key;->normalize(Lsun/util/locale/BaseLocale$Key;)Lsun/util/locale/BaseLocale$Key;
+HSPLsun/util/locale/BaseLocale$Key;->hashCode(Lsun/util/locale/BaseLocale;)I+]Ljava/lang/String;Ljava/lang/String;]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
+HSPLsun/util/locale/BaseLocale$Key;->normalize(Lsun/util/locale/BaseLocale$Key;)Lsun/util/locale/BaseLocale$Key;+]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
 HSPLsun/util/locale/BaseLocale;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLsun/util/locale/BaseLocale;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLsun/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;
 HSPLsun/util/locale/BaseLocale;->getVariant()Ljava/lang/String;
-HSPLsun/util/locale/BaseLocale;->hashCode()I
+HSPLsun/util/locale/BaseLocale;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
+HSPLsun/util/locale/Extension;->getID()Ljava/lang/String;
+HSPLsun/util/locale/Extension;->setValue(Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLsun/util/locale/Extension;->toString()Ljava/lang/String;+]Lsun/util/locale/Extension;Lsun/util/locale/UnicodeLocaleExtension;
 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;]Ljava/lang/String;Ljava/lang/String;
 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;]Ljava/lang/String;Ljava/lang/String;]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;->setUnicodeLocaleExtension(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;]Lsun/util/locale/StringTokenIterator;Lsun/util/locale/StringTokenIterator;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLsun/util/locale/InternalLocaleBuilder;->setVariant(Ljava/lang/String;)Lsun/util/locale/InternalLocaleBuilder;
 HSPLsun/util/locale/LanguageTag;-><init>()V
 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;->isLanguage(Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
+HSPLsun/util/locale/LanguageTag;->isPrivateusePrefixChar(C)Z
+HSPLsun/util/locale/LanguageTag;->isRegion(Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
 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;+]Ljava/lang/String;Ljava/lang/String;]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;->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
+HSPLsun/util/locale/LocaleExtensions;-><init>(Ljava/util/Map;Ljava/util/Set;Ljava/util/Map;)V+]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Lsun/util/locale/InternalLocaleBuilder$CaseInsensitiveString;Lsun/util/locale/InternalLocaleBuilder$CaseInsensitiveString;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/SortedMap;Ljava/util/TreeMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
+HSPLsun/util/locale/LocaleExtensions;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
+HSPLsun/util/locale/LocaleExtensions;->toID(Ljava/util/SortedMap;)Ljava/lang/String;+]Ljava/util/Map$Entry;Ljava/util/TreeMap$TreeMapEntry;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Character;Ljava/lang/Character;]Ljava/util/SortedMap;Ljava/util/TreeMap;]Ljava/util/Iterator;Ljava/util/TreeMap$EntryIterator;]Ljava/util/Set;Ljava/util/TreeMap$EntrySet;
 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;+]Ljava/util/concurrent/ConcurrentMap;Ljava/util/concurrent/ConcurrentHashMap;]Lsun/util/locale/LocaleObjectCache;Lsun/util/locale/BaseLocale$Cache;]Lsun/util/locale/LocaleObjectCache$CacheEntry;Lsun/util/locale/LocaleObjectCache$CacheEntry;
+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;Ljava/util/Locale$Cache;,Lsun/util/locale/BaseLocale$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;->caseIgnoreMatch(Ljava/lang/String;Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
 HSPLsun/util/locale/LocaleUtils;->isAlpha(C)Z
 HSPLsun/util/locale/LocaleUtils;->isAlphaNumeric(C)Z
-HSPLsun/util/locale/LocaleUtils;->isAlphaNumericString(Ljava/lang/String;)Z
-HSPLsun/util/locale/LocaleUtils;->isAlphaString(Ljava/lang/String;)Z
+HSPLsun/util/locale/LocaleUtils;->isAlphaNumericString(Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
+HSPLsun/util/locale/LocaleUtils;->isAlphaString(Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
 HSPLsun/util/locale/LocaleUtils;->isEmpty(Ljava/lang/String;)Z
 HSPLsun/util/locale/LocaleUtils;->isEmpty(Ljava/util/List;)Z
 HSPLsun/util/locale/LocaleUtils;->isEmpty(Ljava/util/Map;)Z
@@ -32879,20 +33067,22 @@
 HSPLsun/util/locale/LocaleUtils;->isNumericString(Ljava/lang/String;)Z
 HSPLsun/util/locale/LocaleUtils;->isUpper(C)Z
 HSPLsun/util/locale/LocaleUtils;->toLower(C)C
-HSPLsun/util/locale/LocaleUtils;->toLowerString(Ljava/lang/String;)Ljava/lang/String;
+HSPLsun/util/locale/LocaleUtils;->toLowerString(Ljava/lang/String;)Ljava/lang/String;+]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+]Ljava/lang/String;Ljava/lang/String;]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;->currentStart()I
+HSPLsun/util/locale/StringTokenIterator;->hasNext()Z+]Ljava/lang/String;Ljava/lang/String;
 HSPLsun/util/locale/StringTokenIterator;->isDone()Z
-HSPLsun/util/locale/StringTokenIterator;->next()Ljava/lang/String;
-HSPLsun/util/locale/StringTokenIterator;->nextDelimiter(I)I
-HSPLsun/util/locale/StringTokenIterator;->setStart(I)Lsun/util/locale/StringTokenIterator;
+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+]Ljava/lang/String;Ljava/lang/String;
+HSPLsun/util/locale/StringTokenIterator;->setStart(I)Lsun/util/locale/StringTokenIterator;+]Ljava/lang/String;Ljava/lang/String;
+HSPLsun/util/locale/UnicodeLocaleExtension;-><init>(Ljava/util/SortedSet;Ljava/util/SortedMap;)V+]Ljava/util/Map$Entry;Ljava/util/TreeMap$TreeMapEntry;]Lsun/util/locale/UnicodeLocaleExtension;Lsun/util/locale/UnicodeLocaleExtension;]Ljava/util/StringJoiner;Ljava/util/StringJoiner;]Ljava/util/Map;Ljava/util/TreeMap;]Ljava/util/Iterator;Ljava/util/Collections$EmptyIterator;,Ljava/util/TreeMap$EntryIterator;]Ljava/util/Set;Ljava/util/TreeMap$EntrySet;,Ljava/util/Collections$EmptySet;
 HSPLsun/util/locale/provider/CalendarDataUtility;->retrieveFirstDayOfWeek(Ljava/util/Locale;I)I
 HSPLsun/util/logging/LoggingSupport$2;-><init>()V
 HSPLsun/util/logging/LoggingSupport$2;->run()Ljava/lang/Object;
@@ -32976,6 +33166,14 @@
 Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;
 Landroid/animation/AnimationHandler$MyFrameCallbackProvider;
 Landroid/animation/AnimationHandler;
+Landroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda0;
+Landroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda1;
+Landroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda2;
+Landroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda3;
+Landroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda4;
+Landroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda5;
+Landroid/animation/Animator$AnimatorCaller$$ExternalSyntheticLambda6;
+Landroid/animation/Animator$AnimatorCaller;
 Landroid/animation/Animator$AnimatorConstantState;
 Landroid/animation/Animator$AnimatorListener;
 Landroid/animation/Animator$AnimatorPauseListener;
@@ -32983,6 +33181,7 @@
 Landroid/animation/AnimatorInflater$PathDataEvaluator;
 Landroid/animation/AnimatorInflater;
 Landroid/animation/AnimatorListenerAdapter;
+Landroid/animation/AnimatorSet$$ExternalSyntheticLambda0;
 Landroid/animation/AnimatorSet$1;
 Landroid/animation/AnimatorSet$2;
 Landroid/animation/AnimatorSet$3;
@@ -33075,9 +33274,11 @@
 Landroid/app/ActivityClient;
 Landroid/app/ActivityManager$1;
 Landroid/app/ActivityManager$2;
+Landroid/app/ActivityManager$3;
 Landroid/app/ActivityManager$AppTask;
 Landroid/app/ActivityManager$MemoryInfo$1;
 Landroid/app/ActivityManager$MemoryInfo;
+Landroid/app/ActivityManager$MyUidObserver;
 Landroid/app/ActivityManager$OnUidImportanceListener;
 Landroid/app/ActivityManager$PendingIntentInfo$1;
 Landroid/app/ActivityManager$PendingIntentInfo;
@@ -33094,7 +33295,6 @@
 Landroid/app/ActivityManager$RunningTaskInfo;
 Landroid/app/ActivityManager$TaskDescription$1;
 Landroid/app/ActivityManager$TaskDescription;
-Landroid/app/ActivityManager$UidObserver;
 Landroid/app/ActivityManager;
 Landroid/app/ActivityManagerInternal;
 Landroid/app/ActivityOptions$1;
@@ -33407,6 +33607,9 @@
 Landroid/app/IUiModeManager;
 Landroid/app/IUiModeManagerCallback$Stub;
 Landroid/app/IUiModeManagerCallback;
+Landroid/app/IUidFrozenStateChangedCallback$Stub$Proxy;
+Landroid/app/IUidFrozenStateChangedCallback$Stub;
+Landroid/app/IUidFrozenStateChangedCallback;
 Landroid/app/IUidObserver$Stub$Proxy;
 Landroid/app/IUidObserver$Stub;
 Landroid/app/IUidObserver;
@@ -33736,11 +33939,11 @@
 Landroid/app/SystemServiceRegistry;
 Landroid/app/TaskInfo;
 Landroid/app/TaskStackListener;
-Landroid/app/UiModeManager$1;
 Landroid/app/UiModeManager$InnerListener;
 Landroid/app/UiModeManager$OnProjectionStateChangedListener;
 Landroid/app/UiModeManager$OnProjectionStateChangedListenerResourceManager;
 Landroid/app/UiModeManager;
+Landroid/app/UidObserver;
 Landroid/app/UriGrantsManager$1;
 Landroid/app/UriGrantsManager;
 Landroid/app/UserSwitchObserver;
@@ -34691,7 +34894,6 @@
 Landroid/content/pm/verify/domain/IDomainVerificationManager;
 Landroid/content/res/ApkAssets;
 Landroid/content/res/AssetFileDescriptor$1;
-Landroid/content/res/AssetFileDescriptor$AutoCloseInputStream$OffsetCorrectFileChannel;
 Landroid/content/res/AssetFileDescriptor$AutoCloseInputStream;
 Landroid/content/res/AssetFileDescriptor;
 Landroid/content/res/AssetManager$AssetInputStream;
@@ -35547,7 +35749,11 @@
 Landroid/hardware/display/DeviceProductInfo$ManufactureDate$1;
 Landroid/hardware/display/DeviceProductInfo$ManufactureDate;
 Landroid/hardware/display/DeviceProductInfo;
+Landroid/hardware/display/DisplayManager$$ExternalSyntheticLambda0;
+Landroid/hardware/display/DisplayManager$$ExternalSyntheticLambda1;
+Landroid/hardware/display/DisplayManager$$ExternalSyntheticLambda2;
 Landroid/hardware/display/DisplayManager$DisplayListener;
+Landroid/hardware/display/DisplayManager$WeakDisplayCache;
 Landroid/hardware/display/DisplayManager;
 Landroid/hardware/display/DisplayManagerGlobal$1;
 Landroid/hardware/display/DisplayManagerGlobal$DisplayListenerDelegate$$ExternalSyntheticLambda0;
@@ -35635,7 +35841,6 @@
 Landroid/hardware/fingerprint/IFingerprintServiceReceiver$Stub$Proxy;
 Landroid/hardware/fingerprint/IFingerprintServiceReceiver$Stub;
 Landroid/hardware/fingerprint/IFingerprintServiceReceiver;
-Landroid/hardware/fingerprint/IUdfpsOverlay;
 Landroid/hardware/fingerprint/IUdfpsOverlayController;
 Landroid/hardware/fingerprint/IUdfpsRefreshRateRequestCallback$Stub;
 Landroid/hardware/fingerprint/IUdfpsRefreshRateRequestCallback;
@@ -35662,7 +35867,11 @@
 Landroid/hardware/input/InputDeviceIdentifier;
 Landroid/hardware/input/InputManager$InputDeviceListener;
 Landroid/hardware/input/InputManager;
+Landroid/hardware/input/InputManagerGlobal$InputDeviceListenerDelegate;
+Landroid/hardware/input/InputManagerGlobal$InputDevicesChangedListener;
+Landroid/hardware/input/InputManagerGlobal$OnTabletModeChangedListenerDelegate;
 Landroid/hardware/input/InputManagerGlobal;
+Landroid/hardware/input/InputSettings;
 Landroid/hardware/input/KeyboardLayout$1;
 Landroid/hardware/input/KeyboardLayout;
 Landroid/hardware/input/TouchCalibration$1;
@@ -35987,7 +36196,6 @@
 Landroid/hardware/radio/V1_6/SliceInfo;
 Landroid/hardware/radio/V1_6/SlicingConfig;
 Landroid/hardware/radio/V1_6/TrafficDescriptor;
-Landroid/hardware/radio/config/V1_0/IRadioConfig$Proxy;
 Landroid/hardware/radio/config/V1_0/IRadioConfig;
 Landroid/hardware/radio/config/V1_0/IRadioConfigIndication;
 Landroid/hardware/radio/config/V1_0/IRadioConfigResponse;
@@ -37766,6 +37974,7 @@
 Landroid/media/AudioManager$OnAmPortUpdateListener;
 Landroid/media/AudioManager$OnAudioFocusChangeListener;
 Landroid/media/AudioManager$OnAudioPortUpdateListener;
+Landroid/media/AudioManager$OnModeChangedListener;
 Landroid/media/AudioManager$PlaybackConfigChangeCallbackData;
 Landroid/media/AudioManager$RecordConfigChangeCallbackData;
 Landroid/media/AudioManager$SafeWaitObject;
@@ -38091,7 +38300,6 @@
 Landroid/media/RemoteControlClient;
 Landroid/media/RemoteDisplay;
 Landroid/media/ResampleInputStream;
-Landroid/media/Ringtone$MyOnCompletionListener;
 Landroid/media/Ringtone;
 Landroid/media/RingtoneManager;
 Landroid/media/RouteDiscoveryPreference$1;
@@ -38379,9 +38587,6 @@
 Landroid/net/INetworkScoreService$Stub$Proxy;
 Landroid/net/INetworkScoreService$Stub;
 Landroid/net/INetworkScoreService;
-Landroid/net/ITetheringStatsProvider$Stub$Proxy;
-Landroid/net/ITetheringStatsProvider$Stub;
-Landroid/net/ITetheringStatsProvider;
 Landroid/net/IVpnManager$Stub$Proxy;
 Landroid/net/IVpnManager$Stub;
 Landroid/net/IVpnManager;
@@ -38866,7 +39071,9 @@
 Landroid/os/INetworkManagementService;
 Landroid/os/IPermissionController$Stub;
 Landroid/os/IPermissionController;
+Landroid/os/IPowerManager$LowPowerStandbyPolicy$1;
 Landroid/os/IPowerManager$LowPowerStandbyPolicy;
+Landroid/os/IPowerManager$LowPowerStandbyPortDescription$1;
 Landroid/os/IPowerManager$LowPowerStandbyPortDescription;
 Landroid/os/IPowerManager$Stub$Proxy;
 Landroid/os/IPowerManager$Stub;
@@ -39489,8 +39696,6 @@
 Landroid/security/Credentials;
 Landroid/security/FileIntegrityManager;
 Landroid/security/GateKeeper;
-Landroid/security/GenerateRkpKey$1;
-Landroid/security/GenerateRkpKey;
 Landroid/security/IFileIntegrityService$Stub;
 Landroid/security/IFileIntegrityService;
 Landroid/security/IKeyChainAliasCallback$Stub;
@@ -39508,6 +39713,7 @@
 Landroid/security/KeyStore$State;
 Landroid/security/KeyStore2$$ExternalSyntheticLambda0;
 Landroid/security/KeyStore2$$ExternalSyntheticLambda1;
+Landroid/security/KeyStore2$$ExternalSyntheticLambda2;
 Landroid/security/KeyStore2$$ExternalSyntheticLambda3;
 Landroid/security/KeyStore2$$ExternalSyntheticLambda4;
 Landroid/security/KeyStore2$CheckedRemoteRequest;
@@ -39623,7 +39829,6 @@
 Landroid/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi$$ExternalSyntheticLambda5;
 Landroid/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi$$ExternalSyntheticLambda6;
 Landroid/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi$EC;
-Landroid/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi$GenerateKeyPairHelperResult;
 Landroid/security/keystore2/AndroidKeyStoreKeyPairGeneratorSpi;
 Landroid/security/keystore2/AndroidKeyStoreLoadStoreParameter;
 Landroid/security/keystore2/AndroidKeyStorePrivateKey;
@@ -39856,7 +40061,6 @@
 Landroid/service/notification/StatusBarNotification$1;
 Landroid/service/notification/StatusBarNotification;
 Landroid/service/notification/ZenModeConfig$1;
-Landroid/service/notification/ZenModeConfig$Diff;
 Landroid/service/notification/ZenModeConfig$EventInfo;
 Landroid/service/notification/ZenModeConfig$ScheduleInfo;
 Landroid/service/notification/ZenModeConfig$ZenRule$1;
@@ -39983,7 +40187,6 @@
 Landroid/speech/tts/UtteranceProgressListener;
 Landroid/stats/devicepolicy/nano/StringList;
 Landroid/sysprop/AdbProperties;
-Landroid/sysprop/ApexProperties;
 Landroid/sysprop/ContactsProperties;
 Landroid/sysprop/CryptoProperties$state_values;
 Landroid/sysprop/CryptoProperties$type_values;
@@ -40400,7 +40603,6 @@
 Landroid/telephony/SubscriptionManager$CallISubMethodHelper;
 Landroid/telephony/SubscriptionManager$IntegerPropertyInvalidatedCache;
 Landroid/telephony/SubscriptionManager$OnOpportunisticSubscriptionsChangedListener;
-Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener$OnSubscriptionsChangedListenerHandler;
 Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;
 Landroid/telephony/SubscriptionManager$VoidPropertyInvalidatedCache;
 Landroid/telephony/SubscriptionManager;
@@ -40919,6 +41121,7 @@
 Landroid/text/method/DateTimeKeyListener;
 Landroid/text/method/DialerKeyListener;
 Landroid/text/method/DigitsKeyListener;
+Landroid/text/method/InsertModeTransformationMethod;
 Landroid/text/method/KeyListener;
 Landroid/text/method/LinkMovementMethod;
 Landroid/text/method/MetaKeyKeyListener;
@@ -41116,6 +41319,8 @@
 Landroid/util/DataUnit$4;
 Landroid/util/DataUnit$5;
 Landroid/util/DataUnit$6;
+Landroid/util/DataUnit$7;
+Landroid/util/DataUnit$8;
 Landroid/util/DataUnit;
 Landroid/util/DebugUtils;
 Landroid/util/DisplayMetrics;
@@ -41624,6 +41829,9 @@
 Landroid/view/SurfaceControl$TrustedPresentationThresholds;
 Landroid/view/SurfaceControl;
 Landroid/view/SurfaceControlHdrLayerInfoListener;
+Landroid/view/SurfaceControlRegistry$DefaultReporter;
+Landroid/view/SurfaceControlRegistry$Reporter;
+Landroid/view/SurfaceControlRegistry;
 Landroid/view/SurfaceControlViewHost$SurfacePackage$1;
 Landroid/view/SurfaceControlViewHost$SurfacePackage;
 Landroid/view/SurfaceHolder$Callback2;
@@ -41773,6 +41981,7 @@
 Landroid/view/ViewRootImpl$$ExternalSyntheticLambda16;
 Landroid/view/ViewRootImpl$$ExternalSyntheticLambda17;
 Landroid/view/ViewRootImpl$$ExternalSyntheticLambda18;
+Landroid/view/ViewRootImpl$$ExternalSyntheticLambda19;
 Landroid/view/ViewRootImpl$$ExternalSyntheticLambda1;
 Landroid/view/ViewRootImpl$$ExternalSyntheticLambda2;
 Landroid/view/ViewRootImpl$$ExternalSyntheticLambda3;
@@ -41791,7 +42000,7 @@
 Landroid/view/ViewRootImpl$6;
 Landroid/view/ViewRootImpl$7;
 Landroid/view/ViewRootImpl$8$$ExternalSyntheticLambda0;
-Landroid/view/ViewRootImpl$8$1;
+Landroid/view/ViewRootImpl$8$$ExternalSyntheticLambda1;
 Landroid/view/ViewRootImpl$8;
 Landroid/view/ViewRootImpl$AccessibilityInteractionConnection;
 Landroid/view/ViewRootImpl$AccessibilityInteractionConnectionManager;
@@ -42000,7 +42209,6 @@
 Landroid/view/autofill/AutofillManager$$ExternalSyntheticLambda2;
 Landroid/view/autofill/AutofillManager$$ExternalSyntheticLambda3;
 Landroid/view/autofill/AutofillManager$$ExternalSyntheticLambda4;
-Landroid/view/autofill/AutofillManager$$ExternalSyntheticLambda5;
 Landroid/view/autofill/AutofillManager$AugmentedAutofillManagerClient;
 Landroid/view/autofill/AutofillManager$AutofillCallback;
 Landroid/view/autofill/AutofillManager$AutofillClient;
@@ -42084,6 +42292,7 @@
 Landroid/view/displayhash/DisplayHashManager;
 Landroid/view/displayhash/DisplayHashResultCallback;
 Landroid/view/inputmethod/BaseInputConnection;
+Landroid/view/inputmethod/CancellableHandwritingGesture;
 Landroid/view/inputmethod/CompletionInfo$1;
 Landroid/view/inputmethod/CompletionInfo;
 Landroid/view/inputmethod/ComposingText;
@@ -42177,6 +42386,7 @@
 Landroid/view/inputmethod/PreviewableHandwritingGesture;
 Landroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda24;
 Landroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda25;
+Landroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda36;
 Landroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda37;
 Landroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda40;
 Landroid/view/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda8;
@@ -42882,6 +43092,7 @@
 Landroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda2;
 Landroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda3;
 Landroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda5;
+Landroid/window/SurfaceSyncGroup$$ExternalSyntheticLambda6;
 Landroid/window/SurfaceSyncGroup$1;
 Landroid/window/SurfaceSyncGroup$2;
 Landroid/window/SurfaceSyncGroup$ISurfaceSyncGroupImpl;
@@ -42921,6 +43132,7 @@
 Landroid/window/WindowInfosListener;
 Landroid/window/WindowMetricsController$$ExternalSyntheticLambda0;
 Landroid/window/WindowMetricsController;
+Landroid/window/WindowOnBackInvokedDispatcher$$ExternalSyntheticLambda0;
 Landroid/window/WindowOnBackInvokedDispatcher$Checker;
 Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda0;
 Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda1;
@@ -43671,6 +43883,7 @@
 Lcom/android/internal/compat/IPlatformCompat;
 Lcom/android/internal/compat/IPlatformCompatNative$Stub;
 Lcom/android/internal/compat/IPlatformCompatNative;
+Lcom/android/internal/config/appcloning/AppCloningDeviceConfigHelper$$ExternalSyntheticLambda0;
 Lcom/android/internal/config/appcloning/AppCloningDeviceConfigHelper;
 Lcom/android/internal/content/F2fsUtils;
 Lcom/android/internal/content/NativeLibraryHelper$Handle;
@@ -43717,8 +43930,6 @@
 Lcom/android/internal/dynamicanimation/animation/Force;
 Lcom/android/internal/dynamicanimation/animation/SpringAnimation;
 Lcom/android/internal/dynamicanimation/animation/SpringForce;
-Lcom/android/modules/expresslog/Counter;
-Lcom/android/modules/expresslog/Utils;
 Lcom/android/internal/graphics/ColorUtils$ContrastCalculator;
 Lcom/android/internal/graphics/ColorUtils;
 Lcom/android/internal/graphics/SfVsyncFrameCallbackProvider;
@@ -44443,6 +44654,7 @@
 Lcom/android/internal/telephony/Phone$NetworkSelectMessage;
 Lcom/android/internal/telephony/Phone$SilentRedialParam;
 Lcom/android/internal/telephony/Phone;
+Lcom/android/internal/telephony/PhoneConfigurationManager$$ExternalSyntheticLambda0;
 Lcom/android/internal/telephony/PhoneConfigurationManager$ConfigManagerHandler;
 Lcom/android/internal/telephony/PhoneConfigurationManager$MockableInterface;
 Lcom/android/internal/telephony/PhoneConfigurationManager;
@@ -44592,34 +44804,6 @@
 Lcom/android/internal/telephony/StateMachine$SmHandler$StateInfo;
 Lcom/android/internal/telephony/StateMachine$SmHandler;
 Lcom/android/internal/telephony/StateMachine;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda0;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda10;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda11;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda1;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda2;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda3;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda4;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda5;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda6;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda7;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda8;
-Lcom/android/internal/telephony/SubscriptionController$$ExternalSyntheticLambda9;
-Lcom/android/internal/telephony/SubscriptionController$1;
-Lcom/android/internal/telephony/SubscriptionController$2;
-Lcom/android/internal/telephony/SubscriptionController$WatchedInt;
-Lcom/android/internal/telephony/SubscriptionController$WatchedSlotIndexToSubIds;
-Lcom/android/internal/telephony/SubscriptionController;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$$ExternalSyntheticLambda0;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$$ExternalSyntheticLambda1;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$$ExternalSyntheticLambda2;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$$ExternalSyntheticLambda3;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$$ExternalSyntheticLambda4;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$$ExternalSyntheticLambda5;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$$ExternalSyntheticLambda6;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$1;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$2;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater$UpdateEmbeddedSubsCallback;
-Lcom/android/internal/telephony/SubscriptionInfoUpdater;
 Lcom/android/internal/telephony/TelephonyCapabilities;
 Lcom/android/internal/telephony/TelephonyCommonStatsLog;
 Lcom/android/internal/telephony/TelephonyComponentFactory$$ExternalSyntheticLambda0;
@@ -45170,6 +45354,7 @@
 Lcom/android/internal/telephony/nano/PersistAtomsProto$CellularDataServiceSwitch;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$CellularServiceState;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$DataCallSession;
+Lcom/android/internal/telephony/nano/PersistAtomsProto$EmergencyNumbersInfo;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$GbaEvent;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsDedicatedBearerEvent;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$ImsDedicatedBearerListenerEvent;
@@ -45186,6 +45371,12 @@
 Lcom/android/internal/telephony/nano/PersistAtomsProto$PresenceNotifyEvent;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$RcsAcsProvisioningStats;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$RcsClientProvisioningStats;
+Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteController;
+Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteIncomingDatagram;
+Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteOutgoingDatagram;
+Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteProvision;
+Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteSession;
+Lcom/android/internal/telephony/nano/PersistAtomsProto$SatelliteSosMessageRecommender;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$SipDelegateStats;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$SipMessageResponse;
 Lcom/android/internal/telephony/nano/PersistAtomsProto$SipTransportFeatureTagStats;
@@ -45631,6 +45822,9 @@
 Lcom/android/internal/util/LatencyTracker$$ExternalSyntheticLambda2;
 Lcom/android/internal/util/LatencyTracker$Action;
 Lcom/android/internal/util/LatencyTracker$ActionProperties;
+Lcom/android/internal/util/LatencyTracker$FrameworkStatsLogEvent;
+Lcom/android/internal/util/LatencyTracker$SLatencyTrackerHolder;
+Lcom/android/internal/util/LatencyTracker$Session$$ExternalSyntheticLambda0;
 Lcom/android/internal/util/LatencyTracker$Session;
 Lcom/android/internal/util/LatencyTracker;
 Lcom/android/internal/util/LineBreakBufferedWriter;
@@ -45868,6 +46062,8 @@
 Lcom/android/internal/widget/floatingtoolbar/FloatingToolbar$$ExternalSyntheticLambda0;
 Lcom/android/internal/widget/floatingtoolbar/FloatingToolbar;
 Lcom/android/internal/widget/floatingtoolbar/FloatingToolbarPopup;
+Lcom/android/modules/expresslog/Counter;
+Lcom/android/modules/expresslog/Utils;
 Lcom/android/modules/utils/BasicShellCommandHandler;
 Lcom/android/modules/utils/TypedXmlPullParser;
 Lcom/android/modules/utils/TypedXmlSerializer;
@@ -46993,6 +47189,7 @@
 Ljava/io/ObjectOutputStream$ReplaceTable;
 Ljava/io/ObjectOutputStream;
 Ljava/io/ObjectStreamClass$$ExternalSyntheticLambda0;
+Ljava/io/ObjectStreamClass$$ExternalSyntheticLambda1;
 Ljava/io/ObjectStreamClass$1;
 Ljava/io/ObjectStreamClass$2;
 Ljava/io/ObjectStreamClass$3;
@@ -47001,6 +47198,7 @@
 Ljava/io/ObjectStreamClass$Caches;
 Ljava/io/ObjectStreamClass$ClassDataSlot;
 Ljava/io/ObjectStreamClass$DefaultSUIDCompatibilityListener;
+Ljava/io/ObjectStreamClass$DeserializationConstructorsCache;
 Ljava/io/ObjectStreamClass$EntryFuture$1;
 Ljava/io/ObjectStreamClass$EntryFuture;
 Ljava/io/ObjectStreamClass$ExceptionInfo;
@@ -47139,6 +47337,7 @@
 Ljava/lang/ProcessEnvironment;
 Ljava/lang/ProcessImpl;
 Ljava/lang/Readable;
+Ljava/lang/Record;
 Ljava/lang/ReflectiveOperationException;
 Ljava/lang/Runnable;
 Ljava/lang/Runtime;
@@ -47219,6 +47418,24 @@
 Ljava/lang/annotation/Inherited;
 Ljava/lang/annotation/Retention;
 Ljava/lang/annotation/Target;
+Ljava/lang/constant/ClassDesc;
+Ljava/lang/constant/Constable;
+Ljava/lang/constant/ConstantDesc;
+Ljava/lang/constant/ConstantDescs;
+Ljava/lang/constant/ConstantUtils;
+Ljava/lang/constant/DirectMethodHandleDesc$1;
+Ljava/lang/constant/DirectMethodHandleDesc$Kind;
+Ljava/lang/constant/DirectMethodHandleDesc;
+Ljava/lang/constant/DirectMethodHandleDescImpl$1;
+Ljava/lang/constant/DirectMethodHandleDescImpl;
+Ljava/lang/constant/DynamicConstantDesc$AnonymousDynamicConstantDesc;
+Ljava/lang/constant/DynamicConstantDesc;
+Ljava/lang/constant/MethodHandleDesc$1;
+Ljava/lang/constant/MethodHandleDesc;
+Ljava/lang/constant/MethodTypeDesc;
+Ljava/lang/constant/MethodTypeDescImpl;
+Ljava/lang/constant/PrimitiveClassDescImpl;
+Ljava/lang/constant/ReferenceClassDescImpl;
 Ljava/lang/invoke/ArrayElementVarHandle;
 Ljava/lang/invoke/ByteArrayViewVarHandle;
 Ljava/lang/invoke/ByteBufferViewVarHandle;
@@ -47295,8 +47512,10 @@
 Ljava/lang/invoke/VarHandle$1;
 Ljava/lang/invoke/VarHandle$AccessMode;
 Ljava/lang/invoke/VarHandle$AccessType;
+Ljava/lang/invoke/VarHandle$VarHandleDesc$Kind;
 Ljava/lang/invoke/VarHandle;
 Ljava/lang/invoke/WrongMethodTypeException;
+Ljava/lang/ref/Cleaner$Cleanable;
 Ljava/lang/ref/FinalizerReference$Sentinel-IA;
 Ljava/lang/ref/FinalizerReference$Sentinel;
 Ljava/lang/ref/FinalizerReference;
@@ -47335,6 +47554,7 @@
 Ljava/lang/reflect/Proxy$ProxyClassFactory-IA;
 Ljava/lang/reflect/Proxy$ProxyClassFactory;
 Ljava/lang/reflect/Proxy;
+Ljava/lang/reflect/RecordComponent;
 Ljava/lang/reflect/ReflectPermission;
 Ljava/lang/reflect/Type;
 Ljava/lang/reflect/TypeVariable;
@@ -48178,7 +48398,6 @@
 Ljava/util/Scanner;
 Ljava/util/ServiceConfigurationError;
 Ljava/util/ServiceLoader$1;
-Ljava/util/ServiceLoader$LazyIterator;
 Ljava/util/ServiceLoader;
 Ljava/util/Set;
 Ljava/util/SimpleTimeZone$Cache;
@@ -48205,7 +48424,6 @@
 Ljava/util/TaskQueue;
 Ljava/util/TimSort;
 Ljava/util/TimeZone;
-Ljava/util/Timer$1;
 Ljava/util/Timer;
 Ljava/util/TimerTask;
 Ljava/util/TimerThread;
@@ -48458,6 +48676,7 @@
 Ljava/util/function/Consumer;
 Ljava/util/function/DoubleBinaryOperator;
 Ljava/util/function/DoubleConsumer;
+Ljava/util/function/DoubleFunction;
 Ljava/util/function/DoubleSupplier;
 Ljava/util/function/DoubleUnaryOperator$$ExternalSyntheticLambda0;
 Ljava/util/function/DoubleUnaryOperator$$ExternalSyntheticLambda1;
@@ -48605,10 +48824,6 @@
 Ljava/util/stream/DoublePipeline$StatelessOp;
 Ljava/util/stream/DoublePipeline;
 Ljava/util/stream/DoubleStream;
-Ljava/util/stream/FindOps$$ExternalSyntheticLambda0;
-Ljava/util/stream/FindOps$$ExternalSyntheticLambda4;
-Ljava/util/stream/FindOps$$ExternalSyntheticLambda5;
-Ljava/util/stream/FindOps$$ExternalSyntheticLambda7;
 Ljava/util/stream/FindOps$FindOp;
 Ljava/util/stream/FindOps$FindSink$OfInt;
 Ljava/util/stream/FindOps$FindSink$OfRef;
@@ -48619,13 +48834,11 @@
 Ljava/util/stream/ForEachOps$ForEachOp;
 Ljava/util/stream/ForEachOps;
 Ljava/util/stream/IntPipeline$$ExternalSyntheticLambda0;
-Ljava/util/stream/IntPipeline$$ExternalSyntheticLambda13;
 Ljava/util/stream/IntPipeline$$ExternalSyntheticLambda1;
 Ljava/util/stream/IntPipeline$$ExternalSyntheticLambda7;
 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;
@@ -48688,7 +48901,6 @@
 Ljava/util/stream/ReduceOps$ReduceOp;
 Ljava/util/stream/ReduceOps;
 Ljava/util/stream/ReferencePipeline$$ExternalSyntheticLambda1;
-Ljava/util/stream/ReferencePipeline$$ExternalSyntheticLambda2;
 Ljava/util/stream/ReferencePipeline$2$1;
 Ljava/util/stream/ReferencePipeline$2;
 Ljava/util/stream/ReferencePipeline$3$1;
@@ -49018,13 +49230,13 @@
 Ljdk/internal/math/FormattedFloatingDecimal$2;
 Ljdk/internal/math/FormattedFloatingDecimal$Form;
 Ljdk/internal/math/FormattedFloatingDecimal;
-Ljdk/internal/misc/JavaObjectInputStreamAccess;
-Ljdk/internal/misc/SharedSecrets;
 Ljdk/internal/misc/TerminatingThreadLocal$1;
 Ljdk/internal/misc/TerminatingThreadLocal;
 Ljdk/internal/misc/Unsafe;
 Ljdk/internal/misc/UnsafeConstants;
 Ljdk/internal/misc/VM;
+Ljdk/internal/ref/CleanerImpl$PhantomCleanableRef;
+Ljdk/internal/ref/PhantomCleanable;
 Ljdk/internal/reflect/Reflection;
 Ljdk/internal/util/ArraysSupport;
 Ljdk/internal/util/Preconditions;
@@ -49063,7 +49275,6 @@
 Llibcore/io/NioBufferIterator;
 Llibcore/io/Os;
 Llibcore/io/Streams;
-Llibcore/math/MathUtils;
 Llibcore/math/NativeBN;
 Llibcore/net/InetAddressUtils;
 Llibcore/net/NetworkSecurityPolicy$DefaultNetworkSecurityPolicy;
@@ -49083,6 +49294,7 @@
 Llibcore/reflect/ListOfTypes;
 Llibcore/reflect/ListOfVariables;
 Llibcore/reflect/ParameterizedTypeImpl;
+Llibcore/reflect/RecordComponents;
 Llibcore/reflect/TypeVariableImpl;
 Llibcore/reflect/Types;
 Llibcore/reflect/WildcardTypeImpl;
@@ -49232,9 +49444,7 @@
 Lsun/misc/CompoundEnumeration;
 Lsun/misc/HexDumpEncoder;
 Lsun/misc/IOUtils;
-Lsun/misc/JavaIOFileDescriptorAccess;
 Lsun/misc/LRUCache;
-Lsun/misc/SharedSecrets;
 Lsun/misc/Unsafe;
 Lsun/misc/VM;
 Lsun/misc/Version;
@@ -49532,6 +49742,7 @@
 Lsun/util/locale/BaseLocale;
 Lsun/util/locale/Extension;
 Lsun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar;
+Lsun/util/locale/InternalLocaleBuilder$CaseInsensitiveString;
 Lsun/util/locale/InternalLocaleBuilder;
 Lsun/util/locale/LanguageTag;
 Lsun/util/locale/LocaleExtensions;
@@ -49838,8 +50049,8 @@
 [Landroid/net/NetworkKey;
 [Landroid/net/Uri;
 [Landroid/net/rtp/AudioCodec;
+[Landroid/opengl/EGLConfig;
 [Landroid/os/AsyncTask$Status;
-[Landroid/os/BatteryConsumer$Dimensions;
 [Landroid/os/BatteryConsumer$Key;
 [Landroid/os/BatteryStats$BitDescription;
 [Landroid/os/BatteryStats$IntToString;
@@ -50072,29 +50283,22 @@
 [Ldalvik/system/DexPathList$Element;
 [Ldalvik/system/DexPathList$NativeLibraryElement;
 [Lgov/nist/javax/sip/DialogTimeoutEvent$Reason;
-[Ljava/io/Closeable;
 [Ljava/io/File$PathStatus;
 [Ljava/io/File;
-[Ljava/io/FileDescriptor;
-[Ljava/io/IOException;
 [Ljava/io/ObjectInputStream$HandleTable$HandleList;
 [Ljava/io/ObjectStreamClass$ClassDataSlot;
 [Ljava/io/ObjectStreamClass$MemberSignature;
 [Ljava/io/ObjectStreamField;
-[Ljava/io/Serializable;
-[Ljava/lang/Boolean;
 [Ljava/lang/Byte;
 [Ljava/lang/CharSequence;
 [Ljava/lang/Character$UnicodeBlock;
 [Ljava/lang/Character;
 [Ljava/lang/Class;
-[Ljava/lang/ClassLoader;
 [Ljava/lang/ClassValue$Entry;
 [Ljava/lang/Comparable;
 [Ljava/lang/Daemons$Daemon;
 [Ljava/lang/Double;
 [Ljava/lang/Enum;
-[Ljava/lang/Float;
 [Ljava/lang/Integer;
 [Ljava/lang/Long;
 [Ljava/lang/Number;
@@ -50111,24 +50315,28 @@
 [Ljava/lang/ThreadGroup;
 [Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
 [Ljava/lang/Throwable;
-[Ljava/lang/Void;
 [Ljava/lang/annotation/Annotation;
+[Ljava/lang/constant/ClassDesc;
+[Ljava/lang/constant/Constable;
+[Ljava/lang/constant/ConstantDesc;
+[Ljava/lang/constant/DirectMethodHandleDesc$Kind;
 [Ljava/lang/invoke/MethodHandle;
 [Ljava/lang/invoke/MethodType;
 [Ljava/lang/invoke/TypeDescriptor$OfField;
 [Ljava/lang/invoke/VarHandle$AccessMode;
 [Ljava/lang/invoke/VarHandle$AccessType;
+[Ljava/lang/invoke/VarHandle$VarHandleDesc$Kind;
 [Ljava/lang/ref/WeakReference;
 [Ljava/lang/reflect/AccessibleObject;
 [Ljava/lang/reflect/Constructor;
 [Ljava/lang/reflect/Field;
 [Ljava/lang/reflect/Method;
 [Ljava/lang/reflect/Parameter;
+[Ljava/lang/reflect/RecordComponent;
 [Ljava/lang/reflect/Type;
 [Ljava/lang/reflect/TypeVariable;
 [Ljava/math/BigDecimal;
 [Ljava/math/BigInteger;
-[Ljava/math/MathContext;
 [Ljava/math/RoundingMode;
 [Ljava/net/Authenticator$RequestorType;
 [Ljava/net/InetAddress;
@@ -50149,7 +50357,6 @@
 [Ljava/nio/file/attribute/FileAttribute;
 [Ljava/security/CodeSigner;
 [Ljava/security/CryptoPrimitive;
-[Ljava/security/MessageDigest;
 [Ljava/security/Permission;
 [Ljava/security/Principal;
 [Ljava/security/ProtectionDomain;
@@ -50162,10 +50369,8 @@
 [Ljava/security/cert/X509CRL;
 [Ljava/security/cert/X509Certificate;
 [Ljava/text/DateFormat$Field;
-[Ljava/text/DateFormat;
 [Ljava/text/Format;
 [Ljava/text/Normalizer$Form;
-[Ljava/time/Clock;
 [Ljava/time/DayOfWeek;
 [Ljava/time/LocalDateTime;
 [Ljava/time/LocalTime;
@@ -50185,12 +50390,10 @@
 [Ljava/time/zone/ZoneOffsetTransition;
 [Ljava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;
 [Ljava/time/zone/ZoneOffsetTransitionRule;
-[Ljava/util/ArrayList;
 [Ljava/util/Comparators$NaturalOrderComparator;
 [Ljava/util/Enumeration;
 [Ljava/util/Formatter$Flags;
 [Ljava/util/HashMap$Node;
-[Ljava/util/HashMap;
 [Ljava/util/Hashtable$HashtableEntry;
 [Ljava/util/List;
 [Ljava/util/Locale$Category;
@@ -50198,9 +50401,7 @@
 [Ljava/util/Locale$IsoCountryCode;
 [Ljava/util/Locale;
 [Ljava/util/Map$Entry;
-[Ljava/util/Set;
 [Ljava/util/TimerTask;
-[Ljava/util/UUID;
 [Ljava/util/WeakHashMap$Entry;
 [Ljava/util/concurrent/ConcurrentHashMap$CounterCell;
 [Ljava/util/concurrent/ConcurrentHashMap$Node;
@@ -50226,7 +50427,6 @@
 [Ljavax/net/ssl/SSLEngineResult$Status;
 [Ljavax/net/ssl/TrustManager;
 [Ljavax/security/auth/callback/Callback;
-[Ljavax/security/auth/x500/X500Principal;
 [Ljavax/security/cert/X509Certificate;
 [Ljavax/sip/DialogState;
 [Ljavax/sip/Timeout;
@@ -50260,9 +50460,7 @@
 [S
 [Z
 [[B
-[[C
 [[D
-[[F
 [[I
 [[J
 [[Landroid/media/ExifInterface$ExifTag;
@@ -50270,15 +50468,9 @@
 [[Lcom/android/internal/widget/LockPatternView$Cell;
 [[Ljava/lang/Byte;
 [[Ljava/lang/Class;
-[[Ljava/lang/Long;
 [[Ljava/lang/Object;
 [[Ljava/lang/String;
 [[Ljava/lang/annotation/Annotation;
 [[Ljava/lang/invoke/MethodHandle;
 [[Ljava/math/BigInteger;
-[[Ljava/security/cert/Certificate;
-[[Ljava/security/cert/X509Certificate;
-[[S
 [[Z
-[[[B
-[[[I
diff --git a/config/preloaded-classes b/config/preloaded-classes
index 1812c2b..977d3a5 100644
--- a/config/preloaded-classes
+++ b/config/preloaded-classes
@@ -93,6 +93,14 @@
 android.animation.AnimationHandler$AnimationFrameCallbackProvider
 android.animation.AnimationHandler$MyFrameCallbackProvider
 android.animation.AnimationHandler
+android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda0
+android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda1
+android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda2
+android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda3
+android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda4
+android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda5
+android.animation.Animator$AnimatorCaller$$ExternalSyntheticLambda6
+android.animation.Animator$AnimatorCaller
 android.animation.Animator$AnimatorConstantState
 android.animation.Animator$AnimatorListener
 android.animation.Animator$AnimatorPauseListener
@@ -100,6 +108,7 @@
 android.animation.AnimatorInflater$PathDataEvaluator
 android.animation.AnimatorInflater
 android.animation.AnimatorListenerAdapter
+android.animation.AnimatorSet$$ExternalSyntheticLambda0
 android.animation.AnimatorSet$1
 android.animation.AnimatorSet$2
 android.animation.AnimatorSet$3
@@ -192,9 +201,11 @@
 android.app.ActivityClient
 android.app.ActivityManager$1
 android.app.ActivityManager$2
+android.app.ActivityManager$3
 android.app.ActivityManager$AppTask
 android.app.ActivityManager$MemoryInfo$1
 android.app.ActivityManager$MemoryInfo
+android.app.ActivityManager$MyUidObserver
 android.app.ActivityManager$OnUidImportanceListener
 android.app.ActivityManager$PendingIntentInfo$1
 android.app.ActivityManager$PendingIntentInfo
@@ -211,7 +222,6 @@
 android.app.ActivityManager$RunningTaskInfo
 android.app.ActivityManager$TaskDescription$1
 android.app.ActivityManager$TaskDescription
-android.app.ActivityManager$MyUidObserver
 android.app.ActivityManager
 android.app.ActivityManagerInternal
 android.app.ActivityOptions$1
@@ -524,6 +534,9 @@
 android.app.IUiModeManager
 android.app.IUiModeManagerCallback$Stub
 android.app.IUiModeManagerCallback
+android.app.IUidFrozenStateChangedCallback$Stub$Proxy
+android.app.IUidFrozenStateChangedCallback$Stub
+android.app.IUidFrozenStateChangedCallback
 android.app.IUidObserver$Stub$Proxy
 android.app.IUidObserver$Stub
 android.app.IUidObserver
@@ -852,11 +865,11 @@
 android.app.SystemServiceRegistry
 android.app.TaskInfo
 android.app.TaskStackListener
-android.app.UiModeManager$1
 android.app.UiModeManager$InnerListener
 android.app.UiModeManager$OnProjectionStateChangedListener
 android.app.UiModeManager$OnProjectionStateChangedListenerResourceManager
 android.app.UiModeManager
+android.app.UidObserver
 android.app.UriGrantsManager$1
 android.app.UriGrantsManager
 android.app.UserSwitchObserver
@@ -1805,7 +1818,6 @@
 android.content.pm.verify.domain.IDomainVerificationManager
 android.content.res.ApkAssets
 android.content.res.AssetFileDescriptor$1
-android.content.res.AssetFileDescriptor$AutoCloseInputStream$OffsetCorrectFileChannel
 android.content.res.AssetFileDescriptor$AutoCloseInputStream
 android.content.res.AssetFileDescriptor
 android.content.res.AssetManager$AssetInputStream
@@ -2660,7 +2672,11 @@
 android.hardware.display.DeviceProductInfo$ManufactureDate$1
 android.hardware.display.DeviceProductInfo$ManufactureDate
 android.hardware.display.DeviceProductInfo
+android.hardware.display.DisplayManager$$ExternalSyntheticLambda0
+android.hardware.display.DisplayManager$$ExternalSyntheticLambda1
+android.hardware.display.DisplayManager$$ExternalSyntheticLambda2
 android.hardware.display.DisplayManager$DisplayListener
+android.hardware.display.DisplayManager$WeakDisplayCache
 android.hardware.display.DisplayManager
 android.hardware.display.DisplayManagerGlobal$1
 android.hardware.display.DisplayManagerGlobal$DisplayListenerDelegate$$ExternalSyntheticLambda0
@@ -2748,7 +2764,6 @@
 android.hardware.fingerprint.IFingerprintServiceReceiver$Stub$Proxy
 android.hardware.fingerprint.IFingerprintServiceReceiver$Stub
 android.hardware.fingerprint.IFingerprintServiceReceiver
-android.hardware.fingerprint.IUdfpsOverlay
 android.hardware.fingerprint.IUdfpsOverlayController
 android.hardware.fingerprint.IUdfpsRefreshRateRequestCallback$Stub
 android.hardware.fingerprint.IUdfpsRefreshRateRequestCallback
@@ -2775,7 +2790,10 @@
 android.hardware.input.InputDeviceIdentifier
 android.hardware.input.InputManager$InputDeviceListener
 android.hardware.input.InputManager
+android.hardware.input.InputManagerGlobal$InputDeviceListenerDelegate
+android.hardware.input.InputManagerGlobal$OnTabletModeChangedListenerDelegate
 android.hardware.input.InputManagerGlobal
+android.hardware.input.InputSettings
 android.hardware.input.KeyboardLayout$1
 android.hardware.input.KeyboardLayout
 android.hardware.input.TouchCalibration$1
@@ -3100,7 +3118,6 @@
 android.hardware.radio.V1_6.SliceInfo
 android.hardware.radio.V1_6.SlicingConfig
 android.hardware.radio.V1_6.TrafficDescriptor
-android.hardware.radio.config.V1_0.IRadioConfig$Proxy
 android.hardware.radio.config.V1_0.IRadioConfig
 android.hardware.radio.config.V1_0.IRadioConfigIndication
 android.hardware.radio.config.V1_0.IRadioConfigResponse
@@ -4879,6 +4896,7 @@
 android.media.AudioManager$OnAmPortUpdateListener
 android.media.AudioManager$OnAudioFocusChangeListener
 android.media.AudioManager$OnAudioPortUpdateListener
+android.media.AudioManager$OnModeChangedListener
 android.media.AudioManager$PlaybackConfigChangeCallbackData
 android.media.AudioManager$RecordConfigChangeCallbackData
 android.media.AudioManager$SafeWaitObject
@@ -5201,7 +5219,6 @@
 android.media.RemoteControlClient
 android.media.RemoteDisplay
 android.media.ResampleInputStream
-android.media.Ringtone$MyOnCompletionListener
 android.media.Ringtone
 android.media.RingtoneManager
 android.media.RouteDiscoveryPreference$1
@@ -5489,9 +5506,6 @@
 android.net.INetworkScoreService$Stub$Proxy
 android.net.INetworkScoreService$Stub
 android.net.INetworkScoreService
-android.net.ITetheringStatsProvider$Stub$Proxy
-android.net.ITetheringStatsProvider$Stub
-android.net.ITetheringStatsProvider
 android.net.IVpnManager$Stub$Proxy
 android.net.IVpnManager$Stub
 android.net.IVpnManager
@@ -5975,7 +5989,9 @@
 android.os.INetworkManagementService
 android.os.IPermissionController$Stub
 android.os.IPermissionController
+android.os.IPowerManager$LowPowerStandbyPolicy$1
 android.os.IPowerManager$LowPowerStandbyPolicy
+android.os.IPowerManager$LowPowerStandbyPortDescription$1
 android.os.IPowerManager$LowPowerStandbyPortDescription
 android.os.IPowerManager$Stub$Proxy
 android.os.IPowerManager$Stub
@@ -6596,8 +6612,6 @@
 android.security.Credentials
 android.security.FileIntegrityManager
 android.security.GateKeeper
-android.security.GenerateRkpKey$1
-android.security.GenerateRkpKey
 android.security.IFileIntegrityService$Stub
 android.security.IFileIntegrityService
 android.security.IKeyChainAliasCallback$Stub
@@ -6730,7 +6744,6 @@
 android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi$$ExternalSyntheticLambda5
 android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi$$ExternalSyntheticLambda6
 android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi$EC
-android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi$GenerateKeyPairHelperResult
 android.security.keystore2.AndroidKeyStoreKeyPairGeneratorSpi
 android.security.keystore2.AndroidKeyStoreLoadStoreParameter
 android.security.keystore2.AndroidKeyStorePrivateKey
@@ -6960,7 +6973,6 @@
 android.service.notification.StatusBarNotification$1
 android.service.notification.StatusBarNotification
 android.service.notification.ZenModeConfig$1
-android.service.notification.ZenModeConfig$Diff
 android.service.notification.ZenModeConfig$EventInfo
 android.service.notification.ZenModeConfig$ScheduleInfo
 android.service.notification.ZenModeConfig$ZenRule$1
@@ -7084,7 +7096,6 @@
 android.speech.tts.UtteranceProgressListener
 android.stats.devicepolicy.nano.StringList
 android.sysprop.AdbProperties
-android.sysprop.ApexProperties
 android.sysprop.ContactsProperties
 android.sysprop.CryptoProperties$state_values
 android.sysprop.CryptoProperties$type_values
@@ -7408,10 +7419,12 @@
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda19
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda1
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda20
+android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda23
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda24
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda27
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda28
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda2
+android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda31
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda32
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda34
 android.telephony.PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda38
@@ -7499,7 +7512,6 @@
 android.telephony.SubscriptionManager$CallISubMethodHelper
 android.telephony.SubscriptionManager$IntegerPropertyInvalidatedCache
 android.telephony.SubscriptionManager$OnOpportunisticSubscriptionsChangedListener
-android.telephony.SubscriptionManager$OnSubscriptionsChangedListener$OnSubscriptionsChangedListenerHandler
 android.telephony.SubscriptionManager$OnSubscriptionsChangedListener
 android.telephony.SubscriptionManager$VoidPropertyInvalidatedCache
 android.telephony.SubscriptionManager
@@ -8018,6 +8030,7 @@
 android.text.method.DateTimeKeyListener
 android.text.method.DialerKeyListener
 android.text.method.DigitsKeyListener
+android.text.method.InsertModeTransformationMethod
 android.text.method.KeyListener
 android.text.method.LinkMovementMethod
 android.text.method.MetaKeyKeyListener
@@ -8215,6 +8228,8 @@
 android.util.DataUnit$4
 android.util.DataUnit$5
 android.util.DataUnit$6
+android.util.DataUnit$7
+android.util.DataUnit$8
 android.util.DataUnit
 android.util.DebugUtils
 android.util.DisplayMetrics
@@ -8723,6 +8738,9 @@
 android.view.SurfaceControl$TrustedPresentationThresholds
 android.view.SurfaceControl
 android.view.SurfaceControlHdrLayerInfoListener
+android.view.SurfaceControlRegistry$DefaultReporter
+android.view.SurfaceControlRegistry$Reporter
+android.view.SurfaceControlRegistry
 android.view.SurfaceControlViewHost$SurfacePackage$1
 android.view.SurfaceControlViewHost$SurfacePackage
 android.view.SurfaceHolder$Callback2
@@ -8872,6 +8890,7 @@
 android.view.ViewRootImpl$$ExternalSyntheticLambda16
 android.view.ViewRootImpl$$ExternalSyntheticLambda17
 android.view.ViewRootImpl$$ExternalSyntheticLambda18
+android.view.ViewRootImpl$$ExternalSyntheticLambda19
 android.view.ViewRootImpl$$ExternalSyntheticLambda1
 android.view.ViewRootImpl$$ExternalSyntheticLambda2
 android.view.ViewRootImpl$$ExternalSyntheticLambda3
@@ -8890,7 +8909,7 @@
 android.view.ViewRootImpl$6
 android.view.ViewRootImpl$7
 android.view.ViewRootImpl$8$$ExternalSyntheticLambda0
-android.view.ViewRootImpl$8$1
+android.view.ViewRootImpl$8$$ExternalSyntheticLambda1
 android.view.ViewRootImpl$8
 android.view.ViewRootImpl$AccessibilityInteractionConnection
 android.view.ViewRootImpl$AccessibilityInteractionConnectionManager
@@ -9099,7 +9118,6 @@
 android.view.autofill.AutofillManager$$ExternalSyntheticLambda2
 android.view.autofill.AutofillManager$$ExternalSyntheticLambda3
 android.view.autofill.AutofillManager$$ExternalSyntheticLambda4
-android.view.autofill.AutofillManager$$ExternalSyntheticLambda5
 android.view.autofill.AutofillManager$AugmentedAutofillManagerClient
 android.view.autofill.AutofillManager$AutofillCallback
 android.view.autofill.AutofillManager$AutofillClient
@@ -9183,6 +9201,7 @@
 android.view.displayhash.DisplayHashManager
 android.view.displayhash.DisplayHashResultCallback
 android.view.inputmethod.BaseInputConnection
+android.view.inputmethod.CancellableHandwritingGesture
 android.view.inputmethod.CompletionInfo$1
 android.view.inputmethod.CompletionInfo
 android.view.inputmethod.ComposingText
@@ -9276,6 +9295,7 @@
 android.view.inputmethod.PreviewableHandwritingGesture
 android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda24
 android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda25
+android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda36
 android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda37
 android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda40
 android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda8
@@ -9980,6 +10000,7 @@
 android.window.SurfaceSyncGroup$$ExternalSyntheticLambda2
 android.window.SurfaceSyncGroup$$ExternalSyntheticLambda3
 android.window.SurfaceSyncGroup$$ExternalSyntheticLambda5
+android.window.SurfaceSyncGroup$$ExternalSyntheticLambda6
 android.window.SurfaceSyncGroup$1
 android.window.SurfaceSyncGroup$2
 android.window.SurfaceSyncGroup$ISurfaceSyncGroupImpl
@@ -10019,6 +10040,7 @@
 android.window.WindowInfosListener
 android.window.WindowMetricsController$$ExternalSyntheticLambda0
 android.window.WindowMetricsController
+android.window.WindowOnBackInvokedDispatcher$$ExternalSyntheticLambda0
 android.window.WindowOnBackInvokedDispatcher$Checker
 android.window.WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda0
 android.window.WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda1
@@ -10769,6 +10791,7 @@
 com.android.internal.compat.IPlatformCompat
 com.android.internal.compat.IPlatformCompatNative$Stub
 com.android.internal.compat.IPlatformCompatNative
+com.android.internal.config.appcloning.AppCloningDeviceConfigHelper$$ExternalSyntheticLambda0
 com.android.internal.config.appcloning.AppCloningDeviceConfigHelper
 com.android.internal.content.F2fsUtils
 com.android.internal.content.NativeLibraryHelper$Handle
@@ -10815,8 +10838,6 @@
 com.android.internal.dynamicanimation.animation.Force
 com.android.internal.dynamicanimation.animation.SpringAnimation
 com.android.internal.dynamicanimation.animation.SpringForce
-com.android.modules.expresslog.Counter
-com.android.modules.expresslog.Utils
 com.android.internal.graphics.ColorUtils$ContrastCalculator
 com.android.internal.graphics.ColorUtils
 com.android.internal.graphics.SfVsyncFrameCallbackProvider
@@ -10860,6 +10881,8 @@
 com.android.internal.inputmethod.IAccessibilityInputMethodSession$Stub$Proxy
 com.android.internal.inputmethod.IAccessibilityInputMethodSession$Stub
 com.android.internal.inputmethod.IAccessibilityInputMethodSession
+com.android.internal.inputmethod.IImeTracker$Stub$Proxy
+com.android.internal.inputmethod.IImeTracker$Stub
 com.android.internal.inputmethod.IImeTracker
 com.android.internal.inputmethod.IInputContentUriToken
 com.android.internal.inputmethod.IInputMethod$Stub
@@ -10909,6 +10932,7 @@
 com.android.internal.jank.InteractionJankMonitor$$ExternalSyntheticLambda1
 com.android.internal.jank.InteractionJankMonitor$$ExternalSyntheticLambda2
 com.android.internal.jank.InteractionJankMonitor$$ExternalSyntheticLambda3
+com.android.internal.jank.InteractionJankMonitor$$ExternalSyntheticLambda5
 com.android.internal.jank.InteractionJankMonitor$$ExternalSyntheticLambda6
 com.android.internal.jank.InteractionJankMonitor$$ExternalSyntheticLambda8
 com.android.internal.jank.InteractionJankMonitor$$ExternalSyntheticLambda9
@@ -11683,34 +11707,6 @@
 com.android.internal.telephony.StateMachine$SmHandler$StateInfo
 com.android.internal.telephony.StateMachine$SmHandler
 com.android.internal.telephony.StateMachine
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda0
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda10
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda11
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda1
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda2
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda3
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda4
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda5
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda6
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda7
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda8
-com.android.internal.telephony.SubscriptionController$$ExternalSyntheticLambda9
-com.android.internal.telephony.SubscriptionController$1
-com.android.internal.telephony.SubscriptionController$2
-com.android.internal.telephony.SubscriptionController$WatchedInt
-com.android.internal.telephony.SubscriptionController$WatchedSlotIndexToSubIds
-com.android.internal.telephony.SubscriptionController
-com.android.internal.telephony.SubscriptionInfoUpdater$$ExternalSyntheticLambda0
-com.android.internal.telephony.SubscriptionInfoUpdater$$ExternalSyntheticLambda1
-com.android.internal.telephony.SubscriptionInfoUpdater$$ExternalSyntheticLambda2
-com.android.internal.telephony.SubscriptionInfoUpdater$$ExternalSyntheticLambda3
-com.android.internal.telephony.SubscriptionInfoUpdater$$ExternalSyntheticLambda4
-com.android.internal.telephony.SubscriptionInfoUpdater$$ExternalSyntheticLambda5
-com.android.internal.telephony.SubscriptionInfoUpdater$$ExternalSyntheticLambda6
-com.android.internal.telephony.SubscriptionInfoUpdater$1
-com.android.internal.telephony.SubscriptionInfoUpdater$2
-com.android.internal.telephony.SubscriptionInfoUpdater$UpdateEmbeddedSubsCallback
-com.android.internal.telephony.SubscriptionInfoUpdater
 com.android.internal.telephony.TelephonyCapabilities
 com.android.internal.telephony.TelephonyCommonStatsLog
 com.android.internal.telephony.TelephonyComponentFactory$$ExternalSyntheticLambda0
@@ -12261,6 +12257,7 @@
 com.android.internal.telephony.nano.PersistAtomsProto$CellularDataServiceSwitch
 com.android.internal.telephony.nano.PersistAtomsProto$CellularServiceState
 com.android.internal.telephony.nano.PersistAtomsProto$DataCallSession
+com.android.internal.telephony.nano.PersistAtomsProto$EmergencyNumbersInfo
 com.android.internal.telephony.nano.PersistAtomsProto$GbaEvent
 com.android.internal.telephony.nano.PersistAtomsProto$ImsDedicatedBearerEvent
 com.android.internal.telephony.nano.PersistAtomsProto$ImsDedicatedBearerListenerEvent
@@ -12277,6 +12274,12 @@
 com.android.internal.telephony.nano.PersistAtomsProto$PresenceNotifyEvent
 com.android.internal.telephony.nano.PersistAtomsProto$RcsAcsProvisioningStats
 com.android.internal.telephony.nano.PersistAtomsProto$RcsClientProvisioningStats
+com.android.internal.telephony.nano.PersistAtomsProto$SatelliteController
+com.android.internal.telephony.nano.PersistAtomsProto$SatelliteIncomingDatagram
+com.android.internal.telephony.nano.PersistAtomsProto$SatelliteOutgoingDatagram
+com.android.internal.telephony.nano.PersistAtomsProto$SatelliteProvision
+com.android.internal.telephony.nano.PersistAtomsProto$SatelliteSession
+com.android.internal.telephony.nano.PersistAtomsProto$SatelliteSosMessageRecommender
 com.android.internal.telephony.nano.PersistAtomsProto$SipDelegateStats
 com.android.internal.telephony.nano.PersistAtomsProto$SipMessageResponse
 com.android.internal.telephony.nano.PersistAtomsProto$SipTransportFeatureTagStats
@@ -12717,10 +12720,14 @@
 com.android.internal.util.IndentingPrintWriter
 com.android.internal.util.IntPair
 com.android.internal.util.JournaledFile
+com.android.internal.util.LatencyTracker$$ExternalSyntheticLambda0
 com.android.internal.util.LatencyTracker$$ExternalSyntheticLambda1
 com.android.internal.util.LatencyTracker$$ExternalSyntheticLambda2
 com.android.internal.util.LatencyTracker$Action
 com.android.internal.util.LatencyTracker$ActionProperties
+com.android.internal.util.LatencyTracker$FrameworkStatsLogEvent
+com.android.internal.util.LatencyTracker$SLatencyTrackerHolder
+com.android.internal.util.LatencyTracker$Session$$ExternalSyntheticLambda0
 com.android.internal.util.LatencyTracker$Session
 com.android.internal.util.LatencyTracker
 com.android.internal.util.LineBreakBufferedWriter
@@ -12958,6 +12965,8 @@
 com.android.internal.widget.floatingtoolbar.FloatingToolbar$$ExternalSyntheticLambda0
 com.android.internal.widget.floatingtoolbar.FloatingToolbar
 com.android.internal.widget.floatingtoolbar.FloatingToolbarPopup
+com.android.modules.expresslog.Counter
+com.android.modules.expresslog.Utils
 com.android.modules.utils.BasicShellCommandHandler
 com.android.modules.utils.TypedXmlPullParser
 com.android.modules.utils.TypedXmlSerializer
@@ -14082,6 +14091,7 @@
 java.io.ObjectOutputStream$ReplaceTable
 java.io.ObjectOutputStream
 java.io.ObjectStreamClass$$ExternalSyntheticLambda0
+java.io.ObjectStreamClass$$ExternalSyntheticLambda1
 java.io.ObjectStreamClass$1
 java.io.ObjectStreamClass$2
 java.io.ObjectStreamClass$3
@@ -14090,6 +14100,7 @@
 java.io.ObjectStreamClass$Caches
 java.io.ObjectStreamClass$ClassDataSlot
 java.io.ObjectStreamClass$DefaultSUIDCompatibilityListener
+java.io.ObjectStreamClass$DeserializationConstructorsCache
 java.io.ObjectStreamClass$EntryFuture$1
 java.io.ObjectStreamClass$EntryFuture
 java.io.ObjectStreamClass$ExceptionInfo
@@ -14120,6 +14131,7 @@
 java.io.StringBufferInputStream
 java.io.StringReader
 java.io.StringWriter
+java.io.SyncFailedException
 java.io.UTFDataFormatException
 java.io.UncheckedIOException
 java.io.UnixFileSystem
@@ -14227,6 +14239,7 @@
 java.lang.ProcessEnvironment
 java.lang.ProcessImpl
 java.lang.Readable
+java.lang.Record
 java.lang.ReflectiveOperationException
 java.lang.Runnable
 java.lang.Runtime
@@ -14307,6 +14320,24 @@
 java.lang.annotation.Inherited
 java.lang.annotation.Retention
 java.lang.annotation.Target
+java.lang.constant.ClassDesc
+java.lang.constant.Constable
+java.lang.constant.ConstantDesc
+java.lang.constant.ConstantDescs
+java.lang.constant.ConstantUtils
+java.lang.constant.DirectMethodHandleDesc$1
+java.lang.constant.DirectMethodHandleDesc$Kind
+java.lang.constant.DirectMethodHandleDesc
+java.lang.constant.DirectMethodHandleDescImpl$1
+java.lang.constant.DirectMethodHandleDescImpl
+java.lang.constant.DynamicConstantDesc$AnonymousDynamicConstantDesc
+java.lang.constant.DynamicConstantDesc
+java.lang.constant.MethodHandleDesc$1
+java.lang.constant.MethodHandleDesc
+java.lang.constant.MethodTypeDesc
+java.lang.constant.MethodTypeDescImpl
+java.lang.constant.PrimitiveClassDescImpl
+java.lang.constant.ReferenceClassDescImpl
 java.lang.invoke.ArrayElementVarHandle
 java.lang.invoke.ByteArrayViewVarHandle
 java.lang.invoke.ByteBufferViewVarHandle
@@ -14383,8 +14414,10 @@
 java.lang.invoke.VarHandle$1
 java.lang.invoke.VarHandle$AccessMode
 java.lang.invoke.VarHandle$AccessType
+java.lang.invoke.VarHandle$VarHandleDesc$Kind
 java.lang.invoke.VarHandle
 java.lang.invoke.WrongMethodTypeException
+java.lang.ref.Cleaner$Cleanable
 java.lang.ref.FinalizerReference$Sentinel-IA
 java.lang.ref.FinalizerReference$Sentinel
 java.lang.ref.FinalizerReference
@@ -14423,6 +14456,7 @@
 java.lang.reflect.Proxy$ProxyClassFactory-IA
 java.lang.reflect.Proxy$ProxyClassFactory
 java.lang.reflect.Proxy
+java.lang.reflect.RecordComponent
 java.lang.reflect.ReflectPermission
 java.lang.reflect.Type
 java.lang.reflect.TypeVariable
@@ -15265,7 +15299,6 @@
 java.util.Scanner
 java.util.ServiceConfigurationError
 java.util.ServiceLoader$1
-java.util.ServiceLoader$LazyIterator
 java.util.ServiceLoader
 java.util.Set
 java.util.SimpleTimeZone$Cache
@@ -15292,7 +15325,6 @@
 java.util.TaskQueue
 java.util.TimSort
 java.util.TimeZone
-java.util.Timer$1
 java.util.Timer
 java.util.TimerTask
 java.util.TimerThread
@@ -15691,10 +15723,6 @@
 java.util.stream.DoublePipeline$StatelessOp
 java.util.stream.DoublePipeline
 java.util.stream.DoubleStream
-java.util.stream.FindOps$$ExternalSyntheticLambda0
-java.util.stream.FindOps$$ExternalSyntheticLambda4
-java.util.stream.FindOps$$ExternalSyntheticLambda5
-java.util.stream.FindOps$$ExternalSyntheticLambda7
 java.util.stream.FindOps$FindOp
 java.util.stream.FindOps$FindSink$OfInt
 java.util.stream.FindOps$FindSink$OfRef
@@ -15705,13 +15733,11 @@
 java.util.stream.ForEachOps$ForEachOp
 java.util.stream.ForEachOps
 java.util.stream.IntPipeline$$ExternalSyntheticLambda0
-java.util.stream.IntPipeline$$ExternalSyntheticLambda13
 java.util.stream.IntPipeline$$ExternalSyntheticLambda1
 java.util.stream.IntPipeline$$ExternalSyntheticLambda7
 java.util.stream.IntPipeline$$ExternalSyntheticLambda8
 java.util.stream.IntPipeline$4$1
 java.util.stream.IntPipeline$4
-java.util.stream.IntPipeline$9$1
 java.util.stream.IntPipeline$9
 java.util.stream.IntPipeline$Head
 java.util.stream.IntPipeline$StatelessOp
@@ -15774,7 +15800,6 @@
 java.util.stream.ReduceOps$ReduceOp
 java.util.stream.ReduceOps
 java.util.stream.ReferencePipeline$$ExternalSyntheticLambda1
-java.util.stream.ReferencePipeline$$ExternalSyntheticLambda2
 java.util.stream.ReferencePipeline$2$1
 java.util.stream.ReferencePipeline$2
 java.util.stream.ReferencePipeline$3$1
@@ -16103,13 +16128,13 @@
 jdk.internal.math.FormattedFloatingDecimal$2
 jdk.internal.math.FormattedFloatingDecimal$Form
 jdk.internal.math.FormattedFloatingDecimal
-jdk.internal.misc.JavaObjectInputStreamAccess
-jdk.internal.misc.SharedSecrets
 jdk.internal.misc.TerminatingThreadLocal$1
 jdk.internal.misc.TerminatingThreadLocal
 jdk.internal.misc.Unsafe
 jdk.internal.misc.UnsafeConstants
 jdk.internal.misc.VM
+jdk.internal.ref.CleanerImpl$PhantomCleanableRef
+jdk.internal.ref.PhantomCleanable
 jdk.internal.reflect.Reflection
 jdk.internal.util.ArraysSupport
 jdk.internal.util.Preconditions
@@ -16148,7 +16173,6 @@
 libcore.io.NioBufferIterator
 libcore.io.Os
 libcore.io.Streams
-libcore.math.MathUtils
 libcore.math.NativeBN
 libcore.net.InetAddressUtils
 libcore.net.NetworkSecurityPolicy$DefaultNetworkSecurityPolicy
@@ -16168,6 +16192,7 @@
 libcore.reflect.ListOfTypes
 libcore.reflect.ListOfVariables
 libcore.reflect.ParameterizedTypeImpl
+libcore.reflect.RecordComponents
 libcore.reflect.TypeVariableImpl
 libcore.reflect.Types
 libcore.reflect.WildcardTypeImpl
@@ -16316,9 +16341,7 @@
 sun.misc.CompoundEnumeration
 sun.misc.HexDumpEncoder
 sun.misc.IOUtils
-sun.misc.JavaIOFileDescriptorAccess
 sun.misc.LRUCache
-sun.misc.SharedSecrets
 sun.misc.Unsafe
 sun.misc.VM
 sun.misc.Version
@@ -16922,7 +16945,6 @@
 [Landroid.net.Uri;
 [Landroid.net.rtp.AudioCodec;
 [Landroid.os.AsyncTask$Status;
-[Landroid.os.BatteryConsumer$Dimensions;
 [Landroid.os.BatteryConsumer$Key;
 [Landroid.os.BatteryStats$BitDescription;
 [Landroid.os.BatteryStats$IntToString;
@@ -17155,29 +17177,22 @@
 [Ldalvik.system.DexPathList$Element;
 [Ldalvik.system.DexPathList$NativeLibraryElement;
 [Lgov.nist.javax.sip.DialogTimeoutEvent$Reason;
-[Ljava.io.Closeable;
 [Ljava.io.File$PathStatus;
 [Ljava.io.File;
-[Ljava.io.FileDescriptor;
-[Ljava.io.IOException;
 [Ljava.io.ObjectInputStream$HandleTable$HandleList;
 [Ljava.io.ObjectStreamClass$ClassDataSlot;
 [Ljava.io.ObjectStreamClass$MemberSignature;
 [Ljava.io.ObjectStreamField;
-[Ljava.io.Serializable;
-[Ljava.lang.Boolean;
 [Ljava.lang.Byte;
 [Ljava.lang.CharSequence;
 [Ljava.lang.Character$UnicodeBlock;
 [Ljava.lang.Character;
 [Ljava.lang.Class;
-[Ljava.lang.ClassLoader;
 [Ljava.lang.ClassValue$Entry;
 [Ljava.lang.Comparable;
 [Ljava.lang.Daemons$Daemon;
 [Ljava.lang.Double;
 [Ljava.lang.Enum;
-[Ljava.lang.Float;
 [Ljava.lang.Integer;
 [Ljava.lang.Long;
 [Ljava.lang.Number;
@@ -17194,24 +17209,28 @@
 [Ljava.lang.ThreadGroup;
 [Ljava.lang.ThreadLocal$ThreadLocalMap$Entry;
 [Ljava.lang.Throwable;
-[Ljava.lang.Void;
 [Ljava.lang.annotation.Annotation;
+[Ljava.lang.constant.ClassDesc;
+[Ljava.lang.constant.Constable;
+[Ljava.lang.constant.ConstantDesc;
+[Ljava.lang.constant.DirectMethodHandleDesc$Kind;
 [Ljava.lang.invoke.MethodHandle;
 [Ljava.lang.invoke.MethodType;
 [Ljava.lang.invoke.TypeDescriptor$OfField;
 [Ljava.lang.invoke.VarHandle$AccessMode;
 [Ljava.lang.invoke.VarHandle$AccessType;
+[Ljava.lang.invoke.VarHandle$VarHandleDesc$Kind;
 [Ljava.lang.ref.WeakReference;
 [Ljava.lang.reflect.AccessibleObject;
 [Ljava.lang.reflect.Constructor;
 [Ljava.lang.reflect.Field;
 [Ljava.lang.reflect.Method;
 [Ljava.lang.reflect.Parameter;
+[Ljava.lang.reflect.RecordComponent;
 [Ljava.lang.reflect.Type;
 [Ljava.lang.reflect.TypeVariable;
 [Ljava.math.BigDecimal;
 [Ljava.math.BigInteger;
-[Ljava.math.MathContext;
 [Ljava.math.RoundingMode;
 [Ljava.net.Authenticator$RequestorType;
 [Ljava.net.InetAddress;
@@ -17232,7 +17251,6 @@
 [Ljava.nio.file.attribute.FileAttribute;
 [Ljava.security.CodeSigner;
 [Ljava.security.CryptoPrimitive;
-[Ljava.security.MessageDigest;
 [Ljava.security.Permission;
 [Ljava.security.Principal;
 [Ljava.security.ProtectionDomain;
@@ -17245,10 +17263,8 @@
 [Ljava.security.cert.X509CRL;
 [Ljava.security.cert.X509Certificate;
 [Ljava.text.DateFormat$Field;
-[Ljava.text.DateFormat;
 [Ljava.text.Format;
 [Ljava.text.Normalizer$Form;
-[Ljava.time.Clock;
 [Ljava.time.DayOfWeek;
 [Ljava.time.LocalDateTime;
 [Ljava.time.LocalTime;
@@ -17268,12 +17284,10 @@
 [Ljava.time.zone.ZoneOffsetTransition;
 [Ljava.time.zone.ZoneOffsetTransitionRule$TimeDefinition;
 [Ljava.time.zone.ZoneOffsetTransitionRule;
-[Ljava.util.ArrayList;
 [Ljava.util.Comparators$NaturalOrderComparator;
 [Ljava.util.Enumeration;
 [Ljava.util.Formatter$Flags;
 [Ljava.util.HashMap$Node;
-[Ljava.util.HashMap;
 [Ljava.util.Hashtable$HashtableEntry;
 [Ljava.util.List;
 [Ljava.util.Locale$Category;
@@ -17281,9 +17295,7 @@
 [Ljava.util.Locale$IsoCountryCode;
 [Ljava.util.Locale;
 [Ljava.util.Map$Entry;
-[Ljava.util.Set;
 [Ljava.util.TimerTask;
-[Ljava.util.UUID;
 [Ljava.util.WeakHashMap$Entry;
 [Ljava.util.concurrent.ConcurrentHashMap$CounterCell;
 [Ljava.util.concurrent.ConcurrentHashMap$Node;
@@ -17309,7 +17321,6 @@
 [Ljavax.net.ssl.SSLEngineResult$Status;
 [Ljavax.net.ssl.TrustManager;
 [Ljavax.security.auth.callback.Callback;
-[Ljavax.security.auth.x500.X500Principal;
 [Ljavax.security.cert.X509Certificate;
 [Ljavax.sip.DialogState;
 [Ljavax.sip.Timeout;
@@ -17343,9 +17354,7 @@
 [S
 [Z
 [[B
-[[C
 [[D
-[[F
 [[I
 [[J
 [[Landroid.media.ExifInterface$ExifTag;
@@ -17353,15 +17362,9 @@
 [[Lcom.android.internal.widget.LockPatternView$Cell;
 [[Ljava.lang.Byte;
 [[Ljava.lang.Class;
-[[Ljava.lang.Long;
 [[Ljava.lang.Object;
 [[Ljava.lang.String;
 [[Ljava.lang.annotation.Annotation;
 [[Ljava.lang.invoke.MethodHandle;
 [[Ljava.math.BigInteger;
-[[Ljava.security.cert.Certificate;
-[[Ljava.security.cert.X509Certificate;
-[[S
 [[Z
-[[[B
-[[[I
diff --git a/core/api/current.txt b/core/api/current.txt
index 1050cbf..83f43bb 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -3286,8 +3286,10 @@
 
   public abstract class AccessibilityService extends android.app.Service {
     ctor public AccessibilityService();
-    method public void attachAccessibilityOverlayToDisplay(int, @NonNull android.view.SurfaceControl);
-    method public void attachAccessibilityOverlayToWindow(int, @NonNull android.view.SurfaceControl);
+    method @Deprecated public void attachAccessibilityOverlayToDisplay(int, @NonNull android.view.SurfaceControl);
+    method public void attachAccessibilityOverlayToDisplay(int, @NonNull android.view.SurfaceControl, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.IntConsumer);
+    method @Deprecated public void attachAccessibilityOverlayToWindow(int, @NonNull android.view.SurfaceControl);
+    method public void attachAccessibilityOverlayToWindow(int, @NonNull android.view.SurfaceControl, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.IntConsumer);
     method public boolean clearCache();
     method public boolean clearCachedSubtree(@NonNull android.view.accessibility.AccessibilityNodeInfo);
     method public final void disableSelf();
@@ -3399,6 +3401,9 @@
     field public static final int GLOBAL_ACTION_RECENTS = 3; // 0x3
     field public static final int GLOBAL_ACTION_TAKE_SCREENSHOT = 9; // 0x9
     field public static final int GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN = 7; // 0x7
+    field public static final int OVERLAY_RESULT_INTERNAL_ERROR = 1; // 0x1
+    field public static final int OVERLAY_RESULT_INVALID = 2; // 0x2
+    field public static final int OVERLAY_RESULT_SUCCESS = 0; // 0x0
     field public static final String SERVICE_INTERFACE = "android.accessibilityservice.AccessibilityService";
     field public static final String SERVICE_META_DATA = "android.accessibilityservice";
     field public static final int SHOW_MODE_AUTO = 0; // 0x0
@@ -3662,13 +3667,13 @@
   }
 
   public class Account implements android.os.Parcelable {
-    ctor public Account(String, String);
+    ctor public Account(@NonNull String, @NonNull String);
     ctor public Account(android.os.Parcel);
     method public int describeContents();
     method public void writeToParcel(android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.accounts.Account> CREATOR;
-    field public final String name;
-    field public final String type;
+    field @NonNull public final String name;
+    field @NonNull public final String type;
   }
 
   @Deprecated public class AccountAuthenticatorActivity extends android.app.Activity {
@@ -4458,6 +4463,7 @@
     method public void onProvideAssistData(android.os.Bundle);
     method public android.net.Uri onProvideReferrer();
     method public void onRequestPermissionsResult(int, @NonNull String[], @NonNull int[]);
+    method public void onRequestPermissionsResult(int, @NonNull String[], @NonNull int[], int);
     method @CallSuper protected void onRestart();
     method protected void onRestoreInstanceState(@NonNull android.os.Bundle);
     method public void onRestoreInstanceState(@Nullable android.os.Bundle, @Nullable android.os.PersistableBundle);
@@ -4499,12 +4505,14 @@
     method public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent);
     method public void requestFullscreenMode(int, @Nullable android.os.OutcomeReceiver<java.lang.Void,java.lang.Throwable>);
     method public final void requestPermissions(@NonNull String[], int);
+    method public final void requestPermissions(@NonNull String[], int, int);
     method public final void requestShowKeyboardShortcuts();
     method @Deprecated public boolean requestVisibleBehind(boolean);
     method public final boolean requestWindowFeature(int);
     method @NonNull public final <T extends android.view.View> T requireViewById(@IdRes int);
     method public final void runOnUiThread(Runnable);
     method public void setActionBar(@Nullable android.widget.Toolbar);
+    method public void setAllowCrossUidActivitySwitchFromBelow(boolean);
     method public void setContentTransitionManager(android.transition.TransitionManager);
     method public void setContentView(@LayoutRes int);
     method public void setContentView(android.view.View);
@@ -4545,6 +4553,7 @@
     method public void setVrModeEnabled(boolean, @NonNull android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
     method public boolean shouldDockBigOverlays();
     method public boolean shouldShowRequestPermissionRationale(@NonNull String);
+    method public boolean shouldShowRequestPermissionRationale(@NonNull String, int);
     method public boolean shouldUpRecreateTask(android.content.Intent);
     method public boolean showAssist(android.os.Bundle);
     method @Deprecated public final void showDialog(int);
@@ -4607,7 +4616,9 @@
 
   public class ActivityManager {
     method public int addAppTask(@NonNull android.app.Activity, @NonNull android.content.Intent, @Nullable android.app.ActivityManager.TaskDescription, @NonNull android.graphics.Bitmap);
+    method public void addStartInfoTimestamp(@IntRange(from=android.app.ApplicationStartInfo.START_TIMESTAMP_RESERVED_RANGE_DEVELOPER_START, to=android.app.ApplicationStartInfo.START_TIMESTAMP_RESERVED_RANGE_DEVELOPER) int, long);
     method public void appNotResponding(@NonNull String);
+    method public void clearApplicationStartInfoCompletionListener();
     method public boolean clearApplicationUserData();
     method public void clearWatchHeapLimit();
     method @RequiresPermission(android.Manifest.permission.DUMP) public void dumpPackageState(java.io.FileDescriptor, String);
@@ -4615,6 +4626,7 @@
     method public java.util.List<android.app.ActivityManager.AppTask> getAppTasks();
     method public android.content.pm.ConfigurationInfo getDeviceConfigurationInfo();
     method @NonNull public java.util.List<android.app.ApplicationExitInfo> getHistoricalProcessExitReasons(@Nullable String, @IntRange(from=0) int, @IntRange(from=0) int);
+    method @NonNull public java.util.List<android.app.ApplicationStartInfo> getHistoricalProcessStartReasons(@IntRange(from=0) int);
     method public int getLargeMemoryClass();
     method public int getLauncherLargeIconDensity();
     method public int getLauncherLargeIconSize();
@@ -4641,6 +4653,7 @@
     method @RequiresPermission(android.Manifest.permission.REORDER_TASKS) public void moveTaskToFront(int, int);
     method @RequiresPermission(android.Manifest.permission.REORDER_TASKS) public void moveTaskToFront(int, int, android.os.Bundle);
     method @Deprecated public void restartPackage(String);
+    method public void setApplicationStartInfoCompletionListener(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.ApplicationStartInfo>);
     method public void setProcessStateSummary(@Nullable byte[]);
     method public static void setVrThread(int);
     method public void setWatchHeapLimit(long);
@@ -5221,6 +5234,57 @@
     field public static final int REASON_USER_STOPPED = 11; // 0xb
   }
 
+  public final class ApplicationStartInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getDefiningUid();
+    method @Nullable public android.content.Intent getIntent();
+    method public int getLaunchMode();
+    method public int getPackageUid();
+    method public int getPid();
+    method @NonNull public String getProcessName();
+    method public int getRealUid();
+    method public int getReason();
+    method public int getStartType();
+    method public int getStartupState();
+    method @NonNull public java.util.Map<java.lang.Integer,java.lang.Long> getStartupTimestamps();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ApplicationStartInfo> CREATOR;
+    field public static final int LAUNCH_MODE_SINGLE_INSTANCE = 2; // 0x2
+    field public static final int LAUNCH_MODE_SINGLE_INSTANCE_PER_TASK = 4; // 0x4
+    field public static final int LAUNCH_MODE_SINGLE_TASK = 3; // 0x3
+    field public static final int LAUNCH_MODE_SINGLE_TOP = 1; // 0x1
+    field public static final int LAUNCH_MODE_STANDARD = 0; // 0x0
+    field public static final int STARTUP_STATE_ERROR = 1; // 0x1
+    field public static final int STARTUP_STATE_FIRST_FRAME_DRAWN = 2; // 0x2
+    field public static final int STARTUP_STATE_STARTED = 0; // 0x0
+    field public static final int START_REASON_ALARM = 0; // 0x0
+    field public static final int START_REASON_BACKUP = 1; // 0x1
+    field public static final int START_REASON_BOOT_COMPLETE = 2; // 0x2
+    field public static final int START_REASON_BROADCAST = 3; // 0x3
+    field public static final int START_REASON_CONTENT_PROVIDER = 4; // 0x4
+    field public static final int START_REASON_JOB = 5; // 0x5
+    field public static final int START_REASON_LAUNCHER = 6; // 0x6
+    field public static final int START_REASON_LAUNCHER_RECENTS = 7; // 0x7
+    field public static final int START_REASON_OTHER = 8; // 0x8
+    field public static final int START_REASON_PUSH = 9; // 0x9
+    field public static final int START_REASON_SERVICE = 10; // 0xa
+    field public static final int START_REASON_START_ACTIVITY = 11; // 0xb
+    field public static final int START_TIMESTAMP_APPLICATION_ONCREATE = 2; // 0x2
+    field public static final int START_TIMESTAMP_BIND_APPLICATION = 3; // 0x3
+    field public static final int START_TIMESTAMP_FIRST_FRAME = 4; // 0x4
+    field public static final int START_TIMESTAMP_FORK = 1; // 0x1
+    field public static final int START_TIMESTAMP_FULLY_DRAWN = 5; // 0x5
+    field public static final int START_TIMESTAMP_INITIAL_RENDERTHREAD_FRAME = 6; // 0x6
+    field public static final int START_TIMESTAMP_LAUNCH = 0; // 0x0
+    field public static final int START_TIMESTAMP_RESERVED_RANGE_DEVELOPER = 30; // 0x1e
+    field public static final int START_TIMESTAMP_RESERVED_RANGE_DEVELOPER_START = 21; // 0x15
+    field public static final int START_TIMESTAMP_RESERVED_RANGE_SYSTEM = 20; // 0x14
+    field public static final int START_TIMESTAMP_SURFACEFLINGER_COMPOSITION_COMPLETE = 7; // 0x7
+    field public static final int START_TYPE_COLD = 0; // 0x0
+    field public static final int START_TYPE_HOT = 2; // 0x2
+    field public static final int START_TYPE_WARM = 1; // 0x1
+  }
+
   public final class AsyncNotedAppOp implements android.os.Parcelable {
     method public int describeContents();
     method @Nullable public String getAttributionTag();
@@ -6658,6 +6722,21 @@
     field protected android.app.Notification.Builder mBuilder;
   }
 
+  public static final class Notification.TvExtender implements android.app.Notification.Extender {
+    ctor public Notification.TvExtender();
+    ctor public Notification.TvExtender(@NonNull android.app.Notification);
+    method @NonNull public android.app.Notification.Builder extend(@NonNull android.app.Notification.Builder);
+    method @Nullable public String getChannelId();
+    method @Nullable public android.app.PendingIntent getContentIntent();
+    method @Nullable public android.app.PendingIntent getDeleteIntent();
+    method public boolean isAvailableOnTv();
+    method public boolean isSuppressShowOverApps();
+    method @NonNull public android.app.Notification.TvExtender setChannelId(@Nullable String);
+    method @NonNull public android.app.Notification.TvExtender setContentIntent(@Nullable android.app.PendingIntent);
+    method @NonNull public android.app.Notification.TvExtender setDeleteIntent(@Nullable android.app.PendingIntent);
+    method @NonNull public android.app.Notification.TvExtender setSuppressShowOverApps(boolean);
+  }
+
   public static final class Notification.WearableExtender implements android.app.Notification.Extender {
     ctor public Notification.WearableExtender();
     ctor public Notification.WearableExtender(android.app.Notification);
@@ -7583,7 +7662,7 @@
     method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_EXTERNAL_STORAGE, "android.permission.READ_WALLPAPER_INTERNAL"}) public android.graphics.drawable.Drawable peekFastDrawable();
     method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_EXTERNAL_STORAGE, "android.permission.READ_WALLPAPER_INTERNAL"}) public android.graphics.drawable.Drawable peekFastDrawable(int);
     method public void removeOnColorsChangedListener(@NonNull android.app.WallpaperManager.OnColorsChangedListener);
-    method public void sendWallpaperCommand(android.os.IBinder, String, int, int, int, android.os.Bundle);
+    method @RequiresPermission(value="android.permission.ALWAYS_UPDATE_WALLPAPER", conditional=true) public void sendWallpaperCommand(android.os.IBinder, String, int, int, int, android.os.Bundle);
     method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void setBitmap(android.graphics.Bitmap) throws java.io.IOException;
     method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean) throws java.io.IOException;
     method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean, int) throws java.io.IOException;
@@ -9331,8 +9410,8 @@
     method @NonNull public java.util.List<android.appwidget.AppWidgetProviderInfo> getInstalledProvidersForProfile(@Nullable android.os.UserHandle);
     method public static android.appwidget.AppWidgetManager getInstance(android.content.Context);
     method public boolean isRequestPinAppWidgetSupported();
-    method public void notifyAppWidgetViewDataChanged(int[], int);
-    method public void notifyAppWidgetViewDataChanged(int, int);
+    method @Deprecated public void notifyAppWidgetViewDataChanged(int[], int);
+    method @Deprecated public void notifyAppWidgetViewDataChanged(int, int);
     method public void partiallyUpdateAppWidget(int[], android.widget.RemoteViews);
     method public void partiallyUpdateAppWidget(int, android.widget.RemoteViews);
     method public boolean requestPinAppWidget(@NonNull android.content.ComponentName, @Nullable android.os.Bundle, @Nullable android.app.PendingIntent);
@@ -9451,6 +9530,7 @@
     method @Nullable public CharSequence getDisplayName();
     method public int getId();
     method public int getSystemDataSyncFlags();
+    method @Nullable public String getTag();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.companion.AssociationInfo> CREATOR;
   }
@@ -9520,6 +9600,7 @@
     method @RequiresPermission(android.Manifest.permission.DELIVER_COMPANION_MESSAGES) public void attachSystemDataTransport(int, @NonNull java.io.InputStream, @NonNull java.io.OutputStream) throws android.companion.DeviceNotAssociatedException;
     method @Nullable public android.content.IntentSender buildAssociationCancellationIntent();
     method @Nullable public android.content.IntentSender buildPermissionTransferUserConsentIntent(int) throws android.companion.DeviceNotAssociatedException;
+    method public void clearAssociationTag(int);
     method @RequiresPermission(android.Manifest.permission.DELIVER_COMPANION_MESSAGES) public void detachSystemDataTransport(int) throws android.companion.DeviceNotAssociatedException;
     method public void disableSystemDataSyncForTypes(int, int);
     method @Deprecated public void disassociate(@NonNull String);
@@ -9529,6 +9610,7 @@
     method @NonNull public java.util.List<android.companion.AssociationInfo> getMyAssociations();
     method @Deprecated public boolean hasNotificationAccess(android.content.ComponentName);
     method public void requestNotificationAccess(android.content.ComponentName);
+    method public void setAssociationTag(int, @NonNull String);
     method @RequiresPermission(android.Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE) public void startObservingDevicePresence(@NonNull String) throws android.companion.DeviceNotAssociatedException;
     method public void startSystemDataTransfer(int, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Void,android.companion.CompanionException>) throws android.companion.DeviceNotAssociatedException;
     method @RequiresPermission(android.Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE) public void stopObservingDevicePresence(@NonNull String) throws android.companion.DeviceNotAssociatedException;
@@ -9556,9 +9638,16 @@
     method @RequiresPermission(android.Manifest.permission.DELIVER_COMPANION_MESSAGES) public final void detachSystemDataTransport(int) throws android.companion.DeviceNotAssociatedException;
     method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
     method @Deprecated @MainThread public void onDeviceAppeared(@NonNull String);
-    method @MainThread public void onDeviceAppeared(@NonNull android.companion.AssociationInfo);
+    method @Deprecated @MainThread public void onDeviceAppeared(@NonNull android.companion.AssociationInfo);
     method @Deprecated @MainThread public void onDeviceDisappeared(@NonNull String);
-    method @MainThread public void onDeviceDisappeared(@NonNull android.companion.AssociationInfo);
+    method @Deprecated @MainThread public void onDeviceDisappeared(@NonNull android.companion.AssociationInfo);
+    method @MainThread public void onDeviceEvent(@NonNull android.companion.AssociationInfo, int);
+    field public static final int DEVICE_EVENT_BLE_APPEARED = 0; // 0x0
+    field public static final int DEVICE_EVENT_BLE_DISAPPEARED = 1; // 0x1
+    field public static final int DEVICE_EVENT_BT_CONNECTED = 2; // 0x2
+    field public static final int DEVICE_EVENT_BT_DISCONNECTED = 3; // 0x3
+    field public static final int DEVICE_EVENT_SELF_MANAGED_APPEARED = 4; // 0x4
+    field public static final int DEVICE_EVENT_SELF_MANAGED_DISAPPEARED = 5; // 0x5
     field public static final String SERVICE_INTERFACE = "android.companion.CompanionDeviceService";
   }
 
@@ -9593,6 +9682,7 @@
     method public int describeContents();
     method public int getDeviceId();
     method @Nullable public String getName();
+    method @Nullable public String getPersistentDeviceId();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.companion.virtual.VirtualDevice> CREATOR;
   }
@@ -9669,6 +9759,7 @@
     method public int describeContents();
     method public void enforceCallingUid();
     method @Nullable public String getAttributionTag();
+    method public int getDeviceId();
     method @Nullable public android.content.AttributionSource getNext();
     method @Nullable public String getPackageName();
     method public int getPid();
@@ -9684,7 +9775,9 @@
     ctor public AttributionSource.Builder(@NonNull android.content.AttributionSource);
     method @NonNull public android.content.AttributionSource build();
     method @NonNull public android.content.AttributionSource.Builder setAttributionTag(@Nullable String);
-    method @NonNull public android.content.AttributionSource.Builder setNext(@Nullable android.content.AttributionSource);
+    method @NonNull public android.content.AttributionSource.Builder setDeviceId(int);
+    method @Deprecated @NonNull public android.content.AttributionSource.Builder setNext(@Nullable android.content.AttributionSource);
+    method @NonNull public android.content.AttributionSource.Builder setNextAttributionSource(@NonNull android.content.AttributionSource);
     method @NonNull public android.content.AttributionSource.Builder setPackageName(@Nullable String);
     method @NonNull public android.content.AttributionSource.Builder setPid(int);
   }
@@ -11609,6 +11702,7 @@
     method @NonNull public void setResourceValue(@NonNull String, @IntRange(from=android.util.TypedValue.TYPE_FIRST_INT, to=android.util.TypedValue.TYPE_LAST_INT) int, int, @Nullable String);
     method @NonNull public void setResourceValue(@NonNull String, int, @NonNull String, @Nullable String);
     method @NonNull public void setResourceValue(@NonNull String, @NonNull android.os.ParcelFileDescriptor, @Nullable String);
+    method @NonNull public void setResourceValue(@NonNull String, @NonNull android.content.res.AssetFileDescriptor, @Nullable String);
     method public void setTargetOverlayable(@Nullable String);
   }
 
@@ -12164,34 +12258,34 @@
     field public static final int REQUESTED_PERMISSION_GRANTED = 2; // 0x2
     field public static final int REQUESTED_PERMISSION_IMPLICIT = 4; // 0x4
     field public static final int REQUESTED_PERMISSION_NEVER_FOR_LOCATION = 65536; // 0x10000
-    field public android.content.pm.ActivityInfo[] activities;
-    field public android.content.pm.ApplicationInfo applicationInfo;
+    field @Nullable public android.content.pm.ActivityInfo[] activities;
+    field @Nullable public android.content.pm.ApplicationInfo applicationInfo;
     field @Nullable public android.content.pm.Attribution[] attributions;
     field public int baseRevisionCode;
-    field public android.content.pm.ConfigurationInfo[] configPreferences;
-    field public android.content.pm.FeatureGroupInfo[] featureGroups;
+    field @Nullable public android.content.pm.ConfigurationInfo[] configPreferences;
+    field @Nullable public android.content.pm.FeatureGroupInfo[] featureGroups;
     field public long firstInstallTime;
-    field public int[] gids;
+    field @Nullable public int[] gids;
     field public int installLocation;
-    field public android.content.pm.InstrumentationInfo[] instrumentation;
+    field @Nullable public android.content.pm.InstrumentationInfo[] instrumentation;
     field public boolean isApex;
     field public long lastUpdateTime;
-    field public String packageName;
-    field public android.content.pm.PermissionInfo[] permissions;
-    field public android.content.pm.ProviderInfo[] providers;
-    field public android.content.pm.ActivityInfo[] receivers;
-    field public android.content.pm.FeatureInfo[] reqFeatures;
-    field public String[] requestedPermissions;
-    field public int[] requestedPermissionsFlags;
-    field public android.content.pm.ServiceInfo[] services;
-    field public String sharedUserId;
+    field @NonNull public String packageName;
+    field @Nullable public android.content.pm.PermissionInfo[] permissions;
+    field @Nullable public android.content.pm.ProviderInfo[] providers;
+    field @Nullable public android.content.pm.ActivityInfo[] receivers;
+    field @Nullable public android.content.pm.FeatureInfo[] reqFeatures;
+    field @Nullable public String[] requestedPermissions;
+    field @Nullable public int[] requestedPermissionsFlags;
+    field @Nullable public android.content.pm.ServiceInfo[] services;
+    field @Nullable public String sharedUserId;
     field public int sharedUserLabel;
-    field @Deprecated public android.content.pm.Signature[] signatures;
-    field public android.content.pm.SigningInfo signingInfo;
-    field public String[] splitNames;
-    field public int[] splitRevisionCodes;
+    field @Deprecated @Nullable public android.content.pm.Signature[] signatures;
+    field @Nullable public android.content.pm.SigningInfo signingInfo;
+    field @NonNull public String[] splitNames;
+    field @NonNull public int[] splitRevisionCodes;
     field @Deprecated public int versionCode;
-    field public String versionName;
+    field @Nullable public String versionName;
   }
 
   public class PackageInstaller {
@@ -12987,7 +13081,7 @@
     method public final int getIconResource();
     method public boolean isCrossProfileIntentForwarderActivity();
     method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
-    method public CharSequence loadLabel(android.content.pm.PackageManager);
+    method @NonNull public CharSequence loadLabel(@NonNull android.content.pm.PackageManager);
     method public void writeToParcel(android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ResolveInfo> CREATOR;
     field public android.content.pm.ActivityInfo activityInfo;
@@ -14239,11 +14333,14 @@
   public final class SQLiteDatabase extends android.database.sqlite.SQLiteClosable {
     method public void beginTransaction();
     method public void beginTransactionNonExclusive();
-    method public void beginTransactionWithListener(android.database.sqlite.SQLiteTransactionListener);
-    method public void beginTransactionWithListenerNonExclusive(android.database.sqlite.SQLiteTransactionListener);
+    method public void beginTransactionReadOnly();
+    method public void beginTransactionWithListener(@Nullable android.database.sqlite.SQLiteTransactionListener);
+    method public void beginTransactionWithListenerNonExclusive(@Nullable android.database.sqlite.SQLiteTransactionListener);
+    method public void beginTransactionWithListenerReadOnly(@Nullable android.database.sqlite.SQLiteTransactionListener);
     method public android.database.sqlite.SQLiteStatement compileStatement(String) throws android.database.SQLException;
     method @NonNull public static android.database.sqlite.SQLiteDatabase create(@Nullable android.database.sqlite.SQLiteDatabase.CursorFactory);
     method @NonNull public static android.database.sqlite.SQLiteDatabase createInMemory(@NonNull android.database.sqlite.SQLiteDatabase.OpenParams);
+    method @NonNull public android.database.sqlite.SQLiteRawStatement createRawStatement(@NonNull String);
     method public int delete(String, String, String[]);
     method public static boolean deleteDatabase(@NonNull java.io.File);
     method public void disableWriteAheadLogging();
@@ -14254,10 +14351,13 @@
     method public void execSQL(String, Object[]) throws android.database.SQLException;
     method public static String findEditTable(String);
     method public java.util.List<android.util.Pair<java.lang.String,java.lang.String>> getAttachedDbs();
+    method public long getLastChangedRowCount();
+    method public long getLastInsertRowId();
     method public long getMaximumSize();
     method public long getPageSize();
     method public String getPath();
     method @Deprecated public java.util.Map<java.lang.String,java.lang.String> getSyncedTables();
+    method public long getTotalChangedRowCount();
     method public int getVersion();
     method public boolean inTransaction();
     method public long insert(String, String, android.content.ContentValues);
@@ -14479,6 +14579,39 @@
     method public int update(@NonNull android.database.sqlite.SQLiteDatabase, @NonNull android.content.ContentValues, @Nullable String, @Nullable String[]);
   }
 
+  public final class SQLiteRawStatement implements java.io.Closeable {
+    method public void bindBlob(int, @NonNull byte[]) throws android.database.sqlite.SQLiteException;
+    method public void bindBlob(int, @NonNull byte[], int, int) throws android.database.sqlite.SQLiteException;
+    method public void bindDouble(int, double) throws android.database.sqlite.SQLiteException;
+    method public void bindInt(int, int) throws android.database.sqlite.SQLiteException;
+    method public void bindLong(int, long) throws android.database.sqlite.SQLiteException;
+    method public void bindNull(int) throws android.database.sqlite.SQLiteException;
+    method public void bindText(int, @NonNull String) throws android.database.sqlite.SQLiteException;
+    method public void clearBindings();
+    method public void close();
+    method @Nullable public byte[] getColumnBlob(int) throws android.database.sqlite.SQLiteException;
+    method public double getColumnDouble(int) throws android.database.sqlite.SQLiteException;
+    method public int getColumnInt(int) throws android.database.sqlite.SQLiteException;
+    method public int getColumnLength(int) throws android.database.sqlite.SQLiteException;
+    method public long getColumnLong(int) throws android.database.sqlite.SQLiteException;
+    method @NonNull public String getColumnName(int) throws android.database.sqlite.SQLiteException;
+    method @NonNull public String getColumnText(int) throws android.database.sqlite.SQLiteException;
+    method public int getColumnType(int) throws android.database.sqlite.SQLiteException;
+    method public int getParameterCount();
+    method public int getParameterIndex(@NonNull String);
+    method @Nullable public String getParameterName(int);
+    method public int getResultColumnCount();
+    method public boolean isOpen();
+    method public int readColumnBlob(int, @NonNull byte[], int, int, int) throws android.database.sqlite.SQLiteException;
+    method public void reset();
+    method public boolean step() throws android.database.sqlite.SQLiteException;
+    field public static final int SQLITE_DATA_TYPE_BLOB = 4; // 0x4
+    field public static final int SQLITE_DATA_TYPE_FLOAT = 2; // 0x2
+    field public static final int SQLITE_DATA_TYPE_INTEGER = 1; // 0x1
+    field public static final int SQLITE_DATA_TYPE_NULL = 5; // 0x5
+    field public static final int SQLITE_DATA_TYPE_TEXT = 3; // 0x3
+  }
+
   public class SQLiteReadOnlyDatabaseException extends android.database.sqlite.SQLiteException {
     ctor public SQLiteReadOnlyDatabaseException();
     ctor public SQLiteReadOnlyDatabaseException(String);
@@ -17415,6 +17548,7 @@
     ctor public FontFamily.Builder(@NonNull android.graphics.fonts.Font);
     method @NonNull public android.graphics.fonts.FontFamily.Builder addFont(@NonNull android.graphics.fonts.Font);
     method @NonNull public android.graphics.fonts.FontFamily build();
+    method @Nullable public android.graphics.fonts.FontFamily buildVariableFamily();
   }
 
   public final class FontStyle {
@@ -17506,17 +17640,21 @@
   public final class LineBreakConfig {
     method public int getLineBreakStyle();
     method public int getLineBreakWordStyle();
+    method @NonNull public android.graphics.text.LineBreakConfig merge(@NonNull android.graphics.text.LineBreakConfig);
     field public static final int LINE_BREAK_STYLE_LOOSE = 1; // 0x1
     field public static final int LINE_BREAK_STYLE_NONE = 0; // 0x0
     field public static final int LINE_BREAK_STYLE_NORMAL = 2; // 0x2
     field public static final int LINE_BREAK_STYLE_STRICT = 3; // 0x3
+    field public static final int LINE_BREAK_STYLE_UNSPECIFIED = -1; // 0xffffffff
     field public static final int LINE_BREAK_WORD_STYLE_NONE = 0; // 0x0
     field public static final int LINE_BREAK_WORD_STYLE_PHRASE = 1; // 0x1
+    field public static final int LINE_BREAK_WORD_STYLE_UNSPECIFIED = -1; // 0xffffffff
   }
 
   public static final class LineBreakConfig.Builder {
     ctor public LineBreakConfig.Builder();
     method @NonNull public android.graphics.text.LineBreakConfig build();
+    method @NonNull public android.graphics.text.LineBreakConfig.Builder merge(@NonNull android.graphics.text.LineBreakConfig);
     method @NonNull public android.graphics.text.LineBreakConfig.Builder setLineBreakStyle(int);
     method @NonNull public android.graphics.text.LineBreakConfig.Builder setLineBreakWordStyle(int);
   }
@@ -17591,13 +17729,18 @@
     method public float getAdvance();
     method public float getAscent();
     method public float getDescent();
+    method public boolean getFakeBold(@IntRange(from=0) int);
+    method public boolean getFakeItalic(@IntRange(from=0) int);
     method @NonNull public android.graphics.fonts.Font getFont(@IntRange(from=0) int);
     method @IntRange(from=0) public int getGlyphId(@IntRange(from=0) int);
     method public float getGlyphX(@IntRange(from=0) int);
     method public float getGlyphY(@IntRange(from=0) int);
+    method public float getItalicOverride(@IntRange(from=0) int);
     method public float getOffsetX();
     method public float getOffsetY();
+    method public float getWeightOverride(@IntRange(from=0) int);
     method @IntRange(from=0) public int glyphCount();
+    field public static final float NO_OVERRIDE = 1.4E-45f;
   }
 
   public class TextRunShaper {
@@ -24315,7 +24458,14 @@
     field public static final int TYPE_HDMI = 9; // 0x9
     field public static final int TYPE_HEARING_AID = 23; // 0x17
     field public static final int TYPE_REMOTE_AUDIO_VIDEO_RECEIVER = 1003; // 0x3eb
+    field public static final int TYPE_REMOTE_CAR = 1008; // 0x3f0
+    field public static final int TYPE_REMOTE_COMPUTER = 1006; // 0x3ee
+    field public static final int TYPE_REMOTE_GAME_CONSOLE = 1007; // 0x3ef
+    field public static final int TYPE_REMOTE_SMARTPHONE = 1010; // 0x3f2
+    field public static final int TYPE_REMOTE_SMARTWATCH = 1009; // 0x3f1
     field public static final int TYPE_REMOTE_SPEAKER = 1002; // 0x3ea
+    field public static final int TYPE_REMOTE_TABLET = 1004; // 0x3ec
+    field public static final int TYPE_REMOTE_TABLET_DOCKED = 1005; // 0x3ed
     field public static final int TYPE_REMOTE_TV = 1001; // 0x3e9
     field public static final int TYPE_UNKNOWN = 0; // 0x0
     field public static final int TYPE_USB_ACCESSORY = 12; // 0xc
@@ -24806,7 +24956,6 @@
   }
 
   public class Ringtone {
-    method protected void finalize();
     method public android.media.AudioAttributes getAudioAttributes();
     method @Deprecated public int getStreamType();
     method public String getTitle(android.content.Context);
@@ -26311,6 +26460,17 @@
     method public abstract void onDisconnect(android.media.midi.MidiReceiver);
   }
 
+  public abstract class MidiUmpDeviceService extends android.app.Service {
+    ctor public MidiUmpDeviceService();
+    method @Nullable public final android.media.midi.MidiDeviceInfo getDeviceInfo();
+    method @NonNull public final java.util.List<android.media.midi.MidiReceiver> getOutputPortReceivers();
+    method @Nullable public android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public void onClose();
+    method public void onDeviceStatusChanged(@NonNull android.media.midi.MidiDeviceStatus);
+    method @NonNull public abstract java.util.List<android.media.midi.MidiReceiver> onGetInputPortReceivers();
+    field public static final String SERVICE_INTERFACE = "android.media.midi.MidiUmpDeviceService";
+  }
+
 }
 
 package android.media.projection {
@@ -37095,6 +37255,7 @@
     field public static final String ACTION_CAST_SETTINGS = "android.settings.CAST_SETTINGS";
     field public static final String ACTION_CHANNEL_NOTIFICATION_SETTINGS = "android.settings.CHANNEL_NOTIFICATION_SETTINGS";
     field public static final String ACTION_CONDITION_PROVIDER_SETTINGS = "android.settings.ACTION_CONDITION_PROVIDER_SETTINGS";
+    field public static final String ACTION_CREDENTIAL_PROVIDER = "android.settings.CREDENTIAL_PROVIDER";
     field public static final String ACTION_DATA_ROAMING_SETTINGS = "android.settings.DATA_ROAMING_SETTINGS";
     field public static final String ACTION_DATA_USAGE_SETTINGS = "android.settings.DATA_USAGE_SETTINGS";
     field public static final String ACTION_DATE_SETTINGS = "android.settings.DATE_SETTINGS";
@@ -42062,6 +42223,7 @@
     method public android.telecom.GatewayInfo getGatewayInfo();
     method public android.net.Uri getHandle();
     method public int getHandlePresentation();
+    method @NonNull public String getId();
     method public android.os.Bundle getIntentExtras();
     method public final int getState();
     method public android.telecom.StatusHints getStatusHints();
@@ -43415,6 +43577,7 @@
     field public static final String KEY_CARRIER_SERVICE_NUMBER_STRING_ARRAY = "carrier_service_number_array";
     field public static final String KEY_CARRIER_SETTINGS_ACTIVITY_COMPONENT_NAME_STRING = "carrier_settings_activity_component_name_string";
     field public static final String KEY_CARRIER_SETTINGS_ENABLE_BOOL = "carrier_settings_enable_bool";
+    field public static final String KEY_CARRIER_SUPPORTED_SATELLITE_SERVICES_PER_PROVIDER_BUNDLE = "carrier_supported_satellite_services_per_provider_bundle";
     field public static final String KEY_CARRIER_SUPPORTS_OPP_DATA_AUTO_PROVISIONING_BOOL = "carrier_supports_opp_data_auto_provisioning_bool";
     field public static final String KEY_CARRIER_SUPPORTS_SS_OVER_UT_BOOL = "carrier_supports_ss_over_ut_bool";
     field public static final String KEY_CARRIER_SUPPORTS_TETHERING_BOOL = "carrier_supports_tethering_bool";
@@ -44826,6 +44989,7 @@
     method public boolean isNetworkRegistered();
     method public boolean isNetworkRoaming();
     method public boolean isNetworkSearching();
+    method public boolean isNonTerrestrialNetwork();
     method @Deprecated public boolean isRegistered();
     method @Deprecated public boolean isRoaming();
     method @Deprecated public boolean isSearching();
@@ -44841,6 +45005,7 @@
     field public static final int NR_STATE_RESTRICTED = 1; // 0x1
     field public static final int SERVICE_TYPE_DATA = 2; // 0x2
     field public static final int SERVICE_TYPE_EMERGENCY = 5; // 0x5
+    field public static final int SERVICE_TYPE_MMS = 6; // 0x6
     field public static final int SERVICE_TYPE_SMS = 3; // 0x3
     field public static final int SERVICE_TYPE_UNKNOWN = 0; // 0x0
     field public static final int SERVICE_TYPE_VIDEO = 4; // 0x4
@@ -44920,6 +45085,7 @@
     method public static final boolean isStartsPostDial(char);
     method public static boolean isVoiceMailNumber(String);
     method public static boolean isWellFormedSmsAddress(String);
+    method public static boolean isWpsCallNumber(@Nullable String);
     method public static byte[] networkPortionToCalledPartyBCD(String);
     method public static byte[] networkPortionToCalledPartyBCDWithLength(String);
     method public static String normalizeNumber(String);
@@ -45054,6 +45220,7 @@
     method public boolean getRoaming();
     method public int getState();
     method public boolean isSearching();
+    method public boolean isUsingNonTerrestrialNetwork();
     method public void setIsManualSelection(boolean);
     method public void setOperatorName(String, String, String);
     method public void setRoaming(boolean);
@@ -45935,6 +46102,7 @@
     field public static final int PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED = 2; // 0x2
     field public static final int PURCHASE_PREMIUM_CAPABILITY_RESULT_TIMEOUT = 9; // 0x9
     field public static final int PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_CANCELED = 6; // 0x6
+    field public static final int PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_DISABLED = 16; // 0x10
     field public static final int SET_OPPORTUNISTIC_SUB_INACTIVE_SUBSCRIPTION = 2; // 0x2
     field public static final int SET_OPPORTUNISTIC_SUB_NO_OPPORTUNISTIC_SUB_AVAILABLE = 3; // 0x3
     field public static final int SET_OPPORTUNISTIC_SUB_REMOTE_SERVICE_EXCEPTION = 4; // 0x4
@@ -47147,6 +47315,7 @@
     method public int getBottomPadding();
     method public int getEllipsisCount(int);
     method public int getEllipsisStart(int);
+    method @NonNull public android.graphics.text.LineBreakConfig getLineBreakConfig();
     method public boolean getLineContainsTab(int);
     method public int getLineCount();
     method public int getLineDescent(int);
@@ -47168,6 +47337,7 @@
     method @NonNull public android.text.DynamicLayout.Builder setHyphenationFrequency(int);
     method @NonNull public android.text.DynamicLayout.Builder setIncludePad(boolean);
     method @NonNull public android.text.DynamicLayout.Builder setJustificationMode(int);
+    method @NonNull public android.text.DynamicLayout.Builder setLineBreakConfig(@NonNull android.graphics.text.LineBreakConfig);
     method @NonNull public android.text.DynamicLayout.Builder setLineSpacing(float, @FloatRange(from=0.0) float);
     method @NonNull public android.text.DynamicLayout.Builder setTextDirection(@NonNull android.text.TextDirectionHeuristic);
     method @NonNull public android.text.DynamicLayout.Builder setUseLineSpacingFromFallbacks(boolean);
@@ -48365,6 +48535,11 @@
     method public void writeToParcel(@NonNull android.os.Parcel, int);
   }
 
+  public class LineBreakConfigSpan {
+    ctor public LineBreakConfigSpan(@NonNull android.graphics.text.LineBreakConfig);
+    method @NonNull public android.graphics.text.LineBreakConfig getLineBreakConfig();
+  }
+
   public interface LineHeightSpan extends android.text.style.ParagraphStyle android.text.style.WrapTogetherSpan {
     method public void chooseHeight(CharSequence, int, int, int, int, android.graphics.Paint.FontMetricsInt);
   }
@@ -49033,7 +49208,7 @@
     method public abstract void captureEndValues(android.transition.TransitionValues);
     method public abstract void captureStartValues(android.transition.TransitionValues);
     method public android.transition.Transition clone();
-    method public android.animation.Animator createAnimator(android.view.ViewGroup, android.transition.TransitionValues, android.transition.TransitionValues);
+    method @Nullable public android.animation.Animator createAnimator(@NonNull android.view.ViewGroup, @Nullable android.transition.TransitionValues, @Nullable android.transition.TransitionValues);
     method public android.transition.Transition excludeChildren(int, boolean);
     method public android.transition.Transition excludeChildren(android.view.View, boolean);
     method public android.transition.Transition excludeChildren(Class, boolean);
@@ -51596,7 +51771,7 @@
     field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
     field public static final int TYPE_COPY = 1011; // 0x3f3
     field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
-    field public static final int TYPE_DEFAULT = 1000; // 0x3e8
+    field @Deprecated public static final int TYPE_DEFAULT = 1000; // 0x3e8
     field public static final int TYPE_GRAB = 1020; // 0x3fc
     field public static final int TYPE_GRABBING = 1021; // 0x3fd
     field public static final int TYPE_HAND = 1002; // 0x3ea
@@ -54342,6 +54517,7 @@
     method public boolean isEnabled();
     method public boolean isFocusable();
     method public boolean isFocused();
+    method public boolean isGranularScrollingSupported();
     method public boolean isHeading();
     method public boolean isImportantForAccessibility();
     method public boolean isLongClickable();
@@ -54391,6 +54567,7 @@
     method public void setError(CharSequence);
     method public void setFocusable(boolean);
     method public void setFocused(boolean);
+    method public void setGranularScrollingSupported(boolean);
     method public void setHeading(boolean);
     method public void setHintText(CharSequence);
     method public void setImportantForAccessibility(boolean);
@@ -54445,6 +54622,7 @@
     field public static final String ACTION_ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT = "android.view.accessibility.action.ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT";
     field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
     field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
+    field public static final String ACTION_ARGUMENT_SCROLL_AMOUNT_FLOAT = "android.view.accessibility.action.ARGUMENT_SCROLL_AMOUNT_FLOAT";
     field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
     field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
     field public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
@@ -54547,7 +54725,10 @@
   public static final class AccessibilityNodeInfo.CollectionInfo {
     ctor public AccessibilityNodeInfo.CollectionInfo(int, int, boolean);
     ctor public AccessibilityNodeInfo.CollectionInfo(int, int, boolean, int);
+    ctor public AccessibilityNodeInfo.CollectionInfo(int, int, boolean, int, int, int);
     method public int getColumnCount();
+    method public int getImportantForAccessibilityItemCount();
+    method public int getItemCount();
     method public int getRowCount();
     method public int getSelectionMode();
     method public boolean isHierarchical();
@@ -54556,6 +54737,18 @@
     field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
     field public static final int SELECTION_MODE_NONE = 0; // 0x0
     field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
+    field public static final int UNDEFINED = -1; // 0xffffffff
+  }
+
+  public static final class AccessibilityNodeInfo.CollectionInfo.Builder {
+    ctor public AccessibilityNodeInfo.CollectionInfo.Builder();
+    method @NonNull public android.view.accessibility.AccessibilityNodeInfo.CollectionInfo build();
+    method @NonNull public android.view.accessibility.AccessibilityNodeInfo.CollectionInfo.Builder setColumnCount(int);
+    method @NonNull public android.view.accessibility.AccessibilityNodeInfo.CollectionInfo.Builder setHierarchical(boolean);
+    method @NonNull public android.view.accessibility.AccessibilityNodeInfo.CollectionInfo.Builder setImportantForAccessibilityItemCount(int);
+    method @NonNull public android.view.accessibility.AccessibilityNodeInfo.CollectionInfo.Builder setItemCount(int);
+    method @NonNull public android.view.accessibility.AccessibilityNodeInfo.CollectionInfo.Builder setRowCount(int);
+    method @NonNull public android.view.accessibility.AccessibilityNodeInfo.CollectionInfo.Builder setSelectionMode(int);
   }
 
   public static final class AccessibilityNodeInfo.CollectionItemInfo {
@@ -54876,6 +55069,8 @@
   public class AnimationUtils {
     ctor public AnimationUtils();
     method public static long currentAnimationTimeMillis();
+    method public static long getExpectedPresentationTimeMillis();
+    method public static long getExpectedPresentationTimeNanos();
     method public static android.view.animation.Animation loadAnimation(android.content.Context, @AnimRes int) throws android.content.res.Resources.NotFoundException;
     method public static android.view.animation.Interpolator loadInterpolator(android.content.Context, @AnimRes @InterpolatorRes int) throws android.content.res.Resources.NotFoundException;
     method public static android.view.animation.LayoutAnimationController loadLayoutAnimation(android.content.Context, @AnimRes int) throws android.content.res.Resources.NotFoundException;
@@ -55064,6 +55259,7 @@
 
   public final class AutofillManager {
     method public void cancel();
+    method public void clearAutofillRequestCallback();
     method public void commit();
     method public void disableAutofillServices();
     method @Nullable public android.content.ComponentName getAutofillServiceComponentName();
@@ -55090,6 +55286,7 @@
     method public void registerCallback(@Nullable android.view.autofill.AutofillManager.AutofillCallback);
     method public void requestAutofill(@NonNull android.view.View);
     method public void requestAutofill(@NonNull android.view.View, int, @NonNull android.graphics.Rect);
+    method @RequiresPermission(android.Manifest.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS) public void setAutofillRequestCallback(@NonNull java.util.concurrent.Executor, @NonNull android.view.autofill.AutofillRequestCallback);
     method public void setUserData(@Nullable android.service.autofill.UserData);
     method public boolean showAutofillDialog(@NonNull android.view.View);
     method public boolean showAutofillDialog(@NonNull android.view.View, int);
@@ -55110,6 +55307,10 @@
     field public static final int EVENT_INPUT_UNAVAILABLE = 3; // 0x3
   }
 
+  public interface AutofillRequestCallback {
+    method public void onFillRequest(@Nullable android.view.inputmethod.InlineSuggestionsRequest, @NonNull android.os.CancellationSignal, @NonNull android.service.autofill.FillCallback);
+  }
+
   public final class AutofillValue implements android.os.Parcelable {
     method public int describeContents();
     method public static android.view.autofill.AutofillValue forDate(long);
@@ -55559,10 +55760,12 @@
     ctor public InlineSuggestionsRequest.Builder(@NonNull java.util.List<android.widget.inline.InlinePresentationSpec>);
     method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder addInlinePresentationSpecs(@NonNull android.widget.inline.InlinePresentationSpec);
     method @NonNull public android.view.inputmethod.InlineSuggestionsRequest build();
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setClientSupported(boolean);
     method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setExtras(@NonNull android.os.Bundle);
     method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setInlinePresentationSpecs(@NonNull java.util.List<android.widget.inline.InlinePresentationSpec>);
     method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setInlineTooltipPresentationSpec(@NonNull android.widget.inline.InlinePresentationSpec);
     method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setMaxSuggestionCount(int);
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setServiceSupported(boolean);
     method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setSupportedLocales(@NonNull android.os.LocaleList);
   }
 
@@ -55701,7 +55904,7 @@
     field public static final String SERVICE_INTERFACE = "android.view.InputMethod";
     field public static final String SERVICE_META_DATA = "android.view.im";
     field public static final int SHOW_EXPLICIT = 1; // 0x1
-    field public static final int SHOW_FORCED = 2; // 0x2
+    field @Deprecated public static final int SHOW_FORCED = 2; // 0x2
   }
 
   public static interface InputMethod.SessionCallback {
@@ -59599,7 +59802,7 @@
     method public void setRadioGroupChecked(@IdRes int, @IdRes int);
     method public void setRelativeScrollPosition(@IdRes int, int);
     method @Deprecated public void setRemoteAdapter(int, @IdRes int, android.content.Intent);
-    method public void setRemoteAdapter(@IdRes int, android.content.Intent);
+    method @Deprecated public void setRemoteAdapter(@IdRes int, android.content.Intent);
     method public void setRemoteAdapter(@IdRes int, @NonNull android.widget.RemoteViews.RemoteCollectionItems);
     method public void setScrollPosition(@IdRes int, int);
     method public void setShort(@IdRes int, String, short);
diff --git a/core/api/module-lib-current.txt b/core/api/module-lib-current.txt
index 7cfa1e3..b1feb41 100644
--- a/core/api/module-lib-current.txt
+++ b/core/api/module-lib-current.txt
@@ -6,6 +6,7 @@
     field public static final String CONTROL_AUTOMOTIVE_GNSS = "android.permission.CONTROL_AUTOMOTIVE_GNSS";
     field public static final String GET_INTENT_SENDER_INTENT = "android.permission.GET_INTENT_SENDER_INTENT";
     field public static final String MAKE_UID_VISIBLE = "android.permission.MAKE_UID_VISIBLE";
+    field public static final String USE_COMPANION_TRANSPORTS = "android.permission.USE_COMPANION_TRANSPORTS";
   }
 
 }
@@ -81,6 +82,29 @@
 
 }
 
+package android.companion {
+
+  public final class CompanionDeviceManager {
+    method @RequiresPermission(android.Manifest.permission.USE_COMPANION_TRANSPORTS) public void addOnMessageReceivedListener(@NonNull java.util.concurrent.Executor, int, @NonNull android.companion.CompanionDeviceManager.OnMessageReceivedListener);
+    method @RequiresPermission(android.Manifest.permission.USE_COMPANION_TRANSPORTS) public void addOnTransportsChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.companion.CompanionDeviceManager.OnTransportsChangedListener);
+    method @RequiresPermission(android.Manifest.permission.USE_COMPANION_TRANSPORTS) public void removeOnMessageReceivedListener(int, @NonNull android.companion.CompanionDeviceManager.OnMessageReceivedListener);
+    method @RequiresPermission(android.Manifest.permission.USE_COMPANION_TRANSPORTS) public void removeOnTransportsChangedListener(@NonNull android.companion.CompanionDeviceManager.OnTransportsChangedListener);
+    method @RequiresPermission(android.Manifest.permission.USE_COMPANION_TRANSPORTS) public void sendMessage(int, @NonNull byte[], @NonNull int[]);
+    field public static final int MESSAGE_REQUEST_CONTEXT_SYNC = 1667729539; // 0x63678883
+    field public static final int MESSAGE_REQUEST_PERMISSION_RESTORE = 1669491075; // 0x63826983
+    field public static final int MESSAGE_REQUEST_REMOTE_AUTHENTICATION = 1669494629; // 0x63827765
+  }
+
+  public static interface CompanionDeviceManager.OnMessageReceivedListener {
+    method public void onMessageReceived(int, @NonNull byte[]);
+  }
+
+  public static interface CompanionDeviceManager.OnTransportsChangedListener {
+    method public void onTransportsChanged(@NonNull java.util.List<android.companion.AssociationInfo>);
+  }
+
+}
+
 package android.content {
 
   public abstract class ContentProvider implements android.content.ComponentCallbacks2 {
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 141eb96..eca2015 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -36,6 +36,7 @@
     field public static final String ALLOW_ANY_CODEC_FOR_PLAYBACK = "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK";
     field public static final String ALLOW_PLACE_IN_MULTI_PANE_SETTINGS = "android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS";
     field public static final String ALLOW_SLIPPERY_TOUCHES = "android.permission.ALLOW_SLIPPERY_TOUCHES";
+    field public static final String ALWAYS_UPDATE_WALLPAPER = "android.permission.ALWAYS_UPDATE_WALLPAPER";
     field public static final String AMBIENT_WALLPAPER = "android.permission.AMBIENT_WALLPAPER";
     field public static final String APPROVE_INCIDENT_REPORTS = "android.permission.APPROVE_INCIDENT_REPORTS";
     field public static final String ASSOCIATE_COMPANION_DEVICES = "android.permission.ASSOCIATE_COMPANION_DEVICES";
@@ -157,6 +158,7 @@
     field public static final String KILL_ALL_BACKGROUND_PROCESSES = "android.permission.KILL_ALL_BACKGROUND_PROCESSES";
     field public static final String KILL_UID = "android.permission.KILL_UID";
     field public static final String LAUNCH_DEVICE_MANAGER_SETUP = "android.permission.LAUNCH_DEVICE_MANAGER_SETUP";
+    field public static final String LAUNCH_PERMISSION_SETTINGS = "android.permission.LAUNCH_PERMISSION_SETTINGS";
     field public static final String LOCAL_MAC_ADDRESS = "android.permission.LOCAL_MAC_ADDRESS";
     field public static final String LOCATION_BYPASS = "android.permission.LOCATION_BYPASS";
     field public static final String LOCK_DEVICE = "android.permission.LOCK_DEVICE";
@@ -271,6 +273,7 @@
     field public static final String READ_DEVICE_CONFIG = "android.permission.READ_DEVICE_CONFIG";
     field public static final String READ_DREAM_STATE = "android.permission.READ_DREAM_STATE";
     field public static final String READ_GLOBAL_APP_SEARCH_DATA = "android.permission.READ_GLOBAL_APP_SEARCH_DATA";
+    field public static final String READ_INSTALLED_SESSION_PATHS = "android.permission.READ_INSTALLED_SESSION_PATHS";
     field public static final String READ_INSTALL_SESSIONS = "android.permission.READ_INSTALL_SESSIONS";
     field public static final String READ_NETWORK_USAGE_HISTORY = "android.permission.READ_NETWORK_USAGE_HISTORY";
     field public static final String READ_OEM_UNLOCK_STATE = "android.permission.READ_OEM_UNLOCK_STATE";
@@ -453,6 +456,7 @@
     field public static final int config_defaultCallScreening = 17039398; // 0x1040026
     field public static final int config_defaultDialer = 17039395; // 0x1040023
     field public static final int config_defaultNotes = 17039429; // 0x1040045
+    field public static final int config_defaultRetailDemo;
     field public static final int config_defaultSms = 17039396; // 0x1040024
     field public static final int config_devicePolicyManagement = 17039421; // 0x104003d
     field public static final int config_feedbackIntentExtraKey = 17039391; // 0x104001f
@@ -532,6 +536,7 @@
     method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void addOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener, int);
     method @RequiresPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) public void forceStopPackage(String);
     method @RequiresPermission(anyOf={"android.permission.INTERACT_ACROSS_USERS", "android.permission.INTERACT_ACROSS_USERS_FULL"}) public static int getCurrentUser();
+    method @NonNull @RequiresPermission(android.Manifest.permission.DUMP) public java.util.List<android.app.ApplicationStartInfo> getExternalHistoricalProcessStartReasons(@NonNull String, @IntRange(from=0) int);
     method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getPackageImportance(String);
     method @NonNull public java.util.Collection<java.util.Locale> getSupportedLocales();
     method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getUidImportance(int);
@@ -643,6 +648,7 @@
     field public static final String OPSTR_RECEIVE_AMBIENT_TRIGGER_AUDIO = "android:receive_ambient_trigger_audio";
     field public static final String OPSTR_RECEIVE_EMERGENCY_BROADCAST = "android:receive_emergency_broadcast";
     field public static final String OPSTR_RECEIVE_EXPLICIT_USER_INTERACTION_AUDIO = "android:receive_explicit_user_interaction_audio";
+    field public static final String OPSTR_RECEIVE_SANDBOX_TRIGGER_AUDIO = "android:receive_sandbox_trigger_audio";
     field public static final String OPSTR_REQUEST_DELETE_PACKAGES = "android:request_delete_packages";
     field public static final String OPSTR_REQUEST_INSTALL_PACKAGES = "android:request_install_packages";
     field public static final String OPSTR_RUN_ANY_IN_BACKGROUND = "android:run_any_in_background";
@@ -969,19 +975,8 @@
   }
 
   public static final class Notification.TvExtender implements android.app.Notification.Extender {
-    ctor public Notification.TvExtender();
-    ctor public Notification.TvExtender(android.app.Notification);
-    method public android.app.Notification.Builder extend(android.app.Notification.Builder);
-    method public String getChannelId();
-    method public android.app.PendingIntent getContentIntent();
-    method public android.app.PendingIntent getDeleteIntent();
     method public boolean getSuppressShowOverApps();
-    method public boolean isAvailableOnTv();
     method public android.app.Notification.TvExtender setChannel(String);
-    method public android.app.Notification.TvExtender setChannelId(String);
-    method public android.app.Notification.TvExtender setContentIntent(android.app.PendingIntent);
-    method public android.app.Notification.TvExtender setDeleteIntent(android.app.PendingIntent);
-    method public android.app.Notification.TvExtender setSuppressShowOverApps(boolean);
   }
 
   public final class NotificationChannel implements android.os.Parcelable {
@@ -3209,12 +3204,13 @@
     method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.input.VirtualTouchscreen createVirtualTouchscreen(@NonNull android.hardware.input.VirtualTouchscreenConfig);
     method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public android.hardware.input.VirtualTouchscreen createVirtualTouchscreen(@NonNull android.hardware.display.VirtualDisplay, @NonNull String, int, int);
     method public int getDeviceId();
+    method @Nullable public String getPersistentDeviceId();
     method @NonNull public java.util.List<android.companion.virtual.sensor.VirtualSensor> getVirtualSensorList();
     method public void launchPendingIntent(int, @NonNull android.app.PendingIntent, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.IntConsumer);
     method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void registerIntentInterceptor(@NonNull android.content.IntentFilter, @NonNull java.util.concurrent.Executor, @NonNull android.companion.virtual.VirtualDeviceManager.IntentInterceptorCallback);
     method public void removeActivityListener(@NonNull android.companion.virtual.VirtualDeviceManager.ActivityListener);
     method public void removeSoundEffectListener(@NonNull android.companion.virtual.VirtualDeviceManager.SoundEffectListener);
-    method @NonNull @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setShowPointerIcon(boolean);
+    method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void setShowPointerIcon(boolean);
     method @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE) public void unregisterIntentInterceptor(@NonNull android.companion.virtual.VirtualDeviceManager.IntentInterceptorCallback);
   }
 
@@ -3524,7 +3520,7 @@
     field @Deprecated public static final String ACTION_INTENT_FILTER_NEEDS_VERIFICATION = "android.intent.action.INTENT_FILTER_NEEDS_VERIFICATION";
     field public static final String ACTION_LOAD_DATA = "android.intent.action.LOAD_DATA";
     field @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public static final String ACTION_MANAGE_APP_PERMISSION = "android.intent.action.MANAGE_APP_PERMISSION";
-    field public static final String ACTION_MANAGE_APP_PERMISSIONS = "android.intent.action.MANAGE_APP_PERMISSIONS";
+    field @Deprecated public static final String ACTION_MANAGE_APP_PERMISSIONS = "android.intent.action.MANAGE_APP_PERMISSIONS";
     field @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public static final String ACTION_MANAGE_DEFAULT_APP = "android.intent.action.MANAGE_DEFAULT_APP";
     field public static final String ACTION_MANAGE_PERMISSIONS = "android.intent.action.MANAGE_PERMISSIONS";
     field public static final String ACTION_MANAGE_PERMISSION_APPS = "android.intent.action.MANAGE_PERMISSION_APPS";
@@ -3796,6 +3792,7 @@
 
   public class PackageInstaller {
     method @NonNull public android.content.pm.PackageInstaller.InstallInfo readInstallInfo(@NonNull java.io.File, int) throws android.content.pm.PackageInstaller.PackageParsingException;
+    method @NonNull public android.content.pm.PackageInstaller.InstallInfo readInstallInfo(@NonNull android.os.ParcelFileDescriptor, @Nullable String, int) throws android.content.pm.PackageInstaller.PackageParsingException;
     method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setPermissionsResult(int, boolean);
     field public static final String ACTION_CONFIRM_INSTALL = "android.content.pm.action.CONFIRM_INSTALL";
     field public static final String ACTION_CONFIRM_PRE_APPROVAL = "android.content.pm.action.CONFIRM_PRE_APPROVAL";
@@ -3816,6 +3813,7 @@
 
   public static class PackageInstaller.InstallInfo {
     method public long calculateInstalledSize(@NonNull android.content.pm.PackageInstaller.SessionParams) throws java.io.IOException;
+    method public long calculateInstalledSize(@NonNull android.content.pm.PackageInstaller.SessionParams, @NonNull android.os.ParcelFileDescriptor) throws java.io.IOException;
     method public int getInstallLocation();
     method @NonNull public String getPackageName();
   }
@@ -3842,6 +3840,7 @@
     method public boolean getInstallAsVirtualPreload();
     method public int getPendingUserActionReason();
     method public boolean getRequestDowngrade();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_INSTALLED_SESSION_PATHS) public String getResolvedBaseApkPath();
     method public int getRollbackDataPolicy();
     method @NonNull public java.util.Set<java.lang.String> getWhitelistedRestrictedPermissions();
   }
@@ -3912,7 +3911,7 @@
     method @NonNull @RequiresPermission(android.Manifest.permission.SUSPEND_APPS) public String[] setDistractingPackageRestrictions(@NonNull String[], int);
     method @RequiresPermission(android.Manifest.permission.SET_HARMFUL_APP_WARNINGS) public void setHarmfulAppWarning(@NonNull String, @Nullable CharSequence);
     method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.SUSPEND_APPS) public String[] setPackagesSuspended(@Nullable String[], boolean, @Nullable android.os.PersistableBundle, @Nullable android.os.PersistableBundle, @Nullable String);
-    method @Nullable @RequiresPermission(android.Manifest.permission.SUSPEND_APPS) public String[] setPackagesSuspended(@Nullable String[], boolean, @Nullable android.os.PersistableBundle, @Nullable android.os.PersistableBundle, @Nullable android.content.pm.SuspendDialogInfo);
+    method @Nullable @RequiresPermission(value=android.Manifest.permission.SUSPEND_APPS, conditional=true) public String[] setPackagesSuspended(@Nullable String[], boolean, @Nullable android.os.PersistableBundle, @Nullable android.os.PersistableBundle, @Nullable android.content.pm.SuspendDialogInfo);
     method @RequiresPermission(value=android.Manifest.permission.CHANGE_COMPONENT_ENABLED_STATE, conditional=true) public void setSyntheticAppDetailsActivityEnabled(@NonNull String, boolean);
     method public void setSystemAppState(@NonNull String, int);
     method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public abstract void setUpdateAvailable(@NonNull String, boolean);
@@ -3929,6 +3928,7 @@
     field public static final int DELETE_FAILED_OWNER_BLOCKED = -4; // 0xfffffffc
     field public static final int DELETE_KEEP_DATA = 1; // 0x1
     field public static final int DELETE_SUCCEEDED = 1; // 0x1
+    field public static final String EXTRA_REQUEST_PERMISSIONS_DEVICE_ID = "android.content.pm.extra.REQUEST_PERMISSIONS_DEVICE_ID";
     field public static final String EXTRA_REQUEST_PERMISSIONS_LEGACY_ACCESS_PERMISSION_NAMES = "android.content.pm.extra.REQUEST_PERMISSIONS_LEGACY_ACCESS_PERMISSION_NAMES";
     field public static final String EXTRA_REQUEST_PERMISSIONS_NAMES = "android.content.pm.extra.REQUEST_PERMISSIONS_NAMES";
     field public static final String EXTRA_REQUEST_PERMISSIONS_RESULTS = "android.content.pm.extra.REQUEST_PERMISSIONS_RESULTS";
@@ -10122,6 +10122,7 @@
     method public int getDeviceType();
     method @NonNull public android.os.Bundle getExtras();
     method @NonNull public String getModelName();
+    method public boolean isBatteryCharging();
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.sharedconnectivity.app.NetworkProviderInfo> CREATOR;
     field public static final int DEVICE_TYPE_AUTO = 5; // 0x5
@@ -10135,6 +10136,7 @@
   public static final class NetworkProviderInfo.Builder {
     ctor public NetworkProviderInfo.Builder(@NonNull String, @NonNull String);
     method @NonNull public android.net.wifi.sharedconnectivity.app.NetworkProviderInfo build();
+    method @NonNull public android.net.wifi.sharedconnectivity.app.NetworkProviderInfo.Builder setBatteryCharging(boolean);
     method @NonNull public android.net.wifi.sharedconnectivity.app.NetworkProviderInfo.Builder setBatteryPercentage(@IntRange(from=0, to=100) int);
     method @NonNull public android.net.wifi.sharedconnectivity.app.NetworkProviderInfo.Builder setConnectionStrength(@IntRange(from=0, to=4) int);
     method @NonNull public android.net.wifi.sharedconnectivity.app.NetworkProviderInfo.Builder setDeviceName(@NonNull String);
@@ -10992,7 +10994,7 @@
     method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS, android.Manifest.permission.QUERY_USERS}) public boolean isPrimaryUser();
     method public static boolean isRemoveResultSuccessful(int);
     method public boolean isRestrictedProfile();
-    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}, conditional=true) public boolean isRestrictedProfile(@NonNull android.os.UserHandle);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS, android.Manifest.permission.QUERY_USERS}, conditional=true) public boolean isRestrictedProfile(@NonNull android.os.UserHandle);
     method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.QUERY_USERS}) public boolean isSameProfileGroup(@NonNull android.os.UserHandle, @NonNull android.os.UserHandle);
     method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS, android.Manifest.permission.QUERY_USERS, android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED}) public boolean isUserNameSet();
     method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS, android.Manifest.permission.QUERY_USERS}) public boolean isUserOfType(@NonNull String);
@@ -11234,7 +11236,7 @@
 
   public abstract class PermissionControllerService extends android.app.Service {
     ctor public PermissionControllerService();
-    method @NonNull @RequiresPermission("android.permission.MANAGE_COMPANION_DEVICES") public String getPrivilegesDescriptionStringForProfile(@NonNull String);
+    method @Deprecated @NonNull @RequiresPermission("android.permission.MANAGE_COMPANION_DEVICES") public String getPrivilegesDescriptionStringForProfile(@NonNull String);
     method @BinderThread public void onApplyStagedRuntimePermissionBackup(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.function.Consumer<java.lang.Boolean>);
     method @NonNull public final android.os.IBinder onBind(android.content.Intent);
     method @BinderThread public abstract void onCountPermissionApps(@NonNull java.util.List<java.lang.String>, int, @NonNull java.util.function.IntConsumer);
@@ -11594,6 +11596,7 @@
     method @Deprecated public static boolean checkAndNoteWriteSettingsOperation(@NonNull android.content.Context, int, @NonNull String, boolean);
     method public static boolean checkAndNoteWriteSettingsOperation(@NonNull android.content.Context, int, @NonNull String, @Nullable String, boolean);
     field public static final String ACTION_ACCESSIBILITY_DETAILS_SETTINGS = "android.settings.ACCESSIBILITY_DETAILS_SETTINGS";
+    field @RequiresPermission(android.Manifest.permission.LAUNCH_PERMISSION_SETTINGS) public static final String ACTION_APP_PERMISSIONS_SETTINGS = "android.settings.APP_PERMISSIONS_SETTINGS";
     field public static final String ACTION_BEDTIME_SETTINGS = "android.settings.BEDTIME_SETTINGS";
     field public static final String ACTION_BUGREPORT_HANDLER_SETTINGS = "android.settings.BUGREPORT_HANDLER_SETTINGS";
     field public static final String ACTION_ENTERPRISE_PRIVACY_SETTINGS = "android.settings.ENTERPRISE_PRIVACY_SETTINGS";
@@ -11677,6 +11680,8 @@
 
   public static final class Settings.System extends android.provider.Settings.NameValueTable {
     method @RequiresPermission(android.Manifest.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE) public static boolean putString(@NonNull android.content.ContentResolver, @NonNull String, @Nullable String, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE) public static boolean putString(@NonNull android.content.ContentResolver, @NonNull String, @Nullable String, boolean, boolean);
+    method public static void resetToDefaults(@NonNull android.content.ContentResolver, @Nullable String);
   }
 
   public static final class SimPhonebookContract.SimRecords {
@@ -13728,6 +13733,7 @@
     method public void requestStreamingState(int);
     method public void writeToParcel(@NonNull android.os.Parcel, int);
     field @NonNull public static final android.os.Parcelable.Creator<android.telecom.StreamingCall> CREATOR;
+    field public static final String EXTRA_CALL_ID = "android.telecom.extra.CALL_ID";
     field public static final int STATE_DISCONNECTED = 3; // 0x3
     field public static final int STATE_HOLDING = 2; // 0x2
     field public static final int STATE_STREAMING = 1; // 0x1
@@ -14208,6 +14214,7 @@
     method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setCellIdentity(@Nullable android.telephony.CellIdentity);
     method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setDomain(int);
     method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setEmergencyOnly(boolean);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setIsNonTerrestrialNetwork(boolean);
     method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRegisteredPlmn(@Nullable String);
     method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRegistrationState(int);
     method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRejectCause(int);
@@ -15222,7 +15229,7 @@
     method @NonNull public android.telephony.data.DataCallResponse.Builder setGatewayAddresses(@NonNull java.util.List<java.net.InetAddress>);
     method @NonNull public android.telephony.data.DataCallResponse.Builder setHandoverFailureMode(int);
     method @NonNull public android.telephony.data.DataCallResponse.Builder setId(int);
-    method @NonNull public android.telephony.data.DataCallResponse.Builder setInterfaceName(@NonNull String);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setInterfaceName(@Nullable String);
     method @NonNull public android.telephony.data.DataCallResponse.Builder setLinkStatus(int);
     method @Deprecated @NonNull public android.telephony.data.DataCallResponse.Builder setMtu(int);
     method @NonNull public android.telephony.data.DataCallResponse.Builder setMtuV4(int);
@@ -17175,6 +17182,154 @@
 
 }
 
+package android.telephony.satellite {
+
+  public final class AntennaDirection implements android.os.Parcelable {
+    method public int describeContents();
+    method public float getX();
+    method public float getY();
+    method public float getZ();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.satellite.AntennaDirection> CREATOR;
+  }
+
+  public final class AntennaPosition implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.telephony.satellite.AntennaDirection getAntennaDirection();
+    method public int getSuggestedHoldPosition();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.satellite.AntennaPosition> CREATOR;
+  }
+
+  public final class PointingInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public float getSatelliteAzimuthDegrees();
+    method public float getSatelliteElevationDegrees();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.satellite.PointingInfo> CREATOR;
+  }
+
+  public final class SatelliteCapabilities implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Map<java.lang.Integer,android.telephony.satellite.AntennaPosition> getAntennaPositionMap();
+    method public int getMaxBytesPerOutgoingDatagram();
+    method @NonNull public java.util.Set<java.lang.Integer> getSupportedRadioTechnologies();
+    method public boolean isPointingRequired();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.satellite.SatelliteCapabilities> CREATOR;
+  }
+
+  public final class SatelliteDatagram implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public byte[] getSatelliteDatagram();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.satellite.SatelliteDatagram> CREATOR;
+  }
+
+  public interface SatelliteDatagramCallback {
+    method public void onSatelliteDatagramReceived(long, @NonNull android.telephony.satellite.SatelliteDatagram, int, @NonNull java.util.function.Consumer<java.lang.Void>);
+  }
+
+  public class SatelliteManager {
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void deprovisionSatelliteService(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void onDeviceAlignedWithSatellite(boolean);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void pollPendingSatelliteDatagrams(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void provisionSatelliteService(@NonNull String, @NonNull byte[], @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public int registerForSatelliteDatagram(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.satellite.SatelliteDatagramCallback);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public int registerForSatelliteModemStateChanged(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.satellite.SatelliteStateCallback);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public int registerForSatelliteProvisionStateChanged(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.satellite.SatelliteProvisionStateCallback);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestIsDemoModeEnabled(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Boolean,android.telephony.satellite.SatelliteManager.SatelliteException>);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestIsSatelliteCommunicationAllowedForCurrentLocation(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Boolean,android.telephony.satellite.SatelliteManager.SatelliteException>);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestIsSatelliteEnabled(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Boolean,android.telephony.satellite.SatelliteManager.SatelliteException>);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestIsSatelliteProvisioned(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Boolean,android.telephony.satellite.SatelliteManager.SatelliteException>);
+    method public void requestIsSatelliteSupported(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Boolean,android.telephony.satellite.SatelliteManager.SatelliteException>);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestSatelliteCapabilities(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.telephony.satellite.SatelliteCapabilities,android.telephony.satellite.SatelliteManager.SatelliteException>);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestSatelliteEnabled(boolean, boolean, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void requestTimeForNextSatelliteVisibility(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.time.Duration,android.telephony.satellite.SatelliteManager.SatelliteException>);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void sendSatelliteDatagram(int, @NonNull android.telephony.satellite.SatelliteDatagram, boolean, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void startSatelliteTransmissionUpdates(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>, @NonNull android.telephony.satellite.SatelliteTransmissionUpdateCallback);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void stopSatelliteTransmissionUpdates(@NonNull android.telephony.satellite.SatelliteTransmissionUpdateCallback, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void unregisterForSatelliteDatagram(@NonNull android.telephony.satellite.SatelliteDatagramCallback);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void unregisterForSatelliteModemStateChanged(@NonNull android.telephony.satellite.SatelliteStateCallback);
+    method @RequiresPermission(android.Manifest.permission.SATELLITE_COMMUNICATION) public void unregisterForSatelliteProvisionStateChanged(@NonNull android.telephony.satellite.SatelliteProvisionStateCallback);
+    field public static final int DATAGRAM_TYPE_LOCATION_SHARING = 2; // 0x2
+    field public static final int DATAGRAM_TYPE_SOS_MESSAGE = 1; // 0x1
+    field public static final int DATAGRAM_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int DEVICE_HOLD_POSITION_LANDSCAPE_LEFT = 2; // 0x2
+    field public static final int DEVICE_HOLD_POSITION_LANDSCAPE_RIGHT = 3; // 0x3
+    field public static final int DEVICE_HOLD_POSITION_PORTRAIT = 1; // 0x1
+    field public static final int DEVICE_HOLD_POSITION_UNKNOWN = 0; // 0x0
+    field public static final int DISPLAY_MODE_CLOSED = 3; // 0x3
+    field public static final int DISPLAY_MODE_FIXED = 1; // 0x1
+    field public static final int DISPLAY_MODE_OPENED = 2; // 0x2
+    field public static final int DISPLAY_MODE_UNKNOWN = 0; // 0x0
+    field public static final int NT_RADIO_TECHNOLOGY_EMTC_NTN = 3; // 0x3
+    field public static final int NT_RADIO_TECHNOLOGY_NB_IOT_NTN = 1; // 0x1
+    field public static final int NT_RADIO_TECHNOLOGY_NR_NTN = 2; // 0x2
+    field public static final int NT_RADIO_TECHNOLOGY_PROPRIETARY = 4; // 0x4
+    field public static final int NT_RADIO_TECHNOLOGY_UNKNOWN = 0; // 0x0
+    field public static final int SATELLITE_ACCESS_BARRED = 16; // 0x10
+    field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE = 0; // 0x0
+    field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_FAILED = 7; // 0x7
+    field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_NONE = 6; // 0x6
+    field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_SUCCESS = 5; // 0x5
+    field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVING = 4; // 0x4
+    field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING = 1; // 0x1
+    field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED = 3; // 0x3
+    field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_SUCCESS = 2; // 0x2
+    field public static final int SATELLITE_DATAGRAM_TRANSFER_STATE_UNKNOWN = -1; // 0xffffffff
+    field public static final int SATELLITE_ERROR = 1; // 0x1
+    field public static final int SATELLITE_ERROR_NONE = 0; // 0x0
+    field public static final int SATELLITE_INVALID_ARGUMENTS = 8; // 0x8
+    field public static final int SATELLITE_INVALID_MODEM_STATE = 7; // 0x7
+    field public static final int SATELLITE_INVALID_TELEPHONY_STATE = 6; // 0x6
+    field public static final int SATELLITE_MODEM_BUSY = 22; // 0x16
+    field public static final int SATELLITE_MODEM_ERROR = 4; // 0x4
+    field public static final int SATELLITE_MODEM_STATE_DATAGRAM_RETRYING = 3; // 0x3
+    field public static final int SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING = 2; // 0x2
+    field public static final int SATELLITE_MODEM_STATE_IDLE = 0; // 0x0
+    field public static final int SATELLITE_MODEM_STATE_LISTENING = 1; // 0x1
+    field public static final int SATELLITE_MODEM_STATE_OFF = 4; // 0x4
+    field public static final int SATELLITE_MODEM_STATE_UNAVAILABLE = 5; // 0x5
+    field public static final int SATELLITE_MODEM_STATE_UNKNOWN = -1; // 0xffffffff
+    field public static final int SATELLITE_NETWORK_ERROR = 5; // 0x5
+    field public static final int SATELLITE_NETWORK_TIMEOUT = 17; // 0x11
+    field public static final int SATELLITE_NOT_AUTHORIZED = 19; // 0x13
+    field public static final int SATELLITE_NOT_REACHABLE = 18; // 0x12
+    field public static final int SATELLITE_NOT_SUPPORTED = 20; // 0x14
+    field public static final int SATELLITE_NO_RESOURCES = 12; // 0xc
+    field public static final int SATELLITE_RADIO_NOT_AVAILABLE = 10; // 0xa
+    field public static final int SATELLITE_REQUEST_ABORTED = 15; // 0xf
+    field public static final int SATELLITE_REQUEST_FAILED = 9; // 0x9
+    field public static final int SATELLITE_REQUEST_IN_PROGRESS = 21; // 0x15
+    field public static final int SATELLITE_REQUEST_NOT_SUPPORTED = 11; // 0xb
+    field public static final int SATELLITE_SERVER_ERROR = 2; // 0x2
+    field public static final int SATELLITE_SERVICE_ERROR = 3; // 0x3
+    field public static final int SATELLITE_SERVICE_NOT_PROVISIONED = 13; // 0xd
+    field public static final int SATELLITE_SERVICE_PROVISION_IN_PROGRESS = 14; // 0xe
+  }
+
+  public static class SatelliteManager.SatelliteException extends java.lang.Exception {
+    ctor public SatelliteManager.SatelliteException(int);
+    method public int getErrorCode();
+  }
+
+  public interface SatelliteProvisionStateCallback {
+    method public void onSatelliteProvisionStateChanged(boolean);
+  }
+
+  public interface SatelliteStateCallback {
+    method public void onSatelliteModemStateChanged(int);
+  }
+
+  public interface SatelliteTransmissionUpdateCallback {
+    method public void onReceiveDatagramStateChanged(int, int, int);
+    method public void onSatellitePositionChanged(@NonNull android.telephony.satellite.PointingInfo);
+    method public void onSendDatagramStateChanged(int, int, int);
+  }
+
+}
+
 package android.text {
 
   public final class FontConfig implements android.os.Parcelable {
diff --git a/core/api/system-lint-baseline.txt b/core/api/system-lint-baseline.txt
index 0100f0e..6c23327 100644
--- a/core/api/system-lint-baseline.txt
+++ b/core/api/system-lint-baseline.txt
@@ -15,6 +15,12 @@
     Avoid field names that are Kotlin hard keywords ("when"); see https://android.github.io/kotlin-guides/interop.html#no-hard-keywords
 
 
+ListenerLast: android.telephony.satellite.SatelliteManager#stopSatelliteTransmissionUpdates(android.telephony.satellite.SatelliteTransmissionUpdateCallback, java.util.concurrent.Executor, java.util.function.Consumer<java.lang.Integer>) parameter #1:
+    Listeners should always be at end of argument list (method `stopSatelliteTransmissionUpdates`)
+ListenerLast: android.telephony.satellite.SatelliteManager#stopSatelliteTransmissionUpdates(android.telephony.satellite.SatelliteTransmissionUpdateCallback, java.util.concurrent.Executor, java.util.function.Consumer<java.lang.Integer>) parameter #2:
+    Listeners should always be at end of argument list (method `stopSatelliteTransmissionUpdates`)
+
+
 MissingGetterMatchingBuilder: android.telecom.CallScreeningService.CallResponse.Builder#setShouldScreenCallViaAudioProcessing(boolean):
     android.telecom.CallScreeningService.CallResponse does not declare a `shouldScreenCallViaAudioProcessing()` method matching method android.telecom.CallScreeningService.CallResponse.Builder.setShouldScreenCallViaAudioProcessing(boolean)
 MissingGetterMatchingBuilder: android.telephony.mbms.DownloadRequest.Builder#setServiceId(String):
@@ -211,6 +217,8 @@
     SAM-compatible parameters (such as parameter 2, "response", in android.security.KeyChain.choosePrivateKeyAlias) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
 SamShouldBeLast: android.security.KeyChain#choosePrivateKeyAlias(android.app.Activity, android.security.KeyChainAliasCallback, String[], java.security.Principal[], android.net.Uri, String):
     SAM-compatible parameters (such as parameter 2, "response", in android.security.KeyChain.choosePrivateKeyAlias) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
+SamShouldBeLast: android.telephony.satellite.SatelliteManager#startSatelliteTransmissionUpdates(java.util.concurrent.Executor, java.util.function.Consumer<java.lang.Integer>, android.telephony.satellite.SatelliteTransmissionUpdateCallback):
+    SAM-compatible parameters (such as parameter 2, "resultListener", in android.telephony.satellite.SatelliteManager.startSatelliteTransmissionUpdates) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
 SamShouldBeLast: android.view.View#postDelayed(Runnable, long):
     SAM-compatible parameters (such as parameter 1, "action", in android.view.View.postDelayed) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions
 SamShouldBeLast: android.view.View#postOnAnimationDelayed(Runnable, long):
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index afa495c..3429c7c 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -540,6 +540,7 @@
     field public static final String PERMITTED_INPUT_METHODS_POLICY = "permittedInputMethods";
     field public static final String PERSONAL_APPS_SUSPENDED_POLICY = "personalAppsSuspended";
     field public static final String SCREEN_CAPTURE_DISABLED_POLICY = "screenCaptureDisabled";
+    field public static final String USB_DATA_SIGNALING_POLICY = "usbDataSignaling";
   }
 
   public class DevicePolicyManager {
@@ -836,6 +837,11 @@
 
 package android.companion {
 
+  public final class CompanionDeviceManager {
+    method @RequiresPermission("android.permission.MANAGE_COMPANION_DEVICES") public void enableSecureTransport(boolean);
+    field public static final int MESSAGE_REQUEST_PING = 1669362552; // 0x63807378
+  }
+
   public abstract class CompanionDeviceService extends android.app.Service {
     method public void onBindCompanionDeviceService(@NonNull android.content.Intent);
   }
@@ -848,6 +854,8 @@
     ctor public AttributionSource(int, @Nullable String, @Nullable String);
     ctor public AttributionSource(int, @Nullable String, @Nullable String, @NonNull android.os.IBinder);
     ctor public AttributionSource(int, @Nullable String, @Nullable String, @Nullable java.util.Set<java.lang.String>, @Nullable android.content.AttributionSource);
+    ctor public AttributionSource(int, int, @Nullable String, @Nullable String, @NonNull android.os.IBinder, @Nullable String[], @Nullable android.content.AttributionSource);
+    ctor public AttributionSource(int, int, @Nullable String, @Nullable String, @NonNull android.os.IBinder, @Nullable String[], int, @Nullable android.content.AttributionSource);
     method public void enforceCallingPid();
   }
 
@@ -1048,6 +1056,7 @@
     method public android.os.UserHandle getUserHandle();
     method public boolean isAdmin();
     method public boolean isCloneProfile();
+    method public boolean isCommunalProfile();
     method public boolean isDemo();
     method public boolean isEnabled();
     method public boolean isEphemeral();
@@ -1058,6 +1067,7 @@
     method public boolean isMain();
     method public boolean isManagedProfile();
     method @Deprecated public boolean isPrimary();
+    method public boolean isPrivateProfile();
     method public boolean isProfile();
     method public boolean isQuietModeEnabled();
     method public boolean isRestricted();
@@ -1970,6 +1980,39 @@
     method public android.media.PlaybackParams setAudioStretchMode(int);
   }
 
+  public final class RingtoneSelection {
+    method @NonNull public static android.media.RingtoneSelection fromUri(@Nullable android.net.Uri, int);
+    method public int getSoundSource();
+    method @Nullable public android.net.Uri getSoundUri();
+    method public int getVibrationSource();
+    method @Nullable public android.net.Uri getVibrationUri();
+    method public static boolean isRingtoneSelectionUri(@Nullable android.net.Uri);
+    method @NonNull public android.net.Uri toUri();
+    field public static final String DEFAULT_SELECTION_URI_STRING = "content://media/ringtone";
+    field public static final int FROM_URI_RINGTONE_SELECTION_ONLY = 3; // 0x3
+    field public static final int FROM_URI_RINGTONE_SELECTION_OR_SOUND = 1; // 0x1
+    field public static final int FROM_URI_RINGTONE_SELECTION_OR_VIBRATION = 2; // 0x2
+    field public static final int SOUND_SOURCE_DEFAULT = 0; // 0x0
+    field public static final int SOUND_SOURCE_OFF = 1; // 0x1
+    field public static final int SOUND_SOURCE_URI = 2; // 0x2
+    field public static final int VIBRATION_SOURCE_APPLICATION_PROVIDED = 3; // 0x3
+    field public static final int VIBRATION_SOURCE_AUDIO_CHANNEL = 10; // 0xa
+    field public static final int VIBRATION_SOURCE_DEFAULT = 0; // 0x0
+    field public static final int VIBRATION_SOURCE_HAPTIC_GENERATOR = 11; // 0xb
+    field public static final int VIBRATION_SOURCE_OFF = 1; // 0x1
+    field public static final int VIBRATION_SOURCE_URI = 2; // 0x2
+  }
+
+  public static final class RingtoneSelection.Builder {
+    ctor public RingtoneSelection.Builder();
+    ctor public RingtoneSelection.Builder(@NonNull android.media.RingtoneSelection);
+    method @NonNull public android.media.RingtoneSelection build();
+    method @NonNull public android.media.RingtoneSelection.Builder setSoundSource(int);
+    method @NonNull public android.media.RingtoneSelection.Builder setSoundSource(@NonNull android.net.Uri);
+    method @NonNull public android.media.RingtoneSelection.Builder setVibrationSource(int);
+    method @NonNull public android.media.RingtoneSelection.Builder setVibrationSource(@NonNull android.net.Uri);
+  }
+
   public static final class VolumeShaper.Configuration.Builder {
     method @NonNull public android.media.VolumeShaper.Configuration.Builder setOptionFlags(int);
   }
@@ -2636,6 +2679,21 @@
 
 }
 
+package android.os.vibrator.persistence {
+
+  public final class VibrationXmlParser {
+    method @Nullable public static android.os.VibrationEffect parse(@NonNull java.io.Reader) throws java.io.IOException;
+  }
+
+  public final class VibrationXmlSerializer {
+    method public static void serialize(@NonNull android.os.VibrationEffect, @NonNull java.io.Writer) throws java.io.IOException, android.os.vibrator.persistence.VibrationXmlSerializer.SerializationFailedException;
+  }
+
+  public static final class VibrationXmlSerializer.SerializationFailedException extends java.lang.RuntimeException {
+  }
+
+}
+
 package android.permission {
 
   public final class PermissionControllerManager {
@@ -3195,6 +3253,7 @@
     field public static final int HAL_SERVICE_MESSAGING = 2; // 0x2
     field public static final int HAL_SERVICE_MODEM = 3; // 0x3
     field public static final int HAL_SERVICE_NETWORK = 4; // 0x4
+    field public static final int HAL_SERVICE_SATELLITE = 8; // 0x8
     field public static final int HAL_SERVICE_SIM = 5; // 0x5
     field public static final int HAL_SERVICE_VOICE = 6; // 0x6
     field public static final android.util.Pair HAL_VERSION_UNKNOWN;
@@ -3286,6 +3345,15 @@
     field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig.NamedFamilyList> CREATOR;
   }
 
+  public class MeasuredParagraph {
+    method @NonNull public static android.text.MeasuredParagraph buildForStaticLayoutTest(@NonNull android.text.TextPaint, @Nullable android.graphics.text.LineBreakConfig, @NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.text.TextDirectionHeuristic, int, boolean, @Nullable android.text.MeasuredParagraph.StyleRunCallback);
+  }
+
+  public static interface MeasuredParagraph.StyleRunCallback {
+    method public void onAppendReplacementRun(@NonNull android.graphics.Paint, @IntRange(from=0) int, @FloatRange(from=0) @Px float);
+    method public void onAppendStyleRun(@NonNull android.graphics.Paint, @Nullable android.graphics.text.LineBreakConfig, @IntRange(from=0) int, boolean);
+  }
+
   public static final class Selection.MemoryTextWatcher implements android.text.TextWatcher {
     ctor public Selection.MemoryTextWatcher();
     method public void afterTextChanged(android.text.Editable);
@@ -3405,6 +3473,7 @@
 
   public final class Choreographer {
     method public static long getFrameDelay();
+    method public long getFrameTimeNanos();
     method public void postCallback(int, Runnable, Object);
     method public void postCallbackDelayed(int, Runnable, Object, long);
     method public void removeCallbacks(int, Runnable, Object);
@@ -3465,7 +3534,10 @@
   public final class InputDevice implements android.os.Parcelable {
     method @RequiresPermission("android.permission.DISABLE_INPUT_DEVICE") public void disable();
     method @RequiresPermission("android.permission.DISABLE_INPUT_DEVICE") public void enable();
+    method public int getAssociatedDisplayId();
     method @NonNull public android.hardware.input.InputDeviceIdentifier getIdentifier();
+    method @Nullable public String getKeyboardLanguageTag();
+    method @Nullable public String getKeyboardLayoutType();
   }
 
   public abstract class InputEvent implements android.os.Parcelable {
@@ -3562,6 +3634,8 @@
     method public default void holdLock(android.os.IBinder, int);
     method public default boolean isGlobalKey(int);
     method public default boolean isTaskSnapshotSupported();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_SURFACE_FLINGER) public default boolean replaceContentOnDisplayWithMirror(int, @NonNull android.view.Window);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_SURFACE_FLINGER) public default boolean replaceContentOnDisplayWithSc(int, @NonNull android.view.SurfaceControl);
     method public default void setDisplayImePolicy(int, int);
     method public default void setShouldShowSystemDecors(int, boolean);
     method public default void setShouldShowWithInsecureKeyguard(int, boolean);
@@ -3610,6 +3684,7 @@
 
   public final class AccessibilityWindowInfo implements android.os.Parcelable {
     method public static void setNumInstancesInUseCounter(java.util.concurrent.atomic.AtomicInteger);
+    field public static final int UNDEFINED_WINDOW_ID = -1; // 0xffffffff
   }
 
 }
@@ -3617,7 +3692,7 @@
 package android.view.animation {
 
   public class AnimationUtils {
-    method public static void lockAnimationClock(long);
+    method public static void lockAnimationClock(long, long);
     method public static void unlockAnimationClock();
   }
 
@@ -3792,11 +3867,14 @@
   public final class InputMethodManager {
     method @RequiresPermission(android.Manifest.permission.TEST_INPUT_METHOD) public void addVirtualStylusIdForTestSession();
     method public int getDisplayId();
+    method @NonNull @RequiresPermission(value=android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, conditional=true) public java.util.List<android.view.inputmethod.InputMethodInfo> getEnabledInputMethodListAsUser(@NonNull android.os.UserHandle);
+    method @NonNull @RequiresPermission(value=android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, conditional=true) public java.util.List<android.view.inputmethod.InputMethodSubtype> getEnabledInputMethodSubtypeListAsUser(@NonNull String, boolean, @NonNull android.os.UserHandle);
     method @NonNull @RequiresPermission(value=android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, conditional=true) public java.util.List<android.view.inputmethod.InputMethodInfo> getInputMethodListAsUser(int);
     method public boolean hasActiveInputConnection(@Nullable android.view.View);
     method @RequiresPermission(android.Manifest.permission.TEST_INPUT_METHOD) public boolean hasPendingImeVisibilityRequests();
     method @RequiresPermission(android.Manifest.permission.TEST_INPUT_METHOD) public boolean isCurrentRootView(@NonNull android.view.View);
     method @RequiresPermission(android.Manifest.permission.TEST_INPUT_METHOD) public boolean isInputMethodPickerShown();
+    method @NonNull @RequiresPermission(value=android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, conditional=true) public boolean isStylusHandwritingAvailableAsUser(@NonNull android.os.UserHandle);
     method @RequiresPermission(android.Manifest.permission.TEST_INPUT_METHOD) public void setStylusWindowIdleTimeoutForTest(long);
     field public static final long CLEAR_SHOW_FORCED_FLAG_WHEN_LEAVING = 214016041L; // 0xcc1a029L
   }
@@ -4175,6 +4253,7 @@
     field public final boolean isTrustedOverlay;
     field public final boolean isVisible;
     field @NonNull public final String name;
+    field @NonNull public final android.graphics.Matrix transform;
     field @NonNull public final android.os.IBinder windowToken;
   }
 
diff --git a/core/api/test-lint-baseline.txt b/core/api/test-lint-baseline.txt
index cf02643..4a97280 100644
--- a/core/api/test-lint-baseline.txt
+++ b/core/api/test-lint-baseline.txt
@@ -183,10 +183,6 @@
     android.telecom.ConnectionRequest does not declare a `shouldShowIncomingCallUi()` method matching method android.telecom.ConnectionRequest.Builder.setShouldShowIncomingCallUi(boolean)
 MissingGetterMatchingBuilder: android.view.Display.Mode.Builder#setResolution(int, int):
     android.view.Display.Mode does not declare a `getResolution()` method matching method android.view.Display.Mode.Builder.setResolution(int,int)
-MissingGetterMatchingBuilder: android.view.inputmethod.InlineSuggestionsRequest.Builder#setClientSupported(boolean):
-    android.view.inputmethod.InlineSuggestionsRequest does not declare a `isClientSupported()` method matching method android.view.inputmethod.InlineSuggestionsRequest.Builder.setClientSupported(boolean)
-MissingGetterMatchingBuilder: android.view.inputmethod.InlineSuggestionsRequest.Builder#setServiceSupported(boolean):
-    android.view.inputmethod.InlineSuggestionsRequest does not declare a `isServiceSupported()` method matching method android.view.inputmethod.InlineSuggestionsRequest.Builder.setServiceSupported(boolean)
 
 
 MissingNullability: android.app.Activity#onMovedToDisplay(int, android.content.res.Configuration) parameter #1:
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index 3d4b6bf..e40ea09 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -81,6 +81,7 @@
 import java.util.List;
 import java.util.concurrent.Executor;
 import java.util.function.Consumer;
+import java.util.function.IntConsumer;
 
 /**
  * Accessibility services should only be used to assist users with disabilities in using
@@ -785,6 +786,39 @@
     public static final String KEY_ACCESSIBILITY_SCREENSHOT_TIMESTAMP =
             "screenshot_timestamp";
 
+
+    /**
+     * Annotations for result codes of attaching accessibility overlays.
+     *
+     * @hide
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(
+            prefix = {"OVERLAY_RESULT_"},
+            value = {
+                OVERLAY_RESULT_SUCCESS,
+                OVERLAY_RESULT_INTERNAL_ERROR,
+                OVERLAY_RESULT_INVALID,
+            })
+    public @interface AttachOverlayResult {}
+
+    /** Result code indicating the overlay was successfully attached. */
+    public static final int OVERLAY_RESULT_SUCCESS = 0;
+
+    /**
+     * Result code indicating the overlay could not be attached due to an internal
+     * error and not
+     * because of problems with the input.
+     */
+    public static final int OVERLAY_RESULT_INTERNAL_ERROR = 1;
+
+    /**
+     * Result code indicating the overlay could not be attached because the
+     * specified display or
+     * window id was invalid.
+     */
+    public static final int OVERLAY_RESULT_INVALID = 2;
+
     private int mConnectionId = AccessibilityInteractionClient.NO_ID;
 
     @UnsupportedAppUsage
@@ -1204,7 +1238,21 @@
      * property in its meta-data. For more information, see
      * {@link #SERVICE_META_DATA}.
      * </p>
+     * <p>Since many apps do not appropriately support {@link AccessibilityAction#ACTION_CLICK},
+     * if this action fails on an element that should be clickable, a service that is not a screen
+     * reader may send a tap directly to the element as a fallback. The example below
+     * demonstrates this fallback using the gesture dispatch APIs:
      *
+     * <pre class="prettyprint"><code>
+     *     private void tap(PointF point) {
+     *         StrokeDescription tap =  new StrokeDescription(path(point), 0,
+     *         ViewConfiguration.getTapTimeout());
+     *         GestureDescription.Builder builder = new GestureDescription.Builder();
+     *         builder.addStroke(tap);
+     *         dispatchGesture(builder.build(), null, null);
+     *     }
+     *</code>
+     * </pre>
      * @param gesture The gesture to dispatch
      * @param callback The object to call back when the status of the gesture is known. If
      * {@code null}, no status is reported.
@@ -2580,10 +2628,6 @@
         IAccessibilityServiceConnection connection =
                 AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
         if (mInfo != null && connection != null) {
-            if (!mInfo.isWithinParcelableSize()) {
-                throw new IllegalStateException(
-                        "Cannot update service info: size is larger than safe parcelable limits.");
-            }
             try {
                 connection.setServiceInfo(mInfo);
                 mInfo = null;
@@ -3439,75 +3483,154 @@
     }
 
     /**
-     * <p>Attaches a {@link android.view.SurfaceControl} containing an accessibility
-     * overlay to the
-     * specified display. This type of overlay should be used for content that does
-     * not need to
-     * track the location and size of Views in the currently active app e.g. service
-     * configuration
-     * or general service UI.</p>
-     * <p>Generally speaking, an accessibility overlay  will be  a {@link android.view.View}.
-     * To embed the View into a {@link android.view.SurfaceControl}, create a
-     * {@link android.view.SurfaceControlViewHost} and attach the View using
-     * {@link android.view.SurfaceControlViewHost#setView}. Then obtain the SurfaceControl by
-     * calling <code> viewHost.getSurfacePackage().getSurfaceControl()</code>.</p>
-     * <p>To remove this overlay and free the associated
-     * resources, use
-     * <code> new SurfaceControl.Transaction().reparent(sc, null).apply();</code>.</p>
-     * <p>If the specified overlay has already been attached to the specified display
-     * this method does nothing.
-     * If the specified overlay has already been attached to a previous display this
-     * function will transfer the overlay to the new display.
-     * Services can attach multiple overlays. Use
-     * <code> new SurfaceControl.Transaction().setLayer(sc, layer).apply();</code>.
-     * to coordinate the order of the overlays on screen.</p>
+     * Attaches a {@link android.view.SurfaceControl} containing an accessibility overlay to the
+     * specified display. This type of overlay should be used for content that does not need to
+     * track the location and size of Views in the currently active app e.g. service configuration
+     * or general service UI.
+     *
+     * <p>Generally speaking, an accessibility overlay will be a {@link android.view.View}. To embed
+     * the View into a {@link android.view.SurfaceControl}, create a {@link
+     * android.view.SurfaceControlViewHost} and attach the View using {@link
+     * android.view.SurfaceControlViewHost#setView}. Then obtain the SurfaceControl by calling
+     * <code> viewHost.getSurfacePackage().getSurfaceControl()</code>.
+     *
+     * <p>To remove this overlay and free the associated resources, use <code>
+     *  new SurfaceControl.Transaction().reparent(sc, null).apply();</code>.
+     *
+     * <p>If the specified overlay has already been attached to the specified display this method
+     * does nothing. If the specified overlay has already been attached to a previous display this
+     * function will transfer the overlay to the new display. Services can attach multiple overlays.
+     * Use <code> new SurfaceControl.Transaction().setLayer(sc, layer).apply();</code>. to
+     * coordinate the order of the overlays on screen.
      *
      * @param displayId the display to which the SurfaceControl should be attached.
-     * @param sc        the SurfaceControl containing the overlay content
+     * @param sc the SurfaceControl containing the overlay content
+     *
+     * @deprecated Use
+     * {@link #attachAccessibilityOverlayToDisplay(int, SurfaceControl, Executor, IntConsumer)}
+     * instead.
      */
+    @Deprecated
     public void attachAccessibilityOverlayToDisplay(int displayId, @NonNull SurfaceControl sc) {
         Preconditions.checkNotNull(sc, "SurfaceControl cannot be null");
-        final IAccessibilityServiceConnection connection =
-                AccessibilityInteractionClient.getConnection(mConnectionId);
-        if (connection == null) {
-            return;
-        }
-        try {
-            connection.attachAccessibilityOverlayToDisplay(displayId, sc);
-        } catch (RemoteException re) {
-            re.rethrowFromSystemServer();
-        }
+        AccessibilityInteractionClient.getInstance(this)
+                .attachAccessibilityOverlayToDisplay(mConnectionId, displayId, sc, null, null);
     }
 
     /**
-     * <p>Attaches an accessibility overlay {@link android.view.SurfaceControl} to the
-     * specified
-     * window. This method should be used when you want the overlay to move and
-     * resize as the parent window moves and resizes.</p>
-     * <p>Generally speaking, an accessibility overlay  will be  a {@link android.view.View}.
-     * To embed the View into a {@link android.view.SurfaceControl}, create a
-     * {@link android.view.SurfaceControlViewHost} and attach the View using
-     * {@link android.view.SurfaceControlViewHost#setView}. Then obtain the SurfaceControl by
-     * calling <code> viewHost.getSurfacePackage().getSurfaceControl()</code>.</p>
-     * <p>To remove this overlay and free the associated resources, use
-     * <code> new SurfaceControl.Transaction().reparent(sc, null).apply();</code>.</p>
-     * <p>If the specified overlay has already been attached to the specified window
-     * this method does nothing.
-     * If the specified overlay has already been attached to a previous window this
-     * function will transfer the overlay to the new window.
-     * Services can attach multiple overlays. Use
-     * <code> new SurfaceControl.Transaction().setLayer(sc, layer).apply();</code>.
-     * to coordinate the order of the overlays on screen.</p>
+     * Attaches a {@link android.view.SurfaceControl} containing an accessibility overlay to the
+     * specified display. This type of overlay should be used for content that does not need to
+     * track the location and size of Views in the currently active app e.g. service configuration
+     * or general service UI.
      *
-     * @param accessibilityWindowId The window id, from
-     *                              {@link AccessibilityWindowInfo#getId()}.
-     * @param sc                    the SurfaceControl containing the overlay
-     *                              content
+     * <p>Generally speaking, an accessibility overlay will be a {@link android.view.View}. To embed
+     * the View into a {@link android.view.SurfaceControl}, create a {@link
+     * android.view.SurfaceControlViewHost} and attach the View using {@link
+     * android.view.SurfaceControlViewHost#setView}. Then obtain the SurfaceControl by calling
+     * <code> viewHost.getSurfacePackage().getSurfaceControl()</code>.
+     *
+     * <p>To remove this overlay and free the associated resources, use <code>
+     *  new SurfaceControl.Transaction().reparent(sc, null).apply();</code>.
+     *
+     * <p>If the specified overlay has already been attached to the specified display this method
+     * does nothing. If the specified overlay has already been attached to a previous display this
+     * function will transfer the overlay to the new display. Services can attach multiple overlays.
+     * Use <code> new SurfaceControl.Transaction().setLayer(sc, layer).apply();</code>. to
+     * coordinate the order of the overlays on screen.
+     *
+     * @param displayId the display to which the SurfaceControl should be attached.
+     * @param sc the SurfaceControl containing the overlay content
+     * @param executor Executor on which to run the callback.
+     * @param callback The callback invoked when attaching the overlay has succeeded or failed. The
+     *     callback is a {@link java.util.function.IntConsumer} of the result status code.
+     * @see OVERLAY_RESULT_SUCCESS
+     * @see OVERLAY_RESULT_INVALID
+     * @see OVERLAY_RESULT_INTERNAL_ERROR
      */
+    public void attachAccessibilityOverlayToDisplay(
+            int displayId,
+            @NonNull SurfaceControl sc,
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull IntConsumer callback) {
+        Preconditions.checkNotNull(sc, "SurfaceControl cannot be null");
+        AccessibilityInteractionClient.getInstance(this)
+                .attachAccessibilityOverlayToDisplay(
+                        mConnectionId, displayId, sc, executor, callback);
+    }
+
+    /**
+     * Attaches an accessibility overlay {@link android.view.SurfaceControl} to the specified
+     * window. This method should be used when you want the overlay to move and resize as the parent
+     * window moves and resizes.
+     *
+     * <p>Generally speaking, an accessibility overlay will be a {@link android.view.View}. To embed
+     * the View into a {@link android.view.SurfaceControl}, create a {@link
+     * android.view.SurfaceControlViewHost} and attach the View using {@link
+     * android.view.SurfaceControlViewHost#setView}. Then obtain the SurfaceControl by calling
+     * <code> viewHost.getSurfacePackage().getSurfaceControl()</code>.
+     *
+     * <p>To remove this overlay and free the associated resources, use <code>
+     *  new SurfaceControl.Transaction().reparent(sc, null).apply();</code>.
+     *
+     * <p>If the specified overlay has already been attached to the specified window this method
+     * does nothing. If the specified overlay has already been attached to a previous window this
+     * function will transfer the overlay to the new window. Services can attach multiple overlays.
+     * Use <code> new SurfaceControl.Transaction().setLayer(sc, layer).apply();</code>. to
+     * coordinate the order of the overlays on screen.
+     *
+     * @param accessibilityWindowId The window id, from {@link AccessibilityWindowInfo#getId()}.
+     * @param sc the SurfaceControl containing the overlay content
+     *
+     * @deprecated Use
+     * {@link #attachAccessibilityOverlayToWindow(int, SurfaceControl, Executor,IntConsumer)}
+     * instead.
+     */
+    @Deprecated
     public void attachAccessibilityOverlayToWindow(
             int accessibilityWindowId, @NonNull SurfaceControl sc) {
         Preconditions.checkNotNull(sc, "SurfaceControl cannot be null");
         AccessibilityInteractionClient.getInstance(this)
-                .attachAccessibilityOverlayToWindow(mConnectionId, accessibilityWindowId, sc);
+                .attachAccessibilityOverlayToWindow(
+                        mConnectionId, accessibilityWindowId, sc, null, null);
+    }
+
+    /**
+     * Attaches an accessibility overlay {@link android.view.SurfaceControl} to the specified
+     * window. This method should be used when you want the overlay to move and resize as the parent
+     * window moves and resizes.
+     *
+     * <p>Generally speaking, an accessibility overlay will be a {@link android.view.View}. To embed
+     * the View into a {@link android.view.SurfaceControl}, create a {@link
+     * android.view.SurfaceControlViewHost} and attach the View using {@link
+     * android.view.SurfaceControlViewHost#setView}. Then obtain the SurfaceControl by calling
+     * <code> viewHost.getSurfacePackage().getSurfaceControl()</code>.
+     *
+     * <p>To remove this overlay and free the associated resources, use <code>
+     *  new SurfaceControl.Transaction().reparent(sc, null).apply();</code>.
+     *
+     * <p>If the specified overlay has already been attached to the specified window this method
+     * does nothing. If the specified overlay has already been attached to a previous window this
+     * function will transfer the overlay to the new window. Services can attach multiple overlays.
+     * Use <code> new SurfaceControl.Transaction().setLayer(sc, layer).apply();</code>. to
+     * coordinate the order of the overlays on screen.
+     *
+     * @param accessibilityWindowId The window id, from {@link AccessibilityWindowInfo#getId()}.
+     * @param sc the SurfaceControl containing the overlay content
+     * @param executor Executor on which to run the callback.
+     * @param callback The callback invoked when attaching the overlay has succeeded or failed. The
+     *     callback is a {@link java.util.function.IntConsumer} of the result status code.
+     * @see OVERLAY_RESULT_SUCCESS
+     * @see OVERLAY_RESULT_INVALID
+     * @see OVERLAY_RESULT_INTERNAL_ERROR
+     */
+    public void attachAccessibilityOverlayToWindow(
+            int accessibilityWindowId,
+            @NonNull SurfaceControl sc,
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull IntConsumer callback) {
+        Preconditions.checkNotNull(sc, "SurfaceControl cannot be null");
+        AccessibilityInteractionClient.getInstance(this)
+                .attachAccessibilityOverlayToWindow(
+                        mConnectionId, accessibilityWindowId, sc, executor, callback);
     }
 }
diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
index d4a96b4..6550f30 100644
--- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
@@ -107,81 +107,82 @@
      * Capability: This accessibility service can retrieve the active window content.
      * @see android.R.styleable#AccessibilityService_canRetrieveWindowContent
      */
-    public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 0x00000001;
+    public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1 /* << 0 */;
 
     /**
      * Capability: This accessibility service can request touch exploration mode in which
      * touched items are spoken aloud and the UI can be explored via gestures.
      * @see android.R.styleable#AccessibilityService_canRequestTouchExplorationMode
      */
-    public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 0x00000002;
+    public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 1 << 1;
 
     /**
      * @deprecated No longer used
      */
-    public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 0x00000004;
+    @Deprecated
+    public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 1 << 2;
 
     /**
      * Capability: This accessibility service can request to filter the key event stream.
      * @see android.R.styleable#AccessibilityService_canRequestFilterKeyEvents
      */
-    public static final int CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS = 0x00000008;
+    public static final int CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS = 1 << 3;
 
     /**
      * Capability: This accessibility service can control display magnification.
      * @see android.R.styleable#AccessibilityService_canControlMagnification
      */
-    public static final int CAPABILITY_CAN_CONTROL_MAGNIFICATION = 0x00000010;
+    public static final int CAPABILITY_CAN_CONTROL_MAGNIFICATION = 1 << 4;
 
     /**
      * Capability: This accessibility service can perform gestures.
      * @see android.R.styleable#AccessibilityService_canPerformGestures
      */
-    public static final int CAPABILITY_CAN_PERFORM_GESTURES = 0x00000020;
+    public static final int CAPABILITY_CAN_PERFORM_GESTURES = 1 << 5;
 
     /**
      * Capability: This accessibility service can capture gestures from the fingerprint sensor
      * @see android.R.styleable#AccessibilityService_canRequestFingerprintGestures
      */
-    public static final int CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES = 0x00000040;
+    public static final int CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES = 1 << 6;
 
     /**
      * Capability: This accessibility service can take screenshot.
      * @see android.R.styleable#AccessibilityService_canTakeScreenshot
      */
-    public static final int CAPABILITY_CAN_TAKE_SCREENSHOT = 0x00000080;
+    public static final int CAPABILITY_CAN_TAKE_SCREENSHOT = 1 << 7;
 
     private static SparseArray<CapabilityInfo> sAvailableCapabilityInfos;
 
     /**
      * Denotes spoken feedback.
      */
-    public static final int FEEDBACK_SPOKEN = 0x0000001;
+    public static final int FEEDBACK_SPOKEN = 1 /* << 0 */;
 
     /**
      * Denotes haptic feedback.
      */
-    public static final int FEEDBACK_HAPTIC =  0x0000002;
+    public static final int FEEDBACK_HAPTIC =  1 << 1;
 
     /**
      * Denotes audible (not spoken) feedback.
      */
-    public static final int FEEDBACK_AUDIBLE = 0x0000004;
+    public static final int FEEDBACK_AUDIBLE = 1 << 2;
 
     /**
      * Denotes visual feedback.
      */
-    public static final int FEEDBACK_VISUAL = 0x0000008;
+    public static final int FEEDBACK_VISUAL = 1 << 3;
 
     /**
      * Denotes generic feedback.
      */
-    public static final int FEEDBACK_GENERIC = 0x0000010;
+    public static final int FEEDBACK_GENERIC = 1 << 4;
 
     /**
      * Denotes braille feedback.
      */
-    public static final int FEEDBACK_BRAILLE = 0x0000020;
+    public static final int FEEDBACK_BRAILLE = 1 << 5;
 
     /**
      * Mask for all feedback types.
@@ -200,7 +201,7 @@
      * Default service is invoked only if no package specific one exists. In case of
      * more than one package specific service only the earlier registered is notified.
      */
-    public static final int DEFAULT = 0x0000001;
+    public static final int DEFAULT = 1 /* << 0 */;
 
     /**
      * If this flag is set the system will regard views that are not important
@@ -230,7 +231,7 @@
      * elements.
      * </p>
      */
-    public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 0x0000002;
+    public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 1 << 1;
 
     /**
      * This flag requests that the system gets into touch exploration mode.
@@ -258,12 +259,13 @@
      * </p>
      * @see android.R.styleable#AccessibilityService_canRequestTouchExplorationMode
      */
-    public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 0x0000004;
+    public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 1 << 2;
 
     /**
      * @deprecated No longer used
      */
-    public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 0x00000008;
+    @Deprecated
+    public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 1 << 3;
 
     /**
      * This flag requests that the {@link AccessibilityNodeInfo}s obtained
@@ -272,7 +274,7 @@
      * form "package:id/name", for example "foo.bar:id/my_list", and it is
      * useful for UI test automation. This flag is not set by default.
      */
-    public static final int FLAG_REPORT_VIEW_IDS = 0x00000010;
+    public static final int FLAG_REPORT_VIEW_IDS = 1 << 4;
 
     /**
      * This flag requests from the system to filter key events. If this flag
@@ -287,7 +289,7 @@
      * </p>
      * @see android.R.styleable#AccessibilityService_canRequestFilterKeyEvents
      */
-    public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 0x00000020;
+    public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 1 << 5;
 
     /**
      * This flag indicates to the system that the accessibility service wants
@@ -308,14 +310,14 @@
      * </p>
      * @see android.R.styleable#AccessibilityService_canRetrieveWindowContent
      */
-    public static final int FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 0x00000040;
+    public static final int FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 1 << 6;
 
     /**
      * This flag requests that all audio tracks system-wide with
      * {@link android.media.AudioAttributes#USAGE_ASSISTANCE_ACCESSIBILITY} be controlled by the
      * {@link android.media.AudioManager#STREAM_ACCESSIBILITY} volume.
      */
-    public static final int FLAG_ENABLE_ACCESSIBILITY_VOLUME = 0x00000080;
+    public static final int FLAG_ENABLE_ACCESSIBILITY_VOLUME = 1 << 7;
 
      /**
      * This flag indicates to the system that the accessibility service requests that an
@@ -326,7 +328,7 @@
       *   accessibility service metadata file. Otherwise, it will be ignored.
       * </p>
      */
-    public static final int FLAG_REQUEST_ACCESSIBILITY_BUTTON = 0x00000100;
+    public static final int FLAG_REQUEST_ACCESSIBILITY_BUTTON = 1 << 8;
 
     /**
      * This flag requests that all fingerprint gestures be sent to the accessibility service.
@@ -341,13 +343,13 @@
      * @see android.R.styleable#AccessibilityService_canRequestFingerprintGestures
      * @see AccessibilityService#getFingerprintGestureController()
      */
-    public static final int FLAG_REQUEST_FINGERPRINT_GESTURES = 0x00000200;
+    public static final int FLAG_REQUEST_FINGERPRINT_GESTURES = 1 << 9;
 
     /**
      * This flag requests that accessibility shortcut warning dialog has spoken feedback when
      * dialog is shown.
      */
-    public static final int FLAG_REQUEST_SHORTCUT_WARNING_DIALOG_SPOKEN_FEEDBACK = 0x00000400;
+    public static final int FLAG_REQUEST_SHORTCUT_WARNING_DIALOG_SPOKEN_FEEDBACK = 1 << 10;
 
     /**
      * This flag requests that when {@link #FLAG_REQUEST_TOUCH_EXPLORATION_MODE} is enabled,
@@ -357,7 +359,7 @@
      *
      * @see #FLAG_REQUEST_TOUCH_EXPLORATION_MODE
      */
-    public static final int FLAG_SERVICE_HANDLES_DOUBLE_TAP = 0x0000800;
+    public static final int FLAG_SERVICE_HANDLES_DOUBLE_TAP = 1 << 11;
 
     /**
      * This flag requests that when when {@link #FLAG_REQUEST_TOUCH_EXPLORATION_MODE} is enabled,
@@ -367,7 +369,7 @@
      *
      * @see #FLAG_REQUEST_TOUCH_EXPLORATION_MODE
      */
-    public static final int FLAG_REQUEST_MULTI_FINGER_GESTURES = 0x0001000;
+    public static final int FLAG_REQUEST_MULTI_FINGER_GESTURES = 1 << 12;
 
     /**
      * This flag requests that when when {@link #FLAG_REQUEST_MULTI_FINGER_GESTURES} is enabled,
@@ -378,7 +380,7 @@
      *
      * @see #FLAG_REQUEST_TOUCH_EXPLORATION_MODE
      */
-    public static final int FLAG_REQUEST_2_FINGER_PASSTHROUGH = 0x0002000;
+    public static final int FLAG_REQUEST_2_FINGER_PASSTHROUGH = 1 << 13;
 
     /**
      * This flag requests that when when {@link #FLAG_REQUEST_TOUCH_EXPLORATION_MODE} is enabled, a
@@ -392,7 +394,7 @@
      *
      * @see #FLAG_REQUEST_TOUCH_EXPLORATION_MODE
      */
-    public static final int FLAG_SEND_MOTION_EVENTS = 0x0004000;
+    public static final int FLAG_SEND_MOTION_EVENTS = 1 << 14;
 
     /**
      * This flag makes the AccessibilityService an input method editor with a subset of input
@@ -401,10 +403,10 @@
      *
      * @see AccessibilityService#getInputMethod()
      */
-    public static final int FLAG_INPUT_METHOD_EDITOR = 0x0008000;
+    public static final int FLAG_INPUT_METHOD_EDITOR = 1 << 15;
 
     /** {@hide} */
-    public static final int FLAG_FORCE_DIRECT_BOOT_AWARE = 0x00010000;
+    public static final int FLAG_FORCE_DIRECT_BOOT_AWARE = 1 << 16;
 
     /**
      * The event types an {@link AccessibilityService} is interested in.
diff --git a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
index e99932d..96716db 100644
--- a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
+++ b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
@@ -157,7 +157,7 @@
     void setInstalledAndEnabledServices(in List<AccessibilityServiceInfo> infos);
 
     List<AccessibilityServiceInfo> getInstalledAndEnabledServices();
-    void attachAccessibilityOverlayToDisplay(int displayId, in SurfaceControl sc);
+    void attachAccessibilityOverlayToDisplay(int interactionId, int displayId, in SurfaceControl sc, IAccessibilityInteractionConnectionCallback callback);
 
-    void attachAccessibilityOverlayToWindow(int accessibilityWindowId, in SurfaceControl sc);
+    void attachAccessibilityOverlayToWindow(int interactionId, int accessibilityWindowId, in SurfaceControl sc, IAccessibilityInteractionConnectionCallback callback);
 }
\ No newline at end of file
diff --git a/core/java/android/accessibilityservice/TEST_MAPPING b/core/java/android/accessibilityservice/TEST_MAPPING
index df85b61..1c67399 100644
--- a/core/java/android/accessibilityservice/TEST_MAPPING
+++ b/core/java/android/accessibilityservice/TEST_MAPPING
@@ -1,26 +1,7 @@
 {
-  "presubmit": [
+  "imports": [
     {
-      "name": "CtsAccessibilityServiceTestCases",
-      "options": [
-        {
-          "include-annotation": "android.platform.test.annotations.Presubmit"
-        },
-        {
-          "exclude-annotation": "android.support.test.filters.FlakyTest"
-        }
-      ]
-    }
-  ],
-  "postsubmit": [
-    {
-      "name": "CtsAccessibilityServiceSdk29TestCases"
-    },
-    {
-      "name": "CtsAccessibilityServiceTestCases"
-    },
-    {
-      "name": "CtsAccessibilityTestCases"
+      "path": "frameworks/base/services/accessibility/TEST_MAPPING"
     }
   ]
 }
diff --git a/core/java/android/accounts/Account.java b/core/java/android/accounts/Account.java
index 0d6a079..c376eae 100644
--- a/core/java/android/accounts/Account.java
+++ b/core/java/android/accounts/Account.java
@@ -45,8 +45,8 @@
     @GuardedBy("sAccessedAccounts")
     private static final Set<Account> sAccessedAccounts = new ArraySet<>();
 
-    public final String name;
-    public final String type;
+    public final @NonNull String name;
+    public final @NonNull String type;
     private String mSafeName;
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
     private final @Nullable String accessId;
@@ -65,7 +65,7 @@
         return result;
     }
 
-    public Account(String name, String type) {
+    public Account(@NonNull String name, @NonNull String type) {
         this(name, type, null);
     }
 
@@ -79,7 +79,7 @@
     /**
      * @hide
      */
-    public Account(String name, String type, String accessId) {
+    public Account(@NonNull String name, @NonNull String type, String accessId) {
         if (TextUtils.isEmpty(name)) {
             throw new IllegalArgumentException("the name must not be empty: " + name);
         }
diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java
index 821a23c..7ee3413 100644
--- a/core/java/android/accounts/AccountManager.java
+++ b/core/java/android/accounts/AccountManager.java
@@ -2384,12 +2384,8 @@
                 } else {
                     return get(timeout, unit);
                 }
-            } catch (CancellationException e) {
-                throw new OperationCanceledException();
-            } catch (TimeoutException e) {
-                // fall through and cancel
-            } catch (InterruptedException e) {
-                // fall through and cancel
+            } catch (CancellationException | TimeoutException | InterruptedException e) {
+                throw new OperationCanceledException(e);
             } catch (ExecutionException e) {
                 final Throwable cause = e.getCause();
                 if (cause instanceof IOException) {
@@ -2408,7 +2404,6 @@
             } finally {
                 cancel(true /* interrupt if running */);
             }
-            throw new OperationCanceledException();
         }
 
         @Override
diff --git a/core/java/android/animation/AnimatorSet.java b/core/java/android/animation/AnimatorSet.java
index f33d299..b4a6955 100644
--- a/core/java/android/animation/AnimatorSet.java
+++ b/core/java/android/animation/AnimatorSet.java
@@ -1709,7 +1709,7 @@
                     return 1;
                 }
                 // When neither event happens at INFINITE time:
-                return (int) (t1 - t2);
+                return t1 - t2 > 0 ? 1 : -1;
             }
         });
 
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 17875bf..a366464 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -3156,13 +3156,17 @@
 
     /**
      * Called by the system when the device configuration changes while your
-     * activity is running.  Note that this will <em>only</em> be called if
-     * you have selected configurations you would like to handle with the
+     * activity is running.  Note that this will only be called if you have
+     * selected configurations you would like to handle with the
      * {@link android.R.attr#configChanges} attribute in your manifest.  If
      * any configuration change occurs that is not selected to be reported
      * by that attribute, then instead of reporting it the system will stop
      * and restart the activity (to have it launched with the new
-     * configuration).
+     * configuration). The only exception is if a size-based configuration
+     * is not large enough to be considered significant, in which case the
+     * system will not recreate the activity and will instead call this
+     * method. For details on this see the documentation on
+     * <a href="{@docRoot}guide/topics/resources/runtime-changes.html">size-based config change</a>.
      *
      * <p>At the time that this function has been called, your Resources
      * object will have been updated to return resource values matching the
@@ -5445,14 +5449,14 @@
      * the signature of the app declaring the permissions.
      * </p>
      * <p>
-     * Call {@link #shouldShowRequestPermissionRationale(String)} before calling this API to
+     * Call {@link #shouldShowRequestPermissionRationale} before calling this API to
      * check if the system recommends to show a rationale UI before asking for a permission.
      * </p>
      * <p>
      * If your app does not have the requested permissions the user will be presented
      * with UI for accepting them. After the user has accepted or rejected the
      * requested permissions you will receive a callback on {@link
-     * #onRequestPermissionsResult(int, String[], int[])} reporting whether the
+     * #onRequestPermissionsResult} reporting whether the
      * permissions were granted or not.
      * </p>
      * <p>
@@ -5464,8 +5468,7 @@
      * to grant and which to reject. Hence, you should be prepared that your activity
      * may be paused and resumed. Further, granting some permissions may require
      * a restart of you application. In such a case, the system will recreate the
-     * activity stack before delivering the result to {@link
-     * #onRequestPermissionsResult(int, String[], int[])}.
+     * activity stack before delivering the result to {@link #onRequestPermissionsResult}.
      * </p>
      * <p>
      * When checking whether you have a permission you should use {@link
@@ -5475,7 +5478,7 @@
      * You cannot request a permission if your activity sets {@link
      * android.R.styleable#AndroidManifestActivity_noHistory noHistory} to
      * <code>true</code> because in this case the activity would not receive
-     * result callbacks including {@link #onRequestPermissionsResult(int, String[], int[])}.
+     * result callbacks including {@link #onRequestPermissionsResult}.
      * </p>
      * <p>
      * The <a href="https://github.com/android/platform-samples/tree/main/samples/privacy/permissions">
@@ -5483,18 +5486,89 @@
      * request permissions at run time.
      * </p>
      *
-     * @param permissions The requested permissions. Must me non-null and not empty.
+     * @param permissions The requested permissions. Must be non-null and not empty.
      * @param requestCode Application specific request code to match with a result
-     *    reported to {@link #onRequestPermissionsResult(int, String[], int[])}.
-     *    Should be >= 0.
+     *                    reported to {@link #onRequestPermissionsResult}.
+     *                    Should be >= 0.
      *
      * @throws IllegalArgumentException if requestCode is negative.
      *
-     * @see #onRequestPermissionsResult(int, String[], int[])
-     * @see #checkSelfPermission(String)
-     * @see #shouldShowRequestPermissionRationale(String)
+     * @see #onRequestPermissionsResult
+     * @see #checkSelfPermission
+     * @see #shouldShowRequestPermissionRationale
      */
     public final void requestPermissions(@NonNull String[] permissions, int requestCode) {
+        requestPermissions(permissions, requestCode, getDeviceId());
+    }
+
+    /**
+     * Requests permissions to be granted to this application. These permissions
+     * must be requested in your manifest, they should not be granted to your app,
+     * and they should have protection level {@link
+     * android.content.pm.PermissionInfo#PROTECTION_DANGEROUS dangerous}, regardless
+     * whether they are declared by the platform or a third-party app.
+     * <p>
+     * Normal permissions {@link android.content.pm.PermissionInfo#PROTECTION_NORMAL}
+     * are granted at install time if requested in the manifest. Signature permissions
+     * {@link android.content.pm.PermissionInfo#PROTECTION_SIGNATURE} are granted at
+     * install time if requested in the manifest and the signature of your app matches
+     * the signature of the app declaring the permissions.
+     * </p>
+     * <p>
+     * Call {@link #shouldShowRequestPermissionRationale} before calling this API to
+     * check if the system recommends to show a rationale UI before asking for a permission.
+     * </p>
+     * <p>
+     * If your app does not have the requested permissions the user will be presented
+     * with UI for accepting them. After the user has accepted or rejected the
+     * requested permissions you will receive a callback on {@link #onRequestPermissionsResult}
+     * reporting whether the permissions were granted or not.
+     * </p>
+     * <p>
+     * Note that requesting a permission does not guarantee it will be granted and
+     * your app should be able to run without having this permission.
+     * </p>
+     * <p>
+     * This method may start an activity allowing the user to choose which permissions
+     * to grant and which to reject. Hence, you should be prepared that your activity
+     * may be paused and resumed. Further, granting some permissions may require
+     * a restart of you application. In such a case, the system will recreate the
+     * activity stack before delivering the result to {@link #onRequestPermissionsResult}.
+     * </p>
+     * <p>
+     * When checking whether you have a permission you should use {@link
+     * #checkSelfPermission(String)}.
+     * </p>
+     * <p>
+     * You cannot request a permission if your activity sets {@link
+     * android.R.styleable#AndroidManifestActivity_noHistory noHistory} to
+     * <code>true</code> because in this case the activity would not receive
+     * result callbacks including {@link #onRequestPermissionsResult}.
+     * </p>
+     * <p>
+     * The <a href="https://github.com/android/platform-samples/tree/main/samples/privacy/permissions">
+     * permissions samples</a> repo demonstrates how to use this method to
+     * request permissions at run time.
+     * </p>
+     *
+     * @param permissions The requested permissions. Must be non-null and not empty.
+     * @param requestCode Application specific request code to match with a result
+     *                    reported to {@link #onRequestPermissionsResult}.
+     *                    Should be >= 0.
+     * @param deviceId The app is requesting permissions for this device. The primary/physical
+     *                 device is assigned {@link Context#DEVICE_ID_DEFAULT}, and {@link
+     *                 android.companion.virtual.VirtualDeviceManager.VirtualDevice virtual devices}
+     *                 are assigned unique device Ids.
+     *
+     * @throws IllegalArgumentException if requestCode is negative.
+     *
+     * @see #onRequestPermissionsResult
+     * @see #checkSelfPermission
+     * @see #shouldShowRequestPermissionRationale
+     * @see Context#DEVICE_ID_DEFAULT
+     */
+    public final void requestPermissions(@NonNull String[] permissions, int requestCode,
+            int deviceId) {
         if (requestCode < 0) {
             throw new IllegalArgumentException("requestCode should be >= 0");
         }
@@ -5502,7 +5576,7 @@
         if (mHasCurrentPermissionsRequest) {
             Log.w(TAG, "Can request only one set of permissions at a time");
             // Dispatch the callback with empty arrays which means a cancellation.
-            onRequestPermissionsResult(requestCode, new String[0], new int[0]);
+            onRequestPermissionsResult(requestCode, new String[0], new int[0], deviceId);
             return;
         }
 
@@ -5516,27 +5590,29 @@
             }
         }
 
-        final Intent intent = getPackageManager().buildRequestPermissionsIntent(permissions);
+        PackageManager packageManager = getDeviceId() == deviceId ? getPackageManager()
+                : createDeviceContext(deviceId).getPackageManager();
+        final Intent intent = packageManager.buildRequestPermissionsIntent(permissions);
         startActivityForResult(REQUEST_PERMISSIONS_WHO_PREFIX, intent, requestCode, null);
         mHasCurrentPermissionsRequest = true;
     }
 
     /**
      * Callback for the result from requesting permissions. This method
-     * is invoked for every call on {@link #requestPermissions(String[], int)}.
+     * is invoked for every call on {@link #requestPermissions}
      * <p>
      * <strong>Note:</strong> It is possible that the permissions request interaction
      * with the user is interrupted. In this case you will receive empty permissions
      * and results arrays which should be treated as a cancellation.
      * </p>
      *
-     * @param requestCode The request code passed in {@link #requestPermissions(String[], int)}.
+     * @param requestCode The request code passed in {@link #requestPermissions}.
      * @param permissions The requested permissions. Never null.
-     * @param grantResults The grant results for the corresponding permissions
-     *     which is either {@link android.content.pm.PackageManager#PERMISSION_GRANTED}
-     *     or {@link android.content.pm.PackageManager#PERMISSION_DENIED}. Never null.
+     * @param grantResults The grant results for the corresponding permissions which is either
+     *                     {@link android.content.pm.PackageManager#PERMISSION_GRANTED} or
+     *                     {@link android.content.pm.PackageManager#PERMISSION_DENIED}. Never null.
      *
-     * @see #requestPermissions(String[], int)
+     * @see #requestPermissions
      */
     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
             @NonNull int[] grantResults) {
@@ -5544,20 +5620,66 @@
     }
 
     /**
+     * Callback for the result from requesting permissions. This method
+     * is invoked for every call on {@link #requestPermissions}.
+     * <p>
+     * <strong>Note:</strong> It is possible that the permissions request interaction
+     * with the user is interrupted. In this case you will receive empty permissions
+     * and results arrays which should be treated as a cancellation.
+     * </p>
+     *
+     * @param requestCode The request code passed in {@link #requestPermissions}.
+     * @param permissions The requested permissions. Never null.
+     * @param grantResults The grant results for the corresponding permissions which is either
+     *                     {@link android.content.pm.PackageManager#PERMISSION_GRANTED} or
+     *                     {@link android.content.pm.PackageManager#PERMISSION_DENIED}. Never null.
+     * @param deviceId The deviceId for which permissions were requested. The primary/physical
+     *                 device is assigned {@link Context#DEVICE_ID_DEFAULT}, and {@link
+     *                 android.companion.virtual.VirtualDeviceManager.VirtualDevice virtual devices}
+     *                 are assigned unique device Ids.
+     *
+     * @see #requestPermissions
+     */
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
+            @NonNull int[] grantResults, int deviceId) {
+        onRequestPermissionsResult(requestCode, permissions, grantResults);
+    }
+
+    /**
      * Gets whether you should show UI with rationale before requesting a permission.
      *
      * @param permission A permission your app wants to request.
      * @return Whether you should show permission rationale UI.
      *
-     * @see #checkSelfPermission(String)
-     * @see #requestPermissions(String[], int)
-     * @see #onRequestPermissionsResult(int, String[], int[])
+     * @see #checkSelfPermission
+     * @see #requestPermissions
+     * @see #onRequestPermissionsResult
      */
     public boolean shouldShowRequestPermissionRationale(@NonNull String permission) {
         return getPackageManager().shouldShowRequestPermissionRationale(permission);
     }
 
     /**
+     * Gets whether you should show UI with rationale before requesting a permission.
+     *
+     * @param permission A permission your app wants to request.
+     * @param deviceId The app is requesting permissions for this device. The primary/physical
+     *                 device is assigned {@link Context#DEVICE_ID_DEFAULT}, and {@link
+     *                 android.companion.virtual.VirtualDeviceManager.VirtualDevice virtual devices}
+     *                 are assigned unique device Ids.
+     * @return Whether you should show permission rationale UI.
+     *
+     * @see #checkSelfPermission
+     * @see #requestPermissions
+     * @see #onRequestPermissionsResult
+     */
+    public boolean shouldShowRequestPermissionRationale(@NonNull String permission, int deviceId) {
+        final PackageManager packageManager = getDeviceId() == deviceId ? getPackageManager()
+                : createDeviceContext(deviceId).getPackageManager();
+        return packageManager.shouldShowRequestPermissionRationale(permission);
+    }
+
+    /**
      * Same as calling {@link #startActivityForResult(Intent, int, Bundle)}
      * with no options.
      *
@@ -9108,12 +9230,15 @@
 
     private void dispatchRequestPermissionsResult(int requestCode, Intent data) {
         mHasCurrentPermissionsRequest = false;
-        // If the package installer crashed we may have not data - best effort.
+        // If the package installer crashed we may have no data - best effort.
         String[] permissions = (data != null) ? data.getStringArrayExtra(
                 PackageManager.EXTRA_REQUEST_PERMISSIONS_NAMES) : new String[0];
         final int[] grantResults = (data != null) ? data.getIntArrayExtra(
                 PackageManager.EXTRA_REQUEST_PERMISSIONS_RESULTS) : new int[0];
-        onRequestPermissionsResult(requestCode, permissions, grantResults);
+        final int deviceId = (data != null) ? data.getIntExtra(
+                PackageManager.EXTRA_REQUEST_PERMISSIONS_DEVICE_ID, Context.DEVICE_ID_DEFAULT
+        ) : Context.DEVICE_ID_DEFAULT;
+        onRequestPermissionsResult(requestCode, permissions, grantResults, deviceId);
     }
 
     private void dispatchRequestPermissionsResultToFragment(int requestCode, Intent data,
@@ -9236,7 +9361,6 @@
      *
      * @param allowed {@code true} to disable the UID restrictions; {@code false} to revert back to
      *                            the default behaviour
-     * @hide
      */
     public void setAllowCrossUidActivitySwitchFromBelow(boolean allowed) {
         ActivityClient.getInstance().setAllowCrossUidActivitySwitchFromBelow(mToken, allowed);
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index ff0f437..b4f6d6f 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -72,6 +72,7 @@
 import android.os.Process;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -107,6 +108,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.concurrent.Executor;
+import java.util.function.Consumer;
 
 /**
  * <p>
@@ -193,6 +195,11 @@
      * @hide
      */
     public static final int INSTR_FLAG_INSTRUMENT_SDK_SANDBOX = 1 << 5;
+    /**
+     * Instrument an Sdk Sandbox process corresponding to an Sdk running inside the sandbox.
+     * @hide
+     */
+    public static final int INSTR_FLAG_INSTRUMENT_SDK_IN_SANDBOX = 1 << 6;
 
     static final class MyUidObserver extends UidObserver {
         final OnUidImportanceListener mListener;
@@ -3973,8 +3980,6 @@
      *
      * @return a list of {@link ApplicationStartInfo} records matching the criteria, sorted in
      *         the order from most recent to least recent.
-     *
-     * @hide
      */
     @NonNull
     public List<ApplicationStartInfo> getHistoricalProcessStartReasons(
@@ -4006,6 +4011,7 @@
      * @hide
      */
     @NonNull
+    @SystemApi
     @RequiresPermission(Manifest.permission.DUMP)
     public List<ApplicationStartInfo> getExternalHistoricalProcessStartReasons(
             @NonNull String packageName, @IntRange(from = 0) int maxNum) {
@@ -4019,18 +4025,6 @@
     }
 
     /**
-     * Callback to receive {@link ApplicationStartInfo} object once recording of startup related
-     * metrics is complete.
-     * Use with {@link #setApplicationStartInfoCompleteListener}.
-     *
-     * @hide
-     */
-    public interface ApplicationStartInfoCompleteListener {
-        /** {@link ApplicationStartInfo} is complete, no more info will be added. */
-        void onApplicationStartInfoComplete(@NonNull ApplicationStartInfo applicationStartInfo);
-    }
-
-    /**
      * Sets a callback to be notified when the {@link ApplicationStartInfo} records of this startup
      * are complete.
      *
@@ -4049,19 +4043,16 @@
      *                    complete. Will replace existing listener if one is already attached.
      *
      * @throws IllegalArgumentException if executor or listener are null.
-     *
-     * @hide
      */
-    public void setApplicationStartInfoCompleteListener(@NonNull final Executor executor,
-            @NonNull final ApplicationStartInfoCompleteListener listener) {
+    public void setApplicationStartInfoCompletionListener(@NonNull final Executor executor,
+            @NonNull final Consumer<ApplicationStartInfo> listener) {
         Preconditions.checkNotNull(executor, "executor cannot be null");
         Preconditions.checkNotNull(listener, "listener cannot be null");
         IApplicationStartInfoCompleteListener callback =
                 new IApplicationStartInfoCompleteListener.Stub() {
             @Override
             public void onApplicationStartInfoComplete(ApplicationStartInfo applicationStartInfo) {
-                executor.execute(() ->
-                        listener.onApplicationStartInfoComplete(applicationStartInfo));
+                executor.execute(() -> listener.accept(applicationStartInfo));
             }
         };
         try {
@@ -4072,13 +4063,42 @@
     }
 
     /**
-     * Removes the callback set by {@link #setApplicationStartInfoCompleteListener} if there is one.
-     *
-     * @hide
+     * Removes the callback set by {@link #setApplicationStartInfoCompletionListener} if there is one.
      */
-    public void removeApplicationStartInfoCompleteListener() {
+    public void clearApplicationStartInfoCompletionListener() {
         try {
-            getService().removeApplicationStartInfoCompleteListener(mContext.getUserId());
+            getService().clearApplicationStartInfoCompleteListener(mContext.getUserId());
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Adds an optional developer supplied timestamp to the calling apps most recent
+     * {@link ApplicationStartInfo}. This is in addition to system recorded timestamps.
+     *
+     * <p class="note"> Note: timestamps added after {@link Activity#reportFullyDrawn} is called
+     * will be discarded.</p>
+     *
+     * <p class="note"> Note: will overwrite existing timestamp if called with same key.</p>
+     *
+     * @param key         Unique key for timestamp. Must be greater than
+     *                    {@link ApplicationStartInfo#START_TIMESTAMP_RESERVED_RANGE_SYSTEM} and
+     *                    less than or equal to
+     *                    {@link ApplicationStartInfo#START_TIMESTAMP_RESERVED_RANGE_DEVELOPER}.
+     *                    Will thow {@link java.lang.IllegalArgumentException} if not in range.
+     * @param timestampNs Clock monotonic time in nanoseconds of event to be recorded.
+     */
+    public void addStartInfoTimestamp(@IntRange(
+            from = ApplicationStartInfo.START_TIMESTAMP_RESERVED_RANGE_DEVELOPER_START,
+            to = ApplicationStartInfo.START_TIMESTAMP_RESERVED_RANGE_DEVELOPER) int key,
+            long timestampNs) {
+        if (key <= ApplicationStartInfo.START_TIMESTAMP_RESERVED_RANGE_SYSTEM
+                || key > ApplicationStartInfo.START_TIMESTAMP_RESERVED_RANGE_DEVELOPER) {
+            throw new IllegalArgumentException("Key not in allowed range.");
+        }
+        try {
+            getService().addStartInfoTimestamp(key, timestampNs, mContext.getUserId());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -4694,8 +4714,14 @@
     @UnsupportedAppUsage
     public static int checkComponentPermission(String permission, int uid,
             int owningUid, boolean exported) {
+        return checkComponentPermission(permission, uid, Context.DEVICE_ID_DEFAULT,
+                owningUid, exported);
+    }
+
+    /** @hide */
+    public static int checkComponentPermission(String permission, int uid, int deviceId,
+            int owningUid, boolean exported) {
         // Root, system server get to do everything.
-        final int appId = UserHandle.getAppId(uid);
         if (canAccessUnexportedComponents(uid)) {
             return PackageManager.PERMISSION_GRANTED;
         }
@@ -4722,8 +4748,7 @@
             return PackageManager.PERMISSION_GRANTED;
         }
         try {
-            return AppGlobals.getPackageManager()
-                    .checkUidPermission(permission, uid);
+            return AppGlobals.getPermissionManager().checkUidPermission(uid, permission, deviceId);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -4732,8 +4757,8 @@
     /** @hide */
     public static int checkUidPermission(String permission, int uid) {
         try {
-            return AppGlobals.getPackageManager()
-                    .checkUidPermission(permission, uid);
+            return AppGlobals.getPermissionManager().checkUidPermission(
+                    uid, permission, Context.DEVICE_ID_DEFAULT);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index ba26457..a09d7dc 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -121,6 +121,8 @@
 import android.os.Build;
 import android.os.Bundle;
 import android.os.CancellationSignal;
+import android.os.DdmSyncStageUpdater;
+import android.os.DdmSyncState.Stage;
 import android.os.Debug;
 import android.os.Environment;
 import android.os.FileUtils;
@@ -201,7 +203,9 @@
 import android.window.SizeConfigurationBuckets;
 import android.window.SplashScreen;
 import android.window.SplashScreenView;
+import android.window.WindowContextInfo;
 import android.window.WindowProviderService;
+import android.window.WindowTokenClientController;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
@@ -267,6 +271,9 @@
  */
 public final class ActivityThread extends ClientTransactionHandler
         implements ActivityThreadInternal {
+
+    private final DdmSyncStageUpdater mDdmSyncStageUpdater = new DdmSyncStageUpdater();
+
     /** @hide */
     public static final String TAG = "ActivityThread";
     static final boolean localLOGV = false;
@@ -881,6 +888,7 @@
         ApplicationInfo appInfo;
         String sdkSandboxClientAppVolumeUuid;
         String sdkSandboxClientAppPackage;
+        boolean isSdkInSandbox;
         @UnsupportedAppUsage
         List<ProviderInfo> providers;
         ComponentName instrumentationName;
@@ -1104,6 +1112,10 @@
             s.token = token;
             s.info = info;
 
+            if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) {
+                Trace.instant(Trace.TRACE_TAG_ACTIVITY_MANAGER, "scheduleCreateService. token="
+                        + token);
+            }
             sendMessage(H.CREATE_SERVICE, s);
         }
 
@@ -1119,6 +1131,11 @@
             if (DEBUG_SERVICE)
                 Slog.v(TAG, "scheduleBindService token=" + token + " intent=" + intent + " uid="
                         + Binder.getCallingUid() + " pid=" + Binder.getCallingPid());
+
+            if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) {
+                Trace.instant(Trace.TRACE_TAG_ACTIVITY_MANAGER, "scheduleBindService. token="
+                        + token + " bindSeq=" + bindSeq);
+            }
             sendMessage(H.BIND_SERVICE, s);
         }
 
@@ -1128,6 +1145,10 @@
             s.intent = intent;
             s.bindSeq = -1;
 
+            if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) {
+                Trace.instant(Trace.TRACE_TAG_ACTIVITY_MANAGER, "scheduleUnbindService. token="
+                        + token);
+            }
             sendMessage(H.UNBIND_SERVICE, s);
         }
 
@@ -1143,16 +1164,28 @@
                 s.flags = ssa.flags;
                 s.args = ssa.args;
 
+                if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) {
+                    Trace.instant(Trace.TRACE_TAG_ACTIVITY_MANAGER, "scheduleServiceArgs. token="
+                            + token + " startId=" + s.startId);
+                }
                 sendMessage(H.SERVICE_ARGS, s);
             }
         }
 
         public final void scheduleStopService(IBinder token) {
+            if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) {
+                Trace.instant(Trace.TRACE_TAG_ACTIVITY_MANAGER, "scheduleStopService. token="
+                        + token);
+            }
             sendMessage(H.STOP_SERVICE, token);
         }
 
         @Override
         public final void scheduleTimeoutService(IBinder token, int startId) {
+            if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) {
+                Trace.instant(Trace.TRACE_TAG_ACTIVITY_MANAGER, "scheduleTimeoutService. token="
+                        + token);
+            }
             sendMessage(H.TIMEOUT_SERVICE, token, startId);
         }
 
@@ -1162,19 +1195,34 @@
         }
 
         @Override
-        public final void bindApplication(String processName, ApplicationInfo appInfo,
-                String sdkSandboxClientAppVolumeUuid, String sdkSandboxClientAppPackage,
-                ProviderInfoList providerList, ComponentName instrumentationName,
-                ProfilerInfo profilerInfo, Bundle instrumentationArgs,
+        public final void bindApplication(
+                String processName,
+                ApplicationInfo appInfo,
+                String sdkSandboxClientAppVolumeUuid,
+                String sdkSandboxClientAppPackage,
+                boolean isSdkInSandbox,
+                ProviderInfoList providerList,
+                ComponentName instrumentationName,
+                ProfilerInfo profilerInfo,
+                Bundle instrumentationArgs,
                 IInstrumentationWatcher instrumentationWatcher,
-                IUiAutomationConnection instrumentationUiConnection, int debugMode,
-                boolean enableBinderTracking, boolean trackAllocation,
-                boolean isRestrictedBackupMode, boolean persistent, Configuration config,
-                CompatibilityInfo compatInfo, Map services, Bundle coreSettings,
-                String buildSerial, AutofillOptions autofillOptions,
-                ContentCaptureOptions contentCaptureOptions, long[] disabledCompatChanges,
+                IUiAutomationConnection instrumentationUiConnection,
+                int debugMode,
+                boolean enableBinderTracking,
+                boolean trackAllocation,
+                boolean isRestrictedBackupMode,
+                boolean persistent,
+                Configuration config,
+                CompatibilityInfo compatInfo,
+                Map services,
+                Bundle coreSettings,
+                String buildSerial,
+                AutofillOptions autofillOptions,
+                ContentCaptureOptions contentCaptureOptions,
+                long[] disabledCompatChanges,
                 SharedMemory serializedSystemFontMap,
-                long startRequestedElapsedTime, long startRequestedUptime) {
+                long startRequestedElapsedTime,
+                long startRequestedUptime) {
             if (services != null) {
                 if (false) {
                     // Test code to make sure the app could see the passed-in services.
@@ -1208,6 +1256,7 @@
             data.appInfo = appInfo;
             data.sdkSandboxClientAppVolumeUuid = sdkSandboxClientAppVolumeUuid;
             data.sdkSandboxClientAppPackage = sdkSandboxClientAppPackage;
+            data.isSdkInSandbox = isSdkInSandbox;
             data.providers = providerList.getList();
             data.instrumentationName = instrumentationName;
             data.instrumentationArgs = instrumentationArgs;
@@ -6199,6 +6248,17 @@
                 false /* clearPending */);
     }
 
+    @Override
+    public void handleWindowContextInfoChanged(@NonNull IBinder clientToken,
+            @NonNull WindowContextInfo info) {
+        WindowTokenClientController.getInstance().onWindowContextInfoChanged(clientToken, info);
+    }
+
+    @Override
+    public void handleWindowContextWindowRemoval(@NonNull IBinder clientToken) {
+        WindowTokenClientController.getInstance().onWindowContextWindowRemoved(clientToken);
+    }
+
     /**
      * Sends windowing mode change callbacks to {@link Activity} if applicable.
      *
@@ -6688,6 +6748,8 @@
 
     @UnsupportedAppUsage
     private void handleBindApplication(AppBindData data) {
+        mDdmSyncStageUpdater.next(Stage.Bind);
+
         // Register the UI Thread as a sensitive thread to the runtime.
         VMRuntime.registerSensitiveThread();
         // In the case the stack depth property exists, pass it down to the runtime.
@@ -6737,6 +6799,7 @@
                                                 data.appInfo.packageName,
                                                 UserHandle.myUserId());
         VMRuntime.setProcessPackageName(data.appInfo.packageName);
+        mDdmSyncStageUpdater.next(Stage.Named);
 
         // Pass data directory path to ART. This is used for caching information and
         // should be set before any application code is loaded.
@@ -6941,6 +7004,7 @@
         final StrictMode.ThreadPolicy writesAllowedPolicy = StrictMode.getThreadPolicy();
 
         if (data.debugMode != ApplicationThreadConstants.DEBUG_OFF) {
+            mDdmSyncStageUpdater.next(Stage.Debugger);
             if (data.debugMode == ApplicationThreadConstants.DEBUG_WAIT) {
                 waitForDebugger(data);
             } else if (data.debugMode == ApplicationThreadConstants.DEBUG_SUSPEND) {
@@ -6948,6 +7012,7 @@
             }
             // Nothing special to do in case of DEBUG_ON.
         }
+        mDdmSyncStageUpdater.next(Stage.Running);
 
         try {
             // If the app is being launched for full backup or restore, bring it up in
@@ -7199,8 +7264,14 @@
         // The test context's op package name == the target app's op package name, because
         // the app ops manager checks the op package name against the real calling UID,
         // which is what the target package name is associated with.
-        final ContextImpl instrContext = ContextImpl.createAppContext(this, pi,
-                appContext.getOpPackageName());
+        // In the case of instrumenting an sdk running in the sdk sandbox, appContext refers
+        // to the context of the sdk running in the sandbox. Since the sandbox does not have
+        // access to data outside the sandbox, we require the instrContext to point to the
+        // sdk in the sandbox as well, and not to the test context.
+        final ContextImpl instrContext =
+                (data.isSdkInSandbox)
+                        ? appContext
+                        : ContextImpl.createAppContext(this, pi, appContext.getOpPackageName());
 
         try {
             final ClassLoader cl = instrContext.getClassLoader();
@@ -7847,6 +7918,7 @@
         mConfigurationController = new ConfigurationController(this);
         mSystemThread = system;
         mStartSeq = startSeq;
+        mDdmSyncStageUpdater.next(Stage.Attach);
 
         if (!system) {
             android.ddm.DdmHandleAppName.setAppName("<pre-initialized>",
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index ccd83f7..56fef1a 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -1477,9 +1477,26 @@
     public static final int OP_RECORD_AUDIO_SANDBOXED =
             AppProtoEnums.APP_OP_RECORD_AUDIO_SANDBOXED;
 
+    /**
+     * Allows the assistant app to receive the PCC-validated hotword and be voice-triggered.
+     *
+     * @hide
+     */
+    public static final int OP_RECEIVE_SANDBOX_TRIGGER_AUDIO =
+            AppProtoEnums.APP_OP_RECEIVE_SANDBOX_TRIGGER_AUDIO;
+
+    /**
+     * Allows the assistant app to get the negative trigger data from the PCC sandbox to improve the
+     * hotword training model.
+     *
+     * @hide
+     */
+    public static final int OP_RECEIVE_SANDBOX_NEGATIVE_DATA_AUDIO =
+            AppProtoEnums.APP_OP_RECEIVE_SANDBOX_NEGATIVE_DATA_AUDIO;
+
     /** @hide */
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
-    public static final int _NUM_OP = 136;
+    public static final int _NUM_OP = 138;
 
     /**
      * All app ops represented as strings.
@@ -1621,7 +1638,9 @@
             OPSTR_CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD,
             OPSTR_USE_FULL_SCREEN_INTENT,
             OPSTR_CAMERA_SANDBOXED,
-            OPSTR_RECORD_AUDIO_SANDBOXED
+            OPSTR_RECORD_AUDIO_SANDBOXED,
+            OPSTR_RECEIVE_SANDBOX_TRIGGER_AUDIO,
+            OPSTR_RECEIVE_SANDBOX_NEGATIVE_DATA_AUDIO
     })
     public @interface AppOpString {}
 
@@ -2232,6 +2251,24 @@
      */
     public static final String OPSTR_USE_FULL_SCREEN_INTENT = "android:use_full_screen_intent";
 
+    /**
+     * Allows the assistant app to receive the PCC-validated hotword and be voice-triggered.
+     *
+     * @hide
+     */
+    @SystemApi
+    public static final String OPSTR_RECEIVE_SANDBOX_TRIGGER_AUDIO =
+            "android:receive_sandbox_trigger_audio";
+
+    /**
+     * Allows the assistant app to get the negative trigger data from the PCC sandbox to improve
+     * the hotword training model.
+     *
+     * @hide
+     */
+    public static final String OPSTR_RECEIVE_SANDBOX_NEGATIVE_DATA_AUDIO =
+            "android:receive_sandbox_negative_data_audio";
+
     /** {@link #sAppOpsToNote} not initialized yet for this op */
     private static final byte SHOULD_COLLECT_NOTE_OP_NOT_INITIALIZED = 0;
     /** Should not collect noting of this app-op in {@link #sAppOpsToNote} */
@@ -2317,6 +2354,7 @@
             OP_ACCESS_NOTIFICATIONS,
             OP_SYSTEM_ALERT_WINDOW,
             OP_WRITE_SETTINGS,
+            OP_GET_USAGE_STATS,
             OP_REQUEST_INSTALL_PACKAGES,
             OP_START_FOREGROUND,
             OP_SMS_FINANCIAL_TRANSACTIONS,
@@ -2768,7 +2806,14 @@
         new AppOpInfo.Builder(OP_CAMERA_SANDBOXED, OPSTR_CAMERA_SANDBOXED,
             "CAMERA_SANDBOXED").setDefaultMode(AppOpsManager.MODE_ALLOWED).build(),
         new AppOpInfo.Builder(OP_RECORD_AUDIO_SANDBOXED, OPSTR_RECORD_AUDIO_SANDBOXED,
-                "RECORD_AUDIO_SANDBOXED").setDefaultMode(AppOpsManager.MODE_ALLOWED).build()
+                "RECORD_AUDIO_SANDBOXED").setDefaultMode(AppOpsManager.MODE_ALLOWED).build(),
+        new AppOpInfo.Builder(OP_RECEIVE_SANDBOX_TRIGGER_AUDIO,
+                OPSTR_RECEIVE_SANDBOX_TRIGGER_AUDIO,
+                "RECEIVE_SANDBOX_TRIGGER_AUDIO")
+                .setDefaultMode(AppOpsManager.MODE_ALLOWED).build(),
+        new AppOpInfo.Builder(OP_RECEIVE_SANDBOX_NEGATIVE_DATA_AUDIO,
+                OPSTR_RECEIVE_SANDBOX_NEGATIVE_DATA_AUDIO,
+                "RECEIVE_SANDBOX_NEGATIVE_DATA_AUDIO").build()
     };
 
     // The number of longs needed to form a full bitmask of app ops
diff --git a/core/java/android/app/ApplicationExitInfo.java b/core/java/android/app/ApplicationExitInfo.java
index d859f3f..7b3d017 100644
--- a/core/java/android/app/ApplicationExitInfo.java
+++ b/core/java/android/app/ApplicationExitInfo.java
@@ -460,6 +460,14 @@
      */
     public static final int SUBREASON_SDK_SANDBOX_NOT_NEEDED = 28;
 
+    /**
+     * The process was killed because the binder proxy limit for system server was exceeded.
+     *
+     * For internal use only.
+     * @hide
+     */
+    public static final int SUBREASON_EXCESSIVE_BINDER_OBJECTS = 29;
+
     // If there is any OEM code which involves additional app kill reasons, it should
     // be categorized in {@link #REASON_OTHER}, with subreason code starting from 1000.
 
@@ -635,6 +643,7 @@
         SUBREASON_KILL_BACKGROUND,
         SUBREASON_PACKAGE_UPDATE,
         SUBREASON_UNDELIVERED_BROADCAST,
+        SUBREASON_EXCESSIVE_BINDER_OBJECTS,
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface SubReason {}
@@ -1360,6 +1369,8 @@
                 return "PACKAGE UPDATE";
             case SUBREASON_UNDELIVERED_BROADCAST:
                 return "UNDELIVERED BROADCAST";
+            case SUBREASON_EXCESSIVE_BINDER_OBJECTS:
+                return "EXCESSIVE BINDER OBJECTS";
             default:
                 return "UNKNOWN";
         }
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 0ba56b9..9121cf0 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -91,6 +91,7 @@
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.IRemoteCallback;
 import android.os.Looper;
 import android.os.Message;
 import android.os.ParcelFileDescriptor;
@@ -826,7 +827,8 @@
 
     @Override
     public int checkPermission(String permName, String pkgName) {
-        return PermissionManager.checkPackageNamePermission(permName, pkgName, getUserId());
+        return PermissionManager.checkPackageNamePermission(permName, pkgName,
+                mContext.getDeviceId(), getUserId());
     }
 
     @Override
@@ -942,6 +944,13 @@
     }
 
     @Override
+    public Intent buildRequestPermissionsIntent(@NonNull String[] permissions) {
+        Intent intent = super.buildRequestPermissionsIntent(permissions);
+        intent.putExtra(EXTRA_REQUEST_PERMISSIONS_DEVICE_ID, mContext.getDeviceId());
+        return intent;
+    }
+
+    @Override
     public CharSequence getBackgroundPermissionOptionLabel() {
         try {
 
@@ -3911,4 +3920,24 @@
             throw e.rethrowFromSystemServer();
         }
     }
+
+    @Override
+    public void registerPackageMonitorCallback(@NonNull IRemoteCallback callback, int userId) {
+        Objects.requireNonNull(callback);
+        try {
+            mPM.registerPackageMonitorCallback(callback, userId);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    @Override
+    public void unregisterPackageMonitorCallback(@NonNull IRemoteCallback callback) {
+        Objects.requireNonNull(callback);
+        try {
+            mPM.unregisterPackageMonitorCallback(callback);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
 }
diff --git a/core/java/android/app/ApplicationStartInfo.java b/core/java/android/app/ApplicationStartInfo.java
index 5e2a4ca..f5fb6ed 100644
--- a/core/java/android/app/ApplicationStartInfo.java
+++ b/core/java/android/app/ApplicationStartInfo.java
@@ -21,20 +21,21 @@
 import android.annotation.Nullable;
 import android.annotation.SuppressLint;
 import android.content.Intent;
+import android.icu.text.SimpleDateFormat;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.os.UserHandle;
+import android.util.ArrayMap;
 
-import java.lang.annotation.ElementType;
+import java.io.PrintWriter;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * Provide information related to a processes startup.
- *
- * @hide
  */
 public final class ApplicationStartInfo implements Parcelable {
 
@@ -78,14 +79,14 @@
     /** Process started due to click app icon or widget from launcher. */
     public static final int START_REASON_LAUNCHER = 6;
 
+    /** Process started from launcher recents. */
+    public static final int START_REASON_LAUNCHER_RECENTS = 7;
+
     /** Process started not for any of the listed reasons. */
-    public static final int START_REASON_OTHER = 7;
+    public static final int START_REASON_OTHER = 8;
 
     /** Process started due to push message. */
-    public static final int START_REASON_PUSH = 8;
-
-    /** Process started to resume activity. */
-    public static final int START_REASON_RESUMED_ACTIVITY = 9;
+    public static final int START_REASON_PUSH = 9;
 
     /** Process service started. */
     public static final int START_REASON_SERVICE = 10;
@@ -136,11 +137,21 @@
      */
     public static final int LAUNCH_MODE_SINGLE_INSTANCE_PER_TASK = 4;
 
+    /** The end of the range, beginning with 0, reserved for system timestamps.*/
+    public static final int START_TIMESTAMP_RESERVED_RANGE_SYSTEM = 20;
+
+    /** The beginning of the range reserved for developer supplied timestamps.*/
+    public static final int START_TIMESTAMP_RESERVED_RANGE_DEVELOPER_START =
+            START_TIMESTAMP_RESERVED_RANGE_SYSTEM + 1;
+
+    /** The end of the range reserved for developer supplied timestamps.*/
+    public static final int START_TIMESTAMP_RESERVED_RANGE_DEVELOPER = 30;
+
     /** Clock monotonic timestamp of launch started. */
     public static final int START_TIMESTAMP_LAUNCH = 0;
 
-    /** Clock monotonic timestamp of finish java classloading. */
-    public static final int START_TIMESTAMP_JAVA_CLASSLOADING_COMPLETE = 1;
+    /** Clock monotonic timestamp of process fork. */
+    public static final int START_TIMESTAMP_FORK = 1;
 
     /** Clock monotonic timestamp of Application onCreate called. */
     public static final int START_TIMESTAMP_APPLICATION_ONCREATE = 2;
@@ -154,6 +165,12 @@
     /** Clock monotonic timestamp of reportFullyDrawn called by application. */
     public static final int START_TIMESTAMP_FULLY_DRAWN = 5;
 
+    /** Clock monotonic timestamp of initial renderthread frame. */
+    public static final int START_TIMESTAMP_INITIAL_RENDERTHREAD_FRAME = 6;
+
+    /** Clock monotonic timestamp of surfaceflinger composition complete. */
+    public static final int START_TIMESTAMP_SURFACEFLINGER_COMPOSITION_COMPLETE = 7;
+
     /**
      * @see #getStartupState
      */
@@ -192,7 +209,7 @@
     /**
      * @see #getStartupTimestamps
      */
-    private Map<@StartupTimestamp Integer, Long> mStartupTimestampsNs;
+    private ArrayMap<Integer, Long> mStartupTimestampsNs;
 
     /**
      * @see #getStartType
@@ -235,9 +252,9 @@
                 START_REASON_CONTENT_PROVIDER,
                 START_REASON_JOB,
                 START_REASON_LAUNCHER,
+                START_REASON_LAUNCHER_RECENTS,
                 START_REASON_OTHER,
                 START_REASON_PUSH,
-                START_REASON_RESUMED_ACTIVITY,
                 START_REASON_SERVICE,
                 START_REASON_START_ACTIVITY,
             })
@@ -273,22 +290,6 @@
     public @interface LaunchMode {}
 
     /**
-     * @hide *
-     */
-    @IntDef(
-            prefix = {"START_TIMESTAMP_"},
-            value = {
-                START_TIMESTAMP_LAUNCH,
-                START_TIMESTAMP_JAVA_CLASSLOADING_COMPLETE,
-                START_TIMESTAMP_APPLICATION_ONCREATE,
-                START_TIMESTAMP_BIND_APPLICATION,
-                START_TIMESTAMP_FULLY_DRAWN,
-            })
-    @Retention(RetentionPolicy.SOURCE)
-    @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
-    public @interface StartupTimestamp {}
-
-    /**
      * @see #getStartupState
      * @hide
      */
@@ -348,9 +349,12 @@
      * @see #getStartupTimestamps
      * @hide
      */
-    public void addStartupTimestamp(@StartupTimestamp int key, long timestampNs) {
+    public void addStartupTimestamp(int key, long timestampNs) {
+        if (key < 0 || key > START_TIMESTAMP_RESERVED_RANGE_DEVELOPER) {
+            return;
+        }
         if (mStartupTimestampsNs == null) {
-            mStartupTimestampsNs = new HashMap<@StartupTimestamp Integer, Long>();
+            mStartupTimestampsNs = new ArrayMap<Integer, Long>();
         }
         mStartupTimestampsNs.put(key, timestampNs);
     }
@@ -475,9 +479,9 @@
      * dependant on devloper calling {@link Activity#reportFullyDrawn}.
      * </p>
      */
-    public @NonNull Map<@StartupTimestamp Integer, Long> getStartupTimestamps() {
+    public @NonNull Map<Integer, Long> getStartupTimestamps() {
         if (mStartupTimestampsNs == null) {
-            mStartupTimestampsNs = new HashMap<@StartupTimestamp Integer, Long>();
+            mStartupTimestampsNs = new ArrayMap<Integer, Long>();
         }
         return mStartupTimestampsNs;
     }
@@ -536,9 +540,12 @@
         dest.writeString(mProcessName);
         dest.writeInt(mReason);
         dest.writeInt(mStartupTimestampsNs.size());
-        for (@StartupTimestamp int key : mStartupTimestampsNs.keySet()) {
-            dest.writeInt(key);
-            dest.writeLong(mStartupTimestampsNs.get(key));
+        Set<Map.Entry<Integer, Long>> timestampEntrySet = mStartupTimestampsNs.entrySet();
+        Iterator<Map.Entry<Integer, Long>> iter = timestampEntrySet.iterator();
+        while (iter.hasNext()) {
+            Map.Entry<Integer, Long> entry = iter.next();
+            dest.writeInt(entry.getKey());
+            dest.writeLong(entry.getValue());
         }
         dest.writeInt(mStartType);
         dest.writeParcelable(mStartIntent, flags);
@@ -599,4 +606,67 @@
                     return new ApplicationStartInfo[size];
                 }
             };
+
+    /** @hide */
+    public void dump(@NonNull PrintWriter pw, @Nullable String prefix, @Nullable String seqSuffix,
+            @NonNull SimpleDateFormat sdf) {
+        StringBuilder sb = new StringBuilder();
+        sb.append(prefix)
+                .append("ApplicationStartInfo ").append(seqSuffix).append(':')
+                .append('\n')
+                .append(" pid=").append(mPid)
+                .append(" realUid=").append(mRealUid)
+                .append(" packageUid=").append(mPackageUid)
+                .append(" definingUid=").append(mDefiningUid)
+                .append(" user=").append(UserHandle.getUserId(mPackageUid))
+                .append('\n')
+                .append(" process=").append(mProcessName)
+                .append(" startupState=").append(mStartupState)
+                .append(" reason=").append(reasonToString(mReason))
+                .append(" startType=").append(startTypeToString(mStartType))
+                .append(" launchMode=").append(mLaunchMode)
+                .append('\n');
+        if (mStartIntent != null) {
+            sb.append(" intent=").append(mStartIntent.toString())
+                .append('\n');
+        }
+        if (mStartupTimestampsNs.size() > 0) {
+            sb.append(" timestamps: ");
+            Set<Map.Entry<Integer, Long>> timestampEntrySet = mStartupTimestampsNs.entrySet();
+            Iterator<Map.Entry<Integer, Long>> iter = timestampEntrySet.iterator();
+            while (iter.hasNext()) {
+                Map.Entry<Integer, Long> entry = iter.next();
+                sb.append(entry.getKey()).append("=").append(entry.getValue()).append(" ");
+            }
+            sb.append('\n');
+        }
+        pw.print(sb.toString());
+    }
+
+    private static String reasonToString(@StartReason int reason) {
+        return switch (reason) {
+            case START_REASON_ALARM -> "ALARM";
+            case START_REASON_BACKUP -> "BACKUP";
+            case START_REASON_BOOT_COMPLETE -> "BOOT COMPLETE";
+            case START_REASON_BROADCAST -> "BROADCAST";
+            case START_REASON_CONTENT_PROVIDER -> "CONTENT PROVIDER";
+            case START_REASON_JOB -> "JOB";
+            case START_REASON_LAUNCHER -> "LAUNCHER";
+            case START_REASON_LAUNCHER_RECENTS -> "LAUNCHER RECENTS";
+            case START_REASON_OTHER -> "OTHER";
+            case START_REASON_PUSH -> "PUSH";
+            case START_REASON_SERVICE -> "SERVICE";
+            case START_REASON_START_ACTIVITY -> "START ACTIVITY";
+            default -> "";
+        };
+    }
+
+    private static String startTypeToString(@StartType int startType) {
+        return switch (startType) {
+            case START_TYPE_COLD -> "COLD";
+            case START_TYPE_WARM -> "WARM";
+            case START_TYPE_HOT -> "HOT";
+            default -> "";
+        };
+    }
 }
diff --git a/core/java/android/app/ClientTransactionHandler.java b/core/java/android/app/ClientTransactionHandler.java
index 49fb794..6753cb8 100644
--- a/core/java/android/app/ClientTransactionHandler.java
+++ b/core/java/android/app/ClientTransactionHandler.java
@@ -28,6 +28,7 @@
 import android.util.MergedConfiguration;
 import android.view.SurfaceControl;
 import android.window.SplashScreenView.SplashScreenViewParcelable;
+import android.window.WindowContextInfo;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.content.ReferrerIntent;
@@ -163,6 +164,13 @@
     public abstract void handleActivityConfigurationChanged(@NonNull ActivityClientRecord r,
             Configuration overrideConfig, int displayId);
 
+    /** Deliver {@link android.window.WindowContextInfo} change. */
+    public abstract void handleWindowContextInfoChanged(@NonNull IBinder clientToken,
+            @NonNull WindowContextInfo info);
+
+    /** Deliver {@link android.window.WindowContext} window removal event. */
+    public abstract void handleWindowContextWindowRemoval(@NonNull IBinder clientToken);
+
     /** Deliver result from another activity. */
     public abstract void handleSendResult(
             @NonNull ActivityClientRecord r, List<ResultInfo> results, String reason);
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 82f4315..5feafbe 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -96,6 +96,7 @@
 import android.view.autofill.AutofillManager.AutofillClient;
 import android.window.WindowContext;
 import android.window.WindowTokenClient;
+import android.window.WindowTokenClientController;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.Preconditions;
@@ -2262,7 +2263,7 @@
             Log.v(TAG, "Treating renounced permission " + permission + " as denied");
             return PERMISSION_DENIED;
         }
-        return PermissionManager.checkPermission(permission, pid, uid);
+        return PermissionManager.checkPermission(permission, pid, uid, getDeviceId());
     }
 
     /** @hide */
@@ -3276,7 +3277,8 @@
         // if this Context is not a WindowContext. WindowContext finalization is handled in
         // WindowContext class.
         if (mToken instanceof WindowTokenClient && mOwnsToken) {
-            ((WindowTokenClient) mToken).detachFromWindowContainerIfNeeded();
+            WindowTokenClientController.getInstance().detachIfNeeded(
+                    (WindowTokenClient) mToken);
         }
         super.finalize();
     }
@@ -3304,7 +3306,7 @@
         final WindowTokenClient token = new WindowTokenClient();
         final ContextImpl context = systemContext.createWindowContextBase(token, displayId);
         token.attachContext(context);
-        token.attachToDisplayContent(displayId);
+        WindowTokenClientController.getInstance().attachToDisplayContent(token, displayId);
         context.mContextType = CONTEXT_TYPE_SYSTEM_OR_SYSTEM_UI;
         context.mOwnsToken = true;
 
@@ -3463,7 +3465,7 @@
         AttributionSource attributionSource = new AttributionSource(Process.myUid(),
                 Process.myPid(), mOpPackageName, attributionTag,
                 (renouncedPermissions != null) ? renouncedPermissions.toArray(new String[0]) : null,
-                nextAttributionSource);
+                getDeviceId(), nextAttributionSource);
         // If we want to access protected data on behalf of another app we need to
         // tell the OS that we opt in to participate in the attribution chain.
         if (nextAttributionSource != null) {
@@ -3478,6 +3480,16 @@
             ((CompatResources) r).setContext(this);
         }
         mResources = r;
+
+        // only do this if the user already has more than one preferred locale
+        if (r.getConfiguration().getLocales().size() > 1) {
+            LocaleConfig lc = LocaleConfig.fromContextIgnoringOverride(this);
+            mResourcesManager.setLocaleList(lc != null
+                    && lc.getSupportedLocales() != null
+                    && !lc.getSupportedLocales().isEmpty()
+                    ? lc.getSupportedLocales()
+                    : null);
+        }
     }
 
     void installSystemApplicationInfo(ApplicationInfo info, ClassLoader classLoader) {
diff --git a/core/java/android/app/HomeVisibilityListener.java b/core/java/android/app/HomeVisibilityListener.java
index ca20648..0b5a5ed1 100644
--- a/core/java/android/app/HomeVisibilityListener.java
+++ b/core/java/android/app/HomeVisibilityListener.java
@@ -25,6 +25,7 @@
 import android.annotation.TestApi;
 import android.content.Context;
 import android.os.Binder;
+import android.util.Log;
 
 import java.util.List;
 import java.util.concurrent.Executor;
@@ -40,6 +41,8 @@
 @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
 @TestApi
 public abstract class HomeVisibilityListener {
+    private static final String TAG = HomeVisibilityListener.class.getSimpleName();
+    private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
     private ActivityTaskManager mActivityTaskManager;
     private Executor mExecutor;
     private int mMaxScanTasksForHomeVisibility;
@@ -102,6 +105,11 @@
 
         for (int i = 0, taskSize = tasksTopToBottom.size(); i < taskSize; ++i) {
             ActivityManager.RunningTaskInfo task = tasksTopToBottom.get(i);
+            if (DBG) {
+                Log.d(TAG, "Task#" + i + ": activity=" + task.topActivity
+                        + ", visible=" + task.isVisible()
+                        + ", flg=" + Integer.toHexString(task.baseIntent.getFlags()));
+            }
             if (!task.isVisible()
                     || (task.baseIntent.getFlags() & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0) {
                 continue;
diff --git a/core/java/android/app/IActivityManager.aidl b/core/java/android/app/IActivityManager.aidl
index 46260ea..03baf26 100644
--- a/core/java/android/app/IActivityManager.aidl
+++ b/core/java/android/app/IActivityManager.aidl
@@ -724,7 +724,20 @@
      *
      * @param userId      The userId in the multi-user environment.
      */
-    void removeApplicationStartInfoCompleteListener(int userId);
+    void clearApplicationStartInfoCompleteListener(int userId);
+
+
+    /**
+     * Adds a timestamp of the moment called to the calling apps most recent
+     * {@link ApplicationStartInfo}.
+     *
+     *
+     * @param key         Unique key for timestamp.
+     * @param timestampNs Clock monotonic time in nanoseconds of event to be
+     *                    recorded.
+     * @param userId      The userId in the multi-user environment.
+     */
+    void addStartInfoTimestamp(int key, long timestampNs, int userId);
 
     /**
      * Return a list of {@link ApplicationExitInfo} records.
@@ -924,4 +937,6 @@
     void unregisterUidFrozenStateChangedCallback(in IUidFrozenStateChangedCallback callback);
     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS)")
     int[] getUidFrozenState(in int[] uids);
+
+    int checkPermissionForDevice(in String permission, int pid, int uid, int deviceId);
 }
diff --git a/core/java/android/app/IActivityTaskManager.aidl b/core/java/android/app/IActivityTaskManager.aidl
index d189bab..2c428ef 100644
--- a/core/java/android/app/IActivityTaskManager.aidl
+++ b/core/java/android/app/IActivityTaskManager.aidl
@@ -236,6 +236,7 @@
      *              {@link android.view.WindowManagerPolicyConstants#KEYGUARD_GOING_AWAY_FLAG_TO_SHADE}
      *              etc.
      */
+     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.CONTROL_KEYGUARD)")
     void keyguardGoingAway(int flags);
 
     void suppressResizeConfigChanges(boolean suppress);
diff --git a/core/java/android/app/IApplicationThread.aidl b/core/java/android/app/IApplicationThread.aidl
index 6b5f6b0..75d8c10 100644
--- a/core/java/android/app/IApplicationThread.aidl
+++ b/core/java/android/app/IApplicationThread.aidl
@@ -78,6 +78,7 @@
     void scheduleStopService(IBinder token);
     void bindApplication(in String packageName, in ApplicationInfo info,
             in String sdkSandboxClientAppVolumeUuid, in String sdkSandboxClientAppPackage,
+            in boolean isSdkInSandbox,
             in ProviderInfoList providerList, in ComponentName testName,
             in ProfilerInfo profilerInfo, in Bundle testArguments,
             IInstrumentationWatcher testWatcher, IUiAutomationConnection uiAutomationConnection,
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 0b48621..7f38b27 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -128,13 +128,16 @@
     // INotificationListener method.
     @UnsupportedAppUsage
     StatusBarNotification[] getActiveNotifications(String callingPkg);
+    @EnforcePermission("ACCESS_NOTIFICATIONS")
     StatusBarNotification[] getActiveNotificationsWithAttribution(String callingPkg,
             String callingAttributionTag);
     @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
     StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count, boolean includeSnoozed);
+    @EnforcePermission("ACCESS_NOTIFICATIONS")
     StatusBarNotification[] getHistoricalNotificationsWithAttribution(String callingPkg,
             String callingAttributionTag, int count, boolean includeSnoozed);
 
+    @EnforcePermission("ACCESS_NOTIFICATIONS")
     NotificationHistory getNotificationHistory(String callingPkg, String callingAttributionTag);
 
     void registerListener(in INotificationListener listener, in ComponentName component, int userid);
diff --git a/core/java/android/app/IUiModeManager.aidl b/core/java/android/app/IUiModeManager.aidl
index 2345c27..60b34cd 100644
--- a/core/java/android/app/IUiModeManager.aidl
+++ b/core/java/android/app/IUiModeManager.aidl
@@ -79,6 +79,7 @@
      * @param nightModeCustomType
      * @hide
      */
+    @EnforcePermission("MODIFY_DAY_NIGHT_MODE")
     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE)")
     void setNightModeCustomType(int nightModeCustomType);
 
@@ -89,6 +90,7 @@
      * {@link #MODE_NIGHT_CUSTOM_TYPE_UNKNOWN}.
      * @hide
      */
+    @EnforcePermission("MODIFY_DAY_NIGHT_MODE")
     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE)")
     int getNightModeCustomType();
 
@@ -163,21 +165,25 @@
     /**
     * Registers a listener for changes to projection state.
     */
+    @EnforcePermission("READ_PROJECTION_STATE")
     void addOnProjectionStateChangedListener(in IOnProjectionStateChangedListener listener, int projectionType);
 
     /**
     * Unregisters a listener for changes to projection state.
     */
+    @EnforcePermission("READ_PROJECTION_STATE")
     void removeOnProjectionStateChangedListener(in IOnProjectionStateChangedListener listener);
 
     /**
     * Returns packages that have currently set the given projection type.
     */
+    @EnforcePermission("READ_PROJECTION_STATE")
     List<String> getProjectingPackages(int projectionType);
 
     /**
     * Returns currently set projection types.
     */
+    @EnforcePermission("READ_PROJECTION_STATE")
     int getActiveProjectionTypes();
 
     /**
diff --git a/core/java/android/app/IWindowToken.aidl b/core/java/android/app/IWindowToken.aidl
deleted file mode 100644
index 3627b0f..0000000
--- a/core/java/android/app/IWindowToken.aidl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- ** Copyright 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 android.app;
-
-import android.content.res.Configuration;
-import android.view.IWindow;
-
-/**
- * Callback to receive configuration changes from {@link com.android.server.WindowToken}.
- * WindowToken can be regarded to as a group of {@link android.view.IWindow} added from the same
- * visual context, such as {@link Activity} or one created with
- * {@link android.content.Context#createWindowContext(int)}. When WindowToken receives configuration
- * changes and/or when it is moved between displays, it will propagate the changes to client side
- * via this interface.
- * @see android.content.Context#createWindowContext(int)
- * {@hide}
- */
-oneway interface IWindowToken {
-    void onConfigurationChanged(in Configuration newConfig, int newDisplayId);
-
-    void onWindowTokenRemoved();
-}
diff --git a/core/java/android/app/KeyguardManager.java b/core/java/android/app/KeyguardManager.java
index e7a2b61e..e447dc5 100644
--- a/core/java/android/app/KeyguardManager.java
+++ b/core/java/android/app/KeyguardManager.java
@@ -61,6 +61,7 @@
 import com.android.internal.widget.LockPatternUtils;
 import com.android.internal.widget.LockPatternView;
 import com.android.internal.widget.LockscreenCredential;
+import com.android.internal.widget.PasswordValidationError;
 import com.android.internal.widget.VerifyCredentialResponse;
 
 import java.nio.charset.Charset;
@@ -883,17 +884,14 @@
         if (!checkInitialLockMethodUsage()) {
             return false;
         }
+        Objects.requireNonNull(password, "Password cannot be null.");
         complexity = PasswordMetrics.sanitizeComplexityLevel(complexity);
-        // TODO: b/131755827 add devicePolicyManager support for Auto
-        DevicePolicyManager devicePolicyManager =
-                (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
         PasswordMetrics adminMetrics =
-                devicePolicyManager.getPasswordMinimumMetrics(mContext.getUserId());
-        // Check if the password fits the mold of a pin or pattern.
-        boolean isPinOrPattern = lockType != PASSWORD;
-
-        return PasswordMetrics.validatePassword(
-                adminMetrics, complexity, isPinOrPattern, password).size() == 0;
+                mLockPatternUtils.getRequestedPasswordMetrics(mContext.getUserId());
+        try (LockscreenCredential credential = createLockscreenCredential(lockType, password)) {
+            return PasswordMetrics.validateCredential(adminMetrics, complexity,
+                    credential).size() == 0;
+        }
     }
 
     /**
@@ -912,11 +910,8 @@
             return -1;
         }
         complexity = PasswordMetrics.sanitizeComplexityLevel(complexity);
-        // TODO: b/131755827 add devicePolicyManager support for Auto
-        DevicePolicyManager devicePolicyManager =
-                (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
         PasswordMetrics adminMetrics =
-                devicePolicyManager.getPasswordMinimumMetrics(mContext.getUserId());
+                mLockPatternUtils.getRequestedPasswordMetrics(mContext.getUserId());
         PasswordMetrics minMetrics =
                 PasswordMetrics.applyComplexity(adminMetrics, isPin, complexity);
         return minMetrics.length;
@@ -1138,6 +1133,14 @@
                 currentLockType, currentPassword);
         LockscreenCredential newCredential = createLockscreenCredential(
                 newLockType, newPassword);
+        PasswordMetrics adminMetrics =
+                mLockPatternUtils.getRequestedPasswordMetrics(mContext.getUserId());
+        List<PasswordValidationError> errors = PasswordMetrics.validateCredential(adminMetrics,
+                DevicePolicyManager.PASSWORD_COMPLEXITY_NONE, newCredential);
+        if (!errors.isEmpty()) {
+            Log.e(TAG, "New credential is not valid: " + errors.get(0));
+            return false;
+        }
         return mLockPatternUtils.setLockCredential(newCredential, currentCredential, userId);
     }
 
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java
index b5efb73..8fea03b 100644
--- a/core/java/android/app/LoadedApk.java
+++ b/core/java/android/app/LoadedApk.java
@@ -1401,95 +1401,99 @@
         if (mApplication != null) {
             return mApplication;
         }
-        Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "makeApplication");
 
-        synchronized (sApplications) {
-            final Application cached = sApplications.get(mPackageName);
-            if (cached != null) {
-                // Looks like this is always happening for the system server, because
-                // the LoadedApk created in systemMain() -> attach() isn't cached properly?
-                if (!"android".equals(mPackageName)) {
-                    Slog.wtfStack(TAG, "App instance already created for package=" + mPackageName
-                            + " instance=" + cached);
-                }
-                if (!allowDuplicateInstances) {
-                    mApplication = cached;
-                    return cached;
-                }
-                // Some apps intentionally call makeApplication() to create a new Application
-                // instance... Sigh...
-            }
-        }
 
-        Application app = null;
-
-        final String myProcessName = Process.myProcessName();
-        String appClass = mApplicationInfo.getCustomApplicationClassNameForProcess(
-                myProcessName);
-        if (forceDefaultAppClass || (appClass == null)) {
-            appClass = "android.app.Application";
+        if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) {
+            Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "makeApplication");
         }
 
         try {
-            final java.lang.ClassLoader cl = getClassLoader();
-            if (!mPackageName.equals("android")) {
-                Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
-                        "initializeJavaContextClassLoader");
-                initializeJavaContextClassLoader();
-                Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
-            }
-
-            // Rewrite the R 'constants' for all library apks.
-            SparseArray<String> packageIdentifiers = getAssets().getAssignedPackageIdentifiers(
-                    false, false);
-            for (int i = 0, n = packageIdentifiers.size(); i < n; i++) {
-                final int id = packageIdentifiers.keyAt(i);
-                if (id == 0x01 || id == 0x7f) {
-                    continue;
-                }
-
-                rewriteRValues(cl, packageIdentifiers.valueAt(i), id);
-            }
-
-            ContextImpl appContext = ContextImpl.createAppContext(mActivityThread, this);
-            // The network security config needs to be aware of multiple
-            // applications in the same process to handle discrepancies
-            NetworkSecurityConfigProvider.handleNewApplication(appContext);
-            app = mActivityThread.mInstrumentation.newApplication(
-                    cl, appClass, appContext);
-            appContext.setOuterContext(app);
-        } catch (Exception e) {
-            if (!mActivityThread.mInstrumentation.onException(app, e)) {
-                Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
-                throw new RuntimeException(
-                    "Unable to instantiate application " + appClass
-                    + " package " + mPackageName + ": " + e.toString(), e);
-            }
-        }
-        mActivityThread.mAllApplications.add(app);
-        mApplication = app;
-        if (!allowDuplicateInstances) {
             synchronized (sApplications) {
-                sApplications.put(mPackageName, app);
-            }
-        }
-
-        if (instrumentation != null) {
-            try {
-                instrumentation.callApplicationOnCreate(app);
-            } catch (Exception e) {
-                if (!instrumentation.onException(app, e)) {
-                    Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
-                    throw new RuntimeException(
-                        "Unable to create application " + app.getClass().getName()
-                        + ": " + e.toString(), e);
+                final Application cached = sApplications.get(mPackageName);
+                if (cached != null) {
+                    // Looks like this is always happening for the system server, because
+                    // the LoadedApk created in systemMain() -> attach() isn't cached properly?
+                    if (!"android".equals(mPackageName)) {
+                        Slog.wtfStack(TAG, "App instance already created for package="
+                                + mPackageName + " instance=" + cached);
+                    }
+                    if (!allowDuplicateInstances) {
+                        mApplication = cached;
+                        return cached;
+                    }
+                    // Some apps intentionally call makeApplication() to create a new Application
+                    // instance... Sigh...
                 }
             }
+
+            Application app = null;
+
+            final String myProcessName = Process.myProcessName();
+            String appClass = mApplicationInfo.getCustomApplicationClassNameForProcess(
+                    myProcessName);
+            if (forceDefaultAppClass || (appClass == null)) {
+                appClass = "android.app.Application";
+            }
+
+            try {
+                final java.lang.ClassLoader cl = getClassLoader();
+                if (!mPackageName.equals("android")) {
+                    Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
+                            "initializeJavaContextClassLoader");
+                    initializeJavaContextClassLoader();
+                    Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
+                }
+
+                // Rewrite the R 'constants' for all library apks.
+                SparseArray<String> packageIdentifiers = getAssets().getAssignedPackageIdentifiers(
+                        false, false);
+                for (int i = 0, n = packageIdentifiers.size(); i < n; i++) {
+                    final int id = packageIdentifiers.keyAt(i);
+                    if (id == 0x01 || id == 0x7f) {
+                        continue;
+                    }
+
+                    rewriteRValues(cl, packageIdentifiers.valueAt(i), id);
+                }
+
+                ContextImpl appContext = ContextImpl.createAppContext(mActivityThread, this);
+                // The network security config needs to be aware of multiple
+                // applications in the same process to handle discrepancies
+                NetworkSecurityConfigProvider.handleNewApplication(appContext);
+                app = mActivityThread.mInstrumentation.newApplication(
+                        cl, appClass, appContext);
+                appContext.setOuterContext(app);
+            } catch (Exception e) {
+                if (!mActivityThread.mInstrumentation.onException(app, e)) {
+                    throw new RuntimeException(
+                        "Unable to instantiate application " + appClass
+                        + " package " + mPackageName + ": " + e.toString(), e);
+                }
+            }
+            mActivityThread.mAllApplications.add(app);
+            mApplication = app;
+            if (!allowDuplicateInstances) {
+                synchronized (sApplications) {
+                    sApplications.put(mPackageName, app);
+                }
+            }
+
+            if (instrumentation != null) {
+                try {
+                    instrumentation.callApplicationOnCreate(app);
+                } catch (Exception e) {
+                    if (!instrumentation.onException(app, e)) {
+                        throw new RuntimeException(
+                            "Unable to create application " + app.getClass().getName()
+                            + ": " + e.toString(), e);
+                    }
+                }
+            }
+
+            return app;
+        } finally {
+            Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
         }
-
-        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
-
-        return app;
     }
 
     @UnsupportedAppUsage
diff --git a/core/java/android/app/LocaleConfig.java b/core/java/android/app/LocaleConfig.java
index 5031a33..729e555 100644
--- a/core/java/android/app/LocaleConfig.java
+++ b/core/java/android/app/LocaleConfig.java
@@ -138,6 +138,10 @@
         try {
             //Get the resource id
             resId = new ApplicationInfo(context.getApplicationInfo()).getLocaleConfigRes();
+            if (resId == 0) {
+                mStatus = STATUS_NOT_SPECIFIED;
+                return;
+            }
             //Get the parser to read XML data
             XmlResourceParser parser = res.getXml(resId);
             parseLocaleConfig(parser, res);
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 44068dd..892b45e 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -8807,9 +8807,11 @@
             }
 
             /**
+             * Converts the message into a {@link Bundle}. To extract the message back,
+             * check {@link #getMessageFromBundle()}
              * @hide
              */
-            @VisibleForTesting
+            @NonNull
             public Bundle toBundle() {
                 Bundle bundle = new Bundle();
                 if (mText != null) {
@@ -12158,10 +12160,7 @@
      * <p>TV extensions can be accessed on an existing notification by using the
      * {@code TvExtender(Notification)} constructor, and then using the {@code get} methods
      * to access values.
-     *
-     * @hide
      */
-    @SystemApi
     public static final class TvExtender implements Extender {
         private static final String TAG = "TvExtender";
 
@@ -12193,7 +12192,7 @@
          *
          * @param notif The notification from which to copy options.
          */
-        public TvExtender(Notification notif) {
+        public TvExtender(@NonNull Notification notif) {
             Bundle bundle = notif.extras == null ?
                 null : notif.extras.getBundle(EXTRA_TV_EXTENDER);
             if (bundle != null) {
@@ -12211,7 +12210,8 @@
          * method of {@link Notification.Builder}.
          */
         @Override
-        public Notification.Builder extend(Notification.Builder builder) {
+        @NonNull
+        public Notification.Builder extend(@NonNull Notification.Builder builder) {
             Bundle bundle = new Bundle();
 
             bundle.putInt(EXTRA_FLAGS, mFlags);
@@ -12230,7 +12230,7 @@
         }
 
         /**
-         * Returns true if this notification should be shown on TV. This method return true
+         * Returns true if this notification should be shown on TV. This method returns true
          * if the notification was extended with a TvExtender.
          */
         public boolean isAvailableOnTv() {
@@ -12240,8 +12240,11 @@
         /**
          * Specifies the channel the notification should be delivered on when shown on TV.
          * It can be different from the channel that the notification is delivered to when
-         * posting on a non-TV device.
+         * posting on a non-TV device. Prefer to use {@link setChannelId(String)}.
+         *
+         * @hide
          */
+        @SystemApi
         public TvExtender setChannel(String channelId) {
             mChannelId = channelId;
             return this;
@@ -12251,14 +12254,21 @@
          * Specifies the channel the notification should be delivered on when shown on TV.
          * It can be different from the channel that the notification is delivered to when
          * posting on a non-TV device.
+         *
+         * @return this object for method chaining
          */
-        public TvExtender setChannelId(String channelId) {
+        @NonNull
+        public TvExtender setChannelId(@Nullable String channelId) {
             mChannelId = channelId;
             return this;
         }
 
-        /** @removed */
+        /**
+         * @removed
+         * @hide
+         */
         @Deprecated
+        @SystemApi
         public String getChannel() {
             return mChannelId;
         }
@@ -12266,6 +12276,7 @@
         /**
          * Returns the id of the channel this notification posts to on TV.
          */
+        @Nullable
         public String getChannelId() {
             return mChannelId;
         }
@@ -12274,8 +12285,12 @@
          * Supplies a {@link PendingIntent} to be sent when the notification is selected on TV.
          * If provided, it is used instead of the content intent specified
          * at the level of Notification.
+         *
+         * @param intent the {@link PendingIntent} for the associated notification content
+         * @return this object for method chaining
          */
-        public TvExtender setContentIntent(PendingIntent intent) {
+        @NonNull
+        public TvExtender setContentIntent(@Nullable PendingIntent intent) {
             mContentIntent = intent;
             return this;
         }
@@ -12284,8 +12299,9 @@
          * Returns the TV-specific content intent.  If this method returns null, the
          * main content intent on the notification should be used.
          *
-         * @see {@link Notification#contentIntent}
+         * @see Notification#contentIntent
          */
+        @Nullable
         public PendingIntent getContentIntent() {
             return mContentIntent;
         }
@@ -12294,8 +12310,12 @@
          * Supplies a {@link PendingIntent} to send when the notification is cleared explicitly
          * by the user on TV.  If provided, it is used instead of the delete intent specified
          * at the level of Notification.
+         *
+         * @param intent the {@link PendingIntent} for the associated notification deletion
+         * @return this object for method chaining
          */
-        public TvExtender setDeleteIntent(PendingIntent intent) {
+        @NonNull
+        public TvExtender setDeleteIntent(@Nullable PendingIntent intent) {
             mDeleteIntent = intent;
             return this;
         }
@@ -12304,8 +12324,9 @@
          * Returns the TV-specific delete intent.  If this method returns null, the
          * main delete intent on the notification should be used.
          *
-         * @see {@link Notification#deleteIntent}
+         * @see Notification#deleteIntent
          */
+        @Nullable
         public PendingIntent getDeleteIntent() {
             return mDeleteIntent;
         }
@@ -12313,7 +12334,11 @@
         /**
          * Specifies whether this notification should suppress showing a message over top of apps
          * outside of the launcher.
+         *
+         * @param suppress whether the notification should suppress showing over apps.
+         * @return this object for method chaining
          */
+        @NonNull
         public TvExtender setSuppressShowOverApps(boolean suppress) {
             mSuppressShowOverApps = suppress;
             return this;
@@ -12322,10 +12347,21 @@
         /**
          * Returns true if this notification should not show messages over top of apps
          * outside of the launcher.
+         *
+         * @hide
          */
+        @SystemApi
         public boolean getSuppressShowOverApps() {
             return mSuppressShowOverApps;
         }
+
+        /**
+         * Returns true if this notification should not show messages over top of apps
+         * outside of the launcher.
+         */
+        public boolean isSuppressShowOverApps() {
+            return mSuppressShowOverApps;
+        }
     }
 
     /**
diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java
index d8cedb8..7ee1332 100644
--- a/core/java/android/app/NotificationChannel.java
+++ b/core/java/android/app/NotificationChannel.java
@@ -26,12 +26,14 @@
 import android.content.Intent;
 import android.content.pm.ShortcutInfo;
 import android.media.AudioAttributes;
+import android.media.RingtoneManager;
 import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.provider.Settings;
 import android.service.notification.NotificationListenerService;
 import android.text.TextUtils;
+import android.util.Log;
 import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.util.Preconditions;
@@ -54,6 +56,7 @@
  * A representation of settings that apply to a collection of similarly themed notifications.
  */
 public final class NotificationChannel implements Parcelable {
+    private static final String TAG = "NotificationChannel";
 
     /**
      * The id of the default channel for an app. This id is reserved by the system. All
@@ -959,8 +962,11 @@
         setLockscreenVisibility(safeInt(parser, ATT_VISIBILITY, DEFAULT_VISIBILITY));
 
         Uri sound = safeUri(parser, ATT_SOUND);
-        setSound(forRestore ? restoreSoundUri(context, sound, pkgInstalled) : sound,
-                safeAudioAttributes(parser));
+
+        final AudioAttributes audioAttributes = safeAudioAttributes(parser);
+        final int usage = audioAttributes.getUsage();
+        setSound(forRestore ? restoreSoundUri(context, sound, pkgInstalled, usage) : sound,
+                audioAttributes);
 
         enableLights(safeBool(parser, ATT_LIGHTS, false));
         setLightColor(safeInt(parser, ATT_LIGHT_COLOR, DEFAULT_LIGHT_COLOR));
@@ -1010,18 +1016,34 @@
         if (ContentResolver.SCHEME_FILE.equals(uri.getScheme())) {
             return uri;
         }
-
         return contentResolver.canonicalize(uri);
     }
 
     @Nullable
-    private Uri getUncanonicalizedSoundUri(ContentResolver contentResolver, @NonNull Uri uri) {
+    private Uri getUncanonicalizedSoundUri(
+            ContentResolver contentResolver, @NonNull Uri uri, int usage) {
         if (Settings.System.DEFAULT_NOTIFICATION_URI.equals(uri)
                 || ContentResolver.SCHEME_ANDROID_RESOURCE.equals(uri.getScheme())
                 || ContentResolver.SCHEME_FILE.equals(uri.getScheme())) {
             return uri;
         }
-        return contentResolver.uncanonicalize(uri);
+        int ringtoneType = 0;
+
+        // Consistent with UI(SoundPreferenceController.handlePreferenceTreeClick).
+        if (AudioAttributes.USAGE_ALARM == usage) {
+            ringtoneType = RingtoneManager.TYPE_ALARM;
+        } else if (AudioAttributes.USAGE_NOTIFICATION_RINGTONE == usage) {
+            ringtoneType = RingtoneManager.TYPE_RINGTONE;
+        } else {
+            ringtoneType = RingtoneManager.TYPE_NOTIFICATION;
+        }
+        try {
+            return RingtoneManager.getRingtoneUriForRestore(
+                    contentResolver, uri.toString(), ringtoneType);
+        } catch (Exception e) {
+            Log.e(TAG, "Failed to uncanonicalized sound uri for " + uri + " " + e);
+            return Settings.System.DEFAULT_NOTIFICATION_URI;
+        }
     }
 
     /**
@@ -1033,7 +1055,8 @@
      * @hide
      */
     @Nullable
-    public Uri restoreSoundUri(Context context, @Nullable Uri uri, boolean pkgInstalled) {
+    public Uri restoreSoundUri(
+            Context context, @Nullable Uri uri, boolean pkgInstalled, int usage) {
         if (uri == null || Uri.EMPTY.equals(uri)) {
             return null;
         }
@@ -1060,7 +1083,7 @@
             }
         }
         mSoundRestored = true;
-        return getUncanonicalizedSoundUri(contentResolver, canonicalizedUri);
+        return getUncanonicalizedSoundUri(contentResolver, canonicalizedUri, usage);
     }
 
     /**
diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java
index c7522b4..62209b0 100644
--- a/core/java/android/app/PendingIntent.java
+++ b/core/java/android/app/PendingIntent.java
@@ -264,7 +264,7 @@
      * be mutable by default, unless {@link #FLAG_IMMUTABLE} is set. Starting
      * with {@link android.os.Build.VERSION_CODES#S}, it will be required to
      * explicitly specify the mutability of PendingIntents on creation with
-     * either (@link #FLAG_IMMUTABLE} or {@link #FLAG_MUTABLE}. It is strongly
+     * either {@link #FLAG_IMMUTABLE} or {@link #FLAG_MUTABLE}. It is strongly
      * recommended to use {@link #FLAG_IMMUTABLE} when creating a
      * PendingIntent. {@link #FLAG_MUTABLE} should only be used when some
      * functionality relies on modifying the underlying intent, e.g. any
diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java
index 7e6386e..1ecb5d3 100644
--- a/core/java/android/app/ResourcesManager.java
+++ b/core/java/android/app/ResourcesManager.java
@@ -36,6 +36,7 @@
 import android.content.res.loader.ResourcesLoader;
 import android.hardware.display.DisplayManagerGlobal;
 import android.os.IBinder;
+import android.os.LocaleList;
 import android.os.Process;
 import android.os.Trace;
 import android.util.ArrayMap;
@@ -118,6 +119,11 @@
     private final ArrayList<WeakReference<Resources>> mResourceReferences = new ArrayList<>();
     private final ReferenceQueue<Resources> mResourcesReferencesQueue = new ReferenceQueue<>();
 
+    /**
+     * The list of locales the app declares it supports.
+     */
+    private LocaleList mLocaleList = LocaleList.getEmptyLocaleList();
+
     private static class ApkKey {
         public final String path;
         public final boolean sharedLib;
@@ -1605,6 +1611,22 @@
         }
     }
 
+    /**
+     * Returns the LocaleList current set
+     */
+    public LocaleList getLocaleList() {
+        return mLocaleList;
+    }
+
+    /**
+     * Sets the LocaleList of app's supported locales
+     */
+    public void setLocaleList(LocaleList localeList) {
+        if ((localeList != null) && !localeList.isEmpty()) {
+            mLocaleList = localeList;
+        }
+    }
+
     private class UpdateHandler implements Resources.UpdateCallbacks {
 
         /**
diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java
index 565226d..e578499 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -171,6 +171,7 @@
 import android.os.IDumpstate;
 import android.os.IHardwarePropertiesManager;
 import android.os.IPowerManager;
+import android.os.IPowerStatsService;
 import android.os.IRecoverySystem;
 import android.os.ISystemUpdateManager;
 import android.os.IThermalService;
@@ -1106,8 +1107,10 @@
                 new CachedServiceFetcher<SystemHealthManager>() {
             @Override
             public SystemHealthManager createService(ContextImpl ctx) throws ServiceNotFoundException {
-                IBinder b = ServiceManager.getServiceOrThrow(BatteryStats.SERVICE_NAME);
-                return new SystemHealthManager(IBatteryStats.Stub.asInterface(b));
+                IBinder batteryStats = ServiceManager.getServiceOrThrow(BatteryStats.SERVICE_NAME);
+                IBinder powerStats = ServiceManager.getService(Context.POWER_STATS_SERVICE);
+                return new SystemHealthManager(IBatteryStats.Stub.asInterface(batteryStats),
+                        IPowerStatsService.Stub.asInterface(powerStats));
             }});
 
         registerService(Context.CONTEXTHUB_SERVICE, ContextHubManager.class,
diff --git a/core/java/android/app/TEST_MAPPING b/core/java/android/app/TEST_MAPPING
index bc5f7f4..06e1b5b 100644
--- a/core/java/android/app/TEST_MAPPING
+++ b/core/java/android/app/TEST_MAPPING
@@ -16,7 +16,12 @@
         },
         {
             "file_patterns": ["(/|^)AppOpsManager.java"],
-            "name": "CtsAppOpsTestCases"
+            "name": "CtsAppOpsTestCases",
+            "options": [
+                {
+                    "exclude-annotation": "android.platform.test.annotations.FlakyTest"
+                }
+            ]
         },
         {
             "file_patterns": ["(/|^)AppOpsManager.java"],
@@ -54,10 +59,10 @@
             "file_patterns": ["INotificationManager\\.aidl"]
         },
         {
-            "name": "CtsWindowManagerDeviceTestCases",
+            "name": "CtsWindowManagerDeviceWindow",
             "options": [
                 {
-                    "include-filter": "android.server.wm.ToastWindowTest"
+                    "include-filter": "android.server.wm.window.ToastWindowTest"
                 }
             ],
             "file_patterns": ["INotificationManager\\.aidl"]
@@ -238,11 +243,144 @@
             "file_patterns": [
                 "(/|^)DeviceFeature[^/]*", "(/|^)Hdmi[^/]*"
             ]
-        }
-    ],
-    "presubmit-large": [
+        },
         {
-            "name": "CtsContentTestCases",
+            "name": "CtsWindowManagerDeviceActivity",
+            "options": [
+                {
+                    "exclude-annotation": "androidx.test.filters.FlakyTest"
+                },
+                {
+                    "exclude-annotation": "org.junit.Ignore"
+                },
+                {
+                    "include-filter": "android.content.wm.cts"
+                }
+            ],
+            "file_patterns": ["(/|^)ContextImpl.java"]
+        },
+        {
+            "name": "CtsWindowManagerDeviceAm",
+            "options": [
+                {
+                    "exclude-annotation": "androidx.test.filters.FlakyTest"
+                },
+                {
+                    "exclude-annotation": "org.junit.Ignore"
+                },
+                {
+                    "include-filter": "android.content.wm.cts"
+                }
+            ],
+            "file_patterns": ["(/|^)ContextImpl.java"]
+        },
+        {
+            "name": "CtsWindowManagerDeviceBackNavigation",
+            "options": [
+                {
+                    "exclude-annotation": "androidx.test.filters.FlakyTest"
+                },
+                {
+                    "exclude-annotation": "org.junit.Ignore"
+                },
+                {
+                    "include-filter": "android.content.wm.cts"
+                }
+            ],
+            "file_patterns": ["(/|^)ContextImpl.java"]
+        },
+        {
+            "name": "CtsWindowManagerDeviceDisplay",
+            "options": [
+                {
+                    "exclude-annotation": "androidx.test.filters.FlakyTest"
+                },
+                {
+                    "exclude-annotation": "org.junit.Ignore"
+                },
+                {
+                    "include-filter": "android.content.wm.cts"
+                }
+            ],
+            "file_patterns": ["(/|^)ContextImpl.java"]
+        },
+        {
+            "name": "CtsWindowManagerDeviceKeyguard",
+            "options": [
+                {
+                    "exclude-annotation": "androidx.test.filters.FlakyTest"
+                },
+                {
+                    "exclude-annotation": "org.junit.Ignore"
+                },
+                {
+                    "include-filter": "android.content.wm.cts"
+                }
+            ],
+            "file_patterns": ["(/|^)ContextImpl.java"]
+        },
+        {
+            "name": "CtsWindowManagerDeviceInsets",
+            "options": [
+                {
+                    "exclude-annotation": "androidx.test.filters.FlakyTest"
+                },
+                {
+                    "exclude-annotation": "org.junit.Ignore"
+                },
+                {
+                    "include-filter": "android.content.wm.cts"
+                }
+            ],
+            "file_patterns": ["(/|^)ContextImpl.java"]
+        },
+        {
+            "name": "CtsWindowManagerDeviceTaskFragment",
+            "options": [
+                {
+                    "exclude-annotation": "androidx.test.filters.FlakyTest"
+                },
+                {
+                    "exclude-annotation": "org.junit.Ignore"
+                },
+                {
+                    "include-filter": "android.content.wm.cts"
+                }
+            ],
+            "file_patterns": ["(/|^)ContextImpl.java"]
+        },
+        {
+            "name": "CtsWindowManagerDeviceScvh",
+            "options": [
+                {
+                    "exclude-annotation": "androidx.test.filters.FlakyTest"
+                },
+                {
+                    "exclude-annotation": "org.junit.Ignore"
+                },
+                {
+                    "include-filter": "android.content.wm.cts"
+                }
+            ],
+            "file_patterns": ["(/|^)ContextImpl.java"]
+        },
+        {
+            "name": "CtsWindowManagerDeviceWindow",
+            "options": [
+                {
+                    "exclude-annotation": "androidx.test.filters.FlakyTest"
+                },
+                {
+                    "exclude-annotation": "org.junit.Ignore"
+                },
+                {
+                    "include-filter": "android.content.wm.cts"
+                }
+            ],
+            "file_patterns": ["(/|^)ContextImpl.java"]
+        },
+        {
+            "name": "CtsWindowManagerDeviceOther",
             "options": [
                 {
                     "exclude-annotation": "androidx.test.filters.FlakyTest"
@@ -265,6 +403,10 @@
         {
             "file_patterns": ["(/|^)ActivityThreadTest.java"],
             "name": "FrameworksCoreTests"
+        },
+        {
+            "file_patterns": ["(/|^)AppOpsManager.java"],
+            "name": "CtsAppOpsTestCases"
         }
     ]
 }
diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java
index c3d26d4..b0180c1 100644
--- a/core/java/android/app/UiAutomation.java
+++ b/core/java/android/app/UiAutomation.java
@@ -556,6 +556,21 @@
     }
 
     /**
+     * Provides reference to the cache through a locked connection.
+     *
+     * @return the accessibility cache.
+     * @hide
+     */
+    public @Nullable AccessibilityCache getCache() {
+        final int connectionId;
+        synchronized (mLock) {
+            throwIfNotConnectedLocked();
+            connectionId = mConnectionId;
+        }
+        return AccessibilityInteractionClient.getCache(connectionId);
+    }
+
+    /**
      * Adopt the permission identity of the shell UID for all permissions. This allows
      * you to call APIs protected permissions which normal apps cannot hold but are
      * granted to the shell UID. If you already adopted all shell permissions by calling
@@ -830,6 +845,22 @@
      *            established.
      */
     public AccessibilityNodeInfo getRootInActiveWindow() {
+        return getRootInActiveWindow(AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS_HYBRID);
+    }
+
+    /**
+     * Gets the root {@link AccessibilityNodeInfo} in the active window.
+     *
+     * @param prefetchingStrategy the prefetching strategy.
+     * @return The root info.
+     * @throws IllegalStateException If the connection to the accessibility subsystem is not
+     * established.
+     *
+     * @hide
+     */
+    @Nullable
+    public AccessibilityNodeInfo getRootInActiveWindow(
+            @AccessibilityNodeInfo.PrefetchingStrategy int prefetchingStrategy) {
         final int connectionId;
         synchronized (mLock) {
             throwIfNotConnectedLocked();
@@ -837,8 +868,7 @@
         }
         // Calling out without a lock held.
         return AccessibilityInteractionClient.getInstance()
-                .getRootInActiveWindow(connectionId,
-                        AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS_HYBRID);
+                .getRootInActiveWindow(connectionId, prefetchingStrategy);
     }
 
     /**
diff --git a/core/java/android/app/UiAutomationConnection.java b/core/java/android/app/UiAutomationConnection.java
index 52949d6..6f4abfd 100644
--- a/core/java/android/app/UiAutomationConnection.java
+++ b/core/java/android/app/UiAutomationConnection.java
@@ -343,6 +343,9 @@
         }
     }
 
+    /**
+     * Grants permission for the {@link Context#DEVICE_ID_DEFAULT default device}
+     */
     @Override
     public void grantRuntimePermission(String packageName, String permission, int userId)
             throws RemoteException {
@@ -353,12 +356,16 @@
         }
         final long identity = Binder.clearCallingIdentity();
         try {
-            mPermissionManager.grantRuntimePermission(packageName, permission, userId);
+            mPermissionManager.grantRuntimePermission(packageName, permission,
+                    Context.DEVICE_ID_DEFAULT, userId);
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
     }
 
+    /**
+     * Revokes permission for the {@link Context#DEVICE_ID_DEFAULT default device}
+     */
     @Override
     public void revokeRuntimePermission(String packageName, String permission, int userId)
             throws RemoteException {
@@ -369,7 +376,8 @@
         }
         final long identity = Binder.clearCallingIdentity();
         try {
-            mPermissionManager.revokeRuntimePermission(packageName, permission, userId, null);
+            mPermissionManager.revokeRuntimePermission(packageName, permission,
+                    Context.DEVICE_ID_DEFAULT, userId, null);
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
diff --git a/core/java/android/app/WallpaperInfo.java b/core/java/android/app/WallpaperInfo.java
index 74132a3..e3a05af 100644
--- a/core/java/android/app/WallpaperInfo.java
+++ b/core/java/android/app/WallpaperInfo.java
@@ -142,9 +142,13 @@
             mShowMetadataInPreview = sa.getBoolean(
                     com.android.internal.R.styleable.Wallpaper_showMetadataInPreview,
                     false);
+
+            // Watch wallpapers support ambient mode by default.
+            final boolean defSupportsAmbientMode =
+                    pm.hasSystemFeature(PackageManager.FEATURE_WATCH);
             mSupportsAmbientMode = sa.getBoolean(
                     com.android.internal.R.styleable.Wallpaper_supportsAmbientMode,
-                    false);
+                    defSupportsAmbientMode);
             mShouldUseDefaultUnfoldTransition = sa.getBoolean(
                     com.android.internal.R.styleable
                             .Wallpaper_shouldUseDefaultUnfoldTransition, true);
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 723c564..c31aa01 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -2670,6 +2670,8 @@
      * @param z Arbitrary integer argument based on command.
      * @param extras Optional additional information for the command, or null.
      */
+    @RequiresPermission(value = android.Manifest.permission.ALWAYS_UPDATE_WALLPAPER,
+            conditional = true)
     public void sendWallpaperCommand(IBinder windowToken, String action,
             int x, int y, int z, Bundle extras) {
         try {
@@ -2929,19 +2931,16 @@
         ComponentName cn = null;
         String[] cmfWallpaperMap = context.getResources().getStringArray(
                 com.android.internal.R.array.default_wallpaper_component_per_device_color);
-        if (cmfWallpaperMap == null || cmfWallpaperMap.length == 0) {
-            Log.d(TAG, "No CMF wallpaper config");
-            return getDefaultWallpaperComponent(context);
-        }
-
-        for (String entry : cmfWallpaperMap) {
-            String[] cmfWallpaper;
-            if (!TextUtils.isEmpty(entry)) {
-                cmfWallpaper = entry.split(",");
-                if (cmfWallpaper != null && cmfWallpaper.length == 2 && VALUE_CMF_COLOR.equals(
-                        cmfWallpaper[0]) && !TextUtils.isEmpty(cmfWallpaper[1])) {
-                    cn = ComponentName.unflattenFromString(cmfWallpaper[1]);
-                    break;
+        if (cmfWallpaperMap != null && cmfWallpaperMap.length > 0) {
+            for (String entry : cmfWallpaperMap) {
+                String[] cmfWallpaper;
+                if (!TextUtils.isEmpty(entry)) {
+                    cmfWallpaper = entry.split(",");
+                    if (cmfWallpaper != null && cmfWallpaper.length == 2 && VALUE_CMF_COLOR.equals(
+                            cmfWallpaper[0]) && !TextUtils.isEmpty(cmfWallpaper[1])) {
+                        cn = ComponentName.unflattenFromString(cmfWallpaper[1]);
+                        break;
+                    }
                 }
             }
         }
@@ -2950,7 +2949,7 @@
             cn = null;
         }
 
-        return cn;
+        return cn == null ? getDefaultWallpaperComponent(context) : cn;
     }
 
     private static boolean isComponentExist(Context context, ComponentName cn) {
diff --git a/core/java/android/app/admin/DevicePolicyIdentifiers.java b/core/java/android/app/admin/DevicePolicyIdentifiers.java
index aeac59b..ad0af72 100644
--- a/core/java/android/app/admin/DevicePolicyIdentifiers.java
+++ b/core/java/android/app/admin/DevicePolicyIdentifiers.java
@@ -160,6 +160,14 @@
     public static final String CROSS_PROFILE_WIDGET_PROVIDER_POLICY = "crossProfileWidgetProvider";
 
     /**
+     * String identifier for {@link DevicePolicyManager#setUsbDataSignalingEnabled}.
+     *
+     * @hide
+     */
+    @TestApi
+    public static final String USB_DATA_SIGNALING_POLICY = "usbDataSignaling";
+
+    /**
      * @hide
      */
     public static final String USER_RESTRICTION_PREFIX = "userRestriction_";
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index da5e40a..33b8b03 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -12993,7 +12993,7 @@
     }
 
     /**
-     * Called by device owners or profile owners of an organization-owned managed profile to to set
+     * Called by device owners or profile owners of an organization-owned managed profile to set
      * a local system update policy. When a new policy is set,
      * {@link #ACTION_SYSTEM_UPDATE_POLICY_CHANGED} is broadcast.
      * <p>
@@ -14787,12 +14787,12 @@
     }
 
     /**
-     * Called by the system to find out whether the current user's IME was set by the device/profile
-     * owner or the user.
+     * Returns true if the current user's IME was set by an admin.
      *
-     * @return {@code true} if the user's IME was set by the device or profile owner, {@code false}
-     *         otherwise.
-     * @throws SecurityException if the caller is not the device owner/profile owner.
+     * <p>Requires the caller to be the system server, a device owner or profile owner, or a holder
+     * of the QUERY_ADMIN_POLICY permission.
+     *
+     * @throws SecurityException if the caller is not authorized
      *
      * @hide
      */
@@ -16585,10 +16585,28 @@
      * {@link #canUsbDataSignalingBeDisabled()} to check whether enabling or disabling USB data
      * signaling is supported on the device.
      *
+     * Starting from {@link Build.VERSION_CODES#VANILLA_ICE_CREAM}, after the USB data signaling
+     * policy has been set, {@link PolicyUpdateReceiver#onPolicySetResult(Context, String,
+     * Bundle, TargetUser, PolicyUpdateResult)} will notify the admin on whether the policy was
+     * successfully set or not. This callback will contain:
+     * <ul>
+     * li> The policy identifier {@link DevicePolicyIdentifiers#USB_DATA_SIGNALING_POLICY}
+     * <li> The {@link TargetUser} that this policy relates to
+     * <li> The {@link PolicyUpdateResult}, which will be
+     * {@link PolicyUpdateResult#RESULT_POLICY_SET} if the policy was successfully set or the
+     * reason the policy failed to be set
+     * e.g. {@link PolicyUpdateResult#RESULT_FAILURE_CONFLICTING_ADMIN_POLICY})
+     * </ul>
+     * If there has been a change to the policy,
+     * {@link PolicyUpdateReceiver#onPolicyChanged(Context, String, Bundle, TargetUser,
+     * PolicyUpdateResult)} will notify the admin of this change. This callback will contain the
+     * same parameters as PolicyUpdateReceiver#onPolicySetResult and the {@link PolicyUpdateResult}
+     * will contain the reason why the policy changed.
+     *
      * @param enabled whether USB data signaling should be enabled or not.
      * @throws SecurityException if the caller is not permitted to set this policy
      * @throws IllegalStateException if disabling USB data signaling is not supported or
-     *         if USB data signaling fails to be enabled/disabled.
+     * if USB data signaling fails to be enabled/disabled.
      */
     @RequiresPermission(value = MANAGE_DEVICE_POLICY_USB_DATA_SIGNALLING, conditional = true)
     public void setUsbDataSignalingEnabled(boolean enabled) {
@@ -16624,25 +16642,6 @@
     }
 
     /**
-     * Called by the system to check whether USB data signaling is currently enabled for this user.
-     *
-     * @param userId which user to check for.
-     * @return {@code true} if USB data signaling is enabled, {@code false} otherwise.
-     * @hide
-     */
-    public boolean isUsbDataSignalingEnabledForUser(@UserIdInt int userId) {
-        throwIfParentInstance("isUsbDataSignalingEnabledForUser");
-        if (mService != null) {
-            try {
-                return mService.isUsbDataSignalingEnabledForUser(userId);
-            } catch (RemoteException e) {
-                throw e.rethrowFromSystemServer();
-            }
-        }
-        return true;
-    }
-
-    /**
      * Returns whether enabling or disabling USB data signaling is supported on the device.
      *
      * @return {@code true} if the device supports enabling and disabling USB data signaling.
diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl
index 003e804..95ec89e 100644
--- a/core/java/android/app/admin/IDevicePolicyManager.aidl
+++ b/core/java/android/app/admin/IDevicePolicyManager.aidl
@@ -565,7 +565,6 @@
 
     void setUsbDataSignalingEnabled(String callerPackage, boolean enabled);
     boolean isUsbDataSignalingEnabled(String callerPackage);
-    boolean isUsbDataSignalingEnabledForUser(int userId);
     boolean canUsbDataSignalingBeDisabled();
 
     void setMinimumRequiredWifiSecurityLevel(String callerPackageName, int level);
diff --git a/core/java/android/app/admin/PasswordMetrics.java b/core/java/android/app/admin/PasswordMetrics.java
index ab48791..dd31175 100644
--- a/core/java/android/app/admin/PasswordMetrics.java
+++ b/core/java/android/app/admin/PasswordMetrics.java
@@ -30,6 +30,7 @@
 import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PATTERN;
 import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PIN;
 import static com.android.internal.widget.LockPatternUtils.MIN_LOCK_PASSWORD_SIZE;
+import static com.android.internal.widget.LockPatternUtils.MIN_LOCK_PATTERN_SIZE;
 import static com.android.internal.widget.PasswordValidationError.CONTAINS_INVALID_CHARACTERS;
 import static com.android.internal.widget.PasswordValidationError.CONTAINS_SEQUENCE;
 import static com.android.internal.widget.PasswordValidationError.NOT_ENOUGH_DIGITS;
@@ -134,17 +135,6 @@
         }
     }
 
-    private static boolean hasInvalidCharacters(byte[] password) {
-        // Allow non-control Latin-1 characters only.
-        for (byte b : password) {
-            char c = (char) b;
-            if (c < 32 || c > 127) {
-                return true;
-            }
-        }
-        return false;
-    }
-
     @Override
     public int describeContents() {
         return 0;
@@ -189,19 +179,15 @@
     };
 
     /**
-     * Returns the {@code PasswordMetrics} for a given credential.
-     *
-     * If the credential is a pin or a password, equivalent to
-     * {@link #computeForPasswordOrPin(byte[], boolean)}. {@code credential} cannot be null
-     * when {@code type} is
-     * {@link com.android.internal.widget.LockPatternUtils#CREDENTIAL_TYPE_PASSWORD}.
+     * Returns the {@code PasswordMetrics} for the given credential.
      */
     public static PasswordMetrics computeForCredential(LockscreenCredential credential) {
         if (credential.isPassword() || credential.isPin()) {
-            return PasswordMetrics.computeForPasswordOrPin(credential.getCredential(),
-                    credential.isPin());
+            return computeForPasswordOrPin(credential.getCredential(), credential.isPin());
         } else if (credential.isPattern())  {
-            return new PasswordMetrics(CREDENTIAL_TYPE_PATTERN);
+            PasswordMetrics metrics = new PasswordMetrics(CREDENTIAL_TYPE_PATTERN);
+            metrics.length = credential.size();
+            return metrics;
         } else if (credential.isNone()) {
             return new PasswordMetrics(CREDENTIAL_TYPE_NONE);
         } else {
@@ -210,10 +196,10 @@
     }
 
     /**
-     * Returns the {@code PasswordMetrics} for a given password or pin
+     * Returns the {@code PasswordMetrics} for the given password or pin.
      */
-    public static PasswordMetrics computeForPasswordOrPin(byte[] password, boolean isPin) {
-        // Analyse the characters used
+    private static PasswordMetrics computeForPasswordOrPin(byte[] credential, boolean isPin) {
+        // Analyze the characters used.
         int letters = 0;
         int upperCase = 0;
         int lowerCase = 0;
@@ -221,8 +207,8 @@
         int symbols = 0;
         int nonLetter = 0;
         int nonNumeric = 0;
-        final int length = password.length;
-        for (byte b : password) {
+        final int length = credential.length;
+        for (byte b : credential) {
             switch (categoryChar((char) b)) {
                 case CHAR_LOWER_CASE:
                     letters++;
@@ -247,7 +233,7 @@
         }
 
         final int credType = isPin ? CREDENTIAL_TYPE_PIN : CREDENTIAL_TYPE_PASSWORD;
-        final int seqLength = maxLengthSequence(password);
+        final int seqLength = maxLengthSequence(credential);
         return new PasswordMetrics(credType, length, letters, upperCase, lowerCase,
                 numeric, symbols, nonLetter, nonNumeric, seqLength);
     }
@@ -513,26 +499,24 @@
     }
 
     /**
-     * Validates password against minimum metrics and complexity.
+     * Validates a proposed lockscreen credential against minimum metrics and complexity.
      *
-     * @param adminMetrics - minimum metrics to satisfy admin requirements.
-     * @param minComplexity - minimum complexity imposed by the requester.
-     * @param isPin - whether it is PIN that should be only digits
-     * @param password - password to validate.
-     * @return a list of password validation errors. An empty list means the password is OK.
+     * @param adminMetrics minimum metrics to satisfy admin requirements
+     * @param minComplexity minimum complexity imposed by the requester
+     * @param credential the proposed lockscreen credential
+     *
+     * @return a list of validation errors. An empty list means the credential is OK.
      *
      * TODO: move to PasswordPolicy
      */
-    public static List<PasswordValidationError> validatePassword(
-            PasswordMetrics adminMetrics, int minComplexity, boolean isPin, byte[] password) {
-
-        if (hasInvalidCharacters(password)) {
+    public static List<PasswordValidationError> validateCredential(
+            PasswordMetrics adminMetrics, int minComplexity, LockscreenCredential credential) {
+        if (credential.hasInvalidChars()) {
             return Collections.singletonList(
                     new PasswordValidationError(CONTAINS_INVALID_CHARACTERS, 0));
         }
-
-        final PasswordMetrics enteredMetrics = computeForPasswordOrPin(password, isPin);
-        return validatePasswordMetrics(adminMetrics, minComplexity, enteredMetrics);
+        PasswordMetrics actualMetrics = computeForCredential(credential);
+        return validatePasswordMetrics(adminMetrics, minComplexity, actualMetrics);
     }
 
     /**
@@ -555,9 +539,18 @@
                 || !bucket.allowsCredType(actualMetrics.credType)) {
             return Collections.singletonList(new PasswordValidationError(WEAK_CREDENTIAL_TYPE, 0));
         }
-        if (actualMetrics.credType != CREDENTIAL_TYPE_PASSWORD
-                && actualMetrics.credType != CREDENTIAL_TYPE_PIN) {
-            return Collections.emptyList(); // Nothing to check for pattern or none.
+        if (actualMetrics.credType == CREDENTIAL_TYPE_PATTERN) {
+            // For pattern, only need to check the length against the hardcoded minimum.  If the
+            // pattern length is unavailable (e.g., PasswordMetrics that was stored on-disk before
+            // the pattern length started being included in it), assume it is okay.
+            if (actualMetrics.length != 0 && actualMetrics.length < MIN_LOCK_PATTERN_SIZE) {
+                return Collections.singletonList(new PasswordValidationError(TOO_SHORT,
+                            MIN_LOCK_PATTERN_SIZE));
+            }
+            return Collections.emptyList();
+        }
+        if (actualMetrics.credType == CREDENTIAL_TYPE_NONE) {
+            return Collections.emptyList(); // Nothing to check for none.
         }
 
         if (actualMetrics.credType == CREDENTIAL_TYPE_PIN && actualMetrics.nonNumeric > 0) {
diff --git a/core/java/android/app/ambientcontext/IAmbientContextManager.aidl b/core/java/android/app/ambientcontext/IAmbientContextManager.aidl
index 8f06e76..a06bdd3 100644
--- a/core/java/android/app/ambientcontext/IAmbientContextManager.aidl
+++ b/core/java/android/app/ambientcontext/IAmbientContextManager.aidl
@@ -35,6 +35,7 @@
     void registerObserverWithCallback(in AmbientContextEventRequest request,
         String packageName,
         in IAmbientContextObserver observer);
+    @EnforcePermission("ACCESS_AMBIENT_CONTEXT_EVENT")
     void unregisterObserver(in String callingPackage);
     void queryServiceStatus(in int[] eventTypes, in String callingPackage,
         in RemoteCallback statusCallback);
diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java
index b7ec7b5..d66fca8 100644
--- a/core/java/android/app/assist/AssistStructure.java
+++ b/core/java/android/app/assist/AssistStructure.java
@@ -22,6 +22,7 @@
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.service.autofill.FillRequest;
+import android.text.Spanned;
 import android.text.TextUtils;
 import android.util.Log;
 import android.util.Pair;
@@ -1557,6 +1558,10 @@
         /**
          * Returns any text associated with the node that is displayed to the user, or null
          * if there is none.
+         *
+         * <p> The text will be stripped of any spans that could potentially contain reference to
+         * the activity context, to avoid memory leak. If the text contained a span, a plain
+         * string version of the text will be returned.
          */
         @Nullable
         public CharSequence getText() {
@@ -1996,14 +2001,16 @@
         @Override
         public void setText(CharSequence text) {
             ViewNodeText t = getNodeText();
-            t.mText = TextUtils.trimNoCopySpans(text);
+            // Strip spans from the text to avoid memory leak
+            t.mText = TextUtils.trimToParcelableSize(stripAllSpansFromText(text));
             t.mTextSelectionStart = t.mTextSelectionEnd = -1;
         }
 
         @Override
         public void setText(CharSequence text, int selectionStart, int selectionEnd) {
             ViewNodeText t = getNodeText();
-            t.mText = TextUtils.trimNoCopySpans(text);
+            // Strip spans from the text to avoid memory leak
+            t.mText = stripAllSpansFromText(text);
             t.mTextSelectionStart = selectionStart;
             t.mTextSelectionEnd = selectionEnd;
         }
@@ -2222,6 +2229,13 @@
         public void setHtmlInfo(@NonNull HtmlInfo htmlInfo) {
             mNode.mHtmlInfo = htmlInfo;
         }
+
+        private CharSequence stripAllSpansFromText(CharSequence text) {
+            if (text instanceof Spanned) {
+                return text.toString();
+            }
+            return text;
+        }
     }
 
     private static final class HtmlInfoNode extends HtmlInfo implements Parcelable {
diff --git a/core/java/android/app/backup/BackupManager.java b/core/java/android/app/backup/BackupManager.java
index 5848521..4a07bf1 100644
--- a/core/java/android/app/backup/BackupManager.java
+++ b/core/java/android/app/backup/BackupManager.java
@@ -37,6 +37,8 @@
 import android.util.Log;
 import android.util.Pair;
 
+import com.android.internal.annotations.VisibleForTesting;
+
 import java.util.List;
 
 /**
@@ -199,8 +201,15 @@
     public static final int ERROR_TRANSPORT_INVALID = -2;
 
     private Context mContext;
+
+    /**
+     * @hide Making this package private is not sufficient for the test to access it, that's because
+     * the test is in the same package but is loaded with a different class loader. Package
+     * private members are not accessible across class loaders. So we make it public and @hide it.
+     */
     @UnsupportedAppUsage
-    private static IBackupManager sService;
+    @VisibleForTesting
+    public static IBackupManager sService;
 
     @UnsupportedAppUsage
     private static void checkServiceBinder() {
diff --git a/core/java/android/app/cloudsearch/OWNERS b/core/java/android/app/cloudsearch/OWNERS
index aa4da3b..3a5841e 100644
--- a/core/java/android/app/cloudsearch/OWNERS
+++ b/core/java/android/app/cloudsearch/OWNERS
@@ -1,4 +1,3 @@
 # Bug component: 758286
 
-huiwu@google.com
 srazdan@google.com
diff --git a/core/java/android/app/servertransaction/WindowContextInfoChangeItem.java b/core/java/android/app/servertransaction/WindowContextInfoChangeItem.java
new file mode 100644
index 0000000..74721d5
--- /dev/null
+++ b/core/java/android/app/servertransaction/WindowContextInfoChangeItem.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app.servertransaction;
+
+import static java.util.Objects.requireNonNull;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.app.ClientTransactionHandler;
+import android.content.res.Configuration;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.window.WindowContextInfo;
+
+import java.util.Objects;
+
+/**
+ * {@link android.window.WindowContext} configuration change message.
+ * @hide
+ */
+public class WindowContextInfoChangeItem extends ClientTransactionItem {
+
+    @Nullable
+    private IBinder mClientToken;
+    @Nullable
+    private WindowContextInfo mInfo;
+
+    @Override
+    public void execute(@NonNull ClientTransactionHandler client, @NonNull IBinder token,
+            @NonNull PendingTransactionActions pendingActions) {
+        client.handleWindowContextInfoChanged(mClientToken, mInfo);
+    }
+
+    // ObjectPoolItem implementation
+
+    private WindowContextInfoChangeItem() {}
+
+    /** Obtains an instance initialized with provided params. */
+    public static WindowContextInfoChangeItem obtain(
+            @NonNull IBinder clientToken, @NonNull Configuration config, int displayId) {
+        WindowContextInfoChangeItem instance =
+                ObjectPool.obtain(WindowContextInfoChangeItem.class);
+        if (instance == null) {
+            instance = new WindowContextInfoChangeItem();
+        }
+        instance.mClientToken = requireNonNull(clientToken);
+        instance.mInfo = new WindowContextInfo(config, displayId);
+
+        return instance;
+    }
+
+    @Override
+    public void recycle() {
+        mClientToken = null;
+        mInfo = null;
+        ObjectPool.recycle(this);
+    }
+
+    // Parcelable implementation
+
+    /** Writes to Parcel. */
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        dest.writeStrongBinder(mClientToken);
+        dest.writeTypedObject(mInfo, flags);
+    }
+
+    /** Reads from Parcel. */
+    private WindowContextInfoChangeItem(@NonNull Parcel in) {
+        mClientToken = in.readStrongBinder();
+        mInfo = in.readTypedObject(WindowContextInfo.CREATOR);
+    }
+
+    public static final @NonNull Creator<WindowContextInfoChangeItem> CREATOR =
+            new Creator<>() {
+                public WindowContextInfoChangeItem createFromParcel(Parcel in) {
+                    return new WindowContextInfoChangeItem(in);
+                }
+
+                public WindowContextInfoChangeItem[] newArray(int size) {
+                    return new WindowContextInfoChangeItem[size];
+                }
+    };
+
+    @Override
+    public boolean equals(@Nullable Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        final WindowContextInfoChangeItem other = (WindowContextInfoChangeItem) o;
+        return Objects.equals(mClientToken, other.mClientToken)
+                && Objects.equals(mInfo, other.mInfo);
+    }
+
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + Objects.hashCode(mClientToken);
+        result = 31 * result + Objects.hashCode(mInfo);
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "WindowContextInfoChangeItem{clientToken=" + mClientToken
+                + ", info=" + mInfo
+                + "}";
+    }
+}
diff --git a/core/java/android/app/servertransaction/WindowContextWindowRemovalItem.java b/core/java/android/app/servertransaction/WindowContextWindowRemovalItem.java
new file mode 100644
index 0000000..ed52a64
--- /dev/null
+++ b/core/java/android/app/servertransaction/WindowContextWindowRemovalItem.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app.servertransaction;
+
+import static java.util.Objects.requireNonNull;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.app.ClientTransactionHandler;
+import android.os.IBinder;
+import android.os.Parcel;
+
+import java.util.Objects;
+
+/**
+ * {@link android.window.WindowContext} window removal message.
+ * @hide
+ */
+public class WindowContextWindowRemovalItem extends ClientTransactionItem {
+
+    @Nullable
+    private IBinder mClientToken;
+
+    @Override
+    public void execute(@NonNull ClientTransactionHandler client, @NonNull IBinder token,
+            @NonNull PendingTransactionActions pendingActions) {
+        client.handleWindowContextWindowRemoval(mClientToken);
+    }
+
+    // ObjectPoolItem implementation
+
+    private WindowContextWindowRemovalItem() {}
+
+    /** Obtains an instance initialized with provided params. */
+    public static WindowContextWindowRemovalItem obtain(@NonNull IBinder clientToken) {
+        WindowContextWindowRemovalItem instance =
+                ObjectPool.obtain(WindowContextWindowRemovalItem.class);
+        if (instance == null) {
+            instance = new WindowContextWindowRemovalItem();
+        }
+        instance.mClientToken = requireNonNull(clientToken);
+
+        return instance;
+    }
+
+    @Override
+    public void recycle() {
+        mClientToken = null;
+        ObjectPool.recycle(this);
+    }
+
+    // Parcelable implementation
+
+    /** Writes to Parcel. */
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        dest.writeStrongBinder(mClientToken);
+    }
+
+    /** Reads from Parcel. */
+    private WindowContextWindowRemovalItem(@NonNull Parcel in) {
+        mClientToken = in.readStrongBinder();
+    }
+
+    public static final @NonNull Creator<WindowContextWindowRemovalItem> CREATOR = new Creator<>() {
+        public WindowContextWindowRemovalItem createFromParcel(Parcel in) {
+            return new WindowContextWindowRemovalItem(in);
+        }
+
+        public WindowContextWindowRemovalItem[] newArray(int size) {
+            return new WindowContextWindowRemovalItem[size];
+        }
+    };
+
+    @Override
+    public boolean equals(@Nullable Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        final WindowContextWindowRemovalItem other = (WindowContextWindowRemovalItem) o;
+        return Objects.equals(mClientToken, other.mClientToken);
+    }
+
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + Objects.hashCode(mClientToken);
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "WindowContextWindowRemovalItem{clientToken=" + mClientToken + "}";
+    }
+}
diff --git a/core/java/android/app/usage/IUsageStatsManager.aidl b/core/java/android/app/usage/IUsageStatsManager.aidl
index 4295517..49543a1 100644
--- a/core/java/android/app/usage/IUsageStatsManager.aidl
+++ b/core/java/android/app/usage/IUsageStatsManager.aidl
@@ -87,6 +87,8 @@
             int userId);
     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.ACCESS_BROADCAST_RESPONSE_STATS)")
     void clearBroadcastEvents(String callingPackage, int userId);
+    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.DUMP)")
+    boolean isPackageExemptedFromBroadcastResponseStats(String packageName, int userId);
     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG)")
     String getAppStandbyConstant(String key);
 }
diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java
index 4b0ca28..ecf16439 100644
--- a/core/java/android/app/usage/UsageStatsManager.java
+++ b/core/java/android/app/usage/UsageStatsManager.java
@@ -1528,6 +1528,22 @@
         }
     }
 
+    /**
+     * Checks whether the given {@code packageName} is exempted from broadcast response tracking.
+     *
+     * @hide
+     */
+    @RequiresPermission(android.Manifest.permission.DUMP)
+    @UserHandleAware
+    public boolean isPackageExemptedFromBroadcastResponseStats(@NonNull String packageName) {
+        try {
+            return mService.isPackageExemptedFromBroadcastResponseStats(packageName,
+                    mContext.getUserId());
+        } catch (RemoteException re) {
+            throw re.rethrowFromSystemServer();
+        }
+    }
+
     /** @hide */
     @RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
     @Nullable
diff --git a/core/java/android/app/wallpapereffectsgeneration/OWNERS b/core/java/android/app/wallpapereffectsgeneration/OWNERS
index 2bc0154..30949f8 100644
--- a/core/java/android/app/wallpapereffectsgeneration/OWNERS
+++ b/core/java/android/app/wallpapereffectsgeneration/OWNERS
@@ -1,5 +1,4 @@
 susharon@google.com
 shanh@google.com
-huiwu@google.com
 srazdan@google.com
 
diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java
index b159321..3927b40 100644
--- a/core/java/android/appwidget/AppWidgetManager.java
+++ b/core/java/android/appwidget/AppWidgetManager.java
@@ -781,7 +781,18 @@
      *
      * @param appWidgetIds  The AppWidget instances to notify of view data changes.
      * @param viewId        The collection view id.
+     * @deprecated The corresponding API
+     * {@link RemoteViews#setRemoteAdapter(int, Intent)} associated with this method has been
+     * deprecated. Moving forward please use
+     * {@link RemoteViews#setRemoteAdapter(int, android.widget.RemoteViews.RemoteCollectionItems)}
+     * instead to set {@link android.widget.RemoteViews.RemoteCollectionItems} for the remote
+     * adapter and update the widget views by calling {@link #updateAppWidget(int[], RemoteViews)},
+     * {@link #updateAppWidget(int, RemoteViews)},
+     * {@link #updateAppWidget(ComponentName, RemoteViews)},
+     * {@link #partiallyUpdateAppWidget(int[], RemoteViews)},
+     * or {@link #partiallyUpdateAppWidget(int, RemoteViews)}, whichever applicable.
      */
+    @Deprecated
     public void notifyAppWidgetViewDataChanged(int[] appWidgetIds, int viewId) {
         if (mService == null) {
             return;
@@ -817,7 +828,18 @@
      *
      * @param appWidgetId  The AppWidget instance to notify of view data changes.
      * @param viewId       The collection view id.
+     * @deprecated The corresponding API
+     * {@link RemoteViews#setRemoteAdapter(int, Intent)} associated with this method has been
+     * deprecated. Moving forward please use
+     * {@link RemoteViews#setRemoteAdapter(int, android.widget.RemoteViews.RemoteCollectionItems)}
+     * instead to set {@link android.widget.RemoteViews.RemoteCollectionItems} for the remote
+     * adapter and update the widget views by calling {@link #updateAppWidget(int[], RemoteViews)},
+     * {@link #updateAppWidget(int, RemoteViews)},
+     * {@link #updateAppWidget(ComponentName, RemoteViews)},
+     * {@link #partiallyUpdateAppWidget(int[], RemoteViews)},
+     * or {@link #partiallyUpdateAppWidget(int, RemoteViews)}, whichever applicable.
      */
+    @Deprecated
     public void notifyAppWidgetViewDataChanged(int appWidgetId, int viewId) {
         if (mService == null) {
             return;
diff --git a/core/java/android/attention/AttentionManagerInternal.java b/core/java/android/attention/AttentionManagerInternal.java
index 24fe0db..5d3889d 100644
--- a/core/java/android/attention/AttentionManagerInternal.java
+++ b/core/java/android/attention/AttentionManagerInternal.java
@@ -28,6 +28,11 @@
     public abstract boolean isAttentionServiceSupported();
 
     /**
+     * Returns {@code true} if proximity update is supported by the service.
+     */
+    public abstract boolean isProximitySupported();
+
+    /**
      * Checks whether user attention is at the screen and calls in the provided callback.
      *
      * @param timeoutMillis a budget for the attention check; if it takes longer - {@link
diff --git a/core/java/android/companion/AssociationInfo.java b/core/java/android/companion/AssociationInfo.java
index 0958a806..7d62c79 100644
--- a/core/java/android/companion/AssociationInfo.java
+++ b/core/java/android/companion/AssociationInfo.java
@@ -57,6 +57,7 @@
     private final boolean mSelfManaged;
     private final boolean mNotifyOnDeviceNearby;
     private final int mSystemDataSyncFlags;
+    private final String mTag;
 
     /**
      * Indicates that the association has been revoked (removed), but we keep the association
@@ -78,10 +79,11 @@
      * @hide
      */
     public AssociationInfo(int id, @UserIdInt int userId, @NonNull String packageName,
-            @Nullable MacAddress macAddress, @Nullable CharSequence displayName,
-            @Nullable String deviceProfile, @Nullable AssociatedDevice associatedDevice,
-            boolean selfManaged, boolean notifyOnDeviceNearby, boolean revoked,
-            long timeApprovedMs, long lastTimeConnectedMs, int systemDataSyncFlags) {
+            @Nullable String tag, @Nullable MacAddress macAddress,
+            @Nullable CharSequence displayName, @Nullable String deviceProfile,
+            @Nullable AssociatedDevice associatedDevice, boolean selfManaged,
+            boolean notifyOnDeviceNearby, boolean revoked, long timeApprovedMs,
+            long lastTimeConnectedMs, int systemDataSyncFlags) {
         if (id <= 0) {
             throw new IllegalArgumentException("Association ID should be greater than 0");
         }
@@ -97,6 +99,7 @@
 
         mDeviceMacAddress = macAddress;
         mDisplayName = displayName;
+        mTag = tag;
         mDeviceProfile = deviceProfile;
         mAssociatedDevice = associatedDevice;
 
@@ -116,6 +119,14 @@
     }
 
     /**
+     * @return the tag of this association.
+     * @see CompanionDeviceManager#setAssociationTag(int, String)
+     */
+    public @Nullable String getTag() {
+        return mTag;
+    }
+
+    /**
      * @return the ID of the user who "owns" this association.
      * @hide
      */
@@ -287,6 +298,7 @@
                 + "mId=" + mId
                 + ", mUserId=" + mUserId
                 + ", mPackageName='" + mPackageName + '\''
+                + ", mTag='" + mTag + '\''
                 + ", mDeviceMacAddress=" + mDeviceMacAddress
                 + ", mDisplayName='" + mDisplayName + '\''
                 + ", mDeviceProfile='" + mDeviceProfile + '\''
@@ -315,6 +327,7 @@
                 && mTimeApprovedMs == that.mTimeApprovedMs
                 && mLastTimeConnectedMs == that.mLastTimeConnectedMs
                 && Objects.equals(mPackageName, that.mPackageName)
+                && Objects.equals(mTag, that.mTag)
                 && Objects.equals(mDeviceMacAddress, that.mDeviceMacAddress)
                 && Objects.equals(mDisplayName, that.mDisplayName)
                 && Objects.equals(mDeviceProfile, that.mDeviceProfile)
@@ -324,7 +337,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(mId, mUserId, mPackageName, mDeviceMacAddress, mDisplayName,
+        return Objects.hash(mId, mUserId, mPackageName, mTag, mDeviceMacAddress, mDisplayName,
                 mDeviceProfile, mAssociatedDevice, mSelfManaged, mNotifyOnDeviceNearby, mRevoked,
                 mTimeApprovedMs, mLastTimeConnectedMs, mSystemDataSyncFlags);
     }
@@ -340,6 +353,7 @@
 
         dest.writeInt(mUserId);
         dest.writeString(mPackageName);
+        dest.writeString(mTag);
 
         dest.writeTypedObject(mDeviceMacAddress, 0);
         dest.writeCharSequence(mDisplayName);
@@ -359,6 +373,7 @@
 
         mUserId = in.readInt();
         mPackageName = in.readString();
+        mTag = in.readString();
 
         mDeviceMacAddress = in.readTypedObject(MacAddress.CREATOR);
         mDisplayName = in.readCharSequence();
@@ -413,9 +428,11 @@
         private boolean mRevoked;
         private long mLastTimeConnectedMs;
         private int mSystemDataSyncFlags;
+        private String mTag;
 
         private Builder(@NonNull AssociationInfo info) {
             mOriginalInfo = info;
+            mTag = info.mTag;
             mNotifyOnDeviceNearby = info.mNotifyOnDeviceNearby;
             mRevoked = info.mRevoked;
             mLastTimeConnectedMs = info.mLastTimeConnectedMs;
@@ -460,12 +477,21 @@
         }
 
         /** @hide */
+        @Override
+        @NonNull
+        public Builder setTag(String tag) {
+            mTag = tag;
+            return this;
+        }
+
+        /** @hide */
         @NonNull
         public AssociationInfo build() {
             return new AssociationInfo(
                     mOriginalInfo.mId,
                     mOriginalInfo.mUserId,
                     mOriginalInfo.mPackageName,
+                    mTag,
                     mOriginalInfo.mDeviceMacAddress,
                     mOriginalInfo.mDisplayName,
                     mOriginalInfo.mDeviceProfile,
@@ -508,5 +534,8 @@
         /** @hide */
         @NonNull
         Builder setSystemDataSyncFlags(int flags);
+
+        /** @hide */
+        Builder setTag(String tag);
     }
 }
diff --git a/core/java/android/companion/CompanionDeviceManager.java b/core/java/android/companion/CompanionDeviceManager.java
index 4dea4a7..3aa2877 100644
--- a/core/java/android/companion/CompanionDeviceManager.java
+++ b/core/java/android/companion/CompanionDeviceManager.java
@@ -20,7 +20,9 @@
 import static android.Manifest.permission.REQUEST_COMPANION_PROFILE_AUTOMOTIVE_PROJECTION;
 import static android.Manifest.permission.REQUEST_COMPANION_PROFILE_COMPUTER;
 import static android.Manifest.permission.REQUEST_COMPANION_PROFILE_WATCH;
+import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
 
+import android.annotation.CallbackExecutor;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -28,6 +30,7 @@
 import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.annotation.SystemService;
+import android.annotation.TestApi;
 import android.annotation.UserHandleAware;
 import android.app.Activity;
 import android.app.ActivityManager;
@@ -208,12 +211,32 @@
     public static final String EXTRA_ASSOCIATION = "android.companion.extra.ASSOCIATION";
 
     /**
-     * The package name of the companion device discovery component.
+     * Test message type without a designated callback.
      *
      * @hide
      */
-    public static final String COMPANION_DEVICE_DISCOVERY_PACKAGE_NAME =
-            "com.android.companiondevicemanager";
+    @TestApi public static final int MESSAGE_REQUEST_PING = 0x63807378; // ?PIN
+    /**
+     * Message header assigned to the remote authentication handshakes.
+     *
+     * @hide
+     */
+    @SystemApi(client = MODULE_LIBRARIES)
+    public static final int MESSAGE_REQUEST_REMOTE_AUTHENTICATION = 0x63827765; // ?RMA
+    /**
+     * Message header assigned to the telecom context sync metadata.
+     *
+     * @hide
+     */
+    @SystemApi(client = MODULE_LIBRARIES)
+    public static final int MESSAGE_REQUEST_CONTEXT_SYNC = 0x63678883; // ?CXS
+    /**
+     * Message header assigned to the permission restore request.
+     *
+     * @hide
+     */
+    @SystemApi(client = MODULE_LIBRARIES)
+    public static final int MESSAGE_REQUEST_PERMISSION_RESTORE = 0x63826983; // ?RES
 
     /**
      * Callback for applications to receive updates about and the outcome of
@@ -804,28 +827,36 @@
     }
 
     /**
-     * Listener for any changes to {@link com.android.server.companion.transport.Transport}.
+     * Listener for any changes to the list of attached transports.
+     *
+     * @see com.android.server.companion.transport.Transport
      *
      * @hide
      */
+    @SystemApi(client = MODULE_LIBRARIES)
     public interface OnTransportsChangedListener {
         /**
-         * Invoked when a change occurs to any of the transports
+         * Invoked when a transport is attached or detached.
          *
-         * @param associations all the associations which have connected transports
+         * @param associations all the associations which have connected transports.
          */
         void onTransportsChanged(@NonNull List<AssociationInfo> associations);
     }
 
     /**
-     * Register a listener for any changes to
-     * {@link com.android.server.companion.transport.Transport}. Your app will receive a callback to
-     * {@link OnTransportsChangedListener} immediately with all the existing transports.
+     * Adds a listener for any changes to the list of attached transports.
+     * {@link OnTransportsChangedListener#onTransportsChanged(List)} will be triggered with a list
+     * of existing transports when a transport is detached or a new transport is attached.
+     *
+     * @see com.android.server.companion.transport.Transport
      *
      * @hide
      */
+    @SystemApi(client = MODULE_LIBRARIES)
+    @RequiresPermission(android.Manifest.permission.USE_COMPANION_TRANSPORTS)
     public void addOnTransportsChangedListener(
-            @NonNull Executor executor, @NonNull OnTransportsChangedListener listener) {
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull OnTransportsChangedListener listener) {
         final OnTransportsChangedListenerProxy proxy = new OnTransportsChangedListenerProxy(
                 executor, listener);
         try {
@@ -836,11 +867,14 @@
     }
 
     /**
-     * Unregister a listener to stop receiving any changes to
-     * {@link com.android.server.companion.transport.Transport}.
+     * Removes the registered listener for any changes to the list of attached transports.
+     *
+     * @see com.android.server.companion.transport.Transport
      *
      * @hide
      */
+    @SystemApi(client = MODULE_LIBRARIES)
+    @RequiresPermission(android.Manifest.permission.USE_COMPANION_TRANSPORTS)
     public void removeOnTransportsChangedListener(
             @NonNull OnTransportsChangedListener listener) {
         final OnTransportsChangedListenerProxy proxy = new OnTransportsChangedListenerProxy(
@@ -853,11 +887,16 @@
     }
 
     /**
-     * Send a message to remote devices
+     * Sends a message to associated remote devices. The target associations must already have a
+     * connected transport.
+     *
+     * @see #attachSystemDataTransport(int, InputStream, OutputStream)
      *
      * @hide
      */
-    public void sendMessage(int messageType, byte[] data, int[] associationIds) {
+    @SystemApi(client = MODULE_LIBRARIES)
+    @RequiresPermission(android.Manifest.permission.USE_COMPANION_TRANSPORTS)
+    public void sendMessage(int messageType, @NonNull byte[] data, @NonNull int[] associationIds) {
         try {
             mService.sendMessage(messageType, data, associationIds);
         } catch (RemoteException e) {
@@ -866,28 +905,30 @@
     }
 
     /**
-     * Listener when a message is received for the registered message type
+     * Listener that triggers a callback when a message is received through a connected transport.
      *
      * @see #addOnMessageReceivedListener(Executor, int, OnMessageReceivedListener)
      *
      * @hide
      */
+    @SystemApi(client = MODULE_LIBRARIES)
     public interface OnMessageReceivedListener {
         /**
-         * Called when a message is received
+         * Called when a message is received.
          */
-        void onMessageReceived(int associationId, byte[] data);
+        void onMessageReceived(int associationId, @NonNull byte[] data);
     }
 
     /**
-     * Register a listener to receive callbacks when a message is received by the given type
-     *
-     * @see com.android.server.companion.transport.Transport for supported message types
+     * Adds a listener to trigger callbacks when messages of given type are received.
      *
      * @hide
      */
-    public void addOnMessageReceivedListener(@NonNull Executor executor, int messageType,
-            OnMessageReceivedListener listener) {
+    @SystemApi(client = MODULE_LIBRARIES)
+    @RequiresPermission(android.Manifest.permission.USE_COMPANION_TRANSPORTS)
+    public void addOnMessageReceivedListener(
+            @NonNull @CallbackExecutor Executor executor, int messageType,
+            @NonNull OnMessageReceivedListener listener) {
         final OnMessageReceivedListenerProxy proxy = new OnMessageReceivedListenerProxy(
                 executor, listener);
         try {
@@ -898,15 +939,14 @@
     }
 
     /**
-     * Unregister a listener to stop receiving callbacks when a message is received by the given
-     * type
-     *
-     * @see com.android.server.companion.transport.Transport for supported message types
+     * Removes the registered listener for received messages of given type.
      *
      * @hide
      */
+    @SystemApi(client = MODULE_LIBRARIES)
+    @RequiresPermission(android.Manifest.permission.USE_COMPANION_TRANSPORTS)
     public void removeOnMessageReceivedListener(int messageType,
-            OnMessageReceivedListener listener) {
+            @NonNull OnMessageReceivedListener listener) {
         final OnMessageReceivedListenerProxy proxy = new OnMessageReceivedListenerProxy(
                 null, listener);
         try {
@@ -1316,12 +1356,13 @@
     }
 
     /**
-     * Enable or disable secure transport for testing. Defaults to enabled.
+     * Enables or disables secure transport for testing. Defaults to being enabled.
      * Should not be used outside of testing.
      *
      * @param enabled true to enable. false to disable.
      * @hide
      */
+    @TestApi
     @RequiresPermission(android.Manifest.permission.MANAGE_COMPANION_DEVICES)
     public void enableSecureTransport(boolean enabled) {
         try {
@@ -1331,6 +1372,50 @@
         }
     }
 
+    /**
+     * Sets the {@link AssociationInfo#getTag() tag} for this association.
+     *
+     * <p>The length of the tag must be at most 20 characters.
+     *
+     * <p>This allows to store useful information about the associated devices.
+     *
+     * @param associationId The unique {@link AssociationInfo#getId ID} assigned to the Association
+     *                          of the companion device recorded by CompanionDeviceManager
+     * @param tag the tag of this association
+     */
+    @UserHandleAware
+    public void setAssociationTag(int associationId, @NonNull String tag) {
+        Objects.requireNonNull(tag, "tag cannot be null");
+
+        if (tag.length() > 20) {
+            throw new IllegalArgumentException("Length of the tag must be at most 20 characters");
+        }
+
+        try {
+            mService.setAssociationTag(associationId, tag);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Clears the {@link AssociationInfo#getTag() tag} for this association.
+     *
+     * <p>The tag will be set to null for this association when calling this API.
+     *
+     * @param associationId The unique {@link AssociationInfo#getId ID} assigned to the Association
+     *                          of the companion device recorded by CompanionDeviceManager
+     * @see CompanionDeviceManager#setAssociationTag(int, String)
+     */
+    @UserHandleAware
+    public void clearAssociationTag(int associationId) {
+        try {
+            mService.clearAssociationTag(associationId);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
     private boolean checkFeaturePresent() {
         boolean featurePresent = mService != null;
         if (!featurePresent && DEBUG) {
diff --git a/core/java/android/companion/CompanionDeviceService.java b/core/java/android/companion/CompanionDeviceService.java
index f660377..03e75e9 100644
--- a/core/java/android/companion/CompanionDeviceService.java
+++ b/core/java/android/companion/CompanionDeviceService.java
@@ -17,6 +17,7 @@
 
 package android.companion;
 
+import android.annotation.IntDef;
 import android.annotation.MainThread;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -31,13 +32,14 @@
 
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.Objects;
 import java.util.concurrent.Executor;
 
 /**
- * A service that receives calls from the system when the associated companion device appears
- * nearby or is connected, as well as when the device is no longer "present" or connected.
- * See {@link #onDeviceAppeared(AssociationInfo)}/{@link #onDeviceDisappeared(AssociationInfo)}.
+ * A service that receives calls from the system with device events.
+ * See {@link #onDeviceEvent(AssociationInfo, int)}.
  *
  * <p>
  * Companion applications must create a service that {@code extends}
@@ -121,6 +123,57 @@
      */
     public static final String SERVICE_INTERFACE = "android.companion.CompanionDeviceService";
 
+    /** @hide */
+    @IntDef(prefix = {"DEVICE_EVENT"}, value = {
+            DEVICE_EVENT_BLE_APPEARED,
+            DEVICE_EVENT_BLE_DISAPPEARED,
+            DEVICE_EVENT_BT_CONNECTED,
+            DEVICE_EVENT_BT_DISCONNECTED,
+            DEVICE_EVENT_SELF_MANAGED_APPEARED,
+            DEVICE_EVENT_SELF_MANAGED_DISAPPEARED
+    })
+
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface DeviceEvent {}
+
+    /**
+     * Companion app receives {@link #onDeviceEvent(AssociationInfo, int)} callback
+     * with this event if the device comes into BLE range.
+     */
+    public static final int DEVICE_EVENT_BLE_APPEARED = 0;
+
+    /**
+     * Companion app receives {@link #onDeviceEvent(AssociationInfo, int)} callback
+     * with this event if the device is no longer in BLE range.
+     */
+    public static final int DEVICE_EVENT_BLE_DISAPPEARED = 1;
+
+    /**
+     * Companion app receives {@link #onDeviceEvent(AssociationInfo, int)} callback
+     * with this event when the bluetooth device is connected.
+     */
+    public static final int DEVICE_EVENT_BT_CONNECTED = 2;
+
+    /**
+     * Companion app receives {@link #onDeviceEvent(AssociationInfo, int)} callback
+     * with this event if the bluetooth device is disconnected.
+     */
+    public static final int DEVICE_EVENT_BT_DISCONNECTED = 3;
+
+    /**
+     * A companion app for a {@link AssociationInfo#isSelfManaged() self-managed} device will
+     * receive the callback {@link #onDeviceEvent(AssociationInfo, int)} if it reports that a
+     * device has appeared on its own.
+     */
+    public static final int DEVICE_EVENT_SELF_MANAGED_APPEARED = 4;
+
+    /**
+     * A companion app for a {@link AssociationInfo#isSelfManaged() self-managed} device will
+     * receive the callback {@link #onDeviceEvent(AssociationInfo, int)} if it reports that a
+     * device has disappeared on its own.
+     */
+    public static final int DEVICE_EVENT_SELF_MANAGED_DISAPPEARED = 5;
+
     private final Stub mRemote = new Stub();
 
     /**
@@ -251,7 +304,10 @@
      * Called by system whenever a device associated with this app is connected.
      *
      * @param associationInfo A record for the companion device.
+     *
+     * @deprecated please override {@link #onDeviceEvent(AssociationInfo, int)} instead.
      */
+    @Deprecated
     @MainThread
     public void onDeviceAppeared(@NonNull AssociationInfo associationInfo) {
         if (!associationInfo.isSelfManaged()) {
@@ -263,7 +319,10 @@
      * Called by system whenever a device associated with this app is disconnected.
      *
      * @param associationInfo A record for the companion device.
+     *
+     * @deprecated please override {@link #onDeviceEvent(AssociationInfo, int)} instead.
      */
+    @Deprecated
     @MainThread
     public void onDeviceDisappeared(@NonNull AssociationInfo associationInfo) {
         if (!associationInfo.isSelfManaged()) {
@@ -271,6 +330,30 @@
         }
     }
 
+    /**
+     *  Called by the system during device events.
+     *
+     *  <p>E.g. Event {@link #DEVICE_EVENT_BLE_APPEARED} will be called when the associated
+     *  companion device comes into BLE range.
+     *  <p>Event {@link #DEVICE_EVENT_BLE_DISAPPEARED} will be called when the associated
+     *  companion device is no longer in BLE range.
+     *  <p> Event {@link #DEVICE_EVENT_BT_CONNECTED} will be called when the associated
+     *  companion device is connected.
+     *  <p>Event {@link #DEVICE_EVENT_BT_DISCONNECTED} will be called when the associated
+     *  companion device is disconnected.
+     *  Note that app must receive {@link #DEVICE_EVENT_BLE_APPEARED} first before
+     *  {@link #DEVICE_EVENT_BLE_DISAPPEARED} and {@link #DEVICE_EVENT_BT_CONNECTED}
+     *  before {@link #DEVICE_EVENT_BT_DISCONNECTED}.
+     *
+     * @param associationInfo A record for the companion device.
+     * @param event Associated companion device's event.
+     */
+    @MainThread
+    public void onDeviceEvent(@NonNull AssociationInfo associationInfo,
+            @DeviceEvent int event) {
+        // Do nothing. Companion apps can override this function.
+    }
+
     @Nullable
     @Override
     public final IBinder onBind(@NonNull Intent intent) {
@@ -304,5 +387,11 @@
         public void onDeviceDisappeared(AssociationInfo associationInfo) {
             mMainHandler.postAtFrontOfQueue(() -> mService.onDeviceDisappeared(associationInfo));
         }
+
+        @Override
+        public void onDeviceEvent(AssociationInfo associationInfo, int event) {
+            mMainHandler.postAtFrontOfQueue(
+                    () -> mService.onDeviceEvent(associationInfo, event));
+        }
     }
 }
diff --git a/core/java/android/companion/ICompanionDeviceManager.aidl b/core/java/android/companion/ICompanionDeviceManager.aidl
index b5e2670..a3b202a 100644
--- a/core/java/android/companion/ICompanionDeviceManager.aidl
+++ b/core/java/android/companion/ICompanionDeviceManager.aidl
@@ -36,6 +36,8 @@
         in String callingPackage, int userId);
 
     List<AssociationInfo> getAssociations(String callingPackage, int userId);
+
+    @EnforcePermission("MANAGE_COMPANION_DEVICES")
     List<AssociationInfo> getAllAssociationsForUser(int userId);
 
     /** @deprecated */
@@ -48,35 +50,43 @@
 
     PendingIntent requestNotificationAccess(in ComponentName component, int userId);
 
-    /** @deprecated */
+    @EnforcePermission("MANAGE_COMPANION_DEVICES")
     boolean isDeviceAssociatedForWifiConnection(in String packageName, in String macAddress,
         int userId);
 
+    @EnforcePermission("REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE")
     void registerDevicePresenceListenerService(in String deviceAddress, in String callingPackage,
         int userId);
 
+    @EnforcePermission("REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE")
     void unregisterDevicePresenceListenerService(in String deviceAddress, in String callingPackage,
         int userId);
 
-    /** @deprecated */
     boolean canPairWithoutPrompt(in String packageName, in String deviceMacAddress, int userId);
 
-    /** @deprecated */
+    @EnforcePermission("ASSOCIATE_COMPANION_DEVICES")
     void createAssociation(in String packageName, in String macAddress, int userId,
         in byte[] certificate);
 
+    @EnforcePermission("MANAGE_COMPANION_DEVICES")
     void addOnAssociationsChangedListener(IOnAssociationsChangedListener listener, int userId);
 
+    @EnforcePermission("MANAGE_COMPANION_DEVICES")
     void removeOnAssociationsChangedListener(IOnAssociationsChangedListener listener, int userId);
 
+    @EnforcePermission("USE_COMPANION_TRANSPORTS")
     void addOnTransportsChangedListener(IOnTransportsChangedListener listener);
 
+    @EnforcePermission("USE_COMPANION_TRANSPORTS")
     void removeOnTransportsChangedListener(IOnTransportsChangedListener listener);
 
+    @EnforcePermission("USE_COMPANION_TRANSPORTS")
     void sendMessage(int messageType, in byte[] data, in int[] associationIds);
 
+    @EnforcePermission("USE_COMPANION_TRANSPORTS")
     void addOnMessageReceivedListener(int messageType, IOnMessageReceivedListener listener);
 
+    @EnforcePermission("USE_COMPANION_TRANSPORTS")
     void removeOnMessageReceivedListener(int messageType, IOnMessageReceivedListener listener);
 
     void notifyDeviceAppeared(int associationId);
@@ -89,8 +99,10 @@
     void startSystemDataTransfer(String packageName, int userId, int associationId,
         in ISystemDataTransferCallback callback);
 
+    @EnforcePermission("DELIVER_COMPANION_MESSAGES")
     void attachSystemDataTransport(String packageName, int userId, int associationId, in ParcelFileDescriptor fd);
 
+    @EnforcePermission("DELIVER_COMPANION_MESSAGES")
     void detachSystemDataTransport(String packageName, int userId, int associationId);
 
     boolean isCompanionApplicationBound(String packageName, int userId);
@@ -101,5 +113,14 @@
 
     void disableSystemDataSync(int associationId, int flags);
 
+    @EnforcePermission("MANAGE_COMPANION_DEVICES")
     void enableSecureTransport(boolean enabled);
+
+    void setAssociationTag(int associationId, String tag);
+
+    void clearAssociationTag(int associationId);
+
+    byte[] getBackupPayload(int userId);
+
+    void applyRestoredPayload(in byte[] payload, int userId);
 }
diff --git a/core/java/android/companion/ICompanionDeviceService.aidl b/core/java/android/companion/ICompanionDeviceService.aidl
index fa68508..2a311bf 100644
--- a/core/java/android/companion/ICompanionDeviceService.aidl
+++ b/core/java/android/companion/ICompanionDeviceService.aidl
@@ -22,4 +22,5 @@
 oneway interface ICompanionDeviceService {
     void onDeviceAppeared(in AssociationInfo associationInfo);
     void onDeviceDisappeared(in AssociationInfo associationInfo);
+    void onDeviceEvent(in AssociationInfo associationInfo, int state);
 }
diff --git a/core/java/android/companion/virtual/IVirtualDevice.aidl b/core/java/android/companion/virtual/IVirtualDevice.aidl
index 9efdf28..4801d15 100644
--- a/core/java/android/companion/virtual/IVirtualDevice.aidl
+++ b/core/java/android/companion/virtual/IVirtualDevice.aidl
@@ -59,6 +59,11 @@
     int getDeviceId();
 
     /**
+     * Returns the persistent ID of this virtual device.
+     */
+    String getPersistentDeviceId();
+
+    /**
      * Closes the virtual device and frees all associated resources.
      */
     @EnforcePermission("CREATE_VIRTUAL_DEVICE")
diff --git a/core/java/android/companion/virtual/IVirtualDeviceManager.aidl b/core/java/android/companion/virtual/IVirtualDeviceManager.aidl
index 07743cef5..ee7836f 100644
--- a/core/java/android/companion/virtual/IVirtualDeviceManager.aidl
+++ b/core/java/android/companion/virtual/IVirtualDeviceManager.aidl
@@ -44,6 +44,7 @@
      * @param activityListener The listener to listen for activity changes in a virtual device.
      * @param soundEffectListener The listener to listen for sound effect playback requests.
      */
+    @EnforcePermission("CREATE_VIRTUAL_DEVICE")
     IVirtualDevice createVirtualDevice(
             in IBinder token, String packageName, int associationId,
             in VirtualDeviceParams params, in IVirtualDeviceActivityListener activityListener,
diff --git a/core/java/android/companion/virtual/VirtualDevice.java b/core/java/android/companion/virtual/VirtualDevice.java
index 4ee65e0..ceaf7e4 100644
--- a/core/java/android/companion/virtual/VirtualDevice.java
+++ b/core/java/android/companion/virtual/VirtualDevice.java
@@ -35,6 +35,7 @@
 public final class VirtualDevice implements Parcelable {
 
     private final int mId;
+    private final @Nullable String mPersistentId;
     private final @Nullable String mName;
 
     /**
@@ -43,28 +44,55 @@
      *
      * @hide
      */
-    public VirtualDevice(int id, @Nullable String name) {
+    public VirtualDevice(int id, @Nullable String persistentId, @Nullable String name) {
         if (id <= Context.DEVICE_ID_DEFAULT) {
-            throw new IllegalArgumentException("VirtualDevice ID mist be greater than "
+            throw new IllegalArgumentException("VirtualDevice ID must be greater than "
                     + Context.DEVICE_ID_DEFAULT);
         }
         mId = id;
+        mPersistentId = persistentId;
         mName = name;
     }
 
     private VirtualDevice(@NonNull Parcel parcel) {
         mId = parcel.readInt();
+        mPersistentId = parcel.readString8();
         mName = parcel.readString8();
     }
 
     /**
      * Returns the unique ID of the virtual device.
+     *
+     * <p>This identifier corresponds to {@link Context#getDeviceId()} and can be used to access
+     * device-specific system capabilities.
+     *
+     * <p class="note">This identifier is ephemeral and should not be used for persisting any data
+     * per device.
+     *
+     * @see Context#createDeviceContext
+     * @see #getPersistentDeviceId
      */
     public int getDeviceId() {
         return mId;
     }
 
     /**
+     * Returns the persistent identifier of this virtual device, if any.
+     *
+     * <p> If there is no stable identifier for this virtual device, then this returns {@code null}.
+
+     * <p>This identifier may correspond to a physical device. In that case it remains valid for as
+     * long as that physical device is associated with the host device and may be used to persist
+     * data per device.
+     *
+     * <p class="note">This identifier may not be unique across virtual devices, in case there are
+     * more than one virtual devices corresponding to the same physical device.
+     */
+    public @Nullable String getPersistentDeviceId() {
+        return mPersistentId;
+    }
+
+    /**
      * Returns the name of the virtual device (optionally) provided during its creation.
      *
      * @see VirtualDeviceParams.Builder#setName(String)
@@ -81,6 +109,7 @@
     @Override
     public void writeToParcel(@NonNull Parcel dest, int flags) {
         dest.writeInt(mId);
+        dest.writeString8(mPersistentId);
         dest.writeString8(mName);
     }
 
@@ -94,12 +123,13 @@
         }
         VirtualDevice that = (VirtualDevice) o;
         return mId == that.mId
+                && Objects.equals(mPersistentId, that.mPersistentId)
                 && Objects.equals(mName, that.mName);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(mId, mName);
+        return Objects.hash(mId, mPersistentId, mName);
     }
 
     @Override
@@ -107,6 +137,7 @@
     public String toString() {
         return "VirtualDevice("
                 + " mId=" + mId
+                + " mPersistentId=" + mPersistentId
                 + " mName=" + mName
                 + ")";
     }
diff --git a/core/java/android/companion/virtual/VirtualDeviceInternal.java b/core/java/android/companion/virtual/VirtualDeviceInternal.java
index 045e4c6..f68cfff 100644
--- a/core/java/android/companion/virtual/VirtualDeviceInternal.java
+++ b/core/java/android/companion/virtual/VirtualDeviceInternal.java
@@ -160,6 +160,14 @@
         }
     }
 
+    @Nullable String getPersistentDeviceId() {
+        try {
+            return mVirtualDevice.getPersistentDeviceId();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
     @NonNull Context createContext() {
         try {
             return mContext.createDeviceContext(mVirtualDevice.getDeviceId());
diff --git a/core/java/android/companion/virtual/VirtualDeviceManager.java b/core/java/android/companion/virtual/VirtualDeviceManager.java
index 2ca2b79bc..060a5c8 100644
--- a/core/java/android/companion/virtual/VirtualDeviceManager.java
+++ b/core/java/android/companion/virtual/VirtualDeviceManager.java
@@ -367,6 +367,13 @@
         }
 
         /**
+         * Returns the persistent ID of this virtual device.
+         */
+        public @Nullable String getPersistentDeviceId() {
+            return mVirtualDeviceInternal.getPersistentDeviceId();
+        }
+
+        /**
          * Returns a new context bound to this device.
          *
          * <p>This is a convenience method equivalent to calling
@@ -680,7 +687,6 @@
          *   visibility is true.
          */
         @RequiresPermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE)
-        @NonNull
         public void setShowPointerIcon(boolean showPointerIcon) {
             mVirtualDeviceInternal.setShowPointerIcon(showPointerIcon);
         }
diff --git a/core/java/android/content/AttributionSource.java b/core/java/android/content/AttributionSource.java
index cd45f4d..8f35ca2 100644
--- a/core/java/android/content/AttributionSource.java
+++ b/core/java/android/content/AttributionSource.java
@@ -115,14 +115,14 @@
     public AttributionSource(int uid, @Nullable String packageName,
             @Nullable String attributionTag, @NonNull IBinder token) {
         this(uid, Process.INVALID_PID, packageName, attributionTag, token,
-                /*renouncedPermissions*/ null, /*next*/ null);
+                /*renouncedPermissions*/ null, Context.DEVICE_ID_DEFAULT, /*next*/ null);
     }
 
     /** @hide */
     public AttributionSource(int uid, int pid, @Nullable String packageName,
             @Nullable String attributionTag, @NonNull IBinder token) {
         this(uid, pid, packageName, attributionTag, token, /*renouncedPermissions*/ null,
-                /*next*/ null);
+                Context.DEVICE_ID_DEFAULT, /*next*/ null);
     }
 
     /** @hide */
@@ -132,28 +132,41 @@
             @Nullable AttributionSource next) {
         this(uid, Process.INVALID_PID, packageName, attributionTag, sDefaultToken,
                 (renouncedPermissions != null)
-                ? renouncedPermissions.toArray(new String[0]) : null, /*next*/ next);
+                ? renouncedPermissions.toArray(new String[0]) : null, Context.DEVICE_ID_DEFAULT,
+                /*next*/ next);
     }
 
     /** @hide */
     public AttributionSource(@NonNull AttributionSource current, @Nullable AttributionSource next) {
         this(current.getUid(), current.getPid(), current.getPackageName(),
                 current.getAttributionTag(), current.getToken(),
-                current.mAttributionSourceState.renouncedPermissions, next);
+                current.mAttributionSourceState.renouncedPermissions, current.getDeviceId(), next);
     }
 
     /** @hide */
     public AttributionSource(int uid, int pid, @Nullable String packageName,
-            @Nullable String attributionTag, @Nullable String[] renouncedPermissions,
+            @Nullable String attributionTag, @Nullable String[] renouncedPermissions, int deviceId,
             @Nullable AttributionSource next) {
-        this(uid, pid, packageName, attributionTag, sDefaultToken, renouncedPermissions, next);
+        this(uid, pid, packageName, attributionTag, sDefaultToken, renouncedPermissions, deviceId,
+                next);
     }
 
     /** @hide */
+    @TestApi
     public AttributionSource(int uid, int pid, @Nullable String packageName,
             @Nullable String attributionTag, @NonNull IBinder token,
             @Nullable String[] renouncedPermissions,
             @Nullable AttributionSource next) {
+        this(uid, pid, packageName, attributionTag, token, renouncedPermissions,
+                Context.DEVICE_ID_DEFAULT, next);
+    }
+
+    /** @hide */
+    @TestApi
+    public AttributionSource(int uid, int pid, @Nullable String packageName,
+            @Nullable String attributionTag, @NonNull IBinder token,
+            @Nullable String[] renouncedPermissions,
+            int deviceId, @Nullable AttributionSource next) {
         mAttributionSourceState = new AttributionSourceState();
         mAttributionSourceState.uid = uid;
         mAttributionSourceState.pid = pid;
@@ -161,6 +174,7 @@
         mAttributionSourceState.packageName = packageName;
         mAttributionSourceState.attributionTag = attributionTag;
         mAttributionSourceState.renouncedPermissions = renouncedPermissions;
+        mAttributionSourceState.deviceId = deviceId;
         mAttributionSourceState.next = (next != null) ? new AttributionSourceState[]
                 {next.mAttributionSourceState} : new AttributionSourceState[0];
     }
@@ -196,25 +210,31 @@
     /** @hide */
     public AttributionSource withNextAttributionSource(@Nullable AttributionSource next) {
         return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(),
-                getToken(), mAttributionSourceState.renouncedPermissions, next);
+                getToken(), mAttributionSourceState.renouncedPermissions, getDeviceId(), next);
     }
 
     /** @hide */
     public AttributionSource withPackageName(@Nullable String packageName) {
         return new AttributionSource(getUid(), getPid(), packageName, getAttributionTag(),
-               getToken(), mAttributionSourceState.renouncedPermissions, getNext());
+               getToken(), mAttributionSourceState.renouncedPermissions, getDeviceId(), getNext());
     }
 
     /** @hide */
     public AttributionSource withToken(@NonNull Binder token) {
         return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(),
-                token, mAttributionSourceState.renouncedPermissions, getNext());
+                token, mAttributionSourceState.renouncedPermissions, getDeviceId(), getNext());
     }
 
     /** @hide */
     public AttributionSource withPid(int pid) {
         return new AttributionSource(getUid(), pid, getPackageName(), getAttributionTag(),
-                getToken(), mAttributionSourceState.renouncedPermissions, getNext());
+                getToken(), mAttributionSourceState.renouncedPermissions, getDeviceId(), getNext());
+    }
+
+    /** @hide */
+    public AttributionSource withDeviceId(int deviceId) {
+        return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(),
+                getToken(), mAttributionSourceState.renouncedPermissions, deviceId, getNext());
     }
 
     /** @hide */
@@ -258,6 +278,7 @@
         try {
             return new AttributionSource.Builder(uid)
                 .setPid(Process.myPid())
+                .setDeviceId(Context.DEVICE_ID_DEFAULT)
                 .setPackageName(AppGlobals.getPackageManager().getPackagesForUid(uid)[0])
                 .build();
         } catch (Exception ignored) {
@@ -496,6 +517,17 @@
     }
 
     /**
+     * Gets the device ID for this attribution source. Attribution source can set the device ID
+     * using {@link Builder#setDeviceId(int)}, the default device ID is
+     * {@link Context#DEVICE_ID_DEFAULT}.
+     * <p>
+     * This device ID is used for permissions checking during attribution source validation.
+     */
+    public int getDeviceId() {
+        return mAttributionSourceState.deviceId;
+    }
+
+    /**
      * Unique token for that source.
      *
      * @hide
@@ -661,8 +693,24 @@
         }
 
         /**
-         * The next app to receive the permission protected data.
+         * Set the device ID for this attribution source, permission check would happen
+         * against this device ID.
+         *
+         * @return the builder
          */
+        public @NonNull Builder setDeviceId(int deviceId) {
+            checkNotUsed();
+            mBuilderFieldsSet |= 0x12;
+            mAttributionSourceState.deviceId = deviceId;
+            return this;
+        }
+
+        /**
+         * The next app to receive the permission protected data.
+         *
+         * @deprecated Use {@link setNextAttributionSource} instead.
+         */
+        @Deprecated
         public @NonNull Builder setNext(@Nullable AttributionSource value) {
             checkNotUsed();
             mBuilderFieldsSet |= 0x20;
@@ -671,6 +719,17 @@
             return this;
         }
 
+        /**
+         * The next app to receive the permission protected data.
+         */
+        public @NonNull Builder setNextAttributionSource(@NonNull AttributionSource value) {
+            checkNotUsed();
+            mBuilderFieldsSet |= 0x20;
+            mAttributionSourceState.next =
+                    new AttributionSourceState[]{value.mAttributionSourceState};
+            return this;
+        }
+
         /** Builds the instance. This builder should not be touched after calling this! */
         public @NonNull AttributionSource build() {
             checkNotUsed();
@@ -688,6 +747,9 @@
             if ((mBuilderFieldsSet & 0x10) == 0) {
                 mAttributionSourceState.renouncedPermissions = null;
             }
+            if ((mBuilderFieldsSet & 0x12) == 0) {
+                mAttributionSourceState.deviceId = Context.DEVICE_ID_DEFAULT;
+            }
             if ((mBuilderFieldsSet & 0x20) == 0) {
                 mAttributionSourceState.next = null;
             }
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index 2200af6..c86ccfd 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -20,7 +20,7 @@
 import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
 import static android.os.Process.SYSTEM_UID;
 import static android.os.Process.myUserHandle;
-import static android.os.Trace.TRACE_TAG_DATABASE;
+import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
 
 import static com.android.internal.util.FrameworkStatsLog.GET_TYPE_ACCESSED_WITHOUT_PERMISSION;
 import static com.android.internal.util.FrameworkStatsLog.GET_TYPE_ACCESSED_WITHOUT_PERMISSION__LOCATION__PROVIDER_CHECK_URI_PERMISSION;
@@ -285,7 +285,7 @@
                 // Return an empty cursor for all columns.
                 return new MatrixCursor(cursor.getColumnNames(), 0);
             }
-            traceBegin(TRACE_TAG_DATABASE, "query: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "query: ", uri.getAuthority());
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -296,7 +296,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -304,7 +304,7 @@
         public String getType(AttributionSource attributionSource, Uri uri) {
             uri = validateIncomingUri(uri);
             uri = maybeGetUriWithoutUserId(uri);
-            traceBegin(TRACE_TAG_DATABASE, "getType: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "getType: ", uri.getAuthority());
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -348,7 +348,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -410,7 +410,7 @@
             // getCallingPackage() isn't available in getTypeAnonymous(), as the javadoc states.
             uri = validateIncomingUri(uri);
             uri = maybeGetUriWithoutUserId(uri);
-            traceBegin(TRACE_TAG_DATABASE, "getTypeAnonymous: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "getTypeAnonymous: ", uri.getAuthority());
             final Bundle result = new Bundle();
             try {
                 result.putString(ContentResolver.REMOTE_CALLBACK_RESULT, getTypeAnonymous(uri));
@@ -419,7 +419,7 @@
                         new ParcelableException(e));
             } finally {
                 callback.sendResult(result);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -439,7 +439,7 @@
                     setCallingAttributionSource(original);
                 }
             }
-            traceBegin(TRACE_TAG_DATABASE, "insert: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "insert: ", uri.getAuthority());
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -448,7 +448,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -461,7 +461,7 @@
                     != PermissionChecker.PERMISSION_GRANTED) {
                 return 0;
             }
-            traceBegin(TRACE_TAG_DATABASE, "bulkInsert: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "bulkInsert: ", uri.getAuthority());
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -470,7 +470,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -507,7 +507,7 @@
                     }
                 }
             }
-            traceBegin(TRACE_TAG_DATABASE, "applyBatch: ", authority);
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "applyBatch: ", authority);
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -526,7 +526,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -539,7 +539,7 @@
                     != PermissionChecker.PERMISSION_GRANTED) {
                 return 0;
             }
-            traceBegin(TRACE_TAG_DATABASE, "delete: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "delete: ", uri.getAuthority());
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -548,7 +548,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -561,7 +561,7 @@
                     != PermissionChecker.PERMISSION_GRANTED) {
                 return 0;
             }
-            traceBegin(TRACE_TAG_DATABASE, "update: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "update: ", uri.getAuthority());
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -570,7 +570,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -581,7 +581,7 @@
             uri = validateIncomingUri(uri);
             uri = maybeGetUriWithoutUserId(uri);
             enforceFilePermission(attributionSource, uri, mode);
-            traceBegin(TRACE_TAG_DATABASE, "openFile: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "openFile: ", uri.getAuthority());
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -591,7 +591,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -602,7 +602,7 @@
             uri = validateIncomingUri(uri);
             uri = maybeGetUriWithoutUserId(uri);
             enforceFilePermission(attributionSource, uri, mode);
-            traceBegin(TRACE_TAG_DATABASE, "openAssetFile: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "openAssetFile: ", uri.getAuthority());
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -612,7 +612,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -621,7 +621,7 @@
                 String method, @Nullable String arg, @Nullable Bundle extras) {
             validateIncomingAuthority(authority);
             Bundle.setDefusable(extras, true);
-            traceBegin(TRACE_TAG_DATABASE, "call: ", authority);
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "call: ", authority);
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -630,7 +630,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -639,7 +639,7 @@
                 Uri uri, String mimeTypeFilter) {
             uri = validateIncomingUri(uri);
             uri = maybeGetUriWithoutUserId(uri);
-            traceBegin(TRACE_TAG_DATABASE, "getStreamTypes: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "getStreamTypes: ", uri.getAuthority());
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -648,7 +648,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -660,7 +660,7 @@
             uri = validateIncomingUri(uri);
             uri = maybeGetUriWithoutUserId(uri);
             enforceFilePermission(attributionSource, uri, "r");
-            traceBegin(TRACE_TAG_DATABASE, "openTypedAssetFile: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "openTypedAssetFile: ", uri.getAuthority());
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -670,7 +670,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -688,7 +688,7 @@
                     != PermissionChecker.PERMISSION_GRANTED) {
                 return null;
             }
-            traceBegin(TRACE_TAG_DATABASE, "canonicalize: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "canonicalize: ", uri.getAuthority());
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -697,7 +697,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -724,7 +724,7 @@
                     != PermissionChecker.PERMISSION_GRANTED) {
                 return null;
             }
-            traceBegin(TRACE_TAG_DATABASE, "uncanonicalize: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "uncanonicalize: ", uri.getAuthority());
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -733,7 +733,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -760,7 +760,7 @@
                     != PermissionChecker.PERMISSION_GRANTED) {
                 return false;
             }
-            traceBegin(TRACE_TAG_DATABASE, "refresh: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "refresh: ", uri.getAuthority());
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -768,7 +768,7 @@
                         CancellationSignal.fromTransport(cancellationSignal));
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -777,7 +777,7 @@
                 int uid, int modeFlags) {
             uri = validateIncomingUri(uri);
             uri = maybeGetUriWithoutUserId(uri);
-            traceBegin(TRACE_TAG_DATABASE, "checkUriPermission: ", uri.getAuthority());
+            traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "checkUriPermission: ", uri.getAuthority());
             final AttributionSource original = setCallingAttributionSource(
                     attributionSource);
             try {
@@ -786,7 +786,7 @@
                 throw e.rethrowAsRuntimeException();
             } finally {
                 setCallingAttributionSource(original);
-                Trace.traceEnd(TRACE_TAG_DATABASE);
+                Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
             }
         }
 
@@ -1483,6 +1483,12 @@
         // proper SQL syntax for us.
         SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder();
 
+        // Guard against SQL injection attacks
+        qBuilder.setStrict(true);
+        qBuilder.setProjectionMap(MAP_OF_QUERYABLE_COLUMNS);
+        qBuilder.setStrictColumns(true);
+        qBuilder.setStrictGrammar(true);
+
         // Set the table we're querying.
         qBuilder.setTables(DATABASE_TABLE_NAME);
 
@@ -1546,6 +1552,12 @@
         // proper SQL syntax for us.
         SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder();
 
+        // Guard against SQL injection attacks
+        qBuilder.setStrict(true);
+        qBuilder.setProjectionMap(MAP_OF_QUERYABLE_COLUMNS);
+        qBuilder.setStrictColumns(true);
+        qBuilder.setStrictGrammar(true);
+
         // Set the table we're querying.
         qBuilder.setTables(DATABASE_TABLE_NAME);
 
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index b2cd7e9..9253998 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -1985,7 +1985,7 @@
      * Open a raw file descriptor to access (potentially type transformed)
      * data from a "content:" URI.  This interacts with the underlying
      * {@link ContentProvider#openTypedAssetFile} method of the provider
-     * associated with the given URI, to retrieve retrieve any appropriate
+     * associated with the given URI, to retrieve any appropriate
      * data stream for the data stored there.
      *
      * <p>Unlike {@link #openAssetFileDescriptor}, this function only works
diff --git a/core/java/android/content/IClipboard.aidl b/core/java/android/content/IClipboard.aidl
index fe7798f..e0fba1d 100644
--- a/core/java/android/content/IClipboard.aidl
+++ b/core/java/android/content/IClipboard.aidl
@@ -28,6 +28,7 @@
 interface IClipboard {
     void setPrimaryClip(in ClipData clip, String callingPackage, String attributionTag, int userId,
             int deviceId);
+    @EnforcePermission("SET_CLIP_SOURCE")
     void setPrimaryClipAsPackage(in ClipData clip, String callingPackage, String attributionTag,
             int userId, int deviceId, String sourcePackage);
     void clearPrimaryClip(String callingPackage, String attributionTag, int userId, int deviceId);
@@ -46,6 +47,7 @@
     boolean hasClipboardText(String callingPackage, String attributionTag, int userId,
             int deviceId);
 
+    @EnforcePermission("SET_CLIP_SOURCE")
     String getPrimaryClipSource(String callingPackage, String attributionTag, int userId,
             int deviceId);
 
diff --git a/core/java/android/content/IContentService.aidl b/core/java/android/content/IContentService.aidl
index 127466d..0d11c78 100644
--- a/core/java/android/content/IContentService.aidl
+++ b/core/java/android/content/IContentService.aidl
@@ -160,6 +160,7 @@
      * @param cname component to identify sync service, must be null if account/providerName are
      * non-null.
      */
+    @EnforcePermission("READ_SYNC_STATS")
     @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
     boolean isSyncActive(in Account account, String authority, in ComponentName cname);
 
@@ -183,6 +184,7 @@
      * non-null.
      */
     boolean isSyncPending(in Account account, String authority, in ComponentName cname);
+    @EnforcePermission("READ_SYNC_STATS")
     boolean isSyncPendingAsUser(in Account account, String authority, in ComponentName cname,
             int userId);
 
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index e763e95..fe108a5 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -1880,7 +1880,10 @@
      * @see #EXTRA_PACKAGE_NAME
      *
      * @hide
+     * @deprecated Use {@link android.provider.Settings#ACTION_APP_PERMISSIONS_SETTINGS}
+     * instead.
      */
+    @Deprecated
     @SystemApi
     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
     public static final String ACTION_MANAGE_APP_PERMISSIONS =
@@ -6543,6 +6546,14 @@
     public static final String EXTRA_REASON = "android.intent.extra.REASON";
 
     /**
+     * Intent extra: Whether to show the wipe progress UI or to skip it.
+     *
+     * <p>Type: boolean
+     * @hide
+     */
+    public static final String EXTRA_SHOW_WIPE_PROGRESS = "android.intent.extra.SHOW_WIPE_PROGRESS";
+
+    /**
      * {@hide}
      * This extra will be send together with {@link #ACTION_FACTORY_RESET}
      */
diff --git a/core/java/android/content/IntentSender.java b/core/java/android/content/IntentSender.java
index ccb53cf..3686898 100644
--- a/core/java/android/content/IntentSender.java
+++ b/core/java/android/content/IntentSender.java
@@ -417,4 +417,12 @@
 
         return mCachedInfo;
     }
+
+    /**
+     * Check if the PendingIntent is marked with {@link android.app.PendingIntent#FLAG_IMMUTABLE}.
+     * @hide
+     */
+    public boolean isImmutable() {
+        return getCachedInfo().isImmutable();
+    }
 }
diff --git a/core/java/android/content/SharedPreferences.java b/core/java/android/content/SharedPreferences.java
index de6dc22..5e5d4181 100644
--- a/core/java/android/content/SharedPreferences.java
+++ b/core/java/android/content/SharedPreferences.java
@@ -30,10 +30,27 @@
  * when they are committed to storage.  Objects that are returned from the
  * various <code>get</code> methods must be treated as immutable by the application.
  *
- * <p>Note: This class provides strong consistency guarantees. It is using expensive operations
- * which might slow down an app. Frequently changing properties or properties where loss can be
- * tolerated should use other mechanisms. For more details read the comments on
- * {@link Editor#commit()} and {@link Editor#apply()}.
+ * <p>SharedPreferences is best suited to storing data about how the user prefers
+ * to experience the app, for example, whether the user prefers a particular UI theme
+ * or whether they prefer viewing particular content in a list vs. a grid. To this end,
+ * SharedPreferences reflects changes {@link Editor#commit() committed} or
+ * {@link Editor#apply() applied} by {@link Editor}s <em>immediately</em>, potentially
+ * before those changes are durably persisted.
+ * Under some circumstances such as app crashes or termination these changes may be lost,
+ * even if an {@link OnSharedPreferenceChangeListener} reported the change was successful.
+ * SharedPreferences is not recommended for storing data that is sensitive to this
+ * kind of rollback to a prior state such as user security or privacy settings.
+ * For other high-level data persistence options, see
+ * <a href="https://d.android.com/room">Room</a> or
+ * <a href="https://d.android.com/datastore">DataStore</a>.
+ *
+ * <p><em>Note:</em> Common implementations guarantee that outstanding edits to preference
+ * files are persisted to disk when host Activities become stopped. In some situations
+ * (e.g. performing many {@link Editor#commit()} or {@link Editor#apply()}
+ * operations just prior to navigating away from the host Activity) this can lead
+ * to blocking the main thread during lifecycle transition events and associated
+ * ANR errors. For more details see the documentation for {@link Editor#commit()} and
+ * {@link Editor#apply()}.
  *
  * <p><em>Note: This class does not support use across multiple processes.</em>
  *
diff --git a/core/java/android/content/TEST_MAPPING b/core/java/android/content/TEST_MAPPING
index dac79e7..01a9373 100644
--- a/core/java/android/content/TEST_MAPPING
+++ b/core/java/android/content/TEST_MAPPING
@@ -41,11 +41,9 @@
         }
       ],
       "file_patterns": ["(/|^)Context.java", "(/|^)ContextWrapper.java", "(/|^)ComponentCallbacksController.java"]
-    }
-  ],
-  "presubmit-large": [
+    },
     {
-      "name": "CtsContentTestCases",
+      "name": "CtsWindowManagerTestCases",
       "options": [
         {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
diff --git a/core/java/android/content/om/FabricatedOverlay.java b/core/java/android/content/om/FabricatedOverlay.java
index 7e787c9..c4547b8 100644
--- a/core/java/android/content/om/FabricatedOverlay.java
+++ b/core/java/android/content/om/FabricatedOverlay.java
@@ -20,6 +20,7 @@
 import android.annotation.IntRange;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.content.res.AssetFileDescriptor;
 import android.os.FabricatedOverlayInternal;
 import android.os.FabricatedOverlayInternalEntry;
 import android.os.ParcelFileDescriptor;
@@ -269,7 +270,7 @@
          * @param configuration The string representation of the config this overlay is enabled for
          * @return the builder itself
          * @deprecated Framework should use {@link FabricatedOverlay#setResourceValue(String,
-                       ParcelFileDescriptor, String)} instead.
+                ParcelFileDescriptor, String)} instead.
          * @hide
          */
         @Deprecated(since = "Please use FabricatedOverlay#setResourceValue instead")
@@ -285,6 +286,30 @@
         }
 
         /**
+         * Sets the value of the fabricated overlay for the file descriptor type.
+         *
+         * @param resourceName name of the target resource to overlay (in the form
+         *     [package]:type/entry)
+         * @param value the file descriptor whose contents are the value of the frro
+         * @param configuration The string representation of the config this overlay is enabled for
+         * @return the builder itself
+         * @deprecated Framework should use {@link FabricatedOverlay#setResourceValue(String,
+                ParcelFileDescriptor, String)} instead.
+         * @hide
+         */
+        @Deprecated(since = "Please use FabricatedOverlay#setResourceValue instead")
+        @NonNull
+        public Builder setResourceValue(
+                @NonNull String resourceName,
+                @NonNull AssetFileDescriptor value,
+                @Nullable String configuration) {
+            ensureValidResourceName(resourceName);
+            mEntries.add(
+                    generateFabricatedOverlayInternalEntry(resourceName, value, configuration));
+            return this;
+        }
+
+        /**
          * Builds an immutable fabricated overlay.
          *
          * @return the fabricated overlay
@@ -421,6 +446,21 @@
         entry.resourceName = resourceName;
         entry.binaryData = Objects.requireNonNull(parcelFileDescriptor);
         entry.configuration = configuration;
+        entry.binaryDataOffset = 0;
+        entry.binaryDataSize = parcelFileDescriptor.getStatSize();
+        return entry;
+    }
+
+    @NonNull
+    private static FabricatedOverlayInternalEntry generateFabricatedOverlayInternalEntry(
+            @NonNull String resourceName, @NonNull AssetFileDescriptor assetFileDescriptor,
+            @Nullable String configuration) {
+        final FabricatedOverlayInternalEntry entry = new FabricatedOverlayInternalEntry();
+        entry.resourceName = resourceName;
+        entry.binaryData = Objects.requireNonNull(assetFileDescriptor.getParcelFileDescriptor());
+        entry.binaryDataOffset = assetFileDescriptor.getStartOffset();
+        entry.binaryDataSize = assetFileDescriptor.getLength();
+        entry.configuration = configuration;
         return entry;
     }
 
@@ -495,4 +535,23 @@
         mOverlay.entries.add(
                 generateFabricatedOverlayInternalEntry(resourceName, value, configuration));
     }
+
+    /**
+     * Sets the resource value in the fabricated overlay for the file descriptor type with the
+     * configuration.
+     *
+     * @param resourceName name of the target resource to overlay (in the form
+     *     [package]:type/entry)
+     * @param value the file descriptor whose contents are the value of the frro
+     * @param configuration The string representation of the config this overlay is enabled for
+     */
+    @NonNull
+    public void setResourceValue(
+            @NonNull String resourceName,
+            @NonNull AssetFileDescriptor value,
+            @Nullable String configuration) {
+        ensureValidResourceName(resourceName);
+        mOverlay.entries.add(
+                generateFabricatedOverlayInternalEntry(resourceName, value, configuration));
+    }
 }
diff --git a/core/java/android/content/om/TEST_MAPPING b/core/java/android/content/om/TEST_MAPPING
index a9aaf1a..82c47a0 100644
--- a/core/java/android/content/om/TEST_MAPPING
+++ b/core/java/android/content/om/TEST_MAPPING
@@ -18,17 +18,10 @@
       "name": "OverlayHostTests"
     },
     {
-      "name": "CtsAppSecurityHostTestCases",
-      "options": [
-        {
-          "include-filter": "android.appsecurity.cts.OverlayHostTest"
-        }
-      ]
-    }
-  ],
-  "presubmit-large": [
+      "name": "CtsOverlayHostTestCases"
+    },
     {
-      "name": "CtsContentTestCases",
+      "name": "CtsResourcesTestCases",
       "options": [
         {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
diff --git a/core/java/android/content/pm/IPackageInstaller.aidl b/core/java/android/content/pm/IPackageInstaller.aidl
index e3016a4..ebe2aa3 100644
--- a/core/java/android/content/pm/IPackageInstaller.aidl
+++ b/core/java/android/content/pm/IPackageInstaller.aidl
@@ -59,6 +59,7 @@
     void installExistingPackage(String packageName, int installFlags, int installReason,
             in IntentSender statusReceiver, int userId, in List<String> whiteListedPermissions);
 
+    @EnforcePermission("INSTALL_PACKAGES")
     void setPermissionsResult(int sessionId, boolean accepted);
 
     void bypassNextStagedInstallerCheck(boolean value);
diff --git a/core/java/android/content/pm/IPackageInstallerSession.aidl b/core/java/android/content/pm/IPackageInstallerSession.aidl
index 081f263..ea69a2b 100644
--- a/core/java/android/content/pm/IPackageInstallerSession.aidl
+++ b/core/java/android/content/pm/IPackageInstallerSession.aidl
@@ -49,8 +49,11 @@
     void seal();
     List<String> fetchPackageNames();
 
+    @EnforcePermission("USE_INSTALLER_V2")
     DataLoaderParamsParcel getDataLoaderParams();
+    @EnforcePermission("USE_INSTALLER_V2")
     void addFile(int location, String name, long lengthBytes, in byte[] metadata, in byte[] signature);
+    @EnforcePermission("USE_INSTALLER_V2")
     void removeFile(int location, String name);
 
     boolean isMultiPackage();
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 3fdd023..7c9ccba 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -55,10 +55,13 @@
 import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.Bundle;
+import android.os.IRemoteCallback;
 import android.os.ParcelFileDescriptor;
 import android.os.PersistableBundle;
 import android.content.IntentSender;
 
+import java.util.Map;
+
 /**
  *  See {@link PackageManager} for documentation on most of the APIs
  *  here.
@@ -159,6 +162,7 @@
      */
     ParceledListSlice getInstalledPackages(long flags, in int userId);
 
+    @EnforcePermission("GET_APP_METADATA")
     @nullable ParcelFileDescriptor getAppMetadataFd(String packageName,
                 int userId);
 
@@ -282,9 +286,11 @@
     void addCrossProfileIntentFilter(in IntentFilter intentFilter, String ownerPackage,
             int sourceUserId, int targetUserId, int flags);
 
+    @EnforcePermission("INTERACT_ACROSS_USERS_FULL")
     boolean removeCrossProfileIntentFilter(in IntentFilter intentFilter, String ownerPackage,
                 int sourceUserId, int targetUserId, int flags);
 
+    @EnforcePermission("INTERACT_ACROSS_USERS_FULL")
     void clearCrossProfileIntentFilters(int sourceUserId, String ownerPackage);
 
     String[] setDistractingPackageRestrictionsAsUser(in String[] packageNames, int restrictionFlags,
@@ -417,6 +423,7 @@
      * @param observer call back used to notify when
      * the operation is completed
      */
+     @EnforcePermission("CLEAR_APP_CACHE")
      void freeStorageAndNotify(in String volumeUuid, in long freeStorageSize,
              int storageFlags, IPackageDataObserver observer);
 
@@ -441,6 +448,7 @@
      * notify when the operation is completed.May be null
      * to indicate that no call back is desired.
      */
+     @EnforcePermission("CLEAR_APP_CACHE")
      void freeStorage(in String volumeUuid, in long freeStorageSize,
              int storageFlags, in IntentSender pi);
 
@@ -468,6 +476,7 @@
      * files need to be deleted
      * @param observer a callback used to notify when the operation is completed.
      */
+    @EnforcePermission("CLEAR_APP_USER_DATA")
     void clearApplicationUserData(in String packageName, IPackageDataObserver observer, int userId);
 
     /**
@@ -488,15 +497,20 @@
     void getPackageSizeInfo(in String packageName, int userHandle, IPackageStatsObserver observer);
 
     /**
-     * Get a list of shared libraries that are available on the
-     * system.
+     * Get a list of shared libraries that are available on the system.
+     *
+     * @deprecated use getSystemSharedLibraryNamesAndPaths() instead
      */
     @UnsupportedAppUsage
     String[] getSystemSharedLibraryNames();
 
     /**
-     * Get a list of features that are available on the
-     * system.
+     * Get a list of shared library names (key) and paths (values).
+     */
+    Map<String, String> getSystemSharedLibraryNamesAndPaths();
+
+    /**
+     * Get a list of features that are available on the system.
      */
     ParceledListSlice getSystemAvailableFeatures();
 
@@ -579,14 +593,20 @@
     boolean performDexOptSecondary(String packageName,
             String targetCompilerFilter, boolean force);
 
+    @EnforcePermission("MOUNT_UNMOUNT_FILESYSTEMS")
     int getMoveStatus(int moveId);
 
+    @EnforcePermission("MOUNT_UNMOUNT_FILESYSTEMS")
     void registerMoveCallback(in IPackageMoveObserver callback);
+    @EnforcePermission("MOUNT_UNMOUNT_FILESYSTEMS")
     void unregisterMoveCallback(in IPackageMoveObserver callback);
 
+    @EnforcePermission("MOVE_PACKAGE")
     int movePackage(in String packageName, in String volumeUuid);
+    @EnforcePermission("MOVE_PACKAGE")
     int movePrimaryStorage(in String volumeUuid);
 
+    @EnforcePermission("WRITE_SECURE_SETTINGS")
     boolean setInstallLocation(int loc);
     @UnsupportedAppUsage
     int getInstallLocation();
@@ -607,6 +627,7 @@
     ParceledListSlice getIntentFilterVerifications(String packageName);
     ParceledListSlice getAllIntentFilters(String packageName);
 
+    @EnforcePermission("PACKAGE_VERIFICATION_AGENT")
     VerifierDeviceIdentity getVerifierDeviceIdentity();
 
     boolean isFirstBoot();
@@ -616,6 +637,7 @@
     @UnsupportedAppUsage
     boolean isStorageLow();
 
+    @EnforcePermission("MANAGE_USERS")
     @UnsupportedAppUsage
     boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden, int userId);
     boolean getApplicationHiddenSettingAsUser(String packageName, int userId);
@@ -626,6 +648,7 @@
     @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
     IPackageInstaller getPackageInstaller();
 
+    @EnforcePermission("DELETE_PACKAGES")
     boolean setBlockUninstallForUser(String packageName, boolean blockUninstall, int userId);
     @UnsupportedAppUsage
     boolean getBlockUninstallForUser(String packageName, int userId);
@@ -651,6 +674,7 @@
      * Sets whether or not an update is available. Ostensibly for instant apps
      * to force exteranl resolution.
      */
+    @EnforcePermission("INSTALL_PACKAGES")
     void setUpdateAvailable(String packageName, boolean updateAvaialble);
 
     @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
@@ -678,6 +702,7 @@
 
     ComponentName getInstantAppInstallerComponent();
 
+    @EnforcePermission("ACCESS_INSTANT_APPS")
     String getInstantAppAndroidId(String packageName, int userId);
 
     IArtManager getArtManager();
@@ -781,6 +806,7 @@
 
     void makeProviderVisible(int recipientAppId, String visibleAuthority);
 
+    @EnforcePermission("MAKE_UID_VISIBLE")
     @JavaPassthrough(annotation = "@android.annotation.RequiresPermission(android.Manifest"
             + ".permission.MAKE_UID_VISIBLE)")
     void makeUidVisible(int recipientAppId, int visibleUid);
@@ -798,4 +824,8 @@
     boolean[] canPackageQuery(String sourcePackageName, in String[] targetPackageNames, int userId);
 
     boolean waitForHandler(long timeoutMillis, boolean forBackgroundHandler);
+
+    void registerPackageMonitorCallback(IRemoteCallback callback, int userId);
+
+    void unregisterPackageMonitorCallback(IRemoteCallback callback);
 }
diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java
index 50be5c4..63c11b7 100644
--- a/core/java/android/content/pm/PackageInfo.java
+++ b/core/java/android/content/pm/PackageInfo.java
@@ -16,6 +16,7 @@
 
 package android.content.pm;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.os.Build;
@@ -31,11 +32,13 @@
      * The name of this package.  From the &lt;manifest&gt; tag's "name"
      * attribute.
      */
+    @NonNull
     public String packageName;
 
     /**
      * The names of any installed split APKs for this package.
      */
+    @NonNull
     public String[] splitNames;
 
     /**
@@ -93,6 +96,7 @@
      * tag's {@link android.R.styleable#AndroidManifest_versionName versionName}
      * attribute, or null if there was none.
      */
+    @Nullable
     public String versionName;
 
     /**
@@ -109,6 +113,7 @@
      * {@link android.R.styleable#AndroidManifest_revisionCode revisionCode}
      * attribute. Indexes are a 1:1 mapping against {@link #splitNames}.
      */
+    @NonNull
     public int[] splitRevisionCodes;
 
     /**
@@ -116,21 +121,23 @@
      * tag's {@link android.R.styleable#AndroidManifest_sharedUserId sharedUserId}
      * attribute.
      */
+    @Nullable
     public String sharedUserId;
-    
+
     /**
      * The shared user ID label of this package, as specified by the &lt;manifest&gt;
      * tag's {@link android.R.styleable#AndroidManifest_sharedUserLabel sharedUserLabel}
      * attribute.
      */
     public int sharedUserLabel;
-    
+
     /**
      * Information collected from the &lt;application&gt; tag, or null if
      * there was none.
      */
+    @Nullable
     public ApplicationInfo applicationInfo;
-    
+
     /**
      * The time at which the app was first installed.  Units are as
      * per {@link System#currentTimeMillis()}.
@@ -147,6 +154,7 @@
      * All kernel group-IDs that have been assigned to this package.
      * This is only filled in if the flag {@link PackageManager#GET_GIDS} was set.
      */
+    @Nullable
     public int[] gids;
 
     /**
@@ -155,6 +163,7 @@
      * or null if there were none.  This is only filled in if the flag
      * {@link PackageManager#GET_ACTIVITIES} was set.
      */
+    @Nullable
     public ActivityInfo[] activities;
 
     /**
@@ -163,6 +172,7 @@
      * or null if there were none.  This is only filled in if the flag
      * {@link PackageManager#GET_RECEIVERS} was set.
      */
+    @Nullable
     public ActivityInfo[] receivers;
 
     /**
@@ -171,6 +181,7 @@
      * or null if there were none.  This is only filled in if the flag
      * {@link PackageManager#GET_SERVICES} was set.
      */
+    @Nullable
     public ServiceInfo[] services;
 
     /**
@@ -179,6 +190,7 @@
      * or null if there were none.  This is only filled in if the flag
      * {@link PackageManager#GET_PROVIDERS} was set.
      */
+    @Nullable
     public ProviderInfo[] providers;
 
     /**
@@ -187,6 +199,7 @@
      * or null if there were none.  This is only filled in if the flag
      * {@link PackageManager#GET_INSTRUMENTATION} was set.
      */
+    @Nullable
     public InstrumentationInfo[] instrumentation;
 
     /**
@@ -195,6 +208,7 @@
      * or null if there were none.  This is only filled in if the flag
      * {@link PackageManager#GET_PERMISSIONS} was set.
      */
+    @Nullable
     public PermissionInfo[] permissions;
 
     /**
@@ -205,6 +219,7 @@
      * all permissions requested, even those that were not granted or known
      * by the system at install time.
      */
+    @Nullable
     public String[] requestedPermissions;
 
     /**
@@ -216,6 +231,7 @@
      * the flags {@link #REQUESTED_PERMISSION_GRANTED} and
      * {@link #REQUESTED_PERMISSION_NEVER_FOR_LOCATION} set as appropriate.
      */
+    @Nullable
     public int[] requestedPermissionsFlags;
 
     /**
@@ -224,7 +240,8 @@
      * is only filled if the flag {@link PackageManager#GET_ATTRIBUTIONS_LONG} was set.
      */
     @SuppressWarnings({"ArrayReturn", "NullableCollection"})
-    public @Nullable Attribution[] attributions;
+    @Nullable
+    public Attribution[] attributions;
 
     /**
      * Flag for {@link #requestedPermissionsFlags}: the requested permission
@@ -281,6 +298,7 @@
      * @deprecated use {@code signingInfo} instead
      */
     @Deprecated
+    @Nullable
     public Signature[] signatures;
 
     /**
@@ -292,6 +310,7 @@
      * Use this field instead of the deprecated {@code signatures} field.
      * See {@link SigningInfo} for more information on its contents.
      */
+    @Nullable
     public SigningInfo signingInfo;
 
     /**
@@ -301,6 +320,7 @@
      * or null if there were none. This is only filled in if the flag
      * {@link PackageManager#GET_CONFIGURATIONS} was set.
      */
+    @Nullable
     public ConfigurationInfo[] configPreferences;
 
     /**
@@ -308,6 +328,7 @@
      *
      * @see FeatureInfo#FLAG_REQUIRED
      */
+    @Nullable
     public FeatureInfo[] reqFeatures;
 
     /**
@@ -318,6 +339,7 @@
      *
      * @see FeatureInfo#FLAG_REQUIRED
      */
+    @Nullable
     public FeatureGroupInfo[] featureGroups;
 
     /**
@@ -386,12 +408,14 @@
      * The restricted account authenticator type that is used by this application.
      * @hide
      */
+    @Nullable
     public String restrictedAccountType;
 
     /**
      * The required account type without which this application will not function.
      * @hide
      */
+    @Nullable
     public String requiredAccountType;
 
     /**
@@ -401,6 +425,7 @@
      * @hide
      */
     @UnsupportedAppUsage
+    @Nullable
     public String overlayTarget;
 
     /**
@@ -409,6 +434,7 @@
      * Overlayable name defined within the target package, or null.
      * @hide
      */
+    @Nullable
     public String targetOverlayableName;
 
     /**
@@ -416,6 +442,7 @@
      *
      * @hide
      */
+    @Nullable
     public String overlayCategory;
 
     /** @hide */
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java
index 082ede2..8cb96ba 100644
--- a/core/java/android/content/pm/PackageInstaller.java
+++ b/core/java/android/content/pm/PackageInstaller.java
@@ -46,10 +46,12 @@
 import android.app.ActivityManager;
 import android.app.ActivityThread;
 import android.app.AppGlobals;
+import android.app.PendingIntent;
 import android.compat.annotation.UnsupportedAppUsage;
-import android.content.IIntentReceiver;
-import android.content.IIntentSender;
+import android.content.BroadcastReceiver;
+import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.IntentSender;
 import android.content.pm.PackageManager.DeleteFlags;
 import android.content.pm.PackageManager.InstallReason;
@@ -62,11 +64,9 @@
 import android.icu.util.ULocale;
 import android.net.Uri;
 import android.os.Build;
-import android.os.Bundle;
 import android.os.FileBridge;
 import android.os.Handler;
 import android.os.HandlerExecutor;
-import android.os.IBinder;
 import android.os.Parcel;
 import android.os.ParcelFileDescriptor;
 import android.os.Parcelable;
@@ -148,6 +148,9 @@
 public class PackageInstaller {
     private static final String TAG = "PackageInstaller";
 
+    private static final String ACTION_WAIT_INSTALL_CONSTRAINTS =
+            "android.content.pm.action.WAIT_INSTALL_CONSTRAINTS";
+
     /** {@hide} */
     public static final boolean ENABLE_REVOCABLE_FD =
             SystemProperties.getBoolean("fw.revocable_fd", false);
@@ -1066,6 +1069,9 @@
      * @param timeoutMillis The maximum time to wait, in milliseconds until the
      *                      constraints are satisfied. The caller will be notified via
      *                      {@code statusReceiver} if timeout happens before commit.
+     * @throws IllegalArgumentException if the {@code statusReceiver} from an immutable
+     *             {@link android.app.PendingIntent} when caller has a target SDK of API
+     *             {@link android.os.Build.VERSION_CODES#VANILLA_ICE_CREAM} or above.
      */
     public void commitSessionAfterInstallConstraintsAreMet(int sessionId,
             @NonNull IntentSender statusReceiver, @NonNull InstallConstraints constraints,
@@ -1074,37 +1080,71 @@
             var session = mInstaller.openSession(sessionId);
             session.seal();
             var packageNames = session.fetchPackageNames();
-            var intentSender = new IntentSender((IIntentSender) new IIntentSender.Stub() {
-                @Override
-                public void send(int code, Intent intent, String resolvedType,
-                        IBinder allowlistToken, IIntentReceiver finishedReceiver,
-                        String requiredPermission, Bundle options)  {
-                    var result = intent.getParcelableExtra(
-                            PackageInstaller.EXTRA_INSTALL_CONSTRAINTS_RESULT,
-                            InstallConstraintsResult.class);
-                    try {
-                        if (result.areAllConstraintsSatisfied()) {
-                            session.commit(statusReceiver, false);
-                        } else {
-                            // timeout
-                            final Intent fillIn = new Intent();
-                            fillIn.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId);
-                            fillIn.putExtra(PackageInstaller.EXTRA_STATUS, STATUS_FAILURE_TIMEOUT);
-                            fillIn.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE,
-                                    "Install constraints not satisfied within timeout");
-                            statusReceiver.sendIntent(
-                                    ActivityThread.currentApplication(), 0, fillIn, null, null);
-                        }
-                    } catch (Exception ignore) {
-                    }
-                }
-            });
-            waitForInstallConstraints(packageNames, constraints, intentSender, timeoutMillis);
+            var context = ActivityThread.currentApplication();
+            var localIntentSender = new LocalIntentSender(context, sessionId, session,
+                    statusReceiver);
+            waitForInstallConstraints(packageNames, constraints,
+                    localIntentSender.getIntentSender(), timeoutMillis);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
     }
 
+    private static final class LocalIntentSender extends BroadcastReceiver {
+
+        private final Context mContext;
+        private final IntentSender mStatusReceiver;
+        private final int mSessionId;
+        private final IPackageInstallerSession mSession;
+
+        LocalIntentSender(Context context, int sessionId, IPackageInstallerSession session,
+                IntentSender statusReceiver) {
+            mContext = context;
+            mSessionId = sessionId;
+            mSession = session;
+            mStatusReceiver = statusReceiver;
+        }
+
+        private IntentSender getIntentSender() {
+            Intent intent = new Intent(ACTION_WAIT_INSTALL_CONSTRAINTS).setPackage(
+                    mContext.getPackageName());
+            mContext.registerReceiver(this, new IntentFilter(ACTION_WAIT_INSTALL_CONSTRAINTS),
+                    Context.RECEIVER_EXPORTED);
+            PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent,
+                    PendingIntent.FLAG_MUTABLE);
+            return pendingIntent.getIntentSender();
+        }
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            InstallConstraintsResult result = intent.getParcelableExtra(
+                    PackageInstaller.EXTRA_INSTALL_CONSTRAINTS_RESULT,
+                    InstallConstraintsResult.class);
+            try {
+                if (result.areAllConstraintsSatisfied()) {
+                    mSession.commit(mStatusReceiver, false);
+                } else {
+                    // timeout
+                    final Intent fillIn = new Intent();
+                    fillIn.putExtra(PackageInstaller.EXTRA_SESSION_ID, mSessionId);
+                    fillIn.putExtra(PackageInstaller.EXTRA_STATUS, STATUS_FAILURE_TIMEOUT);
+                    fillIn.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE,
+                            "Install constraints not satisfied within timeout");
+                    mStatusReceiver.sendIntent(ActivityThread.currentApplication(), 0, fillIn, null,
+                            null);
+                }
+            } catch (Exception ignore) {
+                // no-op
+            } finally {
+                unregisterReceiver();
+            }
+        }
+
+        private void unregisterReceiver() {
+            mContext.unregisterReceiver(this);
+        }
+    }
+
     /**
      * Events for observing session lifecycle.
      * <p>
@@ -1740,6 +1780,9 @@
          *
          * @throws SecurityException if streams opened through
          *             {@link #openWrite(String, long, long)} are still open.
+         * @throws IllegalArgumentException if the {@code statusReceiver} from an immutable
+         *             {@link android.app.PendingIntent} when caller has a target SDK of API
+         *             version {@link android.os.Build.VERSION_CODES#VANILLA_ICE_CREAM} or above.
          *
          * @see android.app.admin.DevicePolicyManager
          * @see #requestUserPreapproval
@@ -1768,6 +1811,9 @@
          * @param statusReceiver Called when the state of the session changes. Intents
          *                       sent to this receiver contain {@link #EXTRA_STATUS}. Refer to the
          *                       individual status codes on how to handle them.
+         * @throws IllegalArgumentException if the {@code statusReceiver} from an immutable
+         *             {@link android.app.PendingIntent} when caller has a target SDK of API
+         *             {@link android.os.Build.VERSION_CODES#VANILLA_ICE_CREAM} or above.
          *
          * @hide
          */
@@ -2099,6 +2145,7 @@
      * or the parser isn't able to parse the supplied source(s).
      * @hide
      */
+    @SystemApi
     @NonNull
     public InstallInfo readInstallInfo(@NonNull ParcelFileDescriptor pfd,
             @Nullable String debugPathName, int flags) throws PackageParsingException {
@@ -2172,7 +2219,6 @@
          * Includes the size of the raw APKs, possibly unpacked resources, raw dex metadata files,
          * and all relevant native code.
          * @throws IOException when size of native binaries cannot be calculated.
-         * @hide
          */
         public long calculateInstalledSize(@NonNull SessionParams params,
                 @NonNull ParcelFileDescriptor pfd) throws IOException {
@@ -2982,6 +3028,8 @@
          *     <li>{@code requireUserAction} is set to {@link #USER_ACTION_NOT_REQUIRED}.</li>
          *     <li>The app being installed targets:
          *          <ul>
+         *              <li>{@link android.os.Build.VERSION_CODES#Q API 29} or higher on
+         *              Android S  ({@link android.os.Build.VERSION_CODES#S API 31})</li>
          *              <li>{@link android.os.Build.VERSION_CODES#R API 30} or higher on
          *              Android T ({@link android.os.Build.VERSION_CODES#TIRAMISU API 33})</li>
          *              <li>{@link android.os.Build.VERSION_CODES#S API 31} or higher <b>after</b>
@@ -3616,6 +3664,7 @@
          *
          * @hide
          */
+        @SystemApi
         @RequiresPermission(Manifest.permission.READ_INSTALLED_SESSION_PATHS)
         public @Nullable String getResolvedBaseApkPath() {
             return resolvedBaseCodePath;
@@ -4091,7 +4140,8 @@
          * @param label
          *   The label representing the app to be installed.
          * @param locale
-         *   The locale of the app label being used.
+         *   The locale is used to get the app label from the APKs (includes the base APK and
+         *   split APKs) related to the package to be installed.
          * @param packageName
          *   The package name of the app to be installed.
          * @hide
@@ -4198,7 +4248,10 @@
             }
 
             /**
-             * The locale of the app label being used.
+             * The locale is used to get the app label from the APKs (includes the base APK and
+             * split APKs) related to the package to be installed. The caller needs to make sure
+             * the app label is consistent with the app label of {@link PreapprovalDetails} when
+             * validating the installation. Otherwise, the pre-approval install session will fail.
              */
             public @NonNull Builder setLocale(@NonNull ULocale value) {
                 checkNotUsed();
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 25c73ee..33d37bb 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -65,6 +65,7 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
+import android.os.IRemoteCallback;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.PersistableBundle;
@@ -331,7 +332,7 @@
 
         /**
          * Returns the classname of the component where this property was defined.
-         * <p>If the property was defined within and &lt;application&gt; tag, retutrns
+         * <p>If the property was defined within and &lt;application&gt; tag, returns
          * {@code null}
          */
         @Nullable public String getClassName() {
@@ -2678,6 +2679,13 @@
     public static final String EXTRA_MOVE_ID = "android.content.pm.extra.MOVE_ID";
 
     /**
+     * Extra field name for notifying package change event. Currently, it is used by PackageMonitor.
+     * @hide
+     */
+    public static final String EXTRA_PACKAGE_MONITOR_CALLBACK_RESULT =
+            "android.content.pm.extra.EXTRA_PACKAGE_MONITOR_CALLBACK_RESULT";
+
+    /**
      * Usable by the required verifier as the {@code verificationCode} argument
      * for {@link PackageManager#verifyPendingInstall} to indicate that it will
      * allow the installation to proceed without any of the optional verifiers
@@ -4722,6 +4730,19 @@
             "android.content.pm.extra.REQUEST_PERMISSIONS_NAMES";
 
     /**
+     * The deviceId for which the permissions are requested, {@link Context#DEVICE_ID_DEFAULT}
+     * is the default device ID.
+     * <p>
+     * <strong>Type:</strong> int
+     * </p>
+     *
+     * @hide
+     */
+    @SystemApi
+    public static final String EXTRA_REQUEST_PERMISSIONS_DEVICE_ID =
+            "android.content.pm.extra.REQUEST_PERMISSIONS_DEVICE_ID";
+
+    /**
      * The results from the permissions request.
      * <p>
      * <strong>Type:</strong> int[] of #PermissionResult
@@ -6702,7 +6723,7 @@
     @UnsupportedAppUsage
     public Intent buildRequestPermissionsIntent(@NonNull String[] permissions) {
         if (ArrayUtils.isEmpty(permissions)) {
-           throw new IllegalArgumentException("permission cannot be null or empty");
+            throw new IllegalArgumentException("permission cannot be null or empty");
         }
         Intent intent = new Intent(ACTION_REQUEST_PERMISSIONS);
         intent.putExtra(EXTRA_REQUEST_PERMISSIONS_NAMES, permissions);
@@ -9597,7 +9618,8 @@
      * {@link PersistableBundle} objects to be shared with the apps being suspended and the
      * launcher to support customization that they might need to handle the suspended state.
      *
-     * <p>The caller must hold {@link Manifest.permission#SUSPEND_APPS} to use this API.
+     * <p>The caller must hold {@link Manifest.permission#SUSPEND_APPS} to use this API except for
+     * device owner and profile owner.
      *
      * @param packageNames The names of the packages to set the suspended status.
      * @param suspended If set to {@code true}, the packages will be suspended, if set to
@@ -9623,7 +9645,7 @@
      * @hide
      */
     @SystemApi
-    @RequiresPermission(Manifest.permission.SUSPEND_APPS)
+    @RequiresPermission(value=Manifest.permission.SUSPEND_APPS, conditional=true)
     @Nullable
     public String[] setPackagesSuspended(@Nullable String[] packageNames, boolean suspended,
             @Nullable PersistableBundle appExtras, @Nullable PersistableBundle launcherExtras,
@@ -11135,4 +11157,28 @@
         throw new UnsupportedOperationException(
                 "relinquishUpdateOwnership not implemented in subclass");
     }
+
+    /**
+     * Register for notifications of package changes such as install, removal and other events.
+     *
+     * @param callback the callback to register for receiving the change events
+     * @param userId The id of registered user
+     * @hide
+     */
+    public void registerPackageMonitorCallback(@NonNull IRemoteCallback callback, int userId) {
+        throw new UnsupportedOperationException(
+                "registerPackageMonitorCallback not implemented in subclass");
+    }
+
+    /**
+     * Unregister for notifications of package changes such as install, removal and other events.
+     *
+     * @param callback the callback to unregister for receiving the change events
+     * @see #registerPackageMonitorCallback(IRemoteCallback, int)
+     * @hide
+     */
+    public void unregisterPackageMonitorCallback(@NonNull IRemoteCallback callback) {
+        throw new UnsupportedOperationException(
+                "unregisterPackageMonitorCallback not implemented in subclass");
+    }
 }
diff --git a/core/java/android/content/pm/PermissionInfo.java b/core/java/android/content/pm/PermissionInfo.java
index dd3782c..cdda12e 100644
--- a/core/java/android/content/pm/PermissionInfo.java
+++ b/core/java/android/content/pm/PermissionInfo.java
@@ -611,6 +611,40 @@
         return protLevel.toString();
     }
 
+    /** @hide */
+    public static @NonNull String flagsToString(@Flags int flags) {
+        StringBuilder sb = new StringBuilder("[");
+        while (flags != 0) {
+            final int flag = 1 << Integer.numberOfTrailingZeros(flags);
+            flags &= ~flag;
+            switch (flag) {
+                case PermissionInfo.FLAG_COSTS_MONEY:
+                    sb.append("costsMoney");
+                    break;
+                case PermissionInfo.FLAG_REMOVED:
+                    sb.append("removed");
+                    break;
+                case PermissionInfo.FLAG_HARD_RESTRICTED:
+                    sb.append("hardRestricted");
+                    break;
+                case PermissionInfo.FLAG_SOFT_RESTRICTED:
+                    sb.append("softRestricted");
+                    break;
+                case PermissionInfo.FLAG_IMMUTABLY_RESTRICTED:
+                    sb.append("immutablyRestricted");
+                    break;
+                case PermissionInfo.FLAG_INSTALLED:
+                    sb.append("installed");
+                    break;
+                default: sb.append(flag);
+            }
+            if (flags != 0) {
+                sb.append("|");
+            }
+        }
+        return sb.append("]").toString();
+    }
+
     /**
      * @hide
      */
diff --git a/core/java/android/content/pm/ResolveInfo.java b/core/java/android/content/pm/ResolveInfo.java
index 25707f9..36c03fd 100644
--- a/core/java/android/content/pm/ResolveInfo.java
+++ b/core/java/android/content/pm/ResolveInfo.java
@@ -16,6 +16,7 @@
 
 package android.content.pm;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.compat.annotation.UnsupportedAppUsage;
@@ -33,6 +34,7 @@
 
 import java.text.Collator;
 import java.util.Comparator;
+import java.util.Objects;
 
 /**
  * Information that is returned from resolving an intent
@@ -224,10 +226,17 @@
      * @return Returns a CharSequence containing the resolutions's label.  If the
      * item does not have a label, its name is returned.
      */
-    public CharSequence loadLabel(PackageManager pm) {
+    @NonNull
+    public CharSequence loadLabel(@NonNull PackageManager pm) {
         if (nonLocalizedLabel != null) {
             return nonLocalizedLabel;
         }
+
+        // In order to not change the original behavior. To add null check here to support backward
+        // compatible. If nonLocalizedLabel is not null, we also return nonLocalizedLabel even if pm
+        // is null.
+        Objects.requireNonNull(pm);
+
         CharSequence label;
         if (resolvePackageName != null && labelRes != 0) {
             label = pm.getText(resolvePackageName, labelRes, null);
diff --git a/core/java/android/content/pm/SigningDetails.java b/core/java/android/content/pm/SigningDetails.java
index 1e659b7..af2649f 100644
--- a/core/java/android/content/pm/SigningDetails.java
+++ b/core/java/android/content/pm/SigningDetails.java
@@ -867,10 +867,12 @@
             return false;
         }
         // The capabilities for the past signing certs must match as well.
-        for (int i = 0; i < mPastSigningCertificates.length; i++) {
-            if (mPastSigningCertificates[i].getFlags()
-                    != that.mPastSigningCertificates[i].getFlags()) {
-                return false;
+        if (mPastSigningCertificates != null) {
+            for (int i = 0; i < mPastSigningCertificates.length; i++) {
+                if (mPastSigningCertificates[i].getFlags()
+                        != that.mPastSigningCertificates[i].getFlags()) {
+                    return false;
+                }
             }
         }
         return true;
diff --git a/core/java/android/content/pm/TEST_MAPPING b/core/java/android/content/pm/TEST_MAPPING
index 3ffbe1d..ea21d51 100644
--- a/core/java/android/content/pm/TEST_MAPPING
+++ b/core/java/android/content/pm/TEST_MAPPING
@@ -97,11 +97,28 @@
                     "include-filter":"android.incrementalinstall.cts.IncrementalFeatureTest"
                 }
             ]
+        },
+        {
+            "name":"CtsPackageManagerHostTestCases",
+            "options":[
+                {
+                    "include-annotation":"android.platform.test.annotations.Presubmit"
+                },
+                {
+                    "exclude-annotation":"android.platform.test.annotations.Postsubmit"
+                },
+                {
+                    "exclude-annotation":"androidx.test.filters.FlakyTest"
+                },
+                {
+                    "exclude-annotation":"org.junit.Ignore"
+                }
+            ]
         }
     ],
     "presubmit-large":[
         {
-            "name":"CtsContentTestCases",
+            "name":"CtsPackageManagerTestCases",
             "options":[
                 {
                     "exclude-annotation":"androidx.test.filters.FlakyTest"
@@ -110,7 +127,7 @@
                     "exclude-annotation":"org.junit.Ignore"
                 },
                 {
-                    "include-filter":"android.content.pm.cts"
+                    "exclude-filter": "android.content.pm.cts.PackageManagerShellCommandMultiUserTest"
                 }
             ]
         },
@@ -135,23 +152,6 @@
                     "exclude-annotation":"org.junit.Ignore"
                 }
             ]
-        },
-        {
-            "name":"CtsAppSecurityHostTestCases",
-            "options":[
-                {
-                    "include-annotation":"android.platform.test.annotations.Presubmit"
-                },
-                {
-                    "exclude-annotation":"android.platform.test.annotations.Postsubmit"
-                },
-                {
-                    "exclude-annotation":"androidx.test.filters.FlakyTest"
-                },
-                {
-                    "exclude-annotation":"org.junit.Ignore"
-                }
-            ]
         }
     ],
     "postsubmit":[
@@ -165,6 +165,14 @@
         },
         {
             "name":"CtsInstallHostTestCases"
+        },
+        {
+            "name": "CtsPackageManagerTestCases",
+            "options": [
+                {
+                    "include-filter": "android.content.pm.cts.PackageManagerShellCommandMultiUserTest"
+                }
+            ]
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java
index 23ba336..9f4459d 100644
--- a/core/java/android/content/pm/UserInfo.java
+++ b/core/java/android/content/pm/UserInfo.java
@@ -386,6 +386,14 @@
         return UserManager.isUserTypeCloneProfile(userType);
     }
 
+    public boolean isCommunalProfile() {
+        return UserManager.isUserTypeCommunalProfile(userType);
+    }
+
+    public boolean isPrivateProfile() {
+        return UserManager.isUserTypePrivateProfile(userType);
+    }
+
     @UnsupportedAppUsage
     public boolean isEnabled() {
         return (flags & FLAG_DISABLED) != FLAG_DISABLED;
diff --git a/core/java/android/content/pm/UserProperties.java b/core/java/android/content/pm/UserProperties.java
index 2669040..96af2b6 100644
--- a/core/java/android/content/pm/UserProperties.java
+++ b/core/java/android/content/pm/UserProperties.java
@@ -62,6 +62,7 @@
     private static final String ATTR_CREDENTIAL_SHAREABLE_WITH_PARENT =
             "credentialShareableWithParent";
     private static final String ATTR_DELETE_APP_WITH_PARENT = "deleteAppWithParent";
+    private static final String ATTR_ALWAYS_VISIBLE = "alwaysVisible";
 
     /** Index values of each property (to indicate whether they are present in this object). */
     @IntDef(prefix = "INDEX_", value = {
@@ -76,6 +77,7 @@
             INDEX_MEDIA_SHARED_WITH_PARENT,
             INDEX_CREDENTIAL_SHAREABLE_WITH_PARENT,
             INDEX_DELETE_APP_WITH_PARENT,
+            INDEX_ALWAYS_VISIBLE,
     })
     @Retention(RetentionPolicy.SOURCE)
     private @interface PropertyIndex {
@@ -91,6 +93,7 @@
     private static final int INDEX_MEDIA_SHARED_WITH_PARENT = 8;
     private static final int INDEX_CREDENTIAL_SHAREABLE_WITH_PARENT = 9;
     private static final int INDEX_DELETE_APP_WITH_PARENT = 10;
+    private static final int INDEX_ALWAYS_VISIBLE = 11;
     /** A bit set, mapping each PropertyIndex to whether it is present (1) or absent (0). */
     private long mPropertiesPresent = 0;
 
@@ -316,6 +319,7 @@
                     orig.getCrossProfileIntentFilterAccessControl());
             setCrossProfileIntentResolutionStrategy(orig.getCrossProfileIntentResolutionStrategy());
             setDeleteAppWithParent(orig.getDeleteAppWithParent());
+            setAlwaysVisible(orig.getAlwaysVisible());
         }
         if (hasManagePermission) {
             // Add items that require MANAGE_USERS or stronger.
@@ -440,6 +444,24 @@
     private boolean mDeleteAppWithParent;
 
     /**
+     * Returns whether the user should always
+     * be {@link android.os.UserManager#isUserVisible() visible}.
+     * The intended usage is for the Communal Profile, which is running and accessible at all times.
+     * @hide
+     */
+    public boolean getAlwaysVisible() {
+        if (isPresent(INDEX_ALWAYS_VISIBLE)) return mAlwaysVisible;
+        if (mDefaultProperties != null) return mDefaultProperties.mAlwaysVisible;
+        throw new SecurityException("You don't have permission to query alwaysVisible");
+    }
+    /** @hide */
+    public void setAlwaysVisible(boolean val) {
+        this.mAlwaysVisible = val;
+        setPresent(INDEX_ALWAYS_VISIBLE);
+    }
+    private boolean mAlwaysVisible;
+
+    /**
      * Return whether, and how, select user restrictions or device policies should be inherited
      * from other user.
      *
@@ -632,6 +654,7 @@
                 + ", mMediaSharedWithParent=" + isMediaSharedWithParent()
                 + ", mCredentialShareableWithParent=" + isCredentialShareableWithParent()
                 + ", mDeleteAppWithParent=" + getDeleteAppWithParent()
+                + ", mAlwaysVisible=" + getAlwaysVisible()
                 + "}";
     }
 
@@ -658,6 +681,7 @@
         pw.println(prefix + "    mCredentialShareableWithParent="
                 + isCredentialShareableWithParent());
         pw.println(prefix + "    mDeleteAppWithParent=" + getDeleteAppWithParent());
+        pw.println(prefix + "    mAlwaysVisible=" + getAlwaysVisible());
     }
 
     /**
@@ -724,6 +748,9 @@
                 case ATTR_DELETE_APP_WITH_PARENT:
                     setDeleteAppWithParent(parser.getAttributeBoolean(i));
                     break;
+                case ATTR_ALWAYS_VISIBLE:
+                    setAlwaysVisible(parser.getAttributeBoolean(i));
+                    break;
                 default:
                     Slog.w(LOG_TAG, "Skipping unknown property " + attributeName);
             }
@@ -783,6 +810,10 @@
             serializer.attributeBoolean(null, ATTR_DELETE_APP_WITH_PARENT,
                     mDeleteAppWithParent);
         }
+        if (isPresent(INDEX_ALWAYS_VISIBLE)) {
+            serializer.attributeBoolean(null, ATTR_ALWAYS_VISIBLE,
+                    mAlwaysVisible);
+        }
     }
 
     // For use only with an object that has already had any permission-lacking fields stripped out.
@@ -800,6 +831,7 @@
         dest.writeBoolean(mMediaSharedWithParent);
         dest.writeBoolean(mCredentialShareableWithParent);
         dest.writeBoolean(mDeleteAppWithParent);
+        dest.writeBoolean(mAlwaysVisible);
     }
 
     /**
@@ -821,6 +853,7 @@
         mMediaSharedWithParent = source.readBoolean();
         mCredentialShareableWithParent = source.readBoolean();
         mDeleteAppWithParent = source.readBoolean();
+        mAlwaysVisible = source.readBoolean();
     }
 
     @Override
@@ -859,6 +892,7 @@
         private boolean mMediaSharedWithParent = false;
         private boolean mCredentialShareableWithParent = false;
         private boolean mDeleteAppWithParent = false;
+        private boolean mAlwaysVisible = false;
 
         public Builder setShowInLauncher(@ShowInLauncher int showInLauncher) {
             mShowInLauncher = showInLauncher;
@@ -926,6 +960,12 @@
             return this;
         }
 
+        /** Sets the value for {@link #mAlwaysVisible}*/
+        public Builder setAlwaysVisible(boolean alwaysVisible) {
+            mAlwaysVisible = alwaysVisible;
+            return this;
+        }
+
         /** Builds a UserProperties object with *all* values populated. */
         public UserProperties build() {
             return new UserProperties(
@@ -939,7 +979,8 @@
                     mCrossProfileIntentResolutionStrategy,
                     mMediaSharedWithParent,
                     mCredentialShareableWithParent,
-                    mDeleteAppWithParent);
+                    mDeleteAppWithParent,
+                    mAlwaysVisible);
         }
     } // end Builder
 
@@ -954,7 +995,8 @@
             @CrossProfileIntentResolutionStrategy int crossProfileIntentResolutionStrategy,
             boolean mediaSharedWithParent,
             boolean credentialShareableWithParent,
-            boolean deleteAppWithParent) {
+            boolean deleteAppWithParent,
+            boolean alwaysVisible) {
         mDefaultProperties = null;
         setShowInLauncher(showInLauncher);
         setStartWithParent(startWithParent);
@@ -967,5 +1009,6 @@
         setMediaSharedWithParent(mediaSharedWithParent);
         setCredentialShareableWithParent(credentialShareableWithParent);
         setDeleteAppWithParent(deleteAppWithParent);
+        setAlwaysVisible(alwaysVisible);
     }
 }
diff --git a/core/java/android/content/res/ApkAssets.java b/core/java/android/content/res/ApkAssets.java
index 143c00d..653e243 100644
--- a/core/java/android/content/res/ApkAssets.java
+++ b/core/java/android/content/res/ApkAssets.java
@@ -78,6 +78,11 @@
      */
     public static final int PROPERTY_DISABLE_INCREMENTAL_HARDENING = 1 << 4;
 
+    /**
+     * The apk assets only contain the overlayable declarations information.
+     */
+    public static final int PROPERTY_ONLY_OVERLAYABLES = 1 << 5;
+
     /** Flags that change the behavior of loaded apk assets. */
     @IntDef(prefix = { "PROPERTY_" }, value = {
             PROPERTY_SYSTEM,
diff --git a/core/java/android/content/res/AssetFileDescriptor.java b/core/java/android/content/res/AssetFileDescriptor.java
index ac65933..3486d5e 100644
--- a/core/java/android/content/res/AssetFileDescriptor.java
+++ b/core/java/android/content/res/AssetFileDescriptor.java
@@ -16,17 +16,29 @@
 
 package android.content.res;
 
+import static android.system.OsConstants.S_ISFIFO;
+import static android.system.OsConstants.S_ISSOCK;
+
 import android.compat.annotation.UnsupportedAppUsage;
 import android.os.Bundle;
 import android.os.Parcel;
 import android.os.ParcelFileDescriptor;
 import android.os.Parcelable;
+import android.system.ErrnoException;
+import android.system.Os;
+import android.system.StructStat;
 
 import java.io.Closeable;
 import java.io.FileDescriptor;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.channels.FileLock;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.channels.WritableByteChannel;
 
 /**
  * File descriptor of an entry in the AssetManager.  This provides your own
@@ -200,13 +212,94 @@
      * An InputStream you can create on a ParcelFileDescriptor, which will
      * take care of calling {@link ParcelFileDescriptor#close
      * ParcelFileDescriptor.close()} for you when the stream is closed.
+     * It has a ParcelFileDescriptor.AutoCloseInputStream member to make delegate calls
+     * and during definition it will create seekable or non seekable child object
+     * AssetFileDescriptor.AutoCloseInputStream depends on the type of file descriptor
+     * to provide different solution.
      */
     public static class AutoCloseInputStream
             extends ParcelFileDescriptor.AutoCloseInputStream {
-        private long mRemaining;
+        private ParcelFileDescriptor.AutoCloseInputStream mDelegateInputStream;
 
         public AutoCloseInputStream(AssetFileDescriptor fd) throws IOException {
             super(fd.getParcelFileDescriptor());
+            StructStat ss;
+            try {
+                ss = Os.fstat(fd.getParcelFileDescriptor().getFileDescriptor());
+            } catch (ErrnoException e) {
+                throw new IOException(e);
+            }
+            if (S_ISSOCK(ss.st_mode) || S_ISFIFO(ss.st_mode)) {
+                mDelegateInputStream = new NonSeekableAutoCloseInputStream(fd);
+            } else {
+                mDelegateInputStream = new SeekableAutoCloseInputStream(fd);
+            }
+        }
+
+        @Override
+        public int available() throws IOException {
+            return mDelegateInputStream.available();
+        }
+
+        @Override
+        public int read() throws IOException {
+            return mDelegateInputStream.read();
+        }
+
+        @Override
+        public int read(byte[] buffer, int offset, int count) throws IOException {
+            return mDelegateInputStream.read(buffer, offset, count);
+        }
+
+        @Override
+        public int read(byte[] buffer) throws IOException {
+            return mDelegateInputStream.read(buffer);
+        }
+
+        @Override
+        public long skip(long count) throws IOException {
+            return mDelegateInputStream.skip(count);
+        }
+
+        @Override
+        public void mark(int readlimit) {
+            mDelegateInputStream.mark(readlimit);
+        }
+
+        @Override
+        public boolean markSupported() {
+            return mDelegateInputStream.markSupported();
+        }
+
+        @Override
+        public synchronized void reset() throws IOException {
+            mDelegateInputStream.reset();
+        }
+
+        @Override
+        public FileChannel getChannel() {
+            return mDelegateInputStream.getChannel();
+        }
+        @Override
+        public void close() throws IOException {
+            // Make the mDelegateInputStream own file descriptor and super.close()
+            // is not needed here to avoid double close the file descriptor.
+            mDelegateInputStream.close();
+        }
+    }
+
+    /**
+     * An InputStream you can create on a non seekable file descriptor,
+     * like PIPE, SOCKET and FIFO, which will take care of calling
+     * {@link ParcelFileDescriptor#close ParcelFileDescriptor.close()}
+     * for you when the stream is closed.
+     */
+    private static class NonSeekableAutoCloseInputStream
+            extends ParcelFileDescriptor.AutoCloseInputStream {
+        private long mRemaining;
+
+        NonSeekableAutoCloseInputStream(AssetFileDescriptor fd) throws IOException {
+            super(fd.getParcelFileDescriptor());
             super.skip(fd.getStartOffset());
             mRemaining = (int) fd.getLength();
         }
@@ -284,6 +377,254 @@
     }
 
     /**
+     * An InputStream you can create on a seekable file descriptor, which means
+     * you can use pread to read from a specific offset, this will take care of
+     * calling {@link ParcelFileDescriptor#close ParcelFileDescriptor.close()}
+     * for you when the stream is closed.
+     */
+    private static class SeekableAutoCloseInputStream
+            extends ParcelFileDescriptor.AutoCloseInputStream {
+        /** Size of current file. */
+        private long mTotalSize;
+        /** The absolute position of current file start point. */
+        private final long mFileOffset;
+        /** The relative position where input stream is against mFileOffset. */
+        private long mOffset;
+        private OffsetCorrectFileChannel mOffsetCorrectFileChannel;
+
+        SeekableAutoCloseInputStream(AssetFileDescriptor fd) throws IOException {
+            super(fd.getParcelFileDescriptor());
+            mTotalSize = fd.getLength();
+            mFileOffset = fd.getStartOffset();
+        }
+
+        @Override
+        public int available() throws IOException {
+            long available = mTotalSize - mOffset;
+            return available >= 0
+                    ? (available < 0x7fffffff ? (int) available : 0x7fffffff)
+                    : 0;
+        }
+
+        @Override
+        public int read() throws IOException {
+            byte[] buffer = new byte[1];
+            int result = read(buffer, 0, 1);
+            return result == -1 ? -1 : buffer[0] & 0xff;
+        }
+
+        @Override
+        public int read(byte[] buffer, int offset, int count) throws IOException {
+            int available = available();
+            if (available <= 0) {
+                return -1;
+            }
+
+            if (count > available) count = available;
+            try {
+                int res = Os.pread(getFD(), buffer, offset, count, mFileOffset + mOffset);
+                // pread returns 0 at end of file, while java's InputStream interface requires -1
+                if (res == 0) res = -1;
+                if (res > 0) {
+                    mOffset += res;
+                    updateChannelPosition(mOffset + mFileOffset);
+                }
+                return res;
+            } catch (ErrnoException e) {
+                throw new IOException(e);
+            }
+        }
+
+        @Override
+        public int read(byte[] buffer) throws IOException {
+            return read(buffer, 0, buffer.length);
+        }
+
+        @Override
+        public long skip(long count) throws IOException {
+            int available = available();
+            if (available <= 0) {
+                return -1;
+            }
+
+            if (count > available) count = available;
+            mOffset += count;
+            updateChannelPosition(mOffset + mFileOffset);
+            return count;
+        }
+
+        @Override
+        public void mark(int readlimit) {
+            // Not supported.
+            return;
+        }
+
+        @Override
+        public boolean markSupported() {
+            return false;
+        }
+
+        @Override
+        public synchronized void reset() throws IOException {
+            // Not supported.
+            return;
+        }
+
+        @Override
+        public FileChannel getChannel() {
+            if (mOffsetCorrectFileChannel == null) {
+                mOffsetCorrectFileChannel = new OffsetCorrectFileChannel(super.getChannel());
+            }
+            try {
+                updateChannelPosition(mOffset + mFileOffset);
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+            return mOffsetCorrectFileChannel;
+        }
+
+        /**
+         * Update the position of mOffsetCorrectFileChannel only after it is constructed.
+         *
+         * @param newPosition The absolute position mOffsetCorrectFileChannel needs to be moved to.
+         */
+        private void updateChannelPosition(long newPosition) throws IOException {
+            if (mOffsetCorrectFileChannel != null) {
+                mOffsetCorrectFileChannel.position(newPosition);
+            }
+        }
+
+        /**
+         * A FileChannel wrapper that will update mOffset of the AutoCloseInputStream
+         * to correct position when using FileChannel to read. All occurrence of position
+         * should be using absolute solution and each override method just do Delegation
+         * besides additional check. All methods related to write mode have been disabled
+         * and will throw UnsupportedOperationException with customized message.
+         */
+        private class OffsetCorrectFileChannel extends FileChannel {
+            private final FileChannel mDelegate;
+            private static final String METHOD_NOT_SUPPORTED_MESSAGE =
+                    "This Method is not supported in AutoCloseInputStream FileChannel.";
+
+            OffsetCorrectFileChannel(FileChannel fc) {
+                mDelegate = fc;
+            }
+
+            @Override
+            public int read(ByteBuffer dst) throws IOException {
+                if (available() <= 0) return -1;
+                int bytesRead = mDelegate.read(dst);
+                if (bytesRead != -1) mOffset += bytesRead;
+                return bytesRead;
+            }
+
+            @Override
+            public long read(ByteBuffer[] dsts, int offset, int length) throws IOException {
+                if (available() <= 0) return -1;
+                if (mOffset + length > mTotalSize) {
+                    length = (int) (mTotalSize - mOffset);
+                }
+                long bytesRead = mDelegate.read(dsts, offset, length);
+                if (bytesRead != -1) mOffset += bytesRead;
+                return bytesRead;
+            }
+
+            @Override
+            /**The only read method that does not move channel position*/
+            public int read(ByteBuffer dst, long position) throws IOException {
+                if (position - mFileOffset > mTotalSize) return -1;
+                return mDelegate.read(dst, position);
+            }
+
+            @Override
+            public long position() throws IOException {
+                return mDelegate.position();
+            }
+
+            @Override
+            public FileChannel position(long newPosition) throws IOException {
+                mOffset = newPosition - mFileOffset;
+                return mDelegate.position(newPosition);
+            }
+
+            @Override
+            public long size() throws IOException {
+                return mTotalSize;
+            }
+
+            @Override
+            public long transferTo(long position, long count, WritableByteChannel target)
+                    throws IOException {
+                if (position - mFileOffset > mTotalSize) {
+                    return 0;
+                }
+                if (position - mFileOffset + count > mTotalSize) {
+                    count = mTotalSize - (position - mFileOffset);
+                }
+                return mDelegate.transferTo(position, count, target);
+            }
+
+            @Override
+            public MappedByteBuffer map(MapMode mode, long position, long size) throws IOException {
+                if (position - mFileOffset > mTotalSize) {
+                    throw new IOException(
+                            "Cannot map to buffer because position exceed current file size.");
+                }
+                if (position - mFileOffset + size > mTotalSize) {
+                    size = mTotalSize - (position - mFileOffset);
+                }
+                return mDelegate.map(mode, position, size);
+            }
+
+            @Override
+            protected void implCloseChannel() throws IOException {
+                mDelegate.close();
+            }
+
+            @Override
+            public int write(ByteBuffer src) throws IOException {
+                throw new UnsupportedOperationException(METHOD_NOT_SUPPORTED_MESSAGE);
+            }
+
+            @Override
+            public long write(ByteBuffer[] srcs, int offset, int length) throws IOException {
+                throw new UnsupportedOperationException(METHOD_NOT_SUPPORTED_MESSAGE);
+            }
+
+            @Override
+            public int write(ByteBuffer src, long position) throws IOException {
+                throw new UnsupportedOperationException(METHOD_NOT_SUPPORTED_MESSAGE);
+            }
+
+            @Override
+            public long transferFrom(ReadableByteChannel src, long position, long count)
+                    throws IOException {
+                throw new UnsupportedOperationException(METHOD_NOT_SUPPORTED_MESSAGE);
+            }
+
+            @Override
+            public FileChannel truncate(long size) throws IOException {
+                throw new UnsupportedOperationException(METHOD_NOT_SUPPORTED_MESSAGE);
+            }
+
+            @Override
+            public void force(boolean metaData) throws IOException {
+                throw new UnsupportedOperationException(METHOD_NOT_SUPPORTED_MESSAGE);
+            }
+
+            @Override
+            public FileLock lock(long position, long size, boolean shared) throws IOException {
+                throw new UnsupportedOperationException(METHOD_NOT_SUPPORTED_MESSAGE);
+            }
+
+            @Override
+            public FileLock tryLock(long position, long size, boolean shared) throws IOException {
+                throw new UnsupportedOperationException(METHOD_NOT_SUPPORTED_MESSAGE);
+            }
+        }
+    }
+
+    /**
      * An OutputStream you can create on a ParcelFileDescriptor, which will
      * take care of calling {@link ParcelFileDescriptor#close
      * ParcelFileDescriptor.close()} for you when the stream is closed.
diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java
index ef3842a..b225de4 100644
--- a/core/java/android/content/res/AssetManager.java
+++ b/core/java/android/content/res/AssetManager.java
@@ -16,6 +16,8 @@
 
 package android.content.res;
 
+import static android.content.res.Resources.ID_NULL;
+
 import android.annotation.AnyRes;
 import android.annotation.ArrayRes;
 import android.annotation.AttrRes;
@@ -528,6 +530,10 @@
         if (!mOpen) {
             throw new RuntimeException("AssetManager has been closed");
         }
+        // Let's still check if the native object exists, given all the memory corruptions.
+        if (mObject == 0) {
+            throw new RuntimeException("AssetManager is open but the native object is gone");
+        }
     }
 
     /**
@@ -1085,7 +1091,7 @@
     public @NonNull XmlResourceParser openXmlResourceParser(int cookie, @NonNull String fileName)
             throws IOException {
         try (XmlBlock block = openXmlBlockAsset(cookie, fileName)) {
-            XmlResourceParser parser = block.newParser();
+            XmlResourceParser parser = block.newParser(ID_NULL, new Validator());
             // If openXmlBlockAsset doesn't throw, it will always return an XmlBlock object with
             // a valid native pointer, which makes newParser always return non-null. But let's
             // be careful.
@@ -1153,6 +1159,7 @@
     int[] getAttributeResolutionStack(long themePtr, @AttrRes int defStyleAttr,
             @StyleRes int defStyleRes, @StyleRes int xmlStyle) {
         synchronized (this) {
+            ensureValidLocked();
             return nativeAttributeResolutionStack(
                     mObject, themePtr, xmlStyle, defStyleAttr, defStyleRes);
         }
@@ -1414,7 +1421,7 @@
      * <a href="https://tools.ietf.org/html/bcp47">BCP-47</a> language tags and can be
      * parsed using {@link Locale#forLanguageTag(String)}.
      *
-     * <p>On SDK 20 (Android 4.4W: Kitkat for watches) and below, locale strings
+     * <p>On SDK 20 (Android 4.4W: KitKat for watches) and below, locale strings
      * are of the form {@code ll_CC} where {@code ll} is a two letter language code,
      * and {@code CC} is a two letter country code.
      */
diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java
index 1c8276c..62630c8 100644
--- a/core/java/android/content/res/Configuration.java
+++ b/core/java/android/content/res/Configuration.java
@@ -154,7 +154,6 @@
     /**
      * Current user preference for the grammatical gender.
      */
-    @GrammaticalGender
     private int mGrammaticalGender;
 
     /** @hide */
@@ -167,6 +166,13 @@
     public @interface GrammaticalGender {}
 
     /**
+     * Constant for grammatical gender: to indicate that the grammatical gender is undefined.
+     * Only for internal usage.
+     * @hide
+     */
+    public static final int GRAMMATICAL_GENDER_UNDEFINED = -1;
+
+    /**
      * Constant for grammatical gender: to indicate the user has not specified the terms
      * of address for the application.
      */
@@ -1120,12 +1126,12 @@
         } else {
             sb.append(" ?localeList");
         }
-        if (mGrammaticalGender != 0) {
+        if (mGrammaticalGender > 0) {
             switch (mGrammaticalGender) {
                 case GRAMMATICAL_GENDER_NEUTRAL: sb.append(" neuter"); break;
                 case GRAMMATICAL_GENDER_FEMININE: sb.append(" feminine"); break;
                 case GRAMMATICAL_GENDER_MASCULINE: sb.append(" masculine"); break;
-                case GRAMMATICAL_GENDER_NOT_SPECIFIED: sb.append(" ?grgend"); break;
+                default: sb.append(" ?grgend"); break;
             }
         }
         int layoutDir = (screenLayout&SCREENLAYOUT_LAYOUTDIR_MASK);
@@ -1570,7 +1576,7 @@
         seq = 0;
         windowConfiguration.setToDefaults();
         fontWeightAdjustment = FONT_WEIGHT_ADJUSTMENT_UNDEFINED;
-        mGrammaticalGender = GRAMMATICAL_GENDER_NOT_SPECIFIED;
+        mGrammaticalGender = GRAMMATICAL_GENDER_UNDEFINED;
     }
 
     /**
@@ -1773,7 +1779,8 @@
             changed |= ActivityInfo.CONFIG_FONT_WEIGHT_ADJUSTMENT;
             fontWeightAdjustment = delta.fontWeightAdjustment;
         }
-        if (delta.mGrammaticalGender != mGrammaticalGender) {
+        if (delta.mGrammaticalGender != GRAMMATICAL_GENDER_UNDEFINED
+                && delta.mGrammaticalGender != mGrammaticalGender) {
             changed |= ActivityInfo.CONFIG_GRAMMATICAL_GENDER;
             mGrammaticalGender = delta.mGrammaticalGender;
         }
@@ -1998,7 +2005,8 @@
             changed |= ActivityInfo.CONFIG_FONT_WEIGHT_ADJUSTMENT;
         }
 
-        if (mGrammaticalGender != delta.mGrammaticalGender) {
+        if ((compareUndefined || delta.mGrammaticalGender != GRAMMATICAL_GENDER_UNDEFINED)
+                && mGrammaticalGender != delta.mGrammaticalGender) {
             changed |= ActivityInfo.CONFIG_GRAMMATICAL_GENDER;
         }
         return changed;
@@ -2284,6 +2292,17 @@
      */
     @GrammaticalGender
     public int getGrammaticalGender() {
+        return mGrammaticalGender == GRAMMATICAL_GENDER_UNDEFINED
+                ? GRAMMATICAL_GENDER_NOT_SPECIFIED : mGrammaticalGender;
+    }
+
+    /**
+     * Internal getter of grammatical gender, to get the raw value of grammatical gender,
+     * which include {@link #GRAMMATICAL_GENDER_UNDEFINED}.
+     * @hide
+     */
+
+    public int getGrammaticalGenderRaw() {
         return mGrammaticalGender;
     }
 
@@ -2972,7 +2991,7 @@
         configOut.fontWeightAdjustment = XmlUtils.readIntAttribute(parser,
                 XML_ATTR_FONT_WEIGHT_ADJUSTMENT, FONT_WEIGHT_ADJUSTMENT_UNDEFINED);
         configOut.mGrammaticalGender = XmlUtils.readIntAttribute(parser,
-                XML_ATTR_GRAMMATICAL_GENDER, GRAMMATICAL_GENDER_NOT_SPECIFIED);
+                XML_ATTR_GRAMMATICAL_GENDER, GRAMMATICAL_GENDER_UNDEFINED);
 
         // For persistence, we don't care about assetsSeq and WindowConfiguration, so do not read it
         // out.
diff --git a/core/java/android/content/res/Element.java b/core/java/android/content/res/Element.java
new file mode 100644
index 0000000..e931fe8
--- /dev/null
+++ b/core/java/android/content/res/Element.java
@@ -0,0 +1,834 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.content.res;
+
+import static android.os.SystemProperties.PROP_VALUE_MAX;
+
+import android.annotation.NonNull;
+import android.util.Pools.SimplePool;
+import android.util.Slog;
+
+import androidx.annotation.StyleableRes;
+
+import com.android.internal.R;
+
+/**
+ * Defines the string attribute length and child tag count restrictions for a xml element.
+ *
+ * {@hide}
+ */
+public class Element {
+    private static final int DEFAULT_MAX_STRING_ATTR_LENGTH = 32_768;
+    private static final int MAX_POOL_SIZE = 128;
+    private static final int MAX_ATTR_LEN_URL_COMPONENT = 256;
+    private static final int MAX_ATTR_LEN_PERMISSION_GROUP = 256;
+    private static final int MAX_ATTR_LEN_PACKAGE = 256;
+    private static final int MAX_ATTR_LEN_MIMETYPE = 512;
+    public static final int MAX_ATTR_LEN_NAME = 1024;
+    public static final int MAX_ATTR_LEN_PATH = 4000;
+    public static final int MAX_ATTR_LEN_DATA_VALUE = 4000;
+
+    private static final String BAD_COMPONENT_NAME_CHARS = ";,[](){}:?-%^*|/\\";
+
+    private static final String TAG = "PackageParsing";
+    protected static final String TAG_ACTION = "action";
+    protected static final String TAG_ACTIVITY = "activity";
+    protected static final String TAG_ADOPT_PERMISSIONS = "adopt-permissions";
+    protected static final String TAG_ACTIVITY_ALIAS = "activity-alias";
+    protected static final String TAG_APPLICATION = "application";
+    protected static final String TAG_ATTRIBUTION = "attribution";
+    protected static final String TAG_CATEGORY = "category";
+    protected static final String TAG_COMPATIBLE_SCREENS = "compatible-screens";
+    protected static final String TAG_DATA = "data";
+    protected static final String TAG_EAT_COMMENT = "eat-comment";
+    protected static final String TAG_FEATURE_GROUP = "feature-group";
+    protected static final String TAG_GRANT_URI_PERMISSION = "grant-uri-permission";
+    protected static final String TAG_INSTRUMENTATION = "instrumentation";
+    protected static final String TAG_INTENT = "intent";
+    protected static final String TAG_INTENT_FILTER = "intent-filter";
+    protected static final String TAG_KEY_SETS = "key-sets";
+    protected static final String TAG_LAYOUT = "layout";
+    protected static final String TAG_MANIFEST = "manifest";
+    protected static final String TAG_META_DATA = "meta-data";
+    protected static final String TAG_ORIGINAL_PACKAGE = "original-package";
+    protected static final String TAG_OVERLAY = "overlay";
+    protected static final String TAG_PACKAGE = "package";
+    protected static final String TAG_PACKAGE_VERIFIER = "package-verifier";
+    protected static final String TAG_PATH_PERMISSION = "path-permission";
+    protected static final String TAG_PERMISSION = "permission";
+    protected static final String TAG_PERMISSION_GROUP = "permission-group";
+    protected static final String TAG_PERMISSION_TREE = "permission-tree";
+    protected static final String TAG_PROFILEABLE = "profileable";
+    protected static final String TAG_PROTECTED_BROADCAST = "protected-broadcast";
+    protected static final String TAG_PROPERTY = "property";
+    protected static final String TAG_PROVIDER = "provider";
+    protected static final String TAG_QUERIES = "queries";
+    protected static final String TAG_RECEIVER = "receiver";
+    protected static final String TAG_RESTRICT_UPDATE = "restrict-update";
+    protected static final String TAG_SCREEN = "screen";
+    protected static final String TAG_SERVICE = "service";
+    protected static final String TAG_SUPPORT_SCREENS = "supports-screens";
+    protected static final String TAG_SUPPORTS_GL_TEXTURE = "supports-gl-texture";
+    protected static final String TAG_SUPPORTS_INPUT = "supports-input";
+    protected static final String TAG_SUPPORTS_SCREENS = "supports-screens";
+    protected static final String TAG_USES_CONFIGURATION = "uses-configuration";
+    protected static final String TAG_USES_FEATURE = "uses-feature";
+    protected static final String TAG_USES_GL_TEXTURE = "uses-gl-texture";
+    protected static final String TAG_USES_LIBRARY = "uses-library";
+    protected static final String TAG_USES_NATIVE_LIBRARY = "uses-native-library";
+    protected static final String TAG_USES_PERMISSION = "uses-permission";
+    protected static final String TAG_USES_PERMISSION_SDK_23 = "uses-permission-sdk-23";
+    protected static final String TAG_USES_PERMISSION_SDK_M = "uses-permission-sdk-m";
+    protected static final String TAG_USES_SDK = "uses-sdk";
+    protected static final String TAG_USES_SPLIT = "uses-split";
+
+    protected static final String TAG_ATTR_BACKUP_AGENT = "backupAgent";
+    protected static final String TAG_ATTR_CATEGORY = "category";
+    protected static final String TAG_ATTR_HOST = "host";
+    protected static final String TAG_ATTR_MANAGE_SPACE_ACTIVITY = "manageSpaceActivity";
+    protected static final String TAG_ATTR_MIMETYPE = "mimeType";
+    protected static final String TAG_ATTR_NAME = "name";
+    protected static final String TAG_ATTR_PACKAGE = "package";
+    protected static final String TAG_ATTR_PATH = "path";
+    protected static final String TAG_ATTR_PATH_ADVANCED_PATTERN = "pathAdvancedPattern";
+    protected static final String TAG_ATTR_PATH_PATTERN = "pathPattern";
+    protected static final String TAG_ATTR_PATH_PREFIX = "pathPrefix";
+    protected static final String TAG_ATTR_PATH_SUFFIX = "pathSuffix";
+    protected static final String TAG_ATTR_PARENT_ACTIVITY_NAME = "parentActivityName";
+    protected static final String TAG_ATTR_PERMISSION = "permission";
+    protected static final String TAG_ATTR_PERMISSION_GROUP = "permissionGroup";
+    protected static final String TAG_ATTR_PORT = "port";
+    protected static final String TAG_ATTR_PROCESS = "process";
+    protected static final String TAG_ATTR_READ_PERMISSION = "readPermission";
+    protected static final String TAG_ATTR_REQUIRED_ACCOUNT_TYPE = "requiredAccountType";
+    protected static final String TAG_ATTR_REQUIRED_SYSTEM_PROPERTY_NAME =
+            "requiredSystemPropertyName";
+    protected static final String TAG_ATTR_REQUIRED_SYSTEM_PROPERTY_VALUE =
+            "requiredSystemPropertyValue";
+    protected static final String TAG_ATTR_RESTRICTED_ACCOUNT_TYPE = "restrictedAccountType";
+    protected static final String TAG_ATTR_SCHEME = "scheme";
+    protected static final String TAG_ATTR_SHARED_USER_ID = "sharedUserId";
+    protected static final String TAG_ATTR_TARGET_ACTIVITY = "targetActivity";
+    protected static final String TAG_ATTR_TARGET_NAME = "targetName";
+    protected static final String TAG_ATTR_TARGET_PACKAGE = "targetPackage";
+    protected static final String TAG_ATTR_TARGET_PROCESSES = "targetProcesses";
+    protected static final String TAG_ATTR_TASK_AFFINITY = "taskAffinity";
+    protected static final String TAG_ATTR_VALUE = "value";
+    protected static final String TAG_ATTR_VERSION_NAME = "versionName";
+    protected static final String TAG_ATTR_WRITE_PERMISSION = "writePermission";
+    protected static final String TAG_ATTR_ZYGOTE_PRELOAD_NAME = "zygotePreloadName";
+
+    // The length of mTagCounters corresponds to the number of tags defined in getCounterIdx. If new
+    // tags are added then the size here should be increased to match.
+    private final TagCounter[] mTagCounters = new TagCounter[34];
+
+    String mTag;
+
+    private static final ThreadLocal<SimplePool<Element>> sPool =
+            ThreadLocal.withInitial(() -> new SimplePool<>(MAX_POOL_SIZE));
+
+    @NonNull
+    static Element obtain(@NonNull String tag) {
+        Element element = sPool.get().acquire();
+        if (element == null) {
+            element = new Element();
+        }
+        element.init(tag);
+        return element;
+    }
+
+    void recycle() {
+        mTag = null;
+        sPool.get().release(this);
+    }
+
+    private long mChildTagMask = 0;
+
+    private static int getCounterIdx(String tag) {
+        switch(tag) {
+            case TAG_LAYOUT:
+                return 0;
+            case TAG_META_DATA:
+                return 1;
+            case TAG_INTENT_FILTER:
+                return 2;
+            case TAG_PROFILEABLE:
+                return 3;
+            case TAG_USES_NATIVE_LIBRARY:
+                return 4;
+            case TAG_RECEIVER:
+                return 5;
+            case TAG_SERVICE:
+                return 6;
+            case TAG_ACTIVITY_ALIAS:
+                return 7;
+            case TAG_USES_LIBRARY:
+                return 8;
+            case TAG_PROVIDER:
+                return 9;
+            case TAG_ACTIVITY:
+                return 10;
+            case TAG_ACTION:
+                return 11;
+            case TAG_CATEGORY:
+                return 12;
+            case TAG_DATA:
+                return 13;
+            case TAG_APPLICATION:
+                return 14;
+            case TAG_OVERLAY:
+                return 15;
+            case TAG_INSTRUMENTATION:
+                return 16;
+            case TAG_PERMISSION_GROUP:
+                return 17;
+            case TAG_PERMISSION_TREE:
+                return 18;
+            case TAG_SUPPORTS_GL_TEXTURE:
+                return 19;
+            case TAG_SUPPORTS_SCREENS:
+                return 20;
+            case TAG_USES_CONFIGURATION:
+                return 21;
+            case TAG_USES_SDK:
+                return 22;
+            case TAG_COMPATIBLE_SCREENS:
+                return 23;
+            case TAG_QUERIES:
+                return 24;
+            case TAG_ATTRIBUTION:
+                return 25;
+            case TAG_USES_FEATURE:
+                return 26;
+            case TAG_PERMISSION:
+                return 27;
+            case TAG_USES_PERMISSION:
+            case TAG_USES_PERMISSION_SDK_23:
+            case TAG_USES_PERMISSION_SDK_M:
+                return 28;
+            case TAG_GRANT_URI_PERMISSION:
+                return 29;
+            case TAG_PATH_PERMISSION:
+                return 30;
+            case TAG_PACKAGE:
+                return 31;
+            case TAG_INTENT:
+                return 32;
+            default:
+                // The size of the mTagCounters array should be equal to this value+1
+                return 33;
+        }
+    }
+
+    static boolean shouldValidate(String tag) {
+        switch (tag) {
+            case TAG_ACTION:
+            case TAG_ACTIVITY:
+            case TAG_ACTIVITY_ALIAS:
+            case TAG_APPLICATION:
+            case TAG_ATTRIBUTION:
+            case TAG_CATEGORY:
+            case TAG_COMPATIBLE_SCREENS:
+            case TAG_DATA:
+            case TAG_GRANT_URI_PERMISSION:
+            case TAG_INSTRUMENTATION:
+            case TAG_INTENT:
+            case TAG_INTENT_FILTER:
+            case TAG_LAYOUT:
+            case TAG_MANIFEST:
+            case TAG_META_DATA:
+            case TAG_OVERLAY:
+            case TAG_PACKAGE:
+            case TAG_PATH_PERMISSION:
+            case TAG_PERMISSION:
+            case TAG_PERMISSION_GROUP:
+            case TAG_PERMISSION_TREE:
+            case TAG_PROFILEABLE:
+            case TAG_PROPERTY:
+            case TAG_PROVIDER:
+            case TAG_QUERIES:
+            case TAG_RECEIVER:
+            case TAG_SCREEN:
+            case TAG_SERVICE:
+            case TAG_SUPPORTS_GL_TEXTURE:
+            case TAG_SUPPORTS_SCREENS:
+            case TAG_USES_CONFIGURATION:
+            case TAG_USES_FEATURE:
+            case TAG_USES_LIBRARY:
+            case TAG_USES_NATIVE_LIBRARY:
+            case TAG_USES_PERMISSION:
+            case TAG_USES_PERMISSION_SDK_23:
+            case TAG_USES_PERMISSION_SDK_M:
+            case TAG_USES_SDK:
+                return true;
+            default:
+                return false;
+        }
+    }
+
+    private void init(String tag) {
+        this.mTag = tag;
+        mChildTagMask = 0;
+        switch (tag) {
+            case TAG_ACTIVITY:
+                initializeCounter(TAG_LAYOUT, 1000);
+                initializeCounter(TAG_META_DATA, 1000);
+                initializeCounter(TAG_INTENT_FILTER, 20000);
+                break;
+            case TAG_ACTIVITY_ALIAS:
+            case TAG_RECEIVER:
+            case TAG_SERVICE:
+                initializeCounter(TAG_META_DATA, 1000);
+                initializeCounter(TAG_INTENT_FILTER, 20000);
+                break;
+            case TAG_APPLICATION:
+                initializeCounter(TAG_PROFILEABLE, 100);
+                initializeCounter(TAG_USES_NATIVE_LIBRARY, 100);
+                initializeCounter(TAG_RECEIVER, 1000);
+                initializeCounter(TAG_SERVICE, 1000);
+                initializeCounter(TAG_META_DATA, 1000);
+                initializeCounter(TAG_USES_LIBRARY, 1000);
+                initializeCounter(TAG_ACTIVITY_ALIAS, 4000);
+                initializeCounter(TAG_PROVIDER, 8000);
+                initializeCounter(TAG_ACTIVITY, 40000);
+                break;
+            case TAG_COMPATIBLE_SCREENS:
+                initializeCounter(TAG_SCREEN, 4000);
+                break;
+            case TAG_INTENT:
+            case TAG_INTENT_FILTER:
+                initializeCounter(TAG_ACTION, 20000);
+                initializeCounter(TAG_CATEGORY, 40000);
+                initializeCounter(TAG_DATA, 40000);
+                break;
+            case TAG_MANIFEST:
+                initializeCounter(TAG_APPLICATION, 100);
+                initializeCounter(TAG_OVERLAY, 100);
+                initializeCounter(TAG_INSTRUMENTATION, 100);
+                initializeCounter(TAG_PERMISSION_GROUP, 100);
+                initializeCounter(TAG_PERMISSION_TREE, 100);
+                initializeCounter(TAG_SUPPORTS_GL_TEXTURE, 100);
+                initializeCounter(TAG_SUPPORTS_SCREENS, 100);
+                initializeCounter(TAG_USES_CONFIGURATION, 100);
+                initializeCounter(TAG_USES_SDK, 100);
+                initializeCounter(TAG_COMPATIBLE_SCREENS, 200);
+                initializeCounter(TAG_QUERIES, 200);
+                initializeCounter(TAG_ATTRIBUTION, 400);
+                initializeCounter(TAG_USES_FEATURE, 400);
+                initializeCounter(TAG_PERMISSION, 2000);
+                initializeCounter(TAG_USES_PERMISSION, 20000);
+                break;
+            case TAG_PROVIDER:
+                initializeCounter(TAG_GRANT_URI_PERMISSION, 100);
+                initializeCounter(TAG_PATH_PERMISSION, 100);
+                initializeCounter(TAG_META_DATA, 1000);
+                initializeCounter(TAG_INTENT_FILTER, 20000);
+                break;
+            case TAG_QUERIES:
+                initializeCounter(TAG_PACKAGE, 1000);
+                initializeCounter(TAG_INTENT, 2000);
+                initializeCounter(TAG_PROVIDER, 8000);
+                break;
+        }
+    }
+
+    private static int getAttrStrMaxLen(String attrName) {
+        switch (attrName) {
+            case TAG_ATTR_HOST:
+            case TAG_ATTR_PORT:
+            case TAG_ATTR_SCHEME:
+                return MAX_ATTR_LEN_URL_COMPONENT;
+            case TAG_ATTR_PERMISSION_GROUP:
+                return MAX_ATTR_LEN_PERMISSION_GROUP;
+            case TAG_ATTR_SHARED_USER_ID:
+            case TAG_ATTR_PACKAGE:
+            case TAG_ATTR_TARGET_PACKAGE:
+                return MAX_ATTR_LEN_PACKAGE;
+            case TAG_ATTR_MIMETYPE:
+                return MAX_ATTR_LEN_MIMETYPE;
+            case TAG_ATTR_BACKUP_AGENT:
+            case TAG_ATTR_CATEGORY:
+            case TAG_ATTR_MANAGE_SPACE_ACTIVITY:
+            case TAG_ATTR_NAME:
+            case TAG_ATTR_PARENT_ACTIVITY_NAME:
+            case TAG_ATTR_PERMISSION:
+            case TAG_ATTR_PROCESS:
+            case TAG_ATTR_READ_PERMISSION:
+            case TAG_ATTR_REQUIRED_ACCOUNT_TYPE:
+            case TAG_ATTR_REQUIRED_SYSTEM_PROPERTY_NAME:
+            case TAG_ATTR_RESTRICTED_ACCOUNT_TYPE:
+            case TAG_ATTR_TARGET_ACTIVITY:
+            case TAG_ATTR_TARGET_NAME:
+            case TAG_ATTR_TARGET_PROCESSES:
+            case TAG_ATTR_TASK_AFFINITY:
+            case TAG_ATTR_WRITE_PERMISSION:
+            case TAG_ATTR_VERSION_NAME:
+            case TAG_ATTR_ZYGOTE_PRELOAD_NAME:
+                return MAX_ATTR_LEN_NAME;
+            case TAG_ATTR_PATH:
+            case TAG_ATTR_PATH_ADVANCED_PATTERN:
+            case TAG_ATTR_PATH_PATTERN:
+            case TAG_ATTR_PATH_PREFIX:
+            case TAG_ATTR_PATH_SUFFIX:
+                return MAX_ATTR_LEN_PATH;
+            case TAG_ATTR_VALUE:
+                return MAX_ATTR_LEN_DATA_VALUE;
+            case TAG_ATTR_REQUIRED_SYSTEM_PROPERTY_VALUE:
+                return PROP_VALUE_MAX;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private int getResStrMaxLen(@StyleableRes int index) {
+        switch (mTag) {
+            case TAG_ACTION:
+                return getActionResStrMaxLen(index);
+            case TAG_ACTIVITY:
+                return getActivityResStrMaxLen(index);
+            case TAG_ACTIVITY_ALIAS:
+                return getActivityAliasResStrMaxLen(index);
+            case TAG_APPLICATION:
+                return getApplicationResStrMaxLen(index);
+            case TAG_DATA:
+                return getDataResStrMaxLen(index);
+            case TAG_CATEGORY:
+                return getCategoryResStrMaxLen(index);
+            case TAG_GRANT_URI_PERMISSION:
+                return getGrantUriPermissionResStrMaxLen(index);
+            case TAG_INSTRUMENTATION:
+                return getInstrumentationResStrMaxLen(index);
+            case TAG_MANIFEST:
+                return getManifestResStrMaxLen(index);
+            case TAG_META_DATA:
+                return getMetaDataResStrMaxLen(index);
+            case TAG_OVERLAY:
+                return getOverlayResStrMaxLen(index);
+            case TAG_PATH_PERMISSION:
+                return getPathPermissionResStrMaxLen(index);
+            case TAG_PERMISSION:
+                return getPermissionResStrMaxLen(index);
+            case TAG_PERMISSION_GROUP:
+                return getPermissionGroupResStrMaxLen(index);
+            case TAG_PERMISSION_TREE:
+                return getPermissionTreeResStrMaxLen(index);
+            case TAG_PROPERTY:
+                return getPropertyResStrMaxLen(index);
+            case TAG_PROVIDER:
+                return getProviderResStrMaxLen(index);
+            case TAG_RECEIVER:
+                return getReceiverResStrMaxLen(index);
+            case TAG_SERVICE:
+                return getServiceResStrMaxLen(index);
+            case TAG_USES_FEATURE:
+                return getUsesFeatureResStrMaxLen(index);
+            case TAG_USES_LIBRARY:
+                return getUsesLibraryResStrMaxLen(index);
+            case TAG_USES_NATIVE_LIBRARY:
+                return getUsesNativeLibraryResStrMaxLen(index);
+            case TAG_USES_PERMISSION:
+            case TAG_USES_PERMISSION_SDK_23:
+            case TAG_USES_PERMISSION_SDK_M:
+                return getUsesPermissionResStrMaxLen(index);
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getActionResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestAction_name:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getActivityResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestActivity_name:
+            case R.styleable.AndroidManifestActivity_parentActivityName:
+            case R.styleable.AndroidManifestActivity_permission:
+            case R.styleable.AndroidManifestActivity_process:
+            case R.styleable.AndroidManifestActivity_taskAffinity:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getActivityAliasResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestActivityAlias_name:
+            case R.styleable.AndroidManifestActivityAlias_permission:
+            case R.styleable.AndroidManifestActivityAlias_targetActivity:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getApplicationResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestApplication_backupAgent:
+            case R.styleable.AndroidManifestApplication_manageSpaceActivity:
+            case R.styleable.AndroidManifestApplication_name:
+            case R.styleable.AndroidManifestApplication_permission:
+            case R.styleable.AndroidManifestApplication_process:
+            case R.styleable.AndroidManifestApplication_requiredAccountType:
+            case R.styleable.AndroidManifestApplication_restrictedAccountType:
+            case R.styleable.AndroidManifestApplication_taskAffinity:
+            case R.styleable.AndroidManifestApplication_zygotePreloadName:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getCategoryResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestCategory_name:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getDataResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestData_host:
+            case R.styleable.AndroidManifestData_port:
+            case R.styleable.AndroidManifestData_scheme:
+                return MAX_ATTR_LEN_URL_COMPONENT;
+            case R.styleable.AndroidManifestData_mimeType:
+                return MAX_ATTR_LEN_MIMETYPE;
+            case R.styleable.AndroidManifestData_path:
+            case R.styleable.AndroidManifestData_pathPattern:
+            case R.styleable.AndroidManifestData_pathPrefix:
+            case R.styleable.AndroidManifestData_pathSuffix:
+            case R.styleable.AndroidManifestData_pathAdvancedPattern:
+                return MAX_ATTR_LEN_PATH;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getGrantUriPermissionResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestGrantUriPermission_path:
+            case R.styleable.AndroidManifestGrantUriPermission_pathPattern:
+            case R.styleable.AndroidManifestGrantUriPermission_pathPrefix:
+                return MAX_ATTR_LEN_PATH;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getInstrumentationResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestInstrumentation_targetPackage:
+                return MAX_ATTR_LEN_PACKAGE;
+            case R.styleable.AndroidManifestInstrumentation_name:
+            case R.styleable.AndroidManifestInstrumentation_targetProcesses:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getManifestResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifest_sharedUserId:
+                return MAX_ATTR_LEN_PACKAGE;
+            case R.styleable.AndroidManifest_versionName:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getMetaDataResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestMetaData_name:
+                return MAX_ATTR_LEN_NAME;
+            case R.styleable.AndroidManifestMetaData_value:
+                return MAX_ATTR_LEN_DATA_VALUE;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getOverlayResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestResourceOverlay_targetPackage:
+                return MAX_ATTR_LEN_PACKAGE;
+            case R.styleable.AndroidManifestResourceOverlay_category:
+            case R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyName:
+            case R.styleable.AndroidManifestResourceOverlay_targetName:
+                return MAX_ATTR_LEN_NAME;
+            case R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyValue:
+                return PROP_VALUE_MAX;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getPathPermissionResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestPathPermission_permission:
+            case R.styleable.AndroidManifestPathPermission_readPermission:
+            case R.styleable.AndroidManifestPathPermission_writePermission:
+                return MAX_ATTR_LEN_NAME;
+            case R.styleable.AndroidManifestPathPermission_path:
+            case R.styleable.AndroidManifestPathPermission_pathPattern:
+            case R.styleable.AndroidManifestPathPermission_pathPrefix:
+                return MAX_ATTR_LEN_PATH;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getPermissionResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestPermission_permissionGroup:
+                return MAX_ATTR_LEN_PERMISSION_GROUP;
+            case R.styleable.AndroidManifestPermission_name:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getPermissionGroupResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestPermissionGroup_name:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getPermissionTreeResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestPermissionTree_name:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getPropertyResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestProperty_name:
+                return MAX_ATTR_LEN_NAME;
+            case R.styleable.AndroidManifestProperty_value:
+                return MAX_ATTR_LEN_DATA_VALUE;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getProviderResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestProvider_name:
+            case R.styleable.AndroidManifestProvider_permission:
+            case R.styleable.AndroidManifestProvider_process:
+            case R.styleable.AndroidManifestProvider_readPermission:
+            case R.styleable.AndroidManifestProvider_writePermission:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getReceiverResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestReceiver_name:
+            case R.styleable.AndroidManifestReceiver_permission:
+            case R.styleable.AndroidManifestReceiver_process:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getServiceResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestReceiver_name:
+            case R.styleable.AndroidManifestReceiver_permission:
+            case R.styleable.AndroidManifestReceiver_process:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getUsesFeatureResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestUsesFeature_name:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getUsesLibraryResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestUsesLibrary_name:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getUsesNativeLibraryResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestUsesNativeLibrary_name:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private static int getUsesPermissionResStrMaxLen(@StyleableRes int index) {
+        switch (index) {
+            case R.styleable.AndroidManifestUsesPermission_name:
+                return MAX_ATTR_LEN_NAME;
+            default:
+                return DEFAULT_MAX_STRING_ATTR_LENGTH;
+        }
+    }
+
+    private void initializeCounter(String tag, int max) {
+        int idx = getCounterIdx(tag);
+        if (mTagCounters[idx] == null) {
+            mTagCounters[idx] = new TagCounter();
+        }
+        mTagCounters[idx].reset(max);
+        mChildTagMask |= 1 << idx;
+    }
+
+    private boolean isComponentNameAttr(String name) {
+        switch (mTag) {
+            case TAG_ACTIVITY:
+                switch (name) {
+                    case TAG_ATTR_NAME:
+                    case TAG_ATTR_PARENT_ACTIVITY_NAME:
+                        return true;
+                    default:
+                        return false;
+                }
+            case TAG_ACTIVITY_ALIAS:
+                switch (name) {
+                    case TAG_ATTR_TARGET_ACTIVITY:
+                        return true;
+                    default:
+                        return false;
+                }
+            case TAG_APPLICATION:
+                switch (name) {
+                    case TAG_ATTR_BACKUP_AGENT:
+                    case TAG_ATTR_NAME:
+                    case TAG_ATTR_ZYGOTE_PRELOAD_NAME:
+                        return true;
+                    default:
+                        return false;
+                }
+            case TAG_INSTRUMENTATION:
+            case TAG_PROVIDER:
+            case TAG_RECEIVER:
+            case TAG_SERVICE:
+                switch (name) {
+                    case TAG_ATTR_NAME:
+                        return true;
+                    default:
+                        return false;
+                }
+            default:
+                return false;
+        }
+    }
+
+    private boolean isComponentNameAttr(@StyleableRes int index) {
+        switch (mTag) {
+            case TAG_ACTIVITY:
+                return index == R.styleable.AndroidManifestActivity_name
+                        || index == R.styleable.AndroidManifestActivity_parentActivityName;
+            case TAG_ACTIVITY_ALIAS:
+                return index == R.styleable.AndroidManifestActivityAlias_targetActivity;
+            case TAG_APPLICATION:
+                return index == R.styleable.AndroidManifestApplication_backupAgent
+                        || index == R.styleable.AndroidManifestApplication_name
+                        || index == R.styleable.AndroidManifestApplication_zygotePreloadName;
+            case TAG_INSTRUMENTATION:
+                return index ==  R.styleable.AndroidManifestInstrumentation_name;
+            case TAG_PROVIDER:
+                return index ==  R.styleable.AndroidManifestProvider_name;
+            case TAG_RECEIVER:
+                return index ==  R.styleable.AndroidManifestReceiver_name;
+            case TAG_SERVICE:
+                return index ==  R.styleable.AndroidManifestService_name;
+            default:
+                return false;
+        }
+    }
+
+    boolean hasChild(String tag) {
+        return (mChildTagMask & (1 << getCounterIdx(tag))) != 0;
+    }
+
+    void validateComponentName(CharSequence name) {
+        boolean isStart = true;
+        for (int i = 0; i < name.length(); i++) {
+            if (BAD_COMPONENT_NAME_CHARS.indexOf(name.charAt(i)) >= 0) {
+                Slog.e(TAG, name + " is not a valid Java class name");
+                throw new SecurityException(name + " is not a valid Java class name");
+            }
+        }
+    }
+
+    void validateStrAttr(String attrName, String attrValue) {
+        if (attrValue != null && attrValue.length() > getAttrStrMaxLen(attrName)) {
+            throw new SecurityException("String length limit exceeded for attribute " + attrName
+                    + " in " + mTag);
+        }
+        if (isComponentNameAttr(attrName)) {
+            validateComponentName(attrValue);
+        }
+    }
+
+    void validateResStrAttr(@StyleableRes int index, CharSequence stringValue) {
+        if (stringValue != null && stringValue.length() > getResStrMaxLen(index)) {
+            throw new SecurityException("String length limit exceeded for attribute in " + mTag);
+        }
+        if (isComponentNameAttr(index)) {
+            validateComponentName(stringValue);
+        }
+    }
+
+
+    void seen(@NonNull Element element) {
+        TagCounter counter = mTagCounters[getCounterIdx(element.mTag)];
+        if (counter != null) {
+            counter.increment();
+            if (!counter.isValid()) {
+                throw new SecurityException("The number of child " + element.mTag
+                        + " elements exceeded the max allowed in " + this.mTag);
+            }
+        }
+    }
+}
diff --git a/core/java/android/content/res/ResourcesImpl.java b/core/java/android/content/res/ResourcesImpl.java
index 3ccfc6f..395fef2 100644
--- a/core/java/android/content/res/ResourcesImpl.java
+++ b/core/java/android/content/res/ResourcesImpl.java
@@ -27,6 +27,7 @@
 import android.annotation.RawRes;
 import android.annotation.StyleRes;
 import android.annotation.StyleableRes;
+import android.app.ResourcesManager;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.pm.ActivityInfo;
 import android.content.pm.ActivityInfo.Config;
@@ -426,17 +427,24 @@
 
                 if ((configChanges & ActivityInfo.CONFIG_LOCALE) != 0) {
                     if (locales.size() > 1) {
-                        // The LocaleList has changed. We must query the AssetManager's available
-                        // Locales and figure out the best matching Locale in the new LocaleList.
-                        String[] availableLocales = mAssets.getNonSystemLocales();
-                        if (LocaleList.isPseudoLocalesOnly(availableLocales)) {
-                            // No app defined locales, so grab the system locales.
-                            availableLocales = mAssets.getLocales();
+                        String[] availableLocales;
+
+                        LocaleList localeList = ResourcesManager.getInstance().getLocaleList();
+                        if (!localeList.isEmpty()) {
+                            availableLocales = localeList.toLanguageTags().split(",");
+                        } else {
+                            // The LocaleList has changed. We must query the AssetManager's
+                            // available Locales and figure out the best matching Locale in the new
+                            // LocaleList.
+                            availableLocales = mAssets.getNonSystemLocales();
                             if (LocaleList.isPseudoLocalesOnly(availableLocales)) {
-                                availableLocales = null;
+                                // No app defined locales, so grab the system locales.
+                                availableLocales = mAssets.getLocales();
+                                if (LocaleList.isPseudoLocalesOnly(availableLocales)) {
+                                    availableLocales = null;
+                                }
                             }
                         }
-
                         if (availableLocales != null) {
                             final Locale bestLocale = locales.getFirstMatchWithEnglishSupported(
                                     availableLocales);
diff --git a/core/java/android/content/res/StringBlock.java b/core/java/android/content/res/StringBlock.java
index 6c07356..c143acb 100644
--- a/core/java/android/content/res/StringBlock.java
+++ b/core/java/android/content/res/StringBlock.java
@@ -62,7 +62,7 @@
     private static final String TAG = "AssetManager";
     private static final boolean localLOGV = false;
 
-    private final long mNative;
+    private long mNative;   // final, but gets modified when closed
     private final boolean mUseSparse;
     private final boolean mOwnsNative;
 
@@ -207,6 +207,7 @@
                 if (mOwnsNative) {
                     nativeDestroy(mNative);
                 }
+                mNative = 0;
             }
         }
     }
diff --git a/core/java/android/content/res/TEST_MAPPING b/core/java/android/content/res/TEST_MAPPING
index 3703f2e..c2febae 100644
--- a/core/java/android/content/res/TEST_MAPPING
+++ b/core/java/android/content/res/TEST_MAPPING
@@ -10,11 +10,9 @@
   "presubmit": [
     {
       "name": "CtsResourcesLoaderTests"
-    }
-  ],
-  "presubmit-large": [
+    },
     {
-      "name": "CtsContentTestCases",
+      "name": "CtsResourcesTestCases",
       "options": [
         {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
diff --git a/core/java/android/content/res/TagCounter.java b/core/java/android/content/res/TagCounter.java
new file mode 100644
index 0000000..94deee7
--- /dev/null
+++ b/core/java/android/content/res/TagCounter.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.content.res;
+
+/**
+ * Counter used to track the number of tags seen during manifest validation.
+ *
+ * {@hide}
+ */
+public class TagCounter {
+    private static final int DEFAULT_MAX_COUNT = 512;
+
+    private int mMaxValue;
+    private int mCount;
+
+    public TagCounter() {
+        mMaxValue = DEFAULT_MAX_COUNT;
+        mCount = 0;
+    }
+
+    void reset(int maxValue) {
+        this.mMaxValue = maxValue;
+        this.mCount = 0;
+    }
+
+    void increment() {
+        mCount += 1;
+    }
+
+    public boolean isValid() {
+        return mCount <= mMaxValue;
+    }
+}
diff --git a/core/java/android/content/res/TypedArray.java b/core/java/android/content/res/TypedArray.java
index 9eb9cd5..48adfb9 100644
--- a/core/java/android/content/res/TypedArray.java
+++ b/core/java/android/content/res/TypedArray.java
@@ -35,6 +35,8 @@
 
 import dalvik.system.VMRuntime;
 
+import org.xmlpull.v1.XmlPullParserException;
+
 import java.util.Arrays;
 
 /**
@@ -1391,13 +1393,22 @@
     private CharSequence loadStringValueAt(int index) {
         final int[] data = mData;
         final int cookie = data[index + STYLE_ASSET_COOKIE];
+        CharSequence value = null;
         if (cookie < 0) {
             if (mXml != null) {
-                return mXml.getPooledString(data[index + STYLE_DATA]);
+                value = mXml.getPooledString(data[index + STYLE_DATA]);
             }
-            return null;
+        } else {
+            value = mAssets.getPooledStringForCookie(cookie, data[index + STYLE_DATA]);
         }
-        return mAssets.getPooledStringForCookie(cookie, data[index + STYLE_DATA]);
+        if (value != null && mXml != null && mXml.mValidator != null) {
+            try {
+                mXml.mValidator.validateResStrAttr(mXml, index / STYLE_NUM_ENTRIES, value);
+            } catch (XmlPullParserException e) {
+                throw new RuntimeException("Failed to validate resource string: " + e.getMessage());
+            }
+        }
+        return value;
     }
 
     /** @hide */
diff --git a/core/java/android/content/res/Validator.java b/core/java/android/content/res/Validator.java
new file mode 100644
index 0000000..cae353b
--- /dev/null
+++ b/core/java/android/content/res/Validator.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.content.res;
+
+import android.annotation.NonNull;
+import android.annotation.StyleableRes;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.util.ArrayDeque;
+
+/**
+ * Validates manifest files by ensuring that tag counts and the length of string attributes are
+ * restricted.
+ *
+ * {@hide}
+ */
+public class Validator {
+
+    private final ArrayDeque<Element> mElements = new ArrayDeque<>();
+
+    private void cleanUp() {
+        while (!mElements.isEmpty()) {
+            mElements.pop().recycle();
+        }
+    }
+
+    /**
+     * Validates the elements and it's attributes as the XmlPullParser traverses the xml.
+     */
+    public void validate(@NonNull XmlPullParser parser) throws XmlPullParserException {
+        int eventType = parser.getEventType();
+        int depth = parser.getDepth();
+        // The mElement size should equal to the parser depth-1 when the parser eventType is
+        // START_TAG. If depth - mElement.size() is larger than 1 then that means
+        // validation for the previous element was skipped so we should skip validation for all
+        // descendant elements as well
+        if (depth > mElements.size() + 1) {
+            return;
+        }
+        if (eventType == XmlPullParser.START_TAG) {
+            String tag = parser.getName();
+            if (Element.shouldValidate(tag)) {
+                Element element = Element.obtain(tag);
+                Element parent = mElements.peek();
+                if (parent != null && parent.hasChild(tag)) {
+                    try {
+                        parent.seen(element);
+                    } catch (SecurityException e) {
+                        cleanUp();
+                        throw e;
+                    }
+                }
+                mElements.push(element);
+            }
+        } else if (eventType == XmlPullParser.END_TAG && depth == mElements.size()) {
+            mElements.pop().recycle();
+        } else if (eventType == XmlPullParser.END_DOCUMENT) {
+            cleanUp();
+        }
+    }
+
+    /**
+     * Validates the resource string of a manifest tag attribute.
+     */
+    public void validateResStrAttr(@NonNull XmlPullParser parser, @StyleableRes int index,
+            CharSequence stringValue) throws XmlPullParserException {
+        if (parser.getDepth() > mElements.size()) {
+            return;
+        }
+        mElements.peek().validateResStrAttr(index, stringValue);
+    }
+
+    /**
+     * Validates the string of a manifest tag attribute by name.
+     */
+    public void validateStrAttr(@NonNull XmlPullParser parser, String attrName, String attrValue) {
+        if (parser.getDepth() > mElements.size()) {
+            return;
+        }
+        mElements.peek().validateStrAttr(attrName, attrValue);
+    }
+}
diff --git a/core/java/android/content/res/XmlBlock.java b/core/java/android/content/res/XmlBlock.java
index 3915a6c..7649b32 100644
--- a/core/java/android/content/res/XmlBlock.java
+++ b/core/java/android/content/res/XmlBlock.java
@@ -73,7 +73,9 @@
     private void decOpenCountLocked() {
         mOpenCount--;
         if (mOpenCount == 0) {
+            mStrings.close();
             nativeDestroy(mNative);
+            mNative = 0;
             if (mAssets != null) {
                 mAssets.xmlBlockGone(hashCode());
             }
@@ -95,6 +97,18 @@
     }
 
     /**
+     * Returns a XmlResourceParser that validates the xml using the given validator.
+     */
+    public XmlResourceParser newParser(@AnyRes int resId, Validator validator) {
+        synchronized (this) {
+            if (mNative != 0) {
+                return new Parser(nativeCreateParseState(mNative, resId), this, validator);
+            }
+            return null;
+        }
+    }
+
+    /**
      * Reference Error.h UNEXPECTED_NULL
      */
     private static final int ERROR_NULL_DOCUMENT = Integer.MIN_VALUE + 8;
@@ -106,12 +120,19 @@
 
     @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
     public final class Parser implements XmlResourceParser {
+        Validator mValidator;
+
         Parser(long parseState, XmlBlock block) {
             mParseState = parseState;
             mBlock = block;
             block.mOpenCount++;
         }
 
+        Parser(long parseState, XmlBlock block, Validator validator) {
+            this(parseState, block);
+            mValidator = validator;
+        }
+
         @AnyRes
         public int getSourceResId() {
             return nativeGetSourceResId(mParseState);
@@ -298,7 +319,11 @@
                         "Namespace=" + getAttributeNamespace(idx)
                         + "Name=" + getAttributeName(idx)
                         + ", Value=" + getAttributeValue(idx));
-                return getAttributeValue(idx);
+                String value = getAttributeValue(idx);
+                if (mValidator != null) {
+                    mValidator.validateStrAttr(this, name, value);
+                }
+                return value;
             }
             return null;
         }
@@ -327,6 +352,9 @@
                 break;
             }
             mEventType = ev;
+            if (mValidator != null) {
+                mValidator.validate(this);
+            }
             if (ev == END_DOCUMENT) {
                 // Automatically close the parse when we reach the end of
                 // a document, since the standard XmlPullParser interface
@@ -621,7 +649,7 @@
     }
 
     private @Nullable final AssetManager mAssets;
-    private final long mNative;
+    private long mNative;   // final, but gets reset on close
     /*package*/ final StringBlock mStrings;
     private boolean mOpen = true;
     private int mOpenCount = 1;
diff --git a/core/java/android/credentials/CredentialProviderInfo.java b/core/java/android/credentials/CredentialProviderInfo.java
index d66b8f0..a0cb36d 100644
--- a/core/java/android/credentials/CredentialProviderInfo.java
+++ b/core/java/android/credentials/CredentialProviderInfo.java
@@ -29,9 +29,7 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
 /**
  * {@link ServiceInfo} and meta-data about a credential provider.
@@ -41,7 +39,7 @@
 @TestApi
 public final class CredentialProviderInfo implements Parcelable {
     @NonNull private final ServiceInfo mServiceInfo;
-    @NonNull private final Set<String> mCapabilities = new HashSet<>();
+    @NonNull private final List<String> mCapabilities = new ArrayList<>();
     @Nullable private final CharSequence mOverrideLabel;
     @Nullable private CharSequence mSettingsSubtitle = null;
     private final boolean mIsSystemProvider;
@@ -98,11 +96,7 @@
     /** Returns a list of capabilities this provider service can support. */
     @NonNull
     public List<String> getCapabilities() {
-        List<String> capabilities = new ArrayList<>();
-        for (String capability : mCapabilities) {
-            capabilities.add(capability);
-        }
-        return Collections.unmodifiableList(capabilities);
+        return Collections.unmodifiableList(mCapabilities);
     }
 
     /** Returns whether the provider is enabled by the user. */
@@ -135,13 +129,11 @@
     public void writeToParcel(@NonNull Parcel dest, int flags) {
         dest.writeTypedObject(mServiceInfo, flags);
         dest.writeBoolean(mIsSystemProvider);
+        dest.writeStringList(mCapabilities);
         dest.writeBoolean(mIsEnabled);
         dest.writeBoolean(mIsPrimary);
         TextUtils.writeToParcel(mOverrideLabel, dest, flags);
         TextUtils.writeToParcel(mSettingsSubtitle, dest, flags);
-
-        List<String> capabilities = getCapabilities();
-        dest.writeStringList(capabilities);
     }
 
     @Override
@@ -178,14 +170,11 @@
     private CredentialProviderInfo(@NonNull Parcel in) {
         mServiceInfo = in.readTypedObject(ServiceInfo.CREATOR);
         mIsSystemProvider = in.readBoolean();
+        in.readStringList(mCapabilities);
         mIsEnabled = in.readBoolean();
         mIsPrimary = in.readBoolean();
         mOverrideLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
         mSettingsSubtitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
-
-        List<String> capabilities = new ArrayList<>();
-        in.readStringList(capabilities);
-        mCapabilities.addAll(capabilities);
     }
 
     public static final @NonNull Parcelable.Creator<CredentialProviderInfo> CREATOR =
@@ -205,7 +194,7 @@
     public static final class Builder {
 
         @NonNull private ServiceInfo mServiceInfo;
-        @NonNull private Set<String> mCapabilities = new HashSet<>();
+        @NonNull private List<String> mCapabilities = new ArrayList<>();
         private boolean mIsSystemProvider = false;
         @Nullable private CharSequence mSettingsSubtitle = null;
         private boolean mIsEnabled = false;
@@ -249,16 +238,6 @@
             return this;
         }
 
-        /**
-         * Sets a list of capabilities this provider service can support.
-         *
-         * @hide
-         */
-        public @NonNull Builder addCapabilities(@NonNull Set<String> capabilities) {
-            mCapabilities.addAll(capabilities);
-            return this;
-        }
-
         /** Sets whether it is enabled by the user. */
         public @NonNull Builder setEnabled(boolean isEnabled) {
             mIsEnabled = isEnabled;
diff --git a/core/java/android/database/sqlite/SQLiteConnection.java b/core/java/android/database/sqlite/SQLiteConnection.java
index 4b3eb3a..f2980f4 100644
--- a/core/java/android/database/sqlite/SQLiteConnection.java
+++ b/core/java/android/database/sqlite/SQLiteConnection.java
@@ -16,6 +16,9 @@
 
 package android.database.sqlite;
 
+import android.annotation.NonNull;
+import com.android.internal.annotations.GuardedBy;
+
 import android.database.Cursor;
 import android.database.CursorWindow;
 import android.database.DatabaseUtils;
@@ -35,6 +38,7 @@
 import dalvik.system.CloseGuard;
 import java.io.File;
 import java.io.IOException;
+import java.lang.ref.Reference;
 import java.nio.file.FileSystems;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -107,9 +111,10 @@
     private final int mConnectionId;
     private final boolean mIsPrimaryConnection;
     private final boolean mIsReadOnlyConnection;
-    private final PreparedStatementCache mPreparedStatementCache;
     private PreparedStatement mPreparedStatementPool;
 
+    private final PreparedStatementCache mPreparedStatementCache;
+
     // The recent operations log.
     private final OperationLog mRecentOperations;
 
@@ -167,6 +172,9 @@
     private static native int nativeGetDbLookaside(long connectionPtr);
     private static native void nativeCancel(long connectionPtr);
     private static native void nativeResetCancel(long connectionPtr, boolean cancelable);
+    private static native int nativeLastInsertRowId(long connectionPtr);
+    private static native long nativeChanges(long connectionPtr);
+    private static native long nativeTotalChanges(long connectionPtr);
 
     private SQLiteConnection(SQLiteConnectionPool pool,
             SQLiteDatabaseConfiguration configuration,
@@ -576,6 +584,10 @@
         final int oldSize = mConfiguration.perConnectionSql.size();
         final int newSize = configuration.perConnectionSql.size();
         boolean perConnectionSqlChanged = newSize > oldSize;
+        boolean journalModeChanged = !configuration.resolveJournalMode().equalsIgnoreCase(
+                mConfiguration.resolveJournalMode());
+        boolean syncModeChanged =
+                !configuration.resolveSyncMode().equalsIgnoreCase(mConfiguration.resolveSyncMode());
 
         // Update configuration parameters.
         mConfiguration.updateParametersFrom(configuration);
@@ -587,14 +599,10 @@
             setForeignKeyModeFromConfiguration();
         }
 
-        boolean journalModeChanged = !configuration.resolveJournalMode().equalsIgnoreCase(
-                mConfiguration.resolveJournalMode());
         if (journalModeChanged) {
             setJournalFromConfiguration();
         }
 
-        boolean syncModeChanged =
-                !configuration.resolveSyncMode().equalsIgnoreCase(mConfiguration.resolveSyncMode());
         if (syncModeChanged) {
             setSyncModeFromConfiguration();
         }
@@ -617,8 +625,10 @@
         mOnlyAllowReadOnlyOperations = readOnly;
     }
 
-    // Called by SQLiteConnectionPool only.
-    // Returns true if the prepared statement cache contains the specified SQL.
+    // Called by SQLiteConnectionPool only to decide if this connection has the desired statement
+    // already prepared.  Returns true if the prepared statement cache contains the specified SQL.
+    // The statement may be stale, but that will be a rare occurrence and affects performance only
+    // a tiny bit, and only when database schema changes.
     boolean isPreparedStatementInCache(String sql) {
         return mPreparedStatementCache.get(sql) != null;
     }
@@ -1052,26 +1062,44 @@
         }
     }
 
-    private PreparedStatement acquirePreparedStatement(String sql) {
+    /**
+     * Return a {@link #PreparedStatement}, possibly from the cache.
+     */
+    private PreparedStatement acquirePreparedStatementLI(String sql) {
         ++mPool.mTotalPrepareStatements;
-        PreparedStatement statement = mPreparedStatementCache.get(sql);
+        PreparedStatement statement = mPreparedStatementCache.getStatement(sql);
+        long seqNum = mPreparedStatementCache.getLastSeqNum();
+
         boolean skipCache = false;
         if (statement != null) {
             if (!statement.mInUse) {
-                return statement;
+                if (statement.mSeqNum == seqNum) {
+                    // This is a valid statement.  Claim it and return it.
+                    statement.mInUse = true;
+                    return statement;
+                } else {
+                    // This is a stale statement.  Remove it from the cache.  Treat this as if the
+                    // statement was never found, which means we should not skip the cache.
+                    mPreparedStatementCache.remove(sql);
+                    statement = null;
+                    // Leave skipCache == false.
+                }
+            } else {
+                // The statement is already in the cache but is in use (this statement appears to
+                // be not only re-entrant but recursive!).  So prepare a new copy of the statement
+                // but do not cache it.
+                skipCache = true;
             }
-            // The statement is already in the cache but is in use (this statement appears
-            // to be not only re-entrant but recursive!).  So prepare a new copy of the
-            // statement but do not cache it.
-            skipCache = true;
         }
         ++mPool.mTotalPrepareStatementCacheMiss;
-        final long statementPtr = nativePrepareStatement(mConnectionPtr, sql);
+        final long statementPtr = mPreparedStatementCache.createStatement(sql);
+        seqNum = mPreparedStatementCache.getLastSeqNum();
         try {
             final int numParameters = nativeGetParameterCount(mConnectionPtr, statementPtr);
             final int type = DatabaseUtils.getSqlStatementType(sql);
             final boolean readOnly = nativeIsReadOnly(mConnectionPtr, statementPtr);
-            statement = obtainPreparedStatement(sql, statementPtr, numParameters, type, readOnly);
+            statement = obtainPreparedStatement(sql, statementPtr, numParameters, type, readOnly,
+                    seqNum);
             if (!skipCache && isCacheable(type)) {
                 mPreparedStatementCache.put(sql, statement);
                 statement.mInCache = true;
@@ -1088,7 +1116,17 @@
         return statement;
     }
 
-    private void releasePreparedStatement(PreparedStatement statement) {
+    /**
+     * Return a {@link #PreparedStatement}, possibly from the cache.
+     */
+    PreparedStatement acquirePreparedStatement(String sql) {
+        return acquirePreparedStatementLI(sql);
+    }
+
+    /**
+     * Release a {@link #PreparedStatement} that was originally supplied by this connection.
+     */
+    private void releasePreparedStatementLI(PreparedStatement statement) {
         statement.mInUse = false;
         if (statement.mInCache) {
             try {
@@ -1111,11 +1149,36 @@
         }
     }
 
+    /**
+     * Release a {@link #PreparedStatement} that was originally supplied by this connection.
+     */
+    void releasePreparedStatement(PreparedStatement statement) {
+        releasePreparedStatementLI(statement);
+    }
+
     private void finalizePreparedStatement(PreparedStatement statement) {
         nativeFinalizeStatement(mConnectionPtr, statement.mStatementPtr);
         recyclePreparedStatement(statement);
     }
 
+    /**
+     * Return a prepared statement for use by {@link SQLiteRawStatement}.  This throws if the
+     * prepared statement is incompatible with this connection.
+     */
+    PreparedStatement acquirePersistentStatement(@NonNull String sql) {
+        final int cookie = mRecentOperations.beginOperation("prepare", sql, null);
+        try {
+            final PreparedStatement statement = acquirePreparedStatement(sql);
+            throwIfStatementForbidden(statement);
+            return statement;
+        } catch (RuntimeException e) {
+            mRecentOperations.failOperation(cookie, e);
+            throw e;
+        } finally {
+            mRecentOperations.endOperation(cookie);
+        }
+    }
+
     private void attachCancellationSignal(CancellationSignal cancellationSignal) {
         if (cancellationSignal != null) {
             cancellationSignal.throwIfCanceled();
@@ -1200,7 +1263,14 @@
         }
     }
 
-    private void throwIfStatementForbidden(PreparedStatement statement) {
+    /**
+     * Verify that the statement is read-only, if the connection only allows read-only
+     * operations.
+     * @param statement The statement to check.
+     * @throws SQLiteException if the statement could update the database inside a read-only
+     * transaction.
+     */
+    void throwIfStatementForbidden(PreparedStatement statement) {
         if (mOnlyAllowReadOnlyOperations && !statement.mReadOnly) {
             throw new SQLiteException("Cannot execute this statement because it "
                     + "might modify the database but the connection is read-only.");
@@ -1361,7 +1431,7 @@
     }
 
     private PreparedStatement obtainPreparedStatement(String sql, long statementPtr,
-            int numParameters, int type, boolean readOnly) {
+            int numParameters, int type, boolean readOnly, long seqNum) {
         PreparedStatement statement = mPreparedStatementPool;
         if (statement != null) {
             mPreparedStatementPool = statement.mPoolNext;
@@ -1375,6 +1445,7 @@
         statement.mNumParameters = numParameters;
         statement.mType = type;
         statement.mReadOnly = readOnly;
+        statement.mSeqNum = seqNum;
         return statement;
     }
 
@@ -1392,6 +1463,12 @@
         return sql.replaceAll("[\\s]*\\n+[\\s]*", " ");
     }
 
+    // Update the database sequence number.  This number is stored in the prepared statement
+    // cache.
+    void setDatabaseSeqNum(long n) {
+        mPreparedStatementCache.setDatabaseSeqNum(n);
+    }
+
     /**
      * Holder type for a prepared statement.
      *
@@ -1401,8 +1478,10 @@
      * In particular, closing the connection requires a guarantee of deterministic
      * resource disposal because all native statement objects must be freed before
      * the native database object can be closed.  So no finalizers here.
+     *
+     * The class is package-visible so that {@link SQLiteRawStatement} can use it.
      */
-    private static final class PreparedStatement {
+    static final class PreparedStatement {
         // Next item in pool.
         public PreparedStatement mPoolNext;
 
@@ -1425,6 +1504,10 @@
         // True if the statement is in the cache.
         public boolean mInCache;
 
+        // The database schema ID at the time this statement was created.  The ID is left zero for
+        // statements that are not cached.  This value is meaningful only if mInCache is true.
+        public long mSeqNum;
+
         // True if the statement is in use (currently executing).
         // We need this flag because due to the use of custom functions in triggers, it's
         // possible for SQLite calls to be re-entrant.  Consequently we need to prevent
@@ -1432,12 +1515,42 @@
         public boolean mInUse;
     }
 
-    private final class PreparedStatementCache
-            extends LruCache<String, PreparedStatement> {
+    private final class PreparedStatementCache extends LruCache<String, PreparedStatement> {
+        // The database sequence number.  This changes every time the database schema changes.
+        private long mDatabaseSeqNum = 0;
+
+        // The database sequence number from the last getStatement() or createStatement()
+        // call. The proper use of this variable depends on the caller being single threaded.
+        private long mLastSeqNum = 0;
+
         public PreparedStatementCache(int size) {
             super(size);
         }
 
+        public synchronized void setDatabaseSeqNum(long n) {
+            mDatabaseSeqNum = n;
+        }
+
+        // Return the last database sequence number.
+        public long getLastSeqNum() {
+            return mLastSeqNum;
+        }
+
+        // Return a statement from the cache.  Save the database sequence number for the caller.
+        public synchronized PreparedStatement getStatement(String sql) {
+            mLastSeqNum = mDatabaseSeqNum;
+            return get(sql);
+        }
+
+        // Return a new native prepared statement and save the database sequence number for the
+        // caller.  This does not modify the cache in any way.  However, by being synchronized,
+        // callers are guaranteed that the sequence number did not change across the native
+        // preparation step.
+        public synchronized long createStatement(String sql) {
+            mLastSeqNum = mDatabaseSeqNum;
+            return nativePrepareStatement(mConnectionPtr, sql);
+        }
+
         @Override
         protected void entryRemoved(boolean evicted, String key,
                 PreparedStatement oldValue, PreparedStatement newValue) {
@@ -1742,4 +1855,43 @@
         }
 
     }
+
+    /**
+     * Return the ROWID of the last row to be inserted under this connection.  Returns 0 if there
+     * has never been an insert on this connection.
+     * @return The ROWID of the last row to be inserted under this connection.
+     * @hide
+     */
+    long getLastInsertRowId() {
+        try {
+            return nativeLastInsertRowId(mConnectionPtr);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Return the number of database changes on the current connection made by the last SQL
+     * statement
+     * @hide
+     */
+    long getLastChangedRowCount() {
+        try {
+            return nativeChanges(mConnectionPtr);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Return the total number of database changes made on the current connection.
+     * @hide
+     */
+    long getTotalChangedRowCount() {
+        try {
+            return nativeTotalChanges(mConnectionPtr);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
 }
diff --git a/core/java/android/database/sqlite/SQLiteConnectionPool.java b/core/java/android/database/sqlite/SQLiteConnectionPool.java
index dcf1a47..ad335b6 100644
--- a/core/java/android/database/sqlite/SQLiteConnectionPool.java
+++ b/core/java/android/database/sqlite/SQLiteConnectionPool.java
@@ -111,6 +111,13 @@
     @GuardedBy("mLock")
     private IdleConnectionHandler mIdleConnectionHandler;
 
+    // The database schema sequence number.  This counter is incremented every time a schema
+    // change is detected.  Every prepared statement records its schema sequence when the
+    // statement is created.  The prepared statement is not put back in the cache if the sequence
+    // number has changed.  The counter starts at 1, which allows clients to use 0 as a
+    // distinguished value.
+    private long mDatabaseSeqNum = 1;
+
     // whole execution time for this connection in milliseconds.
     private final AtomicLong mTotalStatementsTime = new AtomicLong(0);
 
@@ -1126,6 +1133,18 @@
         mConnectionWaiterPool = waiter;
     }
 
+    void clearAcquiredConnectionsPreparedStatementCache() {
+        // Invalidate prepared statements that have an earlier schema sequence number.
+        synchronized (mLock) {
+            mDatabaseSeqNum++;
+            if (!mAcquiredConnections.isEmpty()) {
+                for (SQLiteConnection connection : mAcquiredConnections.keySet()) {
+                    connection.setDatabaseSeqNum(mDatabaseSeqNum);
+                }
+            }
+        }
+    }
+
     /**
      * Dumps debugging information about this connection pool.
      *
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index c08294f..aec01f8 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -675,6 +675,34 @@
     }
 
     /**
+     * Begins a transaction in DEFERRED mode, with the android-specific constraint that the
+     * transaction is read-only. The database may not be modified inside a read-only transaction.
+     * <p>
+     * Read-only transactions may run concurrently with other read-only transactions, and if they
+     * database is in WAL mode, they may also run concurrently with IMMEDIATE or EXCLUSIVE
+     * transactions.
+     * <p>
+     * Transactions can be nested.  However, the behavior of the transaction is not altered by
+     * nested transactions.  A nested transaction may be any of the three transaction types but if
+     * the outermost type is read-only then nested transactions remain read-only, regardless of how
+     * they are started.
+     * <p>
+     * Here is the standard idiom for read-only transactions:
+     *
+     * <pre>
+     *   db.beginTransactionReadOnly();
+     *   try {
+     *     ...
+     *   } finally {
+     *     db.endTransaction();
+     *   }
+     * </pre>
+     */
+    public void beginTransactionReadOnly() {
+        beginTransactionWithListenerReadOnly(null);
+    }
+
+    /**
      * Begins a transaction in EXCLUSIVE mode.
      * <p>
      * Transactions can be nested.
@@ -699,7 +727,8 @@
      * commits, or is rolled back, either explicitly or by a call to
      * {@link #yieldIfContendedSafely}.
      */
-    public void beginTransactionWithListener(SQLiteTransactionListener transactionListener) {
+    public void beginTransactionWithListener(
+            @Nullable SQLiteTransactionListener transactionListener) {
         beginTransaction(transactionListener, true);
     }
 
@@ -728,20 +757,57 @@
      *            explicitly or by a call to {@link #yieldIfContendedSafely}.
      */
     public void beginTransactionWithListenerNonExclusive(
-            SQLiteTransactionListener transactionListener) {
+            @Nullable SQLiteTransactionListener transactionListener) {
         beginTransaction(transactionListener, false);
     }
 
+    /**
+     * Begins a transaction in read-only mode with a {@link SQLiteTransactionListener} listener.
+     * The database may not be updated inside a read-only transaction.
+     * <p>
+     * Transactions can be nested.  However, the behavior of the transaction is not altered by
+     * nested transactions.  A nested transaction may be any of the three transaction types but if
+     * the outermost type is read-only then nested transactions remain read-only, regardless of how
+     * they are started.
+     * <p>
+     * Here is the standard idiom for read-only transactions:
+     *
+     * <pre>
+     *   db.beginTransactionWightListenerReadOnly(listener);
+     *   try {
+     *     ...
+     *   } finally {
+     *     db.endTransaction();
+     *   }
+     * </pre>
+     */
+    public void beginTransactionWithListenerReadOnly(
+            @Nullable SQLiteTransactionListener transactionListener) {
+        beginTransaction(transactionListener, SQLiteSession.TRANSACTION_MODE_DEFERRED);
+    }
+
     @UnsupportedAppUsage
     private void beginTransaction(SQLiteTransactionListener transactionListener,
             boolean exclusive) {
+        beginTransaction(transactionListener,
+                exclusive ? SQLiteSession.TRANSACTION_MODE_EXCLUSIVE :
+                SQLiteSession.TRANSACTION_MODE_IMMEDIATE);
+    }
+
+    /**
+     * Begin a transaction with the specified mode.  Valid modes are
+     * {@link SQLiteSession.TRANSACTION_MODE_DEFERRED},
+     * {@link SQLiteSession.TRANSACTION_MODE_IMMEDIATE}, and
+     * {@link SQLiteSession.TRANSACTION_MODE_EXCLUSIVE}.
+     */
+    private void beginTransaction(@Nullable SQLiteTransactionListener listener, int mode) {
         acquireReference();
         try {
-            getThreadSession().beginTransaction(
-                    exclusive ? SQLiteSession.TRANSACTION_MODE_EXCLUSIVE :
-                            SQLiteSession.TRANSACTION_MODE_IMMEDIATE,
-                    transactionListener,
-                    getThreadDefaultConnectionFlags(false /*readOnly*/), null);
+            // DEFERRED transactions are read-only to allows concurrent read-only transactions.
+            // Others are read/write.
+            boolean readOnly = (mode == SQLiteSession.TRANSACTION_MODE_DEFERRED);
+            getThreadSession().beginTransaction(mode, listener,
+                    getThreadDefaultConnectionFlags(readOnly), null);
         } finally {
             releaseReference();
         }
@@ -2088,10 +2154,12 @@
             try (SQLiteStatement statement = new SQLiteStatement(this, sql, bindArgs)) {
                 return statement.executeUpdateDelete();
             } finally {
-                // If schema was updated, close non-primary connections, otherwise they might
-                // have outdated schema information
+                // If schema was updated, close non-primary connections and clear prepared
+                // statement caches of active connections, otherwise they might have outdated
+                // schema information.
                 if (statementType == DatabaseUtils.STATEMENT_DDL) {
                     mConnectionPoolLocked.closeAvailableNonPrimaryConnectionsAndLogExceptions();
+                    mConnectionPoolLocked.clearAcquiredConnectionsPreparedStatementCache();
                 }
             }
         } finally {
@@ -2100,6 +2168,79 @@
     }
 
     /**
+     * Return a {@link SQLiteRawStatement} connected to the database.  A transaction must be in
+     * progress or an exception will be thrown.  The resulting object will be closed automatically
+     * when the current transaction closes.
+     *
+     * @param sql The SQL string to be compiled into a prepared statement.
+     * @return A {@link SQLiteRawStatement} holding the compiled SQL.
+     * @throws IllegalStateException if a transaction is not in progress.
+     * @throws SQLiteException if the SQL cannot be compiled.
+     */
+    @NonNull
+    public SQLiteRawStatement createRawStatement(@NonNull String sql) {
+        Objects.requireNonNull(sql);
+        return new SQLiteRawStatement(this, sql);
+    }
+
+    /**
+     * Return the "rowid" of the last row to be inserted on the current connection. This method must
+     * only be called when inside a transaction. {@link IllegalStateException} is thrown if the
+     * method is called outside a transaction. If the function is called before any inserts in the
+     * current transaction, the value returned will be from a previous transaction, which may be
+     * from a different thread. If no inserts have occurred on the current connection, the function
+     * returns 0. See the SQLite documentation for the specific details.
+     *
+     * @see <a href="https://sqlite.org/c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid</a>
+     *
+     * @return The ROWID of the last row to be inserted under this connection.
+     * @throws IllegalStateException if there is no current transaction.
+     */
+    public long getLastInsertRowId() {
+        return getThreadSession().getLastInsertRowId();
+    }
+
+    /**
+     * Return the number of database rows that were inserted, updated, or deleted by the most recent
+     * SQL statement within the current transaction.
+     *
+     * @see <a href="https://sqlite.org/c3ref/changes.html">sqlite3_changes64</a>
+     *
+     * @return The number of rows changed by the most recent sql statement
+     * @throws IllegalStateException if there is no current transaction.
+     */
+    public long getLastChangedRowCount() {
+        return getThreadSession().getLastChangedRowCount();
+    }
+
+    /**
+     * Return the total number of database rows that have been inserted, updated, or deleted on
+     * the current connection since it was created.  Due to Android's internal management of
+     * SQLite connections, the value may, or may not, include changes made in earlier
+     * transactions. Best practice is to compare values returned within a single transaction.
+     *
+     * <code><pre>
+     *    database.beginTransaction();
+     *    try {
+     *        long initialValue = database.getTotalChangedRowCount();
+     *        // Execute SQL statements
+     *        long changedRows = database.getTotalChangedRowCount() - initialValue;
+     *        // changedRows counts the total number of rows updated in the transaction.
+     *    } finally {
+     *        database.endTransaction();
+     *    }
+     * </pre></code>
+     *
+     * @see <a href="https://sqlite.org/c3ref/changes.html">sqlite3_total_changes64</a>
+     *
+     * @return The number of rows changed on the current connection.
+     * @throws IllegalStateException if there is no current transaction.
+     */
+    public long getTotalChangedRowCount() {
+        return getThreadSession().getTotalChangedRowCount();
+    }
+
+    /**
      * Verifies that a SQL SELECT statement is valid by compiling it.
      * If the SQL statement is not valid, this method will throw a {@link SQLiteException}.
      *
@@ -3113,4 +3254,3 @@
         ContentResolver.onDbCorruption(tag, message, stacktrace);
     }
 }
-
diff --git a/core/java/android/database/sqlite/SQLiteQueryBuilder.java b/core/java/android/database/sqlite/SQLiteQueryBuilder.java
index e9c59f5..2061c2b 100644
--- a/core/java/android/database/sqlite/SQLiteQueryBuilder.java
+++ b/core/java/android/database/sqlite/SQLiteQueryBuilder.java
@@ -48,6 +48,15 @@
 /**
  * This is a convenience class that helps build SQL queries to be sent to
  * {@link SQLiteDatabase} objects.
+ * <p>
+ * This class is often used to compose a SQL query from client-supplied fragments.  Best practice
+ * to protect against invalid or illegal SQL is to set the following:
+ * <ul>
+ * <li>{@link #setStrict} true.
+ * <li>{@link #setProjectionMap} with the list of queryable columns.
+ * <li>{@link #setStrictColumns} true.
+ * <li>{@link #setStrictGrammar} true.
+ * </ul>
  */
 public class SQLiteQueryBuilder {
     private static final String TAG = "SQLiteQueryBuilder";
diff --git a/core/java/android/database/sqlite/SQLiteRawStatement.java b/core/java/android/database/sqlite/SQLiteRawStatement.java
new file mode 100644
index 0000000..165f181
--- /dev/null
+++ b/core/java/android/database/sqlite/SQLiteRawStatement.java
@@ -0,0 +1,856 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.database.sqlite;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import dalvik.annotation.optimization.FastNative;
+
+import java.io.Closeable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.ref.Reference;
+import java.util.Objects;
+
+/**
+ * A {@link SQLiteRawStatement} represents a SQLite prepared statement. The methods correspond very
+ * closely to SQLite APIs that operate on a sqlite_stmt object.  In general, each API in this class
+ * corresponds to a single SQLite API.
+
+ * <p>
+ * A {@link SQLiteRawStatement} must be created through a database, and there must be a
+ * transaction open at the time. Statements are implicitly closed when the outermost transaction
+ * ends, or if the current transaction is marked successful. Statements may be explicitly
+ * closed at any time with {@link #close}.  The {@link #close} operation is idempotent and may be
+ * called multiple times without harm.
+ * <p>
+ * Multiple {@link SQLiteRawStatement}s may be open simultaneously.  They are independent of each
+ * other.  Closing one statement does not affect any other statement nor does it have any effect
+ * on the enclosing transaction.
+ * <p>
+ * Once a {@link SQLiteRawStatement} has been closed, no further database operations are
+ * permitted on that statement. An {@link IllegalStateException} will be thrown if a database
+ * operation is attempted on a closed statement.
+ * <p>
+ * All operations on a {@link SQLiteRawStatement} must be invoked from the thread that created
+ * it. A {@link IllegalStateException} will be thrown if cross-thread use is detected.
+ * <p>
+ * A common pattern for statements is try-with-resources.
+ * <code><pre>
+ * // Begin a transaction.
+ * database.beginTransaction();
+ * try (SQLiteRawStatement statement = database.createRawStatement("SELECT * FROM ...")) {
+ *     while (statement.step()) {
+ *         // Fetch columns from the result rows.
+ *     }
+ *     database.setTransactionSuccessful();
+ * } finally {
+ *     database.endTransaction();
+ * }
+ * </pre></code>
+ * Note that {@link SQLiteRawStatement} is unrelated to {@link SQLiteStatement}.
+ *
+ * @see <a href="http://sqlite.org/c3ref/stmt.html">sqlite3_stmt</a>
+ */
+public final class SQLiteRawStatement implements Closeable {
+
+    private static final String TAG = "SQLiteRawStatement";
+
+    /**
+     * The database for this object.
+     */
+    private final SQLiteDatabase mDatabase;
+
+    /**
+     * The session for this object.
+     */
+    private final SQLiteSession mSession;
+
+    /**
+     * The PreparedStatement associated with this object. This is returned to
+     * {@link SQLiteSession} when the object is closed.  This also retains immutable attributes of
+     * the statement, like the parameter count.
+     */
+    private SQLiteConnection.PreparedStatement mPreparedStatement;
+
+    /**
+     * The native statement associated with this object.  This is pulled from the
+     * PreparedStatement for faster access.
+     */
+    private final long mStatement;
+
+    /**
+     * The SQL string, for logging.
+     */
+    private final String mSql;
+
+    /**
+     * The thread that created this object.  The object is tied to a connection, which is tied to
+     * its session, which is tied to the thread.  (The lifetime of this object is bounded by the
+     * lifetime of the enclosing transaction, so there are more rules than just the relationships
+     * in the second sentence.)  This variable is set to null when the statement is closed.
+     */
+    private Thread mThread;
+
+    /**
+     * The field types for SQLite columns.
+     * @hide
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(value = {
+                SQLITE_DATA_TYPE_INTEGER,
+                SQLITE_DATA_TYPE_FLOAT,
+                SQLITE_DATA_TYPE_TEXT,
+                SQLITE_DATA_TYPE_BLOB,
+                SQLITE_DATA_TYPE_NULL})
+    public @interface SQLiteDataType {}
+
+    /**
+     * The constant returned by {@link #getColumnType} when the column value is SQLITE_INTEGER.
+     */
+    public static final int SQLITE_DATA_TYPE_INTEGER  = 1;
+
+    /**
+     * The constant returned by {@link #getColumnType} when the column value is SQLITE_FLOAT.
+     */
+    public static final int SQLITE_DATA_TYPE_FLOAT = 2;
+
+    /**
+     * The constant returned by {@link #getColumnType} when the column value is SQLITE_TEXT.
+     */
+    public static final int SQLITE_DATA_TYPE_TEXT = 3;
+
+    /**
+     * The constant returned by {@link #getColumnType} when the column value is SQLITE_BLOB.
+     */
+    public static final int SQLITE_DATA_TYPE_BLOB = 4;
+
+    /**
+     * The constant returned by {@link #getColumnType} when the column value is SQLITE_NULL.
+     */
+    public static final int SQLITE_DATA_TYPE_NULL = 5;
+
+    /**
+     * SQLite error codes that are used by this class.
+     */
+    private static final int SQLITE_BUSY = 5;
+    private static final int SQLITE_LOCKED = 6;
+    private static final int SQLITE_ROW = 100;
+    private static final int SQLITE_DONE = 101;
+
+    /**
+     * Create the statement with empty bindings. The construtor will throw
+     * {@link IllegalStateException} if a transaction is not in progress. Clients should call
+     * {@link SQLiteDatabase.createRawStatement} to create a new instance.
+     */
+    SQLiteRawStatement(@NonNull SQLiteDatabase db, @NonNull String sql) throws SQLiteException {
+        mThread = Thread.currentThread();
+        mDatabase = db;
+        mSession = mDatabase.getThreadSession();
+        mSession.throwIfNoTransaction();
+        mSql = sql;
+        // Acquire a connection and prepare the statement.
+        mPreparedStatement = mSession.acquirePersistentStatement(mSql, this);
+        mStatement = mPreparedStatement.mStatementPtr;
+    }
+
+    /**
+     * Throw if the current session is not the session under which the object was created. Throw
+     * if the object has been closed.  The actual check is that the current thread is not equal to
+     * the creation thread.
+     */
+    private void throwIfInvalid() {
+        if (mThread != Thread.currentThread()) {
+            // Disambiguate the reasons for a mismatch.
+            if (mThread == null) {
+                throw new IllegalStateException("method called on a closed statement");
+            } else {
+                throw new IllegalStateException("method called on a foreign thread: " + mThread);
+            }
+        }
+    }
+
+    /**
+     * Throw {@link IllegalArgumentException} if the length + offset are invalid with respect to
+     * the array length.
+     */
+    private void throwIfInvalidBounds(int arrayLength, int offset, int length) {
+        if (arrayLength < 0) {
+            throw new IllegalArgumentException("invalid array length " + arrayLength);
+        }
+        if (offset < 0 || offset >= arrayLength) {
+            throw new IllegalArgumentException("invalid offset " + offset
+                    + " for array length " + arrayLength);
+        }
+        if (length <= 0 || ((arrayLength - offset) < length)) {
+            throw new IllegalArgumentException("invalid offset " + offset
+                    + " and length " + length
+                    + " for array length " + arrayLength);
+        }
+    }
+
+    /**
+     * Close the object and release any native resources. It is not an error to call this on an
+     * already-closed object.
+     */
+    @Override
+    public void close() {
+        if (mThread != null) {
+            // The object is known not to be closed, so this only throws if the caller is not in
+            // the creation thread.
+            throwIfInvalid();
+            mSession.releasePersistentStatement(mPreparedStatement, this);
+            mThread = null;
+        }
+    }
+
+    /**
+     * Return true if the statement is still open and false otherwise.
+     *
+     * @return True if the statement is open.
+     */
+    public boolean isOpen() {
+        return mThread != null;
+    }
+
+    /**
+     * Step to the next result row. This returns true if the statement stepped to a new row, and
+     * false if the statement is done.  The method throws on any other result, including a busy or
+     * locked database.  If WAL is enabled then the database should never be locked or busy.
+     *
+     * @see <a href="http://sqlite.org/c3ref/step.html">sqlite3_step</a>
+     *
+     * @return True if a row is available and false otherwise.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteDatabaseLockedException if the database is locked or busy.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public boolean step() throws SQLiteException {
+        throwIfInvalid();
+        try {
+            int err = nativeStep(mStatement, true);
+            switch (err) {
+                case SQLITE_ROW:
+                    return true;
+                case SQLITE_DONE:
+                    return false;
+                case SQLITE_BUSY:
+                    throw new SQLiteDatabaseLockedException("database " + mDatabase + " busy");
+                case SQLITE_LOCKED:
+                    throw new SQLiteDatabaseLockedException("database " + mDatabase + " locked");
+            }
+            // This line of code should never be reached, because the native method should already
+            // have thrown an exception.
+            throw new SQLiteException("unknown error " + err);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Step to the next result. This returns the raw result code code from the native method.  The
+     * expected values are SQLITE_ROW and SQLITE_DONE.  For other return values, clients must
+     * decode the error and handle it themselves.  http://sqlite.org/rescode.html for the current
+     * list of result codes.
+     *
+     * @return The native result code from the sqlite3_step() operation.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @hide
+     */
+    public int stepNoThrow() {
+        throwIfInvalid();
+        try {
+            return nativeStep(mStatement, false);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Reset the statement.
+     *
+     * @see <a href="http://sqlite.org/c3ref/reset.html">sqlite3_reset</a>
+     *
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public void reset() {
+        throwIfInvalid();
+        try {
+            nativeReset(mStatement, false);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Clear all parameter bindings.
+     *
+     * @see <a href="http://sqlite.org/c3ref/clear_bindings.html">sqlite3_clear_bindings</a>
+     *
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public void clearBindings() {
+        throwIfInvalid();
+        try {
+            nativeClearBindings(mStatement);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Return the number of parameters in the statement.
+     *
+     * @see
+     * <a href="http://sqlite.org/c3ref/bind_parameter_count.html">sqlite3_bind_parameter_count</a>
+     *
+     * @return The number of parameters in the statement.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     */
+    public int getParameterCount() {
+        throwIfInvalid();
+        try {
+            return nativeBindParameterCount(mStatement);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Return the index of the parameter with specified name.  If the name does not match any
+     * parameter, 0 is returned.
+     *
+     * @see
+     * <a href="http://sqlite.org/c3ref/bind_parameter_index.html">sqlite3_bind_parameter_index</a>
+     *
+     * @param name The name of a parameter.
+     * @return The index of the parameter or 0 if the name does not identify a parameter.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     */
+    public int getParameterIndex(@NonNull String name) {
+        Objects.requireNonNull(name);
+        throwIfInvalid();
+        try {
+            return nativeBindParameterIndex(mStatement, name);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Return the name of the parameter at the specified index.  Null is returned if there is no
+     * such parameter or if the parameter does not have a name.
+     *
+     * @see
+     * <a href="http://sqlite.org/c3ref/bind_parameter_name.html">sqlite3_bind_parameter_name</a>
+     *
+     * @param parameterIndex The index of the parameter.
+     * @return The name of the parameter.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     */
+    @Nullable
+    public String getParameterName(int parameterIndex) {
+        throwIfInvalid();
+        try {
+            return nativeBindParameterName(mStatement, parameterIndex);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Bind a blob to a parameter. Parameter indices start at 1. The function throws if the
+     * parameter index is out of bounds.
+     *
+     * @see <a href="http://sqlite.org/c3ref/bind_blob.html">sqlite3_bind_blob</a>
+     *
+     * @param parameterIndex The index of the parameter in the query. It is one-based.
+     * @param value The value to be bound to the parameter.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the parameter is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public void bindBlob(int parameterIndex, @NonNull byte[] value) throws SQLiteException {
+        Objects.requireNonNull(value);
+        throwIfInvalid();
+        try {
+            nativeBindBlob(mStatement, parameterIndex, value, 0, value.length);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Bind a blob to a parameter. Parameter indices start at 1. The function throws if the
+     * parameter index is out of bounds.  The sub-array value[offset] to value[offset+length-1] is
+     * bound.
+     *
+     * @see <a href="http://sqlite.org/c3ref/bind_blob.html">sqlite3_bind_blob</a>
+     *
+     * @param parameterIndex The index of the parameter in the query. It is one-based.
+     * @param value The value to be bound to the parameter.
+     * @param offset An offset into the value array
+     * @param length The number of bytes to bind from the value array.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws IllegalArgumentException if the sub-array exceeds the bounds of the value array.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the parameter is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public void bindBlob(int parameterIndex, @NonNull byte[] value, int offset, int length)
+            throws SQLiteException {
+        Objects.requireNonNull(value);
+        throwIfInvalid();
+        throwIfInvalidBounds(value.length, offset, length);
+        try {
+            nativeBindBlob(mStatement, parameterIndex, value, offset, length);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Bind a double to a parameter. Parameter indices start at 1. The function throws if the
+     * parameter index is out of bounds.
+     *
+     * @see <a href="http://sqlite.org/c3ref/bind_blob.html">sqlite3_bind_double</a>
+     *
+     * @param parameterIndex The index of the parameter in the query. It is one-based.
+     * @param value The value to be bound to the parameter.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the parameter is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public void bindDouble(int parameterIndex, double value) throws SQLiteException {
+        throwIfInvalid();
+        try {
+            nativeBindDouble(mStatement, parameterIndex, value);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Bind an int to a parameter. Parameter indices start at 1. The function throws if the
+     * parameter index is out of bounds.
+     *
+     * @see <a href="http://sqlite.org/c3ref/bind_blob.html">sqlite3_bind_int</a>
+     *
+     * @param parameterIndex The index of the parameter in the query. It is one-based.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the parameter is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public void bindInt(int parameterIndex, int value) throws SQLiteException {
+        throwIfInvalid();
+        try {
+            nativeBindInt(mStatement, parameterIndex, value);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Bind a long to the parameter. Parameter indices start at 1. The function throws if the
+     * parameter index is out of bounds.
+     *
+     * @see <a href="http://sqlite.org/c3ref/bind_blob.html">sqlite3_bind_int64</a>
+     *
+     * @param value The value to be bound to the parameter.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the parameter is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public void bindLong(int parameterIndex, long value) throws SQLiteException {
+        throwIfInvalid();
+        try {
+            nativeBindLong(mStatement, parameterIndex, value);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Bind a null to the parameter. Parameter indices start at 1. The function throws if the
+     * parameter index is out of bounds.
+     *
+     * @see <a href="http://sqlite.org/c3ref/bind_blob.html">sqlite3_bind_null</a>
+     *
+     * @param parameterIndex The index of the parameter in the query. It is one-based.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the parameter is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public void bindNull(int parameterIndex) throws SQLiteException {
+        throwIfInvalid();
+        try {
+            nativeBindNull(mStatement, parameterIndex);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Bind a string to the parameter. Parameter indices start at 1. The function throws if the
+     * parameter index is out of bounds. The string may not be null.
+     *
+     * @see <a href="http://sqlite.org/c3ref/bind_blob.html">sqlite3_bind_text16</a>
+     *
+     * @param parameterIndex The index of the parameter in the query. It is one-based.
+     * @param value The value to be bound to the parameter.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the parameter is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public void bindText(int parameterIndex, @NonNull String value) throws SQLiteException {
+        Objects.requireNonNull(value);
+        throwIfInvalid();
+        try {
+            nativeBindText(mStatement, parameterIndex, value);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Return the number of columns in the current result row.
+     *
+     * @see <a href="http://sqlite.org/c3ref/column_count.html">sqlite3_column_count</a>
+     *
+     * @return The number of columns in the result row.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     */
+    public int getResultColumnCount() {
+        throwIfInvalid();
+        try {
+            return nativeColumnCount(mStatement);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Return the type of the column in the result row. Column indices start at 0.
+     *
+     * @see <a href="http://sqlite.org/c3ref/column_blob.html">sqlite3_column_type</a>
+     *
+     * @param columnIndex The index of a column in the result row. It is zero-based.
+     * @return The type of the value in the column of the result row.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the column is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    @SQLiteDataType
+    public int getColumnType(int columnIndex) throws SQLiteException {
+        throwIfInvalid();
+        try {
+            return nativeColumnType(mStatement, columnIndex);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Return the name of the column in the result row. Column indices start at 0. This throws
+     * an exception if column is not in the result.
+     *
+     * @see <a href="http://sqlite.org/c3ref/column_name.html">sqlite3_column_name</a>
+     *
+     * @param columnIndex The index of a column in the result row. It is zero-based.
+     * @return The name of the column in the result row.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the column is out of range.
+     * @throws SQLiteOutOfMemoryException if the database cannot allocate memory for the name.
+     */
+    @NonNull
+    public String getColumnName(int columnIndex) throws SQLiteException {
+        throwIfInvalid();
+        try {
+            return nativeColumnName(mStatement, columnIndex);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Return the length of the column value in the result row. Column indices start at 0. This
+     * returns 0 for a null and number of bytes for text or blob. Numeric values are converted to a
+     * string and the length of the string is returned.  See the sqlite documentation for
+     * details. Note that this cannot be used to distinguish a null value from an empty text or
+     * blob.  Note that this returns the number of bytes in the text value, not the number of
+     * characters.
+     *
+     * @see <a href="http://sqlite.org/c3ref/column_blob.html">sqlite3_column_bytes</a>
+     *
+     * @param columnIndex The index of a column in the result row. It is zero-based.
+     * @return The length, in bytes, of the value in the column.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the column is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public int getColumnLength(int columnIndex) throws SQLiteException {
+        throwIfInvalid();
+        try {
+            return nativeColumnBytes(mStatement, columnIndex);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Return the column value of the result row as a blob. Column indices start at 0. This
+     * throws an exception if column is not in the result.  This returns null if the column value
+     * is null.
+     *
+     * The column value will be converted if it is not of type {@link #SQLITE_DATA_TYPE_BLOB}; see
+     * the sqlite documentation for details.
+     *
+     * @see <a href="http://sqlite.org/c3ref/column_blob.html">sqlite3_column_blob</a>
+     *
+     * @param columnIndex The index of a column in the result row. It is zero-based.
+     * @return The value of the column as a blob, or null if the column is NULL.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the column is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    @Nullable
+    public byte[] getColumnBlob(int columnIndex) throws SQLiteException {
+        throwIfInvalid();
+        try {
+            return nativeColumnBlob(mStatement, columnIndex);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Copy the column value of the result row, interpreted as a blob, into the buffer. Column
+     * indices start at 0. This throws an exception if column is not in the result row. Bytes are
+     * copied into the buffer starting at the offset. Bytes are copied from the blob starting at
+     * srcOffset.  Length bytes are copied unless the column value has fewer bytes available. The
+     * function returns the number of bytes copied.
+     *
+     * The column value will be converted if it is not of type {@link #SQLITE_DATA_TYPE_BLOB}; see
+     * the sqlite documentation for details.
+     *
+     * @see <a href="http://sqlite.org/c3ref/column_blob.html">sqlite3_column_blob</a>
+     *
+     * @param columnIndex The index of a column in the result row. It is zero-based.
+     * @param buffer A pre-allocated array to be filled with the value of the column.
+     * @param offset An offset into the buffer: copying starts here.
+     * @param length The number of bytes to copy.
+     * @param srcOffset The offset into the blob from which to start copying.
+     * @return the number of bytes that were copied.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws IllegalArgumentException if the buffer is too small for offset+length.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the column is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public int readColumnBlob(int columnIndex, @NonNull byte[] buffer, int offset,
+            int length, int srcOffset)
+            throws SQLiteException {
+        Objects.requireNonNull(buffer);
+        throwIfInvalid();
+        throwIfInvalidBounds(buffer.length, offset, length);
+        try {
+            return nativeColumnBuffer(mStatement, columnIndex, buffer, offset, length, srcOffset);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Return the column value as a double. Column indices start at 0. This throws an exception
+     * if column is not in the result.
+     *
+     * The column value will be converted if it is not of type {@link #SQLITE_DATA_TYPE_FLOAT}; see
+     * the sqlite documentation for details.
+     *
+     * @see <a href="http://sqlite.org/c3ref/column_blob.html">sqlite3_column_double</a>
+     *
+     * @param columnIndex The index of a column in the result row. It is zero-based.
+     * @return The value of a column as a double.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the column is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public double getColumnDouble(int columnIndex) throws SQLiteException {
+        throwIfInvalid();
+        try {
+            return nativeColumnDouble(mStatement, columnIndex);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Return the column value as a int. Column indices start at 0. This throws an exception if
+     * column is not in the result.
+     *
+     * The column value will be converted if it is not of type {@link #SQLITE_DATA_TYPE_INTEGER};
+     * see the sqlite documentation for details.
+     *
+     * @see <a href="http://sqlite.org/c3ref/column_blob.html">sqlite3_column_int</a>
+     *
+     * @param columnIndex The index of a column in the result row. It is zero-based.
+     * @return The value of the column as an int.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the column is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public int getColumnInt(int columnIndex) throws SQLiteException {
+        throwIfInvalid();
+        try {
+            return nativeColumnInt(mStatement, columnIndex);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Return the column value as a long. Column indices start at 0. This throws an exception if
+     * column is not in the result.
+     *
+     * The column value will be converted if it is not of type {@link #SQLITE_DATA_TYPE_INTEGER};
+     * see the sqlite documentation for details.
+     *
+     * @see <a href="http://sqlite.org/c3ref/column_blob.html">sqlite3_column_long</a>
+     *
+     * @param columnIndex The index of a column in the result row. It is zero-based.
+     * @return The value of the column as an long.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the column is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    public long getColumnLong(int columnIndex) throws SQLiteException {
+        throwIfInvalid();
+        try {
+            return nativeColumnLong(mStatement, columnIndex);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    /**
+     * Return the column value as a text. Column indices start at 0. This throws an exception if
+     * column is not in the result.
+     *
+     * The column value will be converted if it is not of type {@link #SQLITE_DATA_TYPE_TEXT}; see
+     * the sqlite documentation for details.
+     *
+     * @see <a href="http://sqlite.org/c3ref/column_blob.html">sqlite3_column_text16</a>
+     *
+     * @param columnIndex The index of a column in the result row. It is zero-based.
+     * @return The value of the column as a string.
+     * @throws IllegalStateException if the statement is closed or this is a foreign thread.
+     * @throws SQLiteBindOrColumnIndexOutOfRangeException if the column is out of range.
+     * @throws SQLiteException if a native error occurs.
+     */
+    @NonNull
+    public String getColumnText(int columnIndex) throws SQLiteException {
+        throwIfInvalid();
+        try {
+            return nativeColumnText(mStatement, columnIndex);
+        } finally {
+            Reference.reachabilityFence(this);
+        }
+    }
+
+    @Override
+    public String toString() {
+        if (isOpen()) {
+            return "SQLiteRawStatement: " + mSql;
+        } else {
+            return "SQLiteRawStatement: (closed) " + mSql;
+        }
+    }
+
+    /**
+     * Native methods that only require a statement.
+     */
+
+    /**
+     * Metadata about the prepared statement.  The results are a property of the statement itself
+     * and not of any data in the database.
+     */
+    @FastNative
+    private static native int nativeBindParameterCount(long stmt);
+    @FastNative
+    private static native int nativeBindParameterIndex(long stmt, String name);
+    @FastNative
+    private static native String nativeBindParameterName(long stmt, int param);
+
+    @FastNative
+    private static native int nativeColumnCount(long stmt);
+
+    /**
+     * Operations on the statement
+     */
+    private static native int nativeStep(long stmt, boolean throwOnError);
+    private static native void nativeReset(long stmt, boolean clear);
+    @FastNative
+    private static native void nativeClearBindings(long stmt);
+
+    /**
+     * Methods that bind values to parameters.
+     */
+    @FastNative
+    private static native void nativeBindBlob(long stmt, int param, byte[] val, int off, int len);
+    @FastNative
+    private static native void nativeBindDouble(long stmt, int param, double val);
+    @FastNative
+    private static native void nativeBindInt(long stmt, int param, int val);
+    @FastNative
+    private static native void nativeBindLong(long stmt, int param, long val);
+    @FastNative
+    private static native void nativeBindNull(long stmt, int param);
+    @FastNative
+    private static native void nativeBindText(long stmt, int param, String val);
+
+    /**
+     * Methods that return information about the columns int the current result row.
+     */
+    @FastNative
+    private static native int nativeColumnType(long stmt, int col);
+    @FastNative
+    private static native String nativeColumnName(long stmt, int col);
+
+    /**
+     * Methods that return information about the value columns in the current result row.
+     */
+    @FastNative
+    private static native int nativeColumnBytes(long stmt, int col);
+
+    @FastNative
+    private static native byte[] nativeColumnBlob(long stmt, int col);
+    @FastNative
+    private static native int nativeColumnBuffer(long stmt, int col,
+            byte[] val, int off, int len, int srcOffset);
+    @FastNative
+    private static native double nativeColumnDouble(long stmt, int col);
+    @FastNative
+    private static native int nativeColumnInt(long stmt, int col);
+    @FastNative
+    private static native long nativeColumnLong(long stmt, int col);
+    @FastNative
+    private static native String nativeColumnText(long stmt, int col);
+}
diff --git a/core/java/android/database/sqlite/SQLiteSession.java b/core/java/android/database/sqlite/SQLiteSession.java
index 24b62b8..7d9f02d 100644
--- a/core/java/android/database/sqlite/SQLiteSession.java
+++ b/core/java/android/database/sqlite/SQLiteSession.java
@@ -16,6 +16,8 @@
 
 package android.database.sqlite;
 
+import android.annotation.NonNull;
+
 import android.compat.annotation.UnsupportedAppUsage;
 import android.database.CursorWindow;
 import android.database.DatabaseUtils;
@@ -23,6 +25,10 @@
 import android.os.OperationCanceledException;
 import android.os.ParcelFileDescriptor;
 
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.ArrayDeque;
+
 /**
  * Provides a single client the ability to use a database.
  *
@@ -171,6 +177,11 @@
     private Transaction mTransactionStack;
 
     /**
+     * A list of dependents that should be closed when the transaction completes.
+     */
+    private final ArrayDeque<Closeable> mOpenDependents = new ArrayDeque<>();
+
+    /**
      * Transaction mode: Deferred.
      * <p>
      * In a deferred transaction, no locks are acquired on the database
@@ -325,7 +336,12 @@
                         mConnection.execute("BEGIN EXCLUSIVE;", null,
                                 cancellationSignal); // might throw
                         break;
+                    case TRANSACTION_MODE_DEFERRED:
+                        mConnection.execute("BEGIN DEFERRED;", null,
+                                cancellationSignal); // might throw
+                        break;
                     default:
+                        // Per SQLite documentation, this executes in DEFERRED mode.
                         mConnection.execute("BEGIN;", null, cancellationSignal); // might throw
                         break;
                 }
@@ -374,6 +390,9 @@
         throwIfTransactionMarkedSuccessful();
 
         mTransactionStack.mMarkedSuccessful = true;
+        // Close open dependents, since the next thing that is supposed to happen is the transaction
+        // ends.
+        closeOpenDependents();
     }
 
     /**
@@ -434,6 +453,11 @@
                 mTransactionStack.mChildFailed = true;
             }
         } else {
+            // Close all dependents before anything that might throw.  The list should have been
+            // cleared when the transaction was marked successful or unsuccessful.  The call here
+            // does nothing if the list is empty but is provided for insurance.
+            closeOpenDependents();
+
             try {
                 if (successful) {
                     mConnection.execute("COMMIT;", null, cancellationSignal); // might throw
@@ -912,7 +936,87 @@
         }
     }
 
-    private void throwIfNoTransaction() {
+    /**
+     * Acquire a prepared statement for external use. A current transaction is required and that
+     * transaction may not have been marked successful. The dependent is registered its close()
+     * method is called when the transaction is closed.
+     */
+    @NonNull
+    SQLiteConnection.PreparedStatement acquirePersistentStatement(@NonNull String query,
+            @NonNull Closeable dependent) {
+        throwIfNoTransaction();
+        throwIfTransactionMarkedSuccessful();
+        mOpenDependents.addFirst(dependent);
+        try {
+            return mConnection.acquirePersistentStatement(query);
+        } catch (Throwable e) {
+            mOpenDependents.remove(dependent);
+            throw e;
+        }
+    }
+
+    /**
+     * Release a prepared statement.  The dependent should be in list of open dependents.
+     */
+    void releasePersistentStatement(@NonNull SQLiteConnection.PreparedStatement statement,
+            @NonNull Closeable dependent) {
+        mConnection.releasePreparedStatement(statement);
+        mOpenDependents.remove(dependent);
+    }
+
+    /**
+     * Close any open dependents.  This may be called multiple times without harm.  It never
+     * throws.
+     */
+    void closeOpenDependents() {
+        while (mOpenDependents.size() > 0) {
+            final Closeable dependent = mOpenDependents.pollFirst();
+            if (dependent != null)
+                try {
+                    dependent.close();
+                } catch (IOException e) {
+                    // Swallow the exception.
+                }
+        }
+    }
+
+    /**
+     * Return the row ID of the last row to be inserted on this connection.  Note that the last row
+     * might not have been inserted on this particular statement, but the return value is the last
+     * row inserted on the same connection as that used by this statement.  The function checks that
+     * it is currently in a transaction before executing.  Because of this check, it is not
+     * necessary to acquire and release the connection: the connection has already been acquired.
+     * @hide
+     */
+    long getLastInsertRowId() {
+        throwIfNoTransaction();
+        return mConnection.getLastInsertRowId();
+    }
+
+    /**
+     * Return the number of database rows that were changed by the most recent SQL statement on
+     * this connection.
+     * @hide
+     */
+    long getLastChangedRowCount() {
+        throwIfNoTransaction();
+        return mConnection.getLastChangedRowCount();
+    }
+
+    /**
+     * Return the total number of database rows that were changed on the current connection, since
+     * it was created.
+     * @hide
+     */
+    long getTotalChangedRowCount() {
+        throwIfNoTransaction();
+        return mConnection.getTotalChangedRowCount();
+    }
+
+    /**
+     * Throw {@link IllegalStateException} if there is no current transaction.
+     */
+    void throwIfNoTransaction() {
         if (mTransactionStack == null) {
             throw new IllegalStateException("Cannot perform this operation because "
                     + "there is no current transaction.");
diff --git a/core/java/android/database/sqlite/SQLiteStatement.java b/core/java/android/database/sqlite/SQLiteStatement.java
index d33eadc..acdc0fa 100644
--- a/core/java/android/database/sqlite/SQLiteStatement.java
+++ b/core/java/android/database/sqlite/SQLiteStatement.java
@@ -27,6 +27,7 @@
  * <p>
  * This class is not thread-safe.
  * </p>
+ * Note that this class is unrelated to {@link SQLiteRawStatement}.
  */
 public final class SQLiteStatement extends SQLiteProgram {
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
diff --git a/core/java/android/database/sqlite/TEST_MAPPING b/core/java/android/database/sqlite/TEST_MAPPING
new file mode 100644
index 0000000..9dcf4e5
--- /dev/null
+++ b/core/java/android/database/sqlite/TEST_MAPPING
@@ -0,0 +1,24 @@
+{
+    "presubmit": [
+        {
+            "name": "FrameworksCoreTests",
+            "options": [
+                {
+                    "exclude-annotation": "androidx.test.filters.FlakyTest"
+                },
+                {
+                    "exclude-annotation": "org.junit.Ignore"
+                },
+                {
+                    "include-filter": "android.database.sqlite.SQLiteRawStatementTest"
+                }
+            ],
+            "file_patterns": [
+                "(/|^)SQLiteRawStatement.java",
+                "(/|^)SQLiteDatabase.java",
+                "(/|^)SQLiteSession.java",
+                "(/|^)SQLiteConnection.java"
+            ]
+        }
+    ]
+}
diff --git a/core/java/android/database/sqlite/package.html b/core/java/android/database/sqlite/package.html
index 71b8f3f..2c36646 100644
--- a/core/java/android/database/sqlite/package.html
+++ b/core/java/android/database/sqlite/package.html
@@ -20,6 +20,7 @@
 <p>The version of SQLite depends on the version of Android. See the following table:
 <table style="width:auto;">
   <tr><th>Android API</th><th>SQLite Version</th></tr>
+  <tr><td>LATEST</td><td>3.42.0</td></tr>
   <tr><td>API 34</td><td>3.39</td></tr>
   <tr><td>API 33</td><td>3.32</td></tr>
   <tr><td>API 32</td><td>3.32</td></tr>
diff --git a/core/java/android/ddm/DdmHandleHello.java b/core/java/android/ddm/DdmHandleHello.java
index 4160029..a51a740 100644
--- a/core/java/android/ddm/DdmHandleHello.java
+++ b/core/java/android/ddm/DdmHandleHello.java
@@ -16,6 +16,7 @@
 
 package android.ddm;
 
+import android.os.DdmSyncState;
 import android.os.Debug;
 import android.os.UserHandle;
 import android.util.Log;
@@ -44,6 +45,7 @@
     private static final String[] FRAMEWORK_FEATURES = new String[] {
         "opengl-tracing",
         "view-hierarchy",
+        "support_boot_stages"
     };
 
     /* singleton, do not instantiate */
@@ -145,7 +147,9 @@
                             + instructionSetDescription.length() * 2
                             + vmFlags.length() * 2
                             + 1
-                            + pkgName.length() * 2);
+                            + pkgName.length() * 2
+                            // STAG id (int)
+                            + Integer.BYTES);
         out.order(ChunkHandler.CHUNK_ORDER);
         out.putInt(CLIENT_PROTOCOL_VERSION);
         out.putInt(android.os.Process.myPid());
@@ -162,6 +166,10 @@
         out.putInt(pkgName.length());
         putString(out, pkgName);
 
+        // Added API 34 (and advertised via FEAT ddm packet)
+        // Send the current boot stage in ActivityThread
+        out.putInt(DdmSyncState.getStage().toInt());
+
         Chunk reply = new Chunk(CHUNK_HELO, out);
 
         /*
diff --git a/core/java/android/hardware/HardwareBuffer.java b/core/java/android/hardware/HardwareBuffer.java
index ddbfb9e..5ff0e7a 100644
--- a/core/java/android/hardware/HardwareBuffer.java
+++ b/core/java/android/hardware/HardwareBuffer.java
@@ -22,6 +22,7 @@
 import android.annotation.NonNull;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.graphics.GraphicBuffer;
+import android.os.BadParcelableException;
 import android.os.Build;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -40,7 +41,7 @@
  * HardwareBuffer wraps a native <code>AHardwareBuffer</code> object, which is a low-level object
  * representing a memory buffer accessible by various hardware units. HardwareBuffer allows sharing
  * buffers across different application processes. In particular, HardwareBuffers may be mappable
- * to memory accessibly to various hardware systems, such as the GPU, a sensor or context hub, or
+ * to memory accessible to various hardware systems, such as the GPU, a sensor or context hub, or
  * other auxiliary processing units.
  *
  * For more information, see the NDK documentation for <code>AHardwareBuffer</code>.
@@ -399,11 +400,14 @@
     public static final @android.annotation.NonNull Parcelable.Creator<HardwareBuffer> CREATOR =
             new Parcelable.Creator<HardwareBuffer>() {
         public HardwareBuffer createFromParcel(Parcel in) {
+            if (in == null) {
+                throw new NullPointerException("null passed to createFromParcel");
+            }
             long nativeObject = nReadHardwareBufferFromParcel(in);
             if (nativeObject != 0) {
                 return new HardwareBuffer(nativeObject);
             }
-            return null;
+            throw new BadParcelableException("Failed to read hardware buffer");
         }
 
         public HardwareBuffer[] newArray(int size) {
diff --git a/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java b/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
index 5b24fb6..257ad71 100644
--- a/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
+++ b/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
@@ -218,8 +218,7 @@
             FINGERPRINT_ACQUIRED_UNKNOWN,
             FINGERPRINT_ACQUIRED_IMMOBILE,
             FINGERPRINT_ACQUIRED_TOO_BRIGHT,
-            FINGERPRINT_ACQUIRED_POWER_PRESSED,
-            FINGERPRINT_ACQUIRED_RE_ENROLL})
+            FINGERPRINT_ACQUIRED_POWER_PRESSED})
     @Retention(RetentionPolicy.SOURCE)
     @interface FingerprintAcquired {}
 
@@ -311,12 +310,6 @@
     int FINGERPRINT_ACQUIRED_POWER_PRESSED = 11;
 
     /**
-     * This message is sent to encourage the user to re-enroll their fingerprints.
-     * @hide
-     */
-    int FINGERPRINT_ACQUIRED_RE_ENROLL = 12;
-
-    /**
      * @hide
      */
     int FINGERPRINT_ACQUIRED_VENDOR_BASE = 1000;
diff --git a/core/java/android/hardware/devicestate/IDeviceStateManager.aidl b/core/java/android/hardware/devicestate/IDeviceStateManager.aidl
index 3e72d81..ea4fe26 100644
--- a/core/java/android/hardware/devicestate/IDeviceStateManager.aidl
+++ b/core/java/android/hardware/devicestate/IDeviceStateManager.aidl
@@ -118,6 +118,7 @@
     *
     * This should only be called from the overlay itself.
     */
+    @EnforcePermission("CONTROL_DEVICE_STATE")
     @JavaPassthrough(annotation=
         "@android.annotation.RequiresPermission(android.Manifest.permission.CONTROL_DEVICE_STATE)")
     void onStateRequestOverlayDismissed(boolean shouldCancelRequest);
diff --git a/core/java/android/hardware/display/IColorDisplayManager.aidl b/core/java/android/hardware/display/IColorDisplayManager.aidl
index 200cf736..77dfb47 100644
--- a/core/java/android/hardware/display/IColorDisplayManager.aidl
+++ b/core/java/android/hardware/display/IColorDisplayManager.aidl
@@ -32,26 +32,36 @@
     int getTransformCapabilities();
 
     boolean isNightDisplayActivated();
+    @EnforcePermission("CONTROL_DISPLAY_COLOR_TRANSFORMS")
     boolean setNightDisplayActivated(boolean activated);
     int getNightDisplayColorTemperature();
+    @EnforcePermission("CONTROL_DISPLAY_COLOR_TRANSFORMS")
     boolean setNightDisplayColorTemperature(int temperature);
+    @EnforcePermission("CONTROL_DISPLAY_COLOR_TRANSFORMS")
     int getNightDisplayAutoMode();
     int getNightDisplayAutoModeRaw();
+    @EnforcePermission("CONTROL_DISPLAY_COLOR_TRANSFORMS")
     boolean setNightDisplayAutoMode(int autoMode);
     Time getNightDisplayCustomStartTime();
+    @EnforcePermission("CONTROL_DISPLAY_COLOR_TRANSFORMS")
     boolean setNightDisplayCustomStartTime(in Time time);
     Time getNightDisplayCustomEndTime();
+    @EnforcePermission("CONTROL_DISPLAY_COLOR_TRANSFORMS")
     boolean setNightDisplayCustomEndTime(in Time time);
 
     int getColorMode();
+    @EnforcePermission("CONTROL_DISPLAY_COLOR_TRANSFORMS")
     void setColorMode(int colorMode);
 
     boolean isDisplayWhiteBalanceEnabled();
+    @EnforcePermission("CONTROL_DISPLAY_COLOR_TRANSFORMS")
     boolean setDisplayWhiteBalanceEnabled(boolean enabled);
 
     boolean isReduceBrightColorsActivated();
+    @EnforcePermission("CONTROL_DISPLAY_COLOR_TRANSFORMS")
     boolean setReduceBrightColorsActivated(boolean activated);
     int getReduceBrightColorsStrength();
+    @EnforcePermission("CONTROL_DISPLAY_COLOR_TRANSFORMS")
     boolean setReduceBrightColorsStrength(int strength);
     float getReduceBrightColorsOffsetFactor();
 }
\ No newline at end of file
diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl
index a3b7b51..18edbdb 100644
--- a/core/java/android/hardware/display/IDisplayManager.aidl
+++ b/core/java/android/hardware/display/IDisplayManager.aidl
@@ -47,9 +47,11 @@
 
     // Requires CONFIGURE_WIFI_DISPLAY permission.
     // The process must have previously registered a callback.
+    @EnforcePermission("CONFIGURE_WIFI_DISPLAY")
     void startWifiDisplayScan();
 
     // Requires CONFIGURE_WIFI_DISPLAY permission.
+    @EnforcePermission("CONFIGURE_WIFI_DISPLAY")
     void stopWifiDisplayScan();
 
     // Requires CONFIGURE_WIFI_DISPLAY permission.
@@ -65,18 +67,22 @@
     void forgetWifiDisplay(String address);
 
     // Requires CONFIGURE_WIFI_DISPLAY permission.
+    @EnforcePermission("CONFIGURE_WIFI_DISPLAY")
     void pauseWifiDisplay();
 
     // Requires CONFIGURE_WIFI_DISPLAY permission.
+    @EnforcePermission("CONFIGURE_WIFI_DISPLAY")
     void resumeWifiDisplay();
 
     // No permissions required.
     WifiDisplayStatus getWifiDisplayStatus();
 
     // Requires WRITE_SECURE_SETTINGS permission.
+    @EnforcePermission("WRITE_SECURE_SETTINGS")
     void setUserDisabledHdrTypes(in int[] userDisabledTypes);
 
     // Requires WRITE_SECURE_SETTINGS permission.
+    @EnforcePermission("WRITE_SECURE_SETTINGS")
     void setAreUserDisabledHdrTypesAllowed(boolean areUserDisabledHdrTypesAllowed);
 
     // No permissions required.
@@ -89,6 +95,7 @@
     void overrideHdrTypes(int displayId, in int[] modes);
 
     // Requires CONFIGURE_DISPLAY_COLOR_MODE
+    @EnforcePermission("CONFIGURE_DISPLAY_COLOR_MODE")
     void requestColorMode(int displayId, int colorMode);
 
     // Requires CAPTURE_VIDEO_OUTPUT, CAPTURE_SECURE_VIDEO_OUTPUT, or an appropriate
@@ -114,24 +121,29 @@
     Point getStableDisplaySize();
 
     // Requires BRIGHTNESS_SLIDER_USAGE permission.
+    @EnforcePermission("BRIGHTNESS_SLIDER_USAGE")
     ParceledListSlice getBrightnessEvents(String callingPackage);
 
     // Requires ACCESS_AMBIENT_LIGHT_STATS permission.
+    @EnforcePermission("ACCESS_AMBIENT_LIGHT_STATS")
     ParceledListSlice getAmbientBrightnessStats();
 
     // Sets the global brightness configuration for a given user. Requires
     // CONFIGURE_DISPLAY_BRIGHTNESS, and INTERACT_ACROSS_USER if the user being configured is not
     // the same as the calling user.
+    @EnforcePermission("CONFIGURE_DISPLAY_BRIGHTNESS")
     void setBrightnessConfigurationForUser(in BrightnessConfiguration c, int userId,
             String packageName);
 
     // Sets the global brightness configuration for a given display. Requires
     // CONFIGURE_DISPLAY_BRIGHTNESS.
+    @EnforcePermission("CONFIGURE_DISPLAY_BRIGHTNESS")
     void setBrightnessConfigurationForDisplay(in BrightnessConfiguration c, String uniqueDisplayId,
             int userId, String packageName);
 
     // Gets the brightness configuration for a given display. Requires
     // CONFIGURE_DISPLAY_BRIGHTNESS.
+    @EnforcePermission("CONFIGURE_DISPLAY_BRIGHTNESS")
     BrightnessConfiguration getBrightnessConfigurationForDisplay(String uniqueDisplayId,
             int userId);
 
@@ -141,27 +153,32 @@
     BrightnessConfiguration getBrightnessConfigurationForUser(int userId);
 
     // Gets the default brightness configuration if configured.
+    @EnforcePermission("CONFIGURE_DISPLAY_BRIGHTNESS")
     BrightnessConfiguration getDefaultBrightnessConfiguration();
 
     // Gets the last requested minimal post processing settings for display with displayId.
     boolean isMinimalPostProcessingRequested(int displayId);
 
     // Temporarily sets the display brightness.
+    @EnforcePermission("CONTROL_DISPLAY_BRIGHTNESS")
     void setTemporaryBrightness(int displayId, float brightness);
 
     // Saves the display brightness.
+    @EnforcePermission("CONTROL_DISPLAY_BRIGHTNESS")
     void setBrightness(int displayId, float brightness);
 
     // Retrieves the display brightness.
     float getBrightness(int displayId);
 
     // Temporarily sets the auto brightness adjustment factor.
+    @EnforcePermission("CONTROL_DISPLAY_BRIGHTNESS")
     void setTemporaryAutoBrightnessAdjustment(float adjustment);
 
     // Get the minimum brightness curve.
     Curve getMinimumBrightnessCurve();
 
     // Get Brightness Information for the specified display.
+    @EnforcePermission("CONTROL_DISPLAY_BRIGHTNESS")
     BrightnessInfo getBrightnessInfo(int displayId);
 
     // Gets the id of the preferred wide gamut color space for all displays.
@@ -171,6 +188,7 @@
 
     // Sets the user preferred display mode.
     // Requires MODIFY_USER_PREFERRED_DISPLAY_MODE permission.
+    @EnforcePermission("MODIFY_USER_PREFERRED_DISPLAY_MODE")
     void setUserPreferredDisplayMode(int displayId, in Mode mode);
     Mode getUserPreferredDisplayMode(int displayId);
     Mode getSystemPreferredDisplayMode(int displayId);
@@ -187,10 +205,13 @@
     // When enabled the app requested display resolution and refresh rate is always selected
     // in DisplayModeDirector regardless of user settings and policies for low brightness, low
     // battery etc.
+    @EnforcePermission("OVERRIDE_DISPLAY_MODE_REQUESTS")
     void setShouldAlwaysRespectAppRequestedMode(boolean enabled);
+    @EnforcePermission("OVERRIDE_DISPLAY_MODE_REQUESTS")
     boolean shouldAlwaysRespectAppRequestedMode();
 
     // Sets the refresh rate switching type.
+    @EnforcePermission("MODIFY_REFRESH_RATE_SWITCHING_TYPE")
     void setRefreshRateSwitchingType(int newValue);
 
     // Returns the refresh rate switching type.
diff --git a/core/java/android/hardware/display/VirtualDisplayConfig.java b/core/java/android/hardware/display/VirtualDisplayConfig.java
index a62d74e..22e3938 100644
--- a/core/java/android/hardware/display/VirtualDisplayConfig.java
+++ b/core/java/android/hardware/display/VirtualDisplayConfig.java
@@ -39,7 +39,8 @@
  * Holds configuration used to create {@link VirtualDisplay} instances.
  *
  * @see DisplayManager#createVirtualDisplay(VirtualDisplayConfig, Handler, VirtualDisplay.Callback)
- * @see MediaProjection#createVirtualDisplay
+ * @see MediaProjection#createVirtualDisplay(String, int, int, int, int, Surface,
+ * VirtualDisplay.Callback, Handler)
  */
 public final class VirtualDisplayConfig implements Parcelable {
 
diff --git a/core/java/android/hardware/input/InputManagerGlobal.java b/core/java/android/hardware/input/InputManagerGlobal.java
index c0877d3..e886f68 100644
--- a/core/java/android/hardware/input/InputManagerGlobal.java
+++ b/core/java/android/hardware/input/InputManagerGlobal.java
@@ -54,6 +54,7 @@
 import android.view.PointerIcon;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.os.SomeArgs;
 
 import java.util.ArrayList;
@@ -140,23 +141,27 @@
     }
 
     /**
-     * Gets an instance of the input manager.
-     *
-     * @return The input manager instance.
+     * A test session tracker for InputManagerGlobal.
+     * @see #createTestSession(IInputManager)
      */
-    public static InputManagerGlobal resetInstance(IInputManager inputManagerService) {
-        synchronized (InputManager.class) {
-            sInstance = new InputManagerGlobal(inputManagerService);
-            return sInstance;
-        }
+    @VisibleForTesting
+    public interface TestSession extends AutoCloseable {
+        @Override
+        void close();
     }
 
     /**
-     * Clear the instance of the input manager.
+     * Create and set a test instance of InputManagerGlobal.
+     *
+     * @return The test session. The session must be {@link TestSession#close()}-ed at the end
+     * of the test.
      */
-    public static void clearInstance() {
+    @VisibleForTesting
+    public static TestSession createTestSession(IInputManager inputManagerService) {
         synchronized (InputManagerGlobal.class) {
-            sInstance = null;
+            final var oldInstance = sInstance;
+            sInstance = new InputManagerGlobal(inputManagerService);
+            return () -> sInstance = oldInstance;
         }
     }
 
diff --git a/core/java/android/hardware/input/VirtualTouchEvent.java b/core/java/android/hardware/input/VirtualTouchEvent.java
index 73da5d9..2695a79 100644
--- a/core/java/android/hardware/input/VirtualTouchEvent.java
+++ b/core/java/android/hardware/input/VirtualTouchEvent.java
@@ -272,7 +272,8 @@
         public @NonNull Builder setAction(@Action int action) {
             if (action != ACTION_DOWN && action != ACTION_UP && action != ACTION_MOVE
                     && action != ACTION_CANCEL) {
-                throw new IllegalArgumentException("Unsupported touch event action type");
+                throw new IllegalArgumentException(
+                        "Unsupported touch event action type: " + action);
             }
             mAction = action;
             return this;
diff --git a/core/java/android/hardware/lights/ILightsManager.aidl b/core/java/android/hardware/lights/ILightsManager.aidl
index 077797f..3b257ca 100644
--- a/core/java/android/hardware/lights/ILightsManager.aidl
+++ b/core/java/android/hardware/lights/ILightsManager.aidl
@@ -25,9 +25,14 @@
  * {@hide}
  */
 interface ILightsManager {
+  @EnforcePermission("CONTROL_DEVICE_LIGHTS")
   List<Light> getLights();
+  @EnforcePermission("CONTROL_DEVICE_LIGHTS")
   LightState getLightState(int lightId);
+  @EnforcePermission("CONTROL_DEVICE_LIGHTS")
   void openSession(in IBinder sessionToken, in int priority);
+  @EnforcePermission("CONTROL_DEVICE_LIGHTS")
   void closeSession(in IBinder sessionToken);
+  @EnforcePermission("CONTROL_DEVICE_LIGHTS")
   void setLightStates(in IBinder sessionToken, in int[] lightIds, in LightState[] states);
 }
diff --git a/core/java/android/hardware/usb/IUsbManager.aidl b/core/java/android/hardware/usb/IUsbManager.aidl
index 21b00e3..09f5f36 100644
--- a/core/java/android/hardware/usb/IUsbManager.aidl
+++ b/core/java/android/hardware/usb/IUsbManager.aidl
@@ -81,6 +81,7 @@
     boolean hasDevicePermission(in UsbDevice device, String packageName);
 
     /* Returns true if the given package/pid/uid has permission to access the device. */
+    @EnforcePermission("MANAGE_USB")
     @JavaPassthrough(annotation=
             "@android.annotation.RequiresPermission(android.Manifest.permission.MANAGE_USB)")
     boolean hasDevicePermissionWithIdentity(in UsbDevice device, String packageName,
@@ -90,6 +91,7 @@
     boolean hasAccessoryPermission(in UsbAccessory accessory);
 
     /* Returns true if the given pid/uid has permission to access the accessory. */
+    @EnforcePermission("MANAGE_USB")
     @JavaPassthrough(annotation=
             "@android.annotation.RequiresPermission(android.Manifest.permission.MANAGE_USB)")
     boolean hasAccessoryPermissionWithIdentity(in UsbAccessory accessory, int pid, int uid);
@@ -108,9 +110,11 @@
             in PendingIntent pi);
 
     /* Grants permission for the given UID to access the device */
+    @EnforcePermission("MANAGE_USB")
     void grantDevicePermission(in UsbDevice device, int uid);
 
     /* Grants permission for the given UID to access the accessory */
+    @EnforcePermission("MANAGE_USB")
     void grantAccessoryPermission(in UsbAccessory accessory, int uid);
 
     /* Returns true if the USB manager has default preferences or permissions for the package */
@@ -123,29 +127,36 @@
     boolean isFunctionEnabled(String function);
 
     /* Sets the current USB function. */
+    @EnforcePermission("MANAGE_USB")
     void setCurrentFunctions(long functions, int operationId);
 
     /* Compatibility version of setCurrentFunctions(long). */
     void setCurrentFunction(String function, boolean usbDataUnlocked, int operationId);
 
     /* Gets the current USB functions. */
+    @EnforcePermission("MANAGE_USB")
     long getCurrentFunctions();
 
     /* Gets the current USB Speed. */
+    @EnforcePermission("MANAGE_USB")
     int getCurrentUsbSpeed();
 
     /* Gets the Gadget Hal Version. */
+    @EnforcePermission("MANAGE_USB")
     int getGadgetHalVersion();
 
     /* Sets the screen unlocked USB function(s), which will be set automatically
      * when the screen is unlocked.
      */
+    @EnforcePermission("MANAGE_USB")
     void setScreenUnlockedFunctions(long functions);
 
     /* Gets the current screen unlocked functions. */
+    @EnforcePermission("MANAGE_USB")
     long getScreenUnlockedFunctions();
 
     /* Resets the USB gadget. */
+    @EnforcePermission("MANAGE_USB")
     void resetUsbGadget();
 
     /* Resets the USB port. */
@@ -158,15 +169,18 @@
     void enableUsbDataWhileDocked(in String portId, int operationId, in IUsbOperationInternal callback);
 
     /* Gets the USB Hal Version. */
+    @EnforcePermission("MANAGE_USB")
     int getUsbHalVersion();
 
     /* Get the functionfs control handle for the given function. Usb
      * descriptors will already be written, and the handle will be
      * ready to use.
      */
+    @EnforcePermission("ACCESS_MTP")
     ParcelFileDescriptor getControlFd(long function);
 
     /* Gets the list of USB ports. */
+    @EnforcePermission("MANAGE_USB")
     List<ParcelableUsbPort> getPorts();
 
     /* Gets the status of the specified USB port. */
@@ -184,6 +198,7 @@
     void enableContaminantDetection(in String portId, boolean enable);
 
     /* Sets USB device connection handler. */
+    @EnforcePermission("MANAGE_USB")
     void setUsbDeviceConnectionHandler(in ComponentName usbDeviceConnectionHandler);
 
     /* Registers callback for Usb events */
diff --git a/core/java/android/inputmethodservice/navigationbar/KeyButtonView.java b/core/java/android/inputmethodservice/navigationbar/KeyButtonView.java
index 92d358f..f423672 100644
--- a/core/java/android/inputmethodservice/navigationbar/KeyButtonView.java
+++ b/core/java/android/inputmethodservice/navigationbar/KeyButtonView.java
@@ -44,8 +44,6 @@
 import android.view.inputmethod.InputConnection;
 import android.widget.ImageView;
 
-import com.android.internal.annotations.VisibleForTesting;
-
 /**
  * @hide
  */
@@ -60,32 +58,12 @@
     private int mTouchDownY;
     private AudioManager mAudioManager;
     private boolean mGestureAborted;
-    @VisibleForTesting boolean mLongClicked;
     private OnClickListener mOnClickListener;
     private final KeyButtonRipple mRipple;
     private final Paint mOvalBgPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
     private float mDarkIntensity;
     private boolean mHasOvalBg = false;
 
-    private final Runnable mCheckLongPress = new Runnable() {
-        public void run() {
-            if (isPressed()) {
-                // Log.d("KeyButtonView", "longpressed: " + this);
-                if (isLongClickable()) {
-                    // Just an old-fashioned ImageView
-                    performLongClick();
-                    mLongClicked = true;
-                } else {
-                    if (mCode != KEYCODE_UNKNOWN) {
-                        sendEvent(KeyEvent.ACTION_DOWN, KeyEvent.FLAG_LONG_PRESS);
-                        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_LONG_CLICKED);
-                    }
-                    mLongClicked = true;
-                }
-            }
-        }
-    };
-
     public KeyButtonView(Context context, AttributeSet attrs) {
         super(context, attrs);
 
@@ -181,7 +159,6 @@
         switch (action) {
             case MotionEvent.ACTION_DOWN:
                 mDownTime = SystemClock.uptimeMillis();
-                mLongClicked = false;
                 setPressed(true);
 
                 // Use raw X and Y to detect gestures in case a parent changes the x and y values
@@ -196,8 +173,6 @@
                 if (!showSwipeUI) {
                     playSoundEffect(SoundEffectConstants.CLICK);
                 }
-                removeCallbacks(mCheckLongPress);
-                postDelayed(mCheckLongPress, ViewConfiguration.getLongPressTimeout());
                 break;
             case MotionEvent.ACTION_MOVE:
                 x = (int) ev.getRawX();
@@ -208,7 +183,6 @@
                     // When quick step is enabled, prevent animating the ripple triggered by
                     // setPressed and decide to run it on touch up
                     setPressed(false);
-                    removeCallbacks(mCheckLongPress);
                 }
                 break;
             case MotionEvent.ACTION_CANCEL:
@@ -216,10 +190,9 @@
                 if (mCode != KEYCODE_UNKNOWN) {
                     sendEvent(KeyEvent.ACTION_UP, KeyEvent.FLAG_CANCELED);
                 }
-                removeCallbacks(mCheckLongPress);
                 break;
             case MotionEvent.ACTION_UP:
-                final boolean doIt = isPressed() && !mLongClicked;
+                final boolean doIt = isPressed();
                 setPressed(false);
                 final boolean doHapticFeedback = (SystemClock.uptimeMillis() - mDownTime) > 150;
                 if (showSwipeUI) {
@@ -228,7 +201,7 @@
                         performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
                         playSoundEffect(SoundEffectConstants.CLICK);
                     }
-                } else if (doHapticFeedback && !mLongClicked) {
+                } else if (doHapticFeedback) {
                     // Always send a release ourselves because it doesn't seem to be sent elsewhere
                     // and it feels weird to sometimes get a release haptic and other times not.
                     performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE);
@@ -248,7 +221,6 @@
                         sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
                     }
                 }
-                removeCallbacks(mCheckLongPress);
                 break;
         }
 
@@ -283,12 +255,6 @@
     }
 
     private void sendEvent(int action, int flags, long when) {
-        if (mCode == KeyEvent.KEYCODE_BACK && flags != KeyEvent.FLAG_LONG_PRESS) {
-            if (action == MotionEvent.ACTION_UP) {
-                // TODO(b/215443343): Implement notifyBackAction();
-            }
-        }
-
         // TODO(b/215443343): Consolidate this logic to somewhere else.
         if (mContext instanceof InputMethodService) {
             final int repeatCount = (flags & KeyEvent.FLAG_LONG_PRESS) != 0 ? 1 : 0;
diff --git a/core/java/android/net/INetworkPolicyManager.aidl b/core/java/android/net/INetworkPolicyManager.aidl
index dc24106..8f77571 100644
--- a/core/java/android/net/INetworkPolicyManager.aidl
+++ b/core/java/android/net/INetworkPolicyManager.aidl
@@ -30,29 +30,38 @@
 interface INetworkPolicyManager {
 
     /** Control UID policies. */
+    @EnforcePermission("MANAGE_NETWORK_POLICY")
     @UnsupportedAppUsage
     void setUidPolicy(int uid, int policy);
+    @EnforcePermission("MANAGE_NETWORK_POLICY")
     void addUidPolicy(int uid, int policy);
+    @EnforcePermission("MANAGE_NETWORK_POLICY")
     void removeUidPolicy(int uid, int policy);
+    @EnforcePermission("MANAGE_NETWORK_POLICY")
     @UnsupportedAppUsage
     int getUidPolicy(int uid);
+    @EnforcePermission("MANAGE_NETWORK_POLICY")
     int[] getUidsWithPolicy(int policy);
 
     void registerListener(INetworkPolicyListener listener);
     void unregisterListener(INetworkPolicyListener listener);
 
     /** Control network policies atomically. */
+    @EnforcePermission("MANAGE_NETWORK_POLICY")
     @UnsupportedAppUsage
     void setNetworkPolicies(in NetworkPolicy[] policies);
+    @EnforcePermission("MANAGE_NETWORK_POLICY")
     NetworkPolicy[] getNetworkPolicies(String callingPackage);
 
     /** Snooze limit on policy matching given template. */
+    @EnforcePermission("MANAGE_NETWORK_POLICY")
     @UnsupportedAppUsage
     void snoozeLimit(in NetworkTemplate template);
 
     /** Control if background data is restricted system-wide. */
     @UnsupportedAppUsage
     void setRestrictBackground(boolean restrictBackground);
+    @EnforcePermission("MANAGE_NETWORK_POLICY")
     @UnsupportedAppUsage
     boolean getRestrictBackground();
 
@@ -61,10 +70,13 @@
         2 - whitelisted
         3 - enabled
     */
+    @EnforcePermission("ACCESS_NETWORK_STATE")
     int getRestrictBackgroundByCaller();
     int getRestrictBackgroundStatus(int uid);
 
+    @EnforcePermission("MANAGE_NETWORK_POLICY")
     void setDeviceIdleMode(boolean enabled);
+    @EnforcePermission("MANAGE_NETWORK_POLICY")
     void setWifiMeteredOverride(String networkId, int meteredOverride);
 
     int getMultipathPreference(in Network network);
@@ -76,8 +88,10 @@
     String getSubscriptionPlansOwner(int subId);
     void setSubscriptionOverride(int subId, int overrideMask, int overrideValue, in int[] networkTypes, long expirationDurationMillis, String callingPackage);
 
+    @EnforcePermission("NETWORK_SETTINGS")
     void factoryReset(String subscriber);
 
     boolean isUidNetworkingBlocked(int uid, boolean meteredNetwork);
+    @EnforcePermission("OBSERVE_NETWORK_POLICY")
     boolean isUidRestrictedOnMeteredNetworks(int uid);
 }
diff --git a/core/java/android/net/Uri.java b/core/java/android/net/Uri.java
index 7fbaf10..70de477 100644
--- a/core/java/android/net/Uri.java
+++ b/core/java/android/net/Uri.java
@@ -1788,8 +1788,8 @@
      * or external sources like Bluetooth, NFC, or the Internet) should
      * be normalized before they are used to create an Intent.
      *
-     * <p class="note">This method does <em>not</em> validate bad URI's,
-     * or 'fix' poorly formatted URI's - so do not use it for input validation.
+     * <p class="note">This method does <em>not</em> validate bad URIs,
+     * or 'fix' poorly formatted URIs - so do not use it for input validation.
      * A Uri will always be returned, even if the Uri is badly formatted to
      * begin with and a scheme component cannot be found.
      *
@@ -1992,21 +1992,14 @@
      */
     static abstract class AbstractPart {
 
-        // Possible values of mCanonicalRepresentation.
-        static final int REPRESENTATION_ENCODED = 1;
-        static final int REPRESENTATION_DECODED = 2;
-
         volatile String encoded;
         volatile String decoded;
-        private final int mCanonicalRepresentation;
 
         AbstractPart(String encoded, String decoded) {
             if (encoded != NotCachedHolder.NOT_CACHED) {
-                this.mCanonicalRepresentation = REPRESENTATION_ENCODED;
                 this.encoded = encoded;
                 this.decoded = NotCachedHolder.NOT_CACHED;
             } else if (decoded != NotCachedHolder.NOT_CACHED) {
-                this.mCanonicalRepresentation = REPRESENTATION_DECODED;
                 this.encoded = NotCachedHolder.NOT_CACHED;
                 this.decoded = decoded;
             } else {
@@ -2021,24 +2014,6 @@
             boolean hasDecoded = decoded != NotCachedHolder.NOT_CACHED;
             return hasDecoded ? decoded : (decoded = decode(encoded));
         }
-
-        final void writeTo(Parcel parcel) {
-            final String canonicalValue;
-            if (mCanonicalRepresentation == REPRESENTATION_ENCODED) {
-                canonicalValue = encoded;
-            } else if (mCanonicalRepresentation == REPRESENTATION_DECODED) {
-                canonicalValue = decoded;
-            } else {
-                throw new IllegalArgumentException("Unknown representation: "
-                    + mCanonicalRepresentation);
-            }
-            if (canonicalValue == NotCachedHolder.NOT_CACHED) {
-                throw new AssertionError("Canonical value not cached ("
-                    + mCanonicalRepresentation + ")");
-            }
-            parcel.writeInt(mCanonicalRepresentation);
-            parcel.writeString8(canonicalValue);
-        }
     }
 
     /**
@@ -2067,20 +2042,6 @@
             return hasEncoded ? encoded : (encoded = encode(decoded));
         }
 
-        static Part readFrom(Parcel parcel) {
-            int representation = parcel.readInt();
-            String value = parcel.readString8();
-            switch (representation) {
-                case REPRESENTATION_ENCODED:
-                    return fromEncoded(value);
-                case REPRESENTATION_DECODED:
-                    return fromDecoded(value);
-                default:
-                    throw new IllegalArgumentException("Unknown representation: "
-                            + representation);
-            }
-        }
-
         /**
          * Returns given part or {@link #NULL} if the given part is null.
          */
@@ -2256,23 +2217,6 @@
             return appendEncodedSegment(oldPart, encoded);
         }
 
-        static PathPart readFrom(Parcel parcel) {
-            int representation = parcel.readInt();
-            switch (representation) {
-                case REPRESENTATION_ENCODED:
-                    return fromEncoded(parcel.readString8());
-                case REPRESENTATION_DECODED:
-                    return fromDecoded(parcel.readString8());
-                default:
-                    throw new IllegalArgumentException("Unknown representation: " + representation);
-            }
-        }
-
-        static PathPart readFrom(boolean hasSchemeOrAuthority, Parcel parcel) {
-            final PathPart path = readFrom(parcel);
-            return hasSchemeOrAuthority ? makeAbsolute(path) : path;
-        }
-
         /**
          * Creates a path from the encoded string.
          *
diff --git a/core/java/android/nfc/NfcAntennaInfo.java b/core/java/android/nfc/NfcAntennaInfo.java
index b002ca2..d54fcd2 100644
--- a/core/java/android/nfc/NfcAntennaInfo.java
+++ b/core/java/android/nfc/NfcAntennaInfo.java
@@ -85,8 +85,8 @@
         this.mDeviceHeight = in.readInt();
         this.mDeviceFoldable = in.readByte() != 0;
         this.mAvailableNfcAntennas = new ArrayList<>();
-        in.readTypedList(this.mAvailableNfcAntennas,
-                AvailableNfcAntenna.CREATOR);
+        in.readParcelableList(this.mAvailableNfcAntennas,
+                AvailableNfcAntenna.class.getClassLoader());
     }
 
     public static final @NonNull Parcelable.Creator<NfcAntennaInfo> CREATOR =
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index 2bad670..43219bc 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -54,6 +54,7 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.os.BatteryStatsHistoryIterator;
+import com.android.internal.os.CpuScalingPolicies;
 
 import com.google.android.collect.Lists;
 
@@ -1008,9 +1009,11 @@
          * @param cluster the index of the CPU cluster.
          * @param step the index of the CPU speed. This is not the actual speed of the CPU.
          * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
-         * @see com.android.internal.os.PowerProfile#getNumCpuClusters()
-         * @see com.android.internal.os.PowerProfile#getNumSpeedStepsInCpuCluster(int)
+         * @see com.android.internal.os.CpuScalingPolicies#getPolicies
+         * @see com.android.internal.os.CpuScalingPolicies#getFrequencies
+         * @deprecated Unused except in tests
          */
+        @Deprecated
         public abstract long getTimeAtCpuSpeed(int cluster, int step, int which);
 
         /**
@@ -1648,11 +1651,9 @@
     public abstract long getNextMaxDailyDeadline();
 
     /**
-     * Returns the total number of frequencies across all CPU clusters.
+     * Returns the CPU scaling policies.
      */
-    public abstract int getCpuFreqCount();
-
-    public abstract long[] getCpuFreqs();
+    public abstract CpuScalingPolicies getCpuScalingPolicies();
 
     public final static class HistoryTag {
         public String string;
@@ -1966,7 +1967,10 @@
         // Values for NUM_GPS_SIGNAL_QUALITY_LEVELS
         public static final int STATE2_GPS_SIGNAL_QUALITY_SHIFT = 7;
         public static final int STATE2_GPS_SIGNAL_QUALITY_MASK =
-            0x1 << STATE2_GPS_SIGNAL_QUALITY_SHIFT;
+                0x3 << STATE2_GPS_SIGNAL_QUALITY_SHIFT;
+        // Values for NR_STATE_*
+        public static final int STATE2_NR_STATE_SHIFT = 9;
+        public static final int STATE2_NR_STATE_MASK = 0x3 << STATE2_NR_STATE_SHIFT;
 
         public static final int STATE2_POWER_SAVE_FLAG = 1<<31;
         public static final int STATE2_VIDEO_ON_FLAG = 1<<30;
@@ -2762,6 +2766,14 @@
      */
     public abstract Timer getPhoneDataConnectionTimer(int dataType);
 
+    /**
+     * Returns the time in microseconds that the phone's data connection was in NR NSA mode while
+     * on battery.
+     *
+     * {@hide}
+     */
+    public abstract long getNrNsaTime(long elapsedRealtimeUs);
+
     /** @hide */
     public static final int RADIO_ACCESS_TECHNOLOGY_OTHER = 0;
     /** @hide */
@@ -3028,7 +3040,11 @@
                 "cellular_high_tx_power", "Chtp"),
         new BitDescription(HistoryItem.STATE2_GPS_SIGNAL_QUALITY_MASK,
             HistoryItem.STATE2_GPS_SIGNAL_QUALITY_SHIFT, "gps_signal_quality", "Gss",
-            new String[] { "poor", "good"}, new String[] { "poor", "good"})
+            new String[] { "poor", "good", "none"}, new String[] { "poor", "good", "none"}),
+        new BitDescription(HistoryItem.STATE2_NR_STATE_MASK,
+            HistoryItem.STATE2_NR_STATE_SHIFT, "nr_state", "nrs",
+            new String[]{"none", "restricted", "not_restricted", "connected"},
+            new String[]{"0", "1", "2", "3"}),
     };
 
     public static final String[] HISTORY_EVENT_NAMES = new String[] {
@@ -3390,8 +3406,8 @@
      *     cluster1-speeed1, cluster1-speed2, ..., cluster2-speed1, cluster2-speed2, ...
      * </pre>
      *
-     * @see com.android.internal.os.PowerProfile#getNumCpuClusters()
-     * @see com.android.internal.os.PowerProfile#getNumSpeedStepsInCpuCluster(int)
+     * @see com.android.internal.os.CpuScalingPolicies#getPolicies
+     * @see com.android.internal.os.CpuScalingPolicies#getFrequencies
      */
     @Nullable
     public abstract long[] getSystemServiceTimeAtCpuSpeeds();
@@ -4677,12 +4693,14 @@
                             proportionalAttributionCalculator.getProportionalPowerMah(consumer)));
         }
 
-        final long[] cpuFreqs = getCpuFreqs();
-        if (cpuFreqs != null) {
+        final CpuScalingPolicies scalingPolicies = getCpuScalingPolicies();
+        if (scalingPolicies != null) {
             sb.setLength(0);
-            for (int i = 0; i < cpuFreqs.length; ++i) {
-                if (i != 0) sb.append(',');
-                sb.append(cpuFreqs[i]);
+            for (int policy : scalingPolicies.getPolicies()) {
+                for (int frequency : scalingPolicies.getFrequencies(policy)) {
+                    if (sb.length() != 0) sb.append(',');
+                    sb.append(frequency);
+                }
             }
             dumpLine(pw, 0 /* uid */, category, GLOBAL_CPU_FREQ_DATA, sb.toString());
         }
@@ -4994,11 +5012,12 @@
             }
 
             // If the cpuFreqs is null, then don't bother checking for cpu freq times.
-            if (cpuFreqs != null) {
+            if (scalingPolicies != null) {
                 final long[] cpuFreqTimeMs = u.getCpuFreqTimes(which);
                 // If total cpuFreqTimes is null, then we don't need to check for
                 // screenOffCpuFreqTimes.
-                if (cpuFreqTimeMs != null && cpuFreqTimeMs.length == cpuFreqs.length) {
+                if (cpuFreqTimeMs != null
+                        && cpuFreqTimeMs.length == scalingPolicies.getScalingStepCount()) {
                     sb.setLength(0);
                     for (int i = 0; i < cpuFreqTimeMs.length; ++i) {
                         if (i != 0) sb.append(',');
@@ -5018,7 +5037,8 @@
                             cpuFreqTimeMs.length, sb.toString());
                 }
 
-                final long[] timesInFreqMs = new long[getCpuFreqCount()];
+                final long[] timesInFreqMs =
+                        new long[getCpuScalingPolicies().getScalingStepCount()];
                 for (int procState = 0; procState < Uid.NUM_PROCESS_STATE; ++procState) {
                     if (u.getCpuFreqTimes(timesInFreqMs, procState)) {
                         sb.setLength(0);
@@ -5607,20 +5627,36 @@
         sb.append(prefix);
         sb.append("     Cellular Radio Access Technology:");
         didOne = false;
-        for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
-            final long time = getPhoneDataConnectionTime(i, rawRealtime, which);
+        for (int connType = 0; connType < NUM_DATA_CONNECTION_TYPES; connType++) {
+            final long time = getPhoneDataConnectionTime(connType, rawRealtime, which);
             if (time == 0) {
                 continue;
             }
             sb.append("\n       ");
             sb.append(prefix);
             didOne = true;
-            sb.append(i < DATA_CONNECTION_NAMES.length ? DATA_CONNECTION_NAMES[i] : "ERROR");
+            sb.append(connType < DATA_CONNECTION_NAMES.length ?
+                DATA_CONNECTION_NAMES[connType] : "ERROR");
             sb.append(" ");
             formatTimeMs(sb, time/1000);
             sb.append("(");
             sb.append(formatRatioLocked(time, whichBatteryRealtime));
             sb.append(") ");
+
+            if (connType == TelephonyManager.NETWORK_TYPE_LTE) {
+                // Report any of the LTE time was spent in NR NSA mode.
+                final long nrNsaTime = getNrNsaTime(rawRealtime);
+                if (nrNsaTime != 0) {
+                    sb.append("\n         ");
+                    sb.append(prefix);
+                    sb.append("nr_nsa");
+                    sb.append(" ");
+                    formatTimeMs(sb, nrNsaTime / 1000);
+                    sb.append("(");
+                    sb.append(formatRatioLocked(nrNsaTime, whichBatteryRealtime));
+                    sb.append(") ");
+                }
+            }
         }
         if (!didOne) sb.append(" (no activity)");
         pw.println(sb.toString());
@@ -6000,14 +6036,18 @@
             }
         }
 
-        final long[] cpuFreqs = getCpuFreqs();
-        if (cpuFreqs != null) {
+        final CpuScalingPolicies scalingPolicies = getCpuScalingPolicies();
+        if (scalingPolicies != null) {
             sb.setLength(0);
-            sb.append("  CPU freqs:");
-            for (int i = 0; i < cpuFreqs.length; ++i) {
-                sb.append(' ').append(cpuFreqs[i]);
+            sb.append("  CPU scaling: ");
+            for (int policy : scalingPolicies.getPolicies()) {
+                sb.append(" policy").append(policy).append(':');
+                for (int frequency : scalingPolicies.getFrequencies(policy)) {
+                    sb.append(' ').append(frequency);
+                }
             }
-            pw.println(sb.toString());
+
+            pw.println(sb);
             pw.println();
         }
 
@@ -6628,7 +6668,7 @@
                 pw.println(sb.toString());
             }
 
-            final long[] timesInFreqMs = new long[getCpuFreqCount()];
+            final long[] timesInFreqMs = new long[getCpuScalingPolicies().getScalingStepCount()];
             for (int procState = 0; procState < Uid.NUM_PROCESS_STATE; ++procState) {
                 if (u.getCpuFreqTimes(timesInFreqMs, procState)) {
                     sb.setLength(0);
@@ -8078,12 +8118,13 @@
             proto.write(UidProto.Cpu.USER_DURATION_MS, roundUsToMs(u.getUserCpuTimeUs(which)));
             proto.write(UidProto.Cpu.SYSTEM_DURATION_MS, roundUsToMs(u.getSystemCpuTimeUs(which)));
 
-            final long[] cpuFreqs = getCpuFreqs();
-            if (cpuFreqs != null) {
+            final CpuScalingPolicies scalingPolicies = getCpuScalingPolicies();
+            if (scalingPolicies != null) {
                 final long[] cpuFreqTimeMs = u.getCpuFreqTimes(which);
                 // If total cpuFreqTimes is null, then we don't need to check for
                 // screenOffCpuFreqTimes.
-                if (cpuFreqTimeMs != null && cpuFreqTimeMs.length == cpuFreqs.length) {
+                if (cpuFreqTimeMs != null
+                        && cpuFreqTimeMs.length == scalingPolicies.getScalingStepCount()) {
                     long[] screenOffCpuFreqTimeMs = u.getScreenOffCpuFreqTimes(which);
                     if (screenOffCpuFreqTimeMs == null) {
                         screenOffCpuFreqTimeMs = new long[cpuFreqTimeMs.length];
@@ -8100,8 +8141,9 @@
                 }
             }
 
-            final long[] timesInFreqMs = new long[getCpuFreqCount()];
-            final long[] timesInFreqScreenOffMs = new long[getCpuFreqCount()];
+            final int stepCount = getCpuScalingPolicies().getScalingStepCount();
+            final long[] timesInFreqMs = new long[stepCount];
+            final long[] timesInFreqScreenOffMs = new long[stepCount];
             for (int procState = 0; procState < Uid.NUM_PROCESS_STATE; ++procState) {
                 if (u.getCpuFreqTimes(timesInFreqMs, procState)) {
                     if (!u.getScreenOffCpuFreqTimes(timesInFreqScreenOffMs, procState)) {
@@ -8571,10 +8613,12 @@
         dumpDurationSteps(proto, SystemProto.DISCHARGE_STEP, getDischargeLevelStepTracker());
 
         // CPU frequencies (GLOBAL_CPU_FREQ_DATA)
-        final long[] cpuFreqs = getCpuFreqs();
-        if (cpuFreqs != null) {
-            for (long i : cpuFreqs) {
-                proto.write(SystemProto.CPU_FREQUENCY, i);
+        final CpuScalingPolicies scalingPolicies = getCpuScalingPolicies();
+        if (scalingPolicies != null) {
+            for (int policy : scalingPolicies.getPolicies()) {
+                for (int frequency : scalingPolicies.getFrequencies(policy)) {
+                    proto.write(SystemProto.CPU_FREQUENCY, frequency);
+                }
             }
         }
 
diff --git a/core/java/android/os/CombinedVibration.java b/core/java/android/os/CombinedVibration.java
index 5f2c113..f32a1f8 100644
--- a/core/java/android/os/CombinedVibration.java
+++ b/core/java/android/os/CombinedVibration.java
@@ -24,7 +24,9 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Objects;
+import java.util.StringJoiner;
 
 /**
  * A CombinedVibration describes a combination of haptic effects to be performed by one or more
@@ -127,10 +129,59 @@
     /** @hide */
     public abstract void validate();
 
+    /**
+     * Applies given effect transformation with a fixed parameter to each effect in this vibration.
+     *
+     * @param transformation The vibration effect transformation to be applied to all effects
+     * @param param          The fixed parameter to be applied in all effect transformations
+     * @return the result of running the given transformation on all effects of this vibration
+     * @hide
+     */
+    public abstract <ParamT> CombinedVibration transform(
+            VibrationEffect.Transformation<ParamT> transformation, ParamT param);
+
+    /**
+     * Applies given vibrator adapter to each effect in this combined vibration.
+     *
+     * @param adapter The vibrator adapter to be used on this vibration
+     * @return the result of running the given adapter on all effects of this vibration
+     * @hide
+     */
+    public abstract CombinedVibration adapt(VibratorAdapter adapter);
+
     /** @hide */
     public abstract boolean hasVibrator(int vibratorId);
 
     /**
+     * Returns a compact version of the {@link #toString()} result for debugging purposes.
+     *
+     * @hide
+     */
+    public abstract String toDebugString();
+
+    /**
+     * Adapts a {@link VibrationEffect} to a specific device vibrator using the ID.
+     *
+     * <p>This can be used for adapting effects to the capabilities of the specific device vibrator
+     * it's been mapped to by the combined vibration.
+     *
+     * @hide
+     */
+    public interface VibratorAdapter {
+
+        /**
+         * Return the list of vibrator IDs available on the device, to be used by {@link
+         * CombinedVibration} to fan-out individual effects that aren't assigned to a specific
+         * vibrator.
+         */
+        int[] getAvailableVibratorIds();
+
+        /** Adapts a {@link VibrationEffect} to a given vibrator. */
+        @NonNull
+        VibrationEffect adaptToVibrator(int vibratorId, @NonNull VibrationEffect effect);
+    }
+
+    /**
      * A combination of haptic effects that should be played in multiple vibrators in parallel.
      *
      * @see CombinedVibration#startParallel()
@@ -340,12 +391,44 @@
 
         /** @hide */
         @Override
+        public <ParamT> CombinedVibration transform(
+                VibrationEffect.Transformation<ParamT> transformation, ParamT param) {
+            VibrationEffect newEffect = transformation.transform(mEffect, param);
+            if (mEffect.equals(newEffect)) {
+                return this;
+            }
+            // Make sure the validate methods are triggered
+            return CombinedVibration.createParallel(newEffect);
+        }
+
+        /** @hide */
+        @Override
+        public CombinedVibration adapt(VibratorAdapter adapter) {
+            ParallelCombination combination = CombinedVibration.startParallel();
+            boolean hasSameEffects = true;
+            for (int vibratorId : adapter.getAvailableVibratorIds()) {
+                VibrationEffect newEffect = adapter.adaptToVibrator(vibratorId, mEffect);
+                combination.addVibrator(vibratorId, newEffect);
+                hasSameEffects &= mEffect.equals(newEffect);
+            }
+            if (hasSameEffects) {
+                return this;
+            }
+            // Make sure the validate methods are triggered
+            return combination.combine();
+        }
+
+        /** @hide */
+        @Override
         public boolean hasVibrator(int vibratorId) {
             return true;
         }
 
         @Override
         public boolean equals(Object o) {
+            if (this == o) {
+                return true;
+            }
             if (!(o instanceof Mono)) {
                 return false;
             }
@@ -363,6 +446,13 @@
             return "Mono{mEffect=" + mEffect + '}';
         }
 
+        /** @hide */
+        @Override
+        public String toDebugString() {
+            // Simplify vibration string, use the single effect to represent it.
+            return mEffect.toDebugString();
+        }
+
         @Override
         public int describeContents() {
             return 0;
@@ -472,12 +562,54 @@
 
         /** @hide */
         @Override
+        public <ParamT> CombinedVibration transform(
+                VibrationEffect.Transformation<ParamT> transformation, ParamT param) {
+            ParallelCombination combination = CombinedVibration.startParallel();
+            boolean hasSameEffects = true;
+            for (int i = 0; i < mEffects.size(); i++) {
+                int vibratorId = mEffects.keyAt(i);
+                VibrationEffect effect = mEffects.valueAt(i);
+                VibrationEffect newEffect = transformation.transform(effect, param);
+                combination.addVibrator(vibratorId, newEffect);
+                hasSameEffects &= effect.equals(newEffect);
+            }
+            if (hasSameEffects) {
+                return this;
+            }
+            // Make sure the validate methods are triggered
+            return combination.combine();
+        }
+
+        /** @hide */
+        @Override
+        public CombinedVibration adapt(VibratorAdapter adapter) {
+            ParallelCombination combination = CombinedVibration.startParallel();
+            boolean hasSameEffects = true;
+            for (int i = 0; i < mEffects.size(); i++) {
+                int vibratorId = mEffects.keyAt(i);
+                VibrationEffect effect = mEffects.valueAt(i);
+                VibrationEffect newEffect = adapter.adaptToVibrator(vibratorId, effect);
+                combination.addVibrator(vibratorId, newEffect);
+                hasSameEffects &= effect.equals(newEffect);
+            }
+            if (hasSameEffects) {
+                return this;
+            }
+            // Make sure the validate methods are triggered
+            return combination.combine();
+        }
+
+        /** @hide */
+        @Override
         public boolean hasVibrator(int vibratorId) {
             return mEffects.indexOfKey(vibratorId) >= 0;
         }
 
         @Override
         public boolean equals(Object o) {
+            if (this == o) {
+                return true;
+            }
             if (!(o instanceof Stereo)) {
                 return false;
             }
@@ -503,6 +635,17 @@
             return "Stereo{mEffects=" + mEffects + '}';
         }
 
+        /** @hide */
+        @Override
+        public String toDebugString() {
+            StringJoiner sj = new StringJoiner(",", "Stereo{", "}");
+            for (int i = 0; i < mEffects.size(); i++) {
+                sj.add(String.format(Locale.ROOT, "vibrator(id=%d): %s",
+                        mEffects.keyAt(i), mEffects.valueAt(i).toDebugString()));
+            }
+            return sj.toString();
+        }
+
         @Override
         public int describeContents() {
             return 0;
@@ -648,6 +791,43 @@
 
         /** @hide */
         @Override
+        public <ParamT> CombinedVibration transform(
+                VibrationEffect.Transformation<ParamT> transformation, ParamT param) {
+            SequentialCombination combination = CombinedVibration.startSequential();
+            boolean hasSameEffects = true;
+            for (int i = 0; i < mEffects.size(); i++) {
+                CombinedVibration vibration = mEffects.get(i);
+                CombinedVibration newVibration = vibration.transform(transformation, param);
+                combination.addNext(newVibration, mDelays.get(i));
+                hasSameEffects &= vibration.equals(newVibration);
+            }
+            if (hasSameEffects) {
+                return this;
+            }
+            // Make sure the validate methods are triggered
+            return combination.combine();
+        }
+
+        /** @hide */
+        @Override
+        public CombinedVibration adapt(VibratorAdapter adapter) {
+            SequentialCombination combination = CombinedVibration.startSequential();
+            boolean hasSameEffects = true;
+            for (int i = 0; i < mEffects.size(); i++) {
+                CombinedVibration vibration = mEffects.get(i);
+                CombinedVibration newVibration = vibration.adapt(adapter);
+                combination.addNext(newVibration, mDelays.get(i));
+                hasSameEffects &= vibration.equals(newVibration);
+            }
+            if (hasSameEffects) {
+                return this;
+            }
+            // Make sure the validate methods are triggered
+            return combination.combine();
+        }
+
+        /** @hide */
+        @Override
         public boolean hasVibrator(int vibratorId) {
             final int effectCount = mEffects.size();
             for (int i = 0; i < effectCount; i++) {
@@ -660,6 +840,9 @@
 
         @Override
         public boolean equals(Object o) {
+            if (this == o) {
+                return true;
+            }
             if (!(o instanceof Sequential)) {
                 return false;
             }
@@ -677,6 +860,17 @@
             return "Sequential{mEffects=" + mEffects + ", mDelays=" + mDelays + '}';
         }
 
+        /** @hide */
+        @Override
+        public String toDebugString() {
+            StringJoiner sj = new StringJoiner(",", "Sequential{", "}");
+            for (int i = 0; i < mEffects.size(); i++) {
+                sj.add(String.format(Locale.ROOT, "delayMs=%d, effect=%s",
+                        mDelays.get(i), mEffects.get(i).toDebugString()));
+            }
+            return sj.toString();
+        }
+
         @Override
         public int describeContents() {
             return 0;
diff --git a/core/java/android/os/DdmSyncStageUpdater.java b/core/java/android/os/DdmSyncStageUpdater.java
new file mode 100644
index 0000000..90f7076
--- /dev/null
+++ b/core/java/android/os/DdmSyncStageUpdater.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.os;
+
+import android.os.DdmSyncState.Stage;
+import android.util.Slog;
+
+import org.apache.harmony.dalvik.ddmc.Chunk;
+import org.apache.harmony.dalvik.ddmc.ChunkHandler;
+import org.apache.harmony.dalvik.ddmc.DdmServer;
+
+import java.nio.ByteBuffer;
+
+/**
+ * @hide
+ */
+// Making it public so ActivityThread can access it.
+public class DdmSyncStageUpdater {
+
+    private static final String TAG = "DdmSyncStageUpdater";
+
+    private static final int CHUNK_STAGE = ChunkHandler.type("STAG");
+
+    /**
+     * @hide
+     */
+    public DdmSyncStageUpdater() {
+    }
+
+    /**
+     * @hide
+     */
+    // Making it public so ActivityThread can access it.
+    public synchronized void next(Stage stage) {
+        try {
+            DdmSyncState.next(stage);
+
+            // Request DDMServer to send a STAG chunk
+            ByteBuffer data = ByteBuffer.allocate(Integer.BYTES);
+            data.putInt(stage.toInt());
+            Chunk stagChunk = new Chunk(CHUNK_STAGE, data);
+            DdmServer.sendChunk(stagChunk);
+        } catch (Exception e) {
+            // Catch everything to make sure we don't impact ActivityThread
+            Slog.w(TAG, "Unable to go to next stage" + stage, e);
+        }
+    }
+
+}
diff --git a/core/java/android/os/DdmSyncState.java b/core/java/android/os/DdmSyncState.java
new file mode 100644
index 0000000..09c9ef2
--- /dev/null
+++ b/core/java/android/os/DdmSyncState.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.os;
+
+import java.util.Arrays;
+
+/**
+ * Keep track of an app boot state. The main purpose is to stream back DDM packet so a DDM client
+ * can synchronize with the app state.
+ *
+ * The state is static so it can be accessed from HELO handler.
+ *
+ * @hide
+ **/
+public final class DdmSyncState {
+
+    /**
+     * @hide
+     */
+    public enum Stage {
+        // From zygote to attach
+        Boot("BOOT"),
+
+        // From attach to handleBindApplication
+        Attach("ATCH"),
+
+        // When handleBindApplication is finally reached
+        Bind("BIND"),
+
+        // When the actual package name is known (not the early "<preinitalized>" value).
+        Named("NAMD"),
+
+        // Can be skipped if the app is not debugged.
+        Debugger("DEBG"),
+
+        // App is in RunLoop
+        Running("A_GO");
+
+        final String mLabel;
+
+        Stage(String label) {
+            if (label.length() != 4) {
+                throw new IllegalStateException(
+                    "Bad stage id '" + label + "'. Must be four letters");
+            }
+            this.mLabel = label;
+        }
+
+        /**
+         * To be included in a DDM packet payload, the stage is encoded in a big-endian int
+         * @hide
+         */
+        public int toInt() {
+            int result = 0;
+            for (int i = 0; i < 4; ++i) {
+                result = ((result << 8) | (mLabel.charAt(i) & 0xff));
+            }
+            return result;
+        }
+    }
+
+    private static int sCurrentStageIndex = 0;
+
+    /**
+     * @hide
+     */
+    public static synchronized Stage getStage() {
+        return Stage.values()[sCurrentStageIndex];
+    }
+
+    /**
+     * @hide
+     */
+    public static void reset() {
+        sCurrentStageIndex = 0;
+    }
+
+    /**
+     * Search for the next level down the list of Stage. Only succeed if the next stage
+     * if a later stage (no cycling allowed).
+     *
+     * @hide
+     */
+    public static synchronized void next(Stage nextStage) {
+        Stage[] stages = Stage.values();
+        // Search for the requested next stage
+        int rover = sCurrentStageIndex;
+        while (rover < stages.length && stages[rover] != nextStage) {
+            rover++;
+        }
+
+        if (rover == stages.length || stages[rover] != nextStage) {
+            throw new IllegalStateException(
+                "Cannot go to " + nextStage + " from:" + getInternalState());
+        }
+
+        sCurrentStageIndex = rover;
+    }
+
+    /**
+     * Use to build error messages
+     * @hide
+     */
+    private static String getInternalState() {
+        StringBuilder sb = new StringBuilder("\n");
+        sb.append("level = ").append(sCurrentStageIndex);
+        sb.append("\n");
+        sb.append("stages = ");
+        sb.append(Arrays.toString(Arrays.stream(Stage.values()).map(Enum::name).toArray()));
+        sb.append("\n");
+        return sb.toString();
+    }
+}
diff --git a/core/java/android/os/ExternalVibration.java b/core/java/android/os/ExternalVibration.java
index fb115b3..3aad0fd 100644
--- a/core/java/android/os/ExternalVibration.java
+++ b/core/java/android/os/ExternalVibration.java
@@ -23,6 +23,8 @@
 
 import com.android.internal.util.Preconditions;
 
+import java.util.NoSuchElementException;
+
 /**
  * An ExternalVibration represents an on-going vibration being controlled by something other than
  * the core vibrator service.
@@ -149,7 +151,7 @@
         try {
             mToken.linkToDeath(recipient, 0);
         } catch (RemoteException e) {
-            return;
+            Slog.wtf(TAG, "Failed to link to token death: " + this, e);
         }
     }
 
@@ -157,7 +159,11 @@
      * Unlinks a recipient to death against this external vibration token
      */
     public void unlinkToDeath(IBinder.DeathRecipient recipient) {
-        mToken.unlinkToDeath(recipient, 0);
+        try {
+            mToken.unlinkToDeath(recipient, 0);
+        } catch (NoSuchElementException e) {
+            Slog.wtf(TAG, "Failed to unlink to token death", e);
+        }
     }
 
     @Override
@@ -184,12 +190,12 @@
     public void writeToParcel(Parcel out, int flags) {
         out.writeInt(mUid);
         out.writeString(mPkg);
-        writeAudioAttributes(mAttrs, out, flags);
+        writeAudioAttributes(mAttrs, out);
         out.writeStrongBinder(mController.asBinder());
         out.writeStrongBinder(mToken);
     }
 
-    private static void writeAudioAttributes(AudioAttributes attrs, Parcel out, int flags) {
+    private static void writeAudioAttributes(AudioAttributes attrs, Parcel out) {
         out.writeInt(attrs.getUsage());
         out.writeInt(attrs.getContentType());
         out.writeInt(attrs.getCapturePreset());
diff --git a/core/java/android/os/GraphicsEnvironment.java b/core/java/android/os/GraphicsEnvironment.java
index 299e7f1..a07735e 100644
--- a/core/java/android/os/GraphicsEnvironment.java
+++ b/core/java/android/os/GraphicsEnvironment.java
@@ -125,7 +125,6 @@
     private GameManager mGameManager;
 
     private int mAngleOptInIndex = -1;
-    private boolean mEnabledByGameMode = false;
     private boolean mShouldUseAngle = false;
 
     /**
@@ -179,23 +178,6 @@
     }
 
     /**
-     * Query to determine if the Game Mode has enabled ANGLE.
-     */
-    private boolean isAngleEnabledByGameMode(Context context, String packageName) {
-        try {
-            final boolean gameModeEnabledAngle =
-                    (mGameManager != null) && mGameManager.isAngleEnabled(packageName);
-            Log.v(TAG, "ANGLE GameManagerService for " + packageName + ": " + gameModeEnabledAngle);
-            return gameModeEnabledAngle;
-        } catch (SecurityException e) {
-            Log.e(TAG, "Caught exception while querying GameManagerService if ANGLE is enabled "
-                    + "for package: " + packageName);
-        }
-
-        return false;
-    }
-
-    /**
      * Query to determine the ANGLE driver choice.
      */
     private String queryAngleChoice(Context context, Bundle coreSettings,
@@ -423,8 +405,7 @@
      * 2) The per-application switch (i.e. Settings.Global.ANGLE_GL_DRIVER_SELECTION_PKGS and
      *    Settings.Global.ANGLE_GL_DRIVER_SELECTION_VALUES; which corresponds to the
      *    “angle_gl_driver_selection_pkgs” and “angle_gl_driver_selection_values” settings); if it
-     *    forces a choice;
-     * 3) Use ANGLE if isAngleEnabledByGameMode() returns true;
+     *    forces a choice.
      */
     private String queryAngleChoiceInternal(Context context, Bundle bundle,
                                                        String packageName) {
@@ -458,18 +439,15 @@
         Log.v(TAG, "  angle_gl_driver_selection_pkgs=" + optInPackages);
         Log.v(TAG, "  angle_gl_driver_selection_values=" + optInValues);
 
-        mEnabledByGameMode = isAngleEnabledByGameMode(context, packageName);
-
         // Make sure we have good settings to use
-        if (optInPackages.size() != optInValues.size()) {
+        if (optInPackages.size() == 0 || optInPackages.size() != optInValues.size()) {
             Log.v(TAG,
                     "Global.Settings values are invalid: "
                         + "number of packages: "
                             + optInPackages.size() + ", "
                         + "number of values: "
                             + optInValues.size());
-            return mEnabledByGameMode ? ANGLE_GL_DRIVER_CHOICE_ANGLE
-                    : ANGLE_GL_DRIVER_CHOICE_DEFAULT;
+            return ANGLE_GL_DRIVER_CHOICE_DEFAULT;
         }
 
         // See if this application is listed in the per-application settings list
@@ -477,8 +455,7 @@
 
         if (pkgIndex < 0) {
             Log.v(TAG, packageName + " is not listed in per-application setting");
-            return mEnabledByGameMode ? ANGLE_GL_DRIVER_CHOICE_ANGLE
-                    : ANGLE_GL_DRIVER_CHOICE_DEFAULT;
+            return ANGLE_GL_DRIVER_CHOICE_DEFAULT;
         }
         mAngleOptInIndex = pkgIndex;
 
@@ -492,12 +469,9 @@
             return ANGLE_GL_DRIVER_CHOICE_ANGLE;
         } else if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)) {
             return ANGLE_GL_DRIVER_CHOICE_NATIVE;
-        } else {
-            // The user either chose default or an invalid value; go with the default driver or what
-            // the game mode indicates
-            return mEnabledByGameMode ? ANGLE_GL_DRIVER_CHOICE_ANGLE
-                    : ANGLE_GL_DRIVER_CHOICE_DEFAULT;
         }
+        // The user either chose default or an invalid value; go with the default driver.
+        return ANGLE_GL_DRIVER_CHOICE_DEFAULT;
     }
 
     /**
diff --git a/core/java/android/os/IPowerStatsService.aidl b/core/java/android/os/IPowerStatsService.aidl
new file mode 100644
index 0000000..a0c2262
--- /dev/null
+++ b/core/java/android/os/IPowerStatsService.aidl
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.os;
+
+import android.os.ResultReceiver;
+
+/** @hide */
+interface IPowerStatsService {
+    /** @hide */
+    const String KEY_MONITORS = "monitors";
+    /** @hide */
+    const String KEY_ENERGY = "energy";
+    /** @hide */
+    const String KEY_TIMESTAMPS = "timestamps";
+
+    /** @hide */
+    const int RESULT_SUCCESS = 0;
+    /** @hide */
+    const int RESULT_UNSUPPORTED_POWER_MONITOR = 1;
+
+    /** {@hide} */
+    oneway void getSupportedPowerMonitors(in ResultReceiver resultReceiver);
+    /** {@hide} */
+    oneway void getPowerMonitorReadings(in int[] powerMonitorIndices,
+            in ResultReceiver resultReceiver);
+}
diff --git a/core/java/android/os/IRecoverySystem.aidl b/core/java/android/os/IRecoverySystem.aidl
index 88bdb7f..b3628ff 100644
--- a/core/java/android/os/IRecoverySystem.aidl
+++ b/core/java/android/os/IRecoverySystem.aidl
@@ -23,6 +23,7 @@
 /** @hide */
 
 interface IRecoverySystem {
+    @EnforcePermission("RECOVERY")
     boolean allocateSpaceForUpdate(in String packageFilePath);
     boolean uncrypt(in String packageFile, IRecoverySystemProgressListener listener);
     boolean setupBcb(in String command);
@@ -31,6 +32,7 @@
     boolean requestLskf(in String packageName, in IntentSender sender);
     boolean clearLskf(in String packageName);
     boolean isLskfCaptured(in String packageName);
+    @EnforcePermission("RECOVERY")
     int rebootWithLskfAssumeSlotSwitch(in String packageName, in String reason);
     int rebootWithLskf(in String packageName, in String reason, in boolean slotSwitch);
 }
diff --git a/core/java/android/os/ISystemUpdateManager.aidl b/core/java/android/os/ISystemUpdateManager.aidl
index f7f5079..cda2fa1 100644
--- a/core/java/android/os/ISystemUpdateManager.aidl
+++ b/core/java/android/os/ISystemUpdateManager.aidl
@@ -23,5 +23,6 @@
 /** @hide */
 interface ISystemUpdateManager {
     Bundle retrieveSystemUpdateInfo();
+    @EnforcePermission("RECOVERY")
     void updateSystemUpdateInfo(in PersistableBundle data);
 }
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index 8e1d2d6..839c56f 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -60,6 +60,7 @@
     ParcelFileDescriptor getUserIcon(int userId);
     UserInfo getPrimaryUser();
     int getMainUserId();
+    int getCommunalProfileId();
     int getPreviousFullUserToEnterForeground();
     List<UserInfo> getUsers(boolean excludePartial, boolean excludeDying, boolean excludePreCreated);
     List<UserInfo> getProfiles(int userId, boolean enabledOnly);
@@ -128,6 +129,7 @@
     int getUserBadgeLabelResId(int userId);
     int getUserBadgeColorResId(int userId);
     int getUserBadgeDarkColorResId(int userId);
+    int getUserStatusBarIconResId(int userId);
     boolean hasBadge(int userId);
     boolean isUserUnlocked(int userId);
     boolean isUserRunning(int userId);
diff --git a/core/java/android/os/IVibratorManagerService.aidl b/core/java/android/os/IVibratorManagerService.aidl
index fb9752f..6275352 100644
--- a/core/java/android/os/IVibratorManagerService.aidl
+++ b/core/java/android/os/IVibratorManagerService.aidl
@@ -25,8 +25,11 @@
 interface IVibratorManagerService {
     int[] getVibratorIds();
     VibratorInfo getVibratorInfo(int vibratorId);
+    @EnforcePermission("ACCESS_VIBRATOR_STATE")
     boolean isVibrating(int vibratorId);
+    @EnforcePermission("ACCESS_VIBRATOR_STATE")
     boolean registerVibratorStateListener(int vibratorId, in IVibratorStateListener listener);
+    @EnforcePermission("ACCESS_VIBRATOR_STATE")
     boolean unregisterVibratorStateListener(int vibratorId, in IVibratorStateListener listener);
     boolean setAlwaysOnEffect(int uid, String opPkg, int alwaysOnId,
             in CombinedVibration vibration, in VibrationAttributes attributes);
diff --git a/core/java/android/os/OWNERS b/core/java/android/os/OWNERS
index be7f276..6ef1dc0 100644
--- a/core/java/android/os/OWNERS
+++ b/core/java/android/os/OWNERS
@@ -80,5 +80,9 @@
 # ART
 per-file ArtModuleServiceManager.java = file:platform/art:/OWNERS
 
+# DDM Protocol
+per-file DdmSyncState.java = sanglardf@google.com, rpaquay@google.com
+per-file DdmSyncStageUpdater.java = sanglardf@google.com, rpaquay@google.com
+
 # PerformanceHintManager
 per-file PerformanceHintManager.java = file:/ADPF_OWNERS
diff --git a/core/java/android/os/PerformanceHintManager.java b/core/java/android/os/PerformanceHintManager.java
index f79d6e6..bcea797 100644
--- a/core/java/android/os/PerformanceHintManager.java
+++ b/core/java/android/os/PerformanceHintManager.java
@@ -29,6 +29,7 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.ref.Reference;
+import java.util.Objects;
 
 
 /** The PerformanceHintManager allows apps to send performance hint to system. */
@@ -54,15 +55,20 @@
      * duration.
      *
      * @param tids The list of threads to be associated with this session. They must be part of
-     *     this process' thread group.
+     *     this process' thread group
      * @param initialTargetWorkDurationNanos The desired duration in nanoseconds for the new
-     *     session.
+     *     session
      * @return the new session if it is supported on this device, null if hint session is not
-     *     supported on this device.
+     *     supported on this device or the tid doesn't belong to the application
+     * @throws IllegalArgumentException if the thread id list is empty, or
+     *                                  initialTargetWorkDurationNanos is non-positive
      */
     @Nullable
     public Session createHintSession(@NonNull int[] tids, long initialTargetWorkDurationNanos) {
-        Preconditions.checkNotNull(tids, "tids cannot be null");
+        Objects.requireNonNull(tids, "tids cannot be null");
+        if (tids.length == 0) {
+            throw new IllegalArgumentException("thread id list can't be empty.");
+        }
         Preconditions.checkArgumentPositive(initialTargetWorkDurationNanos,
                 "the hint target duration should be positive.");
         long nativeSessionPtr = nativeCreateSession(mNativeManagerPtr, tids,
@@ -74,7 +80,7 @@
     /**
      * Get preferred update rate information for this device.
      *
-     * @return the preferred update rate supported by device software.
+     * @return the preferred update rate supported by device software
      */
     public long getPreferredUpdateRateNanos() {
         return nativeGetPreferredUpdateRateNanos(mNativeManagerPtr);
@@ -208,7 +214,7 @@
         /**
          * Sends performance hints to inform the hint session of changes in the workload.
          *
-         * @param hint The hint to send to the session.
+         * @param hint The hint to send to the session
          *
          * @hide
          */
@@ -229,16 +235,17 @@
          * Note that this is not an oneway method.
          *
          * @param tids The list of threads to be associated with this session. They must be
-         *     part of this app's thread group.
+         *     part of this app's thread group
          *
-         * @throws IllegalStateException if the hint session is not in the foreground.
-         * @throws IllegalArgumentException if the thread id list is empty.
-         * @throws SecurityException if any thread id doesn't belong to the application.
+         * @throws IllegalStateException if the hint session is not in the foreground
+         * @throws IllegalArgumentException if the thread id list is empty
+         * @throws SecurityException if any thread id doesn't belong to the application
          */
         public void setThreads(@NonNull int[] tids) {
             if (mNativeSessionPtr == 0) {
                 return;
             }
+            Objects.requireNonNull(tids, "tids cannot be null");
             if (tids.length == 0) {
                 throw new IllegalArgumentException("Thread id list can't be empty.");
             }
diff --git a/core/java/android/os/PermissionEnforcer.java b/core/java/android/os/PermissionEnforcer.java
index 310ceb3..91d2269 100644
--- a/core/java/android/os/PermissionEnforcer.java
+++ b/core/java/android/os/PermissionEnforcer.java
@@ -34,6 +34,38 @@
  * PermissionEnforcer to validate the permissions. The methods available are
  * purposely similar to the AIDL annotation syntax.
  *
+ * <p>The constructor of the Stub generated by AIDL expects a
+ * PermissionEnforcer. It can be based on the current Context. For example:
+ *
+ * <pre>{@code
+ * class MyFoo extends Foo.Stub {
+ *     MyFoo(Context context) {
+ *         super(PermissionEnforcer.fromContext(context));
+ *     }
+ *
+ *     @Override
+ *     @EnforcePermission(android.Manifest.permission.INTERNET)
+ *     public MyMethod() {
+ *         MyMethod_enforcePermission();
+ *     }
+ * }
+ * }</pre>
+ *
+ * <p>A {@link android.os.test.FakePermissionEnforcer} is available for unit
+ * testing. It can be attached to a mocked Context using:
+ * <pre>{@code
+ * @Mock private Context mContext;
+ *
+ * @Before
+ * public setUp() {
+ *   fakeEnforcer = new FakePermissionEnforcer();
+ *   fakeEnforcer.grant(android.Manifest.permission.INTERNET);
+ *
+ *   doReturn(fakeEnforcer).when(mContext).getSystemService(
+                eq(Context.PERMISSION_ENFORCER_SERVICE));
+ * }
+ * }</pre>
+ *
  * @see android.permission.PermissionManager
  *
  * @hide
@@ -163,6 +195,6 @@
      * @hide
      */
     public static PermissionEnforcer fromContext(@NonNull Context context) {
-        return context.getSystemService(PermissionEnforcer.class);
+        return (PermissionEnforcer) context.getSystemService(Context.PERMISSION_ENFORCER_SERVICE);
     }
 }
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index 6e19c2a..d676509 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -3580,25 +3580,6 @@
     }
 
     /**
-     * Constant for PreIdleTimeout normal mode (default mode, not short nor extend timeout) .
-     * @hide
-     */
-    public static final int PRE_IDLE_TIMEOUT_MODE_NORMAL = 0;
-
-    /**
-     * Constant for PreIdleTimeout long mode (extend timeout to keep in inactive mode
-     * longer).
-     * @hide
-     */
-    public static final int PRE_IDLE_TIMEOUT_MODE_LONG = 1;
-
-    /**
-     * Constant for PreIdleTimeout short mode (short timeout to go to doze mode quickly)
-     * @hide
-     */
-    public static final int PRE_IDLE_TIMEOUT_MODE_SHORT = 2;
-
-    /**
      * A listener interface to get notified when the wakelock is enabled/disabled.
      */
     public interface WakeLockStateListener {
diff --git a/core/java/android/os/PowerMonitor.aidl b/core/java/android/os/PowerMonitor.aidl
new file mode 100644
index 0000000..3f8943f
--- /dev/null
+++ b/core/java/android/os/PowerMonitor.aidl
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2023, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.os;
+
+/** @hide */
+@JavaOnlyStableParcelable parcelable PowerMonitor;
diff --git a/core/java/android/os/PowerMonitor.java b/core/java/android/os/PowerMonitor.java
new file mode 100644
index 0000000..ebdd463
--- /dev/null
+++ b/core/java/android/os/PowerMonitor.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.os;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * @hide
+ */
+public final class PowerMonitor implements Parcelable {
+
+    /**
+     * Power monitor corresponding to a subsystem. The energy value may be a direct pass-through
+     * power rail measurement, or modeled in some fashion.  For example, an energy consumer may
+     * represent a combination of multiple rails or a portion of a rail shared between subsystems,
+     * e.g. WiFi and Bluetooth are often handled by the same chip, powered by a shared rail.
+     * Some consumer names are standardized (see android.hardware.power.stats.EnergyConsumerType),
+     * others are not.
+     */
+    public static final int POWER_MONITOR_TYPE_CONSUMER = 0;
+
+    /**
+     * Power monitor corresponding to a directly measured power rail. Rails are device-specific:
+     * no assumptions can be made about the source of those measurements across different devices,
+     * even if they have the same name.
+     */
+    public static final int POWER_MONITOR_TYPE_MEASUREMENT = 1;
+
+    /** @hide */
+    @IntDef(flag = true, prefix = {"POWER_MONITOR_TYPE_"}, value = {
+            POWER_MONITOR_TYPE_CONSUMER,
+            POWER_MONITOR_TYPE_MEASUREMENT
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface PowerMonitorType {
+    }
+
+    /**
+     * These indices are not guaranteed to be stable across reboots and should not
+     * be persisted.
+     *
+     * @hide
+     */
+    public final int index;
+    @PowerMonitorType
+    public final int type;
+    @NonNull
+    public final String name;
+
+    /**
+     * @hide
+     */
+    public PowerMonitor(int index, int type, @NonNull String name) {
+        this.index = index;
+        this.type = type;
+        this.name = name;
+    }
+
+    private PowerMonitor(Parcel in) {
+        index = in.readInt();
+        type = in.readInt();
+        name = in.readString();
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        dest.writeInt(index);
+        dest.writeInt(type);
+        dest.writeString(name);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public static final Creator<PowerMonitor> CREATOR = new Creator<>() {
+        @Override
+        public PowerMonitor createFromParcel(@NonNull Parcel in) {
+            return new PowerMonitor(in);
+        }
+
+        @Override
+        public PowerMonitor[] newArray(int size) {
+            return new PowerMonitor[size];
+        }
+    };
+}
diff --git a/core/java/android/os/PowerMonitorReadings.java b/core/java/android/os/PowerMonitorReadings.java
new file mode 100644
index 0000000..3d7f859
--- /dev/null
+++ b/core/java/android/os/PowerMonitorReadings.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.os;
+
+import android.annotation.NonNull;
+
+import java.util.Arrays;
+import java.util.Comparator;
+
+/**
+ * A collection of energy measurements from Power Monitors.
+ *
+ * @hide
+ */
+public final class PowerMonitorReadings {
+    public static final int ENERGY_UNAVAILABLE = -1;
+
+    @NonNull
+    private final PowerMonitor[] mPowerMonitors;
+    @NonNull
+    private final long[] mEnergyUws;
+    @NonNull
+    private final long[] mTimestampsMs;
+
+    private static final Comparator<PowerMonitor> POWER_MONITOR_COMPARATOR =
+            Comparator.comparingInt(pm -> pm.index);
+
+    /**
+     * @param powerMonitors array of power monitor (ODPM) rails, sorted by PowerMonitor.index
+     * @hide
+     */
+    public PowerMonitorReadings(PowerMonitor[] powerMonitors,
+            long[] energyUws, long[] timestampsMs) {
+        mPowerMonitors = powerMonitors;
+        mEnergyUws = energyUws;
+        mTimestampsMs = timestampsMs;
+    }
+
+    /**
+     * Returns energy consumed by the specified power monitor since boot in microwatt-seconds.
+     * Does not persist across reboots.
+     * Represents total energy: both on-battery and plugged-in.
+     */
+    public long getConsumedEnergyUws(PowerMonitor powerMonitor) {
+        int offset = Arrays.binarySearch(mPowerMonitors, powerMonitor, POWER_MONITOR_COMPARATOR);
+        if (offset >= 0) {
+            return mEnergyUws[offset];
+        }
+        return ENERGY_UNAVAILABLE;
+    }
+
+    /**
+     * Elapsed realtime when the snapshot was taken.
+     */
+    public long getTimestampMs(PowerMonitor powerMonitor) {
+        int offset = Arrays.binarySearch(mPowerMonitors, powerMonitor, POWER_MONITOR_COMPARATOR);
+        if (offset >= 0) {
+            return mTimestampsMs[offset];
+        }
+        return 0;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(" monitors: [");
+        for (int i = 0; i < mPowerMonitors.length; i++) {
+            if (i != 0) {
+                sb.append(", ");
+            }
+            sb.append(mPowerMonitors[i].name)
+                    .append(" = ").append(mEnergyUws[i])
+                    .append(" (").append(mTimestampsMs[i]).append(')');
+        }
+        sb.append("]");
+        return sb.toString();
+    }
+}
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 04525e8..e37b2b5 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -1118,19 +1118,6 @@
     public static final native void setProcessFrozen(int pid, int uid, boolean frozen);
 
     /**
-     * Enable or disable the freezer. When enable == false all frozen processes are unfrozen,
-     * but aren't removed from the freezer. While in this state, processes can be added or removed
-     * by using setProcessFrozen, but they won't actually be frozen until the freezer is enabled
-     * again. If enable == true the freezer is enabled again, and all processes
-     * in the freezer (including the ones added while the freezer was disabled) are frozen.
-     *
-     * @param enable Specify whether to enable (true) or disable (false) the freezer.
-     *
-     * @hide
-     */
-    public static final native void enableFreezer(boolean enable);
-
-    /**
      * Return the scheduling group of requested process.
      *
      * @hide
diff --git a/core/java/android/os/RemoteCallbackList.java b/core/java/android/os/RemoteCallbackList.java
index d89c3d5..2c58021 100644
--- a/core/java/android/os/RemoteCallbackList.java
+++ b/core/java/android/os/RemoteCallbackList.java
@@ -273,7 +273,7 @@
      * handle such an exception by simply ignoring it.
      *
      * @param index Which of the registered callbacks you would like to
-     * retrieve.  Ranges from 0 to 1-{@link #beginBroadcast}.
+     * retrieve.  Ranges from 0 to {@link #beginBroadcast}-1, inclusive.
      *
      * @return Returns the callback interface that you can call.  This will
      * always be non-null.
diff --git a/core/java/android/os/TEST_MAPPING b/core/java/android/os/TEST_MAPPING
index 5c4aa4a..60622f18 100644
--- a/core/java/android/os/TEST_MAPPING
+++ b/core/java/android/os/TEST_MAPPING
@@ -1,6 +1,45 @@
 {
   "presubmit": [
     {
+      "file_patterns": [
+        "[^/]*(Vibrator|Vibration)[^/]*\\.java",
+        "vibrator/.*"
+      ],
+      "name": "FrameworksVibratorCoreTests",
+      "options": [
+        {"exclude-annotation": "android.platform.test.annotations.LargeTest"},
+        {"exclude-annotation": "android.platform.test.annotations.FlakyTest"},
+        {"exclude-annotation": "androidx.test.filters.FlakyTest"},
+        {"exclude-annotation": "org.junit.Ignore"}
+      ]
+    },
+    {
+      "file_patterns": [
+        "[^/]*(Vibrator|Vibration)[^/]*\\.java",
+        "vibrator/.*"
+      ],
+      "name": "FrameworksVibratorServicesTests",
+      "options": [
+        {"exclude-annotation": "android.platform.test.annotations.LargeTest"},
+        {"exclude-annotation": "android.platform.test.annotations.FlakyTest"},
+        {"exclude-annotation": "androidx.test.filters.FlakyTest"},
+        {"exclude-annotation": "org.junit.Ignore"}
+      ]
+    },
+    {
+      "file_patterns": [
+        "[^/]*(Vibrator|Vibration)[^/]*\\.java",
+        "vibrator/.*"
+      ],
+      "name": "CtsVibratorTestCases",
+      "options": [
+        {"exclude-annotation": "android.platform.test.annotations.LargeTest"},
+        {"exclude-annotation": "android.platform.test.annotations.FlakyTest"},
+        {"exclude-annotation": "androidx.test.filters.FlakyTest"},
+        {"exclude-annotation": "org.junit.Ignore"}
+      ]
+    },
+    {
       "file_patterns": ["Bugreport[^/]*\\.java"],
       "name": "BugreportManagerTestCases",
       "options": [
@@ -60,13 +99,10 @@
         "BatteryStats[^/]*\\.java",
         "BatteryUsageStats[^/]*\\.java",
         "PowerComponents\\.java",
+        "PowerMonitor[^/]*\\.java",
         "[^/]*BatteryConsumer[^/]*\\.java"
       ],
-      "name": "FrameworksServicesTests",
-      "options": [
-        { "include-filter": "com.android.server.power.stats" },
-        { "exclude-filter": "com.android.server.power.stats.BatteryStatsTests" }
-      ]
+      "name": "PowerStatsTests"
     },
     {
       "file_patterns": [
diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java
index 0527ed6..cac7f3b 100644
--- a/core/java/android/os/UserHandle.java
+++ b/core/java/android/os/UserHandle.java
@@ -125,7 +125,8 @@
     public static final int MIN_SECONDARY_USER_ID = 10;
 
     /** @hide */
-    public static final int MAX_SECONDARY_USER_ID = Integer.MAX_VALUE / UserHandle.PER_USER_RANGE;
+    public static final int MAX_SECONDARY_USER_ID =
+            Integer.MAX_VALUE / UserHandle.PER_USER_RANGE - 1;
 
     /**
      * (Arbitrary) user handle cache size.
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 2d21718..ba1f979 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -159,6 +159,13 @@
     @SystemApi
     public static final String USER_TYPE_PROFILE_CLONE = "android.os.usertype.profile.CLONE";
 
+
+    /**
+     * User type representing a private profile.
+     * @hide
+     */
+    public static final String USER_TYPE_PROFILE_PRIVATE = "android.os.usertype.profile.PRIVATE";
+
     /**
      * User type representing a generic profile for testing purposes. Only on debuggable builds.
      * @hide
@@ -166,6 +173,12 @@
     public static final String USER_TYPE_PROFILE_TEST = "android.os.usertype.profile.TEST";
 
     /**
+     * User type representing a communal profile, which is shared by all users of the device.
+     * @hide
+     */
+    public static final String USER_TYPE_PROFILE_COMMUNAL = "android.os.usertype.profile.COMMUNAL";
+
+    /**
      * User type representing a {@link UserHandle#USER_SYSTEM system} user that is <b>not</b> a
      * human user.
      * This type of user cannot be created; it can only pre-exist on first boot.
@@ -2078,6 +2091,13 @@
     public static final int REMOVE_RESULT_ALREADY_BEING_REMOVED = 2;
 
     /**
+     * A response code indicating that the specified user is removable.
+     *
+     * @hide
+     */
+    public static final int REMOVE_RESULT_USER_IS_REMOVABLE = 3;
+
+    /**
      * A response code from {@link #removeUserWhenPossible(UserHandle, boolean)} indicating that
      * an unknown error occurred that prevented the user from being removed or set as ephemeral.
      *
@@ -2132,6 +2152,7 @@
             REMOVE_RESULT_REMOVED,
             REMOVE_RESULT_DEFERRED,
             REMOVE_RESULT_ALREADY_BEING_REMOVED,
+            REMOVE_RESULT_USER_IS_REMOVABLE,
             REMOVE_RESULT_ERROR_USER_RESTRICTION,
             REMOVE_RESULT_ERROR_USER_NOT_FOUND,
             REMOVE_RESULT_ERROR_SYSTEM_USER,
@@ -2385,6 +2406,16 @@
     }
 
     /**
+     * Returns whether the device is configured to support a Communal Profile.
+     * @hide
+     */
+    public static boolean isCommunalProfileEnabled() {
+        return SystemProperties.getBoolean("persist.fw.omnipresent_communal_user",
+                Resources.getSystem()
+                        .getBoolean(com.android.internal.R.bool.config_omnipresentCommunalUser));
+    }
+
+    /**
      * Returns whether multiple admins are enabled on the device
      * @hide
      */
@@ -2691,6 +2722,38 @@
             throw re.rethrowFromSystemServer();
         }
     }
+    /**
+     * Returns the designated "communal profile" of the device, or {@code null} if there is none.
+     * @hide
+     */
+    @RequiresPermission(anyOf = {
+            Manifest.permission.MANAGE_USERS,
+            Manifest.permission.CREATE_USERS,
+            Manifest.permission.QUERY_USERS})
+    public @Nullable UserHandle getCommunalProfile() {
+        try {
+            final int userId = mService.getCommunalProfileId();
+            if (userId == UserHandle.USER_NULL) {
+                return null;
+            }
+            return UserHandle.of(userId);
+        } catch (RemoteException re) {
+            throw re.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Returns {@code true} if the given user is the designated "communal profile" of the device.
+     * @hide
+     */
+    @RequiresPermission(anyOf = {
+            Manifest.permission.MANAGE_USERS,
+            Manifest.permission.CREATE_USERS,
+            Manifest.permission.QUERY_USERS})
+    public boolean isCommunalProfile(@UserIdInt int userId) {
+        final UserInfo user = getUserInfo(userId);
+        return user != null && user.isCommunalProfile();
+    }
 
     /**
      * Used to check if the context user is an admin user. An admin user may be allowed to
@@ -2793,6 +2856,25 @@
     }
 
     /**
+     * Returns whether the user type is a
+     * {@link UserManager#USER_TYPE_PROFILE_COMMUNAL communal profile}.
+     * @hide
+     */
+    public static boolean isUserTypeCommunalProfile(@Nullable String userType) {
+        return USER_TYPE_PROFILE_COMMUNAL.equals(userType);
+    }
+
+    /**
+     * Returns whether the user type is a
+     * {@link UserManager#USER_TYPE_PROFILE_PRIVATE private profile}.
+     *
+     * @hide
+     */
+    public static boolean isUserTypePrivateProfile(@Nullable String userType) {
+        return USER_TYPE_PROFILE_PRIVATE.equals(userType);
+    }
+
+    /**
      * @hide
      * @deprecated Use {@link #isRestrictedProfile()}
      */
@@ -2802,7 +2884,8 @@
             enabledSinceTargetSdkVersion = Build.VERSION_CODES.TIRAMISU,
             requiresAnyOfPermissionsIfNotCaller = {
                     android.Manifest.permission.MANAGE_USERS,
-                    android.Manifest.permission.CREATE_USERS}
+                    android.Manifest.permission.CREATE_USERS,
+                    android.Manifest.permission.QUERY_USERS}
     )
     public boolean isLinkedUser() {
         return isRestrictedProfile();
@@ -2820,7 +2903,8 @@
             enabledSinceTargetSdkVersion = Build.VERSION_CODES.TIRAMISU,
             requiresAnyOfPermissionsIfNotCaller = {
                     android.Manifest.permission.MANAGE_USERS,
-                    android.Manifest.permission.CREATE_USERS}
+                    android.Manifest.permission.CREATE_USERS,
+                    android.Manifest.permission.QUERY_USERS}
     )
     public boolean isRestrictedProfile() {
         try {
@@ -2841,7 +2925,8 @@
     @SystemApi
     @RequiresPermission(anyOf = {
             Manifest.permission.MANAGE_USERS,
-            Manifest.permission.CREATE_USERS},
+            Manifest.permission.CREATE_USERS,
+            Manifest.permission.QUERY_USERS},
             conditional = true)
     public boolean isRestrictedProfile(@NonNull UserHandle user) {
         try {
@@ -3078,6 +3163,24 @@
     }
 
     /**
+     * Checks if the context user is a private profile.
+     *
+     * @return whether the context user is a private profile.
+     *
+     * @see android.os.UserManager#USER_TYPE_PROFILE_PRIVATE
+     * @hide
+     */
+    @UserHandleAware(
+            requiresAnyOfPermissionsIfNotCallerProfileGroup = {
+                    android.Manifest.permission.MANAGE_USERS,
+                    android.Manifest.permission.QUERY_USERS,
+                    android.Manifest.permission.INTERACT_ACROSS_USERS})
+    @SuppressAutoDoc
+    public boolean isPrivateProfile() {
+        return isUserTypePrivateProfile(getProfileType());
+    }
+
+    /**
      * Checks if the context user is an ephemeral user.
      *
      * @return whether the context user is an ephemeral user.
@@ -3236,6 +3339,7 @@
      *   <li>(Running) profiles of the current foreground user.
      *   <li>Background users assigned to secondary displays (for example, passenger users on
      *   automotive builds, using the display associated with their seats).
+     *   <li>A communal profile, if present.
      * </ol>
      *
      * @return whether the user is visible at the moment, as defined above.
@@ -5349,6 +5453,21 @@
     }
 
     /**
+     * Returns the Resource ID of the user's status bar icon.
+     *
+     * @return the Resource ID of the user's status bar icon if it has one; otherwise
+     *         {@link Resources#ID_NULL}.
+     * @hide
+     */
+    public @DrawableRes int getUserStatusBarIconResId(@UserIdInt int userId) {
+        try {
+            return mService.getUserStatusBarIconResId(userId);
+        } catch (RemoteException re) {
+            throw re.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * If the target user is a profile of the calling user or the caller
      * is itself a profile, then this returns a badged copy of the given
      * icon to be able to distinguish it from the original icon. For badging an
diff --git a/core/java/android/os/VibrationAttributes.java b/core/java/android/os/VibrationAttributes.java
index b2d62eb..98f9dff 100644
--- a/core/java/android/os/VibrationAttributes.java
+++ b/core/java/android/os/VibrationAttributes.java
@@ -336,10 +336,11 @@
 
     @Override
     public String toString() {
-        return "VibrationAttributes:"
-                + " Usage=" + usageToString()
-                + " Audio Usage= " + AudioAttributes.usageToString(mOriginalAudioUsage)
-                + " Flags=" + mFlags;
+        return "VibrationAttributes{"
+                + "mUsage=" + usageToString()
+                + ", mAudioUsage= " + AudioAttributes.usageToString(mOriginalAudioUsage)
+                + ", mFlags=" + mFlags
+                + '}';
     }
 
     /** @hide */
diff --git a/core/java/android/os/VibrationEffect.java b/core/java/android/os/VibrationEffect.java
index 4366c28..b24b45d 100644
--- a/core/java/android/os/VibrationEffect.java
+++ b/core/java/android/os/VibrationEffect.java
@@ -28,12 +28,12 @@
 import android.hardware.vibrator.V1_0.EffectStrength;
 import android.hardware.vibrator.V1_3.Effect;
 import android.net.Uri;
-import android.os.Vibrator;
 import android.os.vibrator.PrebakedSegment;
 import android.os.vibrator.PrimitiveSegment;
 import android.os.vibrator.RampSegment;
 import android.os.vibrator.StepSegment;
 import android.os.vibrator.VibrationEffectSegment;
+import android.util.Log;
 import android.util.MathUtils;
 
 import com.android.internal.util.Preconditions;
@@ -44,7 +44,9 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Locale;
 import java.util.Objects;
+import java.util.StringJoiner;
 
 /**
  * A VibrationEffect describes a haptic effect to be performed by a {@link Vibrator}.
@@ -52,6 +54,7 @@
  * <p>These effects may be any number of things, from single shot vibrations to complex waveforms.
  */
 public abstract class VibrationEffect implements Parcelable {
+    private static final String TAG = "VibrationEffect";
     // Stevens' coefficient to scale the perceived vibration intensity.
     private static final float SCALE_GAMMA = 0.65f;
     // If a vibration is playing for longer than 1s, it's probably not haptic feedback
@@ -231,11 +234,11 @@
      * Computes a legacy vibration pattern (i.e. a pattern with duration values for "off/on"
      * vibration components) that is equivalent to this VibrationEffect.
      *
-     * <p>All non-repeating effects created with {@link #createWaveform(int[], int)} are convertible
-     * into an equivalent vibration pattern with this method. It is not guaranteed that an effect
-     * created with other means becomes converted into an equivalent legacy vibration pattern, even
-     * if it has an equivalent vibration pattern. If this method is unable to create an equivalent
-     * vibration pattern for such effects, it will return {@code null}.
+     * <p>All non-repeating effects created with {@link #createWaveform(long[], int)} are
+     * convertible into an equivalent vibration pattern with this method. It is not guaranteed that
+     * an effect created with other means becomes converted into an equivalent legacy vibration
+     * pattern, even if it has an equivalent vibration pattern. If this method is unable to create
+     * an equivalent vibration pattern for such effects, it will return {@code null}.
      *
      * <p>Note that a valid equivalent long[] pattern cannot be created for an effect that has any
      * form of repeating behavior, regardless of how the effect was created. For repeating effects,
@@ -244,7 +247,7 @@
      * @return a long array representing a vibration pattern equivalent to the VibrationEffect, if
      *               the method successfully derived a vibration pattern equivalent to the effect
      *               (this will always be the case if the effect was created via
-     *               {@link #createWaveform(int[], int)} and is non-repeating). Otherwise, returns
+     *               {@link #createWaveform(long[], int)} and is non-repeating). Otherwise, returns
      *               {@code null}.
      * @hide
      */
@@ -334,7 +337,7 @@
      */
     @TestApi
     public static VibrationEffect get(int effectId) {
-        return get(effectId, true);
+        return get(effectId, PrebakedSegment.DEFAULT_SHOULD_FALLBACK);
     }
 
     /**
@@ -353,7 +356,7 @@
      *
      * @param effectId The ID of the effect to perform:
      *                 {@link #EFFECT_CLICK}, {@link #EFFECT_DOUBLE_CLICK}, {@link #EFFECT_TICK}
-     * @param fallback Whether to fallback to a generic pattern if a hardware specific
+     * @param fallback Whether to fall back to a generic pattern if a hardware specific
      *                 implementation doesn't exist.
      *
      * @return The desired effect.
@@ -362,7 +365,7 @@
     @TestApi
     public static VibrationEffect get(int effectId, boolean fallback) {
         VibrationEffect effect = new Composed(
-                new PrebakedSegment(effectId, fallback, EffectStrength.MEDIUM));
+                new PrebakedSegment(effectId, fallback, PrebakedSegment.DEFAULT_STRENGTH));
         effect.validate();
         return effect;
     }
@@ -394,26 +397,32 @@
             return null;
         }
 
-        final ContentResolver cr = context.getContentResolver();
-        Uri uncanonicalUri = cr.uncanonicalize(uri);
-        if (uncanonicalUri == null) {
-            // If we already had an uncanonical URI, it's possible we'll get null back here. In
-            // this case, just use the URI as passed in since it wasn't canonicalized in the first
-            // place.
-            uncanonicalUri = uri;
-        }
+        try {
+            final ContentResolver cr = context.getContentResolver();
+            Uri uncanonicalUri = cr.uncanonicalize(uri);
+            if (uncanonicalUri == null) {
+                // If we already had an uncanonical URI, it's possible we'll get null back here. In
+                // this case, just use the URI as passed in since it wasn't canonicalized in the
+                // first place.
+                uncanonicalUri = uri;
+            }
 
-        for (int i = 0; i < uris.length && i < RINGTONES.length; i++) {
-            if (uris[i] == null) {
-                continue;
+            for (int i = 0; i < uris.length && i < RINGTONES.length; i++) {
+                if (uris[i] == null) {
+                    continue;
+                }
+                Uri mappedUri = cr.uncanonicalize(Uri.parse(uris[i]));
+                if (mappedUri == null) {
+                    continue;
+                }
+                if (mappedUri.equals(uncanonicalUri)) {
+                    return get(RINGTONES[i]);
+                }
             }
-            Uri mappedUri = cr.uncanonicalize(Uri.parse(uris[i]));
-            if (mappedUri == null) {
-                continue;
-            }
-            if (mappedUri.equals(uncanonicalUri)) {
-                return get(RINGTONES[i]);
-            }
+        } catch (Exception e) {
+            // Don't give unexpected exceptions to callers if the Uri's ContentProvider is
+            // misbehaving - it's very unlikely to be mapped in that case anyway.
+            Log.e(TAG, "Exception getting default vibration for Uri " + uri, e);
         }
         return null;
     }
@@ -564,18 +573,28 @@
     public abstract <T extends VibrationEffect> T scale(float scaleFactor);
 
     /**
-     * Applies given effect strength to prebaked effects represented by one of
-     * VibrationEffect.EFFECT_*.
+     * Ensures that the effect is repeating indefinitely or not. This is a lossy operation and
+     * should only be applied once to an original effect - it shouldn't be applied to the
+     * result of this method.
      *
-     * @param effectStrength new effect strength to be applied, one of
-     *                       VibrationEffect.EFFECT_STRENGTH_*.
-     * @return this if there is no change to this effect, or a copy of this effect with applied
-     * effect strength otherwise.
+     * <p>Non-repeating effects will be made repeating by looping the entire effect with the
+     * specified delay between each loop. The delay is added irrespective of whether the effect
+     * already has a delay at the beginning or end.
+     *
+     * <p>Repeating effects will be left with their native repeating portion if it should be
+     * repeating, and otherwise the loop index is removed, so that the entire effect plays once.
+     *
+     * @param wantRepeating Whether the effect is required to be repeating or not.
+     * @param loopDelayMs The milliseconds to pause between loops, if repeating is to be added to
+     *                    the effect. Ignored if {@code repeating==false} or the effect is already
+     *                    repeating itself. No delay is added if <= 0.
+     * @return this if the effect already satisfies the repeating requirement, or a copy of this
+     *         adjusted to repeat or not repeat as appropriate.
      * @hide
      */
-    public <T extends VibrationEffect> T applyEffectStrength(int effectStrength) {
-        return (T) this;
-    }
+    @NonNull
+    public abstract VibrationEffect applyRepeatingIndefinitely(
+            boolean wantRepeating, int loopDelayMs);
 
     /**
      * Scale given vibration intensity by the given factor.
@@ -612,6 +631,13 @@
         return MathUtils.constrain(a * fx, 0f, 1f);
     }
 
+    /**
+     * Returns a compact version of the {@link #toString()} result for debugging purposes.
+     *
+     * @hide
+     */
+    public abstract String toDebugString();
+
     /** @hide */
     public static String effectIdToString(int effectId) {
         switch (effectId) {
@@ -649,6 +675,22 @@
     }
 
     /**
+     * Transforms a {@link VibrationEffect} using a generic parameter.
+     *
+     * <p>This can be used for scaling effects based on user settings or adapting them to the
+     * capabilities of a specific device vibrator.
+     *
+     * @param <ParamT> The type of parameter to be used on the effect by this transformation
+     * @hide
+     */
+    public interface Transformation<ParamT> {
+
+        /** Transforms given effect by applying the given parameter. */
+        @NonNull
+        VibrationEffect transform(@NonNull VibrationEffect effect, @NonNull ParamT param);
+    }
+
+    /**
      * Implementation of {@link VibrationEffect} described by a composition of one or more
      * {@link VibrationEffectSegment}, with an optional index to represent repeating effects.
      *
@@ -660,7 +702,9 @@
         private final int mRepeatIndex;
 
         Composed(@NonNull Parcel in) {
-            this(in.readArrayList(VibrationEffectSegment.class.getClassLoader(), android.os.vibrator.VibrationEffectSegment.class), in.readInt());
+            this(in.readArrayList(
+                    VibrationEffectSegment.class.getClassLoader(), VibrationEffectSegment.class),
+                    in.readInt());
         }
 
         Composed(@NonNull VibrationEffectSegment segment) {
@@ -845,22 +889,32 @@
         /** @hide */
         @NonNull
         @Override
-        public Composed applyEffectStrength(int effectStrength) {
-            int segmentCount = mSegments.size();
-            ArrayList<VibrationEffectSegment> scaledSegments = new ArrayList<>(segmentCount);
-            for (int i = 0; i < segmentCount; i++) {
-                scaledSegments.add(mSegments.get(i).applyEffectStrength(effectStrength));
-            }
-            if (scaledSegments.equals(mSegments)) {
+        public Composed applyRepeatingIndefinitely(boolean wantRepeating, int loopDelayMs) {
+            boolean isRepeating = mRepeatIndex >= 0;
+            if (isRepeating == wantRepeating) {
                 return this;
+            } else if (!wantRepeating) {
+                return new Composed(mSegments, -1);
+            } else if (loopDelayMs <= 0) {
+                // Loop with no delay: repeat at index zero.
+                return new Composed(mSegments, 0);
+            } else {
+                // Append a delay and loop. It doesn't matter that there's a delay on the
+                // end because the looping is always indefinite until cancelled.
+                ArrayList<VibrationEffectSegment> loopingSegments =
+                        new ArrayList<>(mSegments.size() + 1);
+                loopingSegments.addAll(mSegments);
+                loopingSegments.add(
+                        new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, loopDelayMs));
+                return new Composed(loopingSegments, 0);
             }
-            Composed scaled = new Composed(scaledSegments, mRepeatIndex);
-            scaled.validate();
-            return scaled;
         }
 
         @Override
         public boolean equals(@Nullable Object o) {
+            if (this == o) {
+                return true;
+            }
             if (!(o instanceof Composed)) {
                 return false;
             }
@@ -880,6 +934,23 @@
                     + "}";
         }
 
+        /** @hide */
+        @Override
+        public String toDebugString() {
+            if (mSegments.size() == 1 && mRepeatIndex < 0) {
+                // Simplify effect string, use the single segment to represent it.
+                return mSegments.get(0).toDebugString();
+            }
+            StringJoiner sj = new StringJoiner(",", "[", "]");
+            for (int i = 0; i < mSegments.size(); i++) {
+                sj.add(mSegments.get(i).toDebugString());
+            }
+            if (mRepeatIndex >= 0) {
+                return String.format(Locale.ROOT, "%s, repeat=%d", sj, mRepeatIndex);
+            }
+            return sj.toString();
+        }
+
         @Override
         public int describeContents() {
             return 0;
@@ -908,7 +979,7 @@
         /**
          * Casts a provided {@link VibrationEffectSegment} to a {@link StepSegment} and returns it,
          * only if it can possibly be a segment for an effect created via
-         * {@link #createWaveform(int[], int)}. Otherwise, returns {@code null}.
+         * {@link #createWaveform(long[], int)}. Otherwise, returns {@code null}.
          */
         @Nullable
         private static StepSegment castToValidStepSegmentForOffOnTimingsOrNull(
@@ -1120,7 +1191,7 @@
          */
         @NonNull
         public Composition addPrimitive(@PrimitiveType int primitiveId) {
-            return addPrimitive(primitiveId, /*scale*/ 1.0f, /*delay*/ 0);
+            return addPrimitive(primitiveId, PrimitiveSegment.DEFAULT_SCALE);
         }
 
         /**
@@ -1135,7 +1206,7 @@
         @NonNull
         public Composition addPrimitive(@PrimitiveType int primitiveId,
                 @FloatRange(from = 0f, to = 1f) float scale) {
-            return addPrimitive(primitiveId, scale, /*delay*/ 0);
+            return addPrimitive(primitiveId, scale, PrimitiveSegment.DEFAULT_DELAY_MILLIS);
         }
 
         /**
@@ -1150,8 +1221,7 @@
         @NonNull
         public Composition addPrimitive(@PrimitiveType int primitiveId,
                 @FloatRange(from = 0f, to = 1f) float scale, @IntRange(from = 0) int delay) {
-            PrimitiveSegment primitive = new PrimitiveSegment(primitiveId, scale,
-                    delay);
+            PrimitiveSegment primitive = new PrimitiveSegment(primitiveId, scale, delay);
             primitive.validate();
             return addSegment(primitive);
         }
@@ -1206,23 +1276,23 @@
         public static String primitiveToString(@PrimitiveType int id) {
             switch (id) {
                 case PRIMITIVE_NOOP:
-                    return "PRIMITIVE_NOOP";
+                    return "NOOP";
                 case PRIMITIVE_CLICK:
-                    return "PRIMITIVE_CLICK";
+                    return "CLICK";
                 case PRIMITIVE_THUD:
-                    return "PRIMITIVE_THUD";
+                    return "THUD";
                 case PRIMITIVE_SPIN:
-                    return "PRIMITIVE_SPIN";
+                    return "SPIN";
                 case PRIMITIVE_QUICK_RISE:
-                    return "PRIMITIVE_QUICK_RISE";
+                    return "QUICK_RISE";
                 case PRIMITIVE_SLOW_RISE:
-                    return "PRIMITIVE_SLOW_RISE";
+                    return "SLOW_RISE";
                 case PRIMITIVE_QUICK_FALL:
-                    return "PRIMITIVE_QUICK_FALL";
+                    return "QUICK_FALL";
                 case PRIMITIVE_TICK:
-                    return "PRIMITIVE_TICK";
+                    return "TICK";
                 case PRIMITIVE_LOW_TICK:
-                    return "PRIMITIVE_LOW_TICK";
+                    return "LOW_TICK";
                 default:
                     return Integer.toString(id);
             }
diff --git a/core/java/android/os/VibratorInfo.java b/core/java/android/os/VibratorInfo.java
index 71ec096..02e6856 100644
--- a/core/java/android/os/VibratorInfo.java
+++ b/core/java/android/os/VibratorInfo.java
@@ -20,6 +20,7 @@
 import android.annotation.Nullable;
 import android.hardware.vibrator.Braking;
 import android.hardware.vibrator.IVibrator;
+import android.util.IndentingPrintWriter;
 import android.util.MathUtils;
 import android.util.Range;
 import android.util.SparseBooleanArray;
@@ -207,6 +208,25 @@
                 + '}';
     }
 
+    /** @hide */
+    public void dump(IndentingPrintWriter pw) {
+        pw.println("VibratorInfo:");
+        pw.increaseIndent();
+        pw.println("id = " + mId);
+        pw.println("capabilities = " + Arrays.toString(getCapabilitiesNames()));
+        pw.println("capabilitiesFlags = " + Long.toBinaryString(mCapabilities));
+        pw.println("supportedEffects = " + Arrays.toString(getSupportedEffectsNames()));
+        pw.println("supportedPrimitives = " + Arrays.toString(getSupportedPrimitivesNames()));
+        pw.println("supportedBraking = " + Arrays.toString(getSupportedBrakingNames()));
+        pw.println("primitiveDelayMax = " + mPrimitiveDelayMax);
+        pw.println("compositionSizeMax = " + mCompositionSizeMax);
+        pw.println("pwlePrimitiveDurationMax = " + mPwlePrimitiveDurationMax);
+        pw.println("pwleSizeMax = " + mPwleSizeMax);
+        pw.println("q-factor = " + mQFactor);
+        pw.println("frequencyProfile = " + mFrequencyProfile);
+        pw.decreaseIndent();
+    }
+
     /** Return the id of this vibrator. */
     public int getId() {
         return mId;
@@ -370,7 +390,7 @@
      * Gets the resonant frequency of the vibrator.
      *
      * @return the resonant frequency of the vibrator, or {@link Float#NaN NaN} if it's unknown or
-     *         this vibrator is a composite of multiple physical devices.
+     * this vibrator is a composite of multiple physical devices.
      */
     public float getResonantFrequencyHz() {
         return mFrequencyProfile.mResonantFrequencyHz;
@@ -380,7 +400,7 @@
      * Gets the <a href="https://en.wikipedia.org/wiki/Q_factor">Q factor</a> of the vibrator.
      *
      * @return the Q factor of the vibrator, or {@link Float#NaN NaN} if it's unknown or
-     *         this vibrator is a composite of multiple physical devices.
+     * this vibrator is a composite of multiple physical devices.
      */
     public float getQFactor() {
         return mQFactor;
diff --git a/core/java/android/os/health/SystemHealthManager.java b/core/java/android/os/health/SystemHealthManager.java
index 8181911..ab30a8b 100644
--- a/core/java/android/os/health/SystemHealthManager.java
+++ b/core/java/android/os/health/SystemHealthManager.java
@@ -16,17 +16,29 @@
 
 package android.os.health;
 
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.annotation.SystemService;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
 import android.os.BatteryStats;
 import android.os.Build;
+import android.os.Bundle;
+import android.os.IPowerStatsService;
+import android.os.PowerMonitor;
+import android.os.PowerMonitorReadings;
 import android.os.Process;
 import android.os.RemoteException;
+import android.os.ResultReceiver;
 import android.os.ServiceManager;
 
 import com.android.internal.app.IBatteryStats;
 
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+
 /**
  * Provides access to data about how various system resources are used by applications.
  * @more
@@ -46,20 +58,29 @@
  */
 @SystemService(Context.SYSTEM_HEALTH_SERVICE)
 public class SystemHealthManager {
+    @NonNull
     private final IBatteryStats mBatteryStats;
+    @Nullable
+    private final IPowerStatsService mPowerStats;
+    private PowerMonitor[] mPowerMonitorsInfo;
 
     /**
      * Construct a new SystemHealthManager object.
+     *
      * @hide
      */
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
     public SystemHealthManager() {
-        this(IBatteryStats.Stub.asInterface(ServiceManager.getService(BatteryStats.SERVICE_NAME)));
+        this(IBatteryStats.Stub.asInterface(ServiceManager.getService(BatteryStats.SERVICE_NAME)),
+                IPowerStatsService.Stub.asInterface(
+                        ServiceManager.getService(Context.POWER_STATS_SERVICE)));
     }
 
     /** {@hide} */
-    public SystemHealthManager(IBatteryStats batteryStats) {
+    public SystemHealthManager(@NonNull IBatteryStats batteryStats,
+            @Nullable IPowerStatsService powerStats) {
         mBatteryStats = batteryStats;
+        mPowerStats = powerStats;
     }
 
     /**
@@ -69,22 +90,20 @@
      */
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
     public static SystemHealthManager from(Context context) {
-        return (SystemHealthManager)context.getSystemService(Context.SYSTEM_HEALTH_SERVICE);
+        return (SystemHealthManager) context.getSystemService(Context.SYSTEM_HEALTH_SERVICE);
     }
 
     /**
      * Return a {@link HealthStats} object containing a snapshot of system health
      * metrics for the given uid (user-id, which in usually corresponds to application).
-     * @more
-     *
-     * An application must hold the {@link android.Manifest.permission#BATTERY_STATS
-     * android.permission.BATTERY_STATS} permission in order to retrieve any HealthStats
-     * other than its own.
      *
      * @param uid User ID for a given application.
      * @return A {@link HealthStats} object containing the metrics for the requested
      * application. The keys for this HealthStats object will be from the {@link UidHealthStats}
      * class.
+     * @more An application must hold the {@link android.Manifest.permission#BATTERY_STATS
+     * android.permission.BATTERY_STATS} permission in order to retrieve any HealthStats
+     * other than its own.
      * @see Process#myUid() Process.myUid()
      */
     public HealthStats takeUidSnapshot(int uid) {
@@ -111,23 +130,21 @@
     /**
      * Return a {@link HealthStats} object containing a snapshot of system health
      * metrics for the given uids (user-id, which in usually corresponds to application).
-     * @more
-     *
-     * An application must hold the {@link android.Manifest.permission#BATTERY_STATS
-     * android.permission.BATTERY_STATS} permission in order to retrieve any HealthStats
-     * other than its own.
      *
      * @param uids An array of User IDs to retrieve.
      * @return An array of {@link HealthStats} objects containing the metrics for each of
      * the requested uids. The keys for this HealthStats object will be from the
      * {@link UidHealthStats} class.
+     * @more An application must hold the {@link android.Manifest.permission#BATTERY_STATS
+     * android.permission.BATTERY_STATS} permission in order to retrieve any HealthStats
+     * other than its own.
      */
     public HealthStats[] takeUidSnapshots(int[] uids) {
         try {
             final HealthStatsParceler[] parcelers = mBatteryStats.takeUidSnapshots(uids);
             final HealthStats[] results = new HealthStats[uids.length];
             final int N = uids.length;
-            for (int i=0; i<N; i++) {
+            for (int i = 0; i < N; i++) {
                 results[i] = parcelers[i].getHealthStats();
             }
             return results;
@@ -136,5 +153,121 @@
         }
     }
 
-}
+    /**
+     * Returns a list of supported power monitors, which include raw ODPM rails and
+     * modeled energy consumers.  If ODPM is unsupported by PowerStats HAL, this method returns
+     * an empty array.
+     *
+     * @hide
+     */
+    @NonNull
+    public PowerMonitor[] getSupportedPowerMonitors() {
+        synchronized (this) {
+            if (mPowerMonitorsInfo != null) {
+                return mPowerMonitorsInfo;
+            }
 
+            CompletableFuture<PowerMonitor[]> future = new CompletableFuture<>();
+            getSupportedPowerMonitors(future);
+            try {
+                return future.get();
+            } catch (InterruptedException | ExecutionException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    /**
+     * Retrieves a list of supported power monitors, see {@link #getSupportedPowerMonitors()}
+     *
+     * @hide
+     */
+    public void getSupportedPowerMonitors(@NonNull CompletableFuture<PowerMonitor[]> future) {
+        synchronized (this) {
+            if (mPowerMonitorsInfo != null) {
+                future.complete(mPowerMonitorsInfo);
+                return;
+            }
+            try {
+                if (mPowerStats == null) {
+                    mPowerMonitorsInfo = new PowerMonitor[0];
+                    future.complete(mPowerMonitorsInfo);
+                    return;
+                }
+
+                mPowerStats.getSupportedPowerMonitors(new ResultReceiver(null) {
+                    @Override
+                    protected void onReceiveResult(int resultCode, Bundle resultData) {
+                        synchronized (this) {
+                            mPowerMonitorsInfo = resultData.getParcelableArray(
+                                    IPowerStatsService.KEY_MONITORS, PowerMonitor.class);
+                        }
+                        future.complete(mPowerMonitorsInfo);
+                    }
+                });
+            } catch (RemoteException e) {
+                throw e.rethrowFromSystemServer();
+            }
+        }
+    }
+
+    /**
+     * Retrieves the accumulated power consumption reported by the specified power monitors.
+     *
+     * @param powerMonitors power monitors to be returned.
+     * @hide
+     */
+    @NonNull
+    public PowerMonitorReadings getPowerMonitorReadings(@NonNull PowerMonitor[] powerMonitors) {
+        CompletableFuture<PowerMonitorReadings> future = new CompletableFuture<>();
+        getPowerMonitorReadings(powerMonitors, future);
+        try {
+            return future.get();
+        } catch (InterruptedException | ExecutionException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static final Comparator<PowerMonitor> POWER_MONITOR_COMPARATOR =
+            Comparator.comparingInt(pm -> pm.index);
+
+    /**
+     * @param powerMonitors power monitors to be retrieved.
+     * @hide
+     */
+    public void getPowerMonitorReadings(@NonNull PowerMonitor[] powerMonitors,
+            @NonNull CompletableFuture<PowerMonitorReadings> future) {
+        if (mPowerStats == null) {
+            future.completeExceptionally(
+                    new IllegalArgumentException("Unsupported power monitor"));
+            return;
+        }
+
+        Arrays.sort(powerMonitors, POWER_MONITOR_COMPARATOR);
+        int[] indices = new int[powerMonitors.length];
+        for (int i = 0; i < powerMonitors.length; i++) {
+            indices[i] = powerMonitors[i].index;
+        }
+        try {
+            mPowerStats.getPowerMonitorReadings(indices, new ResultReceiver(null) {
+                @Override
+                protected void onReceiveResult(int resultCode, Bundle resultData) {
+                    if (resultCode == IPowerStatsService.RESULT_SUCCESS) {
+                        future.complete(new PowerMonitorReadings(powerMonitors,
+                                resultData.getLongArray(IPowerStatsService.KEY_ENERGY),
+                                resultData.getLongArray(IPowerStatsService.KEY_TIMESTAMPS)));
+                    } else if (resultCode == IPowerStatsService.RESULT_UNSUPPORTED_POWER_MONITOR) {
+                        future.completeExceptionally(
+                                new IllegalArgumentException("Unsupported power monitor"));
+                    } else {
+                        future.completeExceptionally(
+                                new IllegalStateException(
+                                        "Unrecognized result code " + resultCode));
+                    }
+                }
+            });
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+}
diff --git a/core/java/android/os/storage/OWNERS b/core/java/android/os/storage/OWNERS
index e5b76f6..bf22dcc 100644
--- a/core/java/android/os/storage/OWNERS
+++ b/core/java/android/os/storage/OWNERS
@@ -4,14 +4,16 @@
 
 # Android Storage Team
 alukin@google.com
-corinac@google.com
+ankitavyas@google.com
 dipankarb@google.com
+gargshivam@google.com
 krishang@google.com
+riyaghai@google.com
 sahanas@google.com
 sergeynv@google.com
+shikhamalhotra@google.com
 shubhisaxena@google.com
 tylersaunders@google.com
 
 maco@google.com
 nandana@google.com
-narayan@google.com
diff --git a/core/java/android/os/vibrator/PrebakedSegment.java b/core/java/android/os/vibrator/PrebakedSegment.java
index cc76ffa..42b6c2da 100644
--- a/core/java/android/os/vibrator/PrebakedSegment.java
+++ b/core/java/android/os/vibrator/PrebakedSegment.java
@@ -33,6 +33,13 @@
  */
 @TestApi
 public final class PrebakedSegment extends VibrationEffectSegment {
+
+    /** @hide */
+    public static final int DEFAULT_STRENGTH = VibrationEffect.EFFECT_STRENGTH_MEDIUM;
+
+    /** @hide */
+    public static final boolean DEFAULT_SHOULD_FALLBACK = true;
+
     private final int mEffectId;
     private final boolean mFallback;
     private final int mEffectStrength;
@@ -112,12 +119,6 @@
     }
 
     /** @hide */
-    @Override
-    public boolean hasNonZeroAmplitude() {
-        return true;
-    }
-
-    /** @hide */
     @NonNull
     @Override
     public PrebakedSegment resolve(int defaultAmplitude) {
@@ -202,6 +203,15 @@
                 + "}";
     }
 
+    /** @hide */
+    @Override
+    public String toDebugString() {
+        return String.format("Prebaked=%s(%s, %s fallback)",
+                VibrationEffect.effectIdToString(mEffectId),
+                VibrationEffect.effectStrengthToString(mEffectStrength),
+                mFallback ? "with" : "no");
+    }
+
     @Override
     public int describeContents() {
         return 0;
diff --git a/core/java/android/os/vibrator/PrimitiveSegment.java b/core/java/android/os/vibrator/PrimitiveSegment.java
index cde0ff3..c52a09c 100644
--- a/core/java/android/os/vibrator/PrimitiveSegment.java
+++ b/core/java/android/os/vibrator/PrimitiveSegment.java
@@ -36,6 +36,13 @@
  */
 @TestApi
 public final class PrimitiveSegment extends VibrationEffectSegment {
+
+    /** @hide */
+    public static final float DEFAULT_SCALE = 1f;
+
+    /** @hide */
+    public static final int DEFAULT_DELAY_MILLIS = 0;
+
     private final int mPrimitiveId;
     private final float mScale;
     private final int mDelay;
@@ -81,13 +88,6 @@
     }
 
     /** @hide */
-    @Override
-    public boolean hasNonZeroAmplitude() {
-        // Every primitive plays a vibration with a non-zero amplitude, even at scale == 0.
-        return true;
-    }
-
-    /** @hide */
     @NonNull
     @Override
     public PrimitiveSegment resolve(int defaultAmplitude) {
@@ -140,6 +140,13 @@
                 + '}';
     }
 
+    /** @hide */
+    @Override
+    public String toDebugString() {
+        return String.format("Primitive=%s(scale=%.2f, delay=%dms)",
+                VibrationEffect.Composition.primitiveToString(mPrimitiveId), mScale, mDelay);
+    }
+
     @Override
     public boolean equals(@Nullable Object o) {
         if (this == o) return true;
diff --git a/core/java/android/os/vibrator/RampSegment.java b/core/java/android/os/vibrator/RampSegment.java
index 034962a..e997bcd 100644
--- a/core/java/android/os/vibrator/RampSegment.java
+++ b/core/java/android/os/vibrator/RampSegment.java
@@ -125,12 +125,6 @@
 
     /** @hide */
     @Override
-    public boolean hasNonZeroAmplitude() {
-        return mStartAmplitude > 0 || mEndAmplitude > 0;
-    }
-
-    /** @hide */
-    @Override
     public void validate() {
         VibrationEffectSegment.checkFrequencyArgument(mStartFrequencyHz, "startFrequencyHz");
         VibrationEffectSegment.checkFrequencyArgument(mEndFrequencyHz, "endFrequencyHz");
@@ -185,6 +179,17 @@
                 + "}";
     }
 
+    /** @hide */
+    @Override
+    public String toDebugString() {
+        return String.format("Ramp=%dms(amplitude=%.2f%s to %.2f%s)",
+                mDuration,
+                mStartAmplitude,
+                Float.compare(mStartFrequencyHz, 0) == 0 ? "" : " @ " + mStartFrequencyHz + "Hz",
+                mEndAmplitude,
+                Float.compare(mEndFrequencyHz, 0) == 0 ? "" : " @ " + mEndFrequencyHz + "Hz");
+    }
+
     @Override
     public int describeContents() {
         return 0;
diff --git a/core/java/android/os/vibrator/StepSegment.java b/core/java/android/os/vibrator/StepSegment.java
index 115a66c..a585aa8 100644
--- a/core/java/android/os/vibrator/StepSegment.java
+++ b/core/java/android/os/vibrator/StepSegment.java
@@ -101,18 +101,15 @@
 
     /** @hide */
     @Override
-    public boolean hasNonZeroAmplitude() {
-        // DEFAULT_AMPLITUDE == -1 is still a non-zero amplitude that will be resolved later.
-        return Float.compare(mAmplitude, 0) != 0;
-    }
-
-    /** @hide */
-    @Override
     public void validate() {
         VibrationEffectSegment.checkFrequencyArgument(mFrequencyHz, "frequencyHz");
         VibrationEffectSegment.checkDurationArgument(mDuration, "duration");
         if (Float.compare(mAmplitude, VibrationEffect.DEFAULT_AMPLITUDE) != 0) {
             Preconditions.checkArgumentInRange(mAmplitude, 0f, 1f, "amplitude");
+            VibrationEffectSegment.checkFrequencyArgument(mFrequencyHz, "frequencyHz");
+        } else if (Float.compare(mFrequencyHz, 0) != 0) {
+            throw new IllegalArgumentException(
+                    "frequency must be default when amplitude is set to default");
         }
     }
 
@@ -164,6 +161,13 @@
                 + "}";
     }
 
+    /** @hide */
+    @Override
+    public String toDebugString() {
+        return String.format("Step=%dms(amplitude=%.2f%s)", mDuration, mAmplitude,
+                Float.compare(mFrequencyHz, 0) == 0 ? "" : " @ " + mFrequencyHz + "Hz");
+    }
+
     @Override
     public int describeContents() {
         return 0;
diff --git a/core/java/android/os/vibrator/VibrationConfig.java b/core/java/android/os/vibrator/VibrationConfig.java
index 4a61472..bde334a 100644
--- a/core/java/android/os/vibrator/VibrationConfig.java
+++ b/core/java/android/os/vibrator/VibrationConfig.java
@@ -32,6 +32,9 @@
 import android.os.VibrationAttributes;
 import android.os.Vibrator;
 import android.os.Vibrator.VibrationIntensity;
+import android.util.IndentingPrintWriter;
+
+import java.io.PrintWriter;
 
 /**
  * List of device-specific internal vibration configuration loaded from platform config.xml.
@@ -49,6 +52,8 @@
     private final int mRampStepDurationMs;
     private final int mRampDownDurationMs;
 
+    private final boolean mIgnoreVibrationsOnWirelessCharger;
+
     @VibrationIntensity
     private final int mDefaultAlarmVibrationIntensity;
     @VibrationIntensity
@@ -69,6 +74,9 @@
         mRampStepDurationMs = loadInteger(resources,
                 com.android.internal.R.integer.config_vibrationWaveformRampStepDuration, 0);
 
+        mIgnoreVibrationsOnWirelessCharger = loadBoolean(resources,
+                com.android.internal.R.bool.config_ignoreVibrationsOnWirelessCharger, false);
+
         mDefaultAlarmVibrationIntensity = loadDefaultIntensity(resources,
                 com.android.internal.R.integer.config_defaultAlarmVibrationIntensity);
         mDefaultHapticFeedbackIntensity = loadDefaultIntensity(resources,
@@ -99,6 +107,10 @@
         return res != null ? res.getInteger(resId) : defaultValue;
     }
 
+    private static boolean loadBoolean(@Nullable Resources res, int resId, boolean defaultValue) {
+        return res != null ? res.getBoolean(resId) : defaultValue;
+    }
+
     /**
      * Return the maximum amplitude the vibrator can play using the audio haptic channels.
      *
@@ -135,6 +147,16 @@
         return mRampStepDurationMs;
     }
 
+    /**
+     * Whether or not vibrations are ignored if the device is on a wireless charger.
+     *
+     * <p>This may be the case if vibration during wireless charging causes unwanted results, like
+     * moving the device out of alignment with the charging pad.
+     */
+    public boolean ignoreVibrationsOnWirelessCharger() {
+        return mIgnoreVibrationsOnWirelessCharger;
+    }
+
     /** Get the default vibration intensity for given usage. */
     @VibrationIntensity
     public int getDefaultVibrationIntensity(@VibrationAttributes.Usage int usage) {
@@ -172,4 +194,18 @@
                 + ", mDefaultRingIntensity=" + mDefaultRingVibrationIntensity
                 + "}";
     }
+
+    /**
+     * Write current settings into given {@link PrintWriter}, skipping the default settings.
+     *
+     * @hide
+     */
+    public void dumpWithoutDefaultSettings(IndentingPrintWriter pw) {
+        pw.println("VibrationConfig:");
+        pw.increaseIndent();
+        pw.println("hapticChannelMaxAmplitude = " + mHapticChannelMaxVibrationAmplitude);
+        pw.println("rampStepDurationMs = " + mRampStepDurationMs);
+        pw.println("rampDownDurationMs = " + mRampDownDurationMs);
+        pw.decreaseIndent();
+    }
 }
diff --git a/core/java/android/os/vibrator/VibrationEffectSegment.java b/core/java/android/os/vibrator/VibrationEffectSegment.java
index 75a055f..3b286a7 100644
--- a/core/java/android/os/vibrator/VibrationEffectSegment.java
+++ b/core/java/android/os/vibrator/VibrationEffectSegment.java
@@ -76,13 +76,6 @@
     public abstract boolean isHapticFeedbackCandidate();
 
     /**
-     * Returns true if this segment plays at a non-zero amplitude at some point.
-     *
-     * @hide
-     */
-    public abstract boolean hasNonZeroAmplitude();
-
-    /**
      * Validates the segment, throwing exceptions if any parameter is invalid.
      *
      * @hide
@@ -123,6 +116,13 @@
     public abstract <T extends VibrationEffectSegment> T applyEffectStrength(int effectStrength);
 
     /**
+     * Returns a compact version of the {@link #toString()} result for debugging purposes.
+     *
+     * @hide
+     */
+    public abstract String toDebugString();
+
+    /**
      * Checks the given frequency argument is valid to represent a vibration effect frequency in
      * hertz, i.e. a finite non-negative value.
      *
diff --git a/core/java/android/os/vibrator/persistence/VibrationXmlParser.java b/core/java/android/os/vibrator/persistence/VibrationXmlParser.java
new file mode 100644
index 0000000..e91e04e
--- /dev/null
+++ b/core/java/android/os/vibrator/persistence/VibrationXmlParser.java
@@ -0,0 +1,238 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.os.vibrator.persistence;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.TestApi;
+import android.os.VibrationEffect;
+import android.util.Slog;
+import android.util.Xml;
+
+import com.android.internal.vibrator.persistence.VibrationEffectXmlParser;
+import com.android.internal.vibrator.persistence.XmlConstants;
+import com.android.internal.vibrator.persistence.XmlParserException;
+import com.android.internal.vibrator.persistence.XmlReader;
+import com.android.modules.utils.TypedXmlPullParser;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Parses XML into a {@link VibrationEffect}.
+ *
+ * <p>This parser supports a root element that represent a single vibration effect as follows:
+ *
+ * * Predefined vibration effects
+ *
+ * <pre>
+ *   {@code
+ *     <vibration>
+ *       <predefined-effect name="click" />
+ *     </vibration>
+ *   }
+ * </pre>
+ *
+ * * Waveform vibration effects
+ *
+ * <pre>
+ *   {@code
+ *     <vibration>
+ *       <waveform-effect>
+ *         <waveform-entry amplitude="default" durationMs="10" />
+ *         <waveform-entry amplitude="0" durationMs="10" />
+ *         <waveform-entry amplitude="255" durationMs="100" />
+ *         <repeating>
+ *           <waveform-entry amplitude="128" durationMs="30" />
+ *           <waveform-entry amplitude="192" durationMs="60" />
+ *           <waveform-entry amplitude="255" durationMs="20" />
+ *         </repeating>
+ *       </waveform-effect>
+ *     </vibration>
+ *   }
+ * </pre>
+ *
+ * * Primitive composition effects
+ *
+ * <pre>
+ *   {@code
+ *     <vibration>
+ *       <primitive-effect name="click" />
+ *       <primitive-effect name="slow_rise" scale="0.8" />
+ *       <primitive-effect name="quick_fall" delayMs="50" />
+ *       <primitive-effect name="tick" scale="0.5" delayMs="100" />
+ *     </vibration>
+ *   }
+ * </pre>
+ *
+ * @hide
+ */
+@TestApi
+public final class VibrationXmlParser {
+    private static final String TAG = "VibrationXmlParser";
+
+    /**
+     * The MIME type for a xml holding a vibration.
+     *
+     * <p>This should match the type registered at android.mime.types.
+     *
+     * @hide
+     */
+    public static final String APPLICATION_VIBRATION_XML_MIME_TYPE =
+            "application/vnd.android.haptics.vibration+xml";
+
+    /**
+     * Allows {@link VibrationEffect} instances created via non-public APIs to be parsed/serialized.
+     *
+     * <p>Note that the XML schema for non-public APIs is not backwards compatible. This is intended
+     * for loading custom {@link VibrationEffect} configured per device and platform version, not
+     * to be restored from old platform versions.
+     *
+     * @hide
+     */
+    public static final int FLAG_ALLOW_HIDDEN_APIS = 1 << 0; // Same as VibrationXmlSerializer
+
+    /** @hide */
+    @IntDef(prefix = { "FLAG_" }, flag = true, value = {
+            FLAG_ALLOW_HIDDEN_APIS
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Flags {}
+
+    /**
+     * Returns whether this parser supports parsing files of the given MIME type.
+     *
+     * <p>Returns false for {@code null} value.
+     *
+     * <p><em>Note: MIME type matching in the Android framework is case-sensitive, unlike the formal
+     * RFC definitions. As a result, you should always write these elements with lower case letters,
+     * or use {@link android.content.Intent#normalizeMimeType} to ensure that they are converted to
+     * lower case.</em>
+     *
+     * @hide
+     */
+    public static boolean isSupportedMimeType(@Nullable String mimeType) {
+        // NOTE: prefer using MimeTypeFilter.matches() if MIME_TYPE_VIBRATION_XML becomes a filter
+        // or if more than one MIME type is supported by this parser.
+        return APPLICATION_VIBRATION_XML_MIME_TYPE.equals(mimeType);
+    }
+
+    /**
+     * Parses XML content from given input stream into a {@link VibrationEffect}.
+     *
+     * <p>This parser fails silently and returns {@code null} if the content of the input stream
+     * does not follow the schema or has unsupported values.
+     *
+     * @return the {@link VibrationEffect} if parsed successfully, {@code null} otherwise.
+     * @throws IOException error reading from given {@link Reader}
+     *
+     * @hide
+     */
+    @TestApi
+    @Nullable
+    public static VibrationEffect parse(@NonNull Reader reader) throws IOException {
+        return parse(reader, /* flags= */ 0);
+    }
+
+    /**
+     * Parses XML content from given input stream into a {@link VibrationEffect}.
+     *
+     * <p>Same as {@link #parse(Reader)}, with extra flags to control the parsing behavior.
+     *
+     * @hide
+     */
+    @Nullable
+    public static VibrationEffect parse(@NonNull Reader reader, @Flags int flags)
+            throws IOException {
+        TypedXmlPullParser parser = Xml.newFastPullParser();
+
+        try {
+            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
+            parser.setInput(reader);
+        } catch (XmlPullParserException e) {
+            throw new RuntimeException("An error occurred while setting up the XML parser", e);
+        }
+
+        try {
+            // Ensure XML starts with expected root tag.
+            XmlReader.readDocumentStartTag(parser, XmlConstants.TAG_VIBRATION);
+
+            // Parse root tag as a vibration effect.
+            VibrationEffect effect = parseTag(parser, flags);
+
+            // Ensure XML ends after root tag is consumed.
+            XmlReader.readDocumentEndTag(parser);
+
+            return effect;
+        } catch (XmlParserException | VibrationXmlParserException e) {
+            Slog.w(TAG, "Error parsing vibration XML", e);
+            return null;
+        }
+    }
+
+    /**
+     * Parses XML content from given open {@link TypedXmlPullParser} into a {@link VibrationEffect}.
+     *
+     * <p>The provided parser should be pointing to a start of a valid vibration XML (i.e. to a
+     * start <vibration> tag). No other parser position, including start of document, is considered
+     * valid.
+     *
+     * <p>This method parses as long as it reads a valid vibration XML, and until an end vibration
+     * tag. After a successful parsing, the parser will point to the end vibration tag (i.e. to a
+     * </vibration> tag).
+     *
+     * @throws IOException error parsing from given {@link TypedXmlPullParser}.
+     * @throws VibrationXmlParserException if the XML tag cannot be parsed into a
+     *      {@link VibrationEffect}. The given {@code parser} might be pointing to a child XML tag
+     *      that caused the parser failure.
+     *
+     * @hide
+     */
+    @NonNull
+    public static VibrationEffect parseTag(@NonNull TypedXmlPullParser parser, @Flags int flags)
+            throws IOException, VibrationXmlParserException {
+        int parserFlags = 0;
+        if ((flags & VibrationXmlParser.FLAG_ALLOW_HIDDEN_APIS) != 0) {
+            parserFlags |= XmlConstants.FLAG_ALLOW_HIDDEN_APIS;
+        }
+        try {
+            return VibrationEffectXmlParser.parseTag(parser, parserFlags).deserialize();
+        } catch (XmlParserException e) {
+            throw new VibrationXmlParserException("Error parsing vibration effect.", e);
+        }
+    }
+
+    /**
+     * Represents an error while parsing a vibration XML input.
+     *
+     * @hide
+     */
+    public static final class VibrationXmlParserException extends Exception {
+        private VibrationXmlParserException(String message, Throwable cause) {
+            super(message, cause);
+        }
+    }
+
+    private VibrationXmlParser() {
+    }
+}
diff --git a/core/java/android/os/vibrator/persistence/VibrationXmlSerializer.java b/core/java/android/os/vibrator/persistence/VibrationXmlSerializer.java
new file mode 100644
index 0000000..1cdfa4f
--- /dev/null
+++ b/core/java/android/os/vibrator/persistence/VibrationXmlSerializer.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.os.vibrator.persistence;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.TestApi;
+import android.os.CombinedVibration;
+import android.os.VibrationEffect;
+import android.util.Xml;
+
+import com.android.internal.vibrator.persistence.VibrationEffectXmlSerializer;
+import com.android.internal.vibrator.persistence.XmlConstants;
+import com.android.internal.vibrator.persistence.XmlSerializedVibration;
+import com.android.internal.vibrator.persistence.XmlSerializerException;
+import com.android.internal.vibrator.persistence.XmlValidator;
+import com.android.modules.utils.TypedXmlSerializer;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Serializes {@link CombinedVibration} and {@link VibrationEffect} instances to XML.
+ *
+ * <p>This uses the same schema expected by the {@link VibrationXmlParser}.
+ *
+ * @hide
+ */
+@TestApi
+public final class VibrationXmlSerializer {
+
+    /**
+     * Allows {@link VibrationEffect} instances created via non-public APIs to be parsed/serialized.
+     *
+     * <p>Note that the XML schema for non-public APIs is not backwards compatible. This is intended
+     * for loading custom {@link VibrationEffect} configured per device and platform version, not
+     * to be restored from old platform versions or from different devices.
+     *
+     * @hide
+     */
+    public static final int FLAG_ALLOW_HIDDEN_APIS = 1 << 0;
+
+    /**
+     * Writes a more human-readable output XML.
+     *
+     * <p>This will be less compact as it includes extra whitespace for things like indentation.
+     *
+     * @hide
+     */
+    public static final int FLAG_PRETTY_PRINT = 1 << 1;
+
+    /** @hide */
+    @IntDef(prefix = { "FLAG_" }, flag = true, value = {
+            FLAG_PRETTY_PRINT,
+            FLAG_ALLOW_HIDDEN_APIS
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Flags {}
+
+    private static final String XML_ENCODING = Xml.Encoding.UTF_8.name();
+    private static final String XML_FEATURE_INDENT_OUTPUT =
+            "http://xmlpull.org/v1/doc/features.html#indent-output";
+
+    /**
+     * Serializes a {@link VibrationEffect} to XML and writes output to given {@link Writer}.
+     *
+     * <p>This method will only write into the {@link Writer} if the effect can successfully
+     * be represented by the XML serialization. It will throw an exception otherwise.
+     *
+     * @throws SerializationFailedException serialization of input effect failed, no data was
+     *                                      written into given {@link Writer}.
+     * @throws IOException error writing to given {@link Writer}.
+     *
+     * @hide
+     */
+    @TestApi
+    public static void serialize(@NonNull VibrationEffect effect, @NonNull Writer writer)
+            throws SerializationFailedException, IOException {
+        serialize(effect, writer, /* flags= */ 0);
+    }
+
+    /**
+     * Serializes a {@link VibrationEffect} to XML and writes output to given {@link Writer}.
+     *
+     * <p>Same as {@link #serialize(VibrationEffect, Writer)}, with extra flags to control the
+     * serialization behavior.
+     *
+     * @hide
+     */
+    public static void serialize(@NonNull VibrationEffect effect, @NonNull Writer writer,
+            @Flags int flags) throws SerializationFailedException, IOException {
+        // Serialize effect first to fail early.
+        XmlSerializedVibration<VibrationEffect> serializedVibration =
+                toSerializedVibration(effect, flags);
+        TypedXmlSerializer xmlSerializer = Xml.newFastSerializer();
+        xmlSerializer.setFeature(XML_FEATURE_INDENT_OUTPUT, (flags & FLAG_PRETTY_PRINT) != 0);
+        xmlSerializer.setOutput(writer);
+        xmlSerializer.startDocument(XML_ENCODING, /* standalone= */ false);
+        serializedVibration.write(xmlSerializer);
+        xmlSerializer.endDocument();
+    }
+
+    private static XmlSerializedVibration<VibrationEffect> toSerializedVibration(
+            VibrationEffect effect, @Flags int flags) throws SerializationFailedException {
+        XmlSerializedVibration<VibrationEffect> serializedVibration;
+        int serializerFlags = 0;
+        if ((flags & FLAG_ALLOW_HIDDEN_APIS) != 0) {
+            serializerFlags |= XmlConstants.FLAG_ALLOW_HIDDEN_APIS;
+        }
+
+        try {
+            serializedVibration = VibrationEffectXmlSerializer.serialize(effect, serializerFlags);
+            XmlValidator.checkSerializedVibration(serializedVibration, effect);
+        } catch (XmlSerializerException e) {
+            // Serialization failed or created incomplete representation, fail before writing.
+            throw new SerializationFailedException(effect, e);
+        }
+
+        return serializedVibration;
+    }
+
+    /**
+     * Exception thrown when a {@link VibrationEffect} instance serialization fails.
+     *
+     * <p>The serialization can fail if a given vibration cannot be represented using the public
+     * format, or if it uses hidden APIs that are not supported for serialization (e.g.
+     * {@link VibrationEffect.WaveformBuilder}).
+     *
+     * @hide
+     */
+    @TestApi
+    public static final class SerializationFailedException extends RuntimeException {
+        SerializationFailedException(VibrationEffect effect, Throwable cause) {
+            super("Serialization failed for vibration effect " + effect, cause);
+        }
+    }
+
+    private VibrationXmlSerializer() {
+    }
+}
diff --git a/core/java/android/permission/IPermissionManager.aidl b/core/java/android/permission/IPermissionManager.aidl
index 16ae3bc..18ede44d 100644
--- a/core/java/android/permission/IPermissionManager.aidl
+++ b/core/java/android/permission/IPermissionManager.aidl
@@ -42,10 +42,10 @@
 
     void removePermission(String permissionName);
 
-    int getPermissionFlags(String packageName, String permissionName, int userId);
+    int getPermissionFlags(String packageName, String permissionName, int deviceId, int userId);
 
     void updatePermissionFlags(String packageName, String permissionName, int flagMask,
-            int flagValues, boolean checkAdjustPolicyFlagPermission, int userId);
+            int flagValues, boolean checkAdjustPolicyFlagPermission, int deviceId, int userId);
 
     void updatePermissionFlagsForAllApps(int flagMask, int flagValues, int userId);
 
@@ -62,20 +62,22 @@
     boolean removeAllowlistedRestrictedPermission(String packageName, String permissionName,
             int flags, int userId);
 
-    void grantRuntimePermission(String packageName, String permissionName, int userId);
+    void grantRuntimePermission(String packageName, String permissionName, int deviceId, int userId);
 
-    void revokeRuntimePermission(String packageName, String permissionName, int userId,
-            String reason);
+    void revokeRuntimePermission(String packageName, String permissionName, int deviceId,
+            int userId, String reason);
 
     void revokePostNotificationPermissionWithoutKillForTest(String packageName, int userId);
 
     boolean shouldShowRequestPermissionRationale(String packageName, String permissionName,
-            int userId);
+            int deviceId, int userId);
 
-    boolean isPermissionRevokedByPolicy(String packageName, String permissionName, int userId);
+    boolean isPermissionRevokedByPolicy(String packageName, String permissionName, int deviceId,
+            int userId);
 
     List<SplitPermissionInfoParcelable> getSplitPermissions();
 
+    @EnforcePermission("MANAGE_ONE_TIME_PERMISSION_SESSIONS")
     void startOneTimePermissionSession(String packageName, int userId, long timeout,
             long revokeAfterKilledDelay);
 
@@ -93,4 +95,8 @@
     void registerAttributionSource(in AttributionSourceState source);
 
     boolean isRegisteredAttributionSource(in AttributionSourceState source);
+
+    int checkPermission(String packageName, String permissionName, int deviceId, int userId);
+
+    int checkUidPermission(int uid, String permissionName, int deviceId);
 }
diff --git a/core/java/android/permission/PermissionControllerManager.java b/core/java/android/permission/PermissionControllerManager.java
index 46276c0..84a197a 100644
--- a/core/java/android/permission/PermissionControllerManager.java
+++ b/core/java/android/permission/PermissionControllerManager.java
@@ -702,6 +702,8 @@
         }, executor);
     }
 
+    // TODO(b/272129940): Remove this API and device profile role description when we drop T
+    //  support.
     /**
      * Gets the description of the privileges associated with the given device profiles
      *
@@ -709,8 +711,11 @@
      * @param executor Executor on which to invoke the callback
      * @param callback Callback to receive the result
      *
+     * @deprecated Device profile privilege descriptions have been bundled in CDM APK since T.
+     *
      * @hide
      */
+    @Deprecated
     @RequiresPermission(Manifest.permission.MANAGE_COMPANION_DEVICES)
     public void getPrivilegesDescriptionStringForProfile(
             @NonNull String profileName,
diff --git a/core/java/android/permission/PermissionControllerService.java b/core/java/android/permission/PermissionControllerService.java
index 4efffc5a..11005a6 100644
--- a/core/java/android/permission/PermissionControllerService.java
+++ b/core/java/android/permission/PermissionControllerService.java
@@ -348,6 +348,8 @@
         throw new AbstractMethodError("Must be overridden in implementing class");
     }
 
+    // TODO(b/272129940): Remove this API and device profile role description when we drop T
+    //  support.
     /**
      * Get a user-readable sentence, describing the set of privileges that are to be granted to a
      * companion app managing a device of the given profile.
@@ -355,8 +357,11 @@
      * @param deviceProfileName the
      *      {@link android.companion.AssociationRequest.DeviceProfile device profile} name
      *
+     * @deprecated Device profile privilege descriptions have been bundled in CDM APK since T.
+     *
      * @hide
      */
+    @Deprecated
     @SystemApi
     @RequiresPermission(Manifest.permission.MANAGE_COMPANION_DEVICES)
     @NonNull
diff --git a/core/java/android/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java
index b0dda6f..7d39210 100644
--- a/core/java/android/permission/PermissionManager.java
+++ b/core/java/android/permission/PermissionManager.java
@@ -66,6 +66,7 @@
 import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.os.UserHandle;
+import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.DebugUtils;
@@ -75,6 +76,7 @@
 import com.android.internal.R;
 import com.android.internal.annotations.Immutable;
 import com.android.internal.util.CollectionUtils;
+import com.android.modules.utils.build.SdkLevel;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -177,6 +179,13 @@
     public static final long CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS = 146211400;
 
     /**
+     * Whether to use the new {@link com.android.server.permission.access.AccessCheckingService}.
+     *
+     * @hide
+     */
+    public static final boolean USE_ACCESS_CHECKING_SERVICE = SdkLevel.isAtLeastV();
+
+    /**
      * The time to wait in between refreshing the exempted indicator role packages
      */
     private static final long EXEMPTED_INDICATOR_ROLE_UPDATE_FREQUENCY_MS = 15000;
@@ -563,7 +572,7 @@
             @NonNull String permissionName) {
         try {
             return mPermissionManager.isPermissionRevokedByPolicy(packageName, permissionName,
-                    mContext.getUserId());
+                    mContext.getDeviceId(), mContext.getUserId());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -607,7 +616,7 @@
         }
         try {
             mPermissionManager.grantRuntimePermission(packageName, permissionName,
-                    user.getIdentifier());
+                    mContext.getDeviceId(), user.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -644,8 +653,8 @@
                     + reason, new RuntimeException());
         }
         try {
-            mPermissionManager
-                    .revokeRuntimePermission(packageName, permName, user.getIdentifier(), reason);
+            mPermissionManager.revokeRuntimePermission(packageName, permName,
+                    mContext.getDeviceId(), user.getIdentifier(), reason);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -672,7 +681,7 @@
             @NonNull UserHandle user) {
         try {
             return mPermissionManager.getPermissionFlags(packageName, permissionName,
-                    user.getIdentifier());
+                    mContext.getDeviceId(), user.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -711,7 +720,8 @@
             final boolean checkAdjustPolicyFlagPermission =
                     mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.Q;
             mPermissionManager.updatePermissionFlags(packageName, permissionName, flagMask,
-                    flagValues, checkAdjustPolicyFlagPermission, user.getIdentifier());
+                    flagValues, checkAdjustPolicyFlagPermission,
+                    mContext.getDeviceId(), user.getIdentifier());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -967,7 +977,7 @@
         try {
             final String packageName = mContext.getPackageName();
             return mPermissionManager.shouldShowRequestPermissionRationale(packageName,
-                    permissionName, mContext.getUserId());
+                    permissionName, mContext.getDeviceId(), mContext.getUserId());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -1501,8 +1511,8 @@
     // to reduce duplicate logcat output.
     private static volatile boolean sShouldWarnMissingActivityManager = true;
 
-    /* @hide */
-    private static int checkPermissionUncached(@Nullable String permission, int pid, int uid) {
+    private static int checkPermissionUncached(@Nullable String permission, int pid, int uid,
+            int deviceId) {
         final IActivityManager am = ActivityManager.getService();
         if (am == null) {
             // Well this is super awkward; we somehow don't have an active ActivityManager
@@ -1523,7 +1533,7 @@
         }
         try {
             sShouldWarnMissingActivityManager = true;
-            return am.checkPermission(permission, pid, uid);
+            return am.checkPermissionForDevice(permission, pid, uid, deviceId);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -1543,26 +1553,26 @@
         final String permission;
         final int pid;
         final int uid;
+        final int deviceId;
 
-        PermissionQuery(@Nullable String permission, int pid, int uid) {
+        PermissionQuery(@Nullable String permission, int pid, int uid, int deviceId) {
             this.permission = permission;
             this.pid = pid;
             this.uid = uid;
+            this.deviceId = deviceId;
         }
 
         @Override
         public String toString() {
-            return String.format("PermissionQuery(permission=\"%s\", pid=%s, uid=%s)",
-                    permission, pid, uid);
+            return TextUtils.formatSimple("PermissionQuery(permission=\"%s\", pid=%d, uid=%d, "
+                            + "deviceId=%d)", permission, pid, uid, deviceId);
         }
 
         @Override
         public int hashCode() {
             // N.B. pid doesn't count toward equality and therefore shouldn't count for
             // hashing either.
-            int hash = Objects.hashCode(permission);
-            hash = hash * 13 + Objects.hashCode(uid);
-            return hash;
+            return Objects.hash(permission, uid, deviceId);
         }
 
         @Override
@@ -1577,7 +1587,7 @@
             } catch (ClassCastException ex) {
                 return false;
             }
-            return uid == other.uid
+            return uid == other.uid && deviceId == other.deviceId
                     && Objects.equals(permission, other.permission);
         }
     }
@@ -1591,13 +1601,14 @@
                     2048, CACHE_KEY_PACKAGE_INFO, "checkPermission") {
                 @Override
                 public Integer recompute(PermissionQuery query) {
-                    return checkPermissionUncached(query.permission, query.pid, query.uid);
+                    return checkPermissionUncached(query.permission, query.pid, query.uid,
+                            query.deviceId);
                 }
             };
 
     /** @hide */
-    public static int checkPermission(@Nullable String permission, int pid, int uid) {
-        return sPermissionCache.query(new PermissionQuery(permission, pid, uid));
+    public static int checkPermission(@Nullable String permission, int pid, int uid, int deviceId) {
+        return sPermissionCache.query(new PermissionQuery(permission, pid, uid, deviceId));
     }
 
     /**
@@ -1617,26 +1628,29 @@
     private static final class PackageNamePermissionQuery {
         final String permName;
         final String pkgName;
+        final int deviceId;
         @UserIdInt
         final int userId;
 
         PackageNamePermissionQuery(@Nullable String permName, @Nullable String pkgName,
-                @UserIdInt int userId) {
+                int deviceId, @UserIdInt int userId) {
             this.permName = permName;
             this.pkgName = pkgName;
+            this.deviceId = deviceId;
             this.userId = userId;
         }
 
         @Override
         public String toString() {
-            return String.format(
-                    "PackageNamePermissionQuery(pkgName=\"%s\", permName=\"%s, userId=%s\")",
-                    pkgName, permName, userId);
+            return TextUtils.formatSimple(
+                    "PackageNamePermissionQuery(pkgName=\"%s\", permName=\"%s\", "
+                            + "deviceId=%s, userId=%s\")",
+                    pkgName, permName, deviceId, userId);
         }
 
         @Override
         public int hashCode() {
-            return Objects.hash(permName, pkgName, userId);
+            return Objects.hash(permName, pkgName, deviceId, userId);
         }
 
         @Override
@@ -1652,16 +1666,17 @@
             }
             return Objects.equals(permName, other.permName)
                     && Objects.equals(pkgName, other.pkgName)
+                    && deviceId == other.deviceId
                     && userId == other.userId;
         }
     }
 
     /* @hide */
     private static int checkPackageNamePermissionUncached(
-            String permName, String pkgName, @UserIdInt int userId) {
+            String permName, String pkgName, int deviceId, @UserIdInt int userId) {
         try {
-            return ActivityThread.getPackageManager().checkPermission(
-                    permName, pkgName, userId);
+            return ActivityThread.getPermissionManager().checkPermission(
+                    pkgName, permName, deviceId, userId);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -1675,7 +1690,7 @@
                 @Override
                 public Integer recompute(PackageNamePermissionQuery query) {
                     return checkPackageNamePermissionUncached(
-                            query.permName, query.pkgName, query.userId);
+                            query.permName, query.pkgName, query.deviceId, query.userId);
                 }
                 @Override
                 public boolean bypass(PackageNamePermissionQuery query) {
@@ -1684,14 +1699,14 @@
             };
 
     /**
-     * Check whether a package has a permission.
+     * Check whether a package has a permission for given device.
      *
      * @hide
      */
-    public static int checkPackageNamePermission(String permName, String pkgName,
+    public static int checkPackageNamePermission(String permName, String pkgName, int deviceId,
             @UserIdInt int userId) {
         return sPackageNamePermissionCache.query(
-                new PackageNamePermissionQuery(permName, pkgName, userId));
+                new PackageNamePermissionQuery(permName, pkgName, deviceId, userId));
     }
 
     /**
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index be38df7..a565b3b 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -295,6 +295,19 @@
             "android.settings.AIRPLANE_MODE_SETTINGS";
 
     /**
+     * Activity Action: Show enabled eSim profile in Settings
+     * <p>
+     * This opens the Settings page for the currently enabled eSim profile
+     * <p>
+     * Input: Nothing.
+     * <p>
+     * Output: Nothing.
+     * @hide
+     */
+    public static final String ACTION_SHOW_ENABLED_ESIM_PROFILE =
+            "android.settings.SHOW_ENABLED_ESIM_PROFILE";
+
+    /**
      * Activity Action: Show mobile data usage list.
      * <p>
      * Input: {@link EXTRA_NETWORK_TEMPLATE} and {@link EXTRA_SUB_ID} should be included to specify
@@ -2468,6 +2481,24 @@
             "android.settings.REQUEST_SET_AUTOFILL_SERVICE";
 
     /**
+     * Activity Action: Show screen that let user enable a Credential Manager provider.
+     * <p>
+     * Input: Intent's data URI set with an application name, using the
+     * "package" schema (like "package:com.my.app").
+     *
+     * <p>
+     * Output: {@link android.app.Activity#RESULT_OK} if user selected a provider belonging
+     * to the caller package.
+     * <p>
+     * <b>NOTE: </b> Applications should call
+     * {@link android.credentials.CredentialManager#isEnabledCredentialProviderService()}
+     * and only use this action to start an activity if they return {@code false}.
+     */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_CREDENTIAL_PROVIDER =
+            "android.settings.CREDENTIAL_PROVIDER";
+
+    /**
      * Activity Action: Show screen for controlling the Quick Access Wallet.
      * <p>
      * In some cases, a matching Activity may not exist, so ensure you
@@ -2635,6 +2666,26 @@
     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
     public static final String ACTION_BEDTIME_SETTINGS = "android.settings.BEDTIME_SETTINGS";
 
+    /**
+     * Activity action: Launch UI to manage the permissions of an app.
+     * <p>
+     * Input: {@link android.content.Intent#EXTRA_PACKAGE_NAME} specifies the package whose
+     * permissions will be managed by the launched UI.
+     * </p>
+     * <p>
+     * Output: Nothing.
+     * </p>
+     *
+     * @see android.content.Intent#EXTRA_PACKAGE_NAME
+     *
+     * @hide
+     */
+    @SystemApi
+    @RequiresPermission(android.Manifest.permission.LAUNCH_PERMISSION_SETTINGS)
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_APP_PERMISSIONS_SETTINGS =
+            "android.settings.APP_PERMISSIONS_SETTINGS";
+
     // End of Intent actions for Settings
 
     /**
@@ -2759,6 +2810,9 @@
     /** @hide - Private call() method to reset to defaults the 'configuration' table */
     public static final String CALL_METHOD_DELETE_CONFIG = "DELETE_config";
 
+    /** @hide - Private call() method to reset to defaults the 'system' table */
+    public static final String CALL_METHOD_RESET_SYSTEM = "RESET_system";
+
     /** @hide - Private call() method to reset to defaults the 'secure' table */
     public static final String CALL_METHOD_RESET_SECURE = "RESET_secure";
 
@@ -3974,6 +4028,26 @@
                    overrideableByRestore);
         }
 
+        /**
+         * Store a name/value pair into the database.
+         *
+         * @param resolver to access the database with
+         * @param name to store
+         * @param value to associate with the name
+         * @param makeDefault whether to make the value the default one
+         * @param overrideableByRestore whether restore can override this value
+         * @return true if the value was set, false on database errors
+         *
+         * @hide
+         */
+        @RequiresPermission(Manifest.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE)
+        @SystemApi
+        public static boolean putString(@NonNull ContentResolver resolver, @NonNull String name,
+                @Nullable String value, boolean makeDefault, boolean overrideableByRestore) {
+            return putStringForUser(resolver, name, value, /* tag= */ null,
+                    makeDefault, resolver.getUserId(), overrideableByRestore);
+        }
+
         /** @hide */
         @UnsupportedAppUsage
         public static boolean putStringForUser(ContentResolver resolver, String name, String value,
@@ -4009,6 +4083,60 @@
         }
 
         /**
+         * Reset the settings to their defaults. This would reset <strong>only</strong>
+         * settings set by the caller's package. Think of it of a way to undo your own
+         * changes to the system settings. Passing in the optional tag will reset only
+         * settings changed by your package and associated with this tag.
+         *
+         * @param resolver Handle to the content resolver.
+         * @param tag Optional tag which should be associated with the settings to reset.
+         *
+         * @see #putString(ContentResolver, String, String, boolean, boolean)
+         *
+         * @hide
+         */
+        @SystemApi
+        public static void resetToDefaults(@NonNull ContentResolver resolver,
+                @Nullable String tag) {
+            resetToDefaultsAsUser(resolver, tag, RESET_MODE_PACKAGE_DEFAULTS,
+                    resolver.getUserId());
+        }
+
+        /**
+         * Reset the settings to their defaults for a given user with a specific mode. The
+         * optional tag argument is valid only for {@link #RESET_MODE_PACKAGE_DEFAULTS}
+         * allowing resetting the settings made by a package and associated with the tag.
+         *
+         * @param resolver Handle to the content resolver.
+         * @param tag Optional tag which should be associated with the settings to reset.
+         * @param mode The reset mode.
+         * @param userHandle The user for which to reset to defaults.
+         *
+         * @see #RESET_MODE_PACKAGE_DEFAULTS
+         * @see #RESET_MODE_UNTRUSTED_DEFAULTS
+         * @see #RESET_MODE_UNTRUSTED_CHANGES
+         * @see #RESET_MODE_TRUSTED_DEFAULTS
+         *
+         * @hide
+         */
+        public static void resetToDefaultsAsUser(@NonNull ContentResolver resolver,
+                @Nullable String tag, @ResetMode int mode, @IntRange(from = 0) int userHandle) {
+            try {
+                Bundle arg = new Bundle();
+                arg.putInt(CALL_METHOD_USER_KEY, userHandle);
+                if (tag != null) {
+                    arg.putString(CALL_METHOD_TAG_KEY, tag);
+                }
+                arg.putInt(CALL_METHOD_RESET_MODE_KEY, mode);
+                IContentProvider cp = sProviderHolder.getProvider(resolver);
+                cp.call(resolver.getAttributionSource(),
+                        sProviderHolder.mUri.getAuthority(), CALL_METHOD_RESET_SYSTEM, null, arg);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Can't reset do defaults for " + CONTENT_URI, e);
+            }
+        }
+
+        /**
          * Construct the content URI for a particular name/value pair,
          * useful for monitoring changes with a ContentObserver.
          * @param name to look up in the table
@@ -4443,6 +4571,16 @@
                 = "wear_accessibility_gesture_enabled";
 
         /**
+         * If the triple press gesture for toggling accessibility is enabled during OOBE.
+         * Set to 1 for true and 0 for false.
+         *
+         * This setting is used only internally.
+         * @hide
+         */
+        public static final String WEAR_ACCESSIBILITY_GESTURE_ENABLED_DURING_OOBE =
+                "wear_accessibility_gesture_enabled_during_oobe";
+
+        /**
          * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_ON} instead
          */
         @Deprecated
@@ -5871,6 +6009,7 @@
             PRIVATE_SETTINGS.add(END_BUTTON_BEHAVIOR);
             PRIVATE_SETTINGS.add(ADVANCED_SETTINGS);
             PRIVATE_SETTINGS.add(WEAR_ACCESSIBILITY_GESTURE_ENABLED);
+            PRIVATE_SETTINGS.add(WEAR_ACCESSIBILITY_GESTURE_ENABLED_DURING_OOBE);
             PRIVATE_SETTINGS.add(SCREEN_AUTO_BRIGHTNESS_ADJ);
             PRIVATE_SETTINGS.add(VIBRATE_INPUT_DEVICES);
             PRIVATE_SETTINGS.add(VOLUME_MASTER);
@@ -8523,6 +8662,18 @@
         public static final String MULTI_PRESS_TIMEOUT = "multi_press_timeout";
 
         /**
+         * The duration before a key repeat begins in milliseconds.
+         * @hide
+         */
+        public static final String KEY_REPEAT_TIMEOUT_MS = "key_repeat_timeout";
+
+        /**
+         * The duration between successive key repeats in milliseconds.
+         * @hide
+         */
+        public static final String KEY_REPEAT_DELAY_MS = "key_repeat_delay";
+
+        /**
          * Setting that specifies recommended timeout in milliseconds for controls
          * which don't need user's interactions.
          *
@@ -11676,6 +11827,22 @@
         public static final String LOCK_SCREEN_WEATHER_ENABLED = "lockscreen_weather_enabled";
 
         /**
+         * Whether the feature that the device will fire a haptic when users scroll and hit
+         * the edge of the screen is enabled.
+         *
+         * @hide
+         */
+        public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_EDGE_HAPTIC_ENABLED =
+                "accessibility_display_magnification_edge_haptic_enabled";
+
+        /**
+         * If 1, DND default allowed packages have been updated
+         *
+         *  @hide
+         */
+        public static final String DND_CONFIGS_MIGRATED = "dnd_settings_migrated";
+
+        /**
          * These entries are considered common between the personal and the managed profile,
          * since the managed profile doesn't get to change them.
          */
@@ -16722,6 +16889,30 @@
         public static final String AWARE_ALLOWED = "aware_allowed";
 
         /**
+         * Overrides internal R.integer.config_shortPressOnPowerBehavior.
+         * Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
+         * Used by PhoneWindowManager.
+         * @hide
+         */
+        public static final String POWER_BUTTON_SHORT_PRESS = "power_button_short_press";
+
+        /**
+         * Overrides internal R.integer.config_doublePressOnPowerBehavior.
+         * Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
+         * Used by PhoneWindowManager.
+         * @hide
+         */
+        public static final String POWER_BUTTON_DOUBLE_PRESS = "power_button_double_press";
+
+        /**
+         * Overrides internal R.integer.config_triplePressOnPowerBehavior.
+         * Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
+         * Used by PhoneWindowManager.
+         * @hide
+         */
+        public static final String POWER_BUTTON_TRIPLE_PRESS = "power_button_triple_press";
+
+        /**
          * Overrides internal R.integer.config_longPressOnPowerBehavior.
          * Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
          * Used by PhoneWindowManager.
@@ -16752,6 +16943,42 @@
                 "power_button_very_long_press";
 
         /**
+         * Overrides internal R.integer.config_shortPressOnStemPrimaryBehavior.
+         * Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
+         * Used by PhoneWindowManager.
+         * @hide
+         */
+        public static final String STEM_PRIMARY_BUTTON_SHORT_PRESS =
+                "stem_primary_button_short_press";
+
+        /**
+         * Overrides internal R.integer.config_doublePressOnStemPrimaryBehavior.
+         * Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
+         * Used by PhoneWindowManager.
+         * @hide
+         */
+        public static final String STEM_PRIMARY_BUTTON_DOUBLE_PRESS =
+                "stem_primary_button_double_press";
+
+        /**
+         * Overrides internal R.integer.config_triplePressOnStemPrimaryBehavior.
+         * Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
+         * Used by PhoneWindowManager.
+         * @hide
+         */
+        public static final String STEM_PRIMARY_BUTTON_TRIPLE_PRESS =
+                "stem_primary_button_triple_press";
+
+        /**
+         * Overrides internal R.integer.config_longPressOnStemPrimaryBehavior.
+         * Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
+         * Used by PhoneWindowManager.
+         * @hide
+         */
+        public static final String STEM_PRIMARY_BUTTON_LONG_PRESS =
+                "stem_primary_button_long_press";
+
+        /**
          * Overrides internal R.integer.config_keyChordPowerVolumeUp.
          * Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
          * Used by PhoneWindowManager.
@@ -18560,7 +18787,7 @@
              * @hide
              */
             @Deprecated
-            public static final String COMBINED_LOCATION_ENABLED = "combined_location_enable";
+            public static final String COMBINED_LOCATION_ENABLE = "combined_location_enable";
 
             /**
              * The wrist orientation mode of the device
@@ -18949,6 +19176,20 @@
              * @hide
              */
             public static final String WEAR_MEDIA_SESSIONS_PACKAGE = "wear_media_sessions_package";
+
+            /*
+             * Controls the launcher ui mode on wearable devices.
+             * @hide
+             */
+            public static final String WEAR_LAUNCHER_UI_MODE = "wear_launcher_ui_mode";
+
+            /** Whether Wear Power Anomaly Service is enabled.
+             *
+             * (0 = false, 1 = true)
+             * @hide
+             */
+            public static final String WEAR_POWER_ANOMALY_SERVICE_ENABLED =
+                    "wear_power_anomaly_service_enabled";
         }
     }
 
diff --git a/core/java/android/provider/TEST_MAPPING b/core/java/android/provider/TEST_MAPPING
index c55572e..8b4a99e 100644
--- a/core/java/android/provider/TEST_MAPPING
+++ b/core/java/android/provider/TEST_MAPPING
@@ -21,7 +21,7 @@
             "name": "SettingsProviderTest"
         },
         {
-            "name": "CtsAppSecurityHostTestCases",
+            "name": "CtsPackageManagerHostTestCases",
             "options": [
                 {
                     "include-filter": "android.appsecurity.cts.ReadableSettingsFieldsTest"
diff --git a/core/java/android/security/OWNERS b/core/java/android/security/OWNERS
index 7140ff1..f6b1235 100644
--- a/core/java/android/security/OWNERS
+++ b/core/java/android/security/OWNERS
@@ -1,7 +1,6 @@
 # Bug component: 36824
 
 cbrubaker@google.com
-vishwath@google.com
 
 per-file NetworkSecurityPolicy.java = cbrubaker@google.com
 per-file NetworkSecurityPolicy.java = klyubin@google.com
diff --git a/core/java/android/service/autofill/Dataset.java b/core/java/android/service/autofill/Dataset.java
index d04ff8e..115894f 100644
--- a/core/java/android/service/autofill/Dataset.java
+++ b/core/java/android/service/autofill/Dataset.java
@@ -115,6 +115,8 @@
  * with the lower case value of the view's text are shown.
  *   <li>All other datasets are hidden.
  * </ol>
+ * <p>Note: If user enters four or more characters, all datasets will be hidden</p>
+ *
  */
 public final class Dataset implements Parcelable {
     /**
diff --git a/core/java/android/service/autofill/FillRequest.java b/core/java/android/service/autofill/FillRequest.java
index 7ec1483..8cf2ce4 100644
--- a/core/java/android/service/autofill/FillRequest.java
+++ b/core/java/android/service/autofill/FillRequest.java
@@ -97,6 +97,8 @@
      */
     public static final @RequestFlags int FLAG_VIEW_NOT_FOCUSED = 0x10;
 
+    // The flag value 0x20 has been defined in AutofillManager.
+
     /**
      * Indicates the request supports fill dialog presentation for the fields, the
      * system will send the request when the activity just started.
diff --git a/core/java/android/service/cloudsearch/OWNERS b/core/java/android/service/cloudsearch/OWNERS
index aa4da3b..3a5841e 100644
--- a/core/java/android/service/cloudsearch/OWNERS
+++ b/core/java/android/service/cloudsearch/OWNERS
@@ -1,4 +1,3 @@
 # Bug component: 758286
 
-huiwu@google.com
 srazdan@google.com
diff --git a/core/java/android/service/credentials/CredentialProviderInfoFactory.java b/core/java/android/service/credentials/CredentialProviderInfoFactory.java
index b196b06..58bc4da 100644
--- a/core/java/android/service/credentials/CredentialProviderInfoFactory.java
+++ b/core/java/android/service/credentials/CredentialProviderInfoFactory.java
@@ -45,8 +45,8 @@
 import android.util.Slog;
 import android.util.Xml;
 
-import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.R;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
@@ -135,8 +135,8 @@
     }
 
     /**
-     * Constructs an information instance of the credential provider for testing purposes. Does not
-     * run any verifications and passes parameters as is.
+     * Constructs an information instance of the credential provider for testing purposes. Does
+     * not run any verifications and passes parameters as is.
      */
     @VisibleForTesting
     public static CredentialProviderInfo createForTests(
@@ -151,6 +151,7 @@
                 .setSystemProvider(isSystemProvider)
                 .addCapabilities(capabilities)
                 .build();
+
     }
 
     private static void verifyProviderPermission(ServiceInfo serviceInfo) throws SecurityException {
@@ -229,7 +230,7 @@
 
         // 4. Extract the XML metadata.
         try {
-            builder = extractXmlMetadata(context, builder, serviceInfo, pm, resources);
+            builder = extractXmlMetadata(context, serviceInfo, pm, resources);
         } catch (Exception e) {
             Slog.e(TAG, "Failed to get XML metadata", e);
         }
@@ -239,10 +240,11 @@
 
     private static CredentialProviderInfo.Builder extractXmlMetadata(
             @NonNull Context context,
-            @NonNull CredentialProviderInfo.Builder builder,
             @NonNull ServiceInfo serviceInfo,
             @NonNull PackageManager pm,
             @NonNull Resources resources) {
+        final CredentialProviderInfo.Builder builder =
+                new CredentialProviderInfo.Builder(serviceInfo);
         final XmlResourceParser parser =
                 serviceInfo.loadXmlMetaData(pm, CredentialProviderService.SERVICE_META_DATA);
         if (parser == null) {
@@ -285,9 +287,9 @@
         return builder;
     }
 
-    private static Set<String> parseXmlProviderOuterCapabilities(
+    private static List<String> parseXmlProviderOuterCapabilities(
             XmlPullParser parser, Resources resources) throws IOException, XmlPullParserException {
-        final Set<String> capabilities = new HashSet<>();
+        final List<String> capabilities = new ArrayList<>();
         final int outerDepth = parser.getDepth();
         int type;
         while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
diff --git a/core/java/android/service/credentials/CredentialProviderService.java b/core/java/android/service/credentials/CredentialProviderService.java
index cf2e6a6..be7b722 100644
--- a/core/java/android/service/credentials/CredentialProviderService.java
+++ b/core/java/android/service/credentials/CredentialProviderService.java
@@ -177,8 +177,8 @@
       *          <capability>@string/passwords</capability>
       *          <capability>@string/passkeys</capability>
       *      </capabilities>
-      *      <string name="passwords">android.credentials.TYPE_PASSWORD_CREDENTIAL</string>
-      *      <string name="passkeys">android.credentials.TYPE_PUBLIC_KEY_CREDENTIAL</string>
+      *      <capability name="android.credentials.TYPE_PASSWORD_CREDENTIAL" />
+      *      <capability name="android.credentials.TYPE_PUBLIC_KEY_CREDENTIAL" />
       *  </credential-provider>
       * </code>
       */
diff --git a/core/java/android/service/trust/OWNERS b/core/java/android/service/trust/OWNERS
index 198925b..a895f7f 100644
--- a/core/java/android/service/trust/OWNERS
+++ b/core/java/android/service/trust/OWNERS
@@ -1,5 +1,4 @@
 # Bug component: 36824
 
 cbrubaker@google.com
-vishwath@google.com
-jacobhobbie@google.com
\ No newline at end of file
+jacobhobbie@google.com
diff --git a/core/java/android/service/voice/AbstractDetector.java b/core/java/android/service/voice/AbstractDetector.java
index 8648e38..7af7fe6 100644
--- a/core/java/android/service/voice/AbstractDetector.java
+++ b/core/java/android/service/voice/AbstractDetector.java
@@ -65,6 +65,13 @@
      */
     private final IBinder mToken = new Binder();
 
+    /**
+     * A flag controls whether attributionTag will be passed into the Identity.
+     * TODO(b/289087412): This flag will be converted and confirm to the trunk stable flag
+     * configuration.
+     */
+    static final boolean IS_IDENTITY_WITH_ATTRIBUTION_TAG = false;
+
     AbstractDetector(
             IVoiceInteractionManagerService managerService,
             Executor executor,
@@ -153,12 +160,16 @@
             @Nullable PersistableBundle options,
             @Nullable SharedMemory sharedMemory,
             @NonNull IHotwordRecognitionStatusCallback callback,
-            int detectorType) {
+            int detectorType,
+            @Nullable String attributionTag) {
         if (DEBUG) {
             Slog.d(TAG, "initAndVerifyDetector()");
         }
         Identity identity = new Identity();
         identity.packageName = ActivityThread.currentOpPackageName();
+        if (IS_IDENTITY_WITH_ATTRIBUTION_TAG) {
+            identity.attributionTag = attributionTag;
+        }
         try {
             mManagerService.initAndVerifyDetector(identity, options, sharedMemory, mToken, callback,
                     detectorType);
diff --git a/core/java/android/service/voice/AlwaysOnHotwordDetector.java b/core/java/android/service/voice/AlwaysOnHotwordDetector.java
index 708ebdf..21f676e 100644
--- a/core/java/android/service/voice/AlwaysOnHotwordDetector.java
+++ b/core/java/android/service/voice/AlwaysOnHotwordDetector.java
@@ -324,6 +324,7 @@
     private final Handler mHandler;
     private final IBinder mBinder = new Binder();
     private final boolean mSupportSandboxedDetectionService;
+    private final String mAttributionTag;
 
     @GuardedBy("mLock")
     private boolean mIsAvailabilityOverriddenByTestApi = false;
@@ -577,8 +578,7 @@
         }
 
         /**
-         * Timestamp of when the trigger event from SoundTriggerHal was received by the system
-         * server.
+         * Timestamp of when the trigger event from SoundTriggerHal was received by the framework.
          *
          * Clock monotonic including suspend time or its equivalent on the system,
          * in the same units and timebase as {@link SystemClock#elapsedRealtime()}.
@@ -847,13 +847,17 @@
      * @param targetSdkVersion The target SDK version.
      * @param SupportSandboxedDetectionService {@code true} if HotwordDetectionService should be
      * triggered, otherwise {@code false}.
+     * @param attributionTag an optional attribution tag passed form the
+     * {@link VoiceInteractionService} context via the
+     * {@link createAlwaysOnHotwordDetectorInternal(String, Locale, boolean, PersistableBundle,
+     * SharedMemory, ModuleProperties, Executor, Callback)}.
      *
      * @hide
      */
     public AlwaysOnHotwordDetector(String text, Locale locale, Executor executor, Callback callback,
             KeyphraseEnrollmentInfo keyphraseEnrollmentInfo,
             IVoiceInteractionManagerService modelManagementService, int targetSdkVersion,
-            boolean supportSandboxedDetectionService) {
+            boolean supportSandboxedDetectionService, @Nullable String attributionTag) {
         super(modelManagementService, executor, callback);
 
         mHandler = new MyHandler(Looper.getMainLooper());
@@ -866,6 +870,7 @@
         mInternalCallback = new SoundTriggerListener(mHandler);
         mModelManagementService = modelManagementService;
         mSupportSandboxedDetectionService = supportSandboxedDetectionService;
+        mAttributionTag = attributionTag;
     }
 
     // Do nothing. This method should not be abstract.
@@ -877,11 +882,14 @@
             @Nullable SoundTrigger.ModuleProperties moduleProperties) {
         if (mSupportSandboxedDetectionService) {
             initAndVerifyDetector(options, sharedMemory, mInternalCallback,
-                    DETECTOR_TYPE_TRUSTED_HOTWORD_DSP);
+                    DETECTOR_TYPE_TRUSTED_HOTWORD_DSP, mAttributionTag);
         }
         try {
             Identity identity = new Identity();
             identity.packageName = ActivityThread.currentOpPackageName();
+            if (IS_IDENTITY_WITH_ATTRIBUTION_TAG) {
+                identity.attributionTag = mAttributionTag;
+            }
             if (moduleProperties == null) {
                 moduleProperties = mModelManagementService
                         .listModuleProperties(identity)
diff --git a/core/java/android/service/voice/SoftwareHotwordDetector.java b/core/java/android/service/voice/SoftwareHotwordDetector.java
index 7ab4faf..128bc0d 100644
--- a/core/java/android/service/voice/SoftwareHotwordDetector.java
+++ b/core/java/android/service/voice/SoftwareHotwordDetector.java
@@ -56,12 +56,14 @@
     private final HotwordDetector.Callback mCallback;
     private final AudioFormat mAudioFormat;
     private final Executor mExecutor;
+    private final String mAttributionTag;
 
     SoftwareHotwordDetector(
             IVoiceInteractionManagerService managerService,
             AudioFormat audioFormat,
             Executor executor,
-            HotwordDetector.Callback callback) {
+            HotwordDetector.Callback callback,
+            String attributionTag) {
         super(managerService, executor, callback);
 
         mManagerService = managerService;
@@ -69,13 +71,14 @@
         mCallback = callback;
         mExecutor = executor != null ? executor : new HandlerExecutor(
                 new Handler(Looper.getMainLooper()));
+        mAttributionTag = attributionTag;
     }
 
     @Override
     void initialize(@Nullable PersistableBundle options, @Nullable SharedMemory sharedMemory) {
         initAndVerifyDetector(options, sharedMemory,
                 new InitializationStateListener(mExecutor, mCallback),
-                DETECTOR_TYPE_TRUSTED_HOTWORD_SOFTWARE);
+                DETECTOR_TYPE_TRUSTED_HOTWORD_SOFTWARE, mAttributionTag);
     }
 
     void onDetectorRemoteException() {
diff --git a/core/java/android/service/voice/VisualQueryDetector.java b/core/java/android/service/voice/VisualQueryDetector.java
index 93b7964..9e0eb4b 100644
--- a/core/java/android/service/voice/VisualQueryDetector.java
+++ b/core/java/android/service/voice/VisualQueryDetector.java
@@ -60,15 +60,17 @@
     private final Executor mExecutor;
     private final IVoiceInteractionManagerService mManagerService;
     private final VisualQueryDetectorInitializationDelegate mInitializationDelegate;
+    private final String mAttributionTag;
 
     VisualQueryDetector(
             IVoiceInteractionManagerService managerService,
             @NonNull @CallbackExecutor Executor executor,
-            Callback callback) {
+            Callback callback, @Nullable String attributionTag) {
         mManagerService = managerService;
         mCallback = callback;
         mExecutor = executor;
         mInitializationDelegate = new VisualQueryDetectorInitializationDelegate();
+        mAttributionTag = attributionTag;
     }
 
     /**
@@ -246,7 +248,7 @@
         void initialize(@Nullable PersistableBundle options, @Nullable SharedMemory sharedMemory) {
             initAndVerifyDetector(options, sharedMemory,
                     new InitializationStateListener(mExecutor, mCallback),
-                    DETECTOR_TYPE_VISUAL_QUERY_DETECTOR);
+                    DETECTOR_TYPE_VISUAL_QUERY_DETECTOR, mAttributionTag);
         }
 
         @Override
diff --git a/core/java/android/service/voice/VoiceInteractionService.java b/core/java/android/service/voice/VoiceInteractionService.java
index ab9ae0a..8cec17f 100644
--- a/core/java/android/service/voice/VoiceInteractionService.java
+++ b/core/java/android/service/voice/VoiceInteractionService.java
@@ -734,7 +734,7 @@
             AlwaysOnHotwordDetector dspDetector = new AlwaysOnHotwordDetector(keyphrase, locale,
                     executor, callback, mKeyphraseEnrollmentInfo, mSystemService,
                     getApplicationContext().getApplicationInfo().targetSdkVersion,
-                    supportHotwordDetectionService);
+                    supportHotwordDetectionService, getAttributionTag());
             mActiveDetectors.add(dspDetector);
 
             try {
@@ -895,7 +895,7 @@
 
             SoftwareHotwordDetector softwareHotwordDetector =
                     new SoftwareHotwordDetector(mSystemService, /* audioFormat= */ null,
-                            executor, callback);
+                            executor, callback, getAttributionTag());
             mActiveDetectors.add(softwareHotwordDetector);
 
             try {
@@ -965,7 +965,8 @@
             }
 
             VisualQueryDetector visualQueryDetector =
-                    new VisualQueryDetector(mSystemService, executor, callback);
+                    new VisualQueryDetector(mSystemService, executor, callback,
+                            getAttributionTag());
             HotwordDetector visualQueryDetectorInitializationDelegate =
                     visualQueryDetector.getInitializationDelegate();
             mActiveDetectors.add(visualQueryDetectorInitializationDelegate);
diff --git a/core/java/android/service/wallpaper/IWallpaperService.aidl b/core/java/android/service/wallpaper/IWallpaperService.aidl
index da56b4b..3262f3a 100644
--- a/core/java/android/service/wallpaper/IWallpaperService.aidl
+++ b/core/java/android/service/wallpaper/IWallpaperService.aidl
@@ -16,6 +16,7 @@
 
 package android.service.wallpaper;
 
+import android.app.WallpaperInfo;
 import android.graphics.Rect;
 import android.service.wallpaper.IWallpaperConnection;
 
@@ -25,6 +26,7 @@
 oneway interface IWallpaperService {
     void attach(IWallpaperConnection connection,
             IBinder windowToken, int windowType, boolean isPreview,
-            int reqWidth, int reqHeight, in Rect padding, int displayId, int which);
+            int reqWidth, int reqHeight, in Rect padding, int displayId, int which,
+            in WallpaperInfo info);
     void detach(IBinder windowToken);
 }
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index d9ac4850..c7e5453 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -41,6 +41,9 @@
 import android.app.WallpaperColors;
 import android.app.WallpaperInfo;
 import android.app.WallpaperManager;
+import android.app.compat.CompatChanges;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledAfter;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
 import android.content.Intent;
@@ -194,6 +197,18 @@
     // TODO (b/287037772) remove this flag and the forceReport argument in reportVisibility
     private boolean mIsWearOs;
 
+    /**
+     * Wear products currently force a slight scaling transition to wallpapers
+     * when the QSS is opened. However, on Wear 6 (SDK 35) and above, 1P watch faces
+     * will be expected to either implement their own scaling, or to override this
+     * method to allow the WallpaperController to continue to scale for them.
+     *
+     * @hide
+     */
+    @ChangeId
+    @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+    public static final long WEAROS_WALLPAPER_HANDLES_SCALING = 272527315L;
+
     static final class WallpaperCommand {
         String action;
         int x;
@@ -601,7 +616,7 @@
          * @hide
          */
         public boolean shouldZoomOutWallpaper() {
-            return false;
+            return mIsWearOs && !CompatChanges.isChangeEnabled(WEAROS_WALLPAPER_HANDLES_SCALING);
         }
 
         /**
@@ -1611,8 +1626,13 @@
             if (!mDestroyed) {
                 mDisplayState =
                         mDisplay == null ? Display.STATE_UNKNOWN : mDisplay.getCommittedState();
-                boolean displayVisible = Display.isOnState(mDisplayState) && !mIsScreenTurningOn;
-                boolean visible = mVisible && displayVisible;
+                boolean displayFullyOn = Display.isOnState(mDisplayState) && !mIsScreenTurningOn;
+                boolean supportsAmbientMode =
+                        mIWallpaperEngine.mInfo == null
+                                ? false
+                                : mIWallpaperEngine.mInfo.supportsAmbientMode();
+                // Report visibility only if display is fully on or wallpaper supports ambient mode.
+                boolean visible = mVisible && (displayFullyOn || supportsAmbientMode);
                 if (DEBUG) {
                     Log.v(
                             TAG,
@@ -2065,7 +2085,7 @@
         }
 
         private void updateFrozenState(boolean frozenRequested) {
-            if (mIWallpaperEngine.mWallpaperManager.getWallpaperInfo() == null
+            if (mIWallpaperEngine.mInfo == null
                     // Procees the unfreeze command in case the wallaper became static while
                     // being paused.
                     && frozenRequested) {
@@ -2364,6 +2384,7 @@
         final DisplayManager mDisplayManager;
         final Display mDisplay;
         final WallpaperManager mWallpaperManager;
+        @Nullable final WallpaperInfo mInfo;
 
         Engine mEngine;
         @SetWallpaperFlags int mWhich;
@@ -2371,7 +2392,7 @@
         IWallpaperEngineWrapper(WallpaperService service,
                 IWallpaperConnection conn, IBinder windowToken,
                 int windowType, boolean isPreview, int reqWidth, int reqHeight, Rect padding,
-                int displayId, @SetWallpaperFlags int which) {
+                int displayId, @SetWallpaperFlags int which, @Nullable WallpaperInfo info) {
             mWallpaperManager = getSystemService(WallpaperManager.class);
             mCaller = new HandlerCaller(service, service.onProvideEngineLooper(), this, true);
             mConnection = conn;
@@ -2383,6 +2404,7 @@
             mDisplayPadding.set(padding);
             mDisplayId = displayId;
             mWhich = which;
+            mInfo = info;
 
             // Create a display context before onCreateEngine.
             mDisplayManager = getSystemService(DisplayManager.class);
@@ -2464,8 +2486,7 @@
                 Trace.beginSection("WPMS.mConnection.engineShown");
                 try {
                     mConnection.engineShown(this);
-                    Log.d(TAG, "Wallpaper has updated the surface:"
-                            + mWallpaperManager.getWallpaperInfo());
+                    Log.d(TAG, "Wallpaper has updated the surface:" + mInfo);
                 } catch (RemoteException e) {
                     Log.w(TAG, "Wallpaper host disappeared", e);
                 }
@@ -2719,11 +2740,11 @@
         @Override
         public void attach(IWallpaperConnection conn, IBinder windowToken,
                 int windowType, boolean isPreview, int reqWidth, int reqHeight, Rect padding,
-                int displayId, @SetWallpaperFlags int which) {
+                int displayId, @SetWallpaperFlags int which, @Nullable WallpaperInfo info) {
             Trace.beginSection("WPMS.ServiceWrapper.attach");
             IWallpaperEngineWrapper engineWrapper =
                     new IWallpaperEngineWrapper(mTarget, conn, windowToken, windowType,
-                            isPreview, reqWidth, reqHeight, padding, displayId, which);
+                            isPreview, reqWidth, reqHeight, padding, displayId, which, info);
             synchronized (mActiveEngines) {
                 mActiveEngines.put(windowToken, engineWrapper);
             }
diff --git a/core/java/android/service/wallpapereffectsgeneration/OWNERS b/core/java/android/service/wallpapereffectsgeneration/OWNERS
index d2d3e2c0..a351032 100644
--- a/core/java/android/service/wallpapereffectsgeneration/OWNERS
+++ b/core/java/android/service/wallpapereffectsgeneration/OWNERS
@@ -1,4 +1,3 @@
 susharon@google.com
 shanh@google.com
-huiwu@google.com
 srazdan@google.com
diff --git a/core/java/android/telephony/TelephonyRegistryManager.java b/core/java/android/telephony/TelephonyRegistryManager.java
index 434b1c7..e2c5539 100644
--- a/core/java/android/telephony/TelephonyRegistryManager.java
+++ b/core/java/android/telephony/TelephonyRegistryManager.java
@@ -490,13 +490,16 @@
     /**
      * Notify changes to activity state changes on certain subscription.
      *
+     * @param slotIndex for which data activity changed. Can be derived from subId except
+     * when subId is invalid.
      * @param subId for which data activity state changed.
      * @param dataActivityType indicates the latest data activity type e.g, {@link
      * TelephonyManager#DATA_ACTIVITY_IN}
      */
-    public void notifyDataActivityChanged(int subId, @DataActivityType int dataActivityType) {
+    public void notifyDataActivityChanged(int slotIndex, int subId,
+            @DataActivityType int dataActivityType) {
         try {
-            sRegistry.notifyDataActivityForSubscriber(subId, dataActivityType);
+            sRegistry.notifyDataActivityForSubscriber(slotIndex, subId, dataActivityType);
         } catch (RemoteException ex) {
             // system process is dead
             throw ex.rethrowFromSystemServer();
diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java
index cd76754..ba08f25 100644
--- a/core/java/android/text/DynamicLayout.java
+++ b/core/java/android/text/DynamicLayout.java
@@ -23,6 +23,7 @@
 import android.compat.annotation.UnsupportedAppUsage;
 import android.graphics.Paint;
 import android.graphics.Rect;
+import android.graphics.text.LineBreakConfig;
 import android.os.Build;
 import android.text.method.OffsetMapping;
 import android.text.style.ReplacementSpan;
@@ -88,6 +89,7 @@
             b.mBreakStrategy = Layout.BREAK_STRATEGY_SIMPLE;
             b.mHyphenationFrequency = Layout.HYPHENATION_FREQUENCY_NONE;
             b.mJustificationMode = Layout.JUSTIFICATION_MODE_NONE;
+            b.mLineBreakConfig = LineBreakConfig.NONE;
             return b;
         }
 
@@ -268,6 +270,22 @@
         }
 
         /**
+         * Set the line break configuration. The line break will be passed to native used for
+         * calculating the text wrapping. The default value of the line break style is
+         * {@link LineBreakConfig#LINE_BREAK_STYLE_NONE}
+         *
+         * @param lineBreakConfig the line break configuration for text wrapping.
+         * @return this builder, useful for chaining.
+         * @see android.widget.TextView#setLineBreakStyle
+         * @see android.widget.TextView#setLineBreakWordStyle
+         */
+        @NonNull
+        public Builder setLineBreakConfig(@NonNull LineBreakConfig lineBreakConfig) {
+            mLineBreakConfig = lineBreakConfig;
+            return this;
+        }
+
+        /**
          * Build the {@link DynamicLayout} after options have been set.
          *
          * <p>Note: the builder object must not be reused in any way after calling this method.
@@ -298,6 +316,7 @@
         private int mJustificationMode;
         private TextUtils.TruncateAt mEllipsize;
         private int mEllipsizedWidth;
+        private LineBreakConfig mLineBreakConfig = LineBreakConfig.NONE;
 
         private final Paint.FontMetricsInt mFontMetricsInt = new Paint.FontMetricsInt();
 
@@ -344,7 +363,7 @@
         this(base, display, paint, width, align, TextDirectionHeuristics.FIRSTSTRONG_LTR,
                 spacingmult, spacingadd, includepad,
                 Layout.BREAK_STRATEGY_SIMPLE, Layout.HYPHENATION_FREQUENCY_NONE,
-                Layout.JUSTIFICATION_MODE_NONE, ellipsize, ellipsizedWidth);
+                Layout.JUSTIFICATION_MODE_NONE, LineBreakConfig.NONE, ellipsize, ellipsizedWidth);
     }
 
     /**
@@ -365,6 +384,7 @@
                          boolean includepad, @BreakStrategy int breakStrategy,
                          @HyphenationFrequency int hyphenationFrequency,
                          @JustificationMode int justificationMode,
+                         @NonNull LineBreakConfig lineBreakConfig,
                          @Nullable TextUtils.TruncateAt ellipsize,
                          @IntRange(from = 0) int ellipsizedWidth) {
         super(createEllipsizer(ellipsize, display),
@@ -381,6 +401,7 @@
         mBreakStrategy = breakStrategy;
         mJustificationMode = justificationMode;
         mHyphenationFrequency = hyphenationFrequency;
+        mLineBreakConfig = lineBreakConfig;
 
         generate(b);
 
@@ -396,6 +417,7 @@
         mBreakStrategy = b.mBreakStrategy;
         mJustificationMode = b.mJustificationMode;
         mHyphenationFrequency = b.mHyphenationFrequency;
+        mLineBreakConfig = b.mLineBreakConfig;
 
         generate(b);
     }
@@ -608,6 +630,7 @@
                 .setBreakStrategy(mBreakStrategy)
                 .setHyphenationFrequency(mHyphenationFrequency)
                 .setJustificationMode(mJustificationMode)
+                .setLineBreakConfig(mLineBreakConfig)
                 .setAddLastLineLineSpacing(!islast);
 
         reflowed.generate(b, false /*includepad*/, true /*trackpad*/);
@@ -1209,6 +1232,18 @@
         return mInts.getValue(line, ELLIPSIS_COUNT);
     }
 
+    /**
+     * Gets the {@link LineBreakconfig} used in this DynamicLayout.
+     * Use this only to consult the LineBreakConfig's properties and not
+     * to change them.
+     *
+     * @return The line break config in this DynamicLayout.
+     */
+    @NonNull
+    public LineBreakConfig getLineBreakConfig() {
+        return mLineBreakConfig;
+    }
+
     private CharSequence mBase;
     private CharSequence mDisplay;
     private ChangeWatcher mWatcher;
@@ -1220,6 +1255,7 @@
     private int mBreakStrategy;
     private int mHyphenationFrequency;
     private int mJustificationMode;
+    private LineBreakConfig mLineBreakConfig;
 
     private PackedIntVector mInts;
     private PackedObjectVector<Directions> mObjects;
diff --git a/core/java/android/text/MeasuredParagraph.java b/core/java/android/text/MeasuredParagraph.java
index bedd409..5b4f195 100644
--- a/core/java/android/text/MeasuredParagraph.java
+++ b/core/java/android/text/MeasuredParagraph.java
@@ -20,6 +20,9 @@
 import android.annotation.IntRange;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.Px;
+import android.annotation.SuppressLint;
+import android.annotation.TestApi;
 import android.graphics.Paint;
 import android.graphics.Rect;
 import android.graphics.text.LineBreakConfig;
@@ -28,6 +31,7 @@
 import android.text.AutoGrowArray.FloatArray;
 import android.text.AutoGrowArray.IntArray;
 import android.text.Layout.Directions;
+import android.text.style.LineBreakConfigSpan;
 import android.text.style.MetricAffectingSpan;
 import android.text.style.ReplacementSpan;
 import android.util.Pools.SynchronizedPool;
@@ -57,6 +61,7 @@
  * MeasuredParagraph is NOT a thread safe object.
  * @hide
  */
+@TestApi
 public class MeasuredParagraph {
     private static final char OBJECT_REPLACEMENT_CHARACTER = '\uFFFC';
 
@@ -73,6 +78,7 @@
      * Recycle the MeasuredParagraph.
      *
      * Do not call any methods after you call this method.
+     * @hide
      */
     public void recycle() {
         release();
@@ -126,11 +132,14 @@
     private @Nullable MeasuredText mMeasuredText;
 
     // Following three objects are for avoiding object allocation.
-    private @NonNull TextPaint mCachedPaint = new TextPaint();
+    private final @NonNull TextPaint mCachedPaint = new TextPaint();
     private @Nullable Paint.FontMetricsInt mCachedFm;
+    private final @NonNull LineBreakConfig.Builder mLineBreakConfigBuilder =
+            new LineBreakConfig.Builder();
 
     /**
      * Releases internal buffers.
+     * @hide
      */
     public void release() {
         reset();
@@ -158,6 +167,7 @@
      * Returns the length of the paragraph.
      *
      * This is always available.
+     * @hide
      */
     public int getTextLength() {
         return mTextLength;
@@ -167,6 +177,7 @@
      * Returns the characters to be measured.
      *
      * This is always available.
+     * @hide
      */
     public @NonNull char[] getChars() {
         return mCopiedBuffer;
@@ -176,6 +187,7 @@
      * Returns the paragraph direction.
      *
      * This is always available.
+     * @hide
      */
     public @Layout.Direction int getParagraphDir() {
         return mParaDir;
@@ -185,6 +197,7 @@
      * Returns the directions.
      *
      * This is always available.
+     * @hide
      */
     public Directions getDirections(@IntRange(from = 0) int start,  // inclusive
                                     @IntRange(from = 0) int end) {  // exclusive
@@ -202,6 +215,7 @@
      *
      * This is available only if the MeasuredParagraph is computed with buildForMeasurement.
      * Returns 0 in other cases.
+     * @hide
      */
     public @FloatRange(from = 0.0f) float getWholeWidth() {
         return mWholeWidth;
@@ -212,6 +226,7 @@
      *
      * This is available only if the MeasuredParagraph is computed with buildForMeasurement.
      * Returns empty array in other cases.
+     * @hide
      */
     public @NonNull FloatArray getWidths() {
         return mWidths;
@@ -224,6 +239,7 @@
      *
      * This is available only if the MeasuredParagraph is computed with buildForStaticLayout.
      * Returns empty array in other cases.
+     * @hide
      */
     public @NonNull IntArray getSpanEndCache() {
         return mSpanEndCache;
@@ -236,6 +252,7 @@
      *
      * This is available only if the MeasuredParagraph is computed with buildForStaticLayout.
      * Returns empty array in other cases.
+     * @hide
      */
     public @NonNull IntArray getFontMetrics() {
         return mFontMetrics;
@@ -246,6 +263,7 @@
      *
      * This is available only if the MeasuredParagraph is computed with buildForStaticLayout.
      * Returns null in other cases.
+     * @hide
      */
     public MeasuredText getMeasuredText() {
         return mMeasuredText;
@@ -259,6 +277,7 @@
      *
      * @param start the inclusive start offset of the target region in the text
      * @param end the exclusive end offset of the target region in the text
+     * @hide
      */
     public float getWidth(int start, int end) {
         if (mMeasuredText == null) {
@@ -280,6 +299,7 @@
      * at (0, 0).
      *
      * This is available only if the MeasuredParagraph is computed with buildForStaticLayout.
+     * @hide
      */
     public void getBounds(@IntRange(from = 0) int start, @IntRange(from = 0) int end,
             @NonNull Rect bounds) {
@@ -290,6 +310,7 @@
      * Retrieves the font metrics for the given range.
      *
      * This is available only if the MeasuredParagraph is computed with buildForStaticLayout.
+     * @hide
      */
     public void getFontMetricsInt(@IntRange(from = 0) int start, @IntRange(from = 0) int end,
             @NonNull Paint.FontMetricsInt fmi) {
@@ -300,6 +321,7 @@
      * Returns a width of the character at the offset.
      *
      * This is available only if the MeasuredParagraph is computed with buildForStaticLayout.
+     * @hide
      */
     public float getCharWidthAt(@IntRange(from = 0) int offset) {
         return mMeasuredText.getCharWidthAt(offset);
@@ -318,6 +340,7 @@
      * @param recycle pass existing MeasuredParagraph if you want to recycle it.
      *
      * @return measured text
+     * @hide
      */
     public static @NonNull MeasuredParagraph buildForBidi(@NonNull CharSequence text,
                                                      @IntRange(from = 0) int start,
@@ -343,6 +366,7 @@
      * @param recycle pass existing MeasuredParagraph if you want to recycle it.
      *
      * @return measured text
+     * @hide
      */
     public static @NonNull MeasuredParagraph buildForMeasurement(@NonNull TextPaint paint,
                                                             @NonNull CharSequence text,
@@ -361,25 +385,53 @@
         if (mt.mSpanned == null) {
             // No style change by MetricsAffectingSpan. Just measure all text.
             mt.applyMetricsAffectingSpan(
-                    paint, null /* lineBreakConfig */, null /* spans */, start, end,
-                    null /* native builder ptr */);
+                    paint, null /* lineBreakConfig */, null /* spans */, null /* lbcSpans */,
+                    start, end, null /* native builder ptr */, null);
         } else {
             // There may be a MetricsAffectingSpan. Split into span transitions and apply styles.
             int spanEnd;
             for (int spanStart = start; spanStart < end; spanStart = spanEnd) {
-                spanEnd = mt.mSpanned.nextSpanTransition(spanStart, end, MetricAffectingSpan.class);
+                int maSpanEnd = mt.mSpanned.nextSpanTransition(spanStart, end,
+                        MetricAffectingSpan.class);
+                int lbcSpanEnd = mt.mSpanned.nextSpanTransition(spanStart, end,
+                        LineBreakConfigSpan.class);
+                spanEnd = Math.min(maSpanEnd, lbcSpanEnd);
                 MetricAffectingSpan[] spans = mt.mSpanned.getSpans(spanStart, spanEnd,
                         MetricAffectingSpan.class);
+                LineBreakConfigSpan[] lbcSpans = mt.mSpanned.getSpans(spanStart, spanEnd,
+                        LineBreakConfigSpan.class);
                 spans = TextUtils.removeEmptySpans(spans, mt.mSpanned, MetricAffectingSpan.class);
+                lbcSpans = TextUtils.removeEmptySpans(lbcSpans, mt.mSpanned,
+                        LineBreakConfigSpan.class);
                 mt.applyMetricsAffectingSpan(
-                        paint, null /* line break config */, spans, spanStart, spanEnd,
-                        null /* native builder ptr */);
+                        paint, null /* line break config */, spans, lbcSpans, spanStart, spanEnd,
+                        null /* native builder ptr */, null);
             }
         }
         return mt;
     }
 
     /**
+     * A test interface for observing the style run calculation.
+     * @hide
+     */
+    @TestApi
+    public interface StyleRunCallback {
+        /**
+         * Called when a single style run is identified.
+         */
+        void onAppendStyleRun(@NonNull Paint paint,
+                @Nullable LineBreakConfig lineBreakConfig, @IntRange(from = 0) int length,
+                boolean isRtl);
+
+        /**
+         * Called when a single replacement run is identified.
+         */
+        void onAppendReplacementRun(@NonNull Paint paint,
+                @IntRange(from = 0) int length, @Px @FloatRange(from = 0) float width);
+    }
+
+    /**
      * Generates new MeasuredParagraph for StaticLayout.
      *
      * If recycle is null, this returns new instance. If recycle is not null, this fills computed
@@ -397,6 +449,7 @@
      * @param recycle pass existing MeasuredParagraph if you want to recycle it.
      *
      * @return measured text
+     * @hide
      */
     public static @NonNull MeasuredParagraph buildForStaticLayout(
             @NonNull TextPaint paint,
@@ -409,6 +462,57 @@
             boolean computeLayout,
             @Nullable MeasuredParagraph hint,
             @Nullable MeasuredParagraph recycle) {
+        return buildForStaticLayoutInternal(paint, lineBreakConfig, text, start, end, textDir,
+                hyphenationMode, computeLayout, hint, recycle, null);
+    }
+
+    /**
+     * Generates new MeasuredParagraph for StaticLayout.
+     *
+     * If recycle is null, this returns new instance. If recycle is not null, this fills computed
+     * result to recycle and returns recycle.
+     *
+     * @param paint the paint to be used for rendering the text.
+     * @param lineBreakConfig the line break configuration for text wrapping.
+     * @param text the character sequence to be measured
+     * @param start the inclusive start offset of the target region in the text
+     * @param end the exclusive end offset of the target region in the text
+     * @param textDir the text direction
+     * @param hyphenationMode a hyphenation mode
+     * @param computeLayout true if need to compute full layout, otherwise false.
+     *
+     * @return measured text
+     * @hide
+     */
+    @SuppressLint("ExecutorRegistration")
+    @TestApi
+    @NonNull
+    public static MeasuredParagraph buildForStaticLayoutTest(
+            @NonNull TextPaint paint,
+            @Nullable LineBreakConfig lineBreakConfig,
+            @NonNull CharSequence text,
+            @IntRange(from = 0) int start,
+            @IntRange(from = 0) int end,
+            @NonNull TextDirectionHeuristic textDir,
+            int hyphenationMode,
+            boolean computeLayout,
+            @Nullable StyleRunCallback testCallback) {
+        return buildForStaticLayoutInternal(paint, lineBreakConfig, text, start, end, textDir,
+                hyphenationMode, computeLayout, null, null, testCallback);
+    }
+
+    private static @NonNull MeasuredParagraph buildForStaticLayoutInternal(
+            @NonNull TextPaint paint,
+            @Nullable LineBreakConfig lineBreakConfig,
+            @NonNull CharSequence text,
+            @IntRange(from = 0) int start,
+            @IntRange(from = 0) int end,
+            @NonNull TextDirectionHeuristic textDir,
+            int hyphenationMode,
+            boolean computeLayout,
+            @Nullable MeasuredParagraph hint,
+            @Nullable MeasuredParagraph recycle,
+            @Nullable StyleRunCallback testCallback) {
         final MeasuredParagraph mt = recycle == null ? obtain() : recycle;
         mt.resetAndAnalyzeBidi(text, start, end, textDir);
         final MeasuredText.Builder builder;
@@ -426,23 +530,29 @@
         } else {
             if (mt.mSpanned == null) {
                 // No style change by MetricsAffectingSpan. Just measure all text.
-                mt.applyMetricsAffectingSpan(paint, lineBreakConfig, null /* spans */, start, end,
-                        builder);
+                mt.applyMetricsAffectingSpan(paint, lineBreakConfig, null /* spans */, null,
+                        start, end, builder, testCallback);
                 mt.mSpanEndCache.append(end);
             } else {
                 // There may be a MetricsAffectingSpan. Split into span transitions and apply
                 // styles.
                 int spanEnd;
                 for (int spanStart = start; spanStart < end; spanStart = spanEnd) {
-                    spanEnd = mt.mSpanned.nextSpanTransition(spanStart, end,
+                    int maSpanEnd = mt.mSpanned.nextSpanTransition(spanStart, end,
                                                              MetricAffectingSpan.class);
+                    int lbcSpanEnd = mt.mSpanned.nextSpanTransition(spanStart, end,
+                            LineBreakConfigSpan.class);
+                    spanEnd = Math.min(maSpanEnd, lbcSpanEnd);
                     MetricAffectingSpan[] spans = mt.mSpanned.getSpans(spanStart, spanEnd,
                             MetricAffectingSpan.class);
+                    LineBreakConfigSpan[] lbcSpans = mt.mSpanned.getSpans(spanStart, spanEnd,
+                            LineBreakConfigSpan.class);
                     spans = TextUtils.removeEmptySpans(spans, mt.mSpanned,
                                                        MetricAffectingSpan.class);
-                    // TODO: Update line break config with spans.
-                    mt.applyMetricsAffectingSpan(paint, lineBreakConfig, spans, spanStart, spanEnd,
-                            builder);
+                    lbcSpans = TextUtils.removeEmptySpans(lbcSpans, mt.mSpanned,
+                                                       LineBreakConfigSpan.class);
+                    mt.applyMetricsAffectingSpan(paint, lineBreakConfig, spans, lbcSpans, spanStart,
+                            spanEnd, builder, testCallback);
                     mt.mSpanEndCache.append(spanEnd);
                 }
             }
@@ -519,7 +629,8 @@
                                      @IntRange(from = 0) int start,  // inclusive, in copied buffer
                                      @IntRange(from = 0) int end,  // exclusive, in copied buffer
                                      @NonNull TextPaint paint,
-                                     @Nullable MeasuredText.Builder builder) {
+                                     @Nullable MeasuredText.Builder builder,
+                                     @Nullable StyleRunCallback testCallback) {
         // Use original text. Shouldn't matter.
         // TODO: passing uninitizlied FontMetrics to developers. Do we need to keep this for
         //       backward compatibility? or Should we initialize them for getFontMetricsInt?
@@ -535,13 +646,17 @@
         } else {
             builder.appendReplacementRun(paint, end - start, width);
         }
+        if (testCallback != null) {
+            testCallback.onAppendReplacementRun(paint, end - start, width);
+        }
     }
 
     private void applyStyleRun(@IntRange(from = 0) int start,  // inclusive, in copied buffer
                                @IntRange(from = 0) int end,  // exclusive, in copied buffer
                                @NonNull TextPaint paint,
                                @Nullable LineBreakConfig config,
-                               @Nullable MeasuredText.Builder builder) {
+                               @Nullable MeasuredText.Builder builder,
+                               @Nullable StyleRunCallback testCallback) {
 
         if (mLtrWithoutBidi) {
             // If the whole text is LTR direction, just apply whole region.
@@ -552,6 +667,9 @@
             } else {
                 builder.appendStyleRun(paint, config, end - start, false /* isRtl */);
             }
+            if (testCallback != null) {
+                testCallback.onAppendStyleRun(paint, config, end - start, false);
+            }
         } else {
             // If there is multiple bidi levels, split into individual bidi level and apply style.
             byte level = mLevels.get(start);
@@ -568,6 +686,9 @@
                     } else {
                         builder.appendStyleRun(paint, config, levelEnd - levelStart, isRtl);
                     }
+                    if (testCallback != null) {
+                        testCallback.onAppendStyleRun(paint, config, levelEnd - levelStart, isRtl);
+                    }
                     if (levelEnd == end) {
                         break;
                     }
@@ -582,9 +703,11 @@
             @NonNull TextPaint paint,
             @Nullable LineBreakConfig lineBreakConfig,
             @Nullable MetricAffectingSpan[] spans,
+            @Nullable LineBreakConfigSpan[] lbcSpans,
             @IntRange(from = 0) int start,  // inclusive, in original text buffer
             @IntRange(from = 0) int end,  // exclusive, in original text buffer
-            @Nullable MeasuredText.Builder builder) {
+            @Nullable MeasuredText.Builder builder,
+            @Nullable StyleRunCallback testCallback) {
         mCachedPaint.set(paint);
         // XXX paint should not have a baseline shift, but...
         mCachedPaint.baselineShift = 0;
@@ -609,6 +732,14 @@
             }
         }
 
+        if (lbcSpans != null) {
+            mLineBreakConfigBuilder.reset(lineBreakConfig);
+            for (LineBreakConfigSpan lbcSpan : lbcSpans) {
+                mLineBreakConfigBuilder.merge(lbcSpan.getLineBreakConfig());
+            }
+            lineBreakConfig = mLineBreakConfigBuilder.build();
+        }
+
         final int startInCopiedBuffer = start - mTextStart;
         final int endInCopiedBuffer = end - mTextStart;
 
@@ -618,10 +749,10 @@
 
         if (replacement != null) {
             applyReplacementRun(replacement, startInCopiedBuffer, endInCopiedBuffer, mCachedPaint,
-                    builder);
+                    builder, testCallback);
         } else {
             applyStyleRun(startInCopiedBuffer, endInCopiedBuffer, mCachedPaint,
-                    lineBreakConfig, builder);
+                    lineBreakConfig, builder, testCallback);
         }
 
         if (needFontMetrics) {
@@ -690,6 +821,7 @@
 
     /**
      * This only works if the MeasuredParagraph is computed with buildForStaticLayout.
+     * @hide
      */
     public @IntRange(from = 0) int getMemoryUsage() {
         return mMeasuredText.getMemoryUsage();
diff --git a/core/java/android/text/PrecomputedText.java b/core/java/android/text/PrecomputedText.java
index f31a690..fd97801 100644
--- a/core/java/android/text/PrecomputedText.java
+++ b/core/java/android/text/PrecomputedText.java
@@ -329,22 +329,17 @@
         @Override
         public int hashCode() {
             // TODO: implement MinikinPaint::hashCode and use it to keep consistency with equals.
-            int lineBreakStyle = (mLineBreakConfig != null)
-                    ? mLineBreakConfig.getLineBreakStyle() : LineBreakConfig.LINE_BREAK_STYLE_NONE;
             return Objects.hash(mPaint.getTextSize(), mPaint.getTextScaleX(), mPaint.getTextSkewX(),
                     mPaint.getLetterSpacing(), mPaint.getWordSpacing(), mPaint.getFlags(),
                     mPaint.getTextLocales(), mPaint.getTypeface(),
                     mPaint.getFontVariationSettings(), mPaint.isElegantTextHeight(), mTextDir,
-                    mBreakStrategy, mHyphenationFrequency, lineBreakStyle);
+                    mBreakStrategy, mHyphenationFrequency,
+                    LineBreakConfig.getResolvedLineBreakStyle(mLineBreakConfig),
+                    LineBreakConfig.getResolvedLineBreakWordStyle(mLineBreakConfig));
         }
 
         @Override
         public String toString() {
-            int lineBreakStyle = (mLineBreakConfig != null)
-                    ? mLineBreakConfig.getLineBreakStyle() : LineBreakConfig.LINE_BREAK_STYLE_NONE;
-            int lineBreakWordStyle = (mLineBreakConfig != null)
-                    ? mLineBreakConfig.getLineBreakWordStyle()
-                            : LineBreakConfig.LINE_BREAK_WORD_STYLE_NONE;
             return "{"
                 + "textSize=" + mPaint.getTextSize()
                 + ", textScaleX=" + mPaint.getTextScaleX()
@@ -357,8 +352,9 @@
                 + ", textDir=" + mTextDir
                 + ", breakStrategy=" + mBreakStrategy
                 + ", hyphenationFrequency=" + mHyphenationFrequency
-                + ", lineBreakStyle=" + lineBreakStyle
-                + ", lineBreakWordStyle=" + lineBreakWordStyle
+                + ", lineBreakStyle=" + LineBreakConfig.getResolvedLineBreakStyle(mLineBreakConfig)
+                + ", lineBreakWordStyle="
+                    + LineBreakConfig.getResolvedLineBreakWordStyle(mLineBreakConfig)
                 + "}";
         }
     };
diff --git a/core/java/android/text/TextFlags.java b/core/java/android/text/TextFlags.java
index 9f11e31..4be6a8d 100644
--- a/core/java/android/text/TextFlags.java
+++ b/core/java/android/text/TextFlags.java
@@ -44,6 +44,6 @@
     /**
      * Default value for the flag {@link #ENABLE_NEW_CONTEXT_MENU}.
      */
-    public static final boolean ENABLE_NEW_CONTEXT_MENU_DEFAULT = false;
+    public static final boolean ENABLE_NEW_CONTEXT_MENU_DEFAULT = true;
 
 }
diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java
index f256210..447c3bc 100644
--- a/core/java/android/text/TextUtils.java
+++ b/core/java/android/text/TextUtils.java
@@ -27,6 +27,7 @@
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
 import android.content.res.Resources;
+import android.graphics.Typeface;
 import android.icu.lang.UCharacter;
 import android.icu.text.CaseMap;
 import android.icu.text.Edits;
@@ -2482,12 +2483,28 @@
         if (ellipsizeDip == 0) {
             return gettingCleaned.toString();
         } else {
-            // Truncate
-            final TextPaint paint = new TextPaint();
-            paint.setTextSize(42);
+            final float assumedFontSizePx = 42;
+            if (Typeface.getSystemFontMap().isEmpty()) {
+                // In the system server, the font files may not be loaded, so unable to perform
+                // ellipsize, so use the estimated char count for the ellipsize.
 
-            return TextUtils.ellipsize(gettingCleaned.toString(), paint, ellipsizeDip,
-                    TextUtils.TruncateAt.END);
+                // The median of glyph widths of the Roboto is 0.57em, so use it as a reference
+                // of the glyph width.
+                final float assumedCharWidthInEm = 0.57f;
+                final float assumedCharWidthInPx = assumedFontSizePx * assumedCharWidthInEm;
+
+                // Even if the argument name is `ellipsizeDip`, the unit of this argument is pixels.
+                final int charCount = (int) ((ellipsizeDip + 0.5f) / assumedCharWidthInPx);
+                return TextUtils.trimToSize(gettingCleaned.toString(), charCount)
+                        + getEllipsisString(TruncateAt.END);
+            } else {
+                // Truncate
+                final TextPaint paint = new TextPaint();
+                paint.setTextSize(assumedFontSizePx);
+
+                return TextUtils.ellipsize(gettingCleaned.toString(), paint, ellipsizeDip,
+                        TextUtils.TruncateAt.END);
+            }
         }
     }
 
diff --git a/core/java/android/text/method/LinkMovementMethod.java b/core/java/android/text/method/LinkMovementMethod.java
index dae978e..9f4a0ae 100644
--- a/core/java/android/text/method/LinkMovementMethod.java
+++ b/core/java/android/text/method/LinkMovementMethod.java
@@ -221,12 +221,20 @@
             y += widget.getScrollY();
 
             Layout layout = widget.getLayout();
-            int line = layout.getLineForVertical(y);
-            int off = layout.getOffsetForHorizontal(line, x);
+            ClickableSpan[] links;
+            if (y < 0 || y > layout.getHeight()) {
+                links = null;
+            } else {
+                int line = layout.getLineForVertical(y);
+                if (x < layout.getLineLeft(line) || x > layout.getLineRight(line)) {
+                    links = null;
+                } else {
+                    int off = layout.getOffsetForHorizontal(line, x);
+                    links = buffer.getSpans(off, off, ClickableSpan.class);
+                }
+            }
 
-            ClickableSpan[] links = buffer.getSpans(off, off, ClickableSpan.class);
-
-            if (links.length != 0) {
+            if (links != null && links.length != 0) {
                 ClickableSpan link = links[0];
                 if (action == MotionEvent.ACTION_UP) {
                     if (link instanceof TextLinkSpan) {
diff --git a/core/java/android/text/style/LineBreakConfigSpan.java b/core/java/android/text/style/LineBreakConfigSpan.java
new file mode 100644
index 0000000..90a79c6
--- /dev/null
+++ b/core/java/android/text/style/LineBreakConfigSpan.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.text.style;
+
+import android.annotation.NonNull;
+import android.graphics.text.LineBreakConfig;
+
+import java.util.Objects;
+
+/**
+ * LineBreakSpan for changing line break style of the specific region of the text.
+ */
+public class LineBreakConfigSpan {
+    private final LineBreakConfig mLineBreakConfig;
+
+    /**
+     * Construct a new {@link LineBreakConfigSpan}
+     * @param lineBreakConfig a line break config
+     */
+    public LineBreakConfigSpan(@NonNull LineBreakConfig lineBreakConfig) {
+        mLineBreakConfig = lineBreakConfig;
+    }
+
+    /**
+     * Gets an associated line break config.
+     * @return associated line break config.
+     */
+    public @NonNull LineBreakConfig getLineBreakConfig() {
+        return mLineBreakConfig;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof LineBreakConfigSpan)) return false;
+        LineBreakConfigSpan that = (LineBreakConfigSpan) o;
+        return Objects.equals(mLineBreakConfig, that.mLineBreakConfig);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mLineBreakConfig);
+    }
+
+    @Override
+    public String toString() {
+        return "LineBreakConfigSpan{mLineBreakConfig=" + mLineBreakConfig + '}';
+    }
+}
diff --git a/core/java/android/transition/ChangeBounds.java b/core/java/android/transition/ChangeBounds.java
index 59a05ac..3c185b1 100644
--- a/core/java/android/transition/ChangeBounds.java
+++ b/core/java/android/transition/ChangeBounds.java
@@ -22,6 +22,8 @@
 import android.animation.ObjectAnimator;
 import android.animation.PropertyValuesHolder;
 import android.animation.RectEvaluator;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
 import android.content.res.TypedArray;
@@ -274,9 +276,11 @@
         return parentMatches;
     }
 
+    @Nullable
     @Override
-    public Animator createAnimator(final ViewGroup sceneRoot, TransitionValues startValues,
-            TransitionValues endValues) {
+    public Animator createAnimator(@NonNull final ViewGroup sceneRoot,
+            @Nullable TransitionValues startValues,
+            @Nullable TransitionValues endValues) {
         if (startValues == null || endValues == null) {
             return null;
         }
diff --git a/core/java/android/transition/ChangeClipBounds.java b/core/java/android/transition/ChangeClipBounds.java
index a6398d3..bc2dfdc 100644
--- a/core/java/android/transition/ChangeClipBounds.java
+++ b/core/java/android/transition/ChangeClipBounds.java
@@ -19,6 +19,8 @@
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ObjectAnimator;
 import android.animation.RectEvaluator;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.Context;
 import android.graphics.Rect;
 import android.util.AttributeSet;
@@ -75,9 +77,11 @@
         captureValues(transitionValues);
     }
 
+    @Nullable
     @Override
-    public Animator createAnimator(final ViewGroup sceneRoot, TransitionValues startValues,
-            TransitionValues endValues) {
+    public Animator createAnimator(@NonNull final ViewGroup sceneRoot,
+            @Nullable TransitionValues startValues,
+            @Nullable TransitionValues endValues) {
         if (startValues == null || endValues == null
                 || !startValues.values.containsKey(PROPNAME_CLIP)
                 || !endValues.values.containsKey(PROPNAME_CLIP)) {
diff --git a/core/java/android/transition/ChangeImageTransform.java b/core/java/android/transition/ChangeImageTransform.java
index 9fa9961..f12515f 100644
--- a/core/java/android/transition/ChangeImageTransform.java
+++ b/core/java/android/transition/ChangeImageTransform.java
@@ -18,6 +18,8 @@
 import android.animation.Animator;
 import android.animation.ObjectAnimator;
 import android.animation.TypeEvaluator;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.Context;
 import android.graphics.Matrix;
 import android.graphics.Rect;
@@ -135,9 +137,11 @@
      * @return An Animator to move an ImageView or null if the View is not an ImageView,
      * the Drawable changed, the View is not VISIBLE, or there was no change.
      */
+    @Nullable
     @Override
-    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
-            TransitionValues endValues) {
+    public Animator createAnimator(@NonNull ViewGroup sceneRoot,
+            @Nullable TransitionValues startValues,
+            @Nullable TransitionValues endValues) {
         if (startValues == null || endValues == null) {
             return null;
         }
diff --git a/core/java/android/transition/ChangeScroll.java b/core/java/android/transition/ChangeScroll.java
index 8a3fd1c..054bcd7 100644
--- a/core/java/android/transition/ChangeScroll.java
+++ b/core/java/android/transition/ChangeScroll.java
@@ -18,6 +18,8 @@
 
 import android.animation.Animator;
 import android.animation.ObjectAnimator;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.Context;
 import android.util.AttributeSet;
 import android.view.View;
@@ -63,9 +65,11 @@
         transitionValues.values.put(PROPNAME_SCROLL_Y, transitionValues.view.getScrollY());
     }
 
+    @Nullable
     @Override
-    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
-            TransitionValues endValues) {
+    public Animator createAnimator(@NonNull ViewGroup sceneRoot,
+            @Nullable TransitionValues startValues,
+            @Nullable TransitionValues endValues) {
         if (startValues == null || endValues == null) {
             return null;
         }
diff --git a/core/java/android/transition/ChangeText.java b/core/java/android/transition/ChangeText.java
index d609763..b5cd46d 100644
--- a/core/java/android/transition/ChangeText.java
+++ b/core/java/android/transition/ChangeText.java
@@ -20,6 +20,8 @@
 import android.animation.AnimatorListenerAdapter;
 import android.animation.AnimatorSet;
 import android.animation.ValueAnimator;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.graphics.Color;
 import android.util.Log;
 import android.view.ViewGroup;
@@ -151,9 +153,11 @@
         captureValues(transitionValues);
     }
 
+    @Nullable
     @Override
-    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
-            TransitionValues endValues) {
+    public Animator createAnimator(@NonNull ViewGroup sceneRoot,
+            @Nullable TransitionValues startValues,
+            @Nullable TransitionValues endValues) {
         if (startValues == null || endValues == null ||
                 !(startValues.view instanceof TextView) || !(endValues.view instanceof TextView)) {
             return null;
diff --git a/core/java/android/transition/ChangeTransform.java b/core/java/android/transition/ChangeTransform.java
index 02d0a6a..2e0b95d 100644
--- a/core/java/android/transition/ChangeTransform.java
+++ b/core/java/android/transition/ChangeTransform.java
@@ -20,6 +20,7 @@
 import android.animation.FloatArrayEvaluator;
 import android.animation.ObjectAnimator;
 import android.animation.PropertyValuesHolder;
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.TypedArray;
@@ -223,9 +224,11 @@
         captureValues(transitionValues);
     }
 
+    @Nullable
     @Override
-    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
-            TransitionValues endValues) {
+    public Animator createAnimator(@NonNull ViewGroup sceneRoot,
+            @Nullable TransitionValues startValues,
+            @Nullable TransitionValues endValues) {
         if (startValues == null || endValues == null ||
                 !startValues.values.containsKey(PROPNAME_PARENT) ||
                 !endValues.values.containsKey(PROPNAME_PARENT)) {
diff --git a/core/java/android/transition/Crossfade.java b/core/java/android/transition/Crossfade.java
index 69ce872..f13b8fe 100644
--- a/core/java/android/transition/Crossfade.java
+++ b/core/java/android/transition/Crossfade.java
@@ -22,6 +22,8 @@
 import android.animation.ObjectAnimator;
 import android.animation.RectEvaluator;
 import android.animation.ValueAnimator;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Rect;
@@ -163,9 +165,11 @@
         return mResizeBehavior;
     }
 
+    @Nullable
     @Override
-    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
-            TransitionValues endValues) {
+    public Animator createAnimator(@NonNull ViewGroup sceneRoot,
+            @Nullable TransitionValues startValues,
+            @Nullable TransitionValues endValues) {
         if (startValues == null || endValues == null) {
             return null;
         }
diff --git a/core/java/android/transition/Recolor.java b/core/java/android/transition/Recolor.java
index 1a6864a..bc93d00 100644
--- a/core/java/android/transition/Recolor.java
+++ b/core/java/android/transition/Recolor.java
@@ -18,6 +18,8 @@
 
 import android.animation.Animator;
 import android.animation.ObjectAnimator;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.Context;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
@@ -66,9 +68,11 @@
         captureValues(transitionValues);
     }
 
+    @Nullable
     @Override
-    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
-            TransitionValues endValues) {
+    public Animator createAnimator(@NonNull ViewGroup sceneRoot,
+            @Nullable TransitionValues startValues,
+            @Nullable TransitionValues endValues) {
         if (startValues == null || endValues == null) {
             return null;
         }
diff --git a/core/java/android/transition/Rotate.java b/core/java/android/transition/Rotate.java
index ad1720ca..4b60568 100644
--- a/core/java/android/transition/Rotate.java
+++ b/core/java/android/transition/Rotate.java
@@ -18,6 +18,8 @@
 
 import android.animation.Animator;
 import android.animation.ObjectAnimator;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.view.View;
 import android.view.ViewGroup;
 
@@ -41,9 +43,11 @@
         transitionValues.values.put(PROPNAME_ROTATION, transitionValues.view.getRotation());
     }
 
+    @Nullable
     @Override
-    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
-            TransitionValues endValues) {
+    public Animator createAnimator(@NonNull ViewGroup sceneRoot,
+            @Nullable TransitionValues startValues,
+            @Nullable TransitionValues endValues) {
         if (startValues == null || endValues == null) {
             return null;
         }
diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java
index a204630..95841e0 100644
--- a/core/java/android/transition/Transition.java
+++ b/core/java/android/transition/Transition.java
@@ -19,6 +19,7 @@
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.TimeInterpolator;
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
@@ -464,14 +465,17 @@
      *
      *
      * @param sceneRoot The root of the transition hierarchy.
-     * @param startValues The values for a specific target in the start scene.
-     * @param endValues The values for the target in the end scene.
-     * @return A Animator to be started at the appropriate time in the
-     * overall transition for this scene change. A null value means no animation
-     * should be run.
+     * @param startValues The values for a specific target in the start scene, or {@code null} if
+     *                   the target doesn't exist in the start scene.
+     * @param endValues The values for the target in the end scene, or {@code null} if the target
+     *                 doesn't exist in the end scene.
+     * @return an {@link Animator} to be started at the appropriate time in the overall transition
+     * for this scene change. A {@code null} value means no animation should be run.
      */
-    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
-            TransitionValues endValues) {
+    @Nullable
+    public Animator createAnimator(@NonNull ViewGroup sceneRoot,
+            @Nullable TransitionValues startValues,
+            @Nullable TransitionValues endValues) {
         return null;
     }
 
diff --git a/core/java/android/transition/Visibility.java b/core/java/android/transition/Visibility.java
index 3c4b8c3..6b4608f 100644
--- a/core/java/android/transition/Visibility.java
+++ b/core/java/android/transition/Visibility.java
@@ -20,6 +20,8 @@
 import android.animation.Animator.AnimatorListener;
 import android.animation.Animator.AnimatorPauseListener;
 import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
@@ -242,9 +244,11 @@
         return visInfo;
     }
 
+    @Nullable
     @Override
-    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
-            TransitionValues endValues) {
+    public Animator createAnimator(@NonNull ViewGroup sceneRoot,
+            @Nullable TransitionValues startValues,
+            @Nullable TransitionValues endValues) {
         VisibilityInfo visInfo = getVisibilityChangeInfo(startValues, endValues);
         if (visInfo.visibilityChange
                 && (visInfo.startParent != null || visInfo.endParent != null)) {
diff --git a/core/java/android/transparency/OWNERS b/core/java/android/transparency/OWNERS
index ed0e5e5..b2621b5 100644
--- a/core/java/android/transparency/OWNERS
+++ b/core/java/android/transparency/OWNERS
@@ -1,5 +1,4 @@
 # Bug component: 1164579
 billylau@google.com
 mpgroover@google.com
-vishwath@google.com
 wenhaowang@google.com
diff --git a/core/java/android/util/AtomicFile.java b/core/java/android/util/AtomicFile.java
index be8e2c2..d084a9e 100644
--- a/core/java/android/util/AtomicFile.java
+++ b/core/java/android/util/AtomicFile.java
@@ -135,10 +135,7 @@
     @Deprecated
     public FileOutputStream startWrite(long startTime) throws IOException {
         if (mCommitEventLogger != null) {
-            if (startTime != 0) {
-                mCommitEventLogger.setStartTime(startTime);
-            }
-
+            mCommitEventLogger.setStartTime(startTime);
             mCommitEventLogger.onStartWrite();
         }
 
diff --git a/core/java/android/util/DisplayMetrics.java b/core/java/android/util/DisplayMetrics.java
index 25ee6af..795500a 100755
--- a/core/java/android/util/DisplayMetrics.java
+++ b/core/java/android/util/DisplayMetrics.java
@@ -275,8 +275,12 @@
      */
     public float density;
     /**
-     * The screen density expressed as dots-per-inch.  May be either
-     * {@link #DENSITY_LOW}, {@link #DENSITY_MEDIUM}, or {@link #DENSITY_HIGH}.
+     * The screen density expressed as dots-per-inch. May be any one of the
+     * {@code DENSITY_} constants defined above.
+     *
+     * New constants are frequently added, and constants added on new Android
+     * versions may be backported to previous Android versions, so applications
+     * should not strongly rely on density matching one of the enum constants.
      */
     public int densityDpi;
     /**
diff --git a/core/java/android/util/LongSparseArray.java b/core/java/android/util/LongSparseArray.java
index eefb156..2f14b25 100644
--- a/core/java/android/util/LongSparseArray.java
+++ b/core/java/android/util/LongSparseArray.java
@@ -209,6 +209,39 @@
     }
 
     /**
+     * Returns the index of the first element whose key is greater than or equal to the given key.
+     *
+     * @param key The key for which to search the array.
+     * @return The smallest {@code index} for which {@code (keyAt(index) >= key)} is
+     * {@code true}, or {@link #size() size} if no such {@code index} exists.
+     * @hide
+     */
+    public int firstIndexOnOrAfter(long key) {
+        if (mGarbage) {
+            gc();
+        }
+        final int index = Arrays.binarySearch(mKeys, 0, size(), key);
+        return (index >= 0) ? index : -index - 1;
+    }
+
+    /**
+     * Returns the index of the last element whose key is less than or equal to the given key.
+     *
+     * @param key The key for which to search the array.
+     * @return The largest {@code index} for which {@code (keyAt(index) <= key)} is
+     * {@code true}, or {@code -1} if no such {@code index} exists.
+     * @hide
+     */
+    public int lastIndexOnOrBefore(long key) {
+        final int index = firstIndexOnOrAfter(key);
+
+        if (index < size() && keyAt(index) == key) {
+            return index;
+        }
+        return index - 1;
+    }
+
+    /**
      * Adds a mapping from the specified key to the specified value,
      * replacing the previous mapping from the specified key if there
      * was one.
diff --git a/core/java/android/util/NtpTrustedTime.java b/core/java/android/util/NtpTrustedTime.java
index 5aa0f59..3adbd68 100644
--- a/core/java/android/util/NtpTrustedTime.java
+++ b/core/java/android/util/NtpTrustedTime.java
@@ -216,19 +216,36 @@
 
     private static NtpTrustedTime sSingleton;
 
+    /** A lock to prevent multiple refreshes taking place at the same time. */
+    private final Object mRefreshLock = new Object();
+
+    /** A lock to ensure safe read/writes to configuration. */
+    private final Object mConfigLock = new Object();
+
     /** An in-memory config override for use during tests. */
-    @GuardedBy("this")
+    @GuardedBy("mConfigLock")
     @Nullable
     private NtpConfig mNtpConfigForTests;
 
-    @GuardedBy("this")
+    /**
+     * The latest time result.
+     *
+     * <p>Written when holding {@link #mRefreshLock} but declared volatile and can be read outside
+     * synchronized blocks to avoid blocking dump() during {@link #forceRefresh}.
+     */
     @Nullable
-    private URI mLastSuccessfulNtpServerUri;
-
-    // Declared volatile and accessed outside synchronized blocks to avoid blocking reads during
-    // forceRefresh().
     private volatile TimeResult mTimeResult;
 
+    /**
+     * The last successful NTP server URI, i.e. the one used to obtain {@link #mTimeResult} when it
+     * is non-null.
+     *
+     * <p>Written when holding {@link #mRefreshLock} but declared volatile and can be read outside
+     * synchronized blocks to avoid blocking dump() during {@link #forceRefresh}.
+     */
+    @Nullable
+    private volatile URI mLastSuccessfulNtpServerUri;
+
     protected NtpTrustedTime() {
     }
 
@@ -246,7 +263,7 @@
      * test value, i.e. so the normal value will be used next time.
      */
     public void setServerConfigForTests(@NonNull NtpConfig ntpConfig) {
-        synchronized (this) {
+        synchronized (mConfigLock) {
             mNtpConfigForTests = ntpConfig;
         }
     }
@@ -254,7 +271,7 @@
     /** Forces a refresh using the default network. */
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
     public boolean forceRefresh() {
-        synchronized (this) {
+        synchronized (mRefreshLock) {
             Network network = getDefaultNetwork();
             if (network == null) {
                 if (LOGD) Log.d(TAG, "forceRefresh: no network available");
@@ -269,12 +286,13 @@
     public boolean forceRefresh(@NonNull Network network) {
         Objects.requireNonNull(network);
 
-        synchronized (this) {
+        synchronized (mRefreshLock) {
+            // Prevent concurrent refreshes.
             return forceRefreshLocked(network);
         }
     }
 
-    @GuardedBy("this")
+    @GuardedBy("mRefreshLock")
     private boolean forceRefreshLocked(@NonNull Network network) {
         Objects.requireNonNull(network);
 
@@ -349,12 +367,13 @@
         return false;
     }
 
-    @GuardedBy("this")
     private NtpConfig getNtpConfig() {
-        if (mNtpConfigForTests != null) {
-            return mNtpConfigForTests;
+        synchronized (mConfigLock) {
+            if (mNtpConfigForTests != null) {
+                return mNtpConfigForTests;
+            }
+            return getNtpConfigInternal();
         }
-        return getNtpConfigInternal();
     }
 
     /**
@@ -363,6 +382,7 @@
      *
      * <p>This method has been made public for easy replacement during tests.
      */
+    @GuardedBy("mConfigLock")
     @VisibleForTesting
     @Nullable
     public abstract NtpConfig getNtpConfigInternal();
@@ -479,14 +499,14 @@
 
     /** Sets the last received NTP time. Intended for use during tests. */
     public void setCachedTimeResult(TimeResult timeResult) {
-        synchronized (this) {
+        synchronized (mRefreshLock) {
             mTimeResult = timeResult;
         }
     }
 
     /** Clears the last received NTP time. Intended for use during tests. */
     public void clearCachedTimeResult() {
-        synchronized (this) {
+        synchronized (mRefreshLock) {
             mTimeResult = null;
         }
     }
@@ -585,15 +605,18 @@
 
     /** Prints debug information. */
     public void dump(PrintWriter pw) {
-        synchronized (this) {
+        synchronized (mConfigLock) {
             pw.println("getNtpConfig()=" + getNtpConfig());
             pw.println("mNtpConfigForTests=" + mNtpConfigForTests);
-            pw.println("mLastSuccessfulNtpServerUri=" + mLastSuccessfulNtpServerUri);
-            pw.println("mTimeResult=" + mTimeResult);
-            if (mTimeResult != null) {
-                pw.println("mTimeResult.getAgeMillis()="
-                        + Duration.ofMillis(mTimeResult.getAgeMillis()));
-            }
+        }
+
+        pw.println("mLastSuccessfulNtpServerUri=" + mLastSuccessfulNtpServerUri);
+
+        TimeResult timeResult = mTimeResult;
+        pw.println("mTimeResult=" + timeResult);
+        if (timeResult != null) {
+            pw.println("mTimeResult.getAgeMillis()="
+                    + Duration.ofMillis(timeResult.getAgeMillis()));
         }
     }
 
diff --git a/core/java/android/util/SystemConfigFileCommitEventLogger.java b/core/java/android/util/SystemConfigFileCommitEventLogger.java
index 04d72fb..e9bc4b9 100644
--- a/core/java/android/util/SystemConfigFileCommitEventLogger.java
+++ b/core/java/android/util/SystemConfigFileCommitEventLogger.java
@@ -21,6 +21,8 @@
 import android.annotation.UptimeMillisLong;
 import android.os.SystemClock;
 
+import com.android.internal.annotations.VisibleForTesting;
+
 /**
  * Writes an EventLog event capturing the performance of system config file writes.
  * The event log entry is formatted like this:
@@ -56,8 +58,9 @@
 
     /**
      * Invoked just before the configuration file writing begins.
+     * @hide
      */
-    void onStartWrite() {
+    public void onStartWrite() {
         if (mStartTime == 0) {
             mStartTime = SystemClock.uptimeMillis();
         }
@@ -65,9 +68,18 @@
 
     /**
      * Invoked just after the configuration file writing ends.
+     * @hide
      */
-    void onFinishWrite() {
-        com.android.internal.logging.EventLogTags.writeCommitSysConfigFile(mName,
-                SystemClock.uptimeMillis() - mStartTime);
+    public void onFinishWrite() {
+        writeLogRecord(SystemClock.uptimeMillis() - mStartTime);
+    }
+
+    /**
+     * The actual write of the log record.
+     * @hide
+     */
+    @VisibleForTesting
+    public void writeLogRecord(long durationMs) {
+        com.android.internal.logging.EventLogTags.writeCommitSysConfigFile(mName, durationMs);
     }
 }
diff --git a/core/java/android/util/TimeSparseArray.java b/core/java/android/util/TimeSparseArray.java
deleted file mode 100644
index 6efc683..0000000
--- a/core/java/android/util/TimeSparseArray.java
+++ /dev/null
@@ -1,93 +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 android.util;
-
-/**
- * An array that indexes by a long timestamp, representing milliseconds since the epoch.
- * @param <E> The type of values this container maps to a timestamp.
- *
- * {@hide}
- */
-public class TimeSparseArray<E> extends LongSparseArray<E> {
-    private static final String TAG = TimeSparseArray.class.getSimpleName();
-
-    private boolean mWtfReported;
-
-    /**
-     * Finds the index of the first element whose timestamp is greater or equal to
-     * the given time.
-     *
-     * @param time The timestamp for which to search the array.
-     * @return The smallest {@code index} for which {@code (keyAt(index) >= timeStamp)} is
-     * {@code true}, or {@link #size() size} if no such {@code index} exists.
-     */
-    public int closestIndexOnOrAfter(long time) {
-        final int size = size();
-        int result = size;
-        int lo = 0;
-        int hi = size - 1;
-        while (lo <= hi) {
-            final int mid = lo + ((hi - lo) / 2);
-            final long key = keyAt(mid);
-
-            if (time > key) {
-                lo = mid + 1;
-            } else if (time < key) {
-                hi = mid - 1;
-                result = mid;
-            } else {
-                return mid;
-            }
-        }
-        return result;
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * <p> This container can store only one value for each timestamp. And so ideally, the caller
-     * should ensure that there are no collisions. Reporting a {@link Slog#wtf(String, String)}
-     * if that happens, as that will lead to the previous value being overwritten.
-     */
-    @Override
-    public void put(long key, E value) {
-        if (indexOfKey(key) >= 0) {
-            if (!mWtfReported) {
-                Slog.wtf(TAG, "Overwriting value " + get(key) + " by " + value);
-                mWtfReported = true;
-            }
-        }
-        super.put(key, value);
-    }
-
-    /**
-     * Finds the index of the first element whose timestamp is less than or equal to
-     * the given time.
-     *
-     * @param time The timestamp for which to search the array.
-     * @return The largest {@code index} for which {@code (keyAt(index) <= timeStamp)} is
-     * {@code true}, or -1 if no such {@code index} exists.
-     */
-    public int closestIndexOnOrBefore(long time) {
-        final int index = closestIndexOnOrAfter(time);
-
-        if (index < size() && keyAt(index) == time) {
-            return index;
-        }
-        return index - 1;
-    }
-}
diff --git a/core/java/android/util/apk/TEST_MAPPING b/core/java/android/util/apk/TEST_MAPPING
index e182521..7668eec 100644
--- a/core/java/android/util/apk/TEST_MAPPING
+++ b/core/java/android/util/apk/TEST_MAPPING
@@ -11,13 +11,13 @@
   ],
   "presubmit-large": [
     {
-      "name": "CtsContentTestCases",
+      "name": "CtsPackageManagerTestCases",
       "options": [
         {
           "include-filter": "android.content.pm.cts.PackageManagerShellCommandIncrementalTest"
         },
         {
-          "include-filter": "android.content.pm.cts.PackageManagerShellCommandTest"
+          "include-filter": "android.content.pm.cts.PackageManagerShellCommandInstallTest"
         }
       ]
     }
diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java
index 6901b72..3e61539 100644
--- a/core/java/android/view/AccessibilityInteractionController.java
+++ b/core/java/android/view/AccessibilityInteractionController.java
@@ -1968,21 +1968,42 @@
     }
 
     /** Attaches an accessibility overlay to the specified window. */
-    public void attachAccessibilityOverlayToWindowClientThread(SurfaceControl sc) {
+    public void attachAccessibilityOverlayToWindowClientThread(
+            SurfaceControl sc,
+            int interactionId,
+            IAccessibilityInteractionConnectionCallback callback) {
         mHandler.sendMessage(
                 obtainMessage(
                         AccessibilityInteractionController
                                 ::attachAccessibilityOverlayToWindowUiThread,
                         this,
-                        sc));
+                        sc,
+                        interactionId,
+                        callback));
     }
 
-    private void attachAccessibilityOverlayToWindowUiThread(SurfaceControl sc) {
+    private void attachAccessibilityOverlayToWindowUiThread(
+            SurfaceControl sc,
+            int interactionId,
+            IAccessibilityInteractionConnectionCallback callback) {
         SurfaceControl parent = mViewRootImpl.getSurfaceControl();
-        if (parent.isValid()) {
-            SurfaceControl.Transaction t = new SurfaceControl.Transaction();
-            t.reparent(sc, parent).apply();
-            t.close();
+        if (!parent.isValid()) {
+            try {
+                callback.sendAttachOverlayResult(
+                        AccessibilityService.OVERLAY_RESULT_INTERNAL_ERROR, interactionId);
+                return;
+            } catch (RemoteException re) {
+                /* ignore - the other side will time out */
+            }
+        }
+        SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+        t.reparent(sc, parent).apply();
+        t.close();
+        try {
+            callback.sendAttachOverlayResult(
+                    AccessibilityService.OVERLAY_RESULT_SUCCESS, interactionId);
+        } catch (RemoteException re) {
+            /* ignore - the other side will time out */
         }
     }
 }
diff --git a/core/java/android/view/Choreographer.java b/core/java/android/view/Choreographer.java
index 0177904..ca33c5e 100644
--- a/core/java/android/view/Choreographer.java
+++ b/core/java/android/view/Choreographer.java
@@ -693,6 +693,7 @@
      * @throws IllegalStateException if no frame is in progress.
      * @hide
      */
+    @TestApi
     @UnsupportedAppUsage
     public long getFrameTimeNanos() {
         synchronized (mLock) {
@@ -716,6 +717,57 @@
         }
     }
 
+    /**
+     * Gets the time in {@link System#nanoTime()} timebase which the current frame
+     * is expected to be presented.
+     * <p>
+     * This time should be used to advance any animation clocks.
+     * Prefer using this method over {@link #getFrameTimeNanos()}.
+     * </p><p>
+     * This method should only be called from within a callback.
+     * </p>
+     *
+     * @return The frame start time, in the {@link System#nanoTime()} time base.
+     *
+     * @throws IllegalStateException if no frame is in progress.
+     * @hide
+     */
+    public long getExpectedPresentationTimeNanos() {
+        return mFrameData.getPreferredFrameTimeline().getExpectedPresentationTimeNanos();
+    }
+
+
+    /**
+     * Same as {@link #getExpectedPresentationTimeNanos()} but with millisecond precision.
+     *
+     * @return The frame start time, in the {@link SystemClock#uptimeMillis()} time base.
+     *
+     * @throws IllegalStateException if no frame is in progress.
+     * @hide
+     */
+    public long getExpectedPresentationTimeMillis() {
+        return getExpectedPresentationTimeNanos() / TimeUtils.NANOS_PER_MS;
+    }
+
+    /**
+     * Same as {@link #getExpectedPresentationTimeNanos()},
+     * Should always use {@link #getExpectedPresentationTimeNanos()} if it's possilbe.
+     * This method involves a binder call to SF,
+     * calling this method can potentially influence the performance.
+     *
+     * @return The frame start time, in the {@link System#nanoTime()} time base.
+     *
+     * @hide
+     */
+    public long getLatestExpectedPresentTimeNanos() {
+        if (mDisplayEventReceiver == null) {
+            return System.nanoTime();
+        }
+
+        return mDisplayEventReceiver.getLatestVsyncEventData()
+                .preferredFrameTimeline().expectedPresentationTime;
+    }
+
     private void scheduleFrameLocked(long now) {
         if (!mFrameScheduled) {
             mFrameScheduled = true;
@@ -869,7 +921,8 @@
                 Trace.traceBegin(Trace.TRACE_TAG_VIEW, message);
             }
 
-            AnimationUtils.lockAnimationClock(frameTimeNanos / TimeUtils.NANOS_PER_MS);
+            AnimationUtils.lockAnimationClock(frameTimeNanos / TimeUtils.NANOS_PER_MS,
+                    timeline.mExpectedPresentationTimeNanos);
 
             mFrameInfo.markInputHandlingStart();
             doCallbacks(Choreographer.CALLBACK_INPUT, frameIntervalNanos);
@@ -1167,10 +1220,9 @@
          */
         FrameTimeline update(
                 long frameTimeNanos, DisplayEventReceiver.VsyncEventData vsyncEventData) {
-            if (vsyncEventData.frameTimelinesLength == 0) {
-                throw new IllegalArgumentException(
-                        "Vsync event timelines length must be greater than 0");
-            }
+            // Even if the frame timelines length is 0, continue with allocation for API
+            // FrameData.getFrameTimelines consistency. The 0 length frame timelines code path
+            // should only occur when USE_VSYNC property is false.
             if (mFrameTimelines.length != vsyncEventData.frameTimelinesLength) {
                 allocateFrameTimelines(vsyncEventData.frameTimelinesLength);
             }
@@ -1207,7 +1259,11 @@
             if (newPreferredDeadline < minimumDeadline) {
                 DisplayEventReceiver.VsyncEventData latestVsyncEventData =
                         displayEventReceiver.getLatestVsyncEventData();
-                update(frameTimeNanos, latestVsyncEventData);
+                if (latestVsyncEventData == null) {
+                    Log.w(TAG, "Could not get latest VsyncEventData. Did SurfaceFlinger crash?");
+                } else {
+                    update(frameTimeNanos, latestVsyncEventData);
+                }
             } else {
                 update(frameTimeNanos, newPreferredIndex);
             }
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 4b96d74..0b2b6ce 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -375,6 +375,14 @@
     public static final int FLAG_REAR = 1 << 13;
 
     /**
+     * Display flag: Indicates that the orientation of this display is not fixed and is coupled to
+     * the orientation of its content.
+     *
+     * @hide
+     */
+    public static final int FLAG_ROTATES_WITH_CONTENT = 1 << 14;
+
+    /**
      * Display flag: Indicates that the contents of the display should not be scaled
      * to fit the physical screen dimensions.  Used for development only to emulate
      * devices with smaller physicals screens while preserving density.
diff --git a/core/java/android/view/DisplayEventReceiver.java b/core/java/android/view/DisplayEventReceiver.java
index 50246f6..a46136a 100644
--- a/core/java/android/view/DisplayEventReceiver.java
+++ b/core/java/android/view/DisplayEventReceiver.java
@@ -158,7 +158,11 @@
         static final int FRAME_TIMELINES_CAPACITY = 7;
 
         public static class FrameTimeline {
-            FrameTimeline() {}
+            FrameTimeline() {
+                // Some reasonable values (+10 ms) for default timestamps.
+                deadline = System.nanoTime() + 10_000_000;
+                expectedPresentationTime = deadline + 10_000_000;
+            }
 
             // Called from native code.
             @SuppressWarnings("unused")
@@ -179,11 +183,11 @@
             public long vsyncId = FrameInfo.INVALID_VSYNC_ID;
 
             // The frame timestamp for when the frame is expected to be presented.
-            public long expectedPresentationTime = Long.MAX_VALUE;
+            public long expectedPresentationTime;
 
             // The frame deadline timestamp in {@link System#nanoTime()} timebase that it is
             // allotted for the frame to be completed.
-            public long deadline = Long.MAX_VALUE;
+            public long deadline;
         }
 
         /**
@@ -197,7 +201,9 @@
 
         public int preferredFrameTimelineIndex = 0;
 
-        public int frameTimelinesLength = 0;
+        // The default FrameTimeline is a placeholder populated with invalid vsync ID and some
+        // reasonable timestamps.
+        public int frameTimelinesLength = 1;
 
         VsyncEventData() {
             frameTimelines = new FrameTimeline[FRAME_TIMELINES_CAPACITY];
diff --git a/core/java/android/view/HandwritingInitiator.java b/core/java/android/view/HandwritingInitiator.java
index 4cfec99..751cd21 100644
--- a/core/java/android/view/HandwritingInitiator.java
+++ b/core/java/android/view/HandwritingInitiator.java
@@ -132,12 +132,7 @@
             case MotionEvent.ACTION_DOWN:
             case MotionEvent.ACTION_POINTER_DOWN:
                 mState = null;
-                final int actionIndex = motionEvent.getActionIndex();
-                final int toolType = motionEvent.getToolType(actionIndex);
-                // TOOL_TYPE_ERASER is also from stylus. This indicates that the user is holding
-                // the eraser button during handwriting.
-                if (toolType != MotionEvent.TOOL_TYPE_STYLUS
-                        && toolType != MotionEvent.TOOL_TYPE_ERASER) {
+                if (!motionEvent.isStylusPointer()) {
                     // The motion event is not from a stylus event, ignore it.
                     return false;
                 }
diff --git a/core/java/android/view/HapticFeedbackConstants.java b/core/java/android/view/HapticFeedbackConstants.java
index 6551a18..253073a 100644
--- a/core/java/android/view/HapticFeedbackConstants.java
+++ b/core/java/android/view/HapticFeedbackConstants.java
@@ -129,27 +129,25 @@
     public static final int REJECT = 17;
 
     /**
-     * A haptic effect to provide texture while a rotary input device is being scrolled.
+     * A haptic effect to provide texture while scrolling.
      *
      * @hide
      */
-    public static final int ROTARY_SCROLL_TICK = 18;
+    public static final int SCROLL_TICK = 18;
 
     /**
-     * A haptic effect to signal that a list element has been focused while scrolling using a rotary
-     * input device.
+     * A haptic effect to signal that a list element has been focused while scrolling.
      *
      * @hide
      */
-    public static final int ROTARY_SCROLL_ITEM_FOCUS = 19;
+    public static final int SCROLL_ITEM_FOCUS = 19;
 
     /**
-     * A haptic effect to signal reaching the scrolling limits of a list while scrolling using a
-     * rotary input device.
+     * A haptic effect to signal reaching the scrolling limits of a list while scrolling.
      *
      * @hide
      */
-    public static final int ROTARY_SCROLL_LIMIT = 20;
+    public static final int SCROLL_LIMIT = 20;
 
     /**
      * The user has toggled a switch or button into the on position.
diff --git a/core/java/android/view/HapticScrollFeedbackProvider.java b/core/java/android/view/HapticScrollFeedbackProvider.java
new file mode 100644
index 0000000..7e103a5
--- /dev/null
+++ b/core/java/android/view/HapticScrollFeedbackProvider.java
@@ -0,0 +1,141 @@
+/**
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+import static com.android.internal.R.dimen.config_rotaryEncoderAxisScrollTickInterval;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+/**
+ * {@link ScrollFeedbackProvider} that performs haptic feedback when scrolling.
+ *
+ * <p>Each scrolling widget should have its own instance of this class to ensure that scroll state
+ * is isolated.
+ *
+ * @hide
+ */
+public class HapticScrollFeedbackProvider implements ScrollFeedbackProvider {
+    private static final String TAG = "HapticScrollFeedbackProvider";
+
+    private static final int TICK_INTERVAL_NO_TICK = 0;
+    private static final int TICK_INTERVAL_UNSET = Integer.MAX_VALUE;
+
+    private final View mView;
+
+
+    // Info about the cause of the latest scroll event.
+    /** The ID of the {link @InputDevice} that caused the latest scroll event. */
+    private int mDeviceId = -1;
+    /** The axis on which the latest scroll event happened. */
+    private int mAxis = -1;
+    /** The {@link InputDevice} source from which the latest scroll event happened. */
+    private int mSource = -1;
+
+    /**
+     * Cache for tick interval for scroll tick caused by a {@link InputDevice#SOURCE_ROTARY_ENCODER}
+     * on {@link MotionEvent#AXIS_SCROLL}. Set to -1 if the value has not been fetched and cached.
+     */
+    private int mRotaryEncoderAxisScrollTickIntervalPixels = TICK_INTERVAL_UNSET;
+    /** The tick interval corresponding to the current InputDevice/source/axis. */
+    private int mTickIntervalPixels = TICK_INTERVAL_NO_TICK;
+    private int mTotalScrollPixels = 0;
+    private boolean mCanPlayLimitFeedback = true;
+
+    public HapticScrollFeedbackProvider(View view) {
+        this(view, /* rotaryEncoderAxisScrollTickIntervalPixels= */ TICK_INTERVAL_UNSET);
+    }
+
+    /** @hide */
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    public HapticScrollFeedbackProvider(View view, int rotaryEncoderAxisScrollTickIntervalPixels) {
+        mView = view;
+        mRotaryEncoderAxisScrollTickIntervalPixels = rotaryEncoderAxisScrollTickIntervalPixels;
+    }
+
+    @Override
+    public void onScrollProgress(MotionEvent event, int axis, int deltaInPixels) {
+        maybeUpdateCurrentConfig(event, axis);
+
+        if (mTickIntervalPixels == TICK_INTERVAL_NO_TICK) {
+            // There's no valid tick interval. Exit early before doing any further computation.
+            return;
+        }
+
+        mTotalScrollPixels += deltaInPixels;
+
+        if (Math.abs(mTotalScrollPixels) >= mTickIntervalPixels) {
+            mTotalScrollPixels %= mTickIntervalPixels;
+            // TODO(b/239594271): create a new `performHapticFeedbackForDevice` and use that here.
+            mView.performHapticFeedback(HapticFeedbackConstants.SCROLL_TICK);
+        }
+
+        mCanPlayLimitFeedback = true;
+    }
+
+    @Override
+    public void onScrollLimit(MotionEvent event, int axis, boolean isStart) {
+        maybeUpdateCurrentConfig(event, axis);
+
+        if (!mCanPlayLimitFeedback) {
+            return;
+        }
+
+        // TODO(b/239594271): create a new `performHapticFeedbackForDevice` and use that here.
+        mView.performHapticFeedback(HapticFeedbackConstants.SCROLL_LIMIT);
+
+        mCanPlayLimitFeedback = false;
+    }
+
+    @Override
+    public void onSnapToItem(MotionEvent event, int axis) {
+        // TODO(b/239594271): create a new `performHapticFeedbackForDevice` and use that here.
+        mView.performHapticFeedback(HapticFeedbackConstants.SCROLL_ITEM_FOCUS);
+        mCanPlayLimitFeedback = true;
+    }
+
+    private void maybeUpdateCurrentConfig(MotionEvent event, int axis) {
+        int source = event.getSource();
+        int deviceId = event.getDeviceId();
+
+        if (mAxis != axis || mSource != source || mDeviceId != deviceId) {
+            mSource = source;
+            mAxis = axis;
+            mDeviceId = deviceId;
+
+            mCanPlayLimitFeedback = true;
+            mTotalScrollPixels = 0;
+            calculateTickIntervals(source, axis);
+        }
+    }
+
+    private void calculateTickIntervals(int source, int axis) {
+        mTickIntervalPixels = TICK_INTERVAL_NO_TICK;
+
+        if (axis == MotionEvent.AXIS_SCROLL && source == InputDevice.SOURCE_ROTARY_ENCODER) {
+            if (mRotaryEncoderAxisScrollTickIntervalPixels == TICK_INTERVAL_UNSET) {
+                // Value has not been fetched  yet. Fetch and cache it.
+                mRotaryEncoderAxisScrollTickIntervalPixels =
+                        mView.getContext().getResources().getDimensionPixelSize(
+                                config_rotaryEncoderAxisScrollTickInterval);
+                if (mRotaryEncoderAxisScrollTickIntervalPixels < 0) {
+                    mRotaryEncoderAxisScrollTickIntervalPixels = TICK_INTERVAL_NO_TICK;
+                }
+            }
+            mTickIntervalPixels = mRotaryEncoderAxisScrollTickIntervalPixels;
+        }
+    }
+}
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 6d96bb94..d3b7a5b 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -21,6 +21,7 @@
 import com.android.internal.policy.IKeyguardLockedStateListener;
 import com.android.internal.policy.IShortcutService;
 
+import android.app.IApplicationThread;
 import android.app.IAssistDataReceiver;
 import android.content.ComponentName;
 import android.content.res.CompatibilityInfo;
@@ -70,6 +71,7 @@
 import android.window.ISurfaceSyncGroupCompletedListener;
 import android.window.ITaskFpsCallback;
 import android.window.ScreenCapture;
+import android.window.WindowContextInfo;
 
 /**
  * System private interface to the window manager.
@@ -93,6 +95,11 @@
      * Only use {@link DisplayRotation#mUserRotation} as the display rotation.
      */
     const int FIXED_TO_USER_ROTATION_ENABLED = 2;
+    /**
+     * If auto-rotation is not supported, {@link DisplayRotation#mUserRotation} will be used.
+     * Otherwise the behavior is same as {link #FIXED_TO_USER_ROTATION_DISABLED}.
+     */
+    const int FIXED_TO_USER_ROTATION_IF_NO_AUTO_ROTATION = 3;
 
     /**
      * ===== NOTICE =====
@@ -112,14 +119,19 @@
     void getInitialDisplaySize(int displayId, out Point size);
     @UnsupportedAppUsage
     void getBaseDisplaySize(int displayId, out Point size);
+    @EnforcePermission("WRITE_SECURE_SETTINGS")
     void setForcedDisplaySize(int displayId, int width, int height);
+    @EnforcePermission("WRITE_SECURE_SETTINGS")
     void clearForcedDisplaySize(int displayId);
     @UnsupportedAppUsage
     int getInitialDisplayDensity(int displayId);
     int getBaseDisplayDensity(int displayId);
     int getDisplayIdByUniqueId(String uniqueId);
+    @EnforcePermission("WRITE_SECURE_SETTINGS")
     void setForcedDisplayDensityForUser(int displayId, int density, int userId);
+    @EnforcePermission("WRITE_SECURE_SETTINGS")
     void clearForcedDisplayDensityForUser(int displayId, int userId);
+    @EnforcePermission("WRITE_SECURE_SETTINGS")
     void setForcedDisplayScalingMode(int displayId, int mode); // 0 = auto, 1 = disable
 
     // These can only be called when holding the MANAGE_APP_TOKENS permission.
@@ -159,6 +171,7 @@
      * @param shellRootLayer The container's layer. See WindowManager#ShellRootLayer.
      * @return a SurfaceControl to add things to.
      */
+    @EnforcePermission("MANAGE_APP_TOKENS")
     SurfaceControl addShellRoot(int displayId, IWindow client, int shellRootLayer);
 
     /**
@@ -167,6 +180,7 @@
      *
      * @param target The IWindow that accessibility service interfaces with.
      */
+    @EnforcePermission("MANAGE_APP_TOKENS")
     void setShellRootAccessibilityWindow(int displayId, int shellRootLayer, IWindow target);
 
     /**
@@ -197,6 +211,7 @@
     void disableKeyguard(IBinder token, String tag, int userId);
     /** @deprecated use Activity.setShowWhenLocked instead. */
     void reenableKeyguard(IBinder token, int userId);
+    @EnforcePermission("DISABLE_KEYGUARD")
     void exitKeyguardSecurely(IOnKeyguardExitResult callback);
     @UnsupportedAppUsage
     boolean isKeyguardLocked();
@@ -417,6 +432,7 @@
     /**
      * Called by System UI to enable or disable haptic feedback on the navigation bar buttons.
      */
+    @EnforcePermission("STATUS_BAR")
     @UnsupportedAppUsage
     void setNavBarVirtualKeyHapticFeedbackEnabled(boolean enabled);
 
@@ -517,6 +533,7 @@
     /**
      * Return the touch region for the current IME window, or an empty region if there is none.
      */
+    @EnforcePermission("RESTRICTED_VR_ACCESS")
     Region getCurrentImeTouchRegion();
 
     /**
@@ -726,6 +743,7 @@
      * When in multi-window mode, the provided displayWindowInsetsController will control insets
      * animations.
      */
+    @EnforcePermission("MANAGE_APP_TOKENS")
     void setDisplayWindowInsetsController(
             int displayId, in IDisplayWindowInsetsController displayWindowInsetsController);
 
@@ -733,6 +751,7 @@
      * Called when a remote process updates the requested visibilities of insets on a display window
      * container.
      */
+    @EnforcePermission("MANAGE_APP_TOKENS")
     void updateDisplayWindowRequestedVisibleTypes(int displayId, int requestedVisibleTypes);
 
     /**
@@ -833,17 +852,18 @@
      * system server. {@link #attachWindowContextToWindowToken(IBinder, IBinder)} could be used in
      * this case to attach the WindowContext to the WindowToken.</p>
      *
+     * @param appThread the process that the window context is on.
      * @param clientToken {@link android.window.WindowContext#getWindowContextToken()
      * the WindowContext's token}
      * @param type Window type of the window context
      * @param displayId The display associated with the window context
      * @param options A bundle used to pass window-related options and choose the right DisplayArea
      *
-     * @return the DisplayArea's {@link android.app.res.Configuration} if the WindowContext is
-     * attached to the DisplayArea successfully. {@code null}, otherwise.
+     * @return the {@link WindowContextInfo} of the DisplayArea if the WindowContext is attached to
+     * the DisplayArea successfully. {@code null}, otherwise.
      */
-    Configuration attachWindowContextToDisplayArea(IBinder clientToken, int type, int displayId,
-            in Bundle options);
+    @nullable WindowContextInfo attachWindowContextToDisplayArea(in IApplicationThread appThread,
+            IBinder clientToken, int type, int displayId, in @nullable Bundle options);
 
     /**
      * Attaches a {@link android.window.WindowContext} to a {@code WindowToken}.
@@ -855,16 +875,20 @@
      * {@link android.window.WindowTokenClient#attachContext(Context)}
      * </p>
      *
+     * @param appThread the process that the window context is on.
      * @param clientToken {@link android.window.WindowContext#getWindowContextToken()
      * the WindowContext's token}
      * @param token the WindowToken to attach
      *
+     * @return the {@link WindowContextInfo} of the WindowToken if the WindowContext is attached to
+     * the WindowToken successfully. {@code null}, otherwise.
      * @throws IllegalArgumentException if the {@code clientToken} have not been attached to
      * the server or the WindowContext's type doesn't match WindowToken {@code token}'s type.
      *
      * @see #attachWindowContextToDisplayArea(IBinder, int, int, Bundle)
      */
-    void attachWindowContextToWindowToken(IBinder clientToken, IBinder token);
+    @nullable WindowContextInfo  attachWindowContextToWindowToken(in IApplicationThread appThread,
+            IBinder clientToken, IBinder token);
 
     /**
      * Attaches a {@code clientToken} to associate with DisplayContent.
@@ -873,15 +897,17 @@
      * {@link android.window.WindowTokenClient#attachContext(Context)}
      * </p>
      *
+     * @param appThread the process that the window context is on.
      * @param clientToken {@link android.window.WindowContext#getWindowContextToken()
      * the WindowContext's token}
      * @param displayId The display associated with the window context
      *
-     * @return the DisplayContent's {@link android.app.res.Configuration} if the Context is
-     * attached to the DisplayContent successfully. {@code null}, otherwise.
+     * @return the {@link WindowContextInfo} of the DisplayContent if the WindowContext is attached
+     * to the DisplayContent successfully. {@code null}, otherwise.
      * @throws android.view.WindowManager.InvalidDisplayException if the display ID is invalid
      */
-    Configuration attachToDisplayContent(IBinder clientToken, int displayId);
+    @nullable WindowContextInfo attachWindowContextToDisplayContent(in IApplicationThread appThread,
+            IBinder clientToken, int displayId);
 
     /**
      * Detaches {@link android.window.WindowContext} from the window manager node it's currently
@@ -889,7 +915,7 @@
      *
      * @param clientToken the window context's token
      */
-    void detachWindowContextFromWindowContainer(IBinder clientToken);
+    void detachWindowContext(IBinder clientToken);
 
     /**
      * Registers a listener, which is to be called whenever cross-window blur is enabled/disabled.
@@ -1027,4 +1053,13 @@
      * @return List of ComponentNames corresponding to the activities that were notified.
     */
     List<ComponentName> notifyScreenshotListeners(int displayId);
+
+    /**
+     * Replace the content of the displayId with the SurfaceControl passed in. This can be used for
+     * tests when creating a VirtualDisplay, but only want to capture specific content and not
+     * mirror the entire display.
+     */
+     @JavaPassthrough(annotation = "@android.annotation.RequiresPermission(android.Manifest"
+             + ".permission.ACCESS_SURFACE_FLINGER)")
+    boolean replaceContentOnDisplay(int displayId, in SurfaceControl sc);
 }
diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java
index a436e08a..c35b690 100644
--- a/core/java/android/view/InputDevice.java
+++ b/core/java/android/view/InputDevice.java
@@ -961,6 +961,7 @@
      * @hide
      */
     @Nullable
+    @TestApi
     public String getKeyboardLanguageTag() {
         return mKeyboardLanguageTag;
     }
@@ -971,6 +972,7 @@
      * @hide
      */
     @Nullable
+    @TestApi
     public String getKeyboardLayoutType() {
         return mKeyboardLayoutType;
     }
@@ -1320,6 +1322,7 @@
     }
 
     /** @hide */
+    @TestApi
     public int getAssociatedDisplayId() {
         return mAssociatedDisplayId;
     }
diff --git a/core/java/android/view/InputEventSender.java b/core/java/android/view/InputEventSender.java
index 64f62c7..c843bbe 100644
--- a/core/java/android/view/InputEventSender.java
+++ b/core/java/android/view/InputEventSender.java
@@ -18,6 +18,7 @@
 
 import android.compat.annotation.UnsupportedAppUsage;
 import android.os.Build;
+import android.os.Handler;
 import android.os.Looper;
 import android.os.MessageQueue;
 import android.util.Log;
@@ -25,6 +26,10 @@
 import dalvik.system.CloseGuard;
 
 import java.lang.ref.WeakReference;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.RunnableFuture;
 
 /**
  * Provides a low-level mechanism for an application to send input events.
@@ -37,10 +42,10 @@
 
     private long mSenderPtr;
 
-    // We keep references to the input channel and message queue objects here so that
-    // they are not GC'd while the native peer of the receiver is using them.
+    // We keep references to the input channel and message queue objects (indirectly through
+    // Handler) here so that they are not GC'd while the native peer of the receiver is using them.
     private InputChannel mInputChannel;
-    private MessageQueue mMessageQueue;
+    private Handler mHandler;
 
     private static native long nativeInit(WeakReference<InputEventSender> sender,
             InputChannel inputChannel, MessageQueue messageQueue);
@@ -63,9 +68,9 @@
         }
 
         mInputChannel = inputChannel;
-        mMessageQueue = looper.getQueue();
+        mHandler = new Handler(looper);
         mSenderPtr = nativeInit(new WeakReference<InputEventSender>(this),
-                mInputChannel, mMessageQueue);
+                mInputChannel, looper.getQueue());
 
         mCloseGuard.open("InputEventSender.dispose");
     }
@@ -98,8 +103,8 @@
             nativeDispose(mSenderPtr);
             mSenderPtr = 0;
         }
+        mHandler = null;
         mInputChannel = null;
-        mMessageQueue = null;
     }
 
     /**
@@ -122,8 +127,8 @@
     }
 
     /**
-     * Sends an input event.
-     * Must be called on the same Looper thread to which the sender is attached.
+     * Sends an input event. Can be called from any thread. Do not call this if the looper thread
+     * is blocked! It would cause a deadlock.
      *
      * @param seq The input event sequence number.
      * @param event The input event to send.
@@ -140,6 +145,28 @@
             return false;
         }
 
+        if (mHandler.getLooper().isCurrentThread()) {
+            return sendInputEventInternal(seq, event);
+        }
+        // This is being called on another thread. Post a runnable to the looper thread
+        // with the event injection, and wait until it's processed.
+        final RunnableFuture<Boolean> task = new FutureTask<>(new Callable<Boolean>() {
+            @Override
+            public Boolean call() throws Exception {
+                return sendInputEventInternal(seq, event);
+            }
+        });
+        mHandler.post(task);
+        try {
+            return task.get();
+        } catch (InterruptedException exc) {
+            throw new IllegalStateException("Interrupted while sending " + event + ": " + exc);
+        } catch (ExecutionException exc) {
+            throw new IllegalStateException("Couldn't send " + event + ": " + exc);
+        }
+    }
+
+    private boolean sendInputEventInternal(int seq, InputEvent event) {
         if (event instanceof KeyEvent) {
             return nativeSendKeyEvent(mSenderPtr, seq, (KeyEvent)event);
         } else {
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index 858da55..bb4cc8f 100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -2066,6 +2066,7 @@
             case KeyEvent.KEYCODE_STEM_2:
             case KeyEvent.KEYCODE_STEM_3:
             case KeyEvent.KEYCODE_WAKEUP:
+            case KeyEvent.KEYCODE_STEM_PRIMARY:
                 return true;
         }
         return false;
diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java
index c703af5..cdf5eec3 100644
--- a/core/java/android/view/MotionEvent.java
+++ b/core/java/android/view/MotionEvent.java
@@ -2457,27 +2457,6 @@
      * @return Returns the time this event occurred,
      * in the {@link android.os.SystemClock#uptimeMillis} time base but with
      * nanosecond precision.
-     *
-     * @hide
-     */
-    @UnsupportedAppUsage(publicAlternatives =
-            "Use {@link #getEventTimeNanos()} public API instead.",
-            maxTargetSdk = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
-    public final long getEventTimeNano() {
-        return nativeGetEventTimeNanos(mNativePtr, HISTORY_CURRENT);
-    }
-
-    /**
-     * Retrieve the time this event occurred,
-     * in the {@link android.os.SystemClock#uptimeMillis} time base but with
-     * nanosecond precision.
-     * <p>
-     * The value is in nanosecond precision but it may not have nanosecond accuracy.
-     * </p>
-     *
-     * @return Returns the time this event occurred,
-     * in the {@link android.os.SystemClock#uptimeMillis} time base but with
-     * nanosecond precision.
      */
     @Override
     public long getEventTimeNanos() {
diff --git a/core/java/android/view/PointerIcon.java b/core/java/android/view/PointerIcon.java
index d88994b..fee88d91 100644
--- a/core/java/android/view/PointerIcon.java
+++ b/core/java/android/view/PointerIcon.java
@@ -146,7 +146,14 @@
     // conflicts with any system types that may be defined in the future.
     private static final int TYPE_OEM_FIRST = 10000;
 
-    /** The default pointer icon. */
+    /**
+     * The default pointer icon.
+     * @deprecated This is the same as using {@link #TYPE_ARROW}. Use {@link #TYPE_ARROW} to
+     *     explicitly show an arrow, or use a {@code null} {@link PointerIcon} with
+     *     {@link View#setPointerIcon(PointerIcon)} or
+     *     {@link View#onResolvePointerIcon(MotionEvent, int)} instead to show
+     *     the default pointer icon.
+     */
     public static final int TYPE_DEFAULT = TYPE_ARROW;
 
     private static final PointerIcon gNullIcon = new PointerIcon(TYPE_NULL);
diff --git a/core/java/android/view/RoundScrollbarRenderer.java b/core/java/android/view/RoundScrollbarRenderer.java
index df9e23e..5f6d5e2 100644
--- a/core/java/android/view/RoundScrollbarRenderer.java
+++ b/core/java/android/view/RoundScrollbarRenderer.java
@@ -21,25 +21,37 @@
 import android.graphics.Paint;
 import android.graphics.Rect;
 import android.graphics.RectF;
+import android.util.DisplayMetrics;
 
 /**
  * Helper class for drawing round scroll bars on round Wear devices.
  */
 class RoundScrollbarRenderer {
     // The range of the scrollbar position represented as an angle in degrees.
-    private static final int SCROLLBAR_ANGLE_RANGE = 90;
-    private static final int MAX_SCROLLBAR_ANGLE_SWIPE = 16;
-    private static final int MIN_SCROLLBAR_ANGLE_SWIPE = 6;
-    private static final float WIDTH_PERCENTAGE = 0.02f;
-    private static final int DEFAULT_THUMB_COLOR = 0xFFE8EAED;
+    private static final float SCROLLBAR_ANGLE_RANGE = 28.8f;
+    private static final float MAX_SCROLLBAR_ANGLE_SWIPE = 26.3f; // 90%
+    private static final float MIN_SCROLLBAR_ANGLE_SWIPE = 3.1f; // 10%
+    private static final float THUMB_WIDTH_DP = 4f;
+    private static final float OUTER_PADDING_DP = 2f;
+    private static final int DEFAULT_THUMB_COLOR = 0xFFFFFFFF;
     private static final int DEFAULT_TRACK_COLOR = 0x4CFFFFFF;
 
+    // Rate at which the scrollbar will resize itself when the size of the view changes
+    private static final float RESIZING_RATE = 0.8f;
+    // Threshold at which the scrollbar will stop resizing smoothly and jump to the correct size
+    private static final int RESIZING_THRESHOLD_PX = 20;
+
     private final Paint mThumbPaint = new Paint();
     private final Paint mTrackPaint = new Paint();
     private final RectF mRect = new RectF();
     private final View mParent;
     private final int mMaskThickness;
 
+    private float mPreviousMaxScroll = 0;
+    private float mMaxScrollDiff = 0;
+    private float mPreviousCurrentScroll = 0;
+    private float mCurrentScrollDiff = 0;
+
     public RoundScrollbarRenderer(View parent) {
         // Paints for the round scrollbar.
         // Set up the thumb paint
@@ -61,19 +73,50 @@
                 com.android.internal.R.dimen.circular_display_mask_thickness);
     }
 
-    public void drawRoundScrollbars(Canvas canvas, float alpha, Rect bounds) {
+    public void drawRoundScrollbars(Canvas canvas, float alpha, Rect bounds, boolean drawToLeft) {
         if (alpha == 0) {
             return;
         }
         // Get information about the current scroll state of the parent view.
         float maxScroll = mParent.computeVerticalScrollRange();
         float scrollExtent = mParent.computeVerticalScrollExtent();
-        if (scrollExtent <= 0 || maxScroll <= scrollExtent) {
+        float newScroll = mParent.computeVerticalScrollOffset();
+
+        if (scrollExtent <= 0) {
+            if (!mParent.canScrollVertically(1) && !mParent.canScrollVertically(-1)) {
+                return;
+            } else {
+                scrollExtent = 0;
+            }
+        } else if (maxScroll <= scrollExtent) {
             return;
         }
-        float currentScroll = Math.max(0, mParent.computeVerticalScrollOffset());
-        float linearThumbLength = mParent.computeVerticalScrollExtent();
-        float thumbWidth = mParent.getWidth() * WIDTH_PERCENTAGE;
+
+        // Make changes to the VerticalScrollRange happen gradually
+        if (Math.abs(maxScroll - mPreviousMaxScroll) > RESIZING_THRESHOLD_PX
+                && mPreviousMaxScroll != 0) {
+            mMaxScrollDiff += maxScroll - mPreviousMaxScroll;
+            mCurrentScrollDiff += newScroll - mPreviousCurrentScroll;
+        }
+
+        mPreviousMaxScroll = maxScroll;
+        mPreviousCurrentScroll = newScroll;
+
+        if (Math.abs(mMaxScrollDiff) > RESIZING_THRESHOLD_PX
+                || Math.abs(mCurrentScrollDiff) > RESIZING_THRESHOLD_PX) {
+            mMaxScrollDiff *= RESIZING_RATE;
+            mCurrentScrollDiff *= RESIZING_RATE;
+
+            maxScroll -= mMaxScrollDiff;
+            newScroll -= mCurrentScrollDiff;
+        } else {
+            mMaxScrollDiff = 0;
+            mCurrentScrollDiff = 0;
+        }
+
+        float currentScroll = Math.max(0, newScroll);
+        float linearThumbLength = scrollExtent;
+        float thumbWidth = dpToPx(THUMB_WIDTH_DP);
         mThumbPaint.setStrokeWidth(thumbWidth);
         mTrackPaint.setStrokeWidth(thumbWidth);
 
@@ -85,9 +128,9 @@
         sweepAngle = clamp(sweepAngle, MIN_SCROLLBAR_ANGLE_SWIPE, MAX_SCROLLBAR_ANGLE_SWIPE);
         // Normalize the start angle so that it falls on the track.
         float startAngle = (currentScroll * (SCROLLBAR_ANGLE_RANGE - sweepAngle))
-                / (maxScroll - linearThumbLength) - SCROLLBAR_ANGLE_RANGE / 2;
-        startAngle = clamp(startAngle, -SCROLLBAR_ANGLE_RANGE / 2,
-                SCROLLBAR_ANGLE_RANGE / 2 - sweepAngle);
+                / (maxScroll - linearThumbLength) - SCROLLBAR_ANGLE_RANGE / 2f;
+        startAngle = clamp(startAngle, -SCROLLBAR_ANGLE_RANGE / 2f,
+                SCROLLBAR_ANGLE_RANGE / 2f - sweepAngle);
 
         // Draw the track and the thumb.
         float inset = thumbWidth / 2 + mMaskThickness;
@@ -96,9 +139,26 @@
                 bounds.top + inset,
                 bounds.right - inset,
                 bounds.bottom - inset);
-        canvas.drawArc(mRect, -SCROLLBAR_ANGLE_RANGE / 2, SCROLLBAR_ANGLE_RANGE, false,
-                mTrackPaint);
-        canvas.drawArc(mRect, startAngle, sweepAngle, false, mThumbPaint);
+
+        if (drawToLeft) {
+            canvas.drawArc(mRect, 180 + SCROLLBAR_ANGLE_RANGE / 2f, -SCROLLBAR_ANGLE_RANGE, false,
+                    mTrackPaint);
+            canvas.drawArc(mRect, 180 - startAngle, -sweepAngle, false, mThumbPaint);
+        } else {
+            canvas.drawArc(mRect, -SCROLLBAR_ANGLE_RANGE / 2f, SCROLLBAR_ANGLE_RANGE, false,
+                    mTrackPaint);
+            canvas.drawArc(mRect, startAngle, sweepAngle, false, mThumbPaint);
+        }
+    }
+
+    void getRoundVerticalScrollBarBounds(Rect bounds) {
+        float padding = dpToPx(OUTER_PADDING_DP);
+        final int width = mParent.mRight - mParent.mLeft;
+        final int height = mParent.mBottom - mParent.mTop;
+        bounds.left = mParent.mScrollX + (int) padding;
+        bounds.top = mParent.mScrollY + (int) padding;
+        bounds.right = mParent.mScrollX + width - (int) padding;
+        bounds.bottom = mParent.mScrollY + height - (int) padding;
     }
 
     private static float clamp(float val, float min, float max) {
@@ -127,4 +187,9 @@
             mTrackPaint.setColor(trackColor);
         }
     }
+
+    private float dpToPx(float dp) {
+        return dp * ((float) mParent.getContext().getResources().getDisplayMetrics().densityDpi)
+                / DisplayMetrics.DENSITY_DEFAULT;
+    }
 }
diff --git a/core/java/android/view/ScrollFeedbackProvider.java b/core/java/android/view/ScrollFeedbackProvider.java
new file mode 100644
index 0000000..8d3491d
--- /dev/null
+++ b/core/java/android/view/ScrollFeedbackProvider.java
@@ -0,0 +1,63 @@
+/**
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+/**
+ * Interface to represent an entity giving consistent feedback for different events surrounding view
+ * scroll.
+ *
+ * @hide
+ */
+public interface ScrollFeedbackProvider {
+    /**
+     * The view has snapped to an item, with a motion from a given {@link MotionEvent} on a given
+     * {@code axis}.
+     *
+     * <p>The interface is not aware of the internal scroll states of the view for which scroll
+     * feedback is played. As such, the client should call
+     * {@link #onScrollLimit(MotionEvent, int, int)} when scrolling has reached limit.
+     *
+     * @param event the {@link MotionEvent} that caused the item to snap.
+     * @param axis the axis of {@code event} that caused the item to snap.
+     */
+    void onSnapToItem(MotionEvent event, int axis);
+
+    /**
+     * The view has reached the scroll limit when scrolled by the motion from a given
+     * {@link MotionEvent} on a given {@code axis}.
+     *
+     * @param event the {@link MotionEvent} that caused scrolling to hit the limit.
+     * @param axis the axis of {@code event} that caused scrolling to hit the limit.
+     * @param isStart {@code true} if scrolling hit limit at the start of the scrolling list, and
+     *                {@code false} if the scrolling hit limit at the end of the scrolling list.
+     */
+    void onScrollLimit(MotionEvent event, int axis, boolean isStart);
+
+    /**
+     * The view has scrolled by {@code deltaInPixels} due to the motion from a given
+     * {@link MotionEvent} on a given {@code axis}.
+     *
+     * <p>The interface is not aware of the internal scroll states of the view for which scroll
+     * feedback is played. As such, the client should call
+     * {@link #onScrollLimit(MotionEvent, int, int)} when scrolling has reached limit.
+     *
+     * @param event the {@link MotionEvent} that caused scroll progress.
+     * @param axis the axis of {@code event} that caused scroll progress.
+     * @param deltaInPixels the amount of scroll progress, in pixels.
+     */
+    void onScrollProgress(MotionEvent event, int axis, int deltaInPixels);
+}
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index 2db2132..ad46f2b 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -815,7 +815,7 @@
 
         int syncResult = syncAndDrawFrame(frameInfo);
         if ((syncResult & SYNC_LOST_SURFACE_REWARD_IF_FOUND) != 0) {
-            Log.w("OpenGLRenderer", "Surface lost, forcing relayout");
+            Log.w("HWUI", "Surface lost, forcing relayout");
             // We lost our surface. For a relayout next frame which should give us a new
             // surface from WindowManager, which hopefully will work.
             attachInfo.mViewRootImpl.mForceNextWindowRelayout = true;
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 8dbeb27..e0e8a6b 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -8075,6 +8075,7 @@
      *
      * @param rectangle The rectangle in the View's content coordinate space
      * @return Whether any parent scrolled.
+     * @see AccessibilityAction#ACTION_SHOW_ON_SCREEN
      */
     public boolean requestRectangleOnScreen(Rect rectangle) {
         return requestRectangleOnScreen(rectangle, false);
@@ -8414,6 +8415,10 @@
      * for the matching <activity> entry in your application’s manifest or updating the title at
      * runtime with{@link android.app.Activity#setTitle(CharSequence)}.
      *
+     * <p>
+     * <b>Note:</b> Use
+     * {@link androidx.core.view.ViewCompat#setAccessibilityPaneTitle(View, CharSequence)}
+     * for backwards-compatibility. </aside>
      * @param accessibilityPaneTitle The pane's title. Setting to {@code null} indicates that this
      *                               View is not a pane.
      *
@@ -8525,13 +8530,19 @@
      * actions like a button press. Label your controls concisely and precisely instead, and for
      * significant UI changes like window changes, use
      * {@link android.app.Activity#setTitle(CharSequence)} and
-     * {@link View#setAccessibilityPaneTitle(CharSequence)}.
+     * {@link #setAccessibilityPaneTitle(CharSequence)}.
      *
      * <p>
-     * Use {@link View#setAccessibilityLiveRegion(int)} to inform the user of changes to critical
+     * Use {@link #setAccessibilityLiveRegion(int)} to inform the user of changes to critical
      * views within the user interface. These should still be used sparingly as they may generate
      * announcements every time a View is updated.
      *
+     * <p>
+     * Use {@link #setStateDescription(CharSequence)} to convey state changes to views within the
+     * user interface. While a live region may send different types of events generated by the view,
+     * state description will send {@link AccessibilityEvent#TYPE_WINDOW_CONTENT_CHANGED} events of
+     * type {@link AccessibilityEvent#CONTENT_CHANGE_TYPE_STATE_DESCRIPTION}.
+     *
      * @param text The announcement text.
      */
     public void announceForAccessibility(CharSequence text) {
@@ -8652,15 +8663,43 @@
     }
 
     /**
-     * Dispatches an {@link AccessibilityEvent} to the {@link View} first and then
-     * to its children for adding their text content to the event. Note that the
-     * event text is populated in a separate dispatch path since we add to the
+     * Dispatches an {@link AccessibilityEvent} to the {@link View} to add the text content of the
+     * view and its children.
+     * <p>
+     * <b>Note:</b> This method should only be used with event.setText().
+     * Avoid mutating other event state in this method. In general, put UI metadata in the node for
+     * services to easily query.
+     * <ul>
+     *     <li> If you are modifying other event properties, you may be eliminating semantics
+     *     accessibility services may want. Instead, send a separate event using
+     *     {@link #sendAccessibilityEvent(int)} and override
+     *     {@link #onInitializeAccessibilityEvent(AccessibilityEvent)}.
+     *     </li>
+     *     <li>If you are checking for type {@link AccessibilityEvent#TYPE_WINDOW_STATE_CHANGED}
+     *     to generate window/title announcements, you may be causing disruptive announcements
+     *     (or making no announcements at all). Instead, follow the practices described in
+     *     {@link View#announceForAccessibility(CharSequence)}. <b>Note:</b> this does not suggest
+     *     calling announceForAccessibility(), but using the suggestions listed in its
+     *     documentation.
+     *     </li>
+     *     <li>If you are making changes based on the state of accessibility, such as checking for
+     *     an event type to trigger a UI update, while well-intentioned, you are creating brittle,
+     *     less well-maintained code that works for some users but not others. Instead, leverage
+     *     existing code for equitable experiences and less technical debt. See
+     *     {@link AccessibilityManager#isEnabled()} for an example.
+     *     </li>
+     * </ul>
+     * <p>
+     * Note that the event text is populated in a separate dispatch path
+     * ({@link #onPopulateAccessibilityEvent(AccessibilityEvent)}) since we add to the
      * event not only the text of the source but also the text of all its descendants.
+     * <p>
      * A typical implementation will call
-     * {@link #onPopulateAccessibilityEvent(AccessibilityEvent)} on the this view
+     * {@link #onPopulateAccessibilityEvent(AccessibilityEvent)} on this view
      * and then call the {@link #dispatchPopulateAccessibilityEvent(AccessibilityEvent)}
-     * on each child. Override this method if custom population of the event text
-     * content is required.
+     * on each child or the first child that is visible. Override this method if custom population
+     * of the event text content is required.
+     *
      * <p>
      * If an {@link AccessibilityDelegate} has been specified via calling
      * {@link #setAccessibilityDelegate(AccessibilityDelegate)} its
@@ -8704,9 +8743,12 @@
     /**
      * Called from {@link #dispatchPopulateAccessibilityEvent(AccessibilityEvent)}
      * giving a chance to this View to populate the accessibility event with its
-     * text content. While this method is free to modify event
-     * attributes other than text content, doing so should normally be performed in
-     * {@link #onInitializeAccessibilityEvent(AccessibilityEvent)}.
+     * text content.
+     * <p>
+     * <b>Note:</b> This method should only be used with event.setText().
+     * Avoid mutating other event state in this method. Instead, follow the practices described in
+     * {@link #dispatchPopulateAccessibilityEvent(AccessibilityEvent)}. In general, put UI
+     * metadata in the node for services to easily query, than in transient events.
      * <p>
      * Example: Adding formatted date string to an accessibility event in addition
      *          to the text added by the super implementation:
@@ -11175,6 +11217,8 @@
      *
      * @param stateDescription The state description.
      * @see #getStateDescription()
+     * @see #setContentDescription(CharSequence) for the difference between content and
+     * state descriptions.
      */
     @RemotableViewMethod
     public void setStateDescription(@Nullable CharSequence stateDescription) {
@@ -11246,26 +11290,36 @@
     }
 
     /**
-     * Sets the id of a view before which this one is visited in accessibility traversal.
-     * A screen-reader must visit the content of this view before the content of the one
-     * it precedes. For example, if view B is set to be before view A, then a screen-reader
-     * will traverse the entire content of B before traversing the entire content of A,
-     * regardles of what traversal strategy it is using.
+     * Sets the id of a view that screen readers are requested to visit after this view.
+     *
      * <p>
-     * Views that do not have specified before/after relationships are traversed in order
-     * determined by the screen-reader.
-     * </p>
+     *
+     * For example, if view B should be visited before view A, with
+     * B.setAccessibilityTraversalBefore(A), this requests that screen readers visit and traverse
+     * view B before visiting view A.
+     *
      * <p>
-     * Setting that this view is before a view that is not important for accessibility
-     * or if this view is not important for accessibility will have no effect as the
-     * screen-reader is not aware of unimportant views.
-     * </p>
+     * <b>Note:</b> Views are visited in the order determined by the screen reader. Avoid
+     * explicitly manipulating focus order, as this may result in inconsistent user
+     * experiences between apps. Instead, use other semantics, such as restructuring the view
+     * hierarchy layout, to communicate order.
+     *
+     * <p>
+     * Setting this view to be after a view that is not important for accessibility,
+     * or if this view is not important for accessibility, means this method will have no effect if
+     * the service is not aware of unimportant views.
+     *
+     * <p>
+     * To avoid a risk of loops, set clear relationships between views. For example, if focus order
+     * should be B -> A, and B.setAccessibilityTraversalBefore(A), then also call
+     * A.setAccessibilityTraversalAfter(B).
      *
      * @param beforeId The id of a view this one precedes in accessibility traversal.
      *
      * @attr ref android.R.styleable#View_accessibilityTraversalBefore
      *
      * @see #setImportantForAccessibility(int)
+     * @see #setAccessibilityTraversalAfter(int)
      */
     @RemotableViewMethod
     public void setAccessibilityTraversalBefore(@IdRes int beforeId) {
@@ -11292,26 +11346,34 @@
     }
 
     /**
-     * Sets the id of a view after which this one is visited in accessibility traversal.
-     * A screen-reader must visit the content of the other view before the content of this
-     * one. For example, if view B is set to be after view A, then a screen-reader
-     * will traverse the entire content of A before traversing the entire content of B,
-     * regardles of what traversal strategy it is using.
-     * <p>
-     * Views that do not have specified before/after relationships are traversed in order
-     * determined by the screen-reader.
-     * </p>
-     * <p>
-     * Setting that this view is after a view that is not important for accessibility
-     * or if this view is not important for accessibility will have no effect as the
-     * screen-reader is not aware of unimportant views.
-     * </p>
+     * Sets the id of a view that screen readers are requested to visit before this view.
      *
-     * @param afterId The id of a view this one succedees in accessibility traversal.
+     * <p>
+     * For example, if view B should be visited after A, with B.setAccessibilityTraversalAfter(A),
+     * then this requests that screen readers visit and traverse view A before visiting view B.
+     *
+     * <p>
+     * <b>Note:</b> Views are visited in the order determined by the screen reader. Avoid
+     * explicitly manipulating focus order, as this may result in inconsistent user
+     * experiences between apps. Instead, use other semantics, such as restructuring the view
+     * hierarchy layout, to communicate order.
+     *
+     * <p>
+     * Setting this view to be after a view that is not important for accessibility,
+     * or if this view is not important for accessibility, means this method will have no effect if
+     * the service is not aware of unimportant views.
+     *
+     * <p>
+     * To avoid a risk of loops, set clear relationships between views. For example, if focus order
+     * should be B -> A, and B.setAccessibilityTraversalBefore(A), then also call
+     * A.setAccessibilityTraversalAfter(B).
+     *
+     * @param afterId The id of a view this one succeeds in accessibility traversal.
      *
      * @attr ref android.R.styleable#View_accessibilityTraversalAfter
      *
      * @see #setImportantForAccessibility(int)
+     * @see #setAccessibilityTraversalBefore(int)
      */
     @RemotableViewMethod
     public void setAccessibilityTraversalAfter(@IdRes int afterId) {
@@ -12053,6 +12115,12 @@
      * a precision touch gesture in a small area in either the X or Y dimension, such as
      * an edge swipe or dragging a <code>SeekBar</code> thumb.</p>
      *
+     * <p>On Wear OS, these rects control where system-level swipe-to-dismiss gesture can start. If
+     * the attribute {@code android:windowSwipeToDismiss} has been set to {@code false}, the system
+     * will create an exclusion rect with size equal to the window frame size. In order words, the
+     * system swipe-to-dismiss will not apply, and the app must handle gestural input within itself.
+     * </p>
+     *
      * <p>Note: the system will put a limit of <code>200dp</code> on the vertical extent of the
      * exclusions it takes into account. The limit does not apply while the navigation
      * bar is {@link #SYSTEM_UI_FLAG_IMMERSIVE_STICKY stickily} hidden, nor to the
@@ -13710,6 +13778,10 @@
     /**
      * Returns whether the view should be treated as a focusable unit by screen reader
      * accessibility tools.
+     * <p>
+     * <b>Note:</b> Use
+     * {@link androidx.core.view.ViewCompat#setScreenReaderFocusable(View, boolean)}
+     * for backwards-compatibility. </aside>
      * @see #setScreenReaderFocusable(boolean)
      *
      * @return Whether the view should be treated as a focusable unit by screen reader.
@@ -13755,6 +13827,9 @@
      * Users of some accessibility services can choose to navigate between headings
      * instead of between paragraphs, words, etc. Apps that provide headings on
      * sections of text can help the text navigation experience.
+     * <p>
+     * <b>Note:</b> Use {@link androidx.core.view.ViewCompat#setAccessibilityHeading(View, boolean)}
+     * for backwards-compatibility. </aside>
      *
      * @param isHeading {@code true} if the view is a heading, {@code false} otherwise.
      *
@@ -14602,19 +14677,34 @@
      * to the view's content description or text, or to the content descriptions
      * or text of the view's children (where applicable).
      * <p>
-     * For example, in a login screen with a TextView that displays an "incorrect
-     * password" notification, that view should be marked as a live region with
-     * mode {@link #ACCESSIBILITY_LIVE_REGION_POLITE}.
+     * To indicate that the user should be notified of changes, use
+     * {@link #ACCESSIBILITY_LIVE_REGION_POLITE}. Announcements from this region are queued and
+     * do not disrupt ongoing speech.
+     * <p>
+     * For example, selecting an option in a dropdown menu may update a panel below with the updated
+     * content. This panel may be marked as a live region with
+     * {@link #ACCESSIBILITY_LIVE_REGION_POLITE} to notify users of the change.
+     * <p>
+     * For notifying users about errors, such as in a login screen with text that displays an
+     * "incorrect password" notification, that view should send an AccessibilityEvent of type
+     * {@link AccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR} and set
+     * {@link AccessibilityNodeInfo#setError(CharSequence)} instead. Custom widgets should expose
+     * error-setting methods that support accessibility automatically. For example, instead of
+     * explicitly sending this event when using a TextView, use
+     * {@link android.widget.TextView#setError(CharSequence)}.
      * <p>
      * To disable change notifications for this view, use
      * {@link #ACCESSIBILITY_LIVE_REGION_NONE}. This is the default live region
      * mode for most views.
      * <p>
-     * To indicate that the user should be notified of changes, use
-     * {@link #ACCESSIBILITY_LIVE_REGION_POLITE}.
-     * <p>
      * If the view's changes should interrupt ongoing speech and notify the user
-     * immediately, use {@link #ACCESSIBILITY_LIVE_REGION_ASSERTIVE}.
+     * immediately, use {@link #ACCESSIBILITY_LIVE_REGION_ASSERTIVE}. This may result in disruptive
+     * announcements from an accessibility service, so it should generally be used only to convey
+     * information that is time-sensitive or critical for use of the application. Examples may
+     * include an incoming call or an emergency alert.
+     * <p>
+     * <b>Note:</b> Use {@link androidx.core.view.ViewCompat#setAccessibilityLiveRegion(View, int)}
+     * for backwards-compatibility. </aside>
      *
      * @param mode The live region mode for this view, one of:
      *        <ul>
@@ -14746,7 +14836,8 @@
      * view satisfies any of the following:
      * <ul>
      * <li>Is actionable, e.g. {@link #isClickable()},
-     * {@link #isLongClickable()}, or {@link #isFocusable()}
+     * {@link #isLongClickable()}, {@link #isContextClickable()},
+     * {@link #isScreenReaderFocusable()}, or {@link #isFocusable()}
      * <li>Has an {@link AccessibilityDelegate}
      * <li>Has an interaction listener, e.g. {@link OnTouchListener},
      * {@link OnKeyListener}, etc.
@@ -14755,6 +14846,7 @@
      * {@link #ACCESSIBILITY_LIVE_REGION_NONE}.
      * </ul>
      * <li>Has an accessibility pane title, see {@link #setAccessibilityPaneTitle}</li>
+     * <li>Is an accessibility heading, see {@link #setAccessibilityHeading(boolean)}.</li>
      * </ol>
      *
      * @return Whether the view is exposed for accessibility.
@@ -14779,9 +14871,9 @@
         }
 
         return mode == IMPORTANT_FOR_ACCESSIBILITY_YES || isActionableForAccessibility()
-                || hasListenersForAccessibility() || getAccessibilityNodeProvider() != null
+                || hasListenersForAccessibility() || mAccessibilityDelegate != null
                 || getAccessibilityLiveRegion() != ACCESSIBILITY_LIVE_REGION_NONE
-                || isAccessibilityPane();
+                || isAccessibilityPane() || isAccessibilityHeading();
     }
 
     /**
@@ -14941,7 +15033,8 @@
      * @hide
      */
     public boolean isActionableForAccessibility() {
-        return (isClickable() || isLongClickable() || isFocusable());
+        return (isClickable() || isLongClickable() || isFocusable() || isContextClickable()
+                || isScreenReaderFocusable());
     }
 
     /**
@@ -14960,8 +15053,8 @@
     /**
      * Notifies that the accessibility state of this view changed. The change
      * is local to this view and does not represent structural changes such
-     * as children and parent. For example, the view became focusable. The
-     * notification is at at most once every
+     * as children and parent. For example, the view became focusable. Some of
+     * the notification is at at most once every
      * {@link ViewConfiguration#getSendRecurringAccessibilityEventsInterval()}
      * to avoid unnecessary load to the system. Also once a view has a pending
      * notification this method is a NOP until the notification has been sent.
@@ -15023,7 +15116,7 @@
     /**
      * Notifies that the accessibility state of this view changed. The change
      * is *not* local to this view and does represent structural changes such
-     * as children and parent. For example, the view size changed. The
+     * as children and parent. For example, the view size changed. Some of the
      * notification is at at most once every
      * {@link ViewConfiguration#getSendRecurringAccessibilityEventsInterval()}
      * to avoid unnecessary load to the system. Also once a view has a pending
@@ -21170,21 +21263,11 @@
         if (mRoundScrollbarRenderer == null) {
             getStraightVerticalScrollBarBounds(bounds, touchBounds);
         } else {
-            getRoundVerticalScrollBarBounds(bounds != null ? bounds : touchBounds);
+            mRoundScrollbarRenderer.getRoundVerticalScrollBarBounds(
+                    bounds != null ? bounds : touchBounds);
         }
     }
 
-    private void getRoundVerticalScrollBarBounds(Rect bounds) {
-        final int width = mRight - mLeft;
-        final int height = mBottom - mTop;
-        // Do not take padding into account as we always want the scrollbars
-        // to hug the screen for round wearable devices.
-        bounds.left = mScrollX;
-        bounds.top = mScrollY;
-        bounds.right = bounds.left + width;
-        bounds.bottom = mScrollY + height;
-    }
-
     private void getStraightVerticalScrollBarBounds(@Nullable Rect drawBounds,
             @Nullable Rect touchBounds) {
         final Rect bounds = drawBounds != null ? drawBounds : touchBounds;
@@ -21294,8 +21377,14 @@
                 if (drawVerticalScrollBar) {
                     final Rect bounds = cache.mScrollBarBounds;
                     getVerticalScrollBarBounds(bounds, null);
+                    boolean shouldDrawScrollbarAtLeft =
+                            (mVerticalScrollbarPosition == SCROLLBAR_POSITION_LEFT)
+                                    || (mVerticalScrollbarPosition == SCROLLBAR_POSITION_DEFAULT
+                                    && isLayoutRtl());
+
                     mRoundScrollbarRenderer.drawRoundScrollbars(
-                            canvas, (float) cache.scrollBar.getAlpha() / 255f, bounds);
+                            canvas, (float) cache.scrollBar.getAlpha() / 255f, bounds,
+                            shouldDrawScrollbarAtLeft);
                     if (invalidate) {
                         invalidate();
                     }
@@ -22449,6 +22538,22 @@
     }
 
     /**
+     * Configure the {@link android.graphics.RenderEffect} to apply to the backdrop contents of this
+     * View. This will apply a visual effect to the result of the backdrop contents of this View
+     * before it is drawn. For example if
+     * {@link RenderEffect#createBlurEffect(float, float, RenderEffect, Shader.TileMode)}
+     * is provided, the previous content behind this View will be blurred before this View is drawn.
+     * @param renderEffect to be applied to the View. Passing null clears the previously configured
+     *                     {@link RenderEffect}
+     * @hide
+     */
+    public void setBackdropRenderEffect(@Nullable RenderEffect renderEffect) {
+        if (mRenderNode.setBackdropRenderEffect(renderEffect)) {
+            invalidateViewProperty(true, true);
+        }
+    }
+
+    /**
      * Updates the {@link Paint} object used with the current layer (used only if the current
      * layer type is not set to {@link #LAYER_TYPE_NONE}). Changed properties of the Paint
      * provided to {@link #setLayerType(int, android.graphics.Paint)} will be used the next time
@@ -31414,6 +31519,11 @@
      * Starting in {@link android.os.Build.VERSION_CODES#M API 23}, delegate
      * methods are called <i>after</i> host methods, which all properties to be
      * modified without being overwritten by the host class.
+     * <aside class="note">
+     * <b>Note:</b> Use a {@link androidx.core.view.AccessibilityDelegateCompat}
+     * wrapper instead of this class for backwards-compatibility.
+     * </aside>
+     *
      */
     public static class AccessibilityDelegate {
 
@@ -32005,9 +32115,7 @@
             return false;
         }
 
-        getLocationInWindow(mAttachInfo.mTmpLocation);
-        return mAttachInfo.mTmpLocation[0] == insets.getStableInsetLeft()
-                && mAttachInfo.mTmpLocation[1] == insets.getStableInsetTop();
+        return true;
     }
 
     /**
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index 0e7c6d1..2a88cf0 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -85,9 +85,9 @@
     private static final int DEFAULT_MULTI_PRESS_TIMEOUT = 300;
 
     /**
-     * Defines the time between successive key repeats in milliseconds.
+     * Defines the default duration between successive key repeats in milliseconds.
      */
-    private static final int KEY_REPEAT_DELAY = 50;
+    private static final int DEFAULT_KEY_REPEAT_DELAY_MS = 50;
 
     /**
      * Defines the duration in milliseconds a user needs to hold down the
@@ -669,14 +669,19 @@
      * @return the time before the first key repeat in milliseconds.
      */
     public static int getKeyRepeatTimeout() {
-        return getLongPressTimeout();
+        // Before the key repeat timeout was introduced, some users relied on changing
+        // LONG_PRESS_TIMEOUT settings to also change the key repeat timeout. To support
+        // this backward compatibility, we'll use the long press timeout as default value.
+        return AppGlobals.getIntCoreSetting(Settings.Secure.KEY_REPEAT_TIMEOUT_MS,
+                getLongPressTimeout());
     }
 
     /**
      * @return the time between successive key repeats in milliseconds.
      */
     public static int getKeyRepeatDelay() {
-        return KEY_REPEAT_DELAY;
+        return AppGlobals.getIntCoreSetting(Settings.Secure.KEY_REPEAT_DELAY_MS,
+                DEFAULT_KEY_REPEAT_DELAY_MS);
     }
 
     /**
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 6edf0e2..3aa610a 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -121,6 +121,7 @@
 import android.graphics.HardwareRendererObserver;
 import android.graphics.Insets;
 import android.graphics.Matrix;
+import android.graphics.Paint;
 import android.graphics.PixelFormat;
 import android.graphics.Point;
 import android.graphics.PointF;
@@ -220,7 +221,6 @@
 import com.android.internal.os.SomeArgs;
 import com.android.internal.policy.DecorView;
 import com.android.internal.policy.PhoneFallbackEventHandler;
-import com.android.internal.util.Preconditions;
 import com.android.internal.view.BaseSurfaceHolder;
 import com.android.internal.view.RootViewSurfaceTaker;
 import com.android.internal.view.SurfaceCallbackHelper;
@@ -823,6 +823,8 @@
 
     AccessibilityInteractionController mAccessibilityInteractionController;
 
+    Paint mRoundDisplayAccessibilityHighlightPaint;
+
     final AccessibilityInteractionConnectionManager mAccessibilityInteractionConnectionManager =
             new AccessibilityInteractionConnectionManager();
     final HighContrastTextManager mHighContrastTextManager;
@@ -2197,7 +2199,9 @@
             mStopped = stopped;
             final ThreadedRenderer renderer = mAttachInfo.mThreadedRenderer;
             if (renderer != null) {
-                if (DEBUG_DRAW) Log.d(mTag, "WindowStopped on " + getTitle() + " set to " + mStopped);
+                if (DEBUG_DRAW) {
+                    Log.d(mTag, "WindowStopped on " + getTitle() + " set to " + mStopped);
+                }
                 renderer.setStopped(mStopped);
             }
             if (!mStopped) {
@@ -3608,6 +3612,11 @@
                         mTmpLocation[1] + host.mBottom - host.mTop);
 
                 host.gatherTransparentRegion(mTransparentRegion);
+                final Rect bounds = mAttachInfo.mTmpInvalRect;
+                if (getAccessibilityFocusedRect(bounds)) {
+                  host.applyDrawableToTransparentRegion(getAccessibilityFocusedDrawable(),
+                      mTransparentRegion);
+                }
                 if (mTranslator != null) {
                     mTranslator.translateRegionInWindowToScreen(mTransparentRegion);
                 }
@@ -4156,6 +4165,9 @@
         // implement AccessibilityNodeProvider#findFocus
         AccessibilityNodeInfo current = provider.createAccessibilityNodeInfo(
                 AccessibilityNodeProvider.HOST_VIEW_ID);
+        if (current == null) {
+            return null;
+        }
         if (current.isFocused()) {
             return current;
         }
@@ -4896,17 +4908,11 @@
             dirty.offset(surfaceInsets.left, surfaceInsets.top);
         }
 
-        boolean accessibilityFocusDirty = false;
-        final Drawable drawable = mAttachInfo.mAccessibilityFocusDrawable;
-        if (drawable != null) {
-            final Rect bounds = mAttachInfo.mTmpInvalRect;
-            final boolean hasFocus = getAccessibilityFocusedRect(bounds);
-            if (!hasFocus) {
-                bounds.setEmpty();
-            }
-            if (!bounds.equals(drawable.getBounds())) {
-                accessibilityFocusDirty = true;
-            }
+        boolean accessibilityFocusDirty = isAccessibilityFocusDirty();
+
+        // Force recalculation of transparent regions
+        if (accessibilityFocusDirty) {
+            requestLayout();
         }
 
         mAttachInfo.mDrawingTime =
@@ -5101,21 +5107,67 @@
      * Note: We are doing this here to be able to draw the highlight for
      *       virtual views in addition to real ones.
      *
+     * Note: A round accessibility focus border is drawn on rounded watch
+     *
+     * Note: Need to set bounds of accessibility focused drawable before drawing on rounded watch,
+     * so that when accessibility focus moved, root will be invalidated at
+     * {@link #draw(boolean, SurfaceSyncGroup, boolean)} and accessibility focus border will be
+     * updated.
+     *
      * @param canvas The canvas on which to draw.
      */
     private void drawAccessibilityFocusedDrawableIfNeeded(Canvas canvas) {
         final Rect bounds = mAttachInfo.mTmpInvalRect;
         if (getAccessibilityFocusedRect(bounds)) {
+            boolean isRoundWatch = mContext.getResources().getConfiguration().isScreenRound()
+                    && mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH);
             final Drawable drawable = getAccessibilityFocusedDrawable();
             if (drawable != null) {
                 drawable.setBounds(bounds);
                 drawable.draw(canvas);
+                if (mDisplay != null && isRoundWatch) {
+                    // Draw an extra round accessibility focus border on round watch
+                    drawAccessibilityFocusedBorderOnRoundDisplay(canvas, bounds,
+                            getRoundDisplayRadius(), getRoundDisplayAccessibilityHighlightPaint());
+                }
             }
         } else if (mAttachInfo.mAccessibilityFocusDrawable != null) {
             mAttachInfo.mAccessibilityFocusDrawable.setBounds(0, 0, 0, 0);
         }
     }
 
+    private int getRoundDisplayRadius() {
+        Point displaySize = new Point();
+        mDisplay.getRealSize(displaySize);
+        return displaySize.x / 2;
+    }
+
+    private Paint getRoundDisplayAccessibilityHighlightPaint() {
+        // Lazily create the round display accessibility highlight paint.
+        if (mRoundDisplayAccessibilityHighlightPaint == null) {
+            mRoundDisplayAccessibilityHighlightPaint = new Paint();
+            mRoundDisplayAccessibilityHighlightPaint.setStyle(Paint.Style.STROKE);
+            mRoundDisplayAccessibilityHighlightPaint.setAntiAlias(true);
+        }
+        mRoundDisplayAccessibilityHighlightPaint.setStrokeWidth(
+                mAccessibilityManager.getAccessibilityFocusStrokeWidth());
+        mRoundDisplayAccessibilityHighlightPaint.setColor(
+                mAccessibilityManager.getAccessibilityFocusColor());
+        return mRoundDisplayAccessibilityHighlightPaint;
+    }
+
+    private void drawAccessibilityFocusedBorderOnRoundDisplay(Canvas canvas, Rect bounds,
+            int roundDisplayRadius, Paint accessibilityFocusHighlightPaint) {
+        int saveCount = canvas.save();
+        canvas.clipRect(bounds);
+        canvas.drawCircle(/* cx= */ roundDisplayRadius,
+                /* cy= */ roundDisplayRadius,
+                /* radius= */ roundDisplayRadius
+                        - mAccessibilityManager.getAccessibilityFocusStrokeWidth() / 2.0f,
+                accessibilityFocusHighlightPaint);
+        canvas.restoreToCount(saveCount);
+    }
+
     private boolean getAccessibilityFocusedRect(Rect bounds) {
         final AccessibilityManager manager = AccessibilityManager.getInstance(mView.mContext);
         if (!manager.isEnabled() || !manager.isTouchExplorationEnabled()) {
@@ -5463,8 +5515,9 @@
         mAccessibilityFocusedVirtualView = node;
         updateKeepClearForAccessibilityFocusRect();
 
-        if (mAttachInfo.mThreadedRenderer != null) {
-            mAttachInfo.mThreadedRenderer.invalidateRoot();
+        requestInvalidateRootRenderNode();
+        if (isAccessibilityFocusDirty()) {
+            scheduleTraversals();
         }
     }
 
@@ -7222,7 +7275,11 @@
                 final MotionEvent event = (MotionEvent)q.mEvent;
                 final int source = event.getSource();
                 if ((source & InputDevice.SOURCE_CLASS_TRACKBALL) != 0) {
-                    mTrackball.process(event);
+                    // Do not synthesize events for relative mouse movement. If apps opt into
+                    // relative mouse movement they must be prepared to handle the events.
+                    if (!event.isFromSource(InputDevice.SOURCE_MOUSE_RELATIVE)) {
+                        mTrackball.process(event);
+                    }
                     return FINISH_HANDLED;
                 } else if ((source & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
                     mJoystick.process(event);
@@ -8434,6 +8491,10 @@
             mLastLayoutFrame.set(frame);
         }
 
+        if (mOnBackInvokedDispatcher.isSystemGestureExclusionNeeded()) {
+            setRootSystemGestureExclusionRects(List.of(frame));
+        }
+
         final WindowConfiguration winConfig = getCompatWindowConfiguration();
         mPendingBackDropFrame.set(mPendingDragResizing && !winConfig.useWindowFrameForBackdrop()
                 ? winConfig.getMaxBounds()
@@ -9051,8 +9112,7 @@
                 return true;
             }
             return mEvent instanceof MotionEvent
-                    && (mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER)
-                        || mEvent.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER));
+                    && (mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER));
         }
 
         public boolean shouldSendToSynthesizer() {
@@ -9854,6 +9914,21 @@
         return AccessibilityNodeIdManager.getInstance().findView(accessibilityViewId);
     }
 
+    private boolean isAccessibilityFocusDirty() {
+        final Drawable drawable = mAttachInfo.mAccessibilityFocusDrawable;
+        if (drawable != null) {
+            final Rect bounds = mAttachInfo.mTmpInvalRect;
+            final boolean hasFocus = getAccessibilityFocusedRect(bounds);
+            if (!hasFocus) {
+                bounds.setEmpty();
+            }
+            if (!bounds.equals(drawable.getBounds())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * Updates the focused virtual view, when necessary, in response to a
      * content changed event.
@@ -9940,7 +10015,7 @@
 
     @Override
     public void notifySubtreeAccessibilityStateChanged(View child, View source, int changeType) {
-        postSendWindowContentChangedCallback(Preconditions.checkNotNull(source), changeType);
+        postSendWindowContentChangedCallback(Objects.requireNonNull(source), changeType);
     }
 
     @Override
@@ -10910,12 +10985,16 @@
             }
         }
 
-        public void attachAccessibilityOverlayToWindow(SurfaceControl sc) {
+        public void attachAccessibilityOverlayToWindow(
+                SurfaceControl sc,
+                int interactionId,
+                IAccessibilityInteractionConnectionCallback callback) {
             ViewRootImpl viewRootImpl = mViewRootImpl.get();
             if (viewRootImpl != null) {
                 viewRootImpl
                         .getAccessibilityInteractionController()
-                        .attachAccessibilityOverlayToWindowClientThread(sc);
+                        .attachAccessibilityOverlayToWindowClientThread(
+                                sc, interactionId, callback);
             }
         }
     }
@@ -10996,6 +11075,11 @@
                     run();
                 }
             }
+
+            if (!canContinueThrottle(source, changeType)) {
+                removeCallbacksAndRun();
+            }
+
             if (mSource != null) {
                 // If there is no common predecessor, then mSource points to
                 // a removed view, hence in this case always prefer the source.
@@ -11030,12 +11114,12 @@
                 mOrigin = Thread.currentThread().getStackTrace();
             }
             final long timeSinceLastMillis = SystemClock.uptimeMillis() - mLastEventTimeMillis;
-            final long minEventIntevalMillis =
+            final long minEventIntervalMillis =
                     ViewConfiguration.getSendRecurringAccessibilityEventsInterval();
-            if (timeSinceLastMillis >= minEventIntevalMillis) {
+            if (timeSinceLastMillis >= minEventIntervalMillis) {
                 removeCallbacksAndRun();
             } else {
-                mHandler.postDelayed(this, minEventIntevalMillis - timeSinceLastMillis);
+                mHandler.postDelayed(this, minEventIntervalMillis - timeSinceLastMillis);
             }
         }
 
@@ -11043,6 +11127,20 @@
             mHandler.removeCallbacks(this);
             run();
         }
+
+        private boolean canContinueThrottle(View source, int changeType) {
+            if (mSource == null) {
+                // We don't have a pending event.
+                return true;
+            }
+            if (mSource == source) {
+                // We can merge a new event with a pending event from the same source.
+                return true;
+            }
+            // We can merge subtree change events.
+            return changeType == AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE
+                    && mChangeTypes == AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE;
+        }
     }
 
     private static class UnhandledKeyManager {
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index c576286..5d1a81f 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -5805,4 +5805,35 @@
     default @NonNull List<ComponentName> notifyScreenshotListeners(int displayId) {
         throw new UnsupportedOperationException();
     }
+
+    /**
+     * @param displayId The displayId to that should have its content replaced.
+     * @param window The window that should get mirrored and the mirrored content rendered on
+     *               displayId passed in.
+     *
+     * @return Whether it successfully created a mirror SurfaceControl and replaced the display
+     * content with the mirror of the Window.
+     *
+     * @hide
+     */
+    @TestApi
+    @RequiresPermission(permission.ACCESS_SURFACE_FLINGER)
+    default boolean replaceContentOnDisplayWithMirror(int displayId, @NonNull Window window) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * @param displayId The displayId to that should have its content replaced.
+     * @param sc The SurfaceControl that should get rendered onto the displayId passed in.
+     *
+     * @return Whether it successfully created a mirror SurfaceControl and replaced the display
+     * content with the mirror of the Window.
+     *
+     * @hide
+     */
+    @TestApi
+    @RequiresPermission(permission.ACCESS_SURFACE_FLINGER)
+    default boolean replaceContentOnDisplayWithSc(int displayId, @NonNull SurfaceControl sc) {
+        throw new UnsupportedOperationException();
+    }
 }
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index 99a4f6b..d20d95d 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -164,6 +164,7 @@
         }
     }
 
+    @Nullable
     @UnsupportedAppUsage
     public static IWindowManager getWindowManagerService() {
         synchronized (WindowManagerGlobal.class) {
@@ -171,6 +172,7 @@
                 sWindowManagerService = IWindowManager.Stub.asInterface(
                         ServiceManager.getService("window"));
                 try {
+                    // Can be null if this is called before WindowManagerService is initialized.
                     if (sWindowManagerService != null) {
                         ValueAnimator.setDurationScale(
                                 sWindowManagerService.getCurrentAnimatorScale());
diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java
index b57163c..d7b74b3 100644
--- a/core/java/android/view/WindowManagerImpl.java
+++ b/core/java/android/view/WindowManagerImpl.java
@@ -34,6 +34,7 @@
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.StrictMode;
+import android.util.Log;
 import android.window.ITaskFpsCallback;
 import android.window.TaskFpsCallback;
 import android.window.WindowContext;
@@ -80,6 +81,8 @@
  * @hide
  */
 public final class WindowManagerImpl implements WindowManager {
+    private static final String TAG = "WindowManager";
+
     @UnsupportedAppUsage
     private final WindowManagerGlobal mGlobal = WindowManagerGlobal.getInstance();
     @UiContext
@@ -467,4 +470,42 @@
             throw e.rethrowFromSystemServer();
         }
     }
+
+    @Override
+    public boolean replaceContentOnDisplayWithMirror(int displayId, @NonNull Window window) {
+        View decorView = window.peekDecorView();
+        if (decorView == null) {
+            Log.e(TAG, "replaceContentOnDisplayWithMirror: Window's decorView was null.");
+            return false;
+        }
+
+        ViewRootImpl viewRoot = decorView.getViewRootImpl();
+        if (viewRoot == null) {
+            Log.e(TAG, "replaceContentOnDisplayWithMirror: Window's viewRootImpl was null.");
+            return false;
+        }
+
+        SurfaceControl sc = viewRoot.getSurfaceControl();
+        if (!sc.isValid()) {
+            Log.e(TAG, "replaceContentOnDisplayWithMirror: Window's SC is invalid.");
+            return false;
+        }
+        return replaceContentOnDisplayWithSc(displayId, SurfaceControl.mirrorSurface(sc));
+    }
+
+    @Override
+    public boolean replaceContentOnDisplayWithSc(int displayId, @NonNull SurfaceControl sc) {
+        if (!sc.isValid()) {
+            Log.e(TAG, "replaceContentOnDisplayWithSc: Invalid SC.");
+            return false;
+        }
+
+        try {
+            return WindowManagerGlobal.getWindowManagerService()
+                    .replaceContentOnDisplay(displayId, sc);
+        } catch (RemoteException e) {
+            e.rethrowAsRuntimeException();
+        }
+        return false;
+    }
 }
diff --git a/core/java/android/view/accessibility/AccessibilityCache.java b/core/java/android/view/accessibility/AccessibilityCache.java
index e6385a5..f3cde43 100644
--- a/core/java/android/view/accessibility/AccessibilityCache.java
+++ b/core/java/android/view/accessibility/AccessibilityCache.java
@@ -72,6 +72,8 @@
 
     private final AccessibilityNodeRefresher mAccessibilityNodeRefresher;
 
+    private OnNodeAddedListener mOnNodeAddedListener;
+
     private long mAccessibilityFocus = AccessibilityNodeInfo.UNDEFINED_ITEM_ID;
     private long mInputFocus = AccessibilityNodeInfo.UNDEFINED_ITEM_ID;
     /**
@@ -542,6 +544,10 @@
                 mInputFocus = sourceId;
                 mInputFocusWindow = windowId;
             }
+
+            if (mOnNodeAddedListener != null) {
+                mOnNodeAddedListener.onNodeAdded(clone);
+            }
         }
     }
 
@@ -881,6 +887,26 @@
         }
     }
 
+    /**
+     * Registers a listener to receive callbacks whenever nodes are added to cache.
+     *
+     * @param listener the listener to be registered.
+     */
+    public void registerOnNodeAddedListener(OnNodeAddedListener listener) {
+        synchronized (mLock) {
+            mOnNodeAddedListener = listener;
+        }
+    }
+
+    /**
+     * Clears the current reference to an OnNodeAddedListener, if one exists.
+     */
+    public void clearOnNodeAddedListener() {
+        synchronized (mLock) {
+            mOnNodeAddedListener = null;
+        }
+    }
+
     // Layer of indirection included to break dependency chain for testing
     public static class AccessibilityNodeRefresher {
         /** Refresh the given AccessibilityNodeInfo object. */
@@ -893,4 +919,12 @@
             return info.refresh();
         }
     }
+
+    /**
+     * Listener interface that receives callbacks when nodes are added to cache.
+     */
+    public interface OnNodeAddedListener {
+        /** Called when a node is added to cache. */
+        void onNodeAdded(AccessibilityNodeInfo node);
+    }
 }
diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java
index 33eba03..a43906f 100644
--- a/core/java/android/view/accessibility/AccessibilityEvent.java
+++ b/core/java/android/view/accessibility/AccessibilityEvent.java
@@ -192,6 +192,8 @@
  *   <li>{@link #getEventTime()}  - The event time.</li>
  *   <li>{@link #getScrollDeltaX()} - The difference in the horizontal position.</li>
  *   <li>{@link #getScrollDeltaY()} - The difference in the vertical position.</li>
+ *   <li>{@link #getMaxScrollX()} ()} -  The max scroll offset of the source left edge</li>
+ *   <li>{@link #getMaxScrollY()} ()} - The max scroll offset of the source top edge.</li>
  * </ul>
  * </p>
  * <p>
@@ -454,13 +456,15 @@
     @Deprecated
     public static final int MAX_TEXT_LENGTH = 500;
 
+    // Event types.
+
     /**
      * Represents the event of clicking on a {@link android.view.View} like
      * {@link android.widget.Button}, {@link android.widget.CompoundButton}, etc.
      * <p>See {@link AccessibilityNodeInfo.AccessibilityAction#ACTION_CLICK} for more
      * details.
      */
-    public static final int TYPE_VIEW_CLICKED = 0x00000001;
+    public static final int TYPE_VIEW_CLICKED = 1 /* << 0 */;;
 
     /**
      * Represents the event of long clicking on a {@link android.view.View} like
@@ -468,73 +472,93 @@
      * <p>See {@link AccessibilityNodeInfo.AccessibilityAction#ACTION_LONG_CLICK} for more
      * details.
      */
-    public static final int TYPE_VIEW_LONG_CLICKED = 0x00000002;
+    public static final int TYPE_VIEW_LONG_CLICKED = 1 << 1;
 
     /**
      * Represents the event of selecting an item usually in the context of an
      * {@link android.widget.AdapterView}.
+     * @see AccessibilityNodeInfo.AccessibilityAction#ACTION_SELECT
      */
-    public static final int TYPE_VIEW_SELECTED = 0x00000004;
+    public static final int TYPE_VIEW_SELECTED = 1 << 2;
 
     /**
      * Represents the event of setting input focus of a {@link android.view.View}.
+     * @see AccessibilityNodeInfo.AccessibilityAction#ACTION_ACCESSIBILITY_FOCUS for the difference
+     * between input and accessibility focus.
      */
-    public static final int TYPE_VIEW_FOCUSED = 0x00000008;
+    public static final int TYPE_VIEW_FOCUSED = 1 << 3;
 
     /**
      * Represents the event of changing the text of an {@link android.widget.EditText}.
+     * @see AccessibilityNodeInfo#setText(CharSequence)
      */
-    public static final int TYPE_VIEW_TEXT_CHANGED = 0x00000010;
+    public static final int TYPE_VIEW_TEXT_CHANGED = 1 << 4;
 
     /**
      * Represents the event of a change to a visually distinct section of the user interface.
+     * <p>
      * These events should only be dispatched from {@link android.view.View}s that have
      * accessibility pane titles, and replaces {@link #TYPE_WINDOW_CONTENT_CHANGED} for those
      * sources. Details about the change are available from {@link #getContentChangeTypes()}.
+     * <p>
+     * Do not use this to get an accessibility service to make non-pane announcements. Instead,
+     * follow the practices described in {@link View#announceForAccessibility(CharSequence)}.
+     * <b>Note:</b> this does not suggest calling announceForAccessibility(), but using the
+     * suggestions listed in its documentation.
      */
-    public static final int TYPE_WINDOW_STATE_CHANGED = 0x00000020;
+    public static final int TYPE_WINDOW_STATE_CHANGED = 1 << 5;
 
     /**
      * Represents the event showing a {@link android.app.Notification}.
      */
-    public static final int TYPE_NOTIFICATION_STATE_CHANGED = 0x00000040;
+    public static final int TYPE_NOTIFICATION_STATE_CHANGED = 1 << 6;
 
     /**
      * Represents the event of a hover enter over a {@link android.view.View}.
      */
-    public static final int TYPE_VIEW_HOVER_ENTER = 0x00000080;
+    public static final int TYPE_VIEW_HOVER_ENTER = 1 << 7;
 
     /**
      * Represents the event of a hover exit over a {@link android.view.View}.
      */
-    public static final int TYPE_VIEW_HOVER_EXIT = 0x00000100;
+    public static final int TYPE_VIEW_HOVER_EXIT = 1 << 8;
 
     /**
      * Represents the event of starting a touch exploration gesture.
      */
-    public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 0x00000200;
+    public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 1 << 9;
 
     /**
      * Represents the event of ending a touch exploration gesture.
      */
-    public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 0x00000400;
+    public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1 << 10;
 
     /**
      * Represents the event of changing the content of a window and more
      * specifically the sub-tree rooted at the event's source.
      */
-    public static final int TYPE_WINDOW_CONTENT_CHANGED = 0x00000800;
+    public static final int TYPE_WINDOW_CONTENT_CHANGED = 1 << 11;
 
     /**
-     * Represents the event of scrolling a view. This event type is generally not sent directly.
-     * @see android.view.View#onScrollChanged(int, int, int, int)
+     * Represents the event of scrolling a view. This event type is generally not sent directly. In
+     * the View system, this is sent in
+     * {@link android.view.View#onScrollChanged(int, int, int, int)}
+     * <p>In addition to the source and package name, the event should populate scroll-specific
+     * properties like {@link #setScrollDeltaX(int)}, {@link #setScrollDeltaY(int)},
+     * {@link #setMaxScrollX(int)}, and {@link #setMaxScrollY(int)}.
+     * <p>Services are encouraged to rely on the source to query UI state over AccessibilityEvents
+     * properties. For example, to check after a scroll if the bottom of the scrolling UI element
+     * has been reached, check if the source node is scrollable and has the
+     * {@link AccessibilityNodeInfo.AccessibilityAction#ACTION_SCROLL_BACKWARD} action but not the
+     * {@link AccessibilityNodeInfo.AccessibilityAction#ACTION_SCROLL_FORWARD} action.
+     * For scrolling to a target, use {@link #TYPE_VIEW_TARGETED_BY_SCROLL}.
      */
-    public static final int TYPE_VIEW_SCROLLED = 0x00001000;
+    public static final int TYPE_VIEW_SCROLLED = 1 << 12;
 
     /**
      * Represents the event of changing the selection in an {@link android.widget.EditText}.
      */
-    public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 0x00002000;
+    public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 1 << 13;
 
     /**
      * Represents the event of an application making an announcement.
@@ -542,60 +566,64 @@
      * In general, follow the practices described in
      * {@link View#announceForAccessibility(CharSequence)}.
      */
-    public static final int TYPE_ANNOUNCEMENT = 0x00004000;
+    public static final int TYPE_ANNOUNCEMENT = 1 << 14;
 
     /**
      * Represents the event of gaining accessibility focus.
+     * @see AccessibilityNodeInfo.AccessibilityAction#ACTION_ACCESSIBILITY_FOCUS for the difference
+     * between input and accessibility focus.
      */
-    public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 0x00008000;
+    public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 1 << 15;
 
     /**
      * Represents the event of clearing accessibility focus.
+     * @see AccessibilityNodeInfo.AccessibilityAction#ACTION_ACCESSIBILITY_FOCUS for the difference
+     * between input and accessibility focus.
      */
-    public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 0x00010000;
+    public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 1 << 16;
 
     /**
      * Represents the event of traversing the text of a view at a given movement granularity.
      */
-    public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 0x00020000;
+    public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 1 << 17;
 
     /**
      * Represents the event of beginning gesture detection.
      */
-    public static final int TYPE_GESTURE_DETECTION_START = 0x00040000;
+    public static final int TYPE_GESTURE_DETECTION_START = 1 << 18;
 
     /**
      * Represents the event of ending gesture detection.
      */
-    public static final int TYPE_GESTURE_DETECTION_END = 0x00080000;
+    public static final int TYPE_GESTURE_DETECTION_END = 1 << 19;
 
     /**
      * Represents the event of the user starting to touch the screen.
      */
-    public static final int TYPE_TOUCH_INTERACTION_START = 0x00100000;
+    public static final int TYPE_TOUCH_INTERACTION_START = 1 << 20;
 
     /**
      * Represents the event of the user ending to touch the screen.
      */
-    public static final int TYPE_TOUCH_INTERACTION_END = 0x00200000;
+    public static final int TYPE_TOUCH_INTERACTION_END = 1 << 21;
 
     /**
      * Represents the event change in the system windows shown on the screen. This event type should
      * only be dispatched by the system.
      */
-    public static final int TYPE_WINDOWS_CHANGED = 0x00400000;
+    public static final int TYPE_WINDOWS_CHANGED = 1 << 22;
 
     /**
      * Represents the event of a context click on a {@link android.view.View}.
      * <p>See {@link AccessibilityNodeInfo.AccessibilityAction#ACTION_CONTEXT_CLICK} for more
      * details.
      */
-    public static final int TYPE_VIEW_CONTEXT_CLICKED = 0x00800000;
+    public static final int TYPE_VIEW_CONTEXT_CLICKED = 1 << 23;
 
     /**
      * Represents the event of the assistant currently reading the users screen context.
      */
-    public static final int TYPE_ASSIST_READING_CONTEXT = 0x01000000;
+    public static final int TYPE_ASSIST_READING_CONTEXT = 1 << 24;
 
     /**
      * Represents a change in the speech state defined by the speech state change types.
@@ -613,37 +641,40 @@
      * @see #getSpeechStateChangeTypes
      * @see #setSpeechStateChangeTypes
      */
-    public static final int TYPE_SPEECH_STATE_CHANGE = 0x02000000;
+    public static final int TYPE_SPEECH_STATE_CHANGE = 1 << 25;
 
     /**
      * Represents the event of a scroll having completed and brought the target node on screen.
      */
-    public static final int TYPE_VIEW_TARGETED_BY_SCROLL = 0x04000000;
+    public static final int TYPE_VIEW_TARGETED_BY_SCROLL = 1 << 26;
+
+    // Content change types.
 
     /**
      * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event: The type of change is not
      * defined.
      */
-    public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0x00000000;
+    public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0;
 
     /**
      * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
      * One or more content changes occurred in the the subtree rooted at the source node,
      * or the subtree's structure changed when a node was added or removed.
      */
-    public static final int CONTENT_CHANGE_TYPE_SUBTREE = 0x00000001;
+    public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1 /* << 0 */;
 
     /**
      * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
      * The node's text changed.
+     * @see AccessibilityNodeInfo#setText(CharSequence)
      */
-    public static final int CONTENT_CHANGE_TYPE_TEXT = 0x00000002;
+    public static final int CONTENT_CHANGE_TYPE_TEXT = 1 << 1;
 
     /**
      * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
      * The node's content description changed.
      */
-    public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 0x00000004;
+    public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 1 << 2;
 
     /**
      * Change type for {@link #TYPE_WINDOW_STATE_CHANGED} event:
@@ -652,16 +683,17 @@
      * If this makes the pane appear, {@link #CONTENT_CHANGE_TYPE_PANE_APPEARED} is sent
      * instead. If this makes the pane disappear, {@link #CONTENT_CHANGE_TYPE_PANE_DISAPPEARED}
      * is sent.
-     *
+     * @see View#setAccessibilityPaneTitle(CharSequence)
      */
-    public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 0x00000008;
+    public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 1 << 3;
 
     /**
      * Change type for {@link #TYPE_WINDOW_STATE_CHANGED} event:
      * The node has a pane title, and either just appeared or just was assigned a title when it
      * had none before.
+     * @see View#setAccessibilityPaneTitle(CharSequence)
      */
-    public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 0x00000010;
+    public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 1 << 4;
 
     /**
      * Change type for {@link #TYPE_WINDOW_STATE_CHANGED} event:
@@ -671,8 +703,9 @@
      * No source will be returned if the node is no longer on the screen. To make the change more
      * clear for the user, the first entry in {@link #getText()} will return the value that would
      * have been returned by {@code getSource().getPaneTitle()}.
+     * @see View#setAccessibilityPaneTitle(CharSequence)
      */
-    public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 0x00000020;
+    public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 1 << 5;
 
     /**
      * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
@@ -681,8 +714,9 @@
      * changes, the changed part can be put into event text. For example, if state description
      * changed from "on, wifi signal full" to "on, wifi three bars", "wifi three bars" can be put
      * into the event text.
+     * @see View#setStateDescription(CharSequence)
      */
-    public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 0x00000040;
+    public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 1 << 6;
 
     /**
      * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
@@ -692,7 +726,7 @@
      *
      * @see AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_START
      */
-    public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 0x00000080;
+    public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 1 << 7;
 
     /**
      * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
@@ -701,7 +735,7 @@
      *
      * @see AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_DROP
      */
-    public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 0x00000100;
+    public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 1 << 8;
 
     /**
      * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
@@ -712,7 +746,7 @@
      *
      * @see AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_CANCEL
      */
-    public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 0x0000200;
+    public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 1 << 9;
 
     /**
      * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
@@ -724,7 +758,7 @@
      * @see AccessibilityNodeInfo#isContentInvalid
      * @see AccessibilityNodeInfo#setContentInvalid
      */
-    public static final int CONTENT_CHANGE_TYPE_CONTENT_INVALID = 0x0000400;
+    public static final int CONTENT_CHANGE_TYPE_CONTENT_INVALID = 1 << 10;
 
     /**
      * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
@@ -736,7 +770,7 @@
      * @see AccessibilityNodeInfo#getError
      * @see AccessibilityNodeInfo#setError
      */
-    public static final int CONTENT_CHANGE_TYPE_ERROR = 0x0000800;
+    public static final int CONTENT_CHANGE_TYPE_ERROR = 1 << 11;
 
     /**
      * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
@@ -750,44 +784,48 @@
      */
     public static final int CONTENT_CHANGE_TYPE_ENABLED = 1 << 12;
 
+    // Speech state change types.
+
     /** Change type for {@link #TYPE_SPEECH_STATE_CHANGE} event: another service is speaking. */
-    public static final int SPEECH_STATE_SPEAKING_START = 0x00000001;
+    public static final int SPEECH_STATE_SPEAKING_START = 1 /* << 0 */;;
 
     /**
      * Change type for {@link #TYPE_SPEECH_STATE_CHANGE} event: another service is no longer
      * speaking.
      */
-    public static final int SPEECH_STATE_SPEAKING_END = 0x00000002;
+    public static final int SPEECH_STATE_SPEAKING_END = 1 << 1;
 
     /**
      * Change type for {@link #TYPE_SPEECH_STATE_CHANGE} event: another service is listening to the
      * microphone.
      */
-    public static final int SPEECH_STATE_LISTENING_START = 0x00000004;
+    public static final int SPEECH_STATE_LISTENING_START = 1 << 2;
 
     /**
      * Change type for {@link #TYPE_SPEECH_STATE_CHANGE} event: another service is no longer
      * listening to the microphone.
      */
-    public static final int SPEECH_STATE_LISTENING_END = 0x00000008;
+    public static final int SPEECH_STATE_LISTENING_END = 1 << 3;
+
+    // Windows change types.
 
     /**
      * Change type for {@link #TYPE_WINDOWS_CHANGED} event:
      * The window was added.
      */
-    public static final int WINDOWS_CHANGE_ADDED = 0x00000001;
+    public static final int WINDOWS_CHANGE_ADDED = 1 /* << 0 */;;
 
     /**
      * Change type for {@link #TYPE_WINDOWS_CHANGED} event:
      * A window was removed.
      */
-    public static final int WINDOWS_CHANGE_REMOVED = 0x00000002;
+    public static final int WINDOWS_CHANGE_REMOVED = 1 << 1;
 
     /**
      * Change type for {@link #TYPE_WINDOWS_CHANGED} event:
      * The window's title changed.
      */
-    public static final int WINDOWS_CHANGE_TITLE = 0x00000004;
+    public static final int WINDOWS_CHANGE_TITLE = 1 << 2;
 
     /**
      * Change type for {@link #TYPE_WINDOWS_CHANGED} event:
@@ -797,49 +835,49 @@
      * region changed. It's also possible that region changed but bounds doesn't.
      * </p>
      */
-    public static final int WINDOWS_CHANGE_BOUNDS = 0x00000008;
+    public static final int WINDOWS_CHANGE_BOUNDS = 1 << 3;
 
     /**
      * Change type for {@link #TYPE_WINDOWS_CHANGED} event:
      * The window's layer changed.
      */
-    public static final int WINDOWS_CHANGE_LAYER = 0x00000010;
+    public static final int WINDOWS_CHANGE_LAYER = 1 << 4;
 
     /**
      * Change type for {@link #TYPE_WINDOWS_CHANGED} event:
      * The window's {@link AccessibilityWindowInfo#isActive()} changed.
      */
-    public static final int WINDOWS_CHANGE_ACTIVE = 0x00000020;
+    public static final int WINDOWS_CHANGE_ACTIVE = 1 << 5;
 
     /**
      * Change type for {@link #TYPE_WINDOWS_CHANGED} event:
      * The window's {@link AccessibilityWindowInfo#isFocused()} changed.
      */
-    public static final int WINDOWS_CHANGE_FOCUSED = 0x00000040;
+    public static final int WINDOWS_CHANGE_FOCUSED = 1 << 6;
 
     /**
      * Change type for {@link #TYPE_WINDOWS_CHANGED} event:
      * The window's {@link AccessibilityWindowInfo#isAccessibilityFocused()} changed.
      */
-    public static final int WINDOWS_CHANGE_ACCESSIBILITY_FOCUSED = 0x00000080;
+    public static final int WINDOWS_CHANGE_ACCESSIBILITY_FOCUSED = 1 << 7;
 
     /**
      * Change type for {@link #TYPE_WINDOWS_CHANGED} event:
      * The window's parent changed.
      */
-    public static final int WINDOWS_CHANGE_PARENT = 0x00000100;
+    public static final int WINDOWS_CHANGE_PARENT = 1 << 8;
 
     /**
      * Change type for {@link #TYPE_WINDOWS_CHANGED} event:
      * The window's children changed.
      */
-    public static final int WINDOWS_CHANGE_CHILDREN = 0x00000200;
+    public static final int WINDOWS_CHANGE_CHILDREN = 1 << 9;
 
     /**
      * Change type for {@link #TYPE_WINDOWS_CHANGED} event:
      * The window either entered or exited picture-in-picture mode.
      */
-    public static final int WINDOWS_CHANGE_PIP = 0x00000400;
+    public static final int WINDOWS_CHANGE_PIP = 1 << 10;
 
     /** @hide */
     @Retention(RetentionPolicy.SOURCE)
@@ -895,6 +933,7 @@
     public @interface SpeechStateChangeTypes {}
 
     /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
     @IntDef(
             flag = true,
             prefix = {"TYPE_"},
@@ -927,7 +966,6 @@
                 TYPE_SPEECH_STATE_CHANGE,
                 TYPE_VIEW_TARGETED_BY_SCROLL
             })
-    @Retention(RetentionPolicy.SOURCE)
     public @interface EventType {}
 
     /**
@@ -948,6 +986,8 @@
      * @see #TYPE_VIEW_SCROLLED
      * @see #TYPE_VIEW_TEXT_SELECTION_CHANGED
      * @see #TYPE_ANNOUNCEMENT
+     * @see #TYPE_VIEW_ACCESSIBILITY_FOCUSED
+     * @see #TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED
      * @see #TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY
      * @see #TYPE_GESTURE_DETECTION_START
      * @see #TYPE_GESTURE_DETECTION_END
@@ -955,12 +995,15 @@
      * @see #TYPE_TOUCH_INTERACTION_END
      * @see #TYPE_WINDOWS_CHANGED
      * @see #TYPE_VIEW_CONTEXT_CLICKED
+     * @see #TYPE_ASSIST_READING_CONTEXT
+     * @see #TYPE_SPEECH_STATE_CHANGE
      * @see #TYPE_VIEW_TARGETED_BY_SCROLL
      */
     public static final int TYPES_ALL_MASK = 0xFFFFFFFF;
 
     @UnsupportedAppUsage
-    private @EventType int mEventType;
+    @EventType
+    private int mEventType;
     private CharSequence mPackageName;
     private long mEventTime;
     int mMovementGranularity;
@@ -1027,10 +1070,8 @@
         mEventTime = event.mEventTime;
         mPackageName = event.mPackageName;
         if (event.mRecords != null) {
-            final int recordCount = event.mRecords.size();
-            mRecords = new ArrayList<>(recordCount);
-            for (int i = 0; i < recordCount; i++) {
-                final AccessibilityRecord record = event.mRecords.get(i);
+            mRecords = new ArrayList<>(event.mRecords.size());
+            for (AccessibilityRecord record : event.mRecords) {
                 final AccessibilityRecord recordClone = new AccessibilityRecord(record);
                 mRecords.add(recordClone);
             }
@@ -1050,9 +1091,7 @@
         super.setSealed(sealed);
         final List<AccessibilityRecord> records = mRecords;
         if (records != null) {
-            final int recordCount = records.size();
-            for (int i = 0; i < recordCount; i++) {
-                AccessibilityRecord record = records.get(i);
+            for (AccessibilityRecord record : records) {
                 record.setSealed(sealed);
             }
         }
@@ -1100,7 +1139,8 @@
      *
      * @return The event type.
      */
-    public @EventType int getEventType() {
+    @EventType
+    public int getEventType() {
         return mEventType;
     }
 
@@ -1119,6 +1159,12 @@
      *         <li>{@link #CONTENT_CHANGE_TYPE_UNDEFINED}
      *         <li>{@link #CONTENT_CHANGE_TYPE_PANE_APPEARED}
      *         <li>{@link #CONTENT_CHANGE_TYPE_PANE_DISAPPEARED}
+     *         <li>{@link #CONTENT_CHANGE_TYPE_DRAG_STARTED}
+     *         <li>{@link #CONTENT_CHANGE_TYPE_DRAG_DROPPED}
+     *         <li>{@link #CONTENT_CHANGE_TYPE_DRAG_CANCELLED}
+     *         <li>{@link #CONTENT_CHANGE_TYPE_CONTENT_INVALID}
+     *         <li>{@link #CONTENT_CHANGE_TYPE_ERROR}
+     *         <li>{@link #CONTENT_CHANGE_TYPE_ENABLED}
      *         </ul>
      */
     @ContentChangeTypes
@@ -1209,7 +1255,9 @@
     }
 
     /**
-     * Gets the bit mask of the speech state signaled by a {@link #TYPE_SPEECH_STATE_CHANGE} event
+     * Gets the bit mask of the speech state signaled by a {@link #TYPE_SPEECH_STATE_CHANGE} event.
+     *
+     * @return The bit mask of speech change types.
      *
      * @see #SPEECH_STATE_SPEAKING_START
      * @see #SPEECH_STATE_SPEAKING_END
@@ -1262,6 +1310,18 @@
      * single event may represent multiple change types.
      *
      * @return The bit mask of change types.
+     *
+     * @see #WINDOWS_CHANGE_ADDED
+     * @see #WINDOWS_CHANGE_REMOVED
+     * @see #WINDOWS_CHANGE_TITLE
+     * @see #WINDOWS_CHANGE_BOUNDS
+     * @see #WINDOWS_CHANGE_LAYER
+     * @see #WINDOWS_CHANGE_ACTIVE
+     * @see #WINDOWS_CHANGE_FOCUSED
+     * @see #WINDOWS_CHANGE_ACCESSIBILITY_FOCUSED
+     * @see #WINDOWS_CHANGE_PARENT
+     * @see #WINDOWS_CHANGE_CHILDREN
+     * @see #WINDOWS_CHANGE_PIP
      */
     @WindowsChangeTypes
     public int getWindowChanges() {
@@ -1381,6 +1441,21 @@
      * <li>{@link AccessibilityNodeInfo#ACTION_CLEAR_FOCUS}
      * <li>{@link AccessibilityNodeInfo#ACTION_CLEAR_SELECTION}
      * <li>{@link AccessibilityNodeInfo#ACTION_CLICK}
+     * <li>{@link AccessibilityNodeInfo#ACTION_LONG_CLICK}
+     * <li>{@link AccessibilityNodeInfo#ACTION_NEXT_AT_MOVEMENT_GRANULARITY}
+     * <li>{@link AccessibilityNodeInfo#ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY}
+     * <li>{@link AccessibilityNodeInfo#ACTION_NEXT_HTML_ELEMENT}
+     * <li>{@link AccessibilityNodeInfo#ACTION_PREVIOUS_HTML_ELEMENT}
+     * <li>{@link AccessibilityNodeInfo#ACTION_SCROLL_FORWARD}
+     * <li>{@link AccessibilityNodeInfo#ACTION_SCROLL_BACKWARD}
+     * <li>{@link AccessibilityNodeInfo#ACTION_COPY}
+     * <li>{@link AccessibilityNodeInfo#ACTION_PASTE}
+     * <li>{@link AccessibilityNodeInfo#ACTION_CUT}
+     * <li>{@link AccessibilityNodeInfo#ACTION_SET_SELECTION}
+     * <li>{@link AccessibilityNodeInfo#ACTION_EXPAND}
+     * <li>{@link AccessibilityNodeInfo#ACTION_COLLAPSE}
+     * <li>{@link AccessibilityNodeInfo#ACTION_DISMISS}
+     * <li>{@link AccessibilityNodeInfo#ACTION_SET_TEXT}
      * <li>etc.
      * </ul>
      *
@@ -1764,7 +1839,8 @@
     /**
      * @see Parcelable.Creator
      */
-    public static final @android.annotation.NonNull Parcelable.Creator<AccessibilityEvent> CREATOR =
+    @NonNull
+    public static final Parcelable.Creator<AccessibilityEvent> CREATOR =
             new Parcelable.Creator<AccessibilityEvent>() {
         public AccessibilityEvent createFromParcel(Parcel parcel) {
             AccessibilityEvent event = new AccessibilityEvent();
diff --git a/core/java/android/view/accessibility/AccessibilityInteractionClient.java b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
index d9fcfb5..60f46e6 100644
--- a/core/java/android/view/accessibility/AccessibilityInteractionClient.java
+++ b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
@@ -62,6 +62,7 @@
 import java.util.Queue;
 import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.IntConsumer;
 
 /**
  * This class is a singleton that performs accessibility interaction
@@ -158,11 +159,15 @@
     private final SparseArray<Pair<Executor, AccessibilityService.TakeScreenshotCallback>>
             mTakeScreenshotOfWindowCallbacks = new SparseArray<>();
 
+    // SparseArray of interaction ID -> overlay executor+callback.
+    private final SparseArray<Pair<Executor, IntConsumer>> mAttachAccessibilityOverlayCallbacks =
+            new SparseArray<>();
     private Message mSameThreadMessage;
 
     private int mInteractionIdWaitingForPrefetchResult = -1;
     private int mConnectionIdWaitingForPrefetchResult;
     private String[] mPackageNamesForNextPrefetchResult;
+    private Handler mMainHandler = new Handler(Looper.getMainLooper());
 
     /**
      * @return The client for the current thread.
@@ -826,11 +831,20 @@
                     //   A11yService -> App -> SurfaceFlinger -> A11yService
                     ScreenCapture.ScreenCaptureListener listener =
                             new ScreenCapture.ScreenCaptureListener(
-                                    screenshot -> sendWindowScreenshotSuccess(screenshot,
-                                            interactionId));
+                                    (screenshot, status) -> {
+                                        if (status != 0) {
+                                            sendTakeScreenshotOfWindowError(
+                                                    AccessibilityService
+                                                            .ERROR_TAKE_SCREENSHOT_INTERNAL_ERROR,
+                                                    interactionId);
+                                        } else {
+                                            sendWindowScreenshotSuccess(screenshot,
+                                                    interactionId);
+                                        }
+                                    });
                     connection.takeScreenshotOfWindow(accessibilityWindowId, interactionId,
                             listener, this);
-                    new Handler(Looper.getMainLooper()).postDelayed(() -> {
+                    mMainHandler.postDelayed(() -> {
                         synchronized (mInstanceLock) {
                             // Notify failure if we still haven't sent a response after timeout.
                             if (mTakeScreenshotOfWindowCallbacks.contains(interactionId)) {
@@ -1621,7 +1635,11 @@
 
     private void logTraceClient(
             IAccessibilityServiceConnection connection, String method, String params) {
-        logTrace(connection, method, params, Binder.getCallingUid(),
+        logTrace(
+                connection,
+                method,
+                params,
+                Binder.getCallingUid(),
                 Arrays.asList(Thread.currentThread().getStackTrace()),
                 new HashSet<String>(Arrays.asList("getStackTrace", "logTraceClient")),
                 FLAGS_ACCESSIBILITY_INTERACTION_CLIENT);
@@ -1629,18 +1647,105 @@
 
     /** Attaches an accessibility overlay to the specified window. */
     public void attachAccessibilityOverlayToWindow(
-            int connectionId, int accessibilityWindowId, SurfaceControl sc) {
+            int connectionId,
+            int accessibilityWindowId,
+            SurfaceControl sc,
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull IntConsumer callback) {
         synchronized (mInstanceLock) {
             try {
                 IAccessibilityServiceConnection connection = getConnection(connectionId);
                 if (connection == null) {
-                    Log.e(LOG_TAG, "Error while getting service connection.");
+                    executor.execute(
+                            () ->
+                                    callback.accept(
+                                            AccessibilityService.OVERLAY_RESULT_INTERNAL_ERROR));
                     return;
                 }
-                connection.attachAccessibilityOverlayToWindow(accessibilityWindowId, sc);
+                final int interactionId = mInteractionIdCounter.getAndIncrement();
+                mAttachAccessibilityOverlayCallbacks.put(
+                        interactionId, Pair.create(executor, callback));
+                connection.attachAccessibilityOverlayToWindow(
+                        interactionId, accessibilityWindowId, sc, this);
+                mMainHandler.postDelayed(
+                        () -> {
+                            synchronized (mInstanceLock) {
+                                // Notify failure if we still haven't sent a response after timeout.
+                                if (mAttachAccessibilityOverlayCallbacks.contains(interactionId)) {
+                                    sendAttachOverlayResult(
+                                            AccessibilityService.OVERLAY_RESULT_INTERNAL_ERROR,
+                                            interactionId);
+                                }
+                            }
+                        },
+                        TIMEOUT_INTERACTION_MILLIS);
             } catch (RemoteException re) {
                 re.rethrowFromSystemServer();
             }
         }
     }
+
+    /** Attaches an accessibility overlay to the specified display. */
+    public void attachAccessibilityOverlayToDisplay(
+            int connectionId,
+            int displayId,
+            SurfaceControl sc,
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull IntConsumer callback) {
+        synchronized (mInstanceLock) {
+            try {
+                IAccessibilityServiceConnection connection = getConnection(connectionId);
+                if (connection == null) {
+                    executor.execute(
+                            () ->
+                                    callback.accept(
+                                            AccessibilityService.OVERLAY_RESULT_INTERNAL_ERROR));
+                    return;
+                }
+                final int interactionId = mInteractionIdCounter.getAndIncrement();
+                mAttachAccessibilityOverlayCallbacks.put(
+                        interactionId, Pair.create(executor, callback));
+                connection.attachAccessibilityOverlayToDisplay(interactionId, displayId, sc, this);
+                mMainHandler.postDelayed(
+                        () -> {
+                            // Notify failure if we still haven't sent a response after timeout.
+                            if (mAttachAccessibilityOverlayCallbacks.contains(interactionId)) {
+                                sendAttachOverlayResult(
+                                        AccessibilityService.OVERLAY_RESULT_INTERNAL_ERROR,
+                                        interactionId);
+                            }
+                        },
+                        TIMEOUT_INTERACTION_MILLIS);
+            } catch (RemoteException re) {
+                re.rethrowFromSystemServer();
+            }
+        }
+    }
+
+    /**
+     * Sends a result code for an attach window overlay request to the requesting client.
+     *
+     * @param result The result code from {@link AccessibilityService.OverlayResult}.
+     * @param interactionId The interaction id of the request.
+     */
+    @Override
+    public void sendAttachOverlayResult(
+            @AccessibilityService.AttachOverlayResult int result, int interactionId) {
+        synchronized (mInstanceLock) {
+            if (mAttachAccessibilityOverlayCallbacks.contains(interactionId)) {
+                final Pair<Executor, IntConsumer> pair =
+                        mAttachAccessibilityOverlayCallbacks.get(interactionId);
+                if (pair == null) {
+                    return;
+                }
+                final Executor executor = pair.first;
+                final IntConsumer callback = pair.second;
+                if (executor == null || callback == null) {
+                    return;
+                }
+                executor.execute(() -> callback.accept(result));
+                mAttachAccessibilityOverlayCallbacks.remove(interactionId);
+            }
+        }
+    }
 }
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java
index efa2a01..b220c4d 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -99,30 +99,30 @@
     private static final String LOG_TAG = "AccessibilityManager";
 
     /** @hide */
-    public static final int STATE_FLAG_ACCESSIBILITY_ENABLED = 0x00000001;
+    public static final int STATE_FLAG_ACCESSIBILITY_ENABLED = 1 /* << 0 */;
 
     /** @hide */
-    public static final int STATE_FLAG_TOUCH_EXPLORATION_ENABLED = 0x00000002;
+    public static final int STATE_FLAG_TOUCH_EXPLORATION_ENABLED = 1 << 1;
 
     /** @hide */
-    public static final int STATE_FLAG_HIGH_TEXT_CONTRAST_ENABLED = 0x00000004;
+    public static final int STATE_FLAG_HIGH_TEXT_CONTRAST_ENABLED = 1 << 2;
 
     /** @hide */
-    public static final int STATE_FLAG_DISPATCH_DOUBLE_TAP = 0x00000008;
+    public static final int STATE_FLAG_DISPATCH_DOUBLE_TAP = 1 << 3;
 
     /** @hide */
-    public static final int STATE_FLAG_REQUEST_MULTI_FINGER_GESTURES = 0x00000010;
+    public static final int STATE_FLAG_REQUEST_MULTI_FINGER_GESTURES = 1 << 4;
 
     /** @hide */
-    public static final int STATE_FLAG_TRACE_A11Y_INTERACTION_CONNECTION_ENABLED = 0x00000100;
+    public static final int STATE_FLAG_TRACE_A11Y_INTERACTION_CONNECTION_ENABLED = 1 << 8;
     /** @hide */
-    public static final int STATE_FLAG_TRACE_A11Y_INTERACTION_CONNECTION_CB_ENABLED = 0x00000200;
+    public static final int STATE_FLAG_TRACE_A11Y_INTERACTION_CONNECTION_CB_ENABLED = 1 << 9;
     /** @hide */
-    public static final int STATE_FLAG_TRACE_A11Y_INTERACTION_CLIENT_ENABLED = 0x00000400;
+    public static final int STATE_FLAG_TRACE_A11Y_INTERACTION_CLIENT_ENABLED = 1 << 10;
     /** @hide */
-    public static final int STATE_FLAG_TRACE_A11Y_SERVICE_ENABLED = 0x00000800;
+    public static final int STATE_FLAG_TRACE_A11Y_SERVICE_ENABLED = 1 << 11;
     /** @hide */
-    public static final int STATE_FLAG_AUDIO_DESCRIPTION_BY_DEFAULT_ENABLED = 0x00001000;
+    public static final int STATE_FLAG_AUDIO_DESCRIPTION_BY_DEFAULT_ENABLED = 1 << 12;
 
     /** @hide */
     public static final int DALTONIZER_DISABLED = -1;
@@ -848,7 +848,7 @@
 
         List<AccessibilityServiceInfo> services = null;
         try {
-            services = service.getInstalledAccessibilityServiceList(userId);
+            services = service.getInstalledAccessibilityServiceList(userId).getList();
             if (DEBUG) {
                 Log.i(LOG_TAG, "Installed AccessibilityServices " + services);
             }
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index ba4f4aa..e6a8b78 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -23,6 +23,7 @@
 
 import android.accessibilityservice.AccessibilityService;
 import android.accessibilityservice.AccessibilityServiceInfo;
+import android.annotation.Hide;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -99,6 +100,9 @@
  * <a href="{@docRoot}guide/topics/ui/accessibility/index.html">Accessibility</a>
  * developer guide.</p>
  * </div>
+ * <aside class="note">
+ * <b>Note:</b> Use a {@link androidx.core.view.accessibility.AccessibilityNodeInfoCompat}
+ * wrapper instead of this class for backwards-compatibility. </aside>
  *
  * @see android.accessibilityservice.AccessibilityService
  * @see AccessibilityEvent
@@ -136,6 +140,8 @@
     public static final long LEASHED_NODE_ID = makeNodeId(LEASHED_ITEM_ID,
             AccessibilityNodeProvider.HOST_VIEW_ID);
 
+    // Prefetch flags.
+
     /**
      * Prefetching strategy that prefetches the ancestors of the requested node.
      * <p> Ancestors will be prefetched before siblings and descendants.
@@ -146,7 +152,7 @@
      * @see AccessibilityService#getRootInActiveWindow(int)
      * @see AccessibilityEvent#getSource(int)
      */
-    public static final int FLAG_PREFETCH_ANCESTORS = 0x00000001;
+    public static final int FLAG_PREFETCH_ANCESTORS = 1 /* << 0 */;
 
     /**
      * Prefetching strategy that prefetches the siblings of the requested node.
@@ -155,7 +161,7 @@
      *
      * @see #FLAG_PREFETCH_ANCESTORS for where to use these flags.
      */
-    public static final int FLAG_PREFETCH_SIBLINGS = 0x00000002;
+    public static final int FLAG_PREFETCH_SIBLINGS = 1 << 1;
 
     /**
      * Prefetching strategy that prefetches the descendants in a hybrid depth first and breadth
@@ -167,7 +173,7 @@
      *
      * @see #FLAG_PREFETCH_ANCESTORS for where to use these flags.
      */
-    public static final int FLAG_PREFETCH_DESCENDANTS_HYBRID = 0x00000004;
+    public static final int FLAG_PREFETCH_DESCENDANTS_HYBRID = 1 << 2;
 
     /**
      * Prefetching strategy that prefetches the descendants of the requested node depth-first.
@@ -177,7 +183,7 @@
      *
      * @see #FLAG_PREFETCH_ANCESTORS for where to use these flags.
      */
-    public static final int FLAG_PREFETCH_DESCENDANTS_DEPTH_FIRST = 0x00000008;
+    public static final int FLAG_PREFETCH_DESCENDANTS_DEPTH_FIRST = 1 << 3;
 
     /**
      * Prefetching strategy that prefetches the descendants of the requested node breadth-first.
@@ -187,7 +193,7 @@
      *
      * @see #FLAG_PREFETCH_ANCESTORS for where to use these flags.
      */
-    public static final int FLAG_PREFETCH_DESCENDANTS_BREADTH_FIRST = 0x00000010;
+    public static final int FLAG_PREFETCH_DESCENDANTS_BREADTH_FIRST = 1 << 4;
 
     /**
      * Prefetching flag that specifies prefetching should not be interrupted by a request to
@@ -195,12 +201,31 @@
      *
      * @see #FLAG_PREFETCH_ANCESTORS for where to use these flags.
      */
-    public static final int FLAG_PREFETCH_UNINTERRUPTIBLE = 0x00000020;
+    public static final int FLAG_PREFETCH_UNINTERRUPTIBLE = 1 << 5;
 
-    /** @hide */
-    public static final int FLAG_PREFETCH_MASK = 0x0000003f;
+    /**
+     * Mask for {@link PrefetchingStrategy} all types.
+     *
+     * @see #FLAG_PREFETCH_ANCESTORS
+     * @see #FLAG_PREFETCH_SIBLINGS
+     * @see #FLAG_PREFETCH_DESCENDANTS_HYBRID
+     * @see #FLAG_PREFETCH_DESCENDANTS_DEPTH_FIRST
+     * @see #FLAG_PREFETCH_DESCENDANTS_BREADTH_FIRST
+     * @see #FLAG_PREFETCH_UNINTERRUPTIBLE
+     *
+     * @hide
+     */
+    public static final int FLAG_PREFETCH_MASK = 0x0000003F;
 
-    /** @hide */
+    /**
+     * Mask for {@link PrefetchingStrategy} that includes only descendants-related strategies.
+     *
+     * @see #FLAG_PREFETCH_DESCENDANTS_HYBRID
+     * @see #FLAG_PREFETCH_DESCENDANTS_DEPTH_FIRST
+     * @see #FLAG_PREFETCH_DESCENDANTS_BREADTH_FIRST
+     *
+     * @hide
+     */
     public static final int FLAG_PREFETCH_DESCENDANTS_MASK = 0x0000001C;
 
     /**
@@ -210,6 +235,7 @@
     public static final int MAX_NUMBER_OF_PREFETCHED_NODES = 50;
 
     /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
     @IntDef(flag = true, prefix = { "FLAG_PREFETCH" }, value = {
             FLAG_PREFETCH_ANCESTORS,
             FLAG_PREFETCH_SIBLINGS,
@@ -218,28 +244,33 @@
             FLAG_PREFETCH_DESCENDANTS_BREADTH_FIRST,
             FLAG_PREFETCH_UNINTERRUPTIBLE
     })
-    @Retention(RetentionPolicy.SOURCE)
     public @interface PrefetchingStrategy {}
 
+    // Service flags.
+
     /**
      * @see AccessibilityServiceInfo#FLAG_INCLUDE_NOT_IMPORTANT_VIEWS
      * @hide
      */
-    public static final int FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS = 0x00000080;
+    public static final int FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS = 1 << 7;
 
     /**
      * @see AccessibilityServiceInfo#FLAG_REPORT_VIEW_IDS
      * @hide
      */
-    public static final int FLAG_SERVICE_REQUESTS_REPORT_VIEW_IDS = 0x00000100;
+    public static final int FLAG_SERVICE_REQUESTS_REPORT_VIEW_IDS = 1 << 8;
 
     /**
      * @see AccessibilityServiceInfo#isAccessibilityTool()
      * @hide
      */
-    public static final int FLAG_SERVICE_IS_ACCESSIBILITY_TOOL = 0x00000200;
+    public static final int FLAG_SERVICE_IS_ACCESSIBILITY_TOOL = 1 << 9;
 
-    /** @hide */
+    /**
+     * Mask for all types of additional view data exposed to services.
+     *
+     * @hide
+     */
     public static final int FLAG_REPORT_MASK =
             FLAG_SERVICE_REQUESTS_INCLUDE_NOT_IMPORTANT_VIEWS
                     | FLAG_SERVICE_REQUESTS_REPORT_VIEW_IDS
@@ -249,31 +280,33 @@
 
     /**
      * Action that gives input focus to the node.
+     * See {@link AccessibilityAction#ACTION_FOCUS}
      */
-    public static final int ACTION_FOCUS =  0x00000001;
+    public static final int ACTION_FOCUS =  1 /* << 0 */;
 
     /**
      * Action that clears input focus of the node.
+     * See {@link AccessibilityAction#ACTION_CLEAR_FOCUS}
      */
-    public static final int ACTION_CLEAR_FOCUS = 0x00000002;
+    public static final int ACTION_CLEAR_FOCUS = 1 << 1;
 
     /**
      * Action that selects the node.
      * @see AccessibilityAction#ACTION_SELECT
      */
-    public static final int ACTION_SELECT = 0x00000004;
+    public static final int ACTION_SELECT = 1 << 2;
 
     /**
      * Action that deselects the node.
      */
-    public static final int ACTION_CLEAR_SELECTION = 0x00000008;
+    public static final int ACTION_CLEAR_SELECTION = 1 << 3;
 
     /**
      * Action that clicks on the node info.
      *
      * @see AccessibilityAction#ACTION_CLICK
      */
-    public static final int ACTION_CLICK = 0x00000010;
+    public static final int ACTION_CLICK = 1 << 4;
 
     /**
      * Action that long clicks on the node.
@@ -281,17 +314,19 @@
      * <p>It does not support coordinate information for anchoring.</p>
      * @see AccessibilityAction#ACTION_LONG_CLICK
      */
-    public static final int ACTION_LONG_CLICK = 0x00000020;
+    public static final int ACTION_LONG_CLICK = 1 << 5;
 
     /**
      * Action that gives accessibility focus to the node.
+     * See {@link AccessibilityAction#ACTION_ACCESSIBILITY_FOCUS}
      */
-    public static final int ACTION_ACCESSIBILITY_FOCUS = 0x00000040;
+    public static final int ACTION_ACCESSIBILITY_FOCUS = 1 << 6;
 
     /**
      * Action that clears accessibility focus of the node.
+     * See {@link AccessibilityAction#ACTION_CLEAR_ACCESSIBILITY_FOCUS}
      */
-    public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 0x00000080;
+    public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 1 << 7;
 
     /**
      * Action that requests to go to the next entity in this node's text
@@ -323,7 +358,7 @@
      * @see #MOVEMENT_GRANULARITY_PARAGRAPH
      * @see #MOVEMENT_GRANULARITY_PAGE
      */
-    public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 0x00000100;
+    public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 1 << 8;
 
     /**
      * Action that requests to go to the previous entity in this node's text
@@ -356,7 +391,7 @@
      * @see #MOVEMENT_GRANULARITY_PARAGRAPH
      * @see #MOVEMENT_GRANULARITY_PAGE
      */
-    public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 0x00000200;
+    public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 1 << 9;
 
     /**
      * Action to move to the next HTML element of a given type. For example, move
@@ -371,7 +406,7 @@
      * </code></pre></p>
      * </p>
      */
-    public static final int ACTION_NEXT_HTML_ELEMENT = 0x00000400;
+    public static final int ACTION_NEXT_HTML_ELEMENT = 1 << 10;
 
     /**
      * Action to move to the previous HTML element of a given type. For example, move
@@ -386,32 +421,34 @@
      * </code></pre></p>
      * </p>
      */
-    public static final int ACTION_PREVIOUS_HTML_ELEMENT = 0x00000800;
+    public static final int ACTION_PREVIOUS_HTML_ELEMENT = 1 << 11;
 
     /**
      * Action to scroll the node content forward.
+     * @see AccessibilityAction#ACTION_SCROLL_FORWARD
      */
-    public static final int ACTION_SCROLL_FORWARD = 0x00001000;
+    public static final int ACTION_SCROLL_FORWARD = 1 << 12;
 
     /**
      * Action to scroll the node content backward.
+     * @see AccessibilityAction#ACTION_SCROLL_BACKWARD
      */
-    public static final int ACTION_SCROLL_BACKWARD = 0x00002000;
+    public static final int ACTION_SCROLL_BACKWARD = 1 << 13;
 
     /**
      * Action to copy the current selection to the clipboard.
      */
-    public static final int ACTION_COPY = 0x00004000;
+    public static final int ACTION_COPY = 1 << 14;
 
     /**
      * Action to paste the current clipboard content.
      */
-    public static final int ACTION_PASTE = 0x00008000;
+    public static final int ACTION_PASTE = 1 << 15;
 
     /**
      * Action to cut the current selection and place it to the clipboard.
      */
-    public static final int ACTION_CUT = 0x00010000;
+    public static final int ACTION_CUT = 1 << 16;
 
     /**
      * Action to set the selection. Performing this action with no arguments
@@ -421,22 +458,22 @@
      * @see #ACTION_ARGUMENT_SELECTION_START_INT
      * @see #ACTION_ARGUMENT_SELECTION_END_INT
      */
-    public static final int ACTION_SET_SELECTION = 0x00020000;
+    public static final int ACTION_SET_SELECTION = 1 << 17;
 
     /**
      * Action to expand an expandable node.
      */
-    public static final int ACTION_EXPAND = 0x00040000;
+    public static final int ACTION_EXPAND = 1 << 18;
 
     /**
      * Action to collapse an expandable node.
      */
-    public static final int ACTION_COLLAPSE = 0x00080000;
+    public static final int ACTION_COLLAPSE = 1 << 19;
 
     /**
      * Action to dismiss a dismissable node.
      */
-    public static final int ACTION_DISMISS = 0x00100000;
+    public static final int ACTION_DISMISS = 1 << 20;
 
     /**
      * Action that sets the text of the node. Performing the action without argument, using <code>
@@ -444,17 +481,30 @@
      * cursor at the end of text.
      * @see AccessibilityAction#ACTION_SET_TEXT
      */
-    public static final int ACTION_SET_TEXT = 0x00200000;
+    public static final int ACTION_SET_TEXT = 1 << 21;
 
     /** @hide */
     public static final int LAST_LEGACY_STANDARD_ACTION = ACTION_SET_TEXT;
 
     /**
-     * Mask to see if the value is larger than the largest ACTION_ constant
+     * Mask to verify if a given value is a combination of the existing ACTION_ constants.
+     *
+     * The smallest possible action is 1, and the largest is 1 << 21, or {@link ACTION_SET_TEXT}. A
+     * node can have any combination of actions present, so a node's max action int is:
+     *
+     *   0000 0000 0011 1111 1111 1111 1111 1111
+     *
+     * Therefore, if an action has any of the following bits flipped, it will be invalid:
+     *
+     *   1111 1111 11-- ---- ---- ---- ---- ----
+     *
+     * This can be represented in hexadecimal as 0xFFC00000.
+     *
+     * @see AccessibilityNodeInfo#addAction(int)
      */
-    private static final int ACTION_TYPE_MASK = 0xFF000000;
+    private static final int INVALID_ACTIONS_MASK = 0xFFC00000;
 
-    // Action arguments
+    // Action arguments.
 
     /**
      * Argument for which movement granularity to be used when traversing the node text.
@@ -660,7 +710,52 @@
     public static final String ACTION_ARGUMENT_DIRECTION_INT =
             "android.view.accessibility.action.ARGUMENT_DIRECTION_INT";
 
-    // Focus types
+    /**
+     * <p>Argument to represent the scroll amount as a percent of the visible area of a node, with
+     * 1.0F as the default. Values smaller than 1.0F represent a partial scroll of the node, and
+     * values larger than 1.0F represent a scroll that extends beyond the currently visible node
+     * Rect. Setting this to {@link Float#POSITIVE_INFINITY} or to another "too large" value should
+     * scroll to the end of the node. Negative values should not be used with this argument.
+     * </p>
+     *
+     * <p>
+     *     This argument should be used with the following scroll actions:
+     *     <ul>
+     *         <li>{@link AccessibilityAction#ACTION_SCROLL_FORWARD}</li>
+     *         <li>{@link AccessibilityAction#ACTION_SCROLL_BACKWARD}</li>
+     *         <li>{@link AccessibilityAction#ACTION_SCROLL_UP}</li>
+     *         <li>{@link AccessibilityAction#ACTION_SCROLL_DOWN}</li>
+     *         <li>{@link AccessibilityAction#ACTION_SCROLL_LEFT}</li>
+     *         <li>{@link AccessibilityAction#ACTION_SCROLL_RIGHT}</li>
+     *     </ul>
+     * </p>
+     * <p>
+     *     Example: if a view representing a list of items implements
+     *     {@link AccessibilityAction#ACTION_SCROLL_FORWARD} to scroll forward by an entire screen
+     *     (one "page"), then passing a value of .25F via this argument should scroll that view
+     *     only by 1/4th of a screen. Passing a value of 1.50F via this argument should scroll the
+     *     view by 1 1/2 screens or to end of the node if the node doesn't extend to 1 1/2 screens.
+     * </p>
+     *
+     * <p>
+     *     This argument should not be used with the following scroll actions, which don't cleanly
+     *     conform to granular scroll semantics:
+     *     <ul>
+     *         <li>{@link AccessibilityAction#ACTION_SCROLL_IN_DIRECTION}</li>
+     *         <li>{@link AccessibilityAction#ACTION_SCROLL_TO_POSITION}</li>
+     *     </ul>
+     * </p>
+     *
+     * <p>
+     *     Views that support this argument should set
+     *     {@link #setGranularScrollingSupported(boolean)} to true. Clients should use
+     *     {@link #isGranularScrollingSupported()} to check if granular scrolling is supported.
+     * </p>
+     */
+    public static final String ACTION_ARGUMENT_SCROLL_AMOUNT_FLOAT =
+            "android.view.accessibility.action.ARGUMENT_SCROLL_AMOUNT_FLOAT";
+
+    // Focus types.
 
     /**
      * The input focus.
@@ -672,32 +767,34 @@
      */
     public static final int FOCUS_ACCESSIBILITY = 2;
 
-    // Movement granularities
+    // Movement granularities.
 
     /**
      * Movement granularity bit for traversing the text of a node by character.
      */
-    public static final int MOVEMENT_GRANULARITY_CHARACTER = 0x00000001;
+    public static final int MOVEMENT_GRANULARITY_CHARACTER = 1 /* << 0 */;
 
     /**
      * Movement granularity bit for traversing the text of a node by word.
      */
-    public static final int MOVEMENT_GRANULARITY_WORD = 0x00000002;
+    public static final int MOVEMENT_GRANULARITY_WORD = 1 << 1;
 
     /**
      * Movement granularity bit for traversing the text of a node by line.
      */
-    public static final int MOVEMENT_GRANULARITY_LINE = 0x00000004;
+    public static final int MOVEMENT_GRANULARITY_LINE = 1 << 2;
 
     /**
      * Movement granularity bit for traversing the text of a node by paragraph.
      */
-    public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 0x00000008;
+    public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 1 << 3;
 
     /**
      * Movement granularity bit for traversing the text of a node by page.
      */
-    public static final int MOVEMENT_GRANULARITY_PAGE = 0x00000010;
+    public static final int MOVEMENT_GRANULARITY_PAGE = 1 << 4;
+
+    // Extra data arguments.
 
     /**
      * Key used to request and locate extra data for text character location. This key requests that
@@ -728,7 +825,7 @@
 
     /**
      * Integer argument specifying the end index of the requested text location data. Must be
-     * positive and no larger than {@link #EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH}.
+     * positive and no larger than {@link #EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_MAX_LENGTH}.
      *
      * @see #EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY
      */
@@ -764,58 +861,60 @@
 
     // Boolean attributes.
 
-    private static final int BOOLEAN_PROPERTY_CHECKABLE = 0x00000001;
+    private static final int BOOLEAN_PROPERTY_CHECKABLE = 1 /* << 0 */;
 
-    private static final int BOOLEAN_PROPERTY_CHECKED = 0x00000002;
+    private static final int BOOLEAN_PROPERTY_CHECKED = 1 << 1;
 
-    private static final int BOOLEAN_PROPERTY_FOCUSABLE = 0x00000004;
+    private static final int BOOLEAN_PROPERTY_FOCUSABLE = 1 << 2;
 
-    private static final int BOOLEAN_PROPERTY_FOCUSED = 0x00000008;
+    private static final int BOOLEAN_PROPERTY_FOCUSED = 1 << 3;
 
-    private static final int BOOLEAN_PROPERTY_SELECTED = 0x00000010;
+    private static final int BOOLEAN_PROPERTY_SELECTED = 1 << 4;
 
-    private static final int BOOLEAN_PROPERTY_CLICKABLE = 0x00000020;
+    private static final int BOOLEAN_PROPERTY_CLICKABLE = 1 << 5;
 
-    private static final int BOOLEAN_PROPERTY_LONG_CLICKABLE = 0x00000040;
+    private static final int BOOLEAN_PROPERTY_LONG_CLICKABLE = 1 << 6;
 
-    private static final int BOOLEAN_PROPERTY_ENABLED = 0x00000080;
+    private static final int BOOLEAN_PROPERTY_ENABLED = 1 << 7;
 
-    private static final int BOOLEAN_PROPERTY_PASSWORD = 0x00000100;
+    private static final int BOOLEAN_PROPERTY_PASSWORD = 1 << 8;
 
-    private static final int BOOLEAN_PROPERTY_SCROLLABLE = 0x00000200;
+    private static final int BOOLEAN_PROPERTY_SCROLLABLE = 1 << 9;
 
-    private static final int BOOLEAN_PROPERTY_ACCESSIBILITY_FOCUSED = 0x00000400;
+    private static final int BOOLEAN_PROPERTY_ACCESSIBILITY_FOCUSED = 1 << 10;
 
-    private static final int BOOLEAN_PROPERTY_VISIBLE_TO_USER = 0x00000800;
+    private static final int BOOLEAN_PROPERTY_VISIBLE_TO_USER = 1 << 11;
 
-    private static final int BOOLEAN_PROPERTY_EDITABLE = 0x00001000;
+    private static final int BOOLEAN_PROPERTY_EDITABLE = 1 << 12;
 
-    private static final int BOOLEAN_PROPERTY_OPENS_POPUP = 0x00002000;
+    private static final int BOOLEAN_PROPERTY_OPENS_POPUP = 1 << 13;
 
-    private static final int BOOLEAN_PROPERTY_DISMISSABLE = 0x00004000;
+    private static final int BOOLEAN_PROPERTY_DISMISSABLE = 1 << 14;
 
-    private static final int BOOLEAN_PROPERTY_MULTI_LINE = 0x00008000;
+    private static final int BOOLEAN_PROPERTY_MULTI_LINE = 1 << 15;
 
-    private static final int BOOLEAN_PROPERTY_CONTENT_INVALID = 0x00010000;
+    private static final int BOOLEAN_PROPERTY_CONTENT_INVALID = 1 << 16;
 
-    private static final int BOOLEAN_PROPERTY_CONTEXT_CLICKABLE = 0x00020000;
+    private static final int BOOLEAN_PROPERTY_CONTEXT_CLICKABLE = 1 << 17;
 
-    private static final int BOOLEAN_PROPERTY_IMPORTANCE = 0x0040000;
+    private static final int BOOLEAN_PROPERTY_IMPORTANCE = 1 << 18;
 
-    private static final int BOOLEAN_PROPERTY_SCREEN_READER_FOCUSABLE = 0x0080000;
+    private static final int BOOLEAN_PROPERTY_SCREEN_READER_FOCUSABLE = 1 << 19;
 
-    private static final int BOOLEAN_PROPERTY_IS_SHOWING_HINT = 0x0100000;
+    private static final int BOOLEAN_PROPERTY_IS_SHOWING_HINT = 1 << 20;
 
-    private static final int BOOLEAN_PROPERTY_IS_HEADING = 0x0200000;
+    private static final int BOOLEAN_PROPERTY_IS_HEADING = 1 << 21;
 
-    private static final int BOOLEAN_PROPERTY_IS_TEXT_ENTRY_KEY = 0x0400000;
+    private static final int BOOLEAN_PROPERTY_IS_TEXT_ENTRY_KEY = 1 << 22;
 
-    private static final int BOOLEAN_PROPERTY_IS_TEXT_SELECTABLE = 0x0800000;
+    private static final int BOOLEAN_PROPERTY_IS_TEXT_SELECTABLE = 1 << 23;
 
     private static final int BOOLEAN_PROPERTY_REQUEST_INITIAL_ACCESSIBILITY_FOCUS = 1 << 24;
 
     private static final int BOOLEAN_PROPERTY_ACCESSIBILITY_DATA_SENSITIVE = 1 << 25;
 
+    private static final int BOOLEAN_PROPERTY_SUPPORTS_GRANULAR_SCROLLING = 1 << 26;
+
     /**
      * Bits that provide the id of a virtual descendant of a view.
      */
@@ -1463,6 +1562,10 @@
      * describes the action.
      * </p>
      * <p>
+     * Use {@link androidx.core.view.ViewCompat#addAccessibilityAction(View,
+     * AccessibilityNodeInfoCompat.AccessibilityActionCompat)} to register an action directly on the
+     * view.
+     * <p>
      *   <strong>Note:</strong> Cannot be called from an
      *   {@link android.accessibilityservice.AccessibilityService}.
      *   This class is made immutable before being delivered to an AccessibilityService.
@@ -1510,7 +1613,7 @@
     public void addAction(int action) {
         enforceNotSealed();
 
-        if ((action & ACTION_TYPE_MASK) != 0) {
+        if ((action & INVALID_ACTIONS_MASK) != 0) {
             throw new IllegalArgumentException("Action is not a combination of the standard " +
                     "actions: " + action);
         }
@@ -2236,6 +2339,7 @@
     /**
      * Gets whether this node is focusable.
      *
+     * <p>In the View system, this typically maps to {@link View#isFocusable()}.
      * @return True if the node is focusable.
      */
     public boolean isFocusable() {
@@ -2249,6 +2353,8 @@
      *   {@link android.accessibilityservice.AccessibilityService}.
      *   This class is made immutable before being delivered to an AccessibilityService.
      * </p>
+     * <p>To mark a node as explicitly focusable for a screen reader, consider using
+     * {@link #setScreenReaderFocusable(boolean)} instead.
      *
      * @param focusable True if the node is focusable.
      *
@@ -2261,6 +2367,9 @@
     /**
      * Gets whether this node is focused.
      *
+     * <p>This is distinct from {@link #isAccessibilityFocused()}, which is used by screen readers.
+     * See {@link AccessibilityAction#ACTION_ACCESSIBILITY_FOCUS} for details.
+     *
      * @return True if the node is focused.
      */
     public boolean isFocused() {
@@ -2317,6 +2426,8 @@
     /**
      * Gets whether this node is accessibility focused.
      *
+     * <p>This is distinct from {@link #isFocused()}, which is used to track system focus.
+     * See {@link #ACTION_ACCESSIBILITY_FOCUS} for details.
      * @return True if the node is accessibility focused.
      */
     public boolean isAccessibilityFocused() {
@@ -2330,7 +2441,10 @@
      *   {@link android.accessibilityservice.AccessibilityService}.
      *   This class is made immutable before being delivered to an AccessibilityService.
      * </p>
-     *
+     * <p>The UI element updating this property should send an event of
+     * {@link AccessibilityEvent#TYPE_VIEW_ACCESSIBILITY_FOCUSED}
+     * or {@link AccessibilityEvent#TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED} if its
+     * accessibility-focused state changes.
      * @param focused True if the node is accessibility focused.
      *
      * @throws IllegalStateException If called from an AccessibilityService.
@@ -2490,6 +2604,35 @@
     }
 
     /**
+     * Gets if the node supports granular scrolling.
+     *
+     * @return True if all scroll actions that could support
+     * {@link #ACTION_ARGUMENT_SCROLL_AMOUNT_FLOAT} have done so, false otherwise.
+     */
+    public boolean isGranularScrollingSupported() {
+        return getBooleanProperty(BOOLEAN_PROPERTY_SUPPORTS_GRANULAR_SCROLLING);
+    }
+
+    /**
+     * Sets if the node supports granular scrolling. This should be set to true if all scroll
+     * actions which could support {@link #ACTION_ARGUMENT_SCROLL_AMOUNT_FLOAT} have done so.
+     * <p>
+     *   <strong>Note:</strong> Cannot be called from an
+     *   {@link android.accessibilityservice.AccessibilityService}.
+     *   This class is made immutable before being delivered to an AccessibilityService.
+     * </p>
+     *
+     * @param granularScrollingSupported True if the node supports granular scrolling, false
+     *                                  otherwise.
+     *
+     * @throws IllegalStateException If called from an AccessibilityService.
+     */
+    public void setGranularScrollingSupported(boolean granularScrollingSupported) {
+        setBooleanProperty(BOOLEAN_PROPERTY_SUPPORTS_GRANULAR_SCROLLING,
+                granularScrollingSupported);
+    }
+
+    /**
      * Gets if the node has selectable text.
      *
      * <p>
@@ -2977,6 +3120,10 @@
      *   {@link android.accessibilityservice.AccessibilityService}.
      *   This class is made immutable before being delivered to an AccessibilityService.
      * </p>
+     * <p>This can be used to
+     * <a href="{@docRoot}guide/topics/ui/accessibility/principles#content-groups">group related
+     * content.</a>
+     * </p>
      *
      * @param screenReaderFocusable {@code true} if the node is a focusable unit for screen readers,
      *                              {@code false} otherwise.
@@ -4340,6 +4487,8 @@
             parcel.writeInt(mCollectionInfo.getColumnCount());
             parcel.writeInt(mCollectionInfo.isHierarchical() ? 1 : 0);
             parcel.writeInt(mCollectionInfo.getSelectionMode());
+            parcel.writeInt(mCollectionInfo.getItemCount());
+            parcel.writeInt(mCollectionInfo.getImportantForAccessibilityItemCount());
         }
 
         if (isBitSet(nonDefaultFields, fieldIndex++)) {
@@ -4468,7 +4617,8 @@
         CollectionInfo ci = other.mCollectionInfo;
         mCollectionInfo = (ci == null) ? null
                 : new CollectionInfo(ci.mRowCount, ci.mColumnCount,
-                                     ci.mHierarchical, ci.mSelectionMode);
+                        ci.mHierarchical, ci.mSelectionMode, ci.mItemCount,
+                        ci.mImportantForAccessibilityItemCount);
         CollectionItemInfo cii = other.mCollectionItemInfo;
         CollectionItemInfo.Builder builder = new CollectionItemInfo.Builder();
         mCollectionItemInfo = (cii == null)  ? null
@@ -4598,6 +4748,8 @@
                         parcel.readInt(),
                         parcel.readInt(),
                         parcel.readInt() == 1,
+                        parcel.readInt(),
+                        parcel.readInt(),
                         parcel.readInt())
                 : null;
 
@@ -4916,6 +5068,7 @@
         builder.append("; enabled: ").append(isEnabled());
         builder.append("; password: ").append(isPassword());
         builder.append("; scrollable: ").append(isScrollable());
+        builder.append("; granularScrollingSupported: ").append(isGranularScrollingSupported());
         builder.append("; importantForAccessibility: ").append(isImportantForAccessibility());
         builder.append("; visible: ").append(isVisibleToUser());
         builder.append("; actions: ").append(mActions);
@@ -5006,12 +5159,17 @@
      * {@link View#onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo)} and are performed
      * within {@link View#performAccessibilityAction(int, Bundle)}.
      * </p>
-     * <p class="note">
-     * <strong>Note:</strong> Views which support these actions should invoke
+     * <aside class="note">
+     * <b>Note:</b> Views which support these actions should invoke
      * {@link View#setImportantForAccessibility(int)} with
      * {@link View#IMPORTANT_FOR_ACCESSIBILITY_YES} to ensure an {@link AccessibilityService}
      * can discover the set of supported actions.
      * </p>
+     * <aside class="note">
+     * <b>Note:</b> Use {@link androidx.core.view.ViewCompat#addAccessibilityAction(View,
+     * AccessibilityNodeInfoCompat.AccessibilityActionCompat)} to register an action directly on the
+     * view.
+     * </p>
      */
     public static final class AccessibilityAction implements Parcelable {
 
@@ -5020,12 +5178,22 @@
 
         /**
          * Action that gives input focus to the node.
+         * <p>The focus request send an event of {@link AccessibilityEvent#TYPE_VIEW_FOCUSED}
+         * if successful. In the View system, this is handled by {@link View#requestFocus}.
+         *
+         * <p>The node that is focused should return {@code true} for
+         * {@link AccessibilityNodeInfo#isFocused()}.
+         *
+         * @see #ACTION_ACCESSIBILITY_FOCUS for the difference between system and accessibility
+         * focus.
          */
         public static final AccessibilityAction ACTION_FOCUS =
                 new AccessibilityAction(AccessibilityNodeInfo.ACTION_FOCUS);
 
         /**
          * Action that clears input focus of the node.
+         * <p>The node that is cleared should return {@code false} for
+         * {@link AccessibilityNodeInfo#isFocused)}.
          */
         public static final AccessibilityAction ACTION_CLEAR_FOCUS =
                 new AccessibilityAction(AccessibilityNodeInfo.ACTION_CLEAR_FOCUS);
@@ -5077,15 +5245,27 @@
 
         /**
          * Action that gives accessibility focus to the node.
-         * <p>
-         * This is intended to be used by screen readers. Apps changing focus can confuse screen
-         * readers, so the resulting behavior can vary by device and screen reader version.
+         *
+         * <p>The UI element that implements this should send a
+         * {@link AccessibilityEvent#TYPE_VIEW_ACCESSIBILITY_FOCUSED} event
+         * if successful. The node that is focused should return {@code true} for
+         * {@link AccessibilityNodeInfo#isAccessibilityFocused()}.
+         *
+         * <p>This is intended to be used by screen readers to assist with user navigation. Apps
+         * changing focus can confuse screen readers, so the resulting behavior can vary by device
+         * and screen reader version.
+         * <p>This is distinct from {@link #ACTION_FOCUS}, which refers to system focus. System
+         * focus is typically used to convey targets for keyboard navigation.
          */
         public static final AccessibilityAction ACTION_ACCESSIBILITY_FOCUS =
                 new AccessibilityAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS);
 
         /**
          * Action that clears accessibility focus of the node.
+         * <p>The UI element that implements this should send a
+         * {@link AccessibilityEvent#TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED} event if successful. The
+         * node that is cleared should return {@code false} for
+         * {@link AccessibilityNodeInfo#isAccessibilityFocused()}.
          */
         public static final AccessibilityAction ACTION_CLEAR_ACCESSIBILITY_FOCUS =
                 new AccessibilityAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS);
@@ -5221,12 +5401,105 @@
 
         /**
          * Action to scroll the node content forward.
+         *
+         * <p>
+         *     <strong>Arguments:</strong>
+         *     {@link #ACTION_ARGUMENT_SCROLL_AMOUNT_FLOAT}. This is an optional argument.
+         * </p>
+         * <p>The UI element that implements this should send a
+         * {@link AccessibilityEvent#TYPE_VIEW_SCROLLED} event. Depending on the orientation,
+         * this element should also add the relevant directional scroll actions of
+         * {@link #ACTION_SCROLL_LEFT}, {@link #ACTION_SCROLL_RIGHT},
+         * {@link #ACTION_SCROLL_UP}, and {@link #ACTION_SCROLL_DOWN}. If the scrolling brings
+         * the next or previous element into view as the center element, such as in a ViewPager2,
+         * use {@link #ACTION_PAGE_DOWN} and the other page actions instead of the directional
+         * actions.
+         * <p>Example: a scrolling UI of vertical orientation with a forward
+         * scroll action should also add the scroll down action:
+         * <pre class="prettyprint"><code>
+         *     onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+         *          super.onInitializeAccessibilityNodeInfo(info);
+         *          if (canScrollForward) {
+         *              info.addAction(ACTION_SCROLL_FORWARD);
+         *              info.addAction(ACTION_SCROLL_DOWN);
+         *          }
+         *     }
+         *     performAccessibilityAction(int action, Bundle bundle) {
+         *          if (action == ACTION_SCROLL_FORWARD || action == ACTION_SCROLL_DOWN) {
+         *              scrollForward();
+         *          }
+         *     }
+         *     scrollForward() {
+         *         ...
+         *         if (mAccessibilityManager.isEnabled()) {
+         *             event = new AccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SCROLLED);
+         *             event.setScrollDeltaX(dx);
+         *             event.setScrollDeltaY(dy);
+         *             event.setMaxScrollX(maxDx);
+         *             event.setMaxScrollY(maxDY);
+         *             sendAccessibilityEventUnchecked(event);
+         *        }
+         *     }
+         *      </code>
+         * </pre></p>
          */
         public static final AccessibilityAction ACTION_SCROLL_FORWARD =
                 new AccessibilityAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
 
         /**
          * Action to scroll the node content backward.
+         * <p>
+         *     <strong>Arguments:</strong>
+         *     {@link #ACTION_ARGUMENT_SCROLL_AMOUNT_FLOAT}. This is an optional argument.
+         * </p>
+         * <p>The UI element that implements this should send a
+         * {@link AccessibilityEvent#TYPE_VIEW_SCROLLED} event. Depending on the orientation,
+         * this element should also add the relevant directional scroll actions of
+         * {@link #ACTION_SCROLL_LEFT}, {@link #ACTION_SCROLL_RIGHT},
+         * {@link #ACTION_SCROLL_UP}, and {@link #ACTION_SCROLL_DOWN}. If the scrolling brings
+         * the next or previous element into view as the center element, such as in a ViewPager2,
+         * use {@link #ACTION_PAGE_DOWN} and the other page actions instead of the directional
+         * actions.
+         * <p> Example: a scrolling UI of horizontal orientation with a backward
+         * scroll action should also add the scroll left/right action (LTR/RTL):
+         * <pre class="prettyprint"><code>
+         *     onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+         *          super.onInitializeAccessibilityNodeInfo(info);
+         *          if (canScrollBackward) {
+         *              info.addAction(ACTION_SCROLL_FORWARD);
+         *              if (leftToRight) {
+         *                  info.addAction(ACTION_SCROLL_LEFT);
+         *              } else {
+         *                  info.addAction(ACTION_SCROLL_RIGHT);
+         *              }
+         *          }
+         *     }
+         *     performAccessibilityAction(int action, Bundle bundle) {
+         *          if (action == ACTION_SCROLL_BACKWARD) {
+         *              scrollBackward();
+         *          } else if (action == ACTION_SCROLL_LEFT) {
+         *              if (!isRTL()){
+         *                  scrollBackward();
+         *              }
+         *          } else if (action == ACTION_SCROLL_RIGHT) {
+         *              if (isRTL()){
+         *                  scrollBackward();
+         *              }
+         *          }
+         *     }
+         *     scrollBackward() {
+         *         ...
+         *         if (mAccessibilityManager.isEnabled()) {
+         *             event = new AccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SCROLLED);
+         *             event.setScrollDeltaX(dx);
+         *             event.setScrollDeltaY(dy);
+         *             event.setMaxScrollX(maxDx);
+         *             event.setMaxScrollY(maxDY);
+         *             sendAccessibilityEventUnchecked(event);
+         *        }
+         *     }
+         *      </code>
+         * </pre></p>
          */
         public static final AccessibilityAction ACTION_SCROLL_BACKWARD =
                 new AccessibilityAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
@@ -5322,6 +5595,8 @@
         /**
          * Action that requests the node make its bounding rectangle visible
          * on the screen, scrolling if necessary just enough.
+         * <p>The UI element that implements this should send a
+         * {@link AccessibilityEvent#TYPE_VIEW_SCROLLED} event.
          *
          * @see View#requestRectangleOnScreen(Rect)
          */
@@ -5337,6 +5612,8 @@
          *     <li>{@link AccessibilityNodeInfo#ACTION_ARGUMENT_ROW_INT}</li>
          *     <li>{@link AccessibilityNodeInfo#ACTION_ARGUMENT_COLUMN_INT}</li>
          * <ul>
+         * <p>The UI element that implements this should send a
+         * {@link AccessibilityEvent#TYPE_VIEW_SCROLLED} event.
          *
          * @see AccessibilityNodeInfo#getCollectionInfo()
          */
@@ -5371,48 +5648,80 @@
 
         /**
          * Action to scroll the node content up.
+         * <p>
+         *     <strong>Arguments:</strong>
+         *     {@link #ACTION_ARGUMENT_SCROLL_AMOUNT_FLOAT}. This is an optional argument.
+         * </p>
+         * <p>The UI element that implements this should send a
+         * {@link AccessibilityEvent#TYPE_VIEW_SCROLLED} event.
          */
         public static final AccessibilityAction ACTION_SCROLL_UP =
                 new AccessibilityAction(R.id.accessibilityActionScrollUp);
 
         /**
          * Action to scroll the node content left.
+         * <p>
+         *     <strong>Arguments:</strong>
+         *     {@link #ACTION_ARGUMENT_SCROLL_AMOUNT_FLOAT}. This is an optional argument.
+         * </p>
+         * <p>The UI element that implements this should send a
+         * {@link AccessibilityEvent#TYPE_VIEW_SCROLLED} event.
          */
         public static final AccessibilityAction ACTION_SCROLL_LEFT =
                 new AccessibilityAction(R.id.accessibilityActionScrollLeft);
 
         /**
          * Action to scroll the node content down.
+         * <p>
+         *     <strong>Arguments:</strong>
+         *     {@link #ACTION_ARGUMENT_SCROLL_AMOUNT_FLOAT}. This is an optional argument.
+         * </p>
+         * <p>The UI element that implements this should send a
+         * {@link AccessibilityEvent#TYPE_VIEW_SCROLLED} event.
          */
         public static final AccessibilityAction ACTION_SCROLL_DOWN =
                 new AccessibilityAction(R.id.accessibilityActionScrollDown);
 
         /**
          * Action to scroll the node content right.
+         * <p>
+         *     <strong>Arguments:</strong>
+         *     {@link #ACTION_ARGUMENT_SCROLL_AMOUNT_FLOAT}. This is an optional argument.
+         * </p>
+         * <p>The UI element that implements this should send a
+         * {@link AccessibilityEvent#TYPE_VIEW_SCROLLED} event.
          */
         public static final AccessibilityAction ACTION_SCROLL_RIGHT =
                 new AccessibilityAction(R.id.accessibilityActionScrollRight);
 
         /**
          * Action to move to the page above.
+         * <p>The UI element that implements this should send a
+         * {@link AccessibilityEvent#TYPE_VIEW_SCROLLED} event.
          */
         public static final AccessibilityAction ACTION_PAGE_UP =
                 new AccessibilityAction(R.id.accessibilityActionPageUp);
 
         /**
          * Action to move to the page below.
+         * <p>The UI element that implements this should send a
+         * {@link AccessibilityEvent#TYPE_VIEW_SCROLLED} event.
          */
         public static final AccessibilityAction ACTION_PAGE_DOWN =
                 new AccessibilityAction(R.id.accessibilityActionPageDown);
 
         /**
          * Action to move to the page left.
+         * <p>The UI element that implements this should send a
+         * {@link AccessibilityEvent#TYPE_VIEW_SCROLLED} event.
          */
         public static final AccessibilityAction ACTION_PAGE_LEFT =
                 new AccessibilityAction(R.id.accessibilityActionPageLeft);
 
         /**
          * Action to move to the page right.
+         * <p>The UI element that implements this should send a
+         * {@link AccessibilityEvent#TYPE_VIEW_SCROLLED} event.
          */
         public static final AccessibilityAction ACTION_PAGE_RIGHT =
                 new AccessibilityAction(R.id.accessibilityActionPageRight);
@@ -5517,8 +5826,9 @@
          * This action initiates a drag & drop within the system. The source's dragged content is
          * prepared before the drag begins. In View, this action should prepare the arguments to
          * {@link View#startDragAndDrop(ClipData, View.DragShadowBuilder, Object, int)} and then
-         * call {@link View#startDragAndDrop(ClipData, View.DragShadowBuilder, Object, int)}. The
-         * equivalent should be performed for other UI toolkits.
+         * call {@link View#startDragAndDrop(ClipData, View.DragShadowBuilder, Object, int)} with
+         * {@link View#DRAG_FLAG_ACCESSIBILITY_ACTION}. The equivalent should be performed for other
+         * UI toolkits.
          * </p>
          *
          * @see AccessibilityEvent#CONTENT_CHANGE_TYPE_DRAG_STARTED
@@ -5532,7 +5842,8 @@
          * This action is added to potential drop targets if the source started a drag with
          * {@link #ACTION_DRAG_START}. In View, these targets are Views that accepted
          * {@link android.view.DragEvent#ACTION_DRAG_STARTED} and have an
-         * {@link View.OnDragListener}.
+         * {@link View.OnDragListener}, and the drop occurs at the center location of the View's
+         * window bounds.
          * </p>
          *
          * @see AccessibilityEvent#CONTENT_CHANGE_TYPE_DRAG_DROPPED
@@ -5804,10 +6115,20 @@
         /** Selection mode where multiple items may be selected. */
         public static final int SELECTION_MODE_MULTIPLE = 2;
 
+        /**
+         * Constant to denote a missing collection count.
+         *
+         * This should be used for {@code mItemCount} and
+         * {@code mImportantForAccessibilityItemCount} when values for those fields are not known.
+         */
+        public static final int UNDEFINED = -1;
+
         private int mRowCount;
         private int mColumnCount;
         private boolean mHierarchical;
         private int mSelectionMode;
+        private int mItemCount;
+        private int mImportantForAccessibilityItemCount;
 
         /**
          * Instantiates a CollectionInfo that is a clone of another one.
@@ -5821,7 +6142,8 @@
          */
         public static CollectionInfo obtain(CollectionInfo other) {
             return new CollectionInfo(other.mRowCount, other.mColumnCount, other.mHierarchical,
-                    other.mSelectionMode);
+                    other.mSelectionMode, other.mItemCount,
+                    other.mImportantForAccessibilityItemCount);
         }
 
         /**
@@ -5889,6 +6211,36 @@
             mColumnCount = columnCount;
             mHierarchical = hierarchical;
             mSelectionMode = selectionMode;
+            mItemCount = UNDEFINED;
+            mImportantForAccessibilityItemCount = UNDEFINED;
+        }
+
+        /**
+         * Creates a new instance.
+         *
+         * @param rowCount The number of rows.
+         * @param columnCount The number of columns.
+         * @param hierarchical Whether the collection is hierarchical.
+         * @param selectionMode The collection's selection mode.
+         * @param itemCount The collection's item count, which includes items that are unimportant
+         *                  for accessibility. When ViewGroups map cleanly to both row and column
+         *                  semantics, clients should populate the row and column counts and
+         *                  optionally populate this field. In all other cases, clients should
+         *                  populate this field so that accessibility services can use it to relay
+         *                  the collection size to users. This should be set to {@code UNDEFINED} if
+         *                  the item count is not known.
+         * @param importantForAccessibilityItemCount The count of the collection's views considered
+         *                                           important for accessibility.
+         */
+        @Hide
+        public CollectionInfo(int rowCount, int columnCount, boolean hierarchical,
+                int selectionMode, int itemCount, int importantForAccessibilityItemCount) {
+            mRowCount = rowCount;
+            mColumnCount = columnCount;
+            mHierarchical = hierarchical;
+            mSelectionMode = selectionMode;
+            mItemCount = itemCount;
+            mImportantForAccessibilityItemCount = importantForAccessibilityItemCount;
         }
 
         /**
@@ -5933,6 +6285,25 @@
         }
 
         /**
+         * Gets the number of items in the collection.
+         *
+         * @return The count of items, which may be {@code UNDEFINED} if the count is not known.
+         */
+        public int getItemCount() {
+            return mItemCount;
+        }
+
+        /**
+         * Gets the number of items in the collection considered important for accessibility.
+         *
+         * @return The count of items important for accessibility, which may be {@code UNDEFINED}
+         * if the count is not known.
+         */
+        public int getImportantForAccessibilityItemCount() {
+            return mImportantForAccessibilityItemCount;
+        }
+
+        /**
          * Previously would recycle this instance.
          *
          * @deprecated Object pooling has been discontinued. Calling this function now will have
@@ -5946,6 +6317,111 @@
             mColumnCount = 0;
             mHierarchical = false;
             mSelectionMode = SELECTION_MODE_NONE;
+            mItemCount = UNDEFINED;
+            mImportantForAccessibilityItemCount = UNDEFINED;
+        }
+
+        /**
+         * The builder for CollectionInfo.
+         */
+
+        public static final class Builder {
+            private int mRowCount = 0;
+            private int mColumnCount = 0;
+            private boolean mHierarchical = false;
+            private int mSelectionMode;
+            private int mItemCount = UNDEFINED;
+            private int mImportantForAccessibilityItemCount = UNDEFINED;
+
+            /**
+             * Creates a new Builder.
+             */
+            public Builder() {
+            }
+
+            /**
+             * Sets the row count.
+             * @param rowCount The number of rows in the collection.
+             * @return This builder.
+             */
+            @NonNull
+            public CollectionInfo.Builder setRowCount(int rowCount) {
+                mRowCount = rowCount;
+                return this;
+            }
+
+            /**
+             * Sets the column count.
+             * @param columnCount The number of columns in the collection.
+             * @return This builder.
+             */
+            @NonNull
+            public CollectionInfo.Builder setColumnCount(int columnCount) {
+                mColumnCount = columnCount;
+                return this;
+            }
+            /**
+             * Sets whether the collection is hierarchical.
+             * @param hierarchical Whether the collection is hierarchical.
+             * @return This builder.
+             */
+            @NonNull
+            public CollectionInfo.Builder setHierarchical(boolean hierarchical) {
+                mHierarchical = hierarchical;
+                return this;
+            }
+
+            /**
+             * Sets the selection mode.
+             * @param selectionMode The selection mode.
+             * @return This builder.
+             */
+            @NonNull
+            public CollectionInfo.Builder setSelectionMode(int selectionMode) {
+                mSelectionMode = selectionMode;
+                return this;
+            }
+
+            /**
+             * Sets the number of items in the collection. Can be optionally set for ViewGroups with
+             * clear row and column semantics; should be set for all other clients.
+             *
+             * @param itemCount The number of items in the collection. This should be set to
+             *                  {@code UNDEFINED} if the item count is not known.
+             * @return This builder.
+             */
+            @NonNull
+            public CollectionInfo.Builder setItemCount(int itemCount) {
+                mItemCount = itemCount;
+                return this;
+            }
+
+            /**
+             * Sets the number of views considered important for accessibility.
+             * @param importantForAccessibilityItemCount The number of items important for
+             *                                            accessibility.
+             * @return This builder.
+             */
+            @NonNull
+            public CollectionInfo.Builder setImportantForAccessibilityItemCount(
+                    int importantForAccessibilityItemCount) {
+                mImportantForAccessibilityItemCount = importantForAccessibilityItemCount;
+                return this;
+            }
+
+            /**
+             * Creates a new {@link CollectionInfo} instance.
+             */
+            @NonNull
+            public CollectionInfo build() {
+                CollectionInfo collectionInfo = new CollectionInfo(mRowCount, mColumnCount,
+                        mHierarchical);
+                collectionInfo.mSelectionMode = mSelectionMode;
+                collectionInfo.mItemCount = mItemCount;
+                collectionInfo.mImportantForAccessibilityItemCount =
+                        mImportantForAccessibilityItemCount;
+                return collectionInfo;
+            }
         }
     }
 
@@ -6488,7 +6964,7 @@
         /**
          * @see android.os.Parcelable.Creator
          */
-        public static final @android.annotation.NonNull Parcelable.Creator<TouchDelegateInfo> CREATOR =
+        public static final @NonNull Parcelable.Creator<TouchDelegateInfo> CREATOR =
                 new Parcelable.Creator<TouchDelegateInfo>() {
             @Override
             public TouchDelegateInfo createFromParcel(Parcel parcel) {
@@ -6660,7 +7136,7 @@
     /**
      * @see android.os.Parcelable.Creator
      */
-    public static final @android.annotation.NonNull Parcelable.Creator<AccessibilityNodeInfo> CREATOR =
+    public static final @NonNull Parcelable.Creator<AccessibilityNodeInfo> CREATOR =
             new Parcelable.Creator<AccessibilityNodeInfo>() {
         @Override
         public AccessibilityNodeInfo createFromParcel(Parcel parcel) {
diff --git a/core/java/android/view/accessibility/AccessibilityNodeProvider.java b/core/java/android/view/accessibility/AccessibilityNodeProvider.java
index 91d4a35..1868a43 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeProvider.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeProvider.java
@@ -45,6 +45,10 @@
  * View itself. Similarly the returned instance is responsible for performing accessibility
  * actions on any virtual view or the root view itself. For example:
  * </p>
+ * <aside class="note">
+ * <b>Note:</b> Consider using a {@link androidx.customview.widget.ExploreByTouchHelper}, a utility
+ * extension of AccessibilityNodeProvider, to simplify many aspects of providing information to
+ * accessibility services and managing accessibility focus. </aside>
  * <div>
  * <div class="ds-selector-tabs"><section><h3 id="kotlin">Kotlin</h3>
  * <pre class="prettyprint lang-kotlin">
diff --git a/core/java/android/view/accessibility/AccessibilityRecord.java b/core/java/android/view/accessibility/AccessibilityRecord.java
index d69c781..7f8926d 100644
--- a/core/java/android/view/accessibility/AccessibilityRecord.java
+++ b/core/java/android/view/accessibility/AccessibilityRecord.java
@@ -66,13 +66,13 @@
 
     private static final int UNDEFINED = -1;
 
-    private static final int PROPERTY_CHECKED = 0x00000001;
-    private static final int PROPERTY_ENABLED = 0x00000002;
-    private static final int PROPERTY_PASSWORD = 0x00000004;
-    private static final int PROPERTY_FULL_SCREEN = 0x00000080;
-    private static final int PROPERTY_SCROLLABLE = 0x00000100;
-    private static final int PROPERTY_IMPORTANT_FOR_ACCESSIBILITY = 0x00000200;
-    private static final int PROPERTY_ACCESSIBILITY_DATA_SENSITIVE = 0x00000400;
+    private static final int PROPERTY_CHECKED = 1 /* << 0 */;
+    private static final int PROPERTY_ENABLED = 1 << 1;
+    private static final int PROPERTY_PASSWORD = 1 << 2;
+    private static final int PROPERTY_FULL_SCREEN = 1 << 7;
+    private static final int PROPERTY_SCROLLABLE = 1 << 8;
+    private static final int PROPERTY_IMPORTANT_FOR_ACCESSIBILITY = 1 << 9;
+    private static final int PROPERTY_ACCESSIBILITY_DATA_SENSITIVE = 1 << 10;
 
     private static final int GET_SOURCE_PREFETCH_FLAGS =
             AccessibilityNodeInfo.FLAG_PREFETCH_ANCESTORS
@@ -198,8 +198,7 @@
      *
      * @see AccessibilityNodeInfo#getParent(int) for a description of prefetching.
      */
-    @Nullable
-    public AccessibilityNodeInfo getSource(
+    public @Nullable AccessibilityNodeInfo getSource(
             @AccessibilityNodeInfo.PrefetchingStrategy int prefetchingStrategy) {
         enforceSealed();
         if ((mConnectionId == UNDEFINED)
diff --git a/core/java/android/view/accessibility/AccessibilityWindowInfo.java b/core/java/android/view/accessibility/AccessibilityWindowInfo.java
index fa0052c..09b2f9c 100644
--- a/core/java/android/view/accessibility/AccessibilityWindowInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityWindowInfo.java
@@ -99,6 +99,7 @@
     /** @hide */
     public static final int UNDEFINED_CONNECTION_ID = -1;
     /** @hide */
+    @TestApi
     public static final int UNDEFINED_WINDOW_ID = -1;
     /** @hide */
     public static final int ANY_WINDOW_ID = -2;
diff --git a/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl b/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl
index 0eeba7c..a43acf9 100644
--- a/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl
+++ b/core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl
@@ -66,5 +66,6 @@
     void takeScreenshotOfWindow(int interactionId,
         in ScreenCapture.ScreenCaptureListener listener,
         IAccessibilityInteractionConnectionCallback callback);
-    void attachAccessibilityOverlayToWindow(in SurfaceControl sc);
+
+    void attachAccessibilityOverlayToWindow(in SurfaceControl sc, int interactionId, in IAccessibilityInteractionConnectionCallback callback);
 }
diff --git a/core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl b/core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl
index 456bf58..fe59519 100644
--- a/core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl
+++ b/core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl
@@ -68,4 +68,9 @@
     * Sends an error code for a window screenshot request to the requesting client.
     */
     void sendTakeScreenshotOfWindowError(int errorCode, int interactionId);
+
+    /**
+    * Sends an result code for an attach overlay request to the requesting client.
+    */
+    void sendAttachOverlayResult(int result, int interactionId);
 }
diff --git a/core/java/android/view/accessibility/IAccessibilityManager.aidl b/core/java/android/view/accessibility/IAccessibilityManager.aidl
index 390503b..7a1112f 100644
--- a/core/java/android/view/accessibility/IAccessibilityManager.aidl
+++ b/core/java/android/view/accessibility/IAccessibilityManager.aidl
@@ -21,6 +21,7 @@
 import android.accessibilityservice.IAccessibilityServiceConnection;
 import android.accessibilityservice.IAccessibilityServiceClient;
 import android.content.ComponentName;
+import android.content.pm.ParceledListSlice;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.accessibility.IAccessibilityInteractionConnection;
@@ -47,7 +48,7 @@
 
     boolean removeClient(IAccessibilityManagerClient client, int userId);
 
-    List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(int userId);
+    ParceledListSlice<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(int userId);
 
     @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553)
     List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int feedbackType, int userId);
diff --git a/core/java/android/view/accessibility/TEST_MAPPING b/core/java/android/view/accessibility/TEST_MAPPING
index 9b1b677..1c67399 100644
--- a/core/java/android/view/accessibility/TEST_MAPPING
+++ b/core/java/android/view/accessibility/TEST_MAPPING
@@ -1,56 +1,7 @@
 {
-  "presubmit": [
+  "imports": [
     {
-      "name": "CtsAccessibilityServiceTestCases",
-      "options": [
-        {
-          "include-annotation": "android.platform.test.annotations.Presubmit"
-        },
-        {
-          "exclude-annotation": "android.support.test.filters.FlakyTest"
-        }
-      ]
-    },
-    {
-      "name": "CtsUiAutomationTestCases",
-      "options": [
-        {
-          "include-annotation": "android.platform.test.annotations.Presubmit"
-        },
-        {
-          "exclude-annotation": "android.support.test.filters.FlakyTest"
-        }
-      ]
-    },
-    {
-      "name": "FrameworksCoreTests",
-      "options": [
-        {
-          "include-filter": "android.view.accessibility"
-        },
-        {
-          "exclude-annotation": "androidx.test.filters.FlakyTest"
-        }
-      ]
-    }
-  ],
-  "postsubmit": [
-    {
-      "name": "CtsAccessibilityServiceSdk29TestCases"
-    },
-    {
-      "name": "CtsAccessibilityServiceTestCases"
-    },
-    {
-      "name": "CtsUiAutomationTestCases"
-    },
-    {
-      "name": "FrameworksCoreTests",
-      "options": [
-        {
-          "include-filter": "android.view.accessibility"
-        }
-      ]
+      "path": "frameworks/base/services/accessibility/TEST_MAPPING"
     }
   ]
 }
diff --git a/core/java/android/view/animation/AnimationUtils.java b/core/java/android/view/animation/AnimationUtils.java
index 84ef226..8ba8b8c 100644
--- a/core/java/android/view/animation/AnimationUtils.java
+++ b/core/java/android/view/animation/AnimationUtils.java
@@ -19,6 +19,9 @@
 import android.annotation.AnimRes;
 import android.annotation.InterpolatorRes;
 import android.annotation.TestApi;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledSince;
+import android.compat.annotation.Overridable;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
 import android.content.res.Resources;
@@ -27,6 +30,7 @@
 import android.content.res.XmlResourceParser;
 import android.os.SystemClock;
 import android.util.AttributeSet;
+import android.util.TimeUtils;
 import android.util.Xml;
 import android.view.InflateException;
 
@@ -47,10 +51,23 @@
     private static final int TOGETHER = 0;
     private static final int SEQUENTIALLY = 1;
 
+     /**
+     * For apps targeting {@link Build.VERSION_CODES#VANILLA_ICE_CREAM} and above,
+     * this change ID enables to use expectedPresentationTime instead of the frameTime
+     * for the frame start time .
+     *
+     * @hide
+     */
+    @ChangeId
+    @EnabledSince(targetSdkVersion = android.os.Build.VERSION_CODES.VANILLA_ICE_CREAM)
+    @Overridable
+    public static final long OVERRIDE_ENABLE_EXPECTED_PRSENTATION_TIME = 278730197L;
+
     private static class AnimationState {
         boolean animationClockLocked;
         long currentVsyncTimeMillis;
         long lastReportedTimeMillis;
+        long mExpectedPresentationTimeNanos;
     };
 
     private static ThreadLocal<AnimationState> sAnimationState
@@ -62,7 +79,8 @@
     };
 
     /**
-     * Locks AnimationUtils{@link #currentAnimationTimeMillis()} to a fixed value for the current
+     * Locks AnimationUtils{@link #currentAnimationTimeMillis()} and
+     * AnimationUtils{@link #expectedPresentationTimeNanos()} to a fixed value for the current
      * thread. This is used by {@link android.view.Choreographer} to ensure that all accesses
      * during a vsync update are synchronized to the timestamp of the vsync.
      *
@@ -74,8 +92,9 @@
      * Note that time is not allowed to "rewind" and must perpetually flow forward. So the
      * lock may fail if the time is in the past from a previously returned value, however
      * time will be frozen for the duration of the lock. The clock is a thread-local, so
-     * ensure that {@link #lockAnimationClock(long)}, {@link #unlockAnimationClock()}, and
-     * {@link #currentAnimationTimeMillis()} are all called on the same thread.
+     * ensure that {@link #lockAnimationClock(long)}, {@link #unlockAnimationClock()},
+     * {@link #currentAnimationTimeMillis()}, and {@link #expectedPresentationTimeNanos()}
+     * are all called on the same thread.
      *
      * This is also not reference counted in any way. Any call to {@link #unlockAnimationClock()}
      * will unlock the clock for everyone on the same thread. It is therefore recommended
@@ -83,12 +102,13 @@
      * {@link android.view.Choreographer} instance.
      *
      * @hide
-     * */
+     */
     @TestApi
-    public static void lockAnimationClock(long vsyncMillis) {
+    public static void lockAnimationClock(long vsyncMillis, long expectedPresentationTimeNanos) {
         AnimationState state = sAnimationState.get();
         state.animationClockLocked = true;
         state.currentVsyncTimeMillis = vsyncMillis;
+        state.mExpectedPresentationTimeNanos = expectedPresentationTimeNanos;
     }
 
     /**
@@ -124,6 +144,31 @@
     }
 
     /**
+     * The expected presentation time of a frame in the {@link System#nanoTime()}.
+     * Developers should prefer using this method over {@link #currentAnimationTimeMillis()}
+     * because it offers a more accurate time for the calculating animation progress.
+     *
+     * @return the expected presentation time of a frame in the
+     *         {@link System#nanoTime()} time base.
+     */
+    public static long getExpectedPresentationTimeNanos() {
+        AnimationState state = sAnimationState.get();
+        return state.mExpectedPresentationTimeNanos;
+    }
+
+    /**
+     * The expected presentation time of a frame in the {@link SystemClock#uptimeMillis()}.
+     * Developers should prefer using this method over {@link #currentAnimationTimeMillis()}
+     * because it offers a more accurate time for the calculating animation progress.
+     *
+     * @return the expected presentation time of a frame in the
+     *         {@link SystemClock#uptimeMillis()} time base.
+     */
+    public static long getExpectedPresentationTimeMillis() {
+        return getExpectedPresentationTimeNanos() / TimeUtils.NANOS_PER_MS;
+    }
+
+    /**
      * Loads an {@link Animation} object from a resource
      *
      * @param context Application context used to access resources
diff --git a/core/java/android/view/autofill/AutofillFeatureFlags.java b/core/java/android/view/autofill/AutofillFeatureFlags.java
index 461b78c..956230d 100644
--- a/core/java/android/view/autofill/AutofillFeatureFlags.java
+++ b/core/java/android/view/autofill/AutofillFeatureFlags.java
@@ -100,21 +100,16 @@
 
     // START CREDENTIAL MANAGER FLAGS //
     /**
-     * (deprecated) Indicates whether credential manager tagged views should be ignored from
-     * autofill structures.This flag is further gated by
-     * {@link #DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_ENABLED}
-     *
-     * TODO(b/280661772): Remove this flag once API change is allowed
+     * Indicates whether credential manager tagged views should be ignored from autofill structures.
+     * This flag is further gated by {@link #DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_ENABLED}
      */
     public static final String DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_IGNORE_VIEWS =
             "autofill_credential_manager_ignore_views";
 
     /**
-     * (deprecated) Indicates CredentialManager feature enabled or not.
+     * Indicates CredentialManager feature enabled or not.
      * This is the overall feature flag. Individual behavior of credential manager may be controlled
      * via a different flag, but gated by this flag.
-     *
-     * TODO(b/280661772): Remove this flag once API change is allowed
      */
     public static final String DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_ENABLED =
             "autofill_credential_manager_enabled";
@@ -265,6 +260,8 @@
 
 
     // CREDENTIAL MANAGER DEFAULTS
+    // Credential manager is enabled by default so as to allow testing by app developers
+    private static final boolean DEFAULT_CREDENTIAL_MANAGER_ENABLED = true;
     private static final boolean DEFAULT_CREDENTIAL_MANAGER_SUPPRESS_FILL_AND_SAVE_DIALOG = true;
     // END CREDENTIAL MANAGER DEFAULTS
 
@@ -321,12 +318,24 @@
 
     /* starts credman flag getter function */
     /**
+     * Whether the Credential Manager feature is enabled or not
+     *
+     * @hide
+     */
+    public static boolean isCredentialManagerEnabled() {
+        return DeviceConfig.getBoolean(
+                DeviceConfig.NAMESPACE_AUTOFILL,
+                DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_ENABLED,
+                DEFAULT_CREDENTIAL_MANAGER_ENABLED);
+    }
+
+    /**
      * Whether credential manager tagged views should not trigger fill dialog requests.
      *
      * @hide
      */
     public static boolean isFillAndSaveDialogDisabledForCredentialManager() {
-        return DeviceConfig.getBoolean(
+        return isCredentialManagerEnabled() && DeviceConfig.getBoolean(
                     DeviceConfig.NAMESPACE_AUTOFILL,
                     DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_SUPPRESS_FILL_AND_SAVE_DIALOG,
                     DEFAULT_CREDENTIAL_MANAGER_SUPPRESS_FILL_AND_SAVE_DIALOG);
diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java
index d729d49..2405d40 100644
--- a/core/java/android/view/autofill/AutofillManager.java
+++ b/core/java/android/view/autofill/AutofillManager.java
@@ -16,6 +16,7 @@
 
 package android.view.autofill;
 
+import static android.Manifest.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS;
 import static android.service.autofill.FillRequest.FLAG_IME_SHOWING;
 import static android.service.autofill.FillRequest.FLAG_MANUAL_REQUEST;
 import static android.service.autofill.FillRequest.FLAG_PASSWORD_INPUT_TYPE;
@@ -30,10 +31,12 @@
 import static android.view.autofill.Helper.toList;
 
 import android.accessibilityservice.AccessibilityServiceInfo;
+import android.annotation.CallbackExecutor;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.RequiresFeature;
+import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
 import android.annotation.SystemService;
 import android.annotation.TestApi;
@@ -50,16 +53,21 @@
 import android.content.pm.ResolveInfo;
 import android.graphics.Rect;
 import android.metrics.LogMaker;
+import android.os.Binder;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.CancellationSignal;
 import android.os.Handler;
 import android.os.IBinder;
+import android.os.ICancellationSignal;
 import android.os.Looper;
 import android.os.Parcelable;
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.service.autofill.AutofillService;
+import android.service.autofill.FillCallback;
 import android.service.autofill.FillEventHistory;
+import android.service.autofill.IFillCallback;
 import android.service.autofill.UserData;
 import android.text.TextUtils;
 import android.util.ArrayMap;
@@ -80,6 +88,7 @@
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.accessibility.AccessibilityNodeProvider;
 import android.view.accessibility.AccessibilityWindowInfo;
+import android.view.inputmethod.InlineSuggestionsRequest;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.CheckBox;
 import android.widget.DatePicker;
@@ -109,6 +118,7 @@
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
+import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import sun.misc.Cleaner;
@@ -178,6 +188,12 @@
  * shows an autofill save UI if the value of savable views have changed. If the user selects the
  * option to Save, the current value of the views is then sent to the autofill service.
  *
+ * <p>There is another choice for the application to provide it's datasets to the Autofill framework
+ * by setting an {@link AutofillRequestCallback} through
+ * {@link #setAutofillRequestCallback(Executor, AutofillRequestCallback)}. The application can use
+ * its callback instead of the default {@link AutofillService}. See
+ * {@link AutofillRequestCallback} for more details.
+ *
  * <h3 id="additional-notes">Additional notes</h3>
  *
  * <p>It is safe to call <code>AutofillManager</code> methods from any thread.
@@ -311,6 +327,7 @@
     /** @hide */ public static final int FLAG_ADD_CLIENT_DEBUG = 0x2;
     /** @hide */ public static final int FLAG_ADD_CLIENT_VERBOSE = 0x4;
     /** @hide */ public static final int FLAG_ADD_CLIENT_ENABLED_FOR_AUGMENTED_AUTOFILL_ONLY = 0x8;
+    /** @hide */ public static final int FLAG_ENABLED_CLIENT_SUGGESTIONS = 0x20;
 
     // NOTE: flag below is used by the session start receiver only, hence it can have values above
     /** @hide */ public static final int RECEIVER_FLAG_SESSION_FOR_AUGMENTED_AUTOFILL_ONLY = 0x1;
@@ -644,7 +661,12 @@
     @GuardedBy("mLock")
     private boolean mEnabledForAugmentedAutofillOnly;
 
-    private boolean mHasCredentialField;
+    @GuardedBy("mLock")
+    @Nullable private AutofillRequestCallback mAutofillRequestCallback;
+    @GuardedBy("mLock")
+    @Nullable private Executor mRequestCallbackExecutor;
+
+    private boolean mScreenHasCredmanField;
 
     /**
      * Indicates whether there is already a field to do a fill request after
@@ -709,6 +731,9 @@
     // Indicates whether called the showAutofillDialog() method.
     private boolean mShowAutofillDialogCalled = false;
 
+    // Cached autofill feature flag
+    private boolean mShouldIgnoreCredentialViews = false;
+
     private final String[] mFillDialogEnabledHints;
 
     // Tracked all views that have appeared, including views that there are no
@@ -1431,7 +1456,7 @@
                 Log.d(TAG, "Ignoring Fill Dialog request since important for credMan:"
                         + view.getAutofillId().toString());
             }
-            mHasCredentialField = true;
+            mScreenHasCredmanField = true;
             return;
         }
         for (int i = 0; i < infos.size(); i++) {
@@ -1459,7 +1484,7 @@
                 Log.d(TAG, "Ignoring Fill Dialog request since important for credMan:"
                         + v.getAutofillId());
             }
-            mHasCredentialField = true;
+            mScreenHasCredmanField = true;
             return;
         }
         notifyViewReadyInner(v.getAutofillId(), v.getAutofillHints());
@@ -1758,7 +1783,7 @@
 
             // Update session when screen has credman field
             if (AutofillFeatureFlags.isFillAndSaveDialogDisabledForCredentialManager()
-                    && mHasCredentialField) {
+                    && mScreenHasCredmanField) {
                 flags |= FLAG_SCREEN_HAS_CREDMAN_FIELD;
                 if (sVerbose) {
                     Log.v(TAG, "updating session with flag screen has credman view");
@@ -2269,6 +2294,11 @@
     }
 
     /** @hide */
+    public boolean shouldIgnoreCredentialViews() {
+        return mShouldIgnoreCredentialViews;
+    }
+
+    /** @hide */
     public void onAuthenticationResult(int authenticationId, Intent data, View focusView) {
         if (!hasAutofillFeature()) {
             return;
@@ -2350,6 +2380,38 @@
         return new AutofillId(parent.getAutofillViewId(), virtualId);
     }
 
+    /**
+     * Sets the client's suggestions callback for autofill.
+     *
+     * @see AutofillRequestCallback
+     *
+     * @param executor specifies the thread upon which the callbacks will be invoked.
+     * @param callback which handles autofill request to provide client's suggestions.
+     */
+    @RequiresPermission(PROVIDE_OWN_AUTOFILL_SUGGESTIONS)
+    public void setAutofillRequestCallback(@NonNull @CallbackExecutor Executor executor,
+            @NonNull AutofillRequestCallback callback) {
+        if (mContext.checkSelfPermission(PROVIDE_OWN_AUTOFILL_SUGGESTIONS)
+                != PackageManager.PERMISSION_GRANTED) {
+            throw new SecurityException("Requires PROVIDE_OWN_AUTOFILL_SUGGESTIONS permission!");
+        }
+
+        synchronized (mLock) {
+            mRequestCallbackExecutor = executor;
+            mAutofillRequestCallback = callback;
+        }
+    }
+
+    /**
+     * clears the client's suggestions callback for autofill.
+     */
+    public void clearAutofillRequestCallback() {
+        synchronized (mLock) {
+            mRequestCallbackExecutor = null;
+            mAutofillRequestCallback = null;
+        }
+    }
+
     @GuardedBy("mLock")
     private void startSessionLocked(@NonNull AutofillId id, @NonNull Rect bounds,
             @NonNull AutofillValue value, int flags) {
@@ -2410,6 +2472,13 @@
                 }
             }
 
+            if (mAutofillRequestCallback != null) {
+                if (sDebug) {
+                    Log.d(TAG, "startSession with the client suggestions provider");
+                }
+                flags |= FLAG_ENABLED_CLIENT_SUGGESTIONS;
+            }
+
             mService.startSession(client.autofillClientGetActivityToken(),
                     mServiceClient.asBinder(), id, bounds, value, mContext.getUserId(),
                     mCallback != null, flags, clientActivity,
@@ -2473,7 +2542,7 @@
         mIsFillRequested.set(false);
         mShowAutofillDialogCalled = false;
         mFillDialogTriggerIds = null;
-        mHasCredentialField = false;
+        mScreenHasCredmanField = false;
         mAllTrackedViews.clear();
         if (resetEnteredIds) {
             mEnteredIds = null;
@@ -2764,6 +2833,28 @@
         }
     }
 
+    private void onFillRequest(InlineSuggestionsRequest request,
+            CancellationSignal cancellationSignal, FillCallback callback) {
+        final AutofillRequestCallback autofillRequestCallback;
+        final Executor executor;
+        synchronized (mLock) {
+            autofillRequestCallback = mAutofillRequestCallback;
+            executor = mRequestCallbackExecutor;
+        }
+        if (autofillRequestCallback != null && executor != null) {
+            final long ident = Binder.clearCallingIdentity();
+            try {
+                executor.execute(() ->
+                        autofillRequestCallback.onFillRequest(
+                                request, cancellationSignal, callback));
+            } finally {
+                Binder.restoreCallingIdentity(ident);
+            }
+        } else {
+            callback.onSuccess(null);
+        }
+    }
+
     /** @hide */
     public static final int SET_STATE_FLAG_ENABLED = 0x01;
     /** @hide */
@@ -3566,7 +3657,7 @@
         if (!hasFillDialogUiFeature()
                 || mShowAutofillDialogCalled
                 || mFillDialogTriggerIds == null
-                || mHasCredentialField) {
+                || mScreenHasCredmanField) {
             return false;
         }
 
@@ -4324,6 +4415,23 @@
         }
 
         @Override
+        public void requestFillFromClient(int id, InlineSuggestionsRequest request,
+                IFillCallback callback) {
+            final AutofillManager afm = mAfm.get();
+            if (afm != null) {
+                ICancellationSignal transport = CancellationSignal.createTransport();
+                try {
+                    callback.onCancellable(transport);
+                } catch (RemoteException e) {
+                    Slog.w(TAG, "Error requesting a cancellation", e);
+                }
+
+                afm.onFillRequest(request, CancellationSignal.fromTransport(transport),
+                        new FillCallback(callback, id));
+            }
+        }
+
+        @Override
         public void notifyFillDialogTriggerIds(List<AutofillId> ids) {
             final AutofillManager afm = mAfm.get();
             if (afm != null) {
diff --git a/core/java/android/view/autofill/AutofillRequestCallback.java b/core/java/android/view/autofill/AutofillRequestCallback.java
new file mode 100644
index 0000000..e632a58
--- /dev/null
+++ b/core/java/android/view/autofill/AutofillRequestCallback.java
@@ -0,0 +1,72 @@
+/*
+ * 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 android.view.autofill;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.CancellationSignal;
+import android.service.autofill.FillCallback;
+import android.view.inputmethod.InlineSuggestionsRequest;
+
+/**
+ * <p>This class is used to provide some input suggestions to the Autofill framework.
+ *
+ * <P>When the user is requested to input something, Autofill will try to query input suggestions
+ * for the user choosing. If the application want to provide some internal input suggestions,
+ * implements this callback and register via
+ * {@link AutofillManager#setAutofillRequestCallback(java.util.concurrent.Executor,
+ * AutofillRequestCallback)}. Autofill will callback the
+ * {@link #onFillRequest(InlineSuggestionsRequest, CancellationSignal, FillCallback)} to request
+ * input suggestions.
+ *
+ * <P>To make sure the callback to take effect, must register before the autofill session starts.
+ * If the autofill session is started, calls {@link AutofillManager#cancel()} to finish current
+ * session, and then the callback will be used at the next restarted session.
+ *
+ * <P>To create a {@link android.service.autofill.FillResponse}, application should fetch
+ * {@link AutofillId}s from its view structure. Below is an example:
+ * <pre class="prettyprint">
+ * AutofillId usernameId = findViewById(R.id.username).getAutofillId();
+ * AutofillId passwordId = findViewById(R.id.password).getAutofillId();
+ * </pre>
+ * To learn more about creating a {@link android.service.autofill.FillResponse}, read
+ * <a href="/guide/topics/text/autofill-services#fill">Fill out client views</a>.
+ *
+ * <P>To fallback to the default {@link android.service.autofill.AutofillService}, just respond
+ * a null of the {@link android.service.autofill.FillResponse}. And then Autofill will do a fill
+ * request with the default {@link android.service.autofill.AutofillService}. Or clear the callback
+ * from {@link AutofillManager} via {@link AutofillManager#clearAutofillRequestCallback()}. If the
+ * client would like to keep no suggestions for the field, respond with an empty
+ * {@link android.service.autofill.FillResponse} which has no dataset.
+ *
+ * <P>IMPORTANT: This should not be used for displaying anything other than input suggestions, or
+ * the keyboard may choose to block your app from the inline strip.
+ */
+public interface AutofillRequestCallback {
+    /**
+     * Called by the Android system to decide if a screen can be autofilled by the callback.
+     *
+     * @param inlineSuggestionsRequest the {@link InlineSuggestionsRequest request} to handle if
+     *     currently inline suggestions are supported and can be displayed.
+     * @param cancellationSignal signal for observing cancellation requests. The system will use
+     *     this to notify you that the fill result is no longer needed and you should stop
+     *     handling this fill request in order to save resources.
+     * @param callback object used to notify the result of the request.
+     */
+    void onFillRequest(@Nullable InlineSuggestionsRequest inlineSuggestionsRequest,
+            @NonNull CancellationSignal cancellationSignal, @NonNull FillCallback callback);
+}
diff --git a/core/java/android/view/autofill/IAutoFillManagerClient.aidl b/core/java/android/view/autofill/IAutoFillManagerClient.aidl
index 917a974..6e13097 100644
--- a/core/java/android/view/autofill/IAutoFillManagerClient.aidl
+++ b/core/java/android/view/autofill/IAutoFillManagerClient.aidl
@@ -24,9 +24,11 @@
 import android.content.IntentSender;
 import android.graphics.Rect;
 import android.os.IBinder;
+import android.service.autofill.IFillCallback;
 import android.view.autofill.AutofillId;
 import android.view.autofill.AutofillValue;
 import android.view.autofill.IAutofillWindowPresenter;
+import android.view.inputmethod.InlineSuggestionsRequest;
 import android.view.KeyEvent;
 
 import com.android.internal.os.IResultReceiver;
@@ -147,6 +149,12 @@
    void requestShowSoftInput(in AutofillId id);
 
     /**
+     * Requests to determine if a screen can be autofilled by the client app.
+     */
+    void requestFillFromClient(int id, in InlineSuggestionsRequest request,
+            in IFillCallback callback);
+
+    /**
      * Notifies autofill ids that require to show the fill dialog.
      */
     void notifyFillDialogTriggerIds(in List<AutofillId> ids);
diff --git a/core/java/android/view/inputmethod/IInputMethodManagerGlobalInvoker.java b/core/java/android/view/inputmethod/IInputMethodManagerGlobalInvoker.java
index 467daa0..614102b 100644
--- a/core/java/android/view/inputmethod/IInputMethodManagerGlobalInvoker.java
+++ b/core/java/android/view/inputmethod/IInputMethodManagerGlobalInvoker.java
@@ -453,20 +453,6 @@
     }
 
     @AnyThread
-    static void reportVirtualDisplayGeometryAsync(@NonNull IInputMethodClient client,
-            int childDisplayId, @Nullable float[] matrixValues) {
-        final IInputMethodManager service = getService();
-        if (service == null) {
-            return;
-        }
-        try {
-            service.reportVirtualDisplayGeometryAsync(client, childDisplayId, matrixValues);
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
-    }
-
-    @AnyThread
     static void reportPerceptibleAsync(@NonNull IBinder windowToken, boolean perceptible) {
         final IInputMethodManager service = getService();
         if (service == null) {
diff --git a/core/java/android/view/inputmethod/InlineSuggestionsRequest.java b/core/java/android/view/inputmethod/InlineSuggestionsRequest.java
index 581feca..70279cc 100644
--- a/core/java/android/view/inputmethod/InlineSuggestionsRequest.java
+++ b/core/java/android/view/inputmethod/InlineSuggestionsRequest.java
@@ -18,7 +18,6 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.annotation.TestApi;
 import android.app.ActivityThread;
 import android.app.compat.CompatChanges;
 import android.compat.annotation.ChangeId;
@@ -112,6 +111,22 @@
     private @Nullable InlinePresentationSpec mInlineTooltipPresentationSpec;
 
     /**
+     * Whether the IME supports inline suggestions from the default Autofill service that
+     * provides the input view.
+     *
+     * Note: The default value is {@code true}.
+     */
+    private boolean mServiceSupported;
+
+    /**
+     * Whether the IME supports inline suggestions from the application that provides the
+     * input view.
+     *
+     * Note: The default value is {@code true}.
+     */
+    private boolean mClientSupported;
+
+    /**
      * @hide
      * @see {@link #mHostInputToken}.
      */
@@ -205,9 +220,15 @@
         return Bundle.EMPTY;
     }
 
-    /**
-     * @hide
-     */
+    private static boolean defaultServiceSupported() {
+        return true;
+    }
+
+    private static boolean defaultClientSupported() {
+        return true;
+    }
+
+    /** @hide */
     abstract static class BaseBuilder {
         abstract Builder setInlinePresentationSpecs(
                 @NonNull List<android.widget.inline.InlinePresentationSpec> specs);
@@ -219,14 +240,25 @@
         abstract Builder setHostDisplayId(int value);
     }
 
+    /** @hide */
+    public boolean isServiceSupported() {
+        return mServiceSupported;
+    }
 
-    // Code below generated by codegen v1.0.23.
+    /** @hide */
+    public boolean isClientSupported() {
+        return mClientSupported;
+    }
+
+
+
+    // Code below generated by codegen v1.0.22.
     //
     // DO NOT MODIFY!
     // CHECKSTYLE:OFF Generated code
     //
     // To regenerate run:
-    // $ codegen $ANDROID_BUILD_TOP/./frameworks/base/core/java/android/view/inputmethod/InlineSuggestionsRequest.java
+    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/view/inputmethod/InlineSuggestionsRequest.java
     //
     // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
     //   Settings > Editor > Code Style > Formatter Control
@@ -242,7 +274,9 @@
             @NonNull Bundle extras,
             @Nullable IBinder hostInputToken,
             int hostDisplayId,
-            @Nullable InlinePresentationSpec inlineTooltipPresentationSpec) {
+            @Nullable InlinePresentationSpec inlineTooltipPresentationSpec,
+            boolean serviceSupported,
+            boolean clientSupported) {
         this.mMaxSuggestionCount = maxSuggestionCount;
         this.mInlinePresentationSpecs = inlinePresentationSpecs;
         com.android.internal.util.AnnotationValidations.validate(
@@ -259,6 +293,8 @@
         this.mHostInputToken = hostInputToken;
         this.mHostDisplayId = hostDisplayId;
         this.mInlineTooltipPresentationSpec = inlineTooltipPresentationSpec;
+        this.mServiceSupported = serviceSupported;
+        this.mClientSupported = clientSupported;
 
         onConstructed();
     }
@@ -342,7 +378,9 @@
     }
 
     /**
-     * Specifies the UI specification for the inline suggestion tooltip in the response.
+     * The {@link InlinePresentationSpec} for the inline suggestion tooltip in the response.
+     *
+     * @see android.service.autofill.InlinePresentation#createTooltipPresentation(Slice, InlinePresentationSpec)
      */
     @DataClass.Generated.Member
     public @Nullable InlinePresentationSpec getInlineTooltipPresentationSpec() {
@@ -363,7 +401,9 @@
                 "extras = " + mExtras + ", " +
                 "hostInputToken = " + mHostInputToken + ", " +
                 "hostDisplayId = " + mHostDisplayId + ", " +
-                "inlineTooltipPresentationSpec = " + mInlineTooltipPresentationSpec +
+                "inlineTooltipPresentationSpec = " + mInlineTooltipPresentationSpec + ", " +
+                "serviceSupported = " + mServiceSupported + ", " +
+                "clientSupported = " + mClientSupported +
         " }";
     }
 
@@ -387,7 +427,9 @@
                 && extrasEquals(that.mExtras)
                 && java.util.Objects.equals(mHostInputToken, that.mHostInputToken)
                 && mHostDisplayId == that.mHostDisplayId
-                && java.util.Objects.equals(mInlineTooltipPresentationSpec, that.mInlineTooltipPresentationSpec);
+                && java.util.Objects.equals(mInlineTooltipPresentationSpec, that.mInlineTooltipPresentationSpec)
+                && mServiceSupported == that.mServiceSupported
+                && mClientSupported == that.mClientSupported;
     }
 
     @Override
@@ -405,6 +447,8 @@
         _hash = 31 * _hash + java.util.Objects.hashCode(mHostInputToken);
         _hash = 31 * _hash + mHostDisplayId;
         _hash = 31 * _hash + java.util.Objects.hashCode(mInlineTooltipPresentationSpec);
+        _hash = 31 * _hash + Boolean.hashCode(mServiceSupported);
+        _hash = 31 * _hash + Boolean.hashCode(mClientSupported);
         return _hash;
     }
 
@@ -415,6 +459,8 @@
         // void parcelFieldName(Parcel dest, int flags) { ... }
 
         int flg = 0;
+        if (mServiceSupported) flg |= 0x100;
+        if (mClientSupported) flg |= 0x200;
         if (mHostInputToken != null) flg |= 0x20;
         if (mInlineTooltipPresentationSpec != null) flg |= 0x80;
         dest.writeInt(flg);
@@ -440,9 +486,11 @@
         // static FieldType unparcelFieldName(Parcel in) { ... }
 
         int flg = in.readInt();
+        boolean serviceSupported = (flg & 0x100) != 0;
+        boolean clientSupported = (flg & 0x200) != 0;
         int maxSuggestionCount = in.readInt();
         List<InlinePresentationSpec> inlinePresentationSpecs = new ArrayList<>();
-        in.readParcelableList(inlinePresentationSpecs, InlinePresentationSpec.class.getClassLoader());
+        in.readParcelableList(inlinePresentationSpecs, InlinePresentationSpec.class.getClassLoader(), android.widget.inline.InlinePresentationSpec.class);
         String hostPackageName = in.readString();
         LocaleList supportedLocales = (LocaleList) in.readTypedObject(LocaleList.CREATOR);
         Bundle extras = in.readBundle();
@@ -466,6 +514,8 @@
         this.mHostInputToken = hostInputToken;
         this.mHostDisplayId = hostDisplayId;
         this.mInlineTooltipPresentationSpec = inlineTooltipPresentationSpec;
+        this.mServiceSupported = serviceSupported;
+        this.mClientSupported = clientSupported;
 
         onConstructed();
     }
@@ -499,6 +549,8 @@
         private @Nullable IBinder mHostInputToken;
         private int mHostDisplayId;
         private @Nullable InlinePresentationSpec mInlineTooltipPresentationSpec;
+        private boolean mServiceSupported;
+        private boolean mClientSupported;
 
         private long mBuilderFieldsSet = 0L;
 
@@ -631,7 +683,9 @@
         }
 
         /**
-         * Specifies the UI specification for the inline suggestion tooltip in the response.
+         * The {@link InlinePresentationSpec} for the inline suggestion tooltip in the response.
+         *
+         * @see android.service.autofill.InlinePresentation#createTooltipPresentation(Slice, InlinePresentationSpec)s
          */
         @DataClass.Generated.Member
         public @NonNull Builder setInlineTooltipPresentationSpec(@NonNull InlinePresentationSpec value) {
@@ -641,10 +695,38 @@
             return this;
         }
 
+        /**
+         * Whether the IME supports inline suggestions from the default Autofill service that
+         * provides the input view.
+         *
+         * Note: The default value is {@code true}.
+         */
+        @DataClass.Generated.Member
+        public @NonNull Builder setServiceSupported(boolean value) {
+            checkNotUsed();
+            mBuilderFieldsSet |= 0x100;
+            mServiceSupported = value;
+            return this;
+        }
+
+        /**
+         * Whether the IME supports inline suggestions from the application that provides the
+         * input view.
+         *
+         * Note: The default value is {@code true}.
+         */
+        @DataClass.Generated.Member
+        public @NonNull Builder setClientSupported(boolean value) {
+            checkNotUsed();
+            mBuilderFieldsSet |= 0x200;
+            mClientSupported = value;
+            return this;
+        }
+
         /** Builds the instance. This builder should not be touched after calling this! */
         public @NonNull InlineSuggestionsRequest build() {
             checkNotUsed();
-            mBuilderFieldsSet |= 0x100; // Mark builder used
+            mBuilderFieldsSet |= 0x400; // Mark builder used
 
             if ((mBuilderFieldsSet & 0x1) == 0) {
                 mMaxSuggestionCount = defaultMaxSuggestionCount();
@@ -667,6 +749,12 @@
             if ((mBuilderFieldsSet & 0x80) == 0) {
                 mInlineTooltipPresentationSpec = defaultInlineTooltipPresentationSpec();
             }
+            if ((mBuilderFieldsSet & 0x100) == 0) {
+                mServiceSupported = defaultServiceSupported();
+            }
+            if ((mBuilderFieldsSet & 0x200) == 0) {
+                mClientSupported = defaultClientSupported();
+            }
             InlineSuggestionsRequest o = new InlineSuggestionsRequest(
                     mMaxSuggestionCount,
                     mInlinePresentationSpecs,
@@ -675,12 +763,14 @@
                     mExtras,
                     mHostInputToken,
                     mHostDisplayId,
-                    mInlineTooltipPresentationSpec);
+                    mInlineTooltipPresentationSpec,
+                    mServiceSupported,
+                    mClientSupported);
             return o;
         }
 
         private void checkNotUsed() {
-            if ((mBuilderFieldsSet & 0x100) != 0) {
+            if ((mBuilderFieldsSet & 0x400) != 0) {
                 throw new IllegalStateException(
                         "This Builder should not be reused. Use a new Builder instance instead");
             }
@@ -688,10 +778,10 @@
     }
 
     @DataClass.Generated(
-            time = 1682382296877L,
-            codegenVersion = "1.0.23",
+            time = 1615798784918L,
+            codegenVersion = "1.0.22",
             sourceFile = "frameworks/base/core/java/android/view/inputmethod/InlineSuggestionsRequest.java",
-            inputSignatures = "public static final  int SUGGESTION_COUNT_UNLIMITED\nprivate final  int mMaxSuggestionCount\nprivate final @android.annotation.NonNull java.util.List<android.widget.inline.InlinePresentationSpec> mInlinePresentationSpecs\nprivate @android.annotation.NonNull java.lang.String mHostPackageName\nprivate @android.annotation.NonNull android.os.LocaleList mSupportedLocales\nprivate @android.annotation.NonNull android.os.Bundle mExtras\nprivate @android.annotation.Nullable android.os.IBinder mHostInputToken\nprivate  int mHostDisplayId\nprivate @android.annotation.Nullable android.widget.inline.InlinePresentationSpec mInlineTooltipPresentationSpec\nprivate static final @android.compat.annotation.ChangeId @android.compat.annotation.EnabledSince long IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY\npublic  void setHostInputToken(android.os.IBinder)\nprivate  boolean extrasEquals(android.os.Bundle)\nprivate  void parcelHostInputToken(android.os.Parcel,int)\nprivate @android.annotation.Nullable android.os.IBinder unparcelHostInputToken(android.os.Parcel)\npublic  void setHostDisplayId(int)\nprivate  void onConstructed()\npublic  void filterContentTypes()\nprivate static  int defaultMaxSuggestionCount()\nprivate static  java.lang.String defaultHostPackageName()\nprivate static  android.widget.inline.InlinePresentationSpec defaultInlineTooltipPresentationSpec()\nprivate static  android.os.LocaleList defaultSupportedLocales()\nprivate static @android.annotation.Nullable android.os.IBinder defaultHostInputToken()\nprivate static @android.annotation.Nullable int defaultHostDisplayId()\nprivate static @android.annotation.NonNull android.os.Bundle defaultExtras()\nclass InlineSuggestionsRequest extends java.lang.Object implements [android.os.Parcelable]\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setInlinePresentationSpecs(java.util.List<android.widget.inline.InlinePresentationSpec>)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostPackageName(java.lang.String)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostInputToken(android.os.IBinder)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostDisplayId(int)\nclass BaseBuilder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setInlinePresentationSpecs(java.util.List<android.widget.inline.InlinePresentationSpec>)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostPackageName(java.lang.String)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostInputToken(android.os.IBinder)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostDisplayId(int)\nclass BaseBuilder extends java.lang.Object implements []")
+            inputSignatures = "public static final  int SUGGESTION_COUNT_UNLIMITED\nprivate final  int mMaxSuggestionCount\nprivate final @android.annotation.NonNull java.util.List<android.widget.inline.InlinePresentationSpec> mInlinePresentationSpecs\nprivate @android.annotation.NonNull java.lang.String mHostPackageName\nprivate @android.annotation.NonNull android.os.LocaleList mSupportedLocales\nprivate @android.annotation.NonNull android.os.Bundle mExtras\nprivate @android.annotation.Nullable android.os.IBinder mHostInputToken\nprivate  int mHostDisplayId\nprivate @android.annotation.Nullable android.widget.inline.InlinePresentationSpec mInlineTooltipPresentationSpec\nprivate  boolean mServiceSupported\nprivate  boolean mClientSupported\nprivate static final @android.compat.annotation.ChangeId @android.compat.annotation.EnabledSince long IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY\npublic  void setHostInputToken(android.os.IBinder)\nprivate  boolean extrasEquals(android.os.Bundle)\nprivate  void parcelHostInputToken(android.os.Parcel,int)\nprivate @android.annotation.Nullable android.os.IBinder unparcelHostInputToken(android.os.Parcel)\npublic  void setHostDisplayId(int)\nprivate  void onConstructed()\npublic  void filterContentTypes()\nprivate static  int defaultMaxSuggestionCount()\nprivate static  java.lang.String defaultHostPackageName()\nprivate static  android.widget.inline.InlinePresentationSpec defaultInlineTooltipPresentationSpec()\nprivate static  android.os.LocaleList defaultSupportedLocales()\nprivate static @android.annotation.Nullable android.os.IBinder defaultHostInputToken()\nprivate static @android.annotation.Nullable int defaultHostDisplayId()\nprivate static @android.annotation.NonNull android.os.Bundle defaultExtras()\nprivate static  boolean defaultServiceSupported()\nprivate static  boolean defaultClientSupported()\npublic  boolean isServiceSupported()\npublic  boolean isClientSupported()\nclass InlineSuggestionsRequest extends java.lang.Object implements [android.os.Parcelable]\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setInlinePresentationSpecs(java.util.List<android.widget.inline.InlinePresentationSpec>)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostPackageName(java.lang.String)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostInputToken(android.os.IBinder)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostDisplayId(int)\nclass BaseBuilder extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true, genBuilder=true)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setInlinePresentationSpecs(java.util.List<android.widget.inline.InlinePresentationSpec>)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostPackageName(java.lang.String)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostInputToken(android.os.IBinder)\nabstract  android.view.inputmethod.InlineSuggestionsRequest.Builder setHostDisplayId(int)\nclass BaseBuilder extends java.lang.Object implements []")
     @Deprecated
     private void __metadata() {}
 
diff --git a/core/java/android/view/inputmethod/InputMethod.java b/core/java/android/view/inputmethod/InputMethod.java
index 9340f46..5b4efd8 100644
--- a/core/java/android/view/inputmethod/InputMethod.java
+++ b/core/java/android/view/inputmethod/InputMethod.java
@@ -293,7 +293,11 @@
      * Flag for {@link #showSoftInput}: this show has been forced to
      * happen by the user.  If set, the input method should remain visible
      * until deliberated dismissed by the user in its UI.
+     *
+     * @deprecated {@link InputMethodManager#SHOW_FORCED} is deprecated and
+     * should no longer be used by apps. IMEs likewise should no longer react to this flag.
      */
+    @Deprecated
     public static final int SHOW_FORCED = 0x00002;
 
     /**
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index 31abac8..c877873 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -60,7 +60,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
-import android.graphics.Matrix;
 import android.graphics.Rect;
 import android.hardware.display.DisplayManager;
 import android.inputmethodservice.InputMethodService;
@@ -572,18 +571,6 @@
     @GuardedBy("mH")
     private CursorAnchorInfo mCursorAnchorInfo = null;
 
-    /**
-     * A special {@link Matrix} that can be provided by the system when this instance is running
-     * inside a virtual display.
-     *
-     * <p>If this is non-{@code null}, {@link #updateCursorAnchorInfo(View, CursorAnchorInfo)}
-     * should be adjusted with this {@link Matrix}.</p>
-     *
-     * <p>{@code null} when not used.</p>
-     */
-    @GuardedBy("mH")
-    private Matrix mVirtualDisplayToScreenMatrix = null;
-
     // -----------------------------------------------------------
 
     /**
@@ -670,7 +657,6 @@
     private static final int MSG_BIND_ACCESSIBILITY_SERVICE = 11;
     private static final int MSG_UNBIND_ACCESSIBILITY_SERVICE = 12;
     private static final int MSG_SET_INTERACTIVE = 13;
-    private static final int MSG_UPDATE_VIRTUAL_DISPLAY_TO_SCREEN_MATRIX = 30;
     private static final int MSG_ON_SHOW_REQUESTED = 31;
 
     /**
@@ -1037,7 +1023,6 @@
                         mCurMethod = res.method; // for @UnsupportedAppUsage
                         mCurBindState = new BindState(res);
                         mCurId = res.id; // for @UnsupportedAppUsage
-                        mVirtualDisplayToScreenMatrix = res.getVirtualDisplayToScreenMatrix();
                     }
                     startInputInner(StartInputReason.BOUND_TO_IMMS, null, 0, 0, 0);
                     return;
@@ -1245,43 +1230,6 @@
                     }
                     return;
                 }
-                case MSG_UPDATE_VIRTUAL_DISPLAY_TO_SCREEN_MATRIX: {
-                    final float[] matrixValues = (float[]) msg.obj;
-                    final int bindSequence = msg.arg1;
-                    synchronized (mH) {
-                        if (getBindSequenceLocked() != bindSequence) {
-                            return;
-                        }
-                        if (matrixValues == null || mVirtualDisplayToScreenMatrix == null) {
-                            // Either InputBoundResult#mVirtualDisplayToScreenMatrixValues is null
-                            // OR this app is unbound from the parent VirtualDisplay. In this case,
-                            // calling updateCursorAnchorInfo() isn't safe. Only clear the matrix.
-                            mVirtualDisplayToScreenMatrix = null;
-                            return;
-                        }
-
-                        final float[] currentValues = new float[9];
-                        mVirtualDisplayToScreenMatrix.getValues(currentValues);
-                        if (Arrays.equals(currentValues, matrixValues)) {
-                            return;
-                        }
-                        mVirtualDisplayToScreenMatrix.setValues(matrixValues);
-
-                        if (mCursorAnchorInfo == null || !isImeSessionAvailableLocked()
-                                || mServedInputConnection == null) {
-                            return;
-                        }
-                        if (!mServedInputConnection.isCursorAnchorInfoMonitoring()) {
-                            return;
-                        }
-                        // Since the host VirtualDisplay is moved, we need to issue
-                        // IMS#updateCursorAnchorInfo() again.
-                        mCurBindState.mImeSession.updateCursorAnchorInfo(
-                                CursorAnchorInfo.createForAdditionalParentMatrix(
-                                        mCursorAnchorInfo, mVirtualDisplayToScreenMatrix));
-                    }
-                    return;
-                }
                 case MSG_ON_SHOW_REQUESTED: {
                     synchronized (mH) {
                         if (mImeInsetsConsumer != null) {
@@ -1360,12 +1308,6 @@
         }
 
         @Override
-        public void updateVirtualDisplayToScreenMatrix(int bindSequence, float[] matrixValues) {
-            mH.obtainMessage(MSG_UPDATE_VIRTUAL_DISPLAY_TO_SCREEN_MATRIX, bindSequence, 0,
-                    matrixValues).sendToTarget();
-        }
-
-        @Override
         public void setImeTraceEnabled(boolean enabled) {
             ImeTracing.getInstance().setEnabled(enabled);
         }
@@ -1574,7 +1516,7 @@
      * @see #startStylusHandwriting(View)
      */
     public boolean isStylusHandwritingAvailable() {
-        return isStylusHandwritingAvailableAsUser(UserHandle.myUserId());
+        return isStylusHandwritingAvailableAsUser(UserHandle.of(UserHandle.myUserId()));
     }
 
     /**
@@ -1585,14 +1527,17 @@
      * called and Stylus touch should continue as normal touch input.</p>
      *
      * <p>{@link Manifest.permission#INTERACT_ACROSS_USERS_FULL} is required when and only when
-     * {@code userId} is different from the user id of the current process.</p>
+     * {@code user} is different from the user of the current process.</p>
      *
      * @see #startStylusHandwriting(View)
-     * @param userId user ID to query.
+     * @param user UserHandle to query.
      * @hide
      */
+    @NonNull
     @RequiresPermission(value = Manifest.permission.INTERACT_ACROSS_USERS_FULL, conditional = true)
-    public boolean isStylusHandwritingAvailableAsUser(@UserIdInt int userId) {
+    @TestApi
+    @SuppressLint("UserHandle")
+    public boolean isStylusHandwritingAvailableAsUser(@NonNull UserHandle user) {
         final Context fallbackContext = ActivityThread.currentApplication();
         if (fallbackContext == null) {
             return false;
@@ -1609,7 +1554,7 @@
                     }
                 };
             }
-            isAvailable = mStylusHandwritingAvailableCache.query(userId);
+            isAvailable = mStylusHandwritingAvailableCache.query(user.getIdentifier());
         }
         return isAvailable;
     }
@@ -1701,16 +1646,19 @@
      * Returns the list of enabled input methods for the specified user.
      *
      * <p>{@link Manifest.permission#INTERACT_ACROSS_USERS_FULL} is required when and only when
-     * {@code userId} is different from the user id of the current process.</p>
+     * {@code user} is different from the user of the current process.</p>
      *
-     * @param userId user ID to query
+     * @param user UserHandle to query
      * @return {@link List} of {@link InputMethodInfo}.
-     * @see #getEnabledInputMethodSubtypeListAsUser(String, boolean, int)
+     * @see #getEnabledInputMethodSubtypeListAsUser(String, boolean, UserHandle)
      * @hide
      */
+    @NonNull
     @RequiresPermission(value = Manifest.permission.INTERACT_ACROSS_USERS_FULL, conditional = true)
-    public List<InputMethodInfo> getEnabledInputMethodListAsUser(@UserIdInt int userId) {
-        return IInputMethodManagerGlobalInvoker.getEnabledInputMethodList(userId);
+    @TestApi
+    @SuppressLint("UserHandle")
+    public List<InputMethodInfo> getEnabledInputMethodListAsUser(@NonNull UserHandle user) {
+        return IInputMethodManagerGlobalInvoker.getEnabledInputMethodList(user.getIdentifier());
     }
 
     /**
@@ -1739,7 +1687,7 @@
      *
      * @param imeId IME ID to be queried about.
      * @param allowsImplicitlyEnabledSubtypes {@code true} to include implicitly enabled subtypes.
-     * @param userId user ID to be queried about.
+     * @param user UserHandle to be queried about.
      *               {@link Manifest.permission#INTERACT_ACROSS_USERS_FULL} is required if this is
      *               different from the calling process user ID.
      * @return {@link List} of {@link InputMethodSubtype}.
@@ -1748,10 +1696,14 @@
      */
     @NonNull
     @RequiresPermission(value = Manifest.permission.INTERACT_ACROSS_USERS_FULL, conditional = true)
+    @TestApi
+    @SuppressLint("UserHandle")
     public List<InputMethodSubtype> getEnabledInputMethodSubtypeListAsUser(
-            @NonNull String imeId, boolean allowsImplicitlyEnabledSubtypes, @UserIdInt int userId) {
+            @NonNull String imeId, boolean allowsImplicitlyEnabledSubtypes,
+            @NonNull UserHandle user) {
         return IInputMethodManagerGlobalInvoker.getEnabledInputMethodSubtypeList(
-                Objects.requireNonNull(imeId), allowsImplicitlyEnabledSubtypes, userId);
+                Objects.requireNonNull(imeId), allowsImplicitlyEnabledSubtypes,
+                user.getIdentifier());
     }
 
     /**
@@ -1958,7 +1910,6 @@
     @UnsupportedAppUsage
     @GuardedBy("mH")
     void finishInputLocked() {
-        mVirtualDisplayToScreenMatrix = null;
         View clearedView = null;
         mNextServedView = null;
         if (mServedView != null) {
@@ -2059,7 +2010,7 @@
      *
      * @deprecated Use {@link #showSoftInput} without this flag instead. Using this flag can lead
      * to the soft input remaining visible even when the calling application is closed. The
-     * use of this flag can make the soft input remains visible globally. Starting in
+     * use of this flag can make the soft input remain visible globally. Starting in
      * {@link Build.VERSION_CODES#TIRAMISU Android T}, this flag only has an effect while the
      * caller is currently focused.
      */
@@ -2839,7 +2790,6 @@
                         + InputMethodDebug.startInputFlagsToString(startInputFlags));
                 return false;
             }
-            mVirtualDisplayToScreenMatrix = res.getVirtualDisplayToScreenMatrix();
             if (res.id != null) {
                 updateInputChannelLocked(res.channel);
                 mCurMethod = res.method; // for @UnsupportedAppUsage
@@ -3400,13 +3350,7 @@
                 return;
             }
             if (DEBUG) Log.v(TAG, "updateCursorAnchorInfo: " + cursorAnchorInfo);
-            if (mVirtualDisplayToScreenMatrix != null) {
-                mCurBindState.mImeSession.updateCursorAnchorInfo(
-                        CursorAnchorInfo.createForAdditionalParentMatrix(
-                                cursorAnchorInfo, mVirtualDisplayToScreenMatrix));
-            } else {
-                mCurBindState.mImeSession.updateCursorAnchorInfo(cursorAnchorInfo);
-            }
+            mCurBindState.mImeSession.updateCursorAnchorInfo(cursorAnchorInfo);
             mCursorAnchorInfo = cursorAnchorInfo;
         }
     }
@@ -4020,40 +3964,6 @@
     }
 
     /**
-     * An internal API for {@link android.hardware.display.VirtualDisplay} to report where its
-     * embedded virtual display is placed.
-     *
-     * @param childDisplayId Display ID of the embedded virtual display.
-     * @param matrix         {@link Matrix} to convert virtual display screen coordinates to
-     *                       the host screen coordinates. {@code null} to clear the relationship.
-     * @hide
-     */
-    public void reportVirtualDisplayGeometry(int childDisplayId, @Nullable Matrix matrix) {
-        final float[] matrixValues;
-        if (matrix == null) {
-            matrixValues = null;
-        } else {
-            matrixValues = new float[9];
-            matrix.getValues(matrixValues);
-        }
-        IInputMethodManagerGlobalInvoker.reportVirtualDisplayGeometryAsync(mClient, childDisplayId,
-                matrixValues);
-    }
-
-    /**
-     * An internal API that returns if the current display has a transformation matrix to apply.
-     *
-     * @return {@code true} if {@link Matrix} to convert virtual display screen coordinates to
-     * the host screen coordinates is set.
-     * @hide
-     */
-    public boolean hasVirtualDisplayToScreenMatrix() {
-        synchronized (mH) {
-            return mVirtualDisplayToScreenMatrix != null;
-        }
-    }
-
-    /**
      * Force switch to the last used input method and subtype. If the last input method didn't have
      * any subtypes, the framework will simply switch to the last input method with no subtype
      * specified.
diff --git a/core/java/android/view/inputmethod/RemoteInputConnectionImpl.java b/core/java/android/view/inputmethod/RemoteInputConnectionImpl.java
index e9d7b9b..d588c48 100644
--- a/core/java/android/view/inputmethod/RemoteInputConnectionImpl.java
+++ b/core/java/android/view/inputmethod/RemoteInputConnectionImpl.java
@@ -43,7 +43,6 @@
 import android.view.View;
 import android.view.ViewRootImpl;
 
-import com.android.internal.annotations.GuardedBy;
 import com.android.internal.infra.AndroidFuture;
 import com.android.internal.inputmethod.IRemoteAccessibilityInputConnection;
 import com.android.internal.inputmethod.IRemoteInputConnection;
@@ -54,6 +53,7 @@
 import java.lang.ref.WeakReference;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Function;
 import java.util.function.Supplier;
 
@@ -158,18 +158,13 @@
         boolean cancellable();
     }
 
-    @GuardedBy("mLock")
-    @Nullable
-    private InputConnection mInputConnection;
+    @NonNull
+    private final AtomicReference<InputConnection> mInputConnectionRef;
 
     @NonNull
     private final Looper mLooper;
     private final Handler mH;
 
-    private final Object mLock = new Object();
-    @GuardedBy("mLock")
-    private boolean mFinished = false;
-
     private final InputMethodManager mParentInputMethodManager;
     private final WeakReference<View> mServedView;
 
@@ -185,7 +180,7 @@
     RemoteInputConnectionImpl(@NonNull Looper looper,
             @NonNull InputConnection inputConnection,
             @NonNull InputMethodManager inputMethodManager, @Nullable View servedView) {
-        mInputConnection = inputConnection;
+        mInputConnectionRef = new AtomicReference<>(inputConnection);
         mLooper = looper;
         mH = new Handler(mLooper);
         mParentInputMethodManager = inputMethodManager;
@@ -197,9 +192,7 @@
      */
     @Nullable
     public InputConnection getInputConnection() {
-        synchronized (mLock) {
-            return mInputConnection;
-        }
+        return mInputConnectionRef.get();
     }
 
     /**
@@ -215,9 +208,7 @@
      * {@link InputConnection#closeConnection()} as a result of {@link #deactivate()}.
      */
     private boolean isFinished() {
-        synchronized (mLock) {
-            return mFinished;
-        }
+        return mInputConnectionRef.get() == null;
     }
 
     private boolean isActive() {
@@ -386,10 +377,7 @@
                     // TODO(b/199934664): See if we can remove this by providing a default impl.
                 }
             } finally {
-                synchronized (mLock) {
-                    mInputConnection = null;
-                    mFinished = true;
-                }
+                mInputConnectionRef.set(null);
                 Trace.traceEnd(Trace.TRACE_TAG_INPUT);
             }
 
@@ -441,7 +429,6 @@
     public String toString() {
         return "RemoteInputConnectionImpl{"
                 + "connection=" + getInputConnection()
-                + " finished=" + isFinished()
                 + " mParentInputMethodManager.isActive()=" + mParentInputMethodManager.isActive()
                 + " mServedView=" + mServedView.get()
                 + "}";
@@ -455,16 +442,14 @@
      *                {@link DumpableInputConnection#dumpDebug(ProtoOutputStream, long)}.
      */
     public void dumpDebug(ProtoOutputStream proto, long fieldId) {
-        synchronized (mLock) {
-            // Check that the call is initiated in the target thread of the current InputConnection
-            // {@link InputConnection#getHandler} since the messages to IInputConnectionWrapper are
-            // executed on this thread. Otherwise the messages are dispatched to the correct thread
-            // in IInputConnectionWrapper, but this is not wanted while dumpng, for performance
-            // reasons.
-            if ((mInputConnection instanceof DumpableInputConnection)
-                    && mLooper.isCurrentThread()) {
-                ((DumpableInputConnection) mInputConnection).dumpDebug(proto, fieldId);
-            }
+        final InputConnection ic = mInputConnectionRef.get();
+        // Check that the call is initiated in the target thread of the current InputConnection
+        // {@link InputConnection#getHandler} since the messages to IInputConnectionWrapper are
+        // executed on this thread. Otherwise the messages are dispatched to the correct thread
+        // in IInputConnectionWrapper, but this is not wanted while dumping, for performance
+        // reasons.
+        if ((ic instanceof DumpableInputConnection) && mLooper.isCurrentThread()) {
+            ((DumpableInputConnection) ic).dumpDebug(proto, fieldId);
         }
     }
 
@@ -824,11 +809,7 @@
                 return;  // cancelled
             }
             InputConnection ic = getInputConnection();
-            // Note we do NOT check isActive() here, because this is safe
-            // for an IME to call at any time, and we need to allow it
-            // through to clean up our state after the IME has switched to
-            // another client.
-            if (ic == null) {
+            if (ic == null || !isActive()) {
                 Log.w(TAG, "finishComposingTextFromImm on inactive InputConnection");
                 return;
             }
@@ -852,11 +833,7 @@
                 return;  // cancelled
             }
             InputConnection ic = getInputConnection();
-            // Note we do NOT check isActive() here, because this is safe
-            // for an IME to call at any time, and we need to allow it
-            // through to clean up our state after the IME has switched to
-            // another client.
-            if (ic == null) {
+            if (ic == null && !isActive()) {
                 Log.w(TAG, "finishComposingText on inactive InputConnection");
                 return;
             }
@@ -1122,8 +1099,7 @@
             return false;
         }
         if (mParentInputMethodManager.mRequestCursorUpdateDisplayIdCheck.get()
-                && mParentInputMethodManager.getDisplayId() != imeDisplayId
-                && !mParentInputMethodManager.hasVirtualDisplayToScreenMatrix()) {
+                && mParentInputMethodManager.getDisplayId() != imeDisplayId) {
             // requestCursorUpdates() is not currently supported across displays.
             return false;
         }
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 6ad1960..03364b6 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -916,6 +916,8 @@
         }
     }
 
+    private DifferentialMotionFlingHelper mDifferentialMotionFlingHelper;
+
     public AbsListView(Context context) {
         super(context);
         setupDeviceConfigProperties();
@@ -4488,17 +4490,22 @@
     public boolean onGenericMotionEvent(MotionEvent event) {
         switch (event.getAction()) {
             case MotionEvent.ACTION_SCROLL:
-                final float axisValue;
+                final int axis;
                 if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {
-                    axisValue = event.getAxisValue(MotionEvent.AXIS_VSCROLL);
+                    axis = MotionEvent.AXIS_VSCROLL;
                 } else if (event.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER)) {
-                    axisValue = event.getAxisValue(MotionEvent.AXIS_SCROLL);
+                    axis = MotionEvent.AXIS_SCROLL;
                 } else {
-                    axisValue = 0;
+                    axis = -1;
                 }
 
+                final float axisValue = (axis == -1) ? 0 : event.getAxisValue(axis);
                 final int delta = Math.round(axisValue * mVerticalScrollFactor);
                 if (delta != 0) {
+                    // Tracks whether or not we should attempt fling for this event.
+                    // Fling should not be attempted if the view is already at the limit of scroll,
+                    // since it conflicts with EdgeEffect.
+                    boolean shouldAttemptFling = true;
                     // If we're moving down, we want the top item. If we're moving up, bottom item.
                     final int motionIndex = delta > 0 ? 0 : getChildCount() - 1;
 
@@ -4511,6 +4518,10 @@
                     final int overscrollMode = getOverScrollMode();
 
                     if (!trackMotionScroll(delta, delta)) {
+                        if (shouldAttemptFling) {
+                            initDifferentialFlingHelperIfNotExists();
+                            mDifferentialMotionFlingHelper.onMotionEvent(event, axis);
+                        }
                         return true;
                     } else if (!event.isFromSource(InputDevice.SOURCE_MOUSE) && motionView != null
                             && (overscrollMode == OVER_SCROLL_ALWAYS
@@ -4677,6 +4688,14 @@
         }
     }
 
+    private void initDifferentialFlingHelperIfNotExists() {
+        if (mDifferentialMotionFlingHelper == null) {
+            mDifferentialMotionFlingHelper =
+                    new DifferentialMotionFlingHelper(
+                            mContext, new DifferentialFlingTarget());
+        }
+    }
+
     private void recycleVelocityTracker() {
         if (mVelocityTracker != null) {
             mVelocityTracker.recycle();
@@ -8197,4 +8216,26 @@
             }
         }
     }
+
+    private class DifferentialFlingTarget
+            implements DifferentialMotionFlingHelper.DifferentialMotionFlingTarget {
+        @Override
+        public boolean startDifferentialMotionFling(float velocity) {
+            stopDifferentialMotionFling();
+            fling((int) velocity);
+            return true;
+        }
+
+        @Override
+        public void stopDifferentialMotionFling() {
+            if (mFlingRunnable != null) {
+                mFlingRunnable.endFling();
+            }
+        }
+
+        @Override
+        public float getScaledScrollFactor() {
+            return -mVerticalScrollFactor;
+        }
+    }
 }
diff --git a/core/java/android/widget/DifferentialMotionFlingHelper.java b/core/java/android/widget/DifferentialMotionFlingHelper.java
new file mode 100644
index 0000000..95d24ec
--- /dev/null
+++ b/core/java/android/widget/DifferentialMotionFlingHelper.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.widget;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.view.MotionEvent;
+import android.view.VelocityTracker;
+import android.view.ViewConfiguration;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+/**
+ * Helper for controlling differential motion flings.
+ *
+ * <p><b>Differential motion</b> here refers to motions that report change in position instead of
+ * absolution position. For instance, differential data points of 2, -1, 5 represent: there was
+ * a movement by "2" units, then by "-1" units, then by "5" units. Examples of motions reported
+ * differentially include motions from {@link MotionEvent#AXIS_SCROLL}.
+ *
+ * <p>The client should call {@link #onMotionEvent} when a differential motion event happens on
+ * the target View (that is, the View on which we want to fling), and this class processes the event
+ * to orchestrate fling.
+ *
+ * <p>Note that this helper class currently works to control fling only in one direction at a time.
+ * As such, it works independently of horizontal/vertical orientations. It requests its client to
+ * start/stop fling, and it's up to the client to choose the fling direction based on its specific
+ * internal configurations and/or preferences.
+ *
+ * @hide
+ */
+public class DifferentialMotionFlingHelper {
+    private final Context mContext;
+    private final DifferentialMotionFlingTarget mTarget;
+
+    private final FlingVelocityThresholdCalculator mVelocityThresholdCalculator;
+    private final DifferentialVelocityProvider mVelocityProvider;
+
+    @Nullable private VelocityTracker mVelocityTracker;
+
+    private float mLastFlingVelocity;
+
+    private int mLastProcessedAxis = -1;
+    private int mLastProcessedSource = -1;
+    private int mLastProcessedDeviceId = -1;
+
+    // Initialize min and max to +infinity and 0, to effectively disable fling at start.
+    private final int[] mFlingVelocityThresholds = new int[] {Integer.MAX_VALUE, 0};
+
+    /** Interface to calculate the fling velocity thresholds. Helps fake during testing. */
+    @VisibleForTesting
+    public interface FlingVelocityThresholdCalculator {
+        /**
+         * Calculates the fling velocity thresholds (in pixels/second) and puts them in a provided
+         * store.
+         *
+         * @param context the context associated with the View that may be flung.
+         * @param store an at-least size-2 int array. The method will overwrite positions 0 and 1
+         *             with the min and max fling velocities, respectively.
+         * @param event the event that may trigger fling.
+         * @param axis the axis being processed for the event.
+         */
+        void calculateFlingVelocityThresholds(
+                Context context, int[] store, MotionEvent event, int axis);
+    }
+
+    /**
+     * Interface to provide velocity. Helps fake during testing.
+     *
+     * <p>The client should call {@link #getCurrentVelocity(VelocityTracker, MotionEvent, int)} each
+     * time it wants to consider a {@link MotionEvent} towards the latest velocity, and the
+     * interface handles providing velocity that accounts for the latest and all past events.
+     */
+    @VisibleForTesting
+    public interface DifferentialVelocityProvider {
+        /**
+         * Returns the latest velocity.
+         *
+         * @param vt the {@link VelocityTracker} to be used to compute velocity.
+         * @param event the latest event to be considered in the velocity computations.
+         * @param axis the axis being processed for the event.
+         * @return the calculated, latest velocity.
+         */
+        float getCurrentVelocity(VelocityTracker vt, MotionEvent event, int axis);
+    }
+
+    /**
+     * Represents an entity that may be flung by a differential motion or an entity that initiates
+     * fling on a target View.
+     */
+    public interface DifferentialMotionFlingTarget {
+        /**
+         * Start flinging on the target View by a given velocity.
+         *
+         * @param velocity the fling velocity, in pixels/second.
+         * @return {@code true} if fling was successfully initiated, {@code false} otherwise.
+         */
+        boolean startDifferentialMotionFling(float velocity);
+
+        /** Stop any ongoing fling on the target View that is caused by a differential motion. */
+        void stopDifferentialMotionFling();
+
+        /**
+         * Returns the scaled scroll factor to be used for differential motions. This is the
+         * value that the raw {@link MotionEvent} values should be multiplied with to get pixels.
+         *
+         * <p>This usually is one of the values provided by {@link ViewConfiguration}. It is
+         * up to the client to choose and provide any value as per its internal configuration.
+         *
+         * @see ViewConfiguration#getScaledHorizontalScrollFactor()
+         * @see ViewConfiguration#getScaledVerticalScrollFactor()
+         */
+        float getScaledScrollFactor();
+    }
+
+    /** Constructs an instance for a given {@link DifferentialMotionFlingTarget}. */
+    public DifferentialMotionFlingHelper(
+            Context context,
+            DifferentialMotionFlingTarget target) {
+        this(context,
+                target,
+                DifferentialMotionFlingHelper::calculateFlingVelocityThresholds,
+                DifferentialMotionFlingHelper::getCurrentVelocity);
+    }
+
+    @VisibleForTesting
+    public DifferentialMotionFlingHelper(
+            Context context,
+            DifferentialMotionFlingTarget target,
+            FlingVelocityThresholdCalculator velocityThresholdCalculator,
+            DifferentialVelocityProvider velocityProvider) {
+        mContext = context;
+        mTarget = target;
+        mVelocityThresholdCalculator = velocityThresholdCalculator;
+        mVelocityProvider = velocityProvider;
+    }
+
+    /**
+     * Called to report when a differential motion happens on the View that's the target for fling.
+     *
+     * @param event the {@link MotionEvent} being reported.
+     * @param axis the axis being processed by the target View.
+     */
+    public void onMotionEvent(MotionEvent event, int axis) {
+        boolean flingParamsChanged = calculateFlingVelocityThresholds(event, axis);
+        if (mFlingVelocityThresholds[0] == Integer.MAX_VALUE) {
+            // Integer.MAX_VALUE means that the device does not support fling for the current
+            // configuration. Do not proceed any further.
+            recycleVelocityTracker();
+            return;
+        }
+
+        float scaledVelocity =
+                getCurrentVelocity(event, axis) * mTarget.getScaledScrollFactor();
+
+        float velocityDirection = Math.signum(scaledVelocity);
+        // Stop ongoing fling if there has been state changes affecting fling, or if the current
+        // velocity (if non-zero) is opposite of the velocity that last caused fling.
+        if (flingParamsChanged
+                || (velocityDirection != Math.signum(mLastFlingVelocity)
+                    && velocityDirection != 0)) {
+            mTarget.stopDifferentialMotionFling();
+        }
+
+        if (Math.abs(scaledVelocity) < mFlingVelocityThresholds[0]) {
+            return;
+        }
+
+        // Clamp the scaled velocity between [-max, max].
+        // e.g. if max=100, and vel=200
+        // vel = max(-100, min(200, 100)) = max(-100, 100) = 100
+        // e.g. if max=100, and vel=-200
+        // vel = max(-100, min(-200, 100)) = max(-100, -200) = -100
+        scaledVelocity =
+                Math.max(
+                        -mFlingVelocityThresholds[1],
+                        Math.min(scaledVelocity, mFlingVelocityThresholds[1]));
+
+        boolean flung = mTarget.startDifferentialMotionFling(scaledVelocity);
+        mLastFlingVelocity = flung ? scaledVelocity : 0;
+    }
+
+    /**
+     * Calculates fling velocity thresholds based on the provided event and axis, and returns {@code
+     * true} if there has been a change of any params that may affect fling velocity thresholds.
+     */
+    private boolean calculateFlingVelocityThresholds(MotionEvent event, int axis) {
+        int source = event.getSource();
+        int deviceId = event.getDeviceId();
+        if (mLastProcessedSource != source
+                || mLastProcessedDeviceId != deviceId
+                || mLastProcessedAxis != axis) {
+            mVelocityThresholdCalculator.calculateFlingVelocityThresholds(
+                    mContext, mFlingVelocityThresholds, event, axis);
+            // Save data about this processing so that we don't have to re-process fling thresholds
+            // for similar parameters.
+            mLastProcessedSource = source;
+            mLastProcessedDeviceId = deviceId;
+            mLastProcessedAxis = axis;
+            return true;
+        }
+        return false;
+    }
+
+    private static void calculateFlingVelocityThresholds(
+            Context context, int[] buffer, MotionEvent event, int axis) {
+        int source = event.getSource();
+        int deviceId = event.getDeviceId();
+
+        ViewConfiguration vc = ViewConfiguration.get(context);
+        buffer[0] = vc.getScaledMinimumFlingVelocity(deviceId, axis, source);
+        buffer[1] = vc.getScaledMaximumFlingVelocity(deviceId, axis, source);
+    }
+
+    private float getCurrentVelocity(MotionEvent event, int axis) {
+        if (mVelocityTracker == null) {
+            mVelocityTracker = VelocityTracker.obtain();
+        }
+
+        return mVelocityProvider.getCurrentVelocity(mVelocityTracker, event, axis);
+    }
+
+    private void recycleVelocityTracker() {
+        if (mVelocityTracker != null) {
+            mVelocityTracker.recycle();
+            mVelocityTracker = null;
+        }
+    }
+
+    private static float getCurrentVelocity(VelocityTracker vt, MotionEvent event, int axis) {
+        vt.addMovement(event);
+        vt.computeCurrentVelocity(1000);
+        return vt.getAxisVelocity(axis);
+    }
+}
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index f39122a..f99f138 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -6454,7 +6454,7 @@
     @VisibleForTesting
     public int getCurrentLineAdjustedForSlop(Layout layout, int prevLine, float y) {
         final int trueLine = mTextView.getLineAtCoordinate(y);
-        if (layout == null || prevLine > layout.getLineCount()
+        if (layout == null || prevLine >= layout.getLineCount()
                 || layout.getLineCount() <= 0 || prevLine < 0) {
             // Invalid parameters, just return whatever line is at y.
             return trueLine;
diff --git a/core/java/android/widget/ExpandableListView.java b/core/java/android/widget/ExpandableListView.java
index efe3fd4..a67d839 100644
--- a/core/java/android/widget/ExpandableListView.java
+++ b/core/java/android/widget/ExpandableListView.java
@@ -31,6 +31,7 @@
 import android.view.ContextMenu.ContextMenuInfo;
 import android.view.SoundEffectConstants;
 import android.view.View;
+import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.widget.ExpandableListConnector.PositionMetadata;
 
@@ -660,7 +661,11 @@
 
         // Internally handle the item click
         final int adjustedPosition = getFlatPositionForConnector(position);
-        return handleItemClick(v, adjustedPosition, id);
+        final boolean clicked = handleItemClick(v, adjustedPosition, id);
+        if (v != null) {
+            v.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
+        }
+        return clicked;
     }
 
     /**
@@ -1150,13 +1155,16 @@
     public void onInitializeAccessibilityNodeInfoForItem(
             View view, int position, AccessibilityNodeInfo info) {
         super.onInitializeAccessibilityNodeInfoForItem(view, position, info);
-
         final PositionMetadata metadata = mConnector.getUnflattenedPos(position);
         if (metadata.position.type == ExpandableListPosition.GROUP) {
-            if (isGroupExpanded(metadata.position.groupPos)) {
-                info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_COLLAPSE);
-            } else {
-                info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_EXPAND);
+            if (view != null && view.isEnabled()) {
+                info.setClickable(true);
+                info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_CLICK);
+                if (isGroupExpanded(metadata.position.groupPos)) {
+                    info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_COLLAPSE);
+                } else {
+                    info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_EXPAND);
+                }
             }
         }
 
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index 1d6778b..55b2251 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -1498,6 +1498,11 @@
      * @return The unconsumed delta after the EdgeEffects have had an opportunity to consume.
      */
     private int consumeFlingInStretch(int unconsumed) {
+        int scrollX = getScrollX();
+        if (scrollX < 0 || scrollX > getScrollRange()) {
+            // We've overscrolled, so don't stretch
+            return unconsumed;
+        }
         if (unconsumed > 0 && mEdgeGlowLeft != null && mEdgeGlowLeft.getDistance() != 0f) {
             int size = getWidth();
             float deltaDistance = -unconsumed * FLING_DESTRETCH_FACTOR / size;
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index fea3b78..7a96fd2 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -4804,7 +4804,10 @@
      * @param viewId The id of the {@link AdapterView}
      * @param intent The intent of the service which will be
      *            providing data to the RemoteViewsAdapter
+     * @deprecated use
+     * {@link #setRemoteAdapter(int, android.widget.RemoteViews.RemoteCollectionItems)} instead
      */
+    @Deprecated
     public void setRemoteAdapter(@IdRes int viewId, Intent intent) {
         if (isAdapterConversionEnabled()) {
             addAction(new SetRemoteCollectionItemListAdapterAction(viewId, intent));
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index cb5dbe6..d330ebf 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -204,6 +204,8 @@
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
     private StrictMode.Span mFlingStrictSpan = null;
 
+    private DifferentialMotionFlingHelper mDifferentialMotionFlingHelper;
+
     /**
      * Sentinel value for no current active pointer.
      * Used by {@link #mActivePointerId}.
@@ -594,6 +596,14 @@
         }
     }
 
+    private void initDifferentialFlingHelperIfNotExists() {
+        if (mDifferentialMotionFlingHelper == null) {
+            mDifferentialMotionFlingHelper =
+                    new DifferentialMotionFlingHelper(
+                            mContext, new DifferentialFlingTarget());
+        }
+    }
+
     private void recycleVelocityTracker() {
         if (mVelocityTracker != null) {
             mVelocityTracker.recycle();
@@ -942,17 +952,22 @@
     public boolean onGenericMotionEvent(MotionEvent event) {
         switch (event.getAction()) {
             case MotionEvent.ACTION_SCROLL:
-                final float axisValue;
+                final int axis;
                 if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {
-                    axisValue = event.getAxisValue(MotionEvent.AXIS_VSCROLL);
+                    axis = MotionEvent.AXIS_VSCROLL;
                 } else if (event.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER)) {
-                    axisValue = event.getAxisValue(MotionEvent.AXIS_SCROLL);
+                    axis = MotionEvent.AXIS_SCROLL;
                 } else {
-                    axisValue = 0;
+                    axis = -1;
                 }
 
+                final float axisValue = (axis == -1) ? 0 : event.getAxisValue(axis);
                 final int delta = Math.round(axisValue * mVerticalScrollFactor);
                 if (delta != 0) {
+                    // Tracks whether or not we should attempt fling for this event.
+                    // Fling should not be attempted if the view is already at the limit of scroll,
+                    // since it conflicts with EdgeEffect.
+                    boolean shouldAttemptFling = true;
                     final int range = getScrollRange();
                     int oldScrollY = mScrollY;
                     int newScrollY = oldScrollY - delta;
@@ -971,6 +986,7 @@
                             absorbed = true;
                         }
                         newScrollY = 0;
+                        shouldAttemptFling = false;
                     } else if (newScrollY > range) {
                         if (canOverscroll) {
                             mEdgeGlowBottom.onPullDistance(
@@ -980,9 +996,14 @@
                             absorbed = true;
                         }
                         newScrollY = range;
+                        shouldAttemptFling = false;
                     }
                     if (newScrollY != oldScrollY) {
                         super.scrollTo(mScrollX, newScrollY);
+                        if (shouldAttemptFling) {
+                            initDifferentialFlingHelperIfNotExists();
+                            mDifferentialMotionFlingHelper.onMotionEvent(event, axis);
+                        }
                         return true;
                     }
                     if (absorbed) {
@@ -1545,6 +1566,11 @@
      * @return The unconsumed delta after the EdgeEffects have had an opportunity to consume.
      */
     private int consumeFlingInStretch(int unconsumed) {
+        int scrollY = getScrollY();
+        if (scrollY < 0 || scrollY > getScrollRange()) {
+            // We've overscrolled, so don't stretch
+            return unconsumed;
+        }
         if (unconsumed > 0 && mEdgeGlowTop != null && mEdgeGlowTop.getDistance() != 0f) {
             int size = getHeight();
             float deltaDistance = -unconsumed * FLING_DESTRETCH_FACTOR / size;
@@ -2126,4 +2152,23 @@
         };
     }
 
+    private class DifferentialFlingTarget
+            implements DifferentialMotionFlingHelper.DifferentialMotionFlingTarget {
+        @Override
+        public boolean startDifferentialMotionFling(float velocity) {
+            stopDifferentialMotionFling();
+            fling((int) velocity);
+            return true;
+        }
+
+        @Override
+        public void stopDifferentialMotionFling() {
+            mScroller.abortAnimation();
+        }
+
+        @Override
+        public float getScaledScrollFactor() {
+            return -mVerticalScrollFactor;
+        }
+    }
 }
diff --git a/core/java/android/widget/TEST_MAPPING b/core/java/android/widget/TEST_MAPPING
index 49c4093..107cac2 100644
--- a/core/java/android/widget/TEST_MAPPING
+++ b/core/java/android/widget/TEST_MAPPING
@@ -10,10 +10,10 @@
       "file_patterns": ["Toast\\.java"]
     },
     {
-      "name": "CtsWindowManagerDeviceTestCases",
+      "name": "CtsWindowManagerDeviceWindow",
       "options": [
         {
-          "include-filter": "android.server.wm.ToastWindowTest"
+          "include-filter": "android.server.wm.window.ToastWindowTest"
         }
       ],
       "file_patterns": ["Toast\\.java"]
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index b74c879..7dbab96 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -5130,8 +5130,8 @@
         mBreakStrategy = params.getBreakStrategy();
         mHyphenationFrequency = params.getHyphenationFrequency();
         LineBreakConfig lineBreakConfig = params.getLineBreakConfig();
-        mLineBreakStyle = lineBreakConfig.getLineBreakStyle();
-        mLineBreakWordStyle = lineBreakConfig.getLineBreakWordStyle();
+        mLineBreakStyle = LineBreakConfig.getResolvedLineBreakStyle(lineBreakConfig);
+        mLineBreakWordStyle = LineBreakConfig.getResolvedLineBreakWordStyle(lineBreakConfig);
         if (mLayout != null) {
             nullLayouts();
             requestLayout();
@@ -10707,6 +10707,8 @@
                     .setBreakStrategy(mBreakStrategy)
                     .setHyphenationFrequency(mHyphenationFrequency)
                     .setJustificationMode(mJustificationMode)
+                    .setLineBreakConfig(LineBreakConfig.getLineBreakConfig(
+                            mLineBreakStyle, mLineBreakWordStyle))
                     .setEllipsize(getKeyListener() == null ? effectiveEllipsize : null)
                     .setEllipsizedWidth(ellipsisWidth);
             result = builder.build();
@@ -13200,9 +13202,8 @@
         if (mTextOperationUser == null) {
             return super.isStylusHandwritingAvailable();
         }
-        final int userId = mTextOperationUser.getIdentifier();
         final InputMethodManager imm = getInputMethodManager();
-        return imm.isStylusHandwritingAvailableAsUser(userId);
+        return imm.isStylusHandwritingAvailableAsUser(mTextOperationUser);
     }
 
     @Nullable
diff --git a/core/java/android/window/ScreenCapture.java b/core/java/android/window/ScreenCapture.java
index 0cc9c64..de0fe25 100644
--- a/core/java/android/window/ScreenCapture.java
+++ b/core/java/android/window/ScreenCapture.java
@@ -33,7 +33,7 @@
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
-import java.util.function.Consumer;
+import java.util.function.ObjIntConsumer;
 
 /**
  * Handles display and layer captures for the system.
@@ -43,13 +43,12 @@
 public class ScreenCapture {
     private static final String TAG = "ScreenCapture";
     private static final int SCREENSHOT_WAIT_TIME_S = 1;
-
     private static native int nativeCaptureDisplay(DisplayCaptureArgs captureArgs,
             long captureListener);
     private static native int nativeCaptureLayers(LayerCaptureArgs captureArgs,
             long captureListener);
     private static native long nativeCreateScreenCaptureListener(
-            Consumer<ScreenshotHardwareBuffer> consumer);
+            ObjIntConsumer<ScreenshotHardwareBuffer> consumer);
     private static native void nativeWriteListenerToParcel(long nativeObject, Parcel out);
     private static native long nativeReadListenerFromParcel(Parcel in);
     private static native long getNativeListenerFinalizer();
@@ -695,7 +694,7 @@
         /**
          * @param consumer The callback invoked when the screen capture is complete.
          */
-        public ScreenCaptureListener(Consumer<ScreenshotHardwareBuffer> consumer) {
+        public ScreenCaptureListener(ObjIntConsumer<ScreenshotHardwareBuffer> consumer) {
             mNativeObject = nativeCreateScreenCaptureListener(consumer);
             sRegistry.registerNativeAllocation(this, mNativeObject);
         }
@@ -748,8 +747,13 @@
     public static SynchronousScreenCaptureListener createSyncCaptureListener() {
         ScreenshotHardwareBuffer[] bufferRef = new ScreenshotHardwareBuffer[1];
         CountDownLatch latch = new CountDownLatch(1);
-        Consumer<ScreenshotHardwareBuffer> consumer = buffer -> {
-            bufferRef[0] = buffer;
+        ObjIntConsumer<ScreenshotHardwareBuffer> consumer = (buffer, status) -> {
+            if (status != 0) {
+                bufferRef[0] = null;
+                Log.e(TAG, "Failed to generate screen capture. Error code: " + status);
+            } else {
+                bufferRef[0] = buffer;
+            }
             latch.countDown();
         };
 
@@ -758,7 +762,7 @@
             // it references, the underlying JNI listener holds a weak reference to the consumer.
             // This property exists to ensure the consumer stays alive during the listener's
             // lifetime.
-            private Consumer<ScreenshotHardwareBuffer> mConsumer = consumer;
+            private ObjIntConsumer<ScreenshotHardwareBuffer> mConsumer = consumer;
 
             @Override
             public ScreenshotHardwareBuffer getBuffer() {
@@ -779,7 +783,7 @@
      * {@link #captureDisplay(DisplayCaptureArgs, ScreenCaptureListener)}
      */
     public abstract static class SynchronousScreenCaptureListener extends ScreenCaptureListener {
-        SynchronousScreenCaptureListener(Consumer<ScreenshotHardwareBuffer> consumer) {
+        SynchronousScreenCaptureListener(ObjIntConsumer<ScreenshotHardwareBuffer> consumer) {
             super(consumer);
         }
 
diff --git a/core/java/android/window/WindowContextController.java b/core/java/android/window/WindowContextController.java
index 4b9a957..c9ac245 100644
--- a/core/java/android/window/WindowContextController.java
+++ b/core/java/android/window/WindowContextController.java
@@ -86,6 +86,7 @@
      * @param token The token used to attach to a window manager node. It is usually from
      *              {@link Context#getWindowContextToken()}.
      */
+    @VisibleForTesting
     public WindowContextController(@NonNull WindowTokenClient token) {
         mToken = token;
     }
@@ -104,7 +105,8 @@
             throw new IllegalStateException("A Window Context can be only attached to "
                     + "a DisplayArea once.");
         }
-        mAttachedToDisplayArea = mToken.attachToDisplayArea(type, displayId, options)
+        mAttachedToDisplayArea = getWindowTokenClientController().attachToDisplayArea(
+                mToken, type, displayId, options)
                 ? AttachStatus.STATUS_ATTACHED : AttachStatus.STATUS_FAILED;
         if (mAttachedToDisplayArea == AttachStatus.STATUS_FAILED) {
             Log.w(TAG, "attachToDisplayArea fail, type:" + type + ", displayId:"
@@ -133,24 +135,33 @@
      * {@link #attachToDisplayArea(int, int, Bundle)}.
      *
      * @see WindowProviderService#attachToWindowToken(IBinder))
-     * @see IWindowManager#attachWindowContextToWindowToken(IBinder, IBinder)
+     * @see IWindowManager#attachWindowContextToWindowToken
      */
-    public void attachToWindowToken(IBinder windowToken) {
+    public void attachToWindowToken(@NonNull IBinder windowToken) {
         if (mAttachedToDisplayArea != AttachStatus.STATUS_ATTACHED) {
             throw new IllegalStateException("The Window Context should have been attached"
                     + " to a DisplayArea. AttachToDisplayArea:" + mAttachedToDisplayArea);
         }
-        mToken.attachToWindowToken(windowToken);
+        if (!getWindowTokenClientController().attachToWindowToken(mToken, windowToken)) {
+            Log.e(TAG, "attachToWindowToken fail");
+        }
     }
 
     /** Detaches the window context from the node it's currently associated with. */
     public void detachIfNeeded() {
         if (mAttachedToDisplayArea == AttachStatus.STATUS_ATTACHED) {
-            mToken.detachFromWindowContainerIfNeeded();
+            getWindowTokenClientController().detachIfNeeded(mToken);
             mAttachedToDisplayArea = AttachStatus.STATUS_DETACHED;
             if (DEBUG_ATTACH) {
                 Log.d(TAG, "Detach Window Context.");
             }
         }
     }
+
+    /** Gets the {@link WindowTokenClientController}. */
+    @VisibleForTesting
+    @NonNull
+    public WindowTokenClientController getWindowTokenClientController() {
+        return WindowTokenClientController.getInstance();
+    }
 }
diff --git a/core/java/android/window/WindowContextInfo.aidl b/core/java/android/window/WindowContextInfo.aidl
new file mode 100644
index 0000000..360431c
--- /dev/null
+++ b/core/java/android/window/WindowContextInfo.aidl
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.window;
+
+/** @hide */
+parcelable WindowContextInfo;
\ No newline at end of file
diff --git a/core/java/android/window/WindowContextInfo.java b/core/java/android/window/WindowContextInfo.java
new file mode 100644
index 0000000..3c21cd4
--- /dev/null
+++ b/core/java/android/window/WindowContextInfo.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.window;
+
+import static java.util.Objects.requireNonNull;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.res.Configuration;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Objects;
+
+/**
+ * Stores information about a particular window that a {@link WindowContext} is attached to.
+ * @hide
+ */
+public class WindowContextInfo implements Parcelable {
+
+    /**
+     * Configuration of the window.
+     */
+    @NonNull
+    private final Configuration mConfiguration;
+
+    /**
+     * The display id that the window is attached to.
+     */
+    private final int mDisplayId;
+
+    public WindowContextInfo(@NonNull Configuration configuration, int displayId) {
+        mConfiguration = requireNonNull(configuration);
+        mDisplayId = displayId;
+    }
+
+    @NonNull
+    public Configuration getConfiguration() {
+        return mConfiguration;
+    }
+
+    public int getDisplayId() {
+        return mDisplayId;
+    }
+
+    // Parcelable implementation
+
+    /** Writes to Parcel. */
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        dest.writeTypedObject(mConfiguration, flags);
+        dest.writeInt(mDisplayId);
+    }
+
+    /** Reads from Parcel. */
+    private WindowContextInfo(@NonNull Parcel in) {
+        mConfiguration = in.readTypedObject(Configuration.CREATOR);
+        mDisplayId = in.readInt();
+    }
+
+    public static final @NonNull Creator<WindowContextInfo> CREATOR = new Creator<>() {
+        public WindowContextInfo createFromParcel(Parcel in) {
+            return new WindowContextInfo(in);
+        }
+
+        public WindowContextInfo[] newArray(int size) {
+            return new WindowContextInfo[size];
+        }
+    };
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public boolean equals(@Nullable Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        final WindowContextInfo other = (WindowContextInfo) o;
+        return Objects.equals(mConfiguration, other.mConfiguration)
+                && mDisplayId == other.mDisplayId;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + Objects.hashCode(mConfiguration);
+        result = 31 * result + mDisplayId;
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "WindowContextInfo{config=" + mConfiguration
+                + ", displayId=" + mDisplayId
+                + "}";
+    }
+}
diff --git a/core/java/android/window/WindowInfosListenerForTest.java b/core/java/android/window/WindowInfosListenerForTest.java
index 7fc55a7..be88e53 100644
--- a/core/java/android/window/WindowInfosListenerForTest.java
+++ b/core/java/android/window/WindowInfosListenerForTest.java
@@ -20,6 +20,7 @@
 import android.annotation.NonNull;
 import android.annotation.RequiresPermission;
 import android.annotation.TestApi;
+import android.graphics.Matrix;
 import android.graphics.Rect;
 import android.os.IBinder;
 import android.os.InputConfig;
@@ -78,22 +79,31 @@
          */
         public final boolean isVisible;
 
+        /**
+         * Return the transform to get the bounds from display space into window space.
+         */
+        @NonNull
+        public final Matrix transform;
+
         WindowInfo(@NonNull IBinder windowToken, @NonNull String name, int displayId,
-                @NonNull Rect bounds, int inputConfig) {
+                @NonNull Rect bounds, int inputConfig, @NonNull Matrix transform) {
             this.windowToken = windowToken;
             this.name = name;
             this.displayId = displayId;
             this.bounds = bounds;
             this.isTrustedOverlay = (inputConfig & InputConfig.TRUSTED_OVERLAY) != 0;
             this.isVisible = (inputConfig & InputConfig.NOT_VISIBLE) == 0;
+            this.transform = transform;
         }
 
         @Override
         public String toString() {
-            return name + ", frame=" + bounds
+            return name + ", displayId=" + displayId
+                    + ", frame=" + bounds
                     + ", isVisible=" + isVisible
                     + ", isTrustedOverlay=" + isTrustedOverlay
-                    + ", token=" + windowToken;
+                    + ", token=" + windowToken
+                    + ", transform=" + transform;
         }
     }
 
@@ -154,7 +164,7 @@
             var bounds = new Rect(handle.frameLeft, handle.frameTop, handle.frameRight,
                     handle.frameBottom);
             windowInfos.add(new WindowInfo(handle.getWindowToken(), handle.name, handle.displayId,
-                    bounds, handle.inputConfig));
+                    bounds, handle.inputConfig, handle.transform));
         }
         return windowInfos;
     }
diff --git a/core/java/android/window/WindowOnBackInvokedDispatcher.java b/core/java/android/window/WindowOnBackInvokedDispatcher.java
index 632208c..0ee07bb 100644
--- a/core/java/android/window/WindowOnBackInvokedDispatcher.java
+++ b/core/java/android/window/WindowOnBackInvokedDispatcher.java
@@ -16,6 +16,9 @@
 
 package android.window;
 
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.Activity;
@@ -23,6 +26,7 @@
 import android.content.ContextWrapper;
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
+import android.content.res.TypedArray;
 import android.os.Handler;
 import android.os.RemoteException;
 import android.os.SystemProperties;
@@ -34,6 +38,7 @@
 import androidx.annotation.VisibleForTesting;
 
 import java.io.PrintWriter;
+import java.lang.annotation.Retention;
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -55,6 +60,18 @@
  * @hide
  */
 public class WindowOnBackInvokedDispatcher implements OnBackInvokedDispatcher {
+    @Retention(SOURCE)
+    @IntDef({
+        BACK_CALLBACK_ENABLED,
+        BACK_CALLBACK_DISABLED,
+        BACK_CALLBACK_DISABLED_LEGACY_WINDOW_SWIPE_TO_DISMISS
+    })
+    public @interface OnBackInvokedCallbackType {}
+
+    public static final int BACK_CALLBACK_ENABLED = 0;
+    public static final int BACK_CALLBACK_DISABLED = 1;
+    public static final int BACK_CALLBACK_DISABLED_LEGACY_WINDOW_SWIPE_TO_DISMISS = 2;
+
     private IWindowSession mWindowSession;
     private IWindow mWindow;
     private static final String TAG = "WindowOnBackDispatcher";
@@ -62,6 +79,9 @@
             .getInt("persist.wm.debug.predictive_back", 1) != 0;
     private static final boolean ALWAYS_ENFORCE_PREDICTIVE_BACK = SystemProperties
             .getInt("persist.wm.debug.predictive_back_always_enforce", 0) != 0;
+    private static final boolean PREDICTIVE_BACK_FALLBACK_WINDOW_ATTRIBUTE =
+            SystemProperties.getInt("persist.wm.debug.predictive_back_fallback_window_attribute", 0)
+                    != 0;
     @Nullable
     private ImeOnBackInvokedDispatcher mImeDispatcher;
 
@@ -263,13 +283,6 @@
     }
 
     /**
-     * Returns false if the legacy back behavior should be used.
-     */
-    public boolean isOnBackInvokedCallbackEnabled() {
-        return Checker.isOnBackInvokedCallbackEnabled(mChecker.getContext());
-    }
-
-    /**
      * Dump information about this WindowOnBackInvokedDispatcher
      * @param prefix the prefix that will be prepended to each line of the produced output
      * @param writer the writer that will receive the resulting text
@@ -382,6 +395,20 @@
         }
     }
 
+    /** Returns false if the legacy back behavior should be used. */
+    public boolean isOnBackInvokedCallbackEnabled() {
+        return isOnBackInvokedCallbackEnabled(mChecker.getContext());
+    }
+
+    /**
+     * Returns true if system gesture exclusion is needed for global gesture compatibility with
+     * windowSwipeToDismiss styleable.
+     */
+    public boolean isSystemGestureExclusionNeeded() {
+        return Checker.getBackCallbackType(mChecker.getContext())
+                == BACK_CALLBACK_DISABLED_LEGACY_WINDOW_SWIPE_TO_DISMISS;
+    }
+
     /**
      * Returns false if the legacy back behavior should be used.
      * <p>
@@ -389,7 +416,7 @@
      * {@link OnBackInvokedCallback}.
      */
     public static boolean isOnBackInvokedCallbackEnabled(@NonNull Context context) {
-        return Checker.isOnBackInvokedCallbackEnabled(context);
+        return Checker.getBackCallbackType(context) == BACK_CALLBACK_ENABLED;
     }
 
     @Override
@@ -441,22 +468,24 @@
             return mContext.get();
         }
 
-        private static boolean isOnBackInvokedCallbackEnabled(@Nullable Context context) {
+        @OnBackInvokedCallbackType
+        private static int getBackCallbackType(@Nullable Context context) {
             // new back is enabled if the feature flag is enabled AND the app does not explicitly
             // request legacy back.
             boolean featureFlagEnabled = ENABLE_PREDICTIVE_BACK;
             if (!featureFlagEnabled) {
-                return false;
+                return BACK_CALLBACK_DISABLED;
             }
 
             if (ALWAYS_ENFORCE_PREDICTIVE_BACK) {
-                return true;
+                Log.i(TAG, "getBackCallbackType: always enable");
+                return BACK_CALLBACK_ENABLED;
             }
 
             // If the context is null, return false to use legacy back.
             if (context == null) {
                 Log.w(TAG, "OnBackInvokedCallback is not enabled because context is null.");
-                return false;
+                return BACK_CALLBACK_DISABLED;
             }
 
             boolean requestsPredictiveBack = false;
@@ -500,9 +529,38 @@
                             applicationInfo.packageName,
                             requestsPredictiveBack));
                 }
+
+                if (PREDICTIVE_BACK_FALLBACK_WINDOW_ATTRIBUTE && !requestsPredictiveBack) {
+                    // Compatibility check for legacy window style flag used by Wear OS.
+                    // Note on compatibility behavior:
+                    // 1. windowSwipeToDismiss should be respected for all apps not opted in.
+                    // 2. windowSwipeToDismiss should be true for all apps not opted in, which
+                    //    enables the PB animation for them.
+                    // 3. windowSwipeToDismiss=false should be respected for apps not opted in,
+                    //    which disables PB & onBackPressed caused by BackAnimController's
+                    //    setTrigger(true)
+                    TypedArray windowAttr =
+                            context.obtainStyledAttributes(
+                                    new int[] {android.R.attr.windowSwipeToDismiss});
+                    boolean windowSwipeToDismiss = true;
+                    if (windowAttr.getIndexCount() > 0) {
+                        windowSwipeToDismiss = windowAttr.getBoolean(0, true);
+                    }
+                    windowAttr.recycle();
+
+                    if (DEBUG) {
+                        Log.i(TAG, "falling back to windowSwipeToDismiss: " + windowSwipeToDismiss);
+                    }
+
+                    if (!windowSwipeToDismiss) {
+                        return BACK_CALLBACK_DISABLED_LEGACY_WINDOW_SWIPE_TO_DISMISS;
+                    } else {
+                        return BACK_CALLBACK_ENABLED;
+                    }
+                }
             }
 
-            return requestsPredictiveBack;
+            return requestsPredictiveBack ? BACK_CALLBACK_ENABLED : BACK_CALLBACK_DISABLED;
         }
     }
 }
diff --git a/core/java/android/window/WindowTokenClient.java b/core/java/android/window/WindowTokenClient.java
index a208634..c1d1b27 100644
--- a/core/java/android/window/WindowTokenClient.java
+++ b/core/java/android/window/WindowTokenClient.java
@@ -20,27 +20,21 @@
 import static android.window.ConfigurationHelper.shouldUpdateResources;
 
 import android.annotation.AnyThread;
-import android.annotation.BinderThread;
 import android.annotation.MainThread;
 import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.app.ActivityThread;
-import android.app.IWindowToken;
 import android.app.ResourcesManager;
 import android.content.Context;
 import android.content.res.CompatibilityInfo;
 import android.content.res.Configuration;
 import android.inputmethodservice.AbstractInputMethodService;
+import android.os.Binder;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Debug;
 import android.os.Handler;
 import android.os.IBinder;
-import android.os.RemoteException;
 import android.util.Log;
-import android.view.IWindowManager;
-import android.view.WindowManager.LayoutParams.WindowType;
-import android.view.WindowManagerGlobal;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
@@ -55,11 +49,11 @@
  * {@link Context#getWindowContextToken() the token of non-Activity UI Contexts}.
  *
  * @see WindowContext
- * @see android.view.IWindowManager#attachWindowContextToDisplayArea(IBinder, int, int, Bundle)
+ * @see android.view.IWindowManager#attachWindowContextToDisplayArea
  *
  * @hide
  */
-public class WindowTokenClient extends IWindowToken.Stub {
+public class WindowTokenClient extends Binder {
     private static final String TAG = WindowTokenClient.class.getSimpleName();
 
     /**
@@ -70,15 +64,11 @@
 
     private final ResourcesManager mResourcesManager = ResourcesManager.getInstance();
 
-    private IWindowManager mWms;
-
     @GuardedBy("itself")
     private final Configuration mConfiguration = new Configuration();
 
     private boolean mShouldDumpConfigForIme;
 
-    private boolean mAttachToWindowContainer;
-
     private final Handler mHandler = ActivityThread.currentActivityThread().getHandler();
 
     /**
@@ -101,96 +91,22 @@
     }
 
     /**
-     * Attaches this {@link WindowTokenClient} to a {@link com.android.server.wm.DisplayArea}.
-     *
-     * @param type The window type of the {@link WindowContext}
-     * @param displayId The {@link Context#getDisplayId() ID of display} to associate with
-     * @param options The window context launched option
-     * @return {@code true} if attaching successfully.
-     */
-    public boolean attachToDisplayArea(@WindowType int type, int displayId,
-            @Nullable Bundle options) {
-        try {
-            final Configuration configuration = getWindowManagerService()
-                    .attachWindowContextToDisplayArea(this, type, displayId, options);
-            if (configuration == null) {
-                return false;
-            }
-            onConfigurationChanged(configuration, displayId, false /* shouldReportConfigChange */);
-            mAttachToWindowContainer = true;
-            return true;
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
-    }
-
-    /**
-     * Attaches this {@link WindowTokenClient} to a {@code DisplayContent}.
-     *
-     * @param displayId The {@link Context#getDisplayId() ID of display} to associate with
-     * @return {@code true} if attaching successfully.
-     */
-    public boolean attachToDisplayContent(int displayId) {
-        final IWindowManager wms = getWindowManagerService();
-        // #createSystemUiContext may call this method before WindowManagerService is initialized.
-        if (wms == null) {
-            return false;
-        }
-        try {
-            final Configuration configuration = wms.attachToDisplayContent(this, displayId);
-            if (configuration == null) {
-                return false;
-            }
-            onConfigurationChanged(configuration, displayId, false /* shouldReportConfigChange */);
-            mAttachToWindowContainer = true;
-            return true;
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
-    }
-
-    /**
-     * Attaches this {@link WindowTokenClient} to a {@code windowToken}.
-     *
-     * @param windowToken the window token to associated with
-     */
-    public void attachToWindowToken(IBinder windowToken) {
-        try {
-            getWindowManagerService().attachWindowContextToWindowToken(this, windowToken);
-            mAttachToWindowContainer = true;
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
-    }
-
-    /** Detaches this {@link WindowTokenClient} from associated WindowContainer if there's one. */
-    public void detachFromWindowContainerIfNeeded() {
-        if (!mAttachToWindowContainer) {
-            return;
-        }
-        try {
-            getWindowManagerService().detachWindowContextFromWindowContainer(this);
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
-    }
-
-    private IWindowManager getWindowManagerService() {
-        if (mWms == null) {
-            mWms = WindowManagerGlobal.getWindowManagerService();
-        }
-        return mWms;
-    }
-
-    /**
      * Called when {@link Configuration} updates from the server side receive.
      *
      * @param newConfig the updated {@link Configuration}
      * @param newDisplayId the updated {@link android.view.Display} ID
      */
-    @BinderThread
-    @Override
+    @VisibleForTesting
+    @MainThread
     public void onConfigurationChanged(Configuration newConfig, int newDisplayId) {
+        onConfigurationChanged(newConfig, newDisplayId, true /* shouldReportConfigChange */);
+    }
+
+    /**
+     * Posts an {@link #onConfigurationChanged} to the main thread.
+     */
+    @VisibleForTesting
+    public void postOnConfigurationChanged(@NonNull Configuration newConfig, int newDisplayId) {
         mHandler.post(PooledLambda.obtainRunnable(this::onConfigurationChanged, newConfig,
                 newDisplayId, true /* shouldReportConfigChange */).recycleOnUse());
     }
@@ -205,17 +121,15 @@
      * <p>
      * Note that this method must be executed on the main thread if
      * {@code shouldReportConfigChange} is {@code true}, which is usually from
-     * {@link IWindowToken#onConfigurationChanged(Configuration, int)}
+     * {@link #onConfigurationChanged(Configuration, int)}
      * directly, while this method could be run on any thread if it is used to initialize
-     * Context's {@code Configuration} via {@link #attachToDisplayArea(int, int, Bundle)}
-     * or {@link #attachToDisplayContent(int)}.
+     * Context's {@code Configuration} via {@link WindowTokenClientController#attachToDisplayArea}
+     * or {@link WindowTokenClientController#attachToDisplayContent}.
      *
      * @param shouldReportConfigChange {@code true} to indicate that the {@code Configuration}
      *                                 should be dispatched to listeners.
-     *
      */
     @AnyThread
-    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
     public void onConfigurationChanged(Configuration newConfig, int newDisplayId,
             boolean shouldReportConfigChange) {
         final Context context = mContextRef.get();
@@ -255,7 +169,6 @@
                 windowContext.dispatchConfigurationChanged(newConfig);
             }
 
-
             if (shouldReportConfigChange && diff != 0
                     && context instanceof WindowProviderService) {
                 final WindowProviderService windowProviderService = (WindowProviderService) context;
@@ -280,15 +193,12 @@
         }
     }
 
-    @BinderThread
-    @Override
-    public void onWindowTokenRemoved() {
-        mHandler.post(PooledLambda.obtainRunnable(
-                WindowTokenClient::onWindowTokenRemovedInner, this).recycleOnUse());
-    }
-
+    /**
+     * Called when the attached window is removed from the display.
+     */
+    @VisibleForTesting
     @MainThread
-    private void onWindowTokenRemovedInner() {
+    public void onWindowTokenRemoved() {
         final Context context = mContextRef.get();
         if (context != null) {
             context.destroy();
diff --git a/core/java/android/window/WindowTokenClientController.java b/core/java/android/window/WindowTokenClientController.java
new file mode 100644
index 0000000..10f6d5e
--- /dev/null
+++ b/core/java/android/window/WindowTokenClientController.java
@@ -0,0 +1,227 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.window;
+
+import static android.view.WindowManager.LayoutParams.WindowType;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.app.ActivityThread;
+import android.app.IApplicationThread;
+import android.app.servertransaction.WindowContextInfoChangeItem;
+import android.app.servertransaction.WindowContextWindowRemovalItem;
+import android.content.Context;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.util.ArrayMap;
+import android.util.Log;
+import android.view.IWindowManager;
+import android.view.WindowManagerGlobal;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
+
+/**
+ * Singleton controller to manage the attached {@link WindowTokenClient}s, and to dispatch
+ * corresponding window configuration change from server side.
+ * @hide
+ */
+public class WindowTokenClientController {
+
+    private static final String TAG = WindowTokenClientController.class.getSimpleName();
+    private static WindowTokenClientController sController;
+
+    private final Object mLock = new Object();
+    private final IApplicationThread mAppThread = ActivityThread.currentActivityThread()
+            .getApplicationThread();
+
+    /** Mapping from a client defined token to the {@link WindowTokenClient} it represents. */
+    @GuardedBy("mLock")
+    private final ArrayMap<IBinder, WindowTokenClient> mWindowTokenClientMap = new ArrayMap<>();
+
+    /** Gets the singleton controller. */
+    @NonNull
+    public static WindowTokenClientController getInstance() {
+        synchronized (WindowTokenClientController.class) {
+            if (sController == null) {
+                sController = new WindowTokenClientController();
+            }
+            return sController;
+        }
+    }
+
+    /** Overrides the {@link #getInstance()} for test only. */
+    @VisibleForTesting
+    public static void overrideForTesting(@NonNull WindowTokenClientController controller) {
+        synchronized (WindowTokenClientController.class) {
+            sController = controller;
+        }
+    }
+
+    /** Creates a new instance for test only. */
+    @VisibleForTesting
+    @NonNull
+    public static WindowTokenClientController createInstanceForTesting() {
+        return new WindowTokenClientController();
+    }
+
+    private WindowTokenClientController() {}
+
+    /**
+     * Attaches a {@link WindowTokenClient} to a {@link com.android.server.wm.DisplayArea}.
+     *
+     * @param client The {@link WindowTokenClient} to attach.
+     * @param type The window type of the {@link WindowContext}
+     * @param displayId The {@link Context#getDisplayId() ID of display} to associate with
+     * @param options The window context launched option
+     * @return {@code true} if attaching successfully.
+     */
+    public boolean attachToDisplayArea(@NonNull WindowTokenClient client,
+            @WindowType int type, int displayId, @Nullable Bundle options) {
+        final WindowContextInfo info;
+        try {
+            info = getWindowManagerService().attachWindowContextToDisplayArea(
+                    mAppThread, client, type, displayId, options);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+        if (info == null) {
+            return false;
+        }
+        onWindowContextTokenAttached(client, info, false /* shouldReportConfigChange */);
+        return true;
+    }
+
+    /**
+     * Attaches a {@link WindowTokenClient} to a {@code DisplayContent}.
+     *
+     * @param client The {@link WindowTokenClient} to attach.
+     * @param displayId The {@link Context#getDisplayId() ID of display} to associate with
+     * @return {@code true} if attaching successfully.
+     */
+    public boolean attachToDisplayContent(@NonNull WindowTokenClient client, int displayId) {
+        final IWindowManager wms = getWindowManagerService();
+        // #createSystemUiContext may call this method before WindowManagerService is initialized.
+        if (wms == null) {
+            return false;
+        }
+        final WindowContextInfo info;
+        try {
+            info = wms.attachWindowContextToDisplayContent(mAppThread, client, displayId);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+        if (info == null) {
+            return false;
+        }
+        onWindowContextTokenAttached(client, info, false /* shouldReportConfigChange */);
+        return true;
+    }
+
+    /**
+     * Attaches this {@link WindowTokenClient} to a {@code windowToken}.
+     *
+     * @param client The {@link WindowTokenClient} to attach.
+     * @param windowToken the window token to associated with
+     * @return {@code true} if attaching successfully.
+     */
+    public boolean attachToWindowToken(@NonNull WindowTokenClient client,
+            @NonNull IBinder windowToken) {
+        final WindowContextInfo info;
+        try {
+            info = getWindowManagerService().attachWindowContextToWindowToken(
+                    mAppThread, client, windowToken);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+        if (info == null) {
+            return false;
+        }
+        // We currently report configuration for WindowToken after attached.
+        onWindowContextTokenAttached(client, info, true /* shouldReportConfigChange */);
+        return true;
+    }
+
+    /** Detaches a {@link WindowTokenClient} from associated WindowContainer if there's one. */
+    public void detachIfNeeded(@NonNull WindowTokenClient client) {
+        synchronized (mLock) {
+            if (mWindowTokenClientMap.remove(client) == null) {
+                return;
+            }
+        }
+        try {
+            getWindowManagerService().detachWindowContext(client);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    private void onWindowContextTokenAttached(@NonNull WindowTokenClient client,
+            @NonNull WindowContextInfo info, boolean shouldReportConfigChange) {
+        synchronized (mLock) {
+            mWindowTokenClientMap.put(client, client);
+        }
+        if (shouldReportConfigChange) {
+            // Should trigger an #onConfigurationChanged callback to the WindowContext. Post the
+            // dispatch in the next loop to prevent the callback from being dispatched before
+            // #onCreate or WindowContext creation..
+            client.postOnConfigurationChanged(info.getConfiguration(), info.getDisplayId());
+        } else {
+            // Apply the config change directly in case users get stale values after WindowContext
+            // creation.
+            client.onConfigurationChanged(info.getConfiguration(), info.getDisplayId(),
+                    false /* shouldReportConfigChange */);
+        }
+    }
+
+    /** Called when receives {@link WindowContextInfoChangeItem}. */
+    public void onWindowContextInfoChanged(@NonNull IBinder clientToken,
+            @NonNull WindowContextInfo info) {
+        final WindowTokenClient windowTokenClient = getWindowTokenClient(clientToken);
+        if (windowTokenClient != null) {
+            windowTokenClient.onConfigurationChanged(info.getConfiguration(), info.getDisplayId());
+        }
+    }
+
+    /** Called when receives {@link WindowContextWindowRemovalItem}. */
+    public void onWindowContextWindowRemoved(@NonNull IBinder clientToken) {
+        final WindowTokenClient windowTokenClient = getWindowTokenClient(clientToken);
+        if (windowTokenClient != null) {
+            windowTokenClient.onWindowTokenRemoved();
+        }
+    }
+
+    @Nullable
+    private WindowTokenClient getWindowTokenClient(@NonNull IBinder clientToken) {
+        final WindowTokenClient windowTokenClient;
+        synchronized (mLock) {
+            windowTokenClient = mWindowTokenClientMap.get(clientToken);
+        }
+        if (windowTokenClient == null) {
+            Log.w(TAG, "Can't find attached WindowTokenClient for " + clientToken);
+        }
+        return windowTokenClient;
+    }
+
+    /** Gets the {@link IWindowManager}. */
+    @VisibleForTesting
+    @Nullable
+    public IWindowManager getWindowManagerService() {
+        return WindowManagerGlobal.getWindowManagerService();
+    }
+}
diff --git a/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java b/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java
index f19f6c7..2efe445 100644
--- a/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java
+++ b/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java
@@ -128,7 +128,7 @@
             DialogStatus.SHOWN,
     })
     /** Denotes the user shortcut type. */
-    private @interface DialogStatus {
+    @interface DialogStatus {
         int NOT_SHOWN = 0;
         int SHOWN  = 1;
     }
@@ -333,12 +333,35 @@
         // Avoid non-a11y users accidentally turning shortcut on without reading this carefully.
         // Put "don't turn on" as the primary action.
         final AlertDialog alertDialog = mFrameworkObjectProvider.getAlertDialogBuilder(
-                // Use SystemUI context so we pick up any theme set in a vendor overlay
-                mFrameworkObjectProvider.getSystemUiContext())
+                        // Use SystemUI context so we pick up any theme set in a vendor overlay
+                        mFrameworkObjectProvider.getSystemUiContext())
                 .setTitle(getShortcutWarningTitle(targets))
                 .setMessage(getShortcutWarningMessage(targets))
                 .setCancelable(false)
-                .setNegativeButton(R.string.accessibility_shortcut_on, null)
+                .setNegativeButton(R.string.accessibility_shortcut_on,
+                        (DialogInterface d, int which) -> {
+                            String targetServices = Settings.Secure.getStringForUser(
+                                    mContext.getContentResolver(),
+                                    Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, userId);
+                            String defaultService = mContext.getString(
+                                    R.string.config_defaultAccessibilityService);
+                            // If the targetServices is null, means the user enables a
+                            // shortcut for the default service by triggering the volume keys
+                            // shortcut in the SUW instead of intentionally configuring the
+                            // shortcut on UI.
+                            if (targetServices == null && !TextUtils.isEmpty(defaultService)) {
+                                // The defaultService in the string resource could be a shorten
+                                // form like com.google.android.marvin.talkback/.TalkBackService.
+                                // Converts it to the componentName for consistency before saving
+                                // to the Settings.
+                                final ComponentName configDefaultService =
+                                        ComponentName.unflattenFromString(defaultService);
+                                Settings.Secure.putStringForUser(mContext.getContentResolver(),
+                                        Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE,
+                                        configDefaultService.flattenToString(),
+                                        userId);
+                            }
+                        })
                 .setPositiveButton(R.string.accessibility_shortcut_off,
                         (DialogInterface d, int which) -> {
                             Settings.Secure.putStringForUser(mContext.getContentResolver(),
diff --git a/core/java/com/android/internal/accessibility/TEST_MAPPING b/core/java/com/android/internal/accessibility/TEST_MAPPING
new file mode 100644
index 0000000..1c67399
--- /dev/null
+++ b/core/java/com/android/internal/accessibility/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+  "imports": [
+    {
+      "path": "frameworks/base/services/accessibility/TEST_MAPPING"
+    }
+  ]
+}
diff --git a/core/java/com/android/internal/app/BlockedAppStreamingActivity.java b/core/java/com/android/internal/app/BlockedAppStreamingActivity.java
index ec2d2ef..980b92c 100644
--- a/core/java/com/android/internal/app/BlockedAppStreamingActivity.java
+++ b/core/java/com/android/internal/app/BlockedAppStreamingActivity.java
@@ -63,7 +63,7 @@
                 mAlertParams.mTitle =
                         getString(R.string.app_streaming_blocked_title_for_permission_dialog);
                 mAlertParams.mMessage =
-                        getString(R.string.app_streaming_blocked_message, streamedDeviceName);
+                        getString(R.string.app_streaming_blocked_message_for_permission_request);
             } else if (TextUtils.equals(activityInfo.packageName, BLOCKED_COMPONENT_PLAYSTORE)) {
                 mAlertParams.mTitle =
                         getString(R.string.app_streaming_blocked_title_for_playstore_dialog);
diff --git a/core/java/com/android/internal/app/IAppOpsService.aidl b/core/java/com/android/internal/app/IAppOpsService.aidl
index ff3c015..2dcac82 100644
--- a/core/java/com/android/internal/app/IAppOpsService.aidl
+++ b/core/java/com/android/internal/app/IAppOpsService.aidl
@@ -83,12 +83,19 @@
     void getHistoricalOpsFromDiskRaw(int uid, String packageName, String attributionTag,
             in List<String> ops, int historyFlags, int filter, long beginTimeMillis,
             long endTimeMillis, int flags, in RemoteCallback callback);
+    @EnforcePermission("MANAGE_APPOPS")
     void offsetHistory(long duration);
+    @EnforcePermission("MANAGE_APPOPS")
     void setHistoryParameters(int mode, long baseSnapshotInterval, int compressionStep);
+    @EnforcePermission("MANAGE_APPOPS")
     void addHistoricalOps(in AppOpsManager.HistoricalOps ops);
+    @EnforcePermission("MANAGE_APPOPS")
     void resetHistoryParameters();
+    @EnforcePermission("MANAGE_APPOPS")
     void resetPackageOpsNoHistory(String packageName);
+    @EnforcePermission("MANAGE_APPOPS")
     void clearHistory();
+    @EnforcePermission("MANAGE_APPOPS")
     void rebootHistory(long offlineDurationMillis);
     List<AppOpsManager.PackageOps> getUidOps(int uid, in int[] ops);
     void setUidMode(int code, int uid, int mode);
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index d433cd6..5f688f6 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -158,7 +158,8 @@
     @EnforcePermission("UPDATE_DEVICE_STATS")
     void notePhoneSignalStrength(in SignalStrength signalStrength);
     @EnforcePermission("UPDATE_DEVICE_STATS")
-    void notePhoneDataConnectionState(int dataType, boolean hasData, int serviceType, int nrFrequency);
+    void notePhoneDataConnectionState(int dataType, boolean hasData, int serviceType, int nrState,
+            int nrFrequency);
     @EnforcePermission("UPDATE_DEVICE_STATS")
     void notePhoneState(int phoneState);
     @EnforcePermission("UPDATE_DEVICE_STATS")
diff --git a/core/java/com/android/internal/app/NetInitiatedActivity.java b/core/java/com/android/internal/app/NetInitiatedActivity.java
deleted file mode 100644
index f34aabb..0000000
--- a/core/java/com/android/internal/app/NetInitiatedActivity.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS 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.app;
-
-import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
-
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.location.LocationManagerInternal;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.util.Log;
-
-import com.android.internal.R;
-import com.android.internal.location.GpsNetInitiatedHandler;
-import com.android.server.LocalServices;
-
-/**
- * This activity is shown to the user for them to accept or deny network-initiated
- * requests. It uses the alert dialog style. It will be launched from a notification.
- */
-public class NetInitiatedActivity extends AlertActivity implements DialogInterface.OnClickListener {
-
-    private static final String TAG = "NetInitiatedActivity";
-
-    private static final boolean DEBUG = true;
-
-    private static final int POSITIVE_BUTTON = AlertDialog.BUTTON_POSITIVE;
-    private static final int NEGATIVE_BUTTON = AlertDialog.BUTTON_NEGATIVE;
-
-    private static final int GPS_NO_RESPONSE_TIME_OUT = 1;
-    // Received ID from intent, -1 when no notification is in progress
-    private int notificationId = -1;
-    private int timeout = -1;
-    private int default_response = -1;
-    private int default_response_timeout = 6;
-
-    private final Handler mHandler = new Handler() {
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case GPS_NO_RESPONSE_TIME_OUT: {
-                    if (notificationId != -1) {
-                        sendUserResponse(default_response);
-                    }
-                    finish();
-                }
-                break;
-                default:
-            }
-        }
-    };
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
-
-        // Set up the "dialog"
-        final Intent intent = getIntent();
-        final AlertController.AlertParams p = mAlertParams;
-        Context context = getApplicationContext();
-        p.mTitle = intent.getStringExtra(GpsNetInitiatedHandler.NI_INTENT_KEY_TITLE);
-        p.mMessage = intent.getStringExtra(GpsNetInitiatedHandler.NI_INTENT_KEY_MESSAGE);
-        p.mPositiveButtonText = String.format(context.getString(R.string.gpsVerifYes));
-        p.mPositiveButtonListener = this;
-        p.mNegativeButtonText = String.format(context.getString(R.string.gpsVerifNo));
-        p.mNegativeButtonListener = this;
-
-        notificationId = intent.getIntExtra(GpsNetInitiatedHandler.NI_INTENT_KEY_NOTIF_ID, -1);
-        timeout = intent.getIntExtra(GpsNetInitiatedHandler.NI_INTENT_KEY_TIMEOUT, default_response_timeout);
-        default_response = intent.getIntExtra(GpsNetInitiatedHandler.NI_INTENT_KEY_DEFAULT_RESPONSE, GpsNetInitiatedHandler.GPS_NI_RESPONSE_ACCEPT);
-        if (DEBUG) Log.d(TAG, "onCreate() : notificationId: " + notificationId + " timeout: " + timeout + " default_response:" + default_response);
-
-        mHandler.sendMessageDelayed(mHandler.obtainMessage(GPS_NO_RESPONSE_TIME_OUT), (timeout * 1000));
-        setupAlert();
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        if (DEBUG) Log.d(TAG, "onResume");
-    }
-
-    @Override
-    protected void onPause() {
-        super.onPause();
-        if (DEBUG) Log.d(TAG, "onPause");
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void onClick(DialogInterface dialog, int which) {
-        if (which == POSITIVE_BUTTON) {
-            sendUserResponse(GpsNetInitiatedHandler.GPS_NI_RESPONSE_ACCEPT);
-        }
-        if (which == NEGATIVE_BUTTON) {
-            sendUserResponse(GpsNetInitiatedHandler.GPS_NI_RESPONSE_DENY);
-        }
-
-        // No matter what, finish the activity
-        finish();
-        notificationId = -1;
-    }
-
-    // Respond to NI Handler under GnssLocationProvider, 1 = accept, 2 = deny
-    private void sendUserResponse(int response) {
-        if (DEBUG) Log.d(TAG, "sendUserResponse, response: " + response);
-        LocationManagerInternal lm = LocalServices.getService(LocationManagerInternal.class);
-        lm.sendNiResponse(notificationId, response);
-    }
-}
diff --git a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java
index 3aa554a..0a69ea8 100644
--- a/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java
+++ b/core/java/com/android/internal/config/sysui/SystemUiDeviceConfigFlags.java
@@ -570,12 +570,6 @@
             "task_manager_inform_job_scheduler_of_pending_app_stop";
 
     /**
-     * (boolean) Whether widget provider info would be saved to / loaded from system persistence
-     * layer as opposed to individual manifests in respective apps.
-     */
-    public static final String PERSISTS_WIDGET_PROVIDER_INFO = "persists_widget_provider_info";
-
-    /**
      * (boolean) Whether to show smart chips (based on TextClassifier) in the clipboard overlay.
      */
     public static final String CLIPBOARD_OVERLAY_SHOW_ACTIONS = "clipboard_overlay_show_actions";
diff --git a/core/java/com/android/internal/config/sysui/SystemUiSystemPropertiesFlags.java b/core/java/com/android/internal/config/sysui/SystemUiSystemPropertiesFlags.java
index 561b5a6..9233050 100644
--- a/core/java/com/android/internal/config/sysui/SystemUiSystemPropertiesFlags.java
+++ b/core/java/com/android/internal/config/sysui/SystemUiSystemPropertiesFlags.java
@@ -82,7 +82,7 @@
         public static final Flag RANKING_UPDATE_ASHMEM = devFlag(
                 "persist.sysui.notification.ranking_update_ashmem");
 
-        public static final Flag PROPAGATE_CHANNEL_UPDATES_TO_CONVERSATIONS = devFlag(
+        public static final Flag PROPAGATE_CHANNEL_UPDATES_TO_CONVERSATIONS = releasedFlag(
                 "persist.sysui.notification.propagate_channel_updates_to_conversations");
     }
 
diff --git a/core/java/com/android/internal/content/PackageMonitor.java b/core/java/com/android/internal/content/PackageMonitor.java
index 4cbf475..0d1871d 100644
--- a/core/java/com/android/internal/content/PackageMonitor.java
+++ b/core/java/com/android/internal/content/PackageMonitor.java
@@ -22,16 +22,23 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.pm.PackageManager;
 import android.net.Uri;
+import android.os.Bundle;
 import android.os.Handler;
+import android.os.HandlerExecutor;
+import android.os.IRemoteCallback;
 import android.os.Looper;
+import android.os.RemoteException;
 import android.os.UserHandle;
+import android.util.Log;
 import android.util.Slog;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.os.BackgroundThread;
 
-import java.util.HashSet;
 import java.util.Objects;
+import java.util.concurrent.Executor;
 
 /**
  * Helper class for monitoring the state of packages: adding, removing,
@@ -42,10 +49,7 @@
 
     final IntentFilter mPackageFilt;
     final IntentFilter mNonDataFilt;
-    final IntentFilter mExternalFilt;
 
-    final HashSet<String> mUpdatingPackages = new HashSet<String>();
-    
     Context mRegisteredContext;
     Handler mRegisteredHandler;
     String[] mDisappearingPackages;
@@ -58,15 +62,16 @@
 
     String[] mTempArray = new String[1];
 
+    PackageMonitorCallback mPackageMonitorCallback;
+
     @UnsupportedAppUsage
     public PackageMonitor() {
         final boolean isCore = UserHandle.isCore(android.os.Process.myUid());
 
         mPackageFilt = new IntentFilter();
-        mPackageFilt.addAction(Intent.ACTION_PACKAGE_ADDED);
-        mPackageFilt.addAction(Intent.ACTION_PACKAGE_REMOVED);
-        mPackageFilt.addAction(Intent.ACTION_PACKAGE_CHANGED);
+        // Settings app sends the broadcast
         mPackageFilt.addAction(Intent.ACTION_QUERY_PACKAGE_RESTART);
+        // AMS sends the broadcast
         mPackageFilt.addAction(Intent.ACTION_PACKAGE_RESTARTED);
         mPackageFilt.addAction(Intent.ACTION_PACKAGE_DATA_CLEARED);
         mPackageFilt.addDataScheme("package");
@@ -75,20 +80,11 @@
         }
 
         mNonDataFilt = new IntentFilter();
-        mNonDataFilt.addAction(Intent.ACTION_UID_REMOVED);
+        // UserController sends the broadcast
         mNonDataFilt.addAction(Intent.ACTION_USER_STOPPED);
-        mNonDataFilt.addAction(Intent.ACTION_PACKAGES_SUSPENDED);
-        mNonDataFilt.addAction(Intent.ACTION_PACKAGES_UNSUSPENDED);
         if (isCore) {
             mNonDataFilt.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
         }
-
-        mExternalFilt = new IntentFilter();
-        mExternalFilt.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
-        mExternalFilt.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
-        if (isCore) {
-            mExternalFilt.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
-        }
     }
 
     @UnsupportedAppUsage
@@ -99,12 +95,15 @@
     @UnsupportedAppUsage
     public void register(Context context, Looper thread, UserHandle user,
             boolean externalStorage) {
-        register(context, user, externalStorage,
+        register(context, user,
                 (thread == null) ? BackgroundThread.getHandler() : new Handler(thread));
     }
 
-    public void register(Context context, UserHandle user,
-        boolean externalStorage, Handler handler) {
+
+    /**
+     * Register for notifications of package changes such as install, removal and other events.
+     */
+    public void register(Context context, UserHandle user, Handler handler) {
         if (mRegisteredContext != null) {
             throw new IllegalStateException("Already registered");
         }
@@ -113,15 +112,17 @@
         if (user != null) {
             context.registerReceiverAsUser(this, user, mPackageFilt, null, mRegisteredHandler);
             context.registerReceiverAsUser(this, user, mNonDataFilt, null, mRegisteredHandler);
-            if (externalStorage) {
-                context.registerReceiverAsUser(this, user, mExternalFilt, null,
-                        mRegisteredHandler);
-            }
         } else {
             context.registerReceiver(this, mPackageFilt, null, mRegisteredHandler);
             context.registerReceiver(this, mNonDataFilt, null, mRegisteredHandler);
-            if (externalStorage) {
-                context.registerReceiver(this, mExternalFilt, null, mRegisteredHandler);
+        }
+        if (mPackageMonitorCallback == null) {
+            PackageManager pm = mRegisteredContext.getPackageManager();
+            if (pm != null) {
+                mPackageMonitorCallback = new PackageMonitorCallback(this,
+                        new HandlerExecutor(mRegisteredHandler));
+                int userId = user != null ? user.getIdentifier() : mRegisteredContext.getUserId();
+                pm.registerPackageMonitorCallback(mPackageMonitorCallback, userId);
             }
         }
     }
@@ -136,16 +137,15 @@
             throw new IllegalStateException("Not registered");
         }
         mRegisteredContext.unregisterReceiver(this);
+
+        PackageManager pm = mRegisteredContext.getPackageManager();
+        if (pm != null && mPackageMonitorCallback != null) {
+            pm.unregisterPackageMonitorCallback(mPackageMonitorCallback);
+        }
+        mPackageMonitorCallback = null;
         mRegisteredContext = null;
     }
-    
-    //not yet implemented
-    boolean isPackageUpdating(String packageName) {
-        synchronized (mUpdatingPackages) {
-            return mUpdatingPackages.contains(packageName);
-        }
-    }
-    
+
     public void onBeginPackageChanges() {
     }
 
@@ -337,21 +337,30 @@
         String pkg = uri != null ? uri.getSchemeSpecificPart() : null;
         return pkg;
     }
-    
+
     @Override
     public void onReceive(Context context, Intent intent) {
+        doHandlePackageEvent(intent);
+    }
+
+    /**
+     * Handle the package related event
+     * @param intent the intent that contains package related event information
+     */
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
+    public void doHandlePackageEvent(Intent intent) {
         mChangeUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE,
                 UserHandle.USER_NULL);
         if (mChangeUserId == UserHandle.USER_NULL) {
-            Slog.w("PackageMonitor", "Intent broadcast does not contain user handle: " + intent);
+            Slog.w(TAG, "Intent broadcast does not contain user handle: " + intent);
             return;
         }
         onBeginPackageChanges();
-        
+
         mDisappearingPackages = mAppearingPackages = null;
         mSomePackagesChanged = false;
         mModifiedComponents = null;
-        
+
         String action = intent.getAction();
         if (Intent.ACTION_PACKAGE_ADDED.equals(action)) {
             String pkg = getPackageName(intent);
@@ -373,11 +382,6 @@
                     onPackageAdded(pkg, uid);
                 }
                 onPackageAppeared(pkg, mChangeType);
-                if (mChangeType == PACKAGE_UPDATING) {
-                    synchronized (mUpdatingPackages) {
-                        mUpdatingPackages.remove(pkg);
-                    }
-                }
             }
         } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) {
             String pkg = getPackageName(intent);
@@ -387,10 +391,6 @@
                 mTempArray[0] = pkg;
                 if (intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {
                     mChangeType = PACKAGE_UPDATING;
-                    synchronized (mUpdatingPackages) {
-                        //not used for now
-                        //mUpdatingPackages.add(pkg);
-                    }
                     onPackageUpdateStarted(pkg, uid);
                 } else {
                     mChangeType = PACKAGE_PERMANENT_CHANGE;
@@ -484,4 +484,30 @@
         onFinishPackageChanges();
         mChangeUserId = UserHandle.USER_NULL;
     }
+
+    private static final class PackageMonitorCallback extends IRemoteCallback.Stub {
+
+        private final PackageMonitor mPackageMonitor;
+        private final Executor mExecutor;
+
+        PackageMonitorCallback(PackageMonitor monitor, Executor executor) {
+            mPackageMonitor = monitor;
+            mExecutor = executor;
+        }
+
+        @Override
+        public void sendResult(Bundle data) throws RemoteException {
+            onHandlePackageMonitorCallback(data);
+        }
+
+        private void onHandlePackageMonitorCallback(Bundle bundle) {
+            Intent intent = bundle.getParcelable(
+                    PackageManager.EXTRA_PACKAGE_MONITOR_CALLBACK_RESULT, Intent.class);
+            if (intent == null) {
+                Log.w(TAG, "No intent is set for PackageMonitorCallback");
+                return;
+            }
+            mExecutor.execute(() -> mPackageMonitor.doHandlePackageEvent(intent));
+        }
+    }
 }
diff --git a/core/java/com/android/internal/content/om/TEST_MAPPING b/core/java/com/android/internal/content/om/TEST_MAPPING
index 98dadce7..ab3abb1 100644
--- a/core/java/com/android/internal/content/om/TEST_MAPPING
+++ b/core/java/com/android/internal/content/om/TEST_MAPPING
@@ -10,11 +10,9 @@
     },
     {
       "name": "SelfTargetingOverlayDeviceTests"
-    }
-  ],
-  "presubmit-large": [
+    },
     {
-      "name": "CtsContentTestCases",
+      "name": "CtsResourcesTestCases",
       "options": [
         {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
diff --git a/core/java/com/android/internal/infra/TEST_MAPPING b/core/java/com/android/internal/infra/TEST_MAPPING
index 3de107e..ddfd0ed 100644
--- a/core/java/com/android/internal/infra/TEST_MAPPING
+++ b/core/java/com/android/internal/infra/TEST_MAPPING
@@ -1,14 +1,22 @@
 {
   "presubmit": [
     {
-      "name": "CtsRoleTestCases"
+      "name": "CtsRoleTestCases",
+      "options": [
+          {
+              "exclude-annotation": "android.platform.test.annotations.FlakyTest"
+          }
+      ]
     },
     {
       "name": "CtsPermissionTestCases",
       "options": [
-        {
-          "include-filter": "android.permission.cts.PermissionControllerTest"
-        }
+          {
+            "include-filter": "android.permission.cts.PermissionControllerTest"
+          },
+          {
+            "exclude-annotation": "android.platform.test.annotations.FlakyTest"
+          }
       ]
     },
     {
diff --git a/core/java/com/android/internal/inputmethod/IInputMethodClient.aidl b/core/java/com/android/internal/inputmethod/IInputMethodClient.aidl
index 3644fc4..9251d2d 100644
--- a/core/java/com/android/internal/inputmethod/IInputMethodClient.aidl
+++ b/core/java/com/android/internal/inputmethod/IInputMethodClient.aidl
@@ -31,7 +31,6 @@
     void setInteractive(boolean active, boolean fullscreen);
     void scheduleStartInputIfNecessary(boolean fullscreen);
     void reportFullscreenMode(boolean fullscreen);
-    void updateVirtualDisplayToScreenMatrix(int bindSequence, in float[] matrixValues);
     void setImeTraceEnabled(boolean enabled);
     void throwExceptionFromSystem(String message);
 }
diff --git a/core/java/com/android/internal/inputmethod/InputBindResult.java b/core/java/com/android/internal/inputmethod/InputBindResult.java
index 7dbbffd..b6eca07 100644
--- a/core/java/com/android/internal/inputmethod/InputBindResult.java
+++ b/core/java/com/android/internal/inputmethod/InputBindResult.java
@@ -19,11 +19,9 @@
 import static java.lang.annotation.RetentionPolicy.SOURCE;
 
 import android.annotation.IntDef;
-import android.annotation.Nullable;
 import android.content.ComponentName;
 import android.content.Intent;
 import android.content.ServiceConnection;
-import android.graphics.Matrix;
 import android.os.IBinder;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -205,29 +203,12 @@
      */
     public final int sequence;
 
-    @Nullable
-    private final float[] mVirtualDisplayToScreenMatrixValues;
-
     /**
      * {@code true} if the IME explicitly specifies {@code suppressesSpellChecker="true"}.
      */
     public final boolean isInputMethodSuppressingSpellChecker;
 
     /**
-     * @return {@link Matrix} that corresponds to {@link #mVirtualDisplayToScreenMatrixValues}.
-     *         {@code null} if {@link #mVirtualDisplayToScreenMatrixValues} is {@code null}.
-     */
-    @Nullable
-    public Matrix getVirtualDisplayToScreenMatrix() {
-        if (mVirtualDisplayToScreenMatrixValues == null) {
-            return null;
-        }
-        final Matrix matrix = new Matrix();
-        matrix.setValues(mVirtualDisplayToScreenMatrixValues);
-        return matrix;
-    }
-
-    /**
      * Creates a new instance of {@link InputBindResult}.
      *
      * @param result A result code defined in {@link ResultCode}.
@@ -246,7 +227,6 @@
             IInputMethodSession method,
             SparseArray<IAccessibilityInputMethodSession> accessibilitySessions,
             InputChannel channel, String id, int sequence,
-            @Nullable Matrix virtualDisplayToScreenMatrix,
             boolean isInputMethodSuppressingSpellChecker) {
         this.result = result;
         this.method = method;
@@ -254,12 +234,6 @@
         this.channel = channel;
         this.id = id;
         this.sequence = sequence;
-        if (virtualDisplayToScreenMatrix == null) {
-            mVirtualDisplayToScreenMatrixValues = null;
-        } else {
-            mVirtualDisplayToScreenMatrixValues = new float[9];
-            virtualDisplayToScreenMatrix.getValues(mVirtualDisplayToScreenMatrixValues);
-        }
         this.isInputMethodSuppressingSpellChecker = isInputMethodSuppressingSpellChecker;
     }
 
@@ -287,7 +261,6 @@
         }
         id = source.readString();
         sequence = source.readInt();
-        mVirtualDisplayToScreenMatrixValues = source.createFloatArray();
         isInputMethodSuppressingSpellChecker = source.readBoolean();
     }
 
@@ -298,7 +271,6 @@
     public String toString() {
         return "InputBindResult{result=" + getResultString() + " method=" + method + " id=" + id
                 + " sequence=" + sequence
-                + " virtualDisplayToScreenMatrix=" + getVirtualDisplayToScreenMatrix()
                 + " isInputMethodSuppressingSpellChecker=" + isInputMethodSuppressingSpellChecker
                 + "}";
     }
@@ -330,7 +302,6 @@
         }
         dest.writeString(id);
         dest.writeInt(sequence);
-        dest.writeFloatArray(mVirtualDisplayToScreenMatrixValues);
         dest.writeBoolean(isInputMethodSuppressingSpellChecker);
     }
 
@@ -400,7 +371,7 @@
     }
 
     private static InputBindResult error(@ResultCode int result) {
-        return new InputBindResult(result, null, null, null, null, -1, null, false);
+        return new InputBindResult(result, null, null, null, null, -1, false);
     }
 
     /**
diff --git a/core/java/com/android/internal/os/BatteryStatsHistory.java b/core/java/com/android/internal/os/BatteryStatsHistory.java
index bbaaa47..0a938ef4 100644
--- a/core/java/com/android/internal/os/BatteryStatsHistory.java
+++ b/core/java/com/android/internal/os/BatteryStatsHistory.java
@@ -129,6 +129,13 @@
     static final int EXTENSION_CPU_USAGE_HEADER_FLAG = 0x00000004;
     static final int EXTENSION_CPU_USAGE_FLAG = 0x00000008;
 
+    // For state1, trace everything except the wakelock bit (which can race with
+    // suspend) and the running bit (which isn't meaningful in traces).
+    static final int STATE1_TRACE_MASK = ~(HistoryItem.STATE_WAKE_LOCK_FLAG
+                                          | HistoryItem.STATE_CPU_RUNNING_FLAG);
+    // For state2, trace all bit changes.
+    static final int STATE2_TRACE_MASK = ~0;
+
     private final Parcel mHistoryBuffer;
     private final File mSystemDir;
     private final HistoryStepDetailsCalculator mStepDetailsCalculator;
@@ -246,7 +253,11 @@
         public void traceCounter(@NonNull String name, int value) {
             Trace.traceCounter(Trace.TRACE_TAG_POWER, name, value);
             if (mShouldSetProperty) {
-                SystemProperties.set("debug.tracing." + name, Integer.toString(value));
+                try {
+                    SystemProperties.set("debug.tracing." + name, Integer.toString(value));
+                } catch (RuntimeException e) {
+                    Slog.e(TAG, "Failed to set debug.tracing." + name, e);
+                }
             }
         }
 
@@ -1215,6 +1226,17 @@
     }
 
     /**
+     * Records a data connection type change event.
+     */
+    public void recordNrStateChangeEvent(long elapsedRealtimeMs, long uptimeMs,
+            int nrState) {
+        mHistoryCur.states2 = setBitField(mHistoryCur.states2, nrState,
+                HistoryItem.STATE2_NR_STATE_SHIFT,
+                HistoryItem.STATE2_NR_STATE_MASK);
+        writeHistoryItem(elapsedRealtimeMs, uptimeMs);
+    }
+
+    /**
      * Records a WiFi supplicant state change event.
      */
     public void recordWifiSupplicantStateChangeEvent(long elapsedRealtimeMs, long uptimeMs,
@@ -1270,8 +1292,9 @@
     /**
      * Writes changes to a HistoryItem state bitmap to Atrace.
      */
-    private void recordTraceCounters(int oldval, int newval, BitDescription[] descriptions) {
-        int diff = oldval ^ newval;
+    private void recordTraceCounters(int oldval, int newval, int mask,
+            BitDescription[] descriptions) {
+        int diff = (oldval ^ newval) & mask;
         if (diff == 0) return;
 
         for (int i = 0; i < descriptions.length; i++) {
@@ -1284,7 +1307,6 @@
             } else {
                 value = (newval & bd.mask) >> bd.shift;
             }
-
             mTracer.traceCounter("battery_stats." + bd.name, value);
         }
     }
@@ -1325,9 +1347,9 @@
     private void writeHistoryItem(long elapsedRealtimeMs, long uptimeMs, HistoryItem cur) {
         if (mTracer != null && mTracer.tracingEnabled()) {
             recordTraceEvents(cur.eventCode, cur.eventTag);
-            recordTraceCounters(mTraceLastState, cur.states,
+            recordTraceCounters(mTraceLastState, cur.states, STATE1_TRACE_MASK,
                     BatteryStats.HISTORY_STATE_DESCRIPTIONS);
-            recordTraceCounters(mTraceLastState2, cur.states2,
+            recordTraceCounters(mTraceLastState2, cur.states2, STATE2_TRACE_MASK,
                     BatteryStats.HISTORY_STATE2_DESCRIPTIONS);
             mTraceLastState = cur.states;
             mTraceLastState2 = cur.states2;
@@ -1545,7 +1567,7 @@
 
         State2 change int: if C in the first token is set,
         31              23              15               7             0
-        █M|L|K|J|I|H|H|G█F|E|D|C| | | | █ | | | | | | | █ |B|B|B|A|A|A|A█
+        █M|L|K|J|I|H|H|G█F|E|D|C| | | | █ | | | | |O|O|N█N|B|B|B|A|A|A|A█
 
         A: 4 bits indicating the wifi supplicant state: {@link BatteryStats#WIFI_SUPPL_STATE_NAMES}.
         B: 3 bits indicating the wifi signal strength: 0, 1, 2, 3, 4.
@@ -1560,6 +1582,8 @@
         K: wifi was running.
         L: video was playing.
         M: power save mode was on.
+        N: 2 bits indicating the gps signal strength: poor, good, none.
+        O: 2 bits indicating nr state: none, restricted, not restricted, connected.
 
         Wakelock/wakereason struct: if D in the first token is set,
         Event struct: if E in the first token is set,
diff --git a/core/java/com/android/internal/os/CpuScalingPolicies.java b/core/java/com/android/internal/os/CpuScalingPolicies.java
new file mode 100644
index 0000000..6dbe8ab
--- /dev/null
+++ b/core/java/com/android/internal/os/CpuScalingPolicies.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.os;
+
+import android.annotation.NonNull;
+import android.util.SparseArray;
+
+import libcore.util.EmptyArray;
+
+import java.util.Arrays;
+
+/**
+ * CPU scaling policies: the policy IDs and corresponding supported scaling for those
+ * policies.
+ */
+public class CpuScalingPolicies {
+    private final SparseArray<int[]> mCpusByPolicy;
+    private final SparseArray<int[]> mFreqsByPolicy;
+    private final int[] mPolicies;
+    private final int mScalingStepCount;
+
+    public CpuScalingPolicies(@NonNull SparseArray<int[]> cpusByPolicy,
+            @NonNull SparseArray<int[]> freqsByPolicy) {
+        mCpusByPolicy = cpusByPolicy;
+        mFreqsByPolicy = freqsByPolicy;
+
+        mPolicies = new int[cpusByPolicy.size()];
+        for (int i = 0; i < mPolicies.length; i++) {
+            mPolicies[i] = cpusByPolicy.keyAt(i);
+        }
+
+        Arrays.sort(mPolicies);
+
+        int count = 0;
+        for (int i = freqsByPolicy.size() - 1; i >= 0; i--) {
+            count += freqsByPolicy.valueAt(i).length;
+        }
+        mScalingStepCount = count;
+    }
+
+    /**
+     * Returns available policies (aka clusters).
+     */
+    @NonNull
+    public int[] getPolicies() {
+        return mPolicies;
+    }
+
+    /**
+     * CPUs covered by the specified policy.
+     */
+    @NonNull
+    public int[] getRelatedCpus(int policy) {
+        return mCpusByPolicy.get(policy, EmptyArray.INT);
+    }
+
+    /**
+     * Scaling frequencies supported for the specified policy.
+     */
+    @NonNull
+    public int[] getFrequencies(int policy) {
+        return mFreqsByPolicy.get(policy, EmptyArray.INT);
+    }
+
+    /**
+     * Returns the overall number of supported scaling steps: grand total of available frequencies
+     * across all scaling policies.
+     */
+    public int getScalingStepCount() {
+        return mScalingStepCount;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        for (int policy : mPolicies) {
+            sb.append("policy").append(policy)
+                    .append("\n CPUs: ").append(Arrays.toString(mCpusByPolicy.get(policy)))
+                    .append("\n freqs: ").append(Arrays.toString(mFreqsByPolicy.get(policy)))
+                    .append("\n");
+        }
+        return sb.toString();
+    }
+}
diff --git a/core/java/com/android/internal/os/CpuScalingPolicyReader.java b/core/java/com/android/internal/os/CpuScalingPolicyReader.java
new file mode 100644
index 0000000..c96089a
--- /dev/null
+++ b/core/java/com/android/internal/os/CpuScalingPolicyReader.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.os;
+
+import android.annotation.NonNull;
+import android.os.FileUtils;
+import android.util.IntArray;
+import android.util.Slog;
+import android.util.SparseArray;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import libcore.util.EmptyArray;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Captures a CPU scaling policies such as available scaling frequencies as well as
+ * CPUs (cores) for each policy.
+ *
+ * See <a
+ * href="https://www.kernel.org/doc/html/latest/admin-guide/pm/cpufreq.html
+ * #policy-interface-in-sysfs">Policy Interface in sysfs</a>
+ */
+public class CpuScalingPolicyReader {
+    private static final String TAG = "CpuScalingPolicyReader";
+    private static final String CPUFREQ_DIR = "/sys/devices/system/cpu/cpufreq";
+    private static final Pattern POLICY_PATTERN = Pattern.compile("policy(\\d+)");
+    private static final String FILE_NAME_RELATED_CPUS = "related_cpus";
+    private static final String FILE_NAME_SCALING_AVAILABLE_FREQUENCIES =
+            "scaling_available_frequencies";
+    private static final String FILE_NAME_SCALING_BOOST_FREQUENCIES = "scaling_boost_frequencies";
+    private static final String FILE_NAME_CPUINFO_CUR_FREQ = "cpuinfo_cur_freq";
+
+    private final String mCpuFreqDir;
+
+    public CpuScalingPolicyReader() {
+        this(CPUFREQ_DIR);
+    }
+
+    @VisibleForTesting
+    public CpuScalingPolicyReader(String cpuFreqDir) {
+        mCpuFreqDir = cpuFreqDir;
+    }
+
+    /**
+     * Reads scaling policy info from sysfs files in /sys/devices/system/cpu/cpufreq
+     */
+    @NonNull
+    public CpuScalingPolicies read() {
+        SparseArray<int[]> cpusByPolicy = new SparseArray<>();
+        SparseArray<int[]> freqsByPolicy = new SparseArray<>();
+
+        File cpuFreqDir = new File(mCpuFreqDir);
+        File[] policyDirs = cpuFreqDir.listFiles();
+        if (policyDirs != null) {
+            for (File policyDir : policyDirs) {
+                Matcher matcher = POLICY_PATTERN.matcher(policyDir.getName());
+                if (matcher.matches()) {
+                    int[] relatedCpus = readIntsFromFile(
+                            new File(policyDir, FILE_NAME_RELATED_CPUS));
+                    if (relatedCpus.length == 0) {
+                        continue;
+                    }
+
+                    int[] availableFreqs = readIntsFromFile(
+                            new File(policyDir, FILE_NAME_SCALING_AVAILABLE_FREQUENCIES));
+                    int[] boostFreqs = readIntsFromFile(
+                            new File(policyDir, FILE_NAME_SCALING_BOOST_FREQUENCIES));
+                    int[] freqs;
+                    if (boostFreqs.length == 0) {
+                        freqs = availableFreqs;
+                    } else {
+                        freqs = Arrays.copyOf(availableFreqs,
+                                availableFreqs.length + boostFreqs.length);
+                        System.arraycopy(boostFreqs, 0, freqs, availableFreqs.length,
+                                boostFreqs.length);
+                    }
+                    if (freqs.length == 0) {
+                        freqs = readIntsFromFile(new File(policyDir, FILE_NAME_CPUINFO_CUR_FREQ));
+                        if (freqs.length == 0) {
+                            freqs = new int[]{0};  // Unknown frequency
+                        }
+                    }
+                    int policy = Integer.parseInt(matcher.group(1));
+                    cpusByPolicy.put(policy, relatedCpus);
+                    freqsByPolicy.put(policy, freqs);
+                }
+            }
+        }
+
+        if (cpusByPolicy.size() == 0) {
+            // There just has to be at least one CPU - otherwise, what's executing this code?
+            cpusByPolicy.put(0, new int[]{0});
+            freqsByPolicy.put(0, new int[]{0});
+        }
+
+        return new CpuScalingPolicies(cpusByPolicy, freqsByPolicy);
+    }
+
+    @NonNull
+    private static int[] readIntsFromFile(File file) {
+        if (!file.exists()) {
+            return EmptyArray.INT;
+        }
+
+        IntArray intArray = new IntArray(16);
+        try {
+            String contents = FileUtils.readTextFile(file, 0, null).trim();
+            String[] strings = contents.split(" ");
+            intArray.clear();
+            for (String s : strings) {
+                try {
+                    intArray.add(Integer.parseInt(s));
+                } catch (NumberFormatException e) {
+                    Slog.e(TAG, "Unexpected file format " + file
+                            + ": " + contents, e);
+                }
+            }
+            return intArray.toArray();
+        } catch (IOException e) {
+            Slog.e(TAG, "Cannot read " + file, e);
+            return EmptyArray.INT;
+        }
+    }
+}
diff --git a/core/java/com/android/internal/os/KernelCpuUidTimeReader.java b/core/java/com/android/internal/os/KernelCpuUidTimeReader.java
index c801be0..21e0dc5 100644
--- a/core/java/com/android/internal/os/KernelCpuUidTimeReader.java
+++ b/core/java/com/android/internal/os/KernelCpuUidTimeReader.java
@@ -16,9 +16,7 @@
 package com.android.internal.os;
 
 import static com.android.internal.os.KernelCpuProcStringReader.asLongs;
-import static com.android.internal.util.Preconditions.checkNotNull;
 
-import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.os.StrictMode;
 import android.util.IntArray;
@@ -29,11 +27,9 @@
 import com.android.internal.os.KernelCpuProcStringReader.ProcFileIterator;
 import com.android.internal.os.KernelCpuUidBpfMapReader.BpfMapIterator;
 
-import java.io.BufferedReader;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.nio.CharBuffer;
-import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
@@ -352,7 +348,7 @@
         private int mFreqCount = 0;
         private int mErrors = 0;
         private boolean mPerClusterTimesAvailable;
-        private boolean mAllUidTimesAvailable = true;
+        private boolean mAllUidTimesAvailable;
 
         public KernelCpuUidFreqTimeReader(boolean throttle) {
             this(throttle, Clock.SYSTEM_CLOCK);
@@ -376,10 +372,22 @@
         }
 
         /**
+         * Initializes the reader.  Should be called during the system-ready boot phase.
+         */
+        public void onSystemReady() {
+            if (mBpfTimesAvailable && mCpuFreqs == null) {
+                readFreqsThroughBpf();
+                // By extension: if we can read CPU frequencies through eBPF, we can also
+                // read per-UID CPU time-in-state
+                mAllUidTimesAvailable = mCpuFreqs != null;
+            }
+        }
+
+        /**
          * @return Whether per-cluster times are available.
          */
         public boolean perClusterTimesAvailable() {
-            return mPerClusterTimesAvailable;
+            return mBpfTimesAvailable;
         }
 
         /**
@@ -396,59 +404,6 @@
             return mLastTimes;
         }
 
-        /**
-         * Reads a list of CPU frequencies from /proc/uid_time_in_state. Uses a given PowerProfile
-         * to determine if per-cluster times are available.
-         *
-         * @param powerProfile The PowerProfile to compare against.
-         * @return A long[] of CPU frequencies in Hz.
-         */
-        public long[] readFreqs(@NonNull PowerProfile powerProfile) {
-            checkNotNull(powerProfile);
-            if (mCpuFreqs != null) {
-                // No need to read cpu freqs more than once.
-                return mCpuFreqs;
-            }
-            if (!mAllUidTimesAvailable) {
-                return null;
-            }
-            if (mBpfTimesAvailable) {
-                readFreqsThroughBpf();
-            }
-            if (mCpuFreqs == null) {
-                final int oldMask = StrictMode.allowThreadDiskReadsMask();
-                try (BufferedReader reader = Files.newBufferedReader(mProcFilePath)) {
-                    if (readFreqs(reader.readLine()) == null) {
-                        return null;
-                    }
-                } catch (IOException e) {
-                    if (++mErrors >= MAX_ERROR_COUNT) {
-                        mAllUidTimesAvailable = false;
-                    }
-                    Slog.e(mTag, "Failed to read " + UID_TIMES_PROC_FILE + ": " + e);
-                    return null;
-                } finally {
-                    StrictMode.setThreadPolicyMask(oldMask);
-                }
-            }
-            // Check if the freqs in the proc file correspond to per-cluster freqs.
-            final IntArray numClusterFreqs = extractClusterInfoFromProcFileFreqs();
-            final int numClusters = powerProfile.getNumCpuClusters();
-            if (numClusterFreqs.size() == numClusters) {
-                mPerClusterTimesAvailable = true;
-                for (int i = 0; i < numClusters; ++i) {
-                    if (numClusterFreqs.get(i) != powerProfile.getNumSpeedStepsInCpuCluster(i)) {
-                        mPerClusterTimesAvailable = false;
-                        break;
-                    }
-                }
-            } else {
-                mPerClusterTimesAvailable = false;
-            }
-            Slog.i(mTag, "mPerClusterTimesAvailable=" + mPerClusterTimesAvailable);
-            return mCpuFreqs;
-        }
-
         private long[] readFreqsThroughBpf() {
             if (!mBpfTimesAvailable || mBpfReader == null) {
                 return null;
diff --git a/core/java/com/android/internal/os/PowerProfile.java b/core/java/com/android/internal/os/PowerProfile.java
index 2bcc645..503e689 100644
--- a/core/java/com/android/internal/os/PowerProfile.java
+++ b/core/java/com/android/internal/os/PowerProfile.java
@@ -26,6 +26,7 @@
 import android.content.res.XmlResourceParser;
 import android.util.IndentingPrintWriter;
 import android.util.Slog;
+import android.util.SparseArray;
 import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.annotations.GuardedBy;
@@ -294,6 +295,8 @@
 
     private static final long SUBSYSTEM_FIELDS_MASK = 0xFFFF_FFFF;
 
+    private static final int DEFAULT_CPU_POWER_BRACKET_NUMBER = 3;
+
     /**
      * A map from Power Use Item to its power consumption.
      */
@@ -357,6 +360,8 @@
             readPowerValuesFromXml(context, xmlId);
         }
         initCpuClusters();
+        initCpuScalingPolicies();
+        initCpuPowerBrackets(DEFAULT_CPU_POWER_BRACKET_NUMBER);
         initDisplays();
         initModem();
     }
@@ -452,9 +457,7 @@
     private static final String CPU_CLUSTER_POWER_COUNT = "cpu.cluster_power.cluster";
     private static final String CPU_CORE_SPEED_PREFIX = "cpu.core_speeds.cluster";
     private static final String CPU_CORE_POWER_PREFIX = "cpu.core_power.cluster";
-    private static final String CPU_POWER_BRACKETS_PREFIX = "cpu.power_brackets.cluster";
-
-    private static final int DEFAULT_CPU_POWER_BRACKET_NUMBER = 3;
+    private static final String CPU_POWER_BRACKETS_PREFIX = "cpu.power_brackets.policy";
 
     private void initCpuClusters() {
         if (sPowerArrayMap.containsKey(CPU_PER_CLUSTER_CORE_COUNT)) {
@@ -476,8 +479,82 @@
             mCpuClusters[0] = new CpuClusterKey(CPU_CORE_SPEED_PREFIX + 0,
                     CPU_CLUSTER_POWER_COUNT + 0, CPU_CORE_POWER_PREFIX + 0, numCpus);
         }
+    }
 
-        initCpuPowerBrackets(DEFAULT_CPU_POWER_BRACKET_NUMBER);
+    private SparseArray<CpuScalingPolicyPower> mCpuScalingPolicies;
+    private static final String CPU_SCALING_POLICY_POWER_POLICY = "cpu.scaling_policy_power.policy";
+    private static final String CPU_SCALING_STEP_POWER_POLICY = "cpu.scaling_step_power.policy";
+
+    private void initCpuScalingPolicies() {
+        int policyCount = 0;
+        for (String key : sPowerItemMap.keySet()) {
+            if (key.startsWith(CPU_SCALING_POLICY_POWER_POLICY)) {
+                int policy =
+                        Integer.parseInt(key.substring(CPU_SCALING_POLICY_POWER_POLICY.length()));
+                policyCount = Math.max(policyCount, policy + 1);
+            }
+        }
+        for (String key : sPowerArrayMap.keySet()) {
+            if (key.startsWith(CPU_SCALING_STEP_POWER_POLICY)) {
+                int policy =
+                        Integer.parseInt(key.substring(CPU_SCALING_STEP_POWER_POLICY.length()));
+                policyCount = Math.max(policyCount, policy + 1);
+            }
+        }
+
+        if (policyCount > 0) {
+            mCpuScalingPolicies = new SparseArray<>(policyCount);
+            for (int policy = 0; policy < policyCount; policy++) {
+                Double policyPower = sPowerItemMap.get(CPU_SCALING_POLICY_POWER_POLICY + policy);
+                Double[] stepPower = sPowerArrayMap.get(CPU_SCALING_STEP_POWER_POLICY + policy);
+                if (policyPower != null || stepPower != null) {
+                    double[] primitiveStepPower;
+                    if (stepPower != null) {
+                        primitiveStepPower = new double[stepPower.length];
+                        for (int i = 0; i < stepPower.length; i++) {
+                            primitiveStepPower[i] = stepPower[i];
+                        }
+                    } else {
+                        primitiveStepPower = new double[0];
+                    }
+                    mCpuScalingPolicies.put(policy, new CpuScalingPolicyPower(
+                            policyPower != null ? policyPower : 0, primitiveStepPower));
+                }
+            }
+        } else {
+            // Legacy power_profile.xml
+            int cpuId = 0;
+            for (CpuClusterKey cpuCluster : mCpuClusters) {
+                policyCount = cpuId + 1;
+                cpuId += cpuCluster.numCpus;
+            }
+
+            if (policyCount > 0) {
+                mCpuScalingPolicies = new SparseArray<>(policyCount);
+                cpuId = 0;
+                for (CpuClusterKey cpuCluster : mCpuClusters) {
+                    double clusterPower = getAveragePower(cpuCluster.clusterPowerKey);
+                    double[] stepPower;
+                    int numSteps = getNumElements(cpuCluster.corePowerKey);
+                    if (numSteps != 0) {
+                        stepPower = new double[numSteps];
+                        for (int step = 0; step < numSteps; step++) {
+                            stepPower[step] = getAveragePower(cpuCluster.corePowerKey, step);
+                        }
+                    } else {
+                        stepPower = new double[1];
+                    }
+                    mCpuScalingPolicies.put(cpuId,
+                            new CpuScalingPolicyPower(clusterPower, stepPower));
+                    cpuId += cpuCluster.numCpus;
+                }
+            } else {
+                mCpuScalingPolicies = new SparseArray<>(1);
+                mCpuScalingPolicies.put(0,
+                        new CpuScalingPolicyPower(getAveragePower(POWER_CPU_ACTIVE),
+                                new double[]{0}));
+            }
+        }
     }
 
     /**
@@ -487,33 +564,38 @@
     public void initCpuPowerBrackets(int defaultCpuPowerBracketNumber) {
         boolean anyBracketsSpecified = false;
         boolean allBracketsSpecified = true;
-        for (int cluster = 0; cluster < mCpuClusters.length; cluster++) {
-            final int steps = getNumSpeedStepsInCpuCluster(cluster);
-            mCpuClusters[cluster].powerBrackets = new int[steps];
-            if (sPowerArrayMap.get(CPU_POWER_BRACKETS_PREFIX + cluster) != null) {
+        for (int i = mCpuScalingPolicies.size() - 1; i >= 0; i--) {
+            int policy = mCpuScalingPolicies.keyAt(i);
+            CpuScalingPolicyPower cpuScalingPolicyPower = mCpuScalingPolicies.valueAt(i);
+            final int steps = cpuScalingPolicyPower.stepPower.length;
+            cpuScalingPolicyPower.powerBrackets = new int[steps];
+            if (sPowerArrayMap.get(CPU_POWER_BRACKETS_PREFIX + policy) != null) {
                 anyBracketsSpecified = true;
             } else {
                 allBracketsSpecified = false;
             }
         }
-
         if (anyBracketsSpecified && !allBracketsSpecified) {
             throw new RuntimeException(
-                    "Power brackets should be specified for all clusters or no clusters");
+                    "Power brackets should be specified for all scaling policies or none");
         }
 
         mCpuPowerBracketCount = 0;
         if (allBracketsSpecified) {
-            for (int cluster = 0; cluster < mCpuClusters.length; cluster++) {
-                final Double[] data = sPowerArrayMap.get(CPU_POWER_BRACKETS_PREFIX + cluster);
-                if (data.length != mCpuClusters[cluster].powerBrackets.length) {
+            for (int i = mCpuScalingPolicies.size() - 1; i >= 0; i--) {
+                int policy = mCpuScalingPolicies.keyAt(i);
+                CpuScalingPolicyPower cpuScalingPolicyPower = mCpuScalingPolicies.valueAt(i);
+                final Double[] data = sPowerArrayMap.get(CPU_POWER_BRACKETS_PREFIX + policy);
+                if (data.length != cpuScalingPolicyPower.powerBrackets.length) {
                     throw new RuntimeException(
-                            "Wrong number of items in " + CPU_POWER_BRACKETS_PREFIX + cluster);
+                            "Wrong number of items in " + CPU_POWER_BRACKETS_PREFIX + policy
+                                    + ", expected: "
+                                    + cpuScalingPolicyPower.powerBrackets.length);
                 }
 
-                for (int i = 0; i < data.length; i++) {
-                    final int bracket = (int) Math.round(data[i]);
-                    mCpuClusters[cluster].powerBrackets[i] = bracket;
+                for (int j = 0; j < data.length; j++) {
+                    final int bracket = (int) Math.round(data[j]);
+                    cpuScalingPolicyPower.powerBrackets[j] = bracket;
                     if (bracket > mCpuPowerBracketCount) {
                         mCpuPowerBracketCount = bracket;
                     }
@@ -524,10 +606,12 @@
             double minPower = Double.MAX_VALUE;
             double maxPower = Double.MIN_VALUE;
             int stateCount = 0;
-            for (int cluster = 0; cluster < mCpuClusters.length; cluster++) {
-                final int steps = getNumSpeedStepsInCpuCluster(cluster);
+            for (int i = mCpuScalingPolicies.size() - 1; i >= 0; i--) {
+                int policy = mCpuScalingPolicies.keyAt(i);
+                CpuScalingPolicyPower cpuScalingPolicyPower = mCpuScalingPolicies.valueAt(i);
+                final int steps = cpuScalingPolicyPower.stepPower.length;
                 for (int step = 0; step < steps; step++) {
-                    final double power = getAveragePowerForCpuCore(cluster, step);
+                    final double power = getAveragePowerForCpuScalingStep(policy, step);
                     if (power < minPower) {
                         minPower = power;
                     }
@@ -541,10 +625,11 @@
             if (stateCount <= defaultCpuPowerBracketNumber) {
                 mCpuPowerBracketCount = stateCount;
                 int bracket = 0;
-                for (int cluster = 0; cluster < mCpuClusters.length; cluster++) {
-                    final int steps = getNumSpeedStepsInCpuCluster(cluster);
+                for (int i = 0; i < mCpuScalingPolicies.size(); i++) {
+                    CpuScalingPolicyPower cpuScalingPolicyPower = mCpuScalingPolicies.valueAt(i);
+                    final int steps = cpuScalingPolicyPower.stepPower.length;
                     for (int step = 0; step < steps; step++) {
-                        mCpuClusters[cluster].powerBrackets[step] = bracket++;
+                        cpuScalingPolicyPower.powerBrackets[step] = bracket++;
                     }
                 }
             } else {
@@ -553,27 +638,70 @@
                 final double logBracket = (Math.log(maxPower) - minLogPower)
                         / defaultCpuPowerBracketNumber;
 
-                for (int cluster = 0; cluster < mCpuClusters.length; cluster++) {
-                    final int steps = getNumSpeedStepsInCpuCluster(cluster);
+                for (int i = mCpuScalingPolicies.size() - 1; i >= 0; i--) {
+                    int policy = mCpuScalingPolicies.keyAt(i);
+                    CpuScalingPolicyPower cpuScalingPolicyPower = mCpuScalingPolicies.valueAt(i);
+                    final int steps = cpuScalingPolicyPower.stepPower.length;
                     for (int step = 0; step < steps; step++) {
-                        final double power = getAveragePowerForCpuCore(cluster, step);
+                        final double power = getAveragePowerForCpuScalingStep(policy, step);
                         int bracket = (int) ((Math.log(power) - minLogPower) / logBracket);
                         if (bracket >= defaultCpuPowerBracketNumber) {
                             bracket = defaultCpuPowerBracketNumber - 1;
                         }
-                        mCpuClusters[cluster].powerBrackets[step] = bracket;
+                        cpuScalingPolicyPower.powerBrackets[step] = bracket;
                     }
                 }
             }
         }
     }
 
+    private static class CpuScalingPolicyPower {
+        public final double policyPower;
+        public final double[] stepPower;
+        public int[] powerBrackets;
+
+        private CpuScalingPolicyPower(double policyPower, double[] stepPower) {
+            this.policyPower = policyPower;
+            this.stepPower = stepPower;
+        }
+    }
+
+    /**
+     * Returns the average additional power in (mA) when the CPU scaling policy <code>policy</code>
+     * is used.
+     *
+     * @param policy Policy ID as per <code>ls /sys/devices/system/cpu/cpufreq</code>. Typically,
+     *               policy ID corresponds to the index of the first related CPU, e.g. for "policy6"
+     *               <code>/sys/devices/system/cpu/cpufreq/policy6/related_cpus</code> will
+     *               contain CPU IDs like <code>6, 7</code>
+     */
+    public double getAveragePowerForCpuScalingPolicy(int policy) {
+        CpuScalingPolicyPower cpuScalingPolicyPower = mCpuScalingPolicies.get(policy);
+        if (cpuScalingPolicyPower != null) {
+            return cpuScalingPolicyPower.policyPower;
+        }
+        return 0;
+    }
+
+    /**
+     * Returns the average additional power in (mA) when the CPU scaling policy <code>policy</code>
+     * is used at the <code>step</code> frequency step (this is not the frequency itself, but the
+     * integer index of the frequency step).
+     */
+    public double getAveragePowerForCpuScalingStep(int policy, int step) {
+        CpuScalingPolicyPower cpuScalingPolicyPower = mCpuScalingPolicies.get(policy);
+        if (cpuScalingPolicyPower != null
+                && step >= 0 && step < cpuScalingPolicyPower.stepPower.length) {
+            return cpuScalingPolicyPower.stepPower[step];
+        }
+        return 0;
+    }
+
     private static class CpuClusterKey {
         public final String freqKey;
         public final String clusterPowerKey;
         public final String corePowerKey;
         public final int numCpus;
-        public int[] powerBrackets;
 
         private CpuClusterKey(String freqKey, String clusterPowerKey,
                 String corePowerKey, int numCpus) {
@@ -584,11 +712,19 @@
         }
     }
 
+    /**
+     * @deprecated Use CpuScalingPolicy instead
+     */
     @UnsupportedAppUsage
+    @Deprecated
     public int getNumCpuClusters() {
         return mCpuClusters.length;
     }
 
+    /**
+     * @deprecated Use CpuScalingPolicy instead
+     */
+    @Deprecated
     public int getNumCoresInCpuCluster(int cluster) {
         if (cluster < 0 || cluster >= mCpuClusters.length) {
             return 0; // index out of bound
@@ -596,7 +732,11 @@
         return mCpuClusters[cluster].numCpus;
     }
 
+    /**
+     * @deprecated Use CpuScalingPolicy instead
+     */
     @UnsupportedAppUsage
+    @Deprecated
     public int getNumSpeedStepsInCpuCluster(int cluster) {
         if (cluster < 0 || cluster >= mCpuClusters.length) {
             return 0; // index out of bound
@@ -607,6 +747,10 @@
         return 1; // Only one speed
     }
 
+    /**
+     * @deprecated Use getAveragePowerForCpuScalingPolicy
+     */
+    @Deprecated
     public double getAveragePowerForCpuCluster(int cluster) {
         if (cluster >= 0 && cluster < mCpuClusters.length) {
             return getAveragePower(mCpuClusters[cluster].clusterPowerKey);
@@ -614,6 +758,10 @@
         return 0;
     }
 
+    /**
+     * @deprecated Use getAveragePowerForCpuScalingStep
+     */
+    @Deprecated
     public double getAveragePowerForCpuCore(int cluster, int step) {
         if (cluster >= 0 && cluster < mCpuClusters.length) {
             return getAveragePower(mCpuClusters[cluster].corePowerKey, step);
@@ -631,26 +779,28 @@
     /**
      * Description of a CPU power bracket: which cluster/frequency combinations are included.
      */
-    public String getCpuPowerBracketDescription(int powerBracket) {
+    public String getCpuPowerBracketDescription(CpuScalingPolicies cpuScalingPolicies,
+            int powerBracket) {
         StringBuilder sb = new StringBuilder();
-        for (int cluster = 0; cluster < mCpuClusters.length; cluster++) {
-            int[] brackets = mCpuClusters[cluster].powerBrackets;
+        for (int i = 0; i < mCpuScalingPolicies.size(); i++) {
+            int policy = mCpuScalingPolicies.keyAt(i);
+            CpuScalingPolicyPower cpuScalingPolicyPower = mCpuScalingPolicies.valueAt(i);
+            int[] brackets = cpuScalingPolicyPower.powerBrackets;
+            int[] freqs = cpuScalingPolicies.getFrequencies(policy);
             for (int step = 0; step < brackets.length; step++) {
                 if (brackets[step] == powerBracket) {
                     if (sb.length() != 0) {
                         sb.append(", ");
                     }
-                    if (mCpuClusters.length > 1) {
-                        sb.append(cluster).append('/');
+                    if (mCpuScalingPolicies.size() > 1) {
+                        sb.append(policy).append('/');
                     }
-                    Double[] freqs = sPowerArrayMap.get(mCpuClusters[cluster].freqKey);
-                    if (freqs != null && step < freqs.length) {
-                        // Frequency in MHz
-                        sb.append(freqs[step].intValue() / 1000);
+                    if (step < freqs.length) {
+                        sb.append(freqs[step] / 1000);
                     }
                     sb.append('(');
                     sb.append(String.format(Locale.US, "%.1f",
-                            getAveragePowerForCpuCore(cluster, step)));
+                            getAveragePowerForCpuScalingStep(policy, step)));
                     sb.append(')');
                 }
             }
@@ -659,19 +809,18 @@
     }
 
     /**
-     * Returns the CPU power bracket corresponding to the specified cluster and frequency step
+     * Returns the CPU power bracket corresponding to the specified scaling policy and frequency
+     * step
      */
-    public int getPowerBracketForCpuCore(int cluster, int step) {
-        if (cluster >= 0
-                && cluster < mCpuClusters.length
-                && step >= 0
-                && step < mCpuClusters[cluster].powerBrackets.length) {
-            return mCpuClusters[cluster].powerBrackets[step];
+    public int getCpuPowerBracketForScalingStep(int policy, int step) {
+        CpuScalingPolicyPower cpuScalingPolicyPower = mCpuScalingPolicies.get(policy);
+        if (cpuScalingPolicyPower != null
+                && step >= 0 && step < cpuScalingPolicyPower.powerBrackets.length) {
+            return cpuScalingPolicyPower.powerBrackets[step];
         }
         return 0;
     }
 
-
     private int mNumDisplays;
 
     private void initDisplays() {
diff --git a/core/java/com/android/internal/os/TEST_MAPPING b/core/java/com/android/internal/os/TEST_MAPPING
index 60b160a..d552e0b 100644
--- a/core/java/com/android/internal/os/TEST_MAPPING
+++ b/core/java/com/android/internal/os/TEST_MAPPING
@@ -38,11 +38,18 @@
       ],
       "name": "FrameworksServicesTests",
       "options": [
-        { "include-filter": "com.android.server.am.BatteryStatsServiceTest" },
-        { "include-filter": "com.android.server.power.stats.BatteryStatsTests" }
+        { "include-filter": "com.android.server.am.BatteryStatsServiceTest" }
       ]
     },
     {
+      "file_patterns": [
+        "Battery[^/]*\\.java",
+        "Kernel[^/]*\\.java",
+        "[^/]*Power[^/]*\\.java"
+      ],
+      "name": "PowerStatsTests"
+    },
+    {
       "name": "FrameworksCoreTests",
       "options": [
         {
diff --git a/core/java/com/android/internal/os/TimeoutRecord.java b/core/java/com/android/internal/os/TimeoutRecord.java
index f8a5520..e9a8d4b 100644
--- a/core/java/com/android/internal/os/TimeoutRecord.java
+++ b/core/java/com/android/internal/os/TimeoutRecord.java
@@ -152,7 +152,11 @@
 
     /** Record for a service exec timeout. */
     @NonNull
-    public static TimeoutRecord forServiceExec(@NonNull String reason) {
+    public static TimeoutRecord forServiceExec(@NonNull String shortInstanceName,
+            long timeoutDurationMs) {
+        String reason =
+                "executing service " + shortInstanceName + ", waited "
+                        + timeoutDurationMs + "ms";
         return TimeoutRecord.endingNow(TimeoutKind.SERVICE_EXEC, reason);
     }
 
diff --git a/core/java/com/android/internal/os/anr/AnrLatencyTracker.java b/core/java/com/android/internal/os/anr/AnrLatencyTracker.java
index 80d753c..f62ff38 100644
--- a/core/java/com/android/internal/os/anr/AnrLatencyTracker.java
+++ b/core/java/com/android/internal/os/anr/AnrLatencyTracker.java
@@ -24,6 +24,7 @@
 import static com.android.internal.util.FrameworkStatsLog.ANRLATENCY_REPORTED__ANR_TYPE__EXECUTING_SERVICE;
 import static com.android.internal.util.FrameworkStatsLog.ANRLATENCY_REPORTED__ANR_TYPE__INPUT_DISPATCHING_TIMEOUT;
 import static com.android.internal.util.FrameworkStatsLog.ANRLATENCY_REPORTED__ANR_TYPE__INPUT_DISPATCHING_TIMEOUT_NO_FOCUSED_WINDOW;
+import static com.android.internal.util.FrameworkStatsLog.ANRLATENCY_REPORTED__ANR_TYPE__JOB_SERVICE;
 import static com.android.internal.util.FrameworkStatsLog.ANRLATENCY_REPORTED__ANR_TYPE__SHORT_FGS_TIMEOUT;
 import static com.android.internal.util.FrameworkStatsLog.ANRLATENCY_REPORTED__ANR_TYPE__START_FOREGROUND_SERVICE;
 import static com.android.internal.util.FrameworkStatsLog.ANRLATENCY_REPORTED__ANR_TYPE__UNKNOWN_ANR_TYPE;
@@ -545,6 +546,8 @@
                 return ANRLATENCY_REPORTED__ANR_TYPE__CONTENT_PROVIDER_NOT_RESPONDING;
             case TimeoutKind.SHORT_FGS_TIMEOUT:
                 return ANRLATENCY_REPORTED__ANR_TYPE__SHORT_FGS_TIMEOUT;
+            case TimeoutKind.JOB_SERVICE:
+                return ANRLATENCY_REPORTED__ANR_TYPE__JOB_SERVICE;
             default:
                 return ANRLATENCY_REPORTED__ANR_TYPE__UNKNOWN_ANR_TYPE;
         }
diff --git a/core/java/com/android/internal/power/TEST_MAPPING b/core/java/com/android/internal/power/TEST_MAPPING
index c6cab18..1946f5c 100644
--- a/core/java/com/android/internal/power/TEST_MAPPING
+++ b/core/java/com/android/internal/power/TEST_MAPPING
@@ -8,11 +8,7 @@
       ]
     },
     {
-      "name": "FrameworksServicesTests",
-      "options": [
-        { "include-filter": "com.android.server.am.BatteryStatsServiceTest" },
-        { "include-filter": "com.android.server.power.stats.BatteryStatsTests" }
-      ]
+      "name": "PowerStatsTests"
     }
   ]
 }
diff --git a/core/java/com/android/internal/security/TEST_MAPPING b/core/java/com/android/internal/security/TEST_MAPPING
index b47ecec..2d598dc 100644
--- a/core/java/com/android/internal/security/TEST_MAPPING
+++ b/core/java/com/android/internal/security/TEST_MAPPING
@@ -20,12 +20,7 @@
       "file_patterns": ["VerityUtils\\.java"]
     },
     {
-      "name": "CtsAppSecurityHostTestCases",
-      "options": [
-        {
-          "include-filter": "android.appsecurity.cts.ApkVerityInstallTest"
-        }
-      ],
+      "name": "CtsApkVerityInstallHostTestCases",
       "file_patterns": ["VerityUtils\\.java"]
     }
   ]
diff --git a/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl
index 8a02dd6..dadeb2b 100644
--- a/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl
+++ b/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl
@@ -60,9 +60,7 @@
     @UnsupportedAppUsage(maxTargetSdk = 28)
     void notifyCallForwardingChanged(boolean cfi);
     void notifyCallForwardingChangedForSubscriber(in int subId, boolean cfi);
-    @UnsupportedAppUsage(maxTargetSdk = 28)
-    void notifyDataActivity(int state);
-    void notifyDataActivityForSubscriber(in int subId, int state);
+    void notifyDataActivityForSubscriber(int phoneId, int subId, int state);
     void notifyDataConnectionForSubscriber(
             int phoneId, int subId, in PreciseDataConnectionState preciseState);
     // Uses CellIdentity which is Parcelable here; will convert to CellLocation in client.
diff --git a/core/java/com/android/internal/vibrator/OWNERS b/core/java/com/android/internal/vibrator/OWNERS
new file mode 100644
index 0000000..d073e2b
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/OWNERS
@@ -0,0 +1 @@
+include platform/frameworks/base:/services/core/java/com/android/server/vibrator/OWNERS
diff --git a/core/java/com/android/internal/vibrator/persistence/SerializedAmplitudeStepWaveform.java b/core/java/com/android/internal/vibrator/persistence/SerializedAmplitudeStepWaveform.java
new file mode 100644
index 0000000..15ecedd
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/persistence/SerializedAmplitudeStepWaveform.java
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.vibrator.persistence;
+
+import static com.android.internal.vibrator.persistence.XmlConstants.ATTRIBUTE_AMPLITUDE;
+import static com.android.internal.vibrator.persistence.XmlConstants.ATTRIBUTE_DURATION_MS;
+import static com.android.internal.vibrator.persistence.XmlConstants.NAMESPACE;
+import static com.android.internal.vibrator.persistence.XmlConstants.TAG_REPEATING;
+import static com.android.internal.vibrator.persistence.XmlConstants.TAG_WAVEFORM_EFFECT;
+import static com.android.internal.vibrator.persistence.XmlConstants.TAG_WAVEFORM_ENTRY;
+import static com.android.internal.vibrator.persistence.XmlConstants.VALUE_AMPLITUDE_DEFAULT;
+
+import android.annotation.NonNull;
+import android.os.VibrationEffect;
+import android.util.IntArray;
+import android.util.LongArray;
+
+import com.android.internal.vibrator.persistence.SerializedVibrationEffect.SerializedSegment;
+import com.android.modules.utils.TypedXmlPullParser;
+import com.android.modules.utils.TypedXmlSerializer;
+
+import java.io.IOException;
+import java.util.Arrays;
+
+/**
+ * Serialized representation of a waveform effect created via
+ * {@link VibrationEffect#createWaveform(long[], int[], int)}.
+ *
+ * @hide
+ */
+final class SerializedAmplitudeStepWaveform implements SerializedSegment {
+
+    @NonNull private final long[] mTimings;
+    @NonNull private final int[] mAmplitudes;
+    private final int mRepeatIndex;
+
+    private SerializedAmplitudeStepWaveform(long[] timings, int[] amplitudes, int repeatIndex) {
+        mTimings = timings;
+        mAmplitudes = amplitudes;
+        mRepeatIndex = repeatIndex;
+    }
+
+    @Override
+    public void deserializeIntoComposition(@NonNull VibrationEffect.Composition composition) {
+        composition.addEffect(VibrationEffect.createWaveform(mTimings, mAmplitudes, mRepeatIndex));
+    }
+
+    @Override
+    public void write(@NonNull TypedXmlSerializer serializer) throws IOException {
+        serializer.startTag(NAMESPACE, TAG_WAVEFORM_EFFECT);
+
+        for (int i = 0; i < mTimings.length; i++) {
+            if (i == mRepeatIndex) {
+                serializer.startTag(NAMESPACE, TAG_REPEATING);
+            }
+            writeWaveformEntry(serializer, i);
+        }
+
+        if (mRepeatIndex >= 0) {
+            serializer.endTag(NAMESPACE, TAG_REPEATING);
+        }
+        serializer.endTag(NAMESPACE, TAG_WAVEFORM_EFFECT);
+    }
+
+    private void writeWaveformEntry(@NonNull TypedXmlSerializer serializer, int index)
+            throws IOException {
+        serializer.startTag(NAMESPACE, TAG_WAVEFORM_ENTRY);
+
+        if (mAmplitudes[index] == VibrationEffect.DEFAULT_AMPLITUDE) {
+            serializer.attribute(NAMESPACE, ATTRIBUTE_AMPLITUDE, VALUE_AMPLITUDE_DEFAULT);
+        } else {
+            serializer.attributeInt(NAMESPACE, ATTRIBUTE_AMPLITUDE, mAmplitudes[index]);
+        }
+
+        serializer.attributeLong(NAMESPACE, ATTRIBUTE_DURATION_MS, mTimings[index]);
+        serializer.endTag(NAMESPACE, TAG_WAVEFORM_ENTRY);
+    }
+
+    @Override
+    public String toString() {
+        return "SerializedAmplitudeStepWaveform{"
+                + "timings=" + Arrays.toString(mTimings)
+                + ", amplitudes=" + Arrays.toString(mAmplitudes)
+                + ", repeatIndex=" + mRepeatIndex
+                + '}';
+    }
+
+    /** Builder for {@link SerializedAmplitudeStepWaveform}. */
+    static final class Builder {
+        private final LongArray mTimings = new LongArray();
+        private final IntArray mAmplitudes = new IntArray();
+        private int mRepeatIndex = -1;
+
+        void addDurationAndAmplitude(long durationMs, int amplitude) {
+            mTimings.add(durationMs);
+            mAmplitudes.add(amplitude);
+        }
+
+        void setRepeatIndexToCurrentEntry() {
+            mRepeatIndex = mTimings.size();
+        }
+
+        boolean hasNonZeroDuration() {
+            for (int i = 0; i < mTimings.size(); i++) {
+                if (mTimings.get(i) > 0) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        SerializedAmplitudeStepWaveform build() {
+            return new SerializedAmplitudeStepWaveform(
+                    mTimings.toArray(), mAmplitudes.toArray(), mRepeatIndex);
+        }
+    }
+
+    /** Parser implementation for the {@link XmlConstants#TAG_WAVEFORM_EFFECT}. */
+    static final class Parser {
+
+        @NonNull
+        static SerializedAmplitudeStepWaveform parseNext(@NonNull TypedXmlPullParser parser)
+                throws XmlParserException, IOException {
+            XmlValidator.checkStartTag(parser, TAG_WAVEFORM_EFFECT);
+            XmlValidator.checkTagHasNoUnexpectedAttributes(parser);
+
+            Builder waveformBuilder = new Builder();
+            int outerDepth = parser.getDepth();
+
+            // Read all nested tag that is not a repeating tag as a waveform entry.
+            while (XmlReader.readNextTagWithin(parser, outerDepth)
+                    && !TAG_REPEATING.equals(parser.getName())) {
+                parseWaveformEntry(parser, waveformBuilder);
+            }
+
+            // If found a repeating tag, read its content.
+            if (TAG_REPEATING.equals(parser.getName())) {
+                parseRepeating(parser, waveformBuilder);
+            }
+
+            // Check schema assertions about <waveform-effect>
+            XmlValidator.checkParserCondition(waveformBuilder.hasNonZeroDuration(),
+                    "Unexpected %s tag with total duration zero", TAG_WAVEFORM_EFFECT);
+
+            // Consume tag
+            XmlReader.readEndTag(parser, TAG_WAVEFORM_EFFECT, outerDepth);
+
+            return waveformBuilder.build();
+        }
+
+        private static void parseRepeating(TypedXmlPullParser parser, Builder waveformBuilder)
+                throws XmlParserException, IOException {
+            XmlValidator.checkStartTag(parser, TAG_REPEATING);
+            XmlValidator.checkTagHasNoUnexpectedAttributes(parser);
+
+            waveformBuilder.setRepeatIndexToCurrentEntry();
+
+            boolean hasEntry = false;
+            int outerDepth = parser.getDepth();
+            while (XmlReader.readNextTagWithin(parser, outerDepth)) {
+                parseWaveformEntry(parser, waveformBuilder);
+                hasEntry = true;
+            }
+
+            // Check schema assertions about <repeating>
+            XmlValidator.checkParserCondition(hasEntry, "Unexpected empty %s tag", TAG_REPEATING);
+
+            // Consume tag
+            XmlReader.readEndTag(parser, TAG_REPEATING, outerDepth);
+        }
+
+        private static void parseWaveformEntry(TypedXmlPullParser parser, Builder waveformBuilder)
+                throws XmlParserException, IOException {
+            XmlValidator.checkStartTag(parser, TAG_WAVEFORM_ENTRY);
+            XmlValidator.checkTagHasNoUnexpectedAttributes(
+                    parser, ATTRIBUTE_DURATION_MS, ATTRIBUTE_AMPLITUDE);
+
+            String rawAmplitude = parser.getAttributeValue(NAMESPACE, ATTRIBUTE_AMPLITUDE);
+            int amplitude = VALUE_AMPLITUDE_DEFAULT.equals(rawAmplitude)
+                    ? VibrationEffect.DEFAULT_AMPLITUDE
+                    : XmlReader.readAttributeIntInRange(
+                            parser, ATTRIBUTE_AMPLITUDE, 0, VibrationEffect.MAX_AMPLITUDE);
+            int durationMs = XmlReader.readAttributeIntNonNegative(parser, ATTRIBUTE_DURATION_MS);
+
+            waveformBuilder.addDurationAndAmplitude(durationMs, amplitude);
+
+            // Consume tag
+            XmlReader.readEndTag(parser);
+        }
+    }
+}
diff --git a/core/java/com/android/internal/vibrator/persistence/SerializedCompositionPrimitive.java b/core/java/com/android/internal/vibrator/persistence/SerializedCompositionPrimitive.java
new file mode 100644
index 0000000..db5c7ff
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/persistence/SerializedCompositionPrimitive.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.vibrator.persistence;
+
+import static com.android.internal.vibrator.persistence.XmlConstants.ATTRIBUTE_DELAY_MS;
+import static com.android.internal.vibrator.persistence.XmlConstants.ATTRIBUTE_NAME;
+import static com.android.internal.vibrator.persistence.XmlConstants.ATTRIBUTE_SCALE;
+import static com.android.internal.vibrator.persistence.XmlConstants.NAMESPACE;
+import static com.android.internal.vibrator.persistence.XmlConstants.TAG_PRIMITIVE_EFFECT;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.VibrationEffect;
+import android.os.vibrator.PrimitiveSegment;
+
+import com.android.internal.vibrator.persistence.SerializedVibrationEffect.SerializedSegment;
+import com.android.internal.vibrator.persistence.XmlConstants.PrimitiveEffectName;
+import com.android.modules.utils.TypedXmlPullParser;
+import com.android.modules.utils.TypedXmlSerializer;
+
+import java.io.IOException;
+
+/**
+ * Serialized representation of a single {@link PrimitiveSegment} created via
+ * {@link VibrationEffect.Composition#addPrimitive(int, float, int)}.
+ *
+ * @hide
+ */
+final class SerializedCompositionPrimitive implements SerializedSegment {
+
+    @NonNull
+    private final PrimitiveEffectName mPrimitiveName;
+    private final float mPrimitiveScale;
+    private final int mPrimitiveDelayMs;
+
+    SerializedCompositionPrimitive(PrimitiveEffectName primitiveName, float scale, int delayMs) {
+        mPrimitiveName = primitiveName;
+        mPrimitiveScale = scale;
+        mPrimitiveDelayMs = delayMs;
+    }
+
+    @Override
+    public void deserializeIntoComposition(@NonNull VibrationEffect.Composition composition) {
+        composition.addPrimitive(mPrimitiveName.getPrimitiveId(), mPrimitiveScale,
+                mPrimitiveDelayMs);
+    }
+
+    @Override
+    public void write(@NonNull TypedXmlSerializer serializer) throws IOException {
+        serializer.startTag(NAMESPACE, TAG_PRIMITIVE_EFFECT);
+        serializer.attribute(NAMESPACE, ATTRIBUTE_NAME, mPrimitiveName.toString());
+
+        if (Float.compare(mPrimitiveScale, PrimitiveSegment.DEFAULT_SCALE) != 0) {
+            serializer.attributeFloat(NAMESPACE, ATTRIBUTE_SCALE, mPrimitiveScale);
+        }
+
+        if (mPrimitiveDelayMs != PrimitiveSegment.DEFAULT_DELAY_MILLIS) {
+            serializer.attributeInt(NAMESPACE, ATTRIBUTE_DELAY_MS, mPrimitiveDelayMs);
+        }
+
+        serializer.endTag(NAMESPACE, TAG_PRIMITIVE_EFFECT);
+    }
+
+    @Override
+    public String toString() {
+        return "SerializedCompositionPrimitive{"
+                + "name=" + mPrimitiveName
+                + ", scale=" + mPrimitiveScale
+                + ", delayMs=" + mPrimitiveDelayMs
+                + '}';
+    }
+
+    /** Parser implementation for {@link SerializedCompositionPrimitive}. */
+    static final class Parser {
+
+        @NonNull
+        static SerializedCompositionPrimitive parseNext(@NonNull TypedXmlPullParser parser)
+                throws XmlParserException, IOException {
+            XmlValidator.checkStartTag(parser, TAG_PRIMITIVE_EFFECT);
+            XmlValidator.checkTagHasNoUnexpectedAttributes(parser,
+                    ATTRIBUTE_NAME, ATTRIBUTE_DELAY_MS, ATTRIBUTE_SCALE);
+
+            PrimitiveEffectName primitiveName = parsePrimitiveName(
+                    parser.getAttributeValue(NAMESPACE, ATTRIBUTE_NAME));
+            float scale = XmlReader.readAttributeFloatInRange(
+                    parser, ATTRIBUTE_SCALE, 0, 1, PrimitiveSegment.DEFAULT_SCALE);
+            int delayMs = XmlReader.readAttributeIntNonNegative(
+                    parser, ATTRIBUTE_DELAY_MS, PrimitiveSegment.DEFAULT_DELAY_MILLIS);
+
+            // Consume tag
+            XmlReader.readEndTag(parser);
+
+            return new SerializedCompositionPrimitive(primitiveName, scale, delayMs);
+        }
+
+        @NonNull
+        private static PrimitiveEffectName parsePrimitiveName(@Nullable String name)
+                throws XmlParserException {
+            if (name == null) {
+                throw new XmlParserException("Missing primitive effect name");
+            }
+            PrimitiveEffectName effectName = PrimitiveEffectName.findByName(name);
+            if (effectName == null) {
+                throw new XmlParserException("Unexpected primitive effect name " + name);
+            }
+            return effectName;
+        }
+    }
+}
diff --git a/core/java/com/android/internal/vibrator/persistence/SerializedPredefinedEffect.java b/core/java/com/android/internal/vibrator/persistence/SerializedPredefinedEffect.java
new file mode 100644
index 0000000..8924311
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/persistence/SerializedPredefinedEffect.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.vibrator.persistence;
+
+import static com.android.internal.vibrator.persistence.XmlConstants.ATTRIBUTE_FALLBACK;
+import static com.android.internal.vibrator.persistence.XmlConstants.ATTRIBUTE_NAME;
+import static com.android.internal.vibrator.persistence.XmlConstants.NAMESPACE;
+import static com.android.internal.vibrator.persistence.XmlConstants.TAG_PREDEFINED_EFFECT;
+
+import android.annotation.NonNull;
+import android.os.VibrationEffect;
+import android.os.vibrator.PrebakedSegment;
+
+import com.android.internal.vibrator.persistence.SerializedVibrationEffect.SerializedSegment;
+import com.android.internal.vibrator.persistence.XmlConstants.PredefinedEffectName;
+import com.android.modules.utils.TypedXmlPullParser;
+import com.android.modules.utils.TypedXmlSerializer;
+
+import java.io.IOException;
+
+/**
+ * Serialized representation of a predefined effect created via
+ * {@link VibrationEffect#get(int, boolean)}.
+ *
+ * @hide
+ */
+final class SerializedPredefinedEffect implements SerializedSegment {
+
+    @NonNull
+    private final PredefinedEffectName mEffectName;
+    private final boolean mShouldFallback;
+
+    SerializedPredefinedEffect(PredefinedEffectName effectName, boolean shouldFallback) {
+        mEffectName = effectName;
+        mShouldFallback = shouldFallback;
+    }
+
+    @Override
+    public void deserializeIntoComposition(@NonNull VibrationEffect.Composition composition) {
+        composition.addEffect(VibrationEffect.get(mEffectName.getEffectId(), mShouldFallback));
+    }
+
+    @Override
+    public void write(@NonNull TypedXmlSerializer serializer) throws IOException {
+        serializer.startTag(NAMESPACE, TAG_PREDEFINED_EFFECT);
+        serializer.attribute(NAMESPACE, ATTRIBUTE_NAME, mEffectName.toString());
+        if (mShouldFallback != PrebakedSegment.DEFAULT_SHOULD_FALLBACK) {
+            serializer.attributeBoolean(NAMESPACE, ATTRIBUTE_FALLBACK, mShouldFallback);
+        }
+        serializer.endTag(NAMESPACE, TAG_PREDEFINED_EFFECT);
+    }
+
+    @Override
+    public String toString() {
+        return "SerializedPredefinedEffect{"
+                + "name=" + mEffectName
+                + ", fallback=" + mShouldFallback
+                + '}';
+    }
+
+    /** Parser implementation for {@link SerializedPredefinedEffect}. */
+    static final class Parser {
+
+        @NonNull
+        static SerializedPredefinedEffect parseNext(@NonNull TypedXmlPullParser parser,
+                @XmlConstants.Flags int flags) throws XmlParserException, IOException {
+            XmlValidator.checkStartTag(parser, TAG_PREDEFINED_EFFECT);
+
+            boolean allowHidden = (flags & XmlConstants.FLAG_ALLOW_HIDDEN_APIS) != 0;
+            if (allowHidden) {
+                XmlValidator.checkTagHasNoUnexpectedAttributes(parser, ATTRIBUTE_NAME,
+                        ATTRIBUTE_FALLBACK);
+            } else {
+                XmlValidator.checkTagHasNoUnexpectedAttributes(parser, ATTRIBUTE_NAME);
+            }
+
+            String nameAttr = parser.getAttributeValue(NAMESPACE, ATTRIBUTE_NAME);
+            if (nameAttr == null) {
+                throw new XmlParserException("Missing predefined effect name");
+            }
+            PredefinedEffectName effectName = PredefinedEffectName.findByName(nameAttr, flags);
+            if (effectName == null) {
+                throw new XmlParserException("Unexpected predefined effect name " + nameAttr);
+            }
+
+            boolean defaultFallback = PrebakedSegment.DEFAULT_SHOULD_FALLBACK;
+            boolean fallback = allowHidden
+                    ? parser.getAttributeBoolean(NAMESPACE, ATTRIBUTE_FALLBACK, defaultFallback)
+                    : defaultFallback;
+
+            // Consume tag
+            XmlReader.readEndTag(parser);
+
+            return new SerializedPredefinedEffect(effectName, fallback);
+        }
+    }
+}
diff --git a/core/java/com/android/internal/vibrator/persistence/SerializedVibrationEffect.java b/core/java/com/android/internal/vibrator/persistence/SerializedVibrationEffect.java
new file mode 100644
index 0000000..84e8647
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/persistence/SerializedVibrationEffect.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.vibrator.persistence;
+
+import static com.android.internal.util.Preconditions.checkArgument;
+
+import static java.util.Objects.requireNonNull;
+
+import android.annotation.NonNull;
+import android.os.VibrationEffect;
+
+import com.android.modules.utils.TypedXmlSerializer;
+
+import java.io.IOException;
+import java.util.Arrays;
+
+/**
+ * Serialized representation of a {@link VibrationEffect}.
+ *
+ * <p>The vibration is represented by a list of serialized segments that can be added to a
+ * {@link VibrationEffect.Composition} during the {@link #deserialize()} procedure.
+ *
+ * @hide
+ */
+final class SerializedVibrationEffect implements XmlSerializedVibration<VibrationEffect> {
+
+    @NonNull
+    private final SerializedSegment[] mSegments;
+
+    SerializedVibrationEffect(@NonNull SerializedSegment segment) {
+        requireNonNull(segment);
+        mSegments = new SerializedSegment[]{ segment };
+    }
+
+    SerializedVibrationEffect(@NonNull SerializedSegment[] segments) {
+        requireNonNull(segments);
+        checkArgument(segments.length > 0, "Unsupported empty vibration");
+        mSegments = segments;
+    }
+
+    @NonNull
+    @Override
+    public VibrationEffect deserialize() {
+        VibrationEffect.Composition composition = VibrationEffect.startComposition();
+        for (SerializedSegment segment : mSegments) {
+            segment.deserializeIntoComposition(composition);
+        }
+        return composition.compose();
+    }
+
+    @Override
+    public void write(@NonNull TypedXmlSerializer serializer)
+            throws IOException {
+        serializer.startTag(XmlConstants.NAMESPACE, XmlConstants.TAG_VIBRATION);
+        writeContent(serializer);
+        serializer.endTag(XmlConstants.NAMESPACE, XmlConstants.TAG_VIBRATION);
+    }
+
+    @Override
+    public void writeContent(@NonNull TypedXmlSerializer serializer) throws IOException {
+        for (SerializedSegment segment : mSegments) {
+            segment.write(serializer);
+        }
+    }
+
+    @Override
+    public String toString() {
+        return "SerializedVibrationEffect{"
+                + "segments=" + Arrays.toString(mSegments)
+                + '}';
+    }
+
+    /**
+     * Serialized representation of a generic part of a {@link VibrationEffect}.
+     *
+     * <p>This can represent a single {@link android.os.vibrator.VibrationEffectSegment} (e.g. a
+     * single primitive or predefined effect) or a more complex effect, like a repeating
+     * amplitude-step waveform.
+     *
+     * @see XmlSerializedVibration
+     */
+    interface SerializedSegment {
+
+        /** Writes this segment into a {@link TypedXmlSerializer}. */
+        void write(@NonNull TypedXmlSerializer serializer) throws IOException;
+
+        /** Adds this segment into a {@link VibrationEffect.Composition}. */
+        void deserializeIntoComposition(@NonNull VibrationEffect.Composition composition);
+    }
+}
diff --git a/core/java/com/android/internal/vibrator/persistence/VibrationEffectXmlParser.java b/core/java/com/android/internal/vibrator/persistence/VibrationEffectXmlParser.java
new file mode 100644
index 0000000..3561fe4
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/persistence/VibrationEffectXmlParser.java
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.vibrator.persistence;
+
+import static com.android.internal.vibrator.persistence.XmlConstants.TAG_PREDEFINED_EFFECT;
+import static com.android.internal.vibrator.persistence.XmlConstants.TAG_PRIMITIVE_EFFECT;
+import static com.android.internal.vibrator.persistence.XmlConstants.TAG_VIBRATION;
+import static com.android.internal.vibrator.persistence.XmlConstants.TAG_WAVEFORM_EFFECT;
+
+import android.annotation.NonNull;
+import android.os.VibrationEffect;
+
+import com.android.internal.vibrator.persistence.SerializedVibrationEffect.SerializedSegment;
+import com.android.modules.utils.TypedXmlPullParser;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Parser implementation for {@link VibrationEffect}.
+ *
+ * <p>This parser supports the schema defined by services/core/xsd/vibrator/vibration/vibration.xsd.
+ *
+ * <p>This parser does not support effects created with {@link VibrationEffect.WaveformBuilder} nor
+ * {@link VibrationEffect.Composition#addEffect(VibrationEffect)}. It only supports vibration
+ * effects defined as:
+ *
+ * * Predefined vibration effects
+ *
+ * <pre>
+ *   {@code
+ *     <vibration>
+ *       <predefined-effect name="click" />
+ *     </vibration>
+ *   }
+ * </pre>
+ *
+ * * Waveform vibration effects
+ *
+ * <pre>
+ *   {@code
+ *     <vibration>
+ *       <waveform-effect>
+ *         <waveform-entry amplitude="default" durationMs="10" />
+ *         <waveform-entry amplitude="0" durationMs="10" />
+ *         <waveform-entry amplitude="255" durationMs="100" />
+ *         <repeating>
+ *           <waveform-entry amplitude="128" durationMs="30" />
+ *           <waveform-entry amplitude="192" durationMs="60" />
+ *           <waveform-entry amplitude="255" durationMs="20" />
+ *         </repeating>
+ *       </waveform-effect>
+ *     </vibration>
+ *   }
+ * </pre>
+ *
+ * * Primitive composition effects
+ *
+ * <pre>
+ *   {@code
+ *     <vibration>
+ *       <primitive-effect name="click" />
+ *       <primitive-effect name="tick" scale="0.5" delayMs="100" />
+ *     </vibration>
+ *   }
+ * </pre>
+ *
+ * @hide
+ */
+public class VibrationEffectXmlParser {
+
+    /**
+     * Parses the current XML tag with all nested tags into a single {@link XmlSerializedVibration}
+     * wrapping a {@link VibrationEffect}.
+     *
+     * @see XmlParser#parseTag(TypedXmlPullParser)
+     */
+    @NonNull
+    public static XmlSerializedVibration<VibrationEffect> parseTag(
+            @NonNull TypedXmlPullParser parser, @XmlConstants.Flags int flags)
+            throws XmlParserException, IOException {
+        XmlValidator.checkStartTag(parser, TAG_VIBRATION);
+        XmlValidator.checkTagHasNoUnexpectedAttributes(parser);
+
+        return parseVibrationContent(parser, flags);
+    }
+
+    /**
+     * Reads all tags within the currently open tag into a serialized representation of a
+     * {@link VibrationEffect}, skipping any validation for the top level tag itself.
+     *
+     * <p>This can be reused for reading a vibration from an XML root tag or from within a combined
+     * vibration, but it should always be called from places that validates the top level tag.
+     */
+    static SerializedVibrationEffect parseVibrationContent(TypedXmlPullParser parser,
+            @XmlConstants.Flags int flags) throws XmlParserException, IOException {
+        String vibrationTagName = parser.getName();
+        int vibrationTagDepth = parser.getDepth();
+
+        XmlValidator.checkParserCondition(
+                XmlReader.readNextTagWithin(parser, vibrationTagDepth),
+                "Unsupported empty vibration tag");
+
+        SerializedVibrationEffect serializedVibration;
+
+        switch (parser.getName()) {
+            case TAG_PREDEFINED_EFFECT:
+                serializedVibration = new SerializedVibrationEffect(
+                        SerializedPredefinedEffect.Parser.parseNext(parser, flags));
+                break;
+            case TAG_PRIMITIVE_EFFECT:
+                List<SerializedSegment> primitives = new ArrayList<>();
+                do { // First primitive tag already open
+                    primitives.add(SerializedCompositionPrimitive.Parser.parseNext(parser));
+                } while (XmlReader.readNextTagWithin(parser, vibrationTagDepth));
+                serializedVibration = new SerializedVibrationEffect(
+                        primitives.toArray(new SerializedSegment[primitives.size()]));
+                break;
+            case TAG_WAVEFORM_EFFECT:
+                serializedVibration = new SerializedVibrationEffect(
+                        SerializedAmplitudeStepWaveform.Parser.parseNext(parser));
+                break;
+            default:
+                throw new XmlParserException("Unexpected tag " + parser.getName()
+                        + " in vibration tag " + vibrationTagName);
+        }
+
+        // Consume tag.
+        XmlReader.readEndTag(parser, vibrationTagName, vibrationTagDepth);
+
+        return serializedVibration;
+    }
+}
diff --git a/core/java/com/android/internal/vibrator/persistence/VibrationEffectXmlSerializer.java b/core/java/com/android/internal/vibrator/persistence/VibrationEffectXmlSerializer.java
new file mode 100644
index 0000000..f561c14
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/persistence/VibrationEffectXmlSerializer.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.vibrator.persistence;
+
+import android.annotation.NonNull;
+import android.os.VibrationEffect;
+import android.os.vibrator.PrebakedSegment;
+import android.os.vibrator.PrimitiveSegment;
+import android.os.vibrator.StepSegment;
+import android.os.vibrator.VibrationEffectSegment;
+
+import com.android.internal.vibrator.persistence.SerializedVibrationEffect.SerializedSegment;
+import com.android.internal.vibrator.persistence.XmlConstants.PredefinedEffectName;
+import com.android.internal.vibrator.persistence.XmlConstants.PrimitiveEffectName;
+
+import java.util.List;
+
+/**
+ * Serializer implementation for {@link VibrationEffect}.
+ *
+ * <p>This serializer does not support effects created with {@link VibrationEffect.WaveformBuilder}
+ * nor {@link VibrationEffect.Composition#addEffect(VibrationEffect)}. It only supports vibration
+ * effects defined as:
+ *
+ * <ul>
+ *     <li>{@link VibrationEffect#createPredefined(int)}
+ *     <li>{@link VibrationEffect#createWaveform(long[], int[], int)}
+ *     <li>A composition created exclusively via
+ *         {@link VibrationEffect.Composition#addPrimitive(int, float, int)}
+ * </ul>
+ *
+ * @hide
+ */
+public final class VibrationEffectXmlSerializer {
+
+    /**
+     * Creates a serialized representation of the input {@code vibration}.
+     *
+     * @see XmlSerializer#serialize
+     */
+    @NonNull
+    public static XmlSerializedVibration<VibrationEffect> serialize(
+            @NonNull VibrationEffect vibration, @XmlConstants.Flags int flags)
+            throws XmlSerializerException {
+        XmlValidator.checkSerializerCondition(vibration instanceof VibrationEffect.Composed,
+                "Unsupported VibrationEffect type %s", vibration);
+
+        VibrationEffect.Composed composed = (VibrationEffect.Composed) vibration;
+        XmlValidator.checkSerializerCondition(!composed.getSegments().isEmpty(),
+                "Unsupported empty VibrationEffect %s", vibration);
+
+        VibrationEffectSegment firstSegment = composed.getSegments().get(0);
+        if (firstSegment instanceof PrebakedSegment) {
+            return serializePredefinedEffect(composed, flags);
+        }
+        if (firstSegment instanceof PrimitiveSegment) {
+            return serializePrimitiveEffect(composed);
+        }
+        return serializeWaveformEffect(composed);
+    }
+
+    private static SerializedVibrationEffect serializePredefinedEffect(
+            VibrationEffect.Composed effect, @XmlConstants.Flags int flags)
+            throws XmlSerializerException {
+        List<VibrationEffectSegment> segments = effect.getSegments();
+        XmlValidator.checkSerializerCondition(effect.getRepeatIndex() == -1,
+                "Unsupported repeating predefined effect %s", effect);
+        XmlValidator.checkSerializerCondition(segments.size() == 1,
+                "Unsupported multiple segments in predefined effect %s", effect);
+        return new SerializedVibrationEffect(serializePrebakedSegment(segments.get(0), flags));
+    }
+
+    private static SerializedVibrationEffect serializePrimitiveEffect(
+            VibrationEffect.Composed effect) throws XmlSerializerException {
+        List<VibrationEffectSegment> segments = effect.getSegments();
+        XmlValidator.checkSerializerCondition(effect.getRepeatIndex() == -1,
+                "Unsupported repeating primitive composition %s", effect);
+
+        SerializedSegment[] primitives = new SerializedSegment[segments.size()];
+        for (int i = 0; i < segments.size(); i++) {
+            primitives[i] = serializePrimitiveSegment(segments.get(i));
+        }
+
+        return new SerializedVibrationEffect(primitives);
+    }
+
+    private static SerializedVibrationEffect serializeWaveformEffect(
+            VibrationEffect.Composed effect) throws XmlSerializerException {
+        SerializedAmplitudeStepWaveform.Builder serializedWaveformBuilder =
+                new SerializedAmplitudeStepWaveform.Builder();
+
+        List<VibrationEffectSegment> segments = effect.getSegments();
+        for (int i = 0; i < segments.size(); i++) {
+            XmlValidator.checkSerializerCondition(segments.get(i) instanceof StepSegment,
+                    "Unsupported segment for waveform effect %s", segments.get(i));
+
+            StepSegment segment = (StepSegment) segments.get(i);
+            if (effect.getRepeatIndex() == i) {
+                serializedWaveformBuilder.setRepeatIndexToCurrentEntry();
+            }
+
+            XmlValidator.checkSerializerCondition(Float.compare(segment.getFrequencyHz(), 0) == 0,
+                    "Unsupported segment with non-default frequency %f", segment.getFrequencyHz());
+
+            serializedWaveformBuilder.addDurationAndAmplitude(
+                    segment.getDuration(), toAmplitudeInt(segment.getAmplitude()));
+        }
+
+        return new SerializedVibrationEffect(serializedWaveformBuilder.build());
+    }
+
+    private static SerializedPredefinedEffect serializePrebakedSegment(
+            VibrationEffectSegment segment, @XmlConstants.Flags int flags)
+            throws XmlSerializerException {
+        XmlValidator.checkSerializerCondition(segment instanceof PrebakedSegment,
+                "Unsupported segment for predefined effect %s", segment);
+
+        PrebakedSegment prebaked = (PrebakedSegment) segment;
+        PredefinedEffectName effectName = PredefinedEffectName.findById(
+                prebaked.getEffectId(), flags);
+
+        XmlValidator.checkSerializerCondition(effectName != null,
+                "Unsupported predefined effect id %s", prebaked.getEffectId());
+
+        if ((flags & XmlConstants.FLAG_ALLOW_HIDDEN_APIS) == 0) {
+            // Only allow effects with default fallback flag if using the public APIs schema.
+            XmlValidator.checkSerializerCondition(
+                    prebaked.shouldFallback() == PrebakedSegment.DEFAULT_SHOULD_FALLBACK,
+                    "Unsupported predefined effect with should fallback %s",
+                    prebaked.shouldFallback());
+        }
+
+        return new SerializedPredefinedEffect(effectName, prebaked.shouldFallback());
+    }
+
+    private static SerializedCompositionPrimitive serializePrimitiveSegment(
+            VibrationEffectSegment segment) throws XmlSerializerException {
+        XmlValidator.checkSerializerCondition(segment instanceof PrimitiveSegment,
+                "Unsupported segment for primitive composition %s", segment);
+
+        PrimitiveSegment primitive = (PrimitiveSegment) segment;
+        PrimitiveEffectName primitiveName =
+                PrimitiveEffectName.findById(primitive.getPrimitiveId());
+
+        XmlValidator.checkSerializerCondition(primitiveName != null,
+                "Unsupported primitive effect id %s", primitive.getPrimitiveId());
+
+        return new SerializedCompositionPrimitive(
+                primitiveName, primitive.getScale(), primitive.getDelay());
+    }
+
+    private static int toAmplitudeInt(float amplitude) {
+        return Float.compare(amplitude, VibrationEffect.DEFAULT_AMPLITUDE) == 0
+                ? VibrationEffect.DEFAULT_AMPLITUDE
+                : Math.round(amplitude * VibrationEffect.MAX_AMPLITUDE);
+    }
+}
diff --git a/core/java/com/android/internal/vibrator/persistence/XmlConstants.java b/core/java/com/android/internal/vibrator/persistence/XmlConstants.java
new file mode 100644
index 0000000..d1c78f0
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/persistence/XmlConstants.java
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.vibrator.persistence;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.VibrationEffect;
+import android.os.VibrationEffect.Composition.PrimitiveType;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Locale;
+
+/**
+ * Constants used for vibration XML serialization and parsing.
+ *
+ * @hide
+ */
+public final class XmlConstants {
+
+    public static final String NAMESPACE = null;
+
+    public static final String TAG_VIBRATION = "vibration";
+
+    public static final String TAG_PREDEFINED_EFFECT = "predefined-effect";
+    public static final String TAG_PRIMITIVE_EFFECT = "primitive-effect";
+    public static final String TAG_WAVEFORM_EFFECT = "waveform-effect";
+    public static final String TAG_WAVEFORM_ENTRY = "waveform-entry";
+    public static final String TAG_REPEATING = "repeating";
+
+    public static final String ATTRIBUTE_NAME = "name";
+    public static final String ATTRIBUTE_FALLBACK = "fallback";
+    public static final String ATTRIBUTE_DURATION_MS = "durationMs";
+    public static final String ATTRIBUTE_AMPLITUDE = "amplitude";
+    public static final String ATTRIBUTE_SCALE = "scale";
+    public static final String ATTRIBUTE_DELAY_MS = "delayMs";
+
+    public static final String VALUE_AMPLITUDE_DEFAULT = "default";
+
+    /**
+     * Allow {@link VibrationEffect} hidden APIs to be used during parsing/serializing.
+     *
+     * <p>Use the schema at services/core/xsd/vibrator/vibration/vibration-plus-hidden-apis.xsd.
+     */
+    public static final int FLAG_ALLOW_HIDDEN_APIS = 1 << 0;
+
+    /** @hide */
+    @IntDef(prefix = { "FLAG_" }, flag = true, value = {
+            FLAG_ALLOW_HIDDEN_APIS
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Flags {}
+
+    /** Represent supported values for attribute name in {@link #TAG_PRIMITIVE_EFFECT}  */
+    public enum PrimitiveEffectName {
+        LOW_TICK(VibrationEffect.Composition.PRIMITIVE_LOW_TICK),
+        TICK(VibrationEffect.Composition.PRIMITIVE_TICK),
+        CLICK(VibrationEffect.Composition.PRIMITIVE_CLICK),
+        SLOW_RISE(VibrationEffect.Composition.PRIMITIVE_SLOW_RISE),
+        QUICK_RISE(VibrationEffect.Composition.PRIMITIVE_QUICK_RISE),
+        QUICK_FALL(VibrationEffect.Composition.PRIMITIVE_QUICK_FALL),
+        SPIN(VibrationEffect.Composition.PRIMITIVE_SPIN),
+        THUD(VibrationEffect.Composition.PRIMITIVE_THUD);
+
+        @PrimitiveType private final int mPrimitiveId;
+
+        PrimitiveEffectName(@PrimitiveType int id) {
+            mPrimitiveId = id;
+        }
+
+        /**
+         * Return the {@link PrimitiveEffectName} that represents given primitive id, or null if
+         * none of the available names maps to the given id.
+         */
+        @Nullable
+        public static PrimitiveEffectName findById(int primitiveId) {
+            for (PrimitiveEffectName name : PrimitiveEffectName.values()) {
+                if (name.mPrimitiveId == primitiveId) {
+                    return name;
+                }
+            }
+            return null;
+        }
+
+        /**
+         * Return the {@link PrimitiveEffectName} that represents given primitive name, or null if
+         * none of the available names maps to the given name.
+         */
+        @Nullable
+        public static PrimitiveEffectName findByName(@NonNull String primitiveName) {
+            try {
+                return PrimitiveEffectName.valueOf(primitiveName.toUpperCase(Locale.ROOT));
+            } catch (IllegalArgumentException e) {
+                return null;
+            }
+        }
+
+        @PrimitiveType
+        public int getPrimitiveId() {
+            return mPrimitiveId;
+        }
+
+        @Override
+        public String toString() {
+            return name().toLowerCase(Locale.ROOT);
+        }
+    }
+
+    /** Represent supported values for attribute name in {@link #TAG_PREDEFINED_EFFECT}  */
+    public enum PredefinedEffectName {
+        // Public effects
+        TICK(VibrationEffect.EFFECT_TICK, true),
+        CLICK(VibrationEffect.EFFECT_CLICK, true),
+        HEAVY_CLICK(VibrationEffect.EFFECT_HEAVY_CLICK, true),
+        DOUBLE_CLICK(VibrationEffect.EFFECT_DOUBLE_CLICK, true),
+
+        // Hidden effects
+        TEXTURE_TICK(VibrationEffect.EFFECT_TEXTURE_TICK, false),
+        THUD(VibrationEffect.EFFECT_THUD, false),
+        POP(VibrationEffect.EFFECT_POP, false),
+        RINGTONE_1(VibrationEffect.RINGTONES[0], false),
+        RINGTONE_2(VibrationEffect.RINGTONES[1], false),
+        RINGTONE_3(VibrationEffect.RINGTONES[2], false),
+        RINGTONE_4(VibrationEffect.RINGTONES[3], false),
+        RINGTONE_5(VibrationEffect.RINGTONES[4], false),
+        RINGTONE_6(VibrationEffect.RINGTONES[5], false),
+        RINGTONE_7(VibrationEffect.RINGTONES[6], false),
+        RINGTONE_8(VibrationEffect.RINGTONES[7], false),
+        RINGTONE_9(VibrationEffect.RINGTONES[8], false),
+        RINGTONE_10(VibrationEffect.RINGTONES[9], false),
+        RINGTONE_11(VibrationEffect.RINGTONES[10], false),
+        RINGTONE_12(VibrationEffect.RINGTONES[11], false),
+        RINGTONE_13(VibrationEffect.RINGTONES[12], false),
+        RINGTONE_14(VibrationEffect.RINGTONES[13], false),
+        RINGTONE_15(VibrationEffect.RINGTONES[14], false);
+
+        private final int mEffectId;
+        private final boolean mIsPublic;
+
+        PredefinedEffectName(int id, boolean isPublic) {
+            mEffectId = id;
+            mIsPublic = isPublic;
+        }
+
+        /**
+         * Return the {@link PredefinedEffectName} that represents given effect id, or null if
+         * none of the available names maps to the given id.
+         */
+        @Nullable
+        public static PredefinedEffectName findById(int effectId, @XmlConstants.Flags int flags) {
+            boolean allowHidden = (flags & XmlConstants.FLAG_ALLOW_HIDDEN_APIS) != 0;
+            for (PredefinedEffectName name : PredefinedEffectName.values()) {
+                if (name.mEffectId == effectId) {
+                    return (name.mIsPublic || allowHidden) ? name : null;
+                }
+            }
+            return null;
+        }
+
+        /**
+         * Return the {@link PredefinedEffectName} that represents given effect name, or null if
+         * none of the available names maps to the given name.
+         */
+        @Nullable
+        public static PredefinedEffectName findByName(@NonNull String effectName,
+                @XmlConstants.Flags int flags) {
+            boolean allowHidden = (flags & XmlConstants.FLAG_ALLOW_HIDDEN_APIS) != 0;
+            try {
+                PredefinedEffectName name = PredefinedEffectName.valueOf(
+                        effectName.toUpperCase(Locale.ROOT));
+                return (name.mIsPublic || allowHidden) ? name : null;
+            } catch (IllegalArgumentException e) {
+                return null;
+            }
+        }
+
+        public int getEffectId() {
+            return mEffectId;
+        }
+
+        @Override
+        public String toString() {
+            return name().toLowerCase(Locale.ROOT);
+        }
+    }
+}
diff --git a/core/java/com/android/internal/vibrator/persistence/XmlParser.java b/core/java/com/android/internal/vibrator/persistence/XmlParser.java
new file mode 100644
index 0000000..6712f1c
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/persistence/XmlParser.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.vibrator.persistence;
+
+import android.annotation.NonNull;
+
+import com.android.modules.utils.TypedXmlPullParser;
+
+import java.io.IOException;
+
+/**
+ * Parse XML tags into valid {@link XmlSerializedVibration} instances.
+ *
+ * @param <T> The vibration type that will be parsed.
+ * @see XmlSerializedVibration
+ * @hide
+ */
+@FunctionalInterface
+public interface XmlParser<T> {
+
+    /**
+     * Parses the current XML tag with all nested tags into a single {@link XmlSerializedVibration}.
+     *
+     * <p>This method will consume nested XML tags until it finds the
+     * {@link TypedXmlPullParser#END_TAG} for the current tag.
+     *
+     * <p>The vibration reconstructed by the returned {@link XmlSerializedVibration#deserialize()}
+     * is guaranteed to be valid. This method will throw an exception otherwise.
+     *
+     * @param pullParser The {@link TypedXmlPullParser} with the input XML.
+     * @return The parsed vibration wrapped in a {@link XmlSerializedVibration} representation.
+     * @throws IOException        On any I/O error while reading the input XML
+     * @throws XmlParserException If the XML content does not represent a valid vibration.
+     */
+    XmlSerializedVibration<T> parseTag(@NonNull TypedXmlPullParser pullParser)
+            throws XmlParserException, IOException;
+}
diff --git a/core/java/com/android/internal/vibrator/persistence/XmlParserException.java b/core/java/com/android/internal/vibrator/persistence/XmlParserException.java
new file mode 100644
index 0000000..7507864
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/persistence/XmlParserException.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.vibrator.persistence;
+
+import android.text.TextUtils;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+/**
+ * Represents an error while parsing a vibration XML input.
+ *
+ * @see XmlParser
+ * @hide
+ */
+public final class XmlParserException extends Exception {
+
+    /**
+     * Creates a {@link XmlParserException} from a {@link XmlPullParserException}, with root cause
+     * and default error message that includes the tag name.
+     */
+    public static XmlParserException createFromPullParserException(
+            String tagName, XmlPullParserException cause) {
+        return new XmlParserException("Error parsing " + tagName, cause);
+    }
+
+    /**
+     * Creates a {@link XmlParserException} from a {@link XmlPullParserException}, with root cause
+     * and default error message that includes the tag name, the attribute name and value.
+     */
+    public static XmlParserException createFromPullParserException(
+            String tagName, String attributeName, String attributeValue,
+            XmlPullParserException cause) {
+        return new XmlParserException(TextUtils.formatSimple("Error parsing %s = %s in tag %s",
+                attributeName, attributeValue, tagName), cause);
+    }
+
+    public XmlParserException(String message) {
+        super(message);
+    }
+
+    public XmlParserException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}
diff --git a/core/java/com/android/internal/vibrator/persistence/XmlReader.java b/core/java/com/android/internal/vibrator/persistence/XmlReader.java
new file mode 100644
index 0000000..7507338
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/persistence/XmlReader.java
@@ -0,0 +1,226 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.vibrator.persistence;
+
+import static com.android.internal.util.Preconditions.checkArgument;
+import static com.android.internal.vibrator.persistence.XmlConstants.NAMESPACE;
+
+import com.android.modules.utils.TypedXmlPullParser;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/**
+ * Helper methods for reading elements from a {@link XmlPullParser}.
+ *
+ * @hide
+ */
+public final class XmlReader {
+
+    /**
+     * Check parser is currently at {@link XmlPullParser#START_DOCUMENT} and that it has a start tag
+     * with expected root tag name.
+     *
+     * <p>The parser will be pointing to the root start tag found after this method.
+     */
+    public static void readDocumentStartTag(TypedXmlPullParser parser, String expectedRootTag)
+            throws XmlParserException, IOException {
+        try {
+            int type = parser.getEventType();
+            checkArgument(type == XmlPullParser.START_DOCUMENT, "Document already started");
+
+            type = parser.nextTag(); // skips comments, instruction tokens and whitespace only
+            XmlValidator.checkParserCondition(type == XmlPullParser.START_TAG,
+                    "Unexpected element at document start, expected root tag %s", expectedRootTag);
+
+            String tagName = parser.getName();
+            XmlValidator.checkParserCondition(expectedRootTag.equals(tagName),
+                    "Unexpected root tag found %s, expected %s", tagName, expectedRootTag);
+        } catch (XmlPullParserException e) {
+            throw XmlParserException.createFromPullParserException("document start tag", e);
+        }
+    }
+
+    /**
+     * Check parser is currently at {@link XmlPullParser#END_TAG} and that has the expected root tag
+     * name, and that the next tag is the {@link XmlPullParser#END_DOCUMENT} tag.
+     *
+     * <p>The parser will be pointing to the end document tag after this method.
+     */
+    public static void readDocumentEndTag(TypedXmlPullParser parser)
+            throws XmlParserException, IOException {
+        try {
+            int type = parser.getEventType();
+            XmlValidator.checkParserCondition(type == XmlPullParser.END_TAG,
+                    "Unexpected element at document end, expected end of root tag");
+
+            type = parser.next(); // skips comments and instruction tokens
+            if (type == XmlPullParser.TEXT && parser.isWhitespace()) { // skip whitespace only
+                type = parser.next();
+            }
+
+            XmlValidator.checkParserCondition(type == XmlPullParser.END_DOCUMENT,
+                    "Unexpected tag found %s, expected document end", parser.getName());
+        } catch (XmlPullParserException e) {
+            throw XmlParserException.createFromPullParserException("document end tag", e);
+        }
+    }
+
+    /**
+     * Read the next tag and returns true if it's a {@link XmlPullParser#START_TAG} at depth
+     * {@code outerDepth + 1} or false if it's a {@link XmlPullParser#END_TAG} at
+     * {@code outerDepth}. Any other tag will fail this check.
+     *
+     * <p>The parser will be pointing to the next nested start tag when this method returns true,
+     * or to the end tag for given depth if it returns false.
+     *
+     * @return true if start tag found within given depth, false otherwise
+     */
+    public static boolean readNextTagWithin(TypedXmlPullParser parser, int outerDepth)
+            throws XmlParserException, IOException {
+        int type;
+        try {
+            type = parser.getEventType();
+            if (type == XmlPullParser.END_TAG && parser.getDepth() == outerDepth) {
+                // Already pointing to the end tag at outerDepth, just return before calling next.
+                return false;
+            }
+
+            type = parser.nextTag(); // skips comments, instruction tokens and whitespace only
+        } catch (XmlPullParserException e) {
+            throw XmlParserException.createFromPullParserException(parser.getName(), e);
+        }
+
+        if (type == XmlPullParser.START_TAG && parser.getDepth() == outerDepth + 1) {
+            return true;
+        }
+
+        // Next tag is not a start tag at outerDepth+1, expect it to be the end tag for outerDepth.
+        XmlValidator.checkParserCondition(
+                type == XmlPullParser.END_TAG && parser.getDepth() == outerDepth,
+                "Unexpected tag found %s, expected end tag at depth %d",
+                parser.getName(), outerDepth);
+
+        return false;
+    }
+
+    /**
+     * Check parser has a {@link XmlPullParser#END_TAG} as the next tag, with no nested tags.
+     *
+     * <p>The parser will be pointing to the end tag after this method.
+     */
+    public static void readEndTag(TypedXmlPullParser parser)
+            throws XmlParserException, IOException {
+        readEndTag(parser, parser.getName(), parser.getDepth());
+    }
+
+    /**
+     * Check parser has a {@link XmlPullParser#END_TAG} with same {@code tagDepth} as the next tag,
+     * with no more nested start tags.
+     *
+     * <p>The parser will be pointing to the end tag after this method.
+     */
+    public static void readEndTag(TypedXmlPullParser parser, String tagName, int tagDepth)
+            throws XmlParserException, IOException {
+        // Read nested tag first, so we can use the parser.getName() in the error message.
+        boolean hasNestedTag = readNextTagWithin(parser, tagDepth);
+        XmlValidator.checkParserCondition(!hasNestedTag,
+                "Unexpected nested tag %s found in tag %s", parser.getName(), tagName);
+    }
+
+    /**
+     * Read attribute from current tag as a non-negative integer, returning default value if
+     * attribute is missing.
+     */
+    public static int readAttributeIntNonNegative(
+            TypedXmlPullParser parser, String attrName, int defaultValue)
+            throws XmlParserException {
+        if (parser.getAttributeIndex(NAMESPACE, attrName) < 0) {
+            return defaultValue;
+        }
+        return readAttributeIntNonNegative(parser, attrName);
+    }
+
+    /** Read attribute from current tag as a non-negative integer. */
+    public static int readAttributeIntNonNegative(TypedXmlPullParser parser, String attrName)
+            throws XmlParserException {
+        String tagName = parser.getName();
+        int value = readAttributeInt(parser, attrName);
+
+        XmlValidator.checkParserCondition(value >= 0,
+                "Unexpected %s = %d in tag %s, expected %s >= 0",
+                attrName, value, tagName, attrName);
+        return value;
+    }
+
+    /** Read attribute from current tag as an integer within given inclusive range. */
+    public static int readAttributeIntInRange(
+            TypedXmlPullParser parser, String attrName, int lowerInclusive, int upperInclusive)
+            throws XmlParserException {
+        String tagName = parser.getName();
+        int value = readAttributeInt(parser, attrName);
+
+        XmlValidator.checkParserCondition(
+                value >= lowerInclusive && value <= upperInclusive,
+                "Unexpected %s = %d in tag %s, expected %s in [%d, %d]",
+                attrName, value, tagName, attrName, lowerInclusive, upperInclusive);
+        return value;
+    }
+
+    /**
+     * Read attribute from current tag as a float within given inclusive range, returning default
+     * value if attribute is missing.
+     */
+    public static float readAttributeFloatInRange(
+            TypedXmlPullParser parser, String attrName, float lowerInclusive,
+            float upperInclusive, float defaultValue) throws XmlParserException {
+        if (parser.getAttributeIndex(NAMESPACE, attrName) < 0) {
+            return defaultValue;
+        }
+        String tagName = parser.getName();
+        float value = readAttributeFloat(parser, attrName);
+
+        XmlValidator.checkParserCondition(value >= lowerInclusive && value <= upperInclusive,
+                "Unexpected %s = %f in tag %s, expected %s in [%f, %f]",
+                attrName, value, tagName, attrName, lowerInclusive, upperInclusive);
+        return value;
+    }
+
+    private static int readAttributeInt(TypedXmlPullParser parser, String attrName)
+            throws XmlParserException {
+        String tagName = parser.getName();
+        try {
+            return parser.getAttributeInt(NAMESPACE, attrName);
+        } catch (XmlPullParserException e) {
+            String rawValue = parser.getAttributeValue(NAMESPACE, attrName);
+            throw XmlParserException.createFromPullParserException(tagName, attrName, rawValue, e);
+        }
+    }
+
+    private static float readAttributeFloat(TypedXmlPullParser parser, String attrName)
+            throws XmlParserException {
+        String tagName = parser.getName();
+        try {
+            return parser.getAttributeFloat(NAMESPACE, attrName);
+        } catch (XmlPullParserException e) {
+            String rawValue = parser.getAttributeValue(NAMESPACE, attrName);
+            throw XmlParserException.createFromPullParserException(tagName, attrName, rawValue, e);
+        }
+    }
+}
diff --git a/core/java/com/android/internal/vibrator/persistence/XmlSerializedVibration.java b/core/java/com/android/internal/vibrator/persistence/XmlSerializedVibration.java
new file mode 100644
index 0000000..f807ab9
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/persistence/XmlSerializedVibration.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.vibrator.persistence;
+
+import android.annotation.NonNull;
+
+import com.android.modules.utils.TypedXmlSerializer;
+
+import java.io.IOException;
+
+/**
+ * Serialized representation of a generic vibration.
+ *
+ * <p>This can be used to represent a {@link android.os.CombinedVibration} or a
+ * {@link android.os.VibrationEffect}. Instances can be created from vibration objects via
+ * {@link XmlSerializer}, or from XML content via {@link XmlParser}.
+ *
+ * <p>The separation of serialization and writing procedures enables configurable rules to define
+ * which vibrations can be successfully serialized before any data is written to the output stream.
+ * Serialization can fail early and prevent writing partial data into the output.
+ *
+ * @param <T> The type of vibration represented by this serialization
+ * @hide
+ */
+public interface XmlSerializedVibration<T> {
+
+    /** Reconstructs the vibration using the serialized fields. */
+    @NonNull
+    T deserialize();
+
+    /**
+     * Writes the top level XML tag and the serialized fields into given XML.
+     *
+     * @param serializer The output XML serializer where the vibration will be written
+     */
+    void write(@NonNull TypedXmlSerializer serializer) throws IOException;
+
+    /**
+     * Writes the serialized fields into given XML, without the top level XML tag.
+     *
+     * <p>This allows the same serialized representation of a vibration to be used in different
+     * contexts (e.g. a {@link android.os.VibrationEffect} can be written into any of the tags
+     * {@code <vibration>}, {@code <parallel-vibration>} or {@code <vibration vibratorId="0">}).
+     *
+     * @param serializer The output XML serializer where the vibration will be written
+     */
+    void writeContent(@NonNull TypedXmlSerializer serializer) throws IOException;
+}
diff --git a/core/java/com/android/internal/vibrator/persistence/XmlSerializer.java b/core/java/com/android/internal/vibrator/persistence/XmlSerializer.java
new file mode 100644
index 0000000..102e6c1
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/persistence/XmlSerializer.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.vibrator.persistence;
+
+import android.annotation.NonNull;
+
+/**
+ * Creates a {@link XmlSerializedVibration} instance representing a vibration.
+ *
+ * @param <T> The vibration type that will be serialized.
+ * @see XmlSerializedVibration
+ * @hide
+ */
+@FunctionalInterface
+public interface XmlSerializer<T> {
+
+    /**
+     * Creates a serialized representation of the input {@code vibration}.
+     *
+     * @param vibration The vibration to be serialized
+     * @return The serialized representation of the input vibration
+     * @throws XmlSerializerException If the input vibration cannot be serialized
+     */
+    @NonNull
+    XmlSerializedVibration<T> serialize(@NonNull T vibration) throws XmlSerializerException;
+}
diff --git a/core/java/com/android/internal/vibrator/persistence/XmlSerializerException.java b/core/java/com/android/internal/vibrator/persistence/XmlSerializerException.java
new file mode 100644
index 0000000..c57ff5d
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/persistence/XmlSerializerException.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.vibrator.persistence;
+
+/**
+ * Represents an error while serializing a vibration input.
+ *
+ * @see XmlSerializer
+ * @hide
+ */
+public final class XmlSerializerException extends Exception {
+
+    XmlSerializerException(String message) {
+        super(message);
+    }
+}
diff --git a/core/java/com/android/internal/vibrator/persistence/XmlValidator.java b/core/java/com/android/internal/vibrator/persistence/XmlValidator.java
new file mode 100644
index 0000000..ba95e35
--- /dev/null
+++ b/core/java/com/android/internal/vibrator/persistence/XmlValidator.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.vibrator.persistence;
+
+import static java.util.Objects.requireNonNull;
+
+import android.annotation.NonNull;
+import android.text.TextUtils;
+
+import com.android.internal.util.ArrayUtils;
+import com.android.modules.utils.TypedXmlPullParser;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.util.Objects;
+
+/**
+ * Helper methods for validating elements from a {@link XmlPullParser}.
+ *
+ * @hide
+ */
+public final class XmlValidator {
+
+    /**
+     * Check parser is currently at {@link XmlPullParser#START_TAG} and that it has the expected
+     * name.
+     */
+    public static void checkStartTag(TypedXmlPullParser parser, String expectedTag)
+            throws XmlParserException {
+        String tagName = parser.getName();
+        try {
+            checkParserCondition(
+                    parser.getEventType() == parser.START_TAG && expectedTag.equals(tagName),
+                    "Unexpected tag found %s, expected %s", tagName, expectedTag);
+        } catch (XmlPullParserException e) {
+            throw XmlParserException.createFromPullParserException(tagName, e);
+        }
+    }
+
+    /** Check current tag only has attributes from the expected list */
+    public static void checkTagHasNoUnexpectedAttributes(
+            TypedXmlPullParser parser, String... expectedAttributes) throws XmlParserException {
+        if (expectedAttributes == null || expectedAttributes.length == 0) {
+            checkParserCondition(parser.getAttributeCount() == 0,
+                    "Unexpected attributes in tag %s, expected no attributes", parser.getName());
+            return;
+        }
+
+        String tagName = parser.getName();
+        int attributeCount = parser.getAttributeCount();
+
+        for (int i = 0; i < attributeCount; i++) {
+            String attributeName = parser.getAttributeName(i);
+            checkParserCondition(ArrayUtils.contains(expectedAttributes, attributeName),
+                    "Unexpected attribute %s found in tag %s", attributeName, tagName);
+        }
+    }
+
+    /**
+     * Check given {@link XmlSerializedVibration} represents the expected {@code vibration} object
+     * when it's deserialized.
+     */
+    @NonNull
+    public static <T> void checkSerializedVibration(
+            XmlSerializedVibration<T> serializedVibration, T expectedVibration)
+            throws XmlSerializerException {
+        T deserializedVibration = requireNonNull(serializedVibration.deserialize());
+        checkSerializerCondition(Objects.equals(expectedVibration, deserializedVibration),
+                "Unexpected serialized vibration %s: found deserialization %s, expected %s",
+                serializedVibration, deserializedVibration, expectedVibration);
+    }
+
+    /**
+     * Check generic serializer condition
+     *
+     * @throws XmlSerializerException if {@code expression} is false
+     */
+    public static void checkSerializerCondition(boolean expression,
+            String messageTemplate, Object... messageArgs) throws XmlSerializerException {
+        if (!expression) {
+            throw new XmlSerializerException(TextUtils.formatSimple(messageTemplate, messageArgs));
+        }
+    }
+
+    /**
+     * Check generic parser condition
+     *
+     * @throws XmlParserException if {@code expression} is false
+     */
+    public static void checkParserCondition(boolean expression,
+            String messageTemplate, Object... messageArgs) throws XmlParserException {
+        if (!expression) {
+            throw new XmlParserException(TextUtils.formatSimple(messageTemplate, messageArgs));
+        }
+    }
+}
diff --git a/core/java/com/android/internal/view/IInputMethodManager.aidl b/core/java/com/android/internal/view/IInputMethodManager.aidl
index 5491693..1c3fd93 100644
--- a/core/java/com/android/internal/view/IInputMethodManager.aidl
+++ b/core/java/com/android/internal/view/IInputMethodManager.aidl
@@ -114,9 +114,6 @@
     // TODO(Bug 113914148): Consider removing this.
     int getInputMethodWindowVisibleHeight(in IInputMethodClient client);
 
-    oneway void reportVirtualDisplayGeometryAsync(in IInputMethodClient parentClient,
-            int childDisplayId, in @nullable float[] matrixValues);
-
     oneway void reportPerceptibleAsync(in IBinder windowToken, boolean perceptible);
 
     @EnforcePermission("INTERNAL_SYSTEM_WINDOW")
diff --git a/core/java/com/android/internal/widget/FadingWearableScrollView.java b/core/java/com/android/internal/widget/FadingWearableScrollView.java
new file mode 100644
index 0000000..050952c
--- /dev/null
+++ b/core/java/com/android/internal/widget/FadingWearableScrollView.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ScrollView;
+
+/** ScrollView that includes scaling and fading animations */
+public class FadingWearableScrollView extends ScrollView {
+    private ViewGroupFader mFader;
+
+    public FadingWearableScrollView(Context context) {
+        this(context, null);
+    }
+
+    public FadingWearableScrollView(Context context, AttributeSet attrs) {
+        this(context, attrs, com.android.internal.R.attr.scrollViewStyle);
+    }
+
+    public FadingWearableScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public FadingWearableScrollView(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        init();
+    }
+
+    private void init() {
+        mFader = createFader(this);
+    }
+
+    /**
+     * Creates a simple ViewGroupFader that animates views from both top and bottom.
+     */
+    private ViewGroupFader createFader(ViewGroup container) {
+        return new ViewGroupFader(
+                container,
+                new ViewGroupFader.AnimationCallback() {
+                    @Override
+                    public boolean shouldFadeFromTop(View view) {
+                        return true;
+                    }
+
+                    @Override
+                    public boolean shouldFadeFromBottom(View view) {
+                        return true;
+                    }
+
+                    @Override
+                    public void viewHasBecomeFullSize(View view) {
+                    }
+                },
+                new ViewGroupFader.GlobalVisibleViewBoundsProvider());
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+        super.onLayout(changed, l, t, r, b);
+        mFader.updateFade();
+    }
+
+    @Override
+    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
+        super.onScrollChanged(l, t, oldl, oldt);
+        mFader.updateFade();
+    }
+}
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 1b1efee..d5b8f62 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -97,7 +97,7 @@
     public static final int MIN_LOCK_PATTERN_SIZE = 4;
 
     /**
-     * The minimum size of a valid password.
+     * The minimum size of a valid password or PIN.
      */
     public static final int MIN_LOCK_PASSWORD_SIZE = 4;
 
@@ -185,7 +185,6 @@
      */
     public static final int USER_REPAIR_MODE = UserHandle.USER_NULL + 2;
 
-    public final static String PATTERN_EVER_CHOSEN_KEY = "lockscreen.patterneverchosen";
     public final static String PASSWORD_TYPE_KEY = "lockscreen.password_type";
     @Deprecated
     public final static String PASSWORD_TYPE_ALTERNATE_KEY = "lockscreen.password_type_alternate";
@@ -613,16 +612,6 @@
     }
 
     /**
-     * Return true if the user has ever chosen a pattern.  This is true even if the pattern is
-     * currently cleared.
-     *
-     * @return True if the user has ever chosen a pattern.
-     */
-    public boolean isPatternEverChosen(int userId) {
-        return getBoolean(PATTERN_EVER_CHOSEN_KEY, false, userId);
-    }
-
-    /**
      * Returns the length of the PIN set by a particular user.
      * @param userId user id of the user whose pin length we have to return
      * @return
@@ -655,13 +644,6 @@
             return false;
         }
     }
-    /**
-     * Records that the user has chosen a pattern at some time, even if the pattern is
-     * currently cleared.
-     */
-    public void reportPatternWasChosen(int userId) {
-        setBoolean(PATTERN_EVER_CHOSEN_KEY, true, userId);
-    }
 
     /**
      * Used by device policy manager to validate the current password
@@ -798,7 +780,6 @@
      * and return false if the given credential is wrong.
      * @throws RuntimeException if password change encountered an unrecoverable error.
      * @throws UnsupportedOperationException secure lockscreen is not supported on this device.
-     * @throws IllegalArgumentException if new credential is too short.
      */
     public boolean setLockCredential(@NonNull LockscreenCredential newCredential,
             @NonNull LockscreenCredential savedCredential, int userHandle) {
@@ -806,7 +787,6 @@
             throw new UnsupportedOperationException(
                     "This operation requires the lock screen feature.");
         }
-        newCredential.checkLength();
 
         try {
             if (!getLockSettings().setLockCredential(newCredential, savedCredential, userHandle)) {
@@ -1082,9 +1062,6 @@
      */
     @UnsupportedAppUsage
     public boolean isVisiblePatternEnabled(int userId) {
-        // Default to true, since this gets explicitly set to true when a pattern is first set
-        // anyway, which makes true the user-visible default.  The low-level default should be the
-        // same, in order for FRP credential verification to get the same default.
         return getBoolean(Settings.Secure.LOCK_PATTERN_VISIBLE, true, userId);
     }
 
@@ -1121,13 +1098,6 @@
     }
 
     /**
-     * Set whether the visible password is enabled for cryptkeeper screen.
-     */
-    public void setVisiblePasswordEnabled(boolean enabled, int userId) {
-        // No longer does anything.
-    }
-
-    /**
      * Set and store the lockout deadline, meaning the user can't attempt their unlock
      * pattern until the deadline has passed.
      * @return the chosen deadline.
@@ -1581,7 +1551,6 @@
             throw new UnsupportedOperationException(
                     "This operation requires the lock screen feature.");
         }
-        credential.checkLength();
         LockSettingsInternal localService = getLockSettingsInternal();
 
         return localService.setLockCredentialWithToken(credential, tokenHandle, token, userHandle);
diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java
index fc5da13..66b0158 100644
--- a/core/java/com/android/internal/widget/LockPatternView.java
+++ b/core/java/com/android/internal/widget/LockPatternView.java
@@ -80,15 +80,21 @@
     private static final int DOT_ACTIVATION_DURATION_MILLIS = 50;
     private static final int DOT_RADIUS_INCREASE_DURATION_MILLIS = 96;
     private static final int DOT_RADIUS_DECREASE_DURATION_MILLIS = 192;
+    private static final int ALPHA_MAX_VALUE = 255;
     private static final float MIN_DOT_HIT_FACTOR = 0.2f;
     private final CellState[][] mCellStates;
 
+    private static final int CELL_ACTIVATE = 0;
+    private static final int CELL_DEACTIVATE = 1;
+
     private final int mDotSize;
     private final int mDotSizeActivated;
     private final float mDotHitFactor;
     private final int mPathWidth;
     private final int mLineFadeOutAnimationDurationMs;
     private final int mLineFadeOutAnimationDelayMs;
+    private final int mFadePatternAnimationDurationMs;
+    private final int mFadePatternAnimationDelayMs;
 
     private boolean mDrawingProfilingStarted = false;
 
@@ -145,11 +151,16 @@
     private boolean mPatternInProgress = false;
     private boolean mFadePattern = true;
 
+    private boolean mFadeClear = false;
+    private int mFadeAnimationAlpha = ALPHA_MAX_VALUE;
+    private final Path mPatternPath = new Path();
+
     @UnsupportedAppUsage
     private float mSquareWidth;
     @UnsupportedAppUsage
     private float mSquareHeight;
     private float mDotHitRadius;
+    private float mDotHitMaxRadius;
     private final LinearGradient mFadeOutGradientShader;
 
     private final Path mCurrentPath = new Path();
@@ -162,9 +173,12 @@
     private int mSuccessColor;
     private int mDotColor;
     private int mDotActivatedColor;
+    private boolean mKeepDotActivated;
+    private boolean mEnlargeVertex;
 
     private final Interpolator mFastOutSlowInInterpolator;
     private final Interpolator mLinearOutSlowInInterpolator;
+    private final Interpolator mStandardAccelerateInterpolator;
     private final PatternExploreByTouchHelper mExploreByTouchHelper;
 
     private Drawable mSelectedDrawable;
@@ -335,6 +349,8 @@
         mSuccessColor = a.getColor(R.styleable.LockPatternView_successColor, 0);
         mDotColor = a.getColor(R.styleable.LockPatternView_dotColor, mRegularColor);
         mDotActivatedColor = a.getColor(R.styleable.LockPatternView_dotActivatedColor, mDotColor);
+        mKeepDotActivated = a.getBoolean(R.styleable.LockPatternView_keepDotActivated, false);
+        mEnlargeVertex = a.getBoolean(R.styleable.LockPatternView_enlargeVertexEntryArea, false);
 
         int pathColor = a.getColor(R.styleable.LockPatternView_pathColor, mRegularColor);
         mPathPaint.setColor(pathColor);
@@ -351,6 +367,11 @@
         mLineFadeOutAnimationDelayMs =
             getResources().getInteger(R.integer.lock_pattern_line_fade_out_delay);
 
+        mFadePatternAnimationDurationMs =
+                getResources().getInteger(R.integer.lock_pattern_fade_pattern_duration);
+        mFadePatternAnimationDelayMs =
+                getResources().getInteger(R.integer.lock_pattern_fade_pattern_delay);
+
         mDotSize = getResources().getDimensionPixelSize(R.dimen.lock_pattern_dot_size);
         mDotSizeActivated = getResources().getDimensionPixelSize(
                 R.dimen.lock_pattern_dot_size_activated);
@@ -381,6 +402,8 @@
                 AnimationUtils.loadInterpolator(context, android.R.interpolator.fast_out_slow_in);
         mLinearOutSlowInInterpolator =
                 AnimationUtils.loadInterpolator(context, android.R.interpolator.linear_out_slow_in);
+        mStandardAccelerateInterpolator =
+                AnimationUtils.loadInterpolator(context, android.R.interpolator.fast_out_linear_in);
         mExploreByTouchHelper = new PatternExploreByTouchHelper(this);
         setAccessibilityDelegate(mExploreByTouchHelper);
 
@@ -621,6 +644,15 @@
         resetPattern();
     }
 
+    /**
+     * Clear the pattern by fading it out.
+     */
+    @UnsupportedAppUsage
+    public void fadeClearPattern() {
+        mFadeClear = true;
+        startFadePatternAnimation();
+    }
+
     @Override
     protected boolean dispatchHoverEvent(MotionEvent event) {
         // Dispatch to onHoverEvent first so mPatternInProgress is up to date when the
@@ -634,12 +666,26 @@
      * Reset all pattern state.
      */
     private void resetPattern() {
+        if (mKeepDotActivated && !mPattern.isEmpty()) {
+            resetLastActivatedCellProgress();
+        }
         mPattern.clear();
+        mPatternPath.reset();
         clearPatternDrawLookup();
         mPatternDisplayMode = DisplayMode.Correct;
         invalidate();
     }
 
+    private void resetLastActivatedCellProgress() {
+        final ArrayList<Cell> pattern = mPattern;
+        final Cell lastCell = pattern.get(pattern.size() - 1);
+        final CellState cellState = mCellStates[lastCell.row][lastCell.column];
+        if (cellState.activationAnimator != null) {
+            cellState.activationAnimator.cancel();
+        }
+        cellState.activationAnimationProgress = 0f;
+    }
+
     /**
      * If there are any cells being drawn.
      */
@@ -686,7 +732,8 @@
         final int height = h - mPaddingTop - mPaddingBottom;
         mSquareHeight = height / 3.0f;
         mExploreByTouchHelper.invalidateRoot();
-        mDotHitRadius = Math.min(mSquareHeight / 2, mSquareWidth / 2) * mDotHitFactor;
+        mDotHitMaxRadius = Math.min(mSquareHeight / 2, mSquareWidth / 2);
+        mDotHitRadius = mDotHitMaxRadius * mDotHitFactor;
 
         if (mUseLockPatternDrawable) {
             mNotSelectedDrawable.setBounds(mPaddingLeft, mPaddingTop, width, height);
@@ -748,8 +795,9 @@
             // check for gaps in existing pattern
             Cell fillInGapCell = null;
             final ArrayList<Cell> pattern = mPattern;
+            Cell lastCell = null;
             if (!pattern.isEmpty()) {
-                final Cell lastCell = pattern.get(pattern.size() - 1);
+                lastCell = pattern.get(pattern.size() - 1);
                 int dRow = cell.row - lastCell.row;
                 int dColumn = cell.column - lastCell.column;
 
@@ -770,7 +818,15 @@
             if (fillInGapCell != null &&
                     !mPatternDrawLookup[fillInGapCell.row][fillInGapCell.column]) {
                 addCellToPattern(fillInGapCell);
+                if (mKeepDotActivated) {
+                    startCellDeactivatedAnimation(fillInGapCell);
+                }
             }
+
+            if (mKeepDotActivated && lastCell != null) {
+                startCellDeactivatedAnimation(lastCell);
+            }
+
             addCellToPattern(cell);
             performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY,
                     HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
@@ -788,7 +844,42 @@
         notifyCellAdded();
     }
 
+    private void startFadePatternAnimation() {
+        AnimatorSet animatorSet = new AnimatorSet();
+        animatorSet.play(createFadePatternAnimation());
+        animatorSet.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mFadeAnimationAlpha = ALPHA_MAX_VALUE;
+                mFadeClear = false;
+                resetPattern();
+            }
+        });
+        animatorSet.start();
+
+    }
+
+    private Animator createFadePatternAnimation() {
+        ValueAnimator valueAnimator = ValueAnimator.ofInt(ALPHA_MAX_VALUE, 0);
+        valueAnimator.addUpdateListener(animation -> {
+            mFadeAnimationAlpha = (int) animation.getAnimatedValue();
+            invalidate();
+        });
+        valueAnimator.setInterpolator(mStandardAccelerateInterpolator);
+        valueAnimator.setStartDelay(mFadePatternAnimationDelayMs);
+        valueAnimator.setDuration(mFadePatternAnimationDurationMs);
+        return valueAnimator;
+    }
+
     private void startCellActivatedAnimation(Cell cell) {
+        startCellActivationAnimation(cell, CELL_ACTIVATE);
+    }
+
+    private void startCellDeactivatedAnimation(Cell cell) {
+        startCellActivationAnimation(cell, CELL_DEACTIVATE);
+    }
+
+    private void startCellActivationAnimation(Cell cell, int activate) {
         final CellState cellState = mCellStates[cell.row][cell.column];
 
         if (cellState.activationAnimator != null) {
@@ -803,7 +894,7 @@
             animatorSetBuilder.with(createDotRadiusAnimation(cellState));
         }
         if (mDotColor != mDotActivatedColor) {
-            animatorSetBuilder.with(createDotActivationColorAnimation(cellState));
+            animatorSetBuilder.with(createDotActivationColorAnimation(cellState, activate));
         }
 
         animatorSet.addListener(new AnimatorListenerAdapter() {
@@ -817,7 +908,7 @@
         animatorSet.start();
     }
 
-    private Animator createDotActivationColorAnimation(CellState cellState) {
+    private Animator createDotActivationColorAnimation(CellState cellState, int activate) {
         ValueAnimator.AnimatorUpdateListener updateListener =
                 valueAnimator -> {
                     cellState.activationAnimationProgress =
@@ -835,10 +926,17 @@
         activateAnimator.setDuration(DOT_ACTIVATION_DURATION_MILLIS);
         deactivateAnimator.setDuration(DOT_ACTIVATION_DURATION_MILLIS);
         AnimatorSet set = new AnimatorSet();
-        set.play(deactivateAnimator)
-                .after(mLineFadeOutAnimationDelayMs + mLineFadeOutAnimationDurationMs
-                        - DOT_ACTIVATION_DURATION_MILLIS * 2)
-                .after(activateAnimator);
+
+        if (mKeepDotActivated) {
+            set.play(activate == CELL_ACTIVATE ? activateAnimator : deactivateAnimator);
+        } else {
+            // 'activate' ignored in this case, do full deactivate -> activate cycle
+            set.play(deactivateAnimator)
+                    .after(mLineFadeOutAnimationDelayMs + mLineFadeOutAnimationDurationMs
+                            - DOT_ACTIVATION_DURATION_MILLIS * 2)
+                    .after(activateAnimator);
+        }
+
         return set;
     }
 
@@ -909,11 +1007,24 @@
     /** Helper method to find which cell a point maps to. */
     @Nullable
     private Cell detectCellHit(float x, float y) {
-        final float hitRadiusSquared = mDotHitRadius * mDotHitRadius;
         for (int row = 0; row < 3; row++) {
             for (int column = 0; column < 3; column++) {
                 float centerY = getCenterYForRow(row);
                 float centerX = getCenterXForColumn(column);
+                float hitRadiusSquared;
+
+                if (mEnlargeVertex) {
+                    // Maximize vertex dots' hit radius for the small screen.
+                    // This eases users to draw more patterns with diagnal lines, while keeps
+                    // drawing patterns with vertex dots easy.
+                    hitRadiusSquared =
+                            isVertex(row, column)
+                                    ? (mDotHitMaxRadius * mDotHitMaxRadius)
+                                    : (mDotHitRadius * mDotHitRadius);
+                } else {
+                    hitRadiusSquared = mDotHitRadius * mDotHitRadius;
+                }
+
                 if ((x - centerX) * (x - centerX) + (y - centerY) * (y - centerY)
                         < hitRadiusSquared) {
                     return Cell.of(row, column);
@@ -923,6 +1034,10 @@
         return null;
     }
 
+    private boolean isVertex(int row, int column) {
+        return !(row == 1 || column == 1);
+    }
+
     @Override
     public boolean onHoverEvent(MotionEvent event) {
         if (AccessibilityManager.getInstance(mContext).isTouchExplorationEnabled()) {
@@ -1055,6 +1170,9 @@
         if (!mPattern.isEmpty()) {
             setPatternInProgress(false);
             cancelLineAnimations();
+            if (mKeepDotActivated) {
+                deactivateLastCell();
+            }
             notifyPatternDetected();
             // Also clear pattern if fading is enabled
             if (mFadePattern) {
@@ -1071,6 +1189,11 @@
         }
     }
 
+    private void deactivateLastCell() {
+        Cell lastCell = mPattern.get(mPattern.size() - 1);
+        startCellDeactivatedAnimation(lastCell);
+    }
+
     private void cancelLineAnimations() {
         for (int i = 0; i < 3; i++) {
             for (int j = 0; j < 3; j++) {
@@ -1079,9 +1202,9 @@
                     state.activationAnimator.cancel();
                     state.activationAnimator = null;
                     state.radius = mDotSize / 2f;
-                    state.activationAnimationProgress = 0f;
                     state.lineEndX = Float.MIN_VALUE;
                     state.lineEndY = Float.MIN_VALUE;
+                    state.activationAnimationProgress = 0f;
                 }
             }
         }
@@ -1197,14 +1320,14 @@
         // draw the path of the pattern (unless we are in stealth mode)
         final boolean drawPath = !mInStealthMode;
 
-        if (drawPath) {
+        if (drawPath && !mFadeClear) {
             mPathPaint.setColor(getCurrentColor(true /* partOfPattern */));
 
             boolean anyCircles = false;
             float lastX = 0f;
             float lastY = 0f;
             long elapsedRealtime = SystemClock.elapsedRealtime();
-           for (int i = 0; i < count; i++) {
+            for (int i = 0; i < count; i++) {
                 Cell cell = pattern.get(i);
 
                 // only draw the part of the pattern stored in
@@ -1235,6 +1358,11 @@
                     }
                     drawLineSegment(canvas, /* startX = */ lastX, /* startY = */ lastY, endX, endY,
                             mLineFadeStart[i], elapsedRealtime);
+
+                    Path tempPath = new Path();
+                    tempPath.moveTo(lastX, lastY);
+                    tempPath.lineTo(centerX, centerY);
+                    mPatternPath.addPath(tempPath);
                 }
                 lastX = centerX;
                 lastY = centerY;
@@ -1253,6 +1381,11 @@
             }
         }
 
+        if (mFadeClear) {
+            mPathPaint.setAlpha(mFadeAnimationAlpha);
+            canvas.drawPath(mPatternPath, mPathPaint);
+        }
+
         // draw the circles
         for (int i = 0; i < 3; i++) {
             float centerY = getCenterYForRow(i);
@@ -1376,6 +1509,8 @@
             int resultColor = ColorUtils.blendARGB(mDotColor, mDotActivatedColor,
                     /* ratio= */ activationAnimationProgress);
             mPaint.setColor(resultColor);
+        } else if (!mFadePattern && partOfPattern){
+            mPaint.setColor(mDotActivatedColor);
         } else {
             mPaint.setColor(getDotColor());
         }
@@ -1430,6 +1565,13 @@
         mInStealthMode = ss.isInStealthMode();
     }
 
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        super.onLayout(changed, left, top, right, bottom);
+
+        setSystemGestureExclusionRects(List.of(new Rect(left, top, right, bottom)));
+    }
+
     /**
      * The parecelable for saving and restoring a lock pattern view.
      */
diff --git a/core/java/com/android/internal/widget/LockscreenCredential.java b/core/java/com/android/internal/widget/LockscreenCredential.java
index 03e7fd1..c88763c 100644
--- a/core/java/com/android/internal/widget/LockscreenCredential.java
+++ b/core/java/com/android/internal/widget/LockscreenCredential.java
@@ -60,10 +60,24 @@
 public class LockscreenCredential implements Parcelable, AutoCloseable {
 
     private final int mType;
-    // Stores raw credential bytes, or null if credential has been zeroized. An empty password
+    // Stores raw credential bytes, or null if credential has been zeroized. A none credential
     // is represented as a byte array of length 0.
     private byte[] mCredential;
 
+    // This indicates that the credential used characters outside ASCII 32–127.
+    //
+    // Such credentials were never intended to be allowed.  However, Android 10–14 had a bug where
+    // conversion from the chars the user entered to the credential bytes used a simple truncation.
+    // Thus, any 'char' whose remainder mod 256 was in the range 32–127 was accepted and was
+    // equivalent to some ASCII character.  For example, ™, which is U+2122, was truncated to ASCII
+    // 0x22 which is the double-quote character ".
+    //
+    // We have to continue to allow a LockscreenCredential to be constructed with this bug, so that
+    // existing devices can be unlocked if their password used this bug.  However, we prevent new
+    // passwords that use this bug from being set.  The boolean below keeps track of the information
+    // needed to do that check, since the conversion to mCredential may have been lossy.
+    private final boolean mHasInvalidChars;
+
     /**
      * Private constructor, use static builder methods instead.
      *
@@ -71,7 +85,7 @@
      * LockscreenCredential will only store the reference internally without copying. This is to
      * minimize the number of extra copies introduced.
      */
-    private LockscreenCredential(int type, byte[] credential) {
+    private LockscreenCredential(int type, byte[] credential, boolean hasInvalidChars) {
         Objects.requireNonNull(credential);
         if (type == CREDENTIAL_TYPE_NONE) {
             Preconditions.checkArgument(credential.length == 0);
@@ -80,17 +94,28 @@
             Preconditions.checkArgument(type == CREDENTIAL_TYPE_PIN
                     || type == CREDENTIAL_TYPE_PASSWORD
                     || type == CREDENTIAL_TYPE_PATTERN);
-            Preconditions.checkArgument(credential.length > 0);
+            // Do not validate credential.length yet.  All non-none credentials have a minimum
+            // length requirement; however, one of the uses of LockscreenCredential is to represent
+            // a proposed credential that might be too short.  For example, a LockscreenCredential
+            // with type CREDENTIAL_TYPE_PIN and length 0 represents an attempt to set an empty PIN.
+            // This differs from an actual attempt to set a none credential.  We have to allow the
+            // LockscreenCredential object to be constructed so that the validation logic can run,
+            // even though the validation logic will ultimately reject the credential as too short.
         }
         mType = type;
         mCredential = credential;
+        mHasInvalidChars = hasInvalidChars;
+    }
+
+    private LockscreenCredential(int type, CharSequence credential) {
+        this(type, charsToBytesTruncating(credential), hasInvalidChars(credential));
     }
 
     /**
-     * Creates a LockscreenCredential object representing empty password.
+     * Creates a LockscreenCredential object representing a none credential.
      */
     public static LockscreenCredential createNone() {
-        return new LockscreenCredential(CREDENTIAL_TYPE_NONE, new byte[0]);
+        return new LockscreenCredential(CREDENTIAL_TYPE_NONE, new byte[0], false);
     }
 
     /**
@@ -98,15 +123,14 @@
      */
     public static LockscreenCredential createPattern(@NonNull List<LockPatternView.Cell> pattern) {
         return new LockscreenCredential(CREDENTIAL_TYPE_PATTERN,
-                LockPatternUtils.patternToByteArray(pattern));
+                LockPatternUtils.patternToByteArray(pattern), /* hasInvalidChars= */ false);
     }
 
     /**
      * Creates a LockscreenCredential object representing the given alphabetic password.
      */
     public static LockscreenCredential createPassword(@NonNull CharSequence password) {
-        return new LockscreenCredential(CREDENTIAL_TYPE_PASSWORD,
-                charSequenceToByteArray(password));
+        return new LockscreenCredential(CREDENTIAL_TYPE_PASSWORD, password);
     }
 
     /**
@@ -117,20 +141,19 @@
      */
     public static LockscreenCredential createManagedPassword(@NonNull byte[] password) {
         return new LockscreenCredential(CREDENTIAL_TYPE_PASSWORD,
-                Arrays.copyOf(password, password.length));
+                Arrays.copyOf(password, password.length), /* hasInvalidChars= */ false);
     }
 
     /**
      * Creates a LockscreenCredential object representing the given numeric PIN.
      */
     public static LockscreenCredential createPin(@NonNull CharSequence pin) {
-        return new LockscreenCredential(CREDENTIAL_TYPE_PIN,
-                charSequenceToByteArray(pin));
+        return new LockscreenCredential(CREDENTIAL_TYPE_PIN, pin);
     }
 
     /**
      * Creates a LockscreenCredential object representing the given alphabetic password.
-     * If the supplied password is empty, create an empty credential object.
+     * If the supplied password is empty, create a none credential object.
      */
     public static LockscreenCredential createPasswordOrNone(@Nullable CharSequence password) {
         if (TextUtils.isEmpty(password)) {
@@ -142,7 +165,7 @@
 
     /**
      * Creates a LockscreenCredential object representing the given numeric PIN.
-     * If the supplied password is empty, create an empty credential object.
+     * If the supplied password is empty, create a none credential object.
      */
     public static LockscreenCredential createPinOrNone(@Nullable CharSequence pin) {
         if (TextUtils.isEmpty(pin)) {
@@ -175,7 +198,7 @@
         return mCredential;
     }
 
-    /** Returns whether this is an empty credential */
+    /** Returns whether this is a none credential */
     public boolean isNone() {
         ensureNotZeroized();
         return mType == CREDENTIAL_TYPE_NONE;
@@ -205,10 +228,17 @@
         return mCredential.length;
     }
 
+    /** Returns true if this credential was constructed with any chars outside the allowed range */
+    public boolean hasInvalidChars() {
+        ensureNotZeroized();
+        return mHasInvalidChars;
+    }
+
     /** Create a copy of the credential */
     public LockscreenCredential duplicate() {
         return new LockscreenCredential(mType,
-                mCredential != null ? Arrays.copyOf(mCredential, mCredential.length) : null);
+                mCredential != null ? Arrays.copyOf(mCredential, mCredential.length) : null,
+                mHasInvalidChars);
     }
 
     /**
@@ -222,27 +252,37 @@
     }
 
     /**
-     * Check if the credential meets minimal length requirement.
+     * Checks whether the credential meets basic requirements for setting it as a new credential.
      *
-     * @throws IllegalArgumentException if the credential is too short.
+     * This is redundant if {@link android.app.admin.PasswordMetrics#validateCredential()}, which
+     * does more comprehensive checks, is correctly called first (which it should be).
+     *
+     * @throws IllegalArgumentException if the credential contains invalid characters or is too
+     * short
      */
-    public void checkLength() {
-        if (isNone()) {
-            return;
+    public void validateBasicRequirements() {
+        if (mHasInvalidChars) {
+            throw new IllegalArgumentException("credential contains invalid characters");
         }
-        if (isPattern()) {
-            if (size() < LockPatternUtils.MIN_LOCK_PATTERN_SIZE) {
-                throw new IllegalArgumentException("pattern must not be null and at least "
-                        + LockPatternUtils.MIN_LOCK_PATTERN_SIZE + " dots long.");
-            }
-            return;
-        }
-        if (isPassword() || isPin()) {
-            if (size() < LockPatternUtils.MIN_LOCK_PASSWORD_SIZE) {
-                throw new IllegalArgumentException("password must not be null and at least "
-                        + "of length " + LockPatternUtils.MIN_LOCK_PASSWORD_SIZE);
-            }
-            return;
+        switch (getType()) {
+            case CREDENTIAL_TYPE_PATTERN:
+                if (size() < LockPatternUtils.MIN_LOCK_PATTERN_SIZE) {
+                    throw new IllegalArgumentException("pattern must be at least "
+                            + LockPatternUtils.MIN_LOCK_PATTERN_SIZE + " dots long.");
+                }
+                break;
+            case CREDENTIAL_TYPE_PIN:
+                if (size() < LockPatternUtils.MIN_LOCK_PASSWORD_SIZE) {
+                    throw new IllegalArgumentException("PIN must be at least "
+                            + LockPatternUtils.MIN_LOCK_PASSWORD_SIZE + " digits long.");
+                }
+                break;
+            case CREDENTIAL_TYPE_PASSWORD:
+                if (size() < LockPatternUtils.MIN_LOCK_PASSWORD_SIZE) {
+                    throw new IllegalArgumentException("password must be at least "
+                            + LockPatternUtils.MIN_LOCK_PASSWORD_SIZE + " characters long.");
+                }
+                break;
         }
     }
 
@@ -317,6 +357,7 @@
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeInt(mType);
         dest.writeByteArray(mCredential);
+        dest.writeBoolean(mHasInvalidChars);
     }
 
     public static final Parcelable.Creator<LockscreenCredential> CREATOR =
@@ -324,7 +365,8 @@
 
         @Override
         public LockscreenCredential createFromParcel(Parcel source) {
-            return new LockscreenCredential(source.readInt(), source.createByteArray());
+            return new LockscreenCredential(source.readInt(), source.createByteArray(),
+                    source.readBoolean());
         }
 
         @Override
@@ -346,7 +388,7 @@
     @Override
     public int hashCode() {
         // Effective Java — Always override hashCode when you override equals
-        return Objects.hash(mType, Arrays.hashCode(mCredential));
+        return Objects.hash(mType, Arrays.hashCode(mCredential), mHasInvalidChars);
     }
 
     @Override
@@ -354,20 +396,45 @@
         if (o == this) return true;
         if (!(o instanceof LockscreenCredential)) return false;
         final LockscreenCredential other = (LockscreenCredential) o;
-        return mType == other.mType && Arrays.equals(mCredential, other.mCredential);
+        return mType == other.mType && Arrays.equals(mCredential, other.mCredential)
+            && mHasInvalidChars == other.mHasInvalidChars;
+    }
+
+    private static boolean hasInvalidChars(CharSequence chars) {
+        //
+        // Consider the password to have invalid characters if it contains any non-ASCII characters
+        // or control characters.  There are multiple reasons for this restriction:
+        //
+        // - Non-ASCII characters might only be possible to enter on a third-party keyboard app
+        //   (IME) that is available when setting the password but not when verifying it after a
+        //   reboot.  This can happen if the keyboard is not direct boot aware or gets uninstalled.
+        //
+        // - Unicode strings that look identical to the user can map to different byte[].  Yet, only
+        //   one byte[] can be accepted.  Unicode normalization can solve this problem to some
+        //   extent, but still many Unicode characters look similar and could cause confusion.
+        //
+        // - For backwards compatibility reasons, the upper 8 bits of the 16-bit 'chars' are
+        //   discarded by charsToBytesTruncating().  Thus, as-is passwords with characters above
+        //   U+00FF (255) are not as secure as they should be.  IMPORTANT: Do not change the below
+        //   code to allow characters above U+00FF (255) without fixing this issue!
+        //
+        for (int i = 0; i < chars.length(); i++) {
+            char c = chars.charAt(i);
+            if (c < 32 || c > 127) {
+                return true;
+            }
+        }
+        return false;
     }
 
     /**
-     * Converts a CharSequence to a byte array without requiring a toString(), which creates an
-     * additional copy.
+     * Converts a CharSequence to a byte array, intentionally truncating chars greater than 255 for
+     * backwards compatibility reasons.  See {@link #mHasInvalidChars}.
      *
      * @param chars The CharSequence to convert
      * @return A byte array representing the input
      */
-    private static byte[] charSequenceToByteArray(CharSequence chars) {
-        if (chars == null) {
-            return new byte[0];
-        }
+    private static byte[] charsToBytesTruncating(CharSequence chars) {
         byte[] bytes = new byte[chars.length()];
         for (int i = 0; i < chars.length(); i++) {
             bytes[i] = (byte) chars.charAt(i);
diff --git a/core/java/com/android/internal/widget/ViewGroupFader.java b/core/java/com/android/internal/widget/ViewGroupFader.java
new file mode 100644
index 0000000..b54023a
--- /dev/null
+++ b/core/java/com/android/internal/widget/ViewGroupFader.java
@@ -0,0 +1,315 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.widget;
+
+import android.graphics.Rect;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewGroup.MarginLayoutParams;
+import android.view.animation.BaseInterpolator;
+import android.view.animation.PathInterpolator;
+
+/**
+ * This class is ported from
+ * com.google.android.clockwork.common.wearable.wearmaterial.list.ViewGroupFader with minor
+ * modifications set the opacity of the views during animation (uses setTransitionAlpha on the view
+ * instead of setLayerType as the latter doesn't play nicely with a dialog. See - b/193583546)
+ *
+ * Fades of the children of a {@link ViewGroup} in and out, based on the position of the child.
+ *
+ * <p>Children are "faded" when they lie entirely in a region on the top and bottom of a {@link
+ * ViewGroup}. This region is sized as a fraction of the {@link ViewGroup}'s height, based on the
+ * height of the child. When not in the top or bottom regions, children have their default alpha and
+ * scale.
+ */
+class ViewGroupFader {
+
+    private static final float SCALE_LOWER_BOUND = 0.7f;
+    private float mScaleLowerBound = SCALE_LOWER_BOUND;
+
+    private static final float ALPHA_LOWER_BOUND = 0.5f;
+    private float mAlphaLowerBound = ALPHA_LOWER_BOUND;
+
+    private static final float CHAINED_BOUNDS_TOP_FRACTION = 0.6f;
+    private static final float CHAINED_BOUNDS_BOTTOM_FRACTION = 0.2f;
+    private static final float CHAINED_LOWER_REGION_FRACTION = 0.35f;
+    private static final float CHAINED_UPPER_REGION_FRACTION = 0.55f;
+
+    private float mChainedBoundsTop = CHAINED_BOUNDS_TOP_FRACTION;
+    private float mChainedBoundsBottom = CHAINED_BOUNDS_BOTTOM_FRACTION;
+    private float mChainedLowerRegion = CHAINED_LOWER_REGION_FRACTION;
+    private float mChainedUpperRegion = CHAINED_UPPER_REGION_FRACTION;
+
+    protected final ViewGroup mParent;
+
+    private final Rect mContainerBounds = new Rect();
+    private final Rect mOffsetViewBounds = new Rect();
+    private final AnimationCallback mCallback;
+    private final ChildViewBoundsProvider mChildViewBoundsProvider;
+
+    private ContainerBoundsProvider mContainerBoundsProvider;
+    private float mTopBoundPixels;
+    private float mBottomBoundPixels;
+    private BaseInterpolator mTopInterpolator = new PathInterpolator(0.3f, 0f, 0.7f, 1f);
+    private BaseInterpolator mBottomInterpolator = new PathInterpolator(0.3f, 0f, 0.7f, 1f);
+
+    /** Callback which is called when attempting to fade a view. */
+    interface AnimationCallback {
+        boolean shouldFadeFromTop(View view);
+
+        boolean shouldFadeFromBottom(View view);
+
+        void viewHasBecomeFullSize(View view);
+    }
+
+    /**
+     * Interface for providing the bounds of the child views. This is needed because for
+     * RecyclerViews, we might need to use bounds that represents the post-layout position, instead
+     * of the current position.
+     */
+    // TODO(b/182846214): Clean up the interface design to avoid exposing too much details to users.
+    interface ChildViewBoundsProvider {
+        /**
+         * Provide the bounds of the child view.
+         *
+         * @param parent the parent container.
+         * @param child the child view.
+         * @param bounds the bounds of the child view. The bounds are relative to
+         * the value of the bounds for setContainerBoundsProvider. By default,
+         * this is relative to the screen.
+         */
+        void provideBounds(ViewGroup parent, View child, Rect bounds);
+    }
+
+    /** Interface for providing the bounds of the container for use in calculating item fades. */
+    interface ContainerBoundsProvider {
+        /**
+         * Provide the bounds of the container for use in calculating item fades.
+         *
+         * @param parent the parent of the container.
+         * @param bounds the baseline bounds to which the child bounds are relative.
+         */
+        void provideBounds(ViewGroup parent, Rect bounds);
+    }
+
+    /**
+     * Implementation of {@link ContainerBoundsProvider} that returns the screen bounds as the
+     * container that is used for calculating the animation of the child elements in the ViewGroup.
+     */
+    static final class ScreenContainerBoundsProvider implements ContainerBoundsProvider {
+        @Override
+        public void provideBounds(ViewGroup parent, Rect bounds) {
+            bounds.set(
+                    0,
+                    0,
+                    parent.getResources().getDisplayMetrics().widthPixels,
+                    parent.getResources().getDisplayMetrics().heightPixels);
+        }
+    }
+
+    /**
+     * Implementation of {@link ContainerBoundsProvider} that returns the parent ViewGroup bounds as
+     * the container that is used for calculating the animation of the child elements in the
+     * ViewGroup.
+     */
+    static final class ParentContainerBoundsProvider implements ContainerBoundsProvider {
+        @Override
+        public void provideBounds(ViewGroup parent, Rect bounds) {
+            parent.getGlobalVisibleRect(bounds);
+        }
+    }
+
+    /**
+     * Default implementation of {@link ChildViewBoundsProvider} that returns the post-layout
+     * bounds of the child view. This should be used when the {@link ViewGroupFader} is used
+     * together with a RecyclerView.
+     */
+    static final class DefaultViewBoundsProvider implements ChildViewBoundsProvider {
+        @Override
+        public void provideBounds(ViewGroup parent, View child, Rect bounds) {
+            child.getDrawingRect(bounds);
+            bounds.offset(0, (int) child.getTranslationY());
+            parent.offsetDescendantRectToMyCoords(child, bounds);
+
+            // Additionally offset the bounds based on parent container's absolute position.
+            Rect parentGlobalVisibleBounds = new Rect();
+            parent.getGlobalVisibleRect(parentGlobalVisibleBounds);
+            bounds.offset(parentGlobalVisibleBounds.left, parentGlobalVisibleBounds.top);
+        }
+    }
+
+    /**
+     * Implementation of {@link ChildViewBoundsProvider} that returns the global visible bounds of
+     * the child view. This should be used when the {@link ViewGroupFader} is not used together with
+     * a RecyclerView.
+     */
+    static final class GlobalVisibleViewBoundsProvider implements ChildViewBoundsProvider {
+        @Override
+        public void provideBounds(ViewGroup parent, View child, Rect bounds) {
+            // Get the absolute position of the child. Normally we'd need to also reset the
+            // transformation matrix before computing this, but the transformations we apply set
+            // a pivot that preserves the coordinate of the top/bottom boundary used to compute the
+            // scaling factor in the first place.
+            child.getGlobalVisibleRect(bounds);
+        }
+    }
+
+    ViewGroupFader(
+            ViewGroup parent,
+            AnimationCallback callback,
+            ChildViewBoundsProvider childViewBoundsProvider) {
+        this.mParent = parent;
+        this.mCallback = callback;
+        this.mChildViewBoundsProvider = childViewBoundsProvider;
+        this.mContainerBoundsProvider = new ScreenContainerBoundsProvider();
+    }
+
+    AnimationCallback getAnimationCallback() {
+        return mCallback;
+    }
+
+    /**
+     * Sets the lower bound of the scale the view can reach, on a scale of 0 to 1.
+     *
+     * @param scale the value for the lower bound of the scale.
+     */
+    void setScaleLowerBound(float scale) {
+        mScaleLowerBound = scale;
+    }
+
+    /**
+     * Sets the lower bound of the alpha the view can reach, on a scale of 0 to 1.
+     *
+     * @param alpha the value for the lower bound of the alpha.
+     */
+    void setAlphaLowerBound(float alpha) {
+        mAlphaLowerBound = alpha;
+    }
+
+    void setTopInterpolator(BaseInterpolator interpolator) {
+        this.mTopInterpolator = interpolator;
+    }
+
+    void setBottomInterpolator(BaseInterpolator interpolator) {
+        this.mBottomInterpolator = interpolator;
+    }
+
+    void setContainerBoundsProvider(ContainerBoundsProvider boundsProvider) {
+        this.mContainerBoundsProvider = boundsProvider;
+    }
+
+    void updateFade() {
+        mContainerBoundsProvider.provideBounds(mParent, mContainerBounds);
+        mTopBoundPixels = mContainerBounds.height() * mChainedBoundsTop;
+        mBottomBoundPixels = mContainerBounds.height() * mChainedBoundsBottom;
+
+        updateListElementFades(mParent, true);
+    }
+
+    /** For each list element, calculate and adjust the scale and alpha based on its position */
+    private void updateListElementFades(ViewGroup parent, boolean shouldFade) {
+        for (int i = 0; i < parent.getChildCount(); i++) {
+            View child = parent.getChildAt(i);
+            if (child.getVisibility() != View.VISIBLE) {
+                continue;
+            }
+
+            if (shouldFade) {
+                fadeElement(parent, child);
+            }
+        }
+    }
+
+    private void fadeElement(ViewGroup parent, View child) {
+        mChildViewBoundsProvider.provideBounds(parent, child, mOffsetViewBounds);
+        setViewPropertiesByPosition(child, mOffsetViewBounds, mTopBoundPixels, mBottomBoundPixels);
+    }
+
+    /** Set the bounds and change the view's scale and alpha accordingly */
+    private void setViewPropertiesByPosition(
+            View view, Rect bounds, float topBoundPixels, float bottomBoundPixels) {
+        float fadeOutRegionFraction;
+        if (view.getHeight() < topBoundPixels && view.getHeight() > bottomBoundPixels) {
+            // Scale from LOWER_REGION_FRACTION to UPPER_REGION_FRACTION based on the ratio of view
+            // height to chain region height.
+            fadeOutRegionFraction = lerp(
+                    mChainedLowerRegion,
+                    mChainedUpperRegion,
+                    (view.getHeight() - bottomBoundPixels) / (topBoundPixels - bottomBoundPixels));
+        } else if (view.getHeight() < bottomBoundPixels) {
+            fadeOutRegionFraction = mChainedLowerRegion;
+        } else {
+            fadeOutRegionFraction = mChainedUpperRegion;
+        }
+        int fadeOutRegionHeight = (int) (mContainerBounds.height() * fadeOutRegionFraction);
+        int topFadeBoundary = fadeOutRegionHeight + mContainerBounds.top;
+        int bottomFadeBoundary = mContainerBounds.bottom - fadeOutRegionHeight;
+        boolean wasFullSize = (view.getScaleX() == 1);
+
+        MarginLayoutParams lp = (MarginLayoutParams) view.getLayoutParams();
+        view.setPivotX(view.getWidth() * 0.5f);
+        if (bounds.top > bottomFadeBoundary && mCallback.shouldFadeFromBottom(view)) {
+            view.setPivotY((float) -lp.topMargin);
+            scaleAndFadeByRelativeOffsetFraction(
+                    view,
+                    mBottomInterpolator.getInterpolation(
+                            (float) (mContainerBounds.bottom - bounds.top) / fadeOutRegionHeight));
+        } else if (bounds.bottom < topFadeBoundary && mCallback.shouldFadeFromTop(view)) {
+            view.setPivotY(view.getMeasuredHeight() + (float) lp.bottomMargin);
+            scaleAndFadeByRelativeOffsetFraction(
+                    view,
+                    mTopInterpolator.getInterpolation(
+                            (float) (bounds.bottom - mContainerBounds.top) / fadeOutRegionHeight));
+        } else {
+            if (!wasFullSize) {
+                mCallback.viewHasBecomeFullSize(view);
+            }
+            setDefaultSizeAndAlphaForView(view);
+        }
+    }
+
+    /**
+     * Change the scale and opacity of the view based on its offset fraction to the
+     * determining bound.
+     */
+    private void scaleAndFadeByRelativeOffsetFraction(View view, float offsetFraction) {
+        float alpha = lerp(mAlphaLowerBound, 1, offsetFraction);
+        view.setTransitionAlpha(alpha);
+        float scale = lerp(mScaleLowerBound, 1, offsetFraction);
+        view.setScaleX(scale);
+        view.setScaleY(scale);
+    }
+
+    /** Set the scale and alpha of the view to the full default */
+    private void setDefaultSizeAndAlphaForView(View view) {
+        view.setTransitionAlpha(1f);
+        view.setScaleX(1f);
+        view.setScaleY(1f);
+    }
+
+    /**
+     * Linear interpolation between [min, max] using [fraction].
+     *
+     * @param min   the starting point of the interpolation range.
+     * @param max   the ending point of the interpolation range.
+     * @param fraction the proportion of the range to linearly interpolate for.
+     * @return the interpolated value.
+     */
+    private static float lerp(float min, float max, float fraction) {
+        return min + (max - min) * fraction;
+    }
+}
diff --git a/core/java/com/android/internal/widget/floatingtoolbar/OWNERS b/core/java/com/android/internal/widget/floatingtoolbar/OWNERS
new file mode 100644
index 0000000..ed9425c
--- /dev/null
+++ b/core/java/com/android/internal/widget/floatingtoolbar/OWNERS
@@ -0,0 +1 @@
+include /core/java/android/view/selectiontoolbar/OWNERS
diff --git a/core/java/com/android/server/backup/CompanionBackupHelper.java b/core/java/com/android/server/backup/CompanionBackupHelper.java
new file mode 100644
index 0000000..ef247c2
--- /dev/null
+++ b/core/java/com/android/server/backup/CompanionBackupHelper.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.backup;
+
+import android.annotation.UserIdInt;
+import android.app.backup.BlobBackupHelper;
+import android.companion.ICompanionDeviceManager;
+import android.content.Context;
+import android.os.ServiceManager;
+import android.util.Slog;
+
+/**
+ * CDM backup and restore helper.
+ */
+public class CompanionBackupHelper extends BlobBackupHelper {
+
+    private static final String TAG = "CompanionBackupHelper";
+
+    // current schema of the backup state blob
+    private static final int BLOB_VERSION = 1;
+
+    // key under which the CDM data blob is committed to back up
+    private static final String KEY_COMPANION = "companion";
+
+    @UserIdInt
+    private final int mUserId;
+
+    public CompanionBackupHelper(int userId) {
+        super(BLOB_VERSION, KEY_COMPANION);
+
+        mUserId = userId;
+    }
+
+    @Override
+    protected byte[] getBackupPayload(String key) {
+        byte[] payload = null;
+        if (KEY_COMPANION.equals(key)) {
+            try {
+                ICompanionDeviceManager cdm = ICompanionDeviceManager.Stub.asInterface(
+                        ServiceManager.getService(Context.COMPANION_DEVICE_SERVICE));
+                payload = cdm.getBackupPayload(mUserId);
+            } catch (Exception e) {
+                Slog.e(TAG, "Error getting backup from CompanionDeviceManager.", e);
+            }
+        }
+        return payload;
+    }
+
+    @Override
+    protected void applyRestoredPayload(String key, byte[] payload) {
+        Slog.i(TAG, "Got companion backup data.");
+        if (KEY_COMPANION.equals(key)) {
+            try {
+                ICompanionDeviceManager cdm = ICompanionDeviceManager.Stub.asInterface(
+                        ServiceManager.getService(Context.COMPANION_DEVICE_SERVICE));
+                cdm.applyRestoredPayload(payload, mUserId);
+            } catch (Exception e) {
+                Slog.e(TAG, "Error applying restored payload to CompanionDeviceManager.", e);
+            }
+        }
+    }
+}
diff --git a/core/jni/Android.bp b/core/jni/Android.bp
index 42d6896..c19265a 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -123,6 +123,7 @@
                 "android_database_SQLiteConnection.cpp",
                 "android_database_SQLiteGlobal.cpp",
                 "android_database_SQLiteDebug.cpp",
+                "android_database_SQLiteRawStatement.cpp",
                 "android_graphics_GraphicBuffer.cpp",
                 "android_graphics_SurfaceTexture.cpp",
                 "android_view_CompositionSamplingListener.cpp",
@@ -378,7 +379,6 @@
                 "libbinary_parse",
                 "libdng_sdk",
                 "libft2",
-                "libhostgraphics",
                 "libhwui",
                 "libimage_type_recognition",
                 "libjpeg",
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index e5d5676..9aa992b 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -137,6 +137,7 @@
 extern int register_android_database_SQLiteConnection(JNIEnv* env);
 extern int register_android_database_SQLiteGlobal(JNIEnv* env);
 extern int register_android_database_SQLiteDebug(JNIEnv* env);
+extern int register_android_database_SQLiteRawStatement(JNIEnv* env);
 extern int register_android_media_MediaMetrics(JNIEnv *env);
 extern int register_android_os_Debug(JNIEnv* env);
 extern int register_android_os_GraphicsEnvironment(JNIEnv* env);
@@ -1566,6 +1567,7 @@
         REG_JNI(register_android_database_SQLiteConnection),
         REG_JNI(register_android_database_SQLiteGlobal),
         REG_JNI(register_android_database_SQLiteDebug),
+        REG_JNI(register_android_database_SQLiteRawStatement),
         REG_JNI(register_android_os_Debug),
         REG_JNI(register_android_os_FileObserver),
         REG_JNI(register_android_os_GraphicsEnvironment),
diff --git a/core/jni/TEST_MAPPING b/core/jni/TEST_MAPPING
index 2844856..ea0b01e 100644
--- a/core/jni/TEST_MAPPING
+++ b/core/jni/TEST_MAPPING
@@ -15,11 +15,9 @@
     {
       "name": "SelfTargetingOverlayDeviceTests",
       "file_patterns": ["Overlay"]
-    }
-  ],
-  "presubmit-large": [
+    },
     {
-      "name": "CtsContentTestCases",
+      "name": "CtsResourcesTestCases",
       "options": [
         {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
diff --git a/core/jni/android_content_res_ApkAssets.cpp b/core/jni/android_content_res_ApkAssets.cpp
index e9ada23..52a9578 100644
--- a/core/jni/android_content_res_ApkAssets.cpp
+++ b/core/jni/android_content_res_ApkAssets.cpp
@@ -74,17 +74,37 @@
   FORMAT_DIRECTORY = 3,
 };
 
-Guarded<std::unique_ptr<const ApkAssets>>& ApkAssetsFromLong(jlong ptr) {
-    return *reinterpret_cast<Guarded<std::unique_ptr<const ApkAssets>>*>(ptr);
+Guarded<AssetManager2::ApkAssetsPtr>& ApkAssetsFromLong(jlong ptr) {
+  return *reinterpret_cast<Guarded<AssetManager2::ApkAssetsPtr>*>(ptr);
 }
 
-static jlong CreateGuardedApkAssets(std::unique_ptr<const ApkAssets> assets) {
-    auto guarded_assets = new Guarded<std::unique_ptr<const ApkAssets>>(std::move(assets));
-    return reinterpret_cast<jlong>(guarded_assets);
+static jlong CreateGuardedApkAssets(AssetManager2::ApkAssetsPtr assets) {
+  auto guarded_assets = new Guarded<AssetManager2::ApkAssetsPtr>(std::move(assets));
+  return reinterpret_cast<jlong>(guarded_assets);
 }
 
-static void DeleteGuardedApkAssets(Guarded<std::unique_ptr<const ApkAssets>>& apk_assets) {
-    delete &apk_assets;
+static void DeleteGuardedApkAssets(Guarded<AssetManager2::ApkAssetsPtr>& apk_assets) {
+  apk_assets.safeDelete([&apk_assets](AssetManager2::ApkAssetsPtr* assets) {
+    if (!assets) {
+      ALOGW("ApkAssets: Double delete of native assets object %p, ignored", &apk_assets);
+    } else if (!*assets) {
+      ALOGW("ApkAssets: Empty native assets pointer in native assets object %p", &apk_assets);
+    } else {
+      // |RefBase| increments |StrongCount| for each |sp<>| instance, and |WeakCount| for
+      // both |sp<>| and |wp<>| instances. This means the actual |wp<>| instance count
+      // is |WeakCount - StrongCount|.
+      const auto useCount = (*assets)->getStrongCount();
+      const auto weakCount = (*assets)->getWeakRefs()->getWeakCount() - useCount;
+      if (useCount > 1) {
+        ALOGW("ApkAssets: Deleting an object '%s' with %d > 1 strong and %d weak references",
+              (*assets)->GetDebugName().c_str(), int(useCount), int(weakCount));
+      } else if (weakCount > 0) {
+        ALOGW("ApkAssets: Deleting an ApkAssets object '%s' with %d weak references",
+              (*assets)->GetDebugName().c_str(), int(weakCount));
+      }
+    }
+  });
+  delete &apk_assets;
 }
 
 class LoaderAssetsProvider : public AssetsProvider {
@@ -209,7 +229,7 @@
   ATRACE_NAME(base::StringPrintf("LoadApkAssets(%s)", path.c_str()).c_str());
 
   auto loader_assets = LoaderAssetsProvider::Create(env, assets_provider);
-  std::unique_ptr<ApkAssets> apk_assets;
+  AssetManager2::ApkAssetsPtr apk_assets;
   switch (format) {
     case FORMAT_APK: {
         auto assets = MultiAssetsProvider::Create(std::move(loader_assets),
@@ -269,7 +289,7 @@
   }
 
   auto loader_assets = LoaderAssetsProvider::Create(env, assets_provider);
-  std::unique_ptr<const ApkAssets> apk_assets;
+  AssetManager2::ApkAssetsPtr apk_assets;
   switch (format) {
     case FORMAT_APK: {
         auto assets =
@@ -336,7 +356,7 @@
   }
 
   auto loader_assets = LoaderAssetsProvider::Create(env, assets_provider);
-  std::unique_ptr<const ApkAssets> apk_assets;
+  AssetManager2::ApkAssetsPtr apk_assets;
   switch (format) {
     case FORMAT_APK: {
         auto assets =
@@ -374,11 +394,17 @@
 
 static jlong NativeLoadEmpty(JNIEnv* env, jclass /*clazz*/, jint flags, jobject assets_provider) {
   auto apk_assets = ApkAssets::Load(LoaderAssetsProvider::Create(env, assets_provider), flags);
+  if (apk_assets == nullptr) {
+    const std::string error_msg =
+        base::StringPrintf("Failed to load empty assets with provider %p", (void*)assets_provider);
+    jniThrowException(env, "java/io/IOException", error_msg.c_str());
+    return 0;
+  }
   return CreateGuardedApkAssets(std::move(apk_assets));
 }
 
 static void NativeDestroy(JNIEnv* /*env*/, jclass /*clazz*/, jlong ptr) {
-    DeleteGuardedApkAssets(ApkAssetsFromLong(ptr));
+  DeleteGuardedApkAssets(ApkAssetsFromLong(ptr));
 }
 
 static jstring NativeGetAssetPath(JNIEnv* env, jclass /*clazz*/, jlong ptr) {
diff --git a/core/jni/android_content_res_ApkAssets.h b/core/jni/android_content_res_ApkAssets.h
index 7e525dc..8159a53 100644
--- a/core/jni/android_content_res_ApkAssets.h
+++ b/core/jni/android_content_res_ApkAssets.h
@@ -18,13 +18,13 @@
 #define ANDROID_CONTENT_RES_APKASSETS_H
 
 #include "androidfw/ApkAssets.h"
+#include "androidfw/AssetManager2.h"
 #include "androidfw/MutexGuard.h"
-
 #include "jni.h"
 
 namespace android {
 
-Guarded<std::unique_ptr<const ApkAssets>>& ApkAssetsFromLong(jlong ptr);
+Guarded<AssetManager2::ApkAssetsPtr>& ApkAssetsFromLong(jlong ptr);
 
 } // namespace android
 
diff --git a/core/jni/android_database_SQLiteConnection.cpp b/core/jni/android_database_SQLiteConnection.cpp
index 32697ae..29520c2 100644
--- a/core/jni/android_database_SQLiteConnection.cpp
+++ b/core/jni/android_database_SQLiteConnection.cpp
@@ -880,6 +880,20 @@
     }
 }
 
+static jint nativeLastInsertRowId(JNIEnv* env, jclass, jlong connectionPtr) {
+    SQLiteConnection* connection = reinterpret_cast<SQLiteConnection*>(connectionPtr);
+    return sqlite3_last_insert_rowid(connection->db);
+}
+
+static jlong nativeChanges(JNIEnv* env, jclass, jlong connectionPtr) {
+    SQLiteConnection* connection = reinterpret_cast<SQLiteConnection*>(connectionPtr);
+    return sqlite3_changes64(connection->db);
+}
+
+static jlong nativeTotalChanges(JNIEnv* env, jclass, jlong connectionPtr) {
+    SQLiteConnection* connection = reinterpret_cast<SQLiteConnection*>(connectionPtr);
+    return sqlite3_total_changes64(connection->db);
+}
 
 static const JNINativeMethod sMethods[] =
 {
@@ -938,6 +952,10 @@
             (void*)nativeCancel },
     { "nativeResetCancel", "(JZ)V",
             (void*)nativeResetCancel },
+
+    { "nativeLastInsertRowId", "(J)I", (void*) nativeLastInsertRowId },
+    { "nativeChanges", "(J)J", (void*) nativeChanges },
+    { "nativeTotalChanges", "(J)J", (void*) nativeTotalChanges },
 };
 
 int register_android_database_SQLiteConnection(JNIEnv *env)
diff --git a/core/jni/android_database_SQLiteRawStatement.cpp b/core/jni/android_database_SQLiteRawStatement.cpp
new file mode 100644
index 0000000..b6b78811
--- /dev/null
+++ b/core/jni/android_database_SQLiteRawStatement.cpp
@@ -0,0 +1,323 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "SQLiteRawStatement"
+
+#include <string.h>
+#include <algorithm>
+
+#include <jni.h>
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/scoped_primitive_array.h>
+#include <nativehelper/scoped_string_chars.h>
+#include <android_runtime/AndroidRuntime.h>
+#include <android_runtime/Log.h>
+#include <android-base/stringprintf.h>
+#include <core_jni_helpers.h>
+
+#include <utils/Log.h>
+#include <utils/Unicode.h>
+
+#include <sqlite3.h>
+#include <sqlite3_android.h>
+
+#include "android_database_SQLiteCommon.h"
+
+/**
+ * JNI functions supporting the android.database.sqlite.SQLiteRawStatement class.
+ */
+namespace android {
+
+// Helper functions.
+static sqlite3 *db(long statementPtr) {
+    return sqlite3_db_handle(reinterpret_cast<sqlite3_stmt*>(statementPtr));
+}
+
+static sqlite3_stmt* stmt(long statementPtr) {
+    return reinterpret_cast<sqlite3_stmt*>(statementPtr);
+}
+
+// This throws a SQLiteBindOrColumnIndexOutOfRangeException if the parameter index is out
+// of bounds.  The function exists to construct an error message that includes
+// the bounds.
+static void throwInvalidParameter(JNIEnv *env, jlong stmtPtr, jint index) {
+    if (sqlite3_extended_errcode(db(stmtPtr)) == SQLITE_RANGE) {
+        int count = sqlite3_bind_parameter_count(stmt(stmtPtr));
+        std::string message = android::base::StringPrintf(
+            "parameter index %d out of bounds [1,%d]", index, count);
+        char const * errmsg = sqlite3_errstr(SQLITE_RANGE);
+        throw_sqlite3_exception(env, SQLITE_RANGE, errmsg, message.c_str());
+    } else {
+        throw_sqlite3_exception(env, db(stmtPtr), nullptr);
+    }
+}
+
+
+// This throws a SQLiteBindOrColumnIndexOutOfRangeException if the column index is out
+// of bounds.
+static void throwIfInvalidColumn(JNIEnv *env, jlong stmtPtr, jint col) {
+    if (col < 0 || col >= sqlite3_data_count(stmt(stmtPtr))) {
+        int count = sqlite3_data_count(stmt(stmtPtr));
+        std::string message = android::base::StringPrintf(
+            "column index %d out of bounds [0,%d]", col, count - 1);
+        char const * errmsg = sqlite3_errstr(SQLITE_RANGE);
+        throw_sqlite3_exception(env, SQLITE_RANGE, errmsg, message.c_str());
+    }
+}
+
+
+static jint bindParameterCount(JNIEnv* env, jclass, jlong stmtPtr) {
+    return sqlite3_bind_parameter_count(stmt(stmtPtr));
+}
+
+// jname must be in standard UTF-8.  This throws an NPE if jname is null.
+static jint bindParameterIndex(JNIEnv *env, jclass, jlong stmtPtr, jstring jname) {
+    ScopedStringChars name(env, jname);
+    if (name.get() == nullptr) {
+        return 0;
+    }
+    size_t len16 = env->GetStringLength(jname);
+    size_t len8 = utf16_to_utf8_length(reinterpret_cast<const char16_t*>(name.get()), len16);
+    // The extra byte is for the terminating null.
+    char *utf8Name = new char[len8 + 1];
+    utf16_to_utf8(reinterpret_cast<const char16_t*>(name.get()), len16, utf8Name, len8 + 1);
+    int r = sqlite3_bind_parameter_index(stmt(stmtPtr), utf8Name);
+    delete [] utf8Name;
+    return r;
+}
+
+// The name returned from the database is UTF-8.  If there is no matching name,
+// null is returned.
+static jstring bindParameterName(JNIEnv *env, jclass, jlong stmtPtr, jint param) {
+    char const *src = sqlite3_bind_parameter_name(stmt(stmtPtr), param);
+    if (src == nullptr) {
+        return NULL;
+    }
+    return env->NewStringUTF(src);
+}
+
+static jint columnCount(JNIEnv* env, jclass, jlong stmtPtr) {
+    return sqlite3_column_count(stmt(stmtPtr));
+}
+
+// Step the prepared statement.  If the result is other than ROW, DONE, BUSY, or LOCKED, throw an
+// exception if throwOnError is true.  The advantage of throwing from the native latyer is that
+// all the error codes and error strings are easily visible.
+static jint step(JNIEnv* env, jclass, jlong stmtPtr, jboolean throwOnError) {
+    sqlite3_stmt* statement = stmt(stmtPtr);
+    int err = sqlite3_step(statement);
+    switch (err) {
+        case SQLITE_ROW:
+        case SQLITE_DONE:
+        case SQLITE_BUSY:
+        case SQLITE_LOCKED:
+            return err;
+    }
+    if (throwOnError) {
+        throw_sqlite3_exception(env, db(stmtPtr), "failure in step()");
+    }
+    return err;
+}
+
+static void reset(JNIEnv*, jclass, jlong stmtPtr, jboolean clear) {
+    if (clear) sqlite3_clear_bindings(stmt(stmtPtr));
+    // The return value is ignored.
+    sqlite3_reset(stmt(stmtPtr));
+}
+
+static void clearBindings(JNIEnv*, jclass, jlong stmtPtr) {
+    sqlite3_clear_bindings(stmt(stmtPtr));
+}
+
+
+// This binds null to the parameter if the incoming array is null.
+static void bindBlob(JNIEnv* env, jclass obj, jlong stmtPtr, jint index, jbyteArray val,
+        jint offset, jint length) {
+    ScopedByteArrayRO value(env, val);
+    int err;
+    if (value.get() == nullptr) {
+        err = sqlite3_bind_null(stmt(stmtPtr), index);
+    } else {
+        err = sqlite3_bind_blob(stmt(stmtPtr), index, value.get() + offset,
+                                length, SQLITE_TRANSIENT);
+    }
+    if (err != SQLITE_OK) {
+        throwInvalidParameter(env, stmtPtr, index);
+    }
+}
+
+static void bindDouble(JNIEnv* env, jclass, jlong stmtPtr, jint index, jdouble val) {
+    if (sqlite3_bind_double(stmt(stmtPtr), index, val) != SQLITE_OK) {
+        throwInvalidParameter(env, stmtPtr, index);
+    }
+}
+
+static void bindInt(JNIEnv* env, jclass, jlong stmtPtr, jint index, jint val) {
+    if (sqlite3_bind_int(stmt(stmtPtr), index, val) != SQLITE_OK) {
+        throwInvalidParameter(env, stmtPtr, index);
+    }
+}
+
+static void bindLong(JNIEnv* env, jclass, jlong stmtPtr, jint index, jlong val) {
+    if (sqlite3_bind_int64(stmt(stmtPtr), index, val) != SQLITE_OK) {
+        throwInvalidParameter(env, stmtPtr, index);
+    }
+}
+
+static void bindNull(JNIEnv* env, jclass, jlong stmtPtr, jint index) {
+    if (sqlite3_bind_null(stmt(stmtPtr), index) != SQLITE_OK) {
+        throwInvalidParameter(env, stmtPtr, index);
+    }
+}
+
+// This binds null to the parameter if the string is null.
+static void bindText(JNIEnv* env, jclass, jlong stmtPtr, jint index, jstring val) {
+    ScopedStringChars value(env, val);
+    int err;
+    if (value.get() == nullptr) {
+        err = sqlite3_bind_null(stmt(stmtPtr), index);
+    } else {
+        jsize valueLength = env->GetStringLength(val);
+        err = sqlite3_bind_text16(stmt(stmtPtr), index, value.get(),
+            valueLength * sizeof(jchar), SQLITE_TRANSIENT);
+    }
+    if (err != SQLITE_OK) {
+        throwInvalidParameter(env, stmtPtr, index);
+    }
+}
+
+
+static jint columnType(JNIEnv* env, jclass, jlong stmtPtr, jint col) {
+    throwIfInvalidColumn(env, stmtPtr, col);
+    return sqlite3_column_type(stmt(stmtPtr), col);
+}
+
+static jstring columnName(JNIEnv* env, jclass, jlong stmtPtr, jint col) {
+    throwIfInvalidColumn(env, stmtPtr, col);
+    const jchar* name = static_cast<const jchar*>(sqlite3_column_name16(stmt(stmtPtr), col));
+    if (name == nullptr) {
+        throw_sqlite3_exception(env, db(stmtPtr), "error fetching columnName()");
+        return NULL;
+    }
+    size_t length = strlen16(reinterpret_cast<const char16_t*>(name));
+    return env->NewString(name, length);
+}
+
+static jint columnBytes(JNIEnv* env, jclass, jlong stmtPtr, jint col) {
+    throwIfInvalidColumn(env, stmtPtr, col);
+    return sqlite3_column_bytes16(stmt(stmtPtr), col);
+}
+
+
+static jbyteArray columnBlob(JNIEnv* env, jclass, jlong stmtPtr, jint col) {
+    throwIfInvalidColumn(env, stmtPtr, col);
+    const void* blob = sqlite3_column_blob(stmt(stmtPtr), col);
+    if (blob == nullptr) {
+        return NULL;
+    }
+    size_t size = sqlite3_column_bytes(stmt(stmtPtr), col);
+    jbyteArray result = env->NewByteArray(size);
+    if (result == nullptr) {
+        // An OutOfMemory exception will have been thrown.
+        return NULL;
+    }
+    env->SetByteArrayRegion(result, 0, size, reinterpret_cast<const jbyte*>(blob));
+    return result;
+}
+
+static int columnBuffer(JNIEnv* env, jclass, jlong stmtPtr, jint col,
+        jbyteArray buffer, jint offset, jint length, jint srcOffset) {
+    throwIfInvalidColumn(env, stmtPtr, col);
+    const void* blob = sqlite3_column_blob(stmt(stmtPtr), col);
+    if (blob == nullptr) {
+        return 0;
+    }
+    jsize bsize = sqlite3_column_bytes(stmt(stmtPtr), col);
+    if (bsize == 0 || bsize <= srcOffset) {
+        return 0;
+    }
+    jsize want = std::min(bsize - srcOffset, length);
+    env->SetByteArrayRegion(buffer, offset, want, reinterpret_cast<const jbyte*>(blob) + srcOffset);
+    return want;
+}
+
+static jdouble columnDouble(JNIEnv* env, jclass, jlong stmtPtr, jint col) {
+    throwIfInvalidColumn(env, stmtPtr, col);
+    return sqlite3_column_double(stmt(stmtPtr), col);
+}
+
+static jint columnInt(JNIEnv* env, jclass, jlong stmtPtr, jint col) {
+    throwIfInvalidColumn(env, stmtPtr, col);
+    return sqlite3_column_int(stmt(stmtPtr), col);
+}
+
+static jlong columnLong(JNIEnv* env, jclass, jlong stmtPtr, jint col) {
+    throwIfInvalidColumn(env, stmtPtr, col);
+    return sqlite3_column_int64(stmt(stmtPtr), col);
+}
+
+static jstring columnText(JNIEnv* env, jclass, jlong stmtPtr, jint col) {
+    throwIfInvalidColumn(env, stmtPtr, col);
+    const jchar* text = static_cast<const jchar*>(sqlite3_column_text16(stmt(stmtPtr), col));
+    if (text == nullptr) {
+        return NULL;
+    }
+    size_t length = sqlite3_column_bytes16(stmt(stmtPtr), col) / sizeof(jchar);
+    return env->NewString(text, length);
+}
+
+static const JNINativeMethod sStatementMethods[] =
+{
+    // Metadata
+    { "nativeBindParameterCount", "(J)I", (void*) bindParameterCount },
+    { "nativeBindParameterIndex", "(JLjava/lang/String;)I", (void*) bindParameterIndex },
+    { "nativeBindParameterName", "(JI)Ljava/lang/String;", (void*) bindParameterName },
+
+    // Operations on a statement
+    { "nativeStep", "(JZ)I", (void*) step },
+    { "nativeReset", "(JZ)V", (void*) reset },
+    { "nativeClearBindings", "(J)V", (void*) clearBindings },
+
+    // Methods that bind values to parameters
+    { "nativeBindBlob", "(JI[BII)V", (void*) bindBlob },
+    { "nativeBindDouble", "(JID)V", (void*) bindDouble },
+    { "nativeBindInt", "(JII)V", (void*) bindInt },
+    { "nativeBindLong", "(JIJ)V", (void*) bindLong },
+    { "nativeBindNull", "(JI)V", (void*) bindNull },
+    { "nativeBindText", "(JILjava/lang/String;)V", (void*) bindText },
+
+    // Methods that return information about columns in a result row.
+    { "nativeColumnCount", "(J)I", (void*) columnCount },
+    { "nativeColumnType", "(JI)I", (void*) columnType },
+    { "nativeColumnName", "(JI)Ljava/lang/String;", (void*) columnName },
+
+    { "nativeColumnBytes", "(JI)I", (void*) columnBytes },
+
+    { "nativeColumnBlob", "(JI)[B", (void*) columnBlob },
+    { "nativeColumnBuffer", "(JI[BIII)I", (void*) columnBuffer },
+    { "nativeColumnDouble", "(JI)D", (void*) columnDouble },
+    { "nativeColumnInt", "(JI)I", (void*) columnInt },
+    { "nativeColumnLong", "(JI)J", (void*) columnLong },
+    { "nativeColumnText", "(JI)Ljava/lang/String;", (void*) columnText },
+};
+
+int register_android_database_SQLiteRawStatement(JNIEnv *env)
+{
+    return RegisterMethodsOrDie(env, "android/database/sqlite/SQLiteRawStatement",
+                                sStatementMethods, NELEM(sStatementMethods));
+}
+
+} // namespace android
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index 2a670e8..1c59742 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -17,22 +17,21 @@
 
 //#define LOG_NDEBUG 0
 #define LOG_TAG "Camera-JNI"
-#include <utils/Log.h>
-
-#include "jni.h"
-#include <nativehelper/JNIHelp.h>
-#include "core_jni_helpers.h"
 #include <android_runtime/android_graphics_SurfaceTexture.h>
 #include <android_runtime/android_view_Surface.h>
-
+#include <binder/IMemory.h>
+#include <camera/Camera.h>
+#include <camera/StringUtils.h>
 #include <cutils/properties.h>
-#include <utils/Vector.h>
-#include <utils/Errors.h>
-
 #include <gui/GLConsumer.h>
 #include <gui/Surface.h>
-#include <camera/Camera.h>
-#include <binder/IMemory.h>
+#include <nativehelper/JNIHelp.h>
+#include <utils/Errors.h>
+#include <utils/Log.h>
+#include <utils/Vector.h>
+
+#include "core_jni_helpers.h"
+#include "jni.h"
 
 using namespace android;
 
@@ -562,7 +561,7 @@
     const char16_t *rawClientName = reinterpret_cast<const char16_t*>(
         env->GetStringChars(clientPackageName, NULL));
     jsize rawClientNameLen = env->GetStringLength(clientPackageName);
-    String16 clientName(rawClientName, rawClientNameLen);
+    std::string clientName = toStdString(rawClientName, rawClientNameLen);
     env->ReleaseStringChars(clientPackageName,
                             reinterpret_cast<const jchar*>(rawClientName));
 
diff --git a/core/jni/android_hardware_HardwareBuffer.cpp b/core/jni/android_hardware_HardwareBuffer.cpp
index 5fcc46e..2ea2158d 100644
--- a/core/jni/android_hardware_HardwareBuffer.cpp
+++ b/core/jni/android_hardware_HardwareBuffer.cpp
@@ -203,10 +203,10 @@
     Parcel* parcel = parcelForJavaObject(env, in);
     if (parcel) {
         sp<GraphicBuffer> buffer = new GraphicBuffer();
-        parcel->read(*buffer);
-        return reinterpret_cast<jlong>(new GraphicBufferWrapper(buffer));
+        if (parcel->read(*buffer) == STATUS_OK) {
+            return reinterpret_cast<jlong>(new GraphicBufferWrapper(buffer));
+        }
     }
-
     return NULL;
 }
 
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index 4cf17b7..1998548 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -523,13 +523,14 @@
     }
 
     jclass clazz = env->FindClass(kClassPathName);
-    const char* zechars = regId.string();
-    jstring zestring = env->NewStringUTF(zechars);
+    const char *regIdString = regId.string();
+    jstring regIdJString = env->NewStringUTF(regIdString);
 
     env->CallStaticVoidMethod(clazz, gAudioPolicyEventHandlerMethods.postDynPolicyEventFromNative,
-            event, zestring, val);
+                              event, regIdJString, val);
 
-    env->ReleaseStringUTFChars(zestring, zechars);
+    const char *regIdJChars = env->GetStringUTFChars(regIdJString, NULL);
+    env->ReleaseStringUTFChars(regIdJString, regIdJChars);
     env->DeleteLocalRef(clazz);
 }
 
diff --git a/core/jni/android_os_PerformanceHintManager.cpp b/core/jni/android_os_PerformanceHintManager.cpp
index d8a2497..ffe844d 100644
--- a/core/jni/android_os_PerformanceHintManager.cpp
+++ b/core/jni/android_os_PerformanceHintManager.cpp
@@ -41,7 +41,7 @@
 typedef void (*APH_reportActualWorkDuration)(APerformanceHintSession*, int64_t);
 typedef void (*APH_closeSession)(APerformanceHintSession* session);
 typedef void (*APH_sendHint)(APerformanceHintSession*, int32_t);
-typedef void (*APH_setThreads)(APerformanceHintSession*, const pid_t*, size_t);
+typedef int (*APH_setThreads)(APerformanceHintSession*, const pid_t*, size_t);
 typedef void (*APH_getThreadIds)(APerformanceHintSession*, int32_t* const, size_t* const);
 
 bool gAPerformanceHintBindingInitialized = false;
@@ -112,6 +112,20 @@
 
 } // namespace
 
+static void throwExceptionForErrno(JNIEnv* env, int err, const std::string& msg) {
+    switch (err) {
+        case EINVAL:
+            jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException", msg.c_str());
+            break;
+        case EPERM:
+            jniThrowExceptionFmt(env, "java/lang/SecurityException", msg.c_str());
+            break;
+        default:
+            jniThrowException(env, "java/lang/RuntimeException", msg.c_str());
+            break;
+    }
+}
+
 static jlong nativeAcquireManager(JNIEnv* env, jclass clazz) {
     ensureAPerformanceHintBindingInitialized();
     return reinterpret_cast<jlong>(gAPH_getManagerFn());
@@ -174,8 +188,11 @@
     for (size_t i = 0; i < tidsArray.size(); ++i) {
         tidsVector.push_back(static_cast<int32_t>(tidsArray[i]));
     }
-    gAPH_setThreadsFn(reinterpret_cast<APerformanceHintSession*>(nativeSessionPtr),
-                      tidsVector.data(), tidsVector.size());
+    int err = gAPH_setThreadsFn(reinterpret_cast<APerformanceHintSession*>(nativeSessionPtr),
+                                tidsVector.data(), tidsVector.size());
+    if (err != 0) {
+        throwExceptionForErrno(env, err, "Failed to set threads for hint session");
+    }
 }
 
 // This call should only be used for validation in tests only. This call will initiate two IPC
diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp
index a2205eb..979c9e3 100644
--- a/core/jni/android_util_AssetManager.cpp
+++ b/core/jni/android_util_AssetManager.cpp
@@ -17,6 +17,9 @@
 #define ATRACE_TAG ATRACE_TAG_RESOURCES
 #define LOG_TAG "asset"
 
+#include "android_runtime/android_util_AssetManager.h"
+
+#include <errno.h>
 #include <inttypes.h>
 #include <linux/capability.h>
 #include <stdio.h>
@@ -31,7 +34,7 @@
 #include "android-base/logging.h"
 #include "android-base/properties.h"
 #include "android-base/stringprintf.h"
-#include "android_runtime/android_util_AssetManager.h"
+#include "android_content_res_ApkAssets.h"
 #include "android_runtime/AndroidRuntime.h"
 #include "android_util_Binder.h"
 #include "androidfw/Asset.h"
@@ -39,11 +42,9 @@
 #include "androidfw/AssetManager2.h"
 #include "androidfw/AttributeResolution.h"
 #include "androidfw/MutexGuard.h"
-#include <androidfw/ResourceTimer.h>
+#include "androidfw/ResourceTimer.h"
 #include "androidfw/ResourceTypes.h"
 #include "androidfw/ResourceUtils.h"
-
-#include "android_content_res_ApkAssets.h"
 #include "core_jni_helpers.h"
 #include "jni.h"
 #include "nativehelper/JNIPlatformHelp.h"
@@ -161,9 +162,30 @@
   return *AssetManagerForNdkAssetManager(reinterpret_cast<AAssetManager*>(ptr));
 }
 
+struct ScopedLockedAssetsOperation {
+  ScopedLockedAssetsOperation(Guarded<AssetManager2>& guarded_am)
+        : am_(guarded_am), op_(am_->StartOperation()) {}
+
+  AssetManager2& operator*() { return *am_; }
+
+  AssetManager2* operator->() { return am_.get(); }
+
+  AssetManager2* get() { return am_.get(); }
+
+  private:
+  DISALLOW_COPY_AND_ASSIGN(ScopedLockedAssetsOperation);
+
+  ScopedLock<AssetManager2> am_;
+  AssetManager2::ScopedOperation op_;
+};
+
+ScopedLockedAssetsOperation LockAndStartAssetManager(jlong ptr) {
+  return ScopedLockedAssetsOperation(AssetManagerFromLong(ptr));
+}
+
 static jobject NativeGetOverlayableMap(JNIEnv* env, jclass /*clazz*/, jlong ptr,
                                        jstring package_name) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   const ScopedUtfChars package_name_utf8(env, package_name);
   CHECK(package_name_utf8.c_str() != nullptr);
   const std::string std_package_name(package_name_utf8.c_str());
@@ -209,7 +231,7 @@
 
 static jstring NativeGetOverlayablesToString(JNIEnv* env, jclass /*clazz*/, jlong ptr,
                                              jstring package_name) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   const ScopedUtfChars package_name_utf8(env, package_name);
   CHECK(package_name_utf8.c_str() != nullptr);
   const std::string std_package_name(package_name_utf8.c_str());
@@ -296,7 +318,7 @@
   ATRACE_NAME("AssetManager::SetApkAssets");
 
   const jsize apk_assets_len = env->GetArrayLength(apk_assets_array);
-  std::vector<const ApkAssets*> apk_assets;
+  std::vector<AssetManager2::ApkAssetsPtr> apk_assets;
   apk_assets.reserve(apk_assets_len);
   for (jsize i = 0; i < apk_assets_len; i++) {
     jobject obj = env->GetObjectArrayElement(apk_assets_array, i);
@@ -310,12 +332,17 @@
     if (env->ExceptionCheck()) {
       return;
     }
-
+    if (!apk_assets_native_ptr) {
+      ALOGW("Got a closed ApkAssets instance at index %d for AssetManager %p", i, (void*)ptr);
+      std::string msg = StringPrintf("ApkAssets at index %d is closed, native pointer is null", i);
+      jniThrowException(env, "java/lang/IllegalArgumentException", msg.c_str());
+      return;
+    }
     auto scoped_assets = ScopedLock(ApkAssetsFromLong(apk_assets_native_ptr));
-    apk_assets.push_back(scoped_assets->get());
+    apk_assets.emplace_back(*scoped_assets);
   }
 
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   assetmanager->SetApkAssets(apk_assets, invalidate_caches);
 }
 
@@ -365,14 +392,14 @@
   configuration.screenLayout2 =
       static_cast<uint8_t>((screen_layout & kScreenLayoutRoundMask) >> kScreenLayoutRoundShift);
 
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   assetmanager->SetConfiguration(configuration);
 }
 
 static jobject NativeGetAssignedPackageIdentifiers(JNIEnv* env, jclass /*clazz*/, jlong ptr,
                                                    jboolean includeOverlays,
                                                    jboolean includeLoaders) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
 
   jobject sparse_array =
         env->NewObject(gSparseArrayOffsets.classObject, gSparseArrayOffsets.constructor);
@@ -402,7 +429,7 @@
 }
 
 static jboolean ContainsAllocatedTable(JNIEnv* env, jclass /*clazz*/, jlong ptr) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   return assetmanager->ContainsAllocatedTable();
 }
 
@@ -413,7 +440,7 @@
     return nullptr;
   }
 
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   std::unique_ptr<AssetDir> asset_dir =
       assetmanager->OpenDir(path_utf8.c_str());
   if (asset_dir == nullptr) {
@@ -461,7 +488,7 @@
     return 0;
   }
 
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   std::unique_ptr<Asset> asset =
       assetmanager->Open(asset_path_utf8.c_str(), static_cast<Asset::AccessMode>(access_mode));
   if (!asset) {
@@ -481,7 +508,7 @@
 
   ATRACE_NAME(base::StringPrintf("AssetManager::OpenAssetFd(%s)", asset_path_utf8.c_str()).c_str());
 
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   std::unique_ptr<Asset> asset = assetmanager->Open(asset_path_utf8.c_str(), Asset::ACCESS_RANDOM);
   if (!asset) {
     jniThrowException(env, "java/io/FileNotFoundException", asset_path_utf8.c_str());
@@ -507,7 +534,7 @@
     return 0;
   }
 
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   std::unique_ptr<Asset> asset;
   if (cookie != kInvalidCookie) {
     asset = assetmanager->OpenNonAsset(asset_path_utf8.c_str(), cookie,
@@ -535,7 +562,7 @@
 
   ATRACE_NAME(base::StringPrintf("AssetManager::OpenNonAssetFd(%s)", asset_path_utf8.c_str()).c_str());
 
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   std::unique_ptr<Asset> asset;
   if (cookie != kInvalidCookie) {
     asset = assetmanager->OpenNonAsset(asset_path_utf8.c_str(), cookie, Asset::ACCESS_RANDOM);
@@ -561,7 +588,7 @@
 
   ATRACE_NAME(base::StringPrintf("AssetManager::OpenXmlAsset(%s)", asset_path_utf8.c_str()).c_str());
 
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   std::unique_ptr<Asset> asset;
   if (cookie != kInvalidCookie) {
     asset = assetmanager->OpenNonAsset(asset_path_utf8.c_str(), cookie, Asset::ACCESS_RANDOM);
@@ -609,7 +636,8 @@
   std::unique_ptr<Asset>
       asset(Asset::createFromFd(dup_fd.release(), nullptr, Asset::AccessMode::ACCESS_BUFFER));
 
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
+
   ApkAssetsCookie cookie = JavaCookieToApkAssetsCookie(jcookie);
 
   const incfs::map_ptr<void> buffer = asset->getIncFsBuffer(true /* aligned */);
@@ -632,8 +660,9 @@
 static jint NativeGetResourceValue(JNIEnv* env, jclass /*clazz*/, jlong ptr, jint resid,
                                    jshort density, jobject typed_value,
                                    jboolean resolve_references) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   ResourceTimer _timer(ResourceTimer::Counter::GetResourceValue);
+
   auto value = assetmanager->GetResource(static_cast<uint32_t>(resid), false /*may_be_bag*/,
                                          static_cast<uint16_t>(density));
   if (!value.has_value()) {
@@ -651,7 +680,8 @@
 
 static jint NativeGetResourceBagValue(JNIEnv* env, jclass /*clazz*/, jlong ptr, jint resid,
                                       jint bag_entry_id, jobject typed_value) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
+
   auto bag = assetmanager->GetBag(static_cast<uint32_t>(resid));
   if (!bag.has_value()) {
     return ApkAssetsCookieToJavaCookie(kInvalidCookie);
@@ -678,7 +708,8 @@
 }
 
 static jintArray NativeGetStyleAttributes(JNIEnv* env, jclass /*clazz*/, jlong ptr, jint resid) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
+
   auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid));
   if (!bag_result.has_value()) {
     return nullptr;
@@ -699,7 +730,8 @@
 
 static jobjectArray NativeGetResourceStringArray(JNIEnv* env, jclass /*clazz*/, jlong ptr,
                                                  jint resid) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
+
   auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid));
   if (!bag_result.has_value()) {
     return nullptr;
@@ -720,31 +752,36 @@
     }
 
     if (attr_value.type == Res_value::TYPE_STRING) {
-      const ApkAssets* apk_assets = assetmanager->GetApkAssets()[attr_value.cookie];
-      const ResStringPool* pool = apk_assets->GetLoadedArsc()->GetStringPool();
+      const auto& apk_assets = assetmanager->GetApkAssets(attr_value.cookie);
+      if (apk_assets) {
+          const ResStringPool* pool = apk_assets->GetLoadedArsc()->GetStringPool();
 
-      jstring java_string;
-      if (auto str_utf8 = pool->string8At(attr_value.data); str_utf8.has_value()) {
-          java_string = env->NewStringUTF(str_utf8->data());
-      } else {
-          auto str_utf16 = pool->stringAt(attr_value.data);
-          if (!str_utf16.has_value()) {
+          jstring java_string;
+          if (auto str_utf8 = pool->string8At(attr_value.data); str_utf8.has_value()) {
+              java_string = env->NewStringUTF(str_utf8->data());
+          } else {
+              auto str_utf16 = pool->stringAt(attr_value.data);
+              if (!str_utf16.has_value()) {
+                  return nullptr;
+              }
+              java_string = env->NewString(reinterpret_cast<const jchar*>(str_utf16->data()),
+                                           str_utf16->size());
+          }
+
+          // Check for errors creating the strings (if malformed or no memory).
+          if (env->ExceptionCheck()) {
               return nullptr;
           }
-          java_string = env->NewString(reinterpret_cast<const jchar*>(str_utf16->data()),
-                                       str_utf16->size());
+
+          env->SetObjectArrayElement(array, i, java_string);
+
+          // If we have a large amount of string in our array, we might overflow the
+          // local reference table of the VM.
+          env->DeleteLocalRef(java_string);
+      } else {
+          ALOGW("NativeGetResourceStringArray: an expired assets object #%d / %d", i,
+                attr_value.cookie);
       }
-
-      // Check for errors creating the strings (if malformed or no memory).
-      if (env->ExceptionCheck()) {
-        return nullptr;
-      }
-
-      env->SetObjectArrayElement(array, i, java_string);
-
-      // If we have a large amount of string in our array, we might overflow the
-      // local reference table of the VM.
-      env->DeleteLocalRef(java_string);
     }
   }
   return array;
@@ -752,7 +789,8 @@
 
 static jintArray NativeGetResourceStringArrayInfo(JNIEnv* env, jclass /*clazz*/, jlong ptr,
                                                   jint resid) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
+
   auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid));
   if (!bag_result.has_value()) {
     return nullptr;
@@ -790,7 +828,8 @@
 }
 
 static jintArray NativeGetResourceIntArray(JNIEnv* env, jclass /*clazz*/, jlong ptr, jint resid) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
+
   auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid));
   if (!bag_result.has_value()) {
     return nullptr;
@@ -825,21 +864,22 @@
 }
 
 static jint NativeGetResourceArraySize(JNIEnv* env, jclass /*clazz*/, jlong ptr, jint resid) {
-    ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
-    auto bag = assetmanager->GetBag(static_cast<uint32_t>(resid));
-    if (!bag.has_value()) {
-      return -1;
-    }
+  auto assetmanager = LockAndStartAssetManager(ptr);
+  auto bag = assetmanager->GetBag(static_cast<uint32_t>(resid));
+  if (!bag.has_value()) {
+    return -1;
+  }
     return static_cast<jint>((*bag)->entry_count);
 }
 
 static jint NativeGetResourceArray(JNIEnv* env, jclass /*clazz*/, jlong ptr, jint resid,
                                    jintArray out_data) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
-  auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid));
-  if (!bag_result.has_value()) {
+    auto assetmanager = LockAndStartAssetManager(ptr);
+
+    auto bag_result = assetmanager->GetBag(static_cast<uint32_t>(resid));
+    if (!bag_result.has_value()) {
     return -1;
-  }
+    }
 
   const jsize out_data_length = env->GetArrayLength(out_data);
   if (env->ExceptionCheck()) {
@@ -886,7 +926,7 @@
 }
 
 static jint NativeGetParentThemeIdentifier(JNIEnv* env, jclass /*clazz*/, jlong ptr, jint resid) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   const auto parentThemeResId = assetmanager->GetParentThemeResourceId(resid);
   return parentThemeResId.value_or(0);
 }
@@ -913,7 +953,7 @@
     package = package_utf8.c_str();
   }
 
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   auto resid = assetmanager->GetResourceId(name_utf8.c_str(), type, package);
   if (!resid.has_value()) {
     return 0;
@@ -923,7 +963,7 @@
 }
 
 static jstring NativeGetResourceName(JNIEnv* env, jclass /*clazz*/, jlong ptr, jint resid) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   auto name = assetmanager->GetResourceName(static_cast<uint32_t>(resid));
   if (!name.has_value()) {
     return nullptr;
@@ -934,7 +974,7 @@
 }
 
 static jstring NativeGetResourcePackageName(JNIEnv* env, jclass /*clazz*/, jlong ptr, jint resid) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   auto name = assetmanager->GetResourceName(static_cast<uint32_t>(resid));
   if (!name.has_value()) {
     return nullptr;
@@ -947,7 +987,7 @@
 }
 
 static jstring NativeGetResourceTypeName(JNIEnv* env, jclass /*clazz*/, jlong ptr, jint resid) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   auto name = assetmanager->GetResourceName(static_cast<uint32_t>(resid));
   if (!name.has_value()) {
     return nullptr;
@@ -962,7 +1002,7 @@
 }
 
 static jstring NativeGetResourceEntryName(JNIEnv* env, jclass /*clazz*/, jlong ptr, jint resid) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   auto name = assetmanager->GetResourceName(static_cast<uint32_t>(resid));
   if (!name.has_value()) {
     return nullptr;
@@ -980,14 +1020,14 @@
                                                       jclass /*clazz*/,
                                                       jlong ptr,
                                                       jboolean enabled) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   assetmanager->SetResourceResolutionLoggingEnabled(enabled);
 }
 
 static jstring NativeGetLastResourceResolution(JNIEnv* env,
                                                jclass /*clazz*/,
                                                jlong ptr) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   std::string resolution = assetmanager->GetLastResourceResolution();
   if (resolution.empty()) {
     return nullptr;
@@ -998,7 +1038,7 @@
 
 static jobjectArray NativeGetLocales(JNIEnv* env, jclass /*class*/, jlong ptr,
                                      jboolean exclude_system) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   std::set<std::string> locales =
       assetmanager->GetResourceLocales(exclude_system, true /*merge_equivalent_languages*/);
 
@@ -1036,7 +1076,7 @@
 }
 
 static jobjectArray GetSizeAndUiModeConfigurations(JNIEnv* env, jlong ptr) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   auto configurations = assetmanager->GetResourceConfigurations(true /*exclude_system*/,
                                                                 false /*exclude_mipmap*/);
   if (!configurations.has_value()) {
@@ -1070,12 +1110,10 @@
   return GetSizeAndUiModeConfigurations(env, ptr);
 }
 
-static jintArray NativeAttributeResolutionStack(
-    JNIEnv* env, jclass /*clazz*/, jlong ptr,
-    jlong theme_ptr, jint xml_style_res,
-    jint def_style_attr, jint def_style_resid) {
-
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+static jintArray NativeAttributeResolutionStack(JNIEnv* env, jclass /*clazz*/, jlong ptr,
+                                                jlong theme_ptr, jint xml_style_res,
+                                                jint def_style_attr, jint def_style_resid) {
+  auto assetmanager = LockAndStartAssetManager(ptr);
   Theme* theme = reinterpret_cast<Theme*>(theme_ptr);
   CHECK(theme->GetAssetManager() == &(*assetmanager));
   (void) assetmanager;
@@ -1088,29 +1126,36 @@
     }
   }
 
-  auto style_stack = assetmanager->GetBagResIdStack(xml_style_res);
-  auto def_style_stack = assetmanager->GetBagResIdStack(def_style_resid);
+  const auto maybe_style_stack = assetmanager->GetBagResIdStack(xml_style_res);
+  if (!maybe_style_stack.ok()) {
+    jniThrowIOException(env, EBADMSG);
+    return nullptr;
+  }
+  const auto& style_stack = *maybe_style_stack.value();
+  const auto maybe_def_style_stack = assetmanager->GetBagResIdStack(def_style_resid);
+  if (!maybe_def_style_stack.ok()) {
+    jniThrowIOException(env, EBADMSG);
+    return nullptr;
+  }
+  const auto& def_style_stack = *maybe_def_style_stack.value();
 
   jintArray array = env->NewIntArray(style_stack.size() + def_style_stack.size());
   if (env->ExceptionCheck()) {
     return nullptr;
   }
 
-  for (uint32_t i = 0; i < style_stack.size(); i++) {
-    jint attr_resid = style_stack[i];
-    env->SetIntArrayRegion(array, i, 1, &attr_resid);
-  }
-  for (uint32_t i = 0; i < def_style_stack.size(); i++) {
-    jint attr_resid = def_style_stack[i];
-    env->SetIntArrayRegion(array, style_stack.size() + i, 1, &attr_resid);
-  }
+  static_assert(sizeof(jint) == sizeof(decltype(style_stack.front())));
+  env->SetIntArrayRegion(array, 0, style_stack.size(),
+                         reinterpret_cast<const jint*>(style_stack.data()));
+  env->SetIntArrayRegion(array, style_stack.size(), def_style_stack.size(),
+                         reinterpret_cast<const jint*>(def_style_stack.data()));
   return array;
 }
 
 static void NativeApplyStyle(JNIEnv* env, jclass /*clazz*/, jlong ptr, jlong theme_ptr,
                              jint def_style_attr, jint def_style_resid, jlong xml_parser_ptr,
                              jintArray java_attrs, jlong out_values_ptr, jlong out_indices_ptr) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   Theme* theme = reinterpret_cast<Theme*>(theme_ptr);
   CHECK(theme->GetAssetManager() == &(*assetmanager));
   (void) assetmanager;
@@ -1185,7 +1230,7 @@
     }
   }
 
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   Theme* theme = reinterpret_cast<Theme*>(theme_ptr);
   CHECK(theme->GetAssetManager() == &(*assetmanager));
   (void) assetmanager;
@@ -1244,7 +1289,7 @@
     }
   }
 
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   ResourceTimer _timer(ResourceTimer::Counter::RetrieveAttributes);
   ResXMLParser* xml_parser = reinterpret_cast<ResXMLParser*>(xml_parser_ptr);
   auto result =
@@ -1262,7 +1307,7 @@
 }
 
 static jlong NativeThemeCreate(JNIEnv* /*env*/, jclass /*clazz*/, jlong ptr) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   return reinterpret_cast<jlong>(assetmanager->NewTheme().release());
 }
 
@@ -1277,7 +1322,7 @@
 static void NativeThemeApplyStyle(JNIEnv* env, jclass /*clazz*/, jlong ptr, jlong theme_ptr,
                                   jint resid, jboolean force) {
   // AssetManager is accessed via the theme, so grab an explicit lock here.
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   Theme* theme = reinterpret_cast<Theme*>(theme_ptr);
   CHECK(theme->GetAssetManager() == &(*assetmanager));
   (void) assetmanager;
@@ -1295,7 +1340,7 @@
                               jint style_count) {
   // Lock both the original asset manager of the theme and the new asset manager to be used for the
   // theme.
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
 
   uint32_t* style_id_args = nullptr;
   if (style_ids != nullptr) {
@@ -1338,25 +1383,23 @@
   Theme* dst_theme = reinterpret_cast<Theme*>(dst_theme_ptr);
   Theme* src_theme = reinterpret_cast<Theme*>(src_theme_ptr);
 
-  ScopedLock<AssetManager2> src_assetmanager(AssetManagerFromLong(src_asset_manager_ptr));
+  auto src_assetmanager = LockAndStartAssetManager(src_asset_manager_ptr);
   CHECK(src_theme->GetAssetManager() == &(*src_assetmanager));
-  (void) src_assetmanager;
 
   if (dst_asset_manager_ptr != src_asset_manager_ptr) {
-    ScopedLock<AssetManager2> dst_assetmanager(AssetManagerFromLong(dst_asset_manager_ptr));
+    auto dst_assetmanager = LockAndStartAssetManager(dst_asset_manager_ptr);
     CHECK(dst_theme->GetAssetManager() == &(*dst_assetmanager));
-    (void) dst_assetmanager;
-
     dst_theme->SetTo(*src_theme);
   } else {
-      dst_theme->SetTo(*src_theme);
+    dst_theme->SetTo(*src_theme);
   }
 }
 
 static jint NativeThemeGetAttributeValue(JNIEnv* env, jclass /*clazz*/, jlong ptr, jlong theme_ptr,
                                          jint resid, jobject typed_value,
                                          jboolean resolve_references) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
+
   Theme* theme = reinterpret_cast<Theme*>(theme_ptr);
   CHECK(theme->GetAssetManager() == &(*assetmanager));
   (void) assetmanager;
@@ -1379,7 +1422,7 @@
 
 static void NativeThemeDump(JNIEnv* /*env*/, jclass /*clazz*/, jlong ptr, jlong theme_ptr,
                             jint priority, jstring tag, jstring prefix) {
-  ScopedLock<AssetManager2> assetmanager(AssetManagerFromLong(ptr));
+  auto assetmanager = LockAndStartAssetManager(ptr);
   Theme* theme = reinterpret_cast<Theme*>(theme_ptr);
   CHECK(theme->GetAssetManager() == &(*assetmanager));
   (void) assetmanager;
diff --git a/core/jni/android_view_InputEventReceiver.cpp b/core/jni/android_view_InputEventReceiver.cpp
index 0f41229..5c1d91f 100644
--- a/core/jni/android_view_InputEventReceiver.cpp
+++ b/core/jni/android_view_InputEventReceiver.cpp
@@ -278,7 +278,7 @@
 
     if (events & ALOOPER_EVENT_INPUT) {
         JNIEnv* env = AndroidRuntime::getJNIEnv();
-        status_t status = consumeEvents(env, false /*consumeBatches*/, -1, nullptr);
+        status_t status = consumeEvents(env, /*consumeBatches=*/false, -1, nullptr);
         mMessageQueue->raiseAndClearException(env, "handleReceiveCallback");
         return status == OK || status == NO_MEMORY ? KEEP_CALLBACK : REMOVE_CALLBACK;
     }
@@ -398,7 +398,7 @@
                     env->CallVoidMethod(receiverObj.get(),
                                         gInputEventReceiverClassInfo.onFocusEvent,
                                         jboolean(focusEvent->getHasFocus()));
-                    finishInputEvent(seq, true /* handled */);
+                    finishInputEvent(seq, /*handled=*/true);
                     continue;
                 }
                 case InputEventType::CAPTURE: {
@@ -411,7 +411,7 @@
                     env->CallVoidMethod(receiverObj.get(),
                                         gInputEventReceiverClassInfo.onPointerCaptureEvent,
                                         jboolean(captureEvent->getPointerCaptureEnabled()));
-                    finishInputEvent(seq, true /* handled */);
+                    finishInputEvent(seq, /*handled=*/true);
                     continue;
                 }
                 case InputEventType::DRAG: {
@@ -423,7 +423,7 @@
                     env->CallVoidMethod(receiverObj.get(), gInputEventReceiverClassInfo.onDragEvent,
                                         jboolean(dragEvent->isExiting()), dragEvent->getX(),
                                         dragEvent->getY());
-                    finishInputEvent(seq, true /* handled */);
+                    finishInputEvent(seq, /*handled=*/true);
                     continue;
                 }
                 case InputEventType::TOUCH_MODE: {
@@ -436,7 +436,7 @@
                     env->CallVoidMethod(receiverObj.get(),
                                         gInputEventReceiverClassInfo.onTouchModeChanged,
                                         jboolean(touchModeEvent->isInTouchMode()));
-                    finishInputEvent(seq, true /* handled */);
+                    finishInputEvent(seq, /*handled=*/true);
                     continue;
                 }
 
@@ -571,8 +571,8 @@
     sp<NativeInputEventReceiver> receiver =
             reinterpret_cast<NativeInputEventReceiver*>(receiverPtr);
     bool consumedBatch;
-    status_t status = receiver->consumeEvents(env, true /*consumeBatches*/, frameTimeNanos,
-            &consumedBatch);
+    status_t status =
+            receiver->consumeEvents(env, /*consumeBatches=*/true, frameTimeNanos, &consumedBatch);
     if (status && status != DEAD_OBJECT && !env->ExceptionCheck()) {
         std::string message =
                 android::base::StringPrintf("Failed to consume batched input event.  status=%s(%d)",
diff --git a/core/jni/android_view_InputEventSender.cpp b/core/jni/android_view_InputEventSender.cpp
index 15270ef..061f669 100644
--- a/core/jni/android_view_InputEventSender.cpp
+++ b/core/jni/android_view_InputEventSender.cpp
@@ -18,10 +18,10 @@
 
 //#define LOG_NDEBUG 0
 
+#include <android-base/logging.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <input/InputTransport.h>
 #include <inttypes.h>
-#include <log/log.h>
 #include <nativehelper/JNIHelp.h>
 #include <nativehelper/ScopedLocalRef.h>
 #include <utils/Looper.h>
@@ -91,7 +91,8 @@
         mMessageQueue(messageQueue),
         mNextPublishedSeq(1) {
     if (kDebugDispatchCycle) {
-        ALOGD("channel '%s' ~ Initializing input event sender.", getInputChannelName().c_str());
+        LOG(DEBUG) << "channel '" << getInputChannelName()
+                   << "' ~ Initializing input event sender.";
     }
 }
 
@@ -108,7 +109,7 @@
 
 void NativeInputEventSender::dispose() {
     if (kDebugDispatchCycle) {
-        ALOGD("channel '%s' ~ Disposing input event sender.", getInputChannelName().c_str());
+        LOG(DEBUG) << "channel '" << getInputChannelName() << "' ~ Disposing input event sender.";
     }
 
     mMessageQueue->getLooper()->removeFd(mInputPublisher.getChannel()->getFd());
@@ -116,7 +117,7 @@
 
 status_t NativeInputEventSender::sendKeyEvent(uint32_t seq, const KeyEvent* event) {
     if (kDebugDispatchCycle) {
-        ALOGD("channel '%s' ~ Sending key event, seq=%u.", getInputChannelName().c_str(), seq);
+        LOG(DEBUG) << "channel '" << getInputChannelName() << "' ~ Sending key event, seq=" << seq;
     }
 
     uint32_t publishedSeq = mNextPublishedSeq++;
@@ -128,8 +129,8 @@
                                             event->getMetaState(), event->getRepeatCount(),
                                             event->getDownTime(), event->getEventTime());
     if (status) {
-        ALOGW("Failed to send key event on channel '%s'.  status=%d",
-                getInputChannelName().c_str(), status);
+        LOG(WARNING) << "Failed to send key event on channel '" << getInputChannelName()
+                     << "'.  status=" << statusToString(status);
         return status;
     }
     mPublishedSeqMap.emplace(publishedSeq, seq);
@@ -138,7 +139,8 @@
 
 status_t NativeInputEventSender::sendMotionEvent(uint32_t seq, const MotionEvent* event) {
     if (kDebugDispatchCycle) {
-        ALOGD("channel '%s' ~ Sending motion event, seq=%u.", getInputChannelName().c_str(), seq);
+        LOG(DEBUG) << "channel '" << getInputChannelName()
+                   << "' ~ Sending motion event, seq=" << seq;
     }
 
     uint32_t publishedSeq;
@@ -162,8 +164,8 @@
                                                    event->getPointerProperties(),
                                                    event->getHistoricalRawPointerCoords(0, i));
         if (status) {
-            ALOGW("Failed to send motion event sample on channel '%s'.  status=%d",
-                    getInputChannelName().c_str(), status);
+            LOG(WARNING) << "Failed to send motion event sample on channel '"
+                         << getInputChannelName() << "'.  status=" << statusToString(status);
             return status;
         }
         // mPublishedSeqMap tracks all sequences published from this sender. Only the last
@@ -183,16 +185,18 @@
         // as part of finishing an IME session, in which case the publisher will
         // soon be disposed as well.
         if (kDebugDispatchCycle) {
-            ALOGD("channel '%s' ~ Consumer closed input channel or an error occurred.  events=0x%x",
-                  getInputChannelName().c_str(), events);
+            LOG(DEBUG) << "channel '" << getInputChannelName()
+                       << "' ~ Consumer closed input channel or an error occurred.  events=0x"
+                       << std::hex << events;
         }
 
         return 0; // remove the callback
     }
 
     if (!(events & ALOOPER_EVENT_INPUT)) {
-        ALOGW("channel '%s' ~ Received spurious callback for unhandled poll event.  events=0x%x",
-              getInputChannelName().c_str(), events);
+        LOG(WARNING) << "channel '" << getInputChannelName()
+                     << "' ~ Received spurious callback for unhandled poll event.  events=0x"
+                     << std::hex << events;
         return 1;
     }
 
@@ -204,13 +208,13 @@
 
 status_t NativeInputEventSender::processConsumerResponse(JNIEnv* env) {
     if (kDebugDispatchCycle) {
-        ALOGD("channel '%s' ~ Receiving finished signals.", getInputChannelName().c_str());
+        LOG(DEBUG) << "channel '" << getInputChannelName() << "' ~ Receiving finished signals.";
     }
 
     ScopedLocalRef<jobject> senderObj(env, GetReferent(env, mSenderWeakGlobal));
     if (!senderObj.get()) {
-        ALOGW("channel '%s' ~ Sender object was finalized without being disposed.",
-              getInputChannelName().c_str());
+        LOG(WARNING) << "channel '" << getInputChannelName()
+                     << "' ~ Sender object was finalized without being disposed.";
         return DEAD_OBJECT;
     }
     bool skipCallbacks = false; // stop calling Java functions after an exception occurs
@@ -221,8 +225,9 @@
             if (status == WOULD_BLOCK) {
                 return OK;
             }
-            ALOGE("channel '%s' ~ Failed to process consumer response.  status=%d",
-                  getInputChannelName().c_str(), status);
+            LOG(ERROR) << "channel '" << getInputChannelName()
+                       << "' ~ Failed to process consumer response.  status="
+                       << statusToString(status);
             return status;
         }
 
@@ -250,24 +255,25 @@
         const InputPublisher::Timeline& timeline = std::get<InputPublisher::Timeline>(response);
 
         if (kDebugDispatchCycle) {
-            ALOGD("channel '%s' ~ Received timeline, inputEventId=%" PRId32
-                  ", gpuCompletedTime=%" PRId64 ", presentTime=%" PRId64,
-                  getInputChannelName().c_str(), timeline.inputEventId,
-                  timeline.graphicsTimeline[GraphicsTimeline::GPU_COMPLETED_TIME],
-                  timeline.graphicsTimeline[GraphicsTimeline::PRESENT_TIME]);
+            LOG(DEBUG) << "channel '" << getInputChannelName()
+                       << "' ~ Received timeline, inputEventId=" << timeline.inputEventId
+                       << ", gpuCompletedTime="
+                       << timeline.graphicsTimeline[GraphicsTimeline::GPU_COMPLETED_TIME]
+                       << ", presentTime="
+                       << timeline.graphicsTimeline[GraphicsTimeline::PRESENT_TIME];
         }
 
         if (skipCallbacks) {
-            ALOGW("Java exception occurred. Skipping dispatchTimelineReported for "
-                  "inputEventId=%" PRId32,
-                  timeline.inputEventId);
+            LOG(WARNING) << "Java exception occurred. Skipping dispatchTimelineReported for "
+                            "inputEventId="
+                         << timeline.inputEventId;
             return true;
         }
 
         env->CallVoidMethod(sender, gInputEventSenderClassInfo.dispatchTimelineReported,
                             timeline.inputEventId, timeline.graphicsTimeline);
         if (env->ExceptionCheck()) {
-            ALOGE("Exception dispatching timeline, inputEventId=%" PRId32, timeline.inputEventId);
+            LOG(ERROR) << "Exception dispatching timeline, inputEventId=" << timeline.inputEventId;
             return false;
         }
 
@@ -279,7 +285,7 @@
 
     auto it = mPublishedSeqMap.find(finished.seq);
     if (it == mPublishedSeqMap.end()) {
-        ALOGW("Received 'finished' signal for unknown seq number = %" PRIu32, finished.seq);
+        LOG(WARNING) << "Received 'finished' signal for unknown seq number = " << finished.seq;
         // Since this is coming from the receiver (typically app), it's possible that an app
         // does something wrong and sends bad data. Just ignore and process other events.
         return true;
@@ -296,9 +302,9 @@
     const uint32_t seq = seqOptional.value();
 
     if (kDebugDispatchCycle) {
-        ALOGD("channel '%s' ~ Received finished signal, seq=%u, handled=%s, pendingEvents=%zu.",
-              getInputChannelName().c_str(), seq, finished.handled ? "true" : "false",
-              mPublishedSeqMap.size());
+        LOG(DEBUG) << "channel '" << getInputChannelName()
+                   << "' ~ Received finished signal, seq=" << seq << ", handled=" << std::boolalpha
+                   << finished.handled << ", pendingEvents=" << mPublishedSeqMap.size();
     }
     if (skipCallbacks) {
         return true;
@@ -307,7 +313,7 @@
     env->CallVoidMethod(sender, gInputEventSenderClassInfo.dispatchInputEventFinished,
                         static_cast<jint>(seq), static_cast<jboolean>(finished.handled));
     if (env->ExceptionCheck()) {
-        ALOGE("Exception dispatching finished signal for seq=%" PRIu32, seq);
+        LOG(ERROR) << "Exception dispatching finished signal for seq=" << seq;
         return false;
     }
     return true;
diff --git a/core/jni/android_view_InputQueue.cpp b/core/jni/android_view_InputQueue.cpp
index 21db37e..a0d081d 100644
--- a/core/jni/android_view_InputQueue.cpp
+++ b/core/jni/android_view_InputQueue.cpp
@@ -239,7 +239,7 @@
         return -1;
     }
     MotionEvent* event = queue->createMotionEvent();
-    event->copyFrom(originalEvent, true /* keepHistory */);
+    event->copyFrom(originalEvent, /*keepHistory=*/true);
     queue->enqueueEvent(event);
     return reinterpret_cast<jlong>(event);
 }
diff --git a/core/jni/android_view_KeyCharacterMap.cpp b/core/jni/android_view_KeyCharacterMap.cpp
index 8fa03cf..ddaeb5a 100644
--- a/core/jni/android_view_KeyCharacterMap.cpp
+++ b/core/jni/android_view_KeyCharacterMap.cpp
@@ -76,7 +76,7 @@
                           reinterpret_cast<jlong>(nativeMap));
 }
 
-static jobject nativeObtainEmptyKeyCharacterMap(JNIEnv* env, jobject /* clazz */, jint deviceId) {
+static jobject nativeObtainEmptyKeyCharacterMap(JNIEnv* env, /*clazz=*/jobject, jint deviceId) {
     return android_view_KeyCharacterMap_create(env, deviceId, nullptr);
 }
 
@@ -202,7 +202,7 @@
         jcharArray charsArray) {
     NativeKeyCharacterMap* map = reinterpret_cast<NativeKeyCharacterMap*>(ptr);
     if (!map || !map->getMap()) {
-        return env->NewObjectArray(0 /* size */, gKeyEventClassInfo.clazz, NULL);
+        return env->NewObjectArray(/*size=*/0, gKeyEventClassInfo.clazz, NULL);
     }
     jchar* chars = env->GetCharArrayElements(charsArray, NULL);
     if (!chars) {
diff --git a/core/jni/android_window_ScreenCapture.cpp b/core/jni/android_window_ScreenCapture.cpp
index e729750..bdf7eaa 100644
--- a/core/jni/android_window_ScreenCapture.cpp
+++ b/core/jni/android_window_ScreenCapture.cpp
@@ -102,7 +102,8 @@
         }
 
         if (!captureResults.fenceResult.ok() || captureResults.buffer == nullptr) {
-            env->CallVoidMethod(consumer.get(), gConsumerClassInfo.accept, nullptr);
+            env->CallVoidMethod(consumer.get(), gConsumerClassInfo.accept, nullptr,
+                                fenceStatus(captureResults.fenceResult));
             checkAndClearException(env, "accept");
             return binder::Status::ok();
         }
@@ -117,7 +118,8 @@
                                             captureResults.capturedSecureLayers,
                                             captureResults.capturedHdrLayers);
         checkAndClearException(env, "builder");
-        env->CallVoidMethod(consumer.get(), gConsumerClassInfo.accept, screenshotHardwareBuffer);
+        env->CallVoidMethod(consumer.get(), gConsumerClassInfo.accept, screenshotHardwareBuffer,
+                            fenceStatus(captureResults.fenceResult));
         checkAndClearException(env, "accept");
         env->DeleteLocalRef(jhardwareBuffer);
         env->DeleteLocalRef(screenshotHardwareBuffer);
@@ -285,7 +287,7 @@
             (void*)nativeCaptureDisplay },
     {"nativeCaptureLayers",  "(Landroid/window/ScreenCapture$LayerCaptureArgs;J)I",
             (void*)nativeCaptureLayers },
-    {"nativeCreateScreenCaptureListener", "(Ljava/util/function/Consumer;)J",
+    {"nativeCreateScreenCaptureListener", "(Ljava/util/function/ObjIntConsumer;)J",
             (void*)nativeCreateScreenCaptureListener },
     {"nativeWriteListenerToParcel", "(JLandroid/os/Parcel;)V", (void*)nativeWriteListenerToParcel },
     {"nativeReadListenerFromParcel", "(Landroid/os/Parcel;)J",
@@ -333,8 +335,8 @@
     gLayerCaptureArgsClassInfo.childrenOnly =
             GetFieldIDOrDie(env, layerCaptureArgsClazz, "mChildrenOnly", "Z");
 
-    jclass consumer = FindClassOrDie(env, "java/util/function/Consumer");
-    gConsumerClassInfo.accept = GetMethodIDOrDie(env, consumer, "accept", "(Ljava/lang/Object;)V");
+    jclass consumer = FindClassOrDie(env, "java/util/function/ObjIntConsumer");
+    gConsumerClassInfo.accept = GetMethodIDOrDie(env, consumer, "accept", "(Ljava/lang/Object;I)V");
 
     jclass screenshotGraphicsBufferClazz =
             FindClassOrDie(env, "android/window/ScreenCapture$ScreenshotHardwareBuffer");
diff --git a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
index 2c81987..da308b2 100644
--- a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
+++ b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
@@ -133,6 +133,7 @@
     void** args = reinterpret_cast<void**>(arg);
     jstring* javaNativeLibPath = (jstring*) args[0];
     jboolean extractNativeLibs = *(jboolean*) args[1];
+    jboolean debuggable = *(jboolean*) args[2];
 
     ScopedUtfChars nativeLibPath(env, *javaNativeLibPath);
 
@@ -148,7 +149,12 @@
         return INSTALL_FAILED_INVALID_APK;
     }
 
-    if (!extractNativeLibs) {
+    // Always extract wrap.sh for debuggable, even if extractNativeLibs=false. This makes it
+    // easier to use wrap.sh because it only works when it is extracted, see
+    // frameworks/base/services/core/java/com/android/server/am/ProcessList.java.
+    bool forceExtractCurrentFile = debuggable && strcmp(fileName, "wrap.sh") == 0;
+
+    if (!extractNativeLibs && !forceExtractCurrentFile) {
         // check if library is uncompressed and page-aligned
         if (method != ZipFileRO::kCompressStored) {
             ALOGE("Library '%s' is compressed - will not be able to open it directly from apk.\n",
@@ -274,7 +280,7 @@
  *
  * - The entry is under the lib/ directory.
  * - The entry name ends with ".so" and the entry name starts with "lib",
- *   an exception is made for entries whose name is "gdbserver".
+ *   an exception is made for debuggable apps.
  * - The entry filename is "safe" (as determined by isFilenameSafe).
  *
  */
@@ -286,21 +292,31 @@
     }
 
 public:
-    static NativeLibrariesIterator* create(ZipFileRO* zipFile, bool debuggable) {
-        void* cookie = nullptr;
+    static base::expected<std::unique_ptr<NativeLibrariesIterator>, int32_t> create(
+            ZipFileRO* zipFile, bool debuggable) {
         // Do not specify a suffix to find both .so files and gdbserver.
-        if (!zipFile->startIteration(&cookie, APK_LIB.data(), nullptr /* suffix */)) {
-            return nullptr;
+        auto result = zipFile->startIterationOrError(APK_LIB.data(), nullptr /* suffix */);
+        if (!result.ok()) {
+            return base::unexpected(result.error());
         }
 
-        return new NativeLibrariesIterator(zipFile, debuggable, cookie);
+        return std::unique_ptr<NativeLibrariesIterator>(
+                new NativeLibrariesIterator(zipFile, debuggable, result.value()));
     }
 
-    ZipEntryRO next() {
-        ZipEntryRO next = nullptr;
-        while ((next = mZipFile->nextEntry(mCookie)) != nullptr) {
+    base::expected<ZipEntryRO, int32_t> next() {
+        ZipEntryRO nextEntry;
+        while (true) {
+            auto next = mZipFile->nextEntryOrError(mCookie);
+            if (!next.ok()) {
+                return base::unexpected(next.error());
+            }
+            nextEntry = next.value();
+            if (nextEntry == nullptr) {
+                break;
+            }
             // Make sure this entry has a filename.
-            if (mZipFile->getEntryFileName(next, fileName, sizeof(fileName))) {
+            if (mZipFile->getEntryFileName(nextEntry, fileName, sizeof(fileName))) {
                 continue;
             }
 
@@ -311,7 +327,7 @@
             }
         }
 
-        return next;
+        return nextEntry;
     }
 
     inline const char* currentEntry() const {
@@ -342,19 +358,28 @@
         return INSTALL_FAILED_INVALID_APK;
     }
 
-    std::unique_ptr<NativeLibrariesIterator> it(
-            NativeLibrariesIterator::create(zipFile, debuggable));
-    if (it.get() == nullptr) {
+    auto result = NativeLibrariesIterator::create(zipFile, debuggable);
+    if (!result.ok()) {
         return INSTALL_FAILED_INVALID_APK;
     }
+    std::unique_ptr<NativeLibrariesIterator> it(std::move(result.value()));
 
     const ScopedUtfChars cpuAbi(env, javaCpuAbi);
     if (cpuAbi.c_str() == nullptr) {
         // This would've thrown, so this return code isn't observable by Java.
         return INSTALL_FAILED_INVALID_APK;
     }
-    ZipEntryRO entry = nullptr;
-    while ((entry = it->next()) != nullptr) {
+
+    while (true) {
+        auto next = it->next();
+        if (!next.ok()) {
+            return INSTALL_FAILED_INVALID_APK;
+        }
+        auto entry = next.value();
+        if (entry == nullptr) {
+            break;
+        }
+
         const char* fileName = it->currentEntry();
         const char* lastSlash = it->lastSlash();
 
@@ -382,11 +407,11 @@
         return INSTALL_FAILED_INVALID_APK;
     }
 
-    std::unique_ptr<NativeLibrariesIterator> it(
-            NativeLibrariesIterator::create(zipFile, debuggable));
-    if (it.get() == nullptr) {
+    auto result = NativeLibrariesIterator::create(zipFile, debuggable);
+    if (!result.ok()) {
         return INSTALL_FAILED_INVALID_APK;
     }
+    std::unique_ptr<NativeLibrariesIterator> it(std::move(result.value()));
 
     const int numAbis = env->GetArrayLength(supportedAbisArray);
 
@@ -396,9 +421,17 @@
         supportedAbis.emplace_back(env, (jstring)env->GetObjectArrayElement(supportedAbisArray, i));
     }
 
-    ZipEntryRO entry = nullptr;
     int status = NO_NATIVE_LIBRARIES;
-    while ((entry = it->next()) != nullptr) {
+    while (true) {
+        auto next = it->next();
+        if (!next.ok()) {
+            return INSTALL_FAILED_INVALID_APK;
+        }
+        auto entry = next.value();
+        if (entry == nullptr) {
+            break;
+        }
+
         // We're currently in the lib/ directory of the APK, so it does have some native
         // code. We should return INSTALL_FAILED_NO_MATCHING_ABIS if none of the
         // libraries match.
@@ -431,7 +464,7 @@
         jlong apkHandle, jstring javaNativeLibPath, jstring javaCpuAbi,
         jboolean extractNativeLibs, jboolean debuggable)
 {
-    void* args[] = { &javaNativeLibPath, &extractNativeLibs };
+    void* args[] = { &javaNativeLibPath, &extractNativeLibs, &debuggable };
     return (jint) iterateOverNativeFiles(env, apkHandle, javaCpuAbi, debuggable,
             copyFileIfChanged, reinterpret_cast<void*>(args));
 }
diff --git a/core/jni/com_android_internal_content_om_OverlayManagerImpl.cpp b/core/jni/com_android_internal_content_om_OverlayManagerImpl.cpp
index bba1760..d4f6e18 100644
--- a/core/jni/com_android_internal_content_om_OverlayManagerImpl.cpp
+++ b/core/jni/com_android_internal_content_om_OverlayManagerImpl.cpp
@@ -44,6 +44,8 @@
     jfieldID stringData;
     jfieldID binaryData;
     jfieldID configuration;
+    jfieldID binaryDataOffset;
+    jfieldID binaryDataSize;
 } gFabricatedOverlayInternalEntryOffsets;
 
 static struct parcel_file_descriptor_offsets_t {
@@ -281,10 +283,17 @@
         auto binary_data =
                 getNullableFileDescriptor(env, entry,
                                           gFabricatedOverlayInternalEntryOffsets.binaryData);
+
+        const auto data_offset =
+                env->GetLongField(entry, gFabricatedOverlayInternalEntryOffsets.binaryDataOffset);
+        const auto data_size =
+                env->GetLongField(entry, gFabricatedOverlayInternalEntryOffsets.binaryDataSize);
         entries_params.push_back(
                 FabricatedOverlayEntryParameters{resourceName.c_str(), (DataType)dataType,
                                                  (DataValue)data,
                                                  string_data.value_or(std::string()), binary_data,
+                                                 static_cast<off64_t>(data_offset),
+                                                 static_cast<size_t>(data_size),
                                                  configuration.value_or(std::string())});
         ALOGV("resourceName = %s, dataType = 0x%08x, data = 0x%08x, dataString = %s,"
               " binaryData = %d, configuration = %s",
@@ -440,6 +449,12 @@
     gFabricatedOverlayInternalEntryOffsets.configuration =
             GetFieldIDOrDie(env, gFabricatedOverlayInternalEntryOffsets.classObject,
                             "configuration", "Ljava/lang/String;");
+    gFabricatedOverlayInternalEntryOffsets.binaryDataOffset =
+            GetFieldIDOrDie(env, gFabricatedOverlayInternalEntryOffsets.classObject,
+                            "binaryDataOffset", "J");
+    gFabricatedOverlayInternalEntryOffsets.binaryDataSize =
+            GetFieldIDOrDie(env, gFabricatedOverlayInternalEntryOffsets.classObject,
+                            "binaryDataSize", "J");
 
     jclass parcelFileDescriptorClass =
             android::FindClassOrDie(env, "android/os/ParcelFileDescriptor");
diff --git a/core/jni/com_android_internal_os_LongArrayMultiStateCounter.cpp b/core/jni/com_android_internal_os_LongArrayMultiStateCounter.cpp
index a95b6e3..76f5c10 100644
--- a/core/jni/com_android_internal_os_LongArrayMultiStateCounter.cpp
+++ b/core/jni/com_android_internal_os_LongArrayMultiStateCounter.cpp
@@ -127,16 +127,17 @@
     }
 }
 
-static void throwReadRE(JNIEnv *env, binder_status_t status) {
+static void throwReadException(JNIEnv *env, binder_status_t status) {
     ALOGE("Could not read LongArrayMultiStateCounter from Parcel, status = %d", status);
-    jniThrowRuntimeException(env, "Could not read LongArrayMultiStateCounter from Parcel");
+    jniThrowException(env, "android.os.BadParcelableException",
+                      "Could not read LongArrayMultiStateCounter from Parcel");
 }
 
 #define THROW_AND_RETURN_ON_READ_ERROR(expr) \
     {                                        \
         binder_status_t status = expr;       \
         if (status != STATUS_OK) {           \
-            throwReadRE(env, status);        \
+            throwReadException(env, status); \
             return 0L;                       \
         }                                    \
     }
@@ -147,6 +148,11 @@
     int32_t stateCount;
     THROW_AND_RETURN_ON_READ_ERROR(AParcel_readInt32(parcel.get(), &stateCount));
 
+    if (stateCount < 0 || stateCount > 0xEFFF) {
+        throwReadException(env, STATUS_INVALID_OPERATION);
+        return 0L;
+    }
+
     int32_t arrayLength;
     THROW_AND_RETURN_ON_READ_ERROR(AParcel_readInt32(parcel.get(), &arrayLength));
 
diff --git a/core/jni/com_android_internal_os_LongMultiStateCounter.cpp b/core/jni/com_android_internal_os_LongMultiStateCounter.cpp
index 1712b3a8..ddf7a67 100644
--- a/core/jni/com_android_internal_os_LongMultiStateCounter.cpp
+++ b/core/jni/com_android_internal_os_LongMultiStateCounter.cpp
@@ -131,16 +131,17 @@
     }
 }
 
-static void throwReadRE(JNIEnv *env, binder_status_t status) {
+static void throwReadException(JNIEnv *env, binder_status_t status) {
     ALOGE("Could not read LongMultiStateCounter from Parcel, status = %d", status);
-    jniThrowRuntimeException(env, "Could not read LongMultiStateCounter from Parcel");
+    jniThrowException(env, "android.os.BadParcelableException",
+                      "Could not read LongMultiStateCounter from Parcel");
 }
 
 #define THROW_AND_RETURN_ON_READ_ERROR(expr) \
     {                                        \
         binder_status_t status = expr;       \
         if (status != STATUS_OK) {           \
-            throwReadRE(env, status);        \
+            throwReadException(env, status); \
             return 0L;                       \
         }                                    \
     }
@@ -151,6 +152,11 @@
     int32_t stateCount;
     THROW_AND_RETURN_ON_READ_ERROR(AParcel_readInt32(parcel.get(), &stateCount));
 
+    if (stateCount < 0 || stateCount > 0xEFFF) {
+        throwReadException(env, STATUS_INVALID_OPERATION);
+        return 0L;
+    }
+
     auto counter = std::make_unique<battery::LongMultiStateCounter>(stateCount, 0);
 
     for (battery::state_t state = 0; state < stateCount; state++) {
diff --git a/core/proto/android/providers/settings/secure.proto b/core/proto/android/providers/settings/secure.proto
index a5d287c..d7969cf 100644
--- a/core/proto/android/providers/settings/secure.proto
+++ b/core/proto/android/providers/settings/secure.proto
@@ -374,6 +374,8 @@
     optional SettingProto lock_to_app_exit_locked = 33 [ (android.privacy).dest = DEST_AUTOMATIC ];
     optional SettingProto lockdown_in_power_menu = 34 [ (android.privacy).dest = DEST_AUTOMATIC ];
     optional SettingProto long_press_timeout = 35 [ (android.privacy).dest = DEST_AUTOMATIC ];
+    optional SettingProto key_press_timeout_ms = 96 [ (android.privacy).dest = DEST_AUTOMATIC ];
+    optional SettingProto key_press_delay_ms = 97 [ (android.privacy).dest = DEST_AUTOMATIC ];
 
     message ManagedProfile {
         option (android.msg_privacy).dest = DEST_EXPLICIT;
@@ -705,5 +707,5 @@
 
     // Please insert fields in alphabetical order and group them into messages
     // if possible (to avoid reaching the method limit).
-    // Next tag = 96;
+    // Next tag = 98;
 }
diff --git a/core/proto/android/server/vibrator/vibratormanagerservice.proto b/core/proto/android/server/vibrator/vibratormanagerservice.proto
index c211a5e..db99e5b 100644
--- a/core/proto/android/server/vibrator/vibratormanagerservice.proto
+++ b/core/proto/android/server/vibrator/vibratormanagerservice.proto
@@ -91,7 +91,7 @@
     option (.android.msg_privacy).dest = DEST_AUTOMATIC;
     optional int64 start_time = 1;
     optional int64 end_time = 2;
-    optional CombinedVibrationEffectProto effect = 3;
+    optional CombinedVibrationEffectProto played_effect = 3;
     optional CombinedVibrationEffectProto original_effect = 4;
     optional VibrationAttributesProto attributes = 5;
     optional int64 duration_ms = 7;
@@ -128,6 +128,7 @@
         IGNORED_FOR_SETTINGS = 24;
         IGNORED_SUPERSEDED = 25;
         IGNORED_FROM_VIRTUAL_DEVICE = 26;
+        IGNORED_ON_WIRELESS_CHARGER = 27;
     }
 }
 
diff --git a/core/proto/android/service/package.proto b/core/proto/android/service/package.proto
index 0fe2a6b..eb14db0 100644
--- a/core/proto/android/service/package.proto
+++ b/core/proto/android/service/package.proto
@@ -101,6 +101,30 @@
             COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED = 4;
         }
 
+        // Information about the state of an archived app.
+        // All fields are gathered at the time of archival.
+        message ArchiveState {
+            option (android.msg_privacy).dest = DEST_AUTOMATIC;
+
+            message ArchiveActivityInfo {
+                // Corresponds to android:label in the app's locale at the time of archival.
+                optional string title = 1;
+
+                // Icon of the archived app.
+                optional string icon_bitmap_path = 2;
+
+                // Only set if the app defined a monochrome icon.
+                optional string monochrome_icon_bitmap_path = 3;
+            }
+
+            /** Information about main activities. */
+            repeated ArchiveActivityInfo activity_infos = 1;
+
+            // Corresponds to android:label of the installer responsible for the unarchival of the
+            // app. Stored in the installer's locale at the time of archival.
+            optional string installer_title = 2;
+        }
+
         optional int32 id = 1;
         optional InstallType install_type = 2;
         // Is the app restricted by owner / admin
@@ -114,6 +138,7 @@
         optional int32 distraction_flags = 10;
         // UTC timestamp of first install for the user
         optional int32 first_install_time_ms = 11;
+        optional ArchiveState archive_state = 12;
     }
 
     message InstallSourceProto {
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 5a9a415..67710f6 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -821,7 +821,6 @@
     <protected-broadcast android:name="android.intent.action.PROFILE_REMOVED" />
     <protected-broadcast android:name="com.android.internal.telephony.cat.SMS_SENT_ACTION" />
     <protected-broadcast android:name="com.android.internal.telephony.cat.SMS_DELIVERY_ACTION" />
-    <protected-broadcast android:name="com.android.internal.telephony.data.ACTION_RETRY" />
     <protected-broadcast android:name="android.companion.virtual.action.VIRTUAL_DEVICE_REMOVED" />
     <protected-broadcast android:name="com.android.internal.intent.action.FLASH_NOTIFICATION_START_PREVIEW" />
     <protected-broadcast android:name="com.android.internal.intent.action.FLASH_NOTIFICATION_STOP_PREVIEW" />
@@ -4032,6 +4031,13 @@
     <permission android:name="android.permission.READ_WALLPAPER_INTERNAL"
         android:protectionLevel="signature|privileged" />
 
+    <!-- Allow apps to always update wallpaper by sending data.
+        @SystemApi
+        @hide
+    -->
+    <permission android:name="android.permission.ALWAYS_UPDATE_WALLPAPER"
+        android:protectionLevel="internal|role" />
+
     <!-- ===================================================== -->
     <!-- Permissions for changing the system clock / time zone -->
     <!-- ===================================================== -->
@@ -5421,7 +5427,7 @@
     <permission android:name="android.permission.INSTALL_DPC_PACKAGES"
                 android:protectionLevel="signature|role" />
 
-    <!-- Allows an application to read resolved paths to the APKs (Base and any splits)
+    <!-- @SystemApi Allows an application to read resolved paths to the APKs (Base and any splits)
          of a session based install.
          <p>Not for use by third-party applications.
          @hide
@@ -5520,6 +5526,12 @@
     <permission android:name="android.permission.GRANT_RUNTIME_PERMISSIONS"
         android:protectionLevel="signature|installer|verifier" />
 
+    <!-- @SystemApi Allows an application to launch the settings page which manages various
+         permissions.
+         @hide -->
+    <permission android:name="android.permission.LAUNCH_PERMISSION_SETTINGS"
+                android:protectionLevel="signature|privileged" />
+
     <!-- @SystemApi Allows an app that has this permission and the permissions to install packages
          to request certain runtime permissions to be granted at installation.
          @hide -->
@@ -5625,6 +5637,12 @@
                 android:description="@string/permdesc_deliverCompanionMessages"
                 android:protectionLevel="normal" />
 
+    <!-- @hide @SystemApi(client=android.annotation.SystemApi.Client.MODULE_LIBRARIES)
+         Allows an application to send and receive messages via CDM transports.
+    -->
+    <permission android:name="android.permission.USE_COMPANION_TRANSPORTS"
+        android:protectionLevel="signature|module" />
+
     <!-- Allows an application to create new companion device associations.
          @SystemApi
          @hide -->
diff --git a/core/res/assets/geoid_height_map/map-params.pb b/core/res/assets/geoid_height_map/map-params.pb
index 8ca032c..6414557 100644
--- a/core/res/assets/geoid_height_map/map-params.pb
+++ b/core/res/assets/geoid_height_map/map-params.pb
Binary files differ
diff --git a/core/res/assets/geoid_height_map/tile-1.pb b/core/res/assets/geoid_height_map/tile-1.pb
index 93a2fa0..c0f1242 100644
--- a/core/res/assets/geoid_height_map/tile-1.pb
+++ b/core/res/assets/geoid_height_map/tile-1.pb
Binary files differ
diff --git a/core/res/assets/geoid_height_map/tile-3.pb b/core/res/assets/geoid_height_map/tile-3.pb
index 4e22ca1..cc30471 100644
--- a/core/res/assets/geoid_height_map/tile-3.pb
+++ b/core/res/assets/geoid_height_map/tile-3.pb
Binary files differ
diff --git a/core/res/assets/geoid_height_map/tile-5.pb b/core/res/assets/geoid_height_map/tile-5.pb
index c5f5127..7e1f008 100644
--- a/core/res/assets/geoid_height_map/tile-5.pb
+++ b/core/res/assets/geoid_height_map/tile-5.pb
Binary files differ
diff --git a/core/res/assets/geoid_height_map/tile-7.pb b/core/res/assets/geoid_height_map/tile-7.pb
index 0928a6a..3bcdaac 100644
--- a/core/res/assets/geoid_height_map/tile-7.pb
+++ b/core/res/assets/geoid_height_map/tile-7.pb
Binary files differ
diff --git a/core/res/assets/geoid_height_map/tile-9.pb b/core/res/assets/geoid_height_map/tile-9.pb
index 6a2210a..558970d 100644
--- a/core/res/assets/geoid_height_map/tile-9.pb
+++ b/core/res/assets/geoid_height_map/tile-9.pb
Binary files differ
diff --git a/core/res/assets/geoid_height_map/tile-b.pb b/core/res/assets/geoid_height_map/tile-b.pb
index 5fce996..fbe02da 100644
--- a/core/res/assets/geoid_height_map/tile-b.pb
+++ b/core/res/assets/geoid_height_map/tile-b.pb
Binary files differ
diff --git a/core/res/geoid_height_map_assets/README.md b/core/res/geoid_height_map_assets/README.md
index 800b3e5..37a57b8 100644
--- a/core/res/geoid_height_map_assets/README.md
+++ b/core/res/geoid_height_map_assets/README.md
@@ -1,8 +1,11 @@
-These text protos contain composite JPEG/PNG images representing the EGM2008 Earth Gravitational
-Model[^1] published by the National Geospatial-Intelligence Agency.[^2]
+These text protos contain composite JPEG/PNG images^[1] representing the EGM2008 Earth Gravitational
+Model[^2] published by the National Geospatial-Intelligence Agency.[^3]
 
-[^1]: Pavlis, Nikolaos K., et al. "The development and evaluation of the Earth Gravitational Model
+[^1] Julian, Brian, and Angermann, Michael. "Resource efficient and accurate altitude conversion to
+Mean Sea Level." To appear in 2023 IEEE/ION Position, Location and Navigation Symposium (PLANS).
+
+[^2]: Pavlis, Nikolaos K., et al. "The development and evaluation of the Earth Gravitational Model
 2008 (EGM2008)." Journal of geophysical research: solid earth 117.B4 (2012).
 
-[^2]: National Geospatial-Intelligence Agency. “Office of Geomatics.” 2022.
+[^3]: National Geospatial-Intelligence Agency. “Office of Geomatics.” 2022.
 URL: https://earth-info.nga.mil.
\ No newline at end of file
diff --git a/core/res/geoid_height_map_assets/map-params.textpb b/core/res/geoid_height_map_assets/map-params.textpb
index 5ca6e4e..170e73b 100644
--- a/core/res/geoid_height_map_assets/map-params.textpb
+++ b/core/res/geoid_height_map_assets/map-params.textpb
@@ -3,4 +3,4 @@
 disk_tile_s2_level: 0
 model_a_meters: 193.0
 model_b_meters: -107.0
-model_rmse_meters: 0.29
+model_rmse_meters: 0.27
diff --git a/core/res/geoid_height_map_assets/tile-1.textpb b/core/res/geoid_height_map_assets/tile-1.textpb
index 7edba5b..b0c8044 100644
--- a/core/res/geoid_height_map_assets/tile-1.textpb
+++ b/core/res/geoid_height_map_assets/tile-1.textpb
@@ -1,3 +1,3 @@
 tile_key: "1"
-byte_jpeg: "\377\330\377\340\000\020JFIF\000\001\002\000\000\001\000\001\000\000\377\333\000C\000\004\003\003\003\003\002\004\003\003\003\004\004\004\004\005\t\006\005\005\005\005\013\010\010\007\t\r\014\016\016\r\014\r\r\017\020\025\022\017\020\024\020\r\r\022\031\022\024\026\026\027\030\027\016\022\032\034\032\027\033\025\027\027\027\377\300\000\013\010\002\000\002\000\001\001\021\000\377\304\000\037\000\000\001\005\001\001\001\001\001\001\000\000\000\000\000\000\000\000\001\002\003\004\005\006\007\010\t\n\013\377\304\000\265\020\000\002\001\003\003\002\004\003\005\005\004\004\000\000\001}\001\002\003\000\004\021\005\022!1A\006\023Qa\007\"q\0242\201\221\241\010#B\261\301\025R\321\360$3br\202\t\n\026\027\030\031\032%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\203\204\205\206\207\210\211\212\222\223\224\225\226\227\230\231\232\242\243\244\245\246\247\250\251\252\262\263\264\265\266\267\270\271\272\302\303\304\305\306\307\310\311\312\322\323\324\325\326\327\330\331\332\341\342\343\344\345\346\347\350\351\352\361\362\363\364\365\366\367\370\371\372\377\332\000\010\001\001\000\000?\000\262zRf\212\007Zu(\251\005H\2652\324\311V\022\247Z\235*e\251\222\247Z\231jU\251V\244Zu\024f\220\232M\324\231\244-I\232B\307\322\232Z\223i#\"\233\234\034\0328\244\243&\237\237Zr\346\244\000\323\205H\0058\n\\R\3654\361\322\224\032p4\340i\300\324\212\325\"\340\323\2155\272Tg\255 <\322\226\246\226\2463S\013\363F\372]\374SK\322\007\346\245F\342\244\025\342\346\233E\024\341J:\323\326\245Z\231jt\251\323\255XZ\231je\0252\212\231ML\246\246Z\220\032\221i\331\2434\224\204\322S{\322\036\224\224\205\211\\SW\2574bEl\2575\031fc\222)A\347\232w\031\340\361G\000\365\247\003O\rO\014i\331\315H\254E<\034\323\207\265.9\247t\242\2274\240\322\346\236\255S\241\342\236MF\315\357L&\233\232\t\240\221\212\211\232\242-\315\033\275\351\273\351\013P\036\247\215\376Z\234\034/5\343\004\322\023H\r-\024\361\326\236\265*\232\231jt\251\322\247J\235je\251\224\324\313R\251\251T\324\202\244\007\212vh\315\031\244\2434\204\323I\246\223M\310\246\232h\225\220piRp\017\314)\306H\335\260\026\214\247\360\3233\3158\032p5\"\232\221MH)\343\332\234\033\035i\343\004qF}h\006\226\212Pi\301\260je~)\305\3522\336\364\322\334sM\335\2323\315-D\346\240f\346\232Z\232^\215\364n\253\020\277\025+\310\000\257\035\311\240ry\240\364\240\032Zx\251\007Z\221EL\2252\232\235*u\251\320\324\313S)\251\224\324\253R\n\220\032\220\032vh\315\'z3A<Rg\212i4\204\214t\250\211\244-M&\231\212Q\3058R\216\224\341\232\\\323\301\251T\324\240\323\301\247u\342\200YN)\302\215\330\247\007\006\235I\232@\334\324\252\334R\226\246\227\246\026\244\rO\rKQ\277J\254\347\025\021zaz7R\356\342\245G\302\322\264\231\257*\"\222\202h\034\323\251\343\255H\242\245Z\231jU\025a\027\212\231F*e52\021S-J\265*\234T\252i\352j@iwQ\272\214\373\320Z\2234n\246\356 \346\232\316MFi\244\342\233\232L\322\203N\024\341\322\234)\302\234*AO\006\236\r<\037\232\237\273q\311\244\247u\024\230\247\200\343\2474\243\334b\220\216r:P\033\024\027\365\246\356\246\226\240\032\221M<\232c\364\252s6\rUg\346\232^\223\314\243\314\367\247\254\334rh2\361^i\272\214\322\023B\232z\234\232\224\n\231*P*E\025*\234T\252\030\377\000\026>\225(\007\373\325*\023\353V\020\361S+T\252jU5 5\"\232~h\335\357F\352\003\016\364\233\271\353F\341I\272\202i\244\323\016i\234\236\224\234\203I\232u8S\201\247\216\224\360)\340S\300\245\002\2368\247\016\264\352Q\326\2342jE\\\232\230\014\014S_\221\305@Cf\233\363\003N\003\"\232\300\212a\244\3158>;\323\204\224<\200\255Q\235\252\243?4\302\364\322\364\236g\2754\313\317Z_7\216\265\300?\006\232\t\024\271\006\224T\212jU<\325\230\300\253\n\243\034\212pL\373R\355\307J\221jU5 <\324\252\336\3652\265L\257R\253\324\201\252@\324\355\307\024\273\250\335HZ\223u\033\2517P[\320\322n\242\233\310<\032NM\000R\323\200\247\001O\024\360jE4\341\214\323\307Zp\245\243\245<T\252\005L\253\212~)\245N)\244c\232\205\310\31593\216iv\347\255E\"c\245W9\006\231\232]\330\244.MT\235\273\346\2523\324e\351\273\351\245\352\'|R\244\231\025\305\023\223IHr\r\001\252UpE<75f)\010\034\325\224\22350\222\2246i\342\245^\224\360jE5*\232\225MJ\016*E5\"\265?4\340h&\220\232i4\231\2434f\234\r)\007<\032OcF9\245 \367\245\013\3058\np\024\264\341\322\234)\342\236)\342\234\005\030\247(\346\254\306\230\0315*\017\232\244\333\351M \346\243d&\205\203\234\232\220D\000\351Mh\317\\Tl\231\025NT \364\252\304\235\324\322\334S\013\361U\'z\246\317Q\227\246\357\244/Q3f\221\t\316+\223\221J\2754\032S\3154\216x\247(5\"\236jun*dc\232\235[5(8\251A\251\003qN\006\236\rJ\255R\253T\252\325\"\265H\032\234\032\236\r;9\246\223II\2322is\232QN\000\203\232R7\037\224\032r\200\243\346\024\273O\336\0074\243\2459S4\270\346\227\024\240S\200\247\201O\024\3409\247\201\305<-=\023&\247\035p*E\300\251\343\\.OSK\205\'\2457\n\r!#4\271\002\224\200\313\300\250$\\\n\251&;\325\t\370\351UKTl\304Ui\216A\252n\370\250K\322o\246\227\246\027\346\245\217\221\232\346\344L\216\225U\220\251\342\223\232@y\247\003OSS)\251\221\252elT\252\365*\3101\357N\017N\017R\006\251\025\252ej\221Z\244V\251\025\252@\324\360\324\360i3\357IE\024S\201\247\212x\343\356\232P\t\357OS\267\202)q\316@\251c\311B=)\240\035\334\323\261\305\000S\200\247\205\3434\340)\313R\001O\003\0252\214.iTsR\2049\315<\265&\363M-\357H\033\234\320\322g\232\226\031=j\033\231{-P\221\2169\252\223\034\245Rf\305@\357P;eMQrI\250\230\323wR\026\250\367\022\370\253h\300.3XL\274\361Q2\003P\264>\225\t\\\032QO\002\236\265*\232\225Z\244\rO\017R+\323\303T\212\325\"\265L\255R+T\201\252@\325 j\2205<\032vi3Fh\024\264\341O\024\341OZ\220s\326\234\020\366\247(\303zT\214\271]\324\301\310\245\002\234\005<\nv)G\025\"\324\350\271\247\037Jz\216i\345\305D\317\317\024\240\320\302\243\3174n\247\243\205\006\243v\004U\031\334\n\253+\374\237\205g\273\363U\344j\201\244\302\325fl\232\211\2150\266)\214\374S\021\263%X\335Y\244f\243*)\207\203\203P\315\037q\322\240\034\032\222\234\r<5<5H\032\234\032\236\257R+T\252\325*\265J\255R\253T\212\325\"\232\221MH\246\244\006\235\2323K@\353N\247v\247\216\264\361\322\234:\324\202\236\017j\221@\245l\343\255 \245\247\016\224\240\323\201\247\016\265\"\364\253\021\364\247\001JA\315#\003\212\21384\273\360i\032aL,)\245\361M2\212C(\332y\346\263.f\303\021\232\255$\277\'Z\246\317\223QH\337-Uw\310\353P\027\250\331\3522\365\0337\024\261\260\034\323\332Z\246\030\021Q\273sL\311\2458)U\230\r\324\242\224S\3058qN\006\224\036i\341\251\352\325*\275L\255R\253T\252\325\"\265J\255R\251\251\024\324\252i\331\245\245\024\264\352p\247\016\264\361OZx4\3655 5 \346\220\251\006\224\n\\R\343\024R\216\2652U\205\030\025*\200z\322K\305Dd\355Q\226\025\02374\306jn\376:\324O6\017Z\215\245\'\241\250ZfPsT&\230\273\342\241\226L\014f\253\0319\250\344\227\212\246\362u\346\253\264\2304\322\371\031\250\332Za\222\2177\024\246L\214\325E\223\035\351\036NsR+\202\264\021\201\327\255V|\206\240\003\214\322\203O\006\236)\302\226\224\032p4\365j\225^\246W\025*\265J\255S+T\252\325*\232\225O\275?4\240\323\201\245\007\326\234\r8\032x4\361N\024\340j@i\340\324\210qR\251\007\255?\313R3Q\036\030\342\214\322f\224\036jx\3175eO5:\021Q\314sUX\363L-\305D\355Q\027\250\236Oz\254\354}i\242LTo #\255Sb7f\252\315\'5\\\275A,\274UG\227\336\242i\006:\324M)\035\352?2\233\346d\320\315\315;\177\000T\000\363Crz\320\254T\342\245\r\221\212\0317\034\212v6\'_\302\221Dl\331\'\025 H\313\3434\245\027\034\032\0008\245\246\321N\006\236\rJ\255S+T\252\3252\265L\255S+T\312j@iA\247f\2274\240\323\203S\303S\301\247\202)\340\323\305<\032x5*T\352p\265\024\204d\324Y\2434\345\353V#\367\251\325\252d<\323d\252\256y\250Y\261P\274\225\013\275@\317Q3f\240w\252\354\347\326\242y\224\n\255#\206\351Udb*\243\266MT\225\231MW\363\2114\326zo\231\332\200\3376sJ_-O\r\315@\254jL\323\360\010\3159x5*\021I8\314y\035\215B\265 \251\026\244RGJJ01M\242\234\rH\246\245SS)\251\224\324\312je52\237z\224\032x\351KK\232Pi\300\323\201\247\212x\247\003\212x5\"\232\221ML\255R\206\342\243\2238\315F\304`b\2234\3655b3\362\324\240\346\245V\305\016\331\025Y\201\316j\254\274UV|\032\215\237\212\201\232\243-\305D\3075^CT\344\004\363U\367`\234\232\255$\234\021U\332@\rE#\007Z\252\300)\250\030\363L/\212E\2239\247\253\367\247\t~j\007\002\234\016jD\315J\007\024\240\363@\2339\\f\232\230\363>a\200i\347\001\270<S\224\324\200\321E6\223<\322\203R)\251T\324\312jd\251\226\246Z\231ML\206\244\000b\226\212QJ:\323\3058\032x4\340i\300\323\303T\212\325 \'\265H\036\235\2735\033d\232Jz\365\251\324\340S\325\352@\374u\2442b\242\222Q\212\247+\346\251\273sQ<\234T\014\365\013Hj&\227\025\021\2235\033\234\255T\224\000\0175A\330s\315U\221\252/3\006\242\226QQ\026\004Ui_\024\304\223\t\365\246\375\243\007\255)\271\\guh\032\027\255L\214=jBhS\316i\222\355Q\271\0174\304\220\223\317509\247\216)\340\323\201\2434\322i)EH\2652\212\231EL\202\247QR\250\251V\246J\2234\341E(4\264\242\236)\302\235K\232pjpjz\277\275H\036\224=8H1\31580\'<S\324\323\311\3158\032C&;\323\014\325\013\276{\325y_\212\250\317\311\346\241g\250\231\205W\221\310\350*\263\313\307Z\214I\223CK\205\252\027\023\222N\rS\337\317&\240\220\344\361Udb*\006sM\363q\305C;esQ+|\225\033\2675\0236Mt\'\030\246n\301\245\014sS!\312\340\324\212p\246\253\311\222i\023\212\260\255\305H\r8\032p4\036\224\224\231\247\n\225\005N\275*U\251\220T\352*U\251\007\025*\232x4\360ih\242\234)\300\323\301\247\003KFh\315858=;}\033\351C\034\360j\314o\362\324\313\3174\346#\025]\3175\021j\215\236\253\312\374UFj\215\232\241c\212ia\264\346\250L0\331\035*\0030Q\357U$\273b\330QU\336B\300\222j\r\304\232B\340.*\263\221P9\025\003\036j9[\344\300\357Q\226\332\270\250\031\351\253\226l\n\337/\221L,jx\376\340\251P\214\323\367u\024\306\031\031\246\016)\352jU5(\245\242\212)\313R-L\246\246SS\241\251\226\245Z\225M<\032x\353N\006\234\r-(\305-(\353N\006\2274\271\2434dQ\232pj]\324\006\251\024\363VT\345*TlR\261\342\253\273\032\211\232\241v\252\3225Wf\250Y\351\214\374Uws\353U\335\361\326\250\314\303\250\025P\221\232\211\334\364\240\020\027&\253\263\356$\324\014\325\021aQ6*\274\215\206\252\357!4\221\256\366\301\251B\210\316\354\216+S\'4\365\344\340\324\350s\305?\030\247t\245\352\271\246\232QR\255H:S\263FiiE8T\213R\250\251\224T\312*e\251\226\245Z}8S\251\303\2458t\247\0026\343\037\215\024R\366\245\243>\364g\336\214\373\322\344\321\232\001\315(\251\026\254\306\374`\324\312A S\330dqU\335MB\300\212\201\311\252\322UGnj\0265\0137\025\0136*\274\217U\334d\032\245(*I\355P\253\203L\232LGU\321\2629\252\362Hw\034TE\351\273\252\tOz\204\340\214\323\343tT9\034\324/&{\327B\0004\323\303T\221\223\272\247\006\221\211\333O\207&>iJ\234SFsR\251\251\001\002\215\324S\201\247\003O\025\"\324\253S\245N\242\246QR\250\251@4\352p\351N\006\234\016i\302\235E\024f\223\"\214\321\2323FiA\247\003N\247/\0252\232\260\277w4\365n)\030dT\022\014\n\251%V\220\360j\213\236M@\315P\263\32426EUs\203Q\263\325i~l\212\244AI)\263\214\307\232\256\271T\252\362\017\232\2424s\212\206f\001\rW\017\362Tm\'\275F^\272d\223\006\244\300nE9A\006\245SO#\345\247D0*P8\366\250\317\r\322\212viA\247\216\224\341\322\224t\251\026\245Z\231\005N\202\247U\251\224\032\225EJ:R\201KJ:\323\205<S\203)\0351FG\255&A<\323I\244\315\031\367\243>\364g\336\2274\240\323\201\247\212\220S\324\325\210\337\214T\203\031\247\026\025Vw\002\250H\375j\254\217U\034\325gnj6\344T\016\330\025^S\221\305Vf\346\230\306\252\312\t4\222\200\260c\271\252\255\220\2435\004\225\rG#\200\247\332\250M1n*2\377\000-FZ\232Z\272Ez\2367\307z\262\2445J\026\236\027#\025\"\256*`\277-1\343\371O\265C\216h\247\003O\024\341O\002\244Z\225\005XAV\021ju\025*\212\225EH\242\237\262\215\270\243\024\240S\200\245\034\036\224\224\206\222\220\201\214\346\222\214\212L\322\346\2245<585H\032\236\24752\034t\247\211>j\032L)\252\023\312I\252\216\365ZG\252\316\325RY>n\265\027\235\216\365\014\222g\245FN\027&\252\310\3377\024\3259\240\200MD\350\031\306O\002\253\334\340/\025M\216V\240c\212\2551%H\252.1Q\026\246\026\246\226\256\221O525Z\211\252\354|\212\220qR\246\rL\005+/\025NA\363`Spi\303\232\220\np\353OZ\225EL\225<b\254\245N\202\247U\251\025jUZ\223\034Rm\366\244\333K\266\214R\342\223\024\205i1\355HTc\"\230\300c#\2553\"\214\321\223@4\340\324\340\324\360\365\"\275L\217\305!\177\233\255$\222\215\225\237,\234\360j\273\275V\221\352\273\311Ud95^C\201U\374\314\034\032Vo\223\031\252\314\017Zb12b\211$>f\325\374\3526c\236\264\307 \214\032\247\"\340\222*\263\236j\t8\346\250\315\326\2531\346\230M0\232\351\325\252U5j#W\243<\n\224\036je\004U\204\351J\307\212\250\313\363\023M\332i@\247\201O\003\232xZ\225V\245E\253\010\265a\001\253\010*u\251\026\247QO\306h\333F\332LR\342\223\024\270\243m!Zc-FS9\305FGjm74\271\243w\322\215\324\340\364\360MJ\257\201\315D\322e\372\320\357\362u\252R?=j\007~*\244\262{\325W\226\240iy\353Lw\371j\224\214wR\t\t\342\245\004\0049\250\027\345\311\365\244<\032c\021\214\325Y\030\226\246\220JUiGz\247)\340\325)\016j\263\036j2i\205\253\246CS\251\2531\032\273\033t\253+\311\253\013\322\244SJ\307\010j\034R`R\205\247\205\247\005\251\024T\252\265*\255N\202\254 \253\010*e\025*\250\305J\253R\000i\330\"\212L\nLRb\226\227\024b\202\265\013!\007\336\241e \221Q\221\3150\212CM\315\0314\252y\253)\214S%|US)\337Oi>^\265U\337\232\2554\230\025FI3U\245~8\252\215!\317Zo\230}i\216\331\246.wT\305\3601L<\324r1\034T,\334b\242#\346\247\201\362\325i\2078\254\351\007\316T\3259\0075U\3705\003\032c\032\351\34395i\007\031\2531U\2658\305[\214\346\246\007\212ps\234\016hi\0161\212@\t\245\002\244QO\013N\013R*\324\212*U\0252\212\235\005XAV\024T\252*E\025(\024\374qI\217jiQM+A\007\322\223\221\332\224\032wZ\010\250\310\367\250]y\315B\302\243 \342\230i\206\212\013\005\024\345\233\013P\311)c\305E\273\236i\036O\226\252\311.*\234\222\363U^Z\254\362Uvl\232izM\331\247\240\346\236\352w\001I\322\241\227\223P7Z\\\0023K\3749\252\3569\315P\270\0309\252.2j\254\334f\252\265D\306\272\270\2075eH\305O\031\346\256\2475f>\225(`x\315\n\3309\025&\355\303\232r\021\267\004S\306\010\351NQR\001\3058\n\225EH\005J\242\246QS \253\010*d\025:\212\225EH\243\212v)(\"\223\036\364\230\244\305\030\024\270\244\"\232W\332\242e\250Y0j2\274Tej2)\216v\364\250\276f4\216p0)\231\310\300\246\266@\305Wv+\326\251\315\'5NG\367\252\316\347\326\241g\305@\317\223\232n\354\232z\363V\241\\\265X\362\376f\315Wu\305V\222\240 \232pS\214R\200X`Tr.\334\203Y\367\0309\252\014\270\315Q\233\255@zTO]dq\232\260\221\346\246E\000\360j\322\034\016\265\'\233\306\005<1\305=Z\247S\232\221jQR\n\221EH\253R\252\324\201MH\240\372T\252\017\245L\202\246Pj\302\n\231EJ\242\245Q\3058\322R\021IHE%\024\240\322\322c\212c(=\252&OJ\215\222\242d\250\231*\023\031-Mq\261p*\"7P#\3052A\305Q\236\263\346\357T\244lUs\'5^I2j=\324\003\315XJ\267o\367\305]+\3015Ra\326\251\275G\336\235\203\267#\255\021r3\336\241\270\357Y\263UV\350Ef\3160\306\253\032\215\353\264\034\016)\305\2601J\214sS\253f\246B3\315XF\\T\2523S*\324\312\206\245X\315L\261\032\225acR\254,*A\031\025*\217j\220/\265H\240T\312\005L\2121S*T\252\010\352*E\346\245\002\226\223\024\224\204SM%\024\240\322\322f\220\323H\246\225\250\33103Q\024\250\332,\034\325yP\356\246\254}\315\016\000Z\253)\300\254\371\233\346\254\373\206\306k>F\316j\253\232\204\365\244\3159z\325\210\375*\354#\004\032\272H+\326\250\314y5U\2075\0369\251TR\005\333\237z\255q\315gL9\252\222U9\323p\315Qq\203\212\211\253\262\'\271\246\007\311\353R\206\311\342\247CS\241\251\322\254!\253\010jt5a\005N\200\325\204\025:\212\220-H\020c\245;o\265(@}\252EC\354EH\247i\301\006\254&\017z\234\001\212\000\346\2348\245\315.E%%!\024\322)(\244\315\031\2434\224\207\255&3Q\262\342\243c\306*\264\202\231\310\024\307\351T\2478\252\022u\315g\\r\325JA\216\005Uq\315FV\243\"\244J\262\235j\344<\232\232L\256\010\351U\344\344\324.\225\001\004\032\2263\232\220\250e5Fq\265\2105BaTe\025]\271\2527\t\203\232\252\334WZd\3341\332\204\305N\203\232\260\265:/5a\026\247E9\253(\207\322\254F\206\254\242\032\262\210jtCS(\305J)\343\351N\030\247\355\006\224\002:\032pb\01752:\036\243\006\246\016\244p\324\340\376\242\227z\323\201\007\275;\212m\024\231\244\310\246\320Fi\264SsK\232J\003`\322HK\235\330\250\010\346\241)\227\244 \n\202\\sY\363\214\325)\001\301\254\371\207&\251\272\325w\034\324l8\250\312\323\220U\230\305Z\210\342\2452\014r8\250\030\203\322\233\326\241e\347\002\236\027j\032\003|\231\252s\034\223\232\317\233\031\252\222\n\254\313\203U\346M\303\245P\225\0105\322)\251\320U\204\253\010\005XLU\230\352\312U\230\352\312\n\262\202\254\240\251@\346\244\002\236\005<R\201O\031\002\227\232p\346\224\002)\343=\252E&\246P\017Zw\2261\307\024\273\010\357I\226\244\311\240\020iqL\"\232i3KM<Rf\220\232)\301\366\241\030\353P\232i\344\324N\016*\254\202\251\3123\322\252H2\265FX\372\325\031\220\201UXz\324X\313b\224\246hX\352\302.\026\244Q\315I\214\212\257\"\230\337\330\321L\311\r\232qrA\367\246n\371H\252s\232\244\352I\315WqP2\324l\234U)\342\311\255\204\253\tS\241\253\010j\302\032\265\035Z\214U\230\305Z\214U\250\3075ajU\247\212x\251\007Jp\024\360)\341x\245\013\315<(\247\204\247\205\251\024{S\300\245\3078\2451\323J{Sv{SH\"\233\311\355HE4\212LzSI\246\037jU\004\366\251\226/j\036<S<\222\312O\247j\215\323h\250\230qUdL\325g\217\212\253,Dv\252r\307\201\322\250\313\036j\234\221TB\022\016qO\362\370\245\t\355K\217jQR\003\362\324S\034\255F(`1\232\215\251\204\360j\254\234\212\256\303\003\025]\327\255@\303\006\243a\305U\225kEML\206\254\'5a*\314uj:\265\035[\216\255G\364\2531\375*u\351R\255H*@*@)\341y\251\025i\341i\300S\200\247\250\247\201R(\247\205\346\246\216\035\307\245O\366p\0055\340\030\342\2431c\265D\321\344\342\232 \357H\321c\250\250\232<r*=\225\033\2550/5b4\025)!F)\204\346\205\004\036\234To\031,r8\250Z<qP\264jj\007\214\n\251*\212\245:|\207\212\314\221O5Y\227&\220\307\306i\270\307\024\322)\247\212h\353O\355Ln\224\3209\245#\345\250\030qQ\036\224\302\231\025\003\247\025RAUd\246u\030\250d\025eNj\302qV\020\325\204\2531\325\250\352\334un:\267\020\253+\322\246QR\250\251\024T\213R\255J\242\245QRm\310\243\034\323\200\251\024S\302\324\212\265<p\222j\332 Q\300\247\342\230\302\230\313\305FT\023\322\215\234R\025\2464c\322\2430\003\322\253I\003g\212\207\311pzT\252\254\243\221Mm\304\323\221\016*Lq@\\\216\177\n\257\"\374\325Y\301\006\253\270\252\322-S\231r\270\254\331\223\232\254W\006\223m0\240\315G\"\340T\007\255*\255/C\212G^*>\235iKdb\243q\301\250\302\360(\333\301\342\240\220s\212\2472V|\243\346\250\372TrT\310y\315XCV\022\254\307VR\255\307V\343\253q\325\310\352\302\324\313R\251\251W\221R(\346\245\003\212\231\005J\007\031\310\251\027\2458\npZxZ\225#,p\005\\\212\330\377\000\025X\010\007\013R,t\245\016zS\030sQ\260\250\217Z)\r0\344\322\n\010\006\230c\036\224\323\036i\206!I\267\024\323\326\230[\024\326 \365\353P8\007\245W\221\0063T\345\305S\224dU)P\223\322\2534\\\323Lx\024\306J\202E\315E\345\363N\330\0051\2074\323\234Tei\241y\2472dSD\177/\343HS\202*\274\251\212\2457B*\204\211\363T,\270\250\034f\244J\260\225e\rY\216\255F*\334B\256G\305Z\215\200\253(\342\247G\0252\276jecR\253\032\231X\324\252ML\225:\032\220\014\366\247\216\264\365\034\324\310\271\355W\355\242\001rEN\370U\342\210\372T\352)\314\006*\263\236j\"j&4\235\0050\2657w\2757w4\340x\2434\231\3074\306zo\033y\250\3109\342\243j\214\363Q7\326\253\271\355T\345\3435U\310\315W|T\004\014\323\030\003Q\262\361Q\030\375i\205EF\302\242aM<\323H\244\013\315=W=\2516b\232G\315\232\212Xw\216+>X\212\223\221Te\\\036\225U\224\324L\224\211S\241\2531\325\250\301=\005[\211I\253\221\200\rYCV\025\252tj\231\rN\206\247F\251\320\324\311S\255J\265:\021\221\236\225 ~\010\035\351\350y\353V\341@y\253\221\306\243\034U\225\340qNe\310\024\252\273E;v)\013\361P9\250\311\3151\263L=)\215L5\031\340\323\325\270\245&\232M  6M8\220\335(\030\025\004\243=*\273\n\211\201\250\034Ui\024UGJ\255\"T\014\244S(=:Tdf\242u\301\250\212\324L2x\240&\0055\2050/52.\006\010\241\2075\033.W\216\324\3022\236\365Ja\234\326|\221\363\322\253\264Y5\003\307\216\325Y*\302.j\334J*\344C\247\025i8\351V\022\247J\235\rN\206\247CS\247\326\247J\260\225:T\312*u\024\376\264\365\0252\212\277m\234U\261\326\245CS!\005\262M=\260G\025\031\024\303Q7Z@\0055\2526\024\302)\204S\010\246\034\203C7\025\031s\232p<S\267Q\232c\032\201\270\250\230\324\017\315Wq\232\205\326\253\262T\017\035Dc\024\302\206\230V\243e\315B\302\230#\311\351JS\025\023.\005\010\243\034\324\204c\232n3I\264}*\031\020\250\310\252\262&\340H\252\222E\355U\332/j\206H\375\253*1W#\025n!V\322\246SS+\212\231\034\324\350\306\254!5a\rXL\325\204\025e\026\254\242\324\352\265(\251\025jUZ\225E^\267_\222\254\005=\252P\010\245\004\253S\267\232vr)\215Q7Zi4\224\303L\2448\2465F\302\230zTD\032@\330\247\206\247g\212\215\215F\325\003\324-\315F\335*\027\031\250XqP\225\346\232R\230c\366\250\336:\201\3439\250\314|R\354\000t\2462\324,\234\320\027\212i\031niv\236\335)\254\205Wu0\202P\202*\243.\t\250\330\003\324T\016\202\252\310\204\326$jqV\243\006\255G\221V\024\237Z\231jd\253\010j\302\032\260\225f1V\243\025j1VcZ\262\213S\252\324\241jEZ\231V\246H\363WaR\251\315N\010\002\2369\245e\3434\314\322\356\246\226\246\023\3154\322\216\224\311\024\216\225\001&\232X\212\214\2614d\221\212kp*3\3150\212\005<\032\030TL1P=Bz\323\032\2425\033.j\"\274\322\204\243eE\"\014\361P2Te)\2451Q\021Q2\344\323\010\246\021ON\264\254\013\n\215\207\311\214UG^M@\313PH\rT|\203Y\021 \357VPqS-L\2652T\351S\245YAV\243Z\265\032\325\270\326\255F\206\255\306\225j4\253p\300_\245O\366G\331\273\034S|\262;T\212\265:\014U\304\301\\R\201\363T\3109\244\231\200\\Up\334\365\245\335HZ\232M\0034\2439\245<\324l\200\324O\035DP\372P\020\367\2468\301\246m\346\220\216)\002\323\202\320V\241pj\006Z\211\205FEF\302\231\214\323Y{\322\250\342\220\2574\306\\\325wJa\\\nc/\025\013-DV\243+\3150\245*\214\032s)\333\221\322\243a\230\370\252\254\265\013/\025ZU9\252\256\225\216\213\305N\265*\n\235\005N\202\247AVcZ\264\213\355V\243SV\343J\271\032U\270\322\255\306\225i\024U\270\243n\302\257\333\034\202\217\323\025\004\252\276g\3128\241S\212\220\n\236.\2656\337\232\244Q\315A1\313b\240 \321I\322\226\214\320\032\224\034\322\3434\335\271\244+\3050\257\265B\353L\333AZM\274\324\213\036E#\'\025\003\245D\310*\007J\205\224\324L*<\363N\306V\205\0242\324DS\n\212\211\226\242e\2462\361P\272\324Ei\245i\245q\315*\222s\216\206\220\246\024\325G\034\324.0*\007\\\325w\216\260\324qR(\251\226\247AV\020f\254F\265n4\315Z\215*\334IWcJ\267\034un4\253(\265j%\344f\264\003\242\304\002\016{\232Eb\t#\275.3F1K\232\222&;\252\3568\006\244Q\205\252\356\240\2651\220b\230V\230F)\247\245!\243\265\000\363R)\247\205\006\215\234\320c\006\241x\352\"\224\302\264\230\346\246\214dR8\030\252\354\274T,*&\025\023%D\361\361P\030\360h\306\006)\003\001K\301\2462\323\n\324l9\250\231y\250\310\342\242e\250\331*\"\264\233r1B\307\203\200h\223\n\244w\252l;\232\201\305G\267\232G\213p\256\\\037J\225A5:\n\260\202\254F*\324kV\343Z\267\032\325\330\222\256\304\225r5\253(\265:\001V\020T\300\324\253O\310\305!4\016jxP\347&\255\241\340S\363\306)\2453\3154\246*6Z\211\2050\212i\024c\212@9\251\224\014S\2063Ru\240\014\323Y\001\250\2319\250\332:\210\2574\364\024\254*\007\034\324\014)\205h\362\363H`$t\250%\203`\311\025M\306\r3\031\243\024\021I\267\212\211\227\232\211\2075\031\024\302\271\250\331N1Q\225\246\021\212:\014\212\257!$\346\240`j&ZENiYv\255r(\2652\212\235\005XAV\020U\250\305[\210U\310\226\257D\265v%\253\221\255N\253R\255L\246\245\rOV\247n\244\335R#sWc\345EZU\371i\333A\247\005\342\232\351P2\324l*\026\342\242&\233\272\200\3075*\267\025\"\232\220t\247\016\264\354dSv\323Z>3\212\204\307\232\004x\355LaQ2\324\014\264\300\234\324\321G\226\346\254\210\323n1U\257!\0333X\322\'5\036\334\032LsK\267\"\233\214Tl9\250]y\246\025\246\221Q\260\250\312\323Z<\212\213n\001\315B\313\315F\313\305BW&\223n\r6Rv\364\256M\026\246E\251\321j\302-YE\2531\255[\215j\344KW\342Z\275\022\325\264\025(\351J\r=MH\246\245\024\372P\246\244U9\253\360\003\266\256\240\310\247\010\371\351O*\000\346\242a\351P\262\361P0\250\231y\250\331*2\224\230\3058\034\324\211S)\247g\232\225H\247\000\t\251B)\\\032\211\341\002\243d\342\240d\347\245E \305Wa\3154(\315N\253\307\024\356\202\243\224\227\\\032\315\232,\032\247 \250\361\315H\213\236\264\216\270\250\030TdTdPS#5\023%3m#\014-V~\265\031Z\211\206i\241\t8\002\217,\214\223U\2468\004W.\213S\242\324\350\225a\026\254\"\325\250\322\255D\265v$\253\261-]\217\212\260\246\237\232QR(52\212\225EH\242\245T\251\322*\261\031\nqV\025\360sV\222@\313C\014\323\n\324l\225\003.\r@\303\232aZB\224\302\224\3020h\r\212p\223\024\242Z\2327\315YCR\206\024\204\202)\244`T\0220\351U\230d\324.\265\027CSFi\355Q61U&\031\315Q\225j\014sR\245\0168\250Yj\026\\S\010\024\336\224\322)\214\275\351\256>Z\250\313\3151\2050\246)\321\'$\232d\247\002\263\247<\232\347\321*t_j\235\026\254\"\325\224J\263\032\325\270\327\245[\211j\344ue*u\251\000\251\025jE\025*\212\225EL\213VcJ\262\023\002\230\334\032z\260\"\247\214\221\315Y\007\"\2341H\3121U\332<\324\017\036*=\234\322\354\342\230R\240\221y\250[\212o4d\324\210\344T\3511\251\226Q\267\255\006nz\322\031r)\204\346\243\250\334TEy\247\247\024\366\037-B\365ZJ\251\"\346\253\262\340\323\223\216\2643s\212\214\372\324n*-\264\205i\002\363Lp1Q>6\325v\024\2018\245\362{\232G\340qT\345=j\204\375\353\025\026\254\"\324\350\265a\022\254\242\325\204Z\265\030\253Q\212\262\200\325\204\025e\005L\253S*T\202:xLT\212*t\025f>*\302\3621H\321\223\332\221m\244#p\034\n\2364u\352*\302\216)G\006\203M#\212\211\227=\251\276]\006\023Q\274~\325]\343>\225\003E\203\322\231\266\232W\232r\245;\030\243w\024\201\262is\357J)\330\244+\232iJM\274\323\361\362T\016\005Wu\025\001J\255\"\363Q7\024\302i\273\275i\t\3153\034\323Xb\223\024\307^3U\330S\030qH\024\346\236zT2\016*\234\253Tf\025\224\211\305N\211\355V\021=\252\312%XD\253\010\225f8\352\312\'\265YD\253(\225f4\253\n\2252\245H\026\227\024\241Njd\006\247AV\341\031aW\320B\215\373\305\004\373S\036\340.V!\362\237j\222\031\004\213\265\200\311\350iY6\022\010\246\000\244\324\251\010jV\265n\302\233\366V\356)~\314})\0148\035*\027\207\332\253\274|t\252\317\017\265Wx\210\355Q\354 \321\320SX\323I\342\220\034R\206\346\244\0074\361\322\234\005\004z\323X\001M\'\214T\017P0\250\230TN\274UI\006*#\322\230F)\0014\354\342\232\3447A@^*)=*\022\2714\323\031\243f)\030T.*\264\213\236\225Nh\353%\024\021VQ*\302\'\265YD\2531\307VR:\262\221\325\204\216\254\307\035Y\216:\262\221T\341)\341i\341i\301i\312\2252\245J\253S&GJ\230\022\335jA\030\"\247H\260r*|e0y\367\250\0323\273\212\265o\021=MhG\0261\226\006\2440\257aQ\2748\031\252\357\025A$B\253\264#\322\240xEVx\375\252\026\213\'\245@\361\021\332\253\272\324d\032L\032P\2475\"\255L\026\234\006\r5\21534\323Q\270\250XT$sMe\342\252\312\231\252\345qL<\2321M\"\200\224\347\033V\253\260\346\231\263\276)\344q\214S\030s\322\243aP8\250\035y\252\322\245d\306\225j4\253)\035YH\375\252\314iV\243\216\254\307\035Z\216?j\262\221U\230\343\253)\035J\261\023\320S\214%z\322\204\245\333J\242\247U\251UjUJ\220-H\240\212\231\037\024\362\336\207\255.\340\274\232\226\031\001\351\326\255+g\275J\222:\236:U\225uu\301\034\324o\032z\325w\210T\r\020\3061U\344\204\325W\214\347\245Dc\366\250^.*\244\261\363\322\253\262sM\333OU\0252\240\305-\033sQ\262\342\242n)\273\251\244\346\232\313\305@\312EF}\3526\000\324\022G\305W*\001\240\257\313M\003\232\220\000\006i\216\245\201#\265E\260\346\235\345\340f\232\312)\214\265\023\n\256\342\253\271\252\362\034\326tiV\243J\267\032U\224\216\254\307\035Z\216:\265\034uj8\275\252\312GVR:\231S\332\245@C\014\016i\322ng\313\nLzR\0244\345\\T\312*x\327&\255$9\2531\333\307\217\230\323^\020\033\212\210\251ZP\334S\035\216*%\231\243\223\'\245]\212\344\021\326\254\255\310\035\352d\274@z\324\313q\034\202\220\220x\246\025\250\2313P\264c\322\241x\207\245@\361{U)\243\307j\245\"\340\324X\346\234\240\372T\352\016)H\246\236;S\0335\013f\243\"\220u\251\225C\n\212X\275\252\234\213\203P\263\001\326\230\314\245z\324\014E3p\244\030\315?\256\006)\357\030\021\361L\211\006\303\221\310\246>G\025\013S\017J\215\252\t\005S\224sU\\\340\3241\'j\264\211V\343J\265\034uj8\375\252\334q{U\250\342\366\253I\035XH\352\302%L\261\324\210\230l\342\246h\325\227$\363Q\254>\324\246*n\312z\245X\210b\255+`T\250\031\217\024\374\034sMd\310\344\322}\230\323\036\r\275\301\250Z\000{SB\025\355F\342)\3502y5n\027U8\002\254\357\315/\231\317ZB\331\357L$S\030\002:Uw\036\325ZT\317j\254m7\236x\245\026*)\r\250\034\201L1c\265\'\227\355M1\342\242)Q\274|f\253\270\301\250\330\342\232\322\343\220i\032\360m\303V}\315\310\347\006\263d\273ny\250\276\322\347\253R\371\304\236\265<gwz\233\3138\310\240\002\rI\234\361NQ\311\305E\"\363U\335qQ1\250\331\252\007j\253.*\224\207\346\251\"\\\212\271\032f\255\307\035[\216:\267\034un8\375\252\314q\373U\244\217\332\254$~\325:GS\254u(\2134\357+\265\00508\024\315\244\366\245\362\275\251Dx\247\250\305J\270\253\021\266*p7\014To\033\003J#r98\024\257h\3737)\315D\2609<\324\242\333+\202\265\033Y\340\344\nh\267\000\363R$J:\032\234Dv\323\0362*<\021\336\215\304u\031\244\363GB\264\206D\357M&>\271\024\321\345\267JB\027\2650\250\250\2360i\233*6J\217\312\315V\237\344\342\251\261\3115\024\234\n\2434\273sY\323\\\221\221\232\250\316\362\034\014\324m\023\355\316*\234\216\310\324Gq\223W\241\233\241\315_\216\\\212ql\232\001\346\245\003\346\006\211\000\252\316*\007S\212\254\365\003\265U\220\325I\0075j\025\351W\242Z\273\024y\253\221\307V\343\216\255\307\035Z\216:\262\221\325\224\217\332\254,u*E\236\265*\307\315I\345qI\344\346\224A\355G\225\201M1\023I\345\036\302\201\023T\311\031\025:pj\306T\247AUef\317\024\304\231\324\343<\032\263\037\314A\315\\P\010\351JcS\326\242{u5\027\221\203\3059c9\347\212\031{c5\033 \364\250Y=)\214\206\243+Q\224\246\025\244\301\035\351W9\346\235\212M\276\324\306\217#\201LD\344\356\025\235x?zj\213u\250\345\031J\311\271V\347\025\234\320<\215\3005~\322\303\241e\316j\343i\350W\356\363X\267\372n\030\225\037Z\307{w\215\372qR\306\344U\330%\347\031\253j\331\247\003\223W#\031AJ\361df\240h\361U\345^*\214\242\252?\025]\372\325i*\364KW\341Z\277\n\364\253\321\'\025r8\352\334q\325\250\343\2531\307\355VR<T\353\035L\261\324\253\030\025 \216\234\"\311\247\264$.@\315Fb8\311\240F1\315#(\307\024\212\000\034\322s\236)EH\231\316\r\022G\232\205bR\334\234U\310\243\215G\007&\247Q\216\224\343M\372\232C\214u\246g\236)\016sQ\2605\021\0079\246\344\037jF\214\036\225\013&\005FE7o5 \214m\246\272\025\246f\214\322\003\317Z\202\342\331dR@\344\326D\261\354b*\224\315\216\225_`q\234T\266\366\310\374m\255(mUG\002\2476\340\257J\243ub\256\247\345\346\271\315GO(\013(\357Y\277e;2T\323\0226Y+b\332\311\246\217 \363D\226\257\021\346\254Z0\337\264\325\231\020\257\035\252\263\255V\225x\2522\255Q\225j\233\365\252\262\032\325\211j\364K\322\257\302\265~\021\322\257D\275*\354I\310\253q\240\3435j8\352\312G\355S\254u*\245J\261\023\332\245X\375EH\25023J\301G\335\315D\313\236\325\031\\\nL\014sM\362\362h)\212f\010\244\336\303\221L294\334\234\344\232\261n~nj\372\016)\304\nB\252:\324,\240\236)\002\221A\300\024\302\303\025\033u\342\242`sL\311\024\306$\365\246R\021\315N\200b\231*\344\324[i6\212p\2174\214\273T\222+\036\351<\307;W\025B[lu\025\\@T\236:\325\253hJ\234\347\025\247\032qR\021\305B\311\236\242\251\\Y\254\240\202*\221\323\220)R\274Vt\272hY~QV\355\255\244\2152;S\245\371\224\207\034\3251\036\311\262=j\3431*3U\244\372UY\005S\225z\325\031\226\250J1Te5\273\n\325\330\226\257D\275*\364C\245^\210U\330\205\\\210f\256\306\265j5\315YD\366\251\2261\351S\244b\244\021\212\n\016\302\232W\212aZ\214\247\2651\223\006\231\203\232\010&\230\313L+\232n\312p\21354Q\341\205\\QN\013\232k\212\210\216h8\307&\240v\031\300\246\355&\227c\032<\263Q:\360j\002\274\323\010\244\305K\030$\343\322\225\3078\246\355\3158F)v\343\255#\200\313\212\245,Q\2575\235:\202\324\304\2005N\266\3309\251\000#\265;\024\204qQ2\203\332\230c\315Dm\324\266H\240\304\241p\005T\236\327r\022\274\232\317\362\376l\021\322\244+\305B\343\212\251\"\363U\244Z\243:qY\263\255g\312+\240\210U\330\227\245^\211j\364KWb\025v!W\"\355W#\305[\214\032\267\030\253(\265(_jx\034PW\232iZaZn\337Zk \"\2421\234\322yt\326\216\242#\006\234\211\272\245*\253K\031\\\324\312E;x\035M1\244SP\274\250:T\r2\372\323C\202sO\022\201\320R\371\347\260\246\231\030\323H&\232TSLY\035j&B\246\225\034\243S\316\013f\224b\227r\200j\273\317\223\212\004\240\214\032\2539\315Qu$\364\2536\361|\265d\3066\342\243)\201\322\243 \212N:S\017Z1M\"\243a\305FG<Ui\255\201;\324Uf\217\216EV\221*\263\245V\221*\234\310\010\254\313\210\372\326t\251\315oD\265z%\253\321\016\225v%\253\261\n\271\030\253Q\373U\270\205]\214t\253\221\212\262\202\247\002\235\212\010\246\225\244\331HR\230W\024\233\001\2441\342\242a\316*?(\023\223La\267\245W\221\334\367\246\254\314\016\rJ\327J\203\214\223U\336\365\317A\212`\273\220u\246\274\345\273P\204c&\246\0141I\272\224\034\324\253R\205\310\246\262\340\322\252g\024\262F\241rEQ\223ho\226\232d\013\324\342\230n\027\035j&\270\335\300\246\344\232p\006\202\245\273R\375\234\036\325\"\307\267\245?\024\322\007z\205\366\324\rQ19\343\245\033\250\316i\204S\010\246\032\211\343\004g\025NX\210\344UI#\252\322/\250\252\222\307Y\363\305\327\212\316\222\034\236\225\377\331"
-byte_png: "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\002\000\000\000\002\000\010\000\000\000\000\321\023\213&\000\000\0021IDATx^\355\335\341\212\2030\014\000`\321\367\177\344\311\301q\333A\031\247\363\2646\311\367\375\014\010\352:m\322t\233&\000\000\000\000\000\000\000\310cn\003\265\024\277\374iZ\333\000\000\000\000\300Q\345+-\000\000\000\000}(\303p\217\245\rl\321\232\004\377\341a\017\000\000EH\237\001\000\330\246d\014\000\000\000\014F\271\002\000\000\000\340l?m\305\272\213\241\242\346\233\257\002\013\000\000\334e\270\302\204\004\t\000 \rS;\000\000\000\000\212\233\325\310\000\000\000\000\000\000\200\212\254\225\002\000\000\000\224\240\014\004\000\000\345\331J\013\000\000\300/I\"\000\000\2440\334_[\002\000\000\177z\226\347\217\225\351\277\217:v(\000\000@hR!\000\000\000\000.\245%\027\000\000\000`\014\032\205\000\030]\3565\005ob\000\000\000\000\000\000\000\000\000\000\200\354t\216\003\000\000\000\000\000\000\000\000\000C\323\354\010\000\000\000\000\000\000\360\226\345T\306\023`T.m\000\000\200~\3266\000\000\000\000\000\000\354\241\304\016\000\000\000\347\013\260\005\002\000\200\253\230\014\002\000c\270qV\242\033\005\000\000\340\036\3621\000\000\000\000\000\000\000\000\000\000\000\372\270q33;\330a\000\000\000\244\'1\005\000\000\000\000\000\000\000\200\275\362t\333\344\271\022\000v\262W\2568\003\000\200-\2176\000\000\000\000\000\000\000\000\220\234\336:\000\000\000\000\000\000\310,\302\212`\204s\004.\344!\000\000\000\000\000\000\000\000\000\000\000@\030\232\340\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200\314\3466\000\000\244\342]_\336\352\2675\253\363\024\000\250\315{\240\270\347\0000\020\330C\352\000\000\000\000\274((\001\000\000\\K\336\005\000\300G\2266\000\000\261i^\007\000\000\000\016RV8\217\366\025\000\000\000z\222\207\2264\373\334\001\000\000\000\000*R\035\006\200\300z\265\354\207\2330\364\2721\000\000\220N\270\331?\347*?\000\242\337\200\350\347\317Q\n!\000\000\000!H\337\030\211\361\010\000\000\000\000\000\000\300;_s\363!1$IHR\000\000\000\000IEND\256B`\202"
+byte_jpeg: "\377\330\377\340\000\020JFIF\000\001\002\000\000\001\000\001\000\000\377\333\000C\000\003\002\002\003\002\002\003\003\003\003\004\004\003\004\005\010\005\005\005\005\005\n\007\010\006\010\014\013\r\014\014\013\014\013\r\017\023\020\r\016\022\016\013\014\021\027\021\022\024\024\025\026\025\r\020\030\031\027\025\031\023\025\025\025\377\300\000\013\010\002\000\002\000\001\001\021\000\377\304\000\037\000\000\001\005\001\001\001\001\001\001\000\000\000\000\000\000\000\000\001\002\003\004\005\006\007\010\t\n\013\377\304\000\265\020\000\002\001\003\003\002\004\003\005\005\004\004\000\000\001}\001\002\003\000\004\021\005\022!1A\006\023Qa\007\"q\0242\201\221\241\010#B\261\301\025R\321\360$3br\202\t\n\026\027\030\031\032%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\203\204\205\206\207\210\211\212\222\223\224\225\226\227\230\231\232\242\243\244\245\246\247\250\251\252\262\263\264\265\266\267\270\271\272\302\303\304\305\306\307\310\311\312\322\323\324\325\326\327\330\331\332\341\342\343\344\345\346\347\350\351\352\361\362\363\364\365\366\367\370\371\372\377\332\000\010\001\001\000\000?\000\272N)\t\315%\003\212u9jU\251T\325\204\253\021\212\265\025Z\217\245Y\216\254!\2531\325\210\352\312T\311S\255J\225&x\244\245\3154\265&\357zB\324\205\261M\337\232i|SK\nM\245\201\"\243\335\203\315\007\024P\t\024\360\331\034\323\223>\225(\346\244S\315J\006i\340S\261@9\251\007\002\234\r8\032x4\365lT\250\3654x4\362)\2148\250Z\22074\342\342\230\317Lg\342\2432Ry\224\276g\2755\245\244\022sSF\365(9\025\363\253\000i\224QN\006\224u\251P\324\310*\304uf:\263\025Z\212\254\240\253\021\212\260\234U\230\315XCS\245L\246\245Z\2234\233\251\t\315!4\332nsHzSi\031\362\270\246)\311\346\217\2366;y\025\023\312\316\334\212\025\275zT\234g\203A\340\365\245\006\245V\251\026LS\303g\265H\216EJ\033>\324\360)q\3158qKK\272\234\r(j\221\032\254\306jBqQ\263\324D\342\231\273\232\013Q\221\212\205\332\241/\315\'\231He\246\0313@\222\254\303 \307\275YV\343\232\371\330\234SI\240\034\322\321O^\265*T\321\232\261\035Y\216\254\305V\243\253)V#5e\rN\225:\032\235\rL\265*\236)\344\321\272\202\324\332BqA9\246\223Q\226\3057p\24655n\032.\224\261]\000\307p\034\323\336H\335\200\002\202\020}\323\317\245F[\232p4\3655*\232\225ML\264\361OW\305J\274\216)3\353J\r-\031\305(4\345lU\230\344\342\236d\250\231\251\205\351\273\362i\013R\346\241\224\342\2533sL\337M2Ry\224o\253V\256\rXy\200\025\363\331bh\034\232R8\244\006\235R-H\2652\n\261\035X\214\325\230\315Y\216\254\306j\312\032\260\206\254!\251\320\324\253S+T\252\324\374\321\272\220\236h\315\004\214{\323s\3054\232i \203\353P\263SK\323\030\346\230E\000b\236\t4\340i\300\323\201\305H\254jtj\231Z\244V\247u\245Vd4\340I\352iC\340\323\304\200\322\346\215\324\233\271\251Q\270\247\227\250\332Jc>i\003\323\303R\347\212\212L\342\252J\330&\2402S\032JO34\241\370\251\341\227h\315:I\363^\030F)(-B\363O\247\257Z\231\006jd\353S\245XAV\343L\212\260\203\025<l*\314f\254%N\22526*e5*\265J\246\234\036\215\364\273\251\013{\322\026\244\335\355M\337\265\263\201M\222R\303\260\250I\246\026\3057p\244&\200i\352i\353\322\234\264\3403R(\251\027\212\225Z\245V\247\206\033\205H_\314>\224\235\r;\250\244\333\212z\356\0359\024\365 \236F)\214\274\361\315*\276(ix\246\357\246\027\2405K\031\315JN*7\034f\263\356[\006\251<\230\250\314\264\202lR\371\325$w<`\232V\236\274d\265&\352Fj\025\271\251T\3565*\212\261\02758Z\225\005XC\212\2317\036\340\n\235C\001\367\252x\330\364\253Q\267\025a\032\247F\251\324\324\252jUj\2207\275\033\275\351K\320\254\017SM\337\315.\372B\331\357HZ\230MF\304\323\016OJa$\036h\007\024\341N\006\236\246\244Z\224\nz\212\220\014S\224S\307\025 \353N\316)GZz\344\324\212\2315e\023h\244q\301\307Z\252\333\272Td\225<\323\302\356\024\326R*6\244\r\212p\227\035\351\3536id\227\345\254\333\247\254\371$\346\2432S\014\264\236o\2755\2560i~\321\307Z\362\25184\300\344S\213\003@\251\222\247CV\241\000\342\255\242\014sR\010\363\320S\202b\244N*\3021\251T\340\324\350\376\365:>*\304r\325\204\220T\252\365*\275?y\305(z7{\322\027\246\227\243}\033\351\013\373\322o\242\230r\016s\3154\345\217\275\000S\200\247\201J\005J\265*\232\225M<S\307Zx\024\264\271\"\236\246\247E\025:&9\251v\323\031O4\302\276\325\014\230\315\021\222GJ~\315\335j\t\242\307J\252\331\006\243.}iC\342\221\245&\250\335\310q\326\250<\225\013KL2\323L\225\014\222\342\210\347\335^p\355\223IM$\203J\257S\244\200\212\221d\301\253pK\216\265v)sV\004\240S\267\346\236\265:t\247\253b\246F\315L\206\247CS)\305L\257R\243\324\201\251\352\324\023M&\220\2657u\005\250\335J\016i\304\036\324\231\365\240\216iv\236\364\241i\340S\202\323\200\3058t\251\001\251\026\244^\325\"\323\200\315.\332r\255Z\206.\346\254\242\374\330\251v\323XsQ:\023LKR\307&\247[p\007Jk\304Gj\211\342\310\254\373\210\366\223T\334\374\324\322\370\025\031\222\250\335I\212\317y*\026\226\233\346SZJ\202I3M\211\3105\302\314\233\032\230\r)\346\230W\035)\350\rH\207\232\267\033qV#sVQ\263S\251\305L\255S#\361N\006\244V\305N\217S\243\324\310\3652\275J\257O\rR\006\247n\3154\232i4\205\250\335J\016i\300\323\206A\3159\206\343\362\344\232r&\334\356\024\245\t\344\034\212r\340\216i\310\233\251\333py\247m\366\245\013O\013O\002\244\003\232z\216jEZxL\324\221\307\223V\207\030\002\246@\005X\205x\311\247\025Ri\273T\032\t\037J\003\001N 2\236*\264\261\225\035*\204\300w\254\313\240\027$U\006\223\232\211\344\"\252\\6\341Y\322\311\212\256\322S|\312C%Dd\346\245\204\356\346\271\t\242\r\332\251<eO\024\200\232n\356i\301\261R\253f\247F\253\021\265XG\305N\222U\204\224b\234$\247\254\225*\311S$\225:=J\217S#\324\312\365\"\265H\257R\003A<u\246\223\232(\240\034S\201\357R\251\315=r\234\251\247\000[\222y\247\246\027\202)v\362H\351SC\226R1\315 \007w4\375\274P\005<\npN3O\013R(\251\024T\2521S\30603OQ\315J\250s\236\325.\374\014Pe\246\027\367\246\357\347\232W\2275-\274\27185\025\365\300\003\002\262e\220\221\232\243rr\206\263]\261\232\257$\265VI2\rf\312\304\223P9\250\367\322\027\342\2412e\261W\341`\024\n\346\0359\250$\2105W\222\334\366\252\354\205M(\346\244U\251P\342\247C\305L\217R\253\342\245Y*E\223\232\225^\245V\251\221\352tz\231\036\245W\251\225\252Uj\225^\244V\247\346\223p\244\335@\247S\207Jz\361R)\251\024\324\200\006\353OX\317n\225\"\002\255\351R\274{\206\357J`9\024\001\212z\212\221E<\n\000\305L\225b4\334jV\030\342\234\213\322\2462\000*\027\226\205485\036\352M\325$rm\3175\024\256\030\032\316\271p\240\325\t\345\005+.Y95RY*\253\313\200j\233\276MB\355Q3\001Q\264\225\032>d\025l>\000\254f\033\252&AQ\236\016\rV\271\213\270\351U\224\020jPx\247\251\251\025\252Uz\220=<IR\254\225*\275N\217S\243\324\310\3652\275J\257S+T\312\325*\265J\246\237\2323K@\353O\247\016\225\"\323\327\245H\275\252U\251T\361\212\225\006i\314H\\g\212b\212v)\300`S\201\247\203N\035jh\305Y\204p}j@\271\2459\244e\3435\t8j_4\n\036\340TE\3019\246\231\000\246\264\343\2654\3146\236y\254\213\353\2541\031\252\022\334~\357\255Pyrz\324\022\277\313Te\223 \363U\214\265\013\311Q\0313Q\274\234RB\300\034\367\251Z~+=\\\021Q\312\334\324;\251s\225\301\252\222(\rB\363\3059i\343\245H8\247\003NV\346\244V\251\021\352d\222\254F\365:=L\217S#\324\350\32525L\255S!\346\244\317\024S\205-8t\247\212x\355R-H\247\025 5\"\232\225N*U\346\220\241\007\245(\\S\266\322\201\212)\312j\304ui\027\002\247E\315$\377\000-Bf\300\301\250\231\205@\357\203Q\273\323|\337z\206K\235\275\352\027\271\'\245Wk\242\271\315f]]y\217U\246\233\013T\232nz\324R\315\201Y\362\315\311\346\252\274\330\246\03123Q<\375\252&\2334y\373\005)\233\"\250\3071\024\222\315\315>9\025\227\'\2558\215\243=\215S\224\341\261H\240\221\232pjz\265H\246\236\264\264\340i\312\325\"\275O\034\225a$\036\265:=N\217S\243\324\350\32525N\215\232\2245(4\340sN\007\326\234\r=MH\246\236\246\244SOSR)\251\024\324\321\266*u!\272\323\374\220\335\370\250Xmb\001\243u&M(nj\314G\221W\020\363Vc#\212e\313dqT$<\323\013\361PH\365\t\220\324\022M\216\365NYI\357LY\361Q\3130#\255gI\367\263T\256\245\301\252\206_z\255=\306\001\2522\\{\324\017.j\007\270+\336\2423S\014\3314<\231\247\t~P*\252\265+\363MF(q\332\254+\344b\222H\367\340\212\221S\312On\364\325X\335\263\234T\253\002\027\300jS\010\031\301\240/\245.8\246\322\203\212pj\221Z\247F\251\321\352\3029\253\010\365b7\251\321\352\304m\232\230\032Pi\340\322\206\247\003OV\247\253\324\212\302\244S\357R)\251\024\324\212jU54uf3\201P\314y&\240\rF\352ru\253P\365\025i[\232\261\023sI75FS\203U\335\361U\344\224Uw\226\253<\235j\t$\315V\222\\UW\224\372\324\022N\243\251\252s\310\037\241\2522\311\266\251K!cT.\034\241\366\252\206\350\223\214\323^l\367\250\374\332\003\374\302\225\245\311\305=^\253$\206\246\rO\n\010\3159x5<d\032.Fb\317\245VCR\2519\251\220\324\310H<R\036\264\201A\007&\233IR)\251P\343\275L\215V\021\252\3025XF\253\010\325b6#\275N\255\353R/JZ\\\323\201\247\003OSR/\"\236\271\251\024\343\275H\255R\243T\312\325<n*u~*)rG\265D\330\n1\326\230\rH\207\006\255\302j\302\266qS#\342\235#\344U\031\001$\232\251?\002\250I&\rD\362qU\244z\211\237\216\265]\316j\254\306\263\346\311\315T\336w\020MT\232n\242\251\274\270\250eu\221qT$P\246\240w\346\2422b\221&\3114\364\223\'&\244\023r9\244QNV\315M\03152\216)A\301\247\013\200r\270\315E\036\014\234\360*V\001[\203\221NSS+R\236i)\247\212ni\312y\251\024\324\350jt5f3V\022\254Fjt5a\rL\000\247\n)FE8S\301\247\203R)4\360i\352\325\"\275J\257R\253\036\3252\313N\337\232\211\371=)*D\353VP\340S\322J\235d\310\244iqP\3138\307\025\237q-g\313\'&\240y\260=\352\253\313U\336b*\007\270\"\242y\362j\007 \203TfLd\326d\3142y\2523>*\017;\006\241\270\231qU\313\202*\254\362m\250b\233\nNi\r\336\323\326\235\366\325\306s\212\323\'\212E\353Vc\"\245-\201B\234\232l\301c\005\325\271\364\250\222r\307\236ju9\025\"\361R\003\212p4\244\323I\3056\201S%XAV#\025b1Vc\025:\n\235*x\352pqJ\016iiA\247S\205<\032x\247\npjplS\325\352U\227\025(\227=i|\332\221f\035\372\322\202\t\366\251\020\202jRr:\323\203Pf\333Q\265\3005ZI}\352\254\322qY\357)\334y\250\036Nj\006qUg\227\035*\233\317\305D&\311\244y\260\246\263o.\372\340\326i\223$\222j\264\355\270\361T\246r*\253\312sL\373F*\033\2517.j\262?\313QJ\3715\013\276k\253lb\231\273\024\0079\342\254\304\333\206\rK\031\302\232\2531$\323c\342\255F\374T\241\251\340\323\301\245\'\212m&iW\255O\030\253(8\251\320U\230\305XAS\255L\2652\034T\241\251\352i\324R\346\224\032z\232\224\032p>\364\264f\22458==d\247\211(\363)VB:\032\267\014\274\034\325\210\316\341\232\221\210\305T\225\215@\315\212\215\344\305T\236^\rQy95\013\275Wv#\2750\270#\232\314\272\0041+\322\252\375\240 9<\325+\215H\356*\005T\226b\340\223U<\302N)\032@\240\216\365RV\006\252I\212\254\347\232\212y?vEB\033b\n\256\362f\243\004\261\342\272\243&ED\316j\315\277)\315O\033\014\324\241\360H\250\231r3Q\201\212\221\rN\206\246\036\264\3523E%=*d\253\010jx\315Y\214\325\224\251\226\246CR\251\251\026\234\016)\340\323\251G4\270\245\035i\340\342\234\r.\352]\324n\243u8=.\372P\365\"6M\\\214\345*x\237\024\347s\216\265VI\016j\026z\257+\361T\346\222\251\310\370\250\036Z\211\245\025VYOj\253$\236\265\233t\303$\212\317b2Oz\206I{Sc\3062j\264\262nbj\253\311P3f\241sU&l\021\236\225VY\263L\211L\257\212\235b\362\230\267\030\025\267\270\346\236\207\'\232\265\023v\251q\212p\342\2279Za\024\345\343\0252v\251\20585.E-(\247\255J\242\247AS\240\253\021\212\260\225a*d\025.)\353\300\247\323\2274\361\323\232z\221\267\030\346\212)\331\2434g\336\227w\275\033\275\350\335K\272\200\324\354\324\210j\344\022`sV\024\214\214T\256\271\025RU\252\3561Ue5RS\326\250\312\3705Y\332\240y8\252\356\370\353U%\223\255T\220n\316k6\340\024$\325u\220\022sM\236m\261\234U(\344\335\232\255<\330b\005WiM7\314\252\367\r\236j\263`\212|\014\250\030\236\275\252\031&\'\275uACt\246\260\332jH\233\346\253@\346\206c\212[bYM8\241\305 \310\251P\342\246V\035M\033\275\351sN\006\236\r=jd\025:U\230\305X\214U\204\025<b\247Q\212}8t\247\251\247\203\232x\247\321IFh\310\243u&\3527R\356\245\006\236\r:\236\231\251\320\325\270\371PjTs\212G\031\025VU\300\2523w\252s\036\rfJy5Y\337\025]\344\252\362\276zU)_\232\205\245\305T\237\347\310\254\306\006)=\251\2679h\270\252\221\222\212j\254\331,j\006\244\311\002\241\235\200CU\026O\222\241iqQ\264\265\330\305.\rJW\177Jr)SS\241\315HFV\235n\273G\326\254\001\217\245B\300\006\240\032x>\364\340sO\035)\303\245=zT\252*d\253\021\212\263\032\325\230\326\254\"\232\235\005N\264\240S\251GZz\323\307J\2202\221\3374g\035\3512\t\346\230H\024\233\250\335\357I\237z\\\373\322\356\245\006\236\246\244SR-J\207\025j\t\007CS.3O$UK\247\000VT\322\365\252SK\326\250J\331\315S\225\360j\0079\025^F\300\252s\266G\025Q\236\243sT\256F\356i\222\250X9\353\212\244\334(\315W\224\014\032\254j9\037\n}\253.\346\353p\"\241\363p\265\013I\232az\354\022J\263\014\265q\030=L\251R\205\315K\034x\253\n\237-G$\031\007\332\253\343\232)\340\324\213OZ\221F*D\353V#\025f1V\342L\325\224Z\235\026\247AS*\346\244\362\3516b\214c\2658\np\024\341\301\344P}\251\244\361M\240\250 \234\323i2(\310\240585=Z\244W\251U\352El\324\361\234T\242o\232\234\322\340\032\313\273\270$\232\241,\265Ji*\244\222U\t\345\303T\006\343\025\004\323dqP\026\371rj\224\357\363qLV\315#\000x\250f\210\273\001\236\007Z\255z\241S\212\315s\225\252\316qUn\030\3545\227(\307Z\205\237\002\242/Lg\256\301N\rX\215\361W \222\264\241;\226\246P\001\251\343\346\254*\322\262qT\'\\\034\016\265\030\007\2759y\372T\312)\343\212\221jd\025b0*\324C5r!VcZ\260\211S*b\247D\251vqI\266\223fM/\227J\022\227m&)\n\232n\337jk\'qLe\033s\236j<\320Z\223u(jpzxz\221d\305L\222\212\23698\315#K\363u\242I\276J\313\271\233\236\265NI*\234\322\325Y%\2523\266MT\227\201\234\325S>\323\203\322\225\344\3711T\244\311$\212\215$&M\264\263\315\261\366\216\265\013\271\343\232\216F\005pk>d\303\022:U9\0178\252\263q\326\263\256OZ\246\347\025\021j\215\232\2735j\235\r\\\267<\326\234\r\300\253\000\324\350\010\253qr)\354x\305g\310\271ri\233M*\255J\242\236\253\315H\253S*\324\361\245Z\211*\334@\325\310\252\302T\351V#\034T\233ivRl\305\033h\305\033h\333F\332\nTl\225\013G\234\342\242\"\231I\234Q\272\223u.\372p\222\244V5<R\340sQ\311>_\255#Jvu\254\351\244\301<\325i%\342\250O5R\226|w\252\257q\223\326\242\222_\227\255g\314\344\032h\234\236*d )\315V_\221\230\323H\347\'\2551\333\212\245;\222x\250\310,\247\326\252N\274V|\355\220k:w\316j\224\207\346\250Y\2522\330\256\3166\2531\265\\\200\340\326\214-\322\256\247&\254\241\342\247C\212s\034)5T\214\2326\212P\224\360\264\365J\231V\246D\251\321*\314kV\243\253q\016\225eV\247D\025*%L\252i\341H\243\024\205A\246\355\305\033iz\322\355\243m!L\324\016\204\036:\325wB\016\rB\303\006\230E5\251\273\2517S\225\252\334X\305$\322m\034U\027\237\347\251\032o\226\251K&I\252w\023`Vl\363f\251O\'\025A\347 \323|\362sQJ\373\205F\277z\247/\205\3050\362*)X\250\252\357\'\030\252\356\016\352\225W\013T\356G&\262g_\230\251\357Y\323\214\022*\224\243\006\253;TL\325\331\304rj\354c\212\267o\326\264c8\305^\205\262\005YS\3058I\212V\237\345\3069\246.M8\n\221\0275(Jz\245J\211S\"\342\246AV#\025f5\253q\n\265\030\251\321jeZ\231V\245\013\3054\257\265!AL(i\010\366\244\344\036\224\340i\303\232\n\324N*\274\313\3115]\327\035j\0228\2460\250\310\305%.\340\242\236\227\033GZ\202k\222\347\212\257\277\232I&\371z\325)n1T\'\271\344\363T\245\234U9g\315S\222L\232a\223\024\335\371\247\240\311\251dC\362\212L\342\240\27095Q\372\322\355\310\247\014\342\252J>bk2\365pr+.a\270\346\251\\\014\032\246\365\003\232\355\241\\\234\325\344 \014U\250[\232\320\210\356\305]\207\212\2348<\003B\276\016EK\2748\347\255>\"\000\301\025 \003\0359\247 \251\200\247*\324\312\265*\255O\032\325\204Z\263\030\253Q\212\263\030\253\010*d\025:/\024\355\264b\220\212M\264\322\264\233h\332)v\320A\2462\373T\016\231\250\036<T\014\225\023-FV\242\221\266\n\204\226sH\347j\340T@\344qLr@\367\252\322\310T\363T.\246\311\254\351\245\343\255S\222CU\336L\016j\264\222\344\346\243\337\223R\'5n\33170\253\206\034\271\317\245V\2256\223T\3465U\2014\344V\003\024\345\004\256\005C,{3\232\313\274\301\315e\272rk6\344\362j\243s\232\202A]\324\021\032\265\034E\215ZH\366\343\232\273\t\332957\33200*E\220\340\037Z\221\036\254F\331\251\222\247SR\250\251PT\250\2252%L\251R\242\373T\350\rX\215sVc\025f1VPT\350*tSN\"\223\024\204SH\244\"\222\212Pii\n\360j6@{T/\036:T\017\025B\361\324\017\035Wh\3135#\247\224\2759\252\3547\nE\213\034\323&^+>\353\245d\\\023\223Y\323\271\031\252\215/5Zyrj\276\372\003d\325\250\252\375\257\336\025\244S\253\037\245Q\270\035k>^sP\221\315;\034dQ\007\315\223\336\241\274<\032\307\270\311\006\250\260\3005\221x0\306\251\023QHx\257DQ\264S\367\355\036\364\251!\315ZI2*\304m\223\315Z\215\227\025:\000OJ\2368\352\302Fjd\210\325\204\204\232\235-\330\366\251\222\335\207j\235b#\265M\032\324\252\2652(\251\321\005Y\215*\302GS\252\221\332\245Nj\300^)i\010\315!\030\246\221LaIE\000\342\235I\232C\3151\2074\306J\205\342\357P\264y=*\'\203\0075V\3423\221Q$9\346\234\352\000\252S\234\n\313\271nk*\355\266\346\262g\223vj\214\255\212\254\304\223M\3159:\325\270\273V\215\262`\203Z|\025\353Y\327\'\004\325\t\0075\0163S\"\322*lb}j\255\3379\254\213\232\2417\025B\3557\214\326\\\243i5\003\362+\320\311\246y\233\232\245V\007\030\2531\032\263\031\2531\366\253q\034U\270\315Z\214\325\250\305Y\214U\270\205YE\366\251\202\003\332\245XA\035)\3020;S\204@\2368\251\02221\320\324\350B\036x\253q`\343\006\254\205\342\200\274\360)\340\221K\272\2274\023M\244\"\230E%\024\233\250\335I\232Jku\244#<TN\273j)\010\306*\244\343\212\213\225\025\034\234\212\317\272l\003YS\234\234\326M\351\313qY\263\r\243\025JE\346\241)Q0\305I\020\253q\016Eh\333rEZ\230\224\000\216\225Rnj\254\221\325v\004\032\232\026\r\305LP2\232\315\273]\254A\254\253\232\316\234pj\233\363\305g^E\264\346\2507\031\256\361\346\3340(\214f\254F\265m>\225j5\346\255F\265f45n(\317\025n(\315]\2123\351V\342\210\325\250\343>\225a\027\025:\216\225*\375)\312\005H\020\032P\n\3644\365s\236EX\216H\317\261\253*\343\03404\345\223\035i\336b\372\323\201\007\275;\002\232h\244\335M$Si\010\3156\212nh\335FsH\033\006\222w\363z\016\225U\227\232\257$e\237\332\221\220\n\255?\265f]\214\346\263&\004f\262\256G\'\326\263\345OZ\251*\324\0148\250\331)cZ\271\n\347\025z\003\203S\264\243\034\364\252\362\020zT}j\t\020f\236\211\261I\3074+aj\205\313n\'5\227rk>a\232\245\"b\252\334G\275k.x\366\223]z\034\325\230\205[\210\n\267\030\025j *\344X\253\221v\253\220\363W\"Z\271\022\325\330\227\212\231W\232\231R\244Q\212\221x\247\001O\031\024\340M8r)@\305H=\252dcS\252\206\352)\342\021\333\212_,\216\206\215\314)7\373P\010&\202\264\306Zg\"\2234\264\323\326\233\272\202\324\224\344p\200\344g5\003u5\031\0315\024\243\212\2437\031\252\027\0039\252\022\256A\342\263.!\316k6\342<\003T\035}j\022\271lP\321\023\332\204\204\203V\342L\n\231\001\006\245\306EU\231\014-\317\3354\003Q1;\263R\031r\017\035j \374\021Tn\233\004\326d\252\\\325YV\253:f\240x\353>\356\014\346\267\342\030\253q\325\230\216*\324mW\"9\253\220\366\253\261\n\271\022\325\350E]\204U\310\370\0252\324\213R\257j\221zS\300\247\205\315H\251\305<\'5 \214b\234\261T\2411R\242\212\224-)\035\2501f\232c>\224\337*\232\312V\231\235\335\251\254\264\322)1\216\224\3265\033\037J\024\022zT\351\016{P\360\342\231\366r\352H\355QI\026\301\232\201\307\031\252s\307\2735JXx\252S\333\221\232\317\236\034\003Y\227\020\3475\2374\030\252\342\334\356\251D<R\210\361\332\234\027\035\251W\255L\244m\250\256Hd\252\3528\024\254\243\025\023\0361Qn\306j\234\377\00005Q\327\002\252J\225U\306\rD\313\305S\2353Z\250j\304mV\2429\253q\n\271\r^\206\256\302j\3645v*\273\025YC\221S\245J\242\245QR\252\361R*sS\"\324\241qJ\026\244\002\244E\251\002\324\212\265 J\236+\1770\212\265\366 \0055\355F8\250M\276;T2C\2361L\026\274\322=\276:\212\206H1\322\242\362\352)\023\025\020^j\3241\003VxE\250\230\356\244Q\203\355QM\036\366<`Uw\207o\025\003\300\016j\254\220\001Tn#\034\326u\324Ca\254Y\223\223T\344L\323L<f\231\267\024\322\270\246\236)\200\344\324\231\342\230\374\212\215W\232R\274Uw\034T\'\241\250LY\036\365^X\261Tf\\f\250\315\305D\016x\250&Z\270\2075f>*\334F\255\304j\344&\256\303W\341\253\320\325\350G5y:\n\261\030\342\246J\231F*T\342\247J\231\005L\213S\004\310\243m<-H\253R\204\315J\211Vb\200\261\025z\030\202\017z\230/\255F\353Q\262qP\264`\232<\241\216\224\206<\212\211\340\007\265D\326\240\347\025NkV\007\245W08=*h\325\224r)\035\213\032thH\251B\361\357@L\347\"\253O\037&\251\312\244UY\006j\214\311\221T.\027*k\036\346.MQh\360h\331\217\245F\321\363QJ\233EVc\315\010\234\323\372\034b\230\353\305G\323\255)pF*\'\035j\000\235\375\351vc<Ui\200\316*\205\314c\232\312\270\\5A\322\243\232\247\210\363V\220\325\270\215[\210\325\330\215^\203\265_\207\265^\206\264!\342\255\307\332\254!\251\320\324\351\315J\243\232\235G\025<B\254*\361\236\325*t\247\005\315=R\244T\251\243\210\261\000U\350,\330\365\025u \013\300\251\026#\232q\212\230\351Q:\361P\221\203I\232F\250\316I\244\0242\206\250\214#\322\232\320f\243kp)\2416\323OZa|S\034\206\353\326\253J\242\251\313\037\025B\340c5\2378\3105\233q\036sT\236\016i\246\034\n\215\243\305W\235;U\177\'\236\224\361\026*7\\S\033$TL\224\300\2314\346\217#\336\230\261eM\006>\243\275T\236-\2475\237q\320\212\312\236>j\273\246*\264\274\324\261\032\265\021\351W\"=*\344Uv\021W\340\035+B\036*\354,\005]\212AVRQVR\\\324\350\365<njtsV\021\252x\316j\314f\247\000\036\203\212r\212\225\0075a\0235\245cl\016I\037J\270\340F\271\024\220\363\315ZA\232s(\306j\244\307\232\205\2335\013\232`\351Q\263b\233\277\236\264\315\374\232z\267\024n\244\335\336\242i)\243\004T.\274\361Q=D\334\324\017\232\253+\366\252\027\025BB9\252\262\340\325V\000\232\215\3005\013\245@b\311\311\250\331\000\250\235qQ0\315F\334\212c/\024\320\234\324\210\233\273Pb\332=\2526\\\034\324S\333\371\200\342\262n *NEf\\&\t\252R-B\361\346\231\025Y\214\325\330NqWa\311\351W\340RqW\340\\c&\256G\326\255\306\3358\2531\265Y\214\325\230\332\255F\371\253\021\232\263\035YJ\235*\314dq\236\225:\310\0008\024\370\311\317Z\271o\036\343\232\321\206\005\034\221WS\n8\247:\356QND\332)\376f(ir*\264\255\326\240\'5\033f\230O\025\023w\246\023\212\211\211\006\236\217N-L-M\004n\346\244b\255\320ST\001PN\240\347\025M\306*\007\006\253J*\234\353\234\325\031c\305S\232#\332\252:\221Q\363J@\"\242a\232\202E\301\250\031sP\272\363\201H#\3074\326J\210.MX\211v\216G4\256\242\242d\3108\355Q\343)\356+:\351wg5\221<<\232\251$\0315^HqT\2435n%\315^\202>\225\243\002\216:\325\330\206:\n\267\035Z\216\254\306\325f3Vb5j3Vc\253QU\250\352\302\n\262\202\245\251\020\032\235\026\264\254\262@\317j\321\007\006\246\214\346\254\306Aa\355R\270\030\342\240aL<T\017\311\246\205\024\327\025\013\212a\031\250\330Tl3Q\234\255\014\374TFS\232z\266i\333\261F\352\216C\221U\237\212\202CU\245\3475VE\315U\221*\254\221\346\252\311\016j\006\203\006\230c\250\3311P\272f\240e\342\242\362\262i\306<\n\206D\300\246\307\037\255LW\002\231\267u\033\006q\336\253\315\031Q\221Tf\217x&\250\315\005Tx;\325ya\366\2548G5z\025\253\360\n\277\027n\365e\032\254\244\200T\361\311VcsV\242j\267\021\315Z\213\234U\310\205\\\211j\334IV\243Z\235EJ\213\232\235\022\246E\305iY\'\313\236\325p)\251\200#\024\365%[4\377\0004\322\356\310\246=@\375i\244\323j6\250\351\030TL\005F\342\243n\225\003\002)\003b\236\257\232~\354\212\215\332\240z\257!\"\253\271\315@\342\240\220f\253\262\365\252\356\274\324f,\323\0145\014\220\361U\344\210\366\250L4\242\034\014\324o\035W\222<\232\025)\2547\034t\245\n{\nk\304B\356\250\316YH\305Pt\303\032\205\300n\242\253I\020\002\251M\0315\315@\247\255]\204\036*\3649\030\253q\261\372T\350y\2531\373\325\250\315Z\210\325\270\252\344C5v\025\253\260\255]\205j\344IVQ*eJ\231\022\254\"U\210\342\315hZ\241E\031\253j@\251\001\3159\223\345\250\263N\335\212k>j2y\246\232\026\243\225qU\331\2151\244\305D\317\232M\304\212k\034\n\210\363Q\260\244\034T\200\366\241\206j\027\030\252\262\234\325s\326\243qP\260\250\235r*\273\'4\242,\322yx\250\246\210v\252\257\025Dc\2464x\250Yq\232\201\327&\230F*23N\217\255:E,\244\016\225\023(\331\323\232\243*rj\263\240\252\263\014\n\243) \327=\004y\306j\344K\201VR\254FsV#\253Q\325\230\352\334@\325\330V\257B\265z\025\351W\242\214\325\350c\253\320\307Wm\355\214\207\000sV\227O}\273\261\3054DV\246\215*\324+\202+B,m\306)TsS\306\274\322\316\301V\252o\346\227}5\236\232M &\224\023\232q\301\025\023F\rA$5\001\210\320#\246J\270\250\266\363H\313\305 JpJ\n\324\022\212\254\353\232\201\226\242aP\270\250\310\3151\323\2759\027\212k.\rF\351\232\253$}j#\036\005F\313\305@\361\324\014\225\023%F\321\320\243\006\236\352v\344Tl7Fj\214\211\315@\351T\347CTe\2175\316\304\274U\244\251\320U\230\305Z\214U\230\226\256D\225r$\351W\241N\225z\030\363\212\320\202.\225~\030\352\374\021U\350\243\253\266\361\266x\025\253bwe\037\246*\013\250\224>\027\2455#\251UqV`\0370\253[0\325\"/5\005\331\311\305T`E\007\2323\212\001\315.\354R\007\247\006\315)\031\246\224\3154\3061Q2c\265A*f\243\t\212B\224\2339\251R-\302\207\217\002\253I\035Wx\352\274\221\342\253:\221P\270\250\2623N\333\225\241W\024:\324%qQ\224\034\324\016\225\003\255D\351\221PI\035B\311Q\262SJc\232Uc\223\216\206\223\313 \032\243*\362j\274\213\201Ud\\\325Ya\256a\027\212\231\005XA\212\261\030\253q.j\334IW\240\2175v\030\372U\370\"\351Z0EW\341\212\257\303\025\\\2111W`NEk\306\321\305\020\332>jH\344*\305\207ZR7}h\306)A\305K\013\374\302\264@\310\006\246E\3435Zd\005\252&\210b\2421\342\230W\024\323\322\230x\243<R\203R\241\251\002\003G\227\315\r\0105ZX}\252\023\026)\214\224\322\2705b\025\364\244\225\000\252\256\225Y\327\223P\272\346\253\274|\364\250d\207\"\252\264<\321\215\242\200\300\032S\206\250\231i\205*\027^j\t\023\232\211\227\212\205\326\242x\352\006CM\332H\305\"C\264\340S\244\033\024\344\326{\216I5VNj\035\2314I\006\361\\J\221\305L\200\232\263\032\325\250\226\256D\265r\024\255\010\022\257B\231\255\010#\351Z0G\322\264a\216\256F\225j1V\242\025iML\225(\300\024\204\322u\253\026\361\234\346\264#<sR\356\342\243h\367sLh\361Q:T.\270\250\210\246\221F8\246\205\346\254F\243\025 \342\244\373\300R\201\223L\222 j\007\213\025\013\305P\262b\244\210b\225\327\"\253\312\265U\326\242)\232O\'4\215jXt\252\323\332l\\\221Td\\\032\213nh\013\212\010\315&\336*\t\027\232\205\3075\013-F\311\236\325\023\257\025\013&i\205q@\343\232\255p\305\2115U\324\232\256\351LX\371\247\272mZ\340#J\263\032\325\230\226\255\304\265n%\253\260\255^\205kB\005\255+t\351ZP%hB\225j4\251\320b\254#b\247V\251\025\352O2\223}>6\347\232\321\203\224\030\253\261\307\362\203O\362\301\247\210\370\246I\037\025]\327\025\013\255@\343\025\013\032g\231\212@\374\324\350\374T\212\331\251\307JQ\326\237\267\"\230S\232k\303\306j\273\303\232\0048\355Lu\305@\351U\235*!\0375<1naWV\004\nF*\245\375\250\021\203\212\347\247\213\014j\r\230\243\034\320S4\335\270\250\244^j\274\211Q\024\246\025\305D\353\315D\311Lh\267\n\207i\\\346\253\310\274\324.\234UvL\322l\301\024\331\311\333\322\2708\326\254F\225j5\253Q%\\\211*\344IW\240^\225\241n\275+R\335:V\225\272t\253\361/\025`\014\npj\221Z\246V\251\224\346\244\024\241I\251\021\ri\331\203\214\032\323\211r)\342,\032\224\307\201PH*\273)\346\2538\250\035MD\361T&>i6\342\234\032\246\214\325\204jx=*d\"\234\024\023S\254*\313\212\202K`\246\242h\270\342\253I\0275\004\253\201U\\d\323\002\202j\314q\343\245I\222\005E;\371\211\264\3265\324\0305BU\305C\212\226%\315$\221\343\232\254\342\241qQ\025\2441dT2GQl\241\227j\3259:\324%*\031\026\242\362\311\355\223J  \344\216j\265\301\3005\303F\225j4\253Q\307V\243J\267\022U\310c\253\360G\322\264 \217\245i[\2461Z0\214U\270\316*PsJ\rJ\200\232\235\026\254 \251Tf\247H\372U\230\340\253pb3V\322M\2475v9C\257\275+\214\324L\225\023\307U\244\217\025Y\327\232\210\256i\014\\TM\0350\256\332P\370\247\t\200\247\t\375\352xe\335V\3435`8\244f\004S\n\361\232\2551P=\352\224\203q5^H\352\014m5b\027\251_\025\013\216*\205\322\203Y\223\2463Uq\315O\025,\203\"\252\272T\016\230\250\310\031\246\362)\214\271\250\335)\222\017\224\325\027NMD\302\2431\367\247A\021/\2228\024\223\234f\262/\017&\271\030\343\253q\307Vc\216\255D\225n(\352\354Q\325\350c\255\010\023\245_\204c\025r#V\223\232\231V\244T\251\221jd\253\010*x\3235n\030\371\025u\"\300\246I\362\232\221$\014\005Y\204\221W\003ei\303\024\216\231\025VHI\252\262C\212\210\305\315)\217\212\215\242\252\322\245Wc\212g&\200H\251\242\224\255[\212\344\325\204\234c\255#\\\320n2:\324,\333\252#\336\241\220T,\224\370\306\rJ\303\"\253\311T\346\2523.j\233\246\r:.\264\347n\325\013s\315E\"\361U\312\322\025\246\204\311\246\310\240T\017\367j\243\2554G\232>\316[\223\322\225\300Q\305P\270<\232\312\272\3475\315\307\035Z\215*\314q\325\270\243\253qGW\"\216\256\304\265v\025\253\221)\253\221\n\271\022\325\204J\235#\251\226*\221b\305L\213V\"\025r\034\n\270\235)\257\021jjZ9\345A\342\254\301\033\257QW\021x\245\034\032V4\3020:T\022&\356\324\317\'\332\203nj)\"\305T\226\022{UW\203\232g\227\212aA\232zGO\306\332]\370\024\320\345\215;q\245\004\232p\031\244d\315Fc\366\244\331R\252\374\265ZU\301\252\262\2409\252\215\0375Rd\301\250\033\216\225\03350>x\244c\232\214\2574\306\030\244\003&\243\225N3U\034f\243a\3055T\361R\221\300\250&\\\212\317\235z\326e\312pk\0068\352\314q\325\270\243\366\253qEW\"\213\245[\212*\267\024Ur(\352\344Q\325\270\242\253\260\307V\222:\263\034u2\240\247m\024\0059\251\343Z\265\020\253\326\343,\005jG\024HG\2329>\224Ks\0349X\200\301\247\333J\222\215\254\243\'\245+\305\260\220E0*\347\255J\226\373\251^\305\207A\3050Y7qN\026\'\322\221\255qU\345\266\036\225VX8\351T\345\267\366\252\222@Gj\207\313\"\235\214\nc57w\024\320qJ\037\232\23004\360x\247\250\240\257\2555\224\na<UiMV\220Uy\005A\"dU\031\327m@y\025\033.)\024\342\234\016\323M\220\206\034R*qQM\351U\212d\323\014D\366\243\313\305\016\265^AT\346\\\326u\304<\032\301\211A\025n(\252\334Q{U\310\242\253\260\303W\"\206\255\305\r[\212\032\267\0145v(3W\"\202\254\254\\T\252\230\251B\323\202S\326>jt\216\247H\361V\"\005Nj\300b\375ML\260\344\003\232\236(0A\025snW\r\311\365\252\262BA\342\256Y\302\315\301\342\265a\2678\033\260jf\264A\332\242\222\327\035\005T\222\337\332\253Kl\007j\250\366\303\322\253Km\355U$\200zUg\267\317j\257,\033j\244\211Q\020i\2704\241NjdZ\235R\236\006\r5\316*=\324\323P\3123U\335j\273/4\307N*\234\361dU6\217\024\306\346\233\266\232A\241c4\366]\213U\\d\324{9\315?\003\030\3051\327\333\212\211\326\253H\271\252\262\246*\235\302\022+\002\030\261Wa\2175v(j\344Q{U\310b\253\221EWb\212\256E\r\\\212\n\273\014\025n8ju\204\267AO6\345z\212r\305N\331\212UZ\261\032U\204J\235#\251V<T\250\010\2531I\212\224\311\350z\320\030\016MX\267\230\036\007Z\270\222g\275O\034\356\247\332\256+\254\253\310\346\241\226\005\365\252\222\333\346\253<\003\035*\254\326\346\250\313\t\007\245B\320\373Uy`\3105Bx0zUW\213\006\231\262\236\221\346\247H\252B1I\263uD\351\212\205\206)\233\351\254sQ\262dUgB\246\242\366\250dPj\264\320\361\232\252\321\340\320S\"\230\027\232\225Pc5\034\252_8\355U\374\274\232x\203\214\322:\n\211\223\216*\007^MU\225qUe<UINA\254x\242\366\253\220\305W\341\212\256E\025\\\212\032\273\0245v\030}\252\3640{U\330\240\351V\342\207\025e\"\366\251\243]\2548\251g-#\014\214b\231\266\220\246i\311\035XE\253P\307\270\325\330\355\263V\340\262V\373\304\nl\266\241[\003\245D\321\354\245V\000S$\220\221\212\201.L2\002zV\225\275\350|sW#\274_Z\261\036\240\212y5an\343\233\2750\220r*6\\\3242G\232\255$\000\366\252\362[\016\325VX=\253>\346\014v\254\351\223\006\253\221\315=3Vc\007\024\342\264\322q\332\243\220\223PI\232\200\212A\326\247H\303\n\206{|\003\305P\2316\346\253\263\001Q\263\202*\254\230\025\036\341M\030\316jBA\000\n\225\341\002>:\324V\361\002\016{S%;x\035*\273\036*3\322\242qU\245\\V}\300\301\252R6\rT\202>\325z(\252\3641U\350a\253\260\301W\241\203\245^\206\017j\273\0245n8\252\324qU\224\213\212\225\"\303\002EXh\004\213\223\301\250V\337\232q\267\3057\312\305H\261\325\250S\025z6\300\251\323s\036*R\017z\215\342,=\251\277c$t\246KhS\255W{\\\216\224\301\026\316\224\276a\035\315><\261\344\325\373gT u5tJ\r/\233\315!|\212\215\230TN\001\035*\254\213T\356#\r\332\250\265\201\225\250\032H\006\206\323\366\364\024\323o\266\230a4\326\207\025\013GQI\017\025VE\301\250X\355\246\264\344\000A\245mDm\303b\262\257\257W\007\007\232\307\233QnEW\373{\223\326\217\2653w\253\020\266\376\365`BH\240\002\247\232\233vF)\3100\325\014\311\315U\221qP1\250]\261U\345z\245q\212\315\230\363N\267\217 qZ0\307\232\275\0145z\030zU\370a\366\253\320\301\322\257E\017\265\\\212\032\267\024\036\325j8=\252\324p\324\353o\237\245;\310\305\006 \242\231\260\236\324y\024\341\016;T\210\270\251\323\025n\027\013VW\347\035*)\"`iV9\010\366\242K\031vn\0075\002\333H\307\232\235l\262>aQI\246\340\344t\246\013<\037J\236;`\247\203V\026\006\3052H\212\212\213\004t&\2170\216\2434y\353\350i\246D=qQ\262\307\327\"\232\002\036\206\220\240\250\331\001\252\362@\t\250\374\237j\215\343\366\250\014\0315Z\350yB\263\234\344\364\250%\340V}\314\373\001\346\262no\260O5\235-\303\312p*\007\215\310\316*\214\322\264MDW\2315\243mq\310\346\265 \270\310\305<\276M\000\212\224)\312\236\324\351Tb\251\312:\325Y\024\212\251!\305U\221\252\234\315Y\363\003\232\267n\230\305i\300\235+J\010\263\212\277\014=8\253\360\303\355W\341\206\256\303\007J\273\0245n(j\324p\325\210\340\315N\260\363\212\224A\221M6\371\355J-=\251~\317\212g\221\232i\200\366\245X\rX\212\"*\314@\251\253\237)^@\252s\273\016\235*8\256\335\0163\305Z\213\347 \346\257\242\002\007\024\343\002\267j\202[%=*\017\262\025<T\211\023}(\221@\3523P\264@\366\250\036,t\250\232#Q4u\023GL)\212o\314;\232Uc\236i\305i\nf\243xr\016\005E\034`\267\314+3T\\H@\355Yn9\250f\031J\304\276V\346\261e\201\345n\001\255\r?J$\202\302\264\233FB\277t\346\271\375[D*\305\224\037\245s\322\332</\323\212\261\014\205@\255\033[\216@\315_G\335OS\223W\341]\310)\322BXf\252\274X\252\263\'\025\233p\270\315P\227\"\252Hj\244\325\241n\235+N\335:V\245\272\003Zv\361V\2040\372U\370a\366\253\321C\355W!\206\256E\016*\314p\347\265XHN*t\200\n\225a\315<[\346\245kr\253\234T&\003\214\221\212\022\001\212\036 \007\002\230\212\007\\Ps\236:S\205I\0319\301\242xs\315W[p[\223\212\277ol\251\374Y5m\006)\347\2450\344\367\244 z\324e\260x\246\222I\351Q\270>\225]\201\3154\220i\257\016j\273\304@\250\212\323\n\324\253\000\3056H\312Ty\243u <\325k\273\025\2343c\346\254\013\210<\246 \326u\313\355\006\251\224\022\347\201O\265\260I\033\356\367\255\213]9P\014\n\270lT\257J\316\277\322VE<s\\\216\265\243\030\325\230\n\304[\023\267$\021L\216\026I=\253z\307N{\224\312\236i\362\330\311n~aVt\366\371\302\236\365zX\212\347\320\3259R\251\316\231\025\231q\037Z\316\2351\232\317\227\202j\224\307\255l\333\247J\323\267J\323\267N\225\251l\275+N\005\034b\264`\217\245hC\035\\\212/J\273\024\036\325e!\251\322*\231!\'\265N\220z\212\231a\031\036\224\347UQ\301\250\035\001\250\212`Sv\2029\246\030\262h1c\2650\214R\031\n\363Q\265\303\023\357L\334\304\344\232\265h\3377\'\351Z\221\003\212yPi\n(\353PH\200\237\224\324a\010\247\034\001Lf\030\250\037\035\252\027S\236)\231\"\243\221\313pzTG\203M\"\254\304\240\201M\2352x\252\345)\273\001\247\010h1\355RH\254\035J1+\235\242\262&\262<\344UAj\310\304\3665r\312\334\253f\266\355\342\340f\246+\201\357PI\030n\010\254\313\3355g\004b\263\016\206\212\245v\214VM\316\204#\223**\355\205\234\220\214\201\322\247\234\t\024\207^k;\3101L\010\351\232\320g,\2035R`*\224\3035\237:u\254\313\224\306x\254\273\201\214\326l\355\326\272;t\351ZV\353ZV\353\322\264\355\326\264\355\327\245i@+B\004\3163Z\020\247J\277\014y\253q\305\355V\022\020{U\230\341\036\2258\200\n\0320\017\024\306\217\216\225\031\216\242h\271\351Q\274x5\031S\232\010&\230\311\305B\321\346\233\345S\2049\253\020A\206\025\242\213\322\236\0234\331\027\002\253\225\346\224\364\353U\345p\017\035j=\244\321\261\215\006\023\216\225\024\221\365\252\254\2074\306\\Sq\232\232\020I\305:Q\203\212f\314\323\226\021K\345\343\250\244\221C\256+:\342\325\024\223Y7\210\t\342\241KA!\2531\330\355#\0258]\264\354R\025\342\242x\301\250Z\034\324\rb\256rE\037fT\\\001T\256\254w\253\021\326\262L\'v\010\344T\245p\270\250%\034r*\214\311\216\235*\234\311\305f\335G\301\254k\265\353Y3\257Z\352`^\225\245n\235+J\335s\212\323\267N\225\243n\275+F\005\351Z0\n\320\207\265_\204U\350V\256F\225:%J\253\305\014\271\246\024\250\312sM\331\223Lx\201\250\032,\032o\225Mhx\250X`\323\243\217y\251\214A\005:-\271\253\nFi\373\300\246I*\036\365\004\223\"\3645U\356\027\326\243\022\253\032\221gU\355N\373W\240\246\233\2064\306\311\352*2\202\230\320\026\357P\264e\r\021Hc|\324\314C\234\320\000\247\002\0075^[\241\234\nh\270\004`\325;\267\315eJ\204\232\265g\007\025x\3006\324M\020QQ\025\301\246\361\322\230z\322`S\031j6\025\003\014\036*\235\325\220\'z\212\250\320\340c\025Rh\372\3259c\252SG\326\250\\\306\0105\215y\017Z\307\270\213\232\351\255\327\030\255;t\316+N\335zV\214\tZ0\001\305h\300\265v\036\265~\001\310\255(EhB\275*\344C\245YU\247\205\305\005i\205i<\274\3224U\033.)\276P4\326\207\025\023\214qP\233}\3074\306_/\245V\232g=\3524\272e8\"\247k\345\211s\234\232\255.\252O@sQ.\244\375\3052[\3170t\246\304\301\271&\254+\014R\0319\247+\346\246N\225:\256E1\343\301\245X\363\212t\260.\334\232\315\234(o\226\231\347m\352qMk\260;\212\201\3577p\rG\2774\253\232VB\303\221I\3660\303\246*h\340\362\307\025&\334\323Y\0075^E^\325]\370\250\035\216x\351H\036\2279\250\330Tdu\250\332\240\226\020\3035B\342\0029\025BX\272\325)S\326\250\317\027Z\312\272\2039\342\262\'\267\311<W\377\331"
+byte_png: "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\002\000\000\000\002\000\010\000\000\000\000\321\023\213&\000\000\001JIDATx^\355\335!\016\300 \020EA\262\367\277rI\253*\276C4\024\230\221\317b\226d\t\255\001\000\000\000\000\000\000\000\000\000\000\000\254\2552\000\000\000\000\000\000\000\000\000\000\000\234\315\2325\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\\031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030S\031\000\000\000\000\000\000\000\000\200_\260\333\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\323\371F\004\000\000\000\000\000\000\000\000\000\000\000\000\340\345\311\025\000\0000\203\273\010\3004=\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\313\250\014\000\000\354\313\360w0\207\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\360\251\312\260\271\236\001\000\000\000\0367\231\251\003\020\030\305\203\234\000\000\000\000IEND\256B`\202"
diff --git a/core/res/geoid_height_map_assets/tile-3.textpb b/core/res/geoid_height_map_assets/tile-3.textpb
index c147825..9abaaaa 100644
--- a/core/res/geoid_height_map_assets/tile-3.textpb
+++ b/core/res/geoid_height_map_assets/tile-3.textpb
@@ -1,3 +1,3 @@
 tile_key: "3"
-byte_jpeg: "\377\330\377\340\000\020JFIF\000\001\002\000\000\001\000\001\000\000\377\333\000C\000\004\003\003\003\003\002\004\003\003\003\004\004\004\004\005\t\006\005\005\005\005\013\010\010\007\t\r\014\016\016\r\014\r\r\017\020\025\022\017\020\024\020\r\r\022\031\022\024\026\026\027\030\027\016\022\032\034\032\027\033\025\027\027\027\377\300\000\013\010\002\000\002\000\001\001\021\000\377\304\000\037\000\000\001\005\001\001\001\001\001\001\000\000\000\000\000\000\000\000\001\002\003\004\005\006\007\010\t\n\013\377\304\000\265\020\000\002\001\003\003\002\004\003\005\005\004\004\000\000\001}\001\002\003\000\004\021\005\022!1A\006\023Qa\007\"q\0242\201\221\241\010#B\261\301\025R\321\360$3br\202\t\n\026\027\030\031\032%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\203\204\205\206\207\210\211\212\222\223\224\225\226\227\230\231\232\242\243\244\245\246\247\250\251\252\262\263\264\265\266\267\270\271\272\302\303\304\305\306\307\310\311\312\322\323\324\325\326\327\330\331\332\341\342\343\344\345\346\347\350\351\352\361\362\363\364\365\366\367\370\371\372\377\332\000\010\001\001\000\000?\000\367>\235(\335\317Zz\311\212\231d\2517\347\2751\316qP\261\250\330\324L\324\302\324\302\324\233\251\271\2434f\214\322\023M&\232Z\230^\220\2650\2650\2654\265F\315Q\261\250\213Tl\325\0235D\315Q3TL\325\0235D\315P\263T\014\325\013\275Wv\250\035\352\007z\201\236\240w\250]\352\006z\205\232\241f\250Y\2522\324\302\324\322\324\231\244-I\2323J\r.i\300\322\203O\006\236\r<\032\2324-W`\207=\005j[\300\027\006\275\334\2750\275(z\221d\251VOzs8\332>\264\307<\324Lj&5\tjijB\324\233\251s\357I\2327Q\232a4\302\324\302\324\315\364\205\251\205\251\205\251\205\251\214\325\013\032\211\236\243f\250\231\252&j\211\232\242f\250Y\352\026j\201\236\240w\250\035\352\273\275@\357U\331\352\026z\205\336\240w\250Y\370\250Y\2526j\214\2650\265!jB\324\233\275\350\335\357F}\351sK\272\234\r8\032x4\360jh\320\261\366\253\360\307\320b\264`\214\001\315^\213\257\025\354\276g\024\323%\001\352E\222\244\022{\323\304\231\025!`?*\215\273\324,y\250\030\363M&\2234\231\245\335Fi3HZ\232Z\243f\250\313S\013Ro\246\226\2463Tl\325\033=F\317Q3\324E\3526j\205\236\242g\250Y\352\026z\201\336\241w\252\356\365\003\275Ww\250\035\352\007z\205\236\241g\250\035\352\026j\215\233\232\214\2650\2650\265&\352Bi7P\032\215\324\273\251CS\201\247\203R\256jx\243,\325z(\272\014V\2041m\031\"\255\'Z\275\002\2168\257U\022{\321\346R\357\247\t)\342Ozz\311\357S,\231\247n\004~\025\023\324\014j<\321\2322)i3HZ\230Z\230Z\243f\250\313S\013R\026\244\335\221Lf\250\231\352&z\211\236\242g\250\231\352&\222\242i*&z\205\236\241w\250\035\352\007z\201\236\240w\250\035\352\273=@\357P\263\324,\365\013=D\315L-L&\230Z\230M&\354SK\323w\322n4\340I\251\002\223R\254f\244X\215L\220\237J\260\220\037J\271\014\030\034\212\273\014`\021V\366p1SE\0375\241\nb\275\024I\2327\347\275\'\231\216\246\234%\247\211=\351\313%L\222\373\324\353 8\311\244f\343\336\241cQ1\346\215\324\271\2434\204\323\013S\013S\013Tl\325\031jajn\352\003sLsP3\324,\365\023=D\317Q3\324L\365\013IQ4\225\013=B\317P<\225\013\275@\357P;\325wz\201\336\240w\250Y\352\026z\211\236\243-M/Q4\224\303\'\2753~{\320\r8)jx\205\261\322\224D{\212\225!>\225a!\035\352\302D\276\225a!^\302\247HG\245J\261\201\332\245A\315Y\211rE_\216<\212\265\0245r8\253\256YjA\'\275!z\003\323\204\224\361%J\262qS\244\276\365/\230\n\363Q\226\342\243c\3153u(zv\372ijajaj\214\265FZ\230Z\230Z\232Z\223~\r5\236\253\310\3309\252\354\365\023=D\317Q3\324,\365\013=B\317Q3\324,\365\003=B\357P;\324\016\365\003=@\317P\263\324,\365\013=D\316\005F\322\014u\250\213\222z\323K\344\360)\2474\000I\305Y\216\036\346\255\244\\p*_+\326\223f;S\302\n\225\02352&:\325\224Q\212\231G\024w\251\220U\310S\232\321\205*\354iV\343J\332V\367\247\253\340\323\367\323K\340\321\346S\326L\324\312\365*\311R\tx\247\007\033i\254x\250\313a\261@z7\322\027\246\227\246\026\250\313S\013Tl\324\302\324\322\324\302\364\326~*\027z\254\355\203P\263\324L\365\013=D\317P\263\324,\365\013\275B\317P\263\324\016\365\003\275@\357P\263\324,\365\0135B\357\201P4\237\205@\\\036\246\232Z\214T\213\036FM)@\005*(\335V\324\000\225n!\362\212\227\034R\004\317jp\217\332\236\213\265\272qS\205\335\322\246U\307\025*\255\001~j\261\032U\330W\025\241\0168\253\321(5m\026\256\206 sN\363)\302\\w\246\264\264\321\'5\"\311\357S,\225 \226\234%\251R^\324\375\371\034\364\250\334\374\324\315\364o\244/HZ\230Z\230^\230Z\243-L-L-L/Q\263\324,\365\003\276j\026z\205\236\242g\250Y\352\007z\205\236\242g\250Y\352\006z\205\336\240w\250\031\352\026z\211\232\241w\300\252\356\304\362j\027l\364\250\371\3158\nr\34358a\267\2550\276M*\036j\310<\001W`9\214T\340d\324\201i\341i\3733RD\270n\225g\313\357N\013\355OT9\351S\306\225n8\311\350*\334Q\277\241\253\360#\367\025~4=\352q\351Q\267\025\031\223\236\264\236e\002Jp\223\336\245YjA\'\2758KOY\275\352u\224\025\306h-\317ZilSw\321\272\220\2754\2750\275F^\230Z\243-M/Q\263\324,\365\013IP\263\324.\374T-%D\317Q\263\325wz\201\236\241g\250Y\352\026z\205\336\240f\250Y\352\"\325\0335Wrwgw\341Q9\'\251\250\215.\0062i)E<\036(\035jT\034\325\265L\246j\354\t\373\261VUjP\234S\202\232\235\"\251V,v\251BT\253\02052\302OAV\340\264f=+F+eA\310\251\324 \350*\304]zU\330\2235\022\237Jc\037\326\2531\3014\335\364n\245\335NW\251VJ~\372p\223\336\244Yy\251\004\231#\007\2458\276x\246\261\305&\372B\364\322\364\302\365\033=0\275F^\230^\243g\250\036J\205\244\250ZJ\205\344\250^J\205\244\301\353M2f\241\221\252\273\275@\317P\263\324,\365\01351\201#\223\212\205\266z\232\211\266\212\215\231GAQ\2221P7&\232E\030#\212LR\216\224\341\326\244QS\305\031f\000U\365\213\345\n*\344q\355\000U\204J\224-J\221\367\305N\211S,y\251\004^\325b\030\t=*\364V\3309\"\257\307\032*qC\002\306\237\034^\265n(\371\351W\341\210\2228\254\264l\216\264;\201\305V\224\363\326\241\337@pi\341\251CS\303S\303\322\357\367\245\022c\275H\262\343\232\224I\232w\231\3074\335\334\365\246\226\301\246\227\246\027\250\331\3522\365\031z\215\244\250\232J\201\344\250\032Oz\205\244\367\250ZOz\211\344\250\232Oz\217\314\346\230\362\002*\273\267\275B\355\357P3\014\375\352\214\225\317,M1\235{T.\344\367\250Y\251\205\252&4\322s\3054\323H\315\030\346\202))\312*tRN+B\332\036kE!\300\034U\205\216\244\013\212\225\0235a#\251\202T\311\037\025:\307\223V\342P\200U\225\313T\300ai\312\244\232\267\014E\210\300\255(,\316\001j\322\206\331Gj\343b\224\355\247\261\312\3475ZV\371A\252\345\350\017\316\rH\036\236\032\234\032\234\032\227}.\352]\370\247\254\230\251\004\264\246@E4\271\034\365\024\306zaz\214\275F\317Q\264\225\013IP\274\236\365\003I\357P<\236\365\013K\357P\264\225\023I\357Q4\236\364\303\'\275F\363\n\256\363sP\274\265\013I\351L\363)\205\3526z\210\2674\247\356\324$\363I\232\\PzSh\240-H\243<U\310\"\316+N\024\300\034U\344\031\002\247Q\3058)&\254\305\030\025ac\'\265L!\307&\245H\371\253Q\3066\364\251\243\207-\232\264\221{U\204\267-\326\255\307j\275\352\3541*t\025z\030\311\253\321\307^k\024\2318\315Z\007\345\252\356~V\025M\233\006\220==^\246\017N\337N\017\305\033\371\245\017N\rJ\033\024\273\350\337\357K\346\3664\322\370\350sL/Q\264\225\023IQ4\225\003\311\357P<\236\365\003\311\357P\264\276\365\013\311P\264\225\023IQ\264\236\365\031|\232\205\337\035\352\003\'\275B\362d\324e\351\206J\214\311M2Sw\322\231x\3053>\264\264\340h\353K\2126\320\027&\254E\0375\243o\027\025u\027\025j%\343\232\260\027\003\245K\034lM^\206\016*\322\307\212\220GR\244\'=*\322G\201V\"\213\236\225u!\366\2531\303\355Vc\200\347\245]\212\000\0075r4Q\300\025n$\357^I\t\357W\021\262*9N\t\036\265\235+a\351\201\351\341\352E\222\246R[\245)b\247\006\223}(zpzv\3727\321\276\220\311M2S\014\225\023I\357Q<\265\013KP<\236\365\003\313\357P4\274\324-%D\322{\324M%B\322{\324fJM\376\365\014\257\232\256\317P\263\363Q\227\246\027\246\027\246\027\244\337K\272\236\270=\351s\3159i\342\235\364\037\215\001K\032\231c\300\251\242\034\326\225\270\351WUrj\324Q\364\253\211\026{U\210\342\031\253*\010\342\254\306\271\025j8A\031\251\204c\260\251\222.j\3240\367\305]\216?j\267\024G\322\255$x\025*\251&\255\305\025\\D\257\027\212@\006*\322II#du\254\373\203\363f\240\335N\017N\017\203Wm.\021\037/\310\245\273\2366|\247\025]d=\352E\223\212v\356x\243}/\231\357H^\232d\246\231)\215\'\025\013KP\264\265\003\313\357P\274\276\365]\345\367\250^_z\205\245\250\232_z\211\244\367\250\232Z\210\311J$\250\344\222\253;\324E\371\353L/L/M-M\335I\272\200\324\360\325 4\3655*\344\364\247\201\306\007J\236%\343\221R\225\342\204\030<U\353v\350+R\001\272\264\"Z\266\213\305H\243\006\254\304\205\2175v(\272qWR<-J\261\363\322\254\307\017\265[\216!\351W\"\210zU\330\341\343\245L\"\251R.zU\270\343\253I\037\265|\376&\035\215X\206\343<f\247\3633U\2479S\355T\313P\036\236\036\227\314\3474\206BOZ\270\2775\226q\206\035\352\024\227\234T\276e\'\231\357K\277\336\220\311M2S\014\225\023\311P<\276\365\003\313\357P\264\336\365\003\315P<\276\365\013KP\264\276\365\021\227\336\243i}\352&\222\230d\243\314\250\344~\371\250Y\352\"\374\323\013\323w\321\272\2234\322\324\006\247\253T\252y\251\323\006\254\242\022=\005.\3346*\314`b\237\216)\350\225j$\305h\333\261\004V\244\'\200j\330\347\221S\"n5\241\004G\003\212\321\206.3VV:\2328\262zU\264\207\034U\270\240\351\305ZH\260zU\310\22358\216\246\216*\260\251VbN+\346T\2347CV\"\227\r\326\256\307.\345\353M\221\271\252rp\334S\003sN\rN\337I\273\0075e.I\217f@\024\301\265O\336\353K\346`\3434\031W\336\227\315\030\340\232O3\336\232\322TM/\275B\362\325w\233\336\241i\275\352\007\227\336\240y}\352\006\227\336\241i}\352&\227\336\242i}\352#/\2754\312\r4\311@\222\233$\231\\Ur\376\364\322\324\322\324\322\324n\247f\230M 5*\232\231\rY\214\325\245\177\227\024\3602sS \253\010\231\251\322:\265\032v\025n8\361W\355\317!Mi$y\351W!\214zV\214\0108\253\321\250\307\025f8\363W#\213\320U\250\341\307j\275\014=2*\301\204m\006\237\032\342\254\252U\210\322\247H\362j\324q`W\311q\276\323\305\\\216PqV\341\220\347\255N\347\345\025^n*\002\334\321\276\234\036\202\334Sw\363\326\246NS\223M\337\212<\317zo\233\216\364\276w\035i\215/\275D\322\373\324\0177\275Vy\271\353P\274\336\365\003\315\357P4\334u\250Z_z\211\245\250Z_z\211\346\367\250\214\264\3237\275\'\234\t\353OY3\336\232\357\357P\357\347\255&\372\\\346\232M\033\251CQ\326\2009\251V\246A\212\261\035ZJ\235EXE\2531\255[D\310\253\021Fs\322\257F\237-X\216\"\032\257\305\221Z6\304\022\005i\302\231\034U\350b<U\370\241\351\305]\216,\016\225n(\263W\022<T\2732)R.j\312G\355Vc\212\255G\017\265ZH\253\343\262\n\234\036*D|\036\265\243nz15e\232\253L\374\365\252\314\364\233\375\351\301\370\245/L/\316jhf\\\021\232I\030\347\"\2422\373\323\014\247\326\223\315\246\231x\250^oz\256\363{\325w\233\336\253\274\336\365\003M\357Q\264\336\365\013K\357Q4\274\324M/\275B\362\373\324F_zC.{\324fB\017Z\226)\275\352I\030\355\316j\277\231\317Z7\361J\262\032\220\035\302\233\273\006\234\rH\274\323\302\363R\252\363R\250\346\254F*\324kVQj\314iV\243J\271\022U\310\343\253\321\304\002\n\262\221\r\271\315O\032\342\256\333)\r\2221[V\303\201Z\260G\221W\243\216\255$ur\024\305ZT\251|\276*D\213\236\225i\"\253qC\355V\322\036:T\242:\370\302YD\217\236\224\337\272\303\232\320\205\212\250\346\247\363~^j\244\262\345\272\324%\3517\322\211)|\312k?\275C\346\220\335j\337\231\373\260}\252\263I\315Fe\367\2442\373\323\032_z\201\346\367\252\362K\357U\244\233\336\253<\376\365\013M\357Q\031\275\351\246oz\211\245\357\232\211\245\367\250^Z\210\313\357L2\322\371\271\025$rsS\2313\035V\337\363S\203\366\247)\315H\255\203R0\005r(\217\232\235G52\255L\213\305J\250I\253\021\245[\215j\314iW\"\216\256G\025Z\216:\273\024um\024\221\200*\324p\372\325\270\341\366\253\261E\355Zv\311\323\212\327\267\030\000\032\320\215}\252\334k\355V\021qVPT\350\205\217\265Y\021\362*\324Q{U\310\343\342\254\242|\265\"\246M|6_\232U|\236\265e.\230\000=*Ss\271z\324/&M7}4\2774\241\375\350/M2TN\342\246I\363\017&\240i}\352#-4\313\357Li\270\353U\336nz\325y&\367\252\262M\357U^nz\324M7\275F\323{\323\014\334\365\250\314\336\364\303/\275F\322du\250\213\323w\373\322\253f\246L\216jS!\331\326\240W\375\345?q\311\251\021\352Ubjh\316x5*\256\326\253!;\324\252\274U\204\\\214U\210\343\253)\021\364\253\021\307\355W\"\210\232\277\024\'\216*\354p\035\271\305XH}\252\3541{U\370\341\000p*\314p\363\234U\310\341\366\253qE\323\212\323\266\207\332\264#\213\030\255\010\223 U\310\243\253\n\236\225<qs\315[H\352tL\265^\216?\224U\210\323\332\254*\361\322\234\253\315|\036Z\200\364\340\370\251\004\230\245-\306h\335\3057w4\273\251\245\375\351\215%D\322dQ\034\235Fz\323\036B\016*&\226\2432\373\324o/\035j\273\315\357U\336_z\253$\336\365Y\346\367\250\032oz\211\247\367\250\314\376\364\236w\2754\313\357M2\322\027\342\2422sR$\300T\302\340b\236\262nZ\217?=K\273\214\346\244\214\324\361\232\2323\363\325\324R\300U\270\324c\232\221W\245XE\253\320E\221WV\036:T\311\007\265^\206\034v\253\321C\322\264b\207+\216\365:A\317J\271\014\034r*\342DGQV\242\206\256$#\025j(\306j\374*\005\\\214\363\300\253\320c\275]B\265f<\023\212\271\032dU\224\216\247\2159\253\210\265e\005N\027\212r\250\315|\003\346\000y\247\027,7(\340Q\346njv\342\034\n\231\\\037\224\322\026\301\246\226\244-M-Q\263\324L\364\344\340d\323&q\2675M\345\367\250\214\336\365\023\315U\344\227\336\253\274\276\365^Ix\353U\036nz\324\r7\275B\323{\324Fnz\321\347{\321\347Ry\276\364\242N)\254\374\320\262S\267\221Vazs7\315R\253ejTlT\361\236j\344 \026\311\255\010\260\000\305ZT\357\353S\242t\253\t\036H\255+x\361\212\275\034y=*\344Pg\034U\264\207\007\245]\212.\231\253\321 \253\261F\276\225q\020`S\311P\334\232\231$\003\245Z\215\330\216\225f2\336\225r\000\356\370\355Z1G\216\242\245\336\021\261R\306d\310#8\253\261M\203\363V\2043\257\255]\216e\365\253)\"\346\255F\343\212\262\214*\312\034\212\221G5\371\354\314;\232\236\031\000\210\340f\240\016D\234\324\341\263\3159d!\271\342\234\316;\032g\230I\351\305\005\251\245\270\250]\251\201\271\346\225\245\003\203U\346\230\021\200j\234\222\325v\227\336\243i\262:\325g\233\336\253\264\334\365\250d\227\"\251\313/\275Vi\275\352&\233\336\2432\373\322y\276\364\242oz\014\236\364\242^z\324\233\367\n\0019\251\003dU\210_\236jF99\0254-\352*\302\340\325\210\306*\344B\257\303\327\232\274\235\000\253Q\257J\277\024C\203WbLb\257\302\225\247m\036@\253\206\014(oZr\341j\304n\007j\261\024\254OCWc,j\302\333\022\241\2175<v\355\321T\325\330\255% qW\240\261va\272\272\033\r64\3035X\271\201@\371\005f<\017\346g\006\264\254\221v\341\307\343W\r\226\377\000\231j&\267\222>Fx\246,\322\2111\223W\241\235\370\316kB)\233\002\257C6\352\321\210\202\265n5\257\316\326\"\230%d\340P$gq\232\262\255\205\245\335\232\034\341(-\200\007\240\246\357\342\232\317\301\250Y\351\273\352)e\317z\253$\234UY$\252\315/5\023KU\336Z\256\322\363\326\240y=\352\244\322\325V\227\336\242i}\3523/\2757\3164\341/\275<I\305(z\225$\367\251\226L\324\200\324\321\365\251\263S\303V\223\255[\214dqW!\034\212\320\214`\003W\242L\212\275\024}+B\005\253\361\305\236j\3641\361Z0\341ENf\310\3329\247G\031c\223W\240\203w\001kN\r:GL\204\255\013})\3627V\264\032_\000m\253\360ij\017\"\264a\260\205T1\003\025al\341\316G\003\326\255D\261\'\005\270\251\235\240\306\000\311\246\210\"s\222\202\247\216\010\227\370*p\2038Q\201K$\000\257\336\006\253\375\220\003\300\346\234\221\354?2\323\213\205<\036*xf\031\004\032\330\264\2240\034\326\254g+_\235\004\323\r\000c\232\220>E<=\014\371\000{\323K\374\344\032ilS7\361\223\353Q\226$\346\243\222L\n\252\362Ug\223\336\253I%Vy*\026\227\336\240\222N:\3257\227\236\265\033I\225\316j\234\322\036y\252\215-D\322\373\324fJo\233OY\252Q-<IR$\265:IS\243\325\230\233\232\261\232\236\023\315[\217\357U\330\205_\204\002*\364|\340V\215\272\020\005iE\036@\342\257E\021\030\342\264!N*\342\020\242\245\334H\300\253V\220\274\216\025A&\272\013\035\032G \272\221\355[\366\332dQ\340m\346\265#\201\021F@\2531\204\014>^*\324L\003\344-XP\307\247\031\251\222\023\216j\302\333\344c\232p\265m\336\325r;4\013\223\315L\"\033~Q\212z\307\315L\261\361\234S\274\241\216\224\236^:\nF\214\025\344V-\3434Rc\265Od\306\\V\314!\341 \366\255\313V\337\0305\371\323\232L\322\026\245\rN\rJ[\212s\2601\206=j\"\331<\323@%\010\250\331\2609\252\262I\315U\221\352\263\275U\222J\254\362{\324\017%B\362qT\345\223\236\265\020\227*Fj\274\357\212\240\362{\324&Zi\223\336\220\311J\262\017Z\235d\004u\251D\200T\210\3435a\032\254\306\325n.H\253\212\274T\321\214\032\271\020\346\264!^\005]\210b\264!L\340\326\244\013\225\025\251n\274\n\322\2161\264U\204\343\212\263\032g\223W`\265i\233\n8\256\233L\323\342\210\253\021\315tq0U\300\0252d\232\264\212[\255Y\216?j\267\034~\325r(\352\312GV\222<T\311\021c\322\246\333\311\030\251V\023\216\225$p\214d\216jM\203\265(\216\224\304*&\217\212\307\324`.\300\001Ri\360\030\361\221\326\267\202n\200\014U\333\025!p{W\347F\352i4\023FiCS\267Q\270\021\203\322\244\001@\246H\373W5FY2j\244\217U\244z\255#\325Y\036\252\273\325wz\205\344\343\212\2473\325q6\033\255E4\245\207Z\317y9#\336\2412R\031)\206Nh\022sS$\204\324\301\310\251\243sWa~*\3325\\\205\271\253\321\267\034\325\210\3715z\025\351\232\321\210p1Wa^\000\255;x\376QZ\226\351\225\255;t\340U\365l\n\263o\036\362\t\255\004\200\261\001\005tZu\226\310\201\"\266\340\214(\000U\350\226\256F\276\325n5\253q\2575n$\253\261G\232\262\221\324\252ppj\374\0106\347\332\236\"S(\305X\021\324\\\357 T\212\275\252M\243\361\244)\223\315!E\007\025ZKp\356X\216;RE\n\211\000\002\266\241\266\036X\'\275Y\212\r\2475\371\262\307\232n}\3513\317Z]\336\364\240\320Z\223u8LUqPK6\352\252\357U\235\252\254\217Udz\253#\325gz\256\355U\335\370\252r\275S\222Nj&\227\212\251+\376\360\324%\351\206JB\342\215\343\035jx\244\025h0+R!\364\253p\265^\214\346\256\300sZ1\256@\2531\214\032\277\010\316+N\334z\212\320\2059\255;t\030\255[d\034V\224 \001S\240\337 \003\245k\333C\220\024\016MtV6\210\2403\n\327\211@<U\330\305\\\210U\310\305[\214U\330\226\256\304\265r$\311\253\210\234R\264D\034\201W\255ab\225j\030s#g\265<\256\rW#2\222*U\034\342\254\024DL\360O\255D\205H\352\r!\214\023\222i\262\014\200\024S\355\255\031\23468\255U]\240\017J\224\036\342\2774Z\243\'\232i4\241\271\245\rHZ\233\272\232\315P;T\016\325^F\252\222=T\221\352\263\277Z\254\355U\335\352\274\217\301\2523=T\221\352\002\365Zf\301\006\240g\246\0319\246\231\005*\2775b3\315]V\005)\350\304\032\271\003V\204G\245_\207\265h\304zU\310\207\"\264 \034\212\323\200t\2558\000 V\235\272`\212\323\200`\212\267\273\260\253\366\250\024n5\320i\220\227`\304W@\230\030\002\256\302\005]\213\265\\\214dU\330\205]\211j\354KWbZ\267\020\303\n\274\203\212\221\2600=kN\323kE\214v\2516l\311=\352\t\0133`t\246*8=*\302FN8\346\226D##5L\306\342^3\212\267\025\263\267Z\264\226\200\036j\334qm\034\nVC\330S\221Oz\374\321qU\317Zi<\321\236E(jBi3LcP9\250\034\325i\032\252Hj\244\215U]\252\273\265Wv\252\262\265Q\225\252\234\217\212\204\265A;|\265\001n*\"i\205\251U\215Y\212J\266\222U\210\333\'\232\273\t\346\264!l\021Z0\266qZ1\016\005]\213#\025\243\007QZ\260\016+R\335zV\245\270\344U\341\362\342\257\332\307\270nj\321\266O2P;\n\351\354\325b\210\016\365\241\021\3175~\023\305^\213\255]\212\257CZ\020\216\234U\350\226\256\304\265n%\371\261V\300\305\005N\354\326\205\237\030\346\256\345\031\366\036\265\024\221\205|\366\252\263^$-\364\252\347Y\347\345\300\242;\366\232`3\234\232\333\212%\221\001\013V\222\034t\251\322<\366\251\322,\324\313n\270\346\241\2224\022azW\3463\032\256\375j\"y\245\034\2123A4\302i\214j\027\342\253\271\252\322\032\251!\252\222\032\253!\252\356j\263\267\025RV\252R\265S\221\252\020\325\004\315\362\232\256[\212ajajP\330\251\343nj\332t\315Z\210\325\370{V\204<\342\264\255\373V\234\006\257E\202x\255\010GJ\325\267\347\025\255n8\025\247\026\000\006\255G\363\270\002\266m\220\371`\n\324\262\213\016+n&\351W\241=+F\023Wb5~\036\325~\n\321\207\265_\210\216*\364C5m\024\344\032\260\2751Nlm\025f\335\260*\312\034\234\236\264\2636\324\311o\302\261n\225\246\223#\245eK\013\244\235\361\232\333\320\255\274\311\201a\232\353\243\210\"`\n\22249\311\351V\002|\276\224\221\312\021\360\334\323\245\237p\302\361Q\002Ks_\230\354*\273u\250X\320\247\265\024\204\323I\246\023Q9\310\252\322UY\rU\222\252\311Ud\353Ud5ZC\305R\231\252\214\255U$j\215H\r\315C)\3105X\236*2i\264\240\324\261\234\032\273\023\r\265b7\346\257\300\365\247\001\316+N\n\323\267RkB\025\"\264 \035+R\337\265k@x\025\240\216\002\n\277d\233\233q\255\313R\000\305kA\205Q\216\265~\023\232\320\205\272V\204-\322\257\302\334\212\277\021\255\010OJ\320\210\325\370z\212\321\203<U\370\306x\251\3251O\362K\032txK\200\275\253I#V\\\212Im7b\205\323\242#\030\346\263\357\364\320\274\201S\350\351\345K\203]:((\r/\002\227p\'\031\246\225\031\340R\021\201P\271`r\r~i<df\252H1U\\\363H\247\232q\246\236\224\302x\250\330\324l\325\004\235*\254\225Y\352\254\225RJ\253%U\222\250Lj\214\246\2529\346\243\316MF\346\2531\346\242&\227\265 5\"\232\261\023\032\275\0078\255\030\007J\322\203\203Z\266\374\342\265m\306\0005\245\030\'\025z\021\201Z\0206*\3742\363\201ZP+0\031\351Z\2201@\006kn\310\026\301\255X\310\004U\350Z\264 5\241\013U\350\232\264!n\225~\027\351Z0\275_\201\253J\007\255(NqV\324\202\005M\270\001\305Wf\036\177\035\252\3543\221\026\001\247y\356H\346\254\301#n\004\324\367\210\036\020qYq8\212\351~\265\320\3056\020\021\320\212O0\227\"\245_Z\177zC\322\242nk\363nD\004\032\2434UFD\371\252=\270j\030\374\324\323\3235\031\353Lj\205\215B\347\212\256\365ZJ\253 \252\262\n\253%R\224\325\t\215R\226\252=1;\324/\324\212\254\335j>\364\022)2*D5j\"*\354=\210\255(\017J\322\203\222+V\334t\255[s\310\255XG\312*\354}*\314m\310\002\264\255\366\246\t\353Z\266\363\344akR\322&\221\263\330V\335\263\204@\243\255_\211\263\315hBzV\204MWbz\275\013\362+B&\351W\342~\225~\027\351Z\020\311\322\264\355\3378\346\264\340\223\003\025r6\315HX\343\212b\246O5b45f8\363W\"\214\n\262St$W?r\031n\370\365\255k;\221\264#\325\304!\234\232\260\264\341A<TLk\363\201\3075\004\210\030Vl\310C\036*\271S\326\241bFi\212\375\215!84\326\250\230T\014*\007\025ZAU\244\025R^*\224\246\250\312j\214\246\251Hpj\253\236i\253\320\324\017\367\215Wa\311\250\361Q1\371\261J*T\253Qu\255\010G\"\264a\352+J\337\255k[\366\255K~\325\253\007#\232\270\244\001V-\3179=\252\322JL\200\016\365\275a\001*\t\255\350\231c\217j\365\2530\261\3175\245\013t\255(\033\214\325\350\332\255\306\365v\031\017\255h\301\'J\320\211\352\374/\322\264!j\320\267\223\025\251o&MhD\3318\025eA5*\241\007\245N\213V\243\025e8\025f\034\034\347\322\262.\240\r30\355N\2120\252\0335z\334\361\232\264\246\234\255\221\212\t\342\242c\315~r8\252\355U\246Q\203\305R~\265V^\265_\275?!\206i\247\245F\325\023\016*\007\025Y\326\252\313\300\2523\036\265BSTe5FSU$\346\252\2654t5\003\3655\023S\010\342\240\332K\325\210\355\231\206jS\001A\234T\221\255^\206\264`\007\212\323\267\035+R\337\265k[V\244#\24751r\242\244\216|GW\354~i\003\032\350\355\346!\000\035\253B\t\t<\232\323\205\272V\204-\322\264a\223\013W#\227\212\265\034\231=j\374\017Z0?5\241\023\325\370_\000V\204\0161W\340\227\346\305jB\370\301\006\264\355\311 \032\275\024\243 b\256\241V\030\251B\025>\3252T\273\260\264\350n\006Z\263\256\256\202\263\002z\324p\334\371\244\"\236+^\016\024U\215\330\245V\3474\245\273TD\363_\235N\265]\326\253\3102*\204\310A\'\025JNy\250M38z\220\323XqQ0\250\035j\274\202\251MY\363w\254\371\217Z\2435R\222\252I\324\325w\024\323\302\325v\353L\"\221\242%sQ\252s\212\321\267Q\201\232\225\325H8\034TH\234\325\250\227\221Z\020\016+J\016\202\264\355\307J\325\267\343\025\245\023`S\244l\212l,|\320\265\275h\000\003\035+j\335\276Z\321\201\271\255(_\245hB\376\365r9=\352\334Rt\253\260\275h\301\'\003\232\320\206N\225\241\014\235\352\3642qZ0=_Bx\"\264\255f\316\024\326\315\264\230\030\253\221\237\2375m&\332x\255(]eJyR\215\355OH\232s\261i\322Z\371\0216\016N+\234\325\213!\\w\251\364\230\311@\306\267\323\205\247n\241[\232y~*2\334\327\347\244\213U\331*\273\247\265U\232<\251\254\313\204\307J\252EF\302\204b~SR\021\305F\313Q:\361Ue\351Y\363w\254\371\273\326|\335j\224\2435JAUd\025]\2050\216*\006\034\320\250X\324\214\277/\322\243\362\376l\342\254F6\361Nw\300\300\241\016j\334C5z.\325\245o\320V\225\277Z\323\207\265\\V\300\251\003df\235\003\005\230\023\336\267m[*+V\332N\331\2558\032\264!nj\364r`u\253Q\311\357W\"~\225~\031:U\370d\255\010_8\346\264a~+B\006\034V\224\r\300\255(\033\245]C\206\004\032\323\265\230\226\025\250\257\214\037Z\261\033sV\341\220\306\331\006\265\243a4 \324\326\200\3071\357\232\226\340\026\213\031\357\\\366\263lJ\207\307N*M4m\205kU[\212B\324\006\346\236[\345\376U\003HK`\365\257\200\331*\026\212\241x\270\252\322E\362\326U\314?1\315g\272`\324ei\2730sSm\312\212a^*\t\006\005R\233\275g\315\336\250J3\232\243*\363T\245Z\247*\325I\026\253\262\363Le\342\241e\346\237\032\340sO)\224\316)\270\246\222A\246\002X\346\254F*\344C\025r.\265\243\007j\322\267\355Zp\236*\306\356)\352\337\'\024D\314g\003\322\267\255\033\n+J\007\303\n\326\267z\277\024\234\325\270\344\367\253q\311Waz\277\024\225z\027\351Z0I\322\264\241\223\"\257\301\'J\323\267\220qZPIZ0\276j\374\r\265\201\255h\217\231\020\301\346\254\302\177\204\365\025h\034\n\263iz\310\302>\2435\257\034\352\0109\353V%u)\307z\311\325\231D\000T\026g\021\212\274\033\2127\363K\272\224?4\223(\362\374\320y\035k\340\307\216\241d\305D\313\236\325\004\221\326m\324\031\311\254\231b \342\240)L+\315=}\r\014\274t\252\262\214U\t\273\325\tFj\224\213T\345Z\245*\3259\026\252H\274\324%*7^*-\231j\223\313\317\312\005+\302Tz\323V>*9\227\013\305E\032\036*\334kV\343\025f!\315hC\332\264\240\343\025\241\021\253=\251\321\236\325,\n\005\306Ml[\2368\253\3617J\325\201\370\025z\027\253\221\275Z\211\352\364/W\243~\225~\007\351Z0\022qZP1\030\253\321=h\301\'NkN\ty\025\251\014\230 \326\204M\220+J\326L\034V\212\000He<\325\245;\223\007\255X\262E$\226\352*\356\335\304\020zU\230$,\370n\202\262uysr\020S\355\316\020U\235\374R\027\247\007\367\245\335N\335\272&\\\360k\341\246\216\241h\271\346\243h\300\252\322\2475Fx\301\025\223s\017\315UZ<Tf<\364\243c\001\203Q1*\330=;UY\252\214\253T\345^*\224\253T\345Z\247\"\3259\026\252\310\225\026\312\205\322\221c\307&\245\211\024\344\201R4D\216\225\013\304TT\016\201\2074\304\216\254\306\225aF\005X\204d\325\370\227\332\264!\253\361v\253K\310\247\"\374\365!\371\034\021Z\266\257\225\025~#\234V\234\r\362\212\271\023sWQ\352\324OW\242|\n\271\024\2075\241\013\364\255Ki\000\305i$\200\200EY\216Nz\326\204\022V\234\022t\255He\340V\255\264\240\250\031\253\261J7pkV\tr\242\256\243\344U\250\016\016}j\352\277\315V\025\302\2515\317\\\312f\324\233\234\200j\364G\n*m\324\205\3517\323\203\361R#\361\212\370\231\271\250H\371\216i\214\024\016\265]\225I$\325Y\243\004\022+2k|\265U\222\324\366\025\010\200\257Zc%V\232?\227=\305Q\224`U9\006j\244\213\305S\221j\234\213U$J\251\"UY\023\232\205\223\212\214\246\343\322\206\214\364\024\364L\n{\034\n\202F\317\025\t\217\214\323Bc\265O\032\324\273\t\253p&\005]\214U\350\272U\330\272U\264\025&;\212p\371\370\255\033U\302\216kJ,\014U\330Z\257D\330\025j6\346\256Dx\253q\267\275\\\205\372V\204.8\2558\037$V\204r`\014\232\263\034\247ui@\376\365\245\004\2359\2558$\351Z0\277\275h\303\'J\320\206\351P\340\236+J\t\203\214\203\305\\\216R;\325\250\245\3169\251..B[6\0178\254h\016\351\213\236\346\264\221\360)\345\351\013\322o\245\017R+\327\306\005MF\313P\262\232\201\326\240u\342\252\274u\003!^\331\252\322FI\311\252\355\035V\23185\235*rF*\214\213\203\212\255\"\325IR\251\310\236\325VD\252r\247\265Vh\375\252&N)\253\037\265\002\"OJv\312\211\320\236\325\021\210\223\234T\211\010n\242\234m\0068\024\337+oj\221\027\326\254\304\265n5\253\221\n\271\020\"\256\'J\230\016)\240bL\326\235\267\335\253\321\232\271\t\253\3215Y\214\363V\221\210\251\222B*\3442\232\321\202Ny5\251m\'\313\311\342\256\244\331=j\3442g\025\245\003\340V\214\022t\346\264\340\223\245i\301%hE\'\035jUm\362\000I\255\233V)\030QW\321\252}\354\027\212\317\271\270\225\233a<\023S\333\360\242\256+\361K\276\215\364o\245\rR#\363_\036\272\342\242e\366\250Yj\027Z\201\324UvNM@\361\324\016\225]\322\250\3149\254\331\303\006\371y\252\022r\346\241u\310\252\322%T\222:\253,x\006\251\272d\364\250^.*\017+\'\2459\242\332\275)\0263\212\014T\317\'\'\245)\203\216\224\251\006\017J\260\220n\244{,\236\225\013[2v\247E\031\335\322\256\"U\224\\U\270\273U\270\307\025-\030$\325\333m\330\305_\213$\325\330\262\005\\\217\246jx\333\232\266\215\305M\031\031\253H\340U\370\033\245hE6\000\031\253\220\310Oz\275\004\2308\255H\034\034V\215\274\2000\315i\306\340`\203\326\264`\223\2475\247\013\202*\355\242\357\271\031\365\255\204\302\310}\251V\3665lf\255-\332\354\316j\241\1772m\325r6\300\251\203\322\357\367\245\017F\372xjz\265|\240\320q\234Ug\207\232\204\305\317J\257$g8\305Wh\317\245A\"\340\346\253\270\252\356*\254\242\250\314:\325C\030 \346\262d\\JG\2754\257\025\004\221\325g\216\251L\2318\002\2400\340t\250\036,\360(\026\341G#\232\216H\263\320R\010\260:Q\344\236\364yt\276W\035(X\362zT\361\300A\315Z\362\203\247Nj6\265\3349\025\t\264(r\005H\261q\322\246H\352eB\rY@qR\200Oj\2268\217SW!\001j\344#\025z1\362\212\260\275*d\253*~Pjt\311\344U\230\201\316M]\216Lt\2531I\317Z\320\201\317j\277\033g\236\365~\tH\305iC\'C\232\322\202N\225\247o\'J\323\206^\005i\331L\026\\\232\334\204\251\217~z\326}\354[e\016\247\203S[\344\250\005\211\253h\240T\312\370\247\207\247\007\247\007\247\006\247\006\251\025\253\345\271\037\003\002\252\263s\315B\354\000\342\253\273T\017\322\253:\223U\244S\330\212\257\"\2663U\\\022:U9c89\252\254>Z\312\235\017\236O\2557g\025\023\247\265Wt\317AU\332\016rEV\2311\332\243K~7\021Mx\316zS\032/\223\245\'\223\305\'\223G\223\355G\224iV\034\036\2250Zr\214\032\234(`8\240\304)\236X\317J\2368T\212\220B\271\251\2225\0252\"\372T\3012q\212\010*\341E\\\204t\006\257(\343\031\251T\366\251\227\202*\3127\002\255F\325e\033\26152\260\315O\033\340\326\215\264\240V\224R\002j\364,3W\341>\225~\027#\025\245o/J\324\206N:\325\373y\260\343\232\350 \224\375\233\000\3247S\017-S\024\353y1\201\232\272\034\036\224\340\364\360\364\360\331\247\006\374i\341\251\341\252En+\345\311\007<\325g Ui$\025U\345\0035\003\315PI6\005Ty\2115\023MQn\335L\2212\2475E\343\301\252W1\2563\216EV\300\305F\351\305V~\rD\343#\245Vh\213\267J\224A\204\306*&\200Tf!\214Ry9\035(\362@\024\010A\245\3629\244\3629\351Hc \342\200\234\364\251\321)\3738\346\232c\031\340S\320b\244\024\360\265*\014\032\262\230\353Qn\r6M[\211\276aWU\375jU5:\032\231\rX\215\215YC\201\272\245V$\325\270\317\025j#\310\255(\037\245hB\375+F\027\253\360\234\343\232\321\204\364\255\010d#\002\256\306\344r+R\322\365\266\354-\364\253\022\313\271@=E>)\010\357V\322CR\207\251\025\375\352@\324\360\364\340\364\365j\221\036\276c\225\272\325\031Z\250\312\375j\224\216sU\336CP<\204\236\265\00350\234\323\220sR2\356^*\264\261|\244\325\tb\316A\252\262@P\203\330\323\032\034\255S\222\002\rFb$t\240E\264S\266\361\322\242t=j\026\214\322\010\370\2441\n\014D\nn\n\323\270#\232\215\216N1B\21475:\205\305;\002\200\240\322\005\301\247\201R(\247\214T\312F:\325F\312\334u\3435\241\017@j\352\020W\336\246^\225:\324\311V#\342\246R{\324\351V#j\271\023U\350X\325\370_\232\320\205\353F\007\344V\234\017\322\257\304\365md\371j\305\274\204J+FI1\201R\304\371\025i\037\336\247W\251U\352@\364\340\325 jz\265H\255\315|\3131\315P\224\360j\204\247\255S\220\363U\234\324,j2)6\323\227\255XQ\362\342\225\242\005\t\254\311T\0068\252\223\222Wo\2450H6\035\313\323\275@J\276qM1\000\271\246\030\275i\276VzSZ\037ja\203=\251\255\016\321\322\242+\212c\016*\0278\355Q\226\246\026\002\232e\002\220\\c\245H\267$\324\211?52\035\334\232\225W\322\246\0203t\251\005\234\230\247\010vpXTR@I\310\251\340;W\rVQ\271\030\253\211\322\247AS\250\251\324T\243\212\221X\324\350j\324M\357W\241n\225~\026\255\010^\264!n\225\245\003\364\255\030[ U\325\031\025f!\202\017\275Y\022n?J\261\023\374\242\255#T\352\3252\265H\036\244\rO\rOV\251U\253\346\251\253>~\365B^\365NJ\254\365\021\024\200S\266qB\247\315W#\207\271\351Q]\312\021<\265\357Yn3\315U\2226=\252\026\215\300\306*5\211\267\344\255K\262\243u\246\250\031\346\234\311\305FW\024\326P\313\357T\345R\r@\304\201\322\253H\325]\237\025\013\313P\231\t4\201\232\246\215]\217\000\325\350\255\'l|\246\257Eg8\034\241\253q\331\312W;\rJ!\224tSO+2\257\3355RW+\235\331\250#\271\303\340\364\253@\357\371\224\325\210\367\005\346\257\302r\2435eEL\265:\221R\016\224\253\311\251\323\336\254\307\332\256\304\334\201W\341j\275\013t\255\030_\245h\302\331\305h\333\2675\245\023dU\370\202\233r{\212\256n65O\r\320 \014\325\370\245\014:\325\244qV\024\323\301\251\025\251\341\252Ej\221Z\276s\225+>\341q\232\316\225z\325)\005WaQ\221@\024\265<\021\006\033\217AN\222C\214-Sx]\333-J-\0169\024\033U\364\246\233U\307J\202[eQ\322\251\274x\'\212\256\313\223Q\221\203N\004\032k`\364\250\360A\250\245@j\224\213\214\212\245(\252\216\244\232#\264y[\000\023W\342\320\345l\022\r\\\207\303\262\226\037!\307\322\267l\2746\212\0032\201Z\277\3316\311\036\000\031\247\255\235\272\250\033zw\251\014\021\036\000\002\243k(\363\221\326\201e\0360{\326]\356\2302Lc \326,\332k#gn)\320Z\313\274\000\rk\245\231h\307j\222;vC\203V\2218\351S\252qHx\346\225e\003\214\324\213 \365\251\321\363V\3425r3\305Z\211\261W\340|\365\253\360\276+J\007\351Z0\267CZ\020\275h[\310\000 \367\025\\\300\355!\347\214\324\253l\3523\326\255B$S\305^\212^\307\255\\\215\352`sO\006\244SR)\251\001\257\237\344A\212\317\270\217\255e\314\230\315P\225y5]\227\232\210\216i\246\232z\325\373r\r\271\003\255H\220n\346\236`\003\265#E\307J\256\351\212\210\236i\031\003\2575Fxx<V~\300\030\324\022\214U\1773\234S\263\232)\217UdL\325f\266gl(\251\341\322\035\334n\025\320i\372\004`\006a\212\336M2\010\324qR\010\221\006\025E5\233\035*2\304\367\250\330\267\255G\226\035\351<\302;\322\211\275\351\336b\367\252\367\021\305\"\223\201PC\022\356\311\035*\340EQ\236\364\326\306i\353R\214m\252\262H\000\"\2514\247\177\006\247\212~@cW\342pG\025v\027\351W\2439\253(qW!nEhB\365\241\003\363Zp?J\320\211\261\212\273\023U\264\347\232\265\036EM\264u^\r5\217\361\016\243\255O\004\271\357W\2439\025 \247\212\225M<\032\360\211R\250\\/\025\227:pk>U\305Tq\315DE4\2550\306Oj\232\022\3126\326\245\250\314d\232s)\'\000S|\246\352j\274\361\340{\325_(\223\322\232P\216\364\313\210\301\204\340sY+\0212\221\212e\335\261\021\022+\034\214=N\243\212q\034Tdd\324\260\331<\307\201\305l\331h\245\261\362\217\251\255h\364\350!\003(2*|*\016\000\342\230\322\212\211\244\364\250\211$\323zSY\2522i\215Q\223\212n\352B\300\365\241d\301\351O\363s\322\200\331\251\224\324\252x5N\352\027\306\345\351T9\007\232\221^\256\301!\030\007\245iC\222\001\255\010\211\003\232\260\217\315[\205\253B\026\255\010[\221\315iB\331\305h\304\334\n\273\013U\330\232\256\304\325iGqM\222\"N\345\353Q\200\310wU\333y\201\002\256\307\363T\230\002\234\010\024\365a\351^\037 \2523\200A\254\273\201\326\263f\025M\227\232\217nMM\025\266\343\222*\317\331F\334b\237\025\206\366\351W\322\321\243\033q\201Lt\np((\002f\251\310\027<\363P\266\320\274\n\254\351\223K\345\3450zT\006\3324$\201T\357\024\010\017\322\271\326Be<w\251\2218\346\222B\000\246D\215$\240(&\272\235+Mm\240\270\300\255\215\236Z\340T\016\325\003\261\250\311\024\302i\205\275\351\205\207\255F\304z\324e\251\013S\t\250\3154\236)\245\251\310je5*\232\225[\002\244$2`\326m\324!\\\225\025\002\251\2530\203\232\324\266,\007N+F68\035jU\'5r\023\323\232\320\205\253B\026\255\030\rhD\375*\364mW\"j\275\023U\350\233\"\254/ZIP\024\315TV\362\344\343\245h\303)`1S\341\232\236\241\200\371\205<p:\327\212I\310\252\023\326d\375Mg\314*\243/5,0\026n\225~;r;U\270\255ry\025\243\005\272\"\347\003\353Q\335\025H\370\025\234Wsd\324s\023\267\002\251\270\250\034S1\305(\034Tr&GZ\313\276F\362\310\355X\214U\t\342\242iy\3004\350\240\222f\340\032\335\3234\300\0301^k\244M\261G\201\216*\031\245\311\353U]\215FNz\323\t\025\0335D\317Q3\324l\364\302\324\322\370\246\231)\205\250\315&y\247/Z\225[\025\"\265<7\024\364zd\2447j\201Pn\2531\204\317\025r)1\306*\344R\234sS\253\344\325\270\233\245hBsZ\020\234c\232\321\205\272U\370[\245^\211\252\354&\256\304j\344OW\021\252Br\270\252S&\033\353R[JT\355&\264c\223#\255L\037\326\201\327\212\361Y[\212\317\230\365\346\250J*\224\253\232\201b\334\365\255kj\002\347\025q`\311\351S\307\036\0074\362x\364\025F\340\357l\016\202\241\333\305W\224UfZg\227\232\215\242\333@Q\217z\206A\212\314\276\000\245`\\\252\223\362sL\202\325\235\306V\267-mv\000\241q\236\265\271\n\210\241\030\034\322\263\026\250^\2429\3151\311\003\006\253\263T,\365\0239\250\331\2522\324\302\324\322\324\322\324\322\324n\024\241\2058?\275=\\S\274\320)\353&{\323\303\320Xb\221NML\256\243\250\2531J\244\343\245]\216\255F*\324|U\330[\245h\300\325\243\001\342\264\"5z\023W\2435r3V\343j\271\031\310\251A\246H\271R\rUN%\255(NT`\324\340\232\221Mx\224\246\251K\324\325\031zUf\\\232\263kk\275\301\305l\307\000T\002\237\263\260\024\216\002\214TR\034.\007Z\250\343\232a\351T\346?6*\034d\322\220\005F\370\250\310\031\252\362\343\221\232\313\236\007\235\210\317\025\017\366r\2022*\3546Q \014\024dS\335\304m\3063\351RF\354\347\255N~T\252\362\314\250\271j\316\233QD$\356\025I\265`[\236\224\035R\003G\332\343~\215G\230\010\3105\021\224Tm(\250\214\343=i\276x\250\244\271\013\336\253\276\240\007J\204\337\2714\365\276\222\244\027R7\025j9\216\336i\305\331\272qR#\260\034\232\223y\343\232z\276x\2531c\251\251\000\347\212\235#\343=\352\334E\224\200M_\2178\006\255&1V\241\353ZPv\255(M^\210\325\350M^\210\364\253\210j\324f\256Dj\3004\346\033\206*\234\250RM\303\245Oo.\016*\362\266EJ\243\326\274JST&j\250\347&\210\342\334\340b\266-m\302\017z\266W\214R\037\225}\315B\304b\252\310z\232\201\272\3242>\0063Te89\250\214\200rM0\334\002x\300\250\332u\365\252\362^(<\032\315\274\275\000\034\036j(/\224\367\346\256,\276g\275J\031\261\214\3242)\335\232E\234\307\317aT\256\365\226BT\032\306\271\325&\220\237\230\325\026\232G9$\323\014\204u5\033M\203\326\201vW\2759u\'O\342\253\t\252D\303\347\353S\245\3242/\rI#(\344\020j\244\267\014\007\312*\224\263\273\036\265\007\314MO\014d\236EhG\020\002\245X\2239\305N\252\005H\024z\324\200\250\352i\014\311\234u\245Y\001>\325f99\034\325\224`M[\216\255\307\206\"\257\300\017J\266\261\215\271\025<#\014+F\036\325\241\rhE\322\256E\305^\204\325\310\352\324}\252\324f\255!\310\251W\221L\2252\204b\253\307\303}+B#\305N\rx|\306\250JI5\020RM_\262\266gpq[\"\r\253HP/-PH\302\253H\343\025Q\333\232\201\311\316j\026RNMS\270e\000\232\315\226nO5U\347\307z\251%\313d\340\3259n$\355Tf/ $\223N\265\014$\002\267\240\341\005X\310\025\024\207\035\3532\356\361#B\240\363XSHdri\202<\3221U\025Ri@5U\245\367\250Zoz\211\246\347\2553\315\367\245[\211\020\345X\212\235u)G\004\346\2365\014\365\024\357\265#v\025$sC\374U<sD[\203V\321\324\216\032\246WQ\374B\203s\032\177\0275\033]\223\367iD\307\034\234\320\254sV#cV\323;r*\324D\361W\242cWa\373\302\264\242\310\301\307\025y\000)\221RG\301\253\320\032\321\207\245_\212\256\304zU\310\215]\210\346\255\307V\223\025b3\315XQ\315+\256V\251\203\211H\253Q1\035j\322\034\327\207\312\t5\007\224X\340\n\261\r\2133\002El[[\254k\322\2540\000\022GJ\247#\344\223T\345\3115]\220\346\240q\203P\261\366\252\362\260\nI5\215u>X\200x\254\351\036\252H\304\324\'\2558\"\3106\232i\262\344\363\305*\333l\344u\025a$)\301\025\'\332x\351Q\311#:\341k*{7\221\211\344\324\037be<\203QK\031\215N\005e\\\273\202EPvcP\263\032\205\230\323@$\323\3262M?\310cA\2674\303\036\017\"\234\022\234\020\216\365\"\203\330\324\350\362\001\324\324\333\344\307Z\001c\324\323\325\210\342\246F\311\353Vc\000\325\204\025j6*q\332\255\306A\305_\204f\257D:V\244#**\334y\013\322\245N\265r\032\277\t5\241\t\365\253\321t\253q\325\310\215\\\217\232\265\031\253)S\241\251\205Wx\201\223\"\245X\316\337zz\022\016\rx\337\226Y\261\212\267\r\240\000\02295v+p9\305X\330\025x\252\363\002O\265W\362I\344\360*\t\004`\341NMT\223\216r*\234\204\223U\344p\240\222\177\032\307\274\272\334J\251\342\263$bj\263d\324,*&\024\200\355<u\246\275\321Q\353P\265\334\244|\240\325W\274\233wz\222\033\211\\\216\265}\037j\363\326\235\346\344\364\247\022\244r*\255\304\033\324\225\254\251\364\307p[\025\231=\203\241\306\332\246m\034\236\224\323c\'\367i\r\233F2E\"\253\217\340\375(g`:T~n:\232]\352\302\232X\nM\336\225\"\023\351Vc\"\245\355E(\251W\255Y\214\343\265YF\253Q\341\206*\304{\225\260kJ\335\270\255\030\217\250\255\033r6\325\350\275\rN\251V\"\030\340\325\330\273U\370N*\374G\212\271\021\253q\325\310\316*\324f\255\247J\224\034T\252\324\270\371\263V\024er)\216\207\250\353^Oo\016\\\022+I!\317j\234D\024S\037\000Uv\003\005\337\200+2\366\364}\3048\002\262\244\271#\241\252\217rKri\206|\216MP\272\270-\362\251\342\263$\344\324\014*\006\034\324L*?\255C#\2000*\233\362jH\023\'\221V\036\321\034gh\024\261\301\260\000\270\024\363\264\036X\na\220g\345\301\250X\314y\rI\347\262\2141\3152K\206\306\007J\245,\300\217\230Uc,y8\024(\311\315,\2011\363b\250\3154J\n\214U\007\205\246l\2514\337\260c\253\363CZ\021\321\2054[154v\236\3659\216(\323\007\255F\030\026\342\246\013\357O\n1OT\317J\231#=\352t\\v\253\021\2405b1\266\256\304Cu\025~\000\243\232\321\205\2061W\241\306x5z3V\343>\325a\007=*\344B\255\306*\364\006\257GV\3435m\017\025f3V\3435>~ZT|\232\260\204\036\rL\231Z\225\260\303\322\274\272\336\002\010\342\264R<-5\2075Vi\025~\361\342\261\265\013\360F\3058\002\261d\233q\353T\345\227\025_v\343H\344\343\002\252I\336\253=Wz\205\205B\330\250_\247\025RC\315@\331\317\02549\034\346\244i\317L\361Q=\303\021\200q\364\250\303\022rM#\310@\3008\250\274\307\354\306\232\306S\3375\013\254\347\326\241te\\\271\252\336|jNEW\227Pp~A\201Tf\275\231\273\232\250\322\310\307\222jx\245\224\014\002j\302\227=sR\250&\237\222)3\'\360\203H\"y\033\234\324\353m\264sO\021\324\213\037\240\251\0262\265*\223\236\225:c\275N\230\355S(\315XN*\344MW\242n\225~\027\255\010_5z\026\253\211\216*\344X\342\256 \300\2531\034\021W\3425n:\267\031\253IVc\251\213\014b\232\247\232\2367\344U\304~9\251F\010\3105\377\331"
-byte_png: "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\002\000\000\000\002\000\010\000\000\000\000\321\023\213&\000\000\003JIDATx^\355\334Yn\3430\014\000\320 \275\377\221k\014\246\235\026\250\006\256W1\224\370\336_\2354\213$S\244\344\370\361\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`RK{\200Z\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\365l\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000-\367\232\000\000\000\000\000\000\000\000\000\000\000\000\340\005\374\254\245\256\245=\000\000\000\000\244g-\007\000\230\226\215\213-RA\000\3160\177\000\000\000\000\000\000\000\000\314\3075!\000\000\005\371\351\r\000\014\345i\001\007\000n\245,\006\000\250\340\255=\000\024ey\025\000\000\200\241(d\263\212\352\231\263\333\331Q\237o\030g\033\222\201\030\365\014\353\275=\000\000\034%\027\334C+Q[\2273\300j\003L\241K|\000\000 \231^Y_\257\327\005x\0101\247\365m\270\357%Ak\203Y\365\035\000$\246\353+X\273\361\342\312\341UB8\014l\337\t|4,0\032=\\\315\235=\276/\212\000\000@\200;\023\335\271\254\255\002\302\313\250%\001\240\013i\037\000\024\245\316&\001\303\020 \216\372\277\254$]\357\026\257P\310j\232\237$ \321\270\332/W\377\037\000\000\200K\276\3122\345\031\220\202`\304\303\246Py\253\233\004\000L\316\014\020.(\371\326\263\300\016A\021\tHD\212P\234\001\000@CM\000\000\231\231\251\001\200M\233\253\276\233O` \207\362\303CO\006\000\000\310GY\003\000\000\300>*\310\342j\r\200Z\337\026\000\000\000\356\347\266\313\000\000\000\000\014\312e#\000\000\300\005nF\367\032M\273\377\275h\341\253\272s\001Ca\316G\000\000\200\001]\330\257U\007\002T!\342\003\017\241\000\240\224\013\213\005\244wlJ7\026\000\n96E\000@g\252\221`~\001\000\000\0000\033\245uC\203\000\000\300Ord\000H\312\325\234\000\000\000\300\026\353\007\000\000@N\252\225\237\\\242\005\000\000\000\3005o\355\001\000\000\210f\033\270\032\033\335\000\000\261d\334H\302\001\352\222\007\000\000\324c\031\000\200\341X\300\270\211,\000\000\000\200\\\346(\371\325\333\000\000\000\003S\324\365\322\266l\373\367\213,I>\007\020\252\327\231?\307\362f1\275\006\003P\224\231`,\037\223\300\221N\333z\356\326\343\3743\354\364\373\313\007\327\371\005\3752\036\000\200\214L\336\000\325\324\216\374K\301\357_\357\033\003\237\"\327f\227\3107c\277\250~\211z\037&%W\201\016\336\333\003\014N\250d\027\247>\214@H\007\200\211\005.\224\313\376+\213\033g\244\245\254\000\000\000\200y=\255\377\000\000\300\334l\366\325\246\342\343\233`\320\3370m,2\324\243\317\0010\033@=\303\024(\264N\004\354\247\356\006(\313\024\000\220\321\275\321\371\336W\243?=\006\3779\261\326\001\000\0000\263\271\312\244\271\276\315\005\032\002\000\000\000\000\000\010b[\002\362q\r9\221\314\003\221>[;\366\034\277\275\207c?>p\320\3069\277\361\3606!\000\000\340\210\313\351\0270\034U\023\000\224#\355\007\230\333\037\020\217U\035\335\242\351\375\000\000\000\000IEND\256B`\202"
+byte_jpeg: "\377\330\377\340\000\020JFIF\000\001\002\000\000\001\000\001\000\000\377\333\000C\000\003\002\002\003\002\002\003\003\003\003\004\004\003\004\005\010\005\005\005\005\005\n\007\010\006\010\014\013\r\014\014\013\014\013\r\017\023\020\r\016\022\016\013\014\021\027\021\022\024\024\025\026\025\r\020\030\031\027\025\031\023\025\025\025\377\300\000\013\010\002\000\002\000\001\001\021\000\377\304\000\037\000\000\001\005\001\001\001\001\001\001\000\000\000\000\000\000\000\000\001\002\003\004\005\006\007\010\t\n\013\377\304\000\265\020\000\002\001\003\003\002\004\003\005\005\004\004\000\000\001}\001\002\003\000\004\021\005\022!1A\006\023Qa\007\"q\0242\201\221\241\010#B\261\301\025R\321\360$3br\202\t\n\026\027\030\031\032%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\203\204\205\206\207\210\211\212\222\223\224\225\226\227\230\231\232\242\243\244\245\246\247\250\251\252\262\263\264\265\266\267\270\271\272\302\303\304\305\306\307\310\311\312\322\323\324\325\326\327\330\331\332\341\342\343\344\345\346\347\350\351\352\361\362\363\364\365\366\367\370\371\372\377\332\000\010\001\001\000\000?\000\372d\361@|T\251.;\325\204\2375/\231\234Ts6qP9\300\250]\252\006|Tl\364\302\364\302\364\205\2517Q\272\215\324\205\251\205\251\205\351\206Jizc=F\317Q\263\324l\325\013\265B\317P\273\324\016\365\013\275@\357P\273\324\016\365\003\275Ww\252\362IU\244\222\252\311%V\222J\251,\225Y\345\252\362IUd\222\253\274\225ZG\252\357%@\357P\263\324e\351\245\351\273\251\245\3517Q\272\224\032v\352P\324\360jE5\"\232z\265M\022\0275\243mm\223\322\266\254\3556\340\232\372\210\3101L2P\262\363S$\336\3652\317R4\200\240\372\323$nj\273\232\201\333\212\201\237\024\302\364\322\364\233\351w{\323wR\357\244-Mg\250\231\3526za\222\232^\243/Q\263\324l\365\023\275@\355P4\225\023\275@\357P\273\324\016\365\003\275W\222J\256\362Ui$\252\322IUd\222\252\311%U\226J\252\362Uy$\252\362IUd\222\240y*\273\311P\273\324,\364\302\364\322\324\322\324\233\275\350\335\357F\352P\324\340\364\345jx5\"\265H\rO\n\027\"\264\255\242\351[\026p\005\031\"\264\341\030\300\257\242<\376)\246j\004\265*MR\254\325(\233#\025&\365\300\346\242\220\360j\273\265Vv\246\026\246\226\243w\275\001\351wf\223u!z\215\236\242w\250\231\3526\177zo\231M/Q\263\324M&*&\222\241y*\t$\315B\322T.\365\003\275@\362Uw\222\253\311%V\222J\255$\265ZYj\254\222UYe\252\262KU\244\222\253<\265]\344\252\362IU\336J\201\337\232\211\236\242f\246\026\246\356\244-I\2734\006\315\033\251w\323\203S\225\252E9\251\223\332\247\2122\354+R\336\016\000\305jZ\333\355\031\"\257\3049\305iZF\0168\257t\023Q\346\322\211i\3136*E\236\245\216~z\324\3516q\232~\374\217\302\240\220\325g5\021jM\324\271\024\264\335\324\205\251\205\3526z\211\236\242g\250\213\323K\321\2775\023\276*\007\222\241yqP\274\265\013\311P<\225\003M\232\205\345\252\362KU\336Z\257$\265^Ij\254\222\325i%\252\262KUe\226\252\311-V\222Z\256\362\325y$\252\357%@\362sQ3\346\230\315Q3\323\013SK\342\232\322S<\312O0\322\253\023R\250&\246H\211\251\222\002jd\2675n;S\351Z\026\266\230\0315\245o\000\004V\200\217\345\030\251\340\207&\265mc\333\212\365\345\2334\276n{\322y\370\247\t\352E\233\336\236\263\363V#\237\034\346\254$\273\200\006\206|\214\036\265Y\332\241f\301\244\017N\014\r.i\254\325\031zc=D\322T,\365\023=F^\233\276\220?4\311[\212\252\362T\017%@\362T/-@\362\324\017-Wyj\007\232\253\274\265\004\222\325i%\252\322KUd\226\253I-U\222Z\255$\265ZI*\263\311P<\225]\244\250\231\351\206@*&\233\025\023K\357Q\231sI\2734\340\245\251\342\006\306qN\020\023\324T\261\333\373U\270\255\275j\334V\313\351V\343\264_J\261\035\250\354*\302@\027\265O\032\325\310\027$V\2341n\002\257Am\355W\340\200\212\364\010\347\307z\224M\357A\220\322\tjE\232\236&\251\322n\0075b9\361S\211\201S\232\210\277\006\241v\246o\247\t)|\312C%F\317Q3\324L\365\023=D\317Q\263\323\013\322y\2304\217&ES\231\360sU\236J\201\245\250\036J\201\345\250$\226\253<\265\003\313U\344\226\253\274\265^Ij\264\222\325Y%\252\322KU\244\227\336\253I-W\222J\254\362T\017%@\362\342\242y}\352\006\224\347\257\024\307\2234\306&\221FM[\206\330\266\t\253\320\333\2008\0258\267\342\217$\016\325\"F=*X\342\315Y\216<U\330\220b\254\"\214R\343\232\236%\253\326\321\344\212\330\266\213\201Z\020\305\323\212\320\212,b\272D\223\245H\262`\324\202L\323ZL\032\004\336\365\"M\232\235%\251\322Z\231g\342\236\262\002\270&\230\355\362\324,\370jA%;\315\246\231i\215%F\322Tm%D\317Q3\324L\364\303%4\311Q\264\265\004\222f\251\313&\rWy*\007\222\240yj\273\313U\344\226\253\274\265\004\222Uw\226\253I-W\222Z\253$\265VIj\273\313U\336J\257$\225\003\311\216\365U\346\316qU\232Pz\232\214\277\245\030\315K\0349\0314\343\020\024G\030\335W\343\000%^\267\\\2408\251\366\361H#\3158ERF\233[\221V\202n\350*\302&\006*d\\R\371\1775Z\206:\320\266Lb\265\355\2008\2558#\315]\2111Z\213!\003\232x\226\236&\3051\347\006\231\347{\324\2517\275XI\275\352e\236\236.*h\347\354jO7 g\245E+`\212\214\311G\233Hd\246\031)\215%1\244\250\232J\211\236\242g\2464\225\033IQ<\265^Ij\264\262f\253<\265\003\313P<\225ZI*\274\222\325w\226\253\274\265\004\222\325g\226\253I%V\226Z\255$\225]\344\250\036J\202Ip*\244\216[\332\253H\371\357P\362i\3529\247.3VT\341z\323\032L\232X\317\315W\003|\240V\215\243e\005YQ\223R\252T\213\036jA\026jXSkU\301\027zz\255=c$\364\253P\307W\242\210\236\202\257\301\023\216\325\251h\217\351Z\220\306N3V\327\232\215\362\246\242i\217\2554\315\232\004\324\345\233\025<w\036\3652\317N\363\375\352D\270\367\2531\334eq\232V\223$s\232c>3M\363i\014\224\206Ja\222\243i*&\222\243i*&\2235\033IQ4\225\003\313U\344\226\253\311-V\222Z\256\322\324-%B\362UY$\252\322IU\344\226\253\274\265]\345\252\322KU\244\2235^I*\006\222\242w\305U\231\2306r1U\344rEBy4\001\221\232\t\367\245SR\003\305\000f\245\215y\253\321E\271sZ6q\376\354U\324\216\247X\370\247\252U\210\341&\254$\030\307\025:\306jd\200\032\235-\275\252\355\255\2139\351Z\366\366\001\007\"\256$h\235\252\324\030\354+F\010\367b\242V\347\212d\215\311\367\252r6\322i\236e\'\231N\022S\326\\T\3517\275I\346\322\211\261S\307q\317Z\224O\2200z\032y\227?Zc6)\276e\006JcIQ\264\225\023IQ4\225\033KQ4\265\023\313U\244\232\253\3115Vy\252\t&\252\362K\305Wi\260j30=\352\t^\252I%V\222Z\256\362\325w\222\253\274\225\023e\206zT\022*\201\313sP8Q\334\324N\352\005D\304b\252\311\311\250\310\342\224\251\034Rb\225E9z\324\250\265b(\3130\000V\254pm\214/z\277o\016\325\002\256G\036je\216\246\216\034\234\342\255\307\025N\221f\246X*\314\026\305\217J\322\267\260\347\221Z\326\366\351\032\361J\340\267\003\245:(\t\353W\340\203\221\305i\333BN8\254x\244\310\024\262H\007\025N\341\271\315V2b\224IO\017N\017R,\230\251\004\264\276m*\315\203\326\245I\371\253\002m\324\341/\03754\310\t\353Lg\307za\222\243i*&\222\242i*&\226\242yj\t&\367\252\322MU\236oz\257$\336\365]\346\367\250$\233\336\240y\263\336\2413`\363L\222`j\244\217\357U\244\177z\254\357\223\367\205D\304g\2265\033:\216\225^YO\255Ww\315D\315P\273S\013dc\2651\2054\214\212\010\346\220\217JJz\014\325\210\220\234V\235\225\267 \326\304V\300(5m \251\226<T\361\307\232\265\034^\325ac\253\021EVR\034\325\350\"\021\201\353W\243;\261\201V\024az\323\321I5r\336\002\304qZ\366\232ql\022+b\326\304.8\256\002\332~9\251]\267)9\252s\276\0235T\311\236\364\325\227\236je\226\244\017\232z\275<=\036e.\372p\223\006\245I\361R\211\370\2453\003MiH\347\250\250\332J\215\244\250\232Z\211\244\250^\\w\252\362MU\344\232\253<\365ZI\275\352\273\317U\336oz\205\347\367\250\036Z\204\315\357Q\311p*\254\22795^K\217z\254\363Tfl\3655\033KP\274\225\013I\315\004|\265\003\036i3\357K\214\322\021\232n(\244\013R\306\265~\326\014\221[6\261\005\305i\3068\025m\020b\234\023\'\212\267\004\036\265q!\317j\235m\372T\321\305\315^\206\016*\304v\345\215^\216\337\245Z\212\320\275]\203O^\365\245ml\221\364\0315\251m\021b+N\030zW\216\333\315\3163WU\216\332\255!\310aY\356\373M4IR\244\2652\311R\t)\342N(2R\211)\336f{\322\207\305;\315\245\363i|\3760i\206Lt9\025\033KQ4\265\013\315\357PI7\275U\222j\255$\365^I\252\263\317\357U\344\232\240y\375\352\007\232\240i\275\352&\224\261\353PI!\035\352\263MU\345\233&\241i*6\227\035\352&\234\372\324m1\246y\234\323\374\377\000\227\336\242\335\223J)\301\251q\2326\322\354\024\005\311\342\254\301\016H\255k8+N(\360\005]\2012*\332\256\005K\024l\304qZV\326\244\362j\364pc\0258\206\245\216\334\236\325z(0*\325\274\034\364\255\030\255\275\252\3446\276\325r\033ROJ\321\267\264\000\014\326\2041*\325\370#\3175\340\366\304\3479\255\030\237\"\243\230\355&\262n_k\232\204IR,\2652MS\243\027\351N.P\340\322\031sN\022S\204\264\341/\275/\231G\233\212i\227\336\232f\2464\325\003\317P<\376\365]\347\252\322O\357Ud\237\336\253I=A$\325]\347\367\250\036oz\201\346\367\250Zzh\226\240\236\\\325W\226\253I/5\023IQ\264\265\023IL2Ry\264\t*E\371\207Z\\\363\212r\232\225i\331\305(\005\217\0252C\201\232\263\010\303\n\327\264\003\212\321D\316*\354\021t\255\010\255\363V\341\200f\256\306\273j\334)\236\242\256\303m\273\265YX\000\355S\307\006j\355\265\2779\255(a\366\253\320\302}*\364P\340t\253\010\204\236*\355\274\035+F(\260+\347[i@\035j\364SzQ3\356\025\225zy\315U\017J$\251\026^kB\302\351\021\306\376\225.\245q\0236c\340U\024\237\326\246IsN\337\315(\226\227\316\2442\323\014\264\3235F\363Uw\237\336\253\275\307=j\264\223\373\325y\'\367\252\262\\Ui\'\367\252\355=B\363\373\324\017?\275A$\365\t\232\205\237\336\242\232l\367\252\222KP4\274\324O%F\322S\013\323\013Ro\245\017OW\251\025\263\315J\246\246L\236\005H\007\030\025b\004\030\351V6qDc\006\264\354\337\030\255\233Q\277\025\253o\035hE\037\0252\215\265j\004.FkJ\010:qZP\303\205\251\222\034\366\253p\333U\370-\353F\013p{V\2046\334\016*\312\333\373T\361A\203\322\257A\017\265^\212,\327\312\342\343\035\rZ\266\274\311\306j\327\237\232\251vASY\305\360i\004\224\365\222\237\347\020sH\367\004\367\253\320\342[2q\363\016\206\240\216~qS\211i<\332_7\216\264\206Zi\227\336\243i\252\t\'\367\252\322\\{\325i\'\367\252\357q\357Ud\270\367\252\322\\{\325w\270\317z\256\363\324\rq\357Q5\305@\363\373\324fjO:\243\232^3U\336Z\256\322sLi)\236g4\205\351\013S\013\320\036\245G\251\221\252\304x=j\334Q\026\034\014\n~\315\247\025n\025\030\251q\305>8\371\253\260G\202+^\315\366\221[v\307 \036\325}y\306*\304Q\226\"\264\355 8\351Z\366\326\371\253\253\027lU\210\240\311\351W\342\266\300\036\265z\013^\234U\350m\366\221\305_\202,\342\255\2545<PsV\322,U\313x\375\253\343H\356\303\3645j\033\202\033\255iC8q\357L\231\352\204\307kqQ\007\346\234$\247\211)\245\360j\354\027\330\217`\3075\037\335$\226\034\322\231\260q\232\014\352;\232w\2341\301\2443S\032lw\250\236\343\336\253Iq\357Ue\270\252\317qU\244\270\367\252\262\\{\325w\270\367\252\317q\203\326\240{\212\201\356*\026\270\246\031\363M3{\322\t\271\246\3136W\025U\245\250\313\363\326\230^\230^\224=.\357zc\032@\325*5X\215\252\344\'\245_\216N)\300d\346\254\304*\314q\346\255G\r]\206.\202\257\303\0161\305jY\260\310SZ\361E\2201Z6\320\217J\326\265\204q\305i\302\200\n\271\0149=*\374\026\370\355W\241\267\347$V\225\265\266q\221W~\315\362d\n|)\266\256$y\253P\305V\322\034\232\271\004\025\360\2142\354<U\370n\003\001\3175~\336c\236\265jG\371\001\315U\270\350\rU/\203G\231\357OY3J_\212\214\312A\340\325\210\216\340ri\246LQ\346\342\233\366\214t\245\027\031\357Q\275\307\275C%\307\275U\226\347\336\252Ks\327\232\255%\317\275V\222\347\2575Y\3563\336\253\275\307\275W{\214\367\250\036\343\336\240\222\343\035\352\023qQ\265\316;\321\366\240i\3136i%\223\212\255\346\363I\346\373\321\2734\326j\003\322\207\245<\322\001\315J\225f!\214U\270\252\354Uj1\232\263\022\325\330V\257E\036EZ\202\"\017J\323\202.:U\250a!\205j\333\222\240V\265\231\014@5\265m\026@\255+x\t\305jAm\323\212\322\206\r\243\245^\202\r\335\253F(6\201S\371Y\024G\001\315\\\212*\271\014\025z\013\177j\273\024\025\371\366AC\315K\034\230\357Z\326m\234\032\274\355\214UK\251;U\'\223\232o\233R,\274Pe\2464\265b\332u\311\031\244\231\3109\025\001\237\336\230g\367\246\233\232c\\`u\250$\271\367\252\222\334\373\325In}\352\264\227>\365U\356\271\353P\265\306{\324\017q\236\365]\347\347\255B\363\373\325y\'\367\250\032zg\3323\305F\323\025\251\240\271\311\353SK!\333\221U<\356h\363iVsR\206\336)\233\360i\341\252U\247\252\363S\306\234\324\350\270\253Q-]\211j\344IW!\216\257C\025hA\037J\277\0145\247on6\325\310\255\3623\232\263\014x\353Z6I\363\347\240\256\216\311x\025\271i\006@\255(a\307j\277\024Y\025z\336,\032\277\034u0\207\212\22689\034U\330\255\372U\350-\275\253B\033n:U\205\207\025\371\333qp%#\025\037(FkR\325\212 \3645p\\|\244\032\245sq\226\252\255.i\276m(\227\002\235\346\323\032J\201\247*\334\032\274&\0060s\332\251\3116\t\250\232\177zi\270\367\250\332\343\336\253\311q\216\365Rk\217z\247-\317\275T\222\353\336\253=\317\275B\327X\357Q\265\317\275C%\306{\324\017qPI>*\006\270\250\314\376\364}\243\"\244\212nj\341\233)T\214\237=9e\353NV\315L\217\203\232\225\200e\310\353DGuYA\315XE\346\247\2118\251\321\t5n(\352\3541\325\310c\255\010!\351Z\020\301\322\257C\rh\333\303\234V\204K\221\200*\3346\344\216j\3746\2758\255\033{\177j\332\261\210\341x\255\3735\300\025\255\n\016*\3641\373U\310\343\305[\214U\250\323q\025lE\302\325\350 \3168\253\360\303\200*\354Q\374\265*\307\223_\232&Ozr\312X\3435r+\362\212\024\366\253\037n\334\265ZI\362j?6\232e\367\247\th2\343\2751\246\250d\227\336\247\202\3531`\236\225]\347\250\032~z\323\r\307\275F\367\034u\252\262\334\347\275T\232\347\336\251Ms\357T\245\271\347\255Wk\232\211\256s\336\242k\236:\324ms\317Z\211\256=\352\'\237\"\240i}\351\206\\\367\247#\344\324\361\2229\251\374\354-V\022\376\363\255I\274\2065$rT\350\371\253\020\266~SS\"mqW\0253\203S\306\265j$\343\025j\030j\354p\037J\265\024X\355Z\026\360\023\216+N\336\330\361\305iAjH\351V\342\266\366\255\033k\177j\324\202\320\005\351\315\\\206\337\'8\253\360\333t\342\264-\355\361\216+b\312\3378\342\265\240\267\306+V\336,\201Z6\360\325\264\212\254\303\001$U\350\242\307\025j8\262EiA\017\312*\344QU\264\217\212z\'5\371\200d\241d\3058KS,\370\036\324\255&Fh\337\3054\311F\374R\031j&\232\242y\263I\014\330$g\2552Y\260H5]\347\250\315\307\2775\014\227\030\357Ud\271\353\315T\226\343\035\352\224\327\036\365NK\216z\325g\271\367\250\036\353\035\352#u\236\364\323s\357L7\024\303?\2754\313\232\211\246\301\251#\271\002\254-\330\"\245I\267\003P\226\303\324\301\370\316jHX\232\265\023sV#8z\321\2157\001W`N0jt\217\332\255E\035iZA\272\264R\333\216\225b+\\\366\255+k]\270\342\265-\355\217\025\255mm\362\343\275Y\216\323\236\225\241mi\216\325\243\025\271\030\342\256\301o\323\212\321\212\333\000qW \203\221Z\266\261\355\305hBGAZv\230\255(\312\216\225n\034\023Z\020F\r\\\212\032\263\024<\326\204I\200*\344KV\221x\247\252\014\327\345q\224\016\264\343&\361\225\350:\321\347\206#\024\377\0000\202*\302H\016\024\323Km4\205\363M/L/\232\211\344\250\032ZX\211\034\232m\304\237-g\3116;\324\rs\357QIq\357T\345\270\367\252\262\\g\275T\232~*\214\267\034\365\252\257s\357U\336\347\336\241k\237zAu\307ZSq\236\364\323?=iD\371\357Ly9\244I\252O7\025n\332\\\361RH\377\0005J\217\271jh\237mZ\211\262j\375\272\006`Mk[\250\000b\256$}\361\326\255G\027J\267\0249#\212\327\264\203\030\255H\241\311\351W\340\264\335\216*\364V\245q\307\025\243o\007N+N\332 +F\010\007\025\243\024@\257\002\246 )\025<R\250\305]\206R@\300\253\220\271\343\212\277l]\334\000+^\336\022\275z\325\215\376[`\324\361\310\371\310\311\025\243os\2023\326\265\255n\227\216kJ\033\205\342\255\307\"\372\325\330d\007\275\\\215\205\\\210\344T\250\274\327\344\373\277\251\253\026\222\205F\357\221U\374\334J{U\245\22384\345\237\r\351Ni1\216sL\363\262z\034z\320\322S\032N\rA$\234T;\362jF\234(\305U\270\271\005H\006\263\246\236\252<\376\365\023\334\344u\252\222\334{\3259.9\353U\245\270\310\353T\'\237\035\352\233\334\373\324\017q\357P\265\307=i>\323\357J.3\336\224\317\357J\267\030\251<\335\343\255\000\234\324\241\362*\325\264\2305<\215\223S[>z\212\270\2407J\263\n\342\264m\326\264\355\272\214\326\244_t\n\271\ng\025\247on\016\riA\036\334V\245\274]+f\312\034\2001Z&\317\010\033\265>5\tV\341\220\014U\270n\t8\305hB\354\325mm\031\306\342j\304V\244`\005\311\255\030,\345`01ZV\272l\214\303=+\251\3224\025\030f\255\033\3134\215p\213X\323[\261~\365\253\245\304\270\303\212\321}7\3149Z\210\332I\017<\323\026\362D\223\031\255;k\307 V\245\265\313`V\235\265\316\354V\265\273\006QW\241L\327\344\233\221\336\230\267&#\307J<\363+\014\325\270\337\013\315;~hv\333\0314o\302\001L2\323ZN\rA$\234TbN\365\024\363\325\031g\252SMT\344\236\253\274\365V[\214\325I\'\311\353U\345\237\031\346\250\\O\305Q{\217z\201\356=\352&\270\246y\376\364\341qR\t\262:\323\204\271\251\242\226\254,\271\342\245V\251\341\'5k&\247\26785z/\275W\342\033\207\025~\331pkV\005\300\006\264\355\323p\315iA\027\002\265m\023\245jC\006{V\235\2548\003\212\327\264P\202\2565\300\333\264Q\024M!\347\245h\333Z\202@\003&\265\355t\227\225r\022\265l\364)N\003t\255\353M\010\340\014f\265-<>\001\031\025\261m\242\306\0241\351V\323J\2107\313\320V\205\274\t\016\006\376*\314\237g\013\352j!g\014\274\224\0305f\013\030S\220\247\025mbU  8\247MhJ\365\006\251\0351C\023\216i\361[\204o\231qR\227\021\236\rY\267\270\031\030\255\375>p\340V\344\007+_\221\254\325\033t\244Q\216je\227\"\236\262R\311&S\024\326\223\346\3051\237\006\2432pj&\223sq\322\242\226]\242\251K=T\226~\265JY\272\3259&\367\252\3177\275V\232l\216\265B[\214\036\265\013O\270u\252\027\023\037Z\240\367\030\250\036\342\242i\351\206|w\247\245\316ju\270\305=f\315M\034\365f9j\314rU\310_\221V\301\315X\26785~\037\275Z\026\353Z\226\312\010\025\247\010\310\002\265\254\343 \014\326\315\2749\002\264\255\340\306+Z\326>+F,(\346\254\t\0168\2536Q4\256\000\031&\272}/\303\362\334\020YH\025\325Xx~8q\270d\326\365\275\204q(;@\037J\273\024Q\2020*\374\014\201\206\027\245[M\304\345F3S\305n\304rO5j;RF\0014\377\000\260\276{\342\257A\246.\320O5im\200_\224T\211\017\265XH=\251\376Fi<\215\2478\244x\003)\310\254\rM\232\335\310\355Ri\222\231\260+\242\265\337nA\355]5\204\276d`\346\277#\267SKR\027\305(zxzql\212Wp\361\002O#\212\204\276H\317Jb\202C\212\215\237h\346\251M.I\252R\313\326\251K/\025Ni\252\234\263{\325Y&\367\252\362M\221Y\367\023sP,\371\004\n\253u.\005e\313>3\315Wi\371\353L3\346\230e\367\247$\243\326\254\3070=\352e\224T\261\3123V\342|\325\310Z\257[\234\221Z\010\271\002\254D0\325\241\000\371\205j\333&Eh\333\2561Z\266\321\356\000\326\325\232e\000\305m\331\247\312+f\010\006\320j\334XJ\271\014[\2715\241\005\223N@Q\232\353\264\035\r\"dv\373\335\353\264\265)\022\200\024U\250\311\' U\310\324\2763\322\255\303\017\265^\202\037j\320\202,v\253\321\303\234U\310\241\305YHw\221\305X\021\355$\017J\231-\317\245M\r\250<\232\227\311\003\2659`\245k~*\027\213\212\301\327-w\200\000\346\233\243\332\030\216H\256\2628\303[\201\214\326\206\224\205x5\371\034[\024\322\324\205\250\335O\rK\276\224\270#\007\247Z\221Q@\246H\341FMg\\M\222j\204\262\342\251\313%R\226J\2454\276\365JY*\254\222\325i&\342\250\\K\357T\376\323\265\272\324WW\005\227\035\253&i\260\314*\263MM3S\014\364\013\216z\325\210\246\317z\260$#\232\236)I5\243o&qW\242j\320\266nEjB\374U\250\2715\243l\271\305k[\257\003\025\245n\207\002\266l\342\371A\255\2738\362+f\316.\005kF\333TU\253X\374\326\006\265\222\324\234\005\344\327S\241i\233c\014\302\272\213H\004`b\265 N\225~\024\034U\370S\245^\206>j\374\021f\264`\213\245]\212\032\260\230^\rh\331\306\010\007\025)\267\006A\352j\332\303\212\210\2349Q\332\244D\305M\260c\2574\2052qH\321*\236zU\033\233!3\223\216\0056\033UG\000\n\350m,\263\020\'\245^\267\264\330\331\257\307\2268\246\356\246\356 \322\356\317zpjB\324y\224\345\271\3320j\275\305\316\341\201Td\223\255T\225\352\224\322pj\214\322U\031\245\252\222IU%\222\252I\'\025B\342^\265\2354\265\013\\ey5B\342O\336Uf\222\230f\246\264\240\321\274c\255X\202aW\225\201^\265,m\216\225~\325\372V\224&\264my\"\265\240N\005]\205qZV\303\245l\331\257J\327\266\217$V\315\224u\267e\0275\265l\241G5iF\367\000V\335\215\267\312\240u5\325\351:Z\340\026\256\216\3325\\\005\351ZP/J\320\201qW\340^\206\257\302\265\243n\235+F\336:\321\202<\342\264\"\213 R\275\271\0075\245a\0032\364\253\266\366\331\230\203\330T\356\233MUu\006S\201R\242\343\212\265\344* -\311\250\223kg&\232\320\356$\347\002\231*\215\230\024\266\226\r#\203\212\337\216?-@\364\253\nk\361\261\372\324E\260i\245\250\r\315855\236\233\276\232\317U\244z\253#\325Yd\305P\236J\2434\225JY:\3259\037\255U\222J\2514\230\315f\334K\326\263\346\222\2534\274\325K\227\306\rUy*&\226\232e\342\225e\367\2530\267\"\264\242`S\255K\033\220j\365\263\363Z\326\307 V\235\261 \212\327\267n\005h\3003\212\324\265^EmZ\250\030\255\233D\316+f\316>EmZ\256\322+C~\000\305h\351\361\377\000\023WS\242[\231\244\007\025\326\302\241\024(\255\033n\325\247\005hCZ\026\353ZP\'J\321\267Z\322\201zU\350\027\014\017j\324\211jW\302\257\326\265\364\300\257\030\035\352\300\214\306\305\217z\257p\314N\026\241TpzU\250\343$\0169\247\313\033(\"\263\335\0369x\316\r]\202\325\345\0035r=;\246kB\013m\200`S\344\214\342\235\022\223\327\275~6\310*\253}\352c5\033\272R\207\244f\246\356\246;Ui^\252\310\325Rg\252\0237Z\2433U\031_\255U\225\352\234\217\326\251\316\365\233q\'Z\316\232LUs\'&\253]?\311U\013\344T,\336\365\0339\241$9\253\260MW\243\232\255C&Mi[\021\305j[>\010\255\213v\334\006+V\334p1ZV\331\342\265\255z\212\334\264\031\255\2535\351[\226\213\310\2554\371\000\255;\010\274\323\270\364\255kX\367\310\024t\025\332i1\010\"_Z\327\201\267\021Zv\307\245i\301Z0v\255Kq\234V\245\272\347\025\247o\037J\321\202>\225~\004\344\n\276\243h\024\256\234\203Z\232a \214V\231(\357\264\236MA4\001\037#\245U\270\275Kc\311\252\315\342DS\362\200\r1u\243q(\036\265\277mn\223F\247nI\253\361Z\355\351Vc\207wj\263\035\276{U\224\262\r\214\3243\333\2428\013_\213\256j\254\234\032\201\2174\240\344Q\232\t\246\023\212\215\2335ZSUdj\2473U\031\233\025Ff&\250\312j\234\255\214\325I\033\031\2527\017\214\326l\357\326\263\347n\265X?5\005\303\374\246\251\227\342\242g\246\026\245W\305X\205\371\253\361t\006\256\300rEi[\036\225\255m\332\266,\373V\325\243\014b\264\340\000\342\265mF1[v}\253v\314p+n\330`\003WP\371\214\000\256\202\3022#\000u\255\2552\337\016+\247\201\370\025\245l\331\305j\333V\244\006\264\255\273V\255\250\351Z\326\300qZ\226\344f\264\355\3008\253\361\2460j\332\034\214S\337\356U\273\'\333Wcm\315\223\326\237;\225\\\226\342\271\335G3\277\313\322\260na\222)\017\\V\357\206,\315\305\302\226\034W\241\333[,(0*h\243%\263\332\255\254\177/\024\221N\"|61R\317v\n\341*\251r\315\223_\214\016*\254\235j\273\234\032D4\247\2554\2654\232\211\232\241\224\345~\225NST\2465JcT\2455Fn\246\251Lz\3259\217\006\263\356_\255fN\375j\204\257P)\033\271\351P\\\034\203T\230\342\242cL\311\245\006\247\211\260kF\007\371j\3342`\326\245\254\235+b\324\347\025\265i\236+b\321\t\255kd#\031\255ka\322\266\254\3061[\266\207\201Z\360\310\002\n\321\323c2>\356\325\323X\340q[\366\200\"\203\336\265-\337&\265m\237\030\255kW\351Zv\355\322\265m\210\342\265mZ\265m\317\002\265-\273V\275\2475\247\022\356\305YX\261R\233r\370\247\306<\231\225kb(\025\227 \323n,\013\201\311\246\246\211\033\016z\326f\255\241l\004\201\305M\341\310E\274\340\032\355\342@\350)\340\005\372S\267\202q\232\215\243\004\361HWh\250%f^\225\370\333,%sTgLf\251Hy\246#sR=F\307\024\302\334TL\330\250]\261U\245\252SU)j\234\325B~\246\251M\315R\230\326e\313u\254\313\203T%<\232\20395\024\247\255S\220\365\250Y\250\355H\016jD5r\007\"\264m\2715\257j\275+b\323\202+r\317\234V\345\242\343\006\265\340\005\200\255Ke\300\025\251j\330\255ki\360@\255k@\362\001\307\025\267f\346 +\243\323A|\032\336\204\343\025\247j\330\305j\332\267J\325\266n\225\251n\375+R\331\361\212\325\266\223\245j\333I\234V\255\254\230\305lZ\311\322\265\355\233v+A0TU\220\301@\252\2238\363\207<\326\225\255\336\330\210\357O7\216{\325\253k\206,\t\253w\361\211\240\007\025\207\033\213{\205\372\327Ykr\004j{\021H\327\031r;T\311\353R\323[\245B\374\214W\343\324\261\202\rf\\\301\214\326d\321|\325\tM\246\225\333\007\006\232\334\212\204\365\246=WsU\345<U9j\244\242\250\314*\224\302\250\315\306k>\341\253.\344\3475\2339\316j\204\246\243\217\357\032\257/\014j\244\207\223P\236\2643`R\006\251#<\325\3109\"\264\355\3060k^\321\272V\275\247\314EnY\016\225\273hzV\345\260\371Eh[\364\253\260\2768\025\257d\002`\267Z\335\264\272\000aG5\263a\013N\343\322\272[\007\020\2463\315j\333\276\356Mj\332\267J\325\267|b\264\355\344\002\264\255\244\311\034\326\265\273\364\255;y\000\305j\333I\322\265-\245\306+f\316L\342\266\255%\305hD\373\273\324\354\347\034T+\031f\311\353V\242\214\212\271\0149\255\013x\000\253\336V\370\210\366\256[RV\216\353\217Z\332\322\357@EG\255\024\303\310qW\023\201\212r\365\241\217\025\013\032\374\201\224sU&\21405\221s\026\326<UFC\326\253\27199\250\322^\306\221\216\r5\271\252\362\n\254\342\253H*\234\302\251\312\265F~+6\341\2536\341\272\326e\301\316k6v\306j\224\247$\323\023\275V\233\2065U\307&\241#\232\206V\371\261H\rO\031\346\257[\363Z\226\243\245k[\016A\255\2331\214V\355\231\351[v\234\342\266\355\016@\255(\360\242\254\331\235\317\223\332\257\245\307\317\201]&\221l\316\001=\353\253\264\333o\036\001\346\256\333\311\226\315lZ\277\002\265\355\037\212\324\205\370\025z\0311\212\321\266\233\2475\257i.qZ\266\362r+N\332^\225\253m\'J\327\264\233i\025\265i.Mj\301&p;\325\324\005\252e\214\251\344U\230\322\256\302\265v!\212\271m\202\307\351Xz\235\240y\230\372R[A\205\r\351Zvm\336\257\243S\325\363\221\357A=j\007nk\362\032QU_\256*\225\312\003\236+6Q\315S\270\0035P\360i\373\203\217qM=*\'\305@\353\221U\245^\265NU\252S\214Vm\317z\313\270=k2\344\365\254\331\332\263\347\346\251IL^\246\253K\313\032\201\206j&^*\261R^\254Cf\322s\332\247\373)\214t\251\340\\\032\322\266$b\265\255\201$V\325\240\350Mm\331\366\255\333#\322\266\255\201\300\305Z2\025\034\324\326\367[T\363Z:o\357e\014zWccrQ\000Z\325\265\235\231\206MlZ\277J\327\266\223\245kZ\312\000\255\010\'\340U\350g\311\025\247k\'CZ\326\222r9\255h%\351Z\226\322`\016kZ\322Pq\315jZ\3167\001[V\262m\301\025\263h\344\220\325\251\004\343 \036\265\243\021W\030\251\204e\017\265X\212\254\207\332)\326\327`;sY\232\205\360W|\367\252\260_\371\273QOZ\335\264\341E\\\r\212T|\266i\345\261\232\201\217&\277#\245J\251\"`\325IW \326e\304eI8\342\263f\3475\\\212\217v\326\251M1\227\212\201\227\025^E\252\262\256+6\344\365\254\273\232\312\271=k.\343<\326l\307\232\243(\346\251\310)\230\300\252\3149\250\212\3224$\256j\005\217\346\344V\265\222\014.j\314\221+d\016\225^8\2005v\005\301\025\253j1\212\330\264\031\002\266\254\307J\333\263\343\025\265n\370\025$\262dTPH|\300\265\323i\253\264\014WId\377\000-k\332?\"\266m\244\340V\255\274\225\241\014\376\365~\t\362\0075\243o.qZ\366\262\342\265me\344V\255\274\331\255Ki\270\353Z\266\222\364\255H\217B+b\302\347v\024\327Ce.\320\005h\306\33785~\033\235\204V\275\264\213:T\245<\266\366\251\0226\234\354^\264\347\323\332\325\t\316I\025\312\370\201\332%R:\232_\017Fd\303\032\353a\371TT\205\350G\371\261R\0318\250\232J\374\232\225*\254\221\3259c\353T\356!\334\246\261\256\342\3300*\213\n\211\305\021\311\374&\245\307\025\023\256j\t\023\203Tn\006\005e\334\212\311\271\357Yw\035Mf\334/Z\316\235z\325\031\205T\220TdqU\234`\232D\214\261\251\214x\\zT\036N[\245[\205v\201R\311 Q\212H\216M]\201A5\247\000\255{1\300\255\233.\010\255\253n\225\243\034\205EJ$\335Kn\300L\t\365\256\237OpTb\267,e\347\006\266\255d\344V\255\274\234\326\244\022\340\016j\3543g\275h[\313\322\265-\245\351Zv\323r9\255ki3\216k^\326N:\326\245\253\216+b\326A\201[\026\257\3235\245\027\312C-l\330\334\226 f\267#\227\0305j\'\311\253\326\323\264,\010\255\350\034\\\302\rO`\0147\004\236\365j\357/\013z\327\'\342K\"\361+\001\300\244\320\223d*+\240F\342\202\364\201\271\315K\277\"\253<\3376\017Z\374\256\222,\325g\202\240\222\337\332\251\315o\301\254;\373|1\342\262\245\217\006\241d\310\250\374\254\034\325\200\231QLd\340\372\325y\227\0035\235p:\326M\317z\313\270\035k2\341z\326t\353Y\363\255P\231*\243\246j6N*\274\211\315>\004\306jO/r\223M\tM$\251\250\367\357j\263\n\326\205\272\363Z\020\036EkZ\234\001[\026\235Em[\034\001W\003qR\243\374\264\330\344&e\002\272}9\360\242\266\255e\303\n\334\263\227\245j\333\315\203Z\020\315\234U\330e\255+yzV\234\022\364\255Kis\216kZ\322~\225\261k6Ei\332\315\310\255\253I\272s[\026\262\342\265\255\244\334\005jZ\276\302\ro[\260\226 \001\346\256[6~S\324U\3458\025r\303S0\037/\031\004\326\374\027J\n\266z\325\271\245V\217#\275b\353\314\242\323\025\235\245\034 \255u\223\212<\312v\372Q%%\304A\243\363\007Q\326\277.\245\202\253\264X\250\035=\252\254\320\326E\375\256\354\326\025\304\005I\315Uh\3526J\221:b\207L\212\247p0\re\334t5\227p\275k:t\353Y\327\tY\263\245g\314\225Fd\346\253\030\262j)\023\002\253\230\367\032\230C\201\2009\247In\321\257\265F\220\344sL\270\217\013\357U\241\214\212\275\nb\257\302\265v\005\371\253Z\333\265kZu\025\255nzU\321\322\237\t\311\"\246\267@.A5\320Y\234\001\212\324\267|b\266\354\344\340V\245\274\225\241\014\225z\t+J\332NEiC\'J\324\265\223\245k\332\266qZ\366\256EjA/J\326\264\233\2475\265iq\310\255\253iq\203Z\320>@\255{\t\366\220+^1\270\206S\315^\214\357L\036\rX\323b\016\344\267j\325\332X\214v\253V\323\231\030!\350+#\304\327\037:\240\246X\035\261\212\276$\342\223\314\245Y}\351\333\375\352A&Q\327<\021_\231\217\017\265Wx2j\026\200\n\251<x\315f\335C\220k\n\372\337\236\225A\341\305B\320\360q\326\201\023*\340\201Q;\024|\036\235\252\235\310\315e\334.sY\363\245gN\225\235:u\254\371\322\250M\035P\232:\203\313\250%\210\365\246\307\0179\251\241\205K\023\336\246h21P=\261AUe\2148\301\250\243\207\025r\030\252\344i\264U\253u\311\255;u#\025\255j1Z\220qW\223\221NE\303\324\355\230\3105\263\247\313\225\034\326\254\r\322\266m\033\345\255+y9\025\243\034\230\305]\267\222\264\355\345\300\253\360M\222+Z\326^\225\265e.1\232\331\212PT\021\326\255\3036\010\346\265\255&\367\255\233I\272V\335\254\374\n\333\261\234\025\000\365\2558\'\001\206\rm\332O\225\034\326\224RdU\333V\332\331\255\024\227\006\255\304\341F\356\365\313\352\367\006\343R\306x\006\257Z\266\024U\235\364\206JA%<K\232\2229:\212\374\336|\265Wu\371\275\2527@\001\346\252\274j\315\315Q\271\200\020p8\254[\273B\306\250\315`q\300\252\302\324\251\344Sd\212\252\\\301\225\'\270\254\311\324\342\263\346\\\325\031\323\203Y\323\245P\232:\317\236*\243<UFh\252\273EP\264{\210\030\241\342 `T\221E\264T\255\205\025Zg\315Vhs\223\212`\217\025f\024\253\033\t\305\\\264\217\025\247\002\364\255+q\214V\234\0035z!Sm\357N\037\274\030\255]>2\2522kf\014\n\322\266~kN\335\273\325\330\237\232\320\267j\320\211\372sW\355\344\306+Z\326P1Z\366\222d\212\327\206l(\346\256\305?\"\265\255%\3169\255\233YzV\315\244\335+^\326_z\327\266\227\245j\332\336\210\310\004\361[\026\267\"N\207\"\264!\234\2560x\253\320\334n\031\315Y\232\360G\003s\316+\231\205\374\333\246s\3175\261\013\340T\276e4\311G\231J$\305K\034\265\371\326\310j\027CU\344CU\244J\255*\022*\214\260\363UZ=\244\344f\252O\021c\234UG\206\252\334E\301\342\261\356#\344\214Vd\311\203U&\217\212\317\236:\2414}j\224\321V|\361\342\251I\026j\007\213\216\225\032\301\311\342\217 \263t\247\3718\250\245\214\232\256\320\0269\305K\035\266\374qN:\177\034SE\267\226zT\321\245[\2011Z\020\247J\275\002\364\255\030\001\342\264a\253\000qL\013\265\301\025\261c\312\212\324\204\326\205\263d\326\235\273U\270\233\232\275\023\220*\314S\020j\375\274\347\212\326\265\237$s[v3q\311\342\264\343\270\316\000\351W\355\246\311\025\257i.1[\026\223t\346\266-&\351[6\222\364\255{yx\034\324\302B\356\006q]\006\234\306(\302\326\264Rg\025ie*8\254\333\355BS\362g\203RY\r\252+I$\300\247y\224y\224y\224\242J\2229pk\363\366D\305@\351\355U\335*\274\211U\244O\312\252<|\221\212\255,UVH\252\244\261\342\263\256W\322\261\356\301S\300\315e\334r\346\253\310\231\025Jx\252\214\321U\031\342\306k>X\267\032\255,\030\355UL98\247\233m\213\234SV\037jSoQ\233\\\236\2245\237\035)c\264\301\351W\"\264\335\332\222]3\'\245Vk#\037j|\021\035\325\241\024X\253\221&*\374\002\257\304\274T\340`PFMhX\223\200+Z\002I\255\013~;V\204\007\200j\334M\310\253\321\277\025b#\3175z\'\002\264\255\037\221Z\366\367\033@\253\366\363\022kN\326r\254+j\322\\\343\232\327\264\224\006\031\351[PH\027\005O\025\257i7Nkb\332P@\253\366k\346\\(=3]\034cd\270\355\212\2215\010\343l\026\253\261\337\251\\\346\250K/\235>{f\257@\330\025dKK\346\322\211)|\312z\275H\217\315|*\366\204\214\342\252KnA5Y\241\347\245U\236-\247\030\252\217\021\367\252\323G\216j\254\242\252H*\224\303\212\315\271\\\346\263\314;\211&\260\356Sl\314=\3523\037\025ZX\252\234\220Vu\314]\252\253[`t\252\263C\236)\022\310(\311\034\323&\267\364\024\301o\2008\243\354\304\362h\362=\251~\317\305\t\006\343\214U\230\255H \212\274-\303\307\323\221P\275\206\361\322\253\235<\306r\005L\220z\212\261\0345a# \325\310\201\305N\001=\252x\241\'\234U\373U\n~\225\243l9\315i@\277(\253q\364\2531\034U\310\317\312\rX\213$\361W-\301&\264\341\220 \000U\310&\311\353Z\226\262\364\255X[v\017z\323\264\270\306+b\332|\343\232\331\265\237\2475\263g?Nkj\326~\0075\261\246\334\004\233&\272kf\022/\231\236\265\231\252@Q\303\251\371I\251l\331\231\002\2268\253\361\240Z\260\217\212\224KO\022S\204\224\360\371\247\253\324\210\365\3614\322\000\010\252.\334\363PH\340t\252\222?Z\253!\315S\225Kt\252\223F@\355T\345F\3015J@Xt\254\371\34289\030\252,0\rb^\307\376\220N:\324~VEC$URX\275\252\233\332\344\344\212\253q\026\321\322\240\216\317vX\212l\220\234\340\n\215\355\360\207\216M4[\361\323\232\r\266i\277e\305/\331\317\245*\333`\364\253\t\036*D\0305aP0\024\255\000\364\250\214\003=*\3046\252EN\266\2438\251\343\267QVc\205}*\300\213<\001C\017(\200*\375\2708\031\255H\324\355\002\247F\355V\023\214U\310\233\214U\330_5r\'\355VQ\200\357Va\223\006\265\254g\000\363[\020J\0161ZV\354\t\255Kc\216\225\253k)\030\255\213I\372V\325\254\335+R\322\343\0149\256\256\306\340\213r=\252+\373\201\344*\236\244\321e.\334\003ZK.E=e\251\004\264\365|\324\201\300\247\253\324\213%J\217_\023\3149&\251\312\300f\251\313(\025JI\200&\253Ir*\264\267 \n\243-\316MW{\232\200\270c\305E4[\201\342\263%\207\004\212\316\275\201H\317qT\302\202*)#\252r\200\rA \310\252R\303\274\364\251\222\323\021\364\250\236\316\241k|\016\224\337\263dt\243\354\270\245[`h6\234\322}\227\232C\001SJ\261{U\210\343\305K\345qLhFx\251\"\\T\313R*\232\232!\203W\"\003\255D\356\036o\245\\\201\271\025\246\222t\315L\215\316j\324m\322\254F\334\325\250_\232\273\021\343uL\222d\325\350[\201W\255\333\007\255lZI\322\265\255\245\344V\255\264\275+V\335\263\216kV\325\272V\275\254\244`V\2242\343\006\266\364\335Q\261\260\236*\335\305\307\231\036\017^\324\353yH\357Z\021Np9\251\326Z\225d\367\251D\225 \222\236$\247\254\231\251\322J\370\276\341\272\326e\304\230\315f\334I\311\254\351\24695RI\210\252\322LMV\222J\204\266ic\034\324\356\233\227\212\247=\271*Me\334A\273\"\250\313hb \343\203Lk}\313Y\363\332\260n\225\t\200\221\322\221m\366\366\247\210\370\351P\313\027\265W\222\023\212E\204\342\232\326\364\236A\002\232\024\255<a\2527#8\3055W\236j\322\"\342\236TP\020\032@\270lS\302\324\250*U\025a8Z\2451+q\327\212\322\265\354kN\"\031y\353S\240\342\255G\322\254G\332\255\305\305YS\232\261\037j\267\013\342\257\300\365\247o&\010\255[i9\025\253m/J\326\265\227\221[6\222\364\255X$\351W\343\233\013V\255f\"E\364\315l\313.\000\036\325,\022\344U\330\245\253Q\313S\244\202\245\022S\326J\220IR,\2252?5\361\235\323u\254\273\203\326\262\356\033\255g\314\335j\234\215U\235\252&\031\246\205\247\257Z\263\030\342\234\326\371Rk\032\3460\256ER\272o\335\355\305E\034\213\264\206\\c\275V\221\222B@\250\315\270\013\234Tm\006E3\310\3155\255\363\332\242kL\366\246\275\266\301P\264x\2460\342\253\310\330\250K\212ap*30\024\013\275\275\352T\275\315K\035\330&\247F\337\315L\253V\026\335\230p*U\260\227\322\236\266\314\235H\250\'\265-\310\2536\237\"\341\252\354O\310\305_\210qV\243\006\254\240\253H8\251\307\0252IV\"j\275\003\364\255;w\340V\235\273\326\255\264\235+Z\326N\225\257i\'J\330\265}\300V\214c U\270\001R\017\275_\363\2677\322\254\333\311\305^\212J\264\222T\351%L\262T\212\365\"\275J\257S#\327\3077#\255e\334\360\re\\V|\335MS\222\240aM\013N\021\346\205\217\346\253\360\333\022\0056\372e\202-\253\367\215aK\226$\325+\210\213\236\005Ux\335F1P\254$\276J\325\203\025E\"b\230\253\3159\242\3435\021Zk\240u\367\252\023\251SUY\260*\244\317\326\252<\270\250$\270\305Vy\311\246\371\204\232\236-\355\320\032\320\202\322f\306\024\326\224\026S(\031C\217\245hAc#\014\3545a`\221;\032\2272\250\345MR\270\224\202wg5V;\354>\030\344U\320\302A\225\306*\324\033\200\351Zv\255\225\031\253\250*\312U\224#\025(\351NNO\025f/z\271\t\255\033w\306+R\331\262+J\335\361\216kZ\326N\225\257j\371\305lY\311\203Z\366\357\221Z\266\252\036\022s\323\232\256\327b\'#5=\265\372\221\214\326\235\275\300lsW\242\222\255\243dT\201\252Uj\221^\246V\251U\253\344Y\343\316k*\356<f\262.\027\255f\316\265Q\326\241e\240-;\245X\265\203\3149=\005M4\273F\026\263g\206I\333-H\272y=\251[O_Ja\323\224\216\202\253M`\024\036*\204\220\355\'\322\252\310\273\217\025\013.\323R\006\004S$\003<T8 \373T7\021\006\031\254\331\223\031\025\237p\275j\204\252M2;7\231\260\007Z\277\017\206\346\223\037)\253\366\376\021\225\230|\204\217\245t\272g\202\001\332\305@\365\315t)\341x\"\213\260j\226=\036\335T\002\006j\177\260B\006\024\n\212M&<\356\030\315 \322\223\030=\353\033U\320\202\222Pd\032\347.tgF-\264\212[[IC\200\001\255\350t\346x\200\350{\324\360\3324x\006\257\307\027\035*\312E\305\007\217\245*\314\007\031\251\222Q\330\325\210\344\315^\200\212\320\204\214\n\275n\370\255KY2qZ\226\317\203Z\366\222d\212\330\265~\230\255[y3\212\325\262\230) \236\242\252\313n\3573c\246jX\354\244Nz\217j\275k\346!\343\221Zv\363\347\031\353Z0\311\232\260\016i\352\3252\265J\246\245S_*\315\027\006\262\257!\340\361X\2671\3435\227:rj\233\246\rB\313M#\024\306\342\264\254X\030\033\007\232\226;_0\232\220\331\205\355H\326\370\035*\264\221m\250\030\340\323^!\"\326u\325\260\301\343\212\3111a\315V\234\000MT3a\251\333\367P*9y\025Jh\263\232\245%\243Hp\005I\006\201$\25420+\250\322< \2743\014WW\007\207a\211\027\"\254\255\234p\214\005\006\206m\2358\250\213\223\336\241vaQ\026`z\322y\344w\245\027\'\326\237\346\253}\352\253wo\024\312x\002\251[\332\256\376\235+EaU\031\357H\341s\322\237\030\305N\203 \325Y\246Q\221Y\222\\\235\334U\233{\254\220\ri\301( V\215\264\203\"\264\340l\325\310\233\025\241l\374\212\324\267\223\245kZI\310\255\233Y1\212\325\267\223\245i@\371\253\321\r\3075z\036*\307\226>\362\360i\254\177\210p\302\254\332\334g\275iD\331\002\246\025\"\366\251\224\324\252k\346\033\210\375\2532\3610\246\260\356\243\353YS\307\212\241*\363P2\324ei\215\021=\252{V1\214z\326\326\2367)\315K\"\222p\005G\3441<\364\252\3271m\004\342\250\030I4\215\031Ze\314@\302Ms\376Qi\210\3056\366\304\210\211\002\271\367]\256jt\\\323\366\340Tn3O\202\301\356O\312+sM\360\3039\037-t6\372\0046\340o_\232\256\254i\020\300\034\nG\234t\315@\363\016\325]\230\261\246\347\024\307l\324L\325\033T,\330\246\371\207=i\255&z\232\026P\247\201R}\243=\371\245\017\232\235\033\245N\207\000\325\013\370\\\002\313\322\262\262A\346\245\216J\320\264\234\214\003\322\266-\311 \032\326\266c\216j\344rsW\255\236\265m\232\265m_\245lZ\311\220=k^\331\376QZ6\357Z0=i[\277J\272\203#\"\2334$\374\313\326\241\001\243;\207\036\265\245gp\010\034\326\214GuM\267\035\351\301\200\251\021\301\353_5\3163Y\227`\021X\267j0k\032\351z\326|\213\223Q\024\311\251a\2632\036G\025pi\343\035)\321i;\333\245j\333\351\315\n\205\333I$!\r\002 \027&\250N\252O5Y\325\024\034\016j\234\261\226\'\024\010\267&\rVm>8\311lsT\357\343\002\006\372W\0374d\314q\353S\305\021\305\022\220\253P\306\246I\000\002\273\017\017\350\316\352\245\224\201]:[\375\235p\000\250%~\271\353U\245sP\026\037\215F\306\230^\243g\367\250]\275\352\"\324\205\35269\250\230\342\230M0\265>3\223S\241\251\321\252t|\n\227*\351\202:\326E\375\250F\312\212\246\251W-\301\310\255\253\027e\300\307\025\261\003\374\242\254)9\253\326\315\322\265\255\237\030\255[W\351Z\366\255\322\265m\344\351Zp>\000\255\033w\351ZV\357\322\264\255\3335m:\322M\010+\221TQ\374\231=\253Z\326\340\260\030\253D\263z\323\323=\307\025*\360+\347\031\216Ee\335\036\265\217w\336\262.W9\252\016\274\323\355\355L\215\322\265a\263+\2161W`\261.y\025\257i\247\242\014\220)oBE\031 V3\2171\252;\203\204\300\254\331\006j\264\253Q\343?Zr\216*)\243\334\rcjh\3026\035\253\231\223lls\326\241k\200:\032#\205\356[\200Mt:.\207\231\025\230\034\327on\213m\030\003\265Csq\357Td\220\363P\261\317Z\215\210\025\023\265B\362T\017%D\322TM\'\2754\311\212cKQ\2313H[4\231\247\241\301\251\321\261\326\245W\251\003\361RG-GpC\325U\210n\253q\"\016\225\241m(N1ZPO\307\265YY7\021W\255\337\245jZ\266\354V\265\261\306+Z\331\372V\255\273\326\235\273\361Z6\355Z05h\333\311\214V\204o\220*br\275k:\352=\255\237Z}\225\301F\332kb\031\262\005XYs\326\200y\342\276s\235\260\246\262\256[\255e\\\016\246\263g\\\346\252y\005\233\245mi\366\003\000\342\264\322\327\'\245Z\206\337\025)8\004\016\225\237|\373\360\243\265T\021\361U\356\027\"\250\272\346\2420\356\250\332\r\204\322\004\004{\3243.+#T\000\306k\224\276E\004\200r}\252\265\275\223H\343#\212\3514\353\017,.\027\223]=\224Ko\020 sR<\205\252\ty\252\355\234\324r\022\006*\264\217\212\256\362\324/)\250\036J\211\244\246\027\250\313\323K\323\014\224\273\351C\373\323\204\225\"\311R\031\302\323\222l\367\251VNhg\007\2751N[\336\254\307\"\216\265n\t\320\340\003Z\020\363W\241Z\273\017\030\255;g\306+Z\325\267b\265\355N1Z\226\347\245j[\266p+J\003\322\264!n\225~\026\255\010\037\"\254)\315G2eH5Er\262\326\275\261\312\214\032\266\244\216\265\"\032\371\302s\301\254\333\203\220k6z\244\351\223S\331Yy\2568\256\212\336\314G\030\030\251\374\2208\002\207]\213PH\333S\336\250H\274\346\243#\212\241t\3308\252\330\335K\260(\250\244\301\025\tQ\237z\255p\007#5\211{\013\3341Px\252gD\003\255hZ\350\361\306\025\261\315Y\220\210O\000\017AR\307;Hq\333\025d\374\251\315V\232u\214d\326e\306\254\221\223\363\014\n\316\223\304\n[\007\245!\326\240=M!\277\216O\272\302\232f\r\322\241i\306z\324/8\250Z\344z\323\r\310\354j)o\002UI5uN\207\232\256\332\301=)\351\2531\355R\215I\332\256AvH\344\323\332v~\202\245\212VQSy\315\201\315=f\317\006\255\301\206<\324\330\031\342\254E\016pz\032\277n\356\270\007\245jC\222\001\253\261t\253\366\335\253^\320\364\255{bx\255H\017J\322\266n\225\247nzV\204F\257@\325~\006\306*\342\232s.\345\254\373\210\214O\270t\253Vs\340\212\323G\334*d\036\265\363}\301\305f\\7Z\317\224\346\231\034%\334\014V\376\237c\345\200kGf\005\004\004\\\367\252\362\020G\277z\2473rMU~\336\265^i6\016\274\326m\303s\223U\314\240rM1\256\206p*7\270\035\315U\232\375P\360y\254\255CS\010\244\203\363UK]QI\311<\325\365\270\363\263\216je\225\207\025^pI\311\244\216\343\312\374*\246\241\342O$\220\017J\347\257\274G,\331\001\270\254\211oe\224\234\223P\231\330u5\033\\\340\3654.\242S\241\251\023[x\377\000\213\212\265\036\271\014\203\34685f;\330\245\034=2b\243\220sT\246\274*>QY\3277\256\375\352\231vcS\301\0331\034V\254\026\300\n\260\226\313\234\325\250\343\002\245\010=jQ\267\035iZt^3B\3123\307J\267\014\335\006j\354n\030\325\350z\n\275\026\033\002\265-\027\034v\253\351\000+\221V\255\306\rkZ\216\005kZ\366\255K~\242\264`\030\255+sZ\021\032\275\r^\205\252\354G T\353\315G<a\224\212\251\010\301\372V\255\273dU\265j\371\256\345\261\232\312\2709\252\333\t5\241\247Y\231$\034WK\035\247\226\203\216h1\001\311\351U\346#\360\252S8\002\251H\374\373UYX\3475VE,rj\225\331P\017=+\036\342\343\223\315R\226\353oz\241>\240\300\234\032\241q\177&8\254\273\251\244\233$\223Ie\2748\004\344WQf0\202\256p*)\230\216\365\223}}\034\010\334\363\\\275\345\301\236BEV\021\026\241\202\245S\271\230\n\243$\365]\356}\352\007\271\367\250\374\362{\323\243\277\222#\225cV\223]\224\0141\310\251\006\260\033\255/\333c~\325$R\302O<U\250\246\213w\rW\242\221H\030j\262\216\001\306i\306\351\023\253\n\211\265\020~\355 \272$rh\022\022j\324.M^\210\222\271\025v\006<V\225\273\234V\215\277Q[6\377\000(\007\034V\234+\2712*X\206\032\264\355\273V\275\267j\324\203\214V\205\273V\214\rZ0\034\325\370M]\213\030\253p\234U\244\034\323\335r\265\234N\311H\253\2609\035j\364m\232\371\256\343\232\250\320\026=*{}1\244#\216+\241\323\354\026\025\034U\346P\001\252\023\311\270\373\016\325\237pI5M\321\211\252\322\214\036j\007#\025Rf\302\222O5\203\250]\374\304\003X\323\315\326\250M!&\2537Zr\302\262\256\332\211\264\302\t\307JrXy|\343\221Wa\224\307\301\025?\333A\035*\031\256\013\247\035k\n\366\302Y\234\223\232\244t\326S\3104\311\2410\257\002\261oge\'\255e\313+1\315Vy\rWw5\037-OX\211\247\213fn\324}\225\251\206\022\0174\365\217\336\236\261\267\255J\233\207CV\342\232A\336\254\013\211\010\353H\031\330\362jTr8\251\343rOZ\267\020\315[\211qWa\223a\307cW\341 \342\264\255FqZ\266\353\214V\315\250\312\n\320\204\341x\251\243\353\232\320\203\265j[61Z\326\315\232\323\200\016*\3645\241n\330\255\030Nj\354&\256GV\243j\235y\252\263[\203&EJ\220\235\276\3654LT\340\327\317\r\021cWmt\354\000H\346\264\255\354\200\355W\026 \213\305W\270\311\310\007\212\246m\313\223\330Ui\242D8\316MQ\230\021\223\332\263\347l\236\225VG\306I\254-N\377\000\222\250k\ny\t\315R\220\222j\273\255B\313MV\330}\350\222\377\000`\347\232\254\372\244\204\035\243\212\245.\255(n\365$\032\204\222\2209\2558e\332\240\267Z\223\355\nN1Jv\260\344U+\273_1\t\025\203w\242\3110\'mb\335\351o\027\360\232\240\326\016\307\030\250\333L|\375\332\016\234\361\214\221\212ER\247\356\322\264\205GJ\214\316GZ]\352\302\230H\024\3372\245\215\271\253\220\220z\324\374b\216\224\340y\251c\253\2216*\354OWa\371\306*\324\005\24385\261f\331\305k[\267J\330\263#\025\245\007\245ZX\270\253P\014\032\322\267\353Zv\315\322\265m\333\245h@j\374=\252\374\007\002\257B\335*\374G\"\247S\212\231\036\234G9\253(\240\2504\331\"=@\346\274\036\326\333{\214\212\330\212\3338\030\253in\024Se\001G5Q\223~Y\270QY:\226\244\261\215\221\234V\024\327\344\022sY\363_\261<\232\214\335\356\035k7P\2758*\207\353Xs\222I\252\222.j\263\216j\027\025\t\031\353PM P@\034\326|\304\261\247\333G\271\271\351Vd\323\222A\220\274\323\241\262\362\207\000T\305\002\236H\2464\241N\027\006\240\222Y\273SE\323\001\206\246KxB\220\005g\\\\+\003\271j\213I\026N\000\315\"\250f\366\247K\022\025\371\261Y\323\311\014@\2163YS\302\327\014v\036=\252?\354\227\352^\221\264\367N\206\233\3667c\212\232-=\217z\266-\243\205>c\315F\030\026\300\251\325}\352P\234u\247\244Y\351V#\204\372U\230\323\025n(\201\253p\256\323\232\321\200\207\306kN\325\024\034\326\275\263/\025\247l\000#\006\265!5v\003V\320d\364\253\366\353\322\264 \004V\225\253t\2558{U\370M_\210\364\253\220\265_\205\270\2539\371i\321I\223V\243!\2705f<\247N\2253\200\353\307Z\361\013Kb\244q[1A\265A\305#\214U;\211\025\017=+\013V\325\225Wb\034W1qu\274\236j\205\304\370\357T\214\273\3155\330\343\212\2455R\220UY*\263\212\201\361U\344\3438\252\0236I\252\256Njkm\331\315Y{\262\0063\305C%\353c\013\305A\346\263\236X\323^b\243\216*\023s&xjc\274\255\357U\244i\333\216j\t\022Le\316\005T\373DH\3075Z}c\3138E\342\263nu\211\\\3655\237%\334\222\036I\251\355\256\345A\200j\332J\355\311&\246RMH\033\002\233\346\260<\nO*I\2179\251\343\261+\311\251\226\n\221a\366\251\222\022\2475:\236zU\230\3005j<\016\225a\006j\324C\030\255\033w\351ZP?J\325\265\227\245j\333\311\232\322\267l\342\264\"\347\025\241\006\016+B%\300\253\220\034\032\324\267n\225~\036\325z\023\322\256\3048\253\260\232\262\\c\002\230\247\232\265\024\244b\257\305\'\034\324\353\310\3105\377\331"
+byte_png: "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\002\000\000\000\002\000\010\000\000\000\000\321\023\213&\000\000\001\212IDATx^\355\3351\016\3020\014\005\320*\367\2772\025\003\023FA@U\322\374\2747z\214\322V\262]{\333\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200t\255\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\270\275\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\230\314^\003\000\000\000\000\000\000\000\000\000\000\000\234\257\325\000\000\000\000\000\000\027rh$\207\0240\000\000\000\000\000\314AN\037\000\000R\035j\377\001\000\000\000\000\000\000\000\000\000\000x\245M\031\000\000\000\000\000\000 \221j0\000\344\361}\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200\261\354\026\004\000\000\000\000\000\000\000\000\256B?\023\360\244\325\000\000\000\000\000\000\000\000\314K\031\234\0077\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`$\323\240`U6f\002\000\000\000\000\000\000\000\000\000\000\000\000\000\300\347\374\237\013\014\324{\005\031\034\322\321;\260P\267\032\2005,\366\244\003\000\300\202$>\000\000\000\022\250\351\000\000\360\206b\000\000\000\000\304S-\002\000\000\000\000H%\003\374%\007\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\315&\026~b \001\000\000\000\000\000\000\000\000\000\000\000\374\335\035/,\023\360\002\312$\322\000\000\000\000IEND\256B`\202"
diff --git a/core/res/geoid_height_map_assets/tile-5.textpb b/core/res/geoid_height_map_assets/tile-5.textpb
index ac2a9ba..0e43c84 100644
--- a/core/res/geoid_height_map_assets/tile-5.textpb
+++ b/core/res/geoid_height_map_assets/tile-5.textpb
@@ -1,3 +1,3 @@
 tile_key: "5"
-byte_jpeg: "\377\330\377\340\000\020JFIF\000\001\002\000\000\001\000\001\000\000\377\333\000C\000\004\003\003\003\003\002\004\003\003\003\004\004\004\004\005\t\006\005\005\005\005\013\010\010\007\t\r\014\016\016\r\014\r\r\017\020\025\022\017\020\024\020\r\r\022\031\022\024\026\026\027\030\027\016\022\032\034\032\027\033\025\027\027\027\377\300\000\013\010\002\000\002\000\001\001\021\000\377\304\000\037\000\000\001\005\001\001\001\001\001\001\000\000\000\000\000\000\000\000\001\002\003\004\005\006\007\010\t\n\013\377\304\000\265\020\000\002\001\003\003\002\004\003\005\005\004\004\000\000\001}\001\002\003\000\004\021\005\022!1A\006\023Qa\007\"q\0242\201\221\241\010#B\261\301\025R\321\360$3br\202\t\n\026\027\030\031\032%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\203\204\205\206\207\210\211\212\222\223\224\225\226\227\230\231\232\242\243\244\245\246\247\250\251\252\262\263\264\265\266\267\270\271\272\302\303\304\305\306\307\310\311\312\322\323\324\325\326\327\330\331\332\341\342\343\344\345\346\347\350\351\352\361\362\363\364\365\366\367\370\371\372\377\332\000\010\001\001\000\000?\000\355\240^@\305^\013\307J\216D\364\254\353\333c$$\250\344W){\033\243\220Ee\274\233N\r@\347q\247\305\037\034\212{E\362\325)\243\366\252n\265\003.j\'LT,\202\253\3128\252\216\224\325\213-Ne\3300*\027\250\271\3154\266\005B\314sQ\371\204S\322\343\007\232\237\355q\221\214b\241\231cu\'uQ\026\310\344\232\206k4\301\305f\313m\206\351Qy\030=*T\213\007\245[\2163\351V\0211\332\234\"\311\351R,>\324\343\032\251\353\212P\201\272\232pD\035\251\331_JQ\317AOU\377\000f\236\0015*)\253(*\314k\236\325j5\301\253\321-^\205j\374+\322\264!\216\257\305\035\\\215qV\343\025f5\346\257B\231\253\221\245[\212>j\322\200)\341\373\nx\315J\242\247\215FsS\203\307\0252\034W\017\034D6E[\t\224\2462\014sPI\030\333\310\256wW\262\004\026Q\\\205\344L\214qU\"$\310\001\255\025N\001\245#\212\247:\216j\204\213\315@W\006\241p*\273\325i\0275\003-4\014Tl3P\277&\230W\212\214\255F\313P:\324{M;i\244*\304w\244\021\277jw\222q\363S\r\242\021\234\212\257%\262\251\342\230\260\200zU\210\340\'\265YX\000\\\232v\305Q\3154\221\351Q\225\014zT\212\240p)\342<\365\247yB\236\261\014p)\333\0058%J\213S\242\325\230\326\255\306\271\355W\242J\277\014}+B\030\353F\004\253\261\216j\324kV\243Z\271\022V\204)\305\\D\346\256G\036\0274\214\010\247 \251S\255L\271&\247\034\n\2259\002\255\302\231<\327\036\251\206\351V\226!\266\242\222,s\212\257\"\022\207\025\221y\021\332w\n\3455\033#\274\2208\254\'\210\3077N\365z\026\312\ns\217J\2470\311\252\217\037z\255\"sU\234T\016\271\250]8\250\031j&\025\036\332\214\307\363S]qQ\025\2462\324f<\320!\366\245\362}\251\2736\236E5\363\216\006*\003\274\232M\222\021\306iD\016\335jT\265\\\344\324\3425Q\300\244a\336\240`\305\263\212M\2714\241\005H\261\343\232\220\001N\243\236\324\000jE\0254jI\253(\225f4\253q%^\2059\351Z0\250\035\252\374J8\253\360\255[E\253Q\255\\\211j\354I\322\257\302\265v5\351V\321N9\250\237\031\241jd\0315a\027\002\244\0315j\024\030\315[\207\357\375:W*c\300\251P|\234\320W#\221UZ<?\326\251_@\032\"}+\005\355\204\214A\025\316_\332\005\231\270\252\211\031S\212{\003\212\253\"T\016\274UY\024sU$Z\256\302\243+\232\201\322\242)\3154\307\3050\307Q\274f\242)M)\232O/\232p@\0055\360\005@\334\3230\017\024\2061\236\005H\213\330\001R\010\217\\T\236_\034\212aJ\210\241\'\035\0055\220\0163L\010=i\330^\324\240\032x\\v\245\333N\013\223O\tN\013S\306\225m\022\254\306\236\325n%\253\261/J\275\020\351W\341Z\277\nU\324J\265\032\325\310\226\256\304\265v!\322\256\305\305L\317\204\305A\324\346\244QVa\025aG\313OE\346\254\246z\n\265\n\363\\\361\217\'\2458G\201HP\212\202H\362sT\356\223\367f\261\204_\276<u\254mV\334,\205\200\254GQ\232\215\252\031\007\025ZJ\251\"\325gC\232\205\243\250\3323\351P\272T,\2304\004\310\244)Q\264y\355Q\230\275\251\246/j\214\307\212c`T.\t\250J\232@\2252(\034b\244\300\035)G\245;\006\220\257\025\023c\322\241h\363\336\223\312\367\024\345E\247\200;\nx\217\"\227\313\301\245\331N\333\3058\016j\304kV\343\\\325\250\322\255F\265r%\253\261/J\321\201+F\024\342\256F\265e\026\255D\265v!Wb^3VPT\233{SJm?Zz\212\23585aNjd\034\325\250\327\240\253\210\002\212\303\331\355F\314S\031j\007\025Ru\005H\"\250\033|\022\330\254\035Wo\314;\3277\"\220\306\240aQ\225\315A\"\014\325y\020UwQ\232f\300i\215\t\003\245@\361Ug\212\231\267\024\205)\n\037J\214\2450\256;TN\265\003\'5\031Z\214\257=)6\201Hr)\273\232\234\254jEcR\003\3051\2004\302\202\233\345\344\373S\304j=\351\352\200\366\251Dy\024\246>\370\244\300\317J@\311\273m</5b%\342\255\306\225i\005[\215j\344IWaNkJ\004\351Z1\257\002\255F\265f5\346\255\306\265n1W\020|\242\254/\025*\323\312\345y\246\250\346\246QS%Z\211sWbL\014\221K,\253\032\034\232\317+L\306\005W\235\302)\365\254\311.\333uBf2\260\024\267\001\226\330\221\326\271{\341\271\215c\313\027=*\263EQ:`UY*\254\202\253\272\324}\rI\031\007\345=\r6Hy\252\317\026:\212\201\243\246\004\244)L)\355Ld\250\032>j\027Z\201\226\243+M\"\215\200\323J{P\023\024\365\000\324\2332\265\023)\007\212L\032x_Zz\306\rH\020/z^\005!q\332\232y\246\264Y\0359\251a\004\214\036\325n5\307j\267\022\325\264^j\324IW\241J\275\nsZ0\'J\277\032\364\253q\255Z\215*\314kV\321p*\312t\251\226\246_j{p\264\325\353S(\2531\246E\\\213\n*Y.c\212<\2223XW\332\226\342@<V\231\036\325\023\234\n\312\274s\222+2CE\270\335\'\025r\347\002\034\037J\347/\"\033\216\005eK\027=*\253\246*\244\313\305g\312\016j\006Z\217f{SZ\016*\r\245Z\254(\336\230\357Q\311\027j\254\361\032\204\246\r\0052*&Z\215\205B\353P:\324\014\234\324e)<\261\232_.\223\313\244)J\261\340\346\236\334t\250\233\336\220\001N\033E(qA\220b\242.I\342\234\240\232\231\022\244\333\315.\3148\"\255\304\271\253\221\247J\267\032U\270\222\257\302\235*\364)\322\264a\\\n\273\032\325\270\326\255F\265f1\317J\235z\324\350je\353V\242^3H\344g\024(\253\021.\346\0259\221cS\236*\244\372\232\247\nk6\343Rg\007-Tw\264\357\355]\211\342\241\224qY\027c\255g\312>Z\257o)I\352\335\314\341\227\255eNCf\263\245A\232\2472b\250L\274\032\317tl\364\250\2323Q\355\3074\326\344qQ\030\211\355RD\2305+\304\010\315V\222,\366\252\357\027\245B\321\221Q\262\032\210\247\034\324L\225\003\245BR\230V\233\266\223\024\204RS]\261\322\242,M\031\244-\351M>\244\322\026 qM\3114\365\031\251\220T\3523R\201\3058\251$\n\267\014d?>\225z4\342\255F\265n%\253\320\255_\205zU\370\226\256D1V\323\000T\351\326\254\307\232\234T\3103V\021y\253 \355J\213\253T\310\274\325\204;W\245W\271Y$S\316\005a]\220\231\033\263T\025\232Y1\236+N\004\n\242\273\006\002\240\227\001I\254[\2627qY\316x\"\251\225\"\\\321+\035\330\252\3563U\2359\252\263G\221Y\363FA\351Ud@*\006@{T\r\037\265 \200\372T\202\334c\2455\241\332sJ\027\326\232\360\2022\005Vx}\252\273\307U\3351P\262\324N\265]\327\232\214\255D\311Q\225\246\221L\"\223\024\205sQ\225\3054\216iBf\230\350s\3050\202(\003\232\231\026\245\013R\n\225~f\002\256,9\301\035\252\314c\236G5n%\342\255F\231\253\221\245\\\211j\354C\245^\212\255\307V\223\232\263\032\325\270\326\245\003\232\225\0075j0:\323\235\2060)\261\365\253\np\000\251\227\2474\311\220\272\234\032\346\265\004\362\344`j\255\240\033\363Z\212p+\252\226P\243\232\316\270\271b0+6f,MRpsM\332B\356\305VpY\363M)Q\264~\325ZD\346\252K\016{UI-s\332\252\275\271\007\2450[\367\305?\310\366\245\362\206:TRG\236\325Y\243*iW8\344S^ FES\226#\232\252\351\353P:b\240t\250Y*\026^j2\265\033/5\031ZiJo\227AJ\215\224\322,y\352*Q\027\035)\031\000\250\314c\322\233\345\217Jr\255N\023\345\243a\251#R\032\264b\344U\205NEZ\2123\332\257\302\203\035*\312\256*\314KWbL\325\310\324\212\267\030\253q\212\267\030\300\253H8\024\363\326\244\214U\220p*6ni\350x\251U\261O\022c\275L\016V\271\215^P\'j\255fr3Z\000\361]=\316zU\007L\325Yb\246G\030$\356\\\323g\215v\340\014U6\204g\212i\207\035\252\'L\n\244\313\226\250\335\001\025]\222\241\222!\351P\371X\2441\373SvS\035\006*\254\211\315F\023\332\224\256*\274\321\036\265JH\371\252\357\035Wh\352\027LUvJ\215\222\243+\232aZn\312]\236\324\236]0\305\226\351N\021\201\332\224\214\016\005B\352z\324x4\355\264\340\225 S\212pZ\221W\025<M\206\305hF\003\n\265\030\013\203\232\273\031\033\263V\223\346 U\310\243\253\221-[@j\324C=j\334iV\321F*`\330\247\003\232\2318\024\346~)\2523\311\251C\000:\322y\271<t\247+\222j\331p\260\023\350+\212\325n7\336\020\017z\265d\010\210U\302x\256\306x\2623Y\356\254\033\030\2440\356^j\006\210&j\273\214\324;9\246\262\361U&Q\212\242\303\rMa\232\201\227\232\215\227\"\243\331\355M)Q\264~\325\033&j\274\221T^Y\007\245\005)\217\036S\025FX\360q\212\250\350EWu\250\035sP\262TE2*3\036\r1\243\246\354\240!\247l\317\024\236X\035)\245)\n\323\031\001\025\021\214f\215\235\251\301qN\3059G5 \034P2\255W\255\337+V\324\234\365\253\260\223\305h\302+B\030\317\004\325\350\243\253q\303V\2221SF0\330\253\033\200\342\225y\251\223\000\212yp(_\230\344\364\247\026\354:SX\361\232\025\262jh\371p(\324\'\362l\334\203\332\270f\224\315\250rs\315o\333\340D*Fj\357\331r1U\336\021\311\252\316\230\252\362.EVh\371\250\312T.\274U)\224\363T\335y\250\312\324n\265\021Za\\\nf)\n\212i\217\212\205\242\250\232:\215\223\212\210\361\326\253\317\020a\270U\'\217\034\032\256\361Uv\214\347\245B\321\373T&:c\'\2657g\2654\307F\316)\205pi6\032_.\230\340TEM0\251\244\300\240\003N\0035\"\245H\026\224G\223V\241M\275j\334K\223Z\020\'J\320\210c\034V\214$`U\370\270\301\253Q\216r*\300\351O\035jA\315J\265 <R\257\'\232y`)7SX\223J\274T\361\023\274b\250\353\262\355\263a\232\344\254\206\353\242}\353\241\214\341\005\016\374W\245\225\302\346\253\311\320\325)\033\006\253\221\223Ld\2462dUI\020\203U\244L\366\252\217\036\r@\313\212\205\326\242\333C\'\025\026\312@\200\232\0311Q\225\250\231*\027J\255\"\363Q\373\032\255<g\265Te\250\231\001\250Z<\324/\030\025\003!\246\204\244d\346\215\234S\0319\246m\346\224\216*3\036M4\246(1\002)\202\036zS\374\216(\020\034\324\202\023\216\224\276^)Pa\352g\004c\025v\331~Q\232\320\210U\350\372U\310\215_\201\270\301\253\252jd\344T\275\351\312j@\302\236\032\220\276)\003f\236\r>\224u\251\342\341\263\336\2615\3713\0063\326\261\364\350q\363\036\365\256\016\005F\357\305z\254\203\002\252\310\274U_\'{\023Q\274\033y\002\242+\332\230\311\305V\222:\252\351\236*\264\221\340\363U\244QP4t\337,b\230\311\355Q2S6R\025\250\310\2460\315A\"\342\253\025\313Tn\230\2462\007Z\253$>\325U\342\305B\350j\007Z\200\2574l\244d\346\220%&\314\324f/jo\227\315\036_\265\'\225\232C\035(\217\035\251\342<\323\304C\024\377\000+\332\243d\035)\004X9\251\025A<\325\270\260\005Z\211\271\253\321\034\325\350\205]\210\340\325\310\316j\324t\362y\240f\245\\c\232\013\372R\014\232x\025\"\324\270\342\201\326\247P\0262Msz\273y\267\001\007\255%\274B8\305H\315\212\206F\257_q\220EV\221\017LP\261m\213=\315B\312\017\006\252J\233[\332\242 \032\202U\342\251Jv\266j\274\256\254*\233\365\250\310\244#\212\215\210\250\331M7e5\200\025\031\003\322\243+\212\205\343$Uf\217\006\241qQ\021\264\344S\035\327o\"\240\"78\250\244\203\216*\244\221c\265V)\316)6\373PV\233\266\215\264\214\244SB\022zS\374\260GJo\226=)\014C4\024\244\nE=G5&\336)\206<\236\224\322\204Sy\006\247\2175a\016\0105\241n\300\342\264b\305YL\223\305_\210`\n\262\247\002\22795\"\212~\323\212\002\323\324S\300\342\234\274T\203\030\247\306\273\2152\366\341m\355\311>\234\n\347\243\314\363\231[\271\253\'\000T\016\330\252\356\365\355,*2}i\254s\326\241\221Fr*\234\343*MT\315F\374\325;\204\342\2502\235\325\033%FW\024\322*\026Ni\n\234Tnq\305G\3114\204S\031y\246\260\312\325vNMV\225y\250\031x\250]\005@\321\200sM\335\203\212\202^j\253&M&\312B\224\302)\n\363\232P\240\360i\341\024\016i\010\002\243`{SB\234\323\274\262\324\276Q\245\010}*EZ]\225\033(\246\010\213\267\002\257Am\201\310\251\036\330\237\273O\2127\214\362+B\007$\201Z\220 \332\r[Q\212\220S\227\255N\20350\240\n\\sN\002\236\253R\005\251\031\322\010K\023\\\305\375\343]\335\354S\300\251\241@\250(\221\270\252\22275]\332\275\300\217\226\242\"\243j\211\263P:\361T$R\030\342\240b{\324\017\310\252\357\0379\250]*\007Z\205\201\024\303\327\232R\006\332\257*\234\346\230\006E!\024\025\342\240~\016\005B\334\036j)\023#5]\227\031\250\030T.8\250\031p3P5FE&(*1Q2\203L)I\202(\301=\315\000{\324\212\027\034\322aI\342\245D\006\236\312\000\342\243\"\200)[\201U\231\362\330\025z\326/\227$U\261\2000*h\3075dF\254:T\321\333\250l\212\275\032\2201V\024T\201x\346\234\027\0252\034\n\225i\364S\224sS*\324\221\250\316\343\320V>\263x\0262\212k\032\321\tb\355\336\257\347\002\241\221\252\253\265Wv\257u\030+La\336\230\302\243+Q\272|\271\2522\'\314j\244\321\367\025X\255F\313PH*\273\212\205\307\025X\3474\274\342\232F\356)\230\000\321\267\232F\034TE\006rj)P\036\202\241\333\301\252\322\016MWu\250\030d\325yW\236*\002\246\220\255&\321A\034T{i\254\242\231\266\202\231\246\354*iH\371r)\213\220\325aM.I4`S\325\0052D\310\250\243\200\2313Z(\241\020\001OQVcQ\212\263\030\305YC\201S\2415a\rJ\005H\242\234\006)\301\261O\rR/5:-L\253\315%\304\253\014\004\347\265r\027\222\233\213\242\001\34354K\265\000\2473b\253\310\365Y\332\253\273W\274#eqN<\212f)\207\2555\271\030\252\262\256\006j\214\300sU\031y\250\234b\253?5\003\017Z\211\300\"\253\270\301\246g&\235\266\230\303&\200\264\256\237-FS\345\250]qU\334aj\254\213\315Wa\315Fc\357P<|\364\250\032>i\205)\n\323H\246c\232\nf\231\345\322m\"\202\271\246c\007\245!Nr)Fi\3034\361\322\244JW\031\024D0sS\257&\245U\315Y\2163\334\325\244\003\0252\214\364\025*}*u\315XOz\224\nv>Z@*H\324U\230\343-\320U\205\214(\250\347\235`\214\223\332\271\275CSiIU<U;t$\356=MZ\316\005D\357U\235\352\263\275B\315^\363\033\032\260\005.\312\205\320\347\212f\323\336\253\312:\212\316\234`\232\252\315\316*\t*\273\016j\tEC\332\241q\223Q\205;\252]\274SJ\322\016\r9\206V\232W\344\342\253J\274UgSU\335*\273\2450`qM1\006\344T/\t\035\252\022\236\325\033-DE0\320r\005&}\250\340\322\025\244\331N\020\223A\207\035\2516R\355\305(\006\214S\324T\350\242\247A\316jl\340f\254E\261\272\234U\224P:\034\324\243\216\265\"\232\231\016ju\351K\221@\345\252\314j8\253J\301\023\336\206\223j\344\326>\245\177\030VBy\305s\250\014\323\356\355\232\276\200(\024;qU\235\252\273\265WsQ\023^\363\023\032\271\021\334qR\260\001j\034\344\032c\364\252\362\216+>\341j\223\2475\013\241\252\3161U\244\316\352\204\234\032C\203M \003E4\321\301\244\301\247\001\362\325yW\232\255\"\325vZ\205\326\240d\346\233\202)\303\004r)\215\022\236\365\013@\247\241\252\317\0378\246y=\3151\227\034b\231\267\332\224\'\265;e<EN\010E\014\265\031JB\236\324\233)BS\302T\212*U8\342\245^jU_J\225\031\222\246Wby\251\325\215O\035O\277\013M\335R\241\2531\236)\346U\034\223\370U[\273\264X\030\206\344\n\345.%\222{\234\003\236j\344\021lA\305NN\005B\355\305Wv\252\356\325\0030\250\213W\276\333\200\307\025\245\014AFOZl\374t\250\020\363C/\025^A\305R\230f\252\262\361Q2qUd\217\025RH\370\316*\253\247sL\000\322\021M&\222\224-.\323\232w\226@\250\244Z\201\2235]\343\250Z:\211\243\250\232>i\245@\355MaQ\260\342\2532\363@L\323Z,\366\246\030\271\245\021\323\204\\\363N\021\322\025\3057\214\320R\223e!JP\224\241)\301qNQS(\251\226\244\034\324\213S%YN\224\254iTqV\020qR\027\001}\252\255\304\247\313f\007\240\256vi\345\222B\245\2163V-\242P3\216j\346\000\034TN\330\252\2621\252\257!\252\317-@\322\023Q\0279\257\241`\005n1\357Z\352\006\320qP\315\311\250@\305.2*\t\005T\221rj\263\246*\"\271\250dL\325Y#\305Vx\262j#\026;To\037\030\002\232\260\023\332\217 \346\236\">\224\361\027\265)\213\"\240\222.\rUd\250\331\006j&\217\332\240x\352\"\236\325\023%4\245F\321\361P4DR*\034\323\214d\016\225\036\337QO\021\361K\345\361\322\232@\025\033\014\232f\312B9\247\201\305 \\\265<\247\024\230\346\214{R\201\212\220T\202\244Z\225z\324\311\326\254)\342\224r\334\323\267\000i\341\317\2552Iq\225\007\232\251.\346\3435VK\022\351\272#\363\016\265\n\273A&\3118\"\254\254\301\207ZF \214\325i\031q\315@\301J\014\n\204\307\023\003\203\315C\373\224\310\3175\032\307\026\342Y\270\257\241b\205\214\275*\371R\261\363P`\263R\355\246\221QH8\252\2169\342\240e\250\212\340\323\0361\212\253\"sP\230\306y\243\311\004t\246\033q\236\224\206 \005 \210zS\274\241G\225\307J\211\320\366\025\003\241\3475Y\343\346\2421\323Z>*\027\212\240h\3523\036{S\014G\322\232c>\225\031\204\236\324\317#\236\224\276W\035)\206\036i6\001H\330\013\212\201\201&\232W\024\3023MaJ\006V\236\006\005\007\232B(\242\234\rH\265*\324\313S(\251A\342\214\220x\240\034\236i\373\360*\256\377\000\230\234\322\226\315\"\311\264\361T\357\224I\363\257Z\247\034\254\255\264\325\245\223\"\231 \014\rU\221[\261\252\305Xg\232\201\220\346\242`\330\353_R,h\234\201QJs\300\250\200\300\351M9>\324\230\250e\342\251\277Z\217\031\246\262Tex\250\214y=)\215\007\265\013\027\035)\216\235\361Qyd\232_/\024\334\200i\330\310\340Tm\031\034\324\017\021\'\245@\360\221\332\2431\037J\215\242\343\245@\361\361\322\2411\323<\256zQ\345f\232\320\373Tf<v\244TRi\222\"\216\225\003\014T,=*2\204\323J\000)\214\275\315D\374TF\236\237v\236\242\224\250\317\002\232E7\275\024\345\025\"\324\253S.ju\351N\035h,(\0075\034\357\265x\252\341\370\245\014i\254\370\346\243-\237z\253s\030\021\357^\010\246A.\345\353\315NX2\324M\327\245Wp*\007\025\023\001_M;\222i\244\214g\275G\272\233\273\232F8\346\240\220\344\325Y94\305\353N#\212\210\255=c\342\203\036x\305\036A\364\250\336\034T^N;S\032#\236\225\030\265f9\251\204!@\030\241\240\310\351P\264\001y\305@\360\226=*&\207\035\252\027\217\332\253\311\027\035*\003\0274\276H\2464U\033\246:\325yF:\n\200\014\032k\363Q\024\3150\240\025\031\317aQ\260\356j&\250XsL*\000\245^\230\247\201\212\\f\221\207\025\021\0304S\205H\246\246NEL\242\244\007\024\273\270\240\036i\335\005A;(_\230\324!\327\265#8\365\250\231\211\250\363\207\251\22614l\246\263$F\266\271\307j\262\207+\221H\336\265\003\214\032\205\252\006\007<W\323n\240T-Q\226\346\22074\214r*\0065\003\212`\034\323\361\305 \034\325\204A\266\237\345\202i\345WnqU\2353\315@E \217\'4\355\273V\232\027\'4\273)J\006\030\"\241x\200\355Q\275\266\344\310\252\022DC\021\212\204\307\221\214T&.i\273;Tl0j\ty\025U\3275\tJiJc\'\245D\312\007Z\211\215@\374\324L*2\270\250\330SA\301\251G#4PNj2)\000\247\001J:\324\250qS\253\nxn(\335\223J\r<\310\002\326e\334\205\244\340\361Q+7\255H\r!l\nb\235\322\342\254D\373%\036\206\253jQ\226>`\250\255\333)R\265B\3759\252\356*&\257\246\237\247Z\256\325\013\032ny\244&\230\325\023S@\357O\307\024c\232\220t\251\024\343\255+\032\211\360\006\rE\263\'4\354`{\323v\026\353N\t\201AZP\234S\0352*\"\n\212\257$a\273sU\274\262\037\030\250\245\213\346\340UwM\240\3256\004\232\211\226\242)\3150\306*6P\007^j\007\340qU\336\240j\214\203M)\216MB\352I\250\231j3\301\247#\343\203N\'=)\246\222\201\315;\"\200i\353R\255;w\024\240\340S\267TRI\216*\204\257\271\350SRg\212c\036)\320\241\332d4\363\326\222\361\317\331\016\006N+2\316_\230\251\253\347\221\232\211\352\007\025\013\n\372T\267\025\013\032\205\271\246\342\222\214dS\031i\240T\212\274P\027\232v\332P\246\244\013\232\206D$\322\204\342\217/&\237\345\340Rl\243fi\3730*7\003\246*\026_J\205\327\332\253\272\214\362*\027\030\311\252r\215\306\252\310\230\342\242)Q\225\000\032\205\224c\232\201\300\354*\263\365\252\362\n\210\306@\311\244\340\016\325\023\234\232\204\203Q\260\250\330TD`\323\220\323\262)\t\244\024\3409\245<S\220\324\303\245\035\005&\352\025\263\234\324\022d\344\325R\tjx\030\024\361\322\230\365a\177\343\330\001L&\235\"o\266#\332\261\020\230\356\361\357Z\200\345*7\250Z\242j\372;vi\247\232i\024\3021I\212P\264\205i\002sN\013\212pZP9\247\005$\323\366\020)6f\234#\000Rl\301\244\"\223m=R\206\\\n\254\343\234\324-\355P\271 T\016x\250\033\200sU\335qU\231rMB\343\035*\006\342\253Hj\273\232\205\252\027\0375A&I\301\246m\342\232W\212\215\226\242aQ0\246\025\244\333\212CI\232\005H\2645*\234T\301\250\'4\323\322\221O4\3761\212\253,a[\212`\031\247\201H\313\221R@\300\257\226\177\nq\214\206\344S\230\205\214f\271\351\330\177hq\3235\251\031\314b\221\252\026\025\003\n\3720S\261F)\254\274S\002\363R\252f\224\307G\227\355F\312]\270\240\'9\251\02503A4\252\274\323\310\342\232V\232W\035\250\013\315H\023\345\246H*\254\202\252\270 \361P\276qP05\014\200\342\253\276j\006#\323\025\004\207\212\255!\252\316sP0\250\230\036\325\023\200\277Z\204\256MF\324\200ToU\330\324li\271\243\212a S:\267\024\247\212p4\244\361\212\001\346\236\032\227&\216\364\243\255:\230\3005B\321\262\362:P)\304TeH9\025 \231\372\032\t2g5\205p\240_\340\036\365\253\010>P\245aP8\250Z\276\214\002\235\203J\007\024\025\240GR$f\244\331\353N\330\r4\307\3155\223\240\247\254|R8\343\002\221c\346\227\0304\355\274R\025\246\3554\001\203R\250\371>\225\024\202\252\270\252\354\271\252\263\0208\025BI\260z\324M)aQ\227\300\346\242r\030d\032\256\334\234\032\2570\317N\325Y\207\025\033.MF\303\265@\353\315FF*\026\034\323\017J\211\352\263\032\214\232i4\274\232c\n#\03148\301\246\203N\355IN\006\236\r8S\200\247\021\306)6\342\224\256T\325}\270\245\034\322\355\246\021\212z\361\023\034v\254\031>k\354\373\326\274C\367c\351C\212\201\205B\342\276\213\214\202\264\360)\312)\341sOT\025\"\256\005;\031\355J\027\024m\243`\353K\267\232i\217-NT\366\244h\271\351K\345\340Ry~\264\206>(\362\300<\212q\\\'\002\253\3108\252\3169\252\322\215\243\216\265\231u.\320Tu\254\311\030\223\232El\234S\23521P\210\310lSd\030\037J\251!\252\315\313`S\\aj\003Lj\211\205D\370\252\354j\0075]\215D\315M\007&\245\310\305FNO4\241\202\232\034\202\271\250\327\255?\265%\003\232\225G\024\3608\247\216\224\360)v\203F\334\016\225]\303g\247\024\325\353O#\212i\024\262\376\356\305\233\326\260#\033\256\363\357[\0100\224\214*\026\025\003\327\320\250p\265<d0\251\300\342\236\253R\001N\003<S\302\322\355\245\013K\266\230\344\001\307Z\024f\246T\035\351\3053\332\223\313\244)\212@\224\273)\245x\252\262\255@S\034\232\317\272\3178\254{\216\033\221\315Rp\\\234t\244\2162\032\255,C\0315\033\247\031\035\252\224\255\203\217Z\256\3000\307z\252\343cS\034\344Uv<\323\t\342\243c\212\255#Uwj\256\355P3\032\211\2157q\007\212vx\347\232B\337\205&\356i\331\342\201\305;4P>\365L:S\327\255H\005<\np\024\374Pc\014\270\305T)\266B)J\322\005\313b\242\324\330Ge\264V5\222n\233uk\205\302\323\030T/P=}\010\237v\236\231V\253\2502\271\251\025jM\264\345\024\340)\364\034\nM\340Td\206oJX\3075:\212\231E<-\005\001\352*#\036\r&\332\211\370\252\356\275\315V\226\251\311\030`I\254\351-D\222{TRZ*\360\005@b\nzPH\013\212\256\354\002\232\312\272r\030\340U?8\347\255\014\341\2075\023t\342\240bA\346\241f\250\236N*\263\275@\355P1\250X\342\243-Q\347\234\203K\270\343\232C&)\276`\025$d\260\346\244\343\024\231\346\236\001\357J\007\315S\252\361O\333\212\220t\247\001\315J\242\235\216i\300UYS\022\223I\266\234\211\316k;X?\273\013T\354\023\0038\255 8\250\334T\016*\006\025\364\"\014\n\221E[\204\360\001\253\010\265(ZpZ\\P~Q\232\210\266\016i\243\0079\243\0254c\212\224S\301\311\305[\21523J\313\307J\205\226\242~*\007\300\025^CT\344\334OC\305V\22398\250w*\365\252\362\260&\251J\3305Y\233\212\257+qY\327<\346\262\246r\215R\307\"\262\212s\343\025ZF\035\352\263\363\336\253H\304\032\254\356j\026\222\240ij\026|\324l\324\320\364\355\374R\026\2461\251\"|\032\230\266E*\014\265[\013\204\243n:T\250\274S\310\247(\251TT\201i\330\245\002\242\222<\266{Sv\361OT\302\023X\032\213\231.\n\203\221\232\232\322-\261\216*\321\034T/U\336\240j\372\031W\212zu\305M\037\016\r_\214n\031\251\200\002\227\0034\340\006*)\272\201P\3435$Q\344\344\364\247\030\300l\366\247\001\201N\035jE\034\325\330\370ZV\306*\006\252\322\036j\']\340\3253\220\331&\240\221\267\0021\212\252\374\003\315R\221\360\335j\264\217\236\365RF\311\252\356j\274\206\250\334t5\213t\334\232[Y\003\246\t\346\245\222L\034\032\254\362\202j\007\222\240f\334j\'L\212\255\"\221U\0379\250\211\300\250\231\251\273\351\301\351wS\031\252H[\236j\312\363SF\274\325\240\016\005<.jUZv\316j@\270\247\001\212\220\nv)v\321\267\"\220G\226\305C}\"\301\t\003\251\025\317\252\031\256\013\037Z\321\2156\255)\250^\253\270\252\357_GF\200\241\372S6\235\3254c\234\342\256\304H\024\362\3314\364\346\244\002\242\224e\251\250\2718\251\210\300\300\246\362E.>Zp\025*\216*\312\034(\024\254j\t\017z\252\334\234\321\301CT\2350\344\365\252\322\232\253.6\363Y\227\r\363qU]\252\263\236j\002q\326\243r\rS\235r\ra^FA&\250\307#\306\374T\322\\\026NG5XHKu\245\222E\333\214\325G\220\347\203Q\231\330w\246\231\367\016j\007`j2\271\025\003\241\315B\331SH\032\235\272\221\216jH\201\334*\344}j\354)\222*\340Q\216\224\005\305H\243\332\2368\355N\034\323\302\373S\302\323\361F\005(\\\364\247\235\261FX\327?\177pg\230\2504[\301\265rEY\306\005F\325\003\346\253\275Wz\372L)\t\305\t\026j@\230\251\001\"\236\t\251\321\224\nq\223\216)\230\'\232z(\316i\314F)\024qGSNQ\315L\243\212\224t\246\226\250\035\263\305@\346\242g\307\031\340\324\016\371\031\025Jg\2523I\3335JS\221U\\\325Y\016\016j\254\262\017Z\252\323d\365\250d\220\342\263\256$R\010\"\263\300_4\361I0]\243\034U\031$\021\236\rWy\263\320\324-6\017Z\215\246\3175\031\230SL\271\246\2311\336\221d\014y4J\237.EV\344\032p\346\236\006M\\\211@\213=\352\324\020\226\347\025\243\024AG\"\245\306\005(Zp\004\236\224\340\005=G5*\343\024\341\326\227\212\007&\245A\203\223T5;\200\020\242\237\255dA\016\3717\032\320T\300\244j\201\352\273\232\201\352\006\257\246\000\036]\n\2705 \024\355\264m\245\301\245\004\324\313\215\264\361\200(<\232\017\024\224\365\0252\322\223\201P\273\361P\027\031\344\324NsQ\034\223Ue}\271\025FY9\353Te|\325g5^R\000\254\371\245\352\001\254\371d9\353U\032S\236)\246V+\315S\230\026=\352\253(S\234\325yd\031\301j\245q\317C\232\250r\rA!9\342\242.GZ\211\236\2247\035j\'\223\234f\221\031\263\232\264\262\345v\2654\246NE*\241\024\360\234\325\270Wq\000V\254*\252\200T\333\261J\244\261\251Gj\221T\236\225\"\307\223\315.\314\036\224\240b\226\223\222x\251Qq\311\246\334>\310\211\2549KM9\006\254\305\026\325\034T\207\201Q9\250\034\325w5\003\232\201\253\351\264\033\233\025\"\257\315N\013O\013F\303K\263\332\215\224\340)NH\247F\0079\241\272\320:\324\252*A\300\250\335\252\254\217U\213\374\324\222I\264Tm8\331\214\325\031_$\325\t\237\006\251\311 \252\3176;\325if\005q\336\263f$\223\212\247\266I\037\030\246\264a\007<\232\214\270\3060*\tYpk.\341\362\373A\252r\3061\235\374\32578\352j\t\037\266j\263\277\275V\222_z\201\246\347\255\'\235\357B\266\346\346\247\\\nvOj\222)\212\234\032\264\256\206\224\272\366\251\355\233\347\255(\332\245\000\232\236%\305N\213\226\253 m\034\014\221Ud\235\222_\230qO[\210\334u\346\236\034\023N,\000\246\371\252\017\024\241\311\250.\245\312\355\252\261E\203\223\326\254`\005\250\334\324\014j\0275\003\232\201\315@\306\276\241\215v\362jLqN\013O\002\227m.=\250\332qQ\3644\274\232r\360\r%9jU\245f\300\252\322=T\221\352\020\3375U\270\234\324BM\313\357L~\225\235p\330\315e\3176\334\325\006\237{\340f\227\2675\013\2202j\234\263\355\310^*\234\223\022z\324&N:\325;\211\361\3005\225q<\212I\004U\031.\244\317&\253\274\356z\324FBj\007\223\236j\254\262b\253\231i\276a\315M\034\225ad\036\265 \224b\205l\234\325\204j\235Wq\253P\215\254+F2x5i9\025b1\212\261\020\313\375*\302\221\232\257w\002\261\311\357U\205\272\250\316iw`\342\245Q\221\232O/\234\322I E\300\250\000.\3315&0)\t\342\241sP1\250X\324,j\0075\003\032\372\224\360qOZ\227\256)\300S\200\243\024\275\25229\244\307\024\023IOZx8\025\034\217T\345z\252\355Qo\301\252\223e\345\300\245\t\265j\031d\254\333\231\0075\217tI\316*\224jD\231\251\035\360:\325I\246\033N\rfO8\007\255Q\222\351W\275V\226\364\343\212\247-\300\332N\356k6I\333\177\'5^Yr:\325f\230\201Q\375\243\265G$\274\365\252\322\313U|\317\232\227\314\031\251\342pj]\370\247\243d\340\325\310\243\316\017AS\252\340\325\210\370\253*\325z\007\312b\257B8\251\301\033\270\251\342?=[\0108#\255Ar\334\212\200\234\216h\n\247\236)\306DE\252\315p\316\330^\224l$e\251\352\000\024\214j\026j\215\332\240f\250Y\252\026j\205\332\240s_T\205\311\251U{S\300 \323\2058R\221IL4\334\361IH\r=x\245f\300\252\262\311T\344z\201\236\242v\001ri\261\000\331j%\220\0055\227s6\001\254\271%\017\236j\224\254NEV\334\007SU\247\234m\3005\235,\303\004\223X\363\334\356\224\200x\252\262L\000\344\325)\256\200\035k>k\337CT\336\357=\352\273\\\373\324/u\357Q\371\371n\264I0\307Z\254\363g\275@d\301\2442\361\326\246\202nz\325\325\220b\247\210\214\346\257$\213\267\203R\207\025:IR\306K8\025\257n\200\'5l8\003\002\236\215\315Z\211\276aW\200\371s\350+>\342_\336\022{UG\231\211\343\245 \226Lb\234r\303\223O\211@5+\035\274S7Tl\325\0135D\315P;TL\325\0135D\315P\261\257\254UMJ\253\212x\\\323\202\214Q\267\006\214SH\246\221\221Q7\006\220\320\r(5\024\217\306*\244\257U$z\204\265FX3\373\n\014\312\203\212\247s8\307\006\261\256g$\360j\231c\234\223U\346\230c\000\325)$\371z\326u\305\301\307\025\2354\216\312rqYsH\251\336\263n.\361\336\262\347\273\'<\325\027\270$\365\250L\331=j)%\003\275C\346g\275\'\233\212\215\356\017\255Df\367\246\231s\336\232$5,r\2259\253\221\316\307\025v)\t^j\3129\003\255L\222\234\3435f7\367\255\0136\005\362kZ7\371i\341\271\251\321\252\314rU\227\270\"\002\027\322\263\335\362\204\223Q\251\024\361\212q\"\225\037\rN\221\352\"\374Tl\365\013=F\317P3TL\325\0235D\315Q3W\327\n\243\025\"\347\275J\005;\024\021M8\2461\246\026\366\250\234\212fx\2434\326|Uid\252rI\326\253<\225\013\310\000\252\223N\300`UG\273!pMT\232\345\210\344\340U\tn\027>\265RK\203\3175RI\262z\325\033\273\235\211\200k1\356\200RI\254\313\273\376\300\361X\367\027\204\347\232\313\232\344\223\326\250\313>{\325V\224\347\255 \177SQ\311&j0\344\320\315\305Ww\346\242g>\264\335\347\326\236\255\232\235\016M]\213\240\253\2616*\300n*X\316M[\210\372\326\205\273a\270\2558\337\345\353R\006\346\247G\340\n\261\034\2035.\360\313\267=j\233\276#\306{\323U\352@\374Q\346P\036\203&i\254\374T,\374\324e\352&z\211\236\242g\250\231\2522\325\0335}x\265*\324\200\323\201\246\263\001Q\263\372TM%F\322Te\363Q\371\2304\246Q\212\201\345\367\252\322I\357U$\222\252\311\'\275V\226^:\3259\3468\353Td\227$\363U%\227\336\251K \346\251K7\275V3ry\351Yw\327\031;Ee\312\314\300\362k>\340\343\275eN\374\236k:W\344\325I\036\252\264\230\246y\324\323&h\363\000\2464\271\250\331\370\250K\363@|\323\325\252\3126*\324RU\264\222\247Y*x\344\253\220\277\025v\031p\302\264\243\227\345\034\324\302J\225\0375:I\212y\223\234\203PL\307#\236)\201\352A\'\035i<\312Q\'\024\027\367\246\031*6z\214\275F\317P\263\324e\3526jajal\327\330\013R\203N\0243\342\242g\250\231\352\026\222\2422S\014\225\033=Df\307z\211\345\252\357/\275U\222J\251,\275j\234\223q\326\251\3137\275R\222lg\232\245,\376\365JY\375\352\234\222\344\365\250%\224\"\365\346\262n\246\031\316k>K\2360+>i\207$\234\326U\304\343\'\025\235$\371&\252\313/\025U\234\223I\300\034\232a|SK\322\027\250\335\352\022\374\320$\251\222J\262\214\010\253\021\266*\302\275L\262U\230\244\253\320\313\212\267\033\022r*\3443`\341\215\\Y2:\325\210\333\212\260\255\353J\314;S\035\267!\035\352\272\311\316\r?\314\2442P$\245\363=\351\206OzcIQ\231*6\222\243g\250\313\323\013S\013\023HZ\276\304\024\360h/\212\215\236\241i*\026\223\336\241g\250\313\323\031\352&\223\336\240y*\006\227\261\250\036_z\255$\265Ni}\352\224\263U\031f\347\255R\226c\353Te\233\2575JI\275\352\263\312z\346\251O?^k\036\356\357\031\254\231n\230\236\rT\222vn\365RP\304d\3259\001\355Udoj\256\316j#!\007\232a\226\2433R\031\270\353L3qL/\236\224\002jtlU\230\333\236\265iZ\246W\251U\252\304lsW\241$\342\256\306\370\253*\371\031\253v\355\317Z\274\215\317Z\230I\357A\223\214\323|\317z\255#m\227>\264\276g\024\323\'\275\036e\036e#I\3150\311Q\231)\205\351\205\3522\364\322\364\233\2517W\331#\245\005\200\250\231\352&\222\241g\250Y\352&\222\241y*#/\275B\362\325w\227\336\253\274\330=j\007\233\336\253I?\275S\226oz\2434\336\365FI\275\352\234\263{\325\031e\346\252\274\252\243,j\214\327@\236\rg\334\\`\036k&y\201\'&\250;\214\232\201\210\353P\311&*\224\262\202x5Q\334\032\254\357\315Ww\250\213\324L\306\243.i\273\351\312\334\324\310je\253\021\346\255#qS\255L\265b.\265\241\020\302\365\251\325\275\352\302\023\212\267\013`\216j\342\2775\'\231G\230qM2b\243\225\262\231\035EF$\312\322y\224\236e\036g\2754\311\357M2S\014\224\322\364\322\364\322\324\335\364\233\250\335_d\227\305F\322TM%B\317P\264\234\365\250^J\205\245\250\036J\210\311\357P\274\236\365]\345\367\252\262KU\236~1\232\253$\336\365NYz\325)$,z\3259\337\000\363T\036ny5N\342\351\020u\311\254\251\356\214\204\363U\332L\014\346\250\\K\327\232\314\236^j\241\227&\242iq\336\253\311.{\325\031\344\367\252fc\232cI\232\201\332\242\335\315\007\245D\324\334\363OZ\260\202\247QS\2409\253(*e\310\251\220\232\263\026sW\020\260\253\t\353V\343n*tl\032\260\262qO\337\317Zpn84\326~y\246\357\312\221\353U\303\320^\233\346R\031)\246Ozi\222\223\314\244\337H^\232^\233\272\215\324\273\253\354fz\205\244\367\250ZOz\215\244\367\250^J\256\362{\324-\'\275@\362\373\324&Rj\'s\212\251,\270\357U%\233\320\325ff<\324\022>:\232\251,\243\034U\031f\300\'5\233qpq\301\254\271\256X\023\315P\226m\304\344\325v`;\324\022\313\307Z\317\270\224\016\365\233+\3565\003\270\002\253<\236\365ZIj\244\262\023\232\252MD_\232k6j<\321\272\232ri6\234\324\210\rYE5e\026\254F\230\253\n\271\251\225*eQV#\035\305ZC\221S\247\0252\032\231Z\247\007\013K\272\244V\244f\346\242g\301\315D_\232izizazizizO2\227}\033\3517Rn\244\335J\032\276\302y}\352\006\223\232\211\244\250\232J\205\345\367\252\357&j\006\226\241g\317z@x\315E+\200+:y0MT,Y\251\256\333S\255g\3157\315T\345\227\216\265Fi\307J\241<\240\326M\324\230\'\025\236\362\234\346\242i}\352\t$\033k>bI\252r6*\254\217Udz\252\356j\2731&\242s\212\2074\322sHzR\001N\002\234\007\265N\211S\242\325\230\326\254\242\324\312\2652\216)\340sSG\232\262\206\254!\251\327\025*.MM\216\202\223\245=Z\234\330\252\357\334\325p\371\'\353HZ\230Z\243/M/M/I\276\227}.\356(\335I\272\215\324\273\361_]<\265\013I\357Q\231=\352\'\227\336\253\274\276\365\003K\212\205\345\311\3115\013INY\206\314T\022\313\226\306j\244\305H\3115X\262\2579\252w7\000\214\003Y\362K\234\363Tn\'\300\"\262\344\270 \236j\244\263\346\251L\340\203Td\034qU\237 Uvz\255+U)MU\220\325I\rT\221\2105\016\354\323\030\023Q\2254\334Q\212P\016jEZ\225PT\312\240T\350\265a\024T\352\270\251@\251T\032\225V\245AR\250\251\220\325\2049\253Q)<\323\317\007\232i4\344>\264;\324r\034G\232\243\273\014i\013f\232Z\243f\250\313SwQ\272\215\324\273\250\337I\272\227u\005\373W\326\317%B\322{\324M-Wy\252\006\227\336\241y}\352\026\226\2432S\014\330R*\264\263\221\3005NY\333\326\252\311p}j\243\315\234\344\325g\227\216\265B\342N\t\315c\3157&\252I>;\325v\227=\352&~*\274\207 \3257l\032\255#UI\rU\221\252\244\215U\334\346\242\305!\3054\323\010\346\224-=R\245T\251U*EZ\225\027\025a\006j\302\255H\253S\306\276\3252\255J\251\305H\022\234\027\232\232>\r_\207\033)\254z\232\210\223\234S\201\305F\362sI#\342\036j\223\037\232\220\2654\232\215\215FZ\230Z\223u\033\251wQ\272\215\364\027\244V\347&\276\260ij\026\227\336\241y}\352\273\315\357U\336oz\211\246\343\255Be\367\2464\330\357Q\231\262z\325ye\025JY\272\3257\227$\344\325g\232\252\311>;\325\033\251\276^\265\2174\274\232\246\356sP\264\204SL\271\024\326|\325I\271\252N\3308\250\035\252\254\246\2529\252\354Ni\2314\224\020i6\232z\255J\251R*T\252\265*\247\265J\022\244U\305XCV\021r2*tJ\231V\236\000\006\244\030\247`S\224U\250O\312E)\351L4\235F*\274\334sLg-\025V-M\335\232B\324\3265\013\036i\204\323wQ\272\215\324\273\2517SY\351U\253\352\271$\307z\256\322\325w\232\253\274\276\365\003\313\357P\264\276\365\031\227\'\2555\234\343\212\214\270U\353U\345\233\212\241$\274\232\251$\270\315T\226n\274\325\031g\353\315Q\270\270$b\250\271\'\232\201\263\232a\217#\255WrP\342\230_\212\202G\343\255S\224\325v5]\352\263\n\204\2574l\366\244\333N\t\232\014t\241*EJ\231PT\252\2652\255I\266\224-J\252j\324+\212\262\253\315J\027\212]\274\324\252\231\024\340\224\340\2475*\002)\335\3151\215D\317\3155\260\352A\250v\262\361\332\240\225\010\344w\2503\203Aji5\033\034\324d\323I\244\315\031\243u1\236\232\016i\341\253\352Y%\343\255T\222_z\256\362\373\324\017/\275Wi}\352\027\230\016\365\021\270\305/\332GL\3242\3161\326\250\315t\000\353T\245\273\003\275U{\215\3035Ri\275\352\233\271\'\255W\220\214f\2531\250\231\271\246\226\"\253Lr*\266\343\320\324\022\276:\032\252\314MD\306\240rMBFi\002\nv\312iOj\000\247\000\r9TT\312\203\035)\341EH\252*UZ\220-=R\247D\036\225aV\246E\251\200\247\005\315<\014S\351\312*U\034\323\010 \232c\n\201\352,\220i\333\276^j2FpG\025Vh\312\234\216\206\240\335\316\r!4\302j3M&\232M4\2654\27579\245\006\234\032\276\235\222^*\234\222\373\325W\233\336\240ij\027\227\336\253\274\265\003\315\212\203\355\030bI\250&\274\367\252\022\334\226\357U\332L\216\265\027\236\001\306j\031d\356*\263\313\317Z\211\237#\255B\306\242cLf\030\252\3625A\301c\232\212U\034\325fQQ2\324\014\265\031Z6\322\320E&\332P)\300b\244Zx\251\024T\252*e\025\"\216jt\305N\270\"\245A\232\233\024\341N\002\236\242\244\013\223\315?a\0074\2143Q\262\361Q\024\317j\205\242\347\212aLSH\317\007\255F\303+\264\325\031\220\253f\243\007\"\232i\206\230\306\243f\250\313\323rO4\354\321\234\322\203_I\274\276\365RI}\352\254\222\363\326\253\274\325]\345\367\250^n*\264\223q\326\252<\307\035j\263\312OSP4\225\004\223\200:\325V\237\346\353O\363\003\'\275Vs\315Dd#\2750\311\232c\277\025\tcLn\225\003g\250\250\035\352\0265\0315\033sQ\355\346\227m\033ph\"\223\024\001\315<\014\214T\212\230=jt\210\021\326\235\345\221R(\251\005IR\'\275L\246\246C\212\260\274\212\220\016)GZ\220b\245SR\021\221HV\243e\250\310\305D\335j6\250\233\255D\302\240\221C-Qa\265\2150\232i5\013\270\002\240f&\2234g\002\214\346\2274\003\315}\022\362\373\325Y%\252\317/\275Wy}\352\273\313U\336_z\253$\276\365U\345\367\252\3575Vy\375\352\264\223g\275ViNiV\340\203\214\323\313\356\250\236\231\237zBj&<\3237Tly\252\3562\325\023\000*6\250\3174\334\021\326\202i2(\316iv\322\2055\"\241\316sS\205\004sN\000\203\201S\205%y\240%<\nu=jd5*\324\350j\300?-\000S\300\251\200\332\2715e0c\030\240\342\242`\rF\343\212\252\343\232\215\205FED\365\021\372U+\205\301\316*\241$\034TO%BI\'&\232i\271\2434\003K\232Q^\374\362\325i%\367\252\257-Wyj\273\313\357U\336_z\253$\265VI}\352\254\222\325w\222\240y*\026zn\376i\353!\365\247\207\334)\271\346\232Z\243\'4\302y\246\223\336\230~\355V\220\363Q\022)\244\323I\246\021F\017zr\216i\304\220)\273\216jE\222\246Y\001\251A\025\"\310A\366\2513\236{S\201\247\365\247\001OS\212\224\032\225\033\232\262\207<T\370\300\241~\360\253\022\220Tc\322\244\201\206\334S\237\025\003pj6<T\r\311\2465B\325\023sP\276{Ui\033q \365\252r\2569\252\254*2i\205\251\271\244\315\024\240\323\301\257\377\331"
-byte_png: "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\002\000\000\000\002\000\010\000\000\000\000\321\023\213&\000\000\002\217IDATx^\355\335\341n\2020\024\006P\303\373\277\262dq\233\313\2546\020\004i\373\235\363\263\022\025\250\264\367\366\202\227\013\000\000\000\360\312T6\020a.\033\000\000\000\350\235\020\177\201X\030\000\000\200\036\r\032\360\013\323\001\000X4\350\\\230\265t\000^[\352\031\342M\272\243\323\002\000\000\000\000\000\000\260\215\025g\000\000\000\000\000\000\000\340c\024*\000\000\000@\036\371\000\000\000\000\000\000\000\000\030\307\322\377@\326\251 \000\000\000\000\000\000\000\000\330\344\273\354b{\325\006\000\000\000\000\000\000\000\231\016\277\313\337R6\000\000\000\000\000\000\000\211N]/\277\226\r\000\000\000\000\214e\372M?\035~[\010\000\000\000m8\265\014!\330\211\201\367|\342g\003\000\000\000\000\000\000\260\217\347\245\337\242\000\340y\003\000\000\000\000\200*\267\030\001\000@S\254\372\307\021\225\001\377\030\005\000\000Bx\"\\\272\311\344\037\330L>\021\000\240c\327\262\241\352\0366\n\037{e\342\016\000\000\000\334\311\023\204;\252\003\034\365\276\000\000@\n\005\t\000\000\000\000\260\017+\370\000\261,\267\000\000\000\000@\010\311\3000\345\t\237\237Z\2061\354\216\001\000\000p$\341$]\320Q\001\000\000^\332\347\226\330}\336\345\024\342\305l\177]WG\000\000\000\332\320q\204\r\000\000\000\000\000\300G\251{\003\036\271*\204H?\321\n+\000\000\000`Qz\372\000\000\000\000\200\321\3342^\262^\214G\257\376\254\346\216ws_hp\2167-Q\013\013Y\2121\310\220\364I\343\\p\307\331\023\000\310c\034Of\366\017\220\314(\000\000\000\000\217\304\312\000\300\030T\001\000\3002Y\200\r\3328h\357~\013S\245\316\275\333\001\000\000\200\332\254\272\326\316\316\304\245\000\000\000\034\241\022\330\337\233+/W\333\241Iyy\225\325?\321\325\033\366\"\357\\\003\000\000\300!\346\361\262\006\000\000@\377\004*\000\000\000\260\262VV\020\235neG\001h\215\001\014\000\2003\010\243\341,\242@\250H\371q\244\354\'\025\327\262\201(\346\340\220\3155 \335l\036\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\374\360\357\347\000\000\000\000\354a*\033\000\000\000\240[\375VS\210\317\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\340\246\337g\t\001\000\000\000\000@[b\236\202\377\005\355\265M\274\251\013\246j\000\000\000\000IEND\256B`\202"
+byte_jpeg: "\377\330\377\340\000\020JFIF\000\001\002\000\000\001\000\001\000\000\377\333\000C\000\003\002\002\003\002\002\003\003\003\003\004\004\003\004\005\010\005\005\005\005\005\n\007\010\006\010\014\013\r\014\014\013\014\013\r\017\023\020\r\016\022\016\013\014\021\027\021\022\024\024\025\026\025\r\020\030\031\027\025\031\023\025\025\025\377\300\000\013\010\002\000\002\000\001\001\021\000\377\304\000\037\000\000\001\005\001\001\001\001\001\001\000\000\000\000\000\000\000\000\001\002\003\004\005\006\007\010\t\n\013\377\304\000\265\020\000\002\001\003\003\002\004\003\005\005\004\004\000\000\001}\001\002\003\000\004\021\005\022!1A\006\023Qa\007\"q\0242\201\221\241\010#B\261\301\025R\321\360$3br\202\t\n\026\027\030\031\032%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\203\204\205\206\207\210\211\212\222\223\224\225\226\227\230\231\232\242\243\244\245\246\247\250\251\252\262\263\264\265\266\267\270\271\272\302\303\304\305\306\307\310\311\312\322\323\324\325\326\327\330\331\332\341\342\343\344\345\346\347\350\351\352\361\362\363\364\365\366\367\370\371\372\377\332\000\010\001\001\000\000?\000\364kU\301\025\250\251\362\364\250\246\217\003\"\262\265+3,$\257\336\025\303\352\221<n\331\025\207$\305I\252\322\266\376\224\266\361g9\251^\337 \326u\314X\317\025BT\305Ut\315A$dUw\214\032\2552\201\232\317\226<\324K\006\343R\262yC\025^J\200\236i\205\360*\t\034\346\2423\025\247\305v\001\346\255\213\350\210\3069\252\3271$\312H~+/\354\013#\036x\252\327\032b\201\305d\\X\225\'\212\257\366S\236\225<Pc\265^\206,\201\305[\216\034v\247\2102zT\251k\354*C\000\\\034\200i\336V\356\246\234\260\242\373\323\360\202\201\203\332\245E\343\356\324\201sS\304\206\256D\265r$\315\\\2051\212\322\267L\342\264\355\223\245j[\'N+V\326#\305j\333\303\232\277\004aj\374+\300\253\260\2475\245m\036{V\204\021\364\253\360E\223W\221\002\212\224H\007\003\255=rju^\225f(\306j\322\034\n\261\021\300\2572\212\337kt\255\004\213)Lx\2069\252\262\3046\234\327)\342-00.\242\270\rJ\003\033\034V|,L\2305\253\024_(8\247\225\342\250]F9\254\251\323\223UY0j\031FsT\344\340\325I\224\232\252\361\323\025pj)>bj\274\235j\"\225\023.j\'J\255\"b\241\332i\333O\275\014\030\214v\246,n:S\374\206#\346\351Q\266\232\034f\252M\247\210\315D\226\240\036\225j+\\\343\212\273\035\236\006H\251\004*\203\232B@\372T,\241\333\030\251\0220\275:\324\202\"z\323\276\3168\315H\226\340t\025\'\227\212r\307\355S\307\035Y\215*\344)W\241L\326\225\274}+R\332,\342\265\255\242\351Z\326\261\364\255(W\025v$\311\253\360\245^\202<\326\255\254U\243\024x\255\010!\3434\255\220)c\025<g\236j\312\034\325\225\312\201SE\310\025z\336=\304W\237\244xaW\243\203\345\250f\267\307j\251,D\251\000v\254-F\022\312w\016+\205\326\264\322Y\210\034\032\345\346\2670\313\322\264\255\237*3RH=*\205\310\316k>HsT\346\217\025RE\252\262&j\274\221\361U\244J\201\227\025\021Nj\027\213\346\246\274x\025\003.j6\216\241h\263\332\220[R\233l\036\224\236HS\310\246\277\3128\025Y\335\311\246\355\220\2163@\267y:\212\232;\000O5i X\307\002\207\034{Ui2\307\247\024\302\245\2158ER\244]\352eQO\300\240\223\332\200\rH\2435b%&\255\305\035]\206:\277o\027J\322\266\217\245kZ\307\322\265 J\324\266\\b\264\"LU\330R\257\300\235+J\336>\225\251n\230\305iC\037J\277\022\034TR\360i\022\247\215rj\334I\216je\311\253\226\321w\253\326\340y\230\354+\2100\205\025<+\225\346\206L\366\252rC\265\353;R\264\022D\330\256V{\0213\225\"\271-gM\t3`Vtq\030\316*V^*\234\361\325W\217\212\245:U\t\223\025U\326\241d\315V\222:\256\321\344\323L<Tm\rC$F\2411`\323Z,\323<\201OX\200\244u\013U_\222j2\001\342\232\320\016\242\244\216<q\266\246[s\234\342\246\362}\2526\213\322\2411\226b)\217\0268\250\304C=E?b\216\364\252\r=V\236\022\224&MH\"\247\252b\254\301\036j\374Qt\253qG\355W\340\216\264m\343\351Z\226\353\322\264\355\2278\255Kh\372V\224Q\364\253\260\307\322\257\300\225\245o\035i@\235+F\001\212\264e\302\032\252N\346\251PU\273q\315\\\215x4\364Nj\354|`\n\271l\2375rf\035\335\252D\207\002\221\243#5Vhrj\205\354x\214\375+\2350\376\377\000\247Z\300\361\005\220V,\005s2F\001\250\236\253J\271Z\247(\340\325\031\2275JX\311\252\357\017\265D\320\324\022EU\236>i\004y\024\206*\212Hj\026\202\230`\036\225\033C\212\215\206*\274\2715]\224\323Dd\232\2368\361S\004U\344\001\232x>\224\356\324\233=\252\027\002\253<E\211\346\232 >\242\234\261\001\336\245\010\007AR\010\267\n_\'\006\234\"\247\004\342\236\253\315Z\2119\253\320\246j\3641\325\350c\253\360\'J\321\267NEkZ\307\322\265\355\242\300\255\030S\245\\\211*\365\272t\255\030\026\264m\323\212\273\030\251\266\232a\213i\366\251\021j\314\\U\270\333\"\247\215y\253\260\247AZ\021 E\256h\307\203\322\227\313\305F\351\232\255\"\216EQ\271@\312A\254\223g\227-\216+\234\327\302\374\303\275q\227\010C\032\252\353P\262f\253\313\025T\226!T\344\214f\2421\003\3051\355\210\0358\252\322\333\342\252I\007\265C\345\343\265\006<\323Z>:TF:c&\007J\202D\252\322G\315B\311\315D\311\232h\214-!;i\276i\247\254\2075\"\271\'\232\2306EF\352\246\242h\2050\303\223\355R\010\000\003&\244H\207\245N\260\344b\234a\357M\300\3161H\0317c<\324\2019\253P\'\025~\030\352\354KW\241N\225\241\004}+J\336*\327\264\217\245k\300\230\002\257B\225n$\311\025~\024\351W\340^+B\020B\325\310\306\005N\2435!M\313\3151W\232\2361V#\253\260.H\255\033x\261\311\025,\262\210\224\223X\354\202\243+\212\257r\3425\'\275c\\j$1\025Y\356\314\304\016\324\267\nV\335\210\353\\f\256\014\214\331\256r\342\016O\025M\355\352\007\207mS\234c5FQ\232\251\"\363Qt5$L\t\301\351M\226\333\232\245-\276\017\"\253I\005F#\2441S\032.j\'\213\332\253\274X5ZD\305Vu\250Y)\245i<\260i\246!\351H#\307j\221@5*\305\221\322\242\221\n\236)\270&\236\253\236\265\"\302\t\251\226\020\275\351\330\024\206@)\204\356\2464\033\307Nj[pq\203\332\257\302\230\253\360.qW\242J\275\004u\245o\035i\333G\310\255{X\372V\254)\300\253\261\'J\273\014uv$\253\321G\200*\354}*\302\032\262\234\342\245\'\ni\211\311\251\320U\270c\310\255\013e\n9\253Ot\220&I\256wU\326\301$\003\305i\021\355QHv\212\305\324\246<\363X\2236sL\265\313\313\307\255j\\\200!\301\364\256CS\200nb+\002\342\016zU9!\305Q\270L\003YW\000\344\325GZ\204\307\272\230\366\274Ur\205\032\255\306<\330\360z\324\023AT\345\203\025\\\305\203Jc\310\250]1P\272\324\022&j\254\251U^<\232\211\2424\321\016M/\223\212C\027\265#E\351J\220`\346\245~\007\025\003\014\3474\201A\247\000\253\326\236\256\007J\032QP4\244\236)S&\254\305\037\255K\262\227\312\303\002\005]\267]\325\243\004x\305_\206>\225~\010\353J\332>\225\251m\027J\325\265\217\002\264\241L\342\264!\217\245]\211*\344+\203\322\255/\025f3V\023\255]\267N9\242V\031\305$b\254\302\233\230\n\275\275bST\356u\244\207 \036k\"\357]iA\371\270\254\207\270k\247\300\351^\200\334T\023\014\212\302\324\0279\254\211\206T\325;Y\374\253\201\365\255+\313\240\3109\355X7\2046k\"\342,\232\317\271\213\031\254\273\204%MeL\204\223\305Wx\211\355Q\024\307Zk\034\216*\273BX\364\251 \213k\n\263,\001\205S\232\014\366\252\222[\325f\210\212\211\343&\2411z\324\022GU\244\216\253\264\\\324f:aJLb\232E&3Mw\333\322\241g&\2234\322\376\224\207=I\246\357\307Jir\324\344\004\325\210\227\025i\006j`\270\024\346R@\253\326\361\025q\221\332\265!\217\212\273\022U\350\022\264\355\223\247\025\251l\235+R\004\340V\214\013\322\257\305\200*\304G&\256\304sV\200\351S\306*\324k\315]O\221*\022w5O\032\346\255\303\204\035*\275\357\2312\220\274\n\346u\017\335d\026\311\254\2375\246}\271\342\265\254\341\n\242\275\t\327\216j\274\300`\232\347\365\"7\034V4\207\250\254\347R%\310\245\236B03U%\344U9#$\325+\210\262\rd\334\302A<U\tc\000\325w\214\036\325Y\342\250\305\256{T\313g\221\322\232\366\333\017JU^9\246\313n\010\310\252r\333w\305T\222\037j\253$X\250\035*\274\211UdNj\022\225\013\305Q\024\246\025\2460\3053\006\221\3235\021\216\230Tf\224G\236\325\034\221\234\324d\021@\344\325\210\322\247T\251\227\212\231~b\005_Km\312\244v\253p\214\234\021\203W\355\322\257C\035_\202>\225\243n\230\255\033q\322\264\255\372V\204&\256\3043W!J\277\nT\340b\246\214b\257@\235\315I#\205\030\024\310\271<\325\264`\000\251\343\351L\271R\352@<W!\254Db\221\263Y\266*\014\204\326\344g\n+\273\232`\213\223YWw\304\251\002\261.\244.y\254\331s\232\217g\004\342\252M\227|\324f:\212Hj\244\320\325\t\355\263\332\263\347\260\335\332\251=\231^\325\030\263\317Zx\264\013\332\234\266\376\325\014\320\347\265Sx\212\032r\234\216E6H\003\014\212\316\236\014\023T\244\217\256EU\226<Ui#\252\357\025@\351\203P\262\324.\2315\033G\315F\321\323LT\236]D\353\216\324\213\016\343\322\246H0:P\361\001\324T-\002\223\322\243\362\006zT\211\035YH\370\243g5,HCsZ\326\334\212\266\221\347\232\273o\021\355Zv\320\372\212\273\032b\256\300\235+F\010\363\212\320\206<c\212\275\002\325\370W\245_\201p*\354+\220*S\306*XFM\\C\201\327\212\215\337\232|g\212\235_\037Z\224M\214sV\025\267/5\307\370\226`\2635fi\247q\315k\251\300\256\326\364\361\214V\\\261\3475J\342\016\017\025\0040+1\014).-\320&\024Vs\333\014\361L6\274TRE\212\316\225w1\250d\213\"\252\274^\325Z[p{U\177\263b\221\241\3050\307Q\311\020\305S\232*\205c\245\331\212\253s\001\344\343\212\315\232\032\251,5U\341\252\362E\216\325U\342\346\241h\252#\036j&\217\024\337/&\217(\032O\'5\033A\223OX\000\035)J\340p*\t\025\217j\213\006\235\2634\345\216\246U S\225=\252d\217\025f\006\332\325\253\010\016\005]\201\002\340\346\264a \2605z3\270\201Z\020E\323\212\320\2011W\342\034U\330\027=E_\206:\277\022\014U\200\333qN\r\232\261\027\002\244i0)\213\2275:\220\243\255!\234g\002\234\262d\325\364p\261g\332\274\373\304\327\233\356\230\003\337\025&\222\270\214\032\324\335\201^\203u\006\345\254\251\220\253c\025\033[oZ\256\366\376Y&\252\3123U\314\\\323\036<\n\245p\234\034Vd\213\2065\033.EV\2219\250^<\212\207\313\3155\242\250\236*\205\343\342\252\315\006j\017$\203A\212\231$[\220\212\314\270\213\007\245Q\226\"\rT\221*\254\211\232\257$DT-\036GJ\201\241\301\246<Y\246y^\324\242*Q\036i<\220)\246?JiB)\217\020\"\240h9\243\313\247\254x\247\343\332\234\243\0250^)\006Q\205i\331\313\221\212\275\0319\353ZV\314N+V\331s\365\255[h\216\006kN\010\272U\370m\211\253\260\301\212\263\022\340\325\305`\242\225N\343S\3061\212\233xQH\244\271\366\247\2311\300\246\263\034SQ\262j\304G,\005K\250\334\375\236\321\317\240\2571\275\2727Z\207\'\275t\226\003lKV\235\370\257St\310\305S\226\330\022MUx\266\346\251\314\271\006\251<Y\250\332,Uy\023\002\263\356T\214\326t\211\223Q\024\250dJ\201\222\242+\201L+\232B\231\2464<Uw\202\240h*\'\217\002\241#\035j\245\325\270q\220+:Xq\301\252\222\333\372U7\207\223\305W\222\032\201\242\305F\321\323\014\\SL<Ry|S\n`\323v\022i|\254\323$@*\002\231\2462\232hZ\024\032p\031\251\022:\234\'\024y;\215\\\266\213eh@\2315\253k\027J\326\201q\212\327\265#\002\265 \350\t\034U\350\207<U\265\344T\200\343\025(9\251\222\247\007\002\201\2265)`\274f\233\270S]\213\nT\342\254B\330aU<K?\227d\343=\253\316\354\301\226\370\237z\353-\316\324\002\236\362q^\304c\340\232\2557CY\323\276\rT\177\230\324O\035D\321dU)\220\203\355T\346\2135\237,8&\253\274x\252\322%BS\232G\217\212\204\307\311\244\362\30144x\025\013%B\361\325y#\252S/5\020\364=*\235\324=qT]1PI\0305^HsU\244\207\025Y\343\3054GMx\350\021dTo\0253g4\244\014T&\"\306\232b\307jF\267\014*1m\223\322\244\373\'\035)\005\267=*U\267#\265?\311\"\225\027\0168\253\022\002\000\305hX\256G5\253n\274\326\244\030\300\255\013sZ\226\217\221\203ZQ0\307\025b2j|c\024\365j\231\\\001O\017A\227\024\320\344\367\251\024\323\305*\365\2530p\300\232\303\361d\377\000\350\2543\326\271M\036\334\227.}k\242S\265i\222I\305{\214\313\201\355Tf\\\203TZ\330\312\307\322\242\222\323g#\245B\311\333\025\023G\305T\236,\325\031\"\317\326\251\315\016\t\310\252r\306*\263\303\232\217\310\0305\033\305P\274u\037\226i\031}j&\030\250\331sU\246\\\n\242\351\271\2529\"\305F\361\007\\U\031\255\261\236*\224\260\025\250\0362*\254\251U\231\t=)\004t\326\212\220GM1d\364\250\332\014\036\224\317\'\232_#\035\251\206\014\232C\016)\313\016;S\304Y\251V\337\245<[\324o\027j`\203\006\246D\316\001\253\326\340(\342\257@\374\326\225\271\311\025\247n+F\016\rh\302sW \353S1\346\221I\251\320\014sJ\322\001\300\244\311jz\212\231*P2(\003\232\265\n\355R\306\271O\023\311\346\270A\3275Z\306\330C\030\342\2553b\253\313%{\364\203p#\025Jh\360:REm\2662\306\241t\007 \212\241<[\033\332\240#5^d\340\326l\347kUY\335XVt\274\232\205\2054\257\024\307\300\025\003\251=\251\236_\2555\320\n\205\325}*&LT\022\302XU)\"\301\250$Z\256\303a\317jl\256\244r*\253$r\034Uy\25508\2523A\216\325M\243\346\233\263\024\030\351\273(\n\0055\320\212h\217\'\245?\312\004t\246\371#\322\232\320sA\213\002\220&*E^jP\234Tm\016M0\306E7\033MY\204\346\256FpsZ\226l\016+^\337\240\253\261\036kF\334p*\374gh\247\026\311\247\242\223SllR\004&\236\253R\252\323\324`\324\312x\247D\233\332\226\372\345m-\3131\300\002\270\362\306\366\351\244=3\305\\\332\025j\t_\025NY:\327\321l1Q6\017Zk\020EV\231\007QTn\327r\361Y\341\271\250\245\3475\237w\036A5\225\"\035\325\013\307Q2b\232W\265W\222>i\245\016*7 qP\236M!Z\211\322\232\303+U$\217$\3259\343\346\253:dUi#\315Vx0sM\335\216*\275\307\315T\036,\265\'\225M1\342\230W\024\302\274\323\302\356\030\247\254 u\305!P\275\252&\036\224\300\255\232\177\226Z\217 \323\204X\355R\242f\235\345\324O\030\250\274\202\355\305hZX\372\212\261%\221#\345\247\333\306\360\343\"\265\255e\316\005mZ\307\225\004\326\204k\212\230\032r\234\232\263\022\346\254(\245\013\315(^i\312*EJ\224-N\n\333\304Y\215r:\356\252o\'\362\220\374\243\212KH\274\270\305>V\300\2523=T\221\353\351R2\265\003\n\211\352\031:UY\027\"\262\347B\216qU\235\252\264\247p\252rE\223\232\257$X\252\362-VpEFy4\245F*\254\350j%\031\244\"\202\274Uy8\351U\244\340\364\250f\217p\315Sd\306j\273\255W\220pj\253\2569\252\362sP\025\246\340Pc\342\242x\363Q\030\351\270\"\227\223\336\200\t\357R\"/z\n.p*h\342\315H\321\252\255D\313B\2559\206\321U%\223-\212\275a\006\341\222+IT(\300\251\241\031#5u`W\035*hl@l\212\324\201\n\200*\334b\246U\315<&*x\315X^i\342\227\024\364\\\324\310\225<Q\345\262z\n\307\361\026\242!\205\221O5\312YFe\224\310\336\265\254\033\013PM%R\225\352\244\257_M\257+Q\270\357Q:\344TE3QI\027\312Mf\317\026X\325\013\230{\212\244\311Q:\325iV\252H\265^A\305T|\203J\t\3051\206\356*=\241M!Nhe\340\324\r\020&\240\236 G\025_g\006\252L\274\325I\023\232\253\"\363U\247\\\014\n\250T\346\232R\233\345\214\322\225\030\250\212sLt\250\366\342\203\026zS<\262\206\234G\031\024\304\310j\264\206\234X\236)6\212\221c\3152h\370\252\321\332\227\223\245k\303\030\2121\212\225Fj\334)\305\\\205qW\"lU\250\234\325\270\316EN\242\245Q\232x\030\247\253b\244W\251S\346\253\021\245XT\247O\"\333\302I\364\256\017Y\2727W%A\3434\353h\374\264\025+>\005U\232J\245+\325Y\036\276\237\211\3621N<\212f\332\215\261\232c\214\214U)\342\352k6\344\016k=\323\232\202E\300\252\222\325g\036\265\004\200\036\225RE\301\250\363\223N\t\336\243u\311\241R\226H\276Z\213\312\312\325y\027oZ\254\352\0005Fe\346\252:\363Q\030\273\325Ib\313Uw\213\232\210\305Hc\342\232\313\216*2\274\3224y\250\314$Rl\"\206\\\212\217n\0161\3055\243\347\"\234\271\024\361\232\221jX\305,\213\221D\013\203\232\262\274\232\235\0235n\010O\341W\343@\005N\252\017J\2361\355V\243\315Y\216\254(\247\343\345\246\201R\304\225r(\267t\025n86\214\232e\305\302\333!c\332\271]k_2\202\250p+\032\325\014\217\275\273\325\360v\212\206Ij\234\262\325I$\252\316\371\257\250a|U\220\271\002\224\305P\313\031\007\212\213a\357U\256\027\031\025\223t\2705A\333\234Ui\252\243\216j\264\342\253\212\257*\346\240\010wT\3418\246\262f\232\006\016)\3542\264\302\237\'\025Rx\370\252r!\305T\222<\325Yc\250\200\002\232\360\007\344Uim\361\332\253\264X\250\2311P\262\346\243#\006\203\300\3157w\265\030\006\232R\220E\236\324\341nOjSm\216\324\236V(\331\212r\203JsOE\2531-Z\215q\212\262\016\0279\2536\3409\373\325r4\332x9\025:\361\332\246F\253\0216j\324})wv\240\r\315V\241Z\275\033,k\232sM\205\311\254]gS\215\020\241nH\256,\223spq\367sZp\250E\024\347n*\234\257\326\252J\365VF\315Wc_P\333\275_\201\2676*\303.\026\240\316sQ\311\323\212\2478\310\254\273\264\316k2X\260j\274\261\232\251\"\342\251\315\235\325]\210\006\232\300\023L*\001\351E4\322\020\r!\006\234\243\"\253\\%S\2310*\243\255W\221}\252\263\305\3153\004R\200\030|\324\307\266SU\336\320\036\206\251\313\006\322EE\366ni\216\233x\305G\267\332\234#\245\021{S\326\017J\220E\266\206\\\324f:i\216\223\3134\010\363R,u2.*t8\342\247A\232\231S\322\254G#\307\336\247I\331\217\265Y\215\315Z\213\255Z\017\265i\233\31154F\256D\325)\230wlb\252\336_*D\3047A\\6\245y%\325\301\000\236MY\262\267\330\240\232\270x\025\014\217\305S\225\372\325I\036\253\310\365]\236\276\245\265\001\216;\326\275\255\270^M-\326\024qU#<\322\310\274UIW\"\263\256W \325\027\217#\245@\361qT\247\207\031\342\250O\016F{\325)\"\357Q\200i\010\246\023IJ\022\227a\315<DqPL\225U\343\315U\226\032\257$\'\322\240h\252\027\206\230c\307jc\014TL0*\244\253\223M\021\346\232\360g\265Dm\361\316)\313\017\265<A\203O\020\342\232\311\212i\000\236h1\361I\345\323LT\242:p\216\234\251\212\221\005N\213V\023\212\230sR\240\251\342\352*\344})\356\324\253\3235f\025\342\254y\201ET\272\270\371I\007\240\256J\362\376ied\334qRX\333/V\344\326\220@\243\212\212V\305R\232LU)f\252r\317U\236bM@\322\232\372\276\000c\270\307\275o\304\001@j\033\254\032\254\027\024\270\310\252\363-g\314\233\211\252rG\203P2g\265W\226,\212\247,\030\252R\301\223\322\253\233|v\250\236,\017z\215-Kv\245\3731\317J\221m\317\245<[\373S\314\031\025Zh0\rRx\261P\274C5\013\303\236\325ZHqP4U\013\305Q\230\252\'\203\212\253$84\325\217\232{Dq\322\243\331\317Jr\303\336\234b\310\351M*\026\242\220g\245Fc\346\221\205=W\"\223fMI\345\001I\266\214{S\225qR\251\301\251T\324\313\322\246N\265b>\242\255\241\300\245\0371\2517\000jE\220\372\361L\226\343nGz\243;3\0023\301\254\351\264\263\"o\217\357\372Ut\221\255\237d\203\004U\350\356\003\257ZI\030\021\223T\346e\306\rTdS\036GZ\256\326\361\270<\363P\010\241\214\234\234\232\205m\320\271,\303\025\365|p3M\234w\255`\214\221\363U\233.\324\241;SJ\342\240\224pj\214\243\004\232\253\"\344\324\014\2305\034\261\014f\251\315\0275T\303\223\322\217\263\006\355Q5\220\317J>\314\024t\246\213aN\026\303\322\227\354\374\036*\031##\240\252\322FNsT\344\213\255@`\366\2464>\325^H*\263\301\216\325\013A\236\324\306\267>\225\033C\355P\265\266\343\322\243\373)\035\251\337g\2465\2679\3057\312\301\245l*\364\252\2162i\23309\2462\223\364\250\334`S\220ejD\\\014\320M!S\326\212)\300\324\250jx\352\302\n\260\212ju8\024n \322\206$\323\374\315\265Q\245-!$\367\244g\315\"M\260\361TuT\023\215\353\326\263\240\271h\316\323WRm\302\243\231C\203TfV\307\007\212\246\312\312O=j\264\210s\232\205\213\000y\257\266R\331#9\3075\035\303\002\010\025X\000\275z\323X\223\320Rb\253\316+>n\rC\214\323\036:\211\227\"\240hKTOk\337\024,\030\355L\226,t\025\001\204\223J!\307Zi\3004\354\0028\025\023\302s\232\255,%\217J\253-\261\035\252\023\006{Too\307J\255$<Uv\2075\021\267\346\217#=\251\215m\355Q\0301\324SV\025f\246\315\n\216\225U\224\001P:\372T,\204\323\014X\024\306N2j\t8\250[\232tc\345\251\025i\305\007jc)\246\367\242\234\2435*\n\261\030\251\322\255G\322\236\016)Y\205\"\261&\243\272\227bqU\026J\003\232G\223\025\013>\352\243y\016#\336\274\021Q\332\317\274u\344U\242\341\207\275W~\2705Z@9\252\262.*\007Q_gK1\316*6#\0315\031~i\233\362i\035\2603Uf|\232\2457$\324K\326\234\313Q2S\243\207#\221J\320\202:S~\313\355Q\313m\201\315A\366lv\250\336\003\236\225\017\330\232F\310\025:Z\004P1\315+\332\344t\250\032\320)\316*\254\266\345\217J\205\355\266\366\252\362A\355Uf\267\366\252\255o\315\002\330c\2455\240\307J\205\342\307Z\2538\333\320U`0I\246\311\315Wd\315F\321`sQ0\301\340TN\274\344\324\017U\334f\230P\001B\016\325\"\214S\261H\303\"\240a\203E={T\212qVb\346\254 \251\224\342\235\273\336\232\016MH8\025^\344\215\207q\305VVQH\322\001P<\205\270\250w\025j\235\"\373J\262\237J\307\270\211\254\2561\330\325\270\337r\202\r\017\353\351Ud\034\325w\252\322\003\236+\354\327LT\017Q3b\233\277\232I\033\"\2539\353U\244\025\032\203\232\223\034Sv\325\250\242\033jO$\034T\236R\205\004\n\2514`\234\342\252\260\246\210\267\034\323\304a\0050&\343N\021\322\230\203\014\021U\344\266\003\265C%\236\364\310\353Y\223\300T\221\212\256\321d`\212\200\333\363L1`\3242&\016*\274\340\021\305Q\2253U\332:a\212\243x\373\001P<x\353P\276\005V\220\346\253\270\250\331q\326\241q\232`m\246\247\034\214\321\232\031\263P\270\315 \024\360)\303\255M\023b\254\243\202*P\334R\027\311\3059Z\2442\000\265\223\251NY\360\017\025U%oZ\2247\255\033\261Q\006\335 \025j\t|\251A\252\332\334f_\234\016\005U\262\223)\217J\260\365ZA\232\255 \252\357_gJx\342\251\271\305@\315L\335\315!l\324m\315@\342\230\027\275H\027\2126\324\2508\251\220\340\363Ns\305C&\000\346\253\030\367\032xM\243\336\230P\277\322\236\261`R\230\370\241b\246I\026EA\202\231\252\263\302$\347\034\325\023\tW\301\025\024\366\340\036\005Tx\212\202j\214\271$\325gL\324-\026MF\320\324N\200\003\353U\234`qU%\252\317\315B\302\2431\343\223P\312\271<T\016\206\241a\203O\216\\qO,\017Ji\246\322)\311\247\344R\203\212\2219\251\2235&\374\n\003qO\rP\3136\321\214\326e\324\273\232\233\031\315J\017\024\307j-\243,K\366\0253R\337J\005\2418\311\305a\351\363\2370\203Z\207\221P\310*\254\202\253\272\327\331\005\362*\274\206\253\275F\005%\030\315F\351LU\251Q2)D|\323\266\323\202\232\221W5\014\321\222i\022#\216\224\246,\323\3048\024ytyy4\361\026\005G\"\201\306*\263\307\315W\222?j\253\"\002zUy\023\0315B\344\026\'\212\2414[~\246\240h\2526@3\232\256\3500sU\245QT\344\034\325I\252\003\021\306\177\235&\000\3543PJ\334\342\240`j\027\031\250]sP\260\301\247\306\334\323\363McM^\264\3409\247\036)\361\036j\300\340R\203\201\357M\337J\222d\232\253>I$U\026\313=H\243\002\244\035)\222t\2530ql\007\2550\2659\343\363-\310\256o\230/1\357[h\333\220TRUw\025\003\327\327\241\363Mnj2\264\306\\SqN\013\232k%4ER*b\236\0234\005\247\204\311\366\251\0262\0057\312\311\247\254\030\024\236V\r#-&\314\323\322*VL\n\2470\3475]\375\252\t\016\005U\224\344f\253?|\325YS\275R\2252j\273\256*\273\214U9\217Z\247#Uw\346\253J\274\346\240\224\261\342\242\331\305FR\242u\250]j\027Z\210\307\232M\230\2444\231\315 8\251R\225\371\241\016*\312\267\002\202\331\246\223MC\203R`~uJx66EF\006i\300P\353\221R\331\270*c?\2059\342!\272T\207\344\217\232\345u\'\002\377\000\217Z\327\2669\210P\342\253\270\252\3569\257\256V\237\2126\323$N*0\234\324\311\036iLT\276M\'\227N\362\361@\213\234\324\251\025+\032UNjB\274S\0318\246\024\3074*f\246H\360*9\227\212\247*\325)\001C\305V\220\361U\\\021\315A(;j\244\204\325w \347\216j\264\247\031\2522\232\251)\252\2563P:\236\325\014\213\264d\365\252\354\2715\023\361L\0035\024\234\n\255!\250\\\3233\315!\3051\210\025\037V\342\224\361O\007\201N\310\301\244\007\025\"\276)\333\251\001\311\247\001\315:\231\"\357\252\357\013\'=\251\026\236W\212\210\251\007\"\246[\246\003\004f\202\346^+\231\324\223m\3663\336\266m\007\356\227\351O\220Ui\005W\220W\327@S\260i\312\271\024\024\342\220C\315K\034U0\213\035\251\336P\364\246\2309\246<X\251\022\036\006hu\300\300\246$$\232~\334\032p^)\nz\323\n\322\001\203V\021r\265\004\253T\245\035j\254\213\232\247s\204\030\025\2315\306\322y\252\357rXu\250\014\200u\351P\310U\201\332j\234\234\234Uk\201\221\201\320U6\031\250\035sQ\272\343\212\255*sP2\342\240u\246\036\005A/J\247!\346\241c\232i8\240d\324l)\"\031jYW\024\300qO\317\024\224\345j\221Z\236\005<\nq_\226\220.)veMU\331\203N\0034\025\246\025\305>!\303\037A\\\315\351\363/s\357[v\243\021\001Nq\305V\220Uy\005}q\013\006Q\353R\201OE\247\205\315H\221\324\321\240\002\237\264\032Q\036()G\224\r\002>i\255\026\346\247\244T\217\0074\242,\no\223\232\0144\202\000\0175&\300\023\201Uf^\rR\225sU\'\033\006{\326=\365\306\300Gz\305\232B\306\230\217\270\342\235\"n\\Uq\023+SfL\017qT\2465I\371lS\034mZ\254\365\023\214\324.;\324\022\014Ui\rU\225\252\253\232\256\357L\017\223S\203\201Q9\311\241X!\247HC.j\005\344\324\203\245%\003\232\231\005J\2435\"\216)\3523N\331\2326b\252\312\010\'\216)\213\326\236W\212k-<\201\025\244\217\355\\\241\375\345\347\343[\360\014 \241\305W\220UiE}a\021\3323V\242`\342\254\"\324\210\27052-<.x\251\002b\235\262\200\224\341\0352B\000\367\244A\237\255N\221\323\314`\216\224\236I4\215\036\007Jh\216\227\313\024\322\200U)\323\031\252\315\027sY\227\331\000\342\271\353\303\363sY\222\202\347\002\233\024D5]H3\311\250\345\217\214\201\322\263\356\037\004\3257\001\201\365\252R/\226\331\246Hr\265Q\316\rF\307\025\013\260\034\325I\237\255T\221\372\325I$\252\322=@\346\231\270\203\305?q#&\220\277\2457~O4\374\361H\274sO\316x\242\220}\352\260\235*U\353R\252\361OQ\212\220-?m\006\020\352F*\213\305\345\312E8\257\024\315\2318\246j\315\344\330\021\353\\\316\236\236e\306k\240D\302\323d\025^J\253%}_\037\335\002\244\217(\302\264b\033\224\032\231\026\245\013\201OU\301\247\205\247\201\201JF)\013\201\336\242r\035\200\024D>n\265i\005N\253\232\224 \305\r\010#\221P4;M!J\206L\n\251\"n\346\252Lk:h|\314\237J\310\271\261\363\244\300\351U\245\323\204}\005W6\301\017JRB\251\252\3228\000\326&\241.\t\305g}\250\347\255#\310\034sP\277\003\203Udb\r@\357U\345\227\212\251$\231\252\262>j\263\232\256\355\212\205\236\242-\316E8I\3074\3230\024\3230\025$2\0313S`b\233\273\232\221A4\241~j\263\032\346\245\013\212\221\005H\243\232\225\026\244\333NU\252w1\021.i\241ic\213-\232\317\361\021\305\260Z\307\322c\344\234V\332\216*9\005U\224UW\025\365|C\345\025*\214\325\353f\371@5r5\315N\251N\tN\333\216\224\247\345\031\250\032NsL\00414\233jx\0275az\324\241\252\344\021\344S\335\000\025\003\256j\t8\025^@\000\346\251\314\334qT\'$\232\2451<\212\257\225RsU\256\034\023Y\267\017\202j\243\275S\232N\rd\336\374\300\326\035\314\206&\251a\225YG\275>@;UYXt\252Rw\301\252s1S\315S\222J\257$\325ZI\352\273\313\232\205\244\246\t9\247\2113M,*7j\226\336L\032\262_\"\204\031j\274\2106f\201\036*x\227\212\224\216)\310\271\251\221j`\234S\266\323\224b\241\270\210\263g\2650F1\322\244\216\034)5\315k\322\231&(\017\002\2156\337lc\212\321\333\201PJ\005U\222\252\311_YF\274T\221\360\325b\036\034V\234\013\270f\254*\342\235\264\032xN*\033\236\000\003\275V+\270\324\220C\226\347\245H\360\200\331\355OE\000qN^\2652/5\243\007\013\355O|b\252\277z\2473sPH\246@Eg\260`\307\'\245W\232M\300\340`\325\t\006\320Mg\317&\033\223U%\227=\353>w\3115RG\342\252L\325\235vN\rs\267\357\311\311\246\330L\035qVe\233o\004\361T\345\234\023U\244\227\323\245U\222@\374\032\202H\211\025Jd#5FL\202j\0268\025\003\277\2750I\357O\022R\227\250\335\351\366\317\226\346\256\251\315X\205y\253\240\035\242\244U\315N\251O\362\363R,x\025\"\256*U\024\360\264\241(\331\221\212`\207,\0057P\220Z@y\344\327 \352n\256I>\265\255\004;\020T\215\300\252\322\216*\244\243\025VN+\353\270\"\014\277\2050\256\032\247\205y\255+s\201\322\246/\223ONjU\\\3247\003$\n\2164\344\017Z\263\267b\361L<\212p_\226\234\242\247E\342\255\302H\\S\234\346\253\312j\224\207s\023H\000 \372\326|\321\376\360\346\251\334\021\316*\204\337v\262/\030n\342\250\310\365JV$\325f>\265\014\2046j\205\322eMs:\234$\022EeE;C\'\025jK\35719\034\32531f\306ie\220\005\306j\214\263\020x5\021\274e\352i\215u\274r*\244\254\rBW\"\253I\031\315W`T\320\262S\203\323X\346\245\200\022EhE\326\264-\343\334Eh\254C\035)Bm\355R \366\251\027\351R\016i\352\225\"\245H\027\024\273E(\\\324\201DHY\253\231\326\257\276\321)E<\n\202\312\323\003q\034\232\275\263\002\242z\255%U\222\252\313_`\306\230@E\t\016\342ML\261m\251\221\212\324\201\363V\242*\027\2558\312\005Fr\3074\350\323\346\315L\304`\323\021h<\234S\224sVPqS\'\024\326j\257+\366\252\262\032\205\244\333\306x5ZW\316qY\327.9\025\233q/j\314\2709\346\251Jj\224\307\004\232\2454\300\016\265E\3569<\324\023Lv\232\310\275\231\030\020G5\217\265<\323\351E\302\250N8\254\331d\020\234\346\252\313u\236\206\253=\306\017Z\212K\235\325\017\332\0055\247\rL3c\275 \2349\344\322O\027\313\221T\317\006\236\274\323\200\311\253\366\321\201\036j\355\265\271|\034V\275\265\266\321\315X\013\201N\013\232r\256O\002\244U\247\252\347\212\235\000\305<S\216):\232\232$\301\311\351Tu\253\261\034%A\344\3275\004\006iw\036\225\253\034AT\n\034Uy*\254\225VNj\254\235k\354\270\320yt\210\2705(\\\323\302Q\263\024\354\020)T\325\204\306\332\221@\002\203\311\240\214RT\221\255N\202\236N\321U\344\227\002\252\2312\335j\031\0335\003e\217\265T\236M\231\002\262\347\227\336\263n%\311\252R\266j\254\344*\326]\315\300\031\025\221q9\311\346\250IpA\340\323M\313\021\203Y\327YsT\035\002\234\346\253\31778\'\212\315\273\031\034\034\326y$\032\2573\034\361P\031\010\353P\274\234\320\257\307Z\212Y\210\3434\310\335\263\232\273\035\306W\rLh\267\034\212U\214\203R\010\316E^\267\\\341Em\332F\021\006j\320|S\225\267t\251\200\340\n\225T\366\251V\022\307\232_+kS\302\342\226\220\223\232\226$\344\023Ks\'\227\0315\314\336\312\3273\021V-m\302(\342\254\036\005C!\252\322\032\251!\252\262\032\255%}\235\032\356l\n\225S\r\322\236\022\236\022\227g\265\036]\002:\221F0)\304\222)a\034\363J\347\232@9\251\320T\243\201L\221\361T\247\226\251\264\23756Yv\255Dn\206\323\3175\233s6\342k.\342\\\032\317\232QT\245\270\002\252Or\031q\236k\032\351\311c\212\316}\362\266\320)\255\007\226\016z\324%\327\030\305W\235\227\006\261oe\303ak:x\2163\277\232\317\220\221\234\232\2534\270\357Ud\227\025N[\214f\252\275\327\275 \272\317zE\223{rj\302q\336\236I\355SAq\261\260E\\I\021\271\247\227^\325=\233\342J\331\205\363S\200MX\2019\253(\233\232\256\"\010\307L\221U&\2721\313\317\002\245K\270\344\035Fi\342E\'\255<\221\212\217\316U>\364\341)&\240\275\2371\355\254\350`\313\226=j\342\250\013Q\310j\264\215U\2445VCUd5]\315}\251\004{NML\007\036\346\236\250jEZv\312]\276\324m\366\250\317\006\216I\247&Fh\'&\234\242\246Zs6\005U\232^\265BisU\267\374\325R\356\353\031\252\3130a\326\243\220\361Yw\215\2675\211ws\2635\225%\337\230\345A4\203\246I\250$\300\311\2523\334\210\363\267\257\255g\315t[<\325f\233\336\250\335\335\354\007\236k\n\366\356E$\201Y\263j/\336\251\313z\355U\332r\325^Y\216j\224\363U6\234f\233\347\363SC5\\I}\352Q8\035\350Y75Z\215\317\025e\027u]\266]\214\t\255hI\030\364\253\321|\302\255B1V\241]\316*\352\340\036j\256\243j\034\002x\025E,\202\363\232xm\207\0252e\251\255\t-\232W\220D\235j\241&g\311\351R\201\264R\026\305A#Ui\032\253\310\325]\315U\224\325W5\366\341\343\212\221\005L9\305<-<\n\\Q\212\211\327\234\322c\002\202i)\350jU8\025\024\322`U\t\345\252RIPy\230j\241x\333\344\300\244\216\"\213\315E<\270\254\213\331\201\007\232\347\257\337$\201Y\221)\363jy\037h<\325\033\213\200\024\340\3265\335\320\004\363Y\263_*\344\346\251\315\251\341~Z\317\270\274\334\t-X\327\027\214\317\313dU;\213\215\300\3257\271 T_l\355P\315q\234sU\'\232\250\264\331cG\233\315Y\202@\306\254y\200S\322M\307\025z\332-\330\364\253h\2305n\036*\344n8\255+YA\\V\235\260\310\253@\200p*\304\007\016*\360\217\200{\324W\255\300\025P\266G\2654F\t\315I\271\"\\\346\252K|Y\260\202\223cH2\306\237\032\205\241\332\240g\250dz\254\357U\344z\256\357U\244j\255!\257\270\002\2265:&\005<)\006\244\024\341N\"\232)\255Q\223\305% 9\247)\305=\233\002\251\317/Z\317\232Z\250\362\324N\340\002I\250\241\002F,i\323J\021Mc^\334\200\016\rbOp$$f\263.\034\3621\315S\335\264\363\326\252\335]\005R\001\254\213\213\236\2715\201}}\272R\024\361Te\270\000\034\236k:\346\370(<\326U\316\245\214\363Y\322\3529\357U$\276\367\250$\277\317z\203\355Y=i%\270\001G5R[\234\367\252\255>\033\255!\270\343\255Mks\363\016kI%\030\253\020\020[5\251\024\212\027\002\247Y\005Y\216^*x\230\273\001[\2261\000\203=kE$\0100*H\337\'5v\006\344V\222\r\312\rg^\316\014\207\320Vt\267Lx^\224\213r\370\305)fu\344\323\240\214\006\253.v\n\217}G$\225Y\336\241y*\264\217P;\325wz\201\332\240v\257\272cCS\252c\255H\0234\365@h\331\203K\266\230E1\206EB\334\032Bx\244\034S\201\250\245\227\000\325\t\345\252\023IU\331\363P\273\357`;\n_=b^*\215\355\330\333\220k\236\277\273c\320\326a\221\213\022MV\270\270\000\034\036k6i\270<\326M\345\346\001\3075\221sr\356\017j\304\272\220!\'<\326M\336\243\267<\326%\336\242Ny\254\271\257K\036\265Y\256w\036\265\014\323\355\037z\253\031\311=i>\320W\234\324R^\037Z\204\334\363\326\230\323\347\275F&\251\241\270*\300\326\204W\204\201Z\026\323\222*\354R\234u\253\021\334\036\231\253\220\312Oz\324\323\3344\234\326\374\022\341EJ$\346\254D\376\365r\031j\361\275)\t\307\245d\313.\365bM@\204T\253\212y`)c\223\rO\226L\324%\370\250^Z\201\344\250\036J\256\357P\263\325wz\205\336\240w\257\275#A\212\225s\320\324\3528\247\355\244+M \n\215\216)\214\365\004\244T`\346\214\323^@\242\251\3175P\232nMR\222Z\202I\260\247\232\243svP\020\265FMD\205 \232\241s|\314\017<VT\367j\t\3475Fk\323\353T&\271\311\353Y\367\367\236Tg\236k\r\357\201\311&\262u\rX\000B\232\347\257u\"s\315a\335_\026\'\232\314\236\3539\346\250IpI\353M\022\234\344\232\212y\262*\025\2274\254\374UI$\301\250ZSQ\371\247=jE\2235b6\316+F\333\265i[\266\332\270$\310\251bm\306\257\333\236kR\315\266\267\025\267\004\271Z\231d\346\254\305.\000\253QJ\001\253\036`pW5BY6\243\003\3275\032IR\254\274u\2453d\320%\245i\263\336\243ip\265\003\313\315B\322T/%Wy*\027\222\241y*\026z\211\232\276\372J\231jPi\340\323Y\300\250\232Lt\250^Z\205\345\250\232L\324B]\246\225\247\030\353U\244\237\255S\232~\274\325\t\246\252sM\216\365N\342\343\345\353Y\3677\'\034\032\313\236|\223\223Tg\234\343\031\254\351\345\353Y\327\027\030\357T\232\347\223\315c\352\267\274m\315aO3\260<\220+&\355\260\016Mb]\311\327\232\310\270\223\223Y\363IT\336\\w\250\376\323\305F\323\346\220K\264SZ\340\036\365\014\222\203U\336Ni\004\231\251\021\252\334O\214U\373yj\364S\325\224\233\336\255C(\255\013ikF\332\343\004V\304\027\037-X\022\324\361K\223V\243\227\035jF\237\236\rV\271\220\344s\301\250\226Z\224MG\235\357J&\240\313Lij\027\226\241ij\'\226\240y*\026\222\242i*&z\214\276k\357\364\251\224\324\213CI\212\201\244\250^Z\257$\325\013MQ\264\330\250^Z\204\334\220qP\311q\357U%\237\336\251M5Q\236~\265\2375\316A\346\263\347\271\353\223Y\263\334c<\326u\305\327\275g\\]{\326|\367\031\357Uf\230F\275y\254-B\340\023\234\326T\327\300\002\005e]\\g$\232\303\275\272\000\232\310\236\353$\325\031\347\310\342\250\3111&\233\3655\033\311\216\364\303.{\323L\225\033\313\212\256\322\322,\334\325\210\246\253\2218\"\255B\3705q$\253\t5[\202l\326\225\264\340U\370d\311\310\255\033k\255\244\0065\241\034\333\207\006\255C%[Y:f\234\3161\221Q\310\373\220\216\365Qf\303`\324\236u!\232\2015/\237\357Li\252&\232\242ij\'\226\241ij&\222\2432Tl\371\244-_\240\213\305H\246\225\244\305D\362T\017-Vyj\007\227\336\241ij7\227\336\240y\261\336\253I-Vk\216\2435ZY\361\232\247,\376\365\237s?^k:{\234\003Y\227\027\030\'\232\316\270\2715\231qs\327\232\317\236\353\336\250\313pk>\352\354\363\315`j7\340df\260\2565\023\223\203Y\363\336\263g\232\316\234\263d\232\317\230\021T\346\223\002\251\274\265\t\234\212\215\247\250\215\306)\r\316*6\271\315D\322\346\221X\223Vb|U\330^\256F\365e$\251\322J\263\004\2075\247l\304\342\264\241\223h\346\256G&y\253\326\222r\006kR\'\301\253\002lw\2452\344f\231\346\3259\337l\271\365\245\363\270\246\231\250\363\250\363\251\2555F\323TFZ\215\245\250\232Z\215\244\246\031)\013\323w\327\350X\351J_\002\241yj\027\226\253I/\275@\362\325w\226\240y\361\336\241k\212\255%\307\275U\222\343\336\252Ks\203\326\253Ms\357T\346\272\254\371\356s\336\263nnz\363Y\223\334\373\326|\3679\357Y\227\023\362y\252R\314\000%\216+6\346\374d\200k*\356\363\203\315`\336]\006\'&\262\245\220\022j\253\221\234\346\253\3156\005g\3178\347\025\237,\241\263T\345\223\006\252K-@\322\324/!\250Zb;\323|\332r\311\223V#l\325\204\346\254\302H\253\3217\025e*\302U\273~\265\251n\274\003V\321\361V\242cW\355\230\202+E%\351\315M\347{\320\'\374\251\246lTS>\370\311\356*\005\237+\326\220\315I\347Q\347\323L\376\365\031\236\230\323S\014\264\326\222\243i)\236e\'\231F\372\375\r2b\242y\252\007\232\253\274\331\252\362M\317Z\202I\252\264\223\325i&\250\032j\257$\336\365VY\361T\247\270\367\252r]pFj\224\367]y\254\371\356z\326l\367\005\311\031\252\0272m\007\232\313\226\344\223\311\252\027w\251\030?75\207w\250\031I\000\361TZn\2475\233yq\327\232\306\272\270\353\232\316k\214\223QIq\216\365Rk\214\326e\324\276\206\263\332\344\2065\023\315\272\253\310\365\\\2774\036\225\004\225\036y\251R\254\304*\324c\025j sW#\025b<\212\261\031&\256A\234\326\204,\300U\270\315^\201\270\253Q\311\203V\343\233\"\244\363i\352\371\035y\246\274\271\353\326\231\346\365\025Qd\3014\031i\206jC54\315L3S|\337zO6\220\311L2Sw\322o\247o\257\320\207\227\035\352\274\223T\0177\275B\363Uy&\252\262MU\244\232\253K>;\325v\2375\014\262\344U\031\3566\236\265B{\2368<\325)%cUe\224\216\246\250\334N\000\353Y\263\334`\023Y\027\267\247\007\006\261no\230g\232\312\271\273.y5M\334u\315V\232|\014\n\312\273\270\003<\326=\304\333\215Ty\000\025RY\261\232\251,\365\237q>sTY\2715\013I\317Zc\276j\035\324\273\3150\234\3236\234\324\321\203V\342Z\271\022f\255\305\036*\334k\232\235#5e#\253Q\014U\350\216EY\213\217\245Y\214\342\254#\325\224o\226\237\346f\244I1C\311\315@\362`\324\r/\314M5\244\250\314\224\303-0\313M2\322y\264y\224y\224\205\351\246JO3\336\234\036\277@\345\237\035\352\253\317\223\326\240y\275\352\027\233\336\253\311?\275U\222|\325W\236\253\274\271\357MV\315E3\205\006\262n\246\3015\236\362njk\271D\315e\335\\\344\326t\323\365\346\263.n\307J\313\272\270\006\260\357\345\3018\254yg9\315B\327\034Ui\246\033z\326M\323\226&\250J\330\025Fi*\224\322U)e5NG$\324\022\266\005W-Mc\232a\351@\024\340\264\365_j\261\034uf8\352\344)W#QV\021*\314k\305H\006\rO\027\025r#V\3435f0*x\327&\254\343\000\nL\342\244F\247\270\004g\275U\227\255S\3632\315H\317Q\264\225\033IQ\231i\246ZO2\2172\235\346P^\232d\243}8>+\357\231\'\252\357=B\323{\3242O\212\251,\376\365Y\3561\326\253I>M@\363\373\323\243\270\001H\3175Z\342\343<f\250\\\220\3039\252d\252\234\346\251^^\014`\032\307\232|\347\232\316\273\272\332\0175\2115\347\314rj\205\305\336\356\365\233u(`k.Py\252r\022*\263\311T\247z\317\235\252\204\315Tfn\265Bi\0105\\\271&\242\220\026\250\212\221L\332h\333J\024\346\245D\315L\221U\210\343\002\254\305\035[\2121V\243LT\3521S\240\251U*x\324\n\260\202\247\215\261V\3429\253\220!cS\023\206\346\230\3074\350\315:G\305C!\371\t\254\322\373\\\323K\346\230^\242w\250\213\323\014\224\233\351w\323\204\224\031)7\322\207\240\313\201\212\373\312I\252\007\237\336\240{\212\255%\317\275U\222\343=\352\274\227\036\365]\356*\026\2334\303q\264\037Z\251qtW\247Z\317\236\365\217\031\252\023^\020\0175BK\235\331\346\251\313?\006\263o%\340\234\327?us\206<\326|\327X=j\244\227\033\252\273\311\221Ufl\203Y\362\311\202j\234\322g5Ff\2523=P\231\352\244\2475\001\034\322\021\3051\205FW\232P\224\365\216\247H\352d\212\246H\352x\323\025n!\322\255\"\034T\312\225f%\253\013\035M\034|T\253\035=W\232\263\027\025\247j\006\332I\017&\241-\316)U\361L\226\\S^O\334\234\326t\215\316i\245\251\214\325\023\232\205\233\025\031zM\364o\305;\314\243}\036e\036e5d\311\311\257\273\036\343\255@\363\325i.=\352\244\267\036\365VK\237z\201\356=\352\006\270\311\353Q\275\316;\324\rs\223U\247\234Vm\305\307Z\316\226|\223\317\025VY\361\236j\214\327X\315g_\\\374\247\232\347n\247\344\363Y\362\314MWy\210\357L3\202:\324m.j\215\3179\300\254\351_\034UY^\251N\325BSUd\'5\021&\233ASH\024\232z\307S$u:GS$u:G\355S,U*.*\334F\255F\233\272U\230\343\253(\230\251T\000jQ\216)\333i\3503W\255\233\024\255\336\243\"\220s\221\232\255p0:\324m!hqT\231\371\3053}!jc\034\324\016\334\324E\251\273\250\337F\3727\321\276\230\362c\275\010\371\257\271\246\233\025VK\212\253-\317\275T\222\343\336\252\311q\357U\336\343\336\241i\362i\217\'\025\037\233\264d\365\252\227\027<\032\314\232\343,j\204\323\340\236j\204\367=y\254\331\356\371<\326m\345\356V\262\345r\334\325I2MD\321\026\035j\264\244\306qQ\0318\252\363I\305gNy5RCUe\346\251\310*\273\256M7\313\366\243\313\245\021f\203\r9c\251\222:\260\221\324\311\035X\215*P\224\340\2252&j\355\262b\256\242\324\352\224\355\234\324\251\036i\3423\232z\241\315O\030 \324\204\363Q1\342\241y1Mr$R*\260FBG85Zx\312\234\212\255\273\006\202\324\302\325\024\215\232\205\2154\2657u\033\250\337LyqL\r\223R\006\305}\273,\371\006\250Kq\357U$\270\367\252\262\\{\325i\'\252\322\\\343\275Bn\300\357@\275P1\232\206{\260\007Z\315\270\276\000u\254\331\365\000;\325)/7\202sT..sY\322\310I\353U&9\004\3257j\201\333\232a\220\212\251r\333\305R\336rEW\270\223\025A\344$\324\016\325ZV\315Wa\232h\213&\237\345b\230c\366\241V\236\024\032r\3063S\244B\245X\300\251Q\005N\221\324\313\035H\221\325\210\342\036\225i\023\025f4\351V\025i\342<\324\212\273j@)\350\276\2652\2574\307\004\023Q\270\310\252\322qP\357\301\247n\312\363Q1\004\340\216*\215\314%\016GJ\253\277\007\006\202\325\023\032\214\365\250\311\246\226\246\227\246\031*=\305\21586)\341\363_iM?\025By\370\252R\334{\325W\270\367\252\362\\c\275T\222|\325w\271\307z\254o>l\223U\256u\036\0175\225=\361l\363U\036rGZ\200\\\2058\315A<\336\225JI\371\353P<\233\263\315Vv\250]\261Q3\201\232\2533\346\253uz\202\3421T\235\006N*\007\216\253\310\230\250\nP\026\235C-4-(Zz\214T\311R\255H\202\247AS\240\251\324U\210\261V\220\002*h\306j\300^)\353\305=FMH\213\315J\023&\244\362\310\346\211\006j\027^*\006\213&\253\311ns\305Fc+\326\232\313\236\265\013\r\303\006\263nc*\331\305B\033p\246\261\250\330\323\030\324,\365\023J)\233\363N\rF\354\322\206\257\261\345\270\353\315P\232\177z\2434\365RK\212\253%\305W\222\347\031\346\252Ms\220y\252\022\335\020:\325)n\t\3175U\346\367\252\362\334\205\035j\214\227\1777Zx\230:u\346\251\314\334\324\r6\332\214\315\232\216I2*\27395\033\234\212\254\371\352*\274\222\347\255Vv\250Y\252\027\346\242)\232]\231\243e)\024\314\nP*E\\\212\221\"\307\322\255Gn\010\353O\362\266\324\261\255L\243\006\245\003\245K\027\275Y\214\325\210\333\006\255!\334*U^)W\255L\265:\032\224\215\302\232R\243d\250\212b\241s\315@\340\032\205\3075\013\257\347Uf@\343\232\315\221|\267>\225\0336j65\014\216\024\036j\253\310Z\231\234\323\203`Rn\315.\352P\325\365\304\267\036\365Jk\214\367\252R\317\357U$\237\336\252\311=T\226\177z\2455\307^j\224\263\373\325In*\234\267X\357T\346\271\316y\252o?4\253xW\214\323\314\273\205C!5\026}\351\t\250\035\260i\205\263P\271\347\212\251*\345\216*\026\030\250_\025\013sL\301\035iI\244\334)3\232]\231\245\010jT\210\372\325\245@G\"\236\240\257J\262\024\262\362(\021\324\212\264\361R)\346\247\214\325\2045f&\305ZS\362\322\205\247\250\253(\270\\\232\267\010V\217\"\225\200\250]A\315C\"\361T\245^j\026\\TL*\031*\273\016\274U\013\264\301\315g\263`\342\242\222\\UVb\3074\322qL\'\024\233\251CR\3474\345\257\252e\270\252r\317\357T\245\237\336\252I=U\226z\251,\365Ji\352\224\327\036\365F[\217z\251$\376\365ZI\252\273\311Q\371\234\324\2119\025 \227p\246n\346\232\317Q3f\242c\203L\'\275G\216\t\252\223\032\200\232ajc\034\324l:\322`\232z/5!%E3\314\346\245Ij\302J\017z\235Xu\251\222b\275zT\273\263\310\351O\0074\341\203\332\236\242\245S\212\231[\0254o\315\\\211\263VB\340R\257\336\025nb\014k\212\226\321\200\\S\344\305Ws\203P;dUy9\250\236\253\311\305B\374\325y2:U9\237\177\007\255g\334&2j\223\214\346\241c\3151\232\230Z\233\234\321\234R\206\251\025\253\377\331"
+byte_png: "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\002\000\000\000\002\000\010\000\000\000\000\321\023\213&\000\000\001NIDATx^\355\3351\016\200 \024DA\362\275\377\225\211\375VFE!\314\224\357\006l\002\264\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\277\251\014\223\350\031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200\313\216\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\300\020=\003\260\222\312\000\000\000\000\000\300\352L\277\000\000\000\000\000\000\000\260-\227>\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000`^\276\023\000\000\000`+\016\302\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\357\351\031\000\000\000\000\266g1\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\340\013\336\307\007\000\000\000\270\2512\000\000\000\0000\206!\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`-\225\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000x\352\004b\"\006\010O\232\021\276\000\000\000\000IEND\256B`\202"
diff --git a/core/res/geoid_height_map_assets/tile-7.textpb b/core/res/geoid_height_map_assets/tile-7.textpb
index d00efe8..9667e64 100644
--- a/core/res/geoid_height_map_assets/tile-7.textpb
+++ b/core/res/geoid_height_map_assets/tile-7.textpb
@@ -1,3 +1,3 @@
 tile_key: "7"
-byte_jpeg: "\377\330\377\340\000\020JFIF\000\001\002\000\000\001\000\001\000\000\377\333\000C\000\004\003\003\003\003\002\004\003\003\003\004\004\004\004\005\t\006\005\005\005\005\013\010\010\007\t\r\014\016\016\r\014\r\r\017\020\025\022\017\020\024\020\r\r\022\031\022\024\026\026\027\030\027\016\022\032\034\032\027\033\025\027\027\027\377\300\000\013\010\002\000\002\000\001\001\021\000\377\304\000\037\000\000\001\005\001\001\001\001\001\001\000\000\000\000\000\000\000\000\001\002\003\004\005\006\007\010\t\n\013\377\304\000\265\020\000\002\001\003\003\002\004\003\005\005\004\004\000\000\001}\001\002\003\000\004\021\005\022!1A\006\023Qa\007\"q\0242\201\221\241\010#B\261\301\025R\321\360$3br\202\t\n\026\027\030\031\032%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\203\204\205\206\207\210\211\212\222\223\224\225\226\227\230\231\232\242\243\244\245\246\247\250\251\252\262\263\264\265\266\267\270\271\272\302\303\304\305\306\307\310\311\312\322\323\324\325\326\327\330\331\332\341\342\343\344\345\346\347\350\351\352\361\362\363\364\365\366\367\370\371\372\377\332\000\010\001\001\000\000?\000\367\325\3014\371\"R\231\350j\233.\036\244A\305?\024\273i\301iq\322\237\263&\223i\364\247\000A\247\201\232xRMH\252qR\252\324\253R\255J\265*\324\253S\245J\277xT\303>\264\342\271\003\214\323\343#\247z\260\242\245\024\360i\300\323\301\240\324M\301\315Z\267\225Yv\265H\313\316\005T\224\020qK\0023?z\261s\022,@\216\265\234s\232LPi\247\024\302\005D\3521P\2203PI\212\251 \252\262-V\221j\254\203\002\252J*\253\212\254\331\252\362-T\231x\254\371\220U\031V\251\310\2475\023-B\302\253:\344\324E*\027J\204\307PH\203\025\357\215\021\316E1\303l\301\250\n\372\323\324S\300\247\001N\013N\013J\026\234\027\212v\316)\352\224\360\265 Zx\024\365\025 \251V\244Z\231jT5*\324\313\232\260\200w\250\201\006rW\245ZS\305H\r8\032x4\360ii\214)\261\261W\253\350r\271\250\235C\311\315]\265\214q\201F\241\016\330\201\025\223\267\232M\274\322\025\250\331qQ\034\324MQ0\252\356*\273\212\257 \025NA\317\025Y\306j\254\252MUu\252\316*\274\202\251\312*\214\300sY\362\216j\263\212\256\302\241e\315B\313Q\025\250\230\n\201\326\240u\342\276\200\003\326\241\230\002x\252\373rsJ\020\323\366\032pCJ\0058\nx\024\360\271\247\005\247\205\247\005\247\005\247\205\247\201O\002\244QR\n\225M=H\365\251<\330\323\031aR\255\304{~\\\223@\363enX\201\350*\314h\024T\300\323\301\346\236)\340\323\3058t\245#\"\242a\206\315[\200\3459\241\201\r\221Wme b\245\277\005\255\301\035+\030\214\032J\010\315F\313Q2\324L\265\013\200\005V\222\252\310j\263\325wZ\256\353\212\252\340\232\254\350j\263\245U\224`U)GZ\317\230rj\234\213U\034sQ\025\250\314d\366\250^3\351Q4F\240t\305WqU\334W\2767\003\"\252\3111\r\203J\256\255\300\353S*qK\201\232\\sF)\300R\342\236\007\024\360=\251\340S\200\247b\234\001\247\014\366\247\000i\342\2363N\024\244\344c5\022.\331\366\036A\365\2558\342P\271\310\253\010GJ\220\032p4\3654\360i\340\323\301\251\005<R\024\315 \334\207\212\231\030\267j\263\016U\207\025v\\Ih@\355\332\262^.zS\nSv\323Yj&Z\205\306\007\025VJ\255 \252\262\n\256\303\232\215\326\253\310\265\003 \364\250^>*\244\250\000\2523-P\230\001\232\316\227\255S\220Uw\034\324Ey\2461\307\002\242<\324NqUd9\252\262\014\325y\026\275\335\345UZ\314\272\270_^k5\365/&\\\356\255\013}b9\024|\302\247k\325<\206\024\364\274\004\365\247\033\300\rK\035\310aS\254\253\364\247\254\253\237\274*u\301\024\375\246\227\276)A\247\003O\024\341\326\234)\302\226\242\225\312\014\324\006\360\t\327\'\232\330\266\270\363\024dU\241R\203\221N\024\361R\nx\251\005H)\353O\003\212F\034T\226\303$\214T\340a\263\332\247\21418\035\352\t\227ksU\317Zi\024\302*\'\007\265V|\367\252\322\016j\273\212\255\"\232\256\302\242~\225]\352\026j\201\315U\220\325\031\210\031\254\331\316j\204\243\232\252\353P\024\346\230\311P\264u\013\214\n\251)\364\252\315\222j&Z\201\326\275vk\261\264\363X\267wyc\315e\314^F\342\243\215.c9V5i\'\272\003\251\251\222\356\345G9\253Q\352\017\374`\326\276\237\177\004\214\003\234\032\350\022+Y\"\0048\006\253\315\004jr\257M\212]\235^\254\255\3169\316j\302H\255\315?\000\364\247`\322\342\234)\343\2558S\202\223Q\317\036R\271\3717\256\242\003\036\365\321Y\311\205\025\253\033\202\265(8\251\027\223\221O\002\244\006\236\r<\021R\003R-H)B\356<T\221\241G\006\247n\306\246\204\372\322\\\306]w\001T\212\220i6\212aZ\211\326\253\274u]\323\332\253\272\325Y\024\324\014\225]\322\253:\032\252\343\006\253\271\342\252\312\334V|\3079\2522\373UGSU\335y\250\312\324L*\273\234\n\247+f\2538\315DV\230V\241\221p+\266{\302\313\200j\253\006\221\263S\307\0161\232\262\221\003\306*U\205s\202)\376B\372Q\366d=E\002\324)\312\361Vc\226\3421\2649\253\021\3159a\271\262*\311\212F\\\206\305Vyg\204\363\234\n\267g|\314\303\232\331\212`\313\234\325\205n:\323\301\247\214zT\200\017Jp_jv*\031\234*\034\326\034\314\262\337\215\275\253^\334\020\202\257C!S\315^G\004u\251T\342\234\032\236\032\236\032\236\032\244V\251\225\251\341\252\304c\212\234/\0241\3711L\206C\346\214\326\201\001\243\342\250\314\2705\\\344\032Jkb\240\223\025]\260{\212\201\322\253\274uY\327\007\245@\311\315C$\177-P\2310MS\221j\214\335\352\214\240\232\247\"\324\014\265\003\245B\313\212\253)\364\252rd\324\014\265\023-D\313Q\225\250$\357]zB\005H\261\200zT\303\000\234S\325\260jP\3319\251\003S\267T\212sR\000*\302\000G\246*\310f\362\301\035\272\3222\254\211Y\263F\320\276\350\370\253VZ\211\334\025\215m\305p\254\274\032\262\262\217Z\225$\025:\2605(9\245$\001\363\034VV\247v\261\304Bw\254\315=K\314]\273\232\350\241U\333\214\324\352>n*\322\016\001\251\203qRg\2758\032p4\360jUj\2205K\037/W\342l\214T\300qQI\322\252\031\032)w\036\225\245\005\302I\027\0075\014\304\347\232\256O4\307\220(\250\231\362*\264\231=\352\273d\032p9L\032\215\205@\351\223P\262\n\257 \025Bt\2522%R\225=\252\224\251T\3359\250\0351U\335j\274\213\305S\221\016MWt\250\031j\026Z\205\205F\343\013\305T\220z\327l1\212\t\2405\033\271\247\254\230\251\004\224\355\365\"I\212\235d\253\013.@\036\2252JGzr\271\r\212I\000u\254\371-\312>\345\253V\267m\037\312\306\257\255\360\340f\254%\341\007\255[\212\364g\223V\016\242\2128\305S\271\324x\'uc\3114\267sc<V\265\234F5\034V\254l@\253\021\270\'\232\267\033\034`\366\2513\315<\032p4\360j@i\340\324\201\252h[&\257E\367\205[\003\212k\256k>\355\016\334\212m\263\262\307\221\324u\025\241\023y\311\367j)\241\220\002v\342\263\344\334\257\315\000\344sQ\271\031\250\033\257\025\023\023Q\2279\346\232\317\307\025\013\023P=U\225sT\344J\247,}x\2522\307\355U$J\253 \002\252\272\324\016\231\252\322&*\263\256j\273\255@\353Q\371f\253\315\264qT\2449\351]\216\352B\364\335\376\364\273\3517\363\326\236$\347\031\251\003\232z\311R\254\225b9x\251\204\235\352\306\362@#\222G4\365\177Z~\320\303\2450\333+v\244{b\2540i\271\225s\355H%\237=\rYF\231\327\245<Z\263\237\235\252\335\275\252\241\031\253\340\005\350i\352\376\365j0N\t8\253\260\347\025)<\212p5\"\236i\340\217Zxjz\270\365\247\347\212\226\006\303c5\241\021\031\025u\0334\375\271\025\004\261\344U\031$[@\305\206A\252\366\232\260K\235\270\340\232\350\"\270\216\342.\203\232\247wl\270$V[|\247\025\013\036\265\t84\036j\027Z\256\340\212i9\025\023sPH1Ud\252\262\000j\224\340\n\241/5Q\327\232\256\352*\007\025\003\256j\263\245Wt\315B\321s\322\241\230\205\\V\\\247,j\273\n\353K{\323\031\3523\'=h\363)w\322\356\367\251\026S\334\323\374\301\236*Uz\231d#\275XIr\270\251\343\224\250\353S$\244\266qVc\220\221Sg\"\244\213\030$\214\201I\265\013\020\007\024\341\n\372U\210\320/\030\305J\027\326\234\247\232\223w\024\233\271\342\245\216Gf\003&\265!\225\322?\231\177\032\224J\244\344\236\264\365n\375\251|\320;\323\204\231\357\212\221Y[\370\252@\213\331\310\245\303\257G\006\245\206FY\006\354`\326\234D\214\021\322\256\306\325aNE8\214\326V\261\thN\005`G\003\211\001\036\265\322\332e-\320\223V\334\253\306y\346\261\347]\254j\231<\324Ny\241O\313H\340\325y\001\305CQ\265B\347#\232\253 \252\262\n\243=Q\220UY\005Wu5\021N9\250\231*\t\020Uv\0305ZW\030\306k:\341\3075\225$\247\314<\324-7\035+\253-Lg\342\242f\346\220=/\231O\022f\234\036\244\r\306sR,\225:\276jd|\032\262\217\232\236966j\300\221wqS\253\361SC>\323\214qR\226L\345{\325\210\266\354\334O\"\207\224\0312\016i\333\370\245\337\315(zpl\323\343r\254\rh\255\323<!1\323\2759I\315L\034\201\212P\3709\247\357\247\253\212\225$>\265(|\323\362}kB\326l\240\004\326\224R\002\243\025a^\246F5\235\252\334\241\002 A5\237\n\000FGz\331P\242\025\003\245&y\340\361T/\007$\326y\353P\275*\0361J\325^SP\036\225\023\032\257!\250\031\252\t\000\252\222\2405FD\353UY9\351Q\262\014t\252\322)\002\252\273`UYe\000\034\232\316\270\272\003\214\326t\267LI\252SL\315T\2379\250^\272\306j\214\275FZ\233\276\215\364\241\352E\222\244\016E=^\246I*x\345\303sVc\220g\255XV\315N\2161\201\326\247I*P\374\346\254,\233\227\030\344T\210\375\273\324\245\243\\ps\336\236Y\n\r\275i\241\215<5<5J\204f\264\240h\304G=jx\345]\273v\365\357HH\316(\310\247\003R.jE5\"\2675*\266{\324\360Hc|\036\365\251\024\300\r\302\247[\245\0377j\255s\254$jU3\322\263\340\221\256%.\3479\255\r\277\'\025v\335\213\303\203\332\202p\325Z\353;+9\2175\033S\001\301\245,*\t\016MF\304c\025\013\342\253HqU\335\252\007j\201\310\305U\223\0075U\360\rA#\200j\234\322u\254\313\213\205N3\223YS\312\357\236p*\234\200\325W\025]\305@\342\253\270\256\221\236\242f\246\027\246\227\244\337J\036\236\255\315L\257O\017R\254\203o\275J\222\014`\365\251\243\222\255\244\274U\230\245(Cf\247\363\2030*1S\tr\243\216\225<r.\317z\221\\\203\221R|\3167\366\245W\355O\017OW\315H\246\245V\253\021\310sV\321\216*e9l\324\244/\033M\000T\252=*@3N\000\346\244\000\212\2327\033H#\'\265J\262\270\340\362)Y\344*|\266!\217j\242\320\334H\307w\353E\264\317o7\227 \305m\303.\365\253Q\002\2719\305)j\206\341\263\t\315g\340\236i\215Q\021\315!\340u\250\034\324\016\370\250\214\235\215C#dU\031e\332\330\250\232e#\223\212\201\347L\3435ZI\224w\252sN\240psT%\270l\236*\214\323H\335\361Td\004\234\232\255 \252\316*\263\212\256\342\253\276*\263\326\343=FZ\243-L/@zxjP\3305*=J\032\236\032\236\257\315XG\251\322J\264\222d\016j\3126\027\255O\034\312\001\004g4\364~j\302\276EH%`0\017\02524~I$\374\336\224\320\354G\034\212z=N\257\232\231\030\032\261\031\031\025~-\214\204\226\346\234\016\rH\246\246F\030\247\203\212\225MH\0174\372\221jT4\375\2719\034\032\221\034\243a\300#\351R\313i\004\311\275@\3156\331\014M\260\363\216\225t7\2754\2775RG2\311\264t\315\0050\265\003\255B\303\024\3228\250e\373\265U\352\273\203\236j\t\t\344\003T\244\353\223Ud \232\254@-\311\305W\231\030w\252RUY\rUpOj\253%WqU\334UY*\264\225Y\305WqZ\214\364\302\324\302\325\031j\003S\303S\203T\212j`\324\273\251\352\3252=L\217V\242z\264\030\201\311\251\243q\221\3179\253A\324\215\270\344R\254\234\324\301\262)rj\304\022\005V\311\355\322\235\021R\307q\251\343x\311\347\"\246R\240\360sV\021\252\3129\035*\302\022\3250\343\212\225\010\035\351\373\226\236\033\322\244Y*@\365*\265H\257V#`i\316@\024\353y\227qBz\324\341Fs\336\235\273\034S\033t\234/\342i\025\002P\354\000\252\256\331\'\025\023\017Z\211\216\005B\355\220j\273\363P?CU^\252\3123T\344\030\252\262f\2539>\265]\262\016qU&\31318\250\031\366\202\000\035*\233\325g\252\3626F1U$\252\317\326\253=Wz\276\315Q\226\2463Te\251\312\324\362F)U\371\251\225\252M\324\233\371\247\254\225*\2775:=XG=\252\322\3121\315M\033\215\303\'\0258\223\022gvj_0\023\221\305L\217R\206\315=X\253f\245V\311\311\251A\307\025<mV\021\352\324m\310\253\276daF\336\264\340\376\364\340\304\367\247\206>\265\"\276)\342Jz\275H\262{\324\253%XI)\354\344\212\2127\304\325t\316W\006\234f\004dT\213.!\372\323\004\231\357MbMF\300\001P\261\250\037$qQ\230\230\236\265\023\243\003\216\325V\\\347\025Q\363U\344\351U$\252\317\357U\330\016\265ZNx\002\252\310\010\353U$\034\032\251!\252\262\032\253!\252\357U\234\325g\252\357VY\2522\324\302\324\302\324\241\251\333\351U\271\251D\224\361%858\032\225[\025:\275O\034\225hH\030\016*\304R/\000\212\225~\376\007\"\247\306\334f\247F\342\245C\270\3435(\334\006H\340w\247\253T\241\301\307\255N\273\210\315J\256A\346\254\307\'\025ad\007\275J\257\3163S+{\323\374\314S\204\231\247\007\247\254\224\365\226\247I*\304rU\200\340\256*\031\t\007p\2530\310\255\016\032\246E\017\031\001\272\014\212lr\0026\267j\224\306G(i\271b9\342\230\330\305B\355P\266{\032\217\220:\324lX\036MA$\203?tUY1\234\342\240`\233y\353T\337\000\236*\244\234\236\225\003\223\214\n\256\303\234\325i\201j\245,|U)S\025R@y\252\256*\264\225]\305Wz\254\365#5FZ\230Z\233\2323F\352P\364\3573\336\236\262T\201\352T|\324\271\251Q\215XCVU\370\002\254F\334d\036j\314R\355<\216jP\304\375\354\342\246F\305H\255\315XIH\300=;\324\303i\034R\240\014\330\315YI\n\214\003\370T\236fXdT\312\346\246I1R\254\203\255L\263f\245\016\017zP\324\341%8IOV\357S\243U\204z\260\262qR\002\030S\014\215\t\340dU\210\356\001\371\223\203\334R\312\215\031\022vj\2369\tA\3159\217sP;\222j&$\324D\220qL\'\236hb\n\344\n\252\340T\016\265Y\326\252\310\265VE\252\356\265Y\352\264\225RQT\345\025NQ\326\251\310*\263\212\256\342\253\310*\263\212\215\232\230Z\232Z\233\272\227u!jn\3527\323\325\352ej\225\032\247\017R#\325\224z\260\222b\247G\346\254\240\'\007=j\310\220\340!\355R\241\347\232\235B\263`\034}jN\000\3109\251\020\343\004\364\251c\223k\344T\302M\317\222?*\223~_\203OW\303u\251\225\315X\215\201^MH\254)\352\376\365 zpjP\3075\"\261\365\251\221\361\336\247I*\302?\275L\222`\324\334H9\244\020\341\276S\214S\247\231\374\225\213\25754G\010\005L[\345\250\310\3435\021`F\000\315\001w)\'\202*\t\025\227\250\250w\340\324NFj\007\342\240z\255 \252\262UY*\264\225]\305V\220\n\247*\361T\344\025NE9\252\256\247\255WqU\334Uw\034\32564\302i\245\251\205\2517\321\272\220\265\000\323\225\271\251\225\252ej\225Z\245V\251\221\361V\021\352\314mVc\223\025b=\316r*\3021\035jej\2207\241\253\t 1\355<S\343\004\364\346\244\r\203N\014*Ej\231^\245W\251U\352P\365\"\265<5.\352z\275J\255\357\212\235\034b\247G\346\246W\2530\311\201\223S\253qP<\231\270\031\355Vc\220\032\235\270N)\214\333\223oJ\214.8\245\357\301\243\206\371Z\252\\\302c9\035\rU<\324.j\0075ZF\252\262\032\252\344\325g\250\0335]\371\252\362.j\253\2475RT\346\252H\270\025VAU\234Ug\025\236MF\306\230M34\231\245\317\024\204\363@4\340qR+T\252\3252\265J\255S+T\350\325b7\342\255F\331\346\254\306\3079\007\025`1*9\251U\2601\326\246F\031\03156T\036\016jh\330\203\221R\222Y\263\214f\234\230\r\317\"\227?5H\032\244W\0252\275J\257R\253S\367R\206\247\253sR\253w5*\265L\217Vcl\324\352\330\220\n\266\207#\025Z\351\037\031\217\255V\216\352x\333\016\207\212\275\036\240\2546\234\203SB\354\316I\351R\203\315.h\341\271\035hp%\214\251\353Y\322FU\210\"\253\270\036\225Y\326\252\312\225Y\322\253H\265Y\324\347\245@\374\034\032\254\343\234\324M\310\252\262\216\265RJ\247.MUu\252\322-Vq\305d\226\246\023Q\223Q\356\367\245\315(4QJ)\300\324\252jUj\231Z\245V\251\320\346\254Fj\324lG\025r\006\031\346\247B\017z\2262;\323\267\020j\324j\206\035\333\271\364\247D\344?=*\324\215\362\014\021N\204\253\0341\353J\300\256y\244W\251Fz\324\252\330\025*\275J\257R\007\315<8\306)\301\252Enjej\221\032\254\243\325\210\316X\032\275\033t\251\202\203\324R\375\231I\316(\373\002g~\006j\312*\371x+\217|Uy\303Dp\006j\271\270 \341\201\247\3078\335\234\324\305\260\301\327\241\250\346\001\206ER\221*\263\240\252\322%Wx\2168\025VH\315Wa\216\242\253\312\252z\201T\345\\\032\256\353P\272dUY#\342\252\311\030\364\252\222 \305S\221j\214\301\206qX[\3154\311Q\2264\335\324\007\247\006\247\356\245\315(4\361O\025\"\232\2240\251\021\252\3025X\215\271\353V\243<U\204j\260\217S+T\252rqR\347i\3009\251\343 \216N)\341\311\372T\270*\241\273\032\221\037\236\275}i_n\357\222\236\013\005\301\351R\203\307\006\234\032\245Y8\247\211=\352@\365\"\275J\032\244V\251U\252dz\265\033\236\335j\3542g\212\273\031\253+\332\246^j@(dW\352\240\325Yl\321\262v\326M\305\254\321JY:zS\241\271 l\220b\247,1\301\315B\3705Y\305V\220T,H\340UI3\232\253&j\263\212\255\"\345j\263\257\025\t\025\014\203\255R\224U9{\3259\007Z\204D\013d\212\346\235#Y8l\212a\205\030\375\354Q\035\270c\214\212\212\341\022!\214\202j\274\1773\201S\315\037\227\214w\024\305bx\245$\212r\266j`i\342\237O\006\245SS\241\253\010j\314m\305XV\253\t\22229\251\221\271\251A\305H\255\232\263\033\003\324\324\350\343n\322;\324\310\352\t\004qI\237\234\340`S\267\374\331\251<\302\344f\224\032\221Z\237O\034\nz\265H\257\315J\262T\253\'\025\"\275L\257Vb\223\232\273\033\177\020\352+B\031\001\025q\rN\246\245SN\240\362*\t#\r\326\263o-\201BTr*\22420;[\250\251X\203\355P\275WqP8\252\322\n\253 \252\356\277/\270\252\255\301\346\253\270\344\325g\340\325yMT\227\232\251 \315W1\344\323]6\360+\210!\275i\244\260\356i\242G\\\340\365\250\233s\234\232tm\345\364\024\366\230\276\003\016\225$e<\300{w\253r\305\013G\274\020*\025\2156\360i\n\225\353OSO\310\245\006\245SS\306j\302\036*\304f\254.H\3105v&P\230\024\241\276j\225Z\244V\346\247F\346\247S\305H\037\r\234\324\306r@\030\024\343\206\210z\346\206R\207\203\232P\346\244W\247\207\247\371\234S\225\363R\251\342\236\032\244V\342\245G\251\225\252\304oW`|\361\232\275\003\020\370?\205h\306\325aZ\245V\247\203K\234\212kUy\260T\346\261\034\001x\333jC\322\243aP=B\302\253\310*\264\213P\225\311\305T\232<\023T\344\030\252\322\364\252\217\315VqP\262z\324eB\202j\234\254s\\q\0034\322\242\242*3HV\230V\215\264\240\021\322\2367\221\214\232zeMYb\257\017\'\221L_j~1K\355OZ\235\rYJ\235x\30752\203\334\325\230\316\016\005M\273&\236\rJ\244\324\350jt5 4\360j@\374b\235\274\205\306i\341\325\227\035\351\331B\270\031\315H\2411\202pip\017\3359\246\206 \324\251%L\032\236\255\357S#qS!\253\010j\324M\203Z\020\2718\307Z\320\211\362\005YV\251\225\252@\324\355\324\326<Uy\233\nMd/\31736)\347\245F\325\003\201P\260\036\265\023\343\025]\361P\036\032\242\22523Y\363&\t\252r-T\230\205\025M\245\001\251\254\340\362j\244\217\222Fj\254\307\025\3071 \323KSI\244\315%\024\240T\2129\247\225\364\244\035i\350y\251;f\216\364\361S%XS\201Vb\031\344\324\253\326\254FqR\003\322\245SR\251\251P\324\312\3250jpj~\352pl\323\201\247\251\247\344g\203N\016Tq\336\236\233Yy?7j\010(\3305\"\310jEo\232\247V\346\254!\253\010jtnj\375\273\343\006\264!l\n\264\215S+T\241\251\333\251\013U[\226\375\321\252\01003\353C\032\211\215D\306\240z\201\252\026\250\232\232yZ\2512\003\232\243*V]\337\312\246\262\032L\277\025\034\222\262\346\230\231#&\243\230W\"\3035\013)\034\323OJm(4\341\322\235\3058u\251\001\371i\271\346\245\000\005\036\264\341\315;\024\242\245N\265b<g&\255Fw(\305L\240\324\252jE52\364\251W\000sO\004v\251U\252P\334S\303\016\224\340\303<\364\247\340\377\000\t\006\224\026\035j@\331\247)\347\223\212~\354\232U?5M\221\320\362E4\0346*`@#\006\247Rv\346\246\215\371\253(\325:\265h[0+\357W\342n*\3225L\255R\007\245\337Az\255p\333\276Z\256H\025\033\032\211\215D\306\242j\205\272\324,*&\025\0218\250$\"\251JG5\225z\003Fq\324\326RC\206$\325k\200\014\230\024\364\030J\202q\\\203TmQ0\301\246\321O\006\235\324S\200\247\017\273H:\324\213\315H\235jJ\\qNZ\262\225f\037_z\237<\323\201\346\245SS)\251\001\342\236\rJ\246\244\007\'\024\376\206\216\246\2342;\323\203\266z\324\201\263O\r\357O\006\234\032\237\274\223\223O\334\t\342\244V\305M\033\022x54d\022y\253\010\336\365aZ\256[\276\ri\304\334U\224j\231^\245\034\216\274\322\027\342\230\322`{\324\014\347\251\352j2\325\0315\033\032a5\033T,*6\250\237\245V\223\326\251M&;\325)%\310\254\311\231\235\375\252\274\204\001\201T\235r\371\2511\204\252S\232\344\332\2425\031\246b\2234\240\324\212i\342\237\216)\005=2O\025 \340\324\213\315:\234\242\246CV\242\373\270\251A\346\244S\315H\247\007\025*\265<5H\246\245\006\236\247\030\247\347&\234\r;u8\032x4\354\324\212i\340\214R\203R)\342\244\r\305=\037\232\261\037&\254)\003\241\251\221\253B\324\256\316z\325\350\337\232\266\215R\243v\251\225\360\334\323\032Q\311\364\250w\345\267\032k74\302i\244\324mM=)\206\243aQ\221\232\211\306*\234\355\201Xw\263\034\234UA&\345\246>1\315Tq\223P\224\3074\215\367j\204\347\223\\\253\n\211\2523L4\322)GJr\232\221jL\214R\016\224\345851;\200\300\247\255;\255<\n\221z\342\254\241\251\224\324\203\255<\032z\232x\340\324\273\362j@i\341\251\340\323\301\342\227>\364\3655 4\354\323\324\323\263N\006\244\rO\335R)\035\215M\033\342\254F\377\000.*\324#.\0015u\006\016\001\351V#\227o\007\275^\215\270\251\343o\230S\236O\236\243$\236\275)3\305&I\245#4\322)\214\0050\364\246\355&\232\313\353Q5V\231\302\212\311\272\271\007 \032\307\235\3015\000\366\244+\353Q\262T\022t\250\034\374\265B\342\271\206\250XTG\2555\272RQN\247\255;\275-;<\n\261\000\334qO \251\247-H\242\236\275ju\351S%J\270\301\342\224T\203\255H)\340\001OSO\006\236\246\244\006\234)\303\255H\264\372p\300\247dR\346\236\032\234\032\236\255\315J\255V#j\271\013\373\326\204-\214\036\265e@.\030U\264j\231\032\234y\346\216qJ\026\227o\265\033i\n\323\n\212i\000Td\324N\302\252\3132\"\222Mb\337j\013\310\006\261&\273,x5\n\356\220\344\324\341p)\255Q9\342\252\312j\t\017\025F\342\271\206\250\232\241=i\207\255\'C\365\245\3174\3454\365\247\034R\255<T\3206\331*\334\201J\356\034S\000\251TR\201\315J\265:\032\224R\216\rH*U\353O\305/Jx\247\203\305H\275i\375\005(<\324\212i\343\245(\353N\310\2434\240\323\201\346\236\032\245F\253(j\324m\212\273o(\003\232\271\033\340\017z\270\215\300\251\203T\212\325 l\323\301\036\224\271\244\246\265FMD\316\005U\232\345\020ry\254\253\275P 85\207s\251\273\222\003V{4\262\266NhX\017z\235\020(\247\036\225\013\265@\357U\24495\013\364\252W\035\rsMP\260\250\217Ja\353M>\224\237Zx\353R\255\004\020sNZx\351R\3062\302\256\034\234\016\240R\262\355jr\364\247\201O\002\245PEL\2434\374q\212r\361R/Z\224\032)A\247\253f\246SN\316i\300S\207\024\3658\024\377\000\306\223\232PisJ\r8\032\221\032\254\243U\230\332\255#t\301\253\201\211\333\316M_\211\376Q\315N\255S)\251\226\244\002\235\201Lc\212\201\246\003\275T\226\355\001#p\2527\027\310\001\371\353\036\353P\31085\225!\232v\357\212\022\323\007$T\302\020;PP\na\030\250\235\270\252\356\325]\336\240s\305FNEU\270\037)\256i\205B\365\021\250\3154\322\216\224\240\323\267v\024\365c\322\227\004\032\221jd\353W\004\213\344\343\034\347\255\'\336n:T\252*@8\247\001R\257^j\302.O\2659\200\315\'\361T\202\236\246\235\216)\271\305875*\275H\255R\251\247f\2274\240\320\\\212\177`M\034\2122i\300\324\210jtj\265\033U\224nEZI\006r\0175j\336B\033\035\215_F\315XCS\241\251\205G,\351\022\222\314\005a\337k\221\306v\241\254\306\325%\224\360MW\226I\333\236y\252\315\034\316~f4\253j;\363R\210T\016\224\245@\250\310\002\242sU\335\261U\335\370\252\316\336\365]\233\232\211\333\212\210\266\005V\235\376CX\rP8\250M0\323i;Q\320\322\203O\006\244\\g\232\231zc\0252\240\3019\351O\031\253\366\361\006\204\237J@9\251\025sO\013R*\324\3506\214\320y\315 \247\212x\247\203\305!\353IOZ\221s\332\244V\251\001\245\3158\032\0174\375\304\256(^\264\273\273\032\\q\220i\351\232\2363\315[N\225*\2675idP\177\n\232\031\300q\223\326\264\342\220\021\326\255#\014T\236z \371\230\014T2\352\320\304\244n\025\201\177\252=\303\355\214\361T\022\006w\334\347$\325\264\205@\351S`\001\202\0055\243R\231^\275\352\0221\332\232[\025\0335B\317PH\365VF\252\3625U\221\352\002\324\306j\205\237\212\2513\326CTL*\026\025\031\246\232oJJQOZ\225jd\025a\027\212\220-[\266/\367\027\275?\313*\377\0005J\242\244\002\244E\035i\371\244\301\243\270\342\236:\324\213\203J}\251\264`\323\200\247\251\"\244\024\360i\324\240\323\201\315;4\240\322\343<\3203ORj\302c\031\025b6\342\245\315I\021\314\200z\324\267(\321/\007\236\264\221j\245Wk\360EX\376\332\n\274u\252\263\337\3176Ys\315W\002Y\016]\215N\221\201S.\005J\036\202\325\031r:To/&\242g\r\323\255@\356A\305B\322T.\325\004\215Udj\254\346\253\273S7z\324\022=T\231\253=\2526\250Z\243\"\233M=)\264\243\255=jU\251\343\253H3Sm\253\226k\222@\\\232s\347\314;\252E^)\340T\212)q\203J\000\240\014\344\n\007\002\236\264\277Jv\3363IJ:\323\301\247\212ZP{S\201\247\016\231\245\006\244\340\2504\006\300<\320\rH\246\244S\203S\207\002\245\017\3059d!\262*\353\312&\201r9Z\246\360+6qJ\220\252\365\025(P\006;R\360(\336\005\036e/\233\212<\332i~*6z\205\244\301\3105\021\227\223\236sQ\263)\034u\250\013T.rqU\334\325y\rVs\315D\315\315@\346\252J\325U\205B\325\023S\017Za\246\232oz\007Z\221jU\253\021\366\253q\212\235Fj\345\2332K\362\212t\247t\333\261R \342\244\002\235\333\203\326\202=z\212\024\022\t\024\244`\n\\aA\245Z\221\027\223\2321\212LQ\212p\353N\006\236\016h\3058u\247g\265(\353\305/\"\214\234\346\235\332\234\032\245V\251\001\247\253b\244W\253q8\362O5\037\233\363u\247y\231\024\365l\3655\033H\001\3057}4\311I\346Q\346Q\346S\014\225\0235D\315Q\261\246y\230\353\315D\374\234\3665\004\200\212\253!\252\354j\0268\250\035\270\252\222\032\211\372T\rQ50\323OZa\246\np\353OQR\245Y\216\255\305V\224U\273D\014\373{\232\236ks\020\311\024\304\346\245\024\243\000\344\366\244\357\222)\300\r\271S\370R\362W\036\224\270\342\234\006)\303\257\024\275\261E&)qN\002\224qN\036\224\017J\\\343\232z\236)i{R\322S\303S\303S\267\323\225\352E\230\201\2674\236g4\361/\275?\316\343\031\246\027\367\246\371\224\206OzC%&\372<\312B\364\306zaz\215\232\230MF\304\342\242/\306\337Z\202d+\315Un*\t\rWv\342\252\311Q\275B\325\023Tf\232zS\017\335\246\212z\212x\251TsV#\025r.\325i9\253\020\313\345?R*\371\304\366\244\253\022GPj\262\014\034\032\230R\0323\353J8\351N\0370\372S\205<u\247t<\320\0074b\227\024P:\323\250\247R\201\232^\364\240\323\205.(<Q\232P\324n\243q\243y\365\245\337\357@sK\346R\231\016:\322\t=\350/I\346Q\276\215\364\233\351\245\351\205\251\205\251\245\251\205\252&=\3523/ 7 Uiz\344t5Y\215W\222\253=F\346\241cQ\261\250\217ZC\322\230\3351INZ\221jT\253\021\325\270\373U\264\351R\021W\254\334*\037\\S1\363\232\220t\246\023I\236i\340\322\203\203R\002\017\265<u\25101\326\225\224\216{Sz\322\201\212v3I\214\032\\\023@\024\264\016)A\247\016\264\374R\022h\006\220\361M\335K\270\021\357M.G\024o\243}\001\350/K\2734\205\250\337F\352M\324\233\351w\232k7\024\302\364\322\324\233\251\204\323\031\252\0265\013?\0305\014\253\201\270t5Y\352\264\225\003\232\211\215DM0\322\023M4\224\341R\245J\265:u\253Q\325\270\315L:U\233Y\002?#4\367#\314$\n\\\323M4u\245\006\234\r<\032x5*\362)\343 u\243\003\034u\245\030\305;\036\224\233y\243\245/\247\024\243\030>\246\220\212AN\006\237\236)\t\355M\316)\t\'\245\030\342\220\361M\'\212nqHM&\352v~Z\003PM&\3527\323wsK\272\223u\033\351\245\251\245\251\205\251\013Tli\214j\027\351Qn\307\r\322\240\224\000r\275*\263\325F5\023\032\214\232a4\204\361L\315\002\236\2652\032\231}\252d\315Y\216\255GS\212\236\334fQS\3101!\3157<R\023L\315(4\271\247\203R\003R+qR\344\343\232Q\307Jp\03194\340\010\247\001\232B1IG\265!\244\245\006\226\220\235\304SI\346\200\324\241\251I\3150\212c\036j2\334\320\016i\305\276\\Rn\245\315&sHz\323\t\305&\3527\321\276\220\2654\2654\2654\2654\232\215\215F\306\241j\214\221\336\253\310*\213\032\211\25264\302i\244\323riA\247\251\251P\324\312jh\315[\214\325\244\251\207J\232)60\"\2479\221\2629\246\367\305\006\230i3J\032\234\246\245S\315H\016jU\3509\251\027\337\221R\002:b\234y\342\201\220y\245<\323OZC\301\240\363M\"\212L\321\232i84\233\217Bi\273\260i\333\361\322\220\275F\315\236\365\036y\245\317\275.\352L\363N\006\220\232n\352i4\302i7Q\272\223u\033\251\244\323I\244\317\024\323Q\267J\205\252\026\250\211\347\232\317cQ1\250\311\346\230i\244\322f\226\236\246\245S\305H\246\247CV\2435n3\322\247^\224\345\353\212\322\217\313K3\317\314j\256~j\\\346\232\324\302y\2434\360j@{\324\252F=\352U<T\240\364\305J9\247\001\3158\014\321\212LRc\332\220\375)\017Ja\244\367\244\'\212a<SKS7\322n\240\2650\232L\373\321\2327S\263\225\310\024\252\300\036i\031\275*2\324\205\251\245\251\245\251\245\250\337F\354\320Z\232M74f\230\325\023T-Q5e\223Lf\250\311\250\313sI\236h\240u\247\203R)\251T\324\350j\314f\255\306j\312\364\247\023\216j\365\216\331Q\225\215G*\354\224\257\245 #\024\3265\021\353H\r=[\232\225Z\244SS)\033G\255J\246\245S\305H\032\236\r.\356\306\234W\003\353L>\324\323M\246\232a\342\230\324\302i\204\320\341B\202\246\242\315\033\251\t\244\311\2434\231\347\25586)\\\343\2453p\307^i\205\251\245\251\245\251\013SwQ\272\223u.\352ijn\3527PMF\306\242j\205\215d\261\250\330\323\t\246\023I\232)GJx\247\212\225ML\206\254\306j\324f\255\241\342\234\307\212\237O\230\013\260\t\342\264nmZc\230\2278\364\2522#\304p\343\006\242\335\232a4\314\363OSR\203R\251\251T\324\312\325*\232\221M<\032\\\346\235\274\343\004\320H4\323M=)\264\323Q\234\232a\250\332\230M34\204\322\023Fi(\316)\245\251w\361L\'\232ijB}\351\205\251\244\321\272\214\322n\2434\023M-I\273\336\215\336\364\206\243cP\265b\261\250\311\246\023L&\200iA\247\216\264\365\247\216\225 5*\032\260\206\254\306\325j6\251\031\262*%\220\244\241\207j\3504\375b8am\340\037L\326m\355\351\271\270/\3335\\=!zM\324\3655*\232\225MJ\246\245SS)\251T\322\346\234\032\224\032\\\321\232i\246\232i#\031\250\311\250\311\346\230\325\033S\r74\233\251sK\333\212c\034\034SwRn\244\'<S\t\244\3154\232i4\231\367\245\315\031\2434\231\246\223M\315\033\250\317\024\3265\013\032\302f\250\313S\013SKsI\272\234\rH\246\245Zx4\360rjU\251T\324\350\325a$\300\251<\312i9\2401\035\351\300\323\267R\027\240752\265J\246\245SR\251\251U\252U5(jpjvE(4\264g\336\214\373\323[\332\230i\215Q\223L=)\215Q\223Q\223I\232PiwqH\307\217z\214\223\212ijaj3\336\232Z\220\232i4\231\024f\235\232\t\246\223\212i4\322i3\317Z7PNj6\256t\232\214\2650\265&h\006\234\rJ\246\245SR\003OZ\220\032\221MH\255R\253\323\304\224\360\364\241\251\301\250\335F\352p5*\032\225Z\246SR\251\251\024\324\252\325 jxjx94\372\\\361I\232L\2123Mj\210\222)\214}\251\204\367\246\023Q\261\250\233\2453u.x\245\007\232\225\223(\010\252\344\3434\306\343\361\246\023M\311\307\024\335\324n\242\212L\342\214\321\232\t\246\023HM74\233\250\335\357M&\271\247n*\"\324\233\250\335Fi\300\324\252\325*\232\220\032x5 4\360\324\365jxjxnj@\324\273\251\341\251sJ\r8\036jU5\"\232\231Z\246V\251\024\324\200\324\212j@i\312i\341\251\331\244\315&M\031\367\244&\243c\315FMDN\017\024\205\363\326\243c\305F\304\032\211\216(\031#\255(4\361!\306)\034|\271\250\030\361\212\214\2657y\035)\013qH\r;>\364\271\240\363GJi\244\315!\246\223L\'\232i4\233\251\013W0\355\223M\315&E&is\357J\rH\255S+qR\251\3434\3654\360i\340\323\303S\303S\203S\303S\203S\303S\203S\303S\301\342\236\rJ\246\244SS+T\252j@j@\324\375\324\360i\300\323\263\357FM\031\367\244\315!<Tlj&5\0214\322i\244\373\324lj6<sH\030\003\315/l\203@l\034\324\276p1m#\232\254\307\234TLj2\324\007\3004\003\306E8\036\306\215\324\273\251wR\023M\244=)\244\323I\246\032a4\233\253\227-\223M\335I\273\2323N\315(5\"\232\225NML\rH\r858585<585<5<585<5<5H\rH\rH\246\245SR)\251\025\252Ej\2205=[&\244\006\236\032\235\232\\\322\023M-F\352\215\215D\306\242cL&\232M0\232\215\2150\261\315J\214\n\340\367\2460a\317jh~)\214\325\0314\302i\273\251\341\206\336:\322\344\223K\223\334Q\232L\322\356\244\335A<S\r0\232Bx\246\036\264\322k\223-\3054\265(4\271\367\245\006\224\032\221Z\246\214\361\232\231M<\032p4\340iwS\203S\303S\303S\303S\303S\303S\324\344\324\240\323\301\251T\324\201\252@\325\"\232\2205H\032\236\246\244\rN\rO\r\305.\352\013SKSwSKTlj&5\0314\302i\205\251\205\251\231\245\007\217z\223v\341P\236\t\3050\232\214\2654\232i4\240\324\200\340\360i\373\263Hx\246\223M&\215\324n\244&\232M4\236i\244\323Mq\345\2517Q\276\234\032\224\032p5\"\234\232\235MH\032\236\032\234\032\234\032\215\324\241\251\341\251\341\251\341\251\341\252@\325*\236*Ujx5\"\265H\032\244V\247\206\251U\251\341\252@\325 jpjpj]\324n\244-I\272\232M0\232\215\252&\250\311\246\023L-L\3174\240\322\207\303sC\234\214\216\265\t<\3233\216\264\302sHzQ\236)CT\212\324\377\000\274\277\312\232})\204\323I\243u&h\3154\232i\244\315qE\2517S\201\247\006\247\003N\006\245C\212\224\032xj\220585.\3527R\206\247\206\247\206\247\206\247\206\251\025\262qS\003R+T\200\324\201\251\341\252Ej\221Z\244\rR+T\201\251\301\251\341\251\333\251wQ\272\220\265&\357zBi\271\246\232\215\215D\325\033Tf\232\017ZM\324\204\364\247\356\310\305D\307\006\230M7\214SsI\232\001\247\206\251U\251X\367\025\031\351L=i\2714\271\2434\206\233M\256\037u\031\247\203N\006\236\r8\036jPi\341\251\341\251\341\251\301\251wQ\272\234\032\234\032\234\032\236\032\244V\251P\367\251\203T\212\325 jxjxjxj\221Z\245\rR+T\201\251\301\251\341\251\333\250\335N\rAjij3M\315!5\031\311\250\330\324lj3M\355M\3474\016h&\232O\0353Q\036\231\037\2254\234\322f\214\361IK\232z\265<5!\246\232a\244\2434\244\346\220\364\246\032\3417R\203O\006\236\r8\032\220\032p4\360\324\340\325 jP\324\273\250\335N\335J\032\234\032\244V\251U\252el\n\2245<5<5H\032\234\032\236\032\245V\251U\252Ujxjv\352pjpjv\352\003R\356\244\335F\357zL\323I\247\2466\234\323\n\007REVpT\342\230\324\314\361L&\215\324\023\3050\232i=\361M>\242\233\324\322\023\317\024\231\2434\240\323\303S\201\310\305!4\323\322\222\2234\003KM5\300\003\3158\032x4\360x\247\003O\006\234\r;u85<5.\352]\324\006\247\006\247n\245\rR+T\310\334\346\246\rO\rO\017O\017O\rO\rR\006\251\025\252Tj\2245<5<5;u8585.\357z7Q\237z7Q\237z\017Jn\342(\022`\021\353C&\344\316EVpGZa\351Q\232a4n\240\234\323\017\024\334\343\232C\216\242\223\004\216)2i(\315(4\340\324\354\320Ni\246\222\212RsI^z\r<\032p<\323\301\247\203N\315(4\271\247\206\245\335K\272\227u(jpjpjpni\341\252tl\n\225Z\234\032\236\032\236\032\244\rR\006\247\253T\212\325*\265J\255O\rO\rN\rN\rN\rK\272\215\324\273\250\335F\357z]\324\204\323M |Sd;\215B\325\0314\3064\314\321\232\t\342\232h\315&qM4\334\321FisN\006\235\232J);\322\321^v\r?<S\201\247f\234\r8\032pj\001\247\006\245\rK\272\227u(jpjpjxjz79\251\225\252@\324\340\324\360\325\"\265H\255R\006\247\206\251\003T\212\325*\265<5H\032\224585<5.\3527R\356\2434\273\250\335F\352B\324\322i\t\342\243cQ\023L&\230M!4\271\240\372\323I\240r0i\017\024\323\3274\231\244\245\311\245\006\234\r\031\245\315%\024W\235\203\3158\032p4\340i\333\251\300\321\232]\324\273\251wqK\272\215\334\322\206\247\206\245\rO\rR\253T\212\325 jxjz\265<5J\255R+S\303T\212\325 j\225Z\236\032\236\032\234\032\236\032\234\032\234\032\215\324\273\250\315.\3527{\321\272\2234\204\322f\230MF\324\303M4\323I\232\\\322\032L\363J\334\322\000H\3152\203\322\233\223K\232Pi\331\245\006\214\321\232Z\377\331"
-byte_png: "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\002\000\000\000\002\000\010\000\000\000\000\321\023\213&\000\000\004RIDATx^\355\335as\2420\020\000P\207\376\377\237\\\346\346\254\236\225\023\205\020`\223}\357\333\341\264\232d\223\335\004\352].\000\000\000\320\216az\001\000\000\200\236\331\006\3466N/\000\000\335\222\367\001\000\222\371\232^ \007\225?\000\247\220\200\000\002\361\034\010\000\000\000l\347\320\363\265\321\301\003\220\210%\017\000\200\030T\246\341,}N\337\001S\237\214+\000\360Dq\000\374\257|\'oMiR\225a\253\362K\000\000\n\250C\222\023\000\313\275\332\352\351\277\354^E\005\275\032.\337\323K7Y\343 k\273\001\240y\2228@8s\373M\330\231\252\340\255\361\247\207\364\022\244\324\351\324wS\013 \214N3M\017>d\313\017//u^\000\234\367\316\274R)\240\272\247\237h\301\341\353\253\211\021\307\341\203\017t\301\332\321\240\263\222\357\375}\253\004\315\322\357J\343\243-\343\261)\2266\375p\\q\233u\033i\317s\000\360\317\352* n\232\343\267\325\003\013ley\004\232\021\277Np\346W\333\320\300\250\223\234\020=\234\342\025(`\351\200\246|\230\262\037^\256g\356\215\032-\000\303~l\367\3779F\330)@O\204\331\223|\335\221\257\305\000\311\314m\021y\341\264\316\252|\243\366\247\035\343i\315a\245\020#\245&\204\276\205Xh8^\345\n\003VQ\\\204`\375\007\256\246\213\301\364\337,\244\343\n\335;\356Z\035\350E\310e\260/ %\331.9\001\000m[_\275\254\377\211\\\364\317\341t\371\361\3649\027a\000\3752\273\201\217\234\202\003\320\021Y\r\322\263\014@c<\235\000G\030\343\375m\336 iW\325\352\367\007J\002\225T\350H\023\262-\317\213z\205\000\000:eu\007 \222\277yi\274\214\276J\260D\272N\233\253b\322uDgL\377\243\305\354\360\271\371\r\300\216\336.\276\236 o_\314\234\017k\335\"y\020\321\200\342\004\000\000\000\240\224\023V\000\010\307\215\017:\242\332\004\330\313\212\025Vm\321\243\025\001\360\244\325\257\230a\336\252\031^\0328\264\312\210\003\301]\277\337pU*;Z\350\017\267F\314\206\310S\000\244\0263=\003\320\001{-\332u-\2206TI\242\277I\033F\234\0164\372\345UV\033\200\014\332\314QT#\000\016\320H\'\337?\346\323\307\r_\017\036\334\271\007\277]\004\t\233\014\354/|va_\033\003@j\0028\234\245\227Q\024\000qY\240\222\373\035\000\202\001b27\001\310@\276\003\000\0008\311\306G\321\032c\373\t\000\000\3009\276\246\027\000\000\000\000X\"\327c\r\000\000\000\241y\026\033\000\000\232\340\356\n\000\313L\017{\366\316 {\377~\200r\323\025\021\000\000h\202R\036(e\375\000\000HK)H\337\276\247\027\266\231\2350\263/\000\000\000\307\363\210vr{\006@\370\335\337\236\215o\314\020~\260\000\330\217$\000@\"\366\201\233\364R5\364\322\016\000\250Fr\004\323\000Rq8@6\2451_\372s@\016*hh\211\031\013\220\217\265\377\215\336;\347\247}\275\267\022J9\360\002\310Ju\004\271\335\326\200uK\301\373\322q|\377r\24166t\2734}w\321{\025\330\213\331\017\000\273\220b\tmv\337*ry\" \000 \225\331\"\021\200\336\331\375U\022=\227\032h\000\000\200\276\335\367\245\321\367\247\034C\034\344\346\034\010\000\000(e?\271T\274\236\252\271\027,h]\315\267\007\3261\377\222\023\000T&\244\000\000\000\000\000:Up\037\030\270\270y\002\300Y\276\246\027`1\321\003\000\000\215Jy\220\357\004\366!e\000\000\000\000\000\355q\240\003@\021\247\3407\2113i\342\246\003\300\203\204\010\220\214\335pb\006?9\001\300\203h\310\352:\362\206?/c\017\300E:\000z7\270\357\005\000\000\000\000y8\r\004\200\\<\362\000\000\000\000\035s\350\017\000\000\000\000\000\000\000\000\000\000\000\375\030\374\241\000\000\000\000\260\220c\004\000\000\000\000\000\000\000\010n\364\337\010\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\177\000UW\201D\216\024\213\243\000\000\000\000IEND\256B`\202"
+byte_jpeg: "\377\330\377\340\000\020JFIF\000\001\002\000\000\001\000\001\000\000\377\333\000C\000\003\002\002\003\002\002\003\003\003\003\004\004\003\004\005\010\005\005\005\005\005\n\007\010\006\010\014\013\r\014\014\013\014\013\r\017\023\020\r\016\022\016\013\014\021\027\021\022\024\024\025\026\025\r\020\030\031\027\025\031\023\025\025\025\377\300\000\013\010\002\000\002\000\001\001\021\000\377\304\000\037\000\000\001\005\001\001\001\001\001\001\000\000\000\000\000\000\000\000\001\002\003\004\005\006\007\010\t\n\013\377\304\000\265\020\000\002\001\003\003\002\004\003\005\005\004\004\000\000\001}\001\002\003\000\004\021\005\022!1A\006\023Qa\007\"q\0242\201\221\241\010#B\261\301\025R\321\360$3br\202\t\n\026\027\030\031\032%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\203\204\205\206\207\210\211\212\222\223\224\225\226\227\230\231\232\242\243\244\245\246\247\250\251\252\262\263\264\265\266\267\270\271\272\302\303\304\305\306\307\310\311\312\322\323\324\325\326\327\330\331\332\341\342\343\344\345\346\347\350\351\352\361\362\363\364\365\366\367\370\371\372\377\332\000\010\001\001\000\000?\000\372\231pH\251$\267VL\367\254\371\020\207\251\243^*@\224\241)\301i\341i\3060y\244\333\216)\343 \324\2523\332\236\02752!52&*t\025:\n\231jt\251\322\254GV\024\362*u\'\326\244d\312\214\363O\207\003\203\326\255\306\265:\361\322\244\rOV\247\203J\335*\007$\034\325\3339\303\200\032\245t\303c\265S\270\0058\246[!w\305]\272\265T\207wz\311nM7o\265\030\2466\rFP\032\206H\306*\263 \315W\230\n\2432\325\031\226\251J\225NU\305P\234u\2522\216\265RJ\2512\325\013\204\310\254\233\230\205f\316\265Be9\252\356\225]\327\025Rd\311\252\355\025W\226*\254\320\325yb\3005\365#\302A\310\246\311\273\313 \325R\236\265\"-H\006)\301y\247\204\247\004\247\004\247\204\342\235\345\360=jD\216\244X\352P\265\"\255J\242\245QS \251\320T\350*h\315XNjt\346\255F\240\365\250\230\217\264|\275\252\344m\305N\032\236\r=MH\r:\243qL\211\366=i\304\373\2275\024\310$z\273cn\001\030Z\227U\266\333\000#\245`\024\346\232S\232B\225\023\246*\026\250\036\240u\252\262\214\346\252J\005T\225EP\234u\252R\214\325+\204\2522\245T\221qU&\025\2378\353Y\267 \020k*u\252R\255Uu\252\316\231\252\356\225\003%B\352*\264\251UeN+\352\245\\\216j\013\224\035\252\231L\267\035\251\313\035<!\247\210\310\247\005\247\201O\013R*f\236\251R*b\236\026\236\026\236\026\244U\251UjU\025*\324\351\305J\206\246\363\02602jd\273\214\016\033\'\332\201$\3236\001\332\265j\030\266\017z\262\207\212\225[&\236\246\244\006\244SO^\224\244dT\016\2705z\315\267.)\322\002\255W\364\371\3600EZ\325\001{P@\342\271\306\0304\334PFj\'J\201\322\241d\252\362.\001\252r\361T\2465RS\232\247*UI\027\0315Ja\315S\2262{U9b\252s.3Y\267\002\262\256FI\254\351\327\223Te\\\232\201\243\250Z\"OJ\257$\'=*\007\204\325i\"\307Z\255(\364\025NQ_S7\000\021T\346\271\303`\212\022E\177\255O\034y\024\355\200\032\\P\006i\301i\333qOQR(\251TS\200\247\201N\000\372S\327\351O\\\324\212jU\'\322\236\r\014\304\214\003P\000V`\247$\037Z\330\202\330*\203\305[\213\013\305N\246\236\rH\206\244V\251\025\252E5*\323\307\"\221\243\317jD-\021\342\254G)~\325n\334\225a\305i\311\373\333B\007\345XR\301\363\032\204\305\212M\230\246:\324\016\225\004\240\000j\224\325Ja\326\251L:\325G\034\324N\225Vh\352\243\304\rW\226\032\245<X\315f\\\'Z\314\271Lf\262nF\t\254\351\206j\234\213P\224\346\243r\027\245@\334\324\022\020\265Nc\232\2450&\251\312\247\232\372~I\225W\232\310\277\273^y\346\262$\326E\274\231\335Z\266^\"\216e\0370\253/\251)\3440\305:=H\023\311\247\235AA\353SCz\257VVe=\352E\225}EYL0\247\205\364\247\016\r8\034S\201\305H\r8\036i\353O\006\226\242\232S\030\315V\223P\013\"\022y\255\353\013\3012\000j\362\234sS+f\236\246\244^\325*\324\253R\255H\265*T\200f\232\353\305If\001b\r\\\003\r\355V!-\236:\032\202\352=\215\315Sn\264\302=\2526\025\004\240\325II\357T\345\034\325I\005S\231s\332\252\272\325y*\264\225ZG\002\253J\331\252S\221\315f\\\340f\262.\3339\002\262\247^\265FT\252\317\025D\361b\253\274U\014\211\264U\031\333\035*\223\344\324\016\234UiR\275\376\343P\\\036k\235\324u\034\261\031\254+\271\236c\305W\207\3550\266T\234U\370\365\013\240\270$\325\230\265[\205\352\r]\207[c\215\340\212\335\32258f`\030\340\327S\r\234\023\304\n\3103U\256\254\204G+%6\t\314g\226\253\251{\216I\310\2531\314\262sRc=)v\220)\300S\307J\220u\247\257ZxRj+\230\267%r\267fD\277U\'\214\327U\245\313\265\026\267a\2202\373U\204;jE\344\202*U\025*\234T\252\325\"\260\251\024\346\245J\231zS\266\356<S\342\214\306\340\325\266\003\031\025=\271\351\232[\330\214\211\220:VaB\r&\312\215\222\241\2213U%\212\252K\026*\244\211\355T\346Bj\244\221\232\253,g\232\251,dU)T\203U%<U)\332\262\256\2379\254\311\372\232\317\225\t5VD\346\241d\025\014\213\232\253)\3329\252\023\276j\224\213\232\256\311Q\262T\023G\2055\351Rj{\327\255g\312Zg\357S\303k\300\315]\216\331N\006*e\264\\\362*O\262\'\245\037`F\355J\272\177\226r\274\032\277oys\000\332\034\325\250\257\356\035\276c\220j\331\216W\\\251\252r]\317lp\331\300\253\372v\254]\205t6\367\"@9\253H\374T\212\303\275H\270\364\251UE=PzS\366\3243\260U9\256b\375\322k\325\333\311\025\271`\244 \255[y\212\032\323\212@\302\247F\301\247\207\247\207\251\003\324\212\365*5XF\251\003\325\250\007\002\255*qC\234&*8f>h\035\253X\200\361\361Y\2671\340\232\250N)3\232c\001U\245\002\252H\001\342\252\313\025T\222,\325Ic\301\252\262G\223U\345\207\212\313\271\217\031\254\371\226\263nA\346\263\'\031\252\023&*\244\211\232\255$u]\343\305S\234\3435\2371&\252:f\241t\250\035*\"\225Zq\332\273\310\355\252t\204)\351S\250\000\361\322\245F\301\251\325\303\034\324\252\324\360\300T\250sS\000\rY\205A\030\002\256\243\237(\021\333\255$\210\263\247AY\0270\265\253\356\217\212\275\246k$0V<\327Gox\035A\006\255\244\342\254G(5b7\006\247SN \001\311\305dk7\311o\t\333\3115\317i\200\317r]\273\232\353\255\021v\201\232\264\253\363qW\242\007h=*\302\277\025(n\375\251\312j@jEj\231\032\246V\251c%\230\n\324\201\301P1VB\361QM\322\2504\246\031\003\036\225\257gv\262\305\327\365\250.\230\347\232\246NM5\344T\025]\345\3348\252\263\263\020y\252O\220z\323\325\267\'5\013\212\255,y5]\342\025VU\0305\231w\037Z\313\232>\265\235q\027\265f\317\0363Y\362\305\315V\222,UIR\252\312\265\2374d\223T\344\213\031\252\317\035Wt\252\356\265\024\203\002\250\3142y\257G\\\001JH\024\007\243~*D\233\025*\315\232x\226\245\216lU\230\346\315Z\216|\256=*\314w\005;\361NY\260\304Q2\211V\262g\263h\337r\344b\256\330j-\016\003\032\327MPp3\326\254\307\251\020G5~\337S^2j\347\366\264h=\352\215\366\263\301;\253\234\274\276\226\376]\203\356\346\265\364\253s\022\251\"\267\341\223h\025r\031\0015z\031\0161Sg\245H\033\214v\247\253T\212jE5*\232\225^\254[>X\326\214\007\221\353Z*8\246H\271\254\275E\010S\212\216\302VD\310\352:\212\325\202Ar\274\255Cqn\343$)\254\251\313+r(V\310\250e\"\253I\327\212\205\230\217cQ4\307<\324l\371\351P;\021U\245\3475Fu\315g\317\025g\334E\326\263\'\207\255P\232*\2452\340\032\245\"\325Y#\353T\345\217\031\252r\246j\244\251U\244J\207\312\'\265V\271\001F+6f\257B\022`SZJo\231G\233G\233OY\360qS,\246\236\263T\351?\275[\206~*\300\237\276j\330\220\262)\030$\324\211&z\323\312\007\355Q=\222\267A\3156K&\214\256\017\024\201\345C\216\270\240^J\017\000\325\250\347\226U\350sO\373\034\223\0343`U\333-5c#8\255dA\030\030\251\322J\267\000/\203\222+J\33759n\224\365o\316\245S\310\364\251\003\017Z\221_\025*\270\247\347\"\246\265|1\025\253n\334\216kJ7\316*R\271\025V\342\r\302\263\244t\260,\314\001\006\252\331x\201\"\271\307\360\223]L\027q]\305\320g\265g\352\026\013\202Eb\3106\022*\273\266sU\231\260i\010\310\250eL\325I\001\024\302\331\025\013\363U&\030\252r\343\025Je\315g\\\240\025\225p2MP\2252j\254\211Ud\025VD\315T\2260*\244\261f\253<\007=*\t\361\032\221\336\261\256X\263\032\245 \256\360\2751\244\305Df\301\240MK\346R\371\207\255J\227\007\216j_4v\251\222\\\325\204\230\212\267\034\371\\U\230\')V\022\340\263f\255\303>F*\306\354\212\232\000\017,2\0055\243B\307\034\212r\332\257\245Z\206%LqS\204\365\251\025\260jP\364o\301\251\342\271v f\266m.\014i\226O\306\254\t\325\316I\305=[\234\366\365\247y\341OZz\317\273\241\251Q\203\177\025J\261\372Hi\303\314^\214\010\251\255\346e\220n\342\266 \'\000\366\255(_8\253\210\331\024\254\271\254\177\021[\227\2678\025\310Gl\342@Gj\354t\260\311l\205\215i\271\022\306\334\344\342\271\373\305\332\346\263\231\2715\004\206\204l\212I\001\252\262\202\001\252\325\024\225^S\221\315R\230zU)Ef\335\034\326d\303\223Te^j\244\250M@\321T/\035U\232!\326\252H\200\032\2553\200\010\351Y\027\222\216k\016\342|H}*\273\334\212\356\032LTo\'\025\003\2774\202Zp\232\236%\3159e\251U\3623R\307.*\322I\232\261\024\2705r93Va\233c\003W\026e\316A\253).EOms\261\260G\025a\212\023\225\357V\255\300e\311=)e\230o\0304\341/\024\242Jp\226\22495,Rm`k^-C|!6\364\357J\214I\253)1\003\024\242NsR\211F*D\220\n\2369\317\324T\353.{\323\267\037Z\325\323\356r\200\023[6\362\202\243\035j\334rU\210\344\317j\315\327\357\021b\331\237\230\326\034\021\0162:\232\350aEKu\307Jql\036\017\025\231\251/$\372\326;u\250e\244\210\323\232\252\334\036*\251\316*\031\017\025VSU]\275j\264\240U\013\210\301\315fM\027Z\245$y5\013\305\301\252\222\246\321\234U)\037\002\251O>3\223YWw\312\200\363Y\027\032\211$\326m\315\333>k2RI\317z\257!\342\273\247\222\242ij&zg\231\315/\231\232\004\270\357R\244\325*\310EL\222T\361\315Vb\237\346\031\351W\"\230g\255[\215\367U\210\344\037\215[\212n*e\223\234\325\270\347\336\240\001\310\251\242\230\203\214\324\244\242\200I;\273\212\224\272\030\301\007\232`\220\324\212\365\"\275M\033\002k^\310\307\345\234\3435n\031c\000\202\271&\202\300\032L\212r\265J\231\251\220\324\312\3652>{\325\233Y\314O\317J\333\267\270\000\002*\332_(9\355P]\370\212+e!I\316;v\254H\256\336\376r\354I\031\255A\036#\342\264l\234\311\026\323\332\225\233kUK\342L|\372\326C\236j\0319\250\324\3554\342\340\325Y\333&\242b\000\252\362UIN*\234\215U\235\252\264\244\032\245.\016j\214\200\003U\246p\265\237s6A\305d]\334\254c\2575\207wt\362\023\216\005fL\t\316MR\225j\254\213U$Z\253(\256\305\344\250\032J\215\244\250\314\224y\264\242L\324\213&\017Z\235$\315J$\305O\034\243o=jhf\0079\353V!\233\025~9\370\025n\t\212\020\325h\334\253\220Tc\326\247Y\362\243\326\255[\314\244\034\236{T\253.\016jR\315/\315\216\005=%\355R\t)\353&jTj\235\036\255C9\365\255\010\2448\025:6\342\017z\260\312\270\004\032EZ\231\027\320\324\240f\236\252sS\000@\253\020H6\220\303\351S\307r\351\307jy\270}\244\306\330>\225\225*\\O!\3349\242\312\351\354\346\331 \305tv\267\036b\014U\373|\253\026\316\0059\233\234\324\027/\230[5\220FMF\365\013\014\232C\220*\264\246\252\311&;\324\r78\252\362\266A\254\351\347\362\332\240k\205#\256*\254\267)\234n\252\223N\243\275g\334\\\252\202sYw\027\244\347\002\263.\257\035\272qY\223\345\216I\252R\255S\224U9ET\224UI@\252\222w\256\225\344\250\231\352&z\214\275 \2234\360\324\341&*x\345\251\325\351\352\365*I\203V\242\222\255G6*\344S\356\000f\256B\370\\\325\250gU\310a\220jH\345\347\212\266\222\344u\251\226\345\220`\036*xJ4e\231\271\246\211I\316:T\221\313VR\\\325\210\3335j\0222+R\334,\213\367\272S\301\332z\324\250j\304l*UlT\310\331\251T\363R\016jX\305O\035I\345\3569\034\032\226960\016\240\217Z\232\343L\206\3517\250\347\326\231e\021\267m\215\310\355Za\370\246\264\225J\346s#\354^\224\337\'\013U\244Nj\273\214S\0108\315A6\002\325\tj\254\240\346\253J\3142\001\254\351\316I,j\214\304\036\225M\300-\311\305U\271G\035zVt\265Jc\326\250\313T\245\252\222\n\247(\353T\346\252r\3259Fj\234\243\255n<\225\033=D\317Q3\320\036\244W\247\206\315J\215S\243\323\367\323\325\352\304r\325\210\345\311\253\260K\322\257,\204\016jx\244\004\216j\362\310\230\301\341\251\311.\rXY2)w\221\322\255Y\314\027vOn\224\370Hy\016N\005Y\211\343\'\222EXB\024\360\331\253Q=]\212R\243\212\265\023\027\253+\307\0254|\036MK\270S\325\375*d\226\245Y3S#\324\351%Y\211\263R\271\000S\254\356@}\205\2705dF7\023\236i\333\361L\221\232N\027\2551!\021\236z\322\273\000*\234\257\270\234T\0143\326\241g\306j\264\215\234\325I\016\357j\255.0sT\245\352j\215\302\206\315g\3141\232\245.j\234\254\335\315S~\271\"\251\\\235\314H\030\252\254\341\007\335\004\326|\334\346\251\313U&~1\212\2431\315R\227\212\251-T\226\265\035\352&z\215\244\250\231\351Q\352R\303\024$\234\325\230\336\245\337@\222\244Y\252T\222\255G%[\212Lt\253\2518*2MX\212O\230sV\274\342\262g9\251\314\312H+S\307&EN\257\232z\271V\253\t&\346\311\251T\355\374j\324Rt\253q\313\212\271\013\344\212\323G\215P`\363O\022{\323\204\204\3645\"\271\251RLT\213/\275J\262\324\3136*d\232\255E6*G\224\225\250#\220\211\205i\233\262\201M8\334\007\031\025,3\205\214\236\346\230&\334j9\030\265D\313\201P;b\252\310I\351P\230\\\232\206H\231N1T\256\t\034b\250JMT\224\365\315Q\233\275R\224\n\251\"\202MT\237\330U\031\201\035\252\214\335\rP\224\325)MR\224\3259j\234\246\252IU%\025q\336\242g\250\331\3526z\026J\177\233NY9\251\226lT\2135H$\31585M\034\230\2531\311V\242\232\256\254\301\224q\315Z\202U\340\021S\203\207\3009\025k\005@\315Y\205\370\251\343m\307\0250\310\352:w\251Q\352e\220\021\327\232\263\033\0223\212\235$\301\346\256C7\025m%\310\353S\244\335\263V\021\252A.:\323\204\331\247\254\265\"\315R\254\376\365b9\275\352\3343U\241 +PLJ\235\302\255\332L\262DCU\210Sz\225\007\334Sa\230\020U\217\"\246h\231yS\370SC1\034\361L~\235MW\221\273Ug\'\261\250\262\300\023\232\212Gu\'5Zi\0279\333\317z\2430\004\203\217\255UtB\t=j\204\240\006\'\025Bq\223\322\252\310p\016*\254\213\222I\252w#x\254\331\341 \032\316\23623T&\025NQT\345\025NA\232\253 \305S\226\245w\250\231\2522\364\302\324n\243}9d\247\211\251\353-L\262\324\321\311\232\237uM\033\325\250\233\245\\\216L\0001V\341l\200GQW \234\003\226\0258\224\2663\322\247\215\361\364\251\326Nj\334w\004\014\036\207\255L\241H\340\323\243\033\233\031\253\221K\345\014\003\305M\346\207#\212\260\222\360;\n\2369qV\026PH5e.=\352Q(\"\234\036\234\263b\236&\251\021\363\315Y\215\352\334Rb\255\244\334T\241\203\212\217\3156\307\246EZ\206\361xd\340\367\024\263\243&%\037t\325\270&,\200f\236\315\236j\264\262\363\305W\221\262*\002\304\032\214\236i_\014\265FU\034\325Y\022\252J\235j\224\311TfJ\251\"\325IES\232\250\316+:q\326\263\347\031\252\023-R\224UI\026\252J*\244\213Q3\324L\364\302\324\335\364\273\3054\265&\372<\337zzI\315N\262U\210\244\305XY3SE%[\212Z\267\024\270\2531K\203Wc\313\000s\326\256,\245Wa\352*h\217J\264\252\031\200\006\245\306\321\234\346\245\211\217\004\236*x\345\332\340\212\263\347\007|\221\217\245Jd\371\370\301\251VB\016\t\251\326SV\240p\303\223S+\014\324\213%J$\247\211)C\234\324\311!\365\253\021I\357Vc\224U\250\245\317z\263\034\2705c\211\206)\237f*\337#\021R\334]2Z\371g\222N*[V*\200U\255\377\000-BFr{T,\352\006\000\311\244X\374\300O\245V\225\n\223\221P\0316\347\322\241\220\214\325ix\252\262\032\2470\2523\n\247-R\232\252H*\234\312*\205\302pk:e\254\371\224\325)P\372UIET\221j\244\253T\031\2526jc>*2\364\236e\005\363H\317H\032\236\257\212\261\033\325\204z\231$\315N\257V#\223\025n)j\334Rf\256\3036\334U\250\231\244n*\334nGZ\260\217\315L\037\035\rZ\206Pc+\306jH\201\'\003\232\225_i\367\251\026L\232\221\037\232\260\222T\351/\275O\034\276\365:\311R\253\324\201\351\336g\275H\222T\251\'<U\270\344\000\n\261\034\2705e$\253\226\263\001\234\366\253)&r}j\264\362\356\231W\323\232\271\014\243\212\260\347\021\344SL\233\243\300\340\324\0016\361N\307<qFC\374\255To-\214\'#\356\325\026\346\240\224\343\212\253!\353U&|U\031\233\255R\225\272\3259MU|\325Yy\252\223&j\214\261\363Tn#\252\023F@5FU\252r\255T\230\016\325\222\306\243c\212\211\232\243&\232Z\234\017\024\322\324\003N\007\025*=N\222U\204z\260\215\322\247G\2531\2661W\"\223\212\271\013\346\256\303!\r\220pj\322\310Y9<\212\261\033\340T\361\2608\253\031\nx9\251\341r\255\221\332\247w\336\331\003\002\237\030\001\271<S\263\206\300\251U\361SG%N\222T\351-N\217R\t)C\363R+\363S$\231<\324\361\311Vc\222\255\305&j\312>\034\014\365\255\010\216\341U/\321\300\334\203-T\241\324\245\211\260\350x\255Hu\210\335v\223\203SA9\222C\351S\203\223K\322\214\007\344u\245p\'\215\220\365\305dM\001\215\210\"\252J\242\251\312\235j\224\361\325)\023\255T\226<f\251J\207=*\264\234pj\234\303\234\324\017\202*\234\342\250MT\'\3475BE\353U&J\245\"\326\031|\324L\325\0135F[\2327R\203\2321KJ\264\3655*5XF\251\321\252\304mVcl\325\270\232\256\301!^\225~\325\306\356j\334g$\216*hH\'\223O\363\n\232\273\004a\342\335\273\237Jt2\025lv\253\3628\362\324\212[b\035\260M9\324\2419\241e\251T\232\2367\305L\222\325\204\227\212\225d\315H$\030\247\253\342\245F\251\321\352h\336\256E.*\324o\270\212\323\205\372U\201\030n\264\206\301X\347\024\035\035Ko\300\253\260E\030\217\005p}qU\356\225\240\372\032\250oppF*H\256\201 \203V\031\371\016\275\372\3247 H2+:h\272\3259\"\025Jhx\353U$\204\3259\241>\225Q\324\001\312\325Y\343V\352+>x\366\237j\251\"\342\253\311\036ER\232\016\rQ\232\021Tf\210`\326|\313\324Vm\310+\234W0e\2464\325\023I\232az\004\224\365\222\244\r\305\033\251\300\323\307Z\225OJ\225\033\0252\267J\2327\346\255F\370\253q6M]\205\270\253qI\212\267\024\225a\036\246V\334j\300c\027\000\325\210\016\356\247\0257\232zv\251T2\250n\3254r\344\363\337\326\235.\325#i\317\255=\035\202\343\034T\312\330\003\006\236\257S\244\274T\253/\275H\262T\311%L\255S#\324\310\370\2531\311W!\223\246+J\332]\303\336\264aj\271\035XQ\221R*\372\200id\205%\306\345\2527\032bHI\013Xw\226S[\313\230\363\266\237k|G\311 \305Z.1U\245\301\252r\255S\225j\273\261Q\212\245>I5Fl\325)GZ\2512n\006\251H\274T\005j\264\313\326\263\347\025\2378\316k>e\353U~\317\275\362G\025\307\315\002#\360\300\255DmC\236\033\255$Ve\333\031\250\356\240X\007\'\232\247\031\334\330\355Vg\204\302\252s\234\323\025\363\305)$S\321\363V\025\270\247\255J\016)\352\330\251\3435f#V\243j\273\013\325\270\332\255Fr29\2531\275L\255\212\231\0375n\026\007\251\2531H\241J\221\370\325\230\244P\304\021\362\323I\001\316\321\305?\177 \342\246\363\314\230\036\224\241\261R\243\346\244\251\024\021R#\342\245Y9\253\t/\0252J\rL\262T\351-[\202n\225\245\013\364#\250\255[Y\203\014\326\204MVQ\252u4\372\017\"\253O\010|\344\n\310\324t\361\260\224\034\212\315\267\235\224\354n\242\246v\007\332\240\222\252J\265ZE\252\223-Q\225G5NE\033H\357T\344\371MS\224rj\244\237)\252\263\265g\317\315Q\230\023\232\246\361d\323^-\203\025\346\315\273\326\232]\307zb\\I\03185\014\316\322\234\223K\003\010\216H\315M%\321\224\000\335\251\321\204\336\247\267z\320\232\3229\"\334\244\n\254\260.8<\320P\245H\2075&sJ\246\247F\2531\032\267\031\253P\267J\266\231a\305h\3332\252\373\323\367\374\325*>jdl\032\263\033\325\244n*Q&\0109\253?j\005@\300\315;\206\213\266sC!\213\036\364\253-L\222S\304\325 \233\212\221$\315J\255\232\221^\247G\300\251\243\2235a\036\255C&1Z6\262\347\0035\247k!W\002\265\242|b\255\306\365:\275J\255K\273\"\230\306\252\334\200T\3277r\241/\016\rJFV\241\220b\253\311U\334UI\226\251\312\265Y\220\036*\215\324;I\252\023.*\224\343\212\243/5NQ\315Vh\362j\023\030\\\232\245p\374\361^vTS\031\001\250Y\0054\307L)I\262\234\001\025\"\311&0\t\305I\031d5wp\226\023\223\363\n\2058\351R\201\214f\227\245H\225f#W\"\253)\306*\312g\327\212\267\t\333\200\017^j\316\374\232\221[?Z\231\t\2531\034\325\250\332\246\0074\36552\311\201\212x\224\205\366\247\253\253\'\275H6l\352wT\221\252\340d\342\234T\037\272sM\022m5<sT\352\365\"=X\215\361V#l\325\250\233\245]\267\223\004V\255\274\273\200\307QZ\320M\2203\326\256\306\365:=L\257N\335H\315\305U\270o\224\327>\307\315\271f\307J\220\360*\'5ZA\236\365]\327\035\352\t\000\305U\224\n\250\303kT7\021\356\004\326]\314x&\263\246J\241q\204\006\250<\301MF\322+sT\247\227$\212\243p@\006\274\371\333\006\230^\230\306\233\272\220\363@\024\240T\2109\251Jw\024\203 \342\244\214\363Su\031\244\3075\"\325\210\215[\214\325\270\006\343\223V\023\203\212\265\t\251\203qS#T\350qS\306\325b7\251\303\361OW\251\003\323\303\346\236\246\236\246\245\317#\006\236\222\030\363RG\266@r~n\324\204\030\3175*KS#\363V\221\352\324MV\242j\265\023\343\025\247i.\334\032\326\266z\275\034\225a\036\246W\247\357\244/U.\237\367m\217J\310\215pI\365\245sP\271\250\034\325i\rV\220\325i9\250\037\236\264\303\2021Tnc\0075\231<X\315cj\000\252\265`I7\316Fj)n\031A\250b,\371&\243\270\351\\\004\213\221P2\225\246\023L\245\006\236\275)\300\017\306\236\274T\252r)\271\346\246U\302\203\353R/\"\227\030\247-M\021\305[\213\223\317J\273\013\356\\\n\260\212jx\316*d5:\216*x\300\035jP\300t\251\221\252\302?\024\365p)\341\3015&\010\344r)U\310\352*U\2234\365njM\371\245V\346\254n\310\303\036E m\255\212\235H\030\346\254#\022\271\2530\313\315[\211\352\324rb\265,\\0\301\255h\037\245\\\215\352\312=L\262`R\371\236\364\031*\245\334\231\033}j\231\300\250\235\252\0275\013\232\256\375j\274\234Uw\025\003\016\265\013\034\034Ui\210\254\351\310\346\261u0\0326\305s\313m\373\302MV\276Q\270\001N\2010\225\005\310\3005\347\356*&\250\034`\373S(\247\251\247\365\036\364\3408\251W\201M\251P\346\246\216\244\305.0)\361\325\270\252\355\261\344\232\267\234\032r\234\324\350\325:5L\255\221R)\251\220\324\312\335\251\375\017\275/Zz\226^\364\361+q\232\224>i\341\217\255H\246\236\036\245\363I\"\237\2701\342\245\215\361\326\254\302\344\236*x\216X\325\270\237\003\255Z\215\372V\205\234\233XV\314\017\300\253\261\275XI*u$\214\346\220\311\212c\315\264UW\220\261$\324,\365\0335B\355Q1\250\234\346\253\270\250XT/\322\252M\305g\\\315\266\263\246\270\0075\215w)\221\360:U9p\242\263f]\317R*\341*\215\321\353\\\023\324-Q79\250\310\30578\247)\251T\323\324\324\240dS@\353R\'^*U\033ML\274\323\251\312*\304F\257[\234-N\247\346\251T\363S)\332qS#T\213%L\215S#T\212\330\305K\273=\351\312\325 zPrjU4\360\325\"5H\030b\234\247\232\225\rJ\257\201R\307&\rY\204\356j\270\207\035\352\304oZ\226\030#$\363Zp\312*\374o\322\247G\253)&\0174\307\230e\275\005V2\356l\366\246;\344\324e\251\214j\'5\031\2465B\302\242e\315A\"\342\250\334\266\320k\234\325.\260N+8O\275}\352)1\216j\204\303$\342\253\264}\351\033\204\254\273\263\326\270g\025\013\324-\336\230i\204P:T\212jU50a\212h\357NC\202*\311!\224c\255=*N\264\365\025*u\253\221\034U\205l\324\253\351R\203R#T\203\202\rO\346g\034T\252\331\251\003\324\212\325 4\340\324\365j\231M;uI\031\2512i\312\325*\276*P\365\"\037z\261\014\273M[\212Q\202;\325\310\001fPkJ!\264\3435r\031\366\016kJ\0312\242\254\304\331\"\244\222o\233\332\241.I#\265&\354\nL\346\2023M+Q\272\212\210\361\232i\\\323\031=j\026\342\252\\8QX\227\367\203\220\rs\327\222\006\'\232\246\247\322\221\224\236\265\013\307U\346\342\2539\371k.\364\365\256)\352\273\212\201\272\323\033\245 9\242\234\006\005J\206\235\234\232Z\220\037\224U\233Q\271\3005+&\323N^jd\024\365\341\252\324g\212\261\035N\2309\247/<T\213\326\246Z\220\014w\247\253T\200\324\250x\251T\346\236\0059z\324\310jJr\361O\335N\r\212x~)\342J\225\037\232\231\037\232\265\013\326\205\264\274\203Z\266\357\310=j\342\252\273\202*\374mV#z\220\374\324\234\342\224-;g\265\033)\254\224\306\216\230\312\005F\307\025\004\217U\'\235P\022Ms\372\246\252\252\010\006\271\233\275Kq85M]\2465a#\332(~*\t\017\025FsU\245<Vm\347C\\[\325w\357U\333\2550\365\246\3644\271\346\234\246\245^i\304b\225j@*{f\331 5\243*\253\240aQ(\305L\213O\013\315L\234U\210\215N\264\341\326\245^jd\346\245\333\305(\030\251\026\244S\201R\247Z\224p)CsR\243T\252sJ\0174\354\322\346\224587=jUz\2327\253q5^\205\361\212\322\263\230\003\311\342\264 \227\201\357W\342\223 U\205z\235^\244\014\rH\270\247n\244\3155\252\0265\013\270\025R\342\355b\034\232\305\277\326\326%85\315_x\201\237 \036\265\2135\304\267\014z\323V\330\236MY\212-\225)\351U\344z\253$\225Rf\315V\224\361Y\367]\rq\222\n\201\307\006\253\267z\215\272\323OJN\334\323\227\265O\035+\002\016i\310sR\255K\022\345\205h6v\252\372S\236=\244S\323\245H\253R(\251\243\004b\254\240\310\025!\030\0304\345\342\246N\2652\232RsJ\016*El\325\210\310\247\356\3158\nx\310\251\021\261R\016E7&\234\r;4\240\363O\017R\306\365r\'\253\221=\\\215\272`\326\202\310J\250\3175\251o\'\3129\253h\365:\034\324\351\315N\242\237\216*7;j\273\316\001\353T\247\277U\'\232\315\273\325\025A;\305`j\032\300 \341\262k\237\271\270\232\351\310\031\3052=<\347-\311\253\th\027\265)\210\001La\212\212F\300\252r\275U\222J\253+T%\262*\235\330\371Mq\256*\274\274T\rQ0\2465\003\221N\007\024\360\373zu\247\253\340`\323\366\225>\306\245Njx\2705\242\222\'\222G\361R\026\336x9\025*-L\243\212z\214\324\3109\031\253Q.H\307J{\214\032N\342\245Z\221\rI\212nqNV\301\251\222J\231_525?4\240\340S\203R\371\204S\271 \0322E(jpn\225,g\232\265\033\325\330_5n7\306*\374Sr\010<\212\273i9\r\203\320\326\244o\234U\250\232\255Fj\302\323&\235b\004\261\002\271\375S\304\261[\202\003sXrx\215\346\'i\340\325+\213\331\337\221\236j\224\236|\247\223M[\022\334\2675:Z\252\366\247\030\200\250\330\001PHj\254\217\212\253$\234U)_\255T\221\362j\031_\212\200\276\005U\272\223\3445\311\270\252\322\212\201\206\005D\324\312N\324\231\301\247\003\315H\016jd=3SG\2001\216j\312E\3019\351R.kJ\306\334K\033\036\343\2326\341\216:\n\231W5\"\245L\253Vb\\\014\320\334\223H9\251\000\251\027\237\255H\017\024\326\244\247\241\315L\244\324\310\365(4\355\324\340iI\315<9\333\212\027\255;p\034\032P\0163\232\2222j\304M\315_\207\245N\215\315^\216E\\\023\351V-\356\202\262\346\266 \230\0209\253\361?\275L.\025z\260\030\250\345\327!\201NXf\271\215k\304F\340\225\210\326\020\201\356d\335!5z\033EP8\253!@\\\020)\255\002\230\362:\324\005v\365\2463\342\242w\250\035\352\254\262U)d\252\223I\212\2454\265X\311QH\374Uw\223\002\250\334\313\305`?z\256\353\232\201\305B\324\306\024\316\224\224\3454\364\251\322\254F3V\243\\\212\230%]\261vS\264\016\274T\306&W;\252d_J\224-M\032\016\265)4\230\244\356=)\353\327\212\225pM8\361\322\233F3NPjT85*\324\212\324\374\322\206\305<6i\300\361N\006\227\357P3\232\221X\325\250G\031\025r\'\342\246\rR\302\344\270\025b\3567\2013\236z\322\332\353\333\027k\360\302\256/\211Q\027\2575J\363]\226\343%3\212\243\346\3179\371\230\342\246\212\000*\314`-N\216(g\250\374\322\265\024\223\363\234T\022H\034q\326\252\313!RA\250\032j\257$\231\252\262\275R\231\252\234\255\326\252\310\370\250|\314\325y\244\2527\017Y2t\250^\253\270\250XS\010\3155\270\3152\224u\251\022\247\216\255E\332\256D*\300^\005_\323P\0311\214\236\325,\333\274\302\017Z\2225\342\245\013\212\225\026\234W\006\224\014\320\253\234\201H\277.jD84\357\247Zv\314\214\367\242\201\326\244SR\255-9Z\234\r<q\315(j\230a\226\200\304g\232\025\252E9\251\220\342\255+\201\203S\254\231\024\364\227k\002+E\356\005\315\262\203\367\226\263\246\265W9\357I\025\242\257QV\025\002\256\007Jp\001i\336f(\363}\351|\374Q\347\373\323Z^3P\274\225]\345\332r\rB\367\033\211&\240vS\337\232\256\317\326\253\310\331\342\252H}j\244\307\025JF\346\241f\252\362\265Q\270z\241 \252\357P=D\335i\207\212a\346\231\336\224T\211\326\247J\265\017QW\241\031\253h\271\025{Oc\024\300\201\223S\335\260y\262\0063N\210qR\205\366\251:\n\010\343\236\264*\226\316)H\302\217Z]\270L\323\226\244\2152y\247c\024\335\264m\247\016\265\"\232x9\245\247\n~{R\200)\303\"\202\304\232p\351\357OW\305L\217S+f\244G\307z\225$\315_\265q\345\2675\027\237\363S\374\340\302\236\217\236\rF\362\200H\3153\315\246\031\275\351<\352<\377\000z\014\371\357Q4\271\250\232L\324\016\325\013\265G\346\343\257J\206S\223\307J\2530+T\246l\325I\rWf\3075ZG\340\325\t\233\223PI\322\253I\326\240z\215\251\215Q\236j0y\247\016\265*\n\232:\267\017QW\340\025v5\253\326\t\272Lw\253W\026M\010,\325\034U8\247\0003\317J\t\311$\216)\312\274eO\341FI\\zS\261\306;S\225qO\035x\245\355@\030\240\214\322\205\247\001\371\323\207\006\236\r\003\216)s\216i\350x\346\237K\212ZNjElT\213%?\314\3059%\251\343\271+\306z\323L\334\365\251\026\343\025 \271\343\255F\322\373\323|\352i\232\232f\2442\321\347R\031i\215%D\322T,\365\0335B\354qQ\031x*{\325[\210\312\363\332\251=V\225\252\244\255\305R\230\344\3242\032\256\374\324\017Q1\3050\324g\200j1\326\244QR\250\251\243\025n\021\315hA\305^\214g\025j\326o!\301\255\\\375\256\331\212\271$v5F0C`\325\221\322\220\321\236)G\035)\353\363S\327\221O\024\374c\024c&\227m\033ih\035i\324\264\341\315(\031\245\3058\032r\323\300\315!\342\214\322\206\305\006JP\346\227\315\243\316\367\245\022\237Zw\236}iL\347\006\232&\240\313M\363h\363\2502Q\346\373\323\032J\211\244\246\031)\215&j6z\201\317z\215\247\316\003r\005R\270\353\221\322\251\310s\232\2515S\224\3242\032\201\215B\346\240c\3154\323\037\2454\014S\320T\2503SG\326\255\303W\341\355W\242\251\212\344V\226\226\342<\347\322\230\334\310}\352Q\322\230\306\223u9M<\034\032\225H<\216\r<u\251@\004u\2472\025\301\355M\'4\240b\235\2674\205piq\232P)h\034R\203O^\264\374\001A$P\016i\033\212n\352\003\202=\351\246B8\240I\232O2\224I\232\014\224\276fE!z\004\231\240\275&\374R\031h\363\r#I\201Q\031sL/HZ\243f\250\335\352\273\232\201\344\300 \212\255:aC\016\225NCT\346\025ZF\250\030\324,j\"ri\244\323\030\346\222\236\017J\2321S\240\2531U\350j\364&\254\003\305\\\260\221c\220\0223SNA\220\2200)\001\355H\335)\235\351A\247\206\315H\246\244\007\0252r:\324\200\2201\332\215\243\035y\247\000\r;o\245!J1\266\234@8\305*\343\222\177\ni\024\202\236\247\025 n)\031\251\205\266\322\026\315\000z\322\021\212c\036)\233\261H[\212M\370\247\006\310\241^\224\232n\374R\031)\276g4\273\363Az\014\224\306j\215\232\230_\336\232\315\357Q\273{\324L\325^Nj\r\370\340\364\252\367\010\001\310\351T\244\346\250\310j\0075\013\032\214\265!j\2174\003\315H\265b3\203S\250\364\253\021qW!\253\321\032\260\246\254\332\214\310>\265nu\333!\3150\036)\031\252=\324\252i\301\251\352\325*\266jdl\016\2658c\217\2558q\365\247(\334\300\366\247\200E8\r\324\2141IA\244n\224\332Pi\331\244f\335\212a<\236i\003\323\203\346\224\234\212c\n\215\233\265D\315\3174\003\232v\377\000\227\024\320\330\247n\244\316i\244\363Q\226\301\244\337\212<\312<\312B\364\322\365\031jizc5D\315Q9\252\362T\004\214\340\364\252\322\257>\325\232\346\253\2675\023\232\214\232ajniA\315=MO\031\305XF\253\02175z\023Wc\253\013\322\254\301/\226\300\325\251\030\314\300\203\222i\235\016(j\214\214Rn\301\245\rOV\251P\344\342\246S\232\235\016GZ\225O\345S.:S\310\310\307zA\22584\247\232a\0304\036\r\007\232a\024t\244\335Fi\214\3304\335\347\241\246\356\301\247\371\270\306\r!\226\241w\317z\210\266M86\005.\374\322\026\245V\241\2157}1\232\243-\212M\364\233\3517\320^\232MFZ\220\2651\252\'\252\356j\0075\0037cY.\331\250]\252\0269\250\330\323\t\244\315-=Njt52\032\263\021\346\257@\325v&\351V\220\323\327\255lZ*Ej\314H\334j\231o\234\322\223\232c\324D\363J\032\236\246\246S\336\246\214\344\023\336\247C\305N\2540\000\251\227\232~1\212x\033\250+\315&)\270\315#q\332\232zS\033\245%4\266\001\250\313qLg\356i\206N\264\233\351\013\323\013Sw{\322\356\244\337O\334\n\214u\241\034\003\315+\270\317\025\013=4\276i\205\351\205\351\013\322y\224n\315\005\361L-L\335K\272\243nj\t*\273\365\250\034qX\254\325\033\265D\315Q3\344\323\t\311\242\224u\247\251\305J\255S\241\25315\\\205\252\374-W#\351O\'\025\243\245\342}\310\307\2652\346?&]\264\325#\024\3275\013\036i\241\251\352\334\324\350\36525XB6\373\324\312jx\315J\255R\003\351N\r\353JW\0034\303\355L\'4\332a\357L\'\025\033\032\215\215D\3074\256\212\250\010<\324\005\250\335Mf\246\356\245\335I\273\232r\276)\322\034c\025\037\231\220y\250\331\351\205\351\245\351\245\351\233\350\337F\3727\323K\323w\221I\276\202\325\033\232\257%@\346\260]\252&j\211\232\243-\212n\354\232\\\346\225M=MJ\2652\034U\230\315[\211\252\364-\322\257D\334T\216x\251\264\253\200\227j\t\342\266u\013371\256OS\212\314\2267\203\357\014\032\204\311\232\215\232\231\273\232z5N\206\246F\251\321\252\302=N\215R\251\251\001\305;9\247\211N\334\032BA\036\364\306\024\303\322\233\322\230\3075\023s\232\215\252\'\342\242-M\3154\236i\t\244\335HM\031\246\226\245\363x\305F\315\3150\265!<u\250\313S\013Ro\245-I\276\215\331\244-M-I\276\215\364\3265\033\232\256\365\316;T,\325\0335F\306\200iA\247\255J\242\244Z\225jx\315Z\211\252\344/\322\257E%L\317\305WYLr\206\025\326h~ \212%>h\007\353Y\232\316\254\267\327\004\250\001{Vx\222\221\244\246\357\251\021\252tj\231\032\247F\251\321\252tj\235\032\235\272\234\036\234\032\227u\005\262)\255L&\230\304\020y\346\242\'\025\023\036j65\023\032\211\251\233\250\337F\354\322\365\034S\\\221Q\226\244\337H[<Td\323wSX\324e\250\335\357K\272\215\324\026\244\3151\2157q\244\337J[5\033\032\201\315s\014\365\023=F^\230_\232M\364\360\325\"\032\235\rH\r=O\"\247CV#5f7\305Z\212\\w\251\304\331\024\306l\322\007+\320\323\325\263O\3631Hd\244W\346\247F\253\010\32525N\215S\243T\350\3252\275<5;4\3458\245\245\335\212L\347\2755\215F\306\242z\215\215F\335*\'\250\230\340\324D\323sJ\032\237\277\212c\220G\275F\314H=*2\324\306z\013\023\317jil\323KqL&\223\"\200\324\355\324\023M\'\024\302\324\322\324\335\324\273\251\013f\242z\344\231\252\026~i\205\263L&\200i\352\3252\032\235\032\245V\251\020\346\246V\305J\255S#\324\313-J\262\324\202L\322\207\247\207\243}\033\363J\255S\306\325:5XF\251\321\252ej\235\036\245W\251\025\351\352\3315 9\245\315!8\243\"\214\212\215\252\026$S\030\212\210\237z\215\216j\'=j\026\357\353Q\357\2406)CT\315\0311\202*\2618&\242s\216{\032c7\024\335\307\007\024\315\374\321\272\202sII\232\001\243u\005\263Q\223M&\233\272\220\265\033\351\254\325\306\311&\005@^\232^\215\324n\247\253T\310\325:5J\032\245V\305J\255R+T\212\325(zz\275J\262S\204\224\360\364\355\324\340i\340\363R\241\251\221\252\304mS\243T\350\325*\265J\215R\253S\325\252P\364\273\275\350&\223&\214\323I\250\234\346\241v\250Y\260i\246L\365\250\334\344T.sP\261\305\"\344\322\206\301\251R\340\201\216\324\331\007\313\232\256\355\306*\026zg\231\264\361M.\010\367\244\rO\316)CPy\244\305#qI\232kS\t\250\330\323KSw\322\027\256.W\317\024\315\324\322E\033\250\335\357NV\251\221\252tz\231\033\214\324\252j@\325\"\265H\255R\007\247\253\324\212\364\360\324\360\364\365j\221Z\236\247\212\225Z\246SS#T\361\265N\215S+T\212\325(zz\265H\032\236\0334n\244\317\275&\352\013T.\325\0035B\315L-Lf\250\235\263P\263qH\257\264\363\322\224\237\342\006\200\365an\025\242*G5NF\346\253\273Tl\324\202Lf\200\334dS\203z\322\356\301\245\337N\335\232i4\312\t\250\313S\t\315F\306\230Z\223v+\211g\334i\245\251\246Nh\rN\rN\rR#T\350\334\342\254\253b\245V\30585<5H\036\236\257R\007\247\253\324\212\324\360\324\365z\2205L\255\305J\255R\251\251\221\252ej\231\036\246W\315H\255R+\344\324\301\251\352\325 jP\324\205\251\245\2517Tnj\007j\201\232\243-\212c5D\315Q\261\250\231\316jx\244\030\301\250\244\014\271=\251\253/\024\307\2235\0135F\315L\335R\006\0058<\322\357\315.\356y\024\023F\354R\356\244\337HO\025\033S\t\246\223\221L=i\204\327\010_\003\336\232\322{\320\r;w\275(jpj\221\033\025f\023\334\325\205j\2205<585;}9^\244W\251U\352Ezxz\221Z\244V\311\251\325\252Ej\231\032\246V\251U\252Tj\225Z\245W\251Q\252P\364\360\365 ~)C\320Z\232Z\232^\230\317\232\211\316j\0075\0135FZ\230Z\242g\250\313sNF\343\2575(\223z\342\240a\264\234~U\0235D\317L-M\'\002\205lT\252pG5.\375\324\323\3054\232n\352M\364\273\351\245\263L&\230M!j\215\272W\000^\233\276\224I\212P\371\247\006\247\206\251\020\344\342\254\243b\246W\251U\251\301\251\341\350\363)\312\364\365z\221d\251\026J\221^\245W\251\221\252uj\221Z\246F\251U\352Tz\225^\246G\251U\352Uz\221^\244\017N\017N\rF\372B\324\335\324\302\324\3065\013\324/Q1\250\231\2526l\032f\356h\r\214\323\204\233N\r\022\034\214\367\252\354s\365\250\313`\363\322\243\'4\207\245 <S\225\352T\222\245\373\312@\250\311\355LcL&\223}\033\251\013SI\2461\244&\274\340\275!zr\265<585H\033\002\246\214\342\247V\251\025\352Uzz\265.\3727\323\203\323\303\324\212\365\"\275J\257R\253\347\212\260\255\212\225Z\246V\251\025\352Uz\225^\245W\251\225\352Dj\231^\244W\247\207\247\207\245\337K\276\220\2657}4\2654\2651\215D\346\240sQ1\305D\306\243\007\223I\272\206$\342\236\037#\025\013\234\032\211\216i\234\032i4\2314\003\212z\265O\033\340\323\2449\347\275D\335*3\326\231\2327Q\272\220\232i4\322s^i\276\200\324\360\324\360jE4\365952\266*Ez\221^\245W\247\206\245\335F\352pzpzx\222\244W\251\221\252x\233<\325\205j\221^\246W\251\025\352Ez\225^\245G\251\225\352d~*P\364\365zxzxz]\364\340\364\026\246\226\244\335\3054\2654\265D\3475\023\032\211\216j\0264\317Zfy\240sJ[\024\306n9\344T,})\204\346\233\272\227<SsJ\033\025\"?\275J\036\232O\345M=j3\300\246\346\214\322\223\232i\351L=+\3147\373\323\225\263O\rR)\247\206\251T\342\236\032\244V\247\207\251U\351\333\351w\321\2774\340\364\340\364\365z\221^\247G\253(\330\0252\275H\257R+\324\252\364\365z\225^\245W\251\321\352ez\224=<5<=<=.\372P\364\355\364\335\364o\244-L-O\213\004\034\323\032! $v\252\222)S\212\205\316\0053\2650\234Rn\346\202x\250\230\323X\217Ja\365\246\3654\214px\244\315&iCT\212\365 l\212i4\323\322\233HN(\0074\264\303^T\0175\"\232z\232\221Z\244SO\rO\rO\337OV\247\207\247\007\245\363)C\323\203\323\203S\203\324\250\325b&\311\315XW\251\025\352Uz\220IR+\324\212\365*\275J\217S\306\3652\275J\257O\017O\017OW\247\007\247o\243}\033\2517R\356\367\244=)\241\312\322\244\333r=i\257\031\225sU$R\265\021\351Q\267Z\214\234Q\276\220\234\323\017\024\314\343\232C\323\"\233\214\212nM!4f\234\032\236\036\234\0334\023\232i4\332)I\310\244\257\'\rR)\247\206\251\024\323\303S\367S\203R\206\251\025\261N\017N\337F\372P\365 zpzz\275H\036\254\306\330\0252\275H\036\236\257R\253\324\252\365\"\275J\257R\253\324\310\370\251\325\352Uz\220=8=9^\244\017N\017F\3727\321\276\227u\033\251\t\246\023\326\205\220\251\347\2452f\335U\337\212\211\215D\346\243\335K\272\202\331\250\3114g\024\231\306i\2074\322h\240\034R\206\247\206\247n\240\234\322\023\212N\374R\321^J\r<7\024\3455 jxjpjpjP\324\360\364\241\351\333\363F\372P\364\360\364\360\365\"\275I\033d\325\204z\231d\247\211*Ez\221^\246W\251U\252Uz\221^\246W\251\321\352Ez\220=<=8=<=<=\033\351wQ\272\227\177\275\001\350\337HZ\232Z\230\307\212\211\315B\306\243cQ\223\212B\324\006\240\372\323I\241Nx\357M<SI\3157u&iriCS\303R\223Fi)sFk\310\303sO\006\236\032\236\255O\rN\rJ\032\224=.\372pz]\364\233\362i\301\351\341\351\352\371\251\003\342\246G\305L\257R\253\323\303\324\212\374\324\252\365*=L\217R\253\324\250\365*\275L\217R\253\324\201\351\352\364\360\324\360\324\340\364\241\251wQ\272\224=\033\351w\323KR\026\246\226\250\331\252&4\302x\24651\272R\003\212]\324\215\326\232OCN~G\024\3003\232a\353A\351M\315(4\340\330\247\356\240\0323F\352Z\377\331"
+byte_png: "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\002\000\000\000\002\000\010\000\000\000\000\321\023\213&\000\000\001\322IDATx^\355\335K\n\203@\014\000P\321\373\037Y\351\246]4\264\2102\352L\362\3362\224\ne\254I\234\3174\001\000\000\000\000\000\000\000tf\216\001\000\000\222\222\371\001\000\000\000\000\000\000\000\000\000\000\000\000\\m\211\001\000\000\000\000\000\000\000`Dk\014d\263\305\000\000\000\000\000\220\207\006 oN.\003\000\370\351\2664\351\266\013\001\000\0000\210\335\2278\273\037\000\000\000\000\252\3226\350T\363\251\001\315\277\020\000\000\200\356\251\372\001\032\323d\003\000\200\212T\002P\231&+\000MH)\241*w?\000%x\340\221\300\311a\254{\010\000P\305\311\204\021\000\000\240\023\372\331\234\362\0318\006\020\000\000\300\243\326\030\330\241\214\003\000\000\000\000\000\030\303\321\367@\000\000\000\000\000\000\000\000\3000,\373\006\000\000\000\000\200k9`\022\000\000\000\000\000\000\000\000\000 \021\0335\334\243\375\357lZ/\000\000@5*A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\340b\266?\004\000\000\000\000\000\000\000\000\000\000\000H\314\342\021\000\000HN\322\017|\363\257\220\332\026\003\000\000\251,1\000\220\335\032\003\177\250\366\001\000\000\000\000\000\000\000\006c\302\007\000\000\300\2448\302\362x\000\000\000(D+\010\000\000\000\000\240\nS\303\000\000\000\000\000\000\000\000\000\000\000\000\000`8\263\025\202\000\000\000\224`\313t\000\000\030\223\\\036\000\000\000\000\000\016Xb\000\250\30421\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\206\341`\032\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200\'\274\000>R\030\020\037\177\342\335\000\000\000\000IEND\256B`\202"
diff --git a/core/res/geoid_height_map_assets/tile-9.textpb b/core/res/geoid_height_map_assets/tile-9.textpb
index 5f23f1c..f556a35 100644
--- a/core/res/geoid_height_map_assets/tile-9.textpb
+++ b/core/res/geoid_height_map_assets/tile-9.textpb
@@ -1,3 +1,3 @@
 tile_key: "9"
-byte_jpeg: "\377\330\377\340\000\020JFIF\000\001\002\000\000\001\000\001\000\000\377\333\000C\000\004\003\003\003\003\002\004\003\003\003\004\004\004\004\005\t\006\005\005\005\005\013\010\010\007\t\r\014\016\016\r\014\r\r\017\020\025\022\017\020\024\020\r\r\022\031\022\024\026\026\027\030\027\016\022\032\034\032\027\033\025\027\027\027\377\300\000\013\010\002\000\002\000\001\001\021\000\377\304\000\037\000\000\001\005\001\001\001\001\001\001\000\000\000\000\000\000\000\000\001\002\003\004\005\006\007\010\t\n\013\377\304\000\265\020\000\002\001\003\003\002\004\003\005\005\004\004\000\000\001}\001\002\003\000\004\021\005\022!1A\006\023Qa\007\"q\0242\201\221\241\010#B\261\301\025R\321\360$3br\202\t\n\026\027\030\031\032%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\203\204\205\206\207\210\211\212\222\223\224\225\226\227\230\231\232\242\243\244\245\246\247\250\251\252\262\263\264\265\266\267\270\271\272\302\303\304\305\306\307\310\311\312\322\323\324\325\326\327\330\331\332\341\342\343\344\345\346\347\350\351\352\361\362\363\364\365\366\367\370\371\372\377\332\000\010\001\001\000\000?\000\363]\336\364\340\324\355\324\360\324\273\275\351wR\356\245\335F\352]\324\006\245\335K\272\224=<=<?5 z\220=<=H\036\236\032\236\032\244W\251U\252@\325\"\265H\032\244V\251\003S\303S\303S\303S\203R\346\2274\273\251s\357Fh\335F\352L\321\232i4\322i\244\323)\017Zi\244\242\220\364\244\247SC`\021M\240\364\246\321J:\322\346\235E\024\240\327\233Q\234w\247\003N\rN\335J\032\227u\033\250\335K\272\200\324\354\321\272\215\324\340\324\340\365\"\275H\036\244W\251\025\352@\364\365jxj\225^\245W\251U\252Ej\221Z\244V\251\003S\303S\303S\201\247\006\245\315\031\245\315.i3F\352L\321\232\t\246\232i\351IM=i\017ZJBi3\232(\244=i)\r%\024S\273QN\355J\005\037Z\363SI\232\001\247\356\357F\352]\324\241\250\315\033\250\rN\rK\272\215\324n\245\335N\rR\007\342\236\036\236\257R+\324\212\365\"\275H\032\244W\251\225\252dj\225Z\236\032\244V\251\003T\201\251\341\251\301\251\300\323\201\243>\364\271\245\335I\2323I\232Ph\315!4\204\322SqHz\322R\032J(\244=i)\r%\024S\251GZZ^\203\212\017\245y\241\246\236\264S\201\2434f\215\324n\243u\033\251CR\356\245\rK\272\215\324\241\251\341\251\301\252@\325\"\265H\257R\253T\212\325 j\231Z\246V\251\225\251\341\252Ej\2245<5<5<5;u85.isK\2323I\237z3K\232ZC\322\222\212\017Ja\244\2444\224\277\303F8\244\357M\2444\224R\212Zp\035\251qA4\225\346\307\2554\323M.h\311\240\322f\223u\033\2517R\206\245\335K\272\215\324n\247\006\247\006\247\006\251\025\252Ej\221Z\245W\251\025\252Uj\231Z\246V\251U\252P\325 j\221Z\236\032\236\032\236\032\236\r8\032vh\006\234\r.i3\232)\324Q\232(\242\232zRc\212Jozu\024\230\246\221IHG4b\224S\251GJ;RRw\2578\"\230zSOJJQ\326\202i\247\25534g\024\231\245\335J\032\227w\275&\356iwR\206\247\006\247\006\247\253T\212\325 j\221^\245V\251\225\252Uj\235\032\246V\251\025\252@\325 j\2205<5<5<585<5\000\363N\315.h\315(9\247\nZ(\242\212C\326\222\220\322w\243\024\276\364\224\336\364\204RR\342\226\214sN\2444\224\206\274\351\226\230E0\212m\024SI\357M&\233\232i4n\245\315\031\243u\033\251\301\251\301\251CS\303S\303T\201\252Ej\225Z\246V\251\225\252tj\231Z\244V\251\003T\201\252Ej\2205<585<\032x4\354\322\203N\315\024\345\247\212Z(\002\235\212LSH\315\004RRc\232Z\017Jm!\244\242\212Q\353KG\322\220\364\2444\332\340\030TL*2)\204RR`\322S\017Ze!\353M\311\315\031\2434f\214\323\201\367\247f\2245<\032pj\221Z\244V\251U\252ej\231Z\246F\251\325\252Uj\2205H\255OV\251\003S\301\247\203O\006\244\006\236\r(4\240\323\207Zz\323\207Zu(\024\264b\227\024\334sA\036\224\230\244\305\030\244\305!\351IHE\000R\342\212?\032;R\0220\005!\244\315qR[\202*\253\302W5\021^qLe\250\210\244\246\232a\024\303\326\232i\244\322d\321\232L\321\232\\\323\201\342\234\r8\032P\325 j\221Z\246V\251U\252ej\235ML\255R\253T\212\325 j\221MH\r<\032\220\032x5\"\232x4\352p\351NZ\220t\247\216\264\243\255:\224\nZ\\\032LR\021HE&(\305!\244\"\232E%\024PO4\203\024\204\320x\2444\225\312\260`9\025\004\200zUy\"\005r*\263\306\303\255BG\250\246\221L#\232i\250\3150\323i\247\212nM\0314QN\006\234\r8\032p4\340jU5*\232\231MJ\246\247SS)\251T\324\212jU4\360jPi\340\324\200\324\212jE5 \245\035i\342\236\265 \247\216\224\340)\300S\261K\212\\Q\203I\217jB)1HE!\024\323M\244=i(\2444\322qKHOJJ+\005\221[\255V\222\337\236*\253\306\313P\260\004c\364\250\0361U\331\010\250\310\307Za\025\031\024\302)\204S\017ZB)(\242\212p\247S\201\247\212\221MH\246\246SS!\251\324\324\312jE<T\200\324\252j@jE5 5 5\"\232\220\032\220\032x\247\016\224\361\326\245^\264\361O\035i\340S\200\245\002\227\024b\214R\021M\"\220\212B)\206\230z\322\032J)\246\203\322\233E&h\347\025\214\302\242\'\232c\242\272\362*\234\266\304t\025X\243)\344qP\314\233I\307J\201\224\032\205\227\035*2)\214*2)\204SH\244\305%\024\270\245\372S\251\324\361OZ\221jU\251\326\246J\231jU5 \251\024\324\200\324\212jAR\003R)\251A\247\212\220S\326\236*U\251\026\236\005H\0058\np\024`R\340Rb\220\212B)\244SOZ\215\251\246\222\233A\351Hz\323H\346\222\212N\364\265\222\313P\224\346\230\300\255D\314@\252\362\020{\n\254\352\030\020z\325g\214\201P\262\372\212\211\226\243a\3061Q\225\250\310\246\221HE&)1\315.)@\247\005\247b\234\005=EH\242\245Z\231je\251EH\265*\324\213R-H\265\"\324\213R-J:T\202\244Zz\324\200T\213R\250\251\000\251\000\342\234\0058\n\\{Q\2121M\"\232E!\025\031\024\306\246\236\224\332CIM\357E4\365\242\2121T\035*\026Z\205\327\212\256\353U\335\016*\0220zTl@\355Q\224F\351\201PI\001\307\025Y\343#\255B\331\007\221M\306E&\336i\205i6\321\266\227m(Z\\S\200\245\013O\002\244QR\250\251TT\253R\250\251\027\255J\242\244Z\221jE\251\026\244Z\225jU\247\255H\265 \025\"\212\225EJ\242\245QR\001N\002\235\212\\\032JB)\r6\232j6\246\036\264\312i\353Hi)\017ZL`\322b\214\032\000\245\252l8\250XT.\271\252\356\225]\3628\025\003\217j\201\226\241`GJO1\207\024\306\n\343\004sQ\024\003\2028\252\362DP\344t\246\025\244+M\331F\332]\264\273)vS\202S\202\323\202\323\302\324\201jU\025\"\212\225EH\242\245QR\001R\001R\001O\002\244QR\250\251\026\244QR(\251@\251TT\252*U\025\"\212\220\np\024\352(4\332CM=i\206\230\335*3M4\323I\332\233F)\010\244\242\214R\342\252\270\342\240aQ0\250\231I\250Z>y\025\013\307\336\253H\2305]\226\242d\246\025\357I\327\202)\254\274q\310\250Z y\025\031B)6Q\263\332\227e;e.\312P\264\340\264\340\264\340\265 Z\221V\244\013OQR\201R(\251\024T\200T\200T\200S\324T\252*E\025\"\212\221jU\025*\212\231EH\242\244QO\024\341N\002\227\024\332CM4\323\326\230z\323MFi\247\2456\233HE%\035\250\242\212P*\274\213P\024\346\230P\323\n\201\324\325i\016\032\2438\3175\004\221\345x\252\214\204\036\224\302\264\302\225\023%0\202\246\223h<\216\264\2058\344Tf<\036:Q\262\224%(Ojv\3126S\266R\204\247\004\251\002S\302\323\302\323\302\324\212*@*E\025 \024\360*@*@)\340T\200T\252*E\025*\212\225EJ\242\244Z\220S\307Ju:\212CM4\323M4\323Lja\353L=i\010\246\236\224\224QI\2121K\212*)x\340\212\211q\273\232\206C\211\010\252\316Npj6Nri\031A\025\001\0308\250d\217\034\342\242*)\214\225\021Nj6\2175\031B\017\024\014\3644\343\030#\"\243\tN\tJ\024\322\204\245\331K\266\224%<%<%8-<-<-8-<\n\221EH\005<\nx\024\360*@*E\025*\212\221EJ\242\245Z\221jE\247\216\224\372u8QM4\207\2554\365\246\236\264\224\303Q\232i\246\236\224\224\230\243\024c\024\224QED\322\007R\030sP\222\007j\211\260[4\306@Nj&C\217\245G\234q\212c&Nj7\\\212\200\246\r0\246i\0144\323\017\035*&\213\007\030\250\332:n\322)BR\354\245\013\212]\224\2418\245\tN\331N\tO\013\203\365\247l\245\tO\013N\013N\013R\001O\002\236\0058\nx\025 \025\"\212\220T\253R-H\265\"\324\203\265<S\351\300\346\212(\246\236\264\207\2554\212Ja\246\032a\351IHG\024\235\350\2444\224QN\003\025[\200\307\035\351\273AlPb\301\246\024\347\216\224\306Q\214UW\214\206\250\330m\342\243cQ0\365\246b\234\005;\003\024\206 \335*\'\203\035\252#\027\2653\313>\224\230\000\340\323\202\203N\362\351\302*p\217\332\235\262\224\'\265;e8-.\332P\264\340\264\340\264\340\264\360)\300S\300\247\001O\002\244Z\221jE\251\026\244SO\025 \247\212x\247\nZ)\t\244\244=i)\010\246\032a\353M=i\244RRRQF\005\030\242\212\244\033\006\245\005O=(g^\346\243\336\244pj69\357Q0$T.\024s\232\214\340\365\250\331\027\034\032\214\216}\250\307\245\0035\"\323\360\017QH\320\206\034\n\200\304A\351Q\275\276\376q\3150\333\274|\365\251\221r\242\244\021\322\371t\241)vR\354\245\tK\262\215\224\241i\301i\300R\201N\3058\np\024\341\322\244\025 \353O\006\236)\340\324\200\323\301\251\001\247\203K\236i\331\346\214\322QE!\351Hi\207\255Fi\017Jm\030\246\342\220\212J\\\0321F)k=\206\rF\362`\361Q\027$u\246\207\3055\2459\316h\017\221\326\243\221\270\353P\022I\240\222\0055[-\203R\025\343\212P8\247\001\212x\031\025*\255)\213=\251\026<\036\224\366\2002\036*\233Fb~\234\032\224(#4\340\224\276].\3126R\354\244\333K\262\215\264m\245\305.)qN\002\224S\3058t\247\212x\353O\006\234\r<\032\221M<\032\220\032r\236?\032vh\242\212P))\rFi\206\220\322Rb\223\034\323OZ)pi(\245\301\254c!=\351\254sQ\223\212\215\236\243-G\231\212\215\244\367\244\017\315H\030b\231\362\347\212z\236*E\024\360\005=W\232\231W\212\224.i\301)\373\016\336\005E<A\340\351\310\252\261)\350jp\224\355\224\273)6Rm\366\245\333I\266\215\264\233h\305\030\245\305.)i\302\234:R\203N\006\234\r8\032\221M=MH\246\244\006\236)iA\245\245\003\232Z1\3054\364\250\332\232E4\322b\214R\021\3154\212(\242\220R\3275\346\341\252@\374S\031\252\0264\302i\214\306\231\234\236\264\205\2104\375\370^\264\3459\025 \353O\014zS\325\216j\314g$\014U\200\270\251T\n\220.j@\274t\246\252+\266\323\336\252\317\007\2257N)\352\271\024\340\224\273)\nRl\243e&\332M\264\233i6\322b\227\024b\226\212QKN\245\035)\342\244Zz\324\202\244Zvi\302\234:\322\323\251@\243\034SH\250\310\246\232i\244\242\2029\246\221F(\305&9\240u\245\305r\016pjD|\212Rx\250\230\363L&\230\307\212\217<\322\266p\r4\261\305M\033qVW\2454\234R\244\2305e%\350A\346\256G( f\247\030\352\rK\037&\255\"qM1\205\223\212m\324[\323\2475Z!\306\rK\262\215\224\205i6\321\266\223m4\255!ZM\264\322(\307\265&\005.\005\024QN\245\024\341R\n\220T\202\244\024\242\234:\323\307Zp\024\340)\303\255!\246\232a\246\021M\244\305.)\017ZB)1I\212N\364\240S\200\2565\251\020\221O&\243\'\232ajc6h\002\236\006F*6\\R\306qV\026A\266\230_4\201\271\251\221\216j\344r|\2705e\034\025\034\325\210\237\006\264\340!\3059\223\347\316)\356\231\217\245Pd\3319\036\265 Z\\S\n\321\266\215\264\205i\245i\n\323v\323J\322b\223\024\230\244\242\212u(\247\016\225 \251\026\244Z\220t\245\247S\307Zp\351O\035)\324\204SM0\212a\246\036\264QK\216h\"\233\2121HW\346\024\340\271\342\214s\\Su\244\006\224\236*3\307z\211\237\234\nM\324\240\324\252E\004n\030\357M\010i\335\0050\232z\016j\312c\024\362\352\005=%\367\253QI\223\326\264\355f\332\331=*\340\271FoJ\270\245Y\005R\274\217l\200\323TqA\031\244\333F\3326\323J\323H\244+M\333M\"\233\212B)\244SOJJ)\303\245(\247\212x\251\027\255H)\364\341\322\234)\342\236\005<S\205!\246\221L\"\230E6\223\024\270\245\024\021F(\305!\034\322c\270\245\357\\.\352il\032n\342Z\243y2\325\031nh\007&\244\004\342\232\\\203S\306\304\256M?4\302s@\031\241\233h\246\375\240\216\364\206|\367\251RS\353V\341\224\216\365~)\310\3075z<\262\357^\325r\t\333\247\245\027\023\031\016})c!\226\244\333F\3326\320V\230V\232V\232E&\332k\n\214\212B)\244S\r!\024\224\341J:T\202\236)\340T\202\237N\024\360)\340T\200S\200\247v\240\216i\244S\r0\212a\024b\226\224\016(\307\024b\227\002\230E\000R\327\000N\r3\253R\261\010\270\356j\273\032e9z\324\340qQ\262\345\252t\030\\S\261\3057\2759i\262\0163U\331\0163M\000\346\254D\246\256\304*\364K\232\320\210\225L\016\365f\335s\232\260\025J\025#\232\2113\034\245\017N\325l\014\212]\264m\244+M+L+M+I\266\232\313Q\021M\"\232E0\212m\024S\200\247\212\220\nx\247\216\224\361\322\236)\342\244QO\002\236\005.8\242\220\212a\024\302)\244Rb\224t\245\003\2121F)p)\244Rc\212P+\316\331\3014\322\373z\016j&r\334\232ni\247\245I\037Z\234q@\\\265H\007\024\352a\0304\364\034P\343\345\250H\312\342\230\251\315XL\n\267\n\023\316*\374\013\315_U\033j\345\254`\214\216\265e\243\310\334\005A*\344\007\003\221S\304C(\251v\321\266\232V\232V\230E4\212B\264\326Z\211\226\230E0\212a\024\322)1K\212P)\353O\025 \247\212p\353O\025 \251\005H)\302\226\216\324\204SH\246\221L\"\232F){R\322\321\212\\SH\244\305\030\2575\335A\"\243c\3153\275:\244QR\255<u\251(\357L=jD\351D\237v\241\035i\300`f\234\234\266+j\3260\"\000\325\245A\232\260\252M\\\267;\005h\333\200\340\2361\216\225^h\202\310W\261\250\341\033\\\241\355V\200\342\202\264\322)\244TdSv\320E4\212\215\224\223\212cD\303\232\210\212a\024\302)1F)\300S\205<\n\221E<\np\247\212\221EH\264\361O\024\356\377\000J1\305&)1L#\232a\024\322(\242\224t\247\001F8\244\"\223\024b\274\261\237\232P\371\240\232Jp\251\224qN^*@i\324\016\264\207\255K\030\242Nj,sJG\0255\264e\244\007\025\263\020\302\212\264\2035:\n\262\202\256\333d=Ip\271\001\205T<L\033\326\256(\312\321\212B\264\302)\205i6\322\021L\"\230\313\232\\|\270\315Vd\332\306\230\313L\"\233\212\000\245\3058\nx\025\"\212x\024\340)\352*@)\340T\200S\200\357N\003\2574c4\224\207\2454\365\250\315%&8\244\035i\324\341\322\216\324Rb\214W\222\026\346\234\265%.)\300\324\311O\245\006\234Z\205<\323X\374\365<g\214\320NZ\233\216i\t\347\025\245g\026#\004\325\364\025f1V\220U\210\306H\253Q\360\334T\354\277-Tt\371O\265X\204\356\214T\233i\n\323J\323\n\323v\323H\246\021M\"\223\261\250\034e\3526\024\302\264\334Q\212P)\300S\200\247\201O\247\001O\002\244\002\244\002\236\0058\np\353@\242\232z\323\017Ji\024\323\326\220\364\244\3058\np\024\270\342\220\n0(\305y\005<\032\220\036)\371\245\035jE5 4\341Ct\244SA\345\252B\333c\246F\371z\237\265$k\231y\365\255x\016\024\n\266\230\2531\216\346\247\334\000\353R\307 \355Wm\376nj\331\031J\251\"\220\344v4\266\347k\2245so\024\205i\245i\205i\245i\205qQ\221L\"\223\025\023\016j2\264\302\264\233i6\321\212p\024\340)\340S\251\300S\300\251\005<\n\220\np\024\270\343\024\270\242\230z\323H\246\032i\244\305\0304\240S\251q\305(\024\270\243\025\343\200\022*@\264\356\224f\235\232z\265J\246\245\316\0055\233&\225G\024\270\245a\225\250\207\313%[S\225\247\201\206\006\257@zf\264#*\006I\247\031\273-9\035\210\2531\347\326\265\355\006\024f\256\214\036*9b\004t\252\3426\335\323\221V\242\'\030a\315HV\232V\220\2551\226\242e\250\312\323\n\323H\250\312\323J\323\n\323J\322m\244\333J\0058\np\024\240S\300\247\201O\002\244\002\236\005<\n\\s\232\\`\232B)\207\2554\212a\024\204Rb\2008\245\002\227\024\275\251\312)\330\244\"\274\201TR\221\203K\326\233\216h\3178\245S\315XJvE-=\007\024\023\3159y\034\3224y\344S\221\212\234\032\2308\305X\201\302\256z\232\260%c\337\212\261\020\317&\254\251\355V\340\371\234zV\315\277\"\255\247\255K\215\302\205\214n\351Ox\227``9\244Q\221AJa\\TL*2\264\302\264\302\264\322\264\322\224\302\224\302\264\322\264\322\264\233iv\322\355\245\305\000S\300\247\201R\001O\002\236\005<\016)qK\216M!\034S\010\246\221M\"\223\024\230\366\240\016:Q\217j1N\003\212z\216)qF+\306\303S\363\221L-\203NS\232\0104\364\034\363Sn\300\300\247\001\205\315\n2ja\200)\207\2559y5`\001\2120\t\351CE\214\021RB\244\260Z\266\303n\005M\033\361W#\037.\343Wm\227\200kR\026\302\325\244n*\3025L\2705c\311\337\016\341Q,ex4\245j\026^j2\264\302\265\031ZaL\366\243e!J\214\2450\2454\2554\2557e\033h\333F\332P\264\340\265 Zx\024\360)\340S\2004\354z\320G\315HE0\212B)1I\212M\264m\243o\265\033i@\247\201N\333I\212\361`i\331\244\352i\303\201N\r\232z\365\247\365js6N\005=N\00585\004\363J:\324\352\337.)\353\326\236O\313O\265\346Rj\324\270\305,g\232\275\t\310\305_\265\341@>\265}\rZ\214\361S\253\nz\310wU\353i\317\335\'\203\326\247t\347\212\203\222q\212aZaZiCQ\224\244\362\351\336_\2651\222\241p\005B\330\024\302E\'Z]\242\223m\033)6\322\204\247\005\247\205\247\205\247\205\251\002\322\205\364\243i#\212R>jk-&\336)\010\246\342\215\264m\244\333F\3326\320\027\232x\024\354Q\212\361\021KNQN<\320\001\315J\243\024\026\347\002\225GzR\334\320\036\244\006\234\0175*5L\255\315=\210\331\305:\324\341\271\251\345|\200=\352H\217\000z\325\330\010\365\255\010\0161W\243aV\021\275\352da\334\322\356\332\335j\304\022\374\343\025\257\031\335\032\372\324r\000\262t\353M`1\300\244\021\3654\322\234\323\nS0\001\245!\233\356\2551\341\227\031\305S\225\033v\t\241l^E\316N)\255\247\310\017\006\253\2742\304y\024\320\344u\030\251\025\201\251\002\203K\262\227e8%8%8%<-<\201\322\223\234`p)@#\245\033i\010\246\342\220\255\033i\002\321\266\202\264\233h\333J\027\232pZv(\305xfx\245\034\232\224\014\nUZ\221W\034\232By\241W-\223Nf\002\243,)7\324\213\'\2758J;\324\211 \251\204\243\024\365}\334\036\225b2\001\251$\004\374\302\244\211\276\\\372\n\265\003|\243\326\264\241\223\003\232\264\257\357Vc\220c\232\235\037=\351Y\260*\345\202\231\033>\225\261\031\306)%;\345\030\355K\212\017J\215\210\024\314\0265*Z\344g\255L\220m\344\212\222DF\204\340r+<\331\263\276\342\274U\330\255\306\314t\252\363A\"\261\302\325W\210\267\004T/`\031zU\031m\236\022H\351Drs\203V\224\006\024\361\035;\313\245\021\322\354\245\333F\337j)pi\301A\316i\245i\002\322\021I\266\205\030\315\000PV\233\266\215\264\241y\247\205\243\036\324m\257\010=qSF\265!\000\nM\300R\206$R\214c\232kI\201\201Q4\224\3170Ry\235\351\004\2715\"\275X\212E\3163S#\215\306\254\306T\325\205\03052\260\306\323I\235\210G\255Y\265$\256\356\302\264\021\306\320j\304o\315YW\367\025b98\247\227\315i\351\262\000\370=\353m\024\021\305B\331\216R\r;p\306i\217\'aBD_\223\322\255Ch\314\303\002\264\343\264\n\200\021\315Ha\211W\346\003\036\365\023-\257#\201\364\252sK\020;W\265T{\215\247\212\221eyq\351S\010\021\307A\232\032\317\013\362\363\355U&\260.\016V\263&\323\231X\220*$G\214\340\203V\243\000\212\224G\236\324\276]!JiZB\264\005\245\333J\026\202\274Rm\244+I\266\225\000\004\344v\246\343&\215\264\205h\013K\267\232v\3326\373Q\212\360|sR\247\002\225\263MP\t\311\247\026\002\243i=\352&z\215\216EFO\035i\255/\030\024\325\230w\355R%\302\223\367\252T\235\025\303n\251V\343\315\227j\034z\325\350\337h\312\267N\325q%\3713N\206m\357\217J\222\342@\241W\2715r\311\307\220\300\325\244|\212\231d#\245X\216R\306\255\243\361\326\236$\253v\356\341\301\025\320Z\334\345Fz\325\321\373\316\253\232\014#\030T4\211a+\267\3345\243\006\237\267\357U\301\022\3047\020\024\n\257=\337d\374\352\234\227\016\343\004\325Ww\003\203T\345\363\013g5\036H<\325\250\'+\323\025h^\355`1\232\260\223\211\010\303c\332\264Da\243\031\003\006\242k\005q\300\252\027:Y\031!k5\355^&\310\034S\343\301\340\324\245\006)\205)\205)\245)\002S\266\322\205\315)^)\233x\244\333F\336)\241pM\001)J\323J\321\212]\264\270\024`R\021\315xW\227\212xJd\207\260\246tZ\215\230\232\211\211\355Q\222{\232\206K\200\274\016j\277\234X\362i\373\201Z\211\262M\002\244Z\225\030\243nS\315_\202|\340\356\347\275[78m\275\252[\031G\332y=j\325\331\315\322`\366\253p>\325\030\357V\221\30052\311R\244\240\032\231n;f\255\302wsZ18\000f\264\255\'\033\205t\266\222\304c\007\214\325\325x\313\177\016Gz\237\355\020D>f\014}\005!\274\014\270\216<\037Z\2554\354\331\004\325B3\336\220\250\2462\034Uy\"\366\252\355\037\265 B*@\274g\034\324\261\261\004`V\265\254\347\0001\343\336\264\342!\276\3575iaW]\256*\255\316\224\245\013 \315`^X<,]G\025^6\r\305I\2674\322\224\302\224\004\243m.\314PS\212n\312B\264m\342\230S\232]\270\024\323\212a#4\322\302\215\324\271\317j9\364\240+\032\361\027\307ji\'\030\002\243e\307Z\212C\306*\006p\242\240i\217j\202II\030\315Tv\346\242/\203OI\261Ro\3174\241\251\341\300\247\t*X\344\333\322\256+\003\026I\346\232\223\264ro\007\241\255X$7\r\346\236\303\212\272\317\2624a\334T\261M\236\365a$4\343.;\322\305)i\200\256\246\322\301\236\307\316V\343\275\013\033\007\301\253\261\025\214r\016kJ\332\342V!P\034V\325\2742\025\014\355VG\331\3429s\223\351I\347+\003\265\200\366\246\023\270\365\243h\245\002\202\0054\240#\245F\320\217Jg\222=*E\200\021\322\224Z\363\220*e\215\200\003\025\251g\300\003\241\2558\210\316\017\036\365eA\0318\315T\272\263Y\321\206\3203\\\205\375\263Z\\\222\007\031\346\226&\016\271\024\362\231\246\224\244\013N\010)\n\374\324\024\342\231\266\232@\315.\0050\201\326\242w\002\240,\314\330QR-\264\215\353N\373!\034\232h\207\234b\246[s\212w\221\3074\206\"+\303\n\214t\2466\007j\202F5VV\300\346\251\273\0265\023\032\256\344\324\016j\023H\rH\257\212~\372P\364\340\365*\275M\034\254F\301\326\233,\256\256\020\2163]&\237\264\332\241\007\034T\227/\202\251\355\232|,p*\3628\002\230\362|\325r\3220@c\326\272+K\341\024\001\030\344\016\324\246\377\0002|\240\001Z6\227\001\300\336\240\257\251\255\3536\265\333\271H\000u\346\247\270\324\342U\331\021\374j\232\334\226|\223\232\267\034\200\201V\220\347\275?<b\224\032)A4\264\341\0304\364J\220\014\036*U\036\3252\020\033\322\264\354\323y\0319\255o\'\216\230\250\2361\212\347\365{\0375\013m\344W7\261\355\245\350qV\222Du\340\322\340Q\200)\254E7\"\232dP:\324-(\035*##\223\302\2327K\217\272j63\036\324\251m+\234\2605v\013P\274\260\253\001\025z\nk\014\366\250\304\\\364\251\004m\212C\021\244\362\275k\300\310\342\241aU\344\3435JL\261\346\253\277\025\013T/\305@\3435\021\024\303\326\212\\\232]\306\224=H\257RG6\311\001\315K4\233\302\267\275tZt\203\354\303\236@\247\313t\245\366\340\022;\324\221K\221V\004\244w\246\254\273\345\305i\303/\226\240\n\275\0233\212\273i\003K7\314p\243\251\255\026\225\021<\250\317\002\237\034\356\243\001\215XI\030\236M[\211\371\025z)1\336\256G-X\022f\227x\245\337NV\251\003\n\225y\251i\352\001\251\025y\247\205=j\325\275\301\205\3075\277it\223\305\264\375\352\225\2429\252\227\026\341\324\361\234\3277\177\247\215\347\013X\362XJ\247)\221H \273\003\246i\246\013\302x\006\225l\256\330\363\232\177\366m\316psO]\"Rr\304\325\210\264\264\030\3343W\027IR\233\202p)[L\n\333J\001Q6\234\213\316\321\371S>\316\027\200\277\2454\333>y\030\245\020\0009\024\2065\035\251\245\000\346\223\217Ji\351M&\276~j\205\315T\230\374\265M\252\273\365\250\215D\3435\013\n\211\226\230V\233\212LR\032\001\247\203JMJ\035<\276G\"\2654\373\274\305\214\364\247\264\331\227\361\255\013w\312\212\260\317\362\324Q\313\211\263\232\330\266m\300du\255\2100\000\253\242s\267j\360;\323\225\271\253\010\325a$\025j)*\344r\032\265\034\206\247\022\236\306\244Y}MH$\247\t\005J\257\236\365b6\367\251\363\357NV\346\247V\310\342\246S\236\264\021\315i\351\363,N2kx<rE\225 \232\205\2075Z[X\345\352?\032\256\366\010?\204\032\251%\240S\304t\202\025\003\230\261\370S\0322\256\n\256?\n\235c2/*)\342\324zR\033uNqI\346\004R\275\215V\226\343-\221\236=j?\264\215\270lTMq\010~\0056I\303\016\005B_\214\324\016\374\236\325\021\223\336\224\034\212By\305!\353^\000\302\240u\2523\037\233\332\252=@\303&\230G\025\021ZaZaZ\214\2450\2454\2554\2554\212\026\237\216*\265\314\306\030\213\003\212v\217t\314N[9\351[\001\211\223\232\323\201\360\242\2472dT;\366\276s[\226R\201n\246\265\255\345\3348\253\2215XV\251<\317J\2322MZ\215\3105r)F:\325\205\234\016*u\234\032x\226\237\347{\322\211Nz\324\361\313\357Vc\227\336\247Y\275\352T\2235b9*\3026je\031\245%\221\363\236\225j\rL\243\001\223Z\366\367\2512\214\216j\316\321\214\216\225\023f\232p{\ncD\030T\r\003\027\366\251\025\000\343\024\374\001U\256\'U\312\343\025\235#\026\031\016:\361T\245Iwd\034\346\252\315\270q\223Q\251\"\236%\"\225\246\312\324\014\365\021jx\223\024\355\331\244-^\n\3353Ufq\202\005P\227$\325vZ\214\2554\255DR\232R\243e\246\025\250\312\323\010\24651\2056\235\236+\037U\230\210\312\216\365w\303\221\022\273\332\267\177\345\271\253\2217\002\254\003\305C#`\346\266,\\\033e\255\210fU]\242\256E-YW\251\343*OZ\262\222\252\036\231\245\363\tl\216*T\225\263VQ\230\363S\253\221\326\247Yi\341\363\336\236\036\246G\253\013%L\262\373\324\3130\365\2531K\357W\242l\325\264e\365\244\224\344qU\034\025l\212\267e{\345\310\0015\324\303p\222[\202\016iN\322*&\034\322\003K\221M%G5\033L\247#\246=k6\363$d\036\247\212\241+\272G\203P\t\030\237\230\323\\\003M\362\370\315D\303\025\0215\033Te\250\r\305\002L\032V\220W\204J\304\3259\r@\3035\031Z\214\2554\2550\245=`R\205\230\343\025VE\0318\250\030TL*6\353Q50\236i\271\245=+\032\3762\367\001kwL\210Ad6\365\"\257\017\277V\2435a9\2474{\205]\266W\214\016N*\344r\225l\346\257\301>H\346\264\"\2235j&\001\276aVF\037\356\212\2352\007j^Cf\254\305p\024`\212w\234\033\245H\262T\202\\w\247\t\271\353R\245\300\035\352u\270\007\241\251\222l\367\251\222Bj\314R\343\275h\303?\313VR_z\235\033#\255G%W\223(7V\236\223\250\260;\031\270\255\244\272\004\343=jF\270@\247\346\250~\324\203\223Q\276\245\0108\315T{\347\2238<T_io_\306\240\226vv\311n\225\033H\010\301\250\010\311\342\244\0106\362pi\010\000u\252\357\311\250\036\2435\023S\0014\204\323KW\210IU\\d\323v\374\246\243+Q2\323\n\323qMl\342\240qP8\250\036\240cQ1\246\023@\034\323\210\371k*\344\377\000\244\202kr\300\027\267V=+@(\364\251\223\035*\302\005\251<\304\035MZ\212P\311\223\300\035*9n\202\374\240\363V\355&$\016kb\031p\0075n9\t\346\255\3039\3175ie\367\247\371\240\214Q\273\232\221Z\244\017\212w\231G\233\357I\347\034\365\251\343\230\372\325\270\2445z\'\310\253HE\\\205\305ZI9\253\t.;\3224\204\236\264\342\003\246)\210<\246\312\366\253\177n;q\336\217\2661\376*a\272l\365\2463\2269\247\t\0161O\335\305F\306\231\232]\370\034S|\336\324\323\'\025\03385\013\034\232a\353Lnj&\340\323I\246\023\315x\233TEsM\333\216\242\243+Q\224\250\312\323Xf\242aP?z\257%U\223\245@\325\031\353M\3059E8\214\214Ve\344\\\356\255\r&\340cc\270\000V\320*\307\000\203N\344v\247\006n\324\252\214NO\003\326\246\363\202\256\320zUB\314\363\347\336\266l\270Q\232\325\216N\225\245l\341\216*\341\n\007\024\202L\034f\246\215\363\336\245\007\216M<5;}!z\003\323\327\236\36526:\325\270\345\002\255\3057J\271\034\334U\230\346\253qK\236\365:\310H\247\357\251\243z{\236*#\301\251\027\030\240\225\024\007\024\360i\333\270\246\263S\013SKTL\3304\322\324\205\251\271\244&\230j&<\323\r0\212\361vZ@\000\344\323\031A\030\025\023.\rFEF\302\242j\205\315Wz\255%WqP\221L\"\233\266\234\005<&j\265\334Y\\b\262\310\226&\312\344U\273MRH\234\371\271=\253^\333UG<\237\316\257\013\264\362\367\000*\007\276f8\006\234\263\345}\352\305\272\356`kb\001\265j\332>\r^\266\233\007\255^\023\345z\323D\234\365\251\222_z\230K\357O\022\217Zw\231G\230)C\363S\304\331\357Rn\301\353R\306\365n\'\253i\'\275L\263c\275Z\206~y5u\'\036\265*\312*t\224z\324\236h#\004\322n\310\353B\312\001\301\2512\010\3153\200x\247\t1N\337F\352ajajc53u&M.i;PFEA \"\230\016x\242\274h\2551\226\230T\323\031p*\0229\250\231j\026\025\013\n\201\305V\220T\014\265\021ZaZM\264\345L\324\241qP\312\241\252\253\333\206\311\305W6\1777J\r\263#q\305_\267Y\004@\023RyM\2735b\030\361\326\257Dv0\2558\\\025\004U\2255<m\212\262\262\361R\254\2315\"\27752\311\3058K\317Zp\226\234$\247\0075f\027\365\247\031>j\236)*\334oS\254\246\244\023s\326\247\212l\2663WQ\2163\232\262\222q\315J&\301\353R\t\271\251\004\271\350iKg\275H\262`Q\346\346\220\2759^\235\276\220\2654\2654\232i4\264\036\224\200\372\320x\2460\310\250\010\303R\366\346\274\200\2550\2451\226\242qP\262\234\324n8\252\3169\250\230T\016\265]\326\240e\250\331i\233h\331R*\342\221\316\007\025\0263\326\230\303\002\224\247\312\033\035i\2142\300T\312q\306)\306JzIV\243l\212\275l\3308\255\004\"\246SS+\212xq\353R\253T\201\370\244\336sO\017\305=$$\325\224\347\223R\371\201W\002\221d\313U\204\223\025a%\251\304\207\024\345rzT\251!W\255(\256r\243\245X\027\000\216\324\033\201\332\244\216|\367\253)(\251D\264\343%(n\371\240\276(\022\343\275H%\006\227\177\2754\2754\267\275(oZx4\036\224\323\301\243vF)\204\342\230\307\2757<W\2242S\nTl\265\013%@\352j\'Z\201\222\241e\250Yj\273\255DR\243d\346\231\262\200\224\244Te\t\244\331\212\215\3078\241\316\024\n\215G9\251@\244\"\234\243\025b&\253\360\267J\276\207*\r<\312V\2016jd\2235i\033\212\223u\031\245\335R\306\340\036j\320|\257\024\306s\336\225$\301\251\304\2652KV\222\\\255=%\332\324\351\'\3475=\265\316F\t\253Bb\017Zx\2275f91\336\254,\336\365*\315\357O\363\351E\307\275\036w\275!\233\232z\313\307Z\220K\357G\233@\222\244V\251CqK\232F5\021l\032izajn\354W\2332TL\225\033%B\311P:T,\225\013%@\311P\262T,\225\021J\214\307\3154\2454\255&\332M\274\323Yj\273\257\315Q\260$\322\252\324\252\274R\021\315(\025\")\'\212\275\n\236\346\257\307\300\305+\014\323\007\006\254FEYG\342\244\017N\315.M9s\232\265\033`b\226B)\231\305=\036\247G\251\226B*u|\216\264\355\331\251\2418j\266\037\"\234\257\317Z\262\262\340T\253.i\342lw\245\363\362:\321\347c\275(\270\367\245\023d\365\251VOz\221e4\360\365*\265H\255\203S\006\342\234\032\202\334T.\3305\031l\324n\373j#/\275qm\035B\361\324,\225\003\245B\351P2T\014\225\013%B\351Q2Tl\225\021Jk\'\035)\205)\205qM\305#\n\201\327\232\217g4\273qN\246\236\264T\210v\266j\364L8\253\261\234\212V8\342\230y5*f\247CR\203R\003R\003O\004T\212p3Mi3\336\22075\"\232\231MJ\244\324\350I\251T\232\2326\305N\037\212r\261\006\247W\342\244W\342\234[\336\232d\"\220JM<==_\232\260\222T\212\30752\236ju<S\367s\232\225_\212R\374\365\240\311\362\342\242f\346\230[\025\004\222qU\313\232\347\331*\026Ny\025\014\221\200p\005@\361\324\016\225\003%B\321\373T,\236\325\013GQ4u\023G\355Q\230\351\214\224\302\225\023%0\2551\2075\033-3m!\024\322)\244P\0058T\261\271\025z\t\rYnW4\321\326\247S\306*T\0250Z\220\003N\013N\301\315?\234S6\363OQR(\251\227\245J*T8\251\201\245\0143S#\342\237\277\236*\304o\221R\003N\335\305F\314)7S\225\252Uj\235\030\346\254\3063\212\262\240b\236\033\265\014\306\225$\343\2558\311I\2774\271\356j)$\343\212\256\355P\226\254\306J\205\223\212\211\243\343\'\251\250\035*\273GQ4u\013GP\264u\013GQ4u\023\'5\021J\215\322\243d\250\331*2\224\302\225\031J\215\227\rQ\221M\"\220\255&\337jp\024\344\0305f6\305XI{\032\220\016x\251TT\353S)5(aN\337\3158\034\323\201\244\3174\365\305J\005<\034\032pqN\022S\274\33684y\20754r\232\260\215\223V\025\261S\007\310\240\260\365\246\236i\264\340H\251\003U\230[\326\257F8\310\251C\021N\0143\232q<TE\260\334\032pl\216\264\365`:\232I\034m\340\325f\222\241g\315FZ\243d\250Z<\346\242d\343\245@\351P\264u\013GP\264u\013GP\264~\325\023GP\264|\324m\035B\361\324l\225\023%FR\230R\230S\214\324N\2375DS\232\215\226\223m\033h\305*\212\225EL\213\232\271\nqS\354\305\003\212\220\032x&\234\rH)wPI\241\\\203R\211iL\224\236a\247\253\023R\256MH\026\247\215q\326\254.\005?~)\311!\317Zs= \226\245V\006\237\232p54m\203W\242\227\345\251\213\214u\246y\200\032sJJ\340SFOZqm\2439\250\214\347=h3\0221Q3\324E\3513VZ<\324o\0368\025\013%@\321\324M\035B\321\324/\035D\321\324-\037\265B\321\373T-\0375\023GQ2TL\225\023GQ\264t\302\225\031N*\'J\205\222\242t\244\331F\312\nR\005\251\025jx\305[\217\201Sg\212P\0058\n~8\247\np\246\220sJ\017jx\240\232Pi\352EH\246\246SS)\030\247\356\305*\313\332\235\274\232z\032\223vh\003\232\225EL\2314\3609\247\255N\256@\251C\223O\033{\232p#\326\234d\002\243i\001\035j\276\376iwR\026\342\243-\315\000\326\263%D\321\324M\035B\321\324M\035B\321\324M\037\265B\321\324-\035D\321\212\201\223\223P\262TM\037=*&\216\242d\250\312q\322\230R\242)Q\262T,\225\023\247\024\315\224\004\240\245&\314S\302T\252\270\251\224\323\267\032\025\310j\265\033\006\025&)B\322\362)\0175\031$\0327S\203\032r\232x5*\232\225ju\247\020M\0023N\n\300T\250)\371\247+U\204\306*Q\3075*\200\302\244\tN<\nT|f\202\3704\236n\017ZS0\"\231\277\336\233\273\232vx\244\317\024\323\326\214\327B\311\355Q\264u\013GQ4u\023GQ4u\013GP\264u\023\'\265Wu\307nj\026J\205\220b\241e\250]}j\026\025\031\025\033\nf\312i\216\242d\250^<\324e)6R\354\342\202\224\004\251\025i\341i\301i\nsR&T\325\305\303(4\360\264\2168\252\354\304\032a$\320\265 \025\"\212~\332\221\005XE\030\251\300\033h\31752T\233E\030\024\215\301\241:\324\352\330\251T\223V#\004\n\235M#u4\301Lv\300\250\203\344\323\267`Ro\243q\247\253\346\2274\032@k\377\331"
-byte_png: "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\002\000\000\000\002\000\010\000\000\000\000\321\023\213&\000\000\002\322IDATx^\355\335QR\2030\020\000\320\016\336\377\3102\216N\255\032\241\224\220\322d\367\275\317(\010\311fI \310\345\002\000\000\000\000\000\000@&SY\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\300\002_\203MN\000\000\000p\237\021\343\350\264 \000\000Pc.\013\000\000H\304h\020\000\000\000\000\000r\261\352<)\r\017,\223\035\000 ,+\303X$0\000\000\000\000\000\000\000r\260>\020\000\000\000\000\000\000\000\000^\304\342\035\326\211\016\000\000\000\000\000\000\200\010<\375\005\000\000\000\340\331\334\203\002\000\000\000\000\000\200T<\"\004\200\261\271\226\003\000\367\314e\001\000\000\020\2121?\000\000\000\000\000\244\343\361\000\000@^^%\003\000\000\000\000\000\000\200x\254\r\005\000\000\000\310\306\033\"\000\000\000\221t2\313\353\3440X\241}\000\000\000\000\000\000\000\000\000\000\000\342\261V\034\000\000\000\000\000\000\000F\343i?\000\000\000\260`.\013F\342~G\003\357e\001\000\220\315\320\003B\216\023\000\220\222\256\317\250\334\306\000\000\000\340!\026\023<\215\252\005\000\000\010fj2\323k\262\023\000\000\000j\231\226A\004\303\364\344a\016\024\270x\r\207:2=\300~r\'_zy\177\377z\034\225q9\367r\032\235\253\254\336\016\034i\340#\333\322J\321\n\323\251\301x\346\337\002V\235\224\215\257=^\307\037\310I\241\001@^\337\343\002\343\203\r\277\257\311\273+k\210\013\372\356\263\312e\2106<D\000\374\023\261J\"\236\023\300\013<\222N\343\217\035 \243Gz\377\2154\020\307O\303\357\010\201\035\277J.B\003\272\247\233\322\324\357\200\362\006\020/\"\257eV\266\276\211\352\231\312\332g0\237\r\250\313\000\000$4\374 p6\033\341\211a\374\274=\323N}+M\233\3371x+\013\342\250\257\2664\326\253h\375\'\304\246\345\001\000\030\325\306\344w\323\321\355\007\261u\223\000\000\000\200\230<\002JJ\303\247\264p\373g\241\010\200\030\\\354!\022=\232\372\201{\375\226\001%\251\214\317\214q\313\032S\340\227\001\000\222\010x\371\nxJp\202(\323\302(\347\001p\036\231\263\324\272FZ\357\257\261\303\203\347\303;\000\030\216\314\007\000\361t>s\343D\376\021BJR@j\223\000HM\322g\233\034\001\231\271N \n\022x\340\303\277\242 0C=\000\000\310\304\014\200\277L\370\001\000\000\000\000\000\000\202\260$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000.\276\324\010\000\000\000\000\000\000\000\000\000\000iYL\014\000\000\000\320\265\017\265\301<:\355\356j\346\000\000\000\000IEND\256B`\202"
+byte_jpeg: "\377\330\377\340\000\020JFIF\000\001\002\000\000\001\000\001\000\000\377\333\000C\000\003\002\002\003\002\002\003\003\003\003\004\004\003\004\005\010\005\005\005\005\005\n\007\010\006\010\014\013\r\014\014\013\014\013\r\017\023\020\r\016\022\016\013\014\021\027\021\022\024\024\025\026\025\r\020\030\031\027\025\031\023\025\025\025\377\300\000\013\010\002\000\002\000\001\001\021\000\377\304\000\037\000\000\001\005\001\001\001\001\001\001\000\000\000\000\000\000\000\000\001\002\003\004\005\006\007\010\t\n\013\377\304\000\265\020\000\002\001\003\003\002\004\003\005\005\004\004\000\000\001}\001\002\003\000\004\021\005\022!1A\006\023Qa\007\"q\0242\201\221\241\010#B\261\301\025R\321\360$3br\202\t\n\026\027\030\031\032%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\203\204\205\206\207\210\211\212\222\223\224\225\226\227\230\231\232\242\243\244\245\246\247\250\251\252\262\263\264\265\266\267\270\271\272\302\303\304\305\306\307\310\311\312\322\323\324\325\326\327\330\331\332\341\342\343\344\345\346\347\350\351\352\361\362\363\364\365\366\367\370\371\372\377\332\000\010\001\001\000\000?\000\361\315\336\364\365z~\372z\277\024\340\364\340\364\241\351w\322\357\245\337@zv\3727\323\204\224\365\222\244\022r*e\222\245Y*U\222\245Y*E\222\244Y*U\222\246I*Uz\231\036\246W\251Q\352ezxz\221^\244\017N\017O\rJ\032\2245.}\350\335\357F\377\000z\013\322n\243u4\2651\2151\215FNi\255\326\232M6\212\t\342\233N\355M\017\264\232a\240\364\246QJ:\323\301\305:\212)A\257\036\240\034S\203S\325\251\341\351CS\267\322o\245\337F\372P\324\355\324\273\350\337N\022S\304\2252KR\254\265*\313R\254\265*\311R\254\231\251\026J\231$\251\322L\324\310\3652\275J\255S#\324\212\325\"\265H\032\236\032\236\032\235\221F\354S\203Q\272\223u\033\251\013P\032\202i\204\361M=)\264\323\326\230\335i)\t\305!9\242\214\323OZJF\351M\242\227\2458t\245\315(\030\024\345\031\243\251\257\035\'\002\232M\001\252M\371\245\337J\036\224=\033\350\337@zxz]\364o\245\335F\372p\222\246Y8\251\026J\221d\251\222J\231e\251\022J\231d\251VJ\235\036\254F\365:=J\257R\243\324\312\365\"\275H\255O\rN\rO\rK\272\2245.\357zB\324n\244&\2245\031\244\'4\322i)\244b\230\324\224\215I@\024u\246\265%#Sh\242\236:R\216\264\352wN\235i\017\002\274p\236i\207\255%=[=iA\305\033\2517\321\276\215\364\007\3058IK\346{\323\203\322\357\244\337J\036\244I*A%J\262T\253%L\222T\312\3652=J\257S\306\365f7\251\325\352Uz\225\036\246W\251U\352Ez\220=8=<5.\352]\336\364\355\324n\244\317\275\0314\240\322\320zSh\244#\"\230zSi\t\244\245\035(\003\212CL<\032F\246\321J\0074\352p\024\340(&\222\274u\272\323Z\232x\024\003\232\\\232Bi7Ro\243}&\352P\364\355\364o\243}(zpjxzxz\221^\246Y*U\222\247I*d\222\246G\251\321\352\314oS\243\324\312\365*\265L\217R\007\251U\352@\364\360\324\365jpjP\324\340\324\273\2513\2323\212u.M\031\242\212)\207\275&8\246\3434\3229\247QF9\246\021M\246\221\315\001i\300S\2058t\245\355M\2445\343\354)\215\322\232zSiA\346\202i\215L&\223v;\322n\245\rN\rK\276\215\334\321\276\234\036\234\032\236\036\236\217S+\324\252\3652IS\244\225:=N\217\305Y\215\352\302=L\255R\253\324\312\365*\265H\255R+\324\201\351\312\325 l\322\206\346\234\032\2274\003N\0074\340i\324QE\024\3229\244\246\221\212LsK\2121IM=i\244RR\201J\006)qN\351H}))\255^H\353\212\211\205FE6\212)\204\323\t\246\223M-I\273\336\2245.\3527Q\276\234\032\236\032\234\036\236\257R\253\324\213%L\217S\243\324\351%X\215\352\314oV\021\352dz\231^\245W\251Q\352Uz\221^\236\032\244\rR+S\303S\203R\203\232Zr\232\220\034S\250\240\014\322\355\243\024\3223HE%&9\366\245\240\364\246R54\363@\030\245\245\002\227\024w\244=))\204\346\274\256E\025\003\255D\313L+M\246\340\232CQ\265Fz\32250\223@jR\331\243w\002\223u9Z\237\272\234\255O\rOW\251U\352dz\235\036\247G\342\254F\365f7\253\010\365:=L\257R\253\324\250\365(z\221Z\244V\251\025\252Ej\22058\032pjp<\324\213O\035i\364\001\232u.(\3054\2574\021M\300\244\013F\3321M#4\332B)\000\315;\034Q\212\010=r(\316)\t\030\036\264\323I\221^q-\230#\212\245%\273)5\003G\212\215\323\025\023\014Si\247\255F\302\243=j6=i\244\323w\0323Fh\335@jxn)\301\251\341\251\312\365*\275L\215S\243T\361\265X\215\252\314mVQ\352dj\231Z\245V\251U\352ej\221Z\245V\251\024\324\252j@i\364\341\322\236\247\245J:S\326\236)\324\240f\235F\r\030\024\204R\025\246\355\243m!\024\3221M\"\233E\024\023\203H1\232BsHN(cM\256\035\324\201\310\252\262\250\252\263[\356\031\035j\234\2210\252\354\274\362)\205i\204sQ\265F\302\243a\326\243\"\232x\246\346\214\232JPqN\rN\rO\006\236\032\236\246\246F\251\321\252tj\261\033U\230\332\254#qS\243T\250\3252\265J\255S+T\252\325*\232\225Z\246SR)\247\016\r<\032\221ja\322\244Zx\024\360)\300f\227\024\355\264\230\244\333HW\212B1HE4\212i\024\303\3054\322QH\324\322qKMc\306):\321\\\274\221\007\342\251\317g\351Te\211\223<T\014\003\014UY`\353U^\">\225\013.\rF\313\232\215\205D\313Q\260\250\330sM\"\222\203E\024\365=)\364\340jE\251P\324\310jt5f3Vc5:\032\235\rJ\255S!\251T\324\310jU52\232\225\rL\246\245SR\003\232p\351R-L\225*\324\240S\300\3158\nx\024\273h\333I\266\220\212i\024\204SH\342\243n\224\303\326\232Fi))\255\315!\351\212L\322R\023@<W:\342\241c\212\216H\226A\315gOdW<qT\3326S\317\"\240\270\217gN\206\252\262f\240x\360x\250XTn\265\023\n\215\226\232E3m%\024\240f\234\005>\234*E\353R/j\231*x\352\304uf3S\255N\206\245SS!\251T\324\310jU5*\232\231\rL\246\245SR\255=jE\0252T\313R\250\251\000\342\236\005<-.\005\030\024m\246\221M\"\232E1\2526\2467Jm4\322\036\224\323HFM4\214QI\336\214b\260\336:\256\321\363Q:\225\250\235\310\315T\237\007\234\n\247*o\004\036\265JHJ\216\225]\227\326\241t\250X`\021\212\205\222\243e\246\025\246\225\244+\212LsK\266\234\026\234\253N\305=EH\202\245QS\240\253\021\325\204\251\326\246SS-J\2252v\251R\245J\231{T\311S-J\265*t\251\026\245QS \251\324T\252*U^*EZpZ\\q\322\227\024\204SH\3054\212a\025\033\n\211\273\323)\264\322))\247\255\006\232z\322Q@\031\254\271#\252\357\035A*\340UI\026\252I\031\301\252\3540j\'*3\307\025\003B\222t\252\363Z\221\234U9\" `\325g\371O\"\232@\"\232S\232c.\r4\245\033(\tN\013N\333\3058-8-H\253R\242\324\310\265:\n\260\202\246AS(\251\220T\312:T\251\332\245Z\225je\355S%L\242\246Z\225z\324\252*T\025:\n\235\026\246U\251TS\300\247\001K\203E!\024\322)\264\302*\'\250\230sL<\032i\353Mn\224\332C\326\233\202\0174c&\223\006\200)\325\236\353\305Wu\252\362&j\244\251Ud\312\325YG\265U\221j\273\251\035)\004\244S\034,\200\372\325s\020^\010\342\252\315o\345\234\216\225\031Zi\216\232c\243e(JQ\035.\316)\353\037\024\340\224\360\225\"\255L\251S\"\324\310*d\0252\212\231\005L\242\245QR\250\251TT\312*U\0252T\310*U\0252\212\2325\251\321jt\0252\212\225E<\np\030\245\244#4\332i\024\323\326\243=j7\025\023S\030SZ\232i\224\021\232B)1E\000f\224\n\247\"\340UGZ\205\305A\"\023U\336\017\230\344Uy \374\252\224\260\340\232\254\351P<U\021J:\360EF\351\201\323\"\240{p\334\212\205\243 \363I\345\321\345\322\210\351\336](\216\236#\245\021\323\304t\365J\225R\245D\251UjTZ\231V\246E\251\224T\252*U\025*\255J\242\246QR\250\251\224T\252*t\025:\n\235\005L\202\245QR\255<\np\024\270\246\32251\2150\365\246\036\265\033\n\211\251\207\221M\246\021\212B)(\355\232LP\006(\245\0035Zd\252\255\0375\023FOja\214\n\2511\332j\006\301<\325y\241\3108\351T\036<\032\210\307\232\215\242\250Z:\210\202\246\220\306\033\221\326\220\305\221\310\250Z\035\247\216\224\010\363J#\247\010\351\302:Q\035/\227N\021\323\326:\225c\251\026:\221R\245T\251\025jeZ\225EL\253R(\251TT\252*U\0252\212\225EL\213S\240\251\320T\312*e\025*\323\307J\222\234:QH\302\230\324\306\246\2651\2051\273\324ML=i\244SOJm\030\243\024\230\244\332i@\305-E>\027\202*\262\343\1775\014\355\266B*\234\254s\203P<d\234\236\224\326\2140\342\253\272\3558\252\323C\337\025\t\214To\035@\321\324O\0205\t\214\255\000\236\204S\214\001\227#\025\030\213\006\234#\245\t\201\322\224GN\362\351|\272p\216\236#\251\026:\221c\342\236\251R,u\"\245H\253R\252\324\252\265\"\255H\253R(\251\224T\250*d\0252\212\231\005L\202\246Z\231;T\213\322\244\035)\364\341\322\212BsLja\353Mn\264\225\033TL)\215M=)\235i6\320E\030\300\244\242\212*\'\234J\010a\317\255Ub\001\250e\303\034\324O\020cP\274d\214TY\301 \212\211\343\334sQ\310\234b\252\264x5\031\2174\326\267\357Lkn:T/\001\035\252\026\203\2769\246\204+J#\245\021\322\204\305;\313\247\010\3704\242:p\212\236\261\324\213\036\010\247\210\351\302:z\245<%<-H\253R*\324\252)\340T\212*U\025*\n\231EL\265*\324\311S/j\225{T\213R\016\224\340sJ\016(\'4SOZa\353MaIQ\265F\335j3\322\233HG\024\206\212C\322\233E\024\3401U\031B\277\006\243d\005\261A\203\007\332\230\361\014\234t\250\3320\005R\226\022\030\324L6\214\032\211\315@\343&\243\333J\242\236\024SL\001\252\t-q\332\241h=\251\236V;Rm\000\340\323\225\001\342\235\345sO\020\323\226\032\177\225N\021S\204T\361\035/\227N\tN\tO\tO\tR\005\247\205\247\201R(\251\024T\252*U\035*e\025*\366\251\026\246Z\225MH\rH\246\234\r:\212Bi\264\326\353IM#\024\306\035j6\246\021\203M\"\222\232GZJ)6\2126\322\321Y\242L\032\234\025l\034\363J\316\275\315D]H\340\324.s\221\336\241pH\252\322 \034\223\223P\260\007\322\243x\2062\r@W\007\332\215\270\351J3R \251\n\206\352)\257l\030\014\n\256\320\020zT3Zy\234\343\232\214\332\2748=j\304i\271EJ\"\247y>\324\242*p\212\224E\305(\216\227\313\245\362\351BS\202S\302\323\202\323\202\323\300\247\201OZ\225jU\353R)\251T\324\200\324\252jU5\"\232z\232~y\305;4\026\240\234\212J1\232B8\2445\023u\250\330S\010\342\233HFi\270\344\320Fi\264`\322\355\243m.+)\327i\250\344\233oJ\205\246\'\275F%\307zk\316s\326\205\227wz\212g\343\255Uf$\320X\201Q\254\233\233\006\245)\307\024\252\274T\212\270\251\024dT\250\224\343\006\352j\300\001\351R\275\240e\316+=\3410?N*e@Fi\342*p\212\217*\227\313\243\313\243\313\245\362\350\331K\262\227m(\036\224\340\264\240S\300\247\201R/Jx\251\024\324\212i\341\252Ej\225Z\245V\251\024\323\324\343>\246\237\221E\000\321J\006h\3074\323Q5F\303\232a\030\244\243m7\034\323H\305%.\r\004b\214Q\203X\006r\303\255F\3075\0218\357Q4\230\250\231\363I\347`To?\2750I\315J\256\010\250\310\031\310\251\021\216*U^jP\264\365Nj\304kS\252f\236\"\006\244\021\235\270\3075\r\315\272\311\007NEP\205\010;MY\021\323\304T\276]\036]\'\227G\227G\227I\262\223e\033h\333K\266\227\024\3401N\003\024\361\322\234\017\024\360i\301\251\340\363R!\251\224\324\252jU5 4\264\340sK@\0314\3721L=*&\246\021\232a\031\246\340\321\212\010\346\230E\000QE \034\322\327\037\347\340\324\242\\\216\265\033\275Wv\250\313{\324n\370\250\213\344\322\027\332jA&\006i\310\333\252Q\326\245Y01R$\204\232\267\021\311\002\255\252c\265L\213S*f\244T\3004\325\214;m\354j\235\325\247\331\345\004\016)\310\231\024\361\035;\313\2441\323|\272<\272\nSJR\024\244+I\267\332\215\264m\245\003\024\264\341KN\024\341O\006\245J\225MJ\2652\032~i\300\323\207Zu8t\247\001F0\r1\205F\302\243aLjJZi\034\212B)1F9\244\306I\244\035i\340W\003#`\324\221K\221Of\342\240f\346\243&\243sP\223\3159\362@4\302\347\0254\r\221W\023\221HN)c\227\006\256E>0A\346\264!\270\016\006z\325\221\201\3105<G\'\025r8\362)\215\010G\342\213\333\1776>\234\342\250\300\274`\365\0258\216\227\313\246\262SvQ\262\220\2454\2454\2454\255!ZM\264m\024`Q\212)i\303\2459i\313S/J\225jU\251\227\2458\034\032p<\323\307Zx\031\247\001\232x\034\212\rF\303\255F\324\306\024\302)6\321\214PG\"\232\313I\266\220\214Rw\245\002\234\005y\353\232lm\203R\226\250\235\271\250\313Tn\371\246\250\251@\310\"\241t#4\260\266*\342L6\323\032L\346\232\037\232\23679\255\010&\371pj\344r\345z\325\270%!\270\255\213V\022\n\222H\376`EH\361\356\217\221YrE\345O\354jP\271\024\245i\205i6Q\262\220\2454\2450\2457m5\226\233\266\220\217jB\264\224QN\034\212Q\326\236\265*\324\253S\255H:\032p\247\016\225\"\365\251\007Jx\351N\307\"\220\212ku\250\310\250\330S\017ZJ)J\362(+M+I\266\221\223\004S\202\372u\245\003\265y\313\034\323A\245f\300\353Q6ED\362\001\300\246o\315(5:\020he\334\017\2550Fi\300m\024\322i\321\216j\354`b\245\363\025GZ|S\373\325\350\'$\216k^\302\340\253\202kL]\2430\002\257!W\214V~\245\006\302\255Q\240\342\202\271\244\331I\262\227e4\2550\2554\2550\255#/\025\031ZB1L\"\220\364\246\321N\035)\303\265<t\251V\245Z\225jAN\035*E\025\"\324\200S\300\346\236)\010\246\221Q\260\250\330S\010\246\225\245\3058\n1I\2674\005\240\2574\230\307\"\227\255y\226\372i|TfB\307\024\311f\371\261P3\363B\266jP\307\024\326\224\251\251\341\223p\311\251wTls@\0314\346m\213L\027eF3C]\347\025$W&\257\333NA\353Z\226\367eqZ1\026\220o^\325\243ix\337w\322\237}rfP=)\260\260e\030\251\266Q\262\215\224\205i\205i\245i\205i\273)\256\265\021\024\3021M#\024\3021M\"\222\234\006)\313R(\251W\265H\242\245Z\222\236;T\212*E\025*\212z\212v(#\232i\025\033\n\215\205FFi1N\351J\006iq\221F\3320)\254)\240f\235\214W\225\261\346\230NM+\021\032\344\365\252\216j<\323\323\223V\024qQ\310\2775X\210m\\T\230\342\243\3178\247\240\346\222a\225\252n\204\214\323\0009\253P)\310\255\033u\306+N\3353Z\326\254cR\007z\267h\273\230\325\304\215H \365\250\"\006\t\212\236\235\252\362.E;e\033)\nS\nS\n\323\n\322\025\2462\324%qQ\221L\"\230E4\214RQO\002\244Z\221EJ\275\252E\251\007J\221jE\025*\212\225E=E;\034PG&\232Fi\214\265\033-FV\223\024\3401J\243\255.\336(\333\315\030\024\326\024\335\264\240W\223\274\200\232\214\310#\347\251\250d\224\277&\231\2734\303\322\244\210d\325\225\030\243n\346\251\202\340S\3526\030\247\3062)\322/\313U\230\002\244Tk\036MZ\210\005\253\326\352[\234V\245\252\364\255H\323\013\315hX\303\236GZ\272\360\344n\003\245V\270\217r\206\035EX\266;\320U\215\224\233i\n\323\n\324l\264\302\264\205)\214\265\013\255D\313L+Q\221L\"\233\266\224\014S\200\251\024T\213R\250\251\007Jx\251\026\245QS-J\242\236\264\3521\326\232E4\214\324l\264\302)\204b\234\007\024\016\224\240R\201K\212aZM\264m\257\036\334)\030\202*\'=\252<\363N\251#\025:\034\324\243\255K\232*6\344\324\260\364\247K\302\325Q\311\247\005\300\315>>XWA\247B\004C5\240\221\000x\025i\024\221Z\026G\313\255{E\022\344\366\252\3276\376\\\205{\032\202\331|\271\n\032\274\027\"\202\264\322\264\306Z\215\226\230V\220\2551\226\242t\250\236\007\035\252\022)\214\265\031\024\335\264m\247\001\232z\212\225EJ\242\244\002\234\005J\242\245QR(\251V\244\024\360:{Q\212M\264\322)\214\274\324l)\204QE(\024\3403JG\006\232Fi6\321\264\327\211<\2704\213&iKf\233O^qS\240\310\251\024`\324\252i\364\016\264\326\353SD:S\245\344Ur\2704\3420\265-\234E\344\034q]\035\262\355QWc\031\253Q\n\271\022\364\255\033\"VJ\236\3617\000\336\225\237!\304\252\325~1\225\024\342\264\322\224\306Z\215\226\231\266\220\2550\255F\311\221J\007\313\214\3259#\330\346\243e\250\212\323J\322\005\247\005\247\201R(\251PT\200f\234\005H\242\246QR(\251TS\300\247\201F):\322\021\221Lj\215\273\323)\010\244\247S\207J\\Q\212M\264\233Mx3>M>3R\322\205\247\255X\217\265IN\006\234[\024)\346\232\347\rVa\351C6Z\232W\232k\036\325\253\245\333\374\233\210\353Z\321\256*\334*j\364iV\342\031\305]\210maV\331r\274\325\tb\341\275\252\315\243n\214z\324\373i\n\324l\264\302\224\302\224\322\265\033-0\212h\035j\274\313\227\250\231j&ZaZ6\322\205\247\205\247\252\324\212*AO\002\244QR\250\251TT\200S\300\247\201\223I\353KM=j6\025\031\024\302)\010\342\220\np\031\247\201\232P8\244\002\227m\033k\300:\324\212qR\251\310\2513J:\324\250\3250jz\320\374\nj\036z\320\307-So\331\036j8\245\334\365g\250\246F\233\345\301\255\353B\025@\255\010\271\253\221\n\266\010QSA(&\264-\016\363\232\320\333\224\2523\251W>\206\2133\345\310T\326\200\\\322\024\246\024\2462S\nTl\230\250\231j6Zn\332\201\327-Q\262Te)\205)6P\026\236\026\236\026\236\005<\014S\324T\212*U\025*\212\221E<\nv0\r(\024b\243jc\na\024\302)\270\243\006\234\0058\014S\200\342\225Fiv\320V\276{PH\251UjA\305\033\251\340\323\321\363S\251\316*el\014\322;\356\244AO\333Nq\224\252\340l\220U\370\316V\236\253\206\006\264\355[\030\255Xq\214\223R\033\220\274->9\313{\325\270\t\365\342\267t\325\302\214\326\232\200x\250\247\267\310\351T\304GwNE^\201\211\030=jb\224\322\224\302\224\306\217\025\003\255DV\243e\246\025\250\231)\205*2\224\302\224\205)6S\202\323\202\323\302\322\201OQ\232\225EH\242\245QR(\251\000\305.?Jv\334\032B*6\024\306\024\302)\245i\273h\0034\240S\202\323\200\342\234\213N\300\240\255|\376\211\3058\215\264\270\3150\216h\335\316)\312pj\324g5&h\315I\020\357J\347\232z\234\365\246<;\206GZ|Rm\340\325\220\340\212\265k&2\304\363V\305\311=:U\2302\335j\354m\214\n\275l72\217z\350l\206kB>jm\241\305\"\300\013r*W\266P\233\207Zj.E+GQ\262\342\241qP\262Tl\225\033%0\2450\307Lh\3523\0354\307L)M\331J\022\224-;m(Zz\212\225EH\242\245QR(\251\000\245\013\232R\274\322\025\246\021\212\214\212iZiZM\264\005\342\200\276\324\270\247(\247\240\342\237\267\332\202\265\363\310z\220\035\302\230_i\245V\r\326\224\203N\210d\363V\203\005\034S\225x\311\241FMXP\025i\215\326\234\247\232\264\2106\212\n\002zP\320\020\001\025-\272\222\333}j\373.\300\242\254\301&\000\253\320\215\313\270\326\225\222\347\346\255\273V\332\242\257E\'\025j7\030\253\t\203V\305\271\222\022EWHJ\032sG\305A\"sQ2TM\035D\311Q\264t\202*C\027\265F\321\324M\0350\307L)I\345\322yt\241(\333\355@J\221R\244U\251\025jEZ\225V\236\006)q\232V^@\246\221M+L+M\333HV\223e\033(\333F\312P\265*\255;m&\332\371\315M?8\246\236M=F\336i\341\263ON\265/qOg\340\001R#m\247\207\244f\245S\315ZG\371i\352\t51?--\227\315=h\317\215\271\244\200\363Zv\315\270b\264\254\006\027\236\346\265\242j\273\013qV\243j\225f9\255\033+\254\034\036\206\254\313\026\017\037QU\317\'\030\250\331*2\225\033F}*&\216\233\345sN\020{S\036,T\016\200\n\201\261Q1\024\334R\354\243e\'\227I\345\322\210\351\341*EJ\220%H\251R\254t\355\277\235\033I\024\245~o\302\232\353M\331\3054\2557m\005h\331I\262\220\255\001)v\363R*\323\366\322m\257\233\026\235OAO&\220\003\232\235\006\005\014\370\351\326\225\0079\247\027\346\224IR\251\310\247\003\315M\023\325\204l\032\225\210\333Kb\333_5ry~Z\222\335\270\255\033R\003\036}\253V\325\261\212\323\205\352\334rU\210\237\236M;v\306\2536\363\374\303\025\277\001\017\022\236\365\034\310\025\307\024\307\003m0C\222OjkG\315F\321\3236\200y\245<\375\321\232\212H$<\355\2527\010\331\301\342\230\232t\223\014\203\3051\364\231\201\340\325i \226\023\3104\325\233\261\251Q\201\251\225sK\345P\"\247\210\251\353\035=c\251\026:\223h\003\031\3054t\342\234\240\251\342\215\234\232F^)\233i\nRl\240%\033h+M\331@J6sR\005\247m\243m|\317\273\002\224rje\004\nURjd\217\326\206ni\252\233\233=\252F`\006*\"\340S|\332\225f\305H\'\025$s\n\262\'\030\353R$\273\270\2530\341MO($dt\251m\333#\351W-$\3435\261m.\000\315^\216N\2075r\t\207\025f93\323\245=\344\300\253\232Z\231\236\2728N\334\016\302\222\351\274\307P(+\322\224\216*& TG.x\251\022\304\260\311\346\254\307i\267\031\025bHQ\2418\034\212\307\222\301\245|\355\340V\215\265\210\362\361\322\253\334\332\2721\302\325\t`\3638+U\344\322C\256@\254\331\354d\266bG\"\210f\347\007\255]A\270T\242\032w\225\212Q\0258E\212pLPS4\001\212P)\312\201\263M)M\333AZn\332\021pM\033sAJiZ\002P\023\232\220-.\337j6W\314-\327\0254I\232\234\250\002\223xZ\004\204\323\206\010\346\221\246\n0*\007\233\236\265\021\230g\255 \224f\223\355\031<T\251.j\324\022.pj\304n7\232\271\tSV\221px\253(\300\214\032@\336PoJ\263b\304\214\366\025\257\023\215\240\325\310e\311\353V\321\370\353V\341\227\003\255Jd\335Z\272$\201e\301=k\246\2120\303\216j\031\007\225)\004S\203\2023L\222`:Sc\204\314rzU\273{\022\354\000\031\255\253}8*\r\303\232\230\331F\027\346\034TMom\310\310\037\215R\271x\243\371W\004U\t.\374\263\221OK\246\237\000\016=ju\263I\006p2i\037M\332\271^}\252\215\316\227\346\203\362\326-\316\214\310\304\205\250c\215\3428\"\256\304\003U\201\016iD\030\2441\323JSJR\004\247\204\240GJS\212O.\232R\223e\021(\336wt\3057h\'\212]\224\322\224\004\245\331O\331F\3126\342\276_+\315M\027\002\234\3474\305\033\217\265<\220\243\002\230\322\343\275@\362T\014\304\346\243-\201\326\230\323\205\030\024\304\270\031\251\243\272R~\360\251\243\270UpwT\342\364K.\330\317=\353J\t\n\016\0338\255\010n2\2314\350.|\327\306y\025=\324\241#Q\236I\253\272L\203\313pj\374Rg\201Vc\233oJ\263\034\345\210\253\361I\201\326\245\023{\325\313I\335\034\021]f\237}\271F\356\265\242\n\317\367\2274\215l\2528\006\230\232l\222\267\nkV\317Ge\003w\025\247\035\240\204\002\000\000w5\025\336\240\020mN\276\265\2355\363\270\"\250\3113\214\234\326u\303\310\315\234\324E\333\275\\\264\271\331\216\005_\032\222\241\000\200j\324wbl\005o\300\326\242B\0360J\216j\t4\205\220\034\n\312\276\320J\344\205\254\231,\036\334\344\016*XpG\275Lc\030\246\030\252&\216\232c\244\021\323\266b\224&iJqM\331L)@\216\232\023\004\320\261\322\224\246\024\243m(Jv\321F\005!\025\363\031\207\024\365\2174\331x\030\025\032\374\253P\273\223P\273\036\325\021c\236j\t\256\226>:\232\250n\313\237jx|\255@\344\344\342\205\030\251S>\2654Nbp\312y\025\253mx_\007<\367\025|\336\355!jM:|\335\362x5\241\2527\357\"\301\253\266Rl\003\007\255^\212@\016j\302M\353S\305>\326\253Ix\007\031\253\226\357\346s\232\327\266p\2523Z\366\027#x\346\273\0355\342h\301\343>\365\246\202\'a\362\256E[Y\341\204e\312\375\0054\352Q\020|\244\371\252\255\305\343\260\3015\234\312X\365\246\224\305D\321g<Ui`\252\217\t&\232\250T\324\241r2GJ\236\027\332F\0075\273\247\335\235\241X\234V\314\005X\214sWR\331e\0048\353To|>\245K \310\256_Q\322^\331\213\250\342\252\304\341\270=jM\231\246\264u\031\216\201\035.\312_/\024\206>)\276_4\215\036)\002qQ\264y4\340\230\024\326\030\250\330\200i\245\205\033\351wf\223\'\322\227k\036\325\363l\240b\243-\306\000\250\235\017z\206V\300\305Vy\002\216j\263\334zUi\256\t\035j\204\317U\314\2705$w&\245\3633\315(l\324\253 \024\341-M\014\373\016{\326\204R\007\217,y\246\245\323C e=+n\336\344\3370s\321Ei\371\236\\(\300\365\353SAu\2209\253q\317O3\342\226+\222\322\201\232\354\264\255-\347\263\363T\344\016\265\"\304\352\3705\241lV!\223\232\331\262\324\037\205L\327Eg\024\322\000\314H\025tG\014|\312\347\351K\366\204l\354 \n\211\233q\353I\260\nP\271\245(*6\2105B\366\243\322\243\373(\364\251c\264\004t\247\013\002\016@\253\021\304\312\000\305l\351\247n3\326\267 a\273\236*\342\251\034\365\025CP\323\222\355Xm\003\"\270-^\301\264\373\202@\3434\226\354%\\\324\206<\323LT\202:p\210\nk\'\"\225\243\342\231\262\230\313\2126\214S\n\014\324R8QU\036R\307\013\315=-d\222\237\366\006\035i>\317\315O\035\241\307Jx\265\365\246\233r\005|\316\321\212\215\200^\325^g\252s>\321\223Y\322\310X\325w5ZF5VSU\230\322\006\305M\034\270\247\371\274\323\204\264\345\222\247Ij\3147\007\033GS\322\231qr\321\235\204u\256\257D\001\355P\251\346\256_I\265\021?\032-_ V\234.\000\246\31575sO\204I\2065\330\351:\240\266\267\362\331\210^\340T\217\253!\223(\270\255->\361g\341\324\021\353]F\227\035\267Ta\307^j\375\316\261\014\021\354\214\344\373Vg\366\213J\371,M]\202`\303\255]\210\347\275K\234\n\024\323\217\326\200i\335z\322\210\203T\221\305\212\230.\323S \007\265Y\210\205#\265li\350e g\212\336\026\270^\230\342\241\226\000\007\245r\376#\323>\320\204\205\344W\031\3455\224\270\376\032\277\024\211*\360y\240\2504\004\002\232\330\246\344\021\357Mi\024\016\265\003\316\253\236j\273\334\022x\006\232f\177\356\232\211\345\224\364\024\211m,\315\222\016+B\323O\003\005\205^\020\254t\331\006z\n\200[\344\364\251\226\026\003\245#@i<\203_-\025\342\240\220UYx\254\331\330\261>\225RN*\273\363U\344\342\252\3103P0\246\021\203FiC\032]\364\345\222\245I*Xn<\271\001\253\027S\tP7|\327Q\240\312>\314\006{U\253\213\324-\264\200H\247\301>G\025q.\n\367\246\033\215\362\343\275lZM\344 \2558%i\007\025z\312\331\356&\013\320w5\270dKX\374\2449>\264\370/$\214aX\214\325\250\356\031\210\311\253\326\362t\346\264\355\346\3069\255\030n*\322\315\221N\363E/\231\357NI9\251\203\003SGS\201\212z(52&\rH\020\365\253\266wf\331\201\315uZu\374w1`\237\233\247\326\246\222\334\222x\2527vbE9\034\327\037\254h\3409\300\256z]2h\3331\346\232\"\272Q\367sM1\3351\341\r\013ev\347\241\247\377\000e]\361\326\236\272\r\303\237\230\232\267o\240\017\342\353W\323\303\252\313\220\234\nsh*\247i\217\255B\372\032/\360\212g\330\202p\026\232m\034\366\3058Z\0009\315\r\002\212a\210\016qM\300\024\215\322\243\'5\362\243\325y\016*\224\347\203Y\322UIj\006\250$\031\252\356\265\013%D\313L\305\030\246\265\000\342\244V\247\023S#\251\210\344\234\326\326\213\250|\230\317J\236{\255\322u\3475\245e.TU\326\223\345\252\361\317\211\253~\306_0\014\212\337\264\001@\025\250\227^Z\355N\017sOG$\344\232\263\023\325\270\246\003\025z\t\272sZ\020\317Wa\230\325\245\234\201S$\371\251Vjz\314*d\223=\352\324-\357Vs\357OG\253H\331\025:6iYy\255m\036q\014\212I\342\272\264\221&\213*Fj\264\213T\256\264\370\356:\216j\224\232*\001\367A\252si\213\0318\216\232\226q\201\314u\033\300\021\301U\375*\322\303\347(\312\014\323\326\300g\240\240\330\252s\212Q\"\304\245GCUn/\001#\004\234T\002\361H;\207\025\004\2270+q\326\2315\312\0206\212\256d\310\342\253I\'5\003K\357B\266h-\316)\207\255|\256\353UeZ\316\272nqT%<UG\031\250\331x\250Yj&J\215\243\250\232:\214\307M)Q\262\323J\322\241\247\343\212\257uq\366x\313\003\310\246\370wQy%b[\255t>c<\2035\261g.\024U\2636EWi6\276k\243\322g\037gS[\326\227\001\272V\214\017\315[F\351R\211{\n\261\013\223Wa\223\004V\214\023\014u\253\221\335*\325\210\356\301\251V~z\323\305\307\275(\2719\353Va\271\367\253\261\\t\346\255%\317\275J\223d\365\253p\315V\342}\325a\006\352RZ&\004\036*\375\256\271\344\220\273\215n\331\352Q\335(\317\006\256m\004dt5\013\361Q\260\007\265F\366\341\207J\253%\253\026\3501SG\010A\323\232\227`\025V\356\345\023+\322\262\'\221\233$0\366\346\263nD\301\263\234\325+\206p1\272\240F#\251\251D\345i\317p\n\361Ud\227\320\324&Jr\315\212x\223u\005\270\257\227\034U+\211\000\004\n\313\237\223U$Z\205\222\243h\352\'\216\230c\250\232<TL\265\023/4\306\025\023\212\215\2052\236\033\212\305\327\256vB\300T\236\014\204\312\373\230q]s\361>*\375\273`\n\266\017\025\014\355\212\335\321\344\006\325k\242\264\235c\\w5~\t\363WR_z\261\021\004\362j\354S,G\221\232y\270\334\331Q\201R\307rj\344S3U\250\345#\255YI\375\352E\227&\244Y*x\245\305\\\216j\235\'\307z\263\035\300\253pO\236\365\245n\371\305hD\303\326\222v\317J\241(*\331\006\257i\232\237\225 \004\327ogv\223[+g4\255\206\350j\026\034\322\006\305\034R\034\016j&\270S\307\245d\352E\230\022\275+\"Y\0368\316EV[\206c\317\024\331@|\234\346\242\020\361\232\212D\305@\306\242sQ3R\006\241f\332i\3170\257\230n$\'\201\322\263\3465Q\306{TL\225\021Jc%Dc\315>;A $\234\001U\'\214\0068\351U\231j\007\025\023\365\250\030\363Q\261\31574\036\225\201\255!\222@+\240\360\335\260\264\264\334:\342\266\027;\301=j\344-V\343$\212{\303\274U\373\005x\225\177\273ZQ\\\025|\347\212\324\265\273\334G5\255\004\333\252\345\273\000\3375^\371_\356\3475<@\201\310\024\354\220\331\305\\\267\272T\034\324\246\3441\342\244I\252U\270\307zz\334\325\210\356\300\357VR\354\036\206\247K\234\367\253\021\314I\253\220O\267\034\326\265\255\320\332*\354w\031=j\304o\272\243\232\252I\230\306\352\331\360\366\264\312\376[7\313],w\300\236\265+] \004\356\252\346\365\007\\Trj\360\251\3015Fm\\\310HN\225X\3371=y\365\252\3677\217!\0377\002\253\3110e\347\223UYw\036*T\213+\311\305!M\243\257\025V^MU\223\212\211\272T/Q\206\301\244-L/_5\315\315R\225rj1\036A\250Yj\027J\214\2554\2551\211\003\025ZE\252\322\014UY*\263\265B\315Q\023H\006MI\217\226\2615\023\231\306k\240\321\263-\270?\302+dD\276\225<J\007\025n0=jp\350\275M]\267\2342\377\000\262)\223\337,@\214\363V\364\353\242\370\346\272\013Y\360\0075\241\024\345\271\253\326\367\\\325\344\270\367\251|\340GjO3\232\225\037\035\352e\227\024\357?\336\227\316\367\244\373Q\007\255X\206\350\325\373y\311\255+yCU\330\230V\205\264\200b\257G(\315[\216|\016\264\2179&\234@\2251QD\237gl\212\322][\010=iN\250\344}\352\215\265\006\317S\212\211\347.sJ\223\0200*@\374T.\325\036iD\201G\275!\270\'\212kM\305B\362\003U\335\262j3\326\242q\232\201\2704\306jc5|\335\'5\003&i\273q\326\241d\250\232:\211\243\2462\347\034TN\270\025VJ\251-S\224\325G\250XsM\333NU\247\221\362\326F\247\001\373\325\243\341\333\276\221\263\000\243\326\272U*\330\000\203N\311SO\0227\255*\253\271\357V\205\300\2116\203\322\250M3K?^3[\332Q \n\336\202\\b\265\354d\016@\255\035\252\243\212\004\333OZ\232\031s\336\254+z\232\221^\235\346\320f\367\240M\236\365\"\362z\324\3616\r_\206p\275\352\374\027=9\253\360\334U\330nj\365\275\306j\322JMI\346f\247\206J\225\317\031\250\017_j\2250E)\305\002A\322\236\016i\341\270\246\273\003Q\227\024\302\365\013\276\r0\2754\2654\2654\232\211\252\'5\023\n\215\201\305|\350\353MT\000\344\323\035F8\352j\006L\032\215\226\241\221j\006\025\004\246\252Hj\244\325NQU\331sQ\262\3236{S\325i\3413U5\0107!\030\254C\346[\266W5\241\247\353\357\024\237\275\311\000`V\375\236\275\034\307\004\376u\246\227\261\354,\024Uy\265bx\035=\250\216\3540\353\315X\265_1\301\256\202\315v\250\255\010\244\301\255;+\235\254+Un\262\274\232`\233\3465<W\030\3075en3\336\236\'\367\247\211\250\363iD\2305f\007\334z\324\245\360z\324\360\311\232\277\004\265z)\252\314w8\357Wm\256\371\034\326\214W@\367\251\326q\353Vc\234z\324\302p\303\031\246\226\316y\241&\npMK\27053\200x\247\211p)\336nh2qQ\227\250\331\352\'jf\372M\306\200i;PFEV\224\021Q\006\317\006\226\276xd\250\331*2\244Tn\230\025\003\016j\t\020\232\257 \252\322\014\325i\026\252J\265RE\250Y*2\224\233)\313\036jdLT71\206\025B[!&x\252m\247|\335(6o\013dqZ\266^`\213\004\232\225\241b\331\253v\321s\315i[\376\351\201\255\253iC(\"\256F\325n\t0j\352\\p9\346\245Y\263R\244\274\325\230\346\342\237\366\214S\305\317\2758NOzp\232\255\333K\315J\323|\325b\tsW\342\226\254\244\370\251\205\306;\325\230.\262@\315hE+c \361W\241\233\216je\270\332z\361S-\317J\224N\017zR\373\273\363R\3076\325\346\227\355\000\232C-9e\247\371\234R\027\315F\317L-M&\226\202qH\017\255\014qQ\270\334*\253.\032\224t\257\001h\3526\216\243h\361PH\265^D\346\243q\305S\225y\252\356\265^E\252\222\245Ut\250\236:\217e\'\227R\244t\262\020\007\025\\\215\335i\2166\212O+r\206\3052A\270\201\212\2363\264\001\212\227\315\036\224\370\346\346\256\302\373\205iY>\016+V20*\324m\212\235\034T\253 \035\352d\222\246Yp)\014\246\236%\342\244\216l\232\267\037\315\311\253\"E\215i\2136\346\253qK\266\255\307qV\226s\214\323\226b\306\246\216r\216+b\336\364\025\034U\265\273\004S\232\360v\251b\273\317z\267\024\343\326\247\023\347\024\3637\024\007\3179\2452b\205\237\025\"\316\r;\314\246\264\224\303%(\177Zx4\247\2450\360h\335\270b\230[\025\023\220i\233\253\302\332:\215\243\250\235*\274\221\325i\020\364\355PH\225ZH\352\273\245W\221*\254\251U\232:\211\343\246\030\375\251\004t\355\270\250\235\t\246\371x\250\245^)_\210\300\250\025rsV\025sH\313\315*\014U\270\037\006\265-_\245jD\331QR\265\306\316)E\331n\365<sg\034\325\330\233\216\2656\372B\324\340\36542\005<\325\345\223+\305F\362\232X\346\301\253Iq\232\261\024\365v)\362\270\315K\034\373Z\2375\326:U\213+\334\361W\226\350\251\353R\375\243v9\2530M\216j\352\\c\275L\227>\365/\332\3061\232Qw\357K\366\234\3654\323s\351OK\217z\231n=\3503\347\275\002l\324\210\371\251\225\360)\373\270\246\271\250\031\360i\036L\212\204\2774\322\370\353^:\361T/\025B\361Uy#\252\262\307U\336:\256\361\325y#\252\362GU\244\2135\003EP\264\\\323LX\246\230\361M)Hc\246<|UYS\232\211\301<P\211S\242\361C/4\252\265$jKqZV\252x\315j\303\302\212s\214\324c\203V\242\"\256\305&\005L\262S\367R\207\247)\253\260>\0074\371Xb\241\r\212\2269j\314r\325\230\347\305XIw\016\265&\375\3255\261\332\325\240\262dS\322S\232\271\035\306\005L\227\031\357R-\316;\323\376\324\017z\005\326;\322\213\302;\323\205\326OZ\231\'\367\251\026\340\324\213!525L\217\203V\025\370\247\207\240\277\025\004\217\203P\263\346\242\222]\203\232\204\334f\274\335\241\250$\213\025Y\343\252\362G\305V\222*\254\361\325i#\250\036*\257$u]\342\250^,\n\205\242\246\264u\021\216\230\311\212f\332FPEV\2259\250LY4\242<S\300\3050\214\232*X\216\326\310\255;w\034V\214-\221Ov\305D\307&\246\2175f2EN\254je5*\232\221H\251\221\273\322<\331\3434\300\3475*\032\261\031\251\321\215X\211\211\253\010\325</\203V\326^)\313!\006\254\244\274T\311%<\2754\315\266\223\355\006\234&\317z\225$\346\254\307-L\262sV\021\216EZF\342\237\276\254G/\024\246Oz_8`\325w\223&\243g\305W\232^*\233Jk\224x\261U\236<\236\225^h@\307\035j\274\220\325Yb\252\317\025V\222*\202H\252\273\303P<=x\250d\212\2410\324o\027\025\031\213\025\013\307Q\224\250\335y\250^:\217e!ZiZa\024\2305\"\324\320\312T\326\225\254\306\256\277\314\240\323\027\255Y\214\214T\361\214\324\352\231\251\225H\247\205\247\001\315J3\212\214\241\315=V\246E\253\021\212\231jx\233\025aNi\312\374\325\210\244\305Hd\346\255E&EL\r;w\035j6|\323w\342\234\262U\204\222\254F\370>\325r!\273\025r5\310\251\025\361\305+>\005,s{\323\314\276\364\206\\\320\016y\250\345\224c\002\251\311&sU\331\361X\262EU\336.*\007\207+\223\370UY\"\252\262CU\336\032\201\341\252\357\rWxj\007\206\240\222*\205\242\250d\212\243h\370\250\036*\210\307Q\264U\023GQ:`\324l\265\033-4\255&\312xZtk\315\\\205\261W#\237\261\251@\311\251\243SVS\212\261\033U\205aN\363\005804\365lP[\232zsS\250\251\001\002\236$\003\275=e\305?\355\024\236y\315X\212\3435n7\334j\334n\026\247Y3N.\000\250\333\236\224\314\232z\222*Uz\267o&x5\245\010\300\315XW\"\236\030\036i\344\344T,\333\032\234\037wz\221\010\035h\226A\267\212\245$\325]\345\315D\322T\017\035Wxwg\025\013\305\307N\225VH\263U\336\032\256\360\325w\206\240xj\274\220\324\017\rV\222\036zTM\rA$U\023\305\305@\361T-\027\024\303\025D\320\324\022\307\315@\321\340\324n\224\335\224l\243m9EL\202\254F\231\253\366\321dU\237+\002\234\274T\252\334T\201\215<\034\324\252iK\343\275.\343BJA\251\326~)L\371\246\231\211\251#\220\223S\256MH\020\232\263\004x\253i\205\251|\334\016\264\370\3469\353OyH\357H.*dp\324\360i\352jx\233\004V\235\274\370Z\263\274c\2553\316\000\323\332\343\345\342\243V-\311\247\357\330:\324-tsA\271\310\353P\311&j\006\223\232n\352\266\361f\241xq\305Wx\252\273\305U\336\032\201\341\252\362CU\336\032\201\341\252\357\rWxy\250^\036\265]\342\250^*\201\342\250\232*\214\305Q4\\T\022\305\223P<U\004\221\361M\362\350\362\351\014t\212\2252%X\210sZ\020\036\005X\335\221J\027<\323\325j@1NQR\016)\257\222iU\217Jr\212q4\252i\352A\251\220\212\235\010\253(\303\025 }\264\344\270\031\247\371\273\251\361\276\rJ\0334\001\223S\240\251\343\313T\240\034\323\320\342\255G)QS\254\245\252P\007sNR\001\353O2\205\025\033\312\010<\325C\'\314i|\312k?\025\01374\241\253q\342\250^*\201\342\252\317\rB\360\373Uw\206\240\222\032\256\360\373T\017\017Z\201\340\252\257\027&\240x\252\007\212\240x\263P\274U\013G\305F\321qP<~\325\023E\232\202H\252\274\261qQ\371t\010\350\362\251<\252z\307SF\230\253(\330\2517\361B\312U\252\344L\034T\333x\245U\245\344Py\250\230\2254y\230\247\007\315=MH\247\025*\032\260\206\254%HA\"\232\"5*\253\001SF\010\251A\3059^\255E\202*t\030\346\247\214\006\025 \213\006\237\214\ntR`\322\264\270=i>\321\212q\270\014*#7\2750\276M?w\024\233\275\3526\353@8\256\261\342\250^*\201\341\250\036\032\201\341\344\324\017\rWxj\007\202\253\311\025V\225\000\252\317\025@\361Uw\217\025^D\252\356\270\250Yj&\025\037\225\232cCP<\\\364\250%\207\"\2411b\223\313\245\021\322yt\010\352UJ\221R\244\021\322\030\371\251a\312\032\276\230u\025*\245#\256\005Uw*j6rh^\265*\214\324\250\265&\312\2265\253Q \253H\200\n\\\363S\3063R\354\030\245\010\0055\270\242>\265i\033\02529<U\250\201\002\255)\241\372\232\210\034\032d\217\201P\tw\034S\367`S|\317z]\344S\326L\323\267R\023\232h5\377\331"
+byte_png: "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\002\000\000\000\002\000\010\000\000\000\000\321\023\213&\000\000\001\213IDATx^\355\335\313\n\2040\014\005P\321\377\377\344\021q1\013C\231\301\0073Mz\316\362.\004\241\332&\021\234&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200!\3151\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008m\215\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\333\034\003\000\000\000\000\000\262Yb\000\347\230\026\000\000@\022\016\357\000\000\320\2455\006\351\274\357@\321\001\000\360o>\003\202\316)\233\000\250\"\177S\023:\366\212\001\000Y\335?3\035;\t\367\257\007\017\260\020\001\340;\003!\000h\260A\322h*4\"`\010\236~\000\000\000\000\200\252\214\005\001\000\000\000\240\006_{b\r@\035\3467\000\037yM&\342\017\014p\201\342nX68\000\000\200\003e\022\000\000\000\300(\366N\220n\020\000\000\000\000\000\000@u&\303\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\300\317m\204\275\016\017\263vs\375\000\000\000\000IEND\256B`\202"
diff --git a/core/res/geoid_height_map_assets/tile-b.textpb b/core/res/geoid_height_map_assets/tile-b.textpb
index 83d160b..b9b5bfc 100644
--- a/core/res/geoid_height_map_assets/tile-b.textpb
+++ b/core/res/geoid_height_map_assets/tile-b.textpb
@@ -1,3 +1,3 @@
 tile_key: "b"
-byte_jpeg: "\377\330\377\340\000\020JFIF\000\001\002\000\000\001\000\001\000\000\377\333\000C\000\004\003\003\003\003\002\004\003\003\003\004\004\004\004\005\t\006\005\005\005\005\013\010\010\007\t\r\014\016\016\r\014\r\r\017\020\025\022\017\020\024\020\r\r\022\031\022\024\026\026\027\030\027\016\022\032\034\032\027\033\025\027\027\027\377\300\000\013\010\002\000\002\000\001\001\021\000\377\304\000\037\000\000\001\005\001\001\001\001\001\001\000\000\000\000\000\000\000\000\001\002\003\004\005\006\007\010\t\n\013\377\304\000\265\020\000\002\001\003\003\002\004\003\005\005\004\004\000\000\001}\001\002\003\000\004\021\005\022!1A\006\023Qa\007\"q\0242\201\221\241\010#B\261\301\025R\321\360$3br\202\t\n\026\027\030\031\032%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\203\204\205\206\207\210\211\212\222\223\224\225\226\227\230\231\232\242\243\244\245\246\247\250\251\252\262\263\264\265\266\267\270\271\272\302\303\304\305\306\307\310\311\312\322\323\324\325\326\327\330\331\332\341\342\343\344\345\346\347\350\351\352\361\362\363\364\365\366\367\370\371\372\377\332\000\010\001\001\000\000?\000fy\245\006\202sE\024R\346\224\0323\357J\r=Z\236\032\237\272\215\324\340\324n\243v(\335\223O\337\205\300\250\313\323K\323w\321\276\224?\2758=8I\357O\022\373\324\202S\353O\023{\323\274\363\353@\234\372\323\204\376\364\3617\024\34158M\357N\363\250\363\275\351<\336x5<R\347\251\253\005\262)\204\215\270\254\273\3051I\221\320\324K!\"\224\2755\236\243/M\337\315)z7\322\027\244\337H^\205bM[\213\205\247\023M\335C>\007Z\201\256\000\357Q5\310\365\250\232\346\242k\234\036\264\326\273\000T/z\000\252\315xI\353W(\245\315&h\242\2274\240\321Fy\247\003O\rK\272\2245;u.\352Bis\201\3154\2654\2650\265&\3527Q\276\224=/\231N\022{\322\371\336\364y\336\364\3417\2758K\317Z\221X\232\224\023N\016iw\232w\231F\3727\324\261\315\203\326\254\254\331\034\032\014\240u5Z\361\326H\376\225EO\034S\213\361L/L-L\335\315)z7{\322o\244\335Aj\226.Nj\342\364\306i\030\250\352j\027\231W\275S\232\353<\003U\332R{\324fJas\353Q4\234\324M\'\275@\357P\274\230\255\343\322\212L\321\223Fi3\315.isFM\024\271\247\003J\032\2245(j]\324\273\271\241\245\312\201Q\227\246\026\244\335I\272\233\276\215\364\027\244\363(\363=\350\363=\351|\317zp\222\236\262sV\243\220c\232\233\314\024\236o4y\207\326\227}\033\350\337J$\346\245Y\215=\245\312\373\325Ig \021Q\243\344f\234_\212\211\237\007\2554\2757}\033\351wqM\335NV\024\027\311\342\254Dp*_4\001\301\252\323\\\340\340\034\325\'\230\261\316j2\3714\322i\t\305F\315P\273TE\252\'j\205\216k\244\244&\222\212L\322d\322\346\2234\271\243\"\234\017\024f\2274\271\245\335J\032\215\3704\302\324\322\364\302\324\233\251\013\322\026\246\357\244/I\276\220\275\'\231I\346sR\251$g4\355\3705*\334c\275J.\001\357N\363s\336\224K\317Z\220J=i\336e\033\370\244\337O\022S\314\270Z\257+\023\021\"\233\031\371E+5D\315L\337F\356h\335K\272\233\273\232P\324o\346\246\023`To9\307\006\253\226\'\2754\322\023M&\230Z\243f\250]\252\"\325\0235D\306\272|\322Rf\222\212L\321\232J2isFisK\2323K\272\215\334R\026\246\226\250\331\251\245\2517SK\322\027\246\227\246\227\244\337H^\230d\244\363=\352E\237\003\255)\237=\351<\337zp\233\035\351\353p}jD\234\223\326\247Y}\352A/\275<IK\276\234\032\226G\302\342\221[r0\246n\300\3054\275F\317L-I\272\2245.\343@98\245\346\216i\030\361L\315&}\3513M-\3050\265F\315Q\263T.j\"\325\031j\214\232\352h\244\343\232JL\361IE!\353IE&i\300\322\346\214\373\322\216\005&ri\013Tl\325\031jilSwf\220\2650\2754\2750\275\033\351\206Ja\222\232d\243\315\367\243\315\367\247\t}\351D\264\242_z\221&\301\353VRl\212\231d\367\251\004\224\361%8KD\222\360\006ic\224\003J\347\370\205DZ\230Z\233\272\227u\000\323\306M=p)K\014TL\376\224\204\323I\244\315%4\232\214\232\215\232\242cQ9\250\230\361Q\223L&\272\312)\264Sh4\231\244&\233\237z3I\232Ph\317\275.}\350,i\001\3434\205\252&j\214\232c78\024g\002\230\315Q\226\246\027\246\027\246\231=\351\206Ja\223\336\232d\244\363)<\312Q-8KJ%\367\247\t}\352\304S\201\336\254\254\336\365*\312=i\376p\305\002Nz\3224\271jz\311\357R\244\204\241\007\261\2463\214\323I\315\031\245\006\224\037Z~\3768\244\336h\337\232L\322f\220\232N\264\204\323\t\250\230\324lj2j&5\033\032\214\232\214\232\353\350\244\"\222\233E!\353M4\3123\306)3\315\031\2434f\202h\'\024\302j2j6l\n`9\346\220\265F\315Q\227\250\331\3522\364\302\364\302\364\302\364\303%4\311I\346P$\367\247\t)\302J_7\336\224M\216\365*\\\220z\325\244\234\036\365:\313\232x\223\276i<\301\277\255J\222\017Z\225e\000\020)7\321\2734\240\363N\315\000\363N\335I\232p\342\202i3F3HO\024\302j65\033\032\215\215F\306\243cQ\223Q\223L5\330\212C\326\212i\353Hz\322R\036\264\323M=i\246\222\212L\320\247\234\321\236i\t\250\330\324d\323\030\347\212i5\0335F\315Q3TL\325\031j\215\236\243/L/Q\231)\276e!z<\312<\312_6\227\315\245\022\323\226Oz\235&\307z\265\035\307\024\363?\241\247,\271\347\275L\262\032\263\013|\214\177\n7\032z\26585.ri\300\342\22794\341\307Z\\\320M \365\245&\230MFMF\306\230MF\306\242&\230j3L&\243c]\225:\220\212i\244\244\"\232i\017Ja\246\236\264\334\320\0174\215\305\000\341sM\0353\353HM0\232\215\215G\357McQ3TL\325\0235D\315P\263\324L\365\031\177z\215\237\336\243/M/Hd\246\371\224y\224\276g\275/\231K\346{\323\204\225*\311S$\206\246W\311\2531\232\235MN\222`l\251\003sO\006\235\234\323\301\245\316jE\030\353N\315!4\224\271\244&\230M0\232\214\232\214\232\215\2150\323\r0\324mQ\232\354\351GJZB)1M\"\220\212a\246\265Fz\323i\t\246\261\342\227\370@\240\323\rF\306\243\'4\322j&j\211\215D\315P\263T,\325\013\265D\315Q3\324e\251\205\251\245\251\205\2517Ro\367\244\337\357J\036\234\036\236\255R\243T\350\325a\033\232\265\033qVQ\266\215\304\360) b\316[\326\255)\251\001\247\203N\0075*\3603N\315\031\244\317\255.\3523M&\232M0\232\214\232a\250\3154\324f\230\325\033Tf\273JQ\322\226\212LRb\232E4\212cTf\230zSi\214y\305H=i\033\245D\306\242nM4\232\211\215D\306\242f\250Y\252\026j\201\332\241f\367\250\231\252\"\324\302i\205\251\245\251\205\251\273\251\013\032M\306\227u8\032\225ML\206\247J\235\rXF\307SR\202\362q\310Z\264\230U\300\251\225\252E8\247\203\232\221H\024\360\324\273\2517Q\272\215\324\271\244&\232M4\232a\246\032a\246\032a\246\032\214\323\rv\230\245\245\305)\031\244#\212JLsM\"\243aQ\260\250\330S\r1F^\245\2461\250\230\324,\334\324l\325\0235D\315P\263T,\325\0135@\315Q3TLsQ\223\212\215\2150\232\214\2654\2654\265&\3523J\030S\301\364\251\221X\373U\210\323\025eFjd\025b<\016\242\247V\025 l\364\251\224\342\236\032\234\036\236\036\234\036\203%(jP\324\240\323\263Fi\244\346\232M4\323\017Ji\246\236\264\302)\204Tf\230\325\332R\342\226\212(\307\024\334R0\250\310\250\330Tl*6\024\2120sJMF\306\241v\252\354\3315\0335B\315Q3T,\365\013=B\315P\263TL\325\031j\215\232\243f\250\313S\013SKSKQ\237zQ\311\344\323\327\006\246R\242\245W\0252\275L\217S\243\324\352\325 \177z\225X\001O\363)\302Ozx\222\236\036\227}8585<\032p4\354\321\221A4\334\346\220\323M4\323\010\246\232a\025\031\246\032\355h\240u\247b\220\2121\305%!\024\302*2*6\025\023\016\324\323\301\2461\250\230\324\0225@\306\241f\250Y\252\026z\205\236\241g\250Y\352\026\222\241i*&\222\230^\2432S\013\323K\322n\244\334)\014\200P$\356i\342^i\352\374\365\251\225\352ez\235\036\247Y*U\227\260\251\026@;\323\374\352z\311\357O\022T\202Jxzz\265H\032\236\rH\r8\032p4\271\244\'4\264\230\244\"\232E4\212i\025\033TdS\010\256\327\024b\226\212(\"\212i\034\323XTdTdTdsQ5D\306\241sU\230\344\223P\273Uvj\201\336\241g\250Y\352\006z\205\344\250\031\352\026z\211\244\250\332Ja\222\230d\246\031=\351\246`\007&\231\347\026\351J$\247\007\367\247\253T\252\306\246F\251\325\252E\222\245Y\017\255J\262b\236%\367\247\211=\352E\222\244W\367\251C\373\324\212\325*\265J\255R\251\247\203R\003N\006\224S\200\315(\024b\202)\244S\010\246\221Q\221Q\221L\"\273J)qKF)\010\243\034RS\010\2460\250\310\250\237\241\252\347\245D\306\253\310x\252\354p*\273\265Wv\250\035\252\006j\205\332\253\273\361U\331\371\250\031\363Q3\324,\374\323\013\324M\'\275Fd\250\236b;\324[\3119\251\021\373\342\234\030\023O\rR\251\346\245V\367\251Q\327<\324\202^\302\244W\251U\233\031\3058HI\300\247\356\"\236\262\034\324\253)\251\203\234S\326C\232\260\217\221S+T\352\325*\232\225jAO\002\236\005<\np\024\270\366\244\"\232V\232EFV\230V\230E0\212\354@\245\242\212(\2434\332C\326\2434\306\025ZS\203\212\205\215@\346\253\310{Uw<Ui\rUv\252\356\325\013\265B\315\305Vv\342\253;T\014\365\013=B_\232c=D\315P\264\225\03357w\275=X\221R)5*\324\200\323\203sOROJ\224d\016jh\330c$\324\206\\w\247$\242\247\022\206\340\212p\035\326\244_z\235\010\25103R\243U\2245:T\353S-J\242\244\002\244\002\236\005;\024\270\243\024\322\264\322\264\302\264\302\264\302\265\031Z\353\250\242\212)\017JJL\322\023L4\3065RC\227\250^\240sU\244<\325y\033\212\253!\252\256j\273\236j\027j\205\333\214Ui\032\252\273Uwj\201\232\242/\315F\315Q\263\032\211\216i\233\275h\034\236*d\030\034\323\307Z\221zT\310\204\365\247\355\013\316)\276q\007\002\244\014XS\267\221F\362MO\020&\255\"\234\325\264\217\212\223h\306\010\247,|\361RmaNN\265i*\314ua\005N\242\246QR(\251\000\247\201N\013N\305\033i\n\323J\323J\323\n\324l\265\031Z\352h\242\212L\322\023HM&i\244\323I\250\330\325G?1\250\234\325g5ZS\315V\220\325g\252\362Ug\250\034\325w5^F\252\316j\273\232\256\346\241cL&\243f\250\231\2513\232p\3009\251\224\202)\341j\302\021\266\247\217\024\367\\\257\025\\\307\206\311\247\006\n)7\344\324\2503V\341\034\326\2141\344t\253!@\247\005\315=W\006\246T\004`\323\014{Z\247\214qV\022\254\307V\020T\352\265*\255H\026\236\026\234\026\236\026\227m!ZiJiZaZ\214\245FV\272ZB))\r%4\322\023\212JBi\204\324.\330\025Y\217\314j&5^CUe\252\356*\006\250\034UwZ\254\342\253H*\254\202\253=V\220\325v5\023\032\214\232a\006\243\"\215\246\234\001\251PqS\'5 \03052\234T\341\306\332\202W\035\252\014\222i\352*\324\\\325\310\260\rhE \013R\006\313U\270\307\313\315)\340\324\261\221\234T\255\036W4\210\2705:\216j\314b\255\"\324\352\265*\255H\026\244\013O\013O\tK\266\220\245!JiJaJ\215\222\243)[\324SOZCHzSi\r!\246\032a5\004\207\212\257!\371\252\0265\003\232\201\372Uw\250\030T,*\027\025^E\342\252\310\265RAUd\025U\326\240u\250Yy\246\025\246\225\244\t\223R\210p:R\371B\227`\350*E\\S\366\342\235\217\226\243.@\246\362\306\234\027\024\341\326\256@\274U\214\034\361V\241V5r4\307Z\262\033\003\002\236\212X\325\250\3419\253\033>LS6f\245D\253\010\274\325\250\305XE\251\225j@\265\"\245H\022\234\026\227e\033i\245)\245)\205)\214\265\033%l\342\220\365\246\232i\351IM\244=i\206\232\324\306\252\362Ui{TMP\265B\365\003t\250XT\rQ5@\342\252\310\265ZE\252\262\'5]\2435\023\302qP<-\351L\021\036\342\221\2414\337,\251\247\200qJ\026\224/5*\2558\246i|\274\361I\344R\030\202\324m\201NE\311\253\260\251\025q#\006\256\304\200\n\234\017J\231\"-W!\213\030\310\253\212\203\024\241y\247\375\237\214\212z\305\212xL\032\261\032\325\244J\235R\244T\251U)\341)\333)vRl\244\331HR\230R\243d\250\312V\241\024\334SH\246\322\021M=i\247\2554\323\032\243j\201\352\274\203\"\240j\211\252\027\250Z\241j\205\205D\302\240\220a\261U\335r*\273!\317JF\200\025\346\242hT\014\001P\274\031\355PI\t\003\245Wd\301\246\355\366\2441\322l\245\tJ\023\232\221V\244\013N\000R7\025^F\250\261\226\2531 \253H@\253\021\266M\\\214\234U\250\206H\255\030Pb\254*\363\305N\252H\245\010sV\241\036\264\366L\014\342\232\027&\254F\225i\022\246T\251U*@\265 JpJ]\224\233)6R\024\246\024\250\331*2\225|\214\322\021\212a\024\3029\244\"\233M\"\232zTl*6\250\034d\032\205\207\312j\006\034T,*&\025\013\n\205\226\242e\250XUy*0\205\207JC\0368\305F\311M\362\263L1\214\324\022\240\305Rh\362i\2060)\204Rl\247\004\245\tO\tN\333@^i\031x\252\322G\3151S\232\263\032\032\262\2203U\310\255\310\251\266\355\253V\300\223Z\221.\000\253H\271\253\010\265(\2175*\307\212~\323\212EL\265YD\305YE\251\325*EZ\220-<-<%\033(\331HR\220\2450\245F\311Q\262U\254sMaM\"\232E4\212f9\246\221L\"\232EF\302\241aU\334u\025\013\016*&\025\013\n\215\226\242e\342\240qP\260\250|\262\355\212\231cU^\225^A\223Q\371t\2458\250$\\\032\255(\310\252\254\274\324.\r0!\245\331K\266\234\022\237\262\224&i\306>:T.\0105\023.i\026\"Z\256E\017\265]\215@\034\212\260\244c\212\031rj\325\252\340\326\244``U\244P*d\0315i\023\212\220\n\230E\2713B\305\216\265*\246MN\211\212\230-J\253R*T\241)\301(\333F\312M\224\322\264\322\224\306J\211\222\244\"\220\364\246\032B)\270\246\221\3154\212a\024\302*6\250Z\240q\315@\302\242aQ0\250\330T-P\260\250\231sBFG4\327\004\234\n\217\313\311\240\246\005F\302\253\310*\264\211U\3319\250\212Rm\244\331\355N\021\323\266S\3262{T\253\007\265<\3041U\244\207\236\225\030\207\236\2252@\007j\235c\003\265J\"8\251\021\016jm\207\035*X\201\006\257\304\330\025ad\346\256C\223\212\275\022\2265a`=qV#\213\003\004PS\234b\225W\0252\212\225\0275:\245H\026\244\013N\333\355K\262\223e\033)\245)\nTl\225\023%\004qL\"\230E\024\332a\024\204SO\025\021\250\332\241aP\270\250\\TL*&\025\023\n\205\205D\313H\221nz\225\243\003 Ur\234\322m\2468\250Yj\007J\201\326\240d\250\314t\337+\332\227\312\247\010\371\251\226\337=\252d\203\007\245I\345\200*6^i\276V{S\01484\345\213\332\245HI=*\342[dt\251\222\320\223\322\246\373\031\364\245[2;T\202\022;T\261Bw\016+N\010\016\005i[B3\315h\010\227oJ_+\322\221\255\311\\\212\211\243\301\351OU\251\321juZ\221R\244\t\3058!=i\333}\2516Rl\244)M+Le\250\231*\034qM\"\230E6\232i\264\323M&\230j6\025\023\n\205\207\025\013\n\211\205D\302\242aP\262\323\031i\321.)\354\244\324-\035FV\242q\212\204\324N*\022\231\250\332:\217e!JQ\021=\252X\340\346\256\307\010\003\245\014\200\032c\n\204\2474\365N)\032<\232\226(3\332\255$\000v\253\221D1\322\256G\010\035\252u\205Oj\224Z\202:R}\217\332\245\216\317\236\225r86\216\225:\r\247\212\262\233\215N\243\0254k\220j\t#\347\212ENjeJ\235R\245T\247\205\247\005\245\333F\312M\224\205i\205j2\264\306Z\251\212i\024\322)\204SH\246\032i\250\233\351M\243\025\033\200\rB\302\241e\250\231j&Z\211\226\242e\250\233\212\2265\371A\365\251vqQ\272UvNj\027J\213\313\250\236:\217\313\244h\275\252?+\236\224\341\007=*U\200b\245X\200\355R\005\300\246:\324L*=\2715:E\232\231m\362zT\361\301\216\325e-\363\332\254G\001\035\252q\031\307J\232(\3115z8\370\351S\010A=*\304v\343\322\234\360\340p)b\267,\335*\362Z\355^EF\351\206\305M\022\374\265\033\246\r5W\232\231\022\254*\324\241)\301)v\322\355\243m\005i\245i\205i\205j6Z\240E7\024\204S\010\246\021L\"\232V\230\313L\305!\025\033\016*&\025\033\n\214\255F\311\362\346\241e\250\235}\005B`bjq\031\030\247\201Mu\342\2532\363Q:\361P\225\346\220\307\232i\217\024\206:o\225\317Jx\213\002\224&)\341i\016*7\250H\311\245D\346\256E\037\265\\\216\034\366\251\322\016zU\310\240\343\245N \366\247\213\177j\2328\000\355V\226>*x\342\315[H\260:S\274\235\307\245Z\202\330\001\234T\262(\013\212\244\351\226\251\025p\224\205i\2339\251Q*\302\245J\027\212pZ]\264\273h\333HV\232V\232V\243+Q\225\254\322(\3054\212a\024\302)\204Sq\355H\313Q\020sI\216*2*&\025\031ZaJa\217vqP\262SDY8\250\335v\266*`\277&M3o4:\374\265]\223\232a\2174\323\0057\313\305F\353\212\210\212r\250\247\034b\231\212\017\025\021&\214f\234#\315J\220\363\322\255\305\017N*\354q{U\310\240\317j\273\035\277\035*u\203\332\244\020q\322\225a\301\251\322/j\2368\361VU8\251#\217\236\225qW\013QH\271\252\355\035.\314\n\002Q\345\324\212\230\251UjP\264\355\264\273iv\321\266\220\2554\2550\2550\255FV\262qF)\010\246\021L\"\243\"\223\006\220\216*\"9\244#\212a\034\324L\275j2)\244S\031j2\264\335\274\323\014E\244\251\031p\270\246\005\346\224\257\025\003\245F\027\236\224\255\214T\014y\250^\242\3074\034\201H\001cR\210\270\246:\324$`\323\220d\325\250\342\317j\265\034\036\325i!\307j\263\034^\325z\010}\253B8\206:T\342/jp\217\332\236\"\030\351OX\371\251\204u\"%XH\275\252P\274SYj=\224\323\035\036].\316)\3018\251\025x\251\002\323\266\322\355\245\333K\266\232V\232V\232V\243e\250\331k\037\024\204SH\246\221M\"\230V\230E!\025\033\016i1L+Le\250\212\323H\244+L\333M+\315*\'\314N)\254\23757g4\2458\250Y9\250\33103Ud$\032\211\272T\014y\244\035iH\251#\0035+\260\013U]\362j2\244\232\236\030\211=+B(\270\351W#AV\022<\232\271\014#\214\212\275\024C\216*\342GV\222!\216\225\034\253\266\232\204\032\231W\232\235W\212\2268\376j\266\261\374\264\214\224\322\224\233)\241)\002sN\021\363\212_.\225W\025*\250\305.\332v\332]\264m\244+M+L+Q\262\324l\265\211\216i1I\212n)\010\246\025\250\310\244\3054\2554\2554\212\214\255FV\220\245!Jn\312n\316jA\036\027\2450\307I\345\320c\343\245W\2210j\007\373\265RE\346\253\270\250\212\346\223n)v\223NDjq\211\332\220[7qR-\267\265Y\216\034v\253q\307S\204\"\247\204sZ\021\216*\324Ur1V\025\260*)\262\325\002\202\032\256\3042\005YD\253\021\2475eG\0242\212\214\255\005i\212\275iU2jU\213&\245\020g\2651\241\332i\241i\301{\032xZ]\224m\244+M+L+Q\262\324L\265\204G4\204Rb\220\212i\024\322\264\302\264\322\264\205i\245i\205i\205i\2739\243g4\206:iJn\316je\217*8\246\264~\324\303\035&\312\215\341\310\315Q\2322\265M\305@\353\315F\313\201Qc-V\0220EN\221\214\325\225\211q\322\203\032\216\324\004\036\224\355\270\251b<\325\325\2140\247\254EM[\210g\025z$\253\013\201R\001O\330\010\250\2360\017\025$\\\032\270\207\212\235\030f\254\003\305\031\311\245\013\232d\230\007\003\255\"\247\024\364R\rYD\350juN8\244x\301\031\252\357\036\326\351H\027\'\024\340\0108\306i\341r3K\266\220\2550\255F\313Q\262\324L\265\201\267\2326\322\025\246\342\223m!ZiZiOJiJiZiZ\214\255\033)Dt\246>)\236_4\357\'\'\245J\"\343\030\246\264U\033G\201Ql\313S\231\000J\315\271\003&\263\344Z\254\303\232M\231\024\337(\206\351R\250\300\251QI5aT\342\227a4\340\270\245\333\232T\\5i[\256@\253~W\035*H\342 \364\253j0)\3435*\323\306iJ\023@\\\032\231I\305L\204\346\255\253|\264`\223R*\220\264\320\231l\232\225S\212~\312\231\007\0252\212~\316*9#\310\250<\262\r9W\007\353Rl\347\353K\262\232V\243+Q\225\250\331j&Z\347\361I\212B)1F\332n\332\n\323J\323J\323J\323\n\322l\245\tN\021\322\371t\323\025L\221a9\035i\302:kDOj\211\341\366\246yX\250g\000-d\3162\306\251\310\265\001\217&\234\261\322\262qQ\343\006\246L\n\260\244S\270\246\023\223OPML\221\222G\025\245m\021\002\257\254|T\252\200T\201i\301y\251R<\325\210\341\317j{F\024Tb<\232\225!>\225am\217\245L\260\221\332\245Xy\351S,9RMDS\006\236\242\244\331OE\251\321j]\237-4\245G\345rx\246\224\305I\260l\006\202\224\306Z\214\255F\313Q2\324,\265\317\201\232B\264\205i1F(\333HE&\332iZaZM\224l\247\010\371\247\004\247yt\253\026Z\246\020\322\3714\276P\250\244@*\234\244\016\225Br[5FH\3175Y\342>\224\317+\332\232W\006\220\256EG\263\232\221b5\"\304jC\031\3059!$\363V\222\337\212\261\034 \032\273\032\200*\302\324\203\232\225W5*\307\315Y\216>*\302\256\005#\246i\360\301\232\264\260\200zU\270\241\005zS\314 \036\224\205\000\246\223\306\321L\330M8&)\340S\224T\361\212\230\201\214SvR\204\310\243\312\366\2451b/\306\230V\230V\243e\250\231j\026Z\211\205s\252\275iv\323J\323\033\212i4d\322a\275)\t\"\2200&\234\0274\276]8%8G\3058GN\021\324\251\027\031\305L\261q\322\231 \333U\332J\255#\223U]KT\r\0175\023C\355U\236\036zTf/Z\257,X5\032\246E\036Q\317J\221W\035EL\212\t\351S\210\301\024\005\njtaS\'&\247U52\n\235\0275j4\342\246U\251\320T\200T\201s\332\247\215j\312\246j\334I\307JVZ\215\227\212\257\267.H\251\024qK\266\225V\237\264\324\211\305H94\375\274S\221j@\234S\214\177.*\273\246\030\212\214\255F\313P\262\324L*\026Z\347\302\361AZ\215\2054D\315\332\245Kbz\212\220[\250\2450\247LTF\321I\3105Zks\033dR\'\241\253\010\234T\236^{R\210\215<GN\021sS\254T\362\201ES\230d\325VJ\257(\010\t\252\236o4\241\201\353C(\"\253\274c4\303\026{T\023A\362\236*\252\246\033\025a`\005zP`\364\024,$\036\225(R\005!Bi\311\031\315Z\2123\351V\2250*U^j\314kV\221x\251\225*u\216\245\021\324\211\035XH\252\302G\315[\2158\241\327\232\211\327\212\256\024\006\247m\346\227\024\345\024\360\264\273jH\327-S\025\002\225EM\032\2268\251\0310*\t\020\036{\325vZ\211\226\241e\250\231j\026\025\317Q\214\322\254\034\345\252p\021F\000\245\332\314x\034R\025\n\271&\243$Sr\000\353H@\220`\324F\327\234\212t@\347\004r*\312\245H\251K\345\343\245\"\237\336\343\035*\322/\025\034\302\251\272\022j\tp\242\263\346\313f\251\224 \321\234R\027\"\241y\r\021\315\316*\313F$L\372\325Co\206\351R\004 R\252\344\324\342\000GJcC\216\324,\\\364\251\343\204zU\225\210\001N\331\315J\221f\254\307\025[H\270\251\0250j\312&EL\022\235\214T\321\325\204\034\325\310\300\333L\221y\250\231~^j\271O\232\235\266\227m9E<\nq\034S\342\031\351O\307<\323\200\251cm\255R\261\315F\302\253\272\374\330\250XT,\265\013\n\205\205s\313\037\343S\307\037\255H\261g\236\324\335\2007L\322\273\235\270\252\356\334sP\263\034\322\000Z\246\217\n*P\271\346\232B\357\351\310\251\220df\244\000S\261\305G\n\346s\305]U\371j\031W5ZE\n\244\326l\331,j\273&j\t\022\253\262Tl\274T.\231\250\260T\325\225\224\225\305:3\275\360j\317\223\225\246\010\366\265\\\211AZy\200\036\324\013oj\220A\216\325 \212\225a\251\322<U\210\323\236\225m#\371i\010\301\251\342 \212\233\214Sr7U\250\224\021R}\323S\305\'\025)\301\246>1P\0203@Z\\R\355\366\245\031\247{T\361&\324\244?z\226\214\343\232\23662\014c\245\014y\250\235rs\212\205\327\232\205\226\241qP0\254D\217\332\246\330\000\245\347mFN:T26j\273\234\232\217\034\324\212\006i\314q\315<I\362\214S\224f\247E\251\202\322\225\371j;~%\"\256\250\342\241\230\020\t\254\351\\\223U\235sP\262\324.\225\003%D\351P\262Te3@LS\327\206\315hBw-\022\2469\3056\027;\260kR\024\014\271\251\274\260\005\036Vz\np\200\372S\304\007\322\245X*UUS\315L$P\265ZY\006x\245\212S\232\263\346\344S7\374\325n)HZ\223~O5b>\231\2517\340Rn;j>\364\365\034S\200\346\234\026\224(\247\205\251\024\361Mj^\324\224\344fS\305XD\3343\353H\361\372T/\037\025ZE\252\356*\026\025\226\020\n\033\000Tl\334\323\010\030\252\362\036qP56\236\240\322\271\302\323P\374\265j!\221VPT\230\312\323\271\306;RE\030\363\267U\203\362\256j\031\016\344>\265FH\216s\212\210\3061Q<u\013\245B\310*\007J\256\313\3157e\033(\331V-\316\033\025y\243\336\225_\311*\371\305[\206]\243\0258\233&\254\302\340\365\253>d`Q\346\307CN\270\342\253<\304\236)\201\234\236\264\361\0337Z\231\"\305N\0234\361\016MN\252\000\305<\001\236\265*6:T\301\262)\254\307\245\000T\213\322\234)\340S\361K\212\\Q\212A\311\305(\251\000\253\020\237\227\024\366\002\240q\201T\344\034\232\256\342\240qYg\326\243cP\261\250\331\316:\324\005\263Q\223\223OU\024\360\274S$\031\024@\001\340\325\304]\274\032\235*A\332\226\234\230\r\223Ng\312\221Q\036\225\023\255B\351P\262\324\016\206\241e\346\243e\250\032>j2\224\233h\333NQ\264\361W\240\223\200\rX\362\325\2057\311\247,52\251\003\212\033\177\255 \017\357O\010\306\236\261z\323\200Pi\301\261N\023\021R\307?8\"\247-\221\225\245\334M=sS\2408\251E?niB\323\200\251\024S\302\323\200\247\001K\217j6\322\025\346\225E=\006\346\305I\215\217\305H\033\"\242\223\221T\344\250\036\240z\310v\250]\207\255@\357P\226\3150\323@\346\245^\006i\301\201\246\311\323\002\240G)6\ri!\014\231\315H\254i\341\263N\3158\036)\001\000\340\367\251\004G\251\246I\036:Uv\025\023-B\313P\262\373T,*6Z\214\2557m&\332]\264\36485a%5/\232@\353J\'\247\211\351\353.i\342Oj\220?\035(\363N*=\304\232]\324\240\346\245QR\2432\237j\262\244\036\2252\n\260\202\245U\251\000\245\002\234\026\236\242\236\005<\nxZ6\321M\"\227\034P\207k\323\231\262\331\240H\0055\334Ui\030Uv\250\230V\023\2775\0035@\3074\322qM\243\275H:R\343\034\323O&\253\316\010\031\025%\265\321\306\322j\354r\203S\206\356i\300\203O\024\216\017\336\035E>+\257\340\224s\353R;\'\250\252\304d\323\035y\250Yj\026Z\205\226\242+L+L#\024\230\315\033h\003\232x\315<\014\365\247\005\346\234\026\244Q\212\225A\305H\277v\224\016(\333\315;fi\301*EZ\225W\"\244U \361Vc\351VR\247Q\305H\0058-<-<%8%=V\236\026\235\260R\024\024\322\224\230\342\233\201\236ha\305D\331\025\021j\215\216j6\250\315s,\365\0335GHM%&i\301\251\341\205!<\324\023\034\203U\341\037\275\255$\371qVQ\263R\017j\220\034S\263Q\355\033\263O\330\016\017B)\301N3Mt\004\006\025\023%B\311\355P:\373TL\276\325\031Z\215\226\233\266\214Q\212x\024\365\024\360\rH\250i\341)\341jE\025(A\212B\230\024\241i\341i\341jU\025\"\255J\203\025a*\302T\252*P)\340T\201i\301)\330\305L\";s\212B\234\321\267\212a\024\322\264\302\264\326\025\023T.8\250\215F\324\303\\\2514\302i\224\204\323K\201L2R\253\322\357\245\017\223L\220\361P!\333%]Y\tQVb~*un)\340\361N\rN\034\323\207Jz\212v\334\323\031=\252\026OJ\201\320\372T,\225\013-FV\233\266\223m\030\247\001O\002\236\243\232\260\200T\233(\333\216\364\345\025\"\212x\\\366\243e8-H\026\236\242\245U\251Ujd\025:\212\225\005N\242\244QR\252\324\252\224\2730\300\342\237\271\215!\004v\243\024\3229\340S\n\323J\323\031j\026Z\201\305BEF\325\033W$M4\232Bp*\007\224\016\225\t\2234\322\364\202LS\274\321\353J\262\363\326\234_\"\243|\343\212[I7K\261\217\322\265Tm\025\"\277cR\203OZ\220S\326\244\024\361H\325Ji\325\033\024\315\340\214\220y\244*\032\242t\364\025\tC\232aCM\332iBR\342\200)\353R\253\021R\253f\236)\352*eZ\220-8-(A\332\234\006:\323\302\324\252*@*D\353S(\251\220sV\020T\312\265*\245L\253\212p_\233\245+(+\221MbJ\340\323qHE&)\244Tl\265\023-Wu\250\030T,*3\\\205!\300\025^G\347\002\252\2719\353Q4\235\251\206CI\276\220\261\354i\310\374\363S\253\347\212\224`\255@\312VM\313V\241\273l\205sZ1\374\303\"\246^\005H\255\332\246\025\"\363R->\232\325\223{\362\236\007z\226\333\230\206j\177,\036\224\306\214\342\241h\315Fc\246\224\036\224\233)\n\321\266\227\024\341\305H\265*\232\225qS%J1J:\323\200\247S\200\364\251\026\245Z\221EL\242\246J\235\005Z\215j\302\'\025&\332\224\304\004Y\250\266\361Q\221M\243\006\212i\024\322*&Z\256\353U\335j\006Z\205\2075\310\036\265\034\215\205\252N\374\223U\235\262j#\326\232M3u\033\251\340\324\250\376\265b3\236\364\375\271\355L(T\346\246\216\351\343\030\006\264l\356\322S\206\340\326\232$L3\300\240\371j\247\221\305\n\300\3645(aK\277\212\202i\302\016\274\326l\322\033\211B\257AW!]\250\005N\016)H\343\232c-DS\332\230S\332\230V\220\255&\3326\320\0058\nx\251\024\324\252\3252\265<\032x4\341O\035*A\315<T\313S%N\202\247J\263\031\2531\232\235F\356\22418\301\355Q\236\225\031\353IE&3O\362\211Bj\022*6\250\034T\016*\273\255Wq\\i5Vw\343\025E\337&\242&\230MFZ\230M jpj\225MX\211\271\253\310AZk\340\232a\217540\225;\201\253\3134\201p)\256e+\303\032dW3\3020y\025:jK\234?\025$\232\244\013\031!\3015\234\3273]I\204\004\002z\326\205\265\276\305\347\223V\300\300\245\351\332\224\026\244,\331\351I\237QF\001\351M)\355I\345\322yt\236U/\227I\263\024\270\366\245\000\323\306E8\032\225Z\244^\2652\212\225EH\027\322\236\026\244U\346\245Z\235ML\246\254!\253\010\325:\271\035\r\005\263Q\263S\013sKHi\321\215\315\212\270A\362\260\007j\242\343\004\324L*\027\025]\305@\365]\305p\362\260U&\263\246|\265VcL&\230Ni\206\230i)GZ\225*\304mVR^1\232p\223&\245C\223V\025\206*x\306\357\245M\201\322\232\321\n\255-\250s\322\243\217OR\3315\247\005\262 \030\025gn\321K\364\244\003\232u.)B\217Jp\214g\245;\313\036\224\206!\212o\226\007jM\224\233)\nq\322\232R\223n(\002\234\026\244U\251\320T\310\2652\257\245L\253R\004\315;\313 S\325j@\010\251\026\246F\251\321\352P\324\355\331\2444\303J\0175 \031\024\203(\371\025?\3322\274\365\252\316rMFzTn*\273\212\256\342\253\270\257=\236N*\203\266MDMFM%4\365\246\032LS\200\247\202\005H\215\315J\032\234\244\203VcoZ\260\204n\007\265[\216A\214\n\235XS\211\024\001\232\221\023\275XP\000\342\226\227\031\024\241iqK\266\234\024\323\200\247\201F>\270\244#\330\322m\246\224\245\331Hc\3154\306})6\036\342\224\'\265=R\246E\251\224T\352=\252dZ\235S\326\236\253\371PS\272\322+s\203\326\245\013\334S\205H\246\244V\247\006\346\234\016h4\200\366\251Q\205<\340\366\250\310\346\233M#\212\215\252\027\031\035*\273\n\256\342\274\276Y2j\273\032\214\232a4\224\032i\351H1HM\033\252E5*\265N\246\246Z\235\rXCS\251\251\223\232\235@\333R)\340\np\315<S\300\245\305<\nP\264\360\264\340)\300R\342\224\n6\212k(\354(\010\t\245(\000\244+\3521M+\3528\240 \247\210\352EJ\225\022\247U\365\251\224zT\2038\247n\240\036x\244 \037\255*1\007\006\247\030#\212p\007\245<\nv)Fi\343\221K\030\033\276j1\206\342\237\223\212i4\332CQ\265D\334T\016*\007Z\362Vj\205\232\230M74f\220\232ijn\3523\232\005<\032\221O5b3VR\246\003\270\251Q\210\343\025e2@5a8\02504\365\251E<\nx\024\360)\340S\200\247\001K\212p\024\354RQ\2322)\264\2718\244\335FE\003\320T\2528\251W\334T\243\247Jx\307z~\3527\036\324\241\263N\335J\030w\247\202\017\006\236\244\257CS\243+q\320\324\252)\373i\312\027?0\245\003i8\245\003\212B)3M4\332Bi\246\2435\023\n\205\205x\3435DM4\232n\357zB\324\322\324\205\251\273\275\351A\247\212x\251\026\254F*\302\n\262\225:\255N\240\324\313S\240\251Ui\340T\212*E\031\247\201N\013N\000\212p\247R\340b\222\220\232JL\322n\243\266i3FiA\251\025\210\251RQ\322\245\017\31587\024\241\215;u;4\273\251wS\203\324\210\376\2652\225\"\247W\350\017\347S\251\342\2361\216)@\245\351Hy\025\031\004u\246\344\322u\246\236\264\204Tf\232EF\350\010\257\023cL&\230M4\232i4\334\322QO\002\236\265*\212\225V\254 \251\343Z\262\202\254 \251\320T\312*e\025*\203R(\315H\005=EH\0058\016iizR\320M4\232L\212B\324\205\2513\305\'\030\243\240\240\222\007J\003S\324\346\227$\232\225I\007\223R\006\367\247\006\251\024\323\263Fis\315(4\241\210\251RLT\353/\275L\262\343\277\025:\313\3375*\2704\244\212B\337\225#\020E0\364\244\355Hy\353\371\323H\244\333\336\232G\2751\200\257\014&\232M0\323M4\232i\245\035)\300S\300\251\025jU\025:\n\235\026\254\306\265a\005N\242\246QS \251\224T\252*@*@)\340T\200S\200\243\002\220\323KRn\246\226\244-M\335I\272\215\324\271\245\245\014G\322\221\207p\r9\001\306i\343\030\247\251\035)\343\2558T\212i\331\245\245\031\245\245\006\22784\340\325*\311\305N\222\361\305J$\343 \324\202\\\216iw\322o\243}\031\3474\245\251\245\251\273\361\327\245#\021\216)\205\205xQ4\204\323I\246\023IE8\nx\025\"\212\221V\246E\251\321*\302-XE\251\321jeZ\231V\246QS(\251TT\252*@)\340\014sK\322\234\r\006\230O4\303M\'\232ni\271\2434\231\244\315\0314\241\215<\023\330\323\376ls\315*\000s\221N\343\024\003O\r\315H\rH)\340S\205-\024QJ3N\335NW\"\245Y8\251\004\224\341\'\024\276`\243}/\231K\276\223u4\2654\266)\205\353\303\363IM\246\2321N\002\234\005H\005H\005J\242\246E\253(*t\0252\212\235\005N\202\246QS(\251\225jE\025\"\212\220S\262h\311\244&\232X\322\026\004sM\'\212ni\244\322Q\232i4\231\2434\240\324\212i\373\200\357G9\342\224\003O\035)\364\340j@j@i\300\322\346\2274\352(\244\"\200{S\201\"\224?4\341%;}\'\231\357N\022{\323\267\322y\224\273\363HMF\306\274K4\224\204\322\016\264\352\007Z\221EJ\242\244QR\252\325\204Z\260\213S\242\324\312\2652\255N\202\246QS(\251TT\212*AK\2323Fi3IHqM\"\232A\246\346\220\221A`\005!#\256i(\305(\343\2558\023\332\234:\324\253N\245\024\361\322\235\236)\300\361O\006\236\032\224\032p\351O\035)@\245\333A\025\037z_j1A4\231\305\033\250\017\357N\337H^\220I\315H$\310\244-_\377\331"
-byte_png: "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\002\000\000\000\002\000\010\000\000\000\000\321\023\213&\000\000\001\355IDATx^\355\334\355\n\2020\024\000P\261\367\177\344$\022\214\270\344Wl\272\217s~\004m\2452k\314\273\355\016C\211\306X\000\000\000\000\000\000\000\000\000\000\000\000-\231b\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000p\3343\026\000\000\000\000\260\255\326L\210\343\373%\303\305g8$\000\000\000\000\000\000\000\000\000\000\000\000\260\2307\006\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\371I\376\005\000\000\000\000\000\000\000|XH\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\007\244\331\000\000h_\301c\276\261\340k\243FS,\000\000\000\000\232\'\036\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\300\255$\316\007\000\000\000\000h\337\030\013\000\000\000\000\000\000\000\000\262\260c\r\000\000\000\000\000\000\000\000\000Hi5\203\322j\005\000\000\000\000\000\000\000\220\234\344B\000\000\000\000\000\000\000\000\211H\230\000\000\000\000\000\000\000\360mm\026u\331\346\276V_\n\333\361S\323\242\000\000\000l\330}l\334\375\000\000\000\000@\023J_Oq=q!\000\000\000\000\000\000\200\266\230\007\006\000\000\000\000\000\000\200\036X!\000\000\000\000\235\210A\000\t\365f\232\241w\361\217\001\000\000\000\000\000\000p3\023\331i\324\336\216\217X\000\000\000\000t\307rw\200\376\350\373\001\0008\240\366%\021\000\000\300\037<\010\000\000\000\000$#\324\002\000\000\000\000P\026q[\000\000\310\340\352\\FW\237\217cN\337\227\323_\000j!\000C&;?\255\235j\000\000~2\212\002\000\240\036&\227\000\212\223\271k\316|x\000\240\026qP\020\337\003\220\234\256\026\000\000\000\240[\266\030\364\313\275\007\000\000\000\000\000\000\000\000\000\000\212\363\002\273\027\037\377]\026V#\000\000\000\000IEND\256B`\202"
+byte_jpeg: "\377\330\377\340\000\020JFIF\000\001\002\000\000\001\000\001\000\000\377\333\000C\000\003\002\002\003\002\002\003\003\003\003\004\004\003\004\005\010\005\005\005\005\005\n\007\010\006\010\014\013\r\014\014\013\014\013\r\017\023\020\r\016\022\016\013\014\021\027\021\022\024\024\025\026\025\r\020\030\031\027\025\031\023\025\025\025\377\300\000\013\010\002\000\002\000\001\001\021\000\377\304\000\037\000\000\001\005\001\001\001\001\001\001\000\000\000\000\000\000\000\000\001\002\003\004\005\006\007\010\t\n\013\377\304\000\265\020\000\002\001\003\003\002\004\003\005\005\004\004\000\000\001}\001\002\003\000\004\021\005\022!1A\006\023Qa\007\"q\0242\201\221\241\010#B\261\301\025R\321\360$3br\202\t\n\026\027\030\031\032%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\203\204\205\206\207\210\211\212\222\223\224\225\226\227\230\231\232\242\243\244\245\246\247\250\251\252\262\263\264\265\266\267\270\271\272\302\303\304\305\306\307\310\311\312\322\323\324\325\326\327\330\331\332\341\342\343\344\345\346\347\350\351\352\361\362\363\364\365\366\367\370\371\372\377\332\000\010\001\001\000\000?\000\214\234\032PiI\244\242\212]\324\340irh\rR+T\252\370\247\357\245\337N\017F\372]\370\244\3632jA(U>\265\021\227\232kKL\363}\350\363iD\264\341-H&\305H\263\373\324\253p}jArGz\177\3338\353@\274>\264\361u\357O\0275\"\334\373\323\205\317\275<\\{\320n)>\322j\304\027\033\272\232\264_+Lf\302\220k\027RCn\341\207CU\322rGZq\2234\306\222\2432\232g\231\223A\223\336\21734\206JC%4\312iU\362j\355\270\3322z\324\205\316i\245\351\014\230\025\004\227A{\324\rz1\326\240{\341\353P=\356\017Zcj\000\n\206MI@\353T\344\324\213\036:U\332)wR\023Fh\315(4\340i(\316\r=Z\244W\247o\245\017N\rN\017HZ\200qHd\2464\224\303%7\314\244\337J$\245\363iD\324\3616)~\320i\302\346\224\\g\2758\\g\275L\222\223S+\232x\220\212Q)\247\211\215/\233\357@\226\246\212\343i\353W\022\347#\255)\237\003\223T\365)\026hq\351Yhx\342\235\346qLi3Q\231*=\374\322\231(\3631Hd\244\363)\013\324\266\374\232\321\214\3601J\344\016\246\253\311:\257z\243s\177\331MR{\222{\324M1\365\250\332S\353P<\334\324/7\035j\264\222\346\253<\333{\327LzP:Rn\243u\033\250\3174\273\250\rK\223FiCS\203S\203\322\206\247\007\247\007\305\033\371\245y\376]\265\021\222\243i)\245\363I\276\232^\223\314\243\314\243\315\305\036u\036u\002ozx\237\336\236\263sW\240\230`f\254\t\206)\014\324y\330\245\022\322\371\264y\264\t\271\251\322\344\203\326\245i\367/\275R\236\354\200A\252\361\313\236i\346N*\007\223\006\230d\246\371\234\321\346R\357\342\230^\236\256(i2x\2536\347\0035k\317\013\365\252\2277\273{\363Y\322\335\227<\232\256\322\222i\205\251\245\2527z\257#\324-%A#\325i\0335\330R\023\332\233E!8\244\334h\335F\352]\324dS\203R\206\245\006\227q\245\337NW\2452`\346\243g\250\332Ja\222\223}4\311M/M2SL\224\206ZC-\'\235\212O?\236\265,nZ\244\022\355=jh\356\361\336\247[\300{\323\276\320\017zp\237\236\265*\3161\326\237\346\212<\317zO3\006\236\262\324\276~\0279\252\223\2711\261\250\340o\224S\336N\325\004\222S<\312B\3704\007\245\337M/@z\004\234\325\224\271\300\250\345\273<\340\325G\220\261\353L4\302i\245\2526z\211\336\253\310\365\0035B\357P\273Wg\272\233I\232BsII\272\215\324\204\321\223K\272\2245.\354\320\032\227u.\3727\322\027\246\263\324M%F^\223\314\3054\311M2SL\264\303%\'\231\232i\222\230\322\323|\341\353R\307w\264u\247\233\254\322}\247\336\225n\260z\324\213xA\353S%\336OZ\260\227\007\326\247\023\323\304\331\357K\346S\326Jt\262\341)\221\276\365a\355Q\206\3321Mi*\'\222\2432Ry\224\241\351w\363@bN)\3314\2314\214\307\035j2\331\344\322\026\246\226\246\226\250\331\252\'z\205\336\240\221\252\006z\205\336\242f\256\332\212i\034\322Q\232m\024\323I\2323F\357zUjR\331\245\317\275(8\372Swd\320\315Q3\324L\364\303&)\236fM#IQ\264\224\303%0\313I\346\361Li\2526\232\2433Q\347\373\322\375\242\234.)\302\177zQ?\275J\227\030=j\344W9\025a&\317z\224MR,\324\361=\023\\|\203\232X\'\001\251\322\266~aP4\225\033=3v{\322\356\2406)\353\223R \003\255=\230\001P\274\236\224\302\336\264\322\324\233\251\271\246\263TL\325\013\275B\315P\310\325\0035B\306\243f\256\352\212i\244\246\322\023\2123M&\233\272\202sM\335J\032\227&\215\306\224\271\30547zFz\205\336\242-Q<\230\240\034\nc=D\322Tm%Fe\2464\270\357Q\264\325\031\232\230f\246\371\336\364y\336\364\t\351\342zp\237\024\365\237\336\254\301s\216\365u.}\352d\270\007\275K\366\221\214\n\004\374\322I>H\024\370\345\251\342\234\262\220{S\036Nx\250\313f\220\032p4\340\325 \220\001\201M\363\010\243\314\315&i7SKR\003\232F8\250\231\252\'j\205\332\241f\250]\252\027j\211\215F\306\273\332)\010\246\232i\242\232\324\326\250\315\033\261M\335\315.\341F\356h-C\032\t\300\250\331\252\026j\215\233\002\242\316Ni\031\352\'z\205\244\250\232Z\211\245\367\250\332J\215\245\250\232Za\226\230f\367\2443P&\247\t\351\342ozQ=8\\\220j\304W\304w\253\221]\206\350j\312O\236\364\3617\275\006_\233\255M\034\276\365<s\205\310\365\246\371\2314\273\363J\030\346\235\272\22474\273\250\316i\303\326\224\234\323I\244\344\320N\005F\315Q3T.\325\023\032\211\232\241sP\261\250\330\324Lk\320@\315\007\255%4\214\032i\353IMji\024\306\246\2656\212i<\322\251\311\240\234\232k5F\315Q1\315E#v\246\023\201\212\215\336\241g\250]\352\006z\205\244\250\332\\T--F\322\324M-0\313M2\321\347c\275(\237\336\234\'\243\317\367\245\023\373\323\326z\263\025\311\007\255]\206\363\324\324\306\357\003 \323\222\343y\316jt\233\336\256[I\2703\036\302\215\374\324\210\371\247\207\247n\311\245V\305.sO^\234\323\263HZ\220s\364\245\'\322\230\315Q3TL\325\023\032\211\332\241cQ1\250\230\324lj&5\350T\354R\021\212i\031\246\322\021\212cR\036\225\031\024\3064\334\342\223<\3227\024!\3004\320s\223McQ\261\250\231\261Q\023\316i\214\325\013\265B\355\212\256\357P\273\324\017%@\362\324-%D\362\324FZa\226\232e\246\231\250\363\251D\324\276q\365\245\023T\2135L\223f\254G1\025a$\315Z\205\252\3325Z\206]\203o\2575(|\324\212qO\r\232z\234S\267f\244A\353O\315!jN\264\354\342\232Z\243f\250\331\252&5\023\032\211\315D\324\306\353Q5B\306\242j\364JU4\270\244#\024\3223HF)\204SH\301\2460\305Dz\324f\220\232k\036)G\335\307\255\007\201\212\215\215D\355P\263f\230\306\241w\250]\252\007z\256\357U\335\352\t$\252\357%B\362T,\365\031zazcIM\363)<\312O6\224KN\022\324\211%O\033\325\230\336\255F\365v\007\253\26169=\005$\022\031%f\317\025uMJ\0335*\232p9\342\246\214c\232\2234\026\246\347\326\227u\033\251\245\251\204\324lj&5\033\032\211\216i\215Q5F\325\013w\250\232\275\026\225i\324R\021M\"\232E0\212\215\205B\302\243<f\233Q\271\355R(\357C\360*\0278\250\034\347\212\214\234TN\330\250\035\252\t\036\253\310\365^G\252\362IU\244z\201\236\241g\250\331\252&\177Jazc=3}4\275\001\351CS\225\252dj\261\033U\230\216j\324f\255\306\370\306O\0258\221\345\033W\205\356j\344\n#P\005YV\251\220\323\303f\246V\002\244\022R\357\2442Q\276\215\324\273\251\t\246\223Q\261\250\330\324d\324li\215\326\243c\305D\375\3526\025\023W\243m\245\245\003\024\244f\220\216))\244sLe\250\230TN\265\013\na\342\243\333\271\305M\214S\034\324\016j\273\276*&z\201\336\241w\252\356\365]\332\253\273\325gz\256\355P\273f\242c\212\211\332\242f\250\331\3522\364\322\324\233\3517R\206\031\251\025\252x\3037AV\342\217\034\232\267\030\342\254\306\265j ;\212\266\214\000\251U\352t8\251C\323\326J\220IO\022Q\346\373\322\207\245\017N\rN\335\357F}\351\244\346\230M0\232\215\272SZ\243n\265\033\n\215\205F\302\243a\326\275\026\224\014R\321E\030\246\342\232\302\243aP\270\250XTL1MA\203\232{5B\355U\344j\250\355\223Q;\324\016\365\003\311U\336J\202I*\264\217U\335\352\007z\211\236\241g\250\231\352&\222\242/M-M-I\223J9\357R*\203V#\n*tp*\304r\n\261\034\225f9*\312IS,\225<n\005I\347\001\336\234&\315H&\251\026Zw\233NW\247\207\315=Z\244\rN\335K\232B\324\302i\r0\363L\"\230E1\205F\302\242aQ\265z5\024\243\255.(#4m\244\3051\2051\205B\313Q2\324.\264\3220~\225\0335@\355U\246~*\253\266*\007z\256\362Uy$\252\357%Wy*\274\222Uy%\250\036Z\201\346\250ZZ\214\313Q\264\264\303%4\311I\274R\031\200\240MO[\216jU\233\236\265:KV#\222\254\307%Y\216Z\260\263\342\245I\261\324\324\242\347\322\236\263{\324\2135J\262\324\202Z\221d\251U\352Uj\221Z\244\rN\rN\335HNh\305&)\010\246\025\246\221Q\260\250\330TL*&\025\350\373h\333KE\024\021E4\216j6\025\033-B\302\242e\346\240s\326\241sU\344j\247#e\217\265W\221\352\253\275V\222LUg\222\253\274\225]\345\252\322KU^_z\201\345\315@\362\324M5F\322\324fj\214\315M7 w\250\315\326\343\305 \232\236\262g\275H\257\212\235$\346\254F\365a\036\247Ijt\23352\315\212\220O\357R,\325*MS$\2652\313R\243\324\350\365:=L\255R\253T\212i\340\323\201\3158\014\323\200\243m!Zk\naZ\215\205D\302\242e\250\331k\321h\245\333K\214Q\212\010\315\030\342\233\326\243aQ\260\250\230T2\034f\2521\342\240s\305V\225\260\rSv\353Uez\251#\325Y\036\253\273\325i\036\252\311&\005T\222Nj\264\222\346\240y*\273I\315F\322T/-B\323TR\\m\025X\314X\346\245\216N\234qRy\200\232z\311\216\36527=jt\177z\2369\006z\324\302\340/J\221&\367\253\t!\306E;\3179\300\251\004\204T\2119&\247[\212\235%\3435\"\316sV\343\223\"\254#\325\204z\260\215S\241\251W\265H\265\"\255<-<-.\332\n\323\n\323\031j6Z\211\226\243e\250\231k\320\200\315(\245\242\212)\t\3056\232\302\243aQ\260\252\227\007\031\025U\317\025^C\305S\230\361\212\253)\300\252r\265R\225\352\254\257U\244j\256\357\305U\225\270\252R\275Vy1\232\254\362\324\r%D\362\324/%W\222j\211\2335\036\357zz9\351S!52sS\251\3058IR+\223\322\246B@\311\2530\260<\223R\233\214\016\264\370\347\035j\302\316\030`\324\201zm\251\023\336\255D\302\245\3075<O\322\255\306j\324f\254\245XJ\235\005J\242\246U\247\205\247\201N\333HV\232R\230R\230\311Q2Tl\225\023%w\324QE\024\207\2456\220\232i4\306\250\334\325\033\206\313\325i:Ui\032\251\316\334\212\253+qTfj\247+U9Z\253\310\325]\337\212\251+\3435JW\252\222\265V\221\352\273IP\263\324L\365\003\234\324{\371\346\214\344\325\210\227\003\232\220u\342\245N\225<hZ\245\362\202s\212O\264m8\305H%/O\022\025\243\315-\305X\204\026\305\\\211\017\025~(\211\0258A\214\032r\305\351R\205aRFpj\344\\\325\310j\344b\254\242\324\350\2652\255J\253R\005\247\205\247\355\243e!JaJc%F\311Q2TL\225\333\342\212(\244\316)\254i\t\342\233\232i9\2461\250\234\325\031O\314j\274\206\252\312j\225\301\252r\267\025RZ\251/J\247-U\220\325YZ\252J\325JS\232\253+UY\032\253\271\346\242f\250\235\252\027jfsNP\001\006\254\306\300\212\221P\325\230\200\003\236\265j\020*i\023r\361T\332\022\0335\"\260QM2n5,k\232\275l\274\212\326\266\20788\253\312\233E<&i\352\2305e#\0140j6\204\251\2530\257\025j1\212\273\r[\214U\204Z\235V\245T\251\025j@\224\360\224\357.\220\2450\2451\243\250\331*&\216\242d\256\306\220\212JF\351M\246\223\232BqM\246\261\2461\250%l\n\245!\371\215@\346\252\312z\325)\352\244\265VAUeZ\251*\325YW\025JaT\346\025JZ\247)\252\256\325\003\265B\306\242`j&SI\260\323\300\305O\030\3435b>je]\265b6\305YY\001Z\202y\006*\241r\306\244A\212\267\0078\255\030\006\010\255ky\000Z\230I\270\361W`_\227\232{\014T\261\020MN\360\356\\\322D\205N;U\224Z\271\n\325\330\226\255F\225:%J\251R\252T\253\035<GN\362\351\014t\323\0351\243\250\314u\023GQ4u\324\342\222\232z\32256\231H\324\332a<Tlj\264\315\301\252\223\034\021U\335\263U\3445R^sUd\351U\244\025ZAU\344Z\253*U\031\222\250\314\265FU\252R\255U\221*\273\245FS4\302\224\202-\306\245[n9\247\013qN\021`b\245D\305K\263\034\323\200\302\323\014\244qQ\026/OT\305<\n\275j\225s\004c\025r\3301\305h\303\031\3175u[h\247\240.j\3446\3479\305]\021e1Q\371u4Q\325\230\223\232\275\nU\270\322\254\"T\313\035L\261\324\253\035<GK\345\322\030\351\014t\306\216\243h\352&\216\242h\353\242\3054\214SZ\232zSi\224\215L4\306\250\230\325Y\272\032\2519\340Uv\250\036\253\311Ud\025^AU\234T\016*\264\242\251N\230\317\255R\2313T\246\213\006\252<$\324\022[\222:Ui-\330v\250\204\014{SZ\335\275)\004%y\247\214\221\3158-(Njh\343\315H\321\347\245\036Q\"\232ms\332\217\263\205\250\330c\212X\3275\243l\207\212\277\034[\253F\332 \242\255\252\342\247\216\022\325~\332\333\030\342\264\243\204\001\322\235\263\232x\264\317\"\237\035\276;T\313\026\rZ\205*\354Q\325\224\216\246X\352d\216\245X\351\342:_.\223\313\2441\323Lu\033GQ4u\023G[dS\010\246\221L\246\221L#\024\326\2460\250\336\242z\255/J\2530\310\252\317\322\253\275A\'J\254\342\253\310*\273\212\202A\332\253\3146\232\251*\344U7L\236\224\215i\275sU\336\325@\367\252\362[f\253\313j@\252\217\026\r4\246{SL9\246\371x\247\010\351DU2GR\204\247\005\002\225\206\005U\231\352\261\033\232\255\333\307\322\257G\205\253p\276j\374-\300\253\320\r\304V\255\264#\025q#\305Z\215\t\024\276Y\315\\\266^pzT\315\020\031\342\230\023&\255A\025^\212:\260\221\324\351\035J\261\324\253\035<GK\345\322\030\351\014t\323\0351\243\250^:\211\243\255B3M#\024\306\025\031\034\322\021L\2460\246\032\215\305B\365^A\234\325g\037)\252\316\274Uw\025\003\212\256\353U\335j\007Z\201\305T\236\240\010[\2654\301\267\250\250\336:g\221\236\325\033@=*\275\304 \n\315\222\034\267J\215\241\305FV\233\345\346\234#\247\010\352E\216\237\345\322\0049\245h\362*\224\361sQ\244|\325\270P\325\270\255\331\361W\355\354\310\253a6U\2730K\n\334\267R\024U\330\2235n$\251\204;\252x\341\305I\260\343\245\"E\226\351W\"\213\025n$\253I\035L\261\324\253\035J\261\323\304t\276^h\362\351\246:i\216\232\321\324-\035B\361\325\354sMa\232\214\212iZc-0\2574\302*2)\214\265\023\255Wu\346\252\3100MVa\305@\353P:\324.\265\003\245W\220b\253H*\263E\3466*x\340T^EW\235r\325\017\225\232_+\002\253J\270\252\223\216*\213\2475^U\250Dd\323\374\254R\371t\345\216\244\021\323\204y\247\030p*\t\001Z\201\327u5 %\272U\353{~\234V\234\021\252\343\212\270\230\307\024\216\233\252\335\204xa[\260  U\330\220\001Vc\\\232\271\024|T\301EN\226\373\322\204\266\301\351V\026*\263\024x\253*\225*%N\221\324\253\035<GK\345\322yt\206:C\0351\243\250\236:\205\343\251\231{\323OJa\031\246\221L\"\230\302\230Fi\214\265\023\n\215\305W\220u\252\262\2575]\305Wu\250]j\027\025\003\214Ui\005@\353\232H\3419\315$\240\364\025\017\222X\320a\300\351Q2\342\252\314\271\252r\307U\036:\201\242\246\371x\246\354\311\251\026\032p\213\025\"\303\232\225-\252Sm\305T\236\327&\241\026\307=*h\255=\252\334p\201S\210MI\024g5g\312\342\247\267\005Z\265m\344\300\025m&\344U\373c\270V\214*[\002\256%\251=\252\3240m\035)Z,\034b\225#\333V\021jx\3235e#\251\225*UJ~\312Q\035!\216\223\313\2441\323\014u\033GP<t\025\342\243aL#\232JmFFi\245i\244`\324\rQ8\250$\025ZE\252\362\n\201\305B\342\240\220Uw\025\003\2451!\336\370\253\r\010Q\212\250\321sI\263\025\034\213U\335*\264\221\325ic\252\317\025@\320\346\233\344P \247\254\\\324\351h[\265X\216\323\007\245M\344`Tn\224\303o\277\265F\326\330\355NHjh\355\311=*\3746y\035*\304zy\'\245X\376\315>\224\253\247\021\332\246[b\275\252xm\211n\225\263ijv\212\327\262\265\371\205l%\272\205\024\242\001\351H\326\204\256@\250Z\r\264\364J\265\032U\224J\231#\311\251V:x\214\232w\227G\227M1\322\030\351\215\035F\321\324/\037\265W#\212c\n\214\212i\030\246\036\264\312i\2467z\211\252\'\025\013\212\256\353\326\253\272\324\016\265\013\255A\"\325vJ\211\322\237o\036\0335#\241<\325w\206\241)QJ\270\252\355\326\240\221j\273\307\232\205\342\250\274\252i\213\332\224BOj\232\033R[\245h\301l\000\344S\232 \265\023/\025\003G\315H\221\361\322\221\341\311\351RCk\236\325v+@\017J\320\267\266\030\255\010mW\322\255%\262\2361S\215<2\364\246\377\000f\363\322\245\213M\301\351ZPZl\035*\334K\262\256DKU\225\030\305X\205s\236*\264\320\362p)\253\0175b8\361Vc\212\247H\261R\210\351\302:_.\217.\223\313\244)Q\262TL\225\023%Q \212k\naZ\214\2551\2050\212\215\252\'\250\350\306j)\027\030\252\362-@\351P:T\016\225\004\221\324.\225\003\361SB\231\\\324\336^EE$\\UG\217\232\206X\363U\314U\014\260\324>O=)\257\006{T_g\245\026\2715<v\203\322\247K`;T\353\036\005G\"T\014\265\026\314\232\261\024\031\355S\255\236{U\230m1\332\256GfOj\267\r\251\035\252\332\304EO\014D\265i\303\006W\245N\266\300\366\253P\331\203\216*Y-v\216\005$6\205\333\245i\305a\265A\3052X\366\232\261m\036EE,|\236)\212\234\325\210\343\253Q\307S,t\361\0358%.\312<\272\nS\nS\032:\211\243\250\231+,\214R\021M+Q\262\324l*2)\205j7J\214\245!Z\212E\310\250\035j\027Z\211\222\242x\270&\253\272\324\022\'\265VkfsVV\022\200\n\224-6D\342\251\272sPJ\234Ur\274\322\030\267S\r\276;SL<t\246y\0314\365\267\366\247\254x\251\002Pp*\031*\273)4G\0275~\336\037j\320\212\337=\252\314v\274\364\253\366\366\271\355V\326\323\332\245\026\236\325<6\240\036\225v80*\314Pd\364\253\360\333\340t\251\r\266\352\267ib\006\016*\324\261\204\\\n\316\232<\265I\022ah)\232\210\307\315O\024uj8\352uN)\341)Dt\276].\312B\224\302\224\306J\211\222\242d\254b\264m\246\225\250\331j6Z\215\226\231\267\332\232\313\305B\313\355I\214\212\211\227\232\205\326\241d\250\3313Q\230Kd\n\256\361\021Q\371%\216*9\023\313lT\351\036P\032f\317\232\207O\226\252<|\324M\026\352\214\332g\265\'\221\216\325\034\221\342\240+J\2503R\034\001L\306O\024\215\305B\315I\215\324\253\006jh\355\275\252\375\275\267N+J\013~\234U\370-A\307\025\243\r\237\035*\322Z{T\302\327\332\234\266\330=*\314v\376\325f(0zU\304\217\212\232(\262j\374Q\205Z\216d\316j\233\303K\345`P#\243\311\366\251#\213\025a\022\246T\251\004t\273)Dt\273)\245)\205)\214\225\023%D\311Xei6\322\021Q\260\250\331j&\024\334\032B\274T.\274\323\n\361Le\346\240t\353Q\025\246\225\250\231H\351Q2f\232\023\006\241\222\002\362\n\230\246\325\305F\023\232s&EU\226,TA0i[\030\252\362\021U\344\252\345y\240\360)\000,je\200\343\2452H\361U\334b\2265\311\253\260\301\273\265]\206\323=\252\364V\330\355W!\203\245iZ\333\3628\255h-\370\351V\226\337=\251\302\014v\251\005\276{T\221\303\203\322\254,\025*EV\342\203\275XU\300\246I\036j/\'\232i\207\255\'\223J\"\300\247\254u*\'\0252\245<-.\312v\3126SJSJS\031*&J\205\222\271\362)\010\246\221L#4\306Z\211\226\230V\220\212\211\327\232n\332\215\226\242e\250\2311L+Md\250\366S\014|\322\307\026^\222H\376cQ\230\351L|T\022G\315D\361`f\251\314\304\023U\334\361U\244<\323\027\223O\"\237\n\214\325\207eU\252r\311\223P0,j\305\264\004\232\326\267\203\201\305hC\020\305Z\216\034\325\373{n\231\025\247ol8\255\030\241\351Wb\267\310\250\347\214%6&\007\212\235R\254\242dT\321E\223W\343\207\345\241\242\307ja\216\223\312\246\010\363\232A\037\315N\020\323\274\234\nT\217\025:F\010\247\004\247\004\245\331G\227HR\232R\243d\250\231*\027J\346\312\363HV\232V\232V\232V\243e\250\212\323J\323Y*2\230\355M+Q2\324M\0357\313\2441\324~U4\305\315J\221aI\246\030}\251\276Oz\014<UY\242\301\252\357\323\232\241:rj\254\203\025\003&i\233piH&\237\0325=\241v\246-\233\023\310\251R\310\372U\310-v\342\264!\206\254\254Ej\325\270\371\205j@\006\005_\200t\255\010E[F\300\250n~q\305T@U\253B\001\270U\330\243\253QG\315]\215@\024\256\200\324E)\nb\243U\3114\251\026Z\247X2zT\302\327=\2527\266\330O\2455S\024\365^j@\224\276]/\227M1\323\031*6J\211\322\240u\256d\257\"\220\2557m!ZaZk%F\311L)\212iZiJ\215\223\025\033%3\313\346\223\313\2441dS\014T\323\0275:E\225\244x\275\2523\r7\313\250\245\266\334\017\025\233s\tL\326|\213UdL\232\211\223\002\241+\226\2531C\270U\230\340\000\325\270\355\224\216\224\343n\243\265\"\302)\3731S\301\324V\212B\035i\351\006\323W\355\326\264\255\342\253\261\200*U\025 \217p\250d\204\003R@v\232\321\205\206*\314L3V\324\340Q\273&\224.i\222\341F;\323c\217\214\324\210\2305n8\307\025e\"\343\212$\2040\252\222\301\264\322\004\311\002\234\252Cc\025(L\212<\272C\035F\311Q2TL\225\003\245r\305rh)M+M+HR\232V\231\345\323Lg\265Fc\244)Q\262Te)<\272Q\026i\306\016*?\'\236\224\277f\317j\235-\3601Mx=\252&\207\002\2411d\364\2474@/5\223|\203&\262fLf\251\270\346\233\345\356\024\317\263\363\232\2325\300\251\321I5m\024\342\235\260\232pLu\245\331\221K\032a\253^\311w\001W\305\266{T\320\300A\351W\243R\005J\271\251\322\244V4\343\031jE\217i\253\021\222*\304lA\253\3216V\227\222jTR\0053\313,\3715:G\305I\345b\247\205x\253H\274qO\362\370\250\245\207p\252\246\")\350\270l\232\230G\203\365\2451\323\032:\211\222\242d\250]*\027Z\3456\365\244\333HV\233\266\220\245&\312B\224\322\224\306\216\230R\243d\244\362\251DT\361\r/\223M0s\322\246\212\014.q\311\251\004>\324\326\2035\004\226\307\322\242\026\3705\r\312\355SXw|\261\254\351\222\252<9=)\321\303Nx@\025\026\334\032\236,\n\266\204T\234S\030\346\234\200\232\2368\211\"\265\354\240#\034V\254qqS\244 T\312\202\236#\251\243\2135j+l\324\257\000QQy[\217J\226;cV\222\314\236\325b;v^\325:[\373U\224\267\334\rBb\332\325$kR\371|T\221\245Z\212<\324\336_\313M1\346\2410ri\206,T\302 c\006\203\035F\351Q2TL\225\003\245@\351\\\230\\\232B\224\322\264\233h\333F\332B\264\322\224\322\224\302\224\337.\201\035(\213\006\244\021\323\204T\253\006\342\005X\026\375\251\377\000f\366\245\3738\003\245A4@U\031\210Z\313\272r\331\025\2274D\223T\345\200\372T?g>\224\323\036\323C.EBb\346\244H\rL\220\232\224\302\330\247GnX\363Wb\263\343\245Z\206\327\006\264\340\214(\253iS\016\3254hML\220\363W!\202\255\307\036)%\217u>\336\327q\346\256\245\250\004qW\340\265\004t\251M\250\035\251\014Ai\013\000\n\216\265\t\214\223NX\261R\205\247\242\325\230\205X m\3053\313\3159b\310\243\310\006\224[\3423Q\262Tl\225\023\245@\353P:T\016\265\311*rh)M+Ln)\204\322d\322\022OjBH\355H\034\032v\314\322\210\263\332\234\261sO\020\346\234!\247\210jx\255\370\315N\220SeP\202\252\274\330\252\223I\232\2412\027\252\262[\222j\007\265\366\252s[s\322\2416\376\325Z\342\337i\250V<\320` \364\251cLT\361\240&\255,\000\216\224\253\020SVcaV#\000\232\264\212jx\326\254\306\231\253\260\305\305YH\361VcZ\231V\244X\363V`\217\025v8\363\212\275o\026\005=\343\305D\361\344UB\271s\216\325\"-;m9S4\375\230\251c\371j`sO\013\232|kS\210\262)L_.*\264\221\341\210\250Y*\'J\256\351PH\265]\322\271EJ\nsQ8\305G\344\263\366\342\245\216\310\236\242\247\026*:\212q\265Lb\240}?q\310<UK\2133\021\310\351M\210\347\203V\243\217\"\245\020S\326\002)\353\016i\342\n\262\226\374b\2451l\025B\345rj\213\305UgP\200\223TL\377\0001\245\014\033\255#\306\010\252\262\3023Q\033l\325k\233S\203\305QH\266\266*\322\332\206\035)\032\323\035\251R\330\203\322\254*\2201Mh\311\247G\023U\330!<U\344\217\002\246D\346\256A\035^\2158\253\t\036j\324p\324\313\rK\034<\325\270\240\253q\305W\240\217\002\226D\250$N*\246\315\255O+\212]\271\024\365Z\220%;f*HS-V\n\000)\310\005O\022\2268\251\232,\n\2574[\371\357U\035*\027J\254\351P:T\016\265\311t\245\306\352AjX\202zU\264\215\021q\216iv\263}\321CG\265rMDH\346\231\235\243\2555\200\230`\325v\260 \345i\360\002\016\3229\025q#\315J\261S\274\2209\246\203\373\300\270\253\321G\232\216\341p8\254\371P\223U\246\0021\317Z\312\272%\363Y\315\031\006\214\343\275!\224\216\365^Y\315\021]d\200j\333\302&L\326{\331\355j\231#\332)\313\036\343V\026\327#\2451\355\210\355H\266\374\364\2530\333\017J\270\226\340\016\224\361\035O\034\031\253\220\301\322\257E\007\025:E\203V\342\217\"\254,T\360\273j\3045n 3W\341Q\266\2332T\014\234sU^?\232\224-;\313\247*b\245QO\333\305:\005\334x\251\261\3174\3409\251\241p\244\032\263#f\241u\252\222\246\032\253\310\265]\326\240u\252\322-rI\026z\325\210`\317QS\255\276\343\355M1\005ny\245yv\246\000\002\252\310\374\032\256\362s\3053\226\253\020\200\275z\324\341s\3151\321wt\344T\361.EL\252)\341x\250b@\323\326\224i\200j\031\3239\252rF\024\022k\"\350\226cT\236<\325ib\305Ux\352\026^1U\344\2175\000R\206\256\3059\333\212tG\314|\032\266-\262\264\301\016\326\253\360F\010\251\032\3207jE\261\366\251\226\323oj\225`\247\013nj\314P\343\265[\212.zU\350\241\342\206]\246\254\333\220j\3168\246\222\t\253v\350\010\251\217\312j\324\023T\347\014*)\000\002\253\0203@\\\323\266\322\355\366\245\003\006\235\232\261m\036\0018\245c\363\322\321\234sVa\1774\001\216E+\236qPJ\2719\250$Z\254\353\326\253\310*\254\213\232\346\342\213\247\025`D\002\322\214\225\300\351Q\263\n\202f\315T\221\262j\0223RF\000\247\261\3075*M\362\361NA\272\254\306\206\247\t\305<\247\313P[\014\\\034\326\232\016\265\004\343\000\232\311\236bMR\221wUgLUyc\315Vx\252\t\"\252\357\035B\321f\205\217mH\237+f\265m[z\212Y\342\333\3152\336\\6+f\3361\"\346\254\210\000\355G\221\236\224\345\265>\225\"\333\037J\236;SS\244A\0175edEZ\255q0\317\024\333{\214\032\274\'\312\324f_\232\256\333\334\020*o7q\253Pt\315O\346`S\013\222=\252,\363R(\310\247\201\3158.iB\n\221R\246C\201\212k\2009\240\0369\244\247\306\3463\305ZD\363~oZI!\300\342\253\311\017\0075Nd\252\262-Vu\254E\210(\346\225\200\305D\355\203\305F\303<\325Y\2175U\373\323)\350)\362\034-G\021\371j\354\003 U\310\226\247\301+N\031\306;Sb\200\031\301\253dl\004\324\022\266\365<V\\\320\222O\025\013CPI\rW\2221U\336!U\244\212\252\311\035Fc\243\312\315\036V*\325\237\312\325\250\320\371\211T\215\261G\316+F\326o,\000j\327\332\201\253V\356\017Z\274\035\000\240K\030\245k\224\003\212\2475\326O\025\020\231\333\275=Q\237\255O\024\004U\224\210\232\221m\311\253Q\307\216\rH\024g\255X\215\266\364\253\010\340\212k\276)\2523S%<\n\221E<\np\024\240PA\240\014\361J\242\244\013V\255\230\001\212\232@\rV\225x\254\371\207&\252H\265ZAX\254;\324\022\032\201\315D\362\235\265U\237&\242c\223ND\315J\022\231(\342\233j\240\234V\204I\263\212\265\037^\225(<S\251\321\360\300\366\251\032L\206\025\t\351PH\265ZH\352\273\245V\222:\256\353\315B\351\305V\222\032\204\307\212M\224\004\247\240\332sZV\263d\000j\331\205\\S>\313\216\224\364\2665a\020\245+3\323F\374\324\201\035\252E\267\365\247\205T\247\207\305<\\m\251\241\272\031\301\034U\243&W+K\346\026\247\243\022j\324`\342\246\\\324\2337S\202b\236\005H\253\232\220-H\005<-(_j6SJ\340\346\225V\244A\271\261R\355\362\237\212\230>\341QJx\254\371\207&\252H*\264\225\203#b\253\310\336\365VI*\006|\324ML\306MO\030\300\247\253\206\342\2310\300\300\252\251!\212lv\255\210O\230\200\347\232\231\\\212\220>i\340\323\203qH\030\002A=jE\204\236\275)\222\303\212\252\353\326\240\2211PH\225VD\250\035j\027Z\211\222\230R\223e.\334T\221\235\246\255\307pEX\027\030\024\345\272\247\213\241OY\367T\242Q\351R\254\240\016\224\033\216:TFM\306\227}*\266jd\251\343vC\355W\021\203\036>\265<C5n1\212\260\251R\005\247\005\247\004\251\021j@*EZ\220%.\337j1\212i\\\320\007\024\261\266\331*I\037sf\221e\002\233$\202\251\316\300\346\2529\250\034f\271\211d\346\253H\371\252\316\331\250\311\3057\255\003\255H\274\212p\\\034\323[\223UnW\0035-\215\371_\225\215h\3038cVU\363\326\236\030\032z\232IA\352;T\266\367\340\235\222\014\037Z\232V_QT\\d\237Jd\211\315Vt\252\356\225]\343\250Y*&J\214\256(\306{Q\262\220.\rH\271\025*\344\365\247\0049\247\204\251P\021S\24052t4\252\264l\347\245.\314\323\326<T\312\225:.EI\032\224<U\330:\n\271\030\253(*`\264\360\231\251\004t\341\035H#\247\254u(LS\204`\320b\030\250\314x\244\333\201M\333\223C\017\226\241|\202j\026\222\242s\232\201\352\026\357\\{\311\232\201\336\242\246\222))\t\3059^\244W\024\326<\324\027\' \325\030?\327V\304#f3\336\256\306\371\0252\217J\225N\r?\"\241d\005\263R\030\303\000{\212pBA\244\2220\3000\250\036:\257$~\325ZD\250\031*&J\205\222\231\267\024\273h\333O\013R*\324\212\rJ\221\237J\224GR*\324\250\2652\306\010\2441\001NT\247\252\324\252\225*-N\251\232\2321\203V\343\253Q\324\3503S*\324\252\265*\245<GN\013\212\260\260\222\271\305!\217\006\215\224\302\264\306J\214\2455\205@\365^A\305BzTOQ\265p\354j&5\0319\244\'\024\323 \025\021\233\232U\2274\377\0007\024\tri\2237\025Q\016\311+E&%j\344\022f\255#\324\252\324\360\364\243\223O\007\212\2221\332\235\267\265F\361{Uw\217\322\253I\037\265W\222?j\201\343\305B\311M)M+@Zr\255H\027\025\"/5n%\006\246\362\275)6c\322\236\252EJ\242\244\013\232_+\035)\312\225*\245H\213S\242\324\352\225<k\212\262\202\254F*\302.jeZ\231\022\247H\351\306 \010\251D\204\361\214\nk\016\364\233r)\254\240\236\0050\2450\255D\351U\344Z\257 \252\356*\027\025\023\n\341\031\25264\322qPK8\\\325f\230\2650\313\357H\263b\236\'\315*\334sOi7\n\206N\001\307Z[\031\313K\261\217^\225\267\032\354\0252I\330\365\251\325\252E\251W\212\221\006jU\025\"\212\034\014sT.n\022&\344\324>ha\232c ~j\031#\307AU\232>i\2062i\205\r\002:v\334R\201R-M\033\225\253\013&jA\315=\0275:\'\265J\251O\t\355N\021\323\202\342\244T\251\343Z\231V\245\214sVPT\361\216j\324kV\0213V\022:\235\023\024\375\231#\212s\306\245r8\2461%pzS1\305!\036\324\205i\214\265\033%W\221*\254\251UdZ\201\305B\325\300\323H\342\253O.8\025FW9\353P\264\330\025\021\230\323|\343Hd=\215:9ry\353VR\\\361S\2140\252\262!I\003/Z\277m\2517\n\365\253\t\3362*\312p*dqS)\251\226\245J\224S_\245a\352\243a8\247\330\035\361\014\325\257$\036\234S\036\003\212\256\360\221Q\030i\206 )\276_4\2051F\312P\264\361\305J\246\247CS\245O\035X\\R\216M<\nu=W\035*T\251\226\246E\253\0101S\306*\324b\256B\225r(\352_.\247\362\007\225\273\275C\263\212\211\206)\224\2704\230\246\225\250\331j\027J\253*UI\022\253:\325w\025\347\354y\250\345}\252k:Yy&\251\313&\343P1\346\230\315Q\227\240IO\rS\307&O=j\324-\272\245)\236\325\033E\264\346\254\301\250<\000\000kWO\324\022\340\341\2705\263\0241\270\317\002\235\345\242\203\363t\244F\007\241\251\325\2058\276\005W\236\344F2Mc^\334\375\245\225\027\361\253\266\221\354@1V\324\342\234FED\351P\264^\325\023G\355L)\212i\216\223e&\314R\205\247\001R\257\025*5N\217S\243\324\252\325\"\265=MH\265\"\363R/\025a*\304|\325\230\326\254\307W!5v#VUwt\024\256\314\006\337J\210\364\250[\255%\024\204f\234 ,\244\324\014\270\250\234UiEU\221j\254\213Ud\025\347\214pj\245\324\200\014V\\\262d\232\256Z\243f\250\231\2522\324\320\374\323\325\352dj\267\003\340\212\322\210\202\240\322K\206\250\2149\251\255\255\331\033p\342\265c\274\221\027\003\255#\3133)!\272\324V\367\363[d0\310\253qkh[\014pjw\326`H\311\363\006~\265\217>\251%\353\225\214\034z\325\353\0132\230g\373\306\264\325p1K\322\2241\241\2449\373\274Sw\016\342\202\001\351Lh\251\246\032O&\220\301G\223G\225\212P\264\345\024\361\221R+b\246F\311\251\224\344\212\235\005N\213\212\225S\320T\212\265*.\rN\202\254\306j\314f\255Dj\334OVc\220\251\3104\255&\343Q;\324e\371\240\034\320ib\033\233\025\240\001\021`\016\325\2350\303\032\201\306j\264\253Ud\025ZJ\251 \2576\231\202\2515\223u)$\325\'j\211\232\243-\232\214\324m\322\233J\0175<f\255B\325z)\360)\336v\343SF\333\210\253q\270\002\254\3047\366\253\001\0061M{p{U\033\213\020\347\212\202=\037{rN+b\317NH@\300\255\001\036\301\322\227\267\024c\232p\024\273iB\003NXA\355O\362\007\245\rn1\326\231\344\201Hb\002\232c\2441f\230b\244\333\2121N\013R\242\325\230\326\254\306\265a\023\322\247D\251\226<\232\177\222T{T\210\271\251UH54f\254\306\325f9*u\222\237\276\232Nj3J\247\006\245Q\221H3\033\003V\205\350+\357U%m\314MBzT2.j\244\253U$Z\253\"\327\224\335\315\201\212\312\226L\232\256\315Q1\246\323OZ\215\251\000\315(\030\251\025\200\251\243~j\302\276i\310\304\032\267\013\346\255\306\303p\347\212\277\014\300\014\n\262\214\0174\362i6\206\251\"\217\034\325\324\000\001\212w^\246\215\271\245\tN\n\005;fi\301\r=V\236\026\227o=\351\031i\2733M1\320#\2440\347\2450\302A\351H\"\366\247\010\351\351\0375b4\253\010\265f5\253\021\246j\314qz\324\252\230\351\322\206\213\003+H\255\316\017Z\230\'q\322\236\274T\250\330\251\221\263O\017\203O\r\232\033\2455[\034T\3610\251\016\rD\313\203\3050\323\030qQ\277J\255(\315T\220UiEx\265\314\333\211\025E\332\242cQ\223I\232BqM<\322\001\212B\324\201\352X\332\254#\325\230\333\"\247N9\355Vbj\271\021\253(\307\275N\231j\262\2126\373\324\311\200\270\251\0014\365\355\232\220\014\323\202\323\300\247\005\247\252\323\300\3158-;m(Z<\261Mh\307jE\213u8\304\005&\317Q\212a_^\224\2421OXjU\217\025<q\325\230\343\315XE\305L\271\247\357\300\240\036sH\3007=\351br\247\006\254\014\021\305=G\025*\214S\361\232Q\221O\034\212t(\013\363JWk\234t\251\003\034S\031\251\224\326\250\236\241a\201U\245Z\253\"W\203\310\371\250\035\252&jnE\033\251\245\251\245\251\205\350\316h\025\"\232\225\rZ\211\252\334g5eW\270\251\342\220\216\r\\\213,\001\253q\034\001S\253T\253S-H\242\244QR\250\315=V\236\026\236\026\224-<-8-\024\231\243\"\232z\361K\270\201H_\212L\212U\343\216\242\246A\221S\'\270\251\320\016\302\245_z\2208\003\212]\364\241\363J\037\024\360\340\365\247\251\007\203R!+\364\2531\262\277\035\rL\243\232\224%9\025s\363\016)\300\004\'\035(U\357\212\010\244&\232Ni\204\322\023\212\215\271\250\233\245B\353U\234f\276|\221\352\026j\214\2657u!zazizij\003T\213\315J\265*\n\263\020\253\221\n\267\030\315ZD\351VPb\254Fj\314c5:-J\253R(\305L\2435\"\256)\341M8\002*A\332\235\212v)\r4\232JL\373Ro\244\355\221M\335J\032\234\rH\222\021S\3078\3163S\2111N\017\232psO\r\232pjpj7\342\236\262v\251\242\227\362\253\010CU\224\227\240?\235YC\221\357R\014c\212p\031\245\351H\303\"\242e#\2550\232o^\235i\247\2554\212\215\2522*)#\3348\257\233\335\25265\0314\302i\245\251\205\263I\232)\352*D\251\220g\025:%Z\215j\334KV\342Z\267\030\253Q\255XE\251\321ju\315J\253\232\225V\245U\251TS\300\247\016iq\212\\\320M4\232M\302\220\260\365\246\227\246\223\201G\033}\351\275\006iK`f\200\365\"6i\331$\361S#\021\214\232\225^\244\017\357R+S\367Q\272\235\273\245\001\251\352\344T\321\315\212\264\223\202*\302O\264{U\230\346\3175:J\033\332\202\302\232_\267j\031\262*3\300\244\355HNG?\2350\212iZk-F\312+\346Ri\204\323\t\2461\246\023M\'\212\007Jr\255J\253R\242\324\350\265b5\253Q%[\211*\334kVcZ\262\202\254F*\302-N\213S*\324\252\265\"\255J\253N\013N\330)\247\212ijizizizn\372B\324\007\243u8`\322\207+\3068\244p\007#4\261\203\214\324\252F*D qR)\346\236\265*5I\232ZQ\234\322\322\203J\033\006\244Y*x\347\343\025f9\360\006\rN\263dpjQq\221\203Jd\244\363qG\231AnsJ_\002\230_\024\323\'\277\024\214EF\314+\3462\324\322i\214i\204\342\233E*\255J\253R\252\324\250\225:%Z\212:\267\024uj5\253Q\245Y\215*\302%N\213V\021j\302-L\213R\250\251\002\323\200\3059M+\032\214\236j6\246\022sL-I\232Bi\271\244\335@jr\271\247\2065*\226\306\010\342\210\300bGj~\006\r\nqR+t\251T\324\253\322\244QO\002\235E\024R\214\323\303S\322R8\251\322oz\225f\247\211\251|\341\353K\346\323\274\332\014\224\335\364\322\364\323!\025\033I_4n\244&\232Ni\204\344\321\214\323\200\305=EJ\253\232\225W\025<b\254D\225n%\253Q\255X\215j\314b\255F*\302-X\215jtZ\231V\246QR\250\305?8\243u!4\323!\006\232\322\006\034\365\246\023L\335M&\233Fi\244\323I\243u8\032\221\rL\030\016\364\200\220x\245\031=jE\030\247\216\203\212\225MH\255S+S\301\305(j\\\323\205\004f\226\220\212@{S\303\021N\022\363O\022\323\274\332O7\006\236&\367\247y\224\236m/\233\232B\331\025\023\032\371\2674\204\346\232M%:\224u\251\020T\310*eZ\2365\253Q%Z\215j\324kV\021*\302-Y\215j\312-N\202\254 \251TT\2521N\007\024n\315\005\2517R\023\232i\3054\214\323\0104\334\342\232X\032\013\000)\244\203\3104\224c\024\243\216\264\365$t\247\214\324\313O\247-=M<\021\212z\236*ElT\212\324\241\251\343\245=i\300R\354\240\212\214\365\245\316\r\000PN)7b\223}\002\\w\247\211\251\014\264\202njA6E\014\365\377\331"
+byte_png: "\211PNG\r\n\032\n\000\000\000\rIHDR\000\000\002\000\000\000\002\000\010\000\000\000\000\321\023\213&\000\000\001GIDATx^\355\3359\016\2000\014E\301(\367?\263E\377+\220\034D\310L\371n`9\313\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\300\013f\006\000\000\000\330\234Y\027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\240\213\227\034\000\000\000\200\273*\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000l\2402\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\234\2552\000\000\000\000\000\000\000\000\000\000\000\000<43\000\000\000p\204\206\373\352FJ\000\000\000\000\000\000\200\337h\330\"\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@/\377$\001\000\000\000\000\000\000\000\000\000,\344\260&\000\000\000\000\000\000\000\000\000\000\000_p\001c\233\005\005v\341\233P\000\000\000\000IEND\256B`\202"
diff --git a/core/res/res/anim-watch/rounded_window_enter.xml b/core/res/res/anim-watch/rounded_window_enter.xml
new file mode 100644
index 0000000..b9ec8d6
--- /dev/null
+++ b/core/res/res/anim-watch/rounded_window_enter.xml
@@ -0,0 +1,33 @@
+<?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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+     android:zAdjustment="normal" android:hasRoundedCorners="true" android:shareInterpolator="false"
+     android:detachWallpaper="true">
+    <scale android:fromXScale="0.75" android:toXScale="1.0"
+           android:fromYScale="0.75" android:toYScale="1.0"
+           android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+           android:pivotX="50%p" android:pivotY="50%p"
+           android:interpolator="@interpolator/rounded_window_interpolator"
+           android:duration="250"/>
+    <alpha android:fromAlpha="0.25" android:toAlpha="1.0"
+           android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+           android:duration="150"
+           android:interpolator="@android:interpolator/rounded_window_interpolator"/>
+</set>
diff --git a/core/res/res/anim-watch/rounded_window_exit.xml b/core/res/res/anim-watch/rounded_window_exit.xml
new file mode 100644
index 0000000..757b851
--- /dev/null
+++ b/core/res/res/anim-watch/rounded_window_exit.xml
@@ -0,0 +1,33 @@
+<?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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+     android:zAdjustment="normal" android:hasRoundedCorners="true" android:shareInterpolator="false"
+     android:detachWallpaper="true">
+    <scale android:fromXScale="1.0" android:toXScale="0.75"
+           android:fromYScale="1.0" android:toYScale="0.75"
+           android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+           android:pivotX="50%p" android:pivotY="50%p"
+           android:interpolator="@interpolator/rounded_window_interpolator"
+           android:duration="250"/>
+    <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
+           android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
+           android:duration="250"
+           android:interpolator="@android:interpolator/rounded_window_interpolator"/>
+</set>
diff --git a/core/res/res/color-watch/btn_watch_default_dark.xml b/core/res/res/color-watch/btn_watch_default_dark.xml
index 68b0eb6..333b44b 100644
--- a/core/res/res/color-watch/btn_watch_default_dark.xml
+++ b/core/res/res/color-watch/btn_watch_default_dark.xml
@@ -17,6 +17,6 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_enabled="false"
           android:alpha="?attr/disabledAlpha"
-          android:color="?attr/colorPrimaryDark"/>
-    <item android:color="?attr/colorPrimaryDark"/>
+          android:color="?attr/colorSurface"/>
+    <item android:color="?attr/colorSurface"/>
 </selector>
diff --git a/core/res/res/color-watch/global_actions_container_background.xml b/core/res/res/color-watch/global_actions_container_background.xml
new file mode 100644
index 0000000..efa4d88
--- /dev/null
+++ b/core/res/res/color-watch/global_actions_container_background.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:color="@android:color/black"/>
+</selector>
\ No newline at end of file
diff --git a/core/res/res/color-watch/overview_background.xml b/core/res/res/color-watch/overview_background.xml
new file mode 100644
index 0000000..48ad0e7
--- /dev/null
+++ b/core/res/res/color-watch/overview_background.xml
@@ -0,0 +1,22 @@
+<?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">
+    <!-- customizing to black for watches as this is used as the background for task transitions
+         (and WindowContainer fallback color) and all themes on watches are typically dark for
+         power savings -->
+    <item android:color="@android:color/black"/>
+</selector>
\ No newline at end of file
diff --git a/core/res/res/color-watch/switch_track_watch_default_dark.xml b/core/res/res/color-watch/switch_track_watch_default_dark.xml
index 15bbeda..5af2566 100644
--- a/core/res/res/color-watch/switch_track_watch_default_dark.xml
+++ b/core/res/res/color-watch/switch_track_watch_default_dark.xml
@@ -17,6 +17,6 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_enabled="false"
           android:alpha="?attr/disabledAlpha"
-          android:color="?android:colorPrimaryDark" />
-    <item android:color="?android:colorPrimaryDark" />
+          android:color="?android:colorSurface" />
+    <item android:color="?android:colorSurface" />
 </selector>
diff --git a/core/res/res/drawable-round-watch/progress_indeterminate_horizontal_material.xml b/core/res/res/drawable-round-watch/progress_indeterminate_horizontal_material.xml
new file mode 100644
index 0000000..75d29b6
--- /dev/null
+++ b/core/res/res/drawable-round-watch/progress_indeterminate_horizontal_material.xml
@@ -0,0 +1,1163 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<animation-list
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:aapt="http://schemas.android.com/aapt"
+    android:oneshot="false">
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_01"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_01" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_02"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_02" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_03"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_03" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_04"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_04" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_05"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_05" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_06"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_06" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_07"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_07" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_08"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_08" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_09"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_09" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_10"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_10" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_11"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_11" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_12"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_12" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_13"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_13" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_14"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_14" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_15"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_15" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_16"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_16" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_17"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_17" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_18"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_18" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_19"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_19" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_20"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_20" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_21"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_21" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_22"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_22" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_23"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_23" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_24"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_24" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_25"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_25" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_26"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_26" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_27"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_27" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_28"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_28" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_29"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_29" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_30"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_30" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_31"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_31" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_32"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_32" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_33"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_33" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_34"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_34" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_35"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_35" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_36"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_36" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_37"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_37" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_38"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_38" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_39"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_39" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_40"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_40" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_41"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_41" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_42"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_42" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_43"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_43" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_44"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_44" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_45"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_45" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_46"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_46" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_47"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_47" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_48"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_48" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_49"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_49" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_50"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_50" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_51"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_51" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_52"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_52" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_53"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_53" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_54"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_54" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_55"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_55" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_56"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_56" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_57"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_57" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="16">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_58"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_58" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="17">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_59"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_59" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+    <item android:duration="1017">
+        <aapt:attr name="android:drawable">
+            <vector android:width="64dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="64">
+                <group android:scaleX="0.01" android:scaleY="0.01" android:translateX="32" android:translateY="12">
+                    <path
+                        android:fillAlpha="0.2"
+                        android:fillColor="?attr/colorControlNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_background" />
+                    <path
+                        android:fillAlpha="@dimen/indeterminate_progress_alpha_60"
+                        android:fillColor="?attr/colorProgressBackgroundNormal"
+                        android:fillType="nonZero"
+                        android:pathData="@string/indeterminate_progress_60" />
+                </group>
+            </vector>
+        </aapt:attr>
+    </item>
+
+</animation-list>
diff --git a/core/res/res/drawable-watch/global_actions_item_grey_background_shape.xml b/core/res/res/drawable-watch/global_actions_item_grey_background_shape.xml
index f2df319..3ac9ffba 100644
--- a/core/res/res/drawable-watch/global_actions_item_grey_background_shape.xml
+++ b/core/res/res/drawable-watch/global_actions_item_grey_background_shape.xml
@@ -18,5 +18,5 @@
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
     <corners android:radius="26dp"/>
-    <solid android:color="@color/wear_material_grey_900"/>
+    <solid android:color="?attr/colorSurface"/>
 </shape>
\ No newline at end of file
diff --git a/core/res/res/drawable-watch/global_actions_item_red_background_shape.xml b/core/res/res/drawable-watch/global_actions_item_red_background_shape.xml
index 4f23700..b85e01d 100644
--- a/core/res/res/drawable-watch/global_actions_item_red_background_shape.xml
+++ b/core/res/res/drawable-watch/global_actions_item_red_background_shape.xml
@@ -18,5 +18,5 @@
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
     <corners android:radius="26dp"/>
-    <solid android:color="@color/wear_material_red_mid"/>
+    <solid android:color="?attr/colorError"/>
 </shape>
\ No newline at end of file
diff --git a/core/res/res/drawable-watch/input_method_item_background.xml b/core/res/res/drawable-watch/input_method_item_background.xml
new file mode 100644
index 0000000..1097773
--- /dev/null
+++ b/core/res/res/drawable-watch/input_method_item_background.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:aapt="http://schemas.android.com/aapt"
+        android:width="172dp"
+        android:height="52dp"
+        android:viewportWidth="172"
+        android:viewportHeight="52" >
+
+    <group>
+        <clip-path
+                android:pathData="M26 0H146C160.359 0 172 11.6406 172 26C172 40.3594 160.359 52 146 52H26C11.6406 52 0 40.3594 0 26C0 11.6406 11.6406 0 26 0Z"
+        />
+
+        <path
+                android:pathData="M0 0V52H172V0"
+                android:fillColor="#262523"
+        />
+    </group>
+</vector>
\ No newline at end of file
diff --git a/core/res/res/drawable-watch/input_method_item_background_selected.xml b/core/res/res/drawable-watch/input_method_item_background_selected.xml
new file mode 100644
index 0000000..17a4c2b5
--- /dev/null
+++ b/core/res/res/drawable-watch/input_method_item_background_selected.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:aapt="http://schemas.android.com/aapt"
+        android:width="172dp"
+        android:height="52dp"
+        android:viewportWidth="172"
+        android:viewportHeight="52" >
+
+    <group>
+        <clip-path
+                android:pathData="M26 0H146C160.359 0 172 11.6406 172 26C172 40.3594 160.359 52 146 52H26C11.6406 52 0 40.3594 0 26C0 11.6406 11.6406 0 26 0Z"
+        />
+
+        <group
+                android:translateX="0.49"
+                android:translateY="-5.604"
+                android:pivotX="86"
+                android:pivotY="26"
+                android:scaleX="2.924"
+                android:scaleY="22.357"
+                android:rotation="45.256" >
+
+            <path
+                    android:pathData="M0 0V52H172V0" >
+
+                <aapt:attr name="android:fillColor" >
+                    <gradient
+                            android:type="linear"
+                            android:startX="43"
+                            android:startY="26"
+                            android:endX="129"
+                            android:endY="26" >
+                        <item
+                                android:color="#00202124"
+                                android:offset="0" />
+                        <item
+                                android:color="#80FCF7EB"
+                                android:offset="1" />
+                    </gradient>
+                </aapt:attr>
+            </path>
+        </group>
+    </group>
+</vector>
\ No newline at end of file
diff --git a/core/res/res/drawable-watch/input_method_item_background_selector.xml b/core/res/res/drawable-watch/input_method_item_background_selector.xml
new file mode 100644
index 0000000..1d8786f
--- /dev/null
+++ b/core/res/res/drawable-watch/input_method_item_background_selector.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+  <item android:state_selected="false" android:drawable="@drawable/input_method_item_background"/>
+  <item android:state_selected="true" android:drawable="@drawable/input_method_item_background_selected"/>
+</selector>
diff --git a/core/res/res/drawable-watch/progress_horizontal_material.xml b/core/res/res/drawable-watch/progress_horizontal_material.xml
new file mode 100644
index 0000000..8c52a41
--- /dev/null
+++ b/core/res/res/drawable-watch/progress_horizontal_material.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:id="@id/background"
+          android:gravity="center_vertical|fill_horizontal">
+        <shape android:shape="rectangle">
+            <corners android:radius="?attr/progressBarCornerRadius" />
+            <size android:height="@dimen/progress_bar_height_material" />
+            <solid android:color="@color/material_grey_900" />
+        </shape>
+    </item>
+    <item android:id="@id/secondaryProgress"
+          android:gravity="center_vertical|fill_horizontal">
+        <scale android:scaleWidth="100%">
+            <shape android:shape="rectangle">
+                <corners android:radius="?attr/progressBarCornerRadius" />
+                <size android:height="@dimen/progress_bar_height_material" />
+                <solid android:color="@color/material_grey_900" />
+            </shape>
+        </scale>
+    </item>
+    <item android:id="@id/progress"
+          android:gravity="center_vertical|fill_horizontal">
+        <scale android:scaleWidth="100%">
+            <shape android:shape="rectangle">
+                <corners android:radius="?attr/progressBarCornerRadius" />
+                <size android:height="@dimen/progress_bar_height_material" />
+                <solid android:color="@color/white" />
+            </shape>
+        </scale>
+    </item>
+</layer-list>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/stat_sys_managed_profile_status.xml b/core/res/res/drawable/stat_sys_managed_profile_status.xml
similarity index 100%
rename from packages/SystemUI/res/drawable/stat_sys_managed_profile_status.xml
rename to core/res/res/drawable/stat_sys_managed_profile_status.xml
diff --git a/core/res/res/interpolator-watch/rounded_window_interpolator.xml b/core/res/res/interpolator-watch/rounded_window_interpolator.xml
new file mode 100644
index 0000000..c322169
--- /dev/null
+++ b/core/res/res/interpolator-watch/rounded_window_interpolator.xml
@@ -0,0 +1,24 @@
+<?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.
+*/
+-->
+
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+                  android:controlX1="0.4"
+                  android:controlY1="0"
+                  android:controlX2="0.2"
+                  android:controlY2="1" />
diff --git a/core/res/res/layout-watch/app_anr_dialog.xml b/core/res/res/layout-watch/app_anr_dialog.xml
new file mode 100644
index 0000000..f9605af
--- /dev/null
+++ b/core/res/res/layout-watch/app_anr_dialog.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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:orientation="vertical"
+    android:showDividers="middle"
+    android:divider="@drawable/global_action_item_divider">
+    <Button
+        android:id="@+id/aerr_close"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/aerr_close_app"
+        android:drawableStart="@drawable/ic_close"
+        style="@style/aerr_list_item"/>
+    <Button
+        android:id="@+id/aerr_wait"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/aerr_wait"
+        android:drawableStart="@drawable/ic_schedule"
+        style="@style/aerr_list_item"/>
+    <Button
+        android:id="@+id/aerr_report"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/aerr_report"
+        android:drawableStart="@drawable/ic_feedback"
+        style="@style/aerr_list_item"/>
+</LinearLayout>
diff --git a/core/res/res/layout-watch/app_error_dialog.xml b/core/res/res/layout-watch/app_error_dialog.xml
new file mode 100644
index 0000000..8857b5f
--- /dev/null
+++ b/core/res/res/layout-watch/app_error_dialog.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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:orientation="vertical"
+    android:showDividers="middle"
+    android:divider="@drawable/global_action_item_divider">
+    <Button
+        android:id="@+id/aerr_restart"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/aerr_restart"
+        android:drawableStart="@drawable/ic_refresh"
+        style="@style/aerr_list_item" />
+    <Button
+        android:id="@+id/aerr_app_info"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/app_info"
+        android:drawableStart="@drawable/ic_info_outline_24"
+        style="@style/aerr_list_item" />
+    <Button
+        android:id="@+id/aerr_close"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/aerr_close_app"
+        android:drawableStart="@drawable/ic_close"
+        style="@style/aerr_list_item" />
+    <Button
+        android:id="@+id/aerr_report"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/aerr_report"
+        android:drawableStart="@drawable/ic_feedback"
+        style="@style/aerr_list_item" />
+    <Button
+        android:id="@+id/aerr_mute"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/aerr_mute"
+        android:drawableStart="@drawable/ic_eject_24dp"
+        style="@style/aerr_list_item" />
+</LinearLayout>
diff --git a/core/res/res/layout-watch/global_actions.xml b/core/res/res/layout-watch/global_actions.xml
index d8e569b..e97e7f2 100644
--- a/core/res/res/layout-watch/global_actions.xml
+++ b/core/res/res/layout-watch/global_actions.xml
@@ -17,7 +17,8 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:clipToPadding="false"
-    android:fillViewport="true">
+    android:fillViewport="true"
+    android:background="@color/global_actions_container_background">
     <LinearLayout
         android:id="@+id/actions_container"
         android:layout_width="match_parent"
diff --git a/core/res/res/layout-watch/global_actions_item.xml b/core/res/res/layout-watch/global_actions_item.xml
index 3d3f341..021c9ab 100644
--- a/core/res/res/layout-watch/global_actions_item.xml
+++ b/core/res/res/layout-watch/global_actions_item.xml
@@ -15,21 +15,18 @@
 -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
-	android:layout_height="wrap_content"
+        android:layout_height="52dp"
         android:gravity="center"
-        android:minHeight="52dp"
         android:minWidth="172dp"
-        android:paddingStart="12dp"
-        android:paddingEnd="12dp"
-        android:paddingTop="6dp"
-        android:paddingBottom="6dp"
+        android:paddingStart="14dp"
+        android:paddingEnd="14dp"
         android:background="@drawable/global_actions_item_grey_background">
 
     <ImageView android:id="@+id/icon"
             android:duplicateParentState="true"
             android:scaleType="centerInside"
             android:gravity="center"
-            android:layout_marginEnd="8dp"
+            android:layout_marginEnd="6dp"
             android:layout_width="24dp"
             android:layout_height="24dp"/>
 
@@ -39,7 +36,7 @@
             android:textSize="15sp"
             android:letterSpacing="0.013"
             android:fadingEdgeLength="12dp"
-            android:textColor="@android:color/white"
+            android:textColor="?attr/textColorPrimary"
             android:layout_weight="1"
             android:fontFamily="google-sans-text-medium"
             android:layout_width="wrap_content"
diff --git a/core/res/res/layout-watch/grant_credentials_permission.xml b/core/res/res/layout-watch/grant_credentials_permission.xml
new file mode 100644
index 0000000..5012b54
--- /dev/null
+++ b/core/res/res/layout-watch/grant_credentials_permission.xml
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2008, Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:divider="?android:attr/dividerHorizontal"
+    android:showDividers="middle"
+    android:dividerPadding="0dip"
+    android:theme="@style/Theme.DeviceDefault"
+    android:background="?attr/colorBackground">
+
+    <!-- The list of packages that correspond to the requesting UID
+    and the account/authtokenType that is being requested -->
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:fillViewport="true"
+        android:layout_weight="1"
+        android:gravity="top|center_horizontal">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:paddingTop="36dip"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/grant_credentials_permission_message_header"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/grant_credentials_permission_message_header"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:paddingStart="28dip"
+                android:paddingEnd="20dp"
+                android:paddingBottom="12dip" />
+
+            <LinearLayout
+                android:id="@+id/packages_list"
+                android:orientation="vertical"
+                android:paddingStart="16dip"
+                android:paddingEnd="12dip"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" />
+
+            <RelativeLayout
+                android:paddingStart="16dip"
+                android:paddingEnd="12dip"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <ImageView
+                    android:id="@+id/permission_icon"
+                    android:layout_width="30dip"
+                    android:layout_height="30dip"
+                    android:src="@drawable/ic_bullet_key_permission"
+                    android:layout_alignParentStart="true"
+                    android:scaleType="fitCenter" />
+
+                <TextView
+                    android:id="@+id/account_type"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:textColor="@color/perms_dangerous_perm_color"
+                    android:textStyle="bold"
+                    android:paddingStart="16dip"
+                    android:layout_toEndOf="@id/permission_icon"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content" />
+
+                <TextView
+                    android:id="@+id/account_name"
+                    android:textAppearance="?android:attr/textAppearanceSmall"
+                    android:textColor="@color/perms_dangerous_perm_color"
+                    android:layout_marginTop="-4dip"
+                    android:paddingBottom="8dip"
+                    android:paddingStart="16dip"
+                    android:layout_below="@id/account_type"
+                    android:layout_toEndOf="@id/permission_icon"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content" />
+
+                <TextView
+                    android:id="@+id/authtoken_type"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:textColor="@color/perms_dangerous_perm_color"
+                    android:textStyle="bold"
+                    android:layout_marginTop="-4dip"
+                    android:paddingBottom="8dip"
+                    android:paddingStart="16dip"
+                    android:layout_below="@id/account_name"
+                    android:layout_toEndOf="@id/permission_icon"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content" />
+            </RelativeLayout>
+
+            <TextView
+                android:id="@+id/grant_credentials_permission_message_footer"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/grant_credentials_permission_message_footer"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:paddingStart="19dip"
+                android:paddingBottom="12dip" />
+        </LinearLayout>
+    </ScrollView>
+
+    <!-- The buttons to allow or deny -->
+    <LinearLayout
+        android:id="@+id/buttons"
+        android:layout_marginStart="25dp"
+        android:layout_marginEnd="25dp"
+        android:layout_marginBottom="10dp"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        style="?android:attr/buttonBarStyle">
+
+        <Button
+            android:id="@+id/deny_button"
+            android:text="@string/deny"
+            android:layout_width="0dip"
+            android:layout_height="wrap_content"
+            android:layout_weight="2"
+            style="?android:attr/buttonBarButtonStyle" />
+
+        <Button
+            android:id="@+id/allow_button"
+            android:text="@string/allow"
+            android:layout_width="0dip"
+            android:layout_height="wrap_content"
+            android:layout_weight="2"
+            style="?android:attr/buttonBarButtonStyle" />
+
+    </LinearLayout>
+</LinearLayout>
diff --git a/core/res/res/layout-watch/input_method_switch_dialog_title.xml b/core/res/res/layout-watch/input_method_switch_dialog_title.xml
new file mode 100644
index 0000000..3d53ade
--- /dev/null
+++ b/core/res/res/layout-watch/input_method_switch_dialog_title.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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.
+*/
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical" >
+
+    <LinearLayout
+            android:layout_width="172dp"
+            android:layout_height="48dp"
+            android:layout_marginStart="10dp"
+            android:layout_marginEnd="10dp"
+            android:layout_marginTop="20dp"
+            android:orientation="vertical">
+
+        <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:gravity="center" >
+
+            <TextView
+                    android:id="@+id/alertTitle"
+                    android:layout_width="match_parent"
+                    android:layout_height="48dp"
+                    android:layout_marginStart="10dp"
+                    android:layout_marginEnd="10dp"
+                    android:gravity="center_vertical"
+                    android:lineSpacingExtra="0sp"
+                    android:text="@string/select_input_method"
+                    android:textColor="#BDC1C6"
+                    android:fontFamily="google-sans-text-medium"
+                    android:letterSpacing="0.01"
+                    android:textSize="15sp" />
+        </LinearLayout>
+    </LinearLayout>
+
+    <!-- Hard keyboard switch -->
+
+    <LinearLayout
+            android:id="@+id/hard_keyboard_section"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical" >
+
+        <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal" >
+
+            <LinearLayout
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:background="?attr/selectableItemBackground"
+                    android:ellipsize="marquee"
+                    android:gravity="center_vertical"
+                    android:orientation="vertical"
+                    style="@style/InputMethodSwitchHardKeyboardText">
+
+                <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:singleLine="true"
+                        android:text="@string/hardware"
+                        android:textAppearance="?attr/textAppearanceListItem"
+                        android:ellipsize="marquee" />
+
+                <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:maxLines="10"
+                        android:text="@string/show_ime"
+                        android:textAppearance="?attr/textAppearanceListItemSecondary"
+                        android:textColor="?attr/textColorSecondary" />
+            </LinearLayout>
+
+            <Switch
+                    android:id="@+id/hard_keyboard_switch"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_vertical"
+                    style="@style/InputMethodSwitchHardKeyboardSwitch"/>
+        </LinearLayout>
+
+        <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:background="?attr/listDividerAlertDialog" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/core/res/res/layout-watch/input_method_switch_item.xml b/core/res/res/layout-watch/input_method_switch_item.xml
new file mode 100644
index 0000000..a77bd8f
--- /dev/null
+++ b/core/res/res/layout-watch/input_method_switch_item.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:id="@+id/dialog_item"
+              android:layout_width="172dp"
+              android:layout_height="52dp"
+              android:layout_marginStart="10dp"
+              android:layout_marginTop="68dp"
+              android:weightSum="100"
+              android:gravity="center"
+              android:orientation="horizontal" >
+
+        <TextView
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_weight="5.21"
+                android:background="@android:color/transparent"/>
+
+        <LinearLayout
+                android:id="@+id/title"
+                android:layout_width="0dp"
+                android:layout_height="52dp"
+                android:layout_weight="89.58"
+                android:duplicateParentState="true"
+                android:gravity="center_vertical"
+                android:orientation="horizontal"
+                android:paddingEnd="6dp"
+                android:paddingStart="6dp"
+                android:background="@drawable/input_method_item_background_selector" >
+
+            <LinearLayout
+                    android:id="@+id/text_layout"
+                    android:layout_width="124dp"
+                    android:layout_height="match_parent"
+                    android:duplicateParentState="true"
+                    android:gravity="center_vertical"
+                    android:orientation="vertical" >
+
+                <TextView
+                        android:id="@+id/text1"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:layout_marginStart="8dp"
+                        android:layout_marginEnd="8dp"
+                        android:gravity="center_vertical"
+                        android:letterSpacing="0.01"
+                        android:textColor="#FFFFFF"
+                        android:maxLines="1"
+                        android:fontFamily="google-sans-text-medium"
+                        android:textSize="15sp" />
+
+                <TextView
+                        android:id="@+id/text2"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:layout_marginStart="8dp"
+                        android:layout_marginEnd="8dp"
+                        android:gravity="center_vertical"
+                        android:letterSpacing="0.01"
+                        android:textColor="#CAC5BC"
+                        android:maxLines="1"
+                        android:fontFamily="google-sans-text-medium"
+                        android:textSize="13sp" />
+
+            </LinearLayout>
+
+            <RadioButton
+                    android:id="@+id/radio"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:buttonTint="#E6FF7B"
+                    android:clickable="false"
+                    android:duplicateParentState="true"
+                    android:focusable="false"
+                    android:gravity="center"
+                    android:scaleX="1"
+                    android:scaleY="1" />
+
+
+        </LinearLayout>
+
+        <TextView
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_weight="5.21"
+                android:background="@android:color/transparent"/>
+
+
+</LinearLayout>
+
diff --git a/core/res/res/layout-watch/input_method_switcher_list_layout.xml b/core/res/res/layout-watch/input_method_switcher_list_layout.xml
new file mode 100644
index 0000000..6311f8a
--- /dev/null
+++ b/core/res/res/layout-watch/input_method_switcher_list_layout.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<view class="com.android.internal.app.AlertController$RecycleListView"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@id/select_dialog_listview"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:cacheColorHint="@null"
+    android:divider="?attr/listDividerAlertDialog"
+    android:scrollbars="vertical"
+    android:overScrollMode="ifContentScrolls"
+    android:textAlignment="viewStart"
+    android:clipToPadding="false"
+    android:paddingBottomNoButtons="@dimen/dialog_list_padding_bottom_no_buttons"
+    android:paddingTopNoTitle="@dimen/dialog_list_padding_top_no_title"
+  android:dividerHeight="@dimen/input_method_divider_height"/>
diff --git a/core/res/res/layout-watch/permissions_package_list_item.xml b/core/res/res/layout-watch/permissions_package_list_item.xml
new file mode 100644
index 0000000..e2171c1
--- /dev/null
+++ b/core/res/res/layout-watch/permissions_package_list_item.xml
@@ -0,0 +1,47 @@
+<?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.
+  -->
+
+<!--
+  Defines the layout of a single package item.
+  Contains a bullet point icon and the name of the package.
+-->
+
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:theme="@style/Theme.DeviceDefault">
+
+    <ImageView
+        android:id="@+id/package_icon"
+        android:layout_width="30dip"
+        android:layout_height="30dip"
+        android:layout_alignParentStart="true"
+        android:src="@drawable/ic_text_dot"
+        android:scaleType="fitCenter" />
+
+
+    <TextView
+        android:id="@+id/package_label"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:textStyle="bold"
+        android:paddingStart="6dip"
+        android:layout_toEndOf="@id/package_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content" />
+
+</RelativeLayout>
diff --git a/core/res/res/layout-watch/watch_base_error_dialog.xml b/core/res/res/layout-watch/watch_base_error_dialog.xml
new file mode 100644
index 0000000..c8ea017
--- /dev/null
+++ b/core/res/res/layout-watch/watch_base_error_dialog.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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.internal.widget.WatchListDecorLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/parentPanel"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <com.android.internal.widget.FadingWearableScrollView
+        android:id="@+id/scrollView"
+        android:fillViewport="true"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingLeft="?dialogPreferredPadding"
+            android:paddingRight="?dialogPreferredPadding"
+            android:paddingTop="@dimen/base_error_dialog_top_padding"
+            android:paddingBottom="@dimen/base_error_dialog_bottom_padding"
+            android:orientation="vertical" >
+            <!-- Top Panel -->
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:id="@+id/topPanel">
+                <include android:id="@+id/title_template"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    layout="@layout/watch_base_error_dialog_title"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="16dp">
+            </FrameLayout>
+            <!-- Content Panel -->
+            <FrameLayout
+                android:id="@+id/contentPanel"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:clipToPadding="false">
+                <TextView
+                    android:id="@+id/message"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:gravity="center_horizontal|top"
+                    android:textAppearance="@style/TextAppearance.DeviceDefault.Body1"
+                    android:paddingTop="8dip"
+                    android:paddingBottom="8dip"/>
+            </FrameLayout>
+            <!-- Custom Panel, to replace content panel if needed -->
+            <FrameLayout
+                android:id="@+id/customPanel"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:minHeight="64dp">
+                <FrameLayout
+                    android:id="@+android:id/custom"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"/>
+            </FrameLayout>
+
+            <!-- Button Panel -->
+            <FrameLayout
+                android:id="@+id/buttonPanel"
+                android:layout_weight="1"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="bottom"
+                    android:orientation="vertical"
+                    style="?android:attr/buttonBarStyle"
+                    android:measureWithLargestChild="true">
+                    <Button
+                        android:id="@+id/button1"
+                        android:layout_gravity="start"
+                        android:layout_weight="1"
+                        style="?android:attr/buttonBarButtonStyle"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"/>
+                    <Button
+                        android:id="@+id/button3"
+                        android:layout_gravity="start"
+                        android:layout_weight="1"
+                        style="?android:attr/buttonBarButtonStyle"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"/>
+                    <Button
+                        android:id="@+id/button2"
+                        android:layout_gravity="start"
+                        android:layout_weight="1"
+                        style="?android:attr/buttonBarButtonStyle"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"/>
+                </LinearLayout>
+            </FrameLayout>
+        </LinearLayout>
+    </com.android.internal.widget.FadingWearableScrollView>
+</com.android.internal.widget.WatchListDecorLayout>
diff --git a/core/res/res/layout-watch/watch_base_error_dialog_title.xml b/core/res/res/layout-watch/watch_base_error_dialog_title.xml
new file mode 100644
index 0000000..aa14c08
--- /dev/null
+++ b/core/res/res/layout-watch/watch_base_error_dialog_title.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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:paddingLeft="@dimen/base_error_dialog_contents_padding"
+    android:paddingRight="@dimen/base_error_dialog_contents_padding"
+    android:orientation="vertical"
+    android:gravity="top|center_horizontal">
+    <FrameLayout
+        android:adjustViewBounds="true"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+        <ImageView
+            android:id="@+id/icon"
+            android:adjustViewBounds="true"
+            android:maxHeight="24dp"
+            android:maxWidth="24dp"
+            android:layout_marginTop="@dimen/screen_percentage_10"
+            android:layout_gravity="center_horizontal"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@null"/>
+    </FrameLayout>
+    <TextView
+        android:id="@+id/alertTitle"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:minHeight="38dp"
+        android:textAppearance="@style/TextAppearance.Watch.BaseErrorDialog.Title"
+        android:maxLines="3"
+        android:gravity="center_horizontal|top"/>
+</LinearLayout>
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 3a040ad..2d13ab5 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android-stelsel"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Skakel oor na persoonlike profiel"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Skakel oor na werkprofiel"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Skakel oor na persoonlike <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Skakel oor na werk-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakte"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"in te gaan by jou kontakte"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Ligging"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Laat die program toe om die vibrator te beheer."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Stel die program in staat om toegang tot die vibreerderstand te kry."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"skakel foonnommers direk"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Laat die program toe om telefoonnommers sonder jou tussentrede te bel. Dit kan tot onverwagte heffings of oproepe lei. Let daarop dat dit nie die program toelaat om noodnommers te bel nie. Kwaadwillige programme kan jou geld kos deur oproepe sonder jou bevestiging te maak."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Laat die app toe om foonnommers sonder jou insae te bel. Dit kan onvoorsiene heffings of oproepe tot gevolg hê. Neem kennis dat dit nie die app toelaat om noodnommers te bel nie. Kwaadwillige apps kan jou geld kos deur oproepe te maak sonder jou bevestiging of diensverskafferkodes te bel wat veroorsaak dat inkomende oproepe outomaties na ’n ander nommer aangestuur word."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"toegang tot kitsboodskapoproepdiens"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Laat die program toe om die kitsboodskapdiens te gebruik om oproepe sonder jou ingryping te maak."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"lees foonstatus en identiteit"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Laat die program toe om voorkeur-NFC-betalingdiensinligting soos geregistreerde hulpmiddels en roetebestemming te kry."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"beheer kortveldkommunikasie"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Laat die program toe om met kortveldkommunikasie- (NFC) merkers, kaarte en lesers te kommunikeer."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Veilige Element-transaksiegeval"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Laat die app toe om inligting te ontvang oor transaksies wat op ’n Veilige Element plaasvind."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"deaktiveer jou skermslot"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Laat die program toe om die sleutelslot en enige verwante wagwoordsekuriteit te deaktiveer. Byvoorbeeld, die foon deaktiveer die sleutelslot wanneer ’n oproep inkom, en atkiveer dit dan weer wanneer die oproep eindig."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"versoek skermslot-kompleksiteit"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Gebruik biometrie of skermslot"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifieer dat dit jy is"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Gebruik jou biometrie om voort te gaan"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Gebruik jou vingerafdruk om voort te gaan"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Gebruik jou gesig om voort te gaan"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Gebruik jou biometriese data of skermslot om voort te gaan"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometriese hardeware is nie beskikbaar nie"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Stawing is gekanselleer"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Nie herken nie"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Gesig word nie herken nie"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Stawing is gekanselleer"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Geen PIN, patroon of wagwoord is gestel nie"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Kon nie staaf nie"</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Gesigbedekking bespeur. Gesig moet heel sigbaar wees."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Kan nie gesig verifieer nie. Hardeware nie beskikbaar nie."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Gesighandeling is gekanselleer."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Gebruiker het Gesigslot gekanselleer"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Te veel pogings. Probeer later weer."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Te veel pogings. Gesigslot is onbeskikbaar."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Te veel pogings. Gebruik eerder skermslot."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Kan nie gesig verifieer nie. Probeer weer."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Jy het nie Gesigslot opgestel nie"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"WEIER"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Kies invoermetode"</string>
     <string name="show_ime" msgid="6406112007347443383">"Hou dit op die skerm terwyl fisieke sleutelbord aktief is"</string>
-    <string name="hardware" msgid="1800597768237606953">"Wys virtuele sleutelbord"</string>
+    <string name="hardware" msgid="3611039921284836033">"Gebruik skermsleutelbord"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Stel <xliff:g id="DEVICE_NAME">%s</xliff:g> op"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Stel fisieke sleutelborde op"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Tik om taal en uitleg te kies"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Verwyder"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Verhoog volume bo aanbevole vlak?\n\nOm lang tydperke teen hoë volume te luister, kan jou gehoor beskadig."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Waarskuwing:\nJy het in ’n week meer kere na harde klankseine deur oorfone geluister as wat veilig is vir jou gehoor.\n\nAs jy oor hierdie limiet gaan, sal dit jou gehoor vir altyd beskadig."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Waarskuwing:\nJy het in ’n week 5 keer meer na harde klankseine deur oorfone geluister as wat veilig is vir jou gehoor.\n\nVolume is verlaag om jou gehoor te beskerm."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Die vlak waarteen jy na media luister, kan tot gehoorskade lei wanneer dit vir lang tydperke volgehou word.\n\nAs jy aanhou om vir lang tydperke so hard te luister, kan jy jou gehoor beskadig."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Waarskuwing:\nJy luister tans na inhoud wat teen ’n onveilige vlak speel.\n\nAs jy aanhou om so hard te luister, sal dit jou gehoor vir altyd beskadig."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Hou aan om teen hoë volume te luister?\n\nOorfoonvolume was langer as wat aanbeveel word hoog, wat jou gehoor kan beskadig"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Harde klank bespeur\n\nOorfoonvolume was hoër as aanbeveel, wat jou gehoor kan beskadig"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Gebruik toeganklikheidkortpad?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Wanneer die kortpad aan is, sal \'n toeganklikheidkenmerk begin word as albei volumeknoppies 3 sekondes lank gedruk word."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Skakel kortpad vir toeganklikheidskenmerke aan?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Swiep van bo na onder as jy wil uitgaan."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Het dit"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Draai vir ’n beter aansig"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Verlaat gedeelde skerm vir ’n beter aansig"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Maak <xliff:g id="NAME">%s</xliff:g> in volskerm oop vir ’n beter aansig"</string>
     <string name="done_label" msgid="7283767013231718521">"Klaar"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Ure se sirkelglyer"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Minute se sirkelglyer"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Program is nie beskikbaar nie"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is nie op die oomblik beskikbaar nie."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> is nie beskikbaar nie"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Toestemming word benodig"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Toestemmingsversoek is onderdruk"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Hierdie app versoek tans bykomende toestemmings, maar toestemmings kan nie in ’n stromingsessie verleen word nie. Verleen eers die toestemming op jou Android TV-toestel."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Hierdie app versoek tans bykomende toestemmings, maar toestemmings kan nie in ’n stromingsessie verleen word nie. Verleen eers die toestemming op jou tablet."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Hierdie app versoek tans bykomende toestemmings, maar toestemmings kan nie in ’n stromingsessie verleen word nie. Verleen eers die toestemming 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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"Hierdie program is vir ’n ouer weergawe van Android gebou. Dit sal dalk nie behoorlik werk nie en dit sluit nie die jongste sekuriteit en privaatheidbeskermings in nie. Kyk of daar ’n opdatering is of kontak die program se ontwikkelaar."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Kyk vir opdatering"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Hierdie app is nie met die jongste weergawe van Android versoenbaar nie. Kyk of daar ’n opdatering is, of kontak die app se ontwikkelaar."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Jy het nuwe boodskappe"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Maak SMS-program oop om te bekyk"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Sommige funksies kan beperk wees"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Hierdie inhoud kan nie met werkprogramme oopgemaak word nie"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Hierdie inhoud kan nie met persoonlike programme gedeel word nie"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Hierdie inhoud kan nie met persoonlike programme oopgemaak word nie"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Werkprofiel is onderbreek"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Tik om aan te skakel"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Werkapps is onderbreek"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Hervat"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Geen werkprogramme nie"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Geen persoonlike programme nie"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Maak werk-<xliff:g id="APP">%s</xliff:g> oop?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Maak in persoonlike <xliff:g id="APP">%s</xliff:g> oop?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Maak in werk-<xliff:g id="APP">%s</xliff:g> oop?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Bel van werkapp af?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Skakel oor na werkapp?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Jou organisasie laat jou net toe om oproepe van werkapps af te maak"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Jou organisasie laat jou net toe om boodskappe van werkapps af te stuur"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Gebruik persoonlike blaaier"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Gebruik werkblaaier"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Bel"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Skakel oor"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM se netwerkontsluiting-PIN"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM se netwerksubstelontsluiting-PIN"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM se korporatiewe ontsluiting-PIN"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Kan nie toegang tot die foon se kamera op jou <xliff:g id="DEVICE">%1$s</xliff:g> kry nie"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Kan nie toegang tot die tablet se kamera op jou <xliff:g id="DEVICE">%1$s</xliff:g> kry nie"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Jy kan nie toegang hiertoe kry terwyl daar gestroom word nie. Probeer eerder op jou foon."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Kan nie prent-in-prent sien terwyl jy stroom nie"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Stelselverstek"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KAART <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Metgeselhorlosieprofiel se toestemming om horlosies te bestuur"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 1fe2beb..2dd8f3b 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -202,7 +202,7 @@
     <string name="device_policy_manager_service" msgid="5085762851388850332">"የመሣሪያ መመሪያ አስተዳዳሪ አገልግሎት"</string>
     <string name="music_recognition_manager_service" msgid="7481956037950276359">"የሙዚቃ ለይቶ ማወቅ አስተዳዳሪ አገልግሎት"</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"የእርስዎ መሣሪያ ይደመሰሳል"</string>
-    <string name="factory_reset_message" msgid="2657049595153992213">"የአስተዳዳሪ መተግበሪያ ስራ ላይ ሊውል አይችልም። የእርስዎን መሣሪያ አሁን ይደመሰሳል።\n\nጥያቄዎች ካለዎት የድርጅትዎን አስተዳዳሪ ያነጋግሩ።"</string>
+    <string name="factory_reset_message" msgid="2657049595153992213">"የአስተዳዳሪ መተግበሪያ ሥራ ላይ ሊውል አይችልም። የእርስዎን መሣሪያ አሁን ይደመሰሳል።\n\nጥያቄዎች ካለዎት የድርጅትዎን አስተዳዳሪ ያነጋግሩ።"</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"ማተም በ<xliff:g id="OWNER_APP">%s</xliff:g> ተሰናክሏል።"</string>
     <string name="personal_apps_suspension_title" msgid="7561416677884286600">"የስራ መገለጫዎን ያብሩት"</string>
     <string name="personal_apps_suspension_text" msgid="6115455688932935597">"የስራ መገለጫዎን እስኪያበሩት ድረስ የግል መተግበሪያዎችዎ ታግደዋል"</string>
@@ -249,16 +249,16 @@
     <string name="global_action_emergency" msgid="1387617624177105088">"ድንገተኛ አደጋ"</string>
     <string name="global_action_bug_report" msgid="5127867163044170003">"የሳንካ ሪፖርት"</string>
     <string name="global_action_logout" msgid="6093581310002476511">"ክፍለ-ጊዜን አብቃ"</string>
-    <string name="global_action_screenshot" msgid="2610053466156478564">"ቅጽበታዊ ገጽ እይታ"</string>
+    <string name="global_action_screenshot" msgid="2610053466156478564">"ቅጽበታዊ ገፅ እይታ"</string>
     <string name="bugreport_title" msgid="8549990811777373050">"የሳንካ ሪፖርት"</string>
     <string name="bugreport_message" msgid="5212529146119624326">"ይሄ እንደ የኢሜይል መልዕክት አድርጎ የሚልከውን ስለመሣሪያዎ የአሁኑ ሁኔታ መረጃ ይሰበስባል። የሳንካ ሪፖርቱን ከመጀመር ጀምሮ እስኪላክ ድረስ ትንሽ ጊዜ ይወስዳል፤ እባክዎ ይታገሱ።"</string>
     <string name="bugreport_option_interactive_title" msgid="7968287837902871289">"መስተጋብራዊ ሪፖርት"</string>
-    <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"በአብዛኛዎቹ ሁኔታዎች ላይ ይህን ይጠቀሙ። የሪፖርቱን ሂደት እንዲከታተሉ፣ ስለችግሩ ተጨማሪ ዝርዝሮችን እንዲያስገቡ እና ቅጽበታዊ ገጽ እይታዎችን እንዲያነሱ ያስችልዎታል። ሪፖርት ለማድረግ ረዥም ጊዜ የሚወስዱ አንዳንድ ብዙም ጥቅም ላይ የማይውሉ ክፍሎችን ሊያልፋቸው ይችላል።"</string>
+    <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"በአብዛኛዎቹ ሁኔታዎች ላይ ይህን ይጠቀሙ። የሪፖርቱን ሂደት እንዲከታተሉ፣ ስለችግሩ ተጨማሪ ዝርዝሮችን እንዲያስገቡ እና ቅጽበታዊ ገፅ እይታዎችን እንዲያነሱ ያስችልዎታል። ሪፖርት ለማድረግ ረዥም ጊዜ የሚወስዱ አንዳንድ ብዙም ጥቅም ላይ የማይውሉ ክፍሎችን ሊያልፋቸው ይችላል።"</string>
     <string name="bugreport_option_full_title" msgid="7681035745950045690">"ሙሉ ሪፖርት"</string>
-    <string name="bugreport_option_full_summary" msgid="1975130009258435885">"መሣሪያዎ ምላሽ የማይሰጥ ወይም በጣም ቀርፋፋ ከሆነ፣ ወይም ሁሉንም የሪፖርት ክፍሎች የሚያስፈልገዎት ከሆነ ለዝቅተኛ የስርዓት ጣልቃ-ገብነት ይህን አማራጭ ይጠቀሙ። ተጨማሪ ዝርዝሮችን እንዲያስገቡ ወይም ተጨማሪ ቅጽበታዊ ገጽ እይታዎችን እንዲያነሱ አያስችልዎትም።"</string>
-    <string name="bugreport_countdown" msgid="6418620521782120755">"{count,plural, =1{በ# ሰከንድ ውስጥ ለሳንካ ሪፖርት ቅጽበታዊ ገጽ ዕይታን በማንሳት ላይ።}one{በ# ሰከንዶች ውስጥ ለሳንካ ሪፖርት ቅጽበታዊ ገጽ ዕይታን በማንሳት ላይ።}other{በ# ሰከንዶች ውስጥ ለሳንካ ሪፖርት ቅጽበታዊ ገጽ ዕይታን በማንሳት ላይ።}}"</string>
-    <string name="bugreport_screenshot_success_toast" msgid="7986095104151473745">"ቅጽበታዊ ገጽ እይታ ከሳንካ ሪፖርት ጋር ተነስቷል"</string>
-    <string name="bugreport_screenshot_failure_toast" msgid="6736320861311294294">"ቅጽበታዊ ገጽ እይታን ከሳንካ ሪፖርት ጋር ማንሳት አልተሳካም"</string>
+    <string name="bugreport_option_full_summary" msgid="1975130009258435885">"መሣሪያዎ ምላሽ የማይሰጥ ወይም በጣም ቀርፋፋ ከሆነ፣ ወይም ሁሉንም የሪፖርት ክፍሎች የሚያስፈልገዎት ከሆነ ለዝቅተኛ የስርዓት ጣልቃ-ገብነት ይህን አማራጭ ይጠቀሙ። ተጨማሪ ዝርዝሮችን እንዲያስገቡ ወይም ተጨማሪ ቅጽበታዊ ገፅ እይታዎችን እንዲያነሱ አያስችልዎትም።"</string>
+    <string name="bugreport_countdown" msgid="6418620521782120755">"{count,plural, =1{በ# ሰከንድ ውስጥ ለሳንካ ሪፖርት ቅጽበታዊ ገፅ ዕይታን በማንሳት ላይ።}one{በ# ሰከንዶች ውስጥ ለሳንካ ሪፖርት ቅጽበታዊ ገፅ ዕይታን በማንሳት ላይ።}other{በ# ሰከንዶች ውስጥ ለሳንካ ሪፖርት ቅጽበታዊ ገፅ ዕይታን በማንሳት ላይ።}}"</string>
+    <string name="bugreport_screenshot_success_toast" msgid="7986095104151473745">"ቅጽበታዊ ገፅ እይታ ከሳንካ ሪፖርት ጋር ተነስቷል"</string>
+    <string name="bugreport_screenshot_failure_toast" msgid="6736320861311294294">"ቅጽበታዊ ገፅ እይታን ከሳንካ ሪፖርት ጋር ማንሳት አልተሳካም"</string>
     <string name="global_action_toggle_silent_mode" msgid="8464352592860372188">"የፀጥታ ሁነታ"</string>
     <string name="global_action_silent_mode_on_status" msgid="2371892537738632013">"ድምፅ ጠፍቷል"</string>
     <string name="global_action_silent_mode_off_status" msgid="6608006545950920042">"ድምፅ በርቷል"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android ስርዓት"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"ወደ የግል መገለጫ ቀይር"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"ወደ የስራ መገለጫ ቀይር"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"ወደ የግል <xliff:g id="APP_NAME">%1$s</xliff:g> ቀይር"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"ወደ የሥራ <xliff:g id="APP_NAME">%1$s</xliff:g> ቀይር"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"ዕውቂያዎች"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"የእርስዎ እውቂያዎች ላይ ይድረሱባቸው"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"መገኛ አካባቢ"</string>
@@ -340,8 +342,8 @@
     <string name="capability_desc_canPerformGestures" msgid="6619457251067929726">"መታ ማድረግ፣ ማንሸራተት፣ መቆንጠጥ እና ሌሎች የጣት ምልክቶችን ማከናወን ይችላል።"</string>
     <string name="capability_title_canCaptureFingerprintGestures" msgid="1189053104594608091">"የጣት አሻራ ምልክቶች"</string>
     <string name="capability_desc_canCaptureFingerprintGestures" msgid="6861869337457461274">"በመሣሪያው የጣት አሻራ ዳሳሽ ላይ የተከናወኑ የጣት ምልክቶችን መያዝ ይችላል።"</string>
-    <string name="capability_title_canTakeScreenshot" msgid="3895812893130071930">"ቅጽበታዊ ገጽ እይታን ያነሳል"</string>
-    <string name="capability_desc_canTakeScreenshot" msgid="7762297374317934052">"የማሳያው ቅጽበታዊ ገጽ እይታን ማንሳት ይችላል።"</string>
+    <string name="capability_title_canTakeScreenshot" msgid="3895812893130071930">"ቅጽበታዊ ገፅ እይታን ያነሳል"</string>
+    <string name="capability_desc_canTakeScreenshot" msgid="7762297374317934052">"የማሳያው ቅጽበታዊ ገፅ እይታን ማንሳት ይችላል።"</string>
     <string name="dream_preview_title" msgid="5570751491996100804">"ቅድመ ዕይታ፣ <xliff:g id="DREAM_NAME">%1$s</xliff:g>"</string>
     <string name="permlab_statusBar" msgid="8798267849526214017">"የሁኔቴ አሞሌ አቦዝን ወይም ቀይር"</string>
     <string name="permdesc_statusBar" msgid="5809162768651019642">"የስርዓት አዶዎችን ወደ ሁኔታ አሞሌ ላለማስቻል ወይም ለማከል እና ለማስወገድ ለመተግበሪያው ይፈቅዳሉ፡፡"</string>
@@ -349,12 +351,12 @@
     <string name="permdesc_statusBarService" msgid="6652917399085712557">"የኹናቴ አሞሌ እንዲሆን ለመተግበሪያው ይፈቅዳሉ።"</string>
     <string name="permlab_expandStatusBar" msgid="1184232794782141698">"የሁኔታ አሞሌ ዘርጋ/ሰብስብ"</string>
     <string name="permdesc_expandStatusBar" msgid="7180756900448498536">"የሁኔታ አሞሌን ለመዝረጋት እና ለመሰብሰብ ለመተግበሪያው ይፈቅዳሉ።"</string>
-    <string name="permlab_fullScreenIntent" msgid="4310888199502509104">"በአንድ የተቆለፈ መሣሪያ ላይ ማሳወቂያዎችን እንደ የሙሉ ገጽ እይታ እንቅስቃሴዎችን ማሳየት"</string>
-    <string name="permdesc_fullScreenIntent" msgid="1100721419406643997">"መተግበሪያው በአንድ የተቆለፈ መሣሪያ ላይ ማሳወቂያዎችን እንደ የሙሉ ገጽ እይታ እንቅስቃሴዎች አድርጎ እንዲያሳይ ያስችለዋል"</string>
+    <string name="permlab_fullScreenIntent" msgid="4310888199502509104">"በአንድ የተቆለፈ መሣሪያ ላይ ማሳወቂያዎችን እንደ የሙሉ ገፅ እይታ እንቅስቃሴዎችን ማሳየት"</string>
+    <string name="permdesc_fullScreenIntent" msgid="1100721419406643997">"መተግበሪያው በአንድ የተቆለፈ መሣሪያ ላይ ማሳወቂያዎችን እንደ የሙሉ ገፅ እይታ እንቅስቃሴዎች አድርጎ እንዲያሳይ ያስችለዋል"</string>
     <string name="permlab_install_shortcut" msgid="7451554307502256221">"አቋራጮችን ይጭናል"</string>
-    <string name="permdesc_install_shortcut" msgid="4476328467240212503">"አንድ መተግበሪያ ያለተጠቃሚ ጣልቃ-ገብነት የመነሻ ማያ ገጽ አቋራጮችን እንዲያክል ያስችለዋል።"</string>
+    <string name="permdesc_install_shortcut" msgid="4476328467240212503">"አንድ መተግበሪያ ያለተጠቃሚ ጣልቃ-ገብነት የመነሻ ማያ ገፅ አቋራጮችን እንዲያክል ያስችለዋል።"</string>
     <string name="permlab_uninstall_shortcut" msgid="295263654781900390">"አቋራጮችን ያራግፋል"</string>
-    <string name="permdesc_uninstall_shortcut" msgid="1924735350988629188">"መተግበሪያው ያለተጠቃሚ ጣልቃ-ገብነት የመነሻ ማያ ገጽ አቋራጮችን እንዲያስወግድ ያስችለዋል።"</string>
+    <string name="permdesc_uninstall_shortcut" msgid="1924735350988629188">"መተግበሪያው ያለተጠቃሚ ጣልቃ-ገብነት የመነሻ ማያ ገፅ አቋራጮችን እንዲያስወግድ ያስችለዋል።"</string>
     <string name="permlab_processOutgoingCalls" msgid="4075056020714266558">"የወጪ ጥሪዎች አቅጣጫ ቀይር"</string>
     <string name="permdesc_processOutgoingCalls" msgid="7833149750590606334">"በወጪ ጥሪ ጊዜ ጥሪውን ወደተለየ ቁጥር ከማዞር ወይም ጥሪውን በአጠቃላይ ከመተው አማራጭ ጋር እየተደወለለት ያለውን ቁጥር እንዲያይ ያስችለዋል።"</string>
     <string name="permlab_answerPhoneCalls" msgid="4131324833663725855">"የስልክ ጥሪዎችን አንሳ"</string>
@@ -459,8 +461,8 @@
     <string name="permdesc_writeCallLog" product="tablet" msgid="2657525794731690397">"ስለ ገቢ እና ወጪ ጥሪዎችን ውሂብ ጨምሮ፣ የጡባዊተኮህን ምዝግብ ማስታወሻ ለመቀየር ለመተግበሪያው ይፈቅዳል። ይሄንን ተንኮል አዘል መተግበሪያዎች የስልክህን ምዝግብ ማስታወሻ ለመሰረዝ ወይም ለመለወጥ ሊጠቀሙበት ይችላሉ።"</string>
     <string name="permdesc_writeCallLog" product="tv" msgid="3934939195095317432">"መተግበሪያው ስለገቢ እና ወጪ ጥሪዎች ያለ ውሂብም ጨምሮ የእርስዎ Android TV መሣሪያ ምዝግብ ማስታወሻ እንዲቀይር ያስችለዋል። ተንኮል-አዘል መተግበሪያዎች ይህን ተጠቅመው የስልክዎን ምዝግብ ማስታወሻ ሊደመስሱ ወይም ሊቀይሩ ይችላሉ።"</string>
     <string name="permdesc_writeCallLog" product="default" msgid="5903033505665134802">"ስለ ገቢ እና ወጪ ጥሪዎችን ውሂብ ጨምሮ፣ የስልክህን ምዝግብ ማስታወሻ ለመቀየር ለመተግበሪያው ይፈቅዳል። ይሄንን ተንኮል አዘል መተግበሪያዎች የስልክህን ምዝግብ ማስታወሻ ለመሰረዝ ወይም ለመለወጥ ሊጠቀሙበት ይችላሉ።"</string>
-    <string name="permlab_bodySensors" msgid="662918578601619569">"ስራ ላይ በሚውልበት ጊዜ እንደ የልብ ምት ያለ የሰውነት ዳሳሽ ውሂብን መድረስ"</string>
-    <string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"መተግበሪያው ስራ ላይ በሚውልበት ጊዜ እንደ የልብ ምት፣ የሙቀት መጠን እና የደም ኦክሲጅን መቶኛ ያለ የሰውነት ዳሳሽ ውሂብን እንዲደርስ ያስችለዋል።"</string>
+    <string name="permlab_bodySensors" msgid="662918578601619569">"ሥራ ላይ በሚውልበት ጊዜ እንደ የልብ ምት ያለ የሰውነት ዳሳሽ ውሂብን መድረስ"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"መተግበሪያው ሥራ ላይ በሚውልበት ጊዜ እንደ የልብ ምት፣ የሙቀት መጠን እና የደም ኦክሲጅን መቶኛ ያለ የሰውነት ዳሳሽ ውሂብን እንዲደርስ ያስችለዋል።"</string>
     <string name="permlab_bodySensors_background" msgid="4912560779957760446">"ከበስተጀርባ እያለ እንደ የልብ ምት ያለ የሰውነት ዳሳሽ ውሂብን መድረስ"</string>
     <string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"መተግበሪያው ከበስተጀርባ እያለ እንደ የልብ ምት፣ የሙቀት መጠን እና የደም ኦክሲጅን መቶኛ ያለ የሰውነት ዳሳሽ ውሂብን እንዲደርስ ያስችለዋል።"</string>
     <string name="permlab_readCalendar" msgid="6408654259475396200">"የቀን መቁጠሪያ ክስተቶችን እና ዝርዝሮችን አንብብ"</string>
@@ -472,27 +474,27 @@
     <string name="permdesc_writeCalendar" product="tv" msgid="951246749004952706">"ይህ መተግበሪያ በእርስዎ Android TV መሣሪያ ላይ የቀን መቁጠሪያ ክስተቶችን ሊያክል፣ ሊያስወግድ ወይም ሊለውጥ ይችላል። ይህ መተግበሪያ ከቀን መቁጠሪያ የመጡ መስለው የሚታዩ መልእክቶችን ሊልክ ወይም ባለቤቶቹን ሳያሳውቅ ክስተቶችን ሊለውጥ ይችላል።"</string>
     <string name="permdesc_writeCalendar" product="default" msgid="5416380074475634233">"ይህ መተግበሪያ በእርስዎ ስልክ ላይ የቀን መቁጠሪያ ክስተቶችን ሊያክል፣ ሊያስወግድ ወይም ሊለውጥ ይችላል። ይህ መተግበሪያ ከቀን መቁጠሪያ የመጡ መስለው የሚታዩ መልእክቶችን ሊልክ ወይም ባለቤቶቹን ሳያሳውቅ ክስተቶችን ሊለውጥ ይችላል።"</string>
     <string name="permlab_accessLocationExtraCommands" msgid="5162339812057983988">"ተጨማሪ ሥፍራ አቅራቢ ትዕዛዞችን ድረስ።"</string>
-    <string name="permdesc_accessLocationExtraCommands" msgid="355369611979907967">"መተግበሪያው ተጨማሪ የአካባቢ አቅራቢ ትእዛዞችን እንዲደርስ ይፈቅድለታል። ይሄ መተግበሪያው በጂፒኤስ ወይም ሌላ የአካባቢ ምንጮች ስራ ላይ ጣልቃ እንዲገባ ሊፈቅድለት ይችላል።"</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="355369611979907967">"መተግበሪያው ተጨማሪ የአካባቢ አቅራቢ ትእዛዞችን እንዲደርስ ይፈቅድለታል። ይሄ መተግበሪያው በጂፒኤስ ወይም ሌላ የአካባቢ ምንጮች ሥራ ላይ ጣልቃ እንዲገባ ሊፈቅድለት ይችላል።"</string>
     <string name="permlab_accessFineLocation" msgid="6426318438195622966">"መዳረሻ ከፊት ለፊት ብቻ ትክክለኛ ነው"</string>
-    <string name="permdesc_accessFineLocation" msgid="6732174080240016335">"ይህ መተግበሪያ ስራ ላይ ሳለ ከአካባቢ አገልግሎቶች ትክክለኛ አካባቢዎን ማግኘት ይችላል። መተግበሪያው አካባቢን ማግኘት እንዲችል የመሣሪያዎ የአካባቢ አገልግሎቶች መብራት አለበት። ይህ የባትሪ ፍጆታን ሊጨምር ይችላል።"</string>
+    <string name="permdesc_accessFineLocation" msgid="6732174080240016335">"ይህ መተግበሪያ ሥራ ላይ ሳለ ከአካባቢ አገልግሎቶች ትክክለኛ አካባቢዎን ማግኘት ይችላል። መተግበሪያው አካባቢን ማግኘት እንዲችል የመሣሪያዎ የአካባቢ አገልግሎቶች መብራት አለበት። ይህ የባትሪ ፍጆታን ሊጨምር ይችላል።"</string>
     <string name="permlab_accessCoarseLocation" msgid="1561042925407799741">"ከፊት ለፊት ብቻ ግምታዊ አካባቢን ድረስ"</string>
-    <string name="permdesc_accessCoarseLocation" msgid="778521847873199160">"ይህ መተግበሪያ ስራ ላይ ሳለ ከአካባቢ አገልግሎቶች ግምታዊ አካባቢዎን ማግኘት ይችላል። መተግበሪያው አካባቢን ማግኘት እንዲችል የመሣሪያዎ የአካባቢ አገልግሎቶች መብራት አለበት።"</string>
+    <string name="permdesc_accessCoarseLocation" msgid="778521847873199160">"ይህ መተግበሪያ ሥራ ላይ ሳለ ከአካባቢ አገልግሎቶች ግምታዊ አካባቢዎን ማግኘት ይችላል። መተግበሪያው አካባቢን ማግኘት እንዲችል የመሣሪያዎ የአካባቢ አገልግሎቶች መብራት አለበት።"</string>
     <string name="permlab_accessBackgroundLocation" msgid="1721164702777366138">"አካባቢን በበስተጀርባ ድረስ"</string>
-    <string name="permdesc_accessBackgroundLocation" msgid="8264885066095638105">"ይህ መተግበሪያ በማንኛውም ጊዜ አካባቢን መድረስ ይችላል፣ መተግበሪያው ስራ ላይ ባይውልም እንኳ።"</string>
+    <string name="permdesc_accessBackgroundLocation" msgid="8264885066095638105">"ይህ መተግበሪያ በማንኛውም ጊዜ አካባቢን መድረስ ይችላል፣ መተግበሪያው ሥራ ላይ ባይውልም እንኳ።"</string>
     <string name="permlab_modifyAudioSettings" msgid="6129039778010031815">"የድምፅ ቅንብሮችን ለውጥ"</string>
     <string name="permdesc_modifyAudioSettings" msgid="8687227609663124921">"መተግበሪያው አንደ የድምጽ መጠን እና ለውጽአት የትኛውን የድምጽ ማጉያ ጥቅም ላይ እንደዋለ የመሳሰሉ ሁለንተናዊ የድምጽ ቅንብሮችን እንዲያስተካክል ይፈቅድለታል።"</string>
     <string name="permlab_recordAudio" msgid="1208457423054219147">"ኦዲዮ ይቅዱ"</string>
-    <string name="permdesc_recordAudio" msgid="5857246765327514062">"ይህ መተግበሪያ መተግበሪያው ስራ ላይ ሳለ ማይክሮፎኑን በመጠቀም ኦዲዮን መቅዳት ይችላል።"</string>
+    <string name="permdesc_recordAudio" msgid="5857246765327514062">"ይህ መተግበሪያ መተግበሪያው ሥራ ላይ ሳለ ማይክሮፎኑን በመጠቀም ኦዲዮን መቅዳት ይችላል።"</string>
     <string name="permlab_recordBackgroundAudio" msgid="5891032812308878254">"በበስተጀርባ ኦዲዮን ይቅዱ"</string>
     <string name="permdesc_recordBackgroundAudio" msgid="1992623135737407516">"ይህ መተግበሪያ በማናቸውም ጊዜ ማይክራፎኑን በመጠቀም ኦዲዮን መቅዳት ይችላል።"</string>
-    <string name="permlab_detectScreenCapture" msgid="4447042362828799433">"የመተግበሪያ መስኮቶች የማያ ገጽ ቀረጻዎችን ማወቅ"</string>
-    <string name="permdesc_detectScreenCapture" msgid="3485784917960342284">"መተግበሪያው በጥቅም ላይ ሳለ ቅጽበታዊ ገጽ እይታ ሲነሳ ይህ መተግበሪያ ማሳወቂያ ይደርሰዋል።"</string>
+    <string name="permlab_detectScreenCapture" msgid="4447042362828799433">"የመተግበሪያ መስኮቶች የማያ ገፅ ቀረጻዎችን ማወቅ"</string>
+    <string name="permdesc_detectScreenCapture" msgid="3485784917960342284">"መተግበሪያው በጥቅም ላይ ሳለ ቅጽበታዊ ገፅ እይታ ሲነሳ ይህ መተግበሪያ ማሳወቂያ ይደርሰዋል።"</string>
     <string name="permlab_sim_communication" msgid="176788115994050692">"ወደ ሲሙ ትዕዛዞችን መላክ"</string>
     <string name="permdesc_sim_communication" msgid="4179799296415957960">"መተግበሪያው ትዕዛዞችን ወደ ሲሙ እንዲልክ ያስችለዋል። ይሄ በጣማ አደገኛ ነው።"</string>
     <string name="permlab_activityRecognition" msgid="1782303296053990884">"አካላዊ እንቅስቃሴን ለይቶ ማወቅ"</string>
     <string name="permdesc_activityRecognition" msgid="8667484762991357519">"ይህ መተግበሪያ አካላዊ እንቅስቃሴዎን ለይቶ ሊያውቅ ይችላል።"</string>
     <string name="permlab_camera" msgid="6320282492904119413">"ፎቶዎች እና ቪዲዮዎች ያንሱ"</string>
-    <string name="permdesc_camera" msgid="5240801376168647151">"ይህ መተግበሪያ መተግበሪያው ስራ ላይ ሳለ ካሜራውን በመጠቀም ሥዕሎችን ማንሳት እና ቪዲዮዎችን መቅዳት ይችላል።"</string>
+    <string name="permdesc_camera" msgid="5240801376168647151">"ይህ መተግበሪያ መተግበሪያው ሥራ ላይ ሳለ ካሜራውን በመጠቀም ሥዕሎችን ማንሳት እና ቪዲዮዎችን መቅዳት ይችላል።"</string>
     <string name="permlab_backgroundCamera" msgid="7549917926079731681">"በበስተጀርባ ስዕሎችን እና ቪዲዮዎችን ያንሱ"</string>
     <string name="permdesc_backgroundCamera" msgid="1615291686191138250">"ይህ መተግበሪያ በማናቸውም ጊዜ ካሜራውን በመጠቀም ፎቶ ሊያነሳ እና ቪዲዮዎችን ሊቀርጽ ይችላል።"</string>
     <string name="permlab_systemCamera" msgid="3642917457796210580">"ሥዕሎችን ለማንሣት እና ቪዲዮዎችን ለመቅረጽ እንዲችሉ ወደ ሥርዓት ካሜራዎች ለመተግበሪያ ወይም ለአገልግሎት መዳረሻ ይፍቀዱ"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"ነዛሪውን ለመቆጣጠር ለመተግበሪያው ይፈቅዳሉ።"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"መተግበሪያው የንዝረት ሁኔታውን እንዲደርስ ያስችለዋል።"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"በቀጥታ ስልክ ቁጥሮች ደውል"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"መተግበሪያው ያላንተ ጣልቃ ገብነት የስልክ ቁጥሮች ላይ እንዲደውል ይፈቅድለታል። ይህ ያልተጠበቁ ክፍያዎችን ወይም ጥሪዎችን ሊያስከትል ይችላል። ይህ መተግበሪያው የድንገተኛ ስልክ ቁጥሮችን እንዲደውል እንደማይፈቅድለት ልብ በል። ተንኮል አዘል መተግበሪያዎች ያላንተ ማረጋገጫ ጥሪዎችን በማድረግ ገንዘብ ሊያስወጡህ ይችላሉ።"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"መተግበሪያው ያለእርስዎ ጣልቃ ገብነት ወደ ስልክ ቁጥሮች እንዲደውል ያስችለዋል። ይህ ያልተጠበቁ ክፍያዎችን ወይም ጥሪዎችን ሊያስከትል ይችላል። ይሄ መተግበሪያው ወደ የአደጋ ጊዜ ቁጥሮች እንዲደውል የማይፈቅድለት መሆኑን ያስታወሱ። ተንኮል-አዘል መተግበሪያዎች ያለእርስዎ ማረጋገጫ ጥሪዎችን በማድረግ ገንዘብ ሊያስወጡዎት ወይም ገቢ ጥሪዎችን ወደ ሌላ ቁጥር በራስ-ሰር እንዲተላለፉ ወደሚያደርጉት የአገልግሎት አቅራቢ ኮዶች ሊደውሉ ይችላሉ።"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"የአይኤምኤስ ጥሪ አገልግሎትን ይደርሳል"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"መተግበሪያው ያለእርስዎ ጣልቃ ገብነት ጥሪዎችን ለማድረግ የአይኤምኤስ አገልግሎቱን እንዲጠቀም ያስችለዋል።"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"የስልክ ሁኔታና ማንነት አንብብ"</string>
@@ -520,11 +522,11 @@
     <string name="permdesc_acceptHandovers" msgid="7129026180128626870">"መተግበሪያው በሌላ መተግበሪያ ውስጥ የተጀመረ ጥሪ እንዲቀጥል ያስችለዋል።"</string>
     <string name="permlab_readPhoneNumbers" msgid="5668704794723365628">"ስልክ ቁጥሮች ያንብቡ"</string>
     <string name="permdesc_readPhoneNumbers" msgid="7368652482818338871">"መተግበሪያው የመሣሪያውን የስልክ ቁጥሮች እንዲደርስባቸው ይፈቅድለታል።"</string>
-    <string name="permlab_wakeLock" product="automotive" msgid="1904736682319375676">"የመኪና ማያ ገጽ እንደበራ አቆይ"</string>
+    <string name="permlab_wakeLock" product="automotive" msgid="1904736682319375676">"የመኪና ማያ ገፅ እንደበራ አቆይ"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1527660973931694000">"ጡባዊ ከማንቀላፋት ተከላከል"</string>
     <string name="permlab_wakeLock" product="tv" msgid="2856941418123343518">"የእርስዎ Android TV መሣሪያ እንዳይተኛ ይከላከሉ"</string>
     <string name="permlab_wakeLock" product="default" msgid="569409726861695115">"ስልክ ከማንቀላፋት ተከላከል"</string>
-    <string name="permdesc_wakeLock" product="automotive" msgid="5995045369683254571">"መተግበሪያው የመኪናው ማያ ገጽ እንደበራ እንዲያቆየው ያስችለዋል።"</string>
+    <string name="permdesc_wakeLock" product="automotive" msgid="5995045369683254571">"መተግበሪያው የመኪናው ማያ ገፅ እንደበራ እንዲያቆየው ያስችለዋል።"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="2441742939101526277">"ጡባዊውን ከመተኛት መከልከል ለመተግበሪያው ይፈቅዳሉ።"</string>
     <string name="permdesc_wakeLock" product="tv" msgid="2329298966735118796">"የእርስዎን Android TV ከመተኛት እንዲከላከል ለመተግበሪያው ይፈቅድለታል።"</string>
     <string name="permdesc_wakeLock" product="default" msgid="3689523792074007163">"ስልኩን ከመተኛት መከልከል ለመተግበሪያው ይፈቅዳሉ።"</string>
@@ -588,20 +590,22 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"እንደ የተመዘገቡ እርዳታዎች እና የጉዞ መሥመር መዳረሻ የመሳሰለ ተመራጭ nfc የክፍያ አገልግሎት መረጃን ለማግኘት ለመተግበሪያው ያፈቅድለታል።"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"ቅርብ የግኑኙነትመስክ (NFC) ተቆጣጠር"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"ከቅርብ ግኑኙነት መስክ (NFC) መለያዎች፣ ካርዶች እና አንባቢ ጋር ለማገናኘት ለመተግበሪያው ይፈቅዳሉ።"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"የክፍለ አካል ግብይት ክስተትን ደህንነቱ የተጠበቀ ያድርጉ"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"ደህንነቱ በተጠበቀ ክፍለ አካል ላይ እየተከሰቱ ስላሉ ግብይቶች መተግበሪያው መረጃ እንዲቀበል ይፈቅዳል።"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"የማያ ገጽዎን መቆለፊያ ያሰናክሉ"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"መተግበሪያው መቆለፊያውና ማንኛውም የተጎዳኘ የይለፍ ቃል ደህንነት እንዲያሰናክል ይፈቅድለታል። ለምሳሌ ስልኩ ገቢ የስልክ ጥሪ በሚቀበልበት ጊዜ መቆለፊያውን ያሰናክልና ከዚያም ጥሪው ሲጠናቀቅ መቆለፊያውን በድጋሚ ያነቃዋል።"</string>
-    <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"የማያ ገጽ መቆለፊያ ውስብስብነትን ጠይቅ"</string>
-    <string name="permdesc_requestPasswordComplexity" msgid="1130556896836258567">"መተግበሪያው የማያ ገጽ መቆለፊያው ውስብስብነት ደረጃ (ከፍተኛ፣ መካከለኛ፣ ዝቅተኛ ወይም ምንም) እንዲያውቅ ያስችለዋል፣ ይህም ሊሆኑ የሚችለው የማያ ገጽ መቆለፊያው ርዝመት እና ዓይነት ክልል ያመለክታል። መተግበሪያው እንዲሁም ለተጠቃሚዎች የማያ ገጽ መቆለፊያውን ወደተወሰነ ደረጃ እንዲያዘምኑት ሊጠቁማቸው ይችላል። የማያ ገጽ መቆለፊያው በስነጣ አልባ ጽሁፍ እንደማይከማች ልብ ይበሉ፣ በዚህም መተግበሪያው ትክክለኛውን የይለፍ ቃል አያውቅም።"</string>
+    <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"የማያ ገፅ መቆለፊያ ውስብስብነትን ጠይቅ"</string>
+    <string name="permdesc_requestPasswordComplexity" msgid="1130556896836258567">"መተግበሪያው የማያ ገፅ መቆለፊያው ውስብስብነት ደረጃ (ከፍተኛ፣ መካከለኛ፣ ዝቅተኛ ወይም ምንም) እንዲያውቅ ያስችለዋል፣ ይህም ሊሆኑ የሚችለው የማያ ገፅ መቆለፊያው ርዝመት እና ዓይነት ክልል ያመለክታል። መተግበሪያው እንዲሁም ለተጠቃሚዎች የማያ ገፅ መቆለፊያውን ወደተወሰነ ደረጃ እንዲያዘምኑት ሊጠቁማቸው ይችላል። የማያ ገፅ መቆለፊያው በስነጣ አልባ ጽሁፍ እንደማይከማች ልብ ይበሉ፣ በዚህም መተግበሪያው ትክክለኛውን የይለፍ ቃል አያውቅም።"</string>
     <string name="permlab_postNotification" msgid="4875401198597803658">"ማሳወቂያዎች አሳይ"</string>
     <string name="permdesc_postNotification" msgid="5974977162462877075">"መተግበሪያው ማሳወቂያዎችን እንዲያሳይ ያስችለዋል"</string>
     <string name="permlab_turnScreenOn" msgid="219344053664171492">"ማያ ገጹን አብራ"</string>
     <string name="permdesc_turnScreenOn" msgid="4394606875897601559">"መተግበሪያው ማያ ገጹን እንዲያበራ ይፈቅድለታል።"</string>
     <string name="permlab_useBiometric" msgid="6314741124749633786">"ባዮሜትራዊ ሃርድዌርን መጠቀም"</string>
-    <string name="permdesc_useBiometric" msgid="7502858732677143410">"መተግበሪያው የባዮሜትራዊ ሃርድዌር ለማረጋገጥ ስራ እንዲጠቀም ያስችለዋል"</string>
+    <string name="permdesc_useBiometric" msgid="7502858732677143410">"መተግበሪያው የባዮሜትራዊ ሃርድዌር ለማረጋገጥ ሥራ እንዲጠቀም ያስችለዋል"</string>
     <string name="permlab_manageFingerprint" msgid="7432667156322821178">"የጣት አሻራ ሃርድዌርን አስተዳድር"</string>
     <string name="permdesc_manageFingerprint" msgid="2025616816437339865">"መተግበሪያው ጥቅም ላይ እንዲውሉ የጣት አሻራ ቅንብር ደንቦችን ለማከል እና ለመሰረዝ የሚያስችሉ ስልቶችን እንዲያስጀምር ያስችለዋል።"</string>
     <string name="permlab_useFingerprint" msgid="1001421069766751922">"የጣት አሻራ ሃርድዌርን ተጠቀም"</string>
-    <string name="permdesc_useFingerprint" msgid="412463055059323742">"መተግበሪያው የጣት አሻራ ሃርድዌር ለማረጋገጥ ስራ እንዲጠቀም ያስችለዋል"</string>
+    <string name="permdesc_useFingerprint" msgid="412463055059323742">"መተግበሪያው የጣት አሻራ ሃርድዌር ለማረጋገጥ ሥራ እንዲጠቀም ያስችለዋል"</string>
     <string name="permlab_audioWrite" msgid="8501705294265669405">"የሙዚቃ ስብስብዎን መቀየር"</string>
     <string name="permdesc_audioWrite" msgid="8057399517013412431">"መተግበሪያው የሙዚቃ ስብስብዎን እንዲቀይረው ያስችለዋል።"</string>
     <string name="permlab_videoWrite" msgid="5940738769586451318">"የቪዲዮ ስብስብዎን መቀየር"</string>
@@ -611,18 +615,21 @@
     <string name="permlab_mediaLocation" msgid="7368098373378598066">"አካባቢዎችን ከሚዲያ ስብስብዎ ማንበብ"</string>
     <string name="permdesc_mediaLocation" msgid="597912899423578138">"መተግበሪያው አካባቢዎችን ከሚዲያ ስብስብዎ እንዲያነብብ ያስችለዋል።"</string>
     <string name="biometric_app_setting_name" msgid="3339209978734534457">"ባዮሜትሪኮችን ይጠቀሙ"</string>
-    <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ባዮሜትሪክስ ወይም ማያ ገጽ መቆለፊያን ይጠቀሙ"</string>
+    <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ባዮሜትሪክስ ወይም ማያ ገፅ መቆለፊያን ይጠቀሙ"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"እርስዎን መሆንዎን ያረጋግጡ"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"ለመቀጠል ባዮሜትሪክዎን ይጠቀሙ"</string>
-    <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"ለመቀጠል የባዮሜትሪክ ወይም የማያ ገጽ ቁልፍዎን ይጠቀሙ"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"ለመቀጠል የእርስዎን የጣት አሻራ ይጠቀሙ"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"ለመቀጠል የእርስዎን መልክ ይጠቀሙ"</string>
+    <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"ለመቀጠል የባዮሜትሪክ ወይም የማያ ገፅ ቁልፍዎን ይጠቀሙ"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"ባዮሜትራዊ ሃርድዌር አይገኝም"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"ማረጋገጥ ተሰርዟል"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"አልታወቀም"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"መልክ አልታወቀም"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"ማረጋገጥ ተሰርዟል"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"ምንም ፒን፣ ሥርዓተ ጥለት ወይም የይለፍ ቃል አልተቀናበረም"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"ማረጋገጥ ላይ ስህተት"</string>
-    <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"የማያ ገጽ መቆለፊን ይጠቀሙ"</string>
-    <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ለመቀጠል የማያ ገጽ ቁልፍዎን ያስገቡ"</string>
+    <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"የማያ ገፅ መቆለፊን ይጠቀሙ"</string>
+    <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ለመቀጠል የማያ ገፅ ቁልፍዎን ያስገቡ"</string>
     <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"ዳሳሹን በደንብ ይጫኑት"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"የጣት አሻራን መለየት አልተቻለም። እንደገና ይሞክሩ።"</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"የጣት አሻራ ዳሳሽን ያጽዱ እና እንደገና ይሞክሩ"</string>
@@ -646,8 +653,8 @@
     <string name="fingerprint_error_timeout" msgid="7361192266621252164">"የጣት አሻራ ውቅረት ጊዜው አብቅቷል። እንደገና ይሞክሩ።"</string>
     <string name="fingerprint_error_canceled" msgid="540026881380070750">"የጣት አሻራ ስርዓተ ክወና ተትቷል።"</string>
     <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"የጣት አሻራ ክወና በተጠቃሚ ተሰርዟል።"</string>
-    <string name="fingerprint_error_lockout" msgid="6626753679019351368">"በጣም ብዙ ሙከራዎች። በምትኩ የማያ ገጽ መቆለፊያን ይጠቀሙ።"</string>
-    <string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"በጣም ብዙ ሙከራዎች። በምትኩ የማያ ገጽ መቆለፊያን ይጠቀሙ።"</string>
+    <string name="fingerprint_error_lockout" msgid="6626753679019351368">"በጣም ብዙ ሙከራዎች። በምትኩ የማያ ገፅ መቆለፊያን ይጠቀሙ።"</string>
+    <string name="fingerprint_error_lockout_permanent" msgid="9060651300306264843">"በጣም ብዙ ሙከራዎች። በምትኩ የማያ ገፅ መቆለፊያን ይጠቀሙ።"</string>
     <string name="fingerprint_error_unable_to_process" msgid="2446280592818621224">"የጣት አሻራን ማሰናዳት አልተቻለም። እንደገና ይሞክሩ።"</string>
     <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"ምንም የጣት አሻራዎች አልተመዘገቡም።"</string>
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ይህ መሣሪያ የጣት አሻራ ዳሳሽ የለውም።"</string>
@@ -656,9 +663,9 @@
     <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>
+    <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"የጣት አሻራ ወይም የማያ ገፅ መቆለፊያ ይጠቀሙ"</string>
     <string name="fingerprint_dialog_default_subtitle" msgid="3879832845486835905">"ለመቀጠል የእርስዎን የጣት አሻራ ይጠቀሙ"</string>
-    <string name="fingerprint_or_screen_lock_dialog_default_subtitle" msgid="5195808203117992200">"ለመቀጠል የጣት አሻራዎን ወይም የማያ ገጽ ቁልፍዎን ይጠቀሙ"</string>
+    <string name="fingerprint_or_screen_lock_dialog_default_subtitle" msgid="5195808203117992200">"ለመቀጠል የጣት አሻራዎን ወይም የማያ ገፅ ቁልፍዎን ይጠቀሙ"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
     <string name="fingerprint_error_vendor_unknown" msgid="4170002184907291065">"የሆነ ችግር ተፈጥሯል። እንደገና ይሞክሩ።"</string>
@@ -709,16 +716,15 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"የፊት ሥርዓተ ክወና ተሰርዟል።"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"በመልክ መክፈት በተጠቃሚ ተሰርዟል"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"ከልክ በላይ ብዙ ሙከራዎች። በኋላ ላይ እንደገና ይሞክሩ።"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
-    <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"በጣም ብዙ ሙከራዎች። በምትኩ የማያ ገጽ መቆለፊያን ያስገቡ።"</string>
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"በጣም ብዙ ሙከራዎች። በመልክ መክፈት አይገኝም።"</string>
+    <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"በጣም ብዙ ሙከራዎች። በምትኩ የማያ ገፅ መቆለፊያን ያስገቡ።"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ፊትን ማረጋገጥ አይቻልም። እንደገና ይሞክሩ።"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"በመልክ መክፈትን አላዋቀሩም።"</string>
     <string name="face_error_hw_not_present" msgid="7940978724978763011">"በመልክ መክፈት በዚህ መሣሪያ ላይ አይደገፍም"</string>
     <string name="face_error_security_update_required" msgid="5076017208528750161">"ዳሳሽ ለጊዜው ተሰናክሏል።"</string>
     <string name="face_name_template" msgid="3877037340223318119">"ፊት <xliff:g id="FACEID">%d</xliff:g>"</string>
     <string name="face_app_setting_name" msgid="5854024256907828015">"በመልክ መክፈትን ይጠቀሙ"</string>
-    <string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"የመልክ ወይም የማያ ገጽ መቆለፊያን ይጠቀሙ"</string>
+    <string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"የመልክ ወይም የማያ ገፅ መቆለፊያን ይጠቀሙ"</string>
     <string name="face_dialog_default_subtitle" msgid="6620492813371195429">"ለመቀጠል መልክዎን ይጠቀሙ"</string>
     <string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"ለመቀጠል መልክዎን ወይም የማያ ገጽዎን መቆለፊያ ይጠቀሙ"</string>
   <string-array name="face_error_vendor">
@@ -751,8 +757,8 @@
     <string name="permdesc_register_call_provider" msgid="4201429251459068613">"መተግበሪያው አዲስ የቴሌኮም ግንኙነቶችን እንዲመዘግብ ያስችለዋል።"</string>
     <string name="permlab_connection_manager" msgid="3179365584691166915">"የቴሌኮም ግንኙነቶችን ያቀናብራል"</string>
     <string name="permdesc_connection_manager" msgid="1426093604238937733">"መተግበሪያው የቴሌኮም ግንኙነቶችን እንዲያቀናብር ያስችለዋል።"</string>
-    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"ከውስጠ-ጥሪ ማያ ገጽ ጋር መስተጋብር ይፈጥራል"</string>
-    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"መተግበሪያው ተጠቃሚው በጥሪ ውስጥ ያለውን ማያ ገጽ መቼ እና እንዴት ማየት እንደሚችል እንዲቆጣጠር ይፈቅድለታል።"</string>
+    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"ከውስጠ-ጥሪ ማሳያ ገፅ ጋር መስተጋብር ይፈጥራል"</string>
+    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"መተግበሪያው ተጠቃሚው በጥሪ ውስጥ ያለውን ማያ ገፅ መቼ እና እንዴት ማየት እንደሚችል እንዲቆጣጠር ይፈቅድለታል።"</string>
     <string name="permlab_bind_connection_service" msgid="5409268245525024736">"ከስልክ አገልግሎቶች ጋር መስተጋብር ይፈጥራል"</string>
     <string name="permdesc_bind_connection_service" msgid="6261796725253264518">"መተግበሪያው ጥሪዎችን እንዲያደርግ/እንዲቀበል ከስልክ አገልግሎቶች ጋር መስተጋብር እንዲፈጥር ያስችለዋል።"</string>
     <string name="permlab_control_incall_experience" msgid="6436863486094352987">"የውስጠ-ጥሪ ተጠቃሚ ተሞክሮ ያቀርባል"</string>
@@ -784,7 +790,7 @@
     <string name="permlab_removeDrmCertificates" msgid="710576248717404416">"የDRM እውቅና ማረጋገጫዎችን ያስወግዳል"</string>
     <string name="permdesc_removeDrmCertificates" msgid="4068445390318355716">"አንድ መተግበሪያ የDRM እውቅና ማረጋገጫዎችን እንዲያስወግድ ያስችለዋል። ለመደበኛ መተግበሪያዎች በጭራሽ ሊያስፈልግ አይገባም።"</string>
     <string name="permlab_bindCarrierMessagingService" msgid="3363450860593096967">"ወደሞባይል አገልግሎት ሰጪ የመልዕክት አገልግሎት አያይዝ"</string>
-    <string name="permdesc_bindCarrierMessagingService" msgid="6316457028173478345">"ያዢው በሞባይል አገልግሎት ሰጪ የመልዕክት አላላክ አገልግሎት ላይ ከፍተኛውን ደረጃ በይነ ገጽ እንዲይዝ ይፈቅድለታል። ለመደበኛ መተግበሪያ በጭራሽ አያስፈልግም።"</string>
+    <string name="permdesc_bindCarrierMessagingService" msgid="6316457028173478345">"ያዢው በሞባይል አገልግሎት ሰጪ የመልዕክት አላላክ አገልግሎት ላይ ከፍተኛውን ደረጃ በይነ ገፅ እንዲይዝ ይፈቅድለታል። ለመደበኛ መተግበሪያ በጭራሽ አያስፈልግም።"</string>
     <string name="permlab_bindCarrierServices" msgid="2395596978626237474">"ከአገልግሎት አቅራቢ አገልግሎቶች ጋር እሰር"</string>
     <string name="permdesc_bindCarrierServices" msgid="9185614481967262900">"ያዢው የአገልግሎት አቅራቢ አገልግሎቶችን እንዲያስር ይፈቅድለታል። ለመደበኛ መተግበሪያዎች በጭራሽ ሊያስፈልግ አይገባም።"</string>
     <string name="permlab_access_notification_policy" msgid="5524112842876975537">"አትረብሽን ድረስበት"</string>
@@ -792,7 +798,7 @@
     <string name="permlab_startViewPermissionUsage" msgid="1504564328641112341">"የእይታ ፈቃድ መጠቀምን መጀመር"</string>
     <string name="permdesc_startViewPermissionUsage" msgid="2820325605959586538">"ያዢው ለአንድ መተግበሪያ የፈቃድ አጠቃቀሙን እንዲያስጀምር ያስችለዋል። ለመደበኛ መተግበሪያዎች በጭራሽ ሊያስፈልግ አይገባም።"</string>
     <string name="permlab_startReviewPermissionDecisions" msgid="8690578688476599284">"የእይታ ፈቃድ ውሳኔዎችን ይጀምሩ"</string>
-    <string name="permdesc_startReviewPermissionDecisions" msgid="2775556853503004236">"ያዢው የፈቃድ ውሳኔዎችን ለመገምገም ማያ ገጽ እንዲጀምሩ ያስችላቸዋል። ለመደበኛ መተግበሪያዎች በጭራሽ ሊያስፈልግ አይገባም።"</string>
+    <string name="permdesc_startReviewPermissionDecisions" msgid="2775556853503004236">"ያዢው የፈቃድ ውሳኔዎችን ለመገምገም ማያ ገፅ እንዲጀምሩ ያስችላቸዋል። ለመደበኛ መተግበሪያዎች በጭራሽ ሊያስፈልግ አይገባም።"</string>
     <string name="permlab_startViewAppFeatures" msgid="7955084203185903001">"የመተግበሪያ ባህሪያትን ማየት መጀመር"</string>
     <string name="permdesc_startViewAppFeatures" msgid="7207240860165206107">"ያዢው የአንድ መተግበሪያ የባህሪያት መረጃን ማየት እንዲጀምር ያስችለዋል።"</string>
     <string name="permlab_highSamplingRateSensors" msgid="3941068435726317070">"የዳሳሽ ውሂቡን በከፍተኛ የናሙና ብዛት ላይ ይድረሱበት"</string>
@@ -800,7 +806,7 @@
     <string name="permlab_updatePackagesWithoutUserAction" msgid="3363272609642618551">"መተግበሪያን ያለ ተጠቃሚ እርምጃ ያዘምኑ"</string>
     <string name="permdesc_updatePackagesWithoutUserAction" msgid="4567739631260526366">"ያዢው ያለ ተጠቃሚ እርምጃ ከዚህ በፊት የጫነውን መተግበሪያ እንዲያዘምነው ይፈቅዳል"</string>
     <string name="policylab_limitPassword" msgid="4851829918814422199">"የይለፍ ቃል ደንቦች አዘጋጅ"</string>
-    <string name="policydesc_limitPassword" msgid="4105491021115793793">"በማያ ገጽ መቆለፊያ የይለፍ ቃሎች እና ፒኖች ውስጥ የሚፈቀዱ ቁምፊዎችን እና ርዝመታቸውን ተቆጣጠር።"</string>
+    <string name="policydesc_limitPassword" msgid="4105491021115793793">"በማያ ገፅ መቆለፊያ የይለፍ ቃሎች እና ፒኖች ውስጥ የሚፈቀዱ ቁምፊዎችን እና ርዝመታቸውን ተቆጣጠር።"</string>
     <string name="policylab_watchLogin" msgid="7599669460083719504">"የማሳያ-ክፈት ሙከራዎችን ክትትል ያድርጉባቸው"</string>
     <string name="policydesc_watchLogin" product="tablet" msgid="2388436408621909298">"ማሳያውን በምትከፍትበት ጊዜ በስህተት የተተየቡ የይለፍ ቃሎችን ቁጥር ተቆጣጠር፤ እና ጡባዊ ተኮውን ቆልፍ  ወይም በጣም ብዙ የተሳሳቱ የይለፍ ቃሎች ከተተየቡ የጡባዊ ተኮን ውሂብ አጥፋ፡፡"</string>
     <string name="policydesc_watchLogin" product="tv" msgid="2140588224468517507">"ማያ ገጹን ሲከፍቱ በትክክል ያልተተየቡ የይለፍ ቃላት ብዛት ተከታተል፣ እና በጣም ብዙ ትክክል ያልሆኑ የይለፍ ቃላት ከተተየቡ የእርስዎን Android TV ን ቆልፍ ወይም ሁሉንም የእርስዎን Android TV ደምስስ።"</string>
@@ -811,7 +817,7 @@
     <string name="policydesc_watchLogin_secondaryUser" product="automotive" msgid="7180857406058327941">"ማያ ገጹን ሲያስከፍቱ በትክክል ያልተተየቡ የይለፍ ቃላት ብዛት ተከታተል፣ እና በጣም ብዙ ትክክል ያልሆኑ የይለፍ ቃላት ከተተየቡ የኢንፎቴይንመንት ስርዓቱን ቆልፍ ወይም ሁሉንም የዚህን ተጠቃሚ ውሂብ ደምስስ።"</string>
     <string name="policydesc_watchLogin_secondaryUser" product="default" msgid="9177645136475155924">"ማያ ገጹን ሲያስከፍቱ በትክክል ያልተተየቡ የይለፍ ቃላት ብዛት ተከታተል፣ እና በጣም ብዙ ትክክል ያልሆኑ የይለፍ ቃላት ከተተየቡ ስልኩን ቆልፍ ወይም ሁሉንም የዚህን ተጠቃሚ ውሂብ ደምስስ።"</string>
     <string name="policylab_resetPassword" msgid="214556238645096520">"የማያ ገጹን መቆለፊያ መለወጥ"</string>
-    <string name="policydesc_resetPassword" msgid="4626419138439341851">"የማያ ገጽ መቆለፊያውን ለውጥ።"</string>
+    <string name="policydesc_resetPassword" msgid="4626419138439341851">"የማያ ገፅ መቆለፊያውን ለውጥ።"</string>
     <string name="policylab_forceLock" msgid="7360335502968476434">"ማያ ቆልፍ"</string>
     <string name="policydesc_forceLock" msgid="1008844760853899693">"ማያው እንዴት እና መቼ እንደሚቆልፍ ተቆጣጠር።"</string>
     <string name="policylab_wipeData" msgid="1359485247727537311">"ሁሉንም ውሂብ መሰረዝ"</string>
@@ -827,18 +833,18 @@
     <string name="policydesc_wipeData_secondaryUser" product="default" msgid="2788325512167208654">"ያለምንም ማስጠንቀቂያ የዚህን ስልክ የተጠቃሚ ውሂብ ደምስስ።"</string>
     <string name="policylab_setGlobalProxy" msgid="215332221188670221">"የመሣሪያውን ሁሉንም ፕሮክሲ አዘጋጅ"</string>
     <string name="policydesc_setGlobalProxy" msgid="7149665222705519604">"መመሪያ ነቅቶ እያለ ጥቅም ላይ ሊውል የሚችለውን የመሣሪያውን ሁሉንተናዊ ተኪ አዘጋጅ። የመሣሪያ ባለቤት ብቻ የሁሉንተናዊ ተኪውን ማዘጋጀት ይችላል።"</string>
-    <string name="policylab_expirePassword" msgid="6015404400532459169">"የማያ ገጽ መቆለፊያ የአገልግሎት ማብቂያ ጊዜን አዘጋጅ"</string>
-    <string name="policydesc_expirePassword" msgid="9136524319325960675">"የማያ ገጽ መቆለፊያ የይለፍ ቃል፣ ፒን፣ ወይም ስርዓተ ጥለት በምን ያህል ጊዜ ተደጋግሞ መለወጥ እንዳለበት ለውጥ።"</string>
+    <string name="policylab_expirePassword" msgid="6015404400532459169">"የማያ ገፅ መቆለፊያ የአገልግሎት ማብቂያ ጊዜን አዘጋጅ"</string>
+    <string name="policydesc_expirePassword" msgid="9136524319325960675">"የማያ ገፅ መቆለፊያ የይለፍ ቃል፣ ፒን፣ ወይም ስርዓተ ጥለት በምን ያህል ጊዜ ተደጋግሞ መለወጥ እንዳለበት ለውጥ።"</string>
     <string name="policylab_encryptedStorage" msgid="9012936958126670110">"ማከማቻ ማመስጠር አዘጋጅ"</string>
     <string name="policydesc_encryptedStorage" msgid="1102516950740375617">"የተከማቸ ትግበራ ውሂብ የተመሰጠረ እንዲሆን ጠይቅ።"</string>
     <string name="policylab_disableCamera" msgid="5749486347810162018">"ካሜራዎችን አቦዝን"</string>
     <string name="policydesc_disableCamera" msgid="3204405908799676104">"የሁሉንም መሣሪያ ካሜራዎች መጠቀም ከልክል።"</string>
-    <string name="policylab_disableKeyguardFeatures" msgid="5071855750149949741">"የጥቂት ማያ ገጽ ቁልፍ ባህሪዎችን አቦዝን"</string>
-    <string name="policydesc_disableKeyguardFeatures" msgid="6641673177041195957">"የጥቂት ማያ ገጽ ቁልፍ ባህሪዎችን ተከላከል።"</string>
+    <string name="policylab_disableKeyguardFeatures" msgid="5071855750149949741">"የጥቂት ማያ ገፅ ቁልፍ ባህሪዎችን አቦዝን"</string>
+    <string name="policydesc_disableKeyguardFeatures" msgid="6641673177041195957">"የጥቂት ማያ ገፅ ቁልፍ ባህሪዎችን ተከላከል።"</string>
   <string-array name="phoneTypes">
     <item msgid="8996339953292723951">"መነሻ"</item>
     <item msgid="7740243458912727194">"ተንቀሳቃሽ"</item>
-    <item msgid="8526146065496663766">"ስራ"</item>
+    <item msgid="8526146065496663766">"ሥራ"</item>
     <item msgid="8150904584178569699">"የስራ ፋክስ"</item>
     <item msgid="4537253139152229577">"የቤት ፋክስ"</item>
     <item msgid="6751245029698664340">"ምልክት  ማድረጊያ"</item>
@@ -847,24 +853,24 @@
   </string-array>
   <string-array name="emailAddressTypes">
     <item msgid="7786349763648997741">"መነሻ"</item>
-    <item msgid="435564470865989199">"ስራ"</item>
+    <item msgid="435564470865989199">"ሥራ"</item>
     <item msgid="4199433197875490373">"ሌላ"</item>
     <item msgid="3233938986670468328">"ብጁ"</item>
   </string-array>
   <string-array name="postalAddressTypes">
     <item msgid="3861463339764243038">"መነሻ"</item>
-    <item msgid="5472578890164979109">"ስራ"</item>
+    <item msgid="5472578890164979109">"ሥራ"</item>
     <item msgid="5718921296646594739">"ሌላ"</item>
     <item msgid="5523122236731783179">"ብጁ"</item>
   </string-array>
   <string-array name="imAddressTypes">
     <item msgid="588088543406993772">"መነሻ"</item>
-    <item msgid="5503060422020476757">"ስራ"</item>
+    <item msgid="5503060422020476757">"ሥራ"</item>
     <item msgid="2530391194653760297">"ሌላ"</item>
     <item msgid="7640927178025203330">"ብጁ"</item>
   </string-array>
   <string-array name="organizationTypes">
-    <item msgid="6144047813304847762">"ስራ"</item>
+    <item msgid="6144047813304847762">"ሥራ"</item>
     <item msgid="7402720230065674193">"ሌላ"</item>
     <item msgid="808230403067569648">"ብጁ"</item>
   </string-array>
@@ -881,7 +887,7 @@
     <string name="phoneTypeCustom" msgid="5120365721260686814">"ብጁ"</string>
     <string name="phoneTypeHome" msgid="3880132427643623588">"መነሻ"</string>
     <string name="phoneTypeMobile" msgid="1178852541462086735">"ተንቀሳቃሽ"</string>
-    <string name="phoneTypeWork" msgid="6604967163358864607">"ስራ"</string>
+    <string name="phoneTypeWork" msgid="6604967163358864607">"ሥራ"</string>
     <string name="phoneTypeFaxWork" msgid="6757519896109439123">"የስራ ፋክስ"</string>
     <string name="phoneTypeFaxHome" msgid="6678559953115904345">"የቤት ፋክስ"</string>
     <string name="phoneTypePager" msgid="576402072263522767">"ምልክት  ማድረጊያ"</string>
@@ -905,16 +911,16 @@
     <string name="eventTypeOther" msgid="530671238533887997">"ሌላ"</string>
     <string name="emailTypeCustom" msgid="1809435350482181786">"ብጁ"</string>
     <string name="emailTypeHome" msgid="1597116303154775999">"መነሻ"</string>
-    <string name="emailTypeWork" msgid="2020095414401882111">"ስራ"</string>
+    <string name="emailTypeWork" msgid="2020095414401882111">"ሥራ"</string>
     <string name="emailTypeOther" msgid="5131130857030897465">"ሌላ"</string>
     <string name="emailTypeMobile" msgid="787155077375364230">"ተንቀሳቃሽ"</string>
     <string name="postalTypeCustom" msgid="5645590470242939129">"ብጁ"</string>
     <string name="postalTypeHome" msgid="7562272480949727912">"መነሻ"</string>
-    <string name="postalTypeWork" msgid="8553425424652012826">"ስራ"</string>
+    <string name="postalTypeWork" msgid="8553425424652012826">"ሥራ"</string>
     <string name="postalTypeOther" msgid="7094245413678857420">"ሌላ"</string>
     <string name="imTypeCustom" msgid="5653384545085765570">"ብጁ"</string>
     <string name="imTypeHome" msgid="6996507981044278216">"መነሻ"</string>
-    <string name="imTypeWork" msgid="2099668940169903123">"ስራ"</string>
+    <string name="imTypeWork" msgid="2099668940169903123">"ሥራ"</string>
     <string name="imTypeOther" msgid="8068447383276219810">"ሌላ"</string>
     <string name="imProtocolCustom" msgid="4437878287653764692">"ብጁ"</string>
     <string name="imProtocolAim" msgid="4050198236506604378">"AIM"</string>
@@ -926,7 +932,7 @@
     <string name="imProtocolIcq" msgid="2410325380427389521">"ICQ"</string>
     <string name="imProtocolJabber" msgid="7919269388889582015">"Jabber"</string>
     <string name="imProtocolNetMeeting" msgid="4985002408136148256">"NetMeeting"</string>
-    <string name="orgTypeWork" msgid="8684458700669564172">"ስራ"</string>
+    <string name="orgTypeWork" msgid="8684458700669564172">"ሥራ"</string>
     <string name="orgTypeOther" msgid="5450675258408005553">"ሌላ"</string>
     <string name="orgTypeCustom" msgid="1126322047677329218">"ብጁ"</string>
     <string name="relationTypeCustom" msgid="282938315217441351">"ብጁ"</string>
@@ -946,7 +952,7 @@
     <string name="relationTypeSpouse" msgid="6916682664436031703">"የትዳር ጓደኛ"</string>
     <string name="sipAddressTypeCustom" msgid="6283889809842649336">"ብጁ"</string>
     <string name="sipAddressTypeHome" msgid="5918441930656878367">"መነሻ"</string>
-    <string name="sipAddressTypeWork" msgid="7873967986701216770">"ስራ"</string>
+    <string name="sipAddressTypeWork" msgid="7873967986701216770">"ሥራ"</string>
     <string name="sipAddressTypeOther" msgid="6317012577345187275">"ሌላ"</string>
     <string name="quick_contacts_not_available" msgid="1262709196045052223">"ምንም መተግበሪያ ይህንን እውቂያ ለመመልከት አልተገኘም።"</string>
     <string name="keyguard_password_enter_pin_code" msgid="6401406801060956153">"ፒን ኮድ ተይብ"</string>
@@ -1058,12 +1064,12 @@
     <string name="factorytest_not_system" msgid="5658160199925519869">"የፋብሪካ_ ሙከራ ርምጃበ/system/app አካታች ውስጥ የተጫነ ብቻ ተደግፏል።"</string>
     <string name="factorytest_no_action" msgid="339252838115675515">"የፋብሪካ_ሙከራ ርምጃ የሚያቀርብምንም አካታች አልተገኘም።"</string>
     <string name="factorytest_reboot" msgid="2050147445567257365">"ድጋሚ አስነሳ"</string>
-    <string name="js_dialog_title" msgid="7464775045615023241">"በ«<xliff:g id="TITLE">%s</xliff:g>» ያለው ገጽ ይህን ይላል፦"</string>
+    <string name="js_dialog_title" msgid="7464775045615023241">"በ«<xliff:g id="TITLE">%s</xliff:g>» ያለው ገፅ ይህን ይላል፦"</string>
     <string name="js_dialog_title_default" msgid="3769524569903332476">"ጃቫስክሪፕት"</string>
     <string name="js_dialog_before_unload_title" msgid="7012587995876771246">"አሰሳን አረጋግጥ"</string>
-    <string name="js_dialog_before_unload_positive_button" msgid="4274257182303565509">"ከዚህ ገጽ ውጣ"</string>
+    <string name="js_dialog_before_unload_positive_button" msgid="4274257182303565509">"ከዚህ ገፅ ውጣ"</string>
     <string name="js_dialog_before_unload_negative_button" msgid="3873765747622415310">"እዚህ ገፅ ላይ ቆይ"</string>
-    <string name="js_dialog_before_unload" msgid="7213364985774778744">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nእርግጠኛ ነዎት ከዚህ ገጽ ወደ ሌላ ቦታ መሄድ ይፈልጋሉ?"</string>
+    <string name="js_dialog_before_unload" msgid="7213364985774778744">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nእርግጠኛ ነዎት ከዚህ ገፅ ወደ ሌላ ቦታ መሄድ ይፈልጋሉ?"</string>
     <string name="autofill_window_title" msgid="4379134104008111961">"በ<xliff:g id="SERVICENAME">%1$s</xliff:g> በራስ-ሙላ"</string>
     <string name="permlab_setAlarm" msgid="1158001610254173567">"ማንቂያ አስቀምጥ"</string>
     <string name="permdesc_setAlarm" msgid="2185033720060109640">"በተጫነው የማንቂያ ሰዓት መተግበሪያ ውስጥ ማንቅያን ለማደራጀት ለመተግበሪያው ይፈቅዳሉ፡፡አንዳንድ የማንቂያ ሰዓት መተግበሪያዎች ይሄንን ባህሪ ላይፈፅሙ ይችላሉ፡፡"</string>
@@ -1391,8 +1397,8 @@
     <string name="share_remote_bugreport_action" msgid="7630880678785123682">"አጋራ"</string>
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"አትቀበል"</string>
     <string name="select_input_method" msgid="3971267998568587025">"የግቤት ስልት ምረጥ"</string>
-    <string name="show_ime" msgid="6406112007347443383">"አካላዊ የቁልፍ ሰሌዳ ገቢር ሆኖ ሳለ በማያ ገጽ ላይ አቆየው"</string>
-    <string name="hardware" msgid="1800597768237606953">"ምናባዊ የቁልፍ ሰሌዳን አሳይ"</string>
+    <string name="show_ime" msgid="6406112007347443383">"አካላዊ የቁልፍ ሰሌዳ ገቢር ሆኖ ሳለ በማያ ገፅ ላይ አቆየው"</string>
+    <string name="hardware" msgid="3611039921284836033">"የማያ ገጽ ላይ የቁልፍ ሰሌዳ ይጠቀሙ"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g>ን ያዋቅሩ"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"አካላዊ የቁልፍ ሰሌዳዎችን ያዋቅሩ"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"ቋንቋ እና አቀማመጥን ለመምረጥ መታ ያድርጉ"</string>
@@ -1636,8 +1642,8 @@
     <string name="media_route_status_available" msgid="1477537663492007608">"የሚገኙ"</string>
     <string name="media_route_status_not_available" msgid="480912417977515261">"አይገኝም"</string>
     <string name="media_route_status_in_use" msgid="6684112905244944724">"በጥቅም ላይ"</string>
-    <string name="display_manager_built_in_display_name" msgid="1015775198829722440">"ውስጥ የተሰራ ማያ ገጽ"</string>
-    <string name="display_manager_hdmi_display_name" msgid="1022758026251534975">"HDMI ማያ ገጽ"</string>
+    <string name="display_manager_built_in_display_name" msgid="1015775198829722440">"ውስጥ የተሰራ ማያ ገፅ"</string>
+    <string name="display_manager_hdmi_display_name" msgid="1022758026251534975">"HDMI ማያ ገፅ"</string>
     <string name="display_manager_overlay_display_name" msgid="5306088205181005861">"ተደራቢ #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="1480158037150469170">"<xliff:g id="NAME">%1$s</xliff:g>፦ <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>፣ <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="2810034719482834679">"፣ የተጠበቀ"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"አስወግድ"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"ድምጹ ከሚመከረው መጠን በላይ ከፍ ይበል?\n\nበከፍተኛ ድምፅ ለረጅም ጊዜ ማዳመጥ ጆሮዎን ሊጎዳው ይችላል።"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"ማስጠንቀቂያ፣\nእርስዎ አንድ ሰው በአንድ ሳምንት ውስጥ ደህንነቱ በተጠበቀ ሁኔታ በራስ ላይ ማዳመጫዎች መስማት ከሚችላቸው ጮክ ያሉ የድምፅ ምልክቶች መጠንን አልፈዋል።\n\nከዚህ ገደብ በላይ መሄድ የመስማት ችሎታዎን በቋሚነት ይጎዳል።"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"ማስጠንቀቂያ፣\nእርስዎ አንድ ሰው በአንድ ሳምንት ውስጥ ደህንነቱ በተጠበቀ ሁኔታ በራስ ላይ ማዳመጫዎች መስማት ከሚችላቸው ጮክ ያሉ የድምፅ ምልክቶች መጠን 5 እጥፍ አልፈዋል።\n\nየድምፅ መጠን የመስማት ችሎታዎን ለመጠበቅ ዝቅ ተደርጓል።"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"እርስዎ ሚዲያን እያዳመጡ ያሉበት ደረጃ በዘላቂነት ለረጅም ጊዜ ሲቆይ የመስማት ችሎታ ጉዳትን ያስከትላል።\n\nበዚህ ደረጃ ላይ ለረጅም ጊዜ ማጫወት መቀጠል የመስማት ችሎታዎን ሊጎዳ ይችላል።"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"ማስጠንቀቂያ፣\nበአሁኑ ጊዜ እርስዎ ደህንነቱ ባልተጠበቀ ደረጃ ላይ ጮክ ያለ ይዘት እያዳመጡ ነው።\n\nእንደዚህ ጮክ ብሎ ማዳመጥ መቀጠል የመስማት ችሎታዎን በቋሚነት ይጎዳል።"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"በከፍተኛ የድምፅ መጠን ማዳመጥ ይቀጥሉ?\n\nየራስ ላይ ማዳመጫ የድምፅ መጠን ከሚመከረው ጊዜ በላይ ከፍ ብሎ ቆይቷል፣ ይህም የመስሚያ ችሎታዎን ሊጎዳ ይችላል"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"ጮክ ያለ ድምፅ ተለይቷል\n\nየራስ ላይ ማዳመጫ የድምፅ መጠን ከሚመከረው ጊዜ በላይ ከፍ ብሎ ቆይቷል፣ ይህም የመስሚያ ችሎታዎን ሊጎዳ ይችላል"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"የተደራሽነት አቋራጭ ጥቅም ላይ ይዋል?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"አቋራጩ ሲበራ ሁለቱንም የድምጽ አዝራሮች ለ3 ሰከንዶች ተጭኖ መቆየት የተደራሽነት ባህሪን ያስጀምረዋል።"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"የተደራሽነት ባህሪዎች አቋራጭ ይብራ?"</string>
@@ -1847,11 +1851,11 @@
     <string name="restr_pin_error_doesnt_match" msgid="7063392698489280556">"ፒኖች አይዛመዱም። እንደገና ይሞክሩ።"</string>
     <string name="restr_pin_error_too_short" msgid="1547007808237941065">"ፒን በጣም አጭር ነው። ቢያንስ 4 አሃዝ መሆን አለበት።"</string>
     <string name="restr_pin_try_later" msgid="5897719962541636727">"ቆይተው እንደገና ይሞክሩ"</string>
-    <string name="immersive_cling_title" msgid="2307034298721541791">"ሙሉ ገጽ በማሳየት ላይ"</string>
+    <string name="immersive_cling_title" msgid="2307034298721541791">"ሙሉ ገፅ በማሳየት ላይ"</string>
     <string name="immersive_cling_description" msgid="7092737175345204832">"ለመውጣት፣ ከላይ ወደታች ጠረግ ያድርጉ።"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"ገባኝ"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"ለተሻለ ዕይታ ያሽከርክሩ"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"ለተሻለ ዕይታ የተከፈለ ማያ ገጽን ትተው ይውጡ"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"ለተሻለ ዕይታ <xliff:g id="NAME">%s</xliff:g>ን በሙሉ ገጽ ዕይታ ይክፈቱ"</string>
     <string name="done_label" msgid="7283767013231718521">"ተከናውኗል"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"የሰዓታት ክብ ተንሸራታች"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"የደቂቃዎች ክብ ተንሸራታች"</string>
@@ -1860,9 +1864,9 @@
     <string name="select_day" msgid="2060371240117403147">"ወር እና ቀን ይምረጡ"</string>
     <string name="select_year" msgid="1868350712095595393">"ዓመት ይምረጡ"</string>
     <string name="deleted_key" msgid="9130083334943364001">"<xliff:g id="KEY">%1$s</xliff:g> ተሰርዟል"</string>
-    <string name="managed_profile_label_badge" msgid="6762559569999499495">"ስራ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
-    <string name="managed_profile_label_badge_2" msgid="5673187309555352550">"2ኛ ስራ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
-    <string name="managed_profile_label_badge_3" msgid="6882151970556391957">"3ኛ ስራ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+    <string name="managed_profile_label_badge" msgid="6762559569999499495">"ሥራ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+    <string name="managed_profile_label_badge_2" msgid="5673187309555352550">"2ኛ ሥራ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+    <string name="managed_profile_label_badge_3" msgid="6882151970556391957">"3ኛ ሥራ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
     <string name="clone_profile_label_badge" msgid="1871997694718793964">"<xliff:g id="LABEL">%1$s</xliff:g>ን አባዛ"</string>
     <string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ከመንቀል በፊት ፒን ጠይቅ"</string>
     <string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ከመንቀል በፊት የማስከፈቻ ስርዓተ-ጥለት ጠይቅ"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"መተግበሪያ አይገኝም"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> አሁን አይገኝም።"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> አይገኝም"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"ፈቃድ ያስፈልጋል"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"የፈቃድ ጥያቄ ታፍኗል"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"ይህ መተግበሪያ ተጨማሪ ፈቃዶችን እየጠየቀ ነው፣ ነገር ግን ፈቃዶች በዥረት ክፍለ ጊዜ ውስጥ ሊሰጡ አይችሉም። መጀመሪያ በAndroid TV መሣሪያዎ ላይ ፍቃድ ይስጡ።"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"ይህ መተግበሪያ ተጨማሪ ፈቃዶችን እየጠየቀ ነው፣ ነገር ግን ፈቃዶች በዥረት ክፍለ ጊዜ ውስጥ ሊሰጡ አይችሉም። መጀመሪያ በጡባዊዎ ላይ ፍቃድ ይስጡ።"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"ይህ መተግበሪያ ተጨማሪ ፈቃዶችን እየጠየቀ ነው፣ ነገር ግን ፈቃዶች በዥረት ክፍለ ጊዜ ውስጥ ሊሰጡ አይችሉም። መጀመሪያ በስልክዎ ላይ ፍቃድ ይስጡ።"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"ይህ መተግበሪያ የተገነባው ለቆየ የAndroid ስሪት ነበር። በትክክል ላይሰራ ይችላል እና የቅርብ ጊዜዎቹን የደህንነት እና የግላዊነት ጥበቃዎች አያካትትም። ዝማኔ ካለ ይፈትሹ ወይም የመተግበሪያውን ገንቢ ያነጋግሩ።"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ዝማኔ ካለ አረጋግጥ"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"ይህ መተግበሪያ ከቅርብ ጊዜው የAndroid. ስሪት ጋር ተኳዃኝ አይደለም። ዝማኔ ካለ ይፈትሹ ወይም የመተግበሪያውን ገንቢ ያነጋግሩ።"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"አዲስ መልዕክቶች አለዎት"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"ለመመልከት የኤስኤምኤስ መተግበሪያ ይክፈቱ"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"አንዳንድ ተግባሮች የተገደቡ ሊሆኑ ይችላሉ"</string>
@@ -2131,11 +2139,11 @@
     <string name="accessibility_system_action_notifications_label" msgid="6083767351772162010">"ማሳወቂያዎች"</string>
     <string name="accessibility_system_action_quick_settings_label" msgid="4583900123506773783">"ፈጣን ቅንብሮች"</string>
     <string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"የኃይል መገናኛ"</string>
-    <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"የማያ ገጽ ቁልፍ"</string>
-    <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"ቅጽበታዊ ገጽ እይታ"</string>
+    <string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"የማያ ገፅ ቁልፍ"</string>
+    <string name="accessibility_system_action_screenshot_label" msgid="3581566515062741676">"ቅጽበታዊ ገፅ እይታ"</string>
     <string name="accessibility_system_action_headset_hook_label" msgid="8524691721287425468">"የማዳመጫ መንጠቆ"</string>
-    <string name="accessibility_system_action_on_screen_a11y_shortcut_label" msgid="8488701469459210309">"የማያ ገጽ ላይ ተደራሽነት አቋራጭ"</string>
-    <string name="accessibility_system_action_on_screen_a11y_shortcut_chooser_label" msgid="1057878690209817886">"የማያ ገጽ ላይ ተደራሽነት አቋራጭ መራጭ"</string>
+    <string name="accessibility_system_action_on_screen_a11y_shortcut_label" msgid="8488701469459210309">"የማያ ገፅ ላይ ተደራሽነት አቋራጭ"</string>
+    <string name="accessibility_system_action_on_screen_a11y_shortcut_chooser_label" msgid="1057878690209817886">"የማያ ገፅ ላይ ተደራሽነት አቋራጭ መራጭ"</string>
     <string name="accessibility_system_action_hardware_a11y_shortcut_label" msgid="5764644187715255107">"የተደራሽነት አቋራጭ"</string>
     <string name="accessibility_system_action_dismiss_notification_shade" msgid="8931637495533770352">"የማሳወቂያ ጥላን አሰናብት"</string>
     <string name="accessibility_system_action_dpad_up_label" msgid="1029042950229333782">"ከDpad በላይ"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ይህ ይዘት በሥራ መተግበሪያዎች መከፈት አይችልም"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ይህ ይዘት በግል መተግበሪያዎች መጋራት አይችልም"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ይህ ይዘት በግል መተግበሪያዎች መከፈት አይችልም"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"የሥራ መገለጫ ባለበት ቆሟል"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"ለማብራት መታ ያድርጉ"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"የሥራ መተግበሪያዎች ባሉበት ቆመዋል"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"ከቆመበት ቀጥል"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ምንም የሥራ መተግበሪያዎች የሉም"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ምንም የግል መተግበሪያዎች የሉም"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"የሥራ <xliff:g id="APP">%s</xliff:g> ይከፈት?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"በግል <xliff:g id="APP">%s</xliff:g> ውስጥ ይከፈት?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"በሥራ <xliff:g id="APP">%s</xliff:g> ውስጥ ይከፈት?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"ከሥራ መተግበሪያ ይደወል?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"ወደ የሥራ መተግበሪያ ይቀየር?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"ድርጅትዎ ከሥራ መተግበሪያዎች ብቻ ጥሪዎችን እንዲያደርጉ ይፈቅድልዎታል"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"ድርጅትዎ ከሥራ መተግበሪያዎች ብቻ መልዕክቶችን እንዲልኩ ይፈቅድልዎታል"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"የግል አሳሽ ተጠቀም"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"የስራ አሳሽ ተጠቀም"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"ደውል"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"ማብሪያ/ማጥፊያ"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"የሲም አውታረ መረብ መክፈቻ ፒን"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"የሲም አውታረ መረብ ንኡስ ስብስብ መክፈቻ ፒን"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"የሲም ኮርፖሬት መክፈቻ ፒን"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"የስልኩን ካሜራ ከእርስዎ <xliff:g id="DEVICE">%1$s</xliff:g> መድረስ አይቻልም"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"ጡባዊውን ካሜራ ከእርስዎ <xliff:g id="DEVICE">%1$s</xliff:g> መድረስ አይቻልም"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"ዥረት በመልቀቅ ላይ ሳለ ይህ ሊደረስበት አይችልም። በምትኩ በስልክዎ ላይ ይሞክሩ።"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"በዥረት በመልቀቅ ወቅት በሥዕል-ላይ-ሥዕል ማየት አይችሉም"</string>
     <string name="system_locale_title" msgid="711882686834677268">"የሥርዓት ነባሪ"</string>
     <string name="default_card_name" msgid="9198284935962911468">"ካርድ <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"የእጅ ሰዓቶችን ለማስተዳደር የአጃቢ የእጅ ሰዓት መገለጫ ፍቃድ"</string>
@@ -2317,11 +2331,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"አጃቢ መተግበሪያ ከዳራ የፊት አገልግሎቶችን እንዲጀምር ያስችላል።"</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"ማይክሮፎን ይገኛል"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"ማይክሮፎን ታግዷል"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"ባለሁለት ማያ ገጽ"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"ባለሁለት ማያ ገጽ በርቷል"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual screen ገፅ በርቷል"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> ይዘትን ለማሳየት ሁለቱንም ማሳያዎች እየተጠቀመ ነው"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"መሣሪያ በጣም ሞቋል"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"ስልክዎ በጣም እየሞቀ ስለሆነ ባለሁለት ማያ ገጽ አይገኝም"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"ስልክዎ በጣም እየሞቀ ስለሆነ Dual screen አይገኝም"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen አይገኝም"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"የባትሪ ቆጣቢ ስለበራ Dual Screen አይገኝም። ይህን በቅንብሮች ውስጥ ሊያጠፉት ይችላሉ።"</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"ወደ ቅንብሮች ሂድ"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index f3141ad..322ae8d 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -302,6 +302,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"‏نظام Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"التبديل إلى الملف الشخصي"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"التبديل إلى الملف الشخصي للعمل"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"التبديل إلى تطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" في الملف الشخصي"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"التبديل إلى تطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" في الملف الشخصي للعمل"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"جهات الاتصال"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"الوصول إلى جهات اتصالك"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"الموقع الجغرافي"</string>
@@ -507,7 +509,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"للسماح للتطبيق بالتحكم في الهزّاز."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"يسمح هذا الإذن للتطبيق بالوصول إلى حالة الهزّاز."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"اتصال مباشر بأرقام الهواتف"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"للسماح للتطبيق بطلب أرقام هاتفية بدون تدخل منك. وقد يؤدي ذلك إلى تحمل رسوم غير متوقعة أو إجراء مكالمات غير متوقعة. ومن الجدير بالذكر أن ذلك لا يتيح للتطبيق الاتصال بأرقام الطوارئ. وقد تؤدي التطبيقات الضارة إلى تحملك تكاليف مالية من خلال إجراء مكالمات بدون موافقة منك."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"يسمح هذا الإذن للتطبيق بالاتصال بأرقام الهواتف بدون تدخل منك. وقد يؤدي ذلك إلى تحصيل رسوم غير متوقّعة أو إجراء مكالمات غير متوقّعة. يُرجى العلم أنّ هذا الإذن لا يسمح للتطبيق بالاتصال بأرقام الطوارئ. قد يؤدي منح الإذن للتطبيقات الضارة إلى تحصيل رسوم منك عن طريق إجراء مكالمات بدون الحصول على موافقتك أو الاتصال برموز مشغّل شبكة الجوال والتي تتسبّب في إعادة توجيه المكالمات الواردة تلقائيًا إلى رقم آخر."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"الوصول إلى خدمة الاتصال عبر الرسائل الفورية"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"للسماح للتطبيق باستخدام خدمة الرسائل الفورية لإجراء المكالمات بدون تدخل منك."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"قراءة حالة الهاتف والهوية"</string>
@@ -592,6 +594,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"‏يسمح هذا الإذن للتطبيق بالحصول على معلومات الخدمات المدفوعة باستخدام الاتصال قصير المدى NFC المفضّل، مثلاً المساعدات المسجّلة ووجهة المسار."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"التحكم في اتصال الحقل القريب"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"‏للسماح للتطبيق بالاتصال بعلامات الاتصال قريب المدى (NFC)، والبطاقات وبرامج القراءة."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"حدث معاملة \"عنصر آمن\""</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"يسمح هذا الإذن للتطبيق بتلقّي معلومات حول المعاملات التي تتم على \"عنصر آمن\"."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"إيقاف قفل الشاشة"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"للسماح للتطبيق بإيقاف تأمين المفاتيح وأي أمان لكلمة مرور مرتبطة. على سبيل المثال، يعطل الهاتف تأمين المفاتيح عند استقبال مكالمة هاتفية واردة، ثم يعيد تفعيل تأمين المفاتيح عند انتهاء المكالمة."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"طلب معرفة مستوى صعوبة قفل الشاشة"</string>
@@ -618,26 +622,29 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"استخدام المقاييس الحيوية أو قفل الشاشة"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"إثبات هويتك"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"استخدام المقاييس الحيوية للمتابعة"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"استخدِم بصمة إصبعك للمتابعة"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"استخدِم وجهك للمتابعة"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"استخدام المقاييس الحيوية أو قفل الشاشة للمتابعة"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"معدّات المقاييس الحيوية غير متاحة."</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"تم إلغاء المصادقة."</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"لم يتم التعرف عليها."</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"لم يتم التعرّف على الوجه."</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"تم إلغاء المصادقة."</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"لم يتم ضبط رقم تعريف شخصي أو نقش أو كلمة مرور."</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"خطأ في المصادقة"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"استخدام قفل الشاشة"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"أدخِل قفل الشاشة للمتابعة"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"اضغط بقوة على المستشعر"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"اضغط بقوة على أداة الاستشعار"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"يتعذّر التعرّف على بصمة الإصبع. يُرجى إعادة المحاولة."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"يُرجى تنظيف مستشعر بصمات الإصبع ثم إعادة المحاولة."</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"تنظيف المستشعر ثم إعادة المحاولة"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"اضغط بقوة على المستشعر"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"اضغط بقوة على أداة الاستشعار"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"تم تحريك الإصبع ببطء شديد. يُرجى إعادة المحاولة."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"يمكنك تجربة بصمة إصبع أخرى."</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"الصورة ساطعة للغاية."</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"تم رصد الضغط على زر التشغيل."</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"حاوِل تعديل بصمة الإصبع."</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"غيِّر موضع إصبعك قليلاً في كل مرة."</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"غيِّر موضع إصبعك قليلاً في كل مرة"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"لم يتمّ التعرّف على البصمة."</string>
@@ -679,24 +686,24 @@
     <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"لا يمكن استخدام مستشعر بصمات الإصبع"</string>
     <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"يُرجى التواصل مع مقدِّم خدمات إصلاح."</string>
     <string name="face_acquired_insufficient" msgid="6889245852748492218">"يتعذّر إنشاء نموذج الوجه. يُرجى إعادة المحاولة."</string>
-    <string name="face_acquired_too_bright" msgid="8070756048978079164">"ساطع للغاية. تجربة مستوى سطوع أقلّ."</string>
-    <string name="face_acquired_too_dark" msgid="8539853432479385326">"الإضاءة غير كافية."</string>
+    <string name="face_acquired_too_bright" msgid="8070756048978079164">"ساطع للغاية. يُرجى تجربة مستوى سطوع أقلّ"</string>
+    <string name="face_acquired_too_dark" msgid="8539853432479385326">"الإضاءة غير كافية"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"يُرجى إبعاد الهاتف عنك."</string>
-    <string name="face_acquired_too_far" msgid="2922278214231064859">"يُرجى تقريب الهاتف منك."</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"يُرجى رفع الهاتف للأعلى."</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"يُرجى خفض الهاتف للأسفل."</string>
-    <string name="face_acquired_too_right" msgid="6245286514593540859">"يُرجى تحريك الهاتف جهة اليسار."</string>
-    <string name="face_acquired_too_left" msgid="9201762240918405486">"يُرجى تحريك الهاتف جهة اليمين."</string>
+    <string name="face_acquired_too_far" msgid="2922278214231064859">"يُرجى تقريب الهاتف منك"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"يُرجى رفع الهاتف للأعلى"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"يُرجى خفض الهاتف للأسفل"</string>
+    <string name="face_acquired_too_right" msgid="6245286514593540859">"يُرجى تحريك الهاتف لجهة اليسار"</string>
+    <string name="face_acquired_too_left" msgid="9201762240918405486">"يُرجى تحريك الهاتف لجهة اليمين"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"يُرجى النظر إلى جهازك مباشرة أكثر."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"تتعذّر رؤية وجهك. ارفع هاتفك إلى مستوى العينَين."</string>
-    <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"حركة أكثر من اللازم يُرجى حمل بدون حركة."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"ارفع هاتفك إلى مستوى العينَين لأنّه تتعذّر رؤية وجهك"</string>
+    <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"حركة أكثر من اللازم. يُرجى حمل الهاتف بثبات."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"يُرجى إعادة تسجيل وجهك."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"يتعذّر التعرّف على الوجه. يُرجى إعادة المحاولة."</string>
     <string name="face_acquired_too_similar" msgid="8882920552674125694">"غيِّر موضع رأسك قليلاً."</string>
-    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"يُرجى النظر إلى هاتفك مباشرةً."</string>
-    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"يُرجى النظر إلى هاتفك مباشرةً."</string>
-    <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"يُرجى النظر إلى هاتفك مباشرةً."</string>
-    <string name="face_acquired_obscured" msgid="4917643294953326639">"عليك بإزالة أي شيء يُخفي وجهك."</string>
+    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"يُرجى النظر إلى هاتفك مباشرةً"</string>
+    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"يُرجى النظر إلى هاتفك مباشرةً"</string>
+    <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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -704,7 +711,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"تمّ رصد قناع على الوجه في حين يجب ظهور وجهك بالكامل"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"يتعذّر التحقُّق من الوجه. الجهاز غير مُتاح."</string>
@@ -713,8 +720,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"تمّ إلغاء عملية مصادقة الوجه."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"ألغى المستخدم ميزة \"فتح الجهاز بالتعرف على الوجه\"."</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"تمّ إجراء محاولات كثيرة. أعِد المحاولة لاحقًا."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"أجريت محاولات كثيرة جدًا. ميزة \"فتح الجهاز بالتعرف على الوجه\" غير متاحة."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"تم إجراء عدد كبير جدًا من المحاولات. أدخِل قفل الشاشة بدلاً من ذلك."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"يتعذّر التحقق من الوجه. حاول مرة أخرى."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"لم يسبق لك إعداد ميزة \"فتح الجهاز بالتعرف على الوجه\"."</string>
@@ -1219,7 +1225,7 @@
     <string name="aerr_application_repeated" msgid="7804378743218496566">"يستمر التطبيق <xliff:g id="APPLICATION">%1$s</xliff:g> في التوقف."</string>
     <string name="aerr_process_repeated" msgid="1153152413537954974">"تستمر عملية <xliff:g id="PROCESS">%1$s</xliff:g> في التوقف."</string>
     <string name="aerr_restart" msgid="2789618625210505419">"فتح التطبيق مرة أخرى"</string>
-    <string name="aerr_report" msgid="3095644466849299308">"إرسال تعليقات"</string>
+    <string name="aerr_report" msgid="3095644466849299308">"إرسال ملاحظات"</string>
     <string name="aerr_close" msgid="3398336821267021852">"إغلاق"</string>
     <string name="aerr_mute" msgid="2304972923480211376">"كتم الصوت حتى إعادة تشغيل الجهاز"</string>
     <string name="aerr_wait" msgid="3198677780474548217">"انتظار"</string>
@@ -1259,7 +1265,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"بدء التطبيقات."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"جارٍ إعادة التشغيل."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"ضغطت على زر التشغيل، يؤدي هذا عادةً إلى إيقاف الشاشة.\n\nجرِّب النقر بخفة أثناء إعداد بصمتك."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"لإنهاء عملية الإعداد، أوقِف الشاشة."</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"لإيقاف عملية الإعداد، أغلِق الشاشة."</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"إيقاف"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"هل تريد مواصلة تأكيد بصمة إصبعك؟"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"ضغطت على زر التشغيل، يؤدي هذا عادةً إلى إيقاف الشاشة.\n\nجرِّب النقر بخفة لتأكيد بصمة إصبعك."</string>
@@ -1395,8 +1401,8 @@
     <string name="share_remote_bugreport_action" msgid="7630880678785123682">"مشاركة"</string>
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"رفض"</string>
     <string name="select_input_method" msgid="3971267998568587025">"اختيار أسلوب الإدخال"</string>
-    <string name="show_ime" msgid="6406112007347443383">"استمرار عرضها على الشاشة أثناء نشاط لوحة المفاتيح الفعلية"</string>
-    <string name="hardware" msgid="1800597768237606953">"إظهار لوحة المفاتيح الافتراضية"</string>
+    <string name="show_ime" msgid="6406112007347443383">"استمرار عرضها على الشاشة عندما تكون لوحة المفاتيح الخارجية متصلة"</string>
+    <string name="hardware" msgid="3611039921284836033">"استخدام لوحة المفاتيح على الشاشة"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"إعداد <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"إعداد لوحات المفاتيح الخارجية"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"انقر لاختيار لغة وتنسيق"</string>
@@ -1685,10 +1691,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"إزالة"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"هل تريد رفع مستوى الصوت فوق المستوى الموصى به؟\n\nقد يضر سماع صوت عالٍ لفترات طويلة بسمعك."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"تحذير:\nلقد تجاوزت مقدار الإشارات الصوتية العالية التي يمكن للشخص الاستماع إليها بأمان خلال أسبوع باستخدام سماعات الرأس.\n\nتجاوز هذا الحدّ سيضر بسمعك بشكل دائم."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"تحذير:\nلقد تجاوزت بمقدار 5 مرات الإشارات الصوتية العالية التي يمكن للشخص الاستماع إليها بأمان خلال أسبوع باستخدام سماعات الرأس.\n\nتم خفض مستوى الصوت لحماية سمعك."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"يمكن أن يؤدي التعرض لفترات طويلة للمستوى الذي تسمع به الوسائط إلى حدوث ضرر في السمع.\n\nقد يؤدي استمرار التشغيل بهذا المستوى لفترات طويلة إلى حدوث ضرر في السمع."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"تحذير:\nأنت تستمع حاليًا إلى محتوى صاخب يتم تشغيله بمستوى صوت غير آمن.\n\nسيؤدي الاستمرار في الاستماع إلى هذا الصوت الصاخب إلى حدوث ضرر في سمعك بشكل دائم."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"هل تريد مواصلة الاستماع بصوت عالٍ؟\n\nكان مستوى صوت سمّاعة الرأس مرتفعًا لمدة أطول مما يُنصَح به، وقد يضر هذا بسمعك."</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"تم رصد صوت مرتفع.\n\nكان مستوى صوت سمّاعة الرأس مرتفعًا لمدة أطول مما يُنصَح به، وقد يضر هذا بسمعك."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"هل تريد استخدام اختصار \"سهولة الاستخدام\"؟"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"عند تفعيل الاختصار، يؤدي الضغط على زرّي التحكّم في مستوى الصوت معًا لمدة 3 ثوانٍ إلى تفعيل إحدى ميزات إمكانية الوصول."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"هل تريد تفعيل الاختصار لميزات إمكانية الوصول؟"</string>
@@ -1705,7 +1709,7 @@
     <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"قراءة محتوى الشاشة والتحكم به"</string>
     <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"يمكنها قراءة كل المحتوى على الشاشة وعرض المحتوى فوق تطبيقات أخرى."</string>
     <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"عرض الإجراءات وتنفيذها"</string>
-    <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"يمكنها تتبّع تفاعلاتك مع تطبيق أو جهاز استشعار والتفاعل مع التطبيقات نيابةً عنك."</string>
+    <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"قد يؤدي ذلك إلى السماح للميزة بتتبّع تفاعلاتك مع تطبيق أو جهاز استشعار والتفاعل مع التطبيقات نيابةً عنك."</string>
     <string name="accessibility_dialog_button_allow" msgid="2092558122987144530">"سماح"</string>
     <string name="accessibility_dialog_button_deny" msgid="4129575637812472671">"رفض"</string>
     <string name="accessibility_select_shortcut_menu_title" msgid="6002726538854613272">"انقر على ميزة لبدء استخدامها:"</string>
@@ -1855,7 +1859,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"للخروج، مرر بسرعة من أعلى إلى أسفل."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"حسنًا"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"يمكنك تدوير الجهاز لرؤية شاشة معاينة الكاميرا بشكل أوضح."</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"يمكنك الخروج من وضع \"تقسيم الشاشة\" لرؤية شاشة معاينة الكاميرا بشكل أوضح."</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"عليك فتح \"<xliff:g id="NAME">%s</xliff:g>\" في وضع ملء الشاشة لرؤية شاشة معاينة الكاميرا بشكل أوضح."</string>
     <string name="done_label" msgid="7283767013231718521">"تم"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"شريط التمرير الدائري للساعات"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"شريط التمرير الدائري للدقائق"</string>
@@ -1955,13 +1959,13 @@
     <string name="app_suspended_default_message" msgid="6451215678552004172">"التطبيق <xliff:g id="APP_NAME_0">%1$s</xliff:g> غير متاح الآن، وهو مُدار بواسطة <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
     <string name="app_suspended_more_details" msgid="211260942831587014">"مزيد من المعلومات"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"استئناف تشغيل التطبيق"</string>
-    <string name="work_mode_off_title" msgid="6367463960165135829">"أتريد إلغاء إيقاف تطبيقات العمل مؤقتًا؟"</string>
-    <string name="work_mode_turn_on" msgid="5316648862401307800">"إلغاء الإيقاف المؤقت"</string>
+    <string name="work_mode_off_title" msgid="6367463960165135829">"أتريد إعادة تفعيل تطبيقات العمل؟"</string>
+    <string name="work_mode_turn_on" msgid="5316648862401307800">"إعادة التفعيل"</string>
     <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"الطوارئ"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"التطبيق غير متاح"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"تطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> غير متاح الآن."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"تطبيق <xliff:g id="ACTIVITY">%1$s</xliff:g> غير متاح"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"مطلوب منح الإذن"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"تم إلغاء طلب الإذن"</string>
     <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>
@@ -1972,6 +1976,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"‏يطلب هذا التطبيق الحصول على أذونات إضافية، ولكن لا يمكن منح أذونات في جلسة بث. امنح الإذن على جهاز Android TV أولاً."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"يطلب هذا التطبيق الحصول على أذونات إضافية، ولكن لا يمكن منح أذونات في جلسة بث. امنح الإذن على جهازك اللوحي أولاً."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"يطلب هذا التطبيق الحصول على أذونات إضافية، ولكن لا يمكن منح أذونات في جلسة بث. امنح الإذن على هاتفك أولاً."</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>
@@ -1980,6 +1987,7 @@
     <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="5246906284426844596">"‏تم إنشاء هذا التطبيق لإصدار قديم من Android. قد لا يعمل بشكل صحيح كما أنه لا يشتمِل على أحدث الإجراءات لحماية الأمان والخصوصية. ابحث عن تحديث أو تواصَل مع مطوّر التطبيق."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"البحث عن تحديث"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"‏هذا التطبيق غير متوافق مع أحدث إصدار من Android. ابحث عن تحديث أو تواصَل مع مطوّر التطبيق."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"لديك رسائل جديدة"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"‏فتح تطبيق الرسائل القصيرة SMS للعرض"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"قد تكون بعض الوظائف مُقيّدة."</string>
@@ -2163,16 +2171,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"لا يمكن فتح هذا المحتوى باستخدام تطبيقات العمل."</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"لا يمكن مشاركة هذا المحتوى مع التطبيقات الشخصية."</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"لا يمكن فتح هذا المحتوى باستخدام التطبيقات الشخصية."</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"الملف الشخصي للعمل متوقف مؤقتًا."</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"انقر لتفعيل الميزة"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"تطبيقات العمل متوقفة مؤقتًا."</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"إلغاء الإيقاف المؤقت"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ما مِن تطبيقات عمل."</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ما مِن تطبيقات شخصية."</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"هل تريد فتح تطبيق \"<xliff:g id="APP">%s</xliff:g>\" في ملفك الشخصي للعمل؟"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"هل تريد فتح المحتوى في تطبيق \"<xliff:g id="APP">%s</xliff:g>\" في الملف الشخصي؟"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"هل تريد فتح المحتوى في تطبيق \"<xliff:g id="APP">%s</xliff:g>\" في الملف الشخصي للعمل؟"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"هل تريد الاتصال من تطبيق العمل؟"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"هل تريد الانتقال إلى تطبيق العمل؟"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"تسمح لك مؤسستك بإجراء المكالمات من تطبيقات العمل فقط."</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"تسمح لك مؤسستك بإرسال الرسائل من تطبيقات العمل فقط."</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"استخدام المتصفّح الشخصي"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"استخدام متصفّح العمل"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"الاتصال"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"انتقال"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"‏رقم التعريف الشخصي لإلغاء قفل شبكة شريحة SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"‏رقم التعريف الشخصي لإلغاء قفل المجموعة الفرعية لشبكة شريحة SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"‏رقم التعريف الشخصي لإلغاء قفل شريحة SIM للشركات"</string>
@@ -2309,6 +2322,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"يتعذّر الوصول إلى كاميرا الهاتف من على جهاز <xliff:g id="DEVICE">%1$s</xliff:g>."</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"يتعذّر الوصول إلى كاميرا الجهاز اللوحي من على جهاز <xliff:g id="DEVICE">%1$s</xliff:g>."</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"لا يمكن الوصول إلى هذا المحتوى أثناء البث. بدلاً من ذلك، جرِّب استخدام هاتفك."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"لا يمكن عرض نافذة ضمن النافذة أثناء البث."</string>
     <string name="system_locale_title" msgid="711882686834677268">"الإعداد التلقائي للنظام"</string>
     <string name="default_card_name" msgid="9198284935962911468">"‏رقم البطاقة ‎<xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"‏إذن الملف الشخصي في Companion Watch لإدارة الساعات"</string>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index fd03f4a..12e0948 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android ছিষ্টেম"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"ব্যক্তিগত প্ৰ\'ফাইললৈ সলনি কৰক"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"কৰ্মস্থানৰ প্ৰ’ফাইললৈ সলনি কৰক"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"ব্যক্তিগত <xliff:g id="APP_NAME">%1$s</xliff:g>লৈ সলনি কৰক"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"কৰ্মস্থানৰ <xliff:g id="APP_NAME">%1$s</xliff:g>লৈ সলনি কৰক"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"সম্পর্কসূচী"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"আপোনাৰ সম্পৰ্কসূচী চাব পাৰে"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"অৱস্থান"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"ভাইব্ৰেটৰ নিয়ন্ত্ৰণ কৰিবলৈ এপ্‌টোক অনুমতি দিয়ে।"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"এপ্‌টোক কম্পন স্থিতিটো এক্সেছ কৰিবলৈ অনুমতি দিয়ে।"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"পোনপটীয়াকৈ ফ\'ন নম্বৰলৈ কল কৰক"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"আপোনাৰ কোনো ব্যাঘাত নোহোৱাকৈ ফ\'ন নম্বৰবোৰত কল কৰিবলৈ এপক অনুমতি দিয়ে৷ ইয়াৰ ফলত অপ্ৰত্যাশিত মাচুল ভৰিবলগা বা কলবোৰ কৰা হ\'ব পাৰে৷ মনত ৰাখিব যে ই এপ্‌টোক জৰুৰীকালীন নম্বৰবোৰত কল কৰিবলৈ অনুমতি নিদিয়ে৷ ক্ষতিকাৰক এপসমূহে আপোনাৰ অনুমতি নোলোৱাকৈয়ে কল কৰি আপোনাক টকা খৰছ কৰাব পাৰে৷"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"এপ্‌টোক আপোনাৰ হস্তক্ষেপ অবিহনে ফ’ন নম্বৰসমূহলৈ কল কৰিবলৈ অনুমতি দিয়ে। ইয়াৰ ফলত অপ্ৰত্যাশিত মাচুল লোৱা অথবা কল কৰা হ’ব পাৰে। মনত ৰাখিব যে ই এপ্‌টোক জৰুৰীকালীন নম্বৰসমূহত কল কৰিবলৈ অনুমতি নিদিয়ে। ক্ষতিকাৰক এপ্‌সমূহে আপোনাৰ অনুমতি নোলোৱাকৈয়ে কল কৰি আপোনাৰ টকা খৰছ কৰাব পাৰে অথবা এনেকুৱা বাহকৰ ক’ড ডায়েল কৰিব পাৰে যাৰ ফলত অন্তৰ্গামী কলসমূহ স্বয়ংক্ৰিয়ভাৱে অন্য নম্বৰলৈ ফৰৱাৰ্ড হয়।"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"আইএমএছ কল সেৱা ব্যৱহাৰ কৰিব পাৰে"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"আপোনাৰ হস্তক্ষেপৰ অবিহনে আইএমএছ সেৱা ব্যৱহাৰ কৰি কল কৰিবলৈ এপক অনুমতি দিয়ে।"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ফ\'নৰ স্থিতি আৰু পৰিচয় পঢ়ক"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"এপ্‌টোক অগ্ৰাধিকাৰ দিয়া nfc পৰিশোধ সেৱাৰ পঞ্জীকৃত সহায়কসমূহ আৰু পৰিশোধ কৰিব লগা লক্ষ্যস্থান দৰে তথ্য পাবলৈ অনুমতি দিয়ে।"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"নিয়েৰ ফিল্ড কমিউনিকেশ্বন নিয়ন্ত্ৰণ কৰক"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"এপ্‌টোক নিয়েৰ ফিল্ড কমিউনিকেশ্বন (NFC) টেগ, কাৰ্ড আৰু ৰিডাৰসমূহৰ সৈতে যোগাযোগ কৰিবলৈ অনুমতি দিয়ে।"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"সুৰক্ষিত উপাদানৰ লেনদেন সম্পৰ্কীয় অনুষ্ঠান"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"এপ্‌টোক এটা সুৰক্ষিত উপাদানত হোৱা লেনদেনৰ বিষয়ে তথ্য লাভ কৰাৰ অনুমতি দিয়ে।"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"আপোনাৰ স্ক্ৰীন লক অক্ষম কৰক"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"এপ্‌টোক কী ল\'ক আৰু জড়িত হোৱা যিকোনো পাছৱৰ্ডৰ সুৰক্ষা অক্ষম কৰিব দিয়ে৷ উদাহৰণস্বৰূপে, কোনো অন্তৰ্গামী ফ\'ন কল উঠোৱাৰ সময়ত ফ\'নটোৱে কী-লকটো অক্ষম কৰে, তাৰ পাছত কল শেষ হ\'লেই কী লকটো পুনৰ সক্ষম কৰে৷"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"স্ক্ৰীন লকৰ জটিলতাৰ অনুৰোধ"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"বায়\'মেট্ৰিক অথবা স্ক্ৰীন লক ব্যৱহাৰ কৰক"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"এইয়া আপুনিয়েই বুলি সত্যাপন কৰক"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"অব্যাহত ৰাখিবলৈ আপোনাৰ বায়\'মেট্ৰিক ব্যৱহাৰ কৰক"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"অব্যাহত ৰাখিবলৈ আপোনাৰ ফিংগাৰপ্ৰিণ্ট ব্যৱহাৰ কৰক"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"অব্যাহত ৰাখিবলৈ নিজৰ মুখাৱয়ব ব্যৱহাৰ কৰক"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"অব্যাহত ৰাখিবলৈ আপোনাৰ বায়’মেট্ৰিক অথবা স্ক্ৰীন লক ব্যৱহাৰ কৰক"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"বায়োমেট্ৰিক হাৰ্ডৱেৰ উপলব্ধ নহয়"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"বিশ্বাসযোগ্যতাৰ প্ৰমাণীকৰণ বাতিল কৰা হৈছে"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"চিনাক্ত কৰিব পৰা নাই"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"মুখাৱয়ব চিনি পোৱা নাই"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"বিশ্বাসযোগ্যতাৰ প্ৰমাণীকৰণ বাতিল কৰা হৈছে"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"কোনো পিন, আৰ্হি বা পাছৱৰ্ড ছেট কৰা নাই"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"আসোঁৱাহৰ বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ কৰি থকা হৈছে"</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"মুখাৱয়ব ঢাক খাই আছে। সম্পূৰ্ণ মুখাৱয়ব দেখা পাব লাগিব।"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"মুখমণ্ডল সত্যাপন কৰিব পৰা নগ’ল। হাৰ্ডৱেৰ নাই।"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"মুখমণ্ডলৰ প্ৰক্ৰিয়া বাতিল কৰা হ’ল।"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"ব্যৱহাৰকাৰীয়ে ফেচ আনলক বাতিল কৰিছে"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"অত্যধিক ভুল প্ৰয়াস। কিছুসময়ৰ পাছত আকৌ চেষ্টা কৰক।"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"অতি বেছিসংখ্যক প্ৰয়াস। ফেচ আনলকৰ সুবিধাটো উপলব্ধ নহয়।"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"অতি বেছিসংখ্যক প্ৰয়াস। ইয়াৰ সলনি স্ক্ৰীন লক দিয়ক।"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"মুখমণ্ডল সত্যাপন কৰিব পৰা নগ’ল। আকৌ চেষ্টা কৰক।"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"ফেচ আনলক সুবিধাটো ছেট আপ কৰা নাই"</string>
@@ -986,7 +992,7 @@
     <string name="lockscreen_transport_stop_description" msgid="1449552232598355348">"বন্ধ কৰক"</string>
     <string name="lockscreen_transport_rew_description" msgid="7680106856221622779">"ৰিৱাইণ্ড কৰক"</string>
     <string name="lockscreen_transport_ffw_description" msgid="4763794746640196772">"ফাষ্ট ফৰৱাৰ্ড"</string>
-    <string name="emergency_calls_only" msgid="3057351206678279851">"জৰুৰীকালীন কল মাত্ৰ"</string>
+    <string name="emergency_calls_only" msgid="3057351206678279851">"কেৱল জৰুৰীকালীন কল"</string>
     <string name="lockscreen_network_locked_message" msgid="2814046965899249635">"নেটৱর্ক অৱৰোধিত"</string>
     <string name="lockscreen_sim_puk_locked_message" msgid="2867953953604224166">"ছিমখন PUKৰ দ্বাৰা লক হৈ আছে।"</string>
     <string name="lockscreen_sim_puk_locked_instructions" msgid="5307979043730860995">"ব্যৱহাৰকাৰীৰ নিৰ্দেশনা চাওক বা গ্ৰাহক সেৱা কেন্দ্ৰৰ সৈতে যোগাযোগ কৰক।"</string>
@@ -1357,7 +1363,7 @@
     <string name="perm_costs_money" msgid="749054595022779685">"ইয়াৰ ফলত আপোনাৰ টকা খৰচ হ\'ব পাৰে"</string>
     <string name="dlg_ok" msgid="5103447663504839312">"ঠিক আছে"</string>
     <string name="usb_charging_notification_title" msgid="1674124518282666955">"ইউএছবিৰ জৰিয়তে এই ডিভাইচটো চাৰ্জ কৰি থকা হৈছে"</string>
-    <string name="usb_supplying_notification_title" msgid="5378546632408101811">"ইউএছবিৰ জৰিয়তে সংযুক্ত ডিভাইচটো চ্চাৰ্জ কৰি থকা হৈছে"</string>
+    <string name="usb_supplying_notification_title" msgid="5378546632408101811">"ইউএছবিৰ জৰিয়তে সংযুক্ত ডিভাইচটো চাৰ্জ কৰি থকা হৈছে"</string>
     <string name="usb_mtp_notification_title" msgid="1065989144124499810">"ইউএছবি জৰিয়তে ফাইল স্থানান্তৰণ অন কৰা হ’ল"</string>
     <string name="usb_ptp_notification_title" msgid="5043437571863443281">"ইউএছবিৰ জৰিয়তে পিটিপি অন কৰা হ’ল"</string>
     <string name="usb_tether_notification_title" msgid="8828527870612663771">"ইউএছবি টেডাৰিং অন কৰা হ’ল"</string>
@@ -1365,7 +1371,7 @@
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"ৱেবকেম হিচাপে সংযোগ কৰা ডিভাইচ"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"ইউএছবি সহায়ক সামগ্ৰী সংযোগ কৰা হ’ল"</string>
     <string name="usb_notification_message" msgid="4715163067192110676">"অধিক বিকল্পৰ বাবে টিপক।"</string>
-    <string name="usb_power_notification_message" msgid="7284765627437897702">"সংযুক্ত ডিভাইচ চ্চাৰ্জ কৰি থকা হৈছে। অধিক বিকল্পৰ বাবে টিপক।"</string>
+    <string name="usb_power_notification_message" msgid="7284765627437897702">"সংযুক্ত ডিভাইচ চাৰ্জ কৰি থকা হৈছে। অধিক বিকল্পৰ বাবে টিপক।"</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"এনাল\'গ অডিঅ\' সহায়ক সামগ্ৰী পোৱা গৈছে"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"সংলগ্ন কৰা ডিভাইচটোৱে এই ফ\'নটোৰ সৈতে কাম কৰিব নোৱাৰে। অধিক জানিবলৈ টিপক।"</string>
     <string name="adb_active_notification_title" msgid="408390247354560331">"ইউএছবি ডিবাগিং সংযোগ কৰা হ’ল"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"প্ৰত্যাখ্যান কৰক"</string>
     <string name="select_input_method" msgid="3971267998568587025">"ইনপুট পদ্ধতি বাছনি কৰক"</string>
     <string name="show_ime" msgid="6406112007347443383">"কায়িক কীব’ৰ্ড সক্ৰিয় হৈ থাকোঁতে ইয়াক স্ক্ৰীনত ৰাখক"</string>
-    <string name="hardware" msgid="1800597768237606953">"ভাৰ্শ্বুৱল কীব\'ৰ্ড দেখুৱাওক"</string>
+    <string name="hardware" msgid="3611039921284836033">"অন-স্ক্ৰীন কীব’ৰ্ড ব্যৱহাৰ কৰক"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> কনফিগাৰ কৰক"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"ভৌতিক কীব’ৰ্ড কনফিগাৰ কৰক"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"ভাষা আৰু চানেকি বাছনি কৰিবলৈ ইয়াত টিপক"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"আঁতৰাওক"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"অনুমোদিত স্তৰতকৈ ওপৰলৈ ভলিউম বঢ়াব নেকি?\n\nদীৰ্ঘ সময়ৰ বাবে উচ্চ ভলিউমত শুনাৰ ফলত শ্ৰৱণ ক্ষমতাৰ ক্ষতি হ\'ব পাৰে।"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"সকীয়নি,\nএগৰাকী ব্যক্তিয়ে এসপ্তাহত হেডফ’নৰ জৰিয়তে সুৰক্ষিতভাৱে শুনিব পৰা ডাঙৰ ধ্বনিৰ ছিগনেলৰ পৰিমাণ আপুনি অতিক্ৰম কৰিছে।\n\nএই সীমা অতিক্ৰম কৰাটোৱে আপোনাৰ শ্ৰৱণ শক্তি স্থায়ীভাৱে নষ্ট কৰিব পাৰে।"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"সকীয়নি,\nএগৰাকী ব্যক্তিয়ে এসপ্তাহত হেডফ’নৰ জৰিয়তে সুৰক্ষিতভাৱে শুনিব পৰা ডাঙৰ ধ্বনিৰ ছিগনেলৰ পৰিমাণৰ ৫ গুণ আপুনি অতিক্ৰম কৰিছে।\n\nআপোনাৰ শ্ৰৱণ শক্তি সুৰক্ষিত কৰিবলৈ ভলিউম কমোৱা হৈছে।"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"আপুনি যিটো স্তৰত মিডিয়া শুনি আছে, দীঘলীয়া সময় ধৰি সেইটো স্তৰত শুনি থাকিলে আপোনাৰ শ্ৰৱণ শক্তি নষ্ট হ’ব পাৰে।\n\nএইটো স্তৰত দীঘলীয়া সময়ৰ বাবে প্লে’ কৰি থাকিলে আপোনাৰ শ্ৰৱণ শক্তি নষ্ট হ’ব পাৰে।"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"সকীয়নি,\nআপুনি বৰ্তমান অসুৰক্ষিত স্তৰ এটাত ডাঙৰ ধ্বনিৰ সমল প্লে’ কৰি শুনি আছে।\n\nএই ডাঙৰ ধ্বনিৰ সমলটো শুনি থাকিলে আপোনাৰ শ্ৰৱণ শক্তি নষ্ট হ’ব পাৰে।"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"উচ্চ ভলিউমত শুনি থাকিব নেকি?\n\nহেডফ’নৰ ভলিউম চুপাৰিছ কৰাতকৈ বেছি সময় ধৰি উচ্চ হৈ আছে, যিয়ে আপোনাৰ শ্ৰৱণ ইন্দ্ৰিয় ক্ষতিগ্ৰস্ত কৰিব পাৰে"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"উচ্চ ধ্বনি চিনাক্ত কৰা হৈছে\n\nহেডফ’নৰ ভলিউম চুপাৰিছ কৰাতকৈ বেছি সময় ধৰি উচ্চ হৈ আছে, যিয়ে আপোনাৰ শ্ৰৱণ ইন্দ্ৰিয় ক্ষতিগ্ৰস্ত কৰিব পাৰে"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"দিব্যাংগসকলৰ সুবিধাৰ শ্বৰ্টকাট ব্যৱহাৰ কৰেনে?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"শ্বৰ্টকাটটো অন হৈ থকাৰ সময়ত দুয়োটা ভলিউম বুটাম ৩ ছেকেণ্ডৰ বাবে হেঁচি ধৰি ৰাখিলে এটা সাধ্য সুবিধা আৰম্ভ হ’ব।"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"সাধ্য সুবিধাসমূহৰ বাবে শ্বৰ্টকাট অন কৰিবনে?"</string>
@@ -1715,7 +1719,7 @@
     <string name="color_inversion_feature_name" msgid="2672824491933264951">"ৰং বিপৰীতকৰণ"</string>
     <string name="color_correction_feature_name" msgid="7975133554160979214">"ৰং শুধৰণী"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"এখন হাতেৰে ব্যৱহাৰ কৰাৰ ম’ড"</string>
-    <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"এক্সট্ৰা ডিম"</string>
+    <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"অতিৰিক্তভাৱে পোহৰ কমোৱাৰ সুবিধা"</string>
     <string name="hearing_aids_feature_name" msgid="1125892105105852542">"শুনাৰ ডিভাইচ"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"ভলিউম কীসমূহ ধৰি ৰাখক। <xliff:g id="SERVICE_NAME">%1$s</xliff:g> অন কৰা হ\'ল।"</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"ভলিউম কী ধৰি ৰাখিছিল। <xliff:g id="SERVICE_NAME">%1$s</xliff:g> অফ কৰা হ\'ল।"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"বাহিৰ হ\'বলৈ ওপৰৰপৰা তললৈ ছোৱাইপ কৰক।"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"বুজি পালোঁ"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"ভালকৈ চাবলৈ ঘূৰাওক"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"ভালকৈ চাবলৈ বিভাজিত স্ক্ৰীনৰ পৰা বাহিৰ হওক"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"ভালকৈ চাবলৈ <xliff:g id="NAME">%s</xliff:g> পূৰ্ণ স্ক্ৰীনত খোলক"</string>
     <string name="done_label" msgid="7283767013231718521">"সম্পন্ন কৰা হ’ল"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"ঘড়ীৰ বৃত্তাকাৰ শ্লাইডাৰ"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"মিনিটৰ বৃত্তাকাৰ শ্লাইডাৰ"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"এপ্‌টো উপলব্ধ নহয়"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"এই মুহূৰ্তত <xliff:g id="APP_NAME">%1$s</xliff:g> উপলব্ধ নহয়।"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> উপলব্ধ নহয়"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"অনুমতিৰ প্ৰয়োজন"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"অনুমতিৰ অনুৰোধ অৱদমন কৰা হৈছে"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"এই এপ্‌টোৱে অতিৰিক্ত অনুমতিৰ বাবে অনুৰোধ কৰিছে, কিন্তু ষ্ট্ৰীমিং ছেশ্বনত অনুমতি দিব নোৱাৰি। আপোনাৰ Android TV ডিভাইচটোত প্ৰথমে অনুমতি দিয়ক।"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"এই এপ্‌টোৱে অতিৰিক্ত অনুমতিৰ বাবে অনুৰোধ কৰিছে, কিন্তু ষ্ট্ৰীমিং ছেশ্বনত অনুমতি দিব নোৱাৰি। আপোনাৰ টেবলেটটোত প্ৰথমে অনুমতি দিয়ক।"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"এই এপ্‌টোৱে অতিৰিক্ত অনুমতিৰ বাবে অনুৰোধ কৰিছে, কিন্তু ষ্ট্ৰীমিং ছেশ্বনত অনুমতি দিব নোৱাৰি। আপোনাৰ ফ’নটোত প্ৰথমে অনুমতি দিয়ক।"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"এই এপ্‌টো Androidৰ এটা পুৰণা সংস্কৰণৰ বাবে বনোৱা হৈছিল। এইটোৱে সঠিকভাৱে কাম নকৰিব পাৰে আৰু ইয়াত শেহতীয়া সুৰক্ষা আৰু গোপনীয়তা সম্পৰ্কীয় সুৰক্ষাসমূহ নাথাকে। কোনো আপডে’ট আছে নেকি চাওক অথবা এপৰ বিকাশকৰ্তাগৰাকীৰ সৈতে যোগাযোগ কৰক।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"আপডে’ট আছে নেকি চাওক"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"এই এপ্‌টো Androidৰ শেহতীয়া সংস্কৰণটোৰ সৈতে সমিল নহয়। আপডে’ট আছে নেকি চাওক অথবা এপৰ বিকাশকৰ্তাগৰাকীৰ সৈতে যোগাযোগ কৰক।"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"আপুনি নতুন বার্তা লাভ কৰিছে"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"চাবলৈ এছএমএছ এপ্ খোলক"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"কিছুমান কাৰ্যকাৰিতা সীমিত হ’ব পাৰে"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"এই সমল কৰ্মস্থানৰ এপৰ জৰিয়তে খুলিব নোৱাৰি"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"এই সমল ব্যক্তিগত এপৰ সৈতে শ্বেয়াৰ কৰিব নোৱাৰি"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"এই সমল ব্যক্তিগত এপৰ জৰিয়তে খুলিব নোৱাৰি"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"কৰ্মস্থানৰ প্ৰ\'ফাইলটো পজ কৰা আছে"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"অন কৰিবলৈ টিপক"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"কৰ্মস্থানৰ এপ্‌সমূহ পজ কৰা আছে"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"আনপজ কৰক"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"কোনো কৰ্মস্থানৰ এপ্‌ নাই"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"কোনো ব্যক্তিগত এপ্‌ নাই"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"কৰ্মস্থানৰ <xliff:g id="APP">%s</xliff:g>ত খুলিবনে?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"ব্যক্তিগত <xliff:g id="APP">%s</xliff:g>ত খুলিবনে?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"কৰ্মস্থানৰ <xliff:g id="APP">%s</xliff:g>ত খুলিবনে?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"কাম সম্পৰ্কীয় এপৰ পৰা কল কৰিবনে?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"ইয়াৰ সলনি কাম সম্পৰ্কীয় এপ্ ব্যৱহাৰ কৰিবনে?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"আপোনাৰ প্ৰতিষ্ঠানে আপোনাক কেৱল কাম সম্পৰ্কীয় এপ্‌সমূহৰ পৰা কল কৰিবলৈ অনুমতি দিয়ে"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"আপোনাৰ প্ৰতিষ্ঠানে আপোনাক কেৱল কাম সম্পৰ্কীয় এপ্‌সমূহৰ পৰা বাৰ্তা পঠিওৱাৰ অনুমতি দিয়ে"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ব্যক্তিগত ব্ৰাউজাৰ ব্যৱহাৰ কৰক"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"কৰ্মস্থানৰ ব্ৰাউজাৰ ব্যৱহাৰ কৰক"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"কল কৰক"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"সলনি কৰক"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"ছিম নেটৱৰ্ক আনলক কৰা পিন"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"ছিম নেটৱৰ্ক আনলক কৰা পিন"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"ছিম কৰ্পৰে\'ট আনলক কৰা পিন"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"আপোনাৰ <xliff:g id="DEVICE">%1$s</xliff:g>ৰ পৰা ফ’নটোৰ কেমেৰা এক্সেছ কৰিব নোৱাৰি"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"আপোনাৰ <xliff:g id="DEVICE">%1$s</xliff:g>ৰ পৰা টেবলেটটোৰ কেমেৰা এক্সেছ কৰিব নোৱাৰি"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"ষ্ট্ৰীম কৰি থকাৰ সময়ত এইটো এক্সেছ কৰিব নোৱাৰি। তাৰ পৰিৱৰ্তে আপোনাৰ ফ’নত চেষ্টা কৰি চাওক।"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"ষ্ট্ৰীম কৰি থকাৰ সময়ত picture-in-picture চাব নোৱাৰি"</string>
     <string name="system_locale_title" msgid="711882686834677268">"ছিষ্টেম ডিফ’ল্ট"</string>
     <string name="default_card_name" msgid="9198284935962911468">"কাৰ্ড <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"ঘড়ী পৰিচালনা কৰিবলৈ সহযোগী ঘড়ীৰ প্ৰ’ফাইলৰ অনুমতি"</string>
@@ -2317,11 +2331,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"এটা সহযোগী এপক নেপথ্যৰ পৰা অগ্ৰভূমি সেৱাসমূহ আৰম্ভ কৰিবলৈ দিয়ে।"</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"মাইক্ৰ’ফ’নটো উপলব্ধ"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"মাইক্ৰ’ফ’নটো অৱৰোধ কৰি থোৱা আছে"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"দ্বৈত স্ক্ৰীন"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"ডুৱেল স্ক্ৰীন অন আছে"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen অন আছে"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ সমল দেখুৱাবলৈ দুয়োখন ডিছপ্লে’ ব্যৱহাৰ কৰি আছে"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"ডিভাইচটো অতি বেছি গৰম হৈছে"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"আপোনাৰ ফ’নটো অতি বেছি গৰম হোৱাৰ বাবে ডুৱেল স্ক্ৰীন উপলব্ধ নহয়"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"আপোনাৰ ফ’নটো অতি বেছি গৰম হোৱাৰ বাবে Dual Screen উপলব্ধ নহয়"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen উপলব্ধ নহয়"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"বেটাৰী সঞ্চয়কাৰী অন হৈ থকাৰ কাৰণে Dual Screen সুবিধাটো উপলব্ধ নহয়। আপুনি ছেটিঙত এই সুবিধাটো অফ কৰিব পাৰে।"</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"ছেটিঙলৈ যাওক"</string>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index d97e814..ff7436f 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android sistemi"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Şəxsi profilə keçin"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"İş profilinə keçin"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g> üzrə şəxsi profilə keçin"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g> üzrə iş profilinə keçin"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontaktlar"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"kontaktlarınıza daxil olun"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Məkan"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Tətbiqə vibratoru idarə etmə icazəsi verir."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Tətbiqə vibrasiya vəziyyətinə daxil olmaq imkanı verir."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"telefon nömrələrinə birbaşa zəng edir"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Tətbiqə Sizin müdaxiləniz olmadan telefon zəngləri etməyə imkan verir. Zərərli tətbiqlər Sizdən xəbərsiz şəkildə müxtəlif zənglər edərək, Sizə maddi ziyan vura bilər. Qeyd: Bu, tətbiqlərə təcili nömrələrə zəng etməyə icazə vermir."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Tətbiqə telefon nömrələrinə müdaxiləsiz zəng etmək icazəsi verir. Gözlənilməz ödəmə və ya zənglə nəticələnə bilər. Bununla tətbiq təcili nömrələrə zəng edə bilmir. Zərərli tətbiqlər təsdiq olmadan zəng etməklə və ya gələn zənglərin başqa nömrəyə avtomatik yönləndirilməsinə səbəb olan operator kodları yığmaqla xərc yarada bilər."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS zəng xidmətinə giriş"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Tətbiqə müdaxilə olmadan zəng etmək üçün IMS xidmətindən istifadə etməyə imkan verir."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"telefon statusunu və identifikasiyanı oxuyur"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Tətbiqə qeydiyyatdan keçmiş yardım və marşrut təyinatı kimi tərcih edilən nfc ödəniş xidməti məlumatını əldə etmək icazəsi verir."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"Near Field Communication\'ı kontrol et"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Tətbiqə Yaxın Məsafə Kommunikasiyası (NFC) teqləri, kartları və oxuyucuları ilə əlaqə qurmağa icazə verir."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Təhlükəsiz Element əməliyyatı"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Tətbiqə Təhlükəsiz Elementdəki əməliyyatlar haqqında məlumat almaq imkanı verir."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"Ekran kilidini deaktiv edir"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Tətbiqə kilid açarını və təhlükəsizlik parolunu deaktiv etməyə imkan verir. Qanuni misal budur ki, telefon zəng qəbul edən zaman kilidi açır və zəng qurtarandan sonra kilidi bağlayır."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"ekran kilidi mürəkkəbliyi tələb edin"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Biometrik məlumatlardan və ya ekran kilidindən istifadə edin"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Kimliyinizi doğrulayın"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Davam etmək üçün biometrik məlumatlarınızdan istifadə edin"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Barmaq izi ilə davam edin"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Üz ilə davam edin"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Davam etmək üçün biometrik məlumatlar və ya ekran kilidinizdən istifadə edin"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrik proqram əlçatan deyil"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Doğrulama ləğv edildi"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Tanınmır"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Üz tanınmadı"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Doğrulama ləğv edildi"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Pin, nümunə və ya parol ayarlanmayıb"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Doğrulama zamanı xəta baş verdi"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Üz əməliyyatı ləğv edildi."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"İstifadəçi üz ilə kiliddən çıxarmanı ləğv edib"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Həddindən çox cəhd. Sonraya saxlayın."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Çox cəhd edilib. Üz ilə Kiliddən Açma əlçatan deyil."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Həddindən çox cəhd. Əvəzində ekran kilidi daxil edin."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Üz doğrulanmadı. Yenidən cəhd edin."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Üz ilə kiliddən çıxarma ayarlamamısınız"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"RƏDD EDİN"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Daxiletmə metodunu seçin"</string>
     <string name="show_ime" msgid="6406112007347443383">"Fiziki klaviatura aktiv olanda görünsün"</string>
-    <string name="hardware" msgid="1800597768237606953">"Virtual klaviaturanı göstərin"</string>
+    <string name="hardware" msgid="3611039921284836033">"Ekran klaviaturası işlədin"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> cihazını konfiqurasiya edin"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Fiziki klaviaturaları konfiqurasiya edin"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Dil və tərtibatı seçmək üçün tıklayın"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" - "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Yığışdır"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Səsin həcmi tövsiyə olunan səviyyədən artıq olsun?\n\nYüksək səsi uzun zaman dinləmək eşitmə qabiliyyətinizə zərər vura bilər."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Xəbərdarlıq,\nQulaqlıqlar vasitəsilə bir həftə ərzində güvənli şəkildə dinləyə biləcəyiniz yüksək səs siqnallarının miqdarını keçmisiniz.\n\nBu həddi aşmaq eşitmə qabiliyyətini həmişəlik zədələyəcək."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Xəbərdarlıq,\nQulaqlıqlar vasitəsilə bir həftə ərzində güvənli şəkildə dinləyə biləcəyiniz yüksək səs siqnallarının miqdarını 5 dəfə keçmisiniz.\n\nEşitmə qabiliyyətinizi qorumaq üçün səs səviyyəsi azaldılıb."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Mediaya qulaq asdığınız səviyyə uzun müddət davam etdikdə eşitmə qabuliyyətinin zədələnməsi ilə nəticələnə bilər.\n\nBu səviyyədə uzun müddət oxutmağa davam etmək eşitmə qabiliyyətinizə zərər verə bilər."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Xəbərdarlıq,\nHazırda təhlükəli səviyyədə oxudulan yüksək səsli məzmunu dinləyirsiniz.\n\nBu yüksək səslə dinləməyə davam etmək eşitmə qabiliyyətinizi həmişəlik zədələyəcək."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Yüksək səsdə davam edilsin?\n\nQulaqlığın səsi tövsiyə ediləndən uzun müddət yüksək olub. Eşitmə zədələnə bilər"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Yüksək səs aşkarlandı\n\nQulaqlığın səsi tövsiyə ediləndən yüksək olub. Eşitmə zədələnə bilər"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Əlçatımlılıq Qısayolu istifadə edilsin?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Qısayol aktiv olduqda, hər iki səs düyməsinə 3 saniyə basıb saxlamaqla əlçatımlılıq funksiyası başladılacaq."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Əlçatımlılıq funksiyaları üçün qısayol aktiv edilsin?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Çıxmaq üçün yuxarıdan aşağı sürüşdürün."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Anladım"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Daha yaxşı görünüş üçün fırladın"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Daha yaxşı görünüş üçün bölünmüş ekrandan çıxın"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Yaxşı görmək üçün <xliff:g id="NAME">%s</xliff:g> tətbiqini tam ekranda açın"</string>
     <string name="done_label" msgid="7283767013231718521">"Hazırdır"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Dairəvi saat slayderi"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Dairəvi dəqiqə slayderi"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Tətbiq əlçatan deyil"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> hazırda əlçatan deyil."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> əlçatan deyil"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"İcazə tələb olunur"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"İcazə sorğusu dayandırıldı"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Bu tətbiqə əlavə icazələr lazımdır, lakin yayım sessiyasında icazə vermək olmur. Əvvəlcə Android TV cihazında icazə verin."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Bu tətbiqə əlavə icazələr lazımdır, lakin yayım sessiyasında icazə vermək olmur. Əvvəlcə planşetdə icazə verin."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Bu tətbiqə əlavə icazələr lazımdır, lakin yayım sessiyasında icazə vermək olmur. Əvvəlcə telefonda icazə verin."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"<xliff:g id="DEVICE">%1$s</xliff:g> cihazınızda buna giriş mümkün deyil. Telefonunuzda sınayın."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Bu tətbiq köhnə Android versiyası üçün nəzərdə tutulub. O, düzgün işləməyə bilər və ən son təhlükəsizlik və məxfilik qorumalarını ehtiva etmir. Güncəlləməni yoxlayın və ya tətbiq tərtibatçısı 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="deprecated_abi_message" msgid="6820548011196218091">"Bu tətbiq son Android versiyası ilə uyğun deyil. Güncəllənməni yoxlayın və ya tətbiq tərtibatçısı ilə əlaqə saxlayın."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Yeni mesajlarınız var"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Baxmaq üçün SMS tətbiqini açın"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Bəzi funksiyalar məhdudlaşdırıla bilər"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Bu kontenti iş tətbiqləri ilə açmaq mümkün deyil"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Bu kontenti şəxsi tətbiqlər ilə paylaşmaq mümkün deyil"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Bu kontenti şəxsi tətbiqlər ilə açmaq mümkün deyil"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"İş profilinə fasilə verilib"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Aktiv etmək üçün toxunun"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"İş tətbiqlərinə pauza verilib"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Pauzanı bitirin"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"İş tətbiqi yoxdur"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Şəxsi tətbiq yoxdur"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"<xliff:g id="APP">%s</xliff:g> iş profili açılsın?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"<xliff:g id="APP">%s</xliff:g> şəxsi profilində açılsın?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"<xliff:g id="APP">%s</xliff:g> iş profilində açılsın?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"İş tətbiqindən zəng edilsin?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"İş tətbiqinə dəyişilsin?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Təşkilat yalnız iş tətbiqindən zəng etməyə icazə verir"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Təşkilat yalnız iş tətbiqindən mesaj göndərməyə icazə verir"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Şəxsi brauzerdən istifadə edin"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"İş brauzerindən istifadə edin"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Zəng edin"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Dəyişin"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM şəbəkəsi kilidaçma PİN\'i"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM Şəbəkəsi Alt Dəstinin kilidaçma PIN\'i"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM korporativ kilidaçma PIN\'i"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"<xliff:g id="DEVICE">%1$s</xliff:g> cihazınızdan telefonun kamerasına giriş etmək olmur"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"<xliff:g id="DEVICE">%1$s</xliff:g> cihazınızdan planşetin kamerasına giriş etmək olmur"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Yayım zamanı buna giriş mümkün deyil. Telefonunuzda sınayın."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Yayım zamanı şəkildə şəkilə baxmaq mümkün deyil"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Sistem defoltu"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KART <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Saatları idarə etmək üçün Kompanyon Saat profili icazəsi"</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index 632f552..c32f95a 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -86,7 +86,7 @@
     <string name="NetworkPreferenceSwitchSummary" msgid="2086506181486324860">"Probajte da promenite željenu mrežu. Dodirnite da biste promenili."</string>
     <string name="EmergencyCallWarningTitle" msgid="1615688002899152860">"Hitni pozivi nisu dostupni"</string>
     <string name="EmergencyCallWarningSummary" msgid="1194185880092805497">"Ne možete da upućujete hitne pozive preko Wi‑Fi-ja"</string>
-    <string name="notification_channel_network_alert" msgid="4788053066033851841">"Obaveštenja"</string>
+    <string name="notification_channel_network_alert" msgid="4788053066033851841">"Upozorenja"</string>
     <string name="notification_channel_call_forward" msgid="8230490317314272406">"Preusmeravanje poziva"</string>
     <string name="notification_channel_emergency_callback" msgid="54074839059123159">"Režim za hitan povratni poziv"</string>
     <string name="notification_channel_mobile_data_status" msgid="1941911162076442474">"Status mobilnih podataka"</string>
@@ -248,10 +248,10 @@
     <string name="global_action_power_options" msgid="1185286119330160073">"Napajanje"</string>
     <string name="global_action_restart" msgid="4678451019561687074">"Restartuj"</string>
     <string name="global_action_emergency" msgid="1387617624177105088">"Hitan poziv"</string>
-    <string name="global_action_bug_report" msgid="5127867163044170003">"Izveštaj o grešci"</string>
+    <string name="global_action_bug_report" msgid="5127867163044170003">"Javi grešku"</string>
     <string name="global_action_logout" msgid="6093581310002476511">"Završi sesiju"</string>
     <string name="global_action_screenshot" msgid="2610053466156478564">"Snimak ekrana"</string>
-    <string name="bugreport_title" msgid="8549990811777373050">"Izveštaj o grešci"</string>
+    <string name="bugreport_title" msgid="8549990811777373050">"Javi grešku"</string>
     <string name="bugreport_message" msgid="5212529146119624326">"Ovim će se prikupiti informacije o trenutnom stanju uređaja kako bi bile poslate u poruci e-pošte. Od započinjanja izveštaja o grešci do trenutka za njegovo slanje proći će neko vreme; budite strpljivi."</string>
     <string name="bugreport_option_interactive_title" msgid="7968287837902871289">"Interaktiv. izveštaj"</string>
     <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"Koristite ovo u većini slučajeva. To vam omogućava da pratite napredak izveštaja, da unosite dodatne detalje o problemu i da snimate snimke ekrana. Verovatno će izostaviti neke manje korišćene odeljke za koje pravljenje izveštaja dugo traje."</string>
@@ -284,7 +284,7 @@
     <string name="notification_channel_network_available" msgid="6083697929214165169">"Mreža je dostupna"</string>
     <string name="notification_channel_vpn" msgid="1628529026203808999">"Status VPN-a"</string>
     <string name="notification_channel_device_admin" msgid="6384932669406095506">"Obaveštenja od IT administratora"</string>
-    <string name="notification_channel_alerts" msgid="5070241039583668427">"Obaveštenja"</string>
+    <string name="notification_channel_alerts" msgid="5070241039583668427">"Upozorenja"</string>
     <string name="notification_channel_retail_mode" msgid="3732239154256431213">"Režim demonstracije za maloprodajne objekte"</string>
     <string name="notification_channel_usb" msgid="1528280969406244896">"USB veza"</string>
     <string name="notification_channel_heavy_weight_app" msgid="17455756500828043">"Aktivna aplikacija"</string>
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android sistem"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Pređi na lični profil"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Pređi na poslovni profil"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Pređi na lični profil aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Pređi na poslovni profil aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakti"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"pristupi kontaktima"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Lokacija"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Dozvoljava aplikaciji da kontroliše vibraciju."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Dozvoljava aplikaciji da pristupa stanju vibriranja."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"direktno pozivanje brojeva telefona"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Dozvoljava aplikaciji da poziva brojeve telefona bez vaše dozvole. Ovo može da dovede do neočekivanih troškova ili poziva. Imajte na umu da ovo ne dozvoljava aplikaciji da poziva brojeve za hitne slučajeve. Zlonamerne aplikacije mogu da pozivaju bez vaše potvrde, što može da dovede do troškova."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Dozvoljava aplikaciji da poziva brojeve telefona bez vaše interakcije. To može da dovede do neočekivanih naplata ili poziva. Imajte u vidu da se time aplikaciji ne dozvoljava da poziva brojeve za hitne slučajeve. Zlonamerne aplikacije mogu da izazovu troškove upućivanjem poziva bez vaše potvrde ili da biraju kodove operatera usled čega se dolazni pozivi automatski prosleđuju na drugi broj."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"pristup usluzi poziva pomoću razmene trenutnih poruka"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Dozvoljava aplikaciji da koristi uslugu razmene trenutnih poruka da bi upućivala pozive bez vaše intervencije."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"čitanje statusa i identiteta telefona"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Dozvoljava aplikaciji da preuzima informacije o željenoj NFC usluzi za plaćanje, poput registrovanih identifikatora aplikacija i odredišta preusmeravanja."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"kontrola komunikacije u užem polju (Near Field Communication)"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Dozvoljava aplikaciji da komunicira sa oznakama, karticama i čitačima komunikacije kratkog dometa (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Transakcija u okviru bezbednosnog elementa"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Omogućava aplikaciji da dobija informacije o transkacijama koje se izvršavaju u okviru bezbednosnog elementa."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"onemogućavanje zaključavanja ekrana"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Dozvoljava aplikaciji da onemogući zaključavanje tastature i sve povezane bezbednosne mere sa lozinkama. Na primer, telefon onemogućava zaključavanje tastature pri prijemu dolaznog telefonskog poziva, a zatim ga ponovo omogućava po završetku poziva."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"traženje složenosti zaključavanja ekrana"</string>
@@ -615,20 +619,23 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Koristite biometriju ili zaključavanje ekrana"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Potvrdite svoj identitet"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Koristite biometrijski podatak da biste nastavili"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Nastavite pomoću otiska prsta"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Potvrdite identitet licem da biste nastavili"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Koristite biometrijski podatak ili zaključavanje ekrana da biste nastavili"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrijski hardver nije dostupan"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Potvrda identiteta je otkazana"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Nije prepoznato"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Lice nije prepoznato"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Potvrda identiteta je otkazana"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Niste podesili ni PIN, ni šablon, ni lozinku"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Greška pri potvrdi identiteta"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Koristite zaključavanje ekrana"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Upotrebite zaključavanje ekrana da biste nastavili"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Jako pritisnite senzor"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Čvrsto pritisnite senzor"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Prepoznavanje otiska prsta nije uspelo. Probajte ponovo."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Obrišite senzor za otisak prsta i probajte ponovo"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Obrišite senzor i probajte ponovo"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Jako pritisnite senzor"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Čvrsto pritisnite senzor"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Previše sporo ste pomerili prst. Probajte ponovo."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Probajte sa drugim otiskom prsta"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Previše je svetlo"</string>
@@ -701,7 +708,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Lice je prekriveno. Mora da bude sasvim vidljivo."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Provera lica nije uspela. Hardver nije dostupan."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Obrada lica je otkazana."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Korisnik je otkazao otključavanje licem"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Previše pokušaja. Probajte ponovo kasnije."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Previše pokušaja. Otključavanje licem nije dostupno."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Previše pokušaja. Koristite zaključavanje ekrana za to."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Provera lica nije uspela. Probajte ponovo."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Niste podesili otključavanje licem"</string>
@@ -1256,7 +1262,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Pokretanje aplikacija."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Završavanje pokretanja."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Pritisnuli ste dugme za uključivanje – time obično isključujete ekran.\n\nProbajte lagano da dodirnete dok podešavate otisak prsta."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Završite podešavanje isključivanjem ekrana"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Isključite ekran i napustite podešavanje"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Isključi"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Nastavljate verifikaciju otiska prsta?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Pritisnuli ste dugme za uključivanje – time obično isključujete ekran.\n\nProbajte lagano da dodirnete da biste verifikovali otisak prsta."</string>
@@ -1363,7 +1369,7 @@
     <string name="usb_ptp_notification_title" msgid="5043437571863443281">"Režim PTP preko USB-a je uključen"</string>
     <string name="usb_tether_notification_title" msgid="8828527870612663771">"USB privezivanje je uključeno"</string>
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"Režim MIDI preko USB-a je uključen"</string>
-    <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Uređaj povezan sa veb-kamerom"</string>
+    <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Uređaj povezan kao veb-kamera"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"USB dodatak je povezan"</string>
     <string name="usb_notification_message" msgid="4715163067192110676">"Dodirnite za još opcija."</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Povezani uređaj se puni. Dodirnite za još opcija."</string>
@@ -1393,7 +1399,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ODBIJ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Izbor metoda unosa"</string>
     <string name="show_ime" msgid="6406112007347443383">"Zadržava se na ekranu dok je fizička tastatura aktivna"</string>
-    <string name="hardware" msgid="1800597768237606953">"Prikaži virtuelnu tastaturu"</string>
+    <string name="hardware" msgid="3611039921284836033">"Koristi tastaturu na ekranu"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Konfigurišite uređaj <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Konfigurišite fizičke tastature"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Dodirnite da biste izabrali jezik i raspored"</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Ukloni"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Želite da pojačate zvuk iznad preporučenog nivoa?\n\nSlušanje glasne muzike duže vreme može da vam ošteti sluh."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Upozorenje,\npremašili ste broj glasnih zvučnih signala koje je bezbedno slušati preko slušalica tokom nedelju dana.\n\nPrekoračenjem tog ograničenja trajno ćete oštetiti sluh."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Upozorenje,\nPet puta ste premašili broj glasnih zvučnih signala koje je bezbedno slušati preko slušalica tokom nedelju dana.\n\nJačina zvuka treba da se smanji da biste zaštitili sluh."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Nivo na kom slušate medijski sadržaj može da dovede do oštećenja sluha ako to traje tokom dužeg perioda.\n\nAko nastavite da slušate tako glasno tokom dužeg perioda, može da dođe do oštećenja sluha."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Upozorenje,\ntrenutno slušate glasan sadržaj na nebezbednom nivou.\n\nAko nastavite da slušate tako glasno, trajno ćete oštetiti sluh."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Želite da nastavite da slušate glasnu muziku?\n\nJačina zvuka u slušalicama je bila visoka duže nego što se preporučuje, što može da ošteti sluh"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Prepoznat je glasan zvuk\n\nJačina zvuka u slušalicama je bila veća nego što se preporučuje, što može da ošteti sluh"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Želite li da koristite prečicu za pristupačnost?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Kada je prečica uključena, pritisnite oba dugmeta za jačinu zvuka da biste pokrenuli funkciju pristupačnosti."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Želite da uključite prečicu za funkcije pristupačnosti?"</string>
@@ -1716,7 +1720,7 @@
     <string name="color_inversion_feature_name" msgid="2672824491933264951">"Inverzija boja"</string>
     <string name="color_correction_feature_name" msgid="7975133554160979214">"Korekcija boja"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Režim jednom rukom"</string>
-    <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Dodatno zatamnjeno"</string>
+    <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Dodatno zatamni"</string>
     <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Slušni aparati"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"Držali ste tastere za jačinu zvuka. Usluga <xliff:g id="SERVICE_NAME">%1$s</xliff:g> je uključena."</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"Držali ste tastere za jačinu zvuka. Usluga <xliff:g id="SERVICE_NAME">%1$s</xliff:g> je isključena."</string>
@@ -1846,13 +1850,13 @@
     <string name="restr_pin_confirm_pin" msgid="7143161971614944989">"Potvrdite novi PIN"</string>
     <string name="restr_pin_create_pin" msgid="917067613896366033">"Napravite PIN za izmenu ograničenja"</string>
     <string name="restr_pin_error_doesnt_match" msgid="7063392698489280556">"PIN-ovi se ne podudaraju. Probajte ponovo."</string>
-    <string name="restr_pin_error_too_short" msgid="1547007808237941065">"PIN je prekratak. Mora da sadrži najmanje 4 cifre."</string>
+    <string name="restr_pin_error_too_short" msgid="1547007808237941065">"PIN je prekratak. Mora da ima bar 4 cifre."</string>
     <string name="restr_pin_try_later" msgid="5897719962541636727">"Probajte ponovo kasnije"</string>
     <string name="immersive_cling_title" msgid="2307034298721541791">"Prikazuje se ceo ekran"</string>
     <string name="immersive_cling_description" msgid="7092737175345204832">"Da biste izašli, prevucite nadole odozgo."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Važi"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Rotirajte radi boljeg prikaza"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Izađite iz podeljenog ekrana radi boljeg prikaza"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Otvorite aplikaciju <xliff:g id="NAME">%s</xliff:g> preko celog ekrana da biste bolje videli"</string>
     <string name="done_label" msgid="7283767013231718521">"Gotovo"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Kružni klizač za sate"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Kružni klizač za minute"</string>
@@ -1953,12 +1957,12 @@
     <string name="app_suspended_more_details" msgid="211260942831587014">"Saznajte više"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Opozovi pauziranje aplikacije"</string>
     <string name="work_mode_off_title" msgid="6367463960165135829">"Uključiti poslovne aplikacije?"</string>
-    <string name="work_mode_turn_on" msgid="5316648862401307800">"Opozovi pauzu"</string>
+    <string name="work_mode_turn_on" msgid="5316648862401307800">"Ponovo aktiviraj"</string>
     <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Hitan slučaj"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"Aplikacija nije dostupna"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> trenutno nije dostupna."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> – nije dostupno"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Potrebna je dozvola"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Zahtev za dozvolu je blokiran"</string>
     <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>
@@ -1969,6 +1973,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Ova aplikacija zahteva dodatne dozvole, ali dozvole ne mogu da se daju u sesiji strimovanja. Prvo dajte dozvolu na Android TV uređaju."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Ova aplikacija zahteva dodatne dozvole, ali dozvole ne mogu da se daju u sesiji strimovanja. Prvo dajte dozvolu na tabletu."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Ova aplikacija zahteva dodatne dozvole, ali dozvole ne mogu da se daju u sesiji strimovanja. Prvo dajte dozvolu 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>
@@ -1977,6 +1984,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"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="deprecated_target_sdk_message" msgid="5246906284426844596">"Ova aplikacija je napravljena za stariju verziju Android-a. Možda neće raditi ispravno i ne obuhvata najnovije bezbednosne funkcije i zaštite privatnosti. Proverite da li ima ažuriranja ili se obratite programeru aplikacije."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Potraži ažuriranje"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Ova aplikacija nije kompatibilna sa najnovijom verzijom Android-a. Proverite da li ima ažuriranja ili se obratite programeru aplikacije."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Imate nove poruke"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Otvorite aplikaciju za SMS da biste pregledali"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Neke funkcije su možda ograničene"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Ovaj sadržaj ne može da se otvara pomoću poslovnih aplikacija"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Ovaj sadržaj ne može da se deli pomoću ličnih aplikacija"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Ovaj sadržaj ne može da se otvara pomoću ličnih aplikacija"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Poslovni profil je pauziran"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Dodirnite da biste uključili"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Poslovne aplikacije su pauzirane"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Ponovo aktiviraj"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nema poslovnih aplikacija"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nema ličnih aplikacija"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Želite da otvorite poslovnu aplikaciju <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Želite da otvorite u ličnoj aplikaciji <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Želite da otvorite u poslovnoj aplikaciji <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Želite da pozovete iz poslovne aplikacije?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Želite da prebacite na poslovnu aplikaciju?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Vaša organizacija dozvoljava pozivanje samo iz poslovnih aplikacija"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Vaša organizacija dozvoljava slanje poruka samo iz poslovnih aplikacija"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Koristi lični pregledač"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Koristi poslovni pregledač"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Pozovi"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Prebaci"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN za otključavanje SIM mreže"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN za otključavanje podskupa SIM mreže"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN za otključavanje poslovne SIM kartice"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Ne može da se pristupi kameri telefona sa <xliff:g id="DEVICE">%1$s</xliff:g> uređaja"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Ne može da se pristupi kameri tableta sa <xliff:g id="DEVICE">%1$s</xliff:g> uređaja"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Ovom ne možete da pristupate tokom strimovanja. Probajte na telefonu."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Ne možete da gledate sliku u slici pri strimovanju"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Podrazumevani sistemski"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KARTICA <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Dozvola za profil pratećeg sata za upravljanje satovima"</string>
@@ -2330,7 +2344,7 @@
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"Uređaj <xliff:g id="DEVICE_NAME">%s</xliff:g> je konfigurisan"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Raspored tastature je podešen na <xliff:g id="LAYOUT_1">%s</xliff:g>. Dodirnite da biste to promenili."</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Raspored tastature je podešen na <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Dodirnite da biste to promenili."</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Raspored tastature je podešen na <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Dodirnite da biste to promenili."</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Raspored tastature je <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Dodirnite da biste to promenili."</string>
     <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Raspored tastature je podešen na <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>… Dodirnite da biste promenili."</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"Fizičke tastature su konfigurisane"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"Dodirnite da biste videli tastature"</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index ce9ee3f..3be47fa 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -300,6 +300,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Сістэма Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Пераключыцца на асабісты профіль"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Пераключыцца на працоўны профіль"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Пераключыцца на асабісты профіль <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Пераключыцца на працоўны профіль <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Кантакты"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"атрымліваць доступ да вашых кантактаў"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Месцазнаходжанне"</string>
@@ -505,7 +507,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Дазваляе прыкладанням кіраваць вібрацыяй."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Дазваляе праграме атрымліваць доступ да вібрасігналу."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"непасрэдна набіраць тэлефонныя нумары"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Дазваляе прыкладанням званiць на тэлефонныя нумары без вашага ўмяшання. Гэта можа прывесці да нечаканага спагнання сродкаў або званкоў. Звярніце ўвагу, што прыкладанне не можа рабiць экстраныя выклікi. Шкоднасныя прыкладаннi могуць спаганяць з вас сродкi, робячы званкі без вашага пацверджання."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Дазваляе праграме тэлефанаваць на тэлефонныя нумары без вашага ўдзелу. У выніку вы можаце пабачыць нечаканыя плацяжы і званкі. Аднак праграма не зможа рабіць выклікі на нумары экстранных службаў. Шкодныя праграмы могуць прыносіць выдаткі, робячы выклікі без вашага пацвярджэння, або набіраючы коды аператараў, з якімі ўваходныя выклікі аўтаматычна перанакіроўваюцца на іншы нумар."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"атрымліваць доступ да сэрвісу выклікаў IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Дазваляе праграмам выкарыстоўваць службу IMS, каб рабіць выклікі без вашага ўмяшання."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"чытанне статусу тэлефона і ідэнтыфікацыя"</string>
@@ -590,6 +592,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Дазваляе праграме атрымаць доступ да інфармацыі пра прыярытэтны сэрвіс аплаты NFC, напрыклад зарэгістраваныя ідэнтыфікатары праграм і маршруты адпраўкі даных."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"кантроль Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Дазваляе прыкладаннzv спалучацца з тэгамі, картамі і счытваючымі прыладамі Near Field Communication (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Трасанкцыі з выкарыстаннем ахоўнага элемента"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Праграма зможа атрымліваць інфармацыю пра трансакцыі, якія адбываюцца з выкарыстаннем ахоўнага элемента."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"адключэнне блакiроўкi экрана"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Дазваляе прыкладанням адключаць блакiроўку клавіятуры і любыя сродкі абароны, звязаныя з паролем. Прыкладам гэтага з\'яўляецца адключэнне тэлефонам блакiроўкi клавіятуры пры атрыманні ўваходнага выкліку і паўторнае ўключэнне блакiроўкi клавіятуры, калі выклік завершаны."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"запытваць узровень складанасці блакіроўкі экрана"</string>
@@ -616,20 +620,23 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Выкарыстоўваць біяметрыю ці блакіроўку экрана"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Спраўдзіце, што гэта вы"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Каб працягнуць, скарыстайце свае біяметрычныя даныя"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Каб працягнуць, скарыстайце адбітак пальца"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Каб працягнуць, скарыстайце распазнаванне твару"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Каб працягнуць, скарыстайце біяметрычныя даныя ці сродак разблакіроўкі экрана"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Біяметрычнае абсталяванне недаступнае"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Аўтэнтыфікацыя скасавана"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Не распазнана"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Твар не распазнаны"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Аўтэнтыфікацыя скасавана"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Не заданы PIN-код, узор разблакіроўкі або пароль"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Памылка аўтэнтыфікацыі"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ужываць блакіроўку экрана"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Каб працягнуць, скарыстайце свой сродак блакіроўкі экрана"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Моцна націсніце на сканер"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Шчыльна прыкладзіце палец да сканера"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Не ўдалося распазнаць адбітак пальца. Паўтарыце спробу."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Ачысціце сканер адбіткаў пальцаў і паўтарыце спробу"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Ачысціце сканер і паўтарыце спробу"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Моцна націсніце на сканер"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Шчыльна прыкладзіце палец да сканера"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Палец рухаўся занадта павольна. Паспрабуйце яшчэ раз."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Паспрабуйце іншы адбітак пальца"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Занадта светла"</string>
@@ -673,7 +680,7 @@
     <string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"Каб выкарыстоўваць распазнаванне твару, уключыце "<b>"доступ да камеры"</b>" праз раздзел \"Налады &gt; Прыватнасць\""</string>
     <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Наладзьце дадатковыя спосабы разблакіроўкі"</string>
     <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Націсніце, каб дадаць адбітак пальца"</string>
-    <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Разблакіраванне адбіткам пальца"</string>
+    <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Разблакіроўка адбіткам пальца"</string>
     <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Не ўдалося скарыстаць сканер адбіткаў пальцаў"</string>
     <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Звярніцеся ў сэрвісны цэнтр."</string>
     <string name="face_acquired_insufficient" msgid="6889245852748492218">"Не ўдалося стварыць мадэль твару. Паўтарыце."</string>
@@ -711,8 +718,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Распазнаванне твару скасавана."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Распазнаванне твару скасавана карыстальнікам"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Занадта шмат спроб. Паўтарыце спробу пазней."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Занадта шмат спроб. Распазнаванне твару недаступна."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Занадта шмат спроб. Разблакіруйце экран іншым спосабам."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Не ўдалося спраўдзіць твар. Паўтарыце спробу."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Вы не наладзілі распазнаванне твару"</string>
@@ -1257,7 +1263,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Запуск прыкладанняў."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Завяршэнне загрузкі."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Вы націснулі кнопку сілкавання. Звычайна ў выніку гэтага дзеяння выключаецца экран.\n\nПадчас наладжвання адбітка пальца злёгку дакраніцеся да кнопкі."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Каб завяршыць наладку, выключыце экран"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Каб скончыць наладку, выключыце экран"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Выключыць"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Працягнуць спраўджанне адбітка пальца?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Вы націснулі кнопку сілкавання. Звычайна ў выніку гэтага дзеяння выключаецца экран.\n\nКаб спраўдзіць адбітак пальца, злёгку дакраніцеся да кнопкі."</string>
@@ -1394,7 +1400,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"АДХІЛІЦЬ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Выберыце метад уводу"</string>
     <string name="show_ime" msgid="6406112007347443383">"Захоўваць яе на экране ў той час, калі фізічная клавіятура актыўная"</string>
-    <string name="hardware" msgid="1800597768237606953">"Паказаць віртуальную клавіятуру"</string>
+    <string name="hardware" msgid="3611039921284836033">"Экранная клавіятура"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Наладзьце прыладу \"<xliff:g id="DEVICE_NAME">%s</xliff:g>\""</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Наладзьце фізічныя клавіятуры"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Дакраніцеся, каб выбраць мову і раскладку"</string>
@@ -1683,10 +1689,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Выдалiць"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Павялiчыць гук вышэй рэкамендаванага ўзроўню?\n\nДоўгае праслухоўванне музыкi на вялiкай гучнасцi можа пашкодзiць ваш слых."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Папярэджанне.\nВы перавысілі колькасць моцных гукаў, якая лічыцца бяспечнай для слухання праз навушнікі на працягу тыдня.\n\nПеравышэнне гэтага значэння можа незваротна пашкодзіць ваш слых."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Папярэджанне.\nВы ў 5 разоў перавысілі колькасць гукаў, якая лічыцца бяспечнай для слухання праз навушнікі на працягу тыдня.\n\nКаб зберагчы ваш слых, гучнасць паменшана."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Выбраны вамі ўзровень гучнасці можа быць шкодным для слыху пры працяглым слуханні мультымедыя.\n\nДоўгае праслухванне на такім узроўні гучнасці можа пашкодзіць ваш слых."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Папярэджанне.\nЗмесціва, якое вы слухаеце, прайграецца на небяспечным узроўні гучнасці.\n\nПрацяг праслухвання на такой гучнасцi незваротна пашкодзiць ваш слых."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Працягнуць праслухоўваць на вялікай гучнасці?\n\nГучнасць у навушніках была вялікай даўжэй, чым рэкамендавана, гэта можа пашкодзіць ваш слых"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Выяўлены моцны гук\n\nГучнасць у навушніках была большай, чым рэкамендавана, гэта можа пашкодзіць ваш слых"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Выкарыстоўваць камбінацыю хуткага доступу для спецыяльных магчымасцей?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Калі хуткі доступ уключаны, вы можаце націснуць абедзве кнопкі гучнасці і ўтрымліваць іх 3 секунды, каб запусціць функцыю спецыяльных магчымасцей."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Уключыць хуткі доступ да спецыяльных магчымасцей?"</string>
@@ -1853,7 +1857,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Для выхаду правядзіце зверху ўніз."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Зразумела"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Павярнуць для лепшага прагляду"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Выйсці з рэжыму падзеленага экрана для лепшага прагляду"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Для больш зручнага прагляду адкрыйце праграму \"<xliff:g id="NAME">%s</xliff:g>\", выкарыстоўваючы поўнаэкранны рэжым"</string>
     <string name="done_label" msgid="7283767013231718521">"Гатова"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Кругавы паўзунок гадзін"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Кругавы паўзунок хвілін"</string>
@@ -1873,8 +1877,8 @@
     <string name="package_updated_device_owner" msgid="7560272363805506941">"Абноўлены вашым адміністратарам"</string>
     <string name="package_deleted_device_owner" msgid="2292335928930293023">"Выдалены вашым адміністратарам"</string>
     <string name="confirm_battery_saver" msgid="5247976246208245754">"ОК"</string>
-    <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"У рэжыме эканоміі зараду ўключаецца цёмная тэма і выключаюцца ці абмяжоўваюцца дзеянні ў фонавым рэжыме, некаторыя візуальныя эфекты, пэўныя функцыі і падключэнні да сетак."</string>
-    <string name="battery_saver_description" msgid="8518809702138617167">"У рэжыме эканоміі зараду ўключаецца цёмная тэма і выключаюцца ці абмяжоўваюцца дзеянні ў фонавым рэжыме, некаторыя візуальныя эфекты, пэўныя функцыі і падключэнні да сетак."</string>
+    <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"У рэжыме энергазберажэння ўключаецца цёмная тэма і выключаюцца ці абмяжоўваюцца дзеянні ў фонавым рэжыме, некаторыя візуальныя эфекты, пэўныя функцыі і падключэнні да сетак."</string>
+    <string name="battery_saver_description" msgid="8518809702138617167">"У рэжыме энергазберажэння ўключаецца цёмная тэма і выключаюцца ці абмяжоўваюцца дзеянні ў фонавым рэжыме, некаторыя візуальныя эфекты, пэўныя функцыі і падключэнні да сетак."</string>
     <string name="data_saver_description" msgid="4995164271550590517">"У рэжыме \"Эканомія трафіка\" фонавая перадача для некаторых праграмам адключана. Праграма, якую вы зараз выкарыстоўваеце, можа атрымліваць доступ да даных, але радзей, чым звычайна. Напрыклад, відарысы могуць не загружацца, пакуль вы не націсніце на іх."</string>
     <string name="data_saver_enable_title" msgid="7080620065745260137">"Уключыць Эканомію трафіка?"</string>
     <string name="data_saver_enable_button" msgid="4399405762586419726">"Уключыць"</string>
@@ -1959,7 +1963,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Праграма недаступная"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Праграма \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" цяпер недаступная."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"Недаступна: <xliff:g id="ACTIVITY">%1$s</xliff:g>"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Патрабуецца дазвол"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Запыт дазволу заблакіраваны"</string>
     <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>
@@ -1970,6 +1974,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Гэта праграма запытвае дадатковыя дазволы, якія немагчыма даць падчас трансляцыі. Спачатку дайце дазвол на прыладзе Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Гэта праграма запытвае дадатковыя дазволы, якія немагчыма даць падчас трансляцыі. Спачатку дайце дазвол на планшэце."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Гэта праграма запытвае дадатковыя дазволы, якія немагчыма даць падчас трансляцыі. Спачатку дайце дазвол на тэлефоне."</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>
@@ -1978,6 +1985,7 @@
     <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="5246906284426844596">"Гэта праграма створана для ранейшай версіі Android. Яна можа кепска працаваць, і ў ёй няма новых сродкаў абароны бяспекі і прыватнасці. Праверце наяўнасць абнаўленняў ці звярніцеся да распрацоўшчыка праграмы."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Праверыць наяўнасць абнаўленняў"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Гэтая праграма несумяшчальная з апошняй версіяй Android. Праверце наяўнасць абнаўленняў ці звярніцеся да распрацоўшчыка праграмы."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"У вас ёсць новыя паведамленні"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Праглядзець праз праграму для SMS"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Функцыі могуць быць абмежаваныя"</string>
@@ -2161,16 +2169,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Не ўдалося адкрыць гэта змесціва з дапамогай працоўных праграм"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Не ўдалося абагуліць гэта змесціва з асабістымі праграмамі"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Не ўдалося адкрыць гэта змесціва з дапамогай асабістых праграм"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Працоўны профіль прыпынены"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Націсніце, каб уключыць"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Працоўныя праграмы прыпынены"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Уключыць"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Няма працоўных праграм"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Няма асабістых праграм"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Адкрыць працоўную праграму <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Адкрыць у асабістым профілі <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Адкрыць у працоўным профілі <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Зрабіць выклік з працоўнай праграмы?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Пераключыцца на працоўную праграму?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Ваша арганізацыя дазваляе рабіць выклікі толькі з працоўных праграм"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Ваша арганізацыя дазваляе адпраўляць паведамленні толькі з працоўных праграм"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Скарыстаць асабісты браўзер"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Скарыстаць працоўны браўзер"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Выклікаць"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Пераключальнік"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-код разблакіроўкі сеткі для SIM-карты"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN-код разблакіроўкі падмноства сеткі для SIM-карты"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN-код разблакіроўкі карпаратыўнай SIM-карты"</string>
@@ -2307,6 +2320,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Не ўдалося атрымаць доступ да камеры тэлефона з прылады \"<xliff:g id="DEVICE">%1$s</xliff:g>\""</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Не ўдалося атрымаць доступ да камеры планшэта з прылады \"<xliff:g id="DEVICE">%1$s</xliff:g>\""</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Не ўдаецца атрымаць доступ у час перадачы плынню. Паспрабуйце скарыстаць тэлефон."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Падчас перадачы плынню прагляд у рэжыме \"Відарыс у відарысе\" немагчымы"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Стандартная сістэмная налада"</string>
     <string name="default_card_name" msgid="9198284935962911468">"КАРТА <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Дазвол для спадарожнай праграмы кіраваць гадзіннікамі"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 3f156b5..10d747b 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -20,7 +20,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="byteShort" msgid="202579285008794431">"Б"</string>
+    <string name="byteShort" msgid="202579285008794431">"B"</string>
     <string name="fileSizeSuffix" msgid="4233671691980131257">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
     <string name="untitled" msgid="3381766946944136678">"&lt;Без заглавие&gt;"</string>
     <string name="emptyPhoneNumber" msgid="5812172618020360048">"(Няма телефонен номер)"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Система Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Превключване към личния потребителски профил"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Превключване към служебния потребителски профил"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Превключване към <xliff:g id="APP_NAME">%1$s</xliff:g> в личния потребителски профил"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Превключване към <xliff:g id="APP_NAME">%1$s</xliff:g> в служебния потребителски профил"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Контакти"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"има достъп до контактите ви"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Местоположение"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Разрешава на приложението да контролира устройството за вибрация."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Дава възможност на приложението да осъществява достъп до състоянието на вибриране."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"директно обаждане до телефонни номера"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Разрешава на приложението да се обажда без ваша намеса до телефонни номера, което може да доведе до неочаквано таксуване или обаждания. Обърнете внимание, че това не му позволява да извършва обаждания до спешните служби. Злонамерените приложения могат да ви въвлекат в разходи, като извършват обаждания без потвърждение от ваша страна."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Разрешава на приложението да се обажда без ваша намеса на телефонни номера. Това може да доведе до неочаквани таксувания или обаждания. Имайте предвид, че това не позволява на приложението да извършва обаждания до номера за спешни случаи. Злонамерените приложения могат да ви въвлекат в разходи, като извършват обаждания без потвърждение от ваша страна или като набират кодове на оператора, които автоматично пренасочват входящите обаждания към друг номер."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"достъп до услугата за незабавни съобщения за обаждания"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Разрешава на приложението да използва услугата за незабавни съобщения за извършване на обаждания без намеса от ваша страна."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"четене на състоянието и идентификационните данни на телефона"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Дава възможност на приложението да получава информация за предпочитаната услуга за плащане чрез NFC, като например регистрирани помощни средства и местоназначение."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"контролиране на комуникацията в близкото поле"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Разрешава на приложението да комуникира с маркери, карти и четци, ползващи комуникация в близкото поле (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Събитие за транзакции в защитен елемент"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Разрешава на приложението да получава информация за транзакциите, които се осъществяват в защитен елемент."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"деактивиране на заключването на екрана ви"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Разрешава на приложението да деактивира заключването на клавиатурата и свързаната защита с парола. Например телефонът деактивира заключването при получаване на входящо обаждане и после го активира отново, когато обаждането завърши."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"заявяване на сложност на опцията за заключване на екрана"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Използване на биометрични данни или опцията за заключване на екрана"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Потвърдете, че сте вие"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Използвайте биометричните си данни, за да продължите"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Използвайте отпечатъка си, за да продължите"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Използвайте лицето си, за да продължите"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Използвайте биометричните си данни или опцията за заключване на екрана, за да продължите"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Биометричният хардуер не е налице"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Удостоверяването бе анулирано"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Не е разпознато"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Лицето не е разпознато"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Удостоверяването бе анулирано"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Няма зададен ПИН код, фигура или парола"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Грешка при удостоверяването"</string>
@@ -684,7 +691,7 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Преместете телефона наляво"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Преместете телефона надясно"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Моля, гледайте точно към устройството си."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Лицето ви не се вижда. Дръжте телефона на нивото на очите си."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Лицето не се вижда. Задръжте на нивото на очите."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Твърде много движение. Дръжте телефона неподвижно."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Моля, регистрирайте лицето си отново."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Лицето не е разпознато. Опитайте отново."</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Лицето ви е покрито. То трябва да е напълно видимо."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Лицето не може да се потвърди. Хардуерът не е налице."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Операцията с лице е анулирана."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Отключването с лице е анулирано от потребителя"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Твърде много опити. Опитайте отново по-късно."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Твърде много опити. „Отключване с лице“ не е налице."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Твърде много опити. Използвайте опцията за заключване на екрана."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Лицето не може да се потвърди. Опитайте отново."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Не сте настроили отключването с лице"</string>
@@ -1255,7 +1261,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Приложенията се стартират."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Зареждането завършва."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Натиснахте бутона за включване/изключване – това обикновено изключва екрана.\n\nОпитайте да докоснете леко, докато настройвате отпечатъка си."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Изключете екрана за изход от настройката"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"За изход изключете екрана"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Изключване"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Напред с потвърждаването на отпечатъка?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Натиснахте бутона за включване/изключване – това обикновено изключва екрана.\n\nОпитайте да докоснете леко, за да потвърдите отпечатъка си."</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ОТХВЪРЛЯНЕ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Избор на метод на въвеждане"</string>
     <string name="show_ime" msgid="6406112007347443383">"Показване на екрана, докато физическата клавиатура е активна"</string>
-    <string name="hardware" msgid="1800597768237606953">"Показване на вирт. клавиатура"</string>
+    <string name="hardware" msgid="3611039921284836033">"Ползв. на екранната клавиатура"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Конфигуриране на <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Конфигуриране на физически клавиатури"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Докоснете, за да изберете език и подредба"</string>
@@ -1618,7 +1624,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"Таблет"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Телевизор"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Телефон"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Докинг станц.: Високогов."</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Високоговорители докинг станция"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Външно устройство"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Слушалки"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Премахване"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Да се увеличи ли силата на звука над препоръчителното ниво?\n\nПродължителното слушане при висока сила на звука може да увреди слуха ви."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Внимание!\nНадвишихте безопасния брой сигнали със силен звук, които човек може да чуе със слушалки в рамките на една седмица.\n\nТова ще увреди слуха ви за постоянно."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Внимание!\nНадвишихте петкратно безопасния брой сигнали със силен звук, които човек може да чуе със слушалки в рамките на една седмица.\n\nСилата на звука бе намалена с цел предпазване на слуха ви."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Силата на звука, с която се възпроизвежда мултимедийно съдържание, може да доведе до увреждане на слуха, ако слушате продължително.\n\nПродължителното слушане при съответната сила на звука може да увреди слуха ви."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Внимание!\nВ момента слушате съдържание, което се възпроизвежда при опасно висока сила на звука.\n\nАко продължите да слушате с толкова силен звук, ще увредите слуха си за постоянно."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Искате да продължите да слушате при високо ниво на силата на звука?\n\nНивото на силата на звука на слушалките е било високо по-дълго, отколкото е препоръчително, което може да увреди слуха ви"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Установен е висок звук\n\nНивото на силата на звука на слушалките е било по-високо, отколкото е препоръчително, което може да увреди слуха ви"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Искате ли да използвате пряк път към функцията за достъпност?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Когато прекият път е включен, можете да стартирате дадена функция за достъпност, като натиснете двата бутона за силата на звука и ги задържите за 3 секунди."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Искате ли да включите прекия път за функциите за достъпност?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"За изход плъзнете пръст надолу от горната част."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Разбрах"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Завъртете за по-добър изглед"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Излезте от разделения екран за по-добър изглед"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Отворете <xliff:g id="NAME">%s</xliff:g> на цял екран за по-добър изглед"</string>
     <string name="done_label" msgid="7283767013231718521">"Готово"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Кръгов плъзгач за часовете"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Кръгов плъзгач за минутите"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Приложението не е достъпно"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"В момента няма достъп до <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> не е налице"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Необходимо е разрешение"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Заявката за разрешения е блокирана"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Това приложение изисква допълнителни разрешения, но те не могат да бъдат предоставени в сесия за поточно предаване. Първо ги предоставете на устройството си с Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Това приложение изисква допълнителни разрешения, но те не могат да бъдат предоставени в сесия за поточно предаване. Първо ги предоставете на таблета си."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Това приложение изисква допълнителни разрешения, но те не могат да бъдат предоставени в сесия за поточно предаване. Първо ги предоставете на телефона си."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"Това приложение бе създадено за по-стара версия на Android. То може да не работи правилно и не включва най-новите защити на поверителността и сигурността. Проверете за актуализация или се свържете с програмиста му."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Проверка за актуализация"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Това приложение не е съвместимо с най-новата версия на Android. Проверете за актуализация или се свържете с програмиста му."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Имате нови съобщения"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Преглед в приложението за SMS"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Някои функции може да са ограничени"</string>
@@ -2064,7 +2072,7 @@
     <string name="harmful_app_warning_open_anyway" msgid="5963657791740211807">"ОТВАРЯНЕ"</string>
     <string name="harmful_app_warning_title" msgid="8794823880881113856">"Открито е опасно приложение"</string>
     <string name="slices_permission_request" msgid="3677129866636153406">"<xliff:g id="APP_0">%1$s</xliff:g> иска да показва части от <xliff:g id="APP_2">%2$s</xliff:g>"</string>
-    <string name="screenshot_edit" msgid="7408934887203689207">"Редактиране"</string>
+    <string name="screenshot_edit" msgid="7408934887203689207">"Редакти­ране"</string>
     <string name="volume_dialog_ringer_guidance_vibrate" msgid="2055927873175228519">"При обаждания и известия устройството ще вибрира"</string>
     <string name="volume_dialog_ringer_guidance_silent" msgid="1011246774949993783">"Обажданията и известията ще бъдат заглушени"</string>
     <string name="notification_channel_system_changes" msgid="2462010596920209678">"Промени в системата"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Това съдържание не може да се отваря със служебни приложения"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Това съдържание не може да се споделя с лични приложения"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Това съдържание не може да се отваря с лични приложения"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Служебният потребителски профил е поставен на пауза"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Докоснете за включване"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Служебните приложения са поставени на пауза"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Отмяна на паузата"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Няма подходящи служебни приложения"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Няма подходящи лични приложения"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Да се отвори ли <xliff:g id="APP">%s</xliff:g> в служебния потребителски профил?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Да се отвори ли в(ъв) <xliff:g id="APP">%s</xliff:g> в личния потребителски профил?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Да се отвори ли в(ъв) <xliff:g id="APP">%s</xliff:g> в служебния потребителски профил?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Да се извърши ли обаждане от служебното приложение?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Искате ли да превключите към служебното приложение?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Организацията ви разрешава да извършвате обаждания само от служебни приложения"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Организацията ви разрешава да изпращате съобщения само от служебни приложения"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Използване на личния браузър"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Използване на служебния браузър"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Обаждане"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Превключване"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"ПИН за отключване на мрежата за SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"ПИН за отключване на подмножеството от мрежи за SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"ПИН за отключване на корпоративната SIM карта"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Няма достъп до камерата на телефона от вашия <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Няма достъп до камерата на таблета от вашия <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"До това съдържание не може да се осъществи достъп при поточно предаване. Вместо това опитайте от телефона си."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Функцията „Картина в картината“ не е налице при поточно предаване"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Стандартно за системата"</string>
     <string name="default_card_name" msgid="9198284935962911468">"КАРТА <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Разрешение на придружаващото приложение за достъп до потребителския профил на часовника с цел управление на часовници"</string>
@@ -2317,11 +2331,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Разрешава на дадено придружаващо приложение да стартира услуги на преден план, докато се изпълнява на заден план."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Микрофонът е налице"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Микрофонът е блокиран"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Двоен екран"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Функцията за двоен екран е включена"</string>
-    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"Приложението <xliff:g id="APP_NAME">%1$s</xliff:g> използва и двата екрана, за да показва съдържание"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Функцията Dual Screen е включена"</string>
+    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> използва и двата екрана, за да показва съдържание"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Устройството е твърде топло"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Функцията за двоен екран не е налице, защото телефонът ви е твърде топъл"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Функцията Dual Screen не е налице, защото телефонът ви е твърде топъл"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Функцията Dual Screen не е налице"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Функцията Dual Screen не е налице, защото режимът за запазване на батерията е включен. Можете да го изключите от настройките."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Към настройките"</string>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index 5a2fa58..9d276cb 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android সিস্টেম"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"এর বদলে ব্যক্তিগত প্রোফাইল ব্যবহার করুন"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"এর বদলে কাজের প্রোফাইল ব্যবহার করুন"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g> ব্যক্তিগত প্রোফাইলে পরিবর্তন করুন"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g> অফিস প্রোফাইলে পরিবর্তন করুন"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"পরিচিতি"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"আপনার পরিচিতিগুলিতে অ্যাক্সেস"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"লোকেশন"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"অ্যাপ্লিকেশানকে কম্পক নিয়ন্ত্রণ করতে দেয়৷"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ভাইব্রেট করার স্থিতি অ্যাক্সেস করার অনুমতি দিন।"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"সরাসরি ফোন নম্বরগুলিতে কল করে"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"অ্যাপ্লিকেশানটিকে আপনার হস্তক্ষেপ ছাড়াই ফোন নম্বরগুলিতে কল করতে মঞ্জুর করে৷ এটি অপ্রত্যাশিত পরিমাণ খরচা বা কলের কারণ হতে পারে৷ মনে রাখবেন, এটি অ্যাপ্লিকেশানটির দ্বারা জরুরি নম্বরগুলিতে কল করাকে অনুমতি দেয় না৷ ক্ষতিকারক অ্যাপ্লিকেশানগুলি আপনার সম্মতি ছাড়াই কল করার ফলে আপনাকে অহেতুক পেমেন্ট করতে হতে পারে৷"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"আপনার হস্তক্ষেপ ছাড়াই ফোন নম্বরে কল করার অনুমতি দেয়। এর ফলে অপ্রত্যাশিত চার্জ লাগতে বা কল হতে পারে। মনে রাখবেন, এটি অ্যাপকে জরুরি নম্বরে কল করার অনুমতি দেয় না। ক্ষতিকর অ্যাপ, আপনার কনফার্মেশন ছাড়াই কল করে আপনার আর্থিক ক্ষতি করতে পারে অথবা পরিষেবা প্রদানকারীর কোড ডায়াল করে, যার ফলে ইনকামিং কল অটোমেটিক অন্য নম্বরে ফরওয়ার্ড হয়ে যায়।"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS পরিষেবাতে অ্যাক্সেস"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"আপনার হস্তক্ষেপ ছাড়াই কল করতে অ্যাপ্লিকেশানটিকে IMS পরিষেবা ব্যবহারের অনুমতি দিন৷"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ফোনের স্থিতি এবং পরিচয় পড়ুন"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"অ্যাপের মাধ্যমে পছন্দসই এনএফসি পেমেন্ট পরিষেবার তথ্য, যেমন রেজিস্ট্রার করার সহায়তা এবং রুট ডেস্টিনেশন সম্পর্কিত তথ্য অ্যাক্সেস করার অনুমতি দেয়।"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"নিয়ার ফিল্ড কমিউনিকেশন নিয়ন্ত্রণ করে"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"অ্যাপ্লিকেশানকে নিয়ার ফিল্ড কমিউনিকেশন (NFC) ট্যাগ, কার্ড এবং রিডারগুলির সাথে যোগাযোগ করতে দেয়৷"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"নিরাপদ এলিমেন্ট ট্রানজ্যাকশন ইভেন্ট"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"নিরাপদ এলিমেন্ট ব্যবহার করা হচ্ছে এমন ট্রানজ্যাকশন সম্পর্কে তথ্য পেতে অ্যাপকে অনুমতি দেয়।"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"আপনার স্ক্রিন লক অক্ষম করুন"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"কী-লক এবং যেকোনো সংশ্লিষ্ট পাসওয়ার্ড সুরক্ষা অক্ষম করতে অ্যাপ্লিকেশানটিকে মঞ্জুর করে৷ উদাহরণস্বরূপ, একটি ইনকামিং ফোন কল গ্রহণ করার সময়ে ফোনটি কী-লক অক্ষম করে, তারপরে কল শেষ হয়ে গেলে কী-লকটিকে আবার সক্ষম করে৷"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"স্ক্রিন লকের জটিলতা জানার অনুরোধ করুন"</string>
@@ -614,30 +618,33 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"বায়োমেট্রিক্স অথবা স্ক্রিন লক ব্যবহার করুন"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"আপনার পরিচয় যাচাই করুন"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"চালিয়ে যেতে আপনার বায়োমেট্রিক্স ব্যবহার করুন"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"চালিয়ে যেতে ফিঙ্গারপ্রিন্ট ব্যবহার করুন"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"চালিয়ে যেতে আপনার ফেস ব্যবহার করুন"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"চালিয়ে যেতে আপনার বায়োমেট্রিক্স বা স্ক্রিন লক ব্যবহার করুন"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"বায়োমেট্রিক হার্ডওয়্যার পাওয়া যাবে না"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"যাচাইকরণ বাতিল হয়েছে"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"স্বীকৃত নয়"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"ফেস চেনা যায়নি"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"যাচাইকরণ বাতিল হয়েছে"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"পিন, প্যাটার্ন অথবা পাসওয়ার্ড সেট করা নেই"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"যাচাইকরণে সমস্যা হয়েছে"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"স্ক্রিন লক ব্যবহার করুন"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"চালিয়ে যেতে আপনার স্ক্রিন লক ব্যবহার করুন"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"সেন্সর জোরে প্রেস করুন"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"সেন্সরে জোরে প্রেস করুন"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"ফিঙ্গারপ্রিন্ট শনাক্ত করা যায়নি। আবার চেষ্টা করুন।"</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"আঙ্গুলের ছাপের সেন্সর পরিষ্কার করে আবার চেষ্টা করুন"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"সেন্সর পরিষ্কার করে আবার চেষ্টা করুন"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"সেন্সর জোরে প্রেস করুন"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"সেন্সরে জোরে প্রেস করুন"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"আঙ্গুল খুব ধীরে সরানো হয়েছে৷ অনুগ্রহ করে আবার চেষ্টা করুন৷"</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"অন্য আঙ্গুলের ছাপ দিয়ে চেষ্টা করুন"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"অত্যন্ত উজ্জ্বল"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"পাওয়ার বোতাম প্রেস করার বিষয়টি শনাক্ত করা হয়েছে"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"অ্যাডজাস্ট করার চেষ্টা করুন"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"প্রতিবার আঙ্গুলের ছাপ সেটআপ করার সময় আপনার আঙ্গুলের অবস্থান সামান্য পরিবর্তন করুন"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"প্রতিবার আপনার আঙুলের অবস্থান সামান্য পরিবর্তন করুন"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
-    <string name="fingerprint_error_not_match" msgid="4599441812893438961">"আঙ্গুলের ছাপ শনাক্ত করা যায়নি"</string>
-    <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"আঙুলের ছাপ শনাক্ত করা যায়নি"</string>
+    <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ফিঙ্গারপ্রিন্ট শনাক্ত করা যায়নি"</string>
+    <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ফিঙ্গারপ্রিন্ট শনাক্ত করা যায়নি"</string>
     <string name="fingerprint_authenticated" msgid="2024862866860283100">"আঙ্গুলের ছাপ যাচাই করা হয়েছে"</string>
     <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ফেস যাচাই করা হয়েছে"</string>
     <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ফেস যাচাই করা হয়েছে, \'কনফার্ম করুন\' বোতাম প্রেস করুন"</string>
@@ -666,7 +673,7 @@
     <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"ফেস আনলক"</string>
     <string name="face_recalibrate_notification_title" msgid="2524791952735579082">"\'ফেস আনলক\' ফিচার ব্যবহার করার ক্ষেত্রে হওয়া সমস্যা"</string>
     <string name="face_recalibrate_notification_content" msgid="3064513770251355594">"আপনার ফেস মডেল মুছে দেওয়ার জন্য ট্যাপ করুন এবং তারপরে আবার ফেস যোগ করুন"</string>
-    <string name="face_setup_notification_title" msgid="8843461561970741790">"\'ফেস আনলক\' সেট আপ করুন"</string>
+    <string name="face_setup_notification_title" msgid="8843461561970741790">"\'ফেস আনলক\' সেট-আপ করুন"</string>
     <string name="face_setup_notification_content" msgid="5463999831057751676">"আপনার ফোনের দিকে তাকিয়ে এটিকে আনলক করুন"</string>
     <string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"\'ফেস আনলক\' ফিচার ব্যবহার করতে \'সেটিংস ও গোপনীয়তা\' বিকল্পে গিয়ে "<b>"ক্যামেরায় অ্যাক্সেস দিন"</b></string>
     <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"আনলক করার জন্য বিভিন্ন উপায়ে সেট আপ করুন"</string>
@@ -689,9 +696,9 @@
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"আপনার মুখের ছবি আবার নথিভুক্ত করুন।"</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"মুখ শনাক্ত করা যাচ্ছে না। আবার চেষ্টা করুন।"</string>
     <string name="face_acquired_too_similar" msgid="8882920552674125694">"আপনার মাথার পজিশন সামান্য পরিবর্তন করুন"</string>
-    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"আপনার ফোনের দিকে আরও সরাসরি তাকান"</string>
-    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"আপনার ফোনের দিকে আরও সরাসরি তাকান"</string>
-    <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"আপনার ফোনের দিকে আরও সরাসরি তাকান"</string>
+    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"আপনার ফোনের দিকে একদম সোজাসুজি তাকান"</string>
+    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"আপনার ফোনের দিকে একদম সোজাসুজি তাকান"</string>
+    <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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"আপনার মুখ ঢাকা আছে। পুরো মুখটাই দেখাতে হবে।"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"ফেস যাচাই করা যায়নি। হার্ডওয়্যার উপলভ্য নেই।"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"ফেস অপারেশন বাতিল করা হয়েছে৷"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"ব্যবহারকারী \'ফেস আনলক\' বাতিল করে দিয়েছেন"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"অনেকবার চেষ্টা করা হয়েছে। পরে আবার চেষ্টা করুন।"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"অনেকবার চেষ্টা করেছেন। \'ফেস আনলক\' উপলভ্য নেই।"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"অনেকবার চেষ্টা করেছেন। এর পরিবর্তে স্ক্রিন লক ব্যবহার করুন।"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"আপনার মুখ যাচাই করা যাচ্ছে না। আবার চেষ্টা করুন।"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"এখনও \'ফেস আনলক\' সেট আপ করেননি"</string>
@@ -1364,12 +1370,12 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"USB এর মাধ্যমে MIDI চালু করা হয়েছে"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"ওয়েবক্যাম হিসেবে কানেক্ট করা আছে"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"ইউএসবি অ্যাক্সেসরি কানেক্ট করা হয়েছে"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"আরও বিকল্পের জন্য আলতো চাপুন৷"</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"আরও বিকল্পের জন্য ট্যাপ করুন।"</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"সংযুক্ত ডিভাইস চার্জ করা হচ্ছে। আরও বিকল্প দেখতে ট্যাপ করুন।"</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"অ্যানালগ অডিও অ্যাক্সেসরি শনাক্ত করা হয়েছে"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"সংযুক্ত ডিভাইসটি এই ফোনের সাথে ব্যবহার করা যাবে না। আরও জানতে ট্যাপ করুন।"</string>
     <string name="adb_active_notification_title" msgid="408390247354560331">"USB ডিবাগিং কানেক্ট হয়েছে"</string>
-    <string name="adb_active_notification_message" msgid="5617264033476778211">"ইউএসবি ডিবাগিং বন্ধ করতে ট্যাপ করুন"</string>
+    <string name="adb_active_notification_message" msgid="5617264033476778211">"USB ডিবাগিং বন্ধ করতে ট্যাপ করুন"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"USB ডিবাগিং অক্ষম করতে বেছে নিন।"</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"ওয়্যারলেস ডিবাগিং কানেক্ট করা হয়েছে"</string>
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"ওয়্যারলেস ডিবাগিং বন্ধ করতে ট্যাপ করুন"</string>
@@ -1392,10 +1398,10 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"অস্বীকার করুন"</string>
     <string name="select_input_method" msgid="3971267998568587025">"ইনপুট পদ্ধতি বেছে নিন"</string>
     <string name="show_ime" msgid="6406112007347443383">"ফিজিক্যাল কীবোর্ড সক্রিয় থাকার সময় এটিকে স্ক্রীনে রাখুন"</string>
-    <string name="hardware" msgid="1800597768237606953">"ভার্চুয়াল কীবোর্ড দেখুন"</string>
+    <string name="hardware" msgid="3611039921284836033">"স্ক্রিনের কীবোর্ড ব্যবহার করুন"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> কনফিগার করুন"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"ফিজিক্যাল কীবোর্ড কনফিগার করুন"</string>
-    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"ভাষা এবং লেআউট বেছে নিন আলতো চাপ দিন"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"ভাষা ও লেআউট বেছে নিতে ট্যাপ করুন"</string>
     <string name="fast_scroll_alphabet" msgid="8854435958703888376">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="fast_scroll_numeric_alphabet" msgid="2529539945421557329">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"অন্যান্য অ্যাপের উপরে দেখুন"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"সরান"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"প্রস্তাবিত স্তরের চেয়ে বেশি উঁচুতে ভলিউম বাড়াবেন?\n\nউঁচু ভলিউমে বেশি সময় ধরে কিছু শুনলে আপনার শ্রবনশক্তির ক্ষতি হতে পারে।"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"সতর্কতা,\nহেডফোনের মাধ্যমে এক সপ্তাহে কেউ যতটা জোর আওয়াজের সিগন্যাল শুনতে পারেন আপনি তার সীমা পেরিয়ে গেছেন।\n\nএই সীমা পেরিয়ে গেলে আপনার শ্রবণশক্তি স্থায়ীভাবে ক্ষতিগ্রস্ত হবে।"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"সতর্কতা,\nহেডফোনের মাধ্যমে এক সপ্তাহে কেউ যতটা জোর আওয়াজের সিগন্যাল শুনতে পারেন আপনি তার সীমা ৫ গুণ পেরিয়ে গেছেন।\n\nআপনার শ্রবণশক্তি সুরক্ষিত রাখতে ভলিউম কমানো হয়েছে।"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"যে লেভেলে আপনি মিডিয়া শুনছেন তা দীর্ঘ সময় ধরে চলতে থাকলে আপনার শ্রবণশক্তি ক্ষতিগ্রস্ত হতে পারে।\n\nদীর্ঘ সময় ধরে এই লেভেলে প্লে করলে তা আপনার শ্রবণশক্তির ক্ষতি করতে পারে।"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"সতর্কতা,\nআপনি বর্তমানে অসুরক্ষিত জোর লেভেলে প্লে করা হচ্ছে এমন কন্টেন্ট শুনছেন।\n\nএইভাবে জোরে শোনা চালিয়ে গেলে আপনার শ্রবণশক্তি স্থায়ীভাবে ক্ষতিগ্রস্ত হবে।"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"বেশি ভলিউমে শুনতে থাকবেন?\n\nসাজেস্ট করা সময়ের চেয়ে অতিরিক্ত সময় ধরে হেডফোনের ভলিউম বেশি করা আছে, এর ফলে আপনার কানের ক্ষতি হতে পারে"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"তীব্র শব্দ শনাক্ত করা হয়েছে\n\nসাজেস্ট করা মাত্রার চেয়ে হেডফোনের ভলিউম বেশি করা আছে, এর ফলে আপনার কানের ক্ষতি হতে পারে"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"অ্যাক্সেসযোগ্যতা শর্টকাট ব্যবহার করবেন?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"শর্টকাট চালু করা থাকাকালীন দুটি ভলিউম বোতাম একসাথে ৩ সেকেন্ড টিপে ধরে রাখলে একটি অ্যাকসেসিবিলিটি ফিচার চালু হবে।"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"অ্যাক্সেসিবিলিটি ফিচারের শর্টকাট বন্ধ করতে চান?"</string>
@@ -1728,7 +1732,7 @@
     <string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"একটি ফিচার থেকে অন্যটিতে যেতে, তিনটি আঙ্গুল দিয়ে উপরের দিকে সোয়াইপ করে ধরে থাকুন।"</string>
     <string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"বড় করে দেখা"</string>
     <string name="user_switched" msgid="7249833311585228097">"বর্তমান ব্যবহারকারী <xliff:g id="NAME">%1$s</xliff:g>৷"</string>
-    <string name="user_switching_message" msgid="1912993630661332336">"ব্যবহারকারী পরিবর্তন করে <xliff:g id="NAME">%1$s</xliff:g> করা হচ্ছে…"</string>
+    <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g> প্রোফাইলে পাল্টানো হচ্ছে…"</string>
     <string name="user_logging_out_message" msgid="7216437629179710359">"<xliff:g id="NAME">%1$s</xliff:g>কে লগ-আউট করা হচ্ছে..."</string>
     <string name="owner_name" msgid="8713560351570795743">"মালিক"</string>
     <string name="guest_name" msgid="8502103277839834324">"অতিথি"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"প্রস্থান করতে উপর থেকে নিচের দিকে সোয়াইপ করুন"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"বুঝেছি"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"আরও ভাল ক্যামেরা ভিউ পাওয়ার জন্য ঘোরান"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"আরও ভাল ক্যামেরা ভিউ পাওয়ার জন্য স্প্লিট স্ক্রিন থেকে বেরিয়ে আসুন"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"আরও ভাল ভিউয়ের জন্য ফুল স্ক্রিনে <xliff:g id="NAME">%s</xliff:g> খুলুন"</string>
     <string name="done_label" msgid="7283767013231718521">"সম্পন্ন হয়েছে"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"বৃত্তাকার ঘণ্টা নির্বাচকের স্লাইডার"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"বৃত্তাকার মিনিট নির্বাচকের স্লাইডার"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"অ্যাপ পাওয়া যাচ্ছে না"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"এই মুহূর্তে <xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপ পাওয়া যাচ্ছে না।"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> উপলভ্য নেই"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"অনুমতি প্রয়োজন"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"অনুমতির অনুরোধ ব্লক করা হয়েছে"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"এই অ্যাপ অতিরিক্ত অনুমতির জন্য অনুরোধ করছে, কিন্তু স্ট্রিমিং সেশন চলাকালীন অনুমতি দেওয়া যাবে না। প্রথমে আপনার Android TV ডিভাইসে অনুমতি দিন।"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"এই অ্যাপ অতিরিক্ত অনুমতির জন্য অনুরোধ করছে, কিন্তু স্ট্রিমিং সেশন চলাকালীন অনুমতি দেওয়া যাবে না। প্রথমে আপনার ট্যাবলেটে অনুমতি দিন।"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"এই অ্যাপ অতিরিক্ত অনুমতির জন্য অনুরোধ করছে, কিন্তু স্ট্রিমিং সেশন চলাকালীন অনুমতি দেওয়া যাবে না। প্রথমে আপনার ফোনে অনুমতি দিন।"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"Android-এর আরও পুরনো ভার্সনের জন্য এই অ্যাপ তৈরি করা হয়েছিল। এটি সঠিকভাবে কাজ নাও করতে পারে এবং এর মধ্যে লেটেস্ট সুরক্ষা ও গোপনীয়তার নিরাপত্তা ব্যবস্থা অন্তর্ভুক্ত করা নেই। আপডেটের জন্য চেক করুন বা অ্যাপের ডেভেলপারের সাথে যোগাযোগ করুন।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"আপডেট পাওয়া যাচ্ছে কিনা দেখুন"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Android-এর লেটেস্ট ভার্সনের সাথে এই অ্যাপটি মানানসই নয়। আপডেটের জন্য চেক করুন বা অ্যাপ ডেভেলপারের সাথে যোগাযোগ করুন।"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"আপনার নতুন মেসেজ আছে"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"দেখার জন্য SMS অ্যাপ্লিকেশান খুলুন"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"কিছু ফাংশন হয়ত কাজ করবে না"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"অফিসের অ্যাপে এই খোলা যাবে না"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ব্যক্তিগত অ্যাপে এই কন্টেন্ট শেয়ার করা যাবে না"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ব্যক্তিগত অ্যাপে এই কন্টেন্ট খোলা যাবে না"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"অফিস প্রোফাইল বন্ধ করা আছে"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"চালু করতে ট্যাপ করুন"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"অফিসের অ্যাপ পজ করা আছে"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"আনপজ করুন"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"এর জন্য কোনও অফিস অ্যাপ নেই"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ব্যক্তিগত অ্যাপে দেখা যাবে না"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"অফিসের <xliff:g id="APP">%s</xliff:g> খুলবেন?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"ব্যক্তিগত <xliff:g id="APP">%s</xliff:g>-এ খুলবেন?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"অফিসের <xliff:g id="APP">%s</xliff:g>-এ খুলবেন?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"অফিসের অ্যাপ থেকে কল করবেন?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"অফিসের অ্যাপে পরিবর্তন করবেন?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"আপনার সংস্থা শুধু অফিসের অ্যাপ থেকেই আপনাকে কল করার অনুমতি দেয়"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"আপনার সংস্থা শুধু অফিসের অ্যাপ থেকেই আপনাকে মেসেজ পাঠানোর অনুমতি দেয়"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ব্যক্তিগত ব্রাউজার ব্যবহার করুন"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"অফিস ব্রাউজার ব্যবহার করুন"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"কল করুন"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"পরিবর্তন করুন"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"সিম নেটওয়ার্ক আনলক পিন"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"সিম নেটওয়ার্ক সাবসেট আনলক পিন"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"কর্পোরেট সিম আনলক পিন"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"আপনার <xliff:g id="DEVICE">%1$s</xliff:g> থেকে ফোনের ক্যামেরা অ্যাক্সেস করা যাচ্ছে না"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"আপনার <xliff:g id="DEVICE">%1$s</xliff:g> থেকে ট্যাবলেটের ক্যামেরা অ্যাক্সেস করা যাচ্ছে না"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"স্ট্রিমিংয়ের সময় এটি অ্যাক্সেস করা যাবে না। পরিবর্তে আপনার ফোনে ব্যবহার করে দেখুন।"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"স্ট্রিম করার সময় \'ছবির-মধ্যে-ছবি\' দেখা যাবে না"</string>
     <string name="system_locale_title" msgid="711882686834677268">"সিস্টেম ডিফল্ট"</string>
     <string name="default_card_name" msgid="9198284935962911468">"কার্ড <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"ওয়াচ ম্যানেজ করতে, কম্প্যানিয়ন ওয়াচ প্রোফাইল সংক্রান্ত অনুমতি"</string>
@@ -2317,11 +2331,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"কম্প্যানিয়ন অ্যাপকে, ব্যাকগ্রাউন্ড থেকে ফোরগ্রাউন্ড পরিষেবা চালু করার অনুমতি দেয়।"</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"মাইক্রোফোন উপলভ্য আছে"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"মাইক্রোফোন ব্লক করা হয়েছে"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"ডুয়াল স্ক্রিন"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"\'ডুয়াল স্ক্রিন\' চালু করা আছে"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen চালু করা আছে"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"কন্টেন্ট দেখানোর জন্য <xliff:g id="APP_NAME">%1$s</xliff:g> দুটি ডিসপ্লে ব্যবহার করছে"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"ডিভাইস খুব গরম হয়ে গেছে"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"আপনার ফোন খুব বেশি গরম হয়ে যাচ্ছে বলে \'ডুয়াল স্ক্রিন\' উপলভ্য নেই"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"আপনার ফোন খুব বেশি গরম হয়ে যাচ্ছে বলে Dual screen উপলভ্য নেই"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen উপলভ্য নেই"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"\'ব্যাটারি সেভার\' চালু করা আছে বলে Dual Screen ফিচারের সুবিধা উপলভ্য হবে না। আপনি সেটিংস থেকে এটি বন্ধ করতে পারবেন।"</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"সেটিংসে যান"</string>
@@ -2330,7 +2344,7 @@
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"কীবোর্ড লেআউট <xliff:g id="LAYOUT_1">%s</xliff:g>-এ সেট করা আছে। পরিবর্তন করতে ট্যাপ করুন।"</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"কীবোর্ড লেআউট <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>-এ সেট করা আছে। পরিবর্তন করতে ট্যাপ করুন।"</string>
     <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"কীবোর্ড লেআউট <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>-এ সেট করা আছে। পরিবর্তন করতে ট্যাপ করুন।"</string>
-    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"কীবোর্ড লেআউট <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>-এ সেট করা আছে… পরিবর্তন করতে ট্যাপ করুন।"</string>
+    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"কীবোর্ড লেআউট <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>-এ সেট করা আছে… পালটাতে ট্যাপ করুন।"</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"ফিজিক্যাল কীবোর্ড কনফিগার করা হয়েছে"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"কীবোর্ড দেখতে ট্যাপ করুন"</string>
 </resources>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index a0bcf91..33ac0c3 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -247,7 +247,7 @@
     <string name="global_action_power_off" msgid="4404936470711393203">"Isključi"</string>
     <string name="global_action_power_options" msgid="1185286119330160073">"Napajanje"</string>
     <string name="global_action_restart" msgid="4678451019561687074">"Ponovo pokreni"</string>
-    <string name="global_action_emergency" msgid="1387617624177105088">"Hitno"</string>
+    <string name="global_action_emergency" msgid="1387617624177105088">"Hitni poziv"</string>
     <string name="global_action_bug_report" msgid="5127867163044170003">"Izvještaj o greškama"</string>
     <string name="global_action_logout" msgid="6093581310002476511">"Završi sesiju"</string>
     <string name="global_action_screenshot" msgid="2610053466156478564">"Snimak ekrana"</string>
@@ -269,7 +269,7 @@
     <string name="global_action_settings" msgid="4671878836947494217">"Postavke"</string>
     <string name="global_action_assist" msgid="2517047220311505805">"Pomoć"</string>
     <string name="global_action_voice_assist" msgid="6655788068555086695">"Glasovna pomoć"</string>
-    <string name="global_action_lockdown" msgid="2475471405907902963">"Zaključavanje"</string>
+    <string name="global_action_lockdown" msgid="2475471405907902963">"Zaključaj"</string>
     <string name="status_bar_notification_info_overflow" msgid="3330152558746563475">"999+"</string>
     <string name="notification_hidden_text" msgid="2835519769868187223">"Novo obavještenje"</string>
     <string name="notification_channel_physical_keyboard" msgid="5417306456125988096">"Fizička tastatura"</string>
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sistem Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Pređite na lični profil"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Pređite na radni profil"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Prebaci u ličnu aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Prebaci u poslovnu aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakti"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"pristupa vašim kontaktima"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Lokacija"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Dozvoljava aplikaciji upravljanje vibracijom."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Dozvoljava aplikaciji pristup stanju vibracije."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"izravno zvanje telefonskih brojeva"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Omogućava aplikaciji pozivanje telefonskih brojeva bez vašeg angažiranja. Ovo može uzrokovati neočekivane troškove ili pozive. Imajte na umu da ovo ne daje aplikaciji mogućnost pozivanja brojeva za hitne slučajeve. Zlonamjerne aplikacije vam mogu napraviti neočekivane troškove kroz vršenje poziva bez vašeg znanja."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Dozvoljava aplikaciji da pozove brojeve telefona bez vaše intervencije. Ovo može dovesti do neočekivanih troškova ili poziva. Napominjemo da ovo ne dozvoljava aplikaciji da pozove brojeve za hitne slučajeve. Zlonamjerne aplikacije vam mogu uzrokovati troškove upućivanjem poziva bez vaše potvrde ili pozvati kodove operatera što uzrokuje automatsko prosljeđivanje dolaznih poziva na drugi broj."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"pristup usluzi IMS pozivanja"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Omogućava aplikaciji da koristi IMS uslugu za pozivanje bez vaše intervencije."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"čitanje statusa i identiteta telefona"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Dozvoljava aplikaciji da dobije informacije o preferiranoj usluzi plaćanja putem NFC-a kao što su registrirana pomagala i odredište rute."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"upravljanje NFC-om"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Dozvoljava aplikaciji komuniciranje sa NFC (komunikacija bliskog polja) oznakama, karticama i čitačima."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Događaj transakcije na sigurnom elementu"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Dozvoljava aplikaciji da prima informacije o transakcijama koje se događaju na sigurnom elementu"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"deaktivacija zaključavanja ekrana"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Omogućava aplikaciji deaktivaciju zaključane tastature i svih povezanih zaštita. Naprimjer, telefon deaktivira zaključavanje tastature kod dolaznog telefonskog poziva, a zatim ponovo aktivira zaključavanje tastature kada je poziv završen."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"zahtjev za kompleksnost zaključavanja ekrana"</string>
@@ -615,17 +619,20 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Koristi biometriju ili zaključavanje ekrana"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Potvrdite identitet"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Koristite biometriju da nastavite"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Potvrdite identitet otiskom prsta da nastavite"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Potvrdite identitet licem da nastavite"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Koristite biometriju ili zaključavanje ekrana da nastavite"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrijski hardver nije dostupan"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autentifikacija je otkazana"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Nije prepoznato"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Lice nije prepoznato"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autentifikacija je otkazana"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nije postavljen PIN, uzorak niti lozinka"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Greška pri autentifikaciji"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Koristi zaključavanje ekrana"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Unesite zaključavanje ekrana da nastavite"</string>
     <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Čvrsto pritisnite senzor"</string>
-    <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Nije moguće prepoznati otisak prsta. Pokušajte ponovo."</string>
+    <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Otisak prsta nije prepoznat. Pokušajte ponovo."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Očistite senzor za otisak prsta i pokušajte ponovo"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Očistite senzor i pokušajte ponovo"</string>
     <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Čvrsto pritisnite senzor"</string>
@@ -644,7 +651,7 @@
     <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Lice je provjereno, pritisnite dugme za potvrdu"</string>
     <string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardver za otisak prsta nije dostupan."</string>
     <string name="fingerprint_error_no_space" msgid="7285481581905967580">"Nije moguće postaviti otisak prsta"</string>
-    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Vrijeme za postavljanje otiska prsta je isteklo. Pokušajte ponovo."</string>
+    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Postavljanje otiska prsta je isteklo. Pokušajte ponovo."</string>
     <string name="fingerprint_error_canceled" msgid="540026881380070750">"Radnja s otiskom prsta je otkazana."</string>
     <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Korisnik je otkazao radnju s otiskom prsta."</string>
     <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Previše pokušaja. Umjesto toga koristite zaključavanje ekrana."</string>
@@ -680,12 +687,12 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nema dovoljno svjetlosti"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Odmaknite telefon"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Primaknite telefon"</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"Pomjerite telefon naviše"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"Pomjerite telefon naniže"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"Pomjerite telefon nagore"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"Pomjerite telefon nadolje"</string>
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Pomjerite telefon ulijevo"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Pomjerite telefon udesno"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Gledajte direktno u uređaj."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Ne vidi se lice. Držite telefon u visini očiju."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Lice se ne vidi. Držite telefon u visini očiju."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Previše pokreta. Držite telefon mirno."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Ponovo registrirajte lice."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Nije moguće prepoznati lice. Pokušajte ponovo."</string>
@@ -701,7 +708,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Lice je pokriveno. Lice se mora potpuno vidjeti."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Nije moguće potvrditi lice. Hardver nije dostupan."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Prepoznavanje lica je otkazano."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Korisnik je otkazao otključavanje licem"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Previše pokušaja. Pokušajte ponovo kasnije."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Previše pokušaja. Otključavanje licem nije dostupno."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Previše pokušaja. Umjesto toga unesite zaključavanje ekrana."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Nije moguće potvrditi lice. Pokušajte ponovo."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Niste postavili otključavanje licem"</string>
@@ -965,7 +971,7 @@
     <string name="lockscreen_instructions_when_pattern_enabled" msgid="7982445492532123308">"Pritisnite dugme Meni kako biste otključali uređaj ili obavili hitni poziv."</string>
     <string name="lockscreen_instructions_when_pattern_disabled" msgid="7434061749374801753">"Pritisnite dugme Meni za otključavanje uređaja."</string>
     <string name="lockscreen_pattern_instructions" msgid="3169991838169244941">"Nacrtajte uzorak za otključavanje"</string>
-    <string name="lockscreen_emergency_call" msgid="7500692654885445299">"Hitno"</string>
+    <string name="lockscreen_emergency_call" msgid="7500692654885445299">"Hitni poziv"</string>
     <string name="lockscreen_return_to_call" msgid="3156883574692006382">"Povratak na poziv"</string>
     <string name="lockscreen_pattern_correct" msgid="8050630103651508582">"Ispravno!"</string>
     <string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"Pokušajte ponovo"</string>
@@ -994,8 +1000,8 @@
     <string name="lockscreen_sim_locked_message" msgid="5911944931911850164">"SIM je zaključan."</string>
     <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="8381565919325410939">"Otključavanje SIM-a…"</string>
     <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6458790975898594240">"Pogrešno ste nacrtali svoj uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nBroj sekundi do sljedećeg pokušaja: <xliff:g id="NUMBER_1">%2$d</xliff:g>"</string>
-    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"Pogrešno ste unijeli svoju lozinku <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nBroj sekundi do sljedećeg pokušaja: <xliff:g id="NUMBER_1">%2$d</xliff:g>"</string>
-    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"Pogrešno ste unijeli svoj PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nBroj sekundi do sljedećeg pokušaja: <xliff:g id="NUMBER_1">%2$d</xliff:g>"</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"Pogrešno ste napisali svoju lozinku <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nBroj sekundi do sljedećeg pokušaja: <xliff:g id="NUMBER_1">%2$d</xliff:g>"</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"Pogrešno ste napisali svoj PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nBroj sekundi do sljedećeg pokušaja: <xliff:g id="NUMBER_1">%2$d</xliff:g>"</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="3069635524964070596">"Pogrešno ste unijeli uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. Možete pokušati još <xliff:g id="NUMBER_1">%2$d</xliff:g> puta. Nakon toga ćete morati otključati tablet prijavom na svoj Google račun.\n\n Broj sekundi do sljedećeg pokušaja: <xliff:g id="NUMBER_2">%3$d</xliff:g>"</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"Pogrešno ste unijeli uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> put(a). U slučaju još <xliff:g id="NUMBER_1">%2$d</xliff:g> pokušaja bez uspjeha, morat ćete otključati Android TV uređaj prijavom na svoj Google račun.\n\n Pokušajte ponovo za <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="5691623136957148335">"Pogrešno ste unijeli uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. Možete pokušati još <xliff:g id="NUMBER_1">%2$d</xliff:g> puta. Nakon toga ćete morati otključati telefon prijavom na svoj Google račun.\n\n Broj sekundi do sljedećeg pokušaja: <xliff:g id="NUMBER_2">%3$d</xliff:g>"</string>
@@ -1369,7 +1375,7 @@
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Punjenje povezanog uređaja. Dodirnite za više opcija."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Otkriven je analogni periferni uređaj"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Priključeni uređaj nije kompatibilan s ovim telefonom. Dodirnite da saznate više."</string>
-    <string name="adb_active_notification_title" msgid="408390247354560331">"Otklanjanje grešaka putem USB-a je uspostavljeno"</string>
+    <string name="adb_active_notification_title" msgid="408390247354560331">"Otklanjanje grešaka putem USB-a je povezano"</string>
     <string name="adb_active_notification_message" msgid="5617264033476778211">"Dodirnite da isključite otklanjanje grešaka putem USB-a"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Odaberite da onemogućite otklanjanje grešaka putem USB-a"</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Bežično otklanjanje grešaka je povezano"</string>
@@ -1393,10 +1399,10 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ODBACI"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Odaberite način unosa"</string>
     <string name="show_ime" msgid="6406112007347443383">"Prikaži na ekranu dok je fizička tastatura aktivna"</string>
-    <string name="hardware" msgid="1800597768237606953">"Prikaz virtuelne tastature"</string>
+    <string name="hardware" msgid="3611039921284836033">"Koristi tastaturu na ekranu"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Konfigurirajte uređaj <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Konfigurirajte fizičke tastature"</string>
-    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Dodirnite za odabir jezika i rasporeda"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Dodirnite da odaberete jezik i raspored"</string>
     <string name="fast_scroll_alphabet" msgid="8854435958703888376">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="fast_scroll_numeric_alphabet" msgid="2529539945421557329">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"Prikazivanje preko drugih aplikacija"</string>
@@ -1667,8 +1673,8 @@
     <string name="kg_login_invalid_input" msgid="8292367491901220210">"Pogrešno korisničko ime ili lozinka."</string>
     <string name="kg_login_account_recovery_hint" msgid="4892466171043541248">"Zaboravili ste korisničko ime ili lozinku?\nPosjetite "<b>"google.com/accounts/recovery"</b>"."</string>
     <string name="kg_login_checking_password" msgid="4676010303243317253">"Provjeravanje računa…"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="23741434207544038">"Pogrešno ste unijeli PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nBroj sekundi do sljedećeg pokušaja: <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
-    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="3328686432962224215">"Pogrešno ste unijeli lozinku <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nBroj sekundi do sljedećeg pokušaja: <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="23741434207544038">"Pogrešno ste napisali PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nBroj sekundi do sljedećeg pokušaja: <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="3328686432962224215">"Pogrešno ste napisali lozinku <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nBroj sekundi do sljedećeg pokušaja: <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="7357404233979139075">"Pogrešno ste nacrtali uzorak <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nBroj sekundi do sljedećeg pokušaja: <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="3479940221343361587">"Pokušali ste otključati tablet na pogrešan način <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. Ako napravite još <xliff:g id="NUMBER_1">%2$d</xliff:g> pokušaja bez uspjeha, tablet će biti vraćen na fabričke postavke i svi korisnički podaci će biti izgubljeni."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="9064457748587850217">"Pokušali ste neispravno otključati Android TV uređaj <xliff:g id="NUMBER_0">%1$d</xliff:g> put(a). U slučaju još <xliff:g id="NUMBER_1">%2$d</xliff:g> pokušaja bez uspjeha, vaš Android TV će se vratiti na fabričke postavke i svi korisnički podaci će biti izgubljeni."</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Ukloni"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Želite li pojačati zvuk iznad preporučenog nivoa?\n\nDužim slušanjem glasnog zvuka možete oštetiti sluh."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Upozorenje,\nprekoračili ste količinu glasnih zvučnih signala koje je moguće sigurno slušati putem slušalica tokom jedne sedmice.\n\nPrekoračenjem tog ograničenja će vam se trajno oštetiti sluh."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Upozorenje,\nprekoračili ste 5 puta veću količinu glasnih zvučnih signala koje je moguće sigurno slušati putem slušalica tokom jedne sedmice.\n\nJačina zvuka je smanjena radi zaštite vašeg sluha."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Nivo jačine na kojem slušate medijski sadržaj može uzrokovati oštećenje sluha ako se održava duži period.\n\nAko nastavite reproducirati na ovom nivou jačine duži period može doći do oštećenja sluha."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Upozorenje,\nTrenutno slušate glasan sadržaj na nivou jačine koji nije siguran.\n\nAko nastavite slušati ovako glasno, trajno će vam se oštetiti sluh."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Nastaviti slušati pri visokoj jačini zvuka?\n\nJačina zvuka slušalica je bila visoka duže od preporučenog, što može oštetiti sluh"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Otkriven je glasan zvuk\n\nJačina zvuka slušalica je bila viša od preporučenog, što može oštetiti sluh"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Želite li koristiti Prečicu za pristupačnost?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Kada je prečica uključena, pritiskom i držanjem oba dugmeta za jačinu zvuka u trajanju od 3 sekunde pokrenut će se funkcija pristupačnosti."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Uključiti prečicu za funkcije pristupačnosti?"</string>
@@ -1852,7 +1856,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Da izađete, prevucite odozgo nadolje."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Razumijem"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Rotirajte za bolji prikaz"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Izađite iz podijeljenog ekrana za bolji prikaz"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Otvorite aplikaciju <xliff:g id="NAME">%s</xliff:g> preko cijelog ekrana radi boljeg pregleda"</string>
     <string name="done_label" msgid="7283767013231718521">"Gotovo"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Kružni klizač za odabir sata"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Kružni klizač za minute"</string>
@@ -1953,12 +1957,12 @@
     <string name="app_suspended_more_details" msgid="211260942831587014">"Saznajte više"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Ponovo aktiviraj aplikaciju"</string>
     <string name="work_mode_off_title" msgid="6367463960165135829">"Pokrenuti poslovne aplikacije?"</string>
-    <string name="work_mode_turn_on" msgid="5316648862401307800">"Prekini pauzu"</string>
+    <string name="work_mode_turn_on" msgid="5316648862401307800">"Ponovo pokreni"</string>
     <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Hitan slučaj"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"Aplikacija nije dostupna"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> trenutno nije dostupna."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"Nedostupno: <xliff:g id="ACTIVITY">%1$s</xliff:g>"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Potrebno je odobrenje"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Zahtjev za odobrenje je potisnut"</string>
     <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>
@@ -1969,6 +1973,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Aplikacija traži dodatna odobrenja, ali se ona ne mogu dati u sesiji prijenosa. Prvo dajte odobrenje na Android TV uređaju."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Aplikacija traži dodatna odobrenja, ali se ona ne mogu dati u sesiji prijenosa. Prvo dajte odobrenje na tabletu."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Aplikacija traži dodatna odobrenja, ali se ona ne mogu dati u sesiji prijenosa. Prvo dodajte odobrenje 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>
@@ -1977,6 +1984,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"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="deprecated_target_sdk_message" msgid="5246906284426844596">"Ova aplikacija je izrađena za stariju verziju Androida. Možda neće pravilno funkcionirati i ne sadržava najnovije sigurnosne zaštite i zaštite privatnosti. Provjerite ima li ažuriranja ili se obratite programeru aplikacije."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Provjeri je li dostupno ažuriranje"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Aplikacija nije kompatibilna s najnovijom verzijom Androida. Provjerite ima li ažuriranja ili se obratite programeru aplikacije."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Imate nove poruke"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Otvorite SMS aplikaciju da biste pregledali poruke"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Neke funkcije mogu biti ograničene"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Ovaj sadržaj nije moguće otvoriti pomoću poslovnih aplikacija"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Ovaj sadržaj nije moguće dijeliti pomoću ličnih aplikacija"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Ovaj sadržaj nije moguće otvoriti pomoću ličnih aplikacija"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Radni profil je pauziran"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Dodirnite da uključite"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Poslovne aplikacije su pauzirane"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Ponovo pokreni"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nema poslovnih aplikacija"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nema ličnih aplikacija"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Otvoriti aplikaciju <xliff:g id="APP">%s</xliff:g> za posao?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Otvoriti u ličnoj aplikaciji <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Otvoriti u poslovnoj aplikaciji <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Pozvati iz poslovne aplikacije?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Prebaciti na poslovnu aplikaciju?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Vaša organizacija vam dozvoljava da upućujete pozive samo iz poslovnih aplikacija"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Vaša organizacija vam dozvoljava da šaljete poruke samo iz poslovnih aplikacija"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Koristi lični preglednik"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Koristi poslovni preglednik"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Pozovi"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Prebaci"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN za otključavanje mreže na SIM-u"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN za otključavanje mrežne podgrupe na SIM-u"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN za otključavanje korporativnog SIM-a"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Nije moguće pristupiti kameri telefona s uređaja <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Nije moguće pristupiti kameri tableta s uređaja <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Ovom ne možete pristupiti tokom prijenosa. Umjesto toga pokušajte na telefonu."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Tokom prijenosa nije moguće gledati sliku u slici"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Sistemski zadano"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KARTICA <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Odobrenje za profil pratećeg sata da upravlja satovima"</string>
@@ -2318,11 +2332,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Dozvoljava pratećoj aplikaciji da iz pozadine pokrene usluge u prvom planu."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofon je dostupan"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofon je blokiran"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dupli ekran"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dupli ekran je uključen"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen je uključen"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> koristi oba ekrana za prikazivanje sadržaja"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Uređaj je previše zagrijan"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dupli ekran nije dostupan je se telefon previše zagrijava"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dual Screen nije dostupan je se telefon previše zagrijava"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen nije dostupan"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screen nije dostupan jer je Ušteda baterije uključena. To možete isključiti u Postavkama."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Idi u Postavke"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 59255a8..356576d 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Canvia al perfil personal"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Canvia al perfil de treball"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Canvia al perfil personal a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Canvia al perfil de treball a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contactes"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"accedir als contactes"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Ubicació"</string>
@@ -474,8 +476,8 @@
     <string name="permdesc_writeCalendar" product="default" msgid="5416380074475634233">"Aquesta aplicació pot afegir, suprimir i canviar esdeveniments del calendari al telèfon. També pot enviar missatges que sembli que provenen dels propietaris del calendari o canviar esdeveniments sense notificar-los-ho."</string>
     <string name="permlab_accessLocationExtraCommands" msgid="5162339812057983988">"accedir a ordres del proveïdor d\'ubicació addicionals"</string>
     <string name="permdesc_accessLocationExtraCommands" msgid="355369611979907967">"Permet que l\'aplicació accedeixi a ordres addicionals del proveïdor d\'ubicacions; per tant, és possible que l\'aplicació pugui interferir en el funcionament del GPS o d\'altres fonts d\'ubicacions."</string>
-    <string name="permlab_accessFineLocation" msgid="6426318438195622966">"accedeix a la ubicació exacta només en primer pla"</string>
-    <string name="permdesc_accessFineLocation" msgid="6732174080240016335">"Aquesta aplicació pot obtenir la teva ubicació exacta a través dels serveis d\'ubicació mentre s\'està utilitzant. Els serveis d\'ubicació del dispositiu han d\'estar activats perquè l\'aplicació pugui obtenir la ubicació, i això pot fer que l\'ús de la bateria augmenti."</string>
+    <string name="permlab_accessFineLocation" msgid="6426318438195622966">"accedeix a la ubicació precisa només en primer pla"</string>
+    <string name="permdesc_accessFineLocation" msgid="6732174080240016335">"Aquesta aplicació pot obtenir la teva ubicació precisa a través dels serveis d\'ubicació mentre s\'està utilitzant. Els serveis d\'ubicació del dispositiu han d\'estar activats perquè l\'aplicació pugui obtenir la ubicació, i això pot fer que l\'ús de la bateria augmenti."</string>
     <string name="permlab_accessCoarseLocation" msgid="1561042925407799741">"accedeix a la ubicació aproximada només en primer pla"</string>
     <string name="permdesc_accessCoarseLocation" msgid="778521847873199160">"Aquesta aplicació pot obtenir la teva ubicació aproximada a través dels serveis d\'ubicació mentre s\'està utilitzant. Els serveis d\'ubicació del dispositiu han d\'estar activats perquè l\'aplicació pugui obtenir la ubicació."</string>
     <string name="permlab_accessBackgroundLocation" msgid="1721164702777366138">"accedir a la ubicació en segon pla"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Permet que l\'aplicació controli el vibrador."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permet que l\'aplicació accedeixi a l\'estat de vibració."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"trucar directament a números de telèfon"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Permet que l\'aplicació truqui a números de telèfon sense la teva intervenció. Aquesta acció pot produir càrrecs o trucades inesperades. Tingues en compte que això no permet que l\'aplicació truqui a números d\'emergència. Les aplicacions malicioses poden fer trucades sense la teva confirmació, cosa que et pot fer gastar diners."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Permet que l\'aplicació truqui a números de telèfon sense la teva intervenció. Això pot comportar càrrecs o trucades inesperats. Tingues en compte que això no permet que l\'aplicació truqui a números d\'emergència. És possible que se\'t cobri si les aplicacions malicioses fan trucades sense confirmació o marquen codis d\'operadors que poden causar que les trucades entrants es desviïn automàticament a un altre número."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"accés al servei de trucades IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permet que l\'aplicació utilitzi el servei IMS per fer trucades sense la teva intervenció."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"veure l\'estat i la identitat del telèfon"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permet que l\'aplicació obtingui informació preferent sobre el servei de pagament per NFC, com ara complements registrats i destinacions de rutes."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"controlar Comunicació de camp proper (NFC)"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Permet que l\'aplicació es comuniqui amb les etiquetes, les targetes i els lectors de Comunicació de camp proper (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Esdeveniment de transacció d\'un element segur"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Permet que l\'aplicació rebi informació sobre les transaccions que tenen lloc en un element segur."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"desactivació del bloqueig de pantalla"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Permet que l\'aplicació desactivi el bloqueig del teclat i qualsevol element de seguretat de contrasenyes associat. Per exemple, el telèfon desactiva el bloqueig del teclat en rebre una trucada entrant i, a continuació, reactiva el bloqueig del teclat quan finalitza la trucada."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"sol·licita una determinada complexitat del bloqueig de pantalla"</string>
@@ -615,10 +619,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Fes servir la biometria o el bloqueig de pantalla"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifica la teva identitat"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Utilitza la teva biometria per continuar"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Utilitza l\'empremta digital per continuar"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Utilitza la cara per continuar"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Utilitza la biometria o el bloqueig de pantalla per continuar"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Maquinari biomètric no disponible"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"S\'ha cancel·lat l\'autenticació"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"No s\'ha reconegut"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"No s\'ha reconegut la cara"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"S\'ha cancel·lat l\'autenticació"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No s\'ha definit cap PIN, patró o contrasenya"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Error en l\'autenticació"</string>
@@ -634,7 +641,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Hi ha massa llum"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"S\'ha premut el botó d\'engegada"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Prova d\'ajustar l\'empremta digital"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Canvia lleugerament la posició del dit en cada intent"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Canvia lleugerament la posició del dit cada vegada"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"L\'empremta digital no s\'ha reconegut"</string>
@@ -680,8 +687,8 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"No hi ha prou llum"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Allunya\'t del telèfon"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Apropa el telèfon"</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"Mou el telèfon més amunt"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"Mou el telèfon més avall"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"Apuja el telèfon"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"Abaixa el telèfon"</string>
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Mou el telèfon cap a l\'esquerra"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Mou el telèfon cap a la dreta"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Mira més directament cap al dispositiu."</string>
@@ -693,15 +700,15 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Mira més directament al telèfon"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Mira més directament al telèfon"</string>
     <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_obscured" msgid="4917643294953326639">"Aparta tot allò que et tapi la cara"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Neteja la part superior de la pantalla, inclosa la barra negra"</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>
+    <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"S\'han detectat ulleres fosques. La cara ha de veure\'s sencera."</string>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Tens la cara tapada. La cara ha de veure\'s sencera."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"No es pot verificar la cara. Maquinari no disponible."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"S\'ha cancel·lat el reconeixement facial."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"L\'usuari ha cancel·lat Desbloqueig facial"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Massa intents. Torna-ho a provar més tard."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Massa intents. Desbloqueig facial no està disponible."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Massa intents. Introdueix el bloqueig de pantalla."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"No es pot verificar la cara. Torna-ho a provar."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"No has configurat Desbloqueig facial"</string>
@@ -995,7 +1001,7 @@
     <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="8381565919325410939">"S\'està desbloquejant la targeta SIM…"</string>
     <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6458790975898594240">"Has dibuixat el patró de desbloqueig de manera incorrecta <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades. \n\nTorna-ho a provar d\'aquí a <xliff:g id="NUMBER_1">%2$d</xliff:g> segons."</string>
     <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"Has escrit malament la contrasenya <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades. \n\nTorna-ho a provar d\'aquí a <xliff:g id="NUMBER_1">%2$d</xliff:g> segons."</string>
-    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"Has escrit malament la contrasenya <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades. \n\nTorna-ho a provar d\'aquí a <xliff:g id="NUMBER_1">%2$d</xliff:g> segons."</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"Has escrit malament el PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades. \n\nTorna-ho a provar d\'aquí a <xliff:g id="NUMBER_1">%2$d</xliff:g> segons."</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="3069635524964070596">"Has dibuixat el patró de desbloqueig <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades de manera incorrecta. Si falles <xliff:g id="NUMBER_1">%2$d</xliff:g> vegades més, se\'t demanarà que desbloquegis la tauleta amb l\'inici de sessió de Google.\n\n Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_2">%3$d</xliff:g> segons."</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"Has dibuixat el patró de desbloqueig <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades de manera incorrecta. Si falles <xliff:g id="NUMBER_1">%2$d</xliff:g> vegades més, se\'t demanarà que desbloquegis el dispositiu Android TV iniciant la sessió a Google.\n\n Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_2">%3$d</xliff:g> segons."</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="5691623136957148335">"Has dibuixat el patró de desbloqueig <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades de manera incorrecta. Si falles <xliff:g id="NUMBER_1">%2$d</xliff:g> vegades més, se\'t demanarà que desbloquegis el telèfon amb l\'inici de sessió de Google.\n\n Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_2">%3$d</xliff:g> segons."</string>
@@ -1365,7 +1371,7 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"S\'ha activat el mode MIDI per USB"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Dispositiu connectat com a càmera web"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"S\'ha connectat un accessori USB"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"Toca per veure més opcions."</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"Toca per veure més opcions"</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"S\'està carregant el dispositiu connectat. Toca per veure més opcions."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"S\'ha detectat un accessori d\'àudio analògic"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"El dispositiu connectat no és compatible amb aquest telèfon. Toca per obtenir més informació."</string>
@@ -1393,7 +1399,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"REBUTJA"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Selecciona un mètode d\'introducció"</string>
     <string name="show_ime" msgid="6406112007347443383">"Mantén-lo en pantalla mentre el teclat físic està actiu"</string>
-    <string name="hardware" msgid="1800597768237606953">"Mostra el teclat virtual"</string>
+    <string name="hardware" msgid="3611039921284836033">"Utilitza el teclat en pantalla"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configura <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configura els teclats físics"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Toca per seleccionar l\'idioma i la disposició"</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Elimina"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Vols apujar el volum per sobre del nivell recomanat?\n\nSi escoltes música a un volum alt durant períodes llargs, pots danyar-te l\'oïda."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Advertiment:\nHas superat la quantitat de senyals sonors forts que una persona pot escoltar de manera segura amb els auriculars en una setmana.\n\nSi superes aquest límit, danyaràs la teva audició permanentment."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Advertiment:\nHas superat 5 vegades la quantitat de senyals sonors forts que una persona pot escoltar de manera segura amb els auriculars en una setmana.\n\nS\'ha abaixat el volum per protegir la teva audició."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"El nivell al qual estàs escoltant contingut multimèdia pot provocar danys auditius si es manté durant períodes llargs.\n\nSi continues reproduint-lo en aquest nivell durant períodes llargs, podria danyar la teva audició."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Advertiment:\nActualment, estàs escoltant i reproduint contingut a un volum alt i a un nivell no segur.\n\nSi continues escoltant-lo amb aquest volum, causarà danys a la teva audició permanentment."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Vols continuar escoltant a un volum elevat?\n\nEl volum dels auriculars ha estat elevat durant més temps del recomanat, i això pot danyar la teva audició"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"S\'ha detectat un so fort\n\nEl volum dels auriculars ha estat elevat durant més temps del recomanat, i això pot danyar la teva audició"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Vols fer servir la drecera d\'accessibilitat?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Si la drecera està activada, prem els dos botons de volum durant 3 segons per iniciar una funció d\'accessibilitat."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Vols desactivar la drecera de les funcions d\'accessibilitat?"</string>
@@ -1852,7 +1856,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Per sortir, llisca cap avall des de la part superior."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Entesos"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Gira per a una millor visualització"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Surt de la pantalla dividida per a una millor visualització"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Obre <xliff:g id="NAME">%s</xliff:g> en pantalla completa per a una millor visualització"</string>
     <string name="done_label" msgid="7283767013231718521">"Fet"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Control circular de les hores"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Control circular dels minuts"</string>
@@ -1958,7 +1962,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"L\'aplicació no està disponible"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Ara mateix, <xliff:g id="APP_NAME">%1$s</xliff:g> no està disponible."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> no està disponible"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Permís necessari"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"S\'ha suprimit la sol·licitud de permís"</string>
     <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>
@@ -1969,6 +1973,9 @@
     <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"En aquests moments, No s\'hi pot accedir des del teu <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 s\'hi pot accedir des del teu <xliff:g id="DEVICE">%1$s</xliff:g>. Prova-ho a la tauleta."</string>
     <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"No s\'hi pot accedir des del teu <xliff:g id="DEVICE">%1$s</xliff:g>. Prova-ho al telèfon."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tv" msgid="4706276040125072077">"Aquesta aplicació requereix permisos addicionals, però els permisos no es poden concedir en una sessió de reproducció en continu. Primer concedeix el permís al teu dispositiu Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Aquesta aplicació requereix permisos addicionals, però els permisos no es poden concedir en una sessió de reproducció en continu. Primer concedeix el permís a la teva tauleta."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Aquesta aplicació requereix permisos addicionals, però els permisos no es poden concedir en una sessió de reproducció en continu. Primer concedeix el permís al teu 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>
@@ -1977,6 +1984,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"No s\'hi pot accedir des del teu <xliff:g id="DEVICE">%1$s</xliff:g>. Prova-ho al telèfon."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Aquesta aplicació es va compilar per a una versió anterior d\'Android. Pot ser que no funcioni correctament i no inclou les darreres proteccions de seguretat i privadesa. Comprova si hi ha actualitzacions o contacta amb el desenvolupador de l\'aplicació."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Cerca actualitzacions"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Aquesta aplicació no és compatible amb la darrera versió d\'Android. Comprova si hi ha actualitzacions o contacta amb el desenvolupador de l\'aplicació."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tens missatges nous"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Obre l\'aplicació d\'SMS per veure\'ls"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Algunes funcions poden ser limitades"</string>
@@ -2093,7 +2101,7 @@
     <string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"D\'acord"</string>
     <string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"Desactiva"</string>
     <string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"Més informació"</string>
-    <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Les notificacions millorades han substituït les notificacions adaptatives d\'Android a Android 12. Aquesta funció mostra les accions i respostes suggerides, i organitza les teves notificacions.\n\nLes notificacions millorades poden accedir al contingut de les notificacions, inclosa la informació personal com els noms dels contactes i els missatges. Aquesta funció també pot ignorar les notificacions o respondre-hi; per exemple, pot contestar a trucades i controlar el mode No molestis."</string>
+    <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Les notificacions millorades han substituït les notificacions adaptatives d\'Android a Android 12. Aquesta funció mostra accions i respostes suggerides, i organitza les teves notificacions.\n\nLes notificacions millorades poden accedir al contingut de les notificacions, inclosa la informació personal com ara noms de contactes i missatges. Aquesta funció també pot ignorar les notificacions o respondre-hi, per exemple pot contestar a trucades, i controlar el mode No molestis."</string>
     <string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notificació d\'informació del mode de rutina"</string>
     <string name="dynamic_mode_notification_title" msgid="1388718452788985481">"Estalvi de bateria s\'ha activat"</string>
     <string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"S\'està reduint l\'ús de la bateria per allargar-ne la durada"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"No es pot obrir aquest contingut amb aplicacions de treball"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"No es pot compartir aquest contingut amb aplicacions personals"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"No es pot obrir aquest contingut amb aplicacions personals"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"El perfil de treball està en pausa"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Toca per activar"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Les aplicacions de treball estan en pausa"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Reactiva"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Cap aplicació de treball"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Cap aplicació personal"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Vols obrir l\'aplicació <xliff:g id="APP">%s</xliff:g> de treball?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Vols obrir el contingut a l\'aplicació <xliff:g id="APP">%s</xliff:g> personal?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Vols obrir el contingut a l\'aplicació <xliff:g id="APP">%s</xliff:g> de treball?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Vols trucar des de l\'aplicació de treball?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Vols canviar a l\'aplicació de treball?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"La teva organització només et permet fer trucades des d\'aplicacions de treball"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"La teva organització només et permet enviar missatges des d\'aplicacions de treball"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Utilitza el navegador personal"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Utilitza el navegador de treball"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Truca"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Canvia"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN de desbloqueig de la xarxa SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN de desbloqueig de subconjunt de la xarxa SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN de desbloqueig de la SIM corporativa"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"No es pot accedir a la càmera del telèfon des del teu <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"No es pot accedir a la càmera de la tauleta des del teu <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"No s\'hi pot accedir mentre s\'està reproduint en continu. Prova-ho al telèfon."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"No es pot veure el mode d\'imatge sobre imatge durant la reproducció en continu"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Valor predeterminat del sistema"</string>
     <string name="default_card_name" msgid="9198284935962911468">"TARGETA <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Permís del perfil del rellotge perquè l\'aplicació complementària gestioni els rellotges"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index aaa0309..a4e9ab5 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -270,7 +270,7 @@
     <string name="global_action_settings" msgid="4671878836947494217">"Nastavení"</string>
     <string name="global_action_assist" msgid="2517047220311505805">"Asistence"</string>
     <string name="global_action_voice_assist" msgid="6655788068555086695">"Hlas. asistence"</string>
-    <string name="global_action_lockdown" msgid="2475471405907902963">"Zamknuto"</string>
+    <string name="global_action_lockdown" msgid="2475471405907902963">"Zamknout"</string>
     <string name="status_bar_notification_info_overflow" msgid="3330152558746563475">"999+"</string>
     <string name="notification_hidden_text" msgid="2835519769868187223">"Nové oznámení"</string>
     <string name="notification_channel_physical_keyboard" msgid="5417306456125988096">"Fyzická klávesnice"</string>
@@ -300,6 +300,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Systém Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Přepnout na osobní profil"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Přepnout na pracovní profil"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Přepnout na osobní verzi aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Přepnout na pracovní verzi aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakty"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"přístup ke kontaktům"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Poloha"</string>
@@ -505,7 +507,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Umožňuje aplikaci ovládat vibrace."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Umožňuje aplikaci přístup ke stavu vibrací."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"přímé volání na telefonní čísla"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Umožňuje aplikaci volat na telefonní čísla bez vašeho přičinění. Může mít za následek neočekávané poplatky nebo hovory. Toto oprávnění neumožňuje aplikaci volat na tísňová čísla. Škodlivé aplikace vás mohou připravit o peníze uskutečňováním hovorů bez vašeho svolení."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Umožňuje aplikaci volat na telefonní čísla bez vašeho přičinění. Může to mít za následek neočekávané poplatky nebo hovory. Toto oprávnění neumožňuje aplikaci volat na tísňová čísla. Škodlivé aplikace mohou způsobit poplatky tím, že budou volat bez vašeho svolení nebo budou vytáčet kódy operátora, které příchozí hovory automaticky přesměrují na jiné číslo."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"přístup ke službě zasílání rychlých zpráv pro účely hovorů"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Umožňuje aplikaci používat službu zasílání rychlých zpráv k uskutečňování hovorů bez vašeho zásahu."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"čtení stavu a identity telefonu"</string>
@@ -590,6 +592,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Umožňuje aplikaci získat informace o preferované platební službě NFC, například o registrovaných pomůckách a cíli směrování."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"ovládání technologie NFC"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Umožňuje aplikaci komunikovat se štítky, kartami a čtečkami s podporou technologie NFC."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Událost transakce Secure Element"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Umožňuje aplikaci přijímat informace o transakcích probíhajících v prvku Secure Element."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"vypnutí zámku obrazovky"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Umožňuje aplikaci vypnout zámek kláves a související zabezpečení heslem. Telefon například vypne zámek klávesnice při příchozím hovoru a po skončení hovoru jej zase zapne."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"zjištění složitosti zámku obrazovky"</string>
@@ -616,20 +620,23 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Použít biometrii nebo zámek obrazovky"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Potvrďte, že jste to vy"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Pokračujte biometrickým ověřením"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Pokračujte přiložením prstu"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Pokračujte ověřením obličeje"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Pokračujte ověřením pomocí biometrických údajů nebo zámku obrazovky"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrický hardware není k dispozici"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Ověření bylo zrušeno"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Nerozpoznáno"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Obličej nebyl rozpoznán"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Ověření bylo zrušeno"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Není nastaven žádný PIN, gesto ani heslo"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Při ověřování došlo k chybě"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Použít zámek obrazovky"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Pokračujte zadáním zámku obrazovky"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Pevně zatlačte na senzor"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Pevně zatlačte na snímač"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Otisk prstu se nepodařilo rozpoznat. Zkuste to znovu."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Vyčistěte snímač otisků prstů a zkuste to znovu"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Vyčistěte senzor a zkuste to znovu"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Zatlačte silně na senzor"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Pevně přitiskněte prst na snímač"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Pohyb prstem byl příliš pomalý. Zkuste to znovu."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Zkuste jiný otisk prstu"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Je příliš světlo"</string>
@@ -681,10 +688,10 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nedostatečné osvětlení"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Umístěte telefon dál"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Umístěte telefon blíž"</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"Umístěte telefon výš"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"Umístěte telefon níž"</string>
-    <string name="face_acquired_too_right" msgid="6245286514593540859">"Umístěte telefon víc doleva"</string>
-    <string name="face_acquired_too_left" msgid="9201762240918405486">"Umístěte telefon víc doprava"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"Posuňte telefon výš"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"Posuňte telefon níž"</string>
+    <string name="face_acquired_too_right" msgid="6245286514593540859">"Posuňte telefon doleva"</string>
+    <string name="face_acquired_too_left" msgid="9201762240918405486">"Posuňte telefon doprava"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Dívejte se přímo na zařízení."</string>
     <string name="face_acquired_not_detected" msgid="1057966913397548150">"Obličej není vidět. Držte telefon v úrovni očí."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Příliš mnoho pohybu. Držte telefon nehybně."</string>
@@ -711,8 +718,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Operace snímání obličeje byla zrušena."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Odemknutí obličejem zrušeno uživatelem"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Příliš mnoho pokusů. Zkuste to později."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Příliš mnoho pokusů. Odemknutí obličejem je nedostupné."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Příliš mnoho pokusů. Zadejte zámek obrazovky."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Obličej se nepodařilo ověřit. Zkuste to znovu."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Odemknutí obličejem nemáte nastavené."</string>
@@ -1241,7 +1247,7 @@
     <string name="unsupported_display_size_show" msgid="980129850974919375">"Vždy zobrazovat"</string>
     <string name="unsupported_compile_sdk_message" msgid="7326293500707890537">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> byla vytvořena nekompatibilní systému Android a může se chovat neočekávaně. K dispozici může být aktualizovaná verze aplikace."</string>
     <string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"Vždy zobrazovat"</string>
-    <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Zkontrolovat aktualizace"</string>
+    <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Zkontrolovat dostupnost aktualizace"</string>
     <string name="smv_application" msgid="3775183542777792638">"Aplikace <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) porušila své vlastní vynucené zásady StrictMode."</string>
     <string name="smv_process" msgid="1398801497130695446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> porušil své vlastní vynucené zásady StrictMode."</string>
     <string name="android_upgrading_title" product="default" msgid="7279077384220829683">"Telefon se aktualizuje…"</string>
@@ -1366,7 +1372,7 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"Byl zapnut režim MIDI přes USB"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Zařízení připojeno jako webkamera"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"Je připojeno příslušenství USB"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"Klepnutím zobrazíte další možnosti."</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"Klepnutím zobrazíte další možnosti"</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Nabíjení připojeného zařízení. Klepnutím zobrazíte další možnosti."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Bylo zjištěno analogové zvukové příslušenství"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Připojené zařízení není s tímto telefonem kompatibilní. Klepnutím zobrazíte další informace."</string>
@@ -1394,7 +1400,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ODMÍTNOUT"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Vybrat metodu zadávání"</string>
     <string name="show_ime" msgid="6406112007347443383">"Ponechat na obrazovce, když je aktivní fyzická klávesnice"</string>
-    <string name="hardware" msgid="1800597768237606953">"Zobrazit virtuální klávesnici"</string>
+    <string name="hardware" msgid="3611039921284836033">"Použít softwarovou klávesnici"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Nakonfigurujte zařízení <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Nakonfigurujte fyzické klávesnice"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Klepnutím vyberte jazyk a rozvržení"</string>
@@ -1683,10 +1689,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Odebrat"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Zvýšit hlasitost nad doporučenou úroveň?\n\nDlouhodobý poslech hlasitého zvuku může poškodit sluch."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Varování:\nPřekročili jste týdenní množství hlasitého zvuku, které lze bezpečně poslouchat přes sluchátka.\n\nPřekračování tohoto limitu trvale poškodí váš sluch."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Varování:\nPřekročili jste 5násobek týdenního množství hlasitého zvuku, které lze bezpečně poslouchat přes sluchátka.\n\nKvůli ochraně vašeho sluchu byla snížena hlasitost."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Hlasitost, se kterou posloucháte média, může při dlouhodobém používání vést k poškození sluchu.\n\nPokud budete v přehrávání touto hlasitostí pokračovat dlouhou dobu, může vám to poškodit sluch."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Varování:\nMomentálně posloucháte obsah nebezpečně hlasitě.\n\nPokud budete v poslechu takto hlasitého zvuku pokračovat, trvale vám to poškodí sluch."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Pokračovat v poslechu s vysokou hlasitostí?\n\nVe sluchátkách je nastavena vysoká hlasitost déle, než je doporučeno, což může poškodit sluch"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Byl zjištěn hlasitý zvuk\n\nVe sluchátkách je nastavena vyšší hlasitost, než je doporučeno, což může poškodit sluch"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Použít zkratku přístupnosti?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Když je tato zkratka zapnutá, můžete funkci přístupnosti spustit tím, že na tři sekundy podržíte obě tlačítka hlasitosti."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Zapnout zkratku funkcí pro usnadnění přístupu?"</string>
@@ -1853,7 +1857,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Režim ukončíte přejetím prstem shora dolů."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Rozumím"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Otočte obrazovku, abyste lépe viděli"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Ukončete režim rozdělené obrazovky, abyste lépe viděli"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Otevřete aplikaci <xliff:g id="NAME">%s</xliff:g> na celou obrazovku, aby byla lépe vidět"</string>
     <string name="done_label" msgid="7283767013231718521">"Hotovo"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Kruhový posuvník hodin"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Kruhový posuvník minut"</string>
@@ -1953,13 +1957,13 @@
     <string name="app_suspended_default_message" msgid="6451215678552004172">"Aplikace <xliff:g id="APP_NAME_0">%1$s</xliff:g> momentálně není dostupná. Tato předvolba se spravuje v aplikaci <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
     <string name="app_suspended_more_details" msgid="211260942831587014">"Další informace"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Zrušit pozastavení aplikace"</string>
-    <string name="work_mode_off_title" msgid="6367463960165135829">"Zrušit pozast. prac. aplikací?"</string>
+    <string name="work_mode_off_title" msgid="6367463960165135829">"Zrušit pozastavení pracovních aplikací?"</string>
     <string name="work_mode_turn_on" msgid="5316648862401307800">"Zrušit pozastavení"</string>
     <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Stav nouze"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"Aplikace není k dispozici"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> v tuto chvíli není k dispozici."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> není k dispozici"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Je vyžadováno oprávnění"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Žádost o oprávnění byla potlačena"</string>
     <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>
@@ -1970,6 +1974,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Tato aplikace požaduje další oprávnění, která ale nelze udělit během relace streamování. Oprávnění udělte nejprve na zařízení Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Tato aplikace požaduje další oprávnění, která ale nelze udělit během relace streamování. Oprávnění udělte nejprve na tabletu."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Tato aplikace požaduje další oprávnění, která ale nelze udělit během relace streamování. Oprávnění udělte nejprve 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>
@@ -1978,6 +1985,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"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="deprecated_target_sdk_message" msgid="5246906284426844596">"Tato aplikace byla vytvořena pro starší verzi Androidu. Nemusí fungovat správně a neobsahuje nejnovější zabezpečení a ochranu soukromí. Zkontrolujte dostupnost aktualizace nebo kontaktujte vývojáře aplikace."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Zkontrolovat aktualizace"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Tato aplikace není kompatibilní s poslední verzí Androidu. Zkontrolujte dostupnost aktualizace nebo kontaktujte vývojáře aplikace."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Máte nové zprávy"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Zobrazíte je v aplikaci pro SMS"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Některé funkce mohou být omezeny"</string>
@@ -2161,16 +2169,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Tento obsah nelze otevřít pomocí pracovních aplikací"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Tento obsah nelze sdílet pomocí osobních aplikací"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Tento obsah nelze otevřít pomocí osobních aplikací"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Pracovní profil je pozastaven"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Klepnutím ho zapnete"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Pracovní aplikace jsou pozastaveny"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Zrušit pozastavení"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Žádné pracovní aplikace"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Žádné osobní aplikace"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Otevřít pracovní aplikaci <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Otevřít v osobní aplikaci <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Otevřít v pracovní aplikaci <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Volat z pracovní aplikace?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Přepnout na pracovní aplikaci?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Vaše organizace dovoluje volat jen z pracovních aplikací"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Vaše organizace dovoluje odesílat zprávy jen z pracovních aplikací"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Použít osobní prohlížeč"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Použít pracovní prohlížeč"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Volat"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Přepnout"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Kód PIN odblokování sítě pro SIM kartu"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN pro odblokování podskupiny sítí pro SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Kód PIN odblokování podnikové sítě pro SIM kartu"</string>
@@ -2307,6 +2320,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Ze zařízení <xliff:g id="DEVICE">%1$s</xliff:g> nelze získat přístup k fotoaparátu telefonu"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Ze zařízení <xliff:g id="DEVICE">%1$s</xliff:g> nelze získat přístup k fotoaparátu tabletu"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Tento obsah při streamování nelze zobrazit. Zkuste to na telefonu."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Během streamování nelze zobrazit obraz v obraze"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Výchozí nastavení systému"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KARTA <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Oprávnění profilu doprovodných hodinek ke správě hodinek"</string>
@@ -2319,11 +2333,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Umožňuje doprovodné aplikaci spouštět z pozadí služby v popředí."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofon je dostupný"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofon je zablokován"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dvojitá obrazovka"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Je zapnutá funkce Dvojitá obrazovka"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Je zapnutá funkce Dual Screen"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> používá k zobrazení obsahu oba displeje"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Zařízení je příliš horké"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dvojitá obrazovka není k dispozici, protože se telefon příliš zahřívá"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Funkce Dual Screen není k dispozici, protože se telefon příliš zahřívá"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Funkce Dual Screen není k dispozici"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Funkce Dual Screen není k dispozici, protože je zapnutý spořič baterie. Tuto možnost můžete vypnout v nastavení."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Přejít do Nastavení"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 2845e3c..b8bd5ba 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -268,7 +268,7 @@
     <string name="global_action_settings" msgid="4671878836947494217">"Indstillinger"</string>
     <string name="global_action_assist" msgid="2517047220311505805">"Assistance"</string>
     <string name="global_action_voice_assist" msgid="6655788068555086695">"Taleassistent"</string>
-    <string name="global_action_lockdown" msgid="2475471405907902963">"Lås enhed"</string>
+    <string name="global_action_lockdown" msgid="2475471405907902963">"Låsning"</string>
     <string name="status_bar_notification_info_overflow" msgid="3330152558746563475">"999+"</string>
     <string name="notification_hidden_text" msgid="2835519769868187223">"Ny notifikation"</string>
     <string name="notification_channel_physical_keyboard" msgid="5417306456125988096">"Fysisk tastatur"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android-system"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Skift til personlig profil"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Skift til arbejdsprofil"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Skift til <xliff:g id="APP_NAME">%1$s</xliff:g> til privat brug"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Skift til <xliff:g id="APP_NAME">%1$s</xliff:g> til arbejdsbrug"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakter"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"have adgang til dine kontakter"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Lokation"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Tillader, at appen kan administrere vibratoren."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Tillader, at appen bruger vibration."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"ringe direkte op til telefonnumre"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Tillader, at appen kan ringe til telefonnumre uden din indgriben. Dette kan resultere i uventede opkrævninger eller opkald. Bemærk, at appen med denne tilladelse ikke kan ringe til nødopkaldsnumre. Skadelige apps kan koste dig penge ved at foretage opkald uden din bekræftelse."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Tillader, at appen kan ringe til telefonnumre uden din indgriben. Dette kan resultere i uventede debiteringer eller opkald. Vær opmærksom på, at dette ikke giver appen tilladelse til at ringe til alarmnumre. Skadelige apps kan koste dig penge ved at foretage opkald uden din bekræftelse eller ved at ringe op til operatørkoder, hvilket resulterer i, at indgående opkald automatisk viderestilles til et andet nummer."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"få adgang til chat-opkaldstjeneste"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Tillader, at appen kan bruge chat-tjenesten til at foretage opkald, uden du gør noget."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"læse telefonens status og identitet"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Tillader, at appen får foretrukne oplysninger vedrørende NFC-betalingstjeneste, f.eks. registrerede hjælpemidler og rutedestinationer."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"administrere Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Tillader, at appen kan kommunikere med NFC-tags (Near Field Communication), -kort og -læsere."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Secure Element-transaktion"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Tillader, at appen kan modtage oplysninger om transaktioner, der foretages via Secure Element."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"deaktivere din skærmlås"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Tillader, at appen kan deaktivere tastaturlåsen og anden form for tilknyttet adgangskodesikkerhed. Telefonen deaktiverer f.eks. tastaturlåsen ved indgående telefonopkald og aktiverer tastaturlåsen igen, når opkaldet er afsluttet."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"anmode om skærmlåsens kompleksitet"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Brug biometri eller skærmlås"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Verificer, at det er dig"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Brug dine biometriske data for at fortsætte"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Brug dit fingeraftryk for at fortsætte"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Brug dit ansigt for at fortsætte"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Brug dine biometriske data eller din skærmlås for at fortsætte"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrisk hardware er ikke tilgængelig"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Godkendelsen blev annulleret"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Ikke genkendt"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Ansigt blev ikke genkendt"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Godkendelsen blev annulleret"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Der er ikke angivet pinkode, mønster eller adgangskode"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Der opstod fejl i forbindelse med godkendelse"</string>
@@ -682,7 +689,7 @@
     <string name="face_acquired_too_high" msgid="8278815780046368576">"Løft telefonen højere op"</string>
     <string name="face_acquired_too_low" msgid="4075391872960840081">"Sænk telefonen"</string>
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Flyt telefonen længere til venstre for dig"</string>
-    <string name="face_acquired_too_left" msgid="9201762240918405486">"Flyt telefonen længere til højre for dig"</string>
+    <string name="face_acquired_too_left" msgid="9201762240918405486">"Flyt telefonen længere til højre"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Kig mere direkte på din enhed."</string>
     <string name="face_acquired_not_detected" msgid="1057966913397548150">"Dit ansigt kan ikke registreres. Hold din telefon i øjenhøjde."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Der er for meget bevægelse. Hold telefonen stille."</string>
@@ -692,7 +699,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Kig mere direkte på din telefon"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Kig mere direkte på din telefon"</string>
     <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_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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Ansigtshandlingen blev annulleret."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Ansigtslås blev annulleret af brugeren"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Du har prøvet for mange gange. Prøv igen senere."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Du har brugt for mange forsøg. Ansigtslås er utilgængelig."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Du har brugt for mange forsøg. Angiv skærmlåsen i stedet."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Ansigtet kan ikke genkendes. Prøv igen."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Du har ikke konfigureret ansigtslås."</string>
@@ -751,8 +757,8 @@
     <string name="permdesc_register_call_provider" msgid="4201429251459068613">"Tillader, at appen registrerer nye telefonforbindelser."</string>
     <string name="permlab_connection_manager" msgid="3179365584691166915">"administrere telefonforbindelser"</string>
     <string name="permdesc_connection_manager" msgid="1426093604238937733">"Tillader, at appen administrerer telefonforbindelser."</string>
-    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"interager med skærmen under opkald"</string>
-    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"Tillader, at appen styrer, hvornår og hvordan brugeren ser skærmen for indgående opkald."</string>
+    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"interager med Call Screen-skærmen"</string>
+    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"Tillader, at appen styrer, hvornår og hvordan brugeren ser Call Screen-skærmen."</string>
     <string name="permlab_bind_connection_service" msgid="5409268245525024736">"interagere med telefonitjenester"</string>
     <string name="permdesc_bind_connection_service" msgid="6261796725253264518">"Tillader, at appen kan interagere med telefonitjenester for at foretage/modtage opkald."</string>
     <string name="permlab_control_incall_experience" msgid="6436863486094352987">"leverer brugeroplevelsen under opkald"</string>
@@ -1091,7 +1097,7 @@
     <string name="enable_explore_by_touch_warning_title" msgid="5095399706284943314">"Vil du aktivere Udforsk ved berøring?"</string>
     <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="1037295476738940824">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ønsker at aktivere Udforsk ved berøring. Når Udforsk ved berøring er tændt, kan du høre eller se beskrivelser af, hvad der er under din finger eller udføre bevægelser for at interagere med tabletten."</string>
     <string name="enable_explore_by_touch_warning_message" product="default" msgid="4312979647356179250">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ønsker at aktivere Udforsk ved berøring. Når Udforsk ved berøring er aktiveret, kan du høre eller se beskrivelser af, hvad der er under din finger, eller udføre bevægelser for at interagere med telefonen."</string>
-    <string name="oneMonthDurationPast" msgid="4538030857114635777">"for 1 måned siden"</string>
+    <string name="oneMonthDurationPast" msgid="4538030857114635777">"1 måned siden"</string>
     <string name="beforeOneMonthDurationPast" msgid="8315149541372065392">"Før for 1 måned siden"</string>
     <string name="last_num_days" msgid="2393660431490280537">"{count,plural, =1{Seneste dag}one{De seneste # dag}other{De seneste # dage}}"</string>
     <string name="last_month" msgid="1528906781083518683">"Seneste måned"</string>
@@ -1121,8 +1127,8 @@
     <string name="duration_days_shortest_future" msgid="3392722163935571543">"om <xliff:g id="COUNT">%d</xliff:g> d."</string>
     <string name="duration_years_shortest_future" msgid="5537464088352970388">"om <xliff:g id="COUNT">%d</xliff:g> år"</string>
     <string name="duration_minutes_relative" msgid="8620337701051015593">"{count,plural, =1{For # minut siden}one{For # minut siden}other{For # minutter siden}}"</string>
-    <string name="duration_hours_relative" msgid="4836449961693180253">"{count,plural, =1{For # time siden}one{For # time siden}other{For # timer siden}}"</string>
-    <string name="duration_days_relative" msgid="621965767567258302">"{count,plural, =1{For # dag siden}one{For # dag siden}other{For # dage siden}}"</string>
+    <string name="duration_hours_relative" msgid="4836449961693180253">"{count,plural, =1{# time siden}one{# time siden}other{# timer siden}}"</string>
+    <string name="duration_days_relative" msgid="621965767567258302">"{count,plural, =1{1 dag siden}one{1 dag siden}other{# dag siden}}"</string>
     <string name="duration_years_relative" msgid="8731202348869424370">"{count,plural, =1{For # år siden}one{For # år siden}other{For # år siden}}"</string>
     <string name="duration_minutes_relative_future" msgid="5259574171747708115">"{count,plural, =1{# minut}one{# minut}other{# minutter}}"</string>
     <string name="duration_hours_relative_future" msgid="6670440478481140565">"{count,plural, =1{# time}one{# time}other{# timer}}"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"AFVIS"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Vælg inputmetode"</string>
     <string name="show_ime" msgid="6406112007347443383">"Behold den på skærmen, mens det fysiske tastatur er aktivt"</string>
-    <string name="hardware" msgid="1800597768237606953">"Vis virtuelt tastatur"</string>
+    <string name="hardware" msgid="3611039921284836033">"Brug skærmtastaturet"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Konfigurer <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Konfigurer fysiske tastaturer"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Tryk for at vælge sprog og layout"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Fjern"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Vil du skrue højere op end det anbefalede lydstyrkeniveau?\n\nDu kan skade hørelsen ved at lytte til meget høj musik over længere tid."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Advarsel!\nDu har overskredet den mængde af høje lydsignaler, det er forsvarligt at lytte til over en periode på en uge i dine høretelefoner.\n\nNår du overstiger denne grænse, tager din hørelse permanent skade."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Advarsel!\nDu har 5 gange overskredet den mængde af høje lydsignaler, det er forsvarligt at lytte til over en periode på en uge i dine høretelefoner.\n\nLydstyrken er blevet sænket for at beskytte din hørelse."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Den lydstyrke, du hører medier på, kan medføre høreskader over tid.\n\nHvis du fortsætter med at afspille medier ved så høj lydstyrke over længere tid, kan din hørelse tage skade."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"ADvarsel!\nDu lytter i øjeblikket til indhold, der afspilles ved så høj en lydstyrke, at det kan gå ud over din hørelse.\n\nHvis du fortsætter med at afspille indhold ved så høj lydstyrke, vil din hørelse tage skade."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Vil du fortsætte med at lytte ved høj lydstyrke?\n\nHøretelefonernes lydstyrke har været høj i længere tid end anbefalet, hvilket kan skade din hørelse"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Der er registreret høj lyd\n\nHøretelefonernes lydstyrke har været højere end anbefalet, hvilket kan skade din hørelse"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Vil du bruge genvejen til Hjælpefunktioner?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Når genvejen er aktiveret, kan du starte en hjælpefunktion ved at trykke på begge lydstyrkeknapper i tre sekunder."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Vil du aktivere genvejen til hjælpefunktioner?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Stryg ned fra toppen for at afslutte."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"OK, det er forstået"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Roter, og få en bedre visning"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Afslut opdelt skærm, og få en bedre visning"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Åbn <xliff:g id="NAME">%s</xliff:g> i fuld skærm for at få en bedre visning"</string>
     <string name="done_label" msgid="7283767013231718521">"Udfør"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Cirkulær timevælger"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Cirkulær minutvælger"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Appen er ikke tilgængelig"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> er ikke tilgængelig lige nu."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> er ikke understøttet"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Der kræves tilladelse"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Anmodning om tilladelse blokeret"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Dette er ikke tilgængeligt 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">"Dette er ikke tilgængeligt 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">"Dette er ikke tilgængeligt 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_permission_request" product="tv" msgid="4706276040125072077">"Denne app anmoder om yderligere tilladelser, men der kan ikke gives tilladelser under en streamingsession. Giv tilladelse på din Android TV-enhed først."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Denne app anmoder om yderligere tilladelser, men der kan ikke gives tilladelser under en streamingsession. Giv tilladelse på din tablet først."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Denne app anmoder om yderligere tilladelser, men der kan ikke gives tilladelser under en streamingsession. Giv tilladelse på din telefon først."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Du kan ikke gøre dette på din <xliff:g id="DEVICE">%1$s</xliff:g>. Prøv på din telefon i stedet."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Denne app er udviklet til en ældre version af Android. Den fungerer muligvis ikke korrekt, og den omfatter ikke de nyeste sikkerhedsfunktioner og den nyeste privatlivsbeskyttelse. Tjek, om der er en opdatering, eller kontakt appudvikleren."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Søg efter opdatering"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Denne app er ikke kompatibel med den nyeste Android-version. Tjek, om der er en opdatering, eller kontakt appudvikleren."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Du har nye beskeder"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Åbn sms-appen for at se beskeden"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Nogle funktioner er begrænsede"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Dette indhold kan ikke åbnes med arbejdsapps"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Dette indhold kan ikke deles med personlige apps"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Dette indhold kan ikke åbnes med personlige apps"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Arbejdsprofilen er sat på pause"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Tryk for at aktivere"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Dine arbejdsapps er sat på pause"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Genoptag"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Der er ingen arbejdsapps"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Der er ingen personlige apps"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Vil du åbne <xliff:g id="APP">%s</xliff:g> (arbejde)?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Vil du åbne indholdet via <xliff:g id="APP">%s</xliff:g> (personlig)?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Vil du åbne indholdet via <xliff:g id="APP">%s</xliff:g> (arbejde)?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Vil du foretage et opkald via en arbejdsapp?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Vil du skifte til en arbejdsapp?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Din organisation tillader kun, at du foretager opkald via arbejdsapps"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Din organisation tillader kun, at du sender beskeder via arbejdsapps"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Brug personlig browser"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Brug arbejdsbrowser"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Ring op"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Skift"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Pinkode til oplåsning af SIM-netværket"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Pinkode til oplåsning af delmængde for SIM-netværket"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Pinkode til oplåsning af virksomhedens SIM"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Kameraet på din telefon kan ikke tilgås via din <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Kameraet på din tablet kan ikke tilgås via din <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Der er ikke adgang til dette indhold under streaming. Prøv på din telefon i stedet."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Funktionen Integreret billede er ikke tilgængelig, når der streames"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Systemstandard"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KORT <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Tilladelse til at administrere ure for urprofilens medfølgende app"</string>
@@ -2317,15 +2331,15 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Tillader, at en medfølgende app kan starte tjenester i forgrunden via tilladelser til tjenester i baggrunden."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofonen er tilgængelig"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofonen er blokeret"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dobbeltskærm"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dobbeltskærm er aktiveret"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen er aktiveret"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> bruger begge skærme til at vise indhold"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Enheden er for varm"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dobbeltskærm er ikke tilgængelig, fordi din telefon er for varm"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dual Screen er ikke tilgængelig, fordi din telefon er for varm"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen er ikke tilgængelig"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screen er ikke tilgængelig, fordi Batterisparefunktion er aktiveret. Du kan deaktivere dette i Indstillinger."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Gå til Indstillinger"</string>
-    <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Deaktiver"</string>
+    <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Sluk"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> er konfigureret"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Tastaturlayoutet er angivet som <xliff:g id="LAYOUT_1">%s</xliff:g>. Tryk for at ændre dette."</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Tastaturlayoutet er angivet som <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Tryk for at ændre dette."</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 46356dc..84f2c1f 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android-System"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Zum privaten Profil wechseln"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Zum Arbeitsprofil wechseln"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Zum privaten Profil in <xliff:g id="APP_NAME">%1$s</xliff:g> wechseln"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Zum Arbeitsprofil in <xliff:g id="APP_NAME">%1$s</xliff:g> wechseln"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakte"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"auf deine Kontakte zugreifen"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Standort"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Ermöglicht der App, den Vibrationsalarm zu steuern"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ermöglicht der App, auf den Vibrationsstatus zuzugreifen."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"Telefonnummern direkt anrufen"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Ermöglicht der App, ohne dein Eingreifen Telefonnummern zu wählen. Dies kann zu unerwarteten Kosten und Anrufen führen. Beachte, dass die App keine Notrufnummern wählen kann. Schädliche Apps verursachen möglicherweise Kosten, indem sie Anrufe ohne deine Bestätigung tätigen."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Ermöglicht der App, ohne dein Zutun Telefonnummern zu wählen. Das kann zu unerwarteten Anrufen bzw. Kosten führen. Beachte, dass die App keine Notrufnummer anrufen darf. Es gibt schädliche Apps, die Kosten verursachen können, indem sie eigenmächtig Anrufe starten, oder die bestimmte Betreiberkennzahlen wählen, woraufhin eingehende Anrufe automatisch an eine andere Nummer weitergeleitet werden."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"Zugriff auf IMS-Anrufdienst"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Ermöglicht der App die Verwendung des IMS-Dienstes zum Tätigen von Anrufen ohne Nutzereingriffe"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"Telefonstatus und Identität abrufen"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Ermöglicht der App, Informationen zum bevorzugten NFC-Zahlungsdienst abzurufen, etwa registrierte Hilfsmittel oder das Routenziel."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"Nahfeldkommunikation steuern"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Ermöglicht der App die Kommunikation mit Tags für die Nahfeldkommunikation, Karten und Readern"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Transaktion in einem Secure Element"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Ermöglicht der App, Informationen zu Transaktionen abzurufen, die in einem Secure Element stattfinden."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"Displaysperre deaktivieren"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Ermöglicht der App, die Tastensperre sowie den damit verbundenen Passwortschutz zu deaktivieren. Das Telefon deaktiviert die Tastensperre beispielsweise, wenn ein Anruf eingeht, und aktiviert sie wieder, nachdem das Gespräch beendet wurde."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"Komplexitätsstufe der Displaysperre anfragen"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Biometrisches Verfahren oder Displaysperre verwenden"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Deine Identität bestätigen"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Mithilfe eines biometrischen Verfahrens fortfahren"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Fingerabdruck verwenden, um fortzufahren"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Gesichtserkennung verwenden, um fortzufahren"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Verwende deine biometrischen Daten oder deine Display-Entsperrmethode, um fortzufahren"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrische Hardware nicht verfügbar"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Authentifizierung abgebrochen"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Nicht erkannt"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Gesicht nicht erkannt"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Authentifizierung abgebrochen"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Keine PIN, kein Muster und kein Passwort festgelegt"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Fehler bei der Authentifizierung"</string>
@@ -684,7 +691,7 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Bewege das Smartphone nach links"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Bewege das Smartphone nach rechts"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Bitte sieh direkt auf dein Gerät."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Dein Gesicht wurde nicht erkannt. Halte dein Smartphone auf Augenhöhe."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Gesicht nicht erkannt. Smartphone auf Augenhöhe halten."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Zu viel Unruhe. Halte das Smartphone ruhig."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Bitte registriere dein Gesicht noch einmal."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Gesicht nicht erkannt. Versuche es noch einmal."</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Gesicht ist bedeckt. Es muss vollständig sichtbar sein."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Gesicht nicht erkannt. Hardware nicht verfügbar."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Gesichtserkennung abgebrochen."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Entsperrung per Gesichtserkennung vom Nutzer abgebrochen"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Zu viele Versuche, bitte später noch einmal versuchen"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Zu oft versucht. Entsperrung per Gesichtserkennung nicht verfügbar."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Zu viele Versuche. Verwende stattdessen die Displaysperre."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Gesichtsprüfung nicht möglich. Noch mal versuchen."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Entsperrung per Gesichtserkennung ist nicht eingerichtet"</string>
@@ -1369,7 +1375,7 @@
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Analoges Audiozubehör erkannt"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Das angeschlossene Gerät ist nicht mit diesem Smartphone kompatibel. Für weitere Informationen tippen."</string>
     <string name="adb_active_notification_title" msgid="408390247354560331">"USB-Debugging aktiviert"</string>
-    <string name="adb_active_notification_message" msgid="5617264033476778211">"Zum Deaktivieren von USB-Debugging tippen"</string>
+    <string name="adb_active_notification_message" msgid="5617264033476778211">"Zum Deaktivieren tippen"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"USB-Debugging deaktivieren: auswählen"</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"\"Debugging über WLAN\" verbunden"</string>
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Tippen, um \"Debugging über WLAN\" zu deaktivieren"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ABLEHNEN"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Eingabemethode wählen"</string>
     <string name="show_ime" msgid="6406112007347443383">"Bildschirmtastatur auch dann anzeigen, wenn physische Tastatur aktiv ist"</string>
-    <string name="hardware" msgid="1800597768237606953">"Virtuelle Tastatur einblenden"</string>
+    <string name="hardware" msgid="3611039921284836033">"Bildschirmtastatur verwenden"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> konfigurieren"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Physische Tastaturen konfigurieren"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Zum Auswählen von Sprache und Layout tippen"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Entfernen"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Lautstärke über den Schwellenwert anheben?\n\nWenn du über einen längeren Zeitraum Musik in hoher Lautstärke hörst, kann dies dein Gehör schädigen."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Warnung:\nDu hast den wöchentlichen Schwellenwert für laute Geräusche, die ohne Gesundheitsrisiko über Kopfhörer angehört werden können, überschritten.\n\nDies kann zu dauerhaften Hörschäden führen."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Warnung:\nDu hast den wöchentlichen Schwellenwert für laute Geräusche, die ohne Gesundheitsrisiko über Kopfhörer angehört werden können, 5-fach überschritten.\n\n Die Lautstärke wurde verringert, um Hörschäden zu vermeiden."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Die Lautstärke, mit der du dir Medien anhörst, kann über lange Zeiträume hinweg Hörschäden verursachen.\n\nWenn du dir weiterhin Medien bei dieser Lautstärke über lange Zeiträume hinweg anhörst, kann dies zu dauerhaften Hörschäden führen."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Warnung:\nDu überschreitest momentan den Schwellenwert für laute Geräusche, die ohne Gesundheitsrisiko über Kopfhörer angehört werden können.\n\nWenn du dir weiterhin Medien bei dieser Lautstärke anhörst, kann dies zu dauerhaften Hörschäden führen."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Weiter mit hoher Lautstärke hören?\n\nDu hast deine Kopfhörer länger als empfohlen mit einer hohen Lautstärke betrieben. Das kann deinem Hörvermögen schaden"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Lautes Geräusch erkannt\n\nDu hast deine Kopfhörer lauter als empfohlen eingestellt. Das kann deinem Hörvermögen schaden"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Verknüpfung für Bedienungshilfen verwenden?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Wenn die Verknüpfung aktiviert ist, kannst du die beiden Lautstärketasten drei Sekunden lang gedrückt halten, um eine Bedienungshilfe zu starten."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Verknüpfung für Bedienungshilfen aktivieren?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Zum Beenden von oben nach unten wischen"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Ok"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Drehen, um die Ansicht zu verbessern"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Modus für geteilten Bildschirm beenden, um die Ansicht zu verbessern"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Du kannst <xliff:g id="NAME">%s</xliff:g> im Vollbildmodus öffnen, um die Ansicht zu verbessern"</string>
     <string name="done_label" msgid="7283767013231718521">"Fertig"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Kreisförmiger Schieberegler für Stunden"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Kreisförmiger Schieberegler für Minuten"</string>
@@ -1951,13 +1955,13 @@
     <string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ist momentan nicht verfügbar. Dies wird über die App \"<xliff:g id="APP_NAME_1">%2$s</xliff:g>\" verwaltet."</string>
     <string name="app_suspended_more_details" msgid="211260942831587014">"Weitere Informationen"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"App-Pausierung aufheben"</string>
-    <string name="work_mode_off_title" msgid="6367463960165135829">"Geschäftl. Apps nicht mehr pausieren?"</string>
+    <string name="work_mode_off_title" msgid="6367463960165135829">"Geschäftliche Apps nicht mehr pausieren?"</string>
     <string name="work_mode_turn_on" msgid="5316648862401307800">"Nicht mehr pausieren"</string>
     <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Notruf"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"App ist nicht verfügbar"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ist derzeit nicht verfügbar."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> nicht verfügbar"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Berechtigung erforderlich"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Berechtigungsanfrage unterdrückt"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Diese App fordert zusätzliche Berechtigungen an – in einer Streamingsitzung können jedoch keine Berechtigungen gewährt werden. Gewähre die Berechtigung zuerst auf deinem Android TV-Gerät."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Diese App fordert zusätzliche Berechtigungen an – in einer Streamingsitzung können jedoch keine Berechtigungen gewährt werden. Gewähre die Berechtigung zuerst auf deinem Tablet."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Diese App fordert zusätzliche Berechtigungen an – in einer Streamingsitzung können jedoch keine Berechtigungen gewährt werden. Gewähre die Berechtigung zuerst 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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Auf deinem <xliff:g id="DEVICE">%1$s</xliff:g> ist kein Zugriff möglich. Versuch es stattdessen auf deinem Smartphone."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Diese App wurde für eine ältere Android-Version entwickelt. Sie funktioniert möglicherweise nicht richtig und enthält nicht die neuesten Sicherheits- und Datenschutzeinstellungen. Suche nach einem Update oder wende dich an den App-Entwickler."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Auf Updates prüfen"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Diese App ist nicht mit der neuesten Android-Version kompatibel. Suche nach einem Update oder wende dich an den App-Entwickler."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Du hast neue Nachrichten"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Zum Ansehen SMS-App öffnen"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Funktionen sind evtl. eingeschränkt"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Diese Art von Inhalt kann nicht mit geschäftlichen Apps geöffnet werden"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Diese Art von Inhalt kann nicht über private Apps geteilt werden"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Diese Art von Inhalt kann nicht mit privaten Apps geöffnet werden"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Arbeitsprofil pausiert"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Zum Aktivieren tippen"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Geschäftliche Apps sind pausiert"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Nicht mehr pausieren"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Keine geschäftlichen Apps"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Keine privaten Apps"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Geschäftliche <xliff:g id="APP">%s</xliff:g>-Instanz öffnen?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"In der privaten <xliff:g id="APP">%s</xliff:g>-Instanz öffnen?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"In der geschäftlichen <xliff:g id="APP">%s</xliff:g>-Instanz öffnen?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Über geschäftliche App anrufen?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Zu geschäftlicher App wechseln?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Deine Organisation lässt das Telefonieren nur über geschäftliche Apps zu"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Deine Organisation lässt das Senden von Nachrichten nur über geschäftliche Apps zu"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Privaten Browser verwenden"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Arbeitsbrowser verwenden"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Anrufen"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Wechseln"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Entsperr-PIN für netzgebundenes Gerät"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Entsperr-PIN für subnetzgebundenes Gerät"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Entsperr-PIN für unternehmensgebundenes Gerät"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Zugriff auf die Kamera des Smartphones über dein Gerät (<xliff:g id="DEVICE">%1$s</xliff:g>) nicht möglich"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Zugriff auf die Kamera des Tablets über dein Gerät (<xliff:g id="DEVICE">%1$s</xliff:g>) nicht möglich"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Während des Streamings ist kein Zugriff möglich. Versuch es stattdessen auf deinem Smartphone."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Funktion „Bild im Bild“ kann beim Streamen nicht verwendet werden"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Standardeinstellung des Systems"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KARTE <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Berechtigung für Companion-Smartwatch-Profil zum Verwalten von Smartwatches"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index afaa23a..d603a26 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Σύστημα Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Εναλλαγή σε προσωπικό προφίλ"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Εναλλαγή σε προφίλ εργασίας"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Μετάβαση στο προσωπικό προφίλ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Μετάβαση στο προφίλ εργασίας <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Επαφές"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"πρόσβαση στις επαφές σας"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Τοποθεσία"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Επιτρέπει στην εφαρμογή τον έλεγχο της δόνησης."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Επιτρέπει στην εφαρμογή να έχει πρόσβαση στην κατάσταση δόνησης."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"πραγματοποιεί απευθείας κλήση τηλεφωνικών αριθμών"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Επιτρέπει στην εφαρμογή την κλήση αριθμών τηλεφώνου χωρίς δική σας παρέμβαση. Αυτό μπορεί να προκαλέσει μη αναμενόμενες χρεώσεις ή κλήσεις. Έχετε υπόψη ότι δεν επιτρέπεται στην εφαρμογή η κλήση αριθμών έκτακτης ανάγκης. Οι κακόβουλες εφαρμογές ενδέχεται να σας κοστίσουν χρήματα, πραγματοποιώντας κλήσεις χωρίς την έγκρισή σας."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Επιτρέπει στην εφαρμογή να καλεί αριθμούς τηλεφώνου χωρίς τη δική σας παρέμβαση. Αυτό μπορεί να οδηγήσει σε απροσδόκητες χρεώσεις ή κλήσεις. Λάβετε υπόψη ότι αυτό δεν επιτρέπει την κλήση αριθμών έκτακτης ανάγκης. Οι κακόβουλες εφαρμογές ενδέχεται να σας επιφέρουν χρεώσεις πραγματοποιώντας κλήσεις χωρίς την επιβεβαίωσή σας ή καλώντας κωδικούς εταιρείας κινητής τηλεφωνίας που προκαλούν την αυτόματη προώθηση των εισερχόμενων κλήσεων σε άλλον αριθμό."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"έχει πρόσβαση στην υπηρεσία κλήσεων της IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Επιτρέπει στην εφαρμογή τη χρήση της υπηρεσίας IMS για την πραγματοποίηση κλήσεων χωρίς τη δική σας παρέμβαση."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"διαβάζει την κατάσταση και ταυτότητα τηλεφώνου"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Επιτρέπει στην εφαρμογή να λαμβάνει πληροφορίες προτιμώμενης υπηρεσίας πληρωμής NFC, όπως καταχωρημένα βοηθήματα και προορισμό διαδρομής."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"ελέγχει την Επικοινωνία κοντινού πεδίου (FNC)"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Επιτρέπει στην εφαρμογή την επικοινωνία με ετικέτες, κάρτες και αναγνώστες της Επικοινωνίας κοντινού πεδίου (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Συμβάν συναλλαγής ασφαλούς στοιχείου"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Επιτρέπει στην εφαρμογή να λαμβάνει πληροφορίες σχετικά με συναλλαγές που πραγματοποιούνται σε ένα ασφαλές στοιχείο."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"απενεργοποιεί το κλείδωμα οθόνης"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Επιτρέπει στην εφαρμογή την απενεργοποίηση του κλειδώματος πληκτρολογίου και άλλης σχετικής ασφάλειας με κωδικό πρόσβασης. Για παράδειγμα, το κλείδωμα πληκτρολογίου στο τηλέφωνο απενεργοποιείται όταν λαμβάνεται εισερχόμενη τηλεφωνική κλήση και ενεργοποιείται ξανά όταν η κλήση τερματιστεί."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"υποβολή αιτήματος για πολυπλοκότητα οθόνης κλειδώματος"</string>
@@ -614,17 +618,20 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Χρήση βιομετρικών ή κλειδώματος οθόνης"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Επαλήθευση ταυτότητας"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Χρησιμοποιήστε βιομετρικά για να συνεχίσετε"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Χρησιμοποιήστε το δακτυλικό σας αποτύπωμα για να συνεχίσετε"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Χρησιμοποιήστε το πρόσωπό σας για να συνεχίσετε"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Χρήση βιομετρικών στοιχείων ή κλειδώματος οθόνης για συνέχεια"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Δεν υπάρχει διαθέσιμος βιομετρικός εξοπλισμός"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Ο έλεγχος ταυτότητας ακυρώθηκε"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Δεν αναγνωρίστηκε"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Το πρόσωπο δεν αναγνωρίστηκε"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Ο έλεγχος ταυτότητας ακυρώθηκε"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Δεν έχει οριστεί PIN, μοτίβο ή κωδικός πρόσβασης"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Σφάλμα κατά τον έλεγχο ταυτότητας"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Χρήση κλειδώματος οθόνης"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Χρησιμοποιήστε το κλείδωμα οθόνης για να συνεχίσετε"</string>
     <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Πιέστε σταθερά τον αισθητήρα"</string>
-    <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Δεν είναι δυνατή η αναγνώριση του δακτυλικού αποτυπώματος. Δοκιμάστε ξανά."</string>
+    <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"To δακτ. αποτύπωμα δεν αναγνωρίστηκε. Δοκιμάστε ξανά."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Καθαρίστε τον αισθητήρα δακτυλικών αποτυπωμάτων και δοκιμάστε ξανά"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Καθαρίστε τον αισθητήρα και δοκιμάστε ξανά"</string>
     <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Πιέστε σταθερά τον αισθητήρα"</string>
@@ -633,7 +640,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Υπερβολικά έντονος φωτισμός"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Εντοπίστηκε πάτημα του κουμπιού λειτουργίας"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Δοκιμάστε να το προσαρμόσετε"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Αλλάζετε ελαφρώς τη θέση του δακτύλου σας κάθε φορά."</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Αλλάζετε ελαφρώς τη θέση του δακτύλου σας κάθε φορά"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Δεν είναι δυνατή η αναγνώριση του δακτυλικού αποτυπώματος"</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Ανιχνεύτηκε κάλυμμα προσώπου. Δεν φαίνεται όλο το πρόσωπο."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Αδύν. επαλήθ. προσώπου. Μη διαθέσιμος εξοπλισμός."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Η ενέργεια προσώπου ακυρώθηκε."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Το Ξεκλείδωμα με το πρόσωπο ακυρώθηκε από τον χρήστη"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Πάρα πολλές προσπάθειες. Δοκιμάστε ξανά αργότερα."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Πάρα πολλές προσπάθειες. Το Ξεκλείδωμα με το πρόσωπο δεν είναι διαθέσιμο"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Πάρα πολλές προσπάθειες. Χρησιμοποιήστε εναλλακτικά το κλείδωμα οθόνης."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Αδύνατη επαλήθευση του προσώπου. Επανάληψη."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Δεν έχετε ρυθμίσει το Ξεκλείδωμα με το πρόσωπο"</string>
@@ -1368,8 +1374,8 @@
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Φόρτιση συνδεδεμένης συσκευής. Πατήστε για περισσότερες επιλογές."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Εντοπίστηκε αναλογικό αξεσουάρ ήχου"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Η συνδεδεμένη συσκευή δεν είναι συμβατή με αυτό το τηλέφωνο. Πατήστε για να μάθετε περισσότερα."</string>
-    <string name="adb_active_notification_title" msgid="408390247354560331">"Συνδέθηκε ο εντοπισμός σφαλμάτων USB"</string>
-    <string name="adb_active_notification_message" msgid="5617264033476778211">"Πατήστε για απενεργοποίηση εντοπισμού/διόρθ. σφαλμάτων USB"</string>
+    <string name="adb_active_notification_title" msgid="408390247354560331">"Συνδέθηκε ο εντοπ. σφαλμ. USB"</string>
+    <string name="adb_active_notification_message" msgid="5617264033476778211">"Πατήστε για απενεργ. εντοπ./διόρθ. σφαλμ. USB"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Επιλογή για απενεργοποίηση του εντοπισμού σφαλμάτων USB."</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Συνδέθηκε ο ασύρματος εντοπισμός σφαλμάτων"</string>
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Πατήστε, για να απενεργοποιήσετε τον ασύρματο εντοπισμό σφαλμάτων"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ΑΠΟΡΡΙΨΗ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Επιλογή μεθόδου εισόδου"</string>
     <string name="show_ime" msgid="6406112007347443383">"Να παραμένει στην οθόνη όταν είναι ενεργό το κανονικό πληκτρολόγιο"</string>
-    <string name="hardware" msgid="1800597768237606953">"Εμφάνιση εικονικού πληκτρολ."</string>
+    <string name="hardware" msgid="3611039921284836033">"Χρήση πληκτρολογίου οθόνης"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Διαμόρφωση <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Διαμόρφωση φυσικών πληκτρολογίων"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Πατήστε για να επιλέξετε γλώσσα και διάταξη"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Κατάργηση"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Αυξάνετε την ένταση ήχου πάνω από το επίπεδο ασφαλείας;\n\nΑν ακούτε μουσική σε υψηλή ένταση για μεγάλο χρονικό διάστημα ενδέχεται να προκληθεί βλάβη στην ακοή σας."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Προειδοποίηση,\nΈχετε υπερβεί τον μέγιστο αριθμό ηχητικών σημάτων σε υψηλή ένταση που ένα άτομο μπορεί να ακούσει με ασφάλεια σε μία εβδομάδα με ακουστικά.\n\nΑν υπερβείτε αυτό το όριο, θα προκαλέσετε μόνιμη βλάβη στην ακοή σας."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Προειδοποίηση,\nΈχετε υπερβεί κατά 5 φορές τον μέγιστο αριθμό δυνατών ηχητικών σημάτων που ένα άτομο μπορεί να ακούσει με ασφάλεια σε μία εβδομάδα με ακουστικά.\n\nΗ ένταση χαμηλώθηκε για την προστασία της ακοής σας."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Η ένταση ήχου που επιλέγετε για την ακρόαση πολυμέσων μπορεί να προκαλέσει βλάβη στην ακοή σας όταν παρατείνεται για μεγάλα χρονικά διαστήματα.\n\nΑν συνεχίσετε την αναπαραγωγή σε αυτήν την ένταση, μπορεί να προκληθεί βλάβη στην ακοή σας."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Προειδοποίηση,\nΑκούτε περιεχόμενο σε υψηλή, μη ασφαλή ένταση.\n\nΑν συνεχίσετε με αυτήν την υψηλή ένταση, μπορεί να προκληθεί βλάβη στην ακοή σας."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Θέλετε να συνεχίσετε να ακούτε σε υψηλή ένταση ήχου;\n\nΗ ένταση ήχου των ακουστικών ήταν σε υψηλό επίπεδο για μεγαλύτερο διάστημα από αυτό που συνιστάται, κάτι που μπορεί να προκαλέσει ζημιά στην ακοή σας"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Ανιχνεύτηκε δυνατός ήχος\n\nΗ ένταση ήχου των ακουστικών ήταν σε υψηλό επίπεδο για μεγαλύτερο διάστημα από αυτό που συνιστάται, κάτι που μπορεί να προκαλέσει ζημιά στην ακοή σας"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Να χρησιμοποιείται η συντόμευση προσβασιμότητας;"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Όταν η συντόμευση είναι ενεργοποιημένη, το πάτημα και των δύο κουμπιών έντασης ήχου για 3 δευτερόλεπτα θα ξεκινήσει μια λειτουργία προσβασιμότητας."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Ενεργοποίηση συντόμευσης για λειτουργίες προσβασιμότητας;"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Για έξοδο, σύρετε προς τα κάτω από το επάνω μέρος."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Το κατάλαβα"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Περιστρέψτε την οθόνη για καλύτερη προβολή"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Εξέλθετε από τον διαχωρισμό οθόνης για καλύτερη προβολή"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Ανοίξτε την εφαρμογή <xliff:g id="NAME">%s</xliff:g> σε πλήρη οθόνη για καλύτερη προβολή"</string>
     <string name="done_label" msgid="7283767013231718521">"Τέλος"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Κυκλικό ρυθμιστικό ωρών"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Κυκλικό ρυθμιστικό λεπτών"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Η εφαρμογή δεν είναι διαθέσιμη"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> δεν είναι διαθέσιμη αυτήν τη στιγμή."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> δεν διατίθεται"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Απαιτείται άδεια"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Το αίτημα άδειας ανεστάλη"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Αυτή η εφαρμογή ζητά πρόσθετες άδειες, αλλά οι άδειες δεν μπορούν να παραχωρηθούν σε μια περίοδο σύνδεσης ροής. Εκχωρήστε πρώτα την άδεια στη συσκευή Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Αυτή η εφαρμογή ζητά πρόσθετες άδειες, αλλά οι άδειες δεν μπορούν να παραχωρηθούν σε μια περίοδο σύνδεσης ροής. Εκχωρήστε πρώτα την άδεια στο tablet σας."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Αυτή η εφαρμογή ζητά πρόσθετες άδειες, αλλά οι άδειες δεν μπορούν να παραχωρηθούν σε μια περίοδο σύνδεσης ροής. Εκχωρήστε πρώτα την άδεια στο τηλέφωνό σας."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"Αυτή η εφαρμογή σχεδιάστηκε για μια παλαιότερη έκδοση του Android. Ενδέχεται να μην λειτουργεί σωστά και δεν περιλαμβάνει τις πιο πρόσφατες λειτουργίες ασφάλειας και προστασίας απορρήτου. Ελέγξτε αν υπάρχει διαθέσιμη μια ενημέρωση ή επικοινωνήστε με τον προγραμματιστή της εφαρμογής."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Έλεγχος για ενημέρωση"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Αυτή η εφαρμογή δεν είναι συμβατή με την πιο πρόσφατη έκδοση Android. Ελέγξτε αν υπάρχει διαθέσιμη μια ενημέρωση ή επικοινωνήστε με τον προγραμματιστή της εφαρμογής."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Έχετε νέα μηνύματα"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Άνοιγμα της εφαρμογής SMS για προβολή"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Ορισμ. λειτ. ίσως είναι περιορισμ."</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Δεν είναι δυνατό το άνοιγμα αυτού του περιεχομένου με εφαρμογές εργασιών"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Δεν είναι δυνατή η κοινοποίηση αυτού του περιεχομένου με προσωπικές εφαρμογές"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Δεν είναι δυνατό το άνοιγμα αυτού του περιεχομένου με προσωπικές εφαρμογές"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Το προφίλ εργασίας σας έχει τεθεί σε παύση."</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Πατήστε για ενεργοποίηση"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Οι εφαρμογές εργασιών τέθηκαν σε παύση"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Αναίρεση παύσης"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Δεν υπάρχουν εφαρμογές εργασιών"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Δεν υπάρχουν προσωπικές εφαρμογές"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Άνοιγμα <xliff:g id="APP">%s</xliff:g> εργασίας;"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Άνοιγμα στο προσωπικό <xliff:g id="APP">%s</xliff:g>;"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Άνοιγμα στο <xliff:g id="APP">%s</xliff:g> εργασίας;"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Κλήση από εφαρμογή εργασιών;"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Εναλλαγή σε εφαρμογή εργασιών;"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Ο οργανισμός σας επιτρέπει την πραγματοποίηση κλήσεων μόνο από εφαρμογές εργασιών"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Ο οργανισμός σας επιτρέπει την αποστολή μηνυμάτων μόνο από εφαρμογές εργασιών"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Χρήση προσωπικού προγράμματος περιήγησης"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Χρήση προγράμματος περιήγησης εργασίας"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Κλήση"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Εναλλαγή"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN ξεκλειδώματος δικτύου κάρτας SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN ξεκλειδώματος υποσυνόλου δικτύου κάρτας SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN ξεκλειδώματος εταιρικής SIM"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Δεν είναι δυνατή η πρόσβαση στην κάμερα τηλεφώνου από το <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Δεν είναι δυνατή η πρόσβαση στην κάμερα του tablet από τη συσκευή <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Δεν είναι δυνατή η πρόσβαση σε αυτό το στοιχείο κατά τη ροή. Δοκιμάστε στο τηλέφωνό σας."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Δεν είναι δυνατή η προβολή picture-in-picture κατά τη ροή"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Προεπιλογή συστήματος"</string>
     <string name="default_card_name" msgid="9198284935962911468">"ΚΑΡΤΑ <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Άδεια προφίλ συνοδευτικής εφαρμογής ρολογιού για τη διαχείριση ρολογιών"</string>
@@ -2319,7 +2333,7 @@
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Το μικρόφωνο έχει αποκλειστεί"</string>
     <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Διπλή οθόνη"</string>
     <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Η λειτουργία διπλής οθόνης είναι ενεργή"</string>
-    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> χρησιμοποιεί και τις δύο οθόνες για να εμφανίζει περιεχόμενο"</string>
+    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"Η εφαρμ. <xliff:g id="APP_NAME">%1$s</xliff:g> χρησιμοποιεί και τις 2 οθόνες για εμφάνιση περιεχ."</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Η θερμοκρασία της συσκευής είναι πολύ υψηλή"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Η λειτουργία διπλής οθόνης δεν είναι διαθέσιμη επειδή η θερμοκρασία του τηλεφώνου αυξάνεται υπερβολικά"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Το Dual Screen δεν είναι διαθέσιμο"</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 3599d99..c92f460 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android System"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Switch to personal profile"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Switch to work profile"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Switch to personal <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Switch to work <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"access your contacts"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Location"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Allows the app to control the vibrator."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Allows the app to access the vibrator state."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"directly call phone numbers"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation, or dial carrier codes which cause incoming calls to be automatically forwarded to another number."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"access IMS call service"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Allows the app to use the IMS service to make calls without your intervention."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"read phone status and identity"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Allows the app to get preferred NFC payment service information, such as registered aids and route destination."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"control Near-Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Allows the app to communicate with Near Field Communication (NFC) tags, cards and readers."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Secure Element transaction event"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Allows the app to receive information about transactions happening on a Secure Element."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"disable your screen lock"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Allows the app to disable the keylock and any associated password security. For example, the phone disables the keylock when receiving an incoming phone call, then re-enables the keylock when the call is finished."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"request screen lock complexity"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Use biometrics or screen lock"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Verify that it’s you"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Use your biometric to continue"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Use your fingerprint to continue"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Use your face to continue"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Use your biometric or screen lock to continue"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometric hardware unavailable"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Authentication cancelled"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Not recognised"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Face not recognised"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Authentication cancelled"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No pin, pattern or password set"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Error while authenticating"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Face operation cancelled."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Face Unlock cancelled by user"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Too many attempts. Try again later."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Too many attempts. Face Unlock unavailable."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Too many attempts. Enter screen lock instead."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Can’t verify face. Try again."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"You haven’t set up Face Unlock"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"DECLINE"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Choose input method"</string>
     <string name="show_ime" msgid="6406112007347443383">"Keep it on screen while physical keyboard is active"</string>
-    <string name="hardware" msgid="1800597768237606953">"Show virtual keyboard"</string>
+    <string name="hardware" msgid="3611039921284836033">"Use on-screen keyboard"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configure <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configure physical keyboards"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Tap to select language and layout"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Remove"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Raise volume above recommended level?\n\nListening at high volume for long periods may damage your hearing."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Warning,\nYou have exceeded the amount of loud sound signals one can safely listen to in a week over headphones.\n\nGoing over this limit will permanently damage your hearing."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Warning,\nYou have exceeded five times the amount of loud sound signals one can safely listen to in a week over headphones.\n\nVolume has been lowered to protect your hearing."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"The level at which you are listening to media can result in hearing damage when sustained over long periods of time.\n\nContinuing to play at this level for long periods of time could damage your hearing."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Warning,\nYou are currently listening to loud content played at an unsafe level.\n\nContinuing to listen this loud will permanently damage your hearing."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Keep listening at a high volume?\n\nHeadphone volume has been high for longer than recommended, which can damage your hearing"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Loud sound detected\n\nHeadphone volume has been higher than recommended, which can damage your hearing"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Use Accessibility Shortcut?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"When the shortcut is on, pressing both volume buttons for three seconds will start an accessibility feature."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Turn on shortcut for accessibility features?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"To exit, swipe down from the top."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Got it"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Rotate for a better view"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Exit split screen for a better view"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Open <xliff:g id="NAME">%s</xliff:g> in full screen for a better view"</string>
     <string name="done_label" msgid="7283767013231718521">"Done"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Hours circular slider"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Minutes circular slider"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"App is not available"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not available right now."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> unavailable"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Permission needed"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Permission request suppressed"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"This app is requesting additional permissions, but permissions can\'t be granted in a streaming session. Grant the permission on your Android TV device first."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"This app is requesting additional permissions, but permissions can\'t be granted in a streaming session. Grant the permission on your tablet first."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"This app is requesting additional permissions, but permissions can\'t be granted in a streaming session. Grant the permission on your phone first."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"This app was built for an older version of Android. It might not work properly and doesn\'t include the latest security and privacy protections. Check for an update or contact the app\'s developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Check for update"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"This app isn\'t compatible with the latest version of Android. Check for an update or contact the app\'s developer."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"You have new messages"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Open SMS app to view"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Some functionality may be limited"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"This content can’t be opened with work apps"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"This content can’t be shared with personal apps"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"This content can’t be opened with personal apps"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Work profile is paused"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Tap to turn on"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Work apps are paused"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Unpause"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"No work apps"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"No personal apps"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Open work <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Open in personal <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Open in work <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Call from work app?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Switch to work app?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Your organisation only allows you to make calls from work apps"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Your organisation only allows you to send messages from work apps"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Use personal browser"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Use work browser"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Call"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Switch"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM network unlock PIN"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM network subset unlock PIN"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM corporate unlock PIN"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Can’t access the phone’s camera from your <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Can’t access the tablet’s camera from your <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"This can’t be accessed while streaming. Try on your phone instead."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Can’t view picture-in-picture while streaming"</string>
     <string name="system_locale_title" msgid="711882686834677268">"System default"</string>
     <string name="default_card_name" msgid="9198284935962911468">"CARD <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Companion watch profile permission to manage watches"</string>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index 8d637c9..bf94625 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android System"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Switch to personal profile"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Switch to work profile"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Switch to personal <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Switch to work <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"access your contacts"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Location"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Allows the app to control the vibrator."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Allows the app to access the vibrator state."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"directly call phone numbers"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation, or dial carrier codes which cause incoming calls to be automatically forwarded to another number."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"access IMS call service"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Allows the app to use the IMS service to make calls without your intervention."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"read phone status and identity"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Allows the app to get preferred nfc payment service information like registered aids and route destination."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"control Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Allows the app to communicate with Near Field Communication (NFC) tags, cards, and readers."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Secure Element transaction event"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Allows the app to receive information about transactions happening on a Secure Element."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"disable your screen lock"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Allows the app to disable the keylock and any associated password security. For example, the phone disables the keylock when receiving an incoming phone call, then re-enables the keylock when the call is finished."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"request screen lock complexity"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Use biometrics or screen lock"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Verify it’s you"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Use your biometric to continue"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Use your fingerprint to continue"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Use your face to continue"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Use your biometric or screen lock to continue"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometric hardware unavailable"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Authentication canceled"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Not recognized"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Face not recognized"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Authentication canceled"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No pin, pattern, or password set"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Error authenticating"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Face operation canceled."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Face Unlock canceled by user"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Too many attempts. Try again later."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Too many attempts. Face Unlock unavailable."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Too many attempts. Enter screen lock instead."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Can’t verify face. Try again."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"You haven’t set up Face Unlock"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"DECLINE"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Choose input method"</string>
     <string name="show_ime" msgid="6406112007347443383">"Keep it on screen while physical keyboard is active"</string>
-    <string name="hardware" msgid="1800597768237606953">"Show virtual keyboard"</string>
+    <string name="hardware" msgid="3611039921284836033">"Use on-screen keyboard"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configure <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configure physical keyboards"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Tap to select language and layout"</string>
@@ -1538,7 +1544,7 @@
     <string name="add_account_button_label" msgid="322390749416414097">"Add account"</string>
     <string name="number_picker_increment_button" msgid="7621013714795186298">"Increase"</string>
     <string name="number_picker_decrement_button" msgid="5116948444762708204">"Decrease"</string>
-    <string name="number_picker_increment_scroll_mode" msgid="8403893549806805985">"<xliff:g id="VALUE">%s</xliff:g> touch &amp; hold."</string>
+    <string name="number_picker_increment_scroll_mode" msgid="8403893549806805985">"<xliff:g id="VALUE">%s</xliff:g> touch and hold."</string>
     <string name="number_picker_increment_scroll_action" msgid="8310191318914268271">"Slide up to increase and down to decrease."</string>
     <string name="time_picker_increment_minute_button" msgid="7195870222945784300">"Increase minute"</string>
     <string name="time_picker_decrement_minute_button" msgid="230925389943411490">"Decrease minute"</string>
@@ -1565,7 +1571,7 @@
     <string name="activitychooserview_choose_application_error" msgid="6937782107559241734">"Couldn\'t launch <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="2753089758467748982">"Share with"</string>
     <string name="shareactionprovider_share_with_application" msgid="4902832247173666973">"Share with <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
-    <string name="content_description_sliding_handle" msgid="982510275422590757">"Sliding handle. Touch &amp; hold."</string>
+    <string name="content_description_sliding_handle" msgid="982510275422590757">"Sliding handle. Touch and hold."</string>
     <string name="description_target_unlock_tablet" msgid="7431571180065859551">"Swipe to unlock."</string>
     <string name="action_bar_home_description" msgid="1501655419158631974">"Navigate home"</string>
     <string name="action_bar_up_description" msgid="6611579697195026932">"Navigate up"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Remove"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Raise volume above recommended level?\n\nListening at high volume for long periods may damage your hearing."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Warning,\nYou have exceeded the amount of loud sound signals one can safely listen to in a week over headphones.\n\nGoing over this limit will permanently damage your hearing."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Warning,\nYou have exceeded 5 times the amount of loud sound signals one can safely listen to in a week over headphones.\n\nVolume has been lowered to protect your hearing."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"The level at which you are listening to media can result in hearing damage when sustained over long periods of time.\n\nContinuing to play at this level for long periods of time could damage your hearing."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Warning,\nYou are currently listening to loud content played at an unsafe level.\n\nContinuing to listen this loud will permanently damage your hearing."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Keep listening at a high volume?\n\nHeadphone volume has been high for longer than recommended, which can damage your hearing"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Loud sound detected\n\nHeadphone volume has been higher than recommended, which can damage your hearing"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Use Accessibility Shortcut?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"When the shortcut is on, pressing both volume buttons for 3 seconds will start an accessibility feature."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Turn on shortcut for accessibility features?"</string>
@@ -1723,7 +1727,7 @@
     <string name="accessibility_button_prompt_text" msgid="8343213623338605305">"Choose a feature to use when you tap the accessibility button:"</string>
     <string name="accessibility_gesture_prompt_text" msgid="8742535972130563952">"Choose a feature to use with the accessibility gesture (swipe up from the bottom of the screen with two fingers):"</string>
     <string name="accessibility_gesture_3finger_prompt_text" msgid="5211827854510660203">"Choose a feature to use with the accessibility gesture (swipe up from the bottom of the screen with three fingers):"</string>
-    <string name="accessibility_button_instructional_text" msgid="8853928358872550500">"To switch between features, touch &amp; hold the accessibility button."</string>
+    <string name="accessibility_button_instructional_text" msgid="8853928358872550500">"To switch between features, touch and hold the accessibility button."</string>
     <string name="accessibility_gesture_instructional_text" msgid="9196230728837090497">"To switch between features, swipe up with two fingers and hold."</string>
     <string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"To switch between features, swipe up with three fingers and hold."</string>
     <string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Magnification"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"To exit, swipe down from the top."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Got it"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Rotate for a better view"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Exit split screen for a better view"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Open <xliff:g id="NAME">%s</xliff:g> in full screen for a better view"</string>
     <string name="done_label" msgid="7283767013231718521">"Done"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Hours circular slider"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Minutes circular slider"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"App is not available"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not available right now."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> unavailable"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Permission needed"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Permission request suppressed"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"This app is requesting additional permissions, but permissions can’t be granted in a streaming session. Grant the permission on your Android TV device first."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"This app is requesting additional permissions, but permissions can’t be granted in a streaming session. Grant the permission on your tablet first."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"This app is requesting additional permissions, but permissions can’t be granted in a streaming session. Grant the permission on your phone first."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"This app was built for an older version of Android. It might not work properly and doesn\'t include the latest security and privacy protections. Check for an update, or contact the app\'s developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Check for update"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"This app isn\'t compatible with the latest version of Android. Check for an update or contact the app\'s developer."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"You have new messages"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Open SMS app to view"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Some functionality may be limited"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"This content can’t be opened with work apps"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"This content can’t be shared with personal apps"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"This content can’t be opened with personal apps"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Work profile is paused"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Tap to turn on"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Work apps are paused"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Unpause"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"No work apps"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"No personal apps"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Open work <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Open in personal <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Open in work <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Call from work app?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Switch to work app?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Your organization only allows you to make calls from work apps"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Your organization only allows you to send messages from work apps"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Use personal browser"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Use work browser"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Call"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Switch"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM network unlock PIN"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM network subset unlock PIN"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM corporate unlock PIN"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Can’t access the phone’s camera from your <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Can’t access the tablet’s camera from your <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"This can’t be accessed while streaming. Try on your phone instead."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Can’t view picture-in-picture while streaming"</string>
     <string name="system_locale_title" msgid="711882686834677268">"System default"</string>
     <string name="default_card_name" msgid="9198284935962911468">"CARD <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Companion Watch profile permission to manage watches"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 245fea4..48a10df 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android System"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Switch to personal profile"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Switch to work profile"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Switch to personal <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Switch to work <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"access your contacts"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Location"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Allows the app to control the vibrator."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Allows the app to access the vibrator state."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"directly call phone numbers"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation, or dial carrier codes which cause incoming calls to be automatically forwarded to another number."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"access IMS call service"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Allows the app to use the IMS service to make calls without your intervention."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"read phone status and identity"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Allows the app to get preferred NFC payment service information, such as registered aids and route destination."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"control Near-Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Allows the app to communicate with Near Field Communication (NFC) tags, cards and readers."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Secure Element transaction event"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Allows the app to receive information about transactions happening on a Secure Element."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"disable your screen lock"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Allows the app to disable the keylock and any associated password security. For example, the phone disables the keylock when receiving an incoming phone call, then re-enables the keylock when the call is finished."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"request screen lock complexity"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Use biometrics or screen lock"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Verify that it’s you"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Use your biometric to continue"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Use your fingerprint to continue"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Use your face to continue"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Use your biometric or screen lock to continue"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometric hardware unavailable"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Authentication cancelled"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Not recognised"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Face not recognised"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Authentication cancelled"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No pin, pattern or password set"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Error while authenticating"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Face operation cancelled."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Face Unlock cancelled by user"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Too many attempts. Try again later."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Too many attempts. Face Unlock unavailable."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Too many attempts. Enter screen lock instead."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Can’t verify face. Try again."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"You haven’t set up Face Unlock"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"DECLINE"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Choose input method"</string>
     <string name="show_ime" msgid="6406112007347443383">"Keep it on screen while physical keyboard is active"</string>
-    <string name="hardware" msgid="1800597768237606953">"Show virtual keyboard"</string>
+    <string name="hardware" msgid="3611039921284836033">"Use on-screen keyboard"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configure <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configure physical keyboards"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Tap to select language and layout"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Remove"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Raise volume above recommended level?\n\nListening at high volume for long periods may damage your hearing."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Warning,\nYou have exceeded the amount of loud sound signals one can safely listen to in a week over headphones.\n\nGoing over this limit will permanently damage your hearing."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Warning,\nYou have exceeded five times the amount of loud sound signals one can safely listen to in a week over headphones.\n\nVolume has been lowered to protect your hearing."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"The level at which you are listening to media can result in hearing damage when sustained over long periods of time.\n\nContinuing to play at this level for long periods of time could damage your hearing."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Warning,\nYou are currently listening to loud content played at an unsafe level.\n\nContinuing to listen this loud will permanently damage your hearing."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Keep listening at a high volume?\n\nHeadphone volume has been high for longer than recommended, which can damage your hearing"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Loud sound detected\n\nHeadphone volume has been higher than recommended, which can damage your hearing"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Use Accessibility Shortcut?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"When the shortcut is on, pressing both volume buttons for three seconds will start an accessibility feature."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Turn on shortcut for accessibility features?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"To exit, swipe down from the top."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Got it"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Rotate for a better view"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Exit split screen for a better view"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Open <xliff:g id="NAME">%s</xliff:g> in full screen for a better view"</string>
     <string name="done_label" msgid="7283767013231718521">"Done"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Hours circular slider"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Minutes circular slider"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"App is not available"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not available right now."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> unavailable"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Permission needed"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Permission request suppressed"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"This app is requesting additional permissions, but permissions can\'t be granted in a streaming session. Grant the permission on your Android TV device first."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"This app is requesting additional permissions, but permissions can\'t be granted in a streaming session. Grant the permission on your tablet first."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"This app is requesting additional permissions, but permissions can\'t be granted in a streaming session. Grant the permission on your phone first."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"This app was built for an older version of Android. It might not work properly and doesn\'t include the latest security and privacy protections. Check for an update or contact the app\'s developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Check for update"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"This app isn\'t compatible with the latest version of Android. Check for an update or contact the app\'s developer."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"You have new messages"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Open SMS app to view"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Some functionality may be limited"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"This content can’t be opened with work apps"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"This content can’t be shared with personal apps"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"This content can’t be opened with personal apps"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Work profile is paused"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Tap to turn on"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Work apps are paused"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Unpause"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"No work apps"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"No personal apps"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Open work <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Open in personal <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Open in work <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Call from work app?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Switch to work app?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Your organisation only allows you to make calls from work apps"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Your organisation only allows you to send messages from work apps"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Use personal browser"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Use work browser"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Call"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Switch"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM network unlock PIN"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM network subset unlock PIN"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM corporate unlock PIN"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Can’t access the phone’s camera from your <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Can’t access the tablet’s camera from your <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"This can’t be accessed while streaming. Try on your phone instead."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Can’t view picture-in-picture while streaming"</string>
     <string name="system_locale_title" msgid="711882686834677268">"System default"</string>
     <string name="default_card_name" msgid="9198284935962911468">"CARD <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Companion watch profile permission to manage watches"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 2f74c71..a3f2d7d 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android System"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Switch to personal profile"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Switch to work profile"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Switch to personal <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Switch to work <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"access your contacts"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Location"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Allows the app to control the vibrator."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Allows the app to access the vibrator state."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"directly call phone numbers"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation, or dial carrier codes which cause incoming calls to be automatically forwarded to another number."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"access IMS call service"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Allows the app to use the IMS service to make calls without your intervention."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"read phone status and identity"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Allows the app to get preferred NFC payment service information, such as registered aids and route destination."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"control Near-Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Allows the app to communicate with Near Field Communication (NFC) tags, cards and readers."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Secure Element transaction event"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Allows the app to receive information about transactions happening on a Secure Element."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"disable your screen lock"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Allows the app to disable the keylock and any associated password security. For example, the phone disables the keylock when receiving an incoming phone call, then re-enables the keylock when the call is finished."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"request screen lock complexity"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Use biometrics or screen lock"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Verify that it’s you"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Use your biometric to continue"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Use your fingerprint to continue"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Use your face to continue"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Use your biometric or screen lock to continue"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometric hardware unavailable"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Authentication cancelled"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Not recognised"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Face not recognised"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Authentication cancelled"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No pin, pattern or password set"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Error while authenticating"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Face operation cancelled."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Face Unlock cancelled by user"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Too many attempts. Try again later."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Too many attempts. Face Unlock unavailable."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Too many attempts. Enter screen lock instead."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Can’t verify face. Try again."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"You haven’t set up Face Unlock"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"DECLINE"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Choose input method"</string>
     <string name="show_ime" msgid="6406112007347443383">"Keep it on screen while physical keyboard is active"</string>
-    <string name="hardware" msgid="1800597768237606953">"Show virtual keyboard"</string>
+    <string name="hardware" msgid="3611039921284836033">"Use on-screen keyboard"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configure <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configure physical keyboards"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Tap to select language and layout"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Remove"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Raise volume above recommended level?\n\nListening at high volume for long periods may damage your hearing."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Warning,\nYou have exceeded the amount of loud sound signals one can safely listen to in a week over headphones.\n\nGoing over this limit will permanently damage your hearing."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Warning,\nYou have exceeded five times the amount of loud sound signals one can safely listen to in a week over headphones.\n\nVolume has been lowered to protect your hearing."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"The level at which you are listening to media can result in hearing damage when sustained over long periods of time.\n\nContinuing to play at this level for long periods of time could damage your hearing."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Warning,\nYou are currently listening to loud content played at an unsafe level.\n\nContinuing to listen this loud will permanently damage your hearing."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Keep listening at a high volume?\n\nHeadphone volume has been high for longer than recommended, which can damage your hearing"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Loud sound detected\n\nHeadphone volume has been higher than recommended, which can damage your hearing"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Use Accessibility Shortcut?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"When the shortcut is on, pressing both volume buttons for three seconds will start an accessibility feature."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Turn on shortcut for accessibility features?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"To exit, swipe down from the top."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Got it"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Rotate for a better view"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Exit split screen for a better view"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Open <xliff:g id="NAME">%s</xliff:g> in full screen for a better view"</string>
     <string name="done_label" msgid="7283767013231718521">"Done"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Hours circular slider"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Minutes circular slider"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"App is not available"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is not available right now."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> unavailable"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Permission needed"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Permission request suppressed"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"This app is requesting additional permissions, but permissions can\'t be granted in a streaming session. Grant the permission on your Android TV device first."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"This app is requesting additional permissions, but permissions can\'t be granted in a streaming session. Grant the permission on your tablet first."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"This app is requesting additional permissions, but permissions can\'t be granted in a streaming session. Grant the permission on your phone first."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"This app was built for an older version of Android. It might not work properly and doesn\'t include the latest security and privacy protections. Check for an update or contact the app\'s developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Check for update"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"This app isn\'t compatible with the latest version of Android. Check for an update or contact the app\'s developer."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"You have new messages"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Open SMS app to view"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Some functionality may be limited"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"This content can’t be opened with work apps"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"This content can’t be shared with personal apps"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"This content can’t be opened with personal apps"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Work profile is paused"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Tap to turn on"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Work apps are paused"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Unpause"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"No work apps"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"No personal apps"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Open work <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Open in personal <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Open in work <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Call from work app?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Switch to work app?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Your organisation only allows you to make calls from work apps"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Your organisation only allows you to send messages from work apps"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Use personal browser"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Use work browser"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Call"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Switch"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM network unlock PIN"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM network subset unlock PIN"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM corporate unlock PIN"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Can’t access the phone’s camera from your <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Can’t access the tablet’s camera from your <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"This can’t be accessed while streaming. Try on your phone instead."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Can’t view picture-in-picture while streaming"</string>
     <string name="system_locale_title" msgid="711882686834677268">"System default"</string>
     <string name="default_card_name" msgid="9198284935962911468">"CARD <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Companion watch profile permission to manage watches"</string>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
index 1fc163ca..17e3fcb 100644
--- a/core/res/res/values-en-rXC/strings.xml
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎‏‎‎Android System‎‏‎‎‏‎"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎Switch to personal profile‎‏‎‎‏‎"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‎‎Switch to work profile‎‏‎‎‏‎"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‏‎‎Switch to personal ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‏‎Switch to work ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‎‏‏‏‎‎‎‎Contacts‎‏‎‎‏‎"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎access your contacts‎‏‎‎‏‎"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎Location‎‏‎‎‏‎"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‎‎‎‏‎‏‏‎‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‎‏‎Allows the app to control the vibrator.‎‏‎‎‏‎"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎Allows the app to access the vibrator state.‎‏‎‎‏‎"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎directly call phone numbers‎‏‎‎‏‎"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‎‏‎Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation.‎‏‎‎‏‎"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎‎Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn\'t allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation, or dial carrier codes which cause incoming calls to be automatically forwarded to another number.‎‏‎‎‏‎"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‏‏‎‎access IMS call service‎‏‎‎‏‎"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‎‏‎‏‎‎‏‏‏‏‎‏‎‎Allows the app to use the IMS service to make calls without your intervention.‎‏‎‎‏‎"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎read phone status and identity‎‏‎‎‏‎"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‎Allows the app to get preferred nfc payment service information like registered aids and route destination.‎‏‎‎‏‎"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‎‏‎control Near Field Communication‎‏‎‎‏‎"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‏‎Allows the app to communicate with Near Field Communication (NFC) tags, cards, and readers.‎‏‎‎‏‎"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‏‏‎Secure Element transaction event‎‏‎‎‏‎"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‎‏‎Allows the app to receive information about transactions happening on a Secure Element.‎‏‎‎‏‎"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‎‏‏‏‏‎‎‎‎‎‎‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎disable your screen lock‎‏‎‎‏‎"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎Allows the app to disable the keylock and any associated password security. For example, the phone disables the keylock when receiving an incoming phone call, then re-enables the keylock when the call is finished.‎‏‎‎‏‎"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎request screen lock complexity‎‏‎‎‏‎"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎‎Use biometrics or screen lock‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎Verify it’s you‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‎‎‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‎‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎Use your biometric to continue‎‏‎‎‏‎"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎‏‏‏‎‎Use your fingerprint to continue‎‏‎‎‏‎"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‎‎‎Use your face to continue‎‏‎‎‏‎"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‏‎Use your biometric or screen lock to continue‎‏‎‎‏‎"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‏‏‎‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‎‎‎Biometric hardware unavailable‎‏‎‎‏‎"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‎‎‎‎‏‏‎‎‏‎‎‏‎‎‎‏‎‎Authentication canceled‎‏‎‎‏‎"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‏‎‎‎‎‎Not recognized‎‏‎‎‏‎"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‎‎‎‎‎Face not recognized‎‏‎‎‏‎"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‎‏‎‏‎‎‎‎‏‎‎Authentication canceled‎‏‎‎‏‎"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‎‎No pin, pattern, or password set‎‏‎‎‏‎"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‏‎Error authenticating‎‏‎‎‏‎"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎Face operation canceled.‎‏‎‎‏‎"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‎Face Unlock canceled by user‎‏‎‎‏‎"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎Too many attempts. Try again later.‎‏‎‎‏‎"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎‎‏‏‏‎‎Too many attempts. Face Unlock unavailable.‎‏‎‎‏‎"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎Too many attempts. Enter screen lock instead.‎‏‎‎‏‎"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‎‏‏‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‎Can’t verify face. Try again.‎‏‎‎‏‎"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‏‏‏‎‎‎You haven’t set up Face Unlock‎‏‎‎‏‎"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‎‏‎‎‎‎‎‏‏‎‎‏‏‎‏‎‎DECLINE‎‏‎‎‏‎"</string>
     <string name="select_input_method" msgid="3971267998568587025">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‎‏‏‎‏‎‎‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎Choose input method‎‏‎‎‏‎"</string>
     <string name="show_ime" msgid="6406112007347443383">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‏‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‎‏‏‏‎Keep it on screen while physical keyboard is active‎‏‎‎‏‎"</string>
-    <string name="hardware" msgid="1800597768237606953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‏‎‎‎‎‏‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎Show virtual keyboard‎‏‎‎‏‎"</string>
+    <string name="hardware" msgid="3611039921284836033">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎‏‎Use on-screen keyboard‎‏‎‎‏‎"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‏‎Configure ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‎‏‎‎‎‏‎‎‏‎‎Configure physical keyboards‎‏‎‎‏‎"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎Tap to select language and layout‎‏‎‎‏‎"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‎‏‎‎ — ‎‏‎‎‏‎ "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎Remove‎‏‎‎‏‎"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‏‎‎Raise volume above recommended level?‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Listening at high volume for long periods may damage your hearing.‎‏‎‎‏‎"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‎‎‎‎‏‎‎‎‏‎‎‎Warning,‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎You have exceeded the amount of loud sound signals one can safely listen to in a week over headphones.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Going over this limit will permanently damage your hearing.‎‏‎‎‏‎"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎Warning,‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎You have exceeded 5 times the amount of loud sound signals one can safely listen to in a week over headphones.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Volume has been lowered to protect your hearing.‎‏‎‎‏‎"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‏‎‎‏‏‏‎The level at which you are listening to media can result in hearing damage when sustained over long periods of time.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Continuing to play at this level for long periods of time could damage your hearing.‎‏‎‎‏‎"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‎‎Warning,‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎You are currently listening to loud content played at an unsafe level.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Continuing to listen this loud will permanently damage your hearing.‎‏‎‎‏‎"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎Keep listening at a high volume?‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Headphone volume has been high for longer than recommended, which can damage your hearing‎‏‎‎‏‎"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‎Loud sound detected‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Headphone volume has been higher than recommended, which can damage your hearing‎‏‎‎‏‎"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎Use Accessibility Shortcut?‎‏‎‎‏‎"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‎‎When the shortcut is on, pressing both volume buttons for 3 seconds will start an accessibility feature.‎‏‎‎‏‎"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎Turn on shortcut for accessibility features?‎‏‎‎‏‎"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‎‏‏‏‎‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎‎‎‎‎‎To exit, swipe down from the top.‎‏‎‎‏‎"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎Got it‎‏‎‎‏‎"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‎Rotate for a better view‎‏‎‎‏‎"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‎Exit split screen for a better view‎‏‎‎‏‎"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‎‎‏‏‎‏‏‏‎Open ‎‏‎‎‏‏‎<xliff:g id="NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ in full screen for a better view‎‏‎‎‏‎"</string>
     <string name="done_label" msgid="7283767013231718521">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎‎‎‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎Done‎‏‎‎‏‎"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‎‏‎‏‎‎‏‎‎‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎Hours circular slider‎‏‎‎‏‎"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎Minutes circular slider‎‏‎‎‏‎"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‎App is not available‎‏‎‎‏‎"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is not available right now.‎‏‎‎‏‎"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="ACTIVITY">%1$s</xliff:g>‎‏‎‎‏‏‏‎ unavailable‎‏‎‎‏‎"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎Permission needed‎‏‎‎‏‎"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‎Permission request suppressed‎‏‎‎‏‎"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‎‎‏‏‎‏‎This app is requesting additional permissions, but permissions can’t be granted in a streaming session. Grant the permission on your Android TV device first.‎‏‎‎‏‎"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‎‏‎This app is requesting additional permissions, but permissions can’t be granted in a streaming session. Grant the permission on your tablet first.‎‏‎‎‏‎"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎This app is requesting additional permissions, but permissions can’t be granted in a streaming session. Grant the permission on your phone first.‎‏‎‎‏‎"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‎‎‎‏‎‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎This app was built for an older version of Android. It might not work properly and doesn\'t include the latest security and privacy protections. Check for an update, or contact the app\'s developer.‎‏‎‎‏‎"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‏‏‏‎‏‎‎‏‏‎‏‎Check for update‎‏‎‎‏‎"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‎This app isn\'t compatible with the latest version of Android. Check for an update or contact the app\'s developer.‎‏‎‎‏‎"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎You have new messages‎‏‎‎‏‎"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‎‏‏‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎Open SMS app to view‎‏‎‎‏‎"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‎Some functionality may be limited‎‏‎‎‏‎"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎This content can’t be opened with work apps‎‏‎‎‏‎"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‏‏‏‎‎‏‎‎‎‎This content can’t be shared with personal apps‎‏‎‎‏‎"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‏‎This content can’t be opened with personal apps‎‏‎‎‏‎"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎Work profile is paused‎‏‎‎‏‎"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‏‎‎‎Tap to turn on‎‏‎‎‏‎"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎Work apps are paused‎‏‎‎‏‎"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‏‎‎Unpause‎‏‎‎‏‎"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‏‎‏‏‎‏‏‎‎No work apps‎‏‎‎‏‎"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‏‎‏‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎No personal apps‎‏‎‎‏‎"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎Open work ‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎Open in personal ‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‎‎‎‏‏‏‎‎‎Open in work ‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎Call from work app?‎‏‎‎‏‎"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎Switch to work app?‎‏‎‎‏‎"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎Your organization only allows you to make calls from work apps‎‏‎‎‏‎"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎Your organization only allows you to send messages from work apps‎‏‎‎‏‎"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‎‏‎‏‎‎‎‏‏‏‏‏‎‎‎Use personal browser‎‏‎‎‏‎"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‎‎‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎Use work browser‎‏‎‎‏‎"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‎Call‎‏‎‎‏‎"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎Switch‎‏‎‎‏‎"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎‎‏‏‎‎‏‏‏‏‏‏‎‏‏‎SIM network unlock PIN‎‏‎‎‏‎"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‎‎‎‎‎‎‎‎‎‏‎‏‏‎‎SIM network subset unlock PIN‎‏‎‎‏‎"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‎SIM corporate unlock PIN‎‏‎‎‏‎"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‏‎‎‎‎‎‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‏‎Can’t access the phone’s camera from your ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‎‎‏‏‎‏‏‎‏‎‎‎Can’t access the tablet’s camera from your ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‎‏‏‎‏‎‎This can’t be accessed while streaming. Try on your phone instead.‎‏‎‎‏‎"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‎Can’t view picture-in-picture while streaming‎‏‎‎‏‎"</string>
     <string name="system_locale_title" msgid="711882686834677268">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‎System default‎‏‎‎‏‎"</string>
     <string name="default_card_name" msgid="9198284935962911468">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‎CARD ‎‏‎‎‏‏‎<xliff:g id="CARDNUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎Companion Watch profile permission to manage watches‎‏‎‎‏‎"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 1c49dc2..347d537 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Cambiar al perfil personal"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Cambiar al perfil de trabajo"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Cambiar a <xliff:g id="APP_NAME">%1$s</xliff:g> (personal)"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Cambiar a <xliff:g id="APP_NAME">%1$s</xliff:g> (trabajo)"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contactos"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"acceder a los contactos"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Ubicación"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite que la aplicación controle la vibración."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que la app acceda al estado del modo de vibración."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"llamar directamente a números de teléfono"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Permite que la aplicación haga llamadas a números de teléfono sin intervención del usuario, lo que puede dar lugar a llamadas o cargos inesperados. Ten en cuenta que las aplicaciones no pueden usar este servicio para realizar llamadas a números de emergencia, pero las aplicaciones malintencionadas pueden causarte gastos imprevistos al realizar llamadas sin tu confirmación."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Permite que la app llame a números de teléfono sin tu intervención. Esta acción podría ocasionar cargos o llamadas inesperados. Ten en cuenta que no permite que la app llame a números de emergencia. Las apps maliciosas pueden generar cargos realizando llamadas sin tu confirmación o marcando códigos de operador que desvíen automáticamente las llamadas entrantes a otro número."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"acceder al servicio IMS para realizar llamadas"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permite que la aplicación utilice el servicio IMS para hacer llamadas sin tu intervención."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"leer la identidad y el estado del dispositivo"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permite que la app reciba información del servicio de pago NFC preferido, como el servicio de asistencia registrado y el destino de la ruta."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"controlar la Transmisión de datos en proximidad"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Permite que la aplicación se comunique con lectores, tarjetas y etiquetas de Comunicación de campo cercano (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Evento de transacción de Elemento seguro"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Permite que la app reciba información sobre transacciones que ocurren en un Elemento seguro."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"desactivar el bloqueo de pantalla"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Permite que la aplicación desactive el bloqueo del teclado y cualquier protección con contraseña asociada. Por ejemplo, el dispositivo puede desactivar el bloqueo del teclado cuando recibe una llamada telefónica y volver a activarlo cuando finaliza la llamada."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"solicitar complejidad del bloqueo de pantalla"</string>
@@ -615,26 +619,29 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Usar datos biométricos o bloqueo de pantalla"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Comprueba que eres tú"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Usa tus datos biométricos para continuar"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Usa tu huella dactilar para continuar"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Usa el rostro para continuar"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Usa tus datos biométricos o bloqueo de pantalla para continuar"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"No hay hardware biométrico disponible"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Se canceló la autenticación"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"No se reconoció"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"No se reconoció el rostro"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Se canceló la autenticación"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No se estableció ningún PIN, patrón ni contraseña"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Error de autenticación"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usar bloqueo de pantalla"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Ingresa tu bloqueo de pantalla para continuar"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Presiona con firmeza el sensor"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Presiona el sensor con firmeza"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"No se reconoce la huella dactilar. Vuelve a intentarlo."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpia el sensor de huellas dactilares y vuelve a intentarlo"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpia el sensor y vuelve a intentarlo"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Presiona con firmeza el sensor"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Presiona el sensor con firmeza"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Moviste el dedo muy lento. Vuelve a intentarlo."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Prueba con otra huella dactilar"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Demasiada luz"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Se detectó una presión del botón de encendido"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Prueba ajustarla"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Cambia un poco la posición del dedo cada vez"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Cambia ligeramente la posición del dedo cada vez"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"No se reconoció la huella dactilar"</string>
@@ -685,23 +692,23 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Mueve el teléfono hacia la izquierda"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Mueve el teléfono hacia la derecha"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Mira directamente al dispositivo."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"No se ve tu cara. Sostén el teléfono a la altura de los ojos."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"No se te ve el rostro. Sostén el teléfono a la altura de los ojos."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Te estás moviendo demasiado. No muevas el teléfono"</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Vuelve a registrar tu rostro."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"No se reconoce el rostro. Vuelve a intentarlo."</string>
     <string name="face_acquired_too_similar" msgid="8882920552674125694">"Cambia levemente la posición de la cabeza"</string>
-    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Mira el teléfono de forma más directa"</string>
-    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Mira el teléfono de forma más directa"</string>
-    <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_pan_too_extreme" msgid="5417928604710621088">"Mira directamente al teléfono"</string>
+    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Mira directamente al teléfono"</string>
+    <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Mira directamente al teléfono"</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>
     <!-- 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>
+    <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Se detectaron lentes oscuros. Se te debe ver todo el rostro."</string>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Llevas mascarilla. Se te debe ver todo el rostro."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"No se verificó el rostro. Hardware no disponible."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Se canceló el reconocimiento facial."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"El usuario canceló Desbloqueo facial"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Demasiados intentos. Inténtalo de nuevo más tarde."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Demasiados intentos. El Desbloqueo facial no está disponible."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Demasiados intentos. En su lugar, utiliza el bloqueo de pantalla."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"No se pudo verificar el rostro. Vuelve a intentarlo."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"No configuraste Desbloqueo facial"</string>
@@ -1256,7 +1262,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Iniciando aplicaciones"</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Finalizando el inicio"</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Presionaste el botón de encendido. Por lo general, esta acción apaga la pantalla.\n\nPresiona suavemente mientras configuras tu huella dactilar."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Para finalizar, apaga la pantalla"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Para salir, apaga la pantalla"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Apagar"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"¿Verificar huella dactilar?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Presionaste el botón de encendido. Por lo general, esta acción apaga la pantalla.\n\nPresiona suavemente para verificar tu huella dactilar."</string>
@@ -1365,12 +1371,12 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"Se activó el modo MIDI mediante USB"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Se conectó el dispositivo como cámara web"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"Accesorio USB conectado"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"Presiona para ver más opciones."</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"Presiona para ver más opciones"</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Cargando el dispositivo conectado. Presiona para ver más opciones."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Se detectó un accesorio de audio analógico"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"El dispositivo adjunto no es compatible con este teléfono. Presiona para obtener más información."</string>
     <string name="adb_active_notification_title" msgid="408390247354560331">"Depuración por USB activada"</string>
-    <string name="adb_active_notification_message" msgid="5617264033476778211">"Presiona para desactivar"</string>
+    <string name="adb_active_notification_message" msgid="5617264033476778211">"Presiona para desactivarla"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Seleccionar para desactivar la depuración por USB"</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Se conectó la depuración inalámbrica"</string>
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Presiona para desactivar la depuración inalámbrica"</string>
@@ -1393,7 +1399,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"RECHAZAR"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Selecciona el método de entrada"</string>
     <string name="show_ime" msgid="6406112007347443383">"Mientras el teclado físico está activo"</string>
-    <string name="hardware" msgid="1800597768237606953">"Mostrar teclado virtual"</string>
+    <string name="hardware" msgid="3611039921284836033">"Usar teclado en pantalla"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configura <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configura teclados físicos"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Presiona para seleccionar el idioma y el diseño"</string>
@@ -1619,7 +1625,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"Tablet"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Dispositivo"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Altavoces del conector"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Altavoces de la estación de carga"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Dispositivo externo"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Auriculares"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Eliminar"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"¿Quieres subir el volumen por encima del nivel recomendado?\n\nEscuchar a un alto volumen durante largos períodos puede dañar tu audición."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Advertencia:\nSuperaste la cantidad de señales sonoras fuertes que se pueden escuchar con auriculares de forma segura a lo largo de una semana.\n\nExceder ese límite dañará tu audición de forma permanente."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Advertencia:\nSuperaste 5 veces la cantidad de señales sonoras fuertes que se pueden escuchar con auriculares de forma segura a lo largo de una semana.\n\nSe bajó el volumen para proteger tu audición."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"El volumen al que estás escuchando contenido multimedia puede provocar daños auditivos si se mantiene durante períodos prolongados.\n\nSeguir reproduciendo audio a este volumen durante largos períodos podría dañar tu audición."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Advertencia:\nEstás escuchando contenido a un volumen peligrosamente alto.\n\nSeguir reproduciendo audio a este volumen dañará tu audición de forma permanente."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"¿Quieres seguir escuchando a un volumen alto?\n\nEl volumen de los auriculares se mantuvo elevado por más tiempo del recomendado, lo que te podría dañar la audición"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Se detectaron sonidos fuertes\n\nEl volumen de los auriculares se mantuvo más alto de lo recomendado, lo que te podría dañar la audición"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"¿Usar acceso directo de accesibilidad?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Cuando la combinación de teclas está activada, puedes presionar los botones de volumen durante 3 segundos para iniciar una función de accesibilidad."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"¿Quieres activar la combinación de teclas para las funciones de accesibilidad?"</string>
@@ -1852,7 +1856,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Para salir, desliza el dedo hacia abajo desde la parte superior."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Entendido"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Gira la pantalla para obtener una mejor vista"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Sal de la pantalla dividida para obtener una mejor vista"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Abre <xliff:g id="NAME">%s</xliff:g> en pantalla completa para una mejor visualización"</string>
     <string name="done_label" msgid="7283767013231718521">"Listo"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Control deslizante circular de horas"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Control deslizante circular de minutos"</string>
@@ -1958,7 +1962,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"La app no está disponible"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> no está disponible en este momento."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> no disponible"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Se necesitan permisos"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Se rechazó la solicitud de permiso"</string>
     <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>
@@ -1969,6 +1973,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Esta app solicita permisos adicionales, pero estos no se pueden otorgar durante una sesión de transmisión. Primero, otorga el permiso en el dispositivo Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Esta app solicita permisos adicionales, pero estos no se pueden otorgar durante una sesión de transmisión. Primero, otorga el permiso en la tablet."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Esta app solicita permisos adicionales, pero estos no se pueden otorgar durante una sesión de transmisión. Primero, otorga el permiso en el 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>
@@ -1977,6 +1984,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"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="deprecated_target_sdk_message" msgid="5246906284426844596">"Esta app se compiló para una versión anterior de Android. Es posible que no funcione correctamente ni incluya las protecciones de la privacidad más recientes. Consulta si hay actualizaciones o comunícate con el desarrollador."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Buscar actualización"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Esta app no es compatible con la versión más reciente de Android. Revisa si hay actualizaciones o comunícate con el desarrollador."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tienes mensajes nuevos"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Abrir app de SMS para ver el mensaje"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Podrían limitarse algunas funciones"</string>
@@ -2093,7 +2101,7 @@
     <string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"Aceptar"</string>
     <string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"Desactivar"</string>
     <string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"Más información"</string>
-    <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Las notificaciones mejoradas reemplazaron a las notificaciones adaptables en Android 12. Esta función muestra respuestas y acciones sugeridas, y organiza tus notificaciones.\n\nLas notificaciones mejoradas pueden acceder a todo el contenido de notificaciones, lo que incluye información personal, como nombres de contactos y mensajes. También puede descartar o responder notificaciones (como contestar llamadas) y controlar la función No interrumpir."</string>
+    <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Las notificaciones mejoradas reemplazaron a las notificaciones adaptables en Android 12. Esta función muestra respuestas y acciones sugeridas, y organiza tus notificaciones.\n\nLas notificaciones mejoradas pueden acceder a todo el contenido de notificaciones, lo que incluye información personal, como nombres de contactos y mensajes. También pueden descartar o responder notificaciones (como contestar llamadas) y controlar la función No interrumpir."</string>
     <string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Notificación de información del modo de Rutinas"</string>
     <string name="dynamic_mode_notification_title" msgid="1388718452788985481">"Ahorro de batería activado"</string>
     <string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"Reduciendo el uso de la batería para extender su duración"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"No se puede abrir este contenido con apps de trabajo"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"No se pueden usar apps personales para compartir este contenido"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"No se puede abrir este contenido con apps personales"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"El perfil de trabajo está en pausa"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Presionar para activar"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Se pausaron las apps de trabajo"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Reanudar"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"El contenido no es compatible con apps de trabajo"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"El contenido no es compatible con apps personales"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"¿Quieres abrir <xliff:g id="APP">%s</xliff:g> de trabajo?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"¿Quieres abrir <xliff:g id="APP">%s</xliff:g> en tu perfil personal?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"¿Quieres abrir <xliff:g id="APP">%s</xliff:g> en tu perfil de trabajo?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"¿Quieres llamar desde la app de trabajo?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"¿Quieres cambiar a una app de trabajo?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Tu organización solo te permite realizar llamadas desde apps de trabajo"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Tu organización solo te permite enviar mensajes desde apps de trabajo"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usar un navegador personal"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usar un navegador de trabajo"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Llamar"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Cambiar"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN de desbloqueo del dispositivo para la red de tarjeta SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN de desbloqueo del dispositivo para el subconjunto de redes de tarjeta SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN de desbloqueo corporativo del dispositivo para tarjeta SIM"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"No se puede acceder a la cámara del dispositivo desde tu <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"No se puede acceder a la cámara de la tablet desde tu <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"No se puede acceder a este contenido durante una transmisión. Inténtalo en tu teléfono."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"No puedes ver pantalla en pantalla mientras transmites"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Predeterminado del sistema"</string>
     <string name="default_card_name" msgid="9198284935962911468">"TARJETA <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Permiso de perfil del reloj complementario para administrar relojes"</string>
@@ -2318,20 +2332,20 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Permite que una aplicación complementaria inicie servicios en primer plano desde el segundo plano."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"El micrófono está disponible"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"El micrófono está bloqueado"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Pantalla dual"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"La Pantalla dual está activada"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"La función Dual Screen está activada"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> está usando ambas pantallas para mostrar contenido"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"El dispositivo está muy caliente"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"La Pantalla dual no está disponible porque el teléfono se está calentando demasiado"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dual Screen no está disponible porque el teléfono se está calentando demasiado"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen no está disponible"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screen no está disponible porque el Ahorro de batería está activado. Puedes desactivar esta opción en la Configuración."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Ir a Configuración"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Desactivar"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"Se configuró <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Diseño de teclado establecido en <xliff:g id="LAYOUT_1">%s</xliff:g>. Presiona para cambiar esta opción."</string>
-    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Diseño de teclado establecido en <xliff:g id="LAYOUT_1">%1$s</xliff:g> y <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Presiona para cambiar esta opción."</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Diseño de teclado establecido en <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> y <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Presiona para cambiar esta opción."</string>
-    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Diseño de teclado establecido en <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> y <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Presiona para cambiar esta opción."</string>
+    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Diseño de teclado establecido en <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Presiona para cambiar esta opción."</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Diseño de teclado establecido en <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Presiona para cambiar esta opción."</string>
+    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Diseño de teclado establecido en <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Presiona para cambiar esta opción."</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"Teclados físicos configurados"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"Presiona para ver los teclados"</string>
 </resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index ae42391..70610d1 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -251,7 +251,7 @@
     <string name="global_action_bug_report" msgid="5127867163044170003">"Informe de errores"</string>
     <string name="global_action_logout" msgid="6093581310002476511">"Finalizar sesión"</string>
     <string name="global_action_screenshot" msgid="2610053466156478564">"Captura de pantalla"</string>
-    <string name="bugreport_title" msgid="8549990811777373050">"Informar error"</string>
+    <string name="bugreport_title" msgid="8549990811777373050">"Informe de errores"</string>
     <string name="bugreport_message" msgid="5212529146119624326">"Se recopilará información sobre el estado actual de tu dispositivo y se enviará por correo electrónico. Pasarán unos minutos desde que empiece a generarse el informe de errores hasta que se envíe."</string>
     <string name="bugreport_option_interactive_title" msgid="7968287837902871289">"Informe interactivo"</string>
     <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"Usa esta opción en la mayoría de los casos. Te permite realizar un seguimiento del progreso del informe, introducir más información sobre el problema y hacer capturas de pantalla. Es posible que se omitan algunas secciones menos utilizadas y que requieran más tiempo."</string>
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Cambiar al perfil personal"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Cambiar al perfil de trabajo"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Cambiar a <xliff:g id="APP_NAME">%1$s</xliff:g> personal"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Cambiar a <xliff:g id="APP_NAME">%1$s</xliff:g> de trabajo"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contactos"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"acceder a tus contactos"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Ubicación"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite que la aplicación controle la función de vibración."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que la aplicación acceda al ajuste de vibración."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"llamar directamente a números de teléfono"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Permite que la aplicación haga llamadas sin intervención del usuario, lo que puede dar lugar a llamadas o cargos inesperados. Ten en cuenta que las aplicaciones no pueden usar este servicio para realizar llamadas a números de emergencia, pero las aplicaciones malintencionadas pueden causarte gastos imprevistos al realizar llamadas sin tu confirmación."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Permite que la aplicación llame a números de teléfono sin tu intervención, lo que puede dar lugar a llamadas o cargos inesperados. Ten en cuenta que esto no permite que la aplicación llame a números de emergencia. Las aplicaciones maliciosas pueden incurrir en gastos al hacer llamadas sin tu confirmación o marcar códigos de operador que desvían automáticamente las llamadas entrantes a otro número."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"acceder al servicio de llamadas IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permite que la aplicación utilice el servicio IMS para realizar llamadas sin tu intervención."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"consultar la identidad y el estado del teléfono"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permite que la aplicación obtenga información sobre el servicio de pago por NFC preferido, como identificadores de aplicación registrados y destinos de rutas."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"controlar Comunicación de campo cercano (NFC)"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Permite que la aplicación se comunique con lectores, tarjetas y etiquetas de Comunicación de campo cercano (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Evento de transacción de elemento seguro"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Permite que la aplicación reciba información sobre las transacciones que ocurren en un elemento seguro."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"inhabilitar el bloqueo de pantalla"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Permite que la aplicación inhabilite el bloqueo del teclado y cualquier protección con contraseña asociada. Por ejemplo, el teléfono puede inhabilitar el bloqueo del teclado cuando se recibe una llamada telefónica y volver a habilitarlo cuando finaliza la llamada."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"solicitar complejidad del bloqueo de pantalla"</string>
@@ -615,10 +619,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Usar biometría o bloqueo de pantalla"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifica que eres tú"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Usa tu biometría para continuar"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Usa la huella digital para continuar"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Usa la cara para continuar"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Usa la biometría o tu bloqueo de pantalla para continuar"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Hardware biométrico no disponible"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autenticación cancelada"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"No se reconoce"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Cara no reconocida"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autenticación cancelada"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No se ha definido el PIN, el patrón o la contraseña"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"No se ha podido autenticar"</string>
@@ -693,15 +700,15 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Mira al teléfono de forma más directa"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Mira al teléfono de forma más directa"</string>
     <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_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>
     <!-- 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>
+    <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Gafas oscuras detectadas. Tu cara se debe poder ver entera."</string>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Cara parcialmente cubierta. Debe verse toda."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"No se puede verificar. Hardware no disponible."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Se ha cancelado el reconocimiento facial."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"El usuario ha cancelado Desbloqueo facial"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Demasiados intentos. Inténtalo de nuevo más tarde."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Demasiados intentos. Desbloqueo facial no disponible."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Demasiados intentos. Usa el bloqueo de pantalla."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"No se ha verificado tu cara. Vuelve a intentarlo."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"No has configurado Desbloqueo facial"</string>
@@ -822,7 +828,7 @@
     <string name="policydesc_wipeData" product="default" msgid="8036084184768379022">"Borra los datos del teléfono sin avisar restableciendo el estado de fábrica"</string>
     <string name="policylab_wipeData_secondaryUser" product="automotive" msgid="115034358520328373">"Borrar datos del perfil"</string>
     <string name="policylab_wipeData_secondaryUser" product="default" msgid="413813645323433166">"Borrar datos del usuario"</string>
-    <string name="policydesc_wipeData_secondaryUser" product="tablet" msgid="2336676480090926470">"Borra los datos del usuario en este tablet sin avisar."</string>
+    <string name="policydesc_wipeData_secondaryUser" product="tablet" msgid="2336676480090926470">"Borra los datos del usuario en esta tablet sin avisar."</string>
     <string name="policydesc_wipeData_secondaryUser" product="tv" msgid="2293713284515865200">"Eliminar los datos de este usuario del dispositivo Android TV sin previo aviso."</string>
     <string name="policydesc_wipeData_secondaryUser" product="automotive" msgid="4658832487305780879">"Borra los datos del perfil de este sistema de infoentretenimiento sin avisar."</string>
     <string name="policydesc_wipeData_secondaryUser" product="default" msgid="2788325512167208654">"Borra los datos del usuario en este teléfono sin avisar."</string>
@@ -1365,12 +1371,12 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"Modo MIDI por USB activado"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Dispositivo conectado como cámara web"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"Accesorio USB conectado"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"Toca para ver más opciones."</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"Toca para ver más opciones"</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Cargando el dispositivo conectado. Toca para ver más opciones."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Se ha detectado un accesorio de audio analógico"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"El dispositivo adjunto no es compatible con este teléfono. Toca para obtener más información."</string>
     <string name="adb_active_notification_title" msgid="408390247354560331">"Depuración por USB activa"</string>
-    <string name="adb_active_notification_message" msgid="5617264033476778211">"Toca para desactivar la depuración por USB"</string>
+    <string name="adb_active_notification_message" msgid="5617264033476778211">"Toca para desactivar depuración USB"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Seleccionar para inhabilitar la depuración por USB"</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Depuración inalámbrica conectada"</string>
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Toca para desactivar la depuración inalámbrica"</string>
@@ -1392,8 +1398,8 @@
     <string name="share_remote_bugreport_action" msgid="7630880678785123682">"COMPARTIR"</string>
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"RECHAZAR"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Selecciona un método de entrada"</string>
-    <string name="show_ime" msgid="6406112007347443383">"Mientras el teclado físico está activo"</string>
-    <string name="hardware" msgid="1800597768237606953">"Mostrar teclado virtual"</string>
+    <string name="show_ime" msgid="6406112007347443383">"Mantenlo en pantalla mientras el teclado físico está activo"</string>
+    <string name="hardware" msgid="3611039921284836033">"Usar teclado en pantalla"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configura <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configura teclados físicos"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Toca para seleccionar el idioma y el diseño"</string>
@@ -1567,7 +1573,7 @@
     <string name="shareactionprovider_share_with" msgid="2753089758467748982">"Compartir con"</string>
     <string name="shareactionprovider_share_with_application" msgid="4902832247173666973">"Compartir con <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="982510275422590757">"Mantén pulsado el icono de desbloqueo y deslízalo."</string>
-    <string name="description_target_unlock_tablet" msgid="7431571180065859551">"Desliza el dedo para desbloquear."</string>
+    <string name="description_target_unlock_tablet" msgid="7431571180065859551">"Desliza para desbloquear"</string>
     <string name="action_bar_home_description" msgid="1501655419158631974">"Ir al escritorio"</string>
     <string name="action_bar_up_description" msgid="6611579697195026932">"Desplazarse hacia arriba"</string>
     <string name="action_menu_overflow_description" msgid="4579536843510088170">"Más opciones"</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Quitar"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"¿Quieres subir el volumen por encima del nivel recomendado?\n\nEscuchar sonidos fuertes durante mucho tiempo puede dañar los oídos."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Atención:\nHas superado la cantidad de señales acústicas elevadas que se considera seguro escuchar en una semana a través de auriculares.\n\nSuperar este límite dañará tu audición de forma permanente."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Atención:\nHas superado cinco veces la cantidad de señales acústicas elevadas que se considera seguro escuchar en una semana a través de auriculares.\n\nSe ha bajado el volumen para proteger tu audición."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"El volumen al que estás escuchando contenido multimedia puede provocar daños de audición si se mantiene durante un periodo prolongado.\n\nSi sigues reproduciendo audio a este volumen durante largos periodos, puede que perjudique tu audición."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Atención:\nEstás escuchando contenido a un volumen no seguro.\n\nSi sigues escuchando audio tan alto, tu audición se dañará de forma permanente."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"¿Seguir escuchando a un volumen alto?\n\nEl volumen de los auriculares ha estado alto durante más tiempo del recomendado, lo que puede dañar tu audición"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Sonido alto detectado\n\nEl volumen de los auriculares está más alto de lo recomendado, lo que puede dañar tu audición"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"¿Utilizar acceso directo de accesibilidad?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Si el acceso directo está activado, pulsa los dos botones de volumen durante 3 segundos para iniciar una función de accesibilidad."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"¿Quieres activar el acceso directo a las funciones de accesibilidad?"</string>
@@ -1852,7 +1856,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Para salir, desliza el dedo de arriba abajo."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Entendido"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Gira la pantalla para verlo mejor"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Sal de la pantalla dividida para verlo mejor"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Abre <xliff:g id="NAME">%s</xliff:g> en pantalla completa para verlo mejor"</string>
     <string name="done_label" msgid="7283767013231718521">"Hecho"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Control deslizante circular de horas"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Control deslizante circular de minutos"</string>
@@ -1958,7 +1962,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"La aplicación no está disponible"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"En estos momentos, <xliff:g id="APP_NAME">%1$s</xliff:g> no está disponible."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> no disponible"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Se necesita permiso"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Solicitud de permiso rechazada"</string>
     <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>
@@ -1969,6 +1973,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Esta aplicación está solicitando permisos adicionales, pero no se pueden dar durante una sesión de streaming. Da primero el permiso en tu dispositivo Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Esta aplicación está solicitando permisos adicionales, pero no se pueden dar durante una sesión de streaming. Da primero el permiso en tu tablet."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Esta aplicación está solicitando permisos adicionales, pero no se pueden dar durante una sesión de streaming. Da primero el permiso 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>
@@ -1977,6 +1984,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"No se puede acceder desde tu <xliff:g id="DEVICE">%1$s</xliff:g>. Prueba en tu teléfono."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Esta aplicación se creó para una versión anterior de Android. Puede que no funcione correctamente y que no incluya las protecciones de seguridad y privacidad más recientes. Comprueba si hay actualizaciones o ponte en contacto con el desarrollador de la aplicación."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Buscar actualizaciones"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Esta aplicación no es compatible con la última versión de Android. Comprueba si hay actualizaciones o contacta con el desarrollador de la aplicación."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tienes mensajes nuevos"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Abre la aplicación de SMS para ver el mensaje"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Algunas funciones limitadas"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Este contenido no se puede abrir con aplicaciones de trabajo"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Este contenido no se puede compartir con aplicaciones personales"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Este contenido no se puede abrir con aplicaciones personales"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"El perfil de trabajo está en pausa"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Toca para activar"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Las aplicaciones de trabajo están en pausa"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Reactivar"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ninguna aplicación de trabajo"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ninguna aplicación personal"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"¿Abrir <xliff:g id="APP">%s</xliff:g> de trabajo?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"¿Abrir en <xliff:g id="APP">%s</xliff:g> personal?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"¿Abrir en <xliff:g id="APP">%s</xliff:g> de trabajo?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"¿Llamar desde la aplicación de trabajo?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"¿Cambiar a la aplicación de trabajo?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Tu organización solo te permite hacer llamadas desde aplicaciones de trabajo"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Tu organización solo te permite enviar mensajes desde aplicaciones de trabajo"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usar navegador personal"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usar navegador de trabajo"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Llamar"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Cambiar"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN de desbloqueo de red de tarjeta SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN de desbloqueo de subconjunto de red SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN de desbloqueo corporativo de SIM"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"No se puede acceder a la cámara del teléfono desde tu <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"No se puede acceder a la cámara del tablet desde tu <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"No se puede acceder a este contenido durante una emisión. Prueba en tu teléfono."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"No se puede usar imagen en imagen mientras se emite contenido"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Predeterminado del sistema"</string>
     <string name="default_card_name" msgid="9198284935962911468">"TARJETA <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Permiso del perfil del reloj complementario para gestionar relojes"</string>
@@ -2318,19 +2332,19 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Permite que una aplicación complementaria inicie servicios en primer plano desde el segundo plano."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"El micrófono está disponible"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"El micrófono está bloqueado"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Cámara Dual"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"La función Cámara Dual está activada"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"La función Dual Screen está activada"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> está usando ambas pantallas para mostrar contenido"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"El dispositivo está demasiado caliente"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Cámara Dual no está disponible porque el teléfono se está calentando demasiado"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dual Screen no está disponible porque el teléfono se está calentando demasiado"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen no está disponible"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screen no está disponible porque la función Ahorro de batería está activada. Puedes desactivarla en Ajustes."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Ir a Ajustes"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Desactivar"</string>
-    <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"Se ha configurado <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
+    <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> configurado"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Diseño del teclado definido como <xliff:g id="LAYOUT_1">%s</xliff:g>. Toca para cambiarlo."</string>
-    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Diseño del teclado definido como <xliff:g id="LAYOUT_1">%1$s</xliff:g> y <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Toca para cambiarlo."</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Diseño del teclado definido como <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> y <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Toca para cambiarlo."</string>
+    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Diseño del teclado definido como <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Toca para cambiarlo."</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Diseño del teclado definido como <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Toca para cambiarlo."</string>
     <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Diseño del teclado definido como <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>… Toca para cambiarlo."</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"Teclados físicos configurados"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"Toca para ver los teclados"</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 5a0ef3e..36ef583 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -210,7 +210,7 @@
     <string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Lülita sisse"</string>
     <string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Kõned ja sõnumid on välja lülitatud"</string>
     <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Olete töörakendused peatanud. Te ei saa telefonikõnesid ega tekstsõnumeid."</string>
-    <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Jätka töörakendusi"</string>
+    <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Lõpeta peatamine"</string>
     <string name="me" msgid="6207584824693813140">"Mina"</string>
     <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Tahvelarvuti valikud"</string>
     <string name="power_dialog" product="tv" msgid="7792839006640933763">"Android TV valikud"</string>
@@ -268,7 +268,7 @@
     <string name="global_action_settings" msgid="4671878836947494217">"Seaded"</string>
     <string name="global_action_assist" msgid="2517047220311505805">"Abi"</string>
     <string name="global_action_voice_assist" msgid="6655788068555086695">"Häälabi"</string>
-    <string name="global_action_lockdown" msgid="2475471405907902963">"Lukustamine"</string>
+    <string name="global_action_lockdown" msgid="2475471405907902963">"Lukusta"</string>
     <string name="status_bar_notification_info_overflow" msgid="3330152558746563475">"999+"</string>
     <string name="notification_hidden_text" msgid="2835519769868187223">"Uus märguanne"</string>
     <string name="notification_channel_physical_keyboard" msgid="5417306456125988096">"Füüsiline klaviatuur"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android-süsteem"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Lülitu isiklikule profiilile"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Lülitu tööprofiilile"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Lülita <xliff:g id="APP_NAME">%1$s</xliff:g> isiklikule profiilile"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Lülita <xliff:g id="APP_NAME">%1$s</xliff:g> tööprofiilile"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontaktid"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"juurdepääs kontaktidele"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Asukoht"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Võimaldab rakendusel juhtida vibreerimist."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Võimaldab rakendusel juurde pääseda vibreerimise olekule."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"helista otse telefoninumbritele"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Võimaldab rakendusel teie sekkumiseta telefoninumbritele helistada. See võib põhjustada ootamatuid tasusid või telefonikõnesid. Pange tähele, et see ei luba rakendusel helistada hädaabinumbritele. Pahatahtlikud rakendused võivad teile kulusid tekitada, tehes telefonikõnesid teie kinnituseta."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Võimaldab rakendusel telefoninumbritele helistada ilma teie sekkumiseta. See võib kaasa tuua ootamatuid tasusid või kõnesid. Pange tähele, et see ei luba rakendusel helistada hädaabinumbritele. Pahatahtlike rakenduste tõttu võib tekkida soovimatuid kulusid, kuna need võivad teha kõnesid ilma teie kinnituseta või valida operaatori koode, mille tõttu suunatakse sissetulevad kõned automaatselt teisele numbrile."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"juurdepääs IMS-kõneteenusele"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Võimaldab rakendusel kasutada IMS-teenust kõnede tegemiseks ilma, et peaksite sekkuma."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"Telefoni oleku ja identiteedi lugemine"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Võimaldab rakendusel hankida eelistatud NFC-makseteenuse teavet (nt registreeritud abi ja marsruudi sihtkoht)."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"lähiväljaside juhtimine"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Võimaldab rakendusel suhelda lähiväljaside (NFC) märgendite, kaartide ja lugeritega."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Turvaelemendiga tehingu sündmus"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Võimaldab rakendusel võtta vastu teavet tehingute kohta, mis toimuvad turvaelemendi abil."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"keelake ekraanilukk"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Võimaldab rakendusel keelata klahviluku ja muu seotud parooli turvalisuse. Näiteks keelab telefon klahviluku sissetuleva kõne vastuvõtmisel ja lubab klahviluku uuesti, kui kõne on lõpetatud."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"ekraaniluku keerukuse taotlemine"</string>
@@ -614,20 +618,23 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Biomeetria või ekraaniluku kasutamine"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Kinnitage oma isik"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Jätkamiseks kasutage biomeetriat"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Jätkamiseks kasutage oma sõrmejälge"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Jätkamiseks kasutage oma nägu"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Jätkamiseks kasutage oma biomeetrilisi andmeid või ekraanilukku"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biomeetriline riistvara ei ole saadaval"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autentimine tühistati"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Ei tuvastatud"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Nägu ei tuvastatud"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autentimine tühistati"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN-koodi, mustrit ega parooli pole määratud"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Viga autentimisel"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ekraaniluku kasutamine"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Jätkamiseks sisestage oma ekraanilukk"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Vajutage tugevalt andurile"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Vajutage kindlalt andurile"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Sõrmejälge ei õnnestu tuvastada. Proovige uuesti."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Puhastage sõrmejäljeandur ja proovige uuesti"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Puhastage andur ja proovige uuesti"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Vajutage tugevalt andurile"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Vajutage kindlalt andurile"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Sõrm liikus liiga aeglaselt. Proovige uuesti."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Proovige teist sõrmejälge"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Liiga ere"</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Tuvastati näokate. Nägu peab olema täielikult nähtaval."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Nägu ei saa kinnitada. Riistvara pole saadaval."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Näotuvastuse toiming tühistati."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Kasutaja tühistas näoga avamise"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Liiga palju katseid. Proovige hiljem uuesti."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Liiga palju katseid. Näoga avamine pole saadaval."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Liiga palju katseid. Kasutage selle asemel ekraanilukku."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Nägu ei saa kinnitada. Proovige uuesti."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Näoga avamine ei ole seadistatud"</string>
@@ -1368,7 +1374,7 @@
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Ühendatud seadet laetakse. Puudutage lisavalikute nägemiseks."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Tuvastati analoogne helitarvik"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Ühendatud seade ei ühildu selle telefoniga. Puudutage lisateabe saamiseks."</string>
-    <string name="adb_active_notification_title" msgid="408390247354560331">"USB-silumine ühendatud"</string>
+    <string name="adb_active_notification_title" msgid="408390247354560331">"USB-silumine on ühendatud"</string>
     <string name="adb_active_notification_message" msgid="5617264033476778211">"Puudutage USB-silumise väljalülitamiseks"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Valige USB silumise keelamiseks"</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Juhtmevaba silumine on ühendatud"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"KEELDU"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Valige sisestusmeetod"</string>
     <string name="show_ime" msgid="6406112007347443383">"Hoia seda ekraanil, kui füüsiline klaviatuur on aktiivne"</string>
-    <string name="hardware" msgid="1800597768237606953">"Virtuaalse klaviatuuri kuvam."</string>
+    <string name="hardware" msgid="3611039921284836033">"Kasuta ekraaniklaviatuuri"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Seadistage <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Seadistage füüsilised klaviatuurid"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Puudutage keele ja paigutuse valimiseks"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Eemalda"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Kas suurendada helitugevuse taset üle soovitatud taseme?\n\nPikaajaline valju helitugevusega kuulamine võib kuulmist kahjustada."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Hoiatus!\nOlete ületanud valjude helisignaalide hulga, mida inimene tohib nädala jooksul kõrvaklappidega kuulata.\n\nSeda limiiti ületades kahjustate püsivalt oma kuulmist."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Hoiatus!\nOlete viiekordselt ületanud valjude helisignaalide hulka, mida inimene tohib nädala jooksul kõrvaklappidega kuulata.\n\nHelitugevust on vähendatud, et teie kuulmist kaitsta."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Helitugevuse tase, millega meediat kuulate, võib kahjustada teie kuulmist, kui sellisel tasemel pikema aja vältel kuulate.\n\nSellisel tasemel pikema aja vältel kuulamise jätkamisel võite kahjustada oma kuulmist."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Hoiatus!\nKuulate praegu valjut sisu ohtlikul tasemel.\n\nNii valjusti kuulamise jätkamisel kahjustate jäädavalt oma kuulmist."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Kas jätkata suure helitugevusega kuulamist?\n\nKõrvaklappide helitugevus on olnud suur soovitatavast ajast kauem ja see võib kahjustada teie kuulmist."</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Tuvastatud on vali heli\n\nKõrvaklappide helitugevus on olnud soovitatavast suurem ja see võib kahjustada teie kuulmist."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Kas kasutada juurdepääsetavuse otseteed?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Kui otsetee on sisse lülitatud, käivitab mõlema helitugevuse nupu kolm sekundit all hoidmine juurdepääsetavuse funktsiooni."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Kas lülitada juurdepääsufunktsioonide otsetee sisse?"</string>
@@ -1697,7 +1701,7 @@
     <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"SEES"</string>
     <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"VÄLJAS"</string>
     <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Kas anda teenusele <xliff:g id="SERVICE">%1$s</xliff:g> teie seadme üle täielik kontroll?"</string>
-    <string name="accessibility_service_warning_description" msgid="291674995220940133">"Täielik haldusõigus sobib rakendustele, mis pakuvad juurdepääsufunktsioone. Enamiku rakenduste puhul seda ei soovitata."</string>
+    <string name="accessibility_service_warning_description" msgid="291674995220940133">"Täielik kontroll sobib rakendustele, mis pakuvad juurdepääsufunktsioone. Enamiku rakenduste puhul seda ei soovitata."</string>
     <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Ekraanikuva vaatamine ja haldamine"</string>
     <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"See saab lugeda kogu ekraanil kuvatud sisu ja kuvada sisu rakenduste peal."</string>
     <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"Toimingute vaatamine ja tegemine"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Väljumiseks pühkige ülevalt alla."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Selge"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Pöörake parema vaate jaoks"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Parema vaate jaoks väljuge jagatud ekraanikuvast"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Parema vaate jaoks avage rakendus <xliff:g id="NAME">%s</xliff:g> täisekraanil"</string>
     <string name="done_label" msgid="7283767013231718521">"Valmis"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Ringikujuline tunniliugur"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Ringikujuline minutiliugur"</string>
@@ -1951,13 +1955,13 @@
     <string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> pole praegu saadaval. Seda haldab rakendus <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
     <string name="app_suspended_more_details" msgid="211260942831587014">"Lisateave"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Jätka rakendust"</string>
-    <string name="work_mode_off_title" msgid="6367463960165135829">"Kas jätkata töörakendusi?"</string>
-    <string name="work_mode_turn_on" msgid="5316648862401307800">"Jätka"</string>
+    <string name="work_mode_off_title" msgid="6367463960165135829">"Kas lõpetada töörakenduste peatamine?"</string>
+    <string name="work_mode_turn_on" msgid="5316648862401307800">"Lõpeta peatamine"</string>
     <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Hädaolukord"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"Rakendus ei ole saadaval"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ei ole praegu saadaval."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ei ole saadaval"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Vaja on luba"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Loataotlus peideti"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"See rakendus taotleb lisalube, kuid lube ei saa voogesituse seansis anda. Kõigepealt andke luba oma Android TV seadmele."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"See rakendus taotleb lisalube, kuid lube ei saa voogesituse seansis anda. Kõigepealt andke luba oma tahvelarvutile."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"See rakendus taotleb lisalube, kuid lube ei saa voogesituse seansis anda. Kõigepealt andke luba oma telefonile."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Sellele ei pääse teie seadmes <xliff:g id="DEVICE">%1$s</xliff:g> juurde. Proovige juurde pääseda oma telefonis."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"See rakendus on loodud Androidi vanema versiooni jaoks. See ei pruugi õigesti töötada ega hõlma uusimaid turva- ja privaatsusfunktsioone. Otsige värskendust või võtke ühendust rakenduse arendajaga."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Otsi värskendust"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"See rakendus ei ühildu Androidi uusima versiooniga. Otsige värskendust või võtke ühendust rakenduse arendajaga."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Teile on uusi sõnumeid"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Avage vaatamiseks SMS-rakendus"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Mõned funkts. võivad olla piiratud"</string>
@@ -2157,18 +2165,23 @@
     <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Blokeeris teie IT-administraator"</string>
     <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Seda sisu ei saa töörakendustega jagada"</string>
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Seda sisu ei saa töörakendustega avada"</string>
-    <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Seda sisu ei saa isiklike rakendustega jagada"</string>
+    <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Seda sisu ei saa isiklike rakendustega jagada."</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Seda sisu ei saa isiklike rakendustega avada"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Tööprofiil on peatatud"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Puudutage sisselülitamiseks"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Töörakendused on peatatud"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Jätka"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Töörakendusi pole"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Isiklikke rakendusi pole"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Kas avada töörakendus <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Kas avada isiklikus rakenduses <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Kas avada töörakenduses <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Kas helistada töörakendusest?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Kas lülituda töörakendusele?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Teie organisatsioon lubab helistada ainult töörakendustest."</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Teie organisatsioon lubab sõnumeid saata ainult töörakendustest."</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Kasuta isiklikku brauserit"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Kasuta tööbrauserit"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Helista"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Lülitu"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM-kaardi võrgu avamise PIN-kood"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM-kaardi võrgu alamhulga avamise PIN-kood"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM-kaardi ettevõtte avamise PIN-kood"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Teie seadmest <xliff:g id="DEVICE">%1$s</xliff:g> ei pääse telefoni kaamerale juurde."</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Teie seadmest <xliff:g id="DEVICE">%1$s</xliff:g> ei pääse tahvelarvuti kaamerale juurde"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Sellele ei pääse voogesituse ajal juurde. Proovige juurde pääseda oma telefonis."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Voogesitamise ajal ei saa pilt pildis funktsiooni kasutada"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Süsteemi vaikeseade"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KAART <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Kaasrakenduse profiili luba kellade haldamiseks"</string>
@@ -2317,13 +2331,13 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Lubab kaasrakendusel taustal käivitada esiplaanil olevaid teenuseid."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofon on saadaval"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofon on blokeeritud"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Kahe ekraani režiim"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Kahe ekraani režiim on sisse lülitatud"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screeni režiim on sisse lülitatud"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> kasutab sisu kuvamiseks mõlemat ekraani"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Seade on liiga kuum"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Kahe ekraani režiim pole saadaval, kuna teie telefon läheb liiga kuumaks"</string>
-    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Kahe ekraani režiim ei ole saadaval"</string>
-    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Kahe ekraani režiim ei ole saadaval, kuna akusäästja on sisse lülitatud. Saate selle seadetes välja lülitada."</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dual Screeni režiim pole saadaval, kuna teie telefon läheb liiga kuumaks"</string>
+    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screeni režiim ei ole saadaval"</string>
+    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screeni režiim ei ole saadaval, kuna akusäästja on sisse lülitatud. Saate selle seadetes välja lülitada."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Ava seaded"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Lülita välja"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> on seadistatud"</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index 3afd28a..bd0a045 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -47,8 +47,8 @@
     <string name="needPuk2" msgid="3910763547447344963">"Idatzi PUK2-a SIMa desblokeatzeko."</string>
     <string name="enablePin" msgid="2543771964137091212">"Ezin izan da aldatu. Gaitu SIM edo RUIM txartelaren blokeoa."</string>
     <plurals name="pinpuk_attempts" formatted="false" msgid="1619867269012213584">
-      <item quantity="other"><xliff:g id="NUMBER_1">%d</xliff:g> saiakera geratzen zaizkizu SIM txartela blokeatu aurretik.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> saiakera geratzen zaizu SIM txartela blokeatu aurretik.</item>
+      <item quantity="other"><xliff:g id="NUMBER_1">%d</xliff:g> saiakera geratzen zaizkizu SIMa blokeatu aurretik.</item>
+      <item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> saiakera geratzen zaizu SIMa blokeatu aurretik.</item>
     </plurals>
     <string name="imei" msgid="2157082351232630390">"IMEIa"</string>
     <string name="meid" msgid="3291227361605924674">"MEID"</string>
@@ -80,7 +80,7 @@
     <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"Ez dago ahots-deien zerbitzurik"</string>
     <string name="RestrictedOnAllVoiceTitle" msgid="3982069078579103087">"Ez dago ahozko zerbitzurik eta ezin da egin larrialdi-deirik"</string>
     <string name="RestrictedStateContent" msgid="7693575344608618926">"Operadoreak desaktibatu egin du aldi baterako"</string>
-    <string name="RestrictedStateContentMsimTemplate" msgid="5228235722511044687">"Operadoreak <xliff:g id="SIMNUMBER">%d</xliff:g> SIM txartela desaktibatu egin du aldi baterako"</string>
+    <string name="RestrictedStateContentMsimTemplate" msgid="5228235722511044687">"Operadoreak <xliff:g id="SIMNUMBER">%d</xliff:g> SIMa desaktibatu egin du aldi baterako"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="1008329951315753038">"Ezin da konektatu sare mugikorrera"</string>
     <string name="NetworkPreferenceSwitchSummary" msgid="2086506181486324860">"Aldatu sare hobetsia. Sakatu aldatzeko."</string>
     <string name="EmergencyCallWarningTitle" msgid="1615688002899152860">"Ezin da egin larrialdi-deirik"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android sistema"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Aldatu profil pertsonalera"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Aldatu laneko profilera"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Aldatu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioko profil pertsonalera"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Aldatu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioko laneko profilera"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontaktuak"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"atzitu kontaktuak"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Kokapena"</string>
@@ -457,7 +459,7 @@
     <string name="permdesc_readCallLog" msgid="8964770895425873433">"Aplikazioak deien historia irakur dezake."</string>
     <string name="permlab_writeCallLog" msgid="670292975137658895">"idatzi deien erregistroan"</string>
     <string name="permdesc_writeCallLog" product="tablet" msgid="2657525794731690397">"Tabletaren deien erregistroa aldatzeko baimena ematen die aplikazioei, sarrerako eta irteerako deiei buruzko datuak barne. Asmo txarreko aplikazioek deien erregistroa ezabatzeko edo aldatzeko erabil dezakete."</string>
-    <string name="permdesc_writeCallLog" product="tv" msgid="3934939195095317432">"Android TV gailuko deien erregistroa aldatzeko baimena ematen die aplikazioei, jasotako eta egindako deiei buruzko datuak barne. Baliteke asmo txarreko aplikazioek deien erregistroa ezabatzea edo aldatzea."</string>
+    <string name="permdesc_writeCallLog" product="tv" msgid="3934939195095317432">"Android TV gailuko deien erregistroa aldatzeko baimena ematen die aplikazioei, sarrerako eta irteerako deiei buruzko datuak barne. Baliteke asmo txarreko aplikazioek deien erregistroa ezabatzea edo aldatzea."</string>
     <string name="permdesc_writeCallLog" product="default" msgid="5903033505665134802">"Telefonoaren deien erregistroa aldatzeko baimena ematen die aplikazioei, sarrerako eta irteerako deiei buruzko datuak barne. Asmo txarreko aplikazioek deien erregistroa ezabatzeko edo aldatzeko erabil dezakete."</string>
     <string name="permlab_bodySensors" msgid="662918578601619569">"Atzitu gorputz-sentsoreen datuak (esaterako, bihotz-maiztasuna) aplikazioa erabili bitartean"</string>
     <string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"Aplikazioak erabiltzen diren bitartean, gorputz-sentsoreen datuak (besteak beste, bihotz-maiztasuna, tenperatura eta odolean dagoen oxigenoaren ehunekoa) erabiltzeko baimena ematen die aplikazio horiei."</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Bibragailua kontrolatzeko baimena ematen die aplikazioei."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Dardara-egoera erabiltzeko baimena ematen die aplikazioei."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"deitu zuzenean telefono-zenbakietara"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Telefono-zenbakietara zuk esku hartu gabe deitzeko baimena ematen die aplikazioei. Horrela, ustekabeko gastuak edo deiak eragin daitezke. Asmo txarreko aplikazioek erabil dezakete zuk berretsi gabeko deiak eginda gastuak eragiteko."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Zuk ezer egin beharrik gabe, telefono-zenbakietara deitzeko baimena ematen die aplikazioei. Ondorioz, baliteke ustekabeko gastuak edo deiak eragitea. Kontuan izan aplikazioak ezingo duela deitu larrialdietarako zenbakietara. Zuk berretsi gabeko deiak eginda, asmo txarreko aplikazioek baimen hori erabil dezakete gastuak eragiteko edo operadore-kode jakin batzuk markatzeko, sarrerako deiak beste zenbaki batera automatikoki desbideratzeko asmoarekin."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"atzitu IMS dei-zerbitzua"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Zuk ezer egin beharrik gabe deiak egiteko IMS zerbitzua erabiltzeko baimena ematen die aplikazioei."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"irakurri telefonoaren egoera eta identitatea"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"NFC bidezko ordainketa-zerbitzu lehenetsiari buruzko informazioa jasotzeko baimena ematen die aplikazioei, hala nola erregistratutako laguntzaileak eta ibilbidearen helmuga."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"kontrolatu Near Field Communication komunikazioa"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Near Field Communication (NFC) etiketekin, txartelekin eta irakurgailuekin komunikatzeko baimena ematen die aplikazioei."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Elementu seguruetako transakzioen gertaerak"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Elementu seguru batean egiten ari diren transakzioei buruzko informazioa jasotzeko baimena ematen dio aplikazioari."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"desgaitu pantailaren blokeoa"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Teklen blokeoa eta erlazionatutako pasahitz-segurtasuna desgaitzeko baimena ematen die aplikazioei. Adibidez, telefonoak teklen blokeoa desgaitzen du telefono-deiak jasotzen dituenean, eta berriro gaitzen du deiak amaitzean."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"eskatu pantailaren blokeoa konplexua izatea"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Erabili sistema biometrikoak edo pantailaren blokeoa"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Egiaztatu zeu zarela"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Aurrera egiteko, erabili sistema biometrikoak"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Aurrera egiteko, erabili hatz-marka"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Aurrera egiteko, erabili aurpegia"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Aurrera egiteko, erabili sistema biometrikoak edo pantailaren blokeoa"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Hardware biometrikoa ez dago erabilgarri"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Utzi da autentifikazioa"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Ez da ezagutu"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Ez da ezagutu aurpegia"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Utzi egin da autentifikazioa"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Ez da ezarri PIN koderik, eredurik edo pasahitzik"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Errorea autentifikatzean"</string>
@@ -643,7 +650,7 @@
     <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Autentifikatu da aurpegia; sakatu Berretsi"</string>
     <string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hatz-marken hardwarea ez dago erabilgarri."</string>
     <string name="fingerprint_error_no_space" msgid="7285481581905967580">"Ezin da konfiguratu hatz-marka"</string>
-    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Gainditu egin da hatz-marka konfiguratzeko denbora-muga. Saiatu berriro."</string>
+    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Hatz-marka konfiguratzeko denbora-muga gainditu da. Saiatu berriro."</string>
     <string name="fingerprint_error_canceled" msgid="540026881380070750">"Hatz-markaren eragiketa bertan behera utzi da."</string>
     <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Erabiltzaileak bertan behera utzi du hatz-marka bidezko eragiketa."</string>
     <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Saiakera gehiegi egin dira. Erabili pantailaren blokeoa."</string>
@@ -666,9 +673,9 @@
     <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"Aurpegi bidez desblokeatzea"</string>
     <string name="face_recalibrate_notification_title" msgid="2524791952735579082">"Arazoak ditugu aurpegi bidez desblokeatzeko eginbidearekin"</string>
     <string name="face_recalibrate_notification_content" msgid="3064513770251355594">"Sakatu hau aurpegi-eredua ezabatzeko eta, gero, gehitu aurpegia berriro"</string>
-    <string name="face_setup_notification_title" msgid="8843461561970741790">"Konfiguratu aurpegi bidez desblokeatzeko eginbidea"</string>
+    <string name="face_setup_notification_title" msgid="8843461561970741790">"Konfiguratu Aurpegi bidez desblokeatzea"</string>
     <string name="face_setup_notification_content" msgid="5463999831057751676">"Telefonoa desblokeatzeko, begira iezaiozu"</string>
-    <string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"Aurpegi bidez desblokeatzeko aukera erabiltzeko, aktibatu "<b>"kamera erabiltzeko baimena"</b>" Ezarpenak &gt; Pribatutasuna atalean"</string>
+    <string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"Aurpegi bidez desblokeatzeko eginbidea erabiltzeko, aktibatu "<b>"kamera erabiltzeko baimena"</b>" Ezarpenak &gt; Pribatutasuna atalean"</string>
     <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Konfiguratu telefonoa desblokeatzeko modu gehiago"</string>
     <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Sakatu hau hatz-marka bat gehitzeko"</string>
     <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Hatz-marka bidez desblokeatzea"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Utzi da aurpegiaren bidezko eragiketa."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Erabiltzaileak aurpegi bidez desblokeatzeko aukera utzi du"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Saiakera gehiegi egin dituzu. Saiatu berriro geroago."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Saiakera gehiegi egin dira. Aurpegi bidez desblokeatzeko eginbidea ez dago erabilgarri."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Saiakera gehiegi egin dira. Horren ordez, erabili pantailaren blokeoa."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Ezin da egiaztatu aurpegia. Saiatu berriro."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Ez duzu konfiguratu aurpegi bidez desblokeatzeko eginbidea"</string>
@@ -978,7 +984,7 @@
     <string name="lockscreen_missing_sim_instructions" msgid="5823469004536805423">"Gehitu SIM bat."</string>
     <string name="lockscreen_missing_sim_instructions_long" msgid="4403843937236648032">"SIMa falta da, edo ezin da irakurri. Gehitu SIM bat."</string>
     <string name="lockscreen_permanent_disabled_sim_message_short" msgid="1925200607820809677">"Ezin da erabili SIMa."</string>
-    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="6902979937802238429">"Betiko desaktibatu da SIMa.\n Jarri harremanetan operadorearekin beste SIM bat eskuratzeko."</string>
+    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="6902979937802238429">"Betiko desaktibatu da SIMa.\n Jarri operadorearekin harremanetan beste SIM bat eskuratzeko."</string>
     <string name="lockscreen_transport_prev_description" msgid="2879469521751181478">"Aurreko pista"</string>
     <string name="lockscreen_transport_next_description" msgid="2931509904881099919">"Hurrengo pista"</string>
     <string name="lockscreen_transport_pause_description" msgid="6705284702135372494">"Pausatu"</string>
@@ -1043,7 +1049,7 @@
     <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"Aurpegi bidez desblokeatzea."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="4020864007967340068">"PIN kodearen bidez desblokeatzea."</string>
     <string name="keyguard_accessibility_sim_pin_unlock" msgid="4895939120871890557">"SIMa desblokeatzeko PINa."</string>
-    <string name="keyguard_accessibility_sim_puk_unlock" msgid="3459003464041899101">"SIM txartela desblokeatzeko PUK kodea."</string>
+    <string name="keyguard_accessibility_sim_puk_unlock" msgid="3459003464041899101">"SIMa desblokeatzeko PUK kodea."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="6130186108581153265">"Pasahitzaren bidez desblokeatzea."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="1419570880512350689">"Eredua marrazteko eremua."</string>
     <string name="keyguard_accessibility_slide_area" msgid="4331399051142520176">"Hatza lerratzeko eremua."</string>
@@ -1360,7 +1366,7 @@
     <string name="usb_supplying_notification_title" msgid="5378546632408101811">"Konektatutako gailua USB bidez kargatzen ari da"</string>
     <string name="usb_mtp_notification_title" msgid="1065989144124499810">"Aktibatuta dago USB bidezko fitxategi-transferentzia"</string>
     <string name="usb_ptp_notification_title" msgid="5043437571863443281">"Aktibatuta dago USB bidezko PTP modua"</string>
-    <string name="usb_tether_notification_title" msgid="8828527870612663771">"Aktibatuta dago USB bidez konexioa partekatzeko aukera"</string>
+    <string name="usb_tether_notification_title" msgid="8828527870612663771">"Aktibatuta dago konexioa USB bidez partekatzeko aukera"</string>
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"Aktibatuta dago USB bidezko MIDI modua"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Web-kamera gisa konektatu da gailua"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"USB osagarri bat konektatu da"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"BAZTERTU"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Aukeratu idazketa-metodoa"</string>
     <string name="show_ime" msgid="6406112007347443383">"Erakutsi pantailan teklatu fisikoa aktibo dagoen bitartean"</string>
-    <string name="hardware" msgid="1800597768237606953">"Erakutsi teklatu birtuala"</string>
+    <string name="hardware" msgid="3611039921284836033">"Erabili pantailako teklatua"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Konfiguratu <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Konfiguratu teklatu fisikoak"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Hizkuntza eta diseinua hautatzeko, sakatu hau"</string>
@@ -1681,16 +1687,14 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Kendu"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Bolumena gomendatutako mailatik gora igo nahi duzu?\n\nMusika bolumen handian eta denbora luzez entzuteak entzumena kalte diezazuke."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Abisua:\nEntzungailuen bidez astebetean segurtasun osoz entzun daitekeen soinu ozenen kopurua gainditu duzu.\n\nSoinu ozen gehiago entzuten jarraituz gero, entzumena kaltetuko duzu."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Abisua:\nEntzungailuen bidez astebetean segurtasun osoz entzun daitekeen soinu ozenen kopurua bost aldiz gainditu duzu.\n\nEntzumena babesteko, bolumena jaitsi da."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Multimedia-edukia entzuteko bolumena denbora luzez erabiliz gero, baliteke entzumena kaltetzea.\n\nMultimedia-edukia denbora luzez bolumen horretan entzuten jarraitzen baduzu, baliteke entzumena kaltetzea."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Abisua:\nSegurua ez den maila batean entzuten ari zara eduki ozena.\n\nEdukia bolumen horretan entzuten jarraitzen baduzu, baliteke entzumena kaltetzea."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Bolumen altuan entzuten jarraitu nahi duzu?\n\nEntzungailuen bolumena gomendatutako denboran baino gehiagoan eduki da ozen, eta baliteke horrek entzumena kaltetzea"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Soinu ozen bat hauteman da\n\nEntzungailuen bolumena gomendatutakoa baino ozenago eduki da, eta baliteke horrek entzumena kaltetzea"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Erabilerraztasun-lasterbidea erabili nahi duzu?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Lasterbidea aktibatuta dagoenean, bi bolumen-botoiak hiru segundoz sakatuta abiaraziko da erabilerraztasun-eginbidea."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Erabilerraztasun-eginbideetarako lasterbidea aktibatu nahi duzu?"</string>
     <string name="accessibility_shortcut_multiple_service_warning" msgid="3740723309483706911">"Eduki sakatuta bolumen-botoiak segundo batzuez erabilerraztasun-eginbideak aktibatzeko. Hori eginez gero, baliteke zure mugikorraren funtzionamendua aldatzea.\n\nEginbideak:\n<xliff:g id="SERVICE">%1$s</xliff:g>\nHautatutako eginbideak aldatzeko, joan Ezarpenak &gt; Erabilerraztasuna atalera."</string>
     <string name="accessibility_shortcut_multiple_service_list" msgid="2128323171922023762">" • <xliff:g id="SERVICE">%1$s</xliff:g>\n"</string>
-    <string name="accessibility_shortcut_single_service_warning_title" msgid="1909518473488345266">"<xliff:g id="SERVICE">%1$s</xliff:g> zerbitzuaren lasterbidea aktibatu nahi duzu?"</string>
+    <string name="accessibility_shortcut_single_service_warning_title" msgid="1909518473488345266">"<xliff:g id="SERVICE">%1$s</xliff:g> eginbidearen lasterbidea aktibatu nahi duzu?"</string>
     <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Eduki sakatuta bolumen-botoiak segundo batzuez <xliff:g id="SERVICE">%1$s</xliff:g> izeneko erabilerraztasun-eginbidea aktibatzeko. Honen bidez, baliteke zure mugikorraren funtzionamendua aldatzea.\n\nLasterbide hau beste eginbide batengatik aldatzeko, joan Ezarpenak &gt; Erabilerraztasuna atalera."</string>
     <string name="accessibility_shortcut_on" msgid="5463618449556111344">"Aktibatu"</string>
     <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Ez aktibatu"</string>
@@ -1712,11 +1716,11 @@
     <string name="done_accessibility_shortcut_menu_button" msgid="3668407723770815708">"Eginda"</string>
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Desaktibatu lasterbidea"</string>
     <string name="leave_accessibility_shortcut_on" msgid="6543362062336990814">"Erabili lasterbidea"</string>
-    <string name="color_inversion_feature_name" msgid="2672824491933264951">"Kolore-alderantzikatzea"</string>
+    <string name="color_inversion_feature_name" msgid="2672824491933264951">"Koloreen alderantzikatzea"</string>
     <string name="color_correction_feature_name" msgid="7975133554160979214">"Koloreen zuzenketa"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Esku bakarreko modua"</string>
     <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Are ilunago"</string>
-    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Audifonoak"</string>
+    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Entzumen-gailuak"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"Bolumen-botoiak sakatuta eduki direnez, <xliff:g id="SERVICE_NAME">%1$s</xliff:g> aktibatu egin da."</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"Bolumen-botoiak sakatuta eduki direnez, <xliff:g id="SERVICE_NAME">%1$s</xliff:g> desaktibatu egin da."</string>
     <string name="accessibility_shortcut_spoken_feedback" msgid="3760999147597564314">"Askatu bolumen-botoiak. <xliff:g id="SERVICE_NAME">%1$s</xliff:g> aktibatzeko, eduki sakatuta berriro bi bolumen-botoiak hiru segundoz."</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Irteteko, pasatu hatza goitik behera."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Ados"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Biratu pantaila ikuspegi hobea lortzeko"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Irten pantaila zatitutik ikuspegi hobea lortzeko"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Ireki <xliff:g id="NAME">%s</xliff:g> pantaila osoan eta ikuspegi hobea lortuko duzu"</string>
     <string name="done_label" msgid="7283767013231718521">"Eginda"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Ordua aukeratzeko ikuspegi zirkularra"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Minutuak aukeratzeko ikuspegi zirkularra"</string>
@@ -1927,9 +1931,9 @@
     <string name="call_notification_answer_video_action" msgid="2086030940195382249">"Bideoa"</string>
     <string name="call_notification_decline_action" msgid="3700345945214000726">"Baztertu"</string>
     <string name="call_notification_hang_up_action" msgid="9130720590159188131">"Amaitu deia"</string>
-    <string name="call_notification_incoming_text" msgid="6143109825406638201">"Jasotako deia"</string>
+    <string name="call_notification_incoming_text" msgid="6143109825406638201">"Sarrerako deia"</string>
     <string name="call_notification_ongoing_text" msgid="3880832933933020875">"Deia abian da"</string>
-    <string name="call_notification_screening_text" msgid="8396931408268940208">"Jasotako dei bat bistaratzen"</string>
+    <string name="call_notification_screening_text" msgid="8396931408268940208">"Sarrerako dei bat bistaratzen"</string>
     <string name="default_notification_channel_label" msgid="3697928973567217330">"Kategoriarik gabea"</string>
     <string name="importance_from_user" msgid="2782756722448800447">"Zuk ezarri duzu jakinarazpen hauen garrantzia."</string>
     <string name="importance_from_person" msgid="4235804979664465383">"Garrantzitsua da eragiten dien pertsonengatik."</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Aplikazioa ez dago erabilgarri"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ez dago erabilgarri une honetan."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ez dago erabilgarri"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Baimena behar da"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Baztertu da baimen-eskaera"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Baimen gehigarriak eskatzen ari da aplikazioa, baina ezin da eman baimenik igorpen-saioetan. Lehenik eta behin, eman baimena Android TV darabilen gailuan."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Baimen gehigarriak eskatzen ari da aplikazioa, baina ezin da eman baimenik igorpen-saioetan. Lehenik eta behin, eman baimena tabletan."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Baimen gehigarriak eskatzen ari da aplikazioa, baina ezin da eman baimenik igorpen-saioetan. Lehenik eta behin, eman baimena telefonoan."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Aplikazioa ezin da <xliff:g id="DEVICE">%1$s</xliff:g> erabilita atzitu. Gailu horren ordez, erabili telefonoa."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Android-en bertsio zaharrago baterako sortu da aplikazio hau. Baliteke behar bezala ez funtzionatzea, eta ez ditu barne hartzen azken segurtasun- eta pribatutasun-babesak. Begiratu ea eguneratzerik dagoen edo jarri aplikazioaren garatzailearekin harremanetan."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Bilatu eguneratzeak"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Aplikazio hau ez da Androiden azken bertsioarekin bateragarria. Begiratu ea eguneratzerik dagoen edo jarri aplikazioaren garatzailearekin harremanetan."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Mezu berriak dituzu"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Mezuak ikusteko, ireki SMSetarako aplikazioa"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Baliteke funtzio batzuk mugatuta egotea"</string>
@@ -2045,14 +2053,14 @@
     <string name="etws_primary_default_message_test" msgid="4583367373909549421">"Larrialdi-mezuen proba"</string>
     <string name="notification_reply_button_accessibility" msgid="5235776156579456126">"Erantzun"</string>
     <string name="etws_primary_default_message_others" msgid="7958161706019130739"></string>
-    <string name="mmcc_authentication_reject" msgid="4891965994643876369">"SIM txartela ezin da erabili ahotsa erabiltzeko"</string>
-    <string name="mmcc_imsi_unknown_in_hlr" msgid="227760698553988751">"SIM txartela ez dago hornituta ahotsa erabiltzeko"</string>
+    <string name="mmcc_authentication_reject" msgid="4891965994643876369">"SIMa ezin da erabili ahotsa erabiltzeko"</string>
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="227760698553988751">"SIMa ez dago hornituta ahotsa erabiltzeko"</string>
     <string name="mmcc_illegal_ms" msgid="7509650265233909445">"SIM txartela ezin da erabili ahotsa erabiltzeko"</string>
     <string name="mmcc_illegal_me" msgid="6505557881889904915">"Telefonoa ezin da erabili ahotsa erabiltzeko"</string>
-    <string name="mmcc_authentication_reject_msim_template" msgid="4480853038909922153">"Ezin da erabili <xliff:g id="SIMNUMBER">%d</xliff:g> SIM txartela"</string>
+    <string name="mmcc_authentication_reject_msim_template" msgid="4480853038909922153">"Ez da onartzen <xliff:g id="SIMNUMBER">%d</xliff:g> SIMa"</string>
     <string name="mmcc_imsi_unknown_in_hlr_msim_template" msgid="3688508325248599657">"Ez dago <xliff:g id="SIMNUMBER">%d</xliff:g> SIMik"</string>
-    <string name="mmcc_illegal_ms_msim_template" msgid="832644375774599327">"Ezin da erabili <xliff:g id="SIMNUMBER">%d</xliff:g> SIM txartela"</string>
-    <string name="mmcc_illegal_me_msim_template" msgid="4802735138861422802">"Ezin da erabili <xliff:g id="SIMNUMBER">%d</xliff:g> SIM txartela"</string>
+    <string name="mmcc_illegal_ms_msim_template" msgid="832644375774599327">"Ezin da erabili <xliff:g id="SIMNUMBER">%d</xliff:g> SIMa"</string>
+    <string name="mmcc_illegal_me_msim_template" msgid="4802735138861422802">"Ezin da erabili <xliff:g id="SIMNUMBER">%d</xliff:g> SIMa"</string>
     <string name="popup_window_default_title" msgid="6907717596694826919">"Leiho gainerakorra"</string>
     <string name="slice_more_content" msgid="3377367737876888459">"Beste <xliff:g id="NUMBER">%1$d</xliff:g>"</string>
     <string name="shortcut_restored_on_lower_version" msgid="9206301954024286063">"Aplikazioaren bertsio zaharrago batera aldatu da, edo aplikazioa ez da lasterbide honekin bateragarria"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Eduki hau ezin da laneko aplikazioekin ireki"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Eduki hau ezin da aplikazio pertsonalekin partekatu"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Eduki hau ezin da aplikazio pertsonalekin ireki"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Laneko profila pausatuta dago"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Sakatu aktibatzeko"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Pausatuta daude laneko aplikazioak"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Berraktibatu"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ez dago laneko aplikaziorik"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ez dago aplikazio pertsonalik"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Laneko <xliff:g id="APP">%s</xliff:g> aplikazioan ireki nahi duzu?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"<xliff:g id="APP">%s</xliff:g> pertsonalean ireki nahi duzu?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Laneko <xliff:g id="APP">%s</xliff:g> aplikazioan ireki nahi duzu?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Laneko aplikaziotik deitu nahi duzu?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Laneko aplikaziora aldatu nahi duzu?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Laneko aplikazioetatik soilik deitzeko baimena ematen du zure erakundeak"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Mezuak laneko aplikazioetatik soilik bidaltzeko baimena ematen du zure erakundeak"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Erabili arakatzaile pertsonala"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Erabili laneko arakatzailea"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Deitu"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Aldatu"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIMaren sarearen bidez desblokeatzeko PINa"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIMaren sareko azpimultzoaren bidez desblokeatzeko PINa"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Enpresaren SIMaren bidez desblokeatzeko PINa"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Ezin da atzitu telefonoaren kamera <xliff:g id="DEVICE">%1$s</xliff:g> gailutik"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Ezin da atzitu tabletaren kamera <xliff:g id="DEVICE">%1$s</xliff:g> gailutik"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Ezin da atzitu edukia hura igorri bitartean. Oraingo gailuaren ordez, erabili telefonoa."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Edukia zuzenean erreproduzitu bitartean ezin da pantaila txiki gainjarrian ikusi"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Sistemaren balio lehenetsia"</string>
     <string name="default_card_name" msgid="9198284935962911468">"<xliff:g id="CARDNUMBER">%d</xliff:g> TXARTELA"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Aplikazio osagarrien erloju-profilaren baimena erlojuak kudeatzeko"</string>
@@ -2327,9 +2341,9 @@
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Joan Ezarpenak atalera"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Desaktibatu"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"Konfiguratu da <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
-    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Ezarri da <xliff:g id="LAYOUT_1">%s</xliff:g> gisa teklatuaren diseinua. Diseinu hori aldatzeko, sakatu hau."</string>
-    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Ezarri da <xliff:g id="LAYOUT_1">%1$s</xliff:g> eta <xliff:g id="LAYOUT_2">%2$s</xliff:g> gisa teklatuaren diseinua. Diseinu hori aldatzeko, sakatu hau."</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Ezarri da <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> eta <xliff:g id="LAYOUT_3">%3$s</xliff:g> gisa teklatuaren diseinua. Diseinu hori aldatzeko, sakatu hau."</string>
+    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Ezarri da <xliff:g id="LAYOUT_1">%s</xliff:g>. Diseinu hori aldatzeko, sakatu hau."</string>
+    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Ezarri dira <xliff:g id="LAYOUT_1">%1$s</xliff:g> eta <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Diseinu horiek aldatzeko, sakatu hau."</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Ezarri dira <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> eta <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Diseinu horiek aldatzeko, sakatu hau."</string>
     <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Ezarri da <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> eta <xliff:g id="LAYOUT_3">%3$s</xliff:g> gisa teklatuaren diseinua… Diseinu hori aldatzeko, sakatu hau."</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"Konfiguratu dira teklatu fisikoak"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"Sakatu hau teklatuak ikusteko"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 81a98071..2a5f064 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -210,7 +210,7 @@
     <string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"روشن کردن"</string>
     <string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"تماس‌ها و پیام‌ها خاموش هستند"</string>
     <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"برنامه‌های کاری را موقتاً متوقف کرده‌اید. تماس یا پیامکی دریافت نخواهید کرد."</string>
-    <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"ازسرگیری برنامه‌های کاری"</string>
+    <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"لغو مکث برنامه‌های کاری"</string>
     <string name="me" msgid="6207584824693813140">"من"</string>
     <string name="power_dialog" product="tablet" msgid="8333207765671417261">"گزینه‌های رایانهٔ لوحی"</string>
     <string name="power_dialog" product="tv" msgid="7792839006640933763">"‏گزینه‌های Android TV"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"‏سیستم Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"جابه‌جا شدن به نمایه شخصی"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"رفتن به نمایه کاری"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"رفتن به نمایه شخصی <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"رفتن به نمایه کاری <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"مخاطبین"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"دسترسی به مخاطبین شما"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"مکان"</string>
@@ -391,7 +393,7 @@
     <string name="permdesc_killBackgroundProcesses" msgid="2357013583055434685">"به برنامه امکان می‌دهد به فرآیندهای پس‌زمینه سایر برنامه‌ها پایان دهد. این ممکن است باعث شود سایر برنامه‌ها متوقف شوند."</string>
     <string name="permlab_systemAlertWindow" msgid="5757218350944719065">"این برنامه می‌تواند روی برنامه‌های دیگر ظاهر شود"</string>
     <string name="permdesc_systemAlertWindow" msgid="1145660714855738308">"این برنامه می‌تواند روی برنامه‌های دیگر یا سایر قسمت‌های صفحه ظاهر شود. ممکن است در عملکرد معمول برنامه‌های دیگر اختلال ایجاد کند و شیوه نمایش آن‌ها را تغییر دهد."</string>
-    <string name="permlab_hideOverlayWindows" msgid="6382697828482271802">"پنهان کردن هم‌پوشانی برنامه‌های دیگر"</string>
+    <string name="permlab_hideOverlayWindows" msgid="6382697828482271802">"پنهان کردن رونهاد برنامه‌های دیگر"</string>
     <string name="permdesc_hideOverlayWindows" msgid="5660242821651958225">"این برنامه می‌تواند از سیستم بخواهد تا هم‌پوشانی‌های ایجادشده توسط برنامه‌های دیگر را روی برنامه نشان ندهد."</string>
     <string name="permlab_runInBackground" msgid="541863968571682785">"اجرا شدن در پس‌زمینه"</string>
     <string name="permdesc_runInBackground" msgid="4344539472115495141">"این برنامه می‌تواند در پس‌زمینه اجرا شود. ممکن است شارژ باتری زودتر مصرف شود."</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"‏به برنامه اجازه می‎دهد تا لرزاننده را کنترل کند."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"به برنامه اجازه می‌دهد تا به وضعیت لرزاننده دسترسی داشته باشد."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"تماس مستقیم با شماره تلفن‌ها"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"به برنامه اجازه می‌دهد بدون دخالت شما با شماره‌های تلفن تماس بگیرد. این ممکن است باعث ایجاد هزینه یا تماس‌های پیش‌بینی نشده شود. توجه داشته باشید که این به برنامه اجازه نمی‌دهد به برقراری تماس‌های اضطراری بپردازد. برنامه‌های مخرب ممکن است با برقراری تماس بدون تأیید شما هزینه‌هایی را برای شما ایجاد کنند."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"به این برنامه اجازه می‌دهد بدون دخالت شما با شماره‌های تلفن تماس بگیرد. این کار ممکن است باعث تماس‌ها یا کسر هزینه‌های غیرمنتظره شود. توجه داشته باشید این کار به برنامه اجازه نمی‌دهد با شماره‌های تلفن اضطراری تماس بگیرد. برنامه‌های مخرب ممکن است با برقراری تماس بدون تأیید شما، یا شماره‌گیری کدهای شرکت مخابراتی که باعث می‌شود تماس‌های ورودی به‌طور خودکار به شماره دیگری هدایت شود، برای شما هزینه‌هایی به‌بار آورد."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"‏دسترسی به سرویس تماس IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"‏به برنامه اجازه می‌دهد از سرویس IMS برای برقراری تماس‌ها بدون دخالت شما استفاده کند."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"خواندن وضعیت تلفن و شناسه"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"‏به برنامه اجازه می‌دهد اطلاعات ترجیحی سرویس پولی NFC، مانند کمک‌های ثبت‌شده و مقصد مسیر را دریافت کند."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"کنترل ارتباط راه نزدیک"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"‏به برنامه اجازه می‎دهد تا با تگ‌های NFC، کارت‌ها و فایل‌خوان ارتباط برقرار کند."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"‏رویداد تراکنش Secure Element"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"‏به برنامه اجازه می‌دهد اطلاعات مربوط به تراکنش‌هایی را که در Secure Element انجام می‌شود دریافت کند."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"غیرفعال کردن قفل صفحه شما"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"به برنامه امکان می‌دهد قفل کلید و هر گونه امنیت گذرواژه مرتبط را غیرفعال کند. به‌عنوان مثال تلفن هنگام دریافت یک تماس تلفنی ورودی قفل کلید را غیرفعال می‌کند و بعد از پایان تماس، قفل کلید را دوباره فعال می‌کند."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"درخواست پیچیدگی قفل صفحه"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"استفاده از زیست‌سنجشی یا قفل صفحه"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"تأیید کنید این شمایید"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"برای ادامه، از زیست‌سنجشی استفاده کنید"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"برای ادامه، از اثر انگشتتان استفاده کنید"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"برای ادامه، از چهره‌تان استفاده کنید"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"برای ادامه، از زیست‌سنجشی یا قفل صفحه استفاده کنید"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"سخت‌افزار زیست‌سنجی دردسترس نیست"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"اصالت‌سنجی لغو شد"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"شناسایی نشد"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"چهره شناسایی نشد"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"اصالت‌سنجی لغو شد"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"پین، الگو یا گذرواژه‌ای تنظیم نشده است"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"خطا هنگام اصالت‌سنجی"</string>
@@ -643,7 +650,7 @@
     <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"چهره اصالت‌سنجی شد، لطفاً تأیید را فشار دهید"</string>
     <string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"سخت‌افزار اثرانگشت در دسترس نیست."</string>
     <string name="fingerprint_error_no_space" msgid="7285481581905967580">"اثر انگشت راه‌اندازی نشد"</string>
-    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"مهلت راه‌اندازی اثر انگشت به‌پایان رسید. دوباره امتحان کنید."</string>
+    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"مهلت تنظیم اثر انگشت به‌پایان رسید. دوباره امتحان کنید."</string>
     <string name="fingerprint_error_canceled" msgid="540026881380070750">"عملکرد اثر انگشت لغو شد."</string>
     <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"کاربر عملیات اثر انگشت را لغو کرد"</string>
     <string name="fingerprint_error_lockout" msgid="6626753679019351368">"تلاش‌ها از حد مجاز بیشتر شده است. به‌جای آن از قفل صفحه استفاده کنید."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"عملیات شناسایی چهره لغو شد."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"کاربر «قفل‌گشایی با چهره» را لغو کرد"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"تعداد زیادی تلاش ناموفق. بعداً دوباره امتحان کنید."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"تعداد تلاش‌ها از حد مجاز بیشتر شده است. قفل‌گشایی با چهره دردسترس نیست."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"تلاش‌ها بیش از حدمجاز شده است. درعوض قفل صفحه را وارد کنید."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"چهره تأیید نشد. دوباره امتحان کنید."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"«قفل‌گشایی با چهره» را راه‌اندازی نکرده‌اید"</string>
@@ -1262,7 +1268,7 @@
     <string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"خاموش کردن صفحه"</string>
     <string name="fp_power_button_bp_negative_button" msgid="3971364246496775178">"ادامه"</string>
     <string name="heavy_weight_notification" msgid="8382784283600329576">"<xliff:g id="APP">%1$s</xliff:g> در حال اجرا"</string>
-    <string name="heavy_weight_notification_detail" msgid="6802247239468404078">"برای برگشت به بازی، ضربه بزنید"</string>
+    <string name="heavy_weight_notification_detail" msgid="6802247239468404078">"برای برگشتن به بازی، ضربه بزنید"</string>
     <string name="heavy_weight_switcher_title" msgid="3861984210040100886">"انتخاب بازی"</string>
     <string name="heavy_weight_switcher_text" msgid="6814316627367160126">"برای عملکرد بهتر، هربار فقط یکی از این بازی‌ها را می‌توان باز کرد."</string>
     <string name="old_app_action" msgid="725331621042848590">"به <xliff:g id="OLD_APP">%1$s</xliff:g> برگردید"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"نپذیرفتن"</string>
     <string name="select_input_method" msgid="3971267998568587025">"انتخاب روش ورودی"</string>
     <string name="show_ime" msgid="6406112007347443383">"وقتی صفحه‌کلید فیزیکی فعال است این ویرایشگر را روی صفحه نگه‌می‌دارد"</string>
-    <string name="hardware" msgid="1800597768237606953">"نمایش صفحه‌کلید مجازی"</string>
+    <string name="hardware" msgid="3611039921284836033">"استفاده از صفحه‌کلید مجازی"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"پیکربندی <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"پیکربندی صفحه‌کلیدهای فیزیکی"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"برای انتخاب زبان و چیدمان ضربه بزنید"</string>
@@ -1476,7 +1482,7 @@
     <string name="ime_action_default" msgid="8265027027659800121">"اجرا کردن"</string>
     <string name="dial_number_using" msgid="6060769078933953531">"شماره گیری \nبا استفاده از <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="create_contact_using" msgid="6200708808003692594">"ایجاد مخاطب\nبا استفاده از <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <string name="grant_credentials_permission_message_header" msgid="5365733888842570481">"یک یا چند برنامه زیر برای دسترسی به حساب شما در زمان حال و آینده درخواست مجوز کرده‌اند."</string>
+    <string name="grant_credentials_permission_message_header" msgid="5365733888842570481">"یک یا چند برنامه زیر برای دسترسی به حساب شما در زمان حال و آینده درخواست اجازه کرده‌اند."</string>
     <string name="grant_credentials_permission_message_footer" msgid="1886710210516246461">"می‌خواهید به این درخواست اجازه دهید؟"</string>
     <string name="grant_permissions_header_text" msgid="3420736827804657201">"درخواست دسترسی"</string>
     <string name="allow" msgid="6195617008611933762">"ارزیابی‌شده"</string>
@@ -1638,7 +1644,7 @@
     <string name="media_route_status_in_use" msgid="6684112905244944724">"در حال استفاده"</string>
     <string name="display_manager_built_in_display_name" msgid="1015775198829722440">"صفحه نمایش از خود"</string>
     <string name="display_manager_hdmi_display_name" msgid="1022758026251534975">"‏صفحه HDMI"</string>
-    <string name="display_manager_overlay_display_name" msgid="5306088205181005861">"هم‌پوشانی #<xliff:g id="ID">%1$d</xliff:g>"</string>
+    <string name="display_manager_overlay_display_name" msgid="5306088205181005861">"رونهاد #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="1480158037150469170">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="2810034719482834679">"، امن"</string>
     <string name="kg_forgot_pattern_button_text" msgid="406145459223122537">"الگو را فراموش کرده‌اید"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"حذف"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"میزان صدا را به بالاتر از حد توصیه شده افزایش می‌دهید؟\n\nگوش دادن به صداهای بلند برای مدت طولانی می‌تواند به شنوایی‌تان آسیب وارد کند."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"هشدار،\nشما از میزان صدای بلندی که انسان می‌تواند به‌طور ایمن در یک هفته ازطریق هدفون گوش دهد فراتر رفته‌اید.\n\nعبور از این حد به شنوایی شما آسیب می‌رساند."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"هشدار،\nشما از میزان صدای بلندی که انسان می‌تواند به‌طور ایمن در یک هفته ازطریق هدفون گوش دهد ۵ بار فراتر رفته‌اید.\n\nبرای محافظت از شنوایی شما، صدا کاهش یافته است."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"میزان صدایی که با آن به رسانه گوش می‌کنید درصورت ادامه در درازمدت می‌تواند منجر به آسیب به شنوایی شود.\n\nادامه پخش با این صدا برای مدت طولانی می‌تواند به شنوایی شما آسیب برساند."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"هشدار،\nمیزان صدای بلندِ محتوایی که الآن می‌شنوید خطرناک است.\n\nاگر با همین بلندی صدا ادامه دهید شنوایی‌تان برای همیشه آسیب خواهد دید."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"همچنان می‌خواهید با صدای بلند گوش کنید؟\n\nصدای هدفون برای مدتی طولانی‌تر از حد توصیه‌شده بلند بوده است. این موضوع می‌تواند به شنوایی شما آسیب بزند."</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"صدای بلند شناسایی شد\n\nصدای هدفون برای مدتی طولانی‌تر از حد توصیه‌شده بلند بوده است. این موضوع می‌تواند به شنوایی شما آسیب بزند."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"از میان‌بر دسترس‌پذیری استفاده شود؟"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"وقتی میان‌بر روشن باشد، با فشار دادن هردو دکمه صدا به‌مدت ۳ ثانیه ویژگی دسترس‌پذیری فعال می‌شود."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"میان‌بر برای ویژگی‌های دسترس‌پذیری روشن شود؟"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"برای خروج، انگشتتان را از بالای صفحه به پایین بکشید."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"متوجه شدم"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"برای دید بهتر، دستگاه را بچرخانید"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"برای دید بهتر، از صفحهٔ دونیمه خارج شوید"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"برای دید بهتر، <xliff:g id="NAME">%s</xliff:g> را به‌صورت تمام‌صفحه باز کنید"</string>
     <string name="done_label" msgid="7283767013231718521">"تمام"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"لغزنده دایره‌ای ساعت"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"لغزنده دایره‌ای دقیقه"</string>
@@ -1950,14 +1954,14 @@
     <string name="app_suspended_title" msgid="888873445010322650">"برنامه در دسترس نیست"</string>
     <string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> درحال‌حاضر در دسترس نیست. <xliff:g id="APP_NAME_1">%2$s</xliff:g> آن را مدیریت می‌کند."</string>
     <string name="app_suspended_more_details" msgid="211260942831587014">"بیشتر بدانید"</string>
-    <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"لغو توقف موقت برنامه"</string>
-    <string name="work_mode_off_title" msgid="6367463960165135829">"برنامه‌های کاری ازسر گرفته شود؟"</string>
-    <string name="work_mode_turn_on" msgid="5316648862401307800">"ازسرگیری"</string>
+    <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"لغو مکث برنامه"</string>
+    <string name="work_mode_off_title" msgid="6367463960165135829">"مکث برنامه‌های کاری لغو شود؟"</string>
+    <string name="work_mode_turn_on" msgid="5316648862401307800">"لغو مکث"</string>
     <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"اضطراری"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"برنامه در دسترس نیست"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> درحال‌حاضر در دسترس نیست."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> دردسترس نیست"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"اجازه لازم است"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"درخواست اجازه رد شد"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"‏این برنامه درخواست اجازه‌های اضافی دارد، اما امکان دادن این اجازه‌ها در جلسه جاری‌سازی وجود ندارد. ابتدا اجازه را در دستگاه Android TV مجاز کنید."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"این برنامه درخواست اجازه‌های اضافی دارد، اما امکان دادن این اجازه‌ها در جلسه جاری‌سازی وجود ندارد. ابتدا اجازه را در رایانه لوحی‌تان مجاز کنید."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"این برنامه درخواست اجازه‌های اضافی دارد، اما امکان دادن این اجازه‌ها در جلسه جاری‌سازی وجود ندارد. ابتدا اجازه را در تلفنتان مجاز کنید."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"‏این برنامه برای نسخه قدیمی‌تری از Android ساخته شده است. احتمال دارد به‌درستی کار نکند و شامل جدیدترین محافظت‌های حریم خصوصی و امنیت نمی‌شود. بررسی کنید به‌روزرسانی دردسترس باشد یا با توسعه‌دهنده برنامه تماس بگیرید."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"بررسی وجود به‌روزرسانی"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"‏این برنامه با جدیدترین نسخه Android سازگار نیست. بررسی کنید به‌روزرسانی دردسترس باشد یا با توسعه‌دهنده برنامه تماس بگیرید."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"پیام‌های جدیدی دارید"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"برای مشاهده، برنامه پیامک را باز کنید"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"برخی از عملکردها ممکن است محدود باشند"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"نمی‌توان این محتوا را با برنامه‌های کاری باز کرد"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"نمی‌توان این محتوا را با برنامه‌های شخصی هم‌رسانی کرد"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"نمی‌توان این محتوا را با برنامه‌های شخصی باز کرد"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"نمایه کاری موقتاً متوقف شده است"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"برای روشن کردن، ضربه بزنید"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"برنامه‌های کاری موقتاً متوقف شده است"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"لغو مکث"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"برنامه کاری‌ای وجود ندارد"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"برنامه شخصی‌ای وجود ندارد"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"‫<xliff:g id="APP">%s</xliff:g> کاری باز شود؟"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"در <xliff:g id="APP">%s</xliff:g> شخصی باز شود؟"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"در <xliff:g id="APP">%s</xliff:g> کاری باز شود؟"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"تماس ازطریق برنامه کاری برقرار شود؟"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"به برنامه کاری جابه‌جا شوید؟"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"سازمانتان به شما اجازه می‌دهد فقط ازطریق برنامه‌های کاری تماس بگیرید"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"سازمانتان به شما اجازه می‌دهد فقط ازطریق برنامه‌های کاری پیام ارسال کنید"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"استفاده از مرورگر شخصی"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"استفاده از مرورگر کاری"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"تماس گرفتن"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"عوض کردن"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"پین باز کردن قفل شبکه سیم‌کارت"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"پین باز کردن قفل زیرمجموعه شبکه سیم‌کارت"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"پین باز کردن قفل شرکت سیم‌کارت"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"از <xliff:g id="DEVICE">%1$s</xliff:g> به دوربین تلفن دسترسی ندارید"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"نمی‌توان از <xliff:g id="DEVICE">%1$s</xliff:g> شما به دوربین رایانه لوحی دسترسی داشت"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"درحین جاری‌سازی، نمی‌توانید به آن دسترسی داشته باشید. دسترسی به آن را در تلفنتان امتحان کنید."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"هنگام جاری‌سازی نمی‌توان تصویر در تصویر را مشاهده کرد"</string>
     <string name="system_locale_title" msgid="711882686834677268">"پیش‌فرض سیستم"</string>
     <string name="default_card_name" msgid="9198284935962911468">"کارت <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"اجازه نمایه «ساعت همراه» برای مدیریت ساعت‌ها"</string>
@@ -2317,16 +2331,16 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"به برنامه همراه اجازه می‌دهد سرویس‌های پیش‌نما را از پس‌زمینه راه‌اندازی کند."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"میکروفون دردسترس است"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"میکروفون مسدود شد"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"صفحه دوتایی"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"«صفحه دوتایی» روشن است"</string>
-    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> از هر دو نمایشگر برای نمایش محتوا استفاده می‌کند"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"‫Dual screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"‏‫Dual Screen روشن است"</string>
+    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"‫<xliff:g id="APP_NAME">%1$s</xliff:g> از هر دو نمایشگر برای نمایش محتوا استفاده می‌کند"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"دستگاه بیش‌ازحد گرم شده است"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"«صفحه دوتایی» دردسترس نیست زیرا تلفن بیش‌ازحد گرم شده است"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"‏‫Dual Screen دردسترس نیست زیرا تلفن بیش‌ازحد گرم شده است"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"‏Dual Screen دردسترس نیست"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"‏Dual Screen دردسترس نیست چون «بهینه‌سازی باتری» روشن است. می‌توانید این ویژگی را در «تنظیمات» خاموش کنید."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"رفتن به تنظیمات"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"خاموش کردن"</string>
-    <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> پیکربندی شد"</string>
+    <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"‫<xliff:g id="DEVICE_NAME">%s</xliff:g> پیکربندی شد"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"طرح‌بندی صفحه‌کلید روی <xliff:g id="LAYOUT_1">%s</xliff:g> تنظیم شد. برای تغییر دادن، ضربه بزنید."</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"طرح‌بندی صفحه‌کلید روی <xliff:g id="LAYOUT_1">%1$s</xliff:g>، <xliff:g id="LAYOUT_2">%2$s</xliff:g> تنظیم شد. برای تغییر دادن، ضربه بزنید."</string>
     <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"طرح‌بندی صفحه‌کلید روی <xliff:g id="LAYOUT_1">%1$s</xliff:g>، <xliff:g id="LAYOUT_2">%2$s</xliff:g>، <xliff:g id="LAYOUT_3">%3$s</xliff:g> تنظیم شد. برای تغییر دادن، ضربه بزنید."</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 1044eca..16c864c 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android-järjestelmä"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Vaihda henkilökohtaiseen profiiliin"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Vaihda työprofiiliin"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Siirry henkilökohtaiseen profiiliin: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Siirry työprofiiliin: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Yhteystiedot"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"pääsy yhteystietoihin"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Sijainti"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Antaa sovelluksen hallita värinää."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Sallii sovelluksen käyttää värinätilaa."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"soittaa puhelinnumeroihin suoraan"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Antaa sovelluksen soittaa puhelinnumeroihin kysymättä sinulta. Tämä voi aiheuttaa odottamattomia kuluja tai puheluita. Huomaa, että tämä ei anna sovellukselle lupaa soittaa hätänumeroihin. Haitalliset sovellukset voivat aiheuttaa sinulle kuluja soittamalla puheluita ilman lupaa."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Sallii sovelluksen soittaa puhelinnumeroihin ilman toimintaasi. Tämä voi johtaa odottamattomiin veloituksiin tai puheluihin. Huomaa, että tämä lupa ei anna sovelluksen soittaa hätänumeroihin. Haitalliset sovellukset voivat aiheuttaa rahallisia kuluja soittamalla puheluja ilman vahvistustasi tai käyttämällä operaattorikoodeja, joilla saapuvat puhelut siirretään automaattisesti toiseen numeroon."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"pikaviestipalvelun puhelukäyttöoikeus"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Antaa sovelluksen soittaa puheluita pikaviestipalvelun avulla ilman käyttäjän toimia."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"lue puhelimen tila ja identiteetti"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Sallii sovelluksen noutaa tietoja rekisteröidyistä sovellustunnuksista, maksureitin kohteesta ja muita ensisijaisia NFC-maksupalvelutietoja."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"hallitse Near Field Communication -tunnistusta"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Antaa sovelluksen kommunikoida NFC (Near Field Communication) -tagien, -korttien ja -lukijoiden kanssa."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Secure Element ‑maksutapahtuma"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Sallii sovelluksen vastaanottaa tietoa Secure Elementissä tapahtuvista maksutapahtumista."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"poista näytön lukitus käytöstä"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Antaa sovelluksen ottaa näppäinlukon ja siihen liittyvän salasanasuojauksen pois käytöstä. Esimerkki: puhelin poistaa näppäinlukon käytöstä puhelun saapuessa ja asettaa lukon takaisin käyttöön puhelun päättyessä."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"pyytää näytön lukituksen monimutkaisuutta"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Käytä biometriikkaa tai näytön lukitusta"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Vahvista henkilöllisyytesi"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Jatka käyttämällä biometriikkaa"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Jatka sormenjäljen avulla"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Jatka kasvojen avulla"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Jatka biometriikan tai näytön lukituksen avulla"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrinen laitteisto ei käytettävissä"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Todennus peruutettu"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Ei tunnistettu"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Kasvoja ei tunnistettu"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Todennus peruutettu"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN-koodia, kuviota tai salasanaa ei ole asetettu"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Virhe todennuksessa"</string>
@@ -627,7 +634,7 @@
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Sormenjälkeä ei voi tunnistaa. Yritä uudelleen."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Puhdista sormenjälkitunnistin ja yritä uudelleen"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Puhdista anturi ja yritä uudelleen"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Paina anturia voimakkaasti"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Paina tunnistinta voimakkaasti"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Liikutit sormea liian hitaasti. Yritä uudelleen."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Kokeile toista sormenjälkeä"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Liian kirkas"</string>
@@ -692,7 +699,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Katso suoremmin puhelimeen"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Katso suoremmin puhelimeen"</string>
     <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_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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Jokin peittää kasvot. Kasvojen täytyy näkyä kokonaan."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Kasvoja ei voi vahvistaa. Laitteisto ei käytettäv."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Kasvotoiminto peruutettu"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Käyttäjä perui kasvojentunnistusavauksen"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Liian monta yritystä. Yritä myöhemmin uudelleen."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Liikaa yrityksiä. Face Unlock ei saatavilla."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Liian monta yritystä. Lisää sen sijaan näytön lukitus."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Kasvoja ei voi vahvistaa. Yritä uudelleen."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Et ole ottanut käyttöön kasvojentunnistusavausta"</string>
@@ -1255,7 +1261,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Käynnistetään sovelluksia."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Viimeistellään päivitystä."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Painoit virtapainiketta, mikä yleensä sammuttaa näytön.\n\nKosketa painiketta kevyesti tallentaessasi sormenjälkeä."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Lopeta käyttöönotto sammuttamalla näyttö"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Lopeta sammuttamalla näyttö"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Laita pois päältä"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Jatketaanko sormenjäljen vahvistamista?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Painoit virtapainiketta, mikä yleensä sammuttaa näytön.\n\nVahvista sormenjälki koskettamalla painiketta kevyesti."</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"HYLKÄÄ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Valitse syöttötapa"</string>
     <string name="show_ime" msgid="6406112007347443383">"Pidä näytöllä, kun fyysinen näppäimistö on aktiivinen"</string>
-    <string name="hardware" msgid="1800597768237606953">"Näytä virtuaalinen näppäimistö"</string>
+    <string name="hardware" msgid="3611039921284836033">"Käytä näyttönäppäimistöä"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Määritä <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Määritä fyysiset näppäimistöt"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Valitse kieli ja asettelu koskettamalla."</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Poista"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Nostetaanko äänenvoimakkuus suositellun tason yläpuolelle?\n\nPitkäkestoinen kova äänenvoimakkuus saattaa heikentää kuuloa."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Varoitus,\nolet kuunnellut tällä viikolla enemmän äänekkäitä signaaleja kuin kuulokkeilla on turvallista.\n\nRajan ylittäminen vahingoittaa kuuloasi pysyvästi."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Varoitus,\nolet kuunnellut tällä viikolla viisi kertaa enemmän äänekkäitä signaaleja kuin kuulokkeilla on turvallista.\n\nÄänenvoimakkuutta on laskettu kuulosi suojaamiseksi."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Äänenvoimakkuus, jolla kuuntelet mediaa, voi ajan mittaan johtaa kuulovaurioihin.\n\nJos jatkat tällä äänenvoimakkuudella pitkään, kuulosi voi vaurioitua."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Varoitus,\nkuuntelet sisältöä äänenvoimakkuudella, joka ei ole turvallinen.\n\nTällä äänenvoimakkuudella jatkaminen voi vaurioittaa kuuloasi pysyvästi."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Haluatko jatkaa suurella äänenvoimakkuudella kuuntelua?\n\nKuulokkeiden äänenvoimakkuus on ollut suuri suositeltua pidemmän ajan, mikä voi vaurioittaa kuuloa"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Kova ääni havaittu\n\nKuulokkeiden äänenvoimakkuus on ollut suositeltua suurempi, mikä voi vaurioittaa kuuloa"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Käytetäänkö esteettömyyden pikanäppäintä?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Kun pikanäppäin on käytössä, voit käynnistää esteettömyystoiminnon pitämällä molempia äänenvoimakkuuspainikkeita painettuna kolmen sekunnin ajan."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Laitetaanko esteettömyysominaisuuksien pikavalinta päälle?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Sulje palkki pyyhkäisemällä alas ruudun ylälaidasta."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Selvä"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Kierrä, niin saat paremman näkymän"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Poistu jaetulta näytöltä, niin saat paremman näkymän"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Avaa <xliff:g id="NAME">%s</xliff:g>, niin saat paremman näkymän"</string>
     <string name="done_label" msgid="7283767013231718521">"Valmis"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Tuntien ympyränmuotoinen liukusäädin"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Minuuttien ympyränmuotoinen liukusäädin"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Sovellus ei ole käytettävissä"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ei ole nyt käytettävissä."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ei käytettävissä"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Edellyttää käyttöoikeutta"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Lupapyyntö estetty"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Sovellus pyytää lisälupia, mutta lupia ei voi myöntää striimatessa. Myönnä lupa ensin Android TV ‑laitteella."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Sovellus pyytää lisälupia, mutta lupia ei voi myöntää striimatessa. Myönnä lupa ensin tabletilla."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Sovellus pyytää lisälupia, mutta lupia ei voi myöntää striimatessa. Myönnä lupa ensin 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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"<xliff:g id="DEVICE">%1$s</xliff:g> ei saa pääsyä sovellukseen. Kokeile striimausta puhelimella."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Tämä sovellus on suunniteltu vanhemmalle Android-versiolle. Se ei välttämättä toimi oikein eikä sisällä uusimpia tietoturvan ja yksityisyyden suojauksia. Tarkista päivitykset tai ota yhteyttä sovelluksen kehittäjään."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Tarkista päivitykset"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Sovellus ei ole yhteensopiva uusimman Android-version kanssa. Tarkista päivitykset tai ota yhteyttä sovelluksen kehittäjään."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Sinulle on uusia viestejä"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Katso avaamalla tekstiviestisovellus."</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Osaa toiminnoista voidaan rajoittaa"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Tätä sisältöä ei voi avata työsovelluksilla"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Tätä sisältöä ei voi jakaa henkilökohtaisilla sovelluksilla"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Tätä sisältöä ei voi avata henkilökohtaisilla sovelluksilla"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Työprofiilin käyttö on keskeytetty"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Laita päälle napauttamalla"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Työsovellukset on keskeytetty"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Jatka"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ei työsovelluksia"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ei henkilökohtaisia sovelluksia"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Avataanko sisältö työprofiilissa (<xliff:g id="APP">%s</xliff:g>)?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Avataanko sisältö henkilökohtaisessa profiilissa (<xliff:g id="APP">%s</xliff:g>)?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Avataanko sisältö työprofiilissa (<xliff:g id="APP">%s</xliff:g>)?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Soitetaanko työsovelluksesta?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Vaihdetaanko työsovellukseen?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Organisaatio sallii soittamisen vain työsovelluksilla"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Organisaatio sallii viestien lähettämisen vain työsovelluksilla"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Käytä henkilökohtaista selainta"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Käytä työselainta"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Soita"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Vaihda"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM-kortin verkkoversion lukituksen avaamisen PIN-koodi"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM-kortin verkkoversion alijoukon lukituksen avaamisen PIN-koodi"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM-kortin yritysversion lukituksen avaamisen PIN-koodi"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"<xliff:g id="DEVICE">%1$s</xliff:g> ei pääse puhelimen kameraan"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"<xliff:g id="DEVICE">%1$s</xliff:g> ei pääse tabletin kameraan"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Sisältöön ei saa pääsyä striimauksen aikana. Kokeile striimausta puhelimella."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Pikkuruutua ei voi nähdä striimauksen aikana"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Järjestelmän oletusarvo"</string>
     <string name="default_card_name" msgid="9198284935962911468">"Kortti: <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Kumppanin kelloprofiilin hallintalupa"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 27c2c9a..60575ad 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -211,7 +211,7 @@
     <string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Activer"</string>
     <string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Les appels et messages sont désactivés"</string>
     <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Vous avez mis en pause les applications professionnelles. Vous ne recevrez aucun appel téléphonique ni message texte."</string>
-    <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Réact. applis prof."</string>
+    <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Réact. applis pros"</string>
     <string name="me" msgid="6207584824693813140">"Moi"</string>
     <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Options de la tablette"</string>
     <string name="power_dialog" product="tv" msgid="7792839006640933763">"Options d\'Android TV"</string>
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Système Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Passer au profil personnel"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Passer au profil professionnel"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Passer à <xliff:g id="APP_NAME">%1$s</xliff:g> dans le profil personnel"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Passer à <xliff:g id="APP_NAME">%1$s</xliff:g> dans le profil professionnel"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"accéder à vos contacts"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Localisation"</string>
@@ -310,14 +312,14 @@
     <string name="permgrouplab_storage" msgid="17339216290379241">"Fichiers"</string>
     <string name="permgroupdesc_storage" msgid="5378659041354582769">"accéder aux fichiers sur votre appareil"</string>
     <string name="permgrouplab_readMediaAural" msgid="1858331312624942053">"Musique et audio"</string>
-    <string name="permgroupdesc_readMediaAural" msgid="7565467343667089595">"accédez aux fichiers musicaux et audio sur votre appareil"</string>
+    <string name="permgroupdesc_readMediaAural" msgid="7565467343667089595">"accéder aux fichiers musicaux et audio sur votre appareil"</string>
     <string name="permgrouplab_readMediaVisual" msgid="4724874717811908660">"Photos et vidéos"</string>
-    <string name="permgroupdesc_readMediaVisual" msgid="4080463241903508688">"accédez aux photos et aux vidéos sur votre appareil"</string>
+    <string name="permgroupdesc_readMediaVisual" msgid="4080463241903508688">"accéder aux photos et aux vidéos sur votre appareil"</string>
     <string name="permgrouplab_microphone" msgid="2480597427667420076">"Microphone"</string>
     <string name="permgroupdesc_microphone" msgid="1047786732792487722">"enregistrer des fichiers audio"</string>
     <string name="permgrouplab_activityRecognition" msgid="3324466667921775766">"Activité physique"</string>
     <string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"accéder à vos activités physiques"</string>
-    <string name="permgrouplab_camera" msgid="9090413408963547706">"Appareil photo"</string>
+    <string name="permgrouplab_camera" msgid="9090413408963547706">"appareil photo"</string>
     <string name="permgroupdesc_camera" msgid="7585150538459320326">"prendre des photos et filmer des vidéos"</string>
     <string name="permgrouplab_nearby_devices" msgid="5529147543651181991">"Appareils à proximité"</string>
     <string name="permgroupdesc_nearby_devices" msgid="3213561597116913508">"découvrir les appareils à proximité et s\'y connecter"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Permet à l\'application de gérer le vibreur de l\'appareil."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permet à l\'application d\'accéder au mode vibration."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"appeler directement des numéros de téléphone"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Permet à l\'application d\'appeler des numéros de téléphone sans votre intervention. Cette autorisation peut entraîner des frais ou des appels imprévus et ne permet pas à l\'application d\'appeler des numéros d\'urgence. Des applications malveillantes peuvent générer des frais en passant des appels sans votre consentement."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Autorisez l\'application à appeler des numéros de téléphone sans votre intervention. Cela peut entraîner des frais ou des appels imprévus. Notez aussi que cela ne permet pas à l\'application d\'appeler des numéros d\'urgence. Des applications malveillantes peuvent engendrer des frais en passant des appels sans votre confirmation ou en composant des codes de fournisseurs de service qui transfèrent automatiquement des appels entrants vers un autre numéro."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"accéder au service d\'appel IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permet à l\'application d\'utiliser le service IMS pour faire des appels sans votre intervention."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"voir l\'état et l\'identité du téléphone"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permet à l\'application d\'obtenir de l\'information sur le service préféré de paiement CCP comme les aides enregistrées et la route de destination."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"gérer la communication en champ proche"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Permet à l\'application de communiquer avec des bornes, des cartes et des lecteurs compatibles avec la technologie CCP (communication en champ proche)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Événement de transaction relatif à un élément sécurisé"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Autorise l\'application à recevoir des informations relatives aux transactions effectuées sur un élément sécurisé."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"désactiver le verrouillage de l\'écran"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Permet à l\'application de désactiver le verrouillage des touches et toute mesure de sécurité par mot de passe associée. Par exemple, votre téléphone désactive le verrouillage des touches lorsque vous recevez un appel, puis le réactive lorsque vous raccrochez."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"demander la complexité du verrouillage d\'écran"</string>
@@ -615,10 +619,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Utiliser les données biométriques ou le verrouillage de l\'écran"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Confirmez que c\'est vous"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Utilisez votre méthode d\'authentification biométrique pour continuer"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Utilisez votre empreinte digitale pour continuer"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Utilisez votre visage pour continuer"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Utilisez vos données biométriques ou le verrouillage de l\'écran pour continuer"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Matériel biométrique indisponible"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Authentification annulée"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Données biométriques non reconnues"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Visage non reconnu"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Authentification annulée"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Aucun NIP, schéma ou mot de passe défini"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Erreur d\'authentification"</string>
@@ -667,7 +674,7 @@
     <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"Déverrouillage par reconnaissance faciale"</string>
     <string name="face_recalibrate_notification_title" msgid="2524791952735579082">"Problème avec la fonctionnalité de déverrouillage par reconnaissance faciale"</string>
     <string name="face_recalibrate_notification_content" msgid="3064513770251355594">"Touchez pour supprimer votre modèle facial, puis ajoutez votre visage de nouveau"</string>
-    <string name="face_setup_notification_title" msgid="8843461561970741790">"Configurer le déverrouillage par reconnaissance faciale"</string>
+    <string name="face_setup_notification_title" msgid="8843461561970741790">"Configurer le Déverrouillage par reconnaissance faciale"</string>
     <string name="face_setup_notification_content" msgid="5463999831057751676">"Déverrouillez votre téléphone en le regardant"</string>
     <string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"Pour utiliser le déverrouillage par reconnaissance faciale, activez l\'"<b>"accès à l\'appareil photo"</b>" dans Paramètres &gt; Confidentialité"</string>
     <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Configurer d\'autres méthodes de déverrouillage"</string>
@@ -685,14 +692,14 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Déplacez le téléphone vers la gauche"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Déplacez le téléphone vers la droite"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Veuillez regarder plus directement votre appareil."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Impossible de voir votre visage. Tenez votre téléphone à la hauteur des yeux."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Visage non détecté. Tenez votre téléphone à hauteur des yeux."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Trop de mouvement. Tenez le téléphone immobile."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Veuillez inscrire votre visage à nouveau."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Visage non reconnu. Réessayez."</string>
     <string name="face_acquired_too_similar" msgid="8882920552674125694">"Modifiez légèrement la position de votre tête"</string>
-    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Regardez plus directement votre téléphone"</string>
-    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Regardez plus directement votre téléphone"</string>
-    <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Regardez plus directement votre téléphone"</string>
+    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Regardez droit dans le téléphone"</string>
+    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Regardez droit dans le téléphone"</string>
+    <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Regardez droit dans le 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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
@@ -701,7 +708,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Couvre-visage détecté. Montrez votre visage entier."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Imposs. de vérif. visage. Matériel non accessible."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Opération de reconnaissance du visage annulée."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Le déverrouillage par reconnaissance faciale a été annulé"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Trop de tentatives. Veuillez réessayer plus tard."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Trop de tentatives. Le déverrouillage par reconnaissance faciale est inaccessible."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Trop de tentatives. Entrez plutôt le verrouillage de l\'écran."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Impossible de vérifier le visage. Réessayez."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Déverrouillage par reconnaissance faciale non configuré"</string>
@@ -1393,7 +1399,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"REFUSER"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Sélectionnez le mode de saisie"</string>
     <string name="show_ime" msgid="6406112007347443383">"Afficher lorsque le clavier physique est activé"</string>
-    <string name="hardware" msgid="1800597768237606953">"Afficher le clavier virtuel"</string>
+    <string name="hardware" msgid="3611039921284836033">"Utiliser le clavier à l\'écran"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configurer <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configurer les claviers physiques"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Touchez pour sélectionner la langue et la configuration du clavier"</string>
@@ -1663,7 +1669,7 @@
     <string name="kg_login_instructions" msgid="3619844310339066827">"Pour déverrouiller l\'appareil, connectez-vous avec votre compte Google."</string>
     <string name="kg_login_username_hint" msgid="1765453775467133251">"Nom d\'utilisateur (courriel)"</string>
     <string name="kg_login_password_hint" msgid="3330530727273164402">"Mot de passe"</string>
-    <string name="kg_login_submit_button" msgid="893611277617096870">"Connexion"</string>
+    <string name="kg_login_submit_button" msgid="893611277617096870">"Se connecter"</string>
     <string name="kg_login_invalid_input" msgid="8292367491901220210">"Nom d\'utilisateur ou mot de passe non valide."</string>
     <string name="kg_login_account_recovery_hint" msgid="4892466171043541248">"Vous avez oublié votre nom d\'utilisateur ou votre mot de passe?\nRendez-vous sur la page "<b>"google.com/accounts/recovery"</b>"."</string>
     <string name="kg_login_checking_password" msgid="4676010303243317253">"Vérification du compte en cours…"</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Supprimer"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Augmenter le volume au-dessus du niveau recommandé?\n\nL\'écoute prolongée à un volume élevé peut endommager vos facultés auditives."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Avertissement,\nVous avez dépassé la quantité de signaux sonores forts hebdomadaire à laquelle vous pouvez être exposé sans danger avec des écouteurs.\n\nLe dépassement de cette limite endommagera votre audition de façon permanente."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Avertissement,\nVous avez dépassé de cinq fois la quantité de signaux sonores forts hebdomadaire à laquelle vous pouvez être exposé sans danger avec des écouteurs.\n\nLe volume a été baissé pour protéger votre audition."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Le niveau auquel vous écoutez le contenu multimédia peut entraîner des dommages auditifs s\'il est maintenu sur une durée prolongée.\n\nVous risquez d\'endommager votre audition si vous continuez l\'écoute à ce niveau sur une durée prolongée."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Avertissement,\nVous écoutez actuellement un contenu dont le niveau sonore élevé est dangereux.\n\nSi vous continuez à écouter à ce niveau, vous endommagerez votre audition de façon permanente."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Continuer à écouter à un volume élevé?\n\nLe niveau du volume des écouteurs est resté élevé au-delà de la durée recommandée, ce qui peut endommager votre audition"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Son fort détecté\n\nLe niveau du volume des écouteurs est plus élevé que celui recommandé, ce qui peut endommager votre audition"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Utiliser le raccourci d\'accessibilité?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Quand le raccourci est activé, appuyez sur les deux boutons de volume pendant trois secondes pour lancer une fonctionnalité d\'accessibilité."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Activer le raccourci pour les fonctionnalités d\'accessibilité?"</string>
@@ -1729,7 +1733,7 @@
     <string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"Pour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec trois doigts et maintenez-les-y."</string>
     <string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Agrandissement"</string>
     <string name="user_switched" msgid="7249833311585228097">"Utilisateur actuel : <xliff:g id="NAME">%1$s</xliff:g>"</string>
-    <string name="user_switching_message" msgid="1912993630661332336">"Passage au profil : <xliff:g id="NAME">%1$s</xliff:g>…"</string>
+    <string name="user_switching_message" msgid="1912993630661332336">"Passage au profil : <xliff:g id="NAME">%1$s</xliff:g> en cours…"</string>
     <string name="user_logging_out_message" msgid="7216437629179710359">"Déconnexion de <xliff:g id="NAME">%1$s</xliff:g> en cours..."</string>
     <string name="owner_name" msgid="8713560351570795743">"Propriétaire"</string>
     <string name="guest_name" msgid="8502103277839834324">"Invité"</string>
@@ -1852,7 +1856,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Pour quitter, balayez vers le bas à partir du haut."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"OK"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Faire pivoter pour obtenir un meilleur affichage"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Quitter l\'écran partagé pour obtenir un meilleur affichage"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Ouvrir <xliff:g id="NAME">%s</xliff:g> en plein écran pour un meilleur affichage"</string>
     <string name="done_label" msgid="7283767013231718521">"Terminé"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Curseur circulaire des heures"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Curseur circulaire des minutes"</string>
@@ -1952,13 +1956,13 @@
     <string name="app_suspended_default_message" msgid="6451215678552004172">"L\'application <xliff:g id="APP_NAME_0">%1$s</xliff:g> n\'est pas accessible pour le moment. Ceci est géré par <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
     <string name="app_suspended_more_details" msgid="211260942831587014">"En savoir plus"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Réactiver l\'application"</string>
-    <string name="work_mode_off_title" msgid="6367463960165135829">"Réactiver les applis prof.?"</string>
+    <string name="work_mode_off_title" msgid="6367463960165135829">"Réactiver les applis pros?"</string>
     <string name="work_mode_turn_on" msgid="5316648862401307800">"Réactiver"</string>
     <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Urgence"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"L\'application n\'est pas accessible"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> n\'est pas accessible pour le moment."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> non accessible"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Autorisation nécessaire"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"La demande d\'autorisation a été supprimée."</string>
     <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>
@@ -1969,6 +1973,9 @@
     <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Impossible d\'accéder à ce contenu sur votre <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 <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 <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_permission_request" product="tv" msgid="4706276040125072077">"Cette application demande des autorisations supplémentaires, mais les autorisations ne peuvent pas être accordées lors d\'une session de diffusion en continu. Accordez l\'autorisation sur votre appareil Android TV d\'abord."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Cette application demande des autorisations supplémentaires, mais les autorisations ne peuvent pas être accordées lors d\'une session de diffusion en continu. Accordez l\'autorisation sur votre tablette d\'abord."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Cette application demande des autorisations supplémentaires, mais les autorisations ne peuvent pas être accordées lors d\'une session de diffusion en continu. Accordez l\'autorisation sur votre téléphone d\'abord."</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>
@@ -1977,6 +1984,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Impossible d\'accéder à ce contenu sur votre <xliff:g id="DEVICE">%1$s</xliff:g>. Essayez sur votre téléphone à la place."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Cette application a été conçue pour une ancienne version d\'Android. Elle pourrait ne pas fonctionner correctement, et ne comprend pas les dernières protections des données confidentielles et de sécurité. Vérifiez s\'il existe une mise à jour ou contactez le développeur de l\'application."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Vérifier la présence de mises à jour"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Cette application n\'est pas compatible avec la dernière version d\'Android. Vérifiez s\'il existe une mise à jour ou communiquez avec le développeur de l\'application."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Vous avez de nouveaux messages"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Ouvrez l\'application de messagerie texte pour l\'afficher"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Des fonctionnalités sont limitées"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Impossible d\'ouvrir ce contenu avec des applications professionnelles"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Impossible de partager ce contenu avec des applications personnelles"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Impossible d\'ouvrir ce contenu avec des applications personnelles"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Le profil professionnel est interrompu"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Touchez pour activer"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Les applications professionnelles sont interrompues"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Réactiver"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Aucune application professionnelle"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Aucune application personnelle"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Ouvrir le profil professionnel de <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Ouvrir <xliff:g id="APP">%s</xliff:g> dans le profil personnel?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Ouvrir <xliff:g id="APP">%s</xliff:g> dans le profil professionnel?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Appeler à partir de l\'application professionnelle?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Passer à l\'application professionnelle?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Votre organisation vous autorise à passer des appels uniquement à partir d\'applications professionnelles"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Votre organisation vous autorise à envoyer des messages uniquement à partir d\'applications professionnelles"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Utiliser le navigateur du profil personnel"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Utiliser le navigateur du profil professionnel"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Appeler"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Changer"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"NIP de déverrouillage du réseau associé au module SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"NIP de déverrouillage du sous-ensemble du réseau associé au module SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"NIP de déverrouillage du module SIM professionnel"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Impossible d\'accéder à l\'appareil photo du téléphone à partir de votre <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Impossible d\'accéder à l\'appareil photo de la tablette à partir de votre <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Vous ne pouvez pas y accéder lorsque vous utilisez la diffusion en continu. Essayez sur votre téléphone à la place."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Impossible d\'afficher des incrustations d\'image pendant une diffusion en continu"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Paramètre système par défaut"</string>
     <string name="default_card_name" msgid="9198284935962911468">"CARTE <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Autorisation du profil de la montre de l\'application compagnon pour gérer les montres"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index e47589e..0edaac5 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -211,7 +211,7 @@
     <string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Activer"</string>
     <string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"Les appels et messages sont désactivés"</string>
     <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"Vous avez suspendu les applis professionnelles. Vous ne recevrez pas d\'appels ni de messages."</string>
-    <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Réactiver les applis professionnelles"</string>
+    <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"Réact. apps pro"</string>
     <string name="me" msgid="6207584824693813140">"Moi"</string>
     <string name="power_dialog" product="tablet" msgid="8333207765671417261">"Options de la tablette"</string>
     <string name="power_dialog" product="tv" msgid="7792839006640933763">"Options Android TV"</string>
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Système Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Passer au profil personnel"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Passer au profil pro"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Passer au <xliff:g id="APP_NAME">%1$s</xliff:g> personnel"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Passer au <xliff:g id="APP_NAME">%1$s</xliff:g> professionnel"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"accéder à vos contacts"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Position"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Permet à l\'application de contrôler le vibreur."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permet à l\'application d\'accéder à l\'état du vibreur."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"appeler directement les numéros de téléphone"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Permet à l\'application d\'appeler des numéros de téléphone sans votre intervention. Cette autorisation peut entraîner des frais ou des appels imprévus et ne permet pas à l\'application d\'appeler des numéros d\'urgence. Les applications malveillantes peuvent générer des frais en passant des appels sans votre consentement."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Permet à l\'appli de composer des numéros de téléphone sans votre intervention. Cela peut entraîner des frais ou des appels inattendus. Notez que cette autorisation ne permet pas à l\'appli d\'appeler des numéros d\'urgence. Les applis malveillantes peuvent engendrer des frais en passant des appels sans votre confirmation ou en composant des codes d\'opérateur qui transfèrent automatiquement des appels entrants vers un autre numéro."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"accéder au service d\'appel IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permet à l\'application d\'utiliser le service IMS pour passer des appels sans votre intervention."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"Voir l\'état et l\'identité du téléphone"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permet à l\'application d\'obtenir des informations sur le service de paiement NFC préféré, y compris les ID d\'applications et les destinations de routage enregistrés."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"contrôler la communication en champ proche"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Permet à l\'application de communiquer avec des tags, des cartes et des lecteurs compatibles avec la technologie NFC (communication en champ proche)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Événement de transaction sur un composant sécurisé"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Permet à l\'appli de recevoir des informations sur les transactions qui ont lieu sur un composant sécurisé."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"Désactiver le verrouillage de l\'écran"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Permet à l\'application de désactiver le verrouillage des touches et toute mesure de sécurité via mot de passe associée. Par exemple, votre téléphone désactive le verrouillage des touches lorsque vous recevez un appel, puis le réactive lorsque vous raccrochez."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"demander la complexité du verrouillage de l\'écran"</string>
@@ -615,20 +619,23 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Utiliser la biométrie ou le verrouillage de l\'écran"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Confirmez votre identité"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Utilisez la biométrie pour continuer"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Utilisez votre empreinte digitale pour continuer"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Utilisez la reconnaissance faciale pour continuer"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Utilisez la biométrie ou le verrouillage de l\'écran pour continuer"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Matériel biométrique indisponible"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Authentification annulée"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Non reconnue"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Visage non reconnu"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Authentification annulée"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Aucun code, schéma ni mot de passe n\'est défini"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Erreur d\'authentification"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Utiliser verrouillage écran"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Utilisez le verrouillage de l\'écran pour continuer"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Appuyez bien sur le lecteur"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Appuyez fermement sur le lecteur"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Impossible de reconnaître l\'empreinte digitale. Réessayez."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Nettoyez le lecteur d\'empreinte digitale et réessayez"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Nettoyez le lecteur et réessayez"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Appuyez bien sur le lecteur"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Appuyez fermement sur le lecteur"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Vous avez déplacé votre doigt trop lentement. Veuillez réessayer."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Essayez une autre empreinte"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Trop de lumière"</string>
@@ -680,20 +687,20 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"Lumière insuffisante"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Éloignez le téléphone."</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Rapprochez le téléphone"</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"Déplacez le téléphone vers le haut"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"Levez le téléphone"</string>
     <string name="face_acquired_too_low" msgid="4075391872960840081">"Déplacez le téléphone vers le bas"</string>
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Déplacez le téléphone vers la gauche"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Déplacez le téléphone vers la droite"</string>
-    <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Veuillez regarder plus directement l\'appareil."</string>
+    <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Mettez-vous bien de face et regardez l\'appareil."</string>
     <string name="face_acquired_not_detected" msgid="1057966913397548150">"Visage non détecté. Tenez votre téléphone à hauteur des yeux."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Trop de mouvement. Ne bougez pas le téléphone."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Veuillez enregistrer à nouveau votre visage."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Visage non reconnu. Réessayez."</string>
     <string name="face_acquired_too_similar" msgid="8882920552674125694">"Déplacez légèrement votre tête."</string>
-    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Regardez plus directement votre téléphone"</string>
-    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Centrez bien votre visage devant votre téléphone"</string>
-    <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_pan_too_extreme" msgid="5417928604710621088">"Mettez-vous bien de face et regardez le téléphone"</string>
+    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Mettez-vous bien de face et regardez le téléphone"</string>
+    <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Mettez-vous bien de face et regardez le 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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -701,7 +708,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Visage partiellement couvert. Votre visage doit être entièrement visible."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Imposs. valider visage. Matériel non disponible."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Opération de reconnaissance faciale annulée."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Déverrouillage par reconnaissance faciale annulé par l\'utilisateur"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Trop de tentatives. Réessayez plus tard."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Trop de tentatives. Déverrouillage par reconnaissance faciale indisponible."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Tentatives trop nombreuses. Utilisez le verrouillage de l\'écran."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Impossible de valider votre visage. Réessayez."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Déverrouillage par reconnaissance faciale non configuré"</string>
@@ -1256,7 +1262,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Lancement des applications…"</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Finalisation de la mise à jour."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Vous avez appuyé sur le bouton Marche/Arrêt, ce qui éteint généralement l\'écran.\n\nEssayez d\'appuyer doucement pendant la configuration de votre empreinte digitale."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Éteindre l\'écran pour achever la config."</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Éteignez l\'écran pour finir la config."</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Éteindre"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continuer de valider votre empreinte ?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Vous avez appuyé sur le bouton Marche/Arrêt, ce qui éteint généralement l\'écran.\n\nPour valider votre empreinte digitale, appuyez plus doucement."</string>
@@ -1365,7 +1371,7 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"MIDI via USB activé"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Appareil connecté en tant que webcam"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"Accessoire USB connecté"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"Appuyez ici pour plus d\'options."</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"Appuyez pour plus d\'options."</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Recharge de l\'appareil connecté. Appuyez ici pour plus d\'options."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Accessoire audio analogique détecté"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"L\'appareil connecté n\'est pas compatible avec ce téléphone. Appuyez ici pour en savoir plus."</string>
@@ -1393,10 +1399,10 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"REFUSER"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Sélectionnez le mode de saisie"</string>
     <string name="show_ime" msgid="6406112007347443383">"Afficher le clavier virtuel même lorsque le clavier physique est actif"</string>
-    <string name="hardware" msgid="1800597768237606953">"Afficher le clavier virtuel"</string>
+    <string name="hardware" msgid="3611039921284836033">"Utiliser le clavier à l\'écran"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configurer <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configurez les claviers physiques"</string>
-    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Appuyer pour sélectionner la langue et la disposition"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Appuyez pour sélectionner la langue et la disposition"</string>
     <string name="fast_scroll_alphabet" msgid="8854435958703888376">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="fast_scroll_numeric_alphabet" msgid="2529539945421557329">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"Afficher par-dessus les autres applications"</string>
@@ -1619,7 +1625,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"Tablette"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Téléviseur"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Téléphone"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Haut-parleurs de la station d\'accueil"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Haut-parleur de la station de recharge"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Appareil externe"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Écouteurs"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1644,9 +1650,9 @@
     <string name="display_manager_overlay_display_secure_suffix" msgid="2810034719482834679">", sécurisé"</string>
     <string name="kg_forgot_pattern_button_text" msgid="406145459223122537">"J\'ai oublié le schéma"</string>
     <string name="kg_wrong_pattern" msgid="1342812634464179931">"Schéma incorrect."</string>
-    <string name="kg_wrong_password" msgid="2384677900494439426">"Mot de passe incorrect."</string>
+    <string name="kg_wrong_password" msgid="2384677900494439426">"Mot de passe incorrect"</string>
     <string name="kg_wrong_pin" msgid="3680925703673166482">"Code PIN incorrect."</string>
-    <string name="kg_pattern_instructions" msgid="8366024510502517748">"Dessinez votre schéma."</string>
+    <string name="kg_pattern_instructions" msgid="8366024510502517748">"Tracez votre schéma"</string>
     <string name="kg_sim_pin_instructions" msgid="6479401489471690359">"Saisissez le code PIN de la carte SIM."</string>
     <string name="kg_pin_instructions" msgid="7355933174673539021">"Saisissez le code PIN."</string>
     <string name="kg_password_instructions" msgid="7179782578809398050">"Saisissez votre mot de passe."</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Supprimer"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Augmenter le volume au dessus du niveau recommandé ?\n\nL\'écoute prolongée à un volume élevé peut endommager vos facultés auditives."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Attention,\nVous avez dépassé la dose hebdomadaire de bruit élevé que vous pouvez écouter sans danger via un casque.\n\nDépasser cette limite endommagera définitivement votre audition."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Attention,\nVous avez dépassé 5 fois la dose hebdomadaire de bruit élevé que vous pouvez écouter sans danger via un casque.\n\nLe volume a été réduit pour protéger votre audition."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Le volume auquel vous écoutez du contenu multimédia peut endommager votre audition s\'il est maintenu pendant une longue période.\n\nSi vous continuez d\'écouter du contenu à ce volume pendant de longues périodes, vous risquez d\'endommager votre audition."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Attention,\nVous écoutez actuellement du contenu à un volume sonore dangereux.\n\nPoursuivre l\'écoute à un volume si élevé endommagera définitivement votre audition."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Continuer d\'écouter à un volume élevé ?\n\nLe volume du casque est élevé depuis plus longtemps que recommandé, ce qui peut endommager votre audition"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Bruit fort détecté\n\nLe volume du casque est élevé depuis plus longtemps que recommandé, ce qui peut endommager votre audition"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Utiliser le raccourci d\'accessibilité ?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Quand le raccourci est activé, appuyez sur les deux boutons de volume pendant trois secondes pour démarrer une fonctionnalité d\'accessibilité."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Activer le raccourci pour accéder aux fonctionnalités d\'accessibilité ?"</string>
@@ -1699,9 +1703,9 @@
     <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"DÉSACTIVÉE"</string>
     <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Accorder le contrôle total de votre appareil à <xliff:g id="SERVICE">%1$s</xliff:g> ?"</string>
     <string name="accessibility_service_warning_description" msgid="291674995220940133">"Le contrôle total convient aux applications qui répondent à vos besoins d\'accessibilité. Il ne convient pas à la plupart des autres applications."</string>
-    <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Afficher et contrôler l\'écran"</string>
+    <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Voir et contrôler l\'écran"</string>
     <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"Le service peut lire l\'intégralité du contenu à l\'écran et afficher du contenu par-dessus d\'autres applications."</string>
-    <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"Afficher et effectuer des actions"</string>
+    <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"Voir et effectuer des actions"</string>
     <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"Le service peut suivre vos interactions avec une application ou un capteur matériel, et interagir avec des applications de votre part."</string>
     <string name="accessibility_dialog_button_allow" msgid="2092558122987144530">"Autoriser"</string>
     <string name="accessibility_dialog_button_deny" msgid="4129575637812472671">"Refuser"</string>
@@ -1717,7 +1721,7 @@
     <string name="color_correction_feature_name" msgid="7975133554160979214">"Correction des couleurs"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Mode une main"</string>
     <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Encore moins lumineux"</string>
-    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Prothèses auditives"</string>
+    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Appareils auditifs"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"Touches de volume appuyées de manière prolongée. Service <xliff:g id="SERVICE_NAME">%1$s</xliff:g> activé."</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"Touches de volume appuyées de manière prolongée. Service <xliff:g id="SERVICE_NAME">%1$s</xliff:g> désactivé."</string>
     <string name="accessibility_shortcut_spoken_feedback" msgid="3760999147597564314">"Relâchez les boutons de volume. Pour activer <xliff:g id="SERVICE_NAME">%1$s</xliff:g>, appuyez de nouveau sur les deux boutons de volume pendant trois secondes."</string>
@@ -1852,7 +1856,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Pour quitter, balayez l\'écran du haut vers le bas."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"OK"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Faites pivoter pour mieux voir"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Quittez l\'écran partagé pour mieux voir"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Ouvrez <xliff:g id="NAME">%s</xliff:g> en plein écran pour mieux voir"</string>
     <string name="done_label" msgid="7283767013231718521">"OK"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Curseur circulaire des heures"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Curseur circulaire des minutes"</string>
@@ -1888,7 +1892,7 @@
     <string name="zen_mode_until_next_day" msgid="1403042784161725038">"Jusqu\'à <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_until" msgid="2250286190237669079">"Jusqu\'à <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_alarm" msgid="7046911727540499275">"Jusqu\'à <xliff:g id="FORMATTEDTIME">%1$s</xliff:g> (alarme suivante)"</string>
-    <string name="zen_mode_forever" msgid="740585666364912448">"Jusqu\'à la désactivation"</string>
+    <string name="zen_mode_forever" msgid="740585666364912448">"Jusqu\'à ce que vous le désactiviez"</string>
     <string name="zen_mode_forever_dnd" msgid="3423201955704180067">"Jusqu\'à ce que vous désactiviez la fonctionnalité \"Ne pas déranger\""</string>
     <string name="zen_mode_rule_name_combination" msgid="7174598364351313725">"<xliff:g id="FIRST">%1$s</xliff:g>/<xliff:g id="REST">%2$s</xliff:g>"</string>
     <string name="toolbar_collapse_description" msgid="8009920446193610996">"Réduire"</string>
@@ -1958,7 +1962,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Application non disponible"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> n\'est pas disponible pour le moment."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> indisponible"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Autorisation nécessaire"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Demande d\'autorisation supprimée"</string>
     <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>
@@ -1969,6 +1973,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Cette appli demande des autorisations supplémentaires, mais il est impossible d\'accorder des autorisations lors d\'une session de streaming. Accordez tout d\'abord l\'autorisation sur votre appareil Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Cette appli demande des autorisations supplémentaires, mais il est impossible d\'accorder des autorisations lors d\'une session de streaming. Accordez tout d\'abord l\'autorisation sur votre tablette."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Cette appli demande des autorisations supplémentaires, mais il est impossible d\'accorder des autorisations lors d\'une session de streaming. Accordez tout d\'abord l\'autorisation 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>
@@ -1977,6 +1984,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Impossible d\'accéder à ces paramètres sur votre <xliff:g id="DEVICE">%1$s</xliff:g>. Essayez plutôt sur votre téléphone."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Cette appli a été conçue pour une ancienne version d\'Android. Elle risque de ne pas fonctionner correctement et n\'inclut pas les derniers dispositifs de sécurité et de protection de la confidentialité. Recherchez une mise à jour ou contactez le développeur de l\'appli."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Rechercher une mise à jour"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Cette appli n\'est pas compatible avec la dernière version d\'Android. Recherchez une mise à jour ou contactez le développeur de l\'appli."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Vous avez de nouveaux messages"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Ouvrir l\'application de SMS pour afficher le message"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Des fonctions peuvent être limitées"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Impossible d\'ouvrir ce contenu avec des applis professionnelles"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Impossible de partager ce contenu avec des applis personnelles"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Impossible d\'ouvrir ce contenu avec des applis personnelles"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Profil professionnel en pause"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Appuyez pour l\'activer"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Les applis professionnelles sont en pause"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Réactiver"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Aucune appli professionnelle"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Aucune appli personnelle"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Ouvrir <xliff:g id="APP">%s</xliff:g> (professionnel) ?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Ouvrir dans <xliff:g id="APP">%s</xliff:g> (personnel) ?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Ouvrir dans <xliff:g id="APP">%s</xliff:g> (professionnel) ?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Appeler depuis une appli professionnelle ?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Passer à une appli professionnelle ?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Votre organisation ne vous autorise à passer des appels que depuis des applis professionnelles"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Votre organisation ne vous autorise à envoyer des messages que depuis des applis professionnelles"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Utiliser le navigateur personnel"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Utiliser le navigateur professionnel"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Appeler"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Changer"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Code PIN de déblocage du réseau SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Code PIN de déblocage du sous-ensemble du réseau SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Code PIN de déblocage de la carte SIM d\'entreprise"</string>
@@ -2287,7 +2300,7 @@
     <string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Activer dans les paramètres"</string>
     <string name="dismiss_action" msgid="1728820550388704784">"Fermer"</string>
     <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Débloquer le micro de l\'appareil"</string>
-    <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Débloquer l\'appareil photo de l\'appareil"</string>
+    <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Débloquer la caméra de l\'appareil"</string>
     <string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"Pour &lt;b&gt;<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; et tous les services et applis"</string>
     <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Débloquer"</string>
     <string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"Confidentialité du capteur"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Impossible d\'accéder à l\'appareil photo du téléphone depuis votre <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Impossible d\'accéder à l\'appareil photo de la tablette depuis votre <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Impossible d\'accéder à cela pendant le streaming. Essayez plutôt sur votre téléphone."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Impossible d\'afficher Picture-in-picture pendant le streaming"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Paramètre système par défaut"</string>
     <string name="default_card_name" msgid="9198284935962911468">"CARTE <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Autorisation du profil de la montre associée pour gérer des montres"</string>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index 36219e0..e672b2f 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -256,7 +256,7 @@
     <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"Usa esta opción na maioría das circunstancias. Permíteche realizar un seguimento do progreso do informe, introducir máis detalles sobre o problema e facer capturas de pantalla. É posible que omita algunhas seccións menos usadas para as que se tarda máis en facer o informe."</string>
     <string name="bugreport_option_full_title" msgid="7681035745950045690">"Informe completo"</string>
     <string name="bugreport_option_full_summary" msgid="1975130009258435885">"Usa esta opción para que a interferencia sexa mínima cando o teu dispositivo non responda ou funcione demasiado lento, ou ben cando precises todas as seccións do informe. Non poderás introducir máis detalles nin facer máis capturas de pantalla."</string>
-    <string name="bugreport_countdown" msgid="6418620521782120755">"{count,plural, =1{Vaise facer unha captura de pantalla para o informe de erro dentro de # segundo.}other{Vaise facer unha captura de pantalla para o informe de erro dentro de # segundos.}}"</string>
+    <string name="bugreport_countdown" msgid="6418620521782120755">"{count,plural, =1{Vaise facer unha captura de pantalla para o informe de erros dentro de # segundo.}other{Vaise facer unha captura de pantalla para o informe de erros dentro de # segundos.}}"</string>
     <string name="bugreport_screenshot_success_toast" msgid="7986095104151473745">"Realizouse a captura de pantalla co informe de erros"</string>
     <string name="bugreport_screenshot_failure_toast" msgid="6736320861311294294">"Produciuse un erro ao realizar a captura de pantalla co informe de erros"</string>
     <string name="global_action_toggle_silent_mode" msgid="8464352592860372188">"Modo silencioso"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Cambiar ao perfil persoal"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Cambiar ao perfil de traballo"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Cambiar ao perfil persoal de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Cambiar ao perfil de traballo de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contactos"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"acceder aos teus contactos"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Localización"</string>
@@ -310,7 +312,7 @@
     <string name="permgroupdesc_storage" msgid="5378659041354582769">"acceder a ficheiros no teu dispositivo"</string>
     <string name="permgrouplab_readMediaAural" msgid="1858331312624942053">"Música e audio"</string>
     <string name="permgroupdesc_readMediaAural" msgid="7565467343667089595">"acceder a música e audio do dispositivo"</string>
-    <string name="permgrouplab_readMediaVisual" msgid="4724874717811908660">"Fotos e vídeos"</string>
+    <string name="permgrouplab_readMediaVisual" msgid="4724874717811908660">"fotos e vídeos"</string>
     <string name="permgroupdesc_readMediaVisual" msgid="4080463241903508688">"acceder a fotos e vídeos do dispositivo"</string>
     <string name="permgrouplab_microphone" msgid="2480597427667420076">"Micrófono"</string>
     <string name="permgroupdesc_microphone" msgid="1047786732792487722">"gravar audio"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite á aplicación controlar o vibrador."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que a aplicación acceda ao estado de vibrador"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"chamar directamente aos números de teléfono"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Permite á aplicación chamar a números de teléfono sen a túa intervención. Esta acción pode implicar chamadas ou custos inesperados. Ten en conta que isto non permite á aplicación chamar a números de emerxencia. É posible que aplicacións maliciosas che custen diñeiro debido á realización de chamadas sen a túa confirmación."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Permite que a aplicación chame a números de teléfono sen a túa intervención. En consecuencia, poderías recibir chamadas ou cargos inesperados. Ten en conta que a aplicación non poderá chamar a números de emerxencias. As aplicacións maliciosas poden facer chamadas que che ocasionen gastos sen a túa confirmación ou marcar códigos de operadores que provoquen que as chamadas entrantes se desvíen de forma automática a outro número."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"acceso ao servizo de chamadas de IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permite que a aplicación use o servizo de IMS para facer chamadas sen a túa intervención."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ler o estado e a identidade do teléfono"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permite que a aplicación obteña información do servizo de pago de NFC preferido, como as axudas rexistradas e o destino da ruta."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"controlar Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Permite á aplicación comunicarse con etiquetas, tarxetas e lectores Near Field Communication (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Evento de transacción no elemento seguro"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Permite que a aplicación reciba información sobre transaccións que ocorran nun elemento seguro."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"desactivar o bloqueo da pantalla"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Permite á aplicación desactivar o bloqueo do teclado e calquera seguranza dos contrasinais asociada. Por exemplo, o teléfono desactiva o bloqueo do teclado ao recibir unha chamada telefónica entrante e, a continuación, volve activar o bloqueo do teclado unha vez finalizada a chamada."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"solicitar o nivel de complexidade do bloqueo de pantalla"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Utilizar desbloqueo biométrico ou credencial do dispositivo"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifica que es ti"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Para continuar, utiliza o desbloqueo biométrico"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Usa a impresión dixital para continuar"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Usa o recoñecemento facial para continuar"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Para continuar, utiliza o desbloqueo biométrico ou o bloqueo de pantalla"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"O hardware biométrico non está dispoñible"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Cancelouse a autenticación"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Non se recoñeceu"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Non se recoñeceu a cara"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Cancelouse a autenticación"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Non se estableceu ningún PIN, padrón ou contrasinal"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Produciuse un erro ao realizar a autenticación"</string>
@@ -643,7 +650,7 @@
     <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Autenticouse a cara, preme Confirmar"</string>
     <string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardware de impresión dixital non dispoñible."</string>
     <string name="fingerprint_error_no_space" msgid="7285481581905967580">"Non se puido configurar a impresión dixital"</string>
-    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Esgotouse o tempo para configurar a impresión dixital Téntao de novo."</string>
+    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Esgotouse o tempo para configurar a impresión dixital. Téntao de novo."</string>
     <string name="fingerprint_error_canceled" msgid="540026881380070750">"Cancelouse a operación da impresión dixital."</string>
     <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"O usuario cancelou a operación da impresión dixital."</string>
     <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Houbo demasiados intentos. Mellor usa o bloqueo de pantalla."</string>
@@ -684,7 +691,7 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Move o teléfono cara á esquerda"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Move o teléfono cara á dereita"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Mira o dispositivo de forma máis directa."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Non se pode ver a túa cara. Coloca o teléfono á altura dos ollos."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Non se che ve a cara. Pon o teléfono diante dos ollos"</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Demasiado movemento. Non movas o teléfono."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Volve rexistrar a túa cara."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Non se recoñeceu a cara. Téntao de novo."</string>
@@ -692,15 +699,15 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Mira o teléfono de forma máis directa"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Mira o teléfono de forma máis directa"</string>
     <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_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>
     <!-- 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>
+    <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Levas lentes escuras, pero débeseche ver toda a cara"</string>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Tes a cara tapada; tense que ver enteira"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Sen verificar a cara. Hardware non dispoñible."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Cancelouse a operación relacionada coa cara"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"O usuario cancelou o desbloqueo facial"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Demasiados intentos. Téntao de novo máis tarde."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Houbo demasiados intentos. O desbloqueo facial non está dispoñible."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Realizaches demasiados intentos. Mellor usa o bloqueo de pantalla."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Non se puido verificar a cara. Téntao de novo."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Non configuraches o desbloqueo facial"</string>
@@ -1255,8 +1261,8 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Iniciando aplicacións."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Está finalizando o arranque"</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Premiches o botón de acendido, o que adoita facer que se apague a pantalla.\n\nProba a dar un toque suave namentres configuras a impresión dixital."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Apaga a pantalla e acaba a configuración"</string>
-    <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Desactivar"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Para rematar, apaga a pantalla"</string>
+    <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Apagar"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Queres seguir verificando a impresión?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Premiches o botón de acendido, o que adoita facer que se apague a pantalla.\n\nProba a dar un toque suave para verificar a impresión dixital."</string>
     <string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Desactivar pantalla"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ANULAR"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Escoller método de introdución de texto"</string>
     <string name="show_ime" msgid="6406112007347443383">"Móstrase na pantalla mentres o teclado físico estea activo"</string>
-    <string name="hardware" msgid="1800597768237606953">"Mostrar teclado virtual"</string>
+    <string name="hardware" msgid="3611039921284836033">"Utilizar o teclado en pantalla"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configura o teclado (<xliff:g id="DEVICE_NAME">%s</xliff:g>)"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configura os teclados físicos"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Toca para seleccionar o idioma e o deseño"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Quitar"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Queres subir o volume máis do nivel recomendado?\n\nA reprodución de son a un volume elevado durante moito tempo pode provocar danos nos oídos."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Advertencia:\nSuperaches a cantidade de sinais acústicos elevados que podes escoitar de forma segura con auriculares nunha semana.\n\nSe superas este límite, os teus oídos quedarán danados permanentemente."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Advertencia:\nSuperaches 5 veces a cantidade de sinais acústicos elevados que podes escoitar de forma segura con auriculares nunha semana.\n\nBaixouse o volume para protexer os teus oídos."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"O nivel ao que escoitas o contido multimedia pode causar danos auditivos se o mantés durante longos períodos de tempo.\n\nSe segues reproducindo audio a este nivel de volume durante moito tempo, poderían danárseche os oídos."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Advertencia:\nEstás escoitando contido a un nivel de volume perigoso.\n\nSe segues escoitando audio a este nivel de volume, os teus oídos quedarán danados permanentemente."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Queres seguir escoitando contido cun volume alto?\n\nUsaches os auriculares cun volume alto durante máis tempo do recomendado, o que podería provocarche danos auditivos"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Detectouse son alto\n\nUsaches os auriculares cun volume máis alto do recomendado, o que podería provocarche danos auditivos"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Queres utilizar o atallo de accesibilidade?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Cando o atallo está activado, podes premer os dous botóns de volume durante 3 segundos para iniciar unha función de accesibilidade."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Queres activar as funcións de accesibilidade?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Para saír, pasa o dedo cara abaixo desde a parte superior."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Entendido"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Xira a pantalla para que se vexa mellor"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Sae da pantalla dividida para que se vexa mellor"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Abre <xliff:g id="NAME">%s</xliff:g> en pantalla completa para unha mellor visualización"</string>
     <string name="done_label" msgid="7283767013231718521">"Feito"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Control desprazable circular das horas"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Control desprazable circular dos minutos"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"A aplicación non está dispoñible"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"A aplicación <xliff:g id="APP_NAME">%1$s</xliff:g> non está dispoñible neste momento."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> non está dispoñible"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Necesítase permiso"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Eliminouse a solicitude de permiso"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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 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_permission_request" product="tv" msgid="4706276040125072077">"Esta aplicación solicita permisos adicionais, pero non se poden conceder nunha sesión de reprodución en tempo real. Primeiro tes que conceder o permiso no teu dispositivo Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Esta aplicación solicita permisos adicionais, pero non se poden conceder nunha sesión de reprodución en tempo real. Primeiro tes que conceder o permiso na túa tableta."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Esta aplicación solicita permisos adicionais, pero non se poden conceder nunha sesión de reprodución en tempo real. Primeiro tes que conceder o permiso no teu 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 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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"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="deprecated_target_sdk_message" msgid="5246906284426844596">"Esta aplicación deseñouse para unha versión anterior de Android. Quizais non funcione correctamente e non inclúa as últimas medidas de protección de privacidade e seguranza. Comproba se hai actualizacións ou ponte en contacto co programador da aplicación."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Buscar actualización"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Esta aplicación non é compatible coa última versión de Android. Comproba se hai actualizacións ou ponte en contacto co programador da aplicación."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tes mensaxes novas"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Abre a aplicación de SMS para ver as mensaxes"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Pode haber funcións limitadas"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Este contido non pode abrirse con aplicacións do traballo"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Este contido non pode compartirse con aplicacións persoais"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Este contido non pode abrirse con aplicacións persoais"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"O perfil de traballo está en pausa"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Tocar para activar o perfil"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Puxéronse en pausa as aplicacións do traballo"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Reactivar"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Non hai ningunha aplicación do traballo compatible"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Non hai ningunha aplicación persoal compatible"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Queres abrir a aplicación <xliff:g id="APP">%s</xliff:g> do traballo?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Queres abrir o contido na aplicación <xliff:g id="APP">%s</xliff:g> persoal?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Queres abrir o contido na aplicación <xliff:g id="APP">%s</xliff:g> do traballo?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Queres chamar desde a aplicación do traballo?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Queres cambiar á aplicación do traballo?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"A túa organización só che permite chamar desde aplicacións do traballo"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"A túa organización só che permite enviar mensaxes desde aplicacións do traballo"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Utilizar navegador persoal"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Utilizar navegador de traballo"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Chamar"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Cambiar"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN de desbloqueo da rede SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN de desbloqueo do subconxunto da rede SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN de desbloqueo corporativo da SIM"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Non se puido acceder á cámara do teléfono desde o teu dispositivo (<xliff:g id="DEVICE">%1$s</xliff:g>)"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Non se puido acceder á cámara da tableta desde o teu dispositivo (<xliff:g id="DEVICE">%1$s</xliff:g>)"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Non se puido acceder a este contido durante a reprodución en tempo real. Téntao desde o teléfono."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Non se pode ver un vídeo en pantalla superposta mentres se reproduce en tempo real"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Opción predeterminada do sistema"</string>
     <string name="default_card_name" msgid="9198284935962911468">"TARXETA <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Permiso de perfil de Companion Watch para xestionar reloxos"</string>
@@ -2317,11 +2331,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Permite que unha aplicación complementaria, desde un segundo plano, inicie servizos en primeiro plano."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"O micrófono está dispoñible"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"O micrófono está bloqueado"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Pantalla dual"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"A pantalla dual está activada"</string>
-    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"A aplicación <xliff:g id="APP_NAME">%1$s</xliff:g> está usando ambas as pantallas para mostrar contido"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen está activada"</string>
+    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> está usando ambas as pantallas para mostrar contido"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"O dispositivo está demasiado quente"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"A pantalla dual non está dispoñible porque o teléfono está quentando demasiado"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dual Screen non está dispoñible porque o teléfono está quentando demasiado"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen non está dispoñible"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screen non está dispoñible porque a opción Aforro de batería está activado. Podes desactivar esta función en Configuración."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Ir a Configuración"</string>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index 3229741..05c839b 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -219,7 +219,7 @@
     <string name="turn_on_radio" msgid="2961717788170634233">"વાયરલેસ ચાલુ કરો"</string>
     <string name="turn_off_radio" msgid="7222573978109933360">"વાયરલેસ બંધ કરો"</string>
     <string name="screen_lock" msgid="2072642720826409809">"સ્ક્રીન લૉક કરો"</string>
-    <string name="power_off" msgid="4111692782492232778">"પાવર બંધ"</string>
+    <string name="power_off" msgid="4111692782492232778">"પાવર બંધ કરો"</string>
     <string name="silent_mode_silent" msgid="5079789070221150912">"રિંગર બંધ"</string>
     <string name="silent_mode_vibrate" msgid="8821830448369552678">"રિંગર વાઇબ્રેટ"</string>
     <string name="silent_mode_ring" msgid="6039011004781526678">"રિંગર ચાલુ"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android સિસ્ટમ"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"વ્યક્તિગત પ્રોફાઇલ પર સ્વિચ કરો"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"કાર્યાલયની પ્રોફાઇલ પર સ્વિચ કરો"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"વ્યક્તિગત <xliff:g id="APP_NAME">%1$s</xliff:g> પર સ્વિચ કરો"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"ઑફિસની <xliff:g id="APP_NAME">%1$s</xliff:g> પર સ્વિચ કરો"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"સંપર્કો"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"તમારા સંપર્કોને ઍક્સેસ કરવાની"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"લોકેશન"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"એપ્લિકેશનને વાઇબ્રેટરને નિયંત્રિત કરવાની મંજૂરી આપે છે."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ઍપને વાઇબ્રેટર સ્થિતિને ઍક્સેસ કરવાની મંજૂરી આપે છે."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"સીધા જ ફોન નંબર્સ પર કૉલ કરો"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"એપ્લિકેશનને તમારા હસ્તક્ષેપ વિના ફોન નંબર્સ પર કૉલ કરવાની મંજૂરી આપે છે. આ અનપેક્ષિત શુલ્ક અથવા કૉલ્સમાં પરિણમી શકે છે. નોંધો કે આ એપ્લિકેશનને કટોકટીના નંબર્સ પર કૉલ કરવાની મંજૂરી આપતું નથી. દુર્ભાવનાપૂર્ણ ઍપ્લિકેશનો તમારી પુષ્ટિ વિના કૉલ્સ કરીને તમારા પૈસા ખર્ચ કરી શકે છે."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"ઍપને તમારા હસ્તક્ષેપ વિના ફોન નંબર પર કૉલ કરવાની મંજૂરી આપે છે. આનું પરિણામ અનપેક્ષિત શુલ્ક અથવા કૉલ હોઈ શકે છે. નોંધ કરજો કે આનાથી ઍપને ઇમર્જન્સી નંબર પર કૉલ કરવાની મંજૂરી મળતી નથી. દુર્ભાવનાપૂર્ણ ઍપ તમારા કન્ફર્મેશન વિના કૉલ કરીને તમારા પૈસા ખર્ચી શકે છે અથવા તે મોબાઇલ ઑપરેટરના કોડ ડાયલ કરી શકે છે, જેના કારણે ઇનકમિંગ કૉલ ઑટોમૅટિક રીતે બીજા નંબર પર ફૉરવર્ડ થાય છે."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS કૉલ સેવા ઍક્સેસ કરો"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"તમારા હસ્તક્ષેપ વગર કૉલ્સ કરવા માટે IMS સેવાનો ઉપયોગ કરવાની એપ્લિકેશનને મંજૂરી આપે છે."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ફોન સ્થિતિ અને ઓળખ વાંચો"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"આ મંજૂરીને આપવાથી, ઍપ તમારી પસંદગીની NFC ચુકવણીની સેવા વિશે માહિતી મેળવી શકે છે, જેમ કે રજિસ્ટર થયેલી સહાય અને નિર્ધારિત સ્થાન."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"નિઅર ફીલ્ડ કમ્યુનિકેશન નિયંત્રિત કરો"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"ઍપ્લિકેશનને નિઅર ફીલ્ડ કમ્યુનિકેશન (NFC) ટૅગ, કાર્ડ અને રીડર સાથે સંચાર કરવાની મંજૂરી આપે છે."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"સુરક્ષિત તત્વ પરના વ્યવહારની ઇવેન્ટ"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"ઍપને સુરક્ષિત તત્વ પર થતા વ્યવહારો વિશેની માહિતી મેળવવાની મંજૂરી આપે છે."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"તમારું સ્ક્રીન લૉક અક્ષમ કરો"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"એપ્લિકેશનને કીલૉક અને કોઈપણ સંકળાયેલ પાસવર્ડ સુરક્ષા અક્ષમ કરવાની મંજૂરી આપે છે. ઉદાહરણ તરીકે, ઇનકમિંગ ફોન કૉલ પ્રાપ્ત કરતી વખતે ફોન, કીલૉકને અક્ષમ કરે છે, પછી કૉલ સમાપ્ત થઈ જવા પર કીલૉક ફરીથી સક્ષમ કરે છે."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"સ્ક્રીન લૉકની જટિલતા જાણવા માટે વિનંતી કરો"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"બાયોમેટ્રિક્સ અથવા સ્ક્રીન લૉકનો ઉપયોગ કરો"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"તે તમે જ છો એ ચકાસો"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"આગળ વધવા માટે બાયોમેટ્રિકનો ઉપયોગ કરો"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"ચાલુ રાખવા માટે તમારી ફિંગરપ્રિન્ટનો ઉપયોગ કરો"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"ચાલુ રાખવા માટે તમારા ચહેરાનો ઉપયોગ કરો"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"ચાલુ રાખવા માટે તમારા બાયોમેટ્રિક ડેટા અથવા સ્ક્રીન લૉક સુવિધાનો ઉપયોગ કરો"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"બાયોમેટ્રિક હાર્ડવેર ઉપલબ્ધ નથી"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"પ્રમાણીકરણ રદ કર્યું"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"ઓળખાયેલ નથી"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"ચહેરો ઓળખાયો નથી"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"પ્રમાણીકરણ રદ કર્યું"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"કોઈ પિન, પૅટર્ન અથવા પાસવર્ડ સેટ કરેલો નથી"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"પ્રમાણિત કરવામાં ભૂલ આવી"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"ચહેરા સંબંધિત કાર્યવાહી રદ કરવામાં આવી છે."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"વપરાશકર્તાએ ફેસ અનલૉક કાર્ય રદ કર્યું"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"ઘણા બધા પ્રયત્નો. થોડા સમય પછી ફરી પ્રયાસ કરો."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"ઘણા બધા પ્રયાસો કર્યા. ફેસ અનલૉક ઉપલબ્ધ નથી."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ઘણા બધા પ્રયાસો. તેને બદલે સ્ક્રીન લૉકનો ઉપયોગ કરો."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ચહેરો ચકાસી શકાતો નથી. ફરી પ્રયાસ કરો."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"તમે ફેસ અનલૉક સુવિધાનું સેટઅપ કર્યું નથી"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"નકારો"</string>
     <string name="select_input_method" msgid="3971267998568587025">"ઇનપુટ પદ્ધતિ પસંદ કરો"</string>
     <string name="show_ime" msgid="6406112007347443383">"જ્યારે ભૌતિક કીબોર્ડ સક્રિય હોય ત્યારે તેને સ્ક્રીન પર રાખો"</string>
-    <string name="hardware" msgid="1800597768237606953">"વર્ચ્યુઅલ કીબોર્ડ બતાવો"</string>
+    <string name="hardware" msgid="3611039921284836033">"ઑન-સ્ક્રીન કીબોર્ડનો ઉપયોગ કરો"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g>ની ગોઠવણી કરો"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"ભૌતિક કીબોર્ડની ગોઠવણી કરો"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"ભાષા અને લેઆઉટ પસંદ કરવા માટે ટૅપ કરો"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"કાઢી નાખો"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"ભલામણ કરેલ સ્તરની ઉપર વૉલ્યૂમ વધાર્યો?\n\nલાંબા સમય સુધી ઊંચા અવાજે સાંભળવું તમારી શ્રવણક્ષમતાને નુકસાન પહોંચાડી શકે છે."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"ચેતવણી,\nએક અઠવાડિયામાં કોઈ વ્યક્તિ હૅડફોન પર સુરક્ષિત રીતે મોટા અવાજે સાંભળી શકે તેટલા સાઉન્ડ સિગ્નલની મર્યાદા તમે વટાવી ચૂક્યા છો.\n\nઆ મર્યાદા વટાવવાથી તમારી સાંભળવાની ક્ષમતાને કાયમી રીતે નુક્સાન થઈ શકે છે."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"ચેતવણી,\nએક અઠવાડિયામાં કોઈ વ્યક્તિ હૅડફોન પર સુરક્ષિત રીતે મોટા અવાજે સાંભળી શકે તેટલા સાઉન્ડ સિગ્નલના 5 ગણાથી વધુ મર્યાદા તમે વટાવી ચૂક્યા છો.\n\nતમારી સાંભળવાની ક્ષમતાને સુરક્ષિત રાખવા માટે વૉલ્યૂમ ઘટાડવામાં આવ્યું છે."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"તમે જે લેવલ પર મીડિયા સાંભળી રહ્યાં છો, તે લાંબા સમય સુધી ચાલુ રહેશે તો તેના પરિણામે તમારી સાંભળવાની ક્ષમતાને નુક્સાન થઈ શકે છે.\n\nઆ લેવલ પર લાંબા સમય સુધી વગાડવાનું ચાલુ રાખવાથી, તમારી સાંભળવાની ક્ષમતાને નુક્સાન થઈ શકે છે."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"ચેતવણી,\nતમે હાલમાં અસુરક્ષિત લેવલ પર મોટેથી વગાડવામાં આવતું કન્ટેન્ટ સાંભળી રહ્યાં છો.\n\nઆટલું મોટેથી વાગતું કન્ટેન્ટ સાંભળવાનું ચાલુ રાખવાથી તમારી સાંભળવાની ક્ષમતાને કાયમી રીતે નુક્સાન થશે."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"ઊંચા વૉલ્યૂમ પર સાંભળવાનું ચાલુ રાખીએ?\n\nહૅડફોનનું વૉલ્યૂમ સુઝાવ આપેલા સમય કરતાં વધારે સમય સુધી ઊંચા વૉલ્યૂમ પર રહ્યું છે, જે તમારી શ્રવણશક્તિને નુકસાન પહોંચાડી શકે છે"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"મોટા અવાજની ભાળ મળી\n\nહૅડફોનનું વૉલ્યૂમ સુઝાવ આપેલા કરતાં વધુ ઊંચા વૉલ્યૂમ પર રહ્યું છે, જે તમારી શ્રવણશક્તિને નુકસાન પહોંચાડી શકે છે"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ઍક્સેસિબિલિટી શૉર્ટકટનો ઉપયોગ કરીએ?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"જ્યારે શૉર્ટકટ ચાલુ હોય, ત્યારે બન્ને વૉલ્યૂમ બટનને 3 સેકન્ડ સુધી દબાવી રાખવાથી ઍક્સેસિબિલિટી સુવિધા શરૂ થઈ જશે."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"ઍક્સેસિબિલિટી સુવિધાઓ માટે શૉર્ટકટ ચાલુ કરીએ?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"બહાર નીકળવા માટે, ટોચ પરથી નીચે સ્વાઇપ કરો."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"સમજાઈ ગયું"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"બહેતર વ્યૂ માટે ફેરવો"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"બહેતર વ્યૂ માટે, વિભાજિત સ્ક્રીનમાંથી બહાર નીકળો"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"બહેતર વ્યૂ માટે, પૂર્ણ સ્ક્રીનમાં <xliff:g id="NAME">%s</xliff:g> ખોલો"</string>
     <string name="done_label" msgid="7283767013231718521">"થઈ ગયું"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"કલાકનું વર્તુળાકાર સ્લાઇડર"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"મિનિટનું વર્તુળાકાર સ્લાઇડર"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"ઍપ ઉપલબ્ધ નથી"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> હાલમાં ઉપલબ્ધ નથી."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ઉપલબ્ધ નથી"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"પરવાનગી જરૂરી છે"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"પરવાનગીની વિનંતી નકારવામાં આવી"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"આ ઍપ વધારાની પરવાનગીઓની વિનંતી કરી રહી છે પણ સ્ટ્રીમિંગ સત્રમાં પરવાનગીઓને મંજૂરી આપી શકાતી નથી. પહેલા તમારા Android TV ડિવાઇસ પર પરવાનગીની મંજૂરી આપો."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"આ ઍપ વધારાની પરવાનગીઓની વિનંતી કરી રહી છે પણ સ્ટ્રીમિંગ સત્રમાં પરવાનગીઓને મંજૂરી આપી શકાતી નથી. પહેલા તમારા ટૅબ્લેટ પર પરવાનગીની મંજૂરી આપો."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"આ ઍપ વધારાની પરવાનગીઓની વિનંતી કરી રહી છે પણ સ્ટ્રીમિંગ સત્રમાં પરવાનગીઓને મંજૂરી આપી શકાતી નથી. પહેલા તમારા ફોન પર પરવાનગીની મંજૂરી આપો."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"Androidના કોઈ જૂના વર્ઝન માટે આ ઍપ બનાવવામાં આવી હતી. તે કદાચ યોગ્ય રીતે કામ કરતી નથી અને તેમાં નવીનતમ સુરક્ષા અને પ્રાઇવસી સંબંધિત સંરક્ષણો શામેલ નથી. કોઈ અપડેટ ચેક કરો અથવા ઍપના ડેવલપરનો સંપર્ક કરો."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"અપડેટ માટે તપાસો"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"આ ઍપ Androidના નવીનતમ વર્ઝન સાથે સુસંગત નથી. કોઈ અપડેટ ચેક કરો અથવા ઍપના ડેવલપરનો સંપર્ક કરો."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"તમારી પાસે નવા સંદેશા છે"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"જોવા માટે SMS ઍપ્લિકેશન ખોલો"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"કેટલીક કાર્યક્ષમતા મર્યાદિત હોઈ શકે છે"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"આ કન્ટેન્ટ ઑફિસ માટેની ઍપ વડે ખોલી શકાતું નથી"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"આ કન્ટેન્ટ વ્યક્તિગત ઍપ સાથે શેર કરી શકાતું નથી"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"આ કન્ટેન્ટ વ્યક્તિગત ઍપ વડે ખોલી શકાતું નથી"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"ઑફિસની પ્રોફાઇલ થોભાવી છે"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"ચાલુ કરવા માટે ટૅપ કરો"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"ઑફિસ માટેની ઍપ થોભાવવામાં આવી છે"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"ફરી ચાલુ કરો"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"કોઈ ઑફિસ માટેની ઍપ સપોર્ટ કરતી નથી"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"કોઈ વ્યક્તિગત ઍપ સપોર્ટ કરતી નથી"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"ઑફિસની પ્રોફાઇલવાળી <xliff:g id="APP">%s</xliff:g> ખોલીએ?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"વ્યક્તિગત પ્રોફાઇલવાળી <xliff:g id="APP">%s</xliff:g>માં ખોલીએ?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"ઑફિસની પ્રોફાઇલવાળી <xliff:g id="APP">%s</xliff:g>માં ખોલીએ?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"શું ઑફિસ માટેની ઍપમાંથી કૉલ કરીએ?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"શું ઑફિસ માટેની ઍપ પર સ્વિચ કરીએ?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"તમારી સંસ્થા તમને માત્ર ઑફિસ માટેની ઍપ પરથી કૉલ કરવાની મંજૂરી આપે છે"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"તમારી સંસ્થા તમને માત્ર ઑફિસ માટેની ઍપ પરથી મેસેજ મોકલવાની મંજૂરી આપે છે"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"વ્યક્તિગત બ્રાઉઝરનો ઉપયોગ કરો"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"ઑફિસના બ્રાઉઝરના ઉપયોગ કરો"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"કૉલ કરો"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"સ્વિચ કરો"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"સિમ નેટવર્કને અનલૉક કરવાનો પિન"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"સિમ નેટવર્ક સબસેટને અનલૉક કરવાનો પિન"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"સિમ કૉર્પોરેટ કાર્ડના લૉકને અનલૉક કરવાનો પિન"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"તમારા <xliff:g id="DEVICE">%1$s</xliff:g> પરથી ફોનના કૅમેરાનો ઍક્સેસ કરી શકતાં નથી"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"તમારા <xliff:g id="DEVICE">%1$s</xliff:g> પરથી ટૅબ્લેટના કૅમેરાનો ઍક્સેસ કરી શકતાં નથી"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"સ્ટ્રીમ કરતી વખતે આ ઍક્સેસ કરી શકાતું નથી. તેના બદલે તમારા ફોન પર પ્રયાસ કરો."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"સ્ટ્રીમ કરતી વખતે ચિત્ર-માં-ચિત્ર જોઈ શકતા નથી"</string>
     <string name="system_locale_title" msgid="711882686834677268">"સિસ્ટમ ડિફૉલ્ટ"</string>
     <string name="default_card_name" msgid="9198284935962911468">"કાર્ડ <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"વૉચ મેનેજ કરવા માટે સાથી વૉચ પ્રોફાઇલની પરવાનગી"</string>
@@ -2317,8 +2331,8 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"સાથી ઍપને બૅકગ્રાઉન્ડમાંથી ફૉરગ્રાઉન્ડ સેવાઓ શરૂ કરવાની મંજૂરી આપે છે."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"માઇક્રોફોન ઉપલબ્ધ છે"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"માઇક્રોફોનને બ્લૉક કરવામાં આવ્યો છે"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"ડ્યૂઅલ સ્ક્રીન"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"ડ્યૂઅલ સ્ક્રીન ચાલુ છે"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual screen ચાલુ છે"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"કન્ટેન્ટ બતાવવા માટે <xliff:g id="APP_NAME">%1$s</xliff:g> બન્ને ડિસ્પ્લેનો ઉપયોગ કરી રહી છે"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"ડિવાઇસ ખૂબ જ ગરમ છે"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"ડ્યૂઅલ સ્ક્રીન અનુપલબ્ધ છે કારણ કે તમારો ફોન ખૂબ જ ગરમ થઈ રહ્યો છે"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index f117c82..888fc0f 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -243,7 +243,7 @@
     <string name="global_actions" product="tv" msgid="3871763739487450369">"Android TV डिवाइस में फ़ोन से जुड़े विकल्प"</string>
     <string name="global_actions" product="default" msgid="6410072189971495460">"फ़ोन विकल्‍प"</string>
     <string name="global_action_lock" msgid="6949357274257655383">"स्‍क्रीन लॉक"</string>
-    <string name="global_action_power_off" msgid="4404936470711393203">"पावर बंद करें"</string>
+    <string name="global_action_power_off" msgid="4404936470711393203">"बंद करें"</string>
     <string name="global_action_power_options" msgid="1185286119330160073">"पावर"</string>
     <string name="global_action_restart" msgid="4678451019561687074">"रीस्टार्ट करें"</string>
     <string name="global_action_emergency" msgid="1387617624177105088">"आपातकालीन"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android सिस्‍टम"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"प्रोफ़ाइल बदलकर निजी प्रोफ़ाइल पर जाएं"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"प्रोफ़ाइल बदलकर वर्क प्रोफ़ाइल पर जाएं"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g> की निजी प्रोफ़ाइल पर जाएं"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g> की वर्क प्रोफ़ाइल पर जाएं"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"संपर्क"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"अपने संपर्कों को ऐक्सेस करें"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"जगह की जानकारी"</string>
@@ -306,7 +308,7 @@
     <string name="permgroupdesc_calendar" msgid="6762751063361489379">"अपने कैलेंडर को ऐक्सेस करें"</string>
     <string name="permgrouplab_sms" msgid="795737735126084874">"मैसेज (एसएमएस)"</string>
     <string name="permgroupdesc_sms" msgid="5726462398070064542">"मैसेज (एसएमएस) भेजें और देखें"</string>
-    <string name="permgrouplab_storage" msgid="17339216290379241">"फ़ाइलें"</string>
+    <string name="permgrouplab_storage" msgid="17339216290379241">"फ़ाइल"</string>
     <string name="permgroupdesc_storage" msgid="5378659041354582769">"अपने डिवाइस में मौजूद फ़ाइलों का ऐक्सेस दें"</string>
     <string name="permgrouplab_readMediaAural" msgid="1858331312624942053">"संगीत और ऑडियो"</string>
     <string name="permgroupdesc_readMediaAural" msgid="7565467343667089595">"आपके डिवाइस पर संगीत और ऑडियो को ऐक्सेस करने की अनुमति"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"ऐप्स को कंपनकर्ता नियंत्रित करने देता है."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"इससे ऐप्लिकेशन, डिवाइस का वाइब्रेटर ऐक्सेस कर पाएगा."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"फ़ोन नंबर पर सीधे कॉल करें"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"ऐप्लिकेशन को आपके हस्‍तक्षेप के बिना फ़ोन नंबर पर कॉल करने देता है. इसके परिणाम अनचाहे शुल्‍क या कॉल हो सकते हैं. ध्यान दें कि यह ऐप्लिकेशन को आपातकालीन नंबर पर कॉल नहीं करने देता. नुकसान पहुंचाने वाला ऐप्लिकेशन आपकी पुष्टि के बिना कॉल करके आपके पैसे खर्च करवा सकते हैं."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"इससे ऐप्लिकेशन, आपकी अनुमति के बिना ही किसी के फ़ोन पर कॉल कर सकता है. इस वजह से, हो सकता है कि किसी को भी अनचाहे कॉल लग जाएं या कॉल का शुल्क कट जाए. ध्यान दें कि यह अनुमति मिलने से, ऐप्लिकेशन आपातकालीन नंबर पर कॉल नहीं कर सकता. नुकसान पहुंचाने वाले ऐप्लिकेशन, आपकी अनुमति के बिना किसी को कॉल कर सकते हैं. इस वजह से, कॉल का शुल्क कट सकता है. इसके अलावा, ये ऐप्लिकेशन, कैरियर कोड वाले नंबर डायल कर सकते हैं. इससे, आने वाले (इनकमिंग) कॉल दूसरे नंबर पर अपने-आप फ़ॉरवर्ड हो जाते हैं."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS कॉल सेवा ऐक्‍सेस करें"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"आपके हस्‍तक्षेप के बिना कॉल करने के लिए, ऐप को IMS सेवा का उपयोग करने देती है."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"फ़ोन की स्‍थिति और पहचान पढ़ें"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"अगर ऐप्लिकेशन को अनुमति दी जाती है, तो वह पैसे चुकाने की आपकी उस पसंदीदा सेवा के बारे में जानकारी पा सकता है जो NFC का इस्तेमाल करती है. इसमें रजिस्टर किए गए डिवाइस और उनके आउटपुट के रूट जैसी जानकारी शामिल होती है."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"नियर फ़ील्‍ड कम्‍यूनिकेशन नियंत्रित करें"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"ऐप्स  को नियर फ़ील्ड कम्यूनिकेशन (NFC) टैग, कार्ड, और रीडर के साथ संचार करने देता है."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"सुरक्षा चिप में होने वाला लेन-देन की जानकारी"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"इससे ऐप्लिकेशन को सुरक्षा चिप पर होने वाले लेन-देन की जानकारी मिलेगी."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"अपना स्‍क्रीन लॉक अक्षम करें"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"ऐप्स को कीलॉक और कोई भी संबद्ध पासवर्ड सुरक्षा बंद करने देता है. उदाहरण के लिए, इनकमिंग फ़ोन कॉल पाते समय फ़ोन, कीलॉक को बंद कर देता है, फिर कॉल खत्म होने पर कीलॉक को फिर से चालू कर देता है."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"जानें कि स्क्रीन लॉक कितना मुश्किल बनाया गया है"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"बायोमेट्रिक्स या स्क्रीन लॉक का क्रेडेंशियल इस्तेमाल करें"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"अपनी पहचान की पुष्टि करें"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"जारी रखने के लिए, बायोमेट्रिक्स इस्तेमाल करें"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"जारी रखने के लिए, अपने फ़िंगरप्रिंट की मदद से पहचान की पुष्टि करें"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"जारी रखने के लिए, अपने चेहरा की मदद से पहचान की पुष्टि करें"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"जारी रखने के लिए, बायोमेट्रिक या स्क्रीन लॉक क्रेडेंशियल डालकर पुष्टि करें"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"बायोमेट्रिक हार्डवेयर उपलब्ध नहीं है"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"प्रमाणीकरण रद्द किया गया"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"पहचान नहीं हो पाई"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"चेहरा नहीं पहचाना गया"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"प्रमाणीकरण रद्द किया गया"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"पिन, पैटर्न या पासवर्ड सेट नहीं है"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"गड़बड़ी की पुष्टि की जा रही है"</string>
@@ -627,13 +634,13 @@
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"फ़िंगरप्रिंट की पहचान नहीं की जा सकी. फिर से कोशिश करें."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"फ़िंगरप्रिंट सेंसर को साफ़ करके फिर से कोशिश करें"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"फ़िंगरप्रिंट सेंसर को साफ़ करके फिर से कोशिश करें"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"सेंसर को उंगली से ज़ोर से दबाएं"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"सेंसर को उंगली से दबाकर रखें"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"उंगली बहुत धीरे चलाई गई. कृपया फिर से कोशिश करें."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"किसी दूसरे फ़िंगरप्रिंट से कोशिश करें"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"बहुत रोशनी है"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"पावर बटन दबाया गया"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"सेंसर पर सही तरीके से उंगली लगाने की कोशिश करें"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"फ़िंगरप्रिंट सेट अप करते समय, अपनी उंगली को हर बार थोड़ी अलग स्थिति में रखें"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"फ़िंगरप्रिंट सेट अप करते समय, अपनी उंगली को हर बार एक अलग ऐंगल में रखें"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"फ़िंगरप्रिंट की पहचान नहीं हो पाई"</string>
@@ -681,10 +688,10 @@
     <string name="face_acquired_too_far" msgid="2922278214231064859">"फ़ोन को नज़दीक लाएं"</string>
     <string name="face_acquired_too_high" msgid="8278815780046368576">"फ़ोन को थोड़ा और ऊपर ले जाएं"</string>
     <string name="face_acquired_too_low" msgid="4075391872960840081">"फ़ोन को थोड़ा नीचे ले जाएं"</string>
-    <string name="face_acquired_too_right" msgid="6245286514593540859">"फ़ोन को अपने बाईं ओर ले जाएं"</string>
-    <string name="face_acquired_too_left" msgid="9201762240918405486">"फ़ोन को अपने दाईं ओर ले जाएं"</string>
+    <string name="face_acquired_too_right" msgid="6245286514593540859">"फ़ोन को अपनी बाईं ओर ले जाएं"</string>
+    <string name="face_acquired_too_left" msgid="9201762240918405486">"फ़ोन को अपनी दाईं ओर ले जाएं"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"कृपया अपने डिवाइस की तरफ़ सीधे देखें."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"आपका चेहरा नहीं दिख रहा है. फ़ोन को अपनी आंखों की सीध में पकड़कर रखें."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"आपका चेहरा नहीं दिख रहा है. फ़ोन को अपनी आंखों की सीध में रखें."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"डिवाइस बहुत ज़्यादा हिल रहा है. फ़ोन को बिना हिलाएं पकड़ें."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"कृपया फिर से अपने चेहरे की पहचान कराएं."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"चेहरे की पहचान नहीं हुई. फिर से कोशिश करें."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"चेहरा पहचानने की कार्रवाई रद्द की गई."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"उपयोगकर्ता ने फ़ेस अनलॉक को रद्द किया"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"कई बार कोशिश की गई. बाद में कोशिश करें."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"कई बार कोशिश की गई. फ़ेस अनलॉक की सुविधा उपलब्ध नहीं है."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"कई बार कोशिश की जा चुकी है. इसके बजाय, स्क्रीन लॉक का इस्तेमाल करें."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"चेहरा नहीं पहचान पा रहे. फिर से कोशिश करें."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"आपने फ़ेस अनलॉक सेट अप नहीं किया है"</string>
@@ -1255,7 +1261,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"ऐप्स  प्रारंभ होने वाले हैं"</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"बूट खत्म हो रहा है."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"आपने पावर बटन दबाया - आम तौर पर, इससे स्क्रीन बंद हो जाती है.\n\nअपना फ़िंगरप्रिंट सेट अप करते समय, बटन को हल्के से टैप करके देखें."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"सेटअप पूरा होने पर, स्क्रीन बंद करें"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"सेटअप रोकने के लिए, स्क्रीन बंद करें"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"बंद करें"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"फ़िंगरप्रिंट की पुष्टि करना जारी रखना है?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"आपने पावर बटन दबाया - आम तौर पर, इससे स्क्रीन बंद हो जाती है.\n\nअपने फ़िंगरप्रिंट की पुष्टि करने के लिए, बटन पर हल्के से टैप करके देखें."</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"अस्वीकार करें"</string>
     <string name="select_input_method" msgid="3971267998568587025">"इनपुट का तरीका चुनें"</string>
     <string name="show_ime" msgid="6406112007347443383">"सामान्य कीबोर्ड के सक्रिय होने के दौरान इसे स्‍क्रीन पर बनाए रखें"</string>
-    <string name="hardware" msgid="1800597768237606953">"वर्चुअल कीबोर्ड दिखाएं"</string>
+    <string name="hardware" msgid="3611039921284836033">"ऑन-स्क्रीन कीबोर्ड इस्तेमाल करें"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> को कॉन्फ़िगर करें"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"फ़िज़िकल कीबोर्ड को कॉन्फ़िगर करें"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"भाषा और लेआउट चुनने के लिए टैप करें"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"हटाएं"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"वॉल्यूम को सुझाए गए स्तर से ऊपर बढ़ाएं?\n\nअत्यधिक वॉल्यूम पर ज़्यादा समय तक सुनने से आपकी सुनने की क्षमता को नुकसान हो सकता है."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"चेतावनी,\nआपने हेडफ़ोन पर एक हफ़्ते में, सुरक्षित तरीके से तेज़ साउंड सिग्नल सुनने की सीमा को पार कर लिया है.\n\nइस सीमा को पार करने पर, आपकी सुनने की क्षमता को हमेशा के लिए नुकसान पहुंच सकता है."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"चेतावनी,\nआपने हेडफ़ोन पर एक हफ़्ते में, सुरक्षित तरीके से तेज़ साउंड सिग्नल सुनने की सीमा से पांच गुना ज़्यादा बार तेज़ साउंड सिग्नल सुन लिए हैं.\n\nआपकी सुनने की क्षमता की सुरक्षा के लिए, आवाज़ को धीमा कर दिया गया है."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"मौजूदा लेवल पर ज़्यादा समय तक मीडिया को सुनने से, आपकी सुनने की क्षमता को नुकसान पहुंच सकता है.\n\nबहुत देर तक इस लेवल पर मीडिया चलाना जारी रखने से, आपकी सुनने की क्षमता को नुकसान पहुंच सकता है."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"चेतावनी,\nतेज़ आवाज़ वाले कॉन्टेंट को, आवाज़ के असुरक्षित लेवल पर सुना जा रहा है.\n\nबहुत देर तक इतनी तेज़ आवाज़ को सुनने पर, आपकी सुनने की क्षमता को हमेशा के लिए नुकसान पहुंच सकता है."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"क्या तेज़ आवाज़ में गाने सुनना जारी रखना है?\n\nहेडफ़ोन की आवाज़ सुझाए गए समय के बाद भी ज़्यादा रही. इससे आपकी सुनने की क्षमता को नुकसान पहुंच सकता है"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"तेज़ आवाज़ का पता चला है\n\nहेडफ़ोन की आवाज़ सुझाए गए लेवल से ज़्यादा है. इससे आपकी सुनने की क्षमता को नुकसान पहुंच सकता है"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"सुलभता शॉर्टकट का इस्तेमाल करना चाहते हैं?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"शॉर्टकट के चालू होने पर, दाेनाें वॉल्यूम बटन (आवाज़ कम या ज़्यादा करने वाले बटन) को तीन सेकंड तक दबाने से, सुलभता सुविधा शुरू हाे जाएगी."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"क्या आप सुलभता सुविधाओं के लिए शॉर्टकट चालू करना चाहते हैं?"</string>
@@ -1716,7 +1720,7 @@
     <string name="color_correction_feature_name" msgid="7975133554160979214">"रंग में सुधार करने की सुविधा"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"वन-हैंडेड मोड"</string>
     <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"स्क्रीन की रोशनी को सामान्य लेवल से और कम करने की सुविधा"</string>
-    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"सुनने में मदद करने वाले डिवाइस"</string>
+    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"कान की मशीन"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"आवाज़ कम-ज़्यादा करने वाले दोनों बटन दबाकर रखें. <xliff:g id="SERVICE_NAME">%1$s</xliff:g> को चालू कर दिया गया."</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"आवाज़ कम-ज़्यादा करने वाले दोनों बटन दबाकर रखें. <xliff:g id="SERVICE_NAME">%1$s</xliff:g> को बंद कर दिया गया."</string>
     <string name="accessibility_shortcut_spoken_feedback" msgid="3760999147597564314">"आवाज़ बटन को छोड़ें. <xliff:g id="SERVICE_NAME">%1$s</xliff:g> की सुविधा चालू करने के लिए, आवाज़ वाले दोनों बटन तीन सेकंड तक दबाकर रखें."</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"बाहर निकलने के लिए, ऊपर से नीचे स्वा‍इप करें."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"ठीक है"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"बेहतर व्यू पाने के लिए, डिवाइस की स्क्रीन को घुमाएं"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"बेहतर व्यू पाने के लिए, स्प्लिट स्क्रीन मोड बंद करें"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"बेहतर व्यू पाने के लिए <xliff:g id="NAME">%s</xliff:g> को फ़ुल स्क्रीन में खोलें"</string>
     <string name="done_label" msgid="7283767013231718521">"हो गया"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"घंटो का चक्राकार स्लाइडर"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"मिनटों का चक्राकार स्लाइडर"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"ऐप्लिकेशन उपलब्ध नहीं है"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> इस समय उपलब्ध नहीं है."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> उपलब्ध नहीं है"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"अनुमति ज़रूरी है"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"अनुमति के अनुरोध को अस्वीकार किया गया"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"यह ऐप्लिकेशन ज़्यादा अनुमतियों का अनुरोध कर रहा है. हालांकि, स्ट्रीमिंग सेशन के दौरान अनुमतियां नहीं दी जा सकतीं. सबसे पहले अपने Android TV डिवाइस पर अनुमति दें."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"यह ऐप्लिकेशन ज़्यादा अनुमतियों का अनुरोध कर रहा है. हालांकि, स्ट्रीमिंग सेशन के दौरान अनुमतियां नहीं दी जा सकतीं. सबसे पहले अपने टैबलेट पर अनुमति दें."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"यह ऐप्लिकेशन ज़्यादा अनुमतियों का अनुरोध कर रहा है. हालांकि, स्ट्रीमिंग सेशन के दौरान अनुमतियां नहीं दी जा सकतीं. सबसे पहले अपने फ़ोन पर अनुमति दें."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"यह ऐप्लिकेशन, Android के पुराने वर्शन के लिए बनाया गया था. इसमें सिक्योरिटी और निजता सुरक्षा से जुड़ी नई सुविधाएं शामिल नहीं हैं. साथ ही, ऐसा हो सकता है कि यह ठीक से काम न करे. अपडेट के बारे में पता करें या ऐप्लिकेशन के डेवलपर से संपर्क करें."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"देखें कि अपडेट मौजूद है या नहीं"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"यह ऐप्लिकेशन, Android के सबसे नए वर्शन पर काम नहीं करता है. अपडेट के बारे में पता करें या ऐप्लिकेशन के डेवलपर से संपर्क करें."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"आपके पास नए संदेश हैं"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"देखने के लिए मैसेज (एसएमएस) ऐप खोलें"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"शायद कुछ सुविधाएं काम न करें"</string>
@@ -2157,18 +2165,23 @@
     <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"आपके आईटी एडमिन ने इस कॉन्टेंट को शेयर करने की सुविधा ब्लॉक कर रखी है"</string>
     <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"इस कॉन्टेंट को ऑफ़िस के काम से जुड़े ऐप्लिकेशन का इस्तेमाल करके, शेयर नहीं किया जा सकता"</string>
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"इस कॉन्टेंट को ऑफ़िस के काम से जुड़े ऐप्लिकेशन पर खोला नहीं जा सकता"</string>
-    <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"इस कॉन्टेंट को निजी ऐप्लिकेशन का इस्तेमाल करके, शेयर नहीं किया जा सकता"</string>
+    <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"इस कॉन्टेंट को निजी ऐप्लिकेशन के ज़रिए शेयर नहीं किया जा सकता"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"इस कॉन्टेंट को निजी ऐप्लिकेशन पर खोला नहीं जा सकता"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"वर्क प्रोफ़ाइल रोक दी गई है"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"वर्क प्रोफ़ाइल चालू करने के लिए टैप करें"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"वर्क ऐप्लिकेशन बंद किए गए हैं"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"चालू करें"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"यह कॉन्टेंट, ऑफ़िस के काम से जुड़े आपके किसी भी ऐप्लिकेशन पर खोला नहीं जा सकता"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"यह कॉन्टेंट आपके किसी भी निजी ऐप्लिकेशन पर खोला नहीं जा सकता"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"वर्क प्रोफ़ाइल वाला <xliff:g id="APP">%s</xliff:g> ऐप्लिकेशन खोलें?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"निजी प्रोफ़ाइल वाले <xliff:g id="APP">%s</xliff:g> ऐप्लिकेशन में जाकर खोलें?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"वर्क प्रोफ़ाइल वाले <xliff:g id="APP">%s</xliff:g> ऐप्लिकेशन में जाकर खोलें?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"क्या आपको वर्क ऐप्लिकेशन से कॉल करना है?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"क्या आपको वर्क ऐप्लिकेशन पर स्विच करना है?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"आपके संगठन ने, सिर्फ़ वर्क ऐप्लिकेशन से कॉल करने की अनुमति दी है"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"आपके संगठन ने, सिर्फ़ वर्क ऐप्लिकेशन से मैसेज भेजने की अनुमति दी है"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"निजी ब्राउज़र का इस्तेमाल करें"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"ऑफ़िस के काम से जुड़े ब्राउज़र का इस्तेमाल करें"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"कॉल करें"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"स्विच करें"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"सिम नेटवर्क को अनलॉक करने का पिन"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"सिम नेटवर्क के सबसेट को अनलॉक करने का पिन"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"कारोबार के लिए इस्तेमाल होने वाले सिम को अनलॉक करने का पिन"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"आपके <xliff:g id="DEVICE">%1$s</xliff:g> से फ़ोन के कैमरे को ऐक्सेस नहीं किया जा सकता"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"आपके <xliff:g id="DEVICE">%1$s</xliff:g> से टैबलेट के कैमरे को ऐक्सेस नहीं किया जा सकता"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"स्ट्रीमिंग के दौरान, इसे ऐक्सेस नहीं किया जा सकता. इसके बजाय, अपने फ़ोन पर ऐक्सेस करके देखें."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"स्ट्रीमिंग करते समय, \'पिक्चर में पिक्चर\' सुविधा इस्तेमाल नहीं की जा सकती"</string>
     <string name="system_locale_title" msgid="711882686834677268">"सिस्टम डिफ़ॉल्ट"</string>
     <string name="default_card_name" msgid="9198284935962911468">"कार्ड <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"स्मार्टवॉच मैनेज करने के लिए, स्मार्टवॉच के साथ काम करने वाले साथी ऐप्लिकेशन पर प्रोफ़ाइल से जुड़ी अनुमति"</string>
@@ -2317,11 +2331,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"इससे साथी ऐप्लिकेशन को बैकग्राउंड में फ़ोरग्राउंड सेवाएं चलाने की अनुमति मिलती है."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"माइक्रोफ़ोन इस्तेमाल किया जा सकता है"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"माइक्रोफ़ोन को ब्लॉक किया गया है"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"ड्यूअल स्क्रीन"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"ड्यूअल स्क्रीन की सुविधा चालू है"</string>
-    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g>, कॉन्टेंट दिखाने के लिए दोनों डिसप्ले का इस्तेमाल कर रहा है"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual screen की सुविधा चालू है"</string>
+    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g>, कॉन्टेंट दिखाने के लिए दोनों स्क्रीन का इस्तेमाल कर रहा है"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"आपका फ़ोन बहुत गर्म हो गया है"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"ड्यूअल स्क्रीन की सुविधा अभी उपलब्ध नहीं है, क्योंकि आपका फ़ोन बहुत गर्म हो रहा है"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dual Screen की सुविधा अभी उपलब्ध नहीं है, क्योंकि आपका फ़ोन बहुत गर्म हो रहा है"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen का इस्तेमाल नहीं किया जा सकता"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"बैटरी सेवर की सुविधा चालू होने पर, Dual Screen का इस्तेमाल नहीं किया जा सकता. इस सुविधा को सेटिंग में जाकर बंद करें."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"सेटिंग पर जाएं"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 4fd3c43..2e1b8ad 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -161,7 +161,7 @@
     <string name="httpErrorLookup" msgid="3099834738227549349">"URL nije moguće pronaći."</string>
     <string name="httpErrorUnsupportedAuthScheme" msgid="3976195595501606787">"Shema autentifikacije web-lokacije nije podržana."</string>
     <string name="httpErrorAuth" msgid="469553140922938968">"Autentifikacija nije moguća."</string>
-    <string name="httpErrorProxyAuth" msgid="7229662162030113406">"Provjera autentičnosti preko proxy poslužitelja nije bila uspješna."</string>
+    <string name="httpErrorProxyAuth" msgid="7229662162030113406">"Autentifikacija preko proxy poslužitelja nije bila uspješna."</string>
     <string name="httpErrorConnect" msgid="3295081579893205617">"Povezivanje s poslužiteljem nije moguće."</string>
     <string name="httpErrorIO" msgid="3860318696166314490">"Komunikacija s poslužiteljem nije moguća. Pokušajte ponovno kasnije."</string>
     <string name="httpErrorTimeout" msgid="7446272815190334204">"Veza s poslužiteljem privremeno je zaustavljena."</string>
@@ -269,7 +269,7 @@
     <string name="global_action_settings" msgid="4671878836947494217">"Postavke"</string>
     <string name="global_action_assist" msgid="2517047220311505805">"Pomoć"</string>
     <string name="global_action_voice_assist" msgid="6655788068555086695">"Glasovna pomoć"</string>
-    <string name="global_action_lockdown" msgid="2475471405907902963">"Zaključavanje"</string>
+    <string name="global_action_lockdown" msgid="2475471405907902963">"Zaključaj"</string>
     <string name="status_bar_notification_info_overflow" msgid="3330152558746563475">"999+"</string>
     <string name="notification_hidden_text" msgid="2835519769868187223">"Nova obavijest"</string>
     <string name="notification_channel_physical_keyboard" msgid="5417306456125988096">"Fizička tipkovnica"</string>
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sustav Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Prijeđite na osobni profil"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Poslovni profil"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Prijeđite na aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> za osobni profil"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Prijeđite na aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> za poslovni profil"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakti"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"pristupati vašim kontaktima"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Lokacija"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Aplikaciji omogućuje nadzor nad vibratorom."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Aplikaciji omogućuje da pristupi stanju vibracije."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"izravno pozivanje telefonskog broja"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Aplikaciji omogućuje pozivanje telefonskih brojeva bez vašeg sudjelovanja. To može dovesti do neočekivanih troškova ili poziva. Uzmite u obzir da se aplikaciji time ne omogućuje pozivanje brojeva u nuždi. Zlonamjerne aplikacije mogu vam uzrokovati dodatne troškove postavljanjem poziva bez vašeg odobrenja."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Aplikaciji omogućuje pozivanje telefonskih brojeva bez vaše intervencije. To može rezultirati neočekivanim terećenjima ili pozivima. Napominjemo da to ne omogućuje aplikaciji pozivanje brojeva hitnih službi. Zlonamjerne aplikacije mogu vam uzrokovati troškove pozivajući bez vaše potvrde ili birajući pozivne brojeve mobilnih operatera koji uzrokuju automatsko preusmjeravanje dolaznih poziva na drugi broj."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"pristupiti usluzi poziva izravnih poruka"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Omogućuje aplikaciji upotrebu usluge izravnih poruka za uspostavljanje poziva bez vaše intervencije."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"čitanje statusa i identiteta telefona"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Omogućuje aplikaciji primanje informacija o preferiranoj usluzi plaćanja NFC kao što su registrirana pomagala i odredište."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"upravljanje beskontaktnom komunikacijom (NFC)"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Aplikaciji omogućuje komunikaciju s oznakama, karticama i čitačima komunikacije kratkog dometa (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Događaj transakcije na sigurnosnom elementu"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Aplikaciji omogućuje da prima podatke o transakcijama koje se odvijaju na sigurnosnom elementu."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"onemogućavanje zaključavanja zaslona"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Aplikaciji omogućuje onemogućavanje zaključavanja tipkovnice i svih pripadajućih sigurnosnih zaporki. Na primjer, telefon onemogućuje zaključavanje tipkovnice kod primanja dolaznog telefonskog poziva, nakon kojeg se zaključavanje tipkovnice ponovo omogućuje."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"zahtijevati složenost zaključavanja zaslona"</string>
@@ -615,10 +619,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Upotreba biometrijske autentifikacije ili zaključavanja zaslona"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Potvrdite da ste to vi"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Upotrijebite svoju biometrijsku autentifikaciju da biste nastavili"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Za nastavak upotrijebite otisak prsta"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Za nastavak se identificirajte licem"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Za nastavak se identificirajte biometrijski ili vjerodajnicom zaključavanja zaslona"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrijski hardver nije dostupan"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autentifikacija otkazana"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Nije prepoznato"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Lice nije prepoznato"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autentifikacija otkazana"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nisu postavljeni PIN, uzorak ni zaporka"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Pogreška prilikom autentifikacije"</string>
@@ -690,9 +697,9 @@
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Ponovo registrirajte svoje lice."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Prepoznavanje lica nije uspjelo. Pokušajte ponovo."</string>
     <string name="face_acquired_too_similar" msgid="8882920552674125694">"Malo pomaknite glavu"</string>
-    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Gledajte izravnije prema telefonu"</string>
+    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Gledajte ravno u telefon"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Gledajte ravno u telefon"</string>
-    <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Gledajte izravnije prema telefonu"</string>
+    <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Gledajte ravno u telefon"</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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
@@ -701,7 +708,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Otkriveno je pokrivalo za lice. Vaše lice mora biti potpuno vidljivo."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Lice nije potvrđeno. Hardver nije dostupan."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Otkazana je radnja s licem."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Korisnik je otkazao otključavanje licem"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Previše pokušaja. Pokušajte ponovo kasnije."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Previše pokušaja. Otključavanje licem nije dostupno."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Previše pokušaja. Umjesto toga prijeđite na zaključavanje zaslona."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Lice nije potvrđeno. Pokušajte ponovo."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Niste postavili otključavanje licem"</string>
@@ -752,8 +758,8 @@
     <string name="permdesc_register_call_provider" msgid="4201429251459068613">"Aplikaciji omogućuje registriranje novih telekomunikacijskih veza."</string>
     <string name="permlab_connection_manager" msgid="3179365584691166915">"upravljanje telekomunikacijskim vezama"</string>
     <string name="permdesc_connection_manager" msgid="1426093604238937733">"Aplikaciji omogućuje upravljanje telekomunikacijskim vezama."</string>
-    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"interakcija sa zaslonom tijekom poziva"</string>
-    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"Omogućuje aplikaciji upravljanje vremenom i načinom na koji se korisniku prikazuje zaslon tijekom poziva."</string>
+    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"interakcija s filtriranjem poziva"</string>
+    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"Omogućuje aplikaciji kada se i kako korisniku prikazuje zaslon filtriranja poziva."</string>
     <string name="permlab_bind_connection_service" msgid="5409268245525024736">"interakcija s telefonskim uslugama"</string>
     <string name="permdesc_bind_connection_service" msgid="6261796725253264518">"Omogućuje aplikacijama interakciju s telefonskim uslugama za uspostavljanje i primanje poziva."</string>
     <string name="permlab_control_incall_experience" msgid="6436863486094352987">"pružanje korisničkog iskustva tijekom poziva"</string>
@@ -995,7 +1001,7 @@
     <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="8381565919325410939">"Otključavanje SIM-a…"</string>
     <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6458790975898594240">"Netočno ste iscrtali 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="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"Netočno ste napisali zaporku <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="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"Netočno ste napisali PIN <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="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"Netočno ste unijeli PIN <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="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="3069635524964070596">"Netočno ste iscrtali uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. Nakon još ovoliko neuspješnih pokušaja: <xliff:g id="NUMBER_1">%2$d</xliff:g> zamolit ćemo vas da otključate tabletno računalo putem prijave na Google.\n\n Pokušajte ponovo za <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"Netočno ste iscrtali uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> put/a. Nakon još ovoliko neuspješnih pokušaja: <xliff:g id="NUMBER_1">%2$d</xliff:g> zamolit ćemo vas da otključate Android TV uređaj putem prijave na Google.\n\n Pokušajte ponovo za <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="5691623136957148335">"Netočno ste iscrtali uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. Nakon još ovoliko neuspješnih pokušaja: <xliff:g id="NUMBER_1">%2$d</xliff:g> morat ćete otključati telefon putem prijave na Google.\n\n Pokušajte ponovo za <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
@@ -1365,11 +1371,11 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"Uključen je MIDI putem USB-a"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Uređaj je povezan kao web-kamera"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"Priključen je USB dodatak"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"Dodirnite za više opcija."</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"Dodirnite za više opcija"</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Povezani se uređaj puni. Dodirnite za više opcija."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Otkriven je analogni audiododatak"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Priključeni uređaj nije kompatibilan s ovim telefonom. Dodirnite da biste saznali više."</string>
-    <string name="adb_active_notification_title" msgid="408390247354560331">"Priključen je alat za otklanjanje pogrešaka putem USB-a"</string>
+    <string name="adb_active_notification_title" msgid="408390247354560331">"Uključeno je otklanjanje pogrešaka USB-om"</string>
     <string name="adb_active_notification_message" msgid="5617264033476778211">"Dodirnite da isključite otkl. pogrešaka putem USB-a"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Odaberite da biste onemogućili rješavanje programske pogreške na USB-u."</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Bežično otklanjanje pogrešaka povezano"</string>
@@ -1393,7 +1399,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ODBIJ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Odabir načina unosa"</string>
     <string name="show_ime" msgid="6406112007347443383">"Zadrži na zaslonu dok je fizička tipkovnica aktivna"</string>
-    <string name="hardware" msgid="1800597768237606953">"Prikaži virtualnu tipkovnicu"</string>
+    <string name="hardware" msgid="3611039921284836033">"Upotreba zaslonske tipkovnice"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Konfigurirajte uređaj <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Konfigurirajte fizičke tipkovnice"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Dodirnite da biste odabrali jezik i raspored"</string>
@@ -1619,7 +1625,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"Tabletno računalo"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Televizor"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Zvučnici postolja"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Zvučnici priključne stanice"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Vanjski uređaj"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Slušalice"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1667,7 +1673,7 @@
     <string name="kg_login_invalid_input" msgid="8292367491901220210">"Nevažeće korisničko ime ili zaporka."</string>
     <string name="kg_login_account_recovery_hint" msgid="4892466171043541248">"Zaboravili ste korisničko ime ili zaporku?\nPosjetite "<b>"google.com/accounts/recovery"</b>"."</string>
     <string name="kg_login_checking_password" msgid="4676010303243317253">"Provjera računa..."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="23741434207544038">"Netočno ste napisali PIN <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_pin_attempts_dialog_message" msgid="23741434207544038">"Netočno ste unijeli PIN <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_password_attempts_dialog_message" msgid="3328686432962224215">"Netočno ste napisali zaporku <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="7357404233979139075">"Netočno ste iscrtali obrazac 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_failed_attempts_almost_at_wipe" product="tablet" msgid="3479940221343361587">"Netočno ste pokušali otključati tabletno računalo <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. Ono će se vratiti na tvorničke postavke i svi korisnički podaci bit će izgubljeni nakon još ovoliko neuspjelih pokušaja: <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Ukloni"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Želite li pojačati zvuk iznad preporučene razine?\n\nDugotrajno slušanje glasne glazbe može vam oštetiti sluh."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Upozorenje,\npremašili ste količinu glasnih zvučnih signala koja se može sigurno slušati putem slušalica u tjedan dana.\n\nPrekoračenjem tog ograničenja trajno ćete oštetiti svoj sluh."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Upozorenje,\npeterostruko ste premašili količinu glasnih zvučnih signala koja se može sigurno slušati putem slušalica u tjedan dana.\n\nGlasnoća je utišana radi zaštite vašeg sluha."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Glasnoća kojom slušate medijske sadržaje može rezultirati oštećenjem sluha ako potraje dulje.\n\nAko nastavite slušati tako glasno dulje vrijeme, mogao bi vam se oštetiti sluh."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Upozorenje,\ntrenutačno slušate glasan sadržaj nesigurnom glasnoćom.\n\nAko nastavite slušati tako glasno, trajno ćete oštetiti sluh."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Želite li nastaviti slušati vrlo glasno?\n\nPojačana je glasnoća u slušalicama dulje nego što se preporučuje, a to vam može oštetiti sluh"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Detektiran je glasan zvuk\n\nGlasnoća u slušalicama jača je od preporučene, a to vam može oštetiti sluh"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Želite li upotrebljavati prečac za pristupačnost?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Kad je taj prečac uključen, pritiskom na obje tipke za glasnoću na tri sekunde pokrenut će se značajka pristupačnosti."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Želite li uključiti prečac za značajke pristupačnosti?"</string>
@@ -1717,7 +1721,7 @@
     <string name="color_correction_feature_name" msgid="7975133554160979214">"Korekcija boja"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Način rada jednom rukom"</string>
     <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Još tamnije"</string>
-    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Slušni uređaji"</string>
+    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Slušna pomagala"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"Držali ste tipke za glasnoću. Uključila se usluga <xliff:g id="SERVICE_NAME">%1$s</xliff:g>."</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"Držali ste tipke za glasnoću. Isključila se usluga <xliff:g id="SERVICE_NAME">%1$s</xliff:g>."</string>
     <string name="accessibility_shortcut_spoken_feedback" msgid="3760999147597564314">"Pustite tipke za glasnoću. Da biste uključili uslugu <xliff:g id="SERVICE_NAME">%1$s</xliff:g>, ponovo pritisnite i zadržite obje tipke za glasnoću tri sekunde."</string>
@@ -1852,7 +1856,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Za izlaz prijeđite prstom od vrha prema dolje."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Shvaćam"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Zakrenite kako biste bolje vidjeli"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Zatvorite podijeljeni zaslon kako biste bolje vidjeli"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Otvorite aplikaciju <xliff:g id="NAME">%s</xliff:g> preko cijelog zaslona za bolji prikaz"</string>
     <string name="done_label" msgid="7283767013231718521">"Gotovo"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Kružni klizač sati"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Kružni klizač minuta"</string>
@@ -1875,7 +1879,7 @@
     <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"Štednja baterije uključuje tamnu temu i ograničava ili isključuje aktivnosti u pozadini, neke vizualne efekte, određene značajke i neke mrežne veze."</string>
     <string name="battery_saver_description" msgid="8518809702138617167">"Štednja baterije uključuje tamnu temu i ograničava ili isključuje aktivnosti u pozadini, neke vizualne efekte, određene značajke i neke mrežne veze."</string>
     <string name="data_saver_description" msgid="4995164271550590517">"Da bi se smanjila potrošnja podatkovnog prometa, štednja podatkovnog prometa onemogućuje nekim aplikacijama slanje ili primanje podataka u pozadini. Aplikacija koju trenutačno upotrebljavate može pristupati podacima, no to će možda činiti rjeđe. To može značiti da se, na primjer, slike neće prikazivati dok ih ne dodirnete."</string>
-    <string name="data_saver_enable_title" msgid="7080620065745260137">"Uključiti štednju podatkovnog prometa?"</string>
+    <string name="data_saver_enable_title" msgid="7080620065745260137">"Želite li uključiti štednju podatkovnog prometa?"</string>
     <string name="data_saver_enable_button" msgid="4399405762586419726">"Uključi"</string>
     <string name="zen_mode_duration_minutes_summary" msgid="4555514757230849789">"{count,plural, =1{1 min (do {formattedTime})}one{# min (do {formattedTime})}few{# min (do {formattedTime})}other{# min (do {formattedTime})}}"</string>
     <string name="zen_mode_duration_minutes_summary_short" msgid="1187553788355486950">"{count,plural, =1{1 min (do {formattedTime})}one{# min (do {formattedTime})}few{# min (do {formattedTime})}other{# min (do {formattedTime})}}"</string>
@@ -1888,7 +1892,7 @@
     <string name="zen_mode_until_next_day" msgid="1403042784161725038">"Do <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_until" msgid="2250286190237669079">"Do <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_alarm" msgid="7046911727540499275">"Do <xliff:g id="FORMATTEDTIME">%1$s</xliff:g> (sljedeći alarm)"</string>
-    <string name="zen_mode_forever" msgid="740585666364912448">"Dok ne isključite"</string>
+    <string name="zen_mode_forever" msgid="740585666364912448">"Do isključivanja"</string>
     <string name="zen_mode_forever_dnd" msgid="3423201955704180067">"Dok ne isključite \"Ne uznemiravaj\""</string>
     <string name="zen_mode_rule_name_combination" msgid="7174598364351313725">"<xliff:g id="FIRST">%1$s</xliff:g>/<xliff:g id="REST">%2$s</xliff:g>"</string>
     <string name="toolbar_collapse_description" msgid="8009920446193610996">"Sažmi"</string>
@@ -1958,7 +1962,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Aplikacija nije dostupna"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> trenutačno nije dostupna."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> – nije dostupno"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Potrebno je dopuštenje"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Upit za dopuštenje je spriječen"</string>
     <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>
@@ -1969,6 +1973,9 @@
     <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 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 telefonu."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tv" msgid="4706276040125072077">"Aplikacija zahtijeva dodatna dopuštenja, no dopuštenja se ne mogu odobriti u sesiji streaminga. Dopuštenje najprije odobrite na Android TV uređaju."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Aplikacija zahtijeva dodatna dopuštenja, no dopuštenja se ne mogu odobriti u sesiji streaminga. Dopuštenje najprije odobrite na tabletu."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Aplikacija zahtijeva dodatna dopuštenja, no dopuštenja se ne mogu odobriti u sesiji streaminga. Dopuštenje najprije odobrite na 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>
@@ -1977,6 +1984,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"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="deprecated_target_sdk_message" msgid="5246906284426844596">"Ova je aplikacija razvijena za stariju verziju Androida. Možda neće funkcionirati pravilno i ne uključuje najnovije zaštite sigurnosti i privatnosti. Provjerite je li za tu aplikaciju dostupno ažuriranje ili se obratite razvojnom programeru."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Provjeri ažuriranja"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Aplikacija nije kompatibilna s najnovijom verzijom Androida. Provjerite je li za tu aplikaciju dostupno ažuriranje ili se obratite razvojnom programeru."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Imate nove poruke"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Otvorite SMS aplikaciju da biste pregledali poruke"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Funkcije mogu biti ograničene"</string>
@@ -2093,7 +2101,7 @@
     <string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"U redu"</string>
     <string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"Isključi"</string>
     <string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"Saznajte više"</string>
-    <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"U Androidu 12 poboljšane obavijesti zamjenjuju prilagodljive obavijesti za Android. Ta značajka prikazuje predložene radnje i odgovore te organizira vaše obavijesti.\n\nPoboljšane obavijesti mogu pristupati sadržaju obavijesti, uključujući osobne podatke kao što su imena kontakata i poruke. Ta značajka može i odbacivati obavijesti ili poduzimati radnje u vezi s njima, na primjer može odgovarati na telefonske pozive i upravljati značajkom Ne uznemiravaj."</string>
+    <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Androidove prilagodljive obavijesti zamijenjene su poboljšanim obavijestima na Androidu 12. Ta značajka prikazuje predložene radnje i odgovore te organizira vaše obavijesti.\n\nPoboljšane obavijesti mogu pristupati sadržaju obavijesti, uključujući osobne podatke kao što su imena kontakata i poruke. Ta značajka može i odbacivati obavijesti ili poduzimati radnje u vezi s njima, na primjer može odgovarati na telefonske pozive i upravljati značajkom Ne uznemiravaj."</string>
     <string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Obavještavanje o informacijama u Rutinskom načinu rada"</string>
     <string name="dynamic_mode_notification_title" msgid="1388718452788985481">"Uključena je štednja baterije"</string>
     <string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"Smanjuje se potrošnja baterije radi produženja njezinog trajanja"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Taj se sadržaj ne može otvoriti pomoću poslovnih aplikacija"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Taj se sadržaj ne može dijeliti pomoću osobnih aplikacija"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Taj se sadržaj ne može otvoriti pomoću osobnih aplikacija"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Poslovni profil je pauziran"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Dodirnite da biste uključili"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Poslovne aplikacije su pauzirane"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Ponovno pokreni"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Poslovne aplikacije nisu dostupne"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Osobne aplikacije nisu dostupne"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Otvoriti aplikaciju <xliff:g id="APP">%s</xliff:g> za poslovni profil?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Otvoriti u aplikaciji <xliff:g id="APP">%s</xliff:g> za osobni profil?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Otvoriti u aplikaciji <xliff:g id="APP">%s</xliff:g> za poslovni profil?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Želite li nazvati putem poslovne aplikacije?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Želite li prebaciti na poslovnu aplikaciju?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Vaša organizacija dopušta upućivanje poziva samo iz poslovnih aplikacija"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Vaša organizacija dopušta slanje poruka samo iz poslovnih aplikacija"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Koristi osobni preglednik"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Koristi poslovni preglednik"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Nazovi"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Prebaci"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN za otključavanje SIM mreže."</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN za otključavanje podskupa SIM mreže"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN za otključavanje poslovnog SIM-a"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"S vašeg uređaja <xliff:g id="DEVICE">%1$s</xliff:g> nije moguće pristupiti fotoaparatu telefona"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"S vašeg uređaja <xliff:g id="DEVICE">%1$s</xliff:g> nije moguće pristupiti fotoaparatu tableta"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Sadržaju nije moguće pristupiti tijekom streaminga. Pokušajte mu pristupiti na telefonu."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Slika u slici ne može se prikazivati tijekom streaminga"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Zadane postavke sustava"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KARTICA <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Dopuštenje profila popratne aplikacije sata za upravljanje satovima"</string>
@@ -2323,8 +2337,8 @@
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> upotrebljava oba zaslona za prikazivanje sadržaja"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Uređaj se pregrijao"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dvostruki zaslon nije podržan jer se vaš telefon pregrijao"</string>
-    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Značajka Dual Screen nije dostupna"</string>
-    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Značajka Dual Screen nije dostupna jer je uključena štednja baterije. To možete isključiti u postavkama."</string>
+    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dvostruki zaslon nije dostupan"</string>
+    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dvostruki zaslon nije dostupan jer je uključena štednja baterije. Možete je isključiti u postavkama."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Otvorite Postavke"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Isključi"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"Konfiguriran je uređaj <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index c67738c..bdf81a5 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android rendszer"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Váltás személyes profilra"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Váltás munkaprofilra"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Váltás személyes <xliff:g id="APP_NAME">%1$s</xliff:g>-profilra"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Váltás munkahelyi <xliff:g id="APP_NAME">%1$s</xliff:g>-profilra"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Névjegyek"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"hozzáférés a névjegyekhez"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Helyadatok"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Lehetővé teszi az alkalmazás számára a rezgés vezérlését."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Lehetővé teszi az alkalmazás számára a rezgés állapotához való hozzáférést."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"telefonszámok közvetlen hívása"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Lehetővé teszi az alkalmazás számára, hogy az Ön jóváhagyása nélkül hívjon fel telefonszámokat. Ennek eredményeként váratlan terhelésekkel vagy telefonhívásokkal találkozhat. Vegye figyelembe, hogy ez nem teszi lehetővé segélyhívó számok hívását az alkalmazás számára. A rosszindulatú alkalmazások az Ön jóváhagyása nélkül kezdeményezhetnek hívásokat, így költségek merülhetnek fel."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Lehetővé teszi az alkalmazás számára, hogy az Ön közreműködése nélkül hívjon fel telefonszámokat. Ennek eredményeként váratlan terhelésekkel vagy telefonhívásokkal találkozhat. Vegye figyelembe, hogy ez nem teszi lehetővé segélyhívó számok hívását az alkalmazás számára. A rosszindulatú alkalmazások az Ön jóváhagyása nélkül kezdeményezhetnek hívásokat, így költségek merülhetnek fel. Emellett szolgáltatói kódokat tárcsázhatnak, aminek eredményeképp a bejövő hívásokat automatikusan másik számra irányítják át."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"hozzáférés az IMS-hívásszolgáltatáshoz"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Az alkalmazás az IMS-szolgáltatást használhatja híváskezdeményezéshez az Ön közbeavatkozása nélkül."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"telefonállapot és azonosító olvasása"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Lehetővé teszi az alkalmazás számára preferált NFC fizetési szolgáltatási információk (pl. regisztrált alkalmazásazonosítók és útvonali cél) lekérését."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"NFC technológia vezérlése"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Lehetővé teszi az alkalmazás számára, hogy NFC (Near Field Communication - kis hatósugarú vezeték nélküli kommunikáció) technológiát használó címkékkel, kártyákkal és leolvasókkal kommunikáljon."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Biztonságos elemen zajló tranzakciós esemény"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Lehetővé teszi az alkalmazás számára, hogy információkat kapjon a biztonságos elemeken zajló tranzakciókról."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"képernyőzár kikapcsolása"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Lehetővé teszi az alkalmazás számára a billentyűzár és bármely kapcsolódó jelszavas védelem kikapcsolását. Például a telefon feloldja a billentyűzárat bejövő hívás esetén, majd újra bekapcsolja azt a hívás végeztével."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"képernyőzár összetettségi szintjének lekérése"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"A folytatás biometriai feloldással vagy képernyőzárral lehetséges"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Igazolja, hogy Ön az"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"A folytatás biometriai feloldással lehetséges"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"A folytatáshoz használja ujjlenyomatát"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"A folytatáshoz használja az arcalapú feloldást"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"A folytatás biometriai feloldással vagy a képernyőzár feloldásával lehetséges"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrikus hardver nem áll rendelkezésre"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Hitelesítés megszakítva"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Nem ismerhető fel"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Sikertelen arcfelismerés"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Hitelesítés megszakítva"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nem állított be PIN-kódot, mintát vagy jelszót."</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Hiba történt a hitelesítés közben"</string>
@@ -633,7 +640,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Túl világos"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Bekapcsológomb lenyomása észlelve"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Próbálja beállítani"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Módosítsa minden alkalommal kis mértékben ujja helyzetét."</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mindig tegye odébb egy kicsit az ujját"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Az ujjlenyomat nem ismerhető fel"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Az arccal kapcsolatos művelet törölve."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Az Arcalapú feloldást megszakította a felhasználó"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Túl sok próbálkozás. Próbálja újra később."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Túl sokszor próbálkozott. Az Arcalapú feloldás nem áll rendelkezésre."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Túl sok próbálkozás. Használja inkább a képernyőzárat."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Nem sikerült ellenőrizni az arcát. Próbálja újra."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Nem állította be az Arcalapú feloldást"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ELUTASÍTÁS"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Beviteli mód kiválasztása"</string>
     <string name="show_ime" msgid="6406112007347443383">"Maradjon a képernyőn, amíg a billentyűzet aktív"</string>
-    <string name="hardware" msgid="1800597768237606953">"Virtuális billentyűzet"</string>
+    <string name="hardware" msgid="3611039921284836033">"Képernyő-billentyűzet"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"A(z) <xliff:g id="DEVICE_NAME">%s</xliff:g> beállítása"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Fizikai billentyűzetek beállítása"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Koppintson a nyelv és a billentyűzetkiosztás kiválasztásához"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Eltávolítás"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Az ajánlott szint fölé szeretné emelni a hangerőt?\n\nHa hosszú időn át teszi ki magát nagy hangerőnek, azzal károsíthatja a hallását."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Figyelem!\nTúllépte azt az időt, ameddig egy ember fejlhallgatóval biztonságosan hallgathat hangos hangokat egy hét alatt.\n\nEnnek a határértéknek a túllépése maradandóan károsítani fogja a hallását."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Figyelem!\nÖtszörösen túllépte azt az időt, ameddig egy ember fejlhallgatóval biztonságosan hallgathat hangos hangokat egy hét alatt.\n\nA rendszer csökkentette a hangerőt a hallása védelme érdekében."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Az a hangerő, amelyen jelenleg médiatartalmat hallgat, hosszabb idejű hallgatás esetén halláskárosodást okozhat.\n\nHa továbbra is ezen a hangerőn folytatja a lejátszást hosszabb ideig, károsíthatja a hallását."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Figyelem!\nJelenleg nem biztonságos szinten hallgat hangos médiatartalmat.\n\nHa továbbra is ezen a hangerőn folytatja a lejátszást, maradandóan károsodni fog a hallása."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Maradjon a magas hangerő?\n\nA fejhallgató hangereje az ajánlottnál hosszabb ideig volt magasra állítva, ami károsíthatja a hallását."</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Nagy hangerő észlelhető\n\nA fejhallgató hangereje magasabb az ajánlottnál, ami károsíthatja a hallását."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Szeretné használni a Kisegítő lehetőségek billentyűparancsot?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Ha a gyorsparancs aktív, akkor a két hangerőgomb három másodpercig tartó együttes lenyomásával kisegítő funkciót indíthat el."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Bekapcsol gyorsparancsot a kisegítő lehetőségekhez?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Kilépéshez csúsztassa ujját fentről lefelé."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Értem"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Forgassa el a jobb élmény érdekében"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Lépjen ki az osztott képernyős módból a jobb élmény érdekében"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"A jobb élmény érdekében teljes képernyős módban nyissa meg a(z) <xliff:g id="NAME">%s</xliff:g> alkalmazást"</string>
     <string name="done_label" msgid="7283767013231718521">"Kész"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Óra kör alakú csúszkája"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Perc kör alakú csúszkája"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Az alkalmazás nem hozzáférhető"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> jelenleg nem hozzáférhető."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"A(z) <xliff:g id="ACTIVITY">%1$s</xliff:g> nem áll rendelkezése"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Engedély szükséges"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Engedélykérés letiltva"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Ez az alkalmazás további engedélyeket kér, de az engedélyeket nem lehet megadni streamelési munkamenetben. Előbb adja meg az engedélyeket Android TV-eszközén."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Ez az alkalmazás további engedélyeket kér, de az engedélyeket nem lehet megadni streamelési munkamenetben. Előbb adja meg az engedélyeket a táblagépén."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Ez az alkalmazás további engedélyeket kér, de az engedélyeket nem lehet megadni streamelési munkamenetben. Előbb adja meg az engedélyeket 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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"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 telefonon."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Ez az alkalmazás az Android egy korábbi verziójához készült. Előfordulhat, hogy nem működik megfelelően, és nem tartalmazza a legfrissebb biztonsági és adatvédelmi megoldásokat. Keressen frissítést, vagy forduljon az app fejlesztőjéhez."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Frissítés keresése"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Ez az alkalmazás nem kompatibilis az Android legújabb verziójával. Keressen frissítést, vagy forduljon az app fejlesztőjéhez."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Új üzenetei érkeztek"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"SMS-alkalmazás megnyitása a megtekintéshez"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Egyes funkciók korlátozva lehetnek"</string>
@@ -2064,7 +2072,7 @@
     <string name="harmful_app_warning_open_anyway" msgid="5963657791740211807">"MEGNYITÁS MÉGIS"</string>
     <string name="harmful_app_warning_title" msgid="8794823880881113856">"A rendszer kártékony alkalmazást észlelt"</string>
     <string name="slices_permission_request" msgid="3677129866636153406">"A(z) <xliff:g id="APP_0">%1$s</xliff:g> alkalmazás részleteket szeretne megjeleníteni a(z) <xliff:g id="APP_2">%2$s</xliff:g> alkalmazásból"</string>
-    <string name="screenshot_edit" msgid="7408934887203689207">"Szerkesztés"</string>
+    <string name="screenshot_edit" msgid="7408934887203689207">"Módosítás"</string>
     <string name="volume_dialog_ringer_guidance_vibrate" msgid="2055927873175228519">"A hívások és az értesítések rezegnek"</string>
     <string name="volume_dialog_ringer_guidance_silent" msgid="1011246774949993783">"A hívások és az értesítések némák"</string>
     <string name="notification_channel_system_changes" msgid="2462010596920209678">"Rendszermódosítások"</string>
@@ -2095,7 +2103,7 @@
     <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"A bővített értesítések felváltják az androidos alkalmazkodó értesítéseket az Android 12-es verziójában. Ez a funkció javasolt műveleteket és válaszokat mutat, és rendszerezi az értesítéseket.\n\nA bővített értesítések minden értesítéstartalmat olvashatnak (így a személyes adatokat, mint például a névjegyek nevét és az üzeneteket is). Ez a funkció emellett elvetheti az értesítéseket, valamint reagálhat rájuk, például felveheti a telefonhívásokat, és vezérelheti a Ne zavarjanak módot."</string>
     <string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"Információs értesítés a rutinmódról"</string>
     <string name="dynamic_mode_notification_title" msgid="1388718452788985481">"Akkumulátorkímélő mód bekapcsolva"</string>
-    <string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"Akkumulátorhasználat csökkentése a hosszabb akkumulátor-élettartam érdekében"</string>
+    <string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"Akkuhasználat csökkentése a hosszabb akkumulátor-élettartam érdekében"</string>
     <string name="battery_saver_notification_channel_name" msgid="3918243458067916913">"Akkumulátorkímélő mód"</string>
     <string name="battery_saver_off_notification_title" msgid="7637255960468032515">"Akkumulátorkímélő mód kikapcsolva"</string>
     <string name="battery_saver_charged_notification_summary" product="default" msgid="5544457317418624367">"A telefon töltöttsége elegendő. A funkciók használata már nincs korlátozva."</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Ez a tartalom nem nyitható meg munkahelyi alkalmazásokkal"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Ez a tartalom nem osztható meg személyes alkalmazásokkal"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Ez a tartalom nem nyitható meg személyes alkalmazásokkal"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"A munkaprofil használata szünetel"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Koppintson a bekapcsoláshoz"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"A munkahelyi alkalmazások szüneteltetve vannak"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Szüneteltetés feloldása"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nincs munkahelyi alkalmazás"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nincs személyes alkalmazás"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Megnyitja a munkahelyi <xliff:g id="APP">%s</xliff:g> alkalmazást?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"A személyes <xliff:g id="APP">%s</xliff:g> alkalmazásban szeretné megnyitni?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"A munkahelyi <xliff:g id="APP">%s</xliff:g> alkalmazásban szeretné megnyitni?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Hívás a munkahelyi alkalmazásból?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Átvált a munkahelyi alkalmazásra?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Szervezete csak munkahelyi alkalmazásokból engedélyezi a hívásindítást"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Szervezete csak munkahelyi alkalmazásokból engedélyezi az üzenetküldést"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Személyes böngésző használata"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Munkahelyi böngésző használata"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Hívás"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Váltás"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Hálózati SIM feloldó PIN-kódja"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Hálózati SIM alkészletének feloldó PIN-kódja"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Vállalati SIM feloldó PIN-kódja"</string>
@@ -2299,12 +2312,13 @@
     <string name="notification_channel_abusive_bg_apps" msgid="6092140213264920355">"Háttértevékenység"</string>
     <string name="notification_title_abusive_bg_apps" msgid="994230770856147656">"Egy alkalmazás meríti az akkumulátort"</string>
     <string name="notification_title_long_running_fgs" msgid="8170284286477131587">"Az egyik alkalmazás még aktív"</string>
-    <string name="notification_content_abusive_bg_apps" msgid="5296898075922695259">"A(z) <xliff:g id="APP">%1$s</xliff:g> fut a háttérben. Koppintson az akkumulátorhasználat kezeléséhez."</string>
+    <string name="notification_content_abusive_bg_apps" msgid="5296898075922695259">"A(z) <xliff:g id="APP">%1$s</xliff:g> fut a háttérben. Koppintson az akkuhasználat kezeléséhez."</string>
     <string name="notification_content_long_running_fgs" msgid="8258193410039977101">"A(z) <xliff:g id="APP">%1$s</xliff:g> befolyásolhatja az akkumulátor üzemidejét. Koppintson az aktív alkalmazások áttekintéséhez."</string>
     <string name="notification_action_check_bg_apps" msgid="4758877443365362532">"Aktív alkalmazások ellenőrzése"</string>
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Nem lehet hozzáférni a telefon kamerájához a következő eszközön: <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Nem lehet hozzáférni a táblagép kamerájához a következő eszközön: <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Ehhez a tartalomhoz nem lehet hozzáférni streamelés közben. Próbálja újra a telefonján."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Streamelés közben nem lehetséges a kép a képben módban való lejátszás"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Rendszerbeállítás"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KÁRTYA: <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Társóra-profilra vonatkozó engedély az órák kezeléséhez"</string>
@@ -2317,13 +2331,13 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Lehetővé teszi a társalkalmazások számára, hogy előtérben futó szolgáltatásokat indítsanak a háttérből."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"A mikrofon rendelkezésre áll"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"A mikrofon le van tiltva"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Két képernyő"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"A Két képernyő funkció be van kapcsolva"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"A Dual Screen funkció be van kapcsolva"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> mindkét kijelzőt használja a tartalmak megjelenítésére"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Az eszköz túl meleg"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"A Két képernyő funkció nem áll rendelkezésre, mert a telefon melegedni kezdett"</string>
-    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"A Két képernyő funkció nem használható"</string>
-    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"A Két képernyő funkció nem használható, mert az Akkumulátorkímélő mód be van kapcsolva. Ezt a funkciót a beállítások között lehet kikapcsolni."</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"A Dual Screen funkció nem áll rendelkezésre, mert a telefon melegedni kezdett"</string>
+    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"A Dual Screen funkció nem használható"</string>
+    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"A Dual Screen funkció nem használható, mert az Akkumulátorkímélő mód be van kapcsolva. Ezt a funkciót a beállítások között lehet kikapcsolni."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Lépjen a Beállítások menübe"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Kikapcsolás"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> beállítva"</string>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index 23fc156..6eec876 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -298,9 +298,11 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android համակարգ"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Բացել անձնական պրոֆիլը"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Բացել աշխատանքային պրոֆիլը"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Անցնել անձնական <xliff:g id="APP_NAME">%1$s</xliff:g> պրոֆիլին"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Անցնել աշխատանքային <xliff:g id="APP_NAME">%1$s</xliff:g> պրոֆիլին"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Կոնտակտներ"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"օգտագործել ձեր կոնտակտները"</string>
-    <string name="permgrouplab_location" msgid="1858277002233964394">"Տեղորոշում"</string>
+    <string name="permgrouplab_location" msgid="1858277002233964394">"Տեղադրություն"</string>
     <string name="permgroupdesc_location" msgid="1995955142118450685">"տեղորոշել այս սարքը"</string>
     <string name="permgrouplab_calendar" msgid="6426860926123033230">"Օրացույց"</string>
     <string name="permgroupdesc_calendar" msgid="6762751063361489379">"օգտագործել օրացույցը"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Թույլ է տալիս հավելվածին կառավարել թրթռոցը:"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Հավելվածին թույլ է տալիս օգտագործել սարքի թրթռալու ռեժիմը։"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"ուղղակիորեն զանգել հեռախոսահամարներին"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Թույլ է տալիս հավելվածին զանգել հեռախոսահամարներին առանց ձեր միջամտության: Սա կարող է հանգեցնել անկանխատեսելի գանձումների կամ զանգերի: Նկատի ունեցեք, որ սա թույլ չի տալիս հավելվածին զանգել արտակարգ իրավիճակների համարներին: Վնասարար հավելվածները կարող են ձեր հաշվից զանգեր կատարել` առանց ձեր հաստատման:"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Թույլ է տալիս հավելվածին զանգել հեռախոսահամարների՝ առանց ձեր միջամտության։ Սա կարող է հանգեցնել անկանխատեսելի գանձումների կամ զանգերի: Նկատի ունեցեք, որ սա թույլ չի տալիս հավելվածին զանգել արտակարգ իրավիճակների համարներին: Վնասակար հավելվածները կարող են գումար կորզել՝ կատարելով զանգեր առանց ձեր հաստատման կամ հավաքել համարներ, որոնց արդյունքում ստանում եք մուտքային զանգեր՝ այլ համարի ավտոմատ փոխանցելու համար։"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"օգտվել IMS զանգերի ծառայությունից"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Թույլ է տալիս հավելվածին IMS ծառայության միջոցով կատարել զանգեր՝ առանց ձեր միջամտության:"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"կարդալ հեռախոսի կարգավիճակը և ինքնությունը"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Թույլ է տալիս հավելվածին ստանալ նախընտրելի NFC վճարային ծառայության մասին տեղեկություններ (օր․՝ գրանցված լրացուցիչ սարքերի և երթուղու նպատակակետի մասին տվյալներ)։"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"վերահսկել Մոտ Տարածությամբ Հաղորդակցումը"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Թույլ է տալիս հավելվածին հաղորդակցվել Մոտ տարածությամբ հաղորդակցման (NFC) պիտակների, քարտերի և ընթերցիչների հետ:"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Secure Element գործարքի իրադարձություն"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Թույլ է տալիս հավելվածին ստանալ տեղեկություններ Secure Element-ում կատարվող գործարքների մասին։"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"անջատել ձեր էկրանի կողպեքը"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Թույլ է տալիս հավելվածին անջատել ստեղնաշարի կողպումը և ցանկացած կապված գաղտնաբառի պաշտպանվածությունը: Սրա ճիշտ օրինակն է, երբ հեռախոսը անջատում է ստեղնաշարի կողպումը մուտքային զանգ ստանալիս, հետո այն կրկին միացնում է, երբ զանգը ավարտվում է:"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"հարցում էկրանի կողպման բարդության մակարդակի մասին"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Օգտագործել կենսաչափական համակարգեր կամ էկրանի կողպում"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Հաստատեք ձեր ինքնությունը"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Շարունակելու համար օգտագործեք կենսաչափական համակարգեր"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Շարունակելու համար օգտագործեք ձեր մատնահետքը"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Շարունակելու համար օգտագործեք դեմքով իսկորոշումը"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Շարունակելու համար օգտագործեք ձեր կենսաչափական տվյալները կամ էկրանի կողպումը"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Կենսաչափական սարքը հասանելի չէ"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Նույնականացումը չեղարկվեց"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Չհաջողվեց ճանաչել"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Դեմքը չի ճանաչվել"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Նույնականացումը չեղարկվեց"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Ավելացրեք PIN կոդ, նախշ կամ գաղտնաբառ։"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Չհաջողվեց նույնականացնել"</string>
@@ -633,7 +640,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Շատ լուսավոր է"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Հայտնաբերվել է սնուցման կոճակի սեղմում"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Փորձեք փոխել մատի դիրքը"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ամեն անգամ թեթևակի փոխեք մատի դիրքը"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Թեթևակի փոխեք մատի դիրքն ամեն անգամ"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Մատնահետքը չի ճանաչվել"</string>
@@ -679,12 +686,12 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"Թույլ լուսավորություն"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Փոքր-ինչ հեռու պահեք հեռախոսը"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Մոտեցրեք հեռախոսը"</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"Բարձրացրեք հեռախոսը"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"Իջեցրեք հեռախոսը"</string>
-    <string name="face_acquired_too_right" msgid="6245286514593540859">"Տեղափոխեք հեռախոսը ձախ"</string>
-    <string name="face_acquired_too_left" msgid="9201762240918405486">"Տեղափոխեք հեռախոսը աջ"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"Պահեք հեռախոսն ավելի վերև"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"Պահեք հեռախոսն ավելի ներքև"</string>
+    <string name="face_acquired_too_right" msgid="6245286514593540859">"Հեռախոսը շարժեք դեպի ձախ"</string>
+    <string name="face_acquired_too_left" msgid="9201762240918405486">"Հեռախոսը շարժեք դեպի աջ"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Նայեք ուղիղ էկրանին։"</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Ձեր դեմքը չի երևում։ Հեռախոսը պահեք աչքերի մակարդակում։"</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Դեմքը չի երևում։ Հեռախոսը պահեք աչքերի մա­­կարդակում։"</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Շատ եք շարժում։ Հեռախոսն անշարժ պահեք։"</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Նորից փորձեք։"</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Դեմքը չի հաջողվում ճանաչել։ Նորից փորձեք։"</string>
@@ -692,7 +699,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Նայեք ուղիղ էկրանին"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Նայեք ուղիղ էկրանին"</string>
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Նայեք ուղիղ էկրանին"</string>
-    <string name="face_acquired_obscured" msgid="4917643294953326639">"Հեռացրեք այն ամենը, ինչը թաքցնում է ձեր երեսը:"</string>
+    <string name="face_acquired_obscured" msgid="4917643294953326639">"Հեռացրեք այն ամենը, ինչը փակում է ձեր դեմքը։"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Մաքրեք էկրանի վերևի մասը, ներառյալ սև գոտին"</string>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Դեմքը մասամբ ծածկված է։ Պետք է լրիվ տեսանելի լինի։"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Չհաջողվեց հաստատել դեմքը։ Սարքն անհասանելի է:"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Դեմքի ճանաչումը չեղարկվել է։"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Դեմքով ապակողմումը չեղարկվել է օգտատիրոջ կողմից"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Չափից շատ փորձեր եք կատարել: Փորձեք ավելի ուշ:"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Չափազանց շատ փորձեր են արվել։ Դեմքով ապակողպումն անհասանելի է։"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Չափազանց շատ փորձեր են արվել։ Օգտագործեք էկրանի կողպումը։"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Չհաջողվեց հաստատել դեմքը։ Նորից փորձեք։"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Դուք չեք կարգավորել դեմքով ապակողպումը։"</string>
@@ -1255,7 +1261,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Հավելվածները մեկնարկում են:"</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Բեռնումն ավարտվում է:"</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Դուք սեղմել եք սնուցման կոճակը։ Սովորաբար դրա արդյունքում էկրանն անջատվում է։\n\nՄատնահետքը ավելացնելու համար թեթևակի հպեք կոճակին։"</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Ավարտեք կարգավորումը՝ անջատելով էկրանը"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Անջատեք էկրանը և ավարտեք"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Անջատել"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Շարունակե՞լ մատնահետքի սկանավորումը"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Դուք սեղմել եք սնուցման կոճակը։ Սովորաբար դրա արդյունքում էկրանն անջատվում է։\n\nՄատնահետքը սկանավորելու համար թեթևակի հպեք կոճակին։"</string>
@@ -1369,7 +1375,7 @@
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Հայտնաբերված է անալոգային աուդիո լրասարք"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Կցված սարքը համատեղելի չէ այս հեռախոսի հետ: Հպեք` ավելին իմանալու համար:"</string>
     <string name="adb_active_notification_title" msgid="408390247354560331">"USB-ով վրիպազերծումը միացված է"</string>
-    <string name="adb_active_notification_message" msgid="5617264033476778211">"Հպեք՝ USB-ով վրիպազերծումն անջատելու համար"</string>
+    <string name="adb_active_notification_message" msgid="5617264033476778211">"Հպեք անջատելու համար"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Սեղմեք՝ USB-ով վրիպազերծումն անջատելու համար:"</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Անլար վրիպազերծումը միացված է"</string>
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Հպեք՝ անլար վրիպազերծումն անջատելու համար"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ՄԵՐԺԵԼ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Ընտրեք ներածման եղանակը"</string>
     <string name="show_ime" msgid="6406112007347443383">"Պահել էկրանին, երբ ֆիզիկական ստեղնաշարն ակտիվ է"</string>
-    <string name="hardware" msgid="1800597768237606953">"Ցույց տալ վիրտուալ ստեղնաշարը"</string>
+    <string name="hardware" msgid="3611039921284836033">"Օգտագործել էկրանային ստեղնաշար"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Կարգավորեք <xliff:g id="DEVICE_NAME">%s</xliff:g> սարքը"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Կարգավորեք ֆիզիկական ստեղնաշարերը"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Հպեք՝ լեզուն և դասավորությունն ընտրելու համար"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Հեռացնել"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Ձայնը բարձրացնե՞լ խորհուրդ տրվող մակարդակից ավել:\n\nԵրկարատև բարձրաձայն լսելը կարող է վնասել ձեր լսողությունը:"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Ուշադրություն.\nդուք գերազանցել եք բարձր ձայնային ազդանշանների քանակը, որն անվտանգ է համարվում մեկ շաբաթվա ընթացքում ականջակալներով լսելու համար։\n\nԱյս սահմանաչափն անցնելու դեպքում ձեր լսողությանն անդառնալի վնաս կհասցվի։"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Ուշադրություն.\nդուք 5 անգամ գերազանցել եք բարձր ձայնային ազդանշանների քանակը, որն անվտանգ է համարվում մեկ շաբաթվա ընթացքում ականջակալներով լսելու համար։\n\nՁայնն իջեցվել է՝ ձեր լսողությունը պաշտպանելու համար։"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Երկար ժամանակ ձայնի ուժգնության այս մակարդակով մեդիա բովանդակություն լսելը կարող է վնասել ձեր լսողությունը։\n\nԵթե ձայնը չիջեցնեք, ձեր լսողությունը ժամանակի ընթացքում կարող է վատանալ։"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Ուշադրություն․\nդուք չափազանց բարձր ձայնով եք մեդիա բովանդակություն լսում, ինչը կարող է վտանագավոր լինել։\n\nԵթե չիջեցնեք ձայնը, ձեր լսողությանն անդառնալի վնաս կհասցվի։"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Պահե՞լ ձայնը բարձրացրած\n\nԱկանջակալների ձայնի ուժգնությունը տևական ժամանակ ավելի բարձր է եղել առաջարկվող մակարդակից, ինչը կարող է վնասել ձեր լսողությունը"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Հայտնաբերվել է ձայնի բարձր ուժգնություն\n\nԱկանջակալների ձայնի ուժգնությունը բարձր է առաջարկվող մակարդակից, ինչը կարող է վնասել ձեր լսողությունը"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Օգտագործե՞լ Մատչելիության դյուրանցումը։"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Հատուկ գործառույթն օգտագործելու համար սեղմեք և 3 վայրկյան սեղմած պահեք ձայնի ուժգնության երկու կոճակները, երբ գործառույթը միացված է:"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Միացնե՞լ հատուկ գործառույթների դյուրանցումը"</string>
@@ -1728,7 +1732,7 @@
     <string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"Մի գործառույթից մյուսին անցնելու համար երեք մատը սահեցրեք վերև և պահեք։"</string>
     <string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Խոշորացում"</string>
     <string name="user_switched" msgid="7249833311585228097">"Ներկայիս օգտատերը <xliff:g id="NAME">%1$s</xliff:g>:"</string>
-    <string name="user_switching_message" msgid="1912993630661332336">"Անցում հետևյալ պրոֆիլին՝ <xliff:g id="NAME">%1$s</xliff:g>..."</string>
+    <string name="user_switching_message" msgid="1912993630661332336">"Անցում <xliff:g id="NAME">%1$s</xliff:g> պրոֆիլին..."</string>
     <string name="user_logging_out_message" msgid="7216437629179710359">"Ելք <xliff:g id="NAME">%1$s</xliff:g>-ից…"</string>
     <string name="owner_name" msgid="8713560351570795743">"Սեփականատեր"</string>
     <string name="guest_name" msgid="8502103277839834324">"Հյուր"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Դուրս գալու համար վերևից սահահարվածեք դեպի ներքև:"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Պարզ է"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Պտտեք՝ դիտակերպը լավացնելու համար"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Դուրս եկեք կիսված էկրանի ռեժիմից՝ դիտակերպը լավացնելու համար"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Բացեք <xliff:g id="NAME">%s</xliff:g> հավելվածը լիաէկրան ռեժիմում՝ դիտակերպը լավացնելու համար"</string>
     <string name="done_label" msgid="7283767013231718521">"Պատրաստ է"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Ժամերի ընտրություն թվատախտակից"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Րոպեների ընտրություն թվատախտակից"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Հավելվածը հասանելի չէ"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածն այս պահին հասանելի չէ։"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g>՝ անհասանելի է"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Անհրաժեշտ է թույլտվություն"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Թույլտվության հայտն արգելափակվել է"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Այս հավելվածը պահանջում է լրացուցիչ թույլտվություններ, սակայն դրանք հնարավոր չէ տրամադրել հեռարձակման ժամանակ։ Նախ տրամադրեք թույլտվությունը ձեր Android TV սարքում։"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Այս հավելվածը պահանջում է լրացուցիչ թույլտվություններ, սակայն դրանք հնարավոր չէ տրամադրել հեռարձակման ժամանակ։ Նախ տրամադրեք թույլտվությունը ձեր պլանշետում։"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Այս հավելվածը պահանջում է լրացուցիչ թույլտվություններ, սակայն դրանք հնարավոր չէ տրամադրել հեռարձակման ժամանակ։ Նախ տրամադրեք թույլտվությունը ձեր հեռախոսում։"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"Այս հավելվածը մշակված է Android-ի ավելի հին տարբերակի համար։ Այն չի համապատասխանում անվտանգության և գաղտնիության ապահովման վերջին պահանջներին և կարող է պատշաճ կերպով չաշխատել։ Ստուգեք թարմացումների առկայությունը կամ դիմեք հավելվածի մշակողին։"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Ստուգել նոր տարբերակի առկայությունը"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Այս հավելվածը համատեղելի չէ Android-ի վերջին տարբերակի հետ։ Ստուգեք թարմացումների առկայությունը կամ դիմեք հավելվածը մշակողին։"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Դուք ունեք նոր հաղորդագրություններ"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Դիտելու համար բացել SMS-ների փոխանակման հավելվածը"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Որոշ գործառույթներ կարող են չաշխատել"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Այս բովանդակությունը հնարավոր չէ բացել աշխատանքային հավելվածներով"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Այս բովանդակությունը հնարավոր չէ ուղարկել անձնական հավելվածներով"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Այս բովանդակությունը հնարավոր չէ բացել անձնական հավելվածներով"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Աշխատանքային պրոֆիլի ծառայությունը դադարեցված է"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Հպեք միացնելու համար"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Աշխատանքային հավելվածները դադարեցված են"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Վերսկսել"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Աշխատանքային հավելվածներ չկան"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Անձնական հավելվածներ չկան"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Բացե՞լ աշխատանքային <xliff:g id="APP">%s</xliff:g> հավելվածը"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Բացե՞լ անձնական <xliff:g id="APP">%s</xliff:g> հավելվածում"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Բացե՞լ աշխատանքային <xliff:g id="APP">%s</xliff:g> հավելվածում"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Զանգե՞լ աշխատանքային հավելվածից"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Անցնե՞լ աշխատանքային հավելվածի"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Ձեր կազմակերպությունը թույլատրում է ձեզ զանգեր կատարել միայն աշխատանքային հավելվածներից"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Ձեր կազմակերպությունը թույլատրում է ձեզ հաղորդագրություններ ուղարկել միայն աշխատանքային հավելվածներից"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Օգտագործել անձնական դիտարկիչը"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Օգտագործել աշխատանքային դիտարկիչը"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Զանգել"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Անցնել"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM Network քարտի ապակողպման PIN"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM Network Subset քարտի ապակողպման PIN"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM Corporate քարտի ապակողպման PIN"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Հնարավոր չէ օգտագործել հեռախոսի տեսախցիկը ձեր <xliff:g id="DEVICE">%1$s</xliff:g> սարքից"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Հնարավոր չէ օգտագործել պլանշետի տեսախցիկը ձեր <xliff:g id="DEVICE">%1$s</xliff:g> սարքից"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Այս բովանդակությունը հասանելի չէ հեռարձակման ընթացքում։ Օգտագործեք ձեր հեռախոսը։"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Հեռարձակման ժամանակ հնարավոր չէ դիտել նկարը նկարի մեջ"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Կանխադրված"</string>
     <string name="default_card_name" msgid="9198284935962911468">"ՔԱՐՏ <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Ժամացույցները կառավարելու թույլտվություն ուղեկցող հավելվածի համար"</string>
@@ -2319,14 +2333,14 @@
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Խոսափողն արգելափակված է"</string>
     <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Կրկնակի էկրան"</string>
     <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Կրկնակի էկրանը միացված է"</string>
-    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը երկու էկրաններն էլ օգտագործում է բովանդակություն ցուցադրելու համար"</string>
+    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածն օգտագործում է երկու էկրանները"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Սարքը գերտաքացել է"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Կրկնակի էկրանն անհասանելի է, քանի որ ձեր հեռախոսը գերտաքանում է"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen-ը հասանելի չէ"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screen-ն անհասանելի է, քանի որ Մարտկոցի տնտեսումը միացված է։ Դուք կարող եք անջատել այս գործառույթը Կարգավորումներում։"</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Անցնել Կարգավորումներ"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Անջատել"</string>
-    <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> սարքը կարգավորված է"</string>
+    <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> – կարգավորված է"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Ստեղնաշարի համար կարգավորված է <xliff:g id="LAYOUT_1">%s</xliff:g> դասավորությունը։ Հպեք փոփոխելու համար։"</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Ստեղնաշարի համար կարգավորված են <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> դասավորությունները։ Հպեք փոփոխելու համար։"</string>
     <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Ստեղնաշարի համար կարգավորված են <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g> դասավորությունները։ Հպեք փոփոխելու համար։"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 2b757dc..e65d8e3 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -223,7 +223,7 @@
     <string name="silent_mode_silent" msgid="5079789070221150912">"Pendering mati"</string>
     <string name="silent_mode_vibrate" msgid="8821830448369552678">"Pendering bergetar"</string>
     <string name="silent_mode_ring" msgid="6039011004781526678">"Pendering nyala"</string>
-    <string name="reboot_to_update_title" msgid="2125818841916373708">"Pemutakhiran sistem Android"</string>
+    <string name="reboot_to_update_title" msgid="2125818841916373708">"Update sistem Android"</string>
     <string name="reboot_to_update_prepare" msgid="6978842143587422365">"Bersiap untuk memperbarui..."</string>
     <string name="reboot_to_update_package" msgid="4644104795527534811">"Memproses pembaruan paket…"</string>
     <string name="reboot_to_update_reboot" msgid="4474726009984452312">"Memulai ulang…"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sistem Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Beralih ke profil pribadi"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Beralih ke profil kerja"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Beralih ke <xliff:g id="APP_NAME">%1$s</xliff:g> pribadi"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Beralih ke <xliff:g id="APP_NAME">%1$s</xliff:g> kerja"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontak"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"mengakses kontak"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Lokasi"</string>
@@ -473,7 +475,7 @@
     <string name="permdesc_writeCalendar" product="default" msgid="5416380074475634233">"Aplikasi ini dapat menambahkan, menghapus, atau mengubah acara kalender di ponsel. Aplikasi ini dapat mengirim pesan yang kelihatannya berasal dari pemilik kalender, atau mengubah acara tanpa memberi tahu pemilik."</string>
     <string name="permlab_accessLocationExtraCommands" msgid="5162339812057983988">"akses perintah penyedia lokasi ekstra"</string>
     <string name="permdesc_accessLocationExtraCommands" msgid="355369611979907967">"Memungkinkan aplikasi mengakses perintah penyedia lokasi ekstra. Tindakan ini memungkinkan aplikasi mengganggu pengoperasian GPS atau sumber lokasi lain."</string>
-    <string name="permlab_accessFineLocation" msgid="6426318438195622966">"akses lokasi akurat hanya saat di latar depan"</string>
+    <string name="permlab_accessFineLocation" msgid="6426318438195622966">"akses lokasi presisi hanya saat di latar depan"</string>
     <string name="permdesc_accessFineLocation" msgid="6732174080240016335">"Aplikasi ini bisa mendapatkan lokasi pasti Anda dari layanan lokasi saat aplikasi sedang digunakan. Layanan lokasi untuk perangkat harus diaktifkan agar aplikasi bisa mendapatkan lokasi. Ini dapat meningkatkan penggunaan baterai."</string>
     <string name="permlab_accessCoarseLocation" msgid="1561042925407799741">"akses perkiraan lokasi hanya saat berada di latar depan"</string>
     <string name="permdesc_accessCoarseLocation" msgid="778521847873199160">"Aplikasi ini bisa mendapatkan perkiraan lokasi Anda dari layanan lokasi saat aplikasi sedang digunakan. Layanan lokasi untuk perangkat harus diaktifkan agar aplikasi bisa mendapatkan lokasi."</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Mengizinkan aplikasi untuk mengendalikan vibrator."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Mengizinkan aplikasi untuk mengakses status vibrator."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"panggil nomor telepon secara langsung"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Memungkinkan aplikasi menghubungi nomor telepon tanpa campur tangan Anda. Izin ini dapat mengakibatkan biaya atau panggilan tak terduga. Perhatikan bahwa izin ini tidak memungkinkan aplikasi menghubungi nomor darurat. Aplikasi berbahaya dapat menyebabkan Anda dikenakan biaya dengan melakukan panggilan tanpa konfirmasi Anda."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Mengizinkan aplikasi memanggil nomor telepon tanpa intervensi Anda. Hal ini dapat mengakibatkan adanya biaya atau panggilan yang tidak terduga. Perhatikan bahwa hal ini tidak memungkinkan aplikasi menghubungi nomor darurat. Anda dapat dikenai biaya oleh aplikasi berbahaya dengan melakukan panggilan tanpa konfirmasi dari Anda, atau menghubungi kode operator yang menyebabkan panggilan masuk dialihkan secara otomatis ke nomor lain."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"akses layanan panggilan IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Memungkinkan aplikasi menggunakan layanan IMS untuk melakukan panggilan tanpa campur tangan Anda."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"baca identitas dan status ponsel"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Mengizinkan aplikasi untuk mendapatkan informasi layanan pembayaran NFC pilihan seperti bantuan terdaftar dan tujuan rute."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"kontrol NFC"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Mengizinkan apl berkomunikasi dengan tag, kartu, dan alat pembaca Komunikasi Nirkabel Jarak Dekat (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Peristiwa transaksi Elemen Pengaman"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Mengizinkan aplikasi menerima informasi tentang transaksi yang dilakukan pada Elemen Pengaman."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"nonaktifkan kunci layar Anda"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Memungkinkan aplikasi menonaktifkan kunci tombol dan keamanan sandi apa pun yang terkait. Misalnya, ponsel menonaktifkan kunci tombol saat menerima panggilan telepon masuk, kemudian mengaktifkan kembali kunci tombol ketika panggilan selesai."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"meminta kompleksitas kunci layar"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Gunakan biometrik atau kunci layar"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifikasi bahwa ini memang Anda"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Gunakan biometrik untuk melanjutkan"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Gunakan sidik jari untuk melanjutkan"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Gunakan wajah untuk melanjutkan"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Gunakan biometrik atau kunci layar untuk melanjutkan"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Hardware biometrik tidak tersedia"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autentikasi dibatalkan"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Tidak dikenali"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Wajah tidak dikenali"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autentikasi dibatalkan"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Tidak ada PIN, pola, atau sandi yang disetel"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Error saat mengautentikasi"</string>
@@ -679,10 +686,10 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"Cahaya tidak cukup"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Jauhkan ponsel"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Dekatkan ponsel"</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"Gerakkan ponsel ke atas"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"Gerakkan ponsel ke bawah"</string>
-    <string name="face_acquired_too_right" msgid="6245286514593540859">"Gerakkan ponsel ke kiri Anda"</string>
-    <string name="face_acquired_too_left" msgid="9201762240918405486">"Gerakkan ponsel ke kanan Anda"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"Geser ponsel ke atas"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"Geser ponsel ke bawah"</string>
+    <string name="face_acquired_too_right" msgid="6245286514593540859">"Geser ponsel ke kiri"</string>
+    <string name="face_acquired_too_left" msgid="9201762240918405486">"Geser ponsel ke kanan"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Lihat langsung ke perangkat."</string>
     <string name="face_acquired_not_detected" msgid="1057966913397548150">"Wajah tidak terlihat. Pegang ponsel sejajar mata."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Terlalu banyak gerakan. Stabilkan ponsel."</string>
@@ -692,15 +699,15 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Lihat lebih lurus ke arah ponsel"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Lihat lebih lurus ke arah ponsel"</string>
     <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_obscured" msgid="4917643294953326639">"Singkirkan semua yang menutupi wajah."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Bersihkan bagian atas layar, termasuk kotak hitam"</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>
+    <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Kacamata hitam terdeteksi. Wajah harus terlihat sepenuhnya."</string>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Penutup wajah terdeteksi. Wajah harus terlihat jelas."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Tidak dapat memverifikasi wajah. Hardware tidak tersedia."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Pemrosesan wajah dibatalkan."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Buka dengan Wajah dibatalkan oleh pengguna"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Terlalu banyak percobaan. Coba lagi nanti."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Terlalu banyak upaya gagal. Buka dengan Wajah tidak tersedia."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Terlalu banyak upaya gagal. Masukkan kunci layar."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Tidak dapat memverifikasi wajah. Coba lagi."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Anda belum menyiapkan Buka dengan Wajah"</string>
@@ -1369,7 +1375,7 @@
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Aksesori audio analog terdeteksi"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Perangkat yang terpasang tidak kompatibel dengan ponsel ini. Ketuk untuk mempelajari lebih lanjut."</string>
     <string name="adb_active_notification_title" msgid="408390247354560331">"Proses debug USB terhubung"</string>
-    <string name="adb_active_notification_message" msgid="5617264033476778211">"Ketuk untuk menonaktifkan proses debug USB"</string>
+    <string name="adb_active_notification_message" msgid="5617264033476778211">"Ketuk untuk nonaktifkan proses debug USB"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Pilih untuk menonaktifkan debugging USB."</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Proses debug nirkabel terhubung"</string>
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Ketuk untuk menonaktifkan proses debug nirkabel."</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"TOLAK"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Pilih metode masukan"</string>
     <string name="show_ime" msgid="6406112007347443383">"Biarkan di layar meski keyboard fisik aktif"</string>
-    <string name="hardware" msgid="1800597768237606953">"Tampilkan keyboard virtual"</string>
+    <string name="hardware" msgid="3611039921284836033">"Gunakan keyboard virtual"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Konfigurasi <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Konfigurasi keyboard fisik"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Ketuk untuk memilih bahasa dan tata letak"</string>
@@ -1618,7 +1624,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"Tablet"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Ponsel"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Pengeras suara dok"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Speaker dok"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Perangkat Eksternal"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Headphone"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Hapus"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Mengeraskan volume di atas tingkat yang disarankan?\n\nMendengarkan dengan volume keras dalam waktu yang lama dapat merusak pendengaran Anda."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Peringatan,\nAnda telah melampaui jumlah sinyal suara keras yang dapat didengarkan dengan aman dalam seminggu melalui headphone.\n\nMelebihi batas ini akan merusak pendengaran Anda secara permanen."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Peringatan,\nAnda telah melampaui 5 kali jumlah sinyal suara keras yang dapat didengarkan dengan aman dalam seminggu melalui headphone.\n\nVolume telah diturunkan untuk melindungi pendengaran Anda."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Level Anda mendengarkan media dapat menyebabkan kerusakan pendengaran jika dilakukan dalam waktu yang lama.\n\nTerus memutar media pada level ini untuk waktu yang lama dapat merusak pendengaran Anda."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Peringatan,\nAnda sedang mendengarkan konten dengan suara keras yang diputar pada level yang tidak aman.\n\nTerus mendengarkan suara sekeras ini akan merusak pendengaran Anda secara permanen."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Tetap mendengarkan dengan volume tinggi?\n\nVolume headphone tinggi selama lebih lama dari yang direkomendasikan, yang dapat merusak pendengaran Anda"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Suara keras terdeteksi\n\nVolume headphone tinggi selama lebih lama dari yang direkomendasikan, yang dapat merusak pendengaran Anda"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Gunakan Pintasan Aksesibilitas?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Saat pintasan aktif, menekan kedua tombol volume selama 3 detik akan memulai fitur aksesibilitas."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Aktifkan pintasan untuk fitur aksesibilitas?"</string>
@@ -1696,7 +1700,7 @@
     <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Jangan aktifkan"</string>
     <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"AKTIF"</string>
     <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"NONAKTIF"</string>
-    <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Izinkan <xliff:g id="SERVICE">%1$s</xliff:g> memiliki kontrol penuh atas perangkat Anda?"</string>
+    <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Izinkan <xliff:g id="SERVICE">%1$s</xliff:g> mengontrol perangkat Anda secara penuh?"</string>
     <string name="accessibility_service_warning_description" msgid="291674995220940133">"Kontrol penuh sesuai untuk aplikasi yang mendukung kebutuhan aksesibilitas Anda, tetapi tidak untuk sebagian besar aplikasi."</string>
     <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Melihat dan mengontrol layar"</string>
     <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"Voice Access dapat membaca semua konten di layar dan menampilkan konten di atas aplikasi lain."</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Untuk keluar, geser layar ke bawah dari atas."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Mengerti"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Putar posisi layar untuk mendapatkan tampilan yang lebih baik"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Keluar dari layar terpisah untuk mendapatkan tampilan yang lebih baik"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Buka <xliff:g id="NAME">%s</xliff:g> dalam layar penuh untuk mendapatkan tampilan yang lebih baik"</string>
     <string name="done_label" msgid="7283767013231718521">"Selesai"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Penggeser putar jam"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Penggeser putar menit"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Aplikasi tidak tersedia"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak tersedia saat ini."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> tidak tersedia"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Perlu izin"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Permintaan izin diblokir"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Aplikasi ini meminta izin tambahan, tetapi izin tidak dapat diberikan dalam sesi streaming. Berikan izin di perangkat Android TV terlebih dahulu."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Aplikasi ini meminta izin tambahan, tetapi izin tidak dapat diberikan dalam sesi streaming. Berikan izin di tablet terlebih dahulu."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Aplikasi ini meminta izin tambahan, tetapi izin tidak dapat diberikan dalam sesi streaming. Berikan izin di ponsel terlebih dahulu."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Setelan ini tidak dapat diakses di <xliff:g id="DEVICE">%1$s</xliff:g>. Coba di ponsel."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Aplikasi ini dibuat untuk versi lama Android. Aplikasi mungkin tidak berfungsi dengan baik dan tidak menyertakan perlindungan privasi dan keamanan terbaru. Periksa update, atau hubungi developer aplikasi."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Periksa apakah ada update"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Aplikasi ini tidak kompatibel dengan versi terbaru Android. Periksa update atau hubungi developer aplikasi."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Ada pesan baru"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Buka aplikasi SMS untuk melihat"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Beberapa fitur tidak dapat digunakan"</string>
@@ -2157,18 +2165,23 @@
     <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Diblokir oleh admin IT Anda"</string>
     <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Konten ini tidak dapat dibagikan dengan aplikasi kerja"</string>
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Konten ini tidak dapat dibuka dengan aplikasi kerja"</string>
-    <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Konten ini tidak dapat dibagikan dengan aplikasi pribadi"</string>
+    <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Konten ini tidak dapat dibagikan ke aplikasi pribadi"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Konten ini tidak dapat dibuka dengan aplikasi pribadi"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Profil kerja dijeda"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Ketuk untuk mengaktifkan"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Aplikasi kerja dijeda"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Batalkan jeda"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Tidak ada aplikasi kerja"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Tidak ada aplikasi pribadi"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Buka <xliff:g id="APP">%s</xliff:g> kerja?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Buka di <xliff:g id="APP">%s</xliff:g> pribadi?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Buka di <xliff:g id="APP">%s</xliff:g> kerja?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Telepon dari aplikasi kerja?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Beralih ke aplikasi kerja?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Organisasi Anda hanya mengizinkan menelepon dari aplikasi kerja"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Organisasi Anda hanya mengizinkan pengiriman pesan dari aplikasi kerja"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Gunakan browser pribadi"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Gunakan browser kerja"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Telepon"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Beralih"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN pembuka kunci SIM network"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN pembuka kunci SIM network subset"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN pembuka kunci SIM corporate"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Tidak dapat mengakses kamera ponsel dari <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Tidak dapat mengakses kamera tablet dari <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Konten ini tidak dapat diakses saat melakukan streaming. Coba di ponsel."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Tidak dapat menampilkan picture-in-picture saat streaming"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Default sistem"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KARTU <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Izin profil Smartwatch Pendamping untuk mengelola smartwatch"</string>
@@ -2318,7 +2332,7 @@
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofon tersedia"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofon diblokir"</string>
     <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Layar ganda"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Layar ganda aktif"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual screen aktif"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> menggunakan kedua layar untuk menampilkan konten"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Suhu perangkat terlalu panas"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Layar ganda tidak tersedia karena suhu ponsel terlalu panas"</string>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index 2190d4c..e904c43 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android kerfið"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Skipta yfir í eigið snið"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Skipta yfir í vinnusnið"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Skipta yfir í eigið snið <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Skipta yfir í vinnusnið <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Tengiliðir"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"fá aðgang að tengiliðunum þínum"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Staðsetning"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Leyfir forriti að stjórna titraranum."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Veitir forritinu aðgang að stöðu titrings."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"hringja beint í símanúmer"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Leyfir forriti að hringja í símanúmer án íhlutunar notanda. Þetta getur haft í för með sér óumbeðin gjöld og símtöl. Athugaðu að þetta leyfir forritinu ekki að hringja í neyðarnúmer. Spilliforrit geta stofnað til kostnaðar fyrir þig með því að hringja símtöl án þinnar heimildar."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Leyfir forriti að hringja í símanúmer án aðgerðar frá þér. Þetta getur haft í för með sér óvænt gjöld eða símtöl. Athugaðu að þetta heimilar forriti ekki að hringja í neyðarnúmer. Skaðleg forrit gætu kostað þig peninga með því að hringja án staðfestingar frá þér eða hringja í kóða símafyrirtækis sem verður til þess að móttekin símtöl verði framsend sjálfkrafa í annað númer."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"fá aðgang að IMS-símtalsþjónustu"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Leyfir forriti að nota IMS-þjónustu til að hringja án inngrips frá þér."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"lesa stöðu símans og auðkenni"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Gerir forritinu kleift að fá valda NFC-greiðsluþjónustu, svo sem skráða aðstoð og áfangastað leiðar."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"stjórna nándarsamskiptum (NFC)"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Leyfir forriti að eiga samskipti við NFC-merki, -spjöld og -lesara (nándarsamskipti)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Færslutilvik í öryggiseiningu"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Gerir forritinu kleift að móttaka upplýsingar um færslur sem fara fram í öryggiseiningu."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"slökkva á skjálásnum"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Leyfir forriti að slökkva á símalásnum og öðrum öryggisaðgerðum tengdum aðgangsorði. Til dæmis gerir síminn lásinn óvirkan þegar símtal berst og læsist svo aftur að símtali loknu."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"biðja um flókinn skjálás"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Nota lífkenni eða skjálás"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Staðfestu hver þú ert"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Notaðu lífkenni til að halda áfram"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Notaðu fingrafarið til að halda áfram"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Notaðu andlitið til að halda áfram"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Notaðu lífkenni eða skjálás til að halda áfram"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Lífkennavélbúnaður ekki tiltækur"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Hætt við auðkenningu"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Þekktist ekki"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Andlit þekkist ekki"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Hætt við auðkenningu"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Ekkert PIN-númer, mynstur eða aðgangsorð stillt"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Villa við auðkenningu"</string>
@@ -636,7 +643,7 @@
     <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Breyttu stöðu fingursins örlítið í hvert skipti"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
-    <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Ekki þekkt fingrafar"</string>
+    <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingrafar þekkist ekki"</string>
     <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingrafar þekkist ekki"</string>
     <string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingrafar staðfest"</string>
     <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Andlit staðfest"</string>
@@ -676,7 +683,7 @@
     <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Þú verður að fara á verkstæði."</string>
     <string name="face_acquired_insufficient" msgid="6889245852748492218">"Ekki tekst að búa til andlitslíkan. Reyndu aftur."</string>
     <string name="face_acquired_too_bright" msgid="8070756048978079164">"Of bjart. Prófaðu mýkri lýsingu."</string>
-    <string name="face_acquired_too_dark" msgid="8539853432479385326">"Of lítið ljós"</string>
+    <string name="face_acquired_too_dark" msgid="8539853432479385326">"Ekki næg birta"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Færðu símann lengra frá"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Færðu símann nær"</string>
     <string name="face_acquired_too_high" msgid="8278815780046368576">"Færðu símann hærra"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Hætt við andlitsgreiningu."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Notandi hætti við andlitskenni."</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Of margar tilraunir. Reyndu aftur síðar."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Of margar tilraunir. Andlitskenni ekki í boði."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Of margar tilraunir. Sláðu inn skjálásinn í staðinn."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Ekki tókst að staðfesta andlit. Reyndu aftur."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Þú hefur ekki sett upp andlitskenni."</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"HAFNA"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Veldu innsláttaraðferð"</string>
     <string name="show_ime" msgid="6406112007347443383">"Halda því á skjánum meðan vélbúnaðarlyklaborðið er virkt"</string>
-    <string name="hardware" msgid="1800597768237606953">"Sýna sýndarlyklaborð"</string>
+    <string name="hardware" msgid="3611039921284836033">"Nota skjályklaborð"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Stilla <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Stilla vélbúnaðarlyklaborð"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Ýttu til að velja tungumál og útlit"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Fjarlægja"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Hækka hljóðstyrk umfram ráðlagðan styrk?\n\nEf hlustað er á háum hljóðstyrk í langan tíma kann það að skaða heyrnina."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Viðvörun,\nÞú hefur náð hámarksfjölda háværra hljóðmerkja sem öruggt er að hlusta á innan viku í heyrnartólum.\n\nEf farið er yfir þessi mörk veldur það varanlegum heyrnarskaða."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Viðvörun,\nÞú hefur náð fimmföldum hámarksfjölda háværra hljóðmerkja sem öruggt er að hlusta á innan viku í heyrnartólum.\n\nBúið er að lækka hljóðstyrkinn til að vernda heyrnina hjá þér."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Hljóðstyrkurinn sem þú notar til að hlusta á efni getur valdið heyrnarskaða við langvarandi notkun.\n\nLangvarandi spilun á þessum hljóðstyrk getur valdið heyrnarskaða."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Viðvörun,\nÞú ert að hlusta á hávært efni með of háum hljóðstyrk.\n\nEf þú heldur áfram að hlusta á þessum hljóðstyrk veldur það varanlegum heyrnarskaða."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Halda áfram að hlusta með háum hljóðstyrk?\n\nHljóðstyrkur í heyrnartólum hefur verið hár í lengri tíma en mælt er með sem gæti valdið heyrnarskaða"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Hátt hljóð greindist\n\nHljóðstyrkur í heyrnartólum hefur verið hærri en mælt er með sem gæti valdið heyrnarskaða"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Viltu nota aðgengisflýtileið?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Þegar flýtileiðin er virk er kveikt á aðgengiseiginleikanum með því að halda báðum hljóðstyrkshnöppunum inni í þrjár sekúndur."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Kveikja á flýtileið fyrir aðgangseiginleika?"</string>
@@ -1696,7 +1700,7 @@
     <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Ekki kveikja"</string>
     <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"KVEIKT"</string>
     <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"SLÖKKT"</string>
-    <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Viltu leyfa <xliff:g id="SERVICE">%1$s</xliff:g> að hafa fulla stjórn yfir tækinu þínu?"</string>
+    <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Viltu leyfa „<xliff:g id="SERVICE">%1$s</xliff:g>“ að hafa fulla stjórn yfir tækinu þínu?"</string>
     <string name="accessibility_service_warning_description" msgid="291674995220940133">"Full stjórnun er viðeigandi fyrir forrit sem hjálpa þér ef þú hefur ekki aðgang, en ekki fyrir flest forrit."</string>
     <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Skoða og stjórna skjá"</string>
     <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"Það getur lesið allt efni á skjánum og birt efni yfir öðrum forritum."</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Strjúktu niður frá efri brún til að hætta."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Ég skil"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Snúðu til að sjá betur"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Lokaðu skjáskiptingu til að sjá betur"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Opnaðu <xliff:g id="NAME">%s</xliff:g> á öllum skjánum til að fá betra yfirlit"</string>
     <string name="done_label" msgid="7283767013231718521">"Lokið"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Valskífa fyrir klukkustundir"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Valskífa fyrir mínútur"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Forrit er ekki tiltækt"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> er ekki tiltækt núna."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ekki í boði"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Heimildar krafist"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Heimildarbeiðni hafnað"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Þetta forrit biður um viðbótarheimildir en ekki er hægt að veita heimildir í streymislotu. Veittu heimildina í Android TV-tækinu fyrst."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Þetta forrit biður um viðbótarheimildir en ekki er hægt að veita heimildir í streymislotu. Veittu heimildina í spjaldtölvunni fyrst."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Þetta forrit biður um viðbótarheimildir en ekki er hægt að veita heimildir í streymislotu. Veittu heimildina í símanum fyrst."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"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="deprecated_target_sdk_message" msgid="5246906284426844596">"Þetta forrit var hannað fyrir eldri útgáfu af Android. Óvíst er að það virki rétt og það inniheldur ekki nýjustu öryggis- og persónuverndarvarnirnar. Leitaðu að uppfærslu eða hafðu samband við þróunaraðila forritsins."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Leita að uppfærslu"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Þetta forrit er ekki samhæft nýjustu útgáfu Android. Athugaðu hvort uppfærsla sé í boði eða hafðu samband við þróunaraðila forritsins."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Þú ert með ný skilaboð"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Opnaðu SMS-forritið til að skoða"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Sum virkni kann að vera takmörkuð"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Ekki er hægt að opna þetta efni með vinnuforritum"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Ekki er hægt að deila þessu efni með forritum til einkanota"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Ekki er hægt að opna þetta efni með forritum til einkanota"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Hlé gert á vinnusniði"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Ýttu til að kveikja"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Hlé gert á vinnuforritum"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Ljúka hléi"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Engin vinnuforrit"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Engin forrit til einkanota"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Opna <xliff:g id="APP">%s</xliff:g> með vinnuprófíl?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Opna í <xliff:g id="APP">%s</xliff:g> til einkanota?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Opna í <xliff:g id="APP">%s</xliff:g> með vinnuprófíl?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Hringja úr vinnuforriti?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Skipta yfir í vinnuforrit?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Fyrirtækið heimilar þér aðeins að hringja úr vinnuforritum"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Fyrirtækið heimilar þér aðeins að senda skilaboð úr vinnuforritum"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Nota einkavafra"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Nota vinnuvafra"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Hringja"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Skipta"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-númer fyrir opnun á SIM-korti netkerfis"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN-númer fyrir opnun á SIM-korti netkerfishlutmengis"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN-númer fyrir opnun á SIM-korti fyrirtækis"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Ekki er hægt að opna myndavél símans úr <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Ekki er hægt að opna myndavél spjaldtölvunnar úr <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Ekki er hægt að opna þetta á meðan streymi stendur yfir. Prófaðu það í símanum í staðinn."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Ekki er hægt að horfa á mynd í mynd á meðan streymi er í gangi"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Sjálfgildi kerfis"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KORT <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Fylgiforrit úrs – prófílheimild til að stjórna úrum"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 9eeff75..66ee832 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Passa al profilo personale"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Passa al profilo di lavoro"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Passa all\'app <xliff:g id="APP_NAME">%1$s</xliff:g> personale"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Passa all\'app <xliff:g id="APP_NAME">%1$s</xliff:g> di lavoro"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contatti"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"Possono accedere ai contatti"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Posizione"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Consente all\'applicazione di controllare la vibrazione."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Consente all\'app di accedere allo stato di vibrazione."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"chiamata diretta n. telefono"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Consente all\'applicazione di chiamare numeri di telefono senza il tuo intervento. Ciò può comportare chiamate o addebiti imprevisti. Tieni presente che ciò non consente all\'applicazione di chiamare numeri di emergenza. Applicazioni dannose potrebbero generare dei costi effettuando chiamate senza la tua conferma."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Consente all\'app di chiamare numeri di telefono senza il tuo intervento. Questo potrebbe comportare chiamate o addebiti imprevisti. Tieni presente che l\'app non può chiamare numeri di emergenza. Le app dannose potrebbero generare dei costi effettuando chiamate senza la tua conferma o componendo codici di operatori a causa dei quali le chiamate in arrivo vengono deviate automaticamente su un altro numero."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"accesso al servizio di chiamata IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Consente all\'app di utilizzare il servizio IMS per fare chiamate senza il tuo intervento."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"lettura stato e identità telefono"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Consente all\'app di recuperare informazioni del servizio di pagamento NFC preferito, quali destinazione della route e identificatori applicazione registrati."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"controllo Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Consente all\'applicazione di comunicare con tag, schede e lettori NFC (Near Field Communication)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Evento di transazione Secure Element"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Consente all\'app di ricevere informazioni sulle transazioni in corso su Secure Element."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"disattivazione blocco schermo"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Consente all\'applicazione di disattivare il blocco tastiera ed eventuali protezioni tramite password associate. Ad esempio, il telefono disattiva il blocco tastiera quando riceve una telefonata in arrivo e lo riattiva al termine della chiamata."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"richiesta di complessità del blocco schermo"</string>
@@ -615,10 +619,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Usa la biometria o il blocco schermo"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifica la tua identità"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Usa la biometria per continuare"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Utilizza la tua impronta per continuare"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Usa il tuo volto per continuare"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Per continuare devi usare i tuoi dati biometrici o il tuo blocco schermo"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Hardware biometrico non disponibile"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autenticazione annullata"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Non riconosciuto"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Volto non riconosciuto"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autenticazione annullata"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Non hai impostato PIN, sequenza o password"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Errore durante l\'autenticazione"</string>
@@ -680,20 +687,20 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"Luce insufficiente"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Allontana il telefono"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Avvicina il telefono"</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"Sposta il telefono più in alto"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"Sposta il telefono più in basso"</string>
-    <string name="face_acquired_too_right" msgid="6245286514593540859">"Sposta il telefono verso sinistra"</string>
-    <string name="face_acquired_too_left" msgid="9201762240918405486">"Sposta il telefono verso destra"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"Sposta lo smartphone più in alto"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"Sposta lo smartphone più in basso"</string>
+    <string name="face_acquired_too_right" msgid="6245286514593540859">"Sposta lo smartphone verso sinistra"</string>
+    <string name="face_acquired_too_left" msgid="9201762240918405486">"Sposta lo smartphone verso destra"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Guarda più direttamente verso il dispositivo."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Impossibile vedere il volto. Tieni il telefono all\'altezza degli occhi."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Volto non visibile. Tieni lo smartphone all\'altezza degli occhi."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Troppo movimento. Tieni fermo il telefono."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Ripeti l\'acquisizione del volto."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Impossibile riconoscere il volto. Riprova."</string>
     <string name="face_acquired_too_similar" msgid="8882920552674125694">"Cambia leggermente la posizione della testa"</string>
-    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Guarda dritto nel telefono"</string>
-    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Guarda dritto nel telefono"</string>
+    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Guarda dritto nello smartphone"</string>
+    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Guarda dritto nello smartphone"</string>
     <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_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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -701,7 +708,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Il tuo volto è coperto. Deve essere visibile per intero."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Imposs. verificare volto. Hardware non disponibile."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Operazione associata al volto annullata."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Sblocco con il volto annullato dall\'utente"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Troppi tentativi. Riprova più tardi."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Troppi tentativi. Sblocco con il volto non disponibile."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Troppi tentativi. Inserisci il blocco schermo."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Impossibile verificare il volto. Riprova."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Non hai configurato lo sblocco con il volto"</string>
@@ -1393,7 +1399,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"RIFIUTO"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Scegli il metodo di immissione"</string>
     <string name="show_ime" msgid="6406112007347443383">"Tieni sullo schermo quando è attiva la tastiera fisica"</string>
-    <string name="hardware" msgid="1800597768237606953">"Mostra tastiera virtuale"</string>
+    <string name="hardware" msgid="3611039921284836033">"Usa tastiera sullo schermo"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configura <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configura le tastiere fisiche"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Tocca per selezionare la lingua e il layout"</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Rimuovi"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Vuoi aumentare il volume oltre il livello consigliato?\n\nL\'ascolto ad alto volume per lunghi periodi di tempo potrebbe danneggiare l\'udito."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Avviso,\nHai superato il limite di segnali audio a forte volume che è possibile ascoltare in sicurezza in una settimana tramite le cuffie.\n\nIl superamento di questo limite causerà danni permanenti al tuo udito."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Avviso,\nHai superato di 5 volte il limite di segnali audio a forte volume che è possibile ascoltare in sicurezza in una settimana tramite le cuffie.\n\nIl volume è stato abbassato per proteggere il tuo udito."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Il livello a cui stai ascoltando contenuti multimediali può causare danni all\'udito se viene usato per periodi di tempo prolungati.\n\nSe continui l\'ascolto a questo livello per lunghi periodi di tempo, il tuo udito potrebbe subire danni."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Avviso,\nStai ascoltando contenuti ad alto volume a un livello non sicuro.\n\nSe continui l\'ascolto a questo volume, il tuo udito subirà danni permanenti."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Vuoi continuare ad ascoltare a un volume alto?\n\nIl volume delle cuffie è rimasto alto per un periodo superiore a quello raccomandato, con il rischio di danneggiare l\'udito"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Rilevato un suono forte\n\nIl volume delle cuffie è più alto di quello raccomandato, con il rischio di danneggiare l\'udito"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Usare la scorciatoia Accessibilità?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Quando la scorciatoia è attiva, puoi premere entrambi i pulsanti del volume per tre secondi per avviare una funzione di accessibilità."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Vuoi attivare la scorciatoia per le funzioni di accessibilità?"</string>
@@ -1717,7 +1721,7 @@
     <string name="color_correction_feature_name" msgid="7975133554160979214">"Correzione del colore"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Modalità a una mano"</string>
     <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Attenuazione extra"</string>
-    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Apparecchi acustici"</string>
+    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Protesi uditive"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"Tieni premuti i tasti del volume. Servizio <xliff:g id="SERVICE_NAME">%1$s</xliff:g> attivato."</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"Tieni premuti i tasti del volume. Servizio <xliff:g id="SERVICE_NAME">%1$s</xliff:g> disattivato."</string>
     <string name="accessibility_shortcut_spoken_feedback" msgid="3760999147597564314">"Rilascia i tasti del volume. Per attivare <xliff:g id="SERVICE_NAME">%1$s</xliff:g>, tieni di nuovo premuti entrambi i tasti del volume per 3 secondi."</string>
@@ -1852,10 +1856,10 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Per uscire, scorri dall\'alto verso il basso."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"OK"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Ruota per migliorare l\'anteprima"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Esci dallo schermo diviso per migliorare l\'anteprima"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Apri <xliff:g id="NAME">%s</xliff:g> a schermo intero per migliorare la visualizzazione"</string>
     <string name="done_label" msgid="7283767013231718521">"Fine"</string>
-    <string name="hour_picker_description" msgid="5153757582093524635">"Dispositivo di scorrimento circolare per le ore"</string>
-    <string name="minute_picker_description" msgid="9029797023621927294">"Dispositivo di scorrimento circolare per i minuti"</string>
+    <string name="hour_picker_description" msgid="5153757582093524635">"Cursore circolare per le ore"</string>
+    <string name="minute_picker_description" msgid="9029797023621927294">"Cursore circolare per i minuti"</string>
     <string name="select_hours" msgid="5982889657313147347">"Seleziona le ore"</string>
     <string name="select_minutes" msgid="9157401137441014032">"Seleziona i minuti"</string>
     <string name="select_day" msgid="2060371240117403147">"Seleziona mese e giorno"</string>
@@ -1952,13 +1956,13 @@
     <string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> non è al momento disponibile. Viene gestita tramite <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
     <string name="app_suspended_more_details" msgid="211260942831587014">"Scopri di più"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Riattiva app"</string>
-    <string name="work_mode_off_title" msgid="6367463960165135829">"Riattivare app di lavoro?"</string>
+    <string name="work_mode_off_title" msgid="6367463960165135829">"Riattivare le app di lavoro?"</string>
     <string name="work_mode_turn_on" msgid="5316648862401307800">"Riattiva"</string>
     <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Emergenza"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"L\'app non è disponibile"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"L\'app <xliff:g id="APP_NAME">%1$s</xliff:g> non è al momento disponibile."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> non disponibile"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Autorizzazione necessaria"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Richiesta di autorizzazione rifiutata"</string>
     <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>
@@ -1969,6 +1973,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Questa app richiede autorizzazioni aggiuntive, ma non è possibile concedere autorizzazioni in una sessione di streaming. Devi prima concedere l\'autorizzazione sul tuo dispositivo Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Questa app richiede autorizzazioni aggiuntive, ma non è possibile concedere autorizzazioni in una sessione di streaming. Devi prima concedere l\'autorizzazione sul tuo tablet."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Questa app richiede autorizzazioni aggiuntive, ma non è possibile concedere autorizzazioni in una sessione di streaming. Devi prima concedere l\'autorizzazione sul tuo smartphone."</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>
@@ -1977,6 +1984,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Non è possibile accedere su <xliff:g id="DEVICE">%1$s</xliff:g>. Prova a usare il telefono."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Questa app è stata progettata per una versione precedente di Android. Potrebbe non funzionare correttamente e non include le protezioni della sicurezza e della privacy più recenti. Verifica la presenza di un aggiornamento o contatta lo sviluppatore dell\'app."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Cerca aggiornamenti"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Questa app non è compatibile con la versione più recente di Android. Verifica la presenza di un aggiornamento o contatta lo sviluppatore dell\'app."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Hai nuovi messaggi"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Apri l\'app SMS per la visualizzazione"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Alcune funzionalità sono limitate"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Questi contenuti non possono essere aperti con app di lavoro"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Questi contenuti non possono essere condivisi con app personali"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Questi contenuti non possono essere aperti con app personali"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Profilo di lavoro in pausa"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Tocca per attivare"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Le app di lavoro sono in pausa"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Riattiva"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nessuna app di lavoro"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nessuna app personale"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Aprire l\'app <xliff:g id="APP">%s</xliff:g> di lavoro?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Aprire nell\'app <xliff:g id="APP">%s</xliff:g> personale?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Aprire nell\'app <xliff:g id="APP">%s</xliff:g> di lavoro?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Chiamare dall\'app di lavoro?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Vuoi passare all\'app di lavoro?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"La tua organizzazione consente di fare chiamate solo dalle app di lavoro"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"La tua organizzazione consente di inviare messaggi solo dalle app di lavoro"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usa il browser personale"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usa il browser di lavoro"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Chiama"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Passa"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN di sblocco rete SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN di sblocco sottoinsieme rete SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN sblocco aziendale SIM"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Impossibile accedere alla fotocamera del telefono dal tuo <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Impossibile accedere alla fotocamera del tablet dal tuo <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Impossibile accedere a questi contenuti durante lo streaming. Prova a usare il telefono."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Impossibile visualizzare Picture in picture durante lo streaming"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Predefinita di sistema"</string>
     <string name="default_card_name" msgid="9198284935962911468">"SCHEDA <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Autorizzazione per il profilo degli smartwatch complementari per gestire gli smartwatch"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index e949591..16b2d17 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -251,7 +251,7 @@
     <string name="global_action_bug_report" msgid="5127867163044170003">"דיווח על באג"</string>
     <string name="global_action_logout" msgid="6093581310002476511">"סיום הפעלה"</string>
     <string name="global_action_screenshot" msgid="2610053466156478564">"צילום מסך"</string>
-    <string name="bugreport_title" msgid="8549990811777373050">"דיווח על באג"</string>
+    <string name="bugreport_title" msgid="8549990811777373050">"דוח על באג"</string>
     <string name="bugreport_message" msgid="5212529146119624326">"הפעולה הזו תאסוף מידע על מצב המכשיר הנוכחי שלך כדי לשלוח אותו כהודעת אימייל. היא תימשך זמן קצר מרגע פתיחת הדיווח על הבאג ועד לשליחת ההודעה בפועל. יש להמתין בסבלנות."</string>
     <string name="bugreport_option_interactive_title" msgid="7968287837902871289">"דוח אינטראקטיבי"</string>
     <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"כדאי להשתמש באפשרות הזו ברוב המקרים. היא מאפשרת לך לעקוב אחר התקדמות הדוח, להזין פרטים נוספים על הבעיה ולצלם את המסך. היא עשויה להשמיט כמה קטעים שנמצאים פחות בשימוש ושיצירת הדיווח עליהם נמשכת זמן רב."</string>
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"‏מערכת Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"החלפה לפרופיל אישי"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"החלפה לפרופיל עבודה"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"מעבר אל <xliff:g id="APP_NAME">%1$s</xliff:g> בפרופיל האישי"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"מעבר אל <xliff:g id="APP_NAME">%1$s</xliff:g> בפרופיל העבודה"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"אנשי קשר"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"גישה אל אנשי הקשר"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"מיקום"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"מאפשרת לאפליקציה לשלוט ברטט."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"מאפשרת לאפליקציה לקבל גישה למצב רטט."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"חיוג ישירות למספרי טלפון"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"מאפשרת לאפליקציה להתקשר למספרי טלפון ללא התערבות המשתמש. הפעולה הזו עשויה לגרום לשיחות או לחיובים לא צפויים. ההרשאה הזו לא מאפשרת לאפליקציה להתקשר למספרי חירום. אפליקציות זדוניות עשויות לגרום לחיובים על ידי ביצוע שיחות ללא האישור שלך."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"ההרשאה הזו מאפשרת לאפליקציה להתקשר לכל מספר טלפון שהוא ללא התערבותך. הפעולה עשויה להוביל לשיחות או לחיובים לא צפויים. לתשומך ליבך, ההרשאה הזו לא מאפשרת לאפליקציה להתקשר למספרי חירום. אפליקציות זדוניות עלולות לגרום לחיובים נוספים בגלל התקשרות לשיחות ללא אישורך, או לחייג לקודי ספק שיגרמו לכך שהשיחות הנכנסות יופנו אוטומטית למספר אחר."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"‏גישה אל שירות שיחות IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"‏מאפשרת לאפליקציה להשתמש בשירות ה-IMS לביצוע שיחות ללא התערבות שלך."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"קריאת הסטטוס והזהות של הטלפון"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"‏מאפשרת לאפליקציה לקבל פרטים על שירות תשלום מועדף ב-NFC, כמו עזרים רשומים ויעד של נתיב."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"שליטה בתקשורת מטווח קצר"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"‏מאפשרת לאפליקציה נהל תקשורת עם תגים, כרטיסים וקוראים מסוג \'תקשורת מטווח קצר\' (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"אירוע עסקה של רכיב מאובטח"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"ההרשאה הזו מאפשרת לאפליקציה לקבל מידע על עסקאות שמתרחשות ברכיב מאובטח."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"ביטול נעילת המסך שלך"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"מאפשרת לאפליקציה להשבית את נעילת המקשים וכל אמצעי אבטחה משויך המבוסס על סיסמה. לדוגמה, הטלפון ישבית את נעילת המקשים במהלך שיחת טלפון נכנסת, ויפעיל מחדש את נעילת המקשים עם סיום השיחה."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"בקשת מידע לגבי מידת המורכבות של נעילת המסך"</string>
@@ -615,20 +619,23 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"שימוש במידע ביומטרי בנעילת מסך"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"אימות הזהות שלך"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"יש להשתמש במידע ביומטרי כדי להמשיך"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"צריך להשתמש בטביעת האצבע כדי להמשיך"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"צריך להשתמש בזיהוי הפנים כדי להמשיך"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"יש להשתמש במידע הביומטרי או בנעילת המסך כדי להמשיך"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"חומרה ביומטרית לא זמינה"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"האימות בוטל"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"לא זוהתה"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"הפנים לא זוהו"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"האימות בוטל"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"עוד לא הוגדרו קוד אימות, קו ביטול נעילה או סיסמה"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"שגיאה באימות"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"שימוש בנעילת מסך"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"יש לבטל את נעילת המסך כדי להמשיך"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"לוחצים לחיצה חזקה על החיישן"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"צריך ללחוץ לחיצה חזקה על החיישן"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"לא ניתן לזהות את טביעת האצבע. יש לנסות שוב."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"עליך לנקות את חיישן טביעות האצבע ולנסות שוב"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"עליך לנקות את החיישן ולנסות שוב"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"לוחצים לחיצה חזקה על החיישן"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"צריך ללחוץ חזק על החיישן"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"הזזת את האצבע לאט מדי. יש לנסות שוב."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"יש להשתמש בטביעת אצבע אחרת"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"בהיר מדי"</string>
@@ -681,11 +688,11 @@
     <string name="face_acquired_too_close" msgid="4453646176196302462">"צריך להרחיק את הטלפון"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"צריך לקרב את הטלפון"</string>
     <string name="face_acquired_too_high" msgid="8278815780046368576">"צריך להגביה את הטלפון"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"צריך להוריד את הטלפון"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"צריך להנמיך את הטלפון."</string>
     <string name="face_acquired_too_right" msgid="6245286514593540859">"צריך להזיז את הטלפון שמאלה"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"צריך להזיז את הטלפון ימינה"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"יש להביט ישירות אל המכשיר."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"אי אפשר לראות את הפנים שלך. יש להחזיק את הטלפון בגובה העיניים."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"לא רואים את הפנים שלך. יש להחזיק את הטלפון בגובה העיניים."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"יותר מדי תנועה. יש להחזיק את הטלפון בצורה יציבה."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"יש לסרוק שוב את הפנים."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"לא ניתן לזהות את הפנים. יש לנסות שוב."</string>
@@ -701,7 +708,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"זוהה שהפנים מכוסות. הפנים שלך חייבות להיות גלויות לגמרי."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"לא ניתן לאמת את הפנים. החומרה לא זמינה."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"הפעולה לאימות הפנים בוטלה."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"הפתיחה ע\"י זיהוי הפנים בוטלה על ידי המשתמש"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"יותר מדי ניסיונות. יש לנסות שוב מאוחר יותר."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"בוצעו יותר מדי ניסיונות. אי אפשר לפתוח בזיהוי פנים."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"בוצעו יותר מדי ניסיונות. יש להשתמש בנעילת המסך במקום."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"לא ניתן לאמת את הפנים. יש לנסות שוב."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"לא הגדרת פתיחה ע\"י זיהוי הפנים"</string>
@@ -1257,7 +1263,7 @@
     <string name="android_upgrading_complete" msgid="409800058018374746">"תהליך האתחול בשלבי סיום."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"לחצת על לחצן ההפעלה – בדרך כלל הפעולה הזו מכבה את המסך.\n\nעליך לנסות להקיש בעדינות במהלך ההגדרה של טביעת האצבע שלך."</string>
     <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"לסיום ההגדרה, יש לכבות את המסך"</string>
-    <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"השבתה"</string>
+    <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"כיבוי"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"להמשיך לאמת את טביעת האצבע שלך?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"לחצת על לחצן ההפעלה – בדרך כלל הפעולה הזו מכבה את המסך.\n\nעליך לנסות להקיש בעדינות כדי לאמת את טביעת האצבע שלך."</string>
     <string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"כיבוי המסך"</string>
@@ -1365,12 +1371,12 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"‏MIDI באמצעות USB מופעל"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"המכשיר מחובר כמצלמת אינטרנט"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"‏אביזר USB מחובר"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"יש להקיש להצגת אפשרויות נוספות."</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"לאפשרויות נוספות, יש להקיש כאן."</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"המכשיר המחובר בטעינה. יש להקיש לאפשרויות נוספות."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"המכשיר זיהה התקן אודיו אנלוגי"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"ההתקן שחיברת לא תואם לטלפון הזה. יש להקיש לקבלת מידע נוסף."</string>
     <string name="adb_active_notification_title" msgid="408390247354560331">"‏ניפוי באגים ב-USB מחובר"</string>
-    <string name="adb_active_notification_message" msgid="5617264033476778211">"‏יש להקיש כדי לכבות את ניפוי הבאגים ב-USB"</string>
+    <string name="adb_active_notification_message" msgid="5617264033476778211">"‏לכיבוי של ניפוי הבאגים ב-USB, יש להקיש"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"‏יש ללחוץ על ההתראה כדי להשבית ניפוי באגים ב-USB."</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"ניפוי הבאגים האלחוטי מחובר"</string>
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"יש להקיש כדי להשבית ניפוי באגים אלחוטי"</string>
@@ -1393,7 +1399,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"עדיף שלא"</string>
     <string name="select_input_method" msgid="3971267998568587025">"בחירה של שיטת הזנה"</string>
     <string name="show_ime" msgid="6406112007347443383">"להשאיר במסך בזמן שהמקלדת הפיזית פעילה"</string>
-    <string name="hardware" msgid="1800597768237606953">"הצגת מקלדת וירטואלית"</string>
+    <string name="hardware" msgid="3611039921284836033">"שימוש במקלדת שמופיעה במסך"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"הגדרה של <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"הגדרת מקלדות פיזיות"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"יש להקיש כדי לבחור שפה ופריסה"</string>
@@ -1619,7 +1625,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"טאבלט"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"טלוויזיה"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"טלפון"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"רמקולים של מעגן"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"רמקולים באביזר עגינה"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"מכשיר חיצוני"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"אוזניות"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"הסרה"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"להגביר את עוצמת הקול מעל לרמה המומלצת?\n\nהאזנה בעוצמת קול גבוהה למשכי זמן ממושכים עלולה לפגוע בשמיעה."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"אזהרה,\nחרגת מגובה עוצמת הקול שאפשר להאזין לה בבטחה באמצעות אוזניות בפרק זמן של שבוע.\n\nחריגה מהמגבלה הזו תגרום נזק לצמיתות לשמיעה שלך."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"אזהרה,\nחרגת פי חמש מגובה עוצמת הקול שאפשר להאזין לה בבטחה באמצעות אוזניות בפרק זמן של שבוע.\n\nעוצמת הקול הוחלשה כדי להגן על השמיעה שלך."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"גובה עוצמת הקול שבה האזנת למדיה עלול לגרום לנזק לשמיעה כאשר הוא נמשך לפרקי זמן ארוכים.\n\nהמשך השמעה בעוצמת הקול הזו לפרקי זמן ארוכים עלול להזיק לשמיעה שלך."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"אזהרה,\nמתבצעת כעת האזנה לתוכן רועש המושמע בעוצמת קול לא בטוחה.\n\nהמשך האזנה בעוצמת הקול הזו יגרום נזק לצמיתות לשמיעה שלך."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"להמשיך להאזין בעוצמת קול גבוהה?\n\nעוצמת הקול של האוזניות הייתה גבוהה במשך יותר זמן מהמומלץ, מה שעלול להזיק לשמיעה"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"זוהה צליל חזק\n\nעוצמת הקול של האוזניות הייתה גבוהה מהמומלץ, מה שעלול להזיק לשמיעה"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"להשתמש בקיצור הדרך לתכונת הנגישות?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"כשקיצור הדרך מופעל, לחיצה על שני לחצני עוצמת הקול למשך שלוש שניות מפעילה את תכונת הנגישות."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"האם להפעיל את מקש הקיצור לתכונות הנגישות?"</string>
@@ -1697,8 +1701,8 @@
     <string name="accessibility_shortcut_off" msgid="3651336255403648739">"לא להפעיל"</string>
     <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"מופעל"</string>
     <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"כבוי"</string>
-    <string name="accessibility_enable_service_title" msgid="3931558336268541484">"להעניק לשירות <xliff:g id="SERVICE">%1$s</xliff:g> שליטה מלאה במכשיר?"</string>
-    <string name="accessibility_service_warning_description" msgid="291674995220940133">"האפשרות לשליטה מלאה במכשיר לא מתאימה לכל האפליקציות, אלא רק לאפליקציות שעוזרות עם צורכי הנגישות שלך."</string>
+    <string name="accessibility_enable_service_title" msgid="3931558336268541484">"להעניק לשירות \'<xliff:g id="SERVICE">%1$s</xliff:g>\' שליטה מלאה במכשיר?"</string>
+    <string name="accessibility_service_warning_description" msgid="291674995220940133">"האפשרות לשליטה מלאה במכשיר לא מתאימה לרוב האפליקציות, אלא רק לאפליקציות שעוזרות עם צורכי הנגישות שלך."</string>
     <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"הצגת המסך ושליטה בו"</string>
     <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"אפשרות לקריאת כל התוכן במסך ולהצגת התוכן מעל אפליקציות אחרות."</string>
     <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"הצגה וביצוע של פעולות"</string>
@@ -1852,7 +1856,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"כדי לצאת, פשוט מחליקים אצבע מלמעלה למטה."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"הבנתי"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"מסובבים כדי לראות טוב יותר"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"צריך לצאת מהמסך המפוצל כדי לראות טוב יותר"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"צריך לפתוח את <xliff:g id="NAME">%s</xliff:g> במסך מלא כדי לראות טוב יותר"</string>
     <string name="done_label" msgid="7283767013231718521">"סיום"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"מחוון שעות מעגלי"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"מחוון דקות מעגלי"</string>
@@ -1958,7 +1962,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"האפליקציה לא זמינה"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> לא זמינה בשלב זה."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> לא זמינה"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"דרושה הרשאה"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"בקשת ההרשאה בוטלה"</string>
     <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>
@@ -1969,6 +1973,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"‏האפליקציה הזו מבקשת הרשאות נוספות, אך לא ניתן להעניק הרשאות בסשן סטרימינג. צריך לתת את ההרשאה קודם במכשיר Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"האפליקציה הזו מבקשת הרשאות נוספות, אך לא ניתן להעניק הרשאות בסשן סטרימינג. צריך לתת את ההרשאה קודם בטאבלט."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"האפליקציה הזו מבקשת הרשאות נוספות, אך לא ניתן להעניק הרשאות בסשן סטרימינג. צריך לתת את ההרשאה קודם בטלפון."</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>
@@ -1977,6 +1984,7 @@
     <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="5246906284426844596">"‏האפליקציה הזו תוכננה לגרסה ישנה יותר של Android. האפליקציה לא כוללת את אמצעי ההגנה האחרונים לאבטחה ופרטיות, ועלולה לא לעבוד כראוי. כדאי לבדוק אם יש עדכון או ליצור קשר עם מפתח האפליקציה."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"יש עדכון חדש?"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"‏האפליקציה הזו לא תואמת לגרסה העדכנית של Android. כדאי לבדוק אם יש עדכון או ליצור קשר עם מפתחי האפליקציה."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"יש לך הודעות חדשות"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"‏יש לפתוח את אפליקציית ה-SMS כדי להציג"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"ייתכן שחלק מהפונקציונליות תהיה מוגבלת"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"אי אפשר לפתוח את התוכן הזה באמצעות אפליקציות לעבודה"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"אי אפשר לשתף את התוכן הזה עם אפליקציות לשימוש אישי"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"אי אפשר לפתוח את התוכן הזה באמצעות אפליקציות לשימוש אישי"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"פרופיל העבודה מושהה"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"יש להקיש כדי להפעיל את פרופיל העבודה"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"האפליקציות לעבודה מושהות"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"ביטול ההשהיה"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"אין אפליקציות לעבודה"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"אין אפליקציות לשימוש אישי"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"לפתוח את <xliff:g id="APP">%s</xliff:g> בפרופיל העבודה?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"לפתוח את <xliff:g id="APP">%s</xliff:g> בפרופיל האישי?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"לפתוח את <xliff:g id="APP">%s</xliff:g> בפרופיל העבודה?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"להתקשר מהאפליקציה לעבודה?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"לעבור לאפליקציה לעבודה?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"בארגון שלך מאפשרים לבצע שיחות רק מאפליקציות לעבודה"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"בארגון שלך מאפשרים לשלוח הודעות רק מאפליקציות לעבודה"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"בדפדפן האישי"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"בדפדפן של העבודה"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"שיחה"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"מעבר"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"‏קוד אימות לביטול הנעילה של רשת SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"‏קוד אימות לביטול הנעילה של תת-קבוצה ברשת SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"‏קוד אימות לביטול הנעילה של כרטיס SIM עסקי"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"לא ניתן לגשת למצלמה של הטלפון מה‑<xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"לא ניתן לגשת למצלמה של הטאבלט מה‑<xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"אי אפשר לגשת לתוכן המאובטח הזה בזמן סטרימינג. במקום זאת, אפשר לנסות בטלפון."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"אי אפשר להציג תמונה בתוך תמונה בזמן סטרימינג"</string>
     <string name="system_locale_title" msgid="711882686834677268">"ברירת המחדל של המערכת"</string>
     <string name="default_card_name" msgid="9198284935962911468">"כרטיס <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"הרשאת פרופיל שעון לאפליקציה נלווית כדי לנהל שעונים"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 79c2dd8..d606468 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -253,9 +253,9 @@
     <string name="bugreport_title" msgid="8549990811777373050">"バグレポート"</string>
     <string name="bugreport_message" msgid="5212529146119624326">"現在のデバイスの状態に関する情報が収集され、その内容がメールで送信されます。バグレポートが開始してから送信可能な状態となるまでには多少の時間がかかりますのでご了承ください。"</string>
     <string name="bugreport_option_interactive_title" msgid="7968287837902871289">"対話型レポート"</string>
-    <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"ほとんどの場合はこのオプションを使用します。レポートの進行状況を追跡し、問題についての詳細情報の確認やスクリーンショットの作成が可能です。レポート作成に時間がかかる、あまり使用されない項目は省略されることがあります。"</string>
+    <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"ほとんどの場合はこのオプションを使用します。レポートの進行状況を追跡し、問題についての詳細情報の入力やスクリーンショットの作成が可能です。レポート作成に時間がかかる、あまり使用されない項目は省略されることがあります。"</string>
     <string name="bugreport_option_full_title" msgid="7681035745950045690">"完全レポート"</string>
-    <string name="bugreport_option_full_summary" msgid="1975130009258435885">"デバイスの反応がないとき、または動作が遅すぎるときにシステムへの影響を最小限に抑えたい場合は、このオプションを使用します。また、すべてのレポート項目を表示したい場合もこのオプションを使用します。詳細情報は表示されず、追加のスクリーンショットは作成されません。"</string>
+    <string name="bugreport_option_full_summary" msgid="1975130009258435885">"デバイスの反応がないときや、動作が遅すぎるときにシステムへの影響を最小限に抑えたい場合、またすべてのレポート項目を表示したい場合にこのオプションを使用します。詳細情報の入力はできず、追加のスクリーンショットを撮ることもできません。"</string>
     <string name="bugreport_countdown" msgid="6418620521782120755">"{count,plural, =1{# 秒後にバグレポート用のスクリーンショットを撮影します。}other{# 秒後にバグレポート用のスクリーンショットを撮影します。}}"</string>
     <string name="bugreport_screenshot_success_toast" msgid="7986095104151473745">"バグレポートのスクリーンショットを取得しました"</string>
     <string name="bugreport_screenshot_failure_toast" msgid="6736320861311294294">"バグレポートのスクリーンショットを取得できませんでした"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android システム"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"個人用プロファイルに切り替える"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"仕事用プロファイルに切り替える"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"個人用の <xliff:g id="APP_NAME">%1$s</xliff:g> に切り替える"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"仕事用の <xliff:g id="APP_NAME">%1$s</xliff:g> に切り替える"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"連絡先"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"連絡先へのアクセス"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"位置情報"</string>
@@ -327,7 +329,7 @@
     <string name="permgrouplab_sensors" msgid="9134046949784064495">"ボディセンサー"</string>
     <string name="permgroupdesc_sensors" msgid="2610631290633747752">"バイタルサインに関するセンサーデータへのアクセス"</string>
     <string name="permgrouplab_notifications" msgid="5472972361980668884">"通知"</string>
-    <string name="permgroupdesc_notifications" msgid="4608679556801506580">"通知の表示"</string>
+    <string name="permgroupdesc_notifications" msgid="4608679556801506580">"通知を表示"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"ウィンドウコンテンツの取得"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"ユーザーがアクセスしているウィンドウのコンテンツを検査します。"</string>
     <string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"タッチガイドの有効化"</string>
@@ -477,7 +479,7 @@
     <string name="permdesc_accessFineLocation" msgid="6732174080240016335">"このアプリは、使用中に、位置情報サービスからデバイスの正確な位置情報を取得できます。アプリが位置情報を取得するには、デバイスで位置情報サービスが ON になっている必要があります。この場合、バッテリー使用量が増えることがあります。"</string>
     <string name="permlab_accessCoarseLocation" msgid="1561042925407799741">"フォアグラウンドでのみおおよその位置情報にアクセス"</string>
     <string name="permdesc_accessCoarseLocation" msgid="778521847873199160">"このアプリは、使用中に、位置情報サービスからデバイスのおおよその位置情報を取得できます。アプリが位置情報を取得するには、デバイスで位置情報サービスがオンになっている必要があります。"</string>
-    <string name="permlab_accessBackgroundLocation" msgid="1721164702777366138">"バックグラウンドでの位置情報へのアクセス"</string>
+    <string name="permlab_accessBackgroundLocation" msgid="1721164702777366138">"バックグラウンドで位置情報にアクセスする"</string>
     <string name="permdesc_accessBackgroundLocation" msgid="8264885066095638105">"このアプリは、使用中でない場合でも、常に位置情報にアクセスできます。"</string>
     <string name="permlab_modifyAudioSettings" msgid="6129039778010031815">"音声設定の変更"</string>
     <string name="permdesc_modifyAudioSettings" msgid="8687227609663124921">"音声全般の設定(音量、出力に使用するスピーカーなど)の変更をアプリに許可します。"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"バイブレーションの制御をアプリに許可します。"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"バイブレーションのオン / オフ状態の把握をアプリに許可します。"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"電話番号発信"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"電話番号への自動発信をアプリに許可します。これにより、予期せぬ発信や料金が発生する可能性があります。なお、緊急通報番号への発信は許可されません。悪意のあるアプリが確認なしで発信し、料金が発生する恐れがあります。"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"電話番号への自動発信をアプリに許可します。許可することで、予期せぬ発信や料金が発生する恐れがあります。この場合、緊急通報への発信はアプリに許可されません。悪意のあるアプリが確認なしで発信して料金が発生したり、携帯通信会社のコードをダイヤルして着信を別の番号に自動転送したりする恐れがあります。"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS通話サービスへのアクセス"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"IMSサービスがユーザー操作なしで電話をかけることをアプリに許可します。"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"デバイス情報と ID の読み取り"</string>
@@ -588,11 +590,13 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"登録されている支援やルートの目的地など、優先される NFC お支払いサービスの情報を取得することをアプリに許可します。"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"NFCの管理"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"NFCタグ、カード、リーダーとの通信をアプリに許可します。"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"セキュア エレメントのトランザクション イベント"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"セキュア エレメントで起きたトランザクションに関する情報の受信をアプリに許可します。"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"画面ロックの無効化"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"キーロックとキーロックに関連付けられたパスワードのセキュリティを無効にすることをアプリに許可します。たとえば、かかってきた電話を受ける際にキーロックを無効にし、通話が終了したらキーロックを再度有効にする場合などに使用します。"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"画面ロックの複雑さのリクエスト"</string>
     <string name="permdesc_requestPasswordComplexity" msgid="1130556896836258567">"このアプリに画面ロックの複雑さレベル(高、中、低、なし)を認識することを許可します。複雑さレベルは、画面ロックの文字数の範囲やタイプを示すものです。アプリから一定レベルまで画面ロックを更新するよう推奨されることもありますが、ユーザーは無視したり別の操作を行ったりできます。画面ロックは平文で保存されないため、アプリが正確なパスワードを知ることはありません。"</string>
-    <string name="permlab_postNotification" msgid="4875401198597803658">"通知の表示"</string>
+    <string name="permlab_postNotification" msgid="4875401198597803658">"通知を表示"</string>
     <string name="permdesc_postNotification" msgid="5974977162462877075">"通知の表示をアプリに許可"</string>
     <string name="permlab_turnScreenOn" msgid="219344053664171492">"画面をオンにする"</string>
     <string name="permdesc_turnScreenOn" msgid="4394606875897601559">"画面をオンにすることをアプリに許可します。"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"生体認証または画面ロックの使用"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"本人確認"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"続行するには生体認証を使用してください"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"続行するには指紋認証を使用してください"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"続行するには顔認証を使用してください"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"続行するには、生体認証または画面ロックを使用してください"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"生体認証ハードウェアが利用できません"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"認証をキャンセルしました"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"認識されませんでした"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"顔を認識できません"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"認証をキャンセルしました"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN、パターン、パスワードが設定されていません"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"エラー認証"</string>
@@ -684,7 +691,7 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"スマートフォンを左に動かしてください"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"スマートフォンを右に動かしてください"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"もっとまっすぐデバイスに顔を向けてください。"</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"顔を確認できません。スマートフォンを目の高さに合わせて持ってください。"</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"顔を確認できません。スマートフォンを目の高さに合わせます。"</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"あまり動かさないでください。安定させてください。"</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"顔を登録し直してください。"</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"顔を認識できません。もう一度お試しください。"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"顔の操作をキャンセルしました。"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"顔認証はユーザーによりキャンセルされました"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"試行回数の上限です。後でもう一度お試しください。"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"試行回数が上限を超えました。顔認証を利用できません。"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"試行回数が上限を超えました。代わりに画面ロック解除を入力してください。"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"顔を確認できません。もう一度お試しください。"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"顔認証を設定していません"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"共有しない"</string>
     <string name="select_input_method" msgid="3971267998568587025">"入力方法の選択"</string>
     <string name="show_ime" msgid="6406112007347443383">"物理キーボードが有効になっていても画面に表示させます"</string>
-    <string name="hardware" msgid="1800597768237606953">"仮想キーボードの表示"</string>
+    <string name="hardware" msgid="3611039921284836033">"画面キーボードの使用"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g>の設定"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"物理キーボードの設定"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"タップして言語とレイアウトを選択してください"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" - "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"削除"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"推奨レベルを超えるまで音量を上げますか?\n\n大音量で長時間聞き続けると、聴力を損なう恐れがあります。"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"警告\nこの 1 週間のヘッドフォンの音量は、聴覚に影響を及ぼす可能性のある大きさを超えていました。\n\nこの限度を超えると聴力を損ない、元に戻らなくなるおそれがあります。"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"警告\nこの 1 週間のヘッドフォンの音量は、聴覚に影響を及ぼす可能性のある大きさを超えることが 5 回ありました。\n\n聴力を守るために音量を下げました。"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"メディアを長期間聴く際の音量によっては、聴覚の障害を招くことがあります。\n\nこのような音量で長期間再生していると、聴覚に影響を及ぼすおそれがあります。"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"警告\n現在、安全なレベルを超えた大音量でコンテンツを再生しています。\n\nこの音量で聴き続けると聴力を損ない、元に戻らなくなるおそれがあります。"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"このまま大音量で聴き続けますか?\n\nおすすめの時間よりも長い時間にわたってヘッドフォンの音量が大きいため、聴力を損なうおそれがあります"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"大きな音が検知されました\n\nヘッドフォンの音量がおすすめの音量よりも大きいため、聴力を損なうおそれがあります"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ユーザー補助機能のショートカットの使用"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"ショートカットが ON の場合、両方の音量ボタンを 3 秒ほど長押しするとユーザー補助機能が起動します。"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"ユーザー補助機能のショートカットを ON にしますか?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"終了するには、上から下にスワイプします。"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"OK"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"画面を回転させて見やすくしましょう"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"分割画面を終了して見やすくしましょう"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"<xliff:g id="NAME">%s</xliff:g> を全画面表示で開いて見やすくしましょう"</string>
     <string name="done_label" msgid="7283767013231718521">"完了"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"円形スライダー(時)"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"円形スライダー(分)"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"アプリの利用不可"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"現在 <xliff:g id="APP_NAME">%1$s</xliff:g> はご利用になれません。"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g>は利用できません"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"権限が必要"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"権限のリクエストが抑制されています"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"このアプリは追加の権限を求めていますが、ストリーミング セッションでは権限を付与できません。Android TV デバイスで先に権限を付与してください。"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"このアプリは追加の権限を求めていますが、ストリーミング セッションでは権限を付与できません。タブレットで先に権限を付与してください。"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"このアプリは追加の権限を求めていますが、ストリーミング セッションでは権限を付与できません。スマートフォンで先に権限を付与してください。"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"このアプリは Android の以前のバージョンを対象としているため、正しく動作しない可能性があります。最新のセキュリティ保護やプライバシー保護は組み込まれていません。アップデートをご確認いただくか、アプリのデベロッパーにお問い合わせください。"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"アップデートを確認"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"このアプリは最新バージョンの Android に対応していません。アップデートをご確認いただくか、アプリのデベロッパーにお問い合わせください。"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"新着メッセージがあります"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"表示するには SMS アプリを開きます"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"一部の機能が制限されることがあります"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"このコンテンツを仕事用アプリで開くことはできません"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"このコンテンツを個人用アプリと共有することはできません"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"このコンテンツを個人用アプリで開くことはできません"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"仕事用プロファイルが一時停止しています"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"タップして ON にする"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"仕事用アプリ一時停止中"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"停止解除"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"仕事用アプリはありません"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"個人用アプリはありません"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"仕事用の <xliff:g id="APP">%s</xliff:g> を開きますか?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"個人用の <xliff:g id="APP">%s</xliff:g> で開きますか?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"仕事用の <xliff:g id="APP">%s</xliff:g> で開きますか?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"仕事用アプリからの通話ですか?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"仕事用アプリに切り替えますか?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"組織では、仕事用アプリからの通話のみ許可されています"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"組織では、仕事用アプリからのメッセージ送信のみ許可されています"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"個人用ブラウザを使用"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"仕事用ブラウザを使用"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"通話"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"切り替える"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM のネットワーク ロック解除 PIN"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM のネットワーク サブネットのロック解除 PIN"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM の企業ロック解除 PIN"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"<xliff:g id="DEVICE">%1$s</xliff:g> からスマートフォンのカメラにアクセスできません"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"<xliff:g id="DEVICE">%1$s</xliff:g> からタブレットのカメラにアクセスできません"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"ストリーミング中はアクセスできません。スマートフォンでのアクセスをお試しください。"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"ストリーミング中はピクチャー イン ピクチャーを表示できません"</string>
     <string name="system_locale_title" msgid="711882686834677268">"システムのデフォルト"</string>
     <string name="default_card_name" msgid="9198284935962911468">"カード <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"ウォッチを管理できるコンパニオン ウォッチ プロファイル権限"</string>
@@ -2325,12 +2339,12 @@
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"デュアル スクリーンを使用できません"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"バッテリー セーバーが ON のため、デュアル スクリーンを使用できません。この動作は設定で OFF にできます。"</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"設定に移動"</string>
-    <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"オフにする"</string>
+    <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"OFF にする"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g>の設定完了"</string>
-    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"キーボードのレイアウトは<xliff:g id="LAYOUT_1">%s</xliff:g>に設定されています。タップすると変更できます。"</string>
-    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"キーボードのレイアウトは<xliff:g id="LAYOUT_1">%1$s</xliff:g>、<xliff:g id="LAYOUT_2">%2$s</xliff:g>に設定されています。タップすると変更できます。"</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"キーボードのレイアウトは<xliff:g id="LAYOUT_1">%1$s</xliff:g>、<xliff:g id="LAYOUT_2">%2$s</xliff:g>、<xliff:g id="LAYOUT_3">%3$s</xliff:g>に設定されています。タップすると変更できます。"</string>
-    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"キーボードのレイアウトは<xliff:g id="LAYOUT_1">%1$s</xliff:g>、<xliff:g id="LAYOUT_2">%2$s</xliff:g>、<xliff:g id="LAYOUT_3">%3$s</xliff:g>に設定されています。タップすると変更できます。"</string>
+    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"キーボードのレイアウトは<xliff:g id="LAYOUT_1">%s</xliff:g>に設定されています。タップで変更できます。"</string>
+    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"キーボードのレイアウトは<xliff:g id="LAYOUT_1">%1$s</xliff:g>、<xliff:g id="LAYOUT_2">%2$s</xliff:g>に設定されています。タップで変更できます。"</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"キーボードのレイアウトは<xliff:g id="LAYOUT_1">%1$s</xliff:g>、<xliff:g id="LAYOUT_2">%2$s</xliff:g>、<xliff:g id="LAYOUT_3">%3$s</xliff:g>に設定されています。タップで変更できます。"</string>
+    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"キーボードのレイアウトは<xliff:g id="LAYOUT_1">%1$s</xliff:g>、<xliff:g id="LAYOUT_2">%2$s</xliff:g>、<xliff:g id="LAYOUT_3">%3$s</xliff:g>などに設定されています。タップで変更できます。"</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"物理キーボードの設定完了"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"タップするとキーボードを表示できます"</string>
 </resources>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index 89ccbe2..2badd0a 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android-ის სისტემა"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"პერსონალურ პროფილზე გადართვა"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"სამსახურის პროფილზე გადართვა"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ის პირად ვერსიაზე გადასვლა"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ის სამსახურის ვერსიაზე გადასვლა"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"კონტაქტები"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"თქვენს კონტაქტებზე წვდომა"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"მდებარეობა"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"აპს შეეძლება, მართოს ვიბრირება."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ნებას რთავს აპს, ჰქონდეს წვდომა ვიბრაციის მდგომარეობაზე."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"პირდაპირი დარეკვა ტელეფონის ნომრებზე"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"აპს შეეძლება დარეკოს ტელეფონის ნომრებზე თქვენი ჩარევის გარეშე. ამან შესაძლოა გამოიწვიოს თქვენს სატელეფონი ქვითარზე მოულოდნელი ხარჯებისა და ზარების გაჩენა. გაითვალისწინეთ, რომ აპს გადაუდებელი დახმარების ნომრებზე დარეკვა არ შეუძლია. მავნე აპებს შეეძლება თქვენი დადასტურების გარეშე ზარების განხორციელება და შესაბამისი საფასურის გადახდაც მოგიწევთ."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"საშუალებას აძლევს აპს, დარეკოს ტელეფონის ნომრებზე თქვენი ჩარევის გარეშე. ამან შეიძლება გამოიწვიოს მოულოდნელი ზარები ან თანხის ჩამოჭრა. გაითვალისწინეთ, რომ ეს საშუალებას არ აძლევს აპს, დარეკოს საგანგებო ვითარებაში საკონტაქტო პირის ნომრებზე. მავნე აპების გამოყენებით, შესაძლოა, თანხის გადახდა მოგიწიოთ თქვენი ნებართვის გარეშე განხორციელებული ზარების გამო, ან იმ ოპერატორების კოდების აკრეფის გამო, რომლებიც ავტომატურად გადაამისამართებს შემომავალ ზარებს სხვა ნომერზე."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS ზარების სერვისზე წვდომა"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"აპს შეეძლება, გამოიყენოს IMS სერვისი ზარების თქვენი ჩარევის გარეშე განსახორციელებლად."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ტელეფონის სტატუსისა და იდენტობის წაკითხვა"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"საშუალებას აძლევს აპს, მიიღოს უპირატესი NFC გადახდის სერვისის ინფორმაცია, მაგალითად, რეგისტრირებული დახმარება და დანიშნულება."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"ახლო მოქმედების რადიოკავშირი (NFC) მართვა"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"აპს შეეძლება ახლო მოქმედების რადიოკავშირის (NFC) მეშვეობით ტეგების, ბარათებისა და წამკითხველების შემცველი მონაცემების მიმოცვლა."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"უსაფრთხო ელემენტის ტრანზაქციის ღონისძიება"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"საშუალებს აძლევს აპს, მიიღოს ინფორმაცია უსაფრთხო ელემენტზე განხორციელებული ტრანზაქციების შესახებ."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"თქვენი ეკრანის ბლოკის გათიშვა"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"შეეძლება კლავიატურის დაბლოკვისა და პაროლით უზრუნველყოფილი ნებისმიერი უსაფრთხოების ფუნქციის დეაქტივაცია. მაგალითად, ტელეფონი შემომავალი ზარის დროს აუქმებს კლავიატურის დაბლოკვას და კვლავ ააქტიურებს მას, როგორც კი ზარი დასრულდება."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"ეკრანის დაბლოკვის მეთოდის სირთულის შესახებ ინფორმაციის მოთხოვნა"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"გამოიყენეთ ბიომეტრიული სისტემა ან ეკრანის დაბლოკვა"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"დაადასტურეთ ვინაობა"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"გასაგრძელებლად გამოიყენეთ თქვენი ბიომეტრიული მონაცემები"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"გასაგრძელებლად გამოიყენეთ თქვენი თითის ანაბეჭდი"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"გასაგრძელებლად გამოიყენეთ სახის ამოცნობა"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"გასაგრძელებლად გამოიყენეთ თქვენი ბიომეტრიული მონაცემები ან ეკრანის განბლოკვის ნიმუში"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"ბიომეტრიული აპარატურა მიუწვდომელია"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"ავტორიზაცია გაუქმდა"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"არ არის ამოცნობილი"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"სახის ამოცნობა ვერ მოხერხდა"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"ავტორიზაცია გაუქმდა"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN-კოდი, ნიმუში ან პაროლი დაყენებული არ არის"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"შეცდომა ავთენტიკაციისას"</string>
@@ -633,7 +640,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"ზედმეტად ნათელია"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"აღმოჩენილია Ძლიერი დაჭერა"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ცადეთ დარეგულირება"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ოდნავ შეცვალეთ თითის დაჭერის ადგილი ყოველ ჯერზე"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ოდნავ შეცვალეთ დაჭერის ადგილი ყოველ ჯერზე"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"თითის ანაბეჭდის ამოცნობა ვერ მოხერხდა"</string>
@@ -684,7 +691,7 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"გაწიეთ ტელეფონი თქვენგან მარცხნივ"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"გაწიეთ ტელეფონი თქვენგან მარჯვნივ"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"გთხოვთ, უფრო პირდაპირ შეხედოთ თქვენს მოწყობილობას."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"თქვენი სახე არ ჩანს. დაიჭირეთ ტელეფონი თვალის დონეზე."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"სახე არ ჩანს. დაიჭირეთ ტელ. თვალის დონეზე."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"მეტისმეტად მოძრაობთ. მყარად დაიჭირეთ ტელეფონი."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"გთხოვთ, ხელახლა დაარეგისტრიროთ თქვენი სახე."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"სახის ამოცნობა ვერ ხერხდება. ცადეთ ხელახლა."</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"სახე დაფარულია. ის მთლიანად უნდა ჩანდეს."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"სახე ვერ დასტურდება. აპარატი მიუწვდომელია."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"სახის ამოცნობა გაუქმდა."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"სახით განბლოკვა გაუქმდა მომხმარებლის მიერ"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"დაფიქსირდა ბევრი მცდელობა. ცადეთ მოგვიანებით."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"მეტისმეტად ბევრი მცდელობა იყო. სახით განბლოკვა მიუწვდომელია."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"მეტისმეტად ბევრი მცდელობა იყო. შეიყვანეთ ეკრანის დაბლოკვის პარამეტრები."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"სახის დადასტურება ვერ ხერხდება. ცადეთ ხელახლა."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"თქვენ არ დაგიყენებიათ სახით განბლოკვა."</string>
@@ -986,7 +992,7 @@
     <string name="lockscreen_transport_stop_description" msgid="1449552232598355348">"შეწყვეტა"</string>
     <string name="lockscreen_transport_rew_description" msgid="7680106856221622779">"უკან გადახვევა"</string>
     <string name="lockscreen_transport_ffw_description" msgid="4763794746640196772">"წინ გადახვევა"</string>
-    <string name="emergency_calls_only" msgid="3057351206678279851">"მხოლოდ გადაუდებელი დახმარების ზარები"</string>
+    <string name="emergency_calls_only" msgid="3057351206678279851">"მხოლოდ გადაუდებელი ზარები"</string>
     <string name="lockscreen_network_locked_message" msgid="2814046965899249635">"ქსელი ჩაკეტილია"</string>
     <string name="lockscreen_sim_puk_locked_message" msgid="2867953953604224166">"SIM დაბლოკილია PUK-ით."</string>
     <string name="lockscreen_sim_puk_locked_instructions" msgid="5307979043730860995">"იხილეთ მომხმარებლის სახელმძღვანელო ან დაუკავშირდით კლიენტების მომსახურებას."</string>
@@ -1369,7 +1375,7 @@
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"აღმოჩენილია ანალოგური აუდიო აქსესუარი"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"მიერთებული მოწყობილობა არაა თავსებადი ამ ტელეფონთან. მეტის გასაგებად, შეეხეთ."</string>
     <string name="adb_active_notification_title" msgid="408390247354560331">"USB გამართვა შეერთებულია"</string>
-    <string name="adb_active_notification_message" msgid="5617264033476778211">"შეეხეთ და გამორთეთ USB შეცდ. გამართვა"</string>
+    <string name="adb_active_notification_message" msgid="5617264033476778211">"შეეხეთ და გამორთეთ USB გამართვა"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"მონიშნეთ რათა შეწყვიტოთ USB-ის გამართვა"</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"შეცდომების უსადენო გამართვა დაკავშირებულია"</string>
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"შეეხეთ შეცდომების უსადენო გამართვის გამოსართავად"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"უარყოფა"</string>
     <string name="select_input_method" msgid="3971267998568587025">"აირჩიეთ შეყვანის მეთოდი"</string>
     <string name="show_ime" msgid="6406112007347443383">"აქტიური ფიზიკური კლავიატურისას ეკრანზე შენარჩუნება"</string>
-    <string name="hardware" msgid="1800597768237606953">"ვირტუალური კლავიატურის ჩვენება"</string>
+    <string name="hardware" msgid="3611039921284836033">"ეკრანული კლავიატურის გამოყენება"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"მოახდინეთ <xliff:g id="DEVICE_NAME">%s</xliff:g>-ის კონფიგურირება"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"მოახდინეთ ფიზიკური კლავიატურების კონფიგურირება"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"შეეხეთ ენისა და განლაგების ასარჩევად"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"ამოშლა"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"გსურთ ხმის რეკომენდებულ დონეზე მაღლა აწევა?\n\nხანგრძლივად ხმამაღლა მოსმენით შესაძლოა სმენადობა დაიზიანოთ."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"გაფრთხილება,\nთქვენ გადააჭარბეთ ყურსასმენებით ერთ კვირაში ხმამაღალი სიგნალების უსაფრთხოდ მოსმენის დასაშვებ რაოდენობას.\n\nმოცემულ ზღვარს თუ გადააჭარბებთ, ეს სამუდამოდ დაგიზიანებთ სმენას."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"გაფრთხილება,\nთქვენ 5-ჯერ გადააჭარბეთ ყურსასმენებით ერთ კვირაში ხმამაღალი სიგნალების უსაფრთხოდ მოსმენის დასაშვებ რაოდენობას.\n\nხმა დაწეულია თქვენი სმენის დასაცავად."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"ხმის დონეს, რომელზეც მედიას უსმენთ, შეიძლება შედეგად მოყვეს სმენის დაზიანება თუ ამას ხანგრძლივად გააგრძელებთ.\n\nთუ გააგრძელებთ ხანგრძლივად დაკვრას ხმის მოცემულ დონეზე, ამან შეიძლება დააზიანოს თქვენი სმენა."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"გაფრთხილება,\nამჟამად უსმენთ ხმამაღალ კონტენტს, რომლის დაკვრის ხმის დონე არ არის უსაფრთხო.\n\nასეთი ხმამაღალი კონტენტის დაკვრა სამუდამოდ დაგიზიანებთ სმენას."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"განაგრძობთ მაღალ ხმაზე მოსმენას?\n\nყურსასმენების ხმა მაღალი იყო რეკომენდებულზე დიდხანს, რამაც შესაძლოა თქვენი სმენა დააზიანოს"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"მაღალი ხმაა ამოცნობილი\n\nყურსასმენების ხმა რეკომენდებულზე მაღალი იყო, რამაც შესაძლოა თქვენი სმენა დააზიანოს"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"გსურთ მარტივი წვდომის მალსახმობის გამოყენება?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"თუ მალსახმობი ჩართულია, ხმის ორივე ღილაკზე 3 წამის განმავლობაში დაჭერით მარტივი წვდომის ფუნქცია ჩაირთვება."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"ჩაირთოს მარტივი წვდომის ფუნქციების მალსახმობი?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"გამოსვლისათვის, გაასრიალეთ ზემოდან ქვემოთ."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"გასაგებია"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"შეატრიალეთ უკეთესი ხედისთვის"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"უკეთესი ხედვისთვის გამოდით გაყოფილი ეკრანიდან"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"გახსენით <xliff:g id="NAME">%s</xliff:g> სრულ ეკრანზე უკეთესი ხედისთვის"</string>
     <string name="done_label" msgid="7283767013231718521">"დასრულდა"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"საათების წრიული სლაიდერი"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"წუთების წრიული სლაიდერი"</string>
@@ -1951,13 +1955,13 @@
     <string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ამჟამად მიუწვდომელია. ის იმართება <xliff:g id="APP_NAME_1">%2$s</xliff:g>-ის მიერ."</string>
     <string name="app_suspended_more_details" msgid="211260942831587014">"შეიტყვეთ მეტი"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"აპის დაპაუზების გაუქმება"</string>
-    <string name="work_mode_off_title" msgid="6367463960165135829">"გაუქმდეს სამსახურის აპების დაპაუზება?"</string>
-    <string name="work_mode_turn_on" msgid="5316648862401307800">"პაუზის გაუქმება"</string>
+    <string name="work_mode_off_title" msgid="6367463960165135829">"კვლავ გააქტიურდეს სამსახურის აპები?"</string>
+    <string name="work_mode_turn_on" msgid="5316648862401307800">"გააქტიურება"</string>
     <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"საგანგებო სიტუაცია"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"აპი მიუწვდომელია"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ამჟამად მიუწვდომელია."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> მიუწვდომელია"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"საჭიროა ნებართვა"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"ნებართვის მოთხოვნა შეჩერებულია"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"ეს აპი დამატებით ნებართვებს მოითხოვს, მაგრამ ნებართვების მიცემა შეუძლებელია სტრიმინგის სესიაში თავდაპირველად მიანიჭეთ ნებართვა Android TV მოწყობილობაზე."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"ეს აპი დამატებით ნებართვებს მოითხოვს, მაგრამ ნებართვების მიცემა შეუძლებელია სტრიმინგის სესიაში თავდაპირველად მიანიჭეთ ნებართვა ტაბლეტზე."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"ეს აპი დამატებით ნებართვებს მოითხოვს, მაგრამ ნებართვების მიცემა შეუძლებელია სტრიმინგის სესიაში თავდაპირველად მიანიჭეთ ნებართვა ტელეფონზე."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"ეს აპი Android-ის ძველი ვერსიისთვის შეიქმნა. ის შესაძლოა არ მიშაობდეს სწორად და არ შეიცავდეს უსაფრთხოებისა და კონფიდენციალურობის უახლეს დაცვას. შეამოწმეთ განახლება, ან დაუკავშირდით აპის დეველოპერს."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"განახლების შემოწმება"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"ეს აპი არ არის თავსებადი Android-ის უახლეს ვერსიასთან. შეამოწმეთ განახლება, ან დაუკავშირდით აპის დეველოპერს."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"თქვენ ახალი შეტყობინებები გაქვთ"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"სანახავად, გახსენით SMS აპი"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"ზოგიერთი ფუნქცია შეიძლება შეიზღუდოს"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ამ კონტენტის სამსახურის აპებით გახსნა შეუძლებელია"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ამ კონტენტის პირადი აპებისთვის გაზიარება შეუძლებელია"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ამ კონტენტის პირადი აპებით გახსნა შეუძლებელია"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"სამსახურის პროფილი დაპაუზებულია"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"შეეხეთ ჩასართავად"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"სამსახურის აპები დაპაუზებულია"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"პაუზის გაუქმება"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"სამსახურის აპები არ არის"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"პირადი აპები არ არის"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"გსურთ, სამსახურის <xliff:g id="APP">%s</xliff:g>-ის გახსნა?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"გსურთ, პირად <xliff:g id="APP">%s</xliff:g>-ში გახსნა?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"გსურთ, სამსახურის <xliff:g id="APP">%s</xliff:g>-ში გახსნა?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"სამსახურის აპიდან დარეკავთ?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"გადაერთვებით სამუშაო აპზე?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"თქვენი ორგანიზაცია ნებას გრთავთ, რომ დარეკოთ მხოლოდ სამსახურის აპებიდან"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"თქვენი ორგანიზაცია ნებას გრთავთ, მხოლოდ სამსახურის აპებიდან გაგზავნოთ შეტყობინებები"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"პირადი ბრაუზერის გამოყენება"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"სამსახურის ბრაუზერის გამოყენება"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"დარეკვა"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"გადართვა"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ქსელის განბლოკვის PIN-კოდი"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM ქსელის ქვედანაყოფის განბლოკვის PIN-კოდი"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM-ის კორპორატიული განბლოკვის PIN-კოდი"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"ტელეფონის კამერაზე წვდომა ვერ მოხერხდა თქვენი <xliff:g id="DEVICE">%1$s</xliff:g>-დან"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"ტაბლეტის კამერაზე წვდომა ვერ მოხერხდა თქვენი <xliff:g id="DEVICE">%1$s</xliff:g>-დან"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"მასზე წვდომის მიᲦება შეუძლებელია სტრიმინგის დროს. ცადეთ ტელეფონიდან."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"სტრიმინგის დროს ეკრანის ეკრანში ნახვა შეუძლებელია"</string>
     <string name="system_locale_title" msgid="711882686834677268">"სისტემის ნაგულისხმევი"</string>
     <string name="default_card_name" msgid="9198284935962911468">"ბარათი <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"კომპანიონი საათის პროფილის ნებართვა საათების მართვაზე"</string>
diff --git a/core/res/res/values-kk-television/strings.xml b/core/res/res/values-kk-television/strings.xml
index 5730867..57d6322 100644
--- a/core/res/res/values-kk-television/strings.xml
+++ b/core/res/res/values-kk-television/strings.xml
@@ -17,6 +17,6 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="7002619958660406548">"Микрофон бөгелген"</string>
-    <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="2131954635322568179">"Камера бөгелген"</string>
+    <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="7002619958660406548">"Микрофон блокталған"</string>
+    <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="2131954635322568179">"Камера блокталған"</string>
 </resources>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index a6dd881..0bb57f9 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -229,7 +229,7 @@
     <string name="reboot_to_update_reboot" msgid="4474726009984452312">"Қайта іске қосылуда…"</string>
     <string name="reboot_to_reset_title" msgid="2226229680017882787">"Зауыттық деректерді қалпына келтіру"</string>
     <string name="reboot_to_reset_message" msgid="3347690497972074356">"Қайта іске қосылуда…"</string>
-    <string name="shutdown_progress" msgid="5017145516412657345">"Өшірілуде…"</string>
+    <string name="shutdown_progress" msgid="5017145516412657345">"Өшіріліп жатыр…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="2872769463279602432">"Планшет өшіріледі."</string>
     <string name="shutdown_confirm" product="tv" msgid="7975942887313518330">"Android TV құрылғысы өшеді."</string>
     <string name="shutdown_confirm" product="watch" msgid="2977299851200240146">"Сағатыңыз өшіріледі."</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android жүйесі"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Жеке профильге ауысу"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Жұмыс профиліне ауысу"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Жеке профильге (<xliff:g id="APP_NAME">%1$s</xliff:g>) ауысу"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Жұмыс профиліне (<xliff:g id="APP_NAME">%1$s</xliff:g>) ауысу"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Контактілер"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"контактілерге кіру"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Локация"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Қолданбаға вибраторды басқаруға рұқсат береді."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Қолданбаға діріл күйін пайдалануға мүмкіндік береді."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"нөмірлерге тікелей телефон шалу"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Қолданбаға сіздің қатысуыңызсыз қоңырау шалу мүмкіндігін береді. Нәтижесінде қосымша төлем немесе күтпеген қоңырау алуыңыз мүмкін. Есіңізде болсын, қолданба төтенше байланыстарға қоңырау шала алмайды. Залалды қолданбалар сіздің рұқсатыңызсыз қоңыраулар шалып, күтпеген төлемдерге себеп болуы мүмкін."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Қолданбаға сіз қатыспай-ақ телефон нөміріне қоңырау шалу рұқсаты беріледі. Нәтижесінде болжанбаған ақы төлеуіңіз немесе күтпеген қоңырау алуыңыз мүмкін. Қолданбаға құтқару қызметінің нөміріне қоңырау шалуға рұқсат берілмейтінін ескеріңіз. Зиянды қолданбалар келісіміңізді алмай қоңырау шалып, шығынға батыруы мүмкін немесе оператор кодын теріп, кіріс қоңырауларды басқа нөмірге автоматты түрде бағыттауы мүмкін."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS қоңырау қызметін пайдалану"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Сіздің қатысуыңызсыз қоңыраулар соғу үшін қолданбаға IMS қызметін пайдалануға рұқсат етеді."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"телефон күйін оқу немесе анықтау"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Қолданба тіркелген көмектер және баратын жер маршруты сияқты таңдаулы NFC төлеу қызметі туралы ақпаратты ала алатын болады."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"NFC функциясын басқару"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Қолданбаға NFC белгілерімен, карталармен және оқу құралдарымен байланысуға рұқсат береді."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Қауіпсіз элемент арқылы жасалатын транзакция оқиғасы"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Қолданбаға қауіпсіз элемент арқылы жасалатын транзакциялар жөнінде ақпарат алуға мүмкіндік береді."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"экран бекітпесін істен шығару"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Қолданбаларға кілтперне және басқа кілтсөзге қатысты қауіпсіздік шараларын өшіру мүмкіндігін береді. Мысалы, телефон кіріс қоңырауларын алғанда кілтпернені өшіреді және қоңырау аяқталғанда қайта қосады."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"экранды құлыптау күрделілігін сұрау"</string>
@@ -614,26 +618,29 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Биометриканы немесе экран құлпын пайдалану"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Бұл сіз екеніңізді растаңыз"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Жалғастыру үшін биометрикаңызды пайдаланыңыз."</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Жалғастыру үшін саусақ ізін пайдаланыңыз."</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Жалғастыру үшін бетті анықтау функциясын пайдаланыңыз."</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Жалғастыру үшін биометриканы немесе экран құлпын пайдаланыңыз."</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Биометрикалық жабдық жоқ"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Аутентификациядан бас тартылды."</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Танылмады"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Бет танылмады."</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Аутентификациядан бас тартылды."</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Ешқандай PIN коды, өрнек немесе құпия сөз орнатылмаған."</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Аутентификациялауда қате шықты."</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Экран құлпын пайдалану"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Жалғастыру үшін экран құлпын енгізіңіз."</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Сканерді қатты басыңыз."</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Сканерді қатты басыңыз"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Саусақ ізін тану мүмкін емес. Қайталап көріңіз."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Саусақ ізін оқу сканерін тазалап, әрекетті қайталаңыз."</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Сканерді тазалап, әрекетті қайталаңыз."</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Сканерді қатты басыңыз."</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Сканерді қатты басыңыз"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Саусағыңызды тым баяу қозғалттыңыз. Әрекетті қайталап көріңіз."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Басқа саусақ ізін байқап көріңіз."</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Тым жарық."</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Қуат түймесін басу әрекеті анықталды."</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Дұрыстап қойып көріңіз."</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Саусағыңыздың қалпын аздап өзгертіп тұрыңыз."</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Саусағыңыздың орнын аздап өзгертіп тұрыңыз"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Саусақ ізі танылмады."</string>
@@ -679,20 +686,20 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"Жарық жеткіліксіз"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Телефонды алшақ ұстаңыз."</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Телефонды жақынырақ ұстаңыз."</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"Телефонды жоғарырақ ұстаңыз."</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"Телефонды төменірек ұстаңыз."</string>
-    <string name="face_acquired_too_right" msgid="6245286514593540859">"Телефонды солға қарай ұстаңыз."</string>
-    <string name="face_acquired_too_left" msgid="9201762240918405486">"Телефонды оңға қарай ұстаңыз."</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"Телефонды жоғарырақ ұстаңыз"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"Телефонды төменірек ұстаңыз"</string>
+    <string name="face_acquired_too_right" msgid="6245286514593540859">"Телефонды солға қарай жылжытыңыз"</string>
+    <string name="face_acquired_too_left" msgid="9201762240918405486">"Телефонды оңға қарай жылжытыңыз"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Құрылғының камерасына тура қараңыз."</string>
     <string name="face_acquired_not_detected" msgid="1057966913397548150">"Бетіңіз көрінбей тұр. Телефонды көз деңгейінде ұстаңыз."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Қозғалыс тым көп. Телефонды қозғалтпаңыз."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Қайта тіркеліңіз."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Бет танылмады. Қайталап көріңіз."</string>
     <string name="face_acquired_too_similar" msgid="8882920552674125694">"Басыңыздың қалпын сәл өзгертіңіз."</string>
-    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Телефонға барынша тура қараңыз."</string>
-    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Телефонға барынша тура қараңыз."</string>
-    <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Телефонға барынша тура қараңыз."</string>
-    <string name="face_acquired_obscured" msgid="4917643294953326639">"Бетіңізді жауып тұрған нәрсені алып тастаңыз."</string>
+    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Телефонға тура қараңыз"</string>
+    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Телефонға тура қараңыз"</string>
+    <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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Бетперде тағып алғансыз. Бетіңіз толық көрініп тұруы керек."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Бетті тану мүмкін емес. Жабдық қолжетімді емес."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Бетті танудан бас тартылды."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Пайдаланушы бет тану функциясынан бас тартты."</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Тым көп әрекет жасалды. Кейінірек қайталаңыз."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Тым көп әрекет жасалды. Бет тану функциясы қолжетімді емес."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Тым көп әрекет жасалды. Оның орнына экран құлпын енгізіңіз."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Бетті тану мүмкін емес. Әрекетті қайталаңыз."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Бет тану функциясы реттелмеген."</string>
@@ -1392,10 +1398,10 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ҚАБЫЛДАМАУ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Енгізу әдісін таңдау"</string>
     <string name="show_ime" msgid="6406112007347443383">"Физикалық пернетақта қосулы кезде оны экранға шығару"</string>
-    <string name="hardware" msgid="1800597768237606953">"Виртуалдық пернетақтаны көрсету"</string>
+    <string name="hardware" msgid="3611039921284836033">"Экрандағы пернетақтаны пайдалану"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> конфигурациялау"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Физикалық пернетақталарды конфигурациялау"</string>
-    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Тіл мен пернетақта схемасын таңдау үшін түртіңіз"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Тіл мен пернетақта схемасын таңдау үшін түртіңіз."</string>
     <string name="fast_scroll_alphabet" msgid="8854435958703888376">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="fast_scroll_numeric_alphabet" msgid="2529539945421557329">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"Басқа қолданбалардың үстінен көрсету"</string>
@@ -1618,7 +1624,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"Планшет"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"ТД"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Телефон"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Үндеткіштерді қондыру"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Қондыру станциясының динамиктері"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Сыртқы құрылғы"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Құлақаспаптар"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Жою"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Дыбыс деңгейін ұсынылған деңгейден көтеру керек пе?\n\nЖоғары дыбыс деңгейінде ұзақ кезеңдер бойы тыңдау есту қабілетіңізге зиян тигізуі мүмкін."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Ескерту!\nҚұлақаспап арқылы бір аптада қауіпсіз тыңдауға болатын қатты дыбыстық сигналдар санын асырып жібердіңіз.\n\nБұл лимиттен асыру есту мүшесінің біржола зақымдалуына себеп болады."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Ескерту!\nҚұлақаспап арқылы бір аптада қауіпсіз тыңдауға болатын қатты дыбыстық сигналдар санын 5 рет асырып жібердіңіз.\n\nЕсту мүшесін қорғау үшін дыбыс деңгейі төмендетілді."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Сіз медиафайлды тыңдап жатқан дауыс деңгейі ұзақ уақыт ойнату жағдайында есту мүшесін зақымдауы мүмкін.\n\nҰзақ уақыт бойы осы дыбыс деңгейімен ойнату есту мүшесін зақымдауы ықтимал."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Ескерту!\nҚазір дауысы тым қатты контентті тыңдап жатырсыз, оның деңгейі қауіпті.\n\nОсылай тым қатты тыңдауды жалғастыру есту мүшесін біржола зақымдайды."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Жоғары дыбыс деңгейінде тыңдай бересіз бе?\n\nҚұлақаспаптың жоғары дыбыс деңгейі ұсынылған уақыттан ұзақ қосылып тұрды. Есту мүшеңізге зияны тиюі мүмкін."</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Қатты дыбыс анықталды\n\nҚұлақаспаптың жоғары дыбыс деңгейі ұсынылған уақыттан ұзақ қосылып тұрды. Есту мүшеңізге зияны тиюі мүмкін."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Арнайы мүмкіндік төте жолын пайдалану керек пе?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Түймелер тіркесімі қосулы кезде, екі дыбыс түймесін 3 секунд басып тұрсаңыз, \"Арнайы мүмкіндіктер\" функциясы іске қосылады."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Арнайы мүмкіндіктердің жылдам пәрмені іске қосылсын ба?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Шығу үшін жоғарыдан төмен қарай сырғытыңыз."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Түсінікті"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Жақсырақ көру үшін бұрыңыз."</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Жақсырақ көру үшін экранды бөлу режимінен шығыңыз."</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Жақсырақ көру үшін <xliff:g id="NAME">%s</xliff:g> қолданбасын толық экранда ашыңыз."</string>
     <string name="done_label" msgid="7283767013231718521">"Дайын"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Сағаттар айналымының қозғалтқышы"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Минут айналымын қозғалтқыш"</string>
@@ -1944,7 +1948,7 @@
     <string name="language_picker_regions_section_suggested" msgid="6080131515268225316">"Ұсынылатын аймақтар"</string>
     <string name="language_picker_section_suggested_bilingual" msgid="5932198319583556613">"Ұсынылған тілдер"</string>
     <string name="region_picker_section_suggested_bilingual" msgid="704607569328224133">"Ұсынылған аймақтар"</string>
-    <string name="language_picker_section_all" msgid="1985809075777564284">"Барлық тілдер"</string>
+    <string name="language_picker_section_all" msgid="1985809075777564284">"Барлық тіл"</string>
     <string name="region_picker_section_all" msgid="756441309928774155">"Барлық аймақтар"</string>
     <string name="locale_search_menu" msgid="6258090710176422934">"Іздеу"</string>
     <string name="app_suspended_title" msgid="888873445010322650">"Қолданба қолжетімді емес"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Қолданба қолжетімді емес"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> қазір қолжетімді емес."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> қолжетімсіз"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Рұқсат қажет"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Рұқсат сұрауы блокталды"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Бұл қолданба қосымша рұқсаттар сұрап жатыр, бірақ трансляция жүріп жатқанда рұқсат беру мүмкін емес. Алдымен Android TV құрылғысында рұқсат беріңіз."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Бұл қолданба қосымша рұқсаттар сұрап жатыр, бірақ трансляция жүріп жатқанда рұқсат беру мүмкін емес. Алдымен планшетте рұқсат беріңіз."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Бұл қолданба қосымша рұқсаттар сұрап жатыр, бірақ трансляция жүріп жатқанда рұқсат беру мүмкін емес. Алдымен телефонда рұқсат беріңіз."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"Бұл қолданба Android жүйесінің ескі нұсқасына арналған. Ол дұрыс жұмыс істемеуі және онда соңғы қауіпсіздік пен құпиялықты сақтау құралдары болмауы мүмкін. Қолданбаның жаңа нұсқасы бар-жоғын тексеріңіз не оны әзірлеушіге хабарласыңыз."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Жаңарту бар-жоғын тексеру"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Бұл қолданба Android-тың соңғы нұсқасымен үйлесімді емес. Қолданбаның жаңа нұсқасы бар-жоғын тексеріңіз не әзірлеушіге хабарласыңыз."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Сізде жаңа хабарлар бар"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Көру үшін SMS қолданбасын ашыңыз"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Кейбір функциялар істемеуі мүмкін."</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Бұл контентті жұмыс қолданбаларымен ашу мүмкін емес."</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Бұл контентті жеке қолданбалармен бөлісу мүмкін емес."</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Бұл контентті жеке қолданбалармен ашу мүмкін емес."</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Жұмыс профилі кідіртілді."</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Қосу үшін түртіңіз"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Жұмыс қолданбалары кідіртілді."</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Қайта қосу"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Жұмыс қолданбалары жоқ."</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Жеке қолданбалар жоқ."</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"<xliff:g id="APP">%s</xliff:g> қолданбасы жұмыс профилімен ашылсын ба?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"<xliff:g id="APP">%s</xliff:g> қолданбасындағы жеке профильден ашылсын ба?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"<xliff:g id="APP">%s</xliff:g> қолданбасындағы жұмыс профилінен ашылсын ба?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Жұмыс қолданбасынан қоңырау шалу керек пе?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Жұмыс қолданбасына ауысу керек пе?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Ұйымыңыз тек жұмыс қолданбаларынан қоңырау шалуға рұқсат етеді."</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Ұйымыңыз тек жұмыс қолданбаларынан хабар жіберуге рұқсат етеді."</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Жеке браузерді пайдалану"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Жұмыс браузерін пайдалану"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Қоңырау шалу"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Ауысу"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM желісінің құлпын ашатын PIN коды"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM желісі ішкі жиынтығының құлпын ашатын PIN коды"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Корпоративтік SIM картасының құлпын ашатын PIN коды"</string>
@@ -2284,11 +2297,11 @@
     <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Жаңа ұлғайту параметрлері"</string>
     <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Енді экранның бір бөлігін ұлғайтуға болады."</string>
     <string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Параметрлер бөлімінен қосу"</string>
-    <string name="dismiss_action" msgid="1728820550388704784">"Қабылдамау"</string>
-    <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Құрылғы микрофонының бөгеуін алыңыз"</string>
-    <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Құрылғы камерасының бөгеуін алыңыз"</string>
+    <string name="dismiss_action" msgid="1728820550388704784">"Жабу"</string>
+    <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Құрылғы микрофонын блоктан шығарыңыз"</string>
+    <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Құрылғы камерасын блоктан шығарыңыз"</string>
     <string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"&lt;b&gt;<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; және барлық қолданбалар мен қызметтерге арналған."</string>
-    <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Бөгеуді алу"</string>
+    <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Блоктан шығару"</string>
     <string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"Датчикке қатысты құпиялық"</string>
     <string name="splash_screen_view_icon_description" msgid="180638751260598187">"Қолданба белгішесі"</string>
     <string name="splash_screen_view_branding_description" msgid="7911129347402728216">"Қолданба брендін ілгері жылжыту кескіні"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"<xliff:g id="DEVICE">%1$s</xliff:g> құрылғысынан телефон камерасын пайдалану мүмкін емес."</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"<xliff:g id="DEVICE">%1$s</xliff:g> құрылғысынан планшет камерасын пайдалану мүмкін емес."</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Трансляция кезінде контентті көру мүмкін емес. Оның орнына телефоннан көріңіз."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Трансляция кезінде суреттегі суретті көру мүмкін емес."</string>
     <string name="system_locale_title" msgid="711882686834677268">"Жүйенің әдепкі параметрі"</string>
     <string name="default_card_name" msgid="9198284935962911468">"<xliff:g id="CARDNUMBER">%d</xliff:g>-КАРТА"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Сағаттарды басқаруға арналған қосымша сағат профилінің рұқсаты"</string>
@@ -2316,7 +2330,7 @@
     <string name="permlab_startForegroundServicesFromBackground" msgid="6363004936218638382">"Экрандық режимдегі қызметтерді фоннан іске қосу"</string>
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Қосымша қолданбаға экрандық режимдегі қызметтерді фоннан іске қосуға рұқсат беріледі."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Микрофон қолжетімді."</string>
-    <string name="mic_access_off_toast" msgid="8111040892954242437">"Микрофон бөгелген."</string>
+    <string name="mic_access_off_toast" msgid="8111040892954242437">"Микрофон блокталған."</string>
     <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Қос экран"</string>
     <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Қос экран функциясы қосулы"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы контентті көрсету үшін екі дисплейді де пайдаланады."</string>
@@ -2327,10 +2341,10 @@
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Параметрлерге өту"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Өшіру"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> конфигурацияланды"</string>
-    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Пернетақта форматы <xliff:g id="LAYOUT_1">%s</xliff:g> деп орнатылды. Өзгерту үшін түртіңіз."</string>
-    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Пернетақта форматы <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> деп орнатылды. Өзгерту үшін түртіңіз."</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Пернетақта форматы <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g> деп орнатылды. Өзгерту үшін түртіңіз."</string>
-    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Пернетақта форматы <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g> деп орнатылды… Өзгерту үшін түртіңіз."</string>
+    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Пернетақта схемасы \"<xliff:g id="LAYOUT_1">%s</xliff:g>\" деп орнатылды. Өзгерту үшін түртіңіз."</string>
+    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Пернетақта схемасы \"<xliff:g id="LAYOUT_1">%1$s</xliff:g>\", \"<xliff:g id="LAYOUT_2">%2$s</xliff:g>\" деп орнатылды. Өзгерту үшін түртіңіз."</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Пернетақта схемасы \"<xliff:g id="LAYOUT_1">%1$s</xliff:g>\", \"<xliff:g id="LAYOUT_2">%2$s</xliff:g>\", \"<xliff:g id="LAYOUT_3">%3$s</xliff:g>\" деп орнатылды. Өзгерту үшін түртіңіз."</string>
+    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Пернетақта схемасы \"<xliff:g id="LAYOUT_1">%1$s</xliff:g>\", \"<xliff:g id="LAYOUT_2">%2$s</xliff:g>\", \"<xliff:g id="LAYOUT_3">%3$s</xliff:g>\" деп орнатылды… Өзгерту үшін түртіңіз."</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"Физикалық пернетақталар конфигурацияланды"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"Пернетақталарды көру үшін түртіңіз."</string>
 </resources>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index 1f0bf9d..8cc3c64 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"ប្រព័ន្ធ​​ Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"ប្តូរ​ទៅ​កម្រង​ព័ត៌មាន​ផ្ទាល់ខ្លួន"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"ប្តូរ​ទៅ​កម្រង​ព័ត៌មាន​ការងារ"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"ប្ដូរទៅ <xliff:g id="APP_NAME">%1$s</xliff:g> ផ្ទាល់ខ្លួន"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"ប្ដូរទៅ <xliff:g id="APP_NAME">%1$s</xliff:g> ការងារ"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"ទំនាក់ទំនង"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"ចូលប្រើទំនាក់ទំនងរបស់អ្នក"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"ទីតាំង"</string>
@@ -324,7 +326,7 @@
     <string name="permgroupdesc_calllog" msgid="2026996642917801803">"អាន និងសរសេរ​កំណត់​ហេតុ​ហៅ​ទូរសព្ទ"</string>
     <string name="permgrouplab_phone" msgid="570318944091926620">"ទូរសព្ទ"</string>
     <string name="permgroupdesc_phone" msgid="270048070781478204">"ហៅទូរស័ព្ទ និងគ្រប់គ្រងការហៅទូរស័ព្ទ"</string>
-    <string name="permgrouplab_sensors" msgid="9134046949784064495">"ឧបករណ៍​ចាប់សញ្ញា​រាងកាយ"</string>
+    <string name="permgrouplab_sensors" msgid="9134046949784064495">"សេនស័រ​រាងកាយ"</string>
     <string name="permgroupdesc_sensors" msgid="2610631290633747752">"ចូលដំណើរការទិន្នន័យឧបករណ៍ចាប់សញ្ញាអំពីស្ថានភាពសុខភាពរបស់អ្នក"</string>
     <string name="permgrouplab_notifications" msgid="5472972361980668884">"ការ​ជូនដំណឹង"</string>
     <string name="permgroupdesc_notifications" msgid="4608679556801506580">"បង្ហាញ​ការជូនដំណឹង"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"ឲ្យ​កម្មវិធី​គ្រប់គ្រង​កម្មវិធី​ញ័រ។"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"អនុញ្ញាតឱ្យ​កម្មវិធី​ចូលប្រើ​ស្ថានភាពកម្មវិធី​ញ័រ។"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"ហៅ​លេខ​ទូរស័ព្ទ​ដោយ​ផ្ទាល់"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"ឲ្យ​កម្មវិធី​ហៅ​លេខ​ទូរស័ព្ទ​ដោយ​គ្មាន​សកម្មភាព​របស់​អ្នក។​ វា​អាច​កាត់​លុយ​ ឬ​ហៅ​ដោយ​មិន​រំពឹង​ទុក។ ចំណាំ​ថា​ វា​មិន​អនុញ្ញាត​ឲ្យ​កម្មវិធី​ហៅ​លេខ​ពេល​អាសន្ន​ទេ។ កម្មវិធី​ព្យាបាទ​អាច​កាត់​លុយ​របស់​អ្នក​ ដោយ​ធ្វើការ​ហៅ​ដោយ​គ្មាន​ការ​បញ្ជាក់​របស់​អ្នក។"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"អនុញ្ញាតឱ្យ​កម្មវិធីហៅទៅ​លេខទូរសព្ទ​ដោយគ្មាន​ការអន្តរាគមន៍​របស់អ្នក។ ការធ្វើបែបនេះ​អាចបណ្ដាលឱ្យមាន​ការហៅទូរសព្ទ ឬការគិតថ្លៃ​ដែលមិនបានរំពឹងទុក។ សូមចំណាំថា ការធ្វើបែបនេះ​មិនអនុញ្ញាតឱ្យ​កម្មវិធីហៅទូរសព្ទទៅ​លេខសង្គ្រោះបន្ទាន់ទេ។ កម្មវិធីគ្រោះថ្នាក់​អាចគិតប្រាក់ពីអ្នក​ដោយហៅទូរសព្ទដោយគ្មានការបញ្ជាក់របស់អ្នក ឬហៅទូរសព្ទទៅលេខកូដក្រុមហ៊ុនសេវាទូរសព្ទ ដែលបណ្តាលឱ្យការហៅចូល​ត្រូវបានបញ្ជូនបន្ត​ដោយស្វ័យប្រវត្តិទៅ​លេខផ្សេងទៀត។"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"ចូលដំណើរការសេវាកម្មការហៅតាម IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"អនុញ្ញាតឲ្យកម្មវិធីនេះប្រើសេវាកម្ម IMS ដើម្បីធ្វើការហៅដោយគ្មានការអន្តរាគមន៍ពីអ្នក។"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"អាន​ស្ថានភាព និង​អត្តសញ្ញាណ​ទូរស័ព្ទ"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"អនុញ្ញាតឱ្យ​កម្មវិធី​ទទួលបាន​ព័ត៌មានអំពី​សេវាបង់ប្រាក់តាម nfc ជាអាទិភាព​ដូចជា គោលដៅផ្លូវ និង​ព័ត៌មាន​កំណត់អត្តសញ្ញាណ​កម្មវិធី ដែលបានចុះឈ្មោះ​ជាដើម។"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"ពិនិត្យ​ការ​ទាក់ទង​នៅ​ក្បែរ (NFC)"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"ឲ្យ​កម្មវិធី​ទាក់ទង​ជា​មួយ​ស្លាក (NFC) កាត និង​កម្មវិធី​អាន។"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"ព្រឹត្តិការណ៍ប្រតិបត្តិការធាតុសុវត្ថិភាព"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"អនុញ្ញាតឱ្យកម្មវិធីទទួលព័ត៌មានអំពីប្រតិបត្តិការដែលកើតឡើងនៅលើធាតុសុវត្ថិភាព។"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"បិទ​ការ​ចាក់​សោ​អេក្រង់​របស់​អ្នក"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"ឲ្យ​កម្មវិធី​បិទ​ការ​ចាក់សោ​សុវត្ថិភាព​ពាក្យ​សម្ងាត់​ដែល​បាន​ភ្ជាប់​ណា​មួយ។ ​ឧទាហរណ៍​ត្រឹមត្រូវ​​​នៃ​ការ​បិទ​ទូរស័ព្ទ​ពេល​ទទួលការ​ហៅ​ចូល បន្ទាប់​ម​បើក​សោ​ពេល​ការ​ហៅ​បាន​បញ្ចប់។"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"ស្នើ​សុំកម្រិត​​ស្មុគស្មាញ​នៃការចាក់សោអេក្រង់"</string>
@@ -614,20 +618,23 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ប្រើជីវមាត្រ ឬ​ការចាក់សោអេក្រង់"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"ផ្ទៀងផ្ទាត់ថាជាអ្នក"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"ប្រើជីវមាត្រ​របស់អ្នក ដើម្បីបន្ត"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"ប្រើ​ស្នាមម្រាមដៃ​របស់អ្នក ដើម្បីបន្ត"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"ប្រើមុខរបស់អ្នក ដើម្បីបន្ត"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"ប្រើការចាក់សោអេក្រង់ ឬជីវមាត្ររបស់អ្នក ដើម្បីបន្ត"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"មិនអាច​ប្រើឧបករណ៍​ស្កេន​ស្នាមម្រាមដៃ​បានទេ"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"បាន​បោះបង់​ការ​ផ្ទៀងផ្ទាត់"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"មិនអាចសម្គាល់បានទេ"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"មិន​ស្គាល់​មុខ"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"បាន​បោះបង់​ការ​ផ្ទៀងផ្ទាត់"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"គ្មាន​ការកំណត់​កូដ pin លំនាំ ឬពាក្យសម្ងាត់​ទេ"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"មានបញ្ហាក្នុង​ការផ្ទៀងផ្ទាត់"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ប្រើ​ការ​ចាក់​សោ​អេក្រង់"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"បញ្ចូលការចាក់សោអេក្រង់របស់អ្នក ដើម្បីបន្ត"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"សង្កត់លើ​ឧបករណ៍​ចាប់សញ្ញា​ឱ្យណែន"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"សង្កត់លើ​សេនស័រឱ្យណែន"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"មិនអាចសម្គាល់​ស្នាមម្រាមដៃបានទេ។ សូមព្យាយាមម្ដងទៀត។"</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"សម្អាត​ឧបករណ៍​ចាប់ស្នាមម្រាមដៃ រួចព្យាយាម​ម្ដងទៀត"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"សម្អាត​ឧបករណ៍​ចាប់សញ្ញា រួចព្យាយាម​ម្ដងទៀត"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"សង្កត់លើ​ឧបករណ៍​ចាប់សញ្ញា​ឱ្យណែន"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"សង្កត់លើ​សេនស័រឱ្យណែន"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"ចលនាម្រាមដៃយឺតពេកហើយ។ សូមព្យាយាមម្តងទៀត។"</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"សាកល្បងប្រើ​ស្នាមម្រាមដៃផ្សេងទៀត"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"ភ្លឺពេក"</string>
@@ -654,7 +661,7 @@
     <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_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>
     <string name="fingerprint_dialog_default_subtitle" msgid="3879832845486835905">"ប្រើ​ស្នាមម្រាមដៃ​របស់អ្នក ដើម្បីបន្ត"</string>
@@ -663,15 +670,15 @@
   </string-array>
     <string name="fingerprint_error_vendor_unknown" msgid="4170002184907291065">"មានអ្វីមួយខុសប្រក្រតី។ សូមព្យាយាមម្ដងទៀត។"</string>
     <string name="fingerprint_icon_content_description" msgid="4741068463175388817">"រូបស្នាមម្រាមដៃ"</string>
-    <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"ដោះ​សោ​តាម​​ទម្រង់​មុខ"</string>
+    <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"ការដោះ​សោ​ដោយស្កេន​មុខ"</string>
     <string name="face_recalibrate_notification_title" msgid="2524791952735579082">"មានបញ្ហា​ពាក់ព័ន្ធនឹង​មុខងារ​ដោះសោ​តាមទម្រង់មុខ"</string>
     <string name="face_recalibrate_notification_content" msgid="3064513770251355594">"ចុចដើម្បីលុប​គំរូមុខ​របស់អ្នក រួចបញ្ចូល​មុខរបស់អ្នក​ម្ដងទៀត"</string>
-    <string name="face_setup_notification_title" msgid="8843461561970741790">"រៀបចំ​ការដោះសោ​តាមទម្រង់មុខ"</string>
+    <string name="face_setup_notification_title" msgid="8843461561970741790">"រៀបចំ​ការដោះសោ​ដោយស្កេនមុខ"</string>
     <string name="face_setup_notification_content" msgid="5463999831057751676">"ដោះសោទូរសព្ទ​របស់អ្នកដោយសម្លឹងមើលវា"</string>
     <string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"ដើម្បីប្រើមុខងារដោះសោតាមទម្រង់មុខ សូមបើក"<b>"ការចូលប្រើកាមេរ៉ា"</b>"នៅក្នុងការកំណត់ &gt; ឯកជនភាព"</string>
     <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"រៀបចំ​វិធីច្រើនទៀត​ដើម្បី​ដោះសោ"</string>
     <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"ចុច​ដើម្បីបញ្ចូល​ស្នាមម្រាមដៃ"</string>
-    <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"ការដោះសោ​ដោយប្រើ​ស្នាមម្រាមដៃ"</string>
+    <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"ការដោះសោ​ដោយស្កេន​ស្នាមម្រាមដៃ"</string>
     <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"មិនអាចប្រើ​ឧបករណ៍ចាប់ស្នាមម្រាមដៃ​បានទេ"</string>
     <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"ទាក់ទងក្រុមហ៊ុន​ផ្ដល់ការជួសជុល។"</string>
     <string name="face_acquired_insufficient" msgid="6889245852748492218">"មិនអាចបង្កើតគំរូមុខរបស់អ្នកបានទេ។ សូមព្យាយាមម្ដងទៀត។"</string>
@@ -679,10 +686,10 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"មិនមាន​ពន្លឺគ្រប់គ្រាន់"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"ដាក់​ទូរសព្ទឱ្យឆ្ងាយ​ជាងមុន"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"ដាក់​ទូរសព្ទ​ឱ្យជិត​ជាងមុន"</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"ដាក់​ទូរសព្ទ​ឱ្យខ្ពស់​ជាងមុន"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"ដាក់​ទូរសព្ទ​ឱ្យទាប​ជាងមុន"</string>
-    <string name="face_acquired_too_right" msgid="6245286514593540859">"ដាក់​ទូរសព្ទ​ទៅខាងឆ្វេងអ្នក"</string>
-    <string name="face_acquired_too_left" msgid="9201762240918405486">"ដាក់ទូរសព្ទ​ទៅខាងស្ដាំអ្នក"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"រំកិល​ទូរសព្ទឡើងលើ"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"រំកិល​ទូរសព្ទចុះក្រោម"</string>
+    <string name="face_acquired_too_right" msgid="6245286514593540859">"រំកិលទូរសព្ទ​ទៅខាងឆ្វេង"</string>
+    <string name="face_acquired_too_left" msgid="9201762240918405486">"រំកិលទូរសព្ទ​ទៅខាងស្ដាំ"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"សូមមើល​ឱ្យចំ​ឧបករណ៍​របស់អ្នក​ជាងមុន។"</string>
     <string name="face_acquired_not_detected" msgid="1057966913397548150">"មើលមិនឃើញ​មុខរបស់អ្នកទេ។ កាន់ទូរសព្ទរបស់អ្នក​ដាក់ត្រឹមភ្នែក។"</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"មាន​ចលនា​ខ្លាំងពេក។ សូមកាន់​ទូរសព្ទ​ឱ្យនឹង។"</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"បានរកឃើញ​របស់បាំងមុខ។ មុខអ្នកត្រូវតែ​អាចមើលឃើញ​ពេញលេញ។"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"មិនអាច​ផ្ទៀងផ្ទាត់​មុខបានទេ។ មិនមាន​ហាតវែរទេ។"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"បាន​បោះបង់​ប្រតិបត្តិការចាប់​ផ្ទៃមុខ។"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"អ្នកប្រើប្រាស់​បានបោះបង់​ការដោះសោ​តាមទម្រង់មុខ"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"ព្យាយាមចូលច្រើនពេកហើយ។ សូមព្យាយាមម្តងទៀតពេលក្រោយ។"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"ព្យាយាម​ច្រើនដងពេក។ មិនអាចប្រើការដោះសោតាមទម្រង់មុខបានទេ។"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ព្យាយាម​ដោះសោ​ច្រើនដងពេក។ សូមបញ្ចូល​ការចាក់សោ​អេក្រង់​ជំនួសវិញ​។"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"មិន​អាច​ផ្ទៀងផ្ទាត់​មុខ​បាន​ទេ។ សូមព្យាយាមម្ដងទៀត។"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"អ្នក​មិនបាន​រៀបចំ​ការដោះសោតាមទម្រង់មុខ​ទេ"</string>
@@ -1040,7 +1046,7 @@
     <string name="keyguard_accessibility_expand_lock_area" msgid="4215280881346033434">"ពង្រីក​តំបន់​ដោះ​សោ។"</string>
     <string name="keyguard_accessibility_slide_unlock" msgid="2968195219692413046">"រុញ​ដោះ​សោ។"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="8669128146589233293">"លំនាំ​ដោះ​សោ​។"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"ដោះ​សោ​តាម​​ទម្រង់​មុខ។"</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"ការដោះ​សោ​ដោយស្កេន​មុខ។"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="4020864007967340068">"កូដ PIN ដោះ​សោ។"</string>
     <string name="keyguard_accessibility_sim_pin_unlock" msgid="4895939120871890557">"ដោះ​កូដ Pin របស់​សីុម។"</string>
     <string name="keyguard_accessibility_sim_puk_unlock" msgid="3459003464041899101">"ដោះ​កូដ Puk របស់​សីុម។"</string>
@@ -1369,7 +1375,7 @@
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"បាន​រកឃើញ​គ្រឿង​បរិក្ខារ​សំឡេង​អាណាឡូក"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"ឧបករណ៍​ដែលភ្ជាប់​មក​ជាមួយ​មិនត្រូវគ្នា​ជាមួយ​ទូរសព្ទ​នេះទេ។ ចុច​ដើម្បី​ស្វែងយល់​បន្ថែម។"</string>
     <string name="adb_active_notification_title" msgid="408390247354560331">"បាន​ភ្ជាប់​ការ​ជួសជុលតាម​ USB"</string>
-    <string name="adb_active_notification_message" msgid="5617264033476778211">"ចុច​ដើម្បី​បិទ​ការជួសជុលតាម ​USB"</string>
+    <string name="adb_active_notification_message" msgid="5617264033476778211">"ប៉ះ​ដើម្បី​បិទ​ការជួសជុលតាម ​USB"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"ជ្រើស​រើស ដើម្បី​បិទ​ការ​កែ​កំហុសតាម USB ។"</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"បានភ្ជាប់​ការជួសជុល​ដោយឥតខ្សែ"</string>
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"ចុច ដើម្បី​បិទ​ការជួសជុល​ដោយឥតខ្សែ"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"បដិសេធ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"ជ្រើស​វិធីសាស្ត្រ​បញ្ចូល"</string>
     <string name="show_ime" msgid="6406112007347443383">"ទុកវានៅលើអេក្រង់ខណៈពេលក្តារចុចពិតប្រាកដកំពុងសកម្ម"</string>
-    <string name="hardware" msgid="1800597768237606953">"បង្ហាញក្ដារចុចនិម្មិត"</string>
+    <string name="hardware" msgid="3611039921284836033">"ប្រើក្ដារចុច​លើអេក្រង់"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"កំណត់រចនាសម្ព័ន្ធ <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"កំណត់រចនាសម្ព័ន្ធ​ក្ដារចុចរូបវន្ត"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"ប៉ះដើម្បីជ្រើសភាសា និងប្លង់"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"លុប​ចេញ"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"បង្កើន​កម្រិត​សំឡេង​លើស​ពី​កម្រិត​បាន​ផ្ដល់​យោបល់?\n\nការ​ស្ដាប់​នៅ​កម្រិត​សំឡេង​ខ្លាំង​យូរ​អាច​ធ្វើឲ្យ​ខូច​ត្រចៀក។"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"សូមប្រុងប្រយ័ត្ន\nអ្នកបានលើសបរិមាណ​រលកសញ្ញាសំឡេងឮខ្លាំងដែលមនុស្សអាចស្ដាប់តាមកាស​បានដោយសុវត្ថិភាពក្នុងរយៈពេលមួយសប្ដាហ៍។\n\nការស្ដាប់លើសដែនកំណត់នេះ​នឹងបណ្ដាលឱ្យខូចត្រចៀករបស់អ្នក​ជាអចិន្ត្រៃយ៍។"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"សូមប្រុងប្រយ័ត្ន\nអ្នកបានលើសបរិមាណរលក​សញ្ញាសំឡេងឮខ្លាំងចំនួន 5 ដង ដែលមនុស្សអាចស្ដាប់តាមកាស​បានដោយសុវត្ថិភាពក្នុងរយៈពេលមួយសប្ដាហ៍។\n\nកម្រិតសំឡេងត្រូវបានបន្ថយ ដើម្បីការពារត្រចៀករបស់អ្នក។"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"កម្រិតដែលអ្នក​កំពុងស្ដាប់មេឌៀអាច​បណ្ដាលឱ្យខូច​ត្រចៀក នៅពលស្ដាប់ក្នុង​រយៈពេលយូរ។\n\nការបន្តចាក់នៅកម្រិតនេះ​ក្នុងរយៈពេលយូរ​អាចធ្វើឱ្យត្រចៀករបស់អ្នកខូច។"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"សូមប្រុងប្រយ័ត្ន\nបច្ចុប្បន្ន អ្នកកំពុងស្ដាប់ខ្លឹមសារឮខ្លាំង​ដែលបានចាក់នៅកម្រិត​គ្មានសុវត្ថិភាព។\n\nការបន្តស្ដាប់ឮខ្លាំងបែបនេះ​នឹងធ្វើឱ្យត្រចៀករបស់អ្នក​ខូចជាអចិន្ត្រៃយ៍។"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"បន្តស្ដាប់ក្នុងកម្រិតសំឡេងខ្ពស់ឬ?\n\nកម្រិតសំឡេងកាសមានកម្រិតខ្ពស់យូរជាងរយៈពេលដែលបានណែនាំ ដែលអាចបណ្ដាលឱ្យខូចត្រចៀករបស់អ្នក"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"បានចាប់ដឹងថាសំឡេងឮខ្លាំង\n\nកម្រិតសំឡេងកាសខ្ពស់ជាងកម្រិតដែលបានណែនាំ ដែលអាចបណ្ដាលឱ្យខូចត្រចៀករបស់អ្នក"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ប្រើប្រាស់​ផ្លូវកាត់​ភាព​ងាយស្រួល?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"នៅពេលបើក​ផ្លូវកាត់ ការចុច​ប៊ូតុង​កម្រិតសំឡេង​ទាំងពីរ​រយៈពេល 3 វិនាទី​នឹង​ចាប់ផ្តើម​មុខងារ​ភាពងាយប្រើ។"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"បើក​ផ្លូវកាត់​សម្រាប់មុខងារ​ភាពងាយស្រួលឬ?"</string>
@@ -1716,7 +1720,7 @@
     <string name="color_correction_feature_name" msgid="7975133554160979214">"ការកែតម្រូវ​ពណ៌"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"មុខងារប្រើដៃម្ខាង"</string>
     <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"ពន្លឺតិចខ្លាំង"</string>
-    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"ឧបករណ៍ស្តាប់"</string>
+    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"ឧបករណ៍ជំនួយការស្ដាប់"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"បានសង្កត់​គ្រាប់ចុច​កម្រិតសំឡេង​ជាប់។ បាន​បើក <xliff:g id="SERVICE_NAME">%1$s</xliff:g>។"</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"បានសង្កត់​គ្រាប់ចុច​កម្រិតសំឡេង​ជាប់។ បាន​បិទ <xliff:g id="SERVICE_NAME">%1$s</xliff:g>។"</string>
     <string name="accessibility_shortcut_spoken_feedback" msgid="3760999147597564314">"លែង​គ្រាប់ចុចកម្រិតសំឡេង។ ដើម្បីបើក <xliff:g id="SERVICE_NAME">%1$s</xliff:g> សូមចុច​គ្រាប់ចុចកម្រិតសំឡេងទាំងពីរឱ្យជាប់ម្ដងទៀត​រយៈពេល 3 វិនាទី។"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"ដើម្បីចាកចេញ សូមអូសពីលើចុះក្រោម។"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"យល់ហើយ"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"បង្វិលដើម្បីមើលបានកាន់តែច្បាស់"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"ចេញពីមុខងារ​បំបែកអេក្រង់ដើម្បីមើលបានកាន់តែច្បាស់"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"បើក <xliff:g id="NAME">%s</xliff:g> នៅក្នុងអេក្រង់ពេញ ដើម្បីមើលបានកាន់តែច្បាស់"</string>
     <string name="done_label" msgid="7283767013231718521">"រួចរាល់"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"គ្រាប់​រំកិល​រង្វង់​ម៉ោង"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"គ្រាប់​រំកិល​រង្វង់​នាទី"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"មិនអាច​ប្រើ​កម្មវិធី​នេះបានទេ"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"មិនអាច​ប្រើ <xliff:g id="APP_NAME">%1$s</xliff:g> នៅពេល​នេះ​បានទេ​។"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"មិនអាចប្រើ <xliff:g id="ACTIVITY">%1$s</xliff:g> បានទេ"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"តម្រូវឱ្យមាន​ការអនុញ្ញាត"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"បានទប់ស្កាត់សំណើសុំការអនុញ្ញាត"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"កម្មវិធីនេះកំពុងស្នើសុំការអនុញ្ញាតបន្ថែម ប៉ុន្តែមិនអាចផ្តល់ការអនុញ្ញាតក្នុងវគ្គផ្សាយបានទេ។ ផ្តល់ការអនុញ្ញាតនៅលើឧបករណ៍ Android TV របស់អ្នកជាមុនសិន។"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"កម្មវិធីនេះកំពុងស្នើសុំការអនុញ្ញាតបន្ថែម ប៉ុន្តែមិនអាចផ្តល់ការអនុញ្ញាតក្នុងវគ្គផ្សាយបានទេ។ ផ្តល់ការអនុញ្ញាតនៅលើថេប្លេតរបស់អ្នកជាមុនសិន។"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"កម្មវិធីនេះកំពុងស្នើសុំការអនុញ្ញាតបន្ថែម ប៉ុន្តែមិនអាចផ្តល់ការអនុញ្ញាតក្នុងវគ្គផ្សាយបានទេ។ ផ្តល់ការអនុញ្ញាតនៅលើទូរសព្ទរបស់អ្នកជាមុនសិន។"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"កម្មវិធីនេះ​ត្រូវបានបង្កើតឡើង​សម្រាប់​កំណែ Android ចាស់​ជាងនេះ។ កម្មវិធីនេះអាចមិនដំណើរការបានត្រឹមត្រូវ និងមិនរួមបញ្ចូលការការពារឯកជនភាព និងសុវត្ថិភាពចុងក្រោយបំផុតទេ។ ពិនិត្យរកមើលកំណែថ្មី ឬទាក់ទងទៅអ្នកអភិវឌ្ឍន៍កម្មវិធី។"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"រក​មើល​កំណែ​ថ្មី"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"កម្មវិធីនេះ​មិនត្រូវគ្នាជាមួយ​កំណែ Android ចុងក្រោយបំផុត​ទេ។ សូមពិនិត្យរកមើល​កំណែថ្មី ឬទាក់ទងទៅ​អ្នកអភិវឌ្ឍន៍កម្មវិធី។"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"អ្នកមានសារថ្មី"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"បើកកម្មវិធីសារ SMS ដើម្បីមើល"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"មុខងារ​មួយចំនួន​អាច​ត្រូវ​បាន​កម្រិត"</string>
@@ -2157,18 +2165,23 @@
     <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"បានទប់ស្កាត់ដោយ​អ្នកគ្រប់គ្រង​ផ្នែកព័ត៌មានវិទ្យា​របស់អ្នក"</string>
     <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"ខ្លឹមសារនេះ​មិនអាចចែករំលែក​តាមរយៈ​កម្មវិធី​ការងារ​បានទេ"</string>
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ខ្លឹមសារនេះ​មិនអាចបើក​តាមរយៈ​កម្មវិធី​ការងារ​បានទេ"</string>
-    <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ខ្លឹមសារនេះ​មិនអាចចែករំលែក​តាមរយៈ​កម្មវិធី​ផ្ទាល់ខ្លួន​បានទេ"</string>
+    <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"មិនអាចចែករំលែកខ្លឹមសារនេះ​ជាមួយ​កម្មវិធី​ផ្ទាល់ខ្លួន​បានទេ"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ខ្លឹមសារនេះ​មិនអាចបើក​តាមរយៈ​កម្មវិធី​ផ្ទាល់ខ្លួន​បានទេ"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"កម្រងព័ត៌មានការងារត្រូវបាន​ផ្អាក"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"ចុច​ដើម្បី​បើក"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"កម្មវិធី​ការងារ​ត្រូវបានផ្អាក"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"ឈប់ផ្អាក"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"គ្មាន​កម្មវិធី​ការងារ​ទេ"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"គ្មាន​កម្មវិធី​ផ្ទាល់ខ្លួន​ទេ"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"បើក <xliff:g id="APP">%s</xliff:g> ការងារឬ?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"បើកនៅក្នុង <xliff:g id="APP">%s</xliff:g> ផ្ទាល់ខ្លួនឬ?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"បើកនៅក្នុង <xliff:g id="APP">%s</xliff:g> ការងារឬ?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"ហៅទូរសព្ទពី​កម្មវិធីការងារឬ?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"ប្ដូរទៅកម្មវិធីការងារឬ?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"ស្ថាប័ន​របស់អ្នក​អនុញ្ញាត​ឱ្យអ្នកធ្វើការហៅទូរសព្ទ​ពីកម្មវិធីការងារ​តែប៉ុណ្ណោះ"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"ស្ថាប័ន​របស់អ្នក​អនុញ្ញាត​ឱ្យអ្នក​ផ្ញើសារ​ពី​កម្មវិធី​ការងារតែប៉ុណ្ណោះ"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ប្រើ​កម្មវិធីរុករក​តាមអ៊ីនធឺណិត​ផ្ទាល់ខ្លួន"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"ប្រើ​កម្មវិធីរុករក​តាមអ៊ីនធឺណិត​សម្រាប់​ការងារ"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"ហៅទូរសព្ទ"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"ប្ដូរ"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"កូដ PIN ដោះ​សោ​បណ្ដាញ​ស៊ីម"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"កូដ PIN ដោះសោ​សំណុំរង​នៃ​បណ្ដាញស៊ីម"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"កូដ PIN ដោះសោ​ក្រុមហ៊ុនស៊ីម"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"មិនអាច​ចូលប្រើ​កាមេរ៉ាទូរសព្ទ​ពី <xliff:g id="DEVICE">%1$s</xliff:g> របស់អ្នក​បានទេ"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"មិនអាច​ចូលប្រើ​កាមេរ៉ា​ថេប្លេតពី <xliff:g id="DEVICE">%1$s</xliff:g> របស់អ្នក​បានទេ"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"មិន​អាច​ចូល​ប្រើប្រាស់​ខ្លឹមសារ​នេះ​បាន​ទេ ពេល​ផ្សាយ។ សូមសាកល្បងប្រើ​នៅលើ​ទូរសព្ទរបស់អ្នក​ជំនួសវិញ។"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"មិនអាចមើលរូបក្នុងរូបខណៈពេលកំពុងផ្សាយបានទេ"</string>
     <string name="system_locale_title" msgid="711882686834677268">"លំនាំ​ដើម​ប្រព័ន្ធ"</string>
     <string name="default_card_name" msgid="9198284935962911468">"កាត <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"ការអនុញ្ញាតពីកម្រងព័ត៌មាននាឡិកាដៃគូ ដើម្បីគ្រប់គ្រងនាឡិកា"</string>
@@ -2327,9 +2341,9 @@
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"ចូលទៅកាន់ \"ការកំណត់\""</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"បិទ"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"បានកំណត់​រចនាសម្ព័ន្ធ <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
-    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"បានកំណត់ប្លង់ក្ដារចុចទៅ <xliff:g id="LAYOUT_1">%s</xliff:g>។ សូមចុចដើម្បីប្ដូរ។"</string>
-    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"បានកំណត់ប្លង់ក្ដារចុចទៅ <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>។ សូមចុចដើម្បីប្ដូរ។"</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"បានកំណត់ប្លង់ក្ដារចុចទៅ <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>។ សូមចុចដើម្បីប្ដូរ។"</string>
+    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"បានកំណត់ប្លង់ក្ដារចុចទៅ <xliff:g id="LAYOUT_1">%s</xliff:g>។ ចុចដើម្បីប្ដូរ។"</string>
+    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"បានកំណត់ប្លង់ក្ដារចុចទៅ <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>។ ចុចដើម្បីប្ដូរ។"</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"បានកំណត់ប្លង់ក្ដារចុចទៅ <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>។ ចុចដើម្បីប្ដូរ។"</string>
     <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"បានកំណត់ប្លង់ក្ដារចុចទៅ <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>… សូមចុចដើម្បីប្ដូរ។"</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"បានកំណត់រចនាសម្ព័ន្ធ​ក្ដារចុចរូបវន្ត"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"ចុចដើម្បីមើលក្ដារចុច"</string>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index b193f3d..a2a048c 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -66,7 +66,7 @@
     <string name="ThreeWCMmi" msgid="2436550866139999411">"ಮೂರು ಮಾರ್ಗದಲ್ಲಿ ಕರೆ ಮಾಡುವಿಕೆ"</string>
     <string name="RuacMmi" msgid="1876047385848991110">"ಅನಪೇಕ್ಷಿತ ಕಿರಿಕಿರಿ ಮಾಡುವ ಕರೆಗಳ ತಿರಸ್ಕಾರ"</string>
     <string name="CndMmi" msgid="185136449405618437">"ಕರೆ ಮಾಡುವ ಸಂಖ್ಯೆಯ ಡೆಲಿವರಿ"</string>
-    <string name="DndMmi" msgid="8797375819689129800">"ಅಡಚಣೆ ಮಾಡಬೇಡ"</string>
+    <string name="DndMmi" msgid="8797375819689129800">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ"</string>
     <string name="CLIRDefaultOnNextCallOn" msgid="4511621022859867988">"ಕರೆಮಾಡುವವರ ID ಅನ್ನು ನಿರ್ಬಂಧಿಸುವಂತೆ ಡಿಫಾಲ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದಿನ ಕರೆ: ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
     <string name="CLIRDefaultOnNextCallOff" msgid="5036749051007098105">"ಕರೆಮಾಡುವವರ ID ಅನ್ನು ನಿರ್ಬಂಧಿಸುವಂತೆ ಡಿಫಾಲ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದಿನ ಕರೆ: ನಿರ್ಬಂಧಿಸಿಲ್ಲ"</string>
     <string name="CLIRDefaultOffNextCallOn" msgid="1022781126694885017">"ಕರೆಮಾಡುವವರ ID ಅನ್ನು ನಿರ್ಬಂಧಿಸದಿರುವಂತೆ ಡಿಫಾಲ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದಿನ ಕರೆ: ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
@@ -270,7 +270,7 @@
     <string name="global_action_voice_assist" msgid="6655788068555086695">"ಧ್ವನಿ ಸಹಾಯಕ"</string>
     <string name="global_action_lockdown" msgid="2475471405907902963">"ಲಾಕ್‌ಡೌನ್‌"</string>
     <string name="status_bar_notification_info_overflow" msgid="3330152558746563475">"999+"</string>
-    <string name="notification_hidden_text" msgid="2835519769868187223">"ಹೊಸ ಅಧಿಸೂಚನೆ"</string>
+    <string name="notification_hidden_text" msgid="2835519769868187223">"ಹೊಸ ನೋಟಿಫಿಕೇಶನ್‍"</string>
     <string name="notification_channel_physical_keyboard" msgid="5417306456125988096">"ಭೌತಿಕ ಕೀಬೋರ್ಡ್‌"</string>
     <string name="notification_channel_security" msgid="8516754650348238057">"ಭದ್ರತೆ"</string>
     <string name="notification_channel_car_mode" msgid="2123919247040988436">"ಕಾರ್ ಮೋಡ್"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android ಸಿಸ್ಟಂ"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"ವೈಯಕ್ತಿಕ ಪ್ರೊಫೈಲ್‌ಗೆ ಬದಲಾಯಿಸಿ"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ಗೆ ಬದಲಿಸಿ"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"ವೈಯಕ್ತಿಕ <xliff:g id="APP_NAME">%1$s</xliff:g> ಗೆ ಬದಲಿಸಿ"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"ಕೆಲಸದ <xliff:g id="APP_NAME">%1$s</xliff:g> ಗೆ ಬದಲಿಸಿ"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"ಸಂಪರ್ಕಗಳು"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ಪ್ರವೇಶಿಸಲು"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"ಸ್ಥಳ"</string>
@@ -446,9 +448,9 @@
     <string name="permdesc_broadcastSticky" product="tv" msgid="2338185920171000650">"ಪ್ರಸಾರವು ಮುಕ್ತಾಯಗೊಂಡ ನಂತರ ಉಳಿದಿರುವ ಜಿಗುಟಾದ ಪ್ರಸಾರಗಳನ್ನು ಕಳುಹಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಇದರ ಹೆಚ್ಚಿನ ಬಳಕೆಯು Android TV ಸಾಧನವನ್ನು ನಿಧಾನಗೊಳಿಸುತ್ತದೆ ಅಥವಾ ಅತಿಯಾಗಿ ಮೆಮೊರಿಯನ್ನು ಬಳಸುವಂತೆ ಮಾಡುವ ಮೂಲಕ ಅಸ್ಥಿರಗೊಳಿಸುತ್ತದೆ."</string>
     <string name="permdesc_broadcastSticky" product="default" msgid="134529339678913453">"ಪ್ರಸಾರ ಕೊನೆಗೊಂಡ ನಂತರ ಹಾಗೆಯೇ ಉಳಿಯುವ ಸ್ಟಿಕಿ ಪ್ರಸಾರಗಳನ್ನು ಕಳುಹಿಸಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಮಿತಿಮೀರಿದ ಬಳಕೆಯು ಫೋನ್‍ ಅನ್ನು ನಿಧಾನಗೊಳಿಸಬಹುದು ಅಥವಾ ಅತಿಯಾದ ಮೆಮೊರಿ ಬಳಕೆಯು ಅಸ್ಥಿರತೆಯನ್ನು ಉಂಟುಮಾಡಬಹುದು."</string>
     <string name="permlab_readContacts" msgid="8776395111787429099">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ಓದಿರಿ"</string>
-    <string name="permdesc_readContacts" product="tablet" msgid="6430093481659992692">"ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗಿರುವ ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಕುರಿತಾದ ಡೇಟಾವನ್ನು ರೀಡ್ ಮಾಡಲು ಆ್ಯಪ್‌ಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಸಂಪರ್ಕಗಳನ್ನು ರಚಿಸಿದ ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ನಲ್ಲಿನ ಖಾತೆಗಳಿಗೂ ಸಹ ಆ್ಯಪ್‌ಗಳು ಪ್ರವೇಶ ಹೊಂದಿರುತ್ತವೆ. ಇದರಲ್ಲಿ ನೀವು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿದ ಆ್ಯಪ್‌ಗಳು ರಚಿಸಿದ ಖಾತೆಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು. ಈ ಅನುಮತಿಯು ನಿಮ್ಮ ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ಉಳಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ, ಆದರೆ ದುರುದ್ದೇಶಪೂರಿತ ಆ್ಯಪ್‌ಗಳಿಗೆ ನಿಮ್ಮ ಗಮನಕ್ಕೆ ಬಾರದೇ ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು."</string>
+    <string name="permdesc_readContacts" product="tablet" msgid="6430093481659992692">"ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗಿರುವ ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಕುರಿತಾದ ಡೇಟಾವನ್ನು ರೀಡ್ ಮಾಡಲು ಆ್ಯಪ್‌ಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಸಂಪರ್ಕಗಳನ್ನು ರಚಿಸಿದ ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ನಲ್ಲಿನ ಖಾತೆಗಳಿಗೂ ಸಹ ಆ್ಯಪ್‌ಗಳು ಆ್ಯಕ್ಸೆಸ್ ಹೊಂದಿರುತ್ತವೆ. ಇದರಲ್ಲಿ ನೀವು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿದ ಆ್ಯಪ್‌ಗಳು ರಚಿಸಿದ ಖಾತೆಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು. ಈ ಅನುಮತಿಯು ನಿಮ್ಮ ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ಉಳಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ, ಆದರೆ ದುರುದ್ದೇಶಪೂರಿತ ಆ್ಯಪ್‌ಗಳಿಗೆ ನಿಮ್ಮ ಗಮನಕ್ಕೆ ಬಾರದೇ ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು."</string>
     <string name="permdesc_readContacts" product="tv" msgid="8400138591135554789">"ನಿಮ್ಮ Android TV ಸಾಧನದಲ್ಲಿ ಸಂಗ್ರಹಿಸಿರುವ ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಕುರಿತಾದ ಡೇಟಾವನ್ನು ರೀಡ್ ಮಾಡಲು ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ. ನಿಮ್ಮ Android TV ಸಾಧನದಲ್ಲಿ ರಚಿಸಲಾದ ಸಂಪರ್ಕಗಳಿಗೆ ಖಾತೆಗಳಿಗೆ ಆ್ಯಪ್‌ಗಳು ಪ್ರವೇಶವನ್ನು ಹೊಂದಿರುತ್ತವೆ. ಇದರಲ್ಲಿ ನೀವು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿದ ಆ್ಯಪ್‌ಗಳು ರಚಿಸಿದ ಖಾತೆಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು. ಈ ಅನುಮತಿಯು ನಿಮ್ಮ ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ಉಳಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ, ಆದರೆ ದುರುದ್ದೇಶಪೂರಿತ ಆ್ಯಪ್‌ಗಳಿಗೆ ನಿಮ್ಮ ಗಮನಕ್ಕೆ ಬಾರದೇ ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು."</string>
-    <string name="permdesc_readContacts" product="default" msgid="4911989776203207644">"ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗಿರುವ ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಕುರಿತಾದ ಡೇಟಾವನ್ನು ರೀಡ್ ಮಾಡಲು ಆ್ಯಪ್‌ಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಸಂಪರ್ಕಗಳನ್ನು ರಚಿಸಿದ ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿನ ಖಾತೆಗಳಿಗೂ ಸಹ ಆ್ಯಪ್‌ಗಳು ಪ್ರವೇಶ ಹೊಂದಿರುತ್ತವೆ. ಇದರಲ್ಲಿ ನೀವು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿದ ಆ್ಯಪ್‌ಗಳು ರಚಿಸಿದ ಖಾತೆಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು. ಈ ಅನುಮತಿಯು ನಿಮ್ಮ ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ಉಳಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ, ಆದರೆ ದುರುದ್ದೇಶಪೂರಿತ ಆ್ಯಪ್‌ಗಳಿಗೆ ನಿಮ್ಮ ಗಮನಕ್ಕೆ ಬಾರದೇ ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು."</string>
+    <string name="permdesc_readContacts" product="default" msgid="4911989776203207644">"ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗಿರುವ ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಕುರಿತಾದ ಡೇಟಾವನ್ನು ರೀಡ್ ಮಾಡಲು ಆ್ಯಪ್‌ಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಸಂಪರ್ಕಗಳನ್ನು ರಚಿಸಿದ ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿನ ಖಾತೆಗಳಿಗೂ ಸಹ ಆ್ಯಪ್‌ಗಳು ಆ್ಯಕ್ಸೆಸ್ ಹೊಂದಿರುತ್ತವೆ. ಇದರಲ್ಲಿ ನೀವು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿದ ಆ್ಯಪ್‌ಗಳು ರಚಿಸಿದ ಖಾತೆಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು. ಈ ಅನುಮತಿಯು ನಿಮ್ಮ ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ಉಳಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ, ಆದರೆ ದುರುದ್ದೇಶಪೂರಿತ ಆ್ಯಪ್‌ಗಳಿಗೆ ನಿಮ್ಮ ಗಮನಕ್ಕೆ ಬಾರದೇ ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು."</string>
     <string name="permlab_writeContacts" msgid="8919430536404830430">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ಮಾರ್ಪಡಿಸಿ"</string>
     <string name="permdesc_writeContacts" product="tablet" msgid="6422419281427826181">"ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗಿರುವ ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಕುರಿತಾದ ಡೇಟಾವನ್ನು ಮಾರ್ಪಡಿಸಲು ಆ್ಯಪ್‌ಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ. ಈ ಅನುಮತಿಯು ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ಅಳಿಸಲು ಆ್ಯಪ್‌ಗಳಿಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
     <string name="permdesc_writeContacts" product="tv" msgid="6488872735379978935">"ನಿಮ್ಮ Android TV ಸಾಧನದಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗಿರುವ ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಕುರಿತಾದ ಡೇಟಾವನ್ನು ಮಾರ್ಪಡಿಸಲು ಆ್ಯಪ್‌ಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ. ಈ ಅನುಮತಿಯು ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ಅಳಿಸಲು ಆ್ಯಪ್‌ಗಳಿಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
@@ -469,7 +471,7 @@
     <string name="permdesc_readCalendar" product="default" msgid="9118823807655829957">"ಈ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ಎಲ್ಲಾ ಕ್ಯಾಲೆಂಡರ್ ಈವೆಂಟ್‌ಗಳನ್ನು ಓದಬಹುದು ಮತ್ತು ನಿಮ್ಮ ಕ್ಯಾಲೆಂಡರ್ ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು ಅಥವಾ ಉಳಿಸಬಹುದು."</string>
     <string name="permlab_writeCalendar" msgid="6422137308329578076">"ಮಾಲೀಕರ ಗಮನಕ್ಕೆ ತರದೆಯೇ ಕ್ಯಾಲೆಂಡರ್ ಈವೆಂಟ್‌ಗಳನ್ನು ಸೇರಿಸಿ ಅಥವಾ ಮಾರ್ಪಡಿಸಿ ಮತ್ತು ಅತಿಥಿಗಳಿಗೆ ಇಮೇಲ್ ಕಳುಹಿಸಿ"</string>
     <string name="permdesc_writeCalendar" product="tablet" msgid="8722230940717092850">"ಈ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ನಲ್ಲಿ ಕ್ಯಾಲೆಂಡರ್ ಈವೆಂಟ್‌ಗಳನ್ನು ಸೇರಿಸಬಹುದು, ತೆಗೆದುಹಾಕಬಹುದು ಅಥವಾ ಬದಲಾಯಿಸಬಹುದು. ಈ ಅಪ್ಲಿಕೇಶನ್ ಕ್ಯಾಲೆಂಡರ್‌ನ ಮಾಲೀಕರಿಂದ ಬಂದಿರಬಹುದಾದ ಕಾಣಿಸಿಕೊಳ್ಳುವ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಬಹುದು ಅಥವಾ ಅವರ ಮಾಲೀಕರಿಗೆ ತಿಳಿಸದಂತೆ ಘಟನೆಗಳು ಬದಲಾಯಿಸುವುದು."</string>
-    <string name="permdesc_writeCalendar" product="tv" msgid="951246749004952706">"ಈ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ Android TV ಸಾಧನದಲ್ಲಿ ಕ್ಯಾಲೆಂಡರ್ ಈವೆಂಟ್‌ಗಳನ್ನು ಸೇರಿಸಬಹುದು, ತೆಗೆದುಹಾಕಬಹುದು ಅಥವಾ ಬದಲಾಯಿಸಬಹುದು. ಈ ಅಪ್ಲಿಕೇಶನ್ ಕ್ಯಾಲೆಂಡರ್‌ನ ಮಾಲೀಕರಿಂದ ಬರುವಂತೆ ಕಾಣುವ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಬಹುದು ಅಥವಾ ಅದರ ಮಾಲೀಕರಿಗೆ ಅಧಿಸೂಚನೆ ನೀಡದೆ ಈವೆಂಟ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಬಹುದು."</string>
+    <string name="permdesc_writeCalendar" product="tv" msgid="951246749004952706">"ಈ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ Android TV ಸಾಧನದಲ್ಲಿ ಕ್ಯಾಲೆಂಡರ್ ಈವೆಂಟ್‌ಗಳನ್ನು ಸೇರಿಸಬಹುದು, ತೆಗೆದುಹಾಕಬಹುದು ಅಥವಾ ಬದಲಾಯಿಸಬಹುದು. ಈ ಅಪ್ಲಿಕೇಶನ್ ಕ್ಯಾಲೆಂಡರ್‌ನ ಮಾಲೀಕರಿಂದ ಬರುವಂತೆ ಕಾಣುವ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಬಹುದು ಅಥವಾ ಅದರ ಮಾಲೀಕರಿಗೆ ನೋಟಿಫಿಕೇಶನ್ ನೀಡದೆ ಈವೆಂಟ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಬಹುದು."</string>
     <string name="permdesc_writeCalendar" product="default" msgid="5416380074475634233">"ಈ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿ ಕ್ಯಾಲೆಂಡರ್ ಈವೆಂಟ್‌ಗಳನ್ನು ಸೇರಿಸಬಹುದು, ತೆಗೆದುಹಾಕಬಹುದು ಅಥವಾ ಬದಲಾಯಿಸಬಹುದು. ಈ ಅಪ್ಲಿಕೇಶನ್ ಕ್ಯಾಲೆಂಡರ್‌ನ ಮಾಲೀಕರಿಂದ ಬಂದಿರಬಹುದಾದ ಕಾಣಿಸಿಕೊಳ್ಳುವ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಬಹುದು ಅಥವಾ ಅವರ ಮಾಲೀಕರಿಗೆ ತಿಳಿಸದಂತೆ ಘಟನೆಗಳು ಬದಲಾಯಿಸುವುದು."</string>
     <string name="permlab_accessLocationExtraCommands" msgid="5162339812057983988">"ಹೆಚ್ಚುವರಿ ಸ್ಥಳ ಪೂರೈಕೆದಾರರ ಆದೇಶಗಳನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
     <string name="permdesc_accessLocationExtraCommands" msgid="355369611979907967">"ಹೆಚ್ಚಿನ ಸ್ಥಳ ಪೂರೈಕೆದಾರ ಆದೇಶಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ. ಇದು GPS ಅಥವಾ ಇತರ ಸ್ಥಳ ಮೂಲಗಳ ಕಾರ್ಯಾಚರಣೆಯಲ್ಲಿ ಮಧ್ಯ ಪ್ರವೇಶಿಸಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅನುಮತಿಸಬಹುದು."</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"ವೈಬ್ರೇಟರ್‌ ನಿಯಂತ್ರಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ವೈಬ್ರೇಟರ್ ಸ್ಥಿತಿಯನ್ನು ಪ್ರವೇಶಿಸಲು ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"ಫೋನ್ ಸಂಖ್ಯೆಗಳಿಗೆ ನೇರವಾಗಿ ಕರೆ ಮಾಡಿ"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"ನಿಮ್ಮ ಹಸ್ತಕ್ಷೇಪ ಇಲ್ಲದೆಯೇ ಫೋನ್‍ ಸಂಖ್ಯೆಗಳಿಗೆ ಕರೆ ಮಾಡಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಇದು ಅನಿರೀಕ್ಷಿತ ಶುಲ್ಕಗಳು ಅಥವಾ ಕರೆಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು. ತುರ್ತು ಸಂಖ್ಯೆಗಳಿಗೆ ಕರೆಮಾಡಲು ಈ ಅಪ್ಲಿಕೇಶನ್‍ ಅನುಮತಿಸುವುದಿಲ್ಲ ಎಂಬುದು ಗಮನದಲ್ಲಿರಲಿ. ದುರುದ್ದೇಶಪೂರಿತ ಅಪ್ಲಿಕೇಶನ್‍‍ಗಳು ನಿಮ್ಮ ಖಾತರಿ ಇಲ್ಲದೆಯೇ ಕರೆಗಳನ್ನು ಮಾಡುವುದರ ಮೂಲಕ ನಿಮ್ಮ ಹಣ ಖರ್ಚಾಗಬಹುದು."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"ನಿಮ್ಮ ಹಸ್ತಕ್ಷೇಪವಿಲ್ಲದೆಯೇ ಫೋನ್ ಸಂಖ್ಯೆಗಳಿಗೆ ಕರೆ ಮಾಡಲು ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಇದು ಅನಿರೀಕ್ಷಿತ ಶುಲ್ಕಗಳು ಅಥವಾ ಕರೆಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು. ತುರ್ತು ಸಂಖ್ಯೆಗಳಿಗೆ ಕರೆ ಮಾಡಲು ಇದು ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸುವುದಿಲ್ಲ ಎಂಬುದನ್ನು ಗಮನಿಸಿ. ದುರುದ್ದೇಶಪ್ರೇರಿತ ಆ್ಯಪ್‌ಗಳು ನಿಮ್ಮ ದೃಢೀಕರಣವಿಲ್ಲದೆಯೇ ಕರೆಗಳನ್ನು ಮಾಡುವ ಮೂಲಕ ಅಥವಾ ಒಳಬರುವ ಕರೆಗಳನ್ನು ಮತ್ತೊಂದು ಸಂಖ್ಯೆಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಫಾರ್ವರ್ಡ್ ಮಾಡಲು ಕಾರಣವಾಗುವ ವಾಹಕದ ಕೋಡ್‌ಗಳನ್ನು ಡಯಲ್ ಮಾಡುವ ಮೂಲಕ ನಿಮ್ಮ ಹಣ ವೆಚ್ಚವಾಗುವಂತೆ ಮಾಡಬಹುದು."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS ಕರೆ ಸೇವೆಯನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"ನಿಮ್ಮ ಮಧ್ಯಸ್ಥಿಕೆ ಇಲ್ಲದೆಯೇ ಕರೆಗಳನ್ನು ಮಾಡಲು IMS ಸೇವೆಯನ್ನು ಬಳಸಲು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ಫೋನ್ ಸ್ಥಿತಿ ಮತ್ತು ಗುರುತಿಸುವಿಕೆಯನ್ನು ಓದಿ"</string>
@@ -519,7 +521,7 @@
     <string name="permlab_acceptHandover" msgid="2925523073573116523">"ಮತ್ತೊಂದು ಅಪ್ಲಿಕೇಶನ್‌ ಮೂಲಕ ಕರೆಯನ್ನು ಮುಂದುವರಿಸಿ"</string>
     <string name="permdesc_acceptHandovers" msgid="7129026180128626870">"ಮತ್ತೊಂದು ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಪ್ರಾರಂಭವಾದ ಕರೆಯನ್ನು ಮುಂದುವರಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡಿ."</string>
     <string name="permlab_readPhoneNumbers" msgid="5668704794723365628">"ಫೋನ್‌ ಸಂಖ್ಯೆಗಳನ್ನು ಓದಿ"</string>
-    <string name="permdesc_readPhoneNumbers" msgid="7368652482818338871">"ಸಾಧನದ ಫೋನ್ ಸಂಖ್ಯೆಗಳಿಗೆ ಪ್ರವೇಶ ಪಡೆಯಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿ ನೀಡುತ್ತದೆ."</string>
+    <string name="permdesc_readPhoneNumbers" msgid="7368652482818338871">"ಸಾಧನದ ಫೋನ್ ಸಂಖ್ಯೆಗಳಿಗೆ ಆ್ಯಕ್ಸೆಸ್ ಪಡೆಯಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿ ನೀಡುತ್ತದೆ."</string>
     <string name="permlab_wakeLock" product="automotive" msgid="1904736682319375676">"ಕಾರ್ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಆನ್‌ನಲ್ಲೇ ಇರಿಸಿ"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1527660973931694000">"ಟ್ಯಾಬ್ಲೆಟ್ ನಿದ್ರಾವಸ್ಥೆಯನ್ನು ತಡೆಯಿರಿ"</string>
     <string name="permlab_wakeLock" product="tv" msgid="2856941418123343518">"ನಿಮ್ಮ Android TV ಸಾಧನವು ನಿದ್ರಾವಸ್ಥೆಗೆ ಹೋಗುವುದನ್ನು ತಡೆಯಿರಿ"</string>
@@ -555,7 +557,7 @@
     <string name="permlab_accessWifiState" msgid="5552488500317911052">"ವೈ-ಫೈ ಸಂಪರ್ಕಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
     <string name="permdesc_accessWifiState" msgid="6913641669259483363">"ವೈ-ಫೈ ಸಕ್ರಿಯಗೊಂಡಿದೆಯೇ ಮತ್ತು ಸಂಪರ್ಕಿಸಲಾದ ವೈ-ಫೈ ಸಾಧನಗಳ ಹೆಸರಿನ ಮಾಹಿತಿ ರೀತಿಯ, ವೈ-ಫೈ ನೆಟ್‍‍ವರ್ಕ್ ಕುರಿತು ಮಾಹಿತಿಯನ್ನು ವೀಕ್ಷಿಸಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ."</string>
     <string name="permlab_changeWifiState" msgid="7947824109713181554">"ವೈ-ಫೈ ನಿಂದ ಸಂಪರ್ಕಗೊಳಿಸಿ ಮತ್ತು ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಿ"</string>
-    <string name="permdesc_changeWifiState" msgid="7170350070554505384">"ವೈ-ಫೈ ಪ್ರವೇಶ ಕೇಂದ್ರಗಳಿಂದ ಸಂಪರ್ಕ ಹೊಂದಲು ಮತ್ತು ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲು, ಹಾಗೆಯೇ ವೈ-ಫೈ ನೆಟ್‍‍ವರ್ಕ್‌ಗಳಿಗೆ ಸಾಧನದ ಕನ್ಫಿಗರೇಶನ್‍ ಬದಲಾಯಿಸಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ."</string>
+    <string name="permdesc_changeWifiState" msgid="7170350070554505384">"ವೈ-ಫೈ ಆ್ಯಕ್ಸೆಸ್ ಕೇಂದ್ರಗಳಿಂದ ಸಂಪರ್ಕ ಹೊಂದಲು ಮತ್ತು ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲು, ಹಾಗೆಯೇ ವೈ-ಫೈ ನೆಟ್‍‍ವರ್ಕ್‌ಗಳಿಗೆ ಸಾಧನದ ಕನ್ಫಿಗರೇಶನ್‍ ಬದಲಾಯಿಸಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ."</string>
     <string name="permlab_changeWifiMulticastState" msgid="285626875870754696">"ವೈ-ಫೈ ಮಲ್ಟಿಕ್ಯಾಸ್ಟ್ ಸ್ವೀಕಾರಕ್ಕೆ ಅನುಮತಿಸಿ"</string>
     <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="191079868596433554">"ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ ಮಾತ್ರವಲ್ಲದೇ, ಮಲ್ಟಿಕ್ಯಾಸ್ಟ್ ವಿಳಾಸಗಳನ್ನು ಬಳಸಿಕೊಂಡು ವೈ-ಫೈ ನೆಟ್‍‍ವರ್ಕ್‌ನಲ್ಲಿ ಎಲ್ಲಾ ಸಾಧನಗಳಿಗೆ ಕಳುಹಿಸಲಾಗಿರುವ ಪ್ಯಾಕೆಟ್‍‍ಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ. ಇದು ಮಲ್ಟಿಕ್ಯಾಸ್ಟ್ ಅಲ್ಲದ ಮೋಡ್ ಬಳಸುವ ಶಕ್ತಿಗಿಂತಲೂ ಹೆಚ್ಚಿನ ಶಕ್ತಿಯನ್ನು ಬಳಸುತ್ತದೆ."</string>
     <string name="permdesc_changeWifiMulticastState" product="tv" msgid="1336952358450652595">"ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ನಿಮ್ಮ Android TV ಮಾತ್ರವಲ್ಲದೆ, ಮಲ್ಟಿಕ್ಯಾಸ್ಟ್ ವಿಳಾಸಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಎಲ್ಲಾ ಸಾಧನಗಳಿಗೆ ಕಳುಹಿಸಲಾದ ಪ್ಯಾಕೆಟ್‌ಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಇದು ಮಲ್ಟಿಕ್ಯಾಸ್ಟ್ ಅಲ್ಲದ ಮೋಡ್‌ಗಿಂತಲೂ ಹೆಚ್ಚು ಪವರ್ ಬಳಸುತ್ತದೆ."</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"ನೋಂದಾಯಿತ ಅಪ್ಲಿಕೇಶನ್ ಗುರುತಿಸುವಿಕೆಗಳು ಮತ್ತು ಮಾರ್ಗ ಗಮ್ಯಸ್ಥಾನಗಳಂತಹ ಆದ್ಯತೆಯ NFC ಪಾವತಿ ಸೇವೆಗಳ ಬಗ್ಗೆ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"ಸಮೀಪ ಕ್ಷೇತ್ರ ಸಂವಹನವನ್ನು ನಿಯಂತ್ರಿಸಿ"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"ಸಮೀಪದ ಕ್ಷೇತ್ರ ಸಂವಹನ (NFC) ಟ್ಯಾಗ್‌ಗಳು, ಕಾರ್ಡ್‌ಗಳು, ಮತ್ತು ಓದುಗರನ್ನು ಅಪ್ಲಿಕೇಶನ್‌ ಅನುಮತಿಸುತ್ತದೆ."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"ಸುರಕ್ಷಿತ ಅಂಶದ ವಹಿವಾಟು ಈವೆಂಟ್"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"ಸುರಕ್ಷಿತ ಅಂಶದಲ್ಲಿ ನಡೆಯುತ್ತಿರುವ ವಹಿವಾಟುಗಳ ಕುರಿತು ಮಾಹಿತಿಯನ್ನು ಸ್ವೀಕರಿಸಲು ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"ಕೀಲಾಕ್ ಮತ್ತು ಯಾವುದೇ ಸಂಬಂಧಿತ ಭದ್ರತಾ ಪಾಸ್‍‍ವರ್ಡ್ ಭದ್ರತೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅನುಮತಿ ನೀಡುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಒಳಬರುವ ಕರೆಯನ್ನು ಸ್ವೀಕರಿಸುವಾಗ ಕೀಲಾಕ್ ಅನ್ನು ಫೋನ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ, ನಂತರ ಕರೆಯು ಅಂತ್ಯಗೊಂಡಾಗ ಕೀಲಾಕ್ ಅನ್ನು ಮರು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಸಂಕೀರ್ಣತೆಯನ್ನು ವಿನಂತಿಸಿ"</string>
@@ -614,20 +618,23 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ಬಯೋಮೆಟ್ರಿಕ್ಸ್ ಅಥವಾ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಅನ್ನು ಬಳಸಿ"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"ಇದು ನೀವೇ ಎಂದು ಪರಿಶೀಲಿಸಿ"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"ಮುಂದುವರಿಸಲು ನಿಮ್ಮ ಬಯೋಮೆಟ್ರಿಕ್ ಬಳಸಿ"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"ಮುಂದುವರಿಸಲು ನಿಮ್ಮ ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಅನ್ನು ಬಳಸಿ"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"ಮುಂದುವರಿಸಲು ನಿಮ್ಮ ಮುಖವನ್ನು ಬಳಸಿ"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"ಮುಂದುವರಿಸಲು ನಿಮ್ಮ ಬಯೋಮೆಟ್ರಿಕ್ ಅಥವಾ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಅನ್ನು ಬಳಸಿ"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"ಬಯೋಮೆಟ್ರಿಕ್ ಹಾರ್ಡ್‌ವೇರ್‌ ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"ಪ್ರಮಾಣೀಕರಣವನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"ಮುಖವನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"ಪ್ರಮಾಣೀಕರಣವನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"ಪಿನ್, ಪ್ಯಾಟರ್ನ್ ಅಥವಾ ಪಾಸ್‌ವರ್ಡ್ ಸೆಟ್ ಮಾಡಿಲ್ಲ"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"ದೃಢೀಕರಿಸುವಾಗ ದೋಷ ಎದುರಾಗಿದೆ"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಬಳಸಿ"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"ಮುಂದುವರಿಯಲು ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಲಾಕ್‌ ಅನ್ನು ನಮೂದಿಸಿ"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"ಸೆನ್ಸರ್ ಮೇಲೆ ದೃಢವಾಗಿ ಒತ್ತಿರಿ"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"ಸೆನ್ಸರ್ ಮೇಲೆ ಗಟ್ಟಿಯಾಗಿ ಒತ್ತಿರಿ"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್ನು ಗುರುತಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ಫಿಂಗರ್‌ ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್‌‌ ಸ್ವಚ್ಛಗೊಳಿಸಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"ಸೆನ್ಸರ್‌‌ ಸ್ವಚ್ಛಗೊಳಿಸಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"ಸೆನ್ಸರ್ ಮೇಲೆ ದೃಢವಾಗಿ ಒತ್ತಿರಿ"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"ಸೆನ್ಸರ್ ಮೇಲೆ ಗಟ್ಟಿಯಾಗಿ ಒತ್ತಿರಿ"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"ಬೆರಳನ್ನು ತುಂಬಾ ನಿಧಾನವಾಗಿ ಸರಿಸಲಾಗಿದೆ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"ಮತ್ತೊಂದು ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಪ್ರಯತ್ನಿಸಿ"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"ತುಂಬಾ ಪ್ರಕಾಶಮಾನವಾಗಿದೆ"</string>
@@ -636,14 +643,14 @@
     <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ಪ್ರತಿ ಬಾರಿಯೂ ನಿಮ್ಮ ಬೆರಳಿನ ಸ್ಥಾನವನ್ನು ಸ್ವಲ್ಪ ಮಟ್ಟಿಗೆ ಬದಲಾಯಿಸಿ"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
-    <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ಫಿಂಗರ್‌ ಪ್ರಿಂಟ್ ಅನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
-    <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಅನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
+    <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
+    <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
     <string name="fingerprint_authenticated" msgid="2024862866860283100">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್ನು ಪ್ರಮಾಣೀಕರಣ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ಮುಖವನ್ನು ದೃಢೀಕರಿಸಲಾಗಿದೆ"</string>
     <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ಮುಖವನ್ನು ದೃಢೀಕರಿಸಲಾಗಿದೆ, ದೃಢೀಕರಣವನ್ನು ಒತ್ತಿ"</string>
     <string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಹಾರ್ಡ್‌ವೇರ್‌ ಲಭ್ಯವಿಲ್ಲ."</string>
     <string name="fingerprint_error_no_space" msgid="7285481581905967580">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
-    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"ಫಿಂಗರ್‌ ಪ್ರಿಂಟ್ ಸೆಟಪ್ ಮಾಡುವ ಅವಧಿ ಮುಗಿದಿದೆ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
+    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೆಟಪ್ ಮಾಡುವ ಅವಧಿ ಮುಗಿದಿದೆ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="fingerprint_error_canceled" msgid="540026881380070750">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ರದ್ದುಮಾಡಲಾಗಿದೆ."</string>
     <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"ಬಳಕೆದಾರರು ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ರದ್ದುಪಡಿಸಿದ್ದಾರೆ."</string>
     <string name="fingerprint_error_lockout" msgid="6626753679019351368">"ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ. ಬದಲಾಗಿ ಸ್ಕ್ರೀನ್‌ಲಾಕ್ ಬಳಸಿ."</string>
@@ -692,7 +699,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೇರವಾಗಿ ನೋಡಿ"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೇರವಾಗಿ ನೋಡಿ"</string>
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೇರವಾಗಿ ನೋಡಿ"</string>
-    <string name="face_acquired_obscured" msgid="4917643294953326639">"ನಿಮ್ಮ ಮುಖವನ್ನು ಮರೆಮಾಡುವ ಯಾವುದನ್ನಾದರೂ ತೆಗೆದುಹಾಕಿ."</string>
+    <string name="face_acquired_obscured" msgid="4917643294953326639">"ಮುಖವನ್ನು ಮರೆ ಮಾಡುವ ವಸ್ತುಗಳನ್ನು ತೆಗೆದುಹಾಕಿ."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ಬ್ಲ್ಯಾಕ್ ಬಾರ್ ಸೇರಿದಂತೆ ನಿಮ್ಮ ಸ್ಕ್ರೀನ್‌ನ ಮೇಲ್ಭಾಗವನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ಮುಖವು ಕವರ್ ಆಗಿದೆ. ಮುಖವು ಸಂಪೂರ್ಣವಾಗಿ ಗೋಚರಿಸಬೇಕು."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"ಮುಖ ದೃಢೀಕರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಹಾರ್ಡ್‌ವೇರ್ ಲಭ್ಯವಿಲ್ಲ."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"ಮುಖದ ಕಾರ್ಯಚರಣೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"ಫೇಸ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಬಳಕೆದಾರರು ರದ್ದುಗೊಳಿಸಿದ್ದಾರೆ"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ. ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ. ಫೇಸ್ ಅನ್‌ಲಾಕ್ ಲಭ್ಯವಿಲ್ಲ."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ. ಬದಲಾಗಿ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಅನ್ನು ನಮೂದಿಸಿ."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ಮುಖವನ್ನು ದೃಢೀಕರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"ನೀವು ಫೇಸ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡಿಲ್ಲ"</string>
@@ -751,8 +757,8 @@
     <string name="permdesc_register_call_provider" msgid="4201429251459068613">"ಹೊಸ ಟೆಲಿಕಾಂ ಸಂಪರ್ಕಗಳನ್ನು ನೋಂದಣಿ ಮಾಡಲು ಅಪ್ಲಿಕೇಶನ್ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ."</string>
     <string name="permlab_connection_manager" msgid="3179365584691166915">"ಟೆಲಿಕಾಂ ಸಂಪರ್ಕಗಳನ್ನು ನಿರ್ವಹಿಸಿ"</string>
     <string name="permdesc_connection_manager" msgid="1426093604238937733">"ಟೆಲಿಕಾಂ ಸಂಪರ್ಕಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಅಪ್ಲಿಕೇಶನ್ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ."</string>
-    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"ಒಳ-ಕರೆ ಪರದೆಯ ಮೂಲಕ ಸಂವಹನ ನಡೆಸಿ"</string>
-    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"ಬಳಕೆದಾರರು ಒಳ-ಕರೆಯ ಪರದೆಯನ್ನು ಯಾವಾಗ ಮತ್ತು ಹೇಗೆ ನೋಡುತ್ತಾರೆ ಎಂಬುದನ್ನು ನಿಯಂತ್ರಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ."</string>
+    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"ಒಳ-ಕಾಲ್ ಸ್ಕ್ರೀನ್ ಮೂಲಕ ಸಂವಹನ ನಡೆಸಿ"</string>
+    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"ಬಳಕೆದಾರರು ಒಳ-ಕಾಲ್ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಯಾವಾಗ ಮತ್ತು ಹೇಗೆ ನೋಡುತ್ತಾರೆ ಎಂಬುದನ್ನು ನಿಯಂತ್ರಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ."</string>
     <string name="permlab_bind_connection_service" msgid="5409268245525024736">"ಟೆಲಿಫೋನಿ ಸೇವೆಗಳೊಂದಿಗೆ ಸಂವಾದ ನಡೆಸಿ"</string>
     <string name="permdesc_bind_connection_service" msgid="6261796725253264518">"ಕರೆಗಳನ್ನು ಮಾಡಲು/ಸ್ವೀಕರಿಸುವ ನಿಟ್ಟಿನಲ್ಲಿ ಲಿಫೋನಿ ಸೇವೆಗಳ ಜೊತೆ ಸಂವಾದ ನಡೆಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅವಕಾಶ ಮಾಡಕೊಡಿ."</string>
     <string name="permlab_control_incall_experience" msgid="6436863486094352987">"ಒಳ ಕರೆ ಬಳಕೆದಾರರ ಅನುಭವವನ್ನು ಒದಗಿಸಿ"</string>
@@ -765,8 +771,8 @@
     <string name="permdesc_modifyNetworkAccounting" msgid="5076042642247205390">"ಅಪ್ಲಿಕೇಶನ್‍‍ಗಳಿಗೆ ವಿರುದ್ಧವಾಗಿ ನೆಟ್‍‍ವರ್ಕ್ ಬಳಕೆಯನ್ನು ಹೇಗೆ ಲೆಕ್ಕಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ಮಾರ್ಪಡಿಸಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ. ಸಾಮಾನ್ಯ ಅಪ್ಲಿಕೇಶನ್‍‍ಗಳಲ್ಲಿ ಬಳಸಲಾಗುವುದಿಲ್ಲ."</string>
     <string name="permlab_accessNotifications" msgid="7130360248191984741">"ಅಧಿಸೂಚನೆಗಳನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
     <string name="permdesc_accessNotifications" msgid="761730149268789668">"ಇತರ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಮೂಲಕ ಪೋಸ್ಟ್ ಮಾಡಿರುವ ಅಧಿಸೂಚನೆಗಳೂ ಸೇರಿದಂತೆ, ಅಂತಹ ಅಧಿಸೂಚನೆಗಳನ್ನು ಹಿಂಪಡೆದುಕೊಳ್ಳಲು, ಪರೀಕ್ಷಿಸಲು ಮತ್ತು ತೆರವುಗೊಳಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
-    <string name="permlab_bindNotificationListenerService" msgid="5848096702733262458">"ಅಧಿಸೂಚನೆ ಕೇಳುಗರ ಸೇವೆಗೆ ಪ್ರತಿಬಂಧಿಸಿ"</string>
-    <string name="permdesc_bindNotificationListenerService" msgid="4970553694467137126">"ಅಧಿಸೂಚನೆ ಕೇಳುಗ ಸೇವೆಯ ಮೇಲ್ಮಟ್ಟದ ಇಂಟರ್ಫೇಸ್‌ಗೆ ಪ್ರತಿಬಂಧಿಸಲು ಹೊಂದಿರುವವರಿಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ. ಸಾಮಾನ್ಯ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ ಎಂದಿಗೂ ಅಗತ್ಯವಿರುವುದಿಲ್ಲ."</string>
+    <string name="permlab_bindNotificationListenerService" msgid="5848096702733262458">"ನೋಟಿಫಿಕೇಶನ್ ಕೇಳುಗರ ಸೇವೆಗೆ ಪ್ರತಿಬಂಧಿಸಿ"</string>
+    <string name="permdesc_bindNotificationListenerService" msgid="4970553694467137126">"ನೋಟಿಫಿಕೇಶನ್ ಕೇಳುಗ ಸೇವೆಯ ಮೇಲ್ಮಟ್ಟದ ಇಂಟರ್ಫೇಸ್‌ಗೆ ಪ್ರತಿಬಂಧಿಸಲು ಹೊಂದಿರುವವರಿಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ. ಸಾಮಾನ್ಯ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ ಎಂದಿಗೂ ಅಗತ್ಯವಿರುವುದಿಲ್ಲ."</string>
     <string name="permlab_bindConditionProviderService" msgid="5245421224814878483">"ಕಂಡೀಶನ್‌‌ ಪೂರೈಕೆದಾರರ ಸೇವೆಯನ್ನು ಪ್ರತಿಬಂಧಿಸು"</string>
     <string name="permdesc_bindConditionProviderService" msgid="6106018791256120258">"ಕಂಡೀಶನ್‌ ಪೂರೈಕೆದಾರರ ಮೇಲ್ಮಟ್ಟದ ಇಂಟರ್ಫೇಸ್‌ಗೆ ಪ್ರತಿಬಂಧಿಸಲು ಹೊಂದಿರುವವರಿಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ. ಸಾಮಾನ್ಯ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ ಎಂದಿಗೂ ಅಗತ್ಯವಿರುವುದಿಲ್ಲ."</string>
     <string name="permlab_bindDreamService" msgid="4776175992848982706">"ಕನಸಿನ ಸೇವೆಗೆ ಪ್ರತಿಬಂಧಿಸಿ"</string>
@@ -1188,7 +1194,7 @@
     <string name="whichOpenLinksWith" msgid="1120936181362907258">"ಇವುಗಳ ಮೂಲಕ ಲಿಂಕ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
     <string name="whichOpenLinksWithApp" msgid="6917864367861910086">"<xliff:g id="APPLICATION">%1$s</xliff:g> ಮೂಲಕ ಲಿಂಕ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
     <string name="whichOpenHostLinksWithApp" msgid="2401668560768463004">"<xliff:g id="APPLICATION">%2$s</xliff:g> ಮೂಲಕ <xliff:g id="HOST">%1$s</xliff:g> ಲಿಂಕ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
-    <string name="whichGiveAccessToApplicationLabel" msgid="7805857277166106236">"ಪ್ರವೇಶ ಅನುಮತಿಸಿ"</string>
+    <string name="whichGiveAccessToApplicationLabel" msgid="7805857277166106236">"ಆ್ಯಕ್ಸೆಸ್ ಅನುಮತಿಸಿ"</string>
     <string name="whichEditApplication" msgid="6191568491456092812">"ಇವರ ಜೊತೆಗೆ ಎಡಿಟ್ ಮಾಡಿ"</string>
     <string name="whichEditApplicationNamed" msgid="8096494987978521514">"%1$s ಜೊತೆಗೆ ಎಡಿಟ್ ಮಾಡಿ"</string>
     <string name="whichEditApplicationLabel" msgid="1463288652070140285">"ಎಡಿಟ್"</string>
@@ -1199,7 +1205,7 @@
     <string name="whichSendToApplicationNamed" msgid="3385686512014670003">"%1$s ಬಳಸಿಕೊಂಡು ಕಳುಹಿಸಿ"</string>
     <string name="whichSendToApplicationLabel" msgid="3543240188816513303">"ಕಳುಹಿಸು"</string>
     <string name="whichHomeApplication" msgid="8276350727038396616">"ಮುಖಪುಟ‌ ಅಪ್ಲಿಕೇಶನ್‌ ಆಯ್ಕೆಮಾಡಿ"</string>
-    <string name="whichHomeApplicationNamed" msgid="5855990024847433794">"ಮುಖಪುಟ‌ ಎಂಬಂತೆ %1$s ಅನ್ನು ಬಳಸಿ"</string>
+    <string name="whichHomeApplicationNamed" msgid="5855990024847433794">"%1$s ಅನ್ನು ಹೋಮ್ ಆಗಿ ಬಳಸಿ"</string>
     <string name="whichHomeApplicationLabel" msgid="8907334282202933959">"ಚಿತ್ರ ಕ್ಯಾಪ್ಚರ್ ಮಾಡಿ"</string>
     <string name="whichImageCaptureApplication" msgid="2737413019463215284">"ಇದರ ಜೊತೆಗೆ ಚಿತ್ರ ಕ್ಯಾಪ್ಚರ್ ಮಾಡಿ"</string>
     <string name="whichImageCaptureApplicationNamed" msgid="8820702441847612202">"%1$s ಜೊತೆ ಚಿತ್ರ ಕ್ಯಾಪ್ಚರ್ ಮಾಡಿ"</string>
@@ -1255,7 +1261,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"ಬೂಟ್ ಪೂರ್ಣಗೊಳಿಸಲಾಗುತ್ತಿದೆ."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"ನೀವು ಪವರ್ ಬಟನ್ ಒತ್ತಿದ್ದೀರಿ — ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಸ್ಕ್ರೀನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.\n\nನಿಮ್ಮ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್ನು ಹೊಂದಿಸುವಾಗ ಲಘುವಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"ಸೆಟಪ್ ಪೂರ್ಣಗೊಳಿಸಲು, ಸ್ಕ್ರೀನ್‌ ಆಫ್ ಮಾಡಿ"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"ಸೆಟಪ್ ಅಂತ್ಯಗೊಳಿಸಲು, ಸ್ಕ್ರೀನ್‌ ಆಫ್ ಮಾಡಿ"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"ಆಫ್ ಮಾಡಿ"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಪರಿಶೀಲನೆ ಮುಂದುವರಿಸುವುದೇ?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"ನೀವು ಪವರ್ ಬಟನ್ ಒತ್ತಿದ್ದೀರಿ — ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಸ್ಕ್ರೀನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.\n\nನಿಮ್ಮ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್ನು ಪರಿಶೀಲಿಸಲು ಲಘುವಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ."</string>
@@ -1272,7 +1278,7 @@
     <string name="dump_heap_ready_notification" msgid="2302452262927390268">"<xliff:g id="PROC">%1$s</xliff:g> ಹೀಪ್ ಡಂಪ್ ಸಿದ್ಧವಾಗಿದೆ"</string>
     <string name="dump_heap_notification_detail" msgid="8431586843001054050">"ಹೀಪ್ ಡಂಪ್ ಅನ್ನು ಸಂಗ್ರಹಿಸಲಾಗಿದೆ; ಹಂಚಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
     <string name="dump_heap_title" msgid="4367128917229233901">"ಹೀಪ್ ಡಂಪ್ ಹಂಚಿಕೊಳ್ಳುವುದೇ?"</string>
-    <string name="dump_heap_text" msgid="1692649033835719336">"<xliff:g id="PROC">%1$s</xliff:g> ಪ್ರಕ್ರಿಯೆಯು ತನ್ನ <xliff:g id="SIZE">%2$s</xliff:g> ಮೆಮೊರಿ ಮಿತಿಯನ್ನು ಮೀರಿದೆ. ಅದರ ಡೆವಲಪರ್ ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲು ನಿಮಗಾಗಿ ಹೀಪ್ ಡಂಪ್ ಲಭ್ಯವಿದೆ. ಎಚ್ಚರಿಕೆ: ಈ ಹೀಪ್ ಡಂಪ್, ಅಪ್ಲಿಕೇಶನ್ ಪ್ರವೇಶ ಹೊಂದಿರುವ ನಿಮ್ಮ ಯಾವುದೇ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಿರಬಹುದು."</string>
+    <string name="dump_heap_text" msgid="1692649033835719336">"<xliff:g id="PROC">%1$s</xliff:g> ಪ್ರಕ್ರಿಯೆಯು ತನ್ನ <xliff:g id="SIZE">%2$s</xliff:g> ಮೆಮೊರಿ ಮಿತಿಯನ್ನು ಮೀರಿದೆ. ಅದರ ಡೆವಲಪರ್ ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲು ನಿಮಗಾಗಿ ಹೀಪ್ ಡಂಪ್ ಲಭ್ಯವಿದೆ. ಎಚ್ಚರಿಕೆ: ಈ ಹೀಪ್ ಡಂಪ್, ಅಪ್ಲಿಕೇಶನ್ ಆ್ಯಕ್ಸೆಸ್ ಹೊಂದಿರುವ ನಿಮ್ಮ ಯಾವುದೇ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಿರಬಹುದು."</string>
     <string name="dump_heap_system_text" msgid="6805155514925350849">"<xliff:g id="PROC">%1$s</xliff:g> ಪ್ರಕ್ರಿಯೆಯು ತನ್ನ <xliff:g id="SIZE">%2$s</xliff:g> ಮೆಮೊರಿ ಮಿತಿಯನ್ನು ಮೀರಿದೆ. ಹಂಚಿಕೊಳ್ಳಲು ನಿಮಗಾಗಿ ಹೀಪ್ ಡಂಪ್ ಲಭ್ಯವಿದೆ. ಎಚ್ಚರಿಕೆ: ಈ ಹೀಪ್ ಡಂಪ್, ಪ್ರಕ್ರಿಯೆಯು ಯಾವುದೇ ಸೂಕ್ಷ್ಮ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿರಬಹುದು, ಇದು ನೀವು ಟೈಪ್ ಮಾಡಿದ ವಿಷಯಗಳನ್ನು ಸಹ ಒಳಗೊಂಡಿರಬಹುದು."</string>
     <string name="dump_heap_ready_text" msgid="5849618132123045516">"<xliff:g id="PROC">%1$s</xliff:g> ನ ಪ್ರಕ್ರಿಯೆಯ ಹೀಪ್ ಡಂಪ್ ನಿಮಗಾಗಿ ಹಂಚಿಕೊಳ್ಳಲು ಲಭ್ಯವಿದೆ. ಎಚ್ಚರಿಕೆ: ಈ ಹೀಪ್ ಡಂಪ್, ಪ್ರಕ್ರಿಯೆಯು ಯಾವುದೇ ಸೂಕ್ಷ್ಮ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿರಬಹುದು, ಇದು ನೀವು ಟೈಪ್ ಮಾಡಿದ ವಿಷಯಗಳನ್ನು ಸಹ ಒಳಗೊಂಡಿರಬಹುದು."</string>
     <string name="sendText" msgid="493003724401350724">"ಪಠ್ಯಕ್ಕೆ ಕ್ರಿಯೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
@@ -1295,7 +1301,7 @@
     <string name="ringtone_silent" msgid="397111123930141876">"ಯಾವುದೂ ಇಲ್ಲ"</string>
     <string name="ringtone_picker_title" msgid="667342618626068253">"ರಿಂಗ್‌ಟೋನ್‌ಗಳು"</string>
     <string name="ringtone_picker_title_alarm" msgid="7438934548339024767">"ಅಲಾರಮ್ ಧ್ವನಿಗಳು"</string>
-    <string name="ringtone_picker_title_notification" msgid="6387191794719608122">"ಅಧಿಸೂಚನೆ ಧ್ವನಿಗಳು"</string>
+    <string name="ringtone_picker_title_notification" msgid="6387191794719608122">"ನೋಟಿಫಿಕೇಶನ್ ಧ್ವನಿಗಳು"</string>
     <string name="ringtone_unknown" msgid="5059495249862816475">"ಅಪರಿಚಿತ"</string>
     <string name="wifi_available_sign_in" msgid="381054692557675237">"ವೈ-ಫೈ ನೆಟ್‍ವರ್ಕ್‌ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string>
     <string name="network_available_sign_in" msgid="1520342291829283114">"ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string>
@@ -1309,7 +1315,7 @@
     <string name="network_partial_connectivity" msgid="4791024923851432291">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> ಸೀಮಿತ ಸಂಪರ್ಕ ಕಲ್ಪಿಸುವಿಕೆಯನ್ನು ಹೊಂದಿದೆ"</string>
     <string name="network_partial_connectivity_detailed" msgid="5741329444564575840">"ಹೇಗಾದರೂ ಸಂಪರ್ಕಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
     <string name="network_switch_metered" msgid="1531869544142283384">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ"</string>
-    <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶ ಹೊಂದಿಲ್ಲದಿರುವಾಗ, ಸಾಧನವು <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ಬಳಸುತ್ತದೆ. ಶುಲ್ಕಗಳು ಅನ್ವಯವಾಗಬಹುದು."</string>
+    <string name="network_switch_metered_detail" msgid="1358296010128405906">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ಇಂಟರ್ನೆಟ್ ಆ್ಯಕ್ಸೆಸ್ ಹೊಂದಿಲ್ಲದಿರುವಾಗ, ಸಾಧನವು <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ಬಳಸುತ್ತದೆ. ಶುಲ್ಕಗಳು ಅನ್ವಯವಾಗಬಹುದು."</string>
     <string name="network_switch_metered_toast" msgid="501662047275723743">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ರಿಂದ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ"</string>
   <string-array name="network_switch_type_name">
     <item msgid="2255670471736226365">"ಮೊಬೈಲ್ ಡೇಟಾ"</item>
@@ -1350,7 +1356,7 @@
     <string name="time_picker_dialog_title" msgid="9053376764985220821">"ಸಮಯವನ್ನು ಹೊಂದಿಸಿ"</string>
     <string name="date_picker_dialog_title" msgid="5030520449243071926">"ದಿನಾಂಕವನ್ನು ಹೊಂದಿಸಿ"</string>
     <string name="date_time_set" msgid="4603445265164486816">"ಹೊಂದಿಸು"</string>
-    <string name="date_time_done" msgid="8363155889402873463">"ಮುಗಿದಿದೆ"</string>
+    <string name="date_time_done" msgid="8363155889402873463">"ಆಯಿತು"</string>
     <string name="perms_new_perm_prefix" msgid="6984556020395757087"><font size="12" fgcolor="#ff33b5e5">"ಹೊಸ: "</font></string>
     <string name="perms_description_app" msgid="2747752389870161996">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಮೂಲಕ ಒದಗಿಸಲಾಗಿದೆ."</string>
     <string name="no_permissions" msgid="5729199278862516390">"ಯಾವುದೇ ಅನುಮತಿಗಳ ಅಗತ್ಯವಿಲ್ಲ"</string>
@@ -1369,7 +1375,7 @@
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"ಅನ್‌ಲಾಗ್ ಆಡಿಯೋ ಪರಿಕರ ಪತ್ತೆಯಾಗಿದೆ"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"ಲಗತ್ತಿಸಲಾದ ಸಾಧನವು ಈ ಫೋನಿನೊಂದಿಗೆ ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ. ಇನ್ನಷ್ಟು ತಿಳಿಯಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
     <string name="adb_active_notification_title" msgid="408390247354560331">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆ ಕನೆಕ್ಟ್‌ ಆಗಿದೆ"</string>
-    <string name="adb_active_notification_message" msgid="5617264033476778211">"USB ಡೀಬಗಿಂಗ್ ಆಫ್‌ ಮಾಡಲು ಟ್ಯಾಪ್‌ ಮಾಡಿ"</string>
+    <string name="adb_active_notification_message" msgid="5617264033476778211">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆ ಆಫ್‌ ಮಾಡಲು ಟ್ಯಾಪ್‌ ಮಾಡಿ"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"USB ಡೀಬಗ್‌ ಮಾಡುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಆಯ್ಕೆ ಮಾಡಿ."</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"ವೈರ್‌ಲೆಸ್ ಡೀಬಗ್‌ ಮಾಡುವಿಕೆಯನ್ನು ಕನೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"ವೈರ್‌ಲೆಸ್ ಡೀಬಗ್‌ ಮಾಡುವಿಕೆಯನ್ನು ಆಫ್‌ ಮಾಡಲು ಟ್ಯಾಪ್‌ ಮಾಡಿ"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ನಿರಾಕರಿಸಿ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"ಇನ್‌ಪುಟ್‌‌ ವಿಧಾನವನ್ನು ಆರಿಸಿ"</string>
     <string name="show_ime" msgid="6406112007347443383">"ಭೌತಿಕ ಕೀಬೋರ್ಡ್ ಸಕ್ರಿಯವಾಗಿರುವಾಗ ಅದನ್ನು ಪರದೆಯ ಮೇಲಿರಿಸಿ"</string>
-    <string name="hardware" msgid="1800597768237606953">"ವರ್ಚುವಲ್ ಕೀಬೋರ್ಡ್ ತೋರಿಸಿ"</string>
+    <string name="hardware" msgid="3611039921284836033">"ಆನ್-ಸ್ಕ್ರೀನ್ ಕೀಬೋರ್ಡ್ ಬಳಸಿ"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> ಕಾನ್ಫಿಗರ್ ಮಾಡಿ"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"ಭೌತಿಕ ಕೀಬೋರ್ಡ್‌ಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"ಭಾಷೆ ಮತ್ತು ವಿನ್ಯಾಸವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
@@ -1491,10 +1497,10 @@
     <string name="accessibility_binding_label" msgid="1974602776545801715">"ಆ್ಯಕ್ಸೆಸಿಬಿಲಿಟಿ"</string>
     <string name="wallpaper_binding_label" msgid="1197440498000786738">"ವಾಲ್‌ಪೇಪರ್"</string>
     <string name="chooser_wallpaper" msgid="3082405680079923708">"ವಾಲ್‌ಪೇಪರ್ ಬದಲಿಸಿ"</string>
-    <string name="notification_listener_binding_label" msgid="2702165274471499713">"ಅಧಿಸೂಚನೆ ಕೇಳುಗ"</string>
+    <string name="notification_listener_binding_label" msgid="2702165274471499713">"ನೋಟಿಫಿಕೇಶನ್‍ ಕೇಳುಗ"</string>
     <string name="vr_listener_binding_label" msgid="8013112996671206429">"VR ಕೇಳುವಿಕೆ"</string>
     <string name="condition_provider_service_binding_label" msgid="8490641013951857673">"ಕಂಡೀಶನ್ ಪೂರೈಕೆದಾರರು"</string>
-    <string name="notification_ranker_binding_label" msgid="432708245635563763">"ಅಧಿಸೂಚನೆ ಶ್ರೇಣಿಯ ಸೇವೆ"</string>
+    <string name="notification_ranker_binding_label" msgid="432708245635563763">"ನೋಟಿಫಿಕೇಶನ್ ರ‍್ಯಾಂಕರ್ ಸೇವೆ"</string>
     <string name="vpn_title" msgid="5906991595291514182">"VPN ಸಕ್ರಿಯಗೊಂಡಿದೆ"</string>
     <string name="vpn_title_long" msgid="6834144390504619998">"<xliff:g id="APP">%s</xliff:g> ಮೂಲಕ VPN ಸಕ್ರಿಯಗೊಂಡಿದೆ"</string>
     <string name="vpn_text" msgid="2275388920267251078">"ನೆಟ್‍ವರ್ಕ್ ನಿರ್ವಹಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
@@ -1680,11 +1686,9 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="5270861875006378092">"ನಿಮ್ಮ ಅನ್‍‍ಲಾಕ್ ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ನೀವು <xliff:g id="NUMBER_0">%1$d</xliff:g> ಬಾರಿ ತಪ್ಪಾಗಿ ಡ್ರಾ ಮಾಡಿರುವಿರಿ. <xliff:g id="NUMBER_1">%2$d</xliff:g> ಹೆಚ್ಚಿನ ವಿಫಲ ಪ್ರಯತ್ನಗಳ ಬಳಿಕ, ನಿಮ್ಮ ಇಮೇಲ್ ಖಾತೆಯನ್ನು ಬಳಸಿಕೊಂಡು ನಿಮ್ಮ ಫೋನ್ ಅನ್‌ಲಾಕ್ ಮಾಡುವಂತೆ ನಿಮ್ಮಲ್ಲಿ ಕೇಳಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"ತೆಗೆದುಹಾಕು"</string>
-    <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"ವಾಲ್ಯೂಮ್‌ ಅನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾದ ಮಟ್ಟಕ್ಕಿಂತಲೂ ಹೆಚ್ಚು ಮಾಡುವುದೇ?\n\nದೀರ್ಘ ಅವಧಿಯವರೆಗೆ ಹೆಚ್ಚಿನ ವಾಲ್ಯೂಮ್‌ನಲ್ಲಿ ಆಲಿಸುವುದರಿಂದ ನಿಮ್ಮ ಆಲಿಸುವಿಕೆ ಸಾಮರ್ಥ್ಯಕ್ಕೆ ಹಾನಿಯುಂಟು ಮಾಡಬಹುದು."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"ಎಚ್ಚರಿಕೆ,\nಒಬ್ಬ ವ್ಯಕ್ತಿ ಒಂದು ವಾರದಲ್ಲಿ ಹೆಡ್‌ಫೋನ್‌ಗಳ ಮೂಲಕ ಗಟ್ಟಿಯಾದ ವಾಲ್ಯೂಮ್‌ನಲ್ಲಿ ಸುರಕ್ಷಿತವಾಗಿ ಆಲಿಸಬಹುದಾದ ಮಿತಿಯನ್ನು ನೀವು ಮೀರಿದ್ದೀರಿ.\n\nಈ ಮಿತಿಯನ್ನು ಮೀರಿದರೆ ನಿಮ್ಮ ಆಲಿಸುವ ಸಾಮರ್ಥ್ಯಕ್ಕೆ ಶಾಶ್ವತ ಹಾನಿಯುಂಟಾಗುತ್ತದೆ."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"ಎಚ್ಚರಿಕೆ,\nಒಬ್ಬ ವ್ಯಕ್ತಿ ಒಂದು ವಾರದಲ್ಲಿ ಹೆಡ್‌ಫೋನ್‌ಗಳ ಮೂಲಕ ಸುರಕ್ಷಿತವಾಗಿ ಆಲಿಸಬಹುದಾದ ಗಟ್ಟಿಯಾದ ವಾಲ್ಯೂಮ್‌ನ 5 ಪಟ್ಟು ಮಿತಿಯನ್ನು ನೀವು ಮೀರಿದ್ದೀರಿ.\n\nನಿಮ್ಮ ಆಲಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ರಕ್ಷಿಸುವುದಕ್ಕಾಗಿ ವಾಲ್ಯೂಮ್ ಅನ್ನು ಕಡಿಮೆಗೊಳಿಸಲಾಗಿದೆ."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"ನೀವು ಪ್ರಸ್ತುತ ಆಲಿಸುತ್ತಿರುವ ವಾಲ್ಯೂಮ್‌ನಲ್ಲಿ ಮಾಧ್ಯಮವನ್ನು ಆಲಿಸುವುದನ್ನು ನೀವು ದೀರ್ಘಕಾಲ ಮುಂದುವರಿಸಿದರೆ, ನಿಮ್ಮ ಆಲಿಸುವ ಸಾಮರ್ಥ್ಯಕ್ಕೆ ಹಾನಿಯುಂಟಾಗಬಹುದು.\n\nಇದೇ ವಾಲ್ಯೂಮ್‌ನಲ್ಲಿ ದೀರ್ಘಕಾಲದವರೆಗೆ ಮಾಧ್ಯಮವನ್ನು ಪ್ಲೇ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಿದರೆ ನಿಮ್ಮ ಆಲಿಸುವ ಸಾಮರ್ಥ್ಯಕ್ಕೆ ಹಾನಿಯುಂಟಾಗಬಹುದು."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"ಎಚ್ಚರಿಕೆ,\nನೀವು ಪ್ರಸ್ತುತ ಅಸುರಕ್ಷಿತ ವಾಲ್ಯೂಮ್‌ನಲ್ಲಿ ಪ್ಲೇ ಆಗುತ್ತಿರುವ ಮಾಧ್ಯಮವನ್ನು ಆಲಿಸುತ್ತಿದ್ದೀರಿ.\n\nಇಷ್ಟು ಗಟ್ಟಿಯಾದ ವಾಲ್ಯೂಮ್‌ನಲ್ಲಿ ಆಲಿಸುವುದನ್ನು ಮುಂದುವರಿಸಿದರೆ, ನಿಮ್ಮ ಆಲಿಸುವ ಸಾಮರ್ಥ್ಯಕ್ಕೆ ಶಾಶ್ವತ ಹಾನಿಯುಂಟಾಗುತ್ತದೆ."</string>
+    <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"ವಾಲ್ಯೂಮ್‌ ಅನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾದ ಮಟ್ಟಕ್ಕಿಂತಲೂ ಹೆಚ್ಚು ಮಾಡಬೇಕೆ?\n\nದೀರ್ಘ ಅವಧಿಯವರೆಗೆ ಹೆಚ್ಚಿನ ವಾಲ್ಯೂಮ್‌ನಲ್ಲಿ ಆಲಿಸುವುದರಿಂದ ನಿಮ್ಮ ಆಲಿಸುವಿಕೆ ಸಾಮರ್ಥ್ಯಕ್ಕೆ ಹಾನಿಯುಂಟು ಮಾಡಬಹುದು."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"ಹೆಚ್ಚಿನ ವಾಲ್ಯೂಮ್‌ನಲ್ಲಿ ಆಲಿಸುವುದನ್ನು ಮುಂದುವರಿಸಬೇಕೇ?\n\nಹೆಡ್‌ಫೋನ್‌ನ ವಾಲ್ಯೂಮ್ ಶಿಫಾರಸು ಮಾಡಿದ್ದಕ್ಕಿಂತಲೂ ಹೆಚ್ಚಿನ ಸಮಯದವರೆಗೆ ಅಧಿಕವಾಗಿದ್ದು, ಇದರಿಂದ ನಿಮ್ಮ ಶ್ರವಣ ಶಕ್ತಿಗೆ ಹಾನಿಯಾಗಬಹುದು"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"ದೊಡ್ಡ ಧ್ವನಿ ಪತ್ತೆಯಾಗಿದೆ\n\nಹೆಡ್‌ಫೋನ್ ವಾಲ್ಯೂಮ್ ಶಿಫಾರಸು ಮಾಡಿದ್ದಕ್ಕಿಂತಲೂ ಹೆಚ್ಚಾಗಿದ್ದು, ಇದರಿಂದ ನಿಮ್ಮ ಶ್ರವಣ ಶಕ್ತಿಗೆ ಹಾನಿಯಾಗಬಹುದು"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ಆ್ಯಕ್ಸೆಸಿಬಿಲಿಟಿ ಶಾರ್ಟ್‌ಕಟ್ ಬಳಸುವುದೇ?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"ಶಾರ್ಟ್‌ಕಟ್ ಆನ್ ಆಗಿರುವಾಗ, ಎರಡೂ ವಾಲ್ಯೂಮ್ ಬಟನ್‌ಗಳನ್ನು 3 ಸೆಕೆಂಡುಗಳ ಕಾಲ ಒತ್ತಿದರೆ ಆ್ಯಕ್ಸೆಸಿಬಿಲಿಟಿ ವೈಶಿಷ್ಟ್ಯವೊಂದು ಪ್ರಾರಂಭವಾಗುತ್ತದೆ."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"ಆ್ಯಕ್ಸೆಸಿಬಿಲಿಟಿ ವೈಶಿಷ್ಟ್ಯಗಳಿಗಾಗಿ ಶಾರ್ಟ್‌ಕಟ್ ಆನ್ ಮಾಡಬೇಕೇ?"</string>
@@ -1696,10 +1700,10 @@
     <string name="accessibility_shortcut_off" msgid="3651336255403648739">"ಆನ್ ಮಾಡಬೇಡಿ"</string>
     <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ಆನ್ ಆಗಿದೆ"</string>
     <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ಆಫ್ ಆಗಿದೆ"</string>
-    <string name="accessibility_enable_service_title" msgid="3931558336268541484">"ನಿಮ್ಮ ಸಾಧನದ ಸಂಪೂರ್ಣ ನಿಯಂತ್ರಣವನ್ನು ಹೊಂದಲು <xliff:g id="SERVICE">%1$s</xliff:g>ಗೆ ಅನುಮತಿಸಬೇಕೆ?"</string>
+    <string name="accessibility_enable_service_title" msgid="3931558336268541484">"ನಿಮ್ಮ ಸಾಧನದ ಸಂಪೂರ್ಣ ನಿಯಂತ್ರಣವನ್ನು ಹೊಂದಲು <xliff:g id="SERVICE">%1$s</xliff:g> ಗೆ ಅನುಮತಿಸಬೇಕೆ?"</string>
     <string name="accessibility_service_warning_description" msgid="291674995220940133">"ಆ್ಯಕ್ಸೆಸಿಬಿಲಿಟಿ ಅವಶ್ಯಕತೆಗಳ ಕುರಿತು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುವ ಆ್ಯಪ್‌ಗಳಿಗೆ ಸಂಪೂರ್ಣ ನಿಯಂತ್ರಣ ನೀಡುವುದು ಸೂಕ್ತವಾಗಿರುತ್ತದೆ, ಆದರೆ ಬಹುತೇಕ ಆ್ಯಪ್‌ಗಳಿಗೆ ಇದು ಸೂಕ್ತವಲ್ಲ."</string>
     <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"ಸ್ಕ್ರೀನ್ ವೀಕ್ಷಿಸಿ ಮತ್ತು ನಿಯಂತ್ರಿಸಿ"</string>
-    <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"ಇದು ಪರದೆಯ ಮೇಲಿನ ಎಲ್ಲಾ ವಿಷಯವನ್ನು ಓದಬಹುದು ಮತ್ತು ಇತರ ಆ್ಯಪ್‌ಗಳ ಮೇಲೆ ವಿಷಯವನ್ನು ಪ್ರದರ್ಶಿಸಬಹುದು."</string>
+    <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"ಇದು ಪರದೆಯ ಮೇಲಿನ ಎಲ್ಲಾ ಕಂಟೆಂಟ್‌ ಅನ್ನು ಓದಬಹುದು ಮತ್ತು ಇತರ ಆ್ಯಪ್‌ಗಳ ಮೇಲೆ ಕಂಟೆಂಟ್‌ ಅನ್ನು ಪ್ರದರ್ಶಿಸಬಹುದು."</string>
     <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"ಕ್ರಿಯೆಗಳನ್ನು ವೀಕ್ಷಿಸಿ ಮತ್ತು ನಿರ್ವಹಿಸಿ"</string>
     <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"ಇದು ಆ್ಯಪ್ ಅಥವಾ ಹಾರ್ಡ್‌ವೇರ್ ಸೆನ್ಸರ್‌ನ ಜೊತೆಗಿನ ನಿಮ್ಮ ಸಂವಹನಗಳನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಬಹುದು, ಮತ್ತು ನಿಮ್ಮ ಪರವಾಗಿ ಆ್ಯಪ್‌ಗಳ ಜೊತೆ ಸಂವಹನ ನಡೆಸಬಹುದು."</string>
     <string name="accessibility_dialog_button_allow" msgid="2092558122987144530">"ಅನುಮತಿಸಿ"</string>
@@ -1851,8 +1855,8 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"ನಿರ್ಗಮಿಸಲು, ಮೇಲಿನಿಂದ ಕೆಳಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"ತಿಳಿಯಿತು"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"ಅತ್ಯುತ್ತಮ ವೀಕ್ಷಣೆಗಾಗಿ ತಿರುಗಿಸಿ"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"ಅತ್ಯುತ್ತಮ ವೀಕ್ಷಣೆಗಾಗಿ ಸ್ಪ್ಲಿಟ್‌ ಸ್ಕ್ರೀನ್‌ನಿಂದ ನಿರ್ಗಮಿಸಿ"</string>
-    <string name="done_label" msgid="7283767013231718521">"ಮುಗಿದಿದೆ"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"ಅತ್ಯುತ್ತಮ ವೀಕ್ಷಣೆಗಾಗಿ <xliff:g id="NAME">%s</xliff:g> ಅನ್ನು ಪೂರ್ಣ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ತೆರೆಯಿರಿ"</string>
+    <string name="done_label" msgid="7283767013231718521">"ಆಯಿತು"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"ಗಂಟೆಗಳ ವೃತ್ತಾಕಾರ ಸ್ಲೈಡರ್"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"ನಿಮಿಷಗಳ ವೃತ್ತಾಕಾರ ಸ್ಲೈಡರ್"</string>
     <string name="select_hours" msgid="5982889657313147347">"ಗಂಟೆಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
@@ -1933,7 +1937,7 @@
     <string name="default_notification_channel_label" msgid="3697928973567217330">"ವರ್ಗೀಕರಿಸದಿರುವುದು"</string>
     <string name="importance_from_user" msgid="2782756722448800447">"ನೀವು ಈ ಅಧಿಸೂಚನೆಗಳ ಪ್ರಾಮುಖ್ಯತೆಯನ್ನು ಹೊಂದಿಸಿರುವಿರಿ."</string>
     <string name="importance_from_person" msgid="4235804979664465383">"ಜನರು ತೊಡಗಿಕೊಂಡಿರುವ ಕಾರಣ ಇದು ಅತ್ಯಂತ ಪ್ರಮುಖವಾಗಿದೆ."</string>
-    <string name="notification_history_title_placeholder" msgid="7748630986182249599">"ಕಸ್ಟಮ್ ಆ್ಯಪ್ ಅಧಿಸೂಚನೆ"</string>
+    <string name="notification_history_title_placeholder" msgid="7748630986182249599">"ಕಸ್ಟಮ್ ಆ್ಯಪ್ ನೋಟಿಫಿಕೇಶನ್"</string>
     <string name="user_creation_account_exists" msgid="2239146360099708035">"<xliff:g id="ACCOUNT">%2$s</xliff:g> (ಈ ಖಾತೆಯ ಬಳಕೆದಾರರು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದ್ದಾರೆ) ಮೂಲಕ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ರಚಿಸಲು <xliff:g id="APP">%1$s</xliff:g> ಗೆ ಅನುಮತಿಸಬೇಕೆ ?"</string>
     <string name="user_creation_adding" msgid="7305185499667958364">"<xliff:g id="ACCOUNT">%2$s</xliff:g> ಮೂಲಕ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ರಚಿಸಲು <xliff:g id="APP">%1$s</xliff:g> ಗೆ ಅನುಮತಿಸುವುದೇ ?"</string>
     <string name="supervised_user_creation_label" msgid="6884904353827427515">"ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಿ"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"ಆ್ಯಪ್ ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಇದೀಗ ಲಭ್ಯವಿಲ್ಲ."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ಲಭ್ಯವಿಲ್ಲ"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"ಅನುಮತಿಯ ಅಗತ್ಯವಿದೆ"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"ಅನುಮತಿ ವಿನಂತಿಯನ್ನು ನಿಗ್ರಹಿಸಲಾಗಿದೆ"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"ಈ ಆ್ಯಪ್ ಹೆಚ್ಚುವರಿ ಅನುಮತಿಗಳಿಗಾಗಿ ವಿನಂತಿಸುತ್ತಿದೆ, ಆದರೆ ಸ್ಟ್ರೀಮಿಂಗ್ ಸೆಶನ್‌ನಲ್ಲಿ ಅನುಮತಿಗಳನ್ನು ನೀಡಲಾಗುವುದಿಲ್ಲ. ಮೊದಲು ನಿಮ್ಮ Android TV ಸಾಧನದಲ್ಲಿ ಅನುಮತಿಯನ್ನು ನೀಡಿ."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"ಈ ಆ್ಯಪ್ ಹೆಚ್ಚುವರಿ ಅನುಮತಿಗಳಿಗಾಗಿ ವಿನಂತಿಸುತ್ತಿದೆ, ಆದರೆ ಸ್ಟ್ರೀಮಿಂಗ್ ಸೆಶನ್‌ನಲ್ಲಿ ಅನುಮತಿಗಳನ್ನು ನೀಡಲಾಗುವುದಿಲ್ಲ. ಮೊದಲು ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ನಲ್ಲಿ ಅನುಮತಿ ನೀಡಿ."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"ಈ ಆ್ಯಪ್ ಹೆಚ್ಚುವರಿ ಅನುಮತಿಗಳಿಗಾಗಿ ವಿನಂತಿಸುತ್ತಿದೆ, ಆದರೆ ಸ್ಟ್ರೀಮಿಂಗ್ ಸೆಶನ್‌ನಲ್ಲಿ ಅನುಮತಿಗಳನ್ನು ನೀಡಲಾಗುವುದಿಲ್ಲ. ಮೊದಲು ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿ ಅನುಮತಿ ನೀಡಿ."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"ಈ ಆ್ಯಪ್ ಅನ್ನು Android ನ ಹಳೆಯ ಆವೃತ್ತಿಗಾಗಿ ರಚಿಸಲಾಗಿದೆ. ಇದು ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದೇ ಇರಬಹುದು ಮತ್ತು ಇತ್ತೀಚಿನ ಭದ್ರತೆ ಮತ್ತು ಗೌಪ್ಯತಾ ರಕ್ಷಣೆಗಳನ್ನು ಒಳಗೊಂಡಿರುವುದಿಲ್ಲ. ಅಪ್‌ಡೇಟ್‌ಗಾಗಿ ಪರಿಶೀಲಿಸಿ ಅಥವಾ ಆ್ಯಪ್ ಡೆವಲಪರ್ ಅವರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ಅಪ್‌ಡೇಟ್‌ಗಾಗಿ ಪರಿಶೀಲಿಸಿ"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"ಈ ಆ್ಯಪ್ Android ನ ಇತ್ತೀಚಿನ ಆವೃತ್ತಿಯ ಜೊತೆಗೆ ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ. ಅಪ್‌ಡೇಟ್‌ಗಾಗಿ ಪರಿಶೀಲಿಸಿ ಅಥವಾ ಆ್ಯಪ್ ಡೆವಲಪರ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ನೀವು ಹೊಸ ಸಂದೇಶಗಳನ್ನು ಹೊಂದಿರುವಿರಿ"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"ವೀಕ್ಷಿಸಲು SMS ಅಪ್ಲಿಕೇಶನ್ ತೆರೆಯಿರಿ"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"ಕೆಲವು ಕಾರ್ಯನಿರ್ವಹಣೆ ಸೀಮಿತವಾಗಿರಬಹುದು"</string>
@@ -2021,10 +2029,10 @@
     <string name="autofill_save_title_with_type" msgid="3002460014579799605">"<xliff:g id="TYPE">%1$s</xliff:g> ಅನ್ನು "<b>"<xliff:g id="LABEL">%2$s</xliff:g>"</b>" ನಲ್ಲಿ ಉಳಿಸುವುದೇ?"</string>
     <string name="autofill_save_title_with_2types" msgid="3783270967447869241">"<xliff:g id="TYPE_0">%1$s</xliff:g> ಮತ್ತು <xliff:g id="TYPE_1">%2$s</xliff:g> ಅನ್ನು "<b>"<xliff:g id="LABEL">%3$s</xliff:g>"</b>" ನಲ್ಲಿ ಉಳಿಸುವುದೇ?"</string>
     <string name="autofill_save_title_with_3types" msgid="6598228952100102578">"<xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> ಮತ್ತು <xliff:g id="TYPE_2">%3$s</xliff:g> ಅನ್ನು "<b>"<xliff:g id="LABEL">%4$s</xliff:g>"</b>" ನಲ್ಲಿ ಉಳಿಸುವುದೇ?"</string>
-    <string name="autofill_update_title" msgid="3630695947047069136"><b>"<xliff:g id="LABEL">%1$s</xliff:g>"</b>" ನಲ್ಲಿ ಅಪ್‌ಡೇಟ್ ಮಾಡುವುದೇ?"</string>
-    <string name="autofill_update_title_with_type" msgid="5264152633488495704">"<xliff:g id="TYPE">%1$s</xliff:g> ಅನ್ನು "<b>"<xliff:g id="LABEL">%2$s</xliff:g>"</b>" ನಲ್ಲಿ ಅಪ್‌ಡೇಟ್ ಮಾಡುವುದೇ?"</string>
-    <string name="autofill_update_title_with_2types" msgid="1797514386321086273">"<xliff:g id="TYPE_0">%1$s</xliff:g> ಮತ್ತು <xliff:g id="TYPE_1">%2$s</xliff:g> ಅನ್ನು "<b>"<xliff:g id="LABEL">%3$s</xliff:g>"</b>" ನಲ್ಲಿ ಅಪ್‌ಡೇಟ್ ಮಾಡುವುದೇ?"</string>
-    <string name="autofill_update_title_with_3types" msgid="1312232153076212291">"ಈ ಮುಂದಿನ ಐಟಂಗಳನ್ನು "<b>"<xliff:g id="LABEL">%4$s</xliff:g>"</b>" ನಲ್ಲಿ ಅಪ್‌ಡೇಟ್ ಮಾಡುವುದೇ: <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> ಮತ್ತು <xliff:g id="TYPE_2">%3$s</xliff:g> ?"</string>
+    <string name="autofill_update_title" msgid="3630695947047069136"><b>"<xliff:g id="LABEL">%1$s</xliff:g>"</b>" ನಲ್ಲಿ ಅಪ್‌ಡೇಟ್ ಮಾಡಬೇಕೆ?"</string>
+    <string name="autofill_update_title_with_type" msgid="5264152633488495704">"<xliff:g id="TYPE">%1$s</xliff:g> ಅನ್ನು "<b>"<xliff:g id="LABEL">%2$s</xliff:g>"</b>" ನಲ್ಲಿ ಅಪ್‌ಡೇಟ್ ಮಾಡಬೇಕೆ?"</string>
+    <string name="autofill_update_title_with_2types" msgid="1797514386321086273">"<xliff:g id="TYPE_0">%1$s</xliff:g> ಮತ್ತು <xliff:g id="TYPE_1">%2$s</xliff:g> ಅನ್ನು "<b>"<xliff:g id="LABEL">%3$s</xliff:g>"</b>" ನಲ್ಲಿ ಅಪ್‌ಡೇಟ್ ಮಾಡಬೇಕೆ?"</string>
+    <string name="autofill_update_title_with_3types" msgid="1312232153076212291">"ಈ ಮುಂದಿನ ಐಟಂಗಳನ್ನು "<b>"<xliff:g id="LABEL">%4$s</xliff:g>"</b>" ನಲ್ಲಿ ಅಪ್‌ಡೇಟ್ ಮಾಡಬೇಕೆ: <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> ಮತ್ತು <xliff:g id="TYPE_2">%3$s</xliff:g> ?"</string>
     <string name="autofill_save_yes" msgid="8035743017382012850">"ಉಳಿಸಿ"</string>
     <string name="autofill_save_no" msgid="9212826374207023544">"ಬೇಡ"</string>
     <string name="autofill_save_notnow" msgid="2853932672029024195">"ಸದ್ಯಕ್ಕೆ ಬೇಡ"</string>
@@ -2073,7 +2081,7 @@
     <string name="zen_upgrade_notification_visd_content" msgid="3683314609114134946">"ಇನ್ನಷ್ಟು ತಿಳಿಯಲು ಮತ್ತು ಬದಲಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
     <string name="zen_upgrade_notification_title" msgid="8198167698095298717">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಬದಲಾಗಿದೆ"</string>
     <string name="zen_upgrade_notification_content" msgid="5228458567180124005">"ಏನನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ಪರೀಕ್ಷಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
-    <string name="review_notification_settings_title" msgid="5102557424459810820">"ಅಧಿಸೂಚನೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ"</string>
+    <string name="review_notification_settings_title" msgid="5102557424459810820">"ನೋಟಿಫಿಕೇಶನ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ"</string>
     <string name="review_notification_settings_text" msgid="5916244866751849279">"Android 13 ನಿಂದ ಪ್ರಾರಂಭಿಸಿ, ನೀವು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುವ ಆ್ಯಪ್‌ಗಳಿಗೆ, ಅಧಿಸೂಚನೆಗಳನ್ನು ಕಳುಹಿಸಲು ನಿಮ್ಮ ಅನುಮತಿಯ ಅಗತ್ಯವಿದೆ. ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಆ್ಯಪ್‌ಗಳಿಗಾಗಿ ಈ ಅನುಮತಿಯನ್ನು ಬದಲಾಯಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
     <string name="review_notification_settings_remind_me_action" msgid="1081081018678480907">"ನಂತರ ರಿಮೈಂಡ್ ಮಾಡಿ"</string>
     <string name="review_notification_settings_dismiss" msgid="4160916504616428294">"ವಜಾಗೊಳಿಸಿ"</string>
@@ -2092,8 +2100,8 @@
     <string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"ಸರಿ"</string>
     <string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"ಆಫ್ ಮಾಡಿ"</string>
     <string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ"</string>
-    <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"ವರ್ಧಿತ ಅಧಿಸೂಚನೆಗಳು Android 12 ರಲ್ಲಿ Android ಅಡಾಪ್ಟಿವ್ ಅಧಿಸೂಚನೆಗಳನ್ನು ಬದಲಾಯಿಸಿವೆ. ಈ ವೈಶಿಷ್ಟ್ಯವು ಸೂಚಿಸಿದ ಕ್ರಿಯೆಗಳು ಮತ್ತು ಪ್ರತ್ಯುತ್ತರಗಳನ್ನು ತೋರಿಸುತ್ತದೆ ಮತ್ತು ನಿಮ್ಮ ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಯೋಜಿಸುತ್ತದೆ.\n\nವರ್ಧಿತ ಅಧಿಸೂಚನೆಗಳು ಸಂಪರ್ಕ ಹೆಸರುಗಳು ಮತ್ತು ಸಂದೇಶಗಳಂತಹ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಂತೆ ಎಲ್ಲಾ ಅಧಿಸೂಚನೆ ವಿಷಯವನ್ನು ಪ್ರವೇಶಿಸಬಹುದು. ಈ ವೈಶಿಷ್ಟ್ಯವು ಫೋನ್ ಕರೆಗಳಿಗೆ ಉತ್ತರಿಸುವುದು ಮತ್ತು \'ಅಡಚಣೆ ಮಾಡಬೇಡಿ\' ಅನ್ನು ನಿಯಂತ್ರಿಸುವಂತಹ ಅಧಿಸೂಚನೆಗಳನ್ನು ವಜಾಗೊಳಿಸಬಹುದು ಅಥವಾ ಪ್ರತಿಕ್ರಿಯಿಸಬಹುದು."</string>
-    <string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"ದೈನಂದಿನ ಸ್ಥಿತಿಯ ಮಾಹಿತಿಯ ಅಧಿಸೂಚನೆ"</string>
+    <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"ವರ್ಧಿತ ನೋಟಿಫಿಕೇಶನ್‌ಗಳು Android 12 ರಲ್ಲಿ Android ಅಡಾಪ್ಟಿವ್ ನೋಟಿಫಿಕೇಶನ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಿವೆ. ಈ ವೈಶಿಷ್ಟ್ಯವು ಸೂಚಿಸಿದ ಕ್ರಿಯೆಗಳು ಮತ್ತು ಪ್ರತ್ಯುತ್ತರಗಳನ್ನು ತೋರಿಸುತ್ತದೆ ಮತ್ತು ನಿಮ್ಮ ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಯೋಜಿಸುತ್ತದೆ.\n\nವರ್ಧಿತ ನೋಟಿಫಿಕೇಶನ್‌ಗಳು ಸಂಪರ್ಕ ಹೆಸರುಗಳು ಮತ್ತು ಸಂದೇಶಗಳಂತಹ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಂತೆ ಎಲ್ಲಾ ಅಧಿಸೂಚನೆ ವಿಷಯವನ್ನು ಪ್ರವೇಶಿಸಬಹುದು. ಈ ವೈಶಿಷ್ಟ್ಯವು ಫೋನ್ ಕರೆಗಳಿಗೆ ಉತ್ತರಿಸುವುದು ಮತ್ತು \'ಅಡಚಣೆ ಮಾಡಬೇಡಿ\' ಅನ್ನು ನಿಯಂತ್ರಿಸುವಂತಹ ನೋಟಿಫಿಕೇಶನ್‌ಗಳನ್ನು ವಜಾಗೊಳಿಸಬಹುದು ಅಥವಾ ಪ್ರತಿಕ್ರಿಯಿಸಬಹುದು."</string>
+    <string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"ದೈನಂದಿನ ಸ್ಥಿತಿಯ ಮಾಹಿತಿಯ ನೋಟಿಫಿಕೇಶನ್"</string>
     <string name="dynamic_mode_notification_title" msgid="1388718452788985481">"ಬ್ಯಾಟರಿ ಸೇವರ್ ಅನ್ನು ಆನ್ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯನ್ನು ವಿಸ್ತರಿಸಲು ಬ್ಯಾಟರಿ ಬಳಕೆಯನ್ನು ಕಡಿಮೆ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
     <string name="battery_saver_notification_channel_name" msgid="3918243458067916913">"ಬ್ಯಾಟರಿ ಸೇವರ್"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್‌ಗಳ ಈ ವಿಷಯವನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ವೈಯಕ್ತಿಕ ಆ್ಯಪ್‌ಗಳ ಮೂಲಕ ಈ ವಿಷಯವನ್ನು ಹಂಚಿಕೊಳ್ಳಲಾಗುವುದಿಲ್ಲ"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ವೈಯಕ್ತಿಕ ಆ್ಯಪ್‌ಗಳ ಮೂಲಕ ಈ ವಿಷಯವನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಪ್ರೊಫೈಲ್ ಅನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"ಆನ್‌‌‌ ಮಾಡಲು ಟ್ಯಾಪ್‌ ಮಾಡಿ"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್‌ಗಳನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"ವಿರಾಮವನ್ನು ರದ್ದುಗೊಳಿಸಿ"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ಯಾವುದೇ ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್‌ಗಳಿಲ್ಲ"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ಯಾವುದೇ ವೈಯಕ್ತಿಕ ಆ್ಯಪ್‌ಗಳಿಲ್ಲ"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"ವರ್ಕ್‌ ಪ್ರೊಫೈಲ್ ಆದ <xliff:g id="APP">%s</xliff:g> ಆ್ಯಪ್‌ನಲ್ಲಿ ತೆರೆಯಬೇಕೆ?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"ವೈಯಕ್ತಿಕ <xliff:g id="APP">%s</xliff:g> ಆ್ಯಪ್‌ನಲ್ಲಿ ತೆರೆಯಬೇಕೆ?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"ವೈಯಕ್ತಿಕ <xliff:g id="APP">%s</xliff:g> ಆ್ಯಪ್‌ನಲ್ಲಿ ತೆರೆಯಬೇಕೆ?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್‌ನಿಂದ ಕರೆ ಮಾಡಬೇಕೇ?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್‌ಗೆ ಬದಲಿಸಬೇಕೇ?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್‌ಗಳಿಂದ ಮಾತ್ರ ಕರೆಗಳನ್ನು ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್‌ಗಳಿಂದ ಮಾತ್ರ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ವೈಯಕ್ತಿಕ ಬ್ರೌಸರ್ ಬಳಸಿ"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"ಉದ್ಯೋಗ ಬ್ರೌಸರ್ ಬಳಸಿ"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"ಕರೆ ಮಾಡಿ"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"ಬದಲಿಸಿ"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ನೆಟ್‌ವರ್ಕ್‌ ಅನ್‌ಲಾಕ್‌ ಮಾಡುವ ಪಿನ್‌"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM ನೆಟ್‌ವರ್ಕ್ ಸಬ್‌ಸೆಟ್‌ನ ಅನ್‌ಲಾಕ್‌ ಮಾಡುವ ಪಿನ್‌"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM ಕಾರ್ಪೊರೇಟ್ ಅನ್‌ಲಾಕ್‌ ಮಾಡುವ ಪಿನ್‌"</string>
@@ -2292,7 +2305,7 @@
     <string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"ಸೆನ್ಸರ್ ಗೌಪ್ಯತೆ"</string>
     <string name="splash_screen_view_icon_description" msgid="180638751260598187">"ಅಪ್ಲಿಕೇಶನ್‌ ಐಕಾನ್‌"</string>
     <string name="splash_screen_view_branding_description" msgid="7911129347402728216">"ಅಪ್ಲಿಕೇಶನ್ ಬ್ರ್ಯಾಂಡಿಂಗ್ ಚಿತ್ರ"</string>
-    <string name="view_and_control_notification_title" msgid="4300765399209912240">"ಪ್ರವೇಶ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ"</string>
+    <string name="view_and_control_notification_title" msgid="4300765399209912240">"ಆ್ಯಕ್ಸೆಸ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ"</string>
     <string name="view_and_control_notification_content" msgid="8003766498562604034">"<xliff:g id="SERVICE_NAME">%s</xliff:g> ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಅನ್ನು ವೀಕ್ಷಿಸಬಹುದು ಮತ್ತು ನಿಯಂತ್ರಿಸಬಹುದು. ಪರಿಶೀಲಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
     <string name="ui_translation_accessibility_translated_text" msgid="3197547218178944544">"<xliff:g id="MESSAGE">%1$s</xliff:g> ಅನ್ನು ಅನುವಾದಿಸಲಾಗಿದೆ."</string>
     <string name="ui_translation_accessibility_translation_finished" msgid="3057830947610088465">"<xliff:g id="FROM_LANGUAGE">%1$s</xliff:g> ಭಾಷೆಯಿಂದ <xliff:g id="TO_LANGUAGE">%2$s</xliff:g> ಭಾಷೆಗೆ ಸಂದೇಶವನ್ನು ಅನುವಾದಿಸಲಾಗಿದೆ."</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"ನಿಮ್ಮ <xliff:g id="DEVICE">%1$s</xliff:g> ಮೂಲಕ ಫೋನ್‌ನ ಕ್ಯಾಮರಾವನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"ನಿಮ್ಮ <xliff:g id="DEVICE">%1$s</xliff:g> ಮೂಲಕ ಟ್ಯಾಬ್ಲೆಟ್‌ನ ಕ್ಯಾಮರಾವನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"ಸ್ಟ್ರೀಮ್ ಮಾಡುವಾಗ ಇದನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಅದರ ಬದಲು ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿ ಪ್ರಯತ್ನಿಸಿ."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"ಸ್ಟ್ರೀಮ್ ಮಾಡುವಾಗ ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರವನ್ನು ವೀಕ್ಷಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
     <string name="system_locale_title" msgid="711882686834677268">"ಸಿಸ್ಟಂ ಡೀಫಾಲ್ಟ್"</string>
     <string name="default_card_name" msgid="9198284935962911468">"ಕಾರ್ಡ್ <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"ವಾಚ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸುವುದಕ್ಕಾಗಿ ಕಂಪ್ಯಾನಿಯನ್ ವಾಚ್ ಪ್ರೊಫೈಲ್ ಅನುಮತಿ"</string>
@@ -2317,11 +2331,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"ಮುನ್ನೆಲೆ ಸೇವೆಗಳನ್ನು ಹಿನ್ನೆಲೆಯಿಂದ ಪ್ರಾರಂಭಿಸಲು ಕಂಪ್ಯಾನಿಯನ್ ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"ಮೈಕ್ರೊಫೋನ್ ಲಭ್ಯವಿದೆ"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"ಮೈಕ್ರೊಫೋನ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"ಡ್ಯೂಯಲ್ ಸ್ಕ್ರೀನ್"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"ಡ್ಯೂಯಲ್ ಸ್ಕ್ರೀನ್ ಆನ್ ಆಗಿದೆ"</string>
-    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"ವಿಷಯವನ್ನು ತೋರಿಸಲು <xliff:g id="APP_NAME">%1$s</xliff:g> ಎರಡೂ ಡಿಸ್‌ಪ್ಲೇಗಳನ್ನು ಬಳಸುತ್ತದೆ"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen ಆನ್ ಆಗಿದೆ"</string>
+    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"ಕಂಟೆಂಟ್‌ ಅನ್ನು ತೋರಿಸಲು <xliff:g id="APP_NAME">%1$s</xliff:g> ಎರಡೂ ಡಿಸ್‌ಪ್ಲೇಗಳನ್ನು ಬಳಸುತ್ತಿದೆ"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"ಸಾಧನವು ತುಂಬಾ ಬಿಸಿಯಾಗಿದೆ"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"ನಿಮ್ಮ ಫೋನ್ ತುಂಬಾ ಬಿಸಿಯಾಗುವುದರಿಂದ ಡ್ಯೂಯಲ್ ಸ್ಕ್ರೀನ್ ಲಭ್ಯವಿಲ್ಲ"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"ನಿಮ್ಮ ಫೋನ್ ತುಂಬಾ ಬಿಸಿಯಾಗುವುದರಿಂದ Dual Screen ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"ಬ್ಯಾಟರಿ ಸೇವರ್ ಆನ್ ಆಗಿರುವ ಕಾರಣ Dual Screen ಲಭ್ಯವಿಲ್ಲ. ನೀವು ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಇದನ್ನು ಆಫ್ ಮಾಡಬಹುದು."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಹೋಗಿ"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index d05e0cc..5b1dfd1 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android 시스템"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"개인 프로필로 전환"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"직장 프로필로 전환"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"개인 <xliff:g id="APP_NAME">%1$s</xliff:g> 앱으로 전환"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"직장 <xliff:g id="APP_NAME">%1$s</xliff:g> 앱으로 전환"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"연락처"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"연락처에 액세스"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"위치"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"앱이 진동을 제어할 수 있도록 허용합니다."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"앱이 진동 상태에 액세스하도록 허용합니다."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"전화번호 자동 연결"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"앱이 사용자의 조작 없이 전화번호로 전화를 걸 수 있도록 허용합니다. 이 경우 예상치 못한 통화 요금이 부과될 수 있습니다. 앱이 비상 전화를 걸도록 하는 권한은 주어지지 않습니다. 악성 앱이 사용자의 확인 없이 전화를 걸어 요금이 부과될 수 있습니다."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"사용자의 조작 없이도 앱에서 전화번호로 전화를 걸 수 있도록 허용합니다. 이 권한을 사용하면 예상치 못한 요금이나 통화가 발생할 수 있습니다. 앱에서 비상 전화를 걸 수는 없습니다. 악성 앱에서 내 확인 없이 전화를 걸거나 수신 전화가 자동으로 다른 번호로 착신 전환되도록 이동통신사 코드를 입력하여 요금이 부과될 수 있습니다."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS 통화 서비스에 접근"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"앱이 IMS 서비스를 사용하여 자동으로 전화를 걸 수 있도록 허용합니다."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"휴대전화 상태 및 ID 읽기"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"앱이 등록된 AID와 경로 목적지 같은 기본 NFC 결제 서비스 정보를 확인하도록 허용합니다."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"NFC(Near Field Communication) 제어"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"앱이 NFC(근거리 무선 통신) 태그, 카드 및 리더와 통신할 수 있도록 허용합니다."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"보안 요소 트랜잭션 이벤트"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"앱이 보안 요소에서 발생하는 트랜잭션에 관한 정보를 받도록 허용합니다."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"화면 잠금 사용 중지"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"앱이 키 잠금 및 관련 비밀번호 보안을 사용중지할 수 있도록 허용합니다. 예를 들어, 휴대전화가 수신전화를 받을 때 키 잠금을 사용중지했다가 통화가 끝나면 키 잠금을 다시 사용할 수 있습니다."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"화면 잠금 복잡도 요청"</string>
@@ -614,26 +618,29 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"생체 인식 또는 화면 잠금을 사용"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"본인 확인"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"생체 인식을 사용하여 계속하세요"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"계속하려면 지문을 인증하세요"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"계속하려면 얼굴로 인증하세요"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"계속하려면 생체 인식이나 화면 잠금을 사용하세요"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"생체 인식 하드웨어를 사용할 수 없음"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"인증이 취소되었습니다."</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"인식할 수 없음"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"얼굴을 인식할 수 없습니다."</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"인증이 취소되었습니다."</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN, 패턴, 비밀번호가 설정되지 않음"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"인증 오류"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"화면 잠금 사용"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"계속하려면 화면 잠금용 사용자 인증 정보를 입력하세요"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"센서 위에 손가락을 좀 더 오래 올려놓으세요."</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"센서를 세게 누르세요"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"지문을 인식할 수 없습니다. 다시 시도해 주세요."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"지문 센서를 닦은 후 다시 시도해 보세요."</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"센서를 닦은 후 다시 시도해 보세요."</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"센서 위에 손가락을 좀 더 오래 올려놓으세요."</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"센서를 세게 누르세요"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"손가락을 너무 느리게 움직였습니다. 다시 시도해 주세요."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"다른 지문으로 시도"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"너무 밝음"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"전원 누름이 감지되었습니다."</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"조정 시도"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"지문이 인식될 때마다 손가락을 조금씩 이동하세요"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"지문이 인식될 때마다 손가락의 위치를 조금씩 바꾸세요"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"지문이 인식되지 않았습니다."</string>
@@ -676,23 +683,23 @@
     <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"수리업체에 방문하세요."</string>
     <string name="face_acquired_insufficient" msgid="6889245852748492218">"얼굴 모델을 만들 수 없습니다. 다시 시도해 주세요."</string>
     <string name="face_acquired_too_bright" msgid="8070756048978079164">"너무 밝습니다. 조명 밝기를 조금 낮춰보세요."</string>
-    <string name="face_acquired_too_dark" msgid="8539853432479385326">"조명이 부족합니다."</string>
+    <string name="face_acquired_too_dark" msgid="8539853432479385326">"조명이 부족합니다"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"휴대전화를 얼굴에서 더 멀리 떨어뜨려 주세요."</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"휴대전화를 얼굴에 더 가까이 가져와 주세요."</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"휴대전화를 위로 이동하세요"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"휴대전화를 아래로 이동하세요"</string>
-    <string name="face_acquired_too_right" msgid="6245286514593540859">"휴대전화를 왼쪽으로 이동하세요"</string>
-    <string name="face_acquired_too_left" msgid="9201762240918405486">"휴대전화를 오른쪽으로 이동하세요"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"휴대전화를 위쪽으로 움직이세요"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"휴대전화를 아래쪽으로 움직이세요"</string>
+    <string name="face_acquired_too_right" msgid="6245286514593540859">"휴대전화를 왼쪽으로 움직이세요"</string>
+    <string name="face_acquired_too_left" msgid="9201762240918405486">"휴대전화를 오른쪽으로 움직이세요"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"기기에서 더 똑바로 바라보세요."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"얼굴이 보이지 않습니다. 눈높이에 맞춰 휴대전화를 들어 주세요."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"얼굴이 보이지 않습니다. 눈높이에 맞춰 휴대전화를 들어 주세요"</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"너무 많이 움직였습니다. 휴대전화를 흔들리지 않게 잡으세요."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"얼굴을 다시 등록해 주세요."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"얼굴을 인식할 수 없습니다. 다시 시도해 주세요."</string>
     <string name="face_acquired_too_similar" msgid="8882920552674125694">"얼굴의 위치를 조금 변경해 주세요."</string>
-    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"휴대전화를 좀 더\\n똑바로 바라봐 주세요."</string>
-    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"휴대전화를 좀 더\\n똑바로 바라봐 주세요."</string>
-    <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"휴대전화를 좀 더\\n똑바로 바라봐 주세요."</string>
-    <string name="face_acquired_obscured" msgid="4917643294953326639">"얼굴이 가려지지 않도록 해 주세요."</string>
+    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"휴대전화를 좀 더 정면에서 바라보세요."</string>
+    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"휴대전화를 좀 더 정면에서 바라보세요."</string>
+    <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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"마스크가 감지되었습니다. 얼굴 전체가 보여야 합니다"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"얼굴을 확인할 수 없습니다. 하드웨어를 사용할 수 없습니다."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"얼굴 인식 작업이 취소되었습니다."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"사용자가 얼굴 인식 잠금 해제를 취소했습니다."</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"시도 횟수가 너무 많습니다. 나중에 다시 시도하세요."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"시도 횟수가 너무 많습니다. 얼굴 인식 잠금 해제를 사용할 수 없습니다."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"시도 횟수가 너무 많습니다. 화면 잠금을 대신 사용하세요."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"얼굴을 확인할 수 없습니다. 다시 시도하세요."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"얼굴 인식 잠금 해제를 설정하지 않았습니다."</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"거부"</string>
     <string name="select_input_method" msgid="3971267998568587025">"입력 방법 선택"</string>
     <string name="show_ime" msgid="6406112007347443383">"물리적 키보드가 활성 상태인 경우 화면에 켜 둠"</string>
-    <string name="hardware" msgid="1800597768237606953">"가상 키보드 표시"</string>
+    <string name="hardware" msgid="3611039921284836033">"터치 키보드 사용"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> 설정"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"실제 키보드 설정"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"탭하여 언어와 레이아웃을 선택하세요."</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"삭제"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"권장 수준 이상으로 볼륨을 높이시겠습니까?\n\n높은 볼륨으로 장시간 청취하면 청력에 손상이 올 수 있습니다."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"경고:\n1주일 동안 헤드폰을 통해 안전하게 들을 수 있는 큰 소리 신호량을 초과했습니다.\n\n이 한도를 초과하면 청력이 영구적으로 손상됩니다."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"경고:\n1주일 동안 헤드폰을 통해 안전하게 들을 수 있는 큰 소리 신호량을 5배 초과했습니다.\n\n청력을 보호하기 위해 볼륨을 낮췄습니다."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"지금과 같은 수준으로 오랫동안 미디어를 청취할 경우 청력 손상이 발생할 수 있습니다.\n\n지금과 같은 수준으로 장기적으로 계속 들으면 청력이 손상될 수 있습니다."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"경고:\n현재 안전하지 않은 수준으로 크게 콘텐츠를 재생하여 듣고 있습니다.\n\n지금과 같은 수준으로 계속해서 들으면 청력이 영구적으로 손상됩니다."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"계속해서 높은 볼륨으로 들으시겠습니까?\n\n헤드폰 볼륨이 권장 시간보다 오랫동안 높은 상태였으며 이로 인해 청력 손상이 발생할 수 있습니다."</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"큰 소리가 감지됨\n\n헤드폰 볼륨이 권장 시간보다 오랫동안 높은 상태였으며 이로 인해 청력 손상이 발생할 수 있습니다."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"접근성 단축키를 사용하시겠습니까?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"단축키가 사용 설정된 경우 볼륨 버튼 두 개를 동시에 3초간 누르면 접근성 기능이 시작됩니다."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"접근성 기능 바로가기를 사용 설정하시겠습니까?"</string>
@@ -1716,7 +1720,7 @@
     <string name="color_correction_feature_name" msgid="7975133554160979214">"색상 보정"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"한 손 모드"</string>
     <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"더 어둡게"</string>
-    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"보청기"</string>
+    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"청각 보조 기기"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"볼륨 키를 길게 눌렀습니다. <xliff:g id="SERVICE_NAME">%1$s</xliff:g>이(가) 사용 설정되었습니다."</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"볼륨 키를 길게 눌렀습니다. <xliff:g id="SERVICE_NAME">%1$s</xliff:g>이(가) 사용 중지되었습니다."</string>
     <string name="accessibility_shortcut_spoken_feedback" msgid="3760999147597564314">"볼륨 키에서 손을 뗍니다. <xliff:g id="SERVICE_NAME">%1$s</xliff:g>을 켜려면 볼륨 키 2개를 3초 동안 길게 누르세요."</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"종료하려면 위에서 아래로 스와이프합니다."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"확인"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"카메라 미리보기 화면이 잘 보이도록 회전하세요."</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"카메라 미리보기 화면이 잘 보이도록 화면 분할을 종료하세요."</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"화면이 더 잘 보이도록 <xliff:g id="NAME">%s</xliff:g>을(를) 전체 화면에서 여세요."</string>
     <string name="done_label" msgid="7283767013231718521">"완료"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"시간 원형 슬라이더"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"분 원형 슬라이더"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"앱을 사용할 수 없습니다"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"현재 <xliff:g id="APP_NAME">%1$s</xliff:g> 앱을 사용할 수 없습니다."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> 사용할 수 없음"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"권한이 필요함"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"권한 요청 거부됨"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"앱에서 추가 보안을 요청합니다. 그러나 스트리밍 세션에서는 권한을 부여할 수 없습니다. Android TV 기기에서 먼저 권한을 부여하세요."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"앱에서 추가 보안을 요청합니다. 그러나 스트리밍 세션에서는 권한을 부여할 수 없습니다. 태블릿에서 먼저 권한을 부여하세요."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"앱에서 추가 보안을 요청합니다. 그러나 스트리밍 세션에서는 권한을 부여할 수 없습니다. 휴대전화에서 먼저 권한을 부여하세요."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"이 앱은 Android 이전 버전에 맞게 설계되었습니다. 정상 동작하지 않을 수 있으며 최신 보안 및 개인 정보 보호 기능을 포함하지 않습니다. 업데이트를 확인하거나 앱 개발자에게 문의하세요."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"업데이트 확인"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"이 앱은 Android 최신 버전과 호환되지 않습니다. 업데이트를 확인하거나 앱 개발자에게 문의하세요."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"새 메시지 있음"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"SMS 앱을 열고 확인"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"일부 기능이 제한될 수 있음"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"이 콘텐츠는 직장 앱으로 열 수 없습니다."</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"이 콘텐츠는 개인 앱을 통해 공유할 수 없습니다."</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"이 콘텐츠는 개인 앱으로 열 수 없습니다."</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"직장 프로필이 일시중지됨"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"탭하여 사용 설정"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"직장 앱이 일시중지됨"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"일시중지 해제"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"직장 앱 없음"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"개인 앱 없음"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"직장 <xliff:g id="APP">%s</xliff:g> 앱을 여시겠습니까?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"개인 <xliff:g id="APP">%s</xliff:g> 앱에서 여시겠습니까?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"직장 <xliff:g id="APP">%s</xliff:g> 앱에서 여시겠습니까?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"직장 앱을 사용한 통화인가요?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"직장 앱으로 전환할까요?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"귀하의 조직에서 직장 앱을 사용한 통화만 허용합니다."</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"귀하의 조직에서 직장 앱을 사용한 메시지 전송만 허용합니다."</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"개인 브라우저 사용"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"직장 브라우저 사용"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"통화"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"전환"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM 네트워크 잠금 해제 PIN"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM 네트워크 하위 집합 잠금 해제 PIN"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM 회사 잠금 해제 PIN"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"사용자의 <xliff:g id="DEVICE">%1$s</xliff:g>에서 휴대전화 카메라에 액세스할 수 없습니다."</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"사용자의 <xliff:g id="DEVICE">%1$s</xliff:g>에서 태블릿 카메라에 액세스할 수 없습니다."</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"스트리밍 중에는 액세스할 수 없습니다. 대신 휴대전화에서 시도해 보세요."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"스트리밍 중에는 PIP 모드를 볼 수 없습니다."</string>
     <string name="system_locale_title" msgid="711882686834677268">"시스템 기본값"</string>
     <string name="default_card_name" msgid="9198284935962911468">"<xliff:g id="CARDNUMBER">%d</xliff:g> 카드"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"시계 관리를 위한 호환 시계 프로필 권한"</string>
@@ -2317,20 +2331,20 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"호환 앱이 백그라운드에서 포그라운드 서비스를 시작할 수 있게 허용합니다."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"마이크 사용 가능"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"마이크가 차단됨"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"듀얼 스크린"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"듀얼 스크린 켜짐"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen 켜짐"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 두 화면을 모두 사용하여 콘텐츠를 표시합니다."</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"기기 온도가 너무 높음"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"휴대전화 온도가 너무 높아지고 있으므로 듀얼 스크린을 사용할 수 없습니다."</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"휴대전화 온도가 너무 높아지고 있으므로 Dual Screen을 사용할 수 없습니다."</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen을 사용할 수 없음"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"절전 모드가 사용 설정되어 있어 Dual Screen을 사용할 수 없습니다. 설정에서 이 기능을 사용 중지할 수 있습니다."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"설정으로 이동"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"사용 중지"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g>에 설정 완료됨"</string>
-    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"키보드 레이아웃이 <xliff:g id="LAYOUT_1">%s</xliff:g>(으)로 설정됩니다. 변경하려면 탭하세요."</string>
-    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"키보드 레이아웃이 <xliff:g id="LAYOUT_1">%1$s</xliff:g> 및 <xliff:g id="LAYOUT_2">%2$s</xliff:g>(으)로 설정됩니다. 변경하려면 탭하세요."</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"키보드 레이아웃이 <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>(으)로 설정됩니다. 변경하려면 탭하세요."</string>
-    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"키보드 레이아웃이 <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>(으)로 설정됩니다. 변경하려면 탭하세요."</string>
+    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"키보드 레이아웃이 <xliff:g id="LAYOUT_1">%s</xliff:g>로 설정됩니다. 변경하려면 탭하세요."</string>
+    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"키보드 레이아웃이 <xliff:g id="LAYOUT_1">%1$s</xliff:g> 및 <xliff:g id="LAYOUT_2">%2$s</xliff:g>로 설정됩니다. 변경하려면 탭하세요."</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"키보드 레이아웃이 <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>로 설정됩니다. 변경하려면 탭하세요."</string>
+    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"키보드 레이아웃이 <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>로 설정됩니다. 변경하려면 탭하세요."</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"실제 키보드에 구성됨"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"키보드를 보려면 탭하세요."</string>
 </resources>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index 4aa019e..f7852d8 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -41,7 +41,7 @@
     <string name="badPin" msgid="888372071306274355">"Терилген эски PIN код туура эмес."</string>
     <string name="badPuk" msgid="4232069163733147376">"Терилген PUK код туура эмес."</string>
     <string name="mismatchPin" msgid="2929611853228707473">"Терилген PIN\'дер дал келбейт."</string>
-    <string name="invalidPin" msgid="7542498253319440408">"Узундугу 4төн 8ге чейинки сандан турган PIN-кодду териңиз."</string>
+    <string name="invalidPin" msgid="7542498253319440408">"Узундугу 4төн 8ге чейинки сандан турган PIN кодду териңиз."</string>
     <string name="invalidPuk" msgid="8831151490931907083">"Узундугу 8 же көбүрөөк сандан турган PUK-кодду териңиз."</string>
     <string name="needPuk" msgid="3503414069503752211">"SIM картаңыз PUK менен кулпуланган. Кулпусун ачуу үчүн PUK кодун териңиз."</string>
     <string name="needPuk2" msgid="3910763547447344963">"SIM картаны бөгөттөн чыгаруу үчүн PUK2 кодун териңиз."</string>
@@ -122,7 +122,7 @@
     <string name="roamingTextSearching" msgid="5323235489657753486">"Кызмат изделүүдө"</string>
     <string name="wfcRegErrorTitle" msgid="3193072971584858020">"Wi-Fi аркылуу чалуу функциясы жөндөлгөн жок"</string>
   <string-array name="wfcOperatorErrorAlertMessages">
-    <item msgid="468830943567116703">"Wi-Fi аркылуу чалууларды аткарып жана билдирүүлөрдү жөнөтүү үчүн адегенде байланыш операторуңуздан бул кызматты орнотушун сураныңыз. Андан соң, Жөндөөлөрдөн Wi-Fi чалууну кайра күйгүзүңүз. (Ката коду: <xliff:g id="CODE">%1$s</xliff:g>)"</item>
+    <item msgid="468830943567116703">"Wi-Fi аркылуу чалууларды аткарып жана билдирүүлөрдү жөнөтүү үчүн адегенде байланыш операторуңуздан бул кызматты орнотушун сураныңыз. Андан соң, Параметрлерден Wi-Fi чалууну кайра күйгүзүңүз. (Ката коду: <xliff:g id="CODE">%1$s</xliff:g>)"</item>
   </string-array>
   <string-array name="wfcOperatorErrorNotificationMessages">
     <item msgid="4795145070505729156">"Байланыш операторуңуз менен Wi-Fi аркылуу чалууну каттоодо ката кетти: <xliff:g id="CODE">%1$s</xliff:g>"</item>
@@ -255,7 +255,7 @@
     <string name="bugreport_option_interactive_title" msgid="7968287837902871289">"Интерактивдүү кабар"</string>
     <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"Ката жөнүндө кабардын абалын жана көйгөй тууралуу кошумча маалыматты көрсөтүү үчүн ушул функцияны колдонууну сунуштайбыз. Ката жөнүндө кабар жөнөтүлүп жатканда көп убакыт талап кылынбашы үчүн негизги бөлүмдөр гана көрүнөт."</string>
     <string name="bugreport_option_full_title" msgid="7681035745950045690">"Толук кабар берүү"</string>
-    <string name="bugreport_option_full_summary" msgid="1975130009258435885">"Түзмөгүңүз жооп бербей же өтө жай иштеп жатса, ошондой эле жөндөөлөрдүн бардык кабарлоо бөлүмдөрүн карап чыккыңыз келсе, ушул функцияны колдонуңуз. Баса, ката жөнүндө кошумча маалыматты көрсөтүп же скриншотторду тарта албайсыз."</string>
+    <string name="bugreport_option_full_summary" msgid="1975130009258435885">"Түзмөгүңүз жооп бербей же өтө жай иштеп жатса, ошондой эле параметрлердин бардык кабарлоо бөлүмдөрүн карап чыккыңыз келсе, ушул функцияны колдонуңуз. Баса, ката жөнүндө кошумча маалыматты көрсөтүп же скриншотторду тарта албайсыз."</string>
     <string name="bugreport_countdown" msgid="6418620521782120755">"{count,plural, =1{Мүчүлүштүк тууралуу кабар берүү үчүн # секунддан кийин скриншот тартылат.}other{Мүчүлүштүк тууралуу кабар берүү үчүн # секунддан кийин скриншот тартылат.}}"</string>
     <string name="bugreport_screenshot_success_toast" msgid="7986095104151473745">"Мүчүлүштүк тууралуу кабарлоо үчүн скриншот тартылды"</string>
     <string name="bugreport_screenshot_failure_toast" msgid="6736320861311294294">"Мүчүлүштүк тууралуу кабарлоо үчүн скриншот тартылган жок"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android системасы"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Жеке профилге которулуу"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Жумуш профилине которулуу"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Жеке <xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна которулуу"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Жумушка тиешелүү <xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна которулуу"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Байланыштар"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"байланыштарыңызды көрүүгө"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Жайгашкан жер"</string>
@@ -436,10 +438,10 @@
     <string name="permlab_getPackageSize" msgid="375391550792886641">"колдонмо сактагычынын мейкиндигин өлчөө"</string>
     <string name="permdesc_getPackageSize" msgid="742743530909966782">"Колдонмого өз кодун, дайындарын жана кэш өлчөмдөрүн түшүрүп алуу мүмкүнчүлүгүн берет"</string>
     <string name="permlab_writeSettings" msgid="8057285063719277394">"система тууралоолорун өзгөртүү"</string>
-    <string name="permdesc_writeSettings" msgid="8293047411196067188">"Колдонмого системанын коопсуздук параметрлеринин дайындарын өзгөртүү мүмкүнчүлүгүн берет. Кесепттүү колдонмолор тутумуңуздун конфигурациясын бузуп салышы мүмкүн."</string>
+    <string name="permdesc_writeSettings" msgid="8293047411196067188">"Колдонмого системанын коопсуздук параметрлеринин дайындарын өзгөртүү мүмкүнчүлүгүн берет. Кесепттүү колдонмолор системаңыздын конфигурациясын бузуп салышы мүмкүн."</string>
     <string name="permlab_receiveBootCompleted" msgid="6643339400247325379">"түзмөктү жандырганда иштеп баштоо"</string>
     <string name="permdesc_receiveBootCompleted" product="tablet" msgid="5565659082718177484">"Колдонмого тутум жүктөлүп бүтөөрү менен өзүн-өзү иштетүү мүмкүнчүлүгүн берет. Бул планшеттин ишке киргизилишин кыйла создуктуруп, планшеттин үзгүлтүксүз иштешин жайлатып салышы мүмкүн."</string>
-    <string name="permdesc_receiveBootCompleted" product="tv" msgid="4900842256047614307">"Тутум күйгүзүлөрү менен колдонмого өз алдынча иштеп баштоого уруксат берет. Ага байланыштуу Android TV түзмөгүңүз кечирээк күйгүзүлүп, ошондой эле колдонмо такай иштеп тургандыктан, түзмөк жайыраак иштеп калышы мүмкүн."</string>
+    <string name="permdesc_receiveBootCompleted" product="tv" msgid="4900842256047614307">"Система күйгүзүлөрү менен колдонмого өз алдынча иштеп баштоого уруксат берет. Ага байланыштуу Android TV түзмөгүңүз кечирээк күйгүзүлүп, ошондой эле колдонмо такай иштеп тургандыктан, түзмөк жайыраак иштеп калышы мүмкүн."</string>
     <string name="permdesc_receiveBootCompleted" product="default" msgid="7912677044558690092">"Колдонмого тутум жүктөлүп бүтөөрү менен өзүн-өзү иштетүү мүмкүнчүлүгүн берет. Бул телефондун ишке киргизилишин кыйла создуктуруп, телефондун үзгүлтүксүз иштешин жайлатып салышы мүмкүн."</string>
     <string name="permlab_broadcastSticky" msgid="4552241916400572230">"жабышчаак таркатманы жөнөтүү"</string>
     <string name="permdesc_broadcastSticky" product="tablet" msgid="5058486069846384013">"Колдонмого берүү токтогондон кийин улантыла берүүчү жабышкак берүүлөрдү жөнөтүү уруксатын берет. Муну ашыкча колдонуу, эстутумду өтө көп пайдаланууга алып келип, планшеттин жай же туруксуз иштөөсүнүнө себепкер болушу мүмкүн."</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Колдонмого дирилдегичти көзөмөлдөө мүмкүнчүлүгүн берет."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Колдонмого дирилдөө абалына кирүүгө уруксат берет."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"телефон номерлерине түз чалуу"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Колдонмого сиздин катышууңузсуз телефон номурларга чалуу уруксатын берет. Бул сиз күтпөгөн чыгымдарга же чалууларга алып келиши мүмкүн. Бул куткаруучулардын номурларына чалууга уруксат бербей тургандыгын эске алыңыз. Зыяндуу колдонмолор, сиздин ырастооңузсуз чалууларды аткарып, көп чыгымдарга себепкер болушу мүмкүн."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Колдонмого сиздин кийлигишүүңүзсүз телефон номерлерине чалуу мүмкүнчүлүгүн берет. Бул күтүлбөгөн төлөмдөргө же чалууларга алып келиши мүмкүн. Бул колдонмого кырсыктаганда жардамга келчү кызматтын номерине чалуу мүмкүнчүлүгүн бербейт. Зыянкеч колдонмолор сиздин ырастооңузсуз чалууларды аткарып, же байланыш операторлорунун коддорун терип чыгымдарга себепкер болушу мүмкүн. Бул кирүүчү чалууларды автоматтык түрдө башка номерге багыттайт."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS чалуу кызматына мүмкүнчүлүк алуу"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Колдонмого сизди катыштырбай туруп, IMS кызматынын жардамы менен, чалууларды жасоо мүмкүнчүлүгүн берет."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"телефондун абалын жана аныктыгын окуу"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Колдонмого катталган жардам же көздөлгөн жерге маршрут сыяктуу тандалган nfc төлөм кызматы жөнүндө маалыматты алууга уруксат берүү."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"Near Field Communication көзөмөлү"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Колдонмого Жакынкы аралыкта байланышуу (NFC) белгилери, карталары жана окугучтары менен байланышуу мүмкүнчүлүгүн берет."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Коргоочу элементтеги транзакция иш-чарасы"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Колдонмо Коргоочу элементте аткарылган транзакциялар жөнүндө маалымат ала алат."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"экранды бөгөттөөнү өчүрүү"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Колдонмого экрандын бөгөттөөчү жана ага байланыштуу сырсөз коргоосун өчүрүү уруксатын берет. Мисалы, чалуу келгенде экрандын бөгөтүн алып салат, чалуу бүткөндө кайрадан орнотот."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"экранды бөгөттөөнүн татаалдык деңгээлин суроо"</string>
@@ -610,14 +614,17 @@
     <string name="permdesc_imagesWrite" msgid="5195054463269193317">"Колдонмого сүрөт жыйнагыңызды өзгөртүүгө мүмкүнчүлүк берет."</string>
     <string name="permlab_mediaLocation" msgid="7368098373378598066">"медиа жыйнагыңыз сакталган жерлерди окуу"</string>
     <string name="permdesc_mediaLocation" msgid="597912899423578138">"Колдонмого медиа жыйнагыңыз сакталган жерлерди окууга мүмкүнчүлүк берет."</string>
-    <string name="biometric_app_setting_name" msgid="3339209978734534457">"Биометрикалык жөндөөлөрдү колдонуу"</string>
+    <string name="biometric_app_setting_name" msgid="3339209978734534457">"Биометрикалык параметрлерди колдонуу"</string>
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Биометрикалык жөндөөнү же экрандын кулпусун колдонуу"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Өзүңүздү ырастаңыз"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Улантуу үчүн биометрикалык жөндөөнү колдонуу"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Улантуу үчүн манжаңызды сканерге тийгизиңиз"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Улантуу үчүн жүзүңүздү көрсөтүңүз"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Улантуу үчүн биометрикалык маалыматты же экрандын кулпусун колдонуңуз"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Биометрикалык аппарат жеткиликсиз"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Аныктыгын текшерүү жокко чыгарылды"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Таанылган жок"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Жүз таанылган жок"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Аныктыгын текшерүү жокко чыгарылды"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN код, графикалык ачкыч же сырсөз коюлган жок"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Аутентификация катасы"</string>
@@ -633,7 +640,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Өтө жарык"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Кубат баскычы басылганы аныкталды"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Тууралап көрүңүз"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Манжаңыздын абалын ар жолкусунда бир аз өзгөртүп туруңуз"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Манжаңыздын абалын улам өзгөртүп коюңуз"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Манжа изи таанылган жок"</string>
@@ -643,7 +650,7 @@
     <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Жүздүн аныктыгы текшерилди, эми \"Ырастоону\" басыңыз"</string>
     <string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Манжа изинин аппараттык камсыздоосу жеткиликтүү эмес."</string>
     <string name="fingerprint_error_no_space" msgid="7285481581905967580">"Манжа изи жөндөлбөй жатат"</string>
-    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Манжа изин тууралоо убакыты бүтүп калды. Кайра аракет кылыңыз."</string>
+    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Манжа изин коюу убакыты бүтүп калды. Кайра аракет кылыңыз."</string>
     <string name="fingerprint_error_canceled" msgid="540026881380070750">"Манжа изи иш-аракети жокко чыгарылды."</string>
     <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Манжа изи операциясын колдонуучу жокко чыгарды."</string>
     <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Өтө көп жолу аракет кылдыңыз. Экранды кулпулоо функциясын колдонуңуз."</string>
@@ -666,7 +673,7 @@
     <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"Жүзүнөн таанып ачуу"</string>
     <string name="face_recalibrate_notification_title" msgid="2524791952735579082">"Жүзүнөн таанып ачуу функциясында маселе келип чыкты"</string>
     <string name="face_recalibrate_notification_content" msgid="3064513770251355594">"Жүзүңүздүн үлгүсүн өчүрүү үчүн басып, жаңы үлгүнү кошуңуз"</string>
-    <string name="face_setup_notification_title" msgid="8843461561970741790">"Жүзүнөн таанып ачууну тууралоо"</string>
+    <string name="face_setup_notification_title" msgid="8843461561970741790">"Жүзүнөн таанып ачууну коюу"</string>
     <string name="face_setup_notification_content" msgid="5463999831057751676">"Телефонуңузду карап туруп эле кулпусун ачып алыңыз"</string>
     <string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"Жүзүнөн таанып ачуу функциясын колдонуу үчүн Параметрлер &gt; Купуялык бөлүмүнө өтүп, "<b>"Камераны колдонууну"</b>" күйгүзүңүз"</string>
     <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Кулпусун ачуунун көбүрөөк жолдорун жөндөңүз"</string>
@@ -676,10 +683,10 @@
     <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Тейлөө кызматына кайрылыңыз."</string>
     <string name="face_acquired_insufficient" msgid="6889245852748492218">"Жүзүңүздүн үлгүсү түзүлгөн жок. Кайталаңыз."</string>
     <string name="face_acquired_too_bright" msgid="8070756048978079164">"Өтө жарык. Жарыктыкты азайтып көрүңүз."</string>
-    <string name="face_acquired_too_dark" msgid="8539853432479385326">"Жарык жетишсиз"</string>
+    <string name="face_acquired_too_dark" msgid="8539853432479385326">"Жарыгыраак жерге туруңуз"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Телефонду алыстатыңыз"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Телефонду жакындатыңыз"</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"Телефонду жогору жылдырыңыз"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"Телефонду өйдө жылдырыңыз"</string>
     <string name="face_acquired_too_low" msgid="4075391872960840081">"Телефонду ылдый жылдырыңыз"</string>
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Телефонду солго жылдырыңыз"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Телефонду оңго жылдырыңыз"</string>
@@ -709,11 +716,10 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Жүздүн аныктыгын текшерүү жокко чыгарылды."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Жүзүнөн таанып ачуу функциясын колдонуучу өчүрүп салды"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Өтө көп жолу аракет жасадыңыз. Бир аздан кийин кайталап көрүңүз."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Өтө көп жолу аракет кылдыңыз. \"Жүзүнөн таанып ачуу\" жеткиликсиз."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Өтө көп жолу аракет кылдыңыз. Эрканды кулпулоо функциясын колдонуңуз."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Жүз ырасталбай жатат. Кайталап көрүңүз."</string>
-    <string name="face_error_not_enrolled" msgid="1134739108536328412">"Жүзүнөн таанып ачуу функциясын жөндөй элексиз"</string>
+    <string name="face_error_not_enrolled" msgid="1134739108536328412">"Жүзүнөн таанып ачуу функциясын кое элексиз"</string>
     <string name="face_error_hw_not_present" msgid="7940978724978763011">"Жүзүнөн таанып ачуу функциясы бул түзмөктө иштебейт"</string>
     <string name="face_error_security_update_required" msgid="5076017208528750161">"Сенсор убактылуу өчүрүлгөн."</string>
     <string name="face_name_template" msgid="3877037340223318119">"Жүз <xliff:g id="FACEID">%d</xliff:g>"</string>
@@ -956,7 +962,7 @@
     <string name="keyguard_password_entry_touch_hint" msgid="4032288032993261520"><font size="17">"Сырсөздү терүү үчүн таптаңыз"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="2751130557661643482">"Кулпуну ачуу үчүн сырсөздү териңиз"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="7792964196473964340">"Кулпуну ачуу үчүн PIN кодду териңиз"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="8583732939138432793">"PIN-код туура эмес."</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="8583732939138432793">"PIN код туура эмес."</string>
     <string name="keyguard_label_text" msgid="3841953694564168384">"Кулпусун ачуу үчүн Менюну андан соң 0 баскычын басыңыз."</string>
     <string name="emergency_call_dialog_number_for_display" msgid="2978165477085612673">"Өзгөчө кырдаалдар кызматы"</string>
     <string name="lockscreen_carrier_default" msgid="6192313772955399160">"Интернет жок"</string>
@@ -994,18 +1000,18 @@
     <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="8381565919325410939">"SIM картанын кулпусу ачылууда…"</string>
     <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6458790975898594240">"Графикалык ачкычты <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес тарттыңыз. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> секундадан кийин дагы аракет кылып көрүңүз."</string>
     <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"Сырсөзүңүздү <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес тердиңиз. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> секундадан кийин дагы аракет кылып көрүңүз."</string>
-    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"PIN-кодуңузду <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес тердиңиз. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> секундадан кийин дагы аракет кылып көрүңүз."</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"PIN кодуңузду <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес тердиңиз. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> секундадан кийин дагы аракет кылып көрүңүз."</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="3069635524964070596">"Графикалык ачкычты <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес тарттыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> жолу туура эмес тартсаңыз, планшетиңиздин кулпусун Google\'га кирип ачууга туура келет.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> секундадан кийин дагы аракет кылып көрүңүз."</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"Графикалык ачкычыңызды <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес чийдиңиз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, Android TV түзмөгүңүздүн кулпусун Google аккаунтуңузга кирип ачышыңыз керек болот.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> секунддан кийин кайталап көрүңүз."</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="5691623136957148335">"Графикалык ачкычты <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес тарттыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> жолу туура эмес тартсаңыз, телефонуңуздун кулпусун Google\'га кирип ачууга туура келет.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> секундадан кийин дагы аракет кылып көрүңүз."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="7914445759242151426">"Сиз планшетиңизди бөгөттөн чыгарууга <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес аракет кылдыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> аракеттен кийин, планшет баштапкы абалына келтирилет жана бардык маалыматтар өчүрүлөт."</string>
-    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="4275591249631864248">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, Android TV түзмөгүңүз демейки жөндөөлөргө кайтарылып, бардык колдонуучу дайындары жоголот."</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="4275591249631864248">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, Android TV түзмөгүңүз демейки параметрлерге кайтарылып, бардык колдонуучу дайындары жоголот."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="1166532464798446579">"Сиз телефонуңузду бөгөттөн чыгарууга <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес аракет кылдыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> аракеттен кийин, телефон баштапкы абалына келтирилет жана бардык маалыматтар өчүрүлөт."</string>
     <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="8682445539263683414">"Сиз планшетти бөгөттөн чыгарууга <xliff:g id="NUMBER">%d</xliff:g> жолу туура эмес аракет кылдыңыз. Планшет баштапкы абалына келтирилет."</string>
-    <string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="2205435033340091883">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER">%d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Android TV түзмөгүңүз эми демейки жөндөөлөргө кайтарылат."</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="2205435033340091883">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER">%d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Android TV түзмөгүңүз эми демейки параметрлерге кайтарылат."</string>
     <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="2203704707679895487">"Сиз телефонду бөгөттөн чыгарууга <xliff:g id="NUMBER">%d</xliff:g> жолу туура эмес аракет кылдыңыз. Телефон баштапкы абалына келтирилет."</string>
     <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6807200118164539589">"<xliff:g id="NUMBER">%d</xliff:g> секунддан кийин кайталаңыз."</string>
-    <string name="lockscreen_forgot_pattern_button_text" msgid="8362442730606839031">"Сүрөт үлгүсүн унутуп калдыңызбы?"</string>
+    <string name="lockscreen_forgot_pattern_button_text" msgid="8362442730606839031">"Сүрөт үлгүсүн унутуп койдуңузбу?"</string>
     <string name="lockscreen_glogin_forgot_pattern" msgid="9218940117797602518">"Аккаунт менен кулпусун ачуу"</string>
     <string name="lockscreen_glogin_too_many_attempts" msgid="3775904917743034195">"Өтө көп үлгү киргизүү аракети болду"</string>
     <string name="lockscreen_glogin_instructions" msgid="4695162942525531700">"Бөгөттөн чыгарыш үчүн, Google эсебиңиз менен кириңиз."</string>
@@ -1013,7 +1019,7 @@
     <string name="lockscreen_glogin_password_hint" msgid="3031027901286812848">"Сырсөз"</string>
     <string name="lockscreen_glogin_submit_button" msgid="3590556636347843733">"Кирүү"</string>
     <string name="lockscreen_glogin_invalid_input" msgid="4369219936865697679">"Колдонуучу атыңыз же сырсөзүңүз туура эмес."</string>
-    <string name="lockscreen_glogin_account_recovery_hint" msgid="1683405808525090649">"Колдонуучу атыңызды же сырсөзүңүздү унутуп калдыңызбы?\n"<b>"google.com/accounts/recovery"</b>" дарегине кайрылыңыз."</string>
+    <string name="lockscreen_glogin_account_recovery_hint" msgid="1683405808525090649">"Колдонуучу атыңызды же сырсөзүңүздү унутуп койдуңузбу?\n"<b>"google.com/accounts/recovery"</b>" дарегине кайрылыңыз."</string>
     <string name="lockscreen_glogin_checking_password" msgid="2607271802803381645">"Текшерүүдө…"</string>
     <string name="lockscreen_unlock_label" msgid="4648257878373307582">"Кулпусун ачуу"</string>
     <string name="lockscreen_sound_on_label" msgid="1660281470535492430">"Добушу күйүк"</string>
@@ -1042,7 +1048,7 @@
     <string name="keyguard_accessibility_pattern_unlock" msgid="8669128146589233293">"Үлгү менен ачуу."</string>
     <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"Жүзүнөн таанып ачуу."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="4020864007967340068">"Пин код менен ачуу."</string>
-    <string name="keyguard_accessibility_sim_pin_unlock" msgid="4895939120871890557">"SIM-картанын кулпусун PIN-код менен ачуу."</string>
+    <string name="keyguard_accessibility_sim_pin_unlock" msgid="4895939120871890557">"SIM-картанын кулпусун PIN код менен ачуу."</string>
     <string name="keyguard_accessibility_sim_puk_unlock" msgid="3459003464041899101">"SIM-картанын кулпусун PUK-код менен ачуу."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="6130186108581153265">"Сырсөз менен ачуу."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="1419570880512350689">"Үлгү аймагы."</string>
@@ -1161,7 +1167,7 @@
     <string name="input_method_ime_switch_button_desc" msgid="2736542240252198501">"Киргизүү ыкмасын өзгөртүү"</string>
     <string name="low_internal_storage_view_title" msgid="9024241779284783414">"Сактагычта орун калбай баратат"</string>
     <string name="low_internal_storage_view_text" msgid="8172166728369697835">"Айрым функциялар иштебеши мүмкүн"</string>
-    <string name="low_internal_storage_view_text_no_boot" msgid="7368968163411251788">"Тутумда сактагыч жетишсиз. 250МБ бош орун бар экенин текшерип туруп, өчүрүп күйгүзүңүз."</string>
+    <string name="low_internal_storage_view_text_no_boot" msgid="7368968163411251788">"Системада сактагыч жетишсиз. 250МБ бош орун бар экенин текшерип туруп, өчүрүп күйгүзүңүз."</string>
     <string name="app_running_notification_title" msgid="8985999749231486569">"<xliff:g id="APP_NAME">%1$s</xliff:g> иштөөдө"</string>
     <string name="app_running_notification_text" msgid="5120815883400228566">"Көбүрөөк маалымат үчүн же колдонмону токтотуш үчүн таптап коюңуз."</string>
     <string name="ok" msgid="2646370155170753815">"Жарайт"</string>
@@ -1206,7 +1212,7 @@
     <string name="whichImageCaptureApplicationLabel" msgid="6505433734824988277">"Сүрөткө тартуу"</string>
     <string name="alwaysUse" msgid="3153558199076112903">"Бул аракет үчүн демейки боюнча колдонулсун."</string>
     <string name="use_a_different_app" msgid="4987790276170972776">"Башка колдонмону пайдалануу"</string>
-    <string name="clearDefaultHintMsg" msgid="1325866337702524936">"Тутум жөндөөлөрүндөгү демейкини тазалоо &gt; Колдонмолор &gt; Жүктөлүп алынды."</string>
+    <string name="clearDefaultHintMsg" msgid="1325866337702524936">"Система жөндөөлөрүндөгү демейкини тазалоо &gt; Колдонмолор &gt; Жүктөлүп алынды."</string>
     <string name="chooseActivity" msgid="8563390197659779956">"Аракет тандаңыз"</string>
     <string name="chooseUsbActivity" msgid="2096269989990986612">"USB түзмөгү үчүн колдонмо тандаңыз"</string>
     <string name="noApplications" msgid="1186909265235544019">"Бул аракетти аткара турган колдонмо жок."</string>
@@ -1255,7 +1261,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Колдонмолорду иштетип баштоо"</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Жүктөлүүдө"</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Кубат баскычын бастыңыз — адатта, бул экранды өчүрөт.\n\nМанжаңыздын изин жөндөп жатканда аны акырын басып көрүңүз."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Тууралап бүтүрүү үчүн экранды өчүрүңүз"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Кошуп бүтүрүү үчүн экранды өчүрүңүз"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Өчүрүү"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Манжаңыздын изин ырастоону улантасызбы?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Кубат баскычын бастыңыз — адатта, бул экранды өчүрөт.\n\nМанжаңыздын изин ырастоо үчүн аны акырын басып көрүңүз."</string>
@@ -1375,7 +1381,7 @@
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Мүчүлүштүктөрдү зымсыз оңдоону өчүрүү үчүн таптап коюңуз"</string>
     <string name="adbwifi_active_notification_message" product="tv" msgid="8633421848366915478">"Мүчүлүштүктөрдү Wi-Fi аркылуу оңдоону өчүрүңүз."</string>
     <string name="test_harness_mode_notification_title" msgid="2282785860014142511">"Сыноо программасынын режими иштетилди"</string>
-    <string name="test_harness_mode_notification_message" msgid="3039123743127958420">"Сыноо программасынын режимин өчүрүү үчүн баштапкы жөндөөлөргө кайтарыңыз."</string>
+    <string name="test_harness_mode_notification_message" msgid="3039123743127958420">"Сыноо программасынын режимин өчүрүү үчүн баштапкы параметрлерге кайтарыңыз."</string>
     <string name="console_running_notification_title" msgid="6087888939261635904">"Сериялык консоль иштетилди"</string>
     <string name="console_running_notification_message" msgid="7892751888125174039">"Майнаптуулугуна таасири тиет. Аны өчүрүү үчүн операциялык тутумду жүктөгүчтү текшериңиз."</string>
     <string name="mte_override_notification_title" msgid="4731115381962792944">"Cынамык MTE иштетилди"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ЧЕТКЕ КАГУУ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Дайын киргизүү ыкмасын тандаңыз"</string>
     <string name="show_ime" msgid="6406112007347443383">"Баскычтоп иштетилгенде экранда көрүнүп турат"</string>
-    <string name="hardware" msgid="1800597768237606953">"Виртуалдык баскычтоп"</string>
+    <string name="hardware" msgid="3611039921284836033">"Экрандагы баскычтопту колдонуу"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> түзмөгүн конфигурациялоо"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Физикалык баскычтопторду конфигурациялоо"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Тил жана калып тандоо үчүн таптап коюңуз"</string>
@@ -1401,14 +1407,14 @@
     <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"Башка колдонмолордун үстүнөн көрсөтүү"</string>
     <string name="alert_windows_notification_channel_name" msgid="3437528564303192620">"<xliff:g id="NAME">%s</xliff:g> колдонмосун башка терезелердин үстүнөн көрсөтүү"</string>
     <string name="alert_windows_notification_title" msgid="6331662751095228536">"<xliff:g id="NAME">%s</xliff:g>: башка колдонмолордун үстүнөн"</string>
-    <string name="alert_windows_notification_message" msgid="6538171456970725333">"Эгер <xliff:g id="NAME">%s</xliff:g> колдонмосу бул функцияны пайдаланбасын десеңиз, жөндөөлөрдү ачып туруп, аны өчүрүп коюңуз."</string>
+    <string name="alert_windows_notification_message" msgid="6538171456970725333">"Эгер <xliff:g id="NAME">%s</xliff:g> колдонмосу бул функцияны пайдаланбасын десеңиз, параметрлерди ачып туруп, аны өчүрүп коюңуз."</string>
     <string name="alert_windows_notification_turn_off_action" msgid="7805857234839123780">"Өчүрүү"</string>
     <string name="ext_media_checking_notification_title" msgid="8299199995416510094">"<xliff:g id="NAME">%s</xliff:g> текшерилүүдө…"</string>
     <string name="ext_media_checking_notification_message" msgid="2231566971425375542">"Учурдагы мазмун каралып жатат"</string>
     <string name="ext_media_checking_notification_message" product="tv" msgid="7986154434946021415">"Медиа сактагычты талдоо"</string>
     <string name="ext_media_new_notification_title" msgid="3517407571407687677">"Жаңы <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="ext_media_new_notification_title" product="automotive" msgid="9085349544984742727">"<xliff:g id="NAME">%s</xliff:g> иштебей жатат"</string>
-    <string name="ext_media_new_notification_message" msgid="6095403121990786986">"Жөндөө үчүн таптаңыз"</string>
+    <string name="ext_media_new_notification_message" msgid="6095403121990786986">"Орнотуу үчүн басыңыз"</string>
     <string name="ext_media_new_notification_message" product="tv" msgid="216863352100263668">"Жөндөө үчүн тандаңыз"</string>
     <string name="ext_media_new_notification_message" product="automotive" msgid="5140127881613227162">"Түзмөктү форматташыңыз керек болушу мүмкүн. Чыгаруу үчүн таптап коюңуз."</string>
     <string name="ext_media_ready_notification_message" msgid="7509496364380197369">"Сүрөттөрдү, видеолорду, ырларды жана башкаларды сактоо үчүн керек"</string>
@@ -1622,7 +1628,7 @@
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Тышкы түзмөк"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Кулакчын"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
-    <string name="default_audio_route_category_name" msgid="5241740395748134483">"Тутум"</string>
+    <string name="default_audio_route_category_name" msgid="5241740395748134483">"Система"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="4214648773120426288">"Bluetooth аудио"</string>
     <string name="wireless_display_route_description" msgid="8297563323032966831">"Зымсыз дисплей"</string>
     <string name="media_route_button_content_description" msgid="2299223698196869956">"Тышкы экранга чыгаруу"</string>
@@ -1644,17 +1650,17 @@
     <string name="kg_forgot_pattern_button_text" msgid="406145459223122537">"Үлгү унутулду"</string>
     <string name="kg_wrong_pattern" msgid="1342812634464179931">"Графикалык ачкыч туура эмес"</string>
     <string name="kg_wrong_password" msgid="2384677900494439426">"Сырсөз туура эмес"</string>
-    <string name="kg_wrong_pin" msgid="3680925703673166482">"PIN-код туура эмес"</string>
+    <string name="kg_wrong_pin" msgid="3680925703673166482">"PIN код туура эмес"</string>
     <string name="kg_pattern_instructions" msgid="8366024510502517748">"Бөгөттөн чыгаруу сүрөтүн тартыңыз"</string>
     <string name="kg_sim_pin_instructions" msgid="6479401489471690359">"SIM-картанын PIN\'ин киргизиңиз"</string>
     <string name="kg_pin_instructions" msgid="7355933174673539021">"PIN\'ди киргизиңиз"</string>
     <string name="kg_password_instructions" msgid="7179782578809398050">"Сырсөз киргизиңиз"</string>
     <string name="kg_puk_enter_puk_hint" msgid="6696187482616360994">"SIM-карта азыр жарактан чыкты. Улантыш үчүн, PUK-кодду киргизиңиз. Көбүрөөк маалымат үчүн операторуңузга кайрылыңыз."</string>
-    <string name="kg_puk_enter_pin_hint" msgid="8190982314659429770">"Сиз каалаган PIN-кодду териңиз"</string>
-    <string name="kg_enter_confirm_pin_hint" msgid="6372557107414074580">"Сиз каалаган PIN-кодду ырастаңыз"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="8190982314659429770">"Сиз каалаган PIN кодду териңиз"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="6372557107414074580">"Сиз каалаган PIN кодду ырастаңыз"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="5743634657721110967">"SIM картанын кулпусу ачылууда…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="9013856346870572451">"PIN-код туура эмес."</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="4821601451222564077">"Узундугу 4төн 8ге чейинки сандан турган PIN-кодду териңиз."</string>
+    <string name="kg_password_wrong_pin_code" msgid="9013856346870572451">"PIN код туура эмес."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="4821601451222564077">"Узундугу 4төн 8ге чейинки сандан турган PIN кодду териңиз."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="2539364558870734339">"PUK-код 8 сандан турушу керек."</string>
     <string name="kg_invalid_puk" msgid="4809502818518963344">"Туура PUK-кодду кайрадан териңиз. Кайталанган аракеттер SIM картаны биротоло жараксыз кылат."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="4705368340409816254">"PIN-коддор туура келбеди"</string>
@@ -1664,16 +1670,16 @@
     <string name="kg_login_password_hint" msgid="3330530727273164402">"Сырсөз"</string>
     <string name="kg_login_submit_button" msgid="893611277617096870">"Кирүү"</string>
     <string name="kg_login_invalid_input" msgid="8292367491901220210">"Колдонуучу атыңыз же сырсөзүңүз туура эмес."</string>
-    <string name="kg_login_account_recovery_hint" msgid="4892466171043541248">"Колдонуучу атыңызды же сырсөзүңүздү унутуп калдыңызбы?\n"<b>"google.com/accounts/recovery"</b>" дарегине кайрылыңыз."</string>
+    <string name="kg_login_account_recovery_hint" msgid="4892466171043541248">"Колдонуучу атыңызды же сырсөзүңүздү унутуп койдуңузбу?\n"<b>"google.com/accounts/recovery"</b>" дарегине кайрылыңыз."</string>
     <string name="kg_login_checking_password" msgid="4676010303243317253">"Эсеп текшерилүүдө…"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="23741434207544038">"Сиз PIN-кодуңузду <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_pin_attempts_dialog_message" msgid="23741434207544038">"Сиз PIN кодуңузду <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_password_attempts_dialog_message" msgid="3328686432962224215">"Сиз сырсөзүңүздү <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="7357404233979139075">"Сиз бөгөттөн чыгаруу үлгүсүн <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес көрсөттүңүз. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> секундадан кийин кайталаңыз."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="3479940221343361587">"Сиз планшетиңизди <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу ийгиликсиз бөгөттөн чыгаруу аракетин кылдыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, планшет баштапкы абалына кайтарылат жана бардык берилиштериңиз өчүрүлөт."</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="9064457748587850217">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, Android TV түзмөгүңүз демейки жөндөөлөргө кайтарылып, бардык колдонуучу дайындары жоголот."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="9064457748587850217">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, Android TV түзмөгүңүз демейки параметрлерге кайтарылып, бардык колдонуучу дайындары жоголот."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="5955398963754432548">"Сиз телефонуңузду <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу ийгиликсиз бөгөттөн чыгаруу аракетин кылдыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, телефон баштапкы абалына кайтарылат жана бардык берилиштериңиз өчүрүлөт."</string>
     <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2299099385175083308">"Сиз планшетиңизди <xliff:g id="NUMBER">%d</xliff:g> жолу ийгиликсиз бөгөттөн чыгаруу аракетин кылдыңыз. Планшет баштапкы абалына кайтарылат."</string>
-    <string name="kg_failed_attempts_now_wiping" product="tv" msgid="5045460916106267585">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER">%d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Android TV түзмөгүңүз эми демейки жөндөөлөргө кайтарылат."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tv" msgid="5045460916106267585">"Android TV түзмөгүңүздүн кулпусун <xliff:g id="NUMBER">%d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Android TV түзмөгүңүз эми демейки параметрлерге кайтарылат."</string>
     <string name="kg_failed_attempts_now_wiping" product="default" msgid="5043730590446071189">"Сиз телефонуңузду <xliff:g id="NUMBER">%d</xliff:g> жолу ийгиликсиз бөгөттөн чыгаруу аракетин кылдыңыз. Телефон баштапкы абалына кайтарылат."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="7086799295109717623">"Графикалык ачкычты <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес көрсөттүңүз. <xliff:g id="NUMBER_1">%2$d</xliff:g> жолу туура эмес көрсөтүлгөндөн кийин, планшетиңиздин кулпусун ачуу үчүн Google аккаунтуңузга кирүүгө туура келет.\n\n<xliff:g id="NUMBER_2">%3$d</xliff:g> секундадан кийин кайталап көрсөңүз болот."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4670840383567106114">"Графикалык ачкычыңызды <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес чийдиңиз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин, Android TV түзмөгүңүздүн кулпусун электрондук почта аккаунтуңуз менен ачышыңыз керек болот.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> секунддан кийин кайталап көрүңүз."</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Өчүрүү"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Сунушталган деңгээлден да катуулатып уккуңуз келеби?\n\nМузыканы узакка чейин катуу уксаңыз, угууңуз начарлап кетиши мүмкүн."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Эскертүү,\nБир аптанын ичинде ден соолукка зыян келтирбестен гарнитура аркылуу уга турган катуу үн сигналдарынын чегинен аштыңыз.\n\nБул чектен ашуу угууңуздун биротоло бузулушуна алып келет."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Эскертүү,\nБир аптанын ичинде ден соолукка зыян келтирбестен гарнитура аркылуу уга турган катуу үн сигналдарынын чегинен 5 жолу аштыңыз.\n\nУгууңузду коргоо үчүн медианын үнү кичирейтилди."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Медианы узак убакыт ушундай катуулукта уга берсеңиз, угууңуз начарлашы мүмкүн.\n\nУшундай катуулукта өтө көп уксаңыз, угууңуз бузулат."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Эскертүү,\nУчурдагы медианын үнүн өтө катуу кылып угуп жатасыз.\n\nМындай катуулукта уга берсеңиз, угууңуз биротоло бузулат."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Үнүн катуу кылып уга бересизби?\n\nГарнитуранын үнүн катуу чыгарып, сунушталган убакыттан узагыраак угуп жатасыз. Этияттаңыз, кулагыңыздын угуусу начарлап кетиши мүмкүн"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Үнүн катуу кылып угуп жатасыз\n\nГарнитуранын үнүн катуу чыгарып, сунушталган убакыттан узагыраак угуп жатасыз. Этияттаңыз, кулагыңыздын угуусу начарлап кетиши мүмкүн"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Ыкчам иштетесизби?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Атайын мүмкүнчүлүктөр функциясын пайдалануу үчүн ал күйгүзүлгөндө, үндү катуулатып/акырындаткан эки баскычты тең 3 секунддай коё бербей басып туруңуз."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Атайын мүмкүнчүлүктөрдүн ыкчам баскычын иштетесизби?"</string>
@@ -1713,7 +1717,7 @@
     <string name="disable_accessibility_shortcut" msgid="5806091378745232383">"Кыска жолду өчүрүү"</string>
     <string name="leave_accessibility_shortcut_on" msgid="6543362062336990814">"Кыска жолду колдонуу"</string>
     <string name="color_inversion_feature_name" msgid="2672824491933264951">"Түстөрдү инверсиялоо"</string>
-    <string name="color_correction_feature_name" msgid="7975133554160979214">"Түсүн тууралоо"</string>
+    <string name="color_correction_feature_name" msgid="7975133554160979214">"Түстөрдү тууралоо"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Бир кол режими"</string>
     <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Дагы караңгы"</string>
     <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Угуу түзмөктөрү"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Чыгуу үчүн экранды ылдый сүрүп коюңуз."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Түшүндүм"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Жакшыраак көрүү үчүн буруңуз"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Жакшыраак көрүү үчүн экранды бөлүү режиминен чыгыңыз"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Жакшыраак көрүү үчүн <xliff:g id="NAME">%s</xliff:g> колдонмосун толук экранда ачыңыз"</string>
     <string name="done_label" msgid="7283767013231718521">"Даяр"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Саат жебеси"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Мүнөт жебеси"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Колдонмо учурда жеткиликсиз"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> учурда жеткиликсиз"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> жеткиликсиз"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Уруксат керек"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Уруксат берүү сурамы четке кагылды"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Бул колдонмо кошумча уруксаттарды берүүнү суранып жатат, бирок алып ойнотуу сеансында уруксаттарды берүүгө болбойт. Адегенде Android TV түзмөгүндө уруксат бериңиз."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Бул колдонмо кошумча уруксаттарды берүүнү суранып жатат, бирок алып ойнотуу сеансында уруксаттарды берүүгө болбойт. Адегенде планшетте уруксат бериңиз."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Бул колдонмо кошумча уруксаттарды берүүнү суранып жатат, бирок алып ойнотуу сеансында уруксаттарды берүүгө болбойт. Адегенде телефондо уруксат бериңиз."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"Бул колдонмо эски Android версиясы үчүн түзүлгөн. Ал туура иштебеши мүмкүн жана анда коопсуздукту жана купуялыкты коргоонун эң акыркы мүмкүнчүлүктөрү камтылган эмес. Жаңыртууну издеп көрүңүз же колдонмону иштеп чыгуучуга кайрылыңыз."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Жаңыртууларды текшерүү"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Бул колдонмо Android\'дин соңку версиясына шайкеш келбейт. Жаңыртууну издеп көрүңүз же колдонмону иштеп чыгуучуга кайрылыңыз."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Сизге жаңы билдирүүлөр келди"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Көрүү үчүн SMS колдонмосун ачыңыз"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Айрым функциялар иштебеши мүмкүн"</string>
@@ -2067,7 +2075,7 @@
     <string name="screenshot_edit" msgid="7408934887203689207">"Түзөтүү"</string>
     <string name="volume_dialog_ringer_guidance_vibrate" msgid="2055927873175228519">"Чалуулар менен билдирмелер дирилдөө режиминде иштейт"</string>
     <string name="volume_dialog_ringer_guidance_silent" msgid="1011246774949993783">"Чалуулар менен эскертмелердин үнү өчүрүлөт"</string>
-    <string name="notification_channel_system_changes" msgid="2462010596920209678">"Тутум өзгөрүүлөрү"</string>
+    <string name="notification_channel_system_changes" msgid="2462010596920209678">"Система өзгөрүүлөрү"</string>
     <string name="notification_channel_do_not_disturb" msgid="7832584281883687653">"Тынчымды алба"</string>
     <string name="zen_upgrade_notification_visd_title" msgid="2001148984371968620">"Жаңы: \"Тынчымды алба\" режими билдирмелерди жашырууда"</string>
     <string name="zen_upgrade_notification_visd_content" msgid="3683314609114134946">"Көбүрөөк маалымат алып, өзгөртүү үчүн таптаңыз."</string>
@@ -2077,7 +2085,7 @@
     <string name="review_notification_settings_text" msgid="5916244866751849279">"Android 13 версиясынан баштап билдирмелерди жөнөтүү үчүн орноткон колдонмолоруңузга уруксат берүү керек. Учурдагы колдонмолор үчүн бул уруксатты өзгөртүү үчүн таптап коюңуз."</string>
     <string name="review_notification_settings_remind_me_action" msgid="1081081018678480907">"Кийинчерээк эскертүү"</string>
     <string name="review_notification_settings_dismiss" msgid="4160916504616428294">"Жабуу"</string>
-    <string name="notification_app_name_system" msgid="3045196791746735601">"Тутум"</string>
+    <string name="notification_app_name_system" msgid="3045196791746735601">"Система"</string>
     <string name="notification_app_name_settings" msgid="9088548800899952531">"Параметрлер"</string>
     <string name="notification_appops_camera_active" msgid="8177643089272352083">"Камера"</string>
     <string name="notification_appops_microphone_active" msgid="581333393214739332">"Микрофон"</string>
@@ -2155,20 +2163,25 @@
     <string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Жеке көрүнүш"</string>
     <string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Жумуш көрүнүшү"</string>
     <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"IT администраторуңуз бөгөттөп койгон"</string>
-    <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Бул мазмунду жумуш колдонмолору менен бөлүшүү мүмкүн эмес"</string>
-    <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Бул мазмунду жумуш колдонмолору менен ачуу мүмкүн эмес"</string>
-    <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Бул мазмунду жеке колдонмолор менен бөлүшүү мүмкүн эмес"</string>
-    <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Бул мазмунду жеке колдонмолор менен ачуу мүмкүн эмес"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Жумуш профили тындырылган"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Күйгүзүү үчүн таптап коюңуз"</string>
+    <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Бул нерсени жумуш колдонмолору менен бөлүшө албайсыз"</string>
+    <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Бул нерсени жумуш колдонмолору менен ача албайсыз"</string>
+    <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Бул нерсени жеке колдонмолор менен бөлүшө албайсыз"</string>
+    <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Бул нерсени жеке колдонмолор менен ача албайсыз"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Жумуш колдонмолору тындырылды"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Иштетүү"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Жумуш колдонмолору жок"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Жеке колдонмолор жок"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"<xliff:g id="APP">%s</xliff:g> жумуш колдонмосун ачасызбы?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Жеке <xliff:g id="APP">%s</xliff:g> колдонмосунда ачасызбы?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Жумуш <xliff:g id="APP">%s</xliff:g> колдонмосунда ачасызбы?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Жумуш колдонмосунан чаласызбы?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Жумуш колдонмосуна которуласызбы?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Уюмуңуз жумуш колдонмолорунан гана чалууга уруксат берет"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Уюмуңуз билдирүүлөрдү жумуш колдонмолорунан гана жөнөтүүгө уруксат берет"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Жеке серепчини колдонуу"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Жумуш серепчисин колдонуу"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Чалуу"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Которулуу"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM карта тармагынын кулпусун ачуучу PIN код"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM кичи тармагынын кулпусун ачуучу PIN код"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM картанын корпоративдик кулпусун ачуучу PIN код"</string>
@@ -2283,7 +2296,7 @@
     <string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
     <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Чоңойтуу функциясынын жаңы параметрлери"</string>
     <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Эми экрандын бир бөлүгүн чоңойто аласыз"</string>
-    <string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Жөндөөлөрдөн күйгүзүү"</string>
+    <string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Параметрлерден күйгүзүү"</string>
     <string name="dismiss_action" msgid="1728820550388704784">"Жабуу"</string>
     <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Түзмөктүн микрофонун бөгөттөн чыгаруу"</string>
     <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Түзмөктүн камерасын бөгөттөн чыгаруу"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"<xliff:g id="DEVICE">%1$s</xliff:g> түзмөгүңүздөн телефондун камерасына мүмкүнчүлүк жок"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"<xliff:g id="DEVICE">%1$s</xliff:g> түзмөгүңүздөн планшетиңиздин камерасына мүмкүнчүлүк жок"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Муну алып ойнотуу учурунда көрүүгө болбойт. Анын ордуна телефондон кирип көрүңүз."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Алып ойнотуп жатканда сүрөттөгү сүрөт көрүнбөйт"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Системанын демейки параметрлери"</string>
     <string name="default_card_name" msgid="9198284935962911468">"КАРТА <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Сааттын көмөкчү профилинин сааттарды тескөө уруксаты"</string>
@@ -2318,19 +2332,19 @@
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Микрофон жеткиликтүү"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Микрофон бөгөттөлгөн"</string>
     <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Кош экран"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Кош экран күйүк"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen күйүк"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> контентти эки түзмөктө тең көрсөтүүдө"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Түзмөк ысып кетти"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Телефонуңуз ысып кеткендиктен, Кош экран функциясы жеткиликсиз"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Телефонуңуз ысып кеткендиктен, Dual Screen функциясы иштебейт"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen жеткиликсиз"</string>
-    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screen жеткиликсиз, анткени Батареяны үнөмдөгүч режими күйүк. Муну параметрлерден өчүрсөңүз болот."</string>
+    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Батарея үнөмдөгүч режими күйүп тургандыктан, Dual Screen функциясы иштебейт. Аны параметрлерден өчүрүп койсоңуз болот."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Параметрлерге өтүү"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Өчүрүү"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> конфигурацияланды"</string>
-    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Баскычтоп калыбы төмөнкүгө коюлду: <xliff:g id="LAYOUT_1">%s</xliff:g>. Өзгөртүү үчүн басыңыз."</string>
-    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Баскычтоп калыбы төмөнкүгө коюлду: <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Өзгөртүү үчүн басыңыз."</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Баскычтоп калыбы төмөнкүгө коюлду: <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Өзгөртүү үчүн басыңыз."</string>
-    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Баскычтоп калыбы төмөнкүгө коюлду: <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>… Өзгөртүү үчүн басыңыз."</string>
+    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Баскычтопко төмөнкү калып коюлду: <xliff:g id="LAYOUT_1">%s</xliff:g>. Өзгөртүү үчүн басыңыз."</string>
+    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Баскычтопко төмөнкү калып коюлду: <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Өзгөртүү үчүн басыңыз."</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Баскычтопко төмөнкү калып коюлду: <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Өзгөртүү үчүн басыңыз."</string>
+    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Баскычтопко төмөнкү калып коюлду: <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>… Өзгөртүү үчүн басыңыз."</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"Физикалык баскычтоптор конфигурацияланды"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"Баскычтопторду көрүү үчүн басыңыз"</string>
 </resources>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index 5a94cca..68f4acf 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"ລະບົບ Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"ສະຫຼັບໄປໂປຣໄຟລ໌ສ່ວນຕົວ"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"ສະຫຼັບໄປໃຊ້ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"ປ່ຽນໄປໃຊ້ໂປຣໄຟລ໌ສ່ວນຕົວໃນ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"ປ່ຽນໄປໃຊ້ໂປຣໄຟລ໌ວຽກໃນ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"ລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"ເຂົ້າ​ຫາ​ລາຍ​ຊື່​ຂອງ​ທ່ານ"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"ສະ​ຖານ​ທີ່"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"ອະນຸຍາດໃຫ້ແອັບຯຄວບຄຸມໂຕສັ່ນ."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ອະນຸຍາດໃຫ້ແອັບເຂົ້າເຖິງສະຖານະການສັ່ນໄດ້."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"ໂທຫາເບີໂທລະສັບໂດຍກົງ"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"ອະນຸຍາດໃຫ້ແອັບຯໂທຫາເບີໂທລະສັບໄດ້ ໂດຍບໍ່ຕ້ອງຖ້າການດຳເນີນການໃດໆຈາກທ່ານ. ຄຸນສົມບັດນີ້ອາດກໍ່ໃຫ້ເກີດຄ່າໃຊ້ຈ່າຍໃນການໂທທີ່ບໍ່ຄາດຄິດໄດ້. ໝາຍເຫດ: ຄຸນສົມບັດນີ້ບໍ່ໄດ້ເປັນການອະນຸຍາດໃຫ້ແອັບຯ ສາມາດໂທຫາເບີສຸກເສີນ. ແອັບຯທີ່ເປັນອັນຕະລາຍອາດເຮັດໃຫ້ທ່ານ ຕ້ອງເສຍຄ່າໂທໂດຍທີ່ບໍ່ໄດ້ຄາດຄິດ."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"ອະນຸຍາດໃຫ້ແອັບໂທເຂົ້າເບີໂທລະສັບໂດຍບໍ່ຕ້ອງໃຫ້ທ່ານຈັດການ. ເຊິ່ງອາດເຮັດໃຫ້ມີການຮຽກເກັບເງິນ ຫຼື ການໂທທີ່ບໍ່ຄາດຄິດ. ກະລຸນາຮັບຊາບວ່າການດຳເນີນການນີ້ບໍ່ໄດ້ອະນຸຍາດໃຫ້ແອັບໂທຫາເບີໂທສຸກເສີນ. ແອັບທີ່ເປັນອັນຕະລາຍອາດເຮັດໃຫ້ທ່ານຕ້ອງເສຍຄ່າໃຊ້ຈ່າຍດ້ວຍການໂທໂດຍບໍ່ຂໍການຢືນຢັນຈາກທ່ານ ຫຼື ກົດລະຫັດຜູ້ໃຫ້ບໍລິການເຊິ່ງເຮັດໃຫ້ສາຍໂທເຂົ້າຖືກສົ່ງຕໍ່ໄປຫາເບີອື່ນໂດຍອັດຕະໂນມັດ."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"ເຂົ້າ​ຫາ​ການ​ບໍ​ລິ​ການ​ໂທ IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບ​ໃຊ້​ການ​ບໍ​ລິ​ການ IMS ເພື່ອ​ໂທ​ໂດຍ​ບໍ່​ມີ​ການ​ຊ່ວຍ​ເຫຼືອ​ຂອງ​ທ່ານ."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ອ່ານສະຖານະ ແລະຂໍ້ມູນລະບຸໂຕຕົນຂອງໂທລະສັບ"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"ອະນຸຍາດໃຫ້ແອັບຮັບຂໍ້ມູນບໍລິການການຈ່າຍເງິນ NFC ທີ່ຕ້ອງການໄດ້ ເຊັ່ນ: ການຊ່ວຍເຫຼືອແບບລົງທະບຽນ ແລະ ປາຍທາງເສັ້ນທາງ."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"ຄວບຄຸມ Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"ອະນຸຍາດໃຫ້ແອັບຯຕິດຕໍ່ສື່ສານກັບປ້າຍກຳກັບ, ບັດ ແລະໂຕອ່ານຂອງການສື່ສານໄລຍະສັ້ນ (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"ເຫດການທຸລະກໍາອົງປະກອບຄວາມປອດໄພ"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"ອະນຸຍາດໃຫ້ແອັບຮັບຂໍ້ມູນກ່ຽວກັບທຸລະກໍາທີ່ເກີດຂຶ້ນຢູ່ໃນອົງປະກອບທີ່ປອດໄພ."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"ປິດການລັອກໜ້າຈໍ"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"ອະນຸຍາດໃຫ້ແອັບຯປິດການເຮັດວຽກຂອງປຸ່ມລັອກ ແລະລະບົບຄວາມປອດໄພຂອງລະຫັດຜ່ານທີ່ເຊື່ອມໂຍງກັນ. ໂຕຢ່າງ: ໂທລະສັບຈະປິດການເຮັດວຽກຂອງປຸ່ມລັອກເມື່ອມີສາຍໂທເຂົ້າ ຈາກນັ້ນຈຶ່ງເປີດໃຊ້ໄດ້ອີກເມື່ອວາງສາຍແລ້ວ."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"ຮ້ອງຂໍຄວາມຊັບຊ້ອນການລັອກໜ້າຈໍ"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ໃຊ້ລະບົບຊີວະມິຕິ ຫຼື ການລັອກໜ້າຈໍ"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"ຢັ້ງຢືນວ່າແມ່ນທ່ານ"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"ໃຊ້ລະບົບຊີວະມິຕິຂອງທ່ານເພື່ອດຳເນີນການຕໍ່"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"ໃຊ້ລາຍນິ້ວມືຂອງທ່ານເພື່ອສືບຕໍ່"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"ໃຊ້ໃບໜ້າຂອງທ່ານເພື່ອສືບຕໍ່"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"ໃຊ້ລະບົບຊີວະມິຕິ ຫຼື ການລັອກໜ້າຈໍຂອງທ່ານເພື່ອດຳເນີນການຕໍ່"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"ຮາດແວຊີວະມິຕິບໍ່ສາມາດໃຊ້ໄດ້"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"ຍົກເລີກການຮັບຮອງຄວາມຖືກຕ້ອງແລ້ວ"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"ບໍ່ຮັບຮູ້"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"ບໍ່ສາມາດຈຳແນກໜ້າໄດ້"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"ຍົກເລີກການຮັບຮອງຄວາມຖືກຕ້ອງແລ້ວ"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"ບໍ່ໄດ້ຕັ້ງ PIN, ຮູບແບບປົດລັອກ ຫຼື ລະຫັດຜ່ານ"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"ເກີດຄວາມຜິດພາດໃນການພິສູດຢືນຢັນ"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"ຍົກເລີກການດຳເນີນການກັບໃບໜ້າແລ້ວ."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"ຜູ້ໃຊ້ຍົກເລີກການປົດລັອກດ້ວຍໜ້າແລ້ວ"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"ມີຄວາມພະຍາຍາມຫຼາຍຄັ້ງເກີນໄປ. ກະລຸນາລອງໃໝ່ໃນພາຍຫຼັງ."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"ພະຍາຍາມຫຼາຍເທື່ອເກີນໄປ. ໃຊ້ການປົດລັອກດ້ວຍໜ້າບໍ່ໄດ້."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ພະຍາຍາມຫຼາຍເທື່ອເກີນໄປ. ກະລຸນາເຂົ້າການລັອກໜ້າຈໍແທນ."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ບໍ່ສາມາດຢັ້ງຢືນໃບໜ້າໄດ້. ກະລຸນາລອງໃໝ່."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"ທ່ານຍັງບໍ່ໄດ້ຕັ້ງຄ່າການປົດລັອກດ້ວຍໜ້າເທື່ອ"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ປະຕິເສດ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"ເລືອກຮູບແບບການປ້ອນ"</string>
     <string name="show_ime" msgid="6406112007347443383">"ເປີດໃຊ້ໃຫ້ມັນຢູ່ໃນໜ້າຈໍໃນຂະນະທີ່ໃຊ້ແປ້ນພິມພາຍນອກຢູ່"</string>
-    <string name="hardware" msgid="1800597768237606953">"ສະແດງແປ້ນພິມສະເໝືອນ"</string>
+    <string name="hardware" msgid="3611039921284836033">"ໃຊ້ແປ້ນພິມໃນໜ້າຈໍ"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"ຕັ້ງຄ່າ <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"ຕັ້ງຄ່າແປ້ນພິມແທ້"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"ແຕະເພື່ອເລືອກພາສາ ແລະ ໂຄງແປ້ນພິມ"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"ລຶບອອກ"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"ເພີ່ມ​ລະ​ດັບ​ສຽງ​ໃຫ້​ເກີນກວ່າ​ລະ​ດັບ​ທີ່​ແນະ​ນຳ​ບໍ?\n\n​ການ​ຮັບ​ຟັງ​ສຽງ​ໃນ​ລະ​ດັບ​ທີ່​ສູງ​ເປັນ​ໄລ​ຍະ​ເວ​ລາ​ດົນ​​ອາດ​ເຮັດ​ໃຫ້​ການ​ຟັງ​ຂອງ​ທ່ານ​ມີ​ບັນ​ຫາ​ໄດ້."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"ຄຳເຕືອນ,\nທ່ານມີສັນຍານສຽງດັງເກີນຈຳນວນທີ່ຄົນເຮົາສາມາດຟັງໄດ້ຢ່າງປອດໄພໃນໜຶ່ງອາທິດຜ່ານຫູຟັງ.\n\nການໃຊ້ເກີນຂີດຈຳກັດນີ້ຈະທຳລາຍການໄດ້ຍິນຂອງທ່ານຢ່າງຖາວອນ."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"ຄຳເຕືອນ,\nທ່ານມີສັນຍານສຽງດັງເກີນ 5 ເທື່ອຂອງສັນຍານສຽງທີ່ຄົນເຮົາສາມາດຟັງໄດ້ຢ່າງປອດໄພໃນໜຶ່ງອາທິດຜ່ານຫູຟັງ.\n\nໄດ້ຫຼຸດລະດັບສຽງລົງແລ້ວເພື່ອປົກປ້ອງການໄດ້ຍິນຂອງທ່ານ."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"ລະດັບທີ່ທ່ານກໍາລັງຟັງສື່ສາມາດສົ່ງຜົນໃຫ້ເກີດຄວາມເສຍຫາຍຕໍ່ການໄດ້ຍິນເມື່ອຖືກຄົງໄວ້ເປັນເວລາດົນນານ.\n\nການສືບຕໍ່ຫຼິ້ນໃນລະດັບນີ້ເປັນເວລາດົນອາດເຮັດໃຫ້ການໄດ້ຍິນຂອງທ່ານເສຍຫາຍໄດ້."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"ຄຳເຕືອນ,\nປັດຈຸບັນນີ້ທ່ານກຳລັງຟັງເນື້ອຫາທີ່ມີສຽງດັງໃນລະດັບທີ່ບໍ່ປອດໄພ.\n\nການສືບຕໍ່ຟັງສຽງດັງນີ້ຈະທໍາລາຍການໄດ້ຍິນຂອງທ່ານຢ່າງຖາວອນ."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"ສືບຕໍ່ຟັງໃນລະດັບສຽງທີ່ດັງບໍ?\n\nຫູຟັງຢູ່ໃນລະດັບສຽງທີ່ດັງເປັນໄລຍະເວລາດົນກວ່າທີ່ແນະນຳ, ເຊິ່ງສາມາດເປັນອັນຕະລາຍຕໍ່ການໄດ້ຍິນຂອງທ່ານໄດ້"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"ກວດພົບສຽງດັງ\n\nຫູຟັງຢູ່ໃນລະດັບສຽງທີ່ດັງກວ່າທີ່ແນະນຳ, ເຊິ່ງສາມາດເປັນອັນຕະລາຍຕໍ່ການໄດ້ຍິນຂອງທ່ານໄດ້"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ໃຊ້ປຸ່ມລັດການຊ່ວຍເຂົ້າເຖິງບໍ?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"ເມື່ອເປີດໃຊ້ທາງລັດແລ້ວ, ການກົດປຸ່ມລະດັບສຽງທັງສອງຄ້າງໄວ້ 3 ວິນາທີຈະເປັນການເລີ່ມຄຸນສົມບັດການຊ່ວຍເຂົ້າເຖິງ."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"ເປີດໃຊ້ທາງລັດສຳລັບຄຸນສົມບັດການຊ່ວຍເຂົ້າເຖິງບໍ?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"ຫາກຕ້ອງການອອກ, ໃຫ້ຮູດຈາກທາງເທິງລົງມາທາງລຸ່ມ."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"ໄດ້​ແລ້ວ"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"ໝຸນເພື່ອມຸມມອງທີ່ດີຂຶ້ນ"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"ອອກຈາກແບ່ງໜ້າຈໍເພື່ອມຸມມອງທີ່ດີຂຶ້ນ"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"ເປີດ <xliff:g id="NAME">%s</xliff:g> ໃນໂໝດເຕັມຈໍເພື່ອມຸມມອງທີ່ດີຂຶ້ນ"</string>
     <string name="done_label" msgid="7283767013231718521">"ແລ້ວໆ"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"ໂຕໝຸນປັບຊົ່ວໂມງ"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"ໂຕໝຸນປັບນາທີ"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"ແອັບບໍ່ສາມາດໃຊ້ໄດ້"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ່ສາມາດໃຊ້ໄດ້ໃນຕອນນີ້."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"ບໍ່ສາມາດໃຊ້ <xliff:g id="ACTIVITY">%1$s</xliff:g> ໄດ້"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"ຕ້ອງມີການອະນຸຍາດ"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"ຄຳຮ້ອງຂໍການອະນຸຍາດຖືກລະງັບ"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"ແອັບນີ້ກຳລັງຮ້ອງຂໍການອະນຸຍາດເພີ່ມເຕີມ, ແຕ່ບໍ່ສາມາດໃຫ້ການອະນຸຍາດໃນເຊດຊັນການສະຕຣີມໄດ້. ກະລຸນາໃຫ້ການອະນຸຍາດໃນອຸປະກອນ Android TV ຂອງທ່ານກ່ອນ."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"ແອັບນີ້ກຳລັງຮ້ອງຂໍການອະນຸຍາດເພີ່ມເຕີມ, ແຕ່ບໍ່ສາມາດໃຫ້ການອະນຸຍາດໃນເຊດຊັນການສະຕຣີມໄດ້. ກະລຸນາໃຫ້ການອະນຸຍາດໃນແທັບເລັດຂອງທ່ານກ່ອນ."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"ແອັບນີ້ກຳລັງຮ້ອງຂໍການອະນຸຍາດເພີ່ມເຕີມ, ແຕ່ບໍ່ສາມາດໃຫ້ການອະນຸຍາດໃນເຊດຊັນການສະຕຣີມໄດ້. ກະລຸນາໃຫ້ການອະນຸຍາດໃນໂທລະສັບຂອງທ່ານກ່ອນ."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"ແອັບນີ້ສ້າງຂຶ້ນສຳລັບ Android ເວີຊັນເກົ່າ. ມັນອາດເຮັດວຽກບໍ່ຖືກຕ້ອງ ແລະ ຮວມທັງບໍ່ມີຄວາມປອດໄພ ແລະ ການປ້ອງກັນຄວາມເປັນສ່ວນຕົວຫຼ້າສຸດ. ກວດສອບເພື່ອອັບເດດ ຫຼື ຕິດຕໍ່ນັກພັດທະນາແອັບ."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ກວດເບິ່ງອັບເດດ"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"ແອັບນີ້ບໍ່ສາມາດໃຊ້ໄດ້ກັບ Android ເວີຊັນຫຼ້າສຸດ. ກວດສອບເພື່ອອັບເດດ ຫຼື ຕິດຕໍ່ນັກພັດທະນາແອັບ."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ທ່ານມີຂໍ້ຄວາມໃໝ່"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"ເປີດແອັບ SMS ເພື່ອເບິ່ງ"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"ຄຸນສົມບັດບາງຢ່າງອາດຖືກຈຳກັດໄວ້"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ເນື້ອຫານີ້ບໍ່ສາມາດຖືກເປີດໄດ້ດ້ວຍແອັບບ່ອນເຮັດວຽກ"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ເນື້ອຫານີ້ບໍ່ສາມາດຖືກແບ່ງປັນກັບແອັບສ່ວນຕົວໄດ້"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ເນື້ອຫານີ້ບໍ່ສາມາດຖືກເປີດໄດ້ດ້ວຍແອັບສ່ວນຕົວ"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"ຢຸດໂປຣໄຟລ໌ວຽກໄວ້ຊົ່ວຄາວແລ້ວ"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"ແຕະເພື່ອເປີດໃຊ້"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"ຢຸດແອັບບ່ອນເຮັດວຽກໄວ້ຊົ່ວຄາວແລ້ວ"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"ຍົກເລີກການຢຸດຊົ່ວຄາວ"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ບໍ່ມີແອັບບ່ອນເຮັດວຽກ"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ບໍ່ມີແອັບສ່ວນຕົວ"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"ເປີດ <xliff:g id="APP">%s</xliff:g> ສຳລັບວຽກບໍ?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"ເປີດໃນ <xliff:g id="APP">%s</xliff:g> ສ່ວນຕົວບໍ?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"ເປີດໃນ <xliff:g id="APP">%s</xliff:g> ສຳລັບວຽກບໍ?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"ໂທຈາກແອັບບ່ອນເຮັດວຽກບໍ?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"ສະຫຼັບໄປເປັນແອັບບ່ອນເຮັດວຽກບໍ?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"ອົງການຂອງທ່ານອະນຸຍາດໃຫ້ທ່ານໂທຈາກແອັບບ່ອນເຮັດວຽກເທົ່ານັ້ນ"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"ອົງການຂອງທ່ານອະນຸຍາດໃຫ້ທ່ານສົ່ງຂໍ້ຄວາມໄດ້ຈາກແອັບບ່ອນເຮັດວຽກເທົ່ານັ້ນ"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ໃຊ້ໂປຣແກຣມທ່ອງເວັບສ່ວນຕົວ"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"ໃຊ້ໂປຣແກຣມທ່ອງເວັບບ່ອນເຮັດວຽກ"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"ໂທ"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"ສະຫຼັບ"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN ປົດລັອກເຄືອຂ່າຍຊິມ"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN ການປົດລັອກຊຸດຍ່ອຍເຄືອຂ່າຍຊິມ"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN ປົດລັອກ SIM ອົງການ"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"ບໍ່ສາມາດເຂົ້າເຖິງກ້ອງຖ່າຍຮູບຂອງໂທລະສັບຈາກ <xliff:g id="DEVICE">%1$s</xliff:g> ຂອງທ່ານໄດ້"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"ບໍ່ສາມາດເຂົ້າເຖິງກ້ອງຖ່າຍຮູບຂອງແທັບເລັດຈາກ <xliff:g id="DEVICE">%1$s</xliff:g> ຂອງທ່ານໄດ້"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"ບໍ່ສາມາດເຂົ້າເຖິງເນື້ອຫານີ້ໄດ້ໃນຂະນະທີ່ຍັງສະຕຣີມຢູ່. ກະລຸນາລອງຢູ່ໂທລະສັບຂອງທ່ານແທນ."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"ບໍ່ສາມາດເບິ່ງການສະແດງຜົນຊ້ອນກັນໃນຂະນະທີ່ສະຕຣີມໄດ້"</string>
     <string name="system_locale_title" msgid="711882686834677268">"ຄ່າເລີ່ມຕົ້ນຂອງລະບົບ"</string>
     <string name="default_card_name" msgid="9198284935962911468">"ບັດ <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"ສິດການອະນຸຍາດສຳລັບໂປຣໄຟລ໌ໃນໂມງຊ່ວຍເຫຼືອເພື່ອຈັດການໂມງ"</string>
@@ -2318,7 +2332,7 @@
     <string name="mic_access_on_toast" msgid="2666925317663845156">"ໄມໂຄຣໂຟນພ້ອມໃຫ້ນຳໃຊ້"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"ໄມໂຄຣໂຟນຖືກບລັອກໄວ້"</string>
     <string name="concurrent_display_notification_name" msgid="1526911253558311131">"ໜ້າຈໍຄູ່"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"ເປີດໜ້າຈໍຄູ່ຢູ່"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"ເປີດ Dual Screen ຢູ່"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> ກຳລັງໃຊ້ຈໍສະແດງຜົນທັງສອງເພື່ອສະແດງເນື້ອຫາ"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"ອຸປະກອນຮ້ອນເກີນໄປ"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"ໜ້າຈໍຄູ່ບໍ່ພ້ອມໃຫ້ນຳໃຊ້ເນື່ອງຈາກໂທລະສັບຂອງທ່ານຮ້ອນເກີນໄປ"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 498bc86..fca59f8 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -300,6 +300,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"„Android“ sistema"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Perjungti į asmeninį profilį"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Perjungti į darbo profilį"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Perjungti į asmeninę programą „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Perjungti į darbo programą „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontaktai"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"pasiekti kontaktus"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Vietovė"</string>
@@ -505,7 +507,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Leidžiama programai valdyti vibravimą."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Programai leidžiama pasiekti vibratoriaus būseną."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"skambinti tiesiogiai telefono numeriais"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Leidžiama programai skambinti telefonų numeriais be jūsų įsikišimo. Dėl to gali atsirasti nenumatytų apmokestinimų ar skambučių. Atminkite, kad programai neleidžiama skambinti pagalbos telefonų numeriais. Kenkėjiškos programos gali skambinti be jūsų patvirtinimo, o dėl to jums gali būti taikomi mokesčiai."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Leidžiama programai skambinti telefonų numeriais be jūsų įsikišimo. Gali būti taikomi nenumatyti mokesčiai ar gaunami nenumatyti skambučiai. Atminkite, kad programai neleidžiama skambinti pagalbos numeriais. Naudojant kenkėjiškas programas gali būti taikomi mokesčiai, skambinant be jūsų patvirtinimo arba renkant operatorių kodus, kuriuos taikant gaunamieji skambučiai automatiškai peradresuojami kitu numeriu."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"pasiekti IMS skambučių paslaugą"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Programai leidžiama naudoti IMS paslaugą, kad būtų galima atlikti skambučius be jūsų įsikišimo."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"skaityti telefono būseną ir tapatybę"</string>
@@ -590,6 +592,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Programai leidžiama gauti pageidaujamą ARL mokamos paslaugos informaciją, pvz., užregistruotą pagalbą ir maršrutų tikslus."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"valdyti artimo lauko perdavimą (angl. „Near Field Communication“)"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Leidžiama programai perduoti artimojo lauko ryšių technologijos (ALR) žymas, korteles ir skaitymo programas."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Saugos elemento operacijos įvykis"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Leidžiama programai gauti informaciją apie operacijas, vykstančias saugos elemente."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"išjungti ekrano užraktą"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Leidžiama programai neleisti klavišo užrakto ir visos susijusios slaptažodžio apsaugos. Pvz., telefonas neleidžia klavišo užrakto priimant gaunamąjį skambutį ir pakartotinai jį įgalina, kai skambutis baigiamas."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"pateikti ekrano užrakto sudėtingumo užklausą"</string>
@@ -616,16 +620,19 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Naudoti biometrinius duomenis arba ekrano užraktą"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Patvirtinkite, kad tai jūs"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Norėdami tęsti, naudokite biometrinius duomenis"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Jei norite tęsti, naudokite piršto atspaudą"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Jei norite tęsti, naudokite veido atpažinimo funkciją"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Jei norite tęsti, naudokite biometrinius duomenis arba ekrano užraktą"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrinė aparatinė įranga nepasiekiama"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autentifikavimas atšauktas"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Neatpažinta"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Veidas neatpažintas"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autentifikavimas atšauktas"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nenustatytas PIN kodas, atrakinimo piešinys arba slaptažodis"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Autentifikuojant įvyko klaida"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Naudoti ekrano užraktą"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Jei norite tęsti, įveskite ekrano užraktą"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Tvirtai paspauskite jutiklį"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Stipriai paspauskite jutiklį"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Nepavyko atpažinti kontrolinio kodo. Bandykite dar kartą."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Nuvalykite kontrolinio kodo jutiklį ir bandykite dar kartą"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Nuvalykite jutiklį ir bandykite dar kartą"</string>
@@ -638,14 +645,14 @@
     <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Kaskart šiek tiek pakeiskite piršto poziciją"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
-    <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Kontrolinis kodas neatpažintas"</string>
-    <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Kontrolinis kodas neatpažintas"</string>
+    <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Piršto atspaudas neatpažintas"</string>
+    <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Piršto atspaudas neatpažintas"</string>
     <string name="fingerprint_authenticated" msgid="2024862866860283100">"Piršto antspaudas autentifikuotas"</string>
     <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Veidas autentifikuotas"</string>
     <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Veidas autentifikuotas, paspauskite patvirtinimo mygtuką"</string>
     <string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Piršto antspaudo aparatinė įranga nepasiekiama."</string>
     <string name="fingerprint_error_no_space" msgid="7285481581905967580">"Nepavyko nustatyti kontrolinio kodo"</string>
-    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Baigėsi kontrolinio kodo sąrankos skirtasis laikas. Bandykite dar kartą."</string>
+    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Baigėsi piršto atspaudo sąrankos skirtasis laikas. Bandykite dar kartą."</string>
     <string name="fingerprint_error_canceled" msgid="540026881380070750">"Piršto antspaudo operacija atšaukta."</string>
     <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Piršto antspaudo operaciją atšaukė naudotojas."</string>
     <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Per daug bandymų. Naudokite ekrano užraktą."</string>
@@ -673,12 +680,12 @@
     <string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"Jei norite naudoti atrakinimą pagal veidą, įjunkite parinktį "<b>"Prieiga prie fotoaparato"</b>" skiltyje „Nustatymai“ &gt; „Privatumas“"</string>
     <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Daugiau atrakinimo metodų nustatymas"</string>
     <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Palieskite, kad pridėtumėte kontrolinį kodą"</string>
-    <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Atrakinimas kontroliniu kodu"</string>
+    <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Atrakinimas piršto atspaudu"</string>
     <string name="fingerprint_recalibrate_notification_title" msgid="2406561052064558497">"Negalima naudoti kontrolinio kodo jutiklio"</string>
     <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Apsilankykite pas taisymo paslaugos teikėją."</string>
     <string name="face_acquired_insufficient" msgid="6889245852748492218">"Nepavyko sukurti veido modelio. Band. dar kartą."</string>
     <string name="face_acquired_too_bright" msgid="8070756048978079164">"Per šviesu. Išbandykite mažesnį apšvietimą."</string>
-    <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nepakanka apšvietimo"</string>
+    <string name="face_acquired_too_dark" msgid="8539853432479385326">"Per tamsu"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Laikykite telefoną toliau"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Laikykite telefoną arčiau"</string>
     <string name="face_acquired_too_high" msgid="8278815780046368576">"Laikykite telefoną aukščiau"</string>
@@ -711,8 +718,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Veido atpažinimo operacija atšaukta."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Atrakinimą pagal veidą atšaukė naudotojas"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Per daug bandymų. Vėliau bandykite dar kartą."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Per daug bandymų. Atrakinimo pagal veidą funkcija nepasiekiama."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Per daug bandymų. Geriau naudokite ekrano užraktą."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Nepavyko patvirtinti veido. Bandykite dar kartą."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Nenustatėte atrakinimo pagal veidą"</string>
@@ -1394,7 +1400,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ATMESTI"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Pasirinkite įvesties metodą"</string>
     <string name="show_ime" msgid="6406112007347443383">"Palikti ekrane, kol fizinė klaviatūra aktyvi"</string>
-    <string name="hardware" msgid="1800597768237606953">"Rodyti virtualiąją klaviatūrą"</string>
+    <string name="hardware" msgid="3611039921284836033">"Ekrano klaviatūros naudojimas"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"„<xliff:g id="DEVICE_NAME">%s</xliff:g>“ konfigūravimas"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Fizinių klaviatūrų konfigūravimas"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Palieskite, kad pasirinktumėte kalbą ir išdėstymą"</string>
@@ -1683,10 +1689,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Pašalinti"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Padidinti garsą daugiau nei rekomenduojamas lygis?\n\nIlgai klausydami dideliu garsu galite pažeisti klausą."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Įspėjimas.\nViršijote savaitės garsių garso signalų kiekį, kurio būtų saugu klausytis per ausines.\n\nViršijus šį apribojimą bus negrįžtamai pažeista jūsų klausa."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Įspėjimas.\nViršijote savaitės garsių garso signalų kiekį (penki kartai), kurio būtų saugu klausytis per ausines.\n\nGarsumas sumažintas apsaugant jūsų klausą."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Garsumas, kuriuo klausotės medijos, klausantis ilgai gali pakenkti jūsų klausai.\n\nToliau ilgai leidžiant šiuo garsumu gali būti pakenkta jūsų klausai."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Įspėjimas.\nŠiuo metu klausotės nesaugiu garsumu leidžiamo turinio.\n\nToliau klausantis tokiu garsumu leidžiamo turinio bus negrįžtamai pakenkta jūsų klausai."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Toliau klausytis nustačius aukštą garsumo lygį?\n\nAusinių garsumo lygis yra aukštas ilgiau, nei rekomenduojama, o tai gali pakenkti klausai"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Aptiktas garsus garsas\n\nAusinių garsumo lygis yra aukštesnis, nei rekomenduojama, o tai gali pakenkti klausai"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Naudoti spartųjį pritaikymo neįgaliesiems klavišą?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Kai spartusis klavišas įjungtas, paspaudus abu garsumo mygtukus ir palaikius 3 sekundes bus įjungta pritaikymo neįgaliesiems funkcija."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Įjungti pritaikymo neįgaliesiems funkcijų spartųjį klavišą?"</string>
@@ -1853,7 +1857,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Jei norite išeiti, perbraukite žemyn iš viršaus."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Supratau"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Pasukite, kad geriau matytumėte vaizdą"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Išeikite iš išskaidyto ekrano režimo, kad geriau matytumėte vaizdą"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Atidarykite „<xliff:g id="NAME">%s</xliff:g>“ viso ekrano režimu, kad geriau matytumėte vaizdą"</string>
     <string name="done_label" msgid="7283767013231718521">"Atlikta"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Apskritas valandų šliaužiklis"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Apskritas minučių šliaužiklis"</string>
@@ -1959,7 +1963,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Programa nepasiekiama."</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Programa „<xliff:g id="APP_NAME">%1$s</xliff:g>“ šiuo metu nepasiekiama."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"„<xliff:g id="ACTIVITY">%1$s</xliff:g>“ nepasiekiama"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Reikalingas leidimas"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Leidimo užklausa atmesta"</string>
     <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>
@@ -1970,6 +1974,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Ši programa prašo papildomų leidimų, bet jų negalima suteikti per srautinio perdavimo seansą. Leidimą pirmiausia suteikite „Android TV“ įrenginyje."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Ši programa prašo papildomų leidimų, bet jų negalima suteikti per srautinio perdavimo seansą. Leidimą pirmiausia suteikite planšetiniame kompiuteryje."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Ši programa prašo papildomų leidimų, bet jų negalima suteikti per srautinio perdavimo seansą. Leidimą pirmiausia suteikite telefone."</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>
@@ -1978,6 +1985,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Nepavyksta pasiekti nuotolinio įrenginio iš jūsų „<xliff:g id="DEVICE">%1$s</xliff:g>“. Pabandykite naudoti telefoną."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Ši programa sukurta senesnės versijos „Android“. Ji gali tinkamai neveikti ir joje nėra naujausių saugos ir privatumo apsaugos priemonių. Patikrinkite, ar yra naujinių, arba susisiekite su programos kūrėju."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Tikrinti, ar yra naujinių"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Ši programa nesuderinama su naujausios versijos „Android“. Patikrinkite, ar yra naujinių, arba susisiekite su programos kūrėju."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Turite naujų pranešimų"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Atidaryti SMS programą, norint peržiūrėti"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Kai kurios funkcijos ribojamos"</string>
@@ -2161,16 +2169,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Šio turinio negalima atidaryti naudojant darbo programas"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Šio turinio negalima bendrinti su asmeninėmis programomis"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Šio turinio negalima atidaryti naudojant asmenines programas"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Darbo profilis pristabdytas"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Paliesti, norint įjungti"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Darbo programos pristabdytos"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Atšaukti pristabdymą"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nėra darbo programų"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nėra asmeninių programų"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Atidaryti darbo programą „<xliff:g id="APP">%s</xliff:g>“?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Atidaryti asmeninėje programoje „<xliff:g id="APP">%s</xliff:g>“?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Atidaryti darbo programoje „<xliff:g id="APP">%s</xliff:g>“?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Skambinti iš darbo programos?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Perjungti į darbo programą?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Jūsų organizacija leidžia skambinti tik iš darbo programų"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Jūsų organizacija leidžia siųsti pranešimus tik iš darbo programų"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Naudoti asmeninę naršyklę"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Naudoti darbo naršyklę"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Skambinti"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Perjungti"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM tinklo operatoriaus pasirinkimo ribojimo panaikinimo PIN kodas"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM tinklo poaibio operatoriaus pasirinkimo ribojimo panaikinimo PIN kodas"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM bendrojo operatoriaus pasirinkimo ribojimo panaikinimo PIN kodas"</string>
@@ -2307,6 +2320,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Nepavyko pasiekti telefono fotoaparato iš „<xliff:g id="DEVICE">%1$s</xliff:g>“"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Nepavyko pasiekti planšetinio kompiuterio fotoaparato iš „<xliff:g id="DEVICE">%1$s</xliff:g>“"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Nepavyksta pasiekti perduodant srautu. Pabandykite naudoti telefoną."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Negalima peržiūrėti vaizdo vaizde perduodant srautu"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Numatytoji sistemos vertė"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KORTELĖ <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Papildomos programos laikrodžio profilio leidimas valdyti laikrodžius"</string>
@@ -2319,11 +2333,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Leidžiama papildomai programai paleisti priekinio plano paslaugas fone."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofonas pasiekiamas"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofonas užblokuotas"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dvigubas ekranas"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Įjungtas dvigubas ekranas"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Įjungta „Dual Screen“"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ naudoja abu ekranus turiniui rodyti"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Įrenginys per daug kaista"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dvigubas ekranas nepasiekiamas, nes telefonas per daug kaista"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"„Dual Screen“ nepasiekiamas, nes telefonas per daug kaista"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Funkcija „Dual Screen“ nepasiekiama"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Funkcija „Dual Screen“ nepasiekiama, nes įjungta Akumuliatoriaus tausojimo priemonė. Šią parinktį bet kada galite išjungti skiltyje „Nustatymai“."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Eiti į skiltį „Nustatymai“"</string>
@@ -2332,7 +2346,7 @@
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Klaviatūros išdėstymas nustatytas į <xliff:g id="LAYOUT_1">%s</xliff:g>. Palieskite, kad pakeistumėte."</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Klaviatūros išdėstymas nustatytas į <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Palieskite, kad pakeistumėte."</string>
     <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Klaviatūros išdėstymas nustatytas į <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Palieskite, kad pakeistumėte."</string>
-    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Klaviatūros išdėstymas nustatytas į <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>… Palieskite, kad pakeistumėte."</string>
+    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Išdėstymas nustatytas į <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>… Palieskite, kad pakeistumėte."</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"Sukonfigūruotos fizinės klaviatūros"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"Palieskite, kad peržiūrėtumėte klaviatūras"</string>
 </resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 0655272..563d206 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android sistēma"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Pārslēgties uz personisko profilu"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Pārslēgties uz darba profilu"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Pārslēgties uz personīgo profilu lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Pārslēgties uz darba profilu lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontaktpersonas"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"piekļūt jūsu kontaktpersonu datiem"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Atrašanās vieta"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Ļauj lietotnei kontrolēt vibrosignālu."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ļauj lietotnei piekļūt vibrosignāla statusam."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"tieši zvanīt uz tālruņa numuriem"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Ļauj lietotnei zvanīt uz tālruņa numuriem bez jūsu iejaukšanās. Tas var radīt neparedzētas izmaksas vai zvanus. Ņemiet vērā, ka lietotnei nav atļauts zvanīt uz tālruņa numuriem ārkārtas situācijām. Ļaunprātīgas lietotnes var radīt jums izmaksas, veicot zvanus bez jūsu apstiprinājuma."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Ļauj lietotnei zvanīt uz tālruņa numuriem bez jūsu iejaukšanās. Var rasties neparedzētas izmaksas vai zvani. Ņemiet vērā, ka lietotnei tādējādi netiek atļauts zvanīt uz ārkārtas numuriem. Ļaunprātīgas lietotnes var radīt jums izmaksas, veicot zvanus bez jūsu apstiprinājuma, vai sastādīt mobilo sakaru operatoru kodus, kuru dēļ ienākošie zvani tiek automātiski pāradresēti uz citu numuru."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"piekļūt tūlītējās ziņojumapmaiņas pakalpojumam, lai veiktu zvanus"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Ļauj lietotnei izmantot tūlītējās ziņojumapmaiņas pakalpojumu, lai veiktu zvanus bez jūsu ziņas."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"lasīt tālruņa statusu un identitāti"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Ļauj lietotnei iegūt informāciju par vēlamo NFC maksājumu pakalpojumu, piemēram, par reģistrētajiem lietojumprogrammu ID un maršruta galamērķi."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"kontrolē tuvlauka saziņu"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Ļauj lietotnei sazināties ar tuva darbības lauka sakaru (Near Field Communication — NFC) atzīmēm, kartēm un lasītājiem."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Darījums, kas apstrādājams, izmantojot drošības elementu"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Ļauj lietotnei saņemt informāciju par darījumiem, kas apstrādājami, izmantojot drošības elementu."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"atspējot ekrāna bloķēšanu"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Ļauj lietotnei atspējot taustiņslēgu un visu saistīto paroļu drošību. Piemēram, tālrunis atspējo taustiņslēgu, saņemot ienākošu zvanu, un pēc zvana pabeigšanas atkārtoti iespējo taustiņslēgu."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"ekrāna bloķēšanas sarežģītības pakāpes informācijas pieprasījums"</string>
@@ -615,10 +619,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Biometrijas vai ekrāna bloķēšanas izmantošana"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Apstipriniet, ka tas esat jūs"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Lai turpinātu, izmantojiet biometriju"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Izmantojiet pirksta nospiedumu, lai turpinātu"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Izmantojiet autorizāciju pēc sejas, lai turpinātu"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Izmantojiet biometrijas datus vai ekrāna bloķēšanas opciju, lai turpinātu"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrisko datu aparatūra nav pieejama"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autentifikācija ir atcelta"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Dati nav atpazīti"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Seja netika atpazīta"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autentifikācija ir atcelta"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN, kombinācija vai parole nav iestatīta"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Autentifikācijas kļūda"</string>
@@ -634,7 +641,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Pārāk spilgts"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Konstatēta barošanas pogas nospiešana"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Mēģiniet mainīt pozīciju"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Katru reizi mazliet mainiet pirksta pozīciju."</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Katru reizi mazliet mainiet pirksta pozīciju"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Pirksta nospiedums netika atpazīts"</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Darbība ar sejas datiem atcelta."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Lietotājs atcēla autorizāciju pēc sejas."</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Pārāk daudz mēģinājumu. Vēlāk mēģiniet vēlreiz."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Pārāk daudz mēģinājumu. Autorizācija pēc sejas nav pieejama."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Pārāk daudz mēģinājumu. Tā vietā ievadiet ekrāna bloķēšanas akreditācijas datus."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Nevar verificēt seju. Mēģiniet vēlreiz."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Autorizācija pēc sejas nav iestatīta."</string>
@@ -1393,7 +1399,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"NORAIDĪT"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Ievades metodes izvēle"</string>
     <string name="show_ime" msgid="6406112007347443383">"Paturēt ekrānā, kamēr ir aktīva fiziskā tastatūra"</string>
-    <string name="hardware" msgid="1800597768237606953">"Virtuālās tastatūras rādīšana"</string>
+    <string name="hardware" msgid="3611039921284836033">"Izmantojiet ekrāna tastatūru"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Jākonfigurē <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Konfigurējiet fiziskās tastatūras"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Pieskarieties, lai atlasītu valodu un izkārtojumu"</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">"  — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Noņemt"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Vai palielināt skaļumu virs ieteicamā līmeņa?\n\nIlgstoši klausoties skaņu lielā skaļumā, var tikt bojāta dzirde."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Brīdinājums!\nEsat pārsniedzis skaļu skaņas signālu apjomu, ko vienā nedēļā var droši klausīties austiņās.\n\nPārsniedzot šo ierobežojumu, jūsu dzirde neatgriezeniski pasliktināsies."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Brīdinājums!\nEsat pieckārt pārsniedzis skaļu skaņas signālu apjomu, ko vienā nedēļā var droši klausīties austiņās.\n\nSkaļums tika samazināts, lai aizsargātu jūsu dzirdi."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Ilgstoši klausoties multivides saturu šādā skaļumā, var rasties dzirdes bojājumi.\n\nJa turpināsiet ilgstoši atskaņot saturu šādā skaļumā, jums var pasliktināties dzirde."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Brīdinājums!\nJūs pašlaik klausāties saturu tik skaļi, ka tas nav droši.\n\nJa turpināsiet klausīties šādā skaļumā, jūsu dzirde neatgriezeniski pasliktināsies."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Vai turpināt klausīties lielā skaļumā?\n\nAustiņu skaļums ir bijis liels ilgāk, nekā ieteicams, tādējādi jums var pasliktināties dzirde."</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Uztverta skaļa skaņa\n\nAustiņu skaļums ir lielāks, nekā ieteicams, tādējādi jums var pasliktināties dzirde."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Vai izmantot pieejamības saīsni?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Kad īsinājumtaustiņš ir ieslēgts, nospiežot abas skaļuma pogas un 3 sekundes turot tās, tiks aktivizēta pieejamības funkcija."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Vai ieslēgt pieejamības funkciju saīsni?"</string>
@@ -1699,7 +1703,7 @@
     <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"IZSLĒGTA"</string>
     <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Vai atļaut pakalpojumam <xliff:g id="SERVICE">%1$s</xliff:g> pilnībā kontrolēt jūsu ierīci?"</string>
     <string name="accessibility_service_warning_description" msgid="291674995220940133">"Pilnīga kontrole ir piemērota lietotnēm, kas nepieciešamas lietotājiem ar īpašām vajadzībām, taču ne lielākajai daļai lietotņu."</string>
-    <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Skatīt un pārvaldīt ekrānu"</string>
+    <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Ekrāna skatīšana un pārvaldīšana"</string>
     <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"Tā var nolasīt visu ekrānā esošo saturu un attēlot saturu citām lietotnēm."</string>
     <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"Darbību skatīšana un veikšana"</string>
     <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"Tā var izsekot jūsu mijiedarbību ar lietotni vai aparatūras sensoru un mijiedarboties ar lietotnēm jūsu vārdā."</string>
@@ -1852,7 +1856,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Lai izietu, no augšdaļas velciet lejup."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Labi"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Lai uzlabotu skatu, pagrieziet ekrānu."</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Lai uzlabotu skatu, izejiet no ekrāna sadalīšanas režīma."</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Labākam skatam atveriet lietotni <xliff:g id="NAME">%s</xliff:g> pilnekrāna režīmā."</string>
     <string name="done_label" msgid="7283767013231718521">"Gatavs"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Stundu apļveida slīdnis"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Minūšu apļveida slīdnis"</string>
@@ -1958,7 +1962,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Lietotne nav pieejama"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Lietotne <xliff:g id="APP_NAME">%1$s</xliff:g> pašlaik nav pieejama."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> nav pieejams"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Nepieciešama atļauja"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Atļaujas pieprasījums bloķēts"</string>
     <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>
@@ -1969,6 +1973,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Šī lietotne pieprasa papildu atļaujas, taču atļaujas nevar piešķirt straumēšanas sesijā. Vispirms piešķiriet attiecīgo atļauju savā Android TV ierīcē."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Šī lietotne pieprasa papildu atļaujas, taču atļaujas nevar piešķirt straumēšanas sesijā. Vispirms piešķiriet attiecīgo atļauju savā planšetdatorā."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Šī lietotne pieprasa papildu atļaujas, taču atļaujas nevar piešķirt straumēšanas sesijā. Vispirms piešķiriet attiecīgo atļauju 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>
@@ -1977,6 +1984,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Ierīcē <xliff:g id="DEVICE">%1$s</xliff:g> nevar piekļūt šai funkcijai. Mēģiniet tai piekļūt tālrunī."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Šī lietotne ir paredzēta vecākai Android versijai. Tā var nedarboties pareizi un neietver jaunākās drošības un konfidencialitātes aizsardzības funkcijas. Pārbaudiet atjauninājumu pieejamību vai sazinieties ar lietotnes izstrādātāju."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Meklēt atjauninājumu"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Šī lietotne nav saderīga ar jaunāko Android versiju. Pārbaudiet atjauninājumu pieejamību vai sazinieties ar lietotnes izstrādātāju."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Jums ir jaunas īsziņas."</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Lai skatītu, atveriet īsziņu lietotni."</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Funkcijas var būt ierobežotas"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Šo saturu nevar atvērt darba lietotnēs"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Šo saturu nevar kopīgot ar personīgajām lietotnēm"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Šo saturu nevar atvērt personīgajās lietotnēs"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Darba profila darbība ir apturēta."</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Lai ieslēgtu, pieskarieties"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Darba lietotnes ir apturētas."</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Aktivizēt"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nav darba lietotņu"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nav personīgu lietotņu"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Vai atvērt lietotni <xliff:g id="APP">%s</xliff:g> darba profilā?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Vai atvērt lietotnes <xliff:g id="APP">%s</xliff:g> personīgajā profilā?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Vai atvērt lietotnes <xliff:g id="APP">%s</xliff:g> darba profilā?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Vai zvanīt no darba lietotnes?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Vai pārslēgties uz darba lietotni?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Jūsu organizācija ļauj jums veikt zvanus tikai no darba lietotnēm."</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Jūsu organizācija ļauj jums sūtīt ziņojumus tikai no darba lietotnēm."</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Izmantot personīgo pārlūku"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Izmantot darba pārlūku"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Zvanīt"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Pārslēgties"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM tīkla atbloķēšanas PIN"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM tīkla apakškopas atbloķēšanas PIN"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM Corporate atbloķēšanas PIN"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Nevar piekļūt tālruņa kamerai no jūsu ierīces (<xliff:g id="DEVICE">%1$s</xliff:g>)."</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Nevar piekļūt planšetdatora kamerai no jūsu ierīces (<xliff:g id="DEVICE">%1$s</xliff:g>)."</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Straumēšanas laikā nevar piekļūt šim saturam. Mēģiniet tam piekļūt savā tālrunī."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Straumēšanas laikā nevar skatīt attēlu attēlā"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Sistēmas noklusējums"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KARTE <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Palīglietotnes pulksteņa profila atļauja pārvaldīt pulksteņus"</string>
diff --git a/core/res/res/values-mcc310-mnc030-eu/strings.xml b/core/res/res/values-mcc310-mnc030-eu/strings.xml
index 45ce091..3bd918d7 100644
--- a/core/res/res/values-mcc310-mnc030-eu/strings.xml
+++ b/core/res/res/values-mcc310-mnc030-eu/strings.xml
@@ -21,6 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="mmcc_imsi_unknown_in_hlr" msgid="656054059094417927">"Ez dago SIMik MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="1782569305985001089">"Ez da onartzen SIM txartela MM#3"</string>
+    <string name="mmcc_illegal_ms" msgid="1782569305985001089">"Ez da onartzen SIMa MM#3"</string>
     <string name="mmcc_illegal_me" msgid="8246632898824321280">"Telefonoa ez da onartzen MM#6"</string>
 </resources>
diff --git a/core/res/res/values-mcc310-mnc030-my/strings.xml b/core/res/res/values-mcc310-mnc030-my/strings.xml
index 9622aa1..ad24fed 100644
--- a/core/res/res/values-mcc310-mnc030-my/strings.xml
+++ b/core/res/res/values-mcc310-mnc030-my/strings.xml
@@ -20,7 +20,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mmcc_imsi_unknown_in_hlr" msgid="656054059094417927">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="1782569305985001089">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="656054059094417927">"ဆင်းမ်ကတ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="1782569305985001089">"ဆင်းမ်ကတ်ကို ခွင့်မပြုပါ MM#3"</string>
     <string name="mmcc_illegal_me" msgid="8246632898824321280">"ဖုန်းကို ခွင့်မပြုပါ MM#6"</string>
 </resources>
diff --git a/core/res/res/values-mcc310-mnc170-eu/strings.xml b/core/res/res/values-mcc310-mnc170-eu/strings.xml
index 76e30b0..e9f761f 100644
--- a/core/res/res/values-mcc310-mnc170-eu/strings.xml
+++ b/core/res/res/values-mcc310-mnc170-eu/strings.xml
@@ -21,6 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="mmcc_imsi_unknown_in_hlr" msgid="5424518490295341205">"Ez dago SIMik MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="3527626511418944853">"Ez da onartzen SIM txartela MM#3"</string>
+    <string name="mmcc_illegal_ms" msgid="3527626511418944853">"Ez da onartzen SIMa MM#3"</string>
     <string name="mmcc_illegal_me" msgid="3948912590657398489">"Telefonoa ez da onartzen MM#6"</string>
 </resources>
diff --git a/core/res/res/values-mcc310-mnc170-my/strings.xml b/core/res/res/values-mcc310-mnc170-my/strings.xml
index f018b24..d782bd4 100644
--- a/core/res/res/values-mcc310-mnc170-my/strings.xml
+++ b/core/res/res/values-mcc310-mnc170-my/strings.xml
@@ -20,7 +20,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mmcc_imsi_unknown_in_hlr" msgid="5424518490295341205">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="3527626511418944853">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="5424518490295341205">"ဆင်းမ်ကတ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="3527626511418944853">"ဆင်းမ်ကတ်ကို ခွင့်မပြုပါ MM#3"</string>
     <string name="mmcc_illegal_me" msgid="3948912590657398489">"ဖုန်းကို ခွင့်မပြုပါ MM#6"</string>
 </resources>
diff --git a/core/res/res/values-mcc310-mnc280-eu/strings.xml b/core/res/res/values-mcc310-mnc280-eu/strings.xml
index fbf7044..1398951 100644
--- a/core/res/res/values-mcc310-mnc280-eu/strings.xml
+++ b/core/res/res/values-mcc310-mnc280-eu/strings.xml
@@ -21,6 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="mmcc_imsi_unknown_in_hlr" msgid="1070849538022865416">"Ez dago SIMik MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="499832197298480670">"Ez da onartzen SIM txartela MM#3"</string>
+    <string name="mmcc_illegal_ms" msgid="499832197298480670">"Ez da onartzen SIMa MM#3"</string>
     <string name="mmcc_illegal_me" msgid="2346111479504469688">"Telefonoa ez da onartzen MM#6"</string>
 </resources>
diff --git a/core/res/res/values-mcc310-mnc280-my/strings.xml b/core/res/res/values-mcc310-mnc280-my/strings.xml
index 3f3097e..e42826d 100644
--- a/core/res/res/values-mcc310-mnc280-my/strings.xml
+++ b/core/res/res/values-mcc310-mnc280-my/strings.xml
@@ -20,7 +20,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mmcc_imsi_unknown_in_hlr" msgid="1070849538022865416">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="499832197298480670">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="1070849538022865416">"ဆင်းမ်ကတ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="499832197298480670">"ဆင်းမ်ကတ်ကို ခွင့်မပြုပါ MM#3"</string>
     <string name="mmcc_illegal_me" msgid="2346111479504469688">"ဖုန်းကို ခွင့်မပြုပါ MM#6"</string>
 </resources>
diff --git a/core/res/res/values-mcc310-mnc380-eu/strings.xml b/core/res/res/values-mcc310-mnc380-eu/strings.xml
index c3fb1bc..8d7e355 100644
--- a/core/res/res/values-mcc310-mnc380-eu/strings.xml
+++ b/core/res/res/values-mcc310-mnc380-eu/strings.xml
@@ -21,5 +21,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="mmcc_imsi_unknown_in_hlr" msgid="6178029798083341927">"Ez dago SIMik MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="6084322234976891423">"Ez da onartzen SIM txartela MM#3"</string>
+    <string name="mmcc_illegal_ms" msgid="6084322234976891423">"Ez da onartzen SIMa MM#3"</string>
 </resources>
diff --git a/core/res/res/values-mcc310-mnc380-my/strings.xml b/core/res/res/values-mcc310-mnc380-my/strings.xml
index 8f33ac2..14f9beb 100644
--- a/core/res/res/values-mcc310-mnc380-my/strings.xml
+++ b/core/res/res/values-mcc310-mnc380-my/strings.xml
@@ -20,6 +20,6 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mmcc_imsi_unknown_in_hlr" msgid="6178029798083341927">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="6084322234976891423">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="6178029798083341927">"ဆင်းမ်ကတ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="6084322234976891423">"ဆင်းမ်ကတ်ကို ခွင့်မပြုပါ MM#3"</string>
 </resources>
diff --git a/core/res/res/values-mcc310-mnc410-eu/strings.xml b/core/res/res/values-mcc310-mnc410-eu/strings.xml
index b023bcc..dc3a408 100644
--- a/core/res/res/values-mcc310-mnc410-eu/strings.xml
+++ b/core/res/res/values-mcc310-mnc410-eu/strings.xml
@@ -21,6 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="mmcc_imsi_unknown_in_hlr" msgid="8861901652350883183">"Ez dago SIMik MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="2604694337529846283">"Ez da onartzen SIM txartela MM#3"</string>
+    <string name="mmcc_illegal_ms" msgid="2604694337529846283">"Ez da onartzen SIMa MM#3"</string>
     <string name="mmcc_illegal_me" msgid="3099618295079374317">"Telefonoa ez da onartzen MM#6"</string>
 </resources>
diff --git a/core/res/res/values-mcc310-mnc410-my/strings.xml b/core/res/res/values-mcc310-mnc410-my/strings.xml
index fff7f69..53e67b0 100644
--- a/core/res/res/values-mcc310-mnc410-my/strings.xml
+++ b/core/res/res/values-mcc310-mnc410-my/strings.xml
@@ -20,7 +20,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mmcc_imsi_unknown_in_hlr" msgid="8861901652350883183">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="2604694337529846283">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="8861901652350883183">"ဆင်းမ်ကတ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="2604694337529846283">"ဆင်းမ်ကတ်ကို ခွင့်မပြုပါ MM#3"</string>
     <string name="mmcc_illegal_me" msgid="3099618295079374317">"ဖုန်းကို ခွင့်မပြုပါ MM#6"</string>
 </resources>
diff --git a/core/res/res/values-mcc310-mnc560-eu/strings.xml b/core/res/res/values-mcc310-mnc560-eu/strings.xml
index a0a46f6..8b2e7d4 100644
--- a/core/res/res/values-mcc310-mnc560-eu/strings.xml
+++ b/core/res/res/values-mcc310-mnc560-eu/strings.xml
@@ -21,6 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="mmcc_imsi_unknown_in_hlr" msgid="3526528316378889524">"Ez dago SIMik MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="4618730283812066268">"Ez da onartzen SIM txartela MM#3"</string>
+    <string name="mmcc_illegal_ms" msgid="4618730283812066268">"Ez da onartzen SIMa MM#3"</string>
     <string name="mmcc_illegal_me" msgid="8522039751358990401">"Telefonoa ez da onartzen MM#6"</string>
 </resources>
diff --git a/core/res/res/values-mcc310-mnc560-my/strings.xml b/core/res/res/values-mcc310-mnc560-my/strings.xml
index df12a44..56384dc 100644
--- a/core/res/res/values-mcc310-mnc560-my/strings.xml
+++ b/core/res/res/values-mcc310-mnc560-my/strings.xml
@@ -20,7 +20,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mmcc_imsi_unknown_in_hlr" msgid="3526528316378889524">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="4618730283812066268">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="3526528316378889524">"ဆင်းမ်ကတ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="4618730283812066268">"ဆင်းမ်ကတ်ကို ခွင့်မပြုပါ MM#3"</string>
     <string name="mmcc_illegal_me" msgid="8522039751358990401">"ဖုန်းကို ခွင့်မပြုပါ MM#6"</string>
 </resources>
diff --git a/core/res/res/values-mcc310-mnc950-eu/strings.xml b/core/res/res/values-mcc310-mnc950-eu/strings.xml
index 5a34371..92de262 100644
--- a/core/res/res/values-mcc310-mnc950-eu/strings.xml
+++ b/core/res/res/values-mcc310-mnc950-eu/strings.xml
@@ -21,6 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="mmcc_imsi_unknown_in_hlr" msgid="615419724607901560">"Ez dago SIMik MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="7801541624846497489">"Ez da onartzen SIM txartela MM#3"</string>
+    <string name="mmcc_illegal_ms" msgid="7801541624846497489">"Ez da onartzen SIMa MM#3"</string>
     <string name="mmcc_illegal_me" msgid="7066936962628406316">"Telefonoa ez da onartzen MM#6"</string>
 </resources>
diff --git a/core/res/res/values-mcc310-mnc950-my/strings.xml b/core/res/res/values-mcc310-mnc950-my/strings.xml
index c66f168..366b5c4 100644
--- a/core/res/res/values-mcc310-mnc950-my/strings.xml
+++ b/core/res/res/values-mcc310-mnc950-my/strings.xml
@@ -20,7 +20,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mmcc_imsi_unknown_in_hlr" msgid="615419724607901560">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="7801541624846497489">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="615419724607901560">"ဆင်းမ်ကတ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="7801541624846497489">"ဆင်းမ်ကတ်ကို ခွင့်မပြုပါ MM#3"</string>
     <string name="mmcc_illegal_me" msgid="7066936962628406316">"ဖုန်းကို ခွင့်မပြုပါ MM#6"</string>
 </resources>
diff --git a/core/res/res/values-mcc311-mnc180-eu/strings.xml b/core/res/res/values-mcc311-mnc180-eu/strings.xml
index d843c4f..3cacf6b 100644
--- a/core/res/res/values-mcc311-mnc180-eu/strings.xml
+++ b/core/res/res/values-mcc311-mnc180-eu/strings.xml
@@ -21,6 +21,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="mmcc_imsi_unknown_in_hlr" msgid="604133804161351810">"Ez dago SIMik MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="4073997279280371621">"Ez da onartzen SIM txartela MM#3"</string>
+    <string name="mmcc_illegal_ms" msgid="4073997279280371621">"Ez da onartzen SIMa MM#3"</string>
     <string name="mmcc_illegal_me" msgid="4936539345546223576">"Telefonoa ez da onartzen MM#6"</string>
 </resources>
diff --git a/core/res/res/values-mcc311-mnc180-my/strings.xml b/core/res/res/values-mcc311-mnc180-my/strings.xml
index 132f77a..0120098 100644
--- a/core/res/res/values-mcc311-mnc180-my/strings.xml
+++ b/core/res/res/values-mcc311-mnc180-my/strings.xml
@@ -20,7 +20,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mmcc_imsi_unknown_in_hlr" msgid="604133804161351810">"ဆင်းမ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
-    <string name="mmcc_illegal_ms" msgid="4073997279280371621">"ဆင်းမ်ကို ခွင့်မပြုပါ MM#3"</string>
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="604133804161351810">"ဆင်းမ်ကတ်ကို ထောက်ပံ့မထားပါ MM#2"</string>
+    <string name="mmcc_illegal_ms" msgid="4073997279280371621">"ဆင်းမ်ကတ်ကို ခွင့်မပြုပါ MM#3"</string>
     <string name="mmcc_illegal_me" msgid="4936539345546223576">"ဖုန်းကို ခွင့်မပြုပါ MM#6"</string>
 </resources>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index 6063812..678d167 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -91,7 +91,7 @@
     <string name="notification_channel_mobile_data_status" msgid="1941911162076442474">"Статус на мобилна мрежа"</string>
     <string name="notification_channel_sms" msgid="1243384981025535724">"SMS-пораки"</string>
     <string name="notification_channel_voice_mail" msgid="8457433203106654172">"Пораки од говорна пошта"</string>
-    <string name="notification_channel_wfc" msgid="9048240466765169038">"Повикување преку Wi-Fi"</string>
+    <string name="notification_channel_wfc" msgid="9048240466765169038">"Повици преку Wi-Fi"</string>
     <string name="notification_channel_sim" msgid="5098802350325677490">"Статус на SIM-картичка"</string>
     <string name="notification_channel_sim_high_prio" msgid="642361929452850928">"Статус на SIM-известувања со висок приоритет"</string>
     <string name="peerTtyModeFull" msgid="337553730440832160">"Рамноправен уред го побара режимот на TTY „FULL“"</string>
@@ -122,7 +122,7 @@
     <string name="roamingTextSearching" msgid="5323235489657753486">"Пребарување за услуга"</string>
     <string name="wfcRegErrorTitle" msgid="3193072971584858020">"Не може да се постави функцијата „Повици преку Wi-Fi“"</string>
   <string-array name="wfcOperatorErrorAlertMessages">
-    <item msgid="468830943567116703">"За да воспоставувате повици и да испраќате пораки преку Wi-Fi, прво побарајте од операторот да ја постави услугава. Потоа, вклучете ја повторно „Повикување преку Wi-Fi“ во „Поставки“. (Код за грешка: <xliff:g id="CODE">%1$s</xliff:g>)"</item>
+    <item msgid="468830943567116703">"За да воспоставувате повици и да испраќате пораки преку Wi-Fi, прво побарајте од операторот да ја постави услугава. Потоа, вклучете ја повторно „Повици преку Wi-Fi“ во „Поставки“. (Код за грешка: <xliff:g id="CODE">%1$s</xliff:g>)"</item>
   </string-array>
   <string-array name="wfcOperatorErrorNotificationMessages">
     <item msgid="4795145070505729156">"Проблем при регистрирањето на функцијата „Повици преку Wi‑Fi“ со операторот: <xliff:g id="CODE">%1$s</xliff:g>"</item>
@@ -130,15 +130,15 @@
     <!-- no translation found for wfcSpnFormat_spn (2982505428519096311) -->
     <skip />
     <string name="wfcSpnFormat_spn_wifi_calling" msgid="3165949348000906194">"Повици преку Wi-Fi на <xliff:g id="SPN">%s</xliff:g>"</string>
-    <string name="wfcSpnFormat_spn_wifi_calling_vo_hyphen" msgid="3836827895369365298">"Повикување преку Wi-Fi на <xliff:g id="SPN">%s</xliff:g>"</string>
+    <string name="wfcSpnFormat_spn_wifi_calling_vo_hyphen" msgid="3836827895369365298">"Повици преку Wi-Fi на <xliff:g id="SPN">%s</xliff:g>"</string>
     <string name="wfcSpnFormat_wlan_call" msgid="4895315549916165700">"Повик преку WLAN"</string>
     <string name="wfcSpnFormat_spn_wlan_call" msgid="255919245825481510">"Повик преку WLAN на <xliff:g id="SPN">%s</xliff:g>"</string>
     <string name="wfcSpnFormat_spn_wifi" msgid="7232899594327126970">"Wi-Fi на <xliff:g id="SPN">%s</xliff:g>"</string>
     <string name="wfcSpnFormat_wifi_calling_bar_spn" msgid="8383917598312067365">"Повици преку Wi-Fi | <xliff:g id="SPN">%s</xliff:g>"</string>
     <string name="wfcSpnFormat_spn_vowifi" msgid="6865214948822061486">"Глас преку Wi-Fi на <xliff:g id="SPN">%s</xliff:g>"</string>
-    <string name="wfcSpnFormat_wifi_calling" msgid="6178935388378661755">"Повикување преку Wi-Fi"</string>
+    <string name="wfcSpnFormat_wifi_calling" msgid="6178935388378661755">"Повици преку Wi-Fi"</string>
     <string name="wfcSpnFormat_wifi" msgid="1376356951297043426">"Wi-Fi"</string>
-    <string name="wfcSpnFormat_wifi_calling_wo_hyphen" msgid="7178561009225028264">"Повикување преку Wi-Fi"</string>
+    <string name="wfcSpnFormat_wifi_calling_wo_hyphen" msgid="7178561009225028264">"Повици преку Wi-Fi"</string>
     <string name="wfcSpnFormat_vowifi" msgid="8371335230890725606">"Глас преку Wi-Fi"</string>
     <string name="wfcSpnFormat_wifi_call" msgid="434016592539090004">"Повик преку WiFi"</string>
     <string name="wifi_calling_off_summary" msgid="5626710010766902560">"Исклучено"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Систем Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Префрли на личен профил"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Префрли се на работен профил"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Префрлете се на личната апликација <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Префрлете се на работната апликација <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Контакти"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"пристапува до контактите"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Локација"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Дозволува апликацијата да ги контролира вибрациите."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ѝ дозволува на апликацијата да пристапи до состојбата на вибрации."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"директно избирај телефонски броеви"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Овозможува апликацијата да повикува телефонски броеви без ваша интервенција. Ова може да предизвика неочекувани трошоци или повици. Имајте на ум дека ова не дозволува апликацијата да повикува броеви на служби за итна помош. Злонамерните апликации може да ве чинат пари поради повици без ваша потврда."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Дозволува апликацијата да повика кој било телефонски број без ваша интервенција. Поради тоа може да дојде до неочекувани плаќања или повици. Имајте на ум дека ова не дозволува апликацијата да повикува броеви за итни случаи. Злонамерните апликации може да ве чинат пари со упатување повици без ваша потврда или бирање шифри на оператор што предизвикуваат дојдовните повици автоматски да се проследуваат до друг број."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"пристапи до услугата за повици IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Дозволува апликацијата да ја користи услугата IMS за повици без ваша интервенција."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"прочитај ги статусот и идентитетот  на телефонот"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Дозволува апликацијата да добие информации за претпочитаната услуга за плаќање преку NFC, како регистрирани помагала и дестинација на маршрутата."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"контролирај комуникација на блиско поле"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Дозволува апликацијата да комуницира со ознаки, картички и читачи за Комуникација при непосредна близина (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Трансакциски настан на безбедносен елемент"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Овозможува апликацијата да прима податоци за трансакциите што се случуваат на безбедносен елемент."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"оневозможи заклучување на екран"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Овозможува апликацијата да го оневозможи заклучувањето и каква било безбедност поврзана со лозинка. На пример, телефонот го оневозможува заклучувањето при прием на телефонски повик, а потоа повторно го овозможува заклучувањето кога повикот ќе заврши."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"побарува сложеност за заклучувањето на екранот"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Користи биометрика или заклучен екран"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Потврдете дека сте вие"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Користете ја вашата биометрика за да продолжите"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Користете го отпечатокот за да продолжите"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Користете го вашиот лик за да продолжите"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Користете ја вашата биометрика или заклучување екран за да продолжите"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Биометрискиот хардвер е недостапен"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Проверката е откажана"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Непознат"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Ликот не е препознаен"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Проверката е откажана"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Не е поставен PIN, шема или лозинка"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Грешка при проверката"</string>
@@ -633,7 +640,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Премногу светло"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Откриено е притискање на копчето за вклучување"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Пробајте да го приспособите прстот"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Менувајте ја положбата на прстот по малку секој пат"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Менувајте ја положбата на прстот секојпат по малку"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Отпечатокот не е препознаен"</string>
@@ -665,7 +672,7 @@
     <string name="fingerprint_icon_content_description" msgid="4741068463175388817">"Икона за отпечатоци"</string>
     <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"Отклучување со лик"</string>
     <string name="face_recalibrate_notification_title" msgid="2524791952735579082">"Проблем со „Отклучување со лик“"</string>
-    <string name="face_recalibrate_notification_content" msgid="3064513770251355594">"Допрете за да го избришете вашиот модел на лице, а потоа повторно додајте го лицето"</string>
+    <string name="face_recalibrate_notification_content" msgid="3064513770251355594">"Допрете за да го избришете вашиот модел на лик, а потоа повторно додајте го ликот"</string>
     <string name="face_setup_notification_title" msgid="8843461561970741790">"Поставете „Отклучување со лик“"</string>
     <string name="face_setup_notification_content" msgid="5463999831057751676">"Отклучете го телефонот со гледање во него"</string>
     <string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"За да користите „Отклучување со лик“, вклучете "<b>"Пристап до камерата"</b>" во „Поставки &gt; Приватност“"</string>
@@ -679,12 +686,12 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"Нема доволно светлина"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Оддалечете го телефонот"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Доближете го телефонот"</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"Кренете го телефонот погоре"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"Спуштете го телефонот подолу"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"Поткренете го телефонот"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"Снижете го телефонот"</string>
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Поместете го телефонот налево"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Поместете го телефонот надесно"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Погледнете подиректно во уредот."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Не ви се гледа ликот. Држете го телефонот во висина на очите."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Не се гледа ликот. Држете го телефонот во висина на очите."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Премногу движење. Држете го телефонот стабилно."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Повторно регистрирајте го лицето."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Не се препознава ликот. Обидете се пак."</string>
@@ -692,7 +699,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Гледајте подиректно во телефонот"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Гледајте подиректно во телефонот"</string>
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Гледајте подиректно во телефонот"</string>
-    <string name="face_acquired_obscured" msgid="4917643294953326639">"Отстранете ги работите што ви го покриваат лицето."</string>
+    <string name="face_acquired_obscured" msgid="4917643294953326639">"Отстранете ги работите што ви го покриваат ликот"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Исчистете го врвот на екранот, вклучувајќи ја црната лента"</string>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Ликот е покриен. Ликот мора да ви се гледа целосно."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Ликот не може да се потврди. Хардвер - недостапен."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Операцијата со лице се откажа."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Корисникот го откажа „Отклучувањето со лик“"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Премногу обиди. Обидете се повторно подоцна."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Премногу обиди. „Отклучување со лик“ е недостапна."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Премногу обиди. Наместо тоа, користете го заклучувањето на екранот."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Ликот не може да се потврди. Обидете се повторно."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Не сте поставиле „Отклучување со лик“"</string>
@@ -1255,7 +1261,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Се стартуваат апликациите."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Подигањето завршува."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Го притиснавте копчето за вклучување — така обично се исклучува екранот.\n\nДопрете лесно додека го поставувате отпечатокот."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"За да завршите со поставувањето, исклучете го екранот."</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"За излез, исклучете го екранот"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Исклучи"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Да продолжи потврдувањето на отпечаток?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Го притиснавте копчето за вклучување — така обично се исклучува екранот.\n\nДопрете лесно за да го потврдите отпечатокот."</string>
@@ -1283,13 +1289,13 @@
     <string name="volume_call" msgid="7625321655265747433">"Јачина на звук на дојдовен повик"</string>
     <string name="volume_bluetooth_call" msgid="2930204618610115061">"Јачина на звук на дојдовен повик преку Bluetooth"</string>
     <string name="volume_alarm" msgid="4486241060751798448">"Јачина на звук за аларм"</string>
-    <string name="volume_notification" msgid="6864412249031660057">"Јачина на звук на известување"</string>
+    <string name="volume_notification" msgid="6864412249031660057">"Јачина на звук за известување"</string>
     <string name="volume_unknown" msgid="4041914008166576293">"Јачина на звук"</string>
     <string name="volume_icon_description_bluetooth" msgid="7540388479345558400">"Јачина на звук на Bluetooth"</string>
     <string name="volume_icon_description_ringer" msgid="2187800636867423459">"Јачина на звук на мелодија"</string>
     <string name="volume_icon_description_incall" msgid="4491255105381227919">"Јачина на звук на повик"</string>
     <string name="volume_icon_description_media" msgid="4997633254078171233">"Јачина на аудио/видео звук"</string>
-    <string name="volume_icon_description_notification" msgid="579091344110747279">"Јачина на звук на известување"</string>
+    <string name="volume_icon_description_notification" msgid="579091344110747279">"Јачина на звук за известување"</string>
     <string name="ringtone_default" msgid="9118299121288174597">"Стандардна мелодија"</string>
     <string name="ringtone_default_with_actual" msgid="2709686194556159773">"Стандардна (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
     <string name="ringtone_silent" msgid="397111123930141876">"Ниедна"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ОДБИЈ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Одбери метод на внес"</string>
     <string name="show_ime" msgid="6406112007347443383">"Прикажувај ја на екранот додека е активна физичката тастатура"</string>
-    <string name="hardware" msgid="1800597768237606953">"Прикажи виртуелна тастатура"</string>
+    <string name="hardware" msgid="3611039921284836033">"Користете тастатура на екран"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Конфигурирање на <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Конфигурирање физички тастатури"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Допрете за избирање јазик и распоред"</string>
@@ -1555,7 +1561,7 @@
     <string name="date_picker_prev_month_button" msgid="3418694374017868369">"Претходниот месец"</string>
     <string name="date_picker_next_month_button" msgid="4858207337779144840">"Следниот месец"</string>
     <string name="keyboardview_keycode_alt" msgid="8997420058584292385">"Копче „Alt“"</string>
-    <string name="keyboardview_keycode_cancel" msgid="2134624484115716975">"Копче „Откажи“"</string>
+    <string name="keyboardview_keycode_cancel" msgid="2134624484115716975">"Откажи"</string>
     <string name="keyboardview_keycode_delete" msgid="2661117313730098650">"Копче „Избриши“"</string>
     <string name="keyboardview_keycode_done" msgid="2524518019001653851">"Копче „Готово“"</string>
     <string name="keyboardview_keycode_mode_change" msgid="2743735349997999020">"Копче „Промени режим“"</string>
@@ -1618,7 +1624,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"Таблет"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Телевизор"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Телефон"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Приклучи звучници"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Звучници на док"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Надворешен уред"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Слушалки"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Отстрани"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Да го зголемиме звукот над препорачаното ниво?\n\nСлушањето звуци со голема јачина подолги периоди може да ви го оштети сетилото за слух."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Опомена,\nго надминавте ограничувањето за гласни звучни сигнали кои може безбедно да се слушаат во една седмица на слушалки.\n\nАко го надминете ограничувањево, може да го оштетите слухот."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Опомена,\nго надминавте ограничувањето од 5 гласни звучни сигнали кои може безбедно да се слушаат во една седмица на слушалки.\n\nГласноста е намалена за да ви се заштити слухот."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Гласноста со која слушате аудиовизуелни содржини може да предизвика оштетување на слухот ако трае подолг временски период.\n\nАко продолжите да слушате со оваа гласност подолг временски период, може да го оштетите слухот."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Опомена,\nтековно слушате гласни содржини што се репродуцираат со небезбедна гласност.\n\nАко продолжите да слушате волку гласно, може трајно да го оштетите слухот."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Сакате да продолжите да слушате со висока јачина на звукот?\n\nЈачината на звукот на слушалките беше висока подолго од препорачаното, што може да доведе до оштетување на слухот"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Откриен е гласен звук\n\nЈачината на звукот на слушалките беше повисока од препорачаната, што може да доведе до оштетување на слухот"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Да се користи кратенка за „Пристапност“?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Кога е вклучена кратенката, ако ги притиснете двете копчиња за јачина на звук во времетраење од 3 секунди, ќе се стартува функција за пристапност."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Да се вклучи кратенка за функциите за пристапност?"</string>
@@ -1696,12 +1700,12 @@
     <string name="accessibility_shortcut_off" msgid="3651336255403648739">"Не вклучувај"</string>
     <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ВКЛУЧЕНО"</string>
     <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ИСКЛУЧЕНО"</string>
-    <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Дали дозволувате <xliff:g id="SERVICE">%1$s</xliff:g> да има целосна контрола врз вашиот уред?"</string>
+    <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Да се дозволи <xliff:g id="SERVICE">%1$s</xliff:g> да има целосна контрола врз вашиот уред?"</string>
     <string name="accessibility_service_warning_description" msgid="291674995220940133">"Целосната контрола е соодветна за апликации што ви помагаат со потребите за пристапност, но не и за повеќето апликации."</string>
-    <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Приказ и контрола на екранот"</string>
+    <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Преглед и контрола на екранот"</string>
     <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"Може да ги чита сите содржини на екранот и да прикажува содржини врз другите апликации."</string>
     <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"Преглед и вршење дејства"</string>
-    <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"Може да ја следи вашата интеракција со апликациите или хардверскиот сензор и да врши интеракција со апликациите во ваше име."</string>
+    <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"Може да ја следи вашата интеракција со апликациите или со хардверските сензори и да врши интеракција со апликациите во ваше име."</string>
     <string name="accessibility_dialog_button_allow" msgid="2092558122987144530">"Дозволи"</string>
     <string name="accessibility_dialog_button_deny" msgid="4129575637812472671">"Одбиј"</string>
     <string name="accessibility_select_shortcut_menu_title" msgid="6002726538854613272">"Допрете на функција за да почнете да ја користите:"</string>
@@ -1724,7 +1728,7 @@
     <string name="accessibility_gesture_prompt_text" msgid="8742535972130563952">"Изберете ја функцијата што ќе ја користите со движењето за пристапност (повлекување нагоре од дното на екранот со два прста):"</string>
     <string name="accessibility_gesture_3finger_prompt_text" msgid="5211827854510660203">"Изберете ја функцијата што ќе ја користите со движењето за пристапност (повлекување нагоре од дното на екранот со три прста):"</string>
     <string name="accessibility_button_instructional_text" msgid="8853928358872550500">"За префрлање помеѓу функциите, допрете и задржете го копчето за пристапност."</string>
-    <string name="accessibility_gesture_instructional_text" msgid="9196230728837090497">"За префрлање помеѓу функциите, повлечете нагоре со два прста и задржете."</string>
+    <string name="accessibility_gesture_instructional_text" msgid="9196230728837090497">"За да се префрлите на друга функција, повлечете нагоре со два прста и задржете."</string>
     <string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"За префрлање помеѓу функциите, повлечете нагоре со три прста и задржете."</string>
     <string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Зголемување"</string>
     <string name="user_switched" msgid="7249833311585228097">"Тековен корисник <xliff:g id="NAME">%1$s</xliff:g>."</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"За да излезете, повлечете одозгора надолу."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Сфатив"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Ротирајте за подобар приказ"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"За подобар приказ, излезете од поделениот екран"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"За подобар приказ, отворете ја апликацијата <xliff:g id="NAME">%s</xliff:g> на цел екран"</string>
     <string name="done_label" msgid="7283767013231718521">"Готово"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Приказ на часови во кружно движење"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Приказ на минути во кружно движење"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Апликацијата не е достапна"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> не е достапна во моментов."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> е недостапна"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Потребна е дозвола"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Барањето за дозвола е потиснато"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Апликацијава бара дополнителни дозволи, но нив не може да ги доделите во сесија за стриминг. Прво доделете ја дозволата на вашиот уред со Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Апликацијава бара дополнителни дозволи, но нив не може да ги доделите во сесија за стриминг. Прво доделете ја дозволата на вашиот таблет."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Апликацијава бара дополнителни дозволи, но нив не може да ги доделите во сесија за стриминг. Прво доделете ја дозволата на вашиот телефон."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"Оваа апликација е создадена за постара верзија на Android. Можеби нема да работи правилно и не ги вклучува најновите мерки за заштита на безбедноста и приватноста. Проверете дали има ажурирање или контактирајте со програмерот на апликацијата."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Проверка за ажурирање"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Апликацијава не е компатибилна со најновата верзија на Android. Проверете дали има ажурирање или контактирајте со програмерот на апликацијата."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Имате нови пораки"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Отворете ја апликацијата за SMS за приказ"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Некои функции се ограничени"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Овие содржини не може да се отвораат со работни апликации"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Овие содржини не може да се споделуваат со лични апликации"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Овие содржини не може да се отвораат со лични апликации"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Работниот профил е паузиран"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Допрете за да вклучите"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Работните апликации се паузирани"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Прекини ја паузата"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Нема работни апликации"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Нема лични апликации"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Да се отвори работната апликација <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Да се отвори во личната апликација <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Да се отвори во работната апликација <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Да се повика од работна апликација?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Да се префрли на работна апликација?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Вашата организација ви дозволува да упатувате повици само од работни апликации"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Вашата организација ви дозволува да испраќате пораки само од работни апликации"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Користи личен прелистувач"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Користи работен прелистувач"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Повикај"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Префрли"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN за отклучување на мрежата на SIM-картичката"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN за отклучување на подмножество на мрежата на SIM-картичката"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN за отклучување на корпоративната SIM-картичка"</string>
@@ -2305,7 +2318,8 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Не може да се пристапи до камерата на вашиот телефон од <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Не може да се пристапи до камерата на вашиот таблет од <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"До ова не може да се пристапи при стриминг. Наместо тоа, пробајте на вашиот телефон."</string>
-    <string name="system_locale_title" msgid="711882686834677268">"Стандардно за системот"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Не може да се прикажува слика во слика при стримување"</string>
+    <string name="system_locale_title" msgid="711882686834677268">"Стандарден за системот"</string>
     <string name="default_card_name" msgid="9198284935962911468">"КАРТИЧКА <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Дозвола за профилот на придружен часовник за управување со часовници"</string>
     <string name="permdesc_companionProfileWatch" msgid="5655698581110449397">"Дозволува придружна апликација да управува со часовници."</string>
@@ -2317,14 +2331,14 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Дозволува придружна апликација да започне услуги во преден план од заднината."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Микрофонот е достапен"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Микрофонот е блокиран"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Двоен екран"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Вклучен е двоен екран"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Вклучен е Dual Screen"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> ги користи двата екрани за да прикажува содржини"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Уредот е претопол"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Двојниот екран е недостапен бидејќи вашиот телефон станува претопол"</string>
-    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"„Двојниот екран“ е недостапен"</string>
-    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Двојниот екран е недостапен бидејќи е вклучен „Штедач на батерија“. Ова може да се исклучи во „Поставки“."</string>
-    <string name="device_state_notification_settings_button" msgid="691937505741872749">"Одете во „Поставките“"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dual Screen е недостапен бидејќи вашиот телефон станува претопол"</string>
+    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen е недостапен"</string>
+    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screen е недостапен бидејќи е вклучен „Штедач на батерија“. Ова може да се исклучи во „Поставки“."</string>
+    <string name="device_state_notification_settings_button" msgid="691937505741872749">"Отворете „Поставки“"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Исклучи"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> е конфигуриран"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Распоредот на тастатурата е поставен на <xliff:g id="LAYOUT_1">%s</xliff:g>. Допрете за да промените."</string>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index d32ec28..c2bce63c 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android സിസ്റ്റം"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"വ്യക്തിഗത പ്രൊഫൈലിലേക്ക് മാറുക"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"ഔദ്യോഗിക പ്രൊഫൈലിലേക്ക് മാറുക"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"വ്യക്തിപരമായ ആവശ്യത്തിനുള്ള <xliff:g id="APP_NAME">%1$s</xliff:g>-ലേക്ക് മാറുക"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"ഔദ്യോഗിക ആവശ്യത്തിനുള്ള <xliff:g id="APP_NAME">%1$s</xliff:g>-ലേക്ക് മാറുക"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"കോൺടാക്റ്റുകൾ"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"നിങ്ങളുടെ കോൺടാക്റ്റുകൾ ആക്‌സസ്സ് ചെയ്യുക"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"ലൊക്കേഷൻ"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"വൈബ്രേറ്റർ നിയന്ത്രിക്കുന്നതിന് അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"വൈബ്രേറ്റ് ചെയ്യൽ ആക്‌സസ് ചെയ്യാൻ ആപ്പിനെ അനുവദിക്കുന്നു."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"ഫോൺ നമ്പറുകളിലേക്ക് നേരിട്ട് വിളിക്കുക"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"നിങ്ങളുടെ ഇടപെടൽ ഇല്ലാതെ ഫോൺ നമ്പറുകളിലേക്ക് കോൾ ചെയ്യാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു. ഇത് അപ്രതീക്ഷിത നിരക്കുകൾക്കോ കോളുകൾക്കോ ഇടയാക്കാം. ഇത് അടിയന്തര നമ്പറുകളിലേക്ക് വിളിക്കാൻ അപ്ലിക്കേഷനെ അനുവദിക്കില്ലെന്ന കാര്യം ശ്രദ്ധിക്കുക. ക്ഷുദ്രകരമായ അപ്ലിക്കേഷനുകൾ നിങ്ങളുടെ സ്ഥിരീകരണമില്ലാതെ കോളുകൾ ചെയ്യുന്നത് പണച്ചെലവിനിടയാക്കാം."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"നിങ്ങളുടെ ഇടപെടലില്ലാതെ ഫോൺ നമ്പറുകളിലേക്ക് വിളിക്കാൻ ആപ്പിനെ അനുവദിക്കുന്നു. ഇത് അപ്രതീക്ഷിതമായ കോളുകൾക്കോ നിരക്കുകൾ നൽകേണ്ട സാഹചര്യത്തിനോ കാരണമായേക്കാം. അടിയന്തര നമ്പറുകളിലേക്ക് വിളിക്കാൻ ഇത് ആപ്പിനെ അനുവദിക്കുന്നില്ലെന്ന കാര്യം ശ്രദ്ധിക്കുക. നിങ്ങളുടെ സ്ഥിരീകരണമില്ലാതെ കോളുകൾ വിളിക്കുന്നതിലൂടെ ദോഷകരമായ ആപ്പുകൾ നിങ്ങൾക്ക് ധനനഷ്ടം ഉണ്ടാക്കിയേക്കാം, അല്ലെങ്കിൽ ഇൻകമിംഗ് കോളുകൾ സ്വയമേവ മറ്റൊരു നമ്പറിലേക്ക് കൈമാറാൻ കാരണമാകുന്ന കാരിയർ കോഡുകൾ ഡയൽ ചെയ്തേക്കാം."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS കോൾ സേവനം ആക്സസ് ചെയ്യുക"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"നിങ്ങളുടെ ഇടപെടൽ ഇല്ലാതെ കോളുകൾ ചെയ്യാൻ IMS സേവനം ഉപയോഗിക്കുന്നതിന് ആപ്പിനെ അനുവദിക്കുന്നു."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ഫോൺ നിലയും ഐഡന്റിറ്റിയും റീഡുചെയ്യുക"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"റൂട്ട് ലക്ഷ്യസ്ഥാനം, രജിസ്‌റ്റർ ചെയ്തിരിക്കുന്ന സഹായങ്ങൾ എന്നിവ പോലുള്ള, തിരഞ്ഞെടുത്ത NFC പേയ്‌മെന്റ് സേവനത്തെ സംബന്ധിച്ച വിവരങ്ങൾ ലഭിക്കാൻ ആപ്പിനെ അനുവദിക്കുന്നു."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"സമീപ ഫീൽഡുമായുള്ള ആശയവിനിമയം നിയന്ത്രിക്കുക"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"നിയർ ഫീൽഡ് കമ്മ്യൂണിക്കേഷൻ (NFC) ടാഗുകളുമായും കാർഡുകളുമായും റീഡറുകളുമായുള്ള ആശയവിനിമയത്തിന് അപ്ലിക്കേഷനുകളെ അനുവദിക്കുന്നു."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"സുരക്ഷിത ഘടക ഇടപാട് ഇവന്റ്"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"ഒരു സുരക്ഷിത ഘടകത്തിൽ നടക്കുന്ന ഇടപാടുകളെ കുറിച്ചുള്ള വിവരങ്ങൾ നേടാൻ ആപ്പിനെ അനുവദിക്കുന്നു."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"നിങ്ങളുടെ സ്‌ക്രീൻ ലോക്ക് പ്രവർത്തനരഹിതമാക്കുക"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"കീലോക്കും ഏതെങ്കിലും അനുബന്ധ പാസ്‌വേഡ് സുരക്ഷയും പ്രവർത്തനരഹിതമാക്കാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു. ഉദാഹരണത്തിന്, ഒരു ഇൻകമിംഗ് കോൾ സ്വീകരിക്കുമ്പോൾ ഫോൺ കീലോക്ക് പ്രവർത്തനരഹിതമാക്കുന്നു, കോൾ അവസാനിക്കുമ്പോൾ കീലോക്ക് വീണ്ടും പ്രവർത്തനക്ഷമമാകുന്നു."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"സ്‌ക്രീൻ ലോക്ക് സങ്കീർണ്ണത അഭ്യർത്ഥിക്കുക"</string>
@@ -614,26 +618,29 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ബയോമെട്രിക്‌സ് അല്ലെങ്കിൽ സ്‌ക്രീൻ ലോക്ക് ഉപയോഗിക്കുക"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"ഇത് നിങ്ങളാണെന്ന് പരിശോധിച്ചുറപ്പിക്കുക"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"തുടരാൻ ബയോമെട്രിക് ഉപയോഗിക്കുക"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"തുടരാൻ നിങ്ങളുടെ ഫിംഗർപ്രിന്റ് ഉപയോഗിക്കുക"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"തുടരാൻ നിങ്ങളുടെ മുഖം ഉപയോഗിക്കുക"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"തുടരാൻ നിങ്ങളുടെ ബയോമെട്രിക്‌ അല്ലെങ്കിൽ സ്‌ക്രീൻ ലോക്ക് ഉപയോഗിക്കുക"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"ബയോമെട്രിക് ഹാർ‌ഡ്‌വെയർ ലഭ്യമല്ല"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"പരിശോധിച്ചുറപ്പിക്കൽ റദ്ദാക്കി"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"തിരിച്ചറിഞ്ഞില്ല"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"മുഖം തിരിച്ചറിഞ്ഞിട്ടില്ല"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"പരിശോധിച്ചുറപ്പിക്കൽ റദ്ദാക്കി"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"പിന്നോ പാറ്റേണോ പാസ്‌വേഡോ സജ്ജീകരിച്ചിട്ടില്ല"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"പിശക് പരിശോധിച്ചുറപ്പിക്കുന്നു"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"സ്‌ക്രീൻ ലോക്ക് ഉപയോഗിക്കുക"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"തുടരാൻ നിങ്ങളുടെ സ്‌ക്രീൻ ലോക്ക് നൽകുക"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"സെൻസറിന് മുകളിൽ ശക്തിയായി അമർത്തുക"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"സെൻസറിൽ നന്നായി അമർത്തുക"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"ഫിംഗർപ്രിന്റ് തിരിച്ചറിയാനാകുന്നില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"ഫിംഗർപ്രിന്റ് സെൻസർ വൃത്തിയാക്കിയ ശേഷം വീണ്ടും ശ്രമിക്കുക"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"സെൻസർ വൃത്തിയാക്കിയ ശേഷം വീണ്ടും ശ്രമിക്കുക"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"സെൻസറിന് മുകളിൽ ശക്തിയായി അമർത്തുക"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"സെൻസറിൽ നന്നായി അമർത്തുക"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"വിരൽ വളരെ പതുക്കെ നീക്കി. വീണ്ടും ശ്രമിക്കുക."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"മറ്റൊരു ഫിംഗർപ്രിന്റ് ഉപയോഗിച്ച് നോക്കുക"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"തെളിച്ചം വളരെയധികമാണ്"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"പവർ ബട്ടൺ അമർത്തിയത് തിരിച്ചറിഞ്ഞു"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"അൽപ്പം നീക്കി നോക്കൂ"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ഓരോ തവണയും നിങ്ങളുടെ വിരലിന്റെ സ്ഥാനം ചെറുതായി മാറ്റുക"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ഓരോ തവണയും വിരലിന്റെ സ്ഥാനം ചെറുതായി മാറ്റുക"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ഫിംഗർപ്രിന്റ് തിരിച്ചറിഞ്ഞില്ല"</string>
@@ -684,7 +691,7 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"ഫോൺ നിങ്ങളുടെ ഇടതുവശത്തേക്ക് നീക്കുക"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"ഫോൺ നിങ്ങളുടെ വലതുവശത്തേക്ക് നീക്കുക"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"നിങ്ങളുടെ ഉപകരണത്തിന് നേരെ കൂടുതൽ നന്നായി നോക്കുക."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"മുഖം കാണാനാകുന്നില്ല. ഫോൺ കണ്ണിന് നേരെ പിടിക്കുക."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"മുഖം കാണുന്നില്ല. ഫോൺ കണ്ണിന് നേരെ പിടിക്കുക."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"വളരെയധികം ചലനം. ഫോൺ അനക്കാതെ നേരെ പിടിക്കുക."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"നിങ്ങളുടെ മുഖം വീണ്ടും എൻറോൾ ചെയ്യുക."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"മുഖം തിരിച്ചറിയാനാകുന്നില്ല. വീണ്ടും ശ്രമിക്കൂ."</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"മുഖം മറച്ചിരിക്കുന്നു. മുഖം പൂർണ്ണമായും ദൃശ്യമായിരിക്കണം."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"മുഖം പരിശോധിക്കാൻ കഴിയില്ല. ഹാർഡ്‌വെയർ ലഭ്യമല്ല."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"മുഖത്തിന്റെ പ്രവർത്തനം റദ്ദാക്കി."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"ഉപയോക്താവ് ഫെയ്‌സ് അൺലോക്ക് റദ്ദാക്കി"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"നിരവധി തവണ ശ്രമിച്ചു. പിന്നീട് വീണ്ടും ശ്രമിക്കുക."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"നിരവധി ശ്രമങ്ങൾ. ഫെയ്‌സ് അൺലോക്ക് ലഭ്യമല്ല."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"നിരവധി ശ്രമങ്ങൾ. പകരം സ്‌ക്രീൻ ലോക്ക് നൽകുക."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"മുഖം പരിശോധിക്കാൻ കഴിയില്ല. വീണ്ടും ശ്രമിക്കൂ."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"നിങ്ങൾ ഫെയ്‌സ് അൺലോക്ക് സജ്ജീകരിച്ചിട്ടില്ല"</string>
@@ -1008,7 +1014,7 @@
     <string name="lockscreen_forgot_pattern_button_text" msgid="8362442730606839031">"പാറ്റേൺ മറന്നോ?"</string>
     <string name="lockscreen_glogin_forgot_pattern" msgid="9218940117797602518">"അക്കൗണ്ട് അൺലോക്ക്"</string>
     <string name="lockscreen_glogin_too_many_attempts" msgid="3775904917743034195">"വളരെയധികം പാറ്റേൺ ശ്രമങ്ങൾ"</string>
-    <string name="lockscreen_glogin_instructions" msgid="4695162942525531700">"അൺലോക്കുചെയ്യുന്നതിന്, നിങ്ങളുടെ Google അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുക."</string>
+    <string name="lockscreen_glogin_instructions" msgid="4695162942525531700">"അൺലോക്കുചെയ്യുന്നതിന്, നിങ്ങളുടെ Google Account ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുക."</string>
     <string name="lockscreen_glogin_username_hint" msgid="6916101478673157045">"ഉപയോക്താവിന്റെ പേര് (ഇമെയിൽ)"</string>
     <string name="lockscreen_glogin_password_hint" msgid="3031027901286812848">"പാസ്‌വേഡ്"</string>
     <string name="lockscreen_glogin_submit_button" msgid="3590556636347843733">"സൈൻ ഇൻ ചെയ്യുക"</string>
@@ -1064,7 +1070,7 @@
     <string name="js_dialog_before_unload_positive_button" msgid="4274257182303565509">"ഈ പേജ് വിടുക"</string>
     <string name="js_dialog_before_unload_negative_button" msgid="3873765747622415310">"ഈ പേജിൽ തുടരുക"</string>
     <string name="js_dialog_before_unload" msgid="7213364985774778744">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nഈ പേജിൽ നിന്നും നാവിഗേറ്റുചെയ്‌തു പോകണമെന്ന് തീർച്ചയാണോ?"</string>
-    <string name="autofill_window_title" msgid="4379134104008111961">"<xliff:g id="SERVICENAME">%1$s</xliff:g> ഉപയോഗിച്ച് സ്വമേധയാ പൂരിപ്പിക്കുക"</string>
+    <string name="autofill_window_title" msgid="4379134104008111961">"<xliff:g id="SERVICENAME">%1$s</xliff:g> ഉപയോഗിച്ച് സ്വയമേവ പൂരിപ്പിക്കുക"</string>
     <string name="permlab_setAlarm" msgid="1158001610254173567">"ഒരു അലാറം സജ്ജീകരിക്കുക"</string>
     <string name="permdesc_setAlarm" msgid="2185033720060109640">"ഒരു ഇൻസ്റ്റാളുചെയ്‌ത അലാറം ക്ലോക്ക് അപ്ലിക്കേഷനിൽ അലാറം സജ്ജീകരിക്കുന്നതിന് അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു. ചില അലാറം ക്ലോക്ക് അപ്ലിക്കേഷനുകൾ ഈ സവിശേഷത നടപ്പിലാക്കാതിരുന്നേക്കാം."</string>
     <string name="permlab_addVoicemail" msgid="4770245808840814471">"വോയ്‌സ് മെയിൽ ചേർക്കുക"</string>
@@ -1364,7 +1370,7 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"USB വഴിയുള്ള MIDI ഓണാക്കി"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"ഉപകരണം വെബ്‌ക്യാം ആയി കണക്റ്റ് ചെയ്തു"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"USB ആക്‌സസറി കണക്റ്റ് ചെയ്തു"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"കൂടുതൽ ഓപ്ഷനുകൾക്ക് ടാപ്പുചെയ്യുക."</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"കൂടുതൽ ഓപ്ഷനുകൾക്ക് ടാപ്പ് ചെയ്യുക."</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"കണക്‌റ്റ് ചെയ്‌ത ഉപകരണം ചാർജ് ചെയ്യുന്നു. കൂടുതൽ ഓപ്ഷനുകൾക്ക് ടാപ്പ് ചെയ്യുക."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"അനലോഗ് ഓഡിയോ ആക്‌സസറി കണ്ടെത്തി"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"അറ്റാച്ചുചെയ്‌ത ഉപകരണം ഈ ഫോണിന് അനുയോജ്യമല്ല. കൂടുതലറിയാൻ ടാപ്പുചെയ്യുക."</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"നിരസിക്കുക"</string>
     <string name="select_input_method" msgid="3971267998568587025">"ഇൻപുട്ട് രീതി തിരഞ്ഞെടുക്കുക"</string>
     <string name="show_ime" msgid="6406112007347443383">"ഫിസിക്കൽ കീബോർഡ് സജീവമായിരിക്കുമ്പോൾ സ്ക്രീനിൽ നിലനിർത്തുക"</string>
-    <string name="hardware" msgid="1800597768237606953">"വെർച്വൽ കീബോർഡ് കാണിക്കുക"</string>
+    <string name="hardware" msgid="3611039921284836033">"ഓൺ-സ്ക്രീൻ കീബോർഡ് ഉപയോഗിക്കൂ"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> കോൺഫിഗർ ചെയ്യുക"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"യഥാർത്ഥ കീബോർഡുകൾ കോൺഫിഗർ ചെയ്യുക"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"ഭാഷയും ലേഔട്ടും തിരഞ്ഞെടുക്കുന്നതിന് ടാപ്പ് ചെയ്യുക"</string>
@@ -1659,7 +1665,7 @@
     <string name="kg_invalid_puk" msgid="4809502818518963344">"ശരിയായ PUK കോഡ് വീണ്ടും നൽകുക. ആവർത്തിച്ചുള്ള ശ്രമങ്ങൾ സിം ശാശ്വതമായി പ്രവർത്തനരഹിതമാക്കും."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="4705368340409816254">"പിൻ കോഡുകൾ പൊരുത്തപ്പെടുന്നില്ല"</string>
     <string name="kg_login_too_many_attempts" msgid="699292728290654121">"വളരെയധികം പാറ്റേൺ ശ്രമങ്ങൾ"</string>
-    <string name="kg_login_instructions" msgid="3619844310339066827">"അൺലോക്കുചെയ്യുന്നതിന്, നിങ്ങളുടെ Google അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുക."</string>
+    <string name="kg_login_instructions" msgid="3619844310339066827">"അൺലോക്കുചെയ്യുന്നതിന്, നിങ്ങളുടെ Google Account ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുക."</string>
     <string name="kg_login_username_hint" msgid="1765453775467133251">"ഉപയോക്താവിന്റെ പേര് (ഇമെയിൽ)"</string>
     <string name="kg_login_password_hint" msgid="3330530727273164402">"പാസ്‌വേഡ്"</string>
     <string name="kg_login_submit_button" msgid="893611277617096870">"സൈൻ ഇൻ ചെയ്യുക"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"നീക്കംചെയ്യുക"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"മുകളിൽക്കൊടുത്തിരിക്കുന്ന ശുപാർശചെയ്‌ത ലെവലിലേക്ക് വോളിയം വർദ്ധിപ്പിക്കണോ?\n\nഉയർന്ന വോളിയത്തിൽ ദീർഘനേരം കേൾക്കുന്നത് നിങ്ങളുടെ ശ്രവണ ശേഷിയെ ദോഷകരമായി ബാധിക്കാം."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"മുന്നറിയിപ്പ്,\nഒരാൾക്ക് ഒരാഴ്ച ഹെഡ്ഫോണുകളിലൂടെ സുരക്ഷിതമായി കേൾക്കാനാകുന്ന ഉച്ചത്തിലുള്ള ശബ്ദ സിഗ്നലുകളുടെ അളവ് നിങ്ങൾ മറികടന്നിരിക്കുന്നു.\n\nഈ പരിധിക്ക് മുകളിൽ പോകുന്നത് നിങ്ങളുടെ കേൾവിശക്തിയെ ശാശ്വതമായി തകരാറിലാക്കും."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"മുന്നറിയിപ്പ്,\nഒരാൾക്ക് ഒരാഴ്ചയിൽ ഹെഡ്ഫോണുകളിലൂടെ സുരക്ഷിതമായി കേൾക്കാനാകുന്ന ഉച്ചത്തിലുള്ള ശബ്ദ സിഗ്നലുകളുടെ അളവിന്റെ 5 മടങ്ങ് നിങ്ങൾ മറികടന്നിരിക്കുന്നു.\n\nനിങ്ങളുടെ കേൾവിശക്തി സംരക്ഷിക്കുന്നതിനായി വോളിയം കുറച്ചു."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"നിങ്ങൾ ഇപ്പോൾ മീഡിയ കേൾക്കുന്ന ലെവൽ ദീർഘകാലം ഉപയോഗിച്ചാൽ അത് കേൾവി തകരാറിലേക്ക് നയിച്ചേക്കാം.\n\nഈ ലെവലിൽ തുടർന്നും ദീർഘകാലം പ്ലേ ചെയ്യുന്നത് നിങ്ങളുടെ കേൾവിശക്തി തകരാറിലാക്കിയേക്കാം."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"മുന്നറിയിപ്പ്,\nസുരക്ഷിതമല്ലാത്ത ലെവലിൽ പ്ലേ ചെയ്യുന്ന ഉച്ചത്തിലുള്ള ഉള്ളടക്കമാണ് നിങ്ങൾ നിലവിൽ കേൾക്കുന്നത്.\n\nഇത്ര ഉച്ചത്തിൽ കേൾക്കുന്നത് തുടർന്നാൽ നിങ്ങളുടെ കേൾവിശക്തി ശാശ്വതമായി തകരാറിലാകും."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"ഉയർന്ന വോളിയത്തിൽ കേൾക്കുന്നത് തുടരണോ?\n\nഹെഡ്‌ഫോണിന്റെ വോളിയം, നിർദ്ദേശിച്ചിരിക്കുന്നതിനേക്കാൾ കൂടുതൽ സമയം ഉയർന്ന നിലയിലായിരുന്നു, ഇത് നിങ്ങളുടെ കേൾവിക്ക് തകരാറുണ്ടാക്കും"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"ഉച്ചത്തിലുള്ള വോളിയം തിരിച്ചറിഞ്ഞു\n\nഹെഡ്‌ഫോണിന്റെ വോളിയം, നിർദ്ദേശിച്ചിരിക്കുന്നതിനേക്കാൾ ഉയർന്ന നിലയിലായിരുന്നു, ഇത് നിങ്ങളുടെ കേൾവിക്ക് തകരാറുണ്ടാക്കും"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ഉപയോഗസഹായി കുറുക്കുവഴി ഉപയോഗിക്കണോ?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"കുറുക്കുവഴി ഓണായിരിക്കുമ്പോൾ, രണ്ട് വോളിയം ബട്ടണുകളും 3 സെക്കൻഡ് നേരത്തേക്ക് അമർത്തുന്നത് ഉപയോഗസഹായി ഫീച്ചർ ആരംഭിക്കും."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"ഉപയോഗസഹായി ഫീച്ചറുകൾക്കുള്ള കുറുക്കുവഴി ഓണാക്കണോ?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"അവസാനിപ്പിക്കാൻ, മുകളിൽ നിന്ന് താഴോട്ട് സ്വൈപ്പ് ചെയ്യുക."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"മനസ്സിലായി"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"മികച്ച കാഴ്‌ചയ്‌ക്കായി റൊട്ടേറ്റ് ചെയ്യുക"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"മികച്ച കാഴ്‌ചയ്‌ക്കായി സ്‌ക്രീൻ വിഭജന മോഡിൽ നിന്ന് പുറത്തുകടക്കുക"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"മികച്ച കാഴ്‌‌ചയ്ക്ക് പൂർണ്ണ സ്‌ക്രീനിൽ <xliff:g id="NAME">%s</xliff:g> തുറക്കുക"</string>
     <string name="done_label" msgid="7283767013231718521">"പൂർത്തിയാക്കി"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"ചാക്രികമായി മണിക്കൂറുകൾ ദൃശ്യമാകുന്ന സ്ലൈഡർ"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"ചാക്രികമായി മിനിറ്റുകൾ ദൃശ്യമാകുന്ന സ്ലൈഡർ"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"ആപ്പ് ലഭ്യമല്ല"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ഇപ്പോൾ ലഭ്യമല്ല."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ലഭ്യമല്ല"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"അനുമതി ആവശ്യമാണ്"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"അനുമതി അഭ്യർത്ഥന നിയന്ത്രിച്ചു"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"ഈ ആപ്പ് അധിക അനുമതികൾ അഭ്യർത്ഥിക്കുന്നു, എന്നാൽ സ്‌ട്രീമിംഗ് സെഷനിടയിൽ അനുമതികൾ നൽകാനാകില്ല. ആദ്യം നിങ്ങളുടെ Android TV ഉപകരണത്തിൽ അനുമതി നൽകുക."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"ഈ ആപ്പ് അധിക അനുമതികൾ അഭ്യർത്ഥിക്കുന്നു, എന്നാൽ സ്‌ട്രീമിംഗ് സെഷനിടയിൽ അനുമതികൾ നൽകാനാകില്ല. ആദ്യം നിങ്ങളുടെ ടാബ്‌ലെറ്റിൽ അനുമതി നൽകുക."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"ഈ ആപ്പ് അധിക അനുമതികൾ അഭ്യർത്ഥിക്കുന്നു, എന്നാൽ സ്‌ട്രീമിംഗ് സെഷനിടയിൽ അനുമതികൾ നൽകാനാകില്ല. ആദ്യം നിങ്ങളുടെ ഫോണിൽ അനുമതി നൽകുക."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"ഈ ആപ്പ് Android-ന്റെ പഴയ പതിപ്പിനായാണ് സൃഷ്ടിച്ചിരിക്കുന്നത്. ഇത് ശരിയായി പ്രവർത്തിക്കണമെന്നില്ല, ഏറ്റവും പുതിയ സുരക്ഷാ, സ്വകാര്യതാ പരിരക്ഷകൾ ഇതിൽ ഉൾപ്പെടുന്നുമില്ല. അപ്ഡേറ്റിനായി തിരയുക അല്ലെങ്കിൽ ആപ്പിന്റെ ഡെവലപ്പറെ ബന്ധപ്പെടുക."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"അപ്‌ഡേറ്റിനായി പരിശോധിക്കുക"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"ഈ ആപ്പ്, Android-ന്റെ എറ്റവും പുതിയ പതിപ്പിന് അനുയോജ്യമല്ല. അപ്ഡേറ്റിന് തിരയുക അല്ലെങ്കിൽ ആപ്പിന്റെ ഡെവലപ്പറെ ബന്ധപ്പെടുക."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"നിങ്ങൾക്ക് പുതിയ സന്ദേശങ്ങൾ ഉണ്ട്"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"കാണുന്നതിന് SMS ആപ്പ് തുറക്കുക"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"ചില പ്രവർത്തനം പരിമിതപ്പെടാം"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ഔദ്യോഗിക ആപ്പുകൾ ഉപയോഗിച്ച് ഈ ഉള്ളടക്കം തുറക്കാനാകില്ല"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"വ്യക്തിപര ആപ്പുകൾ ഉപയോഗിച്ച് ഈ ഉള്ളടക്കം പങ്കിടാനാകില്ല"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"വ്യക്തിപര ആപ്പുകൾ ഉപയോഗിച്ച് ഈ ഉള്ളടക്കം തുറക്കാനാകില്ല"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"ഔദ്യോഗിക പ്രൊഫൈൽ തൽക്കാലം നിർത്തിയിരിക്കുന്നു"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"ഓണാക്കാൻ ടാപ്പ് ചെയ്യുക"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"ഔദ്യോഗിക ആപ്പുകൾ തൽക്കാലം നിർത്തിയിരിക്കുന്നു"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"താൽക്കാലികമായി നിർത്തിയത് മാറ്റുക"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ഔദ്യോഗിക ആപ്പുകൾ ഇല്ല"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"വ്യക്തിപര ആപ്പുകൾ ഇല്ല"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"ഔദ്യോഗിക <xliff:g id="APP">%s</xliff:g> തുറക്കണോ?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"സ്വകാര്യ <xliff:g id="APP">%s</xliff:g> എന്നതിൽ തുറക്കണോ?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"ഔദ്യോഗിക <xliff:g id="APP">%s</xliff:g> എന്നതിൽ തുറക്കണോ?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"ഔദ്യോഗിക ആപ്പിൽ നിന്ന് കോൾ ചെയ്യണോ?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"ഔദ്യോഗിക ആപ്പിലേക്ക് മാറണോ?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"സ്ഥാപനം ഔദ്യോഗിക ആപ്പുകളിൽ നിന്ന് കോളുകൾ ചെയ്യാൻ മാത്രമേ നിങ്ങളെ അനുവദിക്കുന്നുള്ളൂ"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"സ്ഥാപനം ഔദ്യോഗിക ആപ്പുകളിൽ നിന്ന് സന്ദേശമയയ്ക്കാൻ മാത്രമേ നിങ്ങളെ അനുവദിക്കുന്നുള്ളൂ"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"വ്യക്തിപരമായ ബ്രൗസർ ഉപയോഗിക്കുക"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"ഔദ്യോഗിക ബ്രൗസർ ഉപയോഗിക്കുക"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"കോൾ ചെയ്യുക"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"മാറുക"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"സിം നെറ്റ്‌വർക്ക് അൺലോക്ക് ചെയ്യാനുള്ള പിൻ"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"സിം നെറ്റ്‌വർക്ക് സബ്സെറ്റ് അൺലോക്ക് ചെയ്യാനുള്ള പിൻ"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"സിം കോർപ്പറേറ്റ് അൺലോക്ക് ചെയ്യാനുള്ള പിൻ"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"നിങ്ങളുടെ <xliff:g id="DEVICE">%1$s</xliff:g> എന്നതിൽ നിന്ന് ഫോണിന്റെ ക്യാമറ ആക്‌സസ് ചെയ്യാനാകില്ല"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"നിങ്ങളുടെ <xliff:g id="DEVICE">%1$s</xliff:g> എന്നതിൽ നിന്ന് ടാബ്‌ലെറ്റിന്റെ ക്യാമറ ആക്‌സസ് ചെയ്യാനാകില്ല"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"സ്ട്രീം ചെയ്യുമ്പോൾ ഇത് ആക്സസ് ചെയ്യാനാകില്ല. പകരം നിങ്ങളുടെ ഫോണിൽ ശ്രമിച്ച് നോക്കൂ."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"സ്ട്രീമിംഗിനിടെ ചിത്രത്തിനുള്ളിൽ ചിത്രം കാണാനാകില്ല"</string>
     <string name="system_locale_title" msgid="711882686834677268">"സിസ്‌റ്റം ഡിഫോൾട്ട്"</string>
     <string name="default_card_name" msgid="9198284935962911468">"കാർഡ് <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"വാച്ചുകൾ മാനേജ് ചെയ്യുന്നതിന് സഹകാരി ആപ്പിനുള്ള വാച്ച് പ്രൊഫൈൽ അനുമതി"</string>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index f62c6dc..0ea1b08 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Андройд систем"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Хувийн профайл руу сэлгэх"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Ажлын профайл руу сэлгэх"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Хувийн <xliff:g id="APP_NAME">%1$s</xliff:g> руу сэлгэх"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Ажлын <xliff:g id="APP_NAME">%1$s</xliff:g> руу сэлгэх"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Харилцагчид"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"харилцагч руугаа хандах"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Байршил"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Апп нь чичиргээг удирдах боломжтой."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Аппыг чичиргээний төлөвт хандахыг зөвшөөрдөг."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"утасны дугаарт шууд дуудлага хийх"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Апп нь таны оролцоогүйгээр дуудлага хийх боломжтой. Энэ нь төлөвлөгдөөгүй төлбөрт оруулах эсвэл дуудлага хийнэ. Энэ нь апп-г яаралтай дугаарт дуудлага хийхйг зөвшөөрөхгүй. Хортой апп нь таны зөвшөөрөлгүйгээр дуудлага хийж таныг төлбөрт оруулж болзошгүй"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Аппад таны оролцоогүйгээр утасны дугаарууд руу дуудлага хийхийг зөвшөөрнө. Энэ нь гэнэтийн төлбөрийн нэхэмжлэх эсвэл дуудлага хүлээн авахад хүргэж магадгүй. Энэ нь аппад яаралтай тусламжийн утасны дугаарууд руу дуудлага хийхийг зөвшөөрөхгүйг анхаарна уу. Хортой аппууд таны баталгаажуулалтгүйгээр дуудлага хийх эсвэл ирсэн дуудлагыг автоматаар өөр дугаар луу шилжүүлэхэд хүргэх оператор компанийн код руу залгаснаар танаас төлбөр гаргаж магадгүй."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS дуудлагын үйлчилгээнд хандах"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Апп нь дуудлага хийхдээ таны оролцоогүйгээр IMS үйлчилгээг ашиглах боломжтой."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"утасны статус ба таниулбарыг унших"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Бүртгүүлсэн төхөөрөмж болон маршрутын хүрэх цэг зэрэг сонгосон nfc төлбөрийн үйлчилгээний мэдээллийг авахыг аппад зөвшөөрдөг."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"ойролцоо талбарын холбоог удирдах"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Апп нь Ойролцоо Талбарын Холболт(NFC) таг, карт, болон уншигчтай холбогдох боломжтой."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Аюулгүй элементийн гүйлгээний үйл явдал"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Аппад Аюулгүй элементэд хийгдэж буй гүйлгээний талаарх мэдээллийг хүлээн авахыг зөвшөөрнө."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"дэлгэцний түгжээг идэвхгүй болгох"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Апп нь түгжээ болон бусад холбоотой нууц үгийн аюулгүй байдлыг идэвхгүй болгох боломжтой. Жишээ нь бол утас нь дуудлага ирэх үед түгжээг идэвхгүй болгох ба дуудлага дуусахад буцаан идэвхтэй болгодог."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"дэлгэцийн түгжээний төвөгтэй байдлын хүсэлт тавих"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Биометр эсвэл дэлгэцийн түгжээ ашиглах"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Өөрийгөө мөн гэдгийг баталгаажуулаарай"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Үргэлжлүүлэхийн тулд биометрээ ашиглана уу"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Үргэлжлүүлэхийн тулд хурууныхаа хээг ашиглана уу"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Үргэлжлүүлэхийн тулд царайгаа ашиглана уу"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Үргэлжлүүлэхийн тулд биометр эсвэл дэлгэцийн түгжээгээ ашиглана уу"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Биометрийн техник хангамж боломжгүй байна"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Нотолгоог цуцаллаа"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Таниагүй"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Царайг таньсангүй"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Нотолгоог цуцаллаа"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Тохируулсан пин, хээ эсвэл нууц үг алга"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Баталгаажуулахад алдаа гарлаа"</string>
@@ -692,7 +699,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Утас руугаа аль болох эгц харна уу"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Утас руугаа аль болох эгц харна уу"</string>
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Утас руугаа аль болох эгц харна уу"</string>
-    <string name="face_acquired_obscured" msgid="4917643294953326639">"Таны нүүрийг далдалж буй аливаа зүйлийг хасна уу."</string>
+    <string name="face_acquired_obscured" msgid="4917643294953326639">"Таны нүүрийг далдалж буй аливаа зүйлийг авна уу."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Хар хэсэг зэрэг дэлгэцийнхээ дээд хэсгийг цэвэрлэнэ үү"</string>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Царайны үйл ажиллагааг цуцаллаа."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Хэрэглэгч Царайгаар түгжээ тайлахыг цуцалсан"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Хэт олон удаа оролдлоо. Дараа дахин оролдоно уу."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Хэт олон удаа оролдлоо. Царайгаар түгжээ тайлах боломжгүй."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Хэт олон удаа оролдлоо. Оронд нь дэлгэцийн түгжээ оруулна уу."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Царайг бататгаж чадсангүй. Дахин оролдоно уу."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Та Царайгаар түгжээ тайлахыг тохируулаагүй байна"</string>
@@ -751,8 +757,8 @@
     <string name="permdesc_register_call_provider" msgid="4201429251459068613">"Апп-д шинэ телеком холболтуудыг бүртгэхийг зөвшөөрнө."</string>
     <string name="permlab_connection_manager" msgid="3179365584691166915">"телеком холболтуудыг удирдах."</string>
     <string name="permdesc_connection_manager" msgid="1426093604238937733">"Апп-д телеком холболтуудыг удирдахыг зөвшөөрнө."</string>
-    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"дуудлагын дэлгэцтэй харьцах"</string>
-    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"Апп-д дуудлагын дэлгэцийг хэрэглэгчид хэзээ хэрхэн харуулахыг удирдахыг зөвшөөрнө."</string>
+    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"call screen-тай харьцах"</string>
+    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"Апп-д call screen-г хэрэглэгчид хэзээ хэрхэн харуулахыг удирдахыг зөвшөөрнө."</string>
     <string name="permlab_bind_connection_service" msgid="5409268245525024736">"телефоны үйлчилгээтэй харилцах"</string>
     <string name="permdesc_bind_connection_service" msgid="6261796725253264518">"Апп-д телефон үйлчилгээтэй харилцаж дуудлага хийх/авахыг зөвшөөрнө."</string>
     <string name="permlab_control_incall_experience" msgid="6436863486094352987">"дуудлага хийж байгаа хэрэглэгчтэй харьцах"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ТАТГАЛЗАХ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Оруулах аргыг сонгоно уу"</string>
     <string name="show_ime" msgid="6406112007347443383">"Биет гар идэвхтэй үед үүнийг дэлгэцэд харуулна уу"</string>
-    <string name="hardware" msgid="1800597768237606953">"Хийсвэр гарыг харуулах"</string>
+    <string name="hardware" msgid="3611039921284836033">"Дэлгэц дээрх гарыг ашиглах"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g>-г тохируулна уу"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Биет гарыг тохируулна уу"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Хэл болон бүдүүвчийг сонгохын тулд дарна уу"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Устгах"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Дууг санал болгосноос чанга болгож өсгөх үү?\n\nУрт хугацаанд чанга хөгжим сонсох нь таны сонсголыг муутгаж болно."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Сануулга,\nТа чихэвчээр долоо хоногийн турш аюулгүйгээр сонсож болох чанга дууны дохионы хэмжээг хэтрүүлсэн байна.\n\nЭнэ хязгаарыг давах нь таны сонсголыг бүрмөсөн гэмтээнэ."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Сануулга,\nТа чихэвчээр долоо хоногийн турш аюулгүйгээр сонсож болох чанга дууны дохионы хэмжээг 5 дахин хэтрүүлсэн байна.\n\nТаны сонсголыг хамгаалахын тулд дууны түвшнийг багасгасан."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Та удаан хугацааны туршид медиаг тасралтгүй энэ түвшинд сонссоор байвал сонсголыг гэмтээж болзошгүй.\n\nЭнэ түвшинд удаан хугацаанд үргэлжлүүлэн тоглуулах нь таны сонсголыг гэмтээж болно."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Сануулга,\nТа одоогоор аюултай түвшинд тоглуулж буй маш чанга контентыг сонсож байна.\n\nЭнэ чанга дууг үргэлжлүүлэн сонсох нь таны сонсголыг бүрмөсөн гэмтээнэ."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Өндөр дууны түвшинд сонссоор байх уу?\n\nЧихэвчийн дууны түвшин санал болгосноос удаан хугацааны турш өндөр байгаа бөгөөд таны сонсголыг гэмтээх боломжтой"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Чанга дуу чимээ илэрлээ\n\nЧихэвчийн дууны түвшин санал болгосноос өндөр байгаа нь таны сонсголыг гэмтээх боломжтой"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Хүртээмжийн товчлолыг ашиглах уу?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Товчлол асаалттай үед дууны түвшний хоёр товчлуурыг хамтад нь 3 секунд дарснаар хандалтын онцлогийг эхлүүлнэ."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Хандалтын онцлогуудын товчлолыг асаах уу?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Гарахаар бол дээрээс нь доош нь чирнэ үү."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Ойлголоо"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Харагдах байдлыг сайжруулах бол эргүүлнэ үү"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Харагдах байдлыг сайжруулах бол дэлгэцийг хуваах горимоос гарна уу"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Харагдах байдлыг сайжруулах бол <xliff:g id="NAME">%s</xliff:g>-г бүтэн дэлгэцээр нээнэ үү"</string>
     <string name="done_label" msgid="7283767013231718521">"Дууссан"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Цаг гүйлгэгч"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Минут гүйлгэгч"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Апп боломжгүй байна"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> яг одоо боломжгүй байна."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> боломжгүй байна"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Зөвшөөрөл шаардлагатай"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Зөвшөөрлийн хүсэлтийг зогсоосон"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Энэ апп нэмэлт зөвшөөрөл хүсэж байгаа ч дамжуулалтын харилцан үйлдлийн үеэр зөвшөөрөл олгох боломжгүй. Эхлээд Android TV төхөөрөмждөө зөвшөөрөл олгоно уу."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Энэ апп нэмэлт зөвшөөрөл хүсэж байгаа ч дамжуулалтын харилцан үйлдлийн үеэр зөвшөөрөл олгох боломжгүй. Эхлээд таблетдаа зөвшөөрөл олгоно уу."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Энэ апп нэмэлт зөвшөөрөл хүсэж байгаа ч дамжуулалтын харилцан үйлдлийн үеэр зөвшөөрөл олгох боломжгүй. Эхлээд утсандаа зөвшөөрөл олгоно уу."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"Энэ аппыг Android-н хуучин хувилбарт зориулж бүтээсэн. Энэ нь зохих ёсоор ажиллахгүй байж магадгүй бөгөөд хамгийн сүүлийн үеийн аюулгүй байдал болон нууцлалын хамгаалалтыг агуулдаггүй. Шинэчлэлт байгаа эсэхийг шалгах эсвэл аппын хөгжүүлэгчтэй холбогдоно уу."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Шинэчлэлтийг шалгах"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Энэ апп Android-н хамгийн сүүлийн үеийн хувилбартай тохиромжгүй. Шинэчлэлт байгаа эсэхийг шалгах эсвэл аппын хөгжүүлэгчтэй холбогдоно уу."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Танд шинэ мессежүүд байна"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Үзэхийн тулд SMS аппыг нээх"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Зарим функцийг хязгаарласан байж болзошгүй"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Энэ контентыг ажлын аппуудаар нээх боломжгүй"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Энэ контентыг хувийн аппуудаар хуваалцах боломжгүй"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Энэ контентыг хувийн аппуудаар нээх боломжгүй"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Ажлын профайлыг түр зогсоосон"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Асаахын тулд товших"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Ажлын аппуудыг түр зогсоосон"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Үргэлжлүүлэх"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ямар ч ажлын апп байхгүй байна"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ямар ч хувийн апп байхгүй байна"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Ажлын <xliff:g id="APP">%s</xliff:g>-г нээх үү?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Хувийн <xliff:g id="APP">%s</xliff:g>-д нээх үү?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Ажлын <xliff:g id="APP">%s</xliff:g>-д нээх үү?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Ажлын аппаас залгах уу?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Ажлын апп руу сэлгэх үү?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Танай байгууллага танд зөвхөн ажлын аппуудаас дуудлага хийхийг зөвшөөрдөг"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Танай байгууллага танд зөвхөн ажлын аппуудаас мессеж илгээхийг зөвшөөрдөг"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Хувийн хөтөч ашиглах"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Ажлын хөтөч ашиглах"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Залгах"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Сэлгэх"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Сүлжээний SIM-н түгжээг тайлах ПИН"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Сүлжээний дэд олонлогийн SIM-н түгжээг тайлах ПИН"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Байгууллагын SIM-н түгжээг тайлах ПИН"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Таны <xliff:g id="DEVICE">%1$s</xliff:g>-с утасны камерт хандах боломжгүй"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Таны <xliff:g id="DEVICE">%1$s</xliff:g>-с таблетын камерт хандах боломжгүй"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Стримингийн үед үүнд хандах боломжгүй. Оронд нь утас дээрээ туршиж үзнэ үү."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Дамжуулах явцад дэлгэц доторх дэлгэцийг үзэх боломжгүй"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Системийн өгөгдмөл"</string>
     <string name="default_card_name" msgid="9198284935962911468">"КАРТ <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Дэмжигч цагны профайлын цаг удирдах зөвшөөрөл"</string>
@@ -2317,11 +2331,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Дэмжигч аппад нүүрэн талын үйлчилгээнүүдийг ардаас эхлүүлэхийг зөвшөөрнө."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Микрофоныг ашиглах боломжгүй байна"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Микрофоныг блоклосон байна"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Хоёр дэлгэц"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Хоёр дэлгэц асаалттай байна"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual screen асаалттай байна"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> контент харуулахын тулд хоёр дэлгэцийг хоёуланг нь ашиглаж байна"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Төхөөрөмж хэт халуун байна"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Таны утас хэт халж байгаа тул Хоёр дэлгэц боломжгүй байна"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Таны утас хэт халж байгаа тул Dual screen боломжгүй байна"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen боломжгүй байна"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Батарей хэмнэгч асаалттай байгаа тул Dual Screen боломжгүй байна. Та үүнийг Тохиргоонд унтрааж болно."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Тохиргоо руу очих"</string>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index c0a3095..ff2e089 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android सिस्‍टीम"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"वैयक्तिक प्रोफाइलवर स्विच करा"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"कार्य प्रोफाइलवर स्विच करा"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g> च्या वैयक्तिक प्रोफाइलवर स्विच करा"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g> च्या कार्य प्रोफाइलवर स्विच करा"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"संपर्क"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"आपल्या संपर्कांवर प्रवेश"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"स्थान"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"अ‍ॅप ला व्हायब्रेटर नियंत्रित करण्यासाठी अनुमती देते."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"अ‍ॅपला व्हायब्रेटर स्थितीचा अ‍ॅक्सेस करण्याची अनुमती देते."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"फोन नंबरवर प्रत्यक्ष कॉल करा"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"आपल्या हस्तक्षेपाशिवाय फोन नंबरवर कॉल करण्यासाठी अ‍ॅप ला अनुमती देते. यामुळे अनपेक्षित शुल्क किंवा कॉल लागू शकतात. लक्षात ठेवा की हे आणीबाणीच्या नंबरवर कॉल करण्यासाठी अ‍ॅप ला अनुमती देत नाही. दुर्भावनापूर्ण अ‍ॅप्स नी आपल्या पुष्टिकरणाशिवाय कॉल केल्यामुळे तुमचे पैसे खर्च होऊ शकतात."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"अ‍ॅपला तुमच्या हस्तक्षेपाशिवाय फोन नंबरवर कॉल करण्याची अनुमती देते. यामुळे अनपेक्षित शुल्के आकारली जाऊ शकतात किंवा अनपेक्षित कॉल येऊ शकतात. लक्षात ठेवा, की हे अ‍ॅपला आणीबाणी नंबरवर कॉल करण्याची अनुमती देत नाही. दुर्भावनापूर्ण अ‍ॅप्सनी तुमच्या कंफर्मेशनशिवाय कॉल केल्याने किंवा वाहक कोड डायल केल्याने त्यासाठी तुमच्याकडून शुल्क आकारले जाऊ शकते, ज्यामुळे इनकमिंग कॉल आपोआप दुसर्‍या नंबरवर फॉरवर्ड केले जातात."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS कॉल सेवा अ‍ॅक्सेस करा"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"आपल्‍या हस्तक्षेपाशिवाय अ‍ॅपला कॉल करण्‍यासाठी IMS सेवा वापरण्याची अनुमती देते."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"फोन स्थिती आणि ओळख वाचा"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"नोंदणीकृत एड्स आणि मार्ग गंतव्यस्थान सारखी प्राधान्यकृत एनएफसी पेमेंट सेवेची माहिती मिळवण्यासाठी अ‍ॅपला अनुमती देते."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"फील्ड जवळील कम्युनिकेशन नियंत्रित करा"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"फील्ड जवळील कम्युनिकेशन (NFC) टॅग, कार्डे आणि वाचक यांच्यासह संवाद करण्यासाठी ॲपला अनुमती देते."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"सुरक्षित घटक यावरील व्यवहार इव्हेंट"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"अ‍ॅपला सुरक्षित घटक यावर होत असलेल्या व्यवहारांविषयी माहिती मिळवू देते."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"तुमचे स्क्रीन लॉक अक्षम करा"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"कीलॉक आणि कोणतीही संबद्ध पासवर्ड सुरक्षितता अक्षम करण्यासाठी अ‍ॅप ला अनुमती देते. उदाहरणार्थ, येणारा फोन कॉल प्राप्त करताना फोन कीलॉक अक्षम करतो, नंतर जेव्हा कॉल समाप्त होतो तेव्हा तो कीलॉक पुन्हा-सक्षम करतो."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"स्क्रीन लॉक क्लिष्टतेची विनंती करा"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"बायोमेट्रिक किंवा स्क्रीन लॉक वापरा"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"हे तुम्हीच आहात याची पडताळणी करा"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"पुढे सुरू ठेवण्यासाठी तुमचे बायोमेट्रिक वापरा"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"पुढे सुरू ठेवण्‍यासाठी तुमची फिंगरप्रिंट वापरा"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"पुढे सुरू ठेवण्यासाठी तुमचा चेहरा वापरा"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"पुढे सुरू ठेवण्यासाठी तुमचे बायोमेट्रिक किंवा स्क्रीन लॉक वापरा"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"बायोमेट्रिक हार्डवेअर उपलब्ध नाही"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"ऑथेंटिकेशन रद्द केले"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"ओळखले नाही"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"चेहरा ओळखता आला नाही"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"ऑथेंटिकेशन रद्द केले"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"कोणताही पिन, पॅटर्न किंवा पासवर्ड सेट केलेला नाही"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"एरर ऑथेंटिकेट करत आहे"</string>
@@ -636,14 +643,14 @@
     <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"तुमच्या बोटाची स्थिती प्रत्येक वेळी थोडीशी बदला"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
-    <string name="fingerprint_error_not_match" msgid="4599441812893438961">"फिंगरप्रिंट ओळखले नाही"</string>
-    <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"फिंगरप्रिंट ओळखले नाही"</string>
+    <string name="fingerprint_error_not_match" msgid="4599441812893438961">"फिंगरप्रिंट ओळखली नाही"</string>
+    <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"फिंगरप्रिंट ओळखली नाही"</string>
     <string name="fingerprint_authenticated" msgid="2024862866860283100">"फिंगरप्रिंट ऑथेंटिकेट केली आहे"</string>
     <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"चेहरा ऑथेंटिकेशन केलेला आहे"</string>
     <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"चेहरा ऑथेंटिकेशन केलेला आहे, कृपया कंफर्म प्रेस करा"</string>
     <string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"फिंगरप्रिंट हार्डवेअर उपलब्‍ध नाही."</string>
     <string name="fingerprint_error_no_space" msgid="7285481581905967580">"फिंगरप्रिंट सेट करता आली नाही"</string>
-    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"फिंगरप्रिट सेट करण्याची वेळ संपली आहे. पुन्हा प्रयत्न करा."</string>
+    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"फिंगरप्रिंट सेट करण्याची वेळ संपली आहे. पुन्हा प्रयत्न करा."</string>
     <string name="fingerprint_error_canceled" msgid="540026881380070750">"फिंगरप्रिंट ऑपरेशन रद्द झाले."</string>
     <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"वापरकर्त्याने फिंगरप्रिंट ऑपरेशन रद्द केले."</string>
     <string name="fingerprint_error_lockout" msgid="6626753679019351368">"खूप जास्त प्रयत्न. त्याऐवजी स्क्रीन लॉक वापरा."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"चेहरा ऑपरेशन रद्द केले गेले."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"वापरकर्त्याने फेस अनलॉक रद्द केले आहे"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"खूप जास्त प्रयत्न केले. नंतर पुन्हा प्रयत्न करा."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"खूप वेळा प्रयत्न केले आहेत. फेस अनलॉक उपलब्ध नाही."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"बरेच प्रयत्न. त्याऐवजी स्क्रीन लॉक वापरा."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"चेहरा पडताळणी करू शकत नाही. पुन्हा प्रयत्न करा."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"तुम्ही फेस अनलॉक सेट केले नाही"</string>
@@ -751,8 +757,8 @@
     <string name="permdesc_register_call_provider" msgid="4201429251459068613">"नवीन टेलिकॉम कनेक्शनची नोंदणी करण्यासाठी ॲपला अनुमती देते."</string>
     <string name="permlab_connection_manager" msgid="3179365584691166915">"टेलिकॉम कनेक्शन व्यवस्थापित करा"</string>
     <string name="permdesc_connection_manager" msgid="1426093604238937733">"टेलिकॉम कनेक्शन व्यवस्थापित करण्यासाठी अ‍ॅप ला अनुमती देते."</string>
-    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"कॉल-मधील स्‍क्रीनशी परस्‍परसंवाद करा"</string>
-    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"वापरकर्ता कॉल-मधील स्‍क्रीन केव्‍हा आणि कशी पाहतो ते नियंत्रित करण्‍याची अ‍ॅपला अनुमती देते."</string>
+    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"कॉलमधील स्‍क्रीनशी संवाद साधा"</string>
+    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"वापरकर्ता कॉलमधील स्‍क्रीन केव्‍हा आणि कशी पाहतो ते नियंत्रित करण्‍याची अ‍ॅपला अनुमती देते."</string>
     <string name="permlab_bind_connection_service" msgid="5409268245525024736">"टेलिफोनी सेवांशी परस्परसंवाद साधा"</string>
     <string name="permdesc_bind_connection_service" msgid="6261796725253264518">"कॉल करण्यासाठी/घेण्यासाठी टेलिफोनी सेवांशी परस्परसंवाद साधण्यासाठी अ‍ॅप ला अनुमती देते."</string>
     <string name="permlab_control_incall_experience" msgid="6436863486094352987">"एक कॉल-मधील वापरकर्ता अनुभव प्रदान करा"</string>
@@ -1058,10 +1064,10 @@
     <string name="factorytest_not_system" msgid="5658160199925519869">"FACTORY_TEST कृती फक्त /सिस्टीम/अ‍ॅप मध्ये इंस्टॉल केलेल्या पॅकेजसाठी सपोर्ट आहे."</string>
     <string name="factorytest_no_action" msgid="339252838115675515">"FACTORY_TEST क्रिया प्रदान करणारे कोणतेही पॅकेज आढळले नाही."</string>
     <string name="factorytest_reboot" msgid="2050147445567257365">"रीबूट करा"</string>
-    <string name="js_dialog_title" msgid="7464775045615023241">"\"<xliff:g id="TITLE">%s</xliff:g>\" वरील पृष्ठ हे म्हणते:"</string>
+    <string name="js_dialog_title" msgid="7464775045615023241">"\"<xliff:g id="TITLE">%s</xliff:g>\" वरील पेज पुढील गोष्टी दर्शवते:"</string>
     <string name="js_dialog_title_default" msgid="3769524569903332476">"JavaScript"</string>
     <string name="js_dialog_before_unload_title" msgid="7012587995876771246">"नेव्हिगेशनची पुष्टी करा"</string>
-    <string name="js_dialog_before_unload_positive_button" msgid="4274257182303565509">"हे पृष्ठ सोडा"</string>
+    <string name="js_dialog_before_unload_positive_button" msgid="4274257182303565509">"हे पेज सोडा"</string>
     <string name="js_dialog_before_unload_negative_button" msgid="3873765747622415310">"या पेजवर रहा"</string>
     <string name="js_dialog_before_unload" msgid="7213364985774778744">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nआपल्‍याला खात्री आहे की तुम्ही या पृष्‍ठावरून नेव्‍हिगेट करू इच्‍छिता?"</string>
     <string name="autofill_window_title" msgid="4379134104008111961">"<xliff:g id="SERVICENAME">%1$s</xliff:g> सह ऑटोफील करा"</string>
@@ -1081,7 +1087,7 @@
     <string name="menu_space_shortcut_label" msgid="5949311515646872071">"स्पेस"</string>
     <string name="menu_enter_shortcut_label" msgid="6709499510082897320">"एंटर"</string>
     <string name="menu_delete_shortcut_label" msgid="4365787714477739080">"हटवा"</string>
-    <string name="search_go" msgid="2141477624421347086">"शोध"</string>
+    <string name="search_go" msgid="2141477624421347086">"शोधा"</string>
     <string name="search_hint" msgid="455364685740251925">"शोधा…"</string>
     <string name="searchview_description_search" msgid="1045552007537359343">"शोधा"</string>
     <string name="searchview_description_query" msgid="7430242366971716338">"शोध क्वेरी"</string>
@@ -1228,7 +1234,7 @@
     <string name="force_close" msgid="9035203496368973803">"ठीक"</string>
     <string name="report" msgid="2149194372340349521">"अहवाल द्या"</string>
     <string name="wait" msgid="7765985809494033348">"प्रतीक्षा करा"</string>
-    <string name="webpage_unresponsive" msgid="7850879412195273433">"पृष्ठ प्रतिसाद न देणारे झाले आहे.\n\nतुम्ही हे बंद करू इच्छिता?"</string>
+    <string name="webpage_unresponsive" msgid="7850879412195273433">"पेज प्रतिसाद देत नाही.\n\nतुम्ही ते बंद करू इच्छिता का?"</string>
     <string name="launch_warning_title" msgid="6725456009564953595">"अ‍ॅप पुनर्निर्देशित केला"</string>
     <string name="launch_warning_replace" msgid="3073392976283203402">"<xliff:g id="APP_NAME">%1$s</xliff:g> आता चालत आहे."</string>
     <string name="launch_warning_original" msgid="3332206576800169626">"<xliff:g id="APP_NAME">%1$s</xliff:g> मूळतः लाँच केले."</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"नकार द्या"</string>
     <string name="select_input_method" msgid="3971267998568587025">"इनपुट पद्धत निवडा"</string>
     <string name="show_ime" msgid="6406112007347443383">"भौतिक कीबोर्ड सक्रिय असताना त्यास स्क्रीनवर ठेवा"</string>
-    <string name="hardware" msgid="1800597768237606953">"व्हर्च्युअल कीबोर्ड दर्शवा"</string>
+    <string name="hardware" msgid="3611039921284836033">"ऑन-स्क्रीन कीबोर्ड वापरा"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> कॉंफिगर करा"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"वास्तविक कीबोर्ड कॉंफिगर करा"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"भाषा आणि लेआउट निवडण्यासाठी टॅप करा"</string>
@@ -1618,7 +1624,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"टॅबलेट"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"टीव्ही"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"फोन"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"स्पीकर डॉक करा"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"डॉक स्पीकर"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"बाह्य डिव्हाइस"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"हेडफोन"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"काढा"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"शिफारस केलेल्‍या पातळीच्या वर आवाज वाढवायचा?\n\nउच्च आवाजात दीर्घ काळ ऐकण्‍याने आपल्‍या श्रवणशक्तीची हानी होऊ शकते."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"चेतावणी,\nव्यक्तीची सुरक्षितरीत्या हेडफोनवर मोठ्या आवाजातील सिग्नल ऐकण्याची एका आठवड्याची मर्यादा तुम्ही ओलांडली आहे.\n\nही मर्यादा ओलांडणे तुमच्या श्रवणशक्तीचे कायमचे नुकसान करू करेल."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"चेतावणी,\nव्यक्तीची सुरक्षितरीत्या हेडफोनवर मोठ्या आवाजातील सिग्नल ऐकण्याची एका आठवड्याची मर्यादा तुम्ही पाचपट ओलांडली आहे.\n\nतुमच्या श्रवणशक्तीच्या संरक्षणासाठी व्हॉल्यूम कमी केला गेला आहे."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"तुम्ही ज्या पातळीवर मीडिया ऐकत आहात, असे जास्त कालावधीसाठी सुरू राहिल्याचा परिणाम म्हणून तुमच्या श्रवणशक्तीचे कायमचे नुकसान होऊ शकते.\n\nया पातळीवर जास्त कालावधीसाठी प्ले करणे पुढे सुरू ठेवल्यामुळे तुमच्या श्रवणशक्तीचे नुकसान होऊ शकते."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"चेतावणी,\nतुम्ही सध्या असुरक्षित पातळीवर प्ले होणारा मोठ्या आवाजातील आशय ऐकत आहात.\n\nएवढ्या मोठ्याने ऐकणे पुढे सुरू ठेवणे तुमच्या श्रवणशक्तीचे कायमचे नुकसान करेल."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"उच्च व्हॉल्यूममध्ये ऐकत राहायचे आहे का?\n\n हेडफोनचा व्हॉल्यूम हा शिफारस केलेल्या वेळेपेक्षा जास्त वेळ उच्च आहे, जो तुमच्या ऐकण्याच्या क्षमतेवर विपरीत परिणाम करू शकतो"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"मोठा आवाज डिटेक्ट झाला आहे\n\nहेडफोनचा व्हॉल्यूम हा शिफारस केलेल्या व्हॉल्यूमपेक्षा उच्च आहे, जो तुमच्या ऐकण्याच्या क्षमतेवर विपरीत परिणाम करू शकतो"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"प्रवेशयोग्यता शॉर्टकट वापरायचा?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"शॉर्टकट सुरू असताना, दोन्ही व्‍हॉल्‍यूम बटणे तीन सेकंदांसाठी प्रेस करून ठेवल्याने अ‍ॅक्सेसिबिलिटी वैशिष्ट्य सुरू होईल."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"अ‍ॅक्सेसिबिलिटी वैशिष्ट्यांसाठी शॉर्टकट सुरू करायचा आहे का?"</string>
@@ -1716,7 +1720,7 @@
     <string name="color_correction_feature_name" msgid="7975133554160979214">"रंग सुधारणा"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"एकहाती मोड"</string>
     <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"आणखी डिम"</string>
-    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"श्रवणयंत्र डिव्हाइस"</string>
+    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"श्रवणयंत्रे"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"धरून ठेवलेल्या व्हॉल्यूम की. <xliff:g id="SERVICE_NAME">%1$s</xliff:g> सुरू केला आहे."</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"धरून ठेवलेल्या व्हॉल्यूम की. <xliff:g id="SERVICE_NAME">%1$s</xliff:g> बंद केले आहे."</string>
     <string name="accessibility_shortcut_spoken_feedback" msgid="3760999147597564314">"व्हॉल्यूम की रिलीझ करा. <xliff:g id="SERVICE_NAME">%1$s</xliff:g> सुरू करण्यासाठी, दोन्ही व्हॉल्यूम की पुन्हा प्रेस करा आणि तीन सेकंदांसाठी धरून ठेवा."</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"बाहेर पडण्यासाठी, वरून खाली स्वाइप करा."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"समजले"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"अधिक चांगल्या दृश्यासाठी फिरवा"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"अधिक चांगल्या दृश्यासाठी स्प्लिट स्क्रीनमधून बाहेर पडा"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"अधिक चांगल्या दृश्यासाठी <xliff:g id="NAME">%s</xliff:g> हे फुल स्क्रीनमध्ये उघडा"</string>
     <string name="done_label" msgid="7283767013231718521">"पूर्ण झाले"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"तास परिपत्रक स्लायडर"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"मिनिटे परिपत्रक स्लायडर"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"ॲप उपलब्ध नाही"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> आता उपलब्ध नाही."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> उपलब्ध नाही"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"परवानगी आवश्यक आहे"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"परवानगीची विनंती ब्लॉक केली आहे"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"हे ॲप अतिरिक्त परवानग्यांची विनंती करत आहे, पण स्ट्रीमिंग सेशनमध्ये परवानग्या दिल्या जाऊ शकत नाहीत. आधी तुमच्या Android TV डिव्हाइसवर परवानगी द्या."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"हे ॲप अतिरिक्त परवानग्यांची विनंती करत आहे, पण स्ट्रीमिंग सेशनमध्ये परवानग्या दिल्या जाऊ शकत नाहीत. आधी तुमच्या टॅबलेटवर परवानगी द्या."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"हे ॲप अतिरिक्त परवानग्यांची विनंती करत आहे, पण स्ट्रीमिंग सेशनमध्ये परवानग्या दिल्या जाऊ शकत नाहीत. आधी तुमच्या फोनवर परवानगी द्या."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"हे ॲप Android च्या जुन्या आवृत्तीसाठी तयार केले होते. ते कदाचित व्यवस्थित काम करणार नाही आणि त्यामध्ये सुरक्षा व गोपनीयतेशी संबंधित नवीनतम संरक्षणे समाविष्ट नाहीत. अपडेटसाठी तपासा किंवा अ‍ॅपच्या डेव्हलपरशी संपर्क साधा."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"अपडेटसाठी तपासा"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"हे ॲप Android च्या नवीनतम आवृत्तीशी कंपॅटिबल नाही. अपडेटसाठी तपासा किंवा अ‍ॅपच्या डेव्हलपरशी संपर्क साधा."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"आपल्याकडे नवीन मेसेज आहेत"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"पाहण्‍यासाठी SMS अ‍ॅप उघडा"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"काही कार्यक्षमता मर्यादित असू शकतात"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"हा आशय कार्य ॲप्स वापरून उघडला जाऊ शकत नाही"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"हा आशय वैयक्तिक ॲप्ससह शेअर केला जाऊ शकत नाही"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"हा आशय वैयक्तिक ॲप्स वापरून उघडला जाऊ शकत नाही"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"कार्य प्रोफाइल थांबवली आहे"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"सुरू करण्यासाठी टॅप करा"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"कामाशी संबंधित अ‍ॅप्स थांबवली आहेत"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"पुन्हा सुरू करा"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"कोणतीही कार्य ॲप्स सपोर्ट करत नाहीत"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"कोणतीही वैयक्तिक ॲप्स सपोर्ट करत नाहीत"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"ऑफिसची प्रोफाइल <xliff:g id="APP">%s</xliff:g> उघडायचे आहे का?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"वैयक्तिक प्रोफाइल <xliff:g id="APP">%s</xliff:g> मध्ये उघडायची आहे का?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"ऑफिसची प्रोफाइल <xliff:g id="APP">%s</xliff:g> मध्ये उघडायची आहे का?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"work app मधून कॉल करायचा आहे का?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"work app वर स्विच करायचे आहे का?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"तुमची संस्था तुम्हाला फक्त work app वरून कॉल करण्याची अनुमती देते"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"तुमची संस्था तुम्हाला फक्त work app वरून मेसेज पाठवण्याची अनुमती देते"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"वैयक्तिक ब्राउझर वापरा"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"कार्य ब्राउझर वापरा"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"कॉल करा"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"स्विच करा"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"सिम नेटवर्क अनलॉक पिन"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM नेटवर्क सबसेट अनलॉक पिन"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM कॉर्पोरेट अनलॉक पिन"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"तुमच्या <xliff:g id="DEVICE">%1$s</xliff:g> वरून फोनचा कॅमेरा अ‍ॅक्सेस करू शकत नाही"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"तुमच्या <xliff:g id="DEVICE">%1$s</xliff:g> वरून टॅबलेटचा कॅमेरा अ‍ॅक्सेस करू शकत नाही"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"स्ट्रीम करताना हे अ‍ॅक्सेस केले जाऊ शकत नाही. त्याऐवजी तुमच्या फोनवर अ‍ॅक्सेस करून पहा."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"स्ट्रीम होत असताना चित्रात-चित्र पाहू शकत नाही"</string>
     <string name="system_locale_title" msgid="711882686834677268">"सिस्टीम डीफॉल्ट"</string>
     <string name="default_card_name" msgid="9198284935962911468">"कार्ड <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"वॉच व्यवस्थापित करण्यासाठी सहयोगी वॉच प्रोफाइलची परवानगी"</string>
@@ -2317,13 +2331,13 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"सहयोगी अ‍ॅपला बॅकग्राउंडमधून फोरग्राउंड सेवा सुरू करण्याची अनुमती देते."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"मायक्रोफोन उपलब्ध आहे"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"मायक्रोफोन ब्लॉक केलेला आहे"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"ड्युअल स्क्रीन"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"ड्युअल स्क्रीन सुरू आहे"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual screen सुरू आहे"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"आशय दाखवण्यासाठी <xliff:g id="APP_NAME">%1$s</xliff:g> दोन्ही डिस्प्ले वापरत आहे"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"डिव्हाइस खूप गरम आहे"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"तुमचा फोन खूप गरम होत असल्यामुळे ड्युअल स्क्रीन उपलब्ध नाही"</string>
-    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"ड्युअल स्क्रीन उपलब्ध नाही"</string>
-    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"बॅटरी सेव्हर सुरू असल्यामुळे ड्युअल स्क्रीन उपलब्ध नाही. तुम्ही हे सेटिंग्ज मध्ये बंद करू शकता."</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"तुमचा फोन खूप गरम होत असल्यामुळे Dual Screen उपलब्ध नाही"</string>
+    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen उपलब्ध नाही"</string>
+    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"बॅटरी सेव्हर सुरू असल्यामुळे Dual Screen उपलब्ध नाही. तुम्ही हे सेटिंग्ज मध्ये बंद करू शकता."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"सेटिंग्ज वर जा"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"बंद करा"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> कॉंफिगर केले आहे"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 71faf41..e98caa6 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sistem Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Beralih ke profil peribadi"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Beralih ke profil kerja"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Beralih kepada <xliff:g id="APP_NAME">%1$s</xliff:g> peribadi"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Beralih kepada <xliff:g id="APP_NAME">%1$s</xliff:g> kerja"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacts"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"mengakses kenalan anda"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Lokasi"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Membenarkan apl mengawal penggetar."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Membenarkan apl mengakses keadaan penggetar."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"panggil terus nombor telefon"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Membenarkan apl memanggil nombor telefon tanpa campur tangan anda. Ini mungkin menyebabkan caj atau panggilan yang di luar jangkaan. Apl hasad boleh menyebabkan anda kerugian wang dengan membuat panggilan tanpa pengesahan anda."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Membenarkan apl memanggil nombor telefon tanpa campur tangan anda. Tindakan ini boleh menyebabkan caj atau panggilan yang tidak dijangka. Harap maklum bahawa tindakan ini tidak membenarkan apl menghubungi nombor kecemasan. Apl yang berniat jahat mungkin memakan belanja dengan membuat panggilan tanpa pengesahan anda atau mendail kod pembawa yang menyebabkan panggilan masuk dimajukan kepada nombor lain secara automatik."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"akses perkhidmatan panggilan IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Membenarkan apl menggunakan perkhidmatan IMS untuk membuat panggilan tanpa campur tangan anda."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"baca status dan identiti telefon"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Membenarkan apl mendapatkan maklumat perkhidmatan pembayaran nfc pilihan seperti bantuan berdaftar dan destinasi laluan."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"mengawal Komunikasi Medan Dekat"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Membenarkan apl berkomunikasi dengan teg, kad dan pembaca Komunikasi Medan Dekat (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Peristiwa transaksi Unsur Selamat"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Membenarkan apl menerima maklumat tentang transaksi yang berlaku pada Unsur Selamat."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"lumpuhkan kunci skrin anda"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Membenarkan apl melumpuhkan kunci kekunci dan sebarang keselamatan kata laluan yang berkaitan. Sebagai contoh, telefon melumpuhkan kunci kekunci apabila menerima panggilan telefon masuk kemudian mendayakan semula kunci kekunci apabila panggilan selesai."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"minta kerumitan kunci skrin"</string>
@@ -614,26 +618,29 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Gunakan biometrik atau kunci skrin"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Sahkan itu anda"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Gunakan biometrik anda untuk meneruskan"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Gunakan cap jari anda untuk teruskan"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Gunakan muka anda untuk teruskan"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Gunakan biometrik atau kunci skrin anda untuk meneruskan pengesahan"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Perkakasan biometrik tidak tersedia"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Pengesahan dibatalkan"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Tidak dikenali"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Wajah tidak dikenali"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Pengesahan dibatalkan"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Pin, corak atau kata laluan tidak ditetapkan"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Ralat semasa membuat pengesahan"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Gunakan kunci skrin"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Masukkan kunci skrin untuk teruskan"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Tekan dengan kuat pada penderia"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Tekan penderia dengan kuat"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Tidak dapat mengecam cap jari. Cuba lagi."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Bersihkan penderia cap jari dan cuba lagi"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Bersihkan penderia dan cuba lagi"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Tekan dengan kuat pada penderia"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Tekan penderia dengan kuat"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Jari digerakkan terlalu perlahan. Sila cuba lagi."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Cuba cap jari lain"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Terlalu terang"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Penekanan Kuasa dikesan"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Cuba selaraskan"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Tukar sedikit kedudukan jari anda setiap kali pergerakan dilakukan"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ubah sedikit kedudukan jari pada setiap percubaan"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Cap jari tidak dikenali"</string>
@@ -684,15 +691,15 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Gerakkan telefon ke kiri anda"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Gerakkan telefon ke kanan anda"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Sila lihat terus pada peranti anda."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Gagal mengesan wajah anda. Pegang telefon anda pada paras mata."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Wajah tidak kelihatan. Pegang telefon pada paras mata."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Terlalu bnyk gerakan. Pegang telefon dgn stabil."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Sila daftarkan semula wajah anda."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Tidak dapat mengecam wajah. Cuba lagi."</string>
     <string name="face_acquired_too_similar" msgid="8882920552674125694">"Tukar sedikit kedudukan kepala anda"</string>
-    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Lihat terus pada telefon anda"</string>
-    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Lihat terus pada telefon anda"</string>
-    <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_pan_too_extreme" msgid="5417928604710621088">"Lihat lebih lurus pada telefon"</string>
+    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Lihat lebih lurus pada telefon"</string>
+    <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Lihat lebih lurus pada telefon"</string>
+    <string name="face_acquired_obscured" msgid="4917643294953326639">"Tanggalkan apa-apa yang menutup wajah anda."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Bersihkan bahagian atas skrin anda, termasuk bar hitam"</string>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Pelitup muka dikesan. Wajah anda mesti kelihatan sepenuhnya."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Tdk dpt sahkan wajah. Perkakasan tidak tersedia."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Pengendalian wajah dibatalkan."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Buka Kunci Wajah dibatalkan oleh pengguna"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Terlalu banyak percubaan. Cuba sebentar lagi."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Terlalu banyak percubaan. Buka Kunci Wajah tidak tersedia."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Terlalu banyak percubaan. Sebaliknya, masukkan kunci skrin."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Tidak dapat mengesahkan wajah. Cuba lagi."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Anda belum menyediakan Buka Kunci Wajah"</string>
@@ -1392,10 +1398,10 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"TOLAK"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Pilih kaedah input"</string>
     <string name="show_ime" msgid="6406112007347443383">"Pastikannya pada skrin, semasa papan kekunci fizikal aktif"</string>
-    <string name="hardware" msgid="1800597768237606953">"Tunjukkan papan kekunci maya"</string>
+    <string name="hardware" msgid="3611039921284836033">"Guna papan kekunci pada skrin"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Konfigurasikan <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Konfigurasikan papan kekunci fizikal"</string>
-    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Ketik untuk memilih bahasa dan susun atur"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Ketik untuk memilih bahasa dan reka letak"</string>
     <string name="fast_scroll_alphabet" msgid="8854435958703888376">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="fast_scroll_numeric_alphabet" msgid="2529539945421557329">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"Paparkan di atas apl lain"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Alih keluar"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Naikkan kelantangan melebihi paras yang disyokorkan?\n\nMendengar pada kelantangan yang tinggi untuk tempoh yang lama boleh merosakkan pendengaran anda."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Amaran,\nAnda telah melebihi jumlah isyarat bunyi kuat yang boleh didengari dengan selamat menggunakan fon kepala dalam masa seminggu.\n\nMendengar melebihi had ini akan merosakkan pendengaran anda secara kekal."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Amaran,\nAnda telah melebihi 5 kali ganda jumlah isyarat bunyi kuat yang boleh didengari dengan selamat menggunakan fon kepala dalam masa seminggu.\n\nKelantangan telah dikurangkan untuk melindungi pendengaran anda."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Kelantangan media yang anda dengar boleh mengakibatkan kerosakan pendengaran apabila dilakukan untuk jangka masa yang panjang.\n\nMemainkan media pada kelantangan ini secara berterusan untuk jangka masa yang panjang boleh merosakkan pendengaran anda."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Amaran,\nAnda sedang mendengar kandungan lantang yang dimainkan pada tahap yang tidak selamat.\n\nMendengar pada kelantangan secara berterusan ini akan merosakkan pendengaran anda secara kekal."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Teruskan mendengar pada kelantangan tinggi?\n\nKelantangan fon kepala tinggi melebihi tempoh yang disyorkan. Kelantangan ini boleh merosakkan pendengaran anda"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Bunyi kuat telah dikesan\n\nKelantangan fon kepala lebih tinggi daripada tahap yang disyorkan. Kelantangan ini boleh merosakkan pendengaran anda"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Gunakan Pintasan Kebolehaksesan?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Apabila pintasan dihidupkan, tindakan menekan kedua-dua butang kelantangan selama 3 saat akan memulakan ciri kebolehaksesan."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Hidupkan pintasan untuk ciri kebolehaksesan?"</string>
@@ -1697,7 +1701,7 @@
     <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"HIDUP"</string>
     <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"MATI"</string>
     <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Benarkan <xliff:g id="SERVICE">%1$s</xliff:g> mempunyai kawalan penuh atas peranti anda?"</string>
-    <string name="accessibility_service_warning_description" msgid="291674995220940133">"Kawalan penuh sesuai untuk apl yang membantu anda dengan keperluan kebolehaksesan tetapi bukan untuk kebanyakan apl."</string>
+    <string name="accessibility_service_warning_description" msgid="291674995220940133">"Kawalan penuh sesuai untuk apl yang membantu anda berkaitan dengan keperluan kebolehaksesan tetapi bukan untuk kebanyakan apl."</string>
     <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Melihat dan mengawal skrin"</string>
     <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"Ciri ini boleh membaca semua kandungan pada skrin dan memaparkan kandungan di atas apl lain."</string>
     <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"Lihat dan laksanakan tindakan"</string>
@@ -1728,7 +1732,7 @@
     <string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"Untuk beralih antara ciri, leret ke atas menggunakan tiga jari dan tahan."</string>
     <string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Pembesaran"</string>
     <string name="user_switched" msgid="7249833311585228097">"Pengguna semasa <xliff:g id="NAME">%1$s</xliff:g>."</string>
-    <string name="user_switching_message" msgid="1912993630661332336">"Bertukar kepada <xliff:g id="NAME">%1$s</xliff:g>…"</string>
+    <string name="user_switching_message" msgid="1912993630661332336">"Beralih kepada <xliff:g id="NAME">%1$s</xliff:g>…"</string>
     <string name="user_logging_out_message" msgid="7216437629179710359">"Log keluar daripada <xliff:g id="NAME">%1$s</xliff:g>…"</string>
     <string name="owner_name" msgid="8713560351570795743">"Pemilik"</string>
     <string name="guest_name" msgid="8502103277839834324">"Tetamu"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Untuk keluar, leret dari atas ke bawah."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Faham"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Putar untuk mendapatkan paparan yang lebih baik"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Keluar daripada skrin pisah untuk mendapatkan paparan yang lebih baik"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Buka <xliff:g id="NAME">%s</xliff:g> dalam skrin penuh untuk mendapatkan paparan yang lebih baik"</string>
     <string name="done_label" msgid="7283767013231718521">"Selesai"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Penggelangsar bulatan jam"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Penggelangsar bulatan minit"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Apl tidak tersedia"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak tersedia sekarang."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> tidak tersedia"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Kebenaran diperlukan"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Permintaan kebenaran disekat"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Apl ini meminta kebenaran tambahan tetapi kebenaran tidak boleh diberikan dalam sesi penstriman. Berikan kebenaran pada peranti Android TV anda dahulu."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Apl ini meminta kebenaran tambahan tetapi kebenaran tidak boleh diberikan dalam sesi penstriman. Berikan kebenaran pada tablet anda dahulu."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Apl ini meminta kebenaran tambahan tetapi kebenaran tidak boleh diberikan dalam sesi penstriman. Berikan kebenaran pada telefon anda dahulu."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Apl ini tidak boleh diakses pada <xliff:g id="DEVICE">%1$s</xliff:g> anda. Cuba pada telefon anda."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Apl ini dibina untuk versi Android yang lebih lama. Apl ini mungkin tidak berfungsi dengan betul dan tidak termasuk perlindungan keselamatan dan privasi yang terkini. Semak kemas kini atau hubungi pembangun apl."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Semak kemaskinian"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Apl ini tidak serasi dengan versi terbaharu Android. Semak kemaskinian atau hubungi pembangun apl."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Anda mempunyai mesej baharu"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Buka apl SMS untuk melihat"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Sesetengah fungsi mungkin terhad"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Kandungan ini tidak boleh dibuka dengan apl kerja"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Kandungan ini tidak boleh dikongsi dengan apl peribadi"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Kandungan ini tidak boleh dibuka dengan apl peribadi"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Profil kerja dijeda"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Ketik untuk menghidupkan profil"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Apl kerja dijeda"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Nyahjeda"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Tiada apl kerja"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Tiada apl peribadi"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Buka <xliff:g id="APP">%s</xliff:g> kerja?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Buka pada <xliff:g id="APP">%s</xliff:g> peribadi?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Buka pada <xliff:g id="APP">%s</xliff:g> kerja?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Panggil daripada apl kerja?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Beralih kepada apl kerja?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Organisasi anda hanya membenarkan anda membuat panggilan daripada apl kerja"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Organisasi anda hanya membenarkan anda menghantar mesej daripada apl kerja"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Gunakan penyemak imbas peribadi"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Gunakan penyemak imbas kerja"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Panggil"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Beralih"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN buka kunci rangkaian SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN buka kunci subset rangkaian SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN buka kunci korporat SIM"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Tidak dapat mengakses kamera telefon daripada <xliff:g id="DEVICE">%1$s</xliff:g> anda"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Tidak dapat mengakses kamera tablet daripada <xliff:g id="DEVICE">%1$s</xliff:g> anda"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Kandungan ini tidak boleh diakses semasa penstriman. Cuba pada telefon anda."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Tidak dapat melihat gambar dalam gambar semasa penstriman"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Lalai sistem"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KAD <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Kebenaran profil Jam Tangan rakan untuk mengurus jam tangan"</string>
@@ -2321,7 +2335,7 @@
     <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dwiskrin dihidupkan"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> menggunakan kedua-dua paparan untuk menunjukkan kandungan"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Peranti terlalu panas"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dwiskrin tidak tersedia kerana telefon anda terlalu panas"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dual Screen tidak tersedia kerana telefon anda terlalu panas"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen tidak tersedia"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screen tidak tersedia kerana Penjimat Bateri dihidupkan. Anda boleh mematikan ciri ini dalam Tetapan."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Akses Tetapan"</string>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index 286e90e..d673904 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -43,7 +43,7 @@
     <string name="mismatchPin" msgid="2929611853228707473">"သင် ရိုက်ထည့်ခဲ့သည့် PIN များ မတိုက်ဆိုင်ပါ။"</string>
     <string name="invalidPin" msgid="7542498253319440408">"နံပါတ်(၄)ခုမှ(၈)ခုအထိပါရှိသော ပင်နံပါတ်အားထည့်ပါ"</string>
     <string name="invalidPuk" msgid="8831151490931907083">"နံပါတ်(၈)ခုသို့မဟုတ် ထိုထက်ရှည်သောသော PUKအားထည့်သွင်းပါ"</string>
-    <string name="needPuk" msgid="3503414069503752211">"ဆင်းမ်၏ ပင်နံပါတ်ပြန်ဖွင့်သည့် ကုဒ်ကို လော့ခ်ချထားသည်။ ၎င်းကိုဖွင့်ရန် ပင်နံပါတ်ပြန်ဖွင့်သည့် ကုဒ်ကို ထည့်ပါ။"</string>
+    <string name="needPuk" msgid="3503414069503752211">"ဆင်းမ်ကတ်၏ ပင်နံပါတ်ပြန်ဖွင့်သည့် ကုဒ်ကို လော့ခ်ချထားသည်။ ၎င်းကိုဖွင့်ရန် ပင်နံပါတ်ပြန်ဖွင့်သည့် ကုဒ်ကို ထည့်ပါ။"</string>
     <string name="needPuk2" msgid="3910763547447344963">"ဆင်းမ်ကိုဖွင့်ရန် ပင်နံပါတ်ပြန်ဖွင့်သည့် ကုဒ် ၂ ကို ထည့်ပါ။"</string>
     <string name="enablePin" msgid="2543771964137091212">"မအောင်မြင်ပါ, SIM/RUIM သော့ကို အရင် သုံးခွင့်ပြုရန်"</string>
     <plurals name="pinpuk_attempts" formatted="false" msgid="1619867269012213584">
@@ -80,7 +80,7 @@
     <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"ဖုန်းဝန်ဆောင်မှု မရှိပါ"</string>
     <string name="RestrictedOnAllVoiceTitle" msgid="3982069078579103087">"ဖုန်းခေါ်ဆိုခြင်း ဝန်ဆောင်မှု သို့မဟုတ် အရေးပေါ်ခေါ်ဆိုခြင်း မရနိုင်ပါ"</string>
     <string name="RestrictedStateContent" msgid="7693575344608618926">"သင်၏ ဝန်ဆောင်မှုပေးသူက ယာယီပိတ်ထားသည်"</string>
-    <string name="RestrictedStateContentMsimTemplate" msgid="5228235722511044687">"ဆင်းမ် <xliff:g id="SIMNUMBER">%d</xliff:g> အတွက် သင်၏ ဝန်ဆောင်မှုပေးသူက ယာယီပိတ်ထားပါသည်"</string>
+    <string name="RestrictedStateContentMsimTemplate" msgid="5228235722511044687">"ဆင်းမ်ကတ် <xliff:g id="SIMNUMBER">%d</xliff:g> အတွက် သင်၏ ဝန်ဆောင်မှုပေးသူက ယာယီပိတ်ထားပါသည်"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="1008329951315753038">"မိုဘိုင်းကွန်ရက် လိုင်းမရပါ"</string>
     <string name="NetworkPreferenceSwitchSummary" msgid="2086506181486324860">"ဦးစားပေးကွန်ရက်သို့ ပြောင်းကြည့်ပါ။ ပြောင်းရန် တို့ပါ။"</string>
     <string name="EmergencyCallWarningTitle" msgid="1615688002899152860">"အရေးပေါ်ခေါ်ဆိုမှု မရနိုင်ပါ"</string>
@@ -199,7 +199,7 @@
     <string name="sensor_notification_service" msgid="7474531979178682676">"အာရုံခံကိရိယာ အကြောင်းကြားချက် ဝန်ဆောင်မှု"</string>
     <string name="twilight_service" msgid="8964898045693187224">"နေဝင်ဆည်းဆာ ဝန်ဆောင်မှု"</string>
     <string name="gnss_time_update_service" msgid="9039489496037616095">"GNSS အချိန်အပ်ဒိတ် ဝန်ဆောင်မှု"</string>
-    <string name="device_policy_manager_service" msgid="5085762851388850332">"ကိရိယာဆိုင်ရာ မူဝါဒ မန်နေဂျာဝန်ဆောင်မှု"</string>
+    <string name="device_policy_manager_service" msgid="5085762851388850332">"ကိရိယာ မူဝါဒ မန်နေဂျာဝန်ဆောင်မှု"</string>
     <string name="music_recognition_manager_service" msgid="7481956037950276359">"တေးဂီတကို သိရှိမှတ်မိခြင်း စီမံခန့်ခွဲမှုစနစ် ဝန်ဆောင်မှု"</string>
     <string name="factory_reset_warning" msgid="6858705527798047809">"သင့်ကိရိယာအား ပယ်ဖျက်လိမ့်မည်"</string>
     <string name="factory_reset_message" msgid="2657049595153992213">"စက်စီမံအက်ပ်ကို သုံး၍မရပါ။ သင်၏ စက်ပစ္စည်းအတွင်းရှိ အရာများကို ဖျက်လိုက်ပါမည်\n\nမေးစရာများရှိပါက သင့်အဖွဲ့အစည်း၏ စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။"</string>
@@ -229,7 +229,7 @@
     <string name="reboot_to_update_reboot" msgid="4474726009984452312">"ပြန်လည်စတင်နေ…"</string>
     <string name="reboot_to_reset_title" msgid="2226229680017882787">"စက်ရုံထုတ်အခြေအနေပြန်ယူခြင်း"</string>
     <string name="reboot_to_reset_message" msgid="3347690497972074356">"ပြန်လည်စတင်နေ…"</string>
-    <string name="shutdown_progress" msgid="5017145516412657345">"စက်ပိတ်ပါမည်"</string>
+    <string name="shutdown_progress" msgid="5017145516412657345">"စက်ပိတ်နေသည်…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="2872769463279602432">"သင့်တက်ဘလက်အား စက်ပိတ်ပါမည်"</string>
     <string name="shutdown_confirm" product="tv" msgid="7975942887313518330">"သင့် Android TV စက်ပစ္စည်း ပိတ်သွားပါမည်။"</string>
     <string name="shutdown_confirm" product="watch" msgid="2977299851200240146">"သင်၏ ကြည့်ရှုမှု ပိတ်ပစ်မည်။"</string>
@@ -250,7 +250,7 @@
     <string name="global_action_bug_report" msgid="5127867163044170003">"အမှားရှာပြင် မှတ်တမ်း"</string>
     <string name="global_action_logout" msgid="6093581310002476511">"စက်ရှင် ပြီးဆုံးပြီ"</string>
     <string name="global_action_screenshot" msgid="2610053466156478564">"ဖန်သားပြင်ဓာတ်ပုံ"</string>
-    <string name="bugreport_title" msgid="8549990811777373050">"ချွတ်ယွင်းမှတ်တမ်း"</string>
+    <string name="bugreport_title" msgid="8549990811777373050">"ချွတ်ယွင်းချက်အစီရင်ခံစာ"</string>
     <string name="bugreport_message" msgid="5212529146119624326">"သင့်ရဲ့ လက်ရှိ စက်အခြေအနေ အချက်အလက်များကို အီးမေးလ် အနေဖြင့် ပေးပို့ရန် စုဆောင်းပါမည်။ အမှားရှာဖွေပြင်ဆင်မှုမှတ်တမ်းမှ ပေးပို့ရန် အသင့်ဖြစ်သည်အထိ အချိန် အနည်းငယ်ကြာမြင့်မှာ ဖြစ်သဖြင့် သည်းခံပြီး စောင့်ပါရန်"</string>
     <string name="bugreport_option_interactive_title" msgid="7968287837902871289">"လက်ငင်းတုံ့ပြန်နိုင်သည့် အစီရင်ခံချက်"</string>
     <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"အခြေအနေတော်တော်များများတွင် ၎င်းကိုအသုံးပြုပါ။ ၎င်းသည် အစီရင်ခံစာကို မှတ်သားခြင်း၊ ပြဿနာအကြောင်း နောက်ထပ်အသေးစိတ်များကို ထည့်သွင်းခြင်းနှင့် မျက်နှာပြင်ပုံဖမ်းယူခြင်းတို့ကို ပြုလုပ်ခွင့်ပေးပါသည်။ ပေးပို့ရန် အလွန်ကြာပြီး အသုံးပြုခြင်းနည်းပါးသည့်အပိုင်းကို ၎င်းက ချန်ခဲ့နိုင်ပါသည်။"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android စနစ်"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"ကိုယ်ရေးကိုယ်တာသုံး ပရိုဖိုင်သို့ ပြောင်းရန်"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"အလုပ်ပရိုဖိုင်သို့ ပြောင်းရန်"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"ကိုယ်ပိုင် <xliff:g id="APP_NAME">%1$s</xliff:g> သို့ပြောင်းရန်"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"အလုပ်သုံး <xliff:g id="APP_NAME">%1$s</xliff:g> သို့ပြောင်းရန်"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"အဆက်အသွယ်များ"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"သင့် အဆက်အသွယ်များအား ဝင်ရောက်သုံးရန်"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"တည်နေရာ"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"အက်ပ်အား တုန်ခါစက်ကို ထိန်းချုပ်ခွင့် ပြုသည်။"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"အက်ပ်ကို တုန်ခါမှုအခြေအနေအား သုံးခွင့်ပေးပါ။"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"ဖုန်းနံပါတ်များကိုတိုက်ရိုက်ခေါ်ဆိုခြင်း"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"အပလီကေးရှင်းအား အလိုအလျောက် ဖုန်းခေါ်ခွင့် ပြုပါ။ မလိုအပ်သော ဖုန်းခ များ ဖြစ်ပေါ်နိုင်ပါသည်။ ဒီခွင့်ပြုခြင်းမှာ အရေးပေါ်ဖုန်းခေါ်ခြင်း မပါဝင်ပါ။ သံသယဖြစ်စရာ အပလီကေးရှင်းများက သင့်မသိပဲ ဖုန်းခေါ်ခြင်းဖြင့် ဖုန်းခ ပိုမိုကျနိုင်ပါသည်။"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"သင့်ဆောင်ရွက်မှုမပါဘဲ အက်ပ်ကို ဖုန်းနံပါတ်များ ခေါ်ခွင့်ပြုသည်။ ထို့ကြောင့် မမျှော်လင့်သော ကျသင့်ငွေ သို့မဟုတ် ခေါ်ဆိုမှုများ ရှိနိုင်သည်။ ၎င်းသည် အက်ပ်ကို အရေးပေါ် နံပါတ်များ ခေါ်ဆိုခွင့်ပြုခြင်း မဟုတ်ပါ။ မသမာသော အက်ပ်များက သင့်အတည်ပြုချက်မပါဘဲ ဖုန်းခေါ်ခြင်းဖြင့် သင့်အား ငွေကြေးကုန်ကျစေနိုင်သည် (သို့) ၎င်းတို့က အဝင်ခေါ်ဆိုမှုများအား အခြားဖုန်းနံပါတ်သို့ အလိုအလျောက်ထပ်ဆင့်ပို့သည့် မိုဘိုင်းဖုန်းကုမ္ပဏီကုဒ်များကို ခေါ်ဆိုနိုင်သည်။"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS ဖုန်းခေါ်ဆိုမှု ဝန်ဆောင်ဌာန ဝင်ကြည့်ပါ"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"သင့်ရဲ့ဝင်ရောက်စွက်ဖက်မှုမပါဘဲ IMS ဝန်ဆောင်မှုကိုအသုံးပြုပြီး ဖုန်းခေါ်ဆိုနိုင်ရန် အပ်ဖ်ကို ခွင့်ပြုထားပါ။"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ဖုန်းရဲ့ အခြေအနေ နှင့် အမှတ်သညာအား ဖတ်ခြင်း"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"အက်ပ်အား ဦစားပေး NFC ငွေပေးချေမှုဆိုင်ရာ ဝန်ဆောင်မှု အချက်အလက်များဖြစ်သည့် မှတ်ပုံတင်ထားသော အကူအညီများနှင့် သွားလာရာ လမ်းကြောင်းတို့ကို ရယူရန် ခွင့်ပြုသည်။"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"Near Field Communicationအား ထိန်းချုပ်ရန်"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"အက်ပ်အား တာတို စက်ကွင်း ဆက်သွယ်ရေး (NFC) တဲဂ်များ၊ ကဒ်များ နှင့် ဖတ်ကြသူတို့နှင့် ဆက်သွယ်ပြောဆိုခွင့် ပြုသည်။"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"‘လုံခြုံရေး အစိတ်အပိုင်း’ ငွေလွှဲပြောင်းမှု အစီအစဉ်"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"‘လုံခြုံရေး အစိတ်အပိုင်း’ တွင် ဖြစ်ပေါ်နေသည့် ငွေလွှဲပြောင်းမှုများအကြောင်း အချက်အလက်ကိုရယူရန် အက်ပ်အား ခွင့်ပြုနိုင်သည်။"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"ဖန်သားပြင် သော့ချခြင်းအား မလုပ်နိုင်အောင် ပိတ်ရန်"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"အပလီကေးရှင်းအား သော့ချခြင်းနှင့် သက်ဆိုင်ရာ စကားဝှက်သတ်မှတ်ခြင်းများအား မသုံးနိုင်အောင် ပိတ်ခြင်းကို ခွင့်ပြုရန်။ ဥပမာ ဖုန်းလာလျှင် သော့ပိတ်ခြင်း ပယ်ဖျက်ခြင်း၊ ဖုန်းပြောပြီးလျှင် သော့ကို အလိုအလျောက် ပြန်ပိတ်ခြင်း"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"ဖုန်းမျက်နှာပြင် လော့ခ်ချရန် ရှုပ်ထွေးမှုအဆင့် တောင်းခံခြင်း"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ဇီဝမက်ထရစ်အချက်အလက်များ (သို့) ဖန်သားပြင်လော့ခ်ချခြင်းကို သုံးခြင်း"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"သင်ဖြစ်ကြောင်း အတည်ပြုပါ"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"ရှေ့ဆက်ရန် သင်၏ ဇီဝမက်ထရစ်အချက်အလက်ကို သုံးပါ"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"ရှေ့ဆက်ရန် သင့်လက်ဗွေကို သုံးပါ"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"ရှေ့ဆက်ရန် သင့်မျက်နှာကို သုံးပါ"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"ရှေ့ဆက်ရန် သင်၏ ဇီဝမက်ထရစ်အချက်အလက် (သို့) ဖန်သားပြင်လော့ခ်ကို သုံးပါ"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"ဇီဝအချက်အလက်သုံး ကွန်ပျူတာစက်ပစ္စည်း မရရှိနိုင်ပါ"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"အထောက်အထားစိစစ်ခြင်းကို ပယ်ဖျက်လိုက်သည်"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"မသိ"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"မျက်နှာကို မသိရှိပါ"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"အထောက်အထားစိစစ်ခြင်းကို ပယ်ဖျက်လိုက်သည်"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"ပင်နံပါတ်၊ လော့ခ်ပုံစံ သို့မဟုတ် စကားဝှက် သတ်မှတ်မထားပါ"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"အထောက်အထားစိစစ်ရာတွင် အမှားအယွင်းရှိနေသည်"</string>
@@ -633,7 +640,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"အလွန် လင်းသည်"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"ဖွင့်ပိတ်ခလုတ် နှိပ်လိုက်သည်"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ပြင်ဆင်ကြည့်ပါ"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"အကြိမ်တိုင်း သင့်လက်ချောင်း၏ အနေအထားကို အနည်းငယ်ပြောင်းပါ"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"လက်ချောင်းအနေအထား နည်းနည်းစီ ပြောင်းပါ"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"လက်ဗွေကို မသိရှိပါ"</string>
@@ -679,8 +686,8 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"အလင်းရောင် အားနည်းသည်"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"ဖုန်းကို အဝေးသို့ခွာပါ"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"ဖုန်းကို အနားသို့ပိုတိုးပါ"</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"ဖုန်းကို ပိုမြှင့်လိုက်ပါ"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"ဖုန်းကို အောက်ပိုနှိမ့်ပါ"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"ဖုန်းကို မြှင့်လိုက်ပါ"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"ဖုန်းကို နှိမ့်လိုက်ပါ"</string>
     <string name="face_acquired_too_right" msgid="6245286514593540859">"ဖုန်းကို သင့်ဘယ်ဘက်သို့ ရွှေ့ပါ"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"ဖုန်းကို သင့်ညာဘက်သို့ ရွှေ့ပါ"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"သင့်စက်ပစ္စည်းကို တည့်တည့်ကြည့်ပါ။"</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"မျက်နှာ ဖုံးနေသည်။ သင့်မျက်နှာအပြည့် မြင်ရရန်လိုသည်။"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"မျက်နှာကို အတည်ပြု၍ မရပါ။ ဟာ့ဒ်ဝဲ မရနိုင်ပါ။"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"မျက်နှာ ဆောင်ရွက်ခြင်းကို ပယ်ဖျက်လိုက်ပါပြီ။"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"အသုံးပြုသူက မျက်နှာပြ လော့ခ်ဖွင့်ခြင်းကို ပယ်ဖျက်ထားသည်"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"အကြိမ်များစွာ စမ်းပြီးပါပြီ။ နောက်မှထပ်စမ်းပါ။"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"ကြိုးပမ်းမှုအကြိမ်ရေ များလွန်းသည်။ မျက်နှာပြ လော့ခ်ဖွင့်ခြင်း မရနိုင်ပါ။"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ကြိုးပမ်းမှုအကြိမ်ရေ များလွန်းသည်။ ဖန်သားပြင် လော့ခ်ကို အစားထိုးထည့်သွင်းပါ။"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"မျက်နှာကို အတည်ပြု၍ မရပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"မျက်နှာပြ လော့ခ်ဖွင့်ခြင်းကို ထည့်သွင်းမထားပါ"</string>
@@ -745,8 +751,8 @@
     <string name="permdesc_sdcardWrite" msgid="8376047679331387102">"မျှဝေသိုလှောင်ခန်းမှ အရာများ ရေးခွင့်ပြုသည်။"</string>
     <string name="permlab_use_sip" msgid="8250774565189337477">"SIP ခေါ်ဆိုမှုများ ခေါ်ရန်/လက်ခံရန်"</string>
     <string name="permdesc_use_sip" msgid="3590270893253204451">"SIP ခေါ်ဆိုမှုများ ခေါ်ရန်နှင့် လက်ခံနိုင်ရန် အက်ပ်ကို ခွင့်ပြုပါ။"</string>
-    <string name="permlab_register_sim_subscription" msgid="1653054249287576161">"တယ်လီကွမ် ဆင်းမ် ချိတ်ဆက်မှုများကို မှတ်ပုံတင်ပါ"</string>
-    <string name="permdesc_register_sim_subscription" msgid="4183858662792232464">"အက်ပ်အား တယ်လီကွမ် ဆင်းမ် ချိတ်ဆက်မှုကို မှတ်ပုံတင်ခွင့် ပြုသည်။"</string>
+    <string name="permlab_register_sim_subscription" msgid="1653054249287576161">"တယ်လီကွမ် ဆင်းမ်ကတ် ချိတ်ဆက်မှုများကို မှတ်ပုံတင်ပါ"</string>
+    <string name="permdesc_register_sim_subscription" msgid="4183858662792232464">"အက်ပ်အား တယ်လီကွမ် ဆင်းမ်ကတ် ချိတ်ဆက်မှုကို မှတ်ပုံတင်ခွင့် ပြုသည်။"</string>
     <string name="permlab_register_call_provider" msgid="6135073566140050702">"တယ်လီကွမ် တယ်လီကွမ် ချိတ်ဆက်မှု အသစ်များကို မှတ်ပုံတင်ပါ"</string>
     <string name="permdesc_register_call_provider" msgid="4201429251459068613">"အက်ပ်အား တယ်လီကွမ် ချိတ်ဆက်မှု အသစ်များကို မှတ်ပုံတင်ခွင့် ပြုသည်။"</string>
     <string name="permlab_connection_manager" msgid="3179365584691166915">"တယ်လီကွမ် ဆက်သွယ်မှုများကို စီမံရန်"</string>
@@ -971,14 +977,14 @@
     <string name="lockscreen_password_wrong" msgid="8605355913868947490">"ထပ် စမ်းပါ"</string>
     <string name="lockscreen_storage_locked" msgid="634993789186443380">"ဝန်ဆောင်မှုနှင့် ဒေတာအားလုံးအတွက် လော့ခ်ဖွင့်ပါ"</string>
     <string name="faceunlock_multiple_failures" msgid="681991538434031708">"မျက်မှာပြ လော့ခ်ဖွင့်ခြင်း ခွင့်ပြုသော အကြိမ်ရေထက် ကျော်လွန်သွားပါပြီ"</string>
-    <string name="lockscreen_missing_sim_message_short" msgid="1229301273156907613">"ဆင်းမ်မရှိပါ"</string>
-    <string name="lockscreen_missing_sim_message" product="tablet" msgid="3986843848305639161">"တက်ဘလက်တွင် ဆင်းမ်မရှိပါ။"</string>
+    <string name="lockscreen_missing_sim_message_short" msgid="1229301273156907613">"ဆင်းမ်ကတ် မရှိပါ"</string>
+    <string name="lockscreen_missing_sim_message" product="tablet" msgid="3986843848305639161">"တက်ဘလက်တွင် ဆင်းမ်ကတ်မရှိပါ။"</string>
     <string name="lockscreen_missing_sim_message" product="tv" msgid="3903140876952198273">"သင့် Android TV စက်တွင် ဆင်းမ်မရှိပါ။"</string>
-    <string name="lockscreen_missing_sim_message" product="default" msgid="6184187634180854181">"ဖုန်းတွင် ဆင်းမ်မရှိပါ။"</string>
-    <string name="lockscreen_missing_sim_instructions" msgid="5823469004536805423">"ဆင်းမ်ထည့်ပါ။"</string>
-    <string name="lockscreen_missing_sim_instructions_long" msgid="4403843937236648032">"ဆင်းမ်မရှိပါ (သို့) သုံး၍မရပါ။ ဆင်းမ်ထည့်ပါ။"</string>
-    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="1925200607820809677">"ဆင်းမ်ကို သုံး၍မရပါ။"</string>
-    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="6902979937802238429">"သင်၏ဆင်းမ်ကို အပြီးပိတ်လိုက်သည်။\n ဆင်းမ်နောက်တစ်ခု ရယူရန် သင်၏ ကြိုးမဲ့ဝန်ဆောင်မှုပေးသူထံ ဆက်သွယ်ပါ။"</string>
+    <string name="lockscreen_missing_sim_message" product="default" msgid="6184187634180854181">"ဖုန်းတွင် ဆင်းမ်ကတ်မရှိပါ။"</string>
+    <string name="lockscreen_missing_sim_instructions" msgid="5823469004536805423">"ဆင်းမ်ကတ်ထည့်ပါ။"</string>
+    <string name="lockscreen_missing_sim_instructions_long" msgid="4403843937236648032">"ဆင်းမ်ကတ်မရှိပါ (သို့) သုံး၍မရပါ။ ဆင်းမ်ကတ်ထည့်ပါ။"</string>
+    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="1925200607820809677">"ဆင်းမ်ကတ်ကို သုံး၍မရပါ။"</string>
+    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="6902979937802238429">"သင်၏ဆင်းမ်ကတ်ကို အပြီးပိတ်လိုက်သည်။\n ဆင်းမ်ကတ်နောက်တစ်ခု ရယူရန် သင်၏ ကြိုးမဲ့ဝန်ဆောင်မှုပေးသူထံ ဆက်သွယ်ပါ။"</string>
     <string name="lockscreen_transport_prev_description" msgid="2879469521751181478">"ယခင် တစ်ပုဒ်"</string>
     <string name="lockscreen_transport_next_description" msgid="2931509904881099919">"နောက် တစ်ပုဒ်"</string>
     <string name="lockscreen_transport_pause_description" msgid="6705284702135372494">"ခဏရပ်ရန်"</string>
@@ -988,10 +994,10 @@
     <string name="lockscreen_transport_ffw_description" msgid="4763794746640196772">"ရှေ့သို့ သွားရန်"</string>
     <string name="emergency_calls_only" msgid="3057351206678279851">"အရေးပေါ်ခေါ်ဆိုမှုသာ"</string>
     <string name="lockscreen_network_locked_message" msgid="2814046965899249635">"ကွန်ရက် သော့ကျနေခြင်း"</string>
-    <string name="lockscreen_sim_puk_locked_message" msgid="2867953953604224166">"ဆင်းမ်၏ ပင်နံပါတ်ပြန်ဖွင့်သည့် ကုဒ်ကို လော့ခ်ချထားသည်။"</string>
+    <string name="lockscreen_sim_puk_locked_message" msgid="2867953953604224166">"ဆင်းမ်ကတ်၏ ပင်နံပါတ်ပြန်ဖွင့်သည့် ကုဒ်ကို လော့ခ်ချထားသည်။"</string>
     <string name="lockscreen_sim_puk_locked_instructions" msgid="5307979043730860995">"သုံးစွဲသူ လမ်းညွှန်ကို ကြည့်ပါ သို့မဟုတ် ဖောက်သည်များ စောင့်ရှောက်ရေး ဌာနကို ဆက်သွယ်ပါ။"</string>
-    <string name="lockscreen_sim_locked_message" msgid="5911944931911850164">"ဆင်းမ်ကို လော့ခ်ချထားသည်။"</string>
-    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="8381565919325410939">"ဆင်းမ်ကိုဖွင့်နေသည်…"</string>
+    <string name="lockscreen_sim_locked_message" msgid="5911944931911850164">"ဆင်းမ်ကတ်ကို လော့ခ်ချထားသည်။"</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="8381565919325410939">"ဆင်းမ်ကတ် ဖွင့်နေသည်…"</string>
     <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6458790975898594240">"သင်သည် သော့ဖွင့် ပုံစံကို<xliff:g id="NUMBER_0">%1$d</xliff:g> ကြိမ် မမှန်မကန် ရေးဆွဲခဲ့သည်။ \n\nထပ်ပြီးတော့ <xliff:g id="NUMBER_1">%2$d</xliff:g>စက္ကန့် အကြာမှာ စမ်းကြည့်ပါ။"</string>
     <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"သင်သည် စကားဝှက်ကို  <xliff:g id="NUMBER_0">%1$d</xliff:g> ကြိမ် မမှန်မကန် ရိုက်ခဲ့ပြီ။ \n\n ထပ်ပြီးတော့ <xliff:g id="NUMBER_1">%2$d</xliff:g> စက္ကန့်အကြာ စမ်းကြည့်ပါ။"</string>
     <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"သင်သည် သင်၏ PIN <xliff:g id="NUMBER_0">%1$d</xliff:g>ကို ကြိမ် မမှန်မကန် ရိုက်ခဲ့ပြီ။ \n\n ထပ်ပြီးတော့ <xliff:g id="NUMBER_1">%2$d</xliff:g> စက္ကန့်အကြာ စမ်းကြည့်ပါ။"</string>
@@ -1191,7 +1197,7 @@
     <string name="whichGiveAccessToApplicationLabel" msgid="7805857277166106236">"ဖွင့်ခွင့်ပေးရန်"</string>
     <string name="whichEditApplication" msgid="6191568491456092812">"...နှင့် တည်းဖြတ်ရန်"</string>
     <string name="whichEditApplicationNamed" msgid="8096494987978521514">"%1$s နှင့် တည်းဖြတ်ရန်"</string>
-    <string name="whichEditApplicationLabel" msgid="1463288652070140285">"တည်းဖြတ်ပါ"</string>
+    <string name="whichEditApplicationLabel" msgid="1463288652070140285">"တည်းဖြတ်ရန်"</string>
     <string name="whichSendApplication" msgid="4143847974460792029">"မျှဝေပါ"</string>
     <string name="whichSendApplicationNamed" msgid="4470386782693183461">"%1$sနှင့် မျှဝေရန်"</string>
     <string name="whichSendApplicationLabel" msgid="7467813004769188515">"မျှဝေပါ"</string>
@@ -1283,13 +1289,13 @@
     <string name="volume_call" msgid="7625321655265747433">"ခေါ်ဆိုနေခြင်းအသံအတိုးအကျယ်"</string>
     <string name="volume_bluetooth_call" msgid="2930204618610115061">"ဘလူးတုသ်ဖြင့် ခေါ်ဆိုနေခြင်းအသံအတိုးအကျယ်"</string>
     <string name="volume_alarm" msgid="4486241060751798448">"နှိုးစက်သံအတိုးအကျယ်"</string>
-    <string name="volume_notification" msgid="6864412249031660057">"အကြောင်းကြားသံအတိုးအကျယ်"</string>
+    <string name="volume_notification" msgid="6864412249031660057">"အကြောင်းကြားသံ အတိုးအကျယ်"</string>
     <string name="volume_unknown" msgid="4041914008166576293">"အသံအတိုးအကျယ်"</string>
     <string name="volume_icon_description_bluetooth" msgid="7540388479345558400">"ဘလူးတုသ်သံအတိုးအကျယ်"</string>
     <string name="volume_icon_description_ringer" msgid="2187800636867423459">"ဖုန်းမြည်သံအတိုးအကျယ်"</string>
     <string name="volume_icon_description_incall" msgid="4491255105381227919">"ဖုန်းခေါ်သံအတိုးအကျယ်"</string>
     <string name="volume_icon_description_media" msgid="4997633254078171233">"မီဒီယာအသံအတိုးအကျယ်"</string>
-    <string name="volume_icon_description_notification" msgid="579091344110747279">"အကြောင်းကြားသံအတိုးအကျယ်"</string>
+    <string name="volume_icon_description_notification" msgid="579091344110747279">"အကြောင်းကြားသံ အတိုးအကျယ်"</string>
     <string name="ringtone_default" msgid="9118299121288174597">"မူရင်းမြည်သံ"</string>
     <string name="ringtone_default_with_actual" msgid="2709686194556159773">"မူရင်း (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
     <string name="ringtone_silent" msgid="397111123930141876">"မရှိ"</string>
@@ -1336,7 +1342,7 @@
     <string name="sms_short_code_confirm_always_allow" msgid="2223014893129755950">"အမြဲခွင့်ပြုရန်"</string>
     <string name="sms_short_code_confirm_never_allow" msgid="2688828813521652079">"ဘယ်တော့မှခွင့်မပြုပါ"</string>
     <string name="sim_removed_title" msgid="1349026474932481037">"ဆင်းမ်ဖယ်ရှားလိုက်သည်"</string>
-    <string name="sim_removed_message" msgid="8469588437451533845">"မှန်ကန်သောဆင်းမ်ဖြင့် ပြန်မစမချင်း မိုဘိုင်းကွန်ရက်ကို ရနိုင်မည်မဟုတ်ပါ။"</string>
+    <string name="sim_removed_message" msgid="8469588437451533845">"မှန်ကန်သောဆင်းမ်ကတ်ဖြင့် ပြန်မစမချင်း မိုဘိုင်းကွန်ရက်ကို ရနိုင်မည်မဟုတ်ပါ။"</string>
     <string name="sim_done_button" msgid="6464250841528410598">"ပြီးပါပြီ"</string>
     <string name="sim_added_title" msgid="2976783426741012468">"ဆင်းမ်ထည့်လိုက်သည်"</string>
     <string name="sim_added_message" msgid="6602906609509958680">"မိုးဘိုင်းကွန်ရက်ကို ဆက်သွယ်ရန် စက်ကို ပြန် စ ပါ"</string>
@@ -1368,7 +1374,7 @@
     <string name="usb_power_notification_message" msgid="7284765627437897702">"ချိတ်ဆက်ထားသည့် စက်ပစ္စည်းကို အားသွင်းနေသည်။ နောက်ထပ်ရွေးချယ်စရာများအတွက် တို့ပါ။"</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"အန်နာလော့ အသံကိရိယာကို တွေ့ထားပါသည်"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"တပ်ဆင်ထားသော ကိရိယာကို ဤဖုန်းနှင့် တွဲသုံး၍မရပါ။ ပိုမိုလေ့လာရန် တို့ပါ။"</string>
-    <string name="adb_active_notification_title" msgid="408390247354560331">"USB အမှားရှာပြင်စနစ် ချိတ်ဆက်ထားသည်"</string>
+    <string name="adb_active_notification_title" msgid="408390247354560331">"USB အမှားရှာပြင်ခြင်း ချိတ်ထားသည်"</string>
     <string name="adb_active_notification_message" msgid="5617264033476778211">"USB အမှားရှာပြင်ခြင်းကို ပိတ်ရန် တို့ပါ"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"USB ဖြင့် အမှားရှာပြင်ခြင်းကို ပိတ်ရန် ရွေးပါ။"</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"ကြိုးမဲ့ အမှားရှာပြင်ခြင်းကို ချိတ်ဆက်ပြီးပြီ"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ငြင်းပယ်ပါ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"ထည့်သွင်းရေး နည်းကို ရွေးရန်"</string>
     <string name="show_ime" msgid="6406112007347443383">"စက်၏ကီးဘုတ် ဖွင့်ထားစဉ်တွင် ၎င်းကို ဖန်သားပြင်ပေါ်တွင် ဆက်ထားပါ"</string>
-    <string name="hardware" msgid="1800597768237606953">"ပကတိအသွင်ကီးဘုတ်ပြရန်"</string>
+    <string name="hardware" msgid="3611039921284836033">"မျက်နှာပြင် လက်ကွက် သုံးခြင်း"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> ကို စီစဉ်သတ်မှတ်ရန်"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"ပကတိကီးဘုတ်များကို စီစဉ်သတ်မှတ်ရန်"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"ဘာသာစကားနှင့် အသွင်အပြင်ရွေးချယ်ရန် တို့ပါ"</string>
@@ -1652,7 +1658,7 @@
     <string name="kg_puk_enter_puk_hint" msgid="6696187482616360994">"ဆင်းမ်ကဒ်သည် ယခု ပိတ်သွားပါပြီ ဆက်လက် လုပ်ဆောင်ရန် ပင်နံပါတ် ပြန်ဖွင့်သည့် ကုဒ်ကို ရိုက်ထည့်ပါ။ ပိုမိုသိချင်လျင် ဖုန်းဝန်ဆောင်မှု ပေးသောဌာန အားဆက်သွယ်နိုင်ပါသည်။"</string>
     <string name="kg_puk_enter_pin_hint" msgid="8190982314659429770">"လိုချင်သော ပင်နံပါတ်ကို ရိုက်ထည့်ပါ"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="6372557107414074580">"လိုချင်သော ပင်နံပါတ်ကို အတည်ပြုရန်"</string>
-    <string name="kg_sim_unlock_progress_dialog_message" msgid="5743634657721110967">"ဆင်းမ်ကိုဖွင့်နေသည်…"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="5743634657721110967">"ဆင်းမ်ကတ် ဖွင့်နေသည်…"</string>
     <string name="kg_password_wrong_pin_code" msgid="9013856346870572451">"ပင်နံပါတ် အမှား"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="4821601451222564077">"ဂဏန်း၄ လုံးမှ ၈ လုံးအထိ ရှိသော ပင်နံပါတ် ရိုက်ထည့်ပါ"</string>
     <string name="kg_invalid_sim_puk_hint" msgid="2539364558870734339">"ပင်နံပါတ် ပြန်ဖွင့်သည့် ကုဒ် က နံပါတ် ၈ လုံး ဖြစ်ရပါမည်"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"ဖယ်ရှားရန်"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"အသံကို အကြံပြုထားသည့် ပမာဏထက် မြှင့်ပေးရမလား?\n\nအသံကို မြင့်သည့် အဆင့်မှာ ကြာရှည်စွာ နားထောင်ခြင်းက သင်၏ နားကို ထိခိုက်စေနိုင်သည်။"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"သတိပေးချက်-\nတစ်ပတ်တာအတွင်း နားကြပ်ဖြင့် ဘေးကင်းကင်း အသံကျယ်လောင်စွာ နားထောင်နိုင်သည့် ပမာဏကို ကျော်လွန်သွားပါပြီ။\n\nဤကန့်သတ်ချက်ကျော်လွန်ခြင်းက သင့်အကြားအာရုံကို ထာဝရထိခိုက်စေမည်။"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"သတိပေးချက်-\nတစ်ပတ်တာအတွင်း နားကြပ်ဖြင့် ဘေးကင်းကင်း အသံကျယ်လောင်စွာ နားထောင်နိုင်သည့် ပမာဏထက် ၅ ဆ ကျော်လွန်သွားပါပြီ။\n\nသင့်အကြားအာရုံကို မထိခိုက်စေရန် အသံတိုးလိုက်သည်။"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"မီဒီယာကို ယခုနားထောင်သည့်အဆင့်ဖြင့် အချိန်ကြာမြင့်စွာ နားထောင်ပါက အကြားအာရုံကို ထိခိုက်နိုင်သည်။\n\nဤအဆင့်ဖြင့် အချိန်ကြာမြင့်စွာ ဆက်ဖွင့်ခြင်းက သင့်အကြားအာရုံကို ထိခိုက်စေနိုင်သည်။"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"သတိပေးချက်-\nသင်သည် ကျယ်လောင်သော အကြောင်းအရာကို အန္တရာယ်ရှိသောအဆင့်ဖြင့် လက်ရှိဖွင့်ထားသည်။\n\nဤသို့ကျယ်လောင်စွာ ဆက်လက်နားထောင်ခြင်းက သင့်အကြားအာရုံကို ထာဝရထိခိုက်စေမည်။"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"အသံကျယ်ကျယ်ဖြင့် ဆက်နားဆင်မလား။\n\nနားကြပ်အသံအား အကြံပြုထားသည်ထက် ပိုကြာရှည်စွာ ချဲ့ထားပြီး ၎င်းက သင့်အကြားအာရုံကို ထိခိုက်စေနိုင်သည်"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"ကျယ်လောင်သောအသံကို သိရှိသည်\n\nနားကြပ်အသံအား အကြံပြုထားသည်ထက် ပိုချဲ့ထားပြီး ၎င်းက သင့်အကြားအာရုံကို ထိခိုက်စေနိုင်သည်"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"အများသုံးနိုင်မှု ဖြတ်လမ်းလင့်ခ်ကို အသုံးပြုလိုပါသလား။"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"ဖြတ်လမ်းလင့်ခ်ကို ဖွင့်ထားစဉ် အသံထိန်းခလုတ် နှစ်ခုစလုံးကို ၃ စက္ကန့်ခန့် ဖိထားခြင်းဖြင့် အများသုံးနိုင်သည့် ဝန်ဆောင်မှုကို ဖွင့်နိုင်သည်။"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"အများသုံးစွဲနိုင်မှုဆိုင်ရာ ဝန်ဆောင်မှုများအတွက် ဖြတ်လမ်းကို ဖွင့်မလား။"</string>
@@ -1728,7 +1732,7 @@
     <string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"ဝန်ဆောင်မှုများအကြား ပြောင်းရန် လက်သုံးချောင်းဖြင့် အပေါ်သို့ ပွတ်ဆွဲပြီး ဖိထားပါ။"</string>
     <string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"ချဲ့ခြင်း"</string>
     <string name="user_switched" msgid="7249833311585228097">"လက်ရှိအသုံးပြုနေသူ <xliff:g id="NAME">%1$s</xliff:g>."</string>
-    <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g>သို့ ပြောင်းနေ…"</string>
+    <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g>သို့ ပြောင်းနေသည်…"</string>
     <string name="user_logging_out_message" msgid="7216437629179710359">"<xliff:g id="NAME">%1$s</xliff:g>ကို ထွက်ပစ်ပါတော့မည်..."</string>
     <string name="owner_name" msgid="8713560351570795743">"ပိုင်ရှင်"</string>
     <string name="guest_name" msgid="8502103277839834324">"ဧည့်သည်"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"ထွက်ရန် အပေါ်မှ အောက်သို့ ဆွဲချပါ။"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"ရပါပြီ"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"ပိုကောင်းသောမြင်ကွင်းအတွက် လှည့်ပါ"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"ပိုကောင်းသောမြင်ကွင်းအတွက် မျက်နှာပြင် ခွဲ၍ပြသခြင်းမှ ထွက်ပါ"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"ပိုကောင်းသောမြင်ကွင်းအတွက် ဖန်သားပြင်အပြည့်ဖြင့် <xliff:g id="NAME">%s</xliff:g> ကို ဖွင့်ပါ"</string>
     <string name="done_label" msgid="7283767013231718521">"ပြီးပါပြီ"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"နာရီရွေးချက်စရာ"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"မိနစ်လှည့်သော ရွေ့လျားတန်"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"အက်ပ်ကို မရနိုင်ပါ"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ကို ယခု မရနိုင်ပါ။"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> မရနိုင်ပါ"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"ခွင့်ပြုချက်လိုအပ်သည်"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"ခွင့်ပြုချက်တောင်းဆိုမှု ပိတ်ထားသည်"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"ဤအက်ပ်သည် နောက်ထပ်ခွင့်ပြုချက်များကို တောင်းဆိုနေသော်လည်း တိုက်ရိုက်လွှင့်စက်ရှင်တွင် ခွင့်ပြုချက်များ ပေး၍မရပါ။ သင့် Android TV စက်တွင် ဦးစွာ ခွင့်ပြုချက်ပေးပါ။"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"ဤအက်ပ်သည် နောက်ထပ်ခွင့်ပြုချက်များကို တောင်းဆိုနေသော်လည်း တိုက်ရိုက်လွှင့်စက်ရှင်တွင် ခွင့်ပြုချက်များ ပေး၍မရပါ။ သင့်တက်ဘလက်တွင် ဦးစွာ ခွင့်ပြုချက်ပေးပါ။"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"ဤအက်ပ်သည် နောက်ထပ်ခွင့်ပြုချက်များကို တောင်းဆိုနေသော်လည်း တိုက်ရိုက်လွှင့်စက်ရှင်တွင် ခွင့်ပြုချက်များ ပေး၍မရပါ။ သင့်ဖုန်းတွင် ဦးစွာ ခွင့်ပြုချက်ပေးပါ။"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"ဤအက်ပ်ကို ဗားရှင်းဟောင်းအတွက် ရေးထားသည်။ ၎င်းကမှန်ကန်စွာ လုပ်ဆောင်နိုင်မည်မဟုတ်ဘဲ နောက်ဆုံးထုတ် လုံခြုံရေးနှင့် ကိုယ်ရေးအချက်အလက်လုံခြုံမှု အကာအကွယ်များ မပါဝင်ပါ။ အပ်ဒိတ်ရှာကြည့်ပါ (သို့) အက်ပ်ရေးသူထံ ဆက်သွယ်ပါ။"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"အပ်ဒိတ်စစ်ရန်"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"ဤအက်ပ်သည် Android နောက်ဆုံးဗားရှင်းနှင့် တွဲမသုံးနိုင်ပါ။ အပ်ဒိတ်ရှာကြည့်ပါ (သို့) အက်ပ်ရေးသူထံ ဆက်သွယ်ပါ။"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"သင့်ထံတွင် စာအသစ်များရောက်နေသည်"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"ကြည့်ရှုရန် SMS အက်ပ်ကိုဖွင့်ပါ"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"လုပ်ဆောင်ချက် ကန့်သတ်မှုရှိနိုင်သည်"</string>
@@ -2045,14 +2053,14 @@
     <string name="etws_primary_default_message_test" msgid="4583367373909549421">"အရေးပေါ် မက်ဆေ့ဂျ် စမ်းသပ်မှု"</string>
     <string name="notification_reply_button_accessibility" msgid="5235776156579456126">"စာပြန်ရန်"</string>
     <string name="etws_primary_default_message_others" msgid="7958161706019130739"></string>
-    <string name="mmcc_authentication_reject" msgid="4891965994643876369">"စကားသံအတွက် ဆင်းမ်ကို ခွင့်မပြုပါ"</string>
-    <string name="mmcc_imsi_unknown_in_hlr" msgid="227760698553988751">"စကားသံအတွက် ဆင်းမ်ကို ထောက်ပံ့မထားပါ"</string>
-    <string name="mmcc_illegal_ms" msgid="7509650265233909445">"စကားသံအတွက် ဆင်းမ်ကို ခွင့်မပြုပါ"</string>
+    <string name="mmcc_authentication_reject" msgid="4891965994643876369">"စကားသံအတွက် ဆင်းမ်ကတ်ကို ခွင့်မပြုပါ"</string>
+    <string name="mmcc_imsi_unknown_in_hlr" msgid="227760698553988751">"စကားသံအတွက် ဆင်းမ်ကတ်ကို ထောက်ပံ့မထားပါ"</string>
+    <string name="mmcc_illegal_ms" msgid="7509650265233909445">"စကားသံအတွက် ဆင်းမ်ကတ်ကို ခွင့်မပြုပါ"</string>
     <string name="mmcc_illegal_me" msgid="6505557881889904915">"စကားသံအတွက် ဖုန်းကို ခွင့်မပြုပါ"</string>
-    <string name="mmcc_authentication_reject_msim_template" msgid="4480853038909922153">"ဆင်းမ် <xliff:g id="SIMNUMBER">%d</xliff:g> ကို ခွင့်မပြုပါ"</string>
-    <string name="mmcc_imsi_unknown_in_hlr_msim_template" msgid="3688508325248599657">"ဆင်းမ် <xliff:g id="SIMNUMBER">%d</xliff:g> ကို ပေးမထားပါ"</string>
-    <string name="mmcc_illegal_ms_msim_template" msgid="832644375774599327">"ဆင်းမ် <xliff:g id="SIMNUMBER">%d</xliff:g> ကို ခွင့်မပြုပါ"</string>
-    <string name="mmcc_illegal_me_msim_template" msgid="4802735138861422802">"ဆင်းမ် <xliff:g id="SIMNUMBER">%d</xliff:g> ကို ခွင့်မပြုပါ"</string>
+    <string name="mmcc_authentication_reject_msim_template" msgid="4480853038909922153">"ဆင်းမ်ကတ် <xliff:g id="SIMNUMBER">%d</xliff:g> ကို ခွင့်မပြုပါ"</string>
+    <string name="mmcc_imsi_unknown_in_hlr_msim_template" msgid="3688508325248599657">"ဆင်းမ်ကတ် <xliff:g id="SIMNUMBER">%d</xliff:g> ကို ပေးမထားပါ"</string>
+    <string name="mmcc_illegal_ms_msim_template" msgid="832644375774599327">"ဆင်းမ်ကတ် <xliff:g id="SIMNUMBER">%d</xliff:g> ကို ခွင့်မပြုပါ"</string>
+    <string name="mmcc_illegal_me_msim_template" msgid="4802735138861422802">"ဆင်းမ်ကတ် <xliff:g id="SIMNUMBER">%d</xliff:g> ကို ခွင့်မပြုပါ"</string>
     <string name="popup_window_default_title" msgid="6907717596694826919">"ပေါ့ပ်အပ် ဝင်းဒိုး"</string>
     <string name="slice_more_content" msgid="3377367737876888459">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string>
     <string name="shortcut_restored_on_lower_version" msgid="9206301954024286063">"အက်ပ်ဗားရှင်းကို အဆင့်နှိမ့်ထားသည် သို့မဟုတ် ဤဖြတ်လမ်းလင့်ခ်နှင့် သဟဇာတမဖြစ်ပါ"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ဤအကြောင်းအရာကို အလုပ်သုံးအက်ပ်များဖြင့် မဖွင့်နိုင်ပါ"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ဤအကြောင်းအရာကို ကိုယ်ပိုင်အက်ပ်များဖြင့် မမျှဝေနိုင်ပါ"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ဤအကြောင်းအရာကို ကိုယ်ပိုင်အက်ပ်များဖြင့် မဖွင့်နိုင်ပါ"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"အလုပ်ပရိုဖိုင် ခဏရပ်ထားသည်"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"ဖွင့်ရန်တို့ပါ"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"အလုပ်သုံးအက်ပ်များကို ခေတ္တရပ်ထားသည်"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"ပြန်ဖွင့်ရန်"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"အလုပ်သုံးအက်ပ်များ မရှိပါ"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ကိုယ်ပိုင်အက်ပ်များ မရှိပါ"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"အလုပ်သုံး <xliff:g id="APP">%s</xliff:g> ဖွင့်မလား။"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"ကိုယ်ပိုင် <xliff:g id="APP">%s</xliff:g> တွင် ဖွင့်မလား။"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"အလုပ် <xliff:g id="APP">%s</xliff:g> တွင် ဖွင့်မလား။"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"အလုပ်သုံးအက်ပ်မှ ဖုန်းဆက်မလား။"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"အလုပ်သုံးအက်ပ်သို့ ပြောင်းမလား။"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"သင့်အဖွဲ့အစည်းသည် သင့်အား အလုပ်သုံးအက်ပ်များမှသာ ဖုန်းဆက်ခွင့်ပြုသည်"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"သင့်အဖွဲ့အစည်းသည် သင့်အား အလုပ်သုံးအက်ပ်များမှသာ မက်ဆေ့ဂျ်ပို့ခွင့်ပြုသည်"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ကိုယ်ပိုင်ဘရောင်ဇာ သုံးရန်"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"အလုပ်သုံးဘရောင်ဇာ သုံးရန်"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"ဖုန်းဆက်ရန်"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"ပြောင်းရန်"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"ဆင်းမ်ကွန်ရက် လော့ခ်ဖွင့်ရန် ပင်နံပါတ်"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"ဆင်းမ်ကွန်ရက်ခွဲ လော့ခ်ဖွင့်ရန် ပင်နံပါတ်"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"ဆင်းမ်ကော်ပိုရိတ် လော့ခ်ဖွင့်ရန် ပင်နံပါတ်"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"သင်၏ <xliff:g id="DEVICE">%1$s</xliff:g> မှ ဖုန်းကင်မရာကို သုံး၍မရပါ"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"သင်၏ <xliff:g id="DEVICE">%1$s</xliff:g> မှ တက်ဘလက်ကင်မရာကို သုံး၍မရပါ"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"တိုက်ရိုက်လွှင့်နေစဉ် ၎င်းကို မသုံးနိုင်ပါ။ ၎င်းအစား ဖုန်းတွင် စမ်းကြည့်ပါ။"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"တိုက်ရိုက်လွှင့်စဉ် နှစ်ခုထပ်၍ မကြည့်နိုင်ပါ"</string>
     <string name="system_locale_title" msgid="711882686834677268">"စနစ်မူရင်း"</string>
     <string name="default_card_name" msgid="9198284935962911468">"ကတ် <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"လက်ပတ်နာရီများစီမံရန် ‘တွဲဖက်နာရီ’ ပရိုဖိုင်ခွင့်ပြုချက်"</string>
@@ -2317,19 +2331,19 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"နောက်ခံမှနေ၍ မျက်နှာစာဝန်ဆောင်မှုများ စတင်ရန် တွဲဖက် အက်ပ်ကို ခွင့်ပြုသည်။"</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"မိုက်ခရိုဖုန်း သုံးနိုင်သည်"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"မိုက်ခရိုဖုန်း ပိတ်ထားသည်"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"စခရင်နှစ်ခု"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"‘စခရင်နှစ်ခု’ ဖွင့်ထားသည်"</string>
-    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် အကြောင်းအရာကို ဖန်သားပြင်နှစ်ခုစလုံးတွင် ပြနေသည်"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual screen ဖွင့်ထားသည်"</string>
+    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် အကြောင်းအရာကို ပြရန် ဖန်သားပြင်နှစ်ခုစလုံးကို သုံးနေသည်"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"စက်ပစ္စည်း အလွန်ပူနေသည်"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"သင့်ဖုန်း အလွန်ပူနေသဖြင့် ‘စခရင်နှစ်ခု’ သုံး၍မရပါ"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"သင့်ဖုန်း အလွန်ပူနေသဖြင့် Dual screen သုံး၍မရပါ"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen သုံး၍မရပါ"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"‘ဘက်ထရီ အားထိန်း’ ဖွင့်ထားသဖြင့် Dual Screen သုံး၍မရပါ။ ၎င်းကို ဆက်တင်များတွင် ပိတ်နိုင်သည်။"</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"ဆက်တင်များသို့ သွားရန်"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"ပိတ်ရန်"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> စီစဉ်သတ်မှတ်ထားသည်"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"ကီးဘုတ်အပြင်အဆင်ကို <xliff:g id="LAYOUT_1">%s</xliff:g> ဟု သတ်မှတ်ထားသည်။ ပြောင်းရန်တို့ပါ။"</string>
-    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"ကီးဘုတ်အပြင်အဆင်ကို <xliff:g id="LAYOUT_1">%1$s</xliff:g>၊ <xliff:g id="LAYOUT_2">%2$s</xliff:g> ဟု သတ်မှတ်ထားသည်။ ပြောင်းရန်တို့ပါ။"</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"ကီးဘုတ်အပြင်အဆင်ကို <xliff:g id="LAYOUT_1">%1$s</xliff:g>၊ <xliff:g id="LAYOUT_2">%2$s</xliff:g>၊ <xliff:g id="LAYOUT_3">%3$s</xliff:g> ဟု သတ်မှတ်ထားသည်။ ပြောင်းရန်တို့ပါ။"</string>
+    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"ကီးဘုတ်ကို <xliff:g id="LAYOUT_1">%1$s</xliff:g>၊ <xliff:g id="LAYOUT_2">%2$s</xliff:g> ဟု သတ်မှတ်ထားသည်။ ပြောင်းရန်တို့ပါ။"</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"ကီးဘုတ်ကို <xliff:g id="LAYOUT_1">%1$s</xliff:g>၊ <xliff:g id="LAYOUT_2">%2$s</xliff:g>၊ <xliff:g id="LAYOUT_3">%3$s</xliff:g> ဟု သတ်မှတ်ထားသည်။ ပြောင်းရန်တို့ပါ။"</string>
     <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"ကီးဘုတ်အပြင်အဆင်ကို <xliff:g id="LAYOUT_1">%1$s</xliff:g>၊ <xliff:g id="LAYOUT_2">%2$s</xliff:g>၊ <xliff:g id="LAYOUT_3">%3$s</xliff:g> သို့ သတ်မှတ်လိုက်သည်… ပြောင်းရန် တို့ပါ။"</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"ပကတိကီးဘုတ်များကို စီစဉ်သတ်မှတ်ထားသည်"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"ကီးဘုတ်များကြည့်ရန် တို့ပါ"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 26bf9c1..50bdebf 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -144,7 +144,7 @@
     <string name="wifi_calling_off_summary" msgid="5626710010766902560">"Av"</string>
     <string name="wfc_mode_wifi_preferred_summary" msgid="1035175836270943089">"Ring via Wifi"</string>
     <string name="wfc_mode_cellular_preferred_summary" msgid="4958965609212575619">"Ring over mobilnettverk"</string>
-    <string name="wfc_mode_wifi_only_summary" msgid="104951993894678665">"Bare Wifi"</string>
+    <string name="wfc_mode_wifi_only_summary" msgid="104951993894678665">"Bare wifi"</string>
     <!-- no translation found for crossSimFormat_spn (9125246077491634262) -->
     <skip />
     <string name="crossSimFormat_spn_cross_sim_calling" msgid="5620807020002879057">"<xliff:g id="SPN">%s</xliff:g>-reserve for anrop"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android-system"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Bytt til personlig profil"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Bytt til jobbprofil"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Bytt til <xliff:g id="APP_NAME">%1$s</xliff:g> for personlig bruk"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Bytt til <xliff:g id="APP_NAME">%1$s</xliff:g> for jobb"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakter"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"se kontaktene dine"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Posisjon"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Lar appen kontrollere vibreringsfunksjonen."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Gir appen tilgang til vibreringstilstanden."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"ringe telefonnummer direkte"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Lar appen ringe telefonnumre uten at du gjør noe. Dette kan resultere i uventede oppringninger og kostnader. Appen kan imidlertid ikke ringe nødnumre. Merk at skadelige apper kan påføre deg kostnader ved å ringe uten bekreftelse fra deg."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Dette gir appen tillatelse til å ringe telefonnumre uten at du gjør noe. Dette kan føre til uventede kostnader eller anrop. Vær oppmerksom på at dette ikke fører til at appen kan ringe nødnumre. Skadelige apper kan føre til kostnader ved at de kan ringe uten å få bekreftelse fra deg, eller de kan ringe operatørkoder som fører til at innkommende anrop automatisk viderekobles til andre numre."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"få tilgang til nettprattjenesten for ringing"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Lar appen bruke nettprattjenesten til å ringe uten at du gjør noe."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"lese telefonstatus og -identitet"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Gir appen tilgang til informasjon om prioritert NFC-betalingstjeneste, for eksempel registrerte hjelpemidler og destinasjon."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"kontroller overføring av data med NFC-teknologi"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Lar appen kommunisere med etiketter, kort og lesere som benytter NFC-teknologi."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Transaksjonshendelse på sikkert element"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Lar appen motta informasjon om transaksjoner som finner sted på et sikkert element."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"deaktivere skjermlåsen"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Lar appen deaktivere tastelåsen og eventuell tilknyttet passordsikkerhet. Et eksempel er at telefonen deaktiverer tastelåsen når du mottar et innkommende anrop, og deretter aktiverer tastelåsen igjen når samtalen er ferdig."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"be om skjermlåsens kompleksitet"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Bruk biometri eller skjermlås"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Bekreft at det er deg"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Bruk biometri for å fortsette"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Bruk fingeravtrykket for å fortsette"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Bruk ansiktet for å fortsette"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Bruk biometri eller skjermlåsen for å fortsette"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrisk maskinvare er utilgjengelig"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autentiseringen er avbrutt"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Ikke gjenkjent"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Gjenkjenner ikke ansiktet"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autentiseringen er avbrutt"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN-kode, mønster eller passord er ikke angitt"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Feil under autentiseringen"</string>
@@ -633,7 +640,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"For lyst"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Trykk på av/på-knappen er registrert"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Prøv å justere"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Endre posisjonen til fingeren litt hver gang"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Endre fingerens posisjon litt hver gang"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Gjenkjenner ikke fingeravtrykket"</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Ansiktet er tildekket. Hele ansiktet må vises."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Kan ikke bekrefte ansikt. Utilgjengelig maskinvare."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Ansikt-operasjonen ble avbrutt."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Ansiktslås ble avbrutt av brukeren"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"For mange forsøk. Prøv på nytt senere."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"For mange forsøk Ansiktslås er utilgjengelig."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"For mange forsøk. Skriv inn skjermlås i stedet."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Kan ikke bekrefte ansiktet. Prøv på nytt."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Du har ikke konfigurert ansiktslås"</string>
@@ -1121,7 +1127,7 @@
     <string name="duration_days_shortest_future" msgid="3392722163935571543">"om <xliff:g id="COUNT">%d</xliff:g> d"</string>
     <string name="duration_years_shortest_future" msgid="5537464088352970388">"om <xliff:g id="COUNT">%d</xliff:g> år"</string>
     <string name="duration_minutes_relative" msgid="8620337701051015593">"{count,plural, =1{for # minutt siden}other{For # minutter siden}}"</string>
-    <string name="duration_hours_relative" msgid="4836449961693180253">"{count,plural, =1{For # time siden}other{For # timer siden}}"</string>
+    <string name="duration_hours_relative" msgid="4836449961693180253">"{count,plural, =1{# time siden}other{# timer siden}}"</string>
     <string name="duration_days_relative" msgid="621965767567258302">"{count,plural, =1{For # dag siden}other{For # dager siden}}"</string>
     <string name="duration_years_relative" msgid="8731202348869424370">"{count,plural, =1{For # år siden}other{For # år siden}}"</string>
     <string name="duration_minutes_relative_future" msgid="5259574171747708115">"{count,plural, =1{# minutt}other{# minutter}}"</string>
@@ -1364,7 +1370,7 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"MIDI via USB er slått på"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Enheten er koblet til som webkamera"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"USB-tilbehør er tilkoblet"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"Trykk for å få flere alternativ."</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"Trykk for flere alternativer."</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Den tilkoblede enheten lades. Trykk for å se flere alternativer."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Analogt lydtilbehør ble oppdaget"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Den tilkoblede enheten er ikke kompatibel med denne telefonen. Trykk for å finne ut mer."</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"AVSLÅ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Velg inndatametode"</string>
     <string name="show_ime" msgid="6406112007347443383">"Ha den på skjermen mens det fysiske tastaturet er aktivt"</string>
-    <string name="hardware" msgid="1800597768237606953">"Vis det virtuelle tastaturet"</string>
+    <string name="hardware" msgid="3611039921284836033">"Bruk skjermtastaturet"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Konfigurer <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Konfigurer de fysiske tastaturene"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Trykk for å velge språk og layout"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Fjern"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Vil du øke volumet til over anbefalt nivå?\n\nHvis du hører på et høyt volum over lengre perioder, kan det skade hørselen din."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Advarsel:\nDu har overskredet antallet høye lydsignaler det er trygt å lytte til i løpet av en uke via hodetelefoner.\n\nHvis du går over denne grensen, blir hørselen permanent skadet."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Advarsel:\nDu har overskredet 5 ganger antallet høye lydsignaler det er trygt å lytte til i løpet av en uke via hodetelefoner.\n\nVolumet er senket for å beskytte hørselen."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Lydnivået du bruker til å lytte til medier, kan føre til hørselsskade når det vedvarer over lengre perioder.\n\nHvis du fortsetter å spille av på dette nivået over lengre perioder, kan du skade hørselen."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Advarsel:\nDu lytter til høyt innhold som spilles av på et utrygt nivå.\n\nHvis du fortsetter å lytte på dette lydnivået, fører det til permanent hørselsskade."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Vil du fortsette å lytte på høyt volum?\n\nVolumet på hodetelefonene har vært høyt lenger enn anbefalt, noe som kan skade hørselen din"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Høy lyd registrert\n\nVolumet på hodetelefonene har vært høyere enn anbefalt, noe som kan skade hørselen din"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Vil du bruke tilgjengelighetssnarveien?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Når snarveien er på, starter en tilgjengelighetsfunksjon når du trykker inn begge volumknappene i tre sekunder."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Vil du slå på snarveien for tilgjengelighetsfunksjoner?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Sveip ned fra toppen for å avslutte."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Skjønner"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Roter for å få en bedre visning"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Avslutt delt skjerm for å få en bedre visning"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Åpne <xliff:g id="NAME">%s</xliff:g> i fullskjerm for å se bedre"</string>
     <string name="done_label" msgid="7283767013231718521">"Ferdig"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Sirkulær glidebryter for timer"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Sirkulær glidebryter for minutter"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Appen er ikke tilgjengelig"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> er ikke tilgjengelig for øyeblikket."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> er utilgjengelig"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Du må gi tillatelse"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Forespørselen om tillatelse er skjult"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Denne appen ber om flere tillatelser, men du kan ikke gi tillatelser i en strømmeøkt. Gi tillatelsen på Android TV-enheten først."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Denne appen ber om flere tillatelser, men du kan ikke gi tillatelser i en strømmeøkt. Gi tillatelsen på nettbrettet først."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Denne appen ber om flere tillatelser, men du kan ikke gi tillatelser i en strømmeøkt. Gi tillatelsen på telefonen først."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Dette er ikke tilgjengelig på <xliff:g id="DEVICE">%1$s</xliff:g>. Prøv på telefonen din i stedet."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Denne appen er utviklet for en eldre Android-versjon. Det er ikke sikkert at den fungerer som den skal, og den mangler det nyeste innen sikkerhet og personvern. Se etter en oppdatering, eller kontakt utvikleren av appen."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Se etter oppdateringer"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Denne appen er ikke kompatibel med den nyeste versjonen av Android. Se etter en oppdatering, eller kontakt utvikleren av appen."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Du har nye meldinger"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Åpne SMS-appen for å se"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Enkelte funksjoner kan begrenses"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Dette innholdet kan ikke åpnes med jobbapper"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Dette innholdet kan ikke deles med personlige apper"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Dette innholdet kan ikke åpnes med personlige apper"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Jobbprofilen er satt på pause"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Trykk for å slå på"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Jobbapper er satt på pause"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Slå av pausen"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ingen jobbapper"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ingen personlige apper"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Vil du åpne <xliff:g id="APP">%s</xliff:g> for jobb?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Vil du åpne i <xliff:g id="APP">%s</xliff:g> for personlig bruk?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Vil du åpne i <xliff:g id="APP">%s</xliff:g> for jobb?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Vil du ringe fra en jobbapp?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Vil du bytte til en jobbapp?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Organisasjonen din tillater bare at du ringer fra jobbapper"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Organisasjonen din tillater bare at du sender meldinger fra jobbapper"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Bruk den personlige nettleseren"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Bruk jobbnettleseren"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Ring"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Bytt"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-kode for å fjerne operatørlåser"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN-kode for å fjerne bestemte operatørlåser"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN-kode for å låse opp SIM-kort for bedrifter"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Det er ikke mulig å få tilgang til telefonkameraet fra <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Det er ikke mulig å få tilgang til kameraet på nettbrettet fra <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Dette er ikke tilgjengelig under strømming. Prøv på telefonen i stedet."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Kan ikke se bilde-i-bilde under strømming"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Systemstandard"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KORT <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Klokkeprofil-tillatelse for følgeapp for å administrere klokker"</string>
@@ -2317,11 +2331,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Lar en følgeapp starte forgrunnstjenester fra bakgrunnen."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofonen er tilgjengelig"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofonen er blokkert"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dobbel skjerm"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dobbel skjerm er på"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen er på"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> bruker begge skjermene til å vise innhold"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Enheten er for varm"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dobbel skjerm er ikke tilgjengelig fordi telefonen begynner å bli for varm"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dual Screen er ikke tilgjengelig fordi telefonen begynner å bli for varm"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen er ikke tilgjengelig"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screen er ikke tilgjengelig fordi Batterisparing er slått på. Du kan slå av denne funksjonen i innstillingene."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Gå til innstillingene"</string>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index 2c36da1..d95d750 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -89,8 +89,8 @@
     <string name="notification_channel_call_forward" msgid="8230490317314272406">"कल फर्वार्ड गर्ने सेवा"</string>
     <string name="notification_channel_emergency_callback" msgid="54074839059123159">"आपत्‌कालीन कलब्याक मोड"</string>
     <string name="notification_channel_mobile_data_status" msgid="1941911162076442474">"मोबाइल डेटाको स्थिति"</string>
-    <string name="notification_channel_sms" msgid="1243384981025535724">"SMS सन्देशहरू"</string>
-    <string name="notification_channel_voice_mail" msgid="8457433203106654172">"भ्वाइस मेल सन्देशहरू"</string>
+    <string name="notification_channel_sms" msgid="1243384981025535724">"SMS म्यासेजहरू"</string>
+    <string name="notification_channel_voice_mail" msgid="8457433203106654172">"भ्वाइस मेल म्यासेजहरू"</string>
     <string name="notification_channel_wfc" msgid="9048240466765169038">"Wi-Fi कल"</string>
     <string name="notification_channel_sim" msgid="5098802350325677490">"SIM को स्थिति"</string>
     <string name="notification_channel_sim_high_prio" msgid="642361929452850928">"उच्च प्राथमिकता रहेको SIM को स्थिति"</string>
@@ -122,7 +122,7 @@
     <string name="roamingTextSearching" msgid="5323235489657753486">"सेवाको खोजी गर्दै…"</string>
     <string name="wfcRegErrorTitle" msgid="3193072971584858020">"Wi-Fi कलिङ सेटअप गर्न सकिएन"</string>
   <string-array name="wfcOperatorErrorAlertMessages">
-    <item msgid="468830943567116703">"Wi-Fi मार्फत कलहरू गर्न र सन्देशहरू पठाउन सबभन्दा पहिला आफ्नो सेवा प्रदायकलाई यो सेवा सेट गर्न भन्नुहोस्। त्यसपछि सेटिङहरूबाट Wi-Fi कलिङलाई सक्रिय पार्नुहोस्। (त्रुटिसम्बन्धी कोड: <xliff:g id="CODE">%1$s</xliff:g>)"</item>
+    <item msgid="468830943567116703">"Wi-Fi मार्फत कलहरू गर्न र म्यासेजहरू पठाउन सबभन्दा पहिला आफ्नो सेवा प्रदायकलाई यो सेवा सेट गर्न भन्नुहोस्। त्यसपछि सेटिङहरूबाट Wi-Fi कलिङलाई सक्रिय पार्नुहोस्। (त्रुटिसम्बन्धी कोड: <xliff:g id="CODE">%1$s</xliff:g>)"</item>
   </string-array>
   <string-array name="wfcOperatorErrorNotificationMessages">
     <item msgid="4795145070505729156">"तपाईंको सेवा प्रदायकमार्फत Wi-Fi कलिङ सुविधा दर्ता गर्ने क्रममा देखिएको समस्या: <xliff:g id="CODE">%1$s</xliff:g>"</item>
@@ -179,7 +179,7 @@
     <string name="low_memory" product="watch" msgid="3479447988234030194">"भण्डारण भरिएको छ हेर्नुहोस्। ठाउँ खाली गर्न केही फाइलहरू मेटाउनुहोस्।"</string>
     <string name="low_memory" product="tv" msgid="6663680413790323318">"Android टिभी डिभाइसको भण्डारण भरिएको छ। ठाउँ खाली गर्न केही फाइलहरू मेट्नुहोस्।"</string>
     <string name="low_memory" product="default" msgid="2539532364144025569">"फोन भण्डारण भरिएको छ! ठाउँ खाली गर्नको लागि केही फाइलहरू मेटाउनुहोस्।"</string>
-    <string name="ssl_ca_cert_warning" msgid="7233573909730048571">"{count,plural, =1{प्रमाणपत्र जारी गर्ने निकाय इन्स्टल गरियो}other{प्रमाणपत्र जारी गर्ने निकायहरू इन्स्टल गरियो}}"</string>
+    <string name="ssl_ca_cert_warning" msgid="7233573909730048571">"{count,plural, =1{प्रमाणपत्र जारी गर्ने निकायको प्रमाणपत्र इन्स्टल गरियो}other{प्रमाणपत्र जारी गर्ने निकायका प्रमाणपत्रहरू इन्स्टल गरिए}}"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4961102218216815242">"अज्ञात तेस्रो पक्ष द्वारा"</string>
     <string name="ssl_ca_cert_noti_by_administrator" msgid="4564941950768783879">"तपाईंको कार्य प्रोफाइलका प्रशासकद्वारा"</string>
     <string name="ssl_ca_cert_noti_managed" msgid="217337232273211674">"<xliff:g id="MANAGING_DOMAIN">%s</xliff:g> द्वारा"</string>
@@ -206,7 +206,7 @@
     <string name="printing_disabled_by" msgid="3517499806528864633">"<xliff:g id="OWNER_APP">%s</xliff:g> ले छाप्ने कार्यलाई असक्षम पार्यो।"</string>
     <string name="personal_apps_suspension_title" msgid="7561416677884286600">"आफ्नो कार्य प्रोफाइल अन गर्नुहोस्"</string>
     <string name="personal_apps_suspension_text" msgid="6115455688932935597">"तपाईंले आफ्नो कार्य प्रोफाइल सक्रिय नगरुन्जेल तपाईंका व्यक्तिगत एपहरूलाई रोक लगाइन्छ"</string>
-    <string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"मिति <xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="TIME">%2$s</xliff:g> बजे व्यक्तिगत एपहरूलाई रोक लगाइने छ। तपाईंका IT एडमिन तपाईंलाई आफ्नो कार्य प्रोफाइल <xliff:g id="NUMBER">%3$d</xliff:g> भन्दा धेरै दिन निष्क्रिय राख्ने अनुमति दिनुहुन्न।"</string>
+    <string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"मिति <xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="TIME">%2$s</xliff:g> बजे व्यक्तिगत एपहरूलाई रोक लगाइने छ। तपाईंका IT एड्मिन तपाईंलाई आफ्नो कार्य प्रोफाइल <xliff:g id="NUMBER">%3$d</xliff:g> भन्दा धेरै दिन निष्क्रिय राख्ने अनुमति दिनुहुन्न।"</string>
     <string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"अन गर्नुहोस्"</string>
     <string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"कल वा म्यासेज अफ गरिएको छ"</string>
     <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"तपाईंले कामसम्बन्धी एपहरू पज गर्नुभएको छ। तपाईं फोन कल वा टेक्स्ट म्यासेजहरू प्राप्त गर्नु हुने छैन।"</string>
@@ -275,8 +275,8 @@
     <string name="notification_channel_security" msgid="8516754650348238057">"सुरक्षा"</string>
     <string name="notification_channel_car_mode" msgid="2123919247040988436">"कार मोड"</string>
     <string name="notification_channel_account" msgid="6436294521740148173">"खाताको स्थिति"</string>
-    <string name="notification_channel_developer" msgid="1691059964407549150">"विकासकर्ताका सन्देशहरू"</string>
-    <string name="notification_channel_developer_important" msgid="7197281908918789589">"विकासकर्तासम्बन्धी महत्त्वपूर्ण सन्देशहरू"</string>
+    <string name="notification_channel_developer" msgid="1691059964407549150">"विकासकर्ताका म्यासेजहरू"</string>
+    <string name="notification_channel_developer_important" msgid="7197281908918789589">"विकासकर्तासम्बन्धी महत्त्वपूर्ण म्यासेजहरू"</string>
     <string name="notification_channel_updates" msgid="7907863984825495278">"अद्यावधिकहरू"</string>
     <string name="notification_channel_network_status" msgid="2127687368725272809">"नेटवर्कको स्थिति"</string>
     <string name="notification_channel_network_alerts" msgid="6312366315654526528">"नेटवर्कका अलर्टहरू"</string>
@@ -298,14 +298,16 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android सिस्टम"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"व्यक्तिगत प्रोफाइलमा बदल्नुहोस्"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"कार्य प्रोफाइलमा बदल्नुहोस्"</string>
-    <string name="permgrouplab_contacts" msgid="4254143639307316920">"सम्पर्कहरू"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g> को व्यक्तिगत प्रोफाइल प्रयोग गर्नुहोस्"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g> को कार्य प्रोफाइल प्रयोग गर्नुहोस्"</string>
+    <string name="permgrouplab_contacts" msgid="4254143639307316920">"कन्ट्याक्टहरू"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"तपाईँको सम्पर्कमाथि पहुँच गर्नुहोस्"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"लोकेसन"</string>
     <string name="permgroupdesc_location" msgid="1995955142118450685">"यस डिभाइसको स्थानमाथि पहुँच"</string>
     <string name="permgrouplab_calendar" msgid="6426860926123033230">"पात्रो"</string>
     <string name="permgroupdesc_calendar" msgid="6762751063361489379">"तपाईंको पात्रोमाथि पहुँच गर्नुहोस्"</string>
     <string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string>
-    <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS सन्देशहरू पठाउनुहोस् र हेर्नुहोस्"</string>
+    <string name="permgroupdesc_sms" msgid="5726462398070064542">"SMS म्यासेजहरू पठाउनुहोस् र हेर्नुहोस्"</string>
     <string name="permgrouplab_storage" msgid="17339216290379241">"फाइलहरू"</string>
     <string name="permgroupdesc_storage" msgid="5378659041354582769">"आफ्नो डिभाइसमा रहेका फाइलहरू हेर्नुहोस् र प्रयोग गर्नुहोस्"</string>
     <string name="permgrouplab_readMediaAural" msgid="1858331312624942053">"सङ्गीत तथा अडियो"</string>
@@ -360,25 +362,25 @@
     <string name="permlab_answerPhoneCalls" msgid="4131324833663725855">"फोन कलहरूको जवाफ दिनुहोस्"</string>
     <string name="permdesc_answerPhoneCalls" msgid="894386681983116838">"एपलाई आगमन फोन कलको जवाफ दिन अनुमति दिन्छ।"</string>
     <string name="permlab_receiveSms" msgid="505961632050451881">"टेक्स्ट म्यासेजहरू (SMS) प्राप्त गर्नुहोस्"</string>
-    <string name="permdesc_receiveSms" msgid="1797345626687832285">"एपलाई SMS सन्देशहरू प्राप्त गर्न र प्रक्रिया गर्न अनुमति दिन्छ। यसको मतलब अनुप्रयोगले तपाईंको उपकरणमा पठाइएको सन्देशहरू तपाईंलाई नदेखाईनै मोनिटर गर्न वा मेटाउन सक्दछ।"</string>
+    <string name="permdesc_receiveSms" msgid="1797345626687832285">"एपलाई SMS म्यासेजहरू प्राप्त गर्न र प्रक्रिया गर्न अनुमति दिन्छ। यसको मतलब अनुप्रयोगले तपाईंको उपकरणमा पठाइएको म्यासेजहरू तपाईंलाई नदेखाईनै मोनिटर गर्न वा मेटाउन सक्दछ।"</string>
     <string name="permlab_receiveMms" msgid="4000650116674380275">"टेक्स्ट म्यासेज (MMS) प्राप्त गर्नुहोस्"</string>
-    <string name="permdesc_receiveMms" msgid="958102423732219710">"एपलाई MMS सन्देशहरू प्राप्त गर्न र प्रकृया गर्न अनुमति दिन्छ। यसको मतलब अनुप्रयोगले तपाईंको उपकरणमा पठाइएको सन्देशहरू तपाईंलाई नदेखाईनै मोनिटर गर्न वा मेटाउन सक्दछ।"</string>
-    <string name="permlab_bindCellBroadcastService" msgid="586746677002040651">"मोबाइल प्रसारणसम्बन्धी सन्देशहरू फर्वार्ड गर्नुहोस्"</string>
-    <string name="permdesc_bindCellBroadcastService" msgid="6540910200973641606">"मोबाइल प्रसारणसम्बन्धी सन्देशहरू प्राप्त हुनासाथै तिनीहरूलाई फर्वार्ड गर्नका लागि यसले एपलाई मोबाइल प्रसारण मोड्युलमा जोडिने अनुमति दिन्छ। तपाईंलाई कतिपय स्थानमा आपत्‌कालीन अवस्थाका बारेमा जानकारी दिनका लागि मोबाइल प्रसारणसम्बन्धी अलर्टहरू पठाइन्छ। हानिकारक एपहरूले आपत्‌कालीन मोबाइल प्रसारण प्राप्त हुँदा तपाईंको यन्त्रलाई कार्य सम्पादन गर्ने वा सञ्चालित हुने क्रममा हस्तक्षेप गर्न सक्छन्।"</string>
+    <string name="permdesc_receiveMms" msgid="958102423732219710">"एपलाई MMS म्यासेजहरू प्राप्त गर्न र प्रकृया गर्न अनुमति दिन्छ। यसको मतलब अनुप्रयोगले तपाईंको उपकरणमा पठाइएको म्यासेजहरू तपाईंलाई नदेखाईनै मोनिटर गर्न वा मेटाउन सक्दछ।"</string>
+    <string name="permlab_bindCellBroadcastService" msgid="586746677002040651">"मोबाइल प्रसारणसम्बन्धी म्यासेजहरू फर्वार्ड गर्नुहोस्"</string>
+    <string name="permdesc_bindCellBroadcastService" msgid="6540910200973641606">"मोबाइल प्रसारणसम्बन्धी म्यासेजहरू प्राप्त हुनासाथै तिनीहरूलाई फर्वार्ड गर्नका लागि यसले एपलाई मोबाइल प्रसारण मोड्युलमा जोडिने अनुमति दिन्छ। तपाईंलाई कतिपय स्थानमा आपत्‌कालीन अवस्थाका बारेमा जानकारी दिनका लागि मोबाइल प्रसारणसम्बन्धी अलर्टहरू पठाइन्छ। हानिकारक एपहरूले आपत्‌कालीन मोबाइल प्रसारण प्राप्त हुँदा तपाईंको यन्त्रलाई कार्य सम्पादन गर्ने वा सञ्चालित हुने क्रममा हस्तक्षेप गर्न सक्छन्।"</string>
     <string name="permlab_manageOngoingCalls" msgid="281244770664231782">"जारी रहेका कलहरू व्यवस्थापन गर्न"</string>
     <string name="permdesc_manageOngoingCalls" msgid="7003138133829915265">"तपाईं यो एपलाई अनुमति दिनुभयो यस एपले तपाईंको डिभाइसमा जारी रहेका कलसम्बन्धी विवरण हेर्न र ती कलहरू नियन्त्रण गर्न सक्छ।"</string>
-    <string name="permlab_readCellBroadcasts" msgid="5869884450872137693">"सेल प्रसारित सन्देशहरू पढ्नुहोस्"</string>
-    <string name="permdesc_readCellBroadcasts" msgid="672513437331980168">"तपाईंको उपकरणद्वारा प्राप्त सेल प्रसारण सन्देशहरू एपलाई पढ्न अनुमति दिन्छ। सेल प्रसारण चेतावनीहरू केही स्थानहरूमा तपाईंलाई आपत्‌कालीन गतिविधिहरूको बारेमा सचेत गराउन गरिएका छन्। खराब एपहरूले एउटा आपत्‌कालीन सेल प्रसारण प्राप्त गर्दछ जब तपाईंको उपकरणको प्रदर्शन वा अपरेशनको साथ हस्तक्षेप गर्न सक्दछन्।"</string>
+    <string name="permlab_readCellBroadcasts" msgid="5869884450872137693">"सेल प्रसारित म्यासेजहरू पढ्नुहोस्"</string>
+    <string name="permdesc_readCellBroadcasts" msgid="672513437331980168">"तपाईंको उपकरणद्वारा प्राप्त सेल प्रसारण म्यासेजहरू एपलाई पढ्न अनुमति दिन्छ। सेल प्रसारण चेतावनीहरू केही स्थानहरूमा तपाईंलाई आपत्‌कालीन गतिविधिहरूको बारेमा सचेत गराउन गरिएका छन्। खराब एपहरूले एउटा आपत्‌कालीन सेल प्रसारण प्राप्त गर्दछ जब तपाईंको उपकरणको प्रदर्शन वा अपरेशनको साथ हस्तक्षेप गर्न सक्दछन्।"</string>
     <string name="permlab_subscribedFeedsRead" msgid="217624769238425461">"सदस्य बनाइका फिडहरू पढ्नुहोस्"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="6911349196661811865">"एपलाई अहिलेको समीकरण गरिएका सूचकहरू बारे विवरणहरू लिने अनुमति दिन्छ।"</string>
-    <string name="permlab_sendSms" msgid="7757368721742014252">"SMS सन्देशहरू पठाउनुहोस् र हेर्नुहोस्"</string>
-    <string name="permdesc_sendSms" msgid="6757089798435130769">"एपलाई SMS सन्देशहरू पठाउन अनुमति दिन्छ। यसले अप्रत्यासित चार्जहरूको परिणाम दिन सक्दछ। खराब एपहरूले तपाईंको पुष्टि बिना सन्देशहरू पठाएर तपाईंको पैसा खर्च गराउन सक्दछ।"</string>
+    <string name="permlab_sendSms" msgid="7757368721742014252">"SMS म्यासेजहरू पठाउनुहोस् र हेर्नुहोस्"</string>
+    <string name="permdesc_sendSms" msgid="6757089798435130769">"एपलाई SMS म्यासेजहरू पठाउन अनुमति दिन्छ। यसले अप्रत्यासित चार्जहरूको परिणाम दिन सक्दछ। खराब एपहरूले तपाईंको पुष्टि बिना म्यासेजहरू पठाएर तपाईंको पैसा खर्च गराउन सक्दछ।"</string>
     <string name="permlab_readSms" msgid="5164176626258800297">"तपाईंका टेक्स्ट म्यासेजहरू (SMS वा MMS) पढ्नुहोस्"</string>
-    <string name="permdesc_readSms" product="tablet" msgid="7912990447198112829">"यस एपले तपाईंको ट्याब्लेटमा भण्डारण गरिएका सबै SMS (पाठ) सन्देशहरू पढ्न सक्छ।"</string>
-    <string name="permdesc_readSms" product="tv" msgid="3054753345758011986">"यस एपले तपाईंको Android टिभी डिभाइसमा भण्डारण गरिएका सबै SMS.(पाठ) सन्देशहरू पढ्न सक्छ।"</string>
-    <string name="permdesc_readSms" product="default" msgid="774753371111699782">"यस एपले तपाईंको फोनमा भण्डारण गरिएका सबै SMS (पाठ) सन्देशहरू पढ्न सक्छ।"</string>
+    <string name="permdesc_readSms" product="tablet" msgid="7912990447198112829">"यस एपले तपाईंको ट्याब्लेटमा भण्डारण गरिएका सबै SMS (पाठ) म्यासेजहरू पढ्न सक्छ।"</string>
+    <string name="permdesc_readSms" product="tv" msgid="3054753345758011986">"यस एपले तपाईंको Android टिभी डिभाइसमा भण्डारण गरिएका सबै SMS.(पाठ) म्यासेजहरू पढ्न सक्छ।"</string>
+    <string name="permdesc_readSms" product="default" msgid="774753371111699782">"यस एपले तपाईंको फोनमा भण्डारण गरिएका सबै SMS (पाठ) म्यासेजहरू पढ्न सक्छ।"</string>
     <string name="permlab_receiveWapPush" msgid="4223747702856929056">"टेक्स्ट म्यासेजहरू (WAP) प्राप्त गर्नुहोस्"</string>
-    <string name="permdesc_receiveWapPush" msgid="1638677888301778457">"WAP सन्देशहरू प्राप्त गर्न र प्रशोधन गर्न एपलाई अनुमति दिन्छ। यो अनुमतिमा मोनिटर गर्ने वा तपाईँलाई पठाइएका म्यासेजहरू तपाईँलाई नदेखाई मेट्ने क्षमता समावेश हुन्छ।"</string>
+    <string name="permdesc_receiveWapPush" msgid="1638677888301778457">"WAP म्यासेजहरू प्राप्त गर्न र प्रशोधन गर्न एपलाई अनुमति दिन्छ। यो अनुमतिमा मोनिटर गर्ने वा तपाईँलाई पठाइएका म्यासेजहरू तपाईँलाई नदेखाई मेट्ने क्षमता समावेश हुन्छ।"</string>
     <string name="permlab_getTasks" msgid="7460048811831750262">"चलिरहेका एपहरू पुनःबहाली गर्नुहोस्"</string>
     <string name="permdesc_getTasks" msgid="7388138607018233726">"वर्तमानमा र भरखरै चलिरहेका कार्यहरू बारेको सूचना पुनःबहाली गर्न एपलाई अनुमित दिन्छ। यसले उपकरणमा प्रयोग भएका अनुप्रयोगहरूको बारेमा सूचना पत्ता लगाउन एपलाई अनुमति दिन सक्छ।"</string>
     <string name="permlab_manageProfileAndDeviceOwners" msgid="639849495253987493">"प्रोफाइल र यन्त्र मालिकहरूको व्यवस्थापन गराउनुहोस्"</string>
@@ -468,9 +470,9 @@
     <string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"यस एपले तपाईंको Android टिभी डिभाइसमा भण्डारण गरिएका पात्रोसम्बन्धी सबै कार्यक्रमहरू पढ्न र तपाईंको पात्रोको डेटा आदान प्रदान वा सुरक्षित गर्न सक्छ।"</string>
     <string name="permdesc_readCalendar" product="default" msgid="9118823807655829957">"यस एपले तपाईंको फोनमा भण्डारण गरिएका पात्रो सम्बन्धी सबै कार्यक्रमहरू पढ्न र तपाईंको पात्रोको डेटा आदान प्रदान वा सुरक्षित गर्न सक्छ।"</string>
     <string name="permlab_writeCalendar" msgid="6422137308329578076">"पात्रो घटनाहरू थप्नुहोस् वा परिमार्जन गर्नुहोस् र मालिकको ज्ञान बिना नै पाहुनाहरूलाई इमेल पठाउनुहोस्"</string>
-    <string name="permdesc_writeCalendar" product="tablet" msgid="8722230940717092850">"यस एपले तपाईंको ट्याब्लेटमा पात्रोका कार्यक्रमहरू थप्न, हटाउन वा परिवर्तन गर्न सक्छ। यस एपले पात्रोका मालिकहरू मार्फत आएको जस्तो लाग्ने सन्देशहरू पठाउन वा तिनीहरूका मालिकहरूलाई सूचित नगरिकन कार्यक्रमहरू परिवर्तन गर्न सक्छ।"</string>
-    <string name="permdesc_writeCalendar" product="tv" msgid="951246749004952706">"यस एपले तपाईंको Android टिभी डिभाइसमा पात्रोका कार्यक्रमहरू थप्न, हटाउन वा परिवर्तन गर्न सक्छ। यस एपले पात्रोका मालिकहरूले पठाएको जस्तै देखिने सन्देशहरू पठाउन वा कार्यक्रमका मालिकहरूलाई सूचित नगरिकन कार्यक्रमहरू परिवर्तन गर्न सक्छ।"</string>
-    <string name="permdesc_writeCalendar" product="default" msgid="5416380074475634233">"यस एपले तपाईंको फोनमा पात्रोका कार्यक्रमहरू थप्न, हटाउन वा परिवर्तन गर्न सक्छ। यस एपले पात्रोका मालिकहरू मार्फत आएको जस्तो लाग्ने सन्देशहरू पठाउन वा तिनीहरूका मालिकहरूलाई सूचित नगरिकन कार्यक्रमहरू परिवर्तन गर्न सक्छ।"</string>
+    <string name="permdesc_writeCalendar" product="tablet" msgid="8722230940717092850">"यस एपले तपाईंको ट्याब्लेटमा पात्रोका कार्यक्रमहरू थप्न, हटाउन वा परिवर्तन गर्न सक्छ। यस एपले पात्रोका मालिकहरू मार्फत आएको जस्तो लाग्ने म्यासेजहरू पठाउन वा तिनीहरूका मालिकहरूलाई सूचित नगरिकन कार्यक्रमहरू परिवर्तन गर्न सक्छ।"</string>
+    <string name="permdesc_writeCalendar" product="tv" msgid="951246749004952706">"यस एपले तपाईंको Android टिभी डिभाइसमा पात्रोका कार्यक्रमहरू थप्न, हटाउन वा परिवर्तन गर्न सक्छ। यस एपले पात्रोका मालिकहरूले पठाएको जस्तै देखिने म्यासेजहरू पठाउन वा कार्यक्रमका मालिकहरूलाई सूचित नगरिकन कार्यक्रमहरू परिवर्तन गर्न सक्छ।"</string>
+    <string name="permdesc_writeCalendar" product="default" msgid="5416380074475634233">"यस एपले तपाईंको फोनमा पात्रोका कार्यक्रमहरू थप्न, हटाउन वा परिवर्तन गर्न सक्छ। यस एपले पात्रोका मालिकहरू मार्फत आएको जस्तो लाग्ने म्यासेजहरू पठाउन वा तिनीहरूका मालिकहरूलाई सूचित नगरिकन कार्यक्रमहरू परिवर्तन गर्न सक्छ।"</string>
     <string name="permlab_accessLocationExtraCommands" msgid="5162339812057983988">"अधिक स्थान प्रदायक आदेशहरू पहुँच गर्नुहोस्"</string>
     <string name="permdesc_accessLocationExtraCommands" msgid="355369611979907967">"एपलाई अतिरिक्त स्थान प्रदायक आदेशहरू पहुँच गर्न अनुमति दिन्छ। यो एपलाई GPS वा अन्य स्थान स्रोतहरूको संचालन साथै हस्तक्षेप गर्न अनुमति दिन सक्छ।"</string>
     <string name="permlab_accessFineLocation" msgid="6426318438195622966">"अग्रभूमिमा मात्र सटीक स्थानमाथि पहुँच राख्नुहोस्"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"एपलाई भाइब्रेटर नियन्त्रण गर्न अनुमति दिन्छ।"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"यो एपलाई कम्पनको स्थितिमाथि पहुँच राख्न दिनुहोस्।"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"फोन नम्बरहरूमा सीधै कल गर्नुहोस्"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"तपाईँको हस्तक्षेप बेगरै फोन नम्बर कल गर्न एपलाई अनुमति दिन्छ। यसले अनपेक्षित शुल्क वा कलहरू गराउन सक्छ। यसले एपलाई आपत्‌कालीन नम्बरहरू कल गर्न अनुमति दिँदैन विचार गर्नुहोस्। खराब एपहरूले तपाईँको स्वीकार बिना कलहरू गरेर तपाईँलाई बढी पैसा तिराउन सक्छ।"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"यो एपले तपाईंको अनुमतिविनै कसैको फोन नम्बरमा कल गर्न सक्छ। यसको परिणामस्वरूप अनपेक्षित शुल्क लाग्न वा तपाईंलाई जानकारी नगराइकन कलहरू गरिन सक्छ। यसले एपलाई आपत्‍कालीन नम्बरहरूमा कल गर्ने अनुमति दिँदैन भन्ने कुरा ख्याल गर्नुहोस्। हानिकारक एपहरूले तपाईंको अनुमतिविनै कलहरू गरेर वा अन्य नम्बरमा आगमन कलहरू स्वतः फर्वार्ड गर्ने सेवा प्रदायकका कोडहरू डायल गरेर तपाईंको पैसा खर्च गराउन सक्छ।"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS कल सेवा पहुँच गर्नुहोस्"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"तपाईँको हस्तक्षेप बिना नै कल गर्न IMS सेवा प्रयोग गर्न एपलाई अनुमति दिन्छ।"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"फोन स्थिति र पहिचान पढ्नुहोस्"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"यसले एपलाई दर्ता गरिएका सहायता तथा मार्गको गन्तव्य जस्ता रुचाइएका NFC भुक्तानी सेवासम्बन्धी जानकारी प्राप्त गर्न दिन्छ।"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"नजिक क्षेत्र संचार नियन्त्रणहरू"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"एपलाई नयाँ क्षेत्र संचार (NFC) ट्यागहरू, कार्डहरू र पाठकहरूसँग अन्तर्क्रिया गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"\"सुरक्षित तत्त्व\" मा भएको कारोबार"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"यो विकल्प छनौट गर्नाले एपलाई \"सुरक्षित तत्त्व\" मा भएका कारोबारहरूका बारेमा जानकारी प्राप्त गर्ने अनुमति दिन्छ।"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"स्क्रिन लक असक्षम पार्नुहोस्"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"कुनै सम्बन्धित पासवर्ड सुरक्षा र किलकलाई असक्षम पार्न एपलाई अनुमति दिन्छ। उदाहरणको लागि, अन्तर्गमन फोन कल प्राप्त गर्दा फोनले किलकलाई असक्षम पार्छ, त्यसपछि कल सकिएको बेला किलक पुनःसक्षम पार्छ।"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"स्क्रिन लकको जटिलतासम्बन्धी जानकारी प्राप्त गर्ने अनुरोध गर्नुहोस्"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"बायोमेट्रिक्स वा स्क्रिन लक प्रयोग गर्नुहोस्"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"यो व्यक्ति तपाईं नै हो भन्ने प्रमाणित गर्नुहोस्"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"जारी राख्न आफ्नो बायोमेट्रिक प्रयोग गर्नुहोस्"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"जारी राख्न आफ्नो फिंगरप्रिन्ट प्रयोग गर्नुहोस्"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"जारी राख्न आफ्नो अनुहार प्रयोग गर्नुहोस्"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"जारी राख्न आफ्नो बायोमेट्रिक वा स्क्रिन लक प्रयोग गरी पुष्टि गर्नुहोस्"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"बायोमेट्रिक हार्डवेयर उपलब्ध छैन"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"प्रमाणीकरण रद्द गरियो"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"पहिचान भएन"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"अनुहार पहिचान गर्न सकिएन"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"प्रमाणीकरण रद्द गरियो"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"कुनै पनि PIN, ढाँचा वा पासवर्ड सेट गरिएको छैन"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"प्रमाणित गर्ने क्रममा त्रुटि भयो"</string>
@@ -661,7 +668,7 @@
     <string name="fingerprint_or_screen_lock_dialog_default_subtitle" msgid="5195808203117992200">"जारी राख्न आफ्नो फिंगरप्रिन्ट वा स्क्रिन लक प्रयोग गरी पुष्टि गर्नुहोस्"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
-    <string name="fingerprint_error_vendor_unknown" msgid="4170002184907291065">"केही चिज गडबड भयो। फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="fingerprint_error_vendor_unknown" msgid="4170002184907291065">"कुनै समस्या आयो। फेरि प्रयास गर्नुहोस्।"</string>
     <string name="fingerprint_icon_content_description" msgid="4741068463175388817">"फिंगरप्रिन्ट आइकन"</string>
     <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"फेस अनलक"</string>
     <string name="face_recalibrate_notification_title" msgid="2524791952735579082">"फेस अनलक सुविधामा अनुहार दर्ता गर्ने क्रममा त्रुटि भयो"</string>
@@ -692,7 +699,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"आफ्नो फोनमा अझ सीधा हेर्नुहोस्"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"आफ्नो फोनमा अझ सीधा हेर्नुहोस्"</string>
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"आफ्नो फोनमा अझ सीधा हेर्नुहोस्"</string>
-    <string name="face_acquired_obscured" msgid="4917643294953326639">"तपाईंको अनुहार लुकाउने सबै कुरा हटाउनुहोस्।"</string>
+    <string name="face_acquired_obscured" msgid="4917643294953326639">"आफ्नो अनुहार छोप्ने सबै कुरा हटाउनुहोस्।"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"कालो रङको पट्टीलगायत आफ्नो स्क्रिनको माथिल्लो भाग सफा गर्नुहोस्"</string>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"अनुहार पहिचान रद्द गरियो।"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"प्रयोगकर्ताले फेस अनलक सेटअप गर्ने कार्य रद्द गर्नुभयो"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"धेरैपटक प्रयासहरू भए। पछि फेरि प्रयास गर्नुहोस्‌।"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"अत्यन्तै धेरै पटक प्रयास गरिसकियो। फेस अनलक उपलब्ध छैन।"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"निकै धेरै प्रयासहरू भए। यसको साटो स्क्रिन लक प्रयोग गर्नुहोस्।"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"अनुहार पुष्टि गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"तपाईंले फेस अनलक सेटअप गर्नुभएको छैन"</string>
@@ -723,7 +729,7 @@
     <string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"जारी राख्न आफ्नो फेस वा स्क्रिन लक प्रयोग गरी पुष्टि गर्नुहोस्"</string>
   <string-array name="face_error_vendor">
   </string-array>
-    <string name="face_error_vendor_unknown" msgid="7387005932083302070">"केही चिज गडबड भयो। फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="face_error_vendor_unknown" msgid="7387005932083302070">"कुनै समस्या आयो। फेरि प्रयास गर्नुहोस्।"</string>
     <string name="face_icon_content_description" msgid="465030547475916280">"अनुहारको आइकन"</string>
     <string name="permlab_readSyncSettings" msgid="6250532864893156277">"समीकरण सेटिङहरू पढ्नुहोस्"</string>
     <string name="permdesc_readSyncSettings" msgid="1325658466358779298">"एपलाई खाताको लागि सिंक सेटिङहरू पढ्न अनुमति दिन्छ। उदाहरणको लागि यसले व्यक्तिहरको एप खातासँग सिंक भएको नभएको निर्धारण गर्न सक्दछ।"</string>
@@ -751,8 +757,8 @@
     <string name="permdesc_register_call_provider" msgid="4201429251459068613">"एपलाई नयाँ दूरसंचार सम्पर्क दर्ता गर्न अनुमति दिन्छ।"</string>
     <string name="permlab_connection_manager" msgid="3179365584691166915">"दूरसंचार जडान व्यवस्थापन गर्नुहोस्"</string>
     <string name="permdesc_connection_manager" msgid="1426093604238937733">"एपलाई टेलिकम जडान व्यवस्थापन गर्न अनुमति दिन्छ।"</string>
-    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"आगमन कल स्क्रिन संग अन्तर्क्रिया गर्नुहोस्"</string>
-    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"कहिले र कसरी प्रयोगकर्ताले आगमन कल स्क्रीन हेर्न सक्दछ भनेर नियन्त्रण गर्न एपलाई अनुमति दिनुहोस्।"</string>
+    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"इन-कल स्क्रिनसँग अन्तर्क्रिया गर्नुहोस्"</string>
+    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"प्रयोगकर्ताले कहिले र कसरी इन-कल स्क्रिन देख्छन् भन्ने कुरा नियन्त्रण गर्न यो एपलाई अनुमति दिन्छ।"</string>
     <string name="permlab_bind_connection_service" msgid="5409268245525024736">"टेलिफोनी सेवा अन्तरक्रिया"</string>
     <string name="permdesc_bind_connection_service" msgid="6261796725253264518">"एपलाई कल बनाउन/प्राप्त गर्न टेलीफोनी सेवा साथ अन्तरक्रिया गर्न अनुमति दिन्छ।"</string>
     <string name="permlab_control_incall_experience" msgid="6436863486094352987">"आउने-कल प्रयोगकर्ता अनुभव प्रदान गर्नुहोस्"</string>
@@ -994,7 +1000,7 @@
     <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="8381565919325410939">"SIM कार्ड अनलक गरिँदै छ…"</string>
     <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6458790975898594240">"तपाईँले तपाईँको अनलक प्याटर्न गलत तरिकाले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक खिच्नु भएको छ। \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकेन्डमा फेरि कोसिस गर्नुहोस्।"</string>
     <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"तपाईंले गलत तरिकाले आफ्नो पासवर्ड <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक टाइप गर्नुभयो। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
-    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"तपाईँले गलत तरिकाले तपाईँको PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक टाइप गर्नु भएको छ। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"तपाईंले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक गलत PIN टाइप गर्नुभएको छ। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="3069635524964070596">"तपाईँले तपाईँको अनलक प्याटर्न गलत तरिकाले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक खिच्नु भएको छ। पछि <xliff:g id="NUMBER_1">%2$d</xliff:g> थप असफल कोसिसहरू, तपाईँको Google साइन इन प्रयोग गरी तपाईँको ट्याब्लेट अनलक गर्न भनिने छ।\n\n  <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकेन्डमा फरि प्रयास गर्नुहोस्।"</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"तपाईंले आफ्नो अनलक शैली <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक गलत तरिकाले कोर्नुभएको छ। थप <xliff:g id="NUMBER_1">%2$d</xliff:g> प्रयासहरू असफल भएपछि तपाईंलाई आफ्नो Google खाता मार्फत साइन इन गरेर आफ्नो Android टिभी डिभाइस अनलक गर्न अनुरोध गरिने छ।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकेन्डपछि फेरि प्रयास गर्नुहोस्।"</string>
     <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="5691623136957148335">"तपाईँले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक गलत तरिकाले तपाईँको अनलक ढाँचालाई कोर्नु भएको छ। पछि <xliff:g id="NUMBER_1">%2$d</xliff:g> अरू धेरै असफल कोसिसहरूपछि, तपाईँलाई तपाईँको फोन Google साइन इन प्रयोग गरेर अनलक गर्नको लागि सोधिने छ। \n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकेन्डमा पुनः प्रयास गर्नुहोस्।"</string>
@@ -1142,7 +1148,7 @@
     <string name="selectAll" msgid="1532369154488982046">"सबैलाई चयन गर्नुहोस्"</string>
     <string name="cut" msgid="2561199725874745819">"काट्नुहोस्"</string>
     <string name="copy" msgid="5472512047143665218">"कपी गर्नुहोस्"</string>
-    <string name="failed_to_copy_to_clipboard" msgid="725919885138539875">"क्लिपबोर्डमा प्रतिलिपि गर्न सकिएन"</string>
+    <string name="failed_to_copy_to_clipboard" msgid="725919885138539875">"क्लिपबोर्डमा कपी गर्न सकिएन"</string>
     <string name="paste" msgid="461843306215520225">"टाँस्नुहोस्"</string>
     <string name="paste_as_plain_text" msgid="7664800665823182587">"सामान्य पाठको रूपमा टाँस्नुहोस्"</string>
     <string name="replace" msgid="7842675434546657444">"विस्थापन गर्नुहोस्…"</string>
@@ -1322,8 +1328,8 @@
     <string name="accept" msgid="5447154347815825107">"स्वीकार्नुहोस्"</string>
     <string name="decline" msgid="6490507610282145874">"अस्वीकार गर्नुहोस्"</string>
     <string name="select_character" msgid="3352797107930786979">"अक्षरहरू प्रवेश गराउनुहोस्"</string>
-    <string name="sms_control_title" msgid="4748684259903148341">"SMS सन्देशहरू पठाइँदै"</string>
-    <string name="sms_control_message" msgid="6574313876316388239">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ले धरै संख्यामा SMS सन्देशहरू पठाउँदैछ। के तपाईं यस एपलाई सन्देशहरू पठाउन सुचारु गर्न अनुमति दिन चाहनु हुन्छ?"</string>
+    <string name="sms_control_title" msgid="4748684259903148341">"SMS म्यासेजहरू पठाइँदै"</string>
+    <string name="sms_control_message" msgid="6574313876316388239">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ले धरै संख्यामा SMS म्यासेजहरू पठाउँदैछ। के तपाईं यस एपलाई म्यासेजहरू पठाउन सुचारु गर्न अनुमति दिन चाहनु हुन्छ?"</string>
     <string name="sms_control_yes" msgid="4858845109269524622">"अनुमति दिनुहोस्"</string>
     <string name="sms_control_no" msgid="4845717880040355570">"अस्वीकार गर्नुहोस्"</string>
     <string name="sms_short_code_confirm_message" msgid="1385416688897538724">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; के तपाईं सन्देश पठाउन चाहुनु हुन्छ &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
@@ -1368,7 +1374,7 @@
     <string name="usb_power_notification_message" msgid="7284765627437897702">"कनेक्ट गरिएको डिभाइस चार्ज गर्दै। थप विकल्पहरूका लागि ट्याप गर्नुहोस्।"</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"एनालग अडियोको सहायक उपकरण पत्ता लाग्यो"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"संलग्न गरिएको यन्त्र यो फोनसँग कम्प्याटिबल छैन। थप जान्न ट्याप गर्नुहोस्।"</string>
-    <string name="adb_active_notification_title" msgid="408390247354560331">"USB डिबग गर्न ADB कनेक्ट गरिएको छ"</string>
+    <string name="adb_active_notification_title" msgid="408390247354560331">"USB डिबगिङ कनेक्ट गरिएको छ कनेक्ट गरिएको छ"</string>
     <string name="adb_active_notification_message" msgid="5617264033476778211">"USB डिबगिङ अफ गर्न ट्याप गर्नुहोस्‌"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"USB डिबगिङलाई असक्षम पार्न ट्याप गर्नुहोस्।"</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"वायरलेस डिबगिङ जोडियो"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"अस्वीकार गर्नुहोस्"</string>
     <string name="select_input_method" msgid="3971267998568587025">"निवेश विधि छान्नुहोस्"</string>
     <string name="show_ime" msgid="6406112007347443383">"फिजिकल किबोर्ड सक्रिय हुँदा यसलाई स्क्रिनमा राखियोस्"</string>
-    <string name="hardware" msgid="1800597768237606953">"भर्चुअल किबोर्ड देखाउनुहोस्"</string>
+    <string name="hardware" msgid="3611039921284836033">"अनस्क्रिन किबोर्ड प्रयोग गर्नुहोस्"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> कन्फिगर गर्नुहोस्"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"भौतिक किबोर्डहरू कन्फिगर गर्नुहोस्"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"भाषा र लेआउट चयन गर्न ट्याप गर्नुहोस्"</string>
@@ -1512,7 +1518,7 @@
     <string name="car_mode_disable_notification_message" msgid="8954550232288567515">"ड्राइभिङ अनुप्रयोगबाट बाहिर निस्कन ट्याप गर्नुहोस्।"</string>
     <string name="back_button_label" msgid="4078224038025043387">"पछाडि"</string>
     <string name="next_button_label" msgid="6040209156399907780">"अर्को"</string>
-    <string name="skip_button_label" msgid="3566599811326688389">"छोड्नुहोस्"</string>
+    <string name="skip_button_label" msgid="3566599811326688389">"स्किप गर्नुहोस्"</string>
     <string name="no_matches" msgid="6472699895759164599">"कुनै मिलेन"</string>
     <string name="find_on_page" msgid="5400537367077438198">"पृष्ठमा फेला पार्नुहोस्"</string>
     <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{# वटा मिल्दोजुल्दो परिणाम}other{{total} मध्ये # वटा मिल्दाजुल्दा परिणाम}}"</string>
@@ -1632,7 +1638,7 @@
     <string name="media_route_chooser_extended_settings" msgid="2506352159381327741">"सेटिंङहरू"</string>
     <string name="media_route_controller_disconnect" msgid="7362617572732576959">"डिस्कनेक्ट गर्नुहोस्"</string>
     <string name="media_route_status_scanning" msgid="8045156315309594482">"स्क्यान गर्दै ..."</string>
-    <string name="media_route_status_connecting" msgid="5845597961412010540">"जडान हुँदै..."</string>
+    <string name="media_route_status_connecting" msgid="5845597961412010540">"कनेक्ट गरिँदै छ..."</string>
     <string name="media_route_status_available" msgid="1477537663492007608">"उपलब्ध"</string>
     <string name="media_route_status_not_available" msgid="480912417977515261">"उपलब्ध छैन"</string>
     <string name="media_route_status_in_use" msgid="6684112905244944724">"प्रयोगमा छ"</string>
@@ -1646,11 +1652,11 @@
     <string name="kg_wrong_password" msgid="2384677900494439426">"गलत पासवर्ड"</string>
     <string name="kg_wrong_pin" msgid="3680925703673166482">"गलत PIN"</string>
     <string name="kg_pattern_instructions" msgid="8366024510502517748">"आफ्नो ढाँचा कोर्नुहोस्"</string>
-    <string name="kg_sim_pin_instructions" msgid="6479401489471690359">"SIM PIN प्रविष्टि गर्नुहोस्"</string>
-    <string name="kg_pin_instructions" msgid="7355933174673539021">"PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_sim_pin_instructions" msgid="6479401489471690359">"SIM PIN हाल्नुहोस्"</string>
+    <string name="kg_pin_instructions" msgid="7355933174673539021">"PIN हाल्नुहोस्"</string>
     <string name="kg_password_instructions" msgid="7179782578809398050">"पासवर्ड प्रविष्टि गर्नुहोस्"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="6696187482616360994">"SIM कार्ड अहिले असक्षम छ। सुचारु गर्नको लागि PUK कोड प्रविष्टि गर्नुहोस्।  विवरणको लागि वाहकलाई सम्पर्क गर्नुहोस्।"</string>
-    <string name="kg_puk_enter_pin_hint" msgid="8190982314659429770">"इच्छित PIN कोड प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="6696187482616360994">"SIM कार्ड अहिले असक्षम छ। सुचारु गर्नको लागि PUK कोड हाल्नुहोस्।  विवरणको लागि वाहकलाई सम्पर्क गर्नुहोस्।"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="8190982314659429770">"इच्छित PIN कोड हाल्नुहोस्"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="6372557107414074580">"मनपर्दो PIN कोड निश्चित गर्नुहोस्"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="5743634657721110967">"SIM कार्ड अनलक गरिँदै छ…"</string>
     <string name="kg_password_wrong_pin_code" msgid="9013856346870572451">"गलत PIN कोड।"</string>
@@ -1666,7 +1672,7 @@
     <string name="kg_login_invalid_input" msgid="8292367491901220210">"अमान्य प्रयोगकर्तानाम वा पासवर्ड।"</string>
     <string name="kg_login_account_recovery_hint" msgid="4892466171043541248">"के तपाईँले उपयोगकर्ता नाम वा पासवर्ड बिर्सनुभयो?\n"<b>"google.com/accounts/recovery"</b>" मा जानुहोस्।"</string>
     <string name="kg_login_checking_password" msgid="4676010303243317253">"खाता जाँच हुँदै…"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="23741434207544038">"तपाईँले गलत तरिकाले तपाईँको PIN <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_pin_attempts_dialog_message" msgid="23741434207544038">"तपाईंले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक गलत PIN टाइप गर्नुभएको छ। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="3328686432962224215">"तपाईँले तपाईँक पासवर्ड <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="7357404233979139075">"तपाईँले तपाईँको अनलक प्याटर्न गलत तरिकाले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक खिच्नु भएको छ। \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकेन्डमा फेरि कोसिस गर्नुहोस्।"</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="3479940221343361587">"तपाईँले ट्याब्लेटलाई अनलक गर्न गलत तरिकाले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक कोसिस गर्नु भएको छ। <xliff:g id="NUMBER_1">%2$d</xliff:g> पछि थप असफल प्रयासहरू, ट्याब्लेट डिफल्ट कार्यशालामा रिसेट गरिने छ र सबै प्रयोग डेटा हराउने छ।"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"हटाउनुहोस्"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"सिफारिस तहभन्दा आवाज ठुलो गर्नुहुन्छ?\n\nलामो समय सम्म उच्च आवाजमा सुन्दा तपाईँको सुन्ने शक्तिलाई हानी गर्न सक्छ।"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"चेतावनी,\nतपाईंले एक हप्तामा हेडफोनमार्फत सुरक्षित रूपमा सुन्न मिल्ने ठुला आवाजयुक्त सिग्नलहरूको मात्राका सम्बन्धमा तोकिएको सीमा नाघ्नुभएको छ।\n\nयो सीमा नाघेका खण्डमा तपाईंको श्रवण शक्ति सदाका लागि खराब हुने छ।"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"चेतावनी,\nतपाईंले एक हप्तामा हेडफोनमार्फत सुरक्षित रूपमा सुन्न मिल्ने ठुला आवाजयुक्त सिग्नलहरूको मात्राका सम्बन्धमा तोकिएको सीमा ५ गुणाले नाघ्नुभएको छ।\n\nतपाईंको श्रवण शक्तिमा असर नपरोस् भन्नाका लागि भोल्युम घटाइएको छ।"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"तपाईंले अहिले जति भोल्युममा मिडिया सुनिरहनुभएको छ त्यति नै भोल्युममा लामो समयसम्म मिडिया सुन्नुभयो भने तपाईंको श्रवण शक्ति खराब हुन सक्छ।\n\nतपाईंले लामो समयसम्म यति नै भोल्युममा मिडिया सुनिराख्नुभयो भने तपाईंको श्रवण शक्ति खराब हुन सक्छ।"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"चेतावनी,\nतपाईं अहिले असुरक्षित रूपमा उच्च भोल्युममा सामग्री सुन्दै हुनुहुन्छ।\n\nतपाईंले लामो समयसम्म यति नै भोल्युममा सामग्री सुनिराख्नुभयो भने तपाईंको श्रवण शक्ति सदाका लागि खराब हुने छ।"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"ठुलो आवाजमा सुनिरहन चाहनुहुन्छ?\n\nहेडफोनको भोल्युम सिफारिस गरिएको समयभन्दा लामो समयदेखि उच्च छ। यसले तपाईंको श्रवण शक्तिमा क्षति पुर्‍याउन सक्छ"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"ठुलो आवाज पत्ता लाग्यो\n\nहेडफोनको भोल्युम सिफारिस गरिएको स्तरभन्दा उच्च छ। यसले तपाईंको श्रवण शक्ति क्षय गर्न सक्छ"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"पहुँच सम्बन्धी सर्टकट प्रयोग गर्ने हो?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"यो सर्टकट सक्रिय हुँदा, ३ सेकेन्डसम्म दुवै भोल्युम बटन थिच्नुले पहुँचसम्बन्धी कुनै सुविधा सुरु गर्ने छ।"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"एक्सेसिबिलिटीसम्बन्धी सुविधा  प्रयोग गर्न सर्टकट अन गर्ने हो?"</string>
@@ -1697,11 +1701,11 @@
     <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"सक्रिय"</string>
     <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"निष्क्रिय"</string>
     <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> लाई तपाईंको यन्त्र पूर्ण रूपमा नियन्त्रण गर्न दिने हो?"</string>
-    <string name="accessibility_service_warning_description" msgid="291674995220940133">"एक्सेसिबिलिटीसम्बन्धी आवश्यकतामा सहयोग गर्ने एपको पूर्ण नियन्त्रण गर्नु उपयुक्त हुन्छ तर अधिकांश एपका हकमा यस्तो नियन्त्रण उपयुक्त हुँदैन।"</string>
+    <string name="accessibility_service_warning_description" msgid="291674995220940133">"एक्सेसिबिलिटीसम्बन्धी आवश्यकतामा सहयोग गर्ने एपको पूर्ण नियन्त्रण गर्न दिनु उपयुक्त हुन्छ तर अधिकांश एपका हकमा यस्तो नियन्त्रण उपयुक्त हुँदैन।"</string>
     <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"स्क्रिन हेर्नुहोस् र नियन्त्रण गर्नुहोस्"</string>
     <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"यसले स्क्रिनमा देखिने सबै सामग्री पढ्न सक्छ र अन्य एपहरूमा उक्त सामग्री देखाउन सक्छ।"</string>
     <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"कारबाहीहरू हेर्नुहोस् र तिनमा कार्य गर्नुहोस्"</string>
-    <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"यसले कुनै एप वा हार्डवेयर सेन्सरसँग तपाईंले गर्ने अन्तर्क्रियाको ट्र्याक गर्न सक्छ र तपाईंका तर्फबाट एपहरूसँग अन्तर्क्रिया गर्न सक्छ।"</string>
+    <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"यसले कुनै एप वा हार्डवेयर सेन्सरसँग तपाईंले गर्ने अन्तर्क्रिया ट्र्याक गर्न सक्छ र तपाईंका तर्फबाट एपहरूसँग अन्तर्क्रिया गर्न सक्छ।"</string>
     <string name="accessibility_dialog_button_allow" msgid="2092558122987144530">"अनुमति दिनुहोस्"</string>
     <string name="accessibility_dialog_button_deny" msgid="4129575637812472671">"नदिनुहोस्"</string>
     <string name="accessibility_select_shortcut_menu_title" msgid="6002726538854613272">"कुनै सुविधा प्रयोग गर्न थाल्न उक्त सुविधामा ट्याप गर्नुहोस्:"</string>
@@ -1716,7 +1720,7 @@
     <string name="color_correction_feature_name" msgid="7975133554160979214">"रङ सच्याउने सुविधा"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"एक हाते मोड"</string>
     <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"अझै मधुरो"</string>
-    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"हियरिङ डिभाइसहरू"</string>
+    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"श्रवण यन्त्रहरू"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"तपाईंले भोल्युम बटनहरू थिचिराख्नुभयो। <xliff:g id="SERVICE_NAME">%1$s</xliff:g> अन भयो।"</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"तपाईंले भोल्युम बटनहरू थिचिराख्नुभयो। <xliff:g id="SERVICE_NAME">%1$s</xliff:g> अफ भयो।"</string>
     <string name="accessibility_shortcut_spoken_feedback" msgid="3760999147597564314">"भोल्युम बटनहरू थिच्न छाड्नुहोस्। <xliff:g id="SERVICE_NAME">%1$s</xliff:g> अन गर्न दुवै भोल्युम बटन फेरि ३ सेकेन्डसम्म थिचिराख्नुहोस्।"</string>
@@ -1837,8 +1841,8 @@
     <string name="reason_service_unavailable" msgid="5288405248063804713">"प्रिन्ट सेवा सक्षम गरिएको छैन"</string>
     <string name="print_service_installed_title" msgid="6134880817336942482">"<xliff:g id="NAME">%s</xliff:g> सेवा स्थापित भयो"</string>
     <string name="print_service_installed_message" msgid="7005672469916968131">"सक्षम पार्न ट्याप गर्नुहोस्"</string>
-    <string name="restr_pin_enter_admin_pin" msgid="1199419462726962697">"प्रशासकको PIN प्रविष्टि गर्नुहोस्"</string>
-    <string name="restr_pin_enter_pin" msgid="373139384161304555">"PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="restr_pin_enter_admin_pin" msgid="1199419462726962697">"प्रशासकको PIN हाल्नुहोस्"</string>
+    <string name="restr_pin_enter_pin" msgid="373139384161304555">"PIN हाल्नुहोस्"</string>
     <string name="restr_pin_incorrect" msgid="3861383632940852496">"गलत"</string>
     <string name="restr_pin_enter_old_pin" msgid="7537079094090650967">"वर्तमान PIN"</string>
     <string name="restr_pin_enter_new_pin" msgid="3267614461844565431">"नयाँ PIN"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"बाहिर निस्कन, माथिबाट तल स्वाइप गर्नुहोस्।"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"बुझेँ"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"अझ राम्रो दृश्य हेर्न चाहनुहुन्छ भने रोटेट गर्नुहोस्"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"अझ राम्रो दृश्य हेर्न चाहनुहुन्छ भने \"स्प्लिट स्क्रिन\" बाट बाहिरिनुहोस्"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"अझ राम्रो दृश्य हेर्न चाहनुहुन्छ भने <xliff:g id="NAME">%s</xliff:g> खोल्नुहोस्"</string>
     <string name="done_label" msgid="7283767013231718521">"भयो"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"घन्टा गोलाकार स्लाइडर"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"मिनेट गोलाकार स्लाइडर"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"एप उपलब्ध छैन"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> अहिले उपलब्ध छैन।"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> उपलब्ध छैन"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"अनुमति चाहिन्छ"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"अनुमतिसम्बन्धी अनुरोध रद्द गरिएको छ"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"यो एपले अतिरिक्त अनुमति मागिरहेको छ तर स्ट्रिमिङ सत्रमा अनुमति दिन मिल्दैन। सर्वप्रथम आफ्नो Android TV डिभाइसमा अनुमति दिनुहोस्।"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"यो एपले अतिरिक्त अनुमति मागिरहेको छ तर स्ट्रिमिङ सत्रमा अनुमति दिन मिल्दैन। सर्वप्रथम आफ्नो ट्याब्लेटमा अनुमति दिनुहोस्।"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"यो एपले अतिरिक्त अनुमति मागिरहेको छ तर स्ट्रिमिङ सत्रमा अनुमति दिन मिल्दैन। सर्वप्रथम आफ्नो फोनमा अनुमति दिनुहोस्।"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"यो एप Android को पुरानो संस्करणका लागि निर्माण गरिएको थियो। यो एपले राम्ररी काम नगर्न सक्छ र यसमा सुरक्षा तथा गोपनीयतासम्बन्धी पछिल्ला सुरक्षा सुविधाहरू समावेश नहुन सक्छन्। यस एपको नवीनतम संस्करण उपलब्ध छ कि छैन हेर्नुहोस् वा एपका विकासकर्तासँग सम्पर्क गर्नुहोस्।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"अपडेट उपलब्ध छ वा छैन जाँच्नुहोस्"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"यो एप Android को नवीनतम संस्करणसँग कम्प्याटिबल छैन। यस एपको नवीनतम संस्करण उपलब्ध छ कि छैन भन्ने कुरा हेर्नुहोस् वा एपका विकासकर्तालाई सम्पर्क गर्नुहोस्।"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"तपाईंलाई नयाँ सन्देश आएको छ"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"हेर्नका लागि SMS एप खोल्नुहोस्"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"केही सुविधा राम्ररी नचल्न सक्छन्"</string>
@@ -2125,7 +2133,7 @@
     <string name="chooser_no_direct_share_targets" msgid="1511722103987329028">"कुनै पनि व्यक्तिसँग सेयर गर्ने सिफारिस गरिएको छैन"</string>
     <string name="chooser_all_apps_button_label" msgid="3230427756238666328">"अनुप्रयोगहरूको सूची"</string>
     <string name="usb_device_resolve_prompt_warn" msgid="325871329788064199">"यो एपलाई रेकर्ड गर्ने अनुमति प्रदान गरिएको छैन तर यसले यो USB यन्त्रमार्फत अडियो क्याप्चर गर्न सक्छ।"</string>
-    <string name="accessibility_system_action_home_label" msgid="3234748160850301870">"गृहपृष्ठ"</string>
+    <string name="accessibility_system_action_home_label" msgid="3234748160850301870">"होम"</string>
     <string name="accessibility_system_action_back_label" msgid="4205361367345537608">"पछाडि फर्कनुहोस्"</string>
     <string name="accessibility_system_action_recents_label" msgid="4782875610281649728">"हालसालैका एपहरू"</string>
     <string name="accessibility_system_action_notifications_label" msgid="6083767351772162010">"सूचनाहरू"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"यो सामग्री कामसम्बन्धी एपहरूमार्फत खोल्न मिल्दैन"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"यो सामग्री व्यक्तिगत एपहरूमार्फत सेयर गर्न मिल्दैन"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"यो सामग्री व्यक्तिगत एपहरूमार्फत खोल्न मिल्दैन"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"कार्य प्रोफाइल पज गरिएको छ"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"अन गर्न ट्याप गर्नुहोस्"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"कामसम्बन्धी एपहरू पज गरिएका छन्"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"अनपज गर्नुहोस्"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"यो सामग्री खोल्न मिल्ने कुनै पनि कामसम्बन्धी एप छैन"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"यो सामग्री खोल्न मिल्ने कुनै पनि व्यक्तिगत एप छैन"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"कामसम्बन्धी <xliff:g id="APP">%s</xliff:g> खोल्ने हो?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"व्यक्तिगत <xliff:g id="APP">%s</xliff:g> मा खोल्ने हो?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"कामसम्बन्धी <xliff:g id="APP">%s</xliff:g> मा खोल्ने हो?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"कामसम्बन्धी एपबाट कल गर्ने हो?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"कामसम्बन्धी एप प्रयोग गर्ने हो?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"तपाईंको सङ्गठनले तपाईंलाई कामसम्बन्धी एपहरूमार्फत मात्र कल गर्ने अनुमति दिएको छ"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"तपाईंको सङ्गठनले तपाईंलाई कामसम्बन्धी एपहरूमार्फत मात्र म्यासेज पठाउने अनुमति दिएको छ"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"व्यक्तिगत ब्राउजर प्रयोग गर्नुहोस्"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"कार्य ब्राउजर प्रयोग गर्नुहोस्"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"कल गर्नुहोस्"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"बदल्नुहोस्"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM को नेटवर्क अनलक गर्ने PIN"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM को नेटवर्कको सबसेट अनलक गर्ने PIN"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM को कर्पोरेट लक खोल्ने PIN"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"तपाईंको <xliff:g id="DEVICE">%1$s</xliff:g> मार्फत फोनको क्यामेरा प्रयोग गर्न मिल्दैन"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"तपाईंको <xliff:g id="DEVICE">%1$s</xliff:g> मार्फत ट्याब्लेटको क्यामेरा प्रयोग गर्न मिल्दैन"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"स्ट्रिम गरिरहेका बेला यो सामग्री हेर्न तथा प्रयोग गर्न मिल्दैन। बरु आफ्नो फोनमार्फत सो सामग्री हेर्ने तथा प्रयोग गर्ने प्रयास गर्नुहोस्।"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"स्ट्रिम गरिरहेका बेला picture-in-picture मोड प्रयोग गर्न मिल्दैन"</string>
     <string name="system_locale_title" msgid="711882686834677268">"सिस्टम डिफल्ट"</string>
     <string name="default_card_name" msgid="9198284935962911468">"कार्ड <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"स्मार्टवाचहरू व्यवस्थापन गर्ने सहयोगी वाच प्रोफाइलसम्बन्धी अनुमति"</string>
@@ -2317,20 +2331,20 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"यसले सहयोगी एपलाई ब्याकग्राउन्डमा फोरग्राउन्ड सेवाहरू चलाउने अनुमति दिन्छ।"</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"माइक्रोफोन अनम्युट गरिएको छ"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"माइक्रोफोन म्युट गरिएको छ"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"डुअल स्क्रिन"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"डुअल स्क्रिन अन छ"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen अन छ"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> ले सामग्री देखाउन दुई वटै डिस्प्ले प्रयोग गरिरहेको छ"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"डिभाइस ज्यादै तातेको छ"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"तपाईंको फोन ज्यादै तातिरहेको हुनाले डुअल स्क्रिन उपलब्ध छैन"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"तपाईंको फोन ज्यादै तातिरहेको हुनाले Dual Screen उपलब्ध छैन"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen उपलब्ध छैन"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"ब्याट्री सेभर अन भएकाले Dual Screen उपलब्ध छैन। तपाईं सेटिङमा गई यो सुविधा अफ गर्न सक्नुहुन्छ।"</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"सेटिङमा जानुहोस्"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"अफ गर्नुहोस्"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> कन्फिगर गरिएको छ"</string>
-    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"किबोर्ड लेआउट सेट गरी <xliff:g id="LAYOUT_1">%s</xliff:g> बनाइएको छ। परिवर्तन गर्न ट्याप गर्नुहोस्।"</string>
-    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"किबोर्ड लेआउट सेट गरी <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> बनाइएको छ। परिवर्तन गर्न ट्याप गर्नुहोस्।"</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"किबोर्ड लेआउट सेट गरी <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g> बनाइएको छ। परिवर्तन गर्न ट्याप गर्नुहोस्।"</string>
-    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"किबोर्ड लेआउट सेट गरी <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g> बनाइएको छ… परिवर्तन गर्न ट्याप गर्नुहोस्।"</string>
+    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"किबोर्ड लेआउट <xliff:g id="LAYOUT_1">%s</xliff:g> भाषामा सेट गरिएको छ। बदल्न ट्याप गर्नुहोस्।"</string>
+    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"किबोर्ड लेआउट <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> भाषामा सेट गरिएको छ। बदल्न ट्याप गर्नुहोस्।"</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"किबोर्ड लेआउट <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g> भाषामा सेट गरिएको छ। बदल्न ट्याप गर्नुहोस्।"</string>
+    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"किबोर्ड लेआउट <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g> भाषामा सेट गरिएको छ… बदल्न ट्याप गर्नुहोस्।"</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"भौतिक किबोर्डहरू कन्फिगर गरिएका छन्"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"किबोर्डहरू हेर्न ट्याप गर्नुहोस्"</string>
 </resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 3729018..9b1e982 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -192,7 +192,7 @@
     <string name="network_logging_notification_text" msgid="1327373071132562512">"Dit apparaat wordt beheerd door je organisatie. Het netwerkverkeer kan worden bijgehouden. Tik voor meer informatie."</string>
     <string name="location_changed_notification_title" msgid="3620158742816699316">"Apps hebben toegang tot je locatie"</string>
     <string name="location_changed_notification_text" msgid="7158423339982706912">"Neem contact op met je IT-beheerder voor meer informatie"</string>
-    <string name="geofencing_service" msgid="3826902410740315456">"Service voor geo-fencing"</string>
+    <string name="geofencing_service" msgid="3826902410740315456">"Service voor geofencing"</string>
     <string name="country_detector" msgid="7023275114706088854">"Landdetectie"</string>
     <string name="location_service" msgid="2439187616018455546">"Locatieservice"</string>
     <string name="gnss_service" msgid="8907781262179951385">"GNSS-service"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android-systeem"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Schakelen naar persoonlijk profiel"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Schakelen naar werkprofiel"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Overschakelen naar persoonlijk <xliff:g id="APP_NAME">%1$s</xliff:g>-profiel"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Overschakelen naar <xliff:g id="APP_NAME">%1$s</xliff:g>-werkprofiel"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contacten"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"toegang krijgen tot je contacten"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Locatie"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Hiermee kan de app de trilstand beheren."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Hiermee heeft de app toegang tot de status van de trilstand."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"telefoonnummers rechtstreeks bellen"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Hiermee kan de app zonder je tussenkomst telefoonnummers bellen. Dit kan tot onverwachte kosten of gesprekken leiden. De app kan hiermee geen noodnummers bellen. Schadelijke apps kunnen u geld kosten door nummers te bellen zonder om je bevestiging te vragen."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Hiermee kan de app telefoonnummers bellen zonder je tussenkomst. Dit kan resulteren in onverwachte kosten of gesprekken. Dit geeft de app geen rechten om alarmnummers te bellen. Kwaadwillende apps kunnen je geld kosten omdat ze zonder je toestemming kunnen bellen. Ook kunnen ze providercodes kiezen waardoor inkomende gesprekken automatisch worden doorgestuurd naar een ander nummer."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"toegang tot IMS-service voor bellen"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Hiermee kan de app de IMS-service gebruiken om te bellen zonder je tussenkomst."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"telefoonstatus en -identiteit lezen"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Hiermee kun je zorgen dat de app informatie krijgt over de voorkeursservice voor NFC-betaling, zoals geregistreerde hulpmiddelen en routebestemmingen."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"Near Field Communication regelen"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Hiermee kan de app communiceren met NFC-tags (Near Field Communication), kaarten en lezers."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Secure Element-transactiegebeurtenis"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Staat toe dat de app informatie krijgt over transacties die plaatsvinden in een Secure Element."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"je schermvergrendeling uitzetten"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Hiermee kan de app de toetsenblokkering en bijbehorende wachtwoordbeveiliging uitzetten. Zo kan de telefoon de toetsenblokkering uitzetten als je wordt gebeld en de toetsenblokkering weer aanzetten als het gesprek is beëindigd."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"complexiteit van schermvergrendeling opvragen"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Biometrische gegevens of schermvergrendeling gebruiken"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Je identiteit verifiëren"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Gebruik je biometrische gegevens om door te gaan"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Gebruik je vingerafdruk om door te gaan"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Gebruik je gezicht om door te gaan"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Gebruik je biometrische gegevens of schermvergrendeling om door te gaan"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrische hardware niet beschikbaar"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Verificatie geannuleerd"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Niet herkend"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Gezicht niet herkend"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Verificatie geannuleerd"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Geen pincode, patroon of wachtwoord ingesteld"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Fout bij verificatie"</string>
@@ -692,15 +699,15 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Kijk goed recht naar je telefoon"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Kijk goed recht naar je telefoon"</string>
     <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_obscured" msgid="4917643294953326639">"Zorg dat niets je gezicht bedekt"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Reinig de bovenkant van je scherm, inclusief de zwarte balk"</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>
+    <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Donkere bril waargenomen. Je gezicht moet helemaal zichtbaar zijn."</string>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Gezichtsbedekking waargenomen. Je hele gezicht moet zichtbaar zijn."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Kan gezicht niet verifiëren. Hardware niet beschikbaar."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Bewerking voor gezichtsherkenning geannuleerd."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Ontgrendelen via gezichtsherkenning geannuleerd door gebruiker"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Te veel pogingen. Probeer het later opnieuw."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Te veel pogingen. Ontgrendelen via gezichtsherkenning is niet beschikbaar."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Te veel pogingen. Gebruik schermvergrendeling."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Kan gezicht niet verifiëren. Probeer het nog eens."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Je hebt Ontgrendelen via gezichtsherkenning niet ingesteld."</string>
@@ -1239,7 +1245,7 @@
     <string name="unsupported_display_size_show" msgid="980129850974919375">"Altijd tonen"</string>
     <string name="unsupported_compile_sdk_message" msgid="7326293500707890537">"<xliff:g id="APP_NAME">%1$s</xliff:g> is gemaakt voor een niet-geschikte versie van het Android-besturingssysteem en kan onverwacht gedrag vertonen. Mogelijk is er een geüpdatete versie van de app beschikbaar."</string>
     <string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"Altijd tonen"</string>
-    <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Checken op updates"</string>
+    <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Controleren op updates"</string>
     <string name="smv_application" msgid="3775183542777792638">"De app <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) heeft het zelf afgedwongen StrictMode-beleid geschonden."</string>
     <string name="smv_process" msgid="1398801497130695446">"Het proces <xliff:g id="PROCESS">%1$s</xliff:g> heeft het zelf afgedwongen StrictMode-beleid geschonden."</string>
     <string name="android_upgrading_title" product="default" msgid="7279077384220829683">"Telefoon wordt geüpdatet…"</string>
@@ -1255,7 +1261,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Apps starten."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Opstarten afronden."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Je hebt op de aan/uit-knop gedrukt. Zo zet je meestal het scherm uit.\n\nRaak de knop voorzichtig aan terwijl je je vingerafdruk instelt."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Zet het scherm uit om het instellen te beëindigen"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Zet scherm uit om instellen te beëindigen"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Uitzetten"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Doorgaan met verificatie van je vingerafdruk?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Je hebt op de aan/uit-knop gedrukt. Zo zet je meestal het scherm uit.\n\nRaak de knop voorzichtig aan om je vingerafdruk te verifiëren."</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"WEIGEREN"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Invoermethode selecteren"</string>
     <string name="show_ime" msgid="6406112007347443383">"Toon op het scherm terwijl het fysieke toetsenbord actief is"</string>
-    <string name="hardware" msgid="1800597768237606953">"Virtueel toetsenbord tonen"</string>
+    <string name="hardware" msgid="3611039921284836033">"Schermtoetsenbord gebruiken"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> instellen"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Fysieke toetsenborden instellen"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Tik om een taal en indeling te selecteren"</string>
@@ -1566,7 +1572,7 @@
     <string name="shareactionprovider_share_with" msgid="2753089758467748982">"Delen met"</string>
     <string name="shareactionprovider_share_with_application" msgid="4902832247173666973">"Delen met <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="982510275422590757">"Schuifgreep. Tikken en blijven aanraken."</string>
-    <string name="description_target_unlock_tablet" msgid="7431571180065859551">"Swipen om te ontgrendelen"</string>
+    <string name="description_target_unlock_tablet" msgid="7431571180065859551">"Swipe om te ontgrendelen"</string>
     <string name="action_bar_home_description" msgid="1501655419158631974">"Navigeren naar startpositie"</string>
     <string name="action_bar_up_description" msgid="6611579697195026932">"Omhoog navigeren"</string>
     <string name="action_menu_overflow_description" msgid="4579536843510088170">"Meer opties"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Verwijderen"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Volume verhogen tot boven het aanbevolen niveau?\n\nAls je langere tijd op hoog volume naar muziek luistert, raakt je gehoor mogelijk beschadigd."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Waarschuwing:\nJe hebt de hoeveelheid harde geluidssignalen waarnaar iemand veilig in een week kan luisteren via een hoofdtelefoon overschreden.\n\nAls je over deze limiet gaat, kun je je gehoor permanent beschadigen."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Waarschuwing:\nJe hebt de limiet voor harde geluidssignalen waarnaar iemand veilig in een week kan luisteren via een hoofdtelefoon 5 keer overschreden.\n\nHet volume is lager gezet om je gehoor te beschermen."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Het niveau waarop je naar media luistert, kan leiden tot gehoorschade bij langdurig gebruik.\n\nAls je langere tijd dit geluidsniveau aanhoudt, kan dit je gehoor beschadigen."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Waarschuwing:\nJe luistert momenteel naar content met een hoog, onveilig geluidsniveau.\n\nAls je blijft luisteren op dit geluidsniveau, kun je je gehoor permanent beschadigen."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Wil je blijven luisteren op hoog volume?\n\nHet hoofdtelefoonvolume is langer dan de aanbevolen tijd hoog geweest, wat je gehoor kan beschadigen"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Hard geluid gedetecteerd\n\nHet hoofdtelefoonvolume is hoger dan aanbevolen, wat je gehoor kan beschadigen"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Snelkoppeling toegankelijkheid gebruiken?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Als de snelkoppeling aanstaat, houd je beide volumeknoppen 3 seconden ingedrukt om een toegankelijkheidsfunctie te starten."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Snelkoppeling voor toegankelijkheidsfuncties aanzetten?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Swipe omlaag vanaf de bovenkant van het scherm om af te sluiten."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Ik snap het"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Draai voor een betere weergave"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Sluit het gesplitste scherm voor een betere weergave"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Open <xliff:g id="NAME">%s</xliff:g> op volledig scherm voor een betere weergave"</string>
     <string name="done_label" msgid="7283767013231718521">"Klaar"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Ronde schuifregelaar voor uren"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Ronde schuifregelaar voor minuten"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"App is niet beschikbaar"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> is momenteel niet beschikbaar."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> niet beschikbaar"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Rechten vereist"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Verzoek om rechten onderdrukt"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Deze app vraagt om extra rechten, maar je kunt geen rechten verlenen tijdens een streamingsessie. Verleen het recht eerst op je Android TV-apparaat."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Deze app vraagt om extra rechten, maar je kunt geen rechten verlenen tijdens een streamingsessie. Verleen het recht eerst op je tablet."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Deze app vraagt om extra rechten, maar je kunt geen rechten verlenen tijdens een streamingsessie. Verleen het recht eerst 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>
@@ -1975,7 +1982,8 @@
     <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="5246906284426844596">"Deze app is ontworpen voor een oudere versie van Android. De app werkt misschien niet goed en bevat niet de nieuwste beveiligings- en privacybeschermingsopties. Check op een update of neem contact op met de ontwikkelaar van de app."</string>
-    <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Checken op updates"</string>
+    <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Controleren op updates"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Deze app is niet compatibel met de nieuwste versie van Android. Check of er updates zijn of neem contact op met de ontwikkelaar van de app."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Je hebt nieuwe berichten"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Open je sms-app om ze te bekijken"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Functionaliteit kan beperkt zijn"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Deze content kan niet worden geopend met werk-apps"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Deze content kan niet worden gedeeld met persoonlijke apps"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Deze content kan niet worden geopend met persoonlijke apps"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Werkprofiel is onderbroken"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Tik om aan te zetten"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Werk-apps zijn onderbroken"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Hervatten"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Geen werk-apps"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Geen persoonlijke apps"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"<xliff:g id="APP">%s</xliff:g> voor het werk openen?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Openen in persoonlijke <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Openen in <xliff:g id="APP">%s</xliff:g> voor het werk?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Bellen vanuit werk-app?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Overschakelen naar werk-app?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Je organisatie staat je alleen toe om te bellen vanuit werk-apps"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Je organisatie staat je alleen toe om berichten te sturen vanuit werk-apps"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Persoonlijke browser gebruiken"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Werkbrowser gebruiken"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Bellen"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Overschakelen"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Ontgrendelingspincode voor SIM-netwerk"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Ontgrendelingspincode voor subset van SIM-netwerk"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Ontgrendelingspincode voor zakelijke simkaart"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Kan geen toegang tot de camera van de telefoon krijgen vanaf je <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Kan geen toegang tot de camera van de tablet krijgen vanaf je <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Je hebt hier geen toegang toe tijdens streaming. Probeer het in plaats daarvan op je telefoon."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Kan scherm-in-scherm niet bekijken tijdens het streamen"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Systeemstandaard"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KAART <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Smartwatchprofiel voor bijbehorende app om smartwatches te beheren"</string>
@@ -2318,7 +2332,7 @@
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Microfoon is beschikbaar"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Microfoon is geblokkeerd"</string>
     <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dubbel scherm"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dubbel scherm is aan"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dubbel scherm staat aan"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> gebruikt beide schermen om content te tonen"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Het apparaat is te warm"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dubbel scherm is niet beschikbaar, omdat je telefoon te warm wordt"</string>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index 8ad846f..3e8f9d4 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -229,7 +229,7 @@
     <string name="reboot_to_update_reboot" msgid="4474726009984452312">"ରିଷ୍ଟାର୍ଟ କରାଯାଉଛି…"</string>
     <string name="reboot_to_reset_title" msgid="2226229680017882787">"ଫ୍ୟାକ୍ଟୋରୀ ଡାଟା ରିସେଟ୍‌"</string>
     <string name="reboot_to_reset_message" msgid="3347690497972074356">"ରିଷ୍ଟାର୍ଟ କରାଯାଉଛି…"</string>
-    <string name="shutdown_progress" msgid="5017145516412657345">"ବନ୍ଦ କରାଯାଉଛି…"</string>
+    <string name="shutdown_progress" msgid="5017145516412657345">"ବନ୍ଦ ହେଉଛି…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="2872769463279602432">"ଆପଣଙ୍କ ଟାବଲେଟ୍ ବନ୍ଦ ହୋଇଯିବ।"</string>
     <string name="shutdown_confirm" product="tv" msgid="7975942887313518330">"ଆପଣଙ୍କର Android TV ଡିଭାଇସ୍ ବନ୍ଦ ହୋଇଯିବ।"</string>
     <string name="shutdown_confirm" product="watch" msgid="2977299851200240146">"ଆପଣଙ୍କ ଘଣ୍ଟା ବନ୍ଦ ହୋଇଯିବ।"</string>
@@ -262,7 +262,7 @@
     <string name="global_action_toggle_silent_mode" msgid="8464352592860372188">"ସାଇଲେଣ୍ଟ ମୋଡ୍"</string>
     <string name="global_action_silent_mode_on_status" msgid="2371892537738632013">"ସାଉଣ୍ଡ ଅଫ୍ ଅଛି"</string>
     <string name="global_action_silent_mode_off_status" msgid="6608006545950920042">"ସାଉଣ୍ଡ ଚାଲୁ ଅଛି"</string>
-    <string name="global_actions_toggle_airplane_mode" msgid="6911684460146916206">"ଏରୋପ୍ଲେନ୍‍ ମୋଡ୍"</string>
+    <string name="global_actions_toggle_airplane_mode" msgid="6911684460146916206">"ଏୟାରପ୍ଲେନ ମୋଡ"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="5508025516695361936">"ଏୟାରପ୍ଲେନ୍ ମୋଡ୍ ଚାଲୁ ଅଛି"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="8522219771500505475">"ଏରୋପ୍ଲେନ୍‍ ମୋଡ୍ ଅଫ୍ ଅଛି"</string>
     <string name="global_action_settings" msgid="4671878836947494217">"ସେଟିଂସ୍"</string>
@@ -288,16 +288,18 @@
     <string name="notification_channel_usb" msgid="1528280969406244896">"USB ସଂଯୋଗ"</string>
     <string name="notification_channel_heavy_weight_app" msgid="17455756500828043">"ଆପ୍‍ ଚାଲୁଛି"</string>
     <string name="notification_channel_foreground_service" msgid="7102189948158885178">"ଆପ୍‍ଗୁଡ଼ିକ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରିଥା\'ନ୍ତି"</string>
-    <string name="notification_channel_accessibility_magnification" msgid="1707913872219798098">"ମ୍ୟାଗ୍ନିଫିକେସନ୍"</string>
+    <string name="notification_channel_accessibility_magnification" msgid="1707913872219798098">"ମେଗ୍ନିଫିକେସନ"</string>
     <string name="notification_channel_accessibility_security_policy" msgid="1727787021725251912">"ଆକ୍ସେସିବିଲିଟୀ ବ୍ୟବହାର"</string>
     <string name="foreground_service_app_in_background" msgid="1439289699671273555">"<xliff:g id="APP_NAME">%1$s</xliff:g> ବ୍ୟାଟେରୀ ବ୍ୟବହାର କରୁଛି"</string>
     <string name="foreground_service_apps_in_background" msgid="7340037176412387863">"<xliff:g id="NUMBER">%1$d</xliff:g>ଟି ଆପ୍‍ ବ୍ୟାଟେରୀ ବ୍ୟବହାର କରୁଛନ୍ତି"</string>
     <string name="foreground_service_tap_for_details" msgid="9078123626015586751">"ବ୍ୟାଟେରୀ ଏବଂ ଡାଟା ବ୍ୟବହାର ଉପରେ ବିବରଣୀ ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ"</string>
     <string name="foreground_service_multiple_separator" msgid="5002287361849863168">"<xliff:g id="LEFT_SIDE">%1$s</xliff:g>, <xliff:g id="RIGHT_SIDE">%2$s</xliff:g>"</string>
     <string name="safeMode" msgid="8974401416068943888">"ସୁରକ୍ଷିତ ମୋଡ୍"</string>
-    <string name="android_system_label" msgid="5974767339591067210">"Android ସିଷ୍ଟମ୍‌"</string>
+    <string name="android_system_label" msgid="5974767339591067210">"Android ସିଷ୍ଟମ"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"ବ୍ୟକ୍ତିଗତ ପ୍ରୋଫାଇଲ୍‌କୁ ଫେରିଆସନ୍ତୁ"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"କାର୍ଯ୍ୟ ପ୍ରୋଫାଇଲ୍‌କୁ ଯାଆନ୍ତୁ"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"ବ୍ୟକ୍ତିଗତ <xliff:g id="APP_NAME">%1$s</xliff:g>କୁ ସୁଇଚ କରନ୍ତୁ"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"ୱାର୍କ <xliff:g id="APP_NAME">%1$s</xliff:g>କୁ ସୁଇଚ କରନ୍ତୁ"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"କଣ୍ଟାକ୍ଟ"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"ଆପଣଙ୍କ ଯୋଗାଯୋଗ ଆକ୍ସେସ୍ କରେ"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"ଲୋକେସନ"</string>
@@ -316,7 +318,7 @@
     <string name="permgroupdesc_microphone" msgid="1047786732792487722">"ଅଡିଓ ରେକର୍ଡ କରେ"</string>
     <string name="permgrouplab_activityRecognition" msgid="3324466667921775766">"ଶାରୀରିକ କାର୍ଯ୍ୟକଳାପ"</string>
     <string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"ଆପଣଙ୍କ ଶାରୀରିକ କାର୍ଯ୍ୟକଳାପ ଆକ୍ସେସ୍ କରନ୍ତୁ"</string>
-    <string name="permgrouplab_camera" msgid="9090413408963547706">"କ୍ୟାମେରା"</string>
+    <string name="permgrouplab_camera" msgid="9090413408963547706">"କେମେରା"</string>
     <string name="permgroupdesc_camera" msgid="7585150538459320326">"ଫଟୋ ନିଏ ଓ ଭିଡିଓ ରେକର୍ଡ କରେ"</string>
     <string name="permgrouplab_nearby_devices" msgid="5529147543651181991">"ଆଖପାଖର ଡିଭାଇସଗୁଡ଼ିକ"</string>
     <string name="permgroupdesc_nearby_devices" msgid="3213561597116913508">"ଆଖପାଖର ଡିଭାଇସଗୁଡ଼ିକୁ ଖୋଜି ସଂଯୋଗ କରନ୍ତୁ"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"ଆପ୍‍କୁ, ଭାଇବ୍ରେଟର୍‍ ନିୟନ୍ତ୍ରଣ କରିବାକୁ ଦେଇଥାଏ।"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ଭାଇବ୍ରେଟର୍ ସ୍ଥିତି ଆକ୍ସେସ୍ କରିବାକୁ ଆପକୁ ଅନୁମତି ଦିଏ।"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"ସିଧାସଳଖ ଫୋନ୍ ନମ୍ବରଗୁଡ଼ିକୁ କଲ୍ କରନ୍ତୁ"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"ଆପଣଙ୍କ ହସ୍ତକ୍ଷେପ ବିନା ଫୋନ୍‌ ନମ୍ଵରକୁ କଲ୍ କରିବା ପାଇଁ ଆପ୍‌କୁ ଅନୁମତି ଦେଇଥାଏ। ଏହାଦ୍ୱାରା ଅପ୍ରତ୍ୟାଶିତ ଶୁଳ୍କ ଲାଗୁ ହୋଇପାରେ କିମ୍ବା କଲ୍ ହୋଇପାରେ। ଧ୍ୟାନଦିଅନ୍ତୁ ଯେ, ଏହା ଆପ୍‌କୁ କୌଣସି ଜରୁରୀକାଳୀନ ନମ୍ବରରେ କଲ୍ କରିବାକୁ ଅନୁମତି ଦିଏନାହିଁ। ହାନୀକାରକ ଆପ୍‌ ଆପଣଙ୍କ ବିନା ସ୍ୱୀକୃତିରେ କଲ୍ କରି ଆପଣଙ୍କ ପଇସା ଖର୍ଚ୍ଚ କରାଇପାରେ।"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"ଆପଣଙ୍କ ହସ୍ତକ୍ଷେପ ବିନା ଫୋନ ନମ୍ଵରକୁ କଲ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ। ଏହା ଫଳରେ ଅପ୍ରତ୍ୟାଶିତ ଚାର୍ଜ ଲାଗୁ ହୋଇପାରେ କିମ୍ବା କଲ ହୋଇପାରେ। ଧ୍ୟାନ ଦିଅନ୍ତୁ ଯେ ଏହା ଜରୁରୀକାଳୀନ ନମ୍ବରଗୁଡ଼ିକୁ କଲ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ ନାହିଁ। କ୍ଷତିକାରକ ଆପ୍ସ ଆପଣଙ୍କ ସୁନିଶ୍ଚିତକରଣ ବିନା କଲ କରି ଆପଣଙ୍କ ଟଙ୍କା ଖର୍ଚ୍ଚ କରିପାରେ କିମ୍ବା ଅନ୍ୟ ଏକ ନମ୍ବରକୁ ଇନକମିଂ କଲ ସ୍ୱତଃ ଫରୱାର୍ଡ କରୁଥିବା କେରିଅର କୋଡଗୁଡ଼ିକୁ ଡାଏଲ କରିପାରେ।"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS କଲ୍‍ ସେବା ଆକ୍ସେସ୍‍ କରେ"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"ଆପଣଙ୍କ ହସ୍ତକ୍ଷେପ ବିନା କଲ୍‍ କରିପାରିବା ପାଇଁ ଆପ୍‌କୁ IMS ସେବା ବ୍ୟବହାର କରିବାକୁ ଦିଏ।"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ଫୋନ୍‍ ସ୍ଥିତି ଓ ପରିଚୟ ପଢ଼ନ୍ତୁ"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"ପଞ୍ଜିକୃତ ଯନ୍ତ୍ର ଏବଂ ମାର୍ଗ ଲକ୍ଷସ୍ଥଳ ପରି ପସନ୍ଦର nfc ପେମେଣ୍ଟ ସେବା ସୂଚନା ପାଇବାକୁ ଆପ୍ ଅନୁମତି କରିଥାଏ।"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"ନିଅର୍ ଫିଲ୍ଡ କମ୍ୟୁନିକେଶନ୍ ଉପରେ ନିୟନ୍ତ୍ରଣ ରଖନ୍ତୁ"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"ନିଅର୍‍ ଫିଲ୍ଡ କମ୍ୟୁନିକେସନ୍‍ନ (NFC) ଟାଗ୍‍, କାର୍ଡ ଓ ରିଡରଗୁଡ଼ିକ ସହ ଯୋଗାଯୋଗ କରିବା ପାଇଁ ଆପ୍‍କୁ ଅନୁମତି ଦେଇଥାଏ।"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"ସୁରକ୍ଷିତ ଏଲିମେଣ୍ଟ ଟ୍ରାଞ୍ଜେକସନ ଇଭେଣ୍ଟ"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"ଏହା ଏକ ସୁରକ୍ଷିତ ଏଲିମେଣ୍ଟରେ ହେଉଥିବା ଟ୍ରାଞ୍ଜେକସନ ବିଷୟରେ ସୂଚନା ପାଇବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ।"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"ଆପଣଙ୍କ ସ୍କ୍ରୀନ୍‍ ଲକ୍‍ ଅକ୍ଷମ କରନ୍ତୁ"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"ଆପ୍‌କୁ କୀ\'ଲକ୍ କିମ୍ବା ସେଥିରେ ଥିବା କୌଣସି ପାସ୍‌ୱର୍ଡ ସୁରକ୍ଷାକୁ ଅକ୍ଷମ କରିବା ପାଇଁ ଅନୁମତି ଦିଏ, ଉଦାହରଣସ୍ୱରୂପ, ଇନ୍‌କମିଙ୍ଗ ଫୋନ୍‌ କଲ୍ ପ୍ରାପ୍ତ କରିବା ସମୟରେ ଫୋନ୍‌ଟି କୀ\'ଲକ୍‌କୁ ଅକ୍ଷମ କରିଦିଏ, ତା’ପରେ କଲ୍ ସମାପ୍ତ ହେବାପରେ ପୁଣି କୀ\'ଲକ୍‌କୁ ସକ୍ଷମ କରିଥାଏ।"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"ସ୍କ୍ରିନ୍ ଲକ୍ ଜଟିଳତା ସଂକ୍ରାନ୍ତ ଅନୁରୋଧ"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ବାୟୋମେଟ୍ରିକ୍ସ ବା ସ୍କ୍ରିନ୍ ଲକ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"ଏହା ଆପଣ ବୋଲି ଯାଞ୍ଚ କରନ୍ତୁ"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"ଜାରି ରଖିବାକୁ ଆପଣଙ୍କ ବାୟୋମେଟ୍ରିକ୍ସ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"ଜାରି ରଖିବାକୁ ଆପଣଙ୍କ ଟିପଚିହ୍ନ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"ଜାରି ରଖିବାକୁ ଆପଣଙ୍କ ଫେସ ବ୍ୟବହାର କରନ୍ତୁ"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"ଜାରି ରଖିବାକୁ ଆପଣଙ୍କ ବାୟୋମେଟ୍ରିକ୍ କିମ୍ବା ସ୍କ୍ରିନ୍ ଲକ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"ବାୟୋମେଟ୍ରିକ୍‌ ହାର୍ଡୱେର୍‌ ଉପଲବ୍ଧ ନାହିଁ"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"ପ୍ରାମାଣିକତାକୁ ବାତିଲ୍ କରାଯାଇଛି"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"ଚିହ୍ନଟ ହେଲାନାହିଁ"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"ଫେସ ଚିହ୍ନଟ କରାଯାଇନାହିଁ"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"ପ୍ରାମାଣିକତାକୁ ବାତିଲ୍ କରାଯାଇଛି"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"କୌଣସି ପିନ୍, ପେଟେର୍ନ ବା ପାସ୍‍ୱର୍ଡ ସେଟ୍ ନାହିଁ"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"ପ୍ରାମାଣିକରଣ କରିବା ସମୟରେ ତ୍ରୁଟି"</string>
@@ -633,7 +640,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"ବହୁତ ଉଜ୍ଜ୍ୱଳ"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"ପାୱାର ବଟନ ଦବାଇବା ଚିହ୍ନଟ କରାଯାଇଛି"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ଆଡଜଷ୍ଟ କରି ଦେଖନ୍ତୁ"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ପ୍ରତି ଥର ଆପଣଙ୍କ ଆଙ୍ଗୁଠିର ସ୍ଥାନ ସାମାନ୍ୟ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ପ୍ରତି ଥର ଆପଣଙ୍କ ଆଙ୍ଗୁଠିର ଅବସ୍ଥିତି ସାମାନ୍ୟ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ଟିପଚିହ୍ନ ଚିହ୍ନଟ ହେଲା ନାହିଁ"</string>
@@ -663,10 +670,10 @@
   </string-array>
     <string name="fingerprint_error_vendor_unknown" msgid="4170002184907291065">"କିଛି ତ୍ରୁଟି ହୋଇଛି। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <string name="fingerprint_icon_content_description" msgid="4741068463175388817">"ଟିପଚିହ୍ନ ଆଇକନ୍"</string>
-    <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"ଫେସ୍ ଅନଲକ୍"</string>
+    <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"ଫେସ ଅନଲକ"</string>
     <string name="face_recalibrate_notification_title" msgid="2524791952735579082">"ଫେସ୍ ଅନଲକ୍ ସହ ସମସ୍ୟା"</string>
     <string name="face_recalibrate_notification_content" msgid="3064513770251355594">"ଆପଣଙ୍କ ଫେସ୍ ମଡେଲକୁ ଡିଲିଟ୍ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ, ତା\'ପରେ ପୁଣି ଆପଣଙ୍କ ଫେସ୍ ଯୋଗ କରନ୍ତୁ"</string>
-    <string name="face_setup_notification_title" msgid="8843461561970741790">"ଫେସ୍ ଅନଲକ୍ ସେଟ୍ ଅପ୍ କରନ୍ତୁ"</string>
+    <string name="face_setup_notification_title" msgid="8843461561970741790">"ଫେସ ଅନଲକ ସେଟ ଅପ କରନ୍ତୁ"</string>
     <string name="face_setup_notification_content" msgid="5463999831057751676">"ଫୋନକୁ ଦେଖି ଏହାକୁ ଅନଲକ୍ କରନ୍ତୁ"</string>
     <string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"ଫେସ ଅନଲକ ବ୍ୟବହାର କରିବା ପାଇଁ, ସେଟିଂସ ଏବଂ ଗୋପନୀୟତାରେ "<b>"କ୍ୟାମେରା ଆକ୍ସେସ"</b>"କୁ ଚାଲୁ କରନ୍ତୁ"</string>
     <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"ଅନଲକ୍ କରିବା ପାଇଁ ଆହୁରି ଅଧିକ ଉପାୟ ସେଟ୍ ଅପ୍ କରନ୍ତୁ"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"ଫେସ୍‍ର ଅପରେଶନ୍‍ କ୍ୟାନ୍ସଲ୍‍ ହୋ‍ଇଗଲା"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ଦ୍ୱାରା ଫେସ୍ ଅନଲକ୍ ବାତିଲ୍ କରାଯାଇଛି"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"ବାରମ୍ବାର ଚେଷ୍ଟା। ପରେ ପୁଣିଥରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"ଅନେକଗୁଡ଼ିଏ ପ୍ରଚେଷ୍ଟା। ଫେସ ଅନଲକ ଉପଲବ୍ଧ ନାହିଁ।"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ଅନେକଗୁଡ଼ିଏ ପ୍ରଚେଷ୍ଟା। ଏହା ପରିବର୍ତ୍ତେ ସ୍କ୍ରିନ୍ ଲକ୍ ଏଣ୍ଟର୍ କରନ୍ତୁ।"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ମୁହଁ ଚିହ୍ନଟ କରିପାରିଲା ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"ଆପଣ ଫେସ୍ ଅନଲକ୍ ସେଟ୍ ଅପ୍ କରିନାହାଁନ୍ତି"</string>
@@ -751,8 +757,8 @@
     <string name="permdesc_register_call_provider" msgid="4201429251459068613">"ନୂତନ ଦୂରସଂଚାର ସଂଯୋଗକୁ ନଥିଭୁକ୍ତ କରିବା ପାଇଁ ଆପ୍‌କୁ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
     <string name="permlab_connection_manager" msgid="3179365584691166915">"ଟେଲିକମ୍ ସଂଯୋଗ ପରିଚାଳିତ କରନ୍ତୁ"</string>
     <string name="permdesc_connection_manager" msgid="1426093604238937733">"ଦୁରସଂଚାର ସଂଯୋଗ ପ୍ରବନ୍ଧିତ କରିବାକୁ ଆପ୍‌କୁ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
-    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"ଇନ୍ କଲ୍ ସ୍କ୍ରୀନ୍‍‌ ସହିତ ସଂଯୋଗ କରନ୍ତୁ"</string>
-    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"ୟୁଜର୍‍ କଲ୍ ଇନ୍ ସ୍କ୍ରୀନ୍‍‌ କେବେ ଓ କିପରି ଦେଖୁଛି, ତାହାକୁ ନିୟନ୍ତ୍ରିତ କରିବା ପାଇଁ ଆପ୍‌କୁ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
+    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"ଇନ କଲ ସ୍କ୍ରିନ ସହିତ ଇଣ୍ଟରାକ୍ଟ କରନ୍ତୁ"</string>
+    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"ୟୁଜର ଇନ-କଲ ସ୍କ୍ରିନ କେବେ ଓ କିପରି ଦେଖୁଛନ୍ତି, ତାହାକୁ ନିୟନ୍ତ୍ରଣ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଏ।"</string>
     <string name="permlab_bind_connection_service" msgid="5409268245525024736">"ଟେଲିଫୋନୀ ସେବା ସହିତ ସଂଯୋଗ କରନ୍ତୁ"</string>
     <string name="permdesc_bind_connection_service" msgid="6261796725253264518">"ଆପ୍‌କୁ କଲ୍ କରିବା ଏବଂ ପ୍ରାପ୍ତ କରିବା ପାଇଁ ଟେଲିଫୋନୀ ସେବା ସହିତ ସଂଯୋଗ କରିବା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
     <string name="permlab_control_incall_experience" msgid="6436863486094352987">"ଏକ କଲ୍ ୟୁଜର୍‍ ଅନୁଭବ ପ୍ରଦାନ କରିଥାଏ"</string>
@@ -981,12 +987,12 @@
     <string name="lockscreen_permanent_disabled_sim_instructions" msgid="6902979937802238429">"ଆପଣଙ୍କ SIMକୁ ସ୍ଥାୟୀ ଭାବରେ ନିଷ୍କ୍ରିୟ କରାଯାଇଛି।\n ଅନ୍ୟ ଏକ SIM ପାଇଁ ଆପଣଙ୍କ ୱେୟାରଲେସ ସେବା ପ୍ରଦାନକାରୀଙ୍କ ସହ କଣ୍ଟାକ୍ଟ କରନ୍ତୁ।"</string>
     <string name="lockscreen_transport_prev_description" msgid="2879469521751181478">"ପୂର୍ବବର୍ତ୍ତୀ ଟ୍ରାକ୍‌"</string>
     <string name="lockscreen_transport_next_description" msgid="2931509904881099919">"ପରବର୍ତ୍ତୀ ଟ୍ରାକ୍‌"</string>
-    <string name="lockscreen_transport_pause_description" msgid="6705284702135372494">"ପଜ୍‍ କରନ୍ତୁ"</string>
+    <string name="lockscreen_transport_pause_description" msgid="6705284702135372494">"ବିରତ କରନ୍ତୁ"</string>
     <string name="lockscreen_transport_play_description" msgid="106868788691652733">"ପ୍ଲେ କରନ୍ତୁ"</string>
     <string name="lockscreen_transport_stop_description" msgid="1449552232598355348">"ବନ୍ଦ କରନ୍ତୁ"</string>
     <string name="lockscreen_transport_rew_description" msgid="7680106856221622779">"ପଛକୁ ନିଅନ୍ତୁ"</string>
     <string name="lockscreen_transport_ffw_description" msgid="4763794746640196772">"ଫାଷ୍ଟ ଫ‌ର୍‌ୱାର୍ଡ"</string>
-    <string name="emergency_calls_only" msgid="3057351206678279851">"କେବଳ ଜରୁରୀକାଳୀନ କଲ୍‌"</string>
+    <string name="emergency_calls_only" msgid="3057351206678279851">"କେବଳ ଜରୁରୀକାଳୀନ କଲ"</string>
     <string name="lockscreen_network_locked_message" msgid="2814046965899249635">"ନେଟ୍‌ୱର୍କକୁ ଲକ୍‌ କରାଯାଇଛି"</string>
     <string name="lockscreen_sim_puk_locked_message" msgid="2867953953604224166">"SIMକୁ PUK-ଲକ କରାଯାଇଛି।"</string>
     <string name="lockscreen_sim_puk_locked_instructions" msgid="5307979043730860995">"ୟୁଜର ଗାଇଡ ଦେଖନ୍ତୁ କିମ୍ବା ଗ୍ରାହକ ସେବା କେନ୍ଦ୍ର ସହ କଣ୍ଟାକ୍ଟ କରନ୍ତୁ।"</string>
@@ -1032,7 +1038,7 @@
     <string name="keyguard_accessibility_widget" msgid="6776892679715699875">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ୱିଜେଟ୍‍।"</string>
     <string name="keyguard_accessibility_user_selector" msgid="1466067610235696600">"ୟୁଜର୍‌ ଚୟନକାରୀ"</string>
     <string name="keyguard_accessibility_status" msgid="6792745049712397237">"ଷ୍ଟାଟସ୍"</string>
-    <string name="keyguard_accessibility_camera" msgid="7862557559464986528">"କ୍ୟାମେରା"</string>
+    <string name="keyguard_accessibility_camera" msgid="7862557559464986528">"କେମେରା"</string>
     <string name="keygaurd_accessibility_media_controls" msgid="2267379779900620614">"ମିଡିଆ ନିୟନ୍ତ୍ରଣ"</string>
     <string name="keyguard_accessibility_widget_reorder_start" msgid="7066213328912939191">"ୱିଜେଟ୍‍ ପୁନଃ ସଜାଇବା ଆରମ୍ଭ ହେଲା।"</string>
     <string name="keyguard_accessibility_widget_reorder_end" msgid="1083806817600593490">"ୱିଜେଟ୍‍ ପୁନଃ ସଜାଇବା ଶେଷ ହେଲା।"</string>
@@ -1040,7 +1046,7 @@
     <string name="keyguard_accessibility_expand_lock_area" msgid="4215280881346033434">"ଅନଲକ୍‍ କ୍ଷେତ୍ରକୁ ବଢ଼ାନ୍ତୁ।"</string>
     <string name="keyguard_accessibility_slide_unlock" msgid="2968195219692413046">"ସ୍ଲାଇଡ୍‍ ଅନଲକ୍‍।"</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="8669128146589233293">"ପାଟର୍ନ ଅନଲକ୍‍।"</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"ଫେସ୍ ଅନଲକ୍।"</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"ଫେସ ଅନଲକ।"</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="4020864007967340068">"PIN ଅନଲକ୍‍।"</string>
     <string name="keyguard_accessibility_sim_pin_unlock" msgid="4895939120871890557">"PIN ଦ୍ଵାରା SIMକୁ ଅନଲକ୍ କରନ୍ତୁ।"</string>
     <string name="keyguard_accessibility_sim_puk_unlock" msgid="3459003464041899101">"PUK ଦ୍ଵାରା SIMକୁ ଅନଲକ୍ କରନ୍ତୁ।"</string>
@@ -1080,7 +1086,7 @@
     <string name="menu_function_shortcut_label" msgid="2367112760987662566">"Function+"</string>
     <string name="menu_space_shortcut_label" msgid="5949311515646872071">"ସ୍ପେସ୍‍"</string>
     <string name="menu_enter_shortcut_label" msgid="6709499510082897320">"ଏଣ୍ଟର୍"</string>
-    <string name="menu_delete_shortcut_label" msgid="4365787714477739080">"ଡିଲିଟ୍‌ କରନ୍ତୁ"</string>
+    <string name="menu_delete_shortcut_label" msgid="4365787714477739080">"ଡିଲିଟ କରନ୍ତୁ"</string>
     <string name="search_go" msgid="2141477624421347086">"ସର୍ଚ୍ଚ କରନ୍ତୁ"</string>
     <string name="search_hint" msgid="455364685740251925">"ସର୍ଚ୍ଚ କରନ୍ତୁ…"</string>
     <string name="searchview_description_search" msgid="1045552007537359343">"ସର୍ଚ୍ଚ କରନ୍ତୁ"</string>
@@ -1146,7 +1152,7 @@
     <string name="paste" msgid="461843306215520225">"ପେଷ୍ଟ କରନ୍ତୁ"</string>
     <string name="paste_as_plain_text" msgid="7664800665823182587">"ସାଦା ଟେକ୍ସଟ୍‍ ଭାବରେ ପେଷ୍ଟ କରନ୍ତୁ"</string>
     <string name="replace" msgid="7842675434546657444">"ବଦଳାନ୍ତୁ…"</string>
-    <string name="delete" msgid="1514113991712129054">"ଡିଲିଟ୍‍ କରନ୍ତୁ"</string>
+    <string name="delete" msgid="1514113991712129054">"ଡିଲିଟ କରନ୍ତୁ"</string>
     <string name="copyUrl" msgid="6229645005987260230">"URL କପି କରନ୍ତୁ"</string>
     <string name="selectTextMode" msgid="3225108910999318778">"ଟେକ୍ସଟ୍‍ ଚୟନ କରନ୍ତୁ"</string>
     <string name="undo" msgid="3175318090002654673">"ପୂର୍ବ ପରି କରନ୍ତୁ"</string>
@@ -1154,7 +1160,7 @@
     <string name="autofill" msgid="511224882647795296">"ଅଟୋଫିଲ୍‌"</string>
     <string name="textSelectionCABTitle" msgid="5151441579532476940">"ଟେକ୍ସଟ୍‍ ଚୟନ"</string>
     <string name="addToDictionary" msgid="8041821113480950096">"ଶବ୍ଦକୋଷରେ ଯୋଗ କରନ୍ତୁ"</string>
-    <string name="deleteText" msgid="4200807474529938112">"ଡିଲିଟ୍‍ କରନ୍ତୁ"</string>
+    <string name="deleteText" msgid="4200807474529938112">"ଡିଲିଟ କରନ୍ତୁ"</string>
     <string name="inputMethod" msgid="1784759500516314751">"ଇନପୁଟ୍ ପଦ୍ଧତି"</string>
     <string name="editTextMenuTitle" msgid="857666911134482176">"ଟେକ୍ସଟ୍‌ କାର୍ଯ୍ୟ"</string>
     <string name="input_method_nav_back_button_desc" msgid="3655838793765691787">"ପଛକୁ ଫେରନ୍ତୁ"</string>
@@ -1364,12 +1370,12 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"USB ମାଧ୍ୟମରେ MIDIକୁ ଚାଲୁ କରାଗଲା"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"ୱେବକେମ ଭାବେ ଡିଭାଇସ କନେକ୍ଟ କରାଯାଇଛି"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"USB ଆକ୍ସେସୋରୀ ଯୋଡ଼ାଗଲା"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"ଅଧିକ ବିକଳ୍ପ ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ।"</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"ଅଧିକ ବିକଳ୍ପ ପାଇଁ ଟାପ କରନ୍ତୁ।"</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"ଯୋଡ଼ାଯାଇଥିବା ଡିଭାଇସ୍ ଚାର୍ଜ ହେଉଛି। ଅଧିକ ବିକଳ୍ପ ପାଇଁ ଟାପ୍ କରନ୍ତୁ।"</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"ଆନାଲଗ୍‍ ଅଡିଓ ଆକ୍ସେସରୀ ଚିହ୍ନଟ ହେଲା"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"ଏହି ଫୋନ୍‌ରେ କନେକ୍ଟ ଥିବା ଡିଭାଇସ୍‍ କମ୍ପାଟିବଲ୍‍ ନୁହେଁ। ଅଧିକ ଜାଣିବା ପାଇଁ ଟାପ୍‌ କରନ୍ତୁ।"</string>
-    <string name="adb_active_notification_title" msgid="408390247354560331">"USB ଡିବଗିଂ କନେକ୍ଟ କରାଯାଇଛି"</string>
-    <string name="adb_active_notification_message" msgid="5617264033476778211">"USB ଡିବଗିଂକୁ ବନ୍ଦ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
+    <string name="adb_active_notification_title" msgid="408390247354560331">"USB ଡିବଗିଂ କନେକ୍ଟ ହୋଇଛି"</string>
+    <string name="adb_active_notification_message" msgid="5617264033476778211">"USB ଡିବଗିଂକୁ ବନ୍ଦ କରିବା ପାଇଁ ଟାପ କରନ୍ତୁ"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"USB ଡିବଗିଙ୍ଗକୁ ଅକ୍ଷମ କରିବା ପାଇଁ ଚୟନ କରନ୍ତୁ।"</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"ୱାୟାରଲେସ୍ ଡିବଗିଂ ସଂଯୋଗ କରାଯାଇଛି"</string>
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"ୱାୟାରଲେସ୍ ଡିବଗିଂକୁ ବନ୍ଦ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
@@ -1392,10 +1398,10 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ଅଗ୍ରାହ୍ୟ କରନ୍ତୁ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"ଇନପୁଟ୍ ପଦ୍ଧତି ବାଛନ୍ତୁ"</string>
     <string name="show_ime" msgid="6406112007347443383">"ଫିଜିକାଲ୍‌ କୀବୋର୍ଡ ସକ୍ରିୟ ଥିବାବେଳେ ଏହାକୁ ସ୍କ୍ରିନ୍‌ ଉପରେ ରଖନ୍ତୁ"</string>
-    <string name="hardware" msgid="1800597768237606953">"ଭର୍ଚୁଆଲ୍ କୀ’ବୋର୍ଡ ଦେଖାନ୍ତୁ"</string>
+    <string name="hardware" msgid="3611039921284836033">"ଅନ-ସ୍କ୍ରିନ କୀବୋର୍ଡ ବ୍ୟବହାର କର"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g>କୁ କନଫିଗର କରନ୍ତୁ"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"ଫିଜିକାଲ କୀବୋର୍ଡଗୁଡ଼ିକୁ କନଫିଗର କରନ୍ତୁ"</string>
-    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"ଭାଷା ଓ ଲେଆଉଟ୍‍ ଚୟନ କରିବା ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"ଭାଷା ଓ ଲେଆଉଟ ଚୟନ କରିବା ପାଇଁ ଟାପ କରନ୍ତୁ"</string>
     <string name="fast_scroll_alphabet" msgid="8854435958703888376">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="fast_scroll_numeric_alphabet" msgid="2529539945421557329">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"ଅନ୍ୟ ଆପ୍‌ଗୁଡ଼ିକ ଉପରେ ଦେଖାନ୍ତୁ"</string>
@@ -1429,8 +1435,8 @@
     <string name="ext_media_nomedia_notification_message" msgid="2832724384636625852">"କିଛି କାର୍ଯ୍ୟକ୍ଷମତା ଠିକ୍ ଭାବେ କାମ ନକରିପାରେ। ନୂଆ ଷ୍ଟୋରେଜ୍ ଭର୍ତ୍ତି କରନ୍ତୁ।"</string>
     <string name="ext_media_unmounting_notification_title" msgid="4147986383917892162">"<xliff:g id="NAME">%s</xliff:g>କୁ ଇଜେକ୍ଟ କରାଯାଉଛି"</string>
     <string name="ext_media_unmounting_notification_message" msgid="5717036261538754203">"କାଢ଼ନ୍ତୁ ନାହିଁ"</string>
-    <string name="ext_media_init_action" msgid="2312974060585056709">"ସେଟ୍ ଅପ୍ କରନ୍ତୁ"</string>
-    <string name="ext_media_unmount_action" msgid="966992232088442745">"ବାହାର କରନ୍ତୁ"</string>
+    <string name="ext_media_init_action" msgid="2312974060585056709">"ସେଟ ଅପ କରନ୍ତୁ"</string>
+    <string name="ext_media_unmount_action" msgid="966992232088442745">"କାଢ଼ି ଦିଅନ୍ତୁ"</string>
     <string name="ext_media_browse_action" msgid="344865351947079139">"ଖୋଜନ୍ତୁ"</string>
     <string name="ext_media_seamless_action" msgid="8837030226009268080">"ଆଉଟ୍‌ପୁଟ୍ ସ୍ୱିଚ୍‌ କରନ୍ତୁ"</string>
     <string name="ext_media_missing_title" msgid="3209472091220515046">"<xliff:g id="NAME">%s</xliff:g> ନାହିଁ"</string>
@@ -1489,7 +1495,7 @@
     <string name="input_method_binding_label" msgid="1166731601721983656">"ଇନପୁଟ୍ ପଦ୍ଧତି"</string>
     <string name="sync_binding_label" msgid="469249309424662147">"ସିଙ୍କ୍"</string>
     <string name="accessibility_binding_label" msgid="1974602776545801715">"ଆକ୍ସେସିବିଲିଟୀ"</string>
-    <string name="wallpaper_binding_label" msgid="1197440498000786738">"ୱାଲପେପର୍"</string>
+    <string name="wallpaper_binding_label" msgid="1197440498000786738">"ୱାଲପେପର"</string>
     <string name="chooser_wallpaper" msgid="3082405680079923708">"ୱାଲପେପର୍‍ ପରିବର୍ତ୍ତନ କରନ୍ତୁ।"</string>
     <string name="notification_listener_binding_label" msgid="2702165274471499713">"ବିଜ୍ଞପ୍ତି ଶ୍ରୋତା"</string>
     <string name="vr_listener_binding_label" msgid="8013112996671206429">"VR ଲିସନର୍"</string>
@@ -1512,7 +1518,7 @@
     <string name="car_mode_disable_notification_message" msgid="8954550232288567515">"ଡ୍ରାଇଭିଙ୍ଗ ଆପ୍‌ରୁ ବାହାରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ।"</string>
     <string name="back_button_label" msgid="4078224038025043387">"ଫେରନ୍ତୁ"</string>
     <string name="next_button_label" msgid="6040209156399907780">"ପରବର୍ତ୍ତୀ"</string>
-    <string name="skip_button_label" msgid="3566599811326688389">"ଛାଡ଼ିଦିଅନ୍ତୁ"</string>
+    <string name="skip_button_label" msgid="3566599811326688389">"ବାଦ ଦିଅନ୍ତୁ"</string>
     <string name="no_matches" msgid="6472699895759164599">"କୌଣସି ମେଳକ ନାହିଁ"</string>
     <string name="find_on_page" msgid="5400537367077438198">"ପୃଷ୍ଠାରେ ଖୋଜନ୍ତୁ"</string>
     <string name="matches_found" msgid="2296462299979507689">"{count,plural, =1{#ଟି ମେଳ}other{{total}ଟିରୁ #ଟି ମେଳ}}"</string>
@@ -1520,7 +1526,7 @@
     <string name="progress_erasing" msgid="6891435992721028004">"ସେୟାର୍‍ ହୋଇଥିବା ଷ୍ଟୋରେଜ୍‍ ଲିଭାଉଛି…"</string>
     <string name="share" msgid="4157615043345227321">"ସେୟାର୍‍"</string>
     <string name="find" msgid="5015737188624767706">"ଖୋଜନ୍ତୁ"</string>
-    <string name="websearch" msgid="5624340204512793290">"ୱେବ୍ ସର୍ଚ୍ଚ"</string>
+    <string name="websearch" msgid="5624340204512793290">"ୱେବ ସର୍ଚ୍ଚ"</string>
     <string name="find_next" msgid="5341217051549648153">"ପରବର୍ତ୍ତୀ ଖୋଜନ୍ତୁ"</string>
     <string name="find_previous" msgid="4405898398141275532">"ପୂର୍ବବର୍ତ୍ତୀ ଖୋଜନ୍ତୁ"</string>
     <string name="gpsNotifTicker" msgid="3207361857637620780">"<xliff:g id="NAME">%s</xliff:g>ଙ୍କଠାରୁ ଲୋକେସନ୍ ଅନୁରୋଧ ଆସିଛି"</string>
@@ -1556,7 +1562,7 @@
     <string name="date_picker_next_month_button" msgid="4858207337779144840">"ପରବର୍ତ୍ତୀ ମାସ"</string>
     <string name="keyboardview_keycode_alt" msgid="8997420058584292385">"ALT"</string>
     <string name="keyboardview_keycode_cancel" msgid="2134624484115716975">"ବାତିଲ କରନ୍ତୁ"</string>
-    <string name="keyboardview_keycode_delete" msgid="2661117313730098650">"ଡିଲିଟ୍‍ କରନ୍ତୁ"</string>
+    <string name="keyboardview_keycode_delete" msgid="2661117313730098650">"ଡିଲିଟ କରନ୍ତୁ"</string>
     <string name="keyboardview_keycode_done" msgid="2524518019001653851">"ହୋଇଗଲା"</string>
     <string name="keyboardview_keycode_mode_change" msgid="2743735349997999020">"ମୋଡ୍‍ ପରିବର୍ତ୍ତନ"</string>
     <string name="keyboardview_keycode_shift" msgid="3026509237043975573">"ଶିଫ୍ଟ"</string>
@@ -1606,7 +1612,7 @@
     <string name="fingerprints" msgid="148690767172613723">"ଆଙ୍ଗୁଠି ଚିହ୍ନ:"</string>
     <string name="sha256_fingerprint" msgid="7103976380961964600">"SHA-256 ଆଙ୍ଗୁଠି ଚିହ୍ନ:"</string>
     <string name="sha1_fingerprint" msgid="2339915142825390774">"SHA-1 ଟିପଚିହ୍ନ:"</string>
-    <string name="activity_chooser_view_see_all" msgid="3917045206812726099">"ସମସ୍ତ ଦେଖନ୍ତୁ"</string>
+    <string name="activity_chooser_view_see_all" msgid="3917045206812726099">"ସବୁ ଦେଖନ୍ତୁ"</string>
     <string name="activity_chooser_view_dialog_title_default" msgid="8880731437191978314">"ଗତିବିଧି ଚୟନ କରନ୍ତୁ"</string>
     <string name="share_action_provider_share_with" msgid="1904096863622941880">"ଏହାଙ୍କ ସହ ସେୟାର୍‍ କରନ୍ତୁ"</string>
     <string name="sending" msgid="206925243621664438">"ପଠାଯାଉଛି…"</string>
@@ -1618,7 +1624,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"ଟାବଲେଟ୍‌"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ଫୋନ"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ଡକ୍‌ ସ୍ପିକର୍‌"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ଡକ ସ୍ପିକର"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"ଏକ୍ସଟର୍ନଲ ଡିଭାଇସ"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"ହେଡଫୋନ୍‍"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1662,7 +1668,7 @@
     <string name="kg_login_instructions" msgid="3619844310339066827">"ଅନଲକ୍‌ କରିବା ପାଇଁ, ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ସହ ସାଇନ୍-ଇନ୍ କରନ୍ତୁ।"</string>
     <string name="kg_login_username_hint" msgid="1765453775467133251">"ୟୁଜରନେମ୍‍ (ଇମେଲ୍)"</string>
     <string name="kg_login_password_hint" msgid="3330530727273164402">"ପାସୱାର୍ଡ"</string>
-    <string name="kg_login_submit_button" msgid="893611277617096870">"ସାଇନ୍-ଇନ୍"</string>
+    <string name="kg_login_submit_button" msgid="893611277617096870">"ସାଇନ ଇନ କରନ୍ତୁ"</string>
     <string name="kg_login_invalid_input" msgid="8292367491901220210">"ଅମାନ୍ୟ ୟୁଜରନେମ୍‍ କିମ୍ୱା ପାସ୍‌ୱର୍ଡ।"</string>
     <string name="kg_login_account_recovery_hint" msgid="4892466171043541248">"ଆପଣଙ୍କର ୟୁଜରନେମ୍‍ କିମ୍ୱା ପାସ୍‌ୱର୍ଡ ଭୁଲି ଯାଇଛନ୍ତି କି?\n"<b>"google.com/accounts/recovery"</b>" ଭିଜିଟ୍‍ କରନ୍ତୁ।"</string>
     <string name="kg_login_checking_password" msgid="4676010303243317253">"ଆକାଉଣ୍ଟ ଯାଞ୍ଚ କରାଯାଉଛି…"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"କାଢ଼ି ଦିଅନ୍ତୁ"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"ମାତ୍ରା ବଢ଼ାଇ ସୁପାରିଶ ସ୍ତର ବଢ଼ାଉଛନ୍ତି? \n\n ଲମ୍ବା ସମୟ ପର୍ଯ୍ୟନ୍ତ ଉଚ୍ଚ ଶବ୍ଦରେ ଶୁଣିଲେ ଆପଣଙ୍କ ଶ୍ରବଣ ଶକ୍ତି ଖରାପ ହୋଇପାରେ।"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"ଚେତାବନୀ,\nହେଡଫୋନରେ ଗୋଟିଏ ସପ୍ତାହରେ ଜଣେ ସୁରକ୍ଷିତ ଭାବେ ଶୁଣିପାରୁଥିବା ଉଚ୍ଚ ସାଉଣ୍ଡ ସିଗନାଲର ପରିମାଣକୁ ଆପଣ ଅତିକ୍ରମ କରିଛନ୍ତି।\n\nଏହି ସୀମା ଅତିକ୍ରମ କରିବା ଫଳରେ ଆପଣଙ୍କ ଶ୍ରବଣଶକ୍ତି ସ୍ଥାୟୀ ଭାବେ ନଷ୍ଟ ହୋଇଯିବ।"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"ଚେତାବନୀ,\nହେଡଫୋନରେ ଗୋଟିଏ ସପ୍ତାହରେ ଜଣେ ସୁରକ୍ଷିତ ଭାବେ ଶୁଣିପାରୁଥିବା ଉଚ୍ଚ ସାଉଣ୍ଡ ସିଗନାଲର ପରିମାଣକୁ ଆପଣ 5 ଥର ଅତିକ୍ରମ କରିଛନ୍ତି।\n\nଆପଣଙ୍କ ଶ୍ରବଣଶକ୍ତିକୁ ସୁରକ୍ଷିତ ରଖିବା ପାଇଁ ଭଲ୍ୟୁମକୁ କମ କରିଦିଆଯାଇଛି।"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"ଆପଣ ଯେଉଁ ଲେଭେଲରେ ମିଡିଆ ଶୁଣୁଛନ୍ତି ତାହା ଦୀର୍ଘ ସମୟ ପାଇଁ ଜାରି ରହିଲେ ଶ୍ରବଣଶକ୍ତି ନଷ୍ଟ ହୋଇପାରେ।\n\nଦୀର୍ଘ ସମୟ ପାଇଁ ଏହି ଲେଭେଲରେ ପ୍ଲେ କରିବା ଜାରି ରଖିବା ଫଳରେ ଆପଣଙ୍କ ଶ୍ରବଣଶକ୍ତି ନଷ୍ଟ ହୋଇପାରେ।"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"ଚେତାବନୀ,\nବର୍ତ୍ତମାନ ଆପଣ ଏକ ଅସୁରକ୍ଷିତ ଲେଭେଲରେ ପ୍ଲେ ହେଉଥିବା ଉଚ୍ଚ ସାଉଣ୍ଡର ବିଷୟବସ୍ତୁ ଶୁଣୁଛନ୍ତି।\n\nଏହି ଉଚ୍ଚ ସାଉଣ୍ଡ ଶୁଣିବା ଜାରି ରଖିବା ଫଳରେ ଆପଣଙ୍କ ଶ୍ରବଣଶକ୍ତି ସ୍ଥାୟୀ ଭାବେ ନଷ୍ଟ ହୋଇଯିବ।"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"ଅଧିକ ଭଲ୍ୟୁମରେ ଶୁଣିବା ଜାରି ରଖିବେ?\n\nସୁପାରିଶ କରାଯାଇଥିବା ଅପେକ୍ଷା ଅଧିକ ସମୟ ପାଇଁ ହେଡଫୋନର ଭଲ୍ୟୁମ ଅଧିକ ଅଛି, ଯାହା ଆପଣଙ୍କ ଶ୍ରବଣ ଶକ୍ତିକୁ ନଷ୍ଟ କରିପାରିବ"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"ଉଚ୍ଚ ସାଉଣ୍ଡ ଚିହ୍ନଟ କରାଯାଇଛି\n\nହେଡଫୋନର ଭଲ୍ୟୁମ ସୁପାରିଶ କରାଯାଇଥିବା ଅପେକ୍ଷା ଅଧିକ ଅଛି, ଯାହା ଆପଣଙ୍କ ଶ୍ରବଣ ଶକ୍ତିକୁ ନଷ୍ଟ କରିପାରିବ"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ଆକ୍ସେସବିଲିଟି ଶର୍ଟକଟ୍‍ ବ୍ୟବହାର କରିବେ?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"ସର୍ଟକଟ୍ ଚାଲୁ ଥିବା ବେଳେ, ଉଭୟ ଭଲ୍ୟୁମ୍ ବଟନ୍ 3 ସେକେଣ୍ଡ ପାଇଁ ଦବାଇବା ଦ୍ୱାରା ଏକ ଆକ୍ସେସବିଲିଟି ଫିଚର୍ ଆରମ୍ଭ ହେବ।"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"ଆକ୍ସେସିବିଲିଟୀ ଫିଚରଗୁଡ଼ିକ ପାଇଁ ସର୍ଟକଟ୍ ଚାଲୁ କରିବେ?"</string>
@@ -1728,14 +1732,14 @@
     <string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"ଫିଚରଗୁଡ଼ିକ ମଧ୍ୟରେ ସ୍ୱିଚ୍ କରିବାକୁ, ତିନୋଟି ଆଙ୍ଗୁଠିରେ ଉପରକୁ ସ୍ୱାଇପ୍ କରି ଧରି ରଖନ୍ତୁ।"</string>
     <string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"ମ୍ୟାଗ୍ନିଫିକେସନ୍‍"</string>
     <string name="user_switched" msgid="7249833311585228097">"ବର୍ତ୍ତମାନର ୟୁଜର୍‌ ହେଉଛନ୍ତି <xliff:g id="NAME">%1$s</xliff:g>।"</string>
-    <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g>ରେ ସ୍ୱିଚ୍ କରନ୍ତୁ…"</string>
+    <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g>ରେ ସ୍ୱିଚ କରନ୍ତୁ…"</string>
     <string name="user_logging_out_message" msgid="7216437629179710359">"<xliff:g id="NAME">%1$s</xliff:g>ଙ୍କୁ ଲଗଆଉଟ୍‍ କରାଯାଉଛି…"</string>
     <string name="owner_name" msgid="8713560351570795743">"ମାଲିକ"</string>
     <string name="guest_name" msgid="8502103277839834324">"ଅତିଥି"</string>
     <string name="error_message_title" msgid="4082495589294631966">"ତ୍ରୁଟି"</string>
     <string name="error_message_change_not_allowed" msgid="843159705042381454">"ଏହି ପରିବର୍ତ୍ତନ ପାଇଁ ଆପଣଙ୍କ ଆଡମିନ୍‌ ଅନୁମତି ଦେଇନାହାଁନ୍ତି"</string>
     <string name="app_not_found" msgid="3429506115332341800">"ଏହି କାର୍ଯ୍ୟକୁ ନିୟନ୍ତ୍ରଣ କରିବା ପାଇଁ କୌଣସି ଆପ୍ଲିକେଶନ୍‍ ମିଳିଲା ନାହିଁ"</string>
-    <string name="revoke" msgid="5526857743819590458">"ବାହାର କରନ୍ତୁ"</string>
+    <string name="revoke" msgid="5526857743819590458">"କାଢ଼ି ଦିଅନ୍ତୁ"</string>
     <string name="mediasize_iso_a0" msgid="7039061159929977973">"ISO A0"</string>
     <string name="mediasize_iso_a1" msgid="4063589931031977223">"ISO A1"</string>
     <string name="mediasize_iso_a2" msgid="2779860175680233980">"ISO A2"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"ବାହାରିବା ପାଇଁ, ଉପରୁ ତଳକୁ ସ୍ୱାଇପ୍‍ କରନ୍ତୁ।"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"ବୁଝିଗଲି"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"ଏକ ଭଲ ଭ୍ୟୁ ପାଇଁ ରୋଟେଟ କରନ୍ତୁ"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"ଏକ ଭଲ ଭ୍ୟୁ ପାଇଁ ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନରୁ ବାହାରି ଯାଆନ୍ତୁ"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"ଏକ ଭଲ ଭ୍ୟୁ ପାଇଁ ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନରେ <xliff:g id="NAME">%s</xliff:g> ଖୋଲନ୍ତୁ"</string>
     <string name="done_label" msgid="7283767013231718521">"ହୋଇଗଲା"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"ଘଣ୍ଟା ସର୍କୁଲାର୍‍ ସ୍ଲାଇଡର୍‍"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"ମିନିଟ୍ସ ସର୍କୁଲାର୍‍ ସ୍ଲାଇଡର୍‍"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"ଆପ୍ ଉପଲବ୍ଧ ନାହିଁ"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ବର୍ତ୍ତମାନ ଉପଲବ୍ଧ ନାହିଁ।"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ଉପଲବ୍ଧ ନାହିଁ"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"ଅନୁମତି ଆବଶ୍ୟକ"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"ଅନୁମତି ଅନୁରୋଧକୁ ବନ୍ଦ କରାଯାଇଛି"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"ଏହି ଆପ ଅତିରିକ୍ତ ଅନୁମତି ପାଇଁ ଅନୁରୋଧ କରୁଛି, ଏକ ଷ୍ଟ୍ରିମିଂ ସେସନରେ ଅନୁମତି ଦିଆଯାଇପାରିବ ନାହିଁ। ପ୍ରଥମେ ଆପଣଙ୍କ Android TV ଡିଭାଇସରେ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"ଏହି ଆପ ଅତିରିକ୍ତ ଅନୁମତି ପାଇଁ ଅନୁରୋଧ କରୁଛି, ଏକ ଷ୍ଟ୍ରିମିଂ ସେସନରେ ଅନୁମତି ଦିଆଯାଇପାରିବ ନାହିଁ। ପ୍ରଥମେ ଆପଣଙ୍କ ଟାବଲେଟରେ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"ଏହି ଆପ ଅତିରିକ୍ତ ଅନୁମତି ପାଇଁ ଅନୁରୋଧ କରୁଛି, ଏକ ଷ୍ଟ୍ରିମିଂ ସେସନରେ ଅନୁମତି ଦିଆଯାଇପାରିବ ନାହିଁ। ପ୍ରଥମେ ଆପଣଙ୍କ ଫୋନରେ ଅନୁମତି ଦିଅନ୍ତୁ।"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"ଏହି ଆପକୁ Androidର ଏକ ପୁରୁଣା ସଂସ୍କରଣ ପାଇଁ ତିଆରି କରାଯାଇଛି। ଏହା ସଠିକ୍ ଭାବେ କାମ କରିନପାରେ ଏବଂ ଏଥିରେ ନବୀନତମ ସୁରକ୍ଷା ଏବଂ ଗୋପନୀୟତା ସୁରକ୍ଷାଗୁଡ଼ିକ ଅନ୍ତର୍ଭୁକ୍ତ ନାହିଁ। ଏକ ଅପଡେଟ ପାଇଁ ଯାଞ୍ଚ କରନ୍ତୁ କିମ୍ବା ଆପର ଡେଭେଲପରଙ୍କ ସହ କଣ୍ଟାକ୍ଟ କରନ୍ତୁ।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ଅପଡେଟ୍‌ ପାଇଁ ଯାଞ୍ଚ କରନ୍ତୁ"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"ଏହି ଆପ Androidର ନବୀନତମ ଭର୍ସନ ସହ କମ୍ପାଟିବଲ ନୁହେଁ। ଏକ ଅପଡେଟ ପାଇଁ ଯାଞ୍ଚ କରନ୍ତୁ କିମ୍ବା ଆପର ଡେଭେଲପରଙ୍କ ସହ କଣ୍ଟାକ୍ଟ କରନ୍ତୁ।"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ଆପଣଙ୍କ ପାଖରେ ନୂଆ ମେସେଜ୍‍ ରହିଛି"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"ଦେଖିବା ପାଇଁ SMS ଆପ୍‍ ଖୋଲନ୍ତୁ"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"ହୁଏତ କିଛି ପ୍ରକାର୍ଯ୍ୟ ସୀମିତ ହୋଇପାରେ"</string>
@@ -2079,7 +2087,7 @@
     <string name="review_notification_settings_dismiss" msgid="4160916504616428294">"ଖାରଜ କରନ୍ତୁ"</string>
     <string name="notification_app_name_system" msgid="3045196791746735601">"ସିଷ୍ଟମ"</string>
     <string name="notification_app_name_settings" msgid="9088548800899952531">"ସେଟିଂସ୍"</string>
-    <string name="notification_appops_camera_active" msgid="8177643089272352083">"କ୍ୟାମେରା"</string>
+    <string name="notification_appops_camera_active" msgid="8177643089272352083">"କେମେରା"</string>
     <string name="notification_appops_microphone_active" msgid="581333393214739332">"ମାଇକ୍ରୋଫୋନ"</string>
     <string name="notification_appops_overlay_active" msgid="5571732753262836481">"ଆପଣଙ୍କ ସ୍କ୍ରୀନ୍ ଉପରେ ଥିବା ଅନ୍ୟ ଆପ୍‌ ଉପରେ ଦେଖାଦେବ"</string>
     <string name="notification_feedback_indicator" msgid="663476517711323016">"ମତାମତ ଦିଅନ୍ତୁ"</string>
@@ -2094,7 +2102,7 @@
     <string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"ଅଧିକ ଜାଣନ୍ତୁ"</string>
     <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Android 12ରେ Android ଆଡେପ୍ଟିଭ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଉନ୍ନତ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକରେ ପରିବର୍ତ୍ତନ କରାଯାଇଛି। ଏହି ଫିଚର ପ୍ରସ୍ତାବିତ କାର୍ଯ୍ୟ ଏବଂ ପ୍ରତ୍ୟୁତ୍ତରଗୁଡ଼ିକୁ ଦେଖାଏ ଏବଂ ଆପଣଙ୍କ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ବ୍ୟବସ୍ଥିତ କରେ।\n\nଉନ୍ନତ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ କଣ୍ଟାକ୍ଟ ନାମ ଏବଂ ମେସେଜଗୁଡ଼ିକ ପରି ବ୍ୟକ୍ତିଗତ ସୂଚନା ସମେତ ବିଜ୍ଞପ୍ତିର ବିଷୟବସ୍ତୁକୁ ଆକ୍ସେସ କରିପାରିବ। ଏହି ଫିଚର ଫୋନ କଲଗୁଡ଼ିକର ଉତ୍ତର ଦେବା ଏବଂ \'ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\'କୁ ନିୟନ୍ତ୍ରଣ କରିବା ପରି, ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ମଧ୍ୟ ଖାରଜ କରିପାରିବ କିମ୍ବା ସେଗୁଡ଼ିକର ଉତ୍ତର ଦେଇପାରିବ।"</string>
     <string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"ନିୟମିତ ମୋଡ୍‍ ସୂଚନା ବିଜ୍ଞପ୍ତି"</string>
-    <string name="dynamic_mode_notification_title" msgid="1388718452788985481">"ବ୍ୟାଟେରୀ ସେଭର ଚାଲୁ କରାଯାଇଛି"</string>
+    <string name="dynamic_mode_notification_title" msgid="1388718452788985481">"ବେଟେରୀ ସେଭର ଚାଲୁ କରାଯାଇଛି"</string>
     <string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"ବ୍ୟାଟେରୀ ଲାଇଫ ବଢ଼ାଇବା ପାଇଁ ବ୍ୟାଟେରୀ ବ୍ୟବହାର କମ୍ କରିବା"</string>
     <string name="battery_saver_notification_channel_name" msgid="3918243458067916913">"ବ୍ୟାଟେରୀ ସେଭର୍"</string>
     <string name="battery_saver_off_notification_title" msgid="7637255960468032515">"ବ୍ୟାଟେରୀ ସେଭର୍ ବନ୍ଦ ଅଛି"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ଏହି ବିଷୟବସ୍ତୁ ୱାର୍କ ଆପଗୁଡ଼ିକରେ ଖୋଲାଯାଇପାରିବ ନାହିଁ"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ଏହି ବିଷୟବସ୍ତୁ ବ୍ୟକ୍ତିଗତ ଆପଗୁଡ଼ିକରେ ସେୟାର୍ କରାଯାଇପାରିବ ନାହିଁ"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ଏହି ବିଷୟବସ୍ତୁ ବ୍ୟକ୍ତିଗତ ଆପଗୁଡ଼ିକରେ ଖୋଲାଯାଇପାରିବ ନାହିଁ"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"ୱାର୍କ ପ୍ରୋଫାଇଲକୁ ବିରତ କରାଯାଇଛି"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"ଚାଲୁ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"ୱାର୍କ ଆପ୍ସକୁ ବିରତ କରାଯାଇଛି"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"ପୁଣି ଚାଲୁ କରନ୍ତୁ"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"କୌଣସି ୱାର୍କ ଆପ୍ ନାହିଁ"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"କୌଣସି ବ୍ୟକ୍ତିଗତ ଆପ୍ ନାହିଁ"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"ୱାର୍କ <xliff:g id="APP">%s</xliff:g>କୁ ଖୋଲିବେ?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"ବ୍ୟକ୍ତିଗତ <xliff:g id="APP">%s</xliff:g>ରେ ଖୋଲିବେ?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"ୱାର୍କ <xliff:g id="APP">%s</xliff:g>ରେ ଖୋଲିବେ?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"ୱାର୍କ ଆପରୁ କଲ କରିବେ?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"ୱାର୍କ ଆପକୁ ସୁଇଚ କରିବେ?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"ଆପଣଙ୍କ ସଂସ୍ଥା ଆପଣଙ୍କୁ କେବଳ ୱାର୍କ ଆପ୍ସରୁ କଲ କରିବାକୁ ଅନୁମତି ଦିଏ"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"ଆପଣଙ୍କ ସଂସ୍ଥା ଆପଣଙ୍କୁ କେବଳ ୱାର୍କ ଆପ୍ସରୁ ମେସେଜ ପଠାଇବା ପାଇଁ ଅନୁମତି ଦିଏ"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ବ୍ୟକ୍ତିଗତ ବ୍ରାଉଜର୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"ୱାର୍କ ବ୍ରାଉଜର୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"କଲ କରନ୍ତୁ"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"ସୁଇଚ କରନ୍ତୁ"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ନେଟୱାର୍କ ଅନଲକ୍ PIN"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM ନେଟୱାର୍କର ସବସେଟ୍ ଅନଲକ୍ PIN"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM କର୍ପୋରେଟ୍ ଅନଲକ୍ PIN"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"ଆପଣଙ୍କ <xliff:g id="DEVICE">%1$s</xliff:g>ରୁ ଫୋନର କ୍ୟାମେରାକୁ ଆକ୍ସେସ କରାଯାଇପାରିବ ନାହିଁ"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"ଆପଣଙ୍କ <xliff:g id="DEVICE">%1$s</xliff:g>ରୁ ଟାବଲେଟର କ୍ୟାମେରାକୁ ଆକ୍ସେସ କରାଯାଇପାରିବ ନାହିଁ"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"ଷ୍ଟ୍ରିମ କରିବା ସମୟରେ ଏହାକୁ ଆକ୍ସେସ କରାଯାଇପାରିବ ନାହିଁ। ଏହା ପରିବର୍ତ୍ତେ ଆପଣଙ୍କ ଫୋନରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"ଷ୍ଟ୍ରିମ କରିବା ସମୟରେ ପିକଚର-ଇନ-ପିକଚର ଦେଖାଯାଇପାରିବ ନାହିଁ"</string>
     <string name="system_locale_title" msgid="711882686834677268">"ସିଷ୍ଟମ ଡିଫଲ୍ଟ"</string>
     <string name="default_card_name" msgid="9198284935962911468">"କାର୍ଡ <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"ୱାଚଗୁଡ଼ିକୁ ପରିଚାଳନା କରିବା ପାଇଁ ସହଯୋଗୀ ୱାଚ ପ୍ରୋଫାଇଲ ଅନୁମତି"</string>
@@ -2317,13 +2331,13 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"ପୃଷ୍ଠପଟରୁ ଫୋରଗ୍ରାଉଣ୍ଡ ସେବାଗୁଡ଼ିକ ଆରମ୍ଭ କରିବାକୁ ଏକ ସହଯୋଗୀ ଆପକୁ ଅନୁମତି ଦିଏ।"</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"ମାଇକ୍ରୋଫୋନ ଉପଲବ୍ଧ ଅଛି"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"ମାଇକ୍ରୋଫୋନକୁ ବ୍ଲକ କରାଯାଇଛି"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"ଡୁଆଲ ସ୍କ୍ରିନ"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"ଡୁଆଲ ସ୍କ୍ରିନ ଚାଲୁ ଅଛି"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen ଚାଲୁ ଅଛି"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"ବିଷୟବସ୍ତୁ ଦେଖାଇବା ପାଇଁ <xliff:g id="APP_NAME">%1$s</xliff:g> ଉଭୟ ଡିସପ୍ଲେକୁ ବ୍ୟବହାର କରୁଛି"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"ଡିଭାଇସ ବହୁତ ଗରମ ଅଛି"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"ଆପଣଙ୍କ ଫୋନ ବହୁତ ଗରମ ହେଉଥିବା ଯୋଗୁଁ ଡୁଆଲ ସ୍କ୍ରିନ ଉପଲବ୍ଧ ନାହିଁ"</string>
-    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"ଡୁଆଲ ସ୍କ୍ରିନ ଉପଲବ୍ଧ ନାହିଁ"</string>
-    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"ବେଟେରୀ ସେଭର ଚାଲୁ ଥିବା ଯୋଗୁଁ ଡୁଆଲ ସ୍କ୍ରିନ ଉପଲବ୍ଧ ନାହିଁ। ଆପଣ ସେଟିଂସରେ ଏହାକୁ ବନ୍ଦ କରିପାରିବେ।"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"ଆପଣଙ୍କ ଫୋନ ବହୁତ ଗରମ ହେଉଥିବା ଯୋଗୁଁ Dual Screen ଉପଲବ୍ଧ ନାହିଁ"</string>
+    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen ଉପଲବ୍ଧ ନାହିଁ"</string>
+    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"ବେଟେରୀ ସେଭର ଚାଲୁ ଥିବା ଯୋଗୁଁ Dual Screen ଉପଲବ୍ଧ ନାହିଁ। ଆପଣ ସେଟିଂସରେ ଏହାକୁ ବନ୍ଦ କରିପାରିବେ।"</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"ସେଟିଂସକୁ ଯାଆନ୍ତୁ"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"ବନ୍ଦ କରନ୍ତୁ"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g>କୁ କନଫିଗର କରାଯାଇଛି"</string>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index 06ef6ca..c287bf6 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -191,7 +191,7 @@
     <string name="network_logging_notification_title" msgid="554983187553845004">"ਡੀਵਾਈਸ ਪ੍ਰਬੰਧਨ ਅਧੀਨ ਹੈ"</string>
     <string name="network_logging_notification_text" msgid="1327373071132562512">"ਤੁਹਾਡਾ ਸੰਗਠਨ ਇਸ ਡੀਵਾਈਸ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਦਾ ਹੈ ਅਤੇ ਨੈੱਟਵਰਕ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦਾ ਹੈ। ਵੇਰਵਿਆਂ ਲਈ ਟੈਪ ਕਰੋ।"</string>
     <string name="location_changed_notification_title" msgid="3620158742816699316">"ਐਪਾਂ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਕਰ ਸਕਦੀਆਂ ਹਨ"</string>
-    <string name="location_changed_notification_text" msgid="7158423339982706912">"ਹੋਰ ਜਾਣਨ ਲਈ ਆਪਣੇ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ"</string>
+    <string name="location_changed_notification_text" msgid="7158423339982706912">"ਹੋਰ ਜਾਣਨ ਲਈ ਆਪਣੇ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ"</string>
     <string name="geofencing_service" msgid="3826902410740315456">"ਭੂਗੋਲਿਕ-ਘੇਰੇ ਸੰਬੰਧੀ ਸੇਵਾ"</string>
     <string name="country_detector" msgid="7023275114706088854">"ਦੇਸ਼ ਦਾ ਪਤਾ ਲਗਾਉਣ ਦੀ ਸੁਵਿਧਾ"</string>
     <string name="location_service" msgid="2439187616018455546">"ਟਿਕਾਣਾ ਸੇਵਾ"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android ਸਿਸਟਮ"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"ਨਿੱਜੀ ਪ੍ਰੋਫਾਈਲ ਵਰਤੋ"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਵਰਤੋ"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਦੇ ਨਿੱਜੀ ਪ੍ਰੋਫਾਈਲ \'ਤੇ ਜਾਓ"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਦੇ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ \'ਤੇ ਜਾਓ"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"ਸੰਪਰਕ"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"ਆਪਣੇ ਸੰਪਰਕਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"ਟਿਕਾਣਾ"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"ਐਪ ਨੂੰ ਵਾਈਬ੍ਰੇਟਰ ਤੇ ਨਿਯੰਤਰਣ ਪਾਉਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ਐਪ ਨੂੰ ਥਰਥਰਾਹਟ ਸਥਿਤੀ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦਿੰਦਾ ਹੈ।"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"ਫ਼ੋਨ ਨੰਬਰਾਂ ਤੇ ਸਿੱਧੇ ਕਾਲ ਕਰੋ"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"ਐਪ ਨੂੰ ਤੁਹਾਡੇ ਦਖਲ ਤੋਂ ਬਿਨਾਂ ਫ਼ੋਨ ਨੰਬਰਾਂ ਤੇ ਕਾਲ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਇਸਦੇ ਸਿੱਟੇ ਵਜੋਂ ਅਕਲਪਿਤ ਖਰਚੇ ਜਾਂ ਕਾਲਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਧਿਆਨ ਦਿਓ ਕਿ ਇਹ ਐਪ ਨੂੰ ਸੰਕਟਕਾਲੀਨ ਨੰਬਰਾਂ ਤੇ ਕਾਲ ਕਰਨ ਦੀ ਆਗਿਆ ਨਹੀਂ ਦਿੰਦਾ। ਖਰਾਬ ਐਪਾਂ ਤੁਹਾਡੀ ਪੁਸ਼ਟੀ ਤੋਂ ਬਿਨਾਂ ਕਾਲਾਂ ਕਰਕੇ ਤੁਹਾਨੂੰ ਖਰਚੇ ਪਾ ਸਕਦੀਆਂ ਹਨ।"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"ਐਪ ਨੂੰ ਤੁਹਾਡੇ ਦਖਲ ਤੋਂ ਬਿਨਾਂ ਫ਼ੋਨ ਨੰਬਰਾਂ \'ਤੇ ਕਾਲ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ। ਇਸਦੇ ਨਤੀਜੇ ਵਜੋਂ ਅਣਕਿਆਸੇ ਖਰਚੇ ਜਾਂ ਕਾਲਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਨੋਟ ਕਰੋ ਕਿ ਇਹ ਐਪ ਨੂੰ ਐਮਰਜੈਂਸੀ ਨੰਬਰਾਂ \'ਤੇ ਕਾਲ ਕਰਨ ਦੀ ਆਗਿਆ ਨਹੀਂ ਦਿੰਦੀ। ਨੁਕਸਾਨਦੇਹ ਐਪਾਂ ਤੁਹਾਡੀ ਤਸਦੀਕ ਤੋਂ ਬਿਨਾਂ ਕਾਲਾਂ ਕਰ ਕੇ, ਜਾਂ ਕੈਰੀਅਰ ਕੋਡ ਡਾਇਲ ਕਰ ਕੇ ਤੁਹਾਨੂੰ ਖਰਚੇ ਪਾ ਸਕਦੀਆਂ ਹਨ ਜਿਸ ਕਾਰਨ ਇਨਕਮਿੰਗ ਕਾਲਾਂ ਆਪਣੇ ਆਪ ਕਿਸੇ ਹੋਰ ਨੰਬਰ \'ਤੇ ਭੇਜੀਆਂ ਜਾਂਦੀਆਂ ਹਨ।"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS ਕਾਲ ਸੇਵਾ ਤੱਕ ਪਹੁੰਚ"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"ਐਪ ਨੂੰ ਤੁਹਾਡੇ ਦਖ਼ਲ ਤੋਂ ਬਿਨਾਂ ਕਾਲਾਂ ਕਰਨ ਲਈ IMS ਸੇਵਾ ਵਰਤਣ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ।"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ਫ਼ੋਨ ਸਥਿਤੀ ਅਤੇ ਪਛਾਣ ਪੜ੍ਹੋ"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"ਐਪ ਨੂੰ ਤਰਜੀਹੀ NFC ਭੁਗਤਾਨਸ਼ੁਦਾ ਸੇਵਾ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰਨ ਦਿੰਦਾ ਹੈ ਜਿਵੇਂ ਕਿ ਰਜਿਸਟਰ ਕੀਤੇ ਸਾਧਨ ਅਤੇ ਮੰਜ਼ਿਲ ਰਸਤਾ।"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"ਨਜ਼ਦੀਕੀ ਖੇਤਰ ਸੰਚਾਰ ਤੇ ਨਿਯੰਤਰਣ ਪਾਓ"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"ਐਪ ਨੂੰ ਨਜ਼ਦੀਕੀ ਖੇਤਰ ਸੰਚਾਰ (NFC) ਟੈਗਾਂ, ਕਾਰਡਾਂ ਅਤੇ ਰੀਡਰਾਂ ਨਾਲ ਸੰਚਾਰ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"ਸੁਰੱਖਿਅਤ ਅੰਸ਼ ਦੇ ਲੈਣ-ਦੇਣ ਸੰਬੰਧੀ ਇਵੈਂਟ"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"ਐਪ ਨੂੰ ਸੁਰੱਖਿਅਤ ਅੰਸ਼ \'ਤੇ ਹੋਣ ਵਾਲੇ ਲੈਣ-ਦੇਣ ਬਾਰੇ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"ਆਪਣਾ ਸਕ੍ਰੀਨ  ਲਾਕ  ਅਸਮਰੱਥ ਬਣਾਓ"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"ਐਪ ਨੂੰ ਕੀਲਾਕ ਅਤੇ ਕਿਸੇ ਵੀ ਸੰਬੰਧਿਤ ਪਾਸਵਰਡ ਸੁਰੱਖਿਆ ਨੂੰ ਬੰਦ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਫ਼ੋਨ ਇੱਕ ਇਨਕਮਿੰਗ ਫ਼ੋਨ ਕਾਲ ਪ੍ਰਾਪਤ ਕਰਨ ਵੇਲੇ ਬੰਦ ਕਰਦਾ ਹੈ, ਫਿਰ ਜਦੋਂ ਕਾਲ ਖਤਮ ਹੁੰਦੀ ਹੈ ਤਾਂ ਕੀਲਾਕ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰਦਾ ਹੈ।"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"ਸਕ੍ਰੀਨ ਲਾਕ ਦੀ ਜਟਿਲਤਾ ਲਈ ਬੇਨਤੀ ਕਰੋ"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ਬਾਇਓਮੈਟ੍ਰਿਕ ਜਾਂ ਸਕ੍ਰੀਨ ਲਾਕ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"ਆਪਣੀ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"ਜਾਰੀ ਰੱਖਣ ਲਈ ਆਪਣੇ ਬਾਇਓਮੈਟ੍ਰਿਕ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"ਜਾਰੀ ਰੱਖਣ ਲਈ ਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"ਜਾਰੀ ਰੱਖਣ ਲਈ ਆਪਣੇ ਚਿਹਰੇ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"ਜਾਰੀ ਰੱਖਣ ਲਈ ਆਪਣਾ ਬਾਇਓਮੈਟ੍ਰਿਕ ਜਾਂ ਸਕ੍ਰੀਨ ਲਾਕ ਵਰਤੋ"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"ਬਾਇਓਮੈਟ੍ਰਿਕ ਹਾਰਡਵੇਅਰ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"ਪ੍ਰਮਾਣੀਕਰਨ ਰੱਦ ਕੀਤਾ ਗਿਆ"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"ਪਛਾਣ ਨਹੀਂ ਹੋਈ"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"ਚਿਹਰੇ ਦੀ ਪਛਾਣ ਨਹੀਂ ਹੋਈ"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"ਪ੍ਰਮਾਣੀਕਰਨ ਰੱਦ ਕੀਤਾ ਗਿਆ"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"ਕੋਈ ਪਿੰਨ, ਪੈਟਰਨ ਜਾਂ ਪਾਸਵਰਡ ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ ਗਿਆ"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"ਗੜਬੜ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
@@ -633,7 +640,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"ਬਹੁਤ ਜ਼ਿਆਦਾ ਚਮਕ"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"ਪਾਵਰ ਬਟਨ ਦਬਾਏ ਜਾਣ ਦਾ ਪਤਾ ਲੱਗਿਆ ਹੈ"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"ਵਿਵਸਥਿਤ ਕਰਕੇ ਦੇਖੋ"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ਹਰ ਵਾਰ ਆਪਣੀ ਉਂਗਲ ਨੂੰ ਥੋੜ੍ਹਾ ਹਿਲਾਓ"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ਹਰ ਵਾਰ ਆਪਣੀ ਉਂਗਲ ਦੀ ਸਥਿਤੀ ਨੂੰ ਥੋੜਾ ਜਿਹਾ ਬਦਲੋ"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਪਛਾਣ ਨਹੀਂ ਹੋਈ"</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ਚਿਹਰਾ ਢੱਕਿਆ ਹੋਇਆ ਹੈ। ਤੁਹਾਡਾ ਪੂਰਾ ਚਿਹਰਾ ਦਿਸਣਾ ਚਾਹੀਦਾ ਹੈ।"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"ਚਿਹਰੇ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਹੋ ਸਕੀ। ਹਾਰਡਵੇਅਰ ਉਪਲਬਧ ਨਹੀਂ।"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"ਚਿਹਰਾ ਪਛਾਣਨ ਦੀ ਪ੍ਰਕਿਰਿਆ ਰੱਦ ਕੀਤੀ ਗਈ।"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"ਵਰਤੋਂਕਾਰ ਨੇ ਫ਼ੇਸ ਅਣਲਾਕ ਰੱਦ ਕੀਤਾ"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"ਹੱਦੋਂ ਵੱਧ ਕੋਸ਼ਿਸ਼ਾਂ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ। ਫ਼ੇਸ ਅਣਲਾਕ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ। ਇਸਦੀ ਬਜਾਏ ਸਕ੍ਰੀਨ ਲਾਕ ਦਾਖਲ ਕਰੋ।"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ਚਿਹਰੇ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"ਤੁਸੀਂ ਫ਼ੇਸ ਅਣਲਾਕ ਦਾ ਸੈੱਟਅੱਪ ਨਹੀਂ ਕੀਤਾ ਹੈ।"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ਅਸਵੀਕਾਰ ਕਰੋ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"ਇਨਪੁਟ ਵਿਧੀ ਚੁਣੋ"</string>
     <string name="show_ime" msgid="6406112007347443383">"ਭੌਤਿਕ ਕੀ-ਬੋਰਡ ਸਰਗਰਮ ਹੋਣ ਦੌਰਾਨ ਇਸ ਨੂੰ ਸਕ੍ਰੀਨ \'ਤੇ ਬਣਾਈ ਰੱਖੋ"</string>
-    <string name="hardware" msgid="1800597768237606953">"ਆਭਾਸੀ ਕੀ-ਬੋਰਡ ਦਿਖਾਓ"</string>
+    <string name="hardware" msgid="3611039921284836033">"ਆਨ-ਸਕ੍ਰੀਨ ਕੀ-ਬੋਰਡ ਨੂੰ ਵਰਤੋ"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> ਦਾ ਸੰਰੂਪਣ ਕਰੋ"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"ਭੌਤਿਕ ਕੀ-ਬੋਰਡਾਂ ਦਾ ਸੰਰੂਪਣ ਕਰੋ"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"ਭਾਸ਼ਾ ਅਤੇ ਖਾਕਾ ਚੁਣਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
@@ -1618,7 +1624,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"ਟੈਬਲੈੱਟ"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"ਫ਼ੋਨ ਕਰੋ"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ਡੌਕ ਸਪੀਕਰਸ"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"ਡੌਕ ਸਪੀਕਰ"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"ਬਾਹਰੀ ਡੀਵਾਈਸ"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"ਹੈੱਡਫ਼ੋਨ"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1632,7 +1638,7 @@
     <string name="media_route_chooser_extended_settings" msgid="2506352159381327741">"ਸੈਟਿੰਗਾਂ"</string>
     <string name="media_route_controller_disconnect" msgid="7362617572732576959">"ਡਿਸਕਨੈਕਟ ਕਰੋ"</string>
     <string name="media_route_status_scanning" msgid="8045156315309594482">"ਸਕੈਨ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."</string>
-    <string name="media_route_status_connecting" msgid="5845597961412010540">"ਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ..."</string>
+    <string name="media_route_status_connecting" msgid="5845597961412010540">"ਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."</string>
     <string name="media_route_status_available" msgid="1477537663492007608">"ਉਪਲਬਧ"</string>
     <string name="media_route_status_not_available" msgid="480912417977515261">"ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
     <string name="media_route_status_in_use" msgid="6684112905244944724">"ਵਰਤੋਂ ਵਿੱਚ"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"ਹਟਾਓ"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"ਕੀ ਵੌਲਿਊਮ  ਸਿਫ਼ਾਰਸ਼  ਕੀਤੇ ਪੱਧਰ ਤੋਂ ਵਧਾਉਣੀ ਹੈ?\n\nਲੰਮੇ ਸਮੇਂ ਤੱਕ ਉੱਚ ਵੌਲਿਊਮ ਤੇ ਸੁਣਨ ਨਾਲ ਤੁਹਾਡੀ ਸੁਣਨ ਸ਼ਕਤੀ ਨੂੰ ਨੁਕਸਾਨ ਪਹੁੰਚ ਸਕਦਾ ਹੈ।"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"ਚਿਤਾਵਨੀ,\nਤੁਸੀਂ ਉੱਚੀ ਧੁਨੀ ਦੇ ਸਿਗਨਲਾਂ ਦੀ ਮਾਤਰਾ ਨੂੰ ਪਾਰ ਕਰ ਚੁੱਕੇ ਹੋ ਜਿਸਨੂੰ ਕੋਈ ਵਿਅਕਤੀ ਹਫ਼ਤੇ ਵਿੱਚ ਹੈੱਡਫ਼ੋਨਾਂ \'ਤੇ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਸੁਣ ਸਕਦਾ ਹੈ।\n\nਇਸ ਸੀਮਾ ਨੂੰ ਪਾਰ ਕਰਨ ਨਾਲ ਤੁਹਾਡੀ ਸੁਣਨ ਸ਼ਕਤੀ ਨੂੰ ਪੱਕੇ ਤੌਰ \'ਤੇ ਨੁਕਸਾਨ ਹੋ ਜਾਵੇਗਾ।"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"ਚਿਤਾਵਨੀ,\nਤੁਸੀਂ ਉੱਚੀ ਧੁਨੀ ਦੇ ਸਿਗਨਲਾਂ ਦੀ ਮਾਤਰਾ ਤੋਂ 5 ਗੁਣਾ ਪਾਰ ਕਰ ਚੁੱਕੇ ਹੋ ਜਿਸਨੂੰ ਕੋਈ ਵਿਅਕਤੀ ਹਫ਼ਤੇ ਵਿੱਚ ਹੈੱਡਫ਼ੋਨਾਂ \'ਤੇ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਸੁਣ ਸਕਦਾ ਹੈ।\n\nਤੁਹਾਡੀ ਸੁਣਨ ਸ਼ਕਤੀ ਦੀ ਸੁਰੱਖਿਆ ਕਰਨ ਲਈ ਆਵਾਜ਼ ਨੂੰ ਘਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"ਜਿਸ ਪੱਧਰ \'ਤੇ ਤੁਸੀਂ ਮੀਡੀਆ ਨੂੰ ਸੁਣ ਰਹੇ ਹੋ, ਤਾਂ ਉਸ ਨੂੰ ਲੰਬੇ ਸਮੇਂ ਤੱਕ ਸੁਣਨ ਦੇ ਨਤੀਜੇ ਵਜੋਂ ਸੁਣਨ ਸ਼ਕਤੀ ਨੂੰ ਨੁਕਸਾਨ ਹੋ ਸਕਦਾ ਹੈ।\n\nਲੰਬੇ ਸਮੇਂ ਤੱਕ ਇਸ ਪੱਧਰ \'ਤੇ ਚਲਾਉਣਾ ਜਾਰੀ ਰੱਖਣ ਨਾਲ ਤੁਹਾਡੀ ਸੁਣਨ ਸ਼ਕਤੀ ਨੂੰ ਨੁਕਸਾਨ ਹੋ ਸਕਦਾ ਹੈ।"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"ਚਿਤਾਵਨੀ,\nਤੁਸੀਂ ਫ਼ਿਲਹਾਲ ਅਸੁਰੱਖਿਅਤ ਪੱਧਰ \'ਤੇ ਚੱਲ ਰਹੀ ਉੱਚੀ ਆਵਾਜ਼ ਵਿੱਚ ਸਮੱਗਰੀ ਨੂੰ ਸੁਣ ਰਹੇ ਹੋ।\n\nਇਸ ਉੱਚੀ ਆਵਾਜ਼ ਨੂੰ ਸੁਣਨਾ ਜਾਰੀ ਰੱਖਣ ਨਾਲ ਤੁਹਾਡੇ ਸੁਣਨ ਸ਼ਕਤੀ ਨੂੰ ਪੱਕੇ ਤੌਰ \'ਤੇ ਨੁਕਸਾਨ ਹੋ ਸਕਦਾ ਹੈ।"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"ਕੀ ਉੱਚੀ ਅਵਾਜ਼ ਵਿੱਚ ਸੁਣਨਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?\n\nਹੈੱਡਫ਼ੋਨ ਦੀ ਅਵਾਜ਼ ਸਿਫ਼ਾਰਸ਼ੀ ਸਮੇਂ ਨਾਲੋਂ ਜ਼ਿਆਦਾ ਦੇਰ ਤੱਕ ਉੱਚੀ ਰੱਖੀ ਗਈ, ਜਿਸ ਨਾਲ ਤੁਹਾਡੀ ਸੁਣਨ ਸ਼ਕਤੀ ਨੂੰ ਨੁਕਸਾਨ ਪਹੁੰਚ ਸਕਦਾ ਹੈ"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"ਉੱਚੀ ਧੁਨੀ ਦਾ ਪਤਾ ਲੱਗਾ\n\nਹੈੱਡਫ਼ੋਨ ਦੀ ਅਵਾਜ਼ ਨੂੰ ਸਿਫ਼ਾਰਸ਼ੀ ਪੱਧਰ ਨਾਲੋਂ ਜ਼ਿਆਦਾ ਦੇਰ ਤੱਕ ਉੱਚੀ ਰੱਖਿਆ ਗਿਆ, ਜਿਸ ਨਾਲ ਤੁਹਾਡੀ ਸੁਣਨ ਸ਼ਕਤੀ ਨੂੰ ਨੁਕਸਾਨ ਪਹੁੰਚ ਸਕਦਾ ਹੈ"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ਕੀ ਪਹੁੰਚਯੋਗਤਾ ਸ਼ਾਰਟਕੱਟ ਵਰਤਣਾ ਹੈ?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"ਸ਼ਾਰਟਕੱਟ ਚਾਲੂ ਹੋਣ \'ਤੇ, ਕਿਸੇ ਪਹੁੰਚਯੋਗਤਾ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਦੋਵੇਂ ਅਵਾਜ਼ ਬਟਨਾਂ ਨੂੰ 3 ਸਕਿੰਟ ਲਈ ਦਬਾ ਕੇ ਰੱਖੋ।"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"ਕੀ ਪਹੁੰਚਯੋਗਤਾ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਲਈ ਸ਼ਾਰਟਕੱਟ ਚਾਲੂ ਕਰਨਾ ਹੈ?"</string>
@@ -1728,7 +1732,7 @@
     <string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਵਿਚਾਲੇ ਅਦਲਾ-ਬਦਲੀ ਕਰਨ ਲਈ, ਤਿੰਨ ਉਂਗਲਾਂ ਨਾਲ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰਕੇ ਦਬਾਈ ਰੱਖੋ।"</string>
     <string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"ਵੱਡਦਰਸ਼ੀਕਰਨ"</string>
     <string name="user_switched" msgid="7249833311585228097">"ਮੌਜੂਦਾ ਉਪਭੋਗਤਾ <xliff:g id="NAME">%1$s</xliff:g>।"</string>
-    <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g> \'ਤੇ ਸਵਿਚ ਕਰ ਰਿਹਾ ਹੈ…"</string>
+    <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g> \'ਤੇ ਸਵਿੱਚ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
     <string name="user_logging_out_message" msgid="7216437629179710359">"<xliff:g id="NAME">%1$s</xliff:g> ਨੂੰ ਲਾਗ-ਆਉਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ …"</string>
     <string name="owner_name" msgid="8713560351570795743">"ਮਾਲਕ"</string>
     <string name="guest_name" msgid="8502103277839834324">"ਮਹਿਮਾਨ"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"ਬਾਹਰ ਜਾਣ ਲਈ, ਉਪਰੋਂ ਹੇਠਾਂ ਸਵਾਈਪ ਕਰੋ।"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"ਸਮਝ ਲਿਆ"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"ਬਿਹਤਰ ਦ੍ਰਿਸ਼ ਅਨੁਭਵ ਲਈ ਘੁਮਾਓ"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"ਬਿਹਤਰ ਦ੍ਰਿਸ਼ ਅਨੁਭਵ ਲਈ ਸਪਲਿਟ ਸਕ੍ਰੀਨ ਤੋਂ ਬਾਹਰ ਆਓ"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"ਬਿਹਤਰ ਦ੍ਰਿਸ਼ ਅਨੁਭਵ ਲਈ <xliff:g id="NAME">%s</xliff:g> ਨੂੰ ਪੂਰੀ-ਸਕ੍ਰੀਨ ਵਿੱਚ ਖੋਲ੍ਹੋ"</string>
     <string name="done_label" msgid="7283767013231718521">"ਹੋ ਗਿਆ"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"ਘੰਟੇ ਸਰਕੁਲਰ ਸਲਾਈਡਰ"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"ਮਿੰਟ ਸਰਕੁਲਰ ਸਲਾਈਡਰ"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"ਐਪ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਐਪ ਇਸ ਵੇਲੇ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਹੈ"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"ਇਜਾਜ਼ਤ ਸੰਬੰਧੀ ਬੇਨਤੀ ਨੂੰ ਰੋਕਿਆ ਗਿਆ"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"ਇਹ ਐਪ ਵਧੀਕ ਇਜਾਜ਼ਤਾਂ ਦੀ ਬੇਨਤੀ ਕਰ ਰਹੀ ਹੈ, ਪਰ ਸਟ੍ਰੀਮਿੰਗ ਸੈਸ਼ਨ ਵਿੱਚ ਇਜਾਜ਼ਤਾਂ ਨਹੀਂ ਦਿੱਤੀਆਂ ਜਾ ਸਕਦੀਆਂ। ਪਹਿਲਾਂ ਆਪਣੇ Android TV ਡੀਵਾਈਸ \'ਤੇ ਇਜਾਜ਼ਤ ਦਿਓ।"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"ਇਹ ਐਪ ਵਧੀਕ ਇਜਾਜ਼ਤਾਂ ਦੀ ਬੇਨਤੀ ਕਰ ਰਹੀ ਹੈ, ਪਰ ਸਟ੍ਰੀਮਿੰਗ ਸੈਸ਼ਨ ਵਿੱਚ ਇਜਾਜ਼ਤਾਂ ਨਹੀਂ ਦਿੱਤੀਆਂ ਜਾ ਸਕਦੀਆਂ। ਪਹਿਲਾਂ ਆਪਣੇ ਟੈਬਲੈੱਟ \'ਤੇ ਇਜਾਜ਼ਤ ਦਿਓ।"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"ਇਹ ਐਪ ਵਧੀਕ ਇਜਾਜ਼ਤਾਂ ਦੀ ਬੇਨਤੀ ਕਰ ਰਹੀ ਹੈ, ਪਰ ਸਟ੍ਰੀਮਿੰਗ ਸੈਸ਼ਨ ਵਿੱਚ ਇਜਾਜ਼ਤਾਂ ਨਹੀਂ ਦਿੱਤੀਆਂ ਜਾ ਸਕਦੀਆਂ। ਪਹਿਲਾਂ ਆਪਣੇ ਫ਼ੋਨ \'ਤੇ ਇਜਾਜ਼ਤ ਦਿਓ।"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"ਇਹ ਐਪ Android ਦੇ ਕਿਸੇ ਪੁਰਾਣੇ ਵਰਜਨ ਲਈ ਬਣਾਈ ਗਿਆ ਸੀ। ਸ਼ਾਇਦ ਇਹ ਠੀਕ ਢੰਗ ਨਾਲ ਕੰਮ ਨਾ ਕਰੇ ਅਤੇ ਨਵੀਨਤਮ ਸੁਰੱਖਿਆ ਅਤੇ ਪਰਦੇਦਾਰੀ ਸੰਬੰਧੀ ਸੁਰੱਖਿਆਵਾਂ ਸ਼ਾਮਲ ਨਾ ਹੋਣ। ਅੱਪਡੇਟ ਲਈ ਜਾਂਚ ਕਰੋ ਜਾਂ ਐਪ ਦੇ ਵਿਕਾਸਕਾਰ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ਅੱਪਡੇਟ ਲਈ ਜਾਂਚ ਕਰੋ"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"ਇਹ ਐਪ Android ਦੇ ਨਵੀਨਤਮ ਵਰਜਨ ਦੇ ਅਨੁਰੂਪ ਨਹੀਂ ਹੈ। ਅੱਪਡੇਟ ਲਈ ਜਾਂਚ ਕਰੋ ਜਾਂ ਐਪ ਦੇ ਵਿਕਾਸਕਾਰ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ਤੁਹਾਨੂੰ ਨਵੇਂ ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਹੋਏ ਹਨ"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"ਦੇਖਣ ਲਈ SMS ਐਪ ਖੋਲ੍ਹੋ"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"ਕੁਝ ਪ੍ਰਕਾਰਜਾਤਮਕਤਾ ਸੀਮਤ ਹੋ ਸਕਦੀ ਹੈ"</string>
@@ -2092,7 +2100,7 @@
     <string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"ਠੀਕ ਹੈ"</string>
     <string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"ਬੰਦ ਕਰੋ"</string>
     <string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"ਹੋਰ ਜਾਣੋ"</string>
-    <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Android 12 ਵਿੱਚ ਵਿਸਤ੍ਰਿਤ ਸੂਚਨਾਵਾਂ ਨੇ Android ਅਡੈਪਟਿਵ ਸੂਚਨਾਵਾਂ ਦੀ ਜਗ੍ਹਾ ਲੈ ਲਈ ਹੈ। ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਕਾਰਵਾਈਆਂ ਅਤੇ ਜਵਾਬਾਂ ਵਾਲੇ ਸੁਝਾਅ ਦਿਖਾਉਂਦੀ ਹੈ ਅਤੇ ਤੁਹਾਡੀਆਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਵਿਵਸਥਿਤ ਕਰਦੀ ਹੈ।\n\nਵਿਸਤ੍ਰਿਤ ਸੂਚਨਾਵਾਂ ਸੂਚਨਾ ਸਮੱਗਰੀ ਤੱਕ ਪਹੁੰਚ ਕਰ ਸਕਦੀਆਂ ਹਨ, ਜਿਸ ਵਿੱਚ ਸੰਪਰਕ ਦੇ ਨਾਮ ਅਤੇ ਸੁਨੇਹੇ ਵਰਗੀ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਵੀ ਸ਼ਾਮਲ ਹੈ। ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਸੂਚਨਾਵਾਂ ਨੂੰ ਖਾਰਜ ਵੀ ਕਰ ਸਕਦੀ ਹੈ ਜਾਂ ਸੂਚਨਾਵਾਂ ਦਾ ਜਵਾਬ ਵੀ ਦੇ ਸਕਦੀ ਹੈ, ਜਿਵੇਂ ਕਿ ਫ਼ੋਨ ਕਾਲਾਂ ਦਾ ਜਵਾਬ ਦੇਣਾ ਅਤੇ \'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਨੂੰ ਕੰਟਰੋਲ ਕਰਨਾ।"</string>
+    <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Android 12 ਵਿੱਚ ਵਿਸਤ੍ਰਿਤ ਸੂਚਨਾਵਾਂ ਨੇ Android ਅਡੈਪਟਿਵ ਸੂਚਨਾਵਾਂ ਦੀ ਜਗ੍ਹਾ ਲੈ ਲਈ ਹੈ। ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਕਾਰਵਾਈਆਂ ਅਤੇ ਜਵਾਬਾਂ ਵਾਲੇ ਸੁਝਾਅ ਦਿਖਾਉਂਦੀ ਹੈ ਅਤੇ ਤੁਹਾਡੀਆਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਵਿਵਸਥਿਤ ਕਰਦੀ ਹੈ।\n\nਵਿਸਤ੍ਰਿਤ ਸੂਚਨਾਵਾਂ ਸੂਚਨਾ ਸਮੱਗਰੀ ਤੱਕ ਪਹੁੰਚ ਕਰ ਸਕਦੀਆਂ ਹਨ, ਜਿਸ ਵਿੱਚ ਸੰਪਰਕ ਦੇ ਨਾਮ ਅਤੇ ਸੁਨੇਹਿਆਂ ਵਰਗੀ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਵੀ ਸ਼ਾਮਲ ਹੈ। ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਸੂਚਨਾਵਾਂ ਨੂੰ ਖਾਰਜ ਵੀ ਕਰ ਸਕਦੀ ਹੈ ਜਾਂ ਸੂਚਨਾਵਾਂ ਦਾ ਜਵਾਬ ਵੀ ਦੇ ਸਕਦੀ ਹੈ, ਜਿਵੇਂ ਕਿ ਫ਼ੋਨ ਕਾਲਾਂ ਦਾ ਜਵਾਬ ਦੇਣਾ ਅਤੇ \'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਨੂੰ ਕੰਟਰੋਲ ਕਰਨਾ।"</string>
     <string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"ਨਿਯਮਬੱਧ ਮੋਡ ਦੀ ਜਾਣਕਾਰੀ ਵਾਲੀ ਸੂਚਨਾ"</string>
     <string name="dynamic_mode_notification_title" msgid="1388718452788985481">"ਬੈਟਰੀ ਸੇਵਰ ਚਾਲੂ ਹੈ"</string>
     <string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"ਬੈਟਰੀ ਲਾਈਫ਼ ਵਧਾਉਣ ਲਈ ਬੈਟਰੀ ਵਰਤੋਂ ਨੂੰ ਘਟਾਉਣਾ"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ਇਸ ਸਮੱਗਰੀ ਨੂੰ ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਨਾਲ ਨਹੀਂ ਖੋਲ੍ਹਿਆ ਜਾ ਸਕਦਾ"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ਇਸ ਸਮੱਗਰੀ ਨੂੰ ਨਿੱਜੀ ਐਪਾਂ ਨਾਲ ਸਾਂਝਾ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ਇਸ ਸਮੱਗਰੀ ਨੂੰ ਨਿੱਜੀ ਐਪਾਂ ਨਾਲ ਨਹੀਂ ਖੋਲ੍ਹਿਆ ਜਾ ਸਕਦਾ"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਨੂੰ ਰੋਕਿਆ ਗਿਆ ਹੈ"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"ਚਾਲੂ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਨੂੰ ਰੋਕਿਆ ਗਿਆ ਹੈ"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"ਰੋਕ ਹਟਾਓ"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ਕੋਈ ਕੰਮ ਸੰਬੰਧੀ ਐਪ ਨਹੀਂ"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ਕੋਈ ਨਿੱਜੀ ਐਪ ਨਹੀਂ"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"ਕੰਮ ਸੰਬੰਧੀ <xliff:g id="APP">%s</xliff:g> ਨੂੰ ਖੋਲ੍ਹਣਾ ਹੈ?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"ਕੀ ਨਿੱਜੀ <xliff:g id="APP">%s</xliff:g> ਵਿੱਚ ਖੋਲ੍ਹਣਾ ਹੈ?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"ਕੀ ਕੰਮ ਸੰਬੰਧੀ <xliff:g id="APP">%s</xliff:g> ਵਿੱਚ ਖੋਲ੍ਹਣਾ ਹੈ?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"ਕੀ ਕੰਮ ਸੰਬੰਧੀ ਐਪ ਤੋਂ ਕਾਲ ਕਰਨੀ ਹੈ?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"ਕੀ ਕੰਮ ਸੰਬੰਧੀ ਐਪ \'ਤੇ ਸਵਿੱਚ ਕਰਨਾ ਹੈ?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"ਤੁਹਾਡੀ ਸੰਸਥਾ ਤੁਹਾਨੂੰ ਸਿਰਫ਼ ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਤੋਂ ਕਾਲਾਂ ਕਰਨ ਦਿੰਦੀ ਹੈ"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"ਤੁਹਾਡੀ ਸੰਸਥਾ ਤੁਹਾਨੂੰ ਸਿਰਫ਼ ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਤੋਂ ਹੀ ਸੁਨੇਹੇ ਭੇਜਣ ਦਿੰਦੀ ਹੈ"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ਨਿੱਜੀ ਬ੍ਰਾਊਜ਼ਰ ਵਰਤੋ"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"ਕੰਮ ਸੰਬੰਧੀ ਬ੍ਰਾਊਜ਼ਰ ਵਰਤੋ"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"ਕਾਲ ਕਰੋ"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"ਸਵਿੱਚ ਕਰੋ"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"ਸਿਮ ਨੈੱਟਵਰਕ ਅਣਲਾਕ ਪਿੰਨ"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"ਸਿਮ ਨੈੱਟਵਰਕ ਸਬਸੈੱਟ ਅਣਲਾਕ ਪਿੰਨ"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"ਸਿਮ ਕਾਰਪੋਰੇਟ ਅਣਲਾਕ ਪਿੰਨ"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"ਤੁਹਾਡੇ <xliff:g id="DEVICE">%1$s</xliff:g> ਤੋਂ ਫ਼ੋਨ ਦੇ ਕੈਮਰੇ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"ਤੁਹਾਡੇ <xliff:g id="DEVICE">%1$s</xliff:g> ਤੋਂ ਟੈਬਲੈੱਟ ਦੇ ਕੈਮਰੇ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"ਸਟ੍ਰੀਮਿੰਗ ਦੌਰਾਨ ਇਸ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਇਸਦੀ ਬਜਾਏ ਆਪਣੇ ਫ਼ੋਨ \'ਤੇ ਵਰਤ ਕੇ ਦੇਖੋ।"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"ਸਟ੍ਰੀਮਿੰਗ ਦੌਰਾਨ ਤਸਵੀਰ-ਵਿੱਚ-ਤਸਵੀਰ ਨਹੀਂ ਦੇਖੀ ਜਾ ਸਕਦੀ"</string>
     <string name="system_locale_title" msgid="711882686834677268">"ਸਿਸਟਮ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ"</string>
     <string name="default_card_name" msgid="9198284935962911468">"ਕਾਰਡ <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"ਘੜੀਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ ਸੰਬੰਧੀ ਘੜੀ ਪ੍ਰੋਫਾਈਲ ਇਜਾਜ਼ਤ"</string>
@@ -2329,7 +2343,7 @@
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> ਦਾ ਸੰਰੂਪਣ ਕੀਤਾ ਗਿਆ"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"ਕੀ-ਬੋਰਡ ਦਾ ਖਾਕਾ <xliff:g id="LAYOUT_1">%s</xliff:g> \'ਤੇ ਸੈੱਟ ਹੈ। ਬਦਲਣ ਲਈ ਟੈਪ ਕਰੋ।"</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"ਕੀ-ਬੋਰਡ ਦਾ ਖਾਕਾ <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> \'ਤੇ ਸੈੱਟ ਹੈ। ਬਦਲਣ ਲਈ ਟੈਪ ਕਰੋ।"</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"ਕੀ-ਬੋਰਡ ਦਾ ਖਾਕਾ <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>\'ਤੇ ਸੈੱਟ ਹੈ। ਬਦਲਣ ਲਈ ਟੈਪ ਕਰੋ।"</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"ਕੀ-ਬੋਰਡ ਦਾ ਖਾਕਾ <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g> \'ਤੇ ਸੈੱਟ ਹੈ। ਬਦਲਣ ਲਈ ਟੈਪ ਕਰੋ।"</string>
     <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"ਕੀ-ਬੋਰਡ ਦਾ ਖਾਕਾ <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g> \'ਤੇ ਸੈੱਟ ਹੈ… ਬਦਲਣ ਲਈ ਟੈਪ ਕਰੋ।"</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"ਭੌਤਿਕ ਕੀ-ਬੋਰਡਾਂ ਦਾ ਸੰਰੂਪਣ ਕੀਤਾ ਗਿਆ"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"ਕੀ-ਬੋਰਡਾਂ ਨੂੰ ਦੇਖਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 0a07218..cf2571b 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -247,7 +247,7 @@
     <string name="global_action_lock" msgid="6949357274257655383">"Blokada ekranu"</string>
     <string name="global_action_power_off" msgid="4404936470711393203">"Wyłącz"</string>
     <string name="global_action_power_options" msgid="1185286119330160073">"Przycisk zasilania"</string>
-    <string name="global_action_restart" msgid="4678451019561687074">"Uruchom ponownie"</string>
+    <string name="global_action_restart" msgid="4678451019561687074">"Zrestartuj"</string>
     <string name="global_action_emergency" msgid="1387617624177105088">"Połączenie alarmowe"</string>
     <string name="global_action_bug_report" msgid="5127867163044170003">"Zgłoś błąd"</string>
     <string name="global_action_logout" msgid="6093581310002476511">"Zakończ sesję"</string>
@@ -300,6 +300,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"System Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Przełącz na profil osobisty"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Przełącz na profil służbowy"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Przełącz na osobistą aplikację <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Przełącz na służbową aplikację <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakty"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"dostęp do kontaktów"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Lokalizacja"</string>
@@ -505,7 +507,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Pozwala aplikacji na sterowanie wibracjami."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Zezwala aplikacji na dostęp do stanu wibracji"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"bezpośrednie wybieranie numerów telefonów"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Pozwala aplikacji na dzwonienie pod numery telefonów bez Twojej wiedzy. Może to skutkować nieoczekiwanymi opłatami lub połączeniami. Aplikacja nie może dzwonić pod numery alarmowe. Złośliwe aplikacje mogą generować koszty, wykonując połączenia bez Twojego potwierdzenia."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Zezwala aplikacji na nawiązywanie połączeń telefonicznych bez Twojego udziału. Mogą wystąpić nieoczekiwane opłaty lub połączenia. Pamiętaj, że te uprawnienia nie zezwalają aplikacji na dzwonienie pod numery alarmowe. Złośliwe aplikacje mogą generować koszty wynikające z nawiązywania połączeń bez Twojej wiedzy, a także wybierać określone kody powodujące przekierowywanie połączeń przychodzących na inny numer."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"usługa telefoniczna z dostępem do komunikatora"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Zezwala aplikacji na korzystanie z usługi komunikatora, by nawiązywać połączenia bez Twojego udziału."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"odczytywanie stanu i informacji o telefonie"</string>
@@ -590,6 +592,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Pozwala aplikacji uzyskiwać informacje o preferowanych usługach płatniczych NFC, np. zarejestrowanych pomocach i miejscach docelowych tras."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"kontrolowanie łączności Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Pozwala aplikacji na komunikowanie się z tagami, kartami i czytnikami NFC (Near Field Communication)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Wydarzenie transakcji w Bezpiecznym elemencie"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Zezwala na otrzymywanie przez aplikację informacji o transakcjach realizowanych w Bezpiecznym elemencie."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"wyłączanie blokady ekranu"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Pozwala aplikacji na wyłączenie blokady klawiatury i wszystkich związanych z tym haseł zabezpieczających. Na przykład telefon wyłącza blokadę klawiatury, gdy odbiera połączenie przychodzące, a następnie włącza ją ponownie po zakończeniu połączenia."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"żądaj informacji o stopniu złożoności blokady ekranu"</string>
@@ -616,10 +620,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Używaj biometrii lub blokady ekranu"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Potwierdź, że to Ty"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Użyj biometrii, by kontynuować"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Aby kontynuować, użyj odcisku palca"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Aby kontynuować, użyj rozpoznawania twarzy"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Aby kontynuować, użyj biometrii lub blokady ekranu"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Sprzęt biometryczny niedostępny"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Anulowano uwierzytelnianie"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Nie rozpoznano"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Nie rozpoznano twarzy"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Anulowano uwierzytelnianie"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nie ustawiono kodu PIN, wzoru ani hasła"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Podczas uwierzytelniania wystąpił błąd"</string>
@@ -635,7 +642,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Zbyt jasno"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Wykryto naciśnięcie przycisku zasilania"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Popraw"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Za każdym razem lekko zmieniaj ułożenie palca"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Za każdym razem lekko zmieniaj ułożenie palca"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Nie rozpoznano odcisku palca"</string>
@@ -686,7 +693,7 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Przesuń telefon w lewo"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Przesuń telefon w prawo"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Patrz prosto na urządzenie."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Nie widzę twarzy. Trzymaj telefon na wysokości oczu."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Nie widać twarzy – trzymaj telefon na wysokości oczu"</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Telefon się porusza. Trzymaj go nieruchomo."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Zarejestruj swoją twarz ponownie."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Nie rozpoznaję twarzy. Spróbuj ponownie."</string>
@@ -694,7 +701,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Patrz prosto na telefon"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Patrz prosto na telefon"</string>
     <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_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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -702,7 +709,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Wykryto zasłonę twarzy – twarz musi być widoczna w całości"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Nie można zweryfikować twarzy. Sprzęt niedostępny."</string>
@@ -711,8 +718,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Analiza twarzy została anulowana."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Użytkownik anulował rozpoznawanie twarzy"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Zbyt wiele prób. Spróbuj ponownie później."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Zbyt wiele prób. Rozpoznawanie twarzy niedostępne."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Zbyt wiele prób. Użyj blokady ekranu."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Nie można zweryfikować twarzy. Spróbuj ponownie."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Rozpoznawanie twarzy nie zostało skonfigurowane"</string>
@@ -961,12 +967,12 @@
     <string name="keyguard_password_wrong_pin_code" msgid="8583732939138432793">"Błędny kod PIN"</string>
     <string name="keyguard_label_text" msgid="3841953694564168384">"Aby odblokować, naciśnij Menu, a następnie 0."</string>
     <string name="emergency_call_dialog_number_for_display" msgid="2978165477085612673">"Numer alarmowy"</string>
-    <string name="lockscreen_carrier_default" msgid="6192313772955399160">"Brak usługi"</string>
+    <string name="lockscreen_carrier_default" msgid="6192313772955399160">"Brak sieci"</string>
     <string name="lockscreen_screen_locked" msgid="7364905540516041817">"Ekran zablokowany."</string>
     <string name="lockscreen_instructions_when_pattern_enabled" msgid="7982445492532123308">"Naciśnij Menu, aby odblokować lub wykonać połączenie alarmowe."</string>
     <string name="lockscreen_instructions_when_pattern_disabled" msgid="7434061749374801753">"Naciśnij Menu, aby odblokować."</string>
     <string name="lockscreen_pattern_instructions" msgid="3169991838169244941">"Narysuj wzór, aby odblokować"</string>
-    <string name="lockscreen_emergency_call" msgid="7500692654885445299">"Alarmowe"</string>
+    <string name="lockscreen_emergency_call" msgid="7500692654885445299">"Funkcje alarmowe"</string>
     <string name="lockscreen_return_to_call" msgid="3156883574692006382">"Powrót do połączenia"</string>
     <string name="lockscreen_pattern_correct" msgid="8050630103651508582">"Poprawnie!"</string>
     <string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"Spróbuj ponownie."</string>
@@ -1241,7 +1247,7 @@
     <string name="unsupported_display_size_show" msgid="980129850974919375">"Zawsze pokazuj"</string>
     <string name="unsupported_compile_sdk_message" msgid="7326293500707890537">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> została skompilowana pod niezgodną wersję systemu Android i może zachowywać się niezgodnie z oczekiwaniami. Sprawdź, czy jest dostępna zaktualizowana wersja aplikacji."</string>
     <string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"Zawsze pokazuj"</string>
-    <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Sprawdź aktualizację"</string>
+    <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"Sprawdź dostępność aktualizacji"</string>
     <string name="smv_application" msgid="3775183542777792638">"Aplikacja <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) naruszyła wymuszone przez siebie zasady StrictMode."</string>
     <string name="smv_process" msgid="1398801497130695446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> naruszył wymuszone przez siebie zasady StrictMode."</string>
     <string name="android_upgrading_title" product="default" msgid="7279077384220829683">"Telefon się aktualizuje…"</string>
@@ -1394,10 +1400,10 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ODRZUĆ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Wybierz metodę wprowadzania"</string>
     <string name="show_ime" msgid="6406112007347443383">"Pozostaw na ekranie, gdy aktywna jest klawiatura fizyczna"</string>
-    <string name="hardware" msgid="1800597768237606953">"Pokaż klawiaturę wirtualną"</string>
+    <string name="hardware" msgid="3611039921284836033">"Używaj klawiatury ekranowej"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Skonfiguruj urządzenie <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Skonfiguruj klawiatury fizyczne"</string>
-    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Kliknij, by wybrać język i układ"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Kliknij, aby wybrać język i układ"</string>
     <string name="fast_scroll_alphabet" msgid="8854435958703888376">" AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ"</string>
     <string name="fast_scroll_numeric_alphabet" msgid="2529539945421557329">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"Wyświetlanie nad innymi aplikacjami"</string>
@@ -1668,8 +1674,8 @@
     <string name="kg_login_invalid_input" msgid="8292367491901220210">"Nieprawidłowa nazwa użytkownika lub hasło."</string>
     <string name="kg_login_account_recovery_hint" msgid="4892466171043541248">"Nie pamiętasz nazwy użytkownika lub hasła?\nWejdź na "<b>"google.com/accounts/recovery"</b>"."</string>
     <string name="kg_login_checking_password" msgid="4676010303243317253">"Sprawdzam konto"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="23741434207544038">"Wpisałeś nieprawidłowy kod PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> razy. \n\nSpróbuj ponownie za <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
-    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="3328686432962224215">"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_pin_attempts_dialog_message" msgid="23741434207544038">"Po raz <xliff:g id="NUMBER_0">%1$d</xliff:g> został wpisany nieprawidłowy kod PIN. \n\nSpróbuj ponownie za <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="3328686432962224215">"Po raz <xliff:g id="NUMBER_0">%1$d</xliff:g> zostało wpisane 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="7357404233979139075">"Narysowałeś nieprawidłowy wzór odblokowania <xliff:g id="NUMBER_0">%1$d</xliff:g> razy. \n\nSpróbuj ponownie za <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="3479940221343361587">"Po raz <xliff:g id="NUMBER_0">%1$d</xliff:g> próbowałeś nieprawidłowo odblokować tablet. Po kolejnych <xliff:g id="NUMBER_1">%2$d</xliff:g> nieudanych próbach tablet zostanie zresetowany do ustawień fabrycznych, a wszystkie dane użytkownika zostaną utracone."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="9064457748587850217">"Próbujesz odblokować urządzenie z Androidem TV w nieprawidłowy sposób. To była <xliff:g id="NUMBER_0">%1$d</xliff:g> próba. Po kolejnych <xliff:g id="NUMBER_1">%2$d</xliff:g> nieudanych próbach urządzenie zostanie zresetowane do ustawień fabrycznych, a wszystkie dane użytkownika zostaną utracone."</string>
@@ -1683,10 +1689,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Usuń"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Zwiększyć głośność ponad zalecany poziom?\n\nSłuchanie głośno przez długi czas może uszkodzić Twój słuch."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Ostrzeżenie\nLimit głośnych dźwięków, jakich przez tydzień możesz bezpiecznie słuchać przez słuchawki, został przekroczony.\n\nPrzekroczenie limitu spowoduje trwałe uszkodzenie słuchu."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Ostrzeżenie\nLimit głośnych dźwięków, jakich przez tydzień możesz bezpiecznie słuchać przez słuchawki, został 5-krotnie przekroczony.\n\nGłośność została zmniejszona, aby chronić Twój słuch."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Poziom głośności, na jakim słuchasz multimediów, może spowodować uszkodzenie słuchu, jeśli będzie się utrzymywał przez dłuższy czas.\n\nDalsze odtwarzanie na tym poziomie głośności przez dłuższy czas może uszkodzić Twój słuch."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Ostrzeżenie\nSłuchasz obecnie treści odtwarzanych na niebezpiecznym poziomie głośności.\n\nDalsze słuchanie przy takiej głośności trwale uszkodzi Twój słuch."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Słuchać dalej z wysokim poziomem głośności?\n\nGłośność na słuchawkach jest zbyt duża przez czas dłuższy niż zalecany, co może doprowadzić do uszkodzenia słuchu"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Wykryto głośny dźwięk\n\nGłośność na słuchawkach przekracza zalecane wartości, co może doprowadzić do uszkodzenia słuchu"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Użyć skrótu ułatwień dostępu?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Gdy skrót jest włączony, jednoczesne naciskanie przez trzy sekundy obu przycisków głośności uruchamia funkcję ułatwień dostępu."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Włączyć skrót ułatwień dostępu?"</string>
@@ -1699,7 +1703,7 @@
     <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"WŁ."</string>
     <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"WYŁ."</string>
     <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Pozwolić usłudze <xliff:g id="SERVICE">%1$s</xliff:g> na pełną kontrolę nad urządzeniem?"</string>
-    <string name="accessibility_service_warning_description" msgid="291674995220940133">"Pełna kontrola jest odpowiednia dla aplikacji, które pomagają Ci radzić sobie z niepełnosprawnością, ale nie należy jej przyznawać wszystkim aplikacjom."</string>
+    <string name="accessibility_service_warning_description" msgid="291674995220940133">"Pełna kontrola jest odpowiednia dla aplikacji, które ułatwiają Ci dostęp, ale nie należy jej przyznawać wszystkim aplikacjom."</string>
     <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Wyświetlaj i kontroluj ekran"</string>
     <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"Może odczytywać całą zawartość ekranu i wyświetlać treść nad innymi aplikacjami."</string>
     <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"Wyświetlaj i wykonuj działania"</string>
@@ -1853,7 +1857,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Aby wyjść, przesuń palcem z góry na dół."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"OK"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Obróć, aby lepiej widzieć"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Zamknij podzielony ekran, aby lepiej widzieć"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Otwórz aplikację <xliff:g id="NAME">%s</xliff:g> na pełnym ekranie, aby lepiej widzieć"</string>
     <string name="done_label" msgid="7283767013231718521">"Gotowe"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Kołowy suwak godzin"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Kołowy suwak minut"</string>
@@ -1959,7 +1963,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Aplikacja jest niedostępna"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> jest obecnie niedostępna."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> – brak dostępu"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Wymagane są uprawnienia"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Zablokowana prośba o uprawnienia"</string>
     <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>
@@ -1970,6 +1974,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Ta aplikacja prosi o dodatkowe uprawnienia, ale nie można ich przyznać w trakcie sesji odtwarzania strumieniowego. Najpierw przyznaj te uprawnienia na urządzeniu z Androidem TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Ta aplikacja prosi o dodatkowe uprawnienia, ale nie można ich przyznać w trakcie sesji odtwarzania strumieniowego. Najpierw przyznaj te uprawnienia na tablecie."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Ta aplikacja prosi o dodatkowe uprawnienia, ale nie można ich przyznać w trakcie sesji odtwarzania strumieniowego. Najpierw przyznaj te uprawnienia na telefonie."</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>
@@ -1978,6 +1985,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Nie można z tego skorzystać na urządzeniu <xliff:g id="DEVICE">%1$s</xliff:g>. Użyj telefonu."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Ta aplikacja jest na starszą wersję Androida. Może nie działać prawidłowo i nie uwzględnia najnowszych zabezpieczeń oraz ustawień ochrony prywatności. Sprawdź, czy możesz ją zaktualizować, lub skontaktuj się z deweloperem."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Sprawdź dostępność aktualizacji"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Ta aplikacja nie jest zgodna z najnowszą wersją Androida. Sprawdź, czy możesz ją zaktualizować, lub skontaktuj się z deweloperem."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Masz nowe wiadomości"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Otwórz aplikację do SMS-ów, by wyświetlić wiadomość"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Część funkcji może być niedostępnych"</string>
@@ -2161,16 +2169,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Tych treści nie można otworzyć w aplikacjach służbowych"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Tych treści nie można udostępniać w aplikacjach osobistych"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Tych treści nie można otworzyć w aplikacjach osobistych"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Działanie profilu służbowego jest wstrzymane"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Kliknij, aby włączyć"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Aplikacje służbowe zostały wstrzymane"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Cofnij wstrzymanie"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Brak aplikacji służbowych"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Brak aplikacji osobistych"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Otworzyć aplikację służbową <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Otworzyć w osobistej aplikacji <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Otworzyć w służbowej aplikacji <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Zadzwonić z aplikacji służbowej?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Przełączyć na aplikację służbową?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Twoja organizacja zezwala na nawiązywanie połączeń tylko z aplikacji służbowych"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Twoja organizacja zezwala na wysyłanie wiadomości tylko z aplikacji służbowych"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Użyj przeglądarki osobistej"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Użyj przeglądarki służbowej"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Zadzwoń"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Przełącz"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Kod PIN do karty SIM odblokowujący sieć"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Kod PIN odblokowujący podzbiór sieci na karcie SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Kod PIN odblokowujący dane korporacyjne na karcie SIM"</string>
@@ -2307,6 +2320,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Nie można korzystać z aparatu telefonu na urządzeniu <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Nie można korzystać z aparatu tabletu na urządzeniu <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Nie można z tego skorzystać podczas strumieniowania. Użyj telefonu."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Podczas strumieniowania nie można wyświetlać obrazu w obrazie"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Ustawienie domyślne systemu"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KARTA <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Uprawnienie profilu zegarka towarzyszącego do zarządzania zegarkami"</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 2d502bd..2ca6ec7 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Mudar para o perfil pessoal"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Perfil de trabalho"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Mudar para o app <xliff:g id="APP_NAME">%1$s</xliff:g> do perfil pessoal"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Mudar para o app <xliff:g id="APP_NAME">%1$s</xliff:g> do perfil de trabalho"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contatos"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"acesse seus contatos"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Localização"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite que o app controle a vibração."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que o app acesse o estado da vibração."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"ligar diretamente para números de telefone"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Permite que o app ligue para números de telefone sem sua intervenção. Isso pode resultar em cobranças ou chamadas inesperadas. Esta opção não permite que o app ligue para números de emergência. Apps maliciosos podem gerar custos com chamadas feitas sem sua confirmação."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Permite que o app faça ligações para números de telefone sem a sua intervenção. Ligações ou cobranças inesperadas podem acontecer. Isso não permite que o app ligue para números de emergência. Você pode receber cobranças indesejadas de ligações feitas por apps maliciosos sem a sua confirmação. Além disso, esses apps podem discar códigos de operadora que automaticamente encaminham ligações recebidas para outro número."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"acessar serviço de mensagens instantâneas para chamadas"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permite que o app use o serviço de mensagens instantâneas para fazer chamadas sem sua intervenção."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ler status e identidade do telefone"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permite que o app acesse as informações preferidas de serviço de pagamento por NFC, como auxílios registrados ou destinos de trajetos."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"controlar a comunicação a curta distância"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Permite que o app se comunique com leitores, cartões e etiqueta NFC (comunicação a curta distância)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Evento de transação do Elemento de segurança"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Permite que o app receba informações sobre transações que ocorrem em um Elemento de segurança."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"desativar o bloqueio de tela"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Permite que o app desative o bloqueio de teclas e qualquer segurança por senha associada. Por exemplo, o telefone desativa o bloqueio de telas ao receber uma ligação e o reativa quando a chamada é finalizada."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"Solicitar complexidade do bloqueio de tela"</string>
@@ -615,17 +619,20 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Usar biometria ou bloqueio de tela"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Confirme que é você"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Use seus dados biométricos para continuar"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Use sua impressão digital para continuar"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Use seu rosto para continuar"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Use sua autenticação biométrica ou o bloqueio de tela para continuar"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Hardware biométrico indisponível"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autenticação cancelada"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Não reconhecido"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Rosto não reconhecido"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autenticação cancelada"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nenhum PIN, padrão ou senha configurado"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Erro na autenticação"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usar bloqueio de tela"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Insira seu bloqueio de tela para continuar"</string>
     <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Pressione o sensor com firmeza"</string>
-    <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Não foi possível reconhecer a impressão digital. Tente de novo."</string>
+    <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Impressão digital não reconhecida. Tente de novo."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpe o sensor de impressão digital e tente novamente"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpe o sensor e tente novamente"</string>
     <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Pressione o sensor com firmeza"</string>
@@ -634,7 +641,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Claro demais"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"O botão liga/desliga foi pressionado"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Ajuste a posição do dedo"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mude a posição do dedo ligeiramente a cada momento"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mude ligeiramente a posição do dedo em cada registro"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impressão digital não reconhecida"</string>
@@ -644,7 +651,7 @@
     <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Rosto autenticado, pressione \"Confirmar\""</string>
     <string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardware de impressão digital não disponível."</string>
     <string name="fingerprint_error_no_space" msgid="7285481581905967580">"Não foi possível configurar a impressão digital"</string>
-    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"A configuração da impressão digital expirou. Tente de novo."</string>
+    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Tempo de configuração esgotado. Tente de novo."</string>
     <string name="fingerprint_error_canceled" msgid="540026881380070750">"Operação de impressão digital cancelada."</string>
     <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Operação de impressão digital cancelada pelo usuário."</string>
     <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Excesso de tentativas. Use o bloqueio de tela."</string>
@@ -693,7 +700,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Olhe diretamente para o smartphone"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Olhe diretamente para o smartphone"</string>
     <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_obscured" msgid="4917643294953326639">"Tire tudo que possa esconder seu rosto."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpe a parte superior da tela, inclusive a barra preta"</string>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -701,7 +708,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Máscara detectada. Seu rosto precisa estar visível."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Impossível verificar rosto. Hardware indisponível."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Operação facial cancelada."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Desbloqueio facial cancelado pelo usuário"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Excesso de tentativas. Tente novamente mais tarde."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Muitas tentativas. Desbloqueio facial indisponível."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Muitas tentativas. Como alternativa, use o bloqueio de tela."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Não é possível verificar o rosto. Tente novamente."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"O Desbloqueio facial não foi configurado"</string>
@@ -1256,7 +1262,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Iniciando apps."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Concluindo a inicialização."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Você pressionou o botão liga/desliga. Normalmente, essa ação desliga a tela.\n\nToque levemente na tela durante a configuração da impressão digital."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Desligue a tela para encerrar a configuração"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Desligue a tela para encerrar a configuração."</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Desativar"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continuar a verificação da digital?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Você pressionou o botão liga/desliga. Normalmente, essa ação desliga a tela.\n\nToque levemente na tela para verificar sua impressão digital."</string>
@@ -1365,7 +1371,7 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"MIDI via USB ativado"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Dispositivo conectado como Webcam"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"Acessório USB conectado"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"Toque para ver mais opções."</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"Toque para conferir mais opções."</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Carregando dispositivo conectado. Toque para ver mais opções."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Acessório de áudio analógico detectado"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"O dispositivo anexo não é compatível com esse smartphone. Toque para saber mais."</string>
@@ -1393,7 +1399,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"RECUSAR"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Selecione o método de entrada"</string>
     <string name="show_ime" msgid="6406112007347443383">"Mantém o teclado virtual na tela enquanto o teclado físico está ativo"</string>
-    <string name="hardware" msgid="1800597768237606953">"Mostrar teclado virtual"</string>
+    <string name="hardware" msgid="3611039921284836033">"Usar teclado na tela"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configure o dispositivo <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configure teclados físicos"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Toque para selecionar o idioma e o layout"</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Remover"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Aumentar o volume acima do nível recomendado?\n\nOuvir em volume alto por longos períodos pode danificar sua audição."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Alerta,\nVocê excedeu a quantidade semanal de sinais de ruído alto que pode ser ouvida por fones de ouvido com segurança.\n\nUltrapassar esse limite vai prejudicar sua audição permanentemente."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Alerta,\nVocê excedeu em cinco vezes a quantidade semanal de sinais de ruído alto que pode ser ouvida por fones de ouvido com segurança.\n\nO volume foi diminuído para proteger sua audição."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Você está escutando mídia em um volume que pode resultar em danos à audição quando mantido por períodos prolongados.\n\nContinuar a reproduzir mídia nesse volume por períodos prolongados pode resultar em danos à sua audição."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Alerta,\nVocê está ouvindo conteúdo em um volume perigoso.\n\nContinuar a ouvir nesse volume vai prejudicar sua audição permanentemente."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Continuar ouvindo em volume alto?\n\nO volume dos fones de ouvido está alto há mais tempo que o recomendado. Isso pode causar danos à audição"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Som alto detectado\n\nO volume dos fones de ouvido está mais alto que o recomendado. Isso pode causar danos à audição"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Usar atalho de Acessibilidade?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Quando o atalho estiver ativado, pressione os dois botões de volume por três segundos para iniciar um recurso de acessibilidade."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Ativar atalho para recursos de acessibilidade?"</string>
@@ -1729,7 +1733,7 @@
     <string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"Para alternar entre recursos, deslize de baixo para cima na tela com três dedos, sem soltar."</string>
     <string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Ampliação"</string>
     <string name="user_switched" msgid="7249833311585228097">"Usuário atual <xliff:g id="NAME">%1$s</xliff:g>."</string>
-    <string name="user_switching_message" msgid="1912993630661332336">"Alternando para <xliff:g id="NAME">%1$s</xliff:g>…"</string>
+    <string name="user_switching_message" msgid="1912993630661332336">"Mudando para <xliff:g id="NAME">%1$s</xliff:g>…"</string>
     <string name="user_logging_out_message" msgid="7216437629179710359">"Desconectando <xliff:g id="NAME">%1$s</xliff:g>…"</string>
     <string name="owner_name" msgid="8713560351570795743">"Proprietário"</string>
     <string name="guest_name" msgid="8502103277839834324">"Visitante"</string>
@@ -1852,7 +1856,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Para sair, deslize de cima para baixo."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Entendi"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Gire a tela para ter uma visualização melhor"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Saia da tela dividida para ter uma visualização melhor"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Abra o app <xliff:g id="NAME">%s</xliff:g> em tela cheia para ter uma melhor visualização"</string>
     <string name="done_label" msgid="7283767013231718521">"Concluído"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Controle deslizante circular das horas"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Controle deslizante circular dos minutos"</string>
@@ -1958,7 +1962,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"O app não está disponível"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> não está disponível no momento."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> indisponível"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Permissão necessária"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Solicitação de permissão suprimida"</string>
     <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>
@@ -1969,6 +1973,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Esse app está solicitando permissões extras, mas elas não podem ser concedidas em uma sessão de streaming. Dê permissão pelo dispositivo Android TV primeiro."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Esse app está solicitando permissões extras, mas elas não podem ser concedidas em uma sessão de streaming. Dê permissão pelo tablet primeiro."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Esse app está solicitando permissões extras, mas elas não podem ser concedidas em uma sessão de streaming. Dê permissão pelo smartphone primeiro."</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>
@@ -1977,6 +1984,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Não é possível acessar essa configuração pelo seu <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo smartphone."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Este app foi criado para uma versão mais antiga do Android. Ele pode não funcionar corretamente e não inclui as proteções de privacidade e segurança mais recentes. Verifique se há uma atualização ou entre em contato com o desenvolvedor do app."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Procurar atualizações"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Este app não é compatível com a versão mais recente do Android. Verifique se há uma atualização ou entre em contato com o desenvolvedor do app."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Você tem mensagens novas"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Abra o app de SMS para ver"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Algumas funções são limitadas"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Não é possível abrir esse conteúdo com apps de trabalho"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Não é possível compartilhar esse conteúdo com apps pessoais"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Não é possível abrir esse conteúdo com apps pessoais"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"O perfil de trabalho está pausado"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Toque para ativar"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Os apps de trabalho foram pausados"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Reativar"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nenhum app de trabalho"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nenhum app pessoal"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Abrir <xliff:g id="APP">%s</xliff:g> do perfil de trabalho?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Abrir no app <xliff:g id="APP">%s</xliff:g> do perfil pessoal?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Abrir no app <xliff:g id="APP">%s</xliff:g> do perfil de trabalho?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Ligar pelo app de trabalho?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Trocar para o app de trabalho?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Sua organização só permite fazer ligações usando apps de trabalho"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Sua organização só permite o envio de mensagens usando apps de trabalho"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usar o navegador pessoal"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usar o navegador de trabalho"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Ligar"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Trocar"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN para desbloqueio da rede do chip"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN para desbloqueio do subconjunto de rede do chip"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN para desbloqueio do chip corporativo"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Não é possível acessar a câmera do smartphone pelo <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Não é possível acessar a câmera do tablet pelo <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Não é possível acessar esse conteúdo durante o streaming. Tente pelo smartphone."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Não é possível usar o modo picture-in-picture durante o streaming"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Padrão do sistema"</string>
     <string name="default_card_name" msgid="9198284935962911468">"CHIP <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Permissão do perfil do relógio complementar para gerenciar relógios"</string>
@@ -2326,7 +2340,7 @@
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"O recurso Dual Screen está indisponível"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"O recurso Dual Screen está indisponível porque a Economia de bateria está ativada. É possível desativar essa opção nas configurações."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Ir para Configurações"</string>
-    <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Desativar"</string>
+    <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Desligar"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"Dispositivo <xliff:g id="DEVICE_NAME">%s</xliff:g> configurado"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Layout do teclado definido como <xliff:g id="LAYOUT_1">%s</xliff:g>. Toque para mudar."</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Layout do teclado definido como <xliff:g id="LAYOUT_1">%1$s</xliff:g> e <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Toque para mudar."</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 5b4fe8a..83da4b5 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -235,9 +235,9 @@
     <string name="shutdown_confirm" product="tv" msgid="7975942887313518330">"O dispositivo Android TV será encerrado."</string>
     <string name="shutdown_confirm" product="watch" msgid="2977299851200240146">"As suas visualizações vão ser encerradas."</string>
     <string name="shutdown_confirm" product="default" msgid="136816458966692315">"O seu telefone será encerrado."</string>
-    <string name="shutdown_confirm_question" msgid="796151167261608447">"Pretende encerrar?"</string>
+    <string name="shutdown_confirm_question" msgid="796151167261608447">"Quer encerrar?"</string>
     <string name="reboot_safemode_title" msgid="5853949122655346734">"Reiniciar no modo de segurança"</string>
-    <string name="reboot_safemode_confirm" msgid="1658357874737219624">"Pretende reiniciar no modo de segurança? Se sim, irá desativar todas as aplicações de terceiros instaladas. Estas serão restauradas quando reiniciar novamente."</string>
+    <string name="reboot_safemode_confirm" msgid="1658357874737219624">"Quer reiniciar no modo de segurança? Se sim, irá desativar todas as aplicações de terceiros instaladas. Estas serão restauradas quando reiniciar novamente."</string>
     <string name="recent_tasks_title" msgid="8183172372995396653">"Recente"</string>
     <string name="no_recent_tasks" msgid="9063946524312275906">"Não existem aplicações recentes"</string>
     <string name="global_actions" product="tablet" msgid="4412132498517933867">"Opções do tablet"</string>
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Mudar para o perfil pessoal"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Mudar para o perfil de trabalho"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Mudar para <xliff:g id="APP_NAME">%1$s</xliff:g> pessoal"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Mudar para <xliff:g id="APP_NAME">%1$s</xliff:g> de trabalho"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contactos"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"aceder aos contactos"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Localização"</string>
@@ -311,7 +313,7 @@
     <string name="permgroupdesc_storage" msgid="5378659041354582769">"aceder aos ficheiros no seu dispositivo"</string>
     <string name="permgrouplab_readMediaAural" msgid="1858331312624942053">"Música e áudio"</string>
     <string name="permgroupdesc_readMediaAural" msgid="7565467343667089595">"aceder a música e áudio no seu dispositivo"</string>
-    <string name="permgrouplab_readMediaVisual" msgid="4724874717811908660">"Fotos e vídeos"</string>
+    <string name="permgrouplab_readMediaVisual" msgid="4724874717811908660">"fotos e vídeos"</string>
     <string name="permgroupdesc_readMediaVisual" msgid="4080463241903508688">"aceder a fotos e vídeos no seu dispositivo"</string>
     <string name="permgrouplab_microphone" msgid="2480597427667420076">"Microfone"</string>
     <string name="permgroupdesc_microphone" msgid="1047786732792487722">"gravar áudio"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite à app controlar o vibrador."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que a app aceda ao estado de vibração."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"marcar números de telefone diretamente"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Permite que a app ligue para números de telefone sem a intervenção do utilizador. Esta ação pode resultar em cobranças ou chamadas inesperadas. Tenha em atenção que isto não permite que a app ligue para números de emergência. As aplicações maliciosas podem fazer com que incorra em custos, fazendo chamadas sem a sua confirmação."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Permite que a app ligue para números de telefone sem a sua intervenção. Esta ação pode resultar em cobranças ou chamadas inesperadas. Tenha em atenção que isto não permite que a app ligue para números de emergência. As apps maliciosas podem fazer chamadas sem a sua confirmação, com possíveis custos para si, ou marcar códigos do operador, o que faz com que as chamadas recebidas sejam encaminhadas automaticamente para outro número."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"aceder ao serviço de chamadas IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permite que a app utilize o serviço IMS para fazer chamadas sem a sua intervenção."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ler o estado e a identidade do telemóvel"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permite que a app obtenha informações de serviços de pagamento com NFC preferenciais, como apoios registados e destino da rota."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"controlo Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Permite que a app comunique com etiquetas, cartões e leitores Near Field Communication (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Evento de transação do elemento seguro"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Permite que a app receba informações sobre transações que ocorram num elemento seguro."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"desativar o bloqueio do ecrã"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Permite que a app desative o bloqueio de teclas e qualquer segurança por palavra-passe associada. Por exemplo, o telemóvel desativa o bloqueio de teclas quando recebe uma chamada e reativa o bloqueio de teclas ao terminar a chamada."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"solicitar a complexidade do bloqueio de ecrã"</string>
@@ -615,17 +619,20 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Usar a biometria ou o bloqueio de ecrã"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Confirme a sua identidade"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Utilize a biometria para continuar."</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Use a impressão digital para continuar"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Use o rosto para continuar"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Utilize a biometria ou o bloqueio de ecrã para continuar"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Hardware biométrico indisponível."</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autenticação cancelada"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Não reconhecido."</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Rosto não reconhecido"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autenticação cancelada"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nenhum PIN, padrão ou palavra-passe definidos."</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Erro ao autenticar."</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usar o bloqueio de ecrã"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Introduza o bloqueio de ecrã para continuar"</string>
     <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Prima firmemente o sensor"</string>
-    <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Não é possível reconhecer a impressão digital. Tente novamente."</string>
+    <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Impossível reconhecer impressão digital. Volte a tentar."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpe o sensor de impressões digitais e tente novamente"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpe o sensor e tente novamente"</string>
     <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Prima firmemente o sensor"</string>
@@ -677,7 +684,7 @@
     <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"Visite um fornecedor de serviços de reparação."</string>
     <string name="face_acquired_insufficient" msgid="6889245852748492218">"Impossível criar modelo de rosto. Tente novamente."</string>
     <string name="face_acquired_too_bright" msgid="8070756048978079164">"Demasiado clara. Experimente uma luz mais suave."</string>
-    <string name="face_acquired_too_dark" msgid="8539853432479385326">"Não há luz suficiente"</string>
+    <string name="face_acquired_too_dark" msgid="8539853432479385326">"Sem luz suficiente"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Afaste ainda mais o telemóvel"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Aproxime o telemóvel do rosto"</string>
     <string name="face_acquired_too_high" msgid="8278815780046368576">"Mova o telemóvel mais para cima"</string>
@@ -685,7 +692,7 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Mova o telemóvel para a sua esquerda"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Mova o telemóvel para a sua direita"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Olhe mais diretamente para o dispositivo."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Rosto não detetado. Segure o telemóvel ao nível dos olhos."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Rosto não detetado. Segure o telemóvel ao nível dos olhos"</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Demasiado movimento. Mantenha o telemóvel firme."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Volte a inscrever o rosto."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Impossível reconhecer o rosto. Tente novamente."</string>
@@ -693,7 +700,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Olhe mais diretamente para o telemóvel"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Olhe mais diretamente para o telemóvel"</string>
     <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_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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -701,7 +708,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Máscara detetada. Todo o rosto tem de estar visível"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Não pode validar o rosto. Hardware não disponível."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Operação de rosto cancelada."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Desbloqueio facial cancelado pelo utilizador"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Demasiadas tentativas. Tente mais tarde."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Demasiadas tentativas. Desbloqueio facial indisponível."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Demasiadas tentativas. Em alternativa, introduza o bloqueio de ecrã."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Não é possível validar o rosto. Tente novamente."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Não configurou o Desbloqueio facial"</string>
@@ -1064,7 +1070,7 @@
     <string name="js_dialog_before_unload_title" msgid="7012587995876771246">"Confirmar Navegação"</string>
     <string name="js_dialog_before_unload_positive_button" msgid="4274257182303565509">"Sair desta Página"</string>
     <string name="js_dialog_before_unload_negative_button" msgid="3873765747622415310">"Permanecer nesta Página"</string>
-    <string name="js_dialog_before_unload" msgid="7213364985774778744">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nTem a certeza de que pretende navegar para outra página?"</string>
+    <string name="js_dialog_before_unload" msgid="7213364985774778744">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nTem a certeza de que quer navegar para outra página?"</string>
     <string name="autofill_window_title" msgid="4379134104008111961">"Preenchimento automático com <xliff:g id="SERVICENAME">%1$s</xliff:g>"</string>
     <string name="permlab_setAlarm" msgid="1158001610254173567">"definir um alarme"</string>
     <string name="permdesc_setAlarm" msgid="2185033720060109640">"Permite que a app defina um alarme numa app de despertador instalada. Algumas aplicações de despertador podem não integrar esta funcionalidade."</string>
@@ -1090,8 +1096,8 @@
     <string name="searchview_description_submit" msgid="6771060386117334686">"Enviar consulta"</string>
     <string name="searchview_description_voice" msgid="42360159504884679">"Pesquisa por voz"</string>
     <string name="enable_explore_by_touch_warning_title" msgid="5095399706284943314">"Ativar Explorar Através do Toque?"</string>
-    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="1037295476738940824">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> pretende ativar a funcionalidade Explorar Através do Toque. Quando a funcionalidade Explorar Através do Toque estiver ativada, pode ouvir ou visualizar descrições sobre o que está por baixo do seu dedo ou executar gestos para interagir com o tablet."</string>
-    <string name="enable_explore_by_touch_warning_message" product="default" msgid="4312979647356179250">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> pretende ativar a funcionalidade Explorar Através do Toque. Quando a funcionalidade Explorar Através do Toque estiver ativada, pode ouvir ou visualizar descrições sobre o que está por baixo do seu dedo ou executar gestos para interagir com o telemóvel."</string>
+    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="1037295476738940824">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> quer ativar a funcionalidade Explorar Através do Toque. Quando a funcionalidade Explorar Através do Toque estiver ativada, pode ouvir ou visualizar descrições sobre o que está por baixo do seu dedo ou executar gestos para interagir com o tablet."</string>
+    <string name="enable_explore_by_touch_warning_message" product="default" msgid="4312979647356179250">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> quer ativar a funcionalidade Explorar Através do Toque. Quando a funcionalidade Explorar Através do Toque estiver ativada, pode ouvir ou visualizar descrições sobre o que está por baixo do seu dedo ou executar gestos para interagir com o telemóvel."</string>
     <string name="oneMonthDurationPast" msgid="4538030857114635777">"Há 1 mês"</string>
     <string name="beforeOneMonthDurationPast" msgid="8315149541372065392">"Há mais de 1 mês"</string>
     <string name="last_num_days" msgid="2393660431490280537">"{count,plural, =1{# dia anterior}many{# dias anteriores}other{# dias anteriores}}"</string>
@@ -1229,7 +1235,7 @@
     <string name="force_close" msgid="9035203496368973803">"OK"</string>
     <string name="report" msgid="2149194372340349521">"Relatório"</string>
     <string name="wait" msgid="7765985809494033348">"Esperar"</string>
-    <string name="webpage_unresponsive" msgid="7850879412195273433">"A página deixou de responder. \n \n Pretende fechá-la?"</string>
+    <string name="webpage_unresponsive" msgid="7850879412195273433">"A página deixou de responder. \n \n Quer fechá-la?"</string>
     <string name="launch_warning_title" msgid="6725456009564953595">"Aplicação redirecionada"</string>
     <string name="launch_warning_replace" msgid="3073392976283203402">"<xliff:g id="APP_NAME">%1$s</xliff:g> está agora a ser executado."</string>
     <string name="launch_warning_original" msgid="3332206576800169626">"<xliff:g id="APP_NAME">%1$s</xliff:g> foi originalmente iniciado."</string>
@@ -1256,8 +1262,8 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"A iniciar aplicações"</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"A concluir o arranque."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Premiu o botão ligar/desligar. Geralmente, esta ação desliga o ecrã.\n\nExperimente tocar levemente ao configurar a sua impressão digital."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Termine a configuração ao desligar ecrã"</string>
-    <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Desativar"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Para terminar, desligue o ecrã"</string>
+    <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Desligar"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continuar a validar a impressão digital?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Premiu o botão ligar/desligar. Geralmente, esta ação desliga o ecrã.\n\nExperimente tocar levemente para validar a sua impressão digital."</string>
     <string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"Desligar ecrã"</string>
@@ -1272,7 +1278,7 @@
     <string name="dump_heap_notification" msgid="5316644945404825032">"<xliff:g id="PROC">%1$s</xliff:g> excedeu o limite da memória"</string>
     <string name="dump_heap_ready_notification" msgid="2302452262927390268">"A captura da área dinâmica para dados do processo <xliff:g id="PROC">%1$s</xliff:g> está pronta."</string>
     <string name="dump_heap_notification_detail" msgid="8431586843001054050">"Foi recolhida a captura da área dinâmica para dados. Toque para partilhar."</string>
-    <string name="dump_heap_title" msgid="4367128917229233901">"Pretende partilhar a captura da área dinâmica para dados?"</string>
+    <string name="dump_heap_title" msgid="4367128917229233901">"Quer partilhar a captura da área dinâmica para dados?"</string>
     <string name="dump_heap_text" msgid="1692649033835719336">"O processo <xliff:g id="PROC">%1$s</xliff:g> excedeu o respetivo limite de memória de <xliff:g id="SIZE">%2$s</xliff:g>. Está disponível uma captura da área dinâmica para dados para partilhar com o respetivo programador. Atenção: esta captura da área dinâmica para dados pode conter algumas das suas informações pessoais a que a app tem acesso."</string>
     <string name="dump_heap_system_text" msgid="6805155514925350849">"O processo <xliff:g id="PROC">%1$s</xliff:g> excedeu o respetivo limite de memória de <xliff:g id="SIZE">%2$s</xliff:g>. Está disponível uma captura da área dinâmica para dados para partilhar. Atenção: esta captura da área dinâmica para dados pode conter informações pessoais confidenciais a que o processo tem acesso, que podem incluir coisas que escreveu."</string>
     <string name="dump_heap_ready_text" msgid="5849618132123045516">"Está disponível uma captura da área dinâmica para dados do processo <xliff:g id="PROC">%1$s</xliff:g> para partilhar. Atenção: esta captura da área dinâmica para dados pode conter informações pessoais confidenciais a que o processo tem acesso, que podem incluir coisas que escreveu."</string>
@@ -1324,7 +1330,7 @@
     <string name="decline" msgid="6490507610282145874">"Recusar"</string>
     <string name="select_character" msgid="3352797107930786979">"Introduzir carácter"</string>
     <string name="sms_control_title" msgid="4748684259903148341">"A enviar mensagens SMS"</string>
-    <string name="sms_control_message" msgid="6574313876316388239">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; está a enviar um grande número de mensagens SMS. Pretende autorizar que a app continue a enviar mensagens?"</string>
+    <string name="sms_control_message" msgid="6574313876316388239">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; está a enviar um grande número de mensagens SMS. Quer autorizar que a app continue a enviar mensagens?"</string>
     <string name="sms_control_yes" msgid="4858845109269524622">"Permitir"</string>
     <string name="sms_control_no" msgid="4845717880040355570">"Recusar"</string>
     <string name="sms_short_code_confirm_message" msgid="1385416688897538724">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; gostaria de enviar uma mensagem para &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
@@ -1386,14 +1392,14 @@
     <string name="usb_contaminant_not_detected_title" msgid="2651167729563264053">"É seguro utilizar a porta USB"</string>
     <string name="usb_contaminant_not_detected_message" msgid="892863190942660462">"O telemóvel já não deteta líquidos nem resíduos."</string>
     <string name="taking_remote_bugreport_notification_title" msgid="1582531382166919850">"A criar relatório de erro…"</string>
-    <string name="share_remote_bugreport_notification_title" msgid="6708897723753334999">"Pretende partilhar o relatório de erro?"</string>
+    <string name="share_remote_bugreport_notification_title" msgid="6708897723753334999">"Quer partilhar o relatório de erro?"</string>
     <string name="sharing_remote_bugreport_notification_title" msgid="3077385149217638550">"A partilhar relatório de erro…"</string>
     <string name="share_remote_bugreport_notification_message_finished" msgid="7325635795739260135">"O seu gestor solicitou um relatório de erro para ajudar na resolução de problemas deste dispositivo. As aplicações e os dados podem ser partilhados."</string>
     <string name="share_remote_bugreport_action" msgid="7630880678785123682">"PARTILHAR"</string>
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"RECUSAR"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Escolher o método de entrada"</string>
     <string name="show_ime" msgid="6406112007347443383">"Manter no ecrã enquanto o teclado físico estiver ativo"</string>
-    <string name="hardware" msgid="1800597768237606953">"Mostrar o teclado virtual"</string>
+    <string name="hardware" msgid="3611039921284836033">"Usar o teclado no ecrã"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configure o dispositivo <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configure teclados físicos"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Toque para selecionar o idioma e o esquema"</string>
@@ -1402,7 +1408,7 @@
     <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"Sobrepor a outras apps"</string>
     <string name="alert_windows_notification_channel_name" msgid="3437528564303192620">"A app <xliff:g id="NAME">%s</xliff:g> sobrepõe-se a outras aplicações"</string>
     <string name="alert_windows_notification_title" msgid="6331662751095228536">"O <xliff:g id="NAME">%s</xliff:g> sobrepõe-se a outras app"</string>
-    <string name="alert_windows_notification_message" msgid="6538171456970725333">"Se não pretende que a app <xliff:g id="NAME">%s</xliff:g> utilize esta funcionalidade, toque para abrir as definições e desative-a."</string>
+    <string name="alert_windows_notification_message" msgid="6538171456970725333">"Se não quer que a app <xliff:g id="NAME">%s</xliff:g> utilize esta funcionalidade, toque para abrir as definições e desative-a."</string>
     <string name="alert_windows_notification_turn_off_action" msgid="7805857234839123780">"Desligar"</string>
     <string name="ext_media_checking_notification_title" msgid="8299199995416510094">"A verificar o <xliff:g id="NAME">%s</xliff:g>…"</string>
     <string name="ext_media_checking_notification_message" msgid="2231566971425375542">"A rever o conteúdo atual…"</string>
@@ -1478,7 +1484,7 @@
     <string name="dial_number_using" msgid="6060769078933953531">"Marcar número\nutilizando <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="create_contact_using" msgid="6200708808003692594">"Criar contacto\nutilizando <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="grant_credentials_permission_message_header" msgid="5365733888842570481">"Uma ou várias das aplicações seguintes solicitam permissão para aceder à sua conta, agora e no futuro."</string>
-    <string name="grant_credentials_permission_message_footer" msgid="1886710210516246461">"Pretende autorizar este pedido?"</string>
+    <string name="grant_credentials_permission_message_footer" msgid="1886710210516246461">"Quer autorizar este pedido?"</string>
     <string name="grant_permissions_header_text" msgid="3420736827804657201">"Pedido de acesso"</string>
     <string name="allow" msgid="6195617008611933762">"Permitir"</string>
     <string name="deny" msgid="6632259981847676572">"Recusar"</string>
@@ -1530,7 +1536,7 @@
     <string name="gpsVerifYes" msgid="3719843080744112940">"Sim"</string>
     <string name="gpsVerifNo" msgid="1671201856091564741">"Não"</string>
     <string name="sync_too_many_deletes" msgid="6999440774578705300">"Limite de eliminações excedido"</string>
-    <string name="sync_too_many_deletes_desc" msgid="7409327940303504440">"Há <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> itens eliminados de <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>, conta <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>. O que pretende fazer?"</string>
+    <string name="sync_too_many_deletes_desc" msgid="7409327940303504440">"Há <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> itens eliminados de <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>, conta <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>. O que quer fazer?"</string>
     <string name="sync_really_delete" msgid="5657871730315579051">"Eliminar os itens"</string>
     <string name="sync_undo_deletes" msgid="5786033331266418896">"Anular as eliminações"</string>
     <string name="sync_do_nothing" msgid="4528734662446469646">"Não fazer nada por agora"</string>
@@ -1619,7 +1625,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"Tablet"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telemóvel"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Altif. estação ancoragem"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Altif. estação carregamento"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Dispositivo externo"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Auscultadores"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1682,11 +1688,9 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" - "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Remover"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Aumentar o volume acima do nível recomendado?\n\nOuvir com um volume elevado durante longos períodos poderá ser prejudicial para a sua audição."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Aviso,\nExcedeu a quantidade de sinais sonoros altos que uma pessoa pode ouvir em segurança numa semana através de auscultadores.\n\nUltrapassar este limite prejudica permanentemente a sua audição."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Aviso,\nExcedeu 5 vezes a quantidade de sinais sonoros altos que uma pessoa pode ouvir em segurança numa semana através de auscultadores.\n\nO volume foi reduzido para proteger a sua audição."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"O nível ao qual está a ouvir conteúdo multimédia pode resultar em danos auditivos se o fizer durante longos períodos.\n\nContinuar a ouvir a este nível durante longos períodos pode ser prejudicial para a sua audição."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Aviso,\nEstá a ouvir conteúdo reproduzido com um volume alto e inseguro.\n\nContinuar a ouvir a este volume vai prejudicar permanentemente a sua audição."</string>
-    <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Pretende utilizar o atalho de acessibilidade?"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Quer continuar a ouvir com um volume elevado?\n\nO volume dos auscultadores está elevado há mais tempo do que o recomendado, o que pode ser prejudicial para a sua audição"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Som alto detetado\n\nO volume dos auscultadores tem estado mais elevado do que o recomendado, o que pode ser prejudicial para a sua audição"</string>
+    <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Quer utilizar o atalho de acessibilidade?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Quando o atalho está ativado, premir ambos os botões de volume durante 3 segundos inicia uma funcionalidade de acessibilidade."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Ativar o atalho das funcionalidades de acessibilidade?"</string>
     <string name="accessibility_shortcut_multiple_service_warning" msgid="3740723309483706911">"Manter premidas ambas as teclas de volume durante alguns segundos ativa as funcionalidades de acessibilidade. Estas podem alterar a forma como o seu dispositivo funciona.\n\nFuncionalidades atuais:\n<xliff:g id="SERVICE">%1$s</xliff:g>\npode alterar as funcionalidades selecionadas em Definições &gt; Acessibilidade."</string>
@@ -1852,7 +1856,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Para sair, deslize rapidamente para baixo a partir da parte superior."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"OK"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Rode para uma melhor visualização"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Saia do ecrã dividido para uma melhor visualização"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Abra <xliff:g id="NAME">%s</xliff:g> em ecrã inteiro para uma melhor visualização"</string>
     <string name="done_label" msgid="7283767013231718521">"Concluído"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Controlo de deslize circular das horas"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Controlo de deslize circular dos minutos"</string>
@@ -1958,7 +1962,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"A app não está disponível"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"De momento, a app <xliff:g id="APP_NAME">%1$s</xliff:g> não está disponível."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> indisponível"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Autorização necessária"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Pedido de autorização suprimido"</string>
     <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>
@@ -1969,6 +1973,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Esta app está a pedir autorizações adicionais, mas não é possível conceder autorizações numa sessão de streaming. Comece por conceder a autorização no seu dispositivo Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Esta app está a pedir autorizações adicionais, mas não é possível conceder autorizações numa sessão de streaming. Comece por conceder a autorização no seu tablet."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Esta app está a pedir autorizações adicionais, mas não é possível conceder autorizações numa sessão de streaming. Comece por conceder a autorização no seu 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>
@@ -1977,6 +1984,7 @@
     <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="5246906284426844596">"Esta app foi criada para uma versão mais antiga do Android. Pode não funcionar corretamente e não inclui as proteções de privacidade e segurança mais recentes. Verifique se existem atualizações ou contacte o programador da app."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Rever atualizações"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Esta app não é compatível com a versão mais recente do Android. Verifique se existem atualizações ou contacte o programador da app."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tem mensagens novas"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Abra a app de SMS para ver"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Algumas funcionalidades limitadas"</string>
@@ -2018,14 +2026,14 @@
     <string name="autofill_error_cannot_autofill" msgid="6528827648643138596">"Não é possível preencher automaticamente o conteúdo"</string>
     <string name="autofill_picker_no_suggestions" msgid="1076022650427481509">"Sem sugestões do preenchimento automático"</string>
     <string name="autofill_picker_some_suggestions" msgid="5560549696296202701">"{count,plural, =1{Uma sugestão do preenchimento automático}many{# sugestões de preenchimento automático}other{# sugestões de preenchimento automático}}"</string>
-    <string name="autofill_save_title" msgid="7719802414283739775">"Pretende guardar em "<b>"<xliff:g id="LABEL">%1$s</xliff:g>"</b>"?"</string>
-    <string name="autofill_save_title_with_type" msgid="3002460014579799605">"Pretende guardar <xliff:g id="TYPE">%1$s</xliff:g> em "<b>"<xliff:g id="LABEL">%2$s</xliff:g>"</b>"?"</string>
-    <string name="autofill_save_title_with_2types" msgid="3783270967447869241">"Pretende guardar <xliff:g id="TYPE_0">%1$s</xliff:g> e <xliff:g id="TYPE_1">%2$s</xliff:g> em "<b>"<xliff:g id="LABEL">%3$s</xliff:g>"</b>"?"</string>
-    <string name="autofill_save_title_with_3types" msgid="6598228952100102578">"Pretende guardar <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> e <xliff:g id="TYPE_2">%3$s</xliff:g> em "<b>"<xliff:g id="LABEL">%4$s</xliff:g>"</b>"?"</string>
-    <string name="autofill_update_title" msgid="3630695947047069136">"Pretende atualizar em "<b>"<xliff:g id="LABEL">%1$s</xliff:g>"</b>"?"</string>
-    <string name="autofill_update_title_with_type" msgid="5264152633488495704">"Pretende atualizar <xliff:g id="TYPE">%1$s</xliff:g> em "<b>"<xliff:g id="LABEL">%2$s</xliff:g>"</b>"?"</string>
-    <string name="autofill_update_title_with_2types" msgid="1797514386321086273">"Pretende atualizar <xliff:g id="TYPE_0">%1$s</xliff:g> e <xliff:g id="TYPE_1">%2$s</xliff:g> em "<b>"<xliff:g id="LABEL">%3$s</xliff:g>"</b>"?"</string>
-    <string name="autofill_update_title_with_3types" msgid="1312232153076212291">"Pretende atualizar estes itens em "<b>"<xliff:g id="LABEL">%4$s</xliff:g>"</b>": <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> e <xliff:g id="TYPE_2">%3$s</xliff:g>?"</string>
+    <string name="autofill_save_title" msgid="7719802414283739775">"Quer guardar em "<b>"<xliff:g id="LABEL">%1$s</xliff:g>"</b>"?"</string>
+    <string name="autofill_save_title_with_type" msgid="3002460014579799605">"Quer guardar <xliff:g id="TYPE">%1$s</xliff:g> em "<b>"<xliff:g id="LABEL">%2$s</xliff:g>"</b>"?"</string>
+    <string name="autofill_save_title_with_2types" msgid="3783270967447869241">"Quer guardar <xliff:g id="TYPE_0">%1$s</xliff:g> e <xliff:g id="TYPE_1">%2$s</xliff:g> em "<b>"<xliff:g id="LABEL">%3$s</xliff:g>"</b>"?"</string>
+    <string name="autofill_save_title_with_3types" msgid="6598228952100102578">"Quer guardar <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> e <xliff:g id="TYPE_2">%3$s</xliff:g> em "<b>"<xliff:g id="LABEL">%4$s</xliff:g>"</b>"?"</string>
+    <string name="autofill_update_title" msgid="3630695947047069136">"Quer atualizar em "<b>"<xliff:g id="LABEL">%1$s</xliff:g>"</b>"?"</string>
+    <string name="autofill_update_title_with_type" msgid="5264152633488495704">"Quer atualizar <xliff:g id="TYPE">%1$s</xliff:g> em "<b>"<xliff:g id="LABEL">%2$s</xliff:g>"</b>"?"</string>
+    <string name="autofill_update_title_with_2types" msgid="1797514386321086273">"Quer atualizar <xliff:g id="TYPE_0">%1$s</xliff:g> e <xliff:g id="TYPE_1">%2$s</xliff:g> em "<b>"<xliff:g id="LABEL">%3$s</xliff:g>"</b>"?"</string>
+    <string name="autofill_update_title_with_3types" msgid="1312232153076212291">"Quer atualizar estes itens em "<b>"<xliff:g id="LABEL">%4$s</xliff:g>"</b>": <xliff:g id="TYPE_0">%1$s</xliff:g>, <xliff:g id="TYPE_1">%2$s</xliff:g> e <xliff:g id="TYPE_2">%3$s</xliff:g>?"</string>
     <string name="autofill_save_yes" msgid="8035743017382012850">"Guardar"</string>
     <string name="autofill_save_no" msgid="9212826374207023544">"Não, obrigado"</string>
     <string name="autofill_save_notnow" msgid="2853932672029024195">"Agora não"</string>
@@ -2064,7 +2072,7 @@
     <string name="harmful_app_warning_uninstall" msgid="6472912975664191772">"DESINSTALAR"</string>
     <string name="harmful_app_warning_open_anyway" msgid="5963657791740211807">"ABRIR MESMO ASSIM"</string>
     <string name="harmful_app_warning_title" msgid="8794823880881113856">"Aplicação prejudicial detetada"</string>
-    <string name="slices_permission_request" msgid="3677129866636153406">"A app <xliff:g id="APP_0">%1$s</xliff:g> pretende mostrar partes da app <xliff:g id="APP_2">%2$s</xliff:g>."</string>
+    <string name="slices_permission_request" msgid="3677129866636153406">"A app <xliff:g id="APP_0">%1$s</xliff:g> quer mostrar partes da app <xliff:g id="APP_2">%2$s</xliff:g>."</string>
     <string name="screenshot_edit" msgid="7408934887203689207">"Editar"</string>
     <string name="volume_dialog_ringer_guidance_vibrate" msgid="2055927873175228519">"As chamadas e as notificações vibram."</string>
     <string name="volume_dialog_ringer_guidance_silent" msgid="1011246774949993783">"É desativado o som das chamadas e das notificações."</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Não é possível abrir este conteúdo com apps de trabalho"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Não é possível partilhar este conteúdo com apps pessoais"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Não é possível abrir este conteúdo com apps pessoais"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Perfil de trabalho em pausa"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Tocar para ativar"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"As apps de trabalho estão pausadas"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Retomar"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Sem apps de trabalho"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Sem apps pessoais"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Abrir a app <xliff:g id="APP">%s</xliff:g> de trabalho?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Abrir na app <xliff:g id="APP">%s</xliff:g> pessoal?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Abrir na app <xliff:g id="APP">%s</xliff:g> de trabalho?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Ligar a partir da app de trabalho?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Mudar para a app de trabalho?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"A sua organização só lhe permite fazer chamadas a partir de apps de trabalho"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"A sua organização só lhe permite enviar mensagens a partir de apps de trabalho"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usar navegador pessoal"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usar navegador de trabalho"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Ligar"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Mudar"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN para desbloqueio de rede do cartão SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN para desbloqueio do subconjunto da rede do cartão SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN para desbloqueio empresarial do cartão SIM"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Não é possível aceder à câmara do telemóvel a partir do dispositivo <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Não é possível aceder à câmara do tablet a partir do dispositivo <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Não é possível aceder a isto durante o streaming. Em alternativa, experimente no telemóvel."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Não é possível ver o ecrã no ecrã durante o streaming"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Predefinição do sistema"</string>
     <string name="default_card_name" msgid="9198284935962911468">"CARTÃO <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Autorização do perfil de relógio associado para gerir relógios"</string>
@@ -2318,11 +2332,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Permite que uma app associada em segundo plano inicie serviços em primeiro plano."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"O microfone está disponível"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"O microfone está bloqueado"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dois ecrãs"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"A funcionalidade Dois ecrãs está ativada"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Funcionalidade Dual Screen ativada"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> está a usar ambos os ecrãs para mostrar conteúdo"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"O dispositivo está a ficar demasiado quente"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"A funcionalidade Dois ecrãs está indisponível porque o seu telemóvel está a ficar demasiado quente"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"A funcionalidade Dual Screen está indisponível porque o seu telemóvel está a ficar demasiado quente"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"A funcionalidade Dual Screen está indisponível"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"A funcionalidade Dual Screen está indisponível porque a Poupança de bateria está ativada. Pode desativar esta opção nas Definições."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Aceder às Definições"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 2d502bd..2ca6ec7 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sistema Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Mudar para o perfil pessoal"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Perfil de trabalho"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Mudar para o app <xliff:g id="APP_NAME">%1$s</xliff:g> do perfil pessoal"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Mudar para o app <xliff:g id="APP_NAME">%1$s</xliff:g> do perfil de trabalho"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Contatos"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"acesse seus contatos"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Localização"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite que o app controle a vibração."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite que o app acesse o estado da vibração."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"ligar diretamente para números de telefone"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Permite que o app ligue para números de telefone sem sua intervenção. Isso pode resultar em cobranças ou chamadas inesperadas. Esta opção não permite que o app ligue para números de emergência. Apps maliciosos podem gerar custos com chamadas feitas sem sua confirmação."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Permite que o app faça ligações para números de telefone sem a sua intervenção. Ligações ou cobranças inesperadas podem acontecer. Isso não permite que o app ligue para números de emergência. Você pode receber cobranças indesejadas de ligações feitas por apps maliciosos sem a sua confirmação. Além disso, esses apps podem discar códigos de operadora que automaticamente encaminham ligações recebidas para outro número."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"acessar serviço de mensagens instantâneas para chamadas"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permite que o app use o serviço de mensagens instantâneas para fazer chamadas sem sua intervenção."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ler status e identidade do telefone"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permite que o app acesse as informações preferidas de serviço de pagamento por NFC, como auxílios registrados ou destinos de trajetos."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"controlar a comunicação a curta distância"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Permite que o app se comunique com leitores, cartões e etiqueta NFC (comunicação a curta distância)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Evento de transação do Elemento de segurança"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Permite que o app receba informações sobre transações que ocorrem em um Elemento de segurança."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"desativar o bloqueio de tela"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Permite que o app desative o bloqueio de teclas e qualquer segurança por senha associada. Por exemplo, o telefone desativa o bloqueio de telas ao receber uma ligação e o reativa quando a chamada é finalizada."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"Solicitar complexidade do bloqueio de tela"</string>
@@ -615,17 +619,20 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Usar biometria ou bloqueio de tela"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Confirme que é você"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Use seus dados biométricos para continuar"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Use sua impressão digital para continuar"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Use seu rosto para continuar"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Use sua autenticação biométrica ou o bloqueio de tela para continuar"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Hardware biométrico indisponível"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autenticação cancelada"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Não reconhecido"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Rosto não reconhecido"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autenticação cancelada"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nenhum PIN, padrão ou senha configurado"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Erro na autenticação"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usar bloqueio de tela"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Insira seu bloqueio de tela para continuar"</string>
     <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Pressione o sensor com firmeza"</string>
-    <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Não foi possível reconhecer a impressão digital. Tente de novo."</string>
+    <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Impressão digital não reconhecida. Tente de novo."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Limpe o sensor de impressão digital e tente novamente"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Limpe o sensor e tente novamente"</string>
     <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Pressione o sensor com firmeza"</string>
@@ -634,7 +641,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Claro demais"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"O botão liga/desliga foi pressionado"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Ajuste a posição do dedo"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mude a posição do dedo ligeiramente a cada momento"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Mude ligeiramente a posição do dedo em cada registro"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impressão digital não reconhecida"</string>
@@ -644,7 +651,7 @@
     <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Rosto autenticado, pressione \"Confirmar\""</string>
     <string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Hardware de impressão digital não disponível."</string>
     <string name="fingerprint_error_no_space" msgid="7285481581905967580">"Não foi possível configurar a impressão digital"</string>
-    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"A configuração da impressão digital expirou. Tente de novo."</string>
+    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Tempo de configuração esgotado. Tente de novo."</string>
     <string name="fingerprint_error_canceled" msgid="540026881380070750">"Operação de impressão digital cancelada."</string>
     <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Operação de impressão digital cancelada pelo usuário."</string>
     <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Excesso de tentativas. Use o bloqueio de tela."</string>
@@ -693,7 +700,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Olhe diretamente para o smartphone"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Olhe diretamente para o smartphone"</string>
     <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_obscured" msgid="4917643294953326639">"Tire tudo que possa esconder seu rosto."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpe a parte superior da tela, inclusive a barra preta"</string>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -701,7 +708,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Máscara detectada. Seu rosto precisa estar visível."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Impossível verificar rosto. Hardware indisponível."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Operação facial cancelada."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Desbloqueio facial cancelado pelo usuário"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Excesso de tentativas. Tente novamente mais tarde."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Muitas tentativas. Desbloqueio facial indisponível."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Muitas tentativas. Como alternativa, use o bloqueio de tela."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Não é possível verificar o rosto. Tente novamente."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"O Desbloqueio facial não foi configurado"</string>
@@ -1256,7 +1262,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Iniciando apps."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Concluindo a inicialização."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Você pressionou o botão liga/desliga. Normalmente, essa ação desliga a tela.\n\nToque levemente na tela durante a configuração da impressão digital."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Desligue a tela para encerrar a configuração"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Desligue a tela para encerrar a configuração."</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Desativar"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continuar a verificação da digital?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Você pressionou o botão liga/desliga. Normalmente, essa ação desliga a tela.\n\nToque levemente na tela para verificar sua impressão digital."</string>
@@ -1365,7 +1371,7 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"MIDI via USB ativado"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Dispositivo conectado como Webcam"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"Acessório USB conectado"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"Toque para ver mais opções."</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"Toque para conferir mais opções."</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Carregando dispositivo conectado. Toque para ver mais opções."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Acessório de áudio analógico detectado"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"O dispositivo anexo não é compatível com esse smartphone. Toque para saber mais."</string>
@@ -1393,7 +1399,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"RECUSAR"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Selecione o método de entrada"</string>
     <string name="show_ime" msgid="6406112007347443383">"Mantém o teclado virtual na tela enquanto o teclado físico está ativo"</string>
-    <string name="hardware" msgid="1800597768237606953">"Mostrar teclado virtual"</string>
+    <string name="hardware" msgid="3611039921284836033">"Usar teclado na tela"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configure o dispositivo <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configure teclados físicos"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Toque para selecionar o idioma e o layout"</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Remover"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Aumentar o volume acima do nível recomendado?\n\nOuvir em volume alto por longos períodos pode danificar sua audição."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Alerta,\nVocê excedeu a quantidade semanal de sinais de ruído alto que pode ser ouvida por fones de ouvido com segurança.\n\nUltrapassar esse limite vai prejudicar sua audição permanentemente."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Alerta,\nVocê excedeu em cinco vezes a quantidade semanal de sinais de ruído alto que pode ser ouvida por fones de ouvido com segurança.\n\nO volume foi diminuído para proteger sua audição."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Você está escutando mídia em um volume que pode resultar em danos à audição quando mantido por períodos prolongados.\n\nContinuar a reproduzir mídia nesse volume por períodos prolongados pode resultar em danos à sua audição."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Alerta,\nVocê está ouvindo conteúdo em um volume perigoso.\n\nContinuar a ouvir nesse volume vai prejudicar sua audição permanentemente."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Continuar ouvindo em volume alto?\n\nO volume dos fones de ouvido está alto há mais tempo que o recomendado. Isso pode causar danos à audição"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Som alto detectado\n\nO volume dos fones de ouvido está mais alto que o recomendado. Isso pode causar danos à audição"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Usar atalho de Acessibilidade?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Quando o atalho estiver ativado, pressione os dois botões de volume por três segundos para iniciar um recurso de acessibilidade."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Ativar atalho para recursos de acessibilidade?"</string>
@@ -1729,7 +1733,7 @@
     <string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"Para alternar entre recursos, deslize de baixo para cima na tela com três dedos, sem soltar."</string>
     <string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Ampliação"</string>
     <string name="user_switched" msgid="7249833311585228097">"Usuário atual <xliff:g id="NAME">%1$s</xliff:g>."</string>
-    <string name="user_switching_message" msgid="1912993630661332336">"Alternando para <xliff:g id="NAME">%1$s</xliff:g>…"</string>
+    <string name="user_switching_message" msgid="1912993630661332336">"Mudando para <xliff:g id="NAME">%1$s</xliff:g>…"</string>
     <string name="user_logging_out_message" msgid="7216437629179710359">"Desconectando <xliff:g id="NAME">%1$s</xliff:g>…"</string>
     <string name="owner_name" msgid="8713560351570795743">"Proprietário"</string>
     <string name="guest_name" msgid="8502103277839834324">"Visitante"</string>
@@ -1852,7 +1856,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Para sair, deslize de cima para baixo."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Entendi"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Gire a tela para ter uma visualização melhor"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Saia da tela dividida para ter uma visualização melhor"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Abra o app <xliff:g id="NAME">%s</xliff:g> em tela cheia para ter uma melhor visualização"</string>
     <string name="done_label" msgid="7283767013231718521">"Concluído"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Controle deslizante circular das horas"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Controle deslizante circular dos minutos"</string>
@@ -1958,7 +1962,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"O app não está disponível"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> não está disponível no momento."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> indisponível"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Permissão necessária"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Solicitação de permissão suprimida"</string>
     <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>
@@ -1969,6 +1973,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Esse app está solicitando permissões extras, mas elas não podem ser concedidas em uma sessão de streaming. Dê permissão pelo dispositivo Android TV primeiro."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Esse app está solicitando permissões extras, mas elas não podem ser concedidas em uma sessão de streaming. Dê permissão pelo tablet primeiro."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Esse app está solicitando permissões extras, mas elas não podem ser concedidas em uma sessão de streaming. Dê permissão pelo smartphone primeiro."</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>
@@ -1977,6 +1984,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Não é possível acessar essa configuração pelo seu <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo smartphone."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Este app foi criado para uma versão mais antiga do Android. Ele pode não funcionar corretamente e não inclui as proteções de privacidade e segurança mais recentes. Verifique se há uma atualização ou entre em contato com o desenvolvedor do app."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Procurar atualizações"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Este app não é compatível com a versão mais recente do Android. Verifique se há uma atualização ou entre em contato com o desenvolvedor do app."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Você tem mensagens novas"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Abra o app de SMS para ver"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Algumas funções são limitadas"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Não é possível abrir esse conteúdo com apps de trabalho"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Não é possível compartilhar esse conteúdo com apps pessoais"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Não é possível abrir esse conteúdo com apps pessoais"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"O perfil de trabalho está pausado"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Toque para ativar"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Os apps de trabalho foram pausados"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Reativar"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nenhum app de trabalho"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nenhum app pessoal"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Abrir <xliff:g id="APP">%s</xliff:g> do perfil de trabalho?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Abrir no app <xliff:g id="APP">%s</xliff:g> do perfil pessoal?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Abrir no app <xliff:g id="APP">%s</xliff:g> do perfil de trabalho?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Ligar pelo app de trabalho?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Trocar para o app de trabalho?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Sua organização só permite fazer ligações usando apps de trabalho"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Sua organização só permite o envio de mensagens usando apps de trabalho"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usar o navegador pessoal"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usar o navegador de trabalho"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Ligar"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Trocar"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN para desbloqueio da rede do chip"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN para desbloqueio do subconjunto de rede do chip"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN para desbloqueio do chip corporativo"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Não é possível acessar a câmera do smartphone pelo <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Não é possível acessar a câmera do tablet pelo <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Não é possível acessar esse conteúdo durante o streaming. Tente pelo smartphone."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Não é possível usar o modo picture-in-picture durante o streaming"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Padrão do sistema"</string>
     <string name="default_card_name" msgid="9198284935962911468">"CHIP <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Permissão do perfil do relógio complementar para gerenciar relógios"</string>
@@ -2326,7 +2340,7 @@
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"O recurso Dual Screen está indisponível"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"O recurso Dual Screen está indisponível porque a Economia de bateria está ativada. É possível desativar essa opção nas configurações."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Ir para Configurações"</string>
-    <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Desativar"</string>
+    <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Desligar"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"Dispositivo <xliff:g id="DEVICE_NAME">%s</xliff:g> configurado"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Layout do teclado definido como <xliff:g id="LAYOUT_1">%s</xliff:g>. Toque para mudar."</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Layout do teclado definido como <xliff:g id="LAYOUT_1">%1$s</xliff:g> e <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Toque para mudar."</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index d3dd9fb..345f67f 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sistemul Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Comută la profilul personal"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Comută la profilul de serviciu"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Comută la <xliff:g id="APP_NAME">%1$s</xliff:g> personal"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Comută la <xliff:g id="APP_NAME">%1$s</xliff:g> pentru serviciu"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Agendă"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"să acceseze agenda"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Locație"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Permite aplicației să controleze mecanismul de vibrare."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Permite aplicației să acceseze modul de vibrații."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"să sune direct la numere de telefon"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Permite aplicației să apeleze numere de telefon fără intervenția ta. Acest lucru poate determina apariția unor taxe sau a unor apeluri neașteptate. Cu această permisiune aplicația nu poate apela numerele de urgență. Aplicațiile rău intenționate pot acumula costuri prin efectuarea unor apeluri fără confirmare."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Permite aplicației să apeleze numere de telefon fără intervenția ta. Acest lucru poate duce la taxe sau apeluri neașteptate. Aplicația nu poate apela și numere de urgență. Aplicațiile rău intenționate pot să te coste, deoarece fac apeluri fără confirmare sau formează coduri de la operator care redirecționează automat apelurile primite la alt număr."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"accesează serviciul de apelare IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Permite aplicației să folosească serviciul IMS pentru apeluri, fără intervenția ta."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"citește starea și identitatea telefonului"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permite aplicației să obțină informații despre serviciul de plăți NFC preferat, de exemplu, identificatorii de aplicație înregistrați și destinația traseului."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"controlare schimb de date prin Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Permite aplicației să comunice cu etichetele, cardurile și cititoarele NFC (Near Field Communication)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Eveniment de tranzacție în cadrul unui element securizat"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Permite aplicației să primească informații despre tranzacțiile care au loc în cadrul unui element securizat."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"dezactivează blocarea ecranului"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Permite aplicației să dezactiveze blocarea tastelor și orice modalitate asociată de securizare prin parolă. De exemplu, telefonul dezactivează blocarea tastelor când se primește un apel telefonic și reactivează blocarea tastelor la terminarea apelului."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"să solicite complexitatea blocării ecranului"</string>
@@ -615,10 +619,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Folosește sistemele biometrice sau blocarea ecranului"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Confirmă-ți identitatea"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Folosește sistemele biometrice pentru a continua"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Folosește amprenta pentru a continua"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Folosește-ți chipul pentru a continua"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Folosește sistemele biometrice sau blocarea ecranului pentru a continua"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Hardware biometric indisponibil"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autentificarea a fost anulată"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Nu este recunoscut"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Fața nu a fost recunoscută"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autentificarea a fost anulată"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nu este setat un cod PIN, un model sau o parolă"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Eroare la autentificare"</string>
@@ -690,7 +697,7 @@
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Reînregistrează-ți chipul."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Chipul nu a fost recunoscut. Reîncearcă."</string>
     <string name="face_acquired_too_similar" msgid="8882920552674125694">"Schimbă ușor poziția capului"</string>
-    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Priviți direct spre telefon"</string>
+    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Privește mai direct spre telefon"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Privește mai direct spre telefon"</string>
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Privește mai direct spre telefon"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Îndepărtează orice îți ascunde chipul."</string>
@@ -701,7 +708,7 @@
     <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nu se poate crea modelul facial. Reîncearcă."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"S-au detectat ochelari de culoare închisă. Chipul trebuie să fie vizibil în totalitate."</string>
-    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"S-a detectat un articol care acoperă chipul. Chipul trebuie să fie vizibil în totalitate."</string>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Un articol acoperă chipul. Întreg chipul trebuie să fie vizibil."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Nu se poate confirma fața. Hardware-ul nu este disponibil."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Operațiunea privind chipul a fost anulată."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Deblocarea facială a fost anulată de utilizator"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Prea multe încercări. Reîncearcă mai târziu."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Prea multe încercări. Deblocarea facială nu este disponibilă."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Prea multe încercări. Folosește blocarea ecranului."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Nu se poate confirma fața. Încearcă din nou."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Nu ai configurat Deblocarea facială"</string>
@@ -1256,7 +1262,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Se pornesc aplicațiile."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Se finalizează pornirea."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Ai apăsat butonul de pornire. De obicei, astfel se dezactivează ecranul.\n\nAtinge ușor când îți configurezi amprenta."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Ca să termini configurarea, dezactivează ecranul"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Termină configurarea dezactivând ecranul"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Dezactivează"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Continui cu verificarea amprentei?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Ai apăsat butonul de pornire. De obicei, astfel se dezactivează ecranul.\n\nAtinge ușor pentru verificarea amprentei."</string>
@@ -1369,7 +1375,7 @@
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Se încarcă dispozitivul conectat. Atinge pentru mai multe opțiuni."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"S-a detectat un accesoriu audio analogic"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Dispozitivul atașat nu este compatibil cu acest telefon. Atinge pentru a afla mai multe."</string>
-    <string name="adb_active_notification_title" msgid="408390247354560331">"Remedierea erorilor prin USB conectată"</string>
+    <string name="adb_active_notification_title" msgid="408390247354560331">"Remedierea prin USB conectată"</string>
     <string name="adb_active_notification_message" msgid="5617264033476778211">"Atinge pentru a dezactiva."</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Selectează pentru a dezactiva remedierea erorilor prin USB."</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Remedierea erorilor wireless este activă"</string>
@@ -1393,7 +1399,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"REFUZ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Alege metoda de introducere de text"</string>
     <string name="show_ime" msgid="6406112007347443383">"Se păstrează pe ecran cât timp este activată tastatura fizică"</string>
-    <string name="hardware" msgid="1800597768237606953">"Afișează tastatura virtuală"</string>
+    <string name="hardware" msgid="3611039921284836033">"Folosește tastatura pe ecran"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Configurează <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Configurează tastaturi fizice"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Atinge pentru a selecta limba și aspectul"</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Elimină"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Mărești volumul peste nivelul recomandat?\n\nDacă asculți perioade lungi la volum ridicat, auzul poate fi afectat."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Avertisment\nAi depășit numărul de semnale cu sunet puternic pe care le poți asculta într-o săptămână în căști.\n\nDepășirea limitei îți va afecta definitiv auzul."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Avertisment\nAi depășit de cinci ori numărul de semnale cu sunet puternic pe care le poți asculta într-o săptămână în căști.\n\nAm micșorat volumul pentru a-ți proteja auzul."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Nivelul la care asculți conținut media îți poate afecta auzul dacă este susținut pe perioade lungi de timp.\n\nContinuarea redării la acest nivel pentru perioade lungi de timp îți poate afecta auzul."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Avertisment\nAsculți conținut zgomotos la un nivel de sunet nesigur.\n\nContinuarea ascultării la acest volum îți va afecta definitiv auzul."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Vrei să asculți în continuare la volum ridicat?\n\nVolumul căștilor a fost ridicat mai mult timp decât este recomandat, iar acest lucru îți poate afecta auzul"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"S-au detectat sunete cu volum ridicat\n\nVolumul căștilor a fost mai ridicat decât este recomandat, iar acest lucru îți poate afecta auzul"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Folosești comanda rapidă pentru accesibilitate?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Când comanda rapidă e activată, dacă apeși ambele butoane de volum timp de trei secunde, vei lansa o funcție de accesibilitate."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Activezi comanda rapidă pentru funcțiile de accesibilitate?"</string>
@@ -1852,7 +1856,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Pentru a ieși, glisează de sus în jos."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Am înțeles"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Rotește pentru o previzualizare mai bună"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Ieși din ecranul împărțit pentru o previzualizare mai bună"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Deschide <xliff:g id="NAME">%s</xliff:g> pe ecran complet pentru o imagine mai bună"</string>
     <string name="done_label" msgid="7283767013231718521">"Terminat"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Selector circular pentru ore"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Selector circular pentru minute"</string>
@@ -1952,13 +1956,13 @@
     <string name="app_suspended_default_message" msgid="6451215678552004172">"Momentan, aplicația <xliff:g id="APP_NAME_0">%1$s</xliff:g> nu este disponibilă. Aceasta este gestionată de <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
     <string name="app_suspended_more_details" msgid="211260942831587014">"Află mai multe"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Anulează întreruperea aplicației"</string>
-    <string name="work_mode_off_title" msgid="6367463960165135829">"Reactivezi aplicații lucru?"</string>
+    <string name="work_mode_off_title" msgid="6367463960165135829">"Reactivezi aplicații de lucru?"</string>
     <string name="work_mode_turn_on" msgid="5316648862401307800">"Reactivează"</string>
     <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Urgență"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"Aplicația nu este disponibilă"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> nu este disponibilă momentan."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> nu este disponibilă"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Necesită permisiune"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Solicitarea de permisiune s-a suprimat"</string>
     <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">"Continuă pe telefon"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Microfon indisponibil"</string>
@@ -1969,6 +1973,9 @@
     <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încearcă pe dispozitivul Android TV."</string>
     <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încearcă pe tabletă."</string>
     <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încearcă pe telefon."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tv" msgid="4706276040125072077">"Aplicația solicită permisiuni suplimentare, dar acestea nu pot fi acordate într-o sesiune de streaming. Acordă permisiunea întâi pe dispozitivul Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Aplicația solicită permisiuni suplimentare, dar acestea nu pot fi acordate într-o sesiune de streaming. Acordă permisiunea întâi pe tabletă."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Aplicația solicită permisiuni suplimentare, dar acestea nu pot fi acordate într-o sesiune de streaming. Acordă permisiunea întâi pe telefon."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Aplicația necesită securitate suplimentară. Încearcă pe dispozitivul Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Aplicația necesită securitate suplimentară. Încearcă pe tabletă."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Aplicația necesită securitate suplimentară. Încearcă pe telefon."</string>
@@ -1977,6 +1984,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Nu se poate accesa pe <xliff:g id="DEVICE">%1$s</xliff:g>. Încearcă pe telefon."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Aplicația a fost creată pentru o versiune mai veche de Android. Poate să nu funcționeze corect și nu include cele mai recente măsuri de protecție a securității și a confidențialității. Caută o actualizare sau contactează dezvoltatorul aplicației."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Caută actualizări"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Aplicația nu este compatibilă cu cea mai recentă versiune de Android. Caută o actualizare sau contactează dezvoltatorul aplicației."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Ai mesaje noi"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Deschide aplicația pentru SMS-uri ca să vezi"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Unele funcții ar putea fi limitate"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Acest conținut nu poate fi deschis cu aplicații pentru lucru"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Acest conținut nu poate fi trimis cu aplicații personale"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Acest conținut nu poate fi deschis cu aplicații personale"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Profilul de serviciu este întrerupt"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Atinge pentru a activa"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Aplicațiile pentru lucru sunt întrerupte"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Reactivează"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nicio aplicație pentru lucru"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nicio aplicație personală"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Deschizi <xliff:g id="APP">%s</xliff:g> pentru lucru?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Deschizi în aplicația <xliff:g id="APP">%s</xliff:g> personală?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Deschizi în aplicația <xliff:g id="APP">%s</xliff:g> pentru lucru?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Apelezi din aplicația pentru lucru?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Comuți la aplicația pentru lucru?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Organizația îți permite să inițiezi apeluri numai din aplicațiile pentru lucru"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Organizația îți permite să trimiți mesaje numai din aplicațiile pentru lucru"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Folosește browserul personal"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Folosește browserul de serviciu"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Apelează"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Comută"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Codul PIN de deblocare SIM privind rețeaua"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Codul PIN de deblocare SIM privind subsetul de rețea"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Codul PIN de deblocare SIM corporativă"</string>
@@ -2306,7 +2319,8 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Nu se poate accesa camera foto a telefonului de pe <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Nu se poate accesa camera foto a tabletei de pe <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Nu se poate accesa în timpul streamingului. Încearcă pe telefon."</string>
-    <string name="system_locale_title" msgid="711882686834677268">"Prestabilit de sistem"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Nu se poate viziona picture-in-picture în timpul streamingului"</string>
+    <string name="system_locale_title" msgid="711882686834677268">"Prestabilită de sistem"</string>
     <string name="default_card_name" msgid="9198284935962911468">"CARD <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Permisiunea pentru gestionarea ceasurilor din profilul ceasului însoțitor"</string>
     <string name="permdesc_companionProfileWatch" msgid="5655698581110449397">"Permite unei aplicații partenere să gestioneze ceasuri."</string>
@@ -2331,7 +2345,7 @@
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Aspectul tastaturii este setat la <xliff:g id="LAYOUT_1">%s</xliff:g>. Atinge pentru a-l schimba."</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Aspectul tastaturii este setat la <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Atinge pentru a-l schimba."</string>
     <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Aspectul tastaturii este setat la <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Atinge pentru a-l schimba."</string>
-    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Aspectul tastaturii este setat la <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>… Atinge pentru a-l schimba."</string>
+    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Tastatura este setată la <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>… Atinge pentru a schimba."</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"Tastaturile fizice au fost configurate"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"Atinge pentru a vedea tastaturile"</string>
 </resources>
diff --git a/core/res/res/values-round-watch/dims_progress_indeterminate_horizontal_material.xml b/core/res/res/values-round-watch/dims_progress_indeterminate_horizontal_material.xml
new file mode 100644
index 0000000..670d95d
--- /dev/null
+++ b/core/res/res/values-round-watch/dims_progress_indeterminate_horizontal_material.xml
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!--
+        Path for the track the progress bar runs along on a curved screen.
+    -->
+    <string name="indeterminate_progress_background">"M2080 -434 C2053.41,-431.82 2032.66,-423.65 2009,-416 C1677.83,-308.94 1328.18,-225.31 948,-169 C552.55,-110.43 82.93,-85.03 -368,-110 C-945.44,-141.98 -1453.99,-244.34 -1920,-388 C-1941.56,-394.65 -1959.08,-402.44 -1986,-409 C-2037.81,-421.62 -2094.99,-409.05 -2131,-389 C-2199,-351.14 -2259.29,-260.99 -2224,-153 C-2209.83,-109.65 -2185.04,-77.07 -2151,-52 C-2117.95,-27.66 -2071.89,-16.07 -2026,-2 C-1671.19,106.76 -1289.85,190.97 -878,245 C-470.97,298.4 -1.15,313.9 448,286 C879.56,259.19 1286.12,192.07 1657,100 C1789.03,67.23 1935.92,26.61 2065,-14 C2109.16,-27.89 2157.33,-39.88 2194,-60 C2261.75,-97.17 2324.86,-186 2290,-295 C2263.92,-376.54 2191.93,-443.19 2080,-434c"</string>
+
+    <!--
+      Shapes for the progress dial during each frame of the animation.
+
+      Every frame except the last is shown for 16.6667ms.
+
+      On the final frame we pause for an extra 1000ms before starting again, partly for the better
+      visual effect and partly to give the SoC a break while other work happens in the background.
+    -->
+    <string name="indeterminate_progress_01">"M-2053 -413 C-2064.2,-412.04 -2074.66,-410.29 -2084.48,-407.87 C-2094.29,-405.46 -2103.47,-402.36 -2112.09,-398.71 C-2120.71,-395.06 -2128.79,-390.85 -2136.41,-386.19 C-2144.02,-381.54 -2151.19,-376.43 -2158,-371 C-2168.19,-362.86 -2177.05,-354.51 -2184.8,-345.79 C-2192.55,-337.07 -2199.2,-327.99 -2204.98,-318.41 C-2210.77,-308.83 -2215.7,-298.74 -2220,-288 C-2237.22,-245.04 -2237.06,-202.14 -2226.93,-164.3 C-2216.8,-126.46 -2196.69,-93.69 -2174,-71 C-2150.2,-47.2 -2115.92,-28.38 -2077.59,-19.79 C-2039.27,-11.2 -1996.92,-12.85 -1957,-30 C-1925.35,-43.59 -1896.01,-64.58 -1873.88,-92.68 C-1851.74,-120.77 -1836.82,-155.98 -1834,-198 C-1831.53,-234.86 -1837.92,-266 -1849.1,-292.1 C-1860.29,-318.21 -1876.28,-339.28 -1893,-356 C-1910.36,-373.36 -1932.3,-389.15 -1958.94,-399.84 C-1985.57,-410.52 -2016.89,-416.09 -2053,-413c "</string>
+    <string name="indeterminate_progress_02">"M-2053 -413 C-2072.13,-411.36 -2090.2,-406.86 -2106.82,-400.38 C-2123.44,-393.91 -2138.61,-385.46 -2151.93,-375.94 C-2165.26,-366.41 -2176.74,-355.8 -2186,-345 C-2200.2,-328.44 -2213.75,-307.38 -2222.86,-282.11 C-2231.96,-256.85 -2236.61,-227.38 -2233,-194 C-2229.85,-164.84 -2221.85,-140.07 -2210.02,-118.6 C-2198.19,-97.13 -2182.51,-78.96 -2164,-63 C-2146.03,-47.52 -2123.67,-34.03 -2098.23,-25.16 C-2072.79,-16.29 -2044.27,-12.03 -2014,-15 C-1985.05,-17.84 -1959.94,-25.74 -1938.13,-37.35 C-1916.32,-48.97 -1897.79,-64.3 -1882,-82 C-1866.83,-98.99 -1853.27,-120.85 -1844.28,-146.28 C-1835.29,-171.72 -1830.87,-200.72 -1834,-232 C-1836.98,-261.8 -1845.16,-287.41 -1856.88,-309.38 C-1868.6,-331.36 -1883.86,-349.71 -1901,-365 C-1917.51,-379.74 -1939.59,-393.1 -1965.5,-402.1 C-1991.42,-411.09 -2021.16,-415.73 -2053,-413c "</string>
+    <string name="indeterminate_progress_03">"M-2052 -413 C-2071.28,-411.42 -2089.49,-406.96 -2106.24,-400.51 C-2122.98,-394.05 -2138.26,-385.61 -2151.69,-376.07 C-2165.12,-366.52 -2176.68,-355.87 -2186,-345 C-2200.23,-328.39 -2213.89,-307.21 -2223.04,-281.77 C-2232.19,-256.33 -2236.82,-226.63 -2233,-193 C-2229.75,-164.4 -2221.68,-139.52 -2209.83,-117.85 C-2197.98,-96.18 -2182.35,-77.73 -2164,-62 C-2146.19,-46.74 -2123.18,-33.34 -2097.25,-24.47 C-2071.32,-15.59 -2042.48,-11.22 -2013,-14 C-1983.8,-16.75 -1958.61,-24.73 -1936.82,-36.53 C-1915.02,-48.33 -1896.62,-63.95 -1881,-82 C-1865.71,-99.67 -1851.88,-121.33 -1842.66,-146.49 C-1833.45,-171.65 -1828.84,-200.32 -1832,-232 C-1835.01,-262.26 -1843.42,-287.88 -1855.37,-309.62 C-1867.32,-331.36 -1882.81,-349.22 -1900,-364 C-1917.39,-378.94 -1938.96,-392.54 -1964.39,-401.73 C-1989.83,-410.92 -2019.14,-415.7 -2052,-413c "</string>
+    <string name="indeterminate_progress_04">"M-2052 -413 C-2071.66,-411.39 -2090,-406.88 -2106.76,-400.35 C-2123.51,-393.82 -2138.67,-385.28 -2151.97,-375.59 C-2165.26,-365.91 -2176.7,-355.08 -2186,-344 C-2200.29,-326.96 -2214.12,-305.92 -2223.33,-280.54 C-2232.55,-255.16 -2237.15,-225.42 -2233,-191 C-2229.56,-162.51 -2221.15,-137.78 -2208.93,-116.29 C-2196.71,-94.8 -2180.68,-76.54 -2162,-61 C-2143.85,-45.9 -2120.72,-32.5 -2094.69,-23.57 C-2068.65,-14.65 -2039.73,-10.19 -2010,-13 C-1981.12,-15.72 -1955.63,-23.67 -1933.48,-35.47 C-1911.33,-47.26 -1892.52,-62.9 -1877,-81 C-1861.92,-98.59 -1848.2,-120.71 -1839.11,-146.38 C-1830.02,-172.04 -1825.57,-201.24 -1829,-233 C-1832.23,-262.84 -1840.89,-288.53 -1853.04,-310.41 C-1865.19,-332.3 -1880.82,-350.37 -1898,-365 C-1915.02,-379.5 -1937.52,-392.81 -1963.76,-401.84 C-1990.01,-410.88 -2020,-415.63 -2052,-413c "</string>
+    <string name="indeterminate_progress_05">"M-2052 -413 C-2061.59,-412.21 -2070.55,-410.81 -2079.03,-408.89 C-2087.5,-406.97 -2095.48,-404.54 -2103.1,-401.69 C-2110.72,-398.84 -2117.98,-395.58 -2125,-392 C-2154.86,-376.79 -2181.38,-355.21 -2200.81,-326.98 C-2220.23,-298.75 -2232.55,-263.85 -2234,-222 C-2235.06,-191.38 -2230.21,-165.23 -2221.52,-142.55 C-2212.83,-119.88 -2200.3,-100.69 -2186,-84 C-2171.48,-67.06 -2154.35,-52.83 -2134.66,-41.45 C-2114.98,-30.08 -2092.74,-21.55 -2068,-16 C-2009.13,-2.8 -1958.21,-14.57 -1918.33,-39.75 C-1878.46,-64.93 -1849.64,-103.53 -1835,-144 C-1825.51,-170.22 -1822.73,-198.65 -1824.83,-225.69 C-1826.94,-252.72 -1833.93,-278.36 -1844,-299 C-1853.43,-318.34 -1865.87,-336.49 -1881.35,-352.36 C-1896.84,-368.23 -1915.37,-381.81 -1937,-392 C-1951.85,-398.99 -1969.2,-405.18 -1988.54,-409.15 C-2007.87,-413.12 -2029.2,-414.87 -2052,-413c "</string>
+    <string name="indeterminate_progress_06">"M-2052 -413 C-2063.16,-412.08 -2073.74,-410.37 -2083.77,-407.96 C-2093.79,-405.56 -2103.26,-402.47 -2112.17,-398.81 C-2121.07,-395.16 -2129.43,-390.93 -2137.23,-386.26 C-2145.03,-381.58 -2152.29,-376.46 -2159,-371 C-2169.4,-362.54 -2178.31,-353.88 -2186.05,-344.85 C-2193.79,-335.82 -2200.37,-326.42 -2206.08,-316.5 C-2211.8,-306.57 -2216.67,-296.13 -2221,-285 C-2238.37,-240.34 -2237.17,-196.9 -2225.73,-159.1 C-2214.28,-121.3 -2192.59,-89.13 -2169,-67 C-2142.29,-41.95 -2105.22,-23.59 -2065.35,-15.17 C-2025.49,-6.75 -1982.85,-8.27 -1945,-23 C-1912.4,-35.68 -1882.18,-56.87 -1859.35,-85.41 C-1836.52,-113.96 -1821.07,-149.86 -1818,-192 C-1815.28,-229.38 -1822.17,-262.27 -1834.17,-289.87 C-1846.17,-317.47 -1863.28,-339.78 -1881,-356 C-1899.69,-373.11 -1924.59,-388.83 -1953.74,-399.53 C-1982.89,-410.24 -2016.29,-415.93 -2052,-413c "</string>
+    <string name="indeterminate_progress_07">"M-2052 -413 C-2072.22,-411.34 -2091,-406.66 -2108.1,-399.87 C-2125.21,-393.08 -2140.66,-384.18 -2154.21,-374.07 C-2167.77,-363.95 -2179.44,-352.63 -2189,-341 C-2203.41,-323.47 -2216.63,-300.89 -2224.89,-274.11 C-2233.14,-247.32 -2236.44,-216.33 -2231,-182 C-2226.51,-153.63 -2217.1,-128.79 -2203.78,-107.33 C-2190.45,-85.88 -2173.19,-67.81 -2153,-53 C-2133.35,-38.58 -2108.08,-26.05 -2080.23,-17.76 C-2052.38,-9.48 -2021.96,-5.43 -1992,-8 C-1961.34,-10.63 -1935.39,-18.87 -1913.09,-31.22 C-1890.78,-43.56 -1872.12,-60 -1856,-79 C-1840.68,-97.06 -1827.09,-119.88 -1818.63,-146.65 C-1810.16,-173.42 -1806.82,-204.14 -1812,-238 C-1816.36,-266.51 -1826.56,-291.74 -1840.31,-313.35 C-1854.07,-334.96 -1871.39,-352.95 -1890,-367 C-1908.07,-380.64 -1932.92,-393.43 -1961.07,-402.16 C-1989.23,-410.89 -2020.69,-415.57 -2052,-413c "</string>
+    <string name="indeterminate_progress_08">"M-2052 -413 C-2083.49,-410.41 -2110.62,-400.99 -2133.57,-387.67 C-2156.51,-374.35 -2175.26,-357.14 -2190,-339 C-2204.11,-321.63 -2217.58,-298.34 -2225.92,-270.66 C-2234.26,-242.97 -2237.46,-210.91 -2231,-176 C-2223.12,-133.42 -2203.82,-99.93 -2176.63,-73.96 C-2149.45,-47.99 -2114.39,-29.53 -2075,-17 C-2060.09,-12.26 -2044.98,-8.59 -2029.65,-6.43 C-2014.33,-4.28 -1998.78,-3.65 -1983,-5 C-1951.72,-7.67 -1925.53,-16 -1903.13,-28.62 C-1880.73,-41.24 -1862.11,-58.16 -1846,-78 C-1830.98,-96.49 -1817.15,-119.48 -1808.74,-146.6 C-1800.33,-173.72 -1797.34,-204.98 -1804,-240 C-1809.39,-268.37 -1820.04,-293.46 -1834.27,-314.92 C-1848.5,-336.37 -1866.3,-354.19 -1886,-368 C-1896.13,-375.1 -1907.27,-380.86 -1919.42,-385.96 C-1931.58,-391.07 -1944.76,-395.51 -1959,-400 C-1987.83,-409.09 -2018.76,-415.73 -2052,-413c "</string>
+    <string name="indeterminate_progress_09">"M-2052 -413 C-2068.16,-411.67 -2083.44,-408.39 -2097.42,-403.83 C-2111.4,-399.27 -2124.07,-393.43 -2135,-387 C-2147.19,-379.82 -2157.4,-372.54 -2166.58,-364.44 C-2175.76,-356.34 -2183.92,-347.44 -2192,-337 C-2206.01,-318.91 -2219.24,-294.36 -2226.98,-265.73 C-2234.71,-237.1 -2236.95,-204.4 -2229,-170 C-2222.57,-142.18 -2211.58,-117.82 -2196.58,-96.96 C-2181.57,-76.11 -2162.54,-58.77 -2140,-45 C-2129.22,-38.41 -2117.43,-32.95 -2104.72,-27.98 C-2092.02,-23.02 -2078.4,-18.56 -2064,-14 C-2048.86,-9.2 -2033.94,-5.15 -2018.76,-2.7 C-2003.58,-0.26 -1988.15,0.6 -1972,-1 C-1909.86,-7.14 -1864.77,-35.48 -1833,-76 C-1803.02,-114.23 -1778.89,-172.33 -1794,-243 C-1806.16,-299.87 -1840.21,-341.67 -1882,-369 C-1902.73,-382.55 -1929.67,-390.89 -1958,-400 C-1986.85,-409.28 -2018.94,-415.71 -2052,-413c "</string>
+    <string name="indeterminate_progress_10">"M-2052 -413 C-2068.7,-411.63 -2084.13,-408.26 -2098.16,-403.54 C-2112.2,-398.82 -2124.85,-392.76 -2136,-386 C-2147.98,-378.74 -2158.36,-371.57 -2167.81,-363.43 C-2177.26,-355.28 -2185.77,-346.16 -2194,-335 C-2207.5,-316.7 -2220.59,-290.87 -2228.01,-261.03 C-2235.43,-231.2 -2237.18,-197.35 -2228,-163 C-2220.91,-136.45 -2208.67,-112.16 -2192.46,-91.28 C-2176.24,-70.4 -2156.04,-52.92 -2133,-40 C-2121.53,-33.57 -2108.74,-28.52 -2095.21,-23.98 C-2081.68,-19.44 -2067.42,-15.41 -2053,-11 C-2036.87,-6.07 -2022.2,-1.69 -2007.14,1.02 C-1992.09,3.72 -1976.65,4.76 -1959,3 C-1895.61,-3.31 -1849.91,-32.53 -1818,-74 C-1787.82,-113.22 -1765.01,-174.6 -1783,-245 C-1797.41,-301.38 -1831.8,-344.78 -1876,-370 C-1898.81,-383.01 -1927.34,-389.73 -1956,-399 C-1985.38,-408.5 -2017.46,-415.84 -2052,-413c "</string>
+    <string name="indeterminate_progress_11">"M-2052 -413 C-2081.79,-410.55 -2107.78,-401.91 -2129.84,-389.82 C-2151.89,-377.73 -2169.99,-362.21 -2184,-346 C-2197.87,-329.95 -2211.62,-310.23 -2221.28,-286 C-2230.94,-261.78 -2236.5,-233.06 -2234,-199 C-2231.84,-169.67 -2223.83,-144.4 -2212.24,-122.59 C-2200.65,-100.79 -2185.48,-82.45 -2169,-67 C-2151.26,-50.36 -2130.31,-38.88 -2107.26,-29.54 C-2084.22,-20.21 -2059.09,-13.03 -2033,-5 C-2017.74,-0.3 -2004.84,3.33 -1991.59,5.6 C-1978.33,7.86 -1964.71,8.77 -1948,8 C-1905.51,6.05 -1868.9,-9.21 -1839.73,-31.86 C-1810.55,-54.51 -1788.79,-84.54 -1776,-116 C-1771.1,-128.04 -1767.01,-141.61 -1764.31,-155.76 C-1761.61,-169.9 -1760.31,-184.63 -1761,-199 C-1765.31,-289.18 -1818.08,-347.02 -1882,-375 C-1905.42,-385.25 -1933.09,-392.49 -1960,-401 C-1987.46,-409.69 -2016.78,-415.89 -2052,-413c "</string>
+    <string name="indeterminate_progress_12">"M-2052 -413 C-2069.88,-411.53 -2085.89,-407.88 -2100.3,-402.79 C-2114.71,-397.7 -2127.52,-391.19 -2139,-384 C-2162.8,-369.1 -2183.13,-350.89 -2198.84,-328.39 C-2214.56,-305.89 -2225.66,-279.09 -2231,-247 C-2234.03,-228.79 -2234.51,-211.38 -2232.87,-194.73 C-2231.22,-178.08 -2227.46,-162.19 -2222,-147 C-2212.49,-120.53 -2198.25,-96.52 -2179.64,-76.38 C-2161.02,-56.24 -2138.03,-39.97 -2111,-29 C-2097.39,-23.47 -2083.02,-18.98 -2068.36,-14.74 C-2053.7,-10.5 -2038.75,-6.51 -2024,-2 C-2009.05,2.58 -1994.19,7.3 -1978.25,10.39 C-1962.31,13.48 -1945.29,14.94 -1926,13 C-1858.97,6.24 -1812.71,-25.63 -1781,-71 C-1751.71,-112.9 -1731.01,-182.53 -1755,-252 C-1774.66,-308.93 -1813.12,-347.39 -1866,-370 C-1891.58,-380.93 -1922.29,-388.48 -1952,-398 C-1982.5,-407.77 -2015.77,-415.97 -2052,-413c "</string>
+    <string name="indeterminate_progress_13">"M-2052 -413 C-2070.21,-411.5 -2086.7,-407.63 -2101.51,-402.32 C-2116.33,-397.01 -2129.47,-390.26 -2141,-383 C-2164.73,-368.06 -2185.58,-349.25 -2201.57,-325.58 C-2217.56,-301.91 -2228.69,-273.38 -2233,-239 C-2235.24,-221.1 -2234.79,-202.88 -2232.26,-185.49 C-2229.72,-168.1 -2225.1,-151.55 -2219,-137 C-2208.09,-110.99 -2192.21,-87.72 -2171.75,-68.46 C-2151.29,-49.2 -2126.25,-33.96 -2097,-24 C-2082.29,-18.99 -2067.22,-14.21 -2052.11,-9.58 C-2037.01,-4.94 -2021.86,-0.45 -2007,4 C-1992.53,8.33 -1976.87,12.99 -1960.04,16.12 C-1943.21,19.24 -1925.19,20.83 -1906,19 C-1837.8,12.51 -1789.31,-21.44 -1758,-68 C-1727.51,-113.34 -1711.25,-189.69 -1738,-256 C-1760.5,-311.77 -1803.61,-350.74 -1859,-370 C-1888.1,-380.12 -1918.72,-387.3 -1950,-397 C-1981.82,-406.86 -2013.69,-416.14 -2052,-413c "</string>
+    <string name="indeterminate_progress_14">"M-2048 -413 C-2066.96,-411.52 -2083.65,-407.87 -2098.63,-402.66 C-2113.62,-397.46 -2126.89,-390.7 -2139,-383 C-2163.5,-367.42 -2184.61,-348.88 -2200.66,-325.26 C-2216.71,-301.64 -2227.71,-272.93 -2232,-237 C-2234.19,-218.68 -2233.63,-200.16 -2230.93,-182.61 C-2228.24,-165.06 -2223.39,-148.47 -2217,-134 C-2205.27,-107.47 -2188.65,-84.32 -2167.4,-65.37 C-2146.15,-46.43 -2120.26,-31.69 -2090,-22 C-2075,-17.19 -2059.6,-12.47 -2044.27,-7.81 C-2028.95,-3.14 -2013.69,1.45 -1999,6 C-1983.7,10.73 -1967.89,16.01 -1951.43,20.09 C-1934.97,24.17 -1917.86,27.05 -1900,27 C-1823.07,26.78 -1770.47,-11.8 -1738,-57 C-1720.71,-81.07 -1708.33,-109.31 -1703,-145 C-1691.18,-224.09 -1728.76,-287.55 -1768,-323 C-1810.65,-361.52 -1879.25,-375.58 -1942,-395 C-1973.74,-404.82 -2008.85,-416.06 -2048,-413c "</string>
+    <string name="indeterminate_progress_15">"M-2044 -412 C-2063.62,-410.55 -2080.88,-406.72 -2096.49,-401.17 C-2112.09,-395.62 -2126.03,-388.34 -2139,-380 C-2164.03,-363.91 -2185.97,-343.3 -2202.06,-317.15 C-2218.15,-290.99 -2228.39,-259.29 -2230,-221 C-2231.65,-181.81 -2222.43,-147.58 -2207.28,-119.14 C-2192.13,-90.7 -2171.06,-68.05 -2149,-52 C-2136.68,-43.04 -2123.52,-36.2 -2109.14,-30.27 C-2094.77,-24.34 -2079.18,-19.32 -2062,-14 C-2046.23,-9.11 -2030.66,-4.02 -2014.94,1.05 C-1999.21,6.13 -1983.35,11.18 -1967,16 C-1950.6,20.83 -1933.88,26.02 -1916.12,29.66 C-1898.36,33.3 -1879.56,35.38 -1859,34 C-1785.73,29.09 -1734.33,-12.76 -1704,-61 C-1687.14,-87.82 -1677.54,-119.8 -1675,-157 C-1669.82,-232.93 -1712.56,-294.98 -1754,-326 C-1800.38,-360.72 -1874.96,-373.95 -1937,-393 C-1970.55,-403.3 -2003.97,-414.96 -2044,-412c "</string>
+    <string name="indeterminate_progress_16">"M-2043 -410 C-2062.47,-408.33 -2080.12,-404.05 -2096.08,-397.95 C-2112.04,-391.85 -2126.3,-383.94 -2139,-375 C-2163.84,-357.52 -2185.95,-334.8 -2201.41,-306.44 C-2216.88,-278.08 -2225.71,-244.07 -2224,-204 C-2222.32,-164.72 -2211.27,-131.77 -2194.29,-104.74 C-2177.32,-77.71 -2154.41,-56.59 -2129,-41 C-2115.9,-32.96 -2101.29,-26.6 -2085.64,-20.93 C-2069.99,-15.26 -2053.29,-10.28 -2036,-5 C-2019.94,-0.1 -2004.01,4.86 -1987.69,9.87 C-1971.37,14.87 -1954.65,19.92 -1937,25 C-1905.8,33.99 -1865.86,45.81 -1827,42 C-1752.62,34.71 -1698.64,-7.41 -1670,-59 C-1654,-87.82 -1644.06,-123.59 -1645,-163 C-1645.93,-201.81 -1658.75,-235.41 -1675,-262 C-1714,-325.81 -1760.88,-340.83 -1833,-362 C-1865.62,-371.58 -1898.36,-381.3 -1932,-392 C-1966.74,-403.05 -2001.4,-413.56 -2043,-410c "</string>
+    <string name="indeterminate_progress_17">"M-2028 -408 C-2048.69,-406.56 -2067.62,-402.42 -2084.53,-396.46 C-2101.45,-390.49 -2116.35,-382.71 -2129,-374 C-2153.83,-356.9 -2177.14,-333.29 -2193.47,-303.62 C-2209.79,-273.96 -2219.13,-238.26 -2216,-197 C-2212.99,-157.39 -2201.12,-124.14 -2183.05,-97.04 C-2164.99,-69.95 -2140.74,-49 -2113,-34 C-2099.07,-26.47 -2082.86,-20.28 -2065.99,-14.7 C-2049.12,-9.11 -2031.58,-4.13 -2015,1 C-1998.21,6.19 -1981.3,11.15 -1964.16,16.08 C-1947.03,21.01 -1929.67,25.91 -1912,31 C-1876.63,41.19 -1842.13,53.72 -1799,52 C-1720.79,48.87 -1665.28,1.83 -1636,-51 C-1619.77,-80.28 -1609.29,-118.72 -1612,-158 C-1617.51,-237.84 -1661.13,-292.87 -1714,-322 C-1743.39,-338.2 -1774.63,-344.74 -1813,-356 C-1847.11,-366.01 -1880.41,-376.12 -1915,-387 C-1949.7,-397.91 -1987.46,-410.81 -2028,-408c "</string>
+    <string name="indeterminate_progress_18">"M-2009 -405 C-2051.87,-404.67 -2087.83,-392.14 -2116.71,-372.95 C-2145.6,-353.77 -2167.42,-327.93 -2182,-301 C-2190.39,-285.5 -2196.97,-267.54 -2201.03,-248.43 C-2205.1,-229.32 -2206.65,-209.07 -2205,-189 C-2201.67,-148.43 -2188.4,-114.91 -2168.6,-87.92 C-2148.8,-60.93 -2122.46,-40.46 -2093,-26 C-2077.81,-18.55 -2060.68,-12.37 -2043.04,-6.78 C-2025.39,-1.18 -2007.24,3.84 -1990,9 C-1972.83,14.14 -1955.59,19.23 -1938.01,24.37 C-1920.43,29.51 -1902.51,34.69 -1884,40 C-1848.91,50.07 -1808.39,64.36 -1769,63 C-1685.56,60.11 -1628.04,14.47 -1598,-41 C-1581.7,-71.11 -1570.85,-111.53 -1574,-152 C-1580.19,-231.59 -1628.54,-288.29 -1685,-316 C-1717.08,-331.74 -1751.19,-337.82 -1790,-349 C-1827.01,-359.66 -1860.79,-370.76 -1895,-381 C-1930.29,-391.56 -1967.46,-405.32 -2009,-405c "</string>
+    <string name="indeterminate_progress_19">"M-2011 -400 C-2053.42,-396.52 -2087.52,-381.94 -2114.34,-361.15 C-2141.17,-340.36 -2160.71,-313.35 -2174,-285 C-2181.72,-268.54 -2187.51,-250.33 -2190.47,-230.84 C-2193.44,-211.34 -2193.58,-190.57 -2190,-169 C-2183.7,-131.08 -2168.49,-98.81 -2147.08,-72.91 C-2125.67,-47.01 -2098.06,-27.47 -2067,-15 C-2050.55,-8.4 -2033.29,-3.15 -2015.51,1.83 C-1997.74,6.81 -1979.46,11.51 -1961,17 C-1926.67,27.21 -1890.41,37.86 -1854,48 C-1817.75,58.1 -1779.46,72.79 -1741,74 C-1651.6,76.8 -1593.42,34.23 -1560,-21 C-1542.31,-50.24 -1529.38,-88.39 -1530,-129 C-1531.26,-212.05 -1581.77,-272.22 -1635,-301 C-1665.71,-317.6 -1706.86,-326.2 -1739,-335 C-1775.31,-344.94 -1811.03,-355.54 -1846,-366 C-1882.13,-376.81 -1917.72,-389.72 -1954,-397 C-1969.82,-400.17 -1990.77,-401.66 -2011,-400c "</string>
+    <string name="indeterminate_progress_20">"M-1993 -395 C-2035.52,-391.51 -2071.23,-376.75 -2099.59,-354.5 C-2127.94,-332.24 -2148.93,-302.49 -2162,-269 C-2168.66,-251.95 -2173.35,-230.87 -2174.9,-208.84 C-2176.46,-186.81 -2174.88,-163.83 -2169,-143 C-2158.02,-104.12 -2139.35,-74.22 -2113.89,-51.11 C-2088.42,-28.01 -2056.16,-11.7 -2018,0 C-1979.52,11.8 -1942.29,22.92 -1904.79,33.78 C-1867.3,44.64 -1829.54,55.24 -1790,66 C-1770.25,71.37 -1750.38,77.31 -1729.76,81.43 C-1709.14,85.56 -1687.76,87.87 -1665,86 C-1622.2,82.49 -1586.43,67.71 -1558.12,45.7 C-1529.81,23.68 -1508.96,-5.56 -1496,-38 C-1488.42,-56.98 -1484.03,-78.42 -1482.85,-100.14 C-1481.68,-121.87 -1483.72,-143.88 -1489,-164 C-1508.99,-240.16 -1563.51,-287.94 -1639,-308 C-1716.8,-328.67 -1792.02,-350.18 -1868,-373 C-1906.44,-384.54 -1946.52,-398.82 -1993,-395c "</string>
+    <string name="indeterminate_progress_21">"M-1972 -389 C-2015.53,-385.6 -2052.71,-370.1 -2082.05,-346.58 C-2111.38,-323.06 -2132.86,-291.51 -2145,-256 C-2148.29,-246.37 -2151.04,-236.62 -2152.97,-226.03 C-2154.89,-215.43 -2156,-204 -2156,-191 C-2156,-154.4 -2147.68,-123.61 -2134.39,-97.87 C-2121.1,-72.13 -2102.85,-51.43 -2083,-35 C-2068.94,-23.36 -2053.07,-14.7 -2035.52,-7.4 C-2017.98,-0.11 -1998.76,5.83 -1978,12 C-1938.06,23.88 -1899,35.2 -1859.7,46.27 C-1820.4,57.33 -1780.87,68.14 -1740,79 C-1699.56,89.74 -1657.14,104.77 -1609,101 C-1522.04,94.2 -1462.2,36.39 -1438,-32 C-1423.14,-74 -1423.94,-121.55 -1437,-161 C-1449.47,-198.68 -1467.69,-227.4 -1498,-253 C-1526.28,-276.89 -1561.4,-288.27 -1604,-299 C-1684.97,-319.39 -1764.33,-341.91 -1843,-365 C-1883.1,-376.77 -1923.46,-392.79 -1972,-389c "</string>
+    <string name="indeterminate_progress_22">"M-1947 -382 C-1992.63,-378.43 -2031.23,-362.21 -2061.25,-337.24 C-2091.27,-312.27 -2112.7,-278.55 -2124,-240 C-2138.21,-191.5 -2133.14,-145.62 -2117.43,-107.06 C-2101.71,-68.5 -2075.36,-37.25 -2047,-18 C-2031.95,-7.78 -2013.76,0.26 -1994.19,7.23 C-1974.61,14.19 -1953.63,20.08 -1933,26 C-1891.74,37.84 -1850.85,49.22 -1809.47,60.33 C-1768.09,71.44 -1726.22,82.27 -1683,93 C-1662.04,98.2 -1640.37,104.9 -1618.02,109.82 C-1595.68,114.74 -1572.65,117.89 -1549,116 C-1503.84,112.4 -1465.18,96.01 -1435.01,71.21 C-1404.85,46.41 -1383.17,13.21 -1372,-24 C-1358.2,-69.97 -1362.29,-119.5 -1378,-158 C-1393.11,-195.04 -1414.99,-223.76 -1448,-247 C-1479.65,-269.28 -1518.77,-277.61 -1564,-289 C-1647.07,-309.92 -1731.94,-331.77 -1814,-356 C-1855.02,-368.11 -1897.6,-385.86 -1947,-382c "</string>
+    <string name="indeterminate_progress_23">"M-1915 -374 C-1963.11,-370.66 -2003.62,-353.89 -2034.73,-327.71 C-2065.84,-301.53 -2087.53,-265.95 -2098,-225 C-2111.65,-171.6 -2104.14,-125.11 -2085.35,-87.34 C-2066.56,-49.57 -2036.48,-20.52 -2005,-2 C-1987.6,8.23 -1967.69,15.77 -1946.7,22.23 C-1925.72,28.68 -1903.67,34.07 -1882,40 C-1828.45,54.66 -1774.32,69.41 -1719.51,83.62 C-1664.71,97.83 -1609.24,111.5 -1553,124 C-1540.64,126.75 -1528.83,129.45 -1517.02,131.24 C-1505.2,133.02 -1493.38,133.9 -1481,133 C-1431.84,129.42 -1391.55,112.94 -1360.82,87.22 C-1330.09,61.5 -1308.92,26.54 -1298,-14 C-1284.79,-63.02 -1292.08,-115.37 -1310,-153 C-1326.77,-188.23 -1354.33,-219.1 -1389,-239 C-1423.4,-258.74 -1470.69,-267.55 -1515,-278 C-1603.39,-298.85 -1690.13,-322.03 -1777,-346 C-1817.41,-357.15 -1865.58,-377.43 -1915,-374c "</string>
+    <string name="indeterminate_progress_24">"M-1890 -364 C-1915.49,-361.91 -1938.32,-355.57 -1958.37,-346.18 C-1978.42,-336.78 -1995.67,-324.33 -2010,-310 C-2024.52,-295.48 -2037.55,-279.77 -2047.93,-261.42 C-2058.31,-243.07 -2066.05,-222.08 -2070,-197 C-2074.59,-167.83 -2073.02,-142.02 -2067.58,-119.16 C-2062.15,-96.3 -2052.85,-76.38 -2042,-59 C-2030.6,-40.74 -2017.28,-25.07 -2001.72,-11.92 C-1986.16,1.22 -1968.36,11.84 -1948,20 C-1905.62,36.98 -1860,46.68 -1815,59 C-1725.92,83.38 -1631.46,106.29 -1538,128 C-1491.98,138.69 -1441.13,155.58 -1390,151 C-1292.44,142.26 -1225.72,75.29 -1210,-14 C-1200.46,-68.19 -1215.31,-117.16 -1237,-153 C-1258.29,-188.17 -1290.09,-216.37 -1330,-233 C-1350.41,-241.5 -1374.56,-245.91 -1398,-251 C-1516.15,-276.67 -1631.32,-305.3 -1744,-337 C-1787.58,-349.26 -1835.91,-368.44 -1890,-364c "</string>
+    <string name="indeterminate_progress_25">"M-1841 -354 C-1869.44,-353.16 -1894.26,-347.31 -1915.8,-337.97 C-1937.35,-328.63 -1955.63,-315.8 -1971,-301 C-1986.17,-286.39 -1999.54,-271.29 -2010.18,-252.51 C-2020.82,-233.74 -2028.74,-211.3 -2033,-182 C-2041.16,-125.91 -2026.91,-77.42 -2000.49,-39.83 C-1974.07,-2.23 -1935.49,24.47 -1895,37 C-1871.46,44.28 -1847.67,50.61 -1823.78,56.71 C-1799.89,62.8 -1775.91,68.66 -1752,75 C-1632.18,106.77 -1509.29,135.8 -1384,161 C-1357.24,166.38 -1331.35,172.76 -1304,172 C-1248.4,170.45 -1205.4,147.31 -1175,120 C-1143.38,91.59 -1119.42,51.91 -1112,2 C-1103.47,-55.42 -1120.14,-106.53 -1145,-142 C-1169.17,-176.48 -1205.94,-205.29 -1250,-219 C-1273.89,-226.43 -1299.44,-229.88 -1324,-235 C-1449.37,-261.13 -1570.6,-289.56 -1691,-322 C-1735.34,-333.94 -1789.57,-355.52 -1841,-354c "</string>
+    <string name="indeterminate_progress_26">"M-1796 -342 C-1811.94,-341.79 -1825.94,-339.83 -1838.82,-336.66 C-1851.71,-333.48 -1863.49,-329.09 -1875,-324 C-1907.54,-309.62 -1935.19,-288.4 -1955.51,-260 C-1975.82,-231.61 -1988.8,-196.05 -1992,-153 C-1994.25,-122.72 -1989.36,-95.65 -1980.35,-72.07 C-1971.34,-48.48 -1958.22,-28.37 -1944,-12 C-1928.17,6.22 -1910.48,19.99 -1890.22,30.95 C-1869.96,41.91 -1847.13,50.05 -1821,57 C-1732.48,80.56 -1643.53,102.75 -1552.93,123.58 C-1462.34,144.4 -1370.1,163.87 -1275,182 C-1247.01,187.34 -1218.58,194.81 -1191,194 C-1131.03,192.25 -1087.63,168.15 -1056,138 C-1024.96,108.42 -997.59,63.62 -995,7 C-992.15,-55.28 -1013.07,-100.38 -1043,-136 C-1072.69,-171.34 -1113.24,-194.03 -1167,-204 C-1328.4,-233.93 -1484.44,-268.19 -1638,-308 C-1687.14,-320.74 -1741.73,-342.71 -1796,-342c "</string>
+    <string name="indeterminate_progress_27">"M-1758 -328 C-1773.72,-326.77 -1788.05,-324.1 -1801.28,-320.2 C-1814.52,-316.3 -1826.65,-311.16 -1838,-305 C-1867.83,-288.8 -1896.87,-263.63 -1916.93,-230.09 C-1936.99,-196.55 -1948.07,-154.65 -1942,-105 C-1938.26,-74.41 -1929.05,-49.04 -1916.25,-27.63 C-1903.46,-6.22 -1887.08,11.24 -1869,26 C-1849.22,42.16 -1826.74,52.66 -1802.07,61 C-1777.41,69.34 -1750.55,75.51 -1722,83 C-1627.76,107.73 -1531.68,130.26 -1433.57,150.84 C-1335.47,171.42 -1235.33,190.06 -1133,207 C-1102.48,212.05 -1071.97,219.42 -1041,217 C-980.71,212.29 -935.73,182.99 -906,149 C-876.19,114.92 -850.64,62 -858,-5 C-867.57,-92.16 -925.05,-149.77 -996,-173 C-1020.84,-181.13 -1049.84,-184.7 -1081,-190 C-1283.95,-224.53 -1479.06,-266.92 -1668,-316 C-1696.45,-323.39 -1726.55,-330.46 -1758,-328c "</string>
+    <string name="indeterminate_progress_28">"M-1702 -313 C-1718.97,-311.67 -1734.27,-308.63 -1748.31,-304.2 C-1762.34,-299.76 -1775.11,-293.92 -1787,-287 C-1818.73,-268.52 -1848.63,-238.43 -1867.4,-200.25 C-1886.16,-162.07 -1893.8,-115.81 -1881,-65 C-1873.66,-35.86 -1861.23,-11.42 -1844.97,9 C-1828.71,29.43 -1808.63,45.86 -1786,59 C-1763.78,71.9 -1735.76,80.93 -1706.18,88.48 C-1676.6,96.02 -1645.45,102.07 -1617,109 C-1514.25,134.02 -1409.51,156.86 -1302.58,177.39 C-1195.65,197.93 -1086.52,216.17 -975,232 C-941.5,236.76 -907.26,243.23 -874,241 C-807.88,236.57 -764.02,203.88 -733,164 C-703.96,126.67 -678.96,62.64 -696,-6 C-710.57,-64.7 -744.81,-104.43 -790,-131 C-838.34,-159.43 -903.19,-162.4 -968,-172 C-1188.55,-204.67 -1401.48,-249.48 -1605,-300 C-1635.42,-307.55 -1668.51,-315.62 -1702,-313c "</string>
+    <string name="indeterminate_progress_29">"M-1629 -297 C-1647.68,-296 -1664.53,-292.94 -1679.91,-288.29 C-1695.29,-283.64 -1709.2,-277.39 -1722,-270 C-1735.13,-262.42 -1746.45,-254.66 -1756.69,-245.68 C-1766.94,-236.7 -1776.13,-226.49 -1785,-214 C-1801.02,-191.45 -1813.31,-160.96 -1818.44,-127.98 C-1823.58,-95 -1821.57,-59.52 -1809,-27 C-1798.02,1.4 -1782.25,25.85 -1762.24,45.72 C-1742.22,65.59 -1717.96,80.88 -1690,91 C-1661.64,101.26 -1627.93,107.27 -1595,115 C-1338.91,175.14 -1069.51,224.52 -786,256 C-749.41,260.06 -712.09,266.16 -678,265 C-602.8,262.44 -555.29,227.14 -523,183 C-491.08,139.36 -471.68,63.07 -497,-4 C-518,-59.64 -556.44,-100.48 -616,-122 C-645.9,-132.8 -681.94,-135 -718,-139 C-999.71,-170.28 -1271.16,-219.92 -1527,-280 C-1559.85,-287.71 -1594.62,-298.85 -1629,-297c "</string>
+    <string name="indeterminate_progress_30">"M-1554 -279 C-1573.95,-278.03 -1592.16,-274.76 -1608.9,-269.49 C-1625.63,-264.23 -1640.91,-256.96 -1655,-248 C-1681.11,-231.4 -1704.11,-209.28 -1720.58,-181.38 C-1737.06,-153.48 -1747,-119.78 -1747,-80 C-1747,-40.36 -1736.63,-6.11 -1720.07,22.22 C-1703.51,50.56 -1680.76,72.99 -1656,89 C-1642.79,97.54 -1627.94,103.93 -1611.81,109.23 C-1595.69,114.54 -1578.3,118.77 -1560,123 C-1243.1,196.29 -905.52,251.65 -545,279 C-503.41,282.15 -461.51,286.97 -421,286 C-342.32,284.12 -289.14,239.96 -258,189 C-241.23,161.57 -229.41,126.9 -229,88 C-228.57,48.09 -239.97,14.95 -257,-14 C-288.07,-66.84 -336.69,-106.64 -418,-113 C-495.07,-119.03 -576.44,-125.73 -659,-133 C-929.35,-156.79 -1195.73,-207.11 -1442,-260 C-1478.55,-267.85 -1516.39,-280.83 -1554,-279c "</string>
+    <string name="indeterminate_progress_31">"M-1475 -259 C-1497.94,-257.3 -1517.43,-252.76 -1534.68,-246.04 C-1551.94,-239.32 -1566.97,-230.42 -1581,-220 C-1607.62,-200.23 -1631.26,-172.32 -1645.92,-138.18 C-1660.58,-104.04 -1666.27,-63.68 -1657,-19 C-1649.07,19.22 -1632.37,51.34 -1608.87,76.59 C-1585.37,101.84 -1555.09,120.22 -1520,131 C-1502.34,136.42 -1483.19,140.77 -1463.28,144.83 C-1443.37,148.9 -1422.7,152.69 -1402,157 C-1023.46,235.88 -622.54,284.09 -179,298 C-155.11,298.75 -130.67,300.57 -108,299 C-25.73,293.3 33.98,241.56 61,181 C76.53,146.2 82.53,100.81 74,59 C58.4,-17.45 8.72,-69.55 -62,-92 C-97.88,-103.39 -148.34,-103 -195,-103 C-282.94,-103 -387.12,-111.21 -468,-117 C-774.59,-138.96 -1075.42,-182.91 -1350,-240 C-1389.82,-248.28 -1432.72,-262.13 -1475,-259c "</string>
+    <string name="indeterminate_progress_32">"M-1373 -238 C-1397.37,-236.31 -1418.62,-231.33 -1437.53,-223.76 C-1456.44,-216.19 -1473,-206.04 -1488,-194 C-1503.21,-181.79 -1516.33,-168.45 -1527.22,-153.33 C-1538.1,-138.21 -1546.75,-121.31 -1553,-102 C-1568.58,-53.91 -1564.76,-8.07 -1550.21,30.82 C-1535.66,69.72 -1510.38,101.67 -1483,122 C-1452.82,144.41 -1414.34,154.7 -1368,164 C-1237.54,190.18 -1096.12,213.69 -965,233 C-643.35,280.36 -299.33,300 68,300 C120,300 172,299.45 222,296 C316.17,289.51 375.99,234.85 401,161 C433.46,65.17 388.09,-21.48 333,-63 C304.2,-84.71 265.24,-102.48 216,-103 C161,-103.58 109.46,-100 62,-100 C-42.22,-100 -151.92,-100.95 -248,-105 C-597.18,-119.72 -929.37,-158.41 -1236,-217 C-1278.46,-225.11 -1327.89,-241.13 -1373,-238c "</string>
+    <string name="indeterminate_progress_33">"M-1265 -215 C-1290.3,-212.92 -1313.06,-206.47 -1333,-197.26 C-1352.93,-188.06 -1370.03,-176.1 -1384,-163 C-1398.71,-149.21 -1411.64,-133.82 -1422.06,-116.08 C-1432.48,-98.34 -1440.37,-78.24 -1445,-55 C-1455.6,-1.79 -1444.84,45.36 -1423.06,83.13 C-1401.29,120.91 -1368.49,149.3 -1335,165 C-1316.23,173.8 -1293.86,179.41 -1270.12,183.89 C-1246.37,188.37 -1221.26,191.72 -1197,196 C-1052.86,221.45 -899.36,243.11 -753,259 C-353.75,302.34 120.02,314.63 538,279 C633.75,270.84 700.5,206.17 718,121 C740.05,13.71 679.18,-65.56 609,-100 C589.87,-109.39 569.5,-116.07 544,-119 C520.02,-121.75 489.94,-117.74 464,-116 C409.15,-112.32 351.08,-109.29 304,-107 C-196.98,-82.59 -686.9,-120.79 -1115,-195 C-1161.65,-203.09 -1214.46,-219.15 -1265,-215c "</string>
+    <string name="indeterminate_progress_34">"M-1118 -192 C-1145.42,-191.79 -1170.54,-186.13 -1192.5,-177.22 C-1214.45,-168.32 -1233.24,-156.17 -1248,-143 C-1263.27,-129.37 -1277,-113.05 -1288.05,-94.18 C-1299.1,-75.3 -1307.46,-53.87 -1312,-30 C-1332.86,79.71 -1267.54,162.8 -1189,193 C-1147.25,209.05 -1092.45,214.06 -1041,222 C-887.29,245.72 -722.44,264.69 -565,277 C-240.57,302.37 128.06,309.73 459,285 C570.39,276.68 679.51,267.39 784,256 C887.81,244.69 957.02,188.83 976,94 C987.3,37.57 972.22,-12.23 950,-49 C917.49,-102.8 862.33,-144.29 781,-145 C750.06,-145.27 727.56,-139.91 700,-137 C541.6,-120.26 360.16,-106.76 203,-103 C92.15,-100.34 -28.22,-98.3 -146,-102 C-465.5,-112.02 -757.79,-137.12 -1038,-183 C-1064.09,-187.27 -1095.31,-192.17 -1118,-192c "</string>
+    <string name="indeterminate_progress_35">"M970 -171 C943.29,-168.81 916.34,-163.76 889,-160 C702.71,-134.36 510.97,-116.08 311,-107 C84.92,-96.73 -172.89,-100.57 -391,-112 C-497.92,-117.6 -602.84,-127.1 -723,-140 C-773.04,-145.37 -825.42,-152.52 -883,-160 C-909.72,-163.47 -935.68,-168.58 -965,-168 C-996.16,-167.38 -1018.31,-161.2 -1040,-152 C-1115.75,-119.87 -1181.79,-30.18 -1153,82 C-1140.72,129.86 -1115.71,165.17 -1082,191 C-1045.71,218.81 -1002.91,227.92 -946,236 C-630.61,280.78 -288.29,300 71,300 C188.01,300 304.89,292.44 419,287 C585.2,279.08 754.78,261.17 912,240 C964.06,232.99 1024.03,228.96 1065,212 C1142.61,179.87 1208.86,90.77 1181,-21 C1169.65,-66.53 1143.86,-103.88 1110,-130 C1077.04,-155.43 1028.35,-175.79 970,-171c "</string>
+    <string name="indeterminate_progress_36">"M1139 -198 C1112.96,-195.96 1086.75,-190.39 1060,-186 C724.42,-130.9 368.62,-100 -21,-100 C-206.52,-100 -352.82,-106.58 -538,-122 C-587.36,-126.11 -643.08,-130.48 -702,-137 C-729.04,-139.99 -755.08,-146.24 -784,-145 C-814,-143.72 -835.74,-137.28 -857,-128 C-930.63,-95.87 -1001.24,-8.83 -971,105 C-958.3,152.82 -933.55,187.66 -900,214 C-863.65,242.54 -822.66,251.49 -764,258 C-604.41,275.72 -434.69,289.25 -263,295 C-87.78,300.87 91.29,299.55 266,295 C381.34,291.99 494.86,283.26 604,274 C762.94,260.51 929.9,239.45 1083,215 C1134.03,206.85 1192.04,202.57 1233,185 C1309.97,151.99 1375.09,64.69 1348,-47 C1336.52,-94.34 1310.62,-129.78 1277,-156 C1244.09,-181.67 1197.01,-202.54 1139,-198c "</string>
+    <string name="indeterminate_progress_37">"M1273 -223 C1260.98,-222.01 1248.39,-219.92 1235.6,-217.5 C1222.81,-215.07 1209.81,-212.32 1197,-210 C966.02,-168.25 716.41,-134.99 456.35,-116.17 C196.29,-97.35 -74.22,-92.98 -347,-109 C-371.45,-110.44 -398.42,-112.07 -426.29,-113.9 C-454.16,-115.73 -482.93,-117.76 -511,-120 C-538.24,-122.17 -566.8,-124.89 -593,-121 C-620.44,-116.92 -639.32,-109.31 -659,-99 C-728.07,-62.79 -787.77,29.83 -754,136 C-739.63,181.19 -715.06,213.22 -681,238 C-645.58,263.77 -604.66,274.8 -547,279 C-330.87,294.73 -102.21,301.44 131,299 C529.86,294.82 898.81,248.97 1245,188 C1293.44,179.47 1348.93,172.3 1385,153 C1454.2,115.97 1514.13,26.39 1482,-82 C1468.82,-126.48 1443.86,-160.23 1410,-185 C1376.3,-209.65 1329.97,-227.68 1273,-223c "</string>
+    <string name="indeterminate_progress_38">"M1396 -247 C1384.29,-246.25 1372.12,-244.54 1359.84,-242.37 C1347.55,-240.21 1335.16,-237.59 1323,-235 C1242.35,-217.84 1159.48,-202.2 1075.58,-188.17 C991.68,-174.14 906.76,-161.72 822,-151 C647.45,-128.92 465.42,-113.12 278.92,-105.12 C92.42,-97.11 -98.55,-96.91 -291,-106 C-319.6,-107.35 -344.62,-105.15 -366.73,-99.83 C-388.84,-94.52 -408.04,-86.09 -425,-75 C-456,-54.72 -484.76,-22.13 -501.39,18.1 C-518.02,58.32 -522.52,106.19 -505,157 C-491.11,197.3 -467.19,230.65 -435,254 C-401.08,278.61 -361.34,290.67 -306,293 C-92.09,302.01 134.66,300.83 346,291 C720.7,273.57 1058.02,226.02 1386,161 C1433.15,151.65 1480.38,141.86 1513,121 C1574.49,81.68 1629.52,-8.18 1595,-111 C1569.5,-186.95 1497.99,-253.57 1396,-247c "</string>
+    <string name="indeterminate_progress_39">"M1487 -268 C1475.75,-267.12 1464.42,-265.34 1453.07,-263.17 C1441.72,-261 1430.34,-258.44 1419,-256 C1408.2,-253.68 1397.48,-251.27 1386.82,-248.89 C1376.16,-246.52 1365.56,-244.17 1355,-242 C1158.69,-201.57 958.13,-168.1 748.31,-143.85 C538.48,-119.59 319.39,-104.56 86,-101 C64.01,-100.66 37.31,-101.63 10.2,-101.81 C-16.9,-102 -44.41,-101.42 -68,-98 C-92.39,-94.46 -112.22,-87.84 -129.29,-79.04 C-146.36,-70.24 -160.66,-59.26 -174,-47 C-201.16,-22.03 -221.68,10.56 -232,51 C-243.2,94.93 -237.31,146.32 -220,184 C-188.2,253.2 -124.98,300 -22,300 C554.96,300 1059.34,235.05 1531,130 C1615.03,111.29 1675.73,61.99 1696,-18 C1707.22,-62.26 1701.41,-113.05 1684,-151 C1653.53,-217.42 1586.39,-275.77 1487,-268c "</string>
+    <string name="indeterminate_progress_40">"M1580 -288 C1569.02,-287.82 1558.33,-286.59 1547.73,-284.76 C1537.13,-282.94 1526.62,-280.53 1516,-278 C1329.96,-233.65 1137.53,-196.27 937.45,-167.41 C737.37,-138.56 529.64,-118.24 313,-108 C289.85,-106.91 266.93,-106.34 245.25,-104.34 C223.58,-102.33 203.15,-98.87 185,-92 C151.24,-79.21 121.91,-58.96 99.69,-31.9 C77.47,-4.85 62.35,29.01 57,69 C54.11,90.57 54.97,112.34 58.75,132.84 C62.53,153.33 69.22,172.54 78,189 C109.79,248.58 169.07,295 261,295 C352.67,295 445.29,286.74 535,280 C894.48,253 1223.58,200.63 1539,128 C1578.68,118.86 1619.85,111.36 1654,99 C1720.76,74.84 1771.83,17.2 1783,-61 C1789.05,-103.34 1779.11,-148.02 1762,-181 C1731.69,-239.43 1668.35,-289.44 1580,-288c "</string>
+    <string name="indeterminate_progress_41">"M1640 -305 C1621.47,-303.55 1603.27,-299.67 1585.17,-295.09 C1567.08,-290.52 1549.09,-285.24 1531,-281 C1477.75,-268.52 1423.74,-256.18 1369.55,-244.5 C1315.36,-232.82 1260.99,-221.81 1207,-212 C1111.62,-194.67 1018.32,-179.75 923.77,-166.49 C829.22,-153.24 733.41,-141.65 633,-131 C612.82,-128.86 592.3,-127.43 572.08,-125.88 C551.87,-124.33 531.96,-122.65 513,-120 C438.98,-109.65 388.59,-64.25 362,-9 C329.07,59.43 340.86,143.66 378,195 C413.52,244.1 470.86,281.96 558,278 C637.88,274.37 717.93,263.28 796,254 C1110.58,216.59 1403.92,162.28 1683,93 C1720.1,83.79 1748.74,73.39 1775,54 C1800,35.54 1820.18,12.52 1835,-17 C1869.4,-85.51 1855.22,-170.32 1819,-221 C1784.97,-268.62 1722.8,-311.47 1640,-305c "</string>
+    <string name="indeterminate_progress_42">"M1701 -321 C1684.31,-319.63 1667.92,-316.14 1651.65,-311.99 C1635.38,-307.84 1619.22,-303.03 1603,-299 C1476.28,-267.54 1347.03,-238.76 1214.58,-213.61 C1082.13,-188.46 946.5,-166.94 807,-150 C789.03,-147.82 771.91,-145.33 755.97,-141.75 C740.03,-138.18 725.27,-133.52 712,-127 C685.66,-114.05 663.18,-96.41 645.39,-74.45 C627.61,-52.5 614.53,-26.22 607,4 C597.72,41.22 599.94,76.18 608.87,106.85 C617.8,137.53 633.44,163.92 651,184 C686.76,224.89 741.19,258.64 818,252 C887.92,245.96 957.59,233.95 1026,224 C1266.28,189.04 1496.64,142.4 1714,85 C1747,76.29 1778.9,70.6 1805,58 C1856.52,33.13 1894.52,-10.44 1911,-72 C1930.34,-144.21 1903.92,-211.1 1869,-252 C1830.94,-296.58 1772.68,-326.88 1701,-321c "</string>
+    <string name="indeterminate_progress_43">"M1762 -336 C1746.19,-334.9 1731.2,-332.08 1716.53,-328.57 C1701.87,-325.06 1687.52,-320.86 1673,-317 C1574.29,-290.78 1473.48,-266.39 1370.87,-244.37 C1268.27,-222.35 1163.87,-202.72 1058,-186 C1025.18,-180.82 995.89,-176.47 969.45,-168.96 C943.01,-161.46 919.42,-150.8 898,-133 C879.29,-117.45 862.09,-98.59 849.04,-75.55 C836,-52.51 827.1,-25.29 825,7 C822.78,41.02 828.46,71.1 838.84,97.01 C849.23,122.92 864.34,144.66 881,162 C915.41,197.81 964.38,224.82 1035,222 C1064.82,220.81 1096.18,213.17 1127,208 C1342.04,171.91 1545.18,128.66 1743,78 C1802.17,62.85 1856.59,51.3 1897,19 C1934.73,-11.15 1965.34,-55.38 1971,-120 C1976.73,-185.43 1950.08,-240.04 1916,-276 C1883.45,-310.34 1827.33,-340.53 1762,-336c "</string>
+    <string name="indeterminate_progress_44">"M1808 -349 C1793.7,-348.01 1780.06,-345.52 1766.69,-342.4 C1753.32,-339.27 1740.22,-335.52 1727,-332 C1713.99,-328.54 1700.95,-324.87 1688.18,-321.27 C1675.41,-317.68 1662.91,-314.16 1651,-311 C1572.35,-290.15 1494.41,-272.11 1415.73,-255.17 C1337.05,-238.24 1257.62,-222.42 1176,-206 C1149.31,-200.63 1126.51,-191.65 1106.78,-179.38 C1087.04,-167.11 1070.39,-151.55 1056,-133 C1027.49,-96.25 1007.2,-47.97 1014,14 C1019.89,67.66 1045.55,110.83 1080,141 C1113.35,170.21 1161.55,194.66 1223,190 C1277.44,185.87 1332.96,171.84 1387,161 C1548.03,128.69 1702.89,88.79 1854,48 C1905.15,34.19 1945.33,13.53 1975,-24 C2002.3,-58.53 2024.95,-108.71 2018,-172 C2012.18,-225.03 1984.89,-270 1952,-299 C1918.54,-328.51 1867.48,-353.12 1808,-349c "</string>
+    <string name="indeterminate_progress_45">"M1853 -361 C1826.42,-359.57 1802.2,-354.21 1778.74,-347.63 C1755.28,-341.06 1732.57,-333.27 1709,-327 C1663.45,-314.88 1616.15,-302.72 1568.63,-290.92 C1521.12,-279.12 1473.39,-267.68 1427,-257 C1404.39,-251.79 1378.86,-247.68 1354,-242.54 C1329.14,-237.41 1304.95,-231.27 1285,-222 C1248.81,-205.19 1214.39,-175.2 1192.48,-135.53 C1170.57,-95.86 1161.16,-46.51 1175,9 C1186.23,54.06 1211.95,90.39 1244,116 C1275.98,141.56 1320.49,162.26 1377,160 C1401.44,159.02 1426.8,152.54 1452,147 C1573.59,120.28 1692.02,92.2 1806,61 C1851.55,48.53 1902.21,39.28 1943,21 C1981.01,3.96 2014.53,-25.54 2035,-63 C2054.98,-99.57 2068.68,-155.45 2055,-210 C2043.49,-255.87 2017.77,-291.27 1986,-317 C1955.82,-341.45 1906.33,-363.87 1853,-361c "</string>
+    <string name="indeterminate_progress_46">"M1879 -371 C1855.84,-369.1 1833.88,-363.8 1812.31,-357.5 C1790.74,-351.2 1769.57,-343.9 1748,-338 C1705.55,-326.38 1662.66,-314.62 1619.58,-303.26 C1576.5,-291.91 1533.22,-280.97 1490,-271 C1477.96,-268.22 1466.77,-265.89 1456.19,-263.3 C1445.61,-260.7 1435.63,-257.84 1426,-254 C1397.93,-242.8 1372.88,-225.68 1352.62,-204.17 C1332.36,-182.66 1316.9,-156.75 1308,-128 C1301.29,-106.31 1298.77,-82.16 1300.06,-58.26 C1301.35,-34.35 1306.46,-10.7 1315,10 C1328.97,43.86 1354.44,76.47 1388.92,99.44 C1423.41,122.41 1466.93,135.73 1517,131 C1538.99,128.93 1561.43,122.33 1584,117 C1694.61,90.86 1801.5,62.81 1906,33 C1950.61,20.28 1990.32,9.42 2021,-15 C2077.17,-59.7 2121.6,-152.41 2082,-249 C2052.82,-320.16 1979.29,-379.23 1879,-371c "</string>
+    <string name="indeterminate_progress_47">"M1917 -381 C1894.47,-379.33 1874.18,-374.77 1854.43,-369.16 C1834.67,-363.54 1815.44,-356.87 1795,-351 C1775.41,-345.37 1755.69,-339.8 1735.98,-334.3 C1716.28,-328.8 1696.57,-323.37 1677,-318 C1655.71,-312.16 1635.71,-307.53 1615.91,-302.93 C1596.11,-298.33 1576.51,-293.75 1556,-288 C1518.95,-277.61 1486.57,-257.44 1461.65,-230.32 C1436.73,-203.2 1419.25,-169.14 1412,-131 C1407.72,-108.49 1407.85,-85.43 1411.23,-63.65 C1414.61,-41.87 1421.25,-21.38 1430,-4 C1445.1,25.99 1469.59,55.09 1501.94,75.77 C1534.28,96.45 1574.48,108.71 1621,105 C1662.49,101.69 1703.3,88.68 1744,78 C1824.94,56.76 1901.6,35.95 1980,12 C2055.14,-10.95 2109.6,-63.03 2125,-144 C2134.11,-191.88 2123.42,-237.96 2108,-270 C2078.07,-332.19 2008.91,-387.8 1917,-381c "</string>
+    <string name="indeterminate_progress_48">"M1938 -389 C1918.02,-387.29 1899.13,-382.71 1880.56,-377.22 C1861.99,-371.74 1843.73,-365.34 1825,-360 C1807.04,-354.88 1788.76,-349.64 1770.36,-344.43 C1751.95,-339.21 1733.43,-334.02 1715,-329 C1695.02,-323.55 1676.29,-319.2 1658.55,-314.13 C1640.81,-309.06 1624.04,-303.29 1608,-295 C1579.39,-280.22 1552.9,-257.61 1533.32,-228.25 C1513.73,-198.88 1501.03,-162.77 1500,-121 C1499.48,-99.88 1502.66,-79.69 1508.25,-61.13 C1513.84,-42.57 1521.86,-25.63 1531,-11 C1565.04,43.45 1626.35,88.61 1719,81 C1756.71,77.9 1795.59,64.05 1832,54 C1869.38,43.69 1905.63,33.72 1942,23 C1979,12.1 2017.29,3.77 2048,-12 C2106.27,-41.91 2155.33,-100.64 2157,-185 C2157.86,-228.59 2143.96,-268.45 2127,-296 C2092.42,-352.19 2025.63,-396.5 1938,-389c "</string>
+    <string name="indeterminate_progress_49">"M1968 -397 C1948.07,-395.44 1929.72,-391.19 1912.16,-386.08 C1894.59,-380.97 1877.8,-375 1861,-370 C1843.57,-364.82 1826.22,-359.67 1809.03,-354.64 C1791.83,-349.62 1774.8,-344.71 1758,-340 C1738.06,-334.41 1721.02,-329.65 1705.61,-323.91 C1690.2,-318.18 1676.43,-311.48 1663,-302 C1651,-293.53 1639.65,-284.24 1629.09,-272.96 C1618.54,-261.69 1608.79,-248.42 1600,-232 C1582.06,-198.48 1576.15,-159.81 1579.3,-122.98 C1582.45,-86.15 1594.66,-51.16 1613,-25 C1648.02,24.96 1705.28,67.84 1791,61 C1828.15,58.04 1863.89,45.73 1898,36 C1932.04,26.29 1967.24,16.14 2001,6 C2034.31,-4 2068.94,-15.13 2095,-33 C2143.84,-66.49 2187.78,-128.14 2182,-212 C2179.47,-248.64 2164.22,-286.95 2148,-311 C2114.12,-361.25 2048.55,-403.3 1968,-397c "</string>
+    <string name="indeterminate_progress_50">"M1994 -404 C1974.92,-402.77 1957.48,-399.23 1940.77,-394.77 C1924.07,-390.3 1908.1,-384.92 1892,-380 C1875.77,-375.04 1859.61,-370.12 1843.46,-365.27 C1827.3,-360.42 1811.17,-355.65 1795,-351 C1762.37,-341.62 1734.85,-328.32 1712.13,-309.52 C1689.4,-290.71 1671.47,-266.4 1658,-235 C1643.1,-200.25 1640.2,-162.74 1645.36,-128.05 C1650.51,-93.35 1663.71,-61.48 1681,-38 C1697.9,-15.06 1720.48,6.55 1748.8,21.74 C1777.12,36.94 1811.17,45.72 1851,43 C1869.38,41.75 1886.68,38.15 1903.48,33.67 C1920.29,29.18 1936.6,23.81 1953,19 C1986.59,9.16 2019.21,-0.58 2050,-10 C2116.98,-30.5 2161.4,-66.4 2187,-126 C2200.41,-157.22 2207.11,-195.75 2202,-233 C2196.75,-271.26 2182.39,-298.2 2165,-322 C2131.47,-367.9 2073.87,-409.14 1994,-404c "</string>
+    <string name="indeterminate_progress_51">"M2013 -410 C2003.61,-409.39 1994.32,-408.36 1985.41,-406.87 C1976.49,-405.39 1967.94,-403.44 1960,-401 C1936.86,-393.89 1913.03,-387.2 1889.78,-380.25 C1866.53,-373.31 1843.85,-366.11 1823,-358 C1795.57,-347.33 1771.25,-331.83 1751.32,-311.26 C1731.4,-290.68 1715.87,-265.02 1706,-234 C1694.29,-197.19 1694.75,-160.83 1702.28,-128.48 C1709.8,-96.13 1724.41,-67.79 1741,-47 C1758.18,-25.47 1780.08,-5.59 1807.49,8.35 C1834.89,22.29 1867.8,30.27 1907,28 C1923.88,27.02 1940.1,23.7 1956.12,19.41 C1972.14,15.12 1987.95,9.86 2004,5 C2019.65,0.27 2035.34,-4.2 2050.65,-8.88 C2065.96,-13.55 2080.89,-18.44 2095,-24 C2153.39,-47.02 2192.43,-90.22 2212,-148 C2235.67,-217.89 2212.62,-293.74 2180,-335 C2149.08,-374.11 2090.43,-414.98 2013,-410c "</string>
+    <string name="indeterminate_progress_52">"M2026 -415 C2008.21,-413.68 1992.19,-410.31 1976.88,-406.07 C1961.57,-401.83 1946.96,-396.74 1932,-392 C1916.81,-387.18 1901.5,-382.75 1887.03,-377.86 C1872.55,-372.97 1858.89,-367.63 1847,-361 C1823.18,-347.72 1801.58,-330.64 1784.24,-309.04 C1766.9,-287.45 1753.81,-261.34 1747,-230 C1738.93,-192.85 1741.7,-158.46 1750.72,-128.55 C1759.75,-98.64 1775.03,-73.21 1792,-54 C1809.62,-34.04 1831.33,-15.84 1858.28,-3.23 C1885.23,9.38 1917.42,16.4 1956,14 C1972.29,12.99 1987.98,9.55 2003.26,5.22 C2018.53,0.88 2033.39,-4.37 2048,-9 C2062.62,-13.63 2077.58,-18.1 2092.03,-23.05 C2106.48,-28 2120.42,-33.44 2133,-40 C2183.73,-66.48 2220.06,-111.51 2234,-170 C2251.17,-242.03 2221.03,-311.29 2190,-347 C2155.44,-386.78 2098.94,-420.39 2026,-415c "</string>
+    <string name="indeterminate_progress_53">"M2035 -419 C2018.03,-417.61 2002.83,-414.17 1988.22,-409.92 C1973.61,-405.68 1959.6,-400.62 1945,-396 C1929.99,-391.24 1915.88,-386.54 1902.83,-381.12 C1889.77,-375.71 1877.78,-369.59 1867,-362 C1846.17,-347.34 1826.91,-328.8 1811.85,-305.82 C1796.8,-282.85 1785.97,-255.42 1782,-223 C1777.51,-186.32 1782.26,-154.15 1792.5,-126.62 C1802.75,-99.08 1818.49,-76.18 1836,-58 C1853.47,-39.86 1875.92,-23.08 1903.02,-11.72 C1930.13,-0.36 1961.89,5.57 1998,2 C2013.61,0.46 2028.33,-2.98 2042.78,-7.18 C2057.24,-11.39 2071.43,-16.37 2086,-21 C2099.99,-25.45 2114.29,-30 2127.82,-35.29 C2141.34,-40.57 2154.1,-46.6 2165,-54 C2209.24,-84.04 2242.69,-131.41 2251,-192 C2261.06,-265.31 2230.86,-322.96 2198,-358 C2164.79,-393.41 2109.99,-425.16 2035,-419c "</string>
+    <string name="indeterminate_progress_54">"M2048 -423 C2034.52,-421.89 2023.13,-419.7 2012.3,-416.87 C2001.47,-414.05 1991.22,-410.61 1980,-407 C1969.12,-403.5 1958.34,-400.34 1948.04,-396.88 C1937.74,-393.43 1927.93,-389.67 1919,-385 C1899.26,-374.66 1883.06,-362.52 1869.52,-348.78 C1855.98,-335.04 1845.1,-319.71 1836,-303 C1826.17,-284.95 1818.62,-262.83 1814.8,-239.16 C1810.98,-215.48 1810.9,-190.26 1816,-166 C1824.81,-124.13 1845.68,-87.42 1875.54,-59.91 C1905.39,-32.39 1944.24,-14.08 1989,-9 C2015.48,-5.99 2038.19,-8.51 2059.92,-13.64 C2081.65,-18.77 2102.41,-26.52 2125,-34 C2162.45,-46.39 2197.45,-69.04 2223.09,-101.01 C2248.73,-132.98 2265,-174.29 2265,-224 C2265,-257.55 2257.85,-285.51 2246.41,-309.23 C2234.96,-332.95 2219.21,-352.42 2202,-369 C2168.19,-401.57 2116.15,-428.59 2048,-423c "</string>
+    <string name="indeterminate_progress_55">"M2056 -426 C2040.73,-424.75 2025.49,-421.51 2010.94,-417.46 C1996.39,-413.4 1982.52,-408.53 1970,-404 C1956.36,-399.06 1944.24,-393.17 1933.34,-386.46 C1922.45,-379.75 1912.77,-372.22 1904,-364 C1886.94,-348 1870.57,-328.74 1858.28,-304.99 C1845.98,-281.24 1837.76,-252.98 1837,-219 C1836.25,-185.71 1842.79,-156.92 1854.12,-132.22 C1865.45,-107.52 1881.57,-86.92 1900,-70 C1917.59,-53.86 1939.31,-38.58 1965.28,-28.23 C1991.24,-17.87 2021.45,-12.45 2056,-16 C2069.73,-17.41 2083.86,-20.52 2098,-24.48 C2112.14,-28.43 2126.27,-33.23 2140,-38 C2177.19,-50.93 2209.98,-73.51 2233.83,-104.56 C2257.68,-135.61 2272.58,-175.15 2274,-222 C2275.03,-256.11 2267.97,-285.17 2256.56,-309.79 C2245.15,-334.42 2229.38,-354.62 2213,-371 C2179.81,-404.19 2126.45,-431.78 2056,-426c "</string>
+    <string name="indeterminate_progress_56">"M2070 -429 C2054.11,-427.83 2039.39,-424.99 2025.5,-421.24 C2011.62,-417.49 1998.56,-412.83 1986,-408 C1972.35,-402.75 1960.84,-396.75 1950.5,-390.06 C1940.16,-383.37 1930.98,-375.99 1922,-368 C1904.86,-352.74 1888.86,-333.04 1877.15,-309 C1865.43,-284.96 1858,-256.59 1858,-224 C1858,-191.48 1864.22,-163.11 1874.96,-138.68 C1885.69,-114.24 1900.94,-93.75 1919,-77 C1936.46,-60.8 1957.91,-45.91 1983.4,-35.64 C2008.89,-25.36 2038.42,-19.71 2072,-22 C2085.63,-22.93 2099.7,-25.74 2113.57,-29.54 C2127.45,-33.34 2141.13,-38.13 2154,-43 C2188.92,-56.23 2220.88,-79.24 2244.25,-110.32 C2267.62,-141.39 2282.41,-180.53 2283,-226 C2283.44,-259.42 2276.49,-288.29 2265.28,-312.75 C2254.07,-337.2 2238.61,-357.24 2222,-373 C2189.33,-404.01 2137.11,-433.96 2070,-429c "</string>
+    <string name="indeterminate_progress_57">"M2074 -431 C2067.27,-430.47 2061.91,-429.95 2057.16,-429.32 C2052.4,-428.69 2048.27,-427.96 2044,-427 C2016.54,-420.84 1992.45,-411.46 1971.52,-399.05 C1950.6,-386.65 1932.83,-371.23 1918,-353 C1905.73,-337.91 1892.68,-315.95 1883.98,-289.37 C1875.27,-262.79 1870.91,-231.58 1876,-198 C1880.07,-171.13 1888.38,-147.32 1900.64,-126.25 C1912.9,-105.19 1929.11,-86.87 1949,-71 C1967.14,-56.52 1990.42,-43.76 2016.89,-35.75 C2043.37,-27.74 2073.05,-24.48 2104,-29 C2131.69,-33.04 2156.62,-41.35 2178.66,-53 C2200.71,-64.65 2219.86,-79.63 2236,-97 C2251.9,-114.12 2266.06,-135.28 2275.66,-159.96 C2285.26,-184.64 2290.3,-212.83 2288,-244 C2285.7,-275.1 2278.29,-301.18 2267.16,-323.44 C2256.03,-345.7 2241.18,-364.14 2224,-380 C2192.75,-408.84 2138.58,-436.05 2074,-431c "</string>
+    <string name="indeterminate_progress_58">"M2090 -433 C2079.15,-432.82 2068.99,-431.84 2059.32,-430.22 C2049.66,-428.59 2040.5,-426.32 2031.67,-423.56 C2022.84,-420.81 2014.34,-417.57 2006,-414 C1972.49,-399.68 1942.32,-376.89 1920.49,-346.2 C1898.66,-315.52 1885.16,-276.93 1885,-231 C1884.89,-199.3 1891.54,-172.16 1902.39,-148.76 C1913.24,-125.35 1928.3,-105.7 1945,-89 C1961.99,-72.01 1982.49,-57.13 2006.61,-46.69 C2030.74,-36.25 2058.5,-30.24 2090,-31 C2118.98,-31.69 2146.38,-38.09 2170.71,-48.49 C2195.04,-58.89 2216.3,-73.3 2233,-90 C2249.92,-106.92 2265.03,-126.77 2275.99,-150.22 C2286.94,-173.67 2293.73,-200.71 2294,-232 C2294.27,-263.44 2287.4,-291.32 2276.52,-315.27 C2265.64,-339.22 2250.75,-359.25 2235,-375 C2218.75,-391.25 2198.15,-406 2173.79,-416.57 C2149.42,-427.13 2121.3,-433.51 2090,-433c "</string>
+    <string name="indeterminate_progress_59">"M2088 -434 C2073.56,-433.07 2058.65,-430.77 2044.55,-427.34 C2030.45,-423.92 2017.17,-419.39 2006,-414 C1994.71,-408.55 1983.93,-402.05 1974.11,-394.92 C1964.29,-387.78 1955.43,-380.01 1948,-372 C1932.68,-355.48 1918.25,-334.46 1907.99,-309.83 C1897.73,-285.2 1891.64,-256.96 1893,-226 C1894.35,-195.33 1901.36,-168.86 1912.41,-146.04 C1923.45,-123.22 1938.53,-104.06 1956,-88 C1973.16,-72.23 1994.54,-57.77 2019.07,-47.74 C2043.6,-37.7 2071.27,-32.08 2101,-34 C2130.44,-35.9 2156.54,-42.38 2179.6,-52.91 C2202.66,-63.43 2222.69,-77.98 2240,-96 C2256.04,-112.7 2270.94,-132.52 2281.5,-156.25 C2292.07,-179.98 2298.29,-207.63 2297,-240 C2295.78,-270.62 2288.45,-297.7 2277.35,-320.96 C2266.24,-344.22 2251.35,-363.66 2235,-379 C2201.84,-410.09 2151.36,-438.08 2088,-434c "</string>
+    <string name="indeterminate_progress_60">"M2081 -434 C2061.85,-432.43 2043.71,-428.03 2026.99,-421.68 C2010.26,-415.32 1994.96,-407.01 1981.49,-397.61 C1968.02,-388.21 1956.39,-377.72 1947,-367 C1932.41,-350.35 1918.99,-329.51 1909.93,-304.5 C1900.87,-279.49 1896.16,-250.32 1899,-217 C1901.47,-187.99 1909.18,-162.6 1920.78,-140.53 C1932.39,-118.47 1947.91,-99.72 1966,-84 C1983.82,-68.52 2006.42,-55.12 2032.02,-46.29 C2057.61,-37.46 2086.2,-33.2 2116,-36 C2145.54,-38.78 2170.61,-46.49 2192.26,-58.02 C2213.91,-69.56 2232.15,-84.92 2248,-103 C2263.25,-120.39 2277.16,-141.16 2286.55,-165.69 C2295.94,-190.23 2300.82,-218.54 2298,-251 C2295.43,-280.64 2287.42,-306.3 2275.82,-328.47 C2264.21,-350.64 2248.99,-369.32 2232,-385 C2215.77,-399.98 2193.85,-413.53 2168.07,-422.69 C2142.29,-431.84 2112.66,-436.6 2081,-434c "</string>
+
+    <!--
+        Bezier curve interpolation points for alpha animation on the progress dial:
+         87ms: 0
+        500ms: M 0,0 C 0.6,0 0.999,1 1,1
+        417ms: M 0,1 C 0.001,1 0.201,0.033 1,0
+    -->
+    <dimen name="indeterminate_progress_alpha_01">0</dimen>
+    <dimen name="indeterminate_progress_alpha_02">0</dimen>
+    <dimen name="indeterminate_progress_alpha_03">0</dimen>
+    <dimen name="indeterminate_progress_alpha_04">0</dimen>
+    <dimen name="indeterminate_progress_alpha_05">0</dimen>
+    <dimen name="indeterminate_progress_alpha_06">0</dimen>
+    <dimen name="indeterminate_progress_alpha_07">0.05856</dimen>
+    <dimen name="indeterminate_progress_alpha_08">0.11584</dimen>
+    <dimen name="indeterminate_progress_alpha_09">0.17180</dimen>
+    <dimen name="indeterminate_progress_alpha_10">0.22639</dimen>
+    <dimen name="indeterminate_progress_alpha_11">0.27960</dimen>
+    <dimen name="indeterminate_progress_alpha_12">0.33137</dimen>
+    <dimen name="indeterminate_progress_alpha_13">0.38167</dimen>
+    <dimen name="indeterminate_progress_alpha_14">0.43045</dimen>
+    <dimen name="indeterminate_progress_alpha_15">0.47768</dimen>
+    <dimen name="indeterminate_progress_alpha_16">0.52329</dimen>
+    <dimen name="indeterminate_progress_alpha_17">0.56726</dimen>
+    <dimen name="indeterminate_progress_alpha_18">0.60952</dimen>
+    <dimen name="indeterminate_progress_alpha_19">0.65002</dimen>
+    <dimen name="indeterminate_progress_alpha_20">0.68871</dimen>
+    <dimen name="indeterminate_progress_alpha_21">0.72551</dimen>
+    <dimen name="indeterminate_progress_alpha_22">0.76038</dimen>
+    <dimen name="indeterminate_progress_alpha_23">0.79324</dimen>
+    <dimen name="indeterminate_progress_alpha_24">0.82403</dimen>
+    <dimen name="indeterminate_progress_alpha_25">0.85266</dimen>
+    <dimen name="indeterminate_progress_alpha_26">0.87906</dimen>
+    <dimen name="indeterminate_progress_alpha_27">0.90313</dimen>
+    <dimen name="indeterminate_progress_alpha_28">0.92480</dimen>
+    <dimen name="indeterminate_progress_alpha_29">0.94397</dimen>
+    <dimen name="indeterminate_progress_alpha_30">0.96053</dimen>
+    <dimen name="indeterminate_progress_alpha_31">0.97436</dimen>
+    <dimen name="indeterminate_progress_alpha_32">0.98536</dimen>
+    <dimen name="indeterminate_progress_alpha_33">0.99339</dimen>
+    <dimen name="indeterminate_progress_alpha_34">0.99832</dimen>
+    <dimen name="indeterminate_progress_alpha_35">1.00000</dimen>
+    <dimen name="indeterminate_progress_alpha_36">1.00000</dimen>
+    <dimen name="indeterminate_progress_alpha_37">0.83128</dimen>
+    <dimen name="indeterminate_progress_alpha_38">0.70436</dimen>
+    <dimen name="indeterminate_progress_alpha_39">0.60258</dimen>
+    <dimen name="indeterminate_progress_alpha_40">0.51807</dimen>
+    <dimen name="indeterminate_progress_alpha_41">0.44637</dimen>
+    <dimen name="indeterminate_progress_alpha_42">0.38467</dimen>
+    <dimen name="indeterminate_progress_alpha_43">0.33105</dimen>
+    <dimen name="indeterminate_progress_alpha_44">0.28413</dimen>
+    <dimen name="indeterminate_progress_alpha_45">0.24289</dimen>
+    <dimen name="indeterminate_progress_alpha_46">0.20656</dimen>
+    <dimen name="indeterminate_progress_alpha_47">0.17450</dimen>
+    <dimen name="indeterminate_progress_alpha_48">0.14622</dimen>
+    <dimen name="indeterminate_progress_alpha_49">0.12130</dimen>
+    <dimen name="indeterminate_progress_alpha_50">0.09942</dimen>
+    <dimen name="indeterminate_progress_alpha_51">0.08027</dimen>
+    <dimen name="indeterminate_progress_alpha_52">0.06363</dimen>
+    <dimen name="indeterminate_progress_alpha_53">0.04927</dimen>
+    <dimen name="indeterminate_progress_alpha_54">0.03702</dimen>
+    <dimen name="indeterminate_progress_alpha_55">0.02671</dimen>
+    <dimen name="indeterminate_progress_alpha_56">0.01822</dimen>
+    <dimen name="indeterminate_progress_alpha_57">0.01140</dimen>
+    <dimen name="indeterminate_progress_alpha_58">0.00616</dimen>
+    <dimen name="indeterminate_progress_alpha_59">0.00239</dimen>
+    <dimen name="indeterminate_progress_alpha_60">0.00000</dimen>
+
+</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index c6505d7..efebc8a 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -300,6 +300,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Система Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Переключиться на личный профиль"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Перейти в рабочий профиль"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Открыть <xliff:g id="APP_NAME">%1$s</xliff:g> в личном профиле"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Открыть <xliff:g id="APP_NAME">%1$s</xliff:g> в рабочем профиле"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Контакты"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"доступ к контактам"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Местоположение"</string>
@@ -505,7 +507,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Приложение сможет контролировать вибросигналы."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Приложение сможет получать доступ к состоянию виброотклика."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"Осуществление телефонных вызовов"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Приложение сможет без вашего участия звонить на любой номер телефона. Это не относится к номерам экстренных служб. Вредоносные программы смогут совершать вызовы без вашего разрешения, что может привести к непредвиденным расходам."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Разрешает приложению совершать вызовы без вашего участия. Это может привести к непредвиденным расходам или незапланированным звонкам. Обратите внимание, что приложению не предоставляется разрешение на звонки в экстренные службы. Из-за вредоносных приложений, которые совершают платные звонки без вашего подтверждения или используют коды оператора, чтобы входящие вызовы автоматически переадресовывались на другой номер, у вас могут списываться средства."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"совершение звонков с помощью службы IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Позволяет приложению совершать звонки с помощью службы IMS без вашего вмешательства."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"Получение данных о статусе телефона"</string>
@@ -590,6 +592,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Приложение сможет получать сведения о предпочтительном платежном сервисе NFC (например, зарегистрированные идентификаторы AID и конечный пункт маршрута)."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"Управление NFC-модулем"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Приложение сможет обмениваться данными с NFC-метками, картами и устройствами считывания, используя NFC."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Транзакции, обрабатываемые в защитном элементе"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Позволяет приложению получать информацию о транзакциях, обрабатываемых в защитном элементе."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"Отключение функции блокировки экрана"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Приложение сможет отключать блокировку экрана и другие функции защиты. Например, блокировка экрана будет отключаться при получении входящего вызова и включаться после завершения разговора."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"Запрос данных об уровне сложности блокировки экрана"</string>
@@ -616,17 +620,20 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Использовать биометрию или блокировку экрана"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Подтвердите, что это вы"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Чтобы продолжить, используйте биометрические данные."</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Чтобы продолжить, прикоснитесь пальцем к сканеру."</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Чтобы продолжить, используйте фейсконтроль."</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Чтобы продолжить, используйте биометрию или данные для разблокировки экрана."</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Биометрическое оборудование недоступно"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Аутентификация отменена"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Не распознано"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Лицо не распознано."</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Аутентификация отменена"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Укажите PIN-код, пароль или графический ключ"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Ошибка аутентификации."</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Использовать блокировку экрана"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Чтобы продолжить, разблокируйте экран."</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Плотно прижмите палец к сканеру."</string>
-    <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Не удалось распознать отпечаток пальца. Повторите попытку."</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Плотно прижмите палец к сканеру"</string>
+    <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Не удалось распознать отпечаток. Повторите попытку."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Очистите сканер отпечатков пальцев и повторите попытку."</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Очистите сканер и повторите попытку."</string>
     <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Плотно прижмите палец к сканеру."</string>
@@ -711,8 +718,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Распознавание отменено"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Фейсконтроль: операция отменена пользователем."</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Слишком много попыток. Повторите позже."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Слишком много попыток. Фейсконтроль недоступен."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Слишком много попыток. Используйте другой способ разблокировки экрана."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Не удалось распознать лицо. Повторите попытку."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Вы не настроили фейсконтроль."</string>
@@ -1366,12 +1372,12 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"Режим MIDI включен"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Устройство подключено как веб-камера"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"USB-устройство подключено"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"Нажмите, чтобы показать дополнительные параметры."</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"Нажмите, чтобы посмотреть дополнительные параметры"</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Подключенное устройство заряжается. Нажмите, чтобы увидеть другие настройки."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Обнаружено аналоговое аудиоустройство"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Подсоединенное устройство несовместимо с этим телефоном. Нажмите, чтобы узнать подробности."</string>
     <string name="adb_active_notification_title" msgid="408390247354560331">"Отладка по USB активна"</string>
-    <string name="adb_active_notification_message" msgid="5617264033476778211">"Нажмите, чтобы отключить"</string>
+    <string name="adb_active_notification_message" msgid="5617264033476778211">"Нажмите, чтобы отключить."</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Нажмите, чтобы запретить"</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Отладка по Wi-Fi включена"</string>
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Нажмите, чтобы отключить отладку по Wi-Fi."</string>
@@ -1394,7 +1400,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ОТКЛОНИТЬ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Выберите способ ввода"</string>
     <string name="show_ime" msgid="6406112007347443383">"Не скрывать экранную клавиатуру, когда включена физическая"</string>
-    <string name="hardware" msgid="1800597768237606953">"Виртуальная клавиатура"</string>
+    <string name="hardware" msgid="3611039921284836033">"Использовать экранную клавиатуру"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Настройте устройство \"<xliff:g id="DEVICE_NAME">%s</xliff:g>\""</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Настройте физические клавиатуры"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Нажмите, чтобы выбрать язык и раскладку"</string>
@@ -1683,10 +1689,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Удалить"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Установить громкость выше рекомендуемого уровня?\n\nВоздействие громкого звука в течение долгого времени может привести к повреждению слуха."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Внимание!\nПревышено количество громких звуков, которое считается безопасным при прослушивании в наушниках в течение недели.\n\nВыход за пределы лимита ведет к необратимому повреждению слуха."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Внимание!\nКоличество громких звуков, которое считается безопасным при прослушивании в наушниках в течение недели, превышено в 5 раз.\n\nГромкость снижена для защиты слуха."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Выбранный у вас уровень громкости вреден для слуха при долгом воздействии.\n\nПрослушивание на текущем уровне громкости в течение длительного времени может привести к повреждению слуха."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Внимание!\nВы слушаете аудио на опасном уровне громкости.\n\nПрослушивание на текущем уровне громкости ведет к необратимому повреждению слуха."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Продолжить воспроизведение с высокой громкостью?\n\nВы используете наушники при высоком уровне громкости дольше, чем рекомендуется. Это может привести к повреждению слуха."</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Обнаружен громкий звук\n\nУровень громкости наушников выше, чем рекомендуется. Это может привести к повреждению слуха."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Использовать быстрое включение?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Чтобы использовать функцию специальных возможностей, когда она включена, нажмите и удерживайте обе кнопки регулировки громкости в течение трех секунд."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Использовать быстрое включение?"</string>
@@ -1853,7 +1857,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Чтобы выйти, проведите по экрану сверху вниз."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"ОК"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Поверните, чтобы лучше видеть."</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Выйдите из режима разделения экрана, чтобы лучше видеть."</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Откройте приложение \"<xliff:g id="NAME">%s</xliff:g>\" в полноэкранном режиме, чтобы лучше видеть."</string>
     <string name="done_label" msgid="7283767013231718521">"Готово"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Выбор часов на циферблате"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Выбор минут на циферблате"</string>
@@ -1959,7 +1963,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Приложение недоступно"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" сейчас недоступно."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"Недоступно: <xliff:g id="ACTIVITY">%1$s</xliff:g>"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Требуется разрешение"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Запрос разрешений заблокирован"</string>
     <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>
@@ -1970,6 +1974,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Это приложение запрашивает дополнительные разрешения, которые невозможно предоставить во время трансляции на устройство. Сначала откройте доступ на устройстве Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Это приложение запрашивает дополнительные разрешения, которые невозможно предоставить во время трансляции на устройство. Сначала откройте доступ на планшете."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Это приложение запрашивает дополнительные разрешения, которые невозможно предоставить во время трансляции на устройство. Сначала откройте доступ на телефоне."</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>
@@ -1978,6 +1985,7 @@
     <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="5246906284426844596">"Это приложение было разработано для более ранней версии Android. Оно не соответствует последним требованиям к обеспечению конфиденциальности и безопасности данных и может работать некорректно. Проверьте наличие обновлений или свяжитесь с разработчиком приложения."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Проверить обновления"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Это приложение не совместимо с последней версией Android. Проверьте наличие обновлений или свяжитесь с разработчиком приложения."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Новые сообщения"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Чтобы просмотреть, откройте приложение для обмена SMS"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Некоторые функции могут не работать"</string>
@@ -2159,18 +2167,23 @@
     <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Заблокировано вашим администратором"</string>
     <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Этот контент нельзя открывать через рабочие приложения."</string>
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Этот контент нельзя открыть в рабочем приложении."</string>
-    <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Этот контент нельзя открывать через личные приложения."</string>
+    <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Этим контентом нельзя делиться с личными приложениями."</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Этот контент нельзя открыть в личном приложении."</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Действие рабочего профиля приостановлено."</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Нажмите, чтобы включить"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Рабочие приложения приостановлены."</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Включить"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Не поддерживается рабочими приложениями."</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Не поддерживается личными приложениями."</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Открыть рабочее приложение \"<xliff:g id="APP">%s</xliff:g>\"?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Открыть в личном приложении \"<xliff:g id="APP">%s</xliff:g>\"?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Открыть в рабочем приложении \"<xliff:g id="APP">%s</xliff:g>\"?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Позвонить из рабочего приложения?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Перейти в рабочее приложение?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"В вашей организации разрешено звонить только из рабочих приложений."</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"В вашей организации разрешено отправлять сообщения только из рабочих приложений."</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Использовать личный браузер"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Использовать рабочий браузер"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Позвонить"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Перейти"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-код для разблокировки сети SIM-карты"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN-код для разблокировки подмножества сети SIM-карты"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN-код для разблокировки корпоративной SIM-карты"</string>
@@ -2307,6 +2320,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"У устройства <xliff:g id="DEVICE">%1$s</xliff:g> нет доступа к камере телефона."</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"У устройства \"<xliff:g id="DEVICE">%1$s</xliff:g>\" нет доступа к камере планшета."</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Этот контент недоступен во время трансляции. Используйте телефон."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Нельзя запустить режим \"Картинка в картинке\" во время потоковой передачи"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Системные настройки по умолчанию"</string>
     <string name="default_card_name" msgid="9198284935962911468">"КАРТА <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Разрешение для сопутствующего приложения управлять часами"</string>
@@ -2321,7 +2335,7 @@
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Микрофон заблокирован."</string>
     <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Двойной экран"</string>
     <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Двойной экран включен"</string>
-    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> показывает контент на обоих экранах."</string>
+    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> использует оба экрана."</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Устройство перегрелось"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Двойной экран недоступен из-за перегрева телефона."</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Функция Dual Screen недоступна"</string>
@@ -2329,10 +2343,10 @@
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Открыть настройки"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Отключить"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"Устройство \"<xliff:g id="DEVICE_NAME">%s</xliff:g>\" настроено"</string>
-    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Для клавиатуры настроена раскладка <xliff:g id="LAYOUT_1">%s</xliff:g>. Нажмите, чтобы изменить."</string>
-    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Для клавиатуры настроены раскладки <xliff:g id="LAYOUT_1">%1$s</xliff:g> и <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Нажмите, чтобы изменить."</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Для клавиатуры настроены раскладки <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> и <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Нажмите, чтобы изменить."</string>
-    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Для клавиатуры настроено несколько раскладок: <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g> и другие. Нажмите, чтобы изменить."</string>
+    <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Настроена раскладка клавиатуры для яз.: <xliff:g id="LAYOUT_1">%s</xliff:g>. Нажмите, чтобы изменить."</string>
+    <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Настроены раскладки клавиатуры для яз.: <xliff:g id="LAYOUT_1">%1$s</xliff:g> и <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Нажмите, чтобы изменить."</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Настроены раскладки клавиатуры для яз.: <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> и <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Нажмите, чтобы изменить."</string>
+    <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Настроены раскладки клавиатуры для яз.: <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g> и др. Нажмите, чтобы изменить."</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"Физические клавиатуры настроены"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"Нажмите, чтобы посмотреть подключенные клавиатуры."</string>
 </resources>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index dd63364..4a0b715 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android පද්ධතිය"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"පුද්ගලික පැතිකඩ වෙත මාරුවන්න"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"කාර්යාල පැතිකඩ වෙත මාරු වන්න"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"පුද්ගලික වෙත මාරු කරන්න <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"කාර්යාලය වෙත මාරු කරන්න <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"සම්බන්ධතා"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"ඔබේ සම්බන්ධතාවලට පිවිසෙන්න"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"ස්ථානය"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"කම්පකය පාලනයට යෙදුමට අවසර දෙන්න."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"යෙදුමට කම්පන තත්ත්වයට ප්‍රවේශ වීමට ඉඩ දෙන්න."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"දුරකථන අංක වෙත ඍජුවම අමතන්න"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"ඔබගේ මැදිහත් වීමක් නොමැතිව දුරකථන අංක ඇමතීමට යෙදුමට අවසර දෙන්න. මෙහි ප්‍රතිඑලය වන්නේ අනපේක්ෂිත අයකිරීම් හෝ ඇමතුම් ඇතිවීමයි. මෙයන් හදිසි අංක වලට ඇමතුම් ගැනීමට යෙදුමට අවසර නොදෙන බවට සටහන් කරගන්න. ඔබගේ අනුදැනුමක් නොමැතිව ඇමතුම් ගැනීමෙන් අනිෂ්ට යෙදුම් ඔබගේ මුදල් නිකරුණේ වැය කරයි."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"ඔබේ මැදිහත්වීමකින් තොරව දුරකථන අංක ඇමතීමට යෙදුමට ඉඩ දෙයි. මෙය අනපේක්ෂිත ගාස්තු හෝ ඇමතුම්වලට හේතු විය හැක. මෙය යෙදුමට හදිසි ඇමතුම් අංක ඇමතීමට ඉඩ නොදෙන බව සලකන්න. ඔබේ තහවුරු කිරීමකින් තොරව ඇමතුම් ලබා දීමෙන්, හෝ ලැබෙන ඇමතුම් ස්වයංක්‍රීයව වෙනත් අංකයකට යොමු කිරීමට හේතු වන වාහක කේත ඇමතීමෙන් අනිෂ්ට යෙදුම් ඔබේ මුදල් වැය කළ හැක."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS ඇමතුම් සේවාවට පිවිසෙන්න"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"ඔබේ මැදිහත්වීමකින් තොරව ඇමතුම් සිදු කිරීමට  IMS සේවාව භාවිතයට යෙදුමට ඉඩ දෙන්න."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"දුරකථනයේ තත්වය සහ අනන්‍යතාවය කියවීම"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"ලියාපදිංචි කළ ආධාර සහ ගමන් මාර්ග ගමනාන්ත වැනි කැමති nfc ගෙවීම් සේවා තොරතුරු ලබා ගැනීමට යෙදුමට ඉඩ දෙයි."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"ආසන්න ක්ෂේත්‍ර සන්නිවේදනය පාලනය කරන්න"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"ආසන්න ක්ෂේත්‍ර සන්නිවේදන (NFC) ටැග්, පත්, සහ කියවන්නන් සමඟ සන්නිවේදනය කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"සුරක්ෂිත මූලද්‍රව්‍ය ගනුදෙනු සිදුවීම"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"සුරක්ෂිත මූලද්‍රව්‍යයක සිදු වන ගනුදෙනු පිළිබඳ තොරතුරු ලබා ගැනීමට යෙදුමට ඉඩ දෙයි."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"ඔබගේ තිරයේ අගුල අබල කරන්න"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"යතුරු අගුල සහ ඕනෑම සම්බන්ධිත මුරපද ආරක්ෂාවක් අබල කිරීමට යෙදුමට අවසර දෙන්න. මෙහි උදාහරණයක් වන්නේ පැමිණෙන ඇමතුමක් ලැබෙද්දී, දුරකථනය අක්‍රිය වන අතර ඇමතුම අවසාන වන විට යතුරු අගුල නැවත සක්‍රිය වෙයි."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"තිර අඟුලු සංකීර්ණතාව ඉල්ලන්න"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ජෛවමිතික හෝ තිර අගුල භාවිත කරන්න"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"එය ඔබ බව තහවුරු කරන්න"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"ඉදිරියට යාමට ඔබගේ ජෛවමිතික භාවිත කරන්න"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"ඉදිරියට යාමට ඔබේ ඇඟිලි සලකුණ භාවිත කරන්න"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"ඉදිරියට යාමට ඔබේ මුහුණ භාවිත කරන්න"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"ඉදිරියට යාමට ඔබගේ ජෛවමිතික හෝ තිර අගුල භාවිත කරන්න"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"ජීවමිතික දෘඪාංග ලබා ගත නොහැකිය"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"සත්‍යාපනය අවලංගු කළා"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"හඳුනා නොගන්නා ලදී"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"මුහුණ හඳුනා නොගන්නා ලදි"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"සත්‍යාපනය අවලංගු කළා"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"රහස් අංක, රටා, හෝ මුරපද කිසිවක් සකසා නැත"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"සත්‍යාපනය කිරීමේ දෝෂයකි"</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"මුහුණු වැසීමක් හමු විය. මුහුණ සම්පූර්ණයෙන්ම පෙනිය යුතුය."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"මුහුණ සත්‍යාපනය කළ නොහැක. දෘඩාංගය නොමැත."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"මුහුණු මෙහෙයුම අවලංගු කරන ලදී."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"පරිශීලකයා විසින් මුහුණෙන් අගුළු හැරීම අවලංගු කරන ලදි"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"උත්සාහයන් ඉතා වැඩි ගණනකි. පසුව නැවත උත්සාහ කරන්න."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"උත්සාහ ගණන ඉතා වැඩියි. මුහුණෙන් අගුළු ඇරීම නැත."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"උත්සාහයන් ඉතා වැඩි ගණනකි. ඒ වෙනුවට තිර අගුල ඇතුළු කරන්න."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"මුහුණ සත්‍යාපන කළ නොහැක. නැවත උත්සාහ කරන්න."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"ඔබ මුහුණෙන් අගුළු හැරීම පිහිටුවා නැත"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ප්‍රතික්ෂේප කරන්න"</string>
     <string name="select_input_method" msgid="3971267998568587025">"ආදාන ක්‍රමයක් තෝරන්න"</string>
     <string name="show_ime" msgid="6406112007347443383">"භෞතික යතුරු පුවරුව සක්‍රිය අතරතුර එය තිරය මත තබා ගන්න"</string>
-    <string name="hardware" msgid="1800597768237606953">"අතථ්‍ය යතුරු පුවරුව පෙන්වන්න"</string>
+    <string name="hardware" msgid="3611039921284836033">"තිරය මත යතුරු පුවරුව භාවිතය"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> වින්‍යාස කරන්න"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"භෞතික යතුරුපුවරුව වින්‍යාස කරන්න"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"භාෂාව හා පිරිසැලසුම තේරීමට තට්ටු කරන්න"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"ඉවත් කරන්න"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"නිර්දේශිතයි මට්ටමට වඩා ශබ්දය වැඩිද?\n\nදිගු කාලයක් සඳහා ඉහළ ශබ්දයක් ඇසීමෙන් ඇතැම් විට ඔබගේ ඇසීමට හානි විය හැක."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"අවවාදයයි,\nඔබ හෙඩ්ෆෝන් හරහා සතියක් තුළ සුරක්ෂිතව සවන් දිය හැකි ශබ්ද සංඥා ප්‍රමාණය ඉක්මවා ඇත.\n\nමෙම සීමාව ඉක්මවා යාම ඔබේ ශ්‍රවණයට ස්ථිරවම හානි කරනු ඇත."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"අවවාදයයි,\nඔබ හෙඩ්ෆෝන් හරහා සතියක් තුළ සුරක්ෂිතව සවන් දිය හැකි ශබ්ද සංඥා ප්‍රමාණය මෙන් 5 ගුණයක් ඉක්මවා ඇත.\n\nඔබේ ශ්‍රවණය ආරක්ෂා කිරීමට ශබ්දය අඩු කර ඇත."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"ඔබ මාධ්‍යයට සවන් දෙන මට්ටම දීර්ඝ කාලයක් තිස්සේ පවතින විට ශ්‍රවණාබාධ ඇති විය හැක.\n\nදිගු කාලයක් මෙම මට්ටමේ දී වාදනය කිරීම ඔබේ ශ්‍රවණයට හානි කළ හැක."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"අවවාදයයි,\nඔබ දැනට අනාරක්ෂිත මට්ටමින් වාදනය වන ඝෝෂාකාරී අන්තර්ගතයට සවන් දෙයි.\n\nමෙම මහා හඬින් සවන් දීම ඔබේ ශ්‍රවණයට ස්ථිරවම හානි කරනු ඇත."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"ඉහළ හඬකින් දිගටම සවන් දෙනවා ද?\n\nනිර්දේශිත කාලයට වඩා දිගු කාලයක් හෙඩ්ෆෝන් හඬ පරිමාව ඉහළ මට්ටමක පවතින අතර, එය ඔබේ ශ්‍රවණයට හානි කළ හැක"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"ඝෝෂාකාරී හඬ අනාවරණය විය\n\nනිර්දේශිත ප්‍රමාණයට වඩා හෙඩ්ෆෝන් හඬ පරිමාව වැඩි වී ඇති අතර, එය ඔබේ ශ්‍රවණයට හානි කළ හැක"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ප්‍රවේශ්‍යතා කෙටිමඟ භාවිතා කරන්නද?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"කෙටිමග ක්‍රියාත්මක විට, හඬ පරිමා බොත්තම් දෙකම තත්පර 3ක් තිස්සේ එබීමෙන් ප්‍රවේශ්‍යතා විශේෂාංගය ආරම්භ වනු ඇත."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"ප්‍රවේශ්‍යතා විශේෂාංග සඳහා කෙටි මග ක්‍රියාත්මක කරන්නද?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"ඉවත් වීමට, ඉහළ සිට පහළට ස්වයිප් කරන්න"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"වැටහුණි"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"වඩා හොඳ දසුනක් සඳහා කරකවන්න"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"වඩා හොඳ දර්ශනයක් සඳහා බෙදුම් තිරයෙන් පිටවන්න"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"වඩා හොඳ දසුනක් සඳහා <xliff:g id="NAME">%s</xliff:g> පූර්ණ තිරයේ විවෘත කරන්න"</string>
     <string name="done_label" msgid="7283767013231718521">"අවසන්"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"පැය කවාකාර සර්පනය"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"මිනිත්තු කවාකාර සර්පනය"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"යෙදුම ලබා ගත නොහැකිය"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> මේ දැන් ලබා ගත නොහැකිය."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> නොතිබේ"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"අවසරය අවශ්‍යයි"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"අවසර ඉල්ලීම වළක්වා ඇත"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"මෙම යෙදුම අතිරේක අවසර ඉල්ලා සිටින නමුත්, ප්‍රවාහ සැසියක අවසර ලබා දිය නොහැක. පළමුව ඔබේ Android TV උපාංගයෙන් අවසරය ලබා දෙන්න."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"මෙම යෙදුම අතිරේක අවසර ඉල්ලා සිටින නමුත්, ප්‍රවාහ සැසියක අවසර ලබා දිය නොහැක. පළමුව ඔබේ ටැබ්ලටයෙන් අවසරය ලබා දෙන්න."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"මෙම යෙදුම අතිරේක අවසර ඉල්ලා සිටින නමුත්, ප්‍රවාහ සැසියක අවසර ලබා දිය නොහැක. පළමුව ඔබේ දුරකථනයෙන් අවසරය ලබා දෙන්න."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"මෙම යෙදුම Android හි පැරණි අනුවාදයක් සඳහා තනා ඇත. එය නිසි ලෙස ක්‍රියා නොකරන අතර නවතම ආරක්ෂාව සහ රහස්‍යතා ආරක්‍ෂාව ඇතුළත් නොවේ. යාවත්කාලීනයක් සඳහා පරීක්ෂා කරන්න, නැතහොත් යෙදුමේ සංවර්ධකයා සම්බන්ධ කර ගන්න."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"යාවත්කාලීන සඳහා පරික්ෂා කරන්න"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"මෙම යෙදුම Android හි නවතම අනුවාදය සමග නොගැළපෙයි. යාවත්කාලීනයක් සඳහා පරීක්ෂා කරන්න නැතහොත් යෙදුමේ සංවර්ධකයා සම්බන්ධ කර ගන්න."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ඔබට නව පණිවිඩ තිබේ"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"බැලීමට විවෘත SMS යෙදුම විවෘත කරන්න"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"ඇතැම් ක්‍රියාකාරිත්ව සීමිත විය හැක"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"මෙම අන්තර්ගතය කාර්යාල යෙදුම් සමඟ විවෘත කළ නොහැකිය"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"මෙම අන්තර්ගතය පුද්ගලික යෙදුම් සමඟ බෙදා ගත නොහැකිය"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"මෙම අන්තර්ගතය පුද්ගලික යෙදුම් සමඟ විවෘත කළ නොහැකිය"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"කාර්යාල පැතිකඩ විරාම කර ඇත"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"ක්‍රියාත්මක කිරීමට තට්ටු කරන්න"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"කාර්යාල යෙදුම් විරාම කර ඇත"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"විරාම නොකරන්න"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"කාර්යාල යෙදුම් නැත"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"පුද්ගලික යෙදුම් නැත"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"කාර්යාල <xliff:g id="APP">%s</xliff:g> විවෘත කරන්න ද?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"පුද්ගලික <xliff:g id="APP">%s</xliff:g> තුළ විවෘත කරන්න ද?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"කාර්යාල <xliff:g id="APP">%s</xliff:g> තුළ විවෘත කරන්න ද?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"කාර්යාල යෙදුමෙන් අමතන්න ද?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"කාර්යාල යෙදුම වෙත මාරු වන්නද?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"ඔබේ සංවිධානය ඔබට කාර්යාල යෙදුම්වලින් ඇමතුම් කිරීමට පමණක් ඉඩ දෙයි"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"ඔබේ සංවිධානය ඔබට කාර්යාල යෙදුම්වලින් පණිවුඩ යැවීමට පමණක් ඉඩ දෙයි"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"පුද්ගලික බ්‍රව්සරය භාවිත කරන්න"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"කාර්යාල බ්‍රව්සරය භාවිත කරන්න"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"අමතන්න"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"මාරු කරන්න"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ජාල අගුලු හැරීමේ PIN"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM ජාල උප කට්ටල අගුලු හැරීමේ PIN"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM සමාගම් අගුලු හැරීමේ PIN"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"ඔබගේ <xliff:g id="DEVICE">%1$s</xliff:g> වෙතින් දුරකථනයේ කැමරාවට ප්‍රවේශ විය නොහැකිය"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"ඔබගේ <xliff:g id="DEVICE">%1$s</xliff:g> වෙතින් ටැබ්ලටයේ කැමරාවට ප්‍රවේශ විය නොහැකිය"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"ප්‍රවාහය කරන අතරේ මෙයට ප්‍රවේශ විය නොහැක. ඒ වෙනුවට ඔබේ දුරකථනයෙහි උත්සාහ කරන්න."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"ප්‍රවාහය අතරේ පින්තූරයේ-පින්තූරය බැලිය නොහැක"</string>
     <string name="system_locale_title" msgid="711882686834677268">"පද්ධති පෙරනිමිය"</string>
     <string name="default_card_name" msgid="9198284935962911468">"කාඩ්පත <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"ඔරලෝසු කළමනාකරණය කිරීමට සහායක ඔරලෝසු පැතිකඩ අවසරය"</string>
@@ -2317,11 +2331,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"පසුබිමේ සිට පෙරබිම් සේවා ආරම්භ කිරීමට සහායක යෙදුමකට ඉඩ දෙයි."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"මයික්‍රෆෝනය තිබේ"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"මයික්‍රෆෝනය අවහිර කර ඇත"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"ද්විත්ව තිරය"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"ද්විත්ව තිරය සක්‍රීයයි"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen සක්‍රීයයි"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"අන්තර්ගතය පෙන්වීමට <xliff:g id="APP_NAME">%1$s</xliff:g> සංදර්ශන දෙකම භාවිත කරයි"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"උපාංගය ඉතා උණුසුම් වේ"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"ඔබේ දුරකථනය ඉතා උණුසුම් නිසා ද්විත්ව තිරය ලබා ගත නොහැක"</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"ඔබේ දුරකථනය ඉතා උණුසුම් නිසා Dual Screen ලබා ගත නොහැක"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen නොමැත"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"බැටරි සුරැකුම ක්‍රියාත්මක නිසා Dual Screen නොමැත. ඔබට මෙය සැකසීම් තුළ ක්‍රියාවිරහිත කළ හැක."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"සැකසීම් වෙත යන්න"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 886417b..0a1b1593 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -231,7 +231,7 @@
     <string name="reboot_to_update_reboot" msgid="4474726009984452312">"Reštartuje sa…"</string>
     <string name="reboot_to_reset_title" msgid="2226229680017882787">"Obnovenie výrobných nastavení"</string>
     <string name="reboot_to_reset_message" msgid="3347690497972074356">"Reštartuje sa…"</string>
-    <string name="shutdown_progress" msgid="5017145516412657345">"Prebieha vypínanie..."</string>
+    <string name="shutdown_progress" msgid="5017145516412657345">"Vypína sa..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="2872769463279602432">"Váš tablet bude vypnutý."</string>
     <string name="shutdown_confirm" product="tv" msgid="7975942887313518330">"Zariadenie Android TV sa vypne."</string>
     <string name="shutdown_confirm" product="watch" msgid="2977299851200240146">"Hodinky sa vypnú."</string>
@@ -300,6 +300,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Systém Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Prepnúť na osobný profil"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Prepnúť na pracovný profil"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Prepnúť na osobnú verziu aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Prepnúť na pracovnú verziu aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakty"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"prístup ku kontaktom"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Poloha"</string>
@@ -318,7 +320,7 @@
     <string name="permgroupdesc_microphone" msgid="1047786732792487722">"nahrávanie zvuku"</string>
     <string name="permgrouplab_activityRecognition" msgid="3324466667921775766">"Fyzická aktivita"</string>
     <string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"prístup k vašej fyzickej aktivite"</string>
-    <string name="permgrouplab_camera" msgid="9090413408963547706">"Kamera"</string>
+    <string name="permgrouplab_camera" msgid="9090413408963547706">"Fotoaparát"</string>
     <string name="permgroupdesc_camera" msgid="7585150538459320326">"fotenie a natáčanie videí"</string>
     <string name="permgrouplab_nearby_devices" msgid="5529147543651181991">"Zariadenia v okolí"</string>
     <string name="permgroupdesc_nearby_devices" msgid="3213561597116913508">"objavovať a pripájať zariadenia v okolí"</string>
@@ -505,7 +507,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Umožňuje aplikácii ovládať vibrácie."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Povoľuje aplikácii prístup k stavu vibrátora."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"priamo volať na telefónne čísla"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Umožňuje aplikácii volať telefónne čísla bez vášho zásahu. V dôsledku toho sa môžu účtovať neočakávané poplatky alebo sa môžu uskutočniť neočakávané hovory. Toto povolenie neumožňuje aplikácii volať na tiesňovú linku."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Umožňuje aplikácii volať na telefónne čísla bez vášho zásahu. Môže to viesť k neočakávaným poplatkom alebo hovorov. Upozorňujeme, že aplikácia nemôže volať na tiesňové linky. Škodlivé aplikácie vám môžu spôsobiť poplatky, pretože volajú bez vášho vedomia alebo vytáčajú kódy operátorov, ktoré automaticky presmerovávajú prichádzajúce hovory na iné číslo."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"prístup k službe volania IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Umožňuje aplikácii používať službu okamžitých správ (IMS) na volanie bez intervencie používateľa."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"čítať stav a identitu telefónu"</string>
@@ -590,6 +592,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Umožňuje aplikácii získavať preferované informácie platenej služby NFC, napríklad o registrovanej pomoci a trasách k cieľu."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"ovládať technológiu NFC"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Umožňuje aplikácii komunikovať so značkami, kartami a čítačkami s podporou technológie NFC."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Udalosť transakcie bezpečnostného prvku"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Umožňuje aplikácii dostávať informácie o transakciách prebiehajúcich v bezpečnostnom prvku."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"deaktivácia zámky obrazovky"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Umožňuje aplikácii zakázať uzamknutie klávesnice a akékoľvek súvisiace zabezpečenie heslom. Príkladom je zakázanie uzamknutia klávesnice pri prichádzajúcom telefonickom hovore a jeho opätovné povolenie po skončení hovoru."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"požadovať zložitosť zámky obrazovky"</string>
@@ -616,10 +620,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Použiť biometrické údaje alebo zámku obrazovky"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Overenie, že ste to vy"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Ak chcete pokračovať, použite biometrický údaj"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Pokračujte nasnímaním odtlačku prsta"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Pokračujte nasnímaním tváre"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Pokračujte použitím biometrických údajov alebo zámky obrazovky"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrický hardvér nie je k dispozícii"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Overenie bolo zrušené"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Nerozpoznané"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Tvár nebola rozpoznaná"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Overenie bolo zrušené"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nie je nastavený PIN, vzor ani heslo"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Chyba overenia"</string>
@@ -694,7 +701,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Pozrite sa na telefón priamejšie"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Pozrite sa na telefón priamejšie"</string>
     <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_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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -711,8 +718,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Operácia týkajúca sa tváre bola zrušená"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Odomknutie tvárou zrušil používateľ"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Príliš veľa pokusov. Skúste to neskôr."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Priveľa pokusov. Odomknutie tvárou nie je k dispozícii."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Príliš veľa pokusov. Zadajte namiesto toho zámku obrazovky."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Nedá sa overiť tvár. Skúste to znova."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Nenastavili ste odomknutie tvárou"</string>
@@ -966,7 +972,7 @@
     <string name="lockscreen_instructions_when_pattern_enabled" msgid="7982445492532123308">"Ak chcete odomknúť telefón alebo uskutočniť tiesňové volanie, stlačte Menu."</string>
     <string name="lockscreen_instructions_when_pattern_disabled" msgid="7434061749374801753">"Telefón odomknete stlačením tlačidla Menu."</string>
     <string name="lockscreen_pattern_instructions" msgid="3169991838169244941">"Odomknite nakreslením vzoru"</string>
-    <string name="lockscreen_emergency_call" msgid="7500692654885445299">"Stav tiesne"</string>
+    <string name="lockscreen_emergency_call" msgid="7500692654885445299">"Tiesňová linka"</string>
     <string name="lockscreen_return_to_call" msgid="3156883574692006382">"Zavolať späť"</string>
     <string name="lockscreen_pattern_correct" msgid="8050630103651508582">"Správne!"</string>
     <string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"Skúsiť znova"</string>
@@ -1366,7 +1372,7 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"Bol zapnutý režim MIDI cez USB"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Zariadenie pripojené ako webkamera"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"Bolo pripojené príslušenstvo USB"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"Klepnutím zobrazíte ďalšie možnosti."</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"Klepnutím zobrazíte ďalšie možnosti"</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Pripojené zariadenie sa nabíja. Ďalšie možností získate klepnutím."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Bolo zistené analógové zvukové príslušenstvo"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Pripojené zariadenie nie je kompatibilné s týmto telefónom. Ďalšie informácie zobrazíte klepnutím."</string>
@@ -1394,7 +1400,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ODMIETNUŤ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Zvoliť metódu vstupu"</string>
     <string name="show_ime" msgid="6406112007347443383">"Ponechať na obrazovke, keď je aktívna fyzická klávesnica"</string>
-    <string name="hardware" msgid="1800597768237606953">"Zobraziť virtuálnu klávesnicu"</string>
+    <string name="hardware" msgid="3611039921284836033">"Použiť klávesnicu na obrazovke"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Nakonfigurujte <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Nakonfigurujte fyzické klávesnice"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Klepnutím vyberte jazyk a rozloženie"</string>
@@ -1577,7 +1583,7 @@
     <string name="storage_internal" msgid="8490227947584914460">"Interné zdieľané úložisko"</string>
     <string name="storage_sd_card" msgid="3404740277075331881">"SD karta"</string>
     <string name="storage_sd_card_label" msgid="7526153141147470509">"SD karta <xliff:g id="MANUFACTURER">%s</xliff:g>"</string>
-    <string name="storage_usb_drive" msgid="448030813201444573">"Disk USB"</string>
+    <string name="storage_usb_drive" msgid="448030813201444573">"Kľúč USB"</string>
     <string name="storage_usb_drive_label" msgid="6631740655876540521">"Disk USB <xliff:g id="MANUFACTURER">%s</xliff:g>"</string>
     <string name="storage_usb" msgid="2391213347883616886">"Ukladací priestor USB"</string>
     <string name="extract_edit_menu_button" msgid="63954536535863040">"Upraviť"</string>
@@ -1683,10 +1689,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Odstrániť"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Zvýšiť hlasitosť nad odporúčanú úroveň?\n\nDlhodobé počúvanie pri vysokej hlasitosti môže poškodiť váš sluch."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Upozornenie:\nPrekročili ste počet hlasných zvukových signálov, ktoré je možné počas týždňa bezpečne počúvať v slúchadlách.\n\nPrekročením tohto limitu si natrvalo poškodíte sluch."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Upozornenie:\nPäťnásobne ste prekročili počet hlasných zvukových signálov, ktoré je možné počas týždňa bezpečne počúvať v slúchadlách.\n\nHlasitosť bola znížená, aby sa chránil váš sluch."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Dlhodobé vystavenie hluku na úrovni, na ktorej počúvate médiá, môže viesť k poškodeniu sluchu.\n\nAk ich budete naďalej dlhodobo prehrávať na tejto úrovni, môžete si poškodiť sluch."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Upozornenie:\nMomentálne počúvate hlasný obsah prehrávaný na nebezpečnej úrovni.\n\nAk budete naďalej počúvať pri tejto hlasitosti, natrvalo si poškodíte sluch."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Počúvate pri vysokej hlasitosti?\n\nHlasitosť slúchadiel bola vyššia dlhšie ako sa odporúča, čo môže poškodiť váš sluch"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Bol rozpoznaný hlasný zvuk\n\nHlasitosť slúchadiel bola vyššia, ako sa odporúča, čo môže poškodiť váš sluch"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Použiť skratku dostupnosti?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Keď je skratka zapnutá, stlačením obidvoch tlačidiel hlasitosti na tri sekundy spustíte funkciu dostupnosti."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Chcete zapnúť skratku pre funkcie dostupnosti?"</string>
@@ -1853,7 +1857,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Ukončíte potiahnutím zhora nadol."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Dobre"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Otočte zariadenie pre lepšie zobrazenie"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Ukončite rozdelenú obrazovku pre lepšie zobrazenie"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Otvorte <xliff:g id="NAME">%s</xliff:g> na celej obrazovke pre lepšie zobrazenie"</string>
     <string name="done_label" msgid="7283767013231718521">"Hotovo"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Kruhový posúvač hodín"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Kruhový posúvač minút"</string>
@@ -1953,13 +1957,13 @@
     <string name="app_suspended_default_message" msgid="6451215678552004172">"Aplikácia <xliff:g id="APP_NAME_0">%1$s</xliff:g> nie je momentálne k dispozícii. Spravuje to aplikácia <xliff:g id="APP_NAME_1">%2$s</xliff:g>."</string>
     <string name="app_suspended_more_details" msgid="211260942831587014">"Ďalšie informácie"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Znova spustiť aplikáciu"</string>
-    <string name="work_mode_off_title" msgid="6367463960165135829">"Zrušiť pozastavenie aplikácií?"</string>
+    <string name="work_mode_off_title" msgid="6367463960165135829">"Zrušiť pozast. prac. aplikácií?"</string>
     <string name="work_mode_turn_on" msgid="5316648862401307800">"Zrušiť pozastavenie"</string>
-    <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Zavolať na tiesňovú linku"</string>
+    <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Tiesňová linka"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"Aplikácia nie je dostupná"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> nie je teraz dostupná."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> nie je k dispozícii"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Vyžaduje sa povolenie"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Žiadosť o povolenie bola zablokovaná"</string>
     <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>
@@ -1970,6 +1974,9 @@
     <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 použiť telefón."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tv" msgid="4706276040125072077">"Táto aplikácia požaduje ďalšie povolenia, ale povolenia nie je možné udeliť v relácii streamovania. Najprv udeľte povolenie v zariadení Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Táto aplikácia požaduje ďalšie povolenia, ale povolenia nie je možné udeliť v relácii streamovania. Najprv udeľte povolenie v tablete."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Táto aplikácia požaduje ďalšie povolenia, ale povolenia nie je možné udeliť v relácii streamovania. Najprv udeľte povolenie v telefóne."</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 použiť telefón."</string>
@@ -1978,6 +1985,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"V zariadení <xliff:g id="DEVICE">%1$s</xliff:g> momentálne nemáte prístup k tomuto obsahu. Skúste použiť telefón."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Táto aplikácia bola vytvorená pre staršiu verziu Androidu. Nemusí správne fungovať a obsahovať najnovšie prvky zabezpečenia a ochrany súkromia. Skontrolujte dostupnosť aktualizácie alebo kontaktujte jej vývojára."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Skontrolovať dostupnosť aktualizácie"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Táto aplikácia nie je kompatibilná s najnovšou verziou Androidu. Skontrolujte dostupnosť aktualizácie alebo kontaktujte jej vývojára."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Máte nové správy."</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Otvorte aplikáciu pre SMS a zobrazte správu"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Niektoré funkcie môžu byť obmedzené"</string>
@@ -2161,16 +2169,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Tento obsah sa nedá otvoriť pomocou pracovných aplikácií"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Tento obsah sa nedá zdieľať pomocou osobných aplikácií"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Tento obsah sa nedá otvoriť pomocou osobných aplikácií"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Pracovný profil je pozastavený"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Zapnúť klepnutím"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Pracovné aplikácie sú pozastavené"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Zrušiť pozastavenie"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Žiadne pracovné aplikácie"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Žiadne osobné aplikácie"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Chcete otvoriť pracovnú aplikáciu <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Chcete obsah otvoriť v osobnej aplikácii <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Chcete obsah otvoriť v pracovnej aplikácii <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Chcete volať z pracovnej aplikácie?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Chcete prepnúť na pracovnú aplikáciu?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Vaša organizácia vám povoľuje volať iba z pracovných aplikácií"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Vaša organizácia vám povoľuje posielať správy iba z pracovných aplikácií"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Použiť osobný prehliadač"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Použiť pracovný prehliadač"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Volať"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Prepnúť"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN na odomknutie siete pre SIM kartu"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN na odomknutie podmnožiny siete pre SIM kartu"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN na odomknutie podnikovej SIM karty"</string>
@@ -2307,6 +2320,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"V zariadení <xliff:g id="DEVICE">%1$s</xliff:g> nemáte prístup ku kamere telefónu"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"V zariadení <xliff:g id="DEVICE">%1$s</xliff:g> nemáte prístup ku kamere tabletu"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"K tomuto obsahu nie je počas streamovania prístup. Skúste použiť telefón."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Počas streamingu sa obraz v obraze nedá zobraziť"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Predvolené systémom"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KARTA <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Povolenie profilu hodiniek pre sprievodnú aplikáciu umožňujúce spravovať hodinky"</string>
@@ -2319,8 +2333,8 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Umožňuje sprievodnej aplikácii spúšťať služby na popredí z pozadia."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofón je k dispozícii"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofón je blokovaný"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dvojitá obrazovka"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dvojitá obrazovka je zapnutá"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Je zapnutá funkcia Dual Screen"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> zobrazuje obsah na oboch obrazovkách"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Zariadenie je príliš horúce"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dvojitá obrazovka nie je k dispozícii, pretože telefón sa prehrieva"</string>
@@ -2331,7 +2345,7 @@
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"Klávesnica <xliff:g id="DEVICE_NAME">%s</xliff:g> je nakonfigurovaná"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Rozloženie klávesnice je nastavené na jazyk <xliff:g id="LAYOUT_1">%s</xliff:g>. Môžete to zmeniť klepnutím."</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Rozloženie klávesnice je nastavené na jazyky <xliff:g id="LAYOUT_1">%1$s</xliff:g> a <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Môžete to zmeniť klepnutím."</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Rozloženie klávesnice je nastavené na jazyky <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> a <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Môžete to zmeniť klepnutím."</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Rozloženie klávesnice je nastavené na <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> a <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Môžete to zmeniť klepnutím."</string>
     <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Rozloženie klávesnice je nastavené na jazyky <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g> a <xliff:g id="LAYOUT_3">%3$s</xliff:g>… Môžete to zmeniť klepnutím."</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"Fyzické klávesnice sú nakonfigurované"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"Klávesnice si zobrazíte klepnutím"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 779f659..00cf50b 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -231,7 +231,7 @@
     <string name="reboot_to_update_reboot" msgid="4474726009984452312">"Vnovičen zagon …"</string>
     <string name="reboot_to_reset_title" msgid="2226229680017882787">"Ponastavitev na tovarniške nastavitve"</string>
     <string name="reboot_to_reset_message" msgid="3347690497972074356">"Vnovičen zagon …"</string>
-    <string name="shutdown_progress" msgid="5017145516412657345">"Se zaustavlja ..."</string>
+    <string name="shutdown_progress" msgid="5017145516412657345">"Izklaplja se ..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="2872769463279602432">"Tablični računalnik se bo zaustavil."</string>
     <string name="shutdown_confirm" product="tv" msgid="7975942887313518330">"Naprava Android TV se bo zaustavila."</string>
     <string name="shutdown_confirm" product="watch" msgid="2977299851200240146">"Ura se bo izklopila."</string>
@@ -300,6 +300,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sistem Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Preklopi na osebni profil"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Preklopi na delovni profil"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Preklopi na osebno aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Preklopi na delovno aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Stiki"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"dostop do stikov"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Lokacija"</string>
@@ -505,7 +507,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Aplikaciji omogoča nadzor vibriranja."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Aplikaciji dovoljuje dostop do stanja vibriranja."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"neposredno klicanje telefonskih številk"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Aplikaciji omogoča klicanje telefonskih številk brez vašega posredovanja. Zaradi tega lahko pride do nepričakovanih stroškov ali klicev. Aplikaciji to ne dovoljuje opravljanja klicev v sili. Zlonamerne aplikacije lahko kličejo brez vaše potrditve, kar vas lahko drago stane."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Aplikaciji omogoča klicanje telefonskih številk brez vašega posredovanja. Zaradi tega lahko pride do nepričakovanih stroškov ali klicev. Upoštevajte, da to aplikaciji ne dovoljuje klicanja številk za klic v sili. Zlonamerne aplikacije lahko kličejo brez vaše potrditve ali pa kličejo kode operaterjev, ki povzročijo, da se dohodni klici samodejno posredujejo na drugo številko, kar vas lahko drago stane."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"dostop do storitve za klicanje IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Aplikaciji dovoljuje uporabo storitev IMS za opravljanje klicev brez vašega posredovanja."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"branje stanja in identitete telefona"</string>
@@ -590,6 +592,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Aplikaciji omogoča pridobivanje podatkov o prednostni storitvi za plačevanje prek povezave NFC, kot so registrirani pripomočki in cilj preusmeritve."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"nadzor nad komunikacijo s tehnologijo bližnjega polja"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Podpira komunikacijo med računalnikom in oznakami, karticami in bralniki komunikacije s tehnologijo bližnjega polja."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Dogodek transakcije prek varnostnega elementa"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Aplikaciji omogoča prejemanje podatkov o transakcijah, ki potekajo prek varnostnega elementa."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"onemogočanje zaklepanja zaslona"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Aplikaciji dovoljuje, da onemogoči zaklep tipkovnice in morebitno povezano varnostno geslo. Telefon na primer onemogoči zaklep tipkovnice pri dohodnem klicu ter vnovič omogoči zaklep, ko je klic končan."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"zahteva zapletenost zaklepanja zaslona"</string>
@@ -616,10 +620,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Uporaba biometrike ali odklepanja s poverilnico"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Preverite, da ste res vi"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Za nadaljevanje uporabite biometrični podatek."</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Za nadaljevanje uporabite prstni odtis"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Za nadaljevanje uporabite obraz"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Za nadaljevanje uporabite biometrični podatek ali odklepanje s poverilnico."</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Strojna oprema za biometrične podatke ni na voljo"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Preverjanje pristnosti je preklicano"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Ni prepoznano"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Obraz ni prepoznan"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Preverjanje pristnosti je preklicano"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nastavljena ni nobena koda PIN, vzorec ali geslo"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Napaka pri preverjanju pristnosti"</string>
@@ -635,7 +642,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Presvetlo je."</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Zaznan je bil pritisk gumba za vklop."</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Poskusite popraviti položaj prsta."</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Vsakič nekoliko spremenite položaj prsta."</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Vsakič nekoliko spremenite položaj prsta"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Prstni odtis ni prepoznan."</string>
@@ -681,20 +688,20 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"Premalo svetlobe"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Telefon nekoliko odmaknite."</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Bolj približajte telefon."</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"Telefon premaknite višje."</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"Telefon premaknite nižje."</string>
-    <string name="face_acquired_too_right" msgid="6245286514593540859">"Telefon premaknite v svojo levo."</string>
-    <string name="face_acquired_too_left" msgid="9201762240918405486">"Telefon premaknite v svojo desno."</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"Telefon premaknite višje"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"Telefon premaknite nižje"</string>
+    <string name="face_acquired_too_right" msgid="6245286514593540859">"Telefon premaknite v svojo levo"</string>
+    <string name="face_acquired_too_left" msgid="9201762240918405486">"Telefon premaknite v svojo desno"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Glejte bolj naravnost v napravo."</string>
     <string name="face_acquired_not_detected" msgid="1057966913397548150">"Obraz ni viden. Držite telefon v višini oči."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Preveč se premikate. Držite telefon pri miru."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Znova registrirajte svoj obraz."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Obraza ni mogoče prepoznati. Poskusite znova."</string>
     <string name="face_acquired_too_similar" msgid="8882920552674125694">"Nekoliko spremenite položaj glave."</string>
-    <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Glejte bolj naravnost v telefon."</string>
-    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Glejte bolj naravnost v telefon."</string>
-    <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_pan_too_extreme" msgid="5417928604710621088">"Glejte bolj naravnost v telefon"</string>
+    <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Glejte bolj naravnost v telefon"</string>
+    <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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -702,7 +709,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Zaznano je obrazno pokrivalo. Videti se mora ves obraz."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Obraza ni mogoče preveriti. Str. opr. ni na voljo."</string>
@@ -711,8 +718,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Dejanje z obrazom je bilo preklicano."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Odklepanje z obrazom je preklical uporabnik."</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Preveč poskusov. Poskusite znova pozneje."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Preveč poskusov. Odklepanje z obrazom ni na voljo."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Preveč poskusov. Uporabite odklepanje zaslona s poverilnico."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Obraza ni mogoče preveriti. Poskusite znova."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Odklepanja z obrazom niste nastavili."</string>
@@ -1394,7 +1400,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"NE SPREJMEM"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Izberite način vnosa"</string>
     <string name="show_ime" msgid="6406112007347443383">"Ohrani na zaslonu, dokler je aktivna fizična tipkovnica"</string>
-    <string name="hardware" msgid="1800597768237606953">"Pokaži navidezno tipkovnico"</string>
+    <string name="hardware" msgid="3611039921284836033">"Uporaba zaslonske tipkovnice"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Konfiguriranje naprave <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Konfiguriranje fizičnih tipkovnic"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Dotaknite se, če želite izbrati jezik in postavitev."</string>
@@ -1620,7 +1626,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"Tablični računalnik"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"Televizor"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Zvočniki stojala"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Zvočniki nosilca"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Zunanja naprava"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Slušalke"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1683,10 +1689,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Odstrani"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Ali želite povečati glasnost nad priporočeno raven?\n\nDolgotrajno poslušanje pri veliki glasnosti lahko poškoduje sluh."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Opozorilo!\nPrekoračili ste količino glasnih zvočnih signalov, ki je še varna pri poslušanju prek slušalk v enem tednu.\n\nPrekoračenje te omejitve vam bo povzročilo trajne poškodbe sluha."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Opozorilo!\nZa petkrat ste prekoračili količino glasnih zvočnih signalov, ki je še varna pri poslušanju prek slušalk v enem tednu.\n\nZaradi zaščite sluha je bila glasnost zmanjšana."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Raven glasnosti, pri kateri poslušate predstavnost, lahko ob dolgotrajnejši izpostavljenosti povzroči poškodbe sluha.\n\nNadaljnje dolgotrajno poslušanje pri takšni glasnosti vam lahko poškoduje sluh."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Opozorilo!\nTrenutno poslušate glasno vsebino pri ravni glasnosti, ki ni varna.\n\nNadaljnje poslušanje pri takšni glasnosti vam bo povzročilo trajne poškodbe sluha."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Želite še naprej poslušati pri visoki glasnosti?\n\nGlasnost v slušalkah je bila visoka dalj časa, kot je priporočeno, kar vam lahko poškoduje sluh."</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Zaznan je bil glasen zvok\n\nGlasnost v slušalkah je višja od priporočene, kar vam lahko poškoduje sluh."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Želite uporabljati bližnjico za dostopnost?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Ko je bližnjica vklopljena, pritisnite gumba za glasnost in ju pridržite tri sekunde, če želite zagnati funkcijo dostopnosti."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Želite vklopiti bližnjico za funkcije za dostopnost?"</string>
@@ -1703,7 +1707,7 @@
     <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Ogledovanje in upravljanje zaslona"</string>
     <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"Bere lahko vso vsebino na zaslonu ter prikaže vsebino prek drugih aplikacij."</string>
     <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"Ogledovanje in izvajanje dejanj"</string>
-    <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"Spremlja lahko vaše interakcije z aplikacijo ali senzorjem strojne opreme ter komunicira z aplikacijami v vašem imenu."</string>
+    <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"Spremlja lahko vaše interakcije z aplikacijo ali tipalom strojne opreme ter komunicira z aplikacijami v vašem imenu."</string>
     <string name="accessibility_dialog_button_allow" msgid="2092558122987144530">"Dovoli"</string>
     <string name="accessibility_dialog_button_deny" msgid="4129575637812472671">"Zavrni"</string>
     <string name="accessibility_select_shortcut_menu_title" msgid="6002726538854613272">"Če želite začeti uporabljati funkcijo, se je dotaknite:"</string>
@@ -1718,7 +1722,7 @@
     <string name="color_correction_feature_name" msgid="7975133554160979214">"Popravljanje barv"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Enoročni način"</string>
     <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Zelo zatemnjen zaslon"</string>
-    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Slušni aparati"</string>
+    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Slušni pripomočki"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"Tipki za glasnost sta pridržani. Storitev <xliff:g id="SERVICE_NAME">%1$s</xliff:g> je vklopljena."</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"Tipki za glasnost sta pridržani. Storitev <xliff:g id="SERVICE_NAME">%1$s</xliff:g> je izklopljena."</string>
     <string name="accessibility_shortcut_spoken_feedback" msgid="3760999147597564314">"Spustite gumba za glasnost. Če želite vklopiti storitev <xliff:g id="SERVICE_NAME">%1$s</xliff:g>, znova pritisnite in 3 sekunde pridržite oba gumba za glasnost."</string>
@@ -1730,7 +1734,7 @@
     <string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"Če želite preklopiti med funkcijami, s tremi prsti povlecite navzgor in pridržite."</string>
     <string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Povečava"</string>
     <string name="user_switched" msgid="7249833311585228097">"Trenutni uporabnik <xliff:g id="NAME">%1$s</xliff:g>."</string>
-    <string name="user_switching_message" msgid="1912993630661332336">"Preklop na uporabnika <xliff:g id="NAME">%1$s</xliff:g> …"</string>
+    <string name="user_switching_message" msgid="1912993630661332336">"Preklapljanje na uporabnika <xliff:g id="NAME">%1$s</xliff:g> …"</string>
     <string name="user_logging_out_message" msgid="7216437629179710359">"Odjavljanje uporabnika <xliff:g id="NAME">%1$s</xliff:g> …"</string>
     <string name="owner_name" msgid="8713560351570795743">"Lastnik"</string>
     <string name="guest_name" msgid="8502103277839834324">"Gost"</string>
@@ -1853,7 +1857,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Zaprete ga tako, da z vrha s prstom povlečete navzdol."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Razumem"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Zasukajte za boljši pregled."</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Zaprite razdeljeni zaslon za boljši pregled."</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Aplikacijo <xliff:g id="NAME">%s</xliff:g> odprite v celozaslonskem načinu za boljši pregled."</string>
     <string name="done_label" msgid="7283767013231718521">"Dokončano"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Okrogli drsnik za ure"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Okrogli drsnik za minute"</string>
@@ -1959,7 +1963,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Aplikacija ni na voljo"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> trenutno ni na voljo."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"»<xliff:g id="ACTIVITY">%1$s</xliff:g>« ni na voljo"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Potrebno je dovoljenje"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Zahteva za dovoljenje je bila prezrta"</string>
     <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>
@@ -1970,6 +1974,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Ta aplikacija zahteva dodatna dovoljenja, vendar teh ni mogoče odobriti med sejo pretočnega predvajanja. Dovoljenje najprej odobrite v napravi Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Ta aplikacija zahteva dodatna dovoljenja, vendar teh ni mogoče odobriti med sejo pretočnega predvajanja. Dovoljenje najprej odobrite v tabličnem računalniku."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Ta aplikacija zahteva dodatna dovoljenja, vendar teh ni mogoče odobriti med sejo pretočnega predvajanja. Dovoljenje najprej odobrite v telefonu."</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>
@@ -1978,6 +1985,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"V napravi <xliff:g id="DEVICE">%1$s</xliff:g> ni mogoče dostopati do te vsebine. Poskusite s telefonom."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Ta aplikacija je bila razvita za starejšo različico Androida. Morda ne bo delovala pravilno ter ne vključuje najnovejših varnostnih funkcij in funkcij za varovanje zasebnosti. Preverite, ali je na voljo posodobitev, ali pa se obrnite na razvijalca aplikacije."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Preveri, ali je na voljo posodobitev"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Ta aplikacija ni združljiva z najnovejšo različico Androida. Preverite, ali je na voljo posodobitev, ali pa se obrnite na razvijalca aplikacije."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Imate nova sporočila."</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Za ogled odprite aplikacijo za SMS-je"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Nekatere funkcije bodo morda omejene"</string>
@@ -2153,7 +2161,7 @@
     <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Skupinski pogovor"</string>
     <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"Osebno"</string>
-    <string name="resolver_work_tab" msgid="2690019516263167035">"Služba"</string>
+    <string name="resolver_work_tab" msgid="2690019516263167035">"Delo"</string>
     <string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Pogled osebnega profila"</string>
     <string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Pogled delovnega profila"</string>
     <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Blokiral skrbnik za IT"</string>
@@ -2161,16 +2169,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Te vsebine ni mogoče odpreti z delovnimi aplikacijami."</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Te vsebine ni mogoče deliti z osebnimi aplikacijami."</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Te vsebine ni mogoče odpreti z osebnimi aplikacijami."</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Delovni profil je začasno zaustavljen"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Dotaknite se za vklop"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Delovne aplikacije so začasno zaustavljene."</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Znova aktiviraj"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nobena delovna aplikacija ni na voljo"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nobena osebna aplikacija"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Želite odpreti delovno aplikacijo <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Želite odpreti v osebni aplikaciji <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Želite odpreti v delovni aplikaciji <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Želite poklicati iz delovne aplikacije?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Želite preklopiti na delovno aplikacijo?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Organizacija vam omogoča klicanje samo iz delovnih aplikacij."</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Organizacija vam omogoča pošiljanje sporočil samo iz delovnih aplikacij."</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Uporabi osebni brskalnik"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Uporabi delovni brskalnik"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Pokliči"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Preklopi"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Koda PIN za odklepanje omrežja kartice SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Koda PIN za odklepanje podnabora omrežja kartice SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Koda PIN za odklepanje kartice SIM za podjetje"</string>
@@ -2307,6 +2320,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Ni mogoče dostopati do fotoaparata telefona prek naprave <xliff:g id="DEVICE">%1$s</xliff:g>."</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Ni mogoče dostopati do fotoaparata tabličnega računalnika prek naprave <xliff:g id="DEVICE">%1$s</xliff:g>."</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Do te vsebine ni mogoče dostopati med pretočnim predvajanjem. Poskusite s telefonom."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Slike v sliki ni mogoče prikazati med pretočnim predvajanjem."</string>
     <string name="system_locale_title" msgid="711882686834677268">"Sistemsko privzeto"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KARTICA <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Dovoljenje za upravljanje ur v profilu ure v spremljevalni aplikaciji"</string>
@@ -2319,11 +2333,11 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Spremljevalni aplikaciji dovoljuje, da storitve v ospredju zažene iz ozadja."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofon je na voljo"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofon je blokiran"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dvojni zaslon"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dvojni zaslon je vklopljen"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen je vklopljen"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> uporablja oba zaslona za prikaz vsebine."</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Naprava se pregreva"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dvojni zaslon ni na voljo, ker se telefon pregreva."</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dual Screen ni na voljo, ker se telefon pregreva."</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen ni na voljo"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screen ni na voljo, ker je vklopljeno varčevanje z energijo baterije. To lahko izklopite v nastavitvah."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Odpri nastavitve"</string>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index 155f8cc..426b255 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -155,7 +155,7 @@
     <string name="cfTemplateRegisteredTime" msgid="5222794399642525045">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Nuk u transferua"</string>
     <string name="fcComplete" msgid="1080909484660507044">"Kodi i funksionit është i plotë."</string>
     <string name="fcError" msgid="5325116502080221346">"Problem me lidhjen ose kod është i pavlefshëm."</string>
-    <string name="httpErrorOk" msgid="6206751415788256357">"Në rregull!"</string>
+    <string name="httpErrorOk" msgid="6206751415788256357">"Në rregull"</string>
     <string name="httpError" msgid="3406003584150566720">"Pati një gabim në rrjet."</string>
     <string name="httpErrorLookup" msgid="3099834738227549349">"Nuk mundi ta gjente URL-në."</string>
     <string name="httpErrorUnsupportedAuthScheme" msgid="3976195595501606787">"Skema e vërtetimit nuk mbështetet."</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Sistemi Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Kalo te profili personal"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Kalo te profili i punës"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Kalo te <xliff:g id="APP_NAME">%1$s</xliff:g> personal"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Kalo te <xliff:g id="APP_NAME">%1$s</xliff:g> i punës"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontaktet"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"qasu te kontaktet e tua"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Vendndodhja"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Lejon aplikacionin të kontrollojë dridhësin."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Lejon që aplikacioni të ketë qasje te gjendja e dridhësit."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"telefono drejtpërdrejt numrat e telefonit"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Lejon aplikacionin të telefonojë numra pa ndërhyrjen tënde. Kjo mund të rezultojë në tarifa ose telefonata të papritura. Ki parasysh se kjo nuk e lejon aplikacionin të telefonojë numra urgjence. Aplikacione keqdashëse mund të të kushtojnë para duke kryer telefonata pa konfirmimin tënd."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Lejon që aplikacioni të telefonojë numrat e telefonit pa ndërhyrjen tënde. Kjo mund të sjellë telefonata ose tarifa të papritura. Ki parasysh se kjo nuk e lejon aplikacionin të telefonojë numrat e urgjencës. Aplikacionet keqdashëse mund të të shkaktojnë kosto duke kryer telefonata pa konfirmimin tënd ose të formojnë kode të operatorit celular që bëjnë që telefonatat hyrëse të transferohen automatikisht te një numër tjetër."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"qasje në shërbimin e telefonatave IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Lejon aplikacionin të përdorë shërbimin IMS për të kryer telefonata pa ndërhyrjen tënde."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"lexo statusin e telefonit dhe identitetin"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Lejon aplikacionin të marrë informacione për shërbimin e preferuar të pagesës me NFC si p.sh. ndihmat e regjistruara dhe destinacionin e itinerarit."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"kontrollo \"Komunikimin e fushës në afërsi\" NFC"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Lejon aplikacionin të komunikojë me etiketimet e \"Komunikimit të fushës së afërt (NFC)\", kartat dhe lexuesit."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Ngjarje transaksioni me elementin e sigurt"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Lejon që aplikacioni të marrë informacione për transaksionet që kryhen në një element të sigurt."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"çaktivizo kyçjen e ekranit"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Lejon aplikacionin të çaktivizojë kyçjen e tasteve dhe çdo mbrojtje të lidhur me fjalëkalimin. Për shembull, telefoni çaktivizon kyçjen e tasteve kur merr një telefonatë hyrëse, pastaj riaktivizon kyçjen e tasteve kur mbaron telefonata."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"kërko kompleksitetin e kyçjes së ekranit"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Përdor sistemet biometrike ose kyçjen e ekranit"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifiko që je ti"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Përdor sistemet e tua biometrike për të vazhduar"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Përdor gjurmën e gishtit për të vazhduar"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Përdor fytyrën tënde për të vazhduar"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Përdor sistemet e tua biometrike ose kyçjen e ekranit për të vazhduar"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Nuk ofrohet harduer biometrik"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Vërtetimi u anulua"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Nuk njihet"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Fytyra nuk njihet"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Vërtetimi u anulua"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nuk është vendosur kod PIN, motiv ose fjalëkalim"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Gabim gjatë vërtetimit"</string>
@@ -633,7 +640,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Me shumë ndriçim"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"U zbulua shtypja e \"Energjisë\""</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Provo ta rregullosh"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ndrysho pak pozicionin e gishtit çdo herë"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Ndrysho paksa pozicionin e gishtit çdo herë"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Gjurma e gishtit nuk u njoh"</string>
@@ -679,12 +686,12 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"Nuk ka dritë të mjaftueshme"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Lëvize telefonin më larg"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Lëvize telefonin më afër"</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"Lëvize telefonin më lart"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"Lëvize telefonin më poshtë"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"Ngrije telefonin më lart"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"Ule telefonin më poshtë"</string>
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Lëvize telefonin në të majtën tënde"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Lëvize telefonin në të djathtën tënde"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Shiko më drejt në pajisjen tënde."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Fytyra jote nuk mund të shihet. Mbaje telefonin në nivelin e syve."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Fytyra s\'mund të shihet. Mbaje telefonin në nivelin e syve."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Ka shumë lëvizje. Mbaje telefonin të palëvizur."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Regjistroje përsëri fytyrën tënde."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Fytyra nuk mund të njihet. Provo sërish."</string>
@@ -692,7 +699,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Shiko më drejtpërdrejt telefonin"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Shiko më drejtpërdrejt telefonin"</string>
     <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_obscured" msgid="4917643294953326639">"Hiq gjithçka që ta mbulon fytyrën."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Pastro kreun e ekranit, duke përfshirë shiritin e zi"</string>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Fytyra është e mbuluar. Duhet të jetë plotësisht e dukshme."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Fytyra s\'mund të verifikohet. Hardueri nuk ofrohet."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Veprimi me fytyrën u anulua."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"\"Shkyçja me fytyrë\" u anulua nga përdoruesi"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Shumë përpjekje. Provo sërish më vonë."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Shumë përpjekje. Shkyçja me fytyrë nuk ofrohet."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Shumë përpjekje. Fut më mirë kyçjen e ekranit."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Fytyra nuk mund të verifikohet. Provo përsëri."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Nuk e ke konfiguruar \"Shkyçjen me fytyrë\""</string>
@@ -1255,7 +1261,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Aplikacionet e fillimit."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Po përfundon nisjen."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Shtype butonin e energjisë — zakonisht, kjo e fik ekranin.\n\nProvo të trokasësh lehtë ndërkohë që konfiguron gjurmën e gishtit."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Përfundo konfigurimin; fik ekranin"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Përfundo konfigurimin duke fikur ekranin"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Çaktivizo"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Të vazhdohet verifikimi i gjurmës?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Shtype butonin e energjisë — zakonisht, kjo e fik ekranin.\n\nProvo të trokasësh lehtë për të verifikuar gjurmën e gishtit."</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"REFUZO"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Zgjidh metodën e hyrjes"</string>
     <string name="show_ime" msgid="6406112007347443383">"Mbaje në ekran ndërsa tastiera fizike është aktive"</string>
-    <string name="hardware" msgid="1800597768237606953">"Shfaq tastierën virtuale"</string>
+    <string name="hardware" msgid="3611039921284836033">"Përdor tastierën në ekran"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Konfiguro <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Konfiguro tastierat fizike"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Trokit për të zgjedhur gjuhën dhe strukturën"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" - "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Hiq"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Të ngrihet volumi mbi nivelin e rekomanduar?\n\nDëgjimi me volum të lartë për periudha të gjata mund të dëmtojë dëgjimin."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Paralajmërim:\nE ke kaluar sasinë e sinjaleve të larta zanore që mund të dëgjojë në mënyrë të sigurt një person gjatë një jave nëpërmjet kufjeve.\n\nNëse e kalon këtë kufi, kjo gjë do ta dëmtojë përgjithmonë dëgjimin tënd."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Paralajmërim:\nE ke kaluar 5 herë sasinë e sinjaleve të larta zanore që mund të dëgjojë në mënyrë të sigurt një person gjatë një jave nëpërmjet kufjeve.\n\nVolumi është ulur për të mbrojtur dëgjimin tënd."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Niveli me të cilin po dëgjon median mund të shkaktojë dëmtim të dëgjimit nëse vazhdon për periudha të gjata kohore.\n\nNëse vazhdon të luash me këtë nivel për periudha të gjata kohore, kjo gjë mund të dëmtojë dëgjimin tënd."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Paralajmërim:\nPo dëgjon aktualisht përmbajtje me zë të lartë që po luhet në një nivel jo të sigurt.\n\nNëse vazhdon të dëgjosh me një nivel kaq të lartë, kjo gjë do të dëmtojë përgjithmonë dëgjimin tënd."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"A do të vazhdosh të dëgjosh me një volum të lartë?\n\nVolumi i kufjeve ka qenë i lartë për një kohë më të gjatë nga sa rekomandohet, çka mund të të dëmtojë dëgjimin"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"U zbulua tingull i lartë\n\nVolumi i kufjeve ka qenë më i lartë nga sa rekomandohet, çka mund të të dëmtojë dëgjimin"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Të përdoret shkurtorja e qasshmërisë?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Kur shkurtorja është e aktivizuar, shtypja e të dy butonave për 3 sekonda do të nisë një funksion qasshmërie."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Të aktivizohet shkurtorja për veçoritë e qasshmërisë?"</string>
@@ -1699,9 +1703,9 @@
     <string name="accessibility_enable_service_title" msgid="3931558336268541484">"Do të lejosh që <xliff:g id="SERVICE">%1$s</xliff:g> të ketë kontroll të plotë të pajisjes sate?"</string>
     <string name="accessibility_service_warning_description" msgid="291674995220940133">"Kontrolli i plotë është i përshtatshëm për aplikacionet që të ndihmojnë me nevojat e qasshmërisë, por jo për shumicën e aplikacioneve."</string>
     <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Shiko dhe kontrollo ekranin"</string>
-    <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"Ai mund të lexojë të gjithë përmbajtjen në ekran dhe të shfaqë përmbajtjen mbi aplikacione të tjera."</string>
+    <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"Mund të lexojë të gjithë përmbajtjen në ekran dhe të shfaqë përmbajtjen mbi aplikacione të tjera."</string>
     <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"Shiko dhe kryej veprimet"</string>
-    <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"Ai mund të monitorojë ndërveprimet me një aplikacion ose një sensor hardueri dhe të ndërveprojë me aplikacionet në emrin tënd."</string>
+    <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"Mund të monitorojë ndërveprimet me një aplikacion ose një sensor hardueri dhe të ndërveprojë me aplikacionet në emrin tënd."</string>
     <string name="accessibility_dialog_button_allow" msgid="2092558122987144530">"Lejo"</string>
     <string name="accessibility_dialog_button_deny" msgid="4129575637812472671">"Refuzo"</string>
     <string name="accessibility_select_shortcut_menu_title" msgid="6002726538854613272">"Trokit te një veçori për të filluar ta përdorësh atë:"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Për të dalë, rrëshqit nga lart poshtë."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"E kuptova"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Rrotullo për një pamje më të mirë"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Dil nga ekrani i ndarë për një pamje më të mirë"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Hape <xliff:g id="NAME">%s</xliff:g> në ekran të plotë për pamje më të mirë"</string>
     <string name="done_label" msgid="7283767013231718521">"U krye"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Rrëshqitësi rrethor i orëve"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Rrëshqitësi rrethor i minutave"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Aplikacioni nuk ofrohet"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> nuk ofrohet për momentin."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> nuk ofrohet"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Kërkohet leje"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Kërkesa për leje është ndaluar"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Ky aplikacion po kërkon leje shtesë, por lejet nuk mund të jepen në një seancë transmetimi. Fillimisht jep lejen në pajisjen tënde Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Ky aplikacion po kërkon leje shtesë, por lejet nuk mund të jepen në një seancë transmetimi. Fillimisht jep lejen në tabletin tënd."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Ky aplikacion po kërkon leje shtesë, por lejet nuk mund të jepen në një seancë transmetimi. Fillimisht jep lejen në telefonin tënd."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Qasja është e pamundur në <xliff:g id="DEVICE">%1$s</xliff:g>. Provoje në telefon më mirë."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Ky aplikacion është krijuar për një version më të vjetër të Android. Mund të mos funksionojë siç duhet dhe nuk përfshin mbrojtjet më të fundit të sigurisë dhe privatësisë. Kontrollo për një përditësim ose kontakto zhvilluesin e aplikacionit."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Kontrollo për përditësim"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Ky aplikacion nuk është i përputhshëm me versionin më të fundit të Android. Kontrollo për një përditësim ose kontakto me zhvilluesin e aplikacionit."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Ke mesazhe të reja"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Hap aplikacionin SMS për ta parë"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Disa veçori mund të jenë të kufizuara"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Kjo përmbajtje nuk mund të hapet me aplikacione pune"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Kjo përmbajtje nuk mund të shpërndahet me aplikacione personale"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Kjo përmbajtje nuk mund të hapet me aplikacione personale"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Profili i punës është në pauzë"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Trokit për ta aktivizuar"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Aplikacionet e punës janë vendosur në pauzë"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Hiq nga pauza"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nuk ka aplikacione pune"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nuk ka aplikacione personale"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Të hapet <xliff:g id="APP">%s</xliff:g> i punës?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Të hapet te <xliff:g id="APP">%s</xliff:g> personal?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Të hapet te <xliff:g id="APP">%s</xliff:g> i punës?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Të telefonohet nga aplikacioni i punës?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Të kalohet tek aplikacioni i punës?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Organizata jote të lejon që të telefonosh vetëm nga aplikacionet e punës"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Organizata jote të lejon që të dërgosh mesazhe vetëm nga aplikacionet e punës"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Përdor shfletuesin personal"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Përdor shfletuesin e punës"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Telefono"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Ndërro"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Kodi PIN i shkyçjes së rrjetit të kartës SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Kodi PIN i shkyçjes së nënrenditjes së rrjetit të kartës SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Kodi PIN i shkyçjes së kartës SIM të korporatës"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Nuk mund të qasesh në kamerën e telefonit tënd nga <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Nuk mund të qasesh në kamerën e tabletit tënd nga <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Nuk mund të kesh qasje në të gjatë transmetimit. Provoje në telefon më mirë."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Figura brenda figurës nuk mund të shikohet gjatë transmetimit"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Parazgjedhja e sistemit"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KARTA <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Leje për profilin e \"Orës shoqëruese\" për të menaxhuar orët"</string>
@@ -2317,13 +2331,13 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Lejon një aplikacion shoqërues të fillojë shërbimet në plan të parë nga sfondi."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofoni ofrohet"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofoni është i bllokuar"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Ekran i dyfishtë"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Ekrani i dyfishtë është aktiv"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen është aktiv"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> po i përdor të dyja ekranet për të shfaqur përmbajtje"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Pajisja është shumë e nxehtë"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"\"Ekrani i dyfishtë\" nuk ofrohet sepse telefoni yt po nxehet shumë"</string>
-    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"\"Ekrani i dyfishtë\" nuk ofrohet"</string>
-    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"\"Ekrani i dyfishtë\" nuk ofrohet sepse \"Kursyesi i baterisë\" është aktiv. Mund ta çaktivizosh këtë te \"Cilësimet\"."</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Dual Screen nuk ofrohet sepse telefoni yt po nxehet shumë"</string>
+    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen nuk ofrohet"</string>
+    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Dual Screen nuk ofrohet sepse \"Kursyesi i baterisë\" është aktiv. Mund ta çaktivizosh këtë te \"Cilësimet\"."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Shko te \"Cilësimet\""</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Çaktivizoje"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> u konfigurua"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 7cd3ca1..a2aee9c 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -86,7 +86,7 @@
     <string name="NetworkPreferenceSwitchSummary" msgid="2086506181486324860">"Пробајте да промените жељену мрежу. Додирните да бисте променили."</string>
     <string name="EmergencyCallWarningTitle" msgid="1615688002899152860">"Хитни позиви нису доступни"</string>
     <string name="EmergencyCallWarningSummary" msgid="1194185880092805497">"Не можете да упућујете хитне позиве преко Wi‑Fi-ја"</string>
-    <string name="notification_channel_network_alert" msgid="4788053066033851841">"Обавештења"</string>
+    <string name="notification_channel_network_alert" msgid="4788053066033851841">"Упозорења"</string>
     <string name="notification_channel_call_forward" msgid="8230490317314272406">"Преусмеравање позива"</string>
     <string name="notification_channel_emergency_callback" msgid="54074839059123159">"Режим за хитан повратни позив"</string>
     <string name="notification_channel_mobile_data_status" msgid="1941911162076442474">"Статус мобилних података"</string>
@@ -248,10 +248,10 @@
     <string name="global_action_power_options" msgid="1185286119330160073">"Напајање"</string>
     <string name="global_action_restart" msgid="4678451019561687074">"Рестартуј"</string>
     <string name="global_action_emergency" msgid="1387617624177105088">"Хитан позив"</string>
-    <string name="global_action_bug_report" msgid="5127867163044170003">"Извештај о грешци"</string>
+    <string name="global_action_bug_report" msgid="5127867163044170003">"Јави грешку"</string>
     <string name="global_action_logout" msgid="6093581310002476511">"Заврши сесију"</string>
     <string name="global_action_screenshot" msgid="2610053466156478564">"Снимак екрана"</string>
-    <string name="bugreport_title" msgid="8549990811777373050">"Извештај о грешци"</string>
+    <string name="bugreport_title" msgid="8549990811777373050">"Јави грешку"</string>
     <string name="bugreport_message" msgid="5212529146119624326">"Овим ће се прикупити информације о тренутном стању уређаја како би биле послате у поруци е-поште. Од започињања извештаја о грешци до тренутка за његово слање проћи ће неко време; будите стрпљиви."</string>
     <string name="bugreport_option_interactive_title" msgid="7968287837902871289">"Интерактив. извештај"</string>
     <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"Користите ово у већини случајева. То вам омогућава да пратите напредак извештаја, да уносите додатне детаље о проблему и да снимате снимке екрана. Вероватно ће изоставити неке мање коришћене одељке за које прављење извештаја дуго траје."</string>
@@ -284,7 +284,7 @@
     <string name="notification_channel_network_available" msgid="6083697929214165169">"Мрежа је доступна"</string>
     <string name="notification_channel_vpn" msgid="1628529026203808999">"Статус VPN-а"</string>
     <string name="notification_channel_device_admin" msgid="6384932669406095506">"Обавештења од ИТ администратора"</string>
-    <string name="notification_channel_alerts" msgid="5070241039583668427">"Обавештења"</string>
+    <string name="notification_channel_alerts" msgid="5070241039583668427">"Упозорења"</string>
     <string name="notification_channel_retail_mode" msgid="3732239154256431213">"Режим демонстрације за малопродајне објекте"</string>
     <string name="notification_channel_usb" msgid="1528280969406244896">"USB веза"</string>
     <string name="notification_channel_heavy_weight_app" msgid="17455756500828043">"Активна апликација"</string>
@@ -299,6 +299,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android систем"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Пређи на лични профил"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Пређи на пословни профил"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Пређи на лични профил апликације <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Пређи на пословни профил апликације <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Контакти"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"приступи контактима"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Локација"</string>
@@ -504,7 +506,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Дозвољава апликацији да контролише вибрацију."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Дозвољава апликацији да приступа стању вибрирања."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"директно позивање бројева телефона"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Дозвољава апликацији да позива бројеве телефона без ваше дозволе. Ово може да доведе до неочекиваних трошкова или позива. Имајте на уму да ово не дозвољава апликацији да позива бројеве за хитне случајеве. Злонамерне апликације могу да позивају без ваше потврде, што може да доведе до трошкова."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Дозвољава апликацији да позива бројеве телефона без ваше интеракције. То може да доведе до неочекиваних наплата или позива. Имајте у виду да се тиме апликацији не дозвољава да позива бројеве за хитне случајеве. Злонамерне апликације могу да изазову трошкове упућивањем позива без ваше потврде или да бирају кодове оператера услед чега се долазни позиви аутоматски прослеђују на други број."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"приступ услузи позива помоћу размене тренутних порука"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Дозвољава апликацији да користи услугу размене тренутних порука да би упућивала позиве без ваше интервенције."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"читање статуса и идентитета телефона"</string>
@@ -589,6 +591,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Дозвољава апликацији да преузима информације о жељеној NFC услузи за плаћање, попут регистрованих идентификатора апликација и одредишта преусмеравања."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"контрола комуникације у ужем пољу (Near Field Communication)"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Дозвољава апликацији да комуницира са ознакама, картицама и читачима комуникације кратког домета (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Трансакција у оквиру безбедносног елемента"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Омогућава апликацији да добија информације о транскацијама које се извршавају у оквиру безбедносног елемента."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"онемогућавање закључавања екрана"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Дозвољава апликацији да онемогући закључавање тастатуре и све повезане безбедносне мере са лозинкама. На пример, телефон онемогућава закључавање тастатуре при пријему долазног телефонског позива, а затим га поново омогућава по завршетку позива."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"тражење сложености закључавања екрана"</string>
@@ -615,20 +619,23 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Користите биометрију или закључавање екрана"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Потврдите свој идентитет"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Користите биометријски податак да бисте наставили"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Наставите помоћу отиска прста"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Потврдите идентитет лицем да бисте наставили"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Користите биометријски податак или закључавање екрана да бисте наставили"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Биометријски хардвер није доступан"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Потврда идентитета је отказана"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Није препознато"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Лице није препознато"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Потврда идентитета је отказана"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Нисте подесили ни PIN, ни шаблон, ни лозинку"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Грешка при потврди идентитета"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Користите закључавање екрана"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Употребите закључавање екрана да бисте наставили"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Јако притисните сензор"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Чврсто притисните сензор"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Препознавање отиска прста није успело. Пробајте поново."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Обришите сензор за отисак прста и пробајте поново"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Обришите сензор и пробајте поново"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Јако притисните сензор"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Чврсто притисните сензор"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Превише споро сте померили прст. Пробајте поново."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Пробајте са другим отиском прста"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Превише је светло"</string>
@@ -701,7 +708,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Лице је прекривено. Мора да буде сасвим видљиво."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Провера лица није успела. Хардвер није доступан."</string>
@@ -710,8 +717,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Обрада лица је отказана."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Корисник је отказао откључавање лицем"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Превише покушаја. Пробајте поново касније."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Превише покушаја. Откључавање лицем није доступно."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Превише покушаја. Користите закључавање екрана за то."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Провера лица није успела. Пробајте поново."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Нисте подесили откључавање лицем"</string>
@@ -1256,7 +1262,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Покретање апликација."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Завршавање покретања."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Притиснули сте дугме за укључивање – тиме обично искључујете екран.\n\nПробајте лагано да додирнете док подешавате отисак прста."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Завршите подешавање искључивањем екрана"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Искључите екран и напустите подешавање"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Искључи"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Настављате верификацију отиска прста?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Притиснули сте дугме за укључивање – тиме обично искључујете екран.\n\nПробајте лагано да додирнете да бисте верификовали отисак прста."</string>
@@ -1363,7 +1369,7 @@
     <string name="usb_ptp_notification_title" msgid="5043437571863443281">"Режим PTP преко USB-а је укључен"</string>
     <string name="usb_tether_notification_title" msgid="8828527870612663771">"USB привезивање је укључено"</string>
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"Режим MIDI преко USB-а је укључен"</string>
-    <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Уређај повезан са веб-камером"</string>
+    <string name="usb_uvc_notification_title" msgid="2030032862673400008">"Уређај повезан као веб-камера"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"USB додатак је повезан"</string>
     <string name="usb_notification_message" msgid="4715163067192110676">"Додирните за још опција."</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"Повезани уређај се пуни. Додирните за још опција."</string>
@@ -1393,7 +1399,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ОДБИЈ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Избор метода уноса"</string>
     <string name="show_ime" msgid="6406112007347443383">"Задржава се на екрану док је физичка тастатура активна"</string>
-    <string name="hardware" msgid="1800597768237606953">"Прикажи виртуелну тастатуру"</string>
+    <string name="hardware" msgid="3611039921284836033">"Користи тастатуру на екрану"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Конфигуришите уређај <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Конфигуришите физичке тастатуре"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Додирните да бисте изабрали језик и распоред"</string>
@@ -1682,10 +1688,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Уклони"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Желите да појачате звук изнад препорученог нивоа?\n\nСлушање гласне музике дуже време може да вам оштети слух."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Упозорење,\nпремашили сте број гласних звучних сигнала које је безбедно слушати преко слушалица током недељу дана.\n\nПрекорачењем тог ограничења трајно ћете оштетити слух."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Упозорење,\nПет пута сте премашили број гласних звучних сигнала које је безбедно слушати преко слушалица током недељу дана.\n\nЈачина звука треба да се смањи да бисте заштитили слух."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Ниво на ком слушате медијски садржај може да доведе до оштећења слуха ако то траје током дужег периода.\n\nАко наставите да слушате тако гласно током дужег периода, може да дође до оштећења слуха."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Упозорење,\nтренутно слушате гласан садржај на небезбедном нивоу.\n\nАко наставите да слушате тако гласно, трајно ћете оштетити слух."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Желите да наставите да слушате гласну музику?\n\nЈачина звука у слушалицама је била висока дуже него што се препоручује, што може да оштети слух"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Препознат је гласан звук\n\nЈачина звука у слушалицама је била већа него што се препоручује, што може да оштети слух"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Желите ли да користите пречицу за приступачност?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Када је пречица укључена, притисните оба дугмета за јачину звука да бисте покренули функцију приступачности."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Желите да укључите пречицу за функције приступачности?"</string>
@@ -1716,7 +1720,7 @@
     <string name="color_inversion_feature_name" msgid="2672824491933264951">"Инверзија боја"</string>
     <string name="color_correction_feature_name" msgid="7975133554160979214">"Корекција боја"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Режим једном руком"</string>
-    <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Додатно затамњено"</string>
+    <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Додатно затамни"</string>
     <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Слушни апарати"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"Држали сте тастере за јачину звука. Услуга <xliff:g id="SERVICE_NAME">%1$s</xliff:g> је укључена."</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"Држали сте тастере за јачину звука. Услуга <xliff:g id="SERVICE_NAME">%1$s</xliff:g> је искључена."</string>
@@ -1846,13 +1850,13 @@
     <string name="restr_pin_confirm_pin" msgid="7143161971614944989">"Потврдите нови PIN"</string>
     <string name="restr_pin_create_pin" msgid="917067613896366033">"Направите PIN за измену ограничења"</string>
     <string name="restr_pin_error_doesnt_match" msgid="7063392698489280556">"PIN-ови се не подударају. Пробајте поново."</string>
-    <string name="restr_pin_error_too_short" msgid="1547007808237941065">"PIN је прекратак. Мора да садржи најмање 4 цифре."</string>
+    <string name="restr_pin_error_too_short" msgid="1547007808237941065">"PIN је прекратак. Мора да има бар 4 цифре."</string>
     <string name="restr_pin_try_later" msgid="5897719962541636727">"Пробајте поново касније"</string>
     <string name="immersive_cling_title" msgid="2307034298721541791">"Приказује се цео екран"</string>
     <string name="immersive_cling_description" msgid="7092737175345204832">"Да бисте изашли, превуците надоле одозго."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Важи"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Ротирајте ради бољег приказа"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Изађите из подељеног екрана ради бољег приказа"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Отворите апликацију <xliff:g id="NAME">%s</xliff:g> преко целог екрана да бисте боље видели"</string>
     <string name="done_label" msgid="7283767013231718521">"Готово"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Кружни клизач за сате"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Кружни клизач за минуте"</string>
@@ -1953,12 +1957,12 @@
     <string name="app_suspended_more_details" msgid="211260942831587014">"Сазнајте више"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Опозови паузирање апликације"</string>
     <string name="work_mode_off_title" msgid="6367463960165135829">"Укључити пословне апликације?"</string>
-    <string name="work_mode_turn_on" msgid="5316648862401307800">"Опозови паузу"</string>
+    <string name="work_mode_turn_on" msgid="5316648862401307800">"Поново активирај"</string>
     <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Хитан случај"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"Апликација није доступна"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Апликација <xliff:g id="APP_NAME">%1$s</xliff:g> тренутно није доступна."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> – није доступно"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Потребна је дозвола"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Захтев за дозволу је блокиран"</string>
     <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>
@@ -1969,6 +1973,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Ова апликација захтева додатне дозволе, али дозволе не могу да се дају у сесији стримовања. Прво дајте дозволу на Android TV уређају."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Ова апликација захтева додатне дозволе, али дозволе не могу да се дају у сесији стримовања. Прво дајте дозволу на таблету."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Ова апликација захтева додатне дозволе, али дозволе не могу да се дају у сесији стримовања. Прво дајте дозволу на телефону."</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>
@@ -1977,6 +1984,7 @@
     <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="5246906284426844596">"Ова апликација је направљена за старију верзију Android-а. Можда неће радити исправно и не обухвата најновије безбедносне функције и заштите приватности. Проверите да ли има ажурирања или се обратите програмеру апликације."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Потражи ажурирање"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Ова апликација није компатибилна са најновијом верзијом Android-а. Проверите да ли има ажурирања или се обратите програмеру апликације."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Имате нове поруке"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Отворите апликацију за SMS да бисте прегледали"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Неке функције су можда ограничене"</string>
@@ -2160,16 +2168,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Овај садржај не може да се отвара помоћу пословних апликација"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Овај садржај не може да се дели помоћу личних апликација"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Овај садржај не може да се отвара помоћу личних апликација"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Пословни профил је паузиран"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Додирните да бисте укључили"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Пословне апликације су паузиране"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Поново активирај"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Нема пословних апликација"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Нема личних апликација"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Желите да отворите пословну апликацију <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Желите да отворите у личној апликацији <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Желите да отворите у пословној апликацији <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Желите да позовете из пословне апликације?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Желите да пребаците на пословну апликацију?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Ваша организација дозвољава позивање само из пословних апликација"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Ваша организација дозвољава слање порука само из пословних апликација"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Користи лични прегледач"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Користи пословни прегледач"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Позови"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Пребаци"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN за откључавање SIM мреже"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN за откључавање подскупа SIM мреже"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN за откључавање пословне SIM картице"</string>
@@ -2306,6 +2319,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Не може да се приступи камери телефона са <xliff:g id="DEVICE">%1$s</xliff:g> уређаја"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Не може да се приступи камери таблета са <xliff:g id="DEVICE">%1$s</xliff:g> уређаја"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Овом не можете да приступате током стримовања. Пробајте на телефону."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Не можете да гледате слику у слици при стримовању"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Подразумевани системски"</string>
     <string name="default_card_name" msgid="9198284935962911468">"КАРТИЦА <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Дозвола за профил пратећег сата за управљање сатовима"</string>
@@ -2330,7 +2344,7 @@
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"Уређај <xliff:g id="DEVICE_NAME">%s</xliff:g> је конфигурисан"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Распоред тастатуре је подешен на <xliff:g id="LAYOUT_1">%s</xliff:g>. Додирните да бисте то променили."</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Распоред тастатуре је подешен на <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Додирните да бисте то променили."</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Распоред тастатуре је подешен на <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Додирните да бисте то променили."</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Распоред тастатуре је <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Додирните да бисте то променили."</string>
     <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Распоред тастатуре је подешен на <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>… Додирните да бисте променили."</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"Физичке тастатуре су конфигурисане"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"Додирните да бисте видели тастатуре"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 4444e01..af2e1ea 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -298,9 +298,11 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android-system"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Byt till personlig profil"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Byt till jobbprofilen"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Byt till privat profil i <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Byt till jobbprofil i <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontakter"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"få tillgång till dina kontakter"</string>
-    <string name="permgrouplab_location" msgid="1858277002233964394">"plats"</string>
+    <string name="permgrouplab_location" msgid="1858277002233964394">"Plats"</string>
     <string name="permgroupdesc_location" msgid="1995955142118450685">"komma åt enhetens platsuppgifter"</string>
     <string name="permgrouplab_calendar" msgid="6426860926123033230">"Kalender"</string>
     <string name="permgroupdesc_calendar" msgid="6762751063361489379">"få tillgång till din kalender"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Tillåter att appen styr vibrationen."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Appen beviljas åtkomst till vibrationsstatus."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"ringa telefonnummer direkt"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Tillåter att appen ringer telefonnummer utan någon aktiv åtgärd från dig. Detta kan leda till oväntade avgifter och samtal. Observera att appen inte tillåts ringa nödsamtal. Skadliga appar kan ringa utan ditt godkännande och detta kan kosta pengar."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Tillåter att appen ringer telefonnummer utan åtgärd från dig. Detta kan leda till oväntade avgifter eller samtal. Observera att appen inte tillåts ringa nödsamtal. Skadliga appar kan ringa utan ditt godkännande och detta kan kosta pengar. De kan även ange operatörskoder vilket kan leda till att inkommande samtal automatiskt vidarebefordras till ett annat nummer."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"tillgång till tjänsten för snabbmeddelanden vid samtal"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Tillåter att appen använder tjänsten för snabbmeddelanden för att ringa samtal utan åtgärd från dig."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"läsa telefonens status och identitet"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Tillåter att appen hämtar information kopplad till standardtjänsten för NFC-betalning, till exempel registrerade hjälpmedel och ruttdestinationer."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"kontrollera närfältskommunikationen"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Tillåter att appen kommunicerar med etiketter, kort och läsare för närfältskommunikation (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Transaktionshändelse i ett säkert element"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Tillåter att appen tar emot information om transaktioner som sker i ett säkert element."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"inaktivera skärmlåset"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Tillåter att appen inaktiverar tangentlåset och tillhörande lösenordsskydd. Ett exempel kan vara att tangentlåset inaktiveras vid inkommande samtal och aktiveras igen när samtalet är avslutat."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"begär komplexitetsnivå för skärmlåset"</string>
@@ -614,16 +618,19 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Använd biometrisk data eller skärmlåset"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifiera din identitet"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Fortsätt med hjälp av din biometriska data"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Fortsätt med hjälp av ditt fingeravtryck"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Fortsätt med hjälp av ditt ansikte"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Fortsätt med hjälp av din biometriska data eller skärmlåset"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrisk maskinvara är inte tillgänglig"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autentiseringen avbröts"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Identifierades inte"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Ansiktet känns inte igen"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autentiseringen avbröts"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Pinkod, mönster eller lösenord har inte angetts"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Ett fel uppstod vid autentiseringen"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Använd skärmlåset"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Fortsätt med hjälp av ditt skärmlås"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Tryck på sensorn med ett stadigt tryck"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Tryck hårt på sensorn"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Fingeravtrycket kändes inte igen. Försök igen."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Rengör fingeravtryckssensorn och försök igen"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Rengör sensorn och försök igen"</string>
@@ -643,7 +650,7 @@
     <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ansiktet har autentiserats. Tryck på Bekräfta"</string>
     <string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Det finns ingen maskinvara för fingeravtryck."</string>
     <string name="fingerprint_error_no_space" msgid="7285481581905967580">"Det gick inte att konfigurera fingeravtryck"</string>
-    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Fingeravtryckskonfigurering nådde tidsgränsen. Försök igen."</string>
+    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Tiden för fingeravtrycksinställning gick ut. Försök igen."</string>
     <string name="fingerprint_error_canceled" msgid="540026881380070750">"Fingeravtrycksåtgärden avbröts."</string>
     <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Fingeravtrycksåtgärden avbröts av användaren."</string>
     <string name="fingerprint_error_lockout" msgid="6626753679019351368">"För många försök. Använd låsskärmen i stället."</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Något täcker ansiktet. Hela ansiktet måste synas."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Ansiktsverifiering går ej. Otillgänglig maskinvara."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Ansiktsåtgärden har avbrutits."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Ansiktslås avbröts av användaren"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Du har gjort för många försök. Försök igen senare."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"För många försök. Ansiktslås är otillgängligt."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"För många försök. Ange skärmlås i stället."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Det gick inte att verifiera ansiktet. Försök igen."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Du har inte konfigurerat ansiktslås"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"AVVISA"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Välj inmatningsmetod"</string>
     <string name="show_ime" msgid="6406112007347443383">"Ha kvar det på skärmen när det fysiska tangentbordet används"</string>
-    <string name="hardware" msgid="1800597768237606953">"Visa virtuellt tangentbord"</string>
+    <string name="hardware" msgid="3611039921284836033">"Använd skärmtangentbord"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Konfigurera <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Konfigurera fysiska tangentbord"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Tryck om du vill välja språk och layout"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Ta bort"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Vill du höja volymen över den rekommenderade nivån?\n\nAtt lyssna med stark volym långa stunder åt gången kan skada hörseln."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Varning!\nDu har överskridit den säkra mängden höga ljudsignaler man kan lyssna på i hörlurar under en vecka.\n\nDin hörsel skadas permanent om du överskrider gränsen."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Varning!\nDu har lyssnat på över fem gånger den säkra mängden höga ljudsignaler man kan lyssna på i hörlurar under en vecka.\n\nVolymen har sänkts för att skydda din hörsel."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Du lyssnar på media med en volym som kan leda till hörselskador om den bibehålls under lång tid.\n\nDin hörsel kan skadas om du fortsätter att spela upp på den här nivån under lång tid."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Varning!\nDu lyssnar just nu på innehåll med farligt hög volym.\n\nDin hörsel skadas permanent om du fortsätter att lyssna med den här volymen."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Vill du fortsätta lyssna på hög volym?\n\nVolymen i hörlurarna har varit hög längre än vad som rekommenderas, vilket kan skada hörseln"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Högt ljud har upptäckts\n\nVolymen i hörlurarna har varit högre än vad som rekommenderas, vilket kan skada hörseln"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Vill du använda Aktivera tillgänglighet snabbt?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"När kortkommandot har aktiverats startar du en tillgänglighetsfunktion genom att trycka ned båda volymknapparna i tre sekunder."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Vill du aktivera genvägen till tillgänglighetsfunktioner?"</string>
@@ -1716,7 +1720,7 @@
     <string name="color_correction_feature_name" msgid="7975133554160979214">"Färgkorrigering"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"Enhandsläge"</string>
     <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"Extradimmat"</string>
-    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Hörapparater"</string>
+    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"Hörhjälpmedel"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"Volymknapparna har tryckts ned. <xliff:g id="SERVICE_NAME">%1$s</xliff:g> har aktiverats."</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"Volymknapparna har tryckts ned. <xliff:g id="SERVICE_NAME">%1$s</xliff:g> har inaktiverats."</string>
     <string name="accessibility_shortcut_spoken_feedback" msgid="3760999147597564314">"Släpp volymknapparna. Du kan aktivera <xliff:g id="SERVICE_NAME">%1$s</xliff:g> genom att hålla båda volymknapparna nedtryckta i tre sekunder igen."</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Svep nedåt från skärmens överkant för att avsluta."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"OK"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Rotera för att få en bättre vy"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Stäng delad skärm för att få en bättre vy"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Öppna <xliff:g id="NAME">%s</xliff:g> i fullskärmsläget för att få en bättre vy"</string>
     <string name="done_label" msgid="7283767013231718521">"Klart"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Cirkelreglage för timmar"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Cirkelreglage för minuter"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Appen är inte tillgänglig"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> är inte tillgängligt just nu."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> är inte tillgänglig"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Behörighet krävs"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Begäran om behörighet har dolts"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Appen begär ytterligare behörigheter, men det går inte att bevilja behörigheter under streamingsessionen. Bevilja behörigheten på Android TV-enheten först."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Appen begär ytterligare behörigheter, men det går inte att bevilja behörigheter under streamingsessionen. Bevilja behörigheten på surfplattan först."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Appen begär ytterligare behörigheter, men det går inte att bevilja behörigheter under streamingsessionen. Bevilja behörigheten på telefonen först."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"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="deprecated_target_sdk_message" msgid="5246906284426844596">"Den här appen byggdes för en äldre version av Android. Den kanske inte fungerar som den ska och har inte de senaste säkerhets- och integritetsskydden. Sök efter en uppdatering eller kontakta appens utvecklare."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Sök efter uppdateringar"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Denna app är inte kompatibel med den senaste versionen av Android. Sök efter en uppdatering eller kontakta appens utvecklare."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Du har nya meddelanden"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Öppna sms-appen och visa meddelandet"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Vissa funktioner är begränsade"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Det här innehållet kan inte öppnas med jobbappar"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Det här innehållet kan inte delas med privata appar"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Det här innehållet kan inte öppnas med privata appar"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Jobbprofilen är pausad"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Tryck för att aktivera"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Jobbappar har pausats"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Återuppta"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Inga jobbappar"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Inga privata appar"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Vill du öppna <xliff:g id="APP">%s</xliff:g> med din jobbprofil?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Vill du öppna med din privata profil i <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Vill du öppna med din jobbprofil i <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Vill du ringa med jobbappen?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Vill du byta till jobbappen?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Organisationen tillåter endast att du ringer samtal med jobbappar"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Organisationen tillåter endast att du skickar meddelanden med jobbappar"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Använd privat webbläsare"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Använd jobbwebbläsare"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Ring"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Byt"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Pinkod för upplåsning av nätverk för SIM-kort"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Pinkod för upplåsning av delnätverk för SIM-kort"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Pinkod för upplåsning av företag för SIM-kort"</string>
@@ -2288,7 +2301,7 @@
     <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Återaktivera enhetens mikrofon"</string>
     <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Återaktivera enhetens kamera"</string>
     <string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"För &lt;b&gt;<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; och alla appar och tjänster"</string>
-    <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Avblockera"</string>
+    <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Återaktivera"</string>
     <string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"Sensorintegritet"</string>
     <string name="splash_screen_view_icon_description" msgid="180638751260598187">"Appikon"</string>
     <string name="splash_screen_view_branding_description" msgid="7911129347402728216">"Appens varumärkesbild"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Telefonens kamera kan inte användas från <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Surfplattans kamera kan inte användas från <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Det går inte att komma åt innehållet när du streamar. Testa med telefonen i stället."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Det går inte att visa bild-i-bild när du streamar"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Systemets standardinställning"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KORT <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Behörighet för den tillhörande klockprofilen att hantera klockor"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index cd294a7..d77385c 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Mfumo wa Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Tumia wasifu wa binafsi"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Tumia wasifu wa kazini"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Badili uweke wasifu wa binafsi <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Badili uweke wasifu wa kazini <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Anwani"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"ifikie anwani zako"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Mahali"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Inaruhusu programu kudhibiti kitingishi."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Huruhusu programu kufikia hali ya kitetemeshaji."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"piga simu moja kwa moja kwa nambari za simu"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Inaruhusu programu kupiga nambari za simu bila ya wewe kuingilia kati. Hii inaweza kusababisha gharama zisizotarajiwa au simu. Kumbuka kuwa hii hairuhusu programu kupiga nambari za dharura. Programu hasidi zinaweza kukugharimu pesa kwa kupiga simu bila uthibitisho wako."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Huruhusu programu kupiga simu kiotomatiki. Hii huenda ikasababisha gharama au simu usizotarajia. Kumbuka, idhini hii hairuhusu programu kupiga simu kwa nambari za dharura. Programu hasidi zinaweza kusababisha utozwe pesa kwa kupiga simu bila wewe kuthibitisha, au kupiga nambari za watoa huduma, hatua ambayo husababisha simu zinazoingia kusambazwa kwa nambari nyingine kiotomatiki."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"fikia huduma ya simu ya IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Huruhusu programu kutumia huduma ya IMS kupiga simu bila udhibiti wako."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"kusoma hali na kitambulisho cha simu"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Huruhusu programu kupata maelezo ya huduma inayopendelewa ya malipo ya nfc kama vile huduma zilizosajiliwa na njia."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"kudhibiti Mawasiliano ya Vifaa Vilivyokaribu (NFC)"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Inaruhusu programu kuwasiliana na lebo, kadi na wasomaji wa Near Field Communication (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Muamala kupitia Kipengele Salama"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Huruhusu programu kupokea maelezo kuhusu miamala inayofanyika kupitia Kipengele Salama."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"zima kufuli la skrini yako"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Inaruhusu programu kulemaza ufunguo wa vitufe na usalama mwingine ambata wa nenosiri. Kwa mfano, simu inalemaza ufunguo wa viitufe inapopokea simu inayoingia, kisha inawezesha upya ufunguo wa vitufe wakati simu inapokamilika."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"iombe kiwango cha uchangamano wa kufunga skrini"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Tumia bayometriki au mbinu ya kufunga skrini"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Thibitisha kuwa ni wewe"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Tumia bayometriki yako ili uendelee"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Tumia alama ya kidole chako ili uendelee"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Tumia uso wako ili uendelee"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Tumia bayometriki au mbinu yako ya kufunga skrini ili uendelee"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Maunzi ya bayometriki hayapatikani"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Imeghairi uthibitishaji"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Hayatambuliki"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Imeshindwa kutambua uso"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Imeghairi uthibitishaji"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Hujaweka pin, mchoro au nenosiri"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Hitilafu imetokea wakati wa uthibitishaji"</string>
@@ -684,7 +691,7 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Sogeza simu upande wako wa kushoto"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Sogeza simu upande wako wa kulia"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Tafadhali angalia kifaa chako moja kwa moja."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Imeshindwa kuona uso wako. Shikilia simu yako ikilingana na macho."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Imeshindwa kuona uso wako. Shikilia simu ikilingana na macho."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Inatikisika sana. Ishike simu iwe thabiti."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Tafadhali sajili uso wako tena."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Imeshindwa kutambua uso. Jaribu tena."</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Uso umefunikwa. Lazima uso wako wote uonekane."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Imeshindwa kuthibitisha uso. Maunzi hayapatikani."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Utendaji wa kitambulisho umeghairiwa."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Hatua ya Kufungua kwa Uso imeghairiwa na mtumiaji"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Umejaribu mara nyingi mno. Jaribu tena baadaye."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Umejaribu mara nyingi mno. Kipengele cha Kufungua kwa Uso hakipatikani."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Umejaribu mara nyingi mno. Weka mbinu ya kufunga skrini badala yake."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Imeshindwa kuthibitisha uso. Jaribu tena."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Hujaweka mipangilio ya kipengele cha Kufungua kwa Uso"</string>
@@ -838,7 +844,7 @@
   <string-array name="phoneTypes">
     <item msgid="8996339953292723951">"Ya nyumbani"</item>
     <item msgid="7740243458912727194">"Simu ya mkononi"</item>
-    <item msgid="8526146065496663766">"Ya kazini"</item>
+    <item msgid="8526146065496663766">"Kazini"</item>
     <item msgid="8150904584178569699">"Pepesi ya Kazini"</item>
     <item msgid="4537253139152229577">"Pepesi ya Nyumbani"</item>
     <item msgid="6751245029698664340">"Kurasa anwani"</item>
@@ -881,7 +887,7 @@
     <string name="phoneTypeCustom" msgid="5120365721260686814">"Maalum"</string>
     <string name="phoneTypeHome" msgid="3880132427643623588">"Ya nyumbani"</string>
     <string name="phoneTypeMobile" msgid="1178852541462086735">"Simu ya mkononi"</string>
-    <string name="phoneTypeWork" msgid="6604967163358864607">"Ya kazini"</string>
+    <string name="phoneTypeWork" msgid="6604967163358864607">"Kazini"</string>
     <string name="phoneTypeFaxWork" msgid="6757519896109439123">"Pepesi ya Kazini"</string>
     <string name="phoneTypeFaxHome" msgid="6678559953115904345">"Pepesi ya Nyumbani"</string>
     <string name="phoneTypePager" msgid="576402072263522767">"Peja"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"KATAA"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Chagua njia ya ingizo"</string>
     <string name="show_ime" msgid="6406112007347443383">"Ionyeshe kwenye skrini wakati kibodi halisi inatumika"</string>
-    <string name="hardware" msgid="1800597768237606953">"Onyesha kibodi pepe"</string>
+    <string name="hardware" msgid="3611039921284836033">"Tumia kibodi ya skrini"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Wekea mipangilio <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Wekea kibodi halisi mipangilio"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Gusa ili uchague lugha na muundo"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Ondoa"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Ungependa kupandisha sauti zaidi ya kiwango kinachopendekezwa?\n\nKusikiliza kwa sauti ya juu kwa muda mrefu kunaweza kuharibu uwezo wako wa kusikia."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Tahadhari,\nUmezidi kiasi cha mawimbi ya sauti ya juu ambayo mtu anaweza kusikiliza kwa usalama ndani ya wiki kupitia vipokea sauti vya kichwani.\n\nKuvuka kikomo hiki kutaharibu usikivu wako kabisa."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Tahadhari,\nUmezidisha mara 5 ya kiwango cha mawimbi ya sauti ya juu ambayo mtu anaweza kusikiliza kwa usalama ndani ya wiki kupitia vipokea sauti vya kichwani.\n\nSauti imepunguzwa ili kulinda usikivu wako."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Kiwango cha sauti ambacho unasikilizia maudhui kinaweza kusababisha athari kwenye usikivu unapoendelea kusikiliza kwa muda mrefu.\n\nKuendelea kucheza maudhui katika kiwango hiki cha sauti kwa muda mrefu kunaweza kuharibu usikivu wako."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Tahadhari,\nKwa sasa unasikiliza maudhui ya sauti yanayochezwa kwa kiwango cha sauti kisicho salama.\n\nKuendelea kusikiliza maudhui katika kiwango hiki cha sauti ya juu kutaharibu usikivu wako kabisa."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Ungependa kuendelea kusikiliza kwa sauti ya kiwango cha juu?\n\nKiwango cha sauti ya vipokea sauti vya kichwani kimekuwa juu kwa muda mrefu kuliko inavyopendekezwa, hali ambayo inaweza kuharibu uwezo wako wa kusikia"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Sauti ya kiwango cha juu imetambuliwa\n\nKiwango cha sauti ya vipokea sauti vya kichwani kimekuwa juu zaidi kuliko inavyopendekezwa, hali ambayo inaweza kuharibu uwezo wako wa kusikia"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Ungependa kutumia njia ya mkato ya ufikivu?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Unapowasha kipengele cha njia ya mkato, hatua ya kubonyeza vitufe vyote viwili vya sauti kwa sekunde tatu itafungua kipengele cha ufikivu."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Ungependa kuwasha njia ya mkato ya vipengele vya ufikivu?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Ili kuondoka, telezesha kidole kutoka juu hadi chini."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Nimeelewa"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Zungusha ili upate mwonekano bora"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Funga skrini iliyogawanywa ili upate mwonekano bora"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Fungua <xliff:g id="NAME">%s</xliff:g> kwenye skrini nzima ili uone maudhui kwa urahisi"</string>
     <string name="done_label" msgid="7283767013231718521">"Imekamilika"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Kitelezi cha mviringo wa saa"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Kitelezi cha mviringo wa dakika"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Programu haipatikani"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> haipatikani hivi sasa."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> haipatikani"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Ruhusa inahitajika"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Ombi la ruhusa limekataliwa"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Programu hii inaomba ruhusa za ziada. Hata hivyo, huwezi kutoa ruhusa ukitiririsha. Ruhusu kwanza kwenye kifaa chako cha Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Programu hii inaomba ruhusa za ziada. Hata hivyo, huwezi kutoa ruhusa ukitiririsha. Ruhusu kwenye kishikwambi chako kwanza."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Programu hii inaomba ruhusa za ziada. Hata hivyo, huwezi kutoa ruhusa ukitiririsha. Ruhusu kwenye simu yako kwanza."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Huwezi kufikia mipangilio hii kwenye <xliff:g id="DEVICE">%1$s</xliff:g> yako. Badala yake jaribu kwenye simu yako."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Programu hii ilisanidiwa kwa ajili ya toleo la zamani la Android. Huenda isifanye kazi ipasavyo na haijumuishi ulinzi wa faragha na usalama wa hivi karibuni. Angalia kama ina sasisho au wasiliana na msanidi wa programu."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Angalia masasisho"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Programu hii haitumiki kwenye toleo jipya zaidi la Android. Angalia iwapo sasisho linapatikana au wasiliana na msanidi programu."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Una ujumbe mpya"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Fungua programu ya SMS ili uweze kuangalia"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Huenda baadhi ya vipengele vinadhibitiwa"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Huwezi kufungua maudhui haya ukitumia programu za kazini"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Huwezi kushiriki maudhui haya na programu za binafsi"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Huwezi kufungua maudhui haya ukitumia programu za binafsi"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Wasifu wa kazini umesimamishwa"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Gusa ili uwashe"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Programu za kazini zimesitishwa"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Acha kusitisha"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Hakuna programu za kazini"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Hakuna programu za binafsi"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Ungependa kufungua <xliff:g id="APP">%s</xliff:g> ukitumia wasifu wa kazini?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Ungependa kufungua <xliff:g id="APP">%s</xliff:g> ukitumia wasifu wa binafsi?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Ungependa kufungua <xliff:g id="APP">%s</xliff:g> ukitumia wasifu wa kazini?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Ungependa kupiga simu ukitumia programu ya kazini?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Ungependa kutumia programu ya kazini?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Shirika lako linakuruhusu upige simu ukitumia programu za kazini pekee"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Shirika lako linakuruhusu utume ujumbe ukitumia programu za kazini pekee"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Tumia kivinjari cha binafsi"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Tumia kivinjari cha kazini"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Piga simu"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Badilisha"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN ya kufungua mtandao wa SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN ya kufungua SIM iliyofungwa na mtoa huduma za simu"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN ya kufungua SIM ya shirika"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Huwezi kufikia kamera ya simu kutoka kwenye <xliff:g id="DEVICE">%1$s</xliff:g> yako"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Haiwezi kufikia kamera ya kompyuta kibao kutoka kwenye <xliff:g id="DEVICE">%1$s</xliff:g> yako"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Huwezi kufikia maudhui haya unapotiririsha. Badala yake jaribu kwenye simu yako."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Huwezi kuona picha iliyopachikwa ndani ya picha nyingine unapotiririsha"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Chaguomsingi la mfumo"</string>
     <string name="default_card_name" msgid="9198284935962911468">"SIM KADI <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Ruhusa ya wasifu oanifu wa Saa ili kudhibiti saa"</string>
@@ -2317,7 +2331,7 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Huruhusu programu oanifu kuanzisha huduma zinazoonekana kwenye skrini kutoka katika huduma zinazoendelea chinichini."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Maikrofoni inapatikana"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Maikrofoni imezuiwa"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Hali ya skrini mbili"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual screen"</string>
     <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Umewasha kipengele cha hali ya skrini mbili"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> inatumia skrini zote kuonyesha maudhui"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Kifaa kina joto sana"</string>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 865a2a5..50d056a 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android அமைப்பு"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"தனிப்பட்ட சுயவிவரத்திற்கு மாற்றவும்"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"பணிச் சுயவிவரத்திற்கு மாற்றவும்"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"தனிப்பட்ட கணக்கிற்கு (<xliff:g id="APP_NAME">%1$s</xliff:g>) மாறு"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"பணிக் கணக்கிற்கு (<xliff:g id="APP_NAME">%1$s</xliff:g>) மாறு"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"தொடர்புகள்"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"தொடர்புகளை அணுக வேண்டும்"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"இருப்பிடம்"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"அதிர்வைக் கட்டுப்படுத்தப் ஆப்ஸை அனுமதிக்கிறது."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"அதிர்வு நிலையை அணுக ஆப்ஸை அனுமதிக்கும்."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"தொலைபேசி எண்களை நேரடியாக அழைத்தல்"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"உங்கள் தலையீட்டின்றி மொபைல் எண்களை அழைக்கப் ஆப்ஸை அனுமதிக்கிறது. இதன் விளைவாக எதிர்பாராத கட்டணங்களோ அழைப்புகளோ ஏற்படலாம். அவசரகால எண்களை அழைக்க இது ஆப்ஸை அனுமதிக்காது என்பதை நினைவில்கொள்ளவும். தீங்கிழைக்கும் ஆப்ஸ், உங்கள் உறுதிப்படுத்தல் இன்றி அழைப்புகளைச் செய்வதால் உங்களுக்குச் செலவு ஏற்படக்கூடும்."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"உங்கள் உறுதிப்படுத்தல் இல்லாமல் ஃபோன் எண்களை அழைக்க ஆப்ஸை அனுமதிக்கும். இது எதிர்பாராத கட்டணங்கள்/அழைப்புகளுக்கு வழிவகுக்கக்கூடும். அவசர உதவி எண்களை அழைக்க இது ஆப்ஸை அனுமதிக்காது என்பதை நினைவில் கொள்ளுங்கள். தீங்கிழைக்கும் ஆப்ஸ் உங்கள் உறுதிப்படுத்தல் இல்லாமல் அழைப்புகளை மேற்கொள்வதன் மூலம் உங்களுக்கு அநாவசியச் செலவு ஏற்படக்கூடும் அல்லது அவை கேரியர் குறியீடுகளை டயல் செய்து உங்களுக்கான உள்வரும் அழைப்புகளை வேறு எண்ணுக்குத் தானாகத் திசைதிருப்பக்கூடும்."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS அழைப்புச் சேவையை அணுகுதல்"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"உங்கள் குறுக்கீடின்றி IMS சேவையைப் பயன்படுத்தி அழைப்பதற்கு, ஆப்ஸை அனுமதிக்கும்."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"மொபைல் நிலை மற்றும் அடையாளத்தைப் படித்தல்"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"பதிவுசெய்யப்பட்ட கருவிகள், சேருமிடத்திற்கான வழி போன்ற விருப்பமான NFC பேமெண்ட் சேவை தொடர்பான தகவல்களைப் பெற ஆப்ஸை அனுமதிக்கிறது."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"குறுகிய இடைவெளி தகவல்பரிமாற்றத்தைக் கட்டுப்படுத்துதல்"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"குறுகிய இடைவெளி தகவல்பரிமாற்றம் (NFC), குறிகள், கார்டுகள் மற்றும் ரீடர்கள் ஆகியவற்றுடன் தொடர்புகொள்ள, ஆப்ஸை அனுமதிக்கிறது."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"பாதுகாப்பு உறுப்பில் நிகழ்கின்ற பணப் பரிமாற்ற நிகழ்வு"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"பாதுகாப்பு உறுப்பில் நிகழ்கின்ற பணப் பரிமாற்றங்கள் குறித்த தகவல்களைப் பெற ஆப்ஸை அனுமதிக்கும்."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"உங்கள் திரைப் பூட்டை முடக்குதல்"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"விசைப்பூட்டையும், தொடர்புடைய கடவுச்சொல் பாதுகாப்பையும் முடக்கப் ஆப்ஸை அனுமதிக்கிறது. எடுத்துக்காட்டாக, உள்வரும் மொபைல் அழைப்பைப் பெறும்போது மொபைல் விசைப்பூட்டை முடக்குகிறது, பிறகு அழைப்பு முடிந்தவுடன் விசைப்பூட்டை மீண்டும் இயக்குகிறது."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"திரைப் பூட்டு தொடர்பான சிக்கலைத் தீர்க்க அனுமதி கோருதல்"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"பயோமெட்ரிக்ஸையோ திரைப் பூட்டையோ பயன்படுத்து"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"நீங்கள்தான் என உறுதிசெய்க"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"தொடர உங்கள் பயோமெட்ரிக்கைப் பயன்படுத்துங்கள்"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"தொடர்வதற்கு உங்கள் கைரேகையைப் பயன்படுத்துங்கள்"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"தொடர்வதற்கு உங்கள் முகத்தைப் பயன்படுத்துங்கள்"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"தொடர, உங்கள் பயோமெட்ரிக்கையோ திரைப் பூட்டையோ பயன்படுத்துங்கள்"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"பயோமெட்ரிக் வன்பொருள் இல்லை"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"அங்கீகரிப்பு ரத்தானது"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"அடையாளங்காணபடவில்லை"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"முகத்தைக் கண்டறிய முடியவில்லை"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"அங்கீகரிப்பு ரத்தானது"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"பின்னோ, பேட்டர்னோ, கடவுச்சொல்லோ அமைக்கப்படவில்லை"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"அங்கீகரிப்பதில் பிழை"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"முக அங்கீகாரச் செயல்பாடு ரத்துசெய்யப்பட்டது."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"பயனரால் \'முகம் காட்டித் திறத்தல்\' ரத்துசெய்யப்பட்டது"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"பலமுறை முயன்றுவிட்டீர்கள். பிறகு முயலவும்."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"பலமுறை முயன்றுவிட்டீர்கள். முகம் காட்டித் திறத்தல் இல்லை."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"பலமுறை முயன்றுவிட்டீர்கள். இதற்குப் பதிலாக, திரைப் பூட்டைப் பயன்படுத்தவும்."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"முகத்தைச் சரிபார்க்க இயலவில்லை. மீண்டும் முயலவும்."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"\'முகம் காட்டித் திறத்தல்\' அம்சத்தை அமைக்கவில்லை."</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"வேண்டாம்"</string>
     <string name="select_input_method" msgid="3971267998568587025">"உள்ளீட்டு முறையைத் தேர்வுசெய்க"</string>
     <string name="show_ime" msgid="6406112007347443383">"கைமுறை கீபோர்டு இயக்கத்தில் இருக்கும் போது IMEஐ திரையில் வைத்திரு"</string>
-    <string name="hardware" msgid="1800597768237606953">"விர்ச்சுவல் கீபோர்டை காட்டு"</string>
+    <string name="hardware" msgid="3611039921284836033">"ஸ்கிரீன் கீபோர்டை உபயோகி"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> சாதனத்தை உள்ளமைத்தல்"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"கீபோர்டுகளை உள்ளமைத்தல்"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"மொழியையும் தளவமைப்பையும் தேர்ந்தெடுக்க, தட்டவும்"</string>
@@ -1629,7 +1635,7 @@
     <string name="media_route_chooser_title" msgid="6646594924991269208">"சாதனத்துடன் இணைக்கவும்"</string>
     <string name="media_route_chooser_title_for_remote_display" msgid="3105906508794326446">"ஸ்கிரீனை சாதனத்தில் திரையிடு"</string>
     <string name="media_route_chooser_searching" msgid="6119673534251329535">"சாதனங்களைத் தேடுகிறது..."</string>
-    <string name="media_route_chooser_extended_settings" msgid="2506352159381327741">"அமைப்பு"</string>
+    <string name="media_route_chooser_extended_settings" msgid="2506352159381327741">"அமைப்புகள்"</string>
     <string name="media_route_controller_disconnect" msgid="7362617572732576959">"துண்டி"</string>
     <string name="media_route_status_scanning" msgid="8045156315309594482">"ஸ்கேன் செய்கிறது..."</string>
     <string name="media_route_status_connecting" msgid="5845597961412010540">"இணைக்கிறது..."</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"அகற்று"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"பரிந்துரைத்த அளவை விட ஒலியை அதிகரிக்கவா?\n\nநீண்ட நேரத்திற்கு அதிகளவில் ஒலி கேட்பது கேட்கும் திறனைப் பாதிக்கலாம்."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"எச்சரிக்கை,\nஒரு வாரத்திற்கு ஹெட்ஃபோன்களில் ஒருவர் பாதுகாப்பாகக் கேட்கக்கூடிய சத்தமான ஒலியளவு வரம்பைக் கடந்துவிட்டீர்கள்.\n\nதொடர்ந்து இந்த வரம்பை மீறினால் உங்கள் கேட்கும் திறன் நிரந்தரப் பாதிப்புக்குள்ளாகும்."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"எச்சரிக்கை,\nஒரு வாரத்திற்கு ஹெட்ஃபோன்களில் ஒருவர் பாதுகாப்பாகக் கேட்கக்கூடிய சத்தமான ஒலியளவு வரம்பை 5 முறை கடந்துவிட்டீர்கள்.\n\nஉங்கள் கேட்கும் திறனின் நலன் கருதி ஒலியளவு குறைக்கப்பட்டுள்ளது."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"நீங்கள் தற்போது கேட்கும் ஒலியளவிலேயே தொடர்ந்து மீடியாவைக் கேட்டு வந்தால் உங்கள் கேட்கும் திறன் பாதிப்புக்குள்ளாகும்.\n\nஇந்த அளவிலேயே தொடர்ந்து கேட்டால் உங்கள் கேட்கும் திறன் பாதிப்படையலாம்."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"எச்சரிக்கை,\nபாதுகாப்பற்ற ஒலியளவில் மீடியாவைத் தற்போது சத்தமாகக் கேட்கிறீர்கள்.\n\nதொடர்ந்து இந்தளவில் கேட்டால் உங்கள் கேட்கும் திறன் நிரந்தரப் பாதிப்புக்குள்ளாகும்."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"அதிக ஒலியளவில் தொடர்ந்து கேட்க வேண்டுமா?\n\nபரிந்துரைக்கப்பட்டதைவிட அதிக நேரமாக அதிகளவில் ஹெட்ஃபோன் ஒலியளவு உள்ளது, இது உங்கள் கேட்கும் திறனைப் பாதிக்கலாம்"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"அதிகச் சத்தம் கண்டறியப்பட்டது\n\nஹெட்ஃபோன் ஒலியளவு பரிந்துரைக்கப்பட்டதைவிட அதிகளவில் உள்ளது, இது கேட்கும் திறனைப் பாதிக்கலாம்"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"அணுகல்தன்மை ஷார்ட்கட்டைப் பயன்படுத்தவா?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"ஷார்ட்கட் இயக்கத்தில் இருக்கும்போது ஒலியளவு பட்டன்கள் இரண்டையும் 3 வினாடிகளுக்கு அழுத்தினால் அணுகல்தன்மை அம்சம் இயக்கப்படும்."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"அணுகல்தன்மை அம்சங்களுக்கான ஷார்ட்கட்டை ஆன் செய்யவா?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"வெளியேற, மேலிருந்து கீழே ஸ்வைப் செய்யவும்"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"புரிந்தது"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"சிறந்த காட்சிக்கு சுழற்றுங்கள்"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"சிறந்த காட்சிக்கு திரைப் பிரிப்புப் பயன்முறையில் இருந்து வெளியேறுங்கள்"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"சிறந்த காட்சிக்கு, <xliff:g id="NAME">%s</xliff:g> ஆப்ஸை முழுத்திரைப் பயன்முறையில் திறக்கவும்"</string>
     <string name="done_label" msgid="7283767013231718521">"முடிந்தது"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"மணிநேர வட்ட வடிவ ஸ்லைடர்"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"நிமிடங்களுக்கான வட்டவடிவ ஸ்லைடர்"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"இந்த ஆப்ஸ் இப்போது கிடைப்பதில்லை"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸ் இப்போது கிடைப்பதில்லை."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> இல்லை"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"அனுமதி தேவை"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"அணுகல் கோரிக்கை முடக்கப்பட்டது"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"இந்த ஆப்ஸ் கூடுதல் அனுமதிகளைக் கோருகிறது. ஆனால் ஸ்ட்ரீமிங் அமர்வில் அனுமதிகள் வழங்கப்படாது. முதலில் உங்கள் Android TV சாதனத்தில் அனுமதி வழங்கவும்."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"இந்த ஆப்ஸ் கூடுதல் அனுமதிகளைக் கோருகிறது. ஆனால் ஸ்ட்ரீமிங் அமர்வில் அனுமதிகள் வழங்கப்படாது. முதலில் உங்கள் டேப்லெட்டில் அனுமதி வழங்கவும்."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"இந்த ஆப்ஸ் கூடுதல் அனுமதிகளைக் கோருகிறது. ஆனால் ஸ்ட்ரீமிங் அமர்வில் அனுமதிகள் வழங்கப்படாது. முதலில் உங்கள் மொபைலில் அனுமதி வழங்கவும்."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"இந்த ஆப்ஸ் Androidன் பழைய பதிப்பிற்காக உருவாக்கப்பட்டது. இது சரியாகச் செயல்படாமல் போகலாம். மேலும் சமீபத்திய பாதுகாப்பு மற்றும் தனியுரிமை அம்சங்கள் இதில் இல்லை. புதுப்பிப்பு உள்ளதா எனப் பாருங்கள் அல்லது ஆப்ஸ் டெவெலப்பரைத் தொடர்புகொள்ளுங்கள்."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"புதுப்பிப்பு உள்ளதா எனப் பார்"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"இந்த ஆப்ஸ் சமீபத்திய Android பதிப்புடன் இணங்கவில்லை. புதுப்பிப்பு உள்ளதா எனப் பாருங்கள் அல்லது ஆப்ஸ் டெவெலப்பரைத் தொடர்புகொள்ளுங்கள்."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"புதிய செய்திகள் வந்துள்ளன"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"பார்க்க, SMS பயன்பாட்டைத் திறக்கவும்"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"சில செயலுக்கு கட்டுப்பாடு இருக்கலாம்"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"பணி ஆப்ஸ் மூலம் இந்த உள்ளடக்கத்தைத் திறக்க முடியாது"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"தனிப்பட்ட ஆப்ஸுடன் இந்த உள்ளடக்கத்தைப் பகிர முடியாது"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"தனிப்பட்ட ஆப்ஸ் மூலம் இந்த உள்ளடக்கத்தைத் திறக்க முடியாது"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"பணிக் கணக்கு இடைநிறுத்தப்பட்டுள்ளது"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"ஆன் செய்யத் தட்டுக"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"பணி ஆப்ஸ் இடைநிறுத்தப்பட்டுள்ளன"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"மீண்டும் இயக்கு"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"பணி ஆப்ஸ் எதுவுமில்லை"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"தனிப்பட்ட ஆப்ஸ் எதுவுமில்லை"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"பணிக் கணக்கில் உள்நுழைந்துள்ள <xliff:g id="APP">%s</xliff:g> ஆப்ஸைத் திறக்கவா?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"தனிப்பட்ட கணக்கில் <xliff:g id="APP">%s</xliff:g> ஆப்ஸைத் திறக்கவா?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"பணிக் கணக்கில் <xliff:g id="APP">%s</xliff:g> ஆப்ஸைத் திறக்கவா?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"பணி ஆப்ஸிலிருந்து அழைக்கவா?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"பணி ஆப்ஸுக்கு மாற வேண்டுமா?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"உங்கள் நிறுவனம் பணி ஆப்ஸில் இருந்து மட்டுமே அழைக்க உங்களை அனுமதிக்கிறது"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"உங்கள் நிறுவனம் பணி ஆப்ஸில் இருந்து மட்டுமே மெசேஜ்களை அனுப்ப உங்களை அனுமதிக்கிறது"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"தனிப்பட்ட உலாவியைப் பயன்படுத்து"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"பணி உலாவியைப் பயன்படுத்து"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"அழை"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"மாற்று"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"சிம் நெட்வொர்க் அன்லாக் பின்"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"சிம் நெட்வொர்க் சப்செட் அன்லாக் பின்"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"கார்ப்பரேட் அன்லாக் பின்"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"உங்கள் <xliff:g id="DEVICE">%1$s</xliff:g> சாதனத்திலிருந்து மொபைலின் கேமராவை அணுக முடியாது"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"உங்கள் <xliff:g id="DEVICE">%1$s</xliff:g> சாதனத்திலிருந்து டேப்லெட்டின் கேமராவை அணுக முடியாது"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"ஸ்ட்ரீமின்போது இதை அணுக முடியாது. அதற்குப் பதிலாக உங்கள் மொபைலில் பயன்படுத்திப் பார்க்கவும்."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"ஸ்ட்ரீம் செய்யும்போது பிக்ச்சர்-இன்-பிக்ச்சர் அம்சத்தைப் பயன்படுத்த முடியாது"</string>
     <string name="system_locale_title" msgid="711882686834677268">"சிஸ்டத்தின் இயல்பு"</string>
     <string name="default_card_name" msgid="9198284935962911468">"கார்டு <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"வாட்ச்சுகளை நிர்வகிக்க, துணைத் தயாரிப்பு ஆப்ஸில் வாட்ச் சுயவிவரத்தை அனுமதித்தல்"</string>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 2bdc7e1..32ef5bd 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -162,7 +162,7 @@
     <string name="httpErrorAuth" msgid="469553140922938968">"ప్రామాణీకరించడం సాధ్యపడలేదు."</string>
     <string name="httpErrorProxyAuth" msgid="7229662162030113406">"ప్రాక్సీ సర్వర్ ద్వారా ప్రామాణీకరణ విజయవంతం కాలేదు."</string>
     <string name="httpErrorConnect" msgid="3295081579893205617">"సర్వర్‌కు కనెక్ట్ చేయడం సాధ్యపడలేదు."</string>
-    <string name="httpErrorIO" msgid="3860318696166314490">"సర్వర్‌తో కమ్యూనికేట్ చేయడం సాధ్యపడలేదు. తర్వాత మళ్లీ ప్రయత్నించండి."</string>
+    <string name="httpErrorIO" msgid="3860318696166314490">"సర్వర్‌తో కమ్యూనికేట్ చేయడం సాధ్యపడలేదు. తర్వాత మళ్లీ ట్రై చేయండి."</string>
     <string name="httpErrorTimeout" msgid="7446272815190334204">"సర్వర్‌కు కనెక్షన్ సమయం ముగిసింది."</string>
     <string name="httpErrorRedirectLoop" msgid="8455757777509512098">"పేజీ చాలా ఎక్కువ సర్వర్ మళ్లింపులను కలిగి ఉంది."</string>
     <string name="httpErrorUnsupportedScheme" msgid="2664108769858966374">"ప్రోటోకాల్‌కి మద్దతు లేదు."</string>
@@ -170,7 +170,7 @@
     <string name="httpErrorBadUrl" msgid="754447723314832538">"URL చెల్లనిది అయినందువలన పేజీని తెరవడం సాధ్యపడలేదు."</string>
     <string name="httpErrorFile" msgid="3400658466057744084">"ఫైల్‌ను యాక్సెస్ చేయడం సాధ్యపడలేదు."</string>
     <string name="httpErrorFileNotFound" msgid="5191433324871147386">"రిక్వెస్ట్ చేసిన ఫైల్‌ను కనుగొనడం సాధ్యపడలేదు."</string>
-    <string name="httpErrorTooManyRequests" msgid="2149677715552037198">"చాలా ఎక్కువ రిక్వెస్ట్‌లు ప్రాసెస్ చేయబడుతున్నాయి. తర్వాత మళ్లీ ప్రయత్నించండి."</string>
+    <string name="httpErrorTooManyRequests" msgid="2149677715552037198">"చాలా ఎక్కువ రిక్వెస్ట్‌లు ప్రాసెస్ చేయబడుతున్నాయి. తర్వాత మళ్లీ ట్రై చేయండి."</string>
     <string name="notification_title" msgid="5783748077084481121">"<xliff:g id="ACCOUNT">%1$s</xliff:g>కు సైన్‌ఇన్ ఎర్రర్"</string>
     <string name="contentServiceSync" msgid="2341041749565687871">"సింక్‌"</string>
     <string name="contentServiceSyncNotificationTitle" msgid="5766411446676388623">"సింక్ చేయడం సాధ్యపడదు"</string>
@@ -219,7 +219,7 @@
     <string name="turn_on_radio" msgid="2961717788170634233">"వైర్‌లెస్‌ను ప్రారంభించండి"</string>
     <string name="turn_off_radio" msgid="7222573978109933360">"వైర్‌లెస్‌ను ఆపివేయండి"</string>
     <string name="screen_lock" msgid="2072642720826409809">"స్క్రీన్ లాక్"</string>
-    <string name="power_off" msgid="4111692782492232778">"పవర్ ఆఫ్ చేయండి"</string>
+    <string name="power_off" msgid="4111692782492232778">"పవర్ ఆఫ్"</string>
     <string name="silent_mode_silent" msgid="5079789070221150912">"రింగర్ ఆఫ్‌లో ఉంది"</string>
     <string name="silent_mode_vibrate" msgid="8821830448369552678">"రింగర్ వైబ్రేట్‌లో ఉంది"</string>
     <string name="silent_mode_ring" msgid="6039011004781526678">"రింగర్ ఆన్‌లో ఉంది"</string>
@@ -243,7 +243,7 @@
     <string name="global_actions" product="tv" msgid="3871763739487450369">"Android TV ఎంపికలు"</string>
     <string name="global_actions" product="default" msgid="6410072189971495460">"ఫోన్ ఎంపికలు"</string>
     <string name="global_action_lock" msgid="6949357274257655383">"స్క్రీన్ లాక్"</string>
-    <string name="global_action_power_off" msgid="4404936470711393203">"పవర్ ఆఫ్ చేయండి"</string>
+    <string name="global_action_power_off" msgid="4404936470711393203">"పవర్ ఆఫ్"</string>
     <string name="global_action_power_options" msgid="1185286119330160073">"పవర్"</string>
     <string name="global_action_restart" msgid="4678451019561687074">"రీస్టార్ట్ చేయండి"</string>
     <string name="global_action_emergency" msgid="1387617624177105088">"ఎమర్జెన్సీ"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android సిస్టమ్"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"వ్యక్తిగత ప్రొఫైల్‌కి మార్చు"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"కార్యాలయ ప్రొఫైల్‌కి మార్చు"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"వ్యక్తిగత <xliff:g id="APP_NAME">%1$s</xliff:g>‌కు మార్చండి"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"వర్క్ <xliff:g id="APP_NAME">%1$s</xliff:g>‌కు మార్చండి"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"కాంటాక్ట్‌లు"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"మీ కాంటాక్ట్‌లను యాక్సెస్ చేయడానికి"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"లొకేషన్"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"వైబ్రేటర్‌ను నియంత్రించడానికి యాప్‌ను అనుమతిస్తుంది."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"వైబ్రేటర్ స్థితిని యాక్సెస్ చేసేందుకు యాప్‌ను అనుమతిస్తుంది."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"నేరుగా కాల్ చేసే ఫోన్ నంబర్‌లు"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"మీ ప్రమేయం లేకుండా ఫోన్ నంబర్‌లకు కాల్ చేయడానికి యాప్‌ను అనుమతిస్తుంది. దీని వలన అనుకోని ఛార్జీలు విధించబడవచ్చు లేదా కాల్స్‌ రావచ్చు. ఇది అత్యవసర నంబర్‌లకు కాల్ చేయడానికి యాప్‌ను అనుమతించదని గుర్తుంచుకోండి. హానికరమైన యాప్‌లు మీ నిర్ధారణ లేకుండానే కాల్స్‌ చేయడం ద్వారా మీకు డబ్బు ఖర్చయ్యేలా చేయవచ్చు."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"మీ ప్రమేయం లేకుండానే ఫోన్ నంబర్‌లకు కాల్ చేయడానికి యాప్‌ను అనుమతిస్తుంది. ఇది ఊహించని ఛార్జీలు విధించబడవచ్చు లేదా కాల్స్ చేయవచ్చు. ఇది అత్యవసర నంబర్‌లకు కాల్ చేయడానికి యాప్‌ను అనుమతించదని గుర్తుంచుకోండి. హానికరమైన యాప్‌లు మీరు నిర్ధారించకుండా కాల్స్ చేయవచ్చు, లేదా ఇన్‌కమింగ్ కాల్స్‌ను ఆటోమేటిక్‌గా మరొక నంబర్‌కు ఫార్వర్డ్ అవ్వడానికి కారణమయ్యే క్యారియర్ కోడ్‌లను డయల్ చేయవచ్చు, వీటి వల్ల మీకు డబ్బు ఖర్చు అవ్వచ్చు."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS కాల్ సేవ యాక్సెస్ అనుమతి"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"మీ ప్రమేయం లేకుండా కాల్స్‌ చేయడం కోసం IMS సేవను ఉపయోగించడానికి యాప్‌ను అనుమతిస్తుంది."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"ఫోన్ స్టేటస్‌ మరియు గుర్తింపుని చదవడం"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"ప్రాధాన్యత ఇవ్వబడిన NFC చెల్లింపు సేవల సమాచారాన్ని, అంటే రిజిస్టర్ చేయబడిన సహాయక సాధనాలు, మార్గం, గమ్యస్థానం వంటి వాటిని పొందేందుకు యాప్‌ను అనుమతిస్తుంది."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"సమీప క్షేత్ర కమ్యూనికేషన్‌ను నియంత్రించడం"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"సమీప ఫీల్డ్ కమ్యూనికేషన్ (NFC) ట్యాగ్‌లు, కార్డులు మరియు రీడర్‌లతో కమ్యూనికేట్ చేయడానికి యాప్‌ను అనుమతిస్తుంది."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"సెక్యూర్ ఎలిమెంట్ లావాదేవీ ఈవెంట్"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"సెక్యూర్ ఎలిమెంట్‌లో జరుగుతున్న లావాదేవీల గురించిన సమాచారాన్ని స్వీకరించడానికి యాప్‌ను అనుమతిస్తుంది."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"మీ స్క్రీన్ లాక్‌ను నిలిపివేయడం"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"కీలాక్‌ను, అలాగే ఏదైనా అనుబంధించబడిన పాస్‌వర్డ్ సెక్యూరిటీని డిజేబుల్ చేయడానికి యాప్‌ను అనుమతిస్తుంది. ఉదాహరణకు, ఇన్‌కమింగ్ ఫోన్ కాల్ వస్తున్నప్పుడు ఫోన్ కీలాక్‌ను డిజేబుల్ చేస్తుంది, ఆపై కాల్ ముగిసిన తర్వాత కీలాక్‌ను మళ్లీ ఎనేబుల్ చేస్తుంది."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"స్క్రీన్ లాక్ సంక్లిష్టత రిక్వెస్ట్‌"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"బయోమెట్రిక్స్‌ను లేదా స్క్రీన్ లాక్‌ను ఉపయోగించండి"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"ఇది మీరేనని వెరిఫై చేసుకోండి"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"కొనసాగించడానికి, మీ బయోమెట్రిక్‌ను ఉపయోగించండి"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"కొనసాగించడానికి మీ వేలిముద్రను ఉపయోగించండి"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"కొనసాగించడానికి మీ ముఖాన్ని ఉపయోగించండి"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"కొనసాగించడానికి మీ బయోమెట్రిక్ లేదా స్క్రీన్ లాక్‌ను ఉపయోగించండి"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"బయోమెట్రిక్ హార్డ్‌వేర్‌ అందుబాటులో లేదు"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"ప్రమాణీకరణ రద్దు చేయబడింది"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"గుర్తించలేదు"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"ముఖం గుర్తించబడలేదు"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"ప్రమాణీకరణ రద్దు చేయబడింది"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"పిన్, ఆకృతి లేదా పాస్‌వర్డ్‌ సెట్ చేయబడలేదు"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"ప్రామాణీకరిస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది"</string>
@@ -628,12 +635,12 @@
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"వేలిముద్ర సెన్సార్‌ను క్లీన్ చేసి, మళ్లీ ట్రై చేయండి"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"సెన్సార్‌ను క్లీన్ చేసి, మళ్లీ ట్రై చేయండి"</string>
     <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"సెన్సార్ మీద గట్టిగా నొక్కండి"</string>
-    <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"వేలిని చాలా నెమ్మదిగా కదిలించారు. దయచేసి మళ్లీ ప్రయత్నించండి."</string>
+    <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"వేలిని చాలా నెమ్మదిగా కదిలించారు. దయచేసి మళ్లీ ట్రై చేయండి."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"మరొక వేలిముద్రను ట్రై చేయండి"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"వెలుతురు అధికంగా ఉంది"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"పవర్ బటన్ కనుగొనబడింది"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"సర్దుబాటు చేయడానికి ట్రై చేయండి"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ప్రతిసారీ మీ వేళ్ల స్థానాన్ని కొద్దిగా మార్చండి"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ప్రతిసారి మీ వేలిని కొద్ది కొద్దిగా జరపండి"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"వేలిముద్ర గుర్తించబడలేదు"</string>
@@ -654,7 +661,7 @@
     <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_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>
     <string name="fingerprint_dialog_default_subtitle" msgid="3879832845486835905">"కొనసాగించడానికి మీ వేలిముద్రను ఉపయోగించండి"</string>
@@ -676,15 +683,15 @@
     <string name="fingerprint_recalibrate_notification_content" msgid="8519935717822194943">"రిపెయిర్ ప్రొవైడర్‌ను సందర్శించండి."</string>
     <string name="face_acquired_insufficient" msgid="6889245852748492218">"మీ ఫేస్‌మోడల్ క్రియేషన్ కుదరదు. మళ్లీ ట్రై చేయండి."</string>
     <string name="face_acquired_too_bright" msgid="8070756048978079164">"వెలుతురు అధికంగా ఉంది. తక్కువ ఉండేలా చూడండి."</string>
-    <string name="face_acquired_too_dark" msgid="8539853432479385326">"తగిన కాంతి లేదు"</string>
+    <string name="face_acquired_too_dark" msgid="8539853432479385326">"తగినంత వెలుతురు లేదు"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"ఫోన్‌ను కాస్త దూరంగా జరపండి"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"ఫోన్‌ను దగ్గరగా పట్టుకోండి"</string>
     <string name="face_acquired_too_high" msgid="8278815780046368576">"ఫోన్‌ను పైకి పట్టుకోండి"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"ఫోన్‌ను కిందికి దించండి"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"ఫోన్‌ను కిందికి జరపండి"</string>
     <string name="face_acquired_too_right" msgid="6245286514593540859">"ఫోన్‌ను మీ ఎడమ వైపునకు జరపండి"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"ఫోన్‌ను మీ కుడి వైపునకు జరపండి"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"దయచేసి మీ పరికరం వైపు మరింత నేరుగా చూడండి."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"మీ ముఖం కనిపించడం లేదు. మీ ఫోన్‌ను కంటి స్థాయిలో పట్టుకోండి."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"మీ ముఖం కనిపించడం లేదు. మీ ఫోన్‌ను కళ్లకు ఎదురుగా పట్టుకోండి."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"బాగా కదుపుతున్నారు. ఫోన్‌ను స్థిరంగా పట్టుకోండి"</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"దయచేసి మీ ముఖాన్ని మళ్లీ నమోదు చేయండి."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"ముఖం గుర్తించబడలేదు. మళ్లీ ట్రై చేయండి."</string>
@@ -692,7 +699,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"మీ ఫోన్ వైపు మరింత నేరుగా చూడండి"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"మీ ఫోన్ వైపు మరింత నేరుగా చూడండి"</string>
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"మీ ఫోన్ వైపు మరింత నేరుగా చూడండి"</string>
-    <string name="face_acquired_obscured" msgid="4917643294953326639">"మీ ముఖానికి అడ్డుగా ఉన్నవాటిని తీసివేయండి."</string>
+    <string name="face_acquired_obscured" msgid="4917643294953326639">"మీ ముఖానికి ఏదైనా అడ్డుగా ఉంటే దాన్ని తీసివేయండి."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"నల్లని బార్‌తో సహా మీ స్క్రీన్ పైభాగం అంతటినీ శుభ్రంగా తుడవండి"</string>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ముఖం మీద ఏదో  కవరింగ్ ఉన్నట్టు గుర్తించబడింది."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"ముఖం ధృవీకరించలేరు. హార్డ్‌వేర్ అందుబాటులో లేదు."</string>
@@ -708,11 +715,10 @@
     <string name="face_error_no_space" msgid="5649264057026021723">"కొత్త ముఖం డేటాను స్టోరేజ్‌ చేయడం కాదు. మొదట పాతది తొలిగించండి."</string>
     <string name="face_error_canceled" msgid="2164434737103802131">"ముఖ యాక్టివిటీ రద్దయింది."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"ఫేస్ అన్‌లాక్‌ను యూజర్ రద్దు చేశారు"</string>
-    <string name="face_error_lockout" msgid="7864408714994529437">"చాలా ఎక్కువ ప్రయత్నాలు చేశారు. తర్వాత మళ్లీ ప్రయత్నించండి."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout" msgid="7864408714994529437">"చాలా ఎక్కువ ప్రయత్నాలు చేశారు. తర్వాత మళ్లీ ట్రై చేయండి."</string>
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"ఎక్కువ సార్లు ట్రై చేశారు. ఫేస్ అన్‌లాక్ అందుబాటులో లేదు."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"చాలా ఎక్కువ సార్లు ప్రయత్నించారు. బదులుగా స్క్రీన్ లాక్‌ను ఎంటర్ చేయండి."</string>
-    <string name="face_error_unable_to_process" msgid="5723292697366130070">"ముఖం ధృవీకరించలేకపోయింది. మళ్లీ ప్రయత్నించండి."</string>
+    <string name="face_error_unable_to_process" msgid="5723292697366130070">"ముఖం ధృవీకరించలేకపోయింది. మళ్లీ ట్రై చేయండి."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"మీరు ఫేస్ అన్‌లాక్‌ను సెటప్ చేయలేదు"</string>
     <string name="face_error_hw_not_present" msgid="7940978724978763011">"ఫేస్ అన్‌లాక్‌ను ఈ పరికరం సపోర్ట్ చేయదు"</string>
     <string name="face_error_security_update_required" msgid="5076017208528750161">"సెన్సార్ తాత్కాలికంగా డిజేబుల్ చేయబడింది."</string>
@@ -751,8 +757,8 @@
     <string name="permdesc_register_call_provider" msgid="4201429251459068613">"కొత్త టెలికామ్ కనెక్షన్‌లను నమోదు చేయడానికి యాప్‌ను అనుమతిస్తుంది."</string>
     <string name="permlab_connection_manager" msgid="3179365584691166915">"టెలికామ్ కనెక్షన్‌లను నిర్వహించడం"</string>
     <string name="permdesc_connection_manager" msgid="1426093604238937733">"టెలికామ్ కనెక్షన్‌లను మేనేజ్ చేయడానికి యాప్‌ను అనుమతిస్తుంది."</string>
-    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"ఇన్-కాల్ స్క్రీన్‌తో పరస్పర చర్య చేయడం"</string>
-    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"వినియోగదారునికి ఇన్-కాల్ స్క్రీన్ ఎప్పుడు, ఎలా కనిపించాలనే దాన్ని నియంత్రించడానికి యాప్‌ను అనుమతిస్తుంది."</string>
+    <string name="permlab_bind_incall_service" msgid="5990625112603493016">"ఇన్-కాల్ స్క్రీన్‌తో ఇంటరాక్ట్ చేయగలదు"</string>
+    <string name="permdesc_bind_incall_service" msgid="4124917526967765162">"యూజర్‌కి ఇన్-కాల్ స్క్రీన్ ఎప్పుడు, ఎలా కనిపించాలనే దాన్ని నియంత్రించడానికి యాప్‌ను అనుమతిస్తుంది."</string>
     <string name="permlab_bind_connection_service" msgid="5409268245525024736">"టెలిఫోన్ సేవలతో పరస్పర చర్య చేయడం"</string>
     <string name="permdesc_bind_connection_service" msgid="6261796725253264518">"కాల్స్‌ చేయడం/స్వీకరించడం కోసం టెలిఫోన్ సేవలతో పరస్పర చర్య చేయడానికి యాప్‌ను అనుమతిస్తుంది."</string>
     <string name="permlab_control_incall_experience" msgid="6436863486094352987">"ఇన్-కాల్ వినియోగదారు అనుభవాన్ని అందించడం"</string>
@@ -964,11 +970,11 @@
     <string name="lockscreen_instructions_when_pattern_enabled" msgid="7982445492532123308">"అన్‌లాక్ చేయడానికి లేదా అత్యవసర కాల్ చేయడానికి మెనూ నొక్కండి."</string>
     <string name="lockscreen_instructions_when_pattern_disabled" msgid="7434061749374801753">"అన్‌లాక్ చేయడానికి మెనూ నొక్కండి."</string>
     <string name="lockscreen_pattern_instructions" msgid="3169991838169244941">"అన్‌లాక్ చేయడానికి నమూనాను గీయండి"</string>
-    <string name="lockscreen_emergency_call" msgid="7500692654885445299">"అత్యవసరం"</string>
+    <string name="lockscreen_emergency_call" msgid="7500692654885445299">"ఎమర్జెన్సీ"</string>
     <string name="lockscreen_return_to_call" msgid="3156883574692006382">"కాల్‌కు తిరిగి వెళ్లు"</string>
     <string name="lockscreen_pattern_correct" msgid="8050630103651508582">"సరైనది!"</string>
-    <string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"మళ్లీ ప్రయత్నించండి"</string>
-    <string name="lockscreen_password_wrong" msgid="8605355913868947490">"మళ్లీ ప్రయత్నించండి"</string>
+    <string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"మళ్లీ ట్రై చేయండి"</string>
+    <string name="lockscreen_password_wrong" msgid="8605355913868947490">"మళ్లీ ట్రై చేయండి"</string>
     <string name="lockscreen_storage_locked" msgid="634993789186443380">"అన్ని లక్షణాలు మరియు డేటా కోసం అన్‌లాక్ చేయండి"</string>
     <string name="faceunlock_multiple_failures" msgid="681991538434031708">"ఫేస్ అన్‌లాక్ ప్రయత్నాల గరిష్ఠ పరిమితిని మించిపోయారు"</string>
     <string name="lockscreen_missing_sim_message_short" msgid="1229301273156907613">"SIM లేదు"</string>
@@ -992,19 +998,19 @@
     <string name="lockscreen_sim_puk_locked_instructions" msgid="5307979043730860995">"వినియోగదారు గైడ్‌ను చూడండి లేదా కస్టమర్ కేర్‌ను సంప్రదించండి."</string>
     <string name="lockscreen_sim_locked_message" msgid="5911944931911850164">"SIM లాక్ చేయబడింది."</string>
     <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="8381565919325410939">"SIMను అన్‌లాక్ చేస్తోంది…"</string>
-    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6458790975898594240">"మీరు మీ అన్‌లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
-    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"మీరు మీ పాస్‌వర్డ్‌ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
-    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"మీరు మీ పిన్‌ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="3069635524964070596">"మీరు మీ అన్‌లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్‌ను ఉపయోగించి మీ టాబ్లెట్‌ను అన్‌లాక్ చేయడానికి అడగబడతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"మీరు మీ అన్‌లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్‌ను ఉపయోగించి మీ Android TV పరికరాన్ని అన్‌లాక్ చేయాల్సిందిగా మీకు తెలపబడుతుంది.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="5691623136957148335">"మీరు మీ అన్‌లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్‌ను ఉపయోగించి మీ ఫోన్‌ను అన్‌లాక్ చేయడానికి అడగబడతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6458790975898594240">"మీరు మీ అన్‌లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"మీరు మీ పాస్‌వర్డ్‌ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"మీరు మీ పిన్‌ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="3069635524964070596">"మీరు మీ అన్‌లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్‌ను ఉపయోగించి మీ టాబ్లెట్‌ను అన్‌లాక్ చేయడానికి అడగబడతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"మీరు మీ అన్‌లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్‌ను ఉపయోగించి మీ Android TV పరికరాన్ని అన్‌లాక్ చేయాల్సిందిగా మీకు తెలపబడుతుంది.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="5691623136957148335">"మీరు మీ అన్‌లాక్ నమూనాని <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్‌ను ఉపయోగించి మీ ఫోన్‌ను అన్‌లాక్ చేయడానికి అడగబడతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="7914445759242151426">"మీరు టాబ్లెట్‌ను అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ ఆటోమేటిక్‌కు రీసెట్ చేయబడుతుంది, అలాగే మొత్తం యూజర్ డేటాను కోల్పోతారు."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="4275591249631864248">"మీరు మీ Android TV పరికరాన్ని అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు విఫల ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ ఆటోమేటిక్‌కు రీసెట్ చేయబడుతుంది, అలాగే యూజర్ డేటా మొత్తాన్ని కోల్పోతారు."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="1166532464798446579">"మీరు ఫోన్‌ను అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఫోన్, ఫ్యాక్టరీ ఆటోమేటిక్‌కు రీసెట్ చేయబడుతుంది, అలాగే మొత్తం యూజర్ డేటాను కోల్పోతారు."</string>
     <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="8682445539263683414">"మీరు టాబ్లెట్‌ను అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ ఆటోమేటిక్‌కు రీసెట్ చేయబడుతుంది."</string>
     <string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="2205435033340091883">"మీరు మీ Android TV పరికరాన్ని అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు విఫల ప్రయత్నాలు చేశారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."</string>
     <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="2203704707679895487">"మీరు ఫోన్‌ను అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు తప్పుగా ప్రయత్నించారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ ఆటోమేటిక్‌కు రీసెట్ చేయబడుతుంది."</string>
-    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6807200118164539589">"<xliff:g id="NUMBER">%d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
+    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6807200118164539589">"<xliff:g id="NUMBER">%d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
     <string name="lockscreen_forgot_pattern_button_text" msgid="8362442730606839031">"నమూనాను మర్చిపోయారా?"</string>
     <string name="lockscreen_glogin_forgot_pattern" msgid="9218940117797602518">"ఖాతా అన్‌లాక్"</string>
     <string name="lockscreen_glogin_too_many_attempts" msgid="3775904917743034195">"చాలా ఎక్కువ ఆకృతి ప్రయత్నాలు చేశారు"</string>
@@ -1197,7 +1203,7 @@
     <string name="whichSendApplicationLabel" msgid="7467813004769188515">"షేర్ చేయి"</string>
     <string name="whichSendToApplication" msgid="77101541959464018">"దీన్ని ఉపయోగించి పంపండి"</string>
     <string name="whichSendToApplicationNamed" msgid="3385686512014670003">"%1$sని ఉపయోగించి పంపండి"</string>
-    <string name="whichSendToApplicationLabel" msgid="3543240188816513303">"పంపు"</string>
+    <string name="whichSendToApplicationLabel" msgid="3543240188816513303">"పంపండి"</string>
     <string name="whichHomeApplication" msgid="8276350727038396616">"హోమ్ యాప్‌ను ఎంచుకోండి"</string>
     <string name="whichHomeApplicationNamed" msgid="5855990024847433794">"%1$sని హోమ్‌గా ఉపయోగించండి"</string>
     <string name="whichHomeApplicationLabel" msgid="8907334282202933959">"చిత్రాన్ని క్యాప్చర్ చేయి"</string>
@@ -1255,7 +1261,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"యాప్‌లను ప్రారంభిస్తోంది."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"బూట్‌ను ముగిస్తోంది."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"మీరు పవర్ బటన్‌ను నొక్కారు — ఇది సాధారణంగా స్క్రీన్‌ను ఆఫ్ చేస్తుంది.\n\nమీ వేలిముద్రను సెటప్ చేస్తున్నప్పుడు తేలికగా ట్యాప్ చేయడానికి ట్రై చేయండి."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"సెటప్ ముగించడానికి, స్క్రీన్‌ను ఆఫ్ చేయి"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"సెటప్ ముగించడానికి, స్క్రీన్ ఆఫ్ చేయండి"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"ఆఫ్ చేయండి"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"మీ వేలిముద్ర వెరిఫై‌ను కొనసాగించాలా?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"మీరు పవర్ బటన్‌ను నొక్కారు — ఇది సాధారణంగా స్క్రీన్‌ను ఆఫ్ చేస్తుంది.\n\nమీ వేలిముద్రను వెరిఫై చేయడానికి తేలికగా ట్యాప్ చేయడం ట్రై చేయండి."</string>
@@ -1329,7 +1335,7 @@
     <string name="sms_short_code_confirm_message" msgid="1385416688897538724">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ఒక మెసేజ్‌ను &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;కి పంపాలనుకుంటోంది."</string>
     <string name="sms_short_code_details" msgid="2723725738333388351">"దీని వలన మీ మొబైల్ ఖాతాకు "<b>"ఛార్జీలు విధించబడవచ్చు"</b>"."</string>
     <string name="sms_premium_short_code_details" msgid="1400296309866638111"><b>"దీని వలన మీ మొబైల్ ఖాతాకు ఛార్జీలు విధించబడవచ్చు."</b></string>
-    <string name="sms_short_code_confirm_allow" msgid="920477594325526691">"పంపు"</string>
+    <string name="sms_short_code_confirm_allow" msgid="920477594325526691">"పంపండి"</string>
     <string name="sms_short_code_confirm_deny" msgid="1356917469323768230">"రద్దు చేయండి"</string>
     <string name="sms_short_code_remember_choice" msgid="1374526438647744862">"నా ఎంపికను గుర్తుంచుకో"</string>
     <string name="sms_short_code_remember_undo_instruction" msgid="2620984439143080410">"మీరు దీన్ని తర్వాత సెట్టింగ్‌లు &gt; అనువర్తనాలులో మార్చవచ్చు"</string>
@@ -1364,7 +1370,7 @@
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"USB ద్వారా MIDI ఆన్ చేయబడింది"</string>
     <string name="usb_uvc_notification_title" msgid="2030032862673400008">"పరికరం వెబ్‌క్యామ్‌గా కనెక్ట్ చేయబడింది"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"USB ఉపకరణం కనెక్ట్ చేయబడింది"</string>
-    <string name="usb_notification_message" msgid="4715163067192110676">"మరిన్ని ఎంపికల కోసం నొక్కండి."</string>
+    <string name="usb_notification_message" msgid="4715163067192110676">"మరిన్ని ఆప్షన్ల కోసం ట్యాప్ చేయండి."</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"కనెక్ట్ చేయబడిన పరికరాన్ని ఛార్జ్ చేస్తోంది. మరిన్ని ఎంపికల కోసం నొక్కండి."</string>
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"అనలాగ్ ఆడియో ఉపకరణం కనుగొనబడింది"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"జోడించిన పరికరం ఈ ఫోన్‌కు అనుకూలంగా లేదు. మరింత తెలుసుకోవడానికి నొక్కండి."</string>
@@ -1392,10 +1398,10 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"తిరస్కరిస్తున్నాను"</string>
     <string name="select_input_method" msgid="3971267998568587025">"ఇన్‌పుట్ పద్ధతిని ఎంచుకోండి"</string>
     <string name="show_ime" msgid="6406112007347443383">"దీన్ని భౌతిక కీబోర్డ్ యాక్టివ్‌గా ఉన్నప్పుడు స్క్రీన్‌పై ఉంచుతుంది"</string>
-    <string name="hardware" msgid="1800597768237606953">"వర్చువల్ కీబోర్డ్‌ను చూపు"</string>
+    <string name="hardware" msgid="3611039921284836033">"స్క్రీన్‌పై కీబోర్డ్ ఉపయోగించు"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g>‌ను కాన్ఫిగర్ చేయండి"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"ఫిజికల్ కీబోర్డ్‌లను కాన్ఫిగ‌ర్ చేయండి"</string>
-    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"భాష మరియు లేఅవుట్‌ను ఎంచుకోవడానికి నొక్కండి"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"భాషను, లేఅవుట్‌ను ఎంచుకోవడానికి ట్యాప్ చేయండి"</string>
     <string name="fast_scroll_alphabet" msgid="8854435958703888376">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="fast_scroll_numeric_alphabet" msgid="2529539945421557329">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"ఇతర యాప్‌ల ఎగువన ప్రదర్శన"</string>
@@ -1440,7 +1446,7 @@
     <string name="ext_media_move_success_title" msgid="4901763082647316767">"కంటెంట్ బదిలీ పూర్తయింది"</string>
     <string name="ext_media_move_success_message" msgid="9159542002276982979">"కంటెంట్ <xliff:g id="NAME">%s</xliff:g>కి తరలించబడింది"</string>
     <string name="ext_media_move_failure_title" msgid="3184577479181333665">"కంటెంట్‌ని తరలించడం సాధ్యం కాలేదు"</string>
-    <string name="ext_media_move_failure_message" msgid="4197306718121869335">"కంటెంట్‌ని తరలించడానికి మళ్లీ ప్రయత్నించండి"</string>
+    <string name="ext_media_move_failure_message" msgid="4197306718121869335">"కంటెంట్‌ని తరలించడానికి మళ్లీ ట్రై చేయండి"</string>
     <string name="ext_media_status_removed" msgid="241223931135751691">"తీసివేయబడింది"</string>
     <string name="ext_media_status_unmounted" msgid="8145812017295835941">"తొలగించబడింది"</string>
     <string name="ext_media_status_checking" msgid="159013362442090347">"చెక్ చేస్తోంది..."</string>
@@ -1469,7 +1475,7 @@
     <string name="gadget_host_error_inflating" msgid="2449961590495198720">"విడ్జెట్‌ను జోడించడం సాధ్యపడలేదు."</string>
     <string name="ime_action_go" msgid="5536744546326495436">"వెళ్లు"</string>
     <string name="ime_action_search" msgid="4501435960587287668">"సెర్చ్"</string>
-    <string name="ime_action_send" msgid="8456843745664334138">"పంపు"</string>
+    <string name="ime_action_send" msgid="8456843745664334138">"పంపండి"</string>
     <string name="ime_action_next" msgid="4169702997635728543">"తర్వాత"</string>
     <string name="ime_action_done" msgid="6299921014822891569">"పూర్తయింది"</string>
     <string name="ime_action_previous" msgid="6548799326860401611">"మునుపటి"</string>
@@ -1666,25 +1672,23 @@
     <string name="kg_login_invalid_input" msgid="8292367491901220210">"చెల్లని వినియోగదారు పేరు లేదా పాస్‌వర్డ్."</string>
     <string name="kg_login_account_recovery_hint" msgid="4892466171043541248">"మీ వినియోగదారు పేరు లేదా పాస్‌వర్డ్‌ను మర్చిపోయారా?\n"<b>"google.com/accounts/recovery"</b>"ని సందర్శించండి."</string>
     <string name="kg_login_checking_password" msgid="4676010303243317253">"ఖాతాను చెక్ చేస్తోంది…"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="23741434207544038">"మీరు మీ పిన్‌ను <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_password_attempts_dialog_message" msgid="3328686432962224215">"మీరు మీ పాస్‌వర్డ్‌ను <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="7357404233979139075">"మీరు మీ అన్‌లాక్ నమూనాను <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_pin_attempts_dialog_message" msgid="23741434207544038">"మీరు మీ పిన్‌ను <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_password_attempts_dialog_message" msgid="3328686432962224215">"మీరు మీ పాస్‌వర్డ్‌ను <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="7357404233979139075">"మీరు మీ అన్‌లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="3479940221343361587">"మీరు టాబ్లెట్‌ను అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ ఆటోమేటిక్‌కు రీసెట్ చేయబడుతుంది, అలాగే మొత్తం యూజర్ డేటాను కోల్పోతారు."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="9064457748587850217">"మీరు మీ Android TV పరికరాన్ని అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు విఫల ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ ఆటోమేటిక్‌కు రీసెట్ చేయబడుతుంది, అలాగే యూజర్, డేటా మొత్తాన్ని కోల్పోతారు."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="5955398963754432548">"మీరు ఫోన్‌ను అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఫోన్ ఫ్యాక్టరీ ఆటోమేటిక్‌కు రీసెట్ చేయబడుతుంది, అలాగే మొత్తం యూజర్ డేటాను కోల్పోతారు."</string>
     <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2299099385175083308">"మీరు టాబ్లెట్‌ను అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ ఆటోమేటిక్‌కు రీసెట్ చేయబడుతుంది."</string>
     <string name="kg_failed_attempts_now_wiping" product="tv" msgid="5045460916106267585">"మీరు మీ Android TV పరికరాన్ని అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు విఫల ప్రయత్నాలు చేశారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."</string>
     <string name="kg_failed_attempts_now_wiping" product="default" msgid="5043730590446071189">"మీరు ఫోన్‌ను అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> చెల్లని ప్రయత్నాలు చేశారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ ఆటోమేటిక్‌కు రీసెట్ చేయబడుతుంది."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="7086799295109717623">"మీరు మీ అన్‌లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఈమెయిల్‌ ఖాతాను ఉపయోగించి మీ టాబ్లెట్‌ను అన్‌లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4670840383567106114">"మీరు మీ అన్‌లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత మీ Android TV పరికరాన్ని ఈమెయిల్‌ ఖాతా ద్వారా అన్‌లాక్ చేయాల్సిందిగా మిమ్మల్ని కోరడం జరుగుతుంది.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="5270861875006378092">"మీరు మీ అన్‌లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఈమెయిల్‌ ఖాతాను ఉపయోగించి మీ ఫోన్‌ను అన్‌లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="7086799295109717623">"మీరు మీ అన్‌లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఈమెయిల్‌ ఖాతాను ఉపయోగించి మీ టాబ్లెట్‌ను అన్‌లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4670840383567106114">"మీరు మీ అన్‌లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత మీ Android TV పరికరాన్ని ఈమెయిల్‌ ఖాతా ద్వారా అన్‌లాక్ చేయాల్సిందిగా మిమ్మల్ని కోరడం జరుగుతుంది.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="5270861875006378092">"మీరు మీ అన్‌లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఈమెయిల్‌ ఖాతాను ఉపయోగించి మీ ఫోన్‌ను అన్‌లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"తీసివేయండి"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"వాల్యూమ్‌ను సిఫార్సు చేయబడిన స్థాయి కంటే ఎక్కువగా పెంచాలా?\n\nసుదీర్ఘ వ్యవధుల పాటు అధిక వాల్యూమ్‌లో వినడం వలన మీ వినికిడి శక్తి దెబ్బ తినవచ్చు."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"హెచ్చరిక,\nమీరు ఒక వారంలో హెడ్‌ఫోన్స్ ద్వారా సురక్షితంగా వినగలిగే భారీ సౌండ్ సిగ్నల్స్ పరిమాణాన్ని మించిపోయారు.\n\nఈ పరిమితిని మించిపోవడం వల్ల మీ వినికిడి శాశ్వతంగా దెబ్బతింటుంది."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"హెచ్చరిక,\nమీరు ఒక వారంలో హెడ్‌ఫోన్స్ ద్వారా సురక్షితంగా వినగలిగే భారీ సౌండ్ సిగ్నల్స్ కంటే 5 రెట్లు మించిపోయారు.\n\nమీ వినికిడిని రక్షించడానికి వాల్యూమ్ తగ్గించబడింది."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"మీరు ప్రస్తుతం వింటున్న వాల్యూమ్‌లో మీడియాను వినడం కొనసాగిస్తే, మీ వినికిడి దెబ్బతినవచ్చు.\n\nఎక్కువ సమయం పాటు ఈ స్థాయిలో మీడియాను ప్లే చేయడం వల్ల మీ వినికిడి దెబ్బతినవచ్చు."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"హెచ్చరిక,\nమీరు ప్రస్తుతం బిగ్గరగా వినిపించే కంటెంట్‌ను అసురక్షిత వాల్యూమ్ స్థాయిలో వింటున్నారు.\n\nఇంత బిగ్గరగా వినడం కొనసాగించడం వల్ల మీ వినికిడి శాశ్వతంగా దెబ్బతింటుంది."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"అధిక వాల్యూమ్‌లో వినడం కొనసాగించాలనుకుంటున్నారా?\n\nహెడ్‌ఫోన్ వాల్యూమ్, సిఫార్సు చేసిన సమయం కంటే ఎక్కువసేపు అధిక వాల్యూమ్‌లో ఉంది, ఇది మీ వినికిడిని దెబ్బతీయవచ్చు"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"అధిక సౌండ్‌ను గుర్తించడం జరిగింది\n\nహెడ్‌ఫోన్ వాల్యూమ్, సిఫార్సు చేసిన సమయం కంటే ఎక్కువసేపు అధిక వాల్యూమ్‌లో ఉంది, ఇది మీ వినికిడిని దెబ్బతీయవచ్చు"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"యాక్సెస్ సామర్థ్యం షార్ట్‌కట్‌ను ఉపయోగించాలా?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"షార్ట్‌కట్ ఆన్ చేసి ఉన్నప్పుడు, రెండు వాల్యూమ్ బటన్‌లను 3 సెకన్ల పాటు నొక్కి ఉంచితే యాక్సెస్ సౌలభ్య ఫీచర్ ప్రారంభం అవుతుంది."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"యాక్సెస్ సౌలభ్య ఫీచర్‌ల కోసం షార్ట్‌కట్‌ను ఆన్ చేయాలా?"</string>
@@ -1697,13 +1701,13 @@
     <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ఆన్"</string>
     <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"ఆఫ్"</string>
     <string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g>కి మీ పరికరంపై పూర్తి కంట్రోల్‌ను ఇవ్వాలనుకుంటున్నారా?"</string>
-    <string name="accessibility_service_warning_description" msgid="291674995220940133">"అవసరమైన యాక్సెసిబిలిటీ కోసం యాప్‌లకు పూర్తి కంట్రోల్ ఇవ్వడం తగిన పనే అయినా, అన్ని యాప్‌లకు అలా ఇవ్వడం సరికాదు."</string>
+    <string name="accessibility_service_warning_description" msgid="291674995220940133">"యాక్సెసిబిలిటీ అవసరాలు ఉన్నప్పుడు మీకు సహాయం చేయడానికి యాప్‌లకు ఫుల్‌ కంట్రోల్‌ ఇవ్వడం సమంజసమే. అయితే అన్ని యాప్‌లకు అలా కంట్రోల్ ఇవ్వడం సరికాదు."</string>
     <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"స్క్రీన్‌ను చూసి, కంట్రోల్ చేయగలగడం"</string>
-    <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"స్క్రీన్‌పై ఉండే కంటెంట్‌ మొత్తాన్ని చదవగలుగుతుంది మరియు ఇతర యాప్‌లలో కూడా ఈ కంటెంట్‌ను ప్రదర్శిస్తుంది."</string>
+    <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"స్క్రీన్‌పై ఉండే కంటెంట్‌ మొత్తాన్ని చదవగలుగుతుంది. అంతే కాక, ఇతర యాప్‌లపై కంటెంట్‌ను డిస్‌ప్లే చేస్తుంది."</string>
     <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"చర్యలను చూసి, అమలు చేయగలగడం"</string>
     <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"మీరు ఒక యాప్‌‌తో చేసే ఇంటరాక్షన్‌లను లేదా హార్డ్‌వేర్ సెన్సార్‌ను ట్రాక్ చేస్తూ మీ త‌ర‌ఫున యాప్‌లతో ఇంటరాక్ట్ చేయగలదు."</string>
     <string name="accessibility_dialog_button_allow" msgid="2092558122987144530">"అనుమతించండి"</string>
-    <string name="accessibility_dialog_button_deny" msgid="4129575637812472671">"నిరాకరించు"</string>
+    <string name="accessibility_dialog_button_deny" msgid="4129575637812472671">"వద్దు"</string>
     <string name="accessibility_select_shortcut_menu_title" msgid="6002726538854613272">"ఫీచర్‌ని ఉపయోగించడం ప్రారంభించడానికి, దాన్ని ట్యాప్ చేయండి:"</string>
     <string name="accessibility_edit_shortcut_menu_button_title" msgid="239446795930436325">"యాక్సెసిబిలిటీ బటన్‌తో ఉపయోగించడానికి ఫీచర్లను ఎంచుకోండి"</string>
     <string name="accessibility_edit_shortcut_menu_volume_title" msgid="1077294237378645981">"వాల్యూమ్ కీ షార్ట్‌కట్‌తో ఉపయోగించడానికి ఫీచర్లను ఎంచుకోండి"</string>
@@ -1716,7 +1720,7 @@
     <string name="color_correction_feature_name" msgid="7975133554160979214">"కలర్ కరెక్షన్"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"వన్-హ్యాండెడ్ మోడ్"</string>
     <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"ఎక్స్‌ట్రా డిమ్"</string>
-    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"వినికిడి పరికరం"</string>
+    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"వినికిడి పరికరాలు"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"వాల్యూమ్ కీలు నొక్కి ఉంచబడ్డాయి. <xliff:g id="SERVICE_NAME">%1$s</xliff:g> ఆన్ చేయబడింది"</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"వాల్యూమ్ కీలు నొక్కి ఉంచబడ్డాయి. <xliff:g id="SERVICE_NAME">%1$s</xliff:g> ఆఫ్ చేయబడింది"</string>
     <string name="accessibility_shortcut_spoken_feedback" msgid="3760999147597564314">"వాల్యూమ్ కీలను రిలీజ్ చేయండి. <xliff:g id="SERVICE_NAME">%1$s</xliff:g>‌ను ఆన్ చేయడానికి, రెండు వాల్యూమ్ కీలను మళ్లీ 3 సెకన్ల పాటు నొక్కి పట్టుకోండి."</string>
@@ -1844,14 +1848,14 @@
     <string name="restr_pin_enter_new_pin" msgid="3267614461844565431">"కొత్త పిన్‌"</string>
     <string name="restr_pin_confirm_pin" msgid="7143161971614944989">"కొత్త పిన్‌ను నిర్ధారించండి"</string>
     <string name="restr_pin_create_pin" msgid="917067613896366033">"నియంత్రణలను ఎడిట్ చేయడానికి పిన్‌ను రూపొందించండి"</string>
-    <string name="restr_pin_error_doesnt_match" msgid="7063392698489280556">"పిన్‌లు సరిపోలలేదు. మళ్లీ ప్రయత్నించండి."</string>
+    <string name="restr_pin_error_doesnt_match" msgid="7063392698489280556">"పిన్‌లు సరిపోలలేదు. మళ్లీ ట్రై చేయండి."</string>
     <string name="restr_pin_error_too_short" msgid="1547007808237941065">"పిన్‌ చాలా చిన్నదిగా ఉంది. తప్పనిసరిగా కనీసం 4 అంకెలు ఉండాలి."</string>
-    <string name="restr_pin_try_later" msgid="5897719962541636727">"తర్వాత మళ్లీ ప్రయత్నించండి"</string>
+    <string name="restr_pin_try_later" msgid="5897719962541636727">"తర్వాత మళ్లీ ట్రై చేయండి"</string>
     <string name="immersive_cling_title" msgid="2307034298721541791">"ఫుల్-స్క్రీన్‌లో వీక్షిస్తున్నారు"</string>
     <string name="immersive_cling_description" msgid="7092737175345204832">"నిష్క్రమించడానికి, పై నుండి క్రిందికి స్వైప్ చేయండి."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"అర్థమైంది"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"మెరుగైన వీక్షణ కోసం తిప్పండి"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"మెరుగైన వీక్షణ కోసం స్ప్లిట్ స్క్రీన్ నుండి నిష్క్రమించండి"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"మెరుగైన వీక్షణ కోసం <xliff:g id="NAME">%s</xliff:g>‌ను ఫుల్ స్క్రీన్‌లో తెరవండి"</string>
     <string name="done_label" msgid="7283767013231718521">"పూర్తయింది"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"గంటల వృత్తాకార స్లయిడర్"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"నిమిషాల వృత్తాకార స్లయిడర్"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"యాప్ అందుబాటులో లేదు"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ప్రస్తుతం అందుబాటులో లేదు."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> అందుబాటులో లేదు"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"అనుమతి అవసరం"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"అనుమతి రిక్వెస్ట్ బ్లాక్ చేయబడింది"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"ఈ యాప్ అదనపు అనుమతి కోసం రిక్వెస్ట్ చేస్తోంది, కానీ స్ట్రీమింగ్ సెషన్‌లో అనుమతులను మంజూరు చేయడం సాధ్యం కాదు. ముందుగా మీ Android TV పరికరంలో అనుమతిని మంజూరు చేయండి."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"ఈ యాప్ అదనపు అనుమతి కోసం రిక్వెస్ట్ చేస్తోంది, కానీ స్ట్రీమింగ్ సెషన్‌లో అనుమతులను మంజూరు చేయడం సాధ్యం కాదు. ముందుగా మీ టాబ్లెట్‌లో అనుమతిని మంజూరు చేయండి."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"ఈ యాప్ అదనపు అనుమతి కోసం రిక్వెస్ట్ చేస్తోంది, కానీ స్ట్రీమింగ్ సెషన్‌లో అనుమతులను మంజూరు చేయడం సాధ్యం కాదు. ముందుగా మీ ఫోన్‌లో అనుమతిని మంజూరు చేయండి."</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"ఈ యాప్ పాత Android వెర్షన్ కోసం రూపొందించబడింది. ఇది సరిగ్గా పని చేయకపోవచ్చు, ఇంకా దీనిలో తాజా సెక్యూరిటీ, గోప్యతా రక్షణలు ఉండకపోవచ్చు. అప్‌డేట్ కోసం చెక్ చేయండి, లేదా యాప్ డెవలపర్‌ను సంప్రదించండి."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"అప్‌డేట్ కోసం చెక్ చేయండి"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"ఈ యాప్ Android ఇటీవలి వెర్షన్‌కు అనుకూలంగా లేదు. అప్‌డేట్ కోసం చెక్ చేయండి లేదా యాప్ డెవలపర్‌ను కాంటాక్ట్ చేయండి."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"మీకు కొత్త మెసేజ్‌లు ఉన్నాయి"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"చూడటానికి SMS యాప్‌ను తెరవండి"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"కొంత ఫంక్షనాలిటీ పరిమితం కావచ్చు"</string>
@@ -1983,7 +1991,7 @@
     <string name="profile_encrypted_message" msgid="1128512616293157802">"కార్యాలయ ప్రొఫైల్ అన్‌లాక్ చేయుటకు నొక్కండి"</string>
     <string name="usb_mtp_launch_notification_title" msgid="774319638256707227">"<xliff:g id="PRODUCT_NAME">%1$s</xliff:g>కి కనెక్ట్ చేయబడింది"</string>
     <string name="usb_mtp_launch_notification_description" msgid="6942535713629852684">"ఫైళ్లను చూడటానికి నొక్కండి"</string>
-    <string name="pin_target" msgid="8036028973110156895">"పిన్ చేయి"</string>
+    <string name="pin_target" msgid="8036028973110156895">"పిన్ చేయండి"</string>
     <string name="pin_specific_target" msgid="7824671240625957415">"<xliff:g id="LABEL">%1$s</xliff:g>ను పిన్ చేయండి"</string>
     <string name="unpin_target" msgid="3963318576590204447">"అన్‌‌పిన్‌ ‌చేయి"</string>
     <string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g>ను అన్‌పిన్ చేయి"</string>
@@ -2151,7 +2159,7 @@
     <string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"గ్రూప్ సంభాషణ"</string>
     <string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string>
     <string name="resolver_personal_tab" msgid="2051260504014442073">"వ్యక్తిగతం"</string>
-    <string name="resolver_work_tab" msgid="2690019516263167035">"ఆఫీస్"</string>
+    <string name="resolver_work_tab" msgid="2690019516263167035">"వర్క్ ప్లేస్"</string>
     <string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"వ్యక్తిగత వీక్షణ"</string>
     <string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"పని వీక్షణ"</string>
     <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"మీ IT అడ్మిన్ ద్వారా బ్లాక్ చేయబడింది"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ఈ కంటెంట్ వర్క్ యాప్‌తో తెరవడం సాధ్యం కాదు"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ఈ కంటెంట్ వ్యక్తిగత యాప్‌తో షేర్ చేయడం సాధ్యం కాదు"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ఈ కంటెంట్ వ్యక్తిగత యాప్‌తో తెరవడం సాధ్యం కాదు"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"వర్క్ ప్రొఫైల్ పాజ్ చేయబడింది"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"ఆన్ చేయడానికి ట్యాప్ చేయండి"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"వర్క్ యాప్‌లు పాజ్ అయ్యాయి"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"అన్‌పాజ్ చేయండి"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"వర్క్ యాప్‌లు లేవు"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"వ్యక్తిగత యాప్‌లు లేవు"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"<xliff:g id="APP">%s</xliff:g> వర్క్ యాప్‌ను తెరవాలా?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"వ్యక్తిగత <xliff:g id="APP">%s</xliff:g> యాప్‌లో తెరవాలా?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"వర్క్ <xliff:g id="APP">%s</xliff:g> యాప్‌లో తెరవాలా?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"వర్క్ యాప్ నుండి కాల్ చేయాలా?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"వర్క్ యాప్‌నకు మారాలా?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"మీ సంస్థ, వర్క్ యాప్‌ల నుండి మాత్రమే కాల్స్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"మీ సంస్థ, వర్క్ యాప్‌ల నుండి మాత్రమే మెసేజ్‌లను పంపడానికి మిమ్మల్ని అనుమతిస్తుంది"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"వ్యక్తిగత బ్రౌజర్‌ను ఉపయోగించండి"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"వర్క్ బ్రౌజర్‌ను ఉపయోగించండి"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"కాల్ చేయండి"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"మారండి"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM నెట్‌వర్క్ అన్‌లాక్ పిన్‌"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM నెట్‌వర్క్ సబ్‌సెట్ అన్‌లాక్ పిన్"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM కార్పొరేట్ అన్‌లాక్ పిన్"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"మీ <xliff:g id="DEVICE">%1$s</xliff:g> నుండి ఫోన్ కెమెరాను యాక్సెస్ చేయడం సాధ్యపడదు"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"మీ <xliff:g id="DEVICE">%1$s</xliff:g> నుండి టాబ్లెట్ కెమెరాను యాక్సెస్ చేయడం సాధ్యపడదు"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"స్ట్రీమింగ్ చేస్తున్నప్పుడు దీన్ని యాక్సెస్ చేయడం సాధ్యపడదు. బదులుగా మీ ఫోన్‌లో ట్రై చేయండి."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"స్ట్రీమింగ్ చేస్తున్నప్పుడు పిక్చర్-ఇన్-పిక్చర్ చూడలేరు"</string>
     <string name="system_locale_title" msgid="711882686834677268">"సిస్టమ్ ఆటోమేటిక్ సెట్టింగ్"</string>
     <string name="default_card_name" msgid="9198284935962911468">"కార్డ్ <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"వాచ్‌లను మేనేజ్ చేయడానికి సహాయక వాచ్ ప్రొఫైల్ అనుమతి"</string>
@@ -2317,13 +2331,13 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"బ్యాక్‌గ్రౌండ్ నుండి ఫోర్‌గ్రౌండ్ సర్వీస్‌లను ప్రారంభించడానికి సహాయక యాప్‌ను అనుమతిస్తుంది."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"మైక్రోఫోన్ అందుబాటులో ఉంది"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"మైక్రోఫోన్ బ్లాక్ చేయబడింది"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"డ్యూయల్ స్క్రీన్"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"డ్యూయల్ స్క్రీన్ ఆన్‌లో ఉంది"</string>
-    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"కంటెంట్‌ను చూపడం కోసం <xliff:g id="APP_NAME">%1$s</xliff:g> రెండు డిస్‌ప్లేలనూ ఉపయోగిస్తుంది"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen ఆన్‌లో ఉంది"</string>
+    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"కంటెంట్‌ను చూపడం కోసం <xliff:g id="APP_NAME">%1$s</xliff:g> రెండు డిస్‌ప్లేలనూ ఉపయోగిస్తోంది"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"పరికరం చాలా వేడిగా ఉంది"</string>
-    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"మీ ఫోన్ చాలా వేడిగా అవుతున్నందున, డ్యూయల్ స్క్రీన్ అందుబాటులో లేదు"</string>
-    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"డ్యూయల్ స్క్రీన్ అందుబాటులో లేదు"</string>
-    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"బ్యాటరీ సేవర్ ఆన్‌లో ఉన్నందున డ్యూయల్ స్క్రీన్ అందుబాటులో లేదు. మీరు దీన్ని సెట్టింగ్‌లలో ఆఫ్ చేయవచ్చు."</string>
+    <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"మీ ఫోన్ చాలా వేడిగా అవుతున్నందున, Dual Screen అందుబాటులో లేదు"</string>
+    <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Dual Screen అందుబాటులో లేదు"</string>
+    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"బ్యాటరీ సేవర్ ఆన్‌లో ఉన్నందున Dual Screen అందుబాటులో లేదు. మీరు దీన్ని సెట్టింగ్‌లలో ఆఫ్ చేయవచ్చు."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"సెట్టింగ్‌లకు వెళ్లండి"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"ఆఫ్ చేయండి"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> కాన్ఫిగర్ చేయబడింది"</string>
diff --git a/core/res/res/values-television/config.xml b/core/res/res/values-television/config.xml
index eaadc20..c3db87b 100644
--- a/core/res/res/values-television/config.xml
+++ b/core/res/res/values-television/config.xml
@@ -45,29 +45,29 @@
     <!-- Component name of the activity used to inform a user about a sensory being blocked because
      of privacy settings. -->
     <string name="config_sensorUseStartedActivity" translatable="false">
-        com.android.systemui/com.android.systemui.sensorprivacy.television.TvUnblockSensorActivity
+        com.android.systemui/com.android.systemui.tv.sensorprivacy.TvUnblockSensorActivity
     </string>
 
     <!-- Component name of the activity used to inform a user about a sensory being blocked because
      of hardware privacy switches. -->
     <string name="config_sensorUseStartedActivity_hwToggle" translatable="false">
-        com.android.systemui/com.android.systemui.sensorprivacy.television.TvUnblockSensorActivity
+        com.android.systemui/com.android.systemui.tv.sensorprivacy.TvUnblockSensorActivity
     </string>
 
     <!-- Component name of the activity used to inform a user about a sensor privacy update from
      SW/HW privacy switches. -->
     <string name="config_sensorStateChangedActivity" translatable="false">
-        com.android.systemui/com.android.systemui.sensorprivacy.television.TvSensorPrivacyChangedActivity
+        com.android.systemui/com.android.systemui.tv.sensorprivacy.TvSensorPrivacyChangedActivity
     </string>
 
     <!-- Component name of the activity that shows the request for access to a usb device. -->
     <string name="config_usbPermissionActivity" translatable="false">
-        com.android.systemui/com.android.systemui.usb.tv.TvUsbPermissionActivity
+        com.android.systemui/com.android.systemui.tv.usb.TvUsbPermissionActivity
     </string>
 
     <!-- Component name of the activity that confirms the activity to start when a usb device is
      plugged in. -->
     <string name="config_usbConfirmActivity" translatable="false">
-        com.android.systemui/com.android.systemui.usb.tv.TvUsbConfirmActivity
+        com.android.systemui/com.android.systemui.tv.usb.TvUsbConfirmActivity
     </string>
 </resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index d55b63f..1f65086 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"ระบบ Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"สลับไปใช้โปรไฟล์ส่วนตัว"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"สลับไปใช้โปรไฟล์งาน"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"เปลี่ยนไปใช้โปรไฟล์ส่วนตัวใน <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"เปลี่ยนไปใช้โปรไฟล์งานใน <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"รายชื่อติดต่อ"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"เข้าถึงรายชื่อติดต่อ"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"ตำแหน่ง"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"อนุญาตให้แอปพลิเคชันควบคุมการสั่นเตือน"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"อนุญาตให้แอปเข้าถึงสถานะการสั่น"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"โทรติดต่อหมายเลขโทรศัพท์โดยตรง"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"อนุญาตให้แอปพลิเคชันโทรเข้าโทรศัพท์โดยไม่ต้องให้คุณจัดการ ซึ่งอาจทำให้มีการเรียกเก็บเงินหรือการโทรที่ไม่คาดคิด โปรดทราบว่าการทำงานนี้ไม่ได้อนุญาตให้แอปพลิเคชันโทรไปหมายเลขฉุกเฉิน แอปพลิเคชันที่เป็นอันตรายอาจทำให้คุณต้องเสียค่าบริการด้วยการโทรโดยไม่ขอการยืนยันจากคุณ"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"อนุญาตให้แอปโทรหาหมายเลขโทรศัพท์โดยที่ไม่ต้องให้คุณจัดการ ซึ่งอาจทำให้มีการเรียกเก็บเงินหรือการโทรที่ไม่คาดคิด โปรดทราบว่าการตั้งค่านี้ไม่ได้อนุญาตให้แอปโทรหาหมายเลขฉุกเฉิน แอปที่เป็นอันตรายอาจทำให้คุณเสียค่าใช้จ่ายด้วยการโทรโดยไม่ขอการยืนยันจากคุณ หรือโทรหารหัสของผู้ให้บริการซึ่งจะมีการโอนสายเรียกเข้าไปยังหมายเลขอื่นโดยอัตโนมัติ"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"เข้าถึงบริการโทร IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"อนุญาตให้แอปใช้บริการ IMS เพื่อโทรออกโดยคุณไม่ต้องดำเนินการใดๆ เลย"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"อ่านสถานะและข้อมูลระบุตัวตนของโทรศัพท์"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"อนุญาตให้แอปรับข้อมูลบริการชำระเงิน NFC ที่ต้องการ เช่น รหัสแอป (AID) ที่ลงทะเบียนและปลายทางของเส้นทาง"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"ควบคุม Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"อนุญาตให้แอปพลิเคชันสื่อสารกับแท็ก Near Field Communication (NFC) การ์ด และโปรแกรมอ่าน"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"เหตุการณ์เกี่ยวกับธุรกรรมในองค์ประกอบความปลอดภัย"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"อนุญาตให้แอปรับข้อมูลเกี่ยวกับธุรกรรมที่เกิดขึ้นในองค์ประกอบความปลอดภัย"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"ปิดใช้งานการล็อกหน้าจอของคุณ"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"อนุญาตให้แอปพลิเคชันปิดใช้งานการล็อกปุ่มกดและการรักษาความปลอดภัยด้วยรหัสผ่านใดๆ ที่เกี่ยวข้อง ตัวอย่างเช่น โทรศัพท์ปิดใช้งานการล็อกปุ่มกดเมื่อรับสายเรียกเข้า จากนั้นจึงเปิดใช้งานการล็อกปุ่มกดใหม่หลังจากวางสาย"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"ขอความซับซ้อนของการล็อกหน้าจอ"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ใช้ข้อมูลไบโอเมตริกหรือการล็อกหน้าจอ"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"ยืนยันว่าเป็นตัวคุณ"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"ใช้ข้อมูลไบโอเมตริกเพื่อดำเนินการต่อ"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"ใช้ลายนิ้วมือของคุณเพื่อดำเนินการต่อ"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"ใช้ใบหน้าของคุณเพื่อดำเนินการต่อ"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"ใช้ข้อมูลไบโอเมตริกหรือการล็อกหน้าจอเพื่อดำเนินการต่อ"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"ฮาร์ดแวร์ไบโอเมตริกไม่พร้อมใช้งาน"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"ยกเลิกการตรวจสอบสิทธิ์แล้ว"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"ไม่รู้จัก"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"ไม่รู้จักใบหน้า"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"ยกเลิกการตรวจสอบสิทธิ์แล้ว"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"ไม่ได้ตั้ง PIN, รูปแบบ หรือรหัสผ่าน"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"การตรวจสอบข้อผิดพลาด"</string>
@@ -654,7 +661,7 @@
     <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_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>
     <string name="fingerprint_dialog_default_subtitle" msgid="3879832845486835905">"ใช้ลายนิ้วมือของคุณเพื่อดำเนินการต่อ"</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ตรวจพบหน้ากาก ต้องมองเห็นใบหน้าของคุณทั้งหมด"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"ยืนยันใบหน้าไม่ได้ ฮาร์ดแวร์ไม่พร้อมใช้งาน"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"ยกเลิกการดำเนินการกับใบหน้าแล้ว"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"ผู้ใช้ยกเลิกการใช้การปลดล็อกด้วยใบหน้า"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"ดำเนินการหลายครั้งเกินไป ลองอีกครั้งในภายหลัง"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"ลองหลายครั้งเกินไป การปลดล็อกด้วยใบหน้าไม่พร้อมใช้งาน"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"ลองหลายครั้งเกินไป ใช้การล็อกหน้าจอแทน"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"ยืนยันใบหน้าไม่ได้ ลองอีกครั้ง"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"คุณยังไม่ได้ตั้งค่าการปลดล็อกด้วยใบหน้า"</string>
@@ -1283,13 +1289,13 @@
     <string name="volume_call" msgid="7625321655265747433">"ระดับเสียงขณะโทร"</string>
     <string name="volume_bluetooth_call" msgid="2930204618610115061">"ระดับเสียงบลูทูธขณะโทร"</string>
     <string name="volume_alarm" msgid="4486241060751798448">"ระดับเสียงปลุก"</string>
-    <string name="volume_notification" msgid="6864412249031660057">"ระดับเสียงของการแจ้งเตือน"</string>
+    <string name="volume_notification" msgid="6864412249031660057">"ระดับเสียงการแจ้งเตือน"</string>
     <string name="volume_unknown" msgid="4041914008166576293">"ระดับเสียง"</string>
     <string name="volume_icon_description_bluetooth" msgid="7540388479345558400">"ระดับบลูทูธ"</string>
     <string name="volume_icon_description_ringer" msgid="2187800636867423459">"ระดับเสียงเรียกเข้า"</string>
     <string name="volume_icon_description_incall" msgid="4491255105381227919">"ระดับเสียงการโทร"</string>
     <string name="volume_icon_description_media" msgid="4997633254078171233">"ระดับเสียงของสื่อ"</string>
-    <string name="volume_icon_description_notification" msgid="579091344110747279">"ระดับเสียงของการแจ้งเตือน"</string>
+    <string name="volume_icon_description_notification" msgid="579091344110747279">"ระดับเสียงการแจ้งเตือน"</string>
     <string name="ringtone_default" msgid="9118299121288174597">"เสียงเรียกเข้าเริ่มต้น"</string>
     <string name="ringtone_default_with_actual" msgid="2709686194556159773">"ค่าเริ่มต้น (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
     <string name="ringtone_silent" msgid="397111123930141876">"ไม่มี"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ปฏิเสธ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"เลือกวิธีการป้อนข้อมูล"</string>
     <string name="show_ime" msgid="6406112007347443383">"เปิดทิ้งไว้บนหน้าจอในระหว่างใช้งานแป้นพิมพ์จริง"</string>
-    <string name="hardware" msgid="1800597768237606953">"แสดงแป้นพิมพ์เสมือน"</string>
+    <string name="hardware" msgid="3611039921284836033">"ใช้แป้นพิมพ์บนหน้าจอ"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"กำหนดค่า <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"กำหนดค่าแป้นพิมพ์จริง"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"แตะเพื่อเลือกภาษาและรูปแบบ"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"ลบ"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"นี่เป็นการเพิ่มระดับเสียงเกินระดับที่แนะนำ\n\nการฟังเสียงดังเป็นเวลานานอาจทำให้การได้ยินของคุณบกพร่องได้"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"คำเตือน\nคุณฟังสัญญาณเสียงดังเกินระดับที่ปลอดภัยเมื่อฟังผ่านหูฟังสำหรับ 1 สัปดาห์แล้ว\n\nการฟังที่เกินขีดจำกัดนี้จะทำให้การได้ยินของคุณบกพร่องอย่างถาวรได้"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"คำเตือน\nคุณฟังสัญญาณเสียงดังเกินระดับที่ปลอดภัยเมื่อฟังผ่านหูฟังสำหรับ 1 สัปดาห์ไป 5 เท่าแล้ว\n\nระบบได้ลดระดับเสียงลงเพื่อปกป้องการได้ยินของคุณ"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"ระดับที่คุณฟังสื่ออาจทำให้การได้ยินบกพร่องเมื่อฟังไปในระยะยาว\n\nการเล่นสื่อในระดับนี้ต่อไปเป็นเวลานานๆ อาจทำให้การได้ยินของคุณบกพร่องได้"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"คำเตือน\nขณะนี้คุณฟังเนื้อหาเสียงดังซึ่งเล่นในระดับที่ไม่ปลอดภัย\n\nการฟังเสียงดังระดับนี้ต่อไปจะทำให้การได้ยินของคุณบกพร่องอย่างถาวรได้"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"ต้องการฟังเสียงดังต่อไปไหม\n\nเสียงของหูฟังอยู่ในระดับที่ดังเป็นระยะเวลานานกว่าที่แนะนำ ซึ่งอาจทำให้เกิดความเสียหายต่อระบบการได้ยินของคุณ"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"การตรวจจับเสียงดัง\n\nเสียงของหูฟังอยู่ในระดับที่ดังกว่าที่แนะนำ ซึ่งอาจทำให้เกิดความเสียหายต่อระบบการได้ยินของคุณ"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ใช้ทางลัดการช่วยเหลือพิเศษไหม"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"เมื่อทางลัดเปิดอยู่ การกดปุ่มปรับระดับเสียงทั้ง 2 ปุ่มนาน 3 วินาทีจะเริ่มฟีเจอร์การช่วยเหลือพิเศษ"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"เปิดใช้ทางลัดสำหรับฟีเจอร์การช่วยเหลือพิเศษใช่ไหม"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"หากต้องการออก ให้เลื่อนลงจากด้านบน"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"รับทราบ"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"หมุนเพื่อรับมุมมองที่ดียิ่งขึ้น"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"ออกจากโหมดแยกหน้าจอเพื่อรับมุมมองที่ดียิ่งขึ้น"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"เปิด <xliff:g id="NAME">%s</xliff:g> ในโหมดเต็มหน้าจอเพื่อรับมุมมองที่ดียิ่งขึ้น"</string>
     <string name="done_label" msgid="7283767013231718521">"เสร็จสิ้น"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"ตัวเลื่อนหมุนระบุชั่วโมง"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"ตัวเลื่อนหมุนระบุนาที"</string>
@@ -1938,7 +1942,7 @@
     <string name="user_creation_adding" msgid="7305185499667958364">"อนุญาตให้ <xliff:g id="APP">%1$s</xliff:g> สร้างผู้ใช้ใหม่ด้วย <xliff:g id="ACCOUNT">%2$s</xliff:g> ไหม"</string>
     <string name="supervised_user_creation_label" msgid="6884904353827427515">"เพิ่มผู้ใช้ภายใต้การควบคุมดูแล"</string>
     <string name="language_selection_title" msgid="52674936078683285">"เพิ่มภาษา"</string>
-    <string name="country_selection_title" msgid="5221495687299014379">"ค่ากำหนดภูมิภาค"</string>
+    <string name="country_selection_title" msgid="5221495687299014379">"ค่ากำหนดตามพื้นที่"</string>
     <string name="search_language_hint" msgid="7004225294308793583">"พิมพ์ชื่อภาษา"</string>
     <string name="language_picker_section_suggested" msgid="6556199184638990447">"แนะนำ"</string>
     <string name="language_picker_regions_section_suggested" msgid="6080131515268225316">"แนะนำ"</string>
@@ -1951,13 +1955,13 @@
     <string name="app_suspended_default_message" msgid="6451215678552004172">"เปิด <xliff:g id="APP_NAME_0">%1$s</xliff:g> ไม่ได้ในขณะนี้ แอปนี้จัดการโดย <xliff:g id="APP_NAME_1">%2$s</xliff:g>"</string>
     <string name="app_suspended_more_details" msgid="211260942831587014">"ดูข้อมูลเพิ่มเติม"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ยกเลิกการหยุดแอปชั่วคราว"</string>
-    <string name="work_mode_off_title" msgid="6367463960165135829">"ยกเลิกการหยุดแอปงานใช่ไหม"</string>
+    <string name="work_mode_off_title" msgid="6367463960165135829">"ยกเลิกการหยุดแอปงานชั่วคราวไหม"</string>
     <string name="work_mode_turn_on" msgid="5316648862401307800">"ยกเลิกการหยุดชั่วคราว"</string>
     <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"ฉุกเฉิน"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"แอปไม่พร้อมใช้งาน"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ไม่พร้อมใช้งานในขณะนี้"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ไม่พร้อมใช้งาน"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"ต้องการสิทธิ์"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"ระงับคำขอสิทธิ์อยู่"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"แอปนี้มีการขอสิทธิ์เพิ่มเติม แต่ไม่สามารถให้สิทธิ์ในเซสชันที่สตรีมอยู่ โปรดให้สิทธิ์ในอุปกรณ์ Android TV ก่อน"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"แอปนี้มีการขอสิทธิ์เพิ่มเติม แต่ไม่สามารถให้สิทธิ์ในเซสชันที่สตรีมอยู่ โปรดให้สิทธิ์ในแท็บเล็ตก่อน"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"แอปนี้มีการขอสิทธิ์เพิ่มเติม แต่ไม่สามารถให้สิทธิ์ในเซสชันที่สตรีมอยู่ โปรดให้สิทธิ์ในโทรศัพท์ก่อน"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"แอปนี้สร้างมาเพื่อ Android เวอร์ชันเก่า ซึ่งอาจทำงานไม่ถูกต้องและไม่มีการคุ้มครองความปลอดภัยและความเป็นส่วนตัวเวอร์ชันล่าสุด ตรวจหาอัปเดตหรือติดต่อนักพัฒนาแอป"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ตรวจสอบอัปเดต"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"แอปนี้ไม่สามารถใช้งานร่วมกับ Android เวอร์ชันล่าสุด ตรวจหาอัปเดตหรือติดต่อนักพัฒนาแอป"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"คุณมีข้อความใหม่"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"เปิดแอป SMS เพื่อดู"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"อาจมีข้อจำกัดในบางฟังก์ชัน"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"เปิดเนื้อหานี้โดยใช้แอปงานไม่ได้"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"แชร์เนื้อหานี้โดยใช้แอปส่วนตัวไม่ได้"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"เปิดเนื้อหานี้โดยใช้แอปส่วนตัวไม่ได้"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"โปรไฟล์งานหยุดชั่วคราว"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"แตะเพื่อเปิด"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"แอปงานหยุดชั่วคราว"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"ยกเลิกการหยุดชั่วคราว"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ไม่มีแอปงาน"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ไม่มีแอปส่วนตัว"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"เปิด <xliff:g id="APP">%s</xliff:g> งานไหม"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"เปิดใน <xliff:g id="APP">%s</xliff:g> ส่วนตัวไหม"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"เปิดใน <xliff:g id="APP">%s</xliff:g> งานไหม"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"โทรออกจากแอปงานไหม"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"เปลี่ยนไปใช้แอปงานไหม"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"องค์กรอนุญาตให้คุณโทรออกได้จากแอปงานเท่านั้น"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"องค์กรอนุญาตให้คุณส่งข้อความได้จากแอปงานเท่านั้น"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ใช้เบราว์เซอร์ส่วนตัว"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"ใช้เบราว์เซอร์งาน"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"โทร"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"เปลี่ยน"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN ปลดล็อกเครือข่ายที่ใช้กับ SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN ปลดล็อกเครือข่ายย่อยที่ใช้กับ SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN ปลดล็อกองค์กรที่ใช้กับ SIM"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"เข้าถึงกล้องของโทรศัพท์จาก <xliff:g id="DEVICE">%1$s</xliff:g> ไม่ได้"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"เข้าถึงกล้องของแท็บเล็ตจาก <xliff:g id="DEVICE">%1$s</xliff:g> ไม่ได้"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"เข้าถึงเนื้อหานี้ไม่ได้ขณะที่สตรีมมิง โปรดลองเข้าถึงในโทรศัพท์แทน"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"ดูการแสดงภาพซ้อนภาพขณะสตรีมไม่ได้"</string>
     <string name="system_locale_title" msgid="711882686834677268">"ค่าเริ่มต้นของระบบ"</string>
     <string name="default_card_name" msgid="9198284935962911468">"ซิมการ์ด <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"สิทธิ์สำหรับโปรไฟล์ในนาฬิกาที่ใช้ร่วมกันเพื่อจัดการนาฬิกา"</string>
@@ -2317,8 +2331,8 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"อนุญาตจากเบื้องหลังให้แอปที่ใช้ร่วมกันเริ่มการทำงานของบริการที่ทำงานอยู่เบื้องหน้า"</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"ไมโครโฟนพร้อมใช้งาน"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"ไมโครโฟนถูกบล็อก"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"หน้าจอคู่"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"หน้าจอคู่เปิดอยู่"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen เปิดอยู่"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> กำลังใช้จอแสดงผลทั้งสองจอเพื่อแสดงเนื้อหา"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"อุปกรณ์ร้อนเกินไป"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"หน้าจอคู่ไม่พร้อมให้ใช้งานเนื่องจากโทรศัพท์ของคุณร้อนเกินไป"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 83c4e8c..567b67e 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android System"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Lumipat sa personal na profile"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Lumipat sa profile sa trabaho"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Lumipat sa personal na <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Lumipat sa <xliff:g id="APP_NAME">%1$s</xliff:g> para sa trabaho"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Mga Contact"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"i-access ang iyong mga contact"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Lokasyon"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Pinapayagan ang app na kontrolin ang vibrator."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Pinapayagan ang app na ma-access ang naka-vibrate na status."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"direktang tawagan ang mga numero ng telepono"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Pinapayagan ang app na tumawag sa mga numero ng telepono nang wala ng iyong panghihimasok. Maaari itong magresulta sa mga hindi inaasahang pagsingil o tawag. Tandaan na hindi nito pinapayagan ang app na tumawag sa mga numerong pang-emergency. Maaaring magpagastos sa iyo ng pera ang nakakahamak na apps sa pamamagitan ng pagtawag nang wala ng iyong kumpirmasyon."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Pinapayagan ang app na tumawag sa mga numero ng telepono nang walang pamamagitan mo. Puwede itong magresulta sa mga hindi inaasahang singil o tawag. Tandaang hindi nito binibigyang-daan ang app na tumawag sa mga numerong pang-emergency. Posibleng may kailanganin kang bayaran dahil sa pagtawag ng mga nakakapinsalang app nang wala ang iyong kumpirmasyon, o mag-dial ang mga ito sa mga code ng carrier na nagdudulot ng awtomatikong pag-forward ng mga papasok na tawag sa ibang numero."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"i-access ang serbisyo sa tawag ng IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Pinapahintulutan ang app na gamitin ang serbisyo ng IMS upang tumawag nang walang pahintulot mo."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"basahin ang katayuan at pagkakakilanlan ng telepono"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Pinapayagan ang app na makakuha ng impormasyon sa gustong nfc na serbisyo sa pagbabayad tulad ng mga nakarehistrong application ID at destinasyon ng ruta."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"kontrolin ang Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Pinapayagan ang app na makipag-ugnay sa Near Field Communication (NFC) na mga tag, card, at reader."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Event ng transaksyon sa Secure na Elemento"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Nagbibigay-daan sa app na makatanggap ng impormasyon tungkol sa mga transaksyong nangyayari sa isang Secure na Elemento."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"i-disable ang iyong screen lock"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Pinapayagan ang app na i-disable ang keylock at anumang nauugnay na seguridad sa password. Halimbawa, hindi pinapagana ng telepono ang keylock kapag nakakatanggap ng papasok na tawag sa telepono, pagkatapos ay muling pinapagana ang keylock kapag tapos na ang tawag."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"humiling ng pagiging kumplikado ng lock ng screen"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Gumamit ng biometrics o lock ng screen"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"I-verify na ikaw ito"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Gamitin ang iyong biometric para magpatuloy"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Gamitin ang iyong fingerprint para magpatuloy"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Gamitin ang iyong mukha para magpatuloy"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Gamitin ang iyong biometric o lock ng screen para magpatuloy"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Walang biometric hardware"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Nakansela ang pag-authenticate"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Hindi nakilala"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Hindi nakilala ang mukha"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Nakansela ang pag-authenticate"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Walang itinakdang pin, pattern, o password"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Nagkaroon ng error sa pag-authenticate"</string>
@@ -684,7 +691,7 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Iusog pakaliwa ang telepono mo"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Iusog pakanan ang telepono mo"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Tumingin nang mas direkta sa iyong device."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Hindi makita ang mukha mo. Hawakan ang telepono mo nang kapantay ng mata."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Hindi makita ang mukha mo. Hawakan ang telepono kapantay ng mata."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Masyadong magalaw. Hawakang mabuti ang telepono."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Paki-enroll muli ang iyong mukha."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Hindi makilala ang mukha. Subukan ulit."</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"May na-detect na mask. Dapat ganap na nakikita ang mukha."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Di ma-verify ang mukha. Di available ang hardware."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Nakansela ang operation kaugnay ng mukha."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Kinansela ng user ang Pag-unlock Gamit ang Mukha"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Masyadong maraming pagsubok. Subukang muli mamaya."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Masyadong maraming pagsubok. Hindi available ang Face Unlock."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Masyado nang maraming beses sinubukan. Ilagay na lang ang lock ng screen."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Hindi ma-verify ang mukha. Subukang muli."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Hindi mo pa nase-set up ang Pag-unlock Gamit ang Mukha"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"TANGGIHAN"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Pumili ng pamamaraan ng pag-input"</string>
     <string name="show_ime" msgid="6406112007347443383">"Panatilihin ito sa screen habang aktibo ang pisikal na keyboard"</string>
-    <string name="hardware" msgid="1800597768237606953">"Ipakita ang virtual keyboard"</string>
+    <string name="hardware" msgid="3611039921284836033">"Gumamit ng on-screen keyboard"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"I-configure ang <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"I-configure ang mga pisikal na keyboard"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"I-tap upang pumili ng wika at layout"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Alisin"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Lakasan ang volume nang lagpas sa inirerekomendang antas?\n\nMaaaring mapinsala ng pakikinig sa malakas na volume sa loob ng mahahabang panahon ang iyong pandinig."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Babala,\nLumagpas ka na sa dami ng malalakas na signal ng tunog na ligtas na mapapakinggan ng isang tao sa isang linggo gamit ang headphones.\n\nPermanenteng makakapinsala sa iyong pandinig ang paglagpas sa limitasyong ito."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Babala,\nLumagpas ka na sa 5 beses ng dami ng malalakas na signal ng tunog na ligtas na mapapakinggan ng isang tao sa isang linggo gamit ang headphones.\n\nHininaan ang volume para protektahan ang iyong pandinig."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Puwedeng magresulta sa pinsala sa pandinig ang level ng pakikinig mo sa media kapag nagtagal pa ito nang mahabang panahon.\n\nPosibleng makapinsala sa iyong pandinig ang patuloy na pagpe-play sa level na ito sa loob ng mahabang panahon."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Babala,\nKasalukuyan kang nakikinig sa malakas na content na pine-play sa hindi ligtas na level.\n\nPosibleng permanenteng makapinsala sa iyong pandinig ang patuloy na pakikinig nang ganito kalakas."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Magpatuloy sa pakikinig nang may malakas na volume?\n\nNaging malakas ang volume nang mas matagal na sa inirerekomenda, at posible nitong mapinsala ang pandinig mo"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Naka-detect ng malakas na tunog\n\nMas malakas ang volume kaysa sa inirerekomenda, at posible nitong mapinsala ang pandinig mo"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Gagamitin ang Shortcut sa Accessibility?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Kapag naka-on ang shortcut, magsisimula ang isang feature ng pagiging naa-access kapag pinindot ang parehong button ng volume."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"I-on ang shortcut para sa mga feature ng pagiging naa-access?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Upang lumabas, mag-swipe mula sa itaas pababa."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Nakuha ko"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"I-rotate para sa mas magandang view"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Lumabas sa split screen para sa mas magandang view"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Buksan ang <xliff:g id="NAME">%s</xliff:g> sa full screen para sa mas magandang view"</string>
     <string name="done_label" msgid="7283767013231718521">"Tapos na"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Pabilog na slider ng mga oras"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Pabilog na slider ng mga minuto"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Hindi available ang app"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Hindi available sa ngayon ang <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"Hindi available ang <xliff:g id="ACTIVITY">%1$s</xliff:g>"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Kailangan ng pahintulot"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Na-suppress ang kahilingan sa pahintulot"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Humihingi ang app na ito ng dagdag na pahintulot, pero hindi puwedeng ibigay ang mga pahintulot sa isang session ng streaming. Ibigay muna ang pahintulot sa iyong Android TV device."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Humihingi ang app na ito ng dagdag na pahintulot, pero hindi puwedeng ibigay ang mga pahintulot sa isang session ng streaming. Ibigay muna ang pahintulot sa iyong tablet."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Humihingi ang app na ito ng dagdag na pahintulot, pero hindi puwedeng ibigay ang mga pahintulot sa isang session ng streaming. Ibigay muna ang pahintulot 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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Hindi ito maa-access sa iyong <xliff:g id="DEVICE">%1$s</xliff:g>. Subukan na lang sa iyong telepono."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Ginawa ang app na ito para sa mas lumang bersyon ng Android. Baka hindi ito gumana nang maayos at wala itong pinakabagong proteksyon sa seguridad at privacy. Tingnan kung may update, o makipag-ugnayan sa developer ng app."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Tingnan kung may update"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Hindi compatible ang app sa pinakabagong bersyon ng Android. Tingnan kung may update o makipag-ugnayan sa developer ng app."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Mayroon kang mga bagong mensahe"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Buksan ang SMS app upang tingnan"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Puwedeng limitado ang ilang function"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Hindi puwedeng buksan sa mga app para sa trabaho ang content na ito"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Hindi puwedeng ibahagi sa mga personal na app ang content na ito"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Hindi puwedeng buksan sa mga personal na app ang content na ito"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Naka-pause ang profile sa trabaho"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"I-tap para i-on"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Naka-pause ang mga app para sa trabaho"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"I-unpause"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Walang app para sa trabaho"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Walang personal na app"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Buksan ang <xliff:g id="APP">%s</xliff:g> na para sa trabaho?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Buksan sa personal na <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Buksan sa <xliff:g id="APP">%s</xliff:g> na para sa trabaho?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Tumawag mula sa app para sa trabaho?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Lumipat sa app para sa trabaho?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Pinapayagan ka lang ng iyong organisasyon na tumawag mula sa mga app para sa trabaho"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Pinapayagan ka lang ng iyong organisasyon na magpadala ng mga mensahe mula sa mga app para sa trabaho"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Gamitin ang personal na browser"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Gamitin ang browser sa trabaho"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Tumawag"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Lumipat"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN para sa pag-unlock ng network ng SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN para sa pag-unlock ng subset ng network ng SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN para sa pangkumpanyang pag-unlock ng SIM"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Hindi ma-access ang camera ng telepono mula sa iyong <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Hindi ma-access ang camera ng tablet mula sa iyong <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Hindi ito puwedeng i-access habang nagsi-stream. Subukan na lang sa iyong telepono."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Hindi matingnan nang picture-in-picture habang nagsi-stream"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Default ng system"</string>
     <string name="default_card_name" msgid="9198284935962911468">"CARD <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Pahintulot sa profile ng Relo ng kasamang app na pamahalaan ang mga relo"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index a978418..3bf35a5 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -268,7 +268,7 @@
     <string name="global_action_settings" msgid="4671878836947494217">"Ayarlar"</string>
     <string name="global_action_assist" msgid="2517047220311505805">"Asist"</string>
     <string name="global_action_voice_assist" msgid="6655788068555086695">"Sesli Yardım"</string>
-    <string name="global_action_lockdown" msgid="2475471405907902963">"Tam gizlilik"</string>
+    <string name="global_action_lockdown" msgid="2475471405907902963">"Tam kilitleme"</string>
     <string name="status_bar_notification_info_overflow" msgid="3330152558746563475">"999+"</string>
     <string name="notification_hidden_text" msgid="2835519769868187223">"Yeni bildirim"</string>
     <string name="notification_channel_physical_keyboard" msgid="5417306456125988096">"Fiziksel klavye"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android Sistemi"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Kişisel profile geçiş yap"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"İş profiline geç"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"<xliff:g id="APP_NAME">%1$s</xliff:g> kişisel profiline geç"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"<xliff:g id="APP_NAME">%1$s</xliff:g> iş profiline geç"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kişiler"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"kişilerinize erişme"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Konum"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Uygulamaya, titreşimi denetleme izni verir."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Uygulamanın titreşim durumuna erişimesine izni verir."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"telefon numaralarına doğrudan çağrı yap"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Uygulamaya sizin müdahaleniz olmadan telefon numaralarını arama izni verir. Bu durum beklenmeyen ödemelere veya aramalara neden olabilir. Ancak bu iznin, uygulamanın acil numaraları aramasına olanak sağlamadığını unutmayın. Kötü amaçlı uygulamalar onayınız olmadan aramalar yaparak sizi zarara sokabilir."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Uygulamaya, sizin müdahaleniz olmadan telefon numaralarını arama izni verir. Bunun sonucunda beklenmedik ücretlerle veya aramalarla karşılaşabilirsiniz. Bunun, uygulamaya acil durum numaralarını arama izni vermediğini unutmayın. Kötü amaçlı uygulamalar sizin onayınızı almadan arama yaparak veya gelen aramaların otomatik olarak başka bir numaraya yönlendirilmesine neden olan operatör kodlarını arayarak faturanızı kabartabilir."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS çağrı hizmetine erişme"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Uygulamanın, sizin müdahaleniz olmadan telefon etmek için IMS hizmetini kullanmasına izin verir."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"telefonun durumunu ve kimliğini okuma"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Uygulamaya, kayıtlı yardımlar ve rota hedefi gibi tercih edilen NFC ödeme hizmeti bilgilerini alma izni verir."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"Yakın Alan İletişimini denetle"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Uygulamaya, Near Field Communication (NFC) etiketleri, kartlar ve okuyucular ile iletişim kurma izni verir."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Güvenlik Unsuru işlemiyle ilgili etkinlik"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Uygulamanın bir Güvenlik Unsuru\'nda gerçekleşen işlemlerle ilgili bilgi almasına izin verir."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"ekran kilidimi devre dışı bırak"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Uygulamaya, tuş kilidini ve ilişkili tüm şifreli güvenlik önlemlerini devre dışı bırakma izni verir. Örneğin, telefon, çağrı alındığında tuş kilidinin devre dışı bırakır ve sonra, görüşme bittiğinde kilidi yeniden etkinleştirir."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"ekran kilidi karmaşıklığı iste"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Biyometri veya ekran kilidi kullan"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Siz olduğunuzu doğrulayın"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Devam etmek için biyometri kullanın"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Devam etmek için parmak izinizi kullanın"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Devam etmek için yüzünüzü kullanın"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Devam etmek için biyometrik kimlik bilginizi veya ekran kilidinizi kullanın"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biyometrik donanım kullanılamıyor"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Kimlik doğrulama iptal edildi"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Tanınmadı"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Yüz tanınmadı"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Kimlik doğrulama iptal edildi"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN, desen veya şifre seti yok"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Kimlik doğrulama sırasında hata oluştu"</string>
@@ -633,7 +640,7 @@
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Çok parlak"</string>
     <string name="fingerprint_acquired_power_press" msgid="3107864151278434961">"Güç düğmesine basma algılandı"</string>
     <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"Ayarlamayı deneyin"</string>
-    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Her defasında parmağınızın konumunu biraz değiştirin"</string>
+    <string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"Her defasında parmağınızı biraz kaydırın"</string>
   <string-array name="fingerprint_acquired_vendor">
   </string-array>
     <string name="fingerprint_error_not_match" msgid="4599441812893438961">"Parmak izi tanınmadı"</string>
@@ -679,8 +686,8 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"Yeterli ışık yok"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Telefonu uzaklaştırın"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Telefonu yaklaştırın"</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"Telefonu daha yukarı kaldırın"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"Telefonu daha aşağı indirin"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"Telefonu yukarı kaldırın"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"Telefonu aşağı indirin"</string>
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Telefonu solunuza kaydırın"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Telefonu sağınıza kaydırın"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Lütfen cihazınıza daha doğrudan bakın."</string>
@@ -692,7 +699,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Telefonunuza daha doğrudan bakın"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Telefonunuza daha doğrudan bakın"</string>
     <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_obscured" msgid="4917643294953326639">"Yüzünüzü 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>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Yüzünüz algılanamıyor. Yüzünüz tamamen görünür olmalıdır."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Yüz doğrulanamıyor. Donanım kullanılamıyor."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Yüz işlemi iptal edildi."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Yüz Tanıma Kilidi kullanıcı tarafından iptal edildi"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Çok fazla deneme yapıldı. Daha sonra tekrar deneyin."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Çok deneme yapıldı. Yüz Tanıma Kilidi kullanılamıyor."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Çok fazla deneme yapıldı. Bunun yerine ekran kilidini girin."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Yüz doğrulanamıyor. Tekrar deneyin."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Yüz Tanıma Kilidi ayarlamadınız"</string>
@@ -964,7 +970,7 @@
     <string name="lockscreen_instructions_when_pattern_enabled" msgid="7982445492532123308">"Kilidi açmak veya acil çağrı yapmak için Menü\'ye basın."</string>
     <string name="lockscreen_instructions_when_pattern_disabled" msgid="7434061749374801753">"Kilidi açmak için Menü\'ye basın."</string>
     <string name="lockscreen_pattern_instructions" msgid="3169991838169244941">"Kilit açmak için deseni çizin"</string>
-    <string name="lockscreen_emergency_call" msgid="7500692654885445299">"Acil durum çağrısı"</string>
+    <string name="lockscreen_emergency_call" msgid="7500692654885445299">"Acil durum araması"</string>
     <string name="lockscreen_return_to_call" msgid="3156883574692006382">"Çağrıya dön"</string>
     <string name="lockscreen_pattern_correct" msgid="8050630103651508582">"Doğru!"</string>
     <string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"Tekrar deneyin"</string>
@@ -1369,7 +1375,7 @@
     <string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Analog ses aksesuarı algılandı"</string>
     <string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Takılan cihaz bu telefonla uyumlu değil. Daha fazla bilgi edinmek için dokunun."</string>
     <string name="adb_active_notification_title" msgid="408390247354560331">"USB hata ayıklaması bağlandı"</string>
-    <string name="adb_active_notification_message" msgid="5617264033476778211">"USB hata ayıklama işlevini kapatmak için dokunun"</string>
+    <string name="adb_active_notification_message" msgid="5617264033476778211">"USB hata ayıklamayı kapatmak için dokunun"</string>
     <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"USB hata ayıklamasını devre dışı bırakmak için seçin."</string>
     <string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Kablosuz hata ayıklama bağlı"</string>
     <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Kablosuz hata ayıklamayı kapatmak için dokunun"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"REDDET"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Giriş yöntemini seçin"</string>
     <string name="show_ime" msgid="6406112007347443383">"Fiziksel klavye etkin durumdayken ekranda tut"</string>
-    <string name="hardware" msgid="1800597768237606953">"Sanal klavyeyi göster"</string>
+    <string name="hardware" msgid="3611039921284836033">"Ekran klavyesi kullanın"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> ayarlarını yapılandır"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Fiziksel klavyeleri yapılandırın"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Dili ve düzeni seçmek için dokunun"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Kaldır"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Ses seviyesi önerilen düzeyin üzerine yükseltilsin mi?\n\nUzun süre yüksek ses seviyesinde dinlemek işitme duyunuza zarar verebilir."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Uyarı,\nBir kullanıcının, bir hafta içinde kulaklıkla güvenle dinleyebileceği yüksek ses sinyali seviyesini aştınız.\n\nBu sınırın üzerine çıkılması, işitme duyunuzda kalıcı hasarlara neden olur."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Uyarı,\nBir kullanıcının, bir hafta içinde kulaklıkla güvenle dinleyebileceği yüksek ses sinyali seviyesini 5 kat aştınız.\n\nİşitme duyunuzu korumak için ses seviyesi düşürüldü."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Medyaları dinlediğiniz seviye, uzun süre bu şekilde devam ederse işitme duyusuna zarar verebilir.\n\nUzun süre bu seviyede dinlemeye devam ederseniz işitme duyunuz zarar görebilir."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Uyarı,\nŞu anda güvenli olmayan bir seviyede çalan içeriği yüksek sesle dinliyorsunuz.\n\nBu kadar yüksek sesle dinlemeye devam ederseniz işitme duyunuzda kalıcı hasar meydana gelebilir."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Yüksek sesle dinlemeye devam edilsin mi?\n\nKulaklığın sesi önerilenden daha uzun süre yüksek düzeyde kaldı ve bu durum işitme kaybına neden olabilir"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Yüksek ses algılandı\n\nKulaklığın ses düzeyi önerilenden yüksek. Bu durum işitme kaybına neden olabilir"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Erişilebilirlik Kısayolu Kullanılsın mı?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Kısayol açıkken ses düğmelerinin ikisini birden 3 saniyeliğine basılı tutmanız bir erişilebilirlik özelliğini başlatır."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Erişilebilirlik özellikleri için kısayol açılsın mı?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Çıkmak için yukarıdan aşağıya doğru hızlıca kaydırın."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Anladım"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Daha iyi bir görünüm elde etmek için ekranı döndürün"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Daha iyi bir görünüm elde etmek için bölünmüş ekrandan çıkın"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Daha iyi görünüm için <xliff:g id="NAME">%s</xliff:g> uygulamasını açın"</string>
     <string name="done_label" msgid="7283767013231718521">"Bitti"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Saat kaydırma çemberi"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Dakika kaydırma çemberi"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Uygulama kullanılamıyor"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulaması şu anda kullanılamıyor."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> kullanılamıyor"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"İzin gerekli"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"İzin isteği reddedildi"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Bu uygulama ek izinler istiyor ancak akış oturumundayken izin verilemez. Önce Android TV cihazınızda ilgili izni verin."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Bu uygulama ek izinler istiyor ancak akış oturumundayken izin verilemez. Önce tabletinizde ilgili izni verin."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Bu uygulama ek izinler istiyor ancak akış oturumundayken izin verilemez. Önce telefonunuzda ilgili izni verin."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Bu uygulamaya <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızdan erişilemiyor. Bunun yerine telefonunuzu kullanmayı deneyin."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Bu uygulama Android\'in daha eski bir sürümü için geliştirildi. Bu nedenle, düzgün çalışmayabilir ve son güvenlik ile gizlilik korumalarını içermemektedir. Güncelleme olup olmadığını kontrol edin veya uygulamanın geliştiricisiyle iletişime geçin."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Güncellemeleri denetle"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Bu uygulama Android\'in son sürümüyle uyumlu değil. Güncelleme olup olmadığını kontrol edin veya uygulamanın geliştiricisiyle iletişime geçin."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Yeni mesajlarınız var"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Görüntülemek için SMS uygulamasını açın"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Bazı işlevler sınırlanabilir"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Bu içerik, iş uygulamalarıyla açılamaz"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Bu içerik, kişisel uygulamalarla paylaşılamaz"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Bu içerik, kişisel uygulamalarla açılamaz"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"İş profili duraklatıldı"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Açmak için dokunun"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"İş uygulamaları duraklatıldı"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Devam ettir"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"İş uygulaması yok"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Kişisel uygulama yok"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"<xliff:g id="APP">%s</xliff:g> iş uygulaması açılsın mı?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Kişisel uygulamada (<xliff:g id="APP">%s</xliff:g>) açılsın mı?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"İş uygulamasında (<xliff:g id="APP">%s</xliff:g>) açılsın mı?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"İş uygulamasından aransın mı?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"İş uygulamasına geçilsin mi?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Kuruluşunuz yalnızca iş uygulamalarından telefon etmenize izin veriyor"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Kuruluşunuz yalnızca iş uygulamalarından mesaj göndermenize izin veriyor"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Kişisel tarayıcıyı kullan"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"İş tarayıcısını kullan"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Telefon et"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Geçiş yap"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ağ kilidi açma PIN kodu"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM ağ alt kümesi kilidini açma PIN kodu"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM kurumsal kilidi açma PIN kodu"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"<xliff:g id="DEVICE">%1$s</xliff:g> cihazınızdan telefonun kamerasına erişilemiyor"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"<xliff:g id="DEVICE">%1$s</xliff:g> cihazınızdan tabletin kamerasına erişilemiyor"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Canlı oynatılırken bu içeriğe erişilemez. Bunun yerine telefonunuzu kullanmayı deneyin."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Yayın sırasında pencere içinde pencere görüntülenemez"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Sistem varsayılanı"</string>
     <string name="default_card_name" msgid="9198284935962911468">"KART <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Kol saatlerinin yönetimi için Tamamlayıcı Kol Saati Profili İzni"</string>
@@ -2318,7 +2332,7 @@
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofon kullanılabilir"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofon engellenmiş"</string>
     <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Çift ekran"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Çift Ekran açık"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Çift ekran açık"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g>, içeriği göstermek için her iki ekranı da kullanıyor"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Cihaz çok ısındı"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Telefonunuz çok ısındığı için Çift Ekran kullanılamıyor"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 47e8da1..47e529c 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -300,6 +300,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Система Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Перейти в особистий профіль"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Перейти в робочий профіль"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Перейти в особистий профіль у додатку <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Перейти в робочий профіль у додатку <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Контакти"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"отримувати доступ до контактів"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Геодані"</string>
@@ -505,7 +507,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Дозволяє програмі контролювати вібросигнал."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Надає додатку доступ до стану вібрації."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"прямо набирати номери тел."</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Дозволяє програмі набирати номери телефону без вашого відома. Це може спричинити неочікуване стягнення плати чи здійснення дзвінків. Зауважте, що це не дозволяє програмі набирати екстрені номери. Шкідливі програми можуть здійснювати дзвінки без вашого підтвердження, за що з вас стягуватимуться кошти."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Дозволяє додатку набирати номери телефонів без вашого відома. Це може спричинити неочікуване стягнення плати чи здійснення викликів. Зверніть увагу, що додаток не зможе набирати екстрені номери. Шкідливі додатки можуть здійснювати дзвінки без вашого підтвердження, за що з вас стягуватимуться кошти, або набирати коди оператора, після чого вхідні виклики переадресовуватимуться на інший номер."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"отримувати доступ до телефонної служби IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Додаток зможе телефонувати за допомогою служби IMS без вашого відома."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"читати статус та ідентифікаційну інформацію телефону"</string>
@@ -590,6 +592,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Дозволяє додатку отримувати доступ до інформації потрібного платіжного NFC-сервісу (наприклад, пов\'язаних ідентифікаторів чи даних про маршрутизацію трансакцій)."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"контрол. Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Дозволяє програмі обмінюватися даними з тегами, картками та читачами екрана Near Field Communication (NFC)."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Подія, пов’язана з транcакцією в Компоненті захисту"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Надає додатку доступ до інформації про транcакції, що відбуваються в Компоненті захисту."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"вимикати блокування екрана"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Дозволяє програмі вимикати блокування клавіатури та будь-який пов’язаний паролем захист. Наприклад: телефон вимикає блокування клавіатури під час отримання вхідного дзвінка, після закінчення якого блокування клавіатури відновлюється."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"запитувати рівень складності блокування екрана"</string>
@@ -616,10 +620,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Використовувати біометрію або дані для розблокування екрана"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Підтвердьте, що це ви"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Щоб продовжити, скористайтеся біометрією"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Щоб продовжити, скористайтеся відбитком пальця"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Щоб продовжити, скористайтеся фейс-контролем"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Щоб продовжити, скористайтеся біометрією або даними для розблокування екрана"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Біометричне апаратне забезпечення недоступне"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Автентифікацію скасовано"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Не розпізнано"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Обличчя не розпізнано"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Автентифікацію скасовано"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Не вказано PIN-код, ключ або пароль"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Помилка автентифікації"</string>
@@ -668,9 +675,9 @@
     <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"Фейс-контроль"</string>
     <string name="face_recalibrate_notification_title" msgid="2524791952735579082">"Сталася помилка з фейсконтролем"</string>
     <string name="face_recalibrate_notification_content" msgid="3064513770251355594">"Натисніть, щоб видалити свою модель обличчя, а потім знову додайте її"</string>
-    <string name="face_setup_notification_title" msgid="8843461561970741790">"Налаштування фейсконтролю"</string>
+    <string name="face_setup_notification_title" msgid="8843461561970741790">"Налаштування фейс-контролю"</string>
     <string name="face_setup_notification_content" msgid="5463999831057751676">"Ви зможете розблоковувати телефон, подивившись на нього"</string>
-    <string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"Щоб використовувати фейсконтроль, увімкніть "<b>"Доступ до камери"</b>" в розділі \"Налаштування\" &gt; \"Конфіденційність\""</string>
+    <string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"Щоб використовувати фейс-контроль, увімкніть "<b>"Доступ до камери"</b>" в розділі \"Налаштування\" &gt; \"Конфіденційність\""</string>
     <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Налаштуйте більше способів розблокування"</string>
     <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Натисніть, щоб додати відбиток пальця"</string>
     <string name="fingerprint_recalibrate_notification_name" msgid="1414578431898579354">"Розблокування відбитком пальця"</string>
@@ -694,7 +701,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Дивіться на телефон прямо"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Дивіться на телефон прямо"</string>
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Дивіться на телефон прямо"</string>
-    <string name="face_acquired_obscured" msgid="4917643294953326639">"Приберіть об’єкти, які затуляють ваше обличчя."</string>
+    <string name="face_acquired_obscured" msgid="4917643294953326639">"Приберіть об’єкти, які затуляють ваше обличчя"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Очистьте верхню частину екрана, зокрема чорну панель"</string>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -702,7 +709,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Обличчя не видно повністю, бо його закриває аксесуар"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Не вдається перевірити обличчя. Апаратне забезпечення недоступне."</string>
@@ -711,16 +718,15 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Дію з обличчям скасовано."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Користувач скасував операцію фейсконтролю"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Забагато спроб. Повторіть пізніше."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Забагато спроб. Фейс-контроль недоступний."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Забагато спроб. Розблокуйте екран іншим способом."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Не вдається перевірити обличчя. Повторіть спробу."</string>
-    <string name="face_error_not_enrolled" msgid="1134739108536328412">"Ви не налаштували фейсконтроль"</string>
-    <string name="face_error_hw_not_present" msgid="7940978724978763011">"Фейсконтроль не підтримується на цьому пристрої"</string>
+    <string name="face_error_not_enrolled" msgid="1134739108536328412">"Ви не налаштували фейс-контроль"</string>
+    <string name="face_error_hw_not_present" msgid="7940978724978763011">"Фейс-контроль не підтримується на цьому пристрої"</string>
     <string name="face_error_security_update_required" msgid="5076017208528750161">"Датчик тимчасово вимкнено."</string>
     <string name="face_name_template" msgid="3877037340223318119">"Обличчя <xliff:g id="FACEID">%d</xliff:g>"</string>
-    <string name="face_app_setting_name" msgid="5854024256907828015">"Доступ через фейсконтроль"</string>
-    <string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Використовувати фейсконтроль або дані для розблокування екрана"</string>
+    <string name="face_app_setting_name" msgid="5854024256907828015">"Доступ через фейс-контроль"</string>
+    <string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Використовувати фейс-контроль або дані для розблокування екрана"</string>
     <string name="face_dialog_default_subtitle" msgid="6620492813371195429">"Щоб продовжити, скористайтеся фейсконтролем"</string>
     <string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Щоб продовжити, скористайтеся фейсконтролем або даними для розблокування екрана"</string>
   <string-array name="face_error_vendor">
@@ -972,7 +978,7 @@
     <string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"Повторіть спробу"</string>
     <string name="lockscreen_password_wrong" msgid="8605355913868947490">"Повторіть спробу"</string>
     <string name="lockscreen_storage_locked" msgid="634993789186443380">"Розблокуйте, щоб бачити всі функції й дані"</string>
-    <string name="faceunlock_multiple_failures" msgid="681991538434031708">"Перевищено максимальну кількість спроб розблокування за допомогою функції \"Фейсконтроль\""</string>
+    <string name="faceunlock_multiple_failures" msgid="681991538434031708">"Перевищено максимальну кількість спроб розблокування за допомогою функції \"Фейс-контроль\""</string>
     <string name="lockscreen_missing_sim_message_short" msgid="1229301273156907613">"Немає SIM-карти"</string>
     <string name="lockscreen_missing_sim_message" product="tablet" msgid="3986843848305639161">"У планшеті немає SIM-карти."</string>
     <string name="lockscreen_missing_sim_message" product="tv" msgid="3903140876952198273">"У пристрої Android TV немає SIM-карти."</string>
@@ -1394,7 +1400,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"ВІДХИЛИТИ"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Вибрати метод введення"</string>
     <string name="show_ime" msgid="6406112007347443383">"Утримуйте на екрані, коли активна фізична клавіатура"</string>
-    <string name="hardware" msgid="1800597768237606953">"Показати віртуальну клавіатуру"</string>
+    <string name="hardware" msgid="3611039921284836033">"Екранна клавіатура"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Налаштуйте клавіатуру \"<xliff:g id="DEVICE_NAME">%s</xliff:g>\""</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Налаштуйте фізичні клавіатури"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Торкніться, щоб вибрати мову та розкладку"</string>
@@ -1683,10 +1689,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Вилучити"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Збільшити гучність понад рекомендований рівень?\n\nЯкщо слухати надто гучну музику тривалий час, можна пошкодити слух."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Попередження.\nВи перевищили кількість гучних звукових сигналів, які протягом тижня можна безпечно слухати через навушники.\n\nПеревищення цього ліміту може назавжди пошкодити ваш слух."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Попередження.\nВи вп’ятеро перевищили кількість гучних звукових сигналів, які протягом тижня можна безпечно слухати через навушники.\n\nГучність знижено, щоб уберегти ваш слух."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Якщо довго слухати медіаконтент на цьому рівні гучності, можливі пошкодження слуху.\n\nЯкщо ви не знизите гучність, через деякий час ваш слух може погіршитись."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Попередження.\nНаразі ви слухаєте контент із небезпечним рівнем гучності.\n\nЯкщо надалі слухати так гучно, це може назавжди пошкодити ваш слух."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Слухати далі на високій гучності?\n\nАудіо в навушниках відтворювалося з високою гучністю довше, ніж рекомендується. Через це ваш слух може погіршитись."</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Виявлено гучний звук\n\nРівень гучності навушників вищий за рекомендований. Через це ваш слух може погіршитись."</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Використовувати швидке ввімкнення?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Якщо цей засіб увімкнено, ви можете активувати спеціальні можливості, утримуючи обидві кнопки гучності протягом трьох секунд."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Увімкнути засіб спеціальних можливостей?"</string>
@@ -1853,7 +1857,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Щоб вийти, проведіть пальцем зверху вниз."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"OK"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Оберніть для кращого огляду"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Для кращого огляду вийдіть із режиму розділення екрана"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Для кращого огляду відкрийте додаток <xliff:g id="NAME">%s</xliff:g> на весь екран"</string>
     <string name="done_label" msgid="7283767013231718521">"Готово"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Вибір годин на циферблаті"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Вибір хвилин на циферблаті"</string>
@@ -1959,7 +1963,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Додаток недоступний"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> зараз недоступний."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"Недоступно: <xliff:g id="ACTIVITY">%1$s</xliff:g>"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Потрібен дозвіл"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Запит на доступ відхилено"</string>
     <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>
@@ -1970,6 +1974,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Цьому додатку потрібні додаткові дозволи, але їх не можна надати під час потокового передавання. Спершу надайте дозвіл на пристрої Android TV."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Цьому додатку потрібні додаткові дозволи, але їх не можна надати під час потокового передавання. Спершу надайте дозвіл на планшеті."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Цьому додатку потрібні додаткові дозволи, але їх не можна надати під час потокового передавання. Спершу надайте дозвіл на телефоні."</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>
@@ -1978,6 +1985,7 @@
     <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="5246906284426844596">"Цей додаток створено для старішої версії ОС Android. Він може не працювати належним чином і не містить найновіших засобів захисту конфіденційності та безпеки. Перевірте наявність оновлень або зв’яжіться з розробником додатка."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Шукати оновлення"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Цей додаток несумісний з останньою версією ОС Android. Перевірте наявність оновлень або зв’яжіться з розробником додатка."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"У вас є нові повідомлення"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Щоб переглянути, відкрийте додаток для SMS"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Деякі функції може бути обмежено"</string>
@@ -2161,16 +2169,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Цей контент не можна відкривати в робочих додатках"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Цим контентом не можна ділитися в особистих додатках"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Цей контент не можна відкривати в особистих додатках"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Робочий профіль призупинено"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Торкніться, щоб увімкнути"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Робочі додатки призупинено"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Увімкнути знову"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Немає робочих додатків"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Немає особистих додатків"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Відкрити робочий додаток <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Відкрити в особистому додатку <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Відкрити в робочому додатку <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Телефонувати з робочого додатка?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Перейти в робочий додаток?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Ваша організація дозволяє телефонувати лише з робочих додатків"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Ваша організація дозволяє надсилати повідомлення лише з робочих додатків"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Використати особистий веб-переглядач"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Використати робочий веб-переглядач"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Телефонувати"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Перейти"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-код розблокування мережі SIM-карти"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN-код розблокування підгрупи мереж SIM-карти"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN-код розблокування корпоративної SIM-карти"</string>
@@ -2290,7 +2303,7 @@
     <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"Розблокуйте мікрофон пристрою"</string>
     <string name="sensor_privacy_start_use_camera_notification_content_title" msgid="7287720213963466672">"Розблокуйте камеру пристрою"</string>
     <string name="sensor_privacy_start_use_notification_content_text" msgid="7595608891015777346">"Для &lt;b&gt;<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; та всіх додатків і сервісів"</string>
-    <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Розблокувати"</string>
+    <string name="sensor_privacy_start_use_dialog_turn_on_button" msgid="7089318886628390827">"Надати"</string>
     <string name="sensor_privacy_notification_channel_label" msgid="936036783155261349">"Конфіденційність датчиків"</string>
     <string name="splash_screen_view_icon_description" msgid="180638751260598187">"Значок додатка"</string>
     <string name="splash_screen_view_branding_description" msgid="7911129347402728216">"Зображення фірмової символіки додатка"</string>
@@ -2307,6 +2320,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Не вдається отримати доступ до камери телефона з пристрою <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Не вдається отримати доступ до камери планшета з пристрою <xliff:g id="DEVICE">%1$s</xliff:g>"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Цей контент недоступний під час потокового передавання. Спробуйте натомість скористатися телефоном."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Ви не можете переглядати картинку в картинці під час трансляції"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Налаштування системи за умовчанням"</string>
     <string name="default_card_name" msgid="9198284935962911468">"КАРТКА <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Дозвіл профілю годинника для супутнього додатка на керування годинниками"</string>
@@ -2319,8 +2333,8 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Дозволяє супутньому додатку запускати активні сервіси у фоновому режимі."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Мікрофон доступний"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Мікрофон заблоковано"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Подвійний екран"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Подвійний екран увімкнено"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual Screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Dual Screen увімкнено"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> використовує обидва екрани для показу контенту"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Пристрій сильно нагрівається"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Подвійний екран недоступний, оскільки телефон сильно нагрівається"</string>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index 371ab4a..907ebd9 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -76,18 +76,18 @@
     <string name="auto_data_switch_title" msgid="3286350716870518297">"ڈیٹا <xliff:g id="CARRIERDISPLAY">%s</xliff:g> پر سوئچ کیا گیا"</string>
     <string name="auto_data_switch_content" msgid="803557715007110959">"آپ اسے ترتیبات میں کسی بھی وقت تبدیل کر سکتے ہیں"</string>
     <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"کوئی موبائل ڈیٹا سروس دستیاب نہیں ہے"</string>
-    <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"ہنگامی کالنگ دستیاب نہیں ہے"</string>
+    <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"ایمرجنسی کالنگ دستیاب نہیں ہے"</string>
     <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"کوئی صوتی سروس نہیں"</string>
-    <string name="RestrictedOnAllVoiceTitle" msgid="3982069078579103087">"کوئی صوتی سروس یا ہنگامی کالنگ دستیاب نہیں ہے"</string>
+    <string name="RestrictedOnAllVoiceTitle" msgid="3982069078579103087">"کوئی صوتی سروس یا ایمرجنسی کالنگ دستیاب نہیں ہے"</string>
     <string name="RestrictedStateContent" msgid="7693575344608618926">"آپ کے کیریئر نے عارضی طور پر آف کر دیا ہے"</string>
     <string name="RestrictedStateContentMsimTemplate" msgid="5228235722511044687">"‏SIM <xliff:g id="SIMNUMBER">%d</xliff:g> کے لئے آپ کے کیریئر نے عارضی طور پر آف کر دیا ہے"</string>
     <string name="NetworkPreferenceSwitchTitle" msgid="1008329951315753038">"موبائل نیٹ ورک تک رسائی نہیں ہو سکتی"</string>
     <string name="NetworkPreferenceSwitchSummary" msgid="2086506181486324860">"ترجیحی نیٹ ورک تبدیل کر کے دیکھیں۔ تبدیل کرنے کے لیے تھپتھپائیں۔"</string>
-    <string name="EmergencyCallWarningTitle" msgid="1615688002899152860">"ہنگامی کالنگ دستیاب نہیں ہے"</string>
-    <string name="EmergencyCallWarningSummary" msgid="1194185880092805497">"‏Wi‑Fi کے ذریعے ہنگامی کالز نہیں کر سکتے"</string>
+    <string name="EmergencyCallWarningTitle" msgid="1615688002899152860">"ایمرجنسی کالنگ دستیاب نہیں ہے"</string>
+    <string name="EmergencyCallWarningSummary" msgid="1194185880092805497">"‏Wi‑Fi کے ذریعے ایمرجنسی کالز نہیں کر سکتے"</string>
     <string name="notification_channel_network_alert" msgid="4788053066033851841">"الرٹس"</string>
     <string name="notification_channel_call_forward" msgid="8230490317314272406">"کال فارورڈنگ"</string>
-    <string name="notification_channel_emergency_callback" msgid="54074839059123159">"ہنگامی کال بیک وضع"</string>
+    <string name="notification_channel_emergency_callback" msgid="54074839059123159">"ایمرجنسی کال بیک وضع"</string>
     <string name="notification_channel_mobile_data_status" msgid="1941911162076442474">"موبائل ڈیٹا کی صورت حال"</string>
     <string name="notification_channel_sms" msgid="1243384981025535724">"‏SMS پیغامات"</string>
     <string name="notification_channel_voice_mail" msgid="8457433203106654172">"صوتی میل پیغامات"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"‏Android سسٹم"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"ذاتی پروفائل پر سوئچ کریں"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"دفتری پروفائل پر سوئچ کریں"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"ذاتی <xliff:g id="APP_NAME">%1$s</xliff:g> پر سوئچ کریں"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"دفتری <xliff:g id="APP_NAME">%1$s</xliff:g> پر سوئچ کریں"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"رابطے"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"اپنے رابطوں تک رسائی حاصل کریں"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"مقام"</string>
@@ -364,11 +366,11 @@
     <string name="permlab_receiveMms" msgid="4000650116674380275">"‏متنی پیغامات (MMS) حاصل کریں"</string>
     <string name="permdesc_receiveMms" msgid="958102423732219710">"‏ایپ کو MMS پیغامات حاصل اور ان پر کارروائی کرنے کی اجازت دیتا ہے۔ اس کا مطلب ہے کہ ایپ آپ کے آلے پر مرسلہ پیغامات آپ کو دکھائے بغیر ان پر نگاہ رکھ یا انہیں حذف کرسکتی ہے۔"</string>
     <string name="permlab_bindCellBroadcastService" msgid="586746677002040651">"سیل کے نشریاتی پیغامات فارورڈ کریں"</string>
-    <string name="permdesc_bindCellBroadcastService" msgid="6540910200973641606">"سیل کی نشریاتی پیغامات کے موصول ہوتے ہی فارورڈ کرنے کے لیے ایپ کو سیل کے نشریاتی ماڈیول میں پابندی لگانے کی اجازت دیں۔ سیل کی نشریاتی الرٹس آپ کو ہنگامی حالات سے مطلع کرنے کیلئے کچھ مقامات میں مہیا کی جاتی ہیں۔ نقصان دہ ایپس کوئی ہنگامی سیل براڈ کاسٹ موصول ہونے پر آپ کے آلے کی کارکردگی یا عمل میں مداخلت کر سکتی ہیں۔"</string>
+    <string name="permdesc_bindCellBroadcastService" msgid="6540910200973641606">"سیل کی نشریاتی پیغامات کے موصول ہوتے ہی فارورڈ کرنے کے لیے ایپ کو سیل کے نشریاتی ماڈیول میں پابندی لگانے کی اجازت دیں۔ سیل کی نشریاتی الرٹس آپ کو ایمرجنسی حالات سے مطلع کرنے کیلئے کچھ مقامات میں مہیا کی جاتی ہیں۔ نقصان دہ ایپس کوئی ایمرجنسی سیل براڈ کاسٹ موصول ہونے پر آپ کے آلے کی کارکردگی یا عمل میں مداخلت کر سکتی ہیں۔"</string>
     <string name="permlab_manageOngoingCalls" msgid="281244770664231782">"جاری کالز کا نظم کریں"</string>
     <string name="permdesc_manageOngoingCalls" msgid="7003138133829915265">"اس سے ایپ کو آپ کے آلے پر جاری کالز کے بارے میں تفصیلات دیکھنے اور ان کالز کو کنٹرول کرنے کی اجازت ملتی ہے۔"</string>
     <string name="permlab_readCellBroadcasts" msgid="5869884450872137693">"سیل کے نشریاتی پیغامات پڑھیں"</string>
-    <string name="permdesc_readCellBroadcasts" msgid="672513437331980168">"ایپ کو آپ کے آلے کو موصولہ سیل کے نشریاتی پیغامات پڑھنے کی اجازت دیتا ہے۔ سیل کی نشریاتی الرٹس آپ کو ہنگامی حالات سے مطلع کرنے کیلئے کچھ مقامات میں مہیا کی جاتی ہیں۔ نقصان دہ ایپس کوئی ہنگامی سیل کا نشریہ موصول ہونے پر آپ کے آلے کی کارکردگی یا عمل میں خلل ڈال سکتی ہیں۔"</string>
+    <string name="permdesc_readCellBroadcasts" msgid="672513437331980168">"ایپ کو آپ کے آلے کو موصولہ سیل کے نشریاتی پیغامات پڑھنے کی اجازت دیتا ہے۔ سیل کی نشریاتی الرٹس آپ کو ایمرجنسی حالات سے مطلع کرنے کیلئے کچھ مقامات میں مہیا کی جاتی ہیں۔ نقصان دہ ایپس کوئی ایمرجنسی سیل کا نشریہ موصول ہونے پر آپ کے آلے کی کارکردگی یا عمل میں خلل ڈال سکتی ہیں۔"</string>
     <string name="permlab_subscribedFeedsRead" msgid="217624769238425461">"سبسکرائب کردہ فیڈز پڑھیں"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="6911349196661811865">"ایپ کو فی الحال مطابقت پذیر کیے ہوئے فیڈز کے بارے میں تفصیلات حاصل کرنے کی اجازت دیتا ہے۔"</string>
     <string name="permlab_sendSms" msgid="7757368721742014252">"‏SMS پیغامات بھیجیں اور دیکھیں"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"ایپ کو وائبریٹر کنٹرول کرنے کی اجازت دیتا ہے۔"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"ایپ کو وائبریٹر اسٹیٹ تک رسائی حاصل کرنے کی اجازت دیتا ہے۔"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"براہ راست فون نمبرز پر کال کریں"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"ایپ کو آپ کی مداخلت کے بغیر فون نمبروں پر کال کرنے کی اجازت دیتا ہے۔ اس کے نتیجے میں غیر متوقع چارجز یا کالیں ہوسکتی ہیں۔ نوٹ کرلیں کہ یہ ایپ کو ہنگامی نمبروں پر کال کرنے کی اجازت نہیں دیتا ہے۔ نقصان دہ ایپس آپ کی تصدیق کے بغیر کالیں کرکے آپ کی رقم صرف کروا سکتے ہیں۔"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"ایپ کو آپ کی مداخلت کے بغیر فون نمبرز پر کال کرنے کی سہولت حاصل ہوتی ہے۔ اس کی وجہ سے غیر متوقع چارجز وصول کئے جا سکتے ہیں یا غیر متوقع کالز موصول ہو سکتی ہیں۔ یاد رکھیں کہ اس سے ایپ کو ایمرجنسی نمبرز پر کال کرنے کی سہولت حاصل نہیں ہوتی ہے۔ نقصان دہ ایپس آپ کی تصدیق کے بغیر کالز کر کے آپ کی رقم خرچ کروا سکتی ہیں یا کیریئر کوڈز ڈائل کر سکتی ہیں جس سے اِن کمنگ کالز خودکار طور پر دوسرے نمبر پر فارورڈ ہو جاتی ہیں۔"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"‏IMS کال سروس تک رسائی حاصل کریں"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"‏آپ کی مداخلت کے بغیر کالیں کرنے کیلئے ایپ کو IMS سروس استعمال کرنے کی اجازت دیتی ہے۔"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"فون کے اسٹیٹس اور شناخت کو پڑھیں"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"‏ایپ کو رجسٹرشدہ ایڈز اور روٹ ڈسٹنیشن جیسی ترجیح شدہ nfc ادائیگی سروس کی معلومات حاصل کرنے کی اجازت دیتا ہے۔"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"‏Near Field کمیونیکیشن کنٹرول کریں"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"‏ایپ کو Near Field Communication (NFC)‎ ٹیگز، کارڈز اور ریڈرز کے ساتھ مواصلت کرنے کی اجازت دیٹا ہے۔"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"محفوظ عنصر کے ٹرانزیکشن کا ایونٹ"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"ایپ کو ایک محفوظ عنصر پر ہونے والے ٹرانزیکشنز کے بارے میں معلومات حاصل کرنے کی اجازت دیتا ہے۔"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"اپنے اسکرین لاک کو غیر فعال کریں"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"ایپ کو کلیدی لاک اور کسی بھی متعلقہ پاس ورڈ سیکیورٹی کو غیر فعال کرنے کی اجازت دیتا ہے۔ مثلاً، کوئی آنے والی فون کال موصول ہونے کے وقت فون کلیدی لاک کو غیر فعال کرتا ہے، پھر کال پوری ہوجانے پر کلیدی لاک کو دوبارہ فعال کردیتا ہے۔"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"اسکرین لاک کی پیچیدگی کی درخواست کریں"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"بایو میٹرکس یا اسکرین لاک استعمال کریں"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"توثیق کریں کہ یہ آپ ہیں"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"جاری رکھنے کیلئے اپنا بایو میٹرک استعمال کریں"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"جاری رکھنے کے لیے اپنا فنگر پرنٹ استعمال کریں"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"جاری رکھنے کے لیے اپنے چہرے کا استعمال کریں"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"جاری رکھنے کے لیے اپنے بایو میٹرک اور اسکرین لاک کا استعمال کریں"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"بایومیٹرک ہارڈ ویئر دستیاب نہیں ہے"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"تصدیق کا عمل منسوخ ہو گیا"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"تسلیم شدہ نہیں ہے"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"چہرے کی شناخت نہیں ہو سکی"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"تصدیق کا عمل منسوخ ہو گیا"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"کوئی پن، پیٹرن، یا پاس ورڈ سیٹ نہیں ہے"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"خرابی کی توثیق ہو رہی ہے"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"چہرے پر ہونے والی کارروائی منسوخ ہو گئی۔"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"صارف نے فیس اَنلاک کو منسوخ کر دیا"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"کافی زیادہ کوششیں کی گئیں۔ دوبارہ کوشش کریں۔"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"کافی زیادہ کوششیں۔ فیس اَنلاک دستیاب نہیں ہے۔"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"کافی زیادہ کوششیں۔ اس کے بجائے اسکرین لاک درج کریں۔"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"چہرے کی توثیق نہیں کی جا سکی۔ پھر آزمائيں۔"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"آپ نے فیس اَنلاک کو سیٹ نہیں کیا ہے"</string>
@@ -958,13 +964,13 @@
     <string name="keyguard_password_enter_pin_password_code" msgid="7792964196473964340">"‏غیر مقفل کرنے کیلئے PIN ٹائپ کریں"</string>
     <string name="keyguard_password_wrong_pin_code" msgid="8583732939138432793">"‏غلط PIN کوڈ۔"</string>
     <string name="keyguard_label_text" msgid="3841953694564168384">"غیر مقفل کرنے کیلئے، مینیو پھر 0 دبائیں۔"</string>
-    <string name="emergency_call_dialog_number_for_display" msgid="2978165477085612673">"ہنگامی نمبر"</string>
+    <string name="emergency_call_dialog_number_for_display" msgid="2978165477085612673">"ایمرجنسی نمبر"</string>
     <string name="lockscreen_carrier_default" msgid="6192313772955399160">"کوئی سروس نہیں ہے"</string>
     <string name="lockscreen_screen_locked" msgid="7364905540516041817">"اسکرین مقفل ہے۔"</string>
-    <string name="lockscreen_instructions_when_pattern_enabled" msgid="7982445492532123308">"غیر مقفل کرنے کیلئے مینیو دبائیں یا ہنگامی کال کریں۔"</string>
+    <string name="lockscreen_instructions_when_pattern_enabled" msgid="7982445492532123308">"غیر مقفل کرنے کیلئے مینیو دبائیں یا ایمرجنسی کال کریں۔"</string>
     <string name="lockscreen_instructions_when_pattern_disabled" msgid="7434061749374801753">"غیر مقفل کرنے کیلئے مینیو دبائیں۔"</string>
     <string name="lockscreen_pattern_instructions" msgid="3169991838169244941">"غیر مقفل کرنے کیلئے پیٹرن کو ڈرا کریں"</string>
-    <string name="lockscreen_emergency_call" msgid="7500692654885445299">"ہنگامی"</string>
+    <string name="lockscreen_emergency_call" msgid="7500692654885445299">"ایمرجنسی"</string>
     <string name="lockscreen_return_to_call" msgid="3156883574692006382">"کال پر واپس جائیں"</string>
     <string name="lockscreen_pattern_correct" msgid="8050630103651508582">"صحیح!"</string>
     <string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"دوبارہ کوشش کریں"</string>
@@ -986,7 +992,7 @@
     <string name="lockscreen_transport_stop_description" msgid="1449552232598355348">"روکیں"</string>
     <string name="lockscreen_transport_rew_description" msgid="7680106856221622779">"ریوائینڈ کریں"</string>
     <string name="lockscreen_transport_ffw_description" msgid="4763794746640196772">"تیزی سے فارورڈ کریں"</string>
-    <string name="emergency_calls_only" msgid="3057351206678279851">"صرف ہنگامی کالز"</string>
+    <string name="emergency_calls_only" msgid="3057351206678279851">"صرف ایمرجنسی کالز"</string>
     <string name="lockscreen_network_locked_message" msgid="2814046965899249635">"نیٹ ورک مقفل ہو گیا"</string>
     <string name="lockscreen_sim_puk_locked_message" msgid="2867953953604224166">"‏آپ کا SIM ‏PUK مقفل ہے۔"</string>
     <string name="lockscreen_sim_puk_locked_instructions" msgid="5307979043730860995">"رہنمائے صارف دیکھیں یا کسٹمر کیئر سے رابطہ کریں۔"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"مسترد کریں"</string>
     <string name="select_input_method" msgid="3971267998568587025">"ان پٹ کا طریقہ منتخب کریں"</string>
     <string name="show_ime" msgid="6406112007347443383">"‏جب فزیکل کی بورڈ فعال ہو تو IME کو اسکرین پر رکھیں"</string>
-    <string name="hardware" msgid="1800597768237606953">"ورچوئل کی بورڈ دکھائیں"</string>
+    <string name="hardware" msgid="3611039921284836033">"آن اسکرین کی بورڈ استعمال کریں"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"<xliff:g id="DEVICE_NAME">%s</xliff:g> کنفیگر کریں"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"فزیکل کی بورڈز کنفیگر کریں"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"زبان اور لے آؤٹ منتخب کرنے کیلئے تھپتھپائیں"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"ہٹائیں"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"والیوم کو تجویز کردہ سطح سے زیادہ کریں؟\n\nزیادہ وقت تک اونچی آواز میں سننے سے آپ کی سماعت کو نقصان پہنچ سکتا ہے۔"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"وارننگ،\nآپ بلند آواز کے سگنلز کی حد سے تجاوز کر چکے ہیں جنہیں ایک ہفتے میں کوئی ہیڈ فونز پر محفوظ طریقے سے سن سکتا ہے۔\n\nاس حد سے تجاوز کرنے سے آپ کی سماعت کو مستقل طور پر نقصان پہنچے گا۔"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"وارننگ،\nآپ بلند آواز کے سگنلز کی حد سے 5 گنا تجاوز کر چکے ہیں جنہیں ایک ہفتے میں کوئی ہیڈ فونز پر محفوظ طریقے سے سن سکتا ہے۔\n\nآپ کی سماعت کی حفاظت کے لیے والیوم کو کم کر دیا گیا ہے۔"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"جس سطح پر آپ میڈیا کو سن رہے ہیں اس پر طویل عرصے تک برقرار رہنے کے نتیجے میں سماعت کو نقصان پہنچ سکتا ہے۔\n\nاس سطح پر طویل عرصے تک چلانے سے آپ کی سماعت کو نقصان پہنچ سکتا ہے۔"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"وارننگ،\nآپ فی الحال غیر محفوظ سطح پر چلائے گئے مواد کو بلند آواز میں سن رہے ہیں۔\n\nاس بلند آواز کو مسلسل سننے سے آپ کی سماعت کو مستقل طور پر نقصان پہنچے گا۔"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"اونچی آواز میں سننا جاری رکھیں؟\n\nہیڈ فون کا والیوم تجویز کردہ وقت سے زیادہ دیر تک بلند رہا ہے، جو آپ کی سماعت کو نقصان پہنچا سکتا ہے"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"تیز آواز کا پتہ چلا\n\nہیڈ فون کا والیوم تجویز کردہ سے زیادہ بلند رہا ہے، جو آپ کی سماعت کو نقصان پہنچا سکتا ہے"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"ایکسیسبیلٹی شارٹ کٹ استعمال کریں؟"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"شارٹ کٹ آن ہونے پر، 3 سیکنڈ تک دونوں والیوم بٹنز کو دبانے سے ایک ایکسیسبیلٹی خصوصیت شروع ہو جائے گی۔"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"ایکسیسبیلٹی خصوصیات کے لیے شارٹ کٹ آن کریں؟"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"خارج ہونے کیلئے اوپر سے نیچے سوائپ کریں۔"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"سمجھ آ گئی"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"بہتر منظر کے لیے گھمائیں"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"بہتر منظر کے لیے اسپلٹ اسکرین سے باہر نکلیں"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"بہتر منظر کے لیے <xliff:g id="NAME">%s</xliff:g> کو فُل اسکرین میں کھولیں"</string>
     <string name="done_label" msgid="7283767013231718521">"ہو گیا"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"گھنٹوں کا سرکلر سلائیڈر"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"منٹس سرکلر سلائیڈر"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"ایپ دستیاب نہیں ہے"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> ابھی دستیاب نہیں ہے۔"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> دستیاب نہیں ہے"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"اجازت درکار ہے"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"اجازت کی درخواست دبا دی گئی"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"‏یہ ایپ اضافی اجازتوں کی درخواست کر رہی ہے، لیکن سلسلہ بندی کے سیشن میں اجازتیں نہیں دی جا سکتیں۔ پہلے اپنے Android TV آلہ پر اجازت دیں۔"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"یہ ایپ اضافی اجازتوں کی درخواست کر رہی ہے، لیکن سلسلہ بندی کے سیشن میں اجازتیں نہیں دی جا سکتیں۔ پہلے اپنے ٹیبلیٹ پر اجازت دیں۔"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"یہ ایپ اضافی اجازتوں کی درخواست کر رہی ہے، لیکن سلسلہ بندی کے سیشن میں اجازتیں نہیں دی جا سکتیں۔ پہلے اپنے فون پر اجازت دیں۔"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"‏یہ ایپ Android کے پرانے ورژن کے لیے بنائی گئی تھی۔ ہو سکتا ہے یہ ٹھیک سے کام نہ کرے اور اس میں تازہ ترین سیکیورٹی اور رازداری کے تحفظات شامل نہ ہوں۔ اپ ڈیٹ کے لیے چیک کریں یا ایپ کے ڈویلپر سے رابطہ کریں۔"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"اپ ڈیٹ چیک کریں"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"‏یہ ایپ Android کے تازہ ترین ورژن کے ساتھ مطابقت پذیر نہیں ہے۔ اپ ڈیٹ کے لیے چیک کریں یا ایپ کے ڈویلپر سے رابطہ کریں۔"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"آپ کے پاس نئے پیغامات ہیں"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"‏دیکھنے کیلئے SMS ایپ کھولیں"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"کچھ فعالیت محدود ہو سکتی ہے"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"اس مواد کو ورک ایپس کے ساتھ نہیں کھولا جا سکتا"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"اس مواد کا اشتراک ذاتی ایپس کے ساتھ نہیں کیا جا سکتا"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"اس مواد کو ذاتی ایپس کے ساتھ نہیں کھولا جا سکتا"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"دفتری پروفائل روک دی گئی ہے"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"آن کرنے کیلئے تھپتھپائیں"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"ورک ایپس موقوف ہیں"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"غیر موقوف کریں"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"کوئی ورک ایپ نہیں"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"کوئی ذاتی ایپ نہیں"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"دفتری <xliff:g id="APP">%s</xliff:g> کھولیں؟"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"ذاتی <xliff:g id="APP">%s</xliff:g> میں کھولیں؟"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"دفتری <xliff:g id="APP">%s</xliff:g> میں کھولیں؟"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"ورک ایپ سے کال کریں؟"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"ورک ایپ پر سوئچ کریں؟"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"آپ کی تنظیم آپ کو صرف ورک ایپس سے کالز کرنے کی اجازت دیتی ہے"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"آپ کی تنظیم آپ کو صرف ورک ایپس سے پیغامات بھیجنے کی اجازت دیتی ہے"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ذاتی براؤزر استعمال کریں"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"ورک براؤزر استعمال کریں"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"کال کریں"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"سوئچ کریں"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"‏SIM نیٹ ورک غیر مقفل کرنے کا PIN"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"‏SIM نیٹ ورک سب سیٹ کو غیر مقفل کرنے کا PIN"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"‏SIM کارپوریٹ کو غیر مقفل کرنے کا PIN"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"آپ کے <xliff:g id="DEVICE">%1$s</xliff:g> سے فون کے کیمرا تک رسائی حاصل نہیں کی جا سکتی"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"آپ کے <xliff:g id="DEVICE">%1$s</xliff:g> سے ٹیبلیٹ کے کیمرا تک رسائی حاصل نہیں کی جا سکتی"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"سلسلہ بندی کے دوران اس تک رسائی حاصل نہیں کی جا سکتی۔ اس کے بجائے اپنے فون پر کوشش کریں۔"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"سلسلہ بندی کے دوران تصویر میں تصویر نہیں دیکھ سکتے"</string>
     <string name="system_locale_title" msgid="711882686834677268">"سسٹم ڈیفالٹ"</string>
     <string name="default_card_name" msgid="9198284935962911468">"کارڈ <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"گھڑیوں کا نظم کرنے کے لیے ساتھی ایپ کی گھڑی کی پروفائل کی اجازت"</string>
@@ -2319,14 +2333,14 @@
     <string name="mic_access_off_toast" msgid="8111040892954242437">"مائیکروفون مسدود ہے"</string>
     <string name="concurrent_display_notification_name" msgid="1526911253558311131">"دوہری اسکرین"</string>
     <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"دوہری اسکرین آن ہے"</string>
-    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> مواد دکھانے کیلئے دونوں ڈسپلیز استعمال کر رہی ہے"</string>
+    <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"مواد دکھانے کیلئے <xliff:g id="APP_NAME">%1$s</xliff:g> دونوں ڈسپلیز استعمال کر رہی ہے"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"آلہ بہت زیادہ گرم ہے"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"دوہری اسکرین دستیاب نہیں ہے کیونکہ آپ کا فون بہت زیادہ گرم ہو رہا ہے"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"‏Dual Screen دستیاب نہیں ہے"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"‏Dual Screen دستیاب نہیں ہے کیونکہ بیٹری سیور آن ہے۔ آپ اسے ترتیبات میں آف کر سکتے ہیں۔"</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"ترتیبات پر جائیں"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"آف کریں"</string>
-    <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> میں کنفیگر کیا گیا"</string>
+    <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"‫<xliff:g id="DEVICE_NAME">%s</xliff:g> کنفیگر کیا گیا"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"کی بورڈ لے آؤٹ <xliff:g id="LAYOUT_1">%s</xliff:g> پر سیٹ ہے۔ تبدیل کرنے کیلئے تھپتھپائیں۔"</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"کی بورڈ لے آؤٹ <xliff:g id="LAYOUT_1">%1$s</xliff:g>، <xliff:g id="LAYOUT_2">%2$s</xliff:g> پر سیٹ ہے۔ تبدیل کرنے کیلئے تھپتھپائیں۔"</string>
     <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"کی بورڈ لے آؤٹ <xliff:g id="LAYOUT_1">%1$s</xliff:g>، <xliff:g id="LAYOUT_2">%2$s</xliff:g>، <xliff:g id="LAYOUT_3">%3$s</xliff:g> پر سیٹ ہے۔ تبدیل کرنے کیلئے تھپتھپائیں۔"</string>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index bf71e93..a65b478 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android tizimi"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Shaxsiy profilga almashtirish"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Ishchi profilga almashtirish"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Shaxsiy <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga almashish"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Ishga oid <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga almashish"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Kontaktlar"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"kontaktlarga kirish"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Joylashuv"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Ilova tebranishli signallarni boshqarishi mumkin."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ilovaga tebranish holatini aniqlash ruxsatini beradi."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"telefon raqamlariga tog‘ridan to‘g‘ri qo‘ng‘iroq qilish"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Ilovaga sizning yordamingizsiz telefonga qo‘ng‘iroq qilish imkonini beradi. Bu kutilmagan qo‘ng‘iroqlarni amalga oshirishi yoki ortiqcha to‘lovlarni yuzaga keltirishi mumkin. Shunga e’tibor qilinki, u favqulodda telefon raqamlariga qo‘ng‘iroqlar qilishga ruxsat bermaydi. Zararli ilovalar sizdan so‘ramasdan qo‘ng‘iroqlarni amalga oshirib, pulingizni sarflashi mumkin."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Ilova sizning ishtirokingizsiz raqamlarga telefon qilishi mumkin. Bu kutilmagan toʻlovlar yoki chaqiruvlarga olib kelishi mumkin. Yodda tuting, bu favqulodda xizmat raqamlariga telefon qilishiga ruxsat bermaydi. Zararli ilovalar beruxsat telefon qilishi yoki kiruvchi chaqiruvlarni avtomatik ravishda boshqa raqamga yoʻnaltiruvchi operator kodlarini terish orqali xarajatlaringizni oshirishi mumkin."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"IMS qo‘ng‘iroq xizmatiga kirish"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Ilovaga sizning ishtirokingizsiz qo‘ng‘iroqlarni amalga oshirish uchun IMS xizmatidan foydalanishga ruxsat beradi."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"telefon holati haqidagi ma’lumotlarni olish"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Bu ilovaga asosiy NFC toʻlov xizmati haqidagi axborotni olish imkonini beradi (masalan, qayd qilingan AID identifikatorlari va marshrutning yakuniy manzili)."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"NFC modulini boshqarish"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Ilova qisqa masofali aloqa (NFC) texnologiyasi yordamida NFC yorliqlari, kartalar va o‘qish moslamalari bilan ma’lumot almashishi mumkin."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Secure Element tranzaksiya hodisasi"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Ilovaga Secure Element orqali amalga oshuvchi tranzaksiyalar axborotini olishga ruxsat beradi."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"ekran qulfini o‘chirib qo‘yish"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Ilovaga ekran qulfini va har qanday parol  yordamidagi xavfsizlik himoyalarini o‘chirishga ruxsat beradi. Masalan, kirish qo‘ng‘irog‘ida telefon ekran qulfini o‘chiradi va qo‘ng‘iroq tugashi bilan qulfni yoqadi."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"ekran qulfi qiyinligi darajasini talab qilish"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Biometrika yoki ekran qulfi"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Oʻzingizni taniting"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Davom etish uchun biometrik tasdiqlang"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Davom etish uchun barmoq izingizdan foydalaning"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Yuz tekshiruvi bilan davom eting"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Davom etish uchun biometrika yoki ekran qulfidan foydalaning"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Biometrik sensor ishlamayapti"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Autentifikatsiya bekor qilindi"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Aniqlanmadi"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Yuz aniqlanmadi"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Autentifikatsiya bekor qilindi"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN kod, grafik kalit yoki parol sozlanmagan"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Autentifikatsiya amalga oshmadi"</string>
@@ -684,7 +691,7 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Telefonni chaproq tuting"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Telefonni oʻngroq tuting"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Qurilmaga tik qarang."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Yuzingiz koʻrinmayapti. Telefonni koʻz balandligida tuting."</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Yuz koʻrinmayapti. Telefonni koʻz darajasida tuting."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Ortiqcha harakatlanmoqda. Qimirlatmasdan ushlang."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Yuzingizni qaytadan qayd qildiring."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Yuz aniqlanmadi. Qayta urining."</string>
@@ -692,7 +699,7 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Telefonga tik qarab turing"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Telefonga tik qarab turing"</string>
     <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_obscured" msgid="4917643294953326639">"Yuzingiz yaxshi koʻrinmayapti."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Ekranning yuqori qismini, shuningdek, qora panelni ham tozalang"</string>
     <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
     <skip />
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Yuz qismi yopilib qolgan. Yuzingiz toʻliq koʻrinishi kerak."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Yuzingiz tasdiqlanmadi. Qurilma ishlamayapti."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Yuzni aniqlash bekor qilindi."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Yuz bilan ochishni foydalanuvchi bekor qildi"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Juda ko‘p urinildi. Keyinroq qaytadan urining."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Urinishlar soni oshib ketdi. Yuz bilan ochilmaydi."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Juda koʻp urinildi. Ekran qulfi bilan oching."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Yuzingiz tasdiqlanmadi. Qaytadan urining."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Hali yuz bilan ochishni sozlamagansiz"</string>
@@ -1255,7 +1261,7 @@
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Ilovalar ishga tushirilmoqda."</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"Tizimni yuklashni tugatish."</string>
     <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"Quvvat tugmasini bosdingiz — bu odatda ekranni oʻchiradi.\n\nBarmoq izini qoʻshish vaqtida tugmaga yengilgina tegining."</string>
-    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Sozlashni yakunlash uchun ekranni oʻchiring"</string>
+    <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"Yakunlash uchun ekranni oʻchiring"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"Faolsizlantirish"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"Barmoq izi tasdiqlashda davom etilsinmi?"</string>
     <string name="fp_power_button_bp_message" msgid="2983163038168903393">"Quvvat tugmasini bosdingiz. Bu odatda ekranni oʻchiradi.\n\nBarmoq izingizni tasdiqlash uchun tugmaga yengilgina tegining."</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"RAD ETISH"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Matn kiritish usulini tanlang"</string>
     <string name="show_ime" msgid="6406112007347443383">"Tashqi klaviatura ulanganida ekranda chiqib turadi"</string>
-    <string name="hardware" msgid="1800597768237606953">"Virtual klaviatura"</string>
+    <string name="hardware" msgid="3611039921284836033">"Ekrandagi klaviatura"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Sozlang: <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Tashqi klaviaturalarni sozlang"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Til va sxemani belgilash uchun bosing"</string>
@@ -1618,7 +1624,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"Planshet"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Telefon"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Taglik karnaylar"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Dok karnaylar"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Tashqi qurilma"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Quloq karnaychalari"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Olib tashlash"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Tovush balandligi tavsiya etilgan darajadan ham yuqori qilinsinmi?\n\nUzoq vaqt davomida baland ovozda tinglash eshitish qobiliyatingizga salbiy ta’sir ko‘rsatishi mumkin."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Ogohlantirish\nQuloqlik orqali bir hafta ichida xavfsiz tinglash mumkin boʻlgan baland ovozli signallar miqdoridan oshib ketdingiz.\n\nBu chegaradan oshib ketish eshitish qobiliyatingizni butunlay buzadi."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Ogohlantirish\nQuloqlik orqali bir hafta ichida xavfsiz tinglash mumkin boʻlgan baland ovozli signallar miqdoridan 5 baravar oshib ketdingiz.\n\nEshitish qobiliyatingizni himoya qilish uchun tovush balandligi pasaytirildi."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Uzoq vaqt davomida bunday balandlikda media fayllarni tinglash eshitish qobiliyatingiz buzilishiga olib kelishi mumkin.\n\nUzoq vaqt davomida bu darajada ijroni davom ettirish eshitishingizga zarar yetkazishi mumkin."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Ogohlantirish\nHozir xavfli darajada baland ovozli kontentni tinglayapsiz.\n\nBu baland tovushda tinglashda davom etsangiz, eshitish qobiliyatingiz butunlay buziladi."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Baland tovushda tinglayapsizmi?\n\nQuloqlik tavsiya etilganidan uzoqroq vaqt baland tovushda ishlamoqda va eshitishga zarar yetkazishi mumkin"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Baland tovush aniqlandi\n\nQuloqlik tavsiya etilganidan uzoqroq vaqt baland tovushda ishlamoqda va eshitishga zarar yetkazishi mumkin"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Tezkor ishga tushirishdan foydalanilsinmi?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Qulayliklar funksiyasidan foydalanish uchun u yoniqligida ikkala tovush tugmasini 3 soniya bosib turing."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Qulayliklar uchun tezkor tugma yoqilsinmi?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Chiqish uchun tepadan pastga torting."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"OK"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Yaxshiroq koʻrish uchun kamerani buring"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Yaxshiroq koʻrish uchun ajratilgan ekran rejimidan chiqing"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Yaxshiroq koʻrish uchun butun ekranda <xliff:g id="NAME">%s</xliff:g> ilovasini oching"</string>
     <string name="done_label" msgid="7283767013231718521">"Tayyor"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Doiradan soatni tanlang"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Doiradan daqiqani tanlang"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Ilova ishlamayapti"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"Ayni vaqtda <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasi ishlamayapti."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> kanali ish faoliyatida emas"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Ruxsat zarur"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Ruxsat talabi bostirildi"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Bu ilova qoʻshimcha ruxsatlar talab qilmoqda, lekin ruxsatlar striming seansida berilmaydi. Avval Android TV qurilmangizga ruxsat bering."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Bu ilova qoʻshimcha ruxsatlar talab qilmoqda, lekin ruxsatlar striming seansida berilmaydi. Avval planshetingizda ruxsat bering."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Bu ilova qoʻshimcha ruxsatlar talab qilmoqda, lekin ruxsatlar striming seansida berilmaydi. Avval telefoningizda ruxsat bering."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Bu <xliff:g id="DEVICE">%1$s</xliff:g> qurilmangizda ochilmaydi. Telefon orqali urininb koʻring."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Bu ilova Androidning eskiroq versiyasiga moʻljallab ishlab chiqilgan. Xatosiz ishlashi mumkin, lekin xavfsizlik va maxfiylik himoyasiga oid oxirgi yangilanishlarini olmaydi. Yangilanish borligini tekshiring yoki ilova ishlab chiquvchisiga murojaat qiling."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Yangilanish borligini tekshirish"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Bu ilova Androidning oxirgi versiyasiga mos emas. Yangilanish borligini tekshiring yoki ilova ishlab chiquvchisiga murojaat qiling."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Sizga yangi SMS keldi"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Ko‘rish uchun SMS ilovasini oching"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Ayrim funksiyalar ishlamasligi mumkin"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Bu kontent ishga oid ilovalar bilan ochilmaydi"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Bu kontent shaxsiy ilovalar bilan ulashilmaydi"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Bu kontent shaxsiy ilovalar bilan ochilmaydi"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Ish profili pauzada"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Yoqish uchun bosing"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Ishga oid ilovalar pauza qilingan"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Davom ettirish"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ishga oid ilovalar topilmadi"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Shaxsiy ilovalar topilmadi"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Ishga oid <xliff:g id="APP">%s</xliff:g> ochilsinmi?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"<xliff:g id="APP">%s</xliff:g> shaxsiy profilda ochilsinmi?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"<xliff:g id="APP">%s</xliff:g> ish profilida ochilsinmi?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Ishga oid ilova orqali chaqirilsinmi?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Ishga oid ilovaga almashtirilsinmi?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Tashkilotingiz faqat ishga oid ilovalar orqali chaqiruvga ruxsat beradi"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Tashkilotingiz faqat ishga oid ilovalar orqali xabarlar yuborishga ruxsat beradi"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Shaxsiy brauzerdan foydalanish"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Ishga oid brauzerdan foydalanish"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Chaqiruv"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Almashish"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM kartaning tarmoqdagi qulfini ochish uchun PIN kod"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM karta tarmoq qismini qulfdan chiqarish uchun PIN kod"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Korporativ SIM kartalar qulfini ochish uchun PIN kod"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"<xliff:g id="DEVICE">%1$s</xliff:g> qurilmasidan telefonning kamerasiga kirish imkonsiz"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"<xliff:g id="DEVICE">%1$s</xliff:g> qurilmasidan planshetning kamerasiga kirish imkonsiz"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Bu kontent striming vaqtida ochilmaydi. Telefon orqali urininb koʻring."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Striming vaqtida tasvir ustida tasvir rejimida koʻrib boʻlmaydi"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Tizim standarti"</string>
     <string name="default_card_name" msgid="9198284935962911468">"SIM KARTA <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Soatlarni boshqarish uchun hamroh Soat profiliga ruxsat"</string>
@@ -2317,7 +2331,7 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Hamroh ilovaga faol xizmatlarni fonda ishga tushirishga ruxsat beradi."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Mikrofon yoqildi"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Mikrofon bloklandi"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Ikki ekranli rejim"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Ikkita ekran"</string>
     <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Ikki ekranli rejim yoniq"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> kontentni ikkala ekranda chiqarmoqda"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Qurilma qizib ketdi"</string>
@@ -2325,7 +2339,7 @@
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Ikki ekranli rejim ishlamaydi"</string>
     <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Quvvatni tejash yoniqligi uchun hozir ikki ekranli rejim ishlamaydi. Buni Sozlamalarda faolsizlantirishingiz mumkin."</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"Sozlamalarni ochish"</string>
-    <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Faolsizlantirish"</string>
+    <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Oʻchirish"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"<xliff:g id="DEVICE_NAME">%s</xliff:g> sozlandi"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Klaviatura terilmasi bunga sozlandi: <xliff:g id="LAYOUT_1">%s</xliff:g>. Oʻzgartirish uchun ustiga bosing."</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Klaviatura terilmasi bunga sozlandi: <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Oʻzgartirish uchun ustiga bosing."</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index a7a5950..9c77299 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Hệ thống Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Chuyển sang hồ sơ cá nhân"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Chuyển sang hồ sơ công việc"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Chuyển sang <xliff:g id="APP_NAME">%1$s</xliff:g> cá nhân"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Chuyển sang <xliff:g id="APP_NAME">%1$s</xliff:g> công việc"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Danh bạ"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"truy cập vào danh bạ của bạn"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Vị trí"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Cho phép ứng dụng kiểm soát bộ rung."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Cho phép ứng dụng truy cập vào trạng thái bộ rung."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"gọi trực tiếp số điện thoại"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Cho phép ứng dụng gọi các số điện thoại mà không cần sự can thiệp của bạn. Việc này có thể dẫn đến các khoản phí hoặc cuộc gọi không mong muốn. Lưu ý rằng quyền này không cho phép ứng dụng gọi các số khẩn cấp. Các ứng dụng độc hại có thể khiến bạn tốn tiền do thực hiện cuộc gọi mà không cần sự xác nhận của bạn."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Cho phép ứng dụng gọi cho các số điện thoại mà không cần bạn phải can thiệp. Việc này có thể làm phát sinh các khoản phí hoặc cuộc gọi không mong muốn. Xin lưu ý rằng quyền này không cho phép ứng dụng gọi cho các số khẩn cấp. Các ứng dụng độc hại có thể khiến bạn bị mất tiền thông qua việc thực hiện cuộc gọi khi chưa có sự xác nhận của bạn, hoặc có thể quay số theo mã của nhà mạng, khiến các cuộc gọi đến bị tự động chuyển tiếp đến một số khác."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"truy cập dịch vụ gọi điện qua IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Cho phép ứng dụng sử dụng dịch vụ IMS để thực hiện cuộc gọi mà không có sự can thiệp của bạn."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"đọc trạng thái và nhận dạng của điện thoại"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Cho phép ứng dụng nhận thông tin về dịch vụ thanh toán qua công nghệ giao tiếp tầm gần mà bạn ưu tiên, chẳng hạn như các hình thức hỗ trợ đã đăng ký và điểm đến trong hành trình."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"kiểm soát Liên lạc trường gần"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Cho phép ứng dụng giao tiếp với thẻ Giao tiếp trường gần (NFC), thẻ và trình đọc."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Sự kiện giao dịch trên Phần tử bảo mật"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Cho phép ứng dụng nhận thông tin về giao dịch diễn ra trên Phần tử bảo mật."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"vô hiệu hóa khóa màn hình của bạn"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Cho phép ứng dụng tắt khóa phím và bất kỳ bảo mật mật khẩu được liên kết nào. Ví dụ: điện thoại tắt khóa phím khi nhận được cuộc gọi đến, sau đó bật lại khóa phím khi cuộc gọi kết thúc."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"cần biết độ phức tạp của khóa màn hình"</string>
@@ -614,20 +618,23 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Dùng dữ liệu sinh trắc học hoặc phương thức khóa màn hình"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Xác minh danh tính của bạn"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Dùng dữ liệu sinh trắc học của bạn để tiếp tục"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Hãy dùng vân tay để tiếp tục"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Hãy dùng khuôn mặt để tiếp tục"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Dùng dữ liệu sinh trắc học của bạn hoặc phương thức khóa màn hình để tiếp tục"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"Không có phần cứng sinh trắc học"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Đã hủy xác thực"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Không nhận dạng được"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Không nhận dạng được khuôn mặt"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Đã hủy xác thực"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Chưa đặt mã PIN, hình mở khóa hoặc mật khẩu"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Lỗi khi xác thực"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Dùng phương thức khóa màn hình"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Hãy nhập phương thức khóa màn hình của bạn để tiếp tục"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Nhấn chắc trên cảm biến"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Ấn mạnh lên cảm biến"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Không nhận dạng được vân tay. Hãy thử lại."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Hãy vệ sinh cảm biến vân tay rồi thử lại"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Vệ sinh cảm biến rồi thử lại"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Nhấn chắc trên cảm biến"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Ấn mạnh lên cảm biến"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Di chuyển ngón tay quá chậm. Vui lòng thử lại."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Hãy thử một vân tay khác"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Quá sáng"</string>
@@ -643,7 +650,7 @@
     <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Đã xác thực khuôn mặt, vui lòng nhấn để xác nhận"</string>
     <string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"Phần cứng vân tay không khả dụng."</string>
     <string name="fingerprint_error_no_space" msgid="7285481581905967580">"Không thể thiết lập vân tay"</string>
-    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Hết thời gian thiết lập vân tay. Hãy thử lại."</string>
+    <string name="fingerprint_error_timeout" msgid="7361192266621252164">"Hết thời gian chờ thiết lập vân tay. Hãy thử lại."</string>
     <string name="fingerprint_error_canceled" msgid="540026881380070750">"Thao tác dùng dấu vân tay bị hủy."</string>
     <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"Người dùng đã hủy thao tác dùng dấu vân tay."</string>
     <string name="fingerprint_error_lockout" msgid="6626753679019351368">"Bạn đã thử quá nhiều lần. Hãy dùng phương thức khoá màn hình."</string>
@@ -684,7 +691,7 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Đưa điện thoại sang bên trái"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Đưa điện thoại sang bên phải"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Vui lòng nhìn thẳng vào thiết bị."</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Không phát hiện thấy khuôn mặt của bạn. Hãy cầm điện thoại ngang tầm mắt"</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"Không thấy khuôn mặt. Hãy cầm điện thoại ngang tầm mắt."</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"Thiết bị di chuyển quá nhiều. Giữ yên thiết bị."</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"Vui lòng đăng ký lại khuôn mặt của bạn."</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"Không thể nhận dạng khuôn mặt. Hãy thử lại."</string>
@@ -692,15 +699,15 @@
     <string name="face_acquired_pan_too_extreme" msgid="5417928604710621088">"Nhìn thẳng vào điện thoại"</string>
     <string name="face_acquired_tilt_too_extreme" msgid="5715715666540716620">"Nhìn thẳng vào điện thoại"</string>
     <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_obscured" msgid="4917643294953326639">"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>
     <!-- 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>
+    <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Đã phát hiện thấy kính râm. Bạn phải cho thấy toàn bộ khuôn mặt."</string>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Khuôn mặt bị che. Bạn phải cho thấy toàn bộ khuôn mặt."</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"Không thể xác minh khuôn mặt. Phần cứng không có sẵn."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Đã hủy thao tác dùng khuôn mặt."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Người dùng đã hủy thao tác Mở khóa bằng khuôn mặt"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Bạn đã thử quá nhiều lần. Hãy thử lại sau."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Bạn đã thử quá nhiều lần. Không dùng được tính năng Mở khoá bằng khuôn mặt."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Bạn đã thử quá nhiều lần. Hãy nhập phương thức khóa màn hình."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Không thể xác minh khuôn mặt. Hãy thử lại."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Bạn chưa thiết lập tính năng Mở khóa bằng khuôn mặt"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"TỪ CHỐI"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Chọn phương thức nhập"</string>
     <string name="show_ime" msgid="6406112007347443383">"Hiện bàn phím ảo trên màn hình trong khi bàn phím vật lý đang hoạt động"</string>
-    <string name="hardware" msgid="1800597768237606953">"Hiện bàn phím ảo"</string>
+    <string name="hardware" msgid="3611039921284836033">"Sử dụng bàn phím ảo"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Định cấu hình <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Định cấu hình bàn phím vật lý"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Nhấn để chọn ngôn ngữ và bố cục"</string>
@@ -1618,7 +1624,7 @@
     <string name="default_audio_route_name" product="tablet" msgid="367936735632195517">"Máy tính bảng"</string>
     <string name="default_audio_route_name" product="tv" msgid="4908971385068087367">"TV"</string>
     <string name="default_audio_route_name" product="default" msgid="9213546147739983977">"Điện thoại"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Loa đế"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="1551166029093995289">"Loa kiêm đế sạc"</string>
     <string name="default_audio_route_name_external_device" msgid="8124229858618975">"Thiết bị bên ngoài"</string>
     <string name="default_audio_route_name_headphones" msgid="6954070994792640762">"Tai nghe"</string>
     <string name="default_audio_route_name_usb" msgid="895668743163316932">"USB"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Xóa"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Bạn tăng âm lượng lên quá mức khuyên dùng?\n\nViệc nghe ở mức âm lượng cao trong thời gian dài có thể gây tổn thương thính giác của bạn."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Cảnh báo,\nBạn đã vượt quá số lần nghe tín hiệu âm thanh lớn mà một người có thể nghe an toàn qua tai nghe trong một tuần.\n\nNếu vượt quá giới hạn này, thính lực của bạn sẽ bị tổn thương vĩnh viễn."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Cảnh báo,\nBạn đã vượt quá 5 lần nghe tín hiệu âm thanh lớn mà một người có thể nghe an toàn qua tai nghe trong một tuần.\n\nÂm lượng đã được giảm xuống để bảo vệ thính lực của bạn."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Mức âm lượng bạn đang nghe nội dung nghe nhìn có thể gây tổn thương thính lực khi duy trì trong thời gian dài.\n\nNếu bạn tiếp tục phát ở mức âm lượng này trong thời gian dài, thì thính lực của bạn có thể bị tổn thương."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Cảnh báo,\nBạn đang nghe nội dung ở mức âm lượng không an toàn.\n\nNếu bạn tiếp tục nghe ở mức âm lượng lớn như vậy, thì thính lực của bạn sẽ bị tổn thương vĩnh viễn."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Tiếp tục nghe ở mức âm lượng cao?\n\nBạn đã dùng tai nghe ở mức âm lượng cao lâu hơn khoảng thời gian khuyến nghị, điều này có thể gây tổn hại đến thính giác của bạn"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Đã phát hiện âm thanh lớn\n\nBạn đã dùng tai nghe ở mức âm lượng cao hơn khuyến nghị, điều này có thể gây tổn hại đến thính giác của bạn"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Sử dụng phím tắt Hỗ trợ tiếp cận?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Khi phím tắt này đang bật, thao tác nhấn cả hai nút âm lượng trong 3 giây sẽ mở tính năng hỗ trợ tiếp cận."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Bật phím tắt cho các tính năng hỗ trợ tiếp cận?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Để thoát, hãy vuốt từ trên cùng xuống dưới."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"OK"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Xoay để xem dễ hơn"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Thoát chế độ chia đôi màn hình để xem dễ hơn"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Mở <xliff:g id="NAME">%s</xliff:g> ở chế độ toàn màn hình để xem dễ hơn"</string>
     <string name="done_label" msgid="7283767013231718521">"Xong"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Thanh trượt giờ hình tròn"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Thanh trượt phút hình tròn"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Ứng dụng này không dùng được"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> hiện không dùng được."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"Không hỗ trợ <xliff:g id="ACTIVITY">%1$s</xliff:g>"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Cần có quyền"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Yêu cầu quyền đã bị chặn"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Ứng dụng này đang yêu cầu thêm quyền, nhưng bạn không thể cấp quyền trong một phiên truyền trực tuyến. Trước tiên, hãy cấp quyền trên thiết bị Android TV của bạn."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Ứng dụng này đang yêu cầu thêm quyền, nhưng bạn không thể cấp quyền trong một phiên truyền trực tuyến. Trước tiên, hãy cấp quyền trên máy tính bảng của bạn."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Ứng dụng này đang yêu cầu thêm quyền, nhưng bạn không thể cấp quyền trong một phiên truyền trực tuyến. Trước tiên, hãy cấp quyền trên điện thoại của bạn."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"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="deprecated_target_sdk_message" msgid="5246906284426844596">"Ứng dụng này được xây dựng cho một phiên bản Android cũ. Ứng dụng này có thể không hoạt động đúng cách và không có các biện pháp bảo vệ mới nhất về bảo mật và quyền riêng tư. Hãy kiểm tra để tìm bản cập nhật hoặc liên hệ với nhà phát triển của ứng dụng."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Kiểm tra để tìm bản cập nhật"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Ứng dụng này không tương thích với phiên bản Android mới nhất. Hãy kiểm tra để tìm bản cập nhật hoặc liên hệ với nhà phát triển của ứng dụng."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Bạn có tin nhắn mới"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Mở ứng dụng SMS để xem"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Một số chức năng có thể bị hạn chế"</string>
@@ -2125,7 +2133,7 @@
     <string name="chooser_no_direct_share_targets" msgid="1511722103987329028">"Không có gợi ý nào về người mà bạn có thể chia sẻ"</string>
     <string name="chooser_all_apps_button_label" msgid="3230427756238666328">"Danh sách ứng dụng"</string>
     <string name="usb_device_resolve_prompt_warn" msgid="325871329788064199">"Ứng dụng này chưa được cấp quyền ghi âm nhưng vẫn có thể ghi âm thông qua thiết bị USB này."</string>
-    <string name="accessibility_system_action_home_label" msgid="3234748160850301870">"Màn hình chính"</string>
+    <string name="accessibility_system_action_home_label" msgid="3234748160850301870">"Nhà"</string>
     <string name="accessibility_system_action_back_label" msgid="4205361367345537608">"Quay lại"</string>
     <string name="accessibility_system_action_recents_label" msgid="4782875610281649728">"Ứng dụng gần đây"</string>
     <string name="accessibility_system_action_notifications_label" msgid="6083767351772162010">"Thông báo"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Bạn không thể mở nội dung này bằng ứng dụng công việc"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Bạn không thể chia sẻ nội dung này bằng ứng dụng cá nhân"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Bạn không thể mở nội dung này bằng ứng dụng cá nhân"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Hồ sơ công việc đã bị tạm dừng"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Nhấn để bật"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Các ứng dụng công việc đã bị tạm dừng"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Bỏ tạm dừng"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Không có ứng dụng công việc"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Không có ứng dụng cá nhân"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Mở <xliff:g id="APP">%s</xliff:g> công việc?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Mở trong <xliff:g id="APP">%s</xliff:g> cá nhân?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Mở trong <xliff:g id="APP">%s</xliff:g> công việc?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Gọi bằng ứng dụng công việc?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Chuyển sang ứng dụng công việc?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Tổ chức của bạn chỉ cho phép bạn gọi điện bằng ứng dụng công việc"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Tổ chức của bạn chỉ cho phép bạn gửi tin nhắn bằng ứng dụng công việc"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Dùng trình duyệt cá nhân"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Dùng trình duyệt công việc"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Gọi"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Chuyển"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Mã PIN mở khóa mạng SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Mã PIN mở khóa tập con của mạng SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Mã PIN mở khóa SIM corporate"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Không truy cập được vào máy ảnh trên điện thoại từ <xliff:g id="DEVICE">%1$s</xliff:g> của bạn"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Không truy cập được vào máy ảnh trên máy tính bảng từ <xliff:g id="DEVICE">%1$s</xliff:g> của bạn"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Bạn không thể truy cập vào nội dung này trong khi phát trực tuyến. Hãy thử trên điện thoại."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Không thể xem video ở chế độ hình trong hình khi đang truyền trực tuyến"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Theo chế độ mặc định của hệ thống"</string>
     <string name="default_card_name" msgid="9198284935962911468">"THẺ <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Quyền sử dụng hồ sơ Đồng hồ của ứng dụng đồng hành để quản lý các đồng hồ"</string>
@@ -2317,8 +2331,8 @@
     <string name="permdesc_startForegroundServicesFromBackground" msgid="4071826571656001537">"Cho phép một ứng dụng đồng hành bắt đầu các dịch vụ trên nền trước từ nền."</string>
     <string name="mic_access_on_toast" msgid="2666925317663845156">"Micrô đang hoạt động"</string>
     <string name="mic_access_off_toast" msgid="8111040892954242437">"Micrô đang bị chặn"</string>
-    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Màn hình đôi"</string>
-    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Chế độ Màn hình đôi đang bật"</string>
+    <string name="concurrent_display_notification_name" msgid="1526911253558311131">"Dual screen"</string>
+    <string name="concurrent_display_notification_active_title" msgid="4892473462327943673">"Chế độ Dual screen bật"</string>
     <string name="concurrent_display_notification_active_content" msgid="5889355473710601270">"<xliff:g id="APP_NAME">%1$s</xliff:g> đang dùng cả hai màn hình để thể hiện nội dung"</string>
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"Thiết bị quá nóng"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Không bật được chế độ Màn hình đôi vì điện thoại của bạn quá nóng"</string>
@@ -2329,7 +2343,7 @@
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"Đã định cấu hình <xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Đã thiết lập bố cục bàn phím thành <xliff:g id="LAYOUT_1">%s</xliff:g>. Hãy nhấn để thay đổi."</string>
     <string name="keyboard_layout_notification_two_selected_message" msgid="1876349944065922950">"Đã thiết lập bố cục bàn phím thành <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>. Hãy nhấn để thay đổi."</string>
-    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Đã thiết lập bố cục bàn phím thành <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Hãy nhấn để thay đổi."</string>
+    <string name="keyboard_layout_notification_three_selected_message" msgid="280734264593115419">"Đã đặt bố cục là <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>. Nhấn để đổi."</string>
     <string name="keyboard_layout_notification_more_than_three_selected_message" msgid="1581834181578206937">"Đã thiết lập bố cục bàn phím thành <xliff:g id="LAYOUT_1">%1$s</xliff:g>, <xliff:g id="LAYOUT_2">%2$s</xliff:g>, <xliff:g id="LAYOUT_3">%3$s</xliff:g>… Hãy nhấn để thay đổi."</string>
     <string name="keyboard_layout_notification_multiple_selected_title" msgid="5242444914367024499">"Đã định cấu hình bàn phím vật lý"</string>
     <string name="keyboard_layout_notification_multiple_selected_message" msgid="6576533454124419202">"Nhấn để xem bàn phím"</string>
diff --git a/core/res/res/values-w180dp-notround-watch/dimens.xml b/core/res/res/values-w180dp-notround-watch/dimens.xml
new file mode 100644
index 0000000..5887661
--- /dev/null
+++ b/core/res/res/values-w180dp-notround-watch/dimens.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<resources>
+    <!-- 14.4% of display size -->
+    <dimen name="base_error_dialog_top_padding">26dp</dimen>
+    <!-- 2.8% of display size -->
+    <dimen name="base_error_dialog_padding">5dp</dimen>
+    <!-- 35.56% of display size -->
+    <dimen name="base_error_dialog_bottom_padding">64dp</dimen>
+</resources>
diff --git a/core/res/res/values-w192dp-round-watch/dimens.xml b/core/res/res/values-w192dp-round-watch/dimens.xml
new file mode 100644
index 0000000..5aed20e
--- /dev/null
+++ b/core/res/res/values-w192dp-round-watch/dimens.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<resources>
+    <!-- 16.7% of display size -->
+    <dimen name="base_error_dialog_top_padding">32dp</dimen>
+    <!-- 5.2% of display size -->
+    <dimen name="base_error_dialog_padding">10dp</dimen>
+    <!-- 20.83% of display size -->
+    <dimen name="base_error_dialog_bottom_padding">40dp</dimen>
+</resources>
diff --git a/core/res/res/values-w213dp-round-watch/dimens.xml b/core/res/res/values-w213dp-round-watch/dimens.xml
new file mode 100644
index 0000000..27fff75
--- /dev/null
+++ b/core/res/res/values-w213dp-round-watch/dimens.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<resources>
+    <!-- 16.7% of display size -->
+    <dimen name="base_error_dialog_top_padding">36dp</dimen>
+    <!-- 5.2% of display size -->
+    <dimen name="base_error_dialog_padding">11dp</dimen>
+    <!-- 36.46% of display size -->
+    <dimen name="base_error_dialog_bottom_padding">78dp</dimen>
+</resources>
diff --git a/core/res/res/values-watch/colors.xml b/core/res/res/values-watch/colors.xml
deleted file mode 100644
index 6d908be..0000000
--- a/core/res/res/values-watch/colors.xml
+++ /dev/null
@@ -1,22 +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.
-  -->
-
-<resources>
-    <!-- Wear Material standard colors -->
-    <color name="wear_material_red_mid">#CC5D58</color>
-    <color name="wear_material_grey_900">#202124</color>
-</resources>
\ No newline at end of file
diff --git a/core/res/res/values-watch/colors_device_defaults.xml b/core/res/res/values-watch/colors_device_defaults.xml
index 6ffd6e6..ee9481c 100644
--- a/core/res/res/values-watch/colors_device_defaults.xml
+++ b/core/res/res/values-watch/colors_device_defaults.xml
@@ -16,102 +16,51 @@
 
 <!-- Colors specific to Theme.DeviceDefault on watches, as specified via themes_device_default.xml
      Note: These colors specifically proide a darker, high-contrast UI that is suitable for
-     wearables with respect to 'glanceability'. OEM customization is supported within this set. -->
+     wearables with respect to 'glanceability'. -->
 <resources>
     <!--
        accent_device_default_dark
-         > from values/colors_material/accent_material_dark
-         > from values/colors_material/material_deep_teal_200
-         = #ff80cbc4
-         ! replaced with custom color #5E97F6
-         ! OEMS can customize as per specification
+         > from values/system_accent1_100
+         ! replaced with color/system_accent1_400
     -->
-    <color name="accent_device_default_dark">#5E97F6</color>
+    <color name="accent_device_default_dark">@color/system_accent1_400</color>
 
     <!--
        foreground_device_default_dark
          - introduced to avoid coupling to foreground_material_dark
          - colorForeground typically falls through Theme.DeviceDefault to Theme.Material
          ! fixed as white for optimal glanceability/contrast
-         ! OEMs should not customize
     -->
     <color name="foreground_device_default_dark">@color/white</color>
 
     <!--
        background_device_default_dark
-         > from values/colors_material/background_material_dark
-         > from values/colors_material/material_grey_850
-         = #ff303030
+         > from values/system_neutral1_900
          ! replaced with custom color #000000
-         ! OEMs can customized as per specification
-           (derived from accent color, constrained by brightness)
     -->
     <color name="background_device_default_dark">#000000</color>
 
-    <!--
-       background_floating_device_default_dark
-         > from values/colors_material/background_floating_material_dark
-         > from values/colors_material/material_grey_800
-         = #ff424242
-         ! replaced with custom color #1D2E4D
-           (derived from accent color, constrained by brightness)
-    -->
-    <color name="background_floating_device_default_dark">#1D2E4D</color>
+    <!-- Derived from accent color at 20% luminance -->
+    <color name="background_floating_device_default_dark">@color/system_accent1_800</color>
 
     <!--
-       primary_device_default_dark
-         > from values/colors_material/primary_material_dark
-         > from values/colors_material/material_grey_900
-         = #ff212121
-         ! replaced with custom color #808080
-         ! OEMs can customize as per specification
-           (derived from background color + foreground @ 50% opacity)
-    -->
-    <color name="primary_device_default_dark">#808080</color>
+        primary_device_default_dark
+          > from values/colors/system_neutral1_900
+          ! replaced with system_neutral1_500
+     -->
+    <color name="primary_device_default_dark">@color/system_neutral1_500</color>
 
-    <!--
-       primary_dark_device_default_dark
-         > from values/colors_material/primary_dark_material_dark
-         = @color/black
-         ! replaced with custom color #333333
-         ! OEMS can customize as per specification
-           (derived from background color + foreground @ 20% opacity)
-    -->
-    <color name="primary_dark_device_default_dark">#333333</color>
+    <!-- Currently matches the "surface dark" definition for phones. -->
+    <color name="surface_dark">@color/system_neutral1_800</color>
 
     <!--
        button_normal_device_default_dark
-         - uses ?attr/disabledAlpha and ?attr/colorPrimaryDark to draw state list
+         - uses ?attr/disabledAlpha and ?attr/colorSurface to draw state list
            (used as colorButtonNormal attribute in theme)
          - see color-watch/btn_watch_default_dark.xml
     -->
     <color name="button_normal_device_default_dark">@color/btn_watch_default_dark</color>
 
-    <!--
-       error_color_device_default_dark
-         - introduced to avoid coupling to error_color_mtterial (also #F4511E)
-         - colorError typically falls through Theme.DeviceDefault to Theme.Material
-         ! OEMs can customize as per specification
-    -->
-    <color name="error_color_device_default_dark">#F4511E</color>
-
-    <!-- no customization required/suggested below this point -->
-
-    <!--
-       background_cache_hint_selector_device_default
-         - note that this is based off of colors/background_cache_hint_selector_device_default
-           xml drawable
-         - uses ?attr/colorBackground and transparency to draw
-         - no color customization required here
-    -->
-
-    <!-- deprecated for Wear
-         these overrides exist only for compatibility with existing
-         WTS theme test heuristics, based on the previous modifications
-         to the material theme, they should not be used for customization
-         as they are not exposed via publicly accessible attributes -->
-    <color name="accent_device_default_dark_60_percent_opacity">#995E97f6</color>
-    <color name="accent_device_default_700">#5385DB</color>
-    <color name="accent_device_default_light">#75A4F5</color>
-    <color name="accent_device_default_50">#93B7F5</color>
+    <!-- Matches the Wear Compose error color. -->
+    <color name="error_color_device_default_dark">#FF746E</color>
 </resources>
diff --git a/core/res/res/values-watch/config.xml b/core/res/res/values-watch/config.xml
index cf0488b..b0d9b67 100644
--- a/core/res/res/values-watch/config.xml
+++ b/core/res/res/values-watch/config.xml
@@ -33,6 +33,14 @@
     <!-- Maximum velocity to initiate a fling, as measured in dips per second. -->
     <dimen name="config_viewMaxFlingVelocity">8000dp</dimen>
 
+    <!-- Minimum velocity (absolute value) to initiate a fling from a rotary encoder device, as
+         measured in dips per second. Setting this to -1dp disables rotary encoder fling.  -->
+    <dimen name="config_viewMinRotaryEncoderFlingVelocity">500dp</dimen>
+
+    <!-- Maximum velocity (absolute value) to initiate a fling from a rotary encoder device, as
+         measured in dips per second. Setting this to -1dp disables rotary encoder fling.  -->
+    <dimen name="config_viewMaxRotaryEncoderFlingVelocity">8000dp</dimen>
+
     <!-- Number of notifications to keep in the notification service historical archive.
          Reduced intentionally for watches to retain minimal memory footprint -->
     <integer name="config_notificationServiceArchiveSize">1</integer>
diff --git a/core/res/res/values-watch/config_material.xml b/core/res/res/values-watch/config_material.xml
index 03d3637..529f18b 100644
--- a/core/res/res/values-watch/config_material.xml
+++ b/core/res/res/values-watch/config_material.xml
@@ -30,9 +30,6 @@
     <!-- Always overscan by default to ensure onApplyWindowInsets will always be called. -->
     <bool name="config_windowOverscanByDefault">true</bool>
 
-    <!-- Enable windowSwipeToDismiss. -->
-    <bool name="config_windowSwipeToDismiss">true</bool>
-
     <!-- Style the scrollbars accoridngly. -->
     <drawable name="config_scrollbarThumbVertical">@drawable/scrollbar_vertical_thumb</drawable>
     <drawable name="config_scrollbarTrackVertical">@drawable/scrollbar_vertical_track</drawable>
diff --git a/core/res/res/values-watch/dimens.xml b/core/res/res/values-watch/dimens.xml
index 5472316..bbca987 100644
--- a/core/res/res/values-watch/dimens.xml
+++ b/core/res/res/values-watch/dimens.xml
@@ -20,4 +20,17 @@
     <dimen name="alert_dialog_button_bar_height">0dp</dimen>
 
     <dimen name="toast_y_offset">0dip</dimen>
+
+    <!-- AppErrorDialog's list item height -->
+    <dimen name="aerr_list_item_height">52dp</dimen>
+    <!-- Padding for contents in a view of BaseErrorDialog such as a title and buttons -->
+    <dimen name="base_error_dialog_contents_padding">14dp</dimen>
+
+    <!-- Specifies height of the divider in the input method chooser -->
+    <dimen name="input_method_divider_height">4dp</dimen>
+
+    <!-- The width/height of the icon view on staring surface. -->
+    <dimen name="starting_surface_icon_size">48dp</dimen>
+    <!-- The default width/height of the icon on the spec of adaptive icon drawable. -->
+    <dimen name="starting_surface_default_icon_size">48dp</dimen>
 </resources>
diff --git a/core/res/res/values-watch/dimens_material.xml b/core/res/res/values-watch/dimens_material.xml
index 51d4018..40673c1 100644
--- a/core/res/res/values-watch/dimens_material.xml
+++ b/core/res/res/values-watch/dimens_material.xml
@@ -44,6 +44,7 @@
     <dimen name="progress_bar_size_small">16dip</dimen>
     <dimen name="progress_bar_size_medium">32dip</dimen>
     <dimen name="progress_bar_size_large">64dip</dimen>
+    <dimen name="progress_bar_height">24dp</dimen>
 
     <!-- Progress bar message dimens -->
     <dimen name="message_progress_dialog_text_size">18sp</dimen>
diff --git a/core/res/res/values-watch/strings.xml b/core/res/res/values-watch/strings.xml
index e44eda3..9fa4bef 100644
--- a/core/res/res/values-watch/strings.xml
+++ b/core/res/res/values-watch/strings.xml
@@ -26,5 +26,9 @@
     <string name="global_action_emergency">Emergency SOS</string>
 
    <!-- Reboot to Recovery Progress Dialog. This is shown before it reboots to recovery. -->
+    <string name="reboot_to_update_prepare">Preparing to update</string>
     <string name="reboot_to_update_title">Wear OS system update</string>
-</resources>
\ No newline at end of file
+
+   <!-- Title of the pop-up dialog in which the user switches keyboard, also known as input method. -->
+    <string name="select_input_method">Choose input</string>
+</resources>
diff --git a/core/res/res/values-watch/styles.xml b/core/res/res/values-watch/styles.xml
index 3172f73..4a7d57d 100644
--- a/core/res/res/values-watch/styles.xml
+++ b/core/res/res/values-watch/styles.xml
@@ -19,4 +19,61 @@
         <item name="fontFamily">sans-serif-regular</item>
         <item name="textSize">13sp</item>
     </style>
+
+    <!-- @hide -->
+    <style name="TextAppearance.Watch"/>
+
+    <!-- @hide -->
+    <style name="TextAppearance.Watch.BaseErrorDialog">
+        <item name="fontFamily">google-sans-text-medium</item>
+        <item name="textColor">@android:color/white</item>
+        <item name="textAllCaps">false</item>
+    </style>
+
+    <!-- @hide -->
+    <style name="TextAppearance.Watch.BaseErrorDialog.Title">
+        <item name="textSize">16sp</item>
+        <item name="letterSpacing">0.024</item>
+    </style>
+
+    <!-- @hide -->
+    <style name="TextAppearance.Watch.AppErrorDialog"
+           parent="TextAppearance.Watch.BaseErrorDialog"/>
+
+    <!-- @hide -->
+    <style name="TextAppearance.Watch.AppErrorDialog.Item">
+        <item name="textSize">15sp</item>
+        <item name="letterSpacing">0.01</item>
+    </style>
+
+    <!-- @hide -->
+    <style name="aerr_list_item">
+        <item name="minHeight">@dimen/aerr_list_item_height</item>
+        <item name="textAppearance">@style/TextAppearance.Watch.AppErrorDialog.Item</item>
+        <item name="gravity">center_vertical</item>
+        <item name="paddingStart">@dimen/base_error_dialog_contents_padding</item>
+        <item name="paddingEnd">@dimen/base_error_dialog_contents_padding</item>
+        <item name="background">@drawable/global_actions_item_grey_background</item>
+        <item name="drawablePadding">6dp</item>
+        <item name="drawableTint">@android:color/white</item>
+        <item name="drawableTintMode">src_atop</item>
+    </style>
+
+    <!-- @hide -->
+    <style name="InputMethodSwitchHardKeyboardText">
+        <item name="paddingStart">?attr/listPreferredItemPaddingStart</item>
+        <item name="paddingEnd">16dp</item>
+        <item name="paddingTop">16dp</item>
+        <item name="paddingBottom">5dp</item>
+        <item name="minHeight">?attr/listPreferredItemHeightSmall</item>
+    </style>
+
+    <!-- @hide -->
+    <style name="InputMethodSwitchHardKeyboardSwitch">
+        <item name="layout_marginEnd">?attr/listPreferredItemPaddingEnd</item>
+    </style>
+
+    <style name="InputMethodSwitchDialogStyle" parent="AlertDialog.DeviceDefault">
+        <item name="android:listLayout">@layout/input_method_switcher_list_layout</item>
+    </style>
 </resources>
diff --git a/core/res/res/values-watch/styles_device_default.xml b/core/res/res/values-watch/styles_device_default.xml
index e2261af..8a2ce5d 100644
--- a/core/res/res/values-watch/styles_device_default.xml
+++ b/core/res/res/values-watch/styles_device_default.xml
@@ -34,4 +34,7 @@
         <item name="android:textSize">16sp</item>
         <item name="android:fontFamily">google-sans-medium</item>
     </style>
+    <style name="BaseErrorDialog.DeviceDefault" parent="AlertDialog.DeviceDefault">
+        <item name="layout">@layout/watch_base_error_dialog</item>
+    </style>
 </resources>
diff --git a/core/res/res/values-watch/styles_material.xml b/core/res/res/values-watch/styles_material.xml
index f34d9f9..8698e86 100644
--- a/core/res/res/values-watch/styles_material.xml
+++ b/core/res/res/values-watch/styles_material.xml
@@ -30,27 +30,27 @@
  -->
 <resources>
     <style name="Animation.Material.Activity" parent="Animation.Activity">
-        <item name="activityOpenEnterAnimation">@anim/slide_in_enter_micro</item>
-        <item name="activityOpenRemoteViewsEnterAnimation">@anim/slide_in_enter_micro</item>
-        <item name="activityOpenExitAnimation">@anim/slide_in_exit_micro</item>
+        <item name="activityOpenEnterAnimation">@anim/rounded_window_enter</item>
+        <item name="activityOpenRemoteViewsEnterAnimation">@anim/rounded_window_enter</item>
+        <item name="activityOpenExitAnimation">@null</item>
         <item name="activityCloseEnterAnimation">@null</item>
-        <item name="activityCloseExitAnimation">@anim/slide_out_micro</item>
-        <item name="taskOpenEnterAnimation">@anim/slide_in_enter_micro</item>
-        <item name="taskOpenExitAnimation">@anim/slide_in_exit_micro</item>
+        <item name="activityCloseExitAnimation">@anim/rounded_window_exit</item>
+        <item name="taskOpenEnterAnimation">@anim/rounded_window_enter</item>
+        <item name="taskOpenExitAnimation">@null</item>
         <item name="taskCloseEnterAnimation">@null</item>
-        <item name="taskCloseExitAnimation">@anim/slide_out_micro</item>
-        <item name="taskToFrontEnterAnimation">@null</item>
-        <item name="taskToFrontExitAnimation">@anim/slide_out_micro</item>
+        <item name="taskCloseExitAnimation">@anim/rounded_window_exit</item>
+        <item name="taskToFrontEnterAnimation">@anim/rounded_window_enter</item>
+        <item name="taskToFrontExitAnimation">@null</item>
         <item name="taskToBackEnterAnimation">@null</item>
-        <item name="taskToBackExitAnimation">@anim/slide_out_micro</item>
+        <item name="taskToBackExitAnimation">@anim/rounded_window_exit</item>
         <item name="wallpaperOpenEnterAnimation">@null</item>
-        <item name="wallpaperOpenExitAnimation">@anim/slide_out_micro</item>
-        <item name="wallpaperCloseEnterAnimation">@anim/slide_in_enter_micro</item>
-        <item name="wallpaperCloseExitAnimation">@anim/slide_in_exit_micro</item>
+        <item name="wallpaperOpenExitAnimation">@anim/rounded_window_exit</item>
+        <item name="wallpaperCloseEnterAnimation">@anim/rounded_window_enter</item>
+        <item name="wallpaperCloseExitAnimation">@null</item>
         <item name="wallpaperIntraOpenEnterAnimation">@null</item>
-        <item name="wallpaperIntraOpenExitAnimation">@anim/slide_out_micro</item>
-        <item name="wallpaperIntraCloseEnterAnimation">@anim/slide_in_enter_micro</item>
-        <item name="wallpaperIntraCloseExitAnimation">@anim/slide_in_exit_micro</item>
+        <item name="wallpaperIntraOpenExitAnimation">@anim/rounded_window_exit</item>
+        <item name="wallpaperIntraCloseEnterAnimation">@anim/rounded_window_enter</item>
+        <item name="wallpaperIntraCloseExitAnimation">@null</item>
     </style>
 
     <style name="PreferenceFragment.Material" parent="BasePreferenceFragment">
@@ -107,4 +107,14 @@
         <item name="paddingStart">@dimen/message_progress_dialog_start_padding</item>
         <item name="paddingTop">@dimen/message_progress_dialog_top_padding</item>
     </style>
+
+    <!-- Material progress part (indeterminate/horizontal) for Wear -->
+    <style name="Widget.Material.ProgressBar.Horizontal" parent="Widget.ProgressBar.Horizontal">
+        <item name="progressDrawable">@drawable/progress_horizontal_material</item>
+        <item name="indeterminateDrawable">
+            @drawable/progress_indeterminate_horizontal_material
+        </item>
+        <item name="minHeight">@dimen/progress_bar_height</item>
+        <item name="maxHeight">@dimen/progress_bar_height</item>
+    </style>
 </resources>
diff --git a/core/res/res/values-watch/themes_device_defaults.xml b/core/res/res/values-watch/themes_device_defaults.xml
index 1db006f..c4c1ed9 100644
--- a/core/res/res/values-watch/themes_device_defaults.xml
+++ b/core/res/res/values-watch/themes_device_defaults.xml
@@ -427,6 +427,8 @@
 
     <!-- Theme for the dialog shown when an app crashes or ANRs. Override to make it dark. -->
     <style name="Theme.DeviceDefault.Dialog.AppError" parent="Theme.DeviceDefault.Dialog.Alert">
+        <item name="alertDialogStyle">@style/BaseErrorDialog.DeviceDefault</item>
+        <item name="dialogPreferredPadding">@dimen/base_error_dialog_padding</item>
         <item name="windowContentTransitions">false</item>
         <item name="windowActivityTransitions">false</item>
         <item name="windowCloseOnTouchOutside">false</item>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 65a1f16..955cbe7 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -250,7 +250,7 @@
     <string name="global_action_bug_report" msgid="5127867163044170003">"错误报告"</string>
     <string name="global_action_logout" msgid="6093581310002476511">"结束会话"</string>
     <string name="global_action_screenshot" msgid="2610053466156478564">"屏幕截图"</string>
-    <string name="bugreport_title" msgid="8549990811777373050">"错误报告"</string>
+    <string name="bugreport_title" msgid="8549990811777373050">"Bug 报告"</string>
     <string name="bugreport_message" msgid="5212529146119624326">"这会收集有关当前设备状态的信息,并以电子邮件的形式进行发送。从开始生成错误报告到准备好发送需要一点时间,请耐心等待。"</string>
     <string name="bugreport_option_interactive_title" msgid="7968287837902871289">"互动式报告"</string>
     <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"在大多数情况下,建议您使用此选项,以便追踪报告的生成进度,输入与相应问题相关的更多详细信息,以及截取屏幕截图。系统可能会省略掉一些不常用的区段,从而缩短生成报告的时间。"</string>
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android 系统"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"切换到个人资料"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"切换到工作资料"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"切换到个人 <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"切换到工作 <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"通讯录"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"访问您的通讯录"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"位置信息"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"允许应用控制振动器。"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"允许该应用访问振动器状态。"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"拨打电话"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"允许该应用在您未执行操作的情况下拨打电话号码。此权限可能会导致意外收费或呼叫。请注意,此权限不允许该应用拨打紧急电话号码。恶意应用可通过拨打电话产生相关费用,而无需您的确认。"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"允许应用在没有您干预的情况下拨打电话号码。这可能会导致意外扣款和拨打电话。请注意,此权限不允许应用拨打紧急电话号码。恶意应用可能会在未经您确认的情况下拨打电话,给您带来不必要的费用;也可能会拨打运营商代码,导致系统将来电自动转接到另一个号码。"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"使用即时通讯通话服务"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"允许应用自行使用即时通讯服务拨打电话。"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"读取手机状态和身份"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"允许应用获取首选 NFC 付款服务信息,例如注册的应用标识符和路线目的地。"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"控制近距离通信"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"允许应用与近距离无线通信(NFC)标签、卡和读取器通信。"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"安全元件事务事件"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"允许应用接收与安全元件上发生的事务相关的信息。"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"停用屏幕锁定"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"允许该应用停用键锁以及任何关联的密码安全措施。例如,让手机在接听来电时停用键锁,在通话结束后重新启用键锁。"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"请求屏幕锁定复杂度"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"使用生物识别或屏幕锁定凭据"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"验证是您本人在操作"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"使用生物识别验证身份才能继续"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"如需继续操作,请使用指纹验证身份"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"如需继续操作,请刷脸验证身份"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"使用生物识别或屏幕锁定凭据验证身份,才能继续操作"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"生物识别硬件无法使用"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"身份验证已取消"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"无法识别"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"无法识别面孔"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"身份验证已取消"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"未设置任何 PIN 码、图案和密码"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"进行身份验证时出错"</string>
@@ -684,7 +691,7 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"请将手机向左移动"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"请将手机向右移动"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"请直视您的设备。"</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"看不清您的脸部,请将手机举到与眼睛齐平的位置。"</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"看不到您的脸,请将手机举到与眼睛齐平的位置。"</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"摄像头过于晃动。请将手机拿稳。"</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"请重新注册您的面孔。"</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"无法识别人脸,请重试。"</string>
@@ -700,7 +707,7 @@
     <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>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"检测到面部被遮挡,请露出整个面部。"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"无法验证人脸。硬件无法使用。"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"面孔处理操作已取消。"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"用户已取消人脸解锁"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"尝试次数过多,请稍后重试。"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"尝试次数过多。无法使用人脸解锁功能。"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"尝试次数过多,请改为通过解除屏幕锁定来验证身份。"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"无法验证人脸,请重试。"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"您尚未设置人脸解锁"</string>
@@ -723,7 +729,7 @@
     <string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"使用人脸解锁或屏幕锁定凭据验证身份,才能继续操作"</string>
   <string-array name="face_error_vendor">
   </string-array>
-    <string name="face_error_vendor_unknown" msgid="7387005932083302070">"出了点问题。请重试。"</string>
+    <string name="face_error_vendor_unknown" msgid="7387005932083302070">"出了点问题,请重试。"</string>
     <string name="face_icon_content_description" msgid="465030547475916280">"面孔图标"</string>
     <string name="permlab_readSyncSettings" msgid="6250532864893156277">"读取同步设置"</string>
     <string name="permdesc_readSyncSettings" msgid="1325658466358779298">"允许该应用读取某个帐号的同步设置。例如,此权限可确定“联系人”应用是否与某个帐号同步。"</string>
@@ -1362,7 +1368,7 @@
     <string name="usb_ptp_notification_title" msgid="5043437571863443281">"已开启 USB PTP 模式"</string>
     <string name="usb_tether_notification_title" msgid="8828527870612663771">"已开启 USB 网络共享模式"</string>
     <string name="usb_midi_notification_title" msgid="7404506788950595557">"已开启 USB MIDI 模式"</string>
-    <string name="usb_uvc_notification_title" msgid="2030032862673400008">"设备已连接为摄像头"</string>
+    <string name="usb_uvc_notification_title" msgid="2030032862673400008">"设备已连接并作为摄像头使用"</string>
     <string name="usb_accessory_notification_title" msgid="1385394660861956980">"USB 配件已连接"</string>
     <string name="usb_notification_message" msgid="4715163067192110676">"点按即可查看更多选项。"</string>
     <string name="usb_power_notification_message" msgid="7284765627437897702">"正在为连接的设备充电。点按即可查看更多选项。"</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"拒绝"</string>
     <string name="select_input_method" msgid="3971267998568587025">"选择输入法"</string>
     <string name="show_ime" msgid="6406112007347443383">"开启后,连接到实体键盘时,它会一直显示在屏幕上"</string>
-    <string name="hardware" msgid="1800597768237606953">"显示虚拟键盘"</string>
+    <string name="hardware" msgid="3611039921284836033">"使用屏幕键盘"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"配置“<xliff:g id="DEVICE_NAME">%s</xliff:g>”"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"配置物理键盘"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"点按即可选择语言和布局"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"删除"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"要将音量调高到建议的音量以上吗?\n\n长时间保持高音量可能会损伤听力。"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"警告!\n您在一周内使用头戴式耳机收听的高分贝音频量已超出安全范围限值。\n\n继续超限收听会导致您的听力永久受损。"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"警告!\n您在一周内使用头戴式耳机收听的高分贝音频量已超出安全范围限值的 5 倍。\n\n为保护您的听力,系统已调低音量。"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"长时间以当前音量收听媒体可能会导致听力受损。\n\n如果您继续以这样的音量长时间播放,则可能会损害您的听力。"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"警告!\n当前的内容播放音量已超出安全范围限值。\n\n继续以这样的音量收听会导致您的听力永久受损。"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"继续以较高的音量聆听?\n\n耳机音量保持较高的时间超过了建议时长,可能会损害您的听力"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"检测到较高音量\n\n耳机音量水平超过了建议值,可能会损害您的听力"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"要使用无障碍快捷方式吗?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"启用这项快捷方式后,同时按下两个音量按钮 3 秒钟即可启动无障碍功能。"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"要开启无障碍功能快捷方式吗?"</string>
@@ -1716,7 +1720,7 @@
     <string name="color_correction_feature_name" msgid="7975133554160979214">"色彩校正"</string>
     <string name="one_handed_mode_feature_name" msgid="2334330034828094891">"单手模式"</string>
     <string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"极暗"</string>
-    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"助听设备"</string>
+    <string name="hearing_aids_feature_name" msgid="1125892105105852542">"助听装置"</string>
     <string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"已按住音量键。<xliff:g id="SERVICE_NAME">%1$s</xliff:g>已开启。"</string>
     <string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"已按住音量键。<xliff:g id="SERVICE_NAME">%1$s</xliff:g>已关闭。"</string>
     <string name="accessibility_shortcut_spoken_feedback" msgid="3760999147597564314">"松开音量键。如要启用 <xliff:g id="SERVICE_NAME">%1$s</xliff:g>,请再次同时按住两个音量键 3 秒。"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"要退出,请从顶部向下滑动。"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"知道了"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"旋转可改善预览效果"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"退出分屏可改善预览效果"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"在全屏模式下打开“<xliff:g id="NAME">%s</xliff:g>”可改善预览效果"</string>
     <string name="done_label" msgid="7283767013231718521">"完成"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"小时转盘"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"分钟转盘"</string>
@@ -1938,7 +1942,7 @@
     <string name="user_creation_adding" msgid="7305185499667958364">"允许<xliff:g id="APP">%1$s</xliff:g>使用 <xliff:g id="ACCOUNT">%2$s</xliff:g> 创建新用户吗?"</string>
     <string name="supervised_user_creation_label" msgid="6884904353827427515">"添加受监管用户"</string>
     <string name="language_selection_title" msgid="52674936078683285">"添加语言"</string>
-    <string name="country_selection_title" msgid="5221495687299014379">"区域偏好设置"</string>
+    <string name="country_selection_title" msgid="5221495687299014379">"地区偏好设置"</string>
     <string name="search_language_hint" msgid="7004225294308793583">"输入语言名称"</string>
     <string name="language_picker_section_suggested" msgid="6556199184638990447">"建议语言"</string>
     <string name="language_picker_regions_section_suggested" msgid="6080131515268225316">"推荐地区"</string>
@@ -1957,9 +1961,9 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"应用无法使用"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g>目前无法使用。"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g>不可用"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"需要权限"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"权限请求被阻止"</string>
     <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_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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"此应用请求获得额外的权限,但在流式传输会话期间无法授予权限。请先在 Android TV 设备上授予相应权限。"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"此应用请求获得额外的权限,但在流式传输会话期间无法授予权限。请先在平板电脑上授予相应权限。"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"此应用请求获得额外的权限,但在流式传输会话期间无法授予权限。请先在手机上授予相应权限。"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"此应用专为旧版 Android 系统打造。它可能无法正常运行,也不包含最新的安全和隐私保护功能。请检查是否有更新,或与应用开发者联系。"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"检查更新"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"此应用与最新版 Android 不兼容。请检查是否有更新,或与应用开发者联系。"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"您有新消息"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"打开短信应用查看"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"部分功能可能会受到限制"</string>
@@ -1985,7 +1993,7 @@
     <string name="usb_mtp_launch_notification_description" msgid="6942535713629852684">"点按即可查看文件"</string>
     <string name="pin_target" msgid="8036028973110156895">"置顶"</string>
     <string name="pin_specific_target" msgid="7824671240625957415">"将<xliff:g id="LABEL">%1$s</xliff:g>置顶"</string>
-    <string name="unpin_target" msgid="3963318576590204447">"取消固定"</string>
+    <string name="unpin_target" msgid="3963318576590204447">"取消置顶"</string>
     <string name="unpin_specific_target" msgid="3859828252160908146">"取消置顶<xliff:g id="LABEL">%1$s</xliff:g>"</string>
     <string name="app_info" msgid="6113278084877079851">"应用信息"</string>
     <string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
@@ -2092,7 +2100,7 @@
     <string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"确定"</string>
     <string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"关闭"</string>
     <string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"了解详情"</string>
-    <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"在 Android 12 中,增强型通知功能取代了 Android 自适应通知功能。增强型通知功能可以显示建议的操作和回复,并可将通知整理得井井有条。\n\n增强型通知功能可以读取通知内容,包括联系人名称和消息等个人信息。该功能还可以关闭通知或对通知做出回应,例如接听来电以及控制勿扰模式。"</string>
+    <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"在 Android 12 中,增强型通知功能取代了 Android 自适应通知功能。增强型通知功能可以显示建议的操作和回复,并可将通知整理得井井有条。\n\n增强型通知功能可以读取通知内容,包括联系人姓名、消息等个人信息。该功能还可以关闭通知或对通知做出回应,例如接听来电以及控制勿扰模式。"</string>
     <string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"日常安排模式信息通知"</string>
     <string name="dynamic_mode_notification_title" msgid="1388718452788985481">"省电模式已开启"</string>
     <string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"降低电池用量以延长电池续航时间"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"无法使用工作应用打开该内容"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"无法使用个人应用分享该内容"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"无法使用个人应用打开该内容"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"工作资料已被暂停"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"点按即可开启"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"工作应用已暂停"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"取消暂停"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"没有支持该内容的工作应用"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"没有支持该内容的个人应用"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"打开工作应用 <xliff:g id="APP">%s</xliff:g>?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"在个人 <xliff:g id="APP">%s</xliff:g> 中打开?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"在工作 <xliff:g id="APP">%s</xliff:g> 中打开?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"通过工作应用拨打电话?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"切换到工作应用?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"贵组织仅允许您通过工作应用拨打电话"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"贵组织仅允许您通过工作应用发送消息"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"使用个人浏览器"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"使用工作浏览器"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"拨打电话"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"切换"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM 网络解锁 PIN 码"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM 网络子集解锁 PIN 码"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM 企业解锁 PIN 码"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"无法从<xliff:g id="DEVICE">%1$s</xliff:g>上访问手机的摄像头"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"无法从<xliff:g id="DEVICE">%1$s</xliff:g>上访问平板电脑的摄像头"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"流式传输时无法访问此内容。您可以尝试在手机上访问。"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"在线播放时无法查看画中画"</string>
     <string name="system_locale_title" msgid="711882686834677268">"系统默认设置"</string>
     <string name="default_card_name" msgid="9198284935962911468">"SIM 卡 <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"用于管理手表的配套手表个人资料权限"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 52ef88b..899c314 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -38,17 +38,17 @@
     <string name="serviceErased" msgid="997354043770513494">"已成功清除。"</string>
     <string name="passwordIncorrect" msgid="917087532676155877">"密碼有誤。"</string>
     <string name="mmiComplete" msgid="6341884570892520140">"已完成 MMI。"</string>
-    <string name="badPin" msgid="888372071306274355">"您所輸入的舊 PIN 碼不正確。"</string>
-    <string name="badPuk" msgid="4232069163733147376">"您輸入的 PUK 不正確。"</string>
-    <string name="mismatchPin" msgid="2929611853228707473">"您輸入的 PIN 碼不符。"</string>
+    <string name="badPin" msgid="888372071306274355">"你所輸入的舊 PIN 碼不正確。"</string>
+    <string name="badPuk" msgid="4232069163733147376">"你輸入的 PUK 不正確。"</string>
+    <string name="mismatchPin" msgid="2929611853228707473">"你輸入的 PIN 碼不符。"</string>
     <string name="invalidPin" msgid="7542498253319440408">"請輸入一個 4 至 8 位數的 PIN。"</string>
     <string name="invalidPuk" msgid="8831151490931907083">"輸入 8 位數以上的 PUK。"</string>
     <string name="needPuk" msgid="3503414069503752211">"SIM 卡已使用 PUK 鎖定,請輸入 PUK 解鎖。"</string>
     <string name="needPuk2" msgid="3910763547447344963">"請輸入 PUK2 解鎖 SIM 卡。"</string>
     <string name="enablePin" msgid="2543771964137091212">"操作失敗,請啟用「SIM/RUIM 鎖定」。"</string>
     <plurals name="pinpuk_attempts" formatted="false" msgid="1619867269012213584">
-      <item quantity="other">您還有 <xliff:g id="NUMBER_1">%d</xliff:g> 次機會輸入。如果仍然輸入錯誤,SIM 卡將會被鎖定。</item>
-      <item quantity="one">您還有 <xliff:g id="NUMBER_0">%d</xliff:g> 次機會輸入。如果仍然輸入錯誤,SIM 卡將會被鎖定。</item>
+      <item quantity="other">你還有 <xliff:g id="NUMBER_1">%d</xliff:g> 次機會輸入。如果仍然輸入錯誤,SIM 卡將會被鎖定。</item>
+      <item quantity="one">你還有 <xliff:g id="NUMBER_0">%d</xliff:g> 次機會輸入。如果仍然輸入錯誤,SIM 卡將會被鎖定。</item>
     </plurals>
     <string name="imei" msgid="2157082351232630390">"IMEI"</string>
     <string name="meid" msgid="3291227361605924674">"MEID"</string>
@@ -72,9 +72,9 @@
     <string name="CLIRDefaultOffNextCallOn" msgid="1022781126694885017">"預設顯示來電號碼,但下一通電話不顯示。"</string>
     <string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"預設顯示來電號碼,下一通電話也繼續顯示。"</string>
     <string name="serviceNotProvisioned" msgid="8289333510236766193">"未提供此服務。"</string>
-    <string name="CLIRPermanent" msgid="166443681876381118">"您無法更改來電顯示設定。"</string>
+    <string name="CLIRPermanent" msgid="166443681876381118">"你無法更改來電顯示設定。"</string>
     <string name="auto_data_switch_title" msgid="3286350716870518297">"流動數據已切換至「<xliff:g id="CARRIERDISPLAY">%s</xliff:g>」"</string>
-    <string name="auto_data_switch_content" msgid="803557715007110959">"您隨時可在「設定」中變更此設定"</string>
+    <string name="auto_data_switch_content" msgid="803557715007110959">"你隨時可在「設定」中變更此設定"</string>
     <string name="RestrictedOnDataTitle" msgid="1500576417268169774">"無法使用流動數據服務"</string>
     <string name="RestrictedOnEmergencyTitle" msgid="2852916906106191866">"無法撥打緊急電話"</string>
     <string name="RestrictedOnNormalTitle" msgid="7009474589746551737">"沒有語音服務"</string>
@@ -125,7 +125,7 @@
     <item msgid="468830943567116703">"如要透過 Wi-Fi 撥打電話和傳送訊息,請先向流動網絡供應商要求設定此服務,然後再次在「設定」中開啟「Wi-Fi 通話」。(錯誤代碼:<xliff:g id="CODE">%1$s</xliff:g>)"</item>
   </string-array>
   <string-array name="wfcOperatorErrorNotificationMessages">
-    <item msgid="4795145070505729156">"向您的流動網絡供應商註冊 Wi-Fi 通話時發生問題:<xliff:g id="CODE">%1$s</xliff:g>"</item>
+    <item msgid="4795145070505729156">"向你的流動網絡供應商註冊 Wi-Fi 通話時發生問題:<xliff:g id="CODE">%1$s</xliff:g>"</item>
   </string-array>
     <!-- no translation found for wfcSpnFormat_spn (2982505428519096311) -->
     <skip />
@@ -181,17 +181,17 @@
     <string name="low_memory" product="default" msgid="2539532364144025569">"手機的儲存空間已滿。請刪除一些檔案,以騰出可用空間。"</string>
     <string name="ssl_ca_cert_warning" msgid="7233573909730048571">"{count,plural, =1{已安裝憑證機構}other{已安裝憑證機構}}"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4961102218216815242">"由不明的第三方監管"</string>
-    <string name="ssl_ca_cert_noti_by_administrator" msgid="4564941950768783879">"由您的工作設定檔管理員監控"</string>
+    <string name="ssl_ca_cert_noti_by_administrator" msgid="4564941950768783879">"由你的工作設定檔管理員監控"</string>
     <string name="ssl_ca_cert_noti_managed" msgid="217337232273211674">"由 <xliff:g id="MANAGING_DOMAIN">%s</xliff:g> 監管"</string>
     <string name="work_profile_deleted" msgid="5891181538182009328">"工作設定檔已被刪除"</string>
-    <string name="work_profile_deleted_details" msgid="3773706828364418016">"工作設定檔管理員應用程式已遺失或損毀。因此,您的工作設定檔和相關資料已刪除。請聯絡您的管理員以取得協助。"</string>
-    <string name="work_profile_deleted_description_dpm_wipe" msgid="2477244968924647232">"您的工作設定檔無法再在此裝置上使用"</string>
+    <string name="work_profile_deleted_details" msgid="3773706828364418016">"工作設定檔管理員應用程式已遺失或損毀。因此,你的工作設定檔和相關資料已刪除。請聯絡你的管理員以取得協助。"</string>
+    <string name="work_profile_deleted_description_dpm_wipe" msgid="2477244968924647232">"你的工作設定檔無法再在此裝置上使用"</string>
     <string name="work_profile_deleted_reason_maximum_password_failure" msgid="1080323158315663167">"密碼輸入錯誤的次數過多"</string>
     <string name="device_ownership_relinquished" msgid="4080886992183195724">"管理員已開放裝置供個人使用"</string>
     <string name="network_logging_notification_title" msgid="554983187553845004">"裝置已受管理"</string>
-    <string name="network_logging_notification_text" msgid="1327373071132562512">"您的機構會管理此裝置,並可能會監控網絡流量。輕按即可瞭解詳情。"</string>
-    <string name="location_changed_notification_title" msgid="3620158742816699316">"應用程式可存取您的位置"</string>
-    <string name="location_changed_notification_text" msgid="7158423339982706912">"請聯絡您的 IT 管理員以瞭解詳情"</string>
+    <string name="network_logging_notification_text" msgid="1327373071132562512">"你的機構會管理此裝置,並可能會監控網絡流量。輕按即可瞭解詳情。"</string>
+    <string name="location_changed_notification_title" msgid="3620158742816699316">"應用程式可存取你的位置"</string>
+    <string name="location_changed_notification_text" msgid="7158423339982706912">"請聯絡你的 IT 管理員以瞭解詳情"</string>
     <string name="geofencing_service" msgid="3826902410740315456">"地理圍欄服務"</string>
     <string name="country_detector" msgid="7023275114706088854">"國家/地區偵測器"</string>
     <string name="location_service" msgid="2439187616018455546">"定位服務"</string>
@@ -201,15 +201,15 @@
     <string name="gnss_time_update_service" msgid="9039489496037616095">"GNSS 時間更新服務"</string>
     <string name="device_policy_manager_service" msgid="5085762851388850332">"裝置政策管理中心服務"</string>
     <string name="music_recognition_manager_service" msgid="7481956037950276359">"音樂識別管理員服務"</string>
-    <string name="factory_reset_warning" msgid="6858705527798047809">"您的裝置將被清除"</string>
-    <string name="factory_reset_message" msgid="2657049595153992213">"無法使用管理員應用程式。系統會現在清除您的裝置。\n\n如有任何疑問,請聯絡您的機構管理員。"</string>
+    <string name="factory_reset_warning" msgid="6858705527798047809">"你的裝置將被清除"</string>
+    <string name="factory_reset_message" msgid="2657049595153992213">"無法使用管理員應用程式。系統會現在清除你的裝置。\n\n如有任何疑問,請聯絡你的機構管理員。"</string>
     <string name="printing_disabled_by" msgid="3517499806528864633">"「<xliff:g id="OWNER_APP">%s</xliff:g>」暫停了列印。"</string>
     <string name="personal_apps_suspension_title" msgid="7561416677884286600">"開啟工作設定檔"</string>
-    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"系統會封鎖您的個人應用程式,直至您開啟工作設定檔為止"</string>
-    <string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"個人應用程式將於 <xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="TIME">%2$s</xliff:g> 封鎖。IT 管理員不允許您的工作設定檔保持關閉狀態超過 <xliff:g id="NUMBER">%3$d</xliff:g> 天。"</string>
+    <string name="personal_apps_suspension_text" msgid="6115455688932935597">"系統會封鎖你的個人應用程式,直至你開啟工作設定檔為止"</string>
+    <string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"個人應用程式將於 <xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="TIME">%2$s</xliff:g> 封鎖。IT 管理員不允許你的工作設定檔保持關閉狀態超過 <xliff:g id="NUMBER">%3$d</xliff:g> 天。"</string>
     <string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"開啟"</string>
     <string name="work_profile_telephony_paused_title" msgid="7690804479291839519">"通話和訊息功能已關閉"</string>
-    <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"您已暫停工作應用程式,因此無法接聽電話或接收訊息。"</string>
+    <string name="work_profile_telephony_paused_text" msgid="8065762301100978221">"你已暫停工作應用程式,因此無法接聽電話或接收訊息。"</string>
     <string name="work_profile_telephony_paused_turn_on_button" msgid="7542632318337068821">"取消暫停工作應用程式"</string>
     <string name="me" msgid="6207584824693813140">"我本人"</string>
     <string name="power_dialog" product="tablet" msgid="8333207765671417261">"平板電腦選項"</string>
@@ -230,13 +230,13 @@
     <string name="reboot_to_reset_title" msgid="2226229680017882787">"回復原廠設定"</string>
     <string name="reboot_to_reset_message" msgid="3347690497972074356">"正在重新啟動…"</string>
     <string name="shutdown_progress" msgid="5017145516412657345">"正在關機..."</string>
-    <string name="shutdown_confirm" product="tablet" msgid="2872769463279602432">"您的平板電腦將會關機。"</string>
+    <string name="shutdown_confirm" product="tablet" msgid="2872769463279602432">"你的平板電腦將會關機。"</string>
     <string name="shutdown_confirm" product="tv" msgid="7975942887313518330">"Android TV 裝置將會關機。"</string>
-    <string name="shutdown_confirm" product="watch" msgid="2977299851200240146">"您的手錶即將關機。"</string>
-    <string name="shutdown_confirm" product="default" msgid="136816458966692315">"您的手機即將關機。"</string>
-    <string name="shutdown_confirm_question" msgid="796151167261608447">"您要關機嗎?"</string>
+    <string name="shutdown_confirm" product="watch" msgid="2977299851200240146">"你的手錶即將關機。"</string>
+    <string name="shutdown_confirm" product="default" msgid="136816458966692315">"你的手機即將關機。"</string>
+    <string name="shutdown_confirm_question" msgid="796151167261608447">"你要關機嗎?"</string>
     <string name="reboot_safemode_title" msgid="5853949122655346734">"重新啟動進入安全模式"</string>
-    <string name="reboot_safemode_confirm" msgid="1658357874737219624">"您要重新啟動來進入安全模式嗎?這會停用您安裝的所有第三方應用程式。您只要再次重新啟動,系統便會還原這些應用程式。"</string>
+    <string name="reboot_safemode_confirm" msgid="1658357874737219624">"你要重新啟動來進入安全模式嗎?這會停用你安裝的所有第三方應用程式。你只要再次重新啟動,系統便會還原這些應用程式。"</string>
     <string name="recent_tasks_title" msgid="8183172372995396653">"近期活動"</string>
     <string name="no_recent_tasks" msgid="9063946524312275906">"沒有最近用過的應用程式。"</string>
     <string name="global_actions" product="tablet" msgid="4412132498517933867">"平板電腦選項"</string>
@@ -251,11 +251,11 @@
     <string name="global_action_logout" msgid="6093581310002476511">"結束工作階段"</string>
     <string name="global_action_screenshot" msgid="2610053466156478564">"螢幕截圖"</string>
     <string name="bugreport_title" msgid="8549990811777373050">"錯誤報告"</string>
-    <string name="bugreport_message" msgid="5212529146119624326">"這會收集您目前裝置狀態的相關資訊,並以電郵傳送給您。從開始建立錯誤報告到準備傳送需要一段時間,請耐心等候。"</string>
+    <string name="bugreport_message" msgid="5212529146119624326">"這會收集你目前裝置狀態的相關資訊,並以電郵傳送給你。從開始建立錯誤報告到準備傳送需要一段時間,請耐心等候。"</string>
     <string name="bugreport_option_interactive_title" msgid="7968287837902871289">"互動報告"</string>
-    <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"在大部分情況下,建議您使用此選項,以便追蹤報告進度、輸入更多與問題相關的詳細資料,以及擷取螢幕畫面。系統可能會省略一些不常用的部分,以縮短產生報告的時間。"</string>
+    <string name="bugreport_option_interactive_summary" msgid="8493795476325339542">"在大部分情況下,建議你使用此選項,以便追蹤報告進度、輸入更多與問題相關的詳細資料,以及擷取螢幕畫面。系統可能會省略一些不常用的部分,以縮短產生報告的時間。"</string>
     <string name="bugreport_option_full_title" msgid="7681035745950045690">"完整報告"</string>
-    <string name="bugreport_option_full_summary" msgid="1975130009258435885">"如果裝置沒有反應或運作速度較慢,或您需要完整的報告時,建議使用此選項將系統的干擾程度降至最低。此選項不允許您輸入更多詳細資料,或擷取更多螢幕畫面。"</string>
+    <string name="bugreport_option_full_summary" msgid="1975130009258435885">"如果裝置沒有反應或運作速度較慢,或你需要完整的報告時,建議使用此選項將系統的干擾程度降至最低。此選項不允許你輸入更多詳細資料,或擷取更多螢幕畫面。"</string>
     <string name="bugreport_countdown" msgid="6418620521782120755">"{count,plural, =1{系統將在 # 秒後擷取錯誤報告的螢幕畫面。}other{系統將在 # 秒後擷取錯誤報告的螢幕畫面。}}"</string>
     <string name="bugreport_screenshot_success_toast" msgid="7986095104151473745">"已為錯誤報告擷取螢幕截圖"</string>
     <string name="bugreport_screenshot_failure_toast" msgid="6736320861311294294">"無法為錯誤報告擷取螢幕截圖"</string>
@@ -298,12 +298,14 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android 系統"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"切換至個人設定檔"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"切換至工作設定檔"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"轉去個人應用程式「<xliff:g id="APP_NAME">%1$s</xliff:g>」"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"轉去工作應用程式「<xliff:g id="APP_NAME">%1$s</xliff:g>」"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"通訊錄"</string>
-    <string name="permgroupdesc_contacts" msgid="9163927941244182567">"存取您的通訊錄"</string>
+    <string name="permgroupdesc_contacts" msgid="9163927941244182567">"存取你的通訊錄"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"位置"</string>
     <string name="permgroupdesc_location" msgid="1995955142118450685">"存取此裝置的位置"</string>
     <string name="permgrouplab_calendar" msgid="6426860926123033230">"日曆"</string>
-    <string name="permgroupdesc_calendar" msgid="6762751063361489379">"存取您的日曆"</string>
+    <string name="permgroupdesc_calendar" msgid="6762751063361489379">"存取你的日曆"</string>
     <string name="permgrouplab_sms" msgid="795737735126084874">"短訊"</string>
     <string name="permgroupdesc_sms" msgid="5726462398070064542">"傳送和查看短訊"</string>
     <string name="permgrouplab_storage" msgid="17339216290379241">"檔案"</string>
@@ -325,14 +327,14 @@
     <string name="permgrouplab_phone" msgid="570318944091926620">"電話"</string>
     <string name="permgroupdesc_phone" msgid="270048070781478204">"撥打電話及管理通話"</string>
     <string name="permgrouplab_sensors" msgid="9134046949784064495">"人體感應器"</string>
-    <string name="permgroupdesc_sensors" msgid="2610631290633747752">"存取與您生命體徵相關的感應器資料"</string>
+    <string name="permgroupdesc_sensors" msgid="2610631290633747752">"存取與你生命體徵相關的感應器資料"</string>
     <string name="permgrouplab_notifications" msgid="5472972361980668884">"通知"</string>
     <string name="permgroupdesc_notifications" msgid="4608679556801506580">"顯示通知"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"擷取視窗內容"</string>
-    <string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"檢查您使用中的視窗內容。"</string>
+    <string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"檢查你使用中的視窗內容。"</string>
     <string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"開啟「輕觸探索」功能"</string>
-    <string name="capability_desc_canRequestTouchExploration" msgid="4394677060796752976">"朗讀您輕按的項目,並可讓您使用手勢探索螢幕。"</string>
-    <string name="capability_title_canRequestFilterKeyEvents" msgid="2772371671541753254">"記錄您輸入的文字"</string>
+    <string name="capability_desc_canRequestTouchExploration" msgid="4394677060796752976">"朗讀你輕按的項目,並可讓你使用手勢探索螢幕。"</string>
+    <string name="capability_title_canRequestFilterKeyEvents" msgid="2772371671541753254">"記錄你輸入的文字"</string>
     <string name="capability_desc_canRequestFilterKeyEvents" msgid="2381315802405773092">"包括個人資料,如信用卡號碼和密碼。"</string>
     <string name="capability_title_canControlMagnification" msgid="7701572187333415795">"控制顯示屏的放大功能"</string>
     <string name="capability_desc_canControlMagnification" msgid="2206586716709254805">"控制顯示屏的縮放程度和位置。"</string>
@@ -360,31 +362,31 @@
     <string name="permlab_answerPhoneCalls" msgid="4131324833663725855">"接聽來電"</string>
     <string name="permdesc_answerPhoneCalls" msgid="894386681983116838">"允許應用程式接聽來電。"</string>
     <string name="permlab_receiveSms" msgid="505961632050451881">"接收短訊 (SMS)"</string>
-    <string name="permdesc_receiveSms" msgid="1797345626687832285">"允許應用程式接收和處理短訊。這表示應用程式可監控傳送至您裝置的訊息,或在您閱讀訊息前擅自刪除訊息。"</string>
+    <string name="permdesc_receiveSms" msgid="1797345626687832285">"允許應用程式接收和處理短訊。這表示應用程式可監控傳送至你裝置的訊息,或在你閱讀訊息前擅自刪除訊息。"</string>
     <string name="permlab_receiveMms" msgid="4000650116674380275">"接收短訊 (MMS)"</string>
-    <string name="permdesc_receiveMms" msgid="958102423732219710">"允許應用程式接收和處理 MMS 訊息。這表示應用程式可監控傳送至您裝置的訊息,或在您閱讀訊息前擅自刪除訊息。"</string>
+    <string name="permdesc_receiveMms" msgid="958102423732219710">"允許應用程式接收和處理 MMS 訊息。這表示應用程式可監控傳送至你裝置的訊息,或在你閱讀訊息前擅自刪除訊息。"</string>
     <string name="permlab_bindCellBroadcastService" msgid="586746677002040651">"轉寄區域廣播訊息"</string>
-    <string name="permdesc_bindCellBroadcastService" msgid="6540910200973641606">"允許應用程式繫結至區域廣播模組,以在收到區域廣播訊息時轉寄訊息。在某些地點,系統會發出區域廣播通知,提示您有緊急狀況發生。惡意應用程式可能會在裝置收到緊急區域廣播時,干擾裝置的效能或運作。"</string>
+    <string name="permdesc_bindCellBroadcastService" msgid="6540910200973641606">"允許應用程式繫結至區域廣播模組,以在收到區域廣播訊息時轉寄訊息。在某些地點,系統會發出區域廣播通知,提示你有緊急狀況發生。惡意應用程式可能會在裝置收到緊急區域廣播時,干擾裝置的效能或運作。"</string>
     <string name="permlab_manageOngoingCalls" msgid="281244770664231782">"管理正在進行的通話"</string>
     <string name="permdesc_manageOngoingCalls" msgid="7003138133829915265">"允許應用程式查看裝置上正在進行的通話詳情並控制通話。"</string>
     <string name="permlab_readCellBroadcasts" msgid="5869884450872137693">"讀取區域廣播訊息"</string>
-    <string name="permdesc_readCellBroadcasts" msgid="672513437331980168">"允許應用程式讀取您裝置接收的區域廣播訊息。某些地點會發出區域廣播警報,警告您發生緊急狀況。惡意應用程式可能會在裝置收到緊急區域廣播時,干擾裝置的性能或運作。"</string>
+    <string name="permdesc_readCellBroadcasts" msgid="672513437331980168">"允許應用程式讀取你裝置接收的區域廣播訊息。某些地點會發出區域廣播警報,警告你發生緊急狀況。惡意應用程式可能會在裝置收到緊急區域廣播時,干擾裝置的性能或運作。"</string>
     <string name="permlab_subscribedFeedsRead" msgid="217624769238425461">"讀取訂閱的資訊提供"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="6911349196661811865">"允許應用程式取得目前已同步的資訊提供的詳細資料。"</string>
     <string name="permlab_sendSms" msgid="7757368721742014252">"傳送和查看 SMS 短訊"</string>
-    <string name="permdesc_sendSms" msgid="6757089798435130769">"允許應用程式傳送短訊,但可能產生未預期的費用。惡意應用程式可能會未經您確認擅自傳送短訊,增加您的支出。"</string>
-    <string name="permlab_readSms" msgid="5164176626258800297">"讀取您的短訊 (SMS 或 MMS)"</string>
-    <string name="permdesc_readSms" product="tablet" msgid="7912990447198112829">"此應用程式可以讀取所有儲存在您的平板電腦中的短訊。"</string>
+    <string name="permdesc_sendSms" msgid="6757089798435130769">"允許應用程式傳送短訊,但可能產生未預期的費用。惡意應用程式可能會未經你確認擅自傳送短訊,增加你的支出。"</string>
+    <string name="permlab_readSms" msgid="5164176626258800297">"讀取你的短訊 (SMS 或 MMS)"</string>
+    <string name="permdesc_readSms" product="tablet" msgid="7912990447198112829">"此應用程式可以讀取所有儲存在你的平板電腦中的短訊。"</string>
     <string name="permdesc_readSms" product="tv" msgid="3054753345758011986">"此應用程式可以讀取所有儲存在 Android TV 裝置中的短訊。"</string>
-    <string name="permdesc_readSms" product="default" msgid="774753371111699782">"此應用程式可以讀取所有儲存在您的手機中的短訊。"</string>
+    <string name="permdesc_readSms" product="default" msgid="774753371111699782">"此應用程式可以讀取所有儲存在你的手機中的短訊。"</string>
     <string name="permlab_receiveWapPush" msgid="4223747702856929056">"接收短訊 (WAP)"</string>
-    <string name="permdesc_receiveWapPush" msgid="1638677888301778457">"允許應用程式接收和處理 WAP 訊息。這項權限也能讓應用程式監控訊息,或在您閱讀訊息前擅自刪除訊息。"</string>
+    <string name="permdesc_receiveWapPush" msgid="1638677888301778457">"允許應用程式接收和處理 WAP 訊息。這項權限也能讓應用程式監控訊息,或在你閱讀訊息前擅自刪除訊息。"</string>
     <string name="permlab_getTasks" msgid="7460048811831750262">"擷取執行中的應用程式"</string>
     <string name="permdesc_getTasks" msgid="7388138607018233726">"允許應用程式擷取有關目前和最近執行的工作的資訊。如此一來,應用程式或可找出裝置上所使用應用程式的相關資訊。"</string>
     <string name="permlab_manageProfileAndDeviceOwners" msgid="639849495253987493">"管理個人檔案和裝置擁有者"</string>
     <string name="permdesc_manageProfileAndDeviceOwners" msgid="7304240671781989283">"允許應用程式設定檔案擁有者和裝置擁有者。"</string>
     <string name="permlab_reorderTasks" msgid="7598562301992923804">"為執行中的應用程式重新排序"</string>
-    <string name="permdesc_reorderTasks" msgid="8796089937352344183">"允許應用程式將工作移至前景或背景。應用程式可以自行處理,您無須操作。"</string>
+    <string name="permdesc_reorderTasks" msgid="8796089937352344183">"允許應用程式將工作移至前景或背景。應用程式可以自行處理,你無須操作。"</string>
     <string name="permlab_enableCarMode" msgid="893019409519325311">"啟用行車模式"</string>
     <string name="permdesc_enableCarMode" msgid="56419168820473508">"允許應用程式啟用車用模式。"</string>
     <string name="permlab_killBackgroundProcesses" msgid="6559320515561928348">"關閉其他應用程式"</string>
@@ -398,7 +400,7 @@
     <string name="permlab_useDataInBackground" msgid="783415807623038947">"在背景中使用數據"</string>
     <string name="permdesc_useDataInBackground" msgid="1230753883865891987">"此應用程式可在背景中使用數據,這可能會增加數據用量。"</string>
     <string name="permlab_schedule_exact_alarm" msgid="6683283918033029730">"排定精準時間的動作"</string>
-    <string name="permdesc_schedule_exact_alarm" msgid="8198009212013211497">"此應用程式可以預先安排系統在指定的未來時間執行工作。這也表示,即使您沒有積極使用裝置,應用程式仍可運作。"</string>
+    <string name="permdesc_schedule_exact_alarm" msgid="8198009212013211497">"此應用程式可以預先安排系統在指定的未來時間執行工作。這也表示,即使你沒有積極使用裝置,應用程式仍可運作。"</string>
     <string name="permlab_use_exact_alarm" msgid="348045139777131552">"預先安排鬧鐘或活動提醒"</string>
     <string name="permdesc_use_exact_alarm" msgid="7033761461886938912">"此應用程式可以預先安排鬧鐘和提醒等動作,讓系統在指定的未來時間發出通知。"</string>
     <string name="permlab_persistentActivity" msgid="464970041740567970">"一律執行應用程式"</string>
@@ -445,40 +447,40 @@
     <string name="permdesc_broadcastSticky" product="tablet" msgid="5058486069846384013">"允許應用程式傳送在廣播結束後仍繼續存在的記憶廣播。過度使用可能會促使平板電腦過度使用記憶體,因而拖慢速度或造成不穩定。"</string>
     <string name="permdesc_broadcastSticky" product="tv" msgid="2338185920171000650">"允許應用程式傳送置頂廣播,並在廣播結束後仍然繼續。過度使用會佔用大量記憶體,可能會令 Android TV 減慢運行速度或無法穩定運行。"</string>
     <string name="permdesc_broadcastSticky" product="default" msgid="134529339678913453">"允許應用程式傳送在廣播結束後仍繼續存在的記憶廣播。過度使用可能會促使手機過度使用記憶體,因而拖慢運行速度或造成不穩定。"</string>
-    <string name="permlab_readContacts" msgid="8776395111787429099">"讀取您的通訊錄"</string>
-    <string name="permdesc_readContacts" product="tablet" msgid="6430093481659992692">"允許應用程式讀取儲存在平板電腦上的聯絡人資料。應用程式亦可存取平板電腦上已建立聯絡人的帳戶,其中可能包括已安裝應用程式所建立的帳戶。這項權限允許應用程式儲存您的聯絡人資料,而惡意應用程式也可能在您不知情時擅自共用聯絡資料。"</string>
-    <string name="permdesc_readContacts" product="tv" msgid="8400138591135554789">"允許應用程式讀取儲存在 Android TV 裝置上的聯絡人資料。應用程式亦可存取 Android TV 裝置上已建立聯絡人的帳戶,其中可能包括已安裝應用程式所建立的帳戶。這項權限允許應用程式儲存您的聯絡人資料,而惡意應用程式也可能在您不知情時擅自共用聯絡資料。"</string>
-    <string name="permdesc_readContacts" product="default" msgid="4911989776203207644">"允許應用程式讀取儲存在手機上的聯絡人資料。應用程式亦可存取手機上已建立聯絡人的帳戶,其中可能包括已安裝應用程式所建立的帳戶。這項權限允許應用程式儲存您的聯絡人資料,而惡意應用程式也可能在您不知情時擅自共用聯絡資料。"</string>
-    <string name="permlab_writeContacts" msgid="8919430536404830430">"修改您的通訊錄"</string>
+    <string name="permlab_readContacts" msgid="8776395111787429099">"讀取你的通訊錄"</string>
+    <string name="permdesc_readContacts" product="tablet" msgid="6430093481659992692">"允許應用程式讀取儲存在平板電腦上的聯絡人資料。應用程式亦可存取平板電腦上已建立聯絡人的帳戶,其中可能包括已安裝應用程式所建立的帳戶。這項權限允許應用程式儲存你的聯絡人資料,而惡意應用程式也可能在你不知情時擅自共用聯絡資料。"</string>
+    <string name="permdesc_readContacts" product="tv" msgid="8400138591135554789">"允許應用程式讀取儲存在 Android TV 裝置上的聯絡人資料。應用程式亦可存取 Android TV 裝置上已建立聯絡人的帳戶,其中可能包括已安裝應用程式所建立的帳戶。這項權限允許應用程式儲存你的聯絡人資料,而惡意應用程式也可能在你不知情時擅自共用聯絡資料。"</string>
+    <string name="permdesc_readContacts" product="default" msgid="4911989776203207644">"允許應用程式讀取儲存在手機上的聯絡人資料。應用程式亦可存取手機上已建立聯絡人的帳戶,其中可能包括已安裝應用程式所建立的帳戶。這項權限允許應用程式儲存你的聯絡人資料,而惡意應用程式也可能在你不知情時擅自共用聯絡資料。"</string>
+    <string name="permlab_writeContacts" msgid="8919430536404830430">"修改你的通訊錄"</string>
     <string name="permdesc_writeContacts" product="tablet" msgid="6422419281427826181">"允許應用程式修改儲存在平板電腦上的聯絡人資料。這項權限允許應用程式刪除聯絡人資料。"</string>
     <string name="permdesc_writeContacts" product="tv" msgid="6488872735379978935">"允許應用程式修改儲存在 Android TV 裝置上的聯絡人資料。這項權限允許應用程式刪除聯絡人資料。"</string>
     <string name="permdesc_writeContacts" product="default" msgid="8304795696237065281">"允許應用程式修改儲存在手機上的聯絡人資料。這項權限允許應用程式刪除聯絡人資料。"</string>
     <string name="permlab_readCallLog" msgid="1739990210293505948">"讀取通話記錄"</string>
-    <string name="permdesc_readCallLog" msgid="8964770895425873433">"此應用程式可以讀取您的通話記錄。"</string>
+    <string name="permdesc_readCallLog" msgid="8964770895425873433">"此應用程式可以讀取你的通話記錄。"</string>
     <string name="permlab_writeCallLog" msgid="670292975137658895">"寫入通話記錄"</string>
-    <string name="permdesc_writeCallLog" product="tablet" msgid="2657525794731690397">"允許應用程式修改平板電腦的通話記錄,包括來電和已撥電話相關資料。惡意應用程式可能會藉此刪除或修改您的通話記錄。"</string>
-    <string name="permdesc_writeCallLog" product="tv" msgid="3934939195095317432">"允許應用程式修改 Android TV 裝置的通話記錄,包括來電和撥出電話的相關資料。惡意應用程式可能會藉此清除或修改您的通話記錄。"</string>
-    <string name="permdesc_writeCallLog" product="default" msgid="5903033505665134802">"允許應用程式修改手機的通話記錄,包括來電和已撥電話相關資料。惡意應用程式可能會藉此刪除或修改您的通話記錄。"</string>
+    <string name="permdesc_writeCallLog" product="tablet" msgid="2657525794731690397">"允許應用程式修改平板電腦的通話記錄,包括來電和已撥電話相關資料。惡意應用程式可能會藉此刪除或修改你的通話記錄。"</string>
+    <string name="permdesc_writeCallLog" product="tv" msgid="3934939195095317432">"允許應用程式修改 Android TV 裝置的通話記錄,包括來電和撥出電話的相關資料。惡意應用程式可能會藉此清除或修改你的通話記錄。"</string>
+    <string name="permdesc_writeCallLog" product="default" msgid="5903033505665134802">"允許應用程式修改手機的通話記錄,包括來電和已撥電話相關資料。惡意應用程式可能會藉此刪除或修改你的通話記錄。"</string>
     <string name="permlab_bodySensors" msgid="662918578601619569">"在使用時存取人體感應器資料,例如心率"</string>
     <string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"允許應用程式在使用時存取人體感應器資料,例如心率、體溫、血氧百分比等。"</string>
     <string name="permlab_bodySensors_background" msgid="4912560779957760446">"在背景執行時存取人體感應器資料,例如心率"</string>
     <string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"允許應用程式在背景執行時存取人體感應器資料,例如心率、體溫、血氧百分比等。"</string>
     <string name="permlab_readCalendar" msgid="6408654259475396200">"讀取日曆活動和詳情"</string>
-    <string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"此應用程式可以讀取所有儲存在您的平板電腦的日曆活動,並分享或儲存您的日曆資料。"</string>
-    <string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"此應用程式可以讀取所有儲存在 Android TV 裝置上的日曆活動,並分享或儲存您的日曆資料。"</string>
-    <string name="permdesc_readCalendar" product="default" msgid="9118823807655829957">"此應用程式可以讀取所有儲存在您的手機中的日曆活動,並分享或儲存您的日曆資料。"</string>
+    <string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"此應用程式可以讀取所有儲存在你的平板電腦的日曆活動,並分享或儲存你的日曆資料。"</string>
+    <string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"此應用程式可以讀取所有儲存在 Android TV 裝置上的日曆活動,並分享或儲存你的日曆資料。"</string>
+    <string name="permdesc_readCalendar" product="default" msgid="9118823807655829957">"此應用程式可以讀取所有儲存在你的手機中的日曆活動,並分享或儲存你的日曆資料。"</string>
     <string name="permlab_writeCalendar" msgid="6422137308329578076">"在機主不知情下,新增或修改日曆活動,以及發送電郵給嘉賓"</string>
-    <string name="permdesc_writeCalendar" product="tablet" msgid="8722230940717092850">"此應用程式可以加入、移除或變更您的平板電腦中的日曆活動。此應用程式可以傳送看似來自日曆擁有者的訊息,或變更活動而不通知其擁有者。"</string>
+    <string name="permdesc_writeCalendar" product="tablet" msgid="8722230940717092850">"此應用程式可以加入、移除或變更你的平板電腦中的日曆活動。此應用程式可以傳送看似來自日曆擁有者的訊息,或變更活動而不通知其擁有者。"</string>
     <string name="permdesc_writeCalendar" product="tv" msgid="951246749004952706">"此應用程式可以加入、移除或變更 Android TV 裝置中的日曆活動。此應用程式可以傳送看似來自日曆擁有者的訊息,或變更活動而不通知其擁有者。"</string>
-    <string name="permdesc_writeCalendar" product="default" msgid="5416380074475634233">"此應用程式可以加入、移除或變更您的手機中的日曆活動。此應用程式可以傳送看似來自日曆擁有者的訊息,或變更活動而不通知其擁有者。"</string>
+    <string name="permdesc_writeCalendar" product="default" msgid="5416380074475634233">"此應用程式可以加入、移除或變更你的手機中的日曆活動。此應用程式可以傳送看似來自日曆擁有者的訊息,或變更活動而不通知其擁有者。"</string>
     <string name="permlab_accessLocationExtraCommands" msgid="5162339812057983988">"接收額外的位置提供者指令"</string>
     <string name="permdesc_accessLocationExtraCommands" msgid="355369611979907967">"允許應用程式存取額外的位置提供者指令。這項設定可能會使應用程式干擾 GPS 或其他位置來源的運作。"</string>
     <string name="permlab_accessFineLocation" msgid="6426318438195622966">"只在前景存取精確位置"</string>
-    <string name="permdesc_accessFineLocation" msgid="6732174080240016335">"使用此應用程式時,應用程式可透過定位服務獲取您的精確位置。您的裝置必須開啟定位服務,才能讓應用程式獲取位置。這可能會增加電池用量。"</string>
+    <string name="permdesc_accessFineLocation" msgid="6732174080240016335">"使用此應用程式時,應用程式可透過定位服務獲取你的精確位置。你的裝置必須開啟定位服務,才能讓應用程式獲取位置。這可能會增加電池用量。"</string>
     <string name="permlab_accessCoarseLocation" msgid="1561042925407799741">"只在前景存取概略位置"</string>
-    <string name="permdesc_accessCoarseLocation" msgid="778521847873199160">"使用此應用程式時,應用程式可透過定位服務獲取您的概略位置。您的裝置必須開啟定位服務,才能讓應用程式獲取位置。"</string>
+    <string name="permdesc_accessCoarseLocation" msgid="778521847873199160">"使用此應用程式時,應用程式可透過定位服務獲取你的概略位置。你的裝置必須開啟定位服務,才能讓應用程式獲取位置。"</string>
     <string name="permlab_accessBackgroundLocation" msgid="1721164702777366138">"在背景存取位置資訊"</string>
-    <string name="permdesc_accessBackgroundLocation" msgid="8264885066095638105">"即使您不使用此應用程式,它仍可隨時存取位置。"</string>
+    <string name="permdesc_accessBackgroundLocation" msgid="8264885066095638105">"即使你不使用此應用程式,它仍可隨時存取位置。"</string>
     <string name="permlab_modifyAudioSettings" msgid="6129039778010031815">"更改音效設定"</string>
     <string name="permdesc_modifyAudioSettings" msgid="8687227609663124921">"允許應用程式修改全域音頻設定,例如音量和用於輸出的喇叭。"</string>
     <string name="permlab_recordAudio" msgid="1208457423054219147">"錄音"</string>
@@ -490,7 +492,7 @@
     <string name="permlab_sim_communication" msgid="176788115994050692">"發送指令至 SIM 卡"</string>
     <string name="permdesc_sim_communication" msgid="4179799296415957960">"允許應用程式傳送指令到 SIM 卡。這項操作具有高危險性。"</string>
     <string name="permlab_activityRecognition" msgid="1782303296053990884">"識別體能活動"</string>
-    <string name="permdesc_activityRecognition" msgid="8667484762991357519">"此應用程式可識別您的體能活動。"</string>
+    <string name="permdesc_activityRecognition" msgid="8667484762991357519">"此應用程式可識別你的體能活動。"</string>
     <string name="permlab_camera" msgid="6320282492904119413">"拍照和拍攝影片"</string>
     <string name="permdesc_camera" msgid="5240801376168647151">"此應用程式在使用期間可使用相機拍照及錄影。"</string>
     <string name="permlab_backgroundCamera" msgid="7549917926079731681">"在背景拍照及錄影"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"允許應用程式控制震動。"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"允許應用程式存取震動狀態。"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"直接撥打電話號碼"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"允許應用程式繞過您自行撥打電話號碼,但可能會產生未預期的費用或撥打未預期的電話。注意:這項權限不允許應用程式撥打緊急電話。惡意應用程式可能未經您確認擅自撥打電話,增加您的支出。"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"允許應用程式未經您操作自行撥打電話號碼,但這可能會產生非預期的費用或通話。請注意,此權限並不允許應用程式撥打緊急電話號碼。惡意應用程式可能利用此功能擅自撥打電話或撥打流動網絡供應商代碼,導致來電自動轉駁至其他號碼,產生不必要的額外費用。"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"使用 IMS 通話服務"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"允許應用程式自行使用 IMS 服務撥打電話。"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"讀取手機狀態和識別碼"</string>
@@ -541,9 +543,9 @@
     <string name="permdesc_setTimeZone" product="tv" msgid="9069045914174455938">"允許應用程式變更 Android TV 裝置的時區。"</string>
     <string name="permdesc_setTimeZone" product="default" msgid="4611828585759488256">"允許應用程式更改手機的時區。"</string>
     <string name="permlab_getAccounts" msgid="5304317160463582791">"找出裝置上的帳戶"</string>
-    <string name="permdesc_getAccounts" product="tablet" msgid="1784452755887604512">"允許應用程式取得平板電腦已知的帳戶清單,其中可能包括您安裝的應用程式所建立的任何帳戶。"</string>
+    <string name="permdesc_getAccounts" product="tablet" msgid="1784452755887604512">"允許應用程式取得平板電腦已知的帳戶清單,其中可能包括你安裝的應用程式所建立的任何帳戶。"</string>
     <string name="permdesc_getAccounts" product="tv" msgid="437604680436540822">"允許應用程式取得 Android TV 裝置已知的帳戶清單,其中可能包括已安裝應用程式所建立的任何帳戶。"</string>
-    <string name="permdesc_getAccounts" product="default" msgid="2491273043569751867">"允許應用程式取得手機已知的帳戶清單,其中可能包括您安裝的應用程式所建立的任何帳戶。"</string>
+    <string name="permdesc_getAccounts" product="default" msgid="2491273043569751867">"允許應用程式取得手機已知的帳戶清單,其中可能包括你安裝的應用程式所建立的任何帳戶。"</string>
     <string name="permlab_accessNetworkState" msgid="2349126720783633918">"查看網絡連線"</string>
     <string name="permdesc_accessNetworkState" msgid="4394564702881662849">"允許應用程式查看網絡連線相關資訊,例如有哪些網絡和已連接哪些網絡。"</string>
     <string name="permlab_createNetworkSockets" msgid="3224420491603590541">"擁有全面網絡存取權"</string>
@@ -557,9 +559,9 @@
     <string name="permlab_changeWifiState" msgid="7947824109713181554">"與 Wi-Fi 網絡建立和中斷連線"</string>
     <string name="permdesc_changeWifiState" msgid="7170350070554505384">"允許應用程式建立或中斷與 Wi-Fi 接入點的連線,並可更改 Wi-Fi 網絡的裝置設定。"</string>
     <string name="permlab_changeWifiMulticastState" msgid="285626875870754696">"允許接收 Wi-Fi 多點傳播封包"</string>
-    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="191079868596433554">"允許應用程式接收透過多點傳播位址傳送給 Wi-Fi 網絡上所有裝置 (而不只是傳送給您的平板電腦) 的封包。這樣會比非多點傳播模式耗用更多電力。"</string>
-    <string name="permdesc_changeWifiMulticastState" product="tv" msgid="1336952358450652595">"允許應用程式接收由多點傳播位址向 Wi-Fi 網絡上所有裝置 (不只限於您的 Android TV 裝置) 傳送的數據包。這樣會比非多點傳播模式消耗更多電力。"</string>
-    <string name="permdesc_changeWifiMulticastState" product="default" msgid="8296627590220222740">"允許應用程式接收透過多點傳播位址傳送給 Wi-Fi 網絡上所有裝置 (而不只是傳送給您的手機) 的封包。這樣會比非多點傳播模式耗用更多電力。"</string>
+    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="191079868596433554">"允許應用程式接收透過多點傳播位址傳送給 Wi-Fi 網絡上所有裝置 (而不只是傳送給你的平板電腦) 的封包。這樣會比非多點傳播模式耗用更多電力。"</string>
+    <string name="permdesc_changeWifiMulticastState" product="tv" msgid="1336952358450652595">"允許應用程式接收由多點傳播位址向 Wi-Fi 網絡上所有裝置 (不只限於你的 Android TV 裝置) 傳送的數據包。這樣會比非多點傳播模式消耗更多電力。"</string>
+    <string name="permdesc_changeWifiMulticastState" product="default" msgid="8296627590220222740">"允許應用程式接收透過多點傳播位址傳送給 Wi-Fi 網絡上所有裝置 (而不只是傳送給你的手機) 的封包。這樣會比非多點傳播模式耗用更多電力。"</string>
     <string name="permlab_bluetoothAdmin" msgid="6490373569441946064">"存取藍牙設定"</string>
     <string name="permdesc_bluetoothAdmin" product="tablet" msgid="5370837055438574863">"允許應用程式設定本機藍牙平板電腦,以及與偵測到的遠端裝置配對。"</string>
     <string name="permdesc_bluetoothAdmin" product="tv" msgid="1623992984547014588">"允許應用程式設定 Android TV 裝置上的藍牙,以及與偵測到的遙距裝置配對。"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"允許應用程式取得由用戶允許授權的 NFC 付款服務資訊 (如已註冊的付款輔助功能和最終付款對象)。"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"控制近距離無線通訊"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"允許應用程式使用近距離無線通訊 (NFC) 標記、卡片及讀取程式進行通訊。"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"安全元件交易活動"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"允許應用程式接收在安全元件上發生的交易相關資訊。"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"停用螢幕上鎖"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"允許應用程式停用按鍵鎖定以及其他相關的密碼安全措施。例如:手機收到來電時停用按鍵鎖定,通話結束後重新啟用按鍵鎖定。"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"要求螢幕鎖定複雜程度"</string>
@@ -602,22 +606,25 @@
     <string name="permdesc_manageFingerprint" msgid="2025616816437339865">"允許應用程式調用加入和刪除指紋模板的方法以供使用。"</string>
     <string name="permlab_useFingerprint" msgid="1001421069766751922">"使用指紋硬件"</string>
     <string name="permdesc_useFingerprint" msgid="412463055059323742">"允許應用程式使用指紋硬件驗證"</string>
-    <string name="permlab_audioWrite" msgid="8501705294265669405">"修改您的音樂收藏"</string>
-    <string name="permdesc_audioWrite" msgid="8057399517013412431">"允許應用程式修改您的音樂收藏。"</string>
-    <string name="permlab_videoWrite" msgid="5940738769586451318">"修改您的影片集"</string>
-    <string name="permdesc_videoWrite" msgid="6124731210613317051">"允許應用程式修改您的影片集。"</string>
-    <string name="permlab_imagesWrite" msgid="1774555086984985578">"修改您的相片集"</string>
-    <string name="permdesc_imagesWrite" msgid="5195054463269193317">"允許應用程式修改您的相片集。"</string>
+    <string name="permlab_audioWrite" msgid="8501705294265669405">"修改你的音樂收藏"</string>
+    <string name="permdesc_audioWrite" msgid="8057399517013412431">"允許應用程式修改你的音樂收藏。"</string>
+    <string name="permlab_videoWrite" msgid="5940738769586451318">"修改你的影片集"</string>
+    <string name="permdesc_videoWrite" msgid="6124731210613317051">"允許應用程式修改你的影片集。"</string>
+    <string name="permlab_imagesWrite" msgid="1774555086984985578">"修改你的相片集"</string>
+    <string name="permdesc_imagesWrite" msgid="5195054463269193317">"允許應用程式修改你的相片集。"</string>
     <string name="permlab_mediaLocation" msgid="7368098373378598066">"讀取媒體集的位置"</string>
     <string name="permdesc_mediaLocation" msgid="597912899423578138">"允許應用程式讀取媒體集的位置。"</string>
     <string name="biometric_app_setting_name" msgid="3339209978734534457">"使用生物識別"</string>
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"使用生物識別或螢幕鎖定"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"驗證是你本人"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"如要繼續操作,請使用使用生物識別驗證身分"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"如要繼續操作,請使用你的指紋驗證身分"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"如要繼續操作,請使用你的面孔驗證身分"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"請使用生物識別或螢幕鎖定功能驗證身分,才能繼續操作"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"無法使用生物識別硬件"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"已取消驗證"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"未能識別"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"無法辨識面孔"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"已取消驗證"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"未設定 PIN、圖案或密碼"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"驗證時發生錯誤"</string>
@@ -657,7 +664,7 @@
     <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>
-    <string name="fingerprint_dialog_default_subtitle" msgid="3879832845486835905">"請使用您的指紋繼續"</string>
+    <string name="fingerprint_dialog_default_subtitle" msgid="3879832845486835905">"請使用你的指紋繼續"</string>
     <string name="fingerprint_or_screen_lock_dialog_default_subtitle" msgid="5195808203117992200">"請使用指紋解鎖或螢幕鎖定功能驗證身分,才能繼續操作"</string>
   <string-array name="fingerprint_error_vendor">
   </string-array>
@@ -699,8 +706,8 @@
     <!-- 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>
+    <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"偵測到深色眼鏡。你必須展示整個面孔。"</string>
+    <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"偵測到面部遮蓋物。你必須展示整個面孔。"</string>
   <string-array name="face_acquired_vendor">
   </string-array>
     <string name="face_error_hw_not_available" msgid="5085202213036026288">"無法驗證面孔,硬件無法使用。"</string>
@@ -709,17 +716,16 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"面孔操作已取消。"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"使用者已取消「面孔解鎖」"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"嘗試次數過多,請稍後再試。"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"嘗試次數過多,無法使用面孔解鎖。"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"嘗試次數過多,請改為解除螢幕鎖定來驗證身分。"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"無法驗證面孔。請再試一次。"</string>
-    <string name="face_error_not_enrolled" msgid="1134739108536328412">"您尚未設定「面孔解鎖」"</string>
+    <string name="face_error_not_enrolled" msgid="1134739108536328412">"你尚未設定「面孔解鎖」"</string>
     <string name="face_error_hw_not_present" msgid="7940978724978763011">"此裝置不支援「面孔解鎖」"</string>
     <string name="face_error_security_update_required" msgid="5076017208528750161">"感應器已暫時停用。"</string>
     <string name="face_name_template" msgid="3877037340223318119">"面孔 <xliff:g id="FACEID">%d</xliff:g>"</string>
     <string name="face_app_setting_name" msgid="5854024256907828015">"使用「面孔解鎖」"</string>
     <string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"使用面孔或螢幕鎖定"</string>
-    <string name="face_dialog_default_subtitle" msgid="6620492813371195429">"如要繼續操作,請使用您的面孔驗證身分"</string>
+    <string name="face_dialog_default_subtitle" msgid="6620492813371195429">"如要繼續操作,請使用你的面孔驗證身分"</string>
     <string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"請使用面孔解鎖或螢幕鎖定功能驗證身分,才能繼續操作"</string>
   <string-array name="face_error_vendor">
   </string-array>
@@ -731,8 +737,8 @@
     <string name="permdesc_writeSyncSettings" msgid="6029151549667182687">"允許應用程式修改帳戶的同步設定,例如讓「通訊錄」應用程式與某個帳戶保持同步。"</string>
     <string name="permlab_readSyncStats" msgid="3747407238320105332">"讀取同步處理統計資料"</string>
     <string name="permdesc_readSyncStats" msgid="3867809926567379434">"允許應用程式讀取帳戶的同步統計資料,包括同步活動記錄,以及保持同步的資料量。"</string>
-    <string name="permlab_sdcardRead" msgid="5791467020950064920">"讀取您共用儲存空間的內容"</string>
-    <string name="permdesc_sdcardRead" msgid="6872973242228240382">"允許應用程式讀取您共用儲存空間的內容。"</string>
+    <string name="permlab_sdcardRead" msgid="5791467020950064920">"讀取你共用儲存空間的內容"</string>
+    <string name="permdesc_sdcardRead" msgid="6872973242228240382">"允許應用程式讀取你共用儲存空間的內容。"</string>
     <string name="permlab_readMediaAudio" msgid="8723513075731763810">"讀取共用儲存空間中的音訊檔案"</string>
     <string name="permdesc_readMediaAudio" msgid="5299772574434619399">"允許應用程式讀取共用儲存空間中的音訊檔案。"</string>
     <string name="permlab_readMediaVideo" msgid="7768003311260655007">"讀取共用儲存空間中的影片檔案"</string>
@@ -740,9 +746,9 @@
     <string name="permlab_readMediaImages" msgid="4057590631020986789">"讀取共用儲存空間中的圖片檔案"</string>
     <string name="permdesc_readMediaImages" msgid="5836219373138469259">"允許應用程式讀取共用儲存空間中的圖片檔案。"</string>
     <string name="permlab_readVisualUserSelect" msgid="5516204215354667586">"讀取使用者在共用儲存空間中選取的圖片和影片檔案"</string>
-    <string name="permdesc_readVisualUserSelect" msgid="8027174717714968217">"允許應用程式讀取您在共用儲存空間中選取的圖片和影片檔案。"</string>
-    <string name="permlab_sdcardWrite" msgid="4863021819671416668">"修改或刪除您共用儲存空間的內容"</string>
-    <string name="permdesc_sdcardWrite" msgid="8376047679331387102">"允許應用程式寫入您共用儲存空間的內容。"</string>
+    <string name="permdesc_readVisualUserSelect" msgid="8027174717714968217">"允許應用程式讀取你在共用儲存空間中選取的圖片和影片檔案。"</string>
+    <string name="permlab_sdcardWrite" msgid="4863021819671416668">"修改或刪除你共用儲存空間的內容"</string>
+    <string name="permdesc_sdcardWrite" msgid="8376047679331387102">"允許應用程式寫入你共用儲存空間的內容。"</string>
     <string name="permlab_use_sip" msgid="8250774565189337477">"撥打/接聽 SIP 電話"</string>
     <string name="permdesc_use_sip" msgid="3590270893253204451">"允許應用程式撥打及接聽 SIP 電話。"</string>
     <string name="permlab_register_sim_subscription" msgid="1653054249287576161">"註冊新的電訊 SIM 卡連接"</string>
@@ -986,24 +992,24 @@
     <string name="lockscreen_transport_stop_description" msgid="1449552232598355348">"停止"</string>
     <string name="lockscreen_transport_rew_description" msgid="7680106856221622779">"倒帶"</string>
     <string name="lockscreen_transport_ffw_description" msgid="4763794746640196772">"向前快轉"</string>
-    <string name="emergency_calls_only" msgid="3057351206678279851">"只可撥打緊急電話"</string>
+    <string name="emergency_calls_only" msgid="3057351206678279851">"只可致電緊急電話"</string>
     <string name="lockscreen_network_locked_message" msgid="2814046965899249635">"網絡已鎖定"</string>
     <string name="lockscreen_sim_puk_locked_message" msgid="2867953953604224166">"SIM 卡已使用 PUK 鎖定。"</string>
     <string name="lockscreen_sim_puk_locked_instructions" msgid="5307979043730860995">"請參閱使用者指南或與客戶服務中心聯絡。"</string>
     <string name="lockscreen_sim_locked_message" msgid="5911944931911850164">"SIM 卡已鎖定。"</string>
     <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="8381565919325410939">"正在解鎖 SIM 卡…"</string>
-    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6458790975898594240">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%2$d</xliff:g> 秒後再試一次。"</string>
-    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"您已輸入錯誤的密碼 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%2$d</xliff:g> 秒後再試一次。"</string>
-    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"您已輸入錯誤的 PIN 碼 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%2$d</xliff:g> 秒後再試一次。"</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="3069635524964070596">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求您使用您的 Google 登入資料解開上鎖的平板電腦。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求您使用 Google 登入資料將 Android TV 裝置解鎖。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="5691623136957148335">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求您使用您的 Google 登入資料解開上鎖的手機。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
-    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="7914445759242151426">"您嘗試解除這部平板電腦的鎖定已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,剩餘 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次嘗試機會。如果失敗次數超過嘗試次數限制,平板電腦將恢復原廠設定,所有使用者資料均會遺失。"</string>
-    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="4275591249631864248">"您已 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次無法解鎖 Android TV 裝置。如果再失敗 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次,Android TV 裝置將回復原廠設定,所有使用者資料均會遺失。"</string>
-    <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="1166532464798446579">"您嘗試解除這部手機的鎖定已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,剩餘 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次嘗試機會。如果失敗次數超過嘗試次數限制,手機將恢復原廠設定,所有使用者資料均會遺失。"</string>
-    <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="8682445539263683414">"您嘗試解除這部平板電腦的鎖定已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。平板電腦現在會重設為原廠預設值。"</string>
-    <string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="2205435033340091883">"您已 <xliff:g id="NUMBER">%d</xliff:g> 次無法解鎖 Android TV 裝置,Android TV 裝置現在將回復原廠設定。"</string>
-    <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="2203704707679895487">"您嘗試解除這部手機的鎖定已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。手機現在會重設為原廠預設值。"</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6458790975898594240">"你已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%2$d</xliff:g> 秒後再試一次。"</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"你已輸入錯誤的密碼 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%2$d</xliff:g> 秒後再試一次。"</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"你已輸入錯誤的 PIN 碼 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%2$d</xliff:g> 秒後再試一次。"</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="3069635524964070596">"你已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求你使用你的 Google 登入資料解開上鎖的平板電腦。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"你已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求你使用 Google 登入資料將 Android TV 裝置解鎖。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="5691623136957148335">"你已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求你使用你的 Google 登入資料解開上鎖的手機。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="7914445759242151426">"你嘗試解除這部平板電腦的鎖定已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,剩餘 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次嘗試機會。如果失敗次數超過嘗試次數限制,平板電腦將恢復原廠設定,所有使用者資料均會遺失。"</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="4275591249631864248">"你已 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次無法解鎖 Android TV 裝置。如果再失敗 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次,Android TV 裝置將回復原廠設定,所有使用者資料均會遺失。"</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="1166532464798446579">"你嘗試解除這部手機的鎖定已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,剩餘 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次嘗試機會。如果失敗次數超過嘗試次數限制,手機將恢復原廠設定,所有使用者資料均會遺失。"</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="8682445539263683414">"你嘗試解除這部平板電腦的鎖定已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。平板電腦現在會重設為原廠預設值。"</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="2205435033340091883">"你已 <xliff:g id="NUMBER">%d</xliff:g> 次無法解鎖 Android TV 裝置,Android TV 裝置現在將回復原廠設定。"</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="2203704707679895487">"你嘗試解除這部手機的鎖定已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。手機現在會重設為原廠預設值。"</string>
     <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6807200118164539589">"<xliff:g id="NUMBER">%d</xliff:g> 秒後再試一次。"</string>
     <string name="lockscreen_forgot_pattern_button_text" msgid="8362442730606839031">"忘記圖案?"</string>
     <string name="lockscreen_glogin_forgot_pattern" msgid="9218940117797602518">"帳戶解鎖"</string>
@@ -1063,12 +1069,12 @@
     <string name="js_dialog_before_unload_title" msgid="7012587995876771246">"確認瀏覽"</string>
     <string name="js_dialog_before_unload_positive_button" msgid="4274257182303565509">"離開這一頁"</string>
     <string name="js_dialog_before_unload_negative_button" msgid="3873765747622415310">"停留在這一頁"</string>
-    <string name="js_dialog_before_unload" msgid="7213364985774778744">"<xliff:g id="MESSAGE">%s</xliff:g>\n\n您確定要離開這個網頁嗎?"</string>
+    <string name="js_dialog_before_unload" msgid="7213364985774778744">"<xliff:g id="MESSAGE">%s</xliff:g>\n\n你確定要離開這個網頁嗎?"</string>
     <string name="autofill_window_title" msgid="4379134104008111961">"<xliff:g id="SERVICENAME">%1$s</xliff:g> 的自動填入功能"</string>
     <string name="permlab_setAlarm" msgid="1158001610254173567">"設定鬧鐘"</string>
     <string name="permdesc_setAlarm" msgid="2185033720060109640">"允許應用程式在安裝的鬧鐘應用程式中設定鬧鐘,某些鬧鐘應用程式可能沒有這項功能。"</string>
     <string name="permlab_addVoicemail" msgid="4770245808840814471">"新增留言"</string>
-    <string name="permdesc_addVoicemail" msgid="5470312139820074324">"允許應用程式將訊息加到您的留言信箱收件箱。"</string>
+    <string name="permdesc_addVoicemail" msgid="5470312139820074324">"允許應用程式將訊息加到你的留言信箱收件箱。"</string>
     <string name="pasted_from_clipboard" msgid="7355790625710831847">"「<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>」已貼上剪貼簿內容"</string>
     <string name="more_item_label" msgid="7419249600215749115">"更多"</string>
     <string name="prepend_shortcut_label" msgid="1743716737502867951">"選單鍵 +"</string>
@@ -1089,8 +1095,8 @@
     <string name="searchview_description_submit" msgid="6771060386117334686">"提交查詢"</string>
     <string name="searchview_description_voice" msgid="42360159504884679">"語音搜尋"</string>
     <string name="enable_explore_by_touch_warning_title" msgid="5095399706284943314">"啟用輕觸探索?"</string>
-    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="1037295476738940824">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> 需要啟用「輕觸探索」。開啟這項功能時,系統會在您的手指輕觸螢幕上的物件時顯示或朗讀說明,您也可以執行手勢來與平板電腦互動。"</string>
-    <string name="enable_explore_by_touch_warning_message" product="default" msgid="4312979647356179250">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> 需要啟用「輕觸探索」。開啟這項功能時,系統會在您的手指輕觸螢幕上的物件時顯示或朗讀說明,您也可以執行手勢來與手機互動。"</string>
+    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="1037295476738940824">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> 需要啟用「輕觸探索」。開啟這項功能時,系統會在你的手指輕觸螢幕上的物件時顯示或朗讀說明,你也可以執行手勢來與平板電腦互動。"</string>
+    <string name="enable_explore_by_touch_warning_message" product="default" msgid="4312979647356179250">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> 需要啟用「輕觸探索」。開啟這項功能時,系統會在你的手指輕觸螢幕上的物件時顯示或朗讀說明,你也可以執行手勢來與手機互動。"</string>
     <string name="oneMonthDurationPast" msgid="4538030857114635777">"1 個月前"</string>
     <string name="beforeOneMonthDurationPast" msgid="8315149541372065392">"1 個月前"</string>
     <string name="last_num_days" msgid="2393660431490280537">"{count,plural, =1{過去 # 天}other{過去 # 天}}"</string>
@@ -1228,7 +1234,7 @@
     <string name="force_close" msgid="9035203496368973803">"確定"</string>
     <string name="report" msgid="2149194372340349521">"報告"</string>
     <string name="wait" msgid="7765985809494033348">"等待"</string>
-    <string name="webpage_unresponsive" msgid="7850879412195273433">"網頁沒有反應。 \n \n您要關閉嗎?"</string>
+    <string name="webpage_unresponsive" msgid="7850879412195273433">"網頁沒有反應。 \n \n你要關閉嗎?"</string>
     <string name="launch_warning_title" msgid="6725456009564953595">"應用程式已重新導向"</string>
     <string name="launch_warning_replace" msgid="3073392976283203402">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」現在正在執行。"</string>
     <string name="launch_warning_original" msgid="3332206576800169626">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」原先已啟動。"</string>
@@ -1237,7 +1243,7 @@
     <string name="screen_compat_mode_hint" msgid="4032272159093750908">"前往 [系統設定] &gt; [應用程式] &gt; [下載] 重新啟用這個模式。"</string>
     <string name="unsupported_display_size_message" msgid="7265211375269394699">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」不支援目前的「螢幕」尺寸設定,畫面可能無法如預期顯示。"</string>
     <string name="unsupported_display_size_show" msgid="980129850974919375">"永遠顯示"</string>
-    <string name="unsupported_compile_sdk_message" msgid="7326293500707890537">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」是專為不兼容 Android OS 版本所打造的應用程式,因此可能無法正常運作。您可能可以使用該應用程式的更新版本。"</string>
+    <string name="unsupported_compile_sdk_message" msgid="7326293500707890537">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」是專為不兼容 Android OS 版本所打造的應用程式,因此可能無法正常運作。你可能可以使用該應用程式的更新版本。"</string>
     <string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"一律顯示"</string>
     <string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"檢查更新"</string>
     <string name="smv_application" msgid="3775183542777792638">"應用程式 <xliff:g id="APPLICATION">%1$s</xliff:g> (處理程序 <xliff:g id="PROCESS">%2$s</xliff:g>) 已違反其自行強制實施的嚴格模式 (StrictMode) 政策。"</string>
@@ -1254,11 +1260,11 @@
     <string name="android_preparing_apk" msgid="589736917792300956">"正在準備 <xliff:g id="APPNAME">%1$s</xliff:g>。"</string>
     <string name="android_upgrading_starting_apps" msgid="6206161195076057075">"正在啟動應用程式。"</string>
     <string name="android_upgrading_complete" msgid="409800058018374746">"啟動完成。"</string>
-    <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"您已按下開關按鈕,這麼做通常會關閉螢幕。\n\n設定指紋時請嘗試輕按開關按鈕。"</string>
+    <string name="fp_power_button_enrollment_message" msgid="5648173517663246140">"你已按下開關按鈕,這麼做通常會關閉螢幕。\n\n設定指紋時請嘗試輕按開關按鈕。"</string>
     <string name="fp_power_button_enrollment_title" msgid="6976841690455338563">"如要結束設定,請關閉螢幕"</string>
     <string name="fp_power_button_enrollment_button_text" msgid="3199783266386029200">"關閉"</string>
     <string name="fp_power_button_bp_title" msgid="5585506104526820067">"要繼續驗證指紋嗎?"</string>
-    <string name="fp_power_button_bp_message" msgid="2983163038168903393">"您已按下開關按鈕,這麼做通常會關閉螢幕。\n\n嘗試輕按開關按鈕以驗證指紋。"</string>
+    <string name="fp_power_button_bp_message" msgid="2983163038168903393">"你已按下開關按鈕,這麼做通常會關閉螢幕。\n\n嘗試輕按開關按鈕以驗證指紋。"</string>
     <string name="fp_power_button_bp_positive_button" msgid="728945472408552251">"關閉螢幕"</string>
     <string name="fp_power_button_bp_negative_button" msgid="3971364246496775178">"繼續"</string>
     <string name="heavy_weight_notification" msgid="8382784283600329576">"正在執行 <xliff:g id="APP">%1$s</xliff:g>"</string>
@@ -1272,9 +1278,9 @@
     <string name="dump_heap_ready_notification" msgid="2302452262927390268">"<xliff:g id="PROC">%1$s</xliff:g> 堆轉儲已準備就緒"</string>
     <string name="dump_heap_notification_detail" msgid="8431586843001054050">"已收集堆轉儲,輕按即可分享。"</string>
     <string name="dump_heap_title" msgid="4367128917229233901">"分享堆轉儲?"</string>
-    <string name="dump_heap_text" msgid="1692649033835719336">"<xliff:g id="PROC">%1$s</xliff:g> 處理程序的記憶體用量已超過上限 (<xliff:g id="SIZE">%2$s</xliff:g>),您可以將堆轉儲分享給相關開發人員。請注意:此堆轉儲可包含應用程式能夠存取您的任何個人資料。"</string>
-    <string name="dump_heap_system_text" msgid="6805155514925350849">"<xliff:g id="PROC">%1$s</xliff:g>處理程序的記憶體用量已超出上限 (<xliff:g id="SIZE">%2$s</xliff:g>),您可以分享已收集的堆轉儲。請注意:此堆轉儲或會包含該處理程序有權存取的任何敏感個人資料,當中可能包括您所輸入的內容。"</string>
-    <string name="dump_heap_ready_text" msgid="5849618132123045516">"您可以分享 <xliff:g id="PROC">%1$s</xliff:g> 處理程序的堆轉儲。請注意:此堆轉儲或會包含該處理程序有權存取的任何敏感個人資料,當中可能包括您所輸入的內容。"</string>
+    <string name="dump_heap_text" msgid="1692649033835719336">"<xliff:g id="PROC">%1$s</xliff:g> 處理程序的記憶體用量已超過上限 (<xliff:g id="SIZE">%2$s</xliff:g>),你可以將堆轉儲分享給相關開發人員。請注意:此堆轉儲可包含應用程式能夠存取你的任何個人資料。"</string>
+    <string name="dump_heap_system_text" msgid="6805155514925350849">"<xliff:g id="PROC">%1$s</xliff:g>處理程序的記憶體用量已超出上限 (<xliff:g id="SIZE">%2$s</xliff:g>),你可以分享已收集的堆轉儲。請注意:此堆轉儲或會包含該處理程序有權存取的任何敏感個人資料,當中可能包括你所輸入的內容。"</string>
+    <string name="dump_heap_ready_text" msgid="5849618132123045516">"你可以分享 <xliff:g id="PROC">%1$s</xliff:g> 處理程序的堆轉儲。請注意:此堆轉儲或會包含該處理程序有權存取的任何敏感個人資料,當中可能包括你所輸入的內容。"</string>
     <string name="sendText" msgid="493003724401350724">"選擇處理文字的操作"</string>
     <string name="volume_ringtone" msgid="134784084629229029">"鈴聲音量"</string>
     <string name="volume_music" msgid="7727274216734955095">"媒體音量"</string>
@@ -1323,20 +1329,20 @@
     <string name="decline" msgid="6490507610282145874">"拒絕"</string>
     <string name="select_character" msgid="3352797107930786979">"插入字元"</string>
     <string name="sms_control_title" msgid="4748684259903148341">"正在傳送 SMS 短訊"</string>
-    <string name="sms_control_message" msgid="6574313876316388239">"&lt;b&gt;「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;/b&gt;正在傳送大量短訊。您要允許這個應用程式繼續傳送短訊嗎?"</string>
+    <string name="sms_control_message" msgid="6574313876316388239">"&lt;b&gt;「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;/b&gt;正在傳送大量短訊。你要允許這個應用程式繼續傳送短訊嗎?"</string>
     <string name="sms_control_yes" msgid="4858845109269524622">"允許"</string>
     <string name="sms_control_no" msgid="4845717880040355570">"拒絕"</string>
     <string name="sms_short_code_confirm_message" msgid="1385416688897538724">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; 要求將訊息傳送至 &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;。"</string>
-    <string name="sms_short_code_details" msgid="2723725738333388351">"您的流動服務帳戶"<b>"可能因此繳付費用"</b>"。"</string>
-    <string name="sms_premium_short_code_details" msgid="1400296309866638111"><b>"您的流動服務帳戶將因此繳付費用。"</b></string>
+    <string name="sms_short_code_details" msgid="2723725738333388351">"你的流動服務帳戶"<b>"可能因此繳付費用"</b>"。"</string>
+    <string name="sms_premium_short_code_details" msgid="1400296309866638111"><b>"你的流動服務帳戶將因此繳付費用。"</b></string>
     <string name="sms_short_code_confirm_allow" msgid="920477594325526691">"發送"</string>
     <string name="sms_short_code_confirm_deny" msgid="1356917469323768230">"取消"</string>
     <string name="sms_short_code_remember_choice" msgid="1374526438647744862">"記住我的選擇"</string>
-    <string name="sms_short_code_remember_undo_instruction" msgid="2620984439143080410">"您日後可以在 [設定] &gt; [應用程式] 中更改這項設定"</string>
+    <string name="sms_short_code_remember_undo_instruction" msgid="2620984439143080410">"你日後可以在 [設定] &gt; [應用程式] 中更改這項設定"</string>
     <string name="sms_short_code_confirm_always_allow" msgid="2223014893129755950">"一律允許"</string>
     <string name="sms_short_code_confirm_never_allow" msgid="2688828813521652079">"絕不允許"</string>
     <string name="sim_removed_title" msgid="1349026474932481037">"已移除 SIM 卡"</string>
-    <string name="sim_removed_message" msgid="8469588437451533845">"您必須重新啟動並新增有效的 SIM 卡,才能使用流動網絡。"</string>
+    <string name="sim_removed_message" msgid="8469588437451533845">"你必須重新啟動並新增有效的 SIM 卡,才能使用流動網絡。"</string>
     <string name="sim_done_button" msgid="6464250841528410598">"完成"</string>
     <string name="sim_added_title" msgid="2976783426741012468">"已新增 SIM 卡"</string>
     <string name="sim_added_message" msgid="6602906609509958680">"重新啟動裝置,才能使用流動網絡。"</string>
@@ -1387,12 +1393,12 @@
     <string name="taking_remote_bugreport_notification_title" msgid="1582531382166919850">"正在取得錯誤報告…"</string>
     <string name="share_remote_bugreport_notification_title" msgid="6708897723753334999">"要分享錯誤報告嗎?"</string>
     <string name="sharing_remote_bugreport_notification_title" msgid="3077385149217638550">"正在分享錯誤報告…"</string>
-    <string name="share_remote_bugreport_notification_message_finished" msgid="7325635795739260135">"您的管理員要求您提供錯誤報告,以協助解決此裝置的問題。報告可能包含應用程式和相關資料。"</string>
+    <string name="share_remote_bugreport_notification_message_finished" msgid="7325635795739260135">"你的管理員要求你提供錯誤報告,以協助解決此裝置的問題。報告可能包含應用程式和相關資料。"</string>
     <string name="share_remote_bugreport_action" msgid="7630880678785123682">"分享"</string>
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"拒絕"</string>
     <string name="select_input_method" msgid="3971267998568587025">"選擇輸入法"</string>
     <string name="show_ime" msgid="6406112007347443383">"在實體鍵盤處於連接狀態時保持顯示"</string>
-    <string name="hardware" msgid="1800597768237606953">"顯示虛擬鍵盤"</string>
+    <string name="hardware" msgid="3611039921284836033">"使用屏幕鍵盤"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"設定「<xliff:g id="DEVICE_NAME">%s</xliff:g>」"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"設定實體鍵盤"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"輕按即可選取語言和鍵盤配置"</string>
@@ -1401,7 +1407,7 @@
     <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"顯示在其他應用程式上層"</string>
     <string name="alert_windows_notification_channel_name" msgid="3437528564303192620">"「<xliff:g id="NAME">%s</xliff:g>」目前可顯示在其他應用程式上面"</string>
     <string name="alert_windows_notification_title" msgid="6331662751095228536">"「<xliff:g id="NAME">%s</xliff:g>」正在其他應用程式上顯示內容"</string>
-    <string name="alert_windows_notification_message" msgid="6538171456970725333">"如果您不想「<xliff:g id="NAME">%s</xliff:g>」使用此功能,請輕按以開啟設定,然後停用此功能。"</string>
+    <string name="alert_windows_notification_message" msgid="6538171456970725333">"如果你不想「<xliff:g id="NAME">%s</xliff:g>」使用此功能,請輕按以開啟設定,然後停用此功能。"</string>
     <string name="alert_windows_notification_turn_off_action" msgid="7805857234839123780">"關閉"</string>
     <string name="ext_media_checking_notification_title" msgid="8299199995416510094">"正在檢查 <xliff:g id="NAME">%s</xliff:g>…"</string>
     <string name="ext_media_checking_notification_message" msgid="2231566971425375542">"正在檢查目前的內容"</string>
@@ -1410,19 +1416,19 @@
     <string name="ext_media_new_notification_title" product="automotive" msgid="9085349544984742727">"「<xliff:g id="NAME">%s</xliff:g>」無法運作"</string>
     <string name="ext_media_new_notification_message" msgid="6095403121990786986">"輕按即可設定"</string>
     <string name="ext_media_new_notification_message" product="tv" msgid="216863352100263668">"選取即可設定"</string>
-    <string name="ext_media_new_notification_message" product="automotive" msgid="5140127881613227162">"您可能需要將裝置重新格式化。輕按即可退出。"</string>
+    <string name="ext_media_new_notification_message" product="automotive" msgid="5140127881613227162">"你可能需要將裝置重新格式化。輕按即可退出。"</string>
     <string name="ext_media_ready_notification_message" msgid="7509496364380197369">"用於儲存相片、影片、音樂等"</string>
     <string name="ext_media_ready_notification_message" product="tv" msgid="8847134811163165935">"瀏覽媒體檔案"</string>
     <string name="ext_media_unmountable_notification_title" msgid="4895444667278979910">"<xliff:g id="NAME">%s</xliff:g>發生問題"</string>
     <string name="ext_media_unmountable_notification_title" product="automotive" msgid="3142723758949023280">"「<xliff:g id="NAME">%s</xliff:g>」無法運作"</string>
     <string name="ext_media_unmountable_notification_message" msgid="3256290114063126205">"輕按即可修正問題"</string>
     <string name="ext_media_unmountable_notification_message" product="tv" msgid="3003611129979934633">"<xliff:g id="NAME">%s</xliff:g>已損毀。選取即可修正。"</string>
-    <string name="ext_media_unmountable_notification_message" product="automotive" msgid="2274596120715020680">"您可能需要將裝置重新格式化。輕按即可退出。"</string>
+    <string name="ext_media_unmountable_notification_message" product="automotive" msgid="2274596120715020680">"你可能需要將裝置重新格式化。輕按即可退出。"</string>
     <string name="ext_media_unsupported_notification_title" msgid="3487534182861251401">"已偵測到「<xliff:g id="NAME">%s</xliff:g>」"</string>
     <string name="ext_media_unsupported_notification_title" product="automotive" msgid="6004193172658722381">"「<xliff:g id="NAME">%s</xliff:g>」無法運作"</string>
     <string name="ext_media_unsupported_notification_message" msgid="8463636521459807981">"輕按即可設定。"</string>
     <string name="ext_media_unsupported_notification_message" product="tv" msgid="1595482802187036532">"選取即可使用支援的格式設定 <xliff:g id="NAME">%s</xliff:g>。"</string>
-    <string name="ext_media_unsupported_notification_message" product="automotive" msgid="3412494732736336330">"您可能需要將裝置重新格式化"</string>
+    <string name="ext_media_unsupported_notification_message" product="automotive" msgid="3412494732736336330">"你可能需要將裝置重新格式化"</string>
     <string name="ext_media_badremoval_notification_title" msgid="4114625551266196872">"<xliff:g id="NAME">%s</xliff:g>被意外移除"</string>
     <string name="ext_media_badremoval_notification_message" msgid="1986514704499809244">"請先退出媒體,再將其移除,以免內容遺失。"</string>
     <string name="ext_media_nomedia_notification_title" msgid="742671636376975890">"已移除 <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -1476,16 +1482,16 @@
     <string name="ime_action_default" msgid="8265027027659800121">"執行"</string>
     <string name="dial_number_using" msgid="6060769078933953531">"使用 <xliff:g id="NUMBER">%s</xliff:g>\n 撥號"</string>
     <string name="create_contact_using" msgid="6200708808003692594">"建立號碼為 <xliff:g id="NUMBER">%s</xliff:g>\n的聯絡人"</string>
-    <string name="grant_credentials_permission_message_header" msgid="5365733888842570481">"下列一個或多個應用程式要求授予現在和今後存取您帳戶的權限。"</string>
-    <string name="grant_credentials_permission_message_footer" msgid="1886710210516246461">"您要允許這個要求嗎?"</string>
+    <string name="grant_credentials_permission_message_header" msgid="5365733888842570481">"下列一個或多個應用程式要求授予現在和今後存取你帳戶的權限。"</string>
+    <string name="grant_credentials_permission_message_footer" msgid="1886710210516246461">"你要允許這個要求嗎?"</string>
     <string name="grant_permissions_header_text" msgid="3420736827804657201">"存取權要求"</string>
     <string name="allow" msgid="6195617008611933762">"允許"</string>
     <string name="deny" msgid="6632259981847676572">"拒絕"</string>
     <string name="permission_request_notification_title" msgid="1810025922441048273">"已要求權限"</string>
     <string name="permission_request_notification_with_subtitle" msgid="3743417870360129298">"<xliff:g id="ACCOUNT">%s</xliff:g> 帳戶的\n權限要求。"</string>
     <string name="permission_request_notification_for_app_with_subtitle" msgid="1298704005732851350">"「<xliff:g id="APP">%1$s</xliff:g>」要求帳戶 <xliff:g id="ACCOUNT">%2$s</xliff:g>\n的權限"</string>
-    <string name="forward_intent_to_owner" msgid="4620359037192871015">"您目前並未透過公司檔案使用這個應用程式"</string>
-    <string name="forward_intent_to_work" msgid="3620262405636021151">"您目前透過公司檔案使用這個應用程式"</string>
+    <string name="forward_intent_to_owner" msgid="4620359037192871015">"你目前並未透過公司檔案使用這個應用程式"</string>
+    <string name="forward_intent_to_work" msgid="3620262405636021151">"你目前透過公司檔案使用這個應用程式"</string>
     <string name="input_method_binding_label" msgid="1166731601721983656">"輸入法"</string>
     <string name="sync_binding_label" msgid="469249309424662147">"同步處理"</string>
     <string name="accessibility_binding_label" msgid="1974602776545801715">"無障礙功能"</string>
@@ -1529,7 +1535,7 @@
     <string name="gpsVerifYes" msgid="3719843080744112940">"是"</string>
     <string name="gpsVerifNo" msgid="1671201856091564741">"否"</string>
     <string name="sync_too_many_deletes" msgid="6999440774578705300">"已超過刪除上限"</string>
-    <string name="sync_too_many_deletes_desc" msgid="7409327940303504440">"帳戶 <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g> 的 <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g> 操作會刪除 <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> 項。您要如何處理呢?"</string>
+    <string name="sync_too_many_deletes_desc" msgid="7409327940303504440">"帳戶 <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g> 的 <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g> 操作會刪除 <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> 項。你要如何處理呢?"</string>
     <string name="sync_really_delete" msgid="5657871730315579051">"刪除這些項目"</string>
     <string name="sync_undo_deletes" msgid="5786033331266418896">"復原刪除"</string>
     <string name="sync_do_nothing" msgid="4528734662446469646">"暫不執行"</string>
@@ -1580,17 +1586,17 @@
     <string name="storage_usb" msgid="2391213347883616886">"USB 儲存裝置"</string>
     <string name="extract_edit_menu_button" msgid="63954536535863040">"編輯"</string>
     <string name="data_usage_warning_title" msgid="9034893717078325845">"數據用量警告"</string>
-    <string name="data_usage_warning_body" msgid="1669325367188029454">"您已使用 <xliff:g id="APP">%s</xliff:g> 流動數據"</string>
+    <string name="data_usage_warning_body" msgid="1669325367188029454">"你已使用 <xliff:g id="APP">%s</xliff:g> 流動數據"</string>
     <string name="data_usage_mobile_limit_title" msgid="3911447354393775241">"已達流動數據用量上限"</string>
     <string name="data_usage_wifi_limit_title" msgid="2069698056520812232">"已達到 Wi-Fi 數據流量上限"</string>
     <string name="data_usage_limit_body" msgid="3567699582000085710">"已暫停使用數據連線,直至此週期結束為止"</string>
     <string name="data_usage_mobile_limit_snoozed_title" msgid="101888478915677895">"已超過流動數據用量上限"</string>
-    <string name="data_usage_wifi_limit_snoozed_title" msgid="1622359254521960508">"已超出您的 Wi-Fi 數據用量上限"</string>
-    <string name="data_usage_limit_snoozed_body" msgid="545146591766765678">"您已比設定上限使用多 <xliff:g id="SIZE">%s</xliff:g>"</string>
+    <string name="data_usage_wifi_limit_snoozed_title" msgid="1622359254521960508">"已超出你的 Wi-Fi 數據用量上限"</string>
+    <string name="data_usage_limit_snoozed_body" msgid="545146591766765678">"你已比設定上限使用多 <xliff:g id="SIZE">%s</xliff:g>"</string>
     <string name="data_usage_restricted_title" msgid="126711424380051268">"已限制背景資料"</string>
     <string name="data_usage_restricted_body" msgid="5338694433686077733">"輕按即可移除限制。"</string>
     <string name="data_usage_rapid_title" msgid="2950192123248740375">"高流動數據用量"</string>
-    <string name="data_usage_rapid_body" msgid="3886676853263693432">"您的應用程式數據用量比平常多"</string>
+    <string name="data_usage_rapid_body" msgid="3886676853263693432">"你的應用程式數據用量比平常多"</string>
     <string name="data_usage_rapid_app_body" msgid="5425779218506513861">"「<xliff:g id="APP">%s</xliff:g>」的數據用量比平常多"</string>
     <string name="ssl_certificate" msgid="5690020361307261997">"安全性憑證"</string>
     <string name="ssl_certificate_is_valid" msgid="7293675884598527081">"憑證有效。"</string>
@@ -1666,42 +1672,40 @@
     <string name="kg_login_invalid_input" msgid="8292367491901220210">"無效的使用者名稱或密碼。"</string>
     <string name="kg_login_account_recovery_hint" msgid="4892466171043541248">"忘記使用者名稱或密碼?\n請瀏覽 "<b>"google.com/accounts/recovery"</b>"。"</string>
     <string name="kg_login_checking_password" msgid="4676010303243317253">"正在檢查帳戶…"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="23741434207544038">"您已輸入錯誤的 PIN 碼 <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_password_attempts_dialog_message" msgid="3328686432962224215">"您已輸入錯誤的密碼 <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="7357404233979139075">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%2$d</xliff:g> 秒後再試一次。"</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="3479940221343361587">"您嘗試了 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次仍未能成功解開這部上鎖的平板電腦。如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,平板電腦將回復原廠設定,所有使用者資料均會失去。"</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="9064457748587850217">"您已 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次無法解鎖 Android TV 裝置。如果再失敗 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次,Android TV 裝置將回復原廠設定,所有使用者資料均會遺失。"</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="5955398963754432548">"您嘗試了 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次仍未能成功解開這部上鎖的手機。如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,手機將回復原廠設定,所有使用者資料均會失去。"</string>
-    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2299099385175083308">"您嘗試了 <xliff:g id="NUMBER">%d</xliff:g> 次仍未能成功解開這部上鎖的平板電腦。平板電腦現在將回復原廠設定。"</string>
-    <string name="kg_failed_attempts_now_wiping" product="tv" msgid="5045460916106267585">"您已 <xliff:g id="NUMBER">%d</xliff:g> 次無法解鎖 Android TV 裝置,Android TV 裝置現在將回復原廠設定。"</string>
-    <string name="kg_failed_attempts_now_wiping" product="default" msgid="5043730590446071189">"您嘗試了 <xliff:g id="NUMBER">%d</xliff:g> 次仍未能成功解開這部上鎖的手機。手機現在將回復原廠設定。"</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="7086799295109717623">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求您透過電郵帳戶解開上鎖的平板電腦。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4670840383567106114">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求您使用電郵帳戶解鎖 Android TV 裝置。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="5270861875006378092">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求您透過電郵帳戶解開上鎖的手機。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="23741434207544038">"你已輸入錯誤的 PIN 碼 <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_password_attempts_dialog_message" msgid="3328686432962224215">"你已輸入錯誤的密碼 <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="7357404233979139075">"你已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%2$d</xliff:g> 秒後再試一次。"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="3479940221343361587">"你嘗試了 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次仍未能成功解開這部上鎖的平板電腦。如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,平板電腦將回復原廠設定,所有使用者資料均會失去。"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="9064457748587850217">"你已 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次無法解鎖 Android TV 裝置。如果再失敗 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次,Android TV 裝置將回復原廠設定,所有使用者資料均會遺失。"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="5955398963754432548">"你嘗試了 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次仍未能成功解開這部上鎖的手機。如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,手機將回復原廠設定,所有使用者資料均會失去。"</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2299099385175083308">"你嘗試了 <xliff:g id="NUMBER">%d</xliff:g> 次仍未能成功解開這部上鎖的平板電腦。平板電腦現在將回復原廠設定。"</string>
+    <string name="kg_failed_attempts_now_wiping" product="tv" msgid="5045460916106267585">"你已 <xliff:g id="NUMBER">%d</xliff:g> 次無法解鎖 Android TV 裝置,Android TV 裝置現在將回復原廠設定。"</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="5043730590446071189">"你嘗試了 <xliff:g id="NUMBER">%d</xliff:g> 次仍未能成功解開這部上鎖的手機。手機現在將回復原廠設定。"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="7086799295109717623">"你已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求你透過電郵帳戶解開上鎖的平板電腦。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4670840383567106114">"你已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求你使用電郵帳戶解鎖 Android TV 裝置。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="5270861875006378092">"你已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求你透過電郵帳戶解開上鎖的手機。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"移除"</string>
-    <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"要調高音量 (比建議的音量更大聲) 嗎?\n\n長時間聆聽高分貝音量可能會導致您的聽力受損。"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"警告:\n您於一週內使用耳機聆聽的高分貝音訊量已超過安全範圍\n\n繼續此行為將導致聽力永久受損。"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"警告:\n您於一週內使用耳機聆聽的高分貝音訊量已超過安全範圍 5 倍。\n\n為保護您的聽力,系統已調低音量。"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"目前的媒體播放音量在長時間聆聽下可能會損害聽力。\n\n如繼續以此音量播放內容,長時間可能導致聽力受損。"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"警告:\n目前的內容播放音量已超過安全聆聽範圍。\n\n繼續聆聽此音量將導致聽力永久受損。"</string>
+    <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"要調高音量 (比建議的音量更大聲) 嗎?\n\n長時間聆聽高分貝音量可能會導致你的聽力受損。"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"要繼續以高音量聆聽嗎?\n\n你以高音量使用耳機的時間已超過建議範圍,可能會導致聽力受損"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"系統偵測到巨響\n\n耳機音量已有一段時間超過建議水平,可能會導致聽力受損"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"要使用無障礙功能快速鍵嗎?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"啟用快速鍵後,同時按住音量按鈕 3 秒便可啟用無障礙功能。"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"要開啟無障礙功能捷徑嗎?"</string>
-    <string name="accessibility_shortcut_multiple_service_warning" msgid="3740723309483706911">"同時按下兩個音量鍵幾秒,以開啟無障礙功能。這可能會變更裝置的運作。\n\n目前功能:\n<xliff:g id="SERVICE">%1$s</xliff:g>\n您可在「設定」&gt;「無障礙功能」中變更所選功能。"</string>
+    <string name="accessibility_shortcut_multiple_service_warning" msgid="3740723309483706911">"同時按下兩個音量鍵幾秒,以開啟無障礙功能。這可能會變更裝置的運作。\n\n目前功能:\n<xliff:g id="SERVICE">%1$s</xliff:g>\n你可在「設定」&gt;「無障礙功能」中變更所選功能。"</string>
     <string name="accessibility_shortcut_multiple_service_list" msgid="2128323171922023762">" • <xliff:g id="SERVICE">%1$s</xliff:g>\n"</string>
     <string name="accessibility_shortcut_single_service_warning_title" msgid="1909518473488345266">"要開啟 <xliff:g id="SERVICE">%1$s</xliff:g> 捷徑嗎?"</string>
-    <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"同時按下兩個音量鍵幾秒,以開啟 <xliff:g id="SERVICE">%1$s</xliff:g> 無障礙功能。這可能會變更裝置的運作。\n\n您可在「設定」&gt;「無障礙功能」中變更此快速鍵。"</string>
+    <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"同時按下兩個音量鍵幾秒,以開啟 <xliff:g id="SERVICE">%1$s</xliff:g> 無障礙功能。這可能會變更裝置的運作。\n\n你可在「設定」&gt;「無障礙功能」中變更此快速鍵。"</string>
     <string name="accessibility_shortcut_on" msgid="5463618449556111344">"開啟"</string>
     <string name="accessibility_shortcut_off" msgid="3651336255403648739">"不要開啟"</string>
     <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"開啟"</string>
     <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"關閉"</string>
-    <string name="accessibility_enable_service_title" msgid="3931558336268541484">"要授予「<xliff:g id="SERVICE">%1$s</xliff:g>」裝置的完整控制權?"</string>
-    <string name="accessibility_service_warning_description" msgid="291674995220940133">"對於為您提供無障礙功能的應用程式,您可授予完整控制權,但大部分應用程式都不應獲授予此權限。"</string>
+    <string name="accessibility_enable_service_title" msgid="3931558336268541484">"要授予「<xliff:g id="SERVICE">%1$s</xliff:g>」裝置的完整控制權嗎?"</string>
+    <string name="accessibility_service_warning_description" msgid="291674995220940133">"對於為你提供無障礙功能的應用程式,你可授予完整控制權,但大部分應用程式都不應獲授予此權限。"</string>
     <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"查看和控制螢幕"</string>
     <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"這項功能可以讀出螢幕上的所有內容,並透過其他應用程式顯示內容。"</string>
     <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"查看和執行動作"</string>
-    <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"這項功能會追蹤您與應用程式或硬件感應器的互動,並代表您直接與應用程式互動。"</string>
+    <string name="accessibility_service_action_perform_description" msgid="2718852014003170558">"這項功能會追蹤你與應用程式或硬件感應器的互動,並代表你直接與應用程式互動。"</string>
     <string name="accessibility_dialog_button_allow" msgid="2092558122987144530">"允許"</string>
     <string name="accessibility_dialog_button_deny" msgid="4129575637812472671">"拒絕"</string>
     <string name="accessibility_select_shortcut_menu_title" msgid="6002726538854613272">"輕按即可開始使用所需功能:"</string>
@@ -1733,7 +1737,7 @@
     <string name="owner_name" msgid="8713560351570795743">"擁有者"</string>
     <string name="guest_name" msgid="8502103277839834324">"訪客"</string>
     <string name="error_message_title" msgid="4082495589294631966">"錯誤"</string>
-    <string name="error_message_change_not_allowed" msgid="843159705042381454">"您的管理員不允許這項變更"</string>
+    <string name="error_message_change_not_allowed" msgid="843159705042381454">"你的管理員不允許這項變更"</string>
     <string name="app_not_found" msgid="3429506115332341800">"找不到處理這項操作的應用程式"</string>
     <string name="revoke" msgid="5526857743819590458">"撤銷"</string>
     <string name="mediasize_iso_a0" msgid="7039061159929977973">"ISO A0"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"由頂部向下滑動即可退出。"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"知道了"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"旋轉以改善預覽效果"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"退出分割螢幕,以改善預覽效果"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"以全螢幕模式開啟「<xliff:g id="NAME">%s</xliff:g>」,以改善預覽效果"</string>
     <string name="done_label" msgid="7283767013231718521">"完成"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"小時環形滑桿"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"分鐘環形滑桿"</string>
@@ -1867,13 +1871,13 @@
     <string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"取消固定時必須輸入 PIN"</string>
     <string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"取消固定時必須提供解鎖圖案"</string>
     <string name="lock_to_app_unlock_password" msgid="9126722403506560473">"取消固定時必須輸入密碼"</string>
-    <string name="package_installed_device_owner" msgid="7035926868974878525">"已由您的管理員安裝"</string>
-    <string name="package_updated_device_owner" msgid="7560272363805506941">"已由您的管理員更新"</string>
-    <string name="package_deleted_device_owner" msgid="2292335928930293023">"已由您的管理員刪除"</string>
+    <string name="package_installed_device_owner" msgid="7035926868974878525">"已由你的管理員安裝"</string>
+    <string name="package_updated_device_owner" msgid="7560272363805506941">"已由你的管理員更新"</string>
+    <string name="package_deleted_device_owner" msgid="2292335928930293023">"已由你的管理員刪除"</string>
     <string name="confirm_battery_saver" msgid="5247976246208245754">"好"</string>
     <string name="battery_saver_description_with_learn_more" msgid="5444908404021316250">"「慳電模式」會開啟深色主題背景,並限制或關閉背景活動、部分視覺效果、特定功能和部分網絡連線。"</string>
     <string name="battery_saver_description" msgid="8518809702138617167">"「慳電模式」會開啟深色主題背景,並限制或關閉背景活動、部分視覺效果、特定功能和部分網絡連線。"</string>
-    <string name="data_saver_description" msgid="4995164271550590517">"「數據節省模式」可防止部分應用程式在背景收發資料,以節省數據用量。您正在使用的應用程式可存取資料,但次數可能會減少。例如,圖片可能需要輕按才會顯示。"</string>
+    <string name="data_saver_description" msgid="4995164271550590517">"「數據節省模式」可防止部分應用程式在背景收發資料,以節省數據用量。你正在使用的應用程式可存取資料,但次數可能會減少。例如,圖片可能需要輕按才會顯示。"</string>
     <string name="data_saver_enable_title" msgid="7080620065745260137">"要開啟「數據節省模式」嗎?"</string>
     <string name="data_saver_enable_button" msgid="4399405762586419726">"開啟"</string>
     <string name="zen_mode_duration_minutes_summary" msgid="4555514757230849789">"{count,plural, =1{一分鐘 (直至{formattedTime})}other{# 分鐘 (直至{formattedTime})}}"</string>
@@ -1887,8 +1891,8 @@
     <string name="zen_mode_until_next_day" msgid="1403042784161725038">"直至<xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_until" msgid="2250286190237669079">"完成時間:<xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
     <string name="zen_mode_alarm" msgid="7046911727540499275">"直至<xliff:g id="FORMATTEDTIME">%1$s</xliff:g> (下一次響鬧)"</string>
-    <string name="zen_mode_forever" msgid="740585666364912448">"直至您關閉為止"</string>
-    <string name="zen_mode_forever_dnd" msgid="3423201955704180067">"直至您關閉「請勿騷擾」功能"</string>
+    <string name="zen_mode_forever" msgid="740585666364912448">"直至你關閉為止"</string>
+    <string name="zen_mode_forever_dnd" msgid="3423201955704180067">"直至你關閉「請勿騷擾」功能"</string>
     <string name="zen_mode_rule_name_combination" msgid="7174598364351313725">"<xliff:g id="FIRST">%1$s</xliff:g>/<xliff:g id="REST">%2$s</xliff:g>"</string>
     <string name="toolbar_collapse_description" msgid="8009920446193610996">"收合"</string>
     <string name="zen_mode_feature_name" msgid="3785547207263754500">"請勿騷擾"</string>
@@ -1898,8 +1902,8 @@
     <string name="zen_mode_default_events_name" msgid="2280682960128512257">"活動"</string>
     <string name="zen_mode_default_every_night_name" msgid="1467765312174275823">"睡眠"</string>
     <string name="muted_by" msgid="91464083490094950">"<xliff:g id="THIRD_PARTY">%1$s</xliff:g>正將某些音效設為靜音"</string>
-    <string name="system_error_wipe_data" msgid="5910572292172208493">"您裝置的系統發生問題,回復原廠設定後即可解決該問題。"</string>
-    <string name="system_error_manufacturer" msgid="703545241070116315">"您裝置的系統發生問題,請聯絡您的製造商瞭解詳情。"</string>
+    <string name="system_error_wipe_data" msgid="5910572292172208493">"你裝置的系統發生問題,回復原廠設定後即可解決該問題。"</string>
+    <string name="system_error_manufacturer" msgid="703545241070116315">"你裝置的系統發生問題,請聯絡你的製造商瞭解詳情。"</string>
     <string name="stk_cc_ussd_to_dial" msgid="3139884150741157610">"USSD 要求已變更為一般通話"</string>
     <string name="stk_cc_ussd_to_ss" msgid="4826846653052609738">"USSD 要求已變更為 SS 要求"</string>
     <string name="stk_cc_ussd_to_ussd" msgid="8343001461299302472">"已變更為新的 USSD 要求"</string>
@@ -1931,7 +1935,7 @@
     <string name="call_notification_ongoing_text" msgid="3880832933933020875">"通話中"</string>
     <string name="call_notification_screening_text" msgid="8396931408268940208">"正在過濾來電"</string>
     <string name="default_notification_channel_label" msgid="3697928973567217330">"未分類"</string>
-    <string name="importance_from_user" msgid="2782756722448800447">"您可以設定這些通知的重要性。"</string>
+    <string name="importance_from_user" msgid="2782756722448800447">"你可以設定這些通知的重要性。"</string>
     <string name="importance_from_person" msgid="4235804979664465383">"列為重要的原因:涉及的人。"</string>
     <string name="notification_history_title_placeholder" msgid="7748630986182249599">"自訂應用程式通知"</string>
     <string name="user_creation_account_exists" msgid="2239146360099708035">"要允許 <xliff:g id="APP">%1$s</xliff:g> 使用 <xliff:g id="ACCOUNT">%2$s</xliff:g> 建立新使用者 (此帳戶目前已有此使用者) 嗎?"</string>
@@ -1941,7 +1945,7 @@
     <string name="country_selection_title" msgid="5221495687299014379">"地區偏好設定"</string>
     <string name="search_language_hint" msgid="7004225294308793583">"輸入語言名稱"</string>
     <string name="language_picker_section_suggested" msgid="6556199184638990447">"建議"</string>
-    <string name="language_picker_regions_section_suggested" msgid="6080131515268225316">"建議的語言"</string>
+    <string name="language_picker_regions_section_suggested" msgid="6080131515268225316">"建議地區"</string>
     <string name="language_picker_section_suggested_bilingual" msgid="5932198319583556613">"建議的語言"</string>
     <string name="region_picker_section_suggested_bilingual" msgid="704607569328224133">"建議地區"</string>
     <string name="language_picker_section_all" msgid="1985809075777564284">"所有語言"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"無法使用應用程式"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"目前無法使用「<xliff:g id="APP_NAME">%1$s</xliff:g>」。"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"無法使用「<xliff:g id="ACTIVITY">%1$s</xliff:g>」"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"需要權限"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"已抑制權限要求"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"此應用程式要求額外的權限,但串流工作階段期間無法授予權限。請先在 Android TV 裝置上授予權限。"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"此應用程式要求額外的權限,但串流工作階段期間無法授予權限。請先在平板電腦上授予權限。"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"此應用程式要求額外的權限,但串流工作階段期間無法授予權限。請先在手機上授予權限。"</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>
@@ -1976,7 +1983,8 @@
     <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="5246906284426844596">"此應用程式專為舊版 Android 而設。因此可能無法正常運作,且不提供最新的安全性和私隱保護。請檢查是否有更新版本,或聯絡應用程式開發人員。"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"檢查更新"</string>
-    <string name="new_sms_notification_title" msgid="6528758221319927107">"您有新的訊息"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"此應用程式不兼容最新 Android 版本。請檢查是否有更新版本,或聯絡應用程式開發人員。"</string>
+    <string name="new_sms_notification_title" msgid="6528758221319927107">"你有新的訊息"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"開啟短訊應用程式查看內容"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"部分功能可能會受到限制"</string>
     <string name="profile_encrypted_detail" msgid="5279730442756849055">"工作設定檔已上鎖"</string>
@@ -2013,7 +2021,7 @@
     <string name="time_picker_text_input_mode_description" msgid="4761160667516611576">"切換至文字輸入模式即可輸入時間。"</string>
     <string name="time_picker_radial_mode_description" msgid="1222342577115016953">"切換至時鐘模式即可輸入時間。"</string>
     <string name="autofill_picker_accessibility_title" msgid="4425806874792196599">"自動填入選項"</string>
-    <string name="autofill_save_accessibility_title" msgid="1523225776218450005">"儲存資料,方便您自動填入"</string>
+    <string name="autofill_save_accessibility_title" msgid="1523225776218450005">"儲存資料,方便你自動填入"</string>
     <string name="autofill_error_cannot_autofill" msgid="6528827648643138596">"無法自動填入內容"</string>
     <string name="autofill_picker_no_suggestions" msgid="1076022650427481509">"冇任何自動填入建議"</string>
     <string name="autofill_picker_some_suggestions" msgid="5560549696296202701">"{count,plural, =1{一個自動填入建議}other{# 個自動填入建議}}"</string>
@@ -2074,7 +2082,7 @@
     <string name="zen_upgrade_notification_title" msgid="8198167698095298717">"請勿騷擾已變更"</string>
     <string name="zen_upgrade_notification_content" msgid="5228458567180124005">"輕按即可查看封鎖內容。"</string>
     <string name="review_notification_settings_title" msgid="5102557424459810820">"查看通知設定"</string>
-    <string name="review_notification_settings_text" msgid="5916244866751849279">"由 Android 13 開始,您安裝的應用程式須獲得授權才能傳送通知。輕按即可變更現有應用程式的這項權限。"</string>
+    <string name="review_notification_settings_text" msgid="5916244866751849279">"由 Android 13 開始,你安裝的應用程式須獲得授權才能傳送通知。輕按即可變更現有應用程式的這項權限。"</string>
     <string name="review_notification_settings_remind_me_action" msgid="1081081018678480907">"稍後提醒我"</string>
     <string name="review_notification_settings_dismiss" msgid="4160916504616428294">"關閉"</string>
     <string name="notification_app_name_system" msgid="3045196791746735601">"系統"</string>
@@ -2092,7 +2100,7 @@
     <string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"確定"</string>
     <string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"關閉"</string>
     <string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"瞭解詳情"</string>
-    <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"加強版通知在 Android 12 取代了 Android 自動調整通知。此功能會顯示建議的操作和回覆,更可為您整理通知。\n\n加強版通知功能可存取您的通知內容 (包括聯絡人姓名和訊息等個人資料),亦可以關閉或回應通知,例如接聽來電和控制「請勿騷擾」功能。"</string>
+    <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"加強版通知在 Android 12 取代了 Android 自動調整通知。此功能會顯示建議的操作和回覆,更可為你整理通知。\n\n加強版通知功能可存取你的通知內容 (包括聯絡人姓名和訊息等個人資料),亦可以關閉或回應通知,例如接聽來電和控制「請勿騷擾」功能。"</string>
     <string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"「日常安排模式」資料通知"</string>
     <string name="dynamic_mode_notification_title" msgid="1388718452788985481">"已開啟「慳電模式」"</string>
     <string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"減少用電可延長電池壽命"</string>
@@ -2154,21 +2162,26 @@
     <string name="resolver_work_tab" msgid="2690019516263167035">"工作"</string>
     <string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"個人檢視模式"</string>
     <string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"工作檢視模式"</string>
-    <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"已被您的 IT 管理員封鎖"</string>
+    <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"已被你的 IT 管理員封鎖"</string>
     <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"無法使用工作應用程式分享此內容"</string>
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"無法使用工作應用程式開啟此內容"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"無法使用個人應用程式分享此內容"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"無法使用個人應用程式開啟此內容"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"工作設定檔已暫停使用"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"輕按即可啟用"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"已暫停工作應用程式"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"取消暫停"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"沒有適用的工作應用程式"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"沒有適用的個人應用程式"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"要開啟工作應用程式「<xliff:g id="APP">%s</xliff:g>」嗎?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"要在個人「<xliff:g id="APP">%s</xliff:g>」中開啟嗎?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"要在工作「<xliff:g id="APP">%s</xliff:g>」中開啟嗎?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"要透過工作應用程式打電話嗎?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"要切換至工作應用程式嗎?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"你的機構只允許你透過工作應用程式打電話"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"你的機構只允許你透過工作應用程式傳送訊息"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"使用個人瀏覽器"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"使用工作瀏覽器"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"打電話"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"切換"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM 網絡解鎖 PIN"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM 網絡子集解鎖 PIN"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM 公司解鎖 PIN"</string>
@@ -2282,7 +2295,7 @@
     <string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
     <string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
     <string name="window_magnification_prompt_title" msgid="2876703640772778215">"放大功能推出新設定"</string>
-    <string name="window_magnification_prompt_content" msgid="8159173903032344891">"您現在可以放大部分畫面"</string>
+    <string name="window_magnification_prompt_content" msgid="8159173903032344891">"你現在可以放大部分畫面"</string>
     <string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"在「設定」中開啟"</string>
     <string name="dismiss_action" msgid="1728820550388704784">"關閉"</string>
     <string name="sensor_privacy_start_use_mic_notification_content_title" msgid="2420858361276370367">"解除封鎖裝置麥克風"</string>
@@ -2293,7 +2306,7 @@
     <string name="splash_screen_view_icon_description" msgid="180638751260598187">"應用程式圖示"</string>
     <string name="splash_screen_view_branding_description" msgid="7911129347402728216">"應用程式品牌形象"</string>
     <string name="view_and_control_notification_title" msgid="4300765399209912240">"檢查存取權設定"</string>
-    <string name="view_and_control_notification_content" msgid="8003766498562604034">"<xliff:g id="SERVICE_NAME">%s</xliff:g> 可以查看及控制您的螢幕。輕按即可查看。"</string>
+    <string name="view_and_control_notification_content" msgid="8003766498562604034">"<xliff:g id="SERVICE_NAME">%s</xliff:g> 可以查看及控制你的螢幕。輕按即可查看。"</string>
     <string name="ui_translation_accessibility_translated_text" msgid="3197547218178944544">"翻譯咗「<xliff:g id="MESSAGE">%1$s</xliff:g>」。"</string>
     <string name="ui_translation_accessibility_translation_finished" msgid="3057830947610088465">"已經將訊息由<xliff:g id="FROM_LANGUAGE">%1$s</xliff:g>翻譯成<xliff:g id="TO_LANGUAGE">%2$s</xliff:g>。"</string>
     <string name="notification_channel_abusive_bg_apps" msgid="6092140213264920355">"背景活動"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"無法從 <xliff:g id="DEVICE">%1$s</xliff:g> 存取手機的相機"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"無法從 <xliff:g id="DEVICE">%1$s</xliff:g> 存取平板電腦的相機"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"串流播放時無法使用,請改用手機。"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"串流期間無法查看畫中畫"</string>
     <string name="system_locale_title" msgid="711882686834677268">"系統預設"</string>
     <string name="default_card_name" msgid="9198284935962911468">"SIM 卡 <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"用於管理手錶的隨附手錶設定檔權限"</string>
@@ -2323,7 +2337,7 @@
     <string name="concurrent_display_notification_thermal_title" msgid="5921609404644739229">"裝置過熱"</string>
     <string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"由於手機過熱,雙螢幕功能無法使用"</string>
     <string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"無法使用雙螢幕功能"</string>
-    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"由於「慳電模式」已開啟,因此無法使用雙螢幕功能。您可以前往「設定」中關閉此模式。"</string>
+    <string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"由於「慳電模式」已開啟,因此無法使用雙螢幕功能。你可以前往「設定」中關閉此模式。"</string>
     <string name="device_state_notification_settings_button" msgid="691937505741872749">"前往「設定」"</string>
     <string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"關閉"</string>
     <string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"已設定「<xliff:g id="DEVICE_NAME">%s</xliff:g>」"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 66799dc..717e046 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Android 系統"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"切換至個人設定檔"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"切換至工作資料夾"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"切換至個人 <xliff:g id="APP_NAME">%1$s</xliff:g> 帳戶"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"切換至工作用 <xliff:g id="APP_NAME">%1$s</xliff:g> 帳戶"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"聯絡人"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"存取你的聯絡人"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"位置"</string>
@@ -459,10 +461,10 @@
     <string name="permdesc_writeCallLog" product="tablet" msgid="2657525794731690397">"允許應用程式修改平板電腦的通話記錄,包括來電和已撥電話相關資料。請注意,惡意應用程式可能濫用此功能刪除或修改你的通話記錄。"</string>
     <string name="permdesc_writeCallLog" product="tv" msgid="3934939195095317432">"允許應用程式修改 Android TV 裝置的通話記錄,包括來電和撥出電話相關資料。惡意應用程式可能會藉此清除或修改你的通話記錄。"</string>
     <string name="permdesc_writeCallLog" product="default" msgid="5903033505665134802">"允許應用程式修改手機的通話記錄,包括來電和已撥電話相關資料。請注意,惡意應用程式可能濫用此功能刪除或修改你的通話記錄。"</string>
-    <string name="permlab_bodySensors" msgid="662918578601619569">"在使用期間可存取人體感應器資料,例如心跳速率"</string>
-    <string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"允許應用程式在使用期間存取人體感應器資料,例如心跳速率、體溫和血氧比例。"</string>
-    <string name="permlab_bodySensors_background" msgid="4912560779957760446">"在背景執行時可存取人體感應器資料,例如心跳速率"</string>
-    <string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"允許應用程式在背景執行時存取人體感應器資料,例如心跳速率、體溫和血氧比例。"</string>
+    <string name="permlab_bodySensors" msgid="662918578601619569">"在使用期間可存取人體感應器資料,例如心率"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="7652650410295512140">"允許應用程式在使用期間存取人體感應器資料,例如心率、體溫和血氧比例。"</string>
+    <string name="permlab_bodySensors_background" msgid="4912560779957760446">"在背景執行時可存取人體感應器資料,例如心率"</string>
+    <string name="permdesc_bodySensors_background" product="default" msgid="8870726027557749417">"允許應用程式在背景執行時存取人體感應器資料,例如心率、體溫和血氧比例。"</string>
     <string name="permlab_readCalendar" msgid="6408654259475396200">"讀取日曆活動和詳細資訊"</string>
     <string name="permdesc_readCalendar" product="tablet" msgid="515452384059803326">"這個應用程式可讀取所有儲存在平板電腦上的日曆活動資訊,以及共用或儲存日曆資料。"</string>
     <string name="permdesc_readCalendar" product="tv" msgid="5811726712981647628">"這個應用程式可讀取所有儲存在 Android TV 裝置上的日曆活動,以及共用或儲存日曆資料。"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"允許應用程式控制震動。"</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"允許應用程式存取震動功能狀態。"</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"直接撥打電話號碼"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"允許應用程式自行撥打電話,但可能產生非預期的費用或撥打非預期的電話。注意:這項權限不允許應用程式撥打緊急電話。惡意應用程式可能利用此功能擅自撥打電話,增加你不必要的額外支出。"</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"允許應用程式在你未操作的情況下自行撥打電話號碼,但可能產生非預期的費用或撥打非預期的電話。請注意,這項權限並不允許應用程式撥打緊急電話號碼。惡意應用程式可能利用此功能擅自撥打電話或撥打電信業者的代碼,導致來電自動轉接到其他號碼,增加不必要的額外支出。"</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"存取 IMS 撥號服務"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"允許應用程式自動使用 IMS 服務撥打電話。"</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"讀取手機狀態和識別碼"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"允許應用程式取得首選 NFC 付費服務資訊,例如已註冊的輔助工具和路線目的地。"</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"控制近距離無線通訊"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"允許應用程式與近距離無線通訊 (NFC) 電子感應標籤、卡片及感應器進行通訊。"</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"安全元件交易事件"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"允許應用程式接收在安全元件上發生的交易相關資訊。"</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"停用螢幕鎖定"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"允許應用程式停用按鍵鎖定以及其他相關的密碼安全性功能。例如:手機收到來電時停用按鍵鎖定,通話結束後重新啟用按鍵鎖定。"</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"要求螢幕鎖定的複雜度"</string>
@@ -614,10 +618,13 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"使用生物特徵辨識或螢幕鎖定功能"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"驗證你的身分"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"如要繼續操作,請使用生物特徵辨識功能驗證身分"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"如要繼續操作,請使用指紋驗證身分"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"如要繼續操作,請使用臉孔驗證身分"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"請使用生物特徵辨識或螢幕鎖定功能驗證身分,才能繼續操作"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"無法使用生物特徵辨識硬體"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"已取消驗證"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"無法辨識"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"無法辨識臉孔"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"已取消驗證"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"未設定 PIN 碼、解鎖圖案或密碼"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"驗證時發生錯誤"</string>
@@ -684,7 +691,7 @@
     <string name="face_acquired_too_right" msgid="6245286514593540859">"請將手機向左移"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"請將手機向右移"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"請儘可能直視裝置正面。"</string>
-    <string name="face_acquired_not_detected" msgid="1057966913397548150">"未偵測到你的臉,請將手機舉到與視線同高。"</string>
+    <string name="face_acquired_not_detected" msgid="1057966913397548150">"未偵測到你的臉,請將手機舉到與眼睛同高的位置。"</string>
     <string name="face_acquired_too_much_motion" msgid="8199691445085189528">"鏡頭過度晃動,請拿穩手機。"</string>
     <string name="face_acquired_recalibrate" msgid="8724013080976469746">"請重新註冊你的臉孔。"</string>
     <string name="face_acquired_too_different" msgid="2520389515612972889">"無法辨識這張臉,請再試一次。"</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"臉孔處理作業已取消。"</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"使用者已取消人臉解鎖作業"</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"嘗試次數過多,請稍後再試。"</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"嘗試次數過多,人臉解鎖功能無法使用。"</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"嘗試次數過多,請改用螢幕鎖定功能驗證身分。"</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"無法驗證臉孔,請再試一次。"</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"你尚未設定人臉解鎖功能"</string>
@@ -1391,8 +1397,8 @@
     <string name="share_remote_bugreport_action" msgid="7630880678785123682">"分享"</string>
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"拒絕"</string>
     <string name="select_input_method" msgid="3971267998568587025">"選擇輸入法"</string>
-    <string name="show_ime" msgid="6406112007347443383">"使用實體鍵盤時仍繼續顯示虛擬鍵盤"</string>
-    <string name="hardware" msgid="1800597768237606953">"顯示虛擬鍵盤"</string>
+    <string name="show_ime" msgid="6406112007347443383">"使用實體鍵盤時仍繼續顯示螢幕小鍵盤"</string>
+    <string name="hardware" msgid="3611039921284836033">"使用螢幕小鍵盤"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"設定「<xliff:g id="DEVICE_NAME">%s</xliff:g>」"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"設定實體鍵盤"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"輕觸即可選取語言和版面配置"</string>
@@ -1681,12 +1687,10 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"移除"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"要調高音量,比建議的音量更大聲嗎?\n\n長時間聆聽高分貝音量可能會使你的聽力受損。"</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"警告:\n你在一週內使用耳罩式耳機聆聽的高分貝音訊量已超過安全範圍。\n\n繼續這個行為將導致聽力永久受損。"</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"警告:\n你在一週內使用耳罩式耳機聆聽的高分貝音訊量已超過安全範圍 5 倍。\n\n為了保護你的聽力,系統已調低音量。"</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"目前的媒體播放音量在長時間聆聽下可能會損害聽力。\n\n如果繼續以這個音量播放內容,長時間可能導致聽力受損。"</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"警告:\n目前的內容播放音量已超過安全聆聽範圍。\n\n繼續聆聽這個音量將導致聽力永久受損。"</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"要繼續以高音量聆聽嗎?\n\n耳罩式耳機以高音量播放已超過建議時間,可能會傷害聽力"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"偵測到過大音量\n\n耳罩式耳機的音量比建議音量高,可能會傷害聽力"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"要使用無障礙捷徑嗎?"</string>
-    <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"啟用捷徑功能,只要同時按下兩個音量按鈕 3 秒,就能啟動無障礙功能。"</string>
+    <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"啟用捷徑功能,只要同時按下兩個音量鍵 3 秒,就能啟動無障礙功能。"</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"要開啟無障礙功能快速鍵嗎?"</string>
     <string name="accessibility_shortcut_multiple_service_warning" msgid="3740723309483706911">"同時按住音量調高鍵和調低鍵數秒,即可開啟無障礙功能。這麼做可能會改變裝置的運作方式。\n\n目前的功能:\n<xliff:g id="SERVICE">%1$s</xliff:g>\n你可以在 [設定] &gt; [無障礙設定] 中變更選取的功能。"</string>
     <string name="accessibility_shortcut_multiple_service_list" msgid="2128323171922023762">" • <xliff:g id="SERVICE">%1$s</xliff:g>\n"</string>
@@ -1697,7 +1701,7 @@
     <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"開啟"</string>
     <string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"關閉"</string>
     <string name="accessibility_enable_service_title" msgid="3931558336268541484">"要將裝置的完整控制權授予「<xliff:g id="SERVICE">%1$s</xliff:g>」嗎?"</string>
-    <string name="accessibility_service_warning_description" msgid="291674995220940133">"如果你有無障礙服務需求,可以將完整控制權授予具有相關功能的應用程式,但請勿將完整控制權授予大多數的應用程式。"</string>
+    <string name="accessibility_service_warning_description" msgid="291674995220940133">"如果你有無障礙服務需求,建議可將完整控制權授予具有相關功能的應用程式,但請勿將完整控制權授予大多數的應用程式。"</string>
     <string name="accessibility_service_screen_control_title" msgid="190017412626919776">"查看及控制螢幕"</string>
     <string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"可讀取螢幕上的所有內容及在其他應用程式上顯示內容。"</string>
     <string name="accessibility_service_action_perform_title" msgid="779670378951658160">"查看及執行動作"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"如要退出,請從畫面頂端向下滑動。"</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"知道了"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"旋轉螢幕以瀏覽完整的檢視畫面"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"結束分割畫面以全螢幕瀏覽"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"如要享有更優質的預覽體驗,可透過全螢幕模式開啟「<xliff:g id="NAME">%s</xliff:g>」"</string>
     <string name="done_label" msgid="7283767013231718521">"完成"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"小時數環狀滑桿"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"分鐘數環狀滑桿"</string>
@@ -1941,7 +1945,7 @@
     <string name="country_selection_title" msgid="5221495687299014379">"地區偏好設定"</string>
     <string name="search_language_hint" msgid="7004225294308793583">"請輸入語言名稱"</string>
     <string name="language_picker_section_suggested" msgid="6556199184638990447">"建議語言"</string>
-    <string name="language_picker_regions_section_suggested" msgid="6080131515268225316">"建議的語言"</string>
+    <string name="language_picker_regions_section_suggested" msgid="6080131515268225316">"建議地區"</string>
     <string name="language_picker_section_suggested_bilingual" msgid="5932198319583556613">"建議語言"</string>
     <string name="region_picker_section_suggested_bilingual" msgid="704607569328224133">"建議地區"</string>
     <string name="language_picker_section_all" msgid="1985809075777564284">"所有語言"</string>
@@ -1951,13 +1955,13 @@
     <string name="app_suspended_default_message" msgid="6451215678552004172">"目前無法使用「<xliff:g id="APP_NAME_0">%1$s</xliff:g>」。這項設定是由「<xliff:g id="APP_NAME_1">%2$s</xliff:g>」管理。"</string>
     <string name="app_suspended_more_details" msgid="211260942831587014">"瞭解詳情"</string>
     <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"取消暫停應用程式"</string>
-    <string name="work_mode_off_title" msgid="6367463960165135829">"要取消暫停工作應用程式嗎?"</string>
+    <string name="work_mode_off_title" msgid="6367463960165135829">"要解除工作應用程式的暫停狀態嗎?"</string>
     <string name="work_mode_turn_on" msgid="5316648862401307800">"取消暫停"</string>
     <string name="work_mode_emergency_call_button" msgid="6818855962881612322">"撥打緊急電話"</string>
     <string name="app_blocked_title" msgid="7353262160455028160">"應用程式無法使用"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」目前無法使用。"</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"無法存取「<xliff:g id="ACTIVITY">%1$s</xliff:g>」"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"需要相關權限"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"權限要求遭拒"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"這個應用程式要求額外權限,但串流期間無法授權。請先在 Android TV 裝置上授予權限。"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"這個應用程式要求額外權限,但串流期間無法授權。請先在平板電腦上授予權限。"</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"這個應用程式要求額外權限,但串流期間無法授權。請先在手機上授予權限。"</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>
@@ -1976,6 +1983,7 @@
     <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="5246906284426844596">"這個應用程式是專為舊版 Android 所打造,因此可能無法正常運作,且不提供最新的安全性和隱私保護服務。請檢查是否有更新版本,或與應用程式的開發人員聯絡。"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"檢查更新"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"這個應用程式與最新版的 Android 不相容。請檢查是否有可用的更新,或與應用程式發人員聯絡。"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"你有新訊息"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"開啟簡訊應用程式來查看內容"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"部分功能可能遭到鎖定"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"無法使用工作應用程式開啟這項內容"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"無法透過個人應用程式分享這項內容"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"無法使用個人應用程式開啟這項內容"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"工作資料夾已暫停使用"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"輕觸即可啟用"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"工作應用程式目前為暫停狀態"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"解除暫停"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"沒有適用的工作應用程式"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"沒有適用的個人應用程式"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"要開啟工作用「<xliff:g id="APP">%s</xliff:g>」嗎?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"要在個人用「<xliff:g id="APP">%s</xliff:g>」中開啟嗎?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"要在工作用「<xliff:g id="APP">%s</xliff:g>」中開啟嗎?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"要透過工作應用程式撥號嗎?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"要切換到工作應用程式嗎?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"貴機構僅允許透過工作應用程式撥打電話"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"貴機構僅允許透過工作應用程式傳送訊息"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"使用個人瀏覽器"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"使用工作瀏覽器"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"撥號"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"切換"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM 卡網路解鎖 PIN 碼"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM 卡網路子集解鎖 PIN 碼"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM 卡企業解鎖 PIN 碼"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"無法從 <xliff:g id="DEVICE">%1$s</xliff:g> 存取手機的相機"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"無法從 <xliff:g id="DEVICE">%1$s</xliff:g> 存取平板電腦的相機"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"串流播放時無法存取這項內容,請改用手機。"</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"串流播放時無法查看子母畫面"</string>
     <string name="system_locale_title" msgid="711882686834677268">"系統預設"</string>
     <string name="default_card_name" msgid="9198284935962911468">"SIM 卡 <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"用於管理智慧手錶的配對智慧手錶設定檔權限"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 6483159..88a3547 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -298,6 +298,8 @@
     <string name="android_system_label" msgid="5974767339591067210">"Uhlelo lwe-Android"</string>
     <string name="user_owner_label" msgid="8628726904184471211">"Shintshela kuphrofayela yomuntu siqu"</string>
     <string name="managed_profile_label" msgid="7316778766973512382">"Shintshela kuphrofayela yomsebenzi"</string>
+    <string name="user_owner_app_label" msgid="1553595155465750298">"Shintshela ku-<xliff:g id="APP_NAME">%1$s</xliff:g> yomuntu siqu"</string>
+    <string name="managed_profile_app_label" msgid="367401088383965725">"Shintshela ku-<xliff:g id="APP_NAME">%1$s</xliff:g> yomsebenzi"</string>
     <string name="permgrouplab_contacts" msgid="4254143639307316920">"Oxhumana nabo"</string>
     <string name="permgroupdesc_contacts" msgid="9163927941244182567">"finyelela koxhumana nabo"</string>
     <string name="permgrouplab_location" msgid="1858277002233964394">"Indawo"</string>
@@ -318,7 +320,7 @@
     <string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"finyelela kumsebenzi wakho womzimba"</string>
     <string name="permgrouplab_camera" msgid="9090413408963547706">"Ikhamera"</string>
     <string name="permgroupdesc_camera" msgid="7585150538459320326">"thatha izithombe uphinde urekhode ividiyo"</string>
-    <string name="permgrouplab_nearby_devices" msgid="5529147543651181991">"Amadivayisi aseduze"</string>
+    <string name="permgrouplab_nearby_devices" msgid="5529147543651181991">"kumadivayisi aseduze"</string>
     <string name="permgroupdesc_nearby_devices" msgid="3213561597116913508">"thola futhi uxhume kumadivayisi aseduze"</string>
     <string name="permgrouplab_calllog" msgid="7926834372073550288">"Amarekhodi wamakholi"</string>
     <string name="permgroupdesc_calllog" msgid="2026996642917801803">"funda futhi ubhale irekhodi lamakholi efoni"</string>
@@ -503,7 +505,7 @@
     <string name="permdesc_vibrate" msgid="8733343234582083721">"Ivumela uhlelo lokusebenza ukulawula isidlidlizi."</string>
     <string name="permdesc_vibrator_state" msgid="7050024956594170724">"Ivumela uhlelo lokusebenza ukuthi lufinyelele kusimo sesidlidlizeli."</string>
     <string name="permlab_callPhone" msgid="1798582257194643320">"ngokuqondile shayela izinombolo zocingo"</string>
-    <string name="permdesc_callPhone" msgid="5439809516131609109">"Ivumela uhlelo lokusebenza ukushayela izinombolo zefoni ngaphandle kokuhlanganyela kwakho. Lokhu kungaholela emashajini noma amakholi angalindelekile. Qaphela ukuthi lokhu akuvumeli uhlelo lokusebenza ukushayela izinombolo zesimo esiphuthumayo. Izinhlelo zokusebenza ezingalungile zingabiza imali ngokwenze amakholi ngaphandle kokuqinisekisa kwakho."</string>
+    <string name="permdesc_callPhone" msgid="7892422187827695656">"Ivumela i-app ukushayela izinombolo zefoni ngaphandle kokungenela kwakho. Lokhu kungase kubangele izindleko noma amakholi angalindelekile. Qaphela ukuthi lokhu akuvumeli i-app ukufonela izinombolo zezimo eziphuthumayo. Ama-app angalungile angakubiza imali ngokufona ngaphandle kokuqinisekisa kwakho, noma ukudayela amakhodi enkampani yenethiwekhi abangela ukuthi amakholi angenayo adluliselwe ngokuzenzekelayo kwenye inombolo."</string>
     <string name="permlab_accessImsCallService" msgid="442192920714863782">"finyelela kusevisi yekholi ye-IMS"</string>
     <string name="permdesc_accessImsCallService" msgid="6328551241649687162">"Ivumela uhlelo lokusebenza ukuthi lusebenzise isevisi ye-IMS ukuze yenze amakholi ngaphandle kokungenelela kwakho."</string>
     <string name="permlab_readPhoneState" msgid="8138526903259297969">"funda isimo sefoni kanye nesazisi"</string>
@@ -588,6 +590,8 @@
     <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Ivuemela uhlelo lokusebenza ukuthola ulwazi lesevisi yenkokhelo ye-nfc njengezinsiza zokubhalisa nezindawo zomzila."</string>
     <string name="permlab_nfc" msgid="1904455246837674977">"lawula Uxhumano Lwenkambu Eseduze"</string>
     <string name="permdesc_nfc" msgid="8352737680695296741">"Ivuela uhlelo lokusebenza ukuthi ixhumane ne-Near Field Communication (NFC) amathegi, amakhadi kanye nezinhlelo zokufunda."</string>
+    <string name="permlab_nfcTransactionEvent" msgid="5868209446710407679">"Umcimbi wokwenziwe Ku-elementi Evikelekile"</string>
+    <string name="permdesc_nfcTransactionEvent" msgid="1904286701876487397">"Ivumela i-app ukuthi ithole ulwazi mayelana nemisebenzi eyenzekayo Ku-elementi Evikelekile."</string>
     <string name="permlab_disableKeyguard" msgid="3605253559020928505">"khubaza ukukhiya kwakho iskrini"</string>
     <string name="permdesc_disableKeyguard" msgid="3223710003098573038">"Ivumela uhlelo lokusebenza ukukhubaza ukuvala ukhiye nanoma yikuphi ukuphepha kwephasiwedi okuhlobene. Isibonelo, ifoni ikhubaza ukuvala ukhiye lapho ithola ikholi yefoni engenayo, bese inike amandla kabusha ukuvala ukhiye lapho ikholi isiqedile."</string>
     <string name="permlab_requestPasswordComplexity" msgid="1808977190557794109">"cela ubunkimbinkimbi kokukhiya isikrini"</string>
@@ -614,20 +618,23 @@
     <string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Sebenzisa i-biometrics noma ukukhiya isikrini"</string>
     <string name="biometric_dialog_default_title" msgid="55026799173208210">"Qinisekisa ukuthi nguwe"</string>
     <string name="biometric_dialog_default_subtitle" msgid="8457232339298571992">"Sebenzisa i-biometric yakho ukuze uqhubeke"</string>
+    <string name="biometric_dialog_fingerprint_subtitle" msgid="2520227942533751342">"Sebenzisa isigxivizo sakho somunwe ukuze uqhubeke"</string>
+    <string name="biometric_dialog_face_subtitle" msgid="5269284162191087084">"Sebenzisa ubuso bakho ukuze uqhubeke"</string>
     <string name="biometric_or_screen_lock_dialog_default_subtitle" msgid="159539678371552009">"Sebenzisa i-biometric noma ukukhiya isikrini ukuze uqhubeke"</string>
     <string name="biometric_error_hw_unavailable" msgid="2494077380540615216">"I-Biometric hardware ayitholakali"</string>
     <string name="biometric_error_user_canceled" msgid="6732303949695293730">"Ukufakazela ubuqiniso kukhanseliwe"</string>
     <string name="biometric_not_recognized" msgid="5106687642694635888">"Akwaziwa"</string>
+    <string name="biometric_face_not_recognized" msgid="5535599455744525200">"Ubuso abaziwa"</string>
     <string name="biometric_error_canceled" msgid="8266582404844179778">"Ukufakazela ubuqiniso kukhanseliwe"</string>
     <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Ayikho iphinikhodi, iphethini, noma iphasiwedi esethiwe"</string>
     <string name="biometric_error_generic" msgid="6784371929985434439">"Iphutha lokufakazela ubuqiniso"</string>
     <string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Sebenzisa isikhiya sesikrini"</string>
     <string name="screen_lock_dialog_default_subtitle" msgid="120359538048533695">"Faka ukukhiya isikrini kwakho ukuze uqhubeke"</string>
-    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Cindezela ngokuqinile kunzwa"</string>
+    <string name="fingerprint_acquired_partial" msgid="4323789264604479684">"Cindezela inzwa uqinise"</string>
     <string name="fingerprint_acquired_insufficient" msgid="623888149088216458">"Ayisazi isigxivizo somunwe. Zama futhi."</string>
     <string name="fingerprint_acquired_imager_dirty" msgid="1770676120848224250">"Hlanza inzwa yesigxivizo somunwe bese uzame futhi"</string>
     <string name="fingerprint_acquired_imager_dirty_alt" msgid="9169582140486372897">"Hlanza inzwa bese uzame futhi"</string>
-    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Cindezela ngokuqinile kunzwa"</string>
+    <string name="fingerprint_acquired_too_fast" msgid="1628459767349116104">"Cindezela inzwa uqinise"</string>
     <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Umnwe uhanjiswe kancane kakhulu. Sicela uzame futhi."</string>
     <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"Zama ezinye izigxivizo zeminwe"</string>
     <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"Kukhanya kakhulu"</string>
@@ -679,8 +686,8 @@
     <string name="face_acquired_too_dark" msgid="8539853432479385326">"Ukukhanya okunganele"</string>
     <string name="face_acquired_too_close" msgid="4453646176196302462">"Yisa ifoni kude"</string>
     <string name="face_acquired_too_far" msgid="2922278214231064859">"Sondeza ifoni eduze"</string>
-    <string name="face_acquired_too_high" msgid="8278815780046368576">"Yisa ifoni phezulu"</string>
-    <string name="face_acquired_too_low" msgid="4075391872960840081">"Yisa ifoni phansi"</string>
+    <string name="face_acquired_too_high" msgid="8278815780046368576">"Nyusa ifoni"</string>
+    <string name="face_acquired_too_low" msgid="4075391872960840081">"Yehlisa ifoni"</string>
     <string name="face_acquired_too_right" msgid="6245286514593540859">"Yisa ifoni ngakwesokunxele sakho"</string>
     <string name="face_acquired_too_left" msgid="9201762240918405486">"Yisa ifoni ngakwesokudla sakho"</string>
     <string name="face_acquired_poor_gaze" msgid="4427153558773628020">"Sicela ubheke ngokuqondile kakhulu kudivayisi yakho."</string>
@@ -709,8 +716,7 @@
     <string name="face_error_canceled" msgid="2164434737103802131">"Umsebenzi wobuso ukhanselwe."</string>
     <string name="face_error_user_canceled" msgid="5766472033202928373">"Ukuvula ngobuso kukhanselwe umsebenzisi."</string>
     <string name="face_error_lockout" msgid="7864408714994529437">"Imizamo eminingi kakhulu. Zama futhi emuva kwesikhathi."</string>
-    <!-- no translation found for face_error_lockout_permanent (8533257333130473422) -->
-    <skip />
+    <string name="face_error_lockout_permanent" msgid="8533257333130473422">"Imizamo eminingi kakhulu. Ukuvula Ngobuso akutholakali."</string>
     <string name="face_error_lockout_screen_lock" msgid="5062609811636860928">"Imizamo eminingi kakhulu. Kunalokho faka ukukhiya isikrini."</string>
     <string name="face_error_unable_to_process" msgid="5723292697366130070">"Ayikwazi ukuqinisekisa ubuso. Zama futhi."</string>
     <string name="face_error_not_enrolled" msgid="1134739108536328412">"Awukakusethi Ukuvula ngobuso."</string>
@@ -1392,7 +1398,7 @@
     <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"YENQABA"</string>
     <string name="select_input_method" msgid="3971267998568587025">"Khetha indlela yokufaka"</string>
     <string name="show_ime" msgid="6406112007347443383">"Yigcine kusikrini ngenkathi kusebenza ikhibhodi ephathekayo"</string>
-    <string name="hardware" msgid="1800597768237606953">"Bonisa ikhibhodi ebonakalayo"</string>
+    <string name="hardware" msgid="3611039921284836033">"Sebenzisa ikhibhodi ekuskrini"</string>
     <string name="select_keyboard_layout_notification_title" msgid="5823199895322205589">"Lungisa i-<xliff:g id="DEVICE_NAME">%s</xliff:g>"</string>
     <string name="select_multiple_keyboards_layout_notification_title" msgid="6999491025126641938">"Lungiselela amakhibhodi aphathekayo"</string>
     <string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"Thepha ukuze ukhethe ulimi nesakhiwo"</string>
@@ -1681,10 +1687,8 @@
     <string name="kg_text_message_separator" product="default" msgid="4503708889934976866">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"Susa"</string>
     <string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"Khuphukisa ivolumu ngaphezu kweleveli enconyiwe?\n\nUkulalela ngevolumu ephezulu izikhathi ezide kungahle kulimaze ukuzwa kwakho."</string>
-    <string name="csd_dose_reached_warning" product="default" msgid="1032473160590983236">"Isexwayiso,\nUsuweqe inani lamasignali omsindo omkhulu umuntu angakwazi ukuwalalela ngokuphepha ngeviki ngama-headphone.\n\nUkweqa lo mkhawulo kuzolimaza ngokuphelele ukuzwa kwakho."</string>
-    <string name="csd_dose_repeat_warning" product="default" msgid="6765471037071089401">"Isexwayiso,\nUsuweqe iinani lamasignali womsindo ophezulu izikhathi ezi-5 umuntu angakwazi ukuwalalela ngokuphephile ngeviki ngama-headphone.\n\nIvolumu yehlisiwe ukuze kuvikelwe ukuzwa kwakho."</string>
-    <string name="csd_entering_RS2_warning" product="default" msgid="3699509945325496807">"Izinga olalela ngalo imidiya lingaholela ekulimaleni kokuzwa uma kugcinwa isikhathi eside.\n\nUkuqhubeka nokudlala kuleli zinga isikhathi eside kungalimaza ukuzwa kwakho."</string>
-    <string name="csd_momentary_exposure_warning" product="default" msgid="7861896191081176454">"Isexwayiso,\nOkwamanje ulalele okuqukethwe okuphezulu okudlalwayo ezingeni elingaphephile.\n\nUkuqhubeka ulalele lo msindo omkhulu kuzolimaza ukuzwa kwakho unomphela."</string>
+    <string name="csd_dose_reached_warning" product="default" msgid="491875107583931974">"Qhubeka ulalele ngevolumu ephezulu?\n\nIvolumu ye-headphones ibiphezulu isikhathi eside kunokunconywa, okungalimaza ukuzwa kwakho"</string>
+    <string name="csd_momentary_exposure_warning" product="default" msgid="7730840903435405501">"Kutholwe umsindo omkhulu\n\nIvolumu yama-headphone ibe phezulu kunokunconyiwe, okungalimaza ukuzwa kwakho"</string>
     <string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Sebenzisa isinqamuleli sokufinyelela?"</string>
     <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Uma isinqamuleli sivuliwe, ukucindezela zombili izinkinobho zevolumu amasekhondi angu-3 kuzoqalisa isici sokufinyelela."</string>
     <string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Vula isinqamuleli sezici zokufinyeleleka?"</string>
@@ -1851,7 +1855,7 @@
     <string name="immersive_cling_description" msgid="7092737175345204832">"Ukuze uphume, swayiphela phansi kusuka phezulu."</string>
     <string name="immersive_cling_positive" msgid="7047498036346489883">"Ngiyitholile"</string>
     <string name="display_rotation_camera_compat_toast_after_rotation" msgid="7600891546249829854">"Zungezisa ukuze uthole ukubuka okungcono"</string>
-    <string name="display_rotation_camera_compat_toast_in_split_screen" msgid="8393302456336805466">"Phuma ekuhlukaniseni isikrini ukuze ubuke kangcono"</string>
+    <string name="display_rotation_camera_compat_toast_in_multi_window" msgid="2473122980393502775">"Vula i-<xliff:g id="NAME">%s</xliff:g> kusikrini esigcwele ngokubuka okungcono"</string>
     <string name="done_label" msgid="7283767013231718521">"Kwenziwe"</string>
     <string name="hour_picker_description" msgid="5153757582093524635">"Amahora weslayidi esiyindingilizi"</string>
     <string name="minute_picker_description" msgid="9029797023621927294">"Amaminithi weslayidi esiyindingilizi"</string>
@@ -1957,7 +1961,7 @@
     <string name="app_blocked_title" msgid="7353262160455028160">"Uhlelo lokusebenza alutholakali"</string>
     <string name="app_blocked_message" msgid="542972921087873023">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ayitholakali khona manje."</string>
     <string name="app_streaming_blocked_title" msgid="6090945835898766139">"okungatholakali <xliff:g id="ACTIVITY">%1$s</xliff:g>"</string>
-    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="4483161748582966785">"Kudingeka imvume"</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog" msgid="3805704317624448487">"Isicelo semvume sicindezelwe"</string>
     <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>
@@ -1968,6 +1972,9 @@
     <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_permission_request" product="tv" msgid="4706276040125072077">"Le-app icela izimvume ezengeziwe, kodwa izimvume azikwazi ukunikezwa ngesikhathi sokusakaza-bukhoma. Nikeza imvume kudivayisi yakho ye-Android TV kuqala."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet" msgid="1824604581465771629">"Le-app icela izimvume ezengeziwe, kodwa izimvume azikwazi ukunikezwa ngesikhathi sokusakaza-bukhoma. Nikeza imvume kuthebulethi yakho kuqala."</string>
+    <string name="app_streaming_blocked_message_for_permission_request" product="default" msgid="7755223160363292105">"Le-app icela izimvume ezengeziwe, kodwa izimvume azikwazi ukunikezwa ngesikhathi sokusakaza-bukhoma. Nikeza imvume kufoni yakho kuqala."</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>
@@ -1976,6 +1983,7 @@
     <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Lokhu akukwazi ukufinyelelwa ku-<xliff:g id="DEVICE">%1$s</xliff:g> yakho. Zama efonini yakho kunalokho."</string>
     <string name="deprecated_target_sdk_message" msgid="5246906284426844596">"Le app yakhelwe uhlobo lwakudala le-Android. Ingase ingasebenzi kahle futhi ayinakho ukuvikeleka kwakamuva nokuvikelwa kobumfihlo. Hlola isibuyekezo, noma uthinte unjiniyela we-app."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Hlola izibuyekezo"</string>
+    <string name="deprecated_abi_message" msgid="6820548011196218091">"Le app ayihambisani nohlobo lwakamuva lwe-Android. Hlola isibuyekezo, noma uthinte unjiniyela we-app."</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Unemilayezo emisha"</string>
     <string name="new_sms_notification_content" msgid="3197949934153460639">"Vula uhlelo lokusebenza lwe-SMS ukuze ubuke"</string>
     <string name="profile_encrypted_title" msgid="9001208667521266472">"Okunye ukusebenza kungakhawulelwe"</string>
@@ -2159,16 +2167,21 @@
     <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Lokhu okuqukethwe akukwazi ukukopishwa ngama-app womsebenzi"</string>
     <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Lokhu okuqukethwe akukwazi ukwabiwa nama-app womuntu siqu"</string>
     <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Lokhu okuqukethwe akukwazi ukukopishwa ngama-app womuntu siqu"</string>
-    <string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Iphrofayela yomsebenzi iphunyuziwe"</string>
-    <string name="resolver_switch_on_work" msgid="463709043650610420">"Thepha ukuze uvule"</string>
+    <string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Ama-app omsebenzi amisiwe"</string>
+    <string name="resolver_switch_on_work" msgid="4527096360772311894">"Qhubekisa"</string>
     <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Awekho ama-app womsebenzi"</string>
     <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Awekho ama-app womuntu siqu"</string>
-    <!-- no translation found for miniresolver_open_in_personal (6499100403307136696) -->
-    <skip />
-    <!-- no translation found for miniresolver_open_in_work (7138659785478630639) -->
-    <skip />
+    <string name="miniresolver_open_work" msgid="6286176185835401931">"Vula i-<xliff:g id="APP">%s</xliff:g> yomsebenzi?"</string>
+    <string name="miniresolver_open_in_personal" msgid="807427577794490375">"Vula ku-<xliff:g id="APP">%s</xliff:g> yomuntu siqu?"</string>
+    <string name="miniresolver_open_in_work" msgid="941341494673509916">"Vula ku-<xliff:g id="APP">%s</xliff:g> yomsebenzi?"</string>
+    <string name="miniresolver_call_in_work" msgid="528779988307529039">"Fona nge-app yasemsebenzini?"</string>
+    <string name="miniresolver_switch_to_work" msgid="1042640606122638596">"Shintshela ku-app yasemsebenzini?"</string>
+    <string name="miniresolver_call_information" msgid="6739417525304184083">"Inhlangano yakho ikuvumela kuphela ukuthi wenze amakholi ngama-app asemsebenzini"</string>
+    <string name="miniresolver_sms_information" msgid="4311292661329483088">"Inhlangano yakho ikuvumela ukuthumela imilayezo kusuka kuma-app omsebenzi kuphela"</string>
     <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Sebenzisa isiphequluli somuntu siqu"</string>
     <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Sebenzisa isiphequluli somsebenzi"</string>
+    <string name="miniresolver_call" msgid="6386870060423480765">"Fona"</string>
+    <string name="miniresolver_switch" msgid="8011924662117617451">"Shintsha"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Iphinikhodi yokuvula inethiwekhi ye-SIM"</string>
     <string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Iphinikhodi yokuvula yesethi engaphansi yenethiwekhi ye-SIM"</string>
     <string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Iphinikhodi yokuvula yenkampani ye-SIM"</string>
@@ -2305,6 +2318,7 @@
     <string name="vdm_camera_access_denied" product="default" msgid="6102378580971542473">"Ayikwazi ukufinyelela ikhamera yefoni kusuka ku-<xliff:g id="DEVICE">%1$s</xliff:g> yakho"</string>
     <string name="vdm_camera_access_denied" product="tablet" msgid="6895968310395249076">"Ayikwazi ukufinyelela ikhamera yethebulethi kusuka ku-<xliff:g id="DEVICE">%1$s</xliff:g> yakho"</string>
     <string name="vdm_secure_window" msgid="161700398158812314">"Lokhu akukwazi ukufinyelelwa ngenkathi usakaza. Zama efonini yakho kunalokho."</string>
+    <string name="vdm_pip_blocked" msgid="4036107522497281397">"Ayikwazi ukubuka isithombe esiphakathi kwesithombe ngenkathi isakaza"</string>
     <string name="system_locale_title" msgid="711882686834677268">"Okuzenzakalelayo kwesistimu"</string>
     <string name="default_card_name" msgid="9198284935962911468">"IKHADI <xliff:g id="CARDNUMBER">%d</xliff:g>"</string>
     <string name="permlab_companionProfileWatch" msgid="2457738382085872542">"Imvume yephrofayela ye-Companion Watch yokuphatha amawashi"</string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 6f7bc53..d80cfa3 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -3030,15 +3030,15 @@
              representation this attribute can be used for providing such. -->
         <attr name="contentDescription" format="string" localization="suggested" />
 
-        <!-- Sets the id of a view before which this one is visited in accessibility traversal.
-             A screen-reader must visit the content of this view before the content of the one
-             it precedes.
+        <!-- Sets the id of a view that screen readers are requested to visit after this view.
+             Requests that a screen-reader visits the content of this view before the content of the
+             one it precedes. This does nothing if either view is not important for accessibility.
              {@see android.view.View#setAccessibilityTraversalBefore(int)} -->
         <attr name="accessibilityTraversalBefore" format="integer" />
 
-        <!-- Sets the id of a view after which this one is visited in accessibility traversal.
-             A screen-reader must visit the content of the other view before the content of
-             this one.
+        <!-- Sets the id of a view that screen readers are requested to visit before this view.
+             Requests that a screen-reader visits the content of the other view before the content
+             of this one. This does nothing if either view is not important for accessibility.
              {@see android.view.View#setAccessibilityTraversalAfter(int)} -->
         <attr name="accessibilityTraversalAfter" format="integer" />
 
@@ -9094,7 +9094,10 @@
         <attr name="dotColor" format="color|reference"/>
         <!-- Color of the dot when it's activated -->
         <attr name="dotActivatedColor" format="color|reference"/>
-
+        <!-- Keep dot in activated state until segment completion -->
+        <attr name="keepDotActivated" format="boolean"/>
+        <!-- Enlarge vertex entry area for some form factors -->
+        <attr name="enlargeVertexEntryArea" format="boolean"/>
     </declare-styleable>
 
     <!-- =============================== -->
@@ -9160,10 +9163,10 @@
              {@link android.os.Build.VERSION_CODES#N} and not used in previous versions. -->
         <attr name="supportsLocalInteraction" format="boolean" />
         <!-- The service that provides {@link android.service.voice.HotwordDetectionService}.
-             @hide @SystemApi -->
+             Expect a component name to be provided. @hide @SystemApi -->
         <attr name="hotwordDetectionService" format="string" />
         <!-- The service that provides {@link android.service.voice.VisualQueryDetectionService}.
-             @hide @SystemApi -->
+             Expect a component name to be provided. @hide @SystemApi -->
         <attr name="visualQueryDetectionService" format="string" />
 
     </declare-styleable>
@@ -10113,13 +10116,12 @@
     <declare-styleable name="CredentialProvider">
         <!-- A string that is displayed to the user in the Credential Manager settings
              screen that can be used to provide more information about a provider. For
-             longer strings (40 char) it will be truncated. If multiple services
-             show the subtitle then the string will be joined together. -->
+             longer strings it will be truncated. -->
         <attr name="settingsSubtitle" format="string" />
     </declare-styleable>
 
     <!-- A list of capabilities that indicates to the OS what kinds of credentials
-             this provider supports. This list is defined in CredentialProviderService. -->
+             this provider supports. -->
     <declare-styleable name="CredentialProvider_Capabilities" parent="CredentialProvider">
         <!-- An individual capability declared by the provider. -->
         <attr name="capability" format="string" />
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 942cbe4..73a1abc 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -194,6 +194,13 @@
          available on some devices. -->
     <bool name="config_enableHapticTextHandle">false</bool>
 
+    <!-- Enables or disables proximity service that approximates proximity with aiai attention
+         service. Off by default, since the service may not be available on some devices. -->
+    <bool name="config_enableProximityService">false</bool>
+
+    <!-- Enable or disable android.companion.virtual.VirtualDeviceManager. Enabled by default. -->
+    <bool name="config_enableVirtualDeviceManager">true</bool>
+
     <!-- Whether dialogs should close automatically when the user touches outside
          of them.  This should not normally be modified. -->
     <bool name="config_closeDialogWhenTouchOutside">true</bool>
@@ -1024,7 +1031,7 @@
          requires swapping ROTATION_90 and ROTATION_270.
          TODO(b/265991392): This should eventually be configured and parsed in
           display_settings.xml -->
-    <bool name="config_matchSecondaryInternalDisplaysOrientationToReverseDefaultDisplay">true</bool>
+    <bool name="config_matchSecondaryInternalDisplaysOrientationToReverseDefaultDisplay">false</bool>
 
     <!-- Indicate available ColorDisplayManager.COLOR_MODE_xxx. -->
     <integer-array name="config_availableColorModes">
@@ -1893,6 +1900,11 @@
         <item>telephony</item>
     </string-array>
 
+    <!-- The difference in millis that has to exist between a time suggestion under
+         consideration by the time_detector and the system clock before the system clock will be
+         changed. -->
+    <integer name="config_timeDetectorAutoUpdateDiffMillis">2000</integer>
+
     <!-- Enables the GnssTimeUpdate service. This is the global switch for enabling Gnss time based
          suggestions to TimeDetector service. See also config_autoTimeSourcesPriority. -->
     <bool name="config_enableGnssTimeUpdateService">false</bool>
@@ -2300,6 +2312,8 @@
     <string name="config_systemFinancedDeviceController" translatable="false">com.android.devicelockcontroller</string>
     <!-- The name of the package that will hold the call streaming role. -->
     <string name="config_systemCallStreaming" translatable="false"></string>
+    <!-- The name of the package that will hold the default retail demo role. -->
+    <string name="config_defaultRetailDemo" translatable="false"></string>
 
     <!-- The component name of the wear service class that will be started by the system server. -->
     <string name="config_wearServiceComponent" translatable="false"></string>
@@ -2814,6 +2828,11 @@
          measured in dips per second. Setting this to -1dp disables rotary encoder fling.  -->
     <dimen name="config_viewMaxRotaryEncoderFlingVelocity">-1dp</dimen>
 
+    <!-- Tick intervals in dp for rotary encoder scrolls on {@link MotionEvent#AXIS_SCROLL}
+         generated by {@link InputDevice#SOURCE_ROTARY_ENCODER} devices. A valid tick interval value
+         is a positive value. Setting this to 0dp disables scroll tick. -->
+    <dimen name="config_rotaryEncoderAxisScrollTickInterval">21dp</dimen>
+
     <!-- Amount of time in ms the user needs to press the relevant key to bring up the
          global actions dialog -->
     <integer name="config_globalActionsKeyTimeout">500</integer>
@@ -2922,6 +2941,10 @@
      with admin privileges and admin privileges can be granted/revoked from existing users. -->
     <bool name="config_enableMultipleAdmins">false</bool>
 
+    <!-- Whether there is a communal profile which should always be running.
+         Only relevant for Headless System User Mode (HSUM) devices. -->
+    <bool name="config_omnipresentCommunalUser">false</bool>
+
     <!-- Whether the new Auto Selection Network UI should be shown -->
     <bool name="config_enableNewAutoSelectNetworkUI">false</bool>
 
@@ -3189,8 +3212,9 @@
 
     <!-- Component name of the activity used to ask a user to confirm system language change after
          receiving <Set Menu Language> CEC message. -->
-    <string name="config_hdmiCecSetMenuLanguageActivity"
-            >com.android.systemui/com.android.systemui.hdmi.HdmiCecSetMenuLanguageActivity</string>
+    <string name="config_hdmiCecSetMenuLanguageActivity">
+        com.android.systemui/com.android.systemui.tv.hdmi.HdmiCecSetMenuLanguageActivity
+    </string>
 
     <!-- Name of the dialog that is used to request the user's consent for a Platform VPN -->
     <string name="config_platformVpnConfirmDialogComponent" translatable="false"
@@ -3461,7 +3485,7 @@
     <!-- default window ShowCircularMask property -->
     <bool name="config_windowShowCircularMask">false</bool>
 
-    <!-- default value for whether circular emulators (ro.emulator.circular)
+    <!-- default value for whether circular emulators (ro.boot.emulator.circular)
          should show a display overlay on the screen -->
     <bool name="config_windowEnableCircularEmulatorDisplayOverlay">false</bool>
 
@@ -3915,8 +3939,14 @@
     <!-- Flag indicating device support for EAP SIM, AKA, AKA' -->
     <bool name="config_eap_sim_based_auth_supported">true</bool>
 
+    <!-- How long history of recent vibrations should be kept for the dumpsys. -->
+    <integer name="config_recentVibrationsDumpSizeLimit">20</integer>
+
     <!-- How long history of previous vibrations should be kept for the dumpsys. -->
-    <integer name="config_previousVibrationsDumpLimit">50</integer>
+    <integer name="config_previousVibrationsDumpSizeLimit">50</integer>
+
+    <!-- How close vibration request should be when they're aggregated for dumpsys, in ms. -->
+    <integer name="config_previousVibrationsDumpAggregationTimeMillisLimit">1000</integer>
 
     <!-- The default vibration strength, must be between 1 and 255 inclusive. -->
     <integer name="config_defaultVibrationAmplitude">255</integer>
@@ -3937,6 +3967,10 @@
          non-zero amplitudes, to bring the vibrator amplitude down to zero using this timing. -->
     <integer name="config_vibrationWaveformRampDownDuration">0</integer>
 
+    <!-- Ignores vibrations when the device is on a wireless charger.
+         A vibrating device may move out of alignment with the charging pad. -->
+    <bool name="config_ignoreVibrationsOnWirelessCharger">false</bool>
+
     <!-- Number of retries Cell Data should attempt for a given error code before
          restarting the modem.
          Error codes not listed will not lead to modem restarts.
@@ -4117,6 +4151,10 @@
     -->
     <string name="config_wallpaperCropperPackage" translatable="false">com.android.wallpapercropper</string>
 
+    <!-- Wallpaper will get top app scheduling priority if this is set to true.
+    -->
+    <bool name="config_wallpaperTopApp">false</bool>
+
     <!-- True if the device supports at least one form of multi-window.
          E.g. freeform, split-screen, picture-in-picture. -->
     <bool name="config_supportsMultiWindow">true</bool>
@@ -4250,6 +4288,9 @@
     <!-- Colon separated list of package names that should be granted DND access -->
     <string name="config_defaultDndAccessPackages" translatable="false">com.android.camera2</string>
 
+    <!-- Colon separated list of package names that should be removed from DND access packages -->
+    <string name="config_defaultDndDeniedPackages" translatable="false"></string>
+
     <!-- User restrictions set on the SYSTEM user when it is first created.
          Note: Also update appropriate overlay files. -->
     <string-array translatable="false" name="config_defaultFirstUserRestrictions">
@@ -4376,12 +4417,12 @@
          Example: "com.android.companiondevicemanager"
          See android.companion.CompanionDeviceManager.
     -->
-    <string name="config_companionDeviceManagerPackage" translatable="false"></string>
+    <string name="config_companionDeviceManagerPackage" translatable="false">com.android.companiondevicemanager</string>
 
     <!-- A list of packages managing companion device(s) by the same manufacturers as the main
          device. It will fall back to showing a prompt if the association has been called multiple
          times in a short period.
-         Note that config_companionDeviceManagerPackage and config_companionDeviceCerts are
+         Note that config_companionDevicePackages and config_companionDeviceCerts are
          parallel arrays.
      -->
     <string-array name="config_companionDevicePackages" translatable="false"></string-array>
@@ -4389,7 +4430,7 @@
     <!-- A list of SHA256 Certificates managing companion device(s) by the same manufacturers as
          the main device. It will fall back to showing a prompt if the association has been called
          multiple times in a short period.
-         Note that config_companionDeviceCerts and config_companionDeviceManagerPackage are parallel
+         Note that config_companionDeviceCerts and config_companionDevicePackages are parallel
          arrays.
          Example: "1A:2B:3C:4D"
      -->
@@ -4800,8 +4841,6 @@
     <!-- Size of icon shown beside a preference locked by admin -->
     <dimen name="config_restrictedIconSize">@dimen/restricted_icon_size_material</dimen>
 
-    <string translatable="false" name="config_batterySaverDeviceSpecificConfig"></string>
-
     <!-- Component name that should be granted Notification Assistant access -->
     <string name="config_defaultAssistantAccessComponent" translatable="false">android.ext.services/android.ext.services.notification.Assistant</string>
 
@@ -4831,12 +4870,6 @@
     <!-- Default value set for battery percentage in status bar false = disabled, true = enabled -->
     <bool name="config_defaultBatteryPercentageSetting">false</bool>
 
-    <!-- Whether or not battery saver should be "sticky" when manually enabled. -->
-    <bool name="config_batterySaverStickyBehaviourDisabled">false</bool>
-
-    <!-- Config flag to track default disable threshold for Dynamic power savings enabled battery saver. -->
-    <integer name="config_dynamicPowerSavingsDefaultDisableThreshold">80</integer>
-
     <!-- Model of potentially misprovisioned devices. If none is specified in an overlay, an
          empty string is passed in. -->
     <string name="config_misprovisionedDeviceModel" translatable="false"></string>
@@ -5536,10 +5569,6 @@
     <!-- pdp data reject retry delay in ms -->
     <integer name="config_pdp_reject_retry_delay_ms">-1</integer>
 
-    <!-- Duration in milliseconds for device to vibrate on mash press on power
-         button. -->
-    <integer name="config_mashPressVibrateTimeOnPowerButton">0</integer>
-
     <!-- Whether or not to enable the binder heavy hitter watcher by default -->
     <bool name="config_defaultBinderHeavyHitterWatcherEnabled">false</bool>
 
@@ -6073,9 +6102,6 @@
     <!-- Whether changing sensor privacy SW setting requires device to be unlocked -->
     <bool name="config_sensorPrivacyRequiresAuthentication">true</bool>
 
-    <!-- List containing the allowed install sources for accessibility service. -->
-    <string-array name="config_accessibility_allowed_install_source" translatable="false"/>
-
     <!-- Default value for Settings.ASSIST_LONG_PRESS_HOME_ENABLED -->
     <bool name="config_assistLongPressHomeEnabledDefault">true</bool>
     <!-- Default value for Settings.ASSIST_TOUCH_GESTURE_ENABLED -->
@@ -6546,4 +6572,26 @@
          environment to protect the user's privacy when the device is being repaired.
          Off by default, since OEMs may have had a similar feature on their devices. -->
     <bool name="config_repairModeSupported">false</bool>
+
+    <!-- The file path in which the default shutdown vibration effect should be serialized. If the
+         device does not specify any such file path here, if the file path specified here does not
+         exist, or if the contents of the file does not make up a valid VibrationEffect
+         serialization, a default vibration will be used.
+         Note that, indefinitely repeating vibrations are not allowed as shutdown vibrations. -->
+    <string name="config_defaultShutdownVibrationFile" />
+
+    <!-- Whether single finger panning is enabled when magnification is on -->
+    <bool name="config_enable_a11y_magnification_single_panning">false</bool>
+
+    <!-- The file path in which custom vibrations are provided for haptic feedbacks.
+         If the device does not specify any such file path here, if the file path specified here
+         does not exist, or if the contents of the file does not make up a valid customization
+         serialization, the system default vibrations for haptic feedback will be used.
+         If the content of the customization file is valid, the system will use the provided
+         vibrations for the customized haptic feedback IDs, and continue to use the system defaults
+         for the non-customized ones. -->
+    <string name="config_hapticFeedbackCustomizationFile" />
+
+    <!-- Whether or not ActivityManager PSS profiling is disabled. -->
+    <bool name="config_am_disablePssProfiling">false</bool>
 </resources>
diff --git a/core/res/res/values/config_battery_saver.xml b/core/res/res/values/config_battery_saver.xml
new file mode 100644
index 0000000..eb396df
--- /dev/null
+++ b/core/res/res/values/config_battery_saver.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright (C) 2023 The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<!-- These resources are around just to allow their values to be customized
+     for different hardware and product builds.  Do not translate.
+
+     NOTE: The naming convention is "config_camelCaseValue". Some legacy
+     entries do not follow the convention, but all new entries should. -->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string translatable="false" name="config_batterySaverDeviceSpecificConfig"></string>
+
+    <!-- Whether or not battery saver should be "sticky" when manually enabled. -->
+    <bool name="config_batterySaverStickyBehaviourDisabled">false</bool>
+
+    <!-- Config flag to track default disable threshold for Dynamic power savings enabled battery saver. -->
+    <integer name="config_dynamicPowerSavingsDefaultDisableThreshold">80</integer>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.adjustBrightnessFactor -->
+    <item name="config_batterySaver_full_adjustBrightnessFactor" format="float" type="dimen">
+        .5
+    </item>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.deferFullBackup -->
+    <bool name="config_batterySaver_full_deferFullBackup">true</bool>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.deferKeyValueBackup -->
+    <bool name="config_batterySaver_full_deferKeyValueBackup">true</bool>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.disableAnimation -->
+    <bool name="config_batterySaver_full_disableAnimation">false</bool>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.disableAod -->
+    <bool name="config_batterySaver_full_disableAod">true</bool>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.disableLaunchBoost -->
+    <bool name="config_batterySaver_full_disableLaunchBoost">true</bool>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.disableOptionalSensors -->
+    <bool name="config_batterySaver_full_disableOptionalSensors">true</bool>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.disableVibration -->
+    <bool name="config_batterySaver_full_disableVibration">false</bool>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.enableAdjustBrightness -->
+    <bool name="config_batterySaver_full_enableAdjustBrightness">false</bool>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.enableDataSaver -->
+    <bool name="config_batterySaver_full_enableDataSaver">false</bool>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.enableFirewall -->
+    <bool name="config_batterySaver_full_enableFirewall">true</bool>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.enableNightMode -->
+    <bool name="config_batterySaver_full_enableNightMode">true</bool>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.enableQuickDoze -->
+    <bool name="config_batterySaver_full_enableQuickDoze">true</bool>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.forceAllAppsStandby -->
+    <bool name="config_batterySaver_full_forceAllAppsStandby">true</bool>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.forceBackgroundCheck -->
+    <bool name="config_batterySaver_full_forceBackgroundCheck">true</bool>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.locationMode
+       (LOCATION_MODE_FOREGROUND_ONLY) -->
+    <integer name="config_batterySaver_full_locationMode">3</integer>
+
+    <!-- Default for BatterySaverPolicy.DEFAULT_FULL_POLICY.soundTriggerMode
+       (SOUND_TRIGGER_MODE_CRITICAL_ONLY) -->
+    <integer name="config_batterySaver_full_soundTriggerMode">1</integer>
+</resources>
+
diff --git a/core/res/res/values/config_device_idle.xml b/core/res/res/values/config_device_idle.xml
index 5576b9f..98a5ff9 100644
--- a/core/res/res/values/config_device_idle.xml
+++ b/core/res/res/values/config_device_idle.xml
@@ -117,13 +117,10 @@
     <!-- Default for DeviceIdleController.Constants.WAIT_FOR_UNLOCK -->
     <bool name="device_idle_wait_for_unlock">true</bool>
 
-    <!-- Default for DeviceIdleController.Constants.PRE_IDLE_FACTOR_LONG -->
-    <item name="device_idle_pre_idle_factor_long" format="float" type="integer">1.67</item>
-
-    <!-- Default for DeviceIdleController.Constants.PRE_IDLE_FACTOR_SHORT -->
-    <item name="device_idle_pre_idle_factor_short" format="float" type="integer">0.33</item>
-
     <!-- Default for DeviceIdleController.Constants.USE_WINDOW_ALARMS -->
     <bool name="device_idle_use_window_alarms">true</bool>
+
+    <!-- Default for DeviceIdleController.Constants.USE_MODE_MANAGER -->
+    <bool name="device_idle_use_mode_manager">false</bool>
 </resources>
 
diff --git a/core/res/res/values/config_telephony.xml b/core/res/res/values/config_telephony.xml
index b7a5bc8..bda194a 100644
--- a/core/res/res/values/config_telephony.xml
+++ b/core/res/res/values/config_telephony.xml
@@ -160,6 +160,7 @@
             3 = {@link android.telephony.NetworkRegistrationInfo#SERVICE_TYPE_SMS}
             4 = {@link android.telephony.NetworkRegistrationInfo#SERVICE_TYPE_VIDEO}
             5 = {@link android.telephony.NetworkRegistrationInfo#SERVICE_TYPE_EMERGENCY}
+            6 = {@link android.telephony.NetworkRegistrationInfo#SERVICE_TYPE_MMS}
          Example of a config string: "10011:2,3"
 
          The PLMNs not configured in this array will be ignored and will not be used for satellite
@@ -199,4 +200,8 @@
     <bool name="allow_clear_initial_attach_data_profile">false</bool>
     <java-symbol type="bool" name="allow_clear_initial_attach_data_profile" />
 
+    <!-- Boolean indicating whether TelephonyAnalytics module is active or not. -->
+    <bool name="telephony_analytics_switch">true</bool>
+    <java-symbol type="bool" name="telephony_analytics_switch" />
+
 </resources>
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index b129321..0f2c264a 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -687,6 +687,9 @@
     <!-- Parameters applied to line disappearing animation in LockPatternView in milliseconds. -->
     <integer name="lock_pattern_line_fade_out_duration">500</integer>
     <integer name="lock_pattern_line_fade_out_delay">150</integer>
+    <!-- Parameters applied to fade pattern animation in LockPatternView in milliseconds. -->
+    <integer name="lock_pattern_fade_pattern_duration">200</integer>
+    <integer name="lock_pattern_fade_pattern_delay">2300</integer>
 
     <dimen name="text_handle_min_size">40dp</dimen>
 
diff --git a/core/res/res/values/public-staging.xml b/core/res/res/values/public-staging.xml
index 49a1940..adc7fe0 100644
--- a/core/res/res/values/public-staging.xml
+++ b/core/res/res/values/public-staging.xml
@@ -119,6 +119,8 @@
   </staging-public-group>
 
   <staging-public-group type="string" first-id="0x01ba0000">
+    <!-- @hide @SystemApi -->
+    <public name="config_defaultRetailDemo" />
   </staging-public-group>
 
   <staging-public-group type="dimen" first-id="0x01b90000">
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 93d1771..d828f33 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -5379,7 +5379,7 @@
     <!-- Title of the dialog shown when an app is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
     <string name="app_streaming_blocked_title"><xliff:g id="activity" example="Permission dialog">%1$s</xliff:g> unavailable</string>
     <!-- Title of the dialog shown when the permissioncontroller is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
-    <string name="app_streaming_blocked_title_for_permission_dialog">Permission needed</string>
+    <string name="app_streaming_blocked_title_for_permission_dialog">Permission request suppressed</string>
     <!-- Title of the dialog shown when the camera permission is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
     <string name="app_streaming_blocked_title_for_camera_dialog">Camera unavailable</string>
     <!-- Title of the dialog shown when the fingerprint permission is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
@@ -5400,6 +5400,12 @@
     <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> at this time. Try on your phone instead.</string>
+    <!-- Message shown when a runtime permission request is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
+    <string name="app_streaming_blocked_message_for_permission_request" product="tv">This app is requesting additional permissions, but permissions can’t be granted in a streaming session. Grant the permission on your Android TV device first.</string>
+    <!-- Message shown when a runtime permission request is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
+    <string name="app_streaming_blocked_message_for_permission_request" product="tablet">This app is requesting additional permissions, but permissions can’t be granted in a streaming session. Grant the permission on your tablet first.</string>
+    <!-- Message shown when a runtime permission request is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
+    <string name="app_streaming_blocked_message_for_permission_request" product="default">This app is requesting additional permissions, but permissions can’t be granted in a streaming session. Grant the permission on your phone first.</string>
     <!-- Message shown when an app being streamed to another device requests authentication such as via the biometrics API, and the user needs to complete the on their 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 an app being streamed to another device requests authentication such as via the biometrics API, and the user needs to complete the on their device. [CHAR LIMIT=NONE] -->
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 79964b3..164f713 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -1560,4 +1560,8 @@
     <style name="NotificationTombstoneAction" parent="NotificationAction">
         <item name="textColor">#555555</item>
     </style>
+
+    <!-- The default style for input method switch dialog -->
+    <style name="InputMethodSwitchDialogStyle" parent="AlertDialog.DeviceDefault">
+    </style>
 </resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index f6fd14b..b14bf5b 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -358,6 +358,7 @@
   <java-symbol type="bool" name="config_canSwitchToHeadlessSystemUser"/>
   <java-symbol type="bool" name="config_enableMultiUserUI"/>
   <java-symbol type="bool" name="config_enableMultipleAdmins"/>
+  <java-symbol type="bool" name="config_omnipresentCommunalUser"/>
   <java-symbol type="bool" name="config_enableNewAutoSelectNetworkUI"/>
   <java-symbol type="bool" name="config_disableUsbPermissionDialogs"/>
   <java-symbol type="dimen" name="config_highResTaskSnapshotScale" />
@@ -416,6 +417,8 @@
   <java-symbol type="bool" name="config_guestUserAllowEphemeralStateChange" />
   <java-symbol type="bool" name="config_localDisplaysMirrorContent" />
   <java-symbol type="bool" name="config_ignoreUdfpsVote" />
+  <java-symbol type="bool" name="config_enableProximityService" />
+  <java-symbol type="bool" name="config_enableVirtualDeviceManager" />
   <java-symbol type="array" name="config_localPrivateDisplayPorts" />
   <java-symbol type="integer" name="config_defaultDisplayDefaultColorMode" />
   <java-symbol type="bool" name="config_enableAppWidgetService" />
@@ -659,6 +662,7 @@
   <java-symbol type="string" name="cfTemplateRegisteredTime" />
   <java-symbol type="string" name="chooseActivity" />
   <java-symbol type="string" name="checked" />
+  <java-symbol type="string" name="config_companionDeviceManagerPackage" />
   <java-symbol type="array" name="config_companionDevicePackages" />
   <java-symbol type="array" name="config_companionDeviceCerts" />
   <java-symbol type="string" name="config_default_dns_server" />
@@ -1284,6 +1288,8 @@
   <java-symbol type="dimen" name="lock_pattern_fade_away_gradient_width" />
   <java-symbol type="integer" name="lock_pattern_line_fade_out_duration" />
   <java-symbol type="integer" name="lock_pattern_line_fade_out_delay" />
+  <java-symbol type="integer" name="lock_pattern_fade_pattern_delay" />
+  <java-symbol type="integer" name="lock_pattern_fade_pattern_duration" />
   <java-symbol type="drawable" name="clock_dial" />
   <java-symbol type="drawable" name="clock_hand_hour" />
   <java-symbol type="drawable" name="clock_hand_minute" />
@@ -1389,6 +1395,7 @@
   <java-symbol type="drawable" name="ic_corp_user_badge" />
   <java-symbol type="drawable" name="ic_corp_badge_no_background" />
   <java-symbol type="drawable" name="ic_corp_statusbar_icon" />
+  <java-symbol type="drawable" name="stat_sys_managed_profile_status" />
   <java-symbol type="drawable" name="ic_test_badge_experiment" />
   <java-symbol type="drawable" name="ic_test_badge_no_background" />
   <java-symbol type="drawable" name="ic_test_icon_badge_experiment" />
@@ -2030,10 +2037,14 @@
   <java-symbol type="integer" name="config_notificationsBatteryMediumARGB" />
   <java-symbol type="integer" name="config_notificationsBatteryNearlyFullLevel" />
   <java-symbol type="integer" name="config_notificationServiceArchiveSize" />
-  <java-symbol type="integer" name="config_previousVibrationsDumpLimit" />
+  <java-symbol type="dimen" name="config_rotaryEncoderAxisScrollTickInterval" />
+  <java-symbol type="integer" name="config_recentVibrationsDumpSizeLimit" />
+  <java-symbol type="integer" name="config_previousVibrationsDumpSizeLimit" />
+  <java-symbol type="integer" name="config_previousVibrationsDumpAggregationTimeMillisLimit" />
   <java-symbol type="integer" name="config_defaultVibrationAmplitude" />
   <java-symbol type="dimen" name="config_hapticChannelMaxVibrationAmplitude" />
   <java-symbol type="integer" name="config_vibrationWaveformRampStepDuration" />
+  <java-symbol type="bool" name="config_ignoreVibrationsOnWirelessCharger" />
   <java-symbol type="integer" name="config_vibrationWaveformRampDownDuration" />
   <java-symbol type="integer" name="config_radioScanningTimeout" />
   <java-symbol type="integer" name="config_screenBrightnessSettingMinimum" />
@@ -2240,6 +2251,7 @@
   <java-symbol type="string" name="config_persistentDataPackageName" />
   <java-symbol type="string" name="config_deviceConfiguratorPackageName" />
   <java-symbol type="array" name="config_autoTimeSourcesPriority" />
+  <java-symbol type="integer" name="config_timeDetectorAutoUpdateDiffMillis" />
   <java-symbol type="bool" name="config_enableGnssTimeUpdateService" />
   <java-symbol type="bool" name="config_enableGeolocationTimeZoneDetection" />
   <java-symbol type="bool" name="config_enablePrimaryLocationTimeZoneProvider" />
@@ -3239,6 +3251,7 @@
   <!-- WallpaperManager config -->
   <java-symbol type="string" name="config_wallpaperCropperPackage" />
   <java-symbol type="string" name="expand_action_accessibility" />
+  <java-symbol type="bool" name="config_wallpaperTopApp" />
 
   <java-symbol type="id" name="textSpacerNoTitle" />
   <java-symbol type="id" name="titleDividerNoCustom" />
@@ -3345,6 +3358,7 @@
   <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_request" />
   <java-symbol type="string" name="app_streaming_blocked_message_for_fingerprint_dialog" />
   <java-symbol type="string" name="app_streaming_blocked_message_for_settings_dialog" />
 
@@ -3367,6 +3381,8 @@
 
   <!-- Colon separated list of package names that should be granted DND access -->
   <java-symbol type="string" name="config_defaultDndAccessPackages" />
+  <!-- Colon separated list of package names that should be removed from DND access packages -->
+  <java-symbol type="string" name="config_defaultDndDeniedPackages" />
 
   <!-- For NetworkPolicyManagerService -->
   <java-symbol type="string" name="config_networkOverLimitComponent" />
@@ -3933,7 +3949,6 @@
 
   <!-- From media projection -->
   <java-symbol type="string" name="config_mediaProjectionPermissionDialogComponent" />
-  <java-symbol type="string" name="config_batterySaverDeviceSpecificConfig" />
 
   <!-- Compile SDK check -->
   <java-symbol type="layout" name="unsupported_compile_sdk_dialog_content" />
@@ -3997,11 +4012,30 @@
   <java-symbol type="string" name="notification_app_name_system" />
   <java-symbol type="string" name="notification_app_name_settings" />
 
+  <!-- Battery saver config -->
   <java-symbol type="integer" name="config_lowBatteryAutoTriggerDefaultLevel" />
+  <java-symbol type="string" name="config_batterySaverDeviceSpecificConfig" />
   <java-symbol type="bool" name="config_batterySaverStickyBehaviourDisabled" />
   <java-symbol type="integer" name="config_dynamicPowerSavingsDefaultDisableThreshold" />
   <java-symbol type="string" name="config_batterySaverScheduleProvider" />
   <java-symbol type="string" name="config_powerSaveModeChangedListenerPackage" />
+  <java-symbol type="dimen" name="config_batterySaver_full_adjustBrightnessFactor" />
+  <java-symbol type="bool" name="config_batterySaver_full_deferFullBackup" />
+  <java-symbol type="bool" name="config_batterySaver_full_deferKeyValueBackup" />
+  <java-symbol type="bool" name="config_batterySaver_full_disableAnimation" />
+  <java-symbol type="bool" name="config_batterySaver_full_disableAod" />
+  <java-symbol type="bool" name="config_batterySaver_full_disableLaunchBoost" />
+  <java-symbol type="bool" name="config_batterySaver_full_disableOptionalSensors" />
+  <java-symbol type="bool" name="config_batterySaver_full_disableVibration" />
+  <java-symbol type="bool" name="config_batterySaver_full_enableAdjustBrightness" />
+  <java-symbol type="bool" name="config_batterySaver_full_enableDataSaver" />
+  <java-symbol type="bool" name="config_batterySaver_full_enableFirewall" />
+  <java-symbol type="bool" name="config_batterySaver_full_enableNightMode" />
+  <java-symbol type="bool" name="config_batterySaver_full_enableQuickDoze" />
+  <java-symbol type="bool" name="config_batterySaver_full_forceAllAppsStandby" />
+  <java-symbol type="bool" name="config_batterySaver_full_forceBackgroundCheck" />
+  <java-symbol type="integer" name="config_batterySaver_full_locationMode" />
+  <java-symbol type="integer" name="config_batterySaver_full_soundTriggerMode" />
 
   <!-- For car devices -->
   <java-symbol type="string" name="car_loading_profile" />
@@ -4420,6 +4454,7 @@
 
   <java-symbol type="string" name="notification_history_title_placeholder" />
 
+  <java-symbol type="dimen" name="config_wallpaperMinScale"/>
   <!-- The max scale for the wallpaper when it's zoomed in -->
   <java-symbol type="dimen" name="config_wallpaperMaxScale"/>
 
@@ -4486,9 +4521,8 @@
   <java-symbol type="integer" name="device_idle_sms_temp_app_allowlist_duration_ms" />
   <java-symbol type="integer" name="device_idle_notification_allowlist_duration_ms" />
   <java-symbol type="bool" name="device_idle_wait_for_unlock" />
-  <java-symbol type="integer" name="device_idle_pre_idle_factor_long" />
-  <java-symbol type="integer" name="device_idle_pre_idle_factor_short" />
   <java-symbol type="bool" name="device_idle_use_window_alarms" />
+  <java-symbol type="bool" name="device_idle_use_mode_manager" />
 
   <!-- Binder heavy hitter watcher configs -->
   <java-symbol type="bool" name="config_defaultBinderHeavyHitterWatcherEnabled" />
@@ -4916,8 +4950,6 @@
   <java-symbol type="array" name="config_builtInDisplayIsRoundArray" />
   <java-symbol type="array" name="config_gnssParameters" />
 
-  <java-symbol type="integer" name="config_mashPressVibrateTimeOnPowerButton" />
-
   <java-symbol type="string" name="config_systemGameService" />
 
   <java-symbol type="string" name="config_supervisedUserCreationPackage"/>
@@ -5037,7 +5069,6 @@
   <java-symbol type="bool" name="config_batteryStatsResetOnUnplugHighBatteryLevel" />
   <java-symbol type="bool" name="config_batteryStatsResetOnUnplugAfterSignificantCharge" />
 
-
   <java-symbol name="materialColorOnSecondaryFixedVariant" type="attr"/>
   <java-symbol name="materialColorOnTertiaryFixedVariant" type="attr"/>
   <java-symbol name="materialColorSurfaceContainerLowest" type="attr"/>
@@ -5148,5 +5179,13 @@
   <java-symbol type="style" name="ThemeOverlay.DeviceDefault.Dark.ActionBar.Accent" />
 
   <java-symbol type="drawable" name="focus_event_pressed_key_background" />
+  <java-symbol type="string" name="config_defaultShutdownVibrationFile" />
   <java-symbol type="string" name="lockscreen_too_many_failed_attempts_countdown" />
+
+  <java-symbol type="bool" name="config_enable_a11y_magnification_single_panning" />
+
+  <java-symbol type="string" name="config_hapticFeedbackCustomizationFile" />
+
+  <!-- For ActivityManager PSS profiling configurability -->
+  <java-symbol type="bool" name="config_am_disablePssProfiling" />
 </resources>
diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml
index a2d54b2..84f1d6e 100644
--- a/core/res/res/values/themes_device_defaults.xml
+++ b/core/res/res/values/themes_device_defaults.xml
@@ -4098,6 +4098,7 @@
         <item name="materialColorPrimaryContainer">@color/system_primary_container_light</item>
         <item name="materialColorOnBackground">@color/system_on_background_light</item>
         <item name="materialColorPrimaryFixed">@color/system_primary_fixed</item>
+
         <item name="materialColorOnSecondary">@color/system_on_secondary_light</item>
         <item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
         <item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
@@ -4178,6 +4179,7 @@
         <item name="materialColorPrimaryContainer">@color/system_primary_container_light</item>
         <item name="materialColorOnBackground">@color/system_on_background_light</item>
         <item name="materialColorPrimaryFixed">@color/system_primary_fixed</item>
+
         <item name="materialColorOnSecondary">@color/system_on_secondary_light</item>
         <item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
         <item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
@@ -4250,6 +4252,7 @@
         <item name="materialColorPrimaryContainer">@color/system_primary_container_light</item>
         <item name="materialColorOnBackground">@color/system_on_background_light</item>
         <item name="materialColorPrimaryFixed">@color/system_primary_fixed</item>
+
         <item name="materialColorOnSecondary">@color/system_on_secondary_light</item>
         <item name="materialColorOnTertiary">@color/system_on_tertiary_light</item>
         <item name="materialColorSurfaceDim">@color/system_surface_dim_light</item>
diff --git a/core/tests/coretests/Android.bp b/core/tests/coretests/Android.bp
index 286697c..c14da29 100644
--- a/core/tests/coretests/Android.bp
+++ b/core/tests/coretests/Android.bp
@@ -53,7 +53,7 @@
         "junit-params",
         "kotlin-test",
         "mockito-target-minus-junit4",
-        "ub-uiautomator",
+        "androidx.test.uiautomator_uiautomator",
         "platform-test-annotations",
         "platform-compat-test-rules",
         "truth-prebuilt",
@@ -91,7 +91,6 @@
     java_resources: [":ApkVerityTestCertDer"],
 
     data: [
-        ":BstatsTestApp",
         ":BinderDeathRecipientHelperApp1",
         ":BinderDeathRecipientHelperApp2",
         ":com.android.cts.helpers.aosp",
diff --git a/core/tests/coretests/AndroidManifest.xml b/core/tests/coretests/AndroidManifest.xml
index 129de64..31755ef 100644
--- a/core/tests/coretests/AndroidManifest.xml
+++ b/core/tests/coretests/AndroidManifest.xml
@@ -231,6 +231,28 @@
             </intent-filter>
         </activity>
 
+        <activity android:name="android.widget.HorizontalScrollViewActivity"
+                android:label="HorizontalScrollViewActivity"
+                android:screenOrientation="portrait"
+                android:exported="true"
+                android:theme="@android:style/Theme.Material.Light">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name="android.widget.ScrollViewActivity"
+                android:label="ScrollViewActivity"
+                android:screenOrientation="portrait"
+                android:exported="true"
+                android:theme="@android:style/Theme.Material.Light">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" />
+            </intent-filter>
+        </activity>
+
         <activity android:name="android.widget.DatePickerActivity"
                 android:label="DatePickerActivity"
                 android:screenOrientation="portrait"
diff --git a/core/tests/coretests/AndroidTest.xml b/core/tests/coretests/AndroidTest.xml
index 3e4c47b..05b309b 100644
--- a/core/tests/coretests/AndroidTest.xml
+++ b/core/tests/coretests/AndroidTest.xml
@@ -20,7 +20,6 @@
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
         <option name="cleanup-apks" value="true" />
         <option name="test-file-name" value="FrameworksCoreTests.apk" />
-        <option name="test-file-name" value="BstatsTestApp.apk" />
         <option name="test-file-name" value="BinderDeathRecipientHelperApp1.apk" />
         <option name="test-file-name" value="BinderDeathRecipientHelperApp2.apk" />
     </target_preparer>
diff --git a/core/tests/coretests/BstatsTestApp/OWNERS b/core/tests/coretests/BstatsTestApp/OWNERS
deleted file mode 100644
index 4068e2b..0000000
--- a/core/tests/coretests/BstatsTestApp/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-include /BATTERY_STATS_OWNERS
diff --git a/core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/Common.java b/core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/Common.java
deleted file mode 100644
index d192fbd..0000000
--- a/core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/Common.java
+++ /dev/null
@@ -1,60 +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.coretests.apps.bstatstestapp;
-
-import com.android.frameworks.coretests.aidl.ICmdCallback;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.os.SystemClock;
-import android.util.Log;
-
-public class Common {
-    private static final String EXTRA_KEY_CMD_RECEIVER = "cmd_receiver";
-
-    public static void doSomeWork(int durationMs) {
-        final long endTime = SystemClock.currentThreadTimeMillis() + durationMs;
-        double x;
-        double y;
-        double z;
-        while (SystemClock.currentThreadTimeMillis() <= endTime) {
-            x = 0.02;
-            x *= 1000;
-            y = x % 5;
-            z = Math.sqrt(y / 100);
-        }
-    }
-
-    public static void notifyLaunched(Intent intent, IBinder binder, String tag) {
-        if (intent == null) {
-            return;
-        }
-
-        final Bundle extras = intent.getExtras();
-        if (extras == null) {
-            return;
-        }
-        final ICmdCallback callback = ICmdCallback.Stub.asInterface(
-                extras.getBinder(EXTRA_KEY_CMD_RECEIVER));
-        try {
-            callback.onLaunched(binder);
-        } catch (RemoteException e) {
-            Log.e(tag, "Error occured while notifying the test: " + e);
-        }
-    }
-}
diff --git a/core/tests/coretests/res/layout/activity_horizontal_scroll_view.xml b/core/tests/coretests/res/layout/activity_horizontal_scroll_view.xml
new file mode 100644
index 0000000..866e1a9
--- /dev/null
+++ b/core/tests/coretests/res/layout/activity_horizontal_scroll_view.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ 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
+  -->
+
+<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:id="@+id/horizontal_scroll_view">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+
+        <View
+            android:background="#F00"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#880"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#0F0"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#088"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#00F"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#808"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#F00"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#880"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#0F0"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#088"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#00F"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#808"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#F00"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#880"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#0F0"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#088"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#00F"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#808"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+    </LinearLayout>
+</HorizontalScrollView>
diff --git a/core/tests/coretests/res/layout/activity_scroll_view.xml b/core/tests/coretests/res/layout/activity_scroll_view.xml
new file mode 100644
index 0000000..61fabf8
--- /dev/null
+++ b/core/tests/coretests/res/layout/activity_scroll_view.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ 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
+  -->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:id="@+id/scroll_view">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <View
+            android:background="#F00"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#880"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#0F0"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#088"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#00F"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#808"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#F00"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#880"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#0F0"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#088"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#00F"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#808"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#F00"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#880"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#0F0"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#088"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#00F"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+        <View
+            android:background="#808"
+            android:layout_width="100dp"
+            android:layout_height="100dp" />
+
+    </LinearLayout>
+</ScrollView>
diff --git a/core/tests/coretests/res/xml/power_profile_test.xml b/core/tests/coretests/res/xml/power_profile_test.xml
index 2257114..322ae05 100644
--- a/core/tests/coretests/res/xml/power_profile_test.xml
+++ b/core/tests/coretests/res/xml/power_profile_test.xml
@@ -19,12 +19,6 @@
     <!-- This is the battery capacity in mAh -->
     <item name="battery.capacity">3000</item>
 
-    <!-- Number of cores each CPU cluster contains -->
-    <array name="cpu.clusters.cores">
-        <value>4</value> <!-- Cluster 0 has 4 cores (cpu0, cpu1, cpu2, cpu3) -->
-        <value>4</value> <!-- Cluster 1 has 4 cores (cpu4, cpu5, cpu5, cpu7) -->
-    </array>
-
     <!-- Power consumption when CPU is suspended -->
     <item name="cpu.suspend">5</item>
     <!-- Additional power consumption when CPU is in a kernel idle loop -->
@@ -32,37 +26,21 @@
     <!-- Additional power consumption by CPU excluding cluster and core when  running -->
     <item name="cpu.active">2.55</item>
 
-    <!-- Additional power consumption by CPU cluster0 itself when running excluding cores in it -->
-    <item name="cpu.cluster_power.cluster0">2.11</item>
-    <!-- Additional power consumption by CPU cluster1 itself when running excluding cores in it -->
-    <item name="cpu.cluster_power.cluster1">2.22</item>
+    <!-- Additional power consumption of CPU policy0 itself when running on related cores -->
+    <item name="cpu.scaling_policy_power.policy0">2.11</item>
+    <!-- Additional power consumption of CPU policy4 itself when running on related cores -->
+    <item name="cpu.scaling_policy_power.policy3">2.22</item>
 
-    <!-- Different CPU speeds as reported in
-         /sys/devices/system/cpu/cpu0/cpufreq/stats/scaling_available_frequencies -->
-    <array name="cpu.core_speeds.cluster0">
-        <value>300000</value> <!-- 300 MHz CPU speed -->
-        <value>1000000</value> <!-- 1000 MHz CPU speed -->
-        <value>2000000</value> <!-- 2000 MHz CPU speed -->
-    </array>
-    <!-- Different CPU speeds as reported in
-         /sys/devices/system/cpu/cpu4/cpufreq/stats/scaling_available_frequencies -->
-    <array name="cpu.core_speeds.cluster1">
-        <value>300000</value> <!-- 300 MHz CPU speed -->
-        <value>1000000</value> <!-- 1000 MHz CPU speed -->
-        <value>2500000</value> <!-- 2500 MHz CPU speed -->
-        <value>3000000</value> <!-- 3000 MHz CPU speed -->
-    </array>
-
-    <!-- Additional power used by a CPU from cluster 0 when running at different
-         speeds. Currently this measurement also includes cluster cost. -->
-    <array name="cpu.core_power.cluster0">
+    <!-- Additional power used by a CPU related to policy3 when running at different
+     speeds. -->
+    <array name="cpu.scaling_step_power.policy0">
         <value>10</value> <!-- 300 MHz CPU speed -->
         <value>20</value> <!-- 1000 MHz CPU speed -->
         <value>30</value> <!-- 1900 MHz CPU speed -->
     </array>
-    <!-- Additional power used by a CPU from cluster 1 when running at different
-         speeds. Currently this measurement also includes cluster cost. -->
-    <array name="cpu.core_power.cluster1">
+    <!-- Additional power used by a CPU related to policy3 when running at different
+         speeds. -->
+    <array name="cpu.scaling_step_power.policy3">
         <value>25</value> <!-- 300 MHz CPU speed -->
         <value>35</value> <!-- 1000 MHz CPU speed -->
         <value>50</value> <!-- 2500 MHz CPU speed -->
diff --git a/core/tests/coretests/res/xml/power_profile_test_cpu_legacy.xml b/core/tests/coretests/res/xml/power_profile_test_cpu_legacy.xml
new file mode 100644
index 0000000..bd7d712
--- /dev/null
+++ b/core/tests/coretests/res/xml/power_profile_test_cpu_legacy.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<device name="Android">
+    <!-- All values are in mAh except as noted.
+         This file is for PowerProfileTest.java. Changes must be synced between these two. Since
+         power_profile.xml may be overridden by actual device's power_profile.xml at compile time,
+         this test config ensures we have something constant to test against. Values below are
+         sample values, not meant to reflect any real device.
+    -->
+
+    <!-- This is the battery capacity in mAh -->
+    <item name="battery.capacity">3000</item>
+
+    <!-- Number of cores each CPU cluster contains -->
+    <array name="cpu.clusters.cores">
+        <value>4</value> <!-- Cluster 0 has 4 cores (cpu0, cpu1, cpu2, cpu3) -->
+        <value>4</value> <!-- Cluster 1 has 4 cores (cpu4, cpu5, cpu5, cpu7) -->
+    </array>
+
+    <!-- Power consumption when CPU is suspended -->
+    <item name="cpu.suspend">5</item>
+    <!-- Additional power consumption when CPU is in a kernel idle loop -->
+    <item name="cpu.idle">1.11</item>
+    <!-- Additional power consumption by CPU excluding cluster and core when  running -->
+    <item name="cpu.active">2.55</item>
+
+    <!-- Additional power consumption by CPU cluster0 itself when running excluding cores in it -->
+    <item name="cpu.cluster_power.cluster0">2.11</item>
+    <!-- Additional power consumption by CPU cluster1 itself when running excluding cores in it -->
+    <item name="cpu.cluster_power.cluster1">2.22</item>
+
+    <!-- Different CPU speeds as reported in
+         /sys/devices/system/cpu/cpu0/cpufreq/stats/scaling_available_frequencies -->
+    <array name="cpu.core_speeds.cluster0">
+        <value>300000</value> <!-- 300 MHz CPU speed -->
+        <value>1000000</value> <!-- 1000 MHz CPU speed -->
+        <value>2000000</value> <!-- 2000 MHz CPU speed -->
+    </array>
+    <!-- Different CPU speeds as reported in
+         /sys/devices/system/cpu/cpu4/cpufreq/stats/scaling_available_frequencies -->
+    <array name="cpu.core_speeds.cluster1">
+        <value>300000</value> <!-- 300 MHz CPU speed -->
+        <value>1000000</value> <!-- 1000 MHz CPU speed -->
+        <value>2500000</value> <!-- 2500 MHz CPU speed -->
+        <value>3000000</value> <!-- 3000 MHz CPU speed -->
+    </array>
+
+    <!-- Additional power used by a CPU from cluster 0 when running at different
+         speeds. Currently this measurement also includes cluster cost. -->
+    <array name="cpu.core_power.cluster0">
+        <value>10</value> <!-- 300 MHz CPU speed -->
+        <value>20</value> <!-- 1000 MHz CPU speed -->
+        <value>30</value> <!-- 1900 MHz CPU speed -->
+    </array>
+    <!-- Additional power used by a CPU from cluster 1 when running at different
+         speeds. Currently this measurement also includes cluster cost. -->
+    <array name="cpu.core_power.cluster1">
+        <value>25</value> <!-- 300 MHz CPU speed -->
+        <value>35</value> <!-- 1000 MHz CPU speed -->
+        <value>50</value> <!-- 2500 MHz CPU speed -->
+        <value>60</value> <!-- 3000 MHz CPU speed -->
+    </array>
+
+    <!-- Power used by display unit in ambient display mode, including back lighting-->
+    <item name="ambient.on">0.5</item>
+    <!-- Additional power used when screen is turned on at minimum brightness -->
+    <item name="screen.on">100</item>
+    <!-- Additional power used when screen is at maximum brightness, compared to
+         screen at minimum brightness -->
+    <item name="screen.full">800</item>
+
+    <!-- Average power used by the camera flash module when on -->
+    <item name="camera.flashlight">500</item>
+    <!-- Average power use by the camera subsystem for a typical camera
+         application. Intended as a rough estimate for an application running a
+         preview and capturing approximately 10 full-resolution pictures per
+         minute. -->
+    <item name="camera.avg">600</item>
+
+    <!-- Additional power used by the audio hardware, probably due to DSP -->
+    <item name="audio">100.0</item>
+
+    <!-- Additional power used by the video hardware, probably due to DSP -->
+    <item name="video">150.0</item> <!-- ~50mA -->
+
+    <!-- Additional power used when GPS is acquiring a signal -->
+    <item name="gps.on">10</item>
+
+    <!-- Additional power used when cellular radio is transmitting/receiving -->
+    <item name="radio.active">60</item>
+    <!-- Additional power used when cellular radio is paging the tower -->
+    <item name="radio.scanning">3</item>
+    <!-- Additional power used when the cellular radio is on. Multi-value entry,
+         one per signal strength (no signal, weak, moderate, strong) -->
+    <array name="radio.on"> <!-- Strength 0 to BINS-1 -->
+        <value>6</value>       <!-- none -->
+        <value>5</value>       <!-- poor -->
+        <value>4</value>       <!-- moderate -->
+        <value>3</value>       <!-- good -->
+        <value>3</value>       <!-- great -->
+    </array>
+</device>
diff --git a/core/tests/coretests/res/xml/power_profile_test_power_brackets.xml b/core/tests/coretests/res/xml/power_profile_test_power_brackets.xml
index c129388..a46c608 100644
--- a/core/tests/coretests/res/xml/power_profile_test_power_brackets.xml
+++ b/core/tests/coretests/res/xml/power_profile_test_power_brackets.xml
@@ -17,34 +17,20 @@
 
 <device name="Android">
 
-    <array name="cpu.clusters.cores">
-        <value>1</value>
-        <value>2</value>
-    </array>
-
-    <array name="cpu.core_speeds.cluster0">
-        <value>300000</value>
-    </array>
-
-    <array name="cpu.core_speeds.cluster1">
-        <value>300000</value>
-        <value>1000000</value>
-    </array>
-
-    <array name="cpu.core_power.cluster0">
+    <array name="cpu.scaling_step_power.policy0">
         <value>10</value>
     </array>
 
-    <array name="cpu.core_power.cluster1">
+    <array name="cpu.scaling_step_power.policy4">
         <value>25</value>
         <value>35</value>
     </array>
 
-    <array name="cpu.power_brackets.cluster0">
+    <array name="cpu.power_brackets.policy0">
         <value>1</value>
     </array>
 
-    <array name="cpu.power_brackets.cluster1">
+    <array name="cpu.power_brackets.policy4">
         <value>1</value>
         <value>0</value>
     </array>
diff --git a/core/tests/coretests/src/android/accessibilityservice/AccessibilityServiceTest.java b/core/tests/coretests/src/android/accessibilityservice/AccessibilityServiceTest.java
deleted file mode 100644
index 53ba140..0000000
--- a/core/tests/coretests/src/android/accessibilityservice/AccessibilityServiceTest.java
+++ /dev/null
@@ -1,226 +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 android.accessibilityservice;
-
-import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY;
-import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC;
-import static android.view.Display.DEFAULT_DISPLAY;
-import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
-import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
-
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.PixelFormat;
-import android.hardware.display.DisplayManager;
-import android.hardware.display.VirtualDisplay;
-import android.media.ImageReader;
-import android.os.Binder;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.RemoteException;
-import android.util.SparseArray;
-import android.view.Display;
-import android.view.View;
-import android.view.WindowManager;
-import android.view.WindowManagerGlobal;
-import android.view.accessibility.AccessibilityEvent;
-import android.window.WindowTokenClient;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-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;
-
-/**
- * Unit tests for AccessibilityService.
- */
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class AccessibilityServiceTest {
-    private static final String TAG = "AccessibilityServiceTest";
-    private static final int CONNECTION_ID = 1;
-    private final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(
-            TYPE_ACCESSIBILITY_OVERLAY);
-
-    private static class AccessibilityServiceTestClass extends AccessibilityService {
-        private IAccessibilityServiceClient mCallback;
-        private Looper mLooper;
-
-        AccessibilityServiceTestClass() {
-            super();
-            Context context = ApplicationProvider.getApplicationContext();
-            final Display display = context.getSystemService(DisplayManager.class)
-                    .getDisplay(DEFAULT_DISPLAY);
-
-            attachBaseContext(context.createTokenContext(new WindowTokenClient(), display));
-            mLooper = InstrumentationRegistry.getContext().getMainLooper();
-        }
-
-        public void setupCallback(IAccessibilityServiceClient callback) {
-            mCallback = callback;
-        }
-
-        public Looper getMainLooper() {
-            return mLooper;
-        }
-
-        public void onAccessibilityEvent(AccessibilityEvent event) { }
-        public void onInterrupt() { }
-
-        @Override
-        public void onSystemActionsChanged() {
-            try {
-                if (mCallback != null) mCallback.onSystemActionsChanged();
-            } catch (RemoteException e) {
-            }
-        }
-    }
-
-    private @Mock IAccessibilityServiceClient  mMockClientForCallback;
-    private @Mock IAccessibilityServiceConnection mMockConnection;
-    private @Mock IBinder mMockIBinder;
-    private IAccessibilityServiceClient mServiceInterface;
-    private AccessibilityServiceTestClass mService;
-    private final SparseArray<IBinder> mWindowTokens = new SparseArray<>();
-
-    @Before
-    public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
-        mService = new AccessibilityServiceTestClass();
-        mService.onCreate();
-        mService.setupCallback(mMockClientForCallback);
-        mServiceInterface = (IAccessibilityServiceClient) mService.onBind(new Intent());
-        mServiceInterface.init(mMockConnection, CONNECTION_ID, mMockIBinder);
-        doAnswer(invocation -> {
-            Object[] args = invocation.getArguments();
-            final int displayId = (int) args[0];
-            final IBinder token = new Binder();
-            WindowManagerGlobal.getWindowManagerService().addWindowToken(token,
-                    TYPE_ACCESSIBILITY_OVERLAY, displayId, null /* options */);
-            mWindowTokens.put(displayId, token);
-            return token;
-        }).when(mMockConnection).getOverlayWindowToken(anyInt());
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        for (int i = mWindowTokens.size() - 1; i >= 0; --i) {
-            WindowManagerGlobal.getWindowManagerService().removeWindowToken(
-                    mWindowTokens.valueAt(i), mWindowTokens.keyAt(i));
-        }
-    }
-
-    @Test
-    public void testOnSystemActionsChanged() throws RemoteException {
-        mServiceInterface.onSystemActionsChanged();
-
-        verify(mMockClientForCallback).onSystemActionsChanged();
-    }
-
-    @Test
-    public void testGetSystemActions() throws RemoteException {
-        mService.getSystemActions();
-
-        verify(mMockConnection).getSystemActions();
-    }
-
-    @Test
-    public void testAddViewWithA11yServiceDerivedDisplayContext() throws Exception {
-        try (VirtualDisplaySession session = new VirtualDisplaySession()) {
-            final Context context = mService.createDisplayContext(session.getDisplay());
-            InstrumentationRegistry.getInstrumentation().runOnMainSync(
-                    () -> context.getSystemService(WindowManager.class)
-                            .addView(new View(context), mParams)
-            );
-        }
-    }
-
-    @Test
-    public void testAddViewWithA11yServiceDerivedWindowContext() throws Exception {
-        try (VirtualDisplaySession session = new VirtualDisplaySession()) {
-            final Context context = mService.createDisplayContext(session.getDisplay())
-                    .createWindowContext(TYPE_ACCESSIBILITY_OVERLAY, null /* options */);
-            InstrumentationRegistry.getInstrumentation().runOnMainSync(
-                    () -> context.getSystemService(WindowManager.class)
-                            .addView(new View(context), mParams)
-            );
-        }
-    }
-
-    @Test
-    public void testAddViewWithA11yServiceDerivedWindowContextWithDisplay() throws Exception {
-        try (VirtualDisplaySession session = new VirtualDisplaySession()) {
-            final Context context = mService.createWindowContext(session.getDisplay(),
-                    TYPE_ACCESSIBILITY_OVERLAY, null /* options */);
-            InstrumentationRegistry.getInstrumentation().runOnMainSync(
-                    () -> context.getSystemService(WindowManager.class)
-                            .addView(new View(context), mParams)
-            );
-        }
-    }
-
-    @Test(expected = WindowManager.BadTokenException.class)
-    public void testAddViewWithA11yServiceDerivedWindowContextWithDifferentType()
-            throws Exception {
-        try (VirtualDisplaySession session = new VirtualDisplaySession()) {
-            final Context context = mService.createWindowContext(session.getDisplay(),
-                    TYPE_APPLICATION_OVERLAY, null /* options */);
-            InstrumentationRegistry.getInstrumentation().runOnMainSync(
-                    () -> context.getSystemService(WindowManager.class)
-                            .addView(new View(context), mParams)
-            );
-        }
-    }
-
-
-    private static class VirtualDisplaySession implements AutoCloseable {
-        private final VirtualDisplay mVirtualDisplay;
-
-        VirtualDisplaySession() {
-            final DisplayManager displayManager = ApplicationProvider.getApplicationContext()
-                    .getSystemService(DisplayManager.class);
-            final int width = 800;
-            final int height = 480;
-            final int density = 160;
-            ImageReader reader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888,
-                    2 /* maxImages */);
-            mVirtualDisplay = displayManager.createVirtualDisplay(
-                    TAG, width, height, density, reader.getSurface(),
-                    VIRTUAL_DISPLAY_FLAG_PUBLIC | VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY);
-        }
-
-        private Display getDisplay() {
-            return mVirtualDisplay.getDisplay();
-        }
-
-        @Override
-        public void close() throws Exception {
-            mVirtualDisplay.release();
-        }
-    }
-}
diff --git a/core/tests/coretests/src/android/accessibilityservice/TEST_MAPPING b/core/tests/coretests/src/android/accessibilityservice/TEST_MAPPING
new file mode 100644
index 0000000..1c67399
--- /dev/null
+++ b/core/tests/coretests/src/android/accessibilityservice/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+  "imports": [
+    {
+      "path": "frameworks/base/services/accessibility/TEST_MAPPING"
+    }
+  ]
+}
diff --git a/core/tests/coretests/src/android/app/DownloadManagerBaseTest.java b/core/tests/coretests/src/android/app/DownloadManagerBaseTest.java
index cb66fc8..c62c471 100644
--- a/core/tests/coretests/src/android/app/DownloadManagerBaseTest.java
+++ b/core/tests/coretests/src/android/app/DownloadManagerBaseTest.java
@@ -33,10 +33,11 @@
 import android.os.SystemClock;
 import android.os.UserHandle;
 import android.provider.Settings;
-import android.support.test.uiautomator.UiDevice;
 import android.test.InstrumentationTestCase;
 import android.util.Log;
 
+import androidx.test.uiautomator.UiDevice;
+
 import com.google.mockwebserver.MockResponse;
 import com.google.mockwebserver.MockWebServer;
 
diff --git a/core/tests/coretests/src/android/app/KeyguardManagerTest.java b/core/tests/coretests/src/android/app/KeyguardManagerTest.java
index 958906c..ed8b288 100644
--- a/core/tests/coretests/src/android/app/KeyguardManagerTest.java
+++ b/core/tests/coretests/src/android/app/KeyguardManagerTest.java
@@ -174,6 +174,22 @@
     }
 
     @Test
+    public void setLock_validatesCredential() {
+        // setLock() should validate the credential before setting it.  Test one example, which is
+        // that PINs must contain only ASCII digits 0-9, i.e. bytes 48-57.  Using bytes 0-9 is
+        // incorrect and should *not* be accepted.
+        byte[] invalidPin = new byte[] { 1, 2, 3, 4 };
+        byte[] validPin = "1234".getBytes();
+
+        assertFalse(mKeyguardManager.setLock(KeyguardManager.PIN, invalidPin, -1, null));
+        assertFalse(mKeyguardManager.isDeviceSecure());
+
+        assertTrue(mKeyguardManager.setLock(KeyguardManager.PIN, validPin, -1, null));
+        assertTrue(mKeyguardManager.isDeviceSecure());
+        assertTrue(mKeyguardManager.setLock(-1, null, KeyguardManager.PIN, validPin));
+    }
+
+    @Test
     public void checkLock_correctCredentials() {
         // Set to `true` to behave as if SET_INITIAL_LOCK permission had been granted.
         doReturn(true).when(mKeyguardManager).checkInitialLockMethodUsage();
diff --git a/core/tests/coretests/src/android/app/NotificationChannelTest.java b/core/tests/coretests/src/android/app/NotificationChannelTest.java
index 647bfe8..d8305f0 100644
--- a/core/tests/coretests/src/android/app/NotificationChannelTest.java
+++ b/core/tests/coretests/src/android/app/NotificationChannelTest.java
@@ -16,19 +16,52 @@
 
 package android.app;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import static junit.framework.TestCase.assertEquals;
 
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.content.AttributionSource;
+import android.content.ContentProvider;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.IContentProvider;
+import android.content.pm.ApplicationInfo;
+import android.database.MatrixCursor;
+import android.media.AudioAttributes;
 import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Bundle;
 import android.os.Parcel;
+import android.os.RemoteCallback;
+import android.os.RemoteException;
+import android.provider.MediaStore.Audio.AudioColumns;
+import android.test.mock.MockContentResolver;
+import android.util.Xml;
 
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.modules.utils.TypedXmlPullParser;
+import com.android.modules.utils.TypedXmlSerializer;
+
 import com.google.common.base.Strings;
 
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.lang.reflect.Field;
 
 @RunWith(AndroidJUnit4.class)
@@ -36,6 +69,88 @@
 public class NotificationChannelTest {
     private final String CLASS = "android.app.NotificationChannel";
 
+    Context mContext;
+    ContentProvider mContentProvider;
+    IContentProvider mIContentProvider;
+
+    @Before
+    public void setUp() throws Exception {
+        mContext = mock(Context.class);
+        when(mContext.getApplicationInfo()).thenReturn(new ApplicationInfo());
+        MockContentResolver mContentResolver = new MockContentResolver(mContext);
+        when(mContext.getContentResolver()).thenReturn(mContentResolver);
+        mContentProvider = mock(ContentProvider.class);
+        mIContentProvider = mock(IContentProvider.class);
+        when(mContentProvider.getIContentProvider()).thenReturn(mIContentProvider);
+        doAnswer(
+                invocation -> {
+                        AttributionSource attributionSource = invocation.getArgument(0);
+                        Uri uri = invocation.getArgument(1);
+                        RemoteCallback cb = invocation.getArgument(2);
+                        IContentProvider mock = (IContentProvider) (invocation.getMock());
+                        AsyncTask.SERIAL_EXECUTOR.execute(
+                                () -> {
+                                final Bundle bundle = new Bundle();
+                                try {
+                                        bundle.putParcelable(
+                                                ContentResolver.REMOTE_CALLBACK_RESULT,
+                                                mock.canonicalize(attributionSource, uri));
+                                } catch (RemoteException e) {
+                                        /* consume */
+                                }
+                                cb.sendResult(bundle);
+                                });
+                        return null;
+                })
+            .when(mIContentProvider)
+            .canonicalizeAsync(any(), any(), any());
+        doAnswer(
+                invocation -> {
+                        AttributionSource attributionSource = invocation.getArgument(0);
+                        Uri uri = invocation.getArgument(1);
+                        RemoteCallback cb = invocation.getArgument(2);
+                        IContentProvider mock = (IContentProvider) (invocation.getMock());
+                        AsyncTask.SERIAL_EXECUTOR.execute(
+                                () -> {
+                                final Bundle bundle = new Bundle();
+                                try {
+                                        bundle.putParcelable(
+                                                ContentResolver.REMOTE_CALLBACK_RESULT,
+                                                mock.uncanonicalize(attributionSource, uri));
+                                } catch (RemoteException e) {
+                                        /* consume */
+                                }
+                                cb.sendResult(bundle);
+                                });
+                        return null;
+                })
+            .when(mIContentProvider)
+            .uncanonicalizeAsync(any(), any(), any());
+        doAnswer(
+                invocation -> {
+                        Uri uri = invocation.getArgument(0);
+                        RemoteCallback cb = invocation.getArgument(1);
+                        IContentProvider mock = (IContentProvider) (invocation.getMock());
+                        AsyncTask.SERIAL_EXECUTOR.execute(
+                                () -> {
+                                final Bundle bundle = new Bundle();
+                                try {
+                                        bundle.putString(
+                                                ContentResolver.REMOTE_CALLBACK_RESULT,
+                                                mock.getType(uri));
+                                } catch (RemoteException e) {
+                                        /* consume */
+                                }
+                                cb.sendResult(bundle);
+                                });
+                        return null;
+                })
+            .when(mIContentProvider)
+            .getTypeAsync(any(), any());
+
+        mContentResolver.addProvider("media", mContentProvider);
+    }
+
     @Test
     public void testLongStringFields() {
         NotificationChannel channel = new NotificationChannel("id", "name", 3);
@@ -103,4 +218,139 @@
         assertEquals(NotificationChannel.MAX_TEXT_LENGTH,
                 fromParcel.getSound().toString().length());
     }
+
+    @Test
+    public void testRestoreSoundUri_customLookup() throws Exception {
+        Uri uriToBeRestoredUncanonicalized = Uri.parse("content://media/1");
+        Uri uriToBeRestoredCanonicalized = Uri.parse("content://media/1?title=Song&canonical=1");
+        Uri uriAfterRestoredUncanonicalized = Uri.parse("content://media/100");
+        Uri uriAfterRestoredCanonicalized = Uri.parse("content://media/100?title=Song&canonical=1");
+
+        NotificationChannel channel = new NotificationChannel("id", "name", 3);
+
+        MatrixCursor cursor = new MatrixCursor(new String[] {"_id"});
+        cursor.addRow(new Object[] {100L});
+
+        when(mIContentProvider.canonicalize(any(), eq(uriToBeRestoredUncanonicalized)))
+                .thenReturn(uriToBeRestoredCanonicalized);
+
+        // Mock the failure of regular uncanonicalize.
+        when(mIContentProvider.uncanonicalize(any(), eq(uriToBeRestoredCanonicalized)))
+                .thenReturn(null);
+
+        // Mock the custom lookup in RingtoneManager.getRingtoneUriForRestore.
+        when(mIContentProvider.query(any(), any(), any(), any(), any())).thenReturn(cursor);
+
+        // Mock the canonicalize in RingtoneManager.getRingtoneUriForRestore.
+        when(mIContentProvider.canonicalize(any(), eq(uriAfterRestoredUncanonicalized)))
+                .thenReturn(uriAfterRestoredCanonicalized);
+
+        assertThat(
+                        channel.restoreSoundUri(
+                                mContext,
+                                uriToBeRestoredUncanonicalized,
+                                true,
+                                AudioAttributes.USAGE_NOTIFICATION))
+                .isEqualTo(uriAfterRestoredCanonicalized);
+    }
+
+    @Test
+    public void testWriteXmlForBackup_customLookup_notificationUsage() throws Exception {
+        testWriteXmlForBackup_customLookup(
+                AudioAttributes.USAGE_NOTIFICATION, AudioColumns.IS_NOTIFICATION);
+    }
+
+    @Test
+    public void testWriteXmlForBackup_customLookup_alarmUsage() throws Exception {
+        testWriteXmlForBackup_customLookup(AudioAttributes.USAGE_ALARM, AudioColumns.IS_ALARM);
+    }
+
+    @Test
+    public void testWriteXmlForBackup_customLookup_ringtoneUsage() throws Exception {
+        testWriteXmlForBackup_customLookup(
+                AudioAttributes.USAGE_NOTIFICATION_RINGTONE, AudioColumns.IS_RINGTONE);
+    }
+
+    @Test
+    public void testWriteXmlForBackup_customLookup_unknownUsage() throws Exception {
+        testWriteXmlForBackup_customLookup(
+                AudioAttributes.USAGE_UNKNOWN, AudioColumns.IS_NOTIFICATION);
+    }
+
+    private void testWriteXmlForBackup_customLookup(int usage, String customQuerySelection)
+            throws Exception {
+        Uri uriToBeRestoredUncanonicalized = Uri.parse("content://media/1");
+        Uri uriToBeRestoredCanonicalized = Uri.parse("content://media/1?title=Song&canonical=1");
+        Uri uriAfterRestoredUncanonicalized = Uri.parse("content://media/100");
+        Uri uriAfterRestoredCanonicalized = Uri.parse("content://media/100?title=Song&canonical=1");
+
+        AudioAttributes mAudioAttributes =
+                new AudioAttributes.Builder()
+                        .setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN)
+                        .setUsage(usage)
+                        .setFlags(AudioAttributes.FLAG_AUDIBILITY_ENFORCED)
+                        .build();
+
+        NotificationChannel channel = new NotificationChannel("id", "name", 3);
+        channel.setSound(uriToBeRestoredCanonicalized, mAudioAttributes);
+
+        TypedXmlSerializer serializer = Xml.newFastSerializer();
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        serializer.setOutput(new BufferedOutputStream(baos), "utf-8");
+        serializer.startDocument(null, true);
+
+        // mock the canonicalize in writeXmlForBackup -> getSoundForBackup
+        when(mIContentProvider.canonicalize(any(), eq(uriToBeRestoredUncanonicalized)))
+                .thenReturn(uriToBeRestoredCanonicalized);
+        when(mIContentProvider.canonicalize(any(), eq(uriToBeRestoredCanonicalized)))
+                .thenReturn(uriToBeRestoredCanonicalized);
+
+        channel.writeXmlForBackup(serializer, mContext);
+        serializer.endDocument();
+        serializer.flush();
+
+        TypedXmlPullParser parser = Xml.newFastPullParser();
+        byte[] byteArray = baos.toByteArray();
+        parser.setInput(new BufferedInputStream(new ByteArrayInputStream(byteArray)), null);
+        parser.nextTag();
+
+        NotificationChannel targetChannel = new NotificationChannel("id", "name", 3);
+
+        MatrixCursor cursor = new MatrixCursor(new String[] {"_id"});
+        cursor.addRow(new Object[] {100L});
+
+        when(mIContentProvider.canonicalize(any(), eq(uriToBeRestoredCanonicalized)))
+                .thenReturn(uriToBeRestoredCanonicalized);
+
+        // Mock the failure of regular uncanonicalize.
+        when(mIContentProvider.uncanonicalize(any(), eq(uriToBeRestoredCanonicalized)))
+                .thenReturn(null);
+
+        Bundle expectedBundle =
+                ContentResolver.createSqlQueryBundle(
+                        customQuerySelection + "=1 AND title=?", new String[] {"Song"}, null);
+
+        // Mock the custom lookup in RingtoneManager.getRingtoneUriForRestore.
+        when(mIContentProvider.query(
+                        any(),
+                        any(),
+                        any(),
+                        // any(),
+                        argThat(
+                                queryBundle -> {
+                                    return queryBundle != null
+                                            && expectedBundle
+                                                    .toString()
+                                                    .equals(queryBundle.toString());
+                                }),
+                        any()))
+                .thenReturn(cursor);
+
+        // Mock the canonicalize in RingtoneManager.getRingtoneUriForRestore.
+        when(mIContentProvider.canonicalize(any(), eq(uriAfterRestoredUncanonicalized)))
+                .thenReturn(uriAfterRestoredCanonicalized);
+
+        targetChannel.populateFromXmlForRestore(parser, true, mContext);
+        assertThat(targetChannel.getSound()).isEqualTo(uriAfterRestoredCanonicalized);
+    }
 }
diff --git a/core/tests/coretests/src/android/app/NotificationTest.java b/core/tests/coretests/src/android/app/NotificationTest.java
index 7c69e65..a936cea 100644
--- a/core/tests/coretests/src/android/app/NotificationTest.java
+++ b/core/tests/coretests/src/android/app/NotificationTest.java
@@ -985,6 +985,27 @@
         // no crash, good
     }
 
+    @Test
+    public void testToBundle_getMessageFromBundle_returnsSameData() {
+        Notification.MessagingStyle.Message message =
+                new Notification.MessagingStyle.Message(
+                        "a", 100, new Person.Builder().setName("hi").build());
+        message.setData("text", Uri.parse("http://test/uri"));
+
+        Notification.MessagingStyle.Message convertedMessage =
+                Notification.MessagingStyle.Message.getMessageFromBundle(message.toBundle());
+
+        assertThat(convertedMessage).isNotNull();
+        assertThat(message.getText()).isEqualTo(convertedMessage.getText());
+        assertThat(message.getTimestamp()).isEqualTo(convertedMessage.getTimestamp());
+        assertThat(message.getExtras().size()).isEqualTo(convertedMessage.getExtras().size());
+        assertThat(message.getSender()).isEqualTo(convertedMessage.getSender());
+        assertThat(message.getSenderPerson()).isEqualTo(convertedMessage.getSenderPerson());
+        assertThat(message.getDataMimeType()).isEqualTo(convertedMessage.getDataMimeType());
+        assertThat(message.getDataUri()).isEqualTo(convertedMessage.getDataUri());
+        assertThat(message.isRemoteInputHistory())
+                .isEqualTo(convertedMessage.isRemoteInputHistory());
+    }
 
     @Test
     public void testDoesNotStripsExtenders() {
diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
index 4857741..c904d96 100644
--- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
+++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
@@ -21,6 +21,7 @@
 import static android.content.Intent.ACTION_VIEW;
 import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
 import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
+import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.Display.INVALID_DISPLAY;
 
 import static com.google.common.truth.Truth.assertThat;
@@ -29,6 +30,8 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
 
 import android.annotation.Nullable;
 import android.app.Activity;
@@ -61,6 +64,8 @@
 import android.util.MergedConfiguration;
 import android.view.Display;
 import android.view.View;
+import android.window.WindowContextInfo;
+import android.window.WindowTokenClientController;
 
 import androidx.test.filters.MediumTest;
 import androidx.test.platform.app.InstrumentationRegistry;
@@ -70,6 +75,7 @@
 import com.android.internal.content.ReferrerIntent;
 
 import org.junit.After;
+import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -83,7 +89,7 @@
 /**
  * Test for verifying {@link android.app.ActivityThread} class.
  * Build/Install/Run:
- *  atest FrameworksCoreTests:android.app.activity.ActivityThreadTest
+ *  atest FrameworksCoreTests:ActivityThreadTest
  */
 @RunWith(AndroidJUnit4.class)
 @MediumTest
@@ -100,14 +106,29 @@
             new ActivityTestRule<>(TestActivity.class, true /* initialTouchMode */,
                     false /* launchActivity */);
 
+    private WindowTokenClientController mOriginalWindowTokenClientController;
+    private Configuration mOriginalAppConfig;
+
     private ArrayList<VirtualDisplay> mCreatedVirtualDisplays;
 
+    @Before
+    public void setup() {
+        // Keep track of the original controller, so that it can be used to restore in tearDown()
+        // when there is override in some test cases.
+        mOriginalWindowTokenClientController = WindowTokenClientController.getInstance();
+        mOriginalAppConfig = new Configuration(ActivityThread.currentActivityThread()
+                .getConfiguration());
+    }
+
     @After
     public void tearDown() {
         if (mCreatedVirtualDisplays != null) {
             mCreatedVirtualDisplays.forEach(VirtualDisplay::release);
             mCreatedVirtualDisplays = null;
         }
+        WindowTokenClientController.overrideForTesting(mOriginalWindowTokenClientController);
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(
+                () -> restoreConfig(ActivityThread.currentActivityThread(), mOriginalAppConfig));
     }
 
     @Test
@@ -549,16 +570,10 @@
             activityThread.updatePendingConfiguration(newAppConfig);
             activityThread.handleConfigurationChanged(newAppConfig, DEVICE_ID_INVALID);
 
-            try {
-                assertEquals("Virtual display orientation must not change when process"
-                                + " configuration orientation changes.",
-                        originalVirtualDisplayOrientation,
-                        virtualDisplayContext.getResources().getConfiguration().orientation);
-            } finally {
-                // Make sure to reset the process config to prevent side effects to other
-                // tests.
-                restoreConfig(activityThread, originalAppConfig);
-            }
+            assertEquals("Virtual display orientation must not change when process"
+                            + " configuration orientation changes.",
+                    originalVirtualDisplayOrientation,
+                    virtualDisplayContext.getResources().getConfiguration().orientation);
         });
     }
 
@@ -730,6 +745,38 @@
         assertFalse(activity.enterPipSkipped());
     }
 
+    @Test
+    public void testHandleWindowContextConfigurationChanged() {
+        final Activity activity = mActivityTestRule.launchActivity(new Intent());
+        final ActivityThread activityThread = activity.getActivityThread();
+        final WindowTokenClientController windowTokenClientController =
+                mock(WindowTokenClientController.class);
+        WindowTokenClientController.overrideForTesting(windowTokenClientController);
+        final IBinder clientToken = mock(IBinder.class);
+        final Configuration configuration = new Configuration();
+        final WindowContextInfo info = new WindowContextInfo(configuration, DEFAULT_DISPLAY);
+
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> activityThread
+                .handleWindowContextInfoChanged(clientToken, info));
+
+        verify(windowTokenClientController).onWindowContextInfoChanged(clientToken, info);
+    }
+
+    @Test
+    public void testHandleWindowContextWindowRemoval() {
+        final Activity activity = mActivityTestRule.launchActivity(new Intent());
+        final ActivityThread activityThread = activity.getActivityThread();
+        final WindowTokenClientController windowTokenClientController =
+                mock(WindowTokenClientController.class);
+        WindowTokenClientController.overrideForTesting(windowTokenClientController);
+        final IBinder clientToken = mock(IBinder.class);
+
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> activityThread
+                .handleWindowContextWindowRemoval(clientToken));
+
+        verify(windowTokenClientController).onWindowContextWindowRemoved(clientToken);
+    }
+
     /**
      * Calls {@link ActivityThread#handleActivityConfigurationChanged(ActivityClientRecord,
      * Configuration, int)} to try to push activity configuration to the activity for the given
diff --git a/core/tests/coretests/src/android/app/admin/PasswordMetricsTest.java b/core/tests/coretests/src/android/app/admin/PasswordMetricsTest.java
index c9e02f8..33e81c1 100644
--- a/core/tests/coretests/src/android/app/admin/PasswordMetricsTest.java
+++ b/core/tests/coretests/src/android/app/admin/PasswordMetricsTest.java
@@ -25,6 +25,7 @@
 import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
 import static android.app.admin.PasswordMetrics.complexityLevelToMinQuality;
 import static android.app.admin.PasswordMetrics.sanitizeComplexityLevel;
+import static android.app.admin.PasswordMetrics.validateCredential;
 import static android.app.admin.PasswordMetrics.validatePasswordMetrics;
 
 import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
@@ -41,6 +42,8 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
+import com.android.internal.widget.LockPatternUtils;
+import com.android.internal.widget.LockscreenCredential;
 import com.android.internal.widget.PasswordValidationError;
 
 import org.junit.Test;
@@ -94,8 +97,7 @@
 
     @Test
     public void testComputeForPassword_metrics() {
-        final PasswordMetrics metrics = PasswordMetrics.computeForPasswordOrPin(
-                "6B~0z1Z3*8A".getBytes(), /* isPin */ false);
+        final PasswordMetrics metrics = metricsForPassword("6B~0z1Z3*8A");
         assertEquals(11, metrics.length);
         assertEquals(4, metrics.letters);
         assertEquals(3, metrics.upperCase);
@@ -133,72 +135,54 @@
 
     @Test
     public void testDetermineComplexity_lowNumeric() {
-        assertEquals(PASSWORD_COMPLEXITY_LOW,
-                PasswordMetrics.computeForPasswordOrPin("1234".getBytes(),
-                        /* isPin */true).determineComplexity());
+        assertEquals(PASSWORD_COMPLEXITY_LOW, metricsForPin("1234").determineComplexity());
     }
 
     @Test
     public void testDetermineComplexity_lowNumericComplex() {
-        assertEquals(PASSWORD_COMPLEXITY_LOW,
-                PasswordMetrics.computeForPasswordOrPin("124".getBytes(),
-                        /* isPin */ true).determineComplexity());
+        assertEquals(PASSWORD_COMPLEXITY_LOW, metricsForPin("124").determineComplexity());
     }
 
     @Test
     public void testDetermineComplexity_lowAlphabetic() {
-        assertEquals(PASSWORD_COMPLEXITY_LOW,
-                PasswordMetrics.computeForPasswordOrPin("a!".getBytes(),
-                        /* isPin */ false).determineComplexity());
+        assertEquals(PASSWORD_COMPLEXITY_LOW, metricsForPassword("a!").determineComplexity());
     }
 
     @Test
     public void testDetermineComplexity_lowAlphanumeric() {
-        assertEquals(PASSWORD_COMPLEXITY_LOW,
-                PasswordMetrics.computeForPasswordOrPin("a!1".getBytes(),
-                        /* isPin */ false).determineComplexity());
+        assertEquals(PASSWORD_COMPLEXITY_LOW, metricsForPassword("a!1").determineComplexity());
     }
 
     @Test
     public void testDetermineComplexity_mediumNumericComplex() {
-        assertEquals(PASSWORD_COMPLEXITY_MEDIUM,
-                PasswordMetrics.computeForPasswordOrPin("1238".getBytes(),
-                        /* isPin */ true).determineComplexity());
+        assertEquals(PASSWORD_COMPLEXITY_MEDIUM, metricsForPin("1238").determineComplexity());
     }
 
     @Test
     public void testDetermineComplexity_mediumAlphabetic() {
-        assertEquals(PASSWORD_COMPLEXITY_MEDIUM,
-                PasswordMetrics.computeForPasswordOrPin("ab!c".getBytes(),
-                        /* isPin */ false).determineComplexity());
+        assertEquals(PASSWORD_COMPLEXITY_MEDIUM, metricsForPassword("ab!c").determineComplexity());
     }
 
     @Test
     public void testDetermineComplexity_mediumAlphanumeric() {
-        assertEquals(PASSWORD_COMPLEXITY_MEDIUM,
-                PasswordMetrics.computeForPasswordOrPin("ab!1".getBytes(),
-                        /* isPin */ false).determineComplexity());
+        assertEquals(PASSWORD_COMPLEXITY_MEDIUM, metricsForPassword("ab!1").determineComplexity());
     }
 
     @Test
     public void testDetermineComplexity_highNumericComplex() {
-        assertEquals(PASSWORD_COMPLEXITY_HIGH,
-                PasswordMetrics.computeForPasswordOrPin("12389647!".getBytes(),
-                        /* isPin */ true).determineComplexity());
+        assertEquals(PASSWORD_COMPLEXITY_HIGH, metricsForPin("12389647!").determineComplexity());
     }
 
     @Test
     public void testDetermineComplexity_highAlphabetic() {
         assertEquals(PASSWORD_COMPLEXITY_HIGH,
-                PasswordMetrics.computeForPasswordOrPin("alphabetic!".getBytes(),
-                        /* isPin */ false).determineComplexity());
+                metricsForPassword("alphabetic!").determineComplexity());
     }
 
     @Test
     public void testDetermineComplexity_highAlphanumeric() {
         assertEquals(PASSWORD_COMPLEXITY_HIGH,
-                PasswordMetrics.computeForPasswordOrPin("alphanumeric123!".getBytes(),
-                        /* isPin */ false).determineComplexity());
+                metricsForPassword("alphanumeric123!").determineComplexity());
     }
 
     @Test
@@ -374,8 +358,74 @@
                 PasswordValidationError.NOT_ENOUGH_NON_DIGITS, 1);
     }
 
+    @Test
+    public void testValidateCredential_none() {
+        PasswordMetrics adminMetrics;
+        LockscreenCredential none = LockscreenCredential.createNone();
+
+        adminMetrics = new PasswordMetrics(CREDENTIAL_TYPE_NONE);
+        assertValidationErrors(
+                validateCredential(adminMetrics, PASSWORD_COMPLEXITY_NONE, none));
+
+        adminMetrics = new PasswordMetrics(CREDENTIAL_TYPE_PIN);
+        assertValidationErrors(
+                validateCredential(adminMetrics, PASSWORD_COMPLEXITY_NONE, none),
+                PasswordValidationError.WEAK_CREDENTIAL_TYPE, 0);
+    }
+
+    @Test
+    public void testValidateCredential_password() {
+        PasswordMetrics adminMetrics;
+        LockscreenCredential password;
+
+        adminMetrics = new PasswordMetrics(CREDENTIAL_TYPE_NONE);
+        password = LockscreenCredential.createPassword("password");
+        assertValidationErrors(
+                validateCredential(adminMetrics, PASSWORD_COMPLEXITY_LOW, password));
+
+        // Test that validateCredential() checks LockscreenCredential#hasInvalidChars().
+        adminMetrics = new PasswordMetrics(CREDENTIAL_TYPE_NONE);
+        password = LockscreenCredential.createPassword("™™™™");
+        assertTrue(password.hasInvalidChars());
+        assertValidationErrors(
+                validateCredential(adminMetrics, PASSWORD_COMPLEXITY_LOW, password),
+                PasswordValidationError.CONTAINS_INVALID_CHARACTERS, 0);
+
+        // Test one more case where validateCredential() should reject the password.  Beyond this,
+        // the unit tests for the lower-level method validatePasswordMetrics() should be sufficient.
+        adminMetrics = new PasswordMetrics(CREDENTIAL_TYPE_NONE);
+        adminMetrics.length = 6;
+        password = LockscreenCredential.createPassword("pass");
+        assertValidationErrors(
+                validateCredential(adminMetrics, PASSWORD_COMPLEXITY_LOW, password),
+                PasswordValidationError.TOO_SHORT, 6);
+    }
+
+    private LockscreenCredential createPattern(String patternString) {
+        return LockscreenCredential.createPattern(LockPatternUtils.byteArrayToPattern(
+                patternString.getBytes()));
+    }
+
+    private static PasswordMetrics metricsForPassword(String password) {
+        return PasswordMetrics.computeForCredential(LockscreenCredential.createPassword(password));
+    }
+
+    private static PasswordMetrics metricsForPin(String pin) {
+        return PasswordMetrics.computeForCredential(LockscreenCredential.createPin(pin));
+    }
+
+    @Test
+    public void testValidateCredential_pattern() {
+        PasswordMetrics adminMetrics = new PasswordMetrics(CREDENTIAL_TYPE_NONE);
+        assertValidationErrors(
+                validateCredential(adminMetrics, PASSWORD_COMPLEXITY_NONE, createPattern("123")),
+                PasswordValidationError.TOO_SHORT, 4);
+        assertValidationErrors(
+                validateCredential(adminMetrics, PASSWORD_COMPLEXITY_NONE, createPattern("1234")));
+    }
+
     /**
-     * @param expected sequense of validation error codes followed by requirement values, must have
+     * @param expected sequence of validation error codes followed by requirement values, must have
      *                 even number of elements. Empty means no errors.
      */
     private void assertValidationErrors(
diff --git a/core/tests/coretests/src/android/app/backup/BackupManagerTest.java b/core/tests/coretests/src/android/app/backup/BackupManagerTest.java
index 27ee82e..567ca01 100644
--- a/core/tests/coretests/src/android/app/backup/BackupManagerTest.java
+++ b/core/tests/coretests/src/android/app/backup/BackupManagerTest.java
@@ -19,11 +19,14 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.junit.Assert.assertThrows;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.app.backup.BackupAnnotations.BackupDestination;
 import android.app.backup.BackupAnnotations.OperationType;
 import android.content.Context;
 import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
 import android.os.UserHandle;
 import android.platform.test.annotations.Presubmit;
 
@@ -31,7 +34,6 @@
 
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.function.ThrowingRunnable;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
@@ -43,14 +45,28 @@
 public class BackupManagerTest {
     private BackupManager mBackupManager;
 
+    private static final int USER_ID = 12;
+
     @Mock
     Context mContext;
+    @Mock
+    IBackupManager mIBackupManager;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
         mBackupManager = new BackupManager(mContext);
+        BackupManager.sService = mIBackupManager;
+    }
+
+    @Test
+    public void testSetFrameworkSchedulingEnabled_delegatesToService() throws RemoteException {
+        when(mContext.getUserId()).thenReturn(USER_ID);
+        mBackupManager.setFrameworkSchedulingEnabled(true);
+
+        verify(mIBackupManager).setFrameworkSchedulingEnabledForUser(
+                USER_ID, /* isEnabled= */true);
     }
 
     @Test
diff --git a/core/tests/coretests/src/android/app/servertransaction/WindowContextInfoChangeItemTest.java b/core/tests/coretests/src/android/app/servertransaction/WindowContextInfoChangeItemTest.java
new file mode 100644
index 0000000..37a517e
--- /dev/null
+++ b/core/tests/coretests/src/android/app/servertransaction/WindowContextInfoChangeItemTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app.servertransaction;
+
+import static android.view.Display.DEFAULT_DISPLAY;
+
+import static org.mockito.Mockito.verify;
+
+import android.app.ClientTransactionHandler;
+import android.content.res.Configuration;
+import android.os.IBinder;
+import android.window.WindowContextInfo;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Tests for {@link WindowContextInfoChangeItem}.
+ *
+ * Build/Install/Run:
+ *  atest FrameworksCoreTests:WindowContextInfoChangeItemTest
+ */
+public class WindowContextInfoChangeItemTest {
+
+    @Mock
+    private ClientTransactionHandler mHandler;
+    @Mock
+    private IBinder mToken;
+    @Mock
+    private PendingTransactionActions mPendingActions;
+    @Mock
+    private IBinder mClientToken;
+    // Can't mock final class.
+    private final Configuration mConfiguration = new Configuration();
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void testExecute() {
+        final WindowContextInfoChangeItem item = WindowContextInfoChangeItem
+                .obtain(mClientToken, mConfiguration, DEFAULT_DISPLAY);
+        item.execute(mHandler, mToken, mPendingActions);
+
+        verify(mHandler).handleWindowContextInfoChanged(mClientToken,
+                new WindowContextInfo(mConfiguration, DEFAULT_DISPLAY));
+    }
+}
diff --git a/core/tests/coretests/src/android/app/servertransaction/WindowContextWindowRemovalItemTest.java b/core/tests/coretests/src/android/app/servertransaction/WindowContextWindowRemovalItemTest.java
new file mode 100644
index 0000000..2c83c70
--- /dev/null
+++ b/core/tests/coretests/src/android/app/servertransaction/WindowContextWindowRemovalItemTest.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app.servertransaction;
+
+import static org.mockito.Mockito.verify;
+
+import android.app.ClientTransactionHandler;
+import android.os.IBinder;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Tests for {@link WindowContextWindowRemovalItem}.
+ *
+ * Build/Install/Run:
+ *  atest FrameworksCoreTests:WindowContextWindowRemovalItemTest
+ */
+public class WindowContextWindowRemovalItemTest {
+
+    @Mock
+    private ClientTransactionHandler mHandler;
+    @Mock
+    private IBinder mToken;
+    @Mock
+    private PendingTransactionActions mPendingActions;
+    @Mock
+    private IBinder mClientToken;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void testExecute() {
+        final WindowContextWindowRemovalItem item = WindowContextWindowRemovalItem.obtain(
+                mClientToken);
+        item.execute(mHandler, mToken, mPendingActions);
+
+        verify(mHandler).handleWindowContextWindowRemoval(mClientToken);
+    }
+}
diff --git a/core/tests/coretests/src/android/app/usage/UsageStatsTest.java b/core/tests/coretests/src/android/app/usage/UsageStatsTest.java
index 858bbd2..f728080 100644
--- a/core/tests/coretests/src/android/app/usage/UsageStatsTest.java
+++ b/core/tests/coretests/src/android/app/usage/UsageStatsTest.java
@@ -36,11 +36,11 @@
 import android.app.usage.UsageEvents.Event;
 import android.os.Parcel;
 import android.os.UserHandle;
-import android.support.test.uiautomator.UiDevice;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
+import androidx.test.uiautomator.UiDevice;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/core/tests/coretests/src/android/database/DatabaseErrorHandlerTest.java b/core/tests/coretests/src/android/database/DatabaseErrorHandlerTest.java
index 91c7687..9677584 100644
--- a/core/tests/coretests/src/android/database/DatabaseErrorHandlerTest.java
+++ b/core/tests/coretests/src/android/database/DatabaseErrorHandlerTest.java
@@ -19,10 +19,13 @@
 import android.content.Context;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteDiskIOException;
+import android.database.sqlite.SQLiteDatabaseCorruptException;
+
 import android.database.sqlite.SQLiteException;
 import android.test.AndroidTestCase;
 import android.util.Log;
 
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
@@ -61,7 +64,6 @@
         assertTrue(mDatabaseFile.exists());
     }
 
-
     public void testDatabaseIsCorrupt() throws IOException {
         mDatabase.execSQL("create table t (i int);");
         // write junk into the database file
@@ -70,30 +72,23 @@
         writer.close();
         assertTrue(mDatabaseFile.exists());
         // since the database file is now corrupt, doing any sql on this database connection
-        // should trigger call to MyDatabaseCorruptionHandler.onCorruption
+        // should trigger call to MyDatabaseCorruptionHandler.onCorruption.  A corruption
+        // exception will also be throws.  This seems redundant.
         try {
             mDatabase.execSQL("select * from t;");
             fail("expected exception");
-        } catch (SQLiteDiskIOException e) {
-            /**
-             * this test used to produce a corrupted db. but with new sqlite it instead reports
-             * Disk I/O error. meh..
-             * need to figure out how to cause corruption in db
-             */
-            // expected
-            if (mDatabaseFile.exists()) {
-                mDatabaseFile.delete();
-            }
-        } catch (SQLiteException e) {
-            
+        } catch (SQLiteDatabaseCorruptException e) {
+            // Expected result.
         }
-        // database file should be gone
+
+        // The database file should be gone.
         assertFalse(mDatabaseFile.exists());
-        // after corruption handler is called, the database file should be free of
-        // database corruption
-        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(mDatabaseFile.getPath(), null,
+        // After corruption handler is called, the database file should be free of
+        // database corruption.   Reopen it.
+        mDatabase = SQLiteDatabase.openOrCreateDatabase(mDatabaseFile.getPath(), null,
                 new MyDatabaseCorruptionHandler());
-        assertTrue(db.isDatabaseIntegrityOk());
+        assertTrue(mDatabase.isDatabaseIntegrityOk());
+        // The teadDown() routine will close the database.
     }
 
     /**
@@ -102,8 +97,21 @@
      * corrupt before deleting the file.
      */
     public class MyDatabaseCorruptionHandler implements DatabaseErrorHandler {
+        private final AtomicBoolean mEntered = new AtomicBoolean(false);
         public void onCorruption(SQLiteDatabase dbObj) {
-            boolean databaseOk = dbObj.isDatabaseIntegrityOk();
+            boolean databaseOk = false;
+            if (!mEntered.get()) {
+                // The integrity check can retrigger the corruption handler if the database is,
+                // indeed, corrupted.  Use mEntered to detect recursion and to skip retrying the
+                // integrity check on recursion.
+                mEntered.set(true);
+                databaseOk = dbObj.isDatabaseIntegrityOk();
+            }
+            // At this point the database state has been detected and there is no further danger
+            // of recursion.  Setting mEntered to false allows this object to be reused, although
+            // it is not obvious how such reuse would work.
+            mEntered.set(false);
+
             // close the database
             try {
                 dbObj.close();
@@ -122,4 +130,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/core/tests/coretests/src/android/database/DatabaseGeneralTest.java b/core/tests/coretests/src/android/database/DatabaseGeneralTest.java
index b8dbfd3..e8d90f5 100644
--- a/core/tests/coretests/src/android/database/DatabaseGeneralTest.java
+++ b/core/tests/coretests/src/android/database/DatabaseGeneralTest.java
@@ -25,7 +25,6 @@
 import android.database.sqlite.SQLiteDebug;
 import android.database.sqlite.SQLiteException;
 import android.os.Parcel;
-import android.support.test.uiautomator.UiDevice;
 import android.test.AndroidTestCase;
 import android.test.PerformanceTestCase;
 import android.util.Log;
@@ -35,6 +34,7 @@
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.MediumTest;
 import androidx.test.filters.SmallTest;
+import androidx.test.uiautomator.UiDevice;
 
 import junit.framework.Assert;
 
@@ -914,6 +914,24 @@
         verifyLookasideStats(true);
     }
 
+    void verifyLookasideStats(boolean expectDisabled) {
+        boolean dbStatFound = false;
+        SQLiteDebug.PagerStats info = SQLiteDebug.getDatabaseInfo();
+        for (SQLiteDebug.DbStats dbStat : info.dbStats) {
+            if (dbStat.dbName.endsWith(mDatabaseFile.getName()) && !dbStat.arePoolStats) {
+                dbStatFound = true;
+                Log.i(TAG, "Lookaside for " + dbStat.dbName + " " + dbStat.lookaside);
+                if (expectDisabled) {
+                    assertTrue("lookaside slots count should be zero", dbStat.lookaside == 0);
+                } else {
+                    assertTrue("lookaside slots count should be greater than zero",
+                            dbStat.lookaside > 0);
+                }
+            }
+        }
+        assertTrue("No dbstat found for " + mDatabaseFile.getName(), dbStatFound);
+    }
+
     @SmallTest
     public void testOpenParamsSetLookasideConfigValidation() {
         try {
@@ -930,24 +948,6 @@
         }
     }
 
-    void verifyLookasideStats(boolean expectDisabled) {
-        boolean dbStatFound = false;
-        SQLiteDebug.PagerStats info = SQLiteDebug.getDatabaseInfo();
-        for (SQLiteDebug.DbStats dbStat : info.dbStats) {
-            if (dbStat.dbName.endsWith(mDatabaseFile.getName())) {
-                dbStatFound = true;
-                Log.i(TAG, "Lookaside for " + dbStat.dbName + " " + dbStat.lookaside);
-                if (expectDisabled) {
-                    assertTrue("lookaside slots count should be zero", dbStat.lookaside == 0);
-                } else {
-                    assertTrue("lookaside slots count should be greater than zero",
-                            dbStat.lookaside > 0);
-                }
-            }
-        }
-        assertTrue("No dbstat found for " + mDatabaseFile.getName(), dbStatFound);
-    }
-
     @LargeTest
     public void testDefaultDatabaseErrorHandler() {
         DefaultDatabaseErrorHandler errorHandler = new DefaultDatabaseErrorHandler();
diff --git a/core/tests/coretests/src/android/database/sqlite/SQLiteCursorTest.java b/core/tests/coretests/src/android/database/sqlite/SQLiteCursorTest.java
index 78d3c41..bc7acd9 100644
--- a/core/tests/coretests/src/android/database/sqlite/SQLiteCursorTest.java
+++ b/core/tests/coretests/src/android/database/sqlite/SQLiteCursorTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 The Android Open Source Project
+ * Copyright (C) 2023 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -187,4 +187,39 @@
         }
         assertEquals("All rows should be visited", 10, n);
     }
-}
\ No newline at end of file
+
+    // Return the number of columns associated with a new cursor.
+    private int columnCount() {
+        final String query = "SELECT * FROM t1";
+        try (Cursor c = mDatabase.rawQuery(query, null)) {
+            return c.getColumnCount();
+        }
+    }
+
+    /**
+     * Verify that a cursor that is created after the database schema is updated, sees the updated
+     * schema.
+     */
+    public void testSchemaChangeCursor() {
+        // Create the t1 table and put some data in it.
+        mDatabase.beginTransaction();
+        try {
+            mDatabase.execSQL("CREATE TABLE t1 (i int);");
+            mDatabase.execSQL("INSERT INTO t1 (i) VALUES (2)");
+            mDatabase.execSQL("INSERT INTO t1 (i) VALUES (3)");
+            mDatabase.execSQL("INSERT INTO t1 (i) VALUES (5)");
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        mDatabase.beginTransaction();
+        try {
+            assertEquals(1, columnCount());
+            mDatabase.execSQL("ALTER TABLE t1 ADD COLUMN j int");
+            assertEquals(2, columnCount());
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+}
diff --git a/core/tests/coretests/src/android/database/sqlite/SQLiteDatabaseTest.java b/core/tests/coretests/src/android/database/sqlite/SQLiteDatabaseTest.java
new file mode 100644
index 0000000..4ee987b
--- /dev/null
+++ b/core/tests/coretests/src/android/database/sqlite/SQLiteDatabaseTest.java
@@ -0,0 +1,234 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.database.sqlite;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.database.DatabaseUtils;
+import android.os.SystemClock;
+import android.test.AndroidTestCase;
+import android.util.Log;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.File;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class SQLiteDatabaseTest {
+
+    private static final String TAG = "SQLiteDatabaseTest";
+
+    private final Context mContext = InstrumentationRegistry.getInstrumentation().getContext();
+
+    private SQLiteDatabase mDatabase;
+    private File mDatabaseFile;
+    private static final String DATABASE_FILE_NAME = "database_test.db";
+
+    @Before
+    public void setUp() throws Exception {
+        assertNotNull(mContext);
+        mContext.deleteDatabase(DATABASE_FILE_NAME);
+        mDatabaseFile = mContext.getDatabasePath(DATABASE_FILE_NAME);
+        mDatabaseFile.getParentFile().mkdirs(); // directory may not exist
+        mDatabase = SQLiteDatabase.openOrCreateDatabase(mDatabaseFile, null);
+        assertNotNull(mDatabase);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        closeAndDeleteDatabase();
+    }
+
+    private void closeAndDeleteDatabase() {
+        mDatabase.close();
+        SQLiteDatabase.deleteDatabase(mDatabaseFile);
+    }
+
+    @Test
+    public void testStatementDDLEvictsCache() {
+        // The following will be cached (key is SQL string)
+        String selectQuery = "SELECT * FROM t1";
+
+        mDatabase.beginTransaction();
+        mDatabase.execSQL("CREATE TABLE `t1` (`c1` INTEGER NOT NULL PRIMARY KEY, data TEXT)");
+        try (Cursor c = mDatabase.rawQuery(selectQuery, null)) {
+            assertEquals(2, c.getColumnCount());
+        }
+        // Alter the schema in such a way that if the cached query is used it would produce wrong
+        // results due to the change in column amounts.
+        mDatabase.execSQL("ALTER TABLE `t1` RENAME TO `t1_old`");
+        mDatabase.execSQL("CREATE TABLE `t1` (`c1` INTEGER NOT NULL PRIMARY KEY)");
+        // Execute cached query (that should have been evicted), validating it sees the new schema.
+        try (Cursor c = mDatabase.rawQuery(selectQuery, null)) {
+            assertEquals(1, c.getColumnCount());
+        }
+        mDatabase.setTransactionSuccessful();
+        mDatabase.endTransaction();
+    }
+
+    @Test
+    public void testStressDDLEvicts() {
+        mDatabase.enableWriteAheadLogging();
+        mDatabase.execSQL("CREATE TABLE `t1` (`c1` INTEGER NOT NULL PRIMARY KEY, data TEXT)");
+        final int iterations = 1000;
+        ExecutorService exec = Executors.newFixedThreadPool(2);
+        exec.execute(() -> {
+                    boolean pingPong = true;
+                    for (int i = 0; i < iterations; i++) {
+                        mDatabase.beginTransaction();
+                        if (pingPong) {
+                            mDatabase.execSQL("ALTER TABLE `t1` RENAME TO `t1_old`");
+                            mDatabase.execSQL("CREATE TABLE `t1` (`c1` INTEGER NOT NULL "
+                                + "PRIMARY KEY)");
+                            pingPong = false;
+                        } else {
+                            mDatabase.execSQL("DROP TABLE `t1`");
+                            mDatabase.execSQL("ALTER TABLE `t1_old` RENAME TO `t1`");
+                            pingPong = true;
+                        }
+                        mDatabase.setTransactionSuccessful();
+                        mDatabase.endTransaction();
+                    }
+                });
+        exec.execute(() -> {
+                    for (int i = 0; i < iterations; i++) {
+                        try (Cursor c = mDatabase.rawQuery("SELECT * FROM t1", null)) {
+                            c.getCount();
+                        }
+                    }
+                });
+        try {
+            exec.shutdown();
+            assertTrue(exec.awaitTermination(1, TimeUnit.MINUTES));
+        } catch (InterruptedException e) {
+            fail("Timed out");
+        }
+    }
+
+    /**
+     * Create a database with one table with three columns.
+     */
+    private void createComplexDatabase() {
+        mDatabase.beginTransaction();
+        try {
+            mDatabase.execSQL("CREATE TABLE t1 (i int, d double, t text);");
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+    /**
+     * A three-value insert for the complex database.
+     */
+    private String createComplexInsert() {
+        return "INSERT INTO t1 (i, d, t) VALUES (?1, ?2, ?3)";
+    }
+
+    @Test
+    public void testAutomaticCounters() {
+        final int size = 10;
+
+        createComplexDatabase();
+
+        // Put 10 lines in the database.
+        mDatabase.beginTransaction();
+        try {
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(createComplexInsert())) {
+                for (int i = 0; i < size; i++) {
+                    int vi = i * 3;
+                    double vd = i * 2.5;
+                    String vt = String.format("text%02dvalue", i);
+                    s.bindInt(1, vi);
+                    s.bindDouble(2, vd);
+                    s.bindText(3, vt);
+                    boolean r = s.step();
+                    // No row is returned by this query.
+                    assertFalse(r);
+                    s.reset();
+                    assertEquals(i + 1, mDatabase.getLastInsertRowId());
+                    assertEquals(1, mDatabase.getLastChangedRowCount());
+                    assertEquals(i + 2, mDatabase.getTotalChangedRowCount());
+                }
+            }
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        // Put a second 10 lines in the database.
+        mDatabase.beginTransaction();
+        try {
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(createComplexInsert())) {
+                for (int i = 0; i < size; i++) {
+                    int vi = i * 3;
+                    double vd = i * 2.5;
+                    String vt = String.format("text%02dvalue", i);
+                    s.bindInt(1, vi);
+                    s.bindDouble(2, vd);
+                    s.bindText(3, vt);
+                    boolean r = s.step();
+                    // No row is returned by this query.
+                    assertFalse(r);
+                    s.reset();
+                    assertEquals(size + i + 1, mDatabase.getLastInsertRowId());
+                    assertEquals(1, mDatabase.getLastChangedRowCount());
+                    assertEquals(size + i + 2, mDatabase.getTotalChangedRowCount());
+                }
+            }
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+    @Test
+    public void testAutomaticCountersOutsideTransactions() {
+        try {
+            mDatabase.getLastChangedRowCount();
+            fail("getLastChangedRowCount() succeeded outside a transaction");
+        } catch (IllegalStateException e) {
+            // This exception is expected.
+        }
+
+        try {
+            mDatabase.getTotalChangedRowCount();
+            fail("getTotalChangedRowCount() succeeded outside a transaction");
+        } catch (IllegalStateException e) {
+            // This exception is expected.
+        }
+    }
+}
diff --git a/core/tests/coretests/src/android/database/sqlite/SQLiteRawStatementTest.java b/core/tests/coretests/src/android/database/sqlite/SQLiteRawStatementTest.java
new file mode 100644
index 0000000..36bb8e5
--- /dev/null
+++ b/core/tests/coretests/src/android/database/sqlite/SQLiteRawStatementTest.java
@@ -0,0 +1,880 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.database.sqlite;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.database.DatabaseUtils;
+import android.os.SystemClock;
+import android.test.AndroidTestCase;
+import android.util.Log;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class SQLiteRawStatementTest {
+
+    private static final String TAG = "SQLiteRawStatementTest";
+
+    private final Context mContext = InstrumentationRegistry.getInstrumentation().getContext();
+
+    private SQLiteDatabase mDatabase;
+    private File mDatabaseFile;
+    private static final String DATABASE_FILE_NAME = "database_test.db";
+
+    @Before
+    public void setUp() throws Exception {
+        assertNotNull(mContext);
+        mContext.deleteDatabase(DATABASE_FILE_NAME);
+        mDatabaseFile = mContext.getDatabasePath(DATABASE_FILE_NAME);
+        mDatabaseFile.getParentFile().mkdirs(); // directory may not exist
+        mDatabase = SQLiteDatabase.openOrCreateDatabase(mDatabaseFile, null);
+        assertNotNull(mDatabase);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        closeAndDeleteDatabase();
+    }
+
+    private void closeAndDeleteDatabase() {
+        mDatabase.close();
+        SQLiteDatabase.deleteDatabase(mDatabaseFile);
+    }
+
+    /**
+     * Create a database with a single table with one column and two rows.  Exceptions are allowed
+     * to percolate out.
+     */
+    private void createSimpleDatabase() {
+        // Create the t1 table and put some data in it.
+        mDatabase.beginTransaction();
+        try {
+            mDatabase.execSQL("CREATE TABLE t1 (i int);");
+            mDatabase.execSQL("INSERT INTO t1 (i) VALUES (2)");
+            mDatabase.execSQL("INSERT INTO t1 (i) VALUES (3)");
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+    /**
+     * A simple insert for the simple database.
+     */
+    private String createSimpleInsert() {
+        return "INSERT INTO t1 (i) VALUES (1)";
+    }
+
+    /**
+     * Create a database with one table with three columns.
+     */
+    private void createComplexDatabase() {
+        mDatabase.beginTransaction();
+        try {
+            mDatabase.execSQL("CREATE TABLE t1 (i int, d double, t text);");
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+    /**
+     * A three-value insert for the complex database.
+     */
+    private String createComplexInsert() {
+        return "INSERT INTO t1 (i, d, t) VALUES (?1, ?2, ?3)";
+    }
+
+    /**
+     * Create a database with one table with 12 columns.
+     */
+    private void createWideDatabase() {
+        StringBuilder sp = new StringBuilder();
+        sp.append(String.format("i%d int", 0));
+        for (int i = 1; i < 12; i++) {
+            sp.append(String.format(", i%d int", i));
+        }
+        mDatabase.beginTransaction();
+        try {
+            mDatabase.execSQL("CREATE TABLE t1 (" + sp.toString() + ")");
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+    /**
+     * A 12-value insert for the wide database.
+     */
+    private String createWideInsert() {
+        StringBuilder sp = new StringBuilder();
+        sp.append("INSERT INTO t1 (i0");
+        for (int i = 1; i < 12; i++) {
+            sp.append(String.format(", i%d", i));
+        }
+        sp.append(") VALUES (?");
+        for (int i = 1; i < 12; i++) {
+            sp.append(", ?");
+        }
+        sp.append(")");
+        return sp.toString();
+    }
+
+    @Test
+    public void testSingleTransaction() {
+        createSimpleDatabase();
+
+        mDatabase.beginTransaction();
+        try {
+            int found = 0;
+            try (SQLiteRawStatement s = mDatabase.createRawStatement("SELECT i from t1")) {
+                for (int i = 0; s.step() && i < 5; i++) {
+                    found++;
+                }
+            }
+            assertEquals(2, found);
+            long r = DatabaseUtils.longForQuery(mDatabase, "SELECT count(*) from t1", null);
+            assertEquals(2, r);
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+    @Test
+    public void testMultipleTransactions() {
+        createSimpleDatabase();
+
+        mDatabase.beginTransaction();
+        try {
+            final String query = "SELECT i from t1";
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(query);
+                 SQLiteRawStatement t = mDatabase.createRawStatement(query)) {
+                int found = 0;
+                for (int i = 0; s.step() && i < 5; i++) {
+                    boolean r = t.step();
+                    assertTrue(r);
+                    assertEquals(t.getColumnInt(0), s.getColumnInt(0));
+                    found++;
+                }
+                assertFalse(t.step());
+                assertEquals(2, found);
+                long r = DatabaseUtils.longForQuery(mDatabase, "SELECT count(*) from t1", null);
+                assertEquals(2, r);
+            }
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+    @Test
+    public void testInsert() {
+        createComplexDatabase();
+
+        // Populate the database
+        mDatabase.beginTransaction();
+        try {
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(createComplexInsert())) {
+                for (int i = 0; i < 9; i++) {
+                    int vi = i * 3;
+                    double vd = i * 2.5;
+                    String vt = String.format("text%02dvalue", i);
+                    s.bindInt(1, vi);
+                    s.bindDouble(2, vd);
+                    s.bindText(3, vt);
+                    boolean r = s.step();
+                    // No row is returned by this query.
+                    assertFalse(r);
+                    s.reset();
+                }
+                // The last row has a null double and a null text.
+                s.bindInt(1, 20);
+                s.bindNull(2);
+                s.bindNull(3);
+                assertFalse(s.step());
+                s.reset();
+            }
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        // Verify that 10 rows have been inserted.
+        mDatabase.beginTransaction();
+        try {
+            final String query = "SELECT COUNT(*) FROM t1";
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(query)) {
+                boolean r = s.step();
+                assertTrue(r);
+                int rows = s.getColumnInt(0);
+                assertEquals(10, rows);
+            }
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        // Verify that the element created with i == 3 is correct.
+        mDatabase.beginTransactionReadOnly();
+        try {
+            final String query = "SELECT i, d, t FROM t1 WHERE t = 'text03value'";
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(query)) {
+                assertTrue(s.step());
+                assertEquals(3, s.getResultColumnCount());
+                int vi = s.getColumnInt(0);
+                double vd = s.getColumnDouble(1);
+                String vt = s.getColumnText(2);
+                assertEquals(3 * 3, vi);
+                assertEquals(2.5 * 3, vd, 0.1);
+                assertEquals("text03value", vt);
+                // No more rows.
+                assertFalse(s.step());
+            }
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        mDatabase.beginTransactionReadOnly();
+        try {
+            final String query = "SELECT i, d, t FROM t1 WHERE i == 20";
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(query)) {
+                assertTrue(s.step());
+                assertEquals(3, s.getResultColumnCount());
+                assertEquals(20, s.getColumnInt(0));
+                assertEquals(0.0, s.getColumnDouble(1), 0.01);
+                assertEquals(null, s.getColumnText(2));
+                // No more rows.
+                assertFalse(s.step());
+            }
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+    @Test
+    public void testRequiresTransaction() {
+        createSimpleDatabase();
+
+        // Verify that a statement cannot be created outside a transaction.
+        try {
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(createSimpleInsert())) {
+                fail("created a statement outside a transaction");
+                // Suppress warnings about unused variables.
+                s.close();
+            }
+        } catch (IllegalStateException e) {
+            // There is more than one source of this exception.  Scrape the message and look for
+            // "no current transaction", which comes from
+            // {@link SQLiteSession.throwIfNoTransaction}.
+            if (!e.getMessage().contains("no current transaction")) {
+                fail("unexpected IllegalStateException, got " + e);
+            }
+        } catch (AssertionError e) {
+            // Pass on the fail from the try-block before the generic catch below can see it.
+            throw e;
+        } catch (Throwable e) {
+            fail("expected IllegalStateException, got " + e);
+        }
+    }
+
+    // Test a variety of conditions under which a SQLiteRawStatement should close.  These methods
+    // deliberately do not use try/finally blocks on the statement to make sure a specific
+    // behavior is being tested.
+    @Test
+    public void testAutoClose() {
+        createSimpleDatabase();
+
+        SQLiteRawStatement s;
+
+        // Verify that calling close(), closes the statement.
+        mDatabase.beginTransaction();
+        try {
+            s = mDatabase.createRawStatement(createSimpleInsert());
+            assertTrue(s.isOpen());
+            s.close();
+            assertFalse(s.isOpen());
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        // Verify that a statement is closed automatically at the end of a try-with-resource
+        // block.
+        mDatabase.beginTransaction();
+        try {
+            try (var t = mDatabase.createRawStatement(createSimpleInsert())) {
+                // Save a reference to t for examination ouside the try-with-resource block.
+                s = t;
+                assertTrue(s.isOpen());
+            }
+            assertFalse(s.isOpen());
+        } finally {
+            mDatabase.endTransaction();
+        }
+        assertFalse(s.isOpen());
+
+
+        // Verify that a statement is closed implicitly when the transaction is marked
+        // successful.
+        mDatabase.beginTransaction();
+        try {
+            s = mDatabase.createRawStatement(createSimpleInsert());
+            mDatabase.setTransactionSuccessful();
+            assertFalse(s.isOpen());
+        } finally {
+            mDatabase.endTransaction();
+        }
+        assertFalse(s.isOpen());
+
+        // Verify that a statement is closed implicitly when the transaction is closed without
+        // being marked successful.  The try-with-resources pattern is not used here.
+        mDatabase.beginTransaction();
+        try {
+            s = mDatabase.createRawStatement(createSimpleInsert());
+        } finally {
+            mDatabase.endTransaction();
+        }
+        assertFalse(s.isOpen());
+    }
+
+    @Test
+    public void testMustBeOpen() {
+        createSimpleDatabase();
+
+        mDatabase.beginTransaction();
+        try {
+            SQLiteRawStatement s = mDatabase.createRawStatement(createSimpleInsert());
+            assertTrue(s.isOpen());
+            s.close();
+            assertFalse(s.isOpen());
+
+            // Verify that a statement cannot be accessed once closed.
+            try {
+                s.getResultColumnCount();
+                fail("accessed closed statement");
+            } catch (AssertionError e) {
+                // Pass on the fail from the try-block before the generic catch below can see it.
+                throw e;
+            } catch (IllegalStateException e) {
+                // There is more than one source of this exception.  Scrape the message and look for
+                // the message from {@link SQLiteRawStatement.throwIfInvalid}.
+                if (!e.getMessage().contains("method called on a closed statement")) {
+                    fail("unexpected IllegalStateException, got " + e);
+                }
+            } catch (Throwable e) {
+                fail("expected IllegalStateException, got " + e);
+            }
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+    @Test
+    public void testThreadRestrictions() throws Exception {
+        createComplexDatabase();
+
+        final ArrayList<String> errors = new ArrayList<>();
+        errors.add("test failed to run");
+
+        mDatabase.beginTransaction();
+        try {
+            SQLiteRawStatement s = mDatabase.createRawStatement("SELECT i FROM t1");
+
+            Thread peerThread = new Thread(
+                () -> {
+                    try {
+                        s.step();
+                        errors.add("expected IllegalStateException");
+                    } catch (IllegalStateException e) {
+                        // There is more than one source of this exception.  Scrape the message
+                        // and look for the message from {@link SQLiteRawStatement.throwIfInvalid}.
+                        if (e.getMessage().contains("method called on a foreign thread")) {
+                            // The test ran properly.  Remove the default "did-not-run" error.
+                            errors.remove(0);
+                        } else {
+                            errors.add("unexpected IllegalStateException, got " + e);
+                        }
+                    } catch (Throwable e) {
+                        errors.add("expected IllegalStateException, got " + e);
+                    }
+                });
+            peerThread.start();
+            peerThread.join(500L);
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+        if (errors.size() > 0) {
+            fail(errors.get(0));
+        }
+    }
+
+    @Test
+    public void testBlob() {
+        mDatabase.beginTransaction();
+        try {
+            final String query = "CREATE TABLE t1 (i int, b blob)";
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(query)) {
+                assertFalse(s.step());
+            }
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        // Create a the reference copy of a byte array.
+        byte[] src = new byte[32];
+        for (int i = 0; i < src.length; i++) {
+            src[i] = (byte) (i * 3);
+        }
+
+        // Insert data into the table.
+        mDatabase.beginTransaction();
+        try {
+            final String query = "INSERT INTO t1 (i, b) VALUES (?1, ?2)";
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(query)) {
+                // Bind the entire src array
+                s.bindInt(1, 1);
+                s.bindBlob(2, src);
+                s.step();
+                s.reset();
+                // Bind the fragment starting at 4, length 8.
+                s.bindInt(1, 2);
+                s.bindBlob(2, src, 4, 8);
+                s.step();
+                s.reset();
+                // Bind null
+                s.clearBindings();
+                s.bindInt(1, 3);
+                s.step();
+                s.reset();
+            }
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        // Read back data and verify it against the reference copy.
+        mDatabase.beginTransactionReadOnly();
+        try {
+            final String query = "SELECT (b) FROM t1 WHERE i = ?1";
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(query)) {
+                // Fetch the entire reference array.
+                s.bindInt(1, 1);
+                assertTrue(s.step());
+                byte[] a = s.getColumnBlob(0);
+                assertTrue(Arrays.equals(src, a));
+                s.reset();
+
+                // Fetch the fragment starting at 4, length 8.
+                s.bindInt(1, 2);
+                assertTrue(s.step());
+                byte[] c = new byte[src.length];
+                assertEquals(8, s.readColumnBlob(0, c, 0, c.length, 0));
+                assertTrue(Arrays.equals(src, 4, 4+8, c, 0, 0+8));
+                s.reset();
+
+                // Fetch the null.
+                s.bindInt(1, 3);
+                assertTrue(s.step());
+                assertEquals(null, s.getColumnBlob(0));
+                s.reset();
+
+                // Fetch the null and ensure the buffer is not modified.
+                for (int i = 0; i < c.length; i++) c[i] = 0;
+                s.bindInt(1, 3);
+                assertTrue(s.step());
+                assertEquals(0, s.readColumnBlob(0, c, 0, c.length, 0));
+                for (int i = 0; i < c.length; i++) assertEquals(0, c[i]);
+                s.reset();
+            }
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        // Test NPE detection
+        mDatabase.beginTransaction();
+        try {
+            final String query = "INSERT INTO t1 (i, b) VALUES (?1, ?2)";
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(query)) {
+                s.bindBlob(2, null);
+                fail("expected a NullPointerException");
+            }
+        } catch (NullPointerException e) {
+            // Expected
+        } catch (AssertionError e) {
+            // Pass on the fail from the try-block before the generic catch below can see it.
+            throw e;
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+    @Test
+    public void testParameterMetadata() {
+        createComplexDatabase();
+
+        final String sql = "INSERT INTO t1 (i, d, t) VALUES (:1, ?2, @FOO)";
+
+        // Start a transaction that allows updates.
+        mDatabase.beginTransaction();
+        try {
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(sql)) {
+                assertEquals(3, s.getParameterCount());
+
+                assertEquals(1, s.getParameterIndex(":1"));
+                assertEquals(2, s.getParameterIndex("?2"));
+                assertEquals(3, s.getParameterIndex("@FOO"));
+                assertEquals(0, s.getParameterIndex("@BAR"));
+
+                assertEquals(":1", s.getParameterName(1));
+                assertEquals("?2", s.getParameterName(2));
+                assertEquals("@FOO", s.getParameterName(3));
+                assertEquals(null, s.getParameterName(4));
+            }
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        // Start a transaction that allows updates.
+        mDatabase.beginTransaction();
+        try {
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(sql)) {
+                // Error case.  The name is not supposed to be null.
+                assertEquals(0, s.getParameterIndex(null));
+                fail("expected a NullPointerException");
+            }
+        } catch (NullPointerException e) {
+            // Expected
+        } catch (AssertionError e) {
+            // Pass on the fail from the try-block before the generic catch below can see it.
+            throw e;
+        } catch (Throwable e) {
+            fail("expected NullPointerException, got " + e);
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+    // This test cannot fail, but the log messages report timing for the new SQLiteRawStatement APIs
+    // vs the Cursor APIs.
+    @Test
+    public void testSpeedSimple() {
+        final int size = 100000;
+
+        createComplexDatabase();
+
+        // Populate the database.
+        mDatabase.beginTransaction();
+        try {
+            long start = SystemClock.uptimeMillis();
+            try (var s = mDatabase.createRawStatement(createComplexInsert())) {
+                for (int i = 0; i < size; i++) {
+                    int vi = i * 3;
+                    double vd = i * 2.5;
+                    String vt = String.format("text%02dvalue", i);
+                    s.bindInt(1, vi);
+                    s.bindDouble(2, vd);
+                    s.bindText(3, vt);
+                    boolean r = s.step();
+                    // No row is returned by this query.
+                    assertFalse(r);
+                    s.reset();
+                }
+            }
+            long elapsed = SystemClock.uptimeMillis() - start;
+            Log.i(TAG, "timing simple insert: " + elapsed + "ms");
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        final String query = "SELECT i, d, t FROM t1";
+
+        // Iterate over the database.
+        mDatabase.beginTransactionReadOnly();
+        try {
+            long start = SystemClock.uptimeMillis();
+            int found = 0;
+            try (var s = mDatabase.createRawStatement(query)) {
+                for (int i = 0; s.step(); i++) {
+                    int vi = s.getColumnInt(0);
+                    int expected = i * 3;
+                    assertEquals(expected, vi);
+                    found = i;
+                }
+            }
+            long elapsed = SystemClock.uptimeMillis() - start;
+            Log.i(TAG, "timing statement simple: " + elapsed + "ms");
+            assertEquals(size - 1, found);
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        // Iterate over the database using cursors.
+        mDatabase.beginTransactionReadOnly();
+        try {
+            long start = SystemClock.uptimeMillis();
+            try (Cursor c = mDatabase.rawQuery(query, null)) {
+                c.moveToFirst();
+                int found = 0;
+                for (int i = 0; i < size; i++) {
+                    int vi = c.getInt(0);
+                    int expected = i * 3;
+                    assertEquals(expected, vi);
+                    c.moveToNext();
+                    found = i;
+                }
+                assertEquals(size - 1, found);
+            }
+            long elapsed = SystemClock.uptimeMillis() - start;
+            Log.i(TAG, "timing cursor simple: " + elapsed + "ms");
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+    @Test
+    public void testSpeedSingleQuery() {
+        final int size = 1000;
+        final int loops = size;
+
+        createComplexDatabase();
+
+        // Populate the database.
+        mDatabase.beginTransaction();
+        try {
+            try (var s = mDatabase.createRawStatement(createComplexInsert())) {
+                for (int i = 0; i < size; i++) {
+                    int vi = i * 3;
+                    double vd = i * 2.5;
+                    String vt = String.format("text%02dvalue", i);
+                    s.bindInt(1, vi);
+                    s.bindDouble(2, vd);
+                    s.bindText(3, vt);
+                    boolean r = s.step();
+                    // No row is returned by this query.
+                    assertFalse(r);
+                    s.reset();
+                }
+            }
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        final String query = "SELECT i, d, t FROM t1";
+
+        // Iterate over the database.
+        mDatabase.beginTransactionReadOnly();
+        try {
+            long start = SystemClock.uptimeMillis();
+            for (int i = 0; i < loops; i++) {
+                try (var s = mDatabase.createRawStatement(query)) {
+                    assertTrue(s.step());
+                    int vi = s.getColumnInt(0);
+                    int expected = 0;
+                    assertEquals(expected, vi);
+                }
+            }
+            long elapsed = SystemClock.uptimeMillis() - start;
+            Log.i(TAG, "timing statement query: " + elapsed + "ms");
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        // Iterate over the database using cursors.
+        mDatabase.beginTransactionReadOnly();
+        try {
+            long start = SystemClock.uptimeMillis();
+            for (int i = 0; i < loops; i++) {
+                try (Cursor c = mDatabase.rawQuery(query, null)) {
+                    c.moveToFirst();
+                    int vi = c.getInt(0);
+                    int expected = 0;
+                    assertEquals(expected, vi);
+                }
+            }
+            long elapsed = SystemClock.uptimeMillis() - start;
+            mDatabase.setTransactionSuccessful();
+            Log.i(TAG, "timing cursor query: " + elapsed + "ms");
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+    private int wideVal(int i, int j) {
+        return i + j;
+    }
+
+    @Test
+    public void testSpeedWideQuery() {
+        final int size = 100000;
+
+        createWideDatabase();
+
+        // Populate the database.
+        mDatabase.beginTransaction();
+        try {
+            try (var s = mDatabase.createRawStatement(createWideInsert())) {
+                for (int i = 0; i < size; i++) {
+                    for (int j = 0; j < 12; j++) {
+                        s.bindInt(j+1, wideVal(i, j));
+                    }
+                    boolean r = s.step();
+                    // No row is returned by this query.
+                    assertFalse(r);
+                    s.reset();
+                }
+            }
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        final String query = "SELECT * FROM t1";
+
+        // Iterate over the database.
+        mDatabase.beginTransactionReadOnly();
+        try {
+            long start = SystemClock.uptimeMillis();
+            try (var s = mDatabase.createRawStatement(query)) {
+                for (int i = 0; i < size; i++) {
+                    assertTrue(s.step());
+                    for (int j = 0; j < 12; j++) {
+                        assertEquals(s.getColumnInt(j), wideVal(i, j));
+                    }
+                }
+            }
+            long elapsed = SystemClock.uptimeMillis() - start;
+            Log.i(TAG, "timing statement wide: " + elapsed + "ms");
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        // Iterate over the database using cursors.
+        mDatabase.beginTransactionReadOnly();
+        try {
+            long start = SystemClock.uptimeMillis();
+            try (Cursor c = mDatabase.rawQuery(query, null)) {
+                c.moveToFirst();
+                for (int i = 0; i < size; i++) {
+                    for (int j = 0; j < 12; j++) {
+                        assertEquals(c.getInt(j), wideVal(i, j));
+                    }
+                    c.moveToNext();
+                }
+            }
+            long elapsed = SystemClock.uptimeMillis() - start;
+            mDatabase.setTransactionSuccessful();
+            Log.i(TAG, "timing cursor wide: " + elapsed + "ms");
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+
+    @Test
+    public void testSpeedRecursive() {
+        createComplexDatabase();
+
+        final String query = "WITH RECURSIVE t1(i) AS "
+                             + "(SELECT 123 UNION ALL SELECT i+1 FROM t1) "
+                             + "SELECT * from t1 LIMIT 1000000";
+
+        mDatabase.beginTransaction();
+        try {
+            long start = SystemClock.uptimeMillis();
+            try (SQLiteRawStatement s = mDatabase.createRawStatement(query)) {
+                while (s.step()) {
+                    s.getColumnInt(0);
+                }
+            }
+            long elapsed = SystemClock.uptimeMillis() - start;
+            Log.i(TAG, "timing statement recursive: " + elapsed + "ms");
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        mDatabase.beginTransaction();
+        try {
+            long start = SystemClock.uptimeMillis();
+            try (Cursor c = mDatabase.rawQuery(query, null)) {
+                c.moveToFirst();
+                while (c.moveToNext()) {
+                    c.getInt(0);
+                }
+            }
+            long elapsed = SystemClock.uptimeMillis() - start;
+            Log.i(TAG, "timing cursor recursive: " + elapsed + "ms");
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+
+    @Test
+    public void testUnicode() {
+        // Create the t1 table and put some data in it.
+        mDatabase.beginTransaction();
+        try {
+            mDatabase.execSQL("CREATE TABLE t1 (i int, j int);");
+            mDatabase.execSQL("INSERT INTO t1 (i, j) VALUES (2, 20)");
+            mDatabase.execSQL("INSERT INTO t1 (i, j) VALUES (3, 30)");
+            mDatabase.setTransactionSuccessful();
+        } finally {
+            mDatabase.endTransaction();
+        }
+
+        // Exploding Head Emoji
+        final String head = ":\u1F92F";
+        // Heart Eyes Cat Emoji
+        final String cat = "\u1F63B";
+
+        final String sql = "SELECT i AS " + cat + " FROM t1 WHERE j = " + head;
+
+        mDatabase.beginTransactionReadOnly();
+        try (SQLiteRawStatement s = mDatabase.createRawStatement(sql)) {
+            assertEquals(1, s.getParameterIndex(head));
+            assertEquals(head, s.getParameterName(1));
+            s.bindInt(1, 20);
+            assertTrue(s.step());
+            assertEquals(2, s.getColumnInt(0));
+            assertEquals(cat, s.getColumnName(0));
+        } finally {
+            mDatabase.endTransaction();
+        }
+    }
+}
diff --git a/core/tests/coretests/src/android/hardware/input/InputDeviceBatteryListenerTest.kt b/core/tests/coretests/src/android/hardware/input/InputDeviceBatteryListenerTest.kt
deleted file mode 100644
index fdcc7c9..0000000
--- a/core/tests/coretests/src/android/hardware/input/InputDeviceBatteryListenerTest.kt
+++ /dev/null
@@ -1,243 +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 android.hardware.input
-
-import android.content.Context
-import android.content.ContextWrapper
-import android.hardware.BatteryState
-import android.os.Handler
-import android.os.HandlerExecutor
-import android.os.test.TestLooper
-import android.platform.test.annotations.Presubmit
-import androidx.test.core.app.ApplicationProvider
-import com.android.server.testutils.any
-import java.util.concurrent.Executor
-import kotlin.test.assertEquals
-import kotlin.test.assertNotNull
-import kotlin.test.assertTrue
-import kotlin.test.fail
-import org.junit.After
-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
-import org.mockito.Mockito.anyInt
-import org.mockito.Mockito.doAnswer
-import org.mockito.Mockito.`when`
-import org.mockito.junit.MockitoJUnit
-import org.mockito.junit.MockitoJUnitRunner
-
-/**
- * Tests for [InputManager.InputDeviceBatteryListener].
- *
- * Build/Install/Run:
- * atest FrameworksCoreTests:InputDeviceBatteryListenerTest
- */
-@Presubmit
-@RunWith(MockitoJUnitRunner::class)
-class InputDeviceBatteryListenerTest {
-    @get:Rule
-    val rule = MockitoJUnit.rule()!!
-
-    private lateinit var testLooper: TestLooper
-    private var registeredListener: IInputDeviceBatteryListener? = null
-    private val monitoredDevices = mutableListOf<Int>()
-    private lateinit var executor: Executor
-    private lateinit var context: Context
-    private lateinit var inputManager: InputManager
-
-    @Mock
-    private lateinit var iInputManagerMock: IInputManager
-
-    @Before
-    fun setUp() {
-        context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
-        testLooper = TestLooper()
-        executor = HandlerExecutor(Handler(testLooper.looper))
-        registeredListener = null
-        monitoredDevices.clear()
-        InputManagerGlobal.resetInstance(iInputManagerMock)
-        inputManager = InputManager(context)
-        `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE)))
-                .thenReturn(inputManager)
-
-        // Handle battery listener registration.
-        doAnswer {
-            val deviceId = it.getArgument(0) as Int
-            val listener = it.getArgument(1) as IInputDeviceBatteryListener
-            if (registeredListener != null &&
-                    registeredListener!!.asBinder() != listener.asBinder()) {
-                // There can only be one registered battery listener per process.
-                fail("Trying to register a new listener when one already exists")
-            }
-            if (monitoredDevices.contains(deviceId)) {
-                fail("Trying to start monitoring a device that was already being monitored")
-            }
-            monitoredDevices.add(deviceId)
-            registeredListener = listener
-            null
-        }.`when`(iInputManagerMock).registerBatteryListener(anyInt(), any())
-
-        // Handle battery listener being unregistered.
-        doAnswer {
-            val deviceId = it.getArgument(0) as Int
-            val listener = it.getArgument(1) as IInputDeviceBatteryListener
-            if (registeredListener == null ||
-                    registeredListener!!.asBinder() != listener.asBinder()) {
-                fail("Trying to unregister a listener that is not registered")
-            }
-            if (!monitoredDevices.remove(deviceId)) {
-                fail("Trying to stop monitoring a device that is not being monitored")
-            }
-            if (monitoredDevices.isEmpty()) {
-                registeredListener = null
-            }
-        }.`when`(iInputManagerMock).unregisterBatteryListener(anyInt(), any())
-    }
-
-    @After
-    fun tearDown() {
-        InputManagerGlobal.clearInstance()
-    }
-
-    private fun notifyBatteryStateChanged(
-        deviceId: Int,
-        isPresent: Boolean = true,
-        status: Int = BatteryState.STATUS_FULL,
-        capacity: Float = 1.0f,
-        eventTime: Long = 12345L
-    ) {
-        registeredListener!!.onBatteryStateChanged(IInputDeviceBatteryState().apply {
-            this.deviceId = deviceId
-            this.updateTime = eventTime
-            this.isPresent = isPresent
-            this.status = status
-            this.capacity = capacity
-        })
-    }
-
-    @Test
-    fun testListenerIsNotifiedCorrectly() {
-        var callbackCount = 0
-
-        // Add a battery listener to monitor battery changes.
-        inputManager.addInputDeviceBatteryListener(1 /*deviceId*/, executor) {
-                deviceId: Int, eventTime: Long, batteryState: BatteryState ->
-            callbackCount++
-            assertEquals(1, deviceId)
-            assertEquals(true, batteryState.isPresent)
-            assertEquals(BatteryState.STATUS_DISCHARGING, batteryState.status)
-            assertEquals(0.5f, batteryState.capacity)
-            assertEquals(8675309L, eventTime)
-        }
-
-        // Adding the listener should register the callback with InputManagerService.
-        assertNotNull(registeredListener)
-        assertTrue(monitoredDevices.contains(1))
-
-        // Notifying battery change for a different device should not trigger the listener.
-        notifyBatteryStateChanged(deviceId = 2)
-        testLooper.dispatchAll()
-        assertEquals(0, callbackCount)
-
-        // Notifying battery change for the registered device will notify the listener.
-        notifyBatteryStateChanged(1 /*deviceId*/, true /*isPresent*/,
-            BatteryState.STATUS_DISCHARGING, 0.5f /*capacity*/, 8675309L /*eventTime*/)
-        testLooper.dispatchNext()
-        assertEquals(1, callbackCount)
-    }
-
-    @Test
-    fun testMultipleListeners() {
-        // Set up two callbacks.
-        var callbackCount1 = 0
-        var callbackCount2 = 0
-        val callback1 = InputManager.InputDeviceBatteryListener { _, _, _ -> callbackCount1++ }
-        val callback2 = InputManager.InputDeviceBatteryListener { _, _, _ -> callbackCount2++ }
-
-        // Monitor battery changes for three devices. The first callback monitors devices 1 and 3,
-        // while the second callback monitors devices 2 and 3.
-        inputManager.addInputDeviceBatteryListener(1 /*deviceId*/, executor, callback1)
-        assertEquals(1, monitoredDevices.size)
-        inputManager.addInputDeviceBatteryListener(2 /*deviceId*/, executor, callback2)
-        assertEquals(2, monitoredDevices.size)
-        inputManager.addInputDeviceBatteryListener(3 /*deviceId*/, executor, callback1)
-        assertEquals(3, monitoredDevices.size)
-        inputManager.addInputDeviceBatteryListener(3 /*deviceId*/, executor, callback2)
-        assertEquals(3, monitoredDevices.size)
-
-        // Notifying battery change for each of the devices should trigger the registered callbacks.
-        notifyBatteryStateChanged(deviceId = 1)
-        testLooper.dispatchNext()
-        assertEquals(1, callbackCount1)
-        assertEquals(0, callbackCount2)
-
-        notifyBatteryStateChanged(deviceId = 2)
-        testLooper.dispatchNext()
-        assertEquals(1, callbackCount1)
-        assertEquals(1, callbackCount2)
-
-        notifyBatteryStateChanged(deviceId = 3)
-        testLooper.dispatchNext()
-        testLooper.dispatchNext()
-        assertEquals(2, callbackCount1)
-        assertEquals(2, callbackCount2)
-
-        // Stop monitoring devices 1 and 2.
-        inputManager.removeInputDeviceBatteryListener(1 /*deviceId*/, callback1)
-        assertEquals(2, monitoredDevices.size)
-        inputManager.removeInputDeviceBatteryListener(2 /*deviceId*/, callback2)
-        assertEquals(1, monitoredDevices.size)
-
-        // Ensure device 3 continues to be monitored.
-        notifyBatteryStateChanged(deviceId = 3)
-        testLooper.dispatchNext()
-        testLooper.dispatchNext()
-        assertEquals(3, callbackCount1)
-        assertEquals(3, callbackCount2)
-
-        // Stop monitoring all devices.
-        inputManager.removeInputDeviceBatteryListener(3 /*deviceId*/, callback1)
-        assertEquals(1, monitoredDevices.size)
-        inputManager.removeInputDeviceBatteryListener(3 /*deviceId*/, callback2)
-        assertEquals(0, monitoredDevices.size)
-    }
-
-    @Test
-    fun testAdditionalListenersNotifiedImmediately() {
-        var callbackCount1 = 0
-        var callbackCount2 = 0
-        val callback1 = InputManager.InputDeviceBatteryListener { _, _, _ -> callbackCount1++ }
-        val callback2 = InputManager.InputDeviceBatteryListener { _, _, _ -> callbackCount2++ }
-
-        // Add a battery listener and send the latest battery state.
-        inputManager.addInputDeviceBatteryListener(1 /*deviceId*/, executor, callback1)
-        assertEquals(1, monitoredDevices.size)
-        notifyBatteryStateChanged(deviceId = 1)
-        testLooper.dispatchNext()
-        assertEquals(1, callbackCount1)
-
-        // Add a second listener for the same device that already has the latest battery state.
-        inputManager.addInputDeviceBatteryListener(1 /*deviceId*/, executor, callback2)
-        assertEquals(1, monitoredDevices.size)
-
-        // Ensure that this listener is notified immediately.
-        testLooper.dispatchNext()
-        assertEquals(1, callbackCount2)
-    }
-}
diff --git a/core/tests/coretests/src/android/hardware/input/InputDeviceLightsManagerTest.java b/core/tests/coretests/src/android/hardware/input/InputDeviceLightsManagerTest.java
deleted file mode 100644
index 1e505ab..0000000
--- a/core/tests/coretests/src/android/hardware/input/InputDeviceLightsManagerTest.java
+++ /dev/null
@@ -1,286 +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 android.hardware.input;
-
-import static android.hardware.lights.LightsRequest.Builder;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static junit.framework.TestCase.assertEquals;
-import static junit.framework.TestCase.assertNotNull;
-
-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.doAnswer;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.ContextWrapper;
-import android.hardware.lights.Light;
-import android.hardware.lights.LightState;
-import android.hardware.lights.LightsManager;
-import android.hardware.lights.LightsRequest;
-import android.os.IBinder;
-import android.platform.test.annotations.Presubmit;
-import android.util.ArrayMap;
-import android.view.InputDevice;
-
-import androidx.test.InstrumentationRegistry;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.mockito.junit.MockitoRule;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Tests for {@link InputDeviceLightsManager}.
- *
- * Build/Install/Run:
- * atest FrameworksCoreTests:InputDeviceLightsManagerTest
- */
-@Presubmit
-@RunWith(MockitoJUnitRunner.class)
-public class InputDeviceLightsManagerTest {
-    private static final String TAG = "InputDeviceLightsManagerTest";
-
-    private static final int DEVICE_ID = 1000;
-    private static final int PLAYER_ID = 3;
-
-    @Rule public final MockitoRule mockito = MockitoJUnit.rule();
-
-    private InputManager mInputManager;
-
-    @Mock private IInputManager mIInputManagerMock;
-
-    @Before
-    public void setUp() throws Exception {
-        final Context context = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{DEVICE_ID});
-
-        when(mIInputManagerMock.getInputDevice(eq(DEVICE_ID))).thenReturn(
-                createInputDevice(DEVICE_ID));
-
-        InputManagerGlobal.resetInstance(mIInputManagerMock);
-        mInputManager = new InputManager(context);
-        when(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(mInputManager);
-
-        ArrayMap<Integer, LightState> lightStatesById = new ArrayMap<>();
-        doAnswer(invocation -> {
-            final int[] lightIds = (int[]) invocation.getArguments()[1];
-            final LightState[] lightStates =
-                    (LightState[]) invocation.getArguments()[2];
-            for (int i = 0; i < lightIds.length; i++) {
-                lightStatesById.put(lightIds[i], lightStates[i]);
-            }
-            return null;
-        }).when(mIInputManagerMock).setLightStates(eq(DEVICE_ID),
-                any(int[].class), any(LightState[].class), any(IBinder.class));
-
-        doAnswer(invocation -> {
-            int lightId = (int) invocation.getArguments()[1];
-            if (lightStatesById.containsKey(lightId)) {
-                return lightStatesById.get(lightId);
-            }
-            return new LightState(0);
-        }).when(mIInputManagerMock).getLightState(eq(DEVICE_ID), anyInt());
-    }
-
-    @After
-    public void tearDown() {
-        InputManagerGlobal.clearInstance();
-    }
-
-    private InputDevice createInputDevice(int id) {
-        return new InputDevice.Builder()
-                .setId(id)
-                .setName("Test Device " + id)
-                .build();
-    }
-
-    private void mockLights(Light[] lights) throws Exception {
-        // Mock the Lights returned form InputManagerService
-        when(mIInputManagerMock.getLights(eq(DEVICE_ID))).thenReturn(
-                new ArrayList(Arrays.asList(lights)));
-    }
-
-    @Test
-    public void testGetInputDeviceLights() throws Exception {
-        InputDevice device = mInputManager.getInputDevice(DEVICE_ID);
-        assertNotNull(device);
-
-        Light[] mockedLights = {
-            new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
-                        Light.LIGHT_CAPABILITY_BRIGHTNESS),
-            new Light(2 /* id */, "Light2", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
-                        Light.LIGHT_CAPABILITY_COLOR_RGB),
-            new Light(3 /* id */, "Light3", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
-                        0 /* capabilities */)
-        };
-        mockLights(mockedLights);
-
-        LightsManager lightsManager = device.getLightsManager();
-        List<Light> lights = lightsManager.getLights();
-        verify(mIInputManagerMock).getLights(eq(DEVICE_ID));
-        assertEquals(lights, Arrays.asList(mockedLights));
-    }
-
-    @Test
-    public void testControlMultipleLights() throws Exception {
-        InputDevice device = mInputManager.getInputDevice(DEVICE_ID);
-        assertNotNull(device);
-
-        Light[] mockedLights = {
-            new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
-                        Light.LIGHT_CAPABILITY_COLOR_RGB),
-            new Light(2 /* id */, "Light2", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
-                        Light.LIGHT_CAPABILITY_COLOR_RGB),
-            new Light(3 /* id */, "Light3", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
-                        Light.LIGHT_CAPABILITY_COLOR_RGB),
-            new Light(4 /* id */, "Light4", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
-                        Light.LIGHT_CAPABILITY_COLOR_RGB)
-        };
-        mockLights(mockedLights);
-
-        LightsManager lightsManager = device.getLightsManager();
-        List<Light> lightList = lightsManager.getLights();
-        LightState[] states = new LightState[]{new LightState(0xf1), new LightState(0xf2),
-                new LightState(0xf3)};
-        // Open a session to request turn 3/4 lights on:
-        LightsManager.LightsSession session = lightsManager.openSession();
-        session.requestLights(new Builder()
-                .addLight(lightsManager.getLights().get(0), states[0])
-                .addLight(lightsManager.getLights().get(1), states[1])
-                .addLight(lightsManager.getLights().get(2), states[2])
-                .build());
-        IBinder token = session.getToken();
-
-        verify(mIInputManagerMock).openLightSession(eq(DEVICE_ID),
-                any(String.class), eq(token));
-        verify(mIInputManagerMock).setLightStates(eq(DEVICE_ID), eq(new int[]{1, 2, 3}),
-                eq(states), eq(token));
-
-        // Then all 3 should turn on.
-        assertThat(lightsManager.getLightState(lightsManager.getLights().get(0)).getColor())
-                .isEqualTo(0xf1);
-        assertThat(lightsManager.getLightState(lightsManager.getLights().get(1)).getColor())
-                .isEqualTo(0xf2);
-        assertThat(lightsManager.getLightState(lightsManager.getLights().get(2)).getColor())
-                .isEqualTo(0xf3);
-
-        // And the 4th should remain off.
-        assertThat(lightsManager.getLightState(lightsManager.getLights().get(3)).getColor())
-                .isEqualTo(0x00);
-
-        // close session
-        session.close();
-        verify(mIInputManagerMock).closeLightSession(eq(DEVICE_ID), eq(token));
-    }
-
-    @Test
-    public void testControlPlayerIdLight() throws Exception {
-        InputDevice device = mInputManager.getInputDevice(DEVICE_ID);
-        assertNotNull(device);
-
-        Light[] mockedLights = {
-                new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_PLAYER_ID,
-                            0 /* capabilities */),
-                new Light(2 /* id */, "Light2", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
-                            Light.LIGHT_CAPABILITY_COLOR_RGB | Light.LIGHT_CAPABILITY_BRIGHTNESS),
-                new Light(3 /* id */, "Light3", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
-                            Light.LIGHT_CAPABILITY_BRIGHTNESS)
-        };
-        mockLights(mockedLights);
-
-        LightsManager lightsManager = device.getLightsManager();
-        List<Light> lightList = lightsManager.getLights();
-        LightState[] states = new LightState[]{new LightState(0xf1, PLAYER_ID)};
-        // Open a session to request set Player ID light:
-        LightsManager.LightsSession session = lightsManager.openSession();
-        session.requestLights(new Builder()
-                .addLight(lightsManager.getLights().get(0), states[0])
-                .build());
-        IBinder token = session.getToken();
-
-        verify(mIInputManagerMock).openLightSession(eq(DEVICE_ID),
-                any(String.class), eq(token));
-        verify(mIInputManagerMock).setLightStates(eq(DEVICE_ID), eq(new int[]{1}),
-                eq(states), eq(token));
-
-        // Verify the light state
-        assertThat(lightsManager.getLightState(lightsManager.getLights().get(0)).getColor())
-                .isEqualTo(0xf1);
-        assertThat(lightsManager.getLightState(lightsManager.getLights().get(0)).getPlayerId())
-                .isEqualTo(PLAYER_ID);
-
-        // close session
-        session.close();
-        verify(mIInputManagerMock).closeLightSession(eq(DEVICE_ID), eq(token));
-    }
-
-    @Test
-    public void testLightCapabilities() throws Exception {
-        Light light = new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
-                Light.LIGHT_CAPABILITY_COLOR_RGB | Light.LIGHT_CAPABILITY_BRIGHTNESS);
-        assertThat(light.getType()).isEqualTo(Light.LIGHT_TYPE_INPUT);
-        assertThat(light.getCapabilities()).isEqualTo(Light.LIGHT_CAPABILITY_COLOR_RGB
-                | Light.LIGHT_CAPABILITY_BRIGHTNESS);
-        assertTrue(light.hasBrightnessControl());
-        assertTrue(light.hasRgbControl());
-    }
-
-    @Test
-    public void testLightsRequest() throws Exception {
-        Light light1 = new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
-                0 /* capabilities */);
-        Light light2 = new Light(2 /* id */, "Light2", 0 /* ordinal */, Light.LIGHT_TYPE_PLAYER_ID,
-                0 /* capabilities */);
-        LightState state1 = new LightState(0xf1);
-        LightState state2 = new LightState(0xf2, PLAYER_ID);
-        LightsRequest request = new Builder().addLight(light1, state1)
-                .addLight(light2, state2).build();
-
-        // Covers the LightsRequest.getLights
-        assertThat(request.getLights().size()).isEqualTo(2);
-        assertThat(request.getLights().get(0)).isEqualTo(1);
-        assertThat(request.getLights().get(1)).isEqualTo(2);
-
-        // Covers the LightsRequest.getLightStates
-        assertThat(request.getLightStates().size()).isEqualTo(2);
-        assertThat(request.getLightStates().get(0)).isEqualTo(state1);
-        assertThat(request.getLightStates().get(1)).isEqualTo(state2);
-
-        // Covers the LightsRequest.getLightsAndStates
-        assertThat(request.getLightsAndStates().size()).isEqualTo(2);
-        assertThat(request.getLightsAndStates().containsKey(light1)).isTrue();
-        assertThat(request.getLightsAndStates().get(light1)).isEqualTo(state1);
-        assertThat(request.getLightsAndStates().get(light2)).isEqualTo(state2);
-    }
-
-}
diff --git a/core/tests/coretests/src/android/hardware/input/InputDeviceSensorManagerTest.java b/core/tests/coretests/src/android/hardware/input/InputDeviceSensorManagerTest.java
deleted file mode 100644
index b33cfdd..0000000
--- a/core/tests/coretests/src/android/hardware/input/InputDeviceSensorManagerTest.java
+++ /dev/null
@@ -1,242 +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 android.hardware.input;
-
-import static junit.framework.TestCase.assertEquals;
-import static junit.framework.TestCase.assertNotNull;
-import static junit.framework.TestCase.assertTrue;
-import static junit.framework.TestCase.fail;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.ContextWrapper;
-import android.hardware.Sensor;
-import android.hardware.SensorEvent;
-import android.hardware.SensorEventListener;
-import android.hardware.SensorManager;
-import android.platform.test.annotations.Presubmit;
-import android.view.InputDevice;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.internal.annotations.GuardedBy;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.mockito.junit.MockitoRule;
-
-import java.util.List;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Tests for {@link InputDeviceSensorManager}.
- *
- * Build/Install/Run:
- * atest FrameworksCoreTests:InputDeviceSensorManagerTest
- */
-@Presubmit
-@RunWith(MockitoJUnitRunner.class)
-public class InputDeviceSensorManagerTest {
-    private static final String TAG = "InputDeviceSensorManagerTest";
-
-    private static final int DEVICE_ID = 1000;
-
-    @Rule public final MockitoRule mockito = MockitoJUnit.rule();
-
-    private InputManager mInputManager;
-    private IInputSensorEventListener mIInputSensorEventListener;
-    private final Object mLock = new Object();
-
-    @Mock private IInputManager mIInputManagerMock;
-
-    @Before
-    public void setUp() throws Exception {
-        final Context context = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
-        InputManagerGlobal.resetInstance(mIInputManagerMock);
-        mInputManager = new InputManager(context);
-        when(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(mInputManager);
-
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{DEVICE_ID});
-
-        when(mIInputManagerMock.getInputDevice(eq(DEVICE_ID))).thenReturn(
-                createInputDeviceWithSensor(DEVICE_ID));
-
-        when(mIInputManagerMock.getSensorList(eq(DEVICE_ID))).thenReturn(new InputSensorInfo[] {
-                createInputSensorInfo(DEVICE_ID, Sensor.TYPE_ACCELEROMETER),
-                createInputSensorInfo(DEVICE_ID, Sensor.TYPE_GYROSCOPE)});
-
-        when(mIInputManagerMock.enableSensor(eq(DEVICE_ID), anyInt(), anyInt(), anyInt()))
-                .thenReturn(true);
-
-        when(mIInputManagerMock.registerSensorListener(any())).thenReturn(true);
-    }
-
-    @After
-    public void tearDown() {
-        InputManagerGlobal.clearInstance();
-    }
-
-    private class InputTestSensorEventListener implements SensorEventListener {
-        @GuardedBy("mLock")
-        private final BlockingQueue<SensorEvent> mEvents = new LinkedBlockingQueue<>();
-        InputTestSensorEventListener() {
-            super();
-        }
-
-        public SensorEvent waitForSensorEvent() {
-            try {
-                return mEvents.poll(5, TimeUnit.SECONDS);
-            } catch (InterruptedException e) {
-                fail("unexpectedly interrupted while waiting for SensorEvent");
-                return null;
-            }
-        }
-
-        @Override
-        public void onSensorChanged(SensorEvent event) {
-            synchronized (mLock) {
-                try {
-                    mEvents.put(event);
-                } catch (InterruptedException ex) {
-                    fail("interrupted while adding a SensorEvent to the queue");
-                }
-            }
-        }
-
-        @Override
-        public void onAccuracyChanged(Sensor sensor, int accuracy) {
-        }
-    }
-
-    private InputDevice createInputDeviceWithSensor(int id) {
-        return new InputDevice.Builder()
-                .setId(id)
-                .setName("Test Device " + id)
-                .setHasSensor(true)
-                .build();
-    }
-
-    private InputSensorInfo createInputSensorInfo(int id, int type) {
-        InputSensorInfo info = new InputSensorInfo("name", "vendor", 0 /* version */,
-                0 /* handle */, type, 100.0f /*maxRange */, 0.02f /* resolution */,
-                0.8f /* power */, 1000 /* minDelay */, 0 /* fifoReservedEventCount */,
-                0 /* fifoMaxEventCount */, "" /* stringType */, "" /* requiredPermission */,
-                0 /* maxDelay */, 0 /* flags */, id);
-        return info;
-    }
-
-    private InputDevice getSensorDevice(int[] deviceIds) {
-        for (int deviceId : deviceIds) {
-            InputDevice device = mInputManager.getInputDevice(deviceId);
-            if (device.hasSensor()) {
-                return device;
-            }
-        }
-        return null;
-    }
-
-    @Test
-    public void getInputDeviceSensors_withExpectedType() throws Exception {
-        InputDevice device = getSensorDevice(mInputManager.getInputDeviceIds());
-        assertNotNull(device);
-
-        SensorManager sensorManager = device.getSensorManager();
-        List<Sensor> accelList = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
-        verify(mIInputManagerMock).getSensorList(eq(DEVICE_ID));
-        assertEquals(1, accelList.size());
-        assertEquals(DEVICE_ID, accelList.get(0).getId());
-        assertEquals(Sensor.TYPE_ACCELEROMETER, accelList.get(0).getType());
-
-        List<Sensor> gyroList = sensorManager.getSensorList(Sensor.TYPE_GYROSCOPE);
-        verify(mIInputManagerMock).getSensorList(eq(DEVICE_ID));
-        assertEquals(1, gyroList.size());
-        assertEquals(DEVICE_ID, gyroList.get(0).getId());
-        assertEquals(Sensor.TYPE_GYROSCOPE, gyroList.get(0).getType());
-
-    }
-
-    @Test
-    public void getInputDeviceSensors_withUnexpectedType() throws Exception {
-        InputDevice device = getSensorDevice(mInputManager.getInputDeviceIds());
-
-        assertNotNull(device);
-        SensorManager sensorManager = device.getSensorManager();
-
-        List<Sensor> gameRotationList = sensorManager.getSensorList(
-                Sensor.TYPE_GAME_ROTATION_VECTOR);
-        verify(mIInputManagerMock).getSensorList(eq(DEVICE_ID));
-        assertEquals(0, gameRotationList.size());
-
-        List<Sensor> gravityList = sensorManager.getSensorList(Sensor.TYPE_GRAVITY);
-        verify(mIInputManagerMock).getSensorList(eq(DEVICE_ID));
-        assertEquals(0, gravityList.size());
-    }
-
-    @Test
-    public void testInputDeviceSensorListener() throws Exception {
-        InputDevice device = getSensorDevice(mInputManager.getInputDeviceIds());
-        assertNotNull(device);
-
-        SensorManager sensorManager = device.getSensorManager();
-        Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
-        assertEquals(Sensor.TYPE_ACCELEROMETER, sensor.getType());
-
-        doAnswer(invocation -> {
-            mIInputSensorEventListener = invocation.getArgument(0);
-            assertNotNull(mIInputSensorEventListener);
-            return true;
-        }).when(mIInputManagerMock).registerSensorListener(any());
-
-        InputTestSensorEventListener listener = new InputTestSensorEventListener();
-        assertTrue(sensorManager.registerListener(listener, sensor,
-                SensorManager.SENSOR_DELAY_NORMAL));
-        verify(mIInputManagerMock).registerSensorListener(any());
-        verify(mIInputManagerMock).enableSensor(eq(DEVICE_ID), eq(sensor.getType()),
-                anyInt(), anyInt());
-
-        float[] values = new float[] {0.12f, 9.8f, 0.2f};
-        mIInputSensorEventListener.onInputSensorChanged(DEVICE_ID, Sensor.TYPE_ACCELEROMETER,
-                SensorManager.SENSOR_STATUS_ACCURACY_HIGH,  /* timestamp */ 0x1234abcd, values);
-
-        SensorEvent event = listener.waitForSensorEvent();
-        assertNotNull(event);
-        assertEquals(0x1234abcd, event.timestamp);
-        assertEquals(values.length, event.values.length);
-        for (int i = 0; i < values.length; i++) {
-            assertEquals(values[i], event.values[i], 0.001f);
-        }
-
-        sensorManager.unregisterListener(listener);
-        verify(mIInputManagerMock).disableSensor(eq(DEVICE_ID), eq(sensor.getType()));
-    }
-
-}
diff --git a/core/tests/coretests/src/android/hardware/input/InputManagerTest.kt b/core/tests/coretests/src/android/hardware/input/InputManagerTest.kt
deleted file mode 100644
index 2ebe362..0000000
--- a/core/tests/coretests/src/android/hardware/input/InputManagerTest.kt
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.hardware.input
-
-import android.content.Context
-import android.content.ContextWrapper
-import android.content.res.Resources
-import android.platform.test.annotations.Presubmit
-import android.view.Display
-import android.view.DisplayInfo
-import android.view.InputDevice
-import androidx.test.core.app.ApplicationProvider
-import org.junit.After
-import org.junit.Assert.assertNotNull
-import org.junit.Assert.assertEquals
-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
-import org.mockito.Mockito.eq
-import org.mockito.Mockito.`when`
-import org.mockito.junit.MockitoJUnit
-import org.mockito.junit.MockitoJUnitRunner
-
-/**
- * Tests for [InputManager].
- *
- * Build/Install/Run:
- * atest FrameworksCoreTests:InputManagerTest
- */
-@Presubmit
-@RunWith(MockitoJUnitRunner::class)
-class InputManagerTest {
-
-    companion object {
-        const val DEVICE_ID = 42
-        const val SECOND_DEVICE_ID = 96
-        const val THIRD_DEVICE_ID = 99
-    }
-
-    @get:Rule
-    val rule = MockitoJUnit.rule()!!
-
-    private lateinit var devicesChangedListener: IInputDevicesChangedListener
-    private val deviceGenerationMap = mutableMapOf<Int /*deviceId*/, Int /*generation*/>()
-    private lateinit var context: Context
-    private lateinit var inputManager: InputManager
-
-    @Mock
-    private lateinit var iInputManager: IInputManager
-
-    @Before
-    fun setUp() {
-        context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
-        InputManagerGlobal.resetInstance(iInputManager)
-        inputManager = InputManager(context)
-        `when`(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(inputManager)
-        `when`(iInputManager.inputDeviceIds).then {
-            deviceGenerationMap.keys.toIntArray()
-        }
-    }
-
-    @After
-    fun tearDown() {
-        InputManagerGlobal.clearInstance()
-    }
-
-    private fun notifyDeviceChanged(
-        deviceId: Int,
-        associatedDisplayId: Int,
-        usiVersion: HostUsiVersion?,
-    ) {
-        val generation = deviceGenerationMap[deviceId]?.plus(1)
-            ?: throw IllegalArgumentException("Device $deviceId was never added!")
-        deviceGenerationMap[deviceId] = generation
-
-        `when`(iInputManager.getInputDevice(deviceId))
-            .thenReturn(createInputDevice(deviceId, associatedDisplayId, usiVersion, generation))
-        val list = deviceGenerationMap.flatMap { listOf(it.key, it.value) }
-        if (::devicesChangedListener.isInitialized) {
-            devicesChangedListener.onInputDevicesChanged(list.toIntArray())
-        }
-    }
-
-    private fun addInputDevice(
-        deviceId: Int,
-        associatedDisplayId: Int,
-        usiVersion: HostUsiVersion?,
-    ) {
-        deviceGenerationMap[deviceId] = 0
-        notifyDeviceChanged(deviceId, associatedDisplayId, usiVersion)
-    }
-
-    @Test
-    fun testUsiVersionDisplayAssociation() {
-        addInputDevice(DEVICE_ID, Display.DEFAULT_DISPLAY, null)
-        addInputDevice(SECOND_DEVICE_ID, Display.INVALID_DISPLAY, HostUsiVersion(9, 8))
-        addInputDevice(THIRD_DEVICE_ID, 42, HostUsiVersion(3, 1))
-
-        val usiVersion = inputManager.getHostUsiVersion(createDisplay(42))
-        assertNotNull(usiVersion)
-        assertEquals(3, usiVersion!!.majorVersion)
-        assertEquals(1, usiVersion.minorVersion)
-    }
-
-    @Test
-    fun testUsiVersionFallBackToDisplayConfig() {
-        addInputDevice(DEVICE_ID, Display.DEFAULT_DISPLAY, null)
-
-        `when`(iInputManager.getHostUsiVersionFromDisplayConfig(eq(42)))
-            .thenReturn(HostUsiVersion(9, 8))
-        val usiVersion = inputManager.getHostUsiVersion(createDisplay(42))
-        assertEquals(HostUsiVersion(9, 8), usiVersion)
-    }
-}
-
-private fun createInputDevice(
-    deviceId: Int,
-    associatedDisplayId: Int,
-    usiVersion: HostUsiVersion? = null,
-    generation: Int = -1,
-): InputDevice =
-    InputDevice.Builder()
-        .setId(deviceId)
-        .setName("Device $deviceId")
-        .setDescriptor("descriptor $deviceId")
-        .setAssociatedDisplayId(associatedDisplayId)
-        .setUsiVersion(usiVersion)
-        .setGeneration(generation)
-        .build()
-
-private fun createDisplay(displayId: Int): Display {
-    val res: Resources? = null
-    return Display(null /* global */, displayId, DisplayInfo(), res)
-}
diff --git a/core/tests/coretests/src/android/hardware/input/KeyboardBacklightListenerTest.kt b/core/tests/coretests/src/android/hardware/input/KeyboardBacklightListenerTest.kt
deleted file mode 100644
index ce816ab..0000000
--- a/core/tests/coretests/src/android/hardware/input/KeyboardBacklightListenerTest.kt
+++ /dev/null
@@ -1,173 +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 android.hardware.input
-
-import android.content.Context
-import android.content.ContextWrapper
-import android.os.Handler
-import android.os.HandlerExecutor
-import android.os.test.TestLooper
-import android.platform.test.annotations.Presubmit
-import androidx.test.core.app.ApplicationProvider
-import com.android.server.testutils.any
-import org.junit.After
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.Mock
-import org.mockito.Mockito
-import org.mockito.Mockito.doAnswer
-import org.mockito.Mockito.`when`
-import org.mockito.junit.MockitoJUnit
-import org.mockito.junit.MockitoJUnitRunner
-import java.util.concurrent.Executor
-import kotlin.test.assertEquals
-import kotlin.test.assertNotNull
-import kotlin.test.assertNull
-import kotlin.test.fail
-
-/**
- * Tests for [InputManager.KeyboardBacklightListener].
- *
- * Build/Install/Run:
- * atest FrameworksCoreTests:KeyboardBacklightListenerTest
- */
-@Presubmit
-@RunWith(MockitoJUnitRunner::class)
-class KeyboardBacklightListenerTest {
-    @get:Rule
-    val rule = MockitoJUnit.rule()!!
-
-    private lateinit var testLooper: TestLooper
-    private var registeredListener: IKeyboardBacklightListener? = null
-    private lateinit var executor: Executor
-    private lateinit var context: Context
-    private lateinit var inputManager: InputManager
-
-    @Mock
-    private lateinit var iInputManagerMock: IInputManager
-
-    @Before
-    fun setUp() {
-        context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
-        InputManagerGlobal.resetInstance(iInputManagerMock)
-        testLooper = TestLooper()
-        executor = HandlerExecutor(Handler(testLooper.looper))
-        registeredListener = null
-        inputManager = InputManager(context)
-        `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE)))
-                .thenReturn(inputManager)
-
-        // Handle keyboard backlight listener registration.
-        doAnswer {
-            val listener = it.getArgument(0) as IKeyboardBacklightListener
-            if (registeredListener != null &&
-                    registeredListener!!.asBinder() != listener.asBinder()) {
-                // There can only be one registered keyboard backlight listener per process.
-                fail("Trying to register a new listener when one already exists")
-            }
-            registeredListener = listener
-            null
-        }.`when`(iInputManagerMock).registerKeyboardBacklightListener(any())
-
-        // Handle keyboard backlight listener being unregistered.
-        doAnswer {
-            val listener = it.getArgument(0) as IKeyboardBacklightListener
-            if (registeredListener == null ||
-                    registeredListener!!.asBinder() != listener.asBinder()) {
-                fail("Trying to unregister a listener that is not registered")
-            }
-            registeredListener = null
-            null
-        }.`when`(iInputManagerMock).unregisterKeyboardBacklightListener(any())
-    }
-
-    @After
-    fun tearDown() {
-        InputManagerGlobal.clearInstance()
-    }
-
-    private fun notifyKeyboardBacklightChanged(
-        deviceId: Int,
-        brightnessLevel: Int,
-        maxBrightnessLevel: Int = 10,
-        isTriggeredByKeyPress: Boolean = true
-    ) {
-        registeredListener!!.onBrightnessChanged(deviceId, IKeyboardBacklightState().apply {
-            this.brightnessLevel = brightnessLevel
-            this.maxBrightnessLevel = maxBrightnessLevel
-        }, isTriggeredByKeyPress)
-    }
-
-    @Test
-    fun testListenerIsNotifiedCorrectly() {
-        var callbackCount = 0
-
-        // Add a keyboard backlight listener
-        inputManager.registerKeyboardBacklightListener(executor) {
-                deviceId: Int,
-                keyboardBacklightState: KeyboardBacklightState,
-                isTriggeredByKeyPress: Boolean ->
-            callbackCount++
-            assertEquals(1, deviceId)
-            assertEquals(2, keyboardBacklightState.brightnessLevel)
-            assertEquals(10, keyboardBacklightState.maxBrightnessLevel)
-            assertEquals(true, isTriggeredByKeyPress)
-        }
-
-        // Adding the listener should register the callback with InputManagerService.
-        assertNotNull(registeredListener)
-
-        // Notifying keyboard backlight change will notify the listener.
-        notifyKeyboardBacklightChanged(1 /*deviceId*/, 2 /* brightnessLevel */)
-        testLooper.dispatchNext()
-        assertEquals(1, callbackCount)
-    }
-
-    @Test
-    fun testMultipleListeners() {
-        // Set up two callbacks.
-        var callbackCount1 = 0
-        var callbackCount2 = 0
-        val callback1 = InputManager.KeyboardBacklightListener { _, _, _ -> callbackCount1++ }
-        val callback2 = InputManager.KeyboardBacklightListener { _, _, _ -> callbackCount2++ }
-
-        // Add both keyboard backlight listeners
-        inputManager.registerKeyboardBacklightListener(executor, callback1)
-        inputManager.registerKeyboardBacklightListener(executor, callback2)
-
-        // Adding the listeners should register the callback with InputManagerService.
-        assertNotNull(registeredListener)
-
-        // Notifying keyboard backlight change trigger the both callbacks.
-        notifyKeyboardBacklightChanged(1 /*deviceId*/, 1 /* brightnessLevel */)
-        testLooper.dispatchAll()
-        assertEquals(1, callbackCount1)
-        assertEquals(1, callbackCount2)
-
-        inputManager.unregisterKeyboardBacklightListener(callback2)
-        // Notifying keyboard backlight change should still trigger callback1.
-        notifyKeyboardBacklightChanged(1 /*deviceId*/, 2 /* brightnessLevel */)
-        testLooper.dispatchAll()
-        assertEquals(2, callbackCount1)
-
-        // Unregister all listeners, should remove registered listener from InputManagerService
-        inputManager.unregisterKeyboardBacklightListener(callback1)
-        assertNull(registeredListener)
-    }
-}
diff --git a/core/tests/coretests/src/android/os/BinderProxyCountingTest.java b/core/tests/coretests/src/android/os/BinderProxyCountingTest.java
index ce6ad87..2089c6c 100644
--- a/core/tests/coretests/src/android/os/BinderProxyCountingTest.java
+++ b/core/tests/coretests/src/android/os/BinderProxyCountingTest.java
@@ -24,12 +24,12 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
-import android.support.test.uiautomator.UiDevice;
 import android.util.Log;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.LargeTest;
 import androidx.test.runner.AndroidJUnit4;
+import androidx.test.uiautomator.UiDevice;
 
 import com.android.frameworks.coretests.aidl.IBpcCallbackObserver;
 import com.android.frameworks.coretests.aidl.IBpcTestAppCmdService;
diff --git a/core/tests/coretests/src/android/os/CombinedVibrationTest.java b/core/tests/coretests/src/android/os/CombinedVibrationTest.java
deleted file mode 100644
index 508856b..0000000
--- a/core/tests/coretests/src/android/os/CombinedVibrationTest.java
+++ /dev/null
@@ -1,330 +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 android.os;
-
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
-
-import static org.testng.Assert.assertThrows;
-
-import android.platform.test.annotations.Presubmit;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-
-@Presubmit
-@RunWith(JUnit4.class)
-public class CombinedVibrationTest {
-    private static final VibrationEffect VALID_EFFECT = VibrationEffect.createOneShot(10, 255);
-    private static final VibrationEffect INVALID_EFFECT = new VibrationEffect.Composed(
-            new ArrayList<>(), 0);
-
-    @Test
-    public void testValidateMono() {
-        CombinedVibration.createParallel(VALID_EFFECT);
-
-        assertThrows(IllegalArgumentException.class,
-                () -> CombinedVibration.createParallel(INVALID_EFFECT));
-    }
-
-    @Test
-    public void testValidateStereo() {
-        CombinedVibration.startParallel()
-                .addVibrator(0, VALID_EFFECT)
-                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
-                .combine();
-        CombinedVibration.startParallel()
-                .addVibrator(0, INVALID_EFFECT)
-                .addVibrator(0, VALID_EFFECT)
-                .combine();
-
-        assertThrows(IllegalArgumentException.class,
-                () -> CombinedVibration.startParallel()
-                        .addVibrator(0, INVALID_EFFECT)
-                        .combine());
-    }
-
-    @Test
-    public void testValidateSequential() {
-        CombinedVibration.startSequential()
-                .addNext(0, VALID_EFFECT)
-                .addNext(CombinedVibration.createParallel(VALID_EFFECT))
-                .combine();
-        CombinedVibration.startSequential()
-                .addNext(0, VALID_EFFECT)
-                .addNext(0, VALID_EFFECT, 100)
-                .combine();
-        CombinedVibration.startSequential()
-                .addNext(CombinedVibration.startSequential()
-                        .addNext(0, VALID_EFFECT)
-                        .combine())
-                .combine();
-
-        assertThrows(IllegalArgumentException.class,
-                () -> CombinedVibration.startSequential()
-                        .addNext(0, VALID_EFFECT, -1)
-                        .combine());
-        assertThrows(IllegalArgumentException.class,
-                () -> CombinedVibration.startSequential()
-                        .addNext(0, INVALID_EFFECT)
-                        .combine());
-    }
-
-    @Test
-    public void testNestedSequentialAccumulatesDelays() {
-        CombinedVibration.Sequential combined =
-                (CombinedVibration.Sequential) CombinedVibration.startSequential()
-                        .addNext(CombinedVibration.startSequential()
-                                        .addNext(0, VALID_EFFECT, /* delay= */ 100)
-                                        .addNext(1, VALID_EFFECT, /* delay= */ 100)
-                                        .combine(),
-                                /* delay= */ 10)
-                        .addNext(CombinedVibration.startSequential()
-                                .addNext(0, VALID_EFFECT, /* delay= */ 100)
-                                .combine())
-                        .addNext(CombinedVibration.startSequential()
-                                        .addNext(0, VALID_EFFECT)
-                                        .addNext(0, VALID_EFFECT, /* delay= */ 100)
-                                        .combine(),
-                                /* delay= */ 10)
-                        .combine();
-
-        assertEquals(Arrays.asList(110, 100, 100, 10, 100), combined.getDelays());
-    }
-
-    @Test
-    public void testCombineEmptyFails() {
-        assertThrows(IllegalStateException.class,
-                () -> CombinedVibration.startParallel().combine());
-        assertThrows(IllegalStateException.class,
-                () -> CombinedVibration.startSequential().combine());
-    }
-
-    @Test
-    public void testDurationMono() {
-        assertEquals(1, CombinedVibration.createParallel(
-                VibrationEffect.createOneShot(1, 1)).getDuration());
-        assertEquals(-1, CombinedVibration.createParallel(
-                VibrationEffect.get(VibrationEffect.EFFECT_CLICK)).getDuration());
-        assertEquals(-1, CombinedVibration.createParallel(
-                        VibrationEffect.startComposition()
-                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 100)
-                                .compose())
-                .getDuration());
-        assertEquals(Long.MAX_VALUE, CombinedVibration.createParallel(
-                VibrationEffect.createWaveform(
-                        new long[]{1, 2, 3}, new int[]{1, 2, 3}, 0)).getDuration());
-    }
-
-    @Test
-    public void testDurationStereo() {
-        assertEquals(6, CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.createOneShot(1, 1))
-                .addVibrator(2,
-                        VibrationEffect.createWaveform(new long[]{1, 2, 3}, new int[]{1, 2, 3}, -1))
-                .combine()
-                .getDuration());
-        assertEquals(-1, CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addVibrator(2,
-                        VibrationEffect.createWaveform(new long[]{1, 2, 3}, new int[]{1, 2, 3}, -1))
-                .combine()
-                .getDuration());
-        assertEquals(Long.MAX_VALUE, CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addVibrator(2,
-                        VibrationEffect.createWaveform(new long[]{1, 2, 3}, new int[]{1, 2, 3}, 0))
-                .combine()
-                .getDuration());
-    }
-
-    @Test
-    public void testDurationSequential() {
-        assertEquals(26, CombinedVibration.startSequential()
-                .addNext(1, VibrationEffect.createOneShot(10, 10), 10)
-                .addNext(2,
-                        VibrationEffect.createWaveform(new long[]{1, 2, 3}, new int[]{1, 2, 3}, -1))
-                .combine()
-                .getDuration());
-        assertEquals(-1, CombinedVibration.startSequential()
-                .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addNext(2,
-                        VibrationEffect.createWaveform(new long[]{1, 2, 3}, new int[]{1, 2, 3}, -1))
-                .combine()
-                .getDuration());
-        assertEquals(Long.MAX_VALUE, CombinedVibration.startSequential()
-                .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addNext(2,
-                        VibrationEffect.createWaveform(new long[]{1, 2, 3}, new int[]{1, 2, 3}, 0))
-                .combine()
-                .getDuration());
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidateMono() {
-        assertTrue(CombinedVibration.createParallel(
-                VibrationEffect.createOneShot(1, 1)).isHapticFeedbackCandidate());
-        assertTrue(CombinedVibration.createParallel(
-                VibrationEffect.get(VibrationEffect.EFFECT_CLICK)).isHapticFeedbackCandidate());
-        assertTrue(CombinedVibration.createParallel(
-                        VibrationEffect.startComposition()
-                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 100)
-                                .compose())
-                .isHapticFeedbackCandidate());
-        // Too long to be classified as a haptic feedback.
-        assertFalse(CombinedVibration.createParallel(
-                VibrationEffect.createOneShot(10_000, 1)).isHapticFeedbackCandidate());
-        // Repeating vibrations should not be classified as a haptic feedback.
-        assertFalse(CombinedVibration.createParallel(
-                VibrationEffect.createWaveform(new long[]{1}, new int[]{1}, 0))
-                .isHapticFeedbackCandidate());
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidateStereo() {
-        assertTrue(CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.createOneShot(1, 1))
-                .addVibrator(2, VibrationEffect.createWaveform(new long[]{6}, new int[]{1}, -1))
-                .combine()
-                .isHapticFeedbackCandidate());
-        assertTrue(CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addVibrator(2,
-                        VibrationEffect.startComposition()
-                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 100)
-                                .compose())
-                .combine()
-                .isHapticFeedbackCandidate());
-        // Repeating vibrations should not be classified as a haptic feedback.
-        assertFalse(CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addVibrator(2, VibrationEffect.createWaveform(new long[]{1}, new int[]{1}, 0))
-                .combine()
-                .isHapticFeedbackCandidate());
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidateSequential() {
-        assertTrue(CombinedVibration.startSequential()
-                .addNext(1, VibrationEffect.createOneShot(10, 10), 10)
-                .addNext(2, VibrationEffect.createWaveform(new long[]{5}, new int[]{1}, -1))
-                .combine()
-                .isHapticFeedbackCandidate());
-        assertTrue(CombinedVibration.startSequential()
-                .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addNext(2,
-                        VibrationEffect.startComposition()
-                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SLOW_RISE)
-                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_FALL)
-                                .compose())
-                .combine()
-                .isHapticFeedbackCandidate());
-        // Repeating vibrations should not be classified as a haptic feedback.
-        assertFalse(CombinedVibration.startSequential()
-                .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addNext(2, VibrationEffect.createWaveform(new long[]{1}, new int[]{1}, 0))
-                .combine()
-                .isHapticFeedbackCandidate());
-        // Too many effects to be classified as a haptic feedback.
-        assertFalse(CombinedVibration.startSequential()
-                .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addNext(2, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
-                .addNext(3, VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK))
-                .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_THUD))
-                .combine()
-                .isHapticFeedbackCandidate());
-    }
-
-    @Test
-    public void testHasVibratorMono_returnsTrueForAnyVibrator() {
-        CombinedVibration effect = CombinedVibration.createParallel(
-                VibrationEffect.get(VibrationEffect.EFFECT_CLICK));
-        assertTrue(effect.hasVibrator(0));
-        assertTrue(effect.hasVibrator(1));
-    }
-
-    @Test
-    public void testHasVibratorStereo_returnsOnlyTheIdsSet() {
-        CombinedVibration effect = CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .combine();
-        assertFalse(effect.hasVibrator(0));
-        assertTrue(effect.hasVibrator(1));
-        assertFalse(effect.hasVibrator(2));
-    }
-
-    @Test
-    public void testHasVibratorSequential_returnsNestedVibrators() {
-        CombinedVibration effect = CombinedVibration.startSequential()
-                .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addNext(CombinedVibration.startParallel()
-                        .addVibrator(2, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
-                        .combine())
-                .combine();
-        assertFalse(effect.hasVibrator(0));
-        assertTrue(effect.hasVibrator(1));
-        assertTrue(effect.hasVibrator(2));
-    }
-
-    @Test
-    public void testSerializationMono() {
-        CombinedVibration original = CombinedVibration.createParallel(VALID_EFFECT);
-
-        Parcel parcel = Parcel.obtain();
-        original.writeToParcel(parcel, 0);
-        parcel.setDataPosition(0);
-        CombinedVibration restored = CombinedVibration.CREATOR.createFromParcel(parcel);
-        assertEquals(original, restored);
-    }
-
-    @Test
-    public void testSerializationStereo() {
-        CombinedVibration original = CombinedVibration.startParallel()
-                .addVibrator(0, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addVibrator(1, VibrationEffect.createOneShot(10, 255))
-                .combine();
-
-        Parcel parcel = Parcel.obtain();
-        original.writeToParcel(parcel, 0);
-        parcel.setDataPosition(0);
-        CombinedVibration restored = CombinedVibration.CREATOR.createFromParcel(parcel);
-        assertEquals(original, restored);
-    }
-
-    @Test
-    public void testSerializationSequential() {
-        CombinedVibration original = CombinedVibration.startSequential()
-                .addNext(0, VALID_EFFECT)
-                .addNext(CombinedVibration.createParallel(VALID_EFFECT))
-                .addNext(0, VibrationEffect.get(VibrationEffect.EFFECT_CLICK), 100)
-                .combine();
-
-        Parcel parcel = Parcel.obtain();
-        original.writeToParcel(parcel, 0);
-        parcel.setDataPosition(0);
-        CombinedVibration restored = CombinedVibration.CREATOR.createFromParcel(parcel);
-        assertEquals(original, restored);
-    }
-}
diff --git a/core/tests/coretests/src/android/os/ExternalVibrationTest.java b/core/tests/coretests/src/android/os/ExternalVibrationTest.java
deleted file mode 100644
index 3b872d5..0000000
--- a/core/tests/coretests/src/android/os/ExternalVibrationTest.java
+++ /dev/null
@@ -1,47 +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 android.os;
-
-import static junit.framework.Assert.assertEquals;
-
-import static org.mockito.Mockito.mock;
-
-import android.media.AudioAttributes;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class ExternalVibrationTest {
-    @Test
-    public void testSerialization() {
-        AudioAttributes audio = new AudioAttributes.Builder().build();
-        IExternalVibrationController controller = mock(IExternalVibrationController.class);
-        ExternalVibration original = new ExternalVibration(
-                123, // uid
-                "pkg",
-                audio,
-                controller);
-        Parcel p = Parcel.obtain();
-        original.writeToParcel(p, 0);
-        p.setDataPosition(0);
-        ExternalVibration restored = ExternalVibration.CREATOR.createFromParcel(p);
-        assertEquals(original, restored);
-    }
-}
-
diff --git a/core/tests/coretests/src/android/os/PerformanceHintManagerTest.java b/core/tests/coretests/src/android/os/PerformanceHintManagerTest.java
index 7eefbbc..b0826ab 100644
--- a/core/tests/coretests/src/android/os/PerformanceHintManagerTest.java
+++ b/core/tests/coretests/src/android/os/PerformanceHintManagerTest.java
@@ -69,6 +69,24 @@
     }
 
     @Test
+    public void testCreateHintSession_noTids() {
+        assertThrows(NullPointerException.class, () -> {
+            mPerformanceHintManager.createHintSession(
+                    null, DEFAULT_TARGET_NS);
+        });
+        assertThrows(IllegalArgumentException.class, () -> {
+            mPerformanceHintManager.createHintSession(
+                    new int[]{}, DEFAULT_TARGET_NS);
+        });
+    }
+
+    @Test
+    public void testCreateHintSession_invalidTids() {
+        assertNull(mPerformanceHintManager.createHintSession(
+                new int[]{-1}, DEFAULT_TARGET_NS));
+    }
+
+    @Test
     public void testGetPreferredUpdateRateNanos() {
         if (createSession() != null) {
             assertTrue(mPerformanceHintManager.getPreferredUpdateRateNanos() > 0);
@@ -139,11 +157,20 @@
     }
 
     @Test
-    public void testSetThreadsWithIllegalArgument() {
+    public void testSetThreads_emptyTids() {
         Session session = createSession();
         assumeNotNull(session);
         assertThrows(IllegalArgumentException.class, () -> {
-            session.setThreads(new int[] { });
+            session.setThreads(new int[]{});
+        });
+    }
+
+    @Test
+    public void testSetThreads_invalidTids() {
+        Session session = createSession();
+        assumeNotNull(session);
+        assertThrows(SecurityException.class, () -> {
+            session.setThreads(new int[]{-1});
         });
     }
 }
diff --git a/core/tests/coretests/src/android/os/PowerManagerTest.java b/core/tests/coretests/src/android/os/PowerManagerTest.java
index 9f85d6f..21d1dbb 100644
--- a/core/tests/coretests/src/android/os/PowerManagerTest.java
+++ b/core/tests/coretests/src/android/os/PowerManagerTest.java
@@ -24,11 +24,11 @@
 import static org.mockito.Mockito.verify;
 
 import android.content.Context;
-import android.support.test.uiautomator.UiDevice;
 import android.test.AndroidTestCase;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.SmallTest;
+import androidx.test.uiautomator.UiDevice;
 
 import org.junit.After;
 import org.junit.Test;
diff --git a/core/tests/coretests/src/android/os/VibrationEffectTest.java b/core/tests/coretests/src/android/os/VibrationEffectTest.java
deleted file mode 100644
index 627feab..0000000
--- a/core/tests/coretests/src/android/os/VibrationEffectTest.java
+++ /dev/null
@@ -1,947 +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 android.os;
-
-import static android.os.VibrationEffect.DEFAULT_AMPLITUDE;
-import static android.os.VibrationEffect.VibrationParameter.targetAmplitude;
-import static android.os.VibrationEffect.VibrationParameter.targetFrequency;
-
-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;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import static org.testng.Assert.assertThrows;
-
-import android.content.ContentInterface;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.res.Resources;
-import android.hardware.vibrator.IVibrator;
-import android.net.Uri;
-import android.os.SystemVibrator;
-import android.os.VibrationEffect.Composition.UnreachableAfterRepeatingIndefinitelyException;
-import android.os.Vibrator;
-import android.os.VibratorInfo;
-import android.os.vibrator.PrebakedSegment;
-import android.os.vibrator.PrimitiveSegment;
-import android.os.vibrator.StepSegment;
-import android.platform.test.annotations.Presubmit;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.internal.R;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import java.time.Duration;
-import java.util.Arrays;
-
-@Presubmit
-@RunWith(MockitoJUnitRunner.class)
-public class VibrationEffectTest {
-
-    private static final String RINGTONE_URI_1 = "content://test/system/ringtone_1";
-    private static final String RINGTONE_URI_2 = "content://test/system/ringtone_2";
-    private static final String RINGTONE_URI_3 = "content://test/system/ringtone_3";
-    private static final String UNKNOWN_URI = "content://test/system/other_audio";
-
-    private static final long TEST_TIMING = 100;
-    private static final int TEST_AMPLITUDE = 100;
-    private static final long[] TEST_TIMINGS = new long[] { 100, 100, 200 };
-    private static final int[] TEST_AMPLITUDES =
-            new int[] { 255, 0, DEFAULT_AMPLITUDE };
-
-    private static final VibrationEffect TEST_ONE_SHOT =
-            VibrationEffect.createOneShot(TEST_TIMING, TEST_AMPLITUDE);
-    private static final VibrationEffect DEFAULT_ONE_SHOT =
-            VibrationEffect.createOneShot(TEST_TIMING, DEFAULT_AMPLITUDE);
-    private static final VibrationEffect TEST_WAVEFORM =
-            VibrationEffect.createWaveform(TEST_TIMINGS, TEST_AMPLITUDES, -1);
-
-    @Test
-    public void computeLegacyPattern_timingsAndAmplitudes_zeroAmplitudesOnEvenIndices() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1, 2, 3, 4, 5},
-                /* amplitudes= */ new int[] {0, DEFAULT_AMPLITUDE, 0, DEFAULT_AMPLITUDE, 0},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {1, 2, 3, 4, 5};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsAndAmplitudes_zeroAmplitudesOnOddIndices() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1, 2, 3, 4, 5},
-                /* amplitudes= */ new int[] {
-                        DEFAULT_AMPLITUDE, 0, DEFAULT_AMPLITUDE, 0, DEFAULT_AMPLITUDE},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {0, 1, 2, 3, 4, 5};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsAndAmplitudes_zeroAmplitudesAtTheStart() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1, 2, 3},
-                /* amplitudes= */ new int[] {0, 0, DEFAULT_AMPLITUDE},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {3, 3};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsAndAmplitudes_zeroAmplitudesAtTheEnd() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1, 2, 3},
-                /* amplitudes= */ new int[] {DEFAULT_AMPLITUDE, 0, 0},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {0, 1, 5};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsAndAmplitudes_allDefaultAmplitudes() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1, 2, 3},
-                /* amplitudes= */ new int[] {
-                        DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {0, 6};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsAndAmplitudes_allZeroAmplitudes() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1, 2, 3},
-                /* amplitudes= */ new int[] {0, 0, 0},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {6};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsAndAmplitudes_sparsedZeroAmplitudes() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1, 2, 3, 4, 5, 6, 7},
-                /* amplitudes= */ new int[] {
-                        0, 0, DEFAULT_AMPLITUDE, 0, DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE, 0},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {3, 3, 4, 11, 7};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsAndAmplitudes_oneTimingWithDefaultAmplitude() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1},
-                /* amplitudes= */ new int[] {DEFAULT_AMPLITUDE},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {0, 1};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsAndAmplitudes_oneTimingWithZeroAmplitude() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1},
-                /* amplitudes= */ new int[] {0},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {1};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsAndAmplitudes_repeating() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1, 2, 3, 4, 5},
-                /* amplitudes= */ new int[] {0, DEFAULT_AMPLITUDE, 0, DEFAULT_AMPLITUDE, 0},
-                /* repeatIndex= */ 0);
-
-        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
-
-        effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1, 2, 3, 4, 5},
-                /* amplitudes= */ new int[] {0, DEFAULT_AMPLITUDE, 0, DEFAULT_AMPLITUDE, 0},
-                /* repeatIndex= */ 3);
-
-        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
-
-        effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1, 2},
-                /* amplitudes= */ new int[] {DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE},
-                /* repeatIndex= */ 1);
-
-        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsAndAmplitudes_badAmplitude() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1},
-                /* amplitudes= */ new int[] {200},
-                /* repeatIndex= */ -1);
-
-        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsOnly_nonZeroTimings() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1, 2, 3},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {1, 2, 3};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsOnly_oneValue() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {5},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {5};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsOnly_zeroesAtTheEnd() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1, 2, 3, 0, 0},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {1, 2, 3, 0, 0};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsOnly_zeroesAtTheStart() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {0, 0, 1, 2, 3},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {0, 0, 1, 2, 3};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsOnly_zeroesAtTheMiddle() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1, 2, 0, 0, 3, 4, 5},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {1, 2, 0, 0, 3, 4, 5};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsOnly_sparsedZeroes() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {0, 1, 2, 0, 0, 3, 4, 5, 0},
-                /* repeatIndex= */ -1);
-        long[] expectedPattern = new long[] {0, 1, 2, 0, 0, 3, 4, 5, 0};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_timingsOnly_repeating() {
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {0, 1, 2, 0, 0, 3, 4, 5, 0},
-                /* repeatIndex= */ 0);
-
-        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
-
-        effect = VibrationEffect.createWaveform(
-                /* timings= */ new long[] {1, 2, 3, 4},
-                /* repeatIndex= */ 2);
-
-        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_notPatternPased() {
-        VibrationEffect effect = VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK);
-
-        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_oneShot_defaultAmplitude() {
-        VibrationEffect effect = VibrationEffect.createOneShot(
-                /* milliseconds= */ 5, /* ampliutde= */ DEFAULT_AMPLITUDE);
-        long[] expectedPattern = new long[] {0, 5};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_oneShot_badAmplitude() {
-        VibrationEffect effect = VibrationEffect.createOneShot(
-                /* milliseconds= */ 5, /* ampliutde= */ 50);
-
-        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_composition_noOffDuration() {
-        VibrationEffect effect = VibrationEffect.startComposition()
-                .addEffect(
-                        VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {5},
-                                /* repeatIndex= */ -1))
-                .addEffect(
-                        VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {2, 3},
-                                /* repeatIndex= */ -1))
-                .addEffect(
-                        VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {10, 20},
-                                /* amplitudes= */ new int[] {DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE},
-                                /* repeatIndex= */ -1))
-                .addEffect(
-                        VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {4, 5},
-                                /* amplitudes= */ new int[] {0, DEFAULT_AMPLITUDE},
-                                /* repeatIndex= */ -1))
-                .compose();
-        long[] expectedPattern = new long[] {7, 33, 4, 5};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_composition_withOffDuration() {
-        VibrationEffect effect = VibrationEffect.startComposition()
-                .addOffDuration(Duration.ofMillis(20))
-                .addEffect(
-                        VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {10, 20},
-                                /* amplitudes= */ new int[] {0, DEFAULT_AMPLITUDE},
-                                /* repeatIndex= */ -1))
-                .addEffect(
-                        VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {30, 40},
-                                /* amplitudes= */ new int[] {DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE},
-                                /* repeatIndex= */ -1))
-                .addOffDuration(Duration.ofMillis(10))
-                .addEffect(
-                        VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {4, 5},
-                                /* repeatIndex= */ -1))
-                .addOffDuration(Duration.ofMillis(5))
-                .compose();
-        long[] expectedPattern = new long[] {30, 90, 14, 5, 5};
-
-        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_composition_withPrimitives() {
-        VibrationEffect effect = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
-                .addOffDuration(Duration.ofMillis(20))
-                .addEffect(
-                        VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {5},
-                                /* repeatIndex= */ -1))
-                .compose();
-
-        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_composition_repeating() {
-        VibrationEffect effect = VibrationEffect.startComposition()
-                .addEffect(
-                        VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {5},
-                                /* repeatIndex= */ -1))
-                .repeatEffectIndefinitely(
-                        VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {2, 3},
-                                /* repeatIndex= */ -1))
-                .compose();
-
-        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void computeLegacyPattern_effectsViaStartWaveform() {
-        // Effects created via startWaveform are not expected to be converted to long[] patterns, as
-        // they are not configured to always play with the default amplitude.
-        VibrationEffect effect = VibrationEffect.startWaveform(targetFrequency(60))
-                .addTransition(Duration.ofMillis(100), targetAmplitude(1), targetFrequency(120))
-                .addSustain(Duration.ofMillis(200))
-                .addTransition(Duration.ofMillis(100), targetAmplitude(0), targetFrequency(60))
-                .build();
-
-        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
-
-        effect = VibrationEffect.startWaveform(targetFrequency(60))
-                .addTransition(Duration.ofMillis(80), targetAmplitude(1))
-                .addSustain(Duration.ofMillis(200))
-                .addTransition(Duration.ofMillis(100), targetAmplitude(0))
-                .build();
-
-        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
-
-        effect = VibrationEffect.startWaveform(targetFrequency(60))
-                .addTransition(Duration.ofMillis(100), targetFrequency(50))
-                .addSustain(Duration.ofMillis(50))
-                .addTransition(Duration.ofMillis(20), targetFrequency(75))
-                .build();
-
-        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
-    }
-
-    @Test
-    public void getRingtones_noPrebakedRingtones() {
-        Resources r = mockRingtoneResources(new String[0]);
-        Context context = mockContext(r);
-        VibrationEffect effect = VibrationEffect.get(Uri.parse(RINGTONE_URI_1), context);
-        assertNull(effect);
-    }
-
-    @Test
-    public void getRingtones_noPrebakedRingtoneForUri() {
-        Resources r = mockRingtoneResources();
-        Context context = mockContext(r);
-        VibrationEffect effect = VibrationEffect.get(Uri.parse(UNKNOWN_URI), context);
-        assertNull(effect);
-    }
-
-    @Test
-    public void getRingtones_getPrebakedRingtone() {
-        Resources r = mockRingtoneResources();
-        Context context = mockContext(r);
-        VibrationEffect effect = VibrationEffect.get(Uri.parse(RINGTONE_URI_2), context);
-        VibrationEffect expectedEffect = VibrationEffect.get(VibrationEffect.RINGTONES[1]);
-        assertNotNull(expectedEffect);
-        assertEquals(expectedEffect, effect);
-    }
-
-    @Test
-    public void testValidateOneShot() {
-        VibrationEffect.createOneShot(1, 255).validate();
-        VibrationEffect.createOneShot(1, DEFAULT_AMPLITUDE).validate();
-
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.createOneShot(-1, 255).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.createOneShot(0, 255).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.createOneShot(1, -2).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.createOneShot(1, 0).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.createOneShot(-1, 255).validate());
-    }
-
-    @Test
-    public void testValidatePrebaked() {
-        VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK).validate();
-        VibrationEffect.createPredefined(VibrationEffect.RINGTONES[1]).validate();
-
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.createPredefined(-1).validate());
-    }
-
-    @Test
-    public void testValidateWaveform() {
-        VibrationEffect.createWaveform(TEST_TIMINGS, TEST_AMPLITUDES, -1).validate();
-        VibrationEffect.createWaveform(new long[]{10, 10}, new int[] {0, 0}, -1).validate();
-        VibrationEffect.createWaveform(TEST_TIMINGS, TEST_AMPLITUDES, 0).validate();
-
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.createWaveform(new long[0], new int[0], -1).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.createWaveform(TEST_TIMINGS, new int[0], -1).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.createWaveform(
-                        new long[]{0, 0, 0}, TEST_AMPLITUDES, -1).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.createWaveform(
-                        TEST_TIMINGS, new int[]{-1, -1, -2}, -1).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.createWaveform(
-                        TEST_TIMINGS, TEST_AMPLITUDES, TEST_TIMINGS.length).validate());
-    }
-
-    @Test
-    public void testValidateWaveformBuilder() {
-        // Cover builder methods
-        VibrationEffect.startWaveform(targetAmplitude(1))
-                .addTransition(Duration.ofSeconds(1), targetAmplitude(0.5f), targetFrequency(100))
-                .addTransition(Duration.ZERO, targetAmplitude(0f), targetFrequency(200))
-                .addSustain(Duration.ofMinutes(2))
-                .addTransition(Duration.ofMillis(10), targetAmplitude(1f), targetFrequency(50))
-                .addSustain(Duration.ofMillis(1))
-                .addTransition(Duration.ZERO, targetFrequency(150))
-                .addSustain(Duration.ofMillis(2))
-                .addTransition(Duration.ofSeconds(15), targetAmplitude(1))
-                .build()
-                .validate();
-
-        // Make sure class summary javadoc examples compile and are valid.
-        // NOTE: IF THIS IS UPDATED, PLEASE ALSO UPDATE WaveformBuilder javadocs.
-        VibrationEffect.startWaveform(targetFrequency(60))
-                .addTransition(Duration.ofMillis(100), targetAmplitude(1), targetFrequency(120))
-                .addSustain(Duration.ofMillis(200))
-                .addTransition(Duration.ofMillis(100), targetAmplitude(0), targetFrequency(60))
-                .build()
-                .validate();
-        VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
-                .addOffDuration(Duration.ofMillis(20))
-                .repeatEffectIndefinitely(
-                        VibrationEffect.startWaveform(targetAmplitude(0.2f))
-                                .addSustain(Duration.ofMillis(10))
-                                .addTransition(Duration.ofMillis(20), targetAmplitude(0.4f))
-                                .addSustain(Duration.ofMillis(30))
-                                .addTransition(Duration.ofMillis(40), targetAmplitude(0.8f))
-                                .addSustain(Duration.ofMillis(50))
-                                .addTransition(Duration.ofMillis(60), targetAmplitude(0.2f))
-                                .build())
-                .compose()
-                .validate();
-        VibrationEffect.createWaveform(new long[]{10, 20, 30}, new int[]{51, 102, 204}, -1)
-                .validate();
-        VibrationEffect.startWaveform(targetAmplitude(0.2f))
-                .addSustain(Duration.ofMillis(10))
-                .addTransition(Duration.ZERO, targetAmplitude(0.4f))
-                .addSustain(Duration.ofMillis(20))
-                .addTransition(Duration.ZERO, targetAmplitude(0.8f))
-                .addSustain(Duration.ofMillis(30))
-                .build()
-                .validate();
-
-        assertThrows(IllegalStateException.class,
-                () -> VibrationEffect.startWaveform().build().validate());
-        assertThrows(IllegalArgumentException.class, () -> targetAmplitude(-2));
-        assertThrows(IllegalArgumentException.class, () -> targetFrequency(0));
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.startWaveform().addTransition(
-                        Duration.ofMillis(-10), targetAmplitude(1)).build().validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.startWaveform().addSustain(Duration.ZERO).build().validate());
-    }
-
-    @Test
-    public void testValidateComposed() {
-        // Cover builder methods
-        VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                .addEffect(TEST_ONE_SHOT)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f)
-                .addOffDuration(Duration.ofMillis(100))
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 0.5f, 10)
-                .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addEffect(VibrationEffect.createWaveform(new long[]{10, 20}, /* repeat= */ 0))
-                .compose()
-                .validate();
-        VibrationEffect.startComposition()
-                .repeatEffectIndefinitely(TEST_ONE_SHOT)
-                .compose()
-                .validate();
-
-        // Make sure class summary javadoc examples compile and are valid.
-        // NOTE: IF THIS IS UPDATED, PLEASE ALSO UPDATE Composition javadocs.
-        VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SLOW_RISE, 0.5f)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_FALL, 0.5f)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1.0f, 100)
-                .compose()
-                .validate();
-        VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_LOW_TICK)
-                .addOffDuration(Duration.ofMillis(10))
-                .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_DOUBLE_CLICK))
-                .addOffDuration(Duration.ofMillis(50))
-                .addEffect(VibrationEffect.createWaveform(new long[]{10, 20}, /* repeat= */ 0))
-                .compose()
-                .validate();
-
-        assertThrows(IllegalStateException.class,
-                () -> VibrationEffect.startComposition().compose().validate());
-        assertThrows(IllegalStateException.class,
-                () -> VibrationEffect.startComposition()
-                        .addOffDuration(Duration.ofSeconds(0))
-                        .compose()
-                        .validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.startComposition().addPrimitive(-1).compose().validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, -1, 10)
-                        .compose()
-                        .validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, -10)
-                        .compose()
-                        .validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, -1)
-                        .compose()
-                        .validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> VibrationEffect.startComposition()
-                        .repeatEffectIndefinitely(
-                                // Repeating waveform.
-                                VibrationEffect.createWaveform(
-                                        new long[] { 10 }, new int[] { 100}, 0))
-                        .compose()
-                        .validate());
-        assertThrows(UnreachableAfterRepeatingIndefinitelyException.class,
-                () -> VibrationEffect.startComposition()
-                        .repeatEffectIndefinitely(TEST_WAVEFORM)
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                        .compose()
-                        .validate());
-        assertThrows(UnreachableAfterRepeatingIndefinitelyException.class,
-                () -> VibrationEffect.startComposition()
-                        .repeatEffectIndefinitely(TEST_WAVEFORM)
-                        .addEffect(TEST_ONE_SHOT)
-                        .compose()
-                        .validate());
-    }
-
-    @Test
-    public void testResolveOneShot() {
-        VibrationEffect.Composed resolved = DEFAULT_ONE_SHOT.resolve(51);
-        assertEquals(0.2f, ((StepSegment) resolved.getSegments().get(0)).getAmplitude());
-
-        assertThrows(IllegalArgumentException.class, () -> DEFAULT_ONE_SHOT.resolve(1000));
-    }
-
-    @Test
-    public void testResolveWaveform() {
-        VibrationEffect.Composed resolved = TEST_WAVEFORM.resolve(102);
-        assertEquals(0.4f, ((StepSegment) resolved.getSegments().get(2)).getAmplitude());
-
-        assertThrows(IllegalArgumentException.class, () -> TEST_WAVEFORM.resolve(1000));
-    }
-
-    @Test
-    public void testResolvePrebaked() {
-        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
-        assertEquals(effect, effect.resolve(51));
-    }
-
-    @Test
-    public void testResolveComposed() {
-        VibrationEffect effect = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 1)
-                .compose();
-        assertEquals(effect, effect.resolve(51));
-
-        VibrationEffect.Composed resolved = VibrationEffect.startComposition()
-                .addEffect(DEFAULT_ONE_SHOT)
-                .compose()
-                .resolve(51);
-        assertEquals(0.2f, ((StepSegment) resolved.getSegments().get(0)).getAmplitude());
-    }
-
-    @Test
-    public void testApplyEffectStrengthOneShot() {
-        VibrationEffect.Composed applied = DEFAULT_ONE_SHOT.applyEffectStrength(
-                VibrationEffect.EFFECT_STRENGTH_LIGHT);
-        assertEquals(DEFAULT_ONE_SHOT, applied);
-    }
-
-    @Test
-    public void testApplyEffectStrengthWaveform() {
-        VibrationEffect.Composed applied = TEST_WAVEFORM.applyEffectStrength(
-                VibrationEffect.EFFECT_STRENGTH_LIGHT);
-        assertEquals(TEST_WAVEFORM, applied);
-    }
-
-    @Test
-    public void testApplyEffectStrengthPrebaked() {
-        VibrationEffect.Composed applied = VibrationEffect.get(VibrationEffect.EFFECT_CLICK)
-                .applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_LIGHT);
-        assertEquals(VibrationEffect.EFFECT_STRENGTH_LIGHT,
-                ((PrebakedSegment) applied.getSegments().get(0)).getEffectStrength());
-    }
-
-    @Test
-    public void testApplyEffectStrengthComposed() {
-        VibrationEffect effect = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 0.5f, 1)
-                .compose();
-        assertEquals(effect, effect.applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_LIGHT));
-
-        VibrationEffect.Composed applied = VibrationEffect.startComposition()
-                .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .compose()
-                .applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_LIGHT);
-        assertEquals(VibrationEffect.EFFECT_STRENGTH_LIGHT,
-                ((PrebakedSegment) applied.getSegments().get(0)).getEffectStrength());
-    }
-
-    @Test
-    public void testScaleOneShot() {
-        VibrationEffect.Composed scaledUp = TEST_ONE_SHOT.scale(1.5f);
-        assertTrue(100 / 255f < ((StepSegment) scaledUp.getSegments().get(0)).getAmplitude());
-
-        VibrationEffect.Composed scaledDown = TEST_ONE_SHOT.scale(0.5f);
-        assertTrue(100 / 255f > ((StepSegment) scaledDown.getSegments().get(0)).getAmplitude());
-    }
-
-    @Test
-    public void testScaleWaveform() {
-        VibrationEffect.Composed scaledUp = TEST_WAVEFORM.scale(1.5f);
-        assertEquals(1f, ((StepSegment) scaledUp.getSegments().get(0)).getAmplitude(), 1e-5f);
-
-        VibrationEffect.Composed scaledDown = TEST_WAVEFORM.scale(0.5f);
-        assertTrue(1f > ((StepSegment) scaledDown.getSegments().get(0)).getAmplitude());
-    }
-
-    @Test
-    public void testScalePrebaked() {
-        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
-
-        VibrationEffect.Composed scaledUp = effect.scale(1.5f);
-        assertEquals(effect, scaledUp);
-
-        VibrationEffect.Composed scaledDown = effect.scale(0.5f);
-        assertEquals(effect, scaledDown);
-    }
-
-    @Test
-    public void testScaleComposed() {
-        VibrationEffect.Composed effect =
-                (VibrationEffect.Composed) VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 0.5f, 1)
-                        .addEffect(TEST_ONE_SHOT)
-                        .compose();
-
-        VibrationEffect.Composed scaledUp = effect.scale(1.5f);
-        assertTrue(0.5f < ((PrimitiveSegment) scaledUp.getSegments().get(0)).getScale());
-        assertTrue(100 / 255f < ((StepSegment) scaledUp.getSegments().get(1)).getAmplitude());
-
-        VibrationEffect.Composed scaledDown = effect.scale(0.5f);
-        assertTrue(0.5f > ((PrimitiveSegment) scaledDown.getSegments().get(0)).getScale());
-        assertTrue(100 / 255f > ((StepSegment) scaledDown.getSegments().get(1)).getAmplitude());
-    }
-
-
-    @Test
-    public void testDuration() {
-        assertEquals(1, VibrationEffect.createOneShot(1, 1).getDuration());
-        assertEquals(-1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK).getDuration());
-        assertEquals(-1,
-                VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 100)
-                        .compose()
-                        .getDuration());
-        assertEquals(6, VibrationEffect.createWaveform(
-                new long[]{1, 2, 3}, new int[]{1, 2, 3}, -1).getDuration());
-        assertEquals(Long.MAX_VALUE, VibrationEffect.createWaveform(
-                new long[]{1, 2, 3}, new int[]{1, 2, 3}, 0).getDuration());
-    }
-
-    @Test
-    public void testAreVibrationFeaturesSupported_allSegmentsSupported() {
-        Vibrator vibrator =
-                createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
-                        .setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL)
-                        .build());
-
-        assertTrue(VibrationEffect.createWaveform(
-                        /* timings= */ new long[] {1, 2, 3}, /* repeatIndex= */ -1)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(VibrationEffect.createWaveform(
-                        /* timings= */ new long[] {1, 2, 3},
-                        /* amplitudes= */ new int[] {10, 20, 40},
-                        /* repeatIndex= */ 2)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(
-                VibrationEffect.startComposition()
-                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
-                        .repeatEffectIndefinitely(TEST_ONE_SHOT)
-                        .compose()
-                .areVibrationFeaturesSupported(vibrator));
-    }
-
-    @Test
-    public void testAreVibrationFeaturesSupported_withUnsupportedSegments() {
-        Vibrator vibrator =
-                createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1).build());
-
-        assertFalse(
-                VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                        .addEffect(VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {1, 2, 3},
-                                /* amplitudes= */ new int[] {10, 20, 40},
-                                /* repeatIndex= */ -1))
-                        .compose()
-                .areVibrationFeaturesSupported(vibrator));
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidate_repeatingEffects_notCandidates() {
-        assertFalse(VibrationEffect.createWaveform(
-                new long[]{1, 2, 3}, new int[]{1, 2, 3}, 0).isHapticFeedbackCandidate());
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidate_longEffects_notCandidates() {
-        assertFalse(VibrationEffect.createOneShot(1500, 255).isHapticFeedbackCandidate());
-        assertFalse(VibrationEffect.createWaveform(
-                new long[]{200, 200, 700}, new int[]{1, 2, 3}, -1).isHapticFeedbackCandidate());
-        assertFalse(VibrationEffect.startWaveform()
-                .addTransition(Duration.ofMillis(500), targetAmplitude(1))
-                .addTransition(Duration.ofMillis(200), targetAmplitude(0.5f))
-                .addTransition(Duration.ofMillis(500), targetAmplitude(0))
-                .build()
-                .isHapticFeedbackCandidate());
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidate_shortEffects_areCandidates() {
-        assertTrue(VibrationEffect.createOneShot(500, 255).isHapticFeedbackCandidate());
-        assertTrue(VibrationEffect.createWaveform(
-                new long[]{100, 200, 300}, new int[]{1, 2, 3}, -1).isHapticFeedbackCandidate());
-        assertTrue(VibrationEffect.startWaveform()
-                .addTransition(Duration.ofMillis(300), targetAmplitude(1))
-                .addTransition(Duration.ofMillis(200), targetAmplitude(0.5f))
-                .addTransition(Duration.ofMillis(300), targetAmplitude(0))
-                .build()
-                .isHapticFeedbackCandidate());
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidate_longCompositions_notCandidates() {
-        assertFalse(VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_LOW_TICK)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SPIN)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SLOW_RISE)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_FALL)
-                .compose()
-                .isHapticFeedbackCandidate());
-
-        assertFalse(VibrationEffect.startComposition()
-                .addEffect(VibrationEffect.createOneShot(1500, 255))
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
-                .compose()
-                .isHapticFeedbackCandidate());
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidate_shortCompositions_areCandidates() {
-        assertTrue(VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SLOW_RISE)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_FALL)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                .compose()
-                .isHapticFeedbackCandidate());
-
-        assertTrue(VibrationEffect.startComposition()
-                .addEffect(VibrationEffect.createOneShot(100, 255))
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
-                .compose()
-                .isHapticFeedbackCandidate());
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidate_prebakedRingtones_notCandidates() {
-        assertFalse(VibrationEffect.get(
-                VibrationEffect.RINGTONES[1]).isHapticFeedbackCandidate());
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidate_prebakedNotRingtoneConstants_areCandidates() {
-        assertTrue(VibrationEffect.get(VibrationEffect.EFFECT_CLICK).isHapticFeedbackCandidate());
-        assertTrue(VibrationEffect.get(VibrationEffect.EFFECT_THUD).isHapticFeedbackCandidate());
-        assertTrue(VibrationEffect.get(VibrationEffect.EFFECT_TICK).isHapticFeedbackCandidate());
-    }
-
-    private void assertArrayEq(long[] expected, long[] actual) {
-        assertTrue(
-                String.format("Expected pattern %s, but was %s",
-                        Arrays.toString(expected), Arrays.toString(actual)),
-                Arrays.equals(expected, actual));
-    }
-
-    private Resources mockRingtoneResources() {
-        return mockRingtoneResources(new String[]{
-                RINGTONE_URI_1,
-                RINGTONE_URI_2,
-                RINGTONE_URI_3
-        });
-    }
-
-    private Resources mockRingtoneResources(String[] ringtoneUris) {
-        Resources mockResources = mock(Resources.class);
-        when(mockResources.getStringArray(R.array.config_ringtoneEffectUris))
-                .thenReturn(ringtoneUris);
-        return mockResources;
-    }
-
-    private Context mockContext(Resources resources) {
-        Context context = mock(Context.class);
-        ContentInterface contentInterface = mock(ContentInterface.class);
-        ContentResolver contentResolver = ContentResolver.wrap(contentInterface);
-
-        try {
-            // ContentResolver#uncanonicalize is final, so we need to mock the ContentInterface it
-            // delegates the call to for the tests that require matching with the mocked URIs.
-            when(contentInterface.uncanonicalize(any())).then(
-                    invocation -> invocation.getArgument(0));
-            when(context.getContentResolver()).thenReturn(contentResolver);
-            when(context.getResources()).thenReturn(resources);
-        } catch (RemoteException e) {
-            throw new RuntimeException(e);
-        }
-
-        return context;
-    }
-
-    private Vibrator createVibratorWithCustomInfo(VibratorInfo info) {
-        return new SystemVibrator(InstrumentationRegistry.getContext()) {
-            @Override
-            public VibratorInfo getInfo() {
-                return info;
-            }
-        };
-    }
-}
diff --git a/core/tests/coretests/src/android/os/VibratorInfoTest.java b/core/tests/coretests/src/android/os/VibratorInfoTest.java
deleted file mode 100644
index 88766e2..0000000
--- a/core/tests/coretests/src/android/os/VibratorInfoTest.java
+++ /dev/null
@@ -1,340 +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 android.os;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import android.hardware.vibrator.Braking;
-import android.hardware.vibrator.IVibrator;
-import android.platform.test.annotations.Presubmit;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-@Presubmit
-@RunWith(JUnit4.class)
-public class VibratorInfoTest {
-    private static final float TEST_TOLERANCE = 1e-5f;
-
-    private static final int TEST_VIBRATOR_ID = 1;
-    private static final float TEST_MIN_FREQUENCY = 50;
-    private static final float TEST_RESONANT_FREQUENCY = 150;
-    private static final float TEST_FREQUENCY_RESOLUTION = 25;
-    private static final float[] TEST_AMPLITUDE_MAP = new float[]{
-            /* 50Hz= */ 0.1f, 0.2f, 0.4f, 0.8f, /* 150Hz= */ 1f, 0.9f, /* 200Hz= */ 0.8f};
-
-    private static final VibratorInfo.FrequencyProfile EMPTY_FREQUENCY_PROFILE =
-            new VibratorInfo.FrequencyProfile(Float.NaN, Float.NaN, Float.NaN, null);
-    private static final VibratorInfo.FrequencyProfile TEST_FREQUENCY_PROFILE =
-            new VibratorInfo.FrequencyProfile(TEST_RESONANT_FREQUENCY, TEST_MIN_FREQUENCY,
-                    TEST_FREQUENCY_RESOLUTION, TEST_AMPLITUDE_MAP);
-
-    @Test
-    public void testHasAmplitudeControl() {
-        VibratorInfo noCapabilities = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
-        assertFalse(noCapabilities.hasAmplitudeControl());
-        VibratorInfo composeAndAmplitudeControl = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS | IVibrator.CAP_AMPLITUDE_CONTROL)
-                .build();
-        assertTrue(composeAndAmplitudeControl.hasAmplitudeControl());
-    }
-
-    @Test
-    public void testHasCapabilities() {
-        VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .build();
-        assertTrue(info.hasCapability(IVibrator.CAP_COMPOSE_EFFECTS));
-        assertFalse(info.hasCapability(IVibrator.CAP_AMPLITUDE_CONTROL));
-    }
-
-    @Test
-    public void testIsEffectSupported() {
-        VibratorInfo noEffects = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
-        VibratorInfo canClick = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
-                .setSupportedEffects(VibrationEffect.EFFECT_CLICK)
-                .build();
-        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_UNKNOWN,
-                noEffects.isEffectSupported(VibrationEffect.EFFECT_CLICK));
-        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_YES,
-                canClick.isEffectSupported(VibrationEffect.EFFECT_CLICK));
-        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_NO,
-                canClick.isEffectSupported(VibrationEffect.EFFECT_TICK));
-    }
-
-    @Test
-    public void testIsPrimitiveSupported() {
-        VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
-                .build();
-        assertTrue(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_CLICK));
-        assertFalse(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_TICK));
-
-        // Returns false when there is no compose capability.
-        info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
-                .build();
-        assertFalse(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_CLICK));
-    }
-
-    @Test
-    public void testGetPrimitiveDuration() {
-        VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 20)
-                .build();
-        assertEquals(20, info.getPrimitiveDuration(VibrationEffect.Composition.PRIMITIVE_CLICK));
-        assertEquals(0, info.getPrimitiveDuration(VibrationEffect.Composition.PRIMITIVE_TICK));
-        assertEquals(0, new VibratorInfo.Builder(TEST_VIBRATOR_ID).build()
-                .getPrimitiveDuration(VibrationEffect.Composition.PRIMITIVE_TICK));
-    }
-
-    @Test
-    public void testCompositionLimits() {
-        VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
-                .setPrimitiveDelayMax(100)
-                .setCompositionSizeMax(10)
-                .setPwlePrimitiveDurationMax(50)
-                .setPwleSizeMax(20)
-                .build();
-        assertEquals(100, info.getPrimitiveDelayMax());
-        assertEquals(10, info.getCompositionSizeMax());
-        assertEquals(50, info.getPwlePrimitiveDurationMax());
-        assertEquals(20, info.getPwleSizeMax());
-
-        VibratorInfo emptyInfo = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
-        assertEquals(0, emptyInfo.getPrimitiveDelayMax());
-        assertEquals(0, emptyInfo.getCompositionSizeMax());
-        assertEquals(0, emptyInfo.getPwlePrimitiveDurationMax());
-        assertEquals(0, emptyInfo.getPwleSizeMax());
-    }
-
-    @Test
-    public void testGetDefaultBraking_returnsFirstSupportedBraking() {
-        assertEquals(Braking.NONE, new VibratorInfo.Builder(
-                TEST_VIBRATOR_ID).build().getDefaultBraking());
-        assertEquals(Braking.CLAB,
-                new VibratorInfo.Builder(TEST_VIBRATOR_ID)
-                        .setSupportedBraking(Braking.NONE, Braking.CLAB)
-                        .build()
-                        .getDefaultBraking());
-    }
-
-    @Test
-    public void testGetFrequencyProfile_unsetProfileIsEmpty() {
-        assertTrue(
-                new VibratorInfo.Builder(TEST_VIBRATOR_ID).build().getFrequencyProfile().isEmpty());
-    }
-
-    @Test
-    public void testFrequencyProfile_invalidValuesCreatesEmptyProfile() {
-        // Invalid, contains NaN values or empty array.
-        assertTrue(new VibratorInfo.FrequencyProfile(
-                Float.NaN, 50, 25, TEST_AMPLITUDE_MAP).isEmpty());
-        assertTrue(new VibratorInfo.FrequencyProfile(
-                150, Float.NaN, 25, TEST_AMPLITUDE_MAP).isEmpty());
-        assertTrue(new VibratorInfo.FrequencyProfile(
-                150, 50, Float.NaN, TEST_AMPLITUDE_MAP).isEmpty());
-        assertTrue(new VibratorInfo.FrequencyProfile(150, 50, 25, null).isEmpty());
-        // Invalid, contains zero or negative frequency values.
-        assertTrue(new VibratorInfo.FrequencyProfile(-1, 50, 25, TEST_AMPLITUDE_MAP).isEmpty());
-        assertTrue(new VibratorInfo.FrequencyProfile(150, 0, 25, TEST_AMPLITUDE_MAP).isEmpty());
-        assertTrue(new VibratorInfo.FrequencyProfile(150, 50, -2, TEST_AMPLITUDE_MAP).isEmpty());
-        // Invalid max amplitude entries.
-        assertTrue(new VibratorInfo.FrequencyProfile(
-                150, 50, 50, new float[] { -1, 0, 1, 1, 0 }).isEmpty());
-        assertTrue(new VibratorInfo.FrequencyProfile(
-                150, 50, 50, new float[] { 0, 1, 2, 1, 0 }).isEmpty());
-        // Invalid, minFrequency > resonantFrequency
-        assertTrue(new VibratorInfo.FrequencyProfile(
-                /* resonantFrequencyHz= */ 150, /* minFrequencyHz= */ 250, 25, TEST_AMPLITUDE_MAP)
-                .isEmpty());
-        // Invalid, maxFrequency < resonantFrequency by changing resolution.
-        assertTrue(new VibratorInfo.FrequencyProfile(
-                150, 50, /* frequencyResolutionHz= */ 10, TEST_AMPLITUDE_MAP).isEmpty());
-    }
-
-    @Test
-    public void testGetFrequencyRangeHz_emptyProfileReturnsNull() {
-        assertNull(new VibratorInfo.FrequencyProfile(
-                Float.NaN, 50, 25, TEST_AMPLITUDE_MAP).getFrequencyRangeHz());
-        assertNull(new VibratorInfo.FrequencyProfile(
-                150, Float.NaN, 25, TEST_AMPLITUDE_MAP).getFrequencyRangeHz());
-        assertNull(new VibratorInfo.FrequencyProfile(
-                150, 50, Float.NaN, TEST_AMPLITUDE_MAP).getFrequencyRangeHz());
-        assertNull(new VibratorInfo.FrequencyProfile(150, 50, 25, null).getFrequencyRangeHz());
-    }
-
-    @Test
-    public void testGetFrequencyRangeHz_validProfileReturnsMappedValues() {
-        VibratorInfo.FrequencyProfile profile = new VibratorInfo.FrequencyProfile(
-                /* resonantFrequencyHz= */ 150,
-                /* minFrequencyHz= */ 50,
-                /* frequencyResolutionHz= */ 25,
-                /* maxAmplitudes= */ new float[]{
-                /* 50Hz= */ 0.1f, 0.2f, 0.4f, 0.8f, /* 150Hz= */ 1f, 0.9f,
-                /* 200Hz= */ 0.8f});
-
-        assertEquals(50f, profile.getFrequencyRangeHz().getLower(), TEST_TOLERANCE);
-        assertEquals(200f, profile.getFrequencyRangeHz().getUpper(), TEST_TOLERANCE);
-    }
-
-    @Test
-    public void testGetMaxAmplitude_emptyProfileReturnsAlwaysZero() {
-        VibratorInfo.FrequencyProfile profile = EMPTY_FREQUENCY_PROFILE;
-        assertEquals(0f, profile.getMaxAmplitude(Float.NaN), TEST_TOLERANCE);
-        assertEquals(0f, profile.getMaxAmplitude(100f), TEST_TOLERANCE);
-        assertEquals(0f, profile.getMaxAmplitude(200f), TEST_TOLERANCE);
-
-        profile = new VibratorInfo.FrequencyProfile(
-                        /* resonantFrequencyHz= */ 150,
-                        /* minFrequencyHz= */ Float.NaN,
-                        /* frequencyResolutionHz= */ Float.NaN,
-                        /* maxAmplitudes= */ null);
-
-        assertEquals(0f, profile.getMaxAmplitude(Float.NaN), TEST_TOLERANCE);
-        assertEquals(0f, profile.getMaxAmplitude(100f), TEST_TOLERANCE);
-        assertEquals(0f, profile.getMaxAmplitude(150f), TEST_TOLERANCE);
-    }
-
-    @Test
-    public void testGetMaxAmplitude_validProfileReturnsMappedValues() {
-        VibratorInfo.FrequencyProfile profile = new VibratorInfo.FrequencyProfile(
-                        /* resonantFrequencyHz= */ 150,
-                        /* minFrequencyHz= */ 50,
-                        /* frequencyResolutionHz= */ 25,
-                        /* maxAmplitudes= */ new float[]{
-                                /* 50Hz= */ 0.1f, 0.2f, 0.4f, 0.8f, /* 150Hz= */ 1f, 0.9f,
-                                /* 200Hz= */ 0.8f});
-
-        // Values in the max amplitudes array should return exact measurement.
-        assertEquals(1f, profile.getMaxAmplitude(150f), TEST_TOLERANCE);
-        assertEquals(0.9f, profile.getMaxAmplitude(175f), TEST_TOLERANCE);
-        assertEquals(0.8f, profile.getMaxAmplitude(125f), TEST_TOLERANCE);
-
-        // Min and max frequencies should return exact measurement from array.
-        assertEquals(0.8f, profile.getMaxAmplitude(200f), TEST_TOLERANCE);
-        assertEquals(0.1f, profile.getMaxAmplitude(50f), TEST_TOLERANCE);
-
-        // Values outside [50Hz, 200Hz] just return 0.
-        assertEquals(0f, profile.getMaxAmplitude(49f), TEST_TOLERANCE);
-        assertEquals(0f, profile.getMaxAmplitude(201f), TEST_TOLERANCE);
-
-        // 145Hz maps to linear value between 125Hz and 150Hz max amplitudes 0.8 and 1.
-        assertEquals(0.96f, profile.getMaxAmplitude(145f), TEST_TOLERANCE);
-        // 185Hz maps to linear value between 175Hz and 200Hz max amplitudes 0.9 and 0.8.
-        assertEquals(0.86f, profile.getMaxAmplitude(185f), TEST_TOLERANCE);
-    }
-
-    @Test
-    public void testEquals() {
-        VibratorInfo.Builder completeBuilder = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
-                .setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL)
-                .setSupportedEffects(VibrationEffect.EFFECT_CLICK)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 20)
-                .setPrimitiveDelayMax(100)
-                .setCompositionSizeMax(10)
-                .setSupportedBraking(Braking.CLAB)
-                .setPwlePrimitiveDurationMax(50)
-                .setPwleSizeMax(20)
-                .setQFactor(2f)
-                .setFrequencyProfile(TEST_FREQUENCY_PROFILE);
-        VibratorInfo complete = completeBuilder.build();
-
-        assertEquals(complete, complete);
-        assertEquals(complete, completeBuilder.build());
-        assertEquals(complete.hashCode(), completeBuilder.build().hashCode());
-
-        VibratorInfo completeWithComposeControl = completeBuilder
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .build();
-        assertNotEquals(complete, completeWithComposeControl);
-
-        VibratorInfo completeWithNoEffects = completeBuilder
-                .setSupportedEffects(new int[0])
-                .build();
-        assertNotEquals(complete, completeWithNoEffects);
-
-        VibratorInfo completeWithUnknownEffects = completeBuilder
-                .setSupportedEffects(null)
-                .build();
-        assertNotEquals(complete, completeWithUnknownEffects);
-
-        VibratorInfo completeWithDifferentPrimitiveDuration = completeBuilder
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
-                .build();
-        assertNotEquals(complete, completeWithDifferentPrimitiveDuration);
-
-        VibratorInfo completeWithDifferentFrequencyProfile = completeBuilder
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(
-                        TEST_RESONANT_FREQUENCY + 20,
-                        TEST_MIN_FREQUENCY + 10,
-                        TEST_FREQUENCY_RESOLUTION + 5,
-                        TEST_AMPLITUDE_MAP))
-                .build();
-        assertNotEquals(complete, completeWithDifferentFrequencyProfile);
-
-        VibratorInfo completeWithEmptyFrequencyProfile = completeBuilder
-                .setFrequencyProfile(EMPTY_FREQUENCY_PROFILE)
-                .build();
-        assertNotEquals(complete, completeWithEmptyFrequencyProfile);
-
-        VibratorInfo completeWithUnknownQFactor = completeBuilder.setQFactor(Float.NaN).build();
-        assertNotEquals(complete, completeWithUnknownQFactor);
-
-        VibratorInfo completeWithDifferentQFactor = completeBuilder
-                .setQFactor(complete.getQFactor() + 3f)
-                .build();
-        assertNotEquals(complete, completeWithDifferentQFactor);
-
-        VibratorInfo unknownEffectSupport = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
-        VibratorInfo knownEmptyEffectSupport = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
-                .setSupportedEffects(new int[0])
-                .build();
-        assertNotEquals(unknownEffectSupport, knownEmptyEffectSupport);
-
-        VibratorInfo unknownBrakingSupport = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
-        VibratorInfo knownEmptyBrakingSupport = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
-                .setSupportedBraking(new int[0])
-                .build();
-        assertNotEquals(unknownBrakingSupport, knownEmptyBrakingSupport);
-    }
-
-    @Test
-    public void testParceling() {
-        VibratorInfo original = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .setSupportedEffects(VibrationEffect.EFFECT_CLICK)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 20)
-                .setQFactor(Float.NaN)
-                .setFrequencyProfile(TEST_FREQUENCY_PROFILE)
-                .build();
-
-        Parcel parcel = Parcel.obtain();
-        original.writeToParcel(parcel, 0);
-        parcel.setDataPosition(0);
-        VibratorInfo restored = VibratorInfo.CREATOR.createFromParcel(parcel);
-        assertEquals(original, restored);
-        assertEquals(original.hashCode(), restored.hashCode());
-    }
-}
diff --git a/core/tests/coretests/src/android/os/VibratorTest.java b/core/tests/coretests/src/android/os/VibratorTest.java
deleted file mode 100644
index 375fdac..0000000
--- a/core/tests/coretests/src/android/os/VibratorTest.java
+++ /dev/null
@@ -1,796 +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 android.os;
-
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
-import static junit.framework.TestCase.assertEquals;
-
-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;
-import static org.mockito.ArgumentMatchers.isNull;
-import static org.mockito.Mockito.inOrder;
-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.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.ContextWrapper;
-import android.hardware.vibrator.IVibrator;
-import android.media.AudioAttributes;
-import android.os.test.TestLooper;
-import android.platform.test.annotations.Presubmit;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.internal.util.test.FakeSettingsProvider;
-import com.android.internal.util.test.FakeSettingsProviderRule;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.InOrder;
-import org.mockito.junit.MockitoJUnitRunner;
-
-/**
- * Tests for {@link Vibrator}.
- *
- * Build/Install/Run:
- * atest FrameworksCoreTests:VibratorTest
- */
-@Presubmit
-@RunWith(MockitoJUnitRunner.class)
-public class VibratorTest {
-
-    @Rule
-    public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule();
-
-    private static final float TEST_TOLERANCE = 1e-5f;
-
-    private Context mContextSpy;
-    private Vibrator mVibratorSpy;
-    private TestLooper mTestLooper;
-
-    @Before
-    public void setUp() {
-        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
-
-        ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy);
-        when(mContextSpy.getContentResolver()).thenReturn(contentResolver);
-        mVibratorSpy = spy(new SystemVibrator(mContextSpy));
-        mTestLooper = new TestLooper();
-    }
-
-    @Test
-    public void getId_returnsDefaultId() {
-        assertEquals(-1, mVibratorSpy.getId());
-        assertEquals(-1, new SystemVibrator.NoVibratorInfo().getId());
-        assertEquals(-1, new SystemVibrator.MultiVibratorInfo(new VibratorInfo[] {
-                VibratorInfo.EMPTY_VIBRATOR_INFO, VibratorInfo.EMPTY_VIBRATOR_INFO }).getId());
-    }
-
-    @Test
-    public void areEffectsSupported_returnsArrayOfSameSize() {
-        assertEquals(0, mVibratorSpy.areEffectsSupported(new int[0]).length);
-        assertEquals(1,
-                mVibratorSpy.areEffectsSupported(new int[]{VibrationEffect.EFFECT_CLICK}).length);
-        assertEquals(2,
-                mVibratorSpy.areEffectsSupported(new int[]{VibrationEffect.EFFECT_CLICK,
-                        VibrationEffect.EFFECT_TICK}).length);
-    }
-
-    @Test
-    public void areEffectsSupported_noVibrator_returnsAlwaysNo() {
-        VibratorInfo info = new SystemVibrator.NoVibratorInfo();
-        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_NO,
-                info.isEffectSupported(VibrationEffect.EFFECT_CLICK));
-    }
-
-    @Test
-    public void areEffectsSupported_unsupportedInOneVibrator_returnsNo() {
-        VibratorInfo supportedVibrator = new VibratorInfo.Builder(/* id= */ 1)
-                .setSupportedEffects(VibrationEffect.EFFECT_CLICK)
-                .build();
-        VibratorInfo unsupportedVibrator = new VibratorInfo.Builder(/* id= */ 2)
-                .setSupportedEffects(new int[0])
-                .build();
-        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{supportedVibrator, unsupportedVibrator});
-        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_NO,
-                info.isEffectSupported(VibrationEffect.EFFECT_CLICK));
-    }
-
-    @Test
-    public void areEffectsSupported_unknownInOneVibrator_returnsUnknown() {
-        VibratorInfo supportedVibrator = new VibratorInfo.Builder(/* id= */ 1)
-                .setSupportedEffects(VibrationEffect.EFFECT_CLICK)
-                .build();
-        VibratorInfo unknownSupportVibrator = VibratorInfo.EMPTY_VIBRATOR_INFO;
-        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{supportedVibrator, unknownSupportVibrator});
-        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_UNKNOWN,
-                info.isEffectSupported(VibrationEffect.EFFECT_CLICK));
-    }
-
-    @Test
-    public void arePrimitivesSupported_supportedInAllVibrators_returnsYes() {
-        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
-                .setSupportedEffects(VibrationEffect.EFFECT_CLICK)
-                .build();
-        VibratorInfo secondVibrator = new VibratorInfo.Builder(/* id= */ 2)
-                .setSupportedEffects(VibrationEffect.EFFECT_CLICK)
-                .build();
-        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, secondVibrator});
-        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_YES,
-                info.isEffectSupported(VibrationEffect.EFFECT_CLICK));
-    }
-
-    @Test
-    public void arePrimitivesSupported_returnsArrayOfSameSize() {
-        assertEquals(0, mVibratorSpy.arePrimitivesSupported(new int[0]).length);
-        assertEquals(1, mVibratorSpy.arePrimitivesSupported(
-                new int[]{VibrationEffect.Composition.PRIMITIVE_CLICK}).length);
-        assertEquals(2, mVibratorSpy.arePrimitivesSupported(
-                new int[]{VibrationEffect.Composition.PRIMITIVE_CLICK,
-                        VibrationEffect.Composition.PRIMITIVE_QUICK_RISE}).length);
-    }
-
-    @Test
-    public void arePrimitivesSupported_noVibrator_returnsAlwaysFalse() {
-        VibratorInfo info = new SystemVibrator.NoVibratorInfo();
-        assertFalse(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_CLICK));
-    }
-
-    @Test
-    public void arePrimitivesSupported_unsupportedInOneVibrator_returnsFalse() {
-        VibratorInfo supportedVibrator = new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
-                .build();
-        VibratorInfo unsupportedVibrator = VibratorInfo.EMPTY_VIBRATOR_INFO;
-        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{supportedVibrator, unsupportedVibrator});
-        assertFalse(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_CLICK));
-    }
-
-    @Test
-    public void arePrimitivesSupported_supportedInAllVibrators_returnsTrue() {
-        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 5)
-                .build();
-        VibratorInfo secondVibrator = new VibratorInfo.Builder(/* id= */ 2)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 15)
-                .build();
-        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, secondVibrator});
-        assertTrue(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_CLICK));
-    }
-
-    @Test
-    public void getPrimitivesDurations_returnsArrayOfSameSize() {
-        assertEquals(0, mVibratorSpy.getPrimitiveDurations(new int[0]).length);
-        assertEquals(1, mVibratorSpy.getPrimitiveDurations(
-                new int[]{VibrationEffect.Composition.PRIMITIVE_CLICK}).length);
-        assertEquals(2, mVibratorSpy.getPrimitiveDurations(
-                new int[]{VibrationEffect.Composition.PRIMITIVE_CLICK,
-                        VibrationEffect.Composition.PRIMITIVE_QUICK_RISE}).length);
-    }
-
-    @Test
-    public void getPrimitivesDurations_noVibrator_returnsAlwaysZero() {
-        VibratorInfo info = new SystemVibrator.NoVibratorInfo();
-        assertEquals(0, info.getPrimitiveDuration(VibrationEffect.Composition.PRIMITIVE_CLICK));
-    }
-
-    @Test
-    public void getPrimitivesDurations_unsupportedInOneVibrator_returnsZero() {
-        VibratorInfo supportedVibrator = new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
-                .build();
-        VibratorInfo unsupportedVibrator = VibratorInfo.EMPTY_VIBRATOR_INFO;
-        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{supportedVibrator, unsupportedVibrator});
-        assertEquals(0, info.getPrimitiveDuration(VibrationEffect.Composition.PRIMITIVE_CLICK));
-    }
-
-    @Test
-    public void getPrimitivesDurations_supportedInAllVibrators_returnsMaxDuration() {
-        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
-                .build();
-        VibratorInfo secondVibrator = new VibratorInfo.Builder(/* id= */ 2)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 20)
-                .build();
-        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, secondVibrator});
-        assertEquals(20, info.getPrimitiveDuration(VibrationEffect.Composition.PRIMITIVE_CLICK));
-    }
-
-    @Test
-    public void getQFactorAndResonantFrequency_noVibrator_returnsNaN() {
-        VibratorInfo info = new SystemVibrator.NoVibratorInfo();
-
-        assertTrue(Float.isNaN(info.getQFactor()));
-        assertTrue(Float.isNaN(info.getResonantFrequencyHz()));
-    }
-
-    @Test
-    public void getQFactorAndResonantFrequency_differentValues_returnsNaN() {
-        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setQFactor(1f)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(1, 1, 1, null))
-                .build();
-        VibratorInfo secondVibrator = new VibratorInfo.Builder(/* id= */ 2)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setQFactor(2f)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(2, 2, 2, null))
-                .build();
-        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, secondVibrator});
-
-        assertTrue(Float.isNaN(info.getQFactor()));
-        assertTrue(Float.isNaN(info.getResonantFrequencyHz()));
-        assertEmptyFrequencyProfileAndControl(info);
-
-        // One vibrator with values undefined.
-        VibratorInfo thirdVibrator = new VibratorInfo.Builder(/* id= */ 3).build();
-        info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, thirdVibrator});
-
-        assertTrue(Float.isNaN(info.getQFactor()));
-        assertTrue(Float.isNaN(info.getResonantFrequencyHz()));
-        assertEmptyFrequencyProfileAndControl(info);
-    }
-
-    @Test
-    public void getQFactorAndResonantFrequency_sameValues_returnsValue() {
-        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setQFactor(10f)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(
-                        /* resonantFrequencyHz= */ 11, 10, 0.5f, null))
-                .build();
-        VibratorInfo secondVibrator = new VibratorInfo.Builder(/* id= */ 2)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setQFactor(10f)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(
-                        /* resonantFrequencyHz= */ 11, 5, 1, null))
-                .build();
-        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, secondVibrator});
-
-        assertEquals(10f, info.getQFactor(), TEST_TOLERANCE);
-        assertEquals(11f, info.getResonantFrequencyHz(), TEST_TOLERANCE);
-
-        // No frequency range defined.
-        assertTrue(info.getFrequencyProfile().isEmpty());
-        assertEquals(false, info.hasCapability(IVibrator.CAP_FREQUENCY_CONTROL));
-    }
-
-    @Test
-    public void getFrequencyProfile_noVibrator_returnsEmpty() {
-        VibratorInfo info = new SystemVibrator.NoVibratorInfo();
-
-        assertEmptyFrequencyProfileAndControl(info);
-    }
-
-    @Test
-    public void getFrequencyProfile_differentResonantFrequencyOrResolutionValues_returnsEmpty() {
-        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(1, 1, 1,
-                        new float[] { 0, 1 }))
-                .build();
-        VibratorInfo differentResonantFrequency = new VibratorInfo.Builder(/* id= */ 2)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(2, 1, 1,
-                        new float[] { 0, 1 }))
-                .build();
-        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, differentResonantFrequency});
-
-        assertEmptyFrequencyProfileAndControl(info);
-
-        VibratorInfo differentFrequencyResolution = new VibratorInfo.Builder(/* id= */ 2)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(1, 1, 2,
-                        new float[] { 0, 1 }))
-                .build();
-        info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, differentFrequencyResolution});
-
-        assertEmptyFrequencyProfileAndControl(info);
-    }
-
-    @Test
-    public void getFrequencyProfile_missingValues_returnsEmpty() {
-        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(1, 1, 1,
-                        new float[] { 0, 1 }))
-                .build();
-        VibratorInfo missingResonantFrequency = new VibratorInfo.Builder(/* id= */ 2)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(Float.NaN, 1, 1,
-                        new float[] { 0, 1 }))
-                .build();
-        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, missingResonantFrequency});
-
-        assertEmptyFrequencyProfileAndControl(info);
-
-        VibratorInfo missingMinFrequency = new VibratorInfo.Builder(/* id= */ 2)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(1, Float.NaN, 1,
-                        new float[] { 0, 1 }))
-                .build();
-        info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, missingMinFrequency});
-
-        assertEmptyFrequencyProfileAndControl(info);
-
-        VibratorInfo missingFrequencyResolution = new VibratorInfo.Builder(/* id= */ 2)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(1, 1, Float.NaN,
-                        new float[] { 0, 1 }))
-                .build();
-        info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, missingFrequencyResolution});
-
-        assertEmptyFrequencyProfileAndControl(info);
-
-        VibratorInfo missingMaxAmplitudes = new VibratorInfo.Builder(/* id= */ 2)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(1, 1, 1, null))
-                .build();
-        info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, missingMaxAmplitudes});
-
-        assertEmptyFrequencyProfileAndControl(info);
-    }
-
-    @Test
-    public void getFrequencyProfile_unalignedMaxAmplitudes_returnsEmpty() {
-        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(11, 10, 0.5f,
-                        new float[] { 0, 1, 1, 0 }))
-                .build();
-        VibratorInfo unalignedMinFrequency = new VibratorInfo.Builder(/* id= */ 2)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(11, 10.1f, 0.5f,
-                        new float[] { 0, 1, 1, 0 }))
-                .build();
-        VibratorInfo thirdVibrator = new VibratorInfo.Builder(/* id= */ 2)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(11, 10.5f, 0.5f,
-                        new float[] { 0, 1, 1, 0 }))
-                .build();
-        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, unalignedMinFrequency, thirdVibrator});
-
-        assertEmptyFrequencyProfileAndControl(info);
-    }
-
-    @Test
-    public void getFrequencyProfile_alignedProfiles_returnsIntersection() {
-        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(11, 10, 0.5f,
-                        new float[] { 0.5f, 1, 1, 0.5f }))
-                .build();
-        VibratorInfo secondVibrator = new VibratorInfo.Builder(/* id= */ 2)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(11, 10.5f, 0.5f,
-                        new float[] { 1, 1, 1 }))
-                .build();
-        VibratorInfo thirdVibrator = new VibratorInfo.Builder(/* id= */ 3)
-                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(11, 10.5f, 0.5f,
-                        new float[] { 0.8f, 1, 0.8f, 0.5f }))
-                .build();
-        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, secondVibrator, thirdVibrator});
-
-        assertEquals(
-                new VibratorInfo.FrequencyProfile(11, 10.5f, 0.5f, new float[] { 0.8f, 1, 0.5f }),
-                info.getFrequencyProfile());
-        assertEquals(true, info.hasCapability(IVibrator.CAP_FREQUENCY_CONTROL));
-
-        // Third vibrator without frequency control capability.
-        thirdVibrator = new VibratorInfo.Builder(/* id= */ 3)
-                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(11, 10.5f, 0.5f,
-                        new float[] { 0.8f, 1, 0.8f, 0.5f }))
-                .build();
-        info = new SystemVibrator.MultiVibratorInfo(
-                new VibratorInfo[]{firstVibrator, secondVibrator, thirdVibrator});
-
-        assertEquals(
-                new VibratorInfo.FrequencyProfile(11, 10.5f, 0.5f, new float[] { 0.8f, 1, 0.5f }),
-                info.getFrequencyProfile());
-        assertEquals(false, info.hasCapability(IVibrator.CAP_FREQUENCY_CONTROL));
-    }
-
-    @Test
-    public void onVibratorStateChanged_noVibrator_registersNoListenerToVibratorManager() {
-        VibratorManager mockVibratorManager = mock(VibratorManager.class);
-        when(mockVibratorManager.getVibratorIds()).thenReturn(new int[0]);
-
-        Vibrator.OnVibratorStateChangedListener mockListener =
-                mock(Vibrator.OnVibratorStateChangedListener.class);
-        SystemVibrator.MultiVibratorStateListener multiVibratorListener =
-                new SystemVibrator.MultiVibratorStateListener(
-                        mTestLooper.getNewExecutor(), mockListener);
-
-        multiVibratorListener.register(mockVibratorManager);
-
-        // Never tries to register a listener to an individual vibrator.
-        assertFalse(multiVibratorListener.hasRegisteredListeners());
-        verify(mockVibratorManager, never()).getVibrator(anyInt());
-    }
-
-    @Test
-    public void onVibratorStateChanged_singleVibrator_forwardsAllCallbacks() {
-        VibratorManager mockVibratorManager = mock(VibratorManager.class);
-        when(mockVibratorManager.getVibratorIds()).thenReturn(new int[] { 1 });
-        when(mockVibratorManager.getVibrator(anyInt())).thenReturn(NullVibrator.getInstance());
-
-        Vibrator.OnVibratorStateChangedListener mockListener =
-                mock(Vibrator.OnVibratorStateChangedListener.class);
-        SystemVibrator.MultiVibratorStateListener multiVibratorListener =
-                new SystemVibrator.MultiVibratorStateListener(
-                        mTestLooper.getNewExecutor(), mockListener);
-
-        multiVibratorListener.register(mockVibratorManager);
-        assertTrue(multiVibratorListener.hasRegisteredListeners());
-
-        multiVibratorListener.onVibrating(/* vibratorIdx= */ 0, /* vibrating= */ false);
-        multiVibratorListener.onVibrating(/* vibratorIdx= */ 0, /* vibrating= */ true);
-        multiVibratorListener.onVibrating(/* vibratorIdx= */ 0, /* vibrating= */ false);
-
-        mTestLooper.dispatchAll();
-
-        InOrder inOrder = inOrder(mockListener);
-        inOrder.verify(mockListener).onVibratorStateChanged(eq(false));
-        inOrder.verify(mockListener).onVibratorStateChanged(eq(true));
-        inOrder.verify(mockListener).onVibratorStateChanged(eq(false));
-        inOrder.verifyNoMoreInteractions();
-    }
-
-    @Test
-    public void onVibratorStateChanged_multipleVibrators_triggersOnlyWhenAllVibratorsInitialized() {
-        VibratorManager mockVibratorManager = mock(VibratorManager.class);
-        when(mockVibratorManager.getVibratorIds()).thenReturn(new int[] { 1, 2 });
-        when(mockVibratorManager.getVibrator(anyInt())).thenReturn(NullVibrator.getInstance());
-
-        Vibrator.OnVibratorStateChangedListener mockListener =
-                mock(Vibrator.OnVibratorStateChangedListener.class);
-        SystemVibrator.MultiVibratorStateListener multiVibratorListener =
-                new SystemVibrator.MultiVibratorStateListener(
-                        mTestLooper.getNewExecutor(), mockListener);
-
-        multiVibratorListener.register(mockVibratorManager);
-        assertTrue(multiVibratorListener.hasRegisteredListeners());
-
-        multiVibratorListener.onVibrating(/* vibratorIdx= */ 0, /* vibrating= */ false);
-        mTestLooper.dispatchAll();
-        verify(mockListener, never()).onVibratorStateChanged(anyBoolean());
-
-        multiVibratorListener.onVibrating(/* vibratorIdx= */ 1, /* vibrating= */ false);
-        mTestLooper.dispatchAll();
-        verify(mockListener).onVibratorStateChanged(eq(false));
-        verifyNoMoreInteractions(mockListener);
-    }
-
-    @Test
-    public void onVibratorStateChanged_multipleVibrators_stateChangeIsDeduped() {
-        VibratorManager mockVibratorManager = mock(VibratorManager.class);
-        when(mockVibratorManager.getVibratorIds()).thenReturn(new int[] { 1, 2 });
-        when(mockVibratorManager.getVibrator(anyInt())).thenReturn(NullVibrator.getInstance());
-
-        Vibrator.OnVibratorStateChangedListener mockListener =
-                mock(Vibrator.OnVibratorStateChangedListener.class);
-        SystemVibrator.MultiVibratorStateListener multiVibratorListener =
-                new SystemVibrator.MultiVibratorStateListener(
-                        mTestLooper.getNewExecutor(), mockListener);
-
-        multiVibratorListener.register(mockVibratorManager);
-        assertTrue(multiVibratorListener.hasRegisteredListeners());
-
-        multiVibratorListener.onVibrating(/* vibratorIdx= */ 0, /* vibrating= */ false); // none
-        multiVibratorListener.onVibrating(/* vibratorIdx= */ 1, /* vibrating= */ false); // false
-        multiVibratorListener.onVibrating(/* vibratorIdx= */ 0, /* vibrating= */ true);  // true
-        multiVibratorListener.onVibrating(/* vibratorIdx= */ 1, /* vibrating= */ true);  // true
-        multiVibratorListener.onVibrating(/* vibratorIdx= */ 0, /* vibrating= */ false); // true
-        multiVibratorListener.onVibrating(/* vibratorIdx= */ 1, /* vibrating= */ false); // false
-
-        mTestLooper.dispatchAll();
-
-        InOrder inOrder = inOrder(mockListener);
-        inOrder.verify(mockListener).onVibratorStateChanged(eq(false));
-        inOrder.verify(mockListener).onVibratorStateChanged(eq(true));
-        inOrder.verify(mockListener).onVibratorStateChanged(eq(false));
-        inOrder.verifyNoMoreInteractions();
-    }
-
-    @Test
-    public void vibrate_withVibrationAttributes_usesGivenAttributes() {
-        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
-        VibrationAttributes attributes = new VibrationAttributes.Builder().setUsage(
-                VibrationAttributes.USAGE_TOUCH).build();
-
-        mVibratorSpy.vibrate(effect, attributes);
-
-        verify(mVibratorSpy).vibrate(anyInt(), anyString(), eq(effect), isNull(), eq(attributes));
-    }
-
-    @Test
-    public void vibrate_withAudioAttributes_createsVibrationAttributesWithSameUsage() {
-        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
-        AudioAttributes audioAttributes = new AudioAttributes.Builder().setUsage(
-                AudioAttributes.USAGE_VOICE_COMMUNICATION).build();
-
-        mVibratorSpy.vibrate(effect, audioAttributes);
-
-        ArgumentCaptor<VibrationAttributes> captor = ArgumentCaptor.forClass(
-                VibrationAttributes.class);
-        verify(mVibratorSpy).vibrate(anyInt(), anyString(), eq(effect), isNull(), captor.capture());
-
-        VibrationAttributes vibrationAttributes = captor.getValue();
-        assertEquals(VibrationAttributes.USAGE_COMMUNICATION_REQUEST,
-                vibrationAttributes.getUsage());
-        // Keeps original AudioAttributes usage to be used by the VibratorService.
-        assertEquals(AudioAttributes.USAGE_VOICE_COMMUNICATION,
-                vibrationAttributes.getAudioUsage());
-    }
-
-    @Test
-    public void vibrate_withoutAudioAttributes_passesOnDefaultAttributes() {
-        mVibratorSpy.vibrate(VibrationEffect.get(VibrationEffect.EFFECT_CLICK));
-
-        ArgumentCaptor<VibrationAttributes> captor = ArgumentCaptor.forClass(
-                VibrationAttributes.class);
-        verify(mVibratorSpy).vibrate(anyInt(), anyString(), any(), isNull(), captor.capture());
-
-        VibrationAttributes vibrationAttributes = captor.getValue();
-        assertEquals(new VibrationAttributes.Builder().build(), vibrationAttributes);
-    }
-
-    @Test
-    public void areVibrationFeaturesSupported_noAmplitudeControl_fractionalAmplitudes() {
-        Vibrator vibrator =
-                createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
-                        .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                        .setSupportedEffects(VibrationEffect.EFFECT_THUD)
-                        .build());
-
-        // Have at least one fractional amplitude (amplitude not min (0) or max (255) or DEFAULT).
-        assertFalse(vibrator.areVibrationFeaturesSupported(waveformWithAmplitudes(10, 30)));
-        assertFalse(vibrator.areVibrationFeaturesSupported(waveformWithAmplitudes(10, 255)));
-        assertFalse(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.createOneShot(20, /* amplitude= */ 40)));
-    }
-
-    @Test
-    public void areVibrationFeaturesSupported_noAmplitudeControl_nonFractionalAmplitudes() {
-        Vibrator vibrator =
-                createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
-                        .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                        .setSupportedEffects(VibrationEffect.EFFECT_THUD)
-                        .build());
-
-        // All amplitudes are min, max, or default. Requires no amplitude control.
-        assertTrue(vibrator.areVibrationFeaturesSupported(
-                waveformWithAmplitudes(255, 0, VibrationEffect.DEFAULT_AMPLITUDE, 255)));
-        assertTrue(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.createWaveform(
-                        /* timings= */ new long[] {1, 2, 3}, /* repeatIndex= */ -1)));
-        assertTrue(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.createOneShot(20, VibrationEffect.DEFAULT_AMPLITUDE)));
-        assertTrue(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.createOneShot(20, /* amplitude= */ 255)));
-    }
-
-    @Test
-    public void areVibrationFeaturesSupported_withAmplitudeControl() {
-        Vibrator vibrator =
-                createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
-                        .setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL)
-                        .build());
-
-        // All forms of amplitudes are valid when amplitude control is available.
-        assertTrue(vibrator.areVibrationFeaturesSupported(
-                waveformWithAmplitudes(255, 0, VibrationEffect.DEFAULT_AMPLITUDE, 255)));
-        assertTrue(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.createWaveform(
-                        /* timings= */ new long[] {1, 2, 3}, /* repeatIndex= */ -1)));
-        assertTrue(vibrator.areVibrationFeaturesSupported(waveformWithAmplitudes(10, 30, 50)));
-        assertTrue(vibrator.areVibrationFeaturesSupported(
-                waveformWithAmplitudes(7, 255, 0, 0, 60)));
-        assertTrue(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.createOneShot(20, VibrationEffect.DEFAULT_AMPLITUDE)));
-        assertTrue(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.createOneShot(20, /* amplitude= */ 255)));
-        assertTrue(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.createOneShot(20, /* amplitude= */ 40)));
-    }
-
-    @Test
-    public void areVibrationFeaturesSupported_primitiveCompositionsWithSupportedPrimitives() {
-        Vibrator vibrator = createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
-                .build());
-
-        assertTrue(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                        .compose()));
-        assertTrue(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.startComposition()
-                        .addPrimitive(
-                                VibrationEffect.Composition.PRIMITIVE_CLICK,
-                                /* scale= */ 0.2f,
-                                /* delay= */ 200)
-                        .compose()));
-    }
-
-    @Test
-    public void areVibrationFeaturesSupported_primitiveCompositionsWithUnupportedPrimitives() {
-        Vibrator vibrator = createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
-                .build());
-
-        assertFalse(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD)
-                        .compose()));
-        assertFalse(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_LOW_TICK)
-                        .compose()));
-    }
-
-    @Test
-    public void areVibrationFeaturesSupported_composedEffects_allComponentsSupported() {
-        Vibrator vibrator = createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS | IVibrator.CAP_AMPLITUDE_CONTROL)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
-                .setSupportedEffects(VibrationEffect.EFFECT_TICK, VibrationEffect.EFFECT_POP)
-                .build());
-
-        assertTrue(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                        .addEffect(VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {1, 2, 3},
-                                /* amplitudes= */ new int[] {10, 20, 255},
-                                /* repeatIndex= */ -1))
-                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
-                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_POP))
-                        .compose()));
-
-        vibrator = createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD, 10)
-                .setSupportedEffects(VibrationEffect.EFFECT_POP, VibrationEffect.EFFECT_CLICK)
-                .build());
-
-        assertTrue(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD)
-                        .addEffect(VibrationEffect.createWaveform(
-                                // These timings are given either 0 or default amplitudes, which
-                                // do not require vibrator's amplitude control.
-                                /* timings= */ new long[] {1, 2, 3},
-                                /* repeatIndex= */ -1))
-                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_POP))
-                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
-                        .compose()));
-    }
-
-    @Test
-    public void areVibrationFeaturesSupported_composedEffects_someComponentsUnupported() {
-        Vibrator vibrator = createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS | IVibrator.CAP_AMPLITUDE_CONTROL)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
-                .setSupportedEffects(VibrationEffect.EFFECT_TICK, VibrationEffect.EFFECT_POP)
-                .build());
-
-        // Not supported due to the TICK primitive, which the vibrator has no support for.
-        assertFalse(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
-                        .addEffect(VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {1, 2, 3},
-                                /* amplitudes= */ new int[] {10, 20, 255},
-                                /* repeatIndex= */ -1))
-                        .compose()));
-        // Not supported due to the THUD effect, which the vibrator has no support for.
-        assertFalse(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                        .addEffect(VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {1, 2, 3},
-                                /* amplitudes= */ new int[] {10, 20, 255},
-                                /* repeatIndex= */ -1))
-                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_THUD))
-                        .compose()));
-
-        vibrator = createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
-                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD, 10)
-                .setSupportedEffects(VibrationEffect.EFFECT_POP)
-                .build());
-
-        // Not supported due to fractional amplitudes (amplitudes not min (0) or max (255) or
-        // DEFAULT), because the vibrator has no amplitude control.
-        assertFalse(vibrator.areVibrationFeaturesSupported(
-                VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD)
-                        .addEffect(VibrationEffect.createWaveform(
-                                /* timings= */ new long[] {1, 2, 3},
-                                /* amplitudes= */ new int[] {10, 20, 255},
-                                /* repeatIndex= */ -1))
-                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_POP))
-                        .compose()));
-    }
-
-    /**
-     * Asserts that the frequency profile is empty, and therefore frequency control isn't supported.
-     */
-    void assertEmptyFrequencyProfileAndControl(VibratorInfo info) {
-        assertTrue(info.getFrequencyProfile().isEmpty());
-        assertEquals(false, info.hasCapability(IVibrator.CAP_FREQUENCY_CONTROL));
-    }
-
-    private Vibrator createVibratorWithCustomInfo(VibratorInfo info) {
-        return new SystemVibrator(mContextSpy) {
-            @Override
-            public VibratorInfo getInfo() {
-                return info;
-            }
-        };
-    }
-
-    private static VibrationEffect waveformWithAmplitudes(int...amplitudes) {
-        long[] timings = new long[amplitudes.length];
-        for (int i = 0; i < timings.length; i++) {
-            timings[i] = i * 2; // Arbitrary timings.
-        }
-        return VibrationEffect.createWaveform(timings, amplitudes, /* repeatIndex= */ -1);
-    }
-}
diff --git a/core/tests/coretests/src/android/os/health/SystemHealthManagerTest.java b/core/tests/coretests/src/android/os/health/SystemHealthManagerTest.java
new file mode 100644
index 0000000..2232e3a
--- /dev/null
+++ b/core/tests/coretests/src/android/os/health/SystemHealthManagerTest.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.os.health;
+
+import static androidx.test.InstrumentationRegistry.getContext;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.os.PowerMonitor;
+import android.os.PowerMonitorReadings;
+
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SystemHealthManagerTest {
+
+    @Test
+    public void getPowerMonitors() {
+        SystemHealthManager shm = getContext().getSystemService(SystemHealthManager.class);
+        PowerMonitor[] powerMonitorInfo = shm.getSupportedPowerMonitors();
+        assertThat(powerMonitorInfo).isNotNull();
+        if (powerMonitorInfo.length == 0) {
+            // This device does not support PowerStats HAL
+            return;
+        }
+
+        PowerMonitor consumerMonitor = null;
+        PowerMonitor measurementMonitor = null;
+        for (PowerMonitor pmi : powerMonitorInfo) {
+            if (pmi.type == PowerMonitor.POWER_MONITOR_TYPE_MEASUREMENT) {
+                measurementMonitor = pmi;
+            } else {
+                consumerMonitor = pmi;
+            }
+        }
+
+        List<PowerMonitor> pmis = new ArrayList<>();
+        if (consumerMonitor != null) {
+            pmis.add(consumerMonitor);
+        }
+        if (measurementMonitor != null) {
+            pmis.add(measurementMonitor);
+        }
+
+        PowerMonitor[] selectedMonitors = pmis.toArray(new PowerMonitor[0]);
+        PowerMonitorReadings readings = shm.getPowerMonitorReadings(selectedMonitors);
+
+        for (PowerMonitor monitor : selectedMonitors) {
+            assertThat(readings.getConsumedEnergyUws(monitor)).isAtLeast(0);
+            assertThat(readings.getTimestampMs(monitor)).isGreaterThan(0);
+        }
+    }
+}
diff --git a/core/tests/coretests/src/android/os/vibrator/OWNERS b/core/tests/coretests/src/android/os/vibrator/OWNERS
deleted file mode 100644
index b54d6bf..0000000
--- a/core/tests/coretests/src/android/os/vibrator/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-include platform/frameworks/base:/services/core/java/com/android/server/vibrator/OWNERS
\ No newline at end of file
diff --git a/core/tests/coretests/src/android/os/vibrator/PrebakedSegmentTest.java b/core/tests/coretests/src/android/os/vibrator/PrebakedSegmentTest.java
deleted file mode 100644
index 9099274..0000000
--- a/core/tests/coretests/src/android/os/vibrator/PrebakedSegmentTest.java
+++ /dev/null
@@ -1,299 +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 android.os.vibrator;
-
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertSame;
-import static junit.framework.Assert.assertTrue;
-
-import static org.testng.Assert.assertNotEquals;
-import static org.testng.Assert.assertThrows;
-
-import android.os.Parcel;
-import android.os.SystemVibrator;
-import android.os.VibrationEffect;
-import android.os.Vibrator;
-import android.os.VibratorInfo;
-import android.platform.test.annotations.Presubmit;
-
-import androidx.test.InstrumentationRegistry;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@Presubmit
-@RunWith(MockitoJUnitRunner.class)
-public class PrebakedSegmentTest {
-
-    @Test
-    public void testCreation() {
-        PrebakedSegment prebaked = new PrebakedSegment(
-                VibrationEffect.EFFECT_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-
-        assertEquals(-1, prebaked.getDuration());
-        assertTrue(prebaked.hasNonZeroAmplitude());
-        assertEquals(VibrationEffect.EFFECT_CLICK, prebaked.getEffectId());
-        assertEquals(VibrationEffect.EFFECT_STRENGTH_MEDIUM, prebaked.getEffectStrength());
-        assertTrue(prebaked.shouldFallback());
-    }
-
-    @Test
-    public void testSerialization() {
-        PrebakedSegment original = new PrebakedSegment(
-                VibrationEffect.EFFECT_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-        Parcel parcel = Parcel.obtain();
-        original.writeToParcel(parcel, 0);
-        parcel.setDataPosition(0);
-        assertEquals(original, PrebakedSegment.CREATOR.createFromParcel(parcel));
-    }
-
-    @Test
-    public void testValidate() {
-        new PrebakedSegment(VibrationEffect.EFFECT_CLICK, true,
-                VibrationEffect.EFFECT_STRENGTH_MEDIUM).validate();
-
-        assertThrows(IllegalArgumentException.class,
-                () -> new PrebakedSegment(1000, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
-                        .validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new PrebakedSegment(VibrationEffect.EFFECT_TICK, false, 1000)
-                        .validate());
-    }
-
-    @Test
-    public void testResolve_ignoresAndReturnsSameEffect() {
-        PrebakedSegment prebaked = new PrebakedSegment(
-                VibrationEffect.EFFECT_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-        assertSame(prebaked, prebaked.resolve(1000));
-    }
-
-    @Test
-    public void testApplyEffectStrength() {
-        PrebakedSegment medium = new PrebakedSegment(
-                VibrationEffect.EFFECT_THUD, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-
-        PrebakedSegment light = medium.applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_LIGHT);
-        assertNotEquals(medium, light);
-        assertEquals(medium.getEffectId(), light.getEffectId());
-        assertEquals(medium.shouldFallback(), light.shouldFallback());
-        assertEquals(VibrationEffect.EFFECT_STRENGTH_LIGHT, light.getEffectStrength());
-
-        PrebakedSegment strong = medium.applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_STRONG);
-        assertNotEquals(medium, strong);
-        assertEquals(medium.getEffectId(), strong.getEffectId());
-        assertEquals(medium.shouldFallback(), strong.shouldFallback());
-        assertEquals(VibrationEffect.EFFECT_STRENGTH_STRONG, strong.getEffectStrength());
-
-        assertSame(medium, medium.applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_MEDIUM));
-        // Invalid vibration effect strength is ignored.
-        assertSame(medium, medium.applyEffectStrength(1000));
-    }
-
-    @Test
-    public void testScale_ignoresAndReturnsSameEffect() {
-        PrebakedSegment prebaked = new PrebakedSegment(
-                VibrationEffect.EFFECT_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-        assertSame(prebaked, prebaked.scale(0.5f));
-    }
-
-    @Test
-    public void testDuration() {
-        assertEquals(-1, new PrebakedSegment(
-                VibrationEffect.EFFECT_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
-                .getDuration());
-        assertEquals(-1, new PrebakedSegment(
-                VibrationEffect.EFFECT_TICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
-                .getDuration());
-        assertEquals(-1, new PrebakedSegment(
-                VibrationEffect.EFFECT_DOUBLE_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
-                .getDuration());
-        assertEquals(-1, new PrebakedSegment(
-                VibrationEffect.EFFECT_THUD, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
-                .getDuration());
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidate_prebakedConstants_areCandidates() {
-        assertTrue(new PrebakedSegment(
-                VibrationEffect.EFFECT_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
-                .isHapticFeedbackCandidate());
-        assertTrue(new PrebakedSegment(
-                VibrationEffect.EFFECT_TICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
-                .isHapticFeedbackCandidate());
-        assertTrue(new PrebakedSegment(
-                VibrationEffect.EFFECT_DOUBLE_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
-                .isHapticFeedbackCandidate());
-        assertTrue(new PrebakedSegment(
-                VibrationEffect.EFFECT_HEAVY_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
-                .isHapticFeedbackCandidate());
-        assertTrue(new PrebakedSegment(
-                VibrationEffect.EFFECT_THUD, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
-                .isHapticFeedbackCandidate());
-        assertTrue(new PrebakedSegment(
-                VibrationEffect.EFFECT_TEXTURE_TICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
-                .isHapticFeedbackCandidate());
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_idsWithFallback_fallbackEnabled_vibratorSupport() {
-        Vibrator vibrator = createVibratorWithSupportedEffects(
-                VibrationEffect.EFFECT_TICK,
-                VibrationEffect.EFFECT_CLICK,
-                VibrationEffect.EFFECT_DOUBLE_CLICK,
-                VibrationEffect.EFFECT_HEAVY_CLICK);
-
-        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_TICK)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_CLICK)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_DOUBLE_CLICK)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_HEAVY_CLICK)
-                .areVibrationFeaturesSupported(vibrator));
-
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_idsWithFallback_fallbackEnabled_noVibratorSupport() {
-        Vibrator vibrator = createVibratorWithSupportedEffects(new int[0]);
-
-        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_TICK)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_CLICK)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_DOUBLE_CLICK)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_HEAVY_CLICK)
-                .areVibrationFeaturesSupported(vibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_idsWithFallback_fallbackDisabled_vibratorSupport() {
-        Vibrator vibrator = createVibratorWithSupportedEffects(
-                VibrationEffect.EFFECT_TICK,
-                VibrationEffect.EFFECT_CLICK,
-                VibrationEffect.EFFECT_DOUBLE_CLICK,
-                VibrationEffect.EFFECT_HEAVY_CLICK);
-
-        assertTrue(createSegmentWithoutFallback(VibrationEffect.EFFECT_TICK)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(createSegmentWithoutFallback(VibrationEffect.EFFECT_CLICK)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(createSegmentWithoutFallback(VibrationEffect.EFFECT_DOUBLE_CLICK)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(createSegmentWithoutFallback(VibrationEffect.EFFECT_HEAVY_CLICK)
-                .areVibrationFeaturesSupported(vibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_idsWithFallback_fallbackDisabled_noVibratorSupport() {
-        Vibrator vibrator = createVibratorWithSupportedEffects(new int[0]);
-
-        assertFalse(createSegmentWithoutFallback(VibrationEffect.EFFECT_TICK)
-                .areVibrationFeaturesSupported(vibrator));
-        assertFalse(createSegmentWithoutFallback(VibrationEffect.EFFECT_CLICK)
-                .areVibrationFeaturesSupported(vibrator));
-        assertFalse(createSegmentWithoutFallback(VibrationEffect.EFFECT_DOUBLE_CLICK)
-                .areVibrationFeaturesSupported(vibrator));
-        assertFalse(createSegmentWithoutFallback(VibrationEffect.EFFECT_HEAVY_CLICK)
-                .areVibrationFeaturesSupported(vibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_idsWithNoFallback_fallbackEnabled_vibratorSupport() {
-        Vibrator vibrator = createVibratorWithSupportedEffects(
-                VibrationEffect.EFFECT_THUD,
-                VibrationEffect.EFFECT_POP,
-                VibrationEffect.EFFECT_TEXTURE_TICK);
-
-        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_THUD)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_POP)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_TEXTURE_TICK)
-                .areVibrationFeaturesSupported(vibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_idsWithNoFallback_fallbackEnabled_noVibratorSupport() {
-        Vibrator vibrator = createVibratorWithSupportedEffects(new int[0]);
-
-        assertFalse(createSegmentWithFallback(VibrationEffect.EFFECT_THUD)
-                .areVibrationFeaturesSupported(vibrator));
-        assertFalse(createSegmentWithFallback(VibrationEffect.EFFECT_POP)
-                .areVibrationFeaturesSupported(vibrator));
-        assertFalse(createSegmentWithFallback(VibrationEffect.EFFECT_TEXTURE_TICK)
-                .areVibrationFeaturesSupported(vibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_idsWithNoFallback_fallbackDisabled_vibratorSupport() {
-        Vibrator vibrator = createVibratorWithSupportedEffects(
-                VibrationEffect.EFFECT_THUD,
-                VibrationEffect.EFFECT_POP,
-                VibrationEffect.EFFECT_TEXTURE_TICK);
-
-        assertTrue(createSegmentWithoutFallback(VibrationEffect.EFFECT_THUD)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(createSegmentWithoutFallback(VibrationEffect.EFFECT_POP)
-                .areVibrationFeaturesSupported(vibrator));
-        assertTrue(createSegmentWithoutFallback(VibrationEffect.EFFECT_TEXTURE_TICK)
-                .areVibrationFeaturesSupported(vibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_idsWithNoFallback_fallbackDisabled_noVibSupport() {
-        Vibrator vibrator = createVibratorWithSupportedEffects(new int[0]);
-
-        assertFalse(createSegmentWithoutFallback(VibrationEffect.EFFECT_THUD)
-                .areVibrationFeaturesSupported(vibrator));
-        assertFalse(createSegmentWithoutFallback(VibrationEffect.EFFECT_POP)
-                .areVibrationFeaturesSupported(vibrator));
-        assertFalse(createSegmentWithoutFallback(VibrationEffect.EFFECT_TEXTURE_TICK)
-                .areVibrationFeaturesSupported(vibrator));
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidate_prebakedRingtones_notCandidates() {
-        assertFalse(new PrebakedSegment(
-                VibrationEffect.RINGTONES[1], true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
-                .isHapticFeedbackCandidate());
-    }
-
-    private static PrebakedSegment createSegmentWithFallback(int effectId) {
-        // note: arbitrary effect strength being used.
-        return new PrebakedSegment(effectId, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-    }
-
-    private static PrebakedSegment createSegmentWithoutFallback(int effectId) {
-        // note: arbitrary effect strength being used.
-        return new PrebakedSegment(effectId, false, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-    }
-
-    private static Vibrator createVibratorWithSupportedEffects(int... supportedEffects) {
-        return new SystemVibrator(InstrumentationRegistry.getContext()) {
-            @Override
-            public VibratorInfo getInfo() {
-                return new VibratorInfo.Builder(/* id= */ 1)
-                        .setSupportedEffects(supportedEffects)
-                        .build();
-            }
-        };
-    }
-}
diff --git a/core/tests/coretests/src/android/os/vibrator/PrimitiveSegmentTest.java b/core/tests/coretests/src/android/os/vibrator/PrimitiveSegmentTest.java
deleted file mode 100644
index 298438f..0000000
--- a/core/tests/coretests/src/android/os/vibrator/PrimitiveSegmentTest.java
+++ /dev/null
@@ -1,210 +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 android.os.vibrator;
-
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertSame;
-import static junit.framework.Assert.assertTrue;
-
-import static org.testng.Assert.assertThrows;
-
-import android.hardware.vibrator.IVibrator;
-import android.os.Parcel;
-import android.os.SystemVibrator;
-import android.os.VibrationEffect;
-import android.os.Vibrator;
-import android.os.VibratorInfo;
-import android.platform.test.annotations.Presubmit;
-
-import androidx.test.InstrumentationRegistry;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@Presubmit
-@RunWith(MockitoJUnitRunner.class)
-public class PrimitiveSegmentTest {
-    private static final float TOLERANCE = 1e-2f;
-
-    @Test
-    public void testCreation() {
-        PrimitiveSegment primitive = new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 10);
-
-        assertEquals(-1, primitive.getDuration());
-        assertTrue(primitive.hasNonZeroAmplitude());
-        assertEquals(VibrationEffect.Composition.PRIMITIVE_CLICK, primitive.getPrimitiveId());
-        assertEquals(10, primitive.getDelay());
-        assertEquals(1f, primitive.getScale(), TOLERANCE);
-    }
-
-    @Test
-    public void testSerialization() {
-        PrimitiveSegment original = new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 10);
-        Parcel parcel = Parcel.obtain();
-        original.writeToParcel(parcel, 0);
-        parcel.setDataPosition(0);
-        assertEquals(original, PrimitiveSegment.CREATOR.createFromParcel(parcel));
-    }
-
-    @Test
-    public void testValidate() {
-        new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0).validate();
-
-        assertThrows(IllegalArgumentException.class,
-                () -> new PrimitiveSegment(1000, 0, 10).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_NOOP, -1, 0)
-                        .validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_NOOP, 1, -1)
-                        .validate());
-    }
-
-    @Test
-    public void testResolve_ignoresAndReturnsSameEffect() {
-        PrimitiveSegment primitive = new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0);
-        assertSame(primitive, primitive.resolve(1000));
-    }
-
-    @Test
-    public void testApplyEffectStrength_ignoresAndReturnsSameEffect() {
-        PrimitiveSegment primitive = new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0);
-        assertSame(primitive,
-                primitive.applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_STRONG));
-    }
-
-    @Test
-    public void testScale_fullPrimitiveScaleValue() {
-        PrimitiveSegment initial = new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0);
-
-        assertEquals(1f, initial.scale(1).getScale(), TOLERANCE);
-        assertEquals(0.34f, initial.scale(0.5f).getScale(), TOLERANCE);
-        // The original value was not scaled up, so this only scales it down.
-        assertEquals(1f, initial.scale(1.5f).getScale(), TOLERANCE);
-        assertEquals(0.53f, initial.scale(1.5f).scale(2 / 3f).getScale(), TOLERANCE);
-        // Does not restore to the exact original value because scale up is a bit offset.
-        assertEquals(0.71f, initial.scale(0.8f).getScale(), TOLERANCE);
-        assertEquals(0.84f, initial.scale(0.8f).scale(1.25f).getScale(), TOLERANCE);
-    }
-
-    @Test
-    public void testScale_halfPrimitiveScaleValue() {
-        PrimitiveSegment initial = new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_CLICK, 0.5f, 0);
-
-        assertEquals(0.5f, initial.scale(1).getScale(), TOLERANCE);
-        assertEquals(0.17f, initial.scale(0.5f).getScale(), TOLERANCE);
-        // The original value was not scaled up, so this only scales it down.
-        assertEquals(0.86f, initial.scale(1.5f).getScale(), TOLERANCE);
-        assertEquals(0.47f, initial.scale(1.5f).scale(2 / 3f).getScale(), TOLERANCE);
-        // Does not restore to the exact original value because scale up is a bit offset.
-        assertEquals(0.35f, initial.scale(0.8f).getScale(), TOLERANCE);
-        assertEquals(0.5f, initial.scale(0.8f).scale(1.25f).getScale(), TOLERANCE);
-    }
-
-    @Test
-    public void testScale_zeroPrimitiveScaleValue() {
-        PrimitiveSegment initial = new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_CLICK, 0, 0);
-
-        assertEquals(0f, initial.scale(1).getScale(), TOLERANCE);
-        assertEquals(0f, initial.scale(0.5f).getScale(), TOLERANCE);
-        assertEquals(0f, initial.scale(1.5f).getScale(), TOLERANCE);
-        assertEquals(0f, initial.scale(1.5f).scale(2 / 3f).getScale(), TOLERANCE);
-        assertEquals(0f, initial.scale(0.8f).scale(1.25f).getScale(), TOLERANCE);
-    }
-
-    @Test
-    public void testDuration() {
-        assertEquals(-1, new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_NOOP, 1, 10).getDuration());
-        assertEquals(-1, new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 100).getDuration());
-        assertEquals(-1, new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_SPIN, 1, 0).getDuration());
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_primitiveSupportedByVibrator() {
-        assertTrue(createSegment(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                .areVibrationFeaturesSupported(
-                        createVibratorWithSupportedPrimitive(
-                                VibrationEffect.Composition.PRIMITIVE_CLICK)));
-        assertTrue(createSegment(VibrationEffect.Composition.PRIMITIVE_THUD)
-                .areVibrationFeaturesSupported(
-                        createVibratorWithSupportedPrimitive(
-                                VibrationEffect.Composition.PRIMITIVE_THUD)));
-        assertTrue(createSegment(VibrationEffect.Composition.PRIMITIVE_QUICK_RISE)
-                .areVibrationFeaturesSupported(
-                        createVibratorWithSupportedPrimitive(
-                                VibrationEffect.Composition.PRIMITIVE_QUICK_RISE)));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_primitiveNotSupportedByVibrator() {
-        assertFalse(createSegment(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                .areVibrationFeaturesSupported(
-                        createVibratorWithSupportedPrimitive(
-                                VibrationEffect.Composition.PRIMITIVE_THUD)));
-        assertFalse(createSegment(VibrationEffect.Composition.PRIMITIVE_THUD)
-                .areVibrationFeaturesSupported(
-                        createVibratorWithSupportedPrimitive(
-                                VibrationEffect.Composition.PRIMITIVE_CLICK)));
-        assertFalse(createSegment(VibrationEffect.Composition.PRIMITIVE_THUD)
-                .areVibrationFeaturesSupported(
-                        createVibratorWithSupportedPrimitive(
-                                VibrationEffect.Composition.PRIMITIVE_QUICK_RISE)));
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidate_returnsTrue() {
-        assertTrue(new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_NOOP, 1, 10).isHapticFeedbackCandidate());
-        assertTrue(new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 10).isHapticFeedbackCandidate());
-        assertTrue(new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10).isHapticFeedbackCandidate());
-        assertTrue(new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_THUD, 1, 10).isHapticFeedbackCandidate());
-        assertTrue(new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_SPIN, 1, 10).isHapticFeedbackCandidate());
-    }
-
-    private static PrimitiveSegment createSegment(int primitiveId) {
-        // note: arbitrary scale and delay values being used.
-        return new PrimitiveSegment(primitiveId, 0.2f, 10);
-    }
-
-    private static Vibrator createVibratorWithSupportedPrimitive(int primitiveId) {
-        return new SystemVibrator(InstrumentationRegistry.getContext()) {
-            @Override
-            public VibratorInfo getInfo() {
-                return new VibratorInfo.Builder(/* id= */ 1)
-                        .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
-                        .setSupportedPrimitive(primitiveId, 10)
-                        .build();
-                }
-        };
-    }
-}
diff --git a/core/tests/coretests/src/android/os/vibrator/RampSegmentTest.java b/core/tests/coretests/src/android/os/vibrator/RampSegmentTest.java
deleted file mode 100644
index 6f8c205..0000000
--- a/core/tests/coretests/src/android/os/vibrator/RampSegmentTest.java
+++ /dev/null
@@ -1,287 +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 android.os.vibrator;
-
-import static android.os.VibrationEffect.DEFAULT_AMPLITUDE;
-
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertSame;
-import static junit.framework.Assert.assertTrue;
-
-import static org.mockito.Mockito.when;
-import static org.testng.Assert.assertThrows;
-
-import android.os.Parcel;
-import android.os.VibrationEffect;
-import android.os.Vibrator;
-import android.platform.test.annotations.Presubmit;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.mockito.junit.MockitoRule;
-
-@Presubmit
-@RunWith(MockitoJUnitRunner.class)
-public class RampSegmentTest {
-    private static final float TOLERANCE = 1e-2f;
-
-    @Rule
-    public MockitoRule mMockitoRule = MockitoJUnit.rule();
-
-    @Mock
-    private Vibrator mVibrator;
-
-    @Test
-    public void testCreation() {
-        RampSegment ramp = new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 0,
-                /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 200, /* duration= */ 100);
-
-        assertEquals(100L, ramp.getDuration());
-        assertTrue(ramp.hasNonZeroAmplitude());
-        assertEquals(1f, ramp.getStartAmplitude());
-        assertEquals(0f, ramp.getEndAmplitude());
-        assertEquals(100f, ramp.getStartFrequencyHz());
-        assertEquals(200f, ramp.getEndFrequencyHz());
-    }
-
-    @Test
-    public void testSerialization() {
-        RampSegment original = new RampSegment(0, 1, 10, 20.5f, 10);
-        Parcel parcel = Parcel.obtain();
-        original.writeToParcel(parcel, 0);
-        parcel.setDataPosition(0);
-        assertEquals(original, RampSegment.CREATOR.createFromParcel(parcel));
-    }
-
-    @Test
-    public void testValidate() {
-        new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 0,
-                /* startFrequencyHz= */ 2, /* endFrequencyHz= */ 1, /* duration= */ 100).validate();
-        // Zero frequency is still used internally for unset frequency.
-        new RampSegment(0, 0, 0, 0, 0).validate();
-
-        assertThrows(IllegalArgumentException.class,
-                () -> new RampSegment(DEFAULT_AMPLITUDE, 0, 0, 0, 0).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new RampSegment(/* startAmplitude= */ -2, 0, 0, 0, 0).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new RampSegment(0, /* endAmplitude= */ 2, 0, 0, 0).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new RampSegment(0, 0, /* startFrequencyHz= */ -1, 0, 0).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new RampSegment(0, 0, 0, /* endFrequencyHz= */ -3, 0).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new RampSegment(0, 0, 0, 0, /* duration= */ -1).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new RampSegment(/* startAmplitude= */ Float.NaN, 0, 0, 0, 0).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new RampSegment(0, 0, /* startFrequencyHz= */ Float.NaN, 0, 0).validate());
-    }
-
-    @Test
-    public void testHasNonZeroAmplitude() {
-        assertTrue(new RampSegment(0, 1, 0, 0, 0).hasNonZeroAmplitude());
-        assertTrue(new RampSegment(0.01f, 0, 0, 0, 0).hasNonZeroAmplitude());
-        assertFalse(new RampSegment(0, 0, 0, 0, 0).hasNonZeroAmplitude());
-    }
-
-    @Test
-    public void testResolve() {
-        RampSegment ramp = new RampSegment(0, 1, 0, 0, 0);
-        assertSame(ramp, ramp.resolve(100));
-    }
-
-    @Test
-    public void testApplyEffectStrength_ignoresAndReturnsSameEffect() {
-        RampSegment ramp = new RampSegment(1, 0, 1, 0, 0);
-        assertSame(ramp, ramp.applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_STRONG));
-    }
-
-    @Test
-    public void testScale() {
-        RampSegment initial = new RampSegment(0, 1, 0, 0, 0);
-
-        assertEquals(0f, initial.scale(1).getStartAmplitude(), TOLERANCE);
-        assertEquals(0f, initial.scale(0.5f).getStartAmplitude(), TOLERANCE);
-        assertEquals(0f, initial.scale(1.5f).getStartAmplitude(), TOLERANCE);
-        assertEquals(0f, initial.scale(1.5f).scale(2 / 3f).getStartAmplitude(), TOLERANCE);
-        assertEquals(0f, initial.scale(0.8f).scale(1.25f).getStartAmplitude(), TOLERANCE);
-
-        assertEquals(1f, initial.scale(1).getEndAmplitude(), TOLERANCE);
-        assertEquals(0.34f, initial.scale(0.5f).getEndAmplitude(), TOLERANCE);
-        // The original value was not scaled up, so this only scales it down.
-        assertEquals(1f, initial.scale(1.5f).getEndAmplitude(), TOLERANCE);
-        assertEquals(0.53f, initial.scale(1.5f).scale(2 / 3f).getEndAmplitude(), TOLERANCE);
-        // Does not restore to the exact original value because scale up is a bit offset.
-        assertEquals(0.71f, initial.scale(0.8f).getEndAmplitude(), TOLERANCE);
-        assertEquals(0.84f, initial.scale(0.8f).scale(1.25f).getEndAmplitude(), TOLERANCE);
-    }
-
-    @Test
-    public void testScale_halfPrimitiveScaleValue() {
-        RampSegment initial = new RampSegment(0.5f, 1, 0, 0, 0);
-
-        assertEquals(0.5f, initial.scale(1).getStartAmplitude(), TOLERANCE);
-        assertEquals(0.17f, initial.scale(0.5f).getStartAmplitude(), TOLERANCE);
-        // Does not restore to the exact original value because scale up is a bit offset.
-        assertEquals(0.86f, initial.scale(1.5f).getStartAmplitude(), TOLERANCE);
-        assertEquals(0.47f, initial.scale(1.5f).scale(2 / 3f).getStartAmplitude(), TOLERANCE);
-        // Does not restore to the exact original value because scale up is a bit offset.
-        assertEquals(0.35f, initial.scale(0.8f).getStartAmplitude(), TOLERANCE);
-        assertEquals(0.5f, initial.scale(0.8f).scale(1.25f).getStartAmplitude(), TOLERANCE);
-    }
-
-    @Test
-    public void testDuration() {
-        assertEquals(10, new RampSegment(0.5f, 1, 0, 0, 10).getDuration());
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_amplitudeAndFrequencyControls_supported() {
-        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
-        when(mVibrator.hasFrequencyControl()).thenReturn(true);
-
-        // Increasing amplitude
-        assertTrue(new RampSegment(0.5f, 1, 0, 0, 10).areVibrationFeaturesSupported(mVibrator));
-        // Increasing frequency
-        assertTrue(new RampSegment(0.5f, 0.5f, 0, 1, 10).areVibrationFeaturesSupported(mVibrator));
-        // Decreasing amplitude
-        assertTrue(new RampSegment(1, 0.5f, 0, 0, 10).areVibrationFeaturesSupported(mVibrator));
-        // Decreasing frequency
-        assertTrue(new RampSegment(0.5f, 0.5f, 1, 0, 10).areVibrationFeaturesSupported(mVibrator));
-        // Zero duration
-        assertTrue(new RampSegment(0.5f, 0.5f, 1, 0, 0).areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_noAmplitudeControl_unsupportedForChangingAmplitude() {
-        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
-        when(mVibrator.hasFrequencyControl()).thenReturn(true);
-
-        // Test with increasing/decreasing amplitudes.
-        assertFalse(new RampSegment(0.5f, 1, 0, 0, 10).areVibrationFeaturesSupported(mVibrator));
-        assertFalse(new RampSegment(1, 0.5f, 0, 0, 10).areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_noAmplitudeControl_fractionalAmplitudeUnsupported() {
-        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
-        when(mVibrator.hasFrequencyControl()).thenReturn(true);
-
-        assertFalse(new RampSegment(0.2f, 0.2f, 0, 0, 10).areVibrationFeaturesSupported(mVibrator));
-        assertFalse(new RampSegment(0, 0.2f, 0, 0, 10).areVibrationFeaturesSupported(mVibrator));
-        assertFalse(new RampSegment(0.2f, 0, 0, 0, 10).areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_unchangingZeroAmplitude_supported() {
-        RampSegment amplitudeZeroWithIncreasingFrequency = new RampSegment(1, 1, 0.5f, 0.8f, 10);
-        RampSegment amplitudeZeroWithDecreasingFrequency = new RampSegment(1, 1, 0.8f, 0.5f, 10);
-        when(mVibrator.hasFrequencyControl()).thenReturn(true);
-        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
-
-        assertTrue(amplitudeZeroWithIncreasingFrequency.areVibrationFeaturesSupported(mVibrator));
-        assertTrue(amplitudeZeroWithDecreasingFrequency.areVibrationFeaturesSupported(mVibrator));
-
-        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
-
-        assertTrue(amplitudeZeroWithIncreasingFrequency.areVibrationFeaturesSupported(mVibrator));
-        assertTrue(amplitudeZeroWithDecreasingFrequency.areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_unchangingOneAmplitude_supported() {
-        RampSegment amplitudeOneWithIncreasingFrequency = new RampSegment(1, 1, 0.5f, 0.8f, 10);
-        RampSegment amplitudeOneWithDecreasingFrequency = new RampSegment(1, 1, 0.8f, 0.5f, 10);
-        when(mVibrator.hasFrequencyControl()).thenReturn(true);
-        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
-
-        assertTrue(amplitudeOneWithIncreasingFrequency.areVibrationFeaturesSupported(mVibrator));
-        assertTrue(amplitudeOneWithDecreasingFrequency.areVibrationFeaturesSupported(mVibrator));
-
-        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
-
-        assertTrue(amplitudeOneWithIncreasingFrequency.areVibrationFeaturesSupported(mVibrator));
-        assertTrue(amplitudeOneWithDecreasingFrequency.areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_unchangingDefaultAmplitude_supported() {
-        RampSegment defaultAmplitudeIncreasingFrequency =
-                new RampSegment(DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE, 0.5f, 0.8f, 10);
-        RampSegment defaultAmplitudeDecreasingFrequency =
-                new RampSegment(DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE, 0.8f, 0.5f, 10);
-        when(mVibrator.hasFrequencyControl()).thenReturn(true);
-        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
-
-        assertTrue(defaultAmplitudeIncreasingFrequency.areVibrationFeaturesSupported(mVibrator));
-        assertTrue(defaultAmplitudeDecreasingFrequency.areVibrationFeaturesSupported(mVibrator));
-
-        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
-
-        assertTrue(defaultAmplitudeIncreasingFrequency.areVibrationFeaturesSupported(mVibrator));
-        assertTrue(defaultAmplitudeDecreasingFrequency.areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_noFrequencyControl_unsupportedForChangingFrequency() {
-        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
-        when(mVibrator.hasFrequencyControl()).thenReturn(false);
-
-        // Test with increasing/decreasing frequencies.
-        assertFalse(new RampSegment(0, 0, 0.2f, 0.4f, 10).areVibrationFeaturesSupported(mVibrator));
-        assertFalse(new RampSegment(0, 0, 0.4f, 0.2f, 10).areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_noFrequencyControl_fractionalFrequencyUnsupported() {
-        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
-        when(mVibrator.hasFrequencyControl()).thenReturn(false);
-
-        assertFalse(new RampSegment(0, 0, 0.2f, 0.2f, 10).areVibrationFeaturesSupported(mVibrator));
-        assertFalse(new RampSegment(0, 0, 0.2f, 0, 10).areVibrationFeaturesSupported(mVibrator));
-        assertFalse(new RampSegment(0, 0, 0, 0.2f, 10).areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_unchangingZeroFrequency_supported() {
-        RampSegment frequencyZeroWithIncreasingAmplitude = new RampSegment(0.1f, 1, 0, 0, 10);
-        RampSegment frequencyZeroWithDecreasingAmplitude = new RampSegment(1, 0.1f, 0, 0, 10);
-        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
-        when(mVibrator.hasFrequencyControl()).thenReturn(false);
-
-        assertTrue(frequencyZeroWithIncreasingAmplitude.areVibrationFeaturesSupported(mVibrator));
-        assertTrue(frequencyZeroWithDecreasingAmplitude.areVibrationFeaturesSupported(mVibrator));
-
-        when(mVibrator.hasFrequencyControl()).thenReturn(true);
-
-        assertTrue(frequencyZeroWithIncreasingAmplitude.areVibrationFeaturesSupported(mVibrator));
-        assertTrue(frequencyZeroWithDecreasingAmplitude.areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidate_returnsTrue() {
-        // A single ramp segment duration is not checked here, but contributes to the effect known
-        // duration checked in VibrationEffect implementations.
-        assertTrue(new RampSegment(0.5f, 1, 0, 0, 5_000).isHapticFeedbackCandidate());
-    }
-}
diff --git a/core/tests/coretests/src/android/os/vibrator/StepSegmentTest.java b/core/tests/coretests/src/android/os/vibrator/StepSegmentTest.java
deleted file mode 100644
index ade2161..0000000
--- a/core/tests/coretests/src/android/os/vibrator/StepSegmentTest.java
+++ /dev/null
@@ -1,265 +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 android.os.vibrator;
-
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertSame;
-import static junit.framework.Assert.assertTrue;
-
-import static org.mockito.Mockito.when;
-import static org.testng.Assert.assertThrows;
-
-import android.os.Parcel;
-import android.os.VibrationEffect;
-import android.os.Vibrator;
-import android.platform.test.annotations.Presubmit;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.mockito.junit.MockitoRule;
-
-@Presubmit
-@RunWith(MockitoJUnitRunner.class)
-public class StepSegmentTest {
-    private static final float TOLERANCE = 1e-2f;
-
-    @Rule
-    public MockitoRule mMockitoRule = MockitoJUnit.rule();
-
-    @Mock
-    private Vibrator mVibrator;
-
-    @Test
-    public void testCreation() {
-        StepSegment step = new StepSegment(/* amplitude= */ 1f, /* frequencyHz= */ 1f,
-                /* duration= */ 100);
-
-        assertEquals(100, step.getDuration());
-        assertTrue(step.hasNonZeroAmplitude());
-        assertEquals(1f, step.getAmplitude());
-        assertEquals(1f, step.getFrequencyHz());
-    }
-
-    @Test
-    public void testSerialization() {
-        StepSegment original = new StepSegment(0.5f, 1f, 10);
-        Parcel parcel = Parcel.obtain();
-        original.writeToParcel(parcel, 0);
-        parcel.setDataPosition(0);
-        assertEquals(original, StepSegment.CREATOR.createFromParcel(parcel));
-    }
-
-    @Test
-    public void testValidate() {
-        new StepSegment(/* amplitude= */ 0f, /* frequencyHz= */ 10f, /* duration= */ 10).validate();
-        // Zero frequency is still used internally for unset frequency.
-        new StepSegment(0, 0, 0).validate();
-
-        assertThrows(IllegalArgumentException.class,
-                () -> new StepSegment(/* amplitude= */ -2, 1f, 10).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new StepSegment(/* amplitude= */ 2, 1f, 10).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new StepSegment(1, /* frequencyHz*/ -1f, 10).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new StepSegment(2, 1f, /* duration= */ -1).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new StepSegment(/* amplitude= */ Float.NaN, 1f, 10).validate());
-        assertThrows(IllegalArgumentException.class,
-                () -> new StepSegment(1, /* frequencyHz*/ Float.NaN, 10).validate());
-    }
-
-    @Test
-    public void testHasNonZeroAmplitude() {
-        assertTrue(new StepSegment(1f, 0, 0).hasNonZeroAmplitude());
-        assertTrue(new StepSegment(0.01f, 0, 0).hasNonZeroAmplitude());
-        assertTrue(new StepSegment(VibrationEffect.DEFAULT_AMPLITUDE, 0, 0).hasNonZeroAmplitude());
-        assertFalse(new StepSegment(0, 0, 0).hasNonZeroAmplitude());
-    }
-
-    @Test
-    public void testResolve() {
-        StepSegment original = new StepSegment(VibrationEffect.DEFAULT_AMPLITUDE, 0, 0);
-        assertEquals(1f, original.resolve(VibrationEffect.MAX_AMPLITUDE).getAmplitude());
-        assertEquals(0.2f, original.resolve(51).getAmplitude(), TOLERANCE);
-
-        StepSegment resolved = new StepSegment(0, 0, 0);
-        assertSame(resolved, resolved.resolve(100));
-
-        assertThrows(IllegalArgumentException.class, () -> resolved.resolve(1000));
-    }
-
-    @Test
-    public void testApplyEffectStrength_ignoresAndReturnsSameEffect() {
-        StepSegment step = new StepSegment(VibrationEffect.DEFAULT_AMPLITUDE, 0, 0);
-        assertSame(step, step.applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_STRONG));
-    }
-
-    @Test
-    public void testScale_fullAmplitude() {
-        StepSegment initial = new StepSegment(1f, 0, 0);
-
-        assertEquals(1f, initial.scale(1).getAmplitude(), TOLERANCE);
-        assertEquals(0.34f, initial.scale(0.5f).getAmplitude(), TOLERANCE);
-        // The original value was not scaled up, so this only scales it down.
-        assertEquals(1f, initial.scale(1.5f).getAmplitude(), TOLERANCE);
-        assertEquals(0.53f, initial.scale(1.5f).scale(2 / 3f).getAmplitude(), TOLERANCE);
-        // Does not restore to the exact original value because scale up is a bit offset.
-        assertEquals(0.71f, initial.scale(0.8f).getAmplitude(), TOLERANCE);
-        assertEquals(0.84f, initial.scale(0.8f).scale(1.25f).getAmplitude(), TOLERANCE);
-    }
-
-    @Test
-    public void testScale_halfAmplitude() {
-        StepSegment initial = new StepSegment(0.5f, 0, 0);
-
-        assertEquals(0.5f, initial.scale(1).getAmplitude(), TOLERANCE);
-        assertEquals(0.17f, initial.scale(0.5f).getAmplitude(), TOLERANCE);
-        // The original value was not scaled up, so this only scales it down.
-        assertEquals(0.86f, initial.scale(1.5f).getAmplitude(), TOLERANCE);
-        assertEquals(0.47f, initial.scale(1.5f).scale(2 / 3f).getAmplitude(), TOLERANCE);
-        // Does not restore to the exact original value because scale up is a bit offset.
-        assertEquals(0.35f, initial.scale(0.8f).getAmplitude(), TOLERANCE);
-        assertEquals(0.5f, initial.scale(0.8f).scale(1.25f).getAmplitude(), TOLERANCE);
-    }
-
-    @Test
-    public void testScale_zeroAmplitude() {
-        StepSegment initial = new StepSegment(0, 0, 0);
-
-        assertEquals(0f, initial.scale(1).getAmplitude(), TOLERANCE);
-        assertEquals(0f, initial.scale(0.5f).getAmplitude(), TOLERANCE);
-        assertEquals(0f, initial.scale(1.5f).getAmplitude(), TOLERANCE);
-    }
-
-    @Test
-    public void testScale_defaultAmplitude() {
-        StepSegment initial = new StepSegment(VibrationEffect.DEFAULT_AMPLITUDE, 0, 0);
-
-        assertEquals(VibrationEffect.DEFAULT_AMPLITUDE, initial.scale(1).getAmplitude(), TOLERANCE);
-        assertEquals(VibrationEffect.DEFAULT_AMPLITUDE, initial.scale(0.5f).getAmplitude(),
-                TOLERANCE);
-        assertEquals(VibrationEffect.DEFAULT_AMPLITUDE, initial.scale(1.5f).getAmplitude(),
-                TOLERANCE);
-    }
-
-    @Test
-    public void testDuration() {
-        assertEquals(5, new StepSegment(0, 0, 5).getDuration());
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_zeroAmplitude_supported() {
-        StepSegment segment =
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 0);
-        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
-
-        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
-
-        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
-
-        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_maxAmplitude_supported() {
-        StepSegment segment =
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 0);
-        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
-
-        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
-
-        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
-
-        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_defaultAmplitude_supported() {
-        StepSegment segment =
-                new StepSegment(
-                        /* amplitude= */ VibrationEffect.DEFAULT_AMPLITUDE,
-                        /* frequencyHz= */ 0,
-                        /* duration= */ 0);
-        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
-
-        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
-
-        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
-
-        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_fractionalAmplitude_hasAmplitudeCtrl_supported() {
-        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
-
-        assertTrue(new StepSegment(/* amplitude= */ 0.2f, /* frequencyHz= */ 0, /* duration= */ 0)
-                .areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_fractionalAmplitude_hasNoAmplitudeCtrl_notSupported() {
-        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
-
-        assertFalse(new StepSegment(/* amplitude= */ 0.2f, /* frequencyHz= */ 0, /* duration= */ 0)
-                .areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_zeroFrequency_supported() {
-        StepSegment segment =
-                new StepSegment(/* amplitude= */ 0f, /* frequencyHz= */ 0, /* duration= */ 0);
-        when(mVibrator.hasFrequencyControl()).thenReturn(false);
-
-        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
-
-        when(mVibrator.hasFrequencyControl()).thenReturn(true);
-
-        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_nonZeroFrequency_hasFrequencyCtrl_supported() {
-        StepSegment segment =
-                new StepSegment(/* amplitude= */ 0f, /* frequencyHz= */ 0.2f, /* duration= */ 0);
-        when(mVibrator.hasFrequencyControl()).thenReturn(true);
-
-        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testVibrationFeaturesSupport_nonZeroFrequency_hasNoFrequencyCtrl_notSupported() {
-        StepSegment segment =
-                new StepSegment(/* amplitude= */ 0f, /* frequencyHz= */ 0.2f, /* duration= */ 0);
-        when(mVibrator.hasFrequencyControl()).thenReturn(false);
-
-        assertFalse(segment.areVibrationFeaturesSupported(mVibrator));
-    }
-
-    @Test
-    public void testIsHapticFeedbackCandidate_returnsTrue() {
-        // A single step segment duration is not checked here, but contributes to the effect known
-        // duration checked in VibrationEffect implementations.
-        assertTrue(new StepSegment(0, 0, 5_000).isHapticFeedbackCandidate());
-    }
-}
diff --git a/core/tests/coretests/src/android/print/IPrintManagerParametersTest.java b/core/tests/coretests/src/android/print/IPrintManagerParametersTest.java
index 3766cd4..c25aa51 100644
--- a/core/tests/coretests/src/android/print/IPrintManagerParametersTest.java
+++ b/core/tests/coretests/src/android/print/IPrintManagerParametersTest.java
@@ -41,11 +41,11 @@
 import android.print.test.services.PrinterDiscoverySessionCallbacks;
 import android.print.test.services.StubbablePrinterDiscoverySession;
 import android.printservice.recommendation.IRecommendationsChangeListener;
-import android.support.test.uiautomator.UiDevice;
 
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.MediumTest;
 import androidx.test.runner.AndroidJUnit4;
+import androidx.test.uiautomator.UiDevice;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/core/tests/coretests/src/android/util/LongSparseArrayTest.java b/core/tests/coretests/src/android/util/LongSparseArrayTest.java
index bf3f0f5..247fe37 100644
--- a/core/tests/coretests/src/android/util/LongSparseArrayTest.java
+++ b/core/tests/coretests/src/android/util/LongSparseArrayTest.java
@@ -51,4 +51,73 @@
                     .isFalse();
         }
     }
+
+    @Test
+    public void firstIndexOnOrAfter() {
+        final LongSparseArray<Object> longSparseArray = new LongSparseArray<>();
+
+        // Values don't matter for this test.
+        longSparseArray.put(51, new Object());
+        longSparseArray.put(10, new Object());
+        longSparseArray.put(59, new Object());
+
+        assertThat(longSparseArray.size()).isEqualTo(3);
+
+        // Testing any number arbitrarily smaller than 10.
+        assertThat(longSparseArray.firstIndexOnOrAfter(-141213)).isEqualTo(0);
+        for (long time = -43; time <= 10; time++) {
+            assertThat(longSparseArray.firstIndexOnOrAfter(time)).isEqualTo(0);
+        }
+
+        for (long time = 11; time <= 51; time++) {
+            assertThat(longSparseArray.firstIndexOnOrAfter(time)).isEqualTo(1);
+        }
+
+        for (long time = 52; time <= 59; time++) {
+            assertThat(longSparseArray.firstIndexOnOrAfter(time)).isEqualTo(2);
+        }
+
+        for (long time = 60; time <= 102; time++) {
+            assertThat(longSparseArray.firstIndexOnOrAfter(time)).isEqualTo(3);
+        }
+        // Testing any number arbitrarily larger than 59.
+        assertThat(longSparseArray.firstIndexOnOrAfter(15332)).isEqualTo(3);
+    }
+
+    @Test
+    public void lastIndexOnOrBefore() {
+        final LongSparseArray<Object> longSparseArray = new LongSparseArray<>();
+
+        // Values don't matter for this test.
+        longSparseArray.put(21, new Object());
+        longSparseArray.put(4, new Object());
+        longSparseArray.put(91, new Object());
+        longSparseArray.put(39, new Object());
+
+        assertThat(longSparseArray.size()).isEqualTo(4);
+
+        // Testing any number arbitrarily smaller than 4.
+        assertThat(longSparseArray.lastIndexOnOrBefore(-1478133)).isEqualTo(-1);
+        for (long time = -42; time < 4; time++) {
+            assertThat(longSparseArray.lastIndexOnOrBefore(time)).isEqualTo(-1);
+        }
+
+        for (long time = 4; time < 21; time++) {
+            assertThat(longSparseArray.lastIndexOnOrBefore(time)).isEqualTo(0);
+        }
+
+        for (long time = 21; time < 39; time++) {
+            assertThat(longSparseArray.lastIndexOnOrBefore(time)).isEqualTo(1);
+        }
+
+        for (long time = 39; time < 91; time++) {
+            assertThat(longSparseArray.lastIndexOnOrBefore(time)).isEqualTo(2);
+        }
+
+        for (long time = 91; time < 109; time++) {
+            assertThat(longSparseArray.lastIndexOnOrBefore(time)).isEqualTo(3);
+        }
+        // Testing any number arbitrarily larger than 91.
+        assertThat(longSparseArray.lastIndexOnOrBefore(1980732)).isEqualTo(3);
+    }
 }
diff --git a/core/tests/coretests/src/android/util/TimeSparseArrayTest.java b/core/tests/coretests/src/android/util/TimeSparseArrayTest.java
deleted file mode 100644
index c8e2364..0000000
--- a/core/tests/coretests/src/android/util/TimeSparseArrayTest.java
+++ /dev/null
@@ -1,103 +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 android.util;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/**
- * Tests for {@link TimeSparseArray}.
- * This class only tests subclass specific functionality. Tests for the super class
- * {@link LongSparseArray} should be covered under {@link LongSparseArrayTest}.
- */
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class TimeSparseArrayTest {
-
-    @Test
-    public void closestIndexOnOrAfter() {
-        final TimeSparseArray<Object> timeSparseArray = new TimeSparseArray<>();
-
-        // Values don't matter for this test.
-        timeSparseArray.put(51, new Object());
-        timeSparseArray.put(10, new Object());
-        timeSparseArray.put(59, new Object());
-
-        assertThat(timeSparseArray.size()).isEqualTo(3);
-
-        // Testing any number arbitrarily smaller than 10.
-        assertThat(timeSparseArray.closestIndexOnOrAfter(-141213)).isEqualTo(0);
-        for (long time = -43; time <= 10; time++) {
-            assertThat(timeSparseArray.closestIndexOnOrAfter(time)).isEqualTo(0);
-        }
-
-        for (long time = 11; time <= 51; time++) {
-            assertThat(timeSparseArray.closestIndexOnOrAfter(time)).isEqualTo(1);
-        }
-
-        for (long time = 52; time <= 59; time++) {
-            assertThat(timeSparseArray.closestIndexOnOrAfter(time)).isEqualTo(2);
-        }
-
-        for (long time = 60; time <= 102; time++) {
-            assertThat(timeSparseArray.closestIndexOnOrAfter(time)).isEqualTo(3);
-        }
-        // Testing any number arbitrarily larger than 59.
-        assertThat(timeSparseArray.closestIndexOnOrAfter(15332)).isEqualTo(3);
-    }
-
-    @Test
-    public void closestIndexOnOrBefore() {
-        final TimeSparseArray<Object> timeSparseArray = new TimeSparseArray<>();
-
-        // Values don't matter for this test.
-        timeSparseArray.put(21, new Object());
-        timeSparseArray.put(4, new Object());
-        timeSparseArray.put(91, new Object());
-        timeSparseArray.put(39, new Object());
-
-        assertThat(timeSparseArray.size()).isEqualTo(4);
-
-        // Testing any number arbitrarily smaller than 4.
-        assertThat(timeSparseArray.closestIndexOnOrBefore(-1478133)).isEqualTo(-1);
-        for (long time = -42; time < 4; time++) {
-            assertThat(timeSparseArray.closestIndexOnOrBefore(time)).isEqualTo(-1);
-        }
-
-        for (long time = 4; time < 21; time++) {
-            assertThat(timeSparseArray.closestIndexOnOrBefore(time)).isEqualTo(0);
-        }
-
-        for (long time = 21; time < 39; time++) {
-            assertThat(timeSparseArray.closestIndexOnOrBefore(time)).isEqualTo(1);
-        }
-
-        for (long time = 39; time < 91; time++) {
-            assertThat(timeSparseArray.closestIndexOnOrBefore(time)).isEqualTo(2);
-        }
-
-        for (long time = 91; time < 109; time++) {
-            assertThat(timeSparseArray.closestIndexOnOrBefore(time)).isEqualTo(3);
-        }
-        // Testing any number arbitrarily larger than 91.
-        assertThat(timeSparseArray.closestIndexOnOrBefore(1980732)).isEqualTo(3);
-    }
-}
diff --git a/core/tests/coretests/src/android/view/HapticScrollFeedbackProviderTest.java b/core/tests/coretests/src/android/view/HapticScrollFeedbackProviderTest.java
new file mode 100644
index 0000000..6bdb07d
--- /dev/null
+++ b/core/tests/coretests/src/android/view/HapticScrollFeedbackProviderTest.java
@@ -0,0 +1,389 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+import static android.view.HapticFeedbackConstants.SCROLL_ITEM_FOCUS;
+import static android.view.HapticFeedbackConstants.SCROLL_LIMIT;
+import static android.view.HapticFeedbackConstants.SCROLL_TICK;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+@Presubmit
+public final class HapticScrollFeedbackProviderTest {
+    private static final int INPUT_DEVICE_1 = 1;
+    private static final int INPUT_DEVICE_2 = 2;
+
+    private static final int TICK_INTERVAL_PIXELS = 100;
+
+    private TestView mView;
+    private long mCurrentTimeMillis = 1000; // arbitrary starting time value
+
+    private HapticScrollFeedbackProvider mProvider;
+
+    @Before
+    public void setUp() {
+        mView = new TestView(InstrumentationRegistry.getContext());
+        mProvider = new HapticScrollFeedbackProvider(mView, TICK_INTERVAL_PIXELS);
+    }
+
+    @Test
+    public void testSnapToItem() {
+        mProvider.onSnapToItem(createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_ITEM_FOCUS);
+    }
+
+    @Test
+    public void testScrollLimit_start() {
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ true);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT);
+    }
+
+    @Test
+    public void testScrollLimit_stop() {
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ false);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT);
+    }
+
+    @Test
+    public void testScrollProgress_zeroTickInterval() {
+        mProvider =
+                new HapticScrollFeedbackProvider(
+                        mView, /* rotaryEncoderAxisScrollTickIntervalPixels= */ 0);
+
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 10);
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 30);
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 30);
+
+        assertNoFeedback(mView);
+    }
+
+    @Test
+    public void testScrollProgress_progressEqualsOrExceedsPositiveThreshold() {
+        mProvider =
+                new HapticScrollFeedbackProvider(
+                        mView, /* rotaryEncoderAxisScrollTickIntervalPixels= */ 100);
+
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 20);
+
+        assertNoFeedback(mView);
+
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 80);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_TICK, 1);
+
+
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 80);
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 40);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_TICK, 2);
+    }
+
+    @Test
+    public void testScrollProgress_progressEqualsOrExceedsNegativeThreshold() {
+        mProvider =
+                new HapticScrollFeedbackProvider(
+                        mView, /* rotaryEncoderAxisScrollTickIntervalPixels= */ 100);
+
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(),
+                MotionEvent.AXIS_SCROLL,
+                /* deltaInPixels= */ -20);
+
+        assertNoFeedback(mView);
+
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(),
+                MotionEvent.AXIS_SCROLL,
+                /* deltaInPixels= */ -80);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_TICK, 1);
+
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(),
+                MotionEvent.AXIS_SCROLL,
+                /* deltaInPixels= */ -70);
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(),
+                MotionEvent.AXIS_SCROLL,
+                /* deltaInPixels= */ -40);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_TICK, 2);
+    }
+
+    @Test
+    public void testScrollProgress_positiveAndNegativeProgresses() {
+        mProvider =
+                new HapticScrollFeedbackProvider(
+                        mView, /* rotaryEncoderAxisScrollTickIntervalPixels= */ 100);
+
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 20);
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(),
+                MotionEvent.AXIS_SCROLL,
+                /* deltaInPixels= */ -90);
+
+        assertNoFeedback(mView);
+
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 10);
+
+        assertNoFeedback(mView);
+
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(),
+                MotionEvent.AXIS_SCROLL,
+                /* deltaInPixels= */ -50);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_TICK, 1);
+
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 40);
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 50);
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 60);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_TICK, 2);
+    }
+
+    @Test
+    public void testScrollProgress_singleProgressExceedsThreshold() {
+        mProvider =
+                new HapticScrollFeedbackProvider(
+                        mView, /* rotaryEncoderAxisScrollTickIntervalPixels= */ 100);
+
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(),
+                MotionEvent.AXIS_SCROLL,
+                /* deltaInPixels= */ 1000);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_TICK, 1);
+    }
+
+    @Test
+    public void testScrollLimit_startAndEndLimit_playsOnlyOneFeedback() {
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ false);
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ true);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT);
+    }
+
+    @Test
+    public void testScrollLimit_doubleStartLimit_playsOnlyOneFeedback() {
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ true);
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ true);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT);
+    }
+
+    @Test
+    public void testScrollLimit_doubleEndLimit_playsOnlyOneFeedback() {
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ false);
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ false);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT);
+    }
+
+    @Test
+    public void testScrollLimit_enabledWithProgress() {
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ false);
+
+        mProvider.onScrollProgress(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 80);
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ false);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT, 2);
+    }
+
+    @Test
+    public void testScrollLimit_enabledWithSnap() {
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ false);
+
+        mProvider.onSnapToItem(createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL);
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ false);
+
+        assertFeedbackCount(mView, HapticFeedbackConstants.SCROLL_LIMIT, 2);
+    }
+
+    @Test
+    public void testScrollLimit_enabledWithDissimilarSnap() {
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ false);
+
+        mProvider.onSnapToItem(createTouchMoveEvent(), MotionEvent.AXIS_X);
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ false);
+
+        assertFeedbackCount(mView, HapticFeedbackConstants.SCROLL_LIMIT, 2);
+    }
+
+    @Test
+    public void testScrollLimit_enabledWithDissimilarProgress() {
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ false);
+
+        mProvider.onScrollProgress(
+                createTouchMoveEvent(), MotionEvent.AXIS_SCROLL, /* deltaInPixels= */ 80);
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ false);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT, 2);
+    }
+
+    @Test
+    public void testScrollLimit_enabledWithDissimilarLimit() {
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ false);
+
+        mProvider.onScrollLimit(createTouchMoveEvent(), MotionEvent.AXIS_SCROLL, false);
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(), MotionEvent.AXIS_SCROLL, /* isStart= */ false);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT, 3);
+    }
+
+    @Test
+    public void testScrollLimit_enabledWithMotionFromDifferentDeviceId() {
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(INPUT_DEVICE_1),
+                MotionEvent.AXIS_SCROLL,
+                /* isStart= */ false);
+
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(INPUT_DEVICE_2),
+                MotionEvent.AXIS_SCROLL,
+                /* isStart= */ false);
+        mProvider.onScrollLimit(
+                createRotaryEncoderScrollEvent(INPUT_DEVICE_1),
+                MotionEvent.AXIS_SCROLL,
+                /* isStart= */ false);
+
+        assertOnlyFeedback(mView, HapticFeedbackConstants.SCROLL_LIMIT, 3);
+    }
+
+    private void assertNoFeedback(TestView view) {
+        for (int feedback : new int[] {SCROLL_ITEM_FOCUS, SCROLL_LIMIT, SCROLL_TICK}) {
+            assertFeedbackCount(view, feedback, 0);
+        }
+    }
+
+    private void assertOnlyFeedback(TestView view, int expectedFeedback) {
+        assertOnlyFeedback(view, expectedFeedback, /* expectedCount= */ 1);
+    }
+
+    private void assertOnlyFeedback(TestView view, int expectedFeedback, int expectedCount) {
+        for (int feedback : new int[] {SCROLL_ITEM_FOCUS, SCROLL_LIMIT, SCROLL_TICK}) {
+            assertFeedbackCount(view, feedback, (feedback == expectedFeedback) ? expectedCount : 0);
+        }
+    }
+
+    private void assertFeedbackCount(TestView view, int feedback, int expectedCount) {
+        int count = view.mFeedbackCount.getOrDefault(feedback, 0);
+        assertThat(count).isEqualTo(expectedCount);
+    }
+
+    private MotionEvent createTouchMoveEvent() {
+        long downTime = mCurrentTimeMillis;
+        long eventTime = mCurrentTimeMillis + 2; // arbitrary increment from the down time.
+        ++mCurrentTimeMillis;
+        return MotionEvent.obtain(
+                downTime , eventTime, MotionEvent.ACTION_MOVE, /* x= */ 3, /* y= */ 5, 0);
+    }
+
+    private MotionEvent createRotaryEncoderScrollEvent() {
+        return createRotaryEncoderScrollEvent(INPUT_DEVICE_1);
+    }
+
+    private MotionEvent createRotaryEncoderScrollEvent(int deviceId) {
+        MotionEvent.PointerProperties props = new MotionEvent.PointerProperties();
+        props.id = 0;
+
+        MotionEvent.PointerCoords coords = new MotionEvent.PointerCoords();
+        coords.setAxisValue(MotionEvent.AXIS_SCROLL, 20);
+
+        return MotionEvent.obtain(0 /* downTime */,
+                ++mCurrentTimeMillis,
+                MotionEvent.ACTION_SCROLL,
+                /* pointerCount= */ 1,
+                new MotionEvent.PointerProperties[] {props},
+                new MotionEvent.PointerCoords[] {coords},
+                /* metaState= */ 0,
+                /* buttonState= */ 0,
+                /* xPrecision= */ 0,
+                /* yPrecision= */ 0,
+                deviceId,
+                /* edgeFlags= */ 0,
+                InputDevice.SOURCE_ROTARY_ENCODER,
+                /* flags= */ 0);
+    }
+
+    private static class TestView extends View  {
+        final Map<Integer, Integer> mFeedbackCount = new HashMap<>();
+
+        TestView(Context context) {
+            super(context);
+        }
+
+        @Override
+        public boolean performHapticFeedback(int feedback) {
+            if (!mFeedbackCount.containsKey(feedback)) {
+                mFeedbackCount.put(feedback, 0);
+            }
+            mFeedbackCount.put(feedback, mFeedbackCount.get(feedback) + 1);
+            return true;
+        }
+    }
+}
diff --git a/core/tests/coretests/src/android/view/ViewAttachTest.java b/core/tests/coretests/src/android/view/ViewAttachTest.java
index 1a8dd99..1da724a 100644
--- a/core/tests/coretests/src/android/view/ViewAttachTest.java
+++ b/core/tests/coretests/src/android/view/ViewAttachTest.java
@@ -92,4 +92,43 @@
             assertFalse(shouldDrawRoundScrollbars);
         }
     }
+
+    /**
+     * Make sure that on any attached view, if the view is full-screen and hosted
+     * on a round device, the round scrollbars will be displayed even if the activity
+     * window is offset.
+     *
+     * @throws Throwable
+     */
+    @UiThreadTest
+    public void testRoundScrollbarsWithMargins() throws Throwable {
+        final ViewAttachTestActivity activity = getActivity();
+        final View rootView = activity.getWindow().getDecorView();
+        final WindowManager.LayoutParams params =
+                new WindowManager.LayoutParams(
+                    rootView.getWidth(),
+                    rootView.getHeight(),
+                    50, /* xPosition */
+                    0, /* yPosition */
+                    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
+                    WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
+                    PixelFormat.TRANSLUCENT);
+
+        rootView.setLayoutParams(params);
+
+        // Configure margins to make sure they don't cause issues configuring rounded scrollbars.
+        final ViewGroup.MarginLayoutParams lp = new ViewGroup.MarginLayoutParams(1, 1);
+        lp.setMargins(1, 2, 3, 4);
+        rootView.setLayoutParams(lp);
+
+        View contentView = activity.findViewById(R.id.view_attach_view);
+        boolean shouldDrawRoundScrollbars = contentView.shouldDrawRoundScrollbar();
+
+        if (activity.getResources().getConfiguration().isScreenRound()) {
+            assertTrue(shouldDrawRoundScrollbars);
+        } else {
+            // Never draw round scrollbars on non-round devices.
+            assertFalse(shouldDrawRoundScrollbars);
+        }
+    }
 }
diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java
index 7cbf3ffa..84252f9 100644
--- a/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java
+++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityManagerTest.java
@@ -32,6 +32,7 @@
 import android.app.PendingIntent;
 import android.app.RemoteAction;
 import android.content.Intent;
+import android.content.pm.ParceledListSlice;
 import android.graphics.drawable.Icon;
 import android.os.UserHandle;
 
@@ -135,7 +136,7 @@
 
         // configure the mock service behavior
         when(mMockService.getInstalledAccessibilityServiceList(anyInt()))
-                .thenReturn(expectedServices);
+                .thenReturn(new ParceledListSlice<>(expectedServices));
 
         // invoke the method under test
         AccessibilityManager manager = createManager(true);
diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java
index 6d635af..3d4918b 100644
--- a/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java
+++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityNodeInfoTest.java
@@ -58,7 +58,7 @@
 
     // The number of flags held in boolean properties. Their values should also be double-checked
     // in the methods above.
-    private static final int NUM_BOOLEAN_PROPERTIES = 26;
+    private static final int NUM_BOOLEAN_PROPERTIES = 27;
 
     @Test
     public void testStandardActions_serializationFlagIsValid() {
diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java
index 756888f..610b8ae 100644
--- a/core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java
+++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java
@@ -225,8 +225,16 @@
     }
 
     @Override
-    public void attachAccessibilityOverlayToDisplay(int displayId, SurfaceControl sc) {}
+    public void attachAccessibilityOverlayToDisplay(
+            int interactionId,
+            int displayId,
+            SurfaceControl sc,
+            IAccessibilityInteractionConnectionCallback callback) {}
 
     @Override
-    public void attachAccessibilityOverlayToWindow(int accessibilityWindowId, SurfaceControl sc) {}
+    public void attachAccessibilityOverlayToWindow(
+            int interactionId,
+            int accessibilityWindowId,
+            SurfaceControl sc,
+            IAccessibilityInteractionConnectionCallback callback) {}
 }
diff --git a/core/tests/coretests/src/android/view/accessibility/TEST_MAPPING b/core/tests/coretests/src/android/view/accessibility/TEST_MAPPING
new file mode 100644
index 0000000..1c67399
--- /dev/null
+++ b/core/tests/coretests/src/android/view/accessibility/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+  "imports": [
+    {
+      "path": "frameworks/base/services/accessibility/TEST_MAPPING"
+    }
+  ]
+}
diff --git a/core/tests/coretests/src/android/view/autofill/AutofillFeatureFlagsTest.java b/core/tests/coretests/src/android/view/autofill/AutofillFeatureFlagsTest.java
index f9b3239..481993e5 100644
--- a/core/tests/coretests/src/android/view/autofill/AutofillFeatureFlagsTest.java
+++ b/core/tests/coretests/src/android/view/autofill/AutofillFeatureFlagsTest.java
@@ -51,12 +51,26 @@
         assertThat(fillDialogHints[1]).isEqualTo("creditCardNumber");
     }
 
+    @Test
+    public void testIsCredentialManagerEnabled() {
+        setCredentialManagerEnabled(false);
+        assertThat(AutofillFeatureFlags.isCredentialManagerEnabled()).isFalse();
+        setCredentialManagerEnabled(true);
+        assertThat(AutofillFeatureFlags.isCredentialManagerEnabled()).isTrue();
+    }
+
     private static void setFillDialogHints(String value) {
         setDeviceConfig(
                 AutofillFeatureFlags.DEVICE_CONFIG_AUTOFILL_DIALOG_HINTS,
                 value);
     }
 
+    private static void setCredentialManagerEnabled(boolean value) {
+        setDeviceConfig(
+                AutofillFeatureFlags.DEVICE_CONFIG_AUTOFILL_CREDENTIAL_MANAGER_ENABLED,
+                String.valueOf(value));
+    }
+
     private static void setDeviceConfig(String key, String value) {
         DeviceConfig.setProperty(
                 DeviceConfig.NAMESPACE_AUTOFILL, key, value, /* makeDefault */ false);
diff --git a/core/tests/coretests/src/android/widget/DifferentialMotionFlingHelperTest.java b/core/tests/coretests/src/android/widget/DifferentialMotionFlingHelperTest.java
new file mode 100644
index 0000000..51c8bc0
--- /dev/null
+++ b/core/tests/coretests/src/android/widget/DifferentialMotionFlingHelperTest.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.widget;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+import android.view.MotionEvent;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class DifferentialMotionFlingHelperTest {
+    private int mMinVelocity = 0;
+    private int mMaxVelocity = Integer.MAX_VALUE;
+    /** A fake velocity value that's going to be returned from the velocity provider. */
+    private float mVelocity;
+    private boolean mVelocityCalculated;
+
+    private final DifferentialMotionFlingHelper.DifferentialVelocityProvider mVelocityProvider =
+            (vt, event, axis) -> {
+                mVelocityCalculated = true;
+                return mVelocity;
+            };
+
+    private final DifferentialMotionFlingHelper.FlingVelocityThresholdCalculator
+            mVelocityThresholdCalculator =
+                    (ctx, buffer, event, axis) -> {
+                        buffer[0] = mMinVelocity;
+                        buffer[1] = mMaxVelocity;
+                    };
+
+    private final TestDifferentialMotionFlingTarget mFlingTarget =
+            new TestDifferentialMotionFlingTarget();
+
+    private DifferentialMotionFlingHelper mFlingHelper;
+
+    @Before
+    public void setUp() throws Exception {
+        mFlingHelper = new DifferentialMotionFlingHelper(
+                ApplicationProvider.getApplicationContext(),
+                mFlingTarget,
+                mVelocityThresholdCalculator,
+                mVelocityProvider);
+    }
+
+    @Test
+    public void deviceDoesNotSupportFling_noVelocityCalculated() {
+        mMinVelocity = Integer.MAX_VALUE;
+        mMaxVelocity = Integer.MIN_VALUE;
+
+        deliverEventWithVelocity(createPointerEvent(), MotionEvent.AXIS_VSCROLL, 60);
+
+        assertFalse(mVelocityCalculated);
+    }
+
+    @Test
+    public void flingVelocityOppositeToPrevious_stopsOngoingFling() {
+        deliverEventWithVelocity(createRotaryEncoderEvent(), MotionEvent.AXIS_SCROLL, 50);
+        deliverEventWithVelocity(createRotaryEncoderEvent(), MotionEvent.AXIS_SCROLL, -10);
+
+        // One stop on the initial event, and second stop due to opposite velocities.
+        assertEquals(2, mFlingTarget.mNumStops);
+    }
+
+    @Test
+    public void flingParamsChanged_stopsOngoingFling() {
+        deliverEventWithVelocity(createPointerEvent(), MotionEvent.AXIS_VSCROLL, 50);
+        deliverEventWithVelocity(createRotaryEncoderEvent(), MotionEvent.AXIS_SCROLL, 10);
+
+        // One stop on the initial event, and second stop due to changed axis/source.
+        assertEquals(2, mFlingTarget.mNumStops);
+    }
+
+    @Test
+    public void positiveFlingVelocityTooLow_doesNotGenerateFling() {
+        mMinVelocity = 50;
+        mMaxVelocity = 100;
+        deliverEventWithVelocity(createPointerEvent(), MotionEvent.AXIS_VSCROLL, 20);
+
+        assertEquals(0, mFlingTarget.mLastFlingVelocity, /* delta= */ 0);
+    }
+
+    @Test
+    public void negativeFlingVelocityTooLow_doesNotGenerateFling() {
+        mMinVelocity = 50;
+        mMaxVelocity = 100;
+        deliverEventWithVelocity(createPointerEvent(), MotionEvent.AXIS_VSCROLL, -20);
+
+        assertEquals(0, mFlingTarget.mLastFlingVelocity, /* delta= */ 0);
+    }
+
+    @Test
+    public void positiveFlingVelocityAboveMinimum_generateFlings() {
+        mMinVelocity = 50;
+        mMaxVelocity = 100;
+        deliverEventWithVelocity(createPointerEvent(), MotionEvent.AXIS_VSCROLL, 60);
+
+        assertEquals(60, mFlingTarget.mLastFlingVelocity, /* delta= */ 0);
+    }
+
+    @Test
+    public void negativeFlingVelocityAboveMinimum_generateFlings() {
+        mMinVelocity = 50;
+        mMaxVelocity = 100;
+        deliverEventWithVelocity(createPointerEvent(), MotionEvent.AXIS_VSCROLL, -60);
+
+        assertEquals(-60, mFlingTarget.mLastFlingVelocity, /* delta= */ 0);
+    }
+
+    @Test
+    public void positiveFlingVelocityAboveMaximum_velocityClamped() {
+        mMinVelocity = 50;
+        mMaxVelocity = 100;
+        deliverEventWithVelocity(createPointerEvent(), MotionEvent.AXIS_VSCROLL, 3000);
+
+        assertEquals(100, mFlingTarget.mLastFlingVelocity, /* delta= */ 0);
+    }
+
+    @Test
+    public void negativeFlingVelocityAboveMaximum_velocityClamped() {
+        mMinVelocity = 50;
+        mMaxVelocity = 100;
+        deliverEventWithVelocity(createPointerEvent(), MotionEvent.AXIS_VSCROLL, -3000);
+
+        assertEquals(-100, mFlingTarget.mLastFlingVelocity, /* delta= */ 0);
+    }
+
+    private MotionEvent createRotaryEncoderEvent() {
+        return MotionEventUtils.createRotaryEvent(-2);
+    }
+
+    private MotionEvent createPointerEvent() {
+        return MotionEventUtils.createGenericPointerEvent(/* hScroll= */ 0, /* vScroll= */ -1);
+
+    }
+
+    private void deliverEventWithVelocity(MotionEvent ev, int axis, float velocity) {
+        mVelocity = velocity;
+        mFlingHelper.onMotionEvent(ev, axis);
+        ev.recycle();
+    }
+
+    private static class TestDifferentialMotionFlingTarget
+            implements DifferentialMotionFlingHelper.DifferentialMotionFlingTarget {
+        float mLastFlingVelocity = 0;
+        int mNumStops = 0;
+
+        @Override
+        public boolean startDifferentialMotionFling(float velocity) {
+            mLastFlingVelocity = velocity;
+            return true;
+        }
+
+        @Override
+        public void stopDifferentialMotionFling() {
+            mNumStops++;
+        }
+
+        @Override
+        public float getScaledScrollFactor() {
+            return 1;
+        }
+    }
+}
diff --git a/core/tests/coretests/src/android/widget/FloatingToolbarUtils.java b/core/tests/coretests/src/android/widget/FloatingToolbarUtils.java
index 2d3ed95..4ff1065 100644
--- a/core/tests/coretests/src/android/widget/FloatingToolbarUtils.java
+++ b/core/tests/coretests/src/android/widget/FloatingToolbarUtils.java
@@ -20,12 +20,12 @@
 import static com.google.common.truth.Truth.assertWithMessage;
 
 import android.content.res.Resources;
-import android.support.test.uiautomator.By;
-import android.support.test.uiautomator.BySelector;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.Until;
 
 import androidx.test.InstrumentationRegistry;
+import androidx.test.uiautomator.By;
+import androidx.test.uiautomator.BySelector;
+import androidx.test.uiautomator.UiDevice;
+import androidx.test.uiautomator.Until;
 
 import com.android.internal.R;
 
diff --git a/core/tests/coretests/src/android/widget/HorizontalScrollViewActivity.java b/core/tests/coretests/src/android/widget/HorizontalScrollViewActivity.java
new file mode 100644
index 0000000..2101354
--- /dev/null
+++ b/core/tests/coretests/src/android/widget/HorizontalScrollViewActivity.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.widget;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import com.android.frameworks.coretests.R;
+
+/**
+ * An activity for testing the TextView widget.
+ */
+public class HorizontalScrollViewActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_horizontal_scroll_view);
+    }
+}
diff --git a/core/tests/coretests/src/android/widget/HorizontalScrollViewFunctionalTest.java b/core/tests/coretests/src/android/widget/HorizontalScrollViewFunctionalTest.java
new file mode 100644
index 0000000..86f26e5
--- /dev/null
+++ b/core/tests/coretests/src/android/widget/HorizontalScrollViewFunctionalTest.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.widget;
+
+import static org.junit.Assert.assertEquals;
+
+import android.platform.test.annotations.Presubmit;
+import android.util.PollingCheck;
+
+import androidx.test.filters.MediumTest;
+import androidx.test.rule.ActivityTestRule;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.frameworks.coretests.R;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@MediumTest
+@Presubmit
+public class HorizontalScrollViewFunctionalTest {
+    private HorizontalScrollViewActivity mActivity;
+    private HorizontalScrollView mHorizontalScrollView;
+    @Rule
+    public ActivityTestRule<HorizontalScrollViewActivity> mActivityRule = new ActivityTestRule<>(
+            HorizontalScrollViewActivity.class);
+
+    @Before
+    public void setUp() throws Exception {
+        mActivity = mActivityRule.getActivity();
+        mHorizontalScrollView = mActivity.findViewById(R.id.horizontal_scroll_view);
+    }
+
+    @Test
+    public void testScrollAfterFlingTop() {
+        mHorizontalScrollView.scrollTo(100, 0);
+        mHorizontalScrollView.fling(-10000);
+        PollingCheck.waitFor(() -> mHorizontalScrollView.mEdgeGlowLeft.getDistance() > 0);
+        PollingCheck.waitFor(() -> mHorizontalScrollView.mEdgeGlowLeft.getDistance() == 0f);
+        assertEquals(0, mHorizontalScrollView.getScrollX());
+    }
+
+    @Test
+    public void testScrollAfterFlingBottom() {
+        int childWidth = mHorizontalScrollView.getChildAt(0).getWidth();
+        int maxScroll = childWidth - mHorizontalScrollView.getWidth();
+        mHorizontalScrollView.scrollTo(maxScroll - 100, 0);
+        mHorizontalScrollView.fling(10000);
+        PollingCheck.waitFor(() -> mHorizontalScrollView.mEdgeGlowRight.getDistance() > 0);
+        PollingCheck.waitFor(() -> mHorizontalScrollView.mEdgeGlowRight.getDistance() == 0f);
+        assertEquals(maxScroll, mHorizontalScrollView.getScrollX());
+    }
+}
+
diff --git a/core/tests/coretests/src/android/widget/MotionEventUtils.java b/core/tests/coretests/src/android/widget/MotionEventUtils.java
new file mode 100644
index 0000000..275efa3
--- /dev/null
+++ b/core/tests/coretests/src/android/widget/MotionEventUtils.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.widget;
+
+import static android.view.InputDevice.SOURCE_CLASS_POINTER;
+import static android.view.InputDevice.SOURCE_ROTARY_ENCODER;
+import static android.view.MotionEvent.ACTION_SCROLL;
+import static android.view.MotionEvent.AXIS_HSCROLL;
+import static android.view.MotionEvent.AXIS_SCROLL;
+import static android.view.MotionEvent.AXIS_VSCROLL;
+
+import android.view.MotionEvent;
+
+/** Test utilities for {@link MotionEvent}s. */
+public class MotionEventUtils {
+
+    /** Creates a test {@link MotionEvent} from a {@link SOURCE_ROTARY_ENCODER}. */
+    public static MotionEvent createRotaryEvent(float scroll) {
+        MotionEvent.PointerCoords coords = new MotionEvent.PointerCoords();
+        coords.setAxisValue(AXIS_SCROLL, scroll);
+
+        return createGenericMotionEvent(SOURCE_ROTARY_ENCODER, ACTION_SCROLL, coords);
+    }
+
+    /** Creates a test {@link MotionEvent} from a {@link SOURCE_CLASS_POINTER}. */
+    public static MotionEvent createGenericPointerEvent(float hScroll, float vScroll) {
+        MotionEvent.PointerCoords coords = new MotionEvent.PointerCoords();
+        coords.setAxisValue(AXIS_HSCROLL, hScroll);
+        coords.setAxisValue(AXIS_VSCROLL, vScroll);
+
+        return createGenericMotionEvent(SOURCE_CLASS_POINTER, ACTION_SCROLL, coords);
+    }
+
+    private static MotionEvent createGenericMotionEvent(
+            int source, int action, MotionEvent.PointerCoords coords) {
+        MotionEvent.PointerProperties props = new MotionEvent.PointerProperties();
+        props.id = 0;
+
+        return MotionEvent.obtain(
+                /* downTime= */ 0,
+                /* eventTime= */ 100,
+                action,
+                /* pointerCount= */ 1,
+                new MotionEvent.PointerProperties[] {props},
+                new MotionEvent.PointerCoords[] {coords},
+                /* metaState= */ 0,
+                /* buttonState= */ 0,
+                /* xPrecision= */ 0,
+                /* yPrecision= */ 0,
+                /* deviceId= */ 1,
+                /* edgeFlags= */ 0,
+                source,
+                /* flags= */ 0);
+    }
+}
diff --git a/core/tests/coretests/src/android/widget/RemoteViewsTest.java b/core/tests/coretests/src/android/widget/RemoteViewsTest.java
index c442755..c8ea374 100644
--- a/core/tests/coretests/src/android/widget/RemoteViewsTest.java
+++ b/core/tests/coretests/src/android/widget/RemoteViewsTest.java
@@ -34,6 +34,9 @@
 import android.appwidget.AppWidgetHostView;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
 import android.graphics.drawable.Icon;
 import android.net.Uri;
 import android.os.AsyncTask;
diff --git a/core/tests/coretests/src/android/widget/ScrollViewActivity.java b/core/tests/coretests/src/android/widget/ScrollViewActivity.java
new file mode 100644
index 0000000..899d631
--- /dev/null
+++ b/core/tests/coretests/src/android/widget/ScrollViewActivity.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.widget;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import com.android.frameworks.coretests.R;
+
+/**
+ * An activity for testing the TextView widget.
+ */
+public class ScrollViewActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_scroll_view);
+    }
+}
diff --git a/core/tests/coretests/src/android/widget/ScrollViewFunctionalTest.java b/core/tests/coretests/src/android/widget/ScrollViewFunctionalTest.java
new file mode 100644
index 0000000..a49bb6a
--- /dev/null
+++ b/core/tests/coretests/src/android/widget/ScrollViewFunctionalTest.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.widget;
+
+import static org.junit.Assert.assertEquals;
+
+import android.platform.test.annotations.Presubmit;
+import android.util.PollingCheck;
+
+import androidx.test.filters.MediumTest;
+import androidx.test.rule.ActivityTestRule;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.frameworks.coretests.R;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@MediumTest
+@Presubmit
+public class ScrollViewFunctionalTest {
+    private ScrollViewActivity mActivity;
+    private ScrollView mScrollView;
+    @Rule
+    public ActivityTestRule<ScrollViewActivity> mActivityRule = new ActivityTestRule<>(
+            ScrollViewActivity.class);
+
+    @Before
+    public void setUp() throws Exception {
+        mActivity = mActivityRule.getActivity();
+        mScrollView = mActivity.findViewById(R.id.scroll_view);
+    }
+
+    @Test
+    public void testScrollAfterFlingTop() {
+        mScrollView.scrollTo(0, 100);
+        mScrollView.fling(-10000);
+        PollingCheck.waitFor(() -> mScrollView.mEdgeGlowTop.getDistance() > 0);
+        PollingCheck.waitFor(() -> mScrollView.mEdgeGlowTop.getDistance() == 0f);
+        assertEquals(0, mScrollView.getScrollY());
+    }
+
+    @Test
+    public void testScrollAfterFlingBottom() {
+        int childHeight = mScrollView.getChildAt(0).getHeight();
+        int maxScroll = childHeight - mScrollView.getHeight();
+        mScrollView.scrollTo(0, maxScroll - 100);
+        mScrollView.fling(10000);
+        PollingCheck.waitFor(() -> mScrollView.mEdgeGlowBottom.getDistance() > 0);
+        PollingCheck.waitFor(() -> mScrollView.mEdgeGlowBottom.getDistance() == 0f);
+        assertEquals(maxScroll, mScrollView.getScrollY());
+    }
+}
+
diff --git a/core/tests/coretests/src/android/widget/TextViewActivityTest.java b/core/tests/coretests/src/android/widget/TextViewActivityTest.java
index 659cd98..9cf2e42 100644
--- a/core/tests/coretests/src/android/widget/TextViewActivityTest.java
+++ b/core/tests/coretests/src/android/widget/TextViewActivityTest.java
@@ -67,9 +67,6 @@
 import android.content.Intent;
 import android.graphics.drawable.Icon;
 import android.os.Bundle;
-import android.support.test.uiautomator.By;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.Until;
 import android.text.InputType;
 import android.text.Selection;
 import android.text.Spannable;
@@ -95,6 +92,9 @@
 import androidx.test.filters.Suppress;
 import androidx.test.rule.ActivityTestRule;
 import androidx.test.runner.AndroidJUnit4;
+import androidx.test.uiautomator.By;
+import androidx.test.uiautomator.UiDevice;
+import androidx.test.uiautomator.Until;
 
 import com.android.frameworks.coretests.R;
 
diff --git a/core/tests/coretests/src/android/window/BackNavigationTest.java b/core/tests/coretests/src/android/window/BackNavigationTest.java
index d6145eb..a66fe26 100644
--- a/core/tests/coretests/src/android/window/BackNavigationTest.java
+++ b/core/tests/coretests/src/android/window/BackNavigationTest.java
@@ -26,12 +26,12 @@
 import android.app.EmptyActivity;
 import android.app.Instrumentation;
 import android.os.RemoteException;
-import android.support.test.uiautomator.UiDevice;
 
 import androidx.lifecycle.Lifecycle;
 import androidx.test.core.app.ActivityScenario;
 import androidx.test.ext.junit.rules.ActivityScenarioRule;
 import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.uiautomator.UiDevice;
 
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/core/tests/coretests/src/android/window/WindowContextControllerTest.java b/core/tests/coretests/src/android/window/WindowContextControllerTest.java
index a52d2e8..30c0f2b 100644
--- a/core/tests/coretests/src/android/window/WindowContextControllerTest.java
+++ b/core/tests/coretests/src/android/window/WindowContextControllerTest.java
@@ -24,9 +24,11 @@
 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.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 
 import android.os.Binder;
@@ -56,14 +58,18 @@
 public class WindowContextControllerTest {
     private WindowContextController mController;
     @Mock
+    private WindowTokenClientController mWindowTokenClientController;
+    @Mock
     private WindowTokenClient mMockToken;
 
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
-        mController = new WindowContextController(mMockToken);
+        mController = spy(new WindowContextController(mMockToken));
+        doReturn(mWindowTokenClientController).when(mController).getWindowTokenClientController();
         doNothing().when(mMockToken).onConfigurationChanged(any(), anyInt(), anyBoolean());
-        doReturn(true).when(mMockToken).attachToDisplayArea(anyInt(), anyInt(), any());
+        doReturn(true).when(mWindowTokenClientController).attachToDisplayArea(
+                eq(mMockToken), anyInt(), anyInt(), any());
     }
 
     @Test(expected = IllegalStateException.class)
@@ -78,7 +84,7 @@
     public void testDetachIfNeeded_NotAttachedYet_DoNothing() {
         mController.detachIfNeeded();
 
-        verify(mMockToken, never()).detachFromWindowContainerIfNeeded();
+        verify(mWindowTokenClientController, never()).detachIfNeeded(any());
     }
 
     @Test
diff --git a/core/tests/coretests/src/android/window/WindowTokenClientControllerTest.java b/core/tests/coretests/src/android/window/WindowTokenClientControllerTest.java
new file mode 100644
index 0000000..a21c917
--- /dev/null
+++ b/core/tests/coretests/src/android/window/WindowTokenClientControllerTest.java
@@ -0,0 +1,241 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.window;
+
+import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import android.app.ActivityThread;
+import android.content.res.Configuration;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.platform.test.annotations.Presubmit;
+import android.view.IWindowManager;
+
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Tests for {@link WindowTokenClientController}.
+ *
+ * Build/Install/Run:
+ *  atest FrameworksCoreTests:WindowTokenClientControllerTest
+ */
+@SmallTest
+@Presubmit
+public class WindowTokenClientControllerTest {
+
+    @Mock
+    private IWindowManager mWindowManagerService;
+    @Mock
+    private WindowTokenClient mWindowTokenClient;
+    @Mock
+    private IBinder mWindowToken;
+    // Can't mock final class.
+    private final Configuration mConfiguration = new Configuration();
+
+    private WindowContextInfo mWindowContextInfo;
+    private WindowTokenClientController mController;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        mController = spy(WindowTokenClientController.createInstanceForTesting());
+        doReturn(mWindowManagerService).when(mController).getWindowManagerService();
+        mWindowContextInfo = new WindowContextInfo(mConfiguration, DEFAULT_DISPLAY);
+    }
+
+    @Test
+    public void testAttachToDisplayArea() throws RemoteException {
+        doReturn(null).when(mWindowManagerService).attachWindowContextToDisplayArea(
+                any(), any(), anyInt(), anyInt(), any());
+
+        assertFalse(mController.attachToDisplayArea(mWindowTokenClient, TYPE_APPLICATION_OVERLAY,
+                DEFAULT_DISPLAY, null /* options */));
+        verify(mWindowManagerService).attachWindowContextToDisplayArea(
+                ActivityThread.currentActivityThread().getApplicationThread(), mWindowTokenClient,
+                TYPE_APPLICATION_OVERLAY, DEFAULT_DISPLAY, null /* options */);
+        verify(mWindowTokenClient, never()).onConfigurationChanged(any(), anyInt(), anyBoolean());
+
+        doReturn(mWindowContextInfo).when(mWindowManagerService).attachWindowContextToDisplayArea(
+                any(), any(), anyInt(), anyInt(), any());
+
+        assertTrue(mController.attachToDisplayArea(mWindowTokenClient, TYPE_APPLICATION_OVERLAY,
+                DEFAULT_DISPLAY, null /* options */));
+        verify(mWindowTokenClient).onConfigurationChanged(mConfiguration, DEFAULT_DISPLAY,
+                false /* shouldReportConfigChange */);
+    }
+
+    @Test
+    public void testAttachToDisplayArea_detachIfNeeded() throws RemoteException {
+        mController.detachIfNeeded(mWindowTokenClient);
+
+        verify(mWindowManagerService, never()).detachWindowContext(any());
+
+        doReturn(null).when(mWindowManagerService).attachWindowContextToDisplayArea(
+                any(), any(), anyInt(), anyInt(), any());
+        mController.attachToDisplayArea(mWindowTokenClient, TYPE_APPLICATION_OVERLAY,
+                DEFAULT_DISPLAY, null /* options */);
+        mController.detachIfNeeded(mWindowTokenClient);
+
+        verify(mWindowManagerService, never()).detachWindowContext(any());
+
+        doReturn(mWindowContextInfo).when(mWindowManagerService).attachWindowContextToDisplayArea(
+                any(), any(), anyInt(), anyInt(), any());
+        mController.attachToDisplayArea(mWindowTokenClient, TYPE_APPLICATION_OVERLAY,
+                DEFAULT_DISPLAY, null /* options */);
+        mController.detachIfNeeded(mWindowTokenClient);
+
+        verify(mWindowManagerService).detachWindowContext(mWindowTokenClient);
+    }
+
+    @Test
+    public void testAttachToDisplayContent() throws RemoteException {
+        doReturn(null).when(mWindowManagerService).attachWindowContextToDisplayContent(
+                any(), any(), anyInt());
+
+        assertFalse(mController.attachToDisplayContent(mWindowTokenClient, DEFAULT_DISPLAY));
+        verify(mWindowManagerService).attachWindowContextToDisplayContent(
+                ActivityThread.currentActivityThread().getApplicationThread(), mWindowTokenClient,
+                DEFAULT_DISPLAY);
+        verify(mWindowTokenClient, never()).onConfigurationChanged(any(), anyInt(), anyBoolean());
+
+        doReturn(mWindowContextInfo).when(mWindowManagerService)
+                .attachWindowContextToDisplayContent(any(), any(), anyInt());
+
+        assertTrue(mController.attachToDisplayContent(mWindowTokenClient, DEFAULT_DISPLAY));
+        verify(mWindowTokenClient).onConfigurationChanged(mConfiguration, DEFAULT_DISPLAY,
+                false /* shouldReportConfigChange */);
+    }
+
+    @Test
+    public void testAttachToDisplayContent_detachIfNeeded() throws RemoteException {
+        mController.detachIfNeeded(mWindowTokenClient);
+
+        verify(mWindowManagerService, never()).detachWindowContext(any());
+
+        doReturn(null).when(mWindowManagerService).attachWindowContextToDisplayContent(
+                any(), any(), anyInt());
+        mController.attachToDisplayContent(mWindowTokenClient, DEFAULT_DISPLAY);
+        mController.detachIfNeeded(mWindowTokenClient);
+
+        verify(mWindowManagerService, never()).detachWindowContext(any());
+
+        doReturn(mWindowContextInfo).when(mWindowManagerService)
+                .attachWindowContextToDisplayContent(any(), any(), anyInt());
+        mController.attachToDisplayContent(mWindowTokenClient, DEFAULT_DISPLAY);
+        mController.detachIfNeeded(mWindowTokenClient);
+
+        verify(mWindowManagerService).detachWindowContext(mWindowTokenClient);
+    }
+
+    @Test
+    public void testAttachToWindowToken() throws RemoteException {
+        doReturn(null).when(mWindowManagerService).attachWindowContextToWindowToken(
+                any(), any(), any());
+
+        assertFalse(mController.attachToWindowToken(mWindowTokenClient, mWindowToken));
+        verify(mWindowManagerService).attachWindowContextToWindowToken(
+                ActivityThread.currentActivityThread().getApplicationThread(), mWindowTokenClient,
+                mWindowToken);
+        verify(mWindowTokenClient, never()).onConfigurationChanged(any(), anyInt(), anyBoolean());
+
+        doReturn(mWindowContextInfo).when(mWindowManagerService)
+                .attachWindowContextToWindowToken(any(), any(), any());
+
+        assertTrue(mController.attachToWindowToken(mWindowTokenClient, mWindowToken));
+        verify(mWindowTokenClient).postOnConfigurationChanged(mConfiguration, DEFAULT_DISPLAY);
+    }
+
+    @Test
+    public void testAttachToWindowToken_detachIfNeeded() throws RemoteException {
+        mController.detachIfNeeded(mWindowTokenClient);
+
+        verify(mWindowManagerService, never()).detachWindowContext(any());
+
+        doReturn(null).when(mWindowManagerService).attachWindowContextToWindowToken(
+                any(), any(), any());
+        mController.attachToWindowToken(mWindowTokenClient, mWindowToken);
+        mController.detachIfNeeded(mWindowTokenClient);
+
+        verify(mWindowManagerService, never()).detachWindowContext(any());
+
+        doReturn(mWindowContextInfo).when(mWindowManagerService).attachWindowContextToWindowToken(
+                any(), any(), any());
+        mController.attachToWindowToken(mWindowTokenClient, mWindowToken);
+        mController.detachIfNeeded(mWindowTokenClient);
+
+        verify(mWindowManagerService).detachWindowContext(mWindowTokenClient);
+    }
+
+    @Test
+    public void testOnWindowContextInfoChanged() throws RemoteException {
+        doReturn(mWindowContextInfo).when(mWindowManagerService)
+                .attachWindowContextToWindowToken(any(), any(), any());
+
+        // No invoke if not attached.
+        mController.onWindowContextInfoChanged(mWindowTokenClient, mWindowContextInfo);
+
+        verify(mWindowTokenClient, never()).onConfigurationChanged(any(), anyInt());
+
+        // Invoke postOnConfigurationChanged when attached
+        assertTrue(mController.attachToWindowToken(mWindowTokenClient, mWindowToken));
+
+        verify(mWindowTokenClient).postOnConfigurationChanged(mConfiguration, DEFAULT_DISPLAY);
+
+        // Invoke onConfigurationChanged when onWindowContextInfoChanged
+        mController.onWindowContextInfoChanged(
+                mWindowTokenClient, new WindowContextInfo(mConfiguration, DEFAULT_DISPLAY + 1));
+
+        verify(mWindowTokenClient).onConfigurationChanged(mConfiguration, DEFAULT_DISPLAY + 1);
+    }
+
+    @Test
+    public void testOnWindowContextWindowRemoved() throws RemoteException {
+        doReturn(mWindowContextInfo).when(mWindowManagerService)
+                .attachWindowContextToWindowToken(any(), any(), any());
+
+        // No invoke if not attached.
+        mController.onWindowContextWindowRemoved(mWindowTokenClient);
+
+        verify(mWindowTokenClient, never()).onWindowTokenRemoved();
+
+        // No invoke if not onWindowTokenRemoved.
+        mController.attachToWindowToken(mWindowTokenClient, mWindowToken);
+
+        verify(mWindowTokenClient, never()).onWindowTokenRemoved();
+
+        // Invoke onWindowTokenRemoved when onWindowContextWindowRemoved
+        mController.onWindowContextWindowRemoved(mWindowTokenClient);
+
+        verify(mWindowTokenClient).onWindowTokenRemoved();
+    }
+}
diff --git a/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutChooserActivityTest.java b/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutChooserActivityTest.java
index 57a1376..681ba9c 100644
--- a/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutChooserActivityTest.java
+++ b/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutChooserActivityTest.java
@@ -43,6 +43,7 @@
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.ParceledListSlice;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
 import android.os.Handler;
@@ -111,7 +112,8 @@
         when(mResolveInfo.loadLabel(any(PackageManager.class))).thenReturn(TEST_LABEL);
         when(mAccessibilityServiceInfo.getComponentName()).thenReturn(TEST_COMPONENT_NAME);
         when(mAccessibilityManagerService.getInstalledAccessibilityServiceList(
-                anyInt())).thenReturn(Collections.singletonList(mAccessibilityServiceInfo));
+                anyInt())).thenReturn(new ParceledListSlice<>(
+                        Collections.singletonList(mAccessibilityServiceInfo)));
         when(mAccessibilityManagerService.isAccessibilityTargetAllowed(
                 anyString(), anyInt(), anyInt())).thenReturn(true);
         TestAccessibilityShortcutChooserActivity.setupForTesting(mAccessibilityManagerService);
diff --git a/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java b/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java
index 9763679..cd5ec85 100644
--- a/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java
+++ b/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java
@@ -27,9 +27,7 @@
 import static com.android.internal.accessibility.AccessibilityShortcutController.ONE_HANDED_COMPONENT_NAME;
 import static com.android.internal.accessibility.AccessibilityShortcutController.REDUCE_BRIGHT_COLORS_COMPONENT_NAME;
 
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
+import static com.google.common.truth.Truth.assertThat;
 
 import static org.junit.Assert.fail;
 import static org.mockito.AdditionalMatchers.aryEq;
@@ -55,6 +53,7 @@
 import android.content.DialogInterface;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.ParceledListSlice;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
 import android.content.res.Resources;
@@ -67,7 +66,6 @@
 import android.speech.tts.TextToSpeech;
 import android.speech.tts.Voice;
 import android.test.mock.MockContentResolver;
-import android.text.TextUtils;
 import android.view.Window;
 import android.view.WindowManager;
 import android.view.accessibility.AccessibilityManager;
@@ -75,7 +73,7 @@
 import android.widget.Toast;
 
 import androidx.test.InstrumentationRegistry;
-import androidx.test.runner.AndroidJUnit4;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
 
 import com.android.internal.R;
 import com.android.internal.accessibility.AccessibilityShortcutController.FrameworkObjectProvider;
@@ -150,7 +148,7 @@
         when(mContext.getContentResolver()).thenReturn(mContentResolver);
 
         when(mAccessibilityManagerService.getInstalledAccessibilityServiceList(anyInt()))
-                .thenReturn(Collections.singletonList(mServiceInfo));
+                .thenReturn(new ParceledListSlice<>(Collections.singletonList(mServiceInfo)));
 
         // Use the extra level of indirection in the object to mock framework objects
         AccessibilityManager accessibilityManager =
@@ -231,7 +229,7 @@
             throws Exception {
         configureNoShortcutService();
         configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
-        assertFalse(getController().isAccessibilityShortcutAvailable(false));
+        assertThat(getController().isAccessibilityShortcutAvailable(false)).isFalse();
     }
 
     @Test
@@ -239,7 +237,7 @@
             throws Exception {
         configureValidShortcutService();
         configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
-        assertTrue(getController().isAccessibilityShortcutAvailable(false));
+        assertThat(getController().isAccessibilityShortcutAvailable(false)).isTrue();
     }
 
     @Test
@@ -247,7 +245,7 @@
             throws Exception {
         configureValidShortcutService();
         configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
-        assertFalse(getController().isAccessibilityShortcutAvailable(true));
+        assertThat(getController().isAccessibilityShortcutAvailable(true)).isFalse();
     }
 
     @Test
@@ -255,7 +253,7 @@
             throws Exception {
         configureValidShortcutService();
         configureShortcutEnabled(ENABLED_INCLUDING_LOCK_SCREEN);
-        assertTrue(getController().isAccessibilityShortcutAvailable(true));
+        assertThat(getController().isAccessibilityShortcutAvailable(true)).isTrue();
     }
 
     @Test
@@ -266,10 +264,14 @@
         configureShortcutEnabled(ENABLED_INCLUDING_LOCK_SCREEN);
         Settings.Secure.putString(
                 mContentResolver, ACCESSIBILITY_SHORTCUT_ON_LOCK_SCREEN, null);
-        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0);
-        assertFalse(getController().isAccessibilityShortcutAvailable(true));
-        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 1);
-        assertTrue(getController().isAccessibilityShortcutAvailable(true));
+        Settings.Secure.putInt(
+                mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.NOT_SHOWN);
+        assertThat(getController().isAccessibilityShortcutAvailable(true)).isFalse();
+        Settings.Secure.putInt(
+                mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.SHOWN);
+        assertThat(getController().isAccessibilityShortcutAvailable(true)).isTrue();
     }
 
     @Test
@@ -280,7 +282,9 @@
         AccessibilityShortcutController accessibilityShortcutController = getController();
         configureNoShortcutService();
         accessibilityShortcutController.onSettingsChanged();
-        assertFalse(accessibilityShortcutController.isAccessibilityShortcutAvailable(false));
+        assertThat(
+                accessibilityShortcutController.isAccessibilityShortcutAvailable(false)
+        ).isFalse();
     }
 
     @Test
@@ -291,7 +295,9 @@
         AccessibilityShortcutController accessibilityShortcutController = getController();
         configureValidShortcutService();
         accessibilityShortcutController.onSettingsChanged();
-        assertTrue(accessibilityShortcutController.isAccessibilityShortcutAvailable(false));
+        assertThat(
+                accessibilityShortcutController.isAccessibilityShortcutAvailable(false)
+        ).isTrue();
     }
 
     @Test
@@ -301,7 +307,9 @@
         AccessibilityShortcutController accessibilityShortcutController = getController();
         configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
         accessibilityShortcutController.onSettingsChanged();
-        assertTrue(accessibilityShortcutController.isAccessibilityShortcutAvailable(false));
+        assertThat(
+                accessibilityShortcutController.isAccessibilityShortcutAvailable(false)
+        ).isTrue();
     }
 
     @Test
@@ -312,7 +320,9 @@
         AccessibilityShortcutController accessibilityShortcutController = getController();
         configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
         accessibilityShortcutController.onSettingsChanged();
-        assertFalse(accessibilityShortcutController.isAccessibilityShortcutAvailable(true));
+        assertThat(
+                accessibilityShortcutController.isAccessibilityShortcutAvailable(true)
+        ).isFalse();
     }
 
     @Test
@@ -323,7 +333,9 @@
         AccessibilityShortcutController accessibilityShortcutController = getController();
         configureShortcutEnabled(ENABLED_INCLUDING_LOCK_SCREEN);
         accessibilityShortcutController.onSettingsChanged();
-        assertTrue(accessibilityShortcutController.isAccessibilityShortcutAvailable(true));
+        assertThat(
+                accessibilityShortcutController.isAccessibilityShortcutAvailable(true)
+        ).isTrue();
     }
 
     @Test
@@ -340,11 +352,15 @@
         configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
         configureValidShortcutService();
         AccessibilityShortcutController accessibilityShortcutController = getController();
-        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0);
+        Settings.Secure.putInt(
+                mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.NOT_SHOWN);
         accessibilityShortcutController.performAccessibilityShortcut();
 
-        assertEquals(1, Settings.Secure.getInt(
-                mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0));
+        assertThat(Settings.Secure.getInt(
+                mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.NOT_SHOWN)).isEqualTo(
+                AccessibilityShortcutController.DialogStatus.SHOWN);
         verify(mResources).getString(
                 R.string.accessibility_shortcut_single_service_warning_title, PACKAGE_NAME_STRING);
         verify(mAlertDialog).show();
@@ -356,11 +372,12 @@
 
     @Test
     public void testOnAccessibilityShortcut_withDialogShowing_callsServer()
-        throws Exception {
+            throws Exception {
         configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
         configureValidShortcutService();
         AccessibilityShortcutController accessibilityShortcutController = getController();
-        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0);
+        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.NOT_SHOWN);
         accessibilityShortcutController.performAccessibilityShortcut();
         accessibilityShortcutController.performAccessibilityShortcut();
         verify(mToast).show();
@@ -373,11 +390,12 @@
 
     @Test
     public void testOnAccessibilityShortcut_ifCanceledFirstTime_showsWarningDialog()
-        throws Exception {
+            throws Exception {
         configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
         configureValidShortcutService();
         AccessibilityShortcutController accessibilityShortcutController = getController();
-        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0);
+        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.NOT_SHOWN);
         accessibilityShortcutController.performAccessibilityShortcut();
         ArgumentCaptor<AlertDialog.OnCancelListener> cancelListenerCaptor =
                 ArgumentCaptor.forClass(AlertDialog.OnCancelListener.class);
@@ -393,49 +411,98 @@
     public void testClickingDisableButtonInDialog_shouldClearShortcutId() throws Exception {
         configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
         configureValidShortcutService();
-        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0);
+        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.NOT_SHOWN);
         getController().performAccessibilityShortcut();
 
         ArgumentCaptor<DialogInterface.OnClickListener> captor =
                 ArgumentCaptor.forClass(DialogInterface.OnClickListener.class);
         verify(mAlertDialogBuilder).setPositiveButton(eq(R.string.accessibility_shortcut_off),
                 captor.capture());
-        // Call the button callback, if one exists
-        if (captor.getValue() != null) {
-            captor.getValue().onClick(null, 0);
-        }
-        assertTrue(TextUtils.isEmpty(
-                Settings.Secure.getString(mContentResolver, ACCESSIBILITY_SHORTCUT_TARGET_SERVICE)));
-        assertEquals(0, Settings.Secure.getInt(
-                mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN));
+        captor.getValue().onClick(null, DialogInterface.BUTTON_POSITIVE);
+
+        assertThat(
+                Settings.Secure.getString(mContentResolver, ACCESSIBILITY_SHORTCUT_TARGET_SERVICE)
+        ).isEmpty();
+        assertThat(Settings.Secure.getInt(
+                mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN)).isEqualTo(
+                AccessibilityShortcutController.DialogStatus.NOT_SHOWN);
     }
 
     @Test
     public void testClickingTurnOnButtonInDialog_shouldLeaveShortcutReady() throws Exception {
         configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
         configureValidShortcutService();
-        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0);
+        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.NOT_SHOWN);
         getController().performAccessibilityShortcut();
 
         ArgumentCaptor<DialogInterface.OnClickListener> captor =
-            ArgumentCaptor.forClass(DialogInterface.OnClickListener.class);
+                ArgumentCaptor.forClass(DialogInterface.OnClickListener.class);
         verify(mAlertDialogBuilder).setNegativeButton(eq(R.string.accessibility_shortcut_on),
                 captor.capture());
-        // Call the button callback, if one exists
-        if (captor.getValue() != null) {
-            captor.getValue().onClick(null, 0);
-        }
-        assertEquals(SERVICE_NAME_STRING,
-                Settings.Secure.getString(mContentResolver, ACCESSIBILITY_SHORTCUT_TARGET_SERVICE));
-        assertEquals(1, Settings.Secure.getInt(
-                mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN));
+        captor.getValue().onClick(null, DialogInterface.BUTTON_NEGATIVE);
+
+        assertThat(
+                Settings.Secure.getString(mContentResolver, ACCESSIBILITY_SHORTCUT_TARGET_SERVICE)
+        ).isEqualTo(SERVICE_NAME_STRING);
+        assertThat(Settings.Secure.getInt(
+                mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN)).isEqualTo(
+                AccessibilityShortcutController.DialogStatus.SHOWN);
+    }
+
+    @Test
+    public void testTurnOnDefaultA11yServiceInDialog_defaultServiceShortcutTurnsOn()
+            throws Exception {
+        configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
+        configureDefaultAccessibilityService();
+        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.NOT_SHOWN);
+        getController().performAccessibilityShortcut();
+
+        ArgumentCaptor<DialogInterface.OnClickListener> captor =
+                ArgumentCaptor.forClass(DialogInterface.OnClickListener.class);
+        verify(mAlertDialogBuilder).setNegativeButton(eq(R.string.accessibility_shortcut_on),
+                captor.capture());
+        captor.getValue().onClick(null, DialogInterface.BUTTON_NEGATIVE);
+
+        assertThat(
+                Settings.Secure.getString(mContentResolver,
+                        ACCESSIBILITY_SHORTCUT_TARGET_SERVICE)).isEqualTo(SERVICE_NAME_STRING);
+        assertThat(Settings.Secure.getInt(
+                mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN)).isEqualTo(
+                AccessibilityShortcutController.DialogStatus.SHOWN);
+    }
+
+    @Test
+    public void testTurnOffDefaultA11yServiceInDialog_defaultServiceShortcutTurnsOff()
+            throws Exception {
+        configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
+        configureDefaultAccessibilityService();
+        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.NOT_SHOWN);
+        getController().performAccessibilityShortcut();
+
+        ArgumentCaptor<DialogInterface.OnClickListener> captor =
+                ArgumentCaptor.forClass(DialogInterface.OnClickListener.class);
+        verify(mAlertDialogBuilder).setPositiveButton(eq(R.string.accessibility_shortcut_off),
+                captor.capture());
+        captor.getValue().onClick(null, DialogInterface.BUTTON_POSITIVE);
+
+        assertThat(
+                Settings.Secure.getString(mContentResolver,
+                        ACCESSIBILITY_SHORTCUT_TARGET_SERVICE)).isEmpty();
+        assertThat(Settings.Secure.getInt(
+                mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN)).isEqualTo(
+                AccessibilityShortcutController.DialogStatus.NOT_SHOWN);
     }
 
     @Test
     public void testOnAccessibilityShortcut_afterDialogShown_shouldCallServer() throws Exception {
         configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
         configureValidShortcutService();
-        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 1);
+        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.SHOWN);
         getController().performAccessibilityShortcut();
 
         verifyZeroInteractions(mAlertDialogBuilder, mAlertDialog);
@@ -463,10 +530,10 @@
                 frameworkFeatureMap =
                 AccessibilityShortcutController.getFrameworkShortcutFeaturesMap();
 
-        assertTrue(frameworkFeatureMap.containsKey(COLOR_INVERSION_COMPONENT_NAME));
-        assertTrue(frameworkFeatureMap.containsKey(DALTONIZER_COMPONENT_NAME));
-        assertTrue(frameworkFeatureMap.containsKey(REDUCE_BRIGHT_COLORS_COMPONENT_NAME));
-        assertTrue(frameworkFeatureMap.containsKey(ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME));
+        assertThat(frameworkFeatureMap).containsKey(COLOR_INVERSION_COMPONENT_NAME);
+        assertThat(frameworkFeatureMap).containsKey(DALTONIZER_COMPONENT_NAME);
+        assertThat(frameworkFeatureMap).containsKey(REDUCE_BRIGHT_COLORS_COMPONENT_NAME);
+        assertThat(frameworkFeatureMap).containsKey(ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME);
     }
 
     @Test
@@ -477,7 +544,7 @@
                 frameworkFeatureMap =
                 AccessibilityShortcutController.getFrameworkShortcutFeaturesMap();
 
-        assertTrue(frameworkFeatureMap.containsKey(ONE_HANDED_COMPONENT_NAME));
+        assertThat(frameworkFeatureMap).containsKey(ONE_HANDED_COMPONENT_NAME);
     }
 
     @Test
@@ -488,7 +555,7 @@
                 frameworkFeatureMap =
                 AccessibilityShortcutController.getFrameworkShortcutFeaturesMap();
 
-        assertFalse(frameworkFeatureMap.containsKey(ONE_HANDED_COMPONENT_NAME));
+        assertThat(frameworkFeatureMap).doesNotContainKey(ONE_HANDED_COMPONENT_NAME);
     }
 
     @Test
@@ -497,7 +564,8 @@
         configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
         configureValidShortcutService();
         when(mServiceInfo.loadSummary(any())).thenReturn(null);
-        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 1);
+        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.SHOWN);
         getController().performAccessibilityShortcut();
         verify(mAccessibilityManagerService).performAccessibilityShortcut(null);
     }
@@ -507,7 +575,8 @@
             throws Exception {
         configureShortcutEnabled(ENABLED_EXCEPT_LOCK_SCREEN);
         configureFirstFrameworkFeature();
-        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 1);
+        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.SHOWN);
         getController().performAccessibilityShortcut();
 
         verifyZeroInteractions(mToast);
@@ -522,7 +591,8 @@
         configureApplicationTargetSdkVersion(Build.VERSION_CODES.R);
         configureRequestAccessibilityButton();
         configureEnabledService();
-        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 1);
+        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.SHOWN);
         getController().performAccessibilityShortcut();
 
         verifyZeroInteractions(mToast);
@@ -537,7 +607,8 @@
         configureTtsSpokenPromptEnabled();
         configureHandlerCallbackInvocation();
         AccessibilityShortcutController accessibilityShortcutController = getController();
-        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0);
+        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.NOT_SHOWN);
         accessibilityShortcutController.performAccessibilityShortcut();
 
         verify(mAlertDialog).show();
@@ -562,7 +633,8 @@
         configureTtsSpokenPromptEnabled();
         configureHandlerCallbackInvocation();
         AccessibilityShortcutController accessibilityShortcutController = getController();
-        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0);
+        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.NOT_SHOWN);
         accessibilityShortcutController.performAccessibilityShortcut();
 
         verify(mAlertDialog).show();
@@ -582,7 +654,8 @@
         configureTtsSpokenPromptEnabled();
         configureHandlerCallbackInvocation();
         AccessibilityShortcutController accessibilityShortcutController = getController();
-        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN, 0);
+        Settings.Secure.putInt(mContentResolver, ACCESSIBILITY_SHORTCUT_DIALOG_SHOWN,
+                AccessibilityShortcutController.DialogStatus.NOT_SHOWN);
         Set<String> features = new HashSet<>();
         features.add(TextToSpeech.Engine.KEY_FEATURE_NOT_INSTALLED);
         doReturn(features, Collections.emptySet()).when(mVoice).getFeatures();
@@ -681,4 +754,13 @@
         accessibilityShortcutController.mFrameworkObjectProvider = mFrameworkObjectProvider;
         return accessibilityShortcutController;
     }
+
+    private void configureDefaultAccessibilityService() throws Exception {
+        when(mAccessibilityManagerService
+                .getAccessibilityShortcutTargets(ACCESSIBILITY_SHORTCUT_KEY))
+                .thenReturn(Collections.singletonList(SERVICE_NAME_STRING));
+
+        when(mResources.getString(R.string.config_defaultAccessibilityService)).thenReturn(
+                SERVICE_NAME_STRING);
+    }
 }
diff --git a/core/tests/coretests/src/com/android/internal/accessibility/TEST_MAPPING b/core/tests/coretests/src/com/android/internal/accessibility/TEST_MAPPING
new file mode 100644
index 0000000..1c67399
--- /dev/null
+++ b/core/tests/coretests/src/com/android/internal/accessibility/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+  "imports": [
+    {
+      "path": "frameworks/base/services/accessibility/TEST_MAPPING"
+    }
+  ]
+}
diff --git a/core/tests/coretests/src/com/android/internal/inputmethod/OWNERS b/core/tests/coretests/src/com/android/internal/inputmethod/OWNERS
index 5deb2ce..cbd94ba 100644
--- a/core/tests/coretests/src/com/android/internal/inputmethod/OWNERS
+++ b/core/tests/coretests/src/com/android/internal/inputmethod/OWNERS
@@ -1 +1,2 @@
+# Bug component: 34867
 include /core/java/android/view/inputmethod/OWNERS
diff --git a/core/tests/coretests/src/com/android/internal/os/CpuScalingPolicyReaderTest.java b/core/tests/coretests/src/com/android/internal/os/CpuScalingPolicyReaderTest.java
new file mode 100644
index 0000000..7f054d1
--- /dev/null
+++ b/core/tests/coretests/src/com/android/internal/os/CpuScalingPolicyReaderTest.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.os;
+
+import static androidx.test.InstrumentationRegistry.getContext;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.os.FileUtils;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.File;
+import java.io.IOException;
+
+@RunWith(AndroidJUnit4.class)
+public class CpuScalingPolicyReaderTest {
+    private CpuScalingPolicyReader mCpuScalingPolicyReader;
+
+    @Before
+    public void setup() throws IOException {
+        File testDir = getContext().getDir("test", Context.MODE_PRIVATE);
+        FileUtils.deleteContents(testDir);
+
+        File policy0 = new File(testDir, "policy0");
+        FileUtils.createDir(policy0);
+        FileUtils.stringToFile(new File(policy0, "related_cpus"), "0 2 7");
+        FileUtils.stringToFile(new File(policy0, "scaling_available_frequencies"), "1234 9876");
+
+        File policy5 = new File(testDir, "policy5");
+        FileUtils.createDir(policy5);
+        FileUtils.stringToFile(new File(policy5, "related_cpus"), "3 6\n");
+        FileUtils.stringToFile(new File(policy5, "scaling_available_frequencies"), "1234 5678\n");
+        FileUtils.stringToFile(new File(policy5, "scaling_boost_frequencies"), "9998 9999\n");
+
+        File policy7 = new File(testDir, "policy7");
+        FileUtils.createDir(policy7);
+        FileUtils.stringToFile(new File(policy7, "related_cpus"), "8\n");
+        FileUtils.stringToFile(new File(policy7, "cpuinfo_cur_freq"), "1000000");
+
+        File policy9 = new File(testDir, "policy9");
+        FileUtils.createDir(policy9);
+        FileUtils.stringToFile(new File(policy9, "related_cpus"), "42");
+
+        File policy999 = new File(testDir, "policy999");
+        FileUtils.createDir(policy999);
+
+        mCpuScalingPolicyReader = new CpuScalingPolicyReader(testDir.getPath());
+    }
+
+    @Test
+    public void readFromSysFs() {
+        CpuScalingPolicies info = mCpuScalingPolicyReader.read();
+        assertThat(info.getPolicies()).isEqualTo(new int[]{0, 5, 7, 9});
+        assertThat(info.getRelatedCpus(0)).isEqualTo(new int[]{0, 2, 7});
+        assertThat(info.getFrequencies(0)).isEqualTo(new int[]{1234, 9876});
+        assertThat(info.getRelatedCpus(5)).isEqualTo(new int[]{3, 6});
+        assertThat(info.getFrequencies(5)).isEqualTo(new int[]{1234, 5678, 9998, 9999});
+        assertThat(info.getRelatedCpus(7)).isEqualTo(new int[]{8});
+        assertThat(info.getFrequencies(7)).isEqualTo(new int[]{1000000});
+        assertThat(info.getRelatedCpus(9)).isEqualTo(new int[]{42});
+        assertThat(info.getFrequencies(9)).isEqualTo(new int[]{0});     // Unknown
+        assertThat(info.getScalingStepCount()).isEqualTo(8);
+    }
+}
diff --git a/core/tests/coretests/src/com/android/internal/os/KernelCpuUidFreqTimeReaderTest.java b/core/tests/coretests/src/com/android/internal/os/KernelCpuUidFreqTimeReaderTest.java
index c60a6d6..783f264 100644
--- a/core/tests/coretests/src/com/android/internal/os/KernelCpuUidFreqTimeReaderTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/KernelCpuUidFreqTimeReaderTest.java
@@ -18,7 +18,6 @@
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.when;
@@ -100,63 +99,6 @@
     }
 
     @Test
-    public void testReadFreqs_perClusterTimesNotAvailable() throws Exception {
-        final long[][] freqs = {
-                {1, 12, 123, 1234},
-                {1, 12, 123, 23, 123, 1234, 12345, 123456},
-                {1, 12, 123, 23, 123, 1234, 12345, 123456, 12, 123, 12345},
-                {1, 12, 123, 23, 2345, 234567}
-        };
-        final int[] numClusters = {2, 2, 3, 1};
-        final int[][] numFreqs = {{3, 6}, {4, 5}, {3, 5, 4}, {3}};
-        for (int i = 0; i < freqs.length; ++i) {
-            mReader = new KernelCpuUidFreqTimeReader(mTestFile.getAbsolutePath(),
-                    new KernelCpuProcStringReader(mTestFile.getAbsolutePath()), mBpfMapReader, false);
-            setCpuClusterFreqs(numClusters[i], numFreqs[i]);
-            setFreqs(freqs[i]);
-            long[] actualFreqs = mReader.readFreqs(mPowerProfile);
-            assertArrayEquals(freqs[i], actualFreqs);
-            final String errMsg = String.format("Freqs=%s, nClusters=%d, nFreqs=%s",
-                    Arrays.toString(freqs[i]), numClusters[i], Arrays.toString(numFreqs[i]));
-            assertFalse(errMsg, mReader.perClusterTimesAvailable());
-
-            // Verify that a second call won't re-read the freqs
-            clearFreqsAndData();
-            actualFreqs = mReader.readFreqs(mPowerProfile);
-            assertArrayEquals(freqs[i], actualFreqs);
-            assertFalse(errMsg, mReader.perClusterTimesAvailable());
-        }
-    }
-
-    @Test
-    public void testReadFreqs_perClusterTimesAvailable() throws Exception {
-        final long[][] freqs = {
-                {1, 12, 123, 1234},
-                {1, 12, 123, 23, 123, 1234, 12345, 123456},
-                {1, 12, 123, 23, 123, 1234, 12345, 123456, 12, 123, 12345, 1234567}
-        };
-        final int[] numClusters = {1, 2, 3};
-        final int[][] numFreqs = {{4}, {3, 5}, {3, 5, 4}};
-        for (int i = 0; i < freqs.length; ++i) {
-            mReader = new KernelCpuUidFreqTimeReader(mTestFile.getAbsolutePath(),
-                    new KernelCpuProcStringReader(mTestFile.getAbsolutePath()), mBpfMapReader, false);
-            setCpuClusterFreqs(numClusters[i], numFreqs[i]);
-            setFreqs(freqs[i]);
-            long[] actualFreqs = mReader.readFreqs(mPowerProfile);
-            assertArrayEquals(freqs[i], actualFreqs);
-            final String errMsg = String.format("Freqs=%s, nClusters=%d, nFreqs=%s",
-                    Arrays.toString(freqs[i]), numClusters[i], Arrays.toString(numFreqs[i]));
-            assertTrue(errMsg, mReader.perClusterTimesAvailable());
-
-            // Verify that a second call won't re-read the freqs
-            clearFreqsAndData();
-            actualFreqs = mReader.readFreqs(mPowerProfile);
-            assertArrayEquals(freqs[i], actualFreqs);
-            assertTrue(errMsg, mReader.perClusterTimesAvailable());
-        }
-    }
-
-    @Test
     public void testReadDelta() throws Exception {
         final long[] freqs = {110, 123, 145, 167, 289, 997};
         final long[][] times = increaseTime(new long[mUids.length][freqs.length]);
@@ -170,8 +112,6 @@
 
         // Verify that readDelta also reads the frequencies if not already available.
         clearFreqsAndData();
-        long[] actualFreqs = mReader.readFreqs(mPowerProfile);
-        assertArrayEquals(freqs, actualFreqs);
 
         // Verify that a second call will only return deltas.
         mCallback.clear();
@@ -222,8 +162,6 @@
 
         // Verify that readDelta also reads the frequencies if not already available.
         clearFreqsAndData();
-        long[] actualFreqs = mReader.readFreqs(mPowerProfile);
-        assertArrayEquals(freqs, actualFreqs);
 
         // Verify that a second call should still return absolute values
         mCallback.clear();
diff --git a/core/tests/coretests/src/com/android/internal/os/LongArrayMultiStateCounterTest.java b/core/tests/coretests/src/com/android/internal/os/LongArrayMultiStateCounterTest.java
index 516dee7..faccf1a 100644
--- a/core/tests/coretests/src/com/android/internal/os/LongArrayMultiStateCounterTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/LongArrayMultiStateCounterTest.java
@@ -20,6 +20,7 @@
 
 import static org.junit.Assert.assertThrows;
 
+import android.os.BadParcelableException;
 import android.os.Parcel;
 
 import androidx.test.filters.SmallTest;
@@ -163,6 +164,45 @@
     }
 
     @Test
+    public void createFromBadBundle() {
+        Parcel data = Parcel.obtain();
+        int bundleLenPos = data.dataPosition();
+        data.writeInt(0);
+        data.writeInt(0x4C444E42);      // BaseBundle.BUNDLE_MAGIC
+
+        int bundleStart = data.dataPosition();
+
+        data.writeInt(1);
+        data.writeString("key");
+        data.writeInt(4);
+        int lazyValueLenPos = data.dataPosition();
+        data.writeInt(0);
+        int lazyValueStart = data.dataPosition();
+        data.writeString("com.android.internal.os.LongArrayMultiStateCounter");
+
+        // Invalid int16 value
+        data.writeInt(0x10000);     // stateCount
+        data.writeInt(10);          // arrayLength
+        for (int i = 0; i < 0x10000; ++i) {
+            data.writeLong(0);
+        }
+
+        backPatchLength(data, lazyValueLenPos, lazyValueStart);
+        backPatchLength(data, bundleLenPos, bundleStart);
+        data.setDataPosition(0);
+
+        assertThrows(BadParcelableException.class,
+                () -> data.readBundle().getParcelable("key", LongArrayMultiStateCounter.class));
+    }
+
+    private static void backPatchLength(Parcel parcel, int lengthPos, int startPos) {
+        int endPos = parcel.dataPosition();
+        parcel.setDataPosition(lengthPos);
+        parcel.writeInt(endPos - startPos);
+        parcel.setDataPosition(endPos);
+    }
+
+    @Test
     public void combineValues() {
         long[] values = new long[] {0, 1, 2, 3, 42};
         LongArrayMultiStateCounter.LongArrayContainer container =
diff --git a/core/tests/coretests/src/com/android/internal/os/LongMultiStateCounterTest.java b/core/tests/coretests/src/com/android/internal/os/LongMultiStateCounterTest.java
index fc86ebe..3413753 100644
--- a/core/tests/coretests/src/com/android/internal/os/LongMultiStateCounterTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/LongMultiStateCounterTest.java
@@ -20,6 +20,7 @@
 
 import static org.junit.Assert.assertThrows;
 
+import android.os.BadParcelableException;
 import android.os.Parcel;
 
 import androidx.test.filters.SmallTest;
@@ -210,4 +211,42 @@
         assertThrows(RuntimeException.class,
                 () -> LongMultiStateCounter.CREATOR.createFromParcel(parcel));
     }
+
+    @Test
+    public void createFromBadBundle() {
+        Parcel data = Parcel.obtain();
+        int bundleLenPos = data.dataPosition();
+        data.writeInt(0);
+        data.writeInt(0x4C444E42);      // BaseBundle.BUNDLE_MAGIC
+
+        int bundleStart = data.dataPosition();
+
+        data.writeInt(1);
+        data.writeString("key");
+        data.writeInt(4);
+        int lazyValueLenPos = data.dataPosition();
+        data.writeInt(0);
+        int lazyValueStart = data.dataPosition();
+        data.writeString("com.android.internal.os.LongMultiStateCounter");
+
+        // Invalid int16 value
+        data.writeInt(0x10000);     // stateCount
+        for (int i = 0; i < 0x10000; ++i) {
+            data.writeLong(0);
+        }
+
+        backPatchLength(data, lazyValueLenPos, lazyValueStart);
+        backPatchLength(data, bundleLenPos, bundleStart);
+        data.setDataPosition(0);
+
+        assertThrows(BadParcelableException.class,
+                () -> data.readBundle().getParcelable("key", LongMultiStateCounter.class));
+    }
+
+    private static void backPatchLength(Parcel parcel, int lengthPos, int startPos) {
+        int endPos = parcel.dataPosition();
+        parcel.setDataPosition(lengthPos);
+        parcel.writeInt(endPos - startPos);
+        parcel.setDataPosition(endPos);
+    }
 }
diff --git a/core/tests/coretests/src/com/android/internal/os/PowerProfileTest.java b/core/tests/coretests/src/com/android/internal/os/PowerProfileTest.java
index 6a3d379..8fa6376 100644
--- a/core/tests/coretests/src/com/android/internal/os/PowerProfileTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/PowerProfileTest.java
@@ -30,6 +30,7 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.XmlResourceParser;
+import android.util.SparseArray;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.SmallTest;
@@ -71,18 +72,13 @@
     public void testPowerProfile() {
         mProfile.forceInitForTesting(mContext, R.xml.power_profile_test);
 
-        assertEquals(2, mProfile.getNumCpuClusters());
-        assertEquals(4, mProfile.getNumCoresInCpuCluster(0));
-        assertEquals(4, mProfile.getNumCoresInCpuCluster(1));
         assertEquals(5.0, mProfile.getAveragePower(PowerProfile.POWER_CPU_SUSPEND));
         assertEquals(1.11, mProfile.getAveragePower(PowerProfile.POWER_CPU_IDLE));
         assertEquals(2.55, mProfile.getAveragePower(PowerProfile.POWER_CPU_ACTIVE));
-        assertEquals(2.11, mProfile.getAveragePowerForCpuCluster(0));
-        assertEquals(2.22, mProfile.getAveragePowerForCpuCluster(1));
-        assertEquals(3, mProfile.getNumSpeedStepsInCpuCluster(0));
-        assertEquals(30.0, mProfile.getAveragePowerForCpuCore(0, 2));
-        assertEquals(4, mProfile.getNumSpeedStepsInCpuCluster(1));
-        assertEquals(60.0, mProfile.getAveragePowerForCpuCore(1, 3));
+        assertEquals(2.11, mProfile.getAveragePowerForCpuScalingPolicy(0));
+        assertEquals(2.22, mProfile.getAveragePowerForCpuScalingPolicy(3));
+        assertEquals(30.0, mProfile.getAveragePowerForCpuScalingStep(0, 2));
+        assertEquals(60.0, mProfile.getAveragePowerForCpuScalingStep(3, 3));
         assertEquals(3000.0, mProfile.getBatteryCapacity());
         assertEquals(0.5,
                 mProfile.getAveragePowerForOrdinal(POWER_GROUP_DISPLAY_AMBIENT, 0));
@@ -130,6 +126,23 @@
                         | ModemPowerProfile.MODEM_DRAIN_TYPE_TX
                         | ModemPowerProfile.MODEM_TX_LEVEL_4));
     }
+    @Test
+    public void testPowerProfile_legacyCpuConfig() {
+        // This power profile has per-cluster data, rather than per-policy
+        mProfile.forceInitForTesting(mContext, R.xml.power_profile_test_cpu_legacy);
+
+        assertEquals(2.11, mProfile.getAveragePowerForCpuScalingPolicy(0));
+        assertEquals(2.22, mProfile.getAveragePowerForCpuScalingPolicy(4));
+        assertEquals(30.0, mProfile.getAveragePowerForCpuScalingStep(0, 2));
+        assertEquals(60.0, mProfile.getAveragePowerForCpuScalingStep(4, 3));
+        assertEquals(3000.0, mProfile.getBatteryCapacity());
+        assertEquals(0.5,
+                mProfile.getAveragePowerForOrdinal(POWER_GROUP_DISPLAY_AMBIENT, 0));
+        assertEquals(100.0,
+                mProfile.getAveragePowerForOrdinal(POWER_GROUP_DISPLAY_SCREEN_ON, 0));
+        assertEquals(800.0,
+                mProfile.getAveragePowerForOrdinal(POWER_GROUP_DISPLAY_SCREEN_FULL, 0));
+    }
 
     @Test
     public void testModemPowerProfile_defaultRat() throws Exception {
@@ -524,15 +537,10 @@
         return null;
     }
 
-    private void assertEquals(int expected, int actual) {
-        Assert.assertEquals(expected, actual);
-    }
-
     private void assertEquals(double expected, double actual) {
         Assert.assertEquals(expected, actual, 0.1);
     }
 
-
     @Test
     public void powerBrackets_specifiedInPowerProfile() {
         mProfile.forceInitForTesting(mContext, R.xml.power_profile_test_power_brackets);
@@ -541,31 +549,40 @@
         int cpuPowerBracketCount = mProfile.getCpuPowerBracketCount();
         assertThat(cpuPowerBracketCount).isEqualTo(2);
         assertThat(new int[]{
-                mProfile.getPowerBracketForCpuCore(0, 0),
-                mProfile.getPowerBracketForCpuCore(1, 0),
-                mProfile.getPowerBracketForCpuCore(1, 1),
+                mProfile.getCpuPowerBracketForScalingStep(0, 0),
+                mProfile.getCpuPowerBracketForScalingStep(4, 0),
+                mProfile.getCpuPowerBracketForScalingStep(4, 1),
         }).isEqualTo(new int[]{1, 1, 0});
     }
 
     @Test
     public void powerBrackets_automatic() {
         mProfile.forceInitForTesting(mContext, R.xml.power_profile_test);
+        CpuScalingPolicies scalingPolicies = new CpuScalingPolicies(
+                new SparseArray<>() {{
+                    put(0, new int[]{0, 1, 2});
+                    put(3, new int[]{3, 4});
+                }},
+                new SparseArray<>() {{
+                    put(0, new int[]{300000, 1000000, 2000000});
+                    put(3, new int[]{300000, 1000000, 2500000, 3000000});
+                }});
 
         assertThat(mProfile.getCpuPowerBracketCount()).isEqualTo(3);
-        assertThat(mProfile.getCpuPowerBracketDescription(0))
+        assertThat(mProfile.getCpuPowerBracketDescription(scalingPolicies, 0))
                 .isEqualTo("0/300(10.0)");
-        assertThat(mProfile.getCpuPowerBracketDescription(1))
-                .isEqualTo("0/1000(20.0), 0/2000(30.0), 1/300(25.0)");
-        assertThat(mProfile.getCpuPowerBracketDescription(2))
-                .isEqualTo("1/1000(35.0), 1/2500(50.0), 1/3000(60.0)");
+        assertThat(mProfile.getCpuPowerBracketDescription(scalingPolicies, 1))
+                .isEqualTo("0/1000(20.0), 0/2000(30.0), 3/300(25.0)");
+        assertThat(mProfile.getCpuPowerBracketDescription(scalingPolicies, 2))
+                .isEqualTo("3/1000(35.0), 3/2500(50.0), 3/3000(60.0)");
         assertThat(new int[]{
-                mProfile.getPowerBracketForCpuCore(0, 0),
-                mProfile.getPowerBracketForCpuCore(0, 1),
-                mProfile.getPowerBracketForCpuCore(0, 2),
-                mProfile.getPowerBracketForCpuCore(1, 0),
-                mProfile.getPowerBracketForCpuCore(1, 1),
-                mProfile.getPowerBracketForCpuCore(1, 2),
-                mProfile.getPowerBracketForCpuCore(1, 3),
+                mProfile.getCpuPowerBracketForScalingStep(0, 0),
+                mProfile.getCpuPowerBracketForScalingStep(0, 1),
+                mProfile.getCpuPowerBracketForScalingStep(0, 2),
+                mProfile.getCpuPowerBracketForScalingStep(3, 0),
+                mProfile.getCpuPowerBracketForScalingStep(3, 1),
+                mProfile.getCpuPowerBracketForScalingStep(3, 2),
+                mProfile.getCpuPowerBracketForScalingStep(3, 3),
         }).isEqualTo(new int[]{0, 1, 1, 1, 2, 2, 2});
     }
 
@@ -576,13 +593,13 @@
 
         assertThat(mProfile.getCpuPowerBracketCount()).isEqualTo(7);
         assertThat(new int[]{
-                mProfile.getPowerBracketForCpuCore(0, 0),
-                mProfile.getPowerBracketForCpuCore(0, 1),
-                mProfile.getPowerBracketForCpuCore(0, 2),
-                mProfile.getPowerBracketForCpuCore(1, 0),
-                mProfile.getPowerBracketForCpuCore(1, 1),
-                mProfile.getPowerBracketForCpuCore(1, 2),
-                mProfile.getPowerBracketForCpuCore(1, 3),
+                mProfile.getCpuPowerBracketForScalingStep(0, 0),
+                mProfile.getCpuPowerBracketForScalingStep(0, 1),
+                mProfile.getCpuPowerBracketForScalingStep(0, 2),
+                mProfile.getCpuPowerBracketForScalingStep(3, 0),
+                mProfile.getCpuPowerBracketForScalingStep(3, 1),
+                mProfile.getCpuPowerBracketForScalingStep(3, 2),
+                mProfile.getCpuPowerBracketForScalingStep(3, 3),
         }).isEqualTo(new int[]{0, 1, 2, 3, 4, 5, 6});
     }
 }
diff --git a/core/tests/coretests/src/com/android/internal/util/FakeLatencyTrackerTest.java b/core/tests/coretests/src/com/android/internal/util/FakeLatencyTrackerTest.java
index e6f10ad..3946cdf 100644
--- a/core/tests/coretests/src/com/android/internal/util/FakeLatencyTrackerTest.java
+++ b/core/tests/coretests/src/com/android/internal/util/FakeLatencyTrackerTest.java
@@ -16,14 +16,19 @@
 
 package com.android.internal.util;
 
+import static android.provider.DeviceConfig.NAMESPACE_LATENCY_TRACKER;
+
 import static com.android.internal.util.FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_SHOW_VOICE_INTERACTION;
 import static com.android.internal.util.FrameworkStatsLog.UI_ACTION_LATENCY_REPORTED;
 import static com.android.internal.util.LatencyTracker.ACTION_SHOW_VOICE_INTERACTION;
 
 import static com.google.common.truth.Truth.assertThat;
 
+import android.provider.DeviceConfig;
+
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -40,12 +45,22 @@
 public class FakeLatencyTrackerTest {
 
     private FakeLatencyTracker mFakeLatencyTracker;
+    private int mInitialSyncDisabledMode;
 
     @Before
     public void setUp() throws Exception {
+        mInitialSyncDisabledMode = DeviceConfig.getSyncDisabledMode();
+        DeviceConfig.setSyncDisabledMode(DeviceConfig.SYNC_DISABLED_MODE_NONE);
         mFakeLatencyTracker = FakeLatencyTracker.create();
     }
 
+    @After
+    public void tearDown() throws Exception {
+        DeviceConfig.setProperties(
+                new DeviceConfig.Properties.Builder(NAMESPACE_LATENCY_TRACKER).build());
+        DeviceConfig.setSyncDisabledMode(mInitialSyncDisabledMode);
+    }
+
     @Test
     public void testForceEnabled() throws Exception {
         mFakeLatencyTracker.logAction(ACTION_SHOW_VOICE_INTERACTION, 1234);
diff --git a/core/tests/coretests/src/com/android/internal/util/LatencyTrackerTest.java b/core/tests/coretests/src/com/android/internal/util/LatencyTrackerTest.java
index 584ad20..f24894e 100644
--- a/core/tests/coretests/src/com/android/internal/util/LatencyTrackerTest.java
+++ b/core/tests/coretests/src/com/android/internal/util/LatencyTrackerTest.java
@@ -58,15 +58,21 @@
     // Fake is used because it tests the real logic of LatencyTracker, and it only fakes the
     // outcomes (PerfettoTrigger and FrameworkStatsLog).
     private FakeLatencyTracker mLatencyTracker;
+    private int mInitialSyncDisabledMode;
 
     @Before
     public void setUp() throws Exception {
+        mInitialSyncDisabledMode = DeviceConfig.getSyncDisabledMode();
+        DeviceConfig.setSyncDisabledMode(DeviceConfig.SYNC_DISABLED_MODE_NONE);
         mLatencyTracker = FakeLatencyTracker.create();
     }
 
     @After
-    public void tearDown() {
+    public void tearDown() throws Exception {
         mLatencyTracker.stopListeningForLatencyTrackerConfigChanges();
+        DeviceConfig.setProperties(
+                new DeviceConfig.Properties.Builder(NAMESPACE_LATENCY_TRACKER).build());
+        DeviceConfig.setSyncDisabledMode(mInitialSyncDisabledMode);
     }
 
     @Test
diff --git a/core/tests/coretests/src/com/android/internal/widget/LockscreenCredentialTest.java b/core/tests/coretests/src/com/android/internal/widget/LockscreenCredentialTest.java
index a47868d..5692742 100644
--- a/core/tests/coretests/src/com/android/internal/widget/LockscreenCredentialTest.java
+++ b/core/tests/coretests/src/com/android/internal/widget/LockscreenCredentialTest.java
@@ -16,52 +16,71 @@
 
 package com.android.internal.widget;
 
-
 import static com.google.common.truth.Truth.assertThat;
 
-import android.test.AndroidTestCase;
+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.assertTrue;
+import static org.junit.Assert.fail;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
 
 import java.util.Arrays;
 
+@RunWith(AndroidJUnit4.class)
+public class LockscreenCredentialTest {
 
-public class LockscreenCredentialTest extends AndroidTestCase {
+    @Test
+    public void testNoneCredential() {
+        LockscreenCredential none = LockscreenCredential.createNone();
 
-    public void testEmptyCredential() {
-        LockscreenCredential empty = LockscreenCredential.createNone();
+        assertTrue(none.isNone());
+        assertEquals(0, none.size());
+        assertArrayEquals(new byte[0], none.getCredential());
 
-        assertTrue(empty.isNone());
-        assertEquals(0, empty.size());
-        assertNotNull(empty.getCredential());
-
-        assertFalse(empty.isPin());
-        assertFalse(empty.isPassword());
-        assertFalse(empty.isPattern());
+        assertFalse(none.isPin());
+        assertFalse(none.isPassword());
+        assertFalse(none.isPattern());
+        assertFalse(none.hasInvalidChars());
+        none.validateBasicRequirements();
     }
 
+    @Test
     public void testPinCredential() {
         LockscreenCredential pin = LockscreenCredential.createPin("3456");
 
         assertTrue(pin.isPin());
         assertEquals(4, pin.size());
-        assertTrue(Arrays.equals("3456".getBytes(), pin.getCredential()));
+        assertArrayEquals("3456".getBytes(), pin.getCredential());
 
         assertFalse(pin.isNone());
         assertFalse(pin.isPassword());
         assertFalse(pin.isPattern());
+        assertFalse(pin.hasInvalidChars());
+        pin.validateBasicRequirements();
     }
 
+    @Test
     public void testPasswordCredential() {
         LockscreenCredential password = LockscreenCredential.createPassword("password");
 
         assertTrue(password.isPassword());
         assertEquals(8, password.size());
-        assertTrue(Arrays.equals("password".getBytes(), password.getCredential()));
+        assertArrayEquals("password".getBytes(), password.getCredential());
 
         assertFalse(password.isNone());
         assertFalse(password.isPin());
         assertFalse(password.isPattern());
+        assertFalse(password.hasInvalidChars());
+        password.validateBasicRequirements();
     }
 
+    @Test
     public void testPatternCredential() {
         LockscreenCredential pattern = LockscreenCredential.createPattern(Arrays.asList(
                 LockPatternView.Cell.of(0, 0),
@@ -73,13 +92,34 @@
 
         assertTrue(pattern.isPattern());
         assertEquals(5, pattern.size());
-        assertTrue(Arrays.equals("12369".getBytes(), pattern.getCredential()));
+        assertArrayEquals("12369".getBytes(), pattern.getCredential());
 
         assertFalse(pattern.isNone());
         assertFalse(pattern.isPin());
         assertFalse(pattern.isPassword());
+        assertFalse(pattern.hasInvalidChars());
+        pattern.validateBasicRequirements();
     }
 
+    // Constructing a LockscreenCredential with a too-short length, even 0, should not throw an
+    // exception.  This is because LockscreenCredential needs to be able to represent a request to
+    // set a credential that is too short.
+    @Test
+    public void testZeroLengthCredential() {
+        LockscreenCredential credential = LockscreenCredential.createPin("");
+        assertTrue(credential.isPin());
+        assertEquals(0, credential.size());
+
+        credential = createPattern("");
+        assertTrue(credential.isPattern());
+        assertEquals(0, credential.size());
+
+        credential = LockscreenCredential.createPassword("");
+        assertTrue(credential.isPassword());
+        assertEquals(0, credential.size());
+    }
+
+    @Test
     public void testPasswordOrNoneCredential() {
         assertEquals(LockscreenCredential.createNone(),
                 LockscreenCredential.createPasswordOrNone(null));
@@ -89,6 +129,7 @@
                 LockscreenCredential.createPasswordOrNone("abcd"));
     }
 
+    @Test
     public void testPinOrNoneCredential() {
         assertEquals(LockscreenCredential.createNone(),
                 LockscreenCredential.createPinOrNone(null));
@@ -98,6 +139,35 @@
                 LockscreenCredential.createPinOrNone("1357"));
     }
 
+    // Test that passwords containing invalid characters that were incorrectly allowed in
+    // Android 10–14 are still interpreted in the same way, but are not allowed for new passwords.
+    @Test
+    public void testPasswordWithInvalidChars() {
+        // ™ is U+2122, which was truncated to ASCII 0x22 which is double quote.
+        String[] passwords = new String[] { "foo™", "™™™™", "™foo" };
+        String[] equivalentAsciiPasswords = new String[] { "foo\"", "\"\"\"\"", "\"foo" };
+        for (int i = 0; i < passwords.length; i++) {
+            LockscreenCredential credential = LockscreenCredential.createPassword(passwords[i]);
+            assertTrue(credential.hasInvalidChars());
+            assertArrayEquals(equivalentAsciiPasswords[i].getBytes(), credential.getCredential());
+            try {
+                credential.validateBasicRequirements();
+                fail("should not be able to set password with invalid chars");
+            } catch (IllegalArgumentException expected) { }
+        }
+    }
+
+    @Test
+    public void testPinWithInvalidChars() {
+        LockscreenCredential pin = LockscreenCredential.createPin("\n\n\n\n");
+        assertTrue(pin.hasInvalidChars());
+        try {
+            pin.validateBasicRequirements();
+            fail("should not be able to set PIN with invalid chars");
+        } catch (IllegalArgumentException expected) { }
+    }
+
+    @Test
     public void testSanitize() {
         LockscreenCredential password = LockscreenCredential.createPassword("password");
         password.zeroize();
@@ -123,11 +193,16 @@
             fail("Sanitized credential still accessible");
         } catch (IllegalStateException expected) { }
         try {
+            password.hasInvalidChars();
+            fail("Sanitized credential still accessible");
+        } catch (IllegalStateException expected) { }
+        try {
             password.getCredential();
             fail("Sanitized credential still accessible");
         } catch (IllegalStateException expected) { }
     }
 
+    @Test
     public void testEquals() {
         assertEquals(LockscreenCredential.createNone(), LockscreenCredential.createNone());
         assertEquals(LockscreenCredential.createPassword("1234"),
@@ -136,34 +211,40 @@
                 LockscreenCredential.createPin("4321"));
         assertEquals(createPattern("1234"), createPattern("1234"));
 
-        assertNotSame(LockscreenCredential.createPassword("1234"),
+        assertNotEquals(LockscreenCredential.createPassword("1234"),
                 LockscreenCredential.createNone());
-        assertNotSame(LockscreenCredential.createPassword("1234"),
+        assertNotEquals(LockscreenCredential.createPassword("1234"),
                 LockscreenCredential.createPassword("4321"));
-        assertNotSame(LockscreenCredential.createPassword("1234"),
+        assertNotEquals(LockscreenCredential.createPassword("1234"),
                 createPattern("1234"));
-        assertNotSame(LockscreenCredential.createPassword("1234"),
+        assertNotEquals(LockscreenCredential.createPassword("1234"),
                 LockscreenCredential.createPin("1234"));
 
-        assertNotSame(LockscreenCredential.createPin("1111"),
+        assertNotEquals(LockscreenCredential.createPin("1111"),
                 LockscreenCredential.createNone());
-        assertNotSame(LockscreenCredential.createPin("1111"),
+        assertNotEquals(LockscreenCredential.createPin("1111"),
                 LockscreenCredential.createPin("2222"));
-        assertNotSame(LockscreenCredential.createPin("1111"),
+        assertNotEquals(LockscreenCredential.createPin("1111"),
                 createPattern("1111"));
-        assertNotSame(LockscreenCredential.createPin("1111"),
+        assertNotEquals(LockscreenCredential.createPin("1111"),
                 LockscreenCredential.createPassword("1111"));
 
-        assertNotSame(createPattern("5678"),
+        assertNotEquals(createPattern("5678"),
                 LockscreenCredential.createNone());
-        assertNotSame(createPattern("5678"),
+        assertNotEquals(createPattern("5678"),
                 createPattern("1234"));
-        assertNotSame(createPattern("5678"),
+        assertNotEquals(createPattern("5678"),
                 LockscreenCredential.createPassword("5678"));
-        assertNotSame(createPattern("5678"),
+        assertNotEquals(createPattern("5678"),
                 LockscreenCredential.createPin("5678"));
+
+        // Test that mHasInvalidChars is compared.  To do this, compare two passwords that map to
+        // the same byte[] (due to the truncation bug) but different values of mHasInvalidChars.
+        assertNotEquals(LockscreenCredential.createPassword("™™™™"),
+                LockscreenCredential.createPassword("\"\"\"\""));
     }
 
+    @Test
     public void testDuplicate() {
         LockscreenCredential credential;
 
@@ -175,8 +256,13 @@
         assertEquals(credential, credential.duplicate());
         credential = createPattern("5678");
         assertEquals(credential, credential.duplicate());
+
+        // Test that mHasInvalidChars is duplicated.
+        credential = LockscreenCredential.createPassword("™™™™");
+        assertEquals(credential, credential.duplicate());
     }
 
+    @Test
     public void testPasswordToHistoryHash() {
         String password = "1234";
         LockscreenCredential credential = LockscreenCredential.createPassword(password);
@@ -193,6 +279,7 @@
                 .isEqualTo(expectedHash);
     }
 
+    @Test
     public void testPasswordToHistoryHashInvalidInput() {
         String password = "1234";
         LockscreenCredential credential = LockscreenCredential.createPassword(password);
@@ -221,6 +308,7 @@
                 .isNull();
     }
 
+    @Test
     public void testLegacyPasswordToHash() {
         String password = "1234";
         String salt = "6d5331dd120077a0";
@@ -233,6 +321,7 @@
                 .isEqualTo(expectedHash);
     }
 
+    @Test
     public void testLegacyPasswordToHashInvalidInput() {
         String password = "1234";
         String salt = "6d5331dd120077a0";
diff --git a/core/tests/ddm/Android.bp b/core/tests/ddm/Android.bp
new file mode 100644
index 0000000..818ea8b
--- /dev/null
+++ b/core/tests/ddm/Android.bp
@@ -0,0 +1,41 @@
+//
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "frameworks_base_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["frameworks_base_license"],
+}
+
+java_test_host {
+    name: "frameworks-base-ddm-unittests",
+    srcs: [
+        "java/android/os/DdmSyncStateTest.java",
+        ":framework-android-os-unit-testable-src",
+    ],
+    static_libs: [
+        "junit",
+    ],
+    test_options: {
+        unit_test: true,
+    },
+    test_suites: [
+        "cts",
+    ],
+}
diff --git a/core/tests/ddm/java/android/os/DdmSyncStateTest.java b/core/tests/ddm/java/android/os/DdmSyncStateTest.java
new file mode 100644
index 0000000..8274ce4
--- /dev/null
+++ b/core/tests/ddm/java/android/os/DdmSyncStateTest.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.os.test;
+
+import android.os.DdmSyncState;
+import android.os.DdmSyncState.Stage;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Test DdmSyncState, the Android app stage boot sync system for DDM Client.
+ */
+
+public class DdmSyncStateTest {
+
+    @Test
+    public void testNoCycle() {
+        DdmSyncState.reset();
+        try {
+            DdmSyncState.next(Stage.Attach);
+            DdmSyncState.next(Stage.Bind);
+            DdmSyncState.next(Stage.Named);
+            DdmSyncState.next(Stage.Debugger);
+            DdmSyncState.next(Stage.Running);
+
+            // Cycling back here which is not allowed
+            DdmSyncState.next(Stage.Attach);
+            Assert.fail("Going back to attach should have failed");
+        } catch (IllegalStateException ignored) {
+
+        }
+    }
+
+    @Test
+    public void testDebuggerFlow() {
+        DdmSyncState.reset();
+        DdmSyncState.next(Stage.Attach);
+        DdmSyncState.next(Stage.Bind);
+        DdmSyncState.next(Stage.Named);
+        DdmSyncState.next(Stage.Debugger);
+        DdmSyncState.next(Stage.Running);
+        Assert.assertEquals(Stage.Running, DdmSyncState.getStage());
+
+    }
+
+    @Test
+    public void testNoDebugFlow() {
+        DdmSyncState.reset();
+        DdmSyncState.next(Stage.Attach);
+        DdmSyncState.next(Stage.Bind);
+        DdmSyncState.next(Stage.Named);
+        // Notice how Stage.Debugger stage is skipped
+        DdmSyncState.next(Stage.Running);
+        Assert.assertEquals(Stage.Running, DdmSyncState.getStage());
+    }
+}
diff --git a/core/tests/mockingcoretests/Android.bp b/core/tests/mockingcoretests/Android.bp
index 741e535..fde7c08 100644
--- a/core/tests/mockingcoretests/Android.bp
+++ b/core/tests/mockingcoretests/Android.bp
@@ -40,7 +40,6 @@
         "platform-test-annotations",
         "truth-prebuilt",
         "testables",
-        "ub-uiautomator",
     ],
 
     libs: [
diff --git a/core/tests/packagemonitortests/Android.bp b/core/tests/packagemonitortests/Android.bp
new file mode 100644
index 0000000..453b476
--- /dev/null
+++ b/core/tests/packagemonitortests/Android.bp
@@ -0,0 +1,41 @@
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package {
+    // 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_test {
+    name: "FrameworksCorePackageMonitorTests",
+    srcs: ["src/**/*.java"],
+    static_libs: [
+        "androidx.test.runner",
+        "compatibility-device-util-axt",
+        "frameworks-base-testutils",
+        "mockito-target-minus-junit4",
+        "truth-prebuilt",
+    ],
+    libs: ["android.test.runner"],
+    platform_apis: true,
+    certificate: "platform",
+    test_suites: ["device-tests"],
+    data: [
+        ":TestVisibilityApp",
+    ],
+}
diff --git a/core/tests/packagemonitortests/AndroidManifest.xml b/core/tests/packagemonitortests/AndroidManifest.xml
new file mode 100644
index 0000000..500a3e1
--- /dev/null
+++ b/core/tests/packagemonitortests/AndroidManifest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.frameworks.packagemonitor">
+
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation
+            android:name="androidx.test.runner.AndroidJUnitRunner"
+            android:targetPackage="com.android.frameworks.packagemonitor"
+            android:label="Frameworks PackageMonitor Core Tests" />
+</manifest>
diff --git a/core/tests/packagemonitortests/AndroidTest.xml b/core/tests/packagemonitortests/AndroidTest.xml
new file mode 100644
index 0000000..898dc18
--- /dev/null
+++ b/core/tests/packagemonitortests/AndroidTest.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<configuration description="Runs Frameworks Core Tests.">
+    <option name="test-suite-tag" value="apct" />
+    <option name="test-suite-tag" value="apct-instrumentation" />
+
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="FrameworksCorePackageMonitorTests.apk" />
+    </target_preparer>
+
+    <!-- Create place to store apks -->
+    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
+        <option name="run-command" value="mkdir -p /data/local/tmp/contenttests" />
+        <option name="teardown-command" value="rm -rf /data/local/tmp/contenttests"/>
+    </target_preparer>
+    <!-- Load additional APKs onto device -->
+    <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
+        <option name="push" value="TestVisibilityApp.apk->/data/local/tmp/contenttests/TestVisibilityApp.apk" />
+        <option name="cleanup" value="true" />
+    </target_preparer>
+
+    <option name="test-tag" value="FrameworksCorePackageMonitorTests" />
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="com.android.frameworks.packagemonitor" />
+        <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
+        <option name="hidden-api-checks" value="false"/>
+    </test>
+</configuration>
diff --git a/core/tests/packagemonitortests/src/com/android/internal/content/PackageMonitorTest.java b/core/tests/packagemonitortests/src/com/android/internal/content/PackageMonitorTest.java
new file mode 100644
index 0000000..e082c25
--- /dev/null
+++ b/core/tests/packagemonitortests/src/com/android/internal/content/PackageMonitorTest.java
@@ -0,0 +1,347 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.content;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.UserHandle;
+
+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;
+
+/**
+ * A unit test for PackageMonitor implementation.
+ */
+@RunWith(AndroidJUnit4.class)
+public class PackageMonitorTest {
+    private static final String FAKE_PACKAGE_NAME = "com.android.internal.content.fakeapp";
+    private static final int FAKE_PACKAGE_UID = 123;
+    private static final int FAKE_USER_ID = 0;
+    private static final int WAIT_CALLBACK_CALLED_IN_MS = 300;
+
+    @Mock
+    Context mMockContext;
+    @Mock
+    Handler mMockHandler;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void testPackageMonitorMultipleRegisterThrowsException() throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        spyPackageMonitor.register(mMockContext, UserHandle.ALL, mMockHandler);
+        assertThat(spyPackageMonitor.getRegisteredHandler()).isEqualTo(mMockHandler);
+        verify(mMockContext, times(2)).registerReceiverAsUser(any(), eq(UserHandle.ALL), any(),
+                eq(null), eq(mMockHandler));
+
+        assertThrows(IllegalStateException.class,
+                () -> spyPackageMonitor.register(mMockContext, UserHandle.ALL, mMockHandler));
+    }
+
+    @Test
+    public void testPackageMonitorRegisterMultipleUnRegisterThrowsException() throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        spyPackageMonitor.register(mMockContext, UserHandle.ALL, mMockHandler);
+        spyPackageMonitor.unregister();
+
+        assertThrows(IllegalStateException.class, spyPackageMonitor::unregister);
+    }
+
+    @Test
+    public void testPackageMonitorNotRegisterUnRegisterThrowsException() throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        assertThrows(IllegalStateException.class, spyPackageMonitor::unregister);
+    }
+
+    @Test
+    public void testPackageMonitorDoHandlePackageEventUidRemoved() throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        Intent intent = new Intent(Intent.ACTION_UID_REMOVED);
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, FAKE_USER_ID);
+        intent.putExtra(Intent.EXTRA_UID, FAKE_PACKAGE_UID);
+        spyPackageMonitor.doHandlePackageEvent(intent);
+
+        verify(spyPackageMonitor, times(1)).onBeginPackageChanges();
+        verify(spyPackageMonitor, times(1)).onUidRemoved(eq(FAKE_PACKAGE_UID));
+        verify(spyPackageMonitor, times(1)).onFinishPackageChanges();
+    }
+
+    @Test
+    public void testPackageMonitorDoHandlePackageEventPackageSuspended() throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        Intent intent = new Intent(Intent.ACTION_PACKAGES_SUSPENDED);
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, FAKE_USER_ID);
+        String [] packageList = new String[]{FAKE_PACKAGE_NAME};
+        intent.putExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST, packageList);
+        spyPackageMonitor.doHandlePackageEvent(intent);
+
+        verify(spyPackageMonitor, times(1)).onBeginPackageChanges();
+        verify(spyPackageMonitor, times(1)).onPackagesSuspended(eq(packageList));
+        verify(spyPackageMonitor, times(1)).onSomePackagesChanged();
+        verify(spyPackageMonitor, times(1)).onFinishPackageChanges();
+    }
+
+    @Test
+    public void testPackageMonitorDoHandlePackageEventPackageUnSuspended() throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        Intent intent = new Intent(Intent.ACTION_PACKAGES_UNSUSPENDED);
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, FAKE_USER_ID);
+        String [] packageList = new String[]{FAKE_PACKAGE_NAME};
+        intent.putExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST, packageList);
+        spyPackageMonitor.doHandlePackageEvent(intent);
+
+        verify(spyPackageMonitor, times(1)).onBeginPackageChanges();
+        verify(spyPackageMonitor, times(1)).onPackagesUnsuspended(eq(packageList));
+        verify(spyPackageMonitor, times(1)).onSomePackagesChanged();
+        verify(spyPackageMonitor, times(1)).onFinishPackageChanges();
+    }
+
+    @Test
+    public void testPackageMonitorDoHandlePackageEventUserStop() throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        Intent intent = new Intent(Intent.ACTION_USER_STOPPED);
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, FAKE_USER_ID);
+        spyPackageMonitor.doHandlePackageEvent(intent);
+
+        verify(spyPackageMonitor, times(1)).onBeginPackageChanges();
+        verify(spyPackageMonitor, times(1)).onHandleUserStop(eq(intent), eq(FAKE_USER_ID));
+        verify(spyPackageMonitor, times(1)).onFinishPackageChanges();
+    }
+
+    @Test
+    public void testPackageMonitorDoHandlePackageEventExternalApplicationAvailable()
+            throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        Intent intent = new Intent(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, FAKE_USER_ID);
+        String [] packageList = new String[]{FAKE_PACKAGE_NAME};
+        intent.putExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST, packageList);
+        intent.putExtra(Intent.EXTRA_REPLACING, true);
+        spyPackageMonitor.doHandlePackageEvent(intent);
+
+        verify(spyPackageMonitor, times(1)).onBeginPackageChanges();
+        verify(spyPackageMonitor, times(1)).onPackagesAvailable(eq(packageList));
+        verify(spyPackageMonitor, times(1)).onPackageAppeared(eq(FAKE_PACKAGE_NAME),
+                eq(PackageMonitor.PACKAGE_UPDATING));
+        verify(spyPackageMonitor, times(1)).onSomePackagesChanged();
+        verify(spyPackageMonitor, times(1)).onFinishPackageChanges();
+    }
+
+    @Test
+    public void testPackageMonitorDoHandlePackageEventExternalApplicationUnavailable()
+            throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        Intent intent = new Intent(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, FAKE_USER_ID);
+        String [] packageList = new String[]{FAKE_PACKAGE_NAME};
+        intent.putExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST, packageList);
+        intent.putExtra(Intent.EXTRA_REPLACING, true);
+        spyPackageMonitor.doHandlePackageEvent(intent);
+
+        verify(spyPackageMonitor, times(1)).onBeginPackageChanges();
+        verify(spyPackageMonitor, times(1)).onPackagesUnavailable(eq(packageList));
+        verify(spyPackageMonitor, times(1)).onPackageDisappeared(eq(FAKE_PACKAGE_NAME),
+                eq(PackageMonitor.PACKAGE_UPDATING));
+        verify(spyPackageMonitor, times(1)).onSomePackagesChanged();
+        verify(spyPackageMonitor, times(1)).onFinishPackageChanges();
+    }
+
+    @Test
+    public void testPackageMonitorDoHandlePackageEventPackageRestarted() throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        Intent intent = new Intent(Intent.ACTION_PACKAGE_RESTARTED);
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, FAKE_USER_ID);
+        intent.putExtra(Intent.EXTRA_UID, FAKE_PACKAGE_UID);
+        intent.setData(Uri.fromParts("package", FAKE_PACKAGE_NAME, null));
+        spyPackageMonitor.doHandlePackageEvent(intent);
+
+        verify(spyPackageMonitor, times(1)).onBeginPackageChanges();
+        verify(spyPackageMonitor, times(1)).onHandleForceStop(eq(intent),
+                eq(new String[]{FAKE_PACKAGE_NAME}), eq(FAKE_PACKAGE_UID), eq(true));
+        verify(spyPackageMonitor, times(1)).onFinishPackageChanges();
+    }
+
+    @Test
+    public void testPackageMonitorDoHandlePackageEventPackageQueryRestarted() throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART);
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, FAKE_USER_ID);
+        String [] packageList = new String[]{FAKE_PACKAGE_NAME};
+        intent.putExtra(Intent.EXTRA_PACKAGES, packageList);
+        intent.putExtra(Intent.EXTRA_UID, FAKE_PACKAGE_UID);
+        spyPackageMonitor.doHandlePackageEvent(intent);
+
+        verify(spyPackageMonitor, times(1)).onBeginPackageChanges();
+        verify(spyPackageMonitor, times(1)).onHandleForceStop(eq(intent),
+                eq(packageList), eq(FAKE_PACKAGE_UID), eq(false));
+        verify(spyPackageMonitor, times(1)).onFinishPackageChanges();
+    }
+
+    @Test
+    public void testPackageMonitorDoHandlePackageEventPackageDataClear() throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        Intent intent = new Intent(Intent.ACTION_PACKAGE_DATA_CLEARED);
+        intent.setData(Uri.fromParts("package", FAKE_PACKAGE_NAME, null));
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, FAKE_USER_ID);
+        intent.putExtra(Intent.EXTRA_UID, FAKE_PACKAGE_UID);
+        spyPackageMonitor.doHandlePackageEvent(intent);
+
+        verify(spyPackageMonitor, times(1)).onBeginPackageChanges();
+        verify(spyPackageMonitor, times(1))
+                .onPackageDataCleared(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID));
+        verify(spyPackageMonitor, times(1)).onFinishPackageChanges();
+    }
+
+    @Test
+    public void testPackageMonitorDoHandlePackageEventPackageChanged() throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        Intent intent = new Intent(Intent.ACTION_PACKAGE_CHANGED);
+        intent.setData(Uri.fromParts("package", FAKE_PACKAGE_NAME, null));
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, FAKE_USER_ID);
+        intent.putExtra(Intent.EXTRA_UID, FAKE_PACKAGE_UID);
+        String [] packageList = new String[]{FAKE_PACKAGE_NAME};
+        intent.putExtra(Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST, packageList);
+        spyPackageMonitor.doHandlePackageEvent(intent);
+
+        verify(spyPackageMonitor, times(1)).onBeginPackageChanges();
+        verify(spyPackageMonitor, times(1))
+                .onPackageChanged(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID), eq(packageList));
+        verify(spyPackageMonitor, times(1)).onPackageModified(eq(FAKE_PACKAGE_NAME));
+        verify(spyPackageMonitor, times(1)).onSomePackagesChanged();
+        verify(spyPackageMonitor, times(1)).onFinishPackageChanges();
+    }
+
+    @Test
+    public void testPackageMonitorDoHandlePackageEventPackageRemovedReplacing() throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        Intent intent = new Intent(Intent.ACTION_PACKAGE_REMOVED);
+        intent.setData(Uri.fromParts("package", FAKE_PACKAGE_NAME, null));
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, FAKE_USER_ID);
+        intent.putExtra(Intent.EXTRA_UID, FAKE_PACKAGE_UID);
+        intent.putExtra(Intent.EXTRA_REPLACING, true);
+        intent.putExtra(Intent.EXTRA_REMOVED_FOR_ALL_USERS, true);
+        spyPackageMonitor.doHandlePackageEvent(intent);
+
+        verify(spyPackageMonitor, times(1)).onBeginPackageChanges();
+        verify(spyPackageMonitor, times(1))
+                .onPackageUpdateStarted(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID));
+        verify(spyPackageMonitor, times(1))
+                .onPackageDisappeared(eq(FAKE_PACKAGE_NAME), eq(PackageMonitor.PACKAGE_UPDATING));
+        verify(spyPackageMonitor, times(1)).onFinishPackageChanges();
+    }
+
+    @Test
+    public void testPackageMonitorDoHandlePackageEventPackageRemovedNotReplacing()
+            throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        Intent intent = new Intent(Intent.ACTION_PACKAGE_REMOVED);
+        intent.setData(Uri.fromParts("package", FAKE_PACKAGE_NAME, null));
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, FAKE_USER_ID);
+        intent.putExtra(Intent.EXTRA_UID, FAKE_PACKAGE_UID);
+        intent.putExtra(Intent.EXTRA_REPLACING, false);
+        intent.putExtra(Intent.EXTRA_REMOVED_FOR_ALL_USERS, true);
+        spyPackageMonitor.doHandlePackageEvent(intent);
+
+        verify(spyPackageMonitor, times(1)).onBeginPackageChanges();
+        verify(spyPackageMonitor, times(1))
+                .onPackageRemoved(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID));
+        verify(spyPackageMonitor, times(1))
+                .onPackageRemovedAllUsers(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID));
+        verify(spyPackageMonitor, times(1)).onPackageDisappeared(eq(FAKE_PACKAGE_NAME),
+                eq(PackageMonitor.PACKAGE_PERMANENT_CHANGE));
+        verify(spyPackageMonitor, times(1)).onSomePackagesChanged();
+        verify(spyPackageMonitor, times(1)).onFinishPackageChanges();
+    }
+
+    @Test
+    public void testPackageMonitorDoHandlePackageEventPackageAddReplacing() throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED);
+        intent.setData(Uri.fromParts("package", FAKE_PACKAGE_NAME, null));
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, FAKE_USER_ID);
+        intent.putExtra(Intent.EXTRA_UID, FAKE_PACKAGE_UID);
+        intent.putExtra(Intent.EXTRA_REPLACING, true);
+        spyPackageMonitor.doHandlePackageEvent(intent);
+
+        verify(spyPackageMonitor, times(1)).onBeginPackageChanges();
+        verify(spyPackageMonitor, times(1))
+                .onPackageUpdateFinished(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID));
+        verify(spyPackageMonitor, times(1)).onPackageModified(eq(FAKE_PACKAGE_NAME));
+        verify(spyPackageMonitor, times(1))
+                .onPackageAppeared(eq(FAKE_PACKAGE_NAME), eq(PackageMonitor.PACKAGE_UPDATING));
+        verify(spyPackageMonitor, times(1)).onSomePackagesChanged();
+        verify(spyPackageMonitor, times(1)).onFinishPackageChanges();
+    }
+
+    @Test
+    public void testPackageMonitorDoHandlePackageEventPackageAddNotReplacing() throws Exception {
+        PackageMonitor spyPackageMonitor = spy(new TestPackageMonitor());
+
+        Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED);
+        intent.setData(Uri.fromParts("package", FAKE_PACKAGE_NAME, null));
+        intent.putExtra(Intent.EXTRA_USER_HANDLE, FAKE_USER_ID);
+        intent.putExtra(Intent.EXTRA_UID, FAKE_PACKAGE_UID);
+        intent.putExtra(Intent.EXTRA_REPLACING, false);
+        spyPackageMonitor.doHandlePackageEvent(intent);
+
+        verify(spyPackageMonitor, times(1)).onBeginPackageChanges();
+        verify(spyPackageMonitor, times(1))
+                .onPackageAdded(eq(FAKE_PACKAGE_NAME), eq(FAKE_PACKAGE_UID));
+        verify(spyPackageMonitor, times(1)).onPackageAppeared(eq(FAKE_PACKAGE_NAME),
+                eq(PackageMonitor.PACKAGE_PERMANENT_CHANGE));
+        verify(spyPackageMonitor, times(1)).onSomePackagesChanged();
+        verify(spyPackageMonitor, times(1)).onFinishPackageChanges();
+    }
+
+    public static class TestPackageMonitor extends PackageMonitor {
+    }
+}
diff --git a/core/tests/packagemonitortests/src/com/android/internal/content/PackageMonitorVisibilityTest.java b/core/tests/packagemonitortests/src/com/android/internal/content/PackageMonitorVisibilityTest.java
new file mode 100644
index 0000000..a310edc
--- /dev/null
+++ b/core/tests/packagemonitortests/src/com/android/internal/content/PackageMonitorVisibilityTest.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.content;
+
+import static com.android.compatibility.common.util.ShellUtils.runShellCommand;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.UserHandle;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A test to verify PackageMonitor implementation respects the app visibility.
+ */
+@RunWith(AndroidJUnit4.class)
+public class PackageMonitorVisibilityTest {
+    private static final String TEST_DATA_PATH = "/data/local/tmp/contenttests/";
+    private static final String TEAT_APK_PATH =
+            TEST_DATA_PATH + "TestVisibilityApp.apk";
+    private static final String TEAT_APK_PACKAGE_NAME = "com.example.android.testvisibilityapp";
+    private static final int WAIT_CALLBACK_CALLED_IN_SECONDS = 1;
+    @Test
+    public void testPackageMonitorPackageVisible() throws Exception {
+        TestVisibilityPackageMonitor testPackageMonitor = new TestVisibilityPackageMonitor();
+
+        try {
+            Context context = InstrumentationRegistry.getInstrumentation().getContext();
+            testPackageMonitor.register(context, UserHandle.ALL,
+                    new Handler(Looper.getMainLooper()));
+
+            installTestPackage(true /* forceQueryable */);
+            boolean result = testPackageMonitor.mCallbackCountDownLatch.await(
+                    WAIT_CALLBACK_CALLED_IN_SECONDS, TimeUnit.SECONDS);
+
+            int expectedUid = context.getPackageManager().getPackageUid(TEAT_APK_PACKAGE_NAME,
+                    PackageManager.PackageInfoFlags.of(0));
+            assertThat(result).isTrue();
+            assertThat(testPackageMonitor.mAddedPackageName).isEqualTo(TEAT_APK_PACKAGE_NAME);
+            assertThat(testPackageMonitor.mAddedPackageUid).isEqualTo(expectedUid);
+        } finally {
+            testPackageMonitor.unregister();
+            uninstallTestPackage();
+        }
+    }
+
+    @Test
+    public void testPackageMonitorPackageNotVisible() throws Exception {
+        TestVisibilityPackageMonitor testPackageMonitor = new TestVisibilityPackageMonitor();
+
+        try {
+            Context context = InstrumentationRegistry.getInstrumentation().getContext();
+            testPackageMonitor.register(context, UserHandle.ALL,
+                    new Handler(Looper.getMainLooper()));
+
+            installTestPackage(false /* forceQueryable */);
+            boolean result = testPackageMonitor.mCallbackCountDownLatch.await(
+                    WAIT_CALLBACK_CALLED_IN_SECONDS, TimeUnit.SECONDS);
+
+            assertThat(result).isFalse();
+        } finally {
+            testPackageMonitor.unregister();
+            uninstallTestPackage();
+        }
+    }
+
+    private static void installTestPackage(boolean forceQueryable) {
+        final StringBuilder cmd = new StringBuilder("pm install ");
+        if (forceQueryable) {
+            cmd.append("--force-queryable ");
+        }
+        cmd.append(TEAT_APK_PATH);
+        final String result = runShellCommand(cmd.toString());
+        assertThat(result.trim()).contains("Success");
+    }
+
+    private static void uninstallTestPackage() {
+        runShellCommand("pm uninstall " + TEAT_APK_PACKAGE_NAME);
+    }
+
+    private static class TestVisibilityPackageMonitor extends PackageMonitor {
+        String mAddedPackageName;
+        int mAddedPackageUid;
+        CountDownLatch mCallbackCountDownLatch = new CountDownLatch(1);
+
+        @Override
+        public void onPackageAdded(String packageName, int uid) {
+            if (!TEAT_APK_PACKAGE_NAME.equals(packageName)) {
+                return;
+            }
+            mAddedPackageName = packageName;
+            mAddedPackageUid = uid;
+            mCallbackCountDownLatch.countDown();
+        }
+    }
+}
diff --git a/core/tests/packagemonitortests/testapp/TestVisibilityApp/Android.bp b/core/tests/packagemonitortests/testapp/TestVisibilityApp/Android.bp
new file mode 100644
index 0000000..c0e98fc
--- /dev/null
+++ b/core/tests/packagemonitortests/testapp/TestVisibilityApp/Android.bp
@@ -0,0 +1,27 @@
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+android_test_helper_app {
+    name: "TestVisibilityApp",
+    srcs: ["src/**/*.java"],
+    sdk_version: "current",
+    dex_preopt: {
+        enabled: false,
+    },
+    test_suites: ["device-tests"],
+}
diff --git a/core/tests/packagemonitortests/testapp/TestVisibilityApp/AndroidManifest.xml b/core/tests/packagemonitortests/testapp/TestVisibilityApp/AndroidManifest.xml
new file mode 100644
index 0000000..0ba5058
--- /dev/null
+++ b/core/tests/packagemonitortests/testapp/TestVisibilityApp/AndroidManifest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.testvisibilityapp">
+    <application android:label="testvisibilityapp">
+        <activity android:name="DummyActivity"
+                android:exported="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/core/tests/packagemonitortests/testapp/TestVisibilityApp/res/layout/dummy_activity.xml b/core/tests/packagemonitortests/testapp/TestVisibilityApp/res/layout/dummy_activity.xml
new file mode 100644
index 0000000..9887dc7
--- /dev/null
+++ b/core/tests/packagemonitortests/testapp/TestVisibilityApp/res/layout/dummy_activity.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<EditText xmlns:android="http://schemas.android.com/apk/res/android"
+          android:id="@+id/text"
+          android:layout_width="match_parent"
+          android:layout_height="match_parent"
+          android:textSize="18sp"
+          android:autoText="true"
+          android:capitalize="sentences"
+          android:text="@string/activity_text_text" />
+
diff --git a/core/tests/packagemonitortests/testapp/TestVisibilityApp/res/values/strings.xml b/core/tests/packagemonitortests/testapp/TestVisibilityApp/res/values/strings.xml
new file mode 100644
index 0000000..5771bd5
--- /dev/null
+++ b/core/tests/packagemonitortests/testapp/TestVisibilityApp/res/values/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+
+    <string name="activity_text_text">Hello</string>
+
+</resources>
diff --git a/core/tests/packagemonitortests/testapp/TestVisibilityApp/src/com/example/android/testvisibilityapp/DummyActivity.java b/core/tests/packagemonitortests/testapp/TestVisibilityApp/src/com/example/android/testvisibilityapp/DummyActivity.java
new file mode 100644
index 0000000..e74454e
--- /dev/null
+++ b/core/tests/packagemonitortests/testapp/TestVisibilityApp/src/com/example/android/testvisibilityapp/DummyActivity.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.testvisibilityapp;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.View;
+
+public class DummyActivity extends Activity {
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        View view = getLayoutInflater().inflate(R.layout.dummy_activity, null);
+        setContentView(view);
+    }
+}
+
diff --git a/core/tests/utiltests/src/android/util/AtomicFileTest.java b/core/tests/utiltests/src/android/util/AtomicFileTest.java
index 8c13579..6f59714 100644
--- a/core/tests/utiltests/src/android/util/AtomicFileTest.java
+++ b/core/tests/utiltests/src/android/util/AtomicFileTest.java
@@ -20,9 +20,12 @@
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.longThat;
+import static org.mockito.Mockito.spy;
 
 import android.app.Instrumentation;
 import android.content.Context;
+import android.os.SystemClock;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -33,6 +36,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
+import org.mockito.Mockito;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -269,6 +273,29 @@
         assertThat(toString).contains(mBaseFile.getAbsolutePath());
     }
 
+    @Test
+    public void testTimeLogging() throws Exception {
+        var logger = spy(new SystemConfigFileCommitEventLogger("name"));
+        var file = new AtomicFile(mBaseFile, logger);
+        var startTime1 = SystemClock.uptimeMillis();
+        try (var writer = file.startWrite()) {
+            file.finishWrite(writer);
+        }
+        var endTime1 = SystemClock.uptimeMillis();
+        SystemClock.sleep(10);
+        var startTime2 = SystemClock.uptimeMillis();
+        try (var writer = file.startWrite()) {
+            file.finishWrite(writer);
+        }
+        var endTime2 = SystemClock.uptimeMillis();
+
+        var inOrder = Mockito.inOrder(logger);
+        inOrder.verify(logger).writeLogRecord(longThat(
+                l -> l <= endTime1 - startTime1));
+        inOrder.verify(logger).writeLogRecord(longThat(
+                l -> l <= endTime2 - startTime2 && l < endTime2 - startTime1));
+    }
+
     private static void writeBytes(@NonNull File file, @NonNull byte[] bytes) throws IOException {
         try (FileOutputStream outputStream = new FileOutputStream(file)) {
             outputStream.write(bytes);
diff --git a/core/tests/utiltests/src/android/util/SystemConfigFileCommitEventLoggerTest.java b/core/tests/utiltests/src/android/util/SystemConfigFileCommitEventLoggerTest.java
new file mode 100644
index 0000000..5f6c201
--- /dev/null
+++ b/core/tests/utiltests/src/android/util/SystemConfigFileCommitEventLoggerTest.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.util;
+
+import static org.mockito.ArgumentMatchers.longThat;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+
+import android.os.SystemClock;
+
+import org.junit.Test;
+import org.mockito.Mockito;
+
+
+public class SystemConfigFileCommitEventLoggerTest {
+    @Test
+    public void testSimple() throws Exception {
+        var logger = spy(new SystemConfigFileCommitEventLogger("name"));
+        var startTime = SystemClock.uptimeMillis();
+        logger.onStartWrite();
+        logger.onFinishWrite();
+        var endTime = SystemClock.uptimeMillis();
+        Mockito.verify(logger, times(1)).writeLogRecord(
+                longThat(l -> l <= endTime - startTime));
+    }
+
+    @Test
+    public void testMultipleWrong() throws Exception {
+        var logger = spy(new SystemConfigFileCommitEventLogger("name"));
+        var startTime = SystemClock.uptimeMillis();
+        logger.onStartWrite();
+        logger.onFinishWrite();
+        var endTime1 = SystemClock.uptimeMillis();
+        SystemClock.sleep(10);
+        logger.onStartWrite();
+        logger.onFinishWrite();
+        var endTime2 = SystemClock.uptimeMillis();
+        var inOrder = Mockito.inOrder(logger);
+        inOrder.verify(logger).writeLogRecord(longThat(
+                l -> l <= endTime1 - startTime));
+        inOrder.verify(logger).writeLogRecord(longThat(
+                l -> l > endTime1 - startTime && l <= endTime2 - startTime));
+    }
+
+    @Test
+    public void testMultipleRight() throws Exception {
+        var logger = spy(new SystemConfigFileCommitEventLogger("name"));
+        var startTime = SystemClock.uptimeMillis();
+        logger.onStartWrite();
+        logger.onFinishWrite();
+        var endTime1 = SystemClock.uptimeMillis();
+        SystemClock.sleep(10);
+        logger.setStartTime(0);
+        logger.onStartWrite();
+        logger.onFinishWrite();
+        var endTime2 = SystemClock.uptimeMillis();
+        var inOrder = Mockito.inOrder(logger);
+        inOrder.verify(logger).writeLogRecord(longThat(
+                l -> l <= endTime1 - startTime));
+        inOrder.verify(logger).writeLogRecord(longThat(
+                l -> l <= endTime2 - endTime1));
+    }
+}
diff --git a/core/tests/vibrator/Android.bp b/core/tests/vibrator/Android.bp
new file mode 100644
index 0000000..829409a
--- /dev/null
+++ b/core/tests/vibrator/Android.bp
@@ -0,0 +1,40 @@
+package {
+    // See: http://go/android-license-faq
+    default_applicable_licenses: ["frameworks_base_license"],
+}
+
+android_test {
+    name: "FrameworksVibratorCoreTests",
+
+    srcs: [
+        "src/**/*.java",
+    ],
+
+    static_libs: [
+        "frameworks-base-testutils",
+        "guava",
+        "androidx.core_core",
+        "androidx.test.ext.junit",
+        "androidx.test.runner",
+        "androidx.test.rules",
+        "mockito-target-minus-junit4",
+        "truth-prebuilt",
+        "testng",
+    ],
+
+    libs: [
+        "android.test.runner",
+        "android.test.base",
+        "android.test.mock",
+        "framework",
+        "framework-res",
+    ],
+
+    sdk_version: "core_platform",
+    test_suites: [
+        "device-tests",
+        "automotive-tests",
+    ],
+
+    certificate: "platform",
+}
diff --git a/core/tests/vibrator/AndroidManifest.xml b/core/tests/vibrator/AndroidManifest.xml
new file mode 100644
index 0000000..1ce6071
--- /dev/null
+++ b/core/tests/vibrator/AndroidManifest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.frameworks.core.tests.vibrator">
+
+    <!-- vibrator test permissions -->
+    <uses-permission android:name="android.permission.VIBRATE" />
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+            android:targetPackage="com.android.frameworks.core.tests.vibrator"
+            android:label="Frameworks Vibrator Core Tests" />
+</manifest>
diff --git a/core/tests/vibrator/OWNERS b/core/tests/vibrator/OWNERS
new file mode 100644
index 0000000..00446f2
--- /dev/null
+++ b/core/tests/vibrator/OWNERS
@@ -0,0 +1,2 @@
+# Bug component: 345036
+include platform/frameworks/base:/services/core/java/com/android/server/vibrator/OWNERS
\ No newline at end of file
diff --git a/core/tests/vibrator/TEST_MAPPING b/core/tests/vibrator/TEST_MAPPING
new file mode 100644
index 0000000..f3333d8
--- /dev/null
+++ b/core/tests/vibrator/TEST_MAPPING
@@ -0,0 +1,22 @@
+{
+  "presubmit": [
+    {
+      "name": "FrameworksVibratorCoreTests",
+      "options": [
+        {"exclude-annotation": "android.platform.test.annotations.LargeTest"},
+        {"exclude-annotation": "android.platform.test.annotations.FlakyTest"},
+        {"exclude-annotation": "androidx.test.filters.FlakyTest"},
+        {"exclude-annotation": "org.junit.Ignore"}
+      ]
+    }
+  ],
+  "postsubmit": [
+    {
+      "name": "FrameworksVibratorCoreTests",
+      "options": [
+        {"exclude-annotation": "org.junit.Ignore"}
+      ]
+    }
+  ]
+}
+
diff --git a/core/tests/vibrator/src/android/os/CombinedVibrationTest.java b/core/tests/vibrator/src/android/os/CombinedVibrationTest.java
new file mode 100644
index 0000000..244fcff
--- /dev/null
+++ b/core/tests/vibrator/src/android/os/CombinedVibrationTest.java
@@ -0,0 +1,327 @@
+/*
+ * 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 android.os;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import static org.testng.Assert.assertThrows;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+@RunWith(JUnit4.class)
+public class CombinedVibrationTest {
+    private static final VibrationEffect VALID_EFFECT = VibrationEffect.createOneShot(10, 255);
+    private static final VibrationEffect INVALID_EFFECT = new VibrationEffect.Composed(
+            new ArrayList<>(), 0);
+
+    @Test
+    public void testValidateMono() {
+        CombinedVibration.createParallel(VALID_EFFECT);
+
+        assertThrows(IllegalArgumentException.class,
+                () -> CombinedVibration.createParallel(INVALID_EFFECT));
+    }
+
+    @Test
+    public void testValidateStereo() {
+        CombinedVibration.startParallel()
+                .addVibrator(0, VALID_EFFECT)
+                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
+                .combine();
+        CombinedVibration.startParallel()
+                .addVibrator(0, INVALID_EFFECT)
+                .addVibrator(0, VALID_EFFECT)
+                .combine();
+
+        assertThrows(IllegalArgumentException.class,
+                () -> CombinedVibration.startParallel()
+                        .addVibrator(0, INVALID_EFFECT)
+                        .combine());
+    }
+
+    @Test
+    public void testValidateSequential() {
+        CombinedVibration.startSequential()
+                .addNext(0, VALID_EFFECT)
+                .addNext(CombinedVibration.createParallel(VALID_EFFECT))
+                .combine();
+        CombinedVibration.startSequential()
+                .addNext(0, VALID_EFFECT)
+                .addNext(0, VALID_EFFECT, 100)
+                .combine();
+        CombinedVibration.startSequential()
+                .addNext(CombinedVibration.startSequential()
+                        .addNext(0, VALID_EFFECT)
+                        .combine())
+                .combine();
+
+        assertThrows(IllegalArgumentException.class,
+                () -> CombinedVibration.startSequential()
+                        .addNext(0, VALID_EFFECT, -1)
+                        .combine());
+        assertThrows(IllegalArgumentException.class,
+                () -> CombinedVibration.startSequential()
+                        .addNext(0, INVALID_EFFECT)
+                        .combine());
+    }
+
+    @Test
+    public void testNestedSequentialAccumulatesDelays() {
+        CombinedVibration.Sequential combined =
+                (CombinedVibration.Sequential) CombinedVibration.startSequential()
+                        .addNext(CombinedVibration.startSequential()
+                                        .addNext(0, VALID_EFFECT, /* delay= */ 100)
+                                        .addNext(1, VALID_EFFECT, /* delay= */ 100)
+                                        .combine(),
+                                /* delay= */ 10)
+                        .addNext(CombinedVibration.startSequential()
+                                .addNext(0, VALID_EFFECT, /* delay= */ 100)
+                                .combine())
+                        .addNext(CombinedVibration.startSequential()
+                                        .addNext(0, VALID_EFFECT)
+                                        .addNext(0, VALID_EFFECT, /* delay= */ 100)
+                                        .combine(),
+                                /* delay= */ 10)
+                        .combine();
+
+        assertEquals(Arrays.asList(110, 100, 100, 10, 100), combined.getDelays());
+    }
+
+    @Test
+    public void testCombineEmptyFails() {
+        assertThrows(IllegalStateException.class,
+                () -> CombinedVibration.startParallel().combine());
+        assertThrows(IllegalStateException.class,
+                () -> CombinedVibration.startSequential().combine());
+    }
+
+    @Test
+    public void testDurationMono() {
+        assertEquals(1, CombinedVibration.createParallel(
+                VibrationEffect.createOneShot(1, 1)).getDuration());
+        assertEquals(-1, CombinedVibration.createParallel(
+                VibrationEffect.get(VibrationEffect.EFFECT_CLICK)).getDuration());
+        assertEquals(-1, CombinedVibration.createParallel(
+                        VibrationEffect.startComposition()
+                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 100)
+                                .compose())
+                .getDuration());
+        assertEquals(Long.MAX_VALUE, CombinedVibration.createParallel(
+                VibrationEffect.createWaveform(
+                        new long[]{1, 2, 3}, new int[]{1, 2, 3}, 0)).getDuration());
+    }
+
+    @Test
+    public void testDurationStereo() {
+        assertEquals(6, CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.createOneShot(1, 1))
+                .addVibrator(2,
+                        VibrationEffect.createWaveform(new long[]{1, 2, 3}, new int[]{1, 2, 3}, -1))
+                .combine()
+                .getDuration());
+        assertEquals(-1, CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addVibrator(2,
+                        VibrationEffect.createWaveform(new long[]{1, 2, 3}, new int[]{1, 2, 3}, -1))
+                .combine()
+                .getDuration());
+        assertEquals(Long.MAX_VALUE, CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addVibrator(2,
+                        VibrationEffect.createWaveform(new long[]{1, 2, 3}, new int[]{1, 2, 3}, 0))
+                .combine()
+                .getDuration());
+    }
+
+    @Test
+    public void testDurationSequential() {
+        assertEquals(26, CombinedVibration.startSequential()
+                .addNext(1, VibrationEffect.createOneShot(10, 10), 10)
+                .addNext(2,
+                        VibrationEffect.createWaveform(new long[]{1, 2, 3}, new int[]{1, 2, 3}, -1))
+                .combine()
+                .getDuration());
+        assertEquals(-1, CombinedVibration.startSequential()
+                .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addNext(2,
+                        VibrationEffect.createWaveform(new long[]{1, 2, 3}, new int[]{1, 2, 3}, -1))
+                .combine()
+                .getDuration());
+        assertEquals(Long.MAX_VALUE, CombinedVibration.startSequential()
+                .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addNext(2,
+                        VibrationEffect.createWaveform(new long[]{1, 2, 3}, new int[]{1, 2, 3}, 0))
+                .combine()
+                .getDuration());
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidateMono() {
+        assertTrue(CombinedVibration.createParallel(
+                VibrationEffect.createOneShot(1, 1)).isHapticFeedbackCandidate());
+        assertTrue(CombinedVibration.createParallel(
+                VibrationEffect.get(VibrationEffect.EFFECT_CLICK)).isHapticFeedbackCandidate());
+        assertTrue(CombinedVibration.createParallel(
+                        VibrationEffect.startComposition()
+                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 100)
+                                .compose())
+                .isHapticFeedbackCandidate());
+        // Too long to be classified as a haptic feedback.
+        assertFalse(CombinedVibration.createParallel(
+                VibrationEffect.createOneShot(10_000, 1)).isHapticFeedbackCandidate());
+        // Repeating vibrations should not be classified as a haptic feedback.
+        assertFalse(CombinedVibration.createParallel(
+                VibrationEffect.createWaveform(new long[]{1}, new int[]{1}, 0))
+                .isHapticFeedbackCandidate());
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidateStereo() {
+        assertTrue(CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.createOneShot(1, 1))
+                .addVibrator(2, VibrationEffect.createWaveform(new long[]{6}, new int[]{1}, -1))
+                .combine()
+                .isHapticFeedbackCandidate());
+        assertTrue(CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addVibrator(2,
+                        VibrationEffect.startComposition()
+                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 100)
+                                .compose())
+                .combine()
+                .isHapticFeedbackCandidate());
+        // Repeating vibrations should not be classified as a haptic feedback.
+        assertFalse(CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addVibrator(2, VibrationEffect.createWaveform(new long[]{1}, new int[]{1}, 0))
+                .combine()
+                .isHapticFeedbackCandidate());
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidateSequential() {
+        assertTrue(CombinedVibration.startSequential()
+                .addNext(1, VibrationEffect.createOneShot(10, 10), 10)
+                .addNext(2, VibrationEffect.createWaveform(new long[]{5}, new int[]{1}, -1))
+                .combine()
+                .isHapticFeedbackCandidate());
+        assertTrue(CombinedVibration.startSequential()
+                .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addNext(2,
+                        VibrationEffect.startComposition()
+                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SLOW_RISE)
+                                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_FALL)
+                                .compose())
+                .combine()
+                .isHapticFeedbackCandidate());
+        // Repeating vibrations should not be classified as a haptic feedback.
+        assertFalse(CombinedVibration.startSequential()
+                .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addNext(2, VibrationEffect.createWaveform(new long[]{1}, new int[]{1}, 0))
+                .combine()
+                .isHapticFeedbackCandidate());
+        // Too many effects to be classified as a haptic feedback.
+        assertFalse(CombinedVibration.startSequential()
+                .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addNext(2, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
+                .addNext(3, VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK))
+                .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_THUD))
+                .combine()
+                .isHapticFeedbackCandidate());
+    }
+
+    @Test
+    public void testHasVibratorMono_returnsTrueForAnyVibrator() {
+        CombinedVibration effect = CombinedVibration.createParallel(
+                VibrationEffect.get(VibrationEffect.EFFECT_CLICK));
+        assertTrue(effect.hasVibrator(0));
+        assertTrue(effect.hasVibrator(1));
+    }
+
+    @Test
+    public void testHasVibratorStereo_returnsOnlyTheIdsSet() {
+        CombinedVibration effect = CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .combine();
+        assertFalse(effect.hasVibrator(0));
+        assertTrue(effect.hasVibrator(1));
+        assertFalse(effect.hasVibrator(2));
+    }
+
+    @Test
+    public void testHasVibratorSequential_returnsNestedVibrators() {
+        CombinedVibration effect = CombinedVibration.startSequential()
+                .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addNext(CombinedVibration.startParallel()
+                        .addVibrator(2, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
+                        .combine())
+                .combine();
+        assertFalse(effect.hasVibrator(0));
+        assertTrue(effect.hasVibrator(1));
+        assertTrue(effect.hasVibrator(2));
+    }
+
+    @Test
+    public void testSerializationMono() {
+        CombinedVibration original = CombinedVibration.createParallel(VALID_EFFECT);
+
+        Parcel parcel = Parcel.obtain();
+        original.writeToParcel(parcel, 0);
+        parcel.setDataPosition(0);
+        CombinedVibration restored = CombinedVibration.CREATOR.createFromParcel(parcel);
+        assertEquals(original, restored);
+    }
+
+    @Test
+    public void testSerializationStereo() {
+        CombinedVibration original = CombinedVibration.startParallel()
+                .addVibrator(0, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addVibrator(1, VibrationEffect.createOneShot(10, 255))
+                .combine();
+
+        Parcel parcel = Parcel.obtain();
+        original.writeToParcel(parcel, 0);
+        parcel.setDataPosition(0);
+        CombinedVibration restored = CombinedVibration.CREATOR.createFromParcel(parcel);
+        assertEquals(original, restored);
+    }
+
+    @Test
+    public void testSerializationSequential() {
+        CombinedVibration original = CombinedVibration.startSequential()
+                .addNext(0, VALID_EFFECT)
+                .addNext(CombinedVibration.createParallel(VALID_EFFECT))
+                .addNext(0, VibrationEffect.get(VibrationEffect.EFFECT_CLICK), 100)
+                .combine();
+
+        Parcel parcel = Parcel.obtain();
+        original.writeToParcel(parcel, 0);
+        parcel.setDataPosition(0);
+        CombinedVibration restored = CombinedVibration.CREATOR.createFromParcel(parcel);
+        assertEquals(original, restored);
+    }
+}
diff --git a/core/tests/vibrator/src/android/os/ExternalVibrationTest.java b/core/tests/vibrator/src/android/os/ExternalVibrationTest.java
new file mode 100644
index 0000000..8741907
--- /dev/null
+++ b/core/tests/vibrator/src/android/os/ExternalVibrationTest.java
@@ -0,0 +1,52 @@
+/*
+ * 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 android.os;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.media.AudioAttributes;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public class ExternalVibrationTest {
+
+    @Test
+    public void testSerialization() {
+        ExternalVibration original = new ExternalVibration(
+                /* uid= */ 123,
+                "pkg",
+                new AudioAttributes.Builder()
+                        .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
+                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+                        .setFlags(AudioAttributes.FLAG_BYPASS_MUTE)
+                        .build(),
+                IExternalVibrationController.Stub.asInterface(new Binder()));
+        Parcel p = Parcel.obtain();
+        original.writeToParcel(p, 0);
+        p.setDataPosition(0);
+        ExternalVibration restored = ExternalVibration.CREATOR.createFromParcel(p);
+        assertThat(restored).isEqualTo(original);
+        // ExternalVibration.equals relies on the binder token only, check other attributes as well
+        assertThat(restored.getUid()).isEqualTo(original.getUid());
+        assertThat(restored.getPackage()).isEqualTo(original.getPackage());
+        assertThat(restored.getAudioAttributes()).isEqualTo(original.getAudioAttributes());
+        assertThat(restored.getToken()).isEqualTo(original.getToken());
+    }
+}
diff --git a/core/tests/vibrator/src/android/os/VibrationEffectTest.java b/core/tests/vibrator/src/android/os/VibrationEffectTest.java
new file mode 100644
index 0000000..8be489e
--- /dev/null
+++ b/core/tests/vibrator/src/android/os/VibrationEffectTest.java
@@ -0,0 +1,1008 @@
+/*
+ * 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 android.os;
+
+import static android.os.VibrationEffect.DEFAULT_AMPLITUDE;
+import static android.os.VibrationEffect.VibrationParameter.targetAmplitude;
+import static android.os.VibrationEffect.VibrationParameter.targetFrequency;
+
+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;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertThrows;
+
+import android.content.ContentInterface;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.res.Resources;
+import android.hardware.vibrator.IVibrator;
+import android.net.Uri;
+import android.os.VibrationEffect.Composition.UnreachableAfterRepeatingIndefinitelyException;
+import android.os.vibrator.PrimitiveSegment;
+import android.os.vibrator.StepSegment;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.R;
+
+import org.jetbrains.annotations.NotNull;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.time.Duration;
+import java.util.Arrays;
+
+@RunWith(MockitoJUnitRunner.class)
+public class VibrationEffectTest {
+
+    private static final String RINGTONE_URI_1 = "content://test/system/ringtone_1";
+    private static final String RINGTONE_URI_2 = "content://test/system/ringtone_2";
+    private static final String RINGTONE_URI_3 = "content://test/system/ringtone_3";
+    private static final String UNKNOWN_URI = "content://test/system/other_audio";
+
+    private static final long TEST_TIMING = 100;
+    private static final int TEST_AMPLITUDE = 100;
+    private static final long[] TEST_TIMINGS = new long[] { 100, 100, 200 };
+    private static final int[] TEST_AMPLITUDES =
+            new int[] { 255, 0, DEFAULT_AMPLITUDE };
+
+    private static final VibrationEffect TEST_ONE_SHOT =
+            VibrationEffect.createOneShot(TEST_TIMING, TEST_AMPLITUDE);
+    private static final VibrationEffect DEFAULT_ONE_SHOT =
+            VibrationEffect.createOneShot(TEST_TIMING, DEFAULT_AMPLITUDE);
+    private static final VibrationEffect TEST_WAVEFORM =
+            VibrationEffect.createWaveform(TEST_TIMINGS, TEST_AMPLITUDES, -1);
+
+    @Test
+    public void computeLegacyPattern_timingsAndAmplitudes_zeroAmplitudesOnEvenIndices() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1, 2, 3, 4, 5},
+                /* amplitudes= */ new int[] {0, DEFAULT_AMPLITUDE, 0, DEFAULT_AMPLITUDE, 0},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {1, 2, 3, 4, 5};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsAndAmplitudes_zeroAmplitudesOnOddIndices() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1, 2, 3, 4, 5},
+                /* amplitudes= */ new int[] {
+                        DEFAULT_AMPLITUDE, 0, DEFAULT_AMPLITUDE, 0, DEFAULT_AMPLITUDE},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {0, 1, 2, 3, 4, 5};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsAndAmplitudes_zeroAmplitudesAtTheStart() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1, 2, 3},
+                /* amplitudes= */ new int[] {0, 0, DEFAULT_AMPLITUDE},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {3, 3};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsAndAmplitudes_zeroAmplitudesAtTheEnd() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1, 2, 3},
+                /* amplitudes= */ new int[] {DEFAULT_AMPLITUDE, 0, 0},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {0, 1, 5};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsAndAmplitudes_allDefaultAmplitudes() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1, 2, 3},
+                /* amplitudes= */ new int[] {
+                        DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {0, 6};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsAndAmplitudes_allZeroAmplitudes() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1, 2, 3},
+                /* amplitudes= */ new int[] {0, 0, 0},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {6};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsAndAmplitudes_sparsedZeroAmplitudes() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1, 2, 3, 4, 5, 6, 7},
+                /* amplitudes= */ new int[] {
+                        0, 0, DEFAULT_AMPLITUDE, 0, DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE, 0},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {3, 3, 4, 11, 7};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsAndAmplitudes_oneTimingWithDefaultAmplitude() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1},
+                /* amplitudes= */ new int[] {DEFAULT_AMPLITUDE},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {0, 1};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsAndAmplitudes_oneTimingWithZeroAmplitude() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1},
+                /* amplitudes= */ new int[] {0},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {1};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsAndAmplitudes_repeating() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1, 2, 3, 4, 5},
+                /* amplitudes= */ new int[] {0, DEFAULT_AMPLITUDE, 0, DEFAULT_AMPLITUDE, 0},
+                /* repeatIndex= */ 0);
+
+        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
+
+        effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1, 2, 3, 4, 5},
+                /* amplitudes= */ new int[] {0, DEFAULT_AMPLITUDE, 0, DEFAULT_AMPLITUDE, 0},
+                /* repeatIndex= */ 3);
+
+        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
+
+        effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1, 2},
+                /* amplitudes= */ new int[] {DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE},
+                /* repeatIndex= */ 1);
+
+        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsAndAmplitudes_badAmplitude() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1},
+                /* amplitudes= */ new int[] {200},
+                /* repeatIndex= */ -1);
+
+        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsOnly_nonZeroTimings() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1, 2, 3},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {1, 2, 3};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsOnly_oneValue() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {5},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {5};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsOnly_zeroesAtTheEnd() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1, 2, 3, 0, 0},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {1, 2, 3, 0, 0};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsOnly_zeroesAtTheStart() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {0, 0, 1, 2, 3},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {0, 0, 1, 2, 3};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsOnly_zeroesAtTheMiddle() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1, 2, 0, 0, 3, 4, 5},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {1, 2, 0, 0, 3, 4, 5};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsOnly_sparsedZeroes() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {0, 1, 2, 0, 0, 3, 4, 5, 0},
+                /* repeatIndex= */ -1);
+        long[] expectedPattern = new long[] {0, 1, 2, 0, 0, 3, 4, 5, 0};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_timingsOnly_repeating() {
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {0, 1, 2, 0, 0, 3, 4, 5, 0},
+                /* repeatIndex= */ 0);
+
+        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
+
+        effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[] {1, 2, 3, 4},
+                /* repeatIndex= */ 2);
+
+        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_notPatternPased() {
+        VibrationEffect effect = VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK);
+
+        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_oneShot_defaultAmplitude() {
+        VibrationEffect effect = VibrationEffect.createOneShot(
+                /* milliseconds= */ 5, /* ampliutde= */ DEFAULT_AMPLITUDE);
+        long[] expectedPattern = new long[] {0, 5};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_oneShot_badAmplitude() {
+        VibrationEffect effect = VibrationEffect.createOneShot(
+                /* milliseconds= */ 5, /* ampliutde= */ 50);
+
+        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_composition_noOffDuration() {
+        VibrationEffect effect = VibrationEffect.startComposition()
+                .addEffect(
+                        VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {5},
+                                /* repeatIndex= */ -1))
+                .addEffect(
+                        VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {2, 3},
+                                /* repeatIndex= */ -1))
+                .addEffect(
+                        VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {10, 20},
+                                /* amplitudes= */ new int[] {DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE},
+                                /* repeatIndex= */ -1))
+                .addEffect(
+                        VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {4, 5},
+                                /* amplitudes= */ new int[] {0, DEFAULT_AMPLITUDE},
+                                /* repeatIndex= */ -1))
+                .compose();
+        long[] expectedPattern = new long[] {7, 33, 4, 5};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_composition_withOffDuration() {
+        VibrationEffect effect = VibrationEffect.startComposition()
+                .addOffDuration(Duration.ofMillis(20))
+                .addEffect(
+                        VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {10, 20},
+                                /* amplitudes= */ new int[] {0, DEFAULT_AMPLITUDE},
+                                /* repeatIndex= */ -1))
+                .addEffect(
+                        VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {30, 40},
+                                /* amplitudes= */ new int[] {DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE},
+                                /* repeatIndex= */ -1))
+                .addOffDuration(Duration.ofMillis(10))
+                .addEffect(
+                        VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {4, 5},
+                                /* repeatIndex= */ -1))
+                .addOffDuration(Duration.ofMillis(5))
+                .compose();
+        long[] expectedPattern = new long[] {30, 90, 14, 5, 5};
+
+        assertArrayEq(expectedPattern, effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_composition_withPrimitives() {
+        VibrationEffect effect = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
+                .addOffDuration(Duration.ofMillis(20))
+                .addEffect(
+                        VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {5},
+                                /* repeatIndex= */ -1))
+                .compose();
+
+        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_composition_repeating() {
+        VibrationEffect effect = VibrationEffect.startComposition()
+                .addEffect(
+                        VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {5},
+                                /* repeatIndex= */ -1))
+                .repeatEffectIndefinitely(
+                        VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {2, 3},
+                                /* repeatIndex= */ -1))
+                .compose();
+
+        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void computeLegacyPattern_effectsViaStartWaveform() {
+        // Effects created via startWaveform are not expected to be converted to long[] patterns, as
+        // they are not configured to always play with the default amplitude.
+        VibrationEffect effect = VibrationEffect.startWaveform(targetFrequency(60))
+                .addTransition(Duration.ofMillis(100), targetAmplitude(1), targetFrequency(120))
+                .addSustain(Duration.ofMillis(200))
+                .addTransition(Duration.ofMillis(100), targetAmplitude(0), targetFrequency(60))
+                .build();
+
+        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
+
+        effect = VibrationEffect.startWaveform(targetFrequency(60))
+                .addTransition(Duration.ofMillis(80), targetAmplitude(1))
+                .addSustain(Duration.ofMillis(200))
+                .addTransition(Duration.ofMillis(100), targetAmplitude(0))
+                .build();
+
+        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
+
+        effect = VibrationEffect.startWaveform(targetFrequency(60))
+                .addTransition(Duration.ofMillis(100), targetFrequency(50))
+                .addSustain(Duration.ofMillis(50))
+                .addTransition(Duration.ofMillis(20), targetFrequency(75))
+                .build();
+
+        assertNull(effect.computeCreateWaveformOffOnTimingsOrNull());
+    }
+
+    @Test
+    public void getRingtones_noPrebakedRingtones() {
+        Resources r = mockRingtoneResources(new String[0]);
+        Context context = mockContext(r);
+        VibrationEffect effect = VibrationEffect.get(Uri.parse(RINGTONE_URI_1), context);
+        assertNull(effect);
+    }
+
+    @Test
+    public void getRingtones_noPrebakedRingtoneForUri() {
+        Resources r = mockRingtoneResources();
+        Context context = mockContext(r);
+        VibrationEffect effect = VibrationEffect.get(Uri.parse(UNKNOWN_URI), context);
+        assertNull(effect);
+    }
+
+    @Test
+    public void getRingtones_getPrebakedRingtone() {
+        Resources r = mockRingtoneResources();
+        Context context = mockContext(r);
+        VibrationEffect effect = VibrationEffect.get(Uri.parse(RINGTONE_URI_2), context);
+        VibrationEffect expectedEffect = VibrationEffect.get(VibrationEffect.RINGTONES[1]);
+        assertNotNull(expectedEffect);
+        assertEquals(expectedEffect, effect);
+    }
+
+    @Test
+    public void testValidateOneShot() {
+        VibrationEffect.createOneShot(1, 255).validate();
+        VibrationEffect.createOneShot(1, DEFAULT_AMPLITUDE).validate();
+
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.createOneShot(-1, 255).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.createOneShot(0, 255).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.createOneShot(1, -2).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.createOneShot(1, 0).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.createOneShot(-1, 255).validate());
+    }
+
+    @Test
+    public void testValidatePrebaked() {
+        VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK).validate();
+        VibrationEffect.createPredefined(VibrationEffect.RINGTONES[1]).validate();
+
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.createPredefined(-1).validate());
+    }
+
+    @Test
+    public void testValidateWaveform() {
+        VibrationEffect.createWaveform(TEST_TIMINGS, TEST_AMPLITUDES, -1).validate();
+        VibrationEffect.createWaveform(new long[]{10, 10}, new int[] {0, 0}, -1).validate();
+        VibrationEffect.createWaveform(TEST_TIMINGS, TEST_AMPLITUDES, 0).validate();
+
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.createWaveform(new long[0], new int[0], -1).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.createWaveform(TEST_TIMINGS, new int[0], -1).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.createWaveform(
+                        new long[]{0, 0, 0}, TEST_AMPLITUDES, -1).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.createWaveform(
+                        TEST_TIMINGS, new int[]{-1, -1, -2}, -1).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.createWaveform(
+                        TEST_TIMINGS, TEST_AMPLITUDES, TEST_TIMINGS.length).validate());
+    }
+
+    @Test
+    public void testValidateWaveformBuilder() {
+        // Cover builder methods
+        VibrationEffect.startWaveform(targetAmplitude(1))
+                .addTransition(Duration.ofSeconds(1), targetAmplitude(0.5f), targetFrequency(100))
+                .addTransition(Duration.ZERO, targetAmplitude(0f), targetFrequency(200))
+                .addSustain(Duration.ofMinutes(2))
+                .addTransition(Duration.ofMillis(10), targetAmplitude(1f), targetFrequency(50))
+                .addSustain(Duration.ofMillis(1))
+                .addTransition(Duration.ZERO, targetFrequency(150))
+                .addSustain(Duration.ofMillis(2))
+                .addTransition(Duration.ofSeconds(15), targetAmplitude(1))
+                .build()
+                .validate();
+
+        // Make sure class summary javadoc examples compile and are valid.
+        // NOTE: IF THIS IS UPDATED, PLEASE ALSO UPDATE WaveformBuilder javadocs.
+        VibrationEffect.startWaveform(targetFrequency(60))
+                .addTransition(Duration.ofMillis(100), targetAmplitude(1), targetFrequency(120))
+                .addSustain(Duration.ofMillis(200))
+                .addTransition(Duration.ofMillis(100), targetAmplitude(0), targetFrequency(60))
+                .build()
+                .validate();
+        VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
+                .addOffDuration(Duration.ofMillis(20))
+                .repeatEffectIndefinitely(
+                        VibrationEffect.startWaveform(targetAmplitude(0.2f))
+                                .addSustain(Duration.ofMillis(10))
+                                .addTransition(Duration.ofMillis(20), targetAmplitude(0.4f))
+                                .addSustain(Duration.ofMillis(30))
+                                .addTransition(Duration.ofMillis(40), targetAmplitude(0.8f))
+                                .addSustain(Duration.ofMillis(50))
+                                .addTransition(Duration.ofMillis(60), targetAmplitude(0.2f))
+                                .build())
+                .compose()
+                .validate();
+        VibrationEffect.createWaveform(new long[]{10, 20, 30}, new int[]{51, 102, 204}, -1)
+                .validate();
+        VibrationEffect.startWaveform(targetAmplitude(0.2f))
+                .addSustain(Duration.ofMillis(10))
+                .addTransition(Duration.ZERO, targetAmplitude(0.4f))
+                .addSustain(Duration.ofMillis(20))
+                .addTransition(Duration.ZERO, targetAmplitude(0.8f))
+                .addSustain(Duration.ofMillis(30))
+                .build()
+                .validate();
+
+        assertThrows(IllegalStateException.class,
+                () -> VibrationEffect.startWaveform().build().validate());
+        assertThrows(IllegalArgumentException.class, () -> targetAmplitude(-2));
+        assertThrows(IllegalArgumentException.class, () -> targetFrequency(0));
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.startWaveform().addTransition(
+                        Duration.ofMillis(-10), targetAmplitude(1)).build().validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.startWaveform().addSustain(Duration.ZERO).build().validate());
+    }
+
+    @Test
+    public void testValidateComposed() {
+        // Cover builder methods
+        VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                .addEffect(TEST_ONE_SHOT)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f)
+                .addOffDuration(Duration.ofMillis(100))
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 0.5f, 10)
+                .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addEffect(VibrationEffect.createWaveform(new long[]{10, 20}, /* repeat= */ 0))
+                .compose()
+                .validate();
+        VibrationEffect.startComposition()
+                .repeatEffectIndefinitely(TEST_ONE_SHOT)
+                .compose()
+                .validate();
+
+        // Make sure class summary javadoc examples compile and are valid.
+        // NOTE: IF THIS IS UPDATED, PLEASE ALSO UPDATE Composition javadocs.
+        VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SLOW_RISE, 0.5f)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_FALL, 0.5f)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1.0f, 100)
+                .compose()
+                .validate();
+        VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_LOW_TICK)
+                .addOffDuration(Duration.ofMillis(10))
+                .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_DOUBLE_CLICK))
+                .addOffDuration(Duration.ofMillis(50))
+                .addEffect(VibrationEffect.createWaveform(new long[]{10, 20}, /* repeat= */ 0))
+                .compose()
+                .validate();
+
+        assertThrows(IllegalStateException.class,
+                () -> VibrationEffect.startComposition().compose().validate());
+        assertThrows(IllegalStateException.class,
+                () -> VibrationEffect.startComposition()
+                        .addOffDuration(Duration.ofSeconds(0))
+                        .compose()
+                        .validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.startComposition().addPrimitive(-1).compose().validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, -1, 10)
+                        .compose()
+                        .validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, -10)
+                        .compose()
+                        .validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, -1)
+                        .compose()
+                        .validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> VibrationEffect.startComposition()
+                        .repeatEffectIndefinitely(
+                                // Repeating waveform.
+                                VibrationEffect.createWaveform(
+                                        new long[] { 10 }, new int[] { 100}, 0))
+                        .compose()
+                        .validate());
+        assertThrows(UnreachableAfterRepeatingIndefinitelyException.class,
+                () -> VibrationEffect.startComposition()
+                        .repeatEffectIndefinitely(TEST_WAVEFORM)
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                        .compose()
+                        .validate());
+        assertThrows(UnreachableAfterRepeatingIndefinitelyException.class,
+                () -> VibrationEffect.startComposition()
+                        .repeatEffectIndefinitely(TEST_WAVEFORM)
+                        .addEffect(TEST_ONE_SHOT)
+                        .compose()
+                        .validate());
+    }
+
+    @Test
+    public void testResolveOneShot() {
+        VibrationEffect.Composed resolved = DEFAULT_ONE_SHOT.resolve(51);
+        assertEquals(0.2f, ((StepSegment) resolved.getSegments().get(0)).getAmplitude());
+
+        assertThrows(IllegalArgumentException.class, () -> DEFAULT_ONE_SHOT.resolve(1000));
+    }
+
+    @Test
+    public void testResolveWaveform() {
+        VibrationEffect.Composed resolved = TEST_WAVEFORM.resolve(102);
+        assertEquals(0.4f, ((StepSegment) resolved.getSegments().get(2)).getAmplitude());
+
+        assertThrows(IllegalArgumentException.class, () -> TEST_WAVEFORM.resolve(1000));
+    }
+
+    @Test
+    public void testResolvePrebaked() {
+        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+        assertEquals(effect, effect.resolve(51));
+    }
+
+    @Test
+    public void testResolveComposed() {
+        VibrationEffect effect = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 1)
+                .compose();
+        assertEquals(effect, effect.resolve(51));
+
+        VibrationEffect.Composed resolved = VibrationEffect.startComposition()
+                .addEffect(DEFAULT_ONE_SHOT)
+                .compose()
+                .resolve(51);
+        assertEquals(0.2f, ((StepSegment) resolved.getSegments().get(0)).getAmplitude());
+    }
+
+    @Test
+    public void testScaleOneShot() {
+        VibrationEffect.Composed scaledUp = TEST_ONE_SHOT.scale(1.5f);
+        assertTrue(100 / 255f < ((StepSegment) scaledUp.getSegments().get(0)).getAmplitude());
+
+        VibrationEffect.Composed scaledDown = TEST_ONE_SHOT.scale(0.5f);
+        assertTrue(100 / 255f > ((StepSegment) scaledDown.getSegments().get(0)).getAmplitude());
+    }
+
+    @Test
+    public void testScaleWaveform() {
+        VibrationEffect.Composed scaledUp = TEST_WAVEFORM.scale(1.5f);
+        assertEquals(1f, ((StepSegment) scaledUp.getSegments().get(0)).getAmplitude(), 1e-5f);
+
+        VibrationEffect.Composed scaledDown = TEST_WAVEFORM.scale(0.5f);
+        assertTrue(1f > ((StepSegment) scaledDown.getSegments().get(0)).getAmplitude());
+    }
+
+    @Test
+    public void testScalePrebaked() {
+        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+
+        VibrationEffect.Composed scaledUp = effect.scale(1.5f);
+        assertEquals(effect, scaledUp);
+
+        VibrationEffect.Composed scaledDown = effect.scale(0.5f);
+        assertEquals(effect, scaledDown);
+    }
+
+    @Test
+    public void testScaleComposed() {
+        VibrationEffect.Composed effect =
+                (VibrationEffect.Composed) VibrationEffect.startComposition()
+                    .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 0.5f, 1)
+                    .addEffect(TEST_ONE_SHOT)
+                    .compose();
+
+        VibrationEffect.Composed scaledUp = effect.scale(1.5f);
+        assertTrue(0.5f < ((PrimitiveSegment) scaledUp.getSegments().get(0)).getScale());
+        assertTrue(100 / 255f < ((StepSegment) scaledUp.getSegments().get(1)).getAmplitude());
+
+        VibrationEffect.Composed scaledDown = effect.scale(0.5f);
+        assertTrue(0.5f > ((PrimitiveSegment) scaledDown.getSegments().get(0)).getScale());
+        assertTrue(100 / 255f > ((StepSegment) scaledDown.getSegments().get(1)).getAmplitude());
+    }
+
+    private void doTestApplyRepeatingWithNonRepeatingOriginal(@NotNull VibrationEffect original) {
+        assertTrue(original.getDuration() != Long.MAX_VALUE);
+        int loopDelayMs = 123;
+        assertEquals(original, original.applyRepeatingIndefinitely(false, loopDelayMs));
+
+        // Looping with no delay gets the raw repeated effect.
+        VibrationEffect loopingOriginal = VibrationEffect.startComposition()
+                .repeatEffectIndefinitely(original)
+                .compose();
+        assertEquals(Long.MAX_VALUE, loopingOriginal.getDuration());
+        assertEquals(loopingOriginal, original.applyRepeatingIndefinitely(true, 0));
+
+        VibrationEffect loopingPart = VibrationEffect.startComposition()
+                .addEffect(original)
+                .addOffDuration(Duration.ofMillis(loopDelayMs))
+                .compose();
+
+        VibrationEffect loopingWithDelay = VibrationEffect.startComposition()
+                .repeatEffectIndefinitely(loopingPart)
+                .compose();
+        assertEquals(Long.MAX_VALUE, loopingWithDelay.getDuration());
+        assertEquals(loopingWithDelay, original.applyRepeatingIndefinitely(true, loopDelayMs));
+    }
+
+    @Test
+    public void testApplyRepeatingIndefinitely_nonRepeatingOriginal() {
+        VibrationEffect oneshot = VibrationEffect.createOneShot(100, DEFAULT_AMPLITUDE);
+        doTestApplyRepeatingWithNonRepeatingOriginal(oneshot);
+
+        VibrationEffect predefined = VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK);
+        doTestApplyRepeatingWithNonRepeatingOriginal(predefined);
+
+        VibrationEffect primitives = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 100)
+                .compose();
+        doTestApplyRepeatingWithNonRepeatingOriginal(primitives);
+
+        VibrationEffect legacyWaveform = VibrationEffect.createWaveform(
+                new long[]{1, 2, 3}, new int[]{1, 2, 3}, -1);
+        doTestApplyRepeatingWithNonRepeatingOriginal(legacyWaveform);
+
+        // Test a mix of segments ending in a delay, for completeness.
+        doTestApplyRepeatingWithNonRepeatingOriginal(VibrationEffect.startComposition()
+                .addEffect(oneshot)
+                .addEffect(predefined)
+                .addEffect(primitives)
+                .addEffect(legacyWaveform)
+                .addOffDuration(Duration.ofMillis(1000))
+                .compose());
+    }
+
+    @Test
+    public void testApplyRepeatingIndefinitely_repeatingOriginalWaveform() {
+        // The delay parameter has no effect when the effect is already repeating.
+        int delayMs = 999;
+        VibrationEffect waveformNoRepeat = VibrationEffect.createWaveform(
+                new long[]{1, 2, 3}, new int[]{1, 2, 3}, -1);
+        VibrationEffect waveformFullRepeat = VibrationEffect.createWaveform(
+                new long[]{1, 2, 3}, new int[]{1, 2, 3}, 0);
+        assertEquals(waveformFullRepeat,
+                waveformFullRepeat.applyRepeatingIndefinitely(true, delayMs));
+        assertEquals(waveformNoRepeat,
+                waveformFullRepeat.applyRepeatingIndefinitely(false, delayMs));
+
+        VibrationEffect waveformOffsetRepeat = VibrationEffect.createWaveform(
+                new long[]{1, 2, 3}, new int[]{1, 2, 3}, 1);
+        assertEquals(waveformOffsetRepeat,
+                waveformOffsetRepeat.applyRepeatingIndefinitely(true, delayMs));
+        assertEquals(waveformNoRepeat,
+                waveformOffsetRepeat.applyRepeatingIndefinitely(false, delayMs));
+    }
+
+    @Test
+    public void testApplyRepeatingIndefinitely_repeatingOriginalComposition() {
+        // The delay parameter has no effect when the effect is already repeating.
+        int delayMs = 999;
+        VibrationEffect innerEffect = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
+                .compose();
+
+        VibrationEffect repeatingOriginal = VibrationEffect.startComposition()
+                .repeatEffectIndefinitely(innerEffect)
+                .compose();
+        assertEquals(repeatingOriginal,
+                repeatingOriginal.applyRepeatingIndefinitely(true, delayMs));
+        assertEquals(innerEffect,
+                repeatingOriginal.applyRepeatingIndefinitely(false, delayMs));
+
+        VibrationEffect offsetOriginal = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD)
+                .repeatEffectIndefinitely(innerEffect)
+                .compose();
+        assertEquals(offsetOriginal,
+                offsetOriginal.applyRepeatingIndefinitely(true, delayMs));
+        assertEquals(VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
+                .compose(),
+                offsetOriginal.applyRepeatingIndefinitely(false, delayMs));
+    }
+
+    @Test
+    public void testDuration() {
+        assertEquals(1, VibrationEffect.createOneShot(1, 1).getDuration());
+        assertEquals(-1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK).getDuration());
+        assertEquals(-1,
+                VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 100)
+                        .compose()
+                        .getDuration());
+        assertEquals(6, VibrationEffect.createWaveform(
+                new long[]{1, 2, 3}, new int[]{1, 2, 3}, -1).getDuration());
+        assertEquals(Long.MAX_VALUE, VibrationEffect.createWaveform(
+                new long[]{1, 2, 3}, new int[]{1, 2, 3}, 0).getDuration());
+    }
+
+    @Test
+    public void testAreVibrationFeaturesSupported_allSegmentsSupported() {
+        Vibrator vibrator =
+                createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
+                        .setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL)
+                        .build());
+
+        assertTrue(VibrationEffect.createWaveform(
+                        /* timings= */ new long[] {1, 2, 3}, /* repeatIndex= */ -1)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(VibrationEffect.createWaveform(
+                        /* timings= */ new long[] {1, 2, 3},
+                        /* amplitudes= */ new int[] {10, 20, 40},
+                        /* repeatIndex= */ 2)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(
+                VibrationEffect.startComposition()
+                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
+                        .repeatEffectIndefinitely(TEST_ONE_SHOT)
+                        .compose()
+                .areVibrationFeaturesSupported(vibrator));
+    }
+
+    @Test
+    public void testAreVibrationFeaturesSupported_withUnsupportedSegments() {
+        Vibrator vibrator =
+                createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1).build());
+
+        assertFalse(
+                VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                        .addEffect(VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {1, 2, 3},
+                                /* amplitudes= */ new int[] {10, 20, 40},
+                                /* repeatIndex= */ -1))
+                        .compose()
+                .areVibrationFeaturesSupported(vibrator));
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidate_repeatingEffects_notCandidates() {
+        assertFalse(VibrationEffect.createWaveform(
+                new long[]{1, 2, 3}, new int[]{1, 2, 3}, 0).isHapticFeedbackCandidate());
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidate_longEffects_notCandidates() {
+        assertFalse(VibrationEffect.createOneShot(1500, 255).isHapticFeedbackCandidate());
+        assertFalse(VibrationEffect.createWaveform(
+                new long[]{200, 200, 700}, new int[]{1, 2, 3}, -1).isHapticFeedbackCandidate());
+        assertFalse(VibrationEffect.startWaveform()
+                .addTransition(Duration.ofMillis(500), targetAmplitude(1))
+                .addTransition(Duration.ofMillis(200), targetAmplitude(0.5f))
+                .addTransition(Duration.ofMillis(500), targetAmplitude(0))
+                .build()
+                .isHapticFeedbackCandidate());
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidate_shortEffects_areCandidates() {
+        assertTrue(VibrationEffect.createOneShot(500, 255).isHapticFeedbackCandidate());
+        assertTrue(VibrationEffect.createWaveform(
+                new long[]{100, 200, 300}, new int[]{1, 2, 3}, -1).isHapticFeedbackCandidate());
+        assertTrue(VibrationEffect.startWaveform()
+                .addTransition(Duration.ofMillis(300), targetAmplitude(1))
+                .addTransition(Duration.ofMillis(200), targetAmplitude(0.5f))
+                .addTransition(Duration.ofMillis(300), targetAmplitude(0))
+                .build()
+                .isHapticFeedbackCandidate());
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidate_longCompositions_notCandidates() {
+        assertFalse(VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_LOW_TICK)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SPIN)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SLOW_RISE)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_FALL)
+                .compose()
+                .isHapticFeedbackCandidate());
+
+        assertFalse(VibrationEffect.startComposition()
+                .addEffect(VibrationEffect.createOneShot(1500, 255))
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
+                .compose()
+                .isHapticFeedbackCandidate());
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidate_shortCompositions_areCandidates() {
+        assertTrue(VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SLOW_RISE)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_FALL)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                .compose()
+                .isHapticFeedbackCandidate());
+
+        assertTrue(VibrationEffect.startComposition()
+                .addEffect(VibrationEffect.createOneShot(100, 255))
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
+                .compose()
+                .isHapticFeedbackCandidate());
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidate_prebakedRingtones_notCandidates() {
+        assertFalse(VibrationEffect.get(
+                VibrationEffect.RINGTONES[1]).isHapticFeedbackCandidate());
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidate_prebakedNotRingtoneConstants_areCandidates() {
+        assertTrue(VibrationEffect.get(VibrationEffect.EFFECT_CLICK).isHapticFeedbackCandidate());
+        assertTrue(VibrationEffect.get(VibrationEffect.EFFECT_THUD).isHapticFeedbackCandidate());
+        assertTrue(VibrationEffect.get(VibrationEffect.EFFECT_TICK).isHapticFeedbackCandidate());
+    }
+
+    private void assertArrayEq(long[] expected, long[] actual) {
+        assertTrue(
+                String.format("Expected pattern %s, but was %s",
+                        Arrays.toString(expected), Arrays.toString(actual)),
+                Arrays.equals(expected, actual));
+    }
+
+    private Resources mockRingtoneResources() {
+        return mockRingtoneResources(new String[]{
+                RINGTONE_URI_1,
+                RINGTONE_URI_2,
+                RINGTONE_URI_3
+        });
+    }
+
+    private Resources mockRingtoneResources(String[] ringtoneUris) {
+        Resources mockResources = mock(Resources.class);
+        when(mockResources.getStringArray(R.array.config_ringtoneEffectUris))
+                .thenReturn(ringtoneUris);
+        return mockResources;
+    }
+
+    private Context mockContext(Resources resources) {
+        Context context = mock(Context.class);
+        ContentInterface contentInterface = mock(ContentInterface.class);
+        ContentResolver contentResolver = ContentResolver.wrap(contentInterface);
+
+        try {
+            // ContentResolver#uncanonicalize is final, so we need to mock the ContentInterface it
+            // delegates the call to for the tests that require matching with the mocked URIs.
+            when(contentInterface.uncanonicalize(any())).then(
+                    invocation -> invocation.getArgument(0));
+            when(context.getContentResolver()).thenReturn(contentResolver);
+            when(context.getResources()).thenReturn(resources);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+
+        return context;
+    }
+
+    private Vibrator createVibratorWithCustomInfo(VibratorInfo info) {
+        return new SystemVibrator(InstrumentationRegistry.getContext()) {
+            @Override
+            public VibratorInfo getInfo() {
+                return info;
+            }
+        };
+    }
+}
diff --git a/core/tests/vibrator/src/android/os/VibratorInfoTest.java b/core/tests/vibrator/src/android/os/VibratorInfoTest.java
new file mode 100644
index 0000000..ff917aa
--- /dev/null
+++ b/core/tests/vibrator/src/android/os/VibratorInfoTest.java
@@ -0,0 +1,338 @@
+/*
+ * 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 android.os;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import android.hardware.vibrator.Braking;
+import android.hardware.vibrator.IVibrator;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public class VibratorInfoTest {
+    private static final float TEST_TOLERANCE = 1e-5f;
+
+    private static final int TEST_VIBRATOR_ID = 1;
+    private static final float TEST_MIN_FREQUENCY = 50;
+    private static final float TEST_RESONANT_FREQUENCY = 150;
+    private static final float TEST_FREQUENCY_RESOLUTION = 25;
+    private static final float[] TEST_AMPLITUDE_MAP = new float[]{
+            /* 50Hz= */ 0.1f, 0.2f, 0.4f, 0.8f, /* 150Hz= */ 1f, 0.9f, /* 200Hz= */ 0.8f};
+
+    private static final VibratorInfo.FrequencyProfile EMPTY_FREQUENCY_PROFILE =
+            new VibratorInfo.FrequencyProfile(Float.NaN, Float.NaN, Float.NaN, null);
+    private static final VibratorInfo.FrequencyProfile TEST_FREQUENCY_PROFILE =
+            new VibratorInfo.FrequencyProfile(TEST_RESONANT_FREQUENCY, TEST_MIN_FREQUENCY,
+                    TEST_FREQUENCY_RESOLUTION, TEST_AMPLITUDE_MAP);
+
+    @Test
+    public void testHasAmplitudeControl() {
+        VibratorInfo noCapabilities = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
+        assertFalse(noCapabilities.hasAmplitudeControl());
+        VibratorInfo composeAndAmplitudeControl = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS | IVibrator.CAP_AMPLITUDE_CONTROL)
+                .build();
+        assertTrue(composeAndAmplitudeControl.hasAmplitudeControl());
+    }
+
+    @Test
+    public void testHasCapabilities() {
+        VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .build();
+        assertTrue(info.hasCapability(IVibrator.CAP_COMPOSE_EFFECTS));
+        assertFalse(info.hasCapability(IVibrator.CAP_AMPLITUDE_CONTROL));
+    }
+
+    @Test
+    public void testIsEffectSupported() {
+        VibratorInfo noEffects = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
+        VibratorInfo canClick = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
+                .setSupportedEffects(VibrationEffect.EFFECT_CLICK)
+                .build();
+        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_UNKNOWN,
+                noEffects.isEffectSupported(VibrationEffect.EFFECT_CLICK));
+        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_YES,
+                canClick.isEffectSupported(VibrationEffect.EFFECT_CLICK));
+        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_NO,
+                canClick.isEffectSupported(VibrationEffect.EFFECT_TICK));
+    }
+
+    @Test
+    public void testIsPrimitiveSupported() {
+        VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
+                .build();
+        assertTrue(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_CLICK));
+        assertFalse(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_TICK));
+
+        // Returns false when there is no compose capability.
+        info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
+                .build();
+        assertFalse(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_CLICK));
+    }
+
+    @Test
+    public void testGetPrimitiveDuration() {
+        VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 20)
+                .build();
+        assertEquals(20, info.getPrimitiveDuration(VibrationEffect.Composition.PRIMITIVE_CLICK));
+        assertEquals(0, info.getPrimitiveDuration(VibrationEffect.Composition.PRIMITIVE_TICK));
+        assertEquals(0, new VibratorInfo.Builder(TEST_VIBRATOR_ID).build()
+                .getPrimitiveDuration(VibrationEffect.Composition.PRIMITIVE_TICK));
+    }
+
+    @Test
+    public void testCompositionLimits() {
+        VibratorInfo info = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
+                .setPrimitiveDelayMax(100)
+                .setCompositionSizeMax(10)
+                .setPwlePrimitiveDurationMax(50)
+                .setPwleSizeMax(20)
+                .build();
+        assertEquals(100, info.getPrimitiveDelayMax());
+        assertEquals(10, info.getCompositionSizeMax());
+        assertEquals(50, info.getPwlePrimitiveDurationMax());
+        assertEquals(20, info.getPwleSizeMax());
+
+        VibratorInfo emptyInfo = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
+        assertEquals(0, emptyInfo.getPrimitiveDelayMax());
+        assertEquals(0, emptyInfo.getCompositionSizeMax());
+        assertEquals(0, emptyInfo.getPwlePrimitiveDurationMax());
+        assertEquals(0, emptyInfo.getPwleSizeMax());
+    }
+
+    @Test
+    public void testGetDefaultBraking_returnsFirstSupportedBraking() {
+        assertEquals(Braking.NONE, new VibratorInfo.Builder(
+                TEST_VIBRATOR_ID).build().getDefaultBraking());
+        assertEquals(Braking.CLAB,
+                new VibratorInfo.Builder(TEST_VIBRATOR_ID)
+                        .setSupportedBraking(Braking.NONE, Braking.CLAB)
+                        .build()
+                        .getDefaultBraking());
+    }
+
+    @Test
+    public void testGetFrequencyProfile_unsetProfileIsEmpty() {
+        assertTrue(
+                new VibratorInfo.Builder(TEST_VIBRATOR_ID).build().getFrequencyProfile().isEmpty());
+    }
+
+    @Test
+    public void testFrequencyProfile_invalidValuesCreatesEmptyProfile() {
+        // Invalid, contains NaN values or empty array.
+        assertTrue(new VibratorInfo.FrequencyProfile(
+                Float.NaN, 50, 25, TEST_AMPLITUDE_MAP).isEmpty());
+        assertTrue(new VibratorInfo.FrequencyProfile(
+                150, Float.NaN, 25, TEST_AMPLITUDE_MAP).isEmpty());
+        assertTrue(new VibratorInfo.FrequencyProfile(
+                150, 50, Float.NaN, TEST_AMPLITUDE_MAP).isEmpty());
+        assertTrue(new VibratorInfo.FrequencyProfile(150, 50, 25, null).isEmpty());
+        // Invalid, contains zero or negative frequency values.
+        assertTrue(new VibratorInfo.FrequencyProfile(-1, 50, 25, TEST_AMPLITUDE_MAP).isEmpty());
+        assertTrue(new VibratorInfo.FrequencyProfile(150, 0, 25, TEST_AMPLITUDE_MAP).isEmpty());
+        assertTrue(new VibratorInfo.FrequencyProfile(150, 50, -2, TEST_AMPLITUDE_MAP).isEmpty());
+        // Invalid max amplitude entries.
+        assertTrue(new VibratorInfo.FrequencyProfile(
+                150, 50, 50, new float[] { -1, 0, 1, 1, 0 }).isEmpty());
+        assertTrue(new VibratorInfo.FrequencyProfile(
+                150, 50, 50, new float[] { 0, 1, 2, 1, 0 }).isEmpty());
+        // Invalid, minFrequency > resonantFrequency
+        assertTrue(new VibratorInfo.FrequencyProfile(
+                /* resonantFrequencyHz= */ 150, /* minFrequencyHz= */ 250, 25, TEST_AMPLITUDE_MAP)
+                .isEmpty());
+        // Invalid, maxFrequency < resonantFrequency by changing resolution.
+        assertTrue(new VibratorInfo.FrequencyProfile(
+                150, 50, /* frequencyResolutionHz= */ 10, TEST_AMPLITUDE_MAP).isEmpty());
+    }
+
+    @Test
+    public void testGetFrequencyRangeHz_emptyProfileReturnsNull() {
+        assertNull(new VibratorInfo.FrequencyProfile(
+                Float.NaN, 50, 25, TEST_AMPLITUDE_MAP).getFrequencyRangeHz());
+        assertNull(new VibratorInfo.FrequencyProfile(
+                150, Float.NaN, 25, TEST_AMPLITUDE_MAP).getFrequencyRangeHz());
+        assertNull(new VibratorInfo.FrequencyProfile(
+                150, 50, Float.NaN, TEST_AMPLITUDE_MAP).getFrequencyRangeHz());
+        assertNull(new VibratorInfo.FrequencyProfile(150, 50, 25, null).getFrequencyRangeHz());
+    }
+
+    @Test
+    public void testGetFrequencyRangeHz_validProfileReturnsMappedValues() {
+        VibratorInfo.FrequencyProfile profile = new VibratorInfo.FrequencyProfile(
+                /* resonantFrequencyHz= */ 150,
+                /* minFrequencyHz= */ 50,
+                /* frequencyResolutionHz= */ 25,
+                /* maxAmplitudes= */ new float[]{
+                /* 50Hz= */ 0.1f, 0.2f, 0.4f, 0.8f, /* 150Hz= */ 1f, 0.9f,
+                /* 200Hz= */ 0.8f});
+
+        assertEquals(50f, profile.getFrequencyRangeHz().getLower(), TEST_TOLERANCE);
+        assertEquals(200f, profile.getFrequencyRangeHz().getUpper(), TEST_TOLERANCE);
+    }
+
+    @Test
+    public void testGetMaxAmplitude_emptyProfileReturnsAlwaysZero() {
+        VibratorInfo.FrequencyProfile profile = EMPTY_FREQUENCY_PROFILE;
+        assertEquals(0f, profile.getMaxAmplitude(Float.NaN), TEST_TOLERANCE);
+        assertEquals(0f, profile.getMaxAmplitude(100f), TEST_TOLERANCE);
+        assertEquals(0f, profile.getMaxAmplitude(200f), TEST_TOLERANCE);
+
+        profile = new VibratorInfo.FrequencyProfile(
+                        /* resonantFrequencyHz= */ 150,
+                        /* minFrequencyHz= */ Float.NaN,
+                        /* frequencyResolutionHz= */ Float.NaN,
+                        /* maxAmplitudes= */ null);
+
+        assertEquals(0f, profile.getMaxAmplitude(Float.NaN), TEST_TOLERANCE);
+        assertEquals(0f, profile.getMaxAmplitude(100f), TEST_TOLERANCE);
+        assertEquals(0f, profile.getMaxAmplitude(150f), TEST_TOLERANCE);
+    }
+
+    @Test
+    public void testGetMaxAmplitude_validProfileReturnsMappedValues() {
+        VibratorInfo.FrequencyProfile profile = new VibratorInfo.FrequencyProfile(
+                        /* resonantFrequencyHz= */ 150,
+                        /* minFrequencyHz= */ 50,
+                        /* frequencyResolutionHz= */ 25,
+                        /* maxAmplitudes= */ new float[]{
+                                /* 50Hz= */ 0.1f, 0.2f, 0.4f, 0.8f, /* 150Hz= */ 1f, 0.9f,
+                                /* 200Hz= */ 0.8f});
+
+        // Values in the max amplitudes array should return exact measurement.
+        assertEquals(1f, profile.getMaxAmplitude(150f), TEST_TOLERANCE);
+        assertEquals(0.9f, profile.getMaxAmplitude(175f), TEST_TOLERANCE);
+        assertEquals(0.8f, profile.getMaxAmplitude(125f), TEST_TOLERANCE);
+
+        // Min and max frequencies should return exact measurement from array.
+        assertEquals(0.8f, profile.getMaxAmplitude(200f), TEST_TOLERANCE);
+        assertEquals(0.1f, profile.getMaxAmplitude(50f), TEST_TOLERANCE);
+
+        // Values outside [50Hz, 200Hz] just return 0.
+        assertEquals(0f, profile.getMaxAmplitude(49f), TEST_TOLERANCE);
+        assertEquals(0f, profile.getMaxAmplitude(201f), TEST_TOLERANCE);
+
+        // 145Hz maps to linear value between 125Hz and 150Hz max amplitudes 0.8 and 1.
+        assertEquals(0.96f, profile.getMaxAmplitude(145f), TEST_TOLERANCE);
+        // 185Hz maps to linear value between 175Hz and 200Hz max amplitudes 0.9 and 0.8.
+        assertEquals(0.86f, profile.getMaxAmplitude(185f), TEST_TOLERANCE);
+    }
+
+    @Test
+    public void testEquals() {
+        VibratorInfo.Builder completeBuilder = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
+                .setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL)
+                .setSupportedEffects(VibrationEffect.EFFECT_CLICK)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 20)
+                .setPrimitiveDelayMax(100)
+                .setCompositionSizeMax(10)
+                .setSupportedBraking(Braking.CLAB)
+                .setPwlePrimitiveDurationMax(50)
+                .setPwleSizeMax(20)
+                .setQFactor(2f)
+                .setFrequencyProfile(TEST_FREQUENCY_PROFILE);
+        VibratorInfo complete = completeBuilder.build();
+
+        assertEquals(complete, complete);
+        assertEquals(complete, completeBuilder.build());
+        assertEquals(complete.hashCode(), completeBuilder.build().hashCode());
+
+        VibratorInfo completeWithComposeControl = completeBuilder
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .build();
+        assertNotEquals(complete, completeWithComposeControl);
+
+        VibratorInfo completeWithNoEffects = completeBuilder
+                .setSupportedEffects(new int[0])
+                .build();
+        assertNotEquals(complete, completeWithNoEffects);
+
+        VibratorInfo completeWithUnknownEffects = completeBuilder
+                .setSupportedEffects(null)
+                .build();
+        assertNotEquals(complete, completeWithUnknownEffects);
+
+        VibratorInfo completeWithDifferentPrimitiveDuration = completeBuilder
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
+                .build();
+        assertNotEquals(complete, completeWithDifferentPrimitiveDuration);
+
+        VibratorInfo completeWithDifferentFrequencyProfile = completeBuilder
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(
+                        TEST_RESONANT_FREQUENCY + 20,
+                        TEST_MIN_FREQUENCY + 10,
+                        TEST_FREQUENCY_RESOLUTION + 5,
+                        TEST_AMPLITUDE_MAP))
+                .build();
+        assertNotEquals(complete, completeWithDifferentFrequencyProfile);
+
+        VibratorInfo completeWithEmptyFrequencyProfile = completeBuilder
+                .setFrequencyProfile(EMPTY_FREQUENCY_PROFILE)
+                .build();
+        assertNotEquals(complete, completeWithEmptyFrequencyProfile);
+
+        VibratorInfo completeWithUnknownQFactor = completeBuilder.setQFactor(Float.NaN).build();
+        assertNotEquals(complete, completeWithUnknownQFactor);
+
+        VibratorInfo completeWithDifferentQFactor = completeBuilder
+                .setQFactor(complete.getQFactor() + 3f)
+                .build();
+        assertNotEquals(complete, completeWithDifferentQFactor);
+
+        VibratorInfo unknownEffectSupport = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
+        VibratorInfo knownEmptyEffectSupport = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
+                .setSupportedEffects(new int[0])
+                .build();
+        assertNotEquals(unknownEffectSupport, knownEmptyEffectSupport);
+
+        VibratorInfo unknownBrakingSupport = new VibratorInfo.Builder(TEST_VIBRATOR_ID).build();
+        VibratorInfo knownEmptyBrakingSupport = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
+                .setSupportedBraking(new int[0])
+                .build();
+        assertNotEquals(unknownBrakingSupport, knownEmptyBrakingSupport);
+    }
+
+    @Test
+    public void testParceling() {
+        VibratorInfo original = new VibratorInfo.Builder(TEST_VIBRATOR_ID)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .setSupportedEffects(VibrationEffect.EFFECT_CLICK)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 20)
+                .setQFactor(Float.NaN)
+                .setFrequencyProfile(TEST_FREQUENCY_PROFILE)
+                .build();
+
+        Parcel parcel = Parcel.obtain();
+        original.writeToParcel(parcel, 0);
+        parcel.setDataPosition(0);
+        VibratorInfo restored = VibratorInfo.CREATOR.createFromParcel(parcel);
+        assertEquals(original, restored);
+        assertEquals(original.hashCode(), restored.hashCode());
+    }
+}
diff --git a/core/tests/vibrator/src/android/os/VibratorTest.java b/core/tests/vibrator/src/android/os/VibratorTest.java
new file mode 100644
index 0000000..c559e34
--- /dev/null
+++ b/core/tests/vibrator/src/android/os/VibratorTest.java
@@ -0,0 +1,788 @@
+/*
+ * 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 android.os;
+
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+import static junit.framework.TestCase.assertEquals;
+
+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;
+import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.Mockito.inOrder;
+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.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.hardware.vibrator.IVibrator;
+import android.media.AudioAttributes;
+import android.os.test.TestLooper;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.util.test.FakeSettingsProvider;
+import com.android.internal.util.test.FakeSettingsProviderRule;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.InOrder;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class VibratorTest {
+
+    @Rule
+    public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule();
+
+    private static final float TEST_TOLERANCE = 1e-5f;
+
+    private Context mContextSpy;
+    private Vibrator mVibratorSpy;
+    private TestLooper mTestLooper;
+
+    @Before
+    public void setUp() {
+        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
+
+        ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy);
+        when(mContextSpy.getContentResolver()).thenReturn(contentResolver);
+        mVibratorSpy = spy(new SystemVibrator(mContextSpy));
+        mTestLooper = new TestLooper();
+    }
+
+    @Test
+    public void getId_returnsDefaultId() {
+        assertEquals(-1, mVibratorSpy.getId());
+        assertEquals(-1, new SystemVibrator.NoVibratorInfo().getId());
+        assertEquals(-1, new SystemVibrator.MultiVibratorInfo(new VibratorInfo[] {
+                VibratorInfo.EMPTY_VIBRATOR_INFO, VibratorInfo.EMPTY_VIBRATOR_INFO }).getId());
+    }
+
+    @Test
+    public void areEffectsSupported_returnsArrayOfSameSize() {
+        assertEquals(0, mVibratorSpy.areEffectsSupported(new int[0]).length);
+        assertEquals(1,
+                mVibratorSpy.areEffectsSupported(new int[]{VibrationEffect.EFFECT_CLICK}).length);
+        assertEquals(2,
+                mVibratorSpy.areEffectsSupported(new int[]{VibrationEffect.EFFECT_CLICK,
+                        VibrationEffect.EFFECT_TICK}).length);
+    }
+
+    @Test
+    public void areEffectsSupported_noVibrator_returnsAlwaysNo() {
+        VibratorInfo info = new SystemVibrator.NoVibratorInfo();
+        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_NO,
+                info.isEffectSupported(VibrationEffect.EFFECT_CLICK));
+    }
+
+    @Test
+    public void areEffectsSupported_unsupportedInOneVibrator_returnsNo() {
+        VibratorInfo supportedVibrator = new VibratorInfo.Builder(/* id= */ 1)
+                .setSupportedEffects(VibrationEffect.EFFECT_CLICK)
+                .build();
+        VibratorInfo unsupportedVibrator = new VibratorInfo.Builder(/* id= */ 2)
+                .setSupportedEffects(new int[0])
+                .build();
+        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{supportedVibrator, unsupportedVibrator});
+        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_NO,
+                info.isEffectSupported(VibrationEffect.EFFECT_CLICK));
+    }
+
+    @Test
+    public void areEffectsSupported_unknownInOneVibrator_returnsUnknown() {
+        VibratorInfo supportedVibrator = new VibratorInfo.Builder(/* id= */ 1)
+                .setSupportedEffects(VibrationEffect.EFFECT_CLICK)
+                .build();
+        VibratorInfo unknownSupportVibrator = VibratorInfo.EMPTY_VIBRATOR_INFO;
+        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{supportedVibrator, unknownSupportVibrator});
+        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_UNKNOWN,
+                info.isEffectSupported(VibrationEffect.EFFECT_CLICK));
+    }
+
+    @Test
+    public void arePrimitivesSupported_supportedInAllVibrators_returnsYes() {
+        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
+                .setSupportedEffects(VibrationEffect.EFFECT_CLICK)
+                .build();
+        VibratorInfo secondVibrator = new VibratorInfo.Builder(/* id= */ 2)
+                .setSupportedEffects(VibrationEffect.EFFECT_CLICK)
+                .build();
+        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, secondVibrator});
+        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_YES,
+                info.isEffectSupported(VibrationEffect.EFFECT_CLICK));
+    }
+
+    @Test
+    public void arePrimitivesSupported_returnsArrayOfSameSize() {
+        assertEquals(0, mVibratorSpy.arePrimitivesSupported(new int[0]).length);
+        assertEquals(1, mVibratorSpy.arePrimitivesSupported(
+                new int[]{VibrationEffect.Composition.PRIMITIVE_CLICK}).length);
+        assertEquals(2, mVibratorSpy.arePrimitivesSupported(
+                new int[]{VibrationEffect.Composition.PRIMITIVE_CLICK,
+                        VibrationEffect.Composition.PRIMITIVE_QUICK_RISE}).length);
+    }
+
+    @Test
+    public void arePrimitivesSupported_noVibrator_returnsAlwaysFalse() {
+        VibratorInfo info = new SystemVibrator.NoVibratorInfo();
+        assertFalse(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_CLICK));
+    }
+
+    @Test
+    public void arePrimitivesSupported_unsupportedInOneVibrator_returnsFalse() {
+        VibratorInfo supportedVibrator = new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
+                .build();
+        VibratorInfo unsupportedVibrator = VibratorInfo.EMPTY_VIBRATOR_INFO;
+        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{supportedVibrator, unsupportedVibrator});
+        assertFalse(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_CLICK));
+    }
+
+    @Test
+    public void arePrimitivesSupported_supportedInAllVibrators_returnsTrue() {
+        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 5)
+                .build();
+        VibratorInfo secondVibrator = new VibratorInfo.Builder(/* id= */ 2)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 15)
+                .build();
+        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, secondVibrator});
+        assertTrue(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_CLICK));
+    }
+
+    @Test
+    public void getPrimitivesDurations_returnsArrayOfSameSize() {
+        assertEquals(0, mVibratorSpy.getPrimitiveDurations(new int[0]).length);
+        assertEquals(1, mVibratorSpy.getPrimitiveDurations(
+                new int[]{VibrationEffect.Composition.PRIMITIVE_CLICK}).length);
+        assertEquals(2, mVibratorSpy.getPrimitiveDurations(
+                new int[]{VibrationEffect.Composition.PRIMITIVE_CLICK,
+                        VibrationEffect.Composition.PRIMITIVE_QUICK_RISE}).length);
+    }
+
+    @Test
+    public void getPrimitivesDurations_noVibrator_returnsAlwaysZero() {
+        VibratorInfo info = new SystemVibrator.NoVibratorInfo();
+        assertEquals(0, info.getPrimitiveDuration(VibrationEffect.Composition.PRIMITIVE_CLICK));
+    }
+
+    @Test
+    public void getPrimitivesDurations_unsupportedInOneVibrator_returnsZero() {
+        VibratorInfo supportedVibrator = new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
+                .build();
+        VibratorInfo unsupportedVibrator = VibratorInfo.EMPTY_VIBRATOR_INFO;
+        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{supportedVibrator, unsupportedVibrator});
+        assertEquals(0, info.getPrimitiveDuration(VibrationEffect.Composition.PRIMITIVE_CLICK));
+    }
+
+    @Test
+    public void getPrimitivesDurations_supportedInAllVibrators_returnsMaxDuration() {
+        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
+                .build();
+        VibratorInfo secondVibrator = new VibratorInfo.Builder(/* id= */ 2)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 20)
+                .build();
+        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, secondVibrator});
+        assertEquals(20, info.getPrimitiveDuration(VibrationEffect.Composition.PRIMITIVE_CLICK));
+    }
+
+    @Test
+    public void getQFactorAndResonantFrequency_noVibrator_returnsNaN() {
+        VibratorInfo info = new SystemVibrator.NoVibratorInfo();
+
+        assertTrue(Float.isNaN(info.getQFactor()));
+        assertTrue(Float.isNaN(info.getResonantFrequencyHz()));
+    }
+
+    @Test
+    public void getQFactorAndResonantFrequency_differentValues_returnsNaN() {
+        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setQFactor(1f)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(1, 1, 1, null))
+                .build();
+        VibratorInfo secondVibrator = new VibratorInfo.Builder(/* id= */ 2)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setQFactor(2f)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(2, 2, 2, null))
+                .build();
+        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, secondVibrator});
+
+        assertTrue(Float.isNaN(info.getQFactor()));
+        assertTrue(Float.isNaN(info.getResonantFrequencyHz()));
+        assertEmptyFrequencyProfileAndControl(info);
+
+        // One vibrator with values undefined.
+        VibratorInfo thirdVibrator = new VibratorInfo.Builder(/* id= */ 3).build();
+        info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, thirdVibrator});
+
+        assertTrue(Float.isNaN(info.getQFactor()));
+        assertTrue(Float.isNaN(info.getResonantFrequencyHz()));
+        assertEmptyFrequencyProfileAndControl(info);
+    }
+
+    @Test
+    public void getQFactorAndResonantFrequency_sameValues_returnsValue() {
+        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setQFactor(10f)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(
+                        /* resonantFrequencyHz= */ 11, 10, 0.5f, null))
+                .build();
+        VibratorInfo secondVibrator = new VibratorInfo.Builder(/* id= */ 2)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setQFactor(10f)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(
+                        /* resonantFrequencyHz= */ 11, 5, 1, null))
+                .build();
+        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, secondVibrator});
+
+        assertEquals(10f, info.getQFactor(), TEST_TOLERANCE);
+        assertEquals(11f, info.getResonantFrequencyHz(), TEST_TOLERANCE);
+
+        // No frequency range defined.
+        assertTrue(info.getFrequencyProfile().isEmpty());
+        assertEquals(false, info.hasCapability(IVibrator.CAP_FREQUENCY_CONTROL));
+    }
+
+    @Test
+    public void getFrequencyProfile_noVibrator_returnsEmpty() {
+        VibratorInfo info = new SystemVibrator.NoVibratorInfo();
+
+        assertEmptyFrequencyProfileAndControl(info);
+    }
+
+    @Test
+    public void getFrequencyProfile_differentResonantFrequencyOrResolutionValues_returnsEmpty() {
+        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(1, 1, 1,
+                        new float[] { 0, 1 }))
+                .build();
+        VibratorInfo differentResonantFrequency = new VibratorInfo.Builder(/* id= */ 2)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(2, 1, 1,
+                        new float[] { 0, 1 }))
+                .build();
+        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, differentResonantFrequency});
+
+        assertEmptyFrequencyProfileAndControl(info);
+
+        VibratorInfo differentFrequencyResolution = new VibratorInfo.Builder(/* id= */ 2)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(1, 1, 2,
+                        new float[] { 0, 1 }))
+                .build();
+        info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, differentFrequencyResolution});
+
+        assertEmptyFrequencyProfileAndControl(info);
+    }
+
+    @Test
+    public void getFrequencyProfile_missingValues_returnsEmpty() {
+        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(1, 1, 1,
+                        new float[] { 0, 1 }))
+                .build();
+        VibratorInfo missingResonantFrequency = new VibratorInfo.Builder(/* id= */ 2)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(Float.NaN, 1, 1,
+                        new float[] { 0, 1 }))
+                .build();
+        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, missingResonantFrequency});
+
+        assertEmptyFrequencyProfileAndControl(info);
+
+        VibratorInfo missingMinFrequency = new VibratorInfo.Builder(/* id= */ 2)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(1, Float.NaN, 1,
+                        new float[] { 0, 1 }))
+                .build();
+        info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, missingMinFrequency});
+
+        assertEmptyFrequencyProfileAndControl(info);
+
+        VibratorInfo missingFrequencyResolution = new VibratorInfo.Builder(/* id= */ 2)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(1, 1, Float.NaN,
+                        new float[] { 0, 1 }))
+                .build();
+        info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, missingFrequencyResolution});
+
+        assertEmptyFrequencyProfileAndControl(info);
+
+        VibratorInfo missingMaxAmplitudes = new VibratorInfo.Builder(/* id= */ 2)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(1, 1, 1, null))
+                .build();
+        info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, missingMaxAmplitudes});
+
+        assertEmptyFrequencyProfileAndControl(info);
+    }
+
+    @Test
+    public void getFrequencyProfile_unalignedMaxAmplitudes_returnsEmpty() {
+        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(11, 10, 0.5f,
+                        new float[] { 0, 1, 1, 0 }))
+                .build();
+        VibratorInfo unalignedMinFrequency = new VibratorInfo.Builder(/* id= */ 2)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(11, 10.1f, 0.5f,
+                        new float[] { 0, 1, 1, 0 }))
+                .build();
+        VibratorInfo thirdVibrator = new VibratorInfo.Builder(/* id= */ 2)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(11, 10.5f, 0.5f,
+                        new float[] { 0, 1, 1, 0 }))
+                .build();
+        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, unalignedMinFrequency, thirdVibrator});
+
+        assertEmptyFrequencyProfileAndControl(info);
+    }
+
+    @Test
+    public void getFrequencyProfile_alignedProfiles_returnsIntersection() {
+        VibratorInfo firstVibrator = new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(11, 10, 0.5f,
+                        new float[] { 0.5f, 1, 1, 0.5f }))
+                .build();
+        VibratorInfo secondVibrator = new VibratorInfo.Builder(/* id= */ 2)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(11, 10.5f, 0.5f,
+                        new float[] { 1, 1, 1 }))
+                .build();
+        VibratorInfo thirdVibrator = new VibratorInfo.Builder(/* id= */ 3)
+                .setCapabilities(IVibrator.CAP_FREQUENCY_CONTROL)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(11, 10.5f, 0.5f,
+                        new float[] { 0.8f, 1, 0.8f, 0.5f }))
+                .build();
+        VibratorInfo info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, secondVibrator, thirdVibrator});
+
+        assertEquals(
+                new VibratorInfo.FrequencyProfile(11, 10.5f, 0.5f, new float[] { 0.8f, 1, 0.5f }),
+                info.getFrequencyProfile());
+        assertEquals(true, info.hasCapability(IVibrator.CAP_FREQUENCY_CONTROL));
+
+        // Third vibrator without frequency control capability.
+        thirdVibrator = new VibratorInfo.Builder(/* id= */ 3)
+                .setFrequencyProfile(new VibratorInfo.FrequencyProfile(11, 10.5f, 0.5f,
+                        new float[] { 0.8f, 1, 0.8f, 0.5f }))
+                .build();
+        info = new SystemVibrator.MultiVibratorInfo(
+                new VibratorInfo[]{firstVibrator, secondVibrator, thirdVibrator});
+
+        assertEquals(
+                new VibratorInfo.FrequencyProfile(11, 10.5f, 0.5f, new float[] { 0.8f, 1, 0.5f }),
+                info.getFrequencyProfile());
+        assertEquals(false, info.hasCapability(IVibrator.CAP_FREQUENCY_CONTROL));
+    }
+
+    @Test
+    public void onVibratorStateChanged_noVibrator_registersNoListenerToVibratorManager() {
+        VibratorManager mockVibratorManager = mock(VibratorManager.class);
+        when(mockVibratorManager.getVibratorIds()).thenReturn(new int[0]);
+
+        Vibrator.OnVibratorStateChangedListener mockListener =
+                mock(Vibrator.OnVibratorStateChangedListener.class);
+        SystemVibrator.MultiVibratorStateListener multiVibratorListener =
+                new SystemVibrator.MultiVibratorStateListener(
+                        mTestLooper.getNewExecutor(), mockListener);
+
+        multiVibratorListener.register(mockVibratorManager);
+
+        // Never tries to register a listener to an individual vibrator.
+        assertFalse(multiVibratorListener.hasRegisteredListeners());
+        verify(mockVibratorManager, never()).getVibrator(anyInt());
+    }
+
+    @Test
+    public void onVibratorStateChanged_singleVibrator_forwardsAllCallbacks() {
+        VibratorManager mockVibratorManager = mock(VibratorManager.class);
+        when(mockVibratorManager.getVibratorIds()).thenReturn(new int[] { 1 });
+        when(mockVibratorManager.getVibrator(anyInt())).thenReturn(NullVibrator.getInstance());
+
+        Vibrator.OnVibratorStateChangedListener mockListener =
+                mock(Vibrator.OnVibratorStateChangedListener.class);
+        SystemVibrator.MultiVibratorStateListener multiVibratorListener =
+                new SystemVibrator.MultiVibratorStateListener(
+                        mTestLooper.getNewExecutor(), mockListener);
+
+        multiVibratorListener.register(mockVibratorManager);
+        assertTrue(multiVibratorListener.hasRegisteredListeners());
+
+        multiVibratorListener.onVibrating(/* vibratorIdx= */ 0, /* vibrating= */ false);
+        multiVibratorListener.onVibrating(/* vibratorIdx= */ 0, /* vibrating= */ true);
+        multiVibratorListener.onVibrating(/* vibratorIdx= */ 0, /* vibrating= */ false);
+
+        mTestLooper.dispatchAll();
+
+        InOrder inOrder = inOrder(mockListener);
+        inOrder.verify(mockListener).onVibratorStateChanged(eq(false));
+        inOrder.verify(mockListener).onVibratorStateChanged(eq(true));
+        inOrder.verify(mockListener).onVibratorStateChanged(eq(false));
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void onVibratorStateChanged_multipleVibrators_triggersOnlyWhenAllVibratorsInitialized() {
+        VibratorManager mockVibratorManager = mock(VibratorManager.class);
+        when(mockVibratorManager.getVibratorIds()).thenReturn(new int[] { 1, 2 });
+        when(mockVibratorManager.getVibrator(anyInt())).thenReturn(NullVibrator.getInstance());
+
+        Vibrator.OnVibratorStateChangedListener mockListener =
+                mock(Vibrator.OnVibratorStateChangedListener.class);
+        SystemVibrator.MultiVibratorStateListener multiVibratorListener =
+                new SystemVibrator.MultiVibratorStateListener(
+                        mTestLooper.getNewExecutor(), mockListener);
+
+        multiVibratorListener.register(mockVibratorManager);
+        assertTrue(multiVibratorListener.hasRegisteredListeners());
+
+        multiVibratorListener.onVibrating(/* vibratorIdx= */ 0, /* vibrating= */ false);
+        mTestLooper.dispatchAll();
+        verify(mockListener, never()).onVibratorStateChanged(anyBoolean());
+
+        multiVibratorListener.onVibrating(/* vibratorIdx= */ 1, /* vibrating= */ false);
+        mTestLooper.dispatchAll();
+        verify(mockListener).onVibratorStateChanged(eq(false));
+        verifyNoMoreInteractions(mockListener);
+    }
+
+    @Test
+    public void onVibratorStateChanged_multipleVibrators_stateChangeIsDeduped() {
+        VibratorManager mockVibratorManager = mock(VibratorManager.class);
+        when(mockVibratorManager.getVibratorIds()).thenReturn(new int[] { 1, 2 });
+        when(mockVibratorManager.getVibrator(anyInt())).thenReturn(NullVibrator.getInstance());
+
+        Vibrator.OnVibratorStateChangedListener mockListener =
+                mock(Vibrator.OnVibratorStateChangedListener.class);
+        SystemVibrator.MultiVibratorStateListener multiVibratorListener =
+                new SystemVibrator.MultiVibratorStateListener(
+                        mTestLooper.getNewExecutor(), mockListener);
+
+        multiVibratorListener.register(mockVibratorManager);
+        assertTrue(multiVibratorListener.hasRegisteredListeners());
+
+        multiVibratorListener.onVibrating(/* vibratorIdx= */ 0, /* vibrating= */ false); // none
+        multiVibratorListener.onVibrating(/* vibratorIdx= */ 1, /* vibrating= */ false); // false
+        multiVibratorListener.onVibrating(/* vibratorIdx= */ 0, /* vibrating= */ true);  // true
+        multiVibratorListener.onVibrating(/* vibratorIdx= */ 1, /* vibrating= */ true);  // true
+        multiVibratorListener.onVibrating(/* vibratorIdx= */ 0, /* vibrating= */ false); // true
+        multiVibratorListener.onVibrating(/* vibratorIdx= */ 1, /* vibrating= */ false); // false
+
+        mTestLooper.dispatchAll();
+
+        InOrder inOrder = inOrder(mockListener);
+        inOrder.verify(mockListener).onVibratorStateChanged(eq(false));
+        inOrder.verify(mockListener).onVibratorStateChanged(eq(true));
+        inOrder.verify(mockListener).onVibratorStateChanged(eq(false));
+        inOrder.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void vibrate_withVibrationAttributes_usesGivenAttributes() {
+        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+        VibrationAttributes attributes = new VibrationAttributes.Builder().setUsage(
+                VibrationAttributes.USAGE_TOUCH).build();
+
+        mVibratorSpy.vibrate(effect, attributes);
+
+        verify(mVibratorSpy).vibrate(anyInt(), anyString(), eq(effect), isNull(), eq(attributes));
+    }
+
+    @Test
+    public void vibrate_withAudioAttributes_createsVibrationAttributesWithSameUsage() {
+        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+        AudioAttributes audioAttributes = new AudioAttributes.Builder().setUsage(
+                AudioAttributes.USAGE_VOICE_COMMUNICATION).build();
+
+        mVibratorSpy.vibrate(effect, audioAttributes);
+
+        ArgumentCaptor<VibrationAttributes> captor = ArgumentCaptor.forClass(
+                VibrationAttributes.class);
+        verify(mVibratorSpy).vibrate(anyInt(), anyString(), eq(effect), isNull(), captor.capture());
+
+        VibrationAttributes vibrationAttributes = captor.getValue();
+        assertEquals(VibrationAttributes.USAGE_COMMUNICATION_REQUEST,
+                vibrationAttributes.getUsage());
+        // Keeps original AudioAttributes usage to be used by the VibratorService.
+        assertEquals(AudioAttributes.USAGE_VOICE_COMMUNICATION,
+                vibrationAttributes.getAudioUsage());
+    }
+
+    @Test
+    public void vibrate_withoutAudioAttributes_passesOnDefaultAttributes() {
+        mVibratorSpy.vibrate(VibrationEffect.get(VibrationEffect.EFFECT_CLICK));
+
+        ArgumentCaptor<VibrationAttributes> captor = ArgumentCaptor.forClass(
+                VibrationAttributes.class);
+        verify(mVibratorSpy).vibrate(anyInt(), anyString(), any(), isNull(), captor.capture());
+
+        VibrationAttributes vibrationAttributes = captor.getValue();
+        assertEquals(new VibrationAttributes.Builder().build(), vibrationAttributes);
+    }
+
+    @Test
+    public void areVibrationFeaturesSupported_noAmplitudeControl_fractionalAmplitudes() {
+        Vibrator vibrator =
+                createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
+                        .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                        .setSupportedEffects(VibrationEffect.EFFECT_THUD)
+                        .build());
+
+        // Have at least one fractional amplitude (amplitude not min (0) or max (255) or DEFAULT).
+        assertFalse(vibrator.areVibrationFeaturesSupported(waveformWithAmplitudes(10, 30)));
+        assertFalse(vibrator.areVibrationFeaturesSupported(waveformWithAmplitudes(10, 255)));
+        assertFalse(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.createOneShot(20, /* amplitude= */ 40)));
+    }
+
+    @Test
+    public void areVibrationFeaturesSupported_noAmplitudeControl_nonFractionalAmplitudes() {
+        Vibrator vibrator =
+                createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
+                        .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                        .setSupportedEffects(VibrationEffect.EFFECT_THUD)
+                        .build());
+
+        // All amplitudes are min, max, or default. Requires no amplitude control.
+        assertTrue(vibrator.areVibrationFeaturesSupported(
+                waveformWithAmplitudes(255, 0, VibrationEffect.DEFAULT_AMPLITUDE, 255)));
+        assertTrue(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.createWaveform(
+                        /* timings= */ new long[] {1, 2, 3}, /* repeatIndex= */ -1)));
+        assertTrue(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.createOneShot(20, VibrationEffect.DEFAULT_AMPLITUDE)));
+        assertTrue(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.createOneShot(20, /* amplitude= */ 255)));
+    }
+
+    @Test
+    public void areVibrationFeaturesSupported_withAmplitudeControl() {
+        Vibrator vibrator =
+                createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
+                        .setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL)
+                        .build());
+
+        // All forms of amplitudes are valid when amplitude control is available.
+        assertTrue(vibrator.areVibrationFeaturesSupported(
+                waveformWithAmplitudes(255, 0, VibrationEffect.DEFAULT_AMPLITUDE, 255)));
+        assertTrue(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.createWaveform(
+                        /* timings= */ new long[] {1, 2, 3}, /* repeatIndex= */ -1)));
+        assertTrue(vibrator.areVibrationFeaturesSupported(waveformWithAmplitudes(10, 30, 50)));
+        assertTrue(vibrator.areVibrationFeaturesSupported(
+                waveformWithAmplitudes(7, 255, 0, 0, 60)));
+        assertTrue(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.createOneShot(20, VibrationEffect.DEFAULT_AMPLITUDE)));
+        assertTrue(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.createOneShot(20, /* amplitude= */ 255)));
+        assertTrue(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.createOneShot(20, /* amplitude= */ 40)));
+    }
+
+    @Test
+    public void areVibrationFeaturesSupported_primitiveCompositionsWithSupportedPrimitives() {
+        Vibrator vibrator = createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
+                .build());
+
+        assertTrue(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                        .compose()));
+        assertTrue(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.startComposition()
+                        .addPrimitive(
+                                VibrationEffect.Composition.PRIMITIVE_CLICK,
+                                /* scale= */ 0.2f,
+                                /* delay= */ 200)
+                        .compose()));
+    }
+
+    @Test
+    public void areVibrationFeaturesSupported_primitiveCompositionsWithUnupportedPrimitives() {
+        Vibrator vibrator = createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
+                .build());
+
+        assertFalse(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD)
+                        .compose()));
+        assertFalse(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_LOW_TICK)
+                        .compose()));
+    }
+
+    @Test
+    public void areVibrationFeaturesSupported_composedEffects_allComponentsSupported() {
+        Vibrator vibrator = createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS | IVibrator.CAP_AMPLITUDE_CONTROL)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
+                .setSupportedEffects(VibrationEffect.EFFECT_TICK, VibrationEffect.EFFECT_POP)
+                .build());
+
+        assertTrue(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                        .addEffect(VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {1, 2, 3},
+                                /* amplitudes= */ new int[] {10, 20, 255},
+                                /* repeatIndex= */ -1))
+                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
+                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_POP))
+                        .compose()));
+
+        vibrator = createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD, 10)
+                .setSupportedEffects(VibrationEffect.EFFECT_POP, VibrationEffect.EFFECT_CLICK)
+                .build());
+
+        assertTrue(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD)
+                        .addEffect(VibrationEffect.createWaveform(
+                                // These timings are given either 0 or default amplitudes, which
+                                // do not require vibrator's amplitude control.
+                                /* timings= */ new long[] {1, 2, 3},
+                                /* repeatIndex= */ -1))
+                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_POP))
+                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
+                        .compose()));
+    }
+
+    @Test
+    public void areVibrationFeaturesSupported_composedEffects_someComponentsUnupported() {
+        Vibrator vibrator = createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS | IVibrator.CAP_AMPLITUDE_CONTROL)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 10)
+                .setSupportedEffects(VibrationEffect.EFFECT_TICK, VibrationEffect.EFFECT_POP)
+                .build());
+
+        // Not supported due to the TICK primitive, which the vibrator has no support for.
+        assertFalse(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
+                        .addEffect(VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {1, 2, 3},
+                                /* amplitudes= */ new int[] {10, 20, 255},
+                                /* repeatIndex= */ -1))
+                        .compose()));
+        // Not supported due to the THUD effect, which the vibrator has no support for.
+        assertFalse(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                        .addEffect(VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {1, 2, 3},
+                                /* amplitudes= */ new int[] {10, 20, 255},
+                                /* repeatIndex= */ -1))
+                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_THUD))
+                        .compose()));
+
+        vibrator = createVibratorWithCustomInfo(new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                .setSupportedPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD, 10)
+                .setSupportedEffects(VibrationEffect.EFFECT_POP)
+                .build());
+
+        // Not supported due to fractional amplitudes (amplitudes not min (0) or max (255) or
+        // DEFAULT), because the vibrator has no amplitude control.
+        assertFalse(vibrator.areVibrationFeaturesSupported(
+                VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD)
+                        .addEffect(VibrationEffect.createWaveform(
+                                /* timings= */ new long[] {1, 2, 3},
+                                /* amplitudes= */ new int[] {10, 20, 255},
+                                /* repeatIndex= */ -1))
+                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_POP))
+                        .compose()));
+    }
+
+    /**
+     * Asserts that the frequency profile is empty, and therefore frequency control isn't supported.
+     */
+    void assertEmptyFrequencyProfileAndControl(VibratorInfo info) {
+        assertTrue(info.getFrequencyProfile().isEmpty());
+        assertEquals(false, info.hasCapability(IVibrator.CAP_FREQUENCY_CONTROL));
+    }
+
+    private Vibrator createVibratorWithCustomInfo(VibratorInfo info) {
+        return new SystemVibrator(mContextSpy) {
+            @Override
+            public VibratorInfo getInfo() {
+                return info;
+            }
+        };
+    }
+
+    private static VibrationEffect waveformWithAmplitudes(int...amplitudes) {
+        long[] timings = new long[amplitudes.length];
+        for (int i = 0; i < timings.length; i++) {
+            timings[i] = i * 2; // Arbitrary timings.
+        }
+        return VibrationEffect.createWaveform(timings, amplitudes, /* repeatIndex= */ -1);
+    }
+}
diff --git a/core/tests/vibrator/src/android/os/vibrator/PrebakedSegmentTest.java b/core/tests/vibrator/src/android/os/vibrator/PrebakedSegmentTest.java
new file mode 100644
index 0000000..8268077
--- /dev/null
+++ b/core/tests/vibrator/src/android/os/vibrator/PrebakedSegmentTest.java
@@ -0,0 +1,296 @@
+/*
+ * 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 android.os.vibrator;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertSame;
+import static junit.framework.Assert.assertTrue;
+
+import static org.testng.Assert.assertNotEquals;
+import static org.testng.Assert.assertThrows;
+
+import android.os.Parcel;
+import android.os.SystemVibrator;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.os.VibratorInfo;
+
+import androidx.test.InstrumentationRegistry;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class PrebakedSegmentTest {
+
+    @Test
+    public void testCreation() {
+        PrebakedSegment prebaked = new PrebakedSegment(
+                VibrationEffect.EFFECT_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+
+        assertEquals(-1, prebaked.getDuration());
+        assertEquals(VibrationEffect.EFFECT_CLICK, prebaked.getEffectId());
+        assertEquals(VibrationEffect.EFFECT_STRENGTH_MEDIUM, prebaked.getEffectStrength());
+        assertTrue(prebaked.shouldFallback());
+    }
+
+    @Test
+    public void testSerialization() {
+        PrebakedSegment original = new PrebakedSegment(
+                VibrationEffect.EFFECT_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+        Parcel parcel = Parcel.obtain();
+        original.writeToParcel(parcel, 0);
+        parcel.setDataPosition(0);
+        assertEquals(original, PrebakedSegment.CREATOR.createFromParcel(parcel));
+    }
+
+    @Test
+    public void testValidate() {
+        new PrebakedSegment(VibrationEffect.EFFECT_CLICK, true,
+                VibrationEffect.EFFECT_STRENGTH_MEDIUM).validate();
+
+        assertThrows(IllegalArgumentException.class,
+                () -> new PrebakedSegment(1000, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
+                        .validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new PrebakedSegment(VibrationEffect.EFFECT_TICK, false, 1000)
+                        .validate());
+    }
+
+    @Test
+    public void testResolve_ignoresAndReturnsSameEffect() {
+        PrebakedSegment prebaked = new PrebakedSegment(
+                VibrationEffect.EFFECT_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+        assertSame(prebaked, prebaked.resolve(1000));
+    }
+
+    @Test
+    public void testApplyEffectStrength() {
+        PrebakedSegment medium = new PrebakedSegment(
+                VibrationEffect.EFFECT_THUD, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+
+        PrebakedSegment light = medium.applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_LIGHT);
+        assertNotEquals(medium, light);
+        assertEquals(medium.getEffectId(), light.getEffectId());
+        assertEquals(medium.shouldFallback(), light.shouldFallback());
+        assertEquals(VibrationEffect.EFFECT_STRENGTH_LIGHT, light.getEffectStrength());
+
+        PrebakedSegment strong = medium.applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_STRONG);
+        assertNotEquals(medium, strong);
+        assertEquals(medium.getEffectId(), strong.getEffectId());
+        assertEquals(medium.shouldFallback(), strong.shouldFallback());
+        assertEquals(VibrationEffect.EFFECT_STRENGTH_STRONG, strong.getEffectStrength());
+
+        assertSame(medium, medium.applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_MEDIUM));
+        // Invalid vibration effect strength is ignored.
+        assertSame(medium, medium.applyEffectStrength(1000));
+    }
+
+    @Test
+    public void testScale_ignoresAndReturnsSameEffect() {
+        PrebakedSegment prebaked = new PrebakedSegment(
+                VibrationEffect.EFFECT_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+        assertSame(prebaked, prebaked.scale(0.5f));
+    }
+
+    @Test
+    public void testDuration() {
+        assertEquals(-1, new PrebakedSegment(
+                VibrationEffect.EFFECT_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
+                .getDuration());
+        assertEquals(-1, new PrebakedSegment(
+                VibrationEffect.EFFECT_TICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
+                .getDuration());
+        assertEquals(-1, new PrebakedSegment(
+                VibrationEffect.EFFECT_DOUBLE_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
+                .getDuration());
+        assertEquals(-1, new PrebakedSegment(
+                VibrationEffect.EFFECT_THUD, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
+                .getDuration());
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidate_prebakedConstants_areCandidates() {
+        assertTrue(new PrebakedSegment(
+                VibrationEffect.EFFECT_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
+                .isHapticFeedbackCandidate());
+        assertTrue(new PrebakedSegment(
+                VibrationEffect.EFFECT_TICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
+                .isHapticFeedbackCandidate());
+        assertTrue(new PrebakedSegment(
+                VibrationEffect.EFFECT_DOUBLE_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
+                .isHapticFeedbackCandidate());
+        assertTrue(new PrebakedSegment(
+                VibrationEffect.EFFECT_HEAVY_CLICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
+                .isHapticFeedbackCandidate());
+        assertTrue(new PrebakedSegment(
+                VibrationEffect.EFFECT_THUD, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
+                .isHapticFeedbackCandidate());
+        assertTrue(new PrebakedSegment(
+                VibrationEffect.EFFECT_TEXTURE_TICK, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
+                .isHapticFeedbackCandidate());
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_idsWithFallback_fallbackEnabled_vibratorSupport() {
+        Vibrator vibrator = createVibratorWithSupportedEffects(
+                VibrationEffect.EFFECT_TICK,
+                VibrationEffect.EFFECT_CLICK,
+                VibrationEffect.EFFECT_DOUBLE_CLICK,
+                VibrationEffect.EFFECT_HEAVY_CLICK);
+
+        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_TICK)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_CLICK)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_DOUBLE_CLICK)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_HEAVY_CLICK)
+                .areVibrationFeaturesSupported(vibrator));
+
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_idsWithFallback_fallbackEnabled_noVibratorSupport() {
+        Vibrator vibrator = createVibratorWithSupportedEffects(new int[0]);
+
+        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_TICK)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_CLICK)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_DOUBLE_CLICK)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_HEAVY_CLICK)
+                .areVibrationFeaturesSupported(vibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_idsWithFallback_fallbackDisabled_vibratorSupport() {
+        Vibrator vibrator = createVibratorWithSupportedEffects(
+                VibrationEffect.EFFECT_TICK,
+                VibrationEffect.EFFECT_CLICK,
+                VibrationEffect.EFFECT_DOUBLE_CLICK,
+                VibrationEffect.EFFECT_HEAVY_CLICK);
+
+        assertTrue(createSegmentWithoutFallback(VibrationEffect.EFFECT_TICK)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(createSegmentWithoutFallback(VibrationEffect.EFFECT_CLICK)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(createSegmentWithoutFallback(VibrationEffect.EFFECT_DOUBLE_CLICK)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(createSegmentWithoutFallback(VibrationEffect.EFFECT_HEAVY_CLICK)
+                .areVibrationFeaturesSupported(vibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_idsWithFallback_fallbackDisabled_noVibratorSupport() {
+        Vibrator vibrator = createVibratorWithSupportedEffects(new int[0]);
+
+        assertFalse(createSegmentWithoutFallback(VibrationEffect.EFFECT_TICK)
+                .areVibrationFeaturesSupported(vibrator));
+        assertFalse(createSegmentWithoutFallback(VibrationEffect.EFFECT_CLICK)
+                .areVibrationFeaturesSupported(vibrator));
+        assertFalse(createSegmentWithoutFallback(VibrationEffect.EFFECT_DOUBLE_CLICK)
+                .areVibrationFeaturesSupported(vibrator));
+        assertFalse(createSegmentWithoutFallback(VibrationEffect.EFFECT_HEAVY_CLICK)
+                .areVibrationFeaturesSupported(vibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_idsWithNoFallback_fallbackEnabled_vibratorSupport() {
+        Vibrator vibrator = createVibratorWithSupportedEffects(
+                VibrationEffect.EFFECT_THUD,
+                VibrationEffect.EFFECT_POP,
+                VibrationEffect.EFFECT_TEXTURE_TICK);
+
+        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_THUD)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_POP)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(createSegmentWithFallback(VibrationEffect.EFFECT_TEXTURE_TICK)
+                .areVibrationFeaturesSupported(vibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_idsWithNoFallback_fallbackEnabled_noVibratorSupport() {
+        Vibrator vibrator = createVibratorWithSupportedEffects(new int[0]);
+
+        assertFalse(createSegmentWithFallback(VibrationEffect.EFFECT_THUD)
+                .areVibrationFeaturesSupported(vibrator));
+        assertFalse(createSegmentWithFallback(VibrationEffect.EFFECT_POP)
+                .areVibrationFeaturesSupported(vibrator));
+        assertFalse(createSegmentWithFallback(VibrationEffect.EFFECT_TEXTURE_TICK)
+                .areVibrationFeaturesSupported(vibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_idsWithNoFallback_fallbackDisabled_vibratorSupport() {
+        Vibrator vibrator = createVibratorWithSupportedEffects(
+                VibrationEffect.EFFECT_THUD,
+                VibrationEffect.EFFECT_POP,
+                VibrationEffect.EFFECT_TEXTURE_TICK);
+
+        assertTrue(createSegmentWithoutFallback(VibrationEffect.EFFECT_THUD)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(createSegmentWithoutFallback(VibrationEffect.EFFECT_POP)
+                .areVibrationFeaturesSupported(vibrator));
+        assertTrue(createSegmentWithoutFallback(VibrationEffect.EFFECT_TEXTURE_TICK)
+                .areVibrationFeaturesSupported(vibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_idsWithNoFallback_fallbackDisabled_noVibSupport() {
+        Vibrator vibrator = createVibratorWithSupportedEffects(new int[0]);
+
+        assertFalse(createSegmentWithoutFallback(VibrationEffect.EFFECT_THUD)
+                .areVibrationFeaturesSupported(vibrator));
+        assertFalse(createSegmentWithoutFallback(VibrationEffect.EFFECT_POP)
+                .areVibrationFeaturesSupported(vibrator));
+        assertFalse(createSegmentWithoutFallback(VibrationEffect.EFFECT_TEXTURE_TICK)
+                .areVibrationFeaturesSupported(vibrator));
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidate_prebakedRingtones_notCandidates() {
+        assertFalse(new PrebakedSegment(
+                VibrationEffect.RINGTONES[1], true, VibrationEffect.EFFECT_STRENGTH_MEDIUM)
+                .isHapticFeedbackCandidate());
+    }
+
+    private static PrebakedSegment createSegmentWithFallback(int effectId) {
+        // note: arbitrary effect strength being used.
+        return new PrebakedSegment(effectId, true, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+    }
+
+    private static PrebakedSegment createSegmentWithoutFallback(int effectId) {
+        // note: arbitrary effect strength being used.
+        return new PrebakedSegment(effectId, false, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+    }
+
+    private static Vibrator createVibratorWithSupportedEffects(int... supportedEffects) {
+        return new SystemVibrator(InstrumentationRegistry.getContext()) {
+            @Override
+            public VibratorInfo getInfo() {
+                return new VibratorInfo.Builder(/* id= */ 1)
+                        .setSupportedEffects(supportedEffects)
+                        .build();
+            }
+        };
+    }
+}
diff --git a/core/tests/vibrator/src/android/os/vibrator/PrimitiveSegmentTest.java b/core/tests/vibrator/src/android/os/vibrator/PrimitiveSegmentTest.java
new file mode 100644
index 0000000..6f5adcd
--- /dev/null
+++ b/core/tests/vibrator/src/android/os/vibrator/PrimitiveSegmentTest.java
@@ -0,0 +1,207 @@
+/*
+ * 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 android.os.vibrator;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertSame;
+import static junit.framework.Assert.assertTrue;
+
+import static org.testng.Assert.assertThrows;
+
+import android.hardware.vibrator.IVibrator;
+import android.os.Parcel;
+import android.os.SystemVibrator;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.os.VibratorInfo;
+
+import androidx.test.InstrumentationRegistry;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class PrimitiveSegmentTest {
+    private static final float TOLERANCE = 1e-2f;
+
+    @Test
+    public void testCreation() {
+        PrimitiveSegment primitive = new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 10);
+
+        assertEquals(-1, primitive.getDuration());
+        assertEquals(VibrationEffect.Composition.PRIMITIVE_CLICK, primitive.getPrimitiveId());
+        assertEquals(10, primitive.getDelay());
+        assertEquals(1f, primitive.getScale(), TOLERANCE);
+    }
+
+    @Test
+    public void testSerialization() {
+        PrimitiveSegment original = new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 10);
+        Parcel parcel = Parcel.obtain();
+        original.writeToParcel(parcel, 0);
+        parcel.setDataPosition(0);
+        assertEquals(original, PrimitiveSegment.CREATOR.createFromParcel(parcel));
+    }
+
+    @Test
+    public void testValidate() {
+        new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0).validate();
+
+        assertThrows(IllegalArgumentException.class,
+                () -> new PrimitiveSegment(1000, 0, 10).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_NOOP, -1, 0)
+                        .validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_NOOP, 1, -1)
+                        .validate());
+    }
+
+    @Test
+    public void testResolve_ignoresAndReturnsSameEffect() {
+        PrimitiveSegment primitive = new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0);
+        assertSame(primitive, primitive.resolve(1000));
+    }
+
+    @Test
+    public void testApplyEffectStrength_ignoresAndReturnsSameEffect() {
+        PrimitiveSegment primitive = new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0);
+        assertSame(primitive,
+                primitive.applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_STRONG));
+    }
+
+    @Test
+    public void testScale_fullPrimitiveScaleValue() {
+        PrimitiveSegment initial = new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0);
+
+        assertEquals(1f, initial.scale(1).getScale(), TOLERANCE);
+        assertEquals(0.34f, initial.scale(0.5f).getScale(), TOLERANCE);
+        // The original value was not scaled up, so this only scales it down.
+        assertEquals(1f, initial.scale(1.5f).getScale(), TOLERANCE);
+        assertEquals(0.53f, initial.scale(1.5f).scale(2 / 3f).getScale(), TOLERANCE);
+        // Does not restore to the exact original value because scale up is a bit offset.
+        assertEquals(0.71f, initial.scale(0.8f).getScale(), TOLERANCE);
+        assertEquals(0.84f, initial.scale(0.8f).scale(1.25f).getScale(), TOLERANCE);
+    }
+
+    @Test
+    public void testScale_halfPrimitiveScaleValue() {
+        PrimitiveSegment initial = new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_CLICK, 0.5f, 0);
+
+        assertEquals(0.5f, initial.scale(1).getScale(), TOLERANCE);
+        assertEquals(0.17f, initial.scale(0.5f).getScale(), TOLERANCE);
+        // The original value was not scaled up, so this only scales it down.
+        assertEquals(0.86f, initial.scale(1.5f).getScale(), TOLERANCE);
+        assertEquals(0.47f, initial.scale(1.5f).scale(2 / 3f).getScale(), TOLERANCE);
+        // Does not restore to the exact original value because scale up is a bit offset.
+        assertEquals(0.35f, initial.scale(0.8f).getScale(), TOLERANCE);
+        assertEquals(0.5f, initial.scale(0.8f).scale(1.25f).getScale(), TOLERANCE);
+    }
+
+    @Test
+    public void testScale_zeroPrimitiveScaleValue() {
+        PrimitiveSegment initial = new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_CLICK, 0, 0);
+
+        assertEquals(0f, initial.scale(1).getScale(), TOLERANCE);
+        assertEquals(0f, initial.scale(0.5f).getScale(), TOLERANCE);
+        assertEquals(0f, initial.scale(1.5f).getScale(), TOLERANCE);
+        assertEquals(0f, initial.scale(1.5f).scale(2 / 3f).getScale(), TOLERANCE);
+        assertEquals(0f, initial.scale(0.8f).scale(1.25f).getScale(), TOLERANCE);
+    }
+
+    @Test
+    public void testDuration() {
+        assertEquals(-1, new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_NOOP, 1, 10).getDuration());
+        assertEquals(-1, new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 100).getDuration());
+        assertEquals(-1, new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_SPIN, 1, 0).getDuration());
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_primitiveSupportedByVibrator() {
+        assertTrue(createSegment(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                .areVibrationFeaturesSupported(
+                        createVibratorWithSupportedPrimitive(
+                                VibrationEffect.Composition.PRIMITIVE_CLICK)));
+        assertTrue(createSegment(VibrationEffect.Composition.PRIMITIVE_THUD)
+                .areVibrationFeaturesSupported(
+                        createVibratorWithSupportedPrimitive(
+                                VibrationEffect.Composition.PRIMITIVE_THUD)));
+        assertTrue(createSegment(VibrationEffect.Composition.PRIMITIVE_QUICK_RISE)
+                .areVibrationFeaturesSupported(
+                        createVibratorWithSupportedPrimitive(
+                                VibrationEffect.Composition.PRIMITIVE_QUICK_RISE)));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_primitiveNotSupportedByVibrator() {
+        assertFalse(createSegment(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                .areVibrationFeaturesSupported(
+                        createVibratorWithSupportedPrimitive(
+                                VibrationEffect.Composition.PRIMITIVE_THUD)));
+        assertFalse(createSegment(VibrationEffect.Composition.PRIMITIVE_THUD)
+                .areVibrationFeaturesSupported(
+                        createVibratorWithSupportedPrimitive(
+                                VibrationEffect.Composition.PRIMITIVE_CLICK)));
+        assertFalse(createSegment(VibrationEffect.Composition.PRIMITIVE_THUD)
+                .areVibrationFeaturesSupported(
+                        createVibratorWithSupportedPrimitive(
+                                VibrationEffect.Composition.PRIMITIVE_QUICK_RISE)));
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidate_returnsTrue() {
+        assertTrue(new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_NOOP, 1, 10).isHapticFeedbackCandidate());
+        assertTrue(new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 10).isHapticFeedbackCandidate());
+        assertTrue(new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10).isHapticFeedbackCandidate());
+        assertTrue(new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_THUD, 1, 10).isHapticFeedbackCandidate());
+        assertTrue(new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_SPIN, 1, 10).isHapticFeedbackCandidate());
+    }
+
+    private static PrimitiveSegment createSegment(int primitiveId) {
+        // note: arbitrary scale and delay values being used.
+        return new PrimitiveSegment(primitiveId, 0.2f, 10);
+    }
+
+    private static Vibrator createVibratorWithSupportedPrimitive(int primitiveId) {
+        return new SystemVibrator(InstrumentationRegistry.getContext()) {
+            @Override
+            public VibratorInfo getInfo() {
+                return new VibratorInfo.Builder(/* id= */ 1)
+                        .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS)
+                        .setSupportedPrimitive(primitiveId, 10)
+                        .build();
+                }
+        };
+    }
+}
diff --git a/core/tests/vibrator/src/android/os/vibrator/RampSegmentTest.java b/core/tests/vibrator/src/android/os/vibrator/RampSegmentTest.java
new file mode 100644
index 0000000..68870e5
--- /dev/null
+++ b/core/tests/vibrator/src/android/os/vibrator/RampSegmentTest.java
@@ -0,0 +1,277 @@
+/*
+ * 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 android.os.vibrator;
+
+import static android.os.VibrationEffect.DEFAULT_AMPLITUDE;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertSame;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertThrows;
+
+import android.os.Parcel;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.MockitoRule;
+
+@RunWith(MockitoJUnitRunner.class)
+public class RampSegmentTest {
+    private static final float TOLERANCE = 1e-2f;
+
+    @Rule
+    public MockitoRule mMockitoRule = MockitoJUnit.rule();
+
+    @Mock
+    private Vibrator mVibrator;
+
+    @Test
+    public void testCreation() {
+        RampSegment ramp = new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 0,
+                /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 200, /* duration= */ 100);
+
+        assertEquals(100L, ramp.getDuration());
+        assertEquals(1f, ramp.getStartAmplitude());
+        assertEquals(0f, ramp.getEndAmplitude());
+        assertEquals(100f, ramp.getStartFrequencyHz());
+        assertEquals(200f, ramp.getEndFrequencyHz());
+    }
+
+    @Test
+    public void testSerialization() {
+        RampSegment original = new RampSegment(0, 1, 10, 20.5f, 10);
+        Parcel parcel = Parcel.obtain();
+        original.writeToParcel(parcel, 0);
+        parcel.setDataPosition(0);
+        assertEquals(original, RampSegment.CREATOR.createFromParcel(parcel));
+    }
+
+    @Test
+    public void testValidate() {
+        new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 0,
+                /* startFrequencyHz= */ 2, /* endFrequencyHz= */ 1, /* duration= */ 100).validate();
+        // Zero frequency is still used internally for unset frequency.
+        new RampSegment(0, 0, 0, 0, 0).validate();
+
+        assertThrows(IllegalArgumentException.class,
+                () -> new RampSegment(DEFAULT_AMPLITUDE, 0, 0, 0, 0).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new RampSegment(/* startAmplitude= */ -2, 0, 0, 0, 0).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new RampSegment(0, /* endAmplitude= */ 2, 0, 0, 0).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new RampSegment(0, 0, /* startFrequencyHz= */ -1, 0, 0).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new RampSegment(0, 0, 0, /* endFrequencyHz= */ -3, 0).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new RampSegment(0, 0, 0, 0, /* duration= */ -1).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new RampSegment(/* startAmplitude= */ Float.NaN, 0, 0, 0, 0).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new RampSegment(0, 0, /* startFrequencyHz= */ Float.NaN, 0, 0).validate());
+    }
+
+    @Test
+    public void testResolve() {
+        RampSegment ramp = new RampSegment(0, 1, 0, 0, 0);
+        assertSame(ramp, ramp.resolve(100));
+    }
+
+    @Test
+    public void testApplyEffectStrength_ignoresAndReturnsSameEffect() {
+        RampSegment ramp = new RampSegment(1, 0, 1, 0, 0);
+        assertSame(ramp, ramp.applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_STRONG));
+    }
+
+    @Test
+    public void testScale() {
+        RampSegment initial = new RampSegment(0, 1, 0, 0, 0);
+
+        assertEquals(0f, initial.scale(1).getStartAmplitude(), TOLERANCE);
+        assertEquals(0f, initial.scale(0.5f).getStartAmplitude(), TOLERANCE);
+        assertEquals(0f, initial.scale(1.5f).getStartAmplitude(), TOLERANCE);
+        assertEquals(0f, initial.scale(1.5f).scale(2 / 3f).getStartAmplitude(), TOLERANCE);
+        assertEquals(0f, initial.scale(0.8f).scale(1.25f).getStartAmplitude(), TOLERANCE);
+
+        assertEquals(1f, initial.scale(1).getEndAmplitude(), TOLERANCE);
+        assertEquals(0.34f, initial.scale(0.5f).getEndAmplitude(), TOLERANCE);
+        // The original value was not scaled up, so this only scales it down.
+        assertEquals(1f, initial.scale(1.5f).getEndAmplitude(), TOLERANCE);
+        assertEquals(0.53f, initial.scale(1.5f).scale(2 / 3f).getEndAmplitude(), TOLERANCE);
+        // Does not restore to the exact original value because scale up is a bit offset.
+        assertEquals(0.71f, initial.scale(0.8f).getEndAmplitude(), TOLERANCE);
+        assertEquals(0.84f, initial.scale(0.8f).scale(1.25f).getEndAmplitude(), TOLERANCE);
+    }
+
+    @Test
+    public void testScale_halfPrimitiveScaleValue() {
+        RampSegment initial = new RampSegment(0.5f, 1, 0, 0, 0);
+
+        assertEquals(0.5f, initial.scale(1).getStartAmplitude(), TOLERANCE);
+        assertEquals(0.17f, initial.scale(0.5f).getStartAmplitude(), TOLERANCE);
+        // Does not restore to the exact original value because scale up is a bit offset.
+        assertEquals(0.86f, initial.scale(1.5f).getStartAmplitude(), TOLERANCE);
+        assertEquals(0.47f, initial.scale(1.5f).scale(2 / 3f).getStartAmplitude(), TOLERANCE);
+        // Does not restore to the exact original value because scale up is a bit offset.
+        assertEquals(0.35f, initial.scale(0.8f).getStartAmplitude(), TOLERANCE);
+        assertEquals(0.5f, initial.scale(0.8f).scale(1.25f).getStartAmplitude(), TOLERANCE);
+    }
+
+    @Test
+    public void testDuration() {
+        assertEquals(10, new RampSegment(0.5f, 1, 0, 0, 10).getDuration());
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_amplitudeAndFrequencyControls_supported() {
+        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
+        when(mVibrator.hasFrequencyControl()).thenReturn(true);
+
+        // Increasing amplitude
+        assertTrue(new RampSegment(0.5f, 1, 0, 0, 10).areVibrationFeaturesSupported(mVibrator));
+        // Increasing frequency
+        assertTrue(new RampSegment(0.5f, 0.5f, 0, 1, 10).areVibrationFeaturesSupported(mVibrator));
+        // Decreasing amplitude
+        assertTrue(new RampSegment(1, 0.5f, 0, 0, 10).areVibrationFeaturesSupported(mVibrator));
+        // Decreasing frequency
+        assertTrue(new RampSegment(0.5f, 0.5f, 1, 0, 10).areVibrationFeaturesSupported(mVibrator));
+        // Zero duration
+        assertTrue(new RampSegment(0.5f, 0.5f, 1, 0, 0).areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_noAmplitudeControl_unsupportedForChangingAmplitude() {
+        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
+        when(mVibrator.hasFrequencyControl()).thenReturn(true);
+
+        // Test with increasing/decreasing amplitudes.
+        assertFalse(new RampSegment(0.5f, 1, 0, 0, 10).areVibrationFeaturesSupported(mVibrator));
+        assertFalse(new RampSegment(1, 0.5f, 0, 0, 10).areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_noAmplitudeControl_fractionalAmplitudeUnsupported() {
+        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
+        when(mVibrator.hasFrequencyControl()).thenReturn(true);
+
+        assertFalse(new RampSegment(0.2f, 0.2f, 0, 0, 10).areVibrationFeaturesSupported(mVibrator));
+        assertFalse(new RampSegment(0, 0.2f, 0, 0, 10).areVibrationFeaturesSupported(mVibrator));
+        assertFalse(new RampSegment(0.2f, 0, 0, 0, 10).areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_unchangingZeroAmplitude_supported() {
+        RampSegment amplitudeZeroWithIncreasingFrequency = new RampSegment(1, 1, 0.5f, 0.8f, 10);
+        RampSegment amplitudeZeroWithDecreasingFrequency = new RampSegment(1, 1, 0.8f, 0.5f, 10);
+        when(mVibrator.hasFrequencyControl()).thenReturn(true);
+        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
+
+        assertTrue(amplitudeZeroWithIncreasingFrequency.areVibrationFeaturesSupported(mVibrator));
+        assertTrue(amplitudeZeroWithDecreasingFrequency.areVibrationFeaturesSupported(mVibrator));
+
+        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
+
+        assertTrue(amplitudeZeroWithIncreasingFrequency.areVibrationFeaturesSupported(mVibrator));
+        assertTrue(amplitudeZeroWithDecreasingFrequency.areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_unchangingOneAmplitude_supported() {
+        RampSegment amplitudeOneWithIncreasingFrequency = new RampSegment(1, 1, 0.5f, 0.8f, 10);
+        RampSegment amplitudeOneWithDecreasingFrequency = new RampSegment(1, 1, 0.8f, 0.5f, 10);
+        when(mVibrator.hasFrequencyControl()).thenReturn(true);
+        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
+
+        assertTrue(amplitudeOneWithIncreasingFrequency.areVibrationFeaturesSupported(mVibrator));
+        assertTrue(amplitudeOneWithDecreasingFrequency.areVibrationFeaturesSupported(mVibrator));
+
+        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
+
+        assertTrue(amplitudeOneWithIncreasingFrequency.areVibrationFeaturesSupported(mVibrator));
+        assertTrue(amplitudeOneWithDecreasingFrequency.areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_unchangingDefaultAmplitude_supported() {
+        RampSegment defaultAmplitudeIncreasingFrequency =
+                new RampSegment(DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE, 0.5f, 0.8f, 10);
+        RampSegment defaultAmplitudeDecreasingFrequency =
+                new RampSegment(DEFAULT_AMPLITUDE, DEFAULT_AMPLITUDE, 0.8f, 0.5f, 10);
+        when(mVibrator.hasFrequencyControl()).thenReturn(true);
+        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
+
+        assertTrue(defaultAmplitudeIncreasingFrequency.areVibrationFeaturesSupported(mVibrator));
+        assertTrue(defaultAmplitudeDecreasingFrequency.areVibrationFeaturesSupported(mVibrator));
+
+        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
+
+        assertTrue(defaultAmplitudeIncreasingFrequency.areVibrationFeaturesSupported(mVibrator));
+        assertTrue(defaultAmplitudeDecreasingFrequency.areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_noFrequencyControl_unsupportedForChangingFrequency() {
+        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
+        when(mVibrator.hasFrequencyControl()).thenReturn(false);
+
+        // Test with increasing/decreasing frequencies.
+        assertFalse(new RampSegment(0, 0, 0.2f, 0.4f, 10).areVibrationFeaturesSupported(mVibrator));
+        assertFalse(new RampSegment(0, 0, 0.4f, 0.2f, 10).areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_noFrequencyControl_fractionalFrequencyUnsupported() {
+        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
+        when(mVibrator.hasFrequencyControl()).thenReturn(false);
+
+        assertFalse(new RampSegment(0, 0, 0.2f, 0.2f, 10).areVibrationFeaturesSupported(mVibrator));
+        assertFalse(new RampSegment(0, 0, 0.2f, 0, 10).areVibrationFeaturesSupported(mVibrator));
+        assertFalse(new RampSegment(0, 0, 0, 0.2f, 10).areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_unchangingZeroFrequency_supported() {
+        RampSegment frequencyZeroWithIncreasingAmplitude = new RampSegment(0.1f, 1, 0, 0, 10);
+        RampSegment frequencyZeroWithDecreasingAmplitude = new RampSegment(1, 0.1f, 0, 0, 10);
+        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
+        when(mVibrator.hasFrequencyControl()).thenReturn(false);
+
+        assertTrue(frequencyZeroWithIncreasingAmplitude.areVibrationFeaturesSupported(mVibrator));
+        assertTrue(frequencyZeroWithDecreasingAmplitude.areVibrationFeaturesSupported(mVibrator));
+
+        when(mVibrator.hasFrequencyControl()).thenReturn(true);
+
+        assertTrue(frequencyZeroWithIncreasingAmplitude.areVibrationFeaturesSupported(mVibrator));
+        assertTrue(frequencyZeroWithDecreasingAmplitude.areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidate_returnsTrue() {
+        // A single ramp segment duration is not checked here, but contributes to the effect known
+        // duration checked in VibrationEffect implementations.
+        assertTrue(new RampSegment(0.5f, 1, 0, 0, 5_000).isHapticFeedbackCandidate());
+    }
+}
diff --git a/core/tests/vibrator/src/android/os/vibrator/StepSegmentTest.java b/core/tests/vibrator/src/android/os/vibrator/StepSegmentTest.java
new file mode 100644
index 0000000..34bb892
--- /dev/null
+++ b/core/tests/vibrator/src/android/os/vibrator/StepSegmentTest.java
@@ -0,0 +1,254 @@
+/*
+ * 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 android.os.vibrator;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertSame;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertThrows;
+
+import android.os.Parcel;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.MockitoRule;
+
+@RunWith(MockitoJUnitRunner.class)
+public class StepSegmentTest {
+    private static final float TOLERANCE = 1e-2f;
+
+    @Rule
+    public MockitoRule mMockitoRule = MockitoJUnit.rule();
+
+    @Mock
+    private Vibrator mVibrator;
+
+    @Test
+    public void testCreation() {
+        StepSegment step = new StepSegment(/* amplitude= */ 1f, /* frequencyHz= */ 1f,
+                /* duration= */ 100);
+
+        assertEquals(100, step.getDuration());
+        assertEquals(1f, step.getAmplitude());
+        assertEquals(1f, step.getFrequencyHz());
+    }
+
+    @Test
+    public void testSerialization() {
+        StepSegment original = new StepSegment(0.5f, 1f, 10);
+        Parcel parcel = Parcel.obtain();
+        original.writeToParcel(parcel, 0);
+        parcel.setDataPosition(0);
+        assertEquals(original, StepSegment.CREATOR.createFromParcel(parcel));
+    }
+
+    @Test
+    public void testValidate() {
+        new StepSegment(/* amplitude= */ 0f, /* frequencyHz= */ 10f, /* duration= */ 10).validate();
+        // Zero frequency is still used internally for unset frequency.
+        new StepSegment(0, 0, 0).validate();
+
+        assertThrows(IllegalArgumentException.class,
+                () -> new StepSegment(/* amplitude= */ -2, 1f, 10).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new StepSegment(/* amplitude= */ 2, 1f, 10).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new StepSegment(1, /* frequencyHz*/ -1f, 10).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new StepSegment(2, 1f, /* duration= */ -1).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new StepSegment(/* amplitude= */ Float.NaN, 1f, 10).validate());
+        assertThrows(IllegalArgumentException.class,
+                () -> new StepSegment(1, /* frequencyHz*/ Float.NaN, 10).validate());
+    }
+
+    @Test
+    public void testResolve() {
+        StepSegment original = new StepSegment(VibrationEffect.DEFAULT_AMPLITUDE, 0, 0);
+        assertEquals(1f, original.resolve(VibrationEffect.MAX_AMPLITUDE).getAmplitude());
+        assertEquals(0.2f, original.resolve(51).getAmplitude(), TOLERANCE);
+
+        StepSegment resolved = new StepSegment(0, 0, 0);
+        assertSame(resolved, resolved.resolve(100));
+
+        assertThrows(IllegalArgumentException.class, () -> resolved.resolve(1000));
+    }
+
+    @Test
+    public void testApplyEffectStrength_ignoresAndReturnsSameEffect() {
+        StepSegment step = new StepSegment(VibrationEffect.DEFAULT_AMPLITUDE, 0, 0);
+        assertSame(step, step.applyEffectStrength(VibrationEffect.EFFECT_STRENGTH_STRONG));
+    }
+
+    @Test
+    public void testScale_fullAmplitude() {
+        StepSegment initial = new StepSegment(1f, 0, 0);
+
+        assertEquals(1f, initial.scale(1).getAmplitude(), TOLERANCE);
+        assertEquals(0.34f, initial.scale(0.5f).getAmplitude(), TOLERANCE);
+        // The original value was not scaled up, so this only scales it down.
+        assertEquals(1f, initial.scale(1.5f).getAmplitude(), TOLERANCE);
+        assertEquals(0.53f, initial.scale(1.5f).scale(2 / 3f).getAmplitude(), TOLERANCE);
+        // Does not restore to the exact original value because scale up is a bit offset.
+        assertEquals(0.71f, initial.scale(0.8f).getAmplitude(), TOLERANCE);
+        assertEquals(0.84f, initial.scale(0.8f).scale(1.25f).getAmplitude(), TOLERANCE);
+    }
+
+    @Test
+    public void testScale_halfAmplitude() {
+        StepSegment initial = new StepSegment(0.5f, 0, 0);
+
+        assertEquals(0.5f, initial.scale(1).getAmplitude(), TOLERANCE);
+        assertEquals(0.17f, initial.scale(0.5f).getAmplitude(), TOLERANCE);
+        // The original value was not scaled up, so this only scales it down.
+        assertEquals(0.86f, initial.scale(1.5f).getAmplitude(), TOLERANCE);
+        assertEquals(0.47f, initial.scale(1.5f).scale(2 / 3f).getAmplitude(), TOLERANCE);
+        // Does not restore to the exact original value because scale up is a bit offset.
+        assertEquals(0.35f, initial.scale(0.8f).getAmplitude(), TOLERANCE);
+        assertEquals(0.5f, initial.scale(0.8f).scale(1.25f).getAmplitude(), TOLERANCE);
+    }
+
+    @Test
+    public void testScale_zeroAmplitude() {
+        StepSegment initial = new StepSegment(0, 0, 0);
+
+        assertEquals(0f, initial.scale(1).getAmplitude(), TOLERANCE);
+        assertEquals(0f, initial.scale(0.5f).getAmplitude(), TOLERANCE);
+        assertEquals(0f, initial.scale(1.5f).getAmplitude(), TOLERANCE);
+    }
+
+    @Test
+    public void testScale_defaultAmplitude() {
+        StepSegment initial = new StepSegment(VibrationEffect.DEFAULT_AMPLITUDE, 0, 0);
+
+        assertEquals(VibrationEffect.DEFAULT_AMPLITUDE, initial.scale(1).getAmplitude(), TOLERANCE);
+        assertEquals(VibrationEffect.DEFAULT_AMPLITUDE, initial.scale(0.5f).getAmplitude(),
+                TOLERANCE);
+        assertEquals(VibrationEffect.DEFAULT_AMPLITUDE, initial.scale(1.5f).getAmplitude(),
+                TOLERANCE);
+    }
+
+    @Test
+    public void testDuration() {
+        assertEquals(5, new StepSegment(0, 0, 5).getDuration());
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_zeroAmplitude_supported() {
+        StepSegment segment =
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 0);
+        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
+
+        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
+
+        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
+
+        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_maxAmplitude_supported() {
+        StepSegment segment =
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 0);
+        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
+
+        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
+
+        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
+
+        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_defaultAmplitude_supported() {
+        StepSegment segment =
+                new StepSegment(
+                        /* amplitude= */ VibrationEffect.DEFAULT_AMPLITUDE,
+                        /* frequencyHz= */ 0,
+                        /* duration= */ 0);
+        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
+
+        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
+
+        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
+
+        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_fractionalAmplitude_hasAmplitudeCtrl_supported() {
+        when(mVibrator.hasAmplitudeControl()).thenReturn(true);
+
+        assertTrue(new StepSegment(/* amplitude= */ 0.2f, /* frequencyHz= */ 0, /* duration= */ 0)
+                .areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_fractionalAmplitude_hasNoAmplitudeCtrl_notSupported() {
+        when(mVibrator.hasAmplitudeControl()).thenReturn(false);
+
+        assertFalse(new StepSegment(/* amplitude= */ 0.2f, /* frequencyHz= */ 0, /* duration= */ 0)
+                .areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_zeroFrequency_supported() {
+        StepSegment segment =
+                new StepSegment(/* amplitude= */ 0f, /* frequencyHz= */ 0, /* duration= */ 0);
+        when(mVibrator.hasFrequencyControl()).thenReturn(false);
+
+        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
+
+        when(mVibrator.hasFrequencyControl()).thenReturn(true);
+
+        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_nonZeroFrequency_hasFrequencyCtrl_supported() {
+        StepSegment segment =
+                new StepSegment(/* amplitude= */ 0f, /* frequencyHz= */ 0.2f, /* duration= */ 0);
+        when(mVibrator.hasFrequencyControl()).thenReturn(true);
+
+        assertTrue(segment.areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testVibrationFeaturesSupport_nonZeroFrequency_hasNoFrequencyCtrl_notSupported() {
+        StepSegment segment =
+                new StepSegment(/* amplitude= */ 0f, /* frequencyHz= */ 0.2f, /* duration= */ 0);
+        when(mVibrator.hasFrequencyControl()).thenReturn(false);
+
+        assertFalse(segment.areVibrationFeaturesSupported(mVibrator));
+    }
+
+    @Test
+    public void testIsHapticFeedbackCandidate_returnsTrue() {
+        // A single step segment duration is not checked here, but contributes to the effect known
+        // duration checked in VibrationEffect implementations.
+        assertTrue(new StepSegment(0, 0, 5_000).isHapticFeedbackCandidate());
+    }
+}
diff --git a/core/tests/vibrator/src/android/os/vibrator/persistence/VibrationEffectXmlSerializationTest.java b/core/tests/vibrator/src/android/os/vibrator/persistence/VibrationEffectXmlSerializationTest.java
new file mode 100644
index 0000000..ce17170
--- /dev/null
+++ b/core/tests/vibrator/src/android/os/vibrator/persistence/VibrationEffectXmlSerializationTest.java
@@ -0,0 +1,352 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.os.vibrator.persistence;
+
+import static android.os.VibrationEffect.Composition.PRIMITIVE_CLICK;
+import static android.os.VibrationEffect.Composition.PRIMITIVE_LOW_TICK;
+import static android.os.VibrationEffect.Composition.PRIMITIVE_SPIN;
+import static android.os.VibrationEffect.Composition.PRIMITIVE_TICK;
+import static android.os.vibrator.persistence.VibrationXmlParser.isSupportedMimeType;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertThrows;
+
+import android.os.VibrationEffect;
+import android.os.vibrator.PrebakedSegment;
+import android.util.Xml;
+
+import com.android.modules.utils.TypedXmlPullParser;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import org.xmlpull.v1.XmlPullParser;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Unit tests for {@link VibrationXmlParser} and {@link VibrationXmlSerializer}.
+ *
+ * <p>The {@link VibrationEffect} public APIs are covered by CTS to enforce the schema defined at
+ * services/core/xsd/vibrator/vibration/vibration.xsd.
+ */
+@RunWith(JUnit4.class)
+public class VibrationEffectXmlSerializationTest {
+
+    @Test
+    public void isSupportedMimeType_onlySupportsVibrationXmlMimeType() {
+        // Single MIME type supported
+        assertThat(isSupportedMimeType(
+                VibrationXmlParser.APPLICATION_VIBRATION_XML_MIME_TYPE)).isTrue();
+        assertThat(isSupportedMimeType("application/vnd.android.haptics.vibration+xml")).isTrue();
+        // without xml suffix not supported
+        assertThat(isSupportedMimeType("application/vnd.android.haptics.vibration")).isFalse();
+        // different top-level not supported
+        assertThat(isSupportedMimeType("haptics/vnd.android.haptics.vibration+xml")).isFalse();
+        // different type not supported
+        assertThat(isSupportedMimeType("application/vnd.android.vibration+xml")).isFalse();
+    }
+
+    @Test
+    public void testParseTag_succeedAndParserPointsToEndVibrationTag() throws Exception {
+        VibrationEffect effect = VibrationEffect.startComposition()
+                .addPrimitive(PRIMITIVE_CLICK)
+                .addPrimitive(PRIMITIVE_TICK, 0.2497f)
+                .compose();
+        String xml = "<vibration>"
+                + "<primitive-effect name=\"click\"/>"
+                + "<primitive-effect name=\"tick\" scale=\"0.2497\"/>"
+                + "</vibration>";
+        VibrationEffect effect2 = VibrationEffect.startComposition()
+                .addPrimitive(PRIMITIVE_LOW_TICK, 1f, 356)
+                .addPrimitive(PRIMITIVE_SPIN, 0.6364f, 7)
+                .compose();
+        String xml2 = "<vibration>"
+                + "<primitive-effect name=\"low_tick\" delayMs=\"356\"/>"
+                + "<primitive-effect name=\"spin\" scale=\"0.6364\" delayMs=\"7\"/>"
+                + "</vibration>";
+
+        TypedXmlPullParser parser = createXmlPullParser(xml);
+        assertParseTagSucceeds(parser, effect);
+        parser.next();
+        assertEndOfDocument(parser);
+
+        // Test no-issues when an end-tag follows the vibration XML.
+        // To test this, starting with the corresponding "start-tag" is necessary.
+        parser = createXmlPullParser("<next-tag>" + xml + "</next-tag>");
+        // Move the parser once to point to the "<vibration> tag.
+        parser.next();
+        assertParseTagSucceeds(parser, effect);
+        parser.next();
+        assertEndTag(parser, "next-tag");
+
+        parser = createXmlPullParser(xml + "<next-tag>");
+        assertParseTagSucceeds(parser, effect);
+        parser.next();
+        assertStartTag(parser, "next-tag");
+
+        parser = createXmlPullParser(xml + xml2);
+        assertParseTagSucceeds(parser, effect);
+        parser.next();
+        assertParseTagSucceeds(parser, effect2);
+        parser.next();
+        assertEndOfDocument(parser);
+    }
+
+    @Test
+    public void testParseTag_badXml_throwsException() throws Exception {
+        assertParseTagFails(
+                "<vibration>random text<primitive-effect name=\"click\"/></vibration>");
+        assertParseTagFails("<bad-tag><primitive-effect name=\"click\"/></vibration>");
+        assertParseTagFails("<primitive-effect name=\"click\"/></vibration>");
+        assertParseTagFails("<vibration><primitive-effect name=\"click\"/>");
+    }
+
+    @Test
+    public void testPrimitives_allSucceed() throws IOException {
+        VibrationEffect effect = VibrationEffect.startComposition()
+                .addPrimitive(PRIMITIVE_CLICK)
+                .addPrimitive(PRIMITIVE_TICK, 0.2497f)
+                .addPrimitive(PRIMITIVE_LOW_TICK, 1f, 356)
+                .addPrimitive(PRIMITIVE_SPIN, 0.6364f, 7)
+                .compose();
+        String xml = "<vibration>"
+                + "<primitive-effect name=\"click\"/>"
+                + "<primitive-effect name=\"tick\" scale=\"0.2497\"/>"
+                + "<primitive-effect name=\"low_tick\" delayMs=\"356\"/>"
+                + "<primitive-effect name=\"spin\" scale=\"0.6364\" delayMs=\"7\"/>"
+                + "</vibration>";
+
+        assertPublicApisParserSucceeds(xml, effect);
+        assertPublicApisSerializerSucceeds(effect, "click", "tick", "low_tick", "spin");
+        assertPublicApisRoundTrip(effect);
+
+        assertHiddenApisParserSucceeds(xml, effect);
+        assertHiddenApisSerializerSucceeds(effect, "click", "tick", "low_tick", "spin");
+        assertHiddenApisRoundTrip(effect);
+    }
+
+    @Test
+    public void testWaveforms_allSucceed() throws IOException {
+        VibrationEffect effect = VibrationEffect.createWaveform(new long[]{123, 456, 789, 0},
+                new int[]{254, 1, 255, 0}, /* repeat= */ 0);
+        String xml = "<vibration>"
+                + "<waveform-effect><repeating>"
+                + "<waveform-entry durationMs=\"123\" amplitude=\"254\"/>"
+                + "<waveform-entry durationMs=\"456\" amplitude=\"1\"/>"
+                + "<waveform-entry durationMs=\"789\" amplitude=\"255\"/>"
+                + "<waveform-entry durationMs=\"0\" amplitude=\"0\"/>"
+                + "</repeating></waveform-effect>"
+                + "</vibration>";
+
+        assertPublicApisParserSucceeds(xml, effect);
+        assertPublicApisSerializerSucceeds(effect, "123", "456", "789", "254", "1", "255", "0");
+        assertPublicApisRoundTrip(effect);
+
+        assertHiddenApisParserSucceeds(xml, effect);
+        assertHiddenApisSerializerSucceeds(effect, "123", "456", "789", "254", "1", "255", "0");
+        assertHiddenApisRoundTrip(effect);
+    }
+
+    @Test
+    public void testPredefinedEffects_publicEffectsWithDefaultFallback_allSucceed()
+            throws IOException {
+        for (Map.Entry<String, Integer> entry : createPublicPredefinedEffectsMap().entrySet()) {
+            VibrationEffect effect = VibrationEffect.get(entry.getValue());
+            String xml = String.format(
+                    "<vibration><predefined-effect name=\"%s\"/></vibration>", entry.getKey());
+
+            assertPublicApisParserSucceeds(xml, effect);
+            assertPublicApisSerializerSucceeds(effect, entry.getKey());
+            assertPublicApisRoundTrip(effect);
+
+            assertHiddenApisParserSucceeds(xml, effect);
+            assertHiddenApisSerializerSucceeds(effect, entry.getKey());
+            assertHiddenApisRoundTrip(effect);
+        }
+    }
+
+    @Test
+    public void testPredefinedEffects_hiddenEffects_onlySucceedsWithFlag() throws IOException {
+        for (Map.Entry<String, Integer> entry : createHiddenPredefinedEffectsMap().entrySet()) {
+            VibrationEffect effect = VibrationEffect.get(entry.getValue());
+            String xml = String.format(
+                    "<vibration><predefined-effect name=\"%s\"/></vibration>", entry.getKey());
+
+            assertPublicApisParserFails(xml);
+            assertPublicApisSerializerFails(effect);
+
+            assertHiddenApisParserSucceeds(xml, effect);
+            assertHiddenApisSerializerSucceeds(effect, entry.getKey());
+            assertHiddenApisRoundTrip(effect);
+        }
+    }
+
+    @Test
+    public void testPredefinedEffects_allEffectsWithNonDefaultFallback_onlySucceedsWithFlag()
+            throws IOException {
+        for (Map.Entry<String, Integer> entry : createAllPredefinedEffectsMap().entrySet()) {
+            boolean nonDefaultFallback = !PrebakedSegment.DEFAULT_SHOULD_FALLBACK;
+            VibrationEffect effect = VibrationEffect.get(entry.getValue(), nonDefaultFallback);
+            String xml = String.format(
+                    "<vibration><predefined-effect name=\"%s\" fallback=\"%s\"/></vibration>",
+                    entry.getKey(), nonDefaultFallback);
+
+            assertPublicApisParserFails(xml);
+            assertPublicApisSerializerFails(effect);
+
+            assertHiddenApisParserSucceeds(xml, effect);
+            assertHiddenApisSerializerSucceeds(effect, entry.getKey());
+            assertHiddenApisRoundTrip(effect);
+        }
+    }
+
+    private void assertPublicApisParserFails(String xml) throws IOException {
+        assertThat(parse(xml, /* flags= */ 0)).isNull();
+    }
+
+    private void assertPublicApisParserSucceeds(String xml, VibrationEffect effect)
+            throws IOException {
+        assertThat(parse(xml, /* flags= */ 0)).isEqualTo(effect);
+    }
+
+    private TypedXmlPullParser createXmlPullParser(String xml) throws Exception {
+        TypedXmlPullParser parser = Xml.newFastPullParser();
+        parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
+        parser.setInput(new StringReader(xml));
+        parser.next(); // read START_DOCUMENT
+        return parser;
+    }
+
+    /**
+     * Asserts parsing vibration from an open TypedXmlPullParser succeeds, and that the parser
+     * points to the end "vibration" tag.
+     */
+    private void assertParseTagSucceeds(
+            TypedXmlPullParser parser, VibrationEffect effect) throws Exception {
+        assertThat(parseTag(parser)).isEqualTo(effect);
+
+        assertThat(parser.getEventType()).isEqualTo(XmlPullParser.END_TAG);
+        assertThat(parser.getName()).isEqualTo("vibration");
+    }
+
+    private void assertEndTag(TypedXmlPullParser parser, String expectedTagName) throws Exception {
+        assertThat(parser.getName()).isEqualTo(expectedTagName);
+        assertThat(parser.getEventType()).isEqualTo(parser.END_TAG);
+    }
+
+    private void assertStartTag(TypedXmlPullParser parser, String expectedTagName)
+            throws Exception {
+        assertThat(parser.getName()).isEqualTo(expectedTagName);
+        assertThat(parser.getEventType()).isEqualTo(parser.START_TAG);
+    }
+
+    private void assertEndOfDocument(TypedXmlPullParser parser) throws Exception {
+        assertThat(parser.getEventType()).isEqualTo(parser.END_DOCUMENT);
+    }
+
+    private void assertHiddenApisParserSucceeds(String xml, VibrationEffect effect)
+            throws IOException {
+        assertThat(parse(xml, VibrationXmlParser.FLAG_ALLOW_HIDDEN_APIS)).isEqualTo(effect);
+    }
+
+    private void assertPublicApisSerializerFails(VibrationEffect effect) {
+        assertThrows("Expected serialization to fail for " + effect,
+                VibrationXmlSerializer.SerializationFailedException.class,
+                () -> serialize(effect, /* flags= */ 0));
+    }
+
+    private void assertParseTagFails(String xml) {
+        assertThrows("Expected parsing to fail for " + xml,
+                VibrationXmlParser.VibrationXmlParserException.class,
+                () -> parseTag(createXmlPullParser(xml)));
+    }
+
+    private void assertPublicApisSerializerSucceeds(VibrationEffect effect,
+            String... expectedSegments) throws IOException {
+        assertSerializationContainsSegments(serialize(effect, /* flags= */ 0), expectedSegments);
+    }
+
+    private void assertHiddenApisSerializerSucceeds(VibrationEffect effect,
+            String... expectedSegments) throws IOException {
+        assertSerializationContainsSegments(
+                serialize(effect, VibrationXmlSerializer.FLAG_ALLOW_HIDDEN_APIS), expectedSegments);
+    }
+
+    private void assertSerializationContainsSegments(String xml, String[] expectedSegments) {
+        for (String expectedSegment : expectedSegments) {
+            assertThat(xml).contains(expectedSegment);
+        }
+    }
+
+    private void assertPublicApisRoundTrip(VibrationEffect effect) throws IOException {
+        assertThat(parse(serialize(effect, /* flags= */ 0), /* flags= */ 0)).isEqualTo(effect);
+    }
+
+    private void assertHiddenApisRoundTrip(VibrationEffect effect) throws IOException {
+        String xml = serialize(effect, VibrationXmlSerializer.FLAG_ALLOW_HIDDEN_APIS);
+        assertThat(parse(xml, VibrationXmlParser.FLAG_ALLOW_HIDDEN_APIS)).isEqualTo(effect);
+    }
+
+    private static VibrationEffect parse(String xml, @VibrationXmlParser.Flags int flags)
+            throws IOException {
+        return VibrationXmlParser.parse(new StringReader(xml), flags);
+    }
+
+    private static VibrationEffect parseTag(TypedXmlPullParser parser)
+            throws IOException, VibrationXmlParser.VibrationXmlParserException {
+        return VibrationXmlParser.parseTag(parser, VibrationXmlParser.FLAG_ALLOW_HIDDEN_APIS);
+    }
+
+    private static String serialize(VibrationEffect effect, @VibrationXmlSerializer.Flags int flags)
+            throws IOException {
+        StringWriter writer = new StringWriter();
+        VibrationXmlSerializer.serialize(effect, writer, flags);
+        return writer.toString();
+    }
+
+    private static Map<String, Integer> createAllPredefinedEffectsMap() {
+        Map<String, Integer> map = createHiddenPredefinedEffectsMap();
+        map.putAll(createPublicPredefinedEffectsMap());
+        return map;
+    }
+
+    private static Map<String, Integer> createPublicPredefinedEffectsMap() {
+        Map<String, Integer> map = new HashMap<>();
+        map.put("tick", VibrationEffect.EFFECT_TICK);
+        map.put("click", VibrationEffect.EFFECT_CLICK);
+        map.put("heavy_click", VibrationEffect.EFFECT_HEAVY_CLICK);
+        map.put("double_click", VibrationEffect.EFFECT_DOUBLE_CLICK);
+        return map;
+    }
+
+    private static Map<String, Integer> createHiddenPredefinedEffectsMap() {
+        Map<String, Integer> map = new HashMap<>();
+        map.put("texture_tick", VibrationEffect.EFFECT_TEXTURE_TICK);
+        map.put("pop", VibrationEffect.EFFECT_POP);
+        map.put("thud", VibrationEffect.EFFECT_THUD);
+        for (int i = 0; i < VibrationEffect.RINGTONES.length; i++) {
+            map.put(String.format("ringtone_%d", i + 1), VibrationEffect.RINGTONES[i]);
+        }
+        return map;
+    }
+}
diff --git a/core/xsd/Android.bp b/core/xsd/Android.bp
index 5387f85..f49a159 100644
--- a/core/xsd/Android.bp
+++ b/core/xsd/Android.bp
@@ -13,3 +13,10 @@
     api_dir: "schema",
     package_name: "com.android.xml.permission.configfile",
 }
+
+xsd_config {
+    name: "xsd-vibrator-persistence",
+    srcs: ["vibrator/vibration/vibration.xsd"],
+    api_dir: "vibrator/vibration/schema",
+    package_name: "com.android.internal.vibrator.persistence",
+}
diff --git a/core/xsd/vibrator/OWNERS b/core/xsd/vibrator/OWNERS
new file mode 100644
index 0000000..d073e2b
--- /dev/null
+++ b/core/xsd/vibrator/OWNERS
@@ -0,0 +1 @@
+include platform/frameworks/base:/services/core/java/com/android/server/vibrator/OWNERS
diff --git a/core/xsd/vibrator/vibration/schema/current.txt b/core/xsd/vibrator/vibration/schema/current.txt
new file mode 100644
index 0000000..121a228
--- /dev/null
+++ b/core/xsd/vibrator/vibration/schema/current.txt
@@ -0,0 +1,83 @@
+// Signature format: 2.0
+package com.android.internal.vibrator.persistence {
+
+  public class PredefinedEffect {
+    ctor public PredefinedEffect();
+    method public com.android.internal.vibrator.persistence.PredefinedEffectName getName();
+    method public void setName(com.android.internal.vibrator.persistence.PredefinedEffectName);
+  }
+
+  public enum PredefinedEffectName {
+    method public String getRawName();
+    enum_constant public static final com.android.internal.vibrator.persistence.PredefinedEffectName click;
+    enum_constant public static final com.android.internal.vibrator.persistence.PredefinedEffectName double_click;
+    enum_constant public static final com.android.internal.vibrator.persistence.PredefinedEffectName heavy_click;
+    enum_constant public static final com.android.internal.vibrator.persistence.PredefinedEffectName tick;
+  }
+
+  public class PrimitiveEffect {
+    ctor public PrimitiveEffect();
+    method public java.math.BigInteger getDelayMs();
+    method public com.android.internal.vibrator.persistence.PrimitiveEffectName getName();
+    method public float getScale();
+    method public void setDelayMs(java.math.BigInteger);
+    method public void setName(com.android.internal.vibrator.persistence.PrimitiveEffectName);
+    method public void setScale(float);
+  }
+
+  public enum PrimitiveEffectName {
+    method public String getRawName();
+    enum_constant public static final com.android.internal.vibrator.persistence.PrimitiveEffectName click;
+    enum_constant public static final com.android.internal.vibrator.persistence.PrimitiveEffectName low_tick;
+    enum_constant public static final com.android.internal.vibrator.persistence.PrimitiveEffectName quick_fall;
+    enum_constant public static final com.android.internal.vibrator.persistence.PrimitiveEffectName quick_rise;
+    enum_constant public static final com.android.internal.vibrator.persistence.PrimitiveEffectName slow_rise;
+    enum_constant public static final com.android.internal.vibrator.persistence.PrimitiveEffectName spin;
+    enum_constant public static final com.android.internal.vibrator.persistence.PrimitiveEffectName thud;
+    enum_constant public static final com.android.internal.vibrator.persistence.PrimitiveEffectName tick;
+  }
+
+  public class Vibration {
+    ctor public Vibration();
+    method public com.android.internal.vibrator.persistence.PredefinedEffect getPredefinedEffect_optional();
+    method public com.android.internal.vibrator.persistence.PrimitiveEffect getPrimitiveEffect_optional();
+    method public com.android.internal.vibrator.persistence.WaveformEffect getWaveformEffect_optional();
+    method public void setPredefinedEffect_optional(com.android.internal.vibrator.persistence.PredefinedEffect);
+    method public void setPrimitiveEffect_optional(com.android.internal.vibrator.persistence.PrimitiveEffect);
+    method public void setWaveformEffect_optional(com.android.internal.vibrator.persistence.WaveformEffect);
+  }
+
+  public enum WaveformAmplitudeDefault {
+    method public String getRawName();
+    enum_constant public static final com.android.internal.vibrator.persistence.WaveformAmplitudeDefault _default;
+  }
+
+  public class WaveformEffect {
+    ctor public WaveformEffect();
+    method public com.android.internal.vibrator.persistence.WaveformEffect.Repeating getRepeating();
+    method public java.util.List<com.android.internal.vibrator.persistence.WaveformEntry> getWaveformEntry();
+    method public void setRepeating(com.android.internal.vibrator.persistence.WaveformEffect.Repeating);
+  }
+
+  public static class WaveformEffect.Repeating {
+    ctor public WaveformEffect.Repeating();
+    method public java.util.List<com.android.internal.vibrator.persistence.WaveformEntry> getWaveformEntry();
+  }
+
+  public class WaveformEntry {
+    ctor public WaveformEntry();
+    method public String getAmplitude();
+    method public java.math.BigInteger getDurationMs();
+    method public void setAmplitude(String);
+    method public void setDurationMs(java.math.BigInteger);
+  }
+
+  public class XmlParser {
+    ctor public XmlParser();
+    method public static com.android.internal.vibrator.persistence.Vibration read(java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public static String readText(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public static void skip(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+  }
+
+}
+
diff --git a/core/xsd/vibrator/vibration/schema/last_current.txt b/core/xsd/vibrator/vibration/schema/last_current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/core/xsd/vibrator/vibration/schema/last_current.txt
diff --git a/core/xsd/vibrator/vibration/schema/last_removed.txt b/core/xsd/vibrator/vibration/schema/last_removed.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/core/xsd/vibrator/vibration/schema/last_removed.txt
diff --git a/core/xsd/vibrator/vibration/schema/removed.txt b/core/xsd/vibrator/vibration/schema/removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/core/xsd/vibrator/vibration/schema/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/core/xsd/vibrator/vibration/vibration-plus-hidden-apis.xsd b/core/xsd/vibrator/vibration/vibration-plus-hidden-apis.xsd
new file mode 100644
index 0000000..cca1359
--- /dev/null
+++ b/core/xsd/vibrator/vibration/vibration-plus-hidden-apis.xsd
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<!--
+    This defines the format of the XML file used to define VibrationEffect created via public and
+    hidden APIs. This format is not enforced in a backwards compatible way, and should only be used
+    on device-specific vibration files.
+-->
+<xs:schema version="2.0"
+           elementFormDefault="qualified"
+           xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+    <xs:element name="vibration" type="Vibration"/>
+
+    <!-- Type definitions -->
+
+    <xs:complexType name="Vibration">
+        <xs:choice>
+
+            <!-- Waveform vibration effect -->
+            <xs:element name="waveform-effect" type="WaveformEffect"/>
+
+            <!-- Predefined vibration effect -->
+            <xs:element name="predefined-effect" type="PredefinedEffect"/>
+
+            <!-- Primitive composition effect -->
+            <xs:sequence>
+                <xs:element name="primitive-effect" type="PrimitiveEffect"/>
+            </xs:sequence>
+
+        </xs:choice>
+    </xs:complexType>
+
+    <xs:complexType name="WaveformEffect">
+        <xs:sequence>
+
+            <!-- Optional preamble, zero or more entries -->
+            <xs:element name="waveform-entry" type="WaveformEntry"
+                        minOccurs="0" maxOccurs="unbounded"/>
+
+            <!-- Repeating element, with one or more entries -->
+            <xs:element name="repeating" minOccurs="0">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element name="waveform-entry" type="WaveformEntry"
+                                    maxOccurs="unbounded"/>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
+
+        </xs:sequence>
+        <!-- Unsupported by xsd_config, but will be used in validation:
+        <xs:assert test="fn:count(./waveform-entry) > 0 or fn:count(./repeating) > 0)"/>
+        -->
+    </xs:complexType>
+
+    <xs:complexType name="WaveformEntry">
+        <xs:attribute name="durationMs" type="xs:nonNegativeInteger" use="required"/>
+        <xs:attribute name="amplitude" type="WaveformAmplitude" use="required"/>
+    </xs:complexType>
+
+    <xs:simpleType name="WaveformAmplitude">
+        <xs:union memberTypes="WaveformAmplitudeInt WaveformAmplitudeDefault"/>
+    </xs:simpleType>
+
+    <!-- Amplitude int in [0,255] -->
+    <xs:simpleType name="WaveformAmplitudeInt">
+        <xs:restriction base="xs:int">
+            <xs:minInclusive value="0"/>
+            <xs:maxInclusive value="255"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <!-- Default amplitude as defined by VibrationEffect.DEFAULT_AMPLITUDE -->
+    <xs:simpleType  name="WaveformAmplitudeDefault">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="default"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:complexType name="PredefinedEffect">
+        <xs:attribute name="name" type="PredefinedEffectName" use="required"/>
+        <xs:attribute name="fallback" type="xs:boolean"/><!-- hidden -->
+    </xs:complexType>
+
+    <!-- Predefined effect names as defined by VibrationEffect.EFFECT_* -->
+    <xs:simpleType  name="PredefinedEffectName">
+        <xs:restriction base="xs:string">
+            <!-- Public effects -->
+            <xs:enumeration value="tick"/>
+            <xs:enumeration value="click"/>
+            <xs:enumeration value="heavy_click"/>
+            <xs:enumeration value="double_click"/>
+            <!-- Hidden effects -->
+            <xs:enumeration value="texture_tick"/>
+            <xs:enumeration value="thud"/>
+            <xs:enumeration value="pop"/>
+            <xs:enumeration value="ringtone_1"/>
+            <xs:enumeration value="ringtone_2"/>
+            <xs:enumeration value="ringtone_3"/>
+            <xs:enumeration value="ringtone_4"/>
+            <xs:enumeration value="ringtone_5"/>
+            <xs:enumeration value="ringtone_6"/>
+            <xs:enumeration value="ringtone_7"/>
+            <xs:enumeration value="ringtone_8"/>
+            <xs:enumeration value="ringtone_9"/>
+            <xs:enumeration value="ringtone_10"/>
+            <xs:enumeration value="ringtone_11"/>
+            <xs:enumeration value="ringtone_12"/>
+            <xs:enumeration value="ringtone_13"/>
+            <xs:enumeration value="ringtone_14"/>
+            <xs:enumeration value="ringtone_15"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:complexType name="PrimitiveEffect">
+        <xs:attribute name="name" type="PrimitiveEffectName" use="required"/>
+        <xs:attribute name="scale" type="PrimitiveScale"/>
+        <xs:attribute name="delayMs" type="xs:nonNegativeInteger"/>
+    </xs:complexType>
+
+    <!-- Primitive names as defined by VibrationEffect.Composition.PRIMITIVE_* -->
+    <xs:simpleType  name="PrimitiveEffectName">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="low_tick"/>
+            <xs:enumeration value="tick"/>
+            <xs:enumeration value="click"/>
+            <xs:enumeration value="slow_rise"/>
+            <xs:enumeration value="quick_rise"/>
+            <xs:enumeration value="quick_fall"/>
+            <xs:enumeration value="spin"/>
+            <xs:enumeration value="thud"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <!-- Primitive scale float in [0,1] -->
+    <xs:simpleType name="PrimitiveScale">
+        <xs:restriction base="xs:float">
+            <xs:minInclusive value="0"/>
+            <xs:maxInclusive value="1"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+</xs:schema>
diff --git a/core/xsd/vibrator/vibration/vibration.xsd b/core/xsd/vibrator/vibration/vibration.xsd
new file mode 100644
index 0000000..b1a815a
--- /dev/null
+++ b/core/xsd/vibrator/vibration/vibration.xsd
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<!--
+    This defines the format of the XML file used to define VibrationEffect created via public APIs
+-->
+<xs:schema version="2.0"
+           elementFormDefault="qualified"
+           xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+    <xs:element name="vibration" type="Vibration"/>
+
+    <!-- Type definitions -->
+
+    <xs:complexType name="Vibration">
+        <xs:choice>
+
+            <!-- Waveform vibration effect -->
+            <xs:element name="waveform-effect" type="WaveformEffect"/>
+
+            <!-- Predefined vibration effect -->
+            <xs:element name="predefined-effect" type="PredefinedEffect"/>
+
+            <!-- Primitive composition effect -->
+            <xs:sequence>
+                <xs:element name="primitive-effect" type="PrimitiveEffect"/>
+            </xs:sequence>
+
+        </xs:choice>
+    </xs:complexType>
+
+    <xs:complexType name="WaveformEffect">
+        <xs:sequence>
+
+            <!-- Optional preamble, zero or more entries -->
+            <xs:element name="waveform-entry" type="WaveformEntry"
+                        minOccurs="0" maxOccurs="unbounded"/>
+
+            <!-- Repeating element, with one or more entries -->
+            <xs:element name="repeating" minOccurs="0">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element name="waveform-entry" type="WaveformEntry"
+                                    maxOccurs="unbounded"/>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
+
+        </xs:sequence>
+        <!-- Unsupported by xsd_config, but will be used in validation:
+        <xs:assert test="fn:count(./waveform-entry) > 0 or fn:count(./repeating) > 0)"/>
+        -->
+    </xs:complexType>
+
+    <xs:complexType name="WaveformEntry">
+        <xs:attribute name="durationMs" type="xs:nonNegativeInteger" use="required"/>
+        <xs:attribute name="amplitude" type="WaveformAmplitude" use="required"/>
+    </xs:complexType>
+
+    <xs:simpleType name="WaveformAmplitude">
+        <xs:union memberTypes="WaveformAmplitudeInt WaveformAmplitudeDefault"/>
+    </xs:simpleType>
+
+    <!-- Amplitude int in [0,255] -->
+    <xs:simpleType name="WaveformAmplitudeInt">
+        <xs:restriction base="xs:int">
+            <xs:minInclusive value="0"/>
+            <xs:maxInclusive value="255"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <!-- Default amplitude as defined by VibrationEffect.DEFAULT_AMPLITUDE -->
+    <xs:simpleType  name="WaveformAmplitudeDefault">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="default"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:complexType name="PredefinedEffect">
+        <xs:attribute name="name" type="PredefinedEffectName" use="required"/>
+    </xs:complexType>
+
+    <!-- Predefined effect names as defined by VibrationEffect.EFFECT_* -->
+    <xs:simpleType  name="PredefinedEffectName">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="tick"/>
+            <xs:enumeration value="click"/>
+            <xs:enumeration value="heavy_click"/>
+            <xs:enumeration value="double_click"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:complexType name="PrimitiveEffect">
+        <xs:attribute name="name" type="PrimitiveEffectName" use="required"/>
+        <xs:attribute name="scale" type="PrimitiveScale"/>
+        <xs:attribute name="delayMs" type="xs:nonNegativeInteger"/>
+    </xs:complexType>
+
+    <!-- Primitive names as defined by VibrationEffect.Composition.PRIMITIVE_* -->
+    <xs:simpleType  name="PrimitiveEffectName">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="low_tick"/>
+            <xs:enumeration value="tick"/>
+            <xs:enumeration value="click"/>
+            <xs:enumeration value="slow_rise"/>
+            <xs:enumeration value="quick_rise"/>
+            <xs:enumeration value="quick_fall"/>
+            <xs:enumeration value="spin"/>
+            <xs:enumeration value="thud"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <!-- Primitive scale float in [0,1] -->
+    <xs:simpleType name="PrimitiveScale">
+        <xs:restriction base="xs:float">
+            <xs:minInclusive value="0"/>
+            <xs:maxInclusive value="1"/>
+        </xs:restriction>
+    </xs:simpleType>
+
+</xs:schema>
diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml
index b05507e..3206dd2 100644
--- a/data/etc/privapp-permissions-platform.xml
+++ b/data/etc/privapp-permissions-platform.xml
@@ -536,6 +536,10 @@
         <permission name="android.permission.INTERACT_ACROSS_USERS"/>
     </privapp-permissions>
 
+    <privapp-permissions package="com.android.soundpicker">
+        <permission name="android.permission.INTERACT_ACROSS_USERS" />
+    </privapp-permissions>
+
     <privapp-permissions package="com.android.tv">
         <permission name="android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE"/>
         <permission name="android.permission.DVB_DEVICE"/>
diff --git a/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json
index 71e9263..6057852 100644
--- a/data/etc/services.core.protolog.json
+++ b/data/etc/services.core.protolog.json
@@ -457,6 +457,12 @@
       "group": "WM_DEBUG_TASKS",
       "at": "com\/android\/server\/wm\/ActivityTaskManagerService.java"
     },
+    "-1671601441": {
+      "message": "attachWindowContextToDisplayContent: calling from non-existing process pid=%d uid=%d",
+      "level": "WARN",
+      "group": "WM_ERROR",
+      "at": "com\/android\/server\/wm\/WindowManagerService.java"
+    },
     "-1670695197": {
       "message": "Attempted to add presentation window to a non-suitable display.  Aborting.",
       "level": "WARN",
@@ -1225,6 +1231,12 @@
       "group": "WM_DEBUG_STARTING_WINDOW",
       "at": "com\/android\/server\/wm\/WindowState.java"
     },
+    "-961053385": {
+      "message": "attachWindowContextToDisplayArea: calling from non-existing process pid=%d uid=%d",
+      "level": "WARN",
+      "group": "WM_ERROR",
+      "at": "com\/android\/server\/wm\/WindowManagerService.java"
+    },
     "-957060823": {
       "message": "Moving to PAUSING: %s",
       "level": "VERBOSE",
@@ -4267,6 +4279,12 @@
       "group": "WM_DEBUG_ORIENTATION",
       "at": "com\/android\/server\/wm\/DisplayContent.java"
     },
+    "1879463933": {
+      "message": "attachWindowContextToWindowToken: calling from non-existing process pid=%d uid=%d",
+      "level": "WARN",
+      "group": "WM_ERROR",
+      "at": "com\/android\/server\/wm\/WindowManagerService.java"
+    },
     "1891501279": {
       "message": "cancelAnimation(): reason=%s",
       "level": "DEBUG",
diff --git a/data/fonts/Android.bp b/data/fonts/Android.bp
index f90a74d..3dd9ba9 100644
--- a/data/fonts/Android.bp
+++ b/data/fonts/Android.bp
@@ -52,3 +52,8 @@
     name: "fonts.xml",
     src: "fonts.xml",
 }
+
+prebuilt_etc {
+    name: "font_fallback.xml",
+    src: "font_fallback.xml",
+}
diff --git a/data/fonts/font_fallback.xml b/data/fonts/font_fallback.xml
new file mode 100644
index 0000000..1e97fce
--- /dev/null
+++ b/data/fonts/font_fallback.xml
@@ -0,0 +1,1630 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    In this file, all fonts without names are added to the default list.
+    Fonts are chosen based on a match: full BCP-47 language tag including
+    script, then just language, and finally order (the first font containing
+    the glyph).
+
+    Order of appearance is also the tiebreaker for weight matching. This is
+    the reason why the 900 weights of Roboto precede the 700 weights - we
+    prefer the former when an 800 weight is requested. Since bold spans
+    effectively add 300 to the weight, this ensures that 900 is the bold
+    paired with the 500 weight, ensuring adequate contrast.
+
+    TODO(rsheeter) update comment; ordering to match 800 to 900 is no longer required
+-->
+<familyset version="23">
+    <!-- first font is default -->
+    <family name="sans-serif">
+        <font weight="100" style="normal">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="100" />
+        </font>
+        <font weight="200" style="normal">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="200" />
+        </font>
+        <font weight="300" style="normal">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="300" />
+        </font>
+        <font weight="400" style="normal">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="400" />
+        </font>
+        <font weight="500" style="normal">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="500" />
+        </font>
+        <font weight="600" style="normal">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="600" />
+        </font>
+        <font weight="700" style="normal">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="700" />
+        </font>
+        <font weight="800" style="normal">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="800" />
+        </font>
+        <font weight="900" style="normal">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="900" />
+        </font>
+        <font weight="100" style="italic">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="1" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="100" />
+        </font>
+        <font weight="200" style="italic">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="1" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="200" />
+        </font>
+        <font weight="300" style="italic">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="1" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="300" />
+        </font>
+        <font weight="400" style="italic">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="1" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="400" />
+        </font>
+        <font weight="500" style="italic">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="1" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="500" />
+        </font>
+        <font weight="600" style="italic">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="1" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="600" />
+        </font>
+        <font weight="700" style="italic">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="1" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="700" />
+        </font>
+        <font weight="800" style="italic">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="1" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="800" />
+        </font>
+        <font weight="900" style="italic">Roboto-Regular.ttf
+          <axis tag="ital" stylevalue="1" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="900" />
+        </font>
+   </family>
+
+
+    <!-- Note that aliases must come after the fonts they reference. -->
+    <alias name="sans-serif-thin" to="sans-serif" weight="100" />
+    <alias name="sans-serif-light" to="sans-serif" weight="300" />
+    <alias name="sans-serif-medium" to="sans-serif" weight="500" />
+    <alias name="sans-serif-black" to="sans-serif" weight="900" />
+    <alias name="arial" to="sans-serif" />
+    <alias name="helvetica" to="sans-serif" />
+    <alias name="tahoma" to="sans-serif" />
+    <alias name="verdana" to="sans-serif" />
+
+    <family name="sans-serif-condensed">
+      <font weight="100" style="normal">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="0" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="100" />
+      </font>
+      <font weight="200" style="normal">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="0" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="200" />
+      </font>
+      <font weight="300" style="normal">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="0" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="300" />
+      </font>
+      <font weight="400" style="normal">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="0" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="400" />
+      </font>
+      <font weight="500" style="normal">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="0" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="500" />
+      </font>
+      <font weight="600" style="normal">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="0" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="600" />
+      </font>
+      <font weight="700" style="normal">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="0" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="700" />
+      </font>
+      <font weight="800" style="normal">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="0" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="800" />
+      </font>
+      <font weight="900" style="normal">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="0" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="900" />
+      </font>
+      <font weight="100" style="italic">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="1" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="100" />
+      </font>
+      <font weight="200" style="italic">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="1" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="200" />
+      </font>
+      <font weight="300" style="italic">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="1" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="300" />
+      </font>
+      <font weight="400" style="italic">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="1" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="400" />
+      </font>
+      <font weight="500" style="italic">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="1" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="500" />
+      </font>
+      <font weight="600" style="italic">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="1" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="600" />
+      </font>
+      <font weight="700" style="italic">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="1" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="700" />
+      </font>
+      <font weight="800" style="italic">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="1" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="800" />
+      </font>
+      <font weight="900" style="italic">Roboto-Regular.ttf
+        <axis tag="ital" stylevalue="1" />
+        <axis tag="wdth" stylevalue="75" />
+        <axis tag="wght" stylevalue="900" />
+      </font>
+    </family>
+    <alias name="sans-serif-condensed-light" to="sans-serif-condensed" weight="300" />
+    <alias name="sans-serif-condensed-medium" to="sans-serif-condensed" weight="500" />
+
+    <family name="serif">
+        <font weight="400" style="normal" postScriptName="NotoSerif">NotoSerif-Regular.ttf</font>
+        <font weight="700" style="normal">NotoSerif-Bold.ttf</font>
+        <font weight="400" style="italic">NotoSerif-Italic.ttf</font>
+        <font weight="700" style="italic">NotoSerif-BoldItalic.ttf</font>
+    </family>
+    <alias name="serif-bold" to="serif" weight="700" />
+    <alias name="times" to="serif" />
+    <alias name="times new roman" to="serif" />
+    <alias name="palatino" to="serif" />
+    <alias name="georgia" to="serif" />
+    <alias name="baskerville" to="serif" />
+    <alias name="goudy" to="serif" />
+    <alias name="fantasy" to="serif" />
+    <alias name="ITC Stone Serif" to="serif" />
+
+    <family name="monospace">
+        <font weight="400" style="normal">DroidSansMono.ttf</font>
+    </family>
+    <alias name="sans-serif-monospace" to="monospace" />
+    <alias name="monaco" to="monospace" />
+
+    <family name="serif-monospace">
+        <font weight="400" style="normal" postScriptName="CutiveMono-Regular">CutiveMono.ttf</font>
+    </family>
+    <alias name="courier" to="serif-monospace" />
+    <alias name="courier new" to="serif-monospace" />
+
+    <family name="casual">
+        <font weight="400" style="normal" postScriptName="ComingSoon-Regular">ComingSoon.ttf</font>
+    </family>
+
+    <family name="cursive">
+      <font weight="400" style="normal">DancingScript-Regular.ttf
+        <axis tag="wght" stylevalue="400" />
+      </font>
+      <font weight="700" style="normal">DancingScript-Regular.ttf
+        <axis tag="wght" stylevalue="700" />
+      </font>
+    </family>
+
+    <family name="sans-serif-smallcaps">
+        <font weight="400" style="normal">CarroisGothicSC-Regular.ttf</font>
+    </family>
+
+    <family name="source-sans-pro">
+        <font weight="400" style="normal">SourceSansPro-Regular.ttf</font>
+        <font weight="400" style="italic">SourceSansPro-Italic.ttf</font>
+        <font weight="600" style="normal">SourceSansPro-SemiBold.ttf</font>
+        <font weight="600" style="italic">SourceSansPro-SemiBoldItalic.ttf</font>
+        <font weight="700" style="normal">SourceSansPro-Bold.ttf</font>
+        <font weight="700" style="italic">SourceSansPro-BoldItalic.ttf</font>
+    </family>
+    <alias name="source-sans-pro-semi-bold" to="source-sans-pro" weight="600"/>
+
+    <family name="roboto-flex">
+        <font weight="100" style="normal">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="100" />
+        </font>
+        <font weight="200" style="normal">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="200" />
+        </font>
+        <font weight="300" style="normal">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="300" />
+        </font>
+        <font weight="400" style="normal">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="400" />
+        </font>
+        <font weight="500" style="normal">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="500" />
+        </font>
+        <font weight="600" style="normal">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="600" />
+        </font>
+        <font weight="700" style="normal">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="700" />
+        </font>
+        <font weight="800" style="normal">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="800" />
+        </font>
+        <font weight="900" style="normal">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="0" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="900" />
+        </font>
+        <font weight="100" style="italic">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="-10" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="100" />
+        </font>
+        <font weight="200" style="italic">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="-10" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="200" />
+        </font>
+        <font weight="300" style="italic">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="-10" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="300" />
+        </font>
+        <font weight="400" style="italic">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="-10" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="400" />
+        </font>
+        <font weight="500" style="italic">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="-10" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="500" />
+        </font>
+        <font weight="600" style="italic">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="-10" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="600" />
+        </font>
+        <font weight="700" style="italic">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="-10" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="700" />
+        </font>
+        <font weight="800" style="italic">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="-10" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="800" />
+        </font>
+        <font weight="900" style="italic">RobotoFlex-Regular.ttf
+          <axis tag="slnt" stylevalue="-10" />
+          <axis tag="wdth" stylevalue="100" />
+          <axis tag="wght" stylevalue="900" />
+        </font>
+    </family>
+
+    <!-- fallback fonts -->
+    <family lang="und-Arab" variant="elegant">
+        <font weight="400" style="normal" postScriptName="NotoNaskhArabic">
+            NotoNaskhArabic-Regular.ttf
+        </font>
+        <font weight="700" style="normal">NotoNaskhArabic-Bold.ttf</font>
+    </family>
+    <family lang="und-Arab" variant="compact">
+        <font weight="400" style="normal" postScriptName="NotoNaskhArabicUI">
+            NotoNaskhArabicUI-Regular.ttf
+        </font>
+        <font weight="700" style="normal">NotoNaskhArabicUI-Bold.ttf</font>
+    </family>
+    <family lang="und-Ethi">
+        <font weight="400" style="normal" postScriptName="NotoSansEthiopic-Regular">
+            NotoSansEthiopic-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansEthiopic-Regular">
+            NotoSansEthiopic-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansEthiopic-Regular">
+            NotoSansEthiopic-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansEthiopic-Regular">
+            NotoSansEthiopic-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+        <font weight="400" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifEthiopic-Regular">NotoSerifEthiopic-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifEthiopic-Regular">NotoSerifEthiopic-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifEthiopic-Regular">NotoSerifEthiopic-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifEthiopic-Regular">NotoSerifEthiopic-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Hebr">
+        <font weight="400" style="normal" postScriptName="NotoSansHebrew">
+            NotoSansHebrew-Regular.ttf
+        </font>
+        <font weight="700" style="normal">NotoSansHebrew-Bold.ttf</font>
+        <font weight="400" style="normal" fallbackFor="serif">NotoSerifHebrew-Regular.ttf</font>
+        <font weight="700" style="normal" fallbackFor="serif">NotoSerifHebrew-Bold.ttf</font>
+    </family>
+    <family lang="und-Thai" variant="elegant">
+        <font weight="400" style="normal" postScriptName="NotoSansThai">NotoSansThai-Regular.ttf
+        </font>
+        <font weight="700" style="normal">NotoSansThai-Bold.ttf</font>
+        <font weight="400" style="normal" fallbackFor="serif">
+            NotoSerifThai-Regular.ttf
+        </font>
+        <font weight="700" style="normal" fallbackFor="serif">NotoSerifThai-Bold.ttf</font>
+    </family>
+    <family lang="und-Thai" variant="compact">
+        <font weight="400" style="normal" postScriptName="NotoSansThaiUI">
+            NotoSansThaiUI-Regular.ttf
+        </font>
+        <font weight="700" style="normal">NotoSansThaiUI-Bold.ttf</font>
+    </family>
+    <family lang="und-Armn">
+        <font weight="400" style="normal" postScriptName="NotoSansArmenian-Regular">
+            NotoSansArmenian-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansArmenian-Regular">
+            NotoSansArmenian-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansArmenian-Regular">
+            NotoSansArmenian-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansArmenian-Regular">
+            NotoSansArmenian-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+        <font weight="400" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifArmenian-Regular">NotoSerifArmenian-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifArmenian-Regular">NotoSerifArmenian-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifArmenian-Regular">NotoSerifArmenian-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifArmenian-Regular">NotoSerifArmenian-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Geor,und-Geok">
+        <font weight="400" style="normal" postScriptName="NotoSansGeorgian-Regular">
+            NotoSansGeorgian-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansGeorgian-Regular">
+            NotoSansGeorgian-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansGeorgian-Regular">
+            NotoSansGeorgian-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansGeorgian-Regular">
+            NotoSansGeorgian-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+        <font weight="400" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifGeorgian-Regular">NotoSerifGeorgian-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifGeorgian-Regular">NotoSerifGeorgian-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifGeorgian-Regular">NotoSerifGeorgian-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifGeorgian-Regular">NotoSerifGeorgian-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Deva" variant="elegant">
+        <font weight="400" style="normal" postScriptName="NotoSansDevanagari-Regular">
+            NotoSansDevanagari-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansDevanagari-Regular">
+            NotoSansDevanagari-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansDevanagari-Regular">
+            NotoSansDevanagari-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansDevanagari-Regular">
+            NotoSansDevanagari-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+        <font weight="400" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifDevanagari-Regular">NotoSerifDevanagari-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifDevanagari-Regular">NotoSerifDevanagari-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifDevanagari-Regular">NotoSerifDevanagari-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifDevanagari-Regular">NotoSerifDevanagari-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Deva" variant="compact">
+        <font weight="400" style="normal" postScriptName="NotoSansDevanagariUI-Regular">
+            NotoSansDevanagariUI-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansDevanagariUI-Regular">
+            NotoSansDevanagariUI-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansDevanagariUI-Regular">
+            NotoSansDevanagariUI-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansDevanagariUI-Regular">
+            NotoSansDevanagariUI-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+
+    <!-- All scripts of India should come after Devanagari, due to shared
+         danda characters.
+    -->
+    <family lang="und-Gujr" variant="elegant">
+        <font weight="400" style="normal" postScriptName="NotoSansGujarati">
+            NotoSansGujarati-Regular.ttf
+        </font>
+        <font weight="700" style="normal">NotoSansGujarati-Bold.ttf</font>
+        <font weight="400" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifGujarati-Regular">NotoSerifGujarati-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifGujarati-Regular">NotoSerifGujarati-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifGujarati-Regular">NotoSerifGujarati-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifGujarati-Regular">NotoSerifGujarati-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Gujr" variant="compact">
+        <font weight="400" style="normal" postScriptName="NotoSansGujaratiUI">
+            NotoSansGujaratiUI-Regular.ttf
+        </font>
+        <font weight="700" style="normal">NotoSansGujaratiUI-Bold.ttf</font>
+    </family>
+    <family lang="und-Guru" variant="elegant">
+        <font weight="400" style="normal" postScriptName="NotoSansGurmukhi-Regular">
+            NotoSansGurmukhi-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansGurmukhi-Regular">
+            NotoSansGurmukhi-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansGurmukhi-Regular">
+            NotoSansGurmukhi-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansGurmukhi-Regular">
+            NotoSansGurmukhi-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+        <font weight="400" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifGurmukhi-Regular">NotoSerifGurmukhi-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifGurmukhi-Regular">NotoSerifGurmukhi-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifGurmukhi-Regular">NotoSerifGurmukhi-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifGurmukhi-Regular">NotoSerifGurmukhi-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Guru" variant="compact">
+        <font weight="400" style="normal" postScriptName="NotoSansGurmukhiUI-Regular">
+            NotoSansGurmukhiUI-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansGurmukhiUI-Regular">
+            NotoSansGurmukhiUI-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansGurmukhiUI-Regular">
+            NotoSansGurmukhiUI-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansGurmukhiUI-Regular">
+            NotoSansGurmukhiUI-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Taml" variant="elegant">
+        <font weight="400" style="normal" postScriptName="NotoSansTamil-Regular">
+            NotoSansTamil-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansTamil-Regular">
+            NotoSansTamil-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansTamil-Regular">
+            NotoSansTamil-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansTamil-Regular">
+            NotoSansTamil-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+        <font weight="400" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifTamil-Regular">NotoSerifTamil-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifTamil-Regular">NotoSerifTamil-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifTamil-Regular">NotoSerifTamil-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifTamil-Regular">NotoSerifTamil-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Taml" variant="compact">
+        <font weight="400" style="normal" postScriptName="NotoSansTamilUI-Regular">
+            NotoSansTamilUI-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansTamilUI-Regular">
+            NotoSansTamilUI-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansTamilUI-Regular">
+            NotoSansTamilUI-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansTamilUI-Regular">
+            NotoSansTamilUI-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Mlym" variant="elegant">
+        <font weight="400" style="normal" postScriptName="NotoSansMalayalam-Regular">
+            NotoSansMalayalam-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansMalayalam-Regular">
+            NotoSansMalayalam-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansMalayalam-Regular">
+            NotoSansMalayalam-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansMalayalam-Regular">
+            NotoSansMalayalam-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+        <font weight="400" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifMalayalam-Regular">NotoSerifMalayalam-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifMalayalam-Regular">NotoSerifMalayalam-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifMalayalam-Regular">NotoSerifMalayalam-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifMalayalam-Regular">NotoSerifMalayalam-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Mlym" variant="compact">
+        <font weight="400" style="normal" postScriptName="NotoSansMalayalamUI-Regular">
+            NotoSansMalayalamUI-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansMalayalamUI-Regular">
+            NotoSansMalayalamUI-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansMalayalamUI-Regular">
+            NotoSansMalayalamUI-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansMalayalamUI-Regular">
+            NotoSansMalayalamUI-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Beng" variant="elegant">
+        <font weight="400" style="normal" postScriptName="NotoSansBengali-Regular">
+            NotoSansBengali-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansBengali-Regular">
+            NotoSansBengali-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansBengali-Regular">
+            NotoSansBengali-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansBengali-Regular">
+            NotoSansBengali-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+        <font weight="400" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifBengali-Regular">NotoSerifBengali-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifBengali-Regular">NotoSerifBengali-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifBengali-Regular">NotoSerifBengali-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifBengali-Regular">NotoSerifBengali-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Beng" variant="compact">
+        <font weight="400" style="normal" postScriptName="NotoSansBengaliUI-Regular">
+            NotoSansBengaliUI-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansBengaliUI-Regular">
+            NotoSansBengaliUI-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansBengaliUI-Regular">
+            NotoSansBengaliUI-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansBengaliUI-Regular">
+            NotoSansBengaliUI-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Telu" variant="elegant">
+        <font weight="400" style="normal" postScriptName="NotoSansTelugu-Regular">
+            NotoSansTelugu-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansTelugu-Regular">
+            NotoSansTelugu-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansTelugu-Regular">
+            NotoSansTelugu-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansTelugu-Regular">
+            NotoSansTelugu-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+        <font weight="400" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifTelugu-Regular">NotoSerifTelugu-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifTelugu-Regular">NotoSerifTelugu-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifTelugu-Regular">NotoSerifTelugu-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifTelugu-Regular">NotoSerifTelugu-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Telu" variant="compact">
+        <font weight="400" style="normal" postScriptName="NotoSansTeluguUI-Regular">
+            NotoSansTeluguUI-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansTeluguUI-Regular">
+            NotoSansTeluguUI-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansTeluguUI-Regular">
+            NotoSansTeluguUI-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansTeluguUI-Regular">
+            NotoSansTeluguUI-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Knda" variant="elegant">
+        <font weight="400" style="normal" postScriptName="NotoSansKannada-Regular">
+            NotoSansKannada-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansKannada-Regular">
+            NotoSansKannada-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansKannada-Regular">
+            NotoSansKannada-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansKannada-Regular">
+            NotoSansKannada-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+        <font weight="400" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifKannada-Regular">NotoSerifKannada-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifKannada-Regular">NotoSerifKannada-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifKannada-Regular">NotoSerifKannada-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifKannada-Regular">NotoSerifKannada-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Knda" variant="compact">
+        <font weight="400" style="normal" postScriptName="NotoSansKannadaUI-Regular">
+            NotoSansKannadaUI-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansKannadaUI-Regular">
+            NotoSansKannadaUI-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansKannadaUI-Regular">
+            NotoSansKannadaUI-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansKannadaUI-Regular">
+            NotoSansKannadaUI-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Orya" variant="elegant">
+        <font weight="400" style="normal" postScriptName="NotoSansOriya">NotoSansOriya-Regular.ttf
+        </font>
+        <font weight="700" style="normal">NotoSansOriya-Bold.ttf</font>
+    </family>
+    <family lang="und-Orya" variant="compact">
+        <font weight="400" style="normal" postScriptName="NotoSansOriyaUI">
+            NotoSansOriyaUI-Regular.ttf
+        </font>
+        <font weight="700" style="normal">NotoSansOriyaUI-Bold.ttf</font>
+    </family>
+    <family lang="und-Sinh" variant="elegant">
+        <font weight="400" style="normal" postScriptName="NotoSansSinhala-Regular">
+            NotoSansSinhala-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansSinhala-Regular">
+            NotoSansSinhala-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansSinhala-Regular">
+            NotoSansSinhala-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansSinhala-Regular">
+            NotoSansSinhala-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+        <font weight="400" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifSinhala-Regular">NotoSerifSinhala-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifSinhala-Regular">NotoSerifSinhala-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifSinhala-Regular">NotoSerifSinhala-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" fallbackFor="serif"
+              postScriptName="NotoSerifSinhala-Regular">NotoSerifSinhala-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Sinh" variant="compact">
+        <font weight="400" style="normal" postScriptName="NotoSansSinhalaUI-Regular">
+            NotoSansSinhalaUI-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansSinhalaUI-Regular">
+            NotoSansSinhalaUI-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansSinhalaUI-Regular">
+            NotoSansSinhalaUI-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansSinhalaUI-Regular">
+            NotoSansSinhalaUI-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Khmr" variant="elegant">
+        <font weight="100" style="normal" postScriptName="NotoSansKhmer-Regular">
+            NotoSansKhmer-VF.ttf
+            <axis tag="wdth" stylevalue="100.0"/>
+            <axis tag="wght" stylevalue="26.0"/>
+        </font>
+        <font weight="200" style="normal" postScriptName="NotoSansKhmer-Regular">
+            NotoSansKhmer-VF.ttf
+            <axis tag="wdth" stylevalue="100.0"/>
+            <axis tag="wght" stylevalue="39.0"/>
+        </font>
+        <font weight="300" style="normal" postScriptName="NotoSansKhmer-Regular">
+            NotoSansKhmer-VF.ttf
+            <axis tag="wdth" stylevalue="100.0"/>
+            <axis tag="wght" stylevalue="58.0"/>
+        </font>
+        <font weight="400" style="normal" postScriptName="NotoSansKhmer-Regular">
+            NotoSansKhmer-VF.ttf
+            <axis tag="wdth" stylevalue="100.0"/>
+            <axis tag="wght" stylevalue="90.0"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansKhmer-Regular">
+            NotoSansKhmer-VF.ttf
+            <axis tag="wdth" stylevalue="100.0"/>
+            <axis tag="wght" stylevalue="108.0"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansKhmer-Regular">
+            NotoSansKhmer-VF.ttf
+            <axis tag="wdth" stylevalue="100.0"/>
+            <axis tag="wght" stylevalue="128.0"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansKhmer-Regular">
+            NotoSansKhmer-VF.ttf
+            <axis tag="wdth" stylevalue="100.0"/>
+            <axis tag="wght" stylevalue="151.0"/>
+        </font>
+        <font weight="800" style="normal" postScriptName="NotoSansKhmer-Regular">
+            NotoSansKhmer-VF.ttf
+            <axis tag="wdth" stylevalue="100.0"/>
+            <axis tag="wght" stylevalue="169.0"/>
+        </font>
+        <font weight="900" style="normal" postScriptName="NotoSansKhmer-Regular">
+            NotoSansKhmer-VF.ttf
+            <axis tag="wdth" stylevalue="100.0"/>
+            <axis tag="wght" stylevalue="190.0"/>
+        </font>
+        <font weight="400" style="normal" fallbackFor="serif">NotoSerifKhmer-Regular.otf</font>
+        <font weight="700" style="normal" fallbackFor="serif">NotoSerifKhmer-Bold.otf</font>
+    </family>
+    <family lang="und-Khmr" variant="compact">
+        <font weight="400" style="normal" postScriptName="NotoSansKhmerUI">
+            NotoSansKhmerUI-Regular.ttf
+        </font>
+        <font weight="700" style="normal">NotoSansKhmerUI-Bold.ttf</font>
+    </family>
+    <family lang="und-Laoo" variant="elegant">
+        <font weight="400" style="normal">NotoSansLao-Regular.ttf
+        </font>
+        <font weight="700" style="normal">NotoSansLao-Bold.ttf</font>
+        <font weight="400" style="normal" fallbackFor="serif">
+            NotoSerifLao-Regular.ttf
+        </font>
+        <font weight="700" style="normal" fallbackFor="serif">NotoSerifLao-Bold.ttf</font>
+    </family>
+    <family lang="und-Laoo" variant="compact">
+        <font weight="400" style="normal" postScriptName="NotoSansLaoUI">NotoSansLaoUI-Regular.ttf
+        </font>
+        <font weight="700" style="normal">NotoSansLaoUI-Bold.ttf</font>
+    </family>
+    <family lang="und-Mymr" variant="elegant">
+        <font weight="400" style="normal">NotoSansMyanmar-Regular.otf</font>
+        <font weight="500" style="normal">NotoSansMyanmar-Medium.otf</font>
+        <font weight="700" style="normal">NotoSansMyanmar-Bold.otf</font>
+        <font weight="400" style="normal" fallbackFor="serif">NotoSerifMyanmar-Regular.otf</font>
+        <font weight="700" style="normal" fallbackFor="serif">NotoSerifMyanmar-Bold.otf</font>
+    </family>
+    <family lang="und-Mymr" variant="compact">
+        <font weight="400" style="normal">NotoSansMyanmarUI-Regular.otf</font>
+        <font weight="500" style="normal">NotoSansMyanmarUI-Medium.otf</font>
+        <font weight="700" style="normal">NotoSansMyanmarUI-Bold.otf</font>
+    </family>
+    <family lang="und-Thaa">
+        <font weight="400" style="normal" postScriptName="NotoSansThaana">
+            NotoSansThaana-Regular.ttf
+        </font>
+        <font weight="700" style="normal">NotoSansThaana-Bold.ttf</font>
+    </family>
+    <family lang="und-Cham">
+        <font weight="400" style="normal" postScriptName="NotoSansCham">NotoSansCham-Regular.ttf
+        </font>
+        <font weight="700" style="normal">NotoSansCham-Bold.ttf</font>
+    </family>
+    <family lang="und-Ahom">
+        <font weight="400" style="normal">NotoSansAhom-Regular.otf</font>
+    </family>
+    <family lang="und-Adlm">
+        <font weight="400" style="normal" postScriptName="NotoSansAdlam-Regular">
+            NotoSansAdlam-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansAdlam-Regular">
+            NotoSansAdlam-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansAdlam-Regular">
+            NotoSansAdlam-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansAdlam-Regular">
+            NotoSansAdlam-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Avst">
+        <font weight="400" style="normal" postScriptName="NotoSansAvestan">
+            NotoSansAvestan-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Bali">
+        <font weight="400" style="normal" postScriptName="NotoSansBalinese">
+            NotoSansBalinese-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Bamu">
+        <font weight="400" style="normal" postScriptName="NotoSansBamum">NotoSansBamum-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Batk">
+        <font weight="400" style="normal" postScriptName="NotoSansBatak">NotoSansBatak-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Brah">
+        <font weight="400" style="normal" postScriptName="NotoSansBrahmi">
+            NotoSansBrahmi-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Bugi">
+        <font weight="400" style="normal" postScriptName="NotoSansBuginese">
+            NotoSansBuginese-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Buhd">
+        <font weight="400" style="normal" postScriptName="NotoSansBuhid">NotoSansBuhid-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Cans">
+        <font weight="400" style="normal">
+            NotoSansCanadianAboriginal-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Cari">
+        <font weight="400" style="normal" postScriptName="NotoSansCarian">
+            NotoSansCarian-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Cakm">
+        <font weight="400" style="normal">NotoSansChakma-Regular.otf</font>
+    </family>
+    <family lang="und-Cher">
+        <font weight="400" style="normal">NotoSansCherokee-Regular.ttf</font>
+    </family>
+    <family lang="und-Copt">
+        <font weight="400" style="normal" postScriptName="NotoSansCoptic">
+            NotoSansCoptic-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Xsux">
+        <font weight="400" style="normal" postScriptName="NotoSansCuneiform">
+            NotoSansCuneiform-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Cprt">
+        <font weight="400" style="normal" postScriptName="NotoSansCypriot">
+            NotoSansCypriot-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Dsrt">
+        <font weight="400" style="normal" postScriptName="NotoSansDeseret">
+            NotoSansDeseret-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Egyp">
+        <font weight="400" style="normal" postScriptName="NotoSansEgyptianHieroglyphs">
+            NotoSansEgyptianHieroglyphs-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Elba">
+        <font weight="400" style="normal">NotoSansElbasan-Regular.otf</font>
+    </family>
+    <family lang="und-Glag">
+        <font weight="400" style="normal" postScriptName="NotoSansGlagolitic">
+            NotoSansGlagolitic-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Goth">
+        <font weight="400" style="normal" postScriptName="NotoSansGothic">
+            NotoSansGothic-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Hano">
+        <font weight="400" style="normal" postScriptName="NotoSansHanunoo">
+            NotoSansHanunoo-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Armi">
+        <font weight="400" style="normal" postScriptName="NotoSansImperialAramaic">
+            NotoSansImperialAramaic-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Phli">
+        <font weight="400" style="normal" postScriptName="NotoSansInscriptionalPahlavi">
+            NotoSansInscriptionalPahlavi-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Prti">
+        <font weight="400" style="normal" postScriptName="NotoSansInscriptionalParthian">
+            NotoSansInscriptionalParthian-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Java">
+        <font weight="400" style="normal">NotoSansJavanese-Regular.otf</font>
+    </family>
+    <family lang="und-Kthi">
+        <font weight="400" style="normal" postScriptName="NotoSansKaithi">
+            NotoSansKaithi-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Kali">
+        <font weight="400" style="normal" postScriptName="NotoSansKayahLi">
+            NotoSansKayahLi-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Khar">
+        <font weight="400" style="normal" postScriptName="NotoSansKharoshthi">
+            NotoSansKharoshthi-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Lepc">
+        <font weight="400" style="normal" postScriptName="NotoSansLepcha">
+            NotoSansLepcha-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Limb">
+        <font weight="400" style="normal" postScriptName="NotoSansLimbu">NotoSansLimbu-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Linb">
+        <font weight="400" style="normal" postScriptName="NotoSansLinearB">
+            NotoSansLinearB-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Lisu">
+        <font weight="400" style="normal" postScriptName="NotoSansLisu">NotoSansLisu-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Lyci">
+        <font weight="400" style="normal" postScriptName="NotoSansLycian">
+            NotoSansLycian-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Lydi">
+        <font weight="400" style="normal" postScriptName="NotoSansLydian">
+            NotoSansLydian-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Mand">
+        <font weight="400" style="normal" postScriptName="NotoSansMandaic">
+            NotoSansMandaic-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Mtei">
+        <font weight="400" style="normal" postScriptName="NotoSansMeeteiMayek">
+            NotoSansMeeteiMayek-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Talu">
+        <font weight="400" style="normal" postScriptName="NotoSansNewTaiLue">
+            NotoSansNewTaiLue-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Nkoo">
+        <font weight="400" style="normal" postScriptName="NotoSansNKo">NotoSansNKo-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Ogam">
+        <font weight="400" style="normal" postScriptName="NotoSansOgham">NotoSansOgham-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Olck">
+        <font weight="400" style="normal" postScriptName="NotoSansOlChiki">
+            NotoSansOlChiki-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Ital">
+        <font weight="400" style="normal" postScriptName="NotoSansOldItalic">
+            NotoSansOldItalic-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Xpeo">
+        <font weight="400" style="normal" postScriptName="NotoSansOldPersian">
+            NotoSansOldPersian-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Sarb">
+        <font weight="400" style="normal" postScriptName="NotoSansOldSouthArabian">
+            NotoSansOldSouthArabian-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Orkh">
+        <font weight="400" style="normal" postScriptName="NotoSansOldTurkic">
+            NotoSansOldTurkic-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Osge">
+        <font weight="400" style="normal">NotoSansOsage-Regular.ttf</font>
+    </family>
+    <family lang="und-Osma">
+        <font weight="400" style="normal" postScriptName="NotoSansOsmanya">
+            NotoSansOsmanya-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Phnx">
+        <font weight="400" style="normal" postScriptName="NotoSansPhoenician">
+            NotoSansPhoenician-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Rjng">
+        <font weight="400" style="normal" postScriptName="NotoSansRejang">
+            NotoSansRejang-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Runr">
+        <font weight="400" style="normal" postScriptName="NotoSansRunic">NotoSansRunic-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Samr">
+        <font weight="400" style="normal" postScriptName="NotoSansSamaritan">
+            NotoSansSamaritan-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Saur">
+        <font weight="400" style="normal" postScriptName="NotoSansSaurashtra">
+            NotoSansSaurashtra-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Shaw">
+        <font weight="400" style="normal" postScriptName="NotoSansShavian">
+            NotoSansShavian-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Sund">
+        <font weight="400" style="normal" postScriptName="NotoSansSundanese">
+            NotoSansSundanese-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Sylo">
+        <font weight="400" style="normal" postScriptName="NotoSansSylotiNagri">
+            NotoSansSylotiNagri-Regular.ttf
+        </font>
+    </family>
+    <!-- Esrangela should precede Eastern and Western Syriac, since it's our default form. -->
+    <family lang="und-Syre">
+        <font weight="400" style="normal" postScriptName="NotoSansSyriacEstrangela">
+            NotoSansSyriacEstrangela-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Syrn">
+        <font weight="400" style="normal" postScriptName="NotoSansSyriacEastern">
+            NotoSansSyriacEastern-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Syrj">
+        <font weight="400" style="normal" postScriptName="NotoSansSyriacWestern">
+            NotoSansSyriacWestern-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Tglg">
+        <font weight="400" style="normal" postScriptName="NotoSansTagalog">
+            NotoSansTagalog-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Tagb">
+        <font weight="400" style="normal" postScriptName="NotoSansTagbanwa">
+            NotoSansTagbanwa-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Lana">
+        <font weight="400" style="normal" postScriptName="NotoSansTaiTham">
+            NotoSansTaiTham-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Tavt">
+        <font weight="400" style="normal" postScriptName="NotoSansTaiViet">
+            NotoSansTaiViet-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Tibt">
+        <font weight="400" style="normal" postScriptName="NotoSerifTibetan-Regular">
+            NotoSerifTibetan-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSerifTibetan-Regular">
+            NotoSerifTibetan-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSerifTibetan-Regular">
+            NotoSerifTibetan-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSerifTibetan-Regular">
+            NotoSerifTibetan-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Tfng">
+        <font weight="400" style="normal">NotoSansTifinagh-Regular.otf</font>
+    </family>
+    <family lang="und-Ugar">
+        <font weight="400" style="normal" postScriptName="NotoSansUgaritic">
+            NotoSansUgaritic-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Vaii">
+        <font weight="400" style="normal" postScriptName="NotoSansVai">NotoSansVai-Regular.ttf
+        </font>
+    </family>
+    <family>
+        <font weight="400" style="normal">NotoSansSymbols-Regular-Subsetted.ttf</font>
+    </family>
+    <family lang="zh-Hans">
+        <font weight="400" style="normal" index="2" postScriptName="NotoSansCJKjp-Regular">
+            NotoSansCJK-Regular.ttc
+        </font>
+        <font weight="400" style="normal" index="2" fallbackFor="serif"
+              postScriptName="NotoSerifCJKjp-Regular">NotoSerifCJK-Regular.ttc
+        </font>
+    </family>
+    <family lang="zh-Hant,zh-Bopo">
+        <font weight="400" style="normal" index="3" postScriptName="NotoSansCJKjp-Regular">
+            NotoSansCJK-Regular.ttc
+        </font>
+        <font weight="400" style="normal" index="3" fallbackFor="serif"
+              postScriptName="NotoSerifCJKjp-Regular">NotoSerifCJK-Regular.ttc
+        </font>
+    </family>
+    <family lang="ja">
+        <font weight="400" style="normal" index="0" postScriptName="NotoSansCJKjp-Regular">
+            NotoSansCJK-Regular.ttc
+        </font>
+        <font weight="400" style="normal" index="0" fallbackFor="serif"
+              postScriptName="NotoSerifCJKjp-Regular">NotoSerifCJK-Regular.ttc
+        </font>
+    </family>
+    <family lang="ko">
+        <font weight="400" style="normal" index="1" postScriptName="NotoSansCJKjp-Regular">
+            NotoSansCJK-Regular.ttc
+        </font>
+        <font weight="400" style="normal" index="1" fallbackFor="serif"
+              postScriptName="NotoSerifCJKjp-Regular">NotoSerifCJK-Regular.ttc
+        </font>
+    </family>
+    <family lang="und-Zsye">
+        <font weight="400" style="normal">NotoColorEmoji.ttf</font>
+    </family>
+    <family lang="und-Zsye">
+        <font weight="400" style="normal">NotoColorEmojiFlags.ttf</font>
+    </family>
+    <family lang="und-Zsym">
+        <font weight="400" style="normal">NotoSansSymbols-Regular-Subsetted2.ttf</font>
+    </family>
+    <!--
+        Tai Le, Yi, Mongolian, and Phags-pa are intentionally kept last, to make sure they don't
+        override the East Asian punctuation for Chinese.
+    -->
+    <family lang="und-Tale">
+        <font weight="400" style="normal" postScriptName="NotoSansTaiLe">NotoSansTaiLe-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Yiii">
+        <font weight="400" style="normal" postScriptName="NotoSansYi">NotoSansYi-Regular.ttf</font>
+    </family>
+    <family lang="und-Mong">
+        <font weight="400" style="normal" postScriptName="NotoSansMongolian">
+            NotoSansMongolian-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Phag">
+        <font weight="400" style="normal" postScriptName="NotoSansPhagsPa">
+            NotoSansPhagsPa-Regular.ttf
+        </font>
+    </family>
+    <family lang="und-Hluw">
+        <font weight="400" style="normal">NotoSansAnatolianHieroglyphs-Regular.otf</font>
+    </family>
+    <family lang="und-Bass">
+        <font weight="400" style="normal">NotoSansBassaVah-Regular.otf</font>
+    </family>
+    <family lang="und-Bhks">
+        <font weight="400" style="normal">NotoSansBhaiksuki-Regular.otf</font>
+    </family>
+    <family lang="und-Hatr">
+        <font weight="400" style="normal">NotoSansHatran-Regular.otf</font>
+    </family>
+    <family lang="und-Lina">
+        <font weight="400" style="normal">NotoSansLinearA-Regular.otf</font>
+    </family>
+    <family lang="und-Mani">
+        <font weight="400" style="normal">NotoSansManichaean-Regular.otf</font>
+    </family>
+    <family lang="und-Marc">
+        <font weight="400" style="normal">NotoSansMarchen-Regular.otf</font>
+    </family>
+    <family lang="und-Merc">
+        <font weight="400" style="normal">NotoSansMeroitic-Regular.otf</font>
+    </family>
+    <family lang="und-Plrd">
+        <font weight="400" style="normal">NotoSansMiao-Regular.otf</font>
+    </family>
+    <family lang="und-Mroo">
+        <font weight="400" style="normal">NotoSansMro-Regular.otf</font>
+    </family>
+    <family lang="und-Mult">
+        <font weight="400" style="normal">NotoSansMultani-Regular.otf</font>
+    </family>
+    <family lang="und-Nbat">
+        <font weight="400" style="normal">NotoSansNabataean-Regular.otf</font>
+    </family>
+    <family lang="und-Newa">
+        <font weight="400" style="normal">NotoSansNewa-Regular.otf</font>
+    </family>
+    <family lang="und-Narb">
+        <font weight="400" style="normal">NotoSansOldNorthArabian-Regular.otf</font>
+    </family>
+    <family lang="und-Perm">
+        <font weight="400" style="normal">NotoSansOldPermic-Regular.otf</font>
+    </family>
+    <family lang="und-Hmng">
+        <font weight="400" style="normal">NotoSansPahawhHmong-Regular.otf</font>
+    </family>
+    <family lang="und-Palm">
+        <font weight="400" style="normal">NotoSansPalmyrene-Regular.otf</font>
+    </family>
+    <family lang="und-Pauc">
+        <font weight="400" style="normal">NotoSansPauCinHau-Regular.otf</font>
+    </family>
+    <family lang="und-Shrd">
+        <font weight="400" style="normal">NotoSansSharada-Regular.otf</font>
+    </family>
+    <family lang="und-Sora">
+        <font weight="400" style="normal">NotoSansSoraSompeng-Regular.otf</font>
+    </family>
+    <family lang="und-Gong">
+        <font weight="400" style="normal">NotoSansGunjalaGondi-Regular.otf</font>
+    </family>
+    <family lang="und-Rohg">
+        <font weight="400" style="normal">NotoSansHanifiRohingya-Regular.otf</font>
+    </family>
+    <family lang="und-Khoj">
+        <font weight="400" style="normal">NotoSansKhojki-Regular.otf</font>
+    </family>
+    <family lang="und-Gonm">
+        <font weight="400" style="normal">NotoSansMasaramGondi-Regular.otf</font>
+    </family>
+    <family lang="und-Wcho">
+        <font weight="400" style="normal">NotoSansWancho-Regular.otf</font>
+    </family>
+    <family lang="und-Wara">
+        <font weight="400" style="normal">NotoSansWarangCiti-Regular.otf</font>
+    </family>
+    <family lang="und-Gran">
+        <font weight="400" style="normal">NotoSansGrantha-Regular.ttf</font>
+    </family>
+    <family lang="und-Modi">
+        <font weight="400" style="normal">NotoSansModi-Regular.ttf</font>
+    </family>
+    <family lang="und-Dogr">
+        <font weight="400" style="normal">NotoSerifDogra-Regular.ttf</font>
+    </family>
+    <family lang="und-Medf">
+        <font weight="400" style="normal" postScriptName="NotoSansMedefaidrin-Regular">
+            NotoSansMedefaidrin-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansMedefaidrin-Regular">
+            NotoSansMedefaidrin-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansMedefaidrin-Regular">
+            NotoSansMedefaidrin-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansMedefaidrin-Regular">
+            NotoSansMedefaidrin-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Soyo">
+        <font weight="400" style="normal" postScriptName="NotoSansSoyombo-Regular">
+            NotoSansSoyombo-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansSoyombo-Regular">
+            NotoSansSoyombo-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansSoyombo-Regular">
+            NotoSansSoyombo-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansSoyombo-Regular">
+            NotoSansSoyombo-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Takr">
+        <font weight="400" style="normal" postScriptName="NotoSansTakri-Regular">
+            NotoSansTakri-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSansTakri-Regular">
+            NotoSansTakri-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSansTakri-Regular">
+            NotoSansTakri-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSansTakri-Regular">
+            NotoSansTakri-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Hmnp">
+        <font weight="400" style="normal" postScriptName="NotoSerifHmongNyiakeng-Regular">
+            NotoSerifNyiakengPuachueHmong-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSerifHmongNyiakeng-Regular">
+            NotoSerifNyiakengPuachueHmong-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSerifHmongNyiakeng-Regular">
+            NotoSerifNyiakengPuachueHmong-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSerifHmongNyiakeng-Regular">
+            NotoSerifNyiakengPuachueHmong-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+    <family lang="und-Yezi">
+        <font weight="400" style="normal" postScriptName="NotoSerifYezidi-Regular">
+            NotoSerifYezidi-VF.ttf
+            <axis tag="wght" stylevalue="400"/>
+        </font>
+        <font weight="500" style="normal" postScriptName="NotoSerifYezidi-Regular">
+            NotoSerifYezidi-VF.ttf
+            <axis tag="wght" stylevalue="500"/>
+        </font>
+        <font weight="600" style="normal" postScriptName="NotoSerifYezidi-Regular">
+            NotoSerifYezidi-VF.ttf
+            <axis tag="wght" stylevalue="600"/>
+        </font>
+        <font weight="700" style="normal" postScriptName="NotoSerifYezidi-Regular">
+            NotoSerifYezidi-VF.ttf
+            <axis tag="wght" stylevalue="700"/>
+        </font>
+    </family>
+</familyset>
diff --git a/data/fonts/fonts.mk b/data/fonts/fonts.mk
index e884f2f..5d1cc66 100644
--- a/data/fonts/fonts.mk
+++ b/data/fonts/fonts.mk
@@ -17,4 +17,5 @@
 PRODUCT_PACKAGES := \
     DroidSansMono.ttf \
     AndroidClock.ttf \
+    font_fallback.xml \
     fonts.xml
diff --git a/data/fonts/fonts.xml b/data/fonts/fonts.xml
index 4a780bc..9320c14 100644
--- a/data/fonts/fonts.xml
+++ b/data/fonts/fonts.xml
@@ -1,5 +1,17 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
+    DEPRECATED: This XML file is no longer a source of the font files installed
+    in the system.
+
+    For the device vendors: please add your font configurations to the
+    platform/frameworks/base/data/font_fallback.xml and also add it to this XML
+    file as much as possible for apps that reads this XML file.
+
+    For the application developers: please stop reading this XML file and use
+    android.graphics.fonts.SystemFonts#getAvailableFonts Java API or
+    ASystemFontIterator_open NDK API for getting list of system installed
+    font files.
+
     WARNING: Parsing of this file by third-party apps is not supported. The
     file, and the font files it refers to, will be renamed and/or moved out
     from their respective location in the next Android release, and/or the
diff --git a/data/keyboards/Vendor_0957_Product_0001.kl b/data/keyboards/Vendor_0957_Product_0001.kl
index 5d7fd85..354f10a 100644
--- a/data/keyboards/Vendor_0957_Product_0001.kl
+++ b/data/keyboards/Vendor_0957_Product_0001.kl
@@ -16,7 +16,7 @@
 # Key Layout file for Google Reference RCU Remote.
 #
 
-key 116   TV_POWER      WAKE
+key 116   POWER         WAKE
 key 217   ASSIST        WAKE
 
 key 103   DPAD_UP
@@ -43,15 +43,16 @@
 key 10    9
 key 11    0
 
+key usage 0x00070037    PERIOD
+
 # custom keys
 key usage 0x000c01BB    TV_INPUT
-key usage 0x000c0186    MACRO_1
+key usage 0x000c0186    MACRO_1     WAKE
 
 key usage 0x000c0185    TV_TELETEXT
 key usage 0x000c0061    CAPTIONS
 
 key usage 0x000c01BD    INFO
-key usage 0x000c0037    PERIOD
 
 key usage 0x000c0069    PROG_RED
 key usage 0x000c006A    PROG_GREEN
diff --git a/errorprone/Android.bp b/errorprone/Android.bp
index 8f32f0e..ad08026 100644
--- a/errorprone/Android.bp
+++ b/errorprone/Android.bp
@@ -21,6 +21,8 @@
     srcs: ["java/**/*.java"],
 
     static_libs: [
+        "annotations",
+        "framework-annotations-lib",
         "//external/error_prone:error_prone_core",
     ],
 
diff --git a/errorprone/java/android/annotation/RequiresNoPermission.java b/errorprone/java/android/annotation/RequiresNoPermission.java
deleted file mode 100644
index 6ff4d6e..0000000
--- a/errorprone/java/android/annotation/RequiresNoPermission.java
+++ /dev/null
@@ -1,36 +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 android.annotation;
-
-import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
-import static java.lang.annotation.ElementType.CONSTRUCTOR;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.RetentionPolicy.CLASS;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-/**
- * Denotes that the annotated element requires no permissions.
- *
- * @hide
- */
-@Retention(CLASS)
-@Target({ANNOTATION_TYPE,METHOD,CONSTRUCTOR,FIELD,PARAMETER})
-public @interface RequiresNoPermission {
-}
diff --git a/errorprone/java/android/annotation/RequiresPermission.java b/errorprone/java/android/annotation/RequiresPermission.java
deleted file mode 100644
index 303ab41..0000000
--- a/errorprone/java/android/annotation/RequiresPermission.java
+++ /dev/null
@@ -1,136 +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 android.annotation;
-
-import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
-import static java.lang.annotation.ElementType.CONSTRUCTOR;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.RetentionPolicy.CLASS;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-/**
- * Denotes that the annotated element requires (or may require) one or more permissions.
- * <p/>
- * Example of requiring a single permission:
- * <pre>{@code
- *   {@literal @}RequiresPermission(Manifest.permission.SET_WALLPAPER)
- *   public abstract void setWallpaper(Bitmap bitmap) throws IOException;
- *
- *   {@literal @}RequiresPermission(ACCESS_COARSE_LOCATION)
- *   public abstract Location getLastKnownLocation(String provider);
- * }</pre>
- * Example of requiring at least one permission from a set:
- * <pre>{@code
- *   {@literal @}RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
- *   public abstract Location getLastKnownLocation(String provider);
- * }</pre>
- * Example of requiring multiple permissions:
- * <pre>{@code
- *   {@literal @}RequiresPermission(allOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
- *   public abstract Location getLastKnownLocation(String provider);
- * }</pre>
- * Example of requiring separate read and write permissions for a content provider:
- * <pre>{@code
- *   {@literal @}RequiresPermission.Read(@RequiresPermission(READ_HISTORY_BOOKMARKS))
- *   {@literal @}RequiresPermission.Write(@RequiresPermission(WRITE_HISTORY_BOOKMARKS))
- *   public static final Uri BOOKMARKS_URI = Uri.parse("content://browser/bookmarks");
- * }</pre>
- * <p>
- * When specified on a parameter, the annotation indicates that the method requires
- * a permission which depends on the value of the parameter. For example, consider
- * {@link android.app.Activity#startActivity(android.content.Intent)
- * Activity#startActivity(Intent)}:
- * <pre>{@code
- *   public void startActivity(@RequiresPermission Intent intent) { ... }
- * }</pre>
- * Notice how there are no actual permission names listed in the annotation. The actual
- * permissions required will depend on the particular intent passed in. For example,
- * the code may look like this:
- * <pre>{@code
- *   Intent intent = new Intent(Intent.ACTION_CALL);
- *   startActivity(intent);
- * }</pre>
- * and the actual permission requirement for this particular intent is described on
- * the Intent name itself:
- * <pre>{@code
- *   {@literal @}RequiresPermission(Manifest.permission.CALL_PHONE)
- *   public static final String ACTION_CALL = "android.intent.action.CALL";
- * }</pre>
- *
- * @hide
- */
-@Retention(CLASS)
-@Target({ANNOTATION_TYPE,METHOD,CONSTRUCTOR,FIELD,PARAMETER})
-public @interface RequiresPermission {
-    /**
-     * The name of the permission that is required, if precisely one permission
-     * is required. If more than one permission is required, specify either
-     * {@link #allOf()} or {@link #anyOf()} instead.
-     * <p>
-     * If specified, {@link #anyOf()} and {@link #allOf()} must both be null.
-     */
-    String value() default "";
-
-    /**
-     * Specifies a list of permission names that are all required.
-     * <p>
-     * If specified, {@link #anyOf()} and {@link #value()} must both be null.
-     */
-    String[] allOf() default {};
-
-    /**
-     * Specifies a list of permission names where at least one is required
-     * <p>
-     * If specified, {@link #allOf()} and {@link #value()} must both be null.
-     */
-    String[] anyOf() default {};
-
-    /**
-     * If true, the permission may not be required in all cases (e.g. it may only be
-     * enforced on certain platforms, or for certain call parameters, etc.
-     */
-    boolean conditional() default false;
-
-    /**
-     * Specifies that the given permission is required for read operations.
-     * <p>
-     * When specified on a parameter, the annotation indicates that the method requires
-     * a permission which depends on the value of the parameter (and typically
-     * the corresponding field passed in will be one of a set of constants which have
-     * been annotated with a <code>@RequiresPermission</code> annotation.)
-     */
-    @Target({FIELD, METHOD, PARAMETER})
-    @interface Read {
-        RequiresPermission value() default @RequiresPermission;
-    }
-
-    /**
-     * Specifies that the given permission is required for write operations.
-     * <p>
-     * When specified on a parameter, the annotation indicates that the method requires
-     * a permission which depends on the value of the parameter (and typically
-     * the corresponding field passed in will be one of a set of constants which have
-     * been annotated with a <code>@RequiresPermission</code> annotation.)
-     */
-    @Target({FIELD, METHOD, PARAMETER})
-    @interface Write {
-        RequiresPermission value() default @RequiresPermission;
-    }
-}
diff --git a/errorprone/java/android/annotation/SdkConstant.java b/errorprone/java/android/annotation/SdkConstant.java
deleted file mode 100644
index 0a53186..0000000
--- a/errorprone/java/android/annotation/SdkConstant.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES 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.annotation;
-
-import java.lang.annotation.Target;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Indicates a constant field value should be exported to be used in the SDK tools.
- * @hide
- */
-@Target({ ElementType.FIELD })
-@Retention(RetentionPolicy.SOURCE)
-public @interface SdkConstant {
-    public static enum SdkConstantType {
-        ACTIVITY_INTENT_ACTION, BROADCAST_INTENT_ACTION, SERVICE_ACTION, INTENT_CATEGORY, FEATURE;
-    }
-
-    SdkConstantType value();
-}
diff --git a/errorprone/java/android/annotation/SuppressLint.java b/errorprone/java/android/annotation/SuppressLint.java
deleted file mode 100644
index 2d3456b..0000000
--- a/errorprone/java/android/annotation/SuppressLint.java
+++ /dev/null
@@ -1,38 +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 android.annotation;
-
-import static java.lang.annotation.ElementType.CONSTRUCTOR;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.LOCAL_VARIABLE;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.TYPE;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/** Indicates that Lint should ignore the specified warnings for the annotated element. */
-@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
-@Retention(RetentionPolicy.CLASS)
-public @interface SuppressLint {
-    /**
-     * The set of warnings (identified by the lint issue id) that should be
-     * ignored by lint. It is not an error to specify an unrecognized name.
-     */
-    String[] value();
-}
diff --git a/errorprone/java/com/google/errorprone/bugpatterns/android/RequiresPermissionChecker.java b/errorprone/java/com/google/errorprone/bugpatterns/android/RequiresPermissionChecker.java
index d39d4b4..7c7cb18 100644
--- a/errorprone/java/com/google/errorprone/bugpatterns/android/RequiresPermissionChecker.java
+++ b/errorprone/java/com/google/errorprone/bugpatterns/android/RequiresPermissionChecker.java
@@ -27,6 +27,7 @@
 import static com.google.errorprone.matchers.Matchers.methodIsNamed;
 import static com.google.errorprone.matchers.Matchers.staticMethod;
 
+import android.annotation.EnforcePermission;
 import android.annotation.RequiresPermission;
 import android.annotation.SuppressLint;
 
@@ -290,6 +291,13 @@
             if (perm.anyOf() != null) this.anyOf.addAll(Arrays.asList(perm.anyOf()));
         }
 
+        public void addAll(EnforcePermission perm) {
+            if (perm == null) return;
+            if (!perm.value().isEmpty()) this.allOf.add(perm.value());
+            if (perm.allOf() != null) this.allOf.addAll(Arrays.asList(perm.allOf()));
+            if (perm.anyOf() != null) this.anyOf.addAll(Arrays.asList(perm.anyOf()));
+        }
+
         public void addConstValue(Tree tree) {
             final Object value = ASTHelpers.constValue(tree);
             if (value != null) {
@@ -416,14 +424,20 @@
             final ParsedRequiresPermission res = new ParsedRequiresPermission();
             res.allOf.add(String.valueOf(ASTHelpers.constValue(tree.getArguments().get(0))));
             return res;
-        } else if (ENFORCE_VIA_CHECKER.matches(tree, state) && tree.getArguments().size() > 1) {
+        }
+        if (ENFORCE_VIA_CHECKER.matches(tree, state) && tree.getArguments().size() > 1) {
             final ParsedRequiresPermission res = new ParsedRequiresPermission();
             res.allOf.add(String.valueOf(ASTHelpers.constValue(tree.getArguments().get(1))));
             return res;
-        } else {
-            final MethodSymbol method = ASTHelpers.getSymbol(tree);
-            return parseRequiresPermissionRecursively(method, state);
         }
+        final MethodSymbol method = ASTHelpers.getSymbol(tree);
+        final EnforcePermission enforced = method.getAnnotation(EnforcePermission.class);
+        if (enforced != null) {
+            final ParsedRequiresPermission res = new ParsedRequiresPermission();
+            res.addAll(enforced);
+            return res;
+        }
+        return parseRequiresPermissionRecursively(method, state);
     }
 
     /**
diff --git a/errorprone/tests/java/com/google/errorprone/bugpatterns/android/RequiresPermissionCheckerTest.java b/errorprone/tests/java/com/google/errorprone/bugpatterns/android/RequiresPermissionCheckerTest.java
index 38831b1..e53372d 100644
--- a/errorprone/tests/java/com/google/errorprone/bugpatterns/android/RequiresPermissionCheckerTest.java
+++ b/errorprone/tests/java/com/google/errorprone/bugpatterns/android/RequiresPermissionCheckerTest.java
@@ -438,4 +438,43 @@
                         "}")
                 .doTest();
     }
+
+    @Test
+    public void testEnforce() {
+        compilationHelper
+                .addSourceFile("/android/annotation/EnforcePermission.java")
+                .addSourceFile("/android/content/Context.java")
+                .addSourceFile("/android/foo/IBarService.java")
+                .addSourceFile("/android/os/IInterface.java")
+                .addSourceLines("BarService.java",
+                        "import android.annotation.EnforcePermission;",
+                        "import android.foo.IBarService;",
+                        "class BarService extends IBarService.Stub {",
+                        "  @Override",
+                        "  @EnforcePermission(\"INTERNET\")",
+                        "  public void bar() {",
+                        "    bar_enforcePermission();",
+                        "  }",
+                        "}")
+                .addSourceLines("BarManager.java",
+                        "import android.annotation.RequiresPermission;",
+                        "class BarManager {",
+                        "  BarService mService;",
+                        "  @RequiresPermission(\"INTERNET\")",
+                        "  public void callBar() {",
+                        "    mService.bar();",
+                        "  }",
+                        "  @RequiresPermission(\"NONE\")",
+                        "  public void callBarDifferent() {",
+                        "    // BUG: Diagnostic contains:",
+                        "    mService.bar();",
+                        "  }",
+                        "  public void callBarMissing() {",
+                        "    // BUG: Diagnostic contains:",
+                        "    mService.bar();",
+                        "  }",
+                        "}")
+                .doTest();
+    }
+
 }
diff --git a/errorprone/tests/res/android/annotation/EnforcePermission.java b/errorprone/tests/res/android/annotation/EnforcePermission.java
new file mode 100644
index 0000000..26644a2
--- /dev/null
+++ b/errorprone/tests/res/android/annotation/EnforcePermission.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.annotation;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.CLASS;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Retention(CLASS)
+@Target({METHOD})
+public @interface EnforcePermission {
+    String value() default "";
+    String[] allOf() default {};
+    String[] anyOf() default {};
+}
diff --git a/errorprone/tests/res/android/foo/IBarService.java b/errorprone/tests/res/android/foo/IBarService.java
new file mode 100644
index 0000000..058d026
--- /dev/null
+++ b/errorprone/tests/res/android/foo/IBarService.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.foo;
+
+import android.annotation.EnforcePermission;
+
+public interface IBarService extends android.os.IInterface {
+    @EnforcePermission("INTERNET")
+    void bar();
+
+    abstract class Stub implements IBarService {
+        public void bar_enforcePermission() { }
+    }
+}
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index b9d3756..a4c655c8c 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -782,10 +782,13 @@
     @Nullable
     public static Bitmap wrapHardwareBuffer(@NonNull HardwareBuffer hardwareBuffer,
             @Nullable ColorSpace colorSpace) {
-        if ((hardwareBuffer.getUsage() & HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE) == 0) {
+        final long usage = hardwareBuffer.getUsage();
+        if ((usage & HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE) == 0) {
             throw new IllegalArgumentException("usage flags must contain USAGE_GPU_SAMPLED_IMAGE.");
         }
-        int format = hardwareBuffer.getFormat();
+        if ((usage & HardwareBuffer.USAGE_PROTECTED_CONTENT) != 0) {
+            throw new IllegalArgumentException("Bitmap is not compatible with protected buffers");
+        }
         if (colorSpace == null) {
             colorSpace = ColorSpace.get(ColorSpace.Named.SRGB);
         }
diff --git a/graphics/java/android/graphics/ColorFilter.java b/graphics/java/android/graphics/ColorFilter.java
index 8fd6f7f..7050325 100644
--- a/graphics/java/android/graphics/ColorFilter.java
+++ b/graphics/java/android/graphics/ColorFilter.java
@@ -41,21 +41,11 @@
      * Current native SkColorFilter instance.
      */
     private long mNativeInstance;
-    // Runnable to do immediate destruction
-    private Runnable mCleaner;
 
     long createNativeInstance() {
         return 0;
     }
 
-    synchronized final void discardNativeInstance() {
-        if (mNativeInstance != 0) {
-            mCleaner.run();
-            mCleaner = null;
-            mNativeInstance = 0;
-        }
-    }
-
     /** @hide */
     public synchronized final long getNativeInstance() {
         if (mNativeInstance == 0) {
@@ -65,8 +55,7 @@
                 // Note: we must check for null here, since it's possible for createNativeInstance()
                 // to return nullptr if the native SkColorFilter would be a no-op at draw time.
                 // See native implementations of subclass create methods for more info.
-                mCleaner = NoImagePreloadHolder.sRegistry.registerNativeAllocation(
-                        this, mNativeInstance);
+                NoImagePreloadHolder.sRegistry.registerNativeAllocation(this, mNativeInstance);
             }
         }
         return mNativeInstance;
diff --git a/graphics/java/android/graphics/ColorMatrixColorFilter.java b/graphics/java/android/graphics/ColorMatrixColorFilter.java
index 90ff189..bfdf318 100644
--- a/graphics/java/android/graphics/ColorMatrixColorFilter.java
+++ b/graphics/java/android/graphics/ColorMatrixColorFilter.java
@@ -81,12 +81,12 @@
      */
     @UnsupportedAppUsage
     public void setColorMatrix(@Nullable ColorMatrix matrix) {
-        discardNativeInstance();
         if (matrix == null) {
             mMatrix.reset();
         } else {
             mMatrix.set(matrix);
         }
+        nativeSetColorMatrix(getNativeInstance(), mMatrix.getArray());
     }
 
     /**
@@ -111,7 +111,6 @@
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
     public void setColorMatrixArray(@Nullable float[] array) {
         // called '...Array' so that passing null isn't ambiguous
-        discardNativeInstance();
         if (array == null) {
             mMatrix.reset();
         } else {
@@ -120,6 +119,7 @@
             }
             mMatrix.set(array);
         }
+        nativeSetColorMatrix(getNativeInstance(), mMatrix.getArray());
     }
 
     @Override
@@ -128,4 +128,6 @@
     }
 
     private static native long nativeColorMatrixFilter(float[] array);
+
+    private static native void nativeSetColorMatrix(long colorMatrixColorFilter, float[] array);
 }
diff --git a/graphics/java/android/graphics/ColorSpace.java b/graphics/java/android/graphics/ColorSpace.java
index 99bebb8..a2319a5 100644
--- a/graphics/java/android/graphics/ColorSpace.java
+++ b/graphics/java/android/graphics/ColorSpace.java
@@ -199,6 +199,8 @@
 
     private static final float[] SRGB_PRIMARIES = { 0.640f, 0.330f, 0.300f, 0.600f, 0.150f, 0.060f };
     private static final float[] NTSC_1953_PRIMARIES = { 0.67f, 0.33f, 0.21f, 0.71f, 0.14f, 0.08f };
+    private static final float[] DCI_P3_PRIMARIES =
+            { 0.680f, 0.320f, 0.265f, 0.690f, 0.150f, 0.060f };
     private static final float[] BT2020_PRIMARIES =
             { 0.708f, 0.292f, 0.170f, 0.797f, 0.131f, 0.046f };
     /**
@@ -211,6 +213,9 @@
     private static final Rgb.TransferParameters SRGB_TRANSFER_PARAMETERS =
             new Rgb.TransferParameters(1 / 1.055, 0.055 / 1.055, 1 / 12.92, 0.04045, 2.4);
 
+    private static final Rgb.TransferParameters SMPTE_170M_TRANSFER_PARAMETERS =
+            new Rgb.TransferParameters(1 / 1.099, 0.099 / 1.099, 1 / 4.5, 0.081, 1 / 0.45);
+
     // HLG transfer with an SDR whitepoint of 203 nits
     private static final Rgb.TransferParameters BT2020_HLG_TRANSFER_PARAMETERS =
             new Rgb.TransferParameters(2.0, 2.0, 1 / 0.17883277, 0.28466892, 0.55991073,
@@ -1559,10 +1564,10 @@
                 DataSpace.DATASPACE_SCRGB_LINEAR, Named.LINEAR_EXTENDED_SRGB.ordinal());
         sNamedColorSpaces[Named.BT709.ordinal()] = new ColorSpace.Rgb(
                 "Rec. ITU-R BT.709-5",
-                new float[] { 0.640f, 0.330f, 0.300f, 0.600f, 0.150f, 0.060f },
+                SRGB_PRIMARIES,
                 ILLUMINANT_D65,
                 null,
-                new Rgb.TransferParameters(1 / 1.099, 0.099 / 1.099, 1 / 4.5, 0.081, 1 / 0.45),
+                SMPTE_170M_TRANSFER_PARAMETERS,
                 Named.BT709.ordinal()
         );
         sDataToColorSpaces.put(DataSpace.DATASPACE_BT709, Named.BT709.ordinal());
@@ -1577,7 +1582,7 @@
         sDataToColorSpaces.put(DataSpace.DATASPACE_BT2020, Named.BT2020.ordinal());
         sNamedColorSpaces[Named.DCI_P3.ordinal()] = new ColorSpace.Rgb(
                 "SMPTE RP 431-2-2007 DCI (P3)",
-                new float[] { 0.680f, 0.320f, 0.265f, 0.690f, 0.150f, 0.060f },
+                DCI_P3_PRIMARIES,
                 new float[] { 0.314f, 0.351f },
                 2.6,
                 0.0f, 1.0f,
@@ -1586,7 +1591,7 @@
         sDataToColorSpaces.put(DataSpace.DATASPACE_DCI_P3, Named.DCI_P3.ordinal());
         sNamedColorSpaces[Named.DISPLAY_P3.ordinal()] = new ColorSpace.Rgb(
                 "Display P3",
-                new float[] { 0.680f, 0.320f, 0.265f, 0.690f, 0.150f, 0.060f },
+                DCI_P3_PRIMARIES,
                 ILLUMINANT_D65,
                 null,
                 SRGB_TRANSFER_PARAMETERS,
@@ -1598,7 +1603,7 @@
                 NTSC_1953_PRIMARIES,
                 ILLUMINANT_C,
                 null,
-                new Rgb.TransferParameters(1 / 1.099, 0.099 / 1.099, 1 / 4.5, 0.081, 1 / 0.45),
+                SMPTE_170M_TRANSFER_PARAMETERS,
                 Named.NTSC_1953.ordinal()
         );
         sNamedColorSpaces[Named.SMPTE_C.ordinal()] = new ColorSpace.Rgb(
@@ -1606,7 +1611,7 @@
                 new float[] { 0.630f, 0.340f, 0.310f, 0.595f, 0.155f, 0.070f },
                 ILLUMINANT_D65,
                 null,
-                new Rgb.TransferParameters(1 / 1.099, 0.099 / 1.099, 1 / 4.5, 0.081, 1 / 0.45),
+                SMPTE_170M_TRANSFER_PARAMETERS,
                 Named.SMPTE_C.ordinal()
         );
         sNamedColorSpaces[Named.ADOBE_RGB.ordinal()] = new ColorSpace.Rgb(
@@ -3057,7 +3062,7 @@
          * primaries for such a ColorSpace does not make sense, so we use a special
          * set of primaries that are all 1s.</p>
          *
-         * @return A new non-null array of 2 floats
+         * @return A new non-null array of 6 floats
          *
          * @see #getPrimaries(float[])
          */
diff --git a/graphics/java/android/graphics/LightingColorFilter.java b/graphics/java/android/graphics/LightingColorFilter.java
index df91c5d..0aa6f12 100644
--- a/graphics/java/android/graphics/LightingColorFilter.java
+++ b/graphics/java/android/graphics/LightingColorFilter.java
@@ -78,7 +78,7 @@
     public void setColorMultiply(@ColorInt int mul) {
         if (mMul != mul) {
             mMul = mul;
-            discardNativeInstance();
+            native_SetLightingFilterMul(getNativeInstance(), mul);
         }
     }
 
@@ -104,7 +104,7 @@
     public void setColorAdd(@ColorInt int add) {
         if (mAdd != add) {
             mAdd = add;
-            discardNativeInstance();
+            native_SetLightingFilterAdd(getNativeInstance(), add);
         }
     }
 
@@ -114,4 +114,8 @@
     }
 
     private static native long native_CreateLightingFilter(int mul, int add);
+
+    private static native void native_SetLightingFilterAdd(long lightingFilter, int add);
+
+    private static native void native_SetLightingFilterMul(long lightingFilter, int mul);
 }
diff --git a/graphics/java/android/graphics/RecordingCanvas.java b/graphics/java/android/graphics/RecordingCanvas.java
index a5184f2..635e78e 100644
--- a/graphics/java/android/graphics/RecordingCanvas.java
+++ b/graphics/java/android/graphics/RecordingCanvas.java
@@ -276,9 +276,7 @@
     @CriticalNative
     private static native void nResetDisplayListCanvas(long canvas, long node,
             int width, int height);
-    @CriticalNative
     private static native int nGetMaximumTextureWidth();
-    @CriticalNative
     private static native int nGetMaximumTextureHeight();
     @CriticalNative
     private static native void nEnableZ(long renderer, boolean enableZ);
diff --git a/graphics/java/android/graphics/RenderNode.java b/graphics/java/android/graphics/RenderNode.java
index 2e91c24..15d26eb 100644
--- a/graphics/java/android/graphics/RenderNode.java
+++ b/graphics/java/android/graphics/RenderNode.java
@@ -971,6 +971,23 @@
     }
 
     /**
+     * Configure the {@link android.graphics.RenderEffect} to apply to the backdrop contents of
+     * this RenderNode. This will apply a visual effect to the result of the backdrop contents
+     * of this RenderNode before the RenderNode is drawn into the destination. For example if
+     * {@link RenderEffect#createBlurEffect(float, float, RenderEffect, Shader.TileMode)}
+     * is provided, the previous content behind this RenderNode will be blurred before the
+     * RenderNode is drawn in to the destination.
+     * @param renderEffect to be applied to the backdrop contents of this RenderNode. Passing
+     *          null clears all previously configured RenderEffects
+     * @return True if the value changed, false if the new value was the same as the previous value.
+     * @hide
+     */
+    public boolean setBackdropRenderEffect(@Nullable RenderEffect renderEffect) {
+        return nSetBackdropRenderEffect(mNativeRenderNode,
+                renderEffect != null ? renderEffect.getNativeInstance() : 0);
+    }
+
+    /**
      * Returns the translucency level of this display list.
      *
      * @return A value between 0.0f and 1.0f
@@ -1797,6 +1814,9 @@
     private static native boolean nSetRenderEffect(long renderNode, long renderEffect);
 
     @CriticalNative
+    private static native boolean nSetBackdropRenderEffect(long renderNode, long renderEffect);
+
+    @CriticalNative
     private static native boolean nSetHasOverlappingRendering(long renderNode,
             boolean hasOverlappingRendering);
 
diff --git a/graphics/java/android/graphics/fonts/FontFamily.java b/graphics/java/android/graphics/fonts/FontFamily.java
index bf79b1b..7cca7f1 100644
--- a/graphics/java/android/graphics/fonts/FontFamily.java
+++ b/graphics/java/android/graphics/fonts/FontFamily.java
@@ -30,6 +30,7 @@
 import libcore.util.NativeAllocationRegistry;
 
 import java.util.ArrayList;
+import java.util.Set;
 
 /**
  * A font family class can be used for creating Typeface.
@@ -58,6 +59,7 @@
  *
  */
 public final class FontFamily {
+
     private static final String TAG = "FontFamily";
 
     /**
@@ -73,6 +75,7 @@
         // initial capacity.
         private final SparseIntArray mStyles = new SparseIntArray(4);
 
+
         /**
          * Constructs a builder.
          *
@@ -110,23 +113,63 @@
         }
 
         /**
+         * Build a variable font family that automatically adjust the `wght` and `ital` axes value
+         * for the requested weight/italic style values.
+         *
+         * To build a variable font family, added fonts must meet one of following conditions.
+         *
+         * If two font files are added, both font files must support `wght` axis and one font must
+         * support {@link FontStyle#FONT_SLANT_UPRIGHT} and another font must support
+         * {@link FontStyle#FONT_SLANT_ITALIC}. If the requested weight value is lower than minimum
+         * value of the supported `wght` axis, the minimum supported `wght` value is used. If the
+         * requested weight value is larger than maximum value of the supported `wght` axis, the
+         * maximum supported `wght` value is used. The weight values of the fonts are ignored.
+         *
+         * If one font file is added, that font must support the `wght` axis. If that font support
+         * `ital` axis, that `ital` value is set to 1 when the italic style is requested. If that
+         * font doesn't support `ital` axis, synthetic italic may be used. If the requested
+         * weight value is lower than minimum value of the supported `wght` axis, the minimum
+         * supported `wght` value is used. If the requested weight value is larger than maximum
+         * value of the supported `wght`axis, the maximum supported `wght` value is used. The weight
+         * value of the font is ignored.
+         *
+         * If none of the above conditions are met, this function return {@code null}.
+         *
+         * @return A variable font family. null if a variable font cannot be built from the given
+         *         fonts.
+         */
+        public @Nullable FontFamily buildVariableFamily() {
+            int variableFamilyType = analyzeAndResolveVariableType(mFonts);
+            if (variableFamilyType == VARIABLE_FONT_FAMILY_TYPE_UNKNOWN) {
+                return null;
+            }
+            return build("", FontConfig.FontFamily.VARIANT_DEFAULT,
+                    true /* isCustomFallback */,
+                    false /* isDefaultFallback */,
+                    variableFamilyType);
+        }
+
+        /**
          * Build the font family
          * @return a font family
          */
         public @NonNull FontFamily build() {
-            return build("", FontConfig.FontFamily.VARIANT_DEFAULT, true /* isCustomFallback */,
-                    false /* isDefaultFallback */);
+            return build("", FontConfig.FontFamily.VARIANT_DEFAULT,
+                    true /* isCustomFallback */,
+                    false /* isDefaultFallback */,
+                    VARIABLE_FONT_FAMILY_TYPE_NONE);
         }
 
         /** @hide */
         public @NonNull FontFamily build(@NonNull String langTags, int variant,
-                boolean isCustomFallback, boolean isDefaultFallback) {
+                boolean isCustomFallback, boolean isDefaultFallback, int variableFamilyType) {
+
             final long builderPtr = nInitBuilder();
             for (int i = 0; i < mFonts.size(); ++i) {
                 nAddFont(builderPtr, mFonts.get(i).getNativePtr());
             }
             final long ptr = nBuild(builderPtr, langTags, variant, isCustomFallback,
-                    isDefaultFallback);
+                    isDefaultFallback, variableFamilyType);
             final FontFamily family = new FontFamily(ptr);
             sFamilyRegistory.registerNativeAllocation(family, ptr);
             return family;
@@ -136,11 +179,94 @@
             return font.getStyle().getWeight() | (font.getStyle().getSlant()  << 16);
         }
 
+        /**
+         * @see #buildVariableFamily()
+         * @hide
+         */
+        public static final int VARIABLE_FONT_FAMILY_TYPE_UNKNOWN = -1;
+
+        /**
+         * @see #buildVariableFamily()
+         * @hide
+         */
+        public static final int VARIABLE_FONT_FAMILY_TYPE_NONE = 0;
+        /**
+         * @see #buildVariableFamily()
+         * @hide
+         */
+        public static final int VARIABLE_FONT_FAMILY_TYPE_SINGLE_FONT_WGHT_ONLY = 1;
+        /**
+         * @see #buildVariableFamily()
+         * @hide
+         */
+        public static final int VARIABLE_FONT_FAMILY_TYPE_SINGLE_FONT_WGHT_ITAL = 2;
+        /**
+         * @see #buildVariableFamily()
+         * @hide
+         */
+        public static final int VARIABLE_FONT_FAMILY_TYPE_TWO_FONTS_WGHT = 3;
+
+        /**
+         * The registered italic axis used for adjusting requested style.
+         * https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_ital
+         */
+        private static final int TAG_ital = 0x6974616C;  // i(0x69), t(0x74), a(0x61), l(0x6c)
+
+        /**
+         * The registered weight axis used for adjusting requested style.
+         * https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_wght
+         */
+        private static final int TAG_wght = 0x77676874;  // w(0x77), g(0x67), h(0x68), t(0x74)
+
+        private static int analyzeAndResolveVariableType(ArrayList<Font> fonts) {
+            if (fonts.size() > 2) {
+                return VARIABLE_FONT_FAMILY_TYPE_UNKNOWN;
+            }
+
+            if (fonts.size() == 1) {
+                Font font = fonts.get(0);
+                Set<Integer> supportedAxes =
+                        FontFileUtil.getSupportedAxes(font.getBuffer(), font.getTtcIndex());
+                if (supportedAxes.contains(TAG_wght)) {
+                    if (supportedAxes.contains(TAG_ital)) {
+                        return VARIABLE_FONT_FAMILY_TYPE_SINGLE_FONT_WGHT_ITAL;
+                    } else {
+                        return VARIABLE_FONT_FAMILY_TYPE_SINGLE_FONT_WGHT_ONLY;
+                    }
+                } else {
+                    return VARIABLE_FONT_FAMILY_TYPE_UNKNOWN;
+                }
+            } else {
+                for (int i = 0; i < fonts.size(); ++i) {
+                    Font font = fonts.get(i);
+                    Set<Integer> supportedAxes =
+                            FontFileUtil.getSupportedAxes(font.getBuffer(), font.getTtcIndex());
+                    if (!supportedAxes.contains(TAG_wght)) {
+                        return VARIABLE_FONT_FAMILY_TYPE_UNKNOWN;
+                    }
+                }
+                boolean italic1 = fonts.get(0).getStyle().getSlant() == FontStyle.FONT_SLANT_ITALIC;
+                boolean italic2 = fonts.get(1).getStyle().getSlant() == FontStyle.FONT_SLANT_ITALIC;
+
+                if (italic1 == italic2) {
+                    return VARIABLE_FONT_FAMILY_TYPE_UNKNOWN;
+                } else {
+                    if (italic1) {
+                        // Swap fonts to make the first font upright, second font italic.
+                        Font firstFont = fonts.get(0);
+                        fonts.set(0, fonts.get(1));
+                        fonts.set(1, firstFont);
+                    }
+                    return VARIABLE_FONT_FAMILY_TYPE_TWO_FONTS_WGHT;
+                }
+            }
+        }
+
         private static native long nInitBuilder();
         @CriticalNative
         private static native void nAddFont(long builderPtr, long fontPtr);
         private static native long nBuild(long builderPtr, String langTags, int variant,
-                boolean isCustomFallback, boolean isDefaultFallback);
+                boolean isCustomFallback, boolean isDefaultFallback, int variableFamilyType);
         @CriticalNative
         private static native long nGetReleaseNativeFamily();
     }
diff --git a/graphics/java/android/graphics/fonts/FontFileUtil.java b/graphics/java/android/graphics/fonts/FontFileUtil.java
index 917eef2..ff38282 100644
--- a/graphics/java/android/graphics/fonts/FontFileUtil.java
+++ b/graphics/java/android/graphics/fonts/FontFileUtil.java
@@ -19,11 +19,14 @@
 import android.annotation.IntRange;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.util.ArraySet;
 
 import dalvik.annotation.optimization.FastNative;
 
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
+import java.util.Collections;
+import java.util.Set;
 
 /**
  * Provides a utility for font file operations.
@@ -62,6 +65,7 @@
     private static final int SFNT_VERSION_OTTO = 0x4F54544F;
     private static final int TTC_TAG = 0x74746366;
     private static final int OS2_TABLE_TAG = 0x4F532F32;
+    private static final int FVAR_TABLE_TAG = 0x66766172;
 
     private static final int ANALYZE_ERROR = 0xFFFFFFFF;
 
@@ -200,6 +204,73 @@
         }
     }
 
+    private static int getUInt16(ByteBuffer buffer, int offset) {
+        return ((int) buffer.getShort(offset)) & 0xFFFF;
+    }
+
+    /**
+     * Returns supported axes of font
+     *
+     * @param buffer A buffer of the entire font file.
+     * @param index A font index in case of font collection. Must be 0 otherwise.
+     * @return set of supported axes tag. Returns empty set on error.
+     */
+    public static Set<Integer> getSupportedAxes(@NonNull ByteBuffer buffer, int index) {
+        ByteOrder originalOrder = buffer.order();
+        buffer.order(ByteOrder.BIG_ENDIAN);
+        try {
+            int fontFileOffset = 0;
+            int magicNumber = buffer.getInt(0);
+            if (magicNumber == TTC_TAG) {
+                // TTC file.
+                if (index >= buffer.getInt(8 /* offset to number of fonts in TTC */)) {
+                    return Collections.EMPTY_SET;
+                }
+                fontFileOffset = buffer.getInt(
+                        12 /* offset to array of offsets of font files */ + 4 * index);
+            }
+            int sfntVersion = buffer.getInt(fontFileOffset);
+
+            if (sfntVersion != SFNT_VERSION_1 && sfntVersion != SFNT_VERSION_OTTO) {
+                return Collections.EMPTY_SET;
+            }
+
+            int numTables = buffer.getShort(fontFileOffset + 4 /* offset to number of tables */);
+            int fvarTableOffset = -1;
+            for (int i = 0; i < numTables; ++i) {
+                int tableOffset = fontFileOffset + 12 /* size of offset table */
+                        + i * 16 /* size of table record */;
+                if (buffer.getInt(tableOffset) == FVAR_TABLE_TAG) {
+                    fvarTableOffset = buffer.getInt(tableOffset + 8 /* offset to the table */);
+                    break;
+                }
+            }
+
+            if (fvarTableOffset == -1) {
+                // Couldn't find OS/2 table. use regular style
+                return Collections.EMPTY_SET;
+            }
+
+            if (buffer.getShort(fvarTableOffset) != 1
+                    || buffer.getShort(fvarTableOffset + 2) != 0) {
+                return Collections.EMPTY_SET;
+            }
+
+            int axesArrayOffset = getUInt16(buffer, fvarTableOffset + 4);
+            int axisCount = getUInt16(buffer, fvarTableOffset + 8);
+            int axisSize = getUInt16(buffer, fvarTableOffset + 10);
+
+            ArraySet<Integer> axes = new ArraySet<>();
+            for (int i = 0; i < axisCount; ++i) {
+                axes.add(buffer.getInt(fvarTableOffset + axesArrayOffset + axisSize * i));
+            }
+
+            return axes;
+        } finally {
+            buffer.order(originalOrder);
+        }
+    }
+
     @FastNative
     private static native long nGetFontRevision(@NonNull ByteBuffer buffer,
             @IntRange(from = 0) int index);
diff --git a/graphics/java/android/graphics/fonts/SystemFonts.java b/graphics/java/android/graphics/fonts/SystemFonts.java
index 8fe28ae..98629a2 100644
--- a/graphics/java/android/graphics/fonts/SystemFonts.java
+++ b/graphics/java/android/graphics/fonts/SystemFonts.java
@@ -47,7 +47,7 @@
 public final class SystemFonts {
     private static final String TAG = "SystemFonts";
 
-    private static final String FONTS_XML = "/system/etc/fonts.xml";
+    private static final String FONTS_XML = "/system/etc/font_fallback.xml";
     /** @hide */
     public static final String SYSTEM_FONT_DIR = "/system/fonts/";
     private static final String OEM_XML = "/product/etc/fonts_customization.xml";
@@ -194,7 +194,7 @@
             }
         }
         return b == null ? null : b.build(languageTags, variant, false /* isCustomFallback */,
-                isDefaultFallback);
+                isDefaultFallback, FontFamily.Builder.VARIABLE_FONT_FAMILY_TYPE_NONE);
     }
 
     private static void appendNamedFamilyList(@NonNull FontConfig.NamedFamilyList namedFamilyList,
diff --git a/graphics/java/android/graphics/text/LineBreakConfig.java b/graphics/java/android/graphics/text/LineBreakConfig.java
index 0c493f5..7b204f2 100644
--- a/graphics/java/android/graphics/text/LineBreakConfig.java
+++ b/graphics/java/android/graphics/text/LineBreakConfig.java
@@ -18,6 +18,7 @@
 
 import android.annotation.IntDef;
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -33,6 +34,32 @@
 public final class LineBreakConfig {
 
     /**
+     * No line break style is specified.
+     *
+     * This is a special value of line break style indicating no style value is specified.
+     * When overriding a {@link LineBreakConfig} with another {@link LineBreakConfig} with
+     * {@link Builder#merge(LineBreakConfig)} function, the line break style of overridden config
+     * will be kept if the line break style of overriding config is
+     * {@link #LINE_BREAK_STYLE_UNSPECIFIED}.
+     *
+     * <pre>
+     *     val override = LineBreakConfig.Builder()
+     *          .setLineBreakWordStyle(LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE)
+     *          .build();  // UNSPECIFIED if no setLineBreakStyle is called.
+     *     val config = LineBreakConfig.Builder()
+     *          .setLineBreakStyle(LineBreakConfig.LINE_BREAK_STYLE_STRICT)
+     *          .merge(override)
+     *          .build()
+     *     // Here, config has LINE_BREAK_STYLE_STRICT for line break config and
+     *     // LINE_BREAK_WORD_STYLE_PHRASE for line break word style.
+     * </pre>
+     *
+     * This value is resolved to {@link #LINE_BREAK_STYLE_NONE} if this value is used for text
+     * layout/rendering.
+     */
+    public static final int LINE_BREAK_STYLE_UNSPECIFIED = -1;
+
+    /**
      * No line-break rules are used for line breaking.
      */
     public static final int LINE_BREAK_STYLE_NONE = 0;
@@ -56,12 +83,38 @@
     /** @hide */
     @IntDef(prefix = { "LINE_BREAK_STYLE_" }, value = {
             LINE_BREAK_STYLE_NONE, LINE_BREAK_STYLE_LOOSE, LINE_BREAK_STYLE_NORMAL,
-            LINE_BREAK_STYLE_STRICT
+            LINE_BREAK_STYLE_STRICT, LINE_BREAK_STYLE_UNSPECIFIED
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface LineBreakStyle {}
 
     /**
+     * No line break word style is specified.
+     *
+     * This is a special value of line break word style indicating no style value is specified.
+     * When overriding a {@link LineBreakConfig} with another {@link LineBreakConfig} with
+     * {@link Builder#merge(LineBreakConfig)} function, the line break word style of overridden
+     * config will be kept if the line break word style of overriding config is
+     * {@link #LINE_BREAK_WORD_STYLE_UNSPECIFIED}.
+     *
+     * <pre>
+     *     val override = LineBreakConfig.Builder()
+     *          .setLineBreakStyle(LineBreakConfig.LINE_BREAK_STYLE_STRICT)
+     *          .build();  // UNSPECIFIED if no setLineBreakWordStyle is called.
+     *     val config = LineBreakConfig.Builder()
+     *          .setLineBreakWordStyle(LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE)
+     *          .merge(override)
+     *          .build()
+     *     // Here, config has LINE_BREAK_STYLE_STRICT for line break config and
+     *     // LINE_BREAK_WORD_STYLE_PHRASE for line break word style.
+     * </pre>
+     *
+     * This value is resolved to {@link #LINE_BREAK_WORD_STYLE_NONE} if this value is used for
+     * text layout/rendering.
+     */
+    public static final int LINE_BREAK_WORD_STYLE_UNSPECIFIED = -1;
+
+    /**
      * No line-break word style is used for line breaking.
      */
     public static final int LINE_BREAK_WORD_STYLE_NONE = 0;
@@ -78,7 +131,7 @@
 
     /** @hide */
     @IntDef(prefix = { "LINE_BREAK_WORD_STYLE_" }, value = {
-        LINE_BREAK_WORD_STYLE_NONE, LINE_BREAK_WORD_STYLE_PHRASE
+        LINE_BREAK_WORD_STYLE_NONE, LINE_BREAK_WORD_STYLE_PHRASE, LINE_BREAK_WORD_STYLE_UNSPECIFIED
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface LineBreakWordStyle {}
@@ -88,21 +141,80 @@
      */
     public static final class Builder {
         // The line break style for the LineBreakConfig.
-        private @LineBreakStyle int mLineBreakStyle = LineBreakConfig.LINE_BREAK_STYLE_NONE;
+        private @LineBreakStyle int mLineBreakStyle = LineBreakConfig.LINE_BREAK_STYLE_UNSPECIFIED;
 
         // The line break word style for the LineBreakConfig.
         private @LineBreakWordStyle int mLineBreakWordStyle =
-                LineBreakConfig.LINE_BREAK_WORD_STYLE_NONE;
+                LineBreakConfig.LINE_BREAK_WORD_STYLE_UNSPECIFIED;
 
         /**
          * Builder constructor.
          */
         public Builder() {
+            reset(null);
+        }
+
+        /**
+         * Merges line break config with other config
+         *
+         * Update the internal configurations with passed {@code config}. If the config values of
+         * passed {@code config} are unspecified, the original config values are kept. For example,
+         * the following code passes {@code config} that has {@link #LINE_BREAK_STYLE_UNSPECIFIED}.
+         * This code generates {@link LineBreakConfig} that has line break config
+         * {@link #LINE_BREAK_STYLE_STRICT}.
+         *
+         * <pre>
+         *     val override = LineBreakConfig.Builder()
+         *          .setLineBreakWordStyle(LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE)
+         *          .build();  // UNSPECIFIED if no setLineBreakStyle is called.
+         *     val config = LineBreakConfig.Builder()
+         *          .setLineBreakStyle(LineBreakConfig.LINE_BREAK_STYLE_STRICT)
+         *          .merge(override)
+         *          .build()
+         *     // Here, config has LINE_BREAK_STYLE_STRICT of line break config and
+         *     // LINE_BREAK_WORD_STYLE_PHRASE of line break word style.
+         * </pre>
+         *
+         * @see #LINE_BREAK_STYLE_UNSPECIFIED
+         * @see #LINE_BREAK_WORD_STYLE_UNSPECIFIED
+         *
+         * @param config an override line break config
+         * @return This {@code Builder}.
+         */
+        public @NonNull Builder merge(@NonNull LineBreakConfig config) {
+            if (config.mLineBreakStyle != LINE_BREAK_STYLE_UNSPECIFIED) {
+                mLineBreakStyle = config.mLineBreakStyle;
+            }
+            if (config.mLineBreakWordStyle != LINE_BREAK_WORD_STYLE_UNSPECIFIED) {
+                mLineBreakWordStyle = config.mLineBreakWordStyle;
+            }
+            return this;
+        }
+
+        /**
+         * Resets this builder to the given config state.
+         *
+         * @return This {@code Builder}.
+         * @hide
+         */
+        public @NonNull Builder reset(@Nullable LineBreakConfig config) {
+            if (config == null) {
+                mLineBreakStyle = LINE_BREAK_STYLE_UNSPECIFIED;
+                mLineBreakWordStyle = LINE_BREAK_WORD_STYLE_UNSPECIFIED;
+            } else {
+                mLineBreakStyle = config.mLineBreakStyle;
+                mLineBreakWordStyle = config.mLineBreakWordStyle;
+            }
+            return this;
         }
 
         /**
          * Sets the line-break style.
          *
+         * Note: different from {@link #merge(LineBreakConfig)} if this function is called with
+         * {@link #LINE_BREAK_STYLE_UNSPECIFIED}, the line break style is reset to
+         * {@link #LINE_BREAK_STYLE_UNSPECIFIED}.
+         *
          * @param lineBreakStyle The new line-break style.
          * @return This {@code Builder}.
          */
@@ -114,6 +226,10 @@
         /**
          * Sets the line-break word style.
          *
+         * Note: different from {@link #merge(LineBreakConfig)} method, if this function is called
+         * with {@link #LINE_BREAK_WORD_STYLE_UNSPECIFIED}, the line break style is reset to
+         * {@link #LINE_BREAK_WORD_STYLE_UNSPECIFIED}.
+         *
          * @param lineBreakWordStyle The new line-break word style.
          * @return This {@code Builder}.
          */
@@ -125,6 +241,9 @@
         /**
          * Builds a {@link LineBreakConfig} instance.
          *
+         * This method can be called multiple times for generating multiple {@link LineBreakConfig}
+         * instances.
+         *
          * @return The {@code LineBreakConfig} instance.
          */
         public @NonNull LineBreakConfig build() {
@@ -179,6 +298,22 @@
     }
 
     /**
+     * Gets the resolved line break style.
+     *
+     * This method never returns {@link #LINE_BREAK_STYLE_UNSPECIFIED}.
+     *
+     * @return The line break style.
+     * @hide
+     */
+    public static @LineBreakStyle int getResolvedLineBreakStyle(@Nullable LineBreakConfig config) {
+        if (config == null) {
+            return LINE_BREAK_STYLE_NONE;
+        }
+        return config.mLineBreakStyle == LINE_BREAK_STYLE_UNSPECIFIED
+                ? LINE_BREAK_STYLE_NONE : config.mLineBreakStyle;
+    }
+
+    /**
      * Gets the current line-break word style.
      *
      * @return The line-break word style to be used for text wrapping.
@@ -187,6 +322,53 @@
         return mLineBreakWordStyle;
     }
 
+    /**
+     * Gets the resolved line break style.
+     *
+     * This method never returns {@link #LINE_BREAK_WORD_STYLE_UNSPECIFIED}.
+     *
+     * @return The line break word style.
+     * @hide
+     */
+    public static @LineBreakWordStyle int getResolvedLineBreakWordStyle(
+            @Nullable LineBreakConfig config) {
+        if (config == null) {
+            return LINE_BREAK_WORD_STYLE_NONE;
+        }
+        return config.mLineBreakWordStyle == LINE_BREAK_WORD_STYLE_UNSPECIFIED
+                ? LINE_BREAK_WORD_STYLE_NONE : config.mLineBreakWordStyle;
+    }
+
+    /**
+     * Generates a new {@link LineBreakConfig} instance merged with given {@code config}.
+     *
+     * If values of passing {@code config} are unspecified, the original values are kept. For
+     * example, the following code shows how line break config is merged.
+     *
+     * <pre>
+     *     val override = LineBreakConfig.Builder()
+     *          .setLineBreakWordStyle(LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE)
+     *          .build();  // UNSPECIFIED if no setLineBreakStyle is called.
+     *     val config = LineBreakConfig.Builder()
+     *          .setLineBreakStyle(LineBreakConfig.LINE_BREAK_STYLE_STRICT)
+     *          .build();
+     *
+     *     val newConfig = config.merge(override)
+     *     // newConfig has LINE_BREAK_STYLE_STRICT of line break style and
+     *     LINE_BREAK_WORD_STYLE_PHRASE of line break word style.
+     * </pre>
+     *
+     * @param config an overriding config.
+     * @return newly created instance that is current style merged with passed config.
+     */
+    public @NonNull LineBreakConfig merge(@NonNull LineBreakConfig config) {
+        return new LineBreakConfig(
+                config.mLineBreakStyle == LINE_BREAK_STYLE_UNSPECIFIED
+                        ? mLineBreakStyle : config.mLineBreakStyle,
+                config.mLineBreakWordStyle == LINE_BREAK_WORD_STYLE_UNSPECIFIED
+                        ? mLineBreakWordStyle : config.mLineBreakWordStyle);
+    }
+
     @Override
     public boolean equals(Object o) {
         if (o == null) return false;
@@ -201,4 +383,12 @@
     public int hashCode() {
         return Objects.hash(mLineBreakStyle, mLineBreakWordStyle);
     }
+
+    @Override
+    public String toString() {
+        return "LineBreakConfig{"
+                + "mLineBreakStyle=" + mLineBreakStyle
+                + ", mLineBreakWordStyle=" + mLineBreakWordStyle
+                + '}';
+    }
 }
diff --git a/graphics/java/android/graphics/text/MeasuredText.java b/graphics/java/android/graphics/text/MeasuredText.java
index 3f7f088..fd08c8b 100644
--- a/graphics/java/android/graphics/text/MeasuredText.java
+++ b/graphics/java/android/graphics/text/MeasuredText.java
@@ -296,10 +296,8 @@
             Preconditions.checkArgument(length > 0, "length can not be negative");
             final int end = mCurrentOffset + length;
             Preconditions.checkArgument(end <= mText.length, "Style exceeds the text length");
-            int lbStyle = (lineBreakConfig != null) ? lineBreakConfig.getLineBreakStyle() :
-                    LineBreakConfig.LINE_BREAK_STYLE_NONE;
-            int lbWordStyle = (lineBreakConfig != null) ? lineBreakConfig.getLineBreakWordStyle() :
-                    LineBreakConfig.LINE_BREAK_WORD_STYLE_NONE;
+            int lbStyle = LineBreakConfig.getResolvedLineBreakStyle(lineBreakConfig);
+            int lbWordStyle = LineBreakConfig.getResolvedLineBreakWordStyle(lineBreakConfig);
             nAddStyleRun(mNativePtr, paint.getNativeInstance(), lbStyle, lbWordStyle,
                     mCurrentOffset, end, isRtl);
             mCurrentOffset = end;
diff --git a/graphics/java/android/graphics/text/PositionedGlyphs.java b/graphics/java/android/graphics/text/PositionedGlyphs.java
index 8d20e9c..49e9d0c 100644
--- a/graphics/java/android/graphics/text/PositionedGlyphs.java
+++ b/graphics/java/android/graphics/text/PositionedGlyphs.java
@@ -165,6 +165,68 @@
     }
 
     /**
+     * Returns true if the fake bold option used for drawing, otherwise false.
+     *
+     * @param index the glyph index
+     * @return true if the fake bold option is on, otherwise off.
+     */
+    public boolean getFakeBold(@IntRange(from = 0) int index) {
+        Preconditions.checkArgumentInRange(index, 0, glyphCount() - 1, "index");
+        return nGetFakeBold(mLayoutPtr, index);
+    }
+
+    /**
+     * Returns true if the fake italic option used for drawing, otherwise false.
+     *
+     * @param index the glyph index
+     * @return true if the fake italic option is on, otherwise off.
+     */
+    public boolean getFakeItalic(@IntRange(from = 0) int index) {
+        Preconditions.checkArgumentInRange(index, 0, glyphCount() - 1, "index");
+        return nGetFakeItalic(mLayoutPtr, index);
+    }
+
+    /**
+     * A special value returned by {@link #getWeightOverride(int)} and
+     * {@link #getItalicOverride(int)} that indicates no font variation setting is overridden.
+     */
+    public static final float NO_OVERRIDE = Float.MIN_VALUE;
+
+    /**
+     * Returns overridden weight value if the font is variable font and `wght` value is overridden
+     * for drawing. Otherwise returns {@link #NO_OVERRIDE}.
+     *
+     * @param index the glyph index
+     * @return overridden weight value or {@link #NO_OVERRIDE}.
+     */
+    public float getWeightOverride(@IntRange(from = 0) int index) {
+        Preconditions.checkArgumentInRange(index, 0, glyphCount() - 1, "index");
+        float value = nGetWeightOverride(mLayoutPtr, index);
+        if (value == -1) {
+            return NO_OVERRIDE;
+        } else {
+            return value;
+        }
+    }
+
+    /**
+     * Returns overridden italic value if the font is variable font and `ital` value is overridden
+     * for drawing. Otherwise returns {@link #NO_OVERRIDE}.
+     *
+     * @param index the glyph index
+     * @return overridden weight value or {@link #NO_OVERRIDE}.
+     */
+    public float getItalicOverride(@IntRange(from = 0) int index) {
+        Preconditions.checkArgumentInRange(index, 0, glyphCount() - 1, "index");
+        float value = nGetItalicOverride(mLayoutPtr, index);
+        if (value == -1) {
+            return NO_OVERRIDE;
+        } else {
+            return value;
+        }
+    }
+
+    /**
      * Create single style layout from native result.
      *
      * @hide
@@ -210,6 +272,14 @@
     private static native long nGetFont(long minikinLayout, int i);
     @CriticalNative
     private static native long nReleaseFunc();
+    @CriticalNative
+    private static native boolean nGetFakeBold(long minikinLayout, int i);
+    @CriticalNative
+    private static native boolean nGetFakeItalic(long minikinLayout, int i);
+    @CriticalNative
+    private static native float nGetWeightOverride(long minikinLayout, int i);
+    @CriticalNative
+    private static native float nGetItalicOverride(long minikinLayout, int i);
 
     @Override
     public boolean equals(Object o) {
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitContainer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitContainer.java
index 381e9d4..08b7bb8 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitContainer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitContainer.java
@@ -25,6 +25,7 @@
 import android.window.WindowContainerTransaction;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.window.extensions.core.util.function.Function;
 
 /**
@@ -186,10 +187,21 @@
         return (mSplitRule instanceof SplitPlaceholderRule);
     }
 
-    @NonNull
-    SplitInfo toSplitInfo() {
-        return new SplitInfo(mPrimaryContainer.toActivityStack(),
-                mSecondaryContainer.toActivityStack(), mCurrentSplitAttributes, mToken);
+    /**
+     * Returns the SplitInfo representing this container.
+     *
+     * @return the SplitInfo representing this container if the underlying TaskFragmentContainers
+     * are stable, or {@code null} if any TaskFragmentContainer is in an intermediate state.
+     */
+    @Nullable
+    SplitInfo toSplitInfoIfStable() {
+        final ActivityStack primaryActivityStack = mPrimaryContainer.toActivityStackIfStable();
+        final ActivityStack secondaryActivityStack = mSecondaryContainer.toActivityStackIfStable();
+        if (primaryActivityStack == null || secondaryActivityStack == null) {
+            return null;
+        }
+        return new SplitInfo(primaryActivityStack, secondaryActivityStack,
+                mCurrentSplitAttributes, mToken);
     }
 
     static boolean shouldFinishPrimaryWithSecondary(@NonNull SplitRule splitRule) {
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 d5f4d6c..079cfa3 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java
@@ -1939,8 +1939,8 @@
         if (mEmbeddingCallback == null || !readyToReportToClient()) {
             return;
         }
-        final List<SplitInfo> currentSplitStates = getActiveSplitStates();
-        if (mLastReportedSplitStates.equals(currentSplitStates)) {
+        final List<SplitInfo> currentSplitStates = getActiveSplitStatesIfStable();
+        if (currentSplitStates == null || mLastReportedSplitStates.equals(currentSplitStates)) {
             return;
         }
         mLastReportedSplitStates.clear();
@@ -1950,13 +1950,21 @@
 
     /**
      * Returns a list of descriptors for currently active split states.
+     *
+     * @return a list of descriptors for currently active split states if all the containers are in
+     * a stable state, or {@code null} otherwise.
      */
     @GuardedBy("mLock")
-    @NonNull
-    private List<SplitInfo> getActiveSplitStates() {
+    @Nullable
+    private List<SplitInfo> getActiveSplitStatesIfStable() {
         final List<SplitInfo> splitStates = new ArrayList<>();
         for (int i = mTaskContainers.size() - 1; i >= 0; i--) {
-            mTaskContainers.valueAt(i).getSplitStates(splitStates);
+            final List<SplitInfo> taskSplitStates =
+                    mTaskContainers.valueAt(i).getSplitStatesIfStable();
+            if (taskSplitStates == null) {
+                return null;
+            }
+            splitStates.addAll(taskSplitStates);
         }
         return splitStates;
     }
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskContainer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskContainer.java
index d2d63bd..16d8cb4 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskContainer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskContainer.java
@@ -342,11 +342,23 @@
         }
     }
 
-    /** Adds the descriptors of split states in this Task to {@code outSplitStates}. */
-    void getSplitStates(@NonNull List<SplitInfo> outSplitStates) {
+    /**
+     * Gets the descriptors of split states in this Task.
+     *
+     * @return a list of {@code SplitInfo} if all the SplitContainers are stable, or {@code null} if
+     * any SplitContainer is in an intermediate state.
+     */
+    @Nullable
+    List<SplitInfo> getSplitStatesIfStable() {
+        final List<SplitInfo> splitStates = new ArrayList<>();
         for (SplitContainer container : mSplitContainers) {
-            outSplitStates.add(container.toSplitInfo());
+            final SplitInfo splitInfo = container.toSplitInfoIfStable();
+            if (splitInfo == null) {
+                return null;
+            }
+            splitStates.add(splitInfo);
         }
+        return splitStates;
     }
 
     /** A wrapper class which contains the information of {@link TaskContainer} */
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 61df335..0a694b5 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java
@@ -217,6 +217,30 @@
     /** List of non-finishing activities that belong to this container and live in this process. */
     @NonNull
     List<Activity> collectNonFinishingActivities() {
+        final List<Activity> activities = collectNonFinishingActivities(false /* checkIfStable */);
+        if (activities == null) {
+            throw new IllegalStateException(
+                    "Result activities should never be null when checkIfstable is false.");
+        }
+        return activities;
+    }
+
+    /**
+     * Collects non-finishing activities that belong to this container and live in this process.
+     *
+     * @param checkIfStable if {@code true}, returns {@code null} when the container is in an
+     *                      intermediate state.
+     * @return List of non-finishing activities that belong to this container and live in this
+     * process, {@code null} if checkIfStable is {@code true} and the container is in an
+     * intermediate state.
+     */
+    @Nullable
+    List<Activity> collectNonFinishingActivities(boolean checkIfStable) {
+        if (checkIfStable
+                && (mInfo == null || mInfo.isEmpty() || !mPendingAppearedActivities.isEmpty())) {
+            return null;
+        }
+
         final List<Activity> allActivities = new ArrayList<>();
         if (mInfo != null) {
             // Add activities reported from the server.
@@ -224,6 +248,15 @@
                 final Activity activity = mController.getActivity(token);
                 if (activity != null && !activity.isFinishing()) {
                     allActivities.add(activity);
+                } else {
+                    if (checkIfStable) {
+                        // Return null except for a special case when the activity is started in
+                        // background.
+                        if (activity == null && !mTaskContainer.isVisible()) {
+                            continue;
+                        }
+                        return null;
+                    }
                 }
             }
         }
@@ -277,9 +310,19 @@
         return false;
     }
 
-    @NonNull
-    ActivityStack toActivityStack() {
-        return new ActivityStack(collectNonFinishingActivities(), isEmpty(), mToken);
+    /**
+     * Returns the ActivityStack representing this container.
+     *
+     * @return ActivityStack representing this container if it is in a stable state. {@code null} if
+     * in an intermediate state.
+     */
+    @Nullable
+    ActivityStack toActivityStackIfStable() {
+        final List<Activity> activities = collectNonFinishingActivities(true /* checkIfStable */);
+        if (activities == null) {
+            return null;
+        }
+        return new ActivityStack(activities, isEmpty(), mToken);
     }
 
     /** Adds the activity that will be reparented to this container. */
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 2eacaaf..ccf9552 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java
@@ -98,14 +98,6 @@
         mTaskFragmentOrganizer = taskFragmentOrganizer;
     }
 
-    /** Registers to listen to {@link CommonFoldingFeature} changes */
-    public void addFoldingStateChangedCallback(
-            java.util.function.Consumer<List<CommonFoldingFeature>> consumer) {
-        synchronized (mLock) {
-            mFoldingFeatureProducer.addDataChangedCallback(consumer);
-        }
-    }
-
     /**
      * Adds a listener interested in receiving updates to {@link WindowLayoutInfo}
      *
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 b2ffad7..d440a3e 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
@@ -1286,6 +1286,34 @@
     }
 
     @Test
+    public void testSplitInfoCallback_NotReportSplitIfUnstable() {
+        final Activity r0 = createMockActivity();
+        final Activity r1 = createMockActivity();
+        addSplitTaskFragments(r0, r1);
+
+        // Should report new SplitInfo list if stable.
+        mSplitController.updateCallbackIfNecessary();
+        assertEquals(1, mSplitInfos.size());
+
+        // Should not report new SplitInfo list if unstable, e.g. any Activity is finishing.
+        mSplitInfos.clear();
+        final Activity r2 = createMockActivity();
+        final Activity r3 = createMockActivity();
+        doReturn(true).when(r2).isFinishing();
+        addSplitTaskFragments(r2, r3);
+
+        mSplitController.updateCallbackIfNecessary();
+        assertTrue(mSplitInfos.isEmpty());
+
+        // Should report SplitInfo list if it becomes stable again.
+        mSplitInfos.clear();
+        doReturn(false).when(r2).isFinishing();
+
+        mSplitController.updateCallbackIfNecessary();
+        assertEquals(2, mSplitInfos.size());
+    }
+
+    @Test
     public void testSplitInfoCallback_reportSplitInMultipleTasks() {
         final int taskId0 = 1;
         final int taskId1 = 2;
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java
index 000c65a..2188996 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java
@@ -48,6 +48,8 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import java.util.List;
+
 /**
  * Test class for {@link TaskContainer}.
  *
@@ -165,4 +167,35 @@
         doReturn(activity1).when(tf1).getTopNonFinishingActivity();
         assertEquals(activity1, taskContainer.getTopNonFinishingActivity());
     }
+
+    @Test
+    public void testGetSplitStatesIfStable() {
+        final TaskContainer taskContainer = createTestTaskContainer();
+
+        final SplitContainer splitContainer0 = mock(SplitContainer.class);
+        final SplitContainer splitContainer1 = mock(SplitContainer.class);
+        final SplitInfo splitInfo0 = mock(SplitInfo.class);
+        final SplitInfo splitInfo1 = mock(SplitInfo.class);
+        taskContainer.addSplitContainer(splitContainer0);
+        taskContainer.addSplitContainer(splitContainer1);
+
+        // When all the SplitContainers are stable, getSplitStatesIfStable() returns the list of
+        // SplitInfo representing the SplitContainers.
+        doReturn(splitInfo0).when(splitContainer0).toSplitInfoIfStable();
+        doReturn(splitInfo1).when(splitContainer1).toSplitInfoIfStable();
+
+        List<SplitInfo> splitInfoList = taskContainer.getSplitStatesIfStable();
+
+        assertEquals(2, splitInfoList.size());
+        assertEquals(splitInfo0, splitInfoList.get(0));
+        assertEquals(splitInfo1, splitInfoList.get(1));
+
+        // When any SplitContainer is in an intermediate state, getSplitStatesIfStable() returns
+        // null.
+        doReturn(null).when(splitContainer0).toSplitInfoIfStable();
+
+        splitInfoList = taskContainer.getSplitStatesIfStable();
+
+        assertNull(splitInfoList);
+    }
 }
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 78b85e6..cc00a49 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
@@ -321,6 +321,32 @@
     }
 
     @Test
+    public void testCollectNonFinishingActivities_checkIfStable() {
+        final TaskContainer taskContainer = createTestTaskContainer();
+        final TaskFragmentContainer container = new TaskFragmentContainer(null /* activity */,
+                mIntent, taskContainer, mController, null /* pairedPrimaryContainer */);
+
+        // In case mInfo is null, collectNonFinishingActivities(true) should return null.
+        List<Activity> activities =
+                container.collectNonFinishingActivities(true /* checkIfStable */);
+        assertNull(activities);
+
+        // collectNonFinishingActivities(true) should return proper value when the container is in a
+        // stable state.
+        final List<IBinder> runningActivities = Lists.newArrayList(mActivity.getActivityToken());
+        doReturn(runningActivities).when(mInfo).getActivities();
+        container.setInfo(mTransaction, mInfo);
+        activities = container.collectNonFinishingActivities(true /* checkIfStable */);
+        assertEquals(1, activities.size());
+
+        // In case any activity is finishing, collectNonFinishingActivities(true) should return
+        // null.
+        doReturn(true).when(mActivity).isFinishing();
+        activities = container.collectNonFinishingActivities(true /* checkIfStable */);
+        assertNull(activities);
+    }
+
+    @Test
     public void testAddPendingActivity() {
         final TaskContainer taskContainer = createTestTaskContainer();
         final TaskFragmentContainer container = new TaskFragmentContainer(null /* activity */,
diff --git a/libs/WindowManager/Shell/res/values-am/strings.xml b/libs/WindowManager/Shell/res/values-am/strings.xml
index 21172e2..ca08d56 100644
--- a/libs/WindowManager/Shell/res/values-am/strings.xml
+++ b/libs/WindowManager/Shell/res/values-am/strings.xml
@@ -32,23 +32,23 @@
     <string name="accessibility_action_pip_resize" msgid="4623966104749543182">"መጠን ይቀይሩ"</string>
     <string name="accessibility_action_pip_stash" msgid="4060775037619702641">"Stash"</string>
     <string name="accessibility_action_pip_unstash" msgid="7467499339610437646">"Unstash"</string>
-    <string name="dock_forced_resizable" msgid="7429086980048964687">"መተግበሪያ ከተከፈለ ማያ ገጽ ጋር ላይሠራ ይችላል"</string>
+    <string name="dock_forced_resizable" msgid="7429086980048964687">"መተግበሪያ ከተከፈለ ማያ ገፅ ጋር ላይሠራ ይችላል"</string>
     <string name="dock_non_resizeble_failed_to_dock_text" msgid="2733543750291266047">"መተግበሪያው የተከፈለ ማያ ገጽን አይደግፍም"</string>
     <string name="dock_multi_instances_not_supported_text" msgid="5242868470666346929">"ይህ መተግበሪያ መከፈት የሚችለው በ1 መስኮት ብቻ ነው።"</string>
     <string name="forced_resizable_secondary_display" msgid="1768046938673582671">"መተግበሪያ በሁለተኛ ማሳያ ላይ ላይሠራ ይችላል።"</string>
     <string name="activity_launch_on_secondary_display_failed_text" msgid="4226485344988071769">"መተግበሪያ በሁለተኛ ማሳያዎች ላይ ማስጀመርን አይደግፍም።"</string>
-    <string name="accessibility_divider" msgid="6407584574218956849">"የተከፈለ የማያ ገጽ ከፋይ"</string>
-    <string name="divider_title" msgid="1963391955593749442">"የተከፈለ የማያ ገጽ ከፋይ"</string>
-    <string name="accessibility_action_divider_left_full" msgid="1792313656305328536">"የግራ ሙሉ ማያ ገጽ"</string>
+    <string name="accessibility_divider" msgid="6407584574218956849">"የተከፈለ የማያ ገፅ ከፋይ"</string>
+    <string name="divider_title" msgid="1963391955593749442">"የተከፈለ የማያ ገፅ ከፋይ"</string>
+    <string name="accessibility_action_divider_left_full" msgid="1792313656305328536">"የግራ ሙሉ ማያ ገፅ"</string>
     <string name="accessibility_action_divider_left_70" msgid="8859845045360659250">"ግራ 70%"</string>
     <string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ግራ 50%"</string>
     <string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ግራ 30%"</string>
-    <string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"የቀኝ ሙሉ ማያ ገጽ"</string>
-    <string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"የላይ ሙሉ ማያ ገጽ"</string>
+    <string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"የቀኝ ሙሉ ማያ ገፅ"</string>
+    <string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"የላይ ሙሉ ማያ ገፅ"</string>
     <string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ከላይ 70%"</string>
     <string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ከላይ 50%"</string>
     <string name="accessibility_action_divider_top_30" msgid="3572788224908570257">"ከላይ 30%"</string>
-    <string name="accessibility_action_divider_bottom_full" msgid="2831868345092314060">"የታች ሙሉ ማያ ገጽ"</string>
+    <string name="accessibility_action_divider_bottom_full" msgid="2831868345092314060">"የታች ሙሉ ማያ ገፅ"</string>
     <string name="accessibility_split_left" msgid="1713683765575562458">"ወደ ግራ ከፋፍል"</string>
     <string name="accessibility_split_right" msgid="8441001008181296837">"ወደ ቀኝ ከፋፍል"</string>
     <string name="accessibility_split_top" msgid="2789329702027147146">"ወደ ላይ ከፋፍል"</string>
@@ -84,8 +84,8 @@
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"አልተስተካከለም?\nለማህደር መታ ያድርጉ"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ምንም የካሜራ ችግሮች የሉም? ለማሰናበት መታ ያድርጉ።"</string>
     <string name="letterbox_education_dialog_title" msgid="7739895354143295358">"ተጨማሪ ይመልከቱ እና ያድርጉ"</string>
-    <string name="letterbox_education_split_screen_text" msgid="449233070804658627">"ለተከፈለ ማያ ገጽ ሌላ መተግበሪያ ይጎትቱ"</string>
-    <string name="letterbox_education_reposition_text" msgid="4589957299813220661">"ቦታውን ለመቀየር ከመተግበሪያው ውጪ ሁለቴ መታ ያድርጉ"</string>
+    <string name="letterbox_education_split_screen_text" msgid="449233070804658627">"ለተከፈለ ማያ ገፅ ሌላ መተግበሪያ ይጎትቱ"</string>
+    <string name="letterbox_education_reposition_text" msgid="4589957299813220661">"ቦታውን ለመቀየር ከመተግበሪያው ውጭ ሁለቴ መታ ያድርጉ"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"ገባኝ"</string>
     <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"ለተጨማሪ መረጃ ይዘርጉ።"</string>
     <string name="letterbox_restart_dialog_title" msgid="8543049527871033505">"ለተሻለ ዕይታ እንደገና ይጀመር?"</string>
@@ -102,11 +102,11 @@
     <string name="app_icon_text" msgid="2823268023931811747">"የመተግበሪያ አዶ"</string>
     <string name="fullscreen_text" msgid="1162316685217676079">"ሙሉ ማያ"</string>
     <string name="desktop_text" msgid="1077633567027630454">"የዴስክቶፕ ሁነታ"</string>
-    <string name="split_screen_text" msgid="1396336058129570886">"የተከፈለ ማያ ገጽ"</string>
+    <string name="split_screen_text" msgid="1396336058129570886">"የተከፈለ ማያ ገፅ"</string>
     <string name="more_button_text" msgid="3655388105592893530">"ተጨማሪ"</string>
     <string name="float_button_text" msgid="9221657008391364581">"ተንሳፋፊ"</string>
     <string name="select_text" msgid="5139083974039906583">"ምረጥ"</string>
-    <string name="screenshot_text" msgid="1477704010087786671">"ቅጽበታዊ ገጽ እይታ"</string>
+    <string name="screenshot_text" msgid="1477704010087786671">"ቅጽበታዊ ገፅ እይታ"</string>
     <string name="close_text" msgid="4986518933445178928">"ዝጋ"</string>
     <string name="collapse_menu_text" msgid="7515008122450342029">"ምናሌ ዝጋ"</string>
     <string name="expand_menu_text" msgid="3847736164494181168">"ምናሌን ክፈት"</string>
diff --git a/libs/WindowManager/Shell/res/values-am/strings_tv.xml b/libs/WindowManager/Shell/res/values-am/strings_tv.xml
index a6be578..84c1c67 100644
--- a/libs/WindowManager/Shell/res/values-am/strings_tv.xml
+++ b/libs/WindowManager/Shell/res/values-am/strings_tv.xml
@@ -20,7 +20,7 @@
     <string name="notification_channel_tv_pip" msgid="2576686079160402435">"ሥዕል-ላይ-ሥዕል"</string>
     <string name="pip_notification_unknown_title" msgid="2729870284350772311">"(ርዕስ የሌለው ፕሮግራም)"</string>
     <string name="pip_close" msgid="2955969519031223530">"ዝጋ"</string>
-    <string name="pip_fullscreen" msgid="7278047353591302554">"ሙሉ ማያ ገጽ"</string>
+    <string name="pip_fullscreen" msgid="7278047353591302554">"ሙሉ ማያ ገፅ"</string>
     <string name="pip_move" msgid="158770205886688553">"ውሰድ"</string>
     <string name="pip_expand" msgid="1051966011679297308">"ዘርጋ"</string>
     <string name="pip_collapse" msgid="3903295106641385962">"ሰብስብ"</string>
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 8de9d11..c415c86 100644
--- a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
@@ -89,7 +89,7 @@
     <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="letterbox_restart_dialog_title" msgid="8543049527871033505">"Želite li da restartujete radi boljeg prikaza?"</string>
-    <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"Možete da restartujete aplikaciju da bi izgledala bolje na ekranu, s tim što možete da izgubite ono što ste uradili ili nesačuvane promene, ako ih ima"</string>
+    <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"Možete da restartujete aplikaciju da bi izgledala bolje na ekranu, ali možete da izgubite napredak ili nesačuvane promene"</string>
     <string name="letterbox_restart_cancel" msgid="1342209132692537805">"Otkaži"</string>
     <string name="letterbox_restart_restart" msgid="8529976234412442973">"Restartuj"</string>
     <string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne prikazuj ponovo"</string>
diff --git a/libs/WindowManager/Shell/res/values-cs/strings.xml b/libs/WindowManager/Shell/res/values-cs/strings.xml
index 70e2970..ac22b85 100644
--- a/libs/WindowManager/Shell/res/values-cs/strings.xml
+++ b/libs/WindowManager/Shell/res/values-cs/strings.xml
@@ -79,7 +79,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="6712141648865547958">"Klepnutím tuto aplikaci kvůli lepšímu zobrazení restartujete."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Pokud je problém se zobrazením aplikace, klepněte na ni a restartujte ji."</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>
diff --git a/libs/WindowManager/Shell/res/values-de/strings.xml b/libs/WindowManager/Shell/res/values-de/strings.xml
index 6ce475a..c17f97f 100644
--- a/libs/WindowManager/Shell/res/values-de/strings.xml
+++ b/libs/WindowManager/Shell/res/values-de/strings.xml
@@ -20,7 +20,7 @@
     <string name="pip_phone_close" msgid="5783752637260411309">"Schließen"</string>
     <string name="pip_phone_expand" msgid="2579292903468287504">"Maximieren"</string>
     <string name="pip_phone_settings" msgid="5468987116750491918">"Einstellungen"</string>
-    <string name="pip_phone_enter_split" msgid="7042877263880641911">"„Geteilter Bildschirm“ aktivieren"</string>
+    <string name="pip_phone_enter_split" msgid="7042877263880641911">"Splitscreen aktivieren"</string>
     <string name="pip_menu_title" msgid="5393619322111827096">"Menü"</string>
     <string name="pip_menu_accessibility_title" msgid="8129016817688656249">"Menü „Bild im Bild“"</string>
     <string name="pip_notification_title" msgid="1347104727641353453">"<xliff:g id="NAME">%s</xliff:g> ist in Bild im Bild"</string>
@@ -32,8 +32,8 @@
     <string name="accessibility_action_pip_resize" msgid="4623966104749543182">"Größe anpassen"</string>
     <string name="accessibility_action_pip_stash" msgid="4060775037619702641">"In Stash legen"</string>
     <string name="accessibility_action_pip_unstash" msgid="7467499339610437646">"Aus Stash entfernen"</string>
-    <string name="dock_forced_resizable" msgid="7429086980048964687">"Die App funktioniert bei geteiltem Bildschirm unter Umständen nicht"</string>
-    <string name="dock_non_resizeble_failed_to_dock_text" msgid="2733543750291266047">"„Geteilter Bildschirm“ wird in dieser App nicht unterstützt"</string>
+    <string name="dock_forced_resizable" msgid="7429086980048964687">"Die App funktioniert im Splitscreen-Modus unter Umständen nicht"</string>
+    <string name="dock_non_resizeble_failed_to_dock_text" msgid="2733543750291266047">"Splitscreen wird in dieser App nicht unterstützt"</string>
     <string name="dock_multi_instances_not_supported_text" msgid="5242868470666346929">"Diese App kann nur in einem einzigen Fenster geöffnet werden."</string>
     <string name="forced_resizable_secondary_display" msgid="1768046938673582671">"Die App funktioniert auf einem sekundären Display möglicherweise nicht."</string>
     <string name="activity_launch_on_secondary_display_failed_text" msgid="4226485344988071769">"Die App unterstützt den Start auf sekundären Displays nicht."</string>
@@ -84,7 +84,7 @@
     <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>
     <string name="letterbox_education_dialog_title" msgid="7739895354143295358">"Mehr sehen und erledigen"</string>
-    <string name="letterbox_education_split_screen_text" msgid="449233070804658627">"Weitere App hineinziehen, um den Bildschirm zu teilen"</string>
+    <string name="letterbox_education_split_screen_text" msgid="449233070804658627">"Für Splitscreen-Modus weitere App hineinziehen"</string>
     <string name="letterbox_education_reposition_text" msgid="4589957299813220661">"Außerhalb 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>
@@ -102,13 +102,12 @@
     <string name="app_icon_text" msgid="2823268023931811747">"App-Symbol"</string>
     <string name="fullscreen_text" msgid="1162316685217676079">"Vollbild"</string>
     <string name="desktop_text" msgid="1077633567027630454">"Desktopmodus"</string>
-    <string name="split_screen_text" msgid="1396336058129570886">"Geteilter Bildschirm"</string>
+    <string name="split_screen_text" msgid="1396336058129570886">"Splitscreen"</string>
     <string name="more_button_text" msgid="3655388105592893530">"Mehr"</string>
     <string name="float_button_text" msgid="9221657008391364581">"Frei schwebend"</string>
     <string name="select_text" msgid="5139083974039906583">"Auswählen"</string>
     <string name="screenshot_text" msgid="1477704010087786671">"Screenshot"</string>
     <string name="close_text" msgid="4986518933445178928">"Schließen"</string>
     <string name="collapse_menu_text" msgid="7515008122450342029">"Menü schließen"</string>
-    <!-- no translation found for expand_menu_text (3847736164494181168) -->
-    <skip />
+    <string name="expand_menu_text" msgid="3847736164494181168">"Menü öffnen"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-es/strings.xml b/libs/WindowManager/Shell/res/values-es/strings.xml
index ea44bea..9c5e0c4 100644
--- a/libs/WindowManager/Shell/res/values-es/strings.xml
+++ b/libs/WindowManager/Shell/res/values-es/strings.xml
@@ -79,7 +79,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="6712141648865547958">"Toca para reiniciar esta aplicación y obtener una mejor vista."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Toca para reiniciar esta aplicación y verlo mejor."</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>
diff --git a/libs/WindowManager/Shell/res/values-et/strings.xml b/libs/WindowManager/Shell/res/values-et/strings.xml
index 90feff3..fb23d11 100644
--- a/libs/WindowManager/Shell/res/values-et/strings.xml
+++ b/libs/WindowManager/Shell/res/values-et/strings.xml
@@ -89,7 +89,7 @@
     <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="letterbox_restart_dialog_title" msgid="8543049527871033505">"Kas taaskäivitada parema vaate saavutamiseks?"</string>
-    <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"Saate rakenduse taaskäivitada, et see näeks ekraanikuval parem välja, kuid võite kaotada edenemise või salvestamata muudatused"</string>
+    <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"Saate rakenduse taaskäivitada, et see näeks ekraanikuval parem välja, kuid võite kaotada edenemise või salvestamata muudatused."</string>
     <string name="letterbox_restart_cancel" msgid="1342209132692537805">"Tühista"</string>
     <string name="letterbox_restart_restart" msgid="8529976234412442973">"Taaskäivita"</string>
     <string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ära kuva uuesti"</string>
diff --git a/libs/WindowManager/Shell/res/values-fa/strings.xml b/libs/WindowManager/Shell/res/values-fa/strings.xml
index 13a2ea2..edff47a 100644
--- a/libs/WindowManager/Shell/res/values-fa/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fa/strings.xml
@@ -59,7 +59,7 @@
     <string name="accessibility_action_stop_one_handed" msgid="1369940261782179442">"خروج از «حالت یک‌دستی»"</string>
     <string name="bubbles_settings_button_description" msgid="1301286017420516912">"تنظیمات برای حبابک‌های <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="bubble_overflow_button_content_description" msgid="8160974472718594382">"سرریز"</string>
-    <string name="bubble_accessibility_action_add_back" msgid="1830101076853540953">"افزودن برگشت به پشته"</string>
+    <string name="bubble_accessibility_action_add_back" msgid="1830101076853540953">"افزودن برگشتن به پشته"</string>
     <string name="bubble_content_description_single" msgid="8495748092720065813">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> از <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
     <string name="bubble_content_description_stack" msgid="8071515017164630429">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> از <xliff:g id="APP_NAME">%2$s</xliff:g> و <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> مورد بیشتر"</string>
     <string name="bubble_accessibility_action_move_top_left" msgid="2644118920500782758">"انتقال به بالا سمت راست"</string>
diff --git a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
index 7814b7d..6d19e55 100644
--- a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
@@ -79,7 +79,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="6712141648865547958">"Touchez pour redémarrer cette application afin d\'obtenir un meilleur affichage."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Pour obtenir un meilleur affichage, touchez pour redémarrer cette application."</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>
diff --git a/libs/WindowManager/Shell/res/values-fr/strings.xml b/libs/WindowManager/Shell/res/values-fr/strings.xml
index da5b5c9..5fb91f7 100644
--- a/libs/WindowManager/Shell/res/values-fr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fr/strings.xml
@@ -79,7 +79,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="6712141648865547958">"Appuyez pour redémarrer cette appli et avoir une meilleure vue."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Pour un meilleur affichage, appuyez pour redémarrer cette appli."</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>
@@ -89,7 +89,7 @@
     <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="letterbox_restart_dialog_title" msgid="8543049527871033505">"Redémarrer pour améliorer l\'affichage ?"</string>
-    <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"Vous pouvez redémarrer l\'appli pour en améliorer son aspect sur votre écran, mais vous risquez de perdre votre progression ou les modifications non enregistrées"</string>
+    <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"Vous pouvez redémarrer l\'appli pour un meilleur rendu sur votre écran, mais il se peut que vous perdiez votre progression ou les modifications non enregistrées"</string>
     <string name="letterbox_restart_cancel" msgid="1342209132692537805">"Annuler"</string>
     <string name="letterbox_restart_restart" msgid="8529976234412442973">"Redémarrer"</string>
     <string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Ne plus afficher"</string>
diff --git a/libs/WindowManager/Shell/res/values-hi/strings.xml b/libs/WindowManager/Shell/res/values-hi/strings.xml
index fb5040b..b0b0e9c 100644
--- a/libs/WindowManager/Shell/res/values-hi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hi/strings.xml
@@ -89,7 +89,7 @@
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"ठीक है"</string>
     <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"ज़्यादा जानकारी के लिए बड़ा करें."</string>
     <string name="letterbox_restart_dialog_title" msgid="8543049527871033505">"बेहतर व्यू पाने के लिए ऐप्लिकेशन को रीस्टार्ट करना है?"</string>
-    <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"स्क्रीन पर ऐप्लिकेशन का बेहतर व्यू पाने के लिए उसे रीस्टार्ट करें. हालांकि, आपने जो बदलाव सेव नहीं किए हैं या अब तक जो काम किए हैं उनका डेटा, ऐप्लिकेशन रीस्टार्ट करने पर मिट सकता है"</string>
+    <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"स्क्रीन पर ऐप्लिकेशन का बेहतर व्यू पाने के लिए उसे रीस्टार्ट करें. हालांकि, इससे अब तक किया गया काम और सेव न किए गए बदलाव मिट सकते हैं"</string>
     <string name="letterbox_restart_cancel" msgid="1342209132692537805">"रद्द करें"</string>
     <string name="letterbox_restart_restart" msgid="8529976234412442973">"रीस्टार्ट करें"</string>
     <string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"फिर से न दिखाएं"</string>
diff --git a/libs/WindowManager/Shell/res/values-hr/strings.xml b/libs/WindowManager/Shell/res/values-hr/strings.xml
index 2535657..08721f0 100644
--- a/libs/WindowManager/Shell/res/values-hr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hr/strings.xml
@@ -79,7 +79,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="6712141648865547958">"Dodirnite da biste ponovo pokrenuli tu aplikaciju kako biste bolje vidjeli."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Dodirnite za ponovno pokretanje te aplikacije i bolji prikaz."</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>
diff --git a/libs/WindowManager/Shell/res/values-in/strings.xml b/libs/WindowManager/Shell/res/values-in/strings.xml
index 5747deb..3f6d9c55 100644
--- a/libs/WindowManager/Shell/res/values-in/strings.xml
+++ b/libs/WindowManager/Shell/res/values-in/strings.xml
@@ -88,7 +88,7 @@
     <string name="letterbox_education_reposition_text" msgid="4589957299813220661">"Ketuk dua kali di luar 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="letterbox_restart_dialog_title" msgid="8543049527871033505">"Mulai ulang untuk tampilan yang lebih baik?"</string>
+    <string name="letterbox_restart_dialog_title" msgid="8543049527871033505">"Mulai ulang untuk melihat tampilan yang lebih baik?"</string>
     <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"Anda dapat memulai ulang aplikasi agar terlihat lebih baik di layar, tetapi Anda mungkin kehilangan progres atau perubahan yang belum disimpan"</string>
     <string name="letterbox_restart_cancel" msgid="1342209132692537805">"Batal"</string>
     <string name="letterbox_restart_restart" msgid="8529976234412442973">"Mulai ulang"</string>
diff --git a/libs/WindowManager/Shell/res/values-is/strings.xml b/libs/WindowManager/Shell/res/values-is/strings.xml
index 145d26d..20c16be 100644
--- a/libs/WindowManager/Shell/res/values-is/strings.xml
+++ b/libs/WindowManager/Shell/res/values-is/strings.xml
@@ -79,7 +79,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="6712141648865547958">"Ýta til að endurræsa forritið og fá betri sýn."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Ýttu 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>
diff --git a/libs/WindowManager/Shell/res/values-ja/strings.xml b/libs/WindowManager/Shell/res/values-ja/strings.xml
index 6c1bafe..8f2f6d8 100644
--- a/libs/WindowManager/Shell/res/values-ja/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ja/strings.xml
@@ -54,7 +54,7 @@
     <string name="accessibility_split_top" msgid="2789329702027147146">"上に分割"</string>
     <string name="accessibility_split_bottom" msgid="8694551025220868191">"下に分割"</string>
     <string name="one_handed_tutorial_title" msgid="4583241688067426350">"片手モードの使用"</string>
-    <string name="one_handed_tutorial_description" msgid="3486582858591353067">"終了するには、画面を下から上にスワイプするか、アプリの任意の場所をタップします"</string>
+    <string name="one_handed_tutorial_description" msgid="3486582858591353067">"終了するには、画面を下から上にスワイプするか、アプリの上側の任意の場所をタップします"</string>
     <string name="accessibility_action_start_one_handed" msgid="5070337354072861426">"片手モードを開始します"</string>
     <string name="accessibility_action_stop_one_handed" msgid="1369940261782179442">"片手モードを終了します"</string>
     <string name="bubbles_settings_button_description" msgid="1301286017420516912">"<xliff:g id="APP_NAME">%1$s</xliff:g> のバブルの設定"</string>
@@ -79,7 +79,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="6712141648865547958">"タップしてこのアプリを再起動すると、表示が適切になります。"</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>
diff --git a/libs/WindowManager/Shell/res/values-kk/strings.xml b/libs/WindowManager/Shell/res/values-kk/strings.xml
index 7c9120e..c40cd2f 100644
--- a/libs/WindowManager/Shell/res/values-kk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-kk/strings.xml
@@ -79,7 +79,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="6712141648865547958">"Ыңғайлы көріністі реттеу үшін қолданбаны түртіп, өшіріп қосыңыз."</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>
diff --git a/libs/WindowManager/Shell/res/values-ko/strings.xml b/libs/WindowManager/Shell/res/values-ko/strings.xml
index 39d717d..55697ca 100644
--- a/libs/WindowManager/Shell/res/values-ko/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ko/strings.xml
@@ -79,7 +79,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="6712141648865547958">"보기를 개선하려면 탭하여 앱을 다시 시작합니다."</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>
diff --git a/libs/WindowManager/Shell/res/values-ky/strings.xml b/libs/WindowManager/Shell/res/values-ky/strings.xml
index f210ea2..19df267 100644
--- a/libs/WindowManager/Shell/res/values-ky/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ky/strings.xml
@@ -24,7 +24,7 @@
     <string name="pip_menu_title" msgid="5393619322111827096">"Меню"</string>
     <string name="pip_menu_accessibility_title" msgid="8129016817688656249">"Сүрөт ичиндеги сүрөт менюсу"</string>
     <string name="pip_notification_title" msgid="1347104727641353453">"<xliff:g id="NAME">%s</xliff:g> – сүрөт ичиндеги сүрөт"</string>
-    <string name="pip_notification_message" msgid="8854051911700302620">"Эгер <xliff:g id="NAME">%s</xliff:g> колдонмосу бул функцияны пайдаланбасын десеңиз, жөндөөлөрдү ачып туруп, аны өчүрүп коюңуз."</string>
+    <string name="pip_notification_message" msgid="8854051911700302620">"Эгер <xliff:g id="NAME">%s</xliff:g> колдонмосу бул функцияны пайдаланбасын десеңиз, параметрлерди ачып туруп, аны өчүрүп коюңуз."</string>
     <string name="pip_play" msgid="3496151081459417097">"Ойнотуу"</string>
     <string name="pip_pause" msgid="690688849510295232">"Тындыруу"</string>
     <string name="pip_skip_to_next" msgid="8403429188794867653">"Кийинкисине өткөрүп жиберүү"</string>
diff --git a/libs/WindowManager/Shell/res/values-mk/strings.xml b/libs/WindowManager/Shell/res/values-mk/strings.xml
index 427433c..1567d61 100644
--- a/libs/WindowManager/Shell/res/values-mk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mk/strings.xml
@@ -79,7 +79,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="6712141648865547958">"Допрете за да ја рестартирате апликацијава за подобар приказ."</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>
diff --git a/libs/WindowManager/Shell/res/values-or/strings.xml b/libs/WindowManager/Shell/res/values-or/strings.xml
index e4c7053..267b8a3 100644
--- a/libs/WindowManager/Shell/res/values-or/strings.xml
+++ b/libs/WindowManager/Shell/res/values-or/strings.xml
@@ -26,7 +26,7 @@
     <string name="pip_notification_title" msgid="1347104727641353453">"<xliff:g id="NAME">%s</xliff:g> \"ଛବି-ଭିତରେ-ଛବି\"ରେ ଅଛି"</string>
     <string name="pip_notification_message" msgid="8854051911700302620">"ଏହି ବୈଶିଷ୍ଟ୍ୟ <xliff:g id="NAME">%s</xliff:g> ବ୍ୟବହାର ନକରିବାକୁ ଯଦି ଆପଣ ଚାହାଁନ୍ତି, ସେଟିଙ୍ଗ ଖୋଲିବାକୁ ଟାପ୍‍ କରନ୍ତୁ ଏବଂ ଏହା ଅଫ୍‍ କରିଦିଅନ୍ତୁ।"</string>
     <string name="pip_play" msgid="3496151081459417097">"ପ୍ଲେ କରନ୍ତୁ"</string>
-    <string name="pip_pause" msgid="690688849510295232">"ପଜ୍‍ କରନ୍ତୁ"</string>
+    <string name="pip_pause" msgid="690688849510295232">"ବିରତ କରନ୍ତୁ"</string>
     <string name="pip_skip_to_next" msgid="8403429188794867653">"ପରବର୍ତ୍ତୀକୁ ଯାଆନ୍ତୁ"</string>
     <string name="pip_skip_to_prev" msgid="7172158111196394092">"ପୂର୍ବବର୍ତ୍ତୀକୁ ଛାଡ଼ନ୍ତୁ"</string>
     <string name="accessibility_action_pip_resize" msgid="4623966104749543182">"ରିସାଇଜ୍ କରନ୍ତୁ"</string>
diff --git a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
index ed0cdb6..a3d6ce5 100644
--- a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
@@ -24,7 +24,7 @@
     <string name="pip_menu_title" msgid="5393619322111827096">"Menu"</string>
     <string name="pip_menu_accessibility_title" msgid="8129016817688656249">"Menu de ecrã no ecrã"</string>
     <string name="pip_notification_title" msgid="1347104727641353453">"A app <xliff:g id="NAME">%s</xliff:g> está no modo de ecrã no ecrã"</string>
-    <string name="pip_notification_message" msgid="8854051911700302620">"Se não pretende que a app <xliff:g id="NAME">%s</xliff:g> utilize esta funcionalidade, toque para abrir as definições e desative-a."</string>
+    <string name="pip_notification_message" msgid="8854051911700302620">"Se não quer que a app <xliff:g id="NAME">%s</xliff:g> utilize esta funcionalidade, toque para abrir as definições e desative-a."</string>
     <string name="pip_play" msgid="3496151081459417097">"Reproduzir"</string>
     <string name="pip_pause" msgid="690688849510295232">"Pausar"</string>
     <string name="pip_skip_to_next" msgid="8403429188794867653">"Mudar para o seguinte"</string>
@@ -79,7 +79,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="6712141648865547958">"Toque para reiniciar esta app e ficar com uma melhor visão."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Toque para reiniciar esta app e ver melhor."</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>
diff --git a/libs/WindowManager/Shell/res/values-ro/strings.xml b/libs/WindowManager/Shell/res/values-ro/strings.xml
index 8a64b16..58ad60a 100644
--- a/libs/WindowManager/Shell/res/values-ro/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ro/strings.xml
@@ -79,7 +79,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Balon"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Gestionează"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balonul a fost respins."</string>
-    <string name="restart_button_description" msgid="6712141648865547958">"Atinge ca să repornești aplicația pentru o vizualizare mai bună."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Atinge ca să repornești aplicația pentru o afișare mai bună."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Ai probleme cu camera foto?\nAtinge pentru a reîncadra"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nu ai remediat problema?\nAtinge pentru a reveni"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nu ai probleme cu camera foto? Atinge pentru a închide."</string>
diff --git a/libs/WindowManager/Shell/res/values-sr/strings.xml b/libs/WindowManager/Shell/res/values-sr/strings.xml
index 307efc9..85798cf 100644
--- a/libs/WindowManager/Shell/res/values-sr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sr/strings.xml
@@ -89,7 +89,7 @@
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Важи"</string>
     <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Проширите за још информација."</string>
     <string name="letterbox_restart_dialog_title" msgid="8543049527871033505">"Желите ли да рестартујете ради бољег приказа?"</string>
-    <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"Можете да рестартујете апликацију да би изгледала боље на екрану, с тим што можете да изгубите оно што сте урадили или несачуване промене, ако их има"</string>
+    <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"Можете да рестартујете апликацију да би изгледала боље на екрану, али можете да изгубите напредак или несачуване промене"</string>
     <string name="letterbox_restart_cancel" msgid="1342209132692537805">"Откажи"</string>
     <string name="letterbox_restart_restart" msgid="8529976234412442973">"Рестартуј"</string>
     <string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"Не приказуј поново"</string>
diff --git a/libs/WindowManager/Shell/res/values-ta/strings.xml b/libs/WindowManager/Shell/res/values-ta/strings.xml
index fd5f0e6..5bb4c27 100644
--- a/libs/WindowManager/Shell/res/values-ta/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ta/strings.xml
@@ -79,7 +79,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="6712141648865547958">"இங்கு தட்டுவதன் மூலம் இந்த ஆப்ஸை மீண்டும் தொடங்கி, ஆப்ஸ் காட்டப்படும் விதத்தை இன்னும் சிறப்பாக்கலாம்."</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>
diff --git a/libs/WindowManager/Shell/res/values-vi/strings.xml b/libs/WindowManager/Shell/res/values-vi/strings.xml
index 7d97400..0281c1c 100644
--- a/libs/WindowManager/Shell/res/values-vi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-vi/strings.xml
@@ -79,7 +79,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="6712141648865547958">"Nhấn để khởi động lại ứng dụng này để xem tốt hơn."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Nhấn để khởi động lại ứng dụng để có trải nghiệm 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>
diff --git a/libs/WindowManager/Shell/res/values-watch/colors.xml b/libs/WindowManager/Shell/res/values-watch/colors.xml
new file mode 100644
index 0000000..82492bf
--- /dev/null
+++ b/libs/WindowManager/Shell/res/values-watch/colors.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 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.
+ */
+-->
+<resources>
+    <color name="splash_window_background_default">@color/splash_screen_bg_dark</color>
+</resources>
+
diff --git a/libs/WindowManager/Shell/res/values-watch/dimen.xml b/libs/WindowManager/Shell/res/values-watch/dimen.xml
new file mode 100644
index 0000000..362e72c
--- /dev/null
+++ b/libs/WindowManager/Shell/res/values-watch/dimen.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+<resources>
+    <!-- The acceptable area ratio of fg icon area/bg icon area, i.e. (48 X 48) / (72 x 72) -->
+    <item type="dimen" format="float" name="splash_icon_enlarge_foreground_threshold">0.44</item>
+    <!-- Scaling factor applied to splash icons without provided background i.e. (60 / 48) -->
+    <item type="dimen" format="float" name="splash_icon_no_background_scale_factor">1.25</item>
+</resources>
diff --git a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
index 6f399e5..3d33eca 100644
--- a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
@@ -24,7 +24,7 @@
     <string name="pip_menu_title" msgid="5393619322111827096">"選單"</string>
     <string name="pip_menu_accessibility_title" msgid="8129016817688656249">"畫中畫選單"</string>
     <string name="pip_notification_title" msgid="1347104727641353453">"「<xliff:g id="NAME">%s</xliff:g>」目前在畫中畫模式"</string>
-    <string name="pip_notification_message" msgid="8854051911700302620">"如果您不想「<xliff:g id="NAME">%s</xliff:g>」使用此功能,請輕按以開啟設定,然後停用此功能。"</string>
+    <string name="pip_notification_message" msgid="8854051911700302620">"如果你不想「<xliff:g id="NAME">%s</xliff:g>」使用此功能,請輕按以開啟設定,然後停用此功能。"</string>
     <string name="pip_play" msgid="3496151081459417097">"播放"</string>
     <string name="pip_pause" msgid="690688849510295232">"暫停"</string>
     <string name="pip_skip_to_next" msgid="8403429188794867653">"跳到下一個"</string>
@@ -88,8 +88,8 @@
     <string name="letterbox_education_reposition_text" msgid="4589957299813220661">"在應用程式外輕按兩下即可調整位置"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"知道了"</string>
     <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"展開即可查看詳情。"</string>
-    <string name="letterbox_restart_dialog_title" msgid="8543049527871033505">"要重新啟動改善檢視畫面嗎?"</string>
-    <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"您可重新啟動應用程式,讓系統更新檢視畫面;但系統可能不會儲存目前進度及您作出的任何變更"</string>
+    <string name="letterbox_restart_dialog_title" msgid="8543049527871033505">"要重新啟動以改善檢視畫面嗎?"</string>
+    <string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"你可重新啟動應用程式,讓系統更新檢視畫面;但系統可能不會儲存目前進度及你作出的任何變更"</string>
     <string name="letterbox_restart_cancel" msgid="1342209132692537805">"取消"</string>
     <string name="letterbox_restart_restart" msgid="8529976234412442973">"重新啟動"</string>
     <string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"不要再顯示"</string>
diff --git a/libs/WindowManager/Shell/res/values/dimen.xml b/libs/WindowManager/Shell/res/values/dimen.xml
index 64fed1c..ac73e1d 100644
--- a/libs/WindowManager/Shell/res/values/dimen.xml
+++ b/libs/WindowManager/Shell/res/values/dimen.xml
@@ -421,4 +421,9 @@
     <!-- The height of the area at the top of the screen where a freeform task will transition to
     fullscreen if dragged until the top bound of the task is within the area. -->
     <dimen name="desktop_mode_transition_area_height">16dp</dimen>
+
+    <!-- The acceptable area ratio of fg icon area/bg icon area, i.e. (72 x 72) / (108 x 108) -->
+    <item type="dimen" format="float" name="splash_icon_enlarge_foreground_threshold">0.44</item>
+    <!-- Scaling factor applied to splash icons without provided background i.e. (192 / 160) -->
+    <item type="dimen" format="float" name="splash_icon_no_background_scale_factor">1.2</item>
 </resources>
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationBackground.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationBackground.java
index 9bf3b80..42dc19c 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationBackground.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationBackground.java
@@ -52,12 +52,13 @@
 
     /**
      * Ensures the back animation background color layer is present.
+     *
      * @param startRect The start bounds of the closing target.
      * @param color The background color.
      * @param transaction The animation transaction.
      */
-    void ensureBackground(Rect startRect, int color,
-            @NonNull SurfaceControl.Transaction transaction) {
+    public void ensureBackground(
+            Rect startRect, int color, @NonNull SurfaceControl.Transaction transaction) {
         if (mBackgroundSurface != null) {
             return;
         }
@@ -81,7 +82,12 @@
         mIsRequestingStatusBarAppearance = false;
     }
 
-    void removeBackground(@NonNull SurfaceControl.Transaction transaction) {
+    /**
+     * Remove the back animation background.
+     *
+     * @param transaction The animation transaction.
+     */
+    public void removeBackground(@NonNull SurfaceControl.Transaction transaction) {
         if (mBackgroundSurface == null) {
             return;
         }
@@ -93,11 +99,21 @@
         mIsRequestingStatusBarAppearance = false;
     }
 
+    /**
+     * Attach a {@link StatusBarCustomizer} instance to allow status bar animate with back progress.
+     *
+     * @param customizer The {@link StatusBarCustomizer} to be used.
+     */
     void setStatusBarCustomizer(StatusBarCustomizer customizer) {
         mCustomizer = customizer;
     }
 
-    void onBackProgressed(float progress) {
+    /**
+     * Update back animation background with for the progress.
+     *
+     * @param progress Progress value from {@link android.window.BackProgressAnimator}
+     */
+    public void onBackProgressed(float progress) {
         if (mCustomizer == null || mStartBounds.isEmpty()) {
             return;
         }
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 bb543f2..3790f04 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
@@ -25,6 +25,7 @@
 import android.animation.ValueAnimator;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.SuppressLint;
 import android.app.ActivityTaskManager;
 import android.app.IActivityTaskManager;
 import android.content.ContentResolver;
@@ -43,7 +44,6 @@
 import android.util.DisplayMetrics;
 import android.util.Log;
 import android.util.MathUtils;
-import android.util.SparseArray;
 import android.view.IRemoteAnimationRunner;
 import android.view.InputDevice;
 import android.view.KeyCharacterMap;
@@ -70,6 +70,7 @@
 import com.android.wm.shell.sysui.ShellController;
 import com.android.wm.shell.sysui.ShellInit;
 
+
 import java.util.concurrent.atomic.AtomicBoolean;
 
 /**
@@ -113,7 +114,11 @@
     private boolean mShouldStartOnNextMoveEvent = false;
     /** @see #setTriggerBack(boolean) */
     private boolean mTriggerBack;
-    private FlingAnimationUtils mFlingAnimationUtils;
+
+    private final FlingAnimationUtils mFlingAnimationUtils;
+
+    /** Registry for the back animations */
+    private final ShellBackAnimationRegistry mShellBackAnimationRegistry;
 
     @Nullable
     private BackNavigationInfo mBackNavigationInfo;
@@ -135,13 +140,9 @@
 
     private final TouchTracker mTouchTracker = new TouchTracker();
 
-    private final SparseArray<BackAnimationRunner> mAnimationDefinition = new SparseArray<>();
     @Nullable
     private IOnBackInvokedCallback mActiveCallback;
 
-    private CrossActivityAnimation mDefaultActivityAnimation;
-    private CustomizeActivityAnimation mCustomizeActivityAnimation;
-
     @VisibleForTesting
     final RemoteCallback mNavigationObserver = new RemoteCallback(
             new RemoteCallback.OnResultListener() {
@@ -169,10 +170,18 @@
             @NonNull @ShellMainThread ShellExecutor shellExecutor,
             @NonNull @ShellBackgroundThread Handler backgroundHandler,
             Context context,
-            @NonNull BackAnimationBackground backAnimationBackground) {
-        this(shellInit, shellController, shellExecutor, backgroundHandler,
-                ActivityTaskManager.getService(), context, context.getContentResolver(),
-                backAnimationBackground);
+            @NonNull BackAnimationBackground backAnimationBackground,
+            ShellBackAnimationRegistry shellBackAnimationRegistry) {
+        this(
+                shellInit,
+                shellController,
+                shellExecutor,
+                backgroundHandler,
+                ActivityTaskManager.getService(),
+                context,
+                context.getContentResolver(),
+                backAnimationBackground,
+                shellBackAnimationRegistry);
     }
 
     @VisibleForTesting
@@ -182,8 +191,10 @@
             @NonNull @ShellMainThread ShellExecutor shellExecutor,
             @NonNull @ShellBackgroundThread Handler bgHandler,
             @NonNull IActivityTaskManager activityTaskManager,
-            Context context, ContentResolver contentResolver,
-            @NonNull BackAnimationBackground backAnimationBackground) {
+            Context context,
+            ContentResolver contentResolver,
+            @NonNull BackAnimationBackground backAnimationBackground,
+            ShellBackAnimationRegistry shellBackAnimationRegistry) {
         mShellController = shellController;
         mShellExecutor = shellExecutor;
         mActivityTaskManager = activityTaskManager;
@@ -197,11 +208,7 @@
                 .setMaxLengthSeconds(FLING_MAX_LENGTH_SECONDS)
                 .setSpeedUpFactor(FLING_SPEED_UP_FACTOR)
                 .build();
-    }
-
-    @VisibleForTesting
-    void setEnableUAnimation(boolean enable) {
-        IS_U_ANIMATION_ENABLED = enable;
+        mShellBackAnimationRegistry = shellBackAnimationRegistry;
     }
 
     private void onInit() {
@@ -209,26 +216,6 @@
         createAdapter();
         mShellController.addExternalInterface(KEY_EXTRA_SHELL_BACK_ANIMATION,
                 this::createExternalInterface, this);
-
-        initBackAnimationRunners();
-    }
-
-    private void initBackAnimationRunners() {
-        if (!IS_U_ANIMATION_ENABLED) {
-            return;
-        }
-
-        final CrossTaskBackAnimation crossTaskAnimation =
-                new CrossTaskBackAnimation(mContext, mAnimationBackground);
-        mAnimationDefinition.set(BackNavigationInfo.TYPE_CROSS_TASK,
-                crossTaskAnimation.mBackAnimationRunner);
-        mDefaultActivityAnimation =
-                new CrossActivityAnimation(mContext, mAnimationBackground);
-        mAnimationDefinition.set(BackNavigationInfo.TYPE_CROSS_ACTIVITY,
-                mDefaultActivityAnimation.mBackAnimationRunner);
-        mCustomizeActivityAnimation =
-                new CustomizeActivityAnimation(mContext, mAnimationBackground);
-        // TODO (236760237): register dialog close animation when it's completed.
     }
 
     private void setupAnimationDeveloperSettingsObserver(
@@ -359,11 +346,11 @@
 
     void registerAnimation(@BackNavigationInfo.BackTargetType int type,
             @NonNull BackAnimationRunner runner) {
-        mAnimationDefinition.set(type, runner);
+        mShellBackAnimationRegistry.registerAnimation(type, runner);
     }
 
     void unregisterAnimation(@BackNavigationInfo.BackTargetType int type) {
-        mAnimationDefinition.remove(type);
+        mShellBackAnimationRegistry.unregisterAnimation(type);
     }
 
     /**
@@ -434,9 +421,7 @@
         final int backType = backNavigationInfo.getType();
         final boolean shouldDispatchToAnimator = shouldDispatchToAnimator();
         if (shouldDispatchToAnimator) {
-            if (mAnimationDefinition.contains(backType)) {
-                mAnimationDefinition.get(backType).startGesture();
-            } else {
+            if (!mShellBackAnimationRegistry.startGesture(backType)) {
                 mActiveCallback = null;
             }
         } else {
@@ -459,6 +444,7 @@
         sendBackEvent(KeyEvent.ACTION_UP);
     }
 
+    @SuppressLint("MissingPermission")
     private void sendBackEvent(int action) {
         final long when = SystemClock.uptimeMillis();
         final KeyEvent ev = new KeyEvent(when, when, action, KeyEvent.KEYCODE_BACK, 0 /* repeat */,
@@ -671,21 +657,17 @@
         }
 
         final int backType = mBackNavigationInfo.getType();
-        final BackAnimationRunner runner = mAnimationDefinition.get(backType);
         // Simply trigger and finish back navigation when no animator defined.
-        if (!shouldDispatchToAnimator() || runner == null) {
+        if (!shouldDispatchToAnimator()
+                || mShellBackAnimationRegistry.isAnimationCancelledOrNull(backType)) {
             invokeOrCancelBack();
             return;
-        }
-        if (runner.isWaitingAnimation()) {
+        } else if (mShellBackAnimationRegistry.isWaitingAnimation(backType)) {
             ProtoLog.w(WM_SHELL_BACK_PREVIEW, "Gesture released, but animation didn't ready.");
             // Supposed it is in post commit animation state, and start the timeout to watch
             // if the animation is ready.
             mShellExecutor.executeDelayed(mAnimationTimeoutRunnable, MAX_ANIMATION_DURATION);
             return;
-        } else if (runner.isAnimationCancelled()) {
-            invokeOrCancelBack();
-            return;
         }
         startPostCommitAnimation();
     }
@@ -737,12 +719,7 @@
         mShouldStartOnNextMoveEvent = false;
         mTouchTracker.reset();
         mActiveCallback = null;
-        // reset to default
-        if (mDefaultActivityAnimation != null
-                && mAnimationDefinition.contains(BackNavigationInfo.TYPE_CROSS_ACTIVITY)) {
-            mAnimationDefinition.set(BackNavigationInfo.TYPE_CROSS_ACTIVITY,
-                    mDefaultActivityAnimation.mBackAnimationRunner);
-        }
+        mShellBackAnimationRegistry.resetDefaultCrossActivity();
         if (mBackNavigationInfo != null) {
             mBackNavigationInfo.onBackNavigationFinished(mTriggerBack);
             mBackNavigationInfo = null;
@@ -750,86 +727,88 @@
         mTriggerBack = false;
     }
 
-    private BackAnimationRunner getAnimationRunnerAndInit() {
-        int type = mBackNavigationInfo.getType();
-        // Initiate customized cross-activity animation, or fall back to cross activity animation
-        if (type == BackNavigationInfo.TYPE_CROSS_ACTIVITY && mAnimationDefinition.contains(type)) {
-            final BackNavigationInfo.CustomAnimationInfo animationInfo =
-                    mBackNavigationInfo.getCustomAnimationInfo();
-            if (animationInfo != null && mCustomizeActivityAnimation != null
-                    && mCustomizeActivityAnimation.prepareNextAnimation(animationInfo)) {
-                mAnimationDefinition.get(type).resetWaitingAnimation();
-                mAnimationDefinition.set(BackNavigationInfo.TYPE_CROSS_ACTIVITY,
-                        mCustomizeActivityAnimation.mBackAnimationRunner);
-            }
-        }
-        return mAnimationDefinition.get(type);
-    }
 
     private void createAdapter() {
-        IBackAnimationRunner runner = new IBackAnimationRunner.Stub() {
-            @Override
-            public void onAnimationStart(RemoteAnimationTarget[] apps,
-                    RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps,
-                    IBackAnimationFinishedCallback finishedCallback) {
-                mShellExecutor.execute(() -> {
-                    if (mBackNavigationInfo == null) {
-                        Log.e(TAG, "Lack of navigation info to start animation.");
-                        return;
-                    }
-                    final int type = mBackNavigationInfo.getType();
-                    final BackAnimationRunner runner = getAnimationRunnerAndInit();
-                    if (runner == null) {
-                        Log.e(TAG, "Animation didn't be defined for type "
-                                + BackNavigationInfo.typeToString(type));
-                        if (finishedCallback != null) {
-                            try {
-                                finishedCallback.onAnimationFinished(false);
-                            } catch (RemoteException e) {
-                                Log.w(TAG, "Failed call IBackNaviAnimationController", e);
-                            }
-                        }
-                        return;
-                    }
-                    mActiveCallback = runner.getCallback();
-                    mBackAnimationFinishedCallback = finishedCallback;
+        IBackAnimationRunner runner =
+                new IBackAnimationRunner.Stub() {
+                    @Override
+                    public void onAnimationStart(
+                            RemoteAnimationTarget[] apps,
+                            RemoteAnimationTarget[] wallpapers,
+                            RemoteAnimationTarget[] nonApps,
+                            IBackAnimationFinishedCallback finishedCallback) {
+                        mShellExecutor.execute(
+                                () -> {
+                                    if (mBackNavigationInfo == null) {
+                                        Log.e(TAG, "Lack of navigation info to start animation.");
+                                        return;
+                                    }
+                                    final BackAnimationRunner runner =
+                                            mShellBackAnimationRegistry.getAnimationRunnerAndInit(
+                                                    mBackNavigationInfo);
+                                    if (runner == null) {
+                                        if (finishedCallback != null) {
+                                            try {
+                                                finishedCallback.onAnimationFinished(false);
+                                            } catch (RemoteException e) {
+                                                Log.w(
+                                                        TAG,
+                                                        "Failed call IBackNaviAnimationController",
+                                                        e);
+                                            }
+                                        }
+                                        return;
+                                    }
+                                    mActiveCallback = runner.getCallback();
+                                    mBackAnimationFinishedCallback = finishedCallback;
 
-                    ProtoLog.d(WM_SHELL_BACK_PREVIEW, "BackAnimationController: startAnimation()");
-                    runner.startAnimation(apps, wallpapers, nonApps, () -> mShellExecutor.execute(
-                            BackAnimationController.this::onBackAnimationFinished));
+                                    ProtoLog.d(
+                                            WM_SHELL_BACK_PREVIEW,
+                                            "BackAnimationController: startAnimation()");
+                                    runner.startAnimation(
+                                            apps,
+                                            wallpapers,
+                                            nonApps,
+                                            () ->
+                                                    mShellExecutor.execute(
+                                                            BackAnimationController.this
+                                                                    ::onBackAnimationFinished));
 
-                    if (apps.length >= 1) {
-                        dispatchOnBackStarted(
-                                mActiveCallback, mTouchTracker.createStartEvent(apps[0]));
+                                    if (apps.length >= 1) {
+                                        dispatchOnBackStarted(
+                                                mActiveCallback,
+                                                mTouchTracker.createStartEvent(apps[0]));
+                                    }
+
+                                    // Dispatch the first progress after animation start for
+                                    // smoothing the initial animation, instead of waiting for next
+                                    // onMove.
+                                    final BackMotionEvent backFinish =
+                                            mTouchTracker.createProgressEvent();
+                                    dispatchOnBackProgressed(mActiveCallback, backFinish);
+                                    if (!mBackGestureStarted) {
+                                        // if the down -> up gesture happened before animation
+                                        // start, we have to trigger the uninterruptible transition
+                                        // to finish the back animation.
+                                        startPostCommitAnimation();
+                                    }
+                                });
                     }
 
-                    // Dispatch the first progress after animation start for smoothing the initial
-                    // animation, instead of waiting for next onMove.
-                    final BackMotionEvent backFinish = mTouchTracker.createProgressEvent();
-                    dispatchOnBackProgressed(mActiveCallback, backFinish);
-                    if (!mBackGestureStarted) {
-                        // if the down -> up gesture happened before animation start, we have to
-                        // trigger the uninterruptible transition to finish the back animation.
-                        startPostCommitAnimation();
+                    @Override
+                    public void onAnimationCancelled() {
+                        mShellExecutor.execute(
+                                () -> {
+                                    if (!mShellBackAnimationRegistry.cancel(
+                                            mBackNavigationInfo.getType())) {
+                                        return;
+                                    }
+                                    if (!mBackGestureStarted) {
+                                        invokeOrCancelBack();
+                                    }
+                                });
                     }
-                });
-            }
-
-            @Override
-            public void onAnimationCancelled() {
-                mShellExecutor.execute(() -> {
-                    final BackAnimationRunner runner = mAnimationDefinition.get(
-                            mBackNavigationInfo.getType());
-                    if (runner == null) {
-                        return;
-                    }
-                    runner.cancelAnimation();
-                    if (!mBackGestureStarted) {
-                        invokeOrCancelBack();
-                    }
-                });
-            }
-        };
+                };
         mBackAnimationAdapter = new BackAnimationAdapter(runner);
     }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationRunner.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationRunner.java
index 913239f7..431df21 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationRunner.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationRunner.java
@@ -32,7 +32,7 @@
  * before it received IBackAnimationRunner#onAnimationStart, so the controller could continue
  * trigger the real back behavior.
  */
-class BackAnimationRunner {
+public class BackAnimationRunner {
     private static final String TAG = "ShellBackPreview";
 
     private final IOnBackInvokedCallback mCallback;
@@ -44,8 +44,8 @@
     /** True when the back animation is cancelled */
     private boolean mAnimationCancelled;
 
-    BackAnimationRunner(@NonNull IOnBackInvokedCallback callback,
-            @NonNull IRemoteAnimationRunner runner) {
+    public BackAnimationRunner(
+            @NonNull IOnBackInvokedCallback callback, @NonNull IRemoteAnimationRunner runner) {
         mCallback = callback;
         mRunner = runner;
     }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityAnimation.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityAnimation.java
index edefe9e..9181281 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityAnimation.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityAnimation.java
@@ -51,9 +51,11 @@
 import com.android.internal.protolog.common.ProtoLog;
 import com.android.wm.shell.common.annotations.ShellMainThread;
 
+import javax.inject.Inject;
+
 /** Class that defines cross-activity animation. */
 @ShellMainThread
-class CrossActivityAnimation {
+public class CrossActivityAnimation extends ShellBackAnimation {
     /**
      * Minimum scale of the entering/closing window.
      */
@@ -106,6 +108,7 @@
     private final SpringAnimation mLeavingProgressSpring;
     // Max window x-shift in pixels.
     private final float mWindowXShift;
+    private final BackAnimationRunner mBackAnimationRunner;
 
     private float mEnteringProgress = 0f;
     private float mLeavingProgress = 0f;
@@ -126,11 +129,11 @@
     private IRemoteAnimationFinishedCallback mFinishCallback;
 
     private final BackProgressAnimator mProgressAnimator = new BackProgressAnimator();
-    final BackAnimationRunner mBackAnimationRunner;
 
     private final BackAnimationBackground mBackground;
 
-    CrossActivityAnimation(Context context, BackAnimationBackground background) {
+    @Inject
+    public CrossActivityAnimation(Context context, BackAnimationBackground background) {
         mCornerRadius = ScreenDecorationsUtils.getWindowCornerRadius(context);
         mBackAnimationRunner = new BackAnimationRunner(new Callback(), new Runner());
         mBackground = background;
@@ -357,6 +360,11 @@
         mTransaction.apply();
     }
 
+    @Override
+    public BackAnimationRunner getRunner() {
+        return mBackAnimationRunner;
+    }
+
     private final class Callback extends IOnBackInvokedCallback.Default {
         @Override
         public void onBackStarted(BackMotionEvent backEvent) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossTaskBackAnimation.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossTaskBackAnimation.java
index a7dd27a..209d853 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossTaskBackAnimation.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossTaskBackAnimation.java
@@ -47,21 +47,23 @@
 import com.android.internal.protolog.common.ProtoLog;
 import com.android.wm.shell.common.annotations.ShellMainThread;
 
+import javax.inject.Inject;
+
 /**
  * Controls the animation of swiping back and returning to another task.
  *
- * This is a two part animation. The first part is an animation that tracks gesture location to
- * scale and move the closing and entering app windows.
- * Once the gesture is committed, the second part remains the closing window in place.
- * The entering window plays the rest of app opening transition to enter full screen.
+ * <p>This is a two part animation. The first part is an animation that tracks gesture location to
+ * scale and move the closing and entering app windows. Once the gesture is committed, the second
+ * part remains the closing window in place. The entering window plays the rest of app opening
+ * transition to enter full screen.
  *
- * This animation is used only for apps that enable back dispatching via
- * {@link android.window.OnBackInvokedDispatcher}. The controller registers
- * an {@link IOnBackInvokedCallback} with WM Shell and receives back dispatches when a back
- * navigation to launcher starts.
+ * <p>This animation is used only for apps that enable back dispatching via {@link
+ * android.window.OnBackInvokedDispatcher}. The controller registers an {@link
+ * IOnBackInvokedCallback} with WM Shell and receives back dispatches when a back navigation to
+ * launcher starts.
  */
 @ShellMainThread
-class CrossTaskBackAnimation {
+public class CrossTaskBackAnimation extends ShellBackAnimation {
     private static final int BACKGROUNDCOLOR = 0x43433A;
 
     /**
@@ -104,28 +106,41 @@
 
     private final float[] mTmpFloat9 = new float[9];
     private final float[] mTmpTranslate = {0, 0, 0};
-
+    private final BackAnimationRunner mBackAnimationRunner;
+    private final BackAnimationBackground mBackground;
     private RemoteAnimationTarget mEnteringTarget;
     private RemoteAnimationTarget mClosingTarget;
     private SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction();
-
     private boolean mBackInProgress = false;
-
     private boolean mIsRightEdge;
     private float mProgress = 0;
     private PointF mTouchPos = new PointF();
     private IRemoteAnimationFinishedCallback mFinishCallback;
     private BackProgressAnimator mProgressAnimator = new BackProgressAnimator();
-    final BackAnimationRunner mBackAnimationRunner;
 
-    private final BackAnimationBackground mBackground;
-
-    CrossTaskBackAnimation(Context context, BackAnimationBackground background) {
+    @Inject
+    public CrossTaskBackAnimation(Context context, BackAnimationBackground background) {
         mCornerRadius = ScreenDecorationsUtils.getWindowCornerRadius(context);
         mBackAnimationRunner = new BackAnimationRunner(new Callback(), new Runner());
         mBackground = background;
     }
 
+    private static void computeScaleTransformMatrix(float scale, float[] matrix) {
+        matrix[0] = scale;
+        matrix[1] = 0;
+        matrix[2] = 0;
+        matrix[3] = 0;
+        matrix[4] = scale;
+        matrix[5] = 0;
+        matrix[6] = 0;
+        matrix[7] = 0;
+        matrix[8] = scale;
+    }
+
+    private static float mapRange(float value, float min, float max) {
+        return min + (value * (max - min));
+    }
+
     private float getInterpolatedProgress(float backProgress) {
         return 1 - (1 - backProgress) * (1 - backProgress) * (1 - backProgress);
     }
@@ -233,18 +248,6 @@
         mTransaction.setColorTransform(leash, mTmpFloat9, mTmpTranslate);
     }
 
-    static void computeScaleTransformMatrix(float scale, float[] matrix) {
-        matrix[0] = scale;
-        matrix[1] = 0;
-        matrix[2] = 0;
-        matrix[3] = 0;
-        matrix[4] = scale;
-        matrix[5] = 0;
-        matrix[6] = 0;
-        matrix[7] = 0;
-        matrix[8] = scale;
-    }
-
     private void finishAnimation() {
         if (mEnteringTarget != null) {
             mEnteringTarget.leash.release();
@@ -314,11 +317,12 @@
         valueAnimator.start();
     }
 
-    private static float mapRange(float value, float min, float max) {
-        return min + (value * (max - min));
+    @Override
+    public BackAnimationRunner getRunner() {
+        return mBackAnimationRunner;
     }
 
-    private final class Callback extends IOnBackInvokedCallback.Default  {
+    private final class Callback extends IOnBackInvokedCallback.Default {
         @Override
         public void onBackStarted(BackMotionEvent backEvent) {
             mProgressAnimator.onBackStarted(backEvent,
@@ -340,7 +344,7 @@
             mProgressAnimator.reset();
             onGestureCommitted();
         }
-    };
+    }
 
     private final class Runner extends IRemoteAnimationRunner.Default {
         @Override
@@ -360,5 +364,5 @@
             startBackAnimation();
             mFinishCallback = finishedCallback;
         }
-    };
+    }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/CustomizeActivityAnimation.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/CustomizeActivityAnimation.java
index 2d6ec75..aca638c 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/CustomizeActivityAnimation.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/CustomizeActivityAnimation.java
@@ -55,13 +55,13 @@
 import com.android.internal.protolog.common.ProtoLog;
 import com.android.wm.shell.common.annotations.ShellMainThread;
 
-/**
- * Class that handle customized close activity transition animation.
- */
+import javax.inject.Inject;
+
+/** Class that handle customized close activity transition animation. */
 @ShellMainThread
-class CustomizeActivityAnimation {
+public class CustomizeActivityAnimation extends ShellBackAnimation {
     private final BackProgressAnimator mProgressAnimator = new BackProgressAnimator();
-    final BackAnimationRunner mBackAnimationRunner;
+    private final BackAnimationRunner mBackAnimationRunner;
     private final float mCornerRadius;
     private final SurfaceControl.Transaction mTransaction;
     private final BackAnimationBackground mBackground;
@@ -88,7 +88,8 @@
 
     private final Choreographer mChoreographer;
 
-    CustomizeActivityAnimation(Context context, BackAnimationBackground background) {
+    @Inject
+    public CustomizeActivityAnimation(Context context, BackAnimationBackground background) {
         this(context, background, new SurfaceControl.Transaction(), null);
     }
 
@@ -258,10 +259,12 @@
         valueAnimator.start();
     }
 
-    /**
-     * Load customize animation before animation start.
-     */
-    boolean prepareNextAnimation(BackNavigationInfo.CustomAnimationInfo animationInfo) {
+    /** Load customize animation before animation start. */
+    @Override
+    public boolean prepareNextAnimation(BackNavigationInfo.CustomAnimationInfo animationInfo) {
+        if (animationInfo == null) {
+            return false;
+        }
         final AnimationLoadResult result = mCustomAnimationLoader.loadAll(animationInfo);
         if (result != null) {
             mCloseAnimation = result.mCloseAnimation;
@@ -272,6 +275,11 @@
         return false;
     }
 
+    @Override
+    public BackAnimationRunner getRunner() {
+        return mBackAnimationRunner;
+    }
+
     private final class Callback extends IOnBackInvokedCallback.Default {
         @Override
         public void onBackStarted(BackMotionEvent backEvent) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/ShellBackAnimation.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/ShellBackAnimation.java
new file mode 100644
index 0000000..312e88d
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/ShellBackAnimation.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.back;
+
+import android.window.BackNavigationInfo;
+
+import javax.inject.Qualifier;
+
+/** Base class for all back animations. */
+public abstract class ShellBackAnimation {
+    @Qualifier
+    public @interface CrossActivity {}
+
+    @Qualifier
+    public @interface CrossTask {}
+
+    @Qualifier
+    public @interface CustomizeActivity {}
+
+    @Qualifier
+    public @interface ReturnToHome {}
+
+    /** Retrieve the {@link BackAnimationRunner} associated with this animation. */
+    public abstract BackAnimationRunner getRunner();
+
+    /**
+     * Prepare the next animation with customized animation.
+     *
+     * @return true if this type of back animation should override the default.
+     */
+    public boolean prepareNextAnimation(BackNavigationInfo.CustomAnimationInfo animationInfo) {
+        return false;
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/ShellBackAnimationRegistry.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/ShellBackAnimationRegistry.java
new file mode 100644
index 0000000..62b18f3
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/ShellBackAnimationRegistry.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.back;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.util.Log;
+import android.util.SparseArray;
+import android.window.BackNavigationInfo;
+
+/** Registry for all types of default back animations */
+public class ShellBackAnimationRegistry {
+    private static final String TAG = "ShellBackPreview";
+
+    private final SparseArray<BackAnimationRunner> mAnimationDefinition = new SparseArray<>();
+    private final ShellBackAnimation mDefaultCrossActivityAnimation;
+    private final ShellBackAnimation mCustomizeActivityAnimation;
+
+    public ShellBackAnimationRegistry(
+            @ShellBackAnimation.CrossActivity @Nullable ShellBackAnimation crossActivityAnimation,
+            @ShellBackAnimation.CrossTask @Nullable ShellBackAnimation crossTaskAnimation,
+            @ShellBackAnimation.CustomizeActivity @Nullable
+                    ShellBackAnimation customizeActivityAnimation,
+            @ShellBackAnimation.ReturnToHome @Nullable
+                    ShellBackAnimation defaultBackToHomeAnimation) {
+        if (crossActivityAnimation != null) {
+            mAnimationDefinition.set(
+                    BackNavigationInfo.TYPE_CROSS_TASK, crossTaskAnimation.getRunner());
+        }
+        if (crossActivityAnimation != null) {
+            mAnimationDefinition.set(
+                    BackNavigationInfo.TYPE_CROSS_ACTIVITY, crossActivityAnimation.getRunner());
+        }
+        if (defaultBackToHomeAnimation != null) {
+            mAnimationDefinition.set(
+                    BackNavigationInfo.TYPE_RETURN_TO_HOME, defaultBackToHomeAnimation.getRunner());
+        }
+
+        mDefaultCrossActivityAnimation = crossActivityAnimation;
+        mCustomizeActivityAnimation = customizeActivityAnimation;
+
+        // TODO(b/236760237): register dialog close animation when it's completed.
+    }
+
+    void registerAnimation(
+            @BackNavigationInfo.BackTargetType int type, @NonNull BackAnimationRunner runner) {
+        mAnimationDefinition.set(type, runner);
+    }
+
+    void unregisterAnimation(@BackNavigationInfo.BackTargetType int type) {
+        mAnimationDefinition.remove(type);
+    }
+
+    /**
+     * Start the {@link BackAnimationRunner} associated with a back target type.
+     *
+     * @param type back target type
+     * @return true if the animation is started, false if animation is not found for that type.
+     */
+    boolean startGesture(@BackNavigationInfo.BackTargetType int type) {
+        BackAnimationRunner runner = mAnimationDefinition.get(type);
+        if (runner == null) {
+            return false;
+        }
+        runner.startGesture();
+        return true;
+    }
+
+    /**
+     * Cancel the {@link BackAnimationRunner} associated with a back target type.
+     *
+     * @param type back target type
+     * @return true if the animation is started, false if animation is not found for that type.
+     */
+    boolean cancel(@BackNavigationInfo.BackTargetType int type) {
+        BackAnimationRunner runner = mAnimationDefinition.get(type);
+        if (runner == null) {
+            return false;
+        }
+        runner.cancelAnimation();
+        return true;
+    }
+
+    boolean isAnimationCancelledOrNull(@BackNavigationInfo.BackTargetType int type) {
+        BackAnimationRunner runner = mAnimationDefinition.get(type);
+        if (runner == null) {
+            return true;
+        }
+        return runner.isAnimationCancelled();
+    }
+
+    boolean isWaitingAnimation(@BackNavigationInfo.BackTargetType int type) {
+        BackAnimationRunner runner = mAnimationDefinition.get(type);
+        if (runner == null) {
+            return false;
+        }
+        return runner.isWaitingAnimation();
+    }
+
+    void resetDefaultCrossActivity() {
+        if (mDefaultCrossActivityAnimation == null
+                || !mAnimationDefinition.contains(BackNavigationInfo.TYPE_CROSS_ACTIVITY)) {
+            return;
+        }
+        mAnimationDefinition.set(
+                BackNavigationInfo.TYPE_CROSS_ACTIVITY, mDefaultCrossActivityAnimation.getRunner());
+    }
+
+    BackAnimationRunner getAnimationRunnerAndInit(BackNavigationInfo backNavigationInfo) {
+        int type = backNavigationInfo.getType();
+        // Initiate customized cross-activity animation, or fall back to cross activity animation
+        if (type == BackNavigationInfo.TYPE_CROSS_ACTIVITY && mAnimationDefinition.contains(type)) {
+            if (mCustomizeActivityAnimation != null
+                    && mCustomizeActivityAnimation.prepareNextAnimation(
+                            backNavigationInfo.getCustomAnimationInfo())) {
+                mAnimationDefinition.get(type).resetWaitingAnimation();
+                mAnimationDefinition.set(
+                        BackNavigationInfo.TYPE_CROSS_ACTIVITY,
+                        mCustomizeActivityAnimation.getRunner());
+            }
+        }
+        BackAnimationRunner runner = mAnimationDefinition.get(type);
+        if (runner == null) {
+            Log.e(
+                    TAG,
+                    "Animation didn't be defined for type "
+                            + BackNavigationInfo.typeToString(type));
+        }
+        return runner;
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/TEST_MAPPING b/libs/WindowManager/Shell/src/com/android/wm/shell/back/TEST_MAPPING
index 837d5ff..f02559f 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/TEST_MAPPING
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/TEST_MAPPING
@@ -12,19 +12,19 @@
       ]
     },
     {
-      "name": "CtsWindowManagerDeviceTestCases",
+      "name": "CtsWindowManagerDeviceBackNavigation",
       "options": [
         {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
         },
         {
-          "include-filter": "android.server.wm.BackGestureInvokedTest"
+          "include-filter": "android.server.wm.backnavigation.BackGestureInvokedTest"
         },
         {
-          "include-filter": "android.server.wm.BackNavigationTests"
+          "include-filter": "android.server.wm.backnavigation.BackNavigationTests"
         },
         {
-          "include-filter": "android.server.wm.OnBackInvokedCallbackGestureTest"
+          "include-filter": "android.server.wm.backnavigation.OnBackInvokedCallbackGestureTest"
         }
       ]
     }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java
index 9facbd5..b52a118 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java
@@ -49,11 +49,11 @@
 import java.util.Optional;
 
 /**
- * Provides dependencies from {@link com.android.wm.shell}, these dependencies are only
- * accessible from components within the WM subcomponent (can be explicitly exposed to the
- * SysUIComponent, see {@link WMComponent}).
+ * Provides dependencies from {@link com.android.wm.shell}, these dependencies are only accessible
+ * from components within the WM subcomponent (can be explicitly exposed to the SysUIComponent, see
+ * {@link com.android.systemui.dagger.WMComponent}).
  *
- * This module only defines Shell dependencies for the TV SystemUI implementation.  Common
+ * <p>This module only defines Shell dependencies for the TV SystemUI implementation. Common
  * dependencies should go into {@link WMShellBaseModule}.
  */
 @Module(includes = {TvPipModule.class})
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 422e3b0..430fa95 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
@@ -36,6 +36,7 @@
 import com.android.wm.shell.back.BackAnimation;
 import com.android.wm.shell.back.BackAnimationBackground;
 import com.android.wm.shell.back.BackAnimationController;
+import com.android.wm.shell.back.ShellBackAnimationRegistry;
 import com.android.wm.shell.bubbles.BubbleController;
 import com.android.wm.shell.bubbles.Bubbles;
 import com.android.wm.shell.common.DevicePostureController;
@@ -107,9 +108,9 @@
 /**
  * Provides basic dependencies from {@link com.android.wm.shell}, these dependencies are only
  * accessible from components within the WM subcomponent (can be explicitly exposed to the
- * SysUIComponent, see {@link WMComponent}).
+ * SysUIComponent, see {@link com.android.systemui.dagger.WMComponent}).
  *
- * This module only defines *common* dependencies across various SystemUI implementations,
+ * <p>This module only defines *common* dependencies across various SystemUI implementations,
  * dependencies that are device/form factor SystemUI implementation specific should go into their
  * respective modules (ie. {@link WMShellModule} for handheld, {@link TvWMShellModule} for tv, etc.)
  */
@@ -303,16 +304,25 @@
             ShellController shellController,
             @ShellMainThread ShellExecutor shellExecutor,
             @ShellBackgroundThread Handler backgroundHandler,
-            BackAnimationBackground backAnimationBackground
-    ) {
+            BackAnimationBackground backAnimationBackground,
+            Optional<ShellBackAnimationRegistry> shellBackAnimationRegistry) {
         if (BackAnimationController.IS_ENABLED) {
-            return Optional.of(
-                    new BackAnimationController(shellInit, shellController, shellExecutor,
-                            backgroundHandler, context, backAnimationBackground));
+            return shellBackAnimationRegistry.map(
+                    (animations) ->
+                            new BackAnimationController(
+                                    shellInit,
+                                    shellController,
+                                    shellExecutor,
+                                    backgroundHandler,
+                                    context,
+                                    backAnimationBackground,
+                                    animations));
         }
         return Optional.empty();
     }
 
+    @BindsOptionalOf
+    abstract ShellBackAnimationRegistry optionalBackAnimationRegistry();
 
     //
     // Bubbles (optional feature)
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 065e7b0..36d2a70 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
@@ -52,6 +52,7 @@
 import com.android.wm.shell.common.annotations.ShellAnimationThread;
 import com.android.wm.shell.common.annotations.ShellBackgroundThread;
 import com.android.wm.shell.common.annotations.ShellMainThread;
+import com.android.wm.shell.dagger.back.ShellBackAnimationModule;
 import com.android.wm.shell.dagger.pip.PipModule;
 import com.android.wm.shell.desktopmode.DesktopModeController;
 import com.android.wm.shell.desktopmode.DesktopModeStatus;
@@ -100,17 +101,19 @@
 import java.util.Optional;
 
 /**
- * Provides dependencies from {@link com.android.wm.shell}, these dependencies are only
- * accessible from components within the WM subcomponent (can be explicitly exposed to the
- * SysUIComponent, see {@link WMComponent}).
+ * Provides dependencies from {@link com.android.wm.shell}, these dependencies are only accessible
+ * from components within the WM subcomponent (can be explicitly exposed to the SysUIComponent, see
+ * {@link WMComponent}).
  *
- * This module only defines Shell dependencies for handheld SystemUI implementation.  Common
+ * <p>This module only defines Shell dependencies for handheld SystemUI implementation. Common
  * dependencies should go into {@link WMShellBaseModule}.
  */
-@Module(includes = {
-        WMShellBaseModule.class,
-        PipModule.class
-})
+@Module(
+        includes = {
+            WMShellBaseModule.class,
+            PipModule.class,
+            ShellBackAnimationModule.class,
+        })
 public abstract class WMShellModule {
 
     //
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/back/ShellBackAnimationModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/back/ShellBackAnimationModule.java
new file mode 100644
index 0000000..b34c6b2
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/back/ShellBackAnimationModule.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.dagger.back;
+
+import com.android.wm.shell.back.CrossActivityAnimation;
+import com.android.wm.shell.back.CrossTaskBackAnimation;
+import com.android.wm.shell.back.CustomizeActivityAnimation;
+import com.android.wm.shell.back.ShellBackAnimation;
+import com.android.wm.shell.back.ShellBackAnimationRegistry;
+
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+
+/** Default animation definitions for predictive back. */
+@Module
+public interface ShellBackAnimationModule {
+    /** Default animation registry */
+    @Provides
+    static ShellBackAnimationRegistry provideBackAnimationRegistry(
+            @ShellBackAnimation.CrossActivity ShellBackAnimation crossActivity,
+            @ShellBackAnimation.CrossTask ShellBackAnimation crossTask,
+            @ShellBackAnimation.CustomizeActivity ShellBackAnimation customizeActivity) {
+        return new ShellBackAnimationRegistry(
+                crossActivity,
+                crossTask,
+                customizeActivity,
+                /* defaultBackToHomeAnimation= */ null);
+    }
+
+    /** Default cross activity back animation */
+    @Binds
+    @ShellBackAnimation.CrossActivity
+    ShellBackAnimation bindCrossActivityShellBackAnimation(
+            CrossActivityAnimation crossActivityAnimation);
+
+    /** Default cross task back animation */
+    @Binds
+    @ShellBackAnimation.CrossTask
+    ShellBackAnimation provideCrossTaskShellBackAnimation(
+            CrossTaskBackAnimation crossTaskBackAnimation);
+
+    /** Default customized activity back animation */
+    @Binds
+    @ShellBackAnimation.CustomizeActivity
+    ShellBackAnimation provideCustomizeActivityShellBackAnimation(
+            CustomizeActivityAnimation customizeActivityAnimation);
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
index 1128d91..024465b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
@@ -271,8 +271,7 @@
 
         startT.apply();
 
-        mTransitions.getMainExecutor().execute(
-                () -> finishCallback.onTransitionFinished(null));
+        mTransitions.getMainExecutor().execute(() -> finishCallback.onTransitionFinished(null));
 
         return true;
     }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipAccessibilityInteractionConnection.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipAccessibilityInteractionConnection.java
index 4a06d84..8c2879e 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipAccessibilityInteractionConnection.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipAccessibilityInteractionConnection.java
@@ -383,6 +383,9 @@
         }
 
         @Override
-    public void attachAccessibilityOverlayToWindow(SurfaceControl sc) {}
+        public void attachAccessibilityOverlayToWindow(
+                SurfaceControl sc,
+                int interactionId,
+                IAccessibilityInteractionConnectionCallback callback) {}
 }
 }
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipAction.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipAction.java
index 5f6b3fe..fc0b876 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipAction.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipAction.java
@@ -77,6 +77,19 @@
         return mActionType;
     }
 
+    static String getActionTypeString(@ActionType int actionType) {
+        switch (actionType) {
+            case ACTION_FULLSCREEN: return "ACTION_FULLSCREEN";
+            case ACTION_CLOSE: return "ACTION_CLOSE";
+            case ACTION_MOVE: return "ACTION_MOVE";
+            case ACTION_EXPAND_COLLAPSE: return "ACTION_EXPAND_COLLAPSE";
+            case ACTION_CUSTOM: return "ACTION_CUSTOM";
+            case ACTION_CUSTOM_CLOSE: return "ACTION_CUSTOM_CLOSE";
+            default:
+                return "UNDEFINED";
+        }
+    }
+
     abstract void populateButton(@NonNull TvWindowMenuActionButton button, Handler mainHandler);
 
     abstract PendingIntent getPendingIntent();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipActionsProvider.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipActionsProvider.java
index 3b44f10..11c2665 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipActionsProvider.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipActionsProvider.java
@@ -56,8 +56,10 @@
     private final List<Listener> mListeners = new ArrayList<>();
     private final TvPipAction.SystemActionsHandler mSystemActionsHandler;
 
-    private final List<TvPipAction> mActionsList;
+    private final List<TvPipAction> mActionsList = new ArrayList<>();
+    private final TvPipSystemAction mFullscreenAction;
     private final TvPipSystemAction mDefaultCloseAction;
+    private final TvPipSystemAction mMoveAction;
     private final TvPipSystemAction mExpandCollapseAction;
 
     private final List<RemoteAction> mMediaActions = new ArrayList<>();
@@ -67,26 +69,27 @@
             TvPipAction.SystemActionsHandler systemActionsHandler) {
         mSystemActionsHandler = systemActionsHandler;
 
-        mActionsList = new ArrayList<>();
-        mActionsList.add(new TvPipSystemAction(ACTION_FULLSCREEN, R.string.pip_fullscreen,
+        mFullscreenAction = new TvPipSystemAction(ACTION_FULLSCREEN, R.string.pip_fullscreen,
                 R.drawable.pip_ic_fullscreen_white, ACTION_TO_FULLSCREEN, context,
-                mSystemActionsHandler));
-
+                mSystemActionsHandler);
         mDefaultCloseAction = new TvPipSystemAction(ACTION_CLOSE, R.string.pip_close,
                 R.drawable.pip_ic_close_white, ACTION_CLOSE_PIP, context, mSystemActionsHandler);
-        mActionsList.add(mDefaultCloseAction);
-
-        mActionsList.add(new TvPipSystemAction(ACTION_MOVE, R.string.pip_move,
-                R.drawable.pip_ic_move_white, ACTION_MOVE_PIP, context, mSystemActionsHandler));
-
+        mMoveAction = new TvPipSystemAction(ACTION_MOVE, R.string.pip_move,
+                R.drawable.pip_ic_move_white, ACTION_MOVE_PIP, context, mSystemActionsHandler);
         mExpandCollapseAction = new TvPipSystemAction(ACTION_EXPAND_COLLAPSE, R.string.pip_collapse,
                 R.drawable.pip_ic_collapse, ACTION_TOGGLE_EXPANDED_PIP, context,
                 mSystemActionsHandler);
-        mActionsList.add(mExpandCollapseAction);
+        initActions();
 
         pipMediaController.addActionListener(this::onMediaActionsChanged);
     }
 
+    private void initActions() {
+        mActionsList.add(mFullscreenAction);
+        mActionsList.add(mDefaultCloseAction);
+        mActionsList.add(mMoveAction);
+    }
+
     @Override
     public void executeAction(@TvPipAction.ActionType int actionType) {
         if (mSystemActionsHandler != null) {
@@ -199,6 +202,14 @@
         }
     }
 
+    void reset() {
+        mActionsList.clear();
+        mMediaActions.clear();
+        mAppActions.clear();
+
+        initActions();
+    }
+
     List<TvPipAction> getActionsList() {
         return mActionsList;
     }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipBoundsState.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipBoundsState.java
index 4757efc..d11f4d5 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipBoundsState.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipBoundsState.java
@@ -81,6 +81,7 @@
         super(context, sizeSpecSource, pipDisplayLayoutState);
         mContext = context;
         updateDefaultGravity();
+        mTvPipGravity = mDefaultGravity;
         mPreviousCollapsedGravity = mDefaultGravity;
         mIsTvExpandedPipSupported = context.getPackageManager().hasSystemFeature(
                 PackageManager.FEATURE_EXPANDED_PICTURE_IN_PICTURE);
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 02eeb2a..2482acf 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
@@ -478,6 +478,7 @@
         mActionBroadcastReceiver.unregister();
 
         mTvPipMenuController.closeMenu();
+        mTvPipActionsProvider.reset();
         mTvPipBoundsState.resetTvPipState();
         mTvPipBoundsController.reset();
         setState(STATE_NO_PIP);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java
index dc91a11..84dcd4d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.java
@@ -112,28 +112,15 @@
      */
     static final long MAX_ANIMATION_DURATION = MINIMAL_ANIMATION_DURATION + TIME_WINDOW_DURATION;
 
-    // The acceptable area ratio of foreground_icon_area/background_icon_area, if there is an
-    // icon which it's non-transparent foreground area is similar to it's background area, then
-    // do not enlarge the foreground drawable.
-    // For example, an icon with the foreground 108*108 opaque pixels and it's background
-    // also 108*108 pixels, then do not enlarge this icon if only need to show foreground icon.
-    private static final float ENLARGE_FOREGROUND_ICON_THRESHOLD = (72f * 72f) / (108f * 108f);
-
-    /**
-     * If the developer doesn't specify a background for the icon, we slightly scale it up.
-     *
-     * The background is either manually specified in the theme or the Adaptive Icon
-     * background is used if it's different from the window background.
-     */
-    private static final float NO_BACKGROUND_SCALE = 192f / 160;
     private final Context mContext;
     private final HighResIconProvider mHighResIconProvider;
-
     private int mIconSize;
     private int mDefaultIconSize;
     private int mBrandingImageWidth;
     private int mBrandingImageHeight;
     private int mMainWindowShiftLength;
+    private float mEnlargeForegroundIconThreshold;
+    private float mNoBackgroundScale;
     private int mLastPackageContextConfigHash;
     private final TransactionPool mTransactionPool;
     private final SplashScreenWindowAttrs mTmpAttrs = new SplashScreenWindowAttrs();
@@ -336,6 +323,10 @@
                 com.android.wm.shell.R.dimen.starting_surface_brand_image_height);
         mMainWindowShiftLength = mContext.getResources().getDimensionPixelSize(
                 com.android.wm.shell.R.dimen.starting_surface_exit_animation_window_shift_length);
+        mEnlargeForegroundIconThreshold = mContext.getResources().getFloat(
+                com.android.wm.shell.R.dimen.splash_icon_enlarge_foreground_threshold);
+        mNoBackgroundScale = mContext.getResources().getFloat(
+                com.android.wm.shell.R.dimen.splash_icon_no_background_scale_factor);
     }
 
     /**
@@ -604,14 +595,14 @@
                 // There is no background below the icon, so scale the icon up
                 if (mTmpAttrs.mIconBgColor == Color.TRANSPARENT
                         || mTmpAttrs.mIconBgColor == mThemeColor) {
-                    mFinalIconSize *= NO_BACKGROUND_SCALE;
+                    mFinalIconSize *= mNoBackgroundScale;
                 }
                 createIconDrawable(iconDrawable, false /* legacy */, false /* loadInDetail */);
             } else {
                 final float iconScale = (float) mIconSize / (float) mDefaultIconSize;
                 final int densityDpi = mContext.getResources().getConfiguration().densityDpi;
                 final int scaledIconDpi =
-                        (int) (0.5f + iconScale * densityDpi * NO_BACKGROUND_SCALE);
+                        (int) (0.5f + iconScale * densityDpi * mNoBackgroundScale);
                 Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "getIcon");
                 iconDrawable = mHighResIconProvider.getIcon(
                         mActivityInfo, densityDpi, scaledIconDpi);
@@ -693,8 +684,8 @@
                 // Reference AdaptiveIcon description, outer is 108 and inner is 72, so we
                 // scale by 192/160 if we only draw adaptiveIcon's foreground.
                 final float noBgScale =
-                        iconColor.mFgNonTranslucentRatio < ENLARGE_FOREGROUND_ICON_THRESHOLD
-                                ? NO_BACKGROUND_SCALE : 1f;
+                        iconColor.mFgNonTranslucentRatio < mEnlargeForegroundIconThreshold
+                                ? mNoBackgroundScale : 1f;
                 // Using AdaptiveIconDrawable here can help keep the shape consistent with the
                 // current settings.
                 mFinalIconSize = (int) (0.5f + mIconSize * noBgScale);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java
index cefbb17..e03f825 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java
@@ -165,19 +165,6 @@
         return null;
     }
 
-    /**
-     * Returns all the pending transitions for a given `taskView`.
-     * @param taskView the pending transition should be for this.
-     */
-    ArrayList<PendingTransition> findAllPending(TaskViewTaskController taskView) {
-        ArrayList<PendingTransition> list = new ArrayList<>();
-        for (int i = mPending.size() - 1; i >= 0; --i) {
-            if (mPending.get(i).mTaskView != taskView) continue;
-            list.add(mPending.get(i));
-        }
-        return list;
-    }
-
     private PendingTransition findPending(IBinder claimed) {
         for (int i = 0; i < mPending.size(); ++i) {
             if (mPending.get(i).mClaimed != claimed) continue;
@@ -273,10 +260,9 @@
             // Task view isn't visible, the bounds will next visibility update.
             return;
         }
-        PendingTransition pendingOpen = findPendingOpeningTransition(taskView);
-        if (pendingOpen != null) {
-            // There is already an opening transition in-flight, the window bounds will be
-            // set in prepareOpenAnimation (via the window crop) if needed.
+        if (hasPending()) {
+            // There is already a transition in-flight, the window bounds will be set in
+            // prepareOpenAnimation.
             return;
         }
         WindowContainerTransaction wct = new WindowContainerTransaction();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
index d978eaf..d07d2b7b6 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
@@ -346,7 +346,7 @@
                         .setFrameScale(1)
                         .setPixelFormat(PixelFormat.RGBA_8888)
                         .setChildrenOnly(true)
-                        .setAllowProtected(true)
+                        .setAllowProtected(false)
                         .setCaptureSecureLayers(true)
                         .build();
         final ScreenCapture.ScreenshotHardwareBuffer edgeBuffer =
diff --git a/libs/WindowManager/Shell/tests/flicker/Android.bp b/libs/WindowManager/Shell/tests/flicker/Android.bp
index b062fbd..dfbadae 100644
--- a/libs/WindowManager/Shell/tests/flicker/Android.bp
+++ b/libs/WindowManager/Shell/tests/flicker/Android.bp
@@ -44,10 +44,27 @@
 }
 
 filegroup {
-    name: "WMShellFlickerTestsSplitScreen-src",
+    name: "WMShellFlickerTestsSplitScreenBase-src",
+    srcs: [
+        "src/com/android/wm/shell/flicker/splitscreen/benchmark/*.kt",
+    ],
+}
+
+filegroup {
+    name: "WMShellFlickerTestsSplitScreenGroup1-src",
+    srcs: [
+        "src/com/android/wm/shell/flicker/splitscreen/A*.kt",
+        "src/com/android/wm/shell/flicker/splitscreen/B*.kt",
+        "src/com/android/wm/shell/flicker/splitscreen/C*.kt",
+        "src/com/android/wm/shell/flicker/splitscreen/D*.kt",
+        "src/com/android/wm/shell/flicker/splitscreen/E*.kt",
+    ],
+}
+
+filegroup {
+    name: "WMShellFlickerTestsSplitScreenGroup2-src",
     srcs: [
         "src/com/android/wm/shell/flicker/splitscreen/*.kt",
-        "src/com/android/wm/shell/flicker/splitscreen/benchmark/*.kt",
     ],
 }
 
@@ -122,7 +139,9 @@
     exclude_srcs: [
         ":WMShellFlickerTestsBubbles-src",
         ":WMShellFlickerTestsPip-src",
-        ":WMShellFlickerTestsSplitScreen-src",
+        ":WMShellFlickerTestsSplitScreenGroup1-src",
+        ":WMShellFlickerTestsSplitScreenGroup2-src",
+        ":WMShellFlickerTestsSplitScreenBase-src",
         ":WMShellFlickerServiceTests-src",
     ],
 }
@@ -152,14 +171,31 @@
 }
 
 android_test {
-    name: "WMShellFlickerTestsSplitScreen",
+    name: "WMShellFlickerTestsSplitScreenGroup1",
     defaults: ["WMShellFlickerTestsDefault"],
     additional_manifests: ["manifests/AndroidManifestSplitScreen.xml"],
     package_name: "com.android.wm.shell.flicker.splitscreen",
     instrumentation_target_package: "com.android.wm.shell.flicker.splitscreen",
     srcs: [
         ":WMShellFlickerTestsBase-src",
-        ":WMShellFlickerTestsSplitScreen-src",
+        ":WMShellFlickerTestsSplitScreenBase-src",
+        ":WMShellFlickerTestsSplitScreenGroup1-src",
+    ],
+}
+
+android_test {
+    name: "WMShellFlickerTestsSplitScreenGroup2",
+    defaults: ["WMShellFlickerTestsDefault"],
+    additional_manifests: ["manifests/AndroidManifestSplitScreen.xml"],
+    package_name: "com.android.wm.shell.flicker.splitscreen",
+    instrumentation_target_package: "com.android.wm.shell.flicker.splitscreen",
+    srcs: [
+        ":WMShellFlickerTestsBase-src",
+        ":WMShellFlickerTestsSplitScreenBase-src",
+        ":WMShellFlickerTestsSplitScreenGroup2-src",
+    ],
+    exclude_srcs: [
+        ":WMShellFlickerTestsSplitScreenGroup1-src",
     ],
 }
 
diff --git a/libs/WindowManager/Shell/tests/flicker/AndroidTestTemplate.xml b/libs/WindowManager/Shell/tests/flicker/AndroidTestTemplate.xml
index c8a9637..87b20ed 100644
--- a/libs/WindowManager/Shell/tests/flicker/AndroidTestTemplate.xml
+++ b/libs/WindowManager/Shell/tests/flicker/AndroidTestTemplate.xml
@@ -90,9 +90,9 @@
         <option name="directory-keys"
                 value="/data/user/0/com.android.wm.shell.flicker.bubbles/files"/>
         <option name="directory-keys"
-                value="/data/user/0/com.android.server.wm.flicker.pip/files"/>
+                value="/data/user/0/com.android.wm.shell.flicker.pip/files"/>
         <option name="directory-keys"
-                value="/data/user/0/com.android.server.wm.flicker.splitscreen/files"/>
+                value="/data/user/0/com.android.wm.shell.flicker.splitscreen/files"/>
         <option name="directory-keys"
             value="/data/user/0/com.android.server.wm.flicker.service/files"/>
         <option name="collect-on-run-ended-only" value="true"/>
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/BaseAppCompat.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/BaseAppCompat.kt
index 36acb58..77f14f1 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/BaseAppCompat.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/BaseAppCompat.kt
@@ -28,7 +28,6 @@
 import com.android.wm.shell.flicker.utils.appWindowIsVisibleAtStart
 import com.android.wm.shell.flicker.utils.appWindowKeepVisible
 import com.android.wm.shell.flicker.utils.layerKeepVisible
-
 import org.junit.Assume
 import org.junit.Before
 import org.junit.Rule
@@ -37,9 +36,7 @@
     protected val context: Context = instrumentation.context
     protected val letterboxApp = LetterboxAppHelper(instrumentation)
 
-    @JvmField
-    @Rule
-    val letterboxRule: LetterboxRule = LetterboxRule()
+    @JvmField @Rule val letterboxRule: LetterboxRule = LetterboxRule()
 
     /** {@inheritDoc} */
     override val transition: FlickerBuilder.() -> Unit
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/LetterboxRule.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/LetterboxRule.kt
index 5a1136f..744e8c2 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/LetterboxRule.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/LetterboxRule.kt
@@ -23,16 +23,14 @@
 import org.junit.runner.Description
 import org.junit.runners.model.Statement
 
-/**
- * JUnit Rule to handle letterboxStyles and states
- */
+/** JUnit Rule to handle letterboxStyles and states */
 class LetterboxRule(
-        private val withLetterboxEducationEnabled: Boolean = false,
-        private val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation(),
-        private val cmdHelper: CommandsHelper = CommandsHelper.getInstance(instrumentation)
+    private val withLetterboxEducationEnabled: Boolean = false,
+    private val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation(),
+    private val cmdHelper: CommandsHelper = CommandsHelper.getInstance(instrumentation)
 ) : TestRule {
 
-    private val execAdb: (String) -> String = {cmd -> cmdHelper.executeShellCommand(cmd)}
+    private val execAdb: (String) -> String = { cmd -> cmdHelper.executeShellCommand(cmd) }
     private lateinit var _letterboxStyle: MutableMap<String, String>
 
     val letterboxStyle: Map<String, String>
@@ -62,8 +60,7 @@
         var hasLetterboxEducationStateChanged = false
         if ("$withLetterboxEducationEnabled" != isLetterboxEducationEnabled) {
             hasLetterboxEducationStateChanged = true
-            execAdb("wm set-letterbox-style --isEducationEnabled " +
-                    withLetterboxEducationEnabled)
+            execAdb("wm set-letterbox-style --isEducationEnabled " + withLetterboxEducationEnabled)
         }
         return try {
             object : Statement() {
@@ -74,8 +71,8 @@
             }
         } finally {
             if (hasLetterboxEducationStateChanged) {
-                execAdb("wm set-letterbox-style --isEducationEnabled " +
-                        isLetterboxEducationEnabled
+                execAdb(
+                    "wm set-letterbox-style --isEducationEnabled " + isLetterboxEducationEnabled
                 )
             }
             resetLetterboxStyle()
@@ -100,9 +97,10 @@
         execAdb("wm reset-letterbox-style")
     }
 
-    private fun asInt(str: String?): Int? = try {
-        str?.toInt()
-    } catch (e: NumberFormatException) {
-        null
-    }
-}
\ No newline at end of file
+    private fun asInt(str: String?): Int? =
+        try {
+            str?.toInt()
+        } catch (e: NumberFormatException) {
+            null
+        }
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/OpenAppInSizeCompatModeTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/OpenAppInSizeCompatModeTest.kt
index 67d5718..1e5e42f 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/OpenAppInSizeCompatModeTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/OpenAppInSizeCompatModeTest.kt
@@ -66,7 +66,8 @@
      */
     @Postsubmit
     @Test
-    fun letterboxAppFocusedAtEnd() = flicker.assertEventLog { focusChanges(letterboxApp.`package`) }
+    fun letterboxAppFocusedAtEnd() =
+        flicker.assertEventLog { focusChanges(letterboxApp.packageName) }
 
     @Postsubmit
     @Test
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/OpenTransparentActivityTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/OpenTransparentActivityTest.kt
index e6ca261..2fa1ec3 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/OpenTransparentActivityTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/OpenTransparentActivityTest.kt
@@ -54,9 +54,7 @@
     /** {@inheritDoc} */
     override val transition: FlickerBuilder.() -> Unit
         get() = {
-            setup {
-                letterboxTranslucentLauncherApp.launchViaIntent(wmHelper)
-            }
+            setup { letterboxTranslucentLauncherApp.launchViaIntent(wmHelper) }
             transitions {
                 waitAndGetLaunchTransparent()?.click() ?: error("Launch Transparent not found")
             }
@@ -66,9 +64,7 @@
             }
         }
 
-    /**
-     * Checks the transparent activity is launched on top of the opaque one
-     */
+    /** Checks the transparent activity is launched on top of the opaque one */
     @Postsubmit
     @Test
     fun translucentActivityIsLaunchedOnTopOfOpaqueActivity() {
@@ -79,18 +75,14 @@
         }
     }
 
-    /**
-     * Checks that the activity is letterboxed
-     */
+    /** Checks that the activity is letterboxed */
     @Postsubmit
     @Test
     fun translucentActivityIsLetterboxed() {
         flicker.assertLayers { isVisible(ComponentNameMatcher.LETTERBOX) }
     }
 
-    /**
-     * Checks that the translucent activity inherits bounds from the opaque one.
-     */
+    /** Checks that the translucent activity inherits bounds from the opaque one. */
     @Postsubmit
     @Test
     fun translucentActivityInheritsBoundsFromOpaqueActivity() {
@@ -100,29 +92,26 @@
         }
     }
 
-    /**
-     * Checks that the translucent activity has rounded corners
-     */
+    /** Checks that the translucent activity has rounded corners */
     @Postsubmit
     @Test
     fun translucentActivityHasRoundedCorners() {
-        flicker.assertLayersEnd {
-            this.hasRoundedCorners(letterboxTranslucentApp)
-        }
+        flicker.assertLayersEnd { this.hasRoundedCorners(letterboxTranslucentApp) }
     }
 
     companion object {
         /**
          * Creates the test configurations.
          *
-         * See [FlickerTestFactory.rotationTests] for configuring screen orientation and
-         * navigation modes.
+         * See [FlickerTestFactory.rotationTests] for configuring screen orientation and navigation
+         * modes.
          */
         @Parameterized.Parameters(name = "{0}")
         @JvmStatic
         fun getParams(): Collection<FlickerTest> {
-            return LegacyFlickerTestFactory
-                .nonRotationTests(supportedRotations = listOf(Rotation.ROTATION_90))
+            return LegacyFlickerTestFactory.nonRotationTests(
+                supportedRotations = listOf(Rotation.ROTATION_90)
+            )
         }
     }
 }
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/QuickSwitchLauncherToLetterboxAppTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/QuickSwitchLauncherToLetterboxAppTest.kt
index d3f3c5b..b74aa1d 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/QuickSwitchLauncherToLetterboxAppTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/QuickSwitchLauncherToLetterboxAppTest.kt
@@ -49,8 +49,7 @@
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class QuickSwitchLauncherToLetterboxAppTest(flicker: LegacyFlickerTest) :
-    BaseAppCompat(flicker) {
+class QuickSwitchLauncherToLetterboxAppTest(flicker: LegacyFlickerTest) : BaseAppCompat(flicker) {
 
     /** {@inheritDoc} */
     override val transition: FlickerBuilder.() -> Unit = {
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/TransparentBaseAppCompat.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/TransparentBaseAppCompat.kt
index ea0392c..9792c85 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/TransparentBaseAppCompat.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/appcompat/TransparentBaseAppCompat.kt
@@ -33,20 +33,20 @@
 
 abstract class TransparentBaseAppCompat(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     protected val context: Context = instrumentation.context
-    protected val letterboxTranslucentLauncherApp = LetterboxAppHelper(
-        instrumentation,
-        launcherName = ActivityOptions.LaunchTransparentActivity.LABEL,
-        component = ActivityOptions.LaunchTransparentActivity.COMPONENT.toFlickerComponent()
-    )
-    protected val letterboxTranslucentApp = LetterboxAppHelper(
-        instrumentation,
-        launcherName = ActivityOptions.TransparentActivity.LABEL,
-        component = ActivityOptions.TransparentActivity.COMPONENT.toFlickerComponent()
-    )
+    protected val letterboxTranslucentLauncherApp =
+        LetterboxAppHelper(
+            instrumentation,
+            launcherName = ActivityOptions.LaunchTransparentActivity.LABEL,
+            component = ActivityOptions.LaunchTransparentActivity.COMPONENT.toFlickerComponent()
+        )
+    protected val letterboxTranslucentApp =
+        LetterboxAppHelper(
+            instrumentation,
+            launcherName = ActivityOptions.TransparentActivity.LABEL,
+            component = ActivityOptions.TransparentActivity.COMPONENT.toFlickerComponent()
+        )
 
-    @JvmField
-    @Rule
-    val letterboxRule: LetterboxRule = LetterboxRule()
+    @JvmField @Rule val letterboxRule: LetterboxRule = LetterboxRule()
 
     @Before
     fun before() {
@@ -54,10 +54,7 @@
     }
 
     protected fun FlickerTestData.waitAndGetLaunchTransparent(): UiObject2? =
-        device.wait(
-            Until.findObject(By.text("Launch Transparent")),
-            FIND_TIMEOUT
-        )
+        device.wait(Until.findObject(By.text("Launch Transparent")), FIND_TIMEOUT)
 
     protected fun FlickerTestData.goBack() = device.pressBack()
 }
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/BaseBubbleScreen.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/BaseBubbleScreen.kt
index 5c7d1d8..97147a3 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/BaseBubbleScreen.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/BaseBubbleScreen.kt
@@ -47,7 +47,7 @@
 
     private val uid =
         context.packageManager
-            .getApplicationInfo(testApp.`package`, PackageManager.ApplicationInfoFlags.of(0))
+            .getApplicationInfo(testApp.packageName, PackageManager.ApplicationInfoFlags.of(0))
             .uid
 
     @JvmOverloads
@@ -57,7 +57,7 @@
         return {
             setup {
                 notifyManager.setBubblesAllowed(
-                    testApp.`package`,
+                    testApp.packageName,
                     uid,
                     NotificationManager.BUBBLE_PREFERENCE_ALL
                 )
@@ -68,7 +68,7 @@
 
             teardown {
                 notifyManager.setBubblesAllowed(
-                    testApp.`package`,
+                    testApp.packageName,
                     uid,
                     NotificationManager.BUBBLE_PREFERENCE_NONE
                 )
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/ChangeActiveActivityFromBubbleTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/ChangeActiveActivityFromBubbleTest.kt
index bc565bc..9cc9fb9 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/ChangeActiveActivityFromBubbleTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/ChangeActiveActivityFromBubbleTest.kt
@@ -22,7 +22,6 @@
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
-import androidx.test.filters.RequiresDevice
 import androidx.test.uiautomator.By
 import androidx.test.uiautomator.UiObject2
 import androidx.test.uiautomator.Until
@@ -40,12 +39,10 @@
  *     Switch in different bubble notifications
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FlakyTest(bugId = 217777115)
-open class ChangeActiveActivityFromBubbleTest(flicker: LegacyFlickerTest) :
-    BaseBubbleScreen(flicker) {
+class ChangeActiveActivityFromBubbleTest(flicker: LegacyFlickerTest) : BaseBubbleScreen(flicker) {
     /** {@inheritDoc} */
     override val transition: FlickerBuilder.() -> Unit
         get() = buildTransition {
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/ChangeActiveActivityFromBubbleTestCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/ChangeActiveActivityFromBubbleTestCfArm.kt
deleted file mode 100644
index abc6b9f..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/ChangeActiveActivityFromBubbleTestCfArm.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.bubble
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-open class ChangeActiveActivityFromBubbleTestCfArm(flicker: LegacyFlickerTest) :
-    ChangeActiveActivityFromBubbleTest(flicker)
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/DragToDismissBubbleScreenTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/DragToDismissBubbleScreenTest.kt
index 3f28ae8..9ca7bf1 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/DragToDismissBubbleScreenTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/DragToDismissBubbleScreenTest.kt
@@ -20,12 +20,12 @@
 import android.graphics.Point
 import android.platform.test.annotations.Presubmit
 import android.tools.common.flicker.subject.layers.LayersTraceSubject
+import android.tools.common.traces.component.ComponentNameMatcher
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.util.DisplayMetrics
 import android.view.WindowManager
-import androidx.test.filters.RequiresDevice
 import androidx.test.uiautomator.By
 import androidx.test.uiautomator.Until
 import org.junit.Test
@@ -42,10 +42,9 @@
  *     Dismiss a bubble notification
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-open class DragToDismissBubbleScreenTest(flicker: LegacyFlickerTest) : BaseBubbleScreen(flicker) {
+class DragToDismissBubbleScreenTest(flicker: LegacyFlickerTest) : BaseBubbleScreen(flicker) {
 
     private val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
     private val displaySize = DisplayMetrics()
@@ -80,7 +79,8 @@
     override fun visibleLayersShownMoreThanOneConsecutiveEntry() {
         flicker.assertLayers {
             this.visibleLayersShownMoreThanOneConsecutiveEntry(
-                LayersTraceSubject.VISIBLE_FOR_MORE_THAN_ONE_ENTRY_IGNORE_LAYERS + listOf(testApp)
+                LayersTraceSubject.VISIBLE_FOR_MORE_THAN_ONE_ENTRY_IGNORE_LAYERS +
+                    listOf(testApp, ComponentNameMatcher(className = "Bubbles!#"))
             )
         }
     }
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/DragToDismissBubbleScreenTestCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/DragToDismissBubbleScreenTestCfArm.kt
deleted file mode 100644
index ee55eca..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/DragToDismissBubbleScreenTestCfArm.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.bubble
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-class DragToDismissBubbleScreenTestCfArm(flicker: LegacyFlickerTest) :
-    DragToDismissBubbleScreenTest(flicker)
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/OpenActivityFromBubbleTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/OpenActivityFromBubbleTest.kt
index 5085394..4959672 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/OpenActivityFromBubbleTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/OpenActivityFromBubbleTest.kt
@@ -20,7 +20,6 @@
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
-import androidx.test.filters.RequiresDevice
 import androidx.test.uiautomator.By
 import androidx.test.uiautomator.Until
 import org.junit.Test
@@ -39,10 +38,9 @@
  *     The activity for the bubble is launched
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-open class OpenActivityFromBubbleTest(flicker: LegacyFlickerTest) : BaseBubbleScreen(flicker) {
+class OpenActivityFromBubbleTest(flicker: LegacyFlickerTest) : BaseBubbleScreen(flicker) {
 
     /** {@inheritDoc} */
     override val transition: FlickerBuilder.() -> Unit
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/OpenActivityFromBubbleTestCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/OpenActivityFromBubbleTestCfArm.kt
deleted file mode 100644
index 6a46d23..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/OpenActivityFromBubbleTestCfArm.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.bubble
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-class OpenActivityFromBubbleTestCfArm(flicker: LegacyFlickerTest) :
-    OpenActivityFromBubbleTest(flicker)
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/SendBubbleNotificationTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/SendBubbleNotificationTest.kt
index a926bb7..0d95574 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/SendBubbleNotificationTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/SendBubbleNotificationTest.kt
@@ -20,7 +20,6 @@
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
-import androidx.test.filters.RequiresDevice
 import androidx.test.uiautomator.By
 import androidx.test.uiautomator.Until
 import org.junit.Test
@@ -38,10 +37,9 @@
  *     Send a bubble notification
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-open class SendBubbleNotificationTest(flicker: LegacyFlickerTest) : BaseBubbleScreen(flicker) {
+class SendBubbleNotificationTest(flicker: LegacyFlickerTest) : BaseBubbleScreen(flicker) {
 
     /** {@inheritDoc} */
     override val transition: FlickerBuilder.() -> Unit
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/SendBubbleNotificationTestCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/SendBubbleNotificationTestCfArm.kt
deleted file mode 100644
index a401cb4..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/bubble/SendBubbleNotificationTestCfArm.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.bubble
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-open class SendBubbleNotificationTestCfArm(flicker: LegacyFlickerTest) :
-    SendBubbleNotificationTest(flicker)
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
index 2f7a25e..bf686d6 100644
--- 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
@@ -16,6 +16,7 @@
 
 package com.android.wm.shell.flicker.pip
 
+import android.platform.test.annotations.FlakyTest
 import android.platform.test.annotations.Presubmit
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
@@ -72,7 +73,7 @@
         }
     }
 
-    @Presubmit
+    @FlakyTest(bugId = 293133362)
     @Test
     override fun pipLayerReduces() {
         flicker.assertLayers {
@@ -84,7 +85,7 @@
     }
 
     /** Checks that [pipApp] window is animated towards default position in right bottom corner */
-    @Presubmit
+    @FlakyTest(bugId = 255578530)
     @Test
     fun pipLayerMovesTowardsRightBottomCorner() {
         // in gestural nav the swipe makes PiP first go upwards
@@ -107,4 +108,10 @@
         Assume.assumeFalse(flicker.scenario.isGesturalNavigation)
         super.focusChanges()
     }
+
+    @FlakyTest(bugId = 289943985)
+    @Test
+    override fun visibleLayersShownMoreThanOneConsecutiveEntry() {
+        super.visibleLayersShownMoreThanOneConsecutiveEntry()
+    }
 }
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ClosePipBySwipingDownTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ClosePipBySwipingDownTest.kt
index 68bc9a2..ca28f52 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ClosePipBySwipingDownTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ClosePipBySwipingDownTest.kt
@@ -21,7 +21,6 @@
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
-import androidx.test.filters.RequiresDevice
 import org.junit.FixMethodOrder
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -49,11 +48,10 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ClosePipBySwipingDownTest(flicker: LegacyFlickerTest) : ClosePipTransition(flicker) {
+class ClosePipBySwipingDownTest(flicker: LegacyFlickerTest) : ClosePipTransition(flicker) {
     override val thisTransition: FlickerBuilder.() -> Unit = {
         transitions {
             val pipRegion = wmHelper.getWindowRegion(pipApp).bounds
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ClosePipBySwipingDownTestCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ClosePipBySwipingDownTestCfArm.kt
deleted file mode 100644
index 7a66889..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ClosePipBySwipingDownTestCfArm.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.pip
-
-import android.tools.common.Rotation
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class ClosePipBySwipingDownTestCfArm(flicker: LegacyFlickerTest) :
-    ClosePipBySwipingDownTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring repetitions, screen
-         * orientation and navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() =
-            LegacyFlickerTestFactory.nonRotationTests(
-                supportedRotations = listOf(Rotation.ROTATION_0)
-            )
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ClosePipWithDismissButtonTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ClosePipWithDismissButtonTest.kt
index dc48696..4da628c 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ClosePipWithDismissButtonTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ClosePipWithDismissButtonTest.kt
@@ -20,7 +20,6 @@
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
-import androidx.test.filters.RequiresDevice
 import org.junit.FixMethodOrder
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -49,11 +48,10 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ClosePipWithDismissButtonTest(flicker: LegacyFlickerTest) : ClosePipTransition(flicker) {
+class ClosePipWithDismissButtonTest(flicker: LegacyFlickerTest) : ClosePipTransition(flicker) {
     override val thisTransition: FlickerBuilder.() -> Unit = {
         transitions { pipApp.closePipWindow(wmHelper) }
     }
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ClosePipWithDismissButtonTestCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ClosePipWithDismissButtonTestCfArm.kt
deleted file mode 100644
index 718b14b..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ClosePipWithDismissButtonTestCfArm.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.pip
-
-import android.tools.common.Rotation
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ClosePipWithDismissButtonTestCfArm(flicker: LegacyFlickerTest) :
-    ClosePipWithDismissButtonTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring repetitions, screen
-         * orientation and navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() =
-            LegacyFlickerTestFactory.nonRotationTests(
-                supportedRotations = listOf(Rotation.ROTATION_0)
-            )
-    }
-}
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
index 5e39262..e0b18de 100644
--- 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
@@ -20,7 +20,6 @@
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
-import androidx.test.filters.RequiresDevice
 import org.junit.Assume
 import org.junit.FixMethodOrder
 import org.junit.Test
@@ -40,11 +39,10 @@
  *     Press Home button or swipe up to go Home and put [pipApp] in pip mode
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class EnterPipOnUserLeaveHintTest(flicker: LegacyFlickerTest) : EnterPipTransition(flicker) {
+class EnterPipOnUserLeaveHintTest(flicker: LegacyFlickerTest) : EnterPipTransition(flicker) {
     override val thisTransition: FlickerBuilder.() -> Unit = { transitions { tapl.goHome() } }
 
     override val defaultEnterPip: FlickerBuilder.() -> Unit = {
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTestCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTestCfArm.kt
deleted file mode 100644
index 2b3e76a..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTestCfArm.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.pip
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/** This test will fail because of b/264261596 */
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class EnterPipOnUserLeaveHintTestCfArm(flicker: LegacyFlickerTest) :
-    EnterPipOnUserLeaveHintTest(flicker)
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientation.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientation.kt
index ec35837..c003da6 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientation.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientation.kt
@@ -28,7 +28,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import android.tools.device.helpers.WindowUtils
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.entireScreenCovered
 import com.android.server.wm.flicker.helpers.FixedOrientationAppHelper
 import com.android.server.wm.flicker.testapp.ActivityOptions.Pip.ACTION_ENTER_PIP
@@ -65,11 +64,10 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class EnterPipToOtherOrientation(flicker: LegacyFlickerTest) : PipTransition(flicker) {
+class EnterPipToOtherOrientation(flicker: LegacyFlickerTest) : PipTransition(flicker) {
     private val testApp = FixedOrientationAppHelper(instrumentation)
     private val startingBounds = WindowUtils.getDisplayBounds(Rotation.ROTATION_90)
     private val endingBounds = WindowUtils.getDisplayBounds(Rotation.ROTATION_0)
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationCfArm.kt
deleted file mode 100644
index 9264219..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationCfArm.kt
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.pip
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.assertions.FlickerTest
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/** This test fails because of b/264261596 */
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class EnterPipToOtherOrientationCfArm(flicker: LegacyFlickerTest) :
-    EnterPipToOtherOrientation(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTest> {
-            return LegacyFlickerTestFactory.nonRotationTests(
-                supportedRotations = listOf(Rotation.ROTATION_0)
-            )
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTransition.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTransition.kt
index 6d20740..dfa3696 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTransition.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTransition.kt
@@ -117,7 +117,7 @@
     @Presubmit
     @Test
     open fun focusChanges() {
-        flicker.assertEventLog { this.focusChanges(pipApp.`package`, "NexusLauncherActivity") }
+        flicker.assertEventLog { this.focusChanges(pipApp.packageName, "NexusLauncherActivity") }
     }
 
     companion object {
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipViaAppUiButtonTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipViaAppUiButtonTest.kt
index 76c811c..f9efffe 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipViaAppUiButtonTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipViaAppUiButtonTest.kt
@@ -19,7 +19,6 @@
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
-import androidx.test.filters.RequiresDevice
 import org.junit.FixMethodOrder
 import org.junit.runner.RunWith
 import org.junit.runners.MethodSorters
@@ -46,7 +45,6 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipViaAppUiButtonTestCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipViaAppUiButtonTestCfArm.kt
deleted file mode 100644
index 78e8049..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipViaAppUiButtonTestCfArm.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.pip
-
-import android.tools.common.Rotation
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class EnterPipViaAppUiButtonTestCfArm(flicker: LegacyFlickerTest) :
-    EnterPipViaAppUiButtonTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring repetitions, screen
-         * orientation and navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() =
-            LegacyFlickerTestFactory.nonRotationTests(
-                supportedRotations = listOf(Rotation.ROTATION_0)
-            )
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppViaExpandButtonTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppViaExpandButtonTest.kt
index b80b748..c4e63c3 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppViaExpandButtonTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppViaExpandButtonTest.kt
@@ -19,7 +19,6 @@
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
-import androidx.test.filters.RequiresDevice
 import org.junit.FixMethodOrder
 import org.junit.runner.RunWith
 import org.junit.runners.MethodSorters
@@ -48,11 +47,10 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ExitPipToAppViaExpandButtonTest(flicker: LegacyFlickerTest) :
+class ExitPipToAppViaExpandButtonTest(flicker: LegacyFlickerTest) :
     ExitPipToAppTransition(flicker) {
     override val thisTransition: FlickerBuilder.() -> Unit = {
         setup {
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppViaExpandButtonTestCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppViaExpandButtonTestCfArm.kt
deleted file mode 100644
index e25c0d6..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppViaExpandButtonTestCfArm.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.pip
-
-import android.tools.common.Rotation
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class ExitPipToAppViaExpandButtonTestCfArm(flicker: LegacyFlickerTest) :
-    ExitPipToAppViaExpandButtonTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() =
-            LegacyFlickerTestFactory.nonRotationTests(
-                supportedRotations = listOf(Rotation.ROTATION_0)
-            )
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppViaIntentTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppViaIntentTest.kt
index f003ed8..839bbd4 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppViaIntentTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppViaIntentTest.kt
@@ -19,7 +19,6 @@
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
-import androidx.test.filters.RequiresDevice
 import org.junit.FixMethodOrder
 import org.junit.runner.RunWith
 import org.junit.runners.MethodSorters
@@ -47,11 +46,10 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ExitPipToAppViaIntentTest(flicker: LegacyFlickerTest) : ExitPipToAppTransition(flicker) {
+class ExitPipToAppViaIntentTest(flicker: LegacyFlickerTest) : ExitPipToAppTransition(flicker) {
     override val thisTransition: FlickerBuilder.() -> Unit = {
         setup {
             // launch an app behind the pip one
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppViaIntentTestCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppViaIntentTestCfArm.kt
deleted file mode 100644
index be19f3c..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppViaIntentTestCfArm.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.pip
-
-import android.tools.common.Rotation
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class ExitPipToAppViaIntentTestCfArm(flicker: LegacyFlickerTest) :
-    ExitPipToAppViaIntentTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring repetitions, screen
-         * orientation and navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() =
-            LegacyFlickerTestFactory.nonRotationTests(
-                supportedRotations = listOf(Rotation.ROTATION_0)
-            )
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnDoubleClickTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnDoubleClickTest.kt
index a1d3a11..ea67e3d 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnDoubleClickTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnDoubleClickTest.kt
@@ -23,7 +23,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import org.junit.FixMethodOrder
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -51,11 +50,10 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ExpandPipOnDoubleClickTest(flicker: LegacyFlickerTest) : PipTransition(flicker) {
+class ExpandPipOnDoubleClickTest(flicker: LegacyFlickerTest) : PipTransition(flicker) {
     override val thisTransition: FlickerBuilder.() -> Unit = {
         transitions { pipApp.doubleClickPipWindow(wmHelper) }
     }
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnDoubleClickTestTestCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnDoubleClickTestTestCfArm.kt
deleted file mode 100644
index 3095cac..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnDoubleClickTestTestCfArm.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.pip
-
-import android.tools.common.Rotation
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class ExpandPipOnDoubleClickTestTestCfArm(flicker: LegacyFlickerTest) :
-    ExpandPipOnDoubleClickTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() =
-            LegacyFlickerTestFactory.nonRotationTests(
-                supportedRotations = listOf(Rotation.ROTATION_0)
-            )
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnPinchOpenTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnPinchOpenTest.kt
index 8c8d280..0f30cef 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnPinchOpenTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnPinchOpenTest.kt
@@ -22,7 +22,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import org.junit.FixMethodOrder
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -30,11 +29,10 @@
 import org.junit.runners.Parameterized
 
 /** Test expanding a pip window via pinch out gesture. */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ExpandPipOnPinchOpenTest(flicker: LegacyFlickerTest) : PipTransition(flicker) {
+class ExpandPipOnPinchOpenTest(flicker: LegacyFlickerTest) : PipTransition(flicker) {
     override val thisTransition: FlickerBuilder.() -> Unit = {
         transitions { pipApp.pinchOpenPipWindow(wmHelper, 0.25f, 30) }
     }
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnPinchOpenTestCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnPinchOpenTestCfArm.kt
deleted file mode 100644
index 1a1ce68..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExpandPipOnPinchOpenTestCfArm.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.pip
-
-import android.tools.common.Rotation
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class ExpandPipOnPinchOpenTestCfArm(flicker: LegacyFlickerTest) :
-    ExpandPipOnPinchOpenTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() =
-            LegacyFlickerTestFactory.nonRotationTests(
-                supportedRotations = listOf(Rotation.ROTATION_0)
-            )
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipOnImeVisibilityChangeTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipOnImeVisibilityChangeTest.kt
index dffc822..c10860a 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipOnImeVisibilityChangeTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipOnImeVisibilityChangeTest.kt
@@ -25,7 +25,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import android.tools.device.helpers.WindowUtils
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.helpers.ImeAppHelper
 import com.android.server.wm.flicker.helpers.setRotation
 import org.junit.FixMethodOrder
@@ -35,11 +34,10 @@
 import org.junit.runners.Parameterized
 
 /** Test Pip launch. To run this test: `atest WMShellFlickerTests:PipKeyboardTest` */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class MovePipOnImeVisibilityChangeTest(flicker: LegacyFlickerTest) : PipTransition(flicker) {
+class MovePipOnImeVisibilityChangeTest(flicker: LegacyFlickerTest) : PipTransition(flicker) {
     private val imeApp = ImeAppHelper(instrumentation)
 
     override val thisTransition: FlickerBuilder.() -> Unit = {
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipOnImeVisibilityChangeTestCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipOnImeVisibilityChangeTestCfArm.kt
deleted file mode 100644
index 63292a4..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/MovePipOnImeVisibilityChangeTestCfArm.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.pip
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.assertions.FlickerTest
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class MovePipOnImeVisibilityChangeTestCfArm(flicker: LegacyFlickerTest) :
-    MovePipOnImeVisibilityChangeTest(flicker) {
-    companion object {
-        private const val TAG_IME_VISIBLE = "imeIsVisible"
-
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTest> {
-            return LegacyFlickerTestFactory.nonRotationTests(
-                supportedRotations = listOf(Rotation.ROTATION_0)
-            )
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipDragThenSnapTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipDragThenSnapTest.kt
index de64f78..cb5a60d 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipDragThenSnapTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipDragThenSnapTest.kt
@@ -17,6 +17,7 @@
 package com.android.wm.shell.flicker.pip
 
 import android.graphics.Rect
+import android.platform.test.annotations.FlakyTest
 import android.platform.test.annotations.Presubmit
 import android.tools.common.Rotation
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
@@ -34,6 +35,7 @@
 import org.junit.runners.Parameterized
 
 /** Test the snapping of a PIP window via dragging, releasing, and checking its final location. */
+@FlakyTest(bugId = 294993100)
 @RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ShowPipAndRotateDisplay.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ShowPipAndRotateDisplay.kt
index 0ff9cff..e588f87 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ShowPipAndRotateDisplay.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ShowPipAndRotateDisplay.kt
@@ -23,7 +23,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import android.tools.device.helpers.WindowUtils
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.helpers.SimpleAppHelper
 import com.android.server.wm.flicker.helpers.setRotation
 import org.junit.FixMethodOrder
@@ -55,11 +54,10 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ShowPipAndRotateDisplay(flicker: LegacyFlickerTest) : PipTransition(flicker) {
+class ShowPipAndRotateDisplay(flicker: LegacyFlickerTest) : PipTransition(flicker) {
     private val testApp = SimpleAppHelper(instrumentation)
     private val screenBoundsStart = WindowUtils.getDisplayBounds(flicker.scenario.startRotation)
     private val screenBoundsEnd = WindowUtils.getDisplayBounds(flicker.scenario.endRotation)
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ShowPipAndRotateDisplayCfArm.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ShowPipAndRotateDisplayCfArm.kt
deleted file mode 100644
index 2516471..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ShowPipAndRotateDisplayCfArm.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.pip
-
-import android.tools.common.flicker.assertions.FlickerTest
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class ShowPipAndRotateDisplayCfArm(flicker: LegacyFlickerTest) : ShowPipAndRotateDisplay(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring repetitions, screen
-         * orientation and navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTest> {
-            return LegacyFlickerTestFactory.rotationTests()
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/tv/PipAppHelperTv.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/tv/PipAppHelperTv.kt
index 000ae8f..c6cbcd0 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/tv/PipAppHelperTv.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/tv/PipAppHelperTv.kt
@@ -26,7 +26,7 @@
 
 /** Helper class for PIP app on AndroidTV */
 open class PipAppHelperTv(instrumentation: Instrumentation) : PipAppHelper(instrumentation) {
-    private val appSelector = By.pkg(`package`).depth(0)
+    private val appSelector = By.pkg(packageName).depth(0)
 
     val ui: UiObject2?
         get() = uiDevice.findObject(appSelector)
@@ -46,7 +46,7 @@
     }
 
     override fun clickObject(resId: String) {
-        val selector = By.res(`package`, resId)
+        val selector = By.res(packageName, resId)
         focusOnObject(selector) || error("Could not focus on `$resId` object")
         uiDevice.pressDPadCenter()
     }
@@ -68,7 +68,7 @@
     }
 
     fun waitUntilClosed(): Boolean {
-        val appSelector = By.pkg(`package`).depth(0)
+        val appSelector = By.pkg(packageName).depth(0)
         return uiDevice.wait(Until.gone(appSelector), APP_CLOSE_WAIT_TIME_MS)
     }
 
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/OWNERS b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/OWNERS
new file mode 100644
index 0000000..3ab6a1e
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/OWNERS
@@ -0,0 +1,2 @@
+# Android > Android OS & Apps > Framework (Java + Native) > Window Manager > WM Shell > Split Screen
+# Bug component: 928697
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/CopyContentInSplitGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/CopyContentInSplitGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index 566adec..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/CopyContentInSplitGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.CopyContentInSplit
-import org.junit.Test
-
-@RequiresDevice
-class CopyContentInSplitGesturalNavLandscapeBenchmark : CopyContentInSplit(Rotation.ROTATION_90) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun copyContentInSplit() = super.copyContentInSplit()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/CopyContentInSplitGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/CopyContentInSplitGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index 92b6227..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/CopyContentInSplitGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.CopyContentInSplit
-import org.junit.Test
-
-@RequiresDevice
-class CopyContentInSplitGesturalNavPortraitBenchmark : CopyContentInSplit(Rotation.ROTATION_0) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun copyContentInSplit() = super.copyContentInSplit()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DismissSplitScreenByDividerGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DismissSplitScreenByDividerGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index e6d56b5..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DismissSplitScreenByDividerGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.DismissSplitScreenByDivider
-import org.junit.Test
-
-@RequiresDevice
-class DismissSplitScreenByDividerGesturalNavLandscapeBenchmark :
-    DismissSplitScreenByDivider(Rotation.ROTATION_90) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun dismissSplitScreenByDivider() = super.dismissSplitScreenByDivider()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DismissSplitScreenByDividerGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DismissSplitScreenByDividerGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index 6752c58..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DismissSplitScreenByDividerGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.DismissSplitScreenByDivider
-import org.junit.Test
-
-@RequiresDevice
-class DismissSplitScreenByDividerGesturalNavPortraitBenchmark :
-    DismissSplitScreenByDivider(Rotation.ROTATION_0) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun dismissSplitScreenByDivider() = super.dismissSplitScreenByDivider()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DismissSplitScreenByGoHomeGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DismissSplitScreenByGoHomeGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index 7c9ab99..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DismissSplitScreenByGoHomeGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.DismissSplitScreenByGoHome
-import org.junit.Test
-
-@RequiresDevice
-class DismissSplitScreenByGoHomeGesturalNavLandscapeBenchmark :
-    DismissSplitScreenByGoHome(Rotation.ROTATION_90) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun dismissSplitScreenByGoHome() = super.dismissSplitScreenByGoHome()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DismissSplitScreenByGoHomeGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DismissSplitScreenByGoHomeGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index 4b79571..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DismissSplitScreenByGoHomeGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.DismissSplitScreenByGoHome
-import org.junit.Test
-
-@RequiresDevice
-class DismissSplitScreenByGoHomeGesturalNavPortraitBenchmark :
-    DismissSplitScreenByGoHome(Rotation.ROTATION_0) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun dismissSplitScreenByGoHome() = super.dismissSplitScreenByGoHome()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DragDividerToResizeGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DragDividerToResizeGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index 0495079..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DragDividerToResizeGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.DragDividerToResize
-import org.junit.Test
-
-@RequiresDevice
-class DragDividerToResizeGesturalNavLandscapeBenchmark : DragDividerToResize(Rotation.ROTATION_90) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun dragDividerToResize() = super.dragDividerToResize()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DragDividerToResizeGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DragDividerToResizeGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index 71ef48b..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/DragDividerToResizeGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.DragDividerToResize
-import org.junit.Test
-
-@RequiresDevice
-class DragDividerToResizeGesturalNavPortraitBenchmark : DragDividerToResize(Rotation.ROTATION_0) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun dragDividerToResize() = super.dragDividerToResize()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromAllAppsGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromAllAppsGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index c78729c..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromAllAppsGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromAllApps
-import org.junit.Test
-
-@RequiresDevice
-class EnterSplitScreenByDragFromAllAppsGesturalNavLandscapeBenchmark :
-    EnterSplitScreenByDragFromAllApps(Rotation.ROTATION_90) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun enterSplitScreenByDragFromAllApps() = super.enterSplitScreenByDragFromAllApps()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromAllAppsGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromAllAppsGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index 30bce2f6..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromAllAppsGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromAllApps
-import org.junit.Test
-
-@RequiresDevice
-class EnterSplitScreenByDragFromAllAppsGesturalNavPortraitBenchmark :
-    EnterSplitScreenByDragFromAllApps(Rotation.ROTATION_0) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun enterSplitScreenByDragFromAllApps() = super.enterSplitScreenByDragFromAllApps()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromNotificationGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromNotificationGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index b33ea7c..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromNotificationGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromNotification
-import org.junit.Test
-
-@RequiresDevice
-class EnterSplitScreenByDragFromNotificationGesturalNavLandscapeBenchmark :
-    EnterSplitScreenByDragFromNotification(Rotation.ROTATION_90) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun enterSplitScreenByDragFromNotification() =
-        super.enterSplitScreenByDragFromNotification()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromNotificationGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromNotificationGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index 07a86a5..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromNotificationGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromNotification
-import org.junit.Test
-
-@RequiresDevice
-class EnterSplitScreenByDragFromNotificationGesturalNavPortraitBenchmark :
-    EnterSplitScreenByDragFromNotification(Rotation.ROTATION_0) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun enterSplitScreenByDragFromNotification() =
-        super.enterSplitScreenByDragFromNotification()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromShortcutGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromShortcutGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index 9a1d127..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromShortcutGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromShortcut
-import org.junit.Test
-
-@RequiresDevice
-class EnterSplitScreenByDragFromShortcutGesturalNavLandscapeBenchmark :
-    EnterSplitScreenByDragFromShortcut(Rotation.ROTATION_90) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun enterSplitScreenByDragFromShortcut() = super.enterSplitScreenByDragFromShortcut()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromShortcutGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromShortcutGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index 266e268..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromShortcutGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromShortcut
-import org.junit.Test
-
-@RequiresDevice
-class EnterSplitScreenByDragFromShortcutGesturalNavPortraitBenchmark :
-    EnterSplitScreenByDragFromShortcut(Rotation.ROTATION_0) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun enterSplitScreenByDragFromShortcut() = super.enterSplitScreenByDragFromShortcut()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromTaskbarGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromTaskbarGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index 83fc30b..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromTaskbarGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromTaskbar
-import org.junit.Test
-
-@RequiresDevice
-class EnterSplitScreenByDragFromTaskbarGesturalNavLandscapeBenchmark :
-    EnterSplitScreenByDragFromTaskbar(Rotation.ROTATION_90) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun enterSplitScreenByDragFromTaskbar() = super.enterSplitScreenByDragFromTaskbar()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromTaskbarGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromTaskbarGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index b2f1929..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenByDragFromTaskbarGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromTaskbar
-import org.junit.Test
-
-@RequiresDevice
-class EnterSplitScreenByDragFromTaskbarGesturalNavPortraitBenchmark :
-    EnterSplitScreenByDragFromTaskbar(Rotation.ROTATION_0) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun enterSplitScreenByDragFromTaskbar() = super.enterSplitScreenByDragFromTaskbar()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenFromOverviewGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenFromOverviewGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index dae92dd..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenFromOverviewGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenFromOverview
-import org.junit.Test
-
-@RequiresDevice
-class EnterSplitScreenFromOverviewGesturalNavLandscapeBenchmark :
-    EnterSplitScreenFromOverview(Rotation.ROTATION_90) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun enterSplitScreenFromOverview() = super.enterSplitScreenFromOverview()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenFromOverviewGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenFromOverviewGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index 732047b..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/EnterSplitScreenFromOverviewGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenFromOverview
-import org.junit.Test
-
-@RequiresDevice
-class EnterSplitScreenFromOverviewGesturalNavPortraitBenchmark :
-    EnterSplitScreenFromOverview(Rotation.ROTATION_0) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun enterSplitScreenFromOverview() = super.enterSplitScreenFromOverview()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchAppByDoubleTapDividerGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchAppByDoubleTapDividerGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index 1de7efd..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchAppByDoubleTapDividerGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchAppByDoubleTapDivider
-import org.junit.Test
-
-@RequiresDevice
-class SwitchAppByDoubleTapDividerGesturalNavLandscapeBenchmark :
-    SwitchAppByDoubleTapDivider(Rotation.ROTATION_90) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun switchAppByDoubleTapDivider() = super.switchAppByDoubleTapDivider()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchAppByDoubleTapDividerGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchAppByDoubleTapDividerGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index 1a046aa..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchAppByDoubleTapDividerGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchAppByDoubleTapDivider
-import org.junit.Test
-
-@RequiresDevice
-class SwitchAppByDoubleTapDividerGesturalNavPortraitBenchmark :
-    SwitchAppByDoubleTapDivider(Rotation.ROTATION_0) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun switchAppByDoubleTapDivider() = super.switchAppByDoubleTapDivider()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromAnotherAppGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromAnotherAppGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index 6e88f0e..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromAnotherAppGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromAnotherApp
-import org.junit.Test
-
-@RequiresDevice
-class SwitchBackToSplitFromAnotherAppGesturalNavLandscapeBenchmark :
-    SwitchBackToSplitFromAnotherApp(Rotation.ROTATION_90) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun switchBackToSplitFromAnotherApp() = super.switchBackToSplitFromAnotherApp()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromAnotherAppGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromAnotherAppGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index d26a29c..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromAnotherAppGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromAnotherApp
-import org.junit.Test
-
-@RequiresDevice
-class SwitchBackToSplitFromAnotherAppGesturalNavPortraitBenchmark :
-    SwitchBackToSplitFromAnotherApp(Rotation.ROTATION_0) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun switchBackToSplitFromAnotherApp() = super.switchBackToSplitFromAnotherApp()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromHomeGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromHomeGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index 4a552b0..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromHomeGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromHome
-import org.junit.Test
-
-@RequiresDevice
-class SwitchBackToSplitFromHomeGesturalNavLandscapeBenchmark :
-    SwitchBackToSplitFromHome(Rotation.ROTATION_90) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun switchBackToSplitFromHome() = super.switchBackToSplitFromHome()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromHomeGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromHomeGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index b7376ea..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromHomeGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromHome
-import org.junit.Test
-
-@RequiresDevice
-class SwitchBackToSplitFromHomeGesturalNavPortraitBenchmark :
-    SwitchBackToSplitFromHome(Rotation.ROTATION_0) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun switchBackToSplitFromHome() = super.switchBackToSplitFromHome()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromRecentGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromRecentGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index b2d05e4..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromRecentGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromRecent
-import org.junit.Test
-
-@RequiresDevice
-class SwitchBackToSplitFromRecentGesturalNavLandscapeBenchmark :
-    SwitchBackToSplitFromRecent(Rotation.ROTATION_90) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun switchBackToSplitFromRecent() = super.switchBackToSplitFromRecent()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromRecentGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromRecentGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index 6de31b1..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBackToSplitFromRecentGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromRecent
-import org.junit.Test
-
-@RequiresDevice
-class SwitchBackToSplitFromRecentGesturalNavPortraitBenchmark :
-    SwitchBackToSplitFromRecent(Rotation.ROTATION_0) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun switchBackToSplitFromRecent() = super.switchBackToSplitFromRecent()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBetweenSplitPairsGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBetweenSplitPairsGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index aab18a6..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBetweenSplitPairsGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBetweenSplitPairs
-import org.junit.Test
-
-@RequiresDevice
-class SwitchBetweenSplitPairsGesturalNavLandscapeBenchmark :
-    SwitchBetweenSplitPairs(Rotation.ROTATION_90) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun switchBetweenSplitPairs() = super.switchBetweenSplitPairs()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBetweenSplitPairsGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBetweenSplitPairsGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index b074f2c..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/SwitchBetweenSplitPairsGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import android.tools.common.Rotation
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBetweenSplitPairs
-import org.junit.Test
-
-@RequiresDevice
-class SwitchBetweenSplitPairsGesturalNavPortraitBenchmark :
-    SwitchBetweenSplitPairs(Rotation.ROTATION_0) {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun switchBetweenSplitPairs() = super.switchBetweenSplitPairs()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/UnlockKeyguardToSplitScreenGesturalNavLandscapeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/UnlockKeyguardToSplitScreenGesturalNavLandscapeBenchmark.kt
deleted file mode 100644
index c402aa4..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/UnlockKeyguardToSplitScreenGesturalNavLandscapeBenchmark.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.UnlockKeyguardToSplitScreen
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.BlockJUnit4ClassRunner
-
-@RequiresDevice
-@RunWith(BlockJUnit4ClassRunner::class)
-class UnlockKeyguardToSplitScreenGesturalNavLandscapeBenchmark : UnlockKeyguardToSplitScreen() {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun unlockKeyguardToSplitScreen() = super.unlockKeyguardToSplitScreen()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/UnlockKeyguardToSplitScreenGesturalNavPortraitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/UnlockKeyguardToSplitScreenGesturalNavPortraitBenchmark.kt
deleted file mode 100644
index 840401c..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/benchmark/UnlockKeyguardToSplitScreenGesturalNavPortraitBenchmark.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.benchmark
-
-import android.platform.test.annotations.PlatinumTest
-import android.platform.test.annotations.Presubmit
-import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.UnlockKeyguardToSplitScreen
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.BlockJUnit4ClassRunner
-
-@RequiresDevice
-@RunWith(BlockJUnit4ClassRunner::class)
-class UnlockKeyguardToSplitScreenGesturalNavPortraitBenchmark : UnlockKeyguardToSplitScreen() {
-    @PlatinumTest(focusArea = "sysui")
-    @Presubmit
-    @Test
-    override fun unlockKeyguardToSplitScreen() = super.unlockKeyguardToSplitScreen()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/CopyContentInSplitGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/CopyContentInSplitGesturalNavLandscape.kt
deleted file mode 100644
index a5c5122..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/CopyContentInSplitGesturalNavLandscape.kt
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.CopyContentInSplit
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class CopyContentInSplitGesturalNavLandscape : CopyContentInSplit(Rotation.ROTATION_90) {
-    @ExpectedScenarios([]) @Test override fun copyContentInSplit() = super.copyContentInSplit()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/CopyContentInSplitGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/CopyContentInSplitGesturalNavPortrait.kt
deleted file mode 100644
index 092fb67..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/CopyContentInSplitGesturalNavPortrait.kt
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.CopyContentInSplit
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class CopyContentInSplitGesturalNavPortrait : CopyContentInSplit(Rotation.ROTATION_0) {
-    @ExpectedScenarios([]) @Test override fun copyContentInSplit() = super.copyContentInSplit()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByDividerGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByDividerGesturalNavLandscape.kt
deleted file mode 100644
index 8cb25fe..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByDividerGesturalNavLandscape.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.DismissSplitScreenByDivider
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class DismissSplitScreenByDividerGesturalNavLandscape :
-    DismissSplitScreenByDivider(Rotation.ROTATION_90) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_EXIT"])
-    @Test
-    override fun dismissSplitScreenByDivider() = super.dismissSplitScreenByDivider()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByDividerGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByDividerGesturalNavPortrait.kt
deleted file mode 100644
index fa1be63..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByDividerGesturalNavPortrait.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.DismissSplitScreenByDivider
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class DismissSplitScreenByDividerGesturalNavPortrait :
-    DismissSplitScreenByDivider(Rotation.ROTATION_0) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_EXIT"])
-    @Test
-    override fun dismissSplitScreenByDivider() = super.dismissSplitScreenByDivider()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByGoHomeGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByGoHomeGesturalNavLandscape.kt
deleted file mode 100644
index aa35237..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByGoHomeGesturalNavLandscape.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.DismissSplitScreenByGoHome
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class DismissSplitScreenByGoHomeGesturalNavLandscape :
-    DismissSplitScreenByGoHome(Rotation.ROTATION_90) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_EXIT"])
-    @Test
-    override fun dismissSplitScreenByGoHome() = super.dismissSplitScreenByGoHome()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByGoHomeGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByGoHomeGesturalNavPortrait.kt
deleted file mode 100644
index e195360..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DismissSplitScreenByGoHomeGesturalNavPortrait.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.DismissSplitScreenByGoHome
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class DismissSplitScreenByGoHomeGesturalNavPortrait :
-    DismissSplitScreenByGoHome(Rotation.ROTATION_0) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_EXIT"])
-    @Test
-    override fun dismissSplitScreenByGoHome() = super.dismissSplitScreenByGoHome()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DragDividerToResizeGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DragDividerToResizeGesturalNavLandscape.kt
deleted file mode 100644
index c1b3aad..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DragDividerToResizeGesturalNavLandscape.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.DragDividerToResize
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class DragDividerToResizeGesturalNavLandscape : DragDividerToResize(Rotation.ROTATION_90) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_RESIZE"])
-    @Test
-    override fun dragDividerToResize() = super.dragDividerToResize()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DragDividerToResizeGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DragDividerToResizeGesturalNavPortrait.kt
deleted file mode 100644
index c6e2e85..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/DragDividerToResizeGesturalNavPortrait.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.DragDividerToResize
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class DragDividerToResizeGesturalNavPortrait : DragDividerToResize(Rotation.ROTATION_0) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_RESIZE"])
-    @Test
-    override fun dragDividerToResize() = super.dragDividerToResize()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromAllAppsGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromAllAppsGesturalNavLandscape.kt
deleted file mode 100644
index 5f771c7..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromAllAppsGesturalNavLandscape.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromAllApps
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class EnterSplitScreenByDragFromAllAppsGesturalNavLandscape :
-    EnterSplitScreenByDragFromAllApps(Rotation.ROTATION_90) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_ENTER"])
-    @Test
-    override fun enterSplitScreenByDragFromAllApps() = super.enterSplitScreenByDragFromAllApps()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromAllAppsGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromAllAppsGesturalNavPortrait.kt
deleted file mode 100644
index 729a401..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromAllAppsGesturalNavPortrait.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromAllApps
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class EnterSplitScreenByDragFromAllAppsGesturalNavPortrait :
-    EnterSplitScreenByDragFromAllApps(Rotation.ROTATION_0) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_ENTER"])
-    @Test
-    override fun enterSplitScreenByDragFromAllApps() = super.enterSplitScreenByDragFromAllApps()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromNotificationGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromNotificationGesturalNavLandscape.kt
deleted file mode 100644
index 6e4cf9f..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromNotificationGesturalNavLandscape.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromNotification
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class EnterSplitScreenByDragFromNotificationGesturalNavLandscape :
-    EnterSplitScreenByDragFromNotification(Rotation.ROTATION_90) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_ENTER"])
-    @Test
-    override fun enterSplitScreenByDragFromNotification() =
-        super.enterSplitScreenByDragFromNotification()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromNotificationGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromNotificationGesturalNavPortrait.kt
deleted file mode 100644
index cc28702..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromNotificationGesturalNavPortrait.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromNotification
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class EnterSplitScreenByDragFromNotificationGesturalNavPortrait :
-    EnterSplitScreenByDragFromNotification(Rotation.ROTATION_0) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_ENTER"])
-    @Test
-    override fun enterSplitScreenByDragFromNotification() =
-        super.enterSplitScreenByDragFromNotification()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromShortcutGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromShortcutGesturalNavLandscape.kt
deleted file mode 100644
index 736604f..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromShortcutGesturalNavLandscape.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromShortcut
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class EnterSplitScreenByDragFromShortcutGesturalNavLandscape :
-    EnterSplitScreenByDragFromShortcut(Rotation.ROTATION_90) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_ENTER"])
-    @Test
-    override fun enterSplitScreenByDragFromShortcut() = super.enterSplitScreenByDragFromShortcut()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromShortcutGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromShortcutGesturalNavPortrait.kt
deleted file mode 100644
index 8df8dfa..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromShortcutGesturalNavPortrait.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromShortcut
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class EnterSplitScreenByDragFromShortcutGesturalNavPortrait :
-    EnterSplitScreenByDragFromShortcut(Rotation.ROTATION_0) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_ENTER"])
-    @Test
-    override fun enterSplitScreenByDragFromShortcut() = super.enterSplitScreenByDragFromShortcut()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromTaskbarGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromTaskbarGesturalNavLandscape.kt
deleted file mode 100644
index 378f055..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromTaskbarGesturalNavLandscape.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromTaskbar
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class EnterSplitScreenByDragFromTaskbarGesturalNavLandscape :
-    EnterSplitScreenByDragFromTaskbar(Rotation.ROTATION_90) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_ENTER"])
-    @Test
-    override fun enterSplitScreenByDragFromTaskbar() = super.enterSplitScreenByDragFromTaskbar()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromTaskbarGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromTaskbarGesturalNavPortrait.kt
deleted file mode 100644
index b33d262..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenByDragFromTaskbarGesturalNavPortrait.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromTaskbar
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class EnterSplitScreenByDragFromTaskbarGesturalNavPortrait :
-    EnterSplitScreenByDragFromTaskbar(Rotation.ROTATION_0) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_ENTER"])
-    @Test
-    override fun enterSplitScreenByDragFromTaskbar() = super.enterSplitScreenByDragFromTaskbar()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenFromOverviewGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenFromOverviewGesturalNavLandscape.kt
deleted file mode 100644
index b1d3858..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenFromOverviewGesturalNavLandscape.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenFromOverview
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class EnterSplitScreenFromOverviewGesturalNavLandscape :
-    EnterSplitScreenFromOverview(Rotation.ROTATION_90) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_ENTER"])
-    @Test
-    override fun enterSplitScreenFromOverview() = super.enterSplitScreenFromOverview()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenFromOverviewGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenFromOverviewGesturalNavPortrait.kt
deleted file mode 100644
index 6d824c7..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/EnterSplitScreenFromOverviewGesturalNavPortrait.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenFromOverview
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class EnterSplitScreenFromOverviewGesturalNavPortrait :
-    EnterSplitScreenFromOverview(Rotation.ROTATION_0) {
-
-    @ExpectedScenarios(["SPLIT_SCREEN_ENTER"])
-    @Test
-    override fun enterSplitScreenFromOverview() = super.enterSplitScreenFromOverview()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchAppByDoubleTapDividerGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchAppByDoubleTapDividerGesturalNavLandscape.kt
deleted file mode 100644
index f1d3d0c..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchAppByDoubleTapDividerGesturalNavLandscape.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchAppByDoubleTapDivider
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class SwitchAppByDoubleTapDividerGesturalNavLandscape :
-    SwitchAppByDoubleTapDivider(Rotation.ROTATION_90) {
-
-    @ExpectedScenarios([])
-    @Test
-    override fun switchAppByDoubleTapDivider() = super.switchAppByDoubleTapDivider()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchAppByDoubleTapDividerGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchAppByDoubleTapDividerGesturalNavPortrait.kt
deleted file mode 100644
index a867bac..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchAppByDoubleTapDividerGesturalNavPortrait.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchAppByDoubleTapDivider
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class SwitchAppByDoubleTapDividerGesturalNavPortrait :
-    SwitchAppByDoubleTapDivider(Rotation.ROTATION_0) {
-
-    @ExpectedScenarios([])
-    @Test
-    override fun switchAppByDoubleTapDivider() = super.switchAppByDoubleTapDivider()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromAnotherAppGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromAnotherAppGesturalNavLandscape.kt
deleted file mode 100644
index 76247ba..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromAnotherAppGesturalNavLandscape.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromAnotherApp
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class SwitchBackToSplitFromAnotherAppGesturalNavLandscape :
-    SwitchBackToSplitFromAnotherApp(Rotation.ROTATION_90) {
-
-    @ExpectedScenarios(["QUICKSWITCH"])
-    @Test
-    override fun switchBackToSplitFromAnotherApp() = super.switchBackToSplitFromAnotherApp()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromAnotherAppGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromAnotherAppGesturalNavPortrait.kt
deleted file mode 100644
index e179da8..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromAnotherAppGesturalNavPortrait.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromAnotherApp
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class SwitchBackToSplitFromAnotherAppGesturalNavPortrait :
-    SwitchBackToSplitFromAnotherApp(Rotation.ROTATION_0) {
-
-    @ExpectedScenarios(["QUICKSWITCH"])
-    @Test
-    override fun switchBackToSplitFromAnotherApp() = super.switchBackToSplitFromAnotherApp()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromHomeGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromHomeGesturalNavLandscape.kt
deleted file mode 100644
index 20f554f..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromHomeGesturalNavLandscape.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromHome
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class SwitchBackToSplitFromHomeGesturalNavLandscape :
-    SwitchBackToSplitFromHome(Rotation.ROTATION_90) {
-
-    @ExpectedScenarios(["QUICKSWITCH"])
-    @Test
-    override fun switchBackToSplitFromHome() = super.switchBackToSplitFromHome()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromHomeGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromHomeGesturalNavPortrait.kt
deleted file mode 100644
index f7776ee..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromHomeGesturalNavPortrait.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromHome
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class SwitchBackToSplitFromHomeGesturalNavPortrait :
-    SwitchBackToSplitFromHome(Rotation.ROTATION_0) {
-
-    @ExpectedScenarios(["QUICKSWITCH"])
-    @Test
-    override fun switchBackToSplitFromHome() = super.switchBackToSplitFromHome()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromRecentGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromRecentGesturalNavLandscape.kt
deleted file mode 100644
index 00f6073..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromRecentGesturalNavLandscape.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromRecent
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class SwitchBackToSplitFromRecentGesturalNavLandscape :
-    SwitchBackToSplitFromRecent(Rotation.ROTATION_90) {
-
-    @ExpectedScenarios(["QUICKSWITCH"])
-    @Test
-    override fun switchBackToSplitFromRecent() = super.switchBackToSplitFromRecent()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromRecentGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromRecentGesturalNavPortrait.kt
deleted file mode 100644
index b3340e7..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBackToSplitFromRecentGesturalNavPortrait.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromRecent
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class SwitchBackToSplitFromRecentGesturalNavPortrait :
-    SwitchBackToSplitFromRecent(Rotation.ROTATION_0) {
-
-    @ExpectedScenarios(["QUICKSWITCH"])
-    @Test
-    override fun switchBackToSplitFromRecent() = super.switchBackToSplitFromRecent()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBetweenSplitPairsGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBetweenSplitPairsGesturalNavLandscape.kt
deleted file mode 100644
index 3da61e5..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBetweenSplitPairsGesturalNavLandscape.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBetweenSplitPairs
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class SwitchBetweenSplitPairsGesturalNavLandscape : SwitchBetweenSplitPairs(Rotation.ROTATION_90) {
-
-    @ExpectedScenarios(["QUICKSWITCH"])
-    @Test
-    override fun switchBetweenSplitPairs() = super.switchBetweenSplitPairs()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBetweenSplitPairsGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBetweenSplitPairsGesturalNavPortrait.kt
deleted file mode 100644
index 627ae18..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/SwitchBetweenSplitPairsGesturalNavPortrait.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.Rotation
-import android.tools.common.flicker.FlickerConfig
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.common.flicker.annotation.FlickerConfigProvider
-import android.tools.common.flicker.config.FlickerConfig
-import android.tools.common.flicker.config.FlickerServiceConfig
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBetweenSplitPairs
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class SwitchBetweenSplitPairsGesturalNavPortrait : SwitchBetweenSplitPairs(Rotation.ROTATION_0) {
-
-    @ExpectedScenarios(["QUICKSWITCH"])
-    @Test
-    override fun switchBetweenSplitPairs() = super.switchBetweenSplitPairs()
-
-    companion object {
-        @JvmStatic
-        @FlickerConfigProvider
-        fun flickerConfigProvider(): FlickerConfig =
-            FlickerConfig().use(FlickerServiceConfig.DEFAULT)
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/UnlockKeyguardToSplitScreenGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/UnlockKeyguardToSplitScreenGesturalNavLandscape.kt
deleted file mode 100644
index 7cbc1c3..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/UnlockKeyguardToSplitScreenGesturalNavLandscape.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.UnlockKeyguardToSplitScreen
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class UnlockKeyguardToSplitScreenGesturalNavLandscape : UnlockKeyguardToSplitScreen() {
-
-    @ExpectedScenarios(["QUICKSWITCH"])
-    @Test
-    override fun unlockKeyguardToSplitScreen() = super.unlockKeyguardToSplitScreen()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/UnlockKeyguardToSplitScreenGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/UnlockKeyguardToSplitScreenGesturalNavPortrait.kt
deleted file mode 100644
index 2eb81e0..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/flicker/UnlockKeyguardToSplitScreenGesturalNavPortrait.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.service.splitscreen.flicker
-
-import android.tools.common.flicker.annotation.ExpectedScenarios
-import android.tools.device.flicker.junit.FlickerServiceJUnit4ClassRunner
-import com.android.wm.shell.flicker.service.splitscreen.scenarios.UnlockKeyguardToSplitScreen
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(FlickerServiceJUnit4ClassRunner::class)
-class UnlockKeyguardToSplitScreenGesturalNavPortrait : UnlockKeyguardToSplitScreen() {
-
-    @ExpectedScenarios(["QUICKSWITCH"])
-    @Test
-    override fun unlockKeyguardToSplitScreen() = super.unlockKeyguardToSplitScreen()
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/CopyContentInSplitGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/CopyContentInSplitGesturalNavLandscape.kt
new file mode 100644
index 0000000..e37d806
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/CopyContentInSplitGesturalNavLandscape.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.CopyContentInSplit
+import org.junit.Test
+
+open class CopyContentInSplitGesturalNavLandscape : CopyContentInSplit(Rotation.ROTATION_90) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun copyContentInSplit() = super.copyContentInSplit()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/CopyContentInSplitGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/CopyContentInSplitGesturalNavPortrait.kt
new file mode 100644
index 0000000..2a50912
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/CopyContentInSplitGesturalNavPortrait.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.CopyContentInSplit
+import org.junit.Test
+
+open class CopyContentInSplitGesturalNavPortrait : CopyContentInSplit(Rotation.ROTATION_0) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun copyContentInSplit() = super.copyContentInSplit()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DismissSplitScreenByDividerGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DismissSplitScreenByDividerGesturalNavLandscape.kt
new file mode 100644
index 0000000..d5da1a8
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DismissSplitScreenByDividerGesturalNavLandscape.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.DismissSplitScreenByDivider
+import org.junit.Test
+
+open class DismissSplitScreenByDividerGesturalNavLandscape :
+    DismissSplitScreenByDivider(Rotation.ROTATION_90) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun dismissSplitScreenByDivider() = super.dismissSplitScreenByDivider()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DismissSplitScreenByDividerGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DismissSplitScreenByDividerGesturalNavPortrait.kt
new file mode 100644
index 0000000..7fdcb9b
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DismissSplitScreenByDividerGesturalNavPortrait.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.DismissSplitScreenByDivider
+import org.junit.Test
+
+open class DismissSplitScreenByDividerGesturalNavPortrait :
+    DismissSplitScreenByDivider(Rotation.ROTATION_0) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun dismissSplitScreenByDivider() = super.dismissSplitScreenByDivider()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DismissSplitScreenByGoHomeGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DismissSplitScreenByGoHomeGesturalNavLandscape.kt
new file mode 100644
index 0000000..308e954
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DismissSplitScreenByGoHomeGesturalNavLandscape.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.DismissSplitScreenByGoHome
+import org.junit.Test
+
+open class DismissSplitScreenByGoHomeGesturalNavLandscape :
+    DismissSplitScreenByGoHome(Rotation.ROTATION_90) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun dismissSplitScreenByGoHome() = super.dismissSplitScreenByGoHome()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DismissSplitScreenByGoHomeGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DismissSplitScreenByGoHomeGesturalNavPortrait.kt
new file mode 100644
index 0000000..39e75bd
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DismissSplitScreenByGoHomeGesturalNavPortrait.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.DismissSplitScreenByGoHome
+import org.junit.Test
+
+open class DismissSplitScreenByGoHomeGesturalNavPortrait :
+    DismissSplitScreenByGoHome(Rotation.ROTATION_0) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun dismissSplitScreenByGoHome() = super.dismissSplitScreenByGoHome()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DragDividerToResizeGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DragDividerToResizeGesturalNavLandscape.kt
new file mode 100644
index 0000000..e18da17
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DragDividerToResizeGesturalNavLandscape.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.DragDividerToResize
+import org.junit.Test
+
+open class DragDividerToResizeGesturalNavLandscape : DragDividerToResize(Rotation.ROTATION_90) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun dragDividerToResize() = super.dragDividerToResize()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DragDividerToResizeGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DragDividerToResizeGesturalNavPortrait.kt
new file mode 100644
index 0000000..00d60e7
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/DragDividerToResizeGesturalNavPortrait.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.DragDividerToResize
+import org.junit.Test
+
+open class DragDividerToResizeGesturalNavPortrait : DragDividerToResize(Rotation.ROTATION_0) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun dragDividerToResize() = super.dragDividerToResize()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromAllAppsGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromAllAppsGesturalNavLandscape.kt
new file mode 100644
index 0000000..d7efbc8
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromAllAppsGesturalNavLandscape.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromAllApps
+import org.junit.Test
+
+open class EnterSplitScreenByDragFromAllAppsGesturalNavLandscape :
+    EnterSplitScreenByDragFromAllApps(Rotation.ROTATION_90) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun enterSplitScreenByDragFromAllApps() = super.enterSplitScreenByDragFromAllApps()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromAllAppsGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromAllAppsGesturalNavPortrait.kt
new file mode 100644
index 0000000..4eece3f
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromAllAppsGesturalNavPortrait.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromAllApps
+import org.junit.Test
+
+open class EnterSplitScreenByDragFromAllAppsGesturalNavPortrait :
+    EnterSplitScreenByDragFromAllApps(Rotation.ROTATION_0) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun enterSplitScreenByDragFromAllApps() = super.enterSplitScreenByDragFromAllApps()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromNotificationGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromNotificationGesturalNavLandscape.kt
new file mode 100644
index 0000000..d96b056
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromNotificationGesturalNavLandscape.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromNotification
+import org.junit.Test
+
+open class EnterSplitScreenByDragFromNotificationGesturalNavLandscape :
+    EnterSplitScreenByDragFromNotification(Rotation.ROTATION_90) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun enterSplitScreenByDragFromNotification() =
+        super.enterSplitScreenByDragFromNotification()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromNotificationGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromNotificationGesturalNavPortrait.kt
new file mode 100644
index 0000000..809b690
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromNotificationGesturalNavPortrait.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromNotification
+import org.junit.Test
+
+open class EnterSplitScreenByDragFromNotificationGesturalNavPortrait :
+    EnterSplitScreenByDragFromNotification(Rotation.ROTATION_0) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun enterSplitScreenByDragFromNotification() =
+        super.enterSplitScreenByDragFromNotification()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromShortcutGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromShortcutGesturalNavLandscape.kt
new file mode 100644
index 0000000..bbdf2d7
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromShortcutGesturalNavLandscape.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromShortcut
+import org.junit.Test
+
+open class EnterSplitScreenByDragFromShortcutGesturalNavLandscape :
+    EnterSplitScreenByDragFromShortcut(Rotation.ROTATION_90) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun enterSplitScreenByDragFromShortcut() = super.enterSplitScreenByDragFromShortcut()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromShortcutGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromShortcutGesturalNavPortrait.kt
new file mode 100644
index 0000000..5c29fd8
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromShortcutGesturalNavPortrait.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromShortcut
+import org.junit.Test
+
+open class EnterSplitScreenByDragFromShortcutGesturalNavPortrait :
+    EnterSplitScreenByDragFromShortcut(Rotation.ROTATION_0) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun enterSplitScreenByDragFromShortcut() = super.enterSplitScreenByDragFromShortcut()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromTaskbarGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromTaskbarGesturalNavLandscape.kt
new file mode 100644
index 0000000..a7398eb
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromTaskbarGesturalNavLandscape.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromTaskbar
+import org.junit.Test
+
+open class EnterSplitScreenByDragFromTaskbarGesturalNavLandscape :
+    EnterSplitScreenByDragFromTaskbar(Rotation.ROTATION_90) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun enterSplitScreenByDragFromTaskbar() = super.enterSplitScreenByDragFromTaskbar()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromTaskbarGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromTaskbarGesturalNavPortrait.kt
new file mode 100644
index 0000000..eae88ad
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenByDragFromTaskbarGesturalNavPortrait.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenByDragFromTaskbar
+import org.junit.Test
+
+open class EnterSplitScreenByDragFromTaskbarGesturalNavPortrait :
+    EnterSplitScreenByDragFromTaskbar(Rotation.ROTATION_0) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun enterSplitScreenByDragFromTaskbar() = super.enterSplitScreenByDragFromTaskbar()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenFromOverviewGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenFromOverviewGesturalNavLandscape.kt
new file mode 100644
index 0000000..7e8ee04
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenFromOverviewGesturalNavLandscape.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenFromOverview
+import org.junit.Test
+
+open class EnterSplitScreenFromOverviewGesturalNavLandscape :
+    EnterSplitScreenFromOverview(Rotation.ROTATION_90) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun enterSplitScreenFromOverview() = super.enterSplitScreenFromOverview()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenFromOverviewGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenFromOverviewGesturalNavPortrait.kt
new file mode 100644
index 0000000..9295c33
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/EnterSplitScreenFromOverviewGesturalNavPortrait.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.EnterSplitScreenFromOverview
+import org.junit.Test
+
+open class EnterSplitScreenFromOverviewGesturalNavPortrait :
+    EnterSplitScreenFromOverview(Rotation.ROTATION_0) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun enterSplitScreenFromOverview() = super.enterSplitScreenFromOverview()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchAppByDoubleTapDividerGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchAppByDoubleTapDividerGesturalNavLandscape.kt
new file mode 100644
index 0000000..4b59e9f
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchAppByDoubleTapDividerGesturalNavLandscape.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchAppByDoubleTapDivider
+import org.junit.Test
+
+open class SwitchAppByDoubleTapDividerGesturalNavLandscape :
+    SwitchAppByDoubleTapDivider(Rotation.ROTATION_90) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun switchAppByDoubleTapDivider() = super.switchAppByDoubleTapDivider()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchAppByDoubleTapDividerGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchAppByDoubleTapDividerGesturalNavPortrait.kt
new file mode 100644
index 0000000..5ff36d4
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchAppByDoubleTapDividerGesturalNavPortrait.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchAppByDoubleTapDivider
+import org.junit.Test
+
+open class SwitchAppByDoubleTapDividerGesturalNavPortrait :
+    SwitchAppByDoubleTapDivider(Rotation.ROTATION_0) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun switchAppByDoubleTapDivider() = super.switchAppByDoubleTapDivider()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromAnotherAppGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromAnotherAppGesturalNavLandscape.kt
new file mode 100644
index 0000000..c0cb721
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromAnotherAppGesturalNavLandscape.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromAnotherApp
+import org.junit.Test
+
+open class SwitchBackToSplitFromAnotherAppGesturalNavLandscape :
+    SwitchBackToSplitFromAnotherApp(Rotation.ROTATION_90) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun switchBackToSplitFromAnotherApp() = super.switchBackToSplitFromAnotherApp()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromAnotherAppGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromAnotherAppGesturalNavPortrait.kt
new file mode 100644
index 0000000..8c14088
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromAnotherAppGesturalNavPortrait.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromAnotherApp
+import org.junit.Test
+
+open class SwitchBackToSplitFromAnotherAppGesturalNavPortrait :
+    SwitchBackToSplitFromAnotherApp(Rotation.ROTATION_0) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun switchBackToSplitFromAnotherApp() = super.switchBackToSplitFromAnotherApp()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromHomeGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromHomeGesturalNavLandscape.kt
new file mode 100644
index 0000000..7b6614b
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromHomeGesturalNavLandscape.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromHome
+import org.junit.Test
+
+open class SwitchBackToSplitFromHomeGesturalNavLandscape :
+    SwitchBackToSplitFromHome(Rotation.ROTATION_90) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun switchBackToSplitFromHome() = super.switchBackToSplitFromHome()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromHomeGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromHomeGesturalNavPortrait.kt
new file mode 100644
index 0000000..5df5be9
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromHomeGesturalNavPortrait.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromHome
+import org.junit.Test
+
+open class SwitchBackToSplitFromHomeGesturalNavPortrait :
+    SwitchBackToSplitFromHome(Rotation.ROTATION_0) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun switchBackToSplitFromHome() = super.switchBackToSplitFromHome()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromRecentGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromRecentGesturalNavLandscape.kt
new file mode 100644
index 0000000..9d63003
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromRecentGesturalNavLandscape.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromRecent
+import org.junit.Test
+
+open class SwitchBackToSplitFromRecentGesturalNavLandscape :
+    SwitchBackToSplitFromRecent(Rotation.ROTATION_90) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun switchBackToSplitFromRecent() = super.switchBackToSplitFromRecent()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromRecentGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromRecentGesturalNavPortrait.kt
new file mode 100644
index 0000000..9fa04b2
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBackToSplitFromRecentGesturalNavPortrait.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBackToSplitFromRecent
+import org.junit.Test
+
+open class SwitchBackToSplitFromRecentGesturalNavPortrait :
+    SwitchBackToSplitFromRecent(Rotation.ROTATION_0) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun switchBackToSplitFromRecent() = super.switchBackToSplitFromRecent()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBetweenSplitPairsGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBetweenSplitPairsGesturalNavLandscape.kt
new file mode 100644
index 0000000..9386aa2
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBetweenSplitPairsGesturalNavLandscape.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBetweenSplitPairs
+import org.junit.Test
+
+open class SwitchBetweenSplitPairsGesturalNavLandscape :
+    SwitchBetweenSplitPairs(Rotation.ROTATION_90) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun switchBetweenSplitPairs() = super.switchBetweenSplitPairs()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBetweenSplitPairsGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBetweenSplitPairsGesturalNavPortrait.kt
new file mode 100644
index 0000000..5ef2167
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/SwitchBetweenSplitPairsGesturalNavPortrait.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import android.tools.common.Rotation
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.SwitchBetweenSplitPairs
+import org.junit.Test
+
+open class SwitchBetweenSplitPairsGesturalNavPortrait :
+    SwitchBetweenSplitPairs(Rotation.ROTATION_0) {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun switchBetweenSplitPairs() = super.switchBetweenSplitPairs()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/UnlockKeyguardToSplitScreenGesturalNavLandscape.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/UnlockKeyguardToSplitScreenGesturalNavLandscape.kt
new file mode 100644
index 0000000..9caab9b
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/UnlockKeyguardToSplitScreenGesturalNavLandscape.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.UnlockKeyguardToSplitScreen
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.BlockJUnit4ClassRunner
+
+@RunWith(BlockJUnit4ClassRunner::class)
+open class UnlockKeyguardToSplitScreenGesturalNavLandscape : UnlockKeyguardToSplitScreen() {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun unlockKeyguardToSplitScreen() = super.unlockKeyguardToSplitScreen()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/UnlockKeyguardToSplitScreenGesturalNavPortrait.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/UnlockKeyguardToSplitScreenGesturalNavPortrait.kt
new file mode 100644
index 0000000..bf484e5
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/platinum/UnlockKeyguardToSplitScreenGesturalNavPortrait.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.splitscreen.platinum
+
+import android.platform.test.annotations.PlatinumTest
+import android.platform.test.annotations.Presubmit
+import com.android.wm.shell.flicker.service.splitscreen.scenarios.UnlockKeyguardToSplitScreen
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.BlockJUnit4ClassRunner
+
+@RunWith(BlockJUnit4ClassRunner::class)
+open class UnlockKeyguardToSplitScreenGesturalNavPortrait : UnlockKeyguardToSplitScreen() {
+    @PlatinumTest(focusArea = "sysui")
+    @Presubmit
+    @Test
+    override fun unlockKeyguardToSplitScreen() = super.unlockKeyguardToSplitScreen()
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromAllApps.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromAllApps.kt
index 369bdfc..9b43816 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromAllApps.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromAllApps.kt
@@ -26,6 +26,7 @@
 import com.android.wm.shell.flicker.service.Utils
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.After
+import org.junit.Assume
 import org.junit.Before
 import org.junit.Ignore
 import org.junit.Rule
@@ -46,6 +47,8 @@
 
     @Before
     fun setup() {
+        Assume.assumeTrue(tapl.isTablet)
+
         tapl.setEnableRotation(true)
         tapl.setExpectedRotation(rotation.value)
 
@@ -58,7 +61,7 @@
         tapl.launchedAppState.taskbar
             .openAllApps()
             .getAppIcon(secondaryApp.appName)
-            .dragToSplitscreen(secondaryApp.`package`, primaryApp.`package`)
+            .dragToSplitscreen(secondaryApp.packageName, primaryApp.packageName)
         SplitScreenUtils.waitForSplitComplete(wmHelper, primaryApp, secondaryApp)
     }
 
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromNotification.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromNotification.kt
index 776c397..50151f1 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromNotification.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromNotification.kt
@@ -26,6 +26,7 @@
 import com.android.wm.shell.flicker.service.Utils
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.After
+import org.junit.Assume
 import org.junit.Before
 import org.junit.Ignore
 import org.junit.Rule
@@ -47,6 +48,8 @@
 
     @Before
     fun setup() {
+        Assume.assumeTrue(tapl.isTablet)
+
         tapl.setEnableRotation(true)
         tapl.setExpectedRotation(rotation.value)
 
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromShortcut.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromShortcut.kt
index 5d67dc7..76fbf60 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromShortcut.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromShortcut.kt
@@ -63,7 +63,7 @@
             .getAppIcon(secondaryApp.appName)
             .openDeepShortcutMenu()
             .getMenuItem("Split Screen Secondary Activity")
-            .dragToSplitscreen(secondaryApp.`package`, primaryApp.`package`)
+            .dragToSplitscreen(secondaryApp.packageName, primaryApp.packageName)
         SplitScreenUtils.waitForSplitComplete(wmHelper, primaryApp, secondaryApp)
 
         // TODO: Do we want this check in here? Add to the other tests?
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromTaskbar.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromTaskbar.kt
index 5bbb42f..f8e43f1 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromTaskbar.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/EnterSplitScreenByDragFromTaskbar.kt
@@ -26,6 +26,7 @@
 import com.android.wm.shell.flicker.service.Utils
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.After
+import org.junit.Assume
 import org.junit.Before
 import org.junit.Ignore
 import org.junit.Rule
@@ -46,6 +47,8 @@
 
     @Before
     fun setup() {
+        Assume.assumeTrue(tapl.isTablet)
+
         tapl.setEnableRotation(true)
         tapl.setExpectedRotation(rotation.value)
 
@@ -58,7 +61,7 @@
     open fun enterSplitScreenByDragFromTaskbar() {
         tapl.launchedAppState.taskbar
             .getAppIcon(secondaryApp.appName)
-            .dragToSplitscreen(secondaryApp.`package`, primaryApp.`package`)
+            .dragToSplitscreen(secondaryApp.packageName, primaryApp.packageName)
         SplitScreenUtils.waitForSplitComplete(wmHelper, primaryApp, secondaryApp)
     }
 
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/SwitchBackToSplitFromRecent.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/SwitchBackToSplitFromRecent.kt
index bf4c381..3cc5df0 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/SwitchBackToSplitFromRecent.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/service/splitscreen/scenarios/SwitchBackToSplitFromRecent.kt
@@ -48,6 +48,7 @@
     fun setup() {
         tapl.setEnableRotation(true)
         tapl.setExpectedRotation(rotation.value)
+        tapl.workspace.switchToOverview().dismissAllTasks()
 
         SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp)
 
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DragDividerToResize.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DragDividerToResize.kt
index ca9c130..cc3b783 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DragDividerToResize.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/DragDividerToResize.kt
@@ -57,7 +57,7 @@
     @Test
     fun splitScreenDividerKeepVisible() = flicker.layerKeepVisible(SPLIT_SCREEN_DIVIDER_COMPONENT)
 
-    @Presubmit
+    @FlakyTest(bugId = 291678271)
     @Test
     fun primaryAppLayerVisibilityChanges() {
         flicker.assertLayers {
@@ -69,7 +69,7 @@
         }
     }
 
-    @Presubmit
+    @FlakyTest(bugId = 291678271)
     @Test
     fun secondaryAppLayerVisibilityChanges() {
         flicker.assertLayers {
@@ -87,7 +87,7 @@
     @Test
     fun secondaryAppWindowKeepVisible() = flicker.appWindowKeepVisible(secondaryApp)
 
-    @FlakyTest(bugId = 245472831)
+    @FlakyTest(bugId = 291678271)
     @Test
     fun primaryAppBoundsChanges() {
         flicker.splitAppLayerBoundsChanges(
@@ -97,7 +97,7 @@
         )
     }
 
-    @Presubmit
+    @FlakyTest(bugId = 291678271)
     @Test
     fun secondaryAppBoundsChanges() =
         flicker.splitAppLayerBoundsChanges(
@@ -106,6 +106,12 @@
             portraitPosTop = true
         )
 
+    @FlakyTest(bugId = 291678271)
+    @Test
+    override fun visibleLayersShownMoreThanOneConsecutiveEntry() {
+        super.visibleLayersShownMoreThanOneConsecutiveEntry()
+    }
+
     companion object {
         @Parameterized.Parameters(name = "{0}")
         @JvmStatic
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/OWNERS b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/OWNERS
new file mode 100644
index 0000000..3ab6a1e
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/OWNERS
@@ -0,0 +1,2 @@
+# Android > Android OS & Apps > Framework (Java + Native) > Window Manager > WM Shell > Split Screen
+# Bug component: 928697
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
deleted file mode 100644
index 7ce995a..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenBase.kt
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.splitscreen
-
-import android.content.Context
-import android.tools.device.flicker.legacy.FlickerBuilder
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import com.android.server.wm.flicker.helpers.setRotation
-import com.android.wm.shell.flicker.BaseBenchmarkTest
-import com.android.wm.shell.flicker.utils.SplitScreenUtils
-
-abstract class SplitScreenBase(flicker: LegacyFlickerTest) : BaseBenchmarkTest(flicker) {
-    protected val context: Context = instrumentation.context
-    protected val primaryApp = SplitScreenUtils.getPrimary(instrumentation)
-    protected val secondaryApp = SplitScreenUtils.getSecondary(instrumentation)
-
-    protected open val defaultSetup: FlickerBuilder.() -> Unit = {
-        setup {
-            tapl.setEnableRotation(true)
-            setRotation(flicker.scenario.startRotation)
-            tapl.setExpectedRotation(flicker.scenario.startRotation.value)
-            tapl.workspace.switchToOverview().dismissAllTasks()
-        }
-    }
-
-    protected open val defaultTeardown: FlickerBuilder.() -> Unit = {
-        teardown {
-            primaryApp.exit(wmHelper)
-            secondaryApp.exit(wmHelper)
-        }
-    }
-
-    protected open val withoutTracing: FlickerBuilder.() -> Unit = {
-        withoutLayerTracing()
-        withoutWindowManagerTracing()
-        withoutTransitionTracing()
-        withoutTransactionsTracing()
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBetweenSplitPairsNoPip.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBetweenSplitPairsNoPip.kt
new file mode 100644
index 0000000..e59ed64
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SwitchBetweenSplitPairsNoPip.kt
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.splitscreen
+
+import android.platform.test.annotations.Presubmit
+import android.tools.common.NavBar
+import android.tools.common.traces.component.ComponentNameMatcher
+import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
+import android.tools.device.flicker.legacy.FlickerBuilder
+import android.tools.device.flicker.legacy.LegacyFlickerTest
+import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
+import androidx.test.filters.RequiresDevice
+import com.android.server.wm.flicker.helpers.PipAppHelper
+import com.android.wm.shell.flicker.splitscreen.benchmark.SplitScreenBase
+import com.android.wm.shell.flicker.utils.SplitScreenUtils
+import com.android.wm.shell.flicker.utils.layerBecomesInvisible
+import com.android.wm.shell.flicker.utils.splitAppLayerBoundsIsVisibleAtEnd
+import com.android.wm.shell.flicker.utils.splitAppLayerBoundsSnapToDivider
+import org.junit.FixMethodOrder
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.MethodSorters
+import org.junit.runners.Parameterized
+
+/**
+ * Test quick switch between two split pairs.
+ *
+ * To run this test: `atest WMShellFlickerTestsSplitScreen:SwitchBetweenSplitPairsNoPip`
+ */
+@RequiresDevice
+@RunWith(Parameterized::class)
+@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+class SwitchBetweenSplitPairsNoPip(override val flicker: LegacyFlickerTest) :
+    SplitScreenBase(flicker) {
+
+    val thirdApp = SplitScreenUtils.getSendNotification(instrumentation)
+    val pipApp = PipAppHelper(instrumentation)
+
+    override val transition: FlickerBuilder.() -> Unit
+        get() = {
+            defaultSetup(this)
+            defaultTeardown(this)
+            thisTransition(this)
+        }
+
+    val thisTransition: FlickerBuilder.() -> Unit
+        get() = {
+            setup {
+                tapl.goHome()
+                SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp)
+                SplitScreenUtils.enterSplit(wmHelper, tapl, device, thirdApp, pipApp)
+                pipApp.enableAutoEnterForPipActivity()
+                SplitScreenUtils.waitForSplitComplete(wmHelper, thirdApp, pipApp)
+            }
+            transitions {
+                tapl.launchedAppState.quickSwitchToPreviousApp()
+                SplitScreenUtils.waitForSplitComplete(wmHelper, primaryApp, secondaryApp)
+            }
+            teardown {
+                pipApp.exit(wmHelper)
+                thirdApp.exit(wmHelper)
+            }
+        }
+
+    /** Checks that [pipApp] window won't enter pip */
+    @Presubmit
+    @Test
+    fun notEnterPip() {
+        flicker.assertWm { isNotPinned(pipApp) }
+    }
+
+    /** Checks the [pipApp] task did not reshow during transition. */
+    @Presubmit
+    @Test
+    fun app1WindowIsVisibleOnceApp2WindowIsInvisible() {
+        flicker.assertLayers {
+            this.isVisible(pipApp)
+                .then()
+                .isVisible(ComponentNameMatcher.LAUNCHER, isOptional = true)
+                .then()
+                .isVisible(ComponentNameMatcher.SNAPSHOT, isOptional = true)
+                .then()
+                .isInvisible(pipApp)
+                .isVisible(secondaryApp)
+        }
+    }
+
+    @Presubmit
+    @Test
+    fun primaryAppBoundsIsVisibleAtEnd() =
+        flicker.splitAppLayerBoundsIsVisibleAtEnd(
+            primaryApp,
+            landscapePosLeft = tapl.isTablet,
+            portraitPosTop = false
+        )
+
+    @Presubmit
+    @Test
+    fun secondaryAppBoundsIsVisibleAtEnd() =
+        flicker.splitAppLayerBoundsIsVisibleAtEnd(
+            secondaryApp,
+            landscapePosLeft = !tapl.isTablet,
+            portraitPosTop = true
+        )
+
+    /** Checks the [pipApp] task become invisible after transition finish. */
+    @Presubmit @Test fun pipAppLayerBecomesInvisible() = flicker.layerBecomesInvisible(pipApp)
+
+    /** Checks the [pipApp] task is in split screen bounds when transition start. */
+    @Presubmit
+    @Test
+    fun pipAppBoundsIsVisibleAtBegin() =
+        flicker.assertLayersStart {
+            this.splitAppLayerBoundsSnapToDivider(
+                pipApp,
+                landscapePosLeft = !tapl.isTablet,
+                portraitPosTop = true,
+                flicker.scenario.startRotation
+            )
+        }
+
+    companion object {
+        @Parameterized.Parameters(name = "{0}")
+        @JvmStatic
+        fun getParams() =
+            LegacyFlickerTestFactory.nonRotationTests(
+                supportedNavigationModes = listOf(NavBar.MODE_GESTURAL)
+            )
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/UnlockKeyguardToSplitScreen.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/UnlockKeyguardToSplitScreen.kt
index 851391d..4c44028 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/UnlockKeyguardToSplitScreen.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/UnlockKeyguardToSplitScreen.kt
@@ -16,9 +16,13 @@
 
 package com.android.wm.shell.flicker.splitscreen
 
+import android.platform.test.annotations.FlakyTest
 import android.platform.test.annotations.Postsubmit
+import android.platform.test.annotations.Presubmit
 import android.tools.common.NavBar
+import android.tools.common.flicker.subject.layers.LayersTraceSubject
 import android.tools.common.flicker.subject.region.RegionSubject
+import android.tools.common.traces.component.ComponentNameMatcher.Companion.WALLPAPER_BBQ_WRAPPER
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
@@ -57,6 +61,22 @@
         }
 
     @Test
+    @FlakyTest(bugId = 293578017)
+    override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
+        super.visibleLayersShownMoreThanOneConsecutiveEntry()
+
+    // TODO(b/293578017) remove once that bug is resolve
+    @Test
+    @Presubmit
+    fun visibleLayersShownMoreThanOneConsecutiveEntry_withoutWallpaper() =
+        flicker.assertLayers {
+            this.visibleLayersShownMoreThanOneConsecutiveEntry(
+                LayersTraceSubject.VISIBLE_FOR_MORE_THAN_ONE_ENTRY_IGNORE_LAYERS +
+                    listOf(WALLPAPER_BBQ_WRAPPER)
+            )
+        }
+
+    @Test
     fun splitScreenDividerIsVisibleAtEnd() {
         flicker.assertLayersEnd { this.isVisible(SPLIT_SCREEN_DIVIDER_COMPONENT) }
     }
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/CopyContentInSplitBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/CopyContentInSplitBenchmark.kt
index e5c1e75..4d90070 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/CopyContentInSplitBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/CopyContentInSplitBenchmark.kt
@@ -22,7 +22,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.FixMethodOrder
 import org.junit.runner.RunWith
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/DismissSplitScreenByDividerBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/DismissSplitScreenByDividerBenchmark.kt
index e4e1af9..8360e94 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/DismissSplitScreenByDividerBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/DismissSplitScreenByDividerBenchmark.kt
@@ -21,7 +21,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.FixMethodOrder
 import org.junit.runner.RunWith
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/DismissSplitScreenByGoHomeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/DismissSplitScreenByGoHomeBenchmark.kt
index b2dd02b..e745878 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/DismissSplitScreenByGoHomeBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/DismissSplitScreenByGoHomeBenchmark.kt
@@ -21,7 +21,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.FixMethodOrder
 import org.junit.runner.RunWith
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/DragDividerToResizeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/DragDividerToResizeBenchmark.kt
index 0788591..c3beb36 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/DragDividerToResizeBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/DragDividerToResizeBenchmark.kt
@@ -21,7 +21,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.Assume
 import org.junit.Before
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromAllAppsBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromAllAppsBenchmark.kt
index 884e451..394864a 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromAllAppsBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromAllAppsBenchmark.kt
@@ -22,7 +22,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.Assume
 import org.junit.Before
@@ -48,7 +47,7 @@
                 tapl.launchedAppState.taskbar
                     .openAllApps()
                     .getAppIcon(secondaryApp.appName)
-                    .dragToSplitscreen(secondaryApp.`package`, primaryApp.`package`)
+                    .dragToSplitscreen(secondaryApp.packageName, primaryApp.packageName)
                 SplitScreenUtils.waitForSplitComplete(wmHelper, primaryApp, secondaryApp)
             }
         }
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromNotificationBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromNotificationBenchmark.kt
index e5c40b6..cd3fbab 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromNotificationBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromNotificationBenchmark.kt
@@ -22,7 +22,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.Assume
 import org.junit.Before
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromShortcutBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromShortcutBenchmark.kt
index 0451001..3b3be84 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromShortcutBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromShortcutBenchmark.kt
@@ -22,7 +22,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.Assume
 import org.junit.Before
@@ -54,7 +53,7 @@
                 .getAppIcon(secondaryApp.appName)
                 .openDeepShortcutMenu()
                 .getMenuItem("Split Screen Secondary Activity")
-                .dragToSplitscreen(secondaryApp.`package`, primaryApp.`package`)
+                .dragToSplitscreen(secondaryApp.packageName, primaryApp.packageName)
             SplitScreenUtils.waitForSplitComplete(wmHelper, primaryApp, secondaryApp)
         }
     }
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromTaskbarBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromTaskbarBenchmark.kt
index 9e0ca1b..eff3559 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromTaskbarBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenByDragFromTaskbarBenchmark.kt
@@ -22,7 +22,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.Assume
 import org.junit.Before
@@ -47,7 +46,7 @@
             transitions {
                 tapl.launchedAppState.taskbar
                     .getAppIcon(secondaryApp.appName)
-                    .dragToSplitscreen(secondaryApp.`package`, primaryApp.`package`)
+                    .dragToSplitscreen(secondaryApp.packageName, primaryApp.packageName)
                 SplitScreenUtils.waitForSplitComplete(wmHelper, primaryApp, secondaryApp)
             }
         }
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenFromOverviewBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenFromOverviewBenchmark.kt
index 06b4fe7..be507d8 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenFromOverviewBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/EnterSplitScreenFromOverviewBenchmark.kt
@@ -21,7 +21,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.FixMethodOrder
 import org.junit.runner.RunWith
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SplitScreenBase.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SplitScreenBase.kt
new file mode 100644
index 0000000..a0e437c
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SplitScreenBase.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.wm.shell.flicker.splitscreen.benchmark
+
+import android.content.Context
+import android.tools.device.flicker.legacy.FlickerBuilder
+import android.tools.device.flicker.legacy.LegacyFlickerTest
+import com.android.server.wm.flicker.helpers.setRotation
+import com.android.wm.shell.flicker.BaseBenchmarkTest
+import com.android.wm.shell.flicker.utils.SplitScreenUtils
+
+abstract class SplitScreenBase(flicker: LegacyFlickerTest) : BaseBenchmarkTest(flicker) {
+    protected val context: Context = instrumentation.context
+    protected val primaryApp = SplitScreenUtils.getPrimary(instrumentation)
+    protected val secondaryApp = SplitScreenUtils.getSecondary(instrumentation)
+
+    protected open val defaultSetup: FlickerBuilder.() -> Unit = {
+        setup {
+            tapl.setEnableRotation(true)
+            setRotation(flicker.scenario.startRotation)
+            tapl.setExpectedRotation(flicker.scenario.startRotation.value)
+            val overview = tapl.workspace.switchToOverview()
+            if (overview.hasTasks()) {
+                overview.dismissAllTasks()
+            }
+        }
+    }
+
+    protected open val defaultTeardown: FlickerBuilder.() -> Unit = {
+        teardown {
+            primaryApp.exit(wmHelper)
+            secondaryApp.exit(wmHelper)
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchAppByDoubleTapDividerBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchAppByDoubleTapDividerBenchmark.kt
index 007b751..ed0debd 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchAppByDoubleTapDividerBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchAppByDoubleTapDividerBenchmark.kt
@@ -25,7 +25,6 @@
 import android.tools.device.helpers.WindowUtils
 import android.tools.device.traces.parsers.WindowManagerStateHelper
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.FixMethodOrder
 import org.junit.runner.RunWith
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBackToSplitFromAnotherAppBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBackToSplitFromAnotherAppBenchmark.kt
index 10c8eeb..9b7939a 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBackToSplitFromAnotherAppBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBackToSplitFromAnotherAppBenchmark.kt
@@ -22,7 +22,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.FixMethodOrder
 import org.junit.runner.RunWith
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBackToSplitFromHomeBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBackToSplitFromHomeBenchmark.kt
index a6e750f..9326ef3 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBackToSplitFromHomeBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBackToSplitFromHomeBenchmark.kt
@@ -22,7 +22,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.FixMethodOrder
 import org.junit.runner.RunWith
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBackToSplitFromRecentBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBackToSplitFromRecentBenchmark.kt
index 7e8d5fb..b928e40 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBackToSplitFromRecentBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBackToSplitFromRecentBenchmark.kt
@@ -22,7 +22,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.FixMethodOrder
 import org.junit.runner.RunWith
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBetweenSplitPairsBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBetweenSplitPairsBenchmark.kt
index 56edad1..f314995 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBetweenSplitPairsBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchBetweenSplitPairsBenchmark.kt
@@ -21,7 +21,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.FixMethodOrder
 import org.junit.runner.RunWith
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/UnlockKeyguardToSplitScreenBenchmark.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/UnlockKeyguardToSplitScreenBenchmark.kt
index 065d4d6..e71834d 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/UnlockKeyguardToSplitScreenBenchmark.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/benchmark/UnlockKeyguardToSplitScreenBenchmark.kt
@@ -22,7 +22,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
-import com.android.wm.shell.flicker.splitscreen.SplitScreenBase
 import com.android.wm.shell.flicker.utils.SplitScreenUtils
 import org.junit.FixMethodOrder
 import org.junit.runner.RunWith
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/CommonAssertions.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/CommonAssertions.kt
index e5c124c..f1cb37e 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/CommonAssertions.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/CommonAssertions.kt
@@ -265,6 +265,7 @@
         val dividerRegion =
             layer(SPLIT_SCREEN_DIVIDER_COMPONENT)?.visibleRegion?.region
                 ?: error("$SPLIT_SCREEN_DIVIDER_COMPONENT component not found")
+        visibleRegion(component).isNotEmpty()
         visibleRegion(component)
             .coversAtMost(
                 if (displayBounds.width > displayBounds.height) {
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 3d8bd38..e7d0f60 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
@@ -67,6 +67,7 @@
 import com.android.wm.shell.sysui.ShellInit;
 import com.android.wm.shell.sysui.ShellSharedConstants;
 
+
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -85,12 +86,11 @@
 
     private static final String ANIMATION_ENABLED = "1";
     private final TestShellExecutor mShellExecutor = new TestShellExecutor();
-    private ShellInit mShellInit;
-
     @Rule
     public TestableContext mContext =
             new TestableContext(InstrumentationRegistry.getInstrumentation().getContext());
 
+    private ShellInit mShellInit;
     @Mock
     private IActivityTaskManager mActivityTaskManager;
 
@@ -116,6 +116,8 @@
     private TestableContentResolver mContentResolver;
     private TestableLooper mTestableLooper;
 
+    private ShellBackAnimationRegistry mShellBackAnimationRegistry;
+
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
@@ -126,11 +128,23 @@
                 ANIMATION_ENABLED);
         mTestableLooper = TestableLooper.get(this);
         mShellInit = spy(new ShellInit(mShellExecutor));
-        mController = new BackAnimationController(mShellInit, mShellController,
-                mShellExecutor, new Handler(mTestableLooper.getLooper()),
-                mActivityTaskManager, mContext,
-                mContentResolver, mAnimationBackground);
-        mController.setEnableUAnimation(true);
+        mShellBackAnimationRegistry =
+                new ShellBackAnimationRegistry(
+                        new CrossActivityAnimation(mContext, mAnimationBackground),
+                        new CrossTaskBackAnimation(mContext, mAnimationBackground),
+                        new CustomizeActivityAnimation(mContext, mAnimationBackground),
+                        null);
+        mController =
+                new BackAnimationController(
+                        mShellInit,
+                        mShellController,
+                        mShellExecutor,
+                        new Handler(mTestableLooper.getLooper()),
+                        mActivityTaskManager,
+                        mContext,
+                        mContentResolver,
+                        mAnimationBackground,
+                        mShellBackAnimationRegistry);
         mShellInit.init();
         mShellExecutor.flushAll();
     }
@@ -138,12 +152,13 @@
     private void createNavigationInfo(int backType,
             boolean enableAnimation,
             boolean isAnimationCallback) {
-        BackNavigationInfo.Builder builder = new BackNavigationInfo.Builder()
-                .setType(backType)
-                .setOnBackNavigationDone(new RemoteCallback((bundle) -> {}))
-                .setOnBackInvokedCallback(mAppCallback)
-                .setPrepareRemoteAnimation(enableAnimation)
-                .setAnimationCallback(isAnimationCallback);
+        BackNavigationInfo.Builder builder =
+                new BackNavigationInfo.Builder()
+                        .setType(backType)
+                        .setOnBackNavigationDone(new RemoteCallback((bundle) -> {}))
+                        .setOnBackInvokedCallback(mAppCallback)
+                        .setPrepareRemoteAnimation(enableAnimation)
+                        .setAnimationCallback(isAnimationCallback);
 
         createNavigationInfo(builder);
     }
@@ -188,18 +203,21 @@
 
     @Test
     public void verifyNavigationFinishes() throws RemoteException {
-        final int[] testTypes = new int[] {BackNavigationInfo.TYPE_RETURN_TO_HOME,
-                BackNavigationInfo.TYPE_CROSS_TASK,
-                BackNavigationInfo.TYPE_CROSS_ACTIVITY,
-                BackNavigationInfo.TYPE_DIALOG_CLOSE,
-                BackNavigationInfo.TYPE_CALLBACK };
+        final int[] testTypes =
+                new int[] {
+                    BackNavigationInfo.TYPE_RETURN_TO_HOME,
+                    BackNavigationInfo.TYPE_CROSS_TASK,
+                    BackNavigationInfo.TYPE_CROSS_ACTIVITY,
+                    BackNavigationInfo.TYPE_DIALOG_CLOSE,
+                    BackNavigationInfo.TYPE_CALLBACK
+                };
 
-        for (int type: testTypes) {
+        for (int type : testTypes) {
             registerAnimation(type);
         }
 
-        for (int type: testTypes) {
-            final ResultListener result  = new ResultListener();
+        for (int type : testTypes) {
+            final ResultListener result = new ResultListener();
             createNavigationInfo(new BackNavigationInfo.Builder()
                     .setType(type)
                     .setOnBackInvokedCallback(mAppCallback)
@@ -275,10 +293,17 @@
         // Toggle the setting off
         Settings.Global.putString(mContentResolver, Settings.Global.ENABLE_BACK_ANIMATION, "0");
         ShellInit shellInit = new ShellInit(mShellExecutor);
-        mController = new BackAnimationController(shellInit, mShellController,
-                mShellExecutor, new Handler(mTestableLooper.getLooper()),
-                mActivityTaskManager, mContext,
-                mContentResolver, mAnimationBackground);
+        mController =
+                new BackAnimationController(
+                        shellInit,
+                        mShellController,
+                        mShellExecutor,
+                        new Handler(mTestableLooper.getLooper()),
+                        mActivityTaskManager,
+                        mContext,
+                        mContentResolver,
+                        mAnimationBackground,
+                        mShellBackAnimationRegistry);
         shellInit.init();
         registerAnimation(BackNavigationInfo.TYPE_RETURN_TO_HOME);
 
@@ -398,17 +423,19 @@
 
     @Test
     public void animationNotDefined() throws RemoteException {
-        final int[] testTypes = new int[] {
-                BackNavigationInfo.TYPE_RETURN_TO_HOME,
-                BackNavigationInfo.TYPE_CROSS_TASK,
-                BackNavigationInfo.TYPE_CROSS_ACTIVITY,
-                BackNavigationInfo.TYPE_DIALOG_CLOSE};
+        final int[] testTypes =
+                new int[] {
+                    BackNavigationInfo.TYPE_RETURN_TO_HOME,
+                    BackNavigationInfo.TYPE_CROSS_TASK,
+                    BackNavigationInfo.TYPE_CROSS_ACTIVITY,
+                    BackNavigationInfo.TYPE_DIALOG_CLOSE
+                };
 
-        for (int type: testTypes) {
+        for (int type : testTypes) {
             unregisterAnimation(type);
         }
 
-        for (int type: testTypes) {
+        for (int type : testTypes) {
             final ResultListener result = new ResultListener();
             createNavigationInfo(new BackNavigationInfo.Builder()
                     .setType(type)
@@ -468,16 +495,14 @@
     public void testBackToActivity() throws RemoteException {
         final CrossActivityAnimation animation = new CrossActivityAnimation(mContext,
                 mAnimationBackground);
-        verifySystemBackBehavior(
-                BackNavigationInfo.TYPE_CROSS_ACTIVITY, animation.mBackAnimationRunner);
+        verifySystemBackBehavior(BackNavigationInfo.TYPE_CROSS_ACTIVITY, animation.getRunner());
     }
 
     @Test
     public void testBackToTask() throws RemoteException {
         final CrossTaskBackAnimation animation = new CrossTaskBackAnimation(mContext,
                 mAnimationBackground);
-        verifySystemBackBehavior(
-                BackNavigationInfo.TYPE_CROSS_TASK, animation.mBackAnimationRunner);
+        verifySystemBackBehavior(BackNavigationInfo.TYPE_CROSS_TASK, animation.getRunner());
     }
 
     private void verifySystemBackBehavior(int type, BackAnimationRunner animation)
@@ -554,10 +579,12 @@
     private static class ResultListener implements RemoteCallback.OnResultListener {
         boolean mBackNavigationDone = false;
         boolean mTriggerBack = false;
+
         @Override
         public void onResult(@Nullable Bundle result) {
             mBackNavigationDone = true;
             mTriggerBack = result.getBoolean(KEY_TRIGGER_BACK);
         }
-    };
+    }
+    ;
 }
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/CustomizeActivityAnimationTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/CustomizeActivityAnimationTest.java
index e7d4598..cebbbd8 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/CustomizeActivityAnimationTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/CustomizeActivityAnimationTest.java
@@ -102,15 +102,17 @@
         // start animation with remote animation targets
         final CountDownLatch finishCalled = new CountDownLatch(1);
         final Runnable finishCallback = finishCalled::countDown;
-        mCustomizeActivityAnimation.mBackAnimationRunner.startAnimation(
-                new RemoteAnimationTarget[]{close, open}, null, null, finishCallback);
+        mCustomizeActivityAnimation
+                .getRunner()
+                .startAnimation(
+                        new RemoteAnimationTarget[] {close, open}, null, null, finishCallback);
         verify(mMockCloseAnimation).initialize(eq(BOUND_SIZE), eq(BOUND_SIZE),
                 eq(BOUND_SIZE), eq(BOUND_SIZE));
         verify(mMockOpenAnimation).initialize(eq(BOUND_SIZE), eq(BOUND_SIZE),
                 eq(BOUND_SIZE), eq(BOUND_SIZE));
 
         try {
-            mCustomizeActivityAnimation.mBackAnimationRunner.getCallback().onBackInvoked();
+            mCustomizeActivityAnimation.getRunner().getCallback().onBackInvoked();
         } catch (RemoteException r) {
             fail("onBackInvoked throw remote exception");
         }
@@ -133,15 +135,17 @@
         // start animation with remote animation targets
         final CountDownLatch finishCalled = new CountDownLatch(1);
         final Runnable finishCallback = finishCalled::countDown;
-        mCustomizeActivityAnimation.mBackAnimationRunner.startAnimation(
-                new RemoteAnimationTarget[]{close, open}, null, null, finishCallback);
+        mCustomizeActivityAnimation
+                .getRunner()
+                .startAnimation(
+                        new RemoteAnimationTarget[] {close, open}, null, null, finishCallback);
         verify(mMockCloseAnimation).initialize(eq(BOUND_SIZE), eq(BOUND_SIZE),
                 eq(BOUND_SIZE), eq(BOUND_SIZE));
         verify(mMockOpenAnimation).initialize(eq(BOUND_SIZE), eq(BOUND_SIZE),
                 eq(BOUND_SIZE), eq(BOUND_SIZE));
 
         try {
-            mCustomizeActivityAnimation.mBackAnimationRunner.getCallback().onBackCancelled();
+            mCustomizeActivityAnimation.getRunner().getCallback().onBackCancelled();
         } catch (RemoteException r) {
             fail("onBackCancelled throw remote exception");
         }
@@ -155,11 +159,12 @@
         // start animation without any remote animation targets
         final CountDownLatch finishCalled = new CountDownLatch(1);
         final Runnable finishCallback = finishCalled::countDown;
-        mCustomizeActivityAnimation.mBackAnimationRunner.startAnimation(
-                new RemoteAnimationTarget[]{}, null, null, finishCallback);
+        mCustomizeActivityAnimation
+                .getRunner()
+                .startAnimation(new RemoteAnimationTarget[] {}, null, null, finishCallback);
 
         try {
-            mCustomizeActivityAnimation.mBackAnimationRunner.getCallback().onBackInvoked();
+            mCustomizeActivityAnimation.getRunner().getCallback().onBackInvoked();
         } catch (RemoteException r) {
             fail("onBackInvoked throw remote exception");
         }
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipActionProviderTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipActionProviderTest.java
index 02e6b8c..ec84d7e 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipActionProviderTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipActionProviderTest.java
@@ -23,7 +23,9 @@
 import static com.android.wm.shell.pip.tv.TvPipAction.ACTION_FULLSCREEN;
 import static com.android.wm.shell.pip.tv.TvPipAction.ACTION_MOVE;
 
-import static org.junit.Assert.assertTrue;
+import static java.util.Collections.EMPTY_LIST;
+
+import static org.junit.Assert.assertEquals;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -34,7 +36,6 @@
 import android.test.suitebuilder.annotation.SmallTest;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
-import android.util.Log;
 
 import com.android.wm.shell.ShellTestCase;
 import com.android.wm.shell.pip.PipMediaController;
@@ -46,7 +47,9 @@
 import org.mockito.MockitoAnnotations;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * Unit tests for {@link TvPipActionsProvider}
@@ -69,35 +72,38 @@
     @Mock
     private PendingIntent mMockPendingIntent;
 
-    private RemoteAction createRemoteAction(int identifier) {
+    private int mNumberOfRemoteActionsCreated = 0;
+
+    private RemoteAction createRemoteAction() {
+        final int identifier = mNumberOfRemoteActionsCreated++;
         return new RemoteAction(mMockIcon, "" + identifier, "" + identifier, mMockPendingIntent);
     }
 
     private List<RemoteAction> createRemoteActions(int numberOfActions) {
         List<RemoteAction> actions = new ArrayList<>();
         for (int i = 0; i < numberOfActions; i++) {
-            actions.add(createRemoteAction(i));
+            actions.add(createRemoteAction());
         }
         return actions;
     }
 
-    private boolean checkActionsMatch(List<TvPipAction> actions, int[] actionTypes) {
-        for (int i = 0; i < actions.size(); i++) {
-            int type = actions.get(i).getActionType();
-            if (type != actionTypes[i]) {
-                Log.e(TAG, "Action at index " + i + ": found " + type
-                        + ", expected " + actionTypes[i]);
-                return false;
-            }
-        }
-        return true;
+    private void assertActionTypes(List<Integer> expected, List<Integer> actual) {
+        assertEquals(getActionTypesStrings(expected), getActionTypesStrings(actual));
+    }
+
+    private static List<String> getActionTypesStrings(List<Integer> actionTypes) {
+        return actionTypes.stream().map(a -> TvPipAction.getActionTypeString(a))
+                .collect(Collectors.toList());
+    }
+
+    private List<Integer> getActionsTypes() {
+        return mActionsProvider.getActionsList().stream().map(a -> a.getActionType())
+                .collect(Collectors.toList());
     }
 
     @Before
     public void setUp() {
-        if (!isTelevision()) {
-            return;
-        }
+        assumeTelevision();
         MockitoAnnotations.initMocks(this);
         mActionsProvider = new TvPipActionsProvider(mContext, mMockPipMediaController,
                 mMockSystemActionsHandler);
@@ -105,57 +111,51 @@
 
     @Test
     public void defaultSystemActions_regularPip() {
-        assumeTelevision();
-        mActionsProvider.updateExpansionEnabled(false);
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE}));
+        assertActionTypes(Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE),
+                          getActionsTypes());
     }
 
     @Test
     public void defaultSystemActions_expandedPip() {
-        assumeTelevision();
         mActionsProvider.updateExpansionEnabled(true);
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE, ACTION_EXPAND_COLLAPSE}));
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE, ACTION_EXPAND_COLLAPSE),
+                getActionsTypes());
     }
 
     @Test
     public void expandedPip_enableExpansion_enable() {
-        assumeTelevision();
         // PiP has expanded PiP disabled.
-        mActionsProvider.updateExpansionEnabled(false);
-
         mActionsProvider.addListener(mMockListener);
         mActionsProvider.updateExpansionEnabled(true);
 
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE, ACTION_EXPAND_COLLAPSE}));
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE, ACTION_EXPAND_COLLAPSE),
+                getActionsTypes());
         verify(mMockListener).onActionsChanged(/* added= */ 1, /* updated= */ 0, /* index= */ 3);
     }
 
     @Test
     public void expandedPip_enableExpansion_disable() {
-        assumeTelevision();
         mActionsProvider.updateExpansionEnabled(true);
 
         mActionsProvider.addListener(mMockListener);
         mActionsProvider.updateExpansionEnabled(false);
 
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE}));
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE),
+                getActionsTypes());
         verify(mMockListener).onActionsChanged(/* added= */ -1, /* updated= */ 0, /* index= */ 3);
     }
 
     @Test
     public void expandedPip_enableExpansion_AlreadyEnabled() {
-        assumeTelevision();
-        mActionsProvider.updateExpansionEnabled(true);
-
         mActionsProvider.addListener(mMockListener);
         mActionsProvider.updateExpansionEnabled(true);
 
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE, ACTION_EXPAND_COLLAPSE}));
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE, ACTION_EXPAND_COLLAPSE),
+                getActionsTypes());
     }
 
     private void check_expandedPip_updateExpansionState(
@@ -167,8 +167,9 @@
         mActionsProvider.addListener(mMockListener);
         mActionsProvider.updatePipExpansionState(endExpansion);
 
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE, ACTION_EXPAND_COLLAPSE}));
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE, ACTION_EXPAND_COLLAPSE),
+                getActionsTypes());
 
         if (updateExpected) {
             verify(mMockListener).onActionsChanged(0, 1, 3);
@@ -180,7 +181,6 @@
 
     @Test
     public void expandedPip_toggleExpansion_collapse() {
-        assumeTelevision();
         check_expandedPip_updateExpansionState(
                 /* startExpansion= */ true,
                 /* endExpansion= */ false,
@@ -189,7 +189,6 @@
 
     @Test
     public void expandedPip_toggleExpansion_expand() {
-        assumeTelevision();
         check_expandedPip_updateExpansionState(
                 /* startExpansion= */ false,
                 /* endExpansion= */ true,
@@ -198,7 +197,6 @@
 
     @Test
     public void expandedPiP_updateExpansionState_alreadyExpanded() {
-        assumeTelevision();
         check_expandedPip_updateExpansionState(
                 /* startExpansion= */ true,
                 /* endExpansion= */ true,
@@ -207,7 +205,6 @@
 
     @Test
     public void expandedPiP_updateExpansionState_alreadyCollapsed() {
-        assumeTelevision();
         check_expandedPip_updateExpansionState(
                 /* startExpansion= */ false,
                 /* endExpansion= */ false,
@@ -216,8 +213,6 @@
 
     @Test
     public void regularPiP_updateExpansionState_setCollapsed() {
-        assumeTelevision();
-        mActionsProvider.updateExpansionEnabled(false);
         mActionsProvider.updatePipExpansionState(/* expanded= */ false);
 
         mActionsProvider.addListener(mMockListener);
@@ -229,153 +224,207 @@
 
     @Test
     public void customActions_added() {
-        assumeTelevision();
-        mActionsProvider.updateExpansionEnabled(false);
         mActionsProvider.addListener(mMockListener);
 
         mActionsProvider.setAppActions(createRemoteActions(2), null);
 
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
-                        ACTION_MOVE}));
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
+                    ACTION_MOVE),
+                getActionsTypes());
         verify(mMockListener).onActionsChanged(/* added= */ 2, /* updated= */ 0, /* index= */ 2);
     }
 
     @Test
     public void customActions_replacedMore() {
-        assumeTelevision();
-        mActionsProvider.updateExpansionEnabled(false);
         mActionsProvider.setAppActions(createRemoteActions(2), null);
 
         mActionsProvider.addListener(mMockListener);
         mActionsProvider.setAppActions(createRemoteActions(3), null);
 
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
-                        ACTION_CUSTOM, ACTION_MOVE}));
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
+                    ACTION_CUSTOM, ACTION_MOVE),
+                getActionsTypes());
         verify(mMockListener).onActionsChanged(/* added= */ 1, /* updated= */ 2, /* index= */ 2);
     }
 
     @Test
     public void customActions_replacedLess() {
-        assumeTelevision();
-        mActionsProvider.updateExpansionEnabled(false);
         mActionsProvider.setAppActions(createRemoteActions(2), null);
 
         mActionsProvider.addListener(mMockListener);
-        mActionsProvider.setAppActions(createRemoteActions(0), null);
+        mActionsProvider.setAppActions(EMPTY_LIST, null);
 
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE}));
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE),
+                getActionsTypes());
         verify(mMockListener).onActionsChanged(/* added= */ -2, /* updated= */ 0, /* index= */ 2);
     }
 
     @Test
     public void customCloseAdded() {
-        assumeTelevision();
-        mActionsProvider.updateExpansionEnabled(false);
-
         List<RemoteAction> customActions = new ArrayList<>();
         mActionsProvider.setAppActions(customActions, null);
 
         mActionsProvider.addListener(mMockListener);
-        mActionsProvider.setAppActions(customActions, createRemoteAction(0));
+        mActionsProvider.setAppActions(customActions, createRemoteAction());
 
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CUSTOM_CLOSE, ACTION_MOVE}));
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CUSTOM_CLOSE, ACTION_MOVE),
+                getActionsTypes());
         verify(mMockListener).onActionsChanged(/* added= */ 0, /* updated= */ 1, /* index= */ 1);
     }
 
     @Test
     public void customClose_matchesOtherCustomAction() {
-        assumeTelevision();
-        mActionsProvider.updateExpansionEnabled(false);
-
         List<RemoteAction> customActions = createRemoteActions(2);
-        RemoteAction customClose = createRemoteAction(/* id= */ 10);
+        RemoteAction customClose = createRemoteAction();
         customActions.add(customClose);
 
         mActionsProvider.addListener(mMockListener);
         mActionsProvider.setAppActions(customActions, customClose);
 
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CUSTOM_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
-                        ACTION_MOVE}));
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CUSTOM_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
+                    ACTION_MOVE),
+                getActionsTypes());
         verify(mMockListener).onActionsChanged(/* added= */ 0, /* updated= */ 1, /* index= */ 1);
         verify(mMockListener).onActionsChanged(/* added= */ 2, /* updated= */ 0, /* index= */ 2);
     }
 
     @Test
     public void mediaActions_added_whileCustomActionsExist() {
-        assumeTelevision();
-        mActionsProvider.updateExpansionEnabled(false);
         mActionsProvider.setAppActions(createRemoteActions(2), null);
 
         mActionsProvider.addListener(mMockListener);
         mActionsProvider.onMediaActionsChanged(createRemoteActions(3));
 
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
-                        ACTION_MOVE}));
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
+                    ACTION_MOVE),
+                getActionsTypes());
         verify(mMockListener, times(0)).onActionsChanged(anyInt(), anyInt(), anyInt());
     }
 
     @Test
     public void customActions_removed_whileMediaActionsExist() {
-        assumeTelevision();
-        mActionsProvider.updateExpansionEnabled(false);
         mActionsProvider.onMediaActionsChanged(createRemoteActions(2));
         mActionsProvider.setAppActions(createRemoteActions(3), null);
 
-        mActionsProvider.addListener(mMockListener);
-        mActionsProvider.setAppActions(createRemoteActions(0), null);
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
+                    ACTION_CUSTOM, ACTION_MOVE),
+                getActionsTypes());
 
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
-                        ACTION_MOVE}));
+        mActionsProvider.addListener(mMockListener);
+        mActionsProvider.setAppActions(EMPTY_LIST, null);
+
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
+                    ACTION_MOVE),
+                getActionsTypes());
         verify(mMockListener).onActionsChanged(/* added= */ -1, /* updated= */ 2, /* index= */ 2);
     }
 
     @Test
     public void customCloseOnly_mediaActionsShowing() {
-        assumeTelevision();
-        mActionsProvider.updateExpansionEnabled(false);
         mActionsProvider.onMediaActionsChanged(createRemoteActions(2));
 
         mActionsProvider.addListener(mMockListener);
-        mActionsProvider.setAppActions(createRemoteActions(0), createRemoteAction(5));
+        mActionsProvider.setAppActions(EMPTY_LIST, createRemoteAction());
 
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CUSTOM_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
-                        ACTION_MOVE}));
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CUSTOM_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
+                    ACTION_MOVE),
+                getActionsTypes());
         verify(mMockListener).onActionsChanged(/* added= */ 0, /* updated= */ 1, /* index= */ 1);
     }
 
     @Test
     public void customActions_showDisabledActions() {
-        assumeTelevision();
-        mActionsProvider.updateExpansionEnabled(false);
-
         List<RemoteAction> customActions = createRemoteActions(2);
         customActions.get(0).setEnabled(false);
         mActionsProvider.setAppActions(customActions, null);
 
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
-                        ACTION_MOVE}));
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
+                    ACTION_MOVE),
+                getActionsTypes());
     }
 
     @Test
     public void mediaActions_hideDisabledActions() {
-        assumeTelevision();
-        mActionsProvider.updateExpansionEnabled(false);
-
         List<RemoteAction> customActions = createRemoteActions(2);
         customActions.get(0).setEnabled(false);
         mActionsProvider.onMediaActionsChanged(customActions);
 
-        assertTrue(checkActionsMatch(mActionsProvider.getActionsList(),
-                new int[]{ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_MOVE}));
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_MOVE),
+                getActionsTypes());
+    }
+
+    @Test
+    public void reset_mediaActions() {
+        List<RemoteAction> customActions = createRemoteActions(2);
+        customActions.get(0).setEnabled(false);
+        mActionsProvider.onMediaActionsChanged(customActions);
+
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_MOVE),
+                getActionsTypes());
+
+        mActionsProvider.reset();
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE),
+                getActionsTypes());
+    }
+
+    @Test
+    public void reset_customActions() {
+        List<RemoteAction> customActions = createRemoteActions(2);
+        customActions.get(0).setEnabled(false);
+        mActionsProvider.setAppActions(customActions, null);
+
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
+                    ACTION_MOVE),
+                getActionsTypes());
+
+        mActionsProvider.reset();
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE),
+                getActionsTypes());
+    }
+
+    @Test
+    public void reset_customClose() {
+        mActionsProvider.setAppActions(EMPTY_LIST, createRemoteAction());
+
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CUSTOM_CLOSE, ACTION_MOVE),
+                getActionsTypes());
+
+        mActionsProvider.reset();
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE),
+                getActionsTypes());
+    }
+
+    @Test
+    public void reset_All() {
+        mActionsProvider.setAppActions(createRemoteActions(2), createRemoteAction());
+        mActionsProvider.onMediaActionsChanged(createRemoteActions(3));
+
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CUSTOM_CLOSE, ACTION_CUSTOM, ACTION_CUSTOM,
+                    ACTION_MOVE),
+                getActionsTypes());
+
+        mActionsProvider.reset();
+        assertActionTypes(
+                Arrays.asList(ACTION_FULLSCREEN, ACTION_CLOSE, ACTION_MOVE),
+                getActionsTypes());
     }
 
 }
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipGravityTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipGravityTest.java
index da6951b..256610b 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipGravityTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/tv/TvPipGravityTest.java
@@ -53,9 +53,8 @@
 
     @Before
     public void setUp() {
-        if (!isTelevision()) {
-            return;
-        }
+        assumeTelevision();
+
         MockitoAnnotations.initMocks(this);
         mPipDisplayLayoutState = new PipDisplayLayoutState(mContext);
         mSizeSpecSource = new LegacySizeSpecSource(mContext, mPipDisplayLayoutState);
@@ -101,20 +100,22 @@
 
     @Test
     public void regularPip_defaultGravity() {
-        assumeTelevision();
         checkGravity(mTvPipBoundsState.getDefaultGravity(), Gravity.RIGHT | Gravity.BOTTOM);
     }
 
     @Test
+    public void regularPip_defaultTvPipGravity() {
+        checkGravity(mTvPipBoundsState.getTvPipGravity(), Gravity.RIGHT | Gravity.BOTTOM);
+    }
+
+    @Test
     public void regularPip_defaultGravity_RTL() {
-        assumeTelevision();
         setRTL(true);
         checkGravity(mTvPipBoundsState.getDefaultGravity(), Gravity.LEFT | Gravity.BOTTOM);
     }
 
     @Test
     public void updateGravity_expand_vertical() {
-        assumeTelevision();
         // Vertical expanded PiP.
         mTvPipBoundsState.setDesiredTvExpandedAspectRatio(VERTICAL_EXPANDED_ASPECT_RATIO, true);
 
@@ -130,7 +131,6 @@
 
     @Test
     public void updateGravity_expand_horizontal() {
-        assumeTelevision();
         // Horizontal expanded PiP.
         mTvPipBoundsState.setDesiredTvExpandedAspectRatio(HORIZONTAL_EXPANDED_ASPECT_RATIO, true);
 
@@ -146,7 +146,6 @@
 
     @Test
     public void updateGravity_collapse() {
-        assumeTelevision();
         // Vertical expansion
         mTvPipBoundsState.setDesiredTvExpandedAspectRatio(VERTICAL_EXPANDED_ASPECT_RATIO, true);
         assertGravityAfterCollapse(Gravity.CENTER_VERTICAL | Gravity.RIGHT,
@@ -164,7 +163,6 @@
 
     @Test
     public void updateGravity_collapse_RTL() {
-        assumeTelevision();
         setRTL(true);
 
         // Horizontal expansion
@@ -177,7 +175,6 @@
 
     @Test
     public void updateGravity_expand_collapse() {
-        assumeTelevision();
         // Vertical expanded PiP.
         mTvPipBoundsState.setDesiredTvExpandedAspectRatio(VERTICAL_EXPANDED_ASPECT_RATIO, true);
 
@@ -197,7 +194,6 @@
 
     @Test
     public void updateGravity_expand_move_collapse() {
-        assumeTelevision();
         // Vertical expanded PiP.
         mTvPipBoundsState.setDesiredTvExpandedAspectRatio(VERTICAL_EXPANDED_ASPECT_RATIO, true);
         expandMoveCollapseCheck(Gravity.TOP | Gravity.RIGHT, KEYCODE_DPAD_LEFT,
@@ -230,7 +226,6 @@
 
     @Test
     public void updateGravity_move_regular_valid() {
-        assumeTelevision();
         mTvPipBoundsState.setTvPipGravity(Gravity.BOTTOM | Gravity.RIGHT);
         // clockwise
         moveAndCheckGravity(KEYCODE_DPAD_LEFT, Gravity.BOTTOM | Gravity.LEFT, true);
@@ -246,7 +241,6 @@
 
     @Test
     public void updateGravity_move_expanded_valid() {
-        assumeTelevision();
         mTvPipBoundsState.setTvPipExpanded(true);
 
         // Vertical expanded PiP.
@@ -264,7 +258,6 @@
 
     @Test
     public void updateGravity_move_regular_invalid() {
-        assumeTelevision();
         int gravity = Gravity.BOTTOM | Gravity.RIGHT;
         mTvPipBoundsState.setTvPipGravity(gravity);
         moveAndCheckGravity(KEYCODE_DPAD_DOWN, gravity, false);
@@ -288,7 +281,6 @@
 
     @Test
     public void updateGravity_move_expanded_invalid() {
-        assumeTelevision();
         mTvPipBoundsState.setTvPipExpanded(true);
 
         // Vertical expanded PiP.
@@ -318,7 +310,6 @@
 
     @Test
     public void previousCollapsedGravity_defaultValue() {
-        assumeTelevision();
         assertEquals(mTvPipBoundsState.getTvPipPreviousCollapsedGravity(),
                 mTvPipBoundsState.getDefaultGravity());
         setRTL(true);
@@ -328,7 +319,6 @@
 
     @Test
     public void previousCollapsedGravity_changes_on_RTL() {
-        assumeTelevision();
         mTvPipBoundsState.setTvPipPreviousCollapsedGravity(Gravity.TOP | Gravity.LEFT);
         setRTL(true);
         assertEquals(mTvPipBoundsState.getTvPipPreviousCollapsedGravity(),
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java
index 03ed18c..0504439 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java
@@ -65,12 +65,6 @@
     ActivityManager.RunningTaskInfo mTaskInfo;
     @Mock
     WindowContainerToken mToken;
-    @Mock
-    TaskViewTaskController mTaskViewTaskController2;
-    @Mock
-    ActivityManager.RunningTaskInfo mTaskInfo2;
-    @Mock
-    WindowContainerToken mToken2;
 
     TaskViewTransitions mTaskViewTransitions;
 
@@ -86,16 +80,10 @@
         mTaskInfo.token = mToken;
         mTaskInfo.taskId = 314;
         mTaskInfo.taskDescription = mock(ActivityManager.TaskDescription.class);
-        when(mTaskViewTaskController.getTaskInfo()).thenReturn(mTaskInfo);
-
-        mTaskInfo2 = new ActivityManager.RunningTaskInfo();
-        mTaskInfo2.token = mToken2;
-        mTaskInfo2.taskId = 315;
-        mTaskInfo2.taskDescription = mock(ActivityManager.TaskDescription.class);
-        when(mTaskViewTaskController2.getTaskInfo()).thenReturn(mTaskInfo2);
 
         mTaskViewTransitions = spy(new TaskViewTransitions(mTransitions));
         mTaskViewTransitions.addTaskView(mTaskViewTaskController);
+        when(mTaskViewTaskController.getTaskInfo()).thenReturn(mTaskInfo);
     }
 
     @Test
@@ -138,7 +126,7 @@
     }
 
     @Test
-    public void testSetTaskBounds_taskVisibleWithPendingOpen_noTransaction() {
+    public void testSetTaskBounds_taskVisibleWithPending_noTransaction() {
         assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
 
         mTaskViewTransitions.setTaskViewVisible(mTaskViewTaskController, true);
@@ -154,43 +142,6 @@
     }
 
     @Test
-    public void testSetTaskBounds_taskVisibleWithPendingChange_transition() {
-        assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
-
-        mTaskViewTransitions.setTaskViewVisible(mTaskViewTaskController, true);
-
-        // Consume the pending transition from visibility change
-        TaskViewTransitions.PendingTransition pending =
-                mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT);
-        assertThat(pending).isNotNull();
-        mTaskViewTransitions.startAnimation(pending.mClaimed,
-                mock(TransitionInfo.class),
-                new SurfaceControl.Transaction(),
-                new SurfaceControl.Transaction(),
-                mock(Transitions.TransitionFinishCallback.class));
-        // Verify it was consumed
-        TaskViewTransitions.PendingTransition checkPending =
-                mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT);
-        assertThat(checkPending).isNull();
-
-        // Test that set bounds creates a new transition
-        mTaskViewTransitions.setTaskBounds(mTaskViewTaskController,
-                new Rect(0, 0, 100, 100));
-        assertThat(mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_CHANGE))
-                .isNotNull();
-
-        // Test that set bounds again (with different bounds) creates another transition
-        mTaskViewTransitions.setTaskBounds(mTaskViewTaskController,
-                new Rect(0, 0, 300, 200));
-        List<TaskViewTransitions.PendingTransition> pendingList =
-                mTaskViewTransitions.findAllPending(mTaskViewTaskController)
-                        .stream()
-                        .filter(pendingTransition -> pendingTransition.mType == TRANSIT_CHANGE)
-                        .toList();
-        assertThat(pendingList.size()).isEqualTo(2);
-    }
-
-    @Test
     public void testSetTaskBounds_sameBounds_noTransaction() {
         assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
 
@@ -217,16 +168,6 @@
                 mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_CHANGE);
         assertThat(pendingBounds).isNotNull();
 
-        // Test that setting same bounds with in-flight transition doesn't cause another one
-        mTaskViewTransitions.setTaskBounds(mTaskViewTaskController,
-                new Rect(0, 0, 100, 100));
-        List<TaskViewTransitions.PendingTransition> pendingList =
-                mTaskViewTransitions.findAllPending(mTaskViewTaskController)
-                        .stream()
-                        .filter(pendingTransition -> pendingTransition.mType == TRANSIT_CHANGE)
-                        .toList();
-        assertThat(pendingList.size()).isEqualTo(1);
-
         // Consume the pending bounds transaction
         mTaskViewTransitions.startAnimation(pendingBounds.mClaimed,
                 mock(TransitionInfo.class),
@@ -246,42 +187,6 @@
         assertThat(pendingBounds2).isNull();
     }
 
-
-    @Test
-    public void testSetTaskBounds_taskVisibleWithDifferentTaskViewPendingChange_transition() {
-        assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
-
-        mTaskViewTransitions.addTaskView(mTaskViewTaskController2);
-
-        mTaskViewTransitions.setTaskViewVisible(mTaskViewTaskController, true);
-
-        // Consume the pending transition from visibility change
-        TaskViewTransitions.PendingTransition pending =
-                mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT);
-        assertThat(pending).isNotNull();
-        mTaskViewTransitions.startAnimation(pending.mClaimed,
-                mock(TransitionInfo.class),
-                new SurfaceControl.Transaction(),
-                new SurfaceControl.Transaction(),
-                mock(Transitions.TransitionFinishCallback.class));
-        // Verify it was consumed
-        TaskViewTransitions.PendingTransition checkPending =
-                mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT);
-        assertThat(checkPending).isNull();
-
-        // Set the second taskview as visible & check that it has a pending transition
-        mTaskViewTransitions.setTaskViewVisible(mTaskViewTaskController2, true);
-        TaskViewTransitions.PendingTransition pending2 =
-                mTaskViewTransitions.findPending(mTaskViewTaskController2, TRANSIT_TO_FRONT);
-        assertThat(pending2).isNotNull();
-
-        // Test that set bounds on the first taskview will create a new transition
-        mTaskViewTransitions.setTaskBounds(mTaskViewTaskController,
-                new Rect(0, 0, 100, 100));
-        assertThat(mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_CHANGE))
-                .isNotNull();
-    }
-
     @Test
     public void testSetTaskVisibility_taskRemoved_noNPE() {
         mTaskViewTransitions.removeTaskView(mTaskViewTaskController);
diff --git a/libs/androidfw/Android.bp b/libs/androidfw/Android.bp
index 28bda72..fa9447a 100644
--- a/libs/androidfw/Android.bp
+++ b/libs/androidfw/Android.bp
@@ -232,6 +232,7 @@
         "tests/AssetManager2_bench.cpp",
         "tests/AttributeResolution_bench.cpp",
         "tests/CursorWindow_bench.cpp",
+        "tests/Generic_bench.cpp",
         "tests/SparseEntry_bench.cpp",
         "tests/Theme_bench.cpp",
     ],
diff --git a/libs/androidfw/ApkAssets.cpp b/libs/androidfw/ApkAssets.cpp
index 15aaae2..f0c6395 100644
--- a/libs/androidfw/ApkAssets.cpp
+++ b/libs/androidfw/ApkAssets.cpp
@@ -27,39 +27,34 @@
 
 constexpr const char* kResourcesArsc = "resources.arsc";
 
-ApkAssets::ApkAssets(std::unique_ptr<Asset> resources_asset,
+ApkAssets::ApkAssets(PrivateConstructorUtil, std::unique_ptr<Asset> resources_asset,
                      std::unique_ptr<LoadedArsc> loaded_arsc,
-                     std::unique_ptr<AssetsProvider> assets,
-                     package_property_t property_flags,
-                     std::unique_ptr<Asset> idmap_asset,
-                     std::unique_ptr<LoadedIdmap> loaded_idmap)
+                     std::unique_ptr<AssetsProvider> assets, package_property_t property_flags,
+                     std::unique_ptr<Asset> idmap_asset, std::unique_ptr<LoadedIdmap> loaded_idmap)
     : resources_asset_(std::move(resources_asset)),
       loaded_arsc_(std::move(loaded_arsc)),
       assets_provider_(std::move(assets)),
       property_flags_(property_flags),
       idmap_asset_(std::move(idmap_asset)),
-      loaded_idmap_(std::move(loaded_idmap)) {}
+      loaded_idmap_(std::move(loaded_idmap)) {
+}
 
-std::unique_ptr<ApkAssets> ApkAssets::Load(const std::string& path, package_property_t flags) {
+ApkAssetsPtr ApkAssets::Load(const std::string& path, package_property_t flags) {
   return Load(ZipAssetsProvider::Create(path, flags), flags);
 }
 
-std::unique_ptr<ApkAssets> ApkAssets::LoadFromFd(base::unique_fd fd,
-                                                 const std::string& debug_name,
-                                                 package_property_t flags,
-                                                 off64_t offset,
-                                                 off64_t len) {
+ApkAssetsPtr ApkAssets::LoadFromFd(base::unique_fd fd, const std::string& debug_name,
+                                   package_property_t flags, off64_t offset, off64_t len) {
   return Load(ZipAssetsProvider::Create(std::move(fd), debug_name, offset, len), flags);
 }
 
-std::unique_ptr<ApkAssets> ApkAssets::Load(std::unique_ptr<AssetsProvider> assets,
-                                           package_property_t flags) {
+ApkAssetsPtr ApkAssets::Load(std::unique_ptr<AssetsProvider> assets, package_property_t flags) {
   return LoadImpl(std::move(assets), flags, nullptr /* idmap_asset */, nullptr /* loaded_idmap */);
 }
 
-std::unique_ptr<ApkAssets> ApkAssets::LoadTable(std::unique_ptr<Asset> resources_asset,
-                                                std::unique_ptr<AssetsProvider> assets,
-                                                package_property_t flags) {
+ApkAssetsPtr ApkAssets::LoadTable(std::unique_ptr<Asset> resources_asset,
+                                  std::unique_ptr<AssetsProvider> assets,
+                                  package_property_t flags) {
   if (resources_asset == nullptr) {
     return {};
   }
@@ -67,8 +62,7 @@
                   nullptr /* loaded_idmap */);
 }
 
-std::unique_ptr<ApkAssets> ApkAssets::LoadOverlay(const std::string& idmap_path,
-                                                  package_property_t flags) {
+ApkAssetsPtr ApkAssets::LoadOverlay(const std::string& idmap_path, package_property_t flags) {
   CHECK((flags & PROPERTY_LOADER) == 0U) << "Cannot load RROs through loaders";
   auto idmap_asset = AssetsProvider::CreateAssetFromFile(idmap_path);
   if (idmap_asset == nullptr) {
@@ -103,10 +97,10 @@
                   std::move(loaded_idmap));
 }
 
-std::unique_ptr<ApkAssets> ApkAssets::LoadImpl(std::unique_ptr<AssetsProvider> assets,
-                                               package_property_t property_flags,
-                                               std::unique_ptr<Asset> idmap_asset,
-                                               std::unique_ptr<LoadedIdmap> loaded_idmap) {
+ApkAssetsPtr ApkAssets::LoadImpl(std::unique_ptr<AssetsProvider> assets,
+                                 package_property_t property_flags,
+                                 std::unique_ptr<Asset> idmap_asset,
+                                 std::unique_ptr<LoadedIdmap> loaded_idmap) {
   if (assets == nullptr) {
     return {};
   }
@@ -125,11 +119,11 @@
                   std::move(idmap_asset), std::move(loaded_idmap));
 }
 
-std::unique_ptr<ApkAssets> ApkAssets::LoadImpl(std::unique_ptr<Asset> resources_asset,
-                                               std::unique_ptr<AssetsProvider> assets,
-                                               package_property_t property_flags,
-                                               std::unique_ptr<Asset> idmap_asset,
-                                               std::unique_ptr<LoadedIdmap> loaded_idmap) {
+ApkAssetsPtr ApkAssets::LoadImpl(std::unique_ptr<Asset> resources_asset,
+                                 std::unique_ptr<AssetsProvider> assets,
+                                 package_property_t property_flags,
+                                 std::unique_ptr<Asset> idmap_asset,
+                                 std::unique_ptr<LoadedIdmap> loaded_idmap) {
   if (assets == nullptr ) {
     return {};
   }
@@ -155,10 +149,9 @@
     return {};
   }
 
-  return std::unique_ptr<ApkAssets>(new ApkAssets(std::move(resources_asset),
-                                                  std::move(loaded_arsc), std::move(assets),
-                                                  property_flags, std::move(idmap_asset),
-                                                  std::move(loaded_idmap)));
+  return ApkAssetsPtr::make(PrivateConstructorUtil{}, std::move(resources_asset),
+                            std::move(loaded_arsc), std::move(assets), property_flags,
+                            std::move(idmap_asset), std::move(loaded_idmap));
 }
 
 std::optional<std::string_view> ApkAssets::GetPath() const {
@@ -174,4 +167,5 @@
   return IsLoader() || ((!loaded_idmap_ || loaded_idmap_->IsUpToDate())
                         && assets_provider_->IsUpToDate());
 }
+
 }  // namespace android
diff --git a/libs/androidfw/ApkParsing.cpp b/libs/androidfw/ApkParsing.cpp
index 32d2c5b..7eedfdb 100644
--- a/libs/androidfw/ApkParsing.cpp
+++ b/libs/androidfw/ApkParsing.cpp
@@ -56,6 +56,11 @@
         return nullptr;
     }
 
+    // Make sure file starts with 'lib/' prefix.
+    if (strncmp(fileName, APK_LIB.data(), APK_LIB_LEN) != 0) {
+        return nullptr;
+    }
+
     // Make sure there aren't subdirectories by checking if the next / after lib/ is the last slash
     if (memchr(fileName + APK_LIB_LEN, '/', fileNameLen - APK_LIB_LEN) != lastSlash) {
         return nullptr;
diff --git a/libs/androidfw/AssetManager2.cpp b/libs/androidfw/AssetManager2.cpp
index 68f5e4a8..b1ef4e5 100644
--- a/libs/androidfw/AssetManager2.cpp
+++ b/libs/androidfw/AssetManager2.cpp
@@ -91,13 +91,14 @@
   StringPoolRef entry_string_ref;
 };
 
-AssetManager2::AssetManager2() {
-  memset(&configuration_, 0, sizeof(configuration_));
+AssetManager2::AssetManager2(ApkAssetsList apk_assets, const ResTable_config& configuration)
+    : configuration_(configuration) {
+  // Don't invalidate caches here as there's nothing cached yet.
+  SetApkAssets(apk_assets, false);
 }
 
-bool AssetManager2::SetApkAssets(std::vector<const ApkAssets*> apk_assets, bool invalidate_caches) {
-  apk_assets_ = std::move(apk_assets);
-  BuildDynamicRefTable();
+bool AssetManager2::SetApkAssets(ApkAssetsList apk_assets, bool invalidate_caches) {
+  BuildDynamicRefTable(apk_assets);
   RebuildFilterList();
   if (invalidate_caches) {
     InvalidateCaches(static_cast<uint32_t>(-1));
@@ -105,7 +106,21 @@
   return true;
 }
 
-void AssetManager2::BuildDynamicRefTable() {
+bool AssetManager2::SetApkAssets(std::initializer_list<ApkAssetsPtr> apk_assets,
+                                 bool invalidate_caches) {
+  return SetApkAssets(ApkAssetsList(apk_assets.begin(), apk_assets.size()), invalidate_caches);
+}
+
+void AssetManager2::BuildDynamicRefTable(ApkAssetsList apk_assets) {
+  auto op = StartOperation();
+
+  apk_assets_.resize(apk_assets.size());
+  for (size_t i = 0; i != apk_assets.size(); ++i) {
+    apk_assets_[i].first = apk_assets[i];
+    // Let's populate the locked assets right away as we're going to need them here later.
+    apk_assets_[i].second = apk_assets[i];
+  }
+
   package_groups_.clear();
   package_ids_.fill(0xff);
 
@@ -116,16 +131,19 @@
 
   // Overlay resources are not directly referenced by an application so their resource ids
   // can change throughout the application's lifetime. Assign overlay package ids last.
-  std::vector<const ApkAssets*> sorted_apk_assets(apk_assets_);
-  std::stable_partition(sorted_apk_assets.begin(), sorted_apk_assets.end(), [](const ApkAssets* a) {
-    return !a->IsOverlay();
-  });
+  std::vector<const ApkAssets*> sorted_apk_assets;
+  sorted_apk_assets.reserve(apk_assets.size());
+  for (auto& asset : apk_assets) {
+    sorted_apk_assets.push_back(asset.get());
+  }
+  std::stable_partition(sorted_apk_assets.begin(), sorted_apk_assets.end(),
+                        [](auto a) { return !a->IsOverlay(); });
 
   // The assets cookie must map to the position of the apk assets in the unsorted apk assets list.
   std::unordered_map<const ApkAssets*, ApkAssetsCookie> apk_assets_cookies;
-  apk_assets_cookies.reserve(apk_assets_.size());
-  for (size_t i = 0, n = apk_assets_.size(); i < n; i++) {
-    apk_assets_cookies[apk_assets_[i]] = static_cast<ApkAssetsCookie>(i);
+  apk_assets_cookies.reserve(apk_assets.size());
+  for (size_t i = 0, n = apk_assets.size(); i < n; i++) {
+    apk_assets_cookies[apk_assets[i].get()] = static_cast<ApkAssetsCookie>(i);
   }
 
   // 0x01 is reserved for the android package.
@@ -240,9 +258,11 @@
 void AssetManager2::DumpToLog() const {
   LOG(INFO) << base::StringPrintf("AssetManager2(this=%p)", this);
 
+  auto op = StartOperation();
   std::string list;
-  for (const auto& apk_assets : apk_assets_) {
-    base::StringAppendF(&list, "%s,", apk_assets->GetDebugName().c_str());
+  for (size_t i = 0, s = apk_assets_.size(); i < s; ++i) {
+    const auto& assets = GetApkAssets(i);
+    base::StringAppendF(&list, "%s,", assets ? assets->GetDebugName().c_str() : "nullptr");
   }
   LOG(INFO) << "ApkAssets: " << list;
 
@@ -279,7 +299,9 @@
   if (cookie < 0 || static_cast<size_t>(cookie) >= apk_assets_.size()) {
     return nullptr;
   }
-  return apk_assets_[cookie]->GetLoadedArsc()->GetStringPool();
+  auto op = StartOperation();
+  const auto& assets = GetApkAssets(cookie);
+  return assets ? assets->GetLoadedArsc()->GetStringPool() : nullptr;
 }
 
 const DynamicRefTable* AssetManager2::GetDynamicRefTableForPackage(uint32_t package_id) const {
@@ -329,9 +351,14 @@
 
 bool AssetManager2::GetOverlayablesToString(android::StringPiece package_name,
                                             std::string* out) const {
+  auto op = StartOperation();
   uint8_t package_id = 0U;
-  for (const auto& apk_assets : apk_assets_) {
-    const LoadedArsc* loaded_arsc = apk_assets->GetLoadedArsc();
+  for (size_t i = 0, s = apk_assets_.size(); i != s; ++i) {
+    const auto& assets = GetApkAssets(i);
+    if (!assets) {
+      continue;
+    }
+    const LoadedArsc* loaded_arsc = assets->GetLoadedArsc();
     if (loaded_arsc == nullptr) {
       continue;
     }
@@ -384,8 +411,14 @@
 }
 
 bool AssetManager2::ContainsAllocatedTable() const {
-  return std::find_if(apk_assets_.begin(), apk_assets_.end(),
-                      std::mem_fn(&ApkAssets::IsTableAllocated)) != apk_assets_.end();
+  auto op = StartOperation();
+  for (size_t i = 0, s = apk_assets_.size(); i != s; ++i) {
+    const auto& assets = GetApkAssets(i);
+    if (assets && assets->IsTableAllocated()) {
+      return true;
+    }
+  }
+  return false;
 }
 
 void AssetManager2::SetConfiguration(const ResTable_config& configuration) {
@@ -398,8 +431,8 @@
   }
 }
 
-std::set<const ApkAssets*> AssetManager2::GetNonSystemOverlays() const {
-  std::set<const ApkAssets*> non_system_overlays;
+std::set<AssetManager2::ApkAssetsPtr> AssetManager2::GetNonSystemOverlays() const {
+  std::set<ApkAssetsPtr> non_system_overlays;
   for (const PackageGroup& package_group : package_groups_) {
     bool found_system_package = false;
     for (const ConfiguredPackage& package : package_group.packages_) {
@@ -410,8 +443,11 @@
     }
 
     if (!found_system_package) {
+      auto op = StartOperation();
       for (const ConfiguredOverlay& overlay : package_group.overlays_) {
-        non_system_overlays.insert(apk_assets_[overlay.cookie]);
+        if (const auto& asset = GetApkAssets(overlay.cookie)) {
+          non_system_overlays.insert(std::move(asset));
+        }
       }
     }
   }
@@ -422,22 +458,27 @@
 base::expected<std::set<ResTable_config>, IOError> AssetManager2::GetResourceConfigurations(
     bool exclude_system, bool exclude_mipmap) const {
   ATRACE_NAME("AssetManager::GetResourceConfigurations");
+  auto op = StartOperation();
+
   const auto non_system_overlays =
-      (exclude_system) ? GetNonSystemOverlays() : std::set<const ApkAssets*>();
+      exclude_system ? GetNonSystemOverlays() : std::set<ApkAssetsPtr>();
 
   std::set<ResTable_config> configurations;
   for (const PackageGroup& package_group : package_groups_) {
     for (size_t i = 0; i < package_group.packages_.size(); i++) {
       const ConfiguredPackage& package = package_group.packages_[i];
-      if (exclude_system && package.loaded_package_->IsSystem()) {
-        continue;
-      }
-
-      auto apk_assets = apk_assets_[package_group.cookies_[i]];
-      if (exclude_system && apk_assets->IsOverlay() &&
-          non_system_overlays.find(apk_assets) == non_system_overlays.end()) {
-        // Exclude overlays that target system resources.
-        continue;
+      if (exclude_system) {
+        if (package.loaded_package_->IsSystem()) {
+          continue;
+        }
+        if (!non_system_overlays.empty()) {
+          // Exclude overlays that target only system resources.
+          const auto& apk_assets = GetApkAssets(package_group.cookies_[i]);
+          if (apk_assets && apk_assets->IsOverlay() &&
+              non_system_overlays.find(apk_assets) == non_system_overlays.end()) {
+            continue;
+          }
+        }
       }
 
       auto result = package.loaded_package_->CollectConfigurations(exclude_mipmap, &configurations);
@@ -452,22 +493,27 @@
 std::set<std::string> AssetManager2::GetResourceLocales(bool exclude_system,
                                                         bool merge_equivalent_languages) const {
   ATRACE_NAME("AssetManager::GetResourceLocales");
+  auto op = StartOperation();
+
   std::set<std::string> locales;
   const auto non_system_overlays =
-      (exclude_system) ? GetNonSystemOverlays() : std::set<const ApkAssets*>();
+      exclude_system ? GetNonSystemOverlays() : std::set<ApkAssetsPtr>();
 
   for (const PackageGroup& package_group : package_groups_) {
     for (size_t i = 0; i < package_group.packages_.size(); i++) {
       const ConfiguredPackage& package = package_group.packages_[i];
-      if (exclude_system && package.loaded_package_->IsSystem()) {
-        continue;
-      }
-
-      auto apk_assets = apk_assets_[package_group.cookies_[i]];
-      if (exclude_system && apk_assets->IsOverlay() &&
-          non_system_overlays.find(apk_assets) == non_system_overlays.end()) {
-        // Exclude overlays that target system resources.
-        continue;
+      if (exclude_system) {
+        if (package.loaded_package_->IsSystem()) {
+          continue;
+        }
+        if (!non_system_overlays.empty()) {
+          // Exclude overlays that target only system resources.
+          const auto& apk_assets = GetApkAssets(package_group.cookies_[i]);
+          if (apk_assets && apk_assets->IsOverlay() &&
+              non_system_overlays.find(apk_assets) == non_system_overlays.end()) {
+            continue;
+          }
+        }
       }
 
       package.loaded_package_->CollectLocales(merge_equivalent_languages, &locales);
@@ -490,15 +536,15 @@
 
 std::unique_ptr<AssetDir> AssetManager2::OpenDir(const std::string& dirname) const {
   ATRACE_NAME("AssetManager::OpenDir");
+  auto op = StartOperation();
 
   std::string full_path = "assets/" + dirname;
-  std::unique_ptr<SortedVector<AssetDir::FileInfo>> files =
-      util::make_unique<SortedVector<AssetDir::FileInfo>>();
+  auto files = util::make_unique<SortedVector<AssetDir::FileInfo>>();
 
   // Start from the back.
-  for (auto iter = apk_assets_.rbegin(); iter != apk_assets_.rend(); ++iter) {
-    const ApkAssets* apk_assets = *iter;
-    if (apk_assets->IsOverlay()) {
+  for (size_t i = apk_assets_.size(); i > 0; --i) {
+    const auto& apk_assets = GetApkAssets(i - 1);
+    if (!apk_assets || apk_assets->IsOverlay()) {
       continue;
     }
 
@@ -526,15 +572,17 @@
 std::unique_ptr<Asset> AssetManager2::OpenNonAsset(const std::string& filename,
                                                    Asset::AccessMode mode,
                                                    ApkAssetsCookie* out_cookie) const {
-  for (int32_t i = apk_assets_.size() - 1; i >= 0; i--) {
+  auto op = StartOperation();
+  for (size_t i = apk_assets_.size(); i > 0; i--) {
+    const auto& assets = GetApkAssets(i - 1);
     // Prevent RRO from modifying assets and other entries accessed by file
     // path. Explicitly asking for a path in a given package (denoted by a
     // cookie) is still OK.
-    if (apk_assets_[i]->IsOverlay()) {
+    if (!assets || assets->IsOverlay()) {
       continue;
     }
 
-    std::unique_ptr<Asset> asset = apk_assets_[i]->GetAssetsProvider()->Open(filename, mode);
+    std::unique_ptr<Asset> asset = assets->GetAssetsProvider()->Open(filename, mode);
     if (asset) {
       if (out_cookie != nullptr) {
         *out_cookie = i;
@@ -555,7 +603,9 @@
   if (cookie < 0 || static_cast<size_t>(cookie) >= apk_assets_.size()) {
     return {};
   }
-  return apk_assets_[cookie]->GetAssetsProvider()->Open(filename, mode);
+  auto op = StartOperation();
+  const auto& assets = GetApkAssets(cookie);
+  return assets ? assets->GetAssetsProvider()->Open(filename, mode) : nullptr;
 }
 
 base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntry(
@@ -568,6 +618,8 @@
     last_resolution_.resid = resid;
   }
 
+  auto op = StartOperation();
+
   // Might use this if density_override != 0.
   ResTable_config density_override_config;
 
@@ -603,90 +655,97 @@
   }
 
   bool overlaid = false;
-  if (!stop_at_first_match && !ignore_configuration && !apk_assets_[result->cookie]->IsLoader()) {
-    for (const auto& id_map : package_group.overlays_) {
-      auto overlay_entry = id_map.overlay_res_maps_.Lookup(resid);
-      if (!overlay_entry) {
-        // No id map entry exists for this target resource.
-        continue;
-      }
-      if (overlay_entry.IsInlineValue()) {
-        // The target resource is overlaid by an inline value not represented by a resource.
-        ConfigDescription best_frro_config;
-        Res_value best_frro_value;
-        bool frro_found = false;
-        for( const auto& [config, value] : overlay_entry.GetInlineValue()) {
-          if ((!frro_found || config.isBetterThan(best_frro_config, desired_config))
-              && config.match(*desired_config)) {
-            frro_found = true;
-            best_frro_config = config;
-            best_frro_value = value;
-          }
-        }
-        if (!frro_found) {
+  if (!stop_at_first_match && !ignore_configuration) {
+    const auto& assets = GetApkAssets(result->cookie);
+    if (!assets) {
+      ALOGE("Found expired ApkAssets #%d for resource ID 0x%08x.", result->cookie, resid);
+      return base::unexpected(std::nullopt);
+    }
+    if (!assets->IsLoader()) {
+      for (const auto& id_map : package_group.overlays_) {
+        auto overlay_entry = id_map.overlay_res_maps_.Lookup(resid);
+        if (!overlay_entry) {
+          // No id map entry exists for this target resource.
           continue;
         }
-        result->entry = best_frro_value;
+        if (overlay_entry.IsInlineValue()) {
+          // The target resource is overlaid by an inline value not represented by a resource.
+          ConfigDescription best_frro_config;
+          Res_value best_frro_value;
+          bool frro_found = false;
+          for( const auto& [config, value] : overlay_entry.GetInlineValue()) {
+            if ((!frro_found || config.isBetterThan(best_frro_config, desired_config))
+                && config.match(*desired_config)) {
+              frro_found = true;
+              best_frro_config = config;
+              best_frro_value = value;
+            }
+          }
+          if (!frro_found) {
+            continue;
+          }
+          result->entry = best_frro_value;
+          result->dynamic_ref_table = id_map.overlay_res_maps_.GetOverlayDynamicRefTable();
+          result->cookie = id_map.cookie;
+
+          if (UNLIKELY(logging_enabled)) {
+            last_resolution_.steps.push_back(
+                Resolution::Step{Resolution::Step::Type::OVERLAID_INLINE, result->cookie, String8()});
+            if (auto path = assets->GetPath()) {
+              const std::string overlay_path = path->data();
+              if (IsFabricatedOverlay(overlay_path)) {
+                // FRRO don't have package name so we use the creating package here.
+                String8 frro_name = String8("FRRO");
+                // Get the first part of it since the expected one should be like
+                // {overlayPackageName}-{overlayName}-{4 alphanumeric chars}.frro
+                // under /data/resource-cache/.
+                const std::string name = overlay_path.substr(overlay_path.rfind('/') + 1);
+                const size_t end = name.find('-');
+                if (frro_name.size() != overlay_path.size() && end != std::string::npos) {
+                  frro_name.append(base::StringPrintf(" created by %s",
+                                                      name.substr(0 /* pos */,
+                                                                  end).c_str()).c_str());
+                }
+                last_resolution_.best_package_name = frro_name;
+              } else {
+                last_resolution_.best_package_name = result->package_name->c_str();
+              }
+            }
+            overlaid = true;
+          }
+          continue;
+        }
+
+        auto overlay_result = FindEntry(overlay_entry.GetResourceId(), density_override,
+                                        false /* stop_at_first_match */,
+                                        false /* ignore_configuration */);
+        if (UNLIKELY(IsIOError(overlay_result))) {
+          return base::unexpected(overlay_result.error());
+        }
+        if (!overlay_result.has_value()) {
+          continue;
+        }
+
+        if (!overlay_result->config.isBetterThan(result->config, desired_config)
+            && overlay_result->config.compare(result->config) != 0) {
+          // The configuration of the entry for the overlay must be equal to or better than the target
+          // configuration to be chosen as the better value.
+          continue;
+        }
+
+        result->cookie = overlay_result->cookie;
+        result->entry = overlay_result->entry;
+        result->config = overlay_result->config;
         result->dynamic_ref_table = id_map.overlay_res_maps_.GetOverlayDynamicRefTable();
-        result->cookie = id_map.cookie;
 
         if (UNLIKELY(logging_enabled)) {
           last_resolution_.steps.push_back(
-              Resolution::Step{Resolution::Step::Type::OVERLAID_INLINE, String8(), result->cookie});
-          if (auto path = apk_assets_[result->cookie]->GetPath()) {
-            const std::string overlay_path = path->data();
-            if (IsFabricatedOverlay(overlay_path)) {
-              // FRRO don't have package name so we use the creating package here.
-              String8 frro_name = String8("FRRO");
-              // Get the first part of it since the expected one should be like
-              // {overlayPackageName}-{overlayName}-{4 alphanumeric chars}.frro
-              // under /data/resource-cache/.
-              const std::string name = overlay_path.substr(overlay_path.rfind('/') + 1);
-              const size_t end = name.find('-');
-              if (frro_name.size() != overlay_path.size() && end != std::string::npos) {
-                frro_name.append(base::StringPrintf(" created by %s",
-                                                    name.substr(0 /* pos */,
-                                                                end).c_str()).c_str());
-              }
-              last_resolution_.best_package_name = frro_name;
-            } else {
-              last_resolution_.best_package_name = result->package_name->c_str();
-            }
-          }
+              Resolution::Step{Resolution::Step::Type::OVERLAID, overlay_result->cookie,
+                               overlay_result->config.toString()});
+          last_resolution_.best_package_name =
+              overlay_result->package_name->c_str();
           overlaid = true;
         }
-        continue;
-      }
-
-      auto overlay_result = FindEntry(overlay_entry.GetResourceId(), density_override,
-                                      false /* stop_at_first_match */,
-                                      false /* ignore_configuration */);
-      if (UNLIKELY(IsIOError(overlay_result))) {
-        return base::unexpected(overlay_result.error());
-      }
-      if (!overlay_result.has_value()) {
-        continue;
-      }
-
-      if (!overlay_result->config.isBetterThan(result->config, desired_config)
-          && overlay_result->config.compare(result->config) != 0) {
-        // The configuration of the entry for the overlay must be equal to or better than the target
-        // configuration to be chosen as the better value.
-        continue;
-      }
-
-      result->cookie = overlay_result->cookie;
-      result->entry = overlay_result->entry;
-      result->config = overlay_result->config;
-      result->dynamic_ref_table = id_map.overlay_res_maps_.GetOverlayDynamicRefTable();
-
-      if (UNLIKELY(logging_enabled)) {
-        last_resolution_.steps.push_back(
-            Resolution::Step{Resolution::Step::Type::OVERLAID, overlay_result->config.toString(),
-                             overlay_result->cookie});
-        last_resolution_.best_package_name =
-            overlay_result->package_name->c_str();
-        overlaid = true;
       }
     }
   }
@@ -769,8 +828,7 @@
       } else {
         if (UNLIKELY(logging_enabled)) {
           last_resolution_.steps.push_back(Resolution::Step{Resolution::Step::Type::SKIPPED,
-                                                      this_config.toString(),
-                                                      cookie});
+                                                            cookie, this_config.toString()});
         }
         continue;
       }
@@ -786,8 +844,7 @@
       if (!offset.has_value()) {
         if (UNLIKELY(logging_enabled)) {
           last_resolution_.steps.push_back(Resolution::Step{Resolution::Step::Type::NO_ENTRY,
-                                                      this_config.toString(),
-                                                      cookie});
+                                                            cookie, this_config.toString()});
         }
         continue;
       }
@@ -800,8 +857,7 @@
 
       if (UNLIKELY(logging_enabled)) {
         last_resolution_.steps.push_back(Resolution::Step{resolution_type,
-                                                          this_config.toString(),
-                                                          cookie});
+                                                          cookie, this_config.toString()});
       }
 
       // Any configuration will suffice, so break.
@@ -830,22 +886,16 @@
     .entry = *entry,
     .config = *best_config,
     .type_flags = type_flags,
+    .dynamic_ref_table = package_group.dynamic_ref_table.get(),
     .package_name = &best_package->GetPackageName(),
     .type_string_ref = StringPoolRef(best_package->GetTypeStringPool(), best_type->id - 1),
     .entry_string_ref = StringPoolRef(best_package->GetKeyStringPool(),
                                       (*best_entry_verified)->key()),
-    .dynamic_ref_table = package_group.dynamic_ref_table.get(),
   };
 }
 
 void AssetManager2::ResetResourceResolution() const {
-  last_resolution_.cookie = kInvalidCookie;
-  last_resolution_.resid = 0;
-  last_resolution_.steps.clear();
-  last_resolution_.type_string_ref = StringPoolRef();
-  last_resolution_.entry_string_ref = StringPoolRef();
-  last_resolution_.best_config_name.clear();
-  last_resolution_.best_package_name.clear();
+  last_resolution_ = Resolution{};
 }
 
 void AssetManager2::SetResourceResolutionLoggingEnabled(bool enabled) {
@@ -867,8 +917,12 @@
     return {};
   }
 
+  auto op = StartOperation();
+
   const uint32_t resid = last_resolution_.resid;
-  const auto package = apk_assets_[cookie]->GetLoadedArsc()->GetPackageById(get_package_id(resid));
+  const auto& assets = GetApkAssets(cookie);
+  const auto package =
+      assets ? assets->GetLoadedArsc()->GetPackageById(get_package_id(resid)) : nullptr;
 
   std::string resource_name_string;
   if (package != nullptr) {
@@ -885,21 +939,23 @@
                                    configuration_.toString().c_str());
 
   for (const Resolution::Step& step : last_resolution_.steps) {
-    const static std::unordered_map<Resolution::Step::Type, const char*> kStepStrings = {
-        {Resolution::Step::Type::INITIAL,         "Found initial"},
-        {Resolution::Step::Type::BETTER_MATCH,    "Found better"},
-        {Resolution::Step::Type::OVERLAID,        "Overlaid"},
-        {Resolution::Step::Type::OVERLAID_INLINE, "Overlaid inline"},
-        {Resolution::Step::Type::SKIPPED,         "Skipped"},
-        {Resolution::Step::Type::NO_ENTRY,        "No entry"}
+    constexpr static std::array kStepStrings = {
+        "Found initial",
+        "Found better",
+        "Overlaid",
+        "Overlaid inline",
+        "Skipped",
+        "No entry"
     };
 
-    const auto prefix = kStepStrings.find(step.type);
-    if (prefix == kStepStrings.end()) {
+    if (step.type < Resolution::Step::Type::INITIAL
+        || step.type > Resolution::Step::Type::NO_ENTRY) {
       continue;
     }
-
-    log_stream << "\n\t" << prefix->second << ": " << apk_assets_[step.cookie]->GetDebugName();
+    const auto prefix = kStepStrings[int(step.type) - int(Resolution::Step::Type::INITIAL)];
+    const auto& assets = GetApkAssets(step.cookie);
+    log_stream << "\n\t" << prefix << ": " << (assets ? assets->GetDebugName() : "<null>")
+               << " #" << step.cookie;
     if (!step.config_name.isEmpty()) {
       log_stream << " - " << step.config_name;
     }
@@ -1036,16 +1092,19 @@
   }
 }
 
-const std::vector<uint32_t> AssetManager2::GetBagResIdStack(uint32_t resid) const {
-  auto cached_iter = cached_bag_resid_stacks_.find(resid);
-  if (cached_iter != cached_bag_resid_stacks_.end()) {
-    return cached_iter->second;
+base::expected<const std::vector<uint32_t>*, NullOrIOError> AssetManager2::GetBagResIdStack(
+    uint32_t resid) const {
+  auto it = cached_bag_resid_stacks_.find(resid);
+  if (it != cached_bag_resid_stacks_.end()) {
+    return &it->second;
+  }
+  std::vector<uint32_t> stacks;
+  if (auto maybe_bag = GetBag(resid, stacks); UNLIKELY(IsIOError(maybe_bag))) {
+    return base::unexpected(maybe_bag.error());
   }
 
-  std::vector<uint32_t> found_resids;
-  GetBag(resid, found_resids);
-  cached_bag_resid_stacks_.emplace(resid, found_resids);
-  return found_resids;
+  it = cached_bag_resid_stacks_.emplace(resid, std::move(stacks)).first;
+  return &it->second;
 }
 
 base::expected<const ResolvedBag*, NullOrIOError> AssetManager2::ResolveBag(
@@ -1062,9 +1121,15 @@
 }
 
 base::expected<const ResolvedBag*, NullOrIOError> AssetManager2::GetBag(uint32_t resid) const {
-  std::vector<uint32_t> found_resids;
-  const auto bag = GetBag(resid, found_resids);
-  cached_bag_resid_stacks_.emplace(resid, std::move(found_resids));
+  auto resid_stacks_it = cached_bag_resid_stacks_.find(resid);
+  if (resid_stacks_it == cached_bag_resid_stacks_.end()) {
+    resid_stacks_it = cached_bag_resid_stacks_.emplace(resid, std::vector<uint32_t>{}).first;
+  }
+  const auto bag = GetBag(resid, resid_stacks_it->second);
+  if (UNLIKELY(IsIOError(bag))) {
+    cached_bag_resid_stacks_.erase(resid_stacks_it);
+    return base::unexpected(bag.error());
+  }
   return bag;
 }
 
@@ -1377,25 +1442,40 @@
 }
 
 void AssetManager2::InvalidateCaches(uint32_t diff) {
-  cached_bag_resid_stacks_.clear();
+  cached_resolved_values_.clear();
 
   if (diff == 0xffffffffu) {
     // Everything must go.
     cached_bags_.clear();
+    cached_bag_resid_stacks_.clear();
     return;
   }
 
   // Be more conservative with what gets purged. Only if the bag has other possible
   // variations with respect to what changed (diff) should we remove it.
-  for (auto iter = cached_bags_.cbegin(); iter != cached_bags_.cend();) {
-    if (diff & iter->second->type_spec_flags) {
-      iter = cached_bags_.erase(iter);
+  for (auto stack_it = cached_bag_resid_stacks_.begin();
+       stack_it != cached_bag_resid_stacks_.end();) {
+    const auto it = cached_bags_.find(stack_it->first);
+    if (it == cached_bags_.end()) {
+      stack_it = cached_bag_resid_stacks_.erase(stack_it);
+    } else if ((diff & it->second->type_spec_flags) != 0) {
+      cached_bags_.erase(it);
+      stack_it = cached_bag_resid_stacks_.erase(stack_it);
     } else {
-      ++iter;
+      ++stack_it;  // Keep the item in both caches.
     }
   }
 
-  cached_resolved_values_.clear();
+  // Need to ensure that both bag caches are consistent, as we populate them in the same function.
+  // Iterate over the cached bags to erase the items without the corresponding resid_stack cache
+  // items.
+  for (auto it = cached_bags_.begin(); it != cached_bags_.end();) {
+    if ((diff & it->second->type_spec_flags) != 0) {
+      it = cached_bags_.erase(it);
+    } else {
+      ++it;
+    }
+  }
 }
 
 uint8_t AssetManager2::GetAssignedPackageId(const LoadedPackage* package) const {
@@ -1429,6 +1509,37 @@
   }
 }
 
+AssetManager2::ScopedOperation AssetManager2::StartOperation() const {
+  ++number_of_running_scoped_operations_;
+  return ScopedOperation(*this);
+}
+
+void AssetManager2::FinishOperation() const {
+  if (number_of_running_scoped_operations_ < 1) {
+    ALOGW("Invalid FinishOperation() call when there's none happening");
+    return;
+  }
+  if (--number_of_running_scoped_operations_ == 0) {
+    for (auto&& [_, assets] : apk_assets_) {
+      assets.clear();
+    }
+  }
+}
+
+const AssetManager2::ApkAssetsPtr& AssetManager2::GetApkAssets(ApkAssetsCookie cookie) const {
+  DCHECK(number_of_running_scoped_operations_ > 0) << "Must have an operation running";
+
+  if (cookie < 0 || cookie >= apk_assets_.size()) {
+    static const ApkAssetsPtr empty{};
+    return empty;
+  }
+  auto& [wptr, res] = apk_assets_[cookie];
+  if (!res) {
+    res = wptr.promote();
+  }
+  return res;
+}
+
 Theme::Theme(AssetManager2* asset_manager) : asset_manager_(asset_manager) {
 }
 
@@ -1561,14 +1672,16 @@
     using SourceToDestinationRuntimePackageMap = std::unordered_map<int, int>;
     std::unordered_map<ApkAssetsCookie, SourceToDestinationRuntimePackageMap> src_asset_cookie_id_map;
 
-    // Determine which ApkAssets are loaded in both theme AssetManagers.
-    const auto& src_assets = source.asset_manager_->GetApkAssets();
-    for (size_t i = 0; i < src_assets.size(); i++) {
-      const ApkAssets* src_asset = src_assets[i];
+    auto op_src = source.asset_manager_->StartOperation();
+    auto op_dst = asset_manager_->StartOperation();
 
-      const auto& dest_assets = asset_manager_->GetApkAssets();
-      for (size_t j = 0; j < dest_assets.size(); j++) {
-        const ApkAssets* dest_asset = dest_assets[j];
+    for (size_t i = 0; i < source.asset_manager_->GetApkAssetsCount(); i++) {
+      const auto& src_asset = source.asset_manager_->GetApkAssets(i);
+      if (!src_asset) {
+        continue;
+      }
+      for (int j = 0; j < asset_manager_->GetApkAssetsCount(); j++) {
+        const auto& dest_asset = asset_manager_->GetApkAssets(j);
         if (src_asset != dest_asset) {
           // ResourcesManager caches and reuses ApkAssets when the same apk must be present in
           // multiple AssetManagers. Two ApkAssets point to the same version of the same resources
@@ -1694,4 +1807,11 @@
   }
 }
 
+AssetManager2::ScopedOperation::ScopedOperation(const AssetManager2& am) : am_(am) {
+}
+
+AssetManager2::ScopedOperation::~ScopedOperation() {
+  am_.FinishOperation();
+}
+
 }  // namespace android
diff --git a/libs/androidfw/Idmap.cpp b/libs/androidfw/Idmap.cpp
index 8983574..5f98b8f 100644
--- a/libs/androidfw/Idmap.cpp
+++ b/libs/androidfw/Idmap.cpp
@@ -294,14 +294,14 @@
                                dtohl(header->version), kIdmapCurrentVersion);
     return {};
   }
+  std::optional<std::string_view> target_path = ReadString(&data_ptr, &data_size, "target path");
+    if (!target_path) {
+      return {};
+    }
   std::optional<std::string_view> overlay_path = ReadString(&data_ptr, &data_size, "overlay path");
   if (!overlay_path) {
     return {};
   }
-  std::optional<std::string_view> target_path = ReadString(&data_ptr, &data_size, "target path");
-  if (!target_path) {
-    return {};
-  }
   if (!ReadString(&data_ptr, &data_size, "target name") ||
       !ReadString(&data_ptr, &data_size, "debug info")) {
     return {};
@@ -364,7 +364,7 @@
   return std::unique_ptr<LoadedIdmap>(
       new LoadedIdmap(std::string(idmap_path), header, data_header, target_entries,
                       target_inline_entries, target_inline_entry_values, configurations,
-                      overlay_entries, std::move(idmap_string_pool), *target_path, *overlay_path));
+                      overlay_entries, std::move(idmap_string_pool), *overlay_path, *target_path));
 }
 
 bool LoadedIdmap::IsUpToDate() const {
diff --git a/libs/androidfw/LoadedArsc.cpp b/libs/androidfw/LoadedArsc.cpp
index c0fdfe2..c9d5e07 100644
--- a/libs/androidfw/LoadedArsc.cpp
+++ b/libs/androidfw/LoadedArsc.cpp
@@ -323,7 +323,7 @@
 }
 
 base::expected<std::monostate, IOError> LoadedPackage::CollectConfigurations(
-    bool exclude_mipmap, std::set<ResTable_config>* out_configs) const {\
+    bool exclude_mipmap, std::set<ResTable_config>* out_configs) const {
   for (const auto& type_spec : type_specs_) {
     if (exclude_mipmap) {
       const int type_idx = type_spec.first - 1;
@@ -494,6 +494,8 @@
   util::ReadUtf16StringFromDevice(header->name, arraysize(header->name),
                                   &loaded_package->package_name_);
 
+  const bool only_overlayable = (property_flags & PROPERTY_ONLY_OVERLAYABLES) != 0;
+
   // A map of TypeSpec builders, each associated with an type index.
   // We use these to accumulate the set of Types available for a TypeSpec, and later build a single,
   // contiguous block of memory that holds all the Types together with the TypeSpec.
@@ -502,6 +504,9 @@
   ChunkIterator iter(chunk.data_ptr(), chunk.data_size());
   while (iter.HasNext()) {
     const Chunk child_chunk = iter.Next();
+    if (only_overlayable && child_chunk.type() != RES_TABLE_OVERLAYABLE_TYPE) {
+      continue;
+    }
     switch (child_chunk.type()) {
       case RES_STRING_POOL_TYPE: {
         const auto pool_address = child_chunk.header<ResChunk_header>();
@@ -655,6 +660,9 @@
                      << name_to_actor_it->first << "'.";
           return {};
         }
+        if (only_overlayable) {
+          break;
+        }
 
         // Iterate over the overlayable policy chunks contained within the overlayable chunk data
         ChunkIterator overlayable_iter(child_chunk.data_ptr(), child_chunk.data_size());
@@ -800,14 +808,21 @@
     global_string_pool_ = util::make_unique<OverlayStringPool>(loaded_idmap);
   }
 
+  const bool only_overlayable = (property_flags & PROPERTY_ONLY_OVERLAYABLES) != 0;
+
   const size_t package_count = dtohl(header->packageCount);
   size_t packages_seen = 0;
 
-  packages_.reserve(package_count);
+  if (!only_overlayable) {
+    packages_.reserve(package_count);
+  }
 
   ChunkIterator iter(chunk.data_ptr(), chunk.data_size());
   while (iter.HasNext()) {
     const Chunk child_chunk = iter.Next();
+    if (only_overlayable && child_chunk.type() != RES_TABLE_PACKAGE_TYPE) {
+      continue;
+    }
     switch (child_chunk.type()) {
       case RES_STRING_POOL_TYPE:
         // Only use the first string pool. Ignore others.
@@ -837,6 +852,10 @@
           return false;
         }
         packages_.push_back(std::move(loaded_package));
+        if (only_overlayable) {
+          // Overlayable is always in the first package, no need to process anything else.
+          return true;
+        }
       } break;
 
       default:
diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp
index 29d33da..5a63612 100644
--- a/libs/androidfw/ResourceTypes.cpp
+++ b/libs/androidfw/ResourceTypes.cpp
@@ -1769,13 +1769,21 @@
 
 status_t ResXMLTree::setTo(const void* data, size_t size, bool copyData)
 {
+    const ResChunk_header* chunk = nullptr;
+    const ResChunk_header* lastChunk = nullptr;
+
     uninit();
     mEventCode = START_DOCUMENT;
 
     if (!data || !size) {
         return (mError=BAD_TYPE);
     }
-
+    if (size < sizeof(ResXMLTree_header)) {
+        ALOGW("Bad XML block: total size %d is less than the header size %d\n",
+              int(size), int(sizeof(ResXMLTree_header)));
+        mError = BAD_TYPE;
+        goto done;
+    }
     if (copyData) {
         mOwnedData = malloc(size);
         if (mOwnedData == NULL) {
@@ -1792,9 +1800,15 @@
              (int)dtohs(mHeader->header.headerSize),
              (int)dtohl(mHeader->header.size), (int)size);
         mError = BAD_TYPE;
-        restart();
-        return mError;
+        goto done;
     }
+    if (dtohs(mHeader->header.type) != RES_XML_TYPE) {
+        ALOGW("Bad XML block: expected root block type %d, got %d\n",
+            int(RES_XML_TYPE), int(dtohs(mHeader->header.type)));
+        mError = BAD_TYPE;
+        goto done;
+    }
+
     mDataEnd = ((const uint8_t*)mHeader) + mSize;
 
     mStrings.uninit();
@@ -1804,9 +1818,8 @@
 
     // First look for a couple interesting chunks: the string block
     // and first XML node.
-    const ResChunk_header* chunk =
-        (const ResChunk_header*)(((const uint8_t*)mHeader) + dtohs(mHeader->header.headerSize));
-    const ResChunk_header* lastChunk = chunk;
+    chunk = (const ResChunk_header*)(((const uint8_t*)mHeader) + dtohs(mHeader->header.headerSize));
+    lastChunk = chunk;
     while (((const uint8_t*)chunk) < (mDataEnd-sizeof(ResChunk_header)) &&
            ((const uint8_t*)chunk) < (mDataEnd-dtohl(chunk->size))) {
         status_t err = validate_chunk(chunk, sizeof(ResChunk_header), mDataEnd, "XML");
@@ -1860,7 +1873,11 @@
     mError = mStrings.getError();
 
 done:
-    restart();
+    if (mError) {
+        uninit();
+    } else {
+        restart();
+    }
     return mError;
 }
 
@@ -5436,37 +5453,66 @@
     return U16StringToInt(s, len, outValue);
 }
 
-bool ResTable::stringToFloat(const char16_t* s, size_t len, Res_value* outValue)
-{
-    while (len > 0 && isspace16(*s)) {
-        s++;
-        len--;
+template <typename T>
+bool parseFloatingPoint(const char16_t* inBuf, size_t inLen, char* tempBuf,
+                                  const char** outEnd, T& out){
+    while (inLen > 0 && isspace16(*inBuf)) {
+        inBuf++;
+        inLen--;
     }
 
-    if (len <= 0) {
+    if (inLen <= 0) {
         return false;
     }
 
-    char buf[128];
     int i=0;
-    while (len > 0 && *s != 0 && i < 126) {
-        if (*s > 255) {
+    while (inLen > 0 && *inBuf != 0 && i < 126) {
+        if (*inBuf > 255) {
             return false;
         }
-        buf[i++] = *s++;
-        len--;
+        tempBuf[i++] = *inBuf++;
+        inLen--;
     }
 
-    if (len > 0) {
+    if (inLen > 0) {
         return false;
     }
-    if ((buf[0] < '0' || buf[0] > '9') && buf[0] != '.' && buf[0] != '-' && buf[0] != '+') {
+    if ((tempBuf[0] < '0' || tempBuf[0] > '9') && tempBuf[0] != '.' && tempBuf[0] != '-' && tempBuf[0] != '+') {
         return false;
     }
 
-    buf[i] = 0;
-    const char* end;
-    float f = strtof(buf, (char**)&end);
+    tempBuf[i] = 0;
+    if constexpr(std::is_same_v<T, float>) {
+        out = strtof(tempBuf, (char**)outEnd);
+    } else {
+        out = strtod(tempBuf, (char**)outEnd);
+    }
+    return true;
+}
+
+bool ResTable::stringToDouble(const char16_t* s, size_t len, double& d){
+    char buf[128];
+    const char* end = nullptr;
+    if (!parseFloatingPoint(s, len, buf, &end, d)) {
+        return false;
+    }
+
+    while (*end != 0 && isspace((unsigned char)*end)) {
+        end++;
+    }
+
+    return *end == 0;
+}
+
+bool ResTable::stringToFloat(const char16_t* s, size_t len, Res_value* outValue)
+{
+    char buf[128];
+    const char* end = nullptr;
+    float f;
+
+    if (!parseFloatingPoint(s, len, buf, &end, f)) {
+        return false;
+    }
 
     if (*end != 0 && !isspace((unsigned char)*end)) {
         // Might be a unit...
diff --git a/libs/androidfw/ZipFileRO.cpp b/libs/androidfw/ZipFileRO.cpp
index 52e7a70..d7b5914 100644
--- a/libs/androidfw/ZipFileRO.cpp
+++ b/libs/androidfw/ZipFileRO.cpp
@@ -40,17 +40,24 @@
 public:
     ZipEntry entry;
     std::string_view name;
-    void *cookie;
+    void *cookie = nullptr;
 
-    _ZipEntryRO() : cookie(NULL) {}
+    _ZipEntryRO() = default;
 
     ~_ZipEntryRO() {
-      EndIteration(cookie);
+        EndIteration(cookie);
+    }
+
+    android::ZipEntryRO convertToPtr() {
+        _ZipEntryRO* result = new _ZipEntryRO;
+        result->entry = std::move(this->entry);
+        result->name = std::move(this->name);
+        result->cookie = std::exchange(this->cookie, nullptr);
+        return result;
     }
 
 private:
-    _ZipEntryRO(const _ZipEntryRO& other);
-    _ZipEntryRO& operator=(const _ZipEntryRO& other);
+    DISALLOW_COPY_AND_ASSIGN(_ZipEntryRO);
 };
 
 ZipFileRO::~ZipFileRO() {
@@ -94,17 +101,15 @@
 
 ZipEntryRO ZipFileRO::findEntryByName(const char* entryName) const
 {
-    _ZipEntryRO* data = new _ZipEntryRO;
+    _ZipEntryRO data;
+    data.name = entryName;
 
-    data->name = entryName;
-
-    const int32_t error = FindEntry(mHandle, entryName, &(data->entry));
+    const int32_t error = FindEntry(mHandle, entryName, &(data.entry));
     if (error) {
-        delete data;
-        return NULL;
+        return nullptr;
     }
 
-    return (ZipEntryRO) data;
+    return data.convertToPtr();
 }
 
 /*
@@ -143,35 +148,50 @@
 }
 
 bool ZipFileRO::startIteration(void** cookie) {
-  return startIteration(cookie, NULL, NULL);
+  return startIteration(cookie, nullptr, nullptr);
 }
 
-bool ZipFileRO::startIteration(void** cookie, const char* prefix, const char* suffix)
-{
-    _ZipEntryRO* ze = new _ZipEntryRO;
-    int32_t error = StartIteration(mHandle, &(ze->cookie),
+bool ZipFileRO::startIteration(void** cookie, const char* prefix, const char* suffix) {
+    auto result = startIterationOrError(prefix, suffix);
+    if (!result.ok()) {
+        return false;
+    }
+    *cookie = result.value();
+    return true;
+}
+
+base::expected<void*, int32_t>
+ZipFileRO::startIterationOrError(const char* prefix, const char* suffix) {
+    _ZipEntryRO ze;
+    int32_t error = StartIteration(mHandle, &(ze.cookie),
                                    prefix ? prefix : "", suffix ? suffix : "");
     if (error) {
         ALOGW("Could not start iteration over %s: %s", mFileName != NULL ? mFileName : "<null>",
                 ErrorCodeString(error));
-        delete ze;
-        return false;
+        return base::unexpected(error);
     }
 
-    *cookie = ze;
-    return true;
+    return ze.convertToPtr();
 }
 
-ZipEntryRO ZipFileRO::nextEntry(void* cookie)
-{
+ZipEntryRO ZipFileRO::nextEntry(void* cookie) {
+    auto result = nextEntryOrError(cookie);
+    if (!result.ok()) {
+        return nullptr;
+    }
+    return result.value();
+}
+
+base::expected<ZipEntryRO, int32_t> ZipFileRO::nextEntryOrError(void* cookie) {
     _ZipEntryRO* ze = reinterpret_cast<_ZipEntryRO*>(cookie);
     int32_t error = Next(ze->cookie, &(ze->entry), &(ze->name));
     if (error) {
         if (error != -1) {
             ALOGW("Error iteration over %s: %s", mFileName != NULL ? mFileName : "<null>",
                     ErrorCodeString(error));
+            return base::unexpected(error);
         }
-        return NULL;
+        return nullptr;
     }
 
     return &(ze->entry);
diff --git a/libs/androidfw/include/androidfw/ApkAssets.h b/libs/androidfw/include/androidfw/ApkAssets.h
index 6f88f41..1fa6752 100644
--- a/libs/androidfw/include/androidfw/ApkAssets.h
+++ b/libs/androidfw/include/androidfw/ApkAssets.h
@@ -17,12 +17,13 @@
 #ifndef APKASSETS_H_
 #define APKASSETS_H_
 
+#include <utils/RefBase.h>
+
 #include <memory>
 #include <string>
 
 #include "android-base/macros.h"
 #include "android-base/unique_fd.h"
-
 #include "androidfw/Asset.h"
 #include "androidfw/AssetsProvider.h"
 #include "androidfw/Idmap.h"
@@ -31,34 +32,33 @@
 
 namespace android {
 
+class ApkAssets;
+
+using ApkAssetsPtr = sp<ApkAssets>;
+
 // Holds an APK.
-class ApkAssets {
+class ApkAssets : public RefBase {
  public:
   // Creates an ApkAssets from a path on device.
-  static std::unique_ptr<ApkAssets> Load(const std::string& path,
-                                         package_property_t flags = 0U);
+  static ApkAssetsPtr Load(const std::string& path, package_property_t flags = 0U);
 
   // Creates an ApkAssets from an open file descriptor.
-  static std::unique_ptr<ApkAssets> LoadFromFd(base::unique_fd fd,
-                                               const std::string& debug_name,
-                                               package_property_t flags = 0U,
-                                               off64_t offset = 0,
-                                               off64_t len = AssetsProvider::kUnknownLength);
+  static ApkAssetsPtr LoadFromFd(base::unique_fd fd, const std::string& debug_name,
+                                 package_property_t flags = 0U, off64_t offset = 0,
+                                 off64_t len = AssetsProvider::kUnknownLength);
 
   // Creates an ApkAssets from an AssetProvider.
   // The ApkAssets will take care of destroying the AssetsProvider when it is destroyed.
-  static std::unique_ptr<ApkAssets> Load(std::unique_ptr<AssetsProvider> assets,
-                                         package_property_t flags = 0U);
+  static ApkAssetsPtr Load(std::unique_ptr<AssetsProvider> assets, package_property_t flags = 0U);
 
   // Creates an ApkAssets from the given asset file representing a resources.arsc.
-  static std::unique_ptr<ApkAssets> LoadTable(std::unique_ptr<Asset> resources_asset,
-                                              std::unique_ptr<AssetsProvider> assets,
-                                              package_property_t flags = 0U);
+  static ApkAssetsPtr LoadTable(std::unique_ptr<Asset> resources_asset,
+                                std::unique_ptr<AssetsProvider> assets,
+                                package_property_t flags = 0U);
 
   // Creates an ApkAssets from an IDMAP, which contains the original APK path, and the overlay
   // data.
-  static std::unique_ptr<ApkAssets> LoadOverlay(const std::string& idmap_path,
-                                                package_property_t flags = 0U);
+  static ApkAssetsPtr LoadOverlay(const std::string& idmap_path, package_property_t flags = 0U);
 
   // Path to the contents of the ApkAssets on disk. The path could represent an APk, a directory,
   // or some other file type.
@@ -95,22 +95,27 @@
   bool IsUpToDate() const;
 
  private:
-  static std::unique_ptr<ApkAssets> LoadImpl(std::unique_ptr<AssetsProvider> assets,
-                                             package_property_t property_flags,
-                                             std::unique_ptr<Asset> idmap_asset,
-                                             std::unique_ptr<LoadedIdmap> loaded_idmap);
+  static ApkAssetsPtr LoadImpl(std::unique_ptr<AssetsProvider> assets,
+                               package_property_t property_flags,
+                               std::unique_ptr<Asset> idmap_asset,
+                               std::unique_ptr<LoadedIdmap> loaded_idmap);
 
-  static std::unique_ptr<ApkAssets> LoadImpl(std::unique_ptr<Asset> resources_asset,
-                                             std::unique_ptr<AssetsProvider> assets,
-                                             package_property_t property_flags,
-                                             std::unique_ptr<Asset> idmap_asset,
-                                             std::unique_ptr<LoadedIdmap> loaded_idmap);
+  static ApkAssetsPtr LoadImpl(std::unique_ptr<Asset> resources_asset,
+                               std::unique_ptr<AssetsProvider> assets,
+                               package_property_t property_flags,
+                               std::unique_ptr<Asset> idmap_asset,
+                               std::unique_ptr<LoadedIdmap> loaded_idmap);
 
-  ApkAssets(std::unique_ptr<Asset> resources_asset,
-            std::unique_ptr<LoadedArsc> loaded_arsc,
-            std::unique_ptr<AssetsProvider> assets,
-            package_property_t property_flags,
-            std::unique_ptr<Asset> idmap_asset,
+  // Allows us to make it possible to call make_shared from inside the class but still keeps the
+  // ctor 'private' for all means and purposes.
+  struct PrivateConstructorUtil {
+    explicit PrivateConstructorUtil() = default;
+  };
+
+ public:
+  ApkAssets(PrivateConstructorUtil, std::unique_ptr<Asset> resources_asset,
+            std::unique_ptr<LoadedArsc> loaded_arsc, std::unique_ptr<AssetsProvider> assets,
+            package_property_t property_flags, std::unique_ptr<Asset> idmap_asset,
             std::unique_ptr<LoadedIdmap> loaded_idmap);
 
   std::unique_ptr<Asset> resources_asset_;
diff --git a/libs/androidfw/include/androidfw/AssetManager2.h b/libs/androidfw/include/androidfw/AssetManager2.h
index f10cb9b..f611d0d 100644
--- a/libs/androidfw/include/androidfw/AssetManager2.h
+++ b/libs/androidfw/include/androidfw/AssetManager2.h
@@ -17,14 +17,16 @@
 #ifndef ANDROIDFW_ASSETMANAGER2_H_
 #define ANDROIDFW_ASSETMANAGER2_H_
 
-#include "android-base/function_ref.h"
-#include "android-base/macros.h"
+#include <utils/RefBase.h>
 
 #include <array>
 #include <limits>
 #include <set>
+#include <span>
 #include <unordered_map>
 
+#include "android-base/function_ref.h"
+#include "android-base/macros.h"
 #include "androidfw/ApkAssets.h"
 #include "androidfw/Asset.h"
 #include "androidfw/AssetManager.h"
@@ -94,8 +96,25 @@
     size_t entry_len = 0u;
   };
 
-  AssetManager2();
+  using ApkAssetsPtr = sp<const ApkAssets>;
+  using ApkAssetsWPtr = wp<const ApkAssets>;
+  using ApkAssetsList = std::span<const ApkAssetsPtr>;
+
+  AssetManager2() = default;
   explicit AssetManager2(AssetManager2&& other) = default;
+  AssetManager2(ApkAssetsList apk_assets, const ResTable_config& configuration);
+
+  struct ScopedOperation {
+    DISALLOW_COPY_AND_ASSIGN(ScopedOperation);
+    friend AssetManager2;
+    const AssetManager2& am_;
+    ScopedOperation(const AssetManager2& am);
+
+   public:
+    ~ScopedOperation();
+  };
+
+  [[nodiscard]] ScopedOperation StartOperation() const;
 
   // Sets/resets the underlying ApkAssets for this AssetManager. The ApkAssets
   // are not owned by the AssetManager, and must have a longer lifetime.
@@ -103,10 +122,12 @@
   // Only pass invalidate_caches=false when it is known that the structure
   // change in ApkAssets is due to a safe addition of resources with completely
   // new resource IDs.
-  bool SetApkAssets(std::vector<const ApkAssets*> apk_assets, bool invalidate_caches = true);
+  bool SetApkAssets(ApkAssetsList apk_assets, bool invalidate_caches = true);
+  bool SetApkAssets(std::initializer_list<ApkAssetsPtr> apk_assets, bool invalidate_caches = true);
 
-  inline const std::vector<const ApkAssets*>& GetApkAssets() const {
-    return apk_assets_;
+  const ApkAssetsPtr& GetApkAssets(ApkAssetsCookie cookie) const;
+  int GetApkAssetsCount() const {
+    return int(apk_assets_.size());
   }
 
   // Returns the string pool for the given asset cookie.
@@ -222,9 +243,14 @@
     friend AssetManager2;
     friend Theme;
     SelectedValue() = default;
-    SelectedValue(const ResolvedBag* bag, const ResolvedBag::Entry& entry) :
-        cookie(entry.cookie), data(entry.value.data), type(entry.value.dataType),
-        flags(bag->type_spec_flags), resid(0U), config({}) {};
+    SelectedValue(const ResolvedBag* bag, const ResolvedBag::Entry& entry)
+        : cookie(entry.cookie),
+          data(entry.value.data),
+          type(entry.value.dataType),
+          flags(bag->type_spec_flags),
+          resid(0U),
+          config() {
+    }
 
     // The cookie representing the ApkAssets in which the value resides.
     ApkAssetsCookie cookie = kInvalidCookie;
@@ -306,7 +332,8 @@
   // resource data failed.
   base::expected<uint32_t, NullOrIOError> GetResourceTypeSpecFlags(uint32_t resid) const;
 
-  const std::vector<uint32_t> GetBagResIdStack(uint32_t resid) const;
+  base::expected<const std::vector<uint32_t>*, NullOrIOError> GetBagResIdStack(
+      uint32_t resid) const;
 
   // Resets the resource resolution structures in preparation for the next resource retrieval.
   void ResetResourceResolution() const;
@@ -399,7 +426,7 @@
 
   // Assigns package IDs to all shared library ApkAssets.
   // Should be called whenever the ApkAssets are changed.
-  void BuildDynamicRefTable();
+  void BuildDynamicRefTable(ApkAssetsList assets);
 
   // Purge all resources that are cached and vary by the configuration axis denoted by the
   // bitmask `diff`.
@@ -410,16 +437,23 @@
   void RebuildFilterList();
 
   // Retrieves the APK paths of overlays that overlay non-system packages.
-  std::set<const ApkAssets*> GetNonSystemOverlays() const;
+  std::set<ApkAssetsPtr> GetNonSystemOverlays() const;
 
   // AssetManager2::GetBag(resid) wraps this function to track which resource ids have already
   // been seen while traversing bag parents.
   base::expected<const ResolvedBag*, NullOrIOError> GetBag(
       uint32_t resid, std::vector<uint32_t>& child_resids) const;
 
+  // Finish an operation that was running with the current asset manager, and clean up the
+  // promoted apk assets when the last operation ends.
+  void FinishOperation() const;
+
   // The ordered list of ApkAssets to search. These are not owned by the AssetManager, and must
   // have a longer lifetime.
-  std::vector<const ApkAssets*> apk_assets_;
+  // The second pair element is the promoted version of the assets, that is held for the duration
+  // of the currently running operation. FinishOperation() clears all promoted assets to make sure
+  // they can be released when the system needs that.
+  mutable std::vector<std::pair<ApkAssetsWPtr, ApkAssetsPtr>> apk_assets_;
 
   // DynamicRefTables for shared library package resolution.
   // These are ordered according to apk_assets_. The mappings may change depending on what is
@@ -433,7 +467,7 @@
 
   // The current configuration set for this AssetManager. When this changes, cached resources
   // may need to be purged.
-  ResTable_config configuration_;
+  ResTable_config configuration_ = {};
 
   // Cached set of bags. These are cached because they can inherit keys from parent bags,
   // which involves some calculation.
@@ -446,6 +480,10 @@
   // Cached set of resolved resource values.
   mutable std::unordered_map<uint32_t, SelectedValue> cached_resolved_values_;
 
+  // Tracking the number of the started operations running with the current AssetManager.
+  // Finishing the last one clears all promoted apk assets.
+  mutable int number_of_running_scoped_operations_ = 0;
+
   // Whether or not to save resource resolution steps
   bool resource_resolution_logging_enabled_ = false;
 
@@ -463,10 +501,10 @@
       // Marks what kind of override this step was.
       Type type;
 
+      ApkAssetsCookie cookie = kInvalidCookie;
+
       // Built name of configuration for this step.
       String8 config_name;
-
-      ApkAssetsCookie cookie = kInvalidCookie;
     };
 
     // Last resolved resource ID.
diff --git a/libs/androidfw/include/androidfw/Errors.h b/libs/androidfw/include/androidfw/Errors.h
index 948162d..6667747 100644
--- a/libs/androidfw/include/androidfw/Errors.h
+++ b/libs/androidfw/include/androidfw/Errors.h
@@ -34,7 +34,7 @@
 
 // Checks whether the result holds an unexpected I/O error.
 template <typename T>
-static inline bool IsIOError(const base::expected<T, NullOrIOError> result) {
+static inline bool IsIOError(const base::expected<T, NullOrIOError>& result) {
   return !result.has_value() && std::holds_alternative<IOError>(result.error());
 }
 
diff --git a/libs/androidfw/include/androidfw/IDiagnostics.h b/libs/androidfw/include/androidfw/IDiagnostics.h
index 4d5844e..865a298 100644
--- a/libs/androidfw/include/androidfw/IDiagnostics.h
+++ b/libs/androidfw/include/androidfw/IDiagnostics.h
@@ -86,6 +86,17 @@
     DiagMessageActual actual = message.Build();
     Log(Level::Note, actual);
   }
+
+  virtual void SetVerbose(bool val) {
+    verbose_ = val;
+  }
+
+  virtual bool IsVerbose() {
+    return verbose_;
+  }
+
+  private:
+    bool verbose_ = false;
 };
 
 class SourcePathDiagnostics : public IDiagnostics {
@@ -105,6 +116,14 @@
     return error;
   }
 
+  void SetVerbose(bool val) override {
+    diag_->SetVerbose(val);
+  }
+
+  bool IsVerbose() override {
+    return diag_->IsVerbose();
+  }
+
  private:
   Source source_;
   IDiagnostics* diag_;
diff --git a/libs/androidfw/include/androidfw/LoadedArsc.h b/libs/androidfw/include/androidfw/LoadedArsc.h
index 4d12885..3a72871 100644
--- a/libs/androidfw/include/androidfw/LoadedArsc.h
+++ b/libs/androidfw/include/androidfw/LoadedArsc.h
@@ -96,6 +96,9 @@
   // The apk assets is owned by the application running in this process and incremental crash
   // protections for this APK must be disabled.
   PROPERTY_DISABLE_INCREMENTAL_HARDENING = 1U << 4U,
+
+  // The apk assets only contain the overlayable declarations information.
+  PROPERTY_ONLY_OVERLAYABLES = 1U << 5U,
 };
 
 struct OverlayableInfo {
diff --git a/libs/androidfw/include/androidfw/MutexGuard.h b/libs/androidfw/include/androidfw/MutexGuard.h
index 6fc6d64..b6093db 100644
--- a/libs/androidfw/include/androidfw/MutexGuard.h
+++ b/libs/androidfw/include/androidfw/MutexGuard.h
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-#ifndef ANDROIDFW_MUTEXGUARD_H
-#define ANDROIDFW_MUTEXGUARD_H
+#pragma once
 
 #include <mutex>
 #include <optional>
 #include <type_traits>
+#include <utility>
 
 #include "android-base/macros.h"
 
@@ -45,20 +45,25 @@
 //
 template <typename T>
 class Guarded {
-  static_assert(!std::is_pointer<T>::value, "T must not be a raw pointer");
+  static_assert(!std::is_pointer_v<T>, "T must not be a raw pointer");
 
  public:
-  Guarded() : guarded_(std::in_place, T()) {
+  Guarded() : guarded_(std::in_place) {
   }
 
   explicit Guarded(const T& guarded) : guarded_(std::in_place, guarded) {
   }
 
-  explicit Guarded(T&& guarded) : guarded_(std::in_place, std::forward<T>(guarded)) {
+  explicit Guarded(T&& guarded) : guarded_(std::in_place, std::move(guarded)) {
   }
 
-  ~Guarded() {
-    std::lock_guard<std::mutex> scoped_lock(lock_);
+  // Unfortunately, some legacy designs make even class deletion race-prone, where some other
+  // thread may have not finished working with the same object. For those cases one may destroy the
+  // object under a lock (but please fix your code, at least eventually!).
+  template <class Func>
+  void safeDelete(Func f) {
+    std::lock_guard scoped_lock(lock_);
+    f(guarded_ ? &guarded_.value() : nullptr);
     guarded_.reset();
   }
 
@@ -96,5 +101,3 @@
 };
 
 }  // namespace android
-
-#endif  // ANDROIDFW_MUTEXGUARD_H
diff --git a/libs/androidfw/include/androidfw/ResourceTypes.h b/libs/androidfw/include/androidfw/ResourceTypes.h
index 631bda4..6de1d1e 100644
--- a/libs/androidfw/include/androidfw/ResourceTypes.h
+++ b/libs/androidfw/include/androidfw/ResourceTypes.h
@@ -1870,6 +1870,8 @@
   DataValue data_value;
   std::string data_string_value;
   std::optional<android::base::borrowed_fd> data_binary_value;
+  off64_t binary_data_offset;
+  size_t binary_data_size;
   std::string configuration;
 };
 
@@ -2162,6 +2164,7 @@
 
     static bool stringToInt(const char16_t* s, size_t len, Res_value* outValue);
     static bool stringToFloat(const char16_t* s, size_t len, Res_value* outValue);
+    static bool stringToDouble(const char16_t* s, size_t len, double& outValue);
 
     // Used with stringToValue.
     class Accessor
diff --git a/libs/androidfw/include/androidfw/ZipFileRO.h b/libs/androidfw/include/androidfw/ZipFileRO.h
index 10f6d06..be1f98f 100644
--- a/libs/androidfw/include/androidfw/ZipFileRO.h
+++ b/libs/androidfw/include/androidfw/ZipFileRO.h
@@ -37,6 +37,8 @@
 #include <unistd.h>
 #include <time.h>
 
+#include <android-base/expected.h>
+
 #include <util/map_ptr.h>
 
 #include <utils/Compat.h>
@@ -102,6 +104,11 @@
      */
     bool startIteration(void** cookie);
     bool startIteration(void** cookie, const char* prefix, const char* suffix);
+    /*
+     * Same as above, but returns the error code in case of failure.
+     * #see libziparchive/zip_error.h.
+     */
+    base::expected<void*, int32_t> startIterationOrError(const char* prefix, const char* suffix);
 
     /**
      * Return the next entry in iteration order, or NULL if there are no more
@@ -109,6 +116,12 @@
      */
     ZipEntryRO nextEntry(void* cookie);
 
+    /**
+     * Same as above, but returns the error code in case of failure.
+     * #see libziparchive/zip_error.h.
+     */
+    base::expected<ZipEntryRO, int32_t> nextEntryOrError(void* cookie);
+
     void endIteration(void* cookie);
 
     void releaseEntry(ZipEntryRO entry) const;
diff --git a/libs/androidfw/tests/ApkAssets_test.cpp b/libs/androidfw/tests/ApkAssets_test.cpp
index 19db25c..70326b7 100644
--- a/libs/androidfw/tests/ApkAssets_test.cpp
+++ b/libs/androidfw/tests/ApkAssets_test.cpp
@@ -35,8 +35,7 @@
 namespace android {
 
 TEST(ApkAssetsTest, LoadApk) {
-  std::unique_ptr<const ApkAssets> loaded_apk =
-      ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
+  auto loaded_apk = ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
   ASSERT_THAT(loaded_apk, NotNull());
 
   const LoadedArsc* loaded_arsc = loaded_apk->GetLoadedArsc();
@@ -50,7 +49,7 @@
   unique_fd fd(::open(path.c_str(), O_RDONLY | O_BINARY));
   ASSERT_THAT(fd.get(), Ge(0));
 
-  std::unique_ptr<const ApkAssets> loaded_apk = ApkAssets::LoadFromFd(std::move(fd), path);
+  auto loaded_apk = ApkAssets::LoadFromFd(std::move(fd), path);
   ASSERT_THAT(loaded_apk, NotNull());
 
   const LoadedArsc* loaded_arsc = loaded_apk->GetLoadedArsc();
@@ -60,8 +59,7 @@
 }
 
 TEST(ApkAssetsTest, LoadApkAsSharedLibrary) {
-  std::unique_ptr<const ApkAssets> loaded_apk =
-      ApkAssets::Load(GetTestDataPath() + "/appaslib/appaslib.apk");
+  auto loaded_apk = ApkAssets::Load(GetTestDataPath() + "/appaslib/appaslib.apk");
   ASSERT_THAT(loaded_apk, NotNull());
 
   const LoadedArsc* loaded_arsc = loaded_apk->GetLoadedArsc();
@@ -79,8 +77,7 @@
 }
 
 TEST(ApkAssetsTest, CreateAndDestroyAssetKeepsApkAssetsOpen) {
-  std::unique_ptr<const ApkAssets> loaded_apk =
-      ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
+  auto loaded_apk = ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
   ASSERT_THAT(loaded_apk, NotNull());
 
   { ASSERT_THAT(loaded_apk->GetAssetsProvider()->Open("res/layout/main.xml",
@@ -91,8 +88,7 @@
 }
 
 TEST(ApkAssetsTest, OpenUncompressedAssetFd) {
-  std::unique_ptr<const ApkAssets> loaded_apk =
-      ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
+  auto loaded_apk = ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
   ASSERT_THAT(loaded_apk, NotNull());
 
   auto asset = loaded_apk->GetAssetsProvider()->Open("assets/uncompressed.txt",
diff --git a/libs/androidfw/tests/ApkParsing_test.cpp b/libs/androidfw/tests/ApkParsing_test.cpp
index 62e88c6..ac1dc9b 100644
--- a/libs/androidfw/tests/ApkParsing_test.cpp
+++ b/libs/androidfw/tests/ApkParsing_test.cpp
@@ -74,4 +74,10 @@
   auto lastSlash = util::ValidLibraryPathLastSlash(path, false, false);
   ASSERT_THAT(lastSlash, IsNull());
 }
+
+TEST(ApkParsingTest, InvalidPrefix) {
+  const char* path = "assets/libhello.so";
+  auto lastSlash = util::ValidLibraryPathLastSlash(path, false, false);
+  ASSERT_THAT(lastSlash, IsNull());
+}
 }
\ No newline at end of file
diff --git a/libs/androidfw/tests/AssetManager2_bench.cpp b/libs/androidfw/tests/AssetManager2_bench.cpp
index c7ae618..6fae72a 100644
--- a/libs/androidfw/tests/AssetManager2_bench.cpp
+++ b/libs/androidfw/tests/AssetManager2_bench.cpp
@@ -38,9 +38,9 @@
 static void BM_AssetManagerLoadAssets(benchmark::State& state) {
   std::string path = GetTestDataPath() + "/basic/basic.apk";
   while (state.KeepRunning()) {
-    std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(path);
+    auto apk = ApkAssets::Load(path);
     AssetManager2 assets;
-    assets.SetApkAssets({apk.get()});
+    assets.SetApkAssets({apk});
   }
 }
 BENCHMARK(BM_AssetManagerLoadAssets);
@@ -61,9 +61,9 @@
 static void BM_AssetManagerLoadFrameworkAssets(benchmark::State& state) {
   std::string path = kFrameworkPath;
   while (state.KeepRunning()) {
-    std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(path);
+    auto apk = ApkAssets::Load(path);
     AssetManager2 assets;
-    assets.SetApkAssets({apk.get()});
+    assets.SetApkAssets({apk});
   }
 }
 BENCHMARK(BM_AssetManagerLoadFrameworkAssets);
@@ -129,14 +129,14 @@
 BENCHMARK(BM_AssetManagerGetResourceFrameworkLocaleOld);
 
 static void BM_AssetManagerGetBag(benchmark::State& state) {
-  std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(GetTestDataPath() + "/styles/styles.apk");
+  auto apk = ApkAssets::Load(GetTestDataPath() + "/styles/styles.apk");
   if (apk == nullptr) {
     state.SkipWithError("Failed to load assets");
     return;
   }
 
   AssetManager2 assets;
-  assets.SetApkAssets({apk.get()});
+  assets.SetApkAssets({apk});
 
   while (state.KeepRunning()) {
     auto bag = assets.GetBag(app::R::style::StyleTwo);
@@ -181,14 +181,14 @@
 BENCHMARK(BM_AssetManagerGetBagOld);
 
 static void BM_AssetManagerGetResourceLocales(benchmark::State& state) {
-  std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(kFrameworkPath);
+  auto apk = ApkAssets::Load(kFrameworkPath);
   if (apk == nullptr) {
     state.SkipWithError("Failed to load assets");
     return;
   }
 
   AssetManager2 assets;
-  assets.SetApkAssets({apk.get()});
+  assets.SetApkAssets({apk});
 
   while (state.KeepRunning()) {
     std::set<std::string> locales =
@@ -217,14 +217,14 @@
 BENCHMARK(BM_AssetManagerGetResourceLocalesOld);
 
 static void BM_AssetManagerSetConfigurationFramework(benchmark::State& state) {
-  std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(kFrameworkPath);
+  auto apk = ApkAssets::Load(kFrameworkPath);
   if (apk == nullptr) {
     state.SkipWithError("Failed to load assets");
     return;
   }
 
   AssetManager2 assets;
-  assets.SetApkAssets({apk.get()});
+  assets.SetApkAssets({apk});
 
   ResTable_config config;
   memset(&config, 0, sizeof(config));
diff --git a/libs/androidfw/tests/AssetManager2_test.cpp b/libs/androidfw/tests/AssetManager2_test.cpp
index 4394740..df3fa02 100644
--- a/libs/androidfw/tests/AssetManager2_test.cpp
+++ b/libs/androidfw/tests/AssetManager2_test.cpp
@@ -91,19 +91,19 @@
   }
 
  protected:
-  std::unique_ptr<const ApkAssets> basic_assets_;
-  std::unique_ptr<const ApkAssets> basic_de_fr_assets_;
-  std::unique_ptr<const ApkAssets> basic_xhdpi_assets_;
-  std::unique_ptr<const ApkAssets> basic_xxhdpi_assets_;
-  std::unique_ptr<const ApkAssets> style_assets_;
-  std::unique_ptr<const ApkAssets> lib_one_assets_;
-  std::unique_ptr<const ApkAssets> lib_two_assets_;
-  std::unique_ptr<const ApkAssets> libclient_assets_;
-  std::unique_ptr<const ApkAssets> appaslib_assets_;
-  std::unique_ptr<const ApkAssets> system_assets_;
-  std::unique_ptr<const ApkAssets> app_assets_;
-  std::unique_ptr<const ApkAssets> overlay_assets_;
-  std::unique_ptr<const ApkAssets> overlayable_assets_;
+  AssetManager2::ApkAssetsPtr basic_assets_;
+  AssetManager2::ApkAssetsPtr basic_de_fr_assets_;
+  AssetManager2::ApkAssetsPtr basic_xhdpi_assets_;
+  AssetManager2::ApkAssetsPtr basic_xxhdpi_assets_;
+  AssetManager2::ApkAssetsPtr style_assets_;
+  AssetManager2::ApkAssetsPtr lib_one_assets_;
+  AssetManager2::ApkAssetsPtr lib_two_assets_;
+  AssetManager2::ApkAssetsPtr libclient_assets_;
+  AssetManager2::ApkAssetsPtr appaslib_assets_;
+  AssetManager2::ApkAssetsPtr system_assets_;
+  AssetManager2::ApkAssetsPtr app_assets_;
+  AssetManager2::ApkAssetsPtr overlay_assets_;
+  AssetManager2::ApkAssetsPtr overlayable_assets_;
 };
 
 TEST_F(AssetManager2Test, FindsResourceFromSingleApkAssets) {
@@ -114,7 +114,7 @@
 
   AssetManager2 assetmanager;
   assetmanager.SetConfiguration(desired_config);
-  assetmanager.SetApkAssets({basic_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_});
 
   auto value = assetmanager.GetResource(basic::R::string::test1);
   ASSERT_TRUE(value.has_value());
@@ -138,7 +138,7 @@
 
   AssetManager2 assetmanager;
   assetmanager.SetConfiguration(desired_config);
-  assetmanager.SetApkAssets({basic_assets_.get(), basic_de_fr_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_, basic_de_fr_assets_});
 
   auto value = assetmanager.GetResource(basic::R::string::test1);
   ASSERT_TRUE(value.has_value());
@@ -159,8 +159,7 @@
 
   // libclient is built with lib_one and then lib_two in order.
   // Reverse the order to test that proper package ID re-assignment is happening.
-  assetmanager.SetApkAssets(
-      {lib_two_assets_.get(), lib_one_assets_.get(), libclient_assets_.get()});
+  assetmanager.SetApkAssets({lib_two_assets_, lib_one_assets_, libclient_assets_});
 
   auto value = assetmanager.GetResource(libclient::R::string::foo_one);
   ASSERT_TRUE(value.has_value());
@@ -195,7 +194,7 @@
 
 TEST_F(AssetManager2Test, FindsResourceFromAppLoadedAsSharedLibrary) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({appaslib_assets_.get()});
+  assetmanager.SetApkAssets({appaslib_assets_});
 
   // The appaslib package will have been assigned the package ID 0x02.
   auto value = assetmanager.GetResource(fix_package_id(appaslib::R::integer::number1, 0x02));
@@ -206,27 +205,26 @@
 
 TEST_F(AssetManager2Test, AssignsOverlayPackageIdLast) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets(
-      {overlayable_assets_.get(), overlay_assets_.get(), lib_one_assets_.get()});
+  assetmanager.SetApkAssets({overlayable_assets_, overlay_assets_, lib_one_assets_});
 
-  auto apk_assets = assetmanager.GetApkAssets();
-  ASSERT_EQ(3, apk_assets.size());
-  ASSERT_EQ(overlayable_assets_.get(), apk_assets[0]);
-  ASSERT_EQ(overlay_assets_.get(), apk_assets[1]);
-  ASSERT_EQ(lib_one_assets_.get(), apk_assets[2]);
+  ASSERT_EQ(3, assetmanager.GetApkAssetsCount());
+  auto op = assetmanager.StartOperation();
+  ASSERT_EQ(overlayable_assets_, assetmanager.GetApkAssets(0));
+  ASSERT_EQ(overlay_assets_, assetmanager.GetApkAssets(1));
+  ASSERT_EQ(lib_one_assets_, assetmanager.GetApkAssets(2));
 
-  auto get_first_package_id = [&assetmanager](const ApkAssets* apkAssets) -> uint8_t {
+  auto get_first_package_id = [&assetmanager](auto apkAssets) -> uint8_t {
     return assetmanager.GetAssignedPackageId(apkAssets->GetLoadedArsc()->GetPackages()[0].get());
   };
 
-  ASSERT_EQ(0x7f, get_first_package_id(overlayable_assets_.get()));
-  ASSERT_EQ(0x03, get_first_package_id(overlay_assets_.get()));
-  ASSERT_EQ(0x02, get_first_package_id(lib_one_assets_.get()));
+  ASSERT_EQ(0x7f, get_first_package_id(overlayable_assets_));
+  ASSERT_EQ(0x03, get_first_package_id(overlay_assets_));
+  ASSERT_EQ(0x02, get_first_package_id(lib_one_assets_));
 }
 
 TEST_F(AssetManager2Test, GetSharedLibraryResourceName) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({lib_one_assets_.get()});
+  assetmanager.SetApkAssets({lib_one_assets_});
 
   auto name = assetmanager.GetResourceName(lib_one::R::string::foo);
   ASSERT_TRUE(name.has_value());
@@ -235,7 +233,7 @@
 
 TEST_F(AssetManager2Test, GetResourceNameNonMatchingConfig) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({basic_de_fr_assets_.get()});
+  assetmanager.SetApkAssets({basic_de_fr_assets_});
 
   auto value = assetmanager.GetResourceName(basic::R::string::test1);
   ASSERT_TRUE(value.has_value());
@@ -244,7 +242,7 @@
 
 TEST_F(AssetManager2Test, GetResourceTypeSpecFlags) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({basic_de_fr_assets_.get()});
+  assetmanager.SetApkAssets({basic_de_fr_assets_});
 
   auto value = assetmanager.GetResourceTypeSpecFlags(basic::R::string::test1);
   ASSERT_TRUE(value.has_value());
@@ -253,7 +251,7 @@
 
 TEST_F(AssetManager2Test, FindsBagResourceFromSingleApkAssets) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({basic_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_});
 
   auto bag = assetmanager.GetBag(basic::R::array::integerArray1);
   ASSERT_TRUE(bag.has_value());
@@ -280,8 +278,7 @@
 
   // libclient is built with lib_one and then lib_two in order.
   // Reverse the order to test that proper package ID re-assignment is happening.
-  assetmanager.SetApkAssets(
-      {lib_two_assets_.get(), lib_one_assets_.get(), libclient_assets_.get()});
+  assetmanager.SetApkAssets({lib_two_assets_, lib_one_assets_, libclient_assets_});
 
   auto bag = assetmanager.GetBag(fix_package_id(lib_one::R::style::Theme, 0x03));
   ASSERT_TRUE(bag.has_value());
@@ -300,8 +297,7 @@
 
   // libclient is built with lib_one and then lib_two in order.
   // Reverse the order to test that proper package ID re-assignment is happening.
-  assetmanager.SetApkAssets(
-      {lib_two_assets_.get(), lib_one_assets_.get(), libclient_assets_.get()});
+  assetmanager.SetApkAssets({lib_two_assets_, lib_one_assets_, libclient_assets_});
 
   auto bag = assetmanager.GetBag(libclient::R::style::ThemeMultiLib);
   ASSERT_TRUE(bag.has_value());
@@ -321,8 +317,7 @@
 
   // libclient is built with lib_one and then lib_two in order.
   // Reverse the order to test that proper package ID re-assignment is happening.
-  assetmanager.SetApkAssets(
-      {lib_two_assets_.get(), lib_one_assets_.get(), libclient_assets_.get()});
+  assetmanager.SetApkAssets({lib_two_assets_, lib_one_assets_, libclient_assets_});
 
   auto bag = assetmanager.GetBag(libclient::R::style::Theme);
   ASSERT_TRUE(bag.has_value());
@@ -337,7 +332,7 @@
 
 TEST_F(AssetManager2Test, MergesStylesWithParentFromSingleApkAssets) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({style_assets_.get()});
+  assetmanager.SetApkAssets({style_assets_});
 
   auto bag_one = assetmanager.GetBag(app::R::style::StyleOne);
   ASSERT_TRUE(bag_one.has_value());
@@ -401,7 +396,7 @@
 
 TEST_F(AssetManager2Test, MergeStylesCircularDependency) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({style_assets_.get()});
+  assetmanager.SetApkAssets({style_assets_});
 
   // GetBag should stop traversing the parents of styles when a circular
   // dependency is detected
@@ -412,7 +407,7 @@
 
 TEST_F(AssetManager2Test, ResolveReferenceToResource) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({basic_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_});
 
   auto value = assetmanager.GetResource(basic::R::integer::ref1);
   ASSERT_TRUE(value.has_value());
@@ -428,7 +423,7 @@
 
 TEST_F(AssetManager2Test, ResolveReferenceToBag) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({basic_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_});
 
   auto value = assetmanager.GetResource(basic::R::integer::number2, true /*may_be_bag*/);
   ASSERT_TRUE(value.has_value());
@@ -444,7 +439,7 @@
 
 TEST_F(AssetManager2Test, ResolveDeepIdReference) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({basic_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_});
 
   // Set up the resource ids
   auto high_ref = assetmanager.GetResourceId("@id/high_ref", "values", "com.android.basic");
@@ -470,8 +465,7 @@
 
 TEST_F(AssetManager2Test, DensityOverride) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({basic_assets_.get(), basic_xhdpi_assets_.get(),
-                             basic_xxhdpi_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_, basic_xhdpi_assets_, basic_xxhdpi_assets_});
   assetmanager.SetConfiguration({
     .density = ResTable_config::DENSITY_XHIGH,
     .sdkVersion = 21,
@@ -493,7 +487,7 @@
 
 TEST_F(AssetManager2Test, KeepLastReferenceIdUnmodifiedIfNoReferenceIsResolved) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({basic_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_});
 
   // Create some kind of value that is NOT a reference.
   AssetManager2::SelectedValue value{};
@@ -509,7 +503,7 @@
 
 TEST_F(AssetManager2Test, ResolveReferenceMissingResourceDoNotCacheFlags) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({basic_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_});
   {
     AssetManager2::SelectedValue value{};
     value.data = basic::R::string::test1;
@@ -540,7 +534,7 @@
 
 TEST_F(AssetManager2Test, ResolveReferenceMissingResource) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({basic_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_});
 
   const uint32_t kMissingResId = 0x8001ffff;
   AssetManager2::SelectedValue value{};
@@ -558,7 +552,7 @@
 
 TEST_F(AssetManager2Test, ResolveReferenceMissingResourceLib) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({libclient_assets_.get()});
+  assetmanager.SetApkAssets({libclient_assets_});
 
   AssetManager2::SelectedValue value{};
   value.type = Res_value::TYPE_REFERENCE;
@@ -580,7 +574,7 @@
 
 TEST_F(AssetManager2Test, GetResourceConfigurations) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({system_assets_.get(), basic_de_fr_assets_.get()});
+  assetmanager.SetApkAssets({system_assets_, basic_de_fr_assets_});
 
   auto configurations = assetmanager.GetResourceConfigurations();
   ASSERT_TRUE(configurations.has_value());
@@ -625,7 +619,7 @@
 
 TEST_F(AssetManager2Test, GetResourceLocales) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({system_assets_.get(), basic_de_fr_assets_.get()});
+  assetmanager.SetApkAssets({system_assets_, basic_de_fr_assets_});
 
   std::set<std::string> locales = assetmanager.GetResourceLocales();
 
@@ -644,7 +638,7 @@
 
 TEST_F(AssetManager2Test, GetResourceId) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({basic_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_});
 
   auto resid = assetmanager.GetResourceId("com.android.basic:layout/main", "", "");
   ASSERT_TRUE(resid.has_value());
@@ -661,7 +655,7 @@
 
 TEST_F(AssetManager2Test, OpensFileFromSingleApkAssets) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({system_assets_.get()});
+  assetmanager.SetApkAssets({system_assets_});
 
   std::unique_ptr<Asset> asset = assetmanager.Open("file.txt", Asset::ACCESS_BUFFER);
   ASSERT_THAT(asset, NotNull());
@@ -673,7 +667,7 @@
 
 TEST_F(AssetManager2Test, OpensFileFromMultipleApkAssets) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({system_assets_.get(), app_assets_.get()});
+  assetmanager.SetApkAssets({system_assets_, app_assets_});
 
   std::unique_ptr<Asset> asset = assetmanager.Open("file.txt", Asset::ACCESS_BUFFER);
   ASSERT_THAT(asset, NotNull());
@@ -685,7 +679,7 @@
 
 TEST_F(AssetManager2Test, OpenDir) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({system_assets_.get()});
+  assetmanager.SetApkAssets({system_assets_});
 
   std::unique_ptr<AssetDir> asset_dir = assetmanager.OpenDir("");
   ASSERT_THAT(asset_dir, NotNull());
@@ -707,7 +701,7 @@
 
 TEST_F(AssetManager2Test, OpenDirFromManyApks) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({system_assets_.get(), app_assets_.get()});
+  assetmanager.SetApkAssets({system_assets_, app_assets_});
 
   std::unique_ptr<AssetDir> asset_dir = assetmanager.OpenDir("");
   ASSERT_THAT(asset_dir, NotNull());
@@ -728,7 +722,7 @@
 
   AssetManager2 assetmanager;
   assetmanager.SetConfiguration(desired_config);
-  assetmanager.SetApkAssets({basic_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_});
   assetmanager.SetResourceResolutionLoggingEnabled(false);
 
   auto value = assetmanager.GetResource(basic::R::string::test1);
@@ -743,7 +737,7 @@
 
   AssetManager2 assetmanager;
   assetmanager.SetConfiguration(desired_config);
-  assetmanager.SetApkAssets({basic_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_});
 
   auto result = assetmanager.GetLastResourceResolution();
   EXPECT_EQ("", result);
@@ -758,17 +752,18 @@
   AssetManager2 assetmanager;
   assetmanager.SetResourceResolutionLoggingEnabled(true);
   assetmanager.SetConfiguration(desired_config);
-  assetmanager.SetApkAssets({basic_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_});
 
   auto value = assetmanager.GetResource(basic::R::string::test1);
   ASSERT_TRUE(value.has_value());
 
   auto result = assetmanager.GetLastResourceResolution();
-  EXPECT_EQ("Resolution for 0x7f030000 com.android.basic:string/test1\n"
-            "\tFor config - de\n"
-            "\tFound initial: basic/basic.apk\n"
-            "Best matching is from default configuration of com.android.basic",
-            result);
+  EXPECT_EQ(
+      "Resolution for 0x7f030000 com.android.basic:string/test1\n"
+      "\tFor config - de\n"
+      "\tFound initial: basic/basic.apk #0\n"
+      "Best matching is from default configuration of com.android.basic",
+      result);
 }
 
 TEST_F(AssetManager2Test, GetLastPathWithMultipleApkAssets) {
@@ -780,18 +775,19 @@
   AssetManager2 assetmanager;
   assetmanager.SetResourceResolutionLoggingEnabled(true);
   assetmanager.SetConfiguration(desired_config);
-  assetmanager.SetApkAssets({basic_assets_.get(), basic_de_fr_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_, basic_de_fr_assets_});
 
   auto value = assetmanager.GetResource(basic::R::string::test1);
   ASSERT_TRUE(value.has_value());
 
   auto result = assetmanager.GetLastResourceResolution();
-  EXPECT_EQ("Resolution for 0x7f030000 com.android.basic:string/test1\n"
-            "\tFor config - de\n"
-            "\tFound initial: basic/basic.apk\n"
-            "\tFound better: basic/basic_de_fr.apk - de\n"
-            "Best matching is from de configuration of com.android.basic",
-            result);
+  EXPECT_EQ(
+      "Resolution for 0x7f030000 com.android.basic:string/test1\n"
+      "\tFor config - de\n"
+      "\tFound initial: basic/basic.apk #0\n"
+      "\tFound better: basic/basic_de_fr.apk #1 - de\n"
+      "Best matching is from de configuration of com.android.basic",
+      result);
 }
 
 TEST_F(AssetManager2Test, GetLastPathAfterDisablingReturnsEmpty) {
@@ -801,7 +797,7 @@
   AssetManager2 assetmanager;
   assetmanager.SetResourceResolutionLoggingEnabled(true);
   assetmanager.SetConfiguration(desired_config);
-  assetmanager.SetApkAssets({basic_assets_.get()});
+  assetmanager.SetApkAssets({basic_assets_});
 
   auto value = assetmanager.GetResource(basic::R::string::test1);
   ASSERT_TRUE(value.has_value());
@@ -822,7 +818,7 @@
   AssetManager2 assetmanager;
   assetmanager.SetResourceResolutionLoggingEnabled(true);
   assetmanager.SetConfiguration(desired_config);
-  assetmanager.SetApkAssets({overlayable_assets_.get()});
+  assetmanager.SetApkAssets({overlayable_assets_});
 
   const auto map = assetmanager.GetOverlayableMapForPackage(0x7f);
   ASSERT_NE(nullptr, map);
@@ -838,4 +834,26 @@
             std::string::npos);
 }
 
+TEST_F(AssetManager2Test, GetApkAssets) {
+  AssetManager2 assetmanager;
+  assetmanager.SetApkAssets({overlayable_assets_, overlay_assets_, lib_one_assets_});
+
+  ASSERT_EQ(3, assetmanager.GetApkAssetsCount());
+  EXPECT_EQ(1, overlayable_assets_->getStrongCount());
+  EXPECT_EQ(1, overlay_assets_->getStrongCount());
+  EXPECT_EQ(1, lib_one_assets_->getStrongCount());
+
+  {
+    auto op = assetmanager.StartOperation();
+    ASSERT_EQ(overlayable_assets_, assetmanager.GetApkAssets(0));
+    ASSERT_EQ(overlay_assets_, assetmanager.GetApkAssets(1));
+    EXPECT_EQ(2, overlayable_assets_->getStrongCount());
+    EXPECT_EQ(2, overlay_assets_->getStrongCount());
+    EXPECT_EQ(1, lib_one_assets_->getStrongCount());
+  }
+  EXPECT_EQ(1, overlayable_assets_->getStrongCount());
+  EXPECT_EQ(1, overlay_assets_->getStrongCount());
+  EXPECT_EQ(1, lib_one_assets_->getStrongCount());
+}
+
 }  // namespace android
diff --git a/libs/androidfw/tests/AttributeResolution_bench.cpp b/libs/androidfw/tests/AttributeResolution_bench.cpp
index 1c89c61..384f4a7 100644
--- a/libs/androidfw/tests/AttributeResolution_bench.cpp
+++ b/libs/androidfw/tests/AttributeResolution_bench.cpp
@@ -36,15 +36,14 @@
 constexpr const static uint32_t Theme_Material_Light = 0x01030237u;
 
 static void BM_ApplyStyle(benchmark::State& state) {
-  std::unique_ptr<const ApkAssets> styles_apk =
-      ApkAssets::Load(GetTestDataPath() + "/styles/styles.apk");
+  auto styles_apk = ApkAssets::Load(GetTestDataPath() + "/styles/styles.apk");
   if (styles_apk == nullptr) {
     state.SkipWithError("failed to load assets");
     return;
   }
 
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({styles_apk.get()});
+  assetmanager.SetApkAssets({styles_apk});
 
   std::unique_ptr<Asset> asset =
       assetmanager.OpenNonAsset("res/layout/layout.xml", Asset::ACCESS_BUFFER);
@@ -80,21 +79,20 @@
 BENCHMARK(BM_ApplyStyle);
 
 static void BM_ApplyStyleFramework(benchmark::State& state) {
-  std::unique_ptr<const ApkAssets> framework_apk = ApkAssets::Load(kFrameworkPath);
+  auto framework_apk = ApkAssets::Load(kFrameworkPath);
   if (framework_apk == nullptr) {
     state.SkipWithError("failed to load framework assets");
     return;
   }
 
-  std::unique_ptr<const ApkAssets> basic_apk =
-      ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
+  auto basic_apk = ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk");
   if (basic_apk == nullptr) {
     state.SkipWithError("failed to load assets");
     return;
   }
 
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({framework_apk.get(), basic_apk.get()});
+  assetmanager.SetApkAssets({framework_apk, basic_apk});
 
   ResTable_config device_config;
   memset(&device_config, 0, sizeof(device_config));
diff --git a/libs/androidfw/tests/AttributeResolution_test.cpp b/libs/androidfw/tests/AttributeResolution_test.cpp
index bb9129a..329830f 100644
--- a/libs/androidfw/tests/AttributeResolution_test.cpp
+++ b/libs/androidfw/tests/AttributeResolution_test.cpp
@@ -36,11 +36,11 @@
   virtual void SetUp() override {
     styles_assets_ = ApkAssets::Load(GetTestDataPath() + "/styles/styles.apk");
     ASSERT_NE(nullptr, styles_assets_);
-    assetmanager_.SetApkAssets({styles_assets_.get()});
+    assetmanager_.SetApkAssets({styles_assets_});
   }
 
  protected:
-  std::unique_ptr<const ApkAssets> styles_assets_;
+  AssetManager2::ApkAssetsPtr styles_assets_;
   AssetManager2 assetmanager_;
 };
 
@@ -69,7 +69,7 @@
   AssetManager2 assetmanager;
   auto apk_assets = ApkAssets::Load(GetTestDataPath() + "/styles/styles.apk", PROPERTY_DYNAMIC);
   ASSERT_NE(nullptr, apk_assets);
-  assetmanager.SetApkAssets({apk_assets.get()});
+  assetmanager.SetApkAssets({apk_assets});
 
   std::unique_ptr<Theme> theme = assetmanager.NewTheme();
 
diff --git a/libs/androidfw/tests/BenchmarkHelpers.cpp b/libs/androidfw/tests/BenchmarkHelpers.cpp
index 0fa0573..b97dd96 100644
--- a/libs/androidfw/tests/BenchmarkHelpers.cpp
+++ b/libs/androidfw/tests/BenchmarkHelpers.cpp
@@ -53,20 +53,18 @@
 
 void GetResourceBenchmark(const std::vector<std::string>& paths, const ResTable_config* config,
                           uint32_t resid, benchmark::State& state) {
-  std::vector<std::unique_ptr<const ApkAssets>> apk_assets;
-  std::vector<const ApkAssets*> apk_assets_ptrs;
+  std::vector<AssetManager2::ApkAssetsPtr> apk_assets;
   for (const std::string& path : paths) {
-    std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(path);
+    auto apk = ApkAssets::Load(path);
     if (apk == nullptr) {
       state.SkipWithError(base::StringPrintf("Failed to load assets %s", path.c_str()).c_str());
       return;
     }
-    apk_assets_ptrs.push_back(apk.get());
     apk_assets.push_back(std::move(apk));
   }
 
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets(apk_assets_ptrs);
+  assetmanager.SetApkAssets(apk_assets);
   if (config != nullptr) {
     assetmanager.SetConfiguration(*config);
   }
diff --git a/libs/androidfw/tests/Generic_bench.cpp b/libs/androidfw/tests/Generic_bench.cpp
new file mode 100644
index 0000000..4c978e8
--- /dev/null
+++ b/libs/androidfw/tests/Generic_bench.cpp
@@ -0,0 +1,146 @@
+/*
+ * 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.
+ */
+
+#include <stdint.h>
+
+#include <map>
+#include <unordered_map>
+
+#include "benchmark/benchmark.h"
+
+namespace android {
+
+template <class Map = std::unordered_map<uint32_t, std::vector<uint32_t>>>
+static Map prepare_map() {
+  Map map;
+  std::vector<uint32_t> vec;
+  for (int i = 0; i < 1000; ++i) {
+    map.emplace(i, vec);
+  }
+  return map;
+}
+
+static void BM_hashmap_emplace_same(benchmark::State& state) {
+  auto map = prepare_map<>();
+  auto val = map.size() - 1;
+  std::vector<uint32_t> vec;
+  for (auto&& _ : state) {
+    benchmark::DoNotOptimize(map.emplace(val, vec));
+  }
+}
+BENCHMARK(BM_hashmap_emplace_same);
+static void BM_hashmap_try_emplace_same(benchmark::State& state) {
+  auto map = prepare_map();
+  auto val = map.size() - 1;
+  for (auto&& _ : state) {
+    benchmark::DoNotOptimize(map.try_emplace(val));
+  }
+}
+BENCHMARK(BM_hashmap_try_emplace_same);
+static void BM_hashmap_find(benchmark::State& state) {
+  auto map = prepare_map<>();
+  auto val = map.size() - 1;
+  for (auto&& _ : state) {
+    benchmark::DoNotOptimize(map.find(val));
+  }
+}
+BENCHMARK(BM_hashmap_find);
+
+static void BM_hashmap_emplace_diff(benchmark::State& state) {
+  auto map = prepare_map<>();
+  std::vector<uint32_t> vec;
+  auto i = map.size();
+  for (auto&& _ : state) {
+    map.emplace(i++, vec);
+  }
+}
+BENCHMARK(BM_hashmap_emplace_diff);
+static void BM_hashmap_try_emplace_diff(benchmark::State& state) {
+  auto map = prepare_map();
+  auto i = map.size();
+  for (auto&& _ : state) {
+    map.try_emplace(i++);
+  }
+}
+BENCHMARK(BM_hashmap_try_emplace_diff);
+static void BM_hashmap_find_emplace_diff(benchmark::State& state) {
+  auto map = prepare_map<>();
+  std::vector<uint32_t> vec;
+  auto i = map.size();
+  for (auto&& _ : state) {
+    if (map.find(i++) == map.end()) {
+      map.emplace(i - 1, vec);
+    }
+  }
+}
+BENCHMARK(BM_hashmap_find_emplace_diff);
+
+static void BM_treemap_emplace_same(benchmark::State& state) {
+  auto map = prepare_map<std::map<uint32_t, std::vector<uint32_t>>>();
+  auto val = map.size() - 1;
+  std::vector<uint32_t> vec;
+  for (auto&& _ : state) {
+    benchmark::DoNotOptimize(map.emplace(val, vec));
+  }
+}
+BENCHMARK(BM_treemap_emplace_same);
+static void BM_treemap_try_emplace_same(benchmark::State& state) {
+  auto map = prepare_map<std::map<uint32_t, std::vector<uint32_t>>>();
+  auto val = map.size() - 1;
+  for (auto&& _ : state) {
+    benchmark::DoNotOptimize(map.try_emplace(val));
+  }
+}
+BENCHMARK(BM_treemap_try_emplace_same);
+static void BM_treemap_find(benchmark::State& state) {
+  auto map = prepare_map<std::map<uint32_t, std::vector<uint32_t>>>();
+  auto val = map.size() - 1;
+  for (auto&& _ : state) {
+    benchmark::DoNotOptimize(map.find(val));
+  }
+}
+BENCHMARK(BM_treemap_find);
+
+static void BM_treemap_emplace_diff(benchmark::State& state) {
+  auto map = prepare_map<std::map<uint32_t, std::vector<uint32_t>>>();
+  std::vector<uint32_t> vec;
+  auto i = map.size();
+  for (auto&& _ : state) {
+    map.emplace(i++, vec);
+  }
+}
+BENCHMARK(BM_treemap_emplace_diff);
+static void BM_treemap_try_emplace_diff(benchmark::State& state) {
+  auto map = prepare_map();
+  auto i = map.size();
+  for (auto&& _ : state) {
+    map.try_emplace(i++);
+  }
+}
+BENCHMARK(BM_treemap_try_emplace_diff);
+static void BM_treemap_find_emplace_diff(benchmark::State& state) {
+  auto map = prepare_map();
+  std::vector<uint32_t> vec;
+  auto i = map.size();
+  for (auto&& _ : state) {
+    if (map.find(i++) == map.end()) {
+      map.emplace(i - 1, vec);
+    }
+  }
+}
+BENCHMARK(BM_treemap_find_emplace_diff);
+
+}  // namespace android
\ No newline at end of file
diff --git a/libs/androidfw/tests/Idmap_test.cpp b/libs/androidfw/tests/Idmap_test.cpp
index b434915..60aa7d8 100644
--- a/libs/androidfw/tests/Idmap_test.cpp
+++ b/libs/androidfw/tests/Idmap_test.cpp
@@ -59,15 +59,16 @@
 
  protected:
   std::string original_path;
-  std::unique_ptr<const ApkAssets> system_assets_;
-  std::unique_ptr<const ApkAssets> overlay_assets_;
-  std::unique_ptr<const ApkAssets> overlayable_assets_;
+  AssetManager2::ApkAssetsPtr system_assets_;
+  AssetManager2::ApkAssetsPtr overlay_assets_;
+  AssetManager2::ApkAssetsPtr overlayable_assets_;
 };
 
 std::string GetStringFromApkAssets(const AssetManager2& asset_manager,
                                    const AssetManager2::SelectedValue& value) {
-  auto assets = asset_manager.GetApkAssets();
-  const ResStringPool* string_pool = assets[value.cookie]->GetLoadedArsc()->GetStringPool();
+  auto op = asset_manager.StartOperation();
+  const ResStringPool* string_pool =
+      asset_manager.GetApkAssets(value.cookie)->GetLoadedArsc()->GetStringPool();
   return GetStringFromPool(string_pool, value.data);
 }
 
@@ -75,8 +76,7 @@
 
 TEST_F(IdmapTest, OverlayOverridesResourceValue) {
   AssetManager2 asset_manager;
-  asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
-                              overlay_assets_.get()});
+  asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
 
   auto value = asset_manager.GetResource(overlayable::R::string::overlayable5);
   ASSERT_TRUE(value.has_value());
@@ -87,8 +87,7 @@
 
 TEST_F(IdmapTest, OverlayOverridesResourceValueUsingDifferentPackage) {
   AssetManager2 asset_manager;
-  asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
-                              overlay_assets_.get()});
+  asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
 
   auto value = asset_manager.GetResource(overlayable::R::string::overlayable10);
   ASSERT_TRUE(value.has_value());
@@ -99,8 +98,7 @@
 
 TEST_F(IdmapTest, OverlayOverridesResourceValueUsingInternalResource) {
   AssetManager2 asset_manager;
-  asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
-                              overlay_assets_.get()});
+  asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
 
   auto value = asset_manager.GetResource(overlayable::R::string::overlayable8);
   ASSERT_TRUE(value.has_value());
@@ -111,8 +109,7 @@
 
 TEST_F(IdmapTest, OverlayOverridesResourceValueUsingInlineInteger) {
   AssetManager2 asset_manager;
-  asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
-                              overlay_assets_.get()});
+  asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
 
   auto value = asset_manager.GetResource(overlayable::R::integer::config_integer);
   ASSERT_TRUE(value.has_value());
@@ -123,8 +120,7 @@
 
 TEST_F(IdmapTest, OverlayOverridesResourceValueUsingInlineString) {
   AssetManager2 asset_manager;
-  asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
-                              overlay_assets_.get()});
+  asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
 
   auto value = asset_manager.GetResource(overlayable::R::string::overlayable11);
   ASSERT_TRUE(value.has_value());
@@ -135,8 +131,7 @@
 
 TEST_F(IdmapTest, OverlayOverridesResourceValueUsingOverlayingResource) {
   AssetManager2 asset_manager;
-  asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
-                              overlay_assets_.get()});
+  asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
 
   auto value = asset_manager.GetResource(overlayable::R::string::overlayable9);
   ASSERT_TRUE(value.has_value());
@@ -147,8 +142,7 @@
 
 TEST_F(IdmapTest, OverlayOverridesXmlParser) {
   AssetManager2 asset_manager;
-  asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
-                              overlay_assets_.get()});
+  asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
 
   auto value = asset_manager.GetResource(overlayable::R::layout::hello_view);
   ASSERT_TRUE(value.has_value());
@@ -186,8 +180,7 @@
 
 TEST_F(IdmapTest, OverlaidResourceHasSameName) {
   AssetManager2 asset_manager;
-  asset_manager.SetApkAssets({system_assets_.get(), overlayable_assets_.get(),
-                              overlay_assets_.get()});
+  asset_manager.SetApkAssets({system_assets_, overlayable_assets_, overlay_assets_});
 
   auto name = asset_manager.GetResourceName(overlayable::R::string::overlayable9);
   ASSERT_TRUE(name.has_value());
@@ -203,8 +196,7 @@
   auto loader_assets = ApkAssets::LoadTable(std::move(asset), EmptyAssetsProvider::Create(),
       PROPERTY_LOADER);
   AssetManager2 asset_manager;
-  asset_manager.SetApkAssets({overlayable_assets_.get(), loader_assets.get(),
-                              overlay_assets_.get()});
+  asset_manager.SetApkAssets({overlayable_assets_, loader_assets, overlay_assets_});
 
   auto value = asset_manager.GetResource(overlayable::R::string::overlayable11);
   ASSERT_TRUE(value.has_value());
diff --git a/libs/androidfw/tests/Theme_bench.cpp b/libs/androidfw/tests/Theme_bench.cpp
index f3d60bb..dfbb5a7 100644
--- a/libs/androidfw/tests/Theme_bench.cpp
+++ b/libs/androidfw/tests/Theme_bench.cpp
@@ -28,14 +28,14 @@
 constexpr const static uint32_t kAttrId = 0x01010030u;   // android:attr/colorForeground
 
 static void BM_ThemeApplyStyleFramework(benchmark::State& state) {
-  std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(kFrameworkPath);
+  auto apk = ApkAssets::Load(kFrameworkPath);
   if (apk == nullptr) {
     state.SkipWithError("Failed to load assets");
     return;
   }
 
   AssetManager2 assets;
-  assets.SetApkAssets({apk.get()});
+  assets.SetApkAssets({apk});
 
   while (state.KeepRunning()) {
     auto theme = assets.NewTheme();
@@ -62,10 +62,10 @@
 BENCHMARK(BM_ThemeApplyStyleFrameworkOld);
 
 static void BM_ThemeGetAttribute(benchmark::State& state) {
-  std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(kFrameworkPath);
+  auto apk = ApkAssets::Load(kFrameworkPath);
 
   AssetManager2 assets;
-  assets.SetApkAssets({apk.get()});
+  assets.SetApkAssets({apk});
 
   auto theme = assets.NewTheme();
   theme->ApplyStyle(kStyleId, false /* force */);
diff --git a/libs/androidfw/tests/Theme_test.cpp b/libs/androidfw/tests/Theme_test.cpp
index 77114f2..e08a6a7 100644
--- a/libs/androidfw/tests/Theme_test.cpp
+++ b/libs/androidfw/tests/Theme_test.cpp
@@ -53,16 +53,16 @@
   }
 
  protected:
-  std::unique_ptr<const ApkAssets> system_assets_;
-  std::unique_ptr<const ApkAssets> style_assets_;
-  std::unique_ptr<const ApkAssets> libclient_assets_;
-  std::unique_ptr<const ApkAssets> lib_one_assets_;
-  std::unique_ptr<const ApkAssets> lib_two_assets_;
+  AssetManager2::ApkAssetsPtr system_assets_;
+  AssetManager2::ApkAssetsPtr style_assets_;
+  AssetManager2::ApkAssetsPtr libclient_assets_;
+  AssetManager2::ApkAssetsPtr lib_one_assets_;
+  AssetManager2::ApkAssetsPtr lib_two_assets_;
 };
 
 TEST_F(ThemeTest, EmptyTheme) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({style_assets_.get()});
+  assetmanager.SetApkAssets({style_assets_});
 
   std::unique_ptr<Theme> theme = assetmanager.NewTheme();
   EXPECT_EQ(0u, theme->GetChangingConfigurations());
@@ -72,7 +72,7 @@
 
 TEST_F(ThemeTest, SingleThemeNoParent) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({style_assets_.get()});
+  assetmanager.SetApkAssets({style_assets_});
 
   std::unique_ptr<Theme> theme = assetmanager.NewTheme();
   ASSERT_TRUE(theme->ApplyStyle(app::R::style::StyleOne).has_value());
@@ -92,7 +92,7 @@
 
 TEST_F(ThemeTest, SingleThemeWithParent) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({style_assets_.get()});
+  assetmanager.SetApkAssets({style_assets_});
 
   std::unique_ptr<Theme> theme = assetmanager.NewTheme();
   ASSERT_TRUE(theme->ApplyStyle(app::R::style::StyleTwo).has_value());
@@ -121,7 +121,7 @@
 
 TEST_F(ThemeTest, TryToUseBadResourceId) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({style_assets_.get()});
+  assetmanager.SetApkAssets({style_assets_});
 
   std::unique_ptr<Theme> theme = assetmanager.NewTheme();
   ASSERT_TRUE(theme->ApplyStyle(app::R::style::StyleTwo).has_value());
@@ -130,7 +130,7 @@
 
 TEST_F(ThemeTest, MultipleThemesOverlaidNotForce) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({style_assets_.get()});
+  assetmanager.SetApkAssets({style_assets_});
 
   std::unique_ptr<Theme> theme = assetmanager.NewTheme();
   ASSERT_TRUE(theme->ApplyStyle(app::R::style::StyleTwo).has_value());
@@ -160,7 +160,7 @@
 
 TEST_F(ThemeTest, MultipleThemesOverlaidForced) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({style_assets_.get()});
+  assetmanager.SetApkAssets({style_assets_});
 
   std::unique_ptr<Theme> theme = assetmanager.NewTheme();
   ASSERT_TRUE(theme->ApplyStyle(app::R::style::StyleTwo).has_value());
@@ -190,8 +190,7 @@
 
 TEST_F(ThemeTest, ResolveDynamicAttributesAndReferencesToSharedLibrary) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets(
-      {lib_two_assets_.get(), lib_one_assets_.get(), libclient_assets_.get()});
+  assetmanager.SetApkAssets({lib_two_assets_, lib_one_assets_, libclient_assets_});
 
   std::unique_ptr<Theme> theme = assetmanager.NewTheme();
   ASSERT_TRUE(theme->ApplyStyle(libclient::R::style::Theme, false /*force*/).has_value());
@@ -216,7 +215,7 @@
 
 TEST_F(ThemeTest, CopyThemeSameAssetManager) {
   AssetManager2 assetmanager;
-  assetmanager.SetApkAssets({style_assets_.get()});
+  assetmanager.SetApkAssets({style_assets_});
 
   std::unique_ptr<Theme> theme_one = assetmanager.NewTheme();
   ASSERT_TRUE(theme_one->ApplyStyle(app::R::style::StyleOne).has_value());
@@ -253,10 +252,10 @@
 
 TEST_F(ThemeTest, ThemeRebase) {
   AssetManager2 am;
-  am.SetApkAssets({style_assets_.get()});
+  am.SetApkAssets({style_assets_});
 
   AssetManager2 am_night;
-  am_night.SetApkAssets({style_assets_.get()});
+  am_night.SetApkAssets({style_assets_});
 
   ResTable_config night{};
   night.uiMode = ResTable_config::UI_MODE_NIGHT_YES;
@@ -327,12 +326,11 @@
 
 TEST_F(ThemeTest, OnlyCopySameAssetsThemeWhenAssetManagersDiffer) {
   AssetManager2 assetmanager_dst;
-  assetmanager_dst.SetApkAssets({system_assets_.get(), lib_one_assets_.get(), style_assets_.get(),
-                                 libclient_assets_.get()});
+  assetmanager_dst.SetApkAssets(
+      {system_assets_, lib_one_assets_, style_assets_, libclient_assets_});
 
   AssetManager2 assetmanager_src;
-  assetmanager_src.SetApkAssets({system_assets_.get(), lib_two_assets_.get(), lib_one_assets_.get(),
-                                 style_assets_.get()});
+  assetmanager_src.SetApkAssets({system_assets_, lib_two_assets_, lib_one_assets_, style_assets_});
 
   auto theme_dst = assetmanager_dst.NewTheme();
   ASSERT_TRUE(theme_dst->ApplyStyle(app::R::style::StyleOne).has_value());
@@ -376,10 +374,10 @@
 
 TEST_F(ThemeTest, CopyNonReferencesWhenPackagesDiffer) {
   AssetManager2 assetmanager_dst;
-  assetmanager_dst.SetApkAssets({system_assets_.get()});
+  assetmanager_dst.SetApkAssets({system_assets_});
 
   AssetManager2 assetmanager_src;
-  assetmanager_src.SetApkAssets({system_assets_.get(), style_assets_.get()});
+  assetmanager_src.SetApkAssets({system_assets_, style_assets_});
 
   auto theme_dst = assetmanager_dst.NewTheme();
   auto theme_src = assetmanager_src.NewTheme();
diff --git a/libs/hwui/Android.bp b/libs/hwui/Android.bp
index db58147..7f80dff 100644
--- a/libs/hwui/Android.bp
+++ b/libs/hwui/Android.bp
@@ -44,7 +44,7 @@
         "-DEGL_EGLEXT_PROTOTYPES",
         "-DGL_GLEXT_PROTOTYPES",
         "-DATRACE_TAG=ATRACE_TAG_VIEW",
-        "-DLOG_TAG=\"OpenGLRenderer\"",
+        "-DLOG_TAG=\"HWUI\"",
         "-Wall",
         "-Wthread-safety",
         "-Wno-unused-parameter",
@@ -514,6 +514,7 @@
         "canvas/CanvasOpRasterizer.cpp",
         "effects/StretchEffect.cpp",
         "effects/GainmapRenderer.cpp",
+        "pipeline/skia/BackdropFilterDrawable.cpp",
         "pipeline/skia/HolePunch.cpp",
         "pipeline/skia/SkiaDisplayList.cpp",
         "pipeline/skia/SkiaRecordingCanvas.cpp",
diff --git a/libs/hwui/AutoBackendTextureRelease.cpp b/libs/hwui/AutoBackendTextureRelease.cpp
index b656b6a..d237cc2 100644
--- a/libs/hwui/AutoBackendTextureRelease.cpp
+++ b/libs/hwui/AutoBackendTextureRelease.cpp
@@ -16,6 +16,11 @@
 
 #include "AutoBackendTextureRelease.h"
 
+#include <SkImage.h>
+#include <include/gpu/ganesh/SkImageGanesh.h>
+#include <include/gpu/GrBackendSurfaceMutableState.h>
+#include <include/gpu/GrDirectContext.h>
+#include <include/gpu/GrBackendSurface.h>
 #include "renderthread/RenderThread.h"
 #include "utils/Color.h"
 #include "utils/PaintUtils.h"
@@ -70,7 +75,7 @@
 
 // releaseProc is invoked by SkImage, when texture is no longer in use.
 // "releaseContext" contains an "AutoBackendTextureRelease*".
-static void releaseProc(SkImage::ReleaseContext releaseContext) {
+static void releaseProc(SkImages::ReleaseContext releaseContext) {
     AutoBackendTextureRelease* textureRelease =
             reinterpret_cast<AutoBackendTextureRelease*>(releaseContext);
     textureRelease->unref(false);
@@ -83,10 +88,10 @@
     AHardwareBuffer_describe(buffer, &desc);
     SkColorType colorType = GrAHardwareBufferUtils::GetSkColorTypeFromBufferFormat(desc.format);
     // The following ref will be counteracted by Skia calling releaseProc, either during
-    // MakeFromTexture if there is a failure, or later when SkImage is discarded. It must
-    // be called before MakeFromTexture, otherwise Skia may remove HWUI's ref on failure.
+    // BorrowTextureFrom if there is a failure, or later when SkImage is discarded. It must
+    // be called before BorrowTextureFrom, otherwise Skia may remove HWUI's ref on failure.
     ref();
-    mImage = SkImage::MakeFromTexture(
+    mImage = SkImages::BorrowTextureFrom(
             context, mBackendTexture, kTopLeft_GrSurfaceOrigin, colorType, kPremul_SkAlphaType,
             uirenderer::DataSpaceToColorSpace(dataspace), releaseProc, this);
 }
diff --git a/libs/hwui/ColorFilter.h b/libs/hwui/ColorFilter.h
new file mode 100644
index 0000000..1a5b938
--- /dev/null
+++ b/libs/hwui/ColorFilter.h
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef COLORFILTER_H_
+#define COLORFILTER_H_
+
+#include <stdint.h>
+
+#include <memory>
+
+#include "GraphicsJNI.h"
+#include "SkColorFilter.h"
+#include "SkiaWrapper.h"
+
+namespace android {
+namespace uirenderer {
+
+class ColorFilter : public SkiaWrapper<SkColorFilter> {
+public:
+    static ColorFilter* fromJava(jlong handle) { return reinterpret_cast<ColorFilter*>(handle); }
+
+protected:
+    ColorFilter() = default;
+};
+
+class BlendModeColorFilter : public ColorFilter {
+public:
+    BlendModeColorFilter(SkColor color, SkBlendMode mode) : mColor(color), mMode(mode) {}
+
+private:
+    sk_sp<SkColorFilter> createInstance() override { return SkColorFilters::Blend(mColor, mMode); }
+
+private:
+    const SkColor mColor;
+    const SkBlendMode mMode;
+};
+
+class LightingFilter : public ColorFilter {
+public:
+    LightingFilter(SkColor mul, SkColor add) : mMul(mul), mAdd(add) {}
+
+    void setMul(SkColor mul) {
+        mMul = mul;
+        discardInstance();
+    }
+
+    void setAdd(SkColor add) {
+        mAdd = add;
+        discardInstance();
+    }
+
+private:
+    sk_sp<SkColorFilter> createInstance() override { return SkColorFilters::Lighting(mMul, mAdd); }
+
+private:
+    SkColor mMul;
+    SkColor mAdd;
+};
+
+class ColorMatrixColorFilter : public ColorFilter {
+public:
+    ColorMatrixColorFilter(std::vector<float>&& matrix) : mMatrix(std::move(matrix)) {}
+
+    void setMatrix(std::vector<float>&& matrix) {
+        mMatrix = std::move(matrix);
+        discardInstance();
+    }
+
+private:
+    sk_sp<SkColorFilter> createInstance() override {
+        return SkColorFilters::Matrix(mMatrix.data());
+    }
+
+private:
+    std::vector<float> mMatrix;
+};
+
+}  // namespace uirenderer
+}  // namespace android
+
+#endif  // COLORFILTER_H_
diff --git a/libs/hwui/DisplayListOps.in b/libs/hwui/DisplayListOps.in
index a18ba1c..d21f07ef 100644
--- a/libs/hwui/DisplayListOps.in
+++ b/libs/hwui/DisplayListOps.in
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-X(Flush)
 X(Save)
 X(Restore)
 X(SaveLayer)
diff --git a/libs/hwui/HardwareBitmapUploader.cpp b/libs/hwui/HardwareBitmapUploader.cpp
index b7e9999..19a1dfa 100644
--- a/libs/hwui/HardwareBitmapUploader.cpp
+++ b/libs/hwui/HardwareBitmapUploader.cpp
@@ -25,6 +25,7 @@
 #include <SkBitmap.h>
 #include <SkCanvas.h>
 #include <SkImage.h>
+#include <SkImageAndroid.h>
 #include <SkImageInfo.h>
 #include <SkRefCnt.h>
 #include <gui/TraceUtils.h>
@@ -262,7 +263,8 @@
           }
 
           sk_sp<SkImage> image =
-              SkImage::MakeFromAHardwareBufferWithData(mGrContext.get(), bitmap.pixmap(), ahb);
+              SkImages::TextureFromAHardwareBufferWithData(mGrContext.get(), bitmap.pixmap(),
+                                                           ahb);
           mGrContext->submit(true);
 
           uploadSucceeded = (image.get() != nullptr);
diff --git a/libs/hwui/MemoryPolicy.cpp b/libs/hwui/MemoryPolicy.cpp
index ca1312e7..21f4ca7 100644
--- a/libs/hwui/MemoryPolicy.cpp
+++ b/libs/hwui/MemoryPolicy.cpp
@@ -28,7 +28,10 @@
 constexpr static MemoryPolicy sDefaultMemoryPolicy;
 constexpr static MemoryPolicy sPersistentOrSystemPolicy{
         .contextTimeout = 10_s,
+        .minimumResourceRetention = 1_s,
+        .maximumResourceRetention = 10_s,
         .useAlternativeUiHidden = true,
+        .purgeScratchOnly = false,
 };
 constexpr static MemoryPolicy sLowRamPolicy{
         .useAlternativeUiHidden = true,
diff --git a/libs/hwui/MemoryPolicy.h b/libs/hwui/MemoryPolicy.h
index 347daf34..e10dda9 100644
--- a/libs/hwui/MemoryPolicy.h
+++ b/libs/hwui/MemoryPolicy.h
@@ -53,6 +53,8 @@
     // The minimum amount of time to hold onto items in the resource cache
     // The actual time used will be the max of this & when frames were actually rendered
     nsecs_t minimumResourceRetention = 10_s;
+    // The maximum amount of time to hold onto items in the resource cache
+    nsecs_t maximumResourceRetention = 100000_s;
     // If false, use only TRIM_UI_HIDDEN to drive background cache limits;
     // If true, use all signals (such as all contexts are stopped) to drive the limits
     bool useAlternativeUiHidden = true;
diff --git a/libs/hwui/Mesh.h b/libs/hwui/Mesh.h
index 13e3c8e..764d1ef 100644
--- a/libs/hwui/Mesh.h
+++ b/libs/hwui/Mesh.h
@@ -19,6 +19,7 @@
 
 #include <GrDirectContext.h>
 #include <SkMesh.h>
+#include <include/gpu/ganesh/SkMeshGanesh.h>
 #include <jni.h>
 #include <log/log.h>
 
@@ -143,14 +144,26 @@
         }
 
         if (mIsDirty || genId != mGenerationId) {
-            auto vb = SkMesh::MakeVertexBuffer(
-                    context, reinterpret_cast<const void*>(mVertexBufferData.data()),
-                    mVertexBufferData.size());
+            auto vertexData = reinterpret_cast<const void*>(mVertexBufferData.data());
+#ifdef __ANDROID__
+            auto vb = SkMeshes::MakeVertexBuffer(context,
+                                                 vertexData,
+                                                 mVertexBufferData.size());
+#else
+            auto vb = SkMeshes::MakeVertexBuffer(vertexData,
+                                                 mVertexBufferData.size());
+#endif
             auto meshMode = SkMesh::Mode(mMode);
             if (!mIndexBufferData.empty()) {
-                auto ib = SkMesh::MakeIndexBuffer(
-                        context, reinterpret_cast<const void*>(mIndexBufferData.data()),
-                        mIndexBufferData.size());
+                auto indexData = reinterpret_cast<const void*>(mIndexBufferData.data());
+#ifdef __ANDROID__
+                auto ib = SkMeshes::MakeIndexBuffer(context,
+                                                    indexData,
+                                                    mIndexBufferData.size());
+#else
+                auto ib = SkMeshes::MakeIndexBuffer(indexData,
+                                                    mIndexBufferData.size());
+#endif
                 mMesh = SkMesh::MakeIndexed(mMeshSpec, meshMode, vb, mVertexCount, mVertexOffset,
                                             ib, mIndexCount, mIndexOffset, mBuilder->fUniforms,
                                             mBounds)
diff --git a/libs/hwui/Properties.cpp b/libs/hwui/Properties.cpp
index 06aed63..5e5eb4a 100644
--- a/libs/hwui/Properties.cpp
+++ b/libs/hwui/Properties.cpp
@@ -20,7 +20,7 @@
 #ifdef __ANDROID__
 #include "HWUIProperties.sysprop.h"
 #endif
-#include "SkTraceEventCommon.h"
+#include "src/core/SkTraceEventCommon.h"
 
 #include <algorithm>
 #include <cstdlib>
diff --git a/libs/hwui/Readback.cpp b/libs/hwui/Readback.cpp
index 045de35..afe4c38 100644
--- a/libs/hwui/Readback.cpp
+++ b/libs/hwui/Readback.cpp
@@ -21,6 +21,7 @@
 #include <SkCanvas.h>
 #include <SkColorSpace.h>
 #include <SkImage.h>
+#include <SkImageAndroid.h>
 #include <SkImageInfo.h>
 #include <SkMatrix.h>
 #include <SkPaint.h>
@@ -29,6 +30,7 @@
 #include <SkSamplingOptions.h>
 #include <SkSurface.h>
 #include "include/gpu/GpuTypes.h" // from Skia
+#include <include/gpu/ganesh/SkSurfaceGanesh.h>
 #include <gui/TraceUtils.h>
 #include <private/android/AHardwareBufferHelpers.h>
 #include <shaders/shaders.h>
@@ -108,7 +110,8 @@
     sk_sp<SkColorSpace> colorSpace =
             DataSpaceToColorSpace(static_cast<android_dataspace>(dataspace));
     sk_sp<SkImage> image =
-            SkImage::MakeFromAHardwareBuffer(sourceBuffer.get(), kPremul_SkAlphaType, colorSpace);
+            SkImages::DeferredFromAHardwareBuffer(sourceBuffer.get(), kPremul_SkAlphaType, 
+                                                  colorSpace);
 
     if (!image.get()) {
         return request->onCopyFinished(CopyResult::UnknownError);
@@ -171,16 +174,16 @@
     SkBitmap skBitmap = request->getDestinationBitmap(srcRect.width(), srcRect.height());
     SkBitmap* bitmap = &skBitmap;
     sk_sp<SkSurface> tmpSurface =
-            SkSurface::MakeRenderTarget(mRenderThread.getGrContext(), skgpu::Budgeted::kYes,
-                                        bitmap->info(), 0, kTopLeft_GrSurfaceOrigin, nullptr);
+            SkSurfaces::RenderTarget(mRenderThread.getGrContext(), skgpu::Budgeted::kYes,
+                                     bitmap->info(), 0, kTopLeft_GrSurfaceOrigin, nullptr);
 
     // if we can't generate a GPU surface that matches the destination bitmap (e.g. 565) then we
     // attempt to do the intermediate rendering step in 8888
     if (!tmpSurface.get()) {
         SkImageInfo tmpInfo = bitmap->info().makeColorType(SkColorType::kN32_SkColorType);
-        tmpSurface = SkSurface::MakeRenderTarget(mRenderThread.getGrContext(),
-                                                 skgpu::Budgeted::kYes,
-                                                 tmpInfo, 0, kTopLeft_GrSurfaceOrigin, nullptr);
+        tmpSurface = SkSurfaces::RenderTarget(mRenderThread.getGrContext(),
+                                              skgpu::Budgeted::kYes,
+                                              tmpInfo, 0, kTopLeft_GrSurfaceOrigin, nullptr);
         if (!tmpSurface.get()) {
             ALOGW("Unable to generate GPU buffer in a format compatible with the provided bitmap");
             return request->onCopyFinished(CopyResult::UnknownError);
@@ -346,19 +349,19 @@
      * a scaling issue (b/62262733) that was encountered when sampling from an EGLImage into a
      * software buffer.
      */
-    sk_sp<SkSurface> tmpSurface = SkSurface::MakeRenderTarget(mRenderThread.getGrContext(),
-                                                              skgpu::Budgeted::kYes,
-                                                              bitmap->info(),
-                                                              0,
-                                                              kTopLeft_GrSurfaceOrigin, nullptr);
+    sk_sp<SkSurface> tmpSurface = SkSurfaces::RenderTarget(mRenderThread.getGrContext(),
+                                                           skgpu::Budgeted::kYes,
+                                                           bitmap->info(),
+                                                           0,
+                                                           kTopLeft_GrSurfaceOrigin, nullptr);
 
     // if we can't generate a GPU surface that matches the destination bitmap (e.g. 565) then we
     // attempt to do the intermediate rendering step in 8888
     if (!tmpSurface.get()) {
         SkImageInfo tmpInfo = bitmap->info().makeColorType(SkColorType::kN32_SkColorType);
-        tmpSurface = SkSurface::MakeRenderTarget(mRenderThread.getGrContext(),
-                                                 skgpu::Budgeted::kYes,
-                                                 tmpInfo, 0, kTopLeft_GrSurfaceOrigin, nullptr);
+        tmpSurface = SkSurfaces::RenderTarget(mRenderThread.getGrContext(),
+                                              skgpu::Budgeted::kYes,
+                                              tmpInfo, 0, kTopLeft_GrSurfaceOrigin, nullptr);
         if (!tmpSurface.get()) {
             ALOGW("Unable to generate GPU buffer in a format compatible with the provided bitmap");
             return false;
diff --git a/libs/hwui/RecordingCanvas.cpp b/libs/hwui/RecordingCanvas.cpp
index 924fbd6..71f47e9 100644
--- a/libs/hwui/RecordingCanvas.cpp
+++ b/libs/hwui/RecordingCanvas.cpp
@@ -36,6 +36,7 @@
 #include "SkImageFilter.h"
 #include "SkImageInfo.h"
 #include "SkLatticeIter.h"
+#include "SkMesh.h"
 #include "SkPaint.h"
 #include "SkPicture.h"
 #include "SkRRect.h"
@@ -49,6 +50,7 @@
 #include "effects/GainmapRenderer.h"
 #include "include/gpu/GpuTypes.h"  // from Skia
 #include "include/gpu/GrDirectContext.h"
+#include "include/gpu/ganesh/SkMeshGanesh.h"
 #include "pipeline/skia/AnimatedDrawables.h"
 #include "pipeline/skia/FunctorDrawable.h"
 #ifdef __ANDROID__
@@ -107,11 +109,6 @@
 };
 static_assert(sizeof(Op) == 4, "");
 
-struct Flush final : Op {
-    static const auto kType = Type::Flush;
-    void draw(SkCanvas* c, const SkMatrix&) const { c->flush(); }
-};
-
 struct Save final : Op {
     static const auto kType = Type::Save;
     void draw(SkCanvas* c, const SkMatrix&) const { c->save(); }
@@ -532,12 +529,13 @@
     mutable bool isGpuBased;
     mutable GrDirectContext::DirectContextID contextId;
     void draw(SkCanvas* c, const SkMatrix&) const {
+#ifdef __ANDROID__
         GrDirectContext* directContext = c->recordingContext()->asDirectContext();
 
         GrDirectContext::DirectContextID id = directContext->directContextID();
         if (!isGpuBased || contextId != id) {
             sk_sp<SkMesh::VertexBuffer> vb =
-                    SkMesh::CopyVertexBuffer(directContext, cpuMesh.refVertexBuffer());
+                    SkMeshes::CopyVertexBuffer(directContext, cpuMesh.refVertexBuffer());
             if (!cpuMesh.indexBuffer()) {
                 gpuMesh = SkMesh::Make(cpuMesh.refSpec(), cpuMesh.mode(), vb, cpuMesh.vertexCount(),
                                        cpuMesh.vertexOffset(), cpuMesh.refUniforms(),
@@ -545,7 +543,7 @@
                                   .mesh;
             } else {
                 sk_sp<SkMesh::IndexBuffer> ib =
-                        SkMesh::CopyIndexBuffer(directContext, cpuMesh.refIndexBuffer());
+                        SkMeshes::CopyIndexBuffer(directContext, cpuMesh.refIndexBuffer());
                 gpuMesh = SkMesh::MakeIndexed(cpuMesh.refSpec(), cpuMesh.mode(), vb,
                                               cpuMesh.vertexCount(), cpuMesh.vertexOffset(), ib,
                                               cpuMesh.indexCount(), cpuMesh.indexOffset(),
@@ -558,6 +556,9 @@
         }
 
         c->drawMesh(gpuMesh, blender, paint);
+#else
+        c->drawMesh(cpuMesh, blender, paint);
+#endif
     }
 };
 
@@ -675,12 +676,11 @@
             // because the webview functor still doesn't respect the canvas clip stack.
             const SkIRect deviceBounds = c->getDeviceClipBounds();
             if (mLayerSurface == nullptr || c->imageInfo() != mLayerImageInfo) {
-                GrRecordingContext* directContext = c->recordingContext();
                 mLayerImageInfo =
                         c->imageInfo().makeWH(deviceBounds.width(), deviceBounds.height());
-                mLayerSurface = SkSurface::MakeRenderTarget(directContext, skgpu::Budgeted::kYes,
-                                                            mLayerImageInfo, 0,
-                                                            kTopLeft_GrSurfaceOrigin, nullptr);
+                // SkCanvas::makeSurface returns a new surface that will be GPU-backed if
+                // canvas was also.
+                mLayerSurface = c->makeSurface(mLayerImageInfo);
             }
 
             SkCanvas* layerCanvas = mLayerSurface->getCanvas();
@@ -752,10 +752,6 @@
     }
 }
 
-void DisplayListData::flush() {
-    this->push<Flush>(0);
-}
-
 void DisplayListData::save() {
     this->push<Save>(0);
 }
@@ -1047,10 +1043,6 @@
     return nullptr;
 }
 
-void RecordingCanvas::onFlush() {
-    fDL->flush();
-}
-
 void RecordingCanvas::willSave() {
     mSaveCount++;
     fDL->save();
diff --git a/libs/hwui/RecordingCanvas.h b/libs/hwui/RecordingCanvas.h
index 1f4ba5d..4f54ee2 100644
--- a/libs/hwui/RecordingCanvas.h
+++ b/libs/hwui/RecordingCanvas.h
@@ -127,8 +127,6 @@
 private:
     friend class RecordingCanvas;
 
-    void flush();
-
     void save();
     void saveLayer(const SkRect*, const SkPaint*, const SkImageFilter*, SkCanvas::SaveLayerFlags);
     void saveBehind(const SkRect*);
@@ -208,8 +206,6 @@
     void willRestore() override;
     bool onDoSaveBehind(const SkRect*) override;
 
-    void onFlush() override;
-
     void didConcat44(const SkM44&) override;
     void didSetM44(const SkM44&) override;
     void didScale(SkScalar, SkScalar) override;
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp
index 1c39db3..1dd22cf 100644
--- a/libs/hwui/RenderNode.cpp
+++ b/libs/hwui/RenderNode.cpp
@@ -260,6 +260,12 @@
         pushStagingDisplayListChanges(observer, info);
     }
 
+    // always damageSelf when filtering backdrop content, or else the BackdropFilterDrawable will
+    // get a wrong snapshot of previous content.
+    if (mProperties.layerProperties().getBackdropImageFilter()) {
+        damageSelf(info);
+    }
+
     if (mDisplayList) {
         info.out.hasFunctors |= mDisplayList.hasFunctor();
         mHasHolePunches = mDisplayList.hasHolePunches();
diff --git a/libs/hwui/RenderProperties.cpp b/libs/hwui/RenderProperties.cpp
index 0589f13..c537123 100644
--- a/libs/hwui/RenderProperties.cpp
+++ b/libs/hwui/RenderProperties.cpp
@@ -55,6 +55,12 @@
     return true;
 }
 
+bool LayerProperties::setBackdropImageFilter(SkImageFilter* imageFilter) {
+    if (mBackdropImageFilter.get() == imageFilter) return false;
+    mBackdropImageFilter = sk_ref_sp(imageFilter);
+    return true;
+}
+
 bool LayerProperties::setFromPaint(const SkPaint* paint) {
     bool changed = false;
     changed |= setAlpha(static_cast<uint8_t>(PaintUtils::getAlphaDirect(paint)));
@@ -70,6 +76,7 @@
     setXferMode(other.xferMode());
     setColorFilter(other.getColorFilter());
     setImageFilter(other.getImageFilter());
+    setBackdropImageFilter(other.getBackdropImageFilter());
     mStretchEffect = other.mStretchEffect;
     return *this;
 }
diff --git a/libs/hwui/RenderProperties.h b/libs/hwui/RenderProperties.h
index 064ba7a..e358b57 100644
--- a/libs/hwui/RenderProperties.h
+++ b/libs/hwui/RenderProperties.h
@@ -97,8 +97,12 @@
 
     bool setImageFilter(SkImageFilter* imageFilter);
 
+    bool setBackdropImageFilter(SkImageFilter* imageFilter);
+
     SkImageFilter* getImageFilter() const { return mImageFilter.get(); }
 
+    SkImageFilter* getBackdropImageFilter() const { return mBackdropImageFilter.get(); }
+
     const StretchEffect& getStretchEffect() const { return mStretchEffect; }
 
     StretchEffect& mutableStretchEffect() { return mStretchEffect; }
@@ -129,6 +133,7 @@
     SkBlendMode mMode;
     sk_sp<SkColorFilter> mColorFilter;
     sk_sp<SkImageFilter> mImageFilter;
+    sk_sp<SkImageFilter> mBackdropImageFilter;
     StretchEffect mStretchEffect;
 };
 
diff --git a/libs/hwui/SkiaCanvas.h b/libs/hwui/SkiaCanvas.h
index b785989..ced0224 100644
--- a/libs/hwui/SkiaCanvas.h
+++ b/libs/hwui/SkiaCanvas.h
@@ -175,7 +175,7 @@
                                   const Paint& paint, const SkPath& path, size_t start,
                                   size_t end) override;
 
-    void onFilterPaint(Paint& paint);
+    virtual void onFilterPaint(Paint& paint);
 
     Paint filterPaint(const Paint& src) {
         Paint dst(src);
diff --git a/libs/hwui/SkiaInterpolator.cpp b/libs/hwui/SkiaInterpolator.cpp
index b58f517..c67b135 100644
--- a/libs/hwui/SkiaInterpolator.cpp
+++ b/libs/hwui/SkiaInterpolator.cpp
@@ -18,9 +18,8 @@
 
 #include "include/core/SkScalar.h"
 #include "include/core/SkTypes.h"
-#include "include/private/SkFixed.h"
-#include "src/core/SkTSearch.h"
 
+#include <cstdlib>
 #include <log/log.h>
 
 typedef int Dot14;
@@ -41,18 +40,18 @@
     if (x <= 0) {
         return 0;
     }
-    if (x >= SK_Scalar1) {
+    if (x >= 1.0f) {
         return Dot14_ONE;
     }
-    return SkScalarToFixed(x) >> 2;
+    return static_cast<Dot14>(x * Dot14_ONE);
 }
 
 static float SkUnitCubicInterp(float value, float bx, float by, float cx, float cy) {
     // pin to the unit-square, and convert to 2.14
     Dot14 x = pin_and_convert(value);
 
-    if (x == 0) return 0;
-    if (x == Dot14_ONE) return SK_Scalar1;
+    if (x == 0) return 0.0f;
+    if (x == Dot14_ONE) return 1.0f;
 
     Dot14 b = pin_and_convert(bx);
     Dot14 c = pin_and_convert(cx);
@@ -84,7 +83,7 @@
     A = 3 * b;
     B = 3 * (c - 2 * b);
     C = 3 * (b - c) + Dot14_ONE;
-    return SkFixedToScalar(eval_cubic(t, A, B, C) << 2);
+    return Dot14ToFloat(eval_cubic(t, A, B, C));
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -104,7 +103,7 @@
     fFlags = 0;
     fElemCount = static_cast<uint8_t>(elemCount);
     fFrameCount = static_cast<int16_t>(frameCount);
-    fRepeat = SK_Scalar1;
+    fRepeat = 1.0f;
     if (fStorage) {
         free(fStorage);
         fStorage = nullptr;
@@ -136,17 +135,46 @@
 
 float SkiaInterpolatorBase::ComputeRelativeT(SkMSec time, SkMSec prevTime, SkMSec nextTime,
                                              const float blend[4]) {
-    SkASSERT(time > prevTime && time < nextTime);
+    LOG_FATAL_IF(time < prevTime || time > nextTime);
 
     float t = (float)(time - prevTime) / (float)(nextTime - prevTime);
     return blend ? SkUnitCubicInterp(t, blend[0], blend[1], blend[2], blend[3]) : t;
 }
 
+// Returns the index of where the item is or the bit not of the index
+// where the item should go in order to keep arr sorted in ascending order.
+int SkiaInterpolatorBase::binarySearch(const SkTimeCode* arr, int count, SkMSec target) {
+    if (count <= 0) {
+        return ~0;
+    }
+
+    int lo = 0;
+    int hi = count - 1;
+
+    while (lo < hi) {
+        int mid = (hi + lo) / 2;
+        SkMSec elem = arr[mid].fTime;
+        if (elem == target) {
+            return mid;
+        } else if (elem < target) {
+            lo = mid + 1;
+        } else {
+            hi = mid;
+        }
+    }
+    // Check to see if target is greater or less than where we stopped
+    if (target < arr[lo].fTime) {
+        return ~lo;
+    }
+    // e.g. it should go at the end.
+    return ~(lo + 1);
+}
+
 SkiaInterpolatorBase::Result SkiaInterpolatorBase::timeToT(SkMSec time, float* T, int* indexPtr,
                                                            bool* exactPtr) const {
-    SkASSERT(fFrameCount > 0);
+    LOG_FATAL_IF(fFrameCount <= 0);
     Result result = kNormal_Result;
-    if (fRepeat != SK_Scalar1) {
+    if (fRepeat != 1.0f) {
         SkMSec startTime = 0, endTime = 0;  // initialize to avoid warning
         this->getDuration(&startTime, &endTime);
         SkMSec totalTime = endTime - startTime;
@@ -168,10 +196,8 @@
         time = offsetTime + startTime;
     }
 
-    int index = SkTSearch<SkMSec>(&fTimes[0].fTime, fFrameCount, time, sizeof(SkTimeCode));
-
+    int index = SkiaInterpolatorBase::binarySearch(fTimes, fFrameCount, time);
     bool exact = true;
-
     if (index < 0) {
         index = ~index;
         if (index == 0) {
@@ -184,10 +210,11 @@
             }
             result = kFreezeEnd_Result;
         } else {
+            // Need to interpolate between two frames.
             exact = false;
         }
     }
-    SkASSERT(index < fFrameCount);
+    LOG_FATAL_IF(index >= fFrameCount);
     const SkTimeCode* nextTime = &fTimes[index];
     SkMSec nextT = nextTime[0].fTime;
     if (exact) {
@@ -207,7 +234,7 @@
 }
 
 SkiaInterpolator::SkiaInterpolator(int elemCount, int frameCount) {
-    SkASSERT(elemCount > 0);
+    LOG_FATAL_IF(elemCount <= 0);
     this->reset(elemCount, frameCount);
 }
 
@@ -221,21 +248,19 @@
     fValues = (float*)((char*)fStorage + sizeof(SkTimeCode) * frameCount);
 }
 
-#define SK_Fixed1Third (SK_Fixed1 / 3)
-#define SK_Fixed2Third (SK_Fixed1 * 2 / 3)
-
 static const float gIdentityBlend[4] = {0.33333333f, 0.33333333f, 0.66666667f, 0.66666667f};
 
 bool SkiaInterpolator::setKeyFrame(int index, SkMSec time, const float values[],
                                    const float blend[4]) {
-    SkASSERT(values != nullptr);
+    LOG_FATAL_IF(values == nullptr);
 
     if (blend == nullptr) {
         blend = gIdentityBlend;
     }
 
-    bool success = ~index == SkTSearch<SkMSec>(&fTimes->fTime, index, time, sizeof(SkTimeCode));
-    SkASSERT(success);
+    // Verify the time should go after all the frames before index
+    bool success = ~index == SkiaInterpolatorBase::binarySearch(fTimes, index, time);
+    LOG_FATAL_IF(!success);
     if (success) {
         SkTimeCode* timeCode = &fTimes[index];
         timeCode->fTime = time;
@@ -257,7 +282,7 @@
         if (exact) {
             memcpy(values, nextSrc, fElemCount * sizeof(float));
         } else {
-            SkASSERT(index > 0);
+            LOG_FATAL_IF(index <= 0);
 
             const float* prevSrc = nextSrc - fElemCount;
 
diff --git a/libs/hwui/SkiaInterpolator.h b/libs/hwui/SkiaInterpolator.h
index 9422cb5..62e6c1e 100644
--- a/libs/hwui/SkiaInterpolator.h
+++ b/libs/hwui/SkiaInterpolator.h
@@ -68,14 +68,16 @@
     enum Flags { kMirror = 1, kReset = 2, kHasBlend = 4 };
     static float ComputeRelativeT(uint32_t time, uint32_t prevTime, uint32_t nextTime,
                                   const float blend[4] = nullptr);
-    int16_t fFrameCount;
-    uint8_t fElemCount;
-    uint8_t fFlags;
-    float fRepeat;
     struct SkTimeCode {
         uint32_t fTime;
         float fBlend[4];
     };
+    static int binarySearch(const SkTimeCode* arr, int count, uint32_t target);
+
+    int16_t fFrameCount;
+    uint8_t fElemCount;
+    uint8_t fFlags;
+    float fRepeat;
     SkTimeCode* fTimes;  // pointer into fStorage
     void* fStorage;
 };
diff --git a/libs/hwui/SkiaWrapper.h b/libs/hwui/SkiaWrapper.h
new file mode 100644
index 0000000..bd0e35a
--- /dev/null
+++ b/libs/hwui/SkiaWrapper.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SKIA_WRAPPER_H_
+#define SKIA_WRAPPER_H_
+
+#include <SkRefCnt.h>
+#include <utils/RefBase.h>
+
+namespace android::uirenderer {
+
+template <typename T>
+class SkiaWrapper : public VirtualLightRefBase {
+public:
+    sk_sp<T> getInstance() {
+        if (mInstance != nullptr && shouldDiscardInstance()) {
+            mInstance = nullptr;
+        }
+
+        if (mInstance == nullptr) {
+            mInstance = createInstance();
+            mGenerationId++;
+        }
+        return mInstance;
+    }
+
+    virtual bool shouldDiscardInstance() const { return false; }
+
+    void discardInstance() { mInstance = nullptr; }
+
+    [[nodiscard]] int32_t getGenerationId() const { return mGenerationId; }
+
+protected:
+    virtual sk_sp<T> createInstance() = 0;
+
+private:
+    sk_sp<T> mInstance = nullptr;
+    int32_t mGenerationId = 0;
+};
+
+}  // namespace android::uirenderer
+
+#endif  // SKIA_WRAPPER_H_
diff --git a/libs/hwui/Tonemapper.cpp b/libs/hwui/Tonemapper.cpp
index 974a5d0..ae29edf 100644
--- a/libs/hwui/Tonemapper.cpp
+++ b/libs/hwui/Tonemapper.cpp
@@ -20,6 +20,7 @@
 #include <log/log.h>
 // libshaders only exists on Android devices
 #ifdef __ANDROID__
+#include <renderthread/CanvasContext.h>
 #include <shaders/shaders.h>
 #endif
 
@@ -53,8 +54,17 @@
 
     ColorFilterRuntimeEffectBuilder effectBuilder(std::move(runtimeEffect));
 
+    auto colorTransform = android::mat4();
+    const auto* context = renderthread::CanvasContext::getActiveContext();
+    if (context) {
+        const auto ratio = context->targetSdrHdrRatio();
+        if (ratio > 1.0f) {
+            colorTransform = android::mat4::scale(vec4(ratio, ratio, ratio, 1.f));
+        }
+    }
+
     const auto uniforms =
-            shaders::buildLinearEffectUniforms(linearEffect, android::mat4(), maxDisplayLuminance,
+            shaders::buildLinearEffectUniforms(linearEffect, colorTransform, maxDisplayLuminance,
                                                currentDisplayLuminanceNits, maxLuminance);
 
     for (const auto& uniform : uniforms) {
diff --git a/libs/hwui/apex/android_bitmap.cpp b/libs/hwui/apex/android_bitmap.cpp
index c442a7b..c80a9b4 100644
--- a/libs/hwui/apex/android_bitmap.cpp
+++ b/libs/hwui/apex/android_bitmap.cpp
@@ -14,8 +14,6 @@
  * limitations under the License.
  */
 
-#undef LOG_TAG
-#define LOG_TAG "Bitmap"
 #include <log/log.h>
 
 #include "android/graphics/bitmap.h"
diff --git a/libs/hwui/apex/android_canvas.cpp b/libs/hwui/apex/android_canvas.cpp
index 905b123..19f726a 100644
--- a/libs/hwui/apex/android_canvas.cpp
+++ b/libs/hwui/apex/android_canvas.cpp
@@ -45,9 +45,9 @@
     SkImageInfo imageInfo = uirenderer::ANativeWindowToImageInfo(*buffer, cs);
     size_t rowBytes = buffer->stride * imageInfo.bytesPerPixel();
 
-    // If SkSurface::MakeRasterDirect fails then we should as well as we will not be able to
+    // If SkSurfaces::WrapPixels fails then we should as well as we will not be able to
     // draw into the canvas.
-    sk_sp<SkSurface> surface = SkSurface::MakeRasterDirect(imageInfo, buffer->bits, rowBytes);
+    sk_sp<SkSurface> surface = SkSurfaces::WrapPixels(imageInfo, buffer->bits, rowBytes);
     if (surface.get() != nullptr) {
         if (outBitmap) {
             outBitmap->setInfo(imageInfo, rowBytes);
diff --git a/libs/hwui/apex/jni_runtime.cpp b/libs/hwui/apex/jni_runtime.cpp
index 09ae7e7..883f273 100644
--- a/libs/hwui/apex/jni_runtime.cpp
+++ b/libs/hwui/apex/jni_runtime.cpp
@@ -25,9 +25,6 @@
 #include <sys/cdefs.h>
 #include <vulkan/vulkan.h>
 
-#undef LOG_TAG
-#define LOG_TAG "AndroidGraphicsJNI"
-
 extern int register_android_graphics_Bitmap(JNIEnv*);
 extern int register_android_graphics_BitmapFactory(JNIEnv*);
 extern int register_android_graphics_BitmapRegionDecoder(JNIEnv*);
diff --git a/libs/hwui/effects/GainmapRenderer.cpp b/libs/hwui/effects/GainmapRenderer.cpp
index 613f52b..db58b2b 100644
--- a/libs/hwui/effects/GainmapRenderer.cpp
+++ b/libs/hwui/effects/GainmapRenderer.cpp
@@ -245,11 +245,18 @@
             // This can happen if a BitmapShader is used on multiple canvas', such as a
             // software + hardware canvas, which is otherwise valid as SkShader is "immutable"
             std::lock_guard _lock(mUniformGuard);
-            const float Wunclamped = (sk_float_log(targetHdrSdrRatio) -
-                                      sk_float_log(mGainmapInfo.fDisplayRatioSdr)) /
-                                     (sk_float_log(mGainmapInfo.fDisplayRatioHdr) -
-                                      sk_float_log(mGainmapInfo.fDisplayRatioSdr));
-            const float W = std::max(std::min(Wunclamped, 1.f), 0.f);
+            // Compute the weight parameter that will be used to blend between the images.
+            float W = 0.f;
+            if (targetHdrSdrRatio > mGainmapInfo.fDisplayRatioSdr) {
+                if (targetHdrSdrRatio < mGainmapInfo.fDisplayRatioHdr) {
+                    W = (sk_float_log(targetHdrSdrRatio) -
+                         sk_float_log(mGainmapInfo.fDisplayRatioSdr)) /
+                        (sk_float_log(mGainmapInfo.fDisplayRatioHdr) -
+                         sk_float_log(mGainmapInfo.fDisplayRatioSdr));
+                } else {
+                    W = 1.f;
+                }
+            }
             mBuilder.uniform("W") = W;
             uniforms = mBuilder.uniforms();
         }
diff --git a/libs/hwui/hwui/AnimatedImageDrawable.cpp b/libs/hwui/hwui/AnimatedImageDrawable.cpp
index 8049dc9..27773a6 100644
--- a/libs/hwui/hwui/AnimatedImageDrawable.cpp
+++ b/libs/hwui/hwui/AnimatedImageDrawable.cpp
@@ -111,7 +111,7 @@
     {
         std::unique_lock lock{mImageLock};
         snap.mDurationMS = adjustFrameDuration(mSkAnimatedImage->decodeNextFrame());
-        snap.mPic.reset(mSkAnimatedImage->newPictureSnapshot());
+        snap.mPic = mSkAnimatedImage->makePictureSnapshot();
     }
 
     return snap;
@@ -123,7 +123,7 @@
     {
         std::unique_lock lock{mImageLock};
         mSkAnimatedImage->reset();
-        snap.mPic.reset(mSkAnimatedImage->newPictureSnapshot());
+        snap.mPic = mSkAnimatedImage->makePictureSnapshot();
         snap.mDurationMS = currentFrameDuration();
     }
 
diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp
index 92d875b..8344a86 100644
--- a/libs/hwui/hwui/Bitmap.cpp
+++ b/libs/hwui/hwui/Bitmap.cpp
@@ -43,12 +43,15 @@
 #include <SkColor.h>
 #include <SkEncodedImageFormat.h>
 #include <SkHighContrastFilter.h>
-#include <SkImageEncoder.h>
+#include <SkImage.h>
+#include <SkImageAndroid.h>
 #include <SkImagePriv.h>
 #include <SkJpegGainmapEncoder.h>
 #include <SkPixmap.h>
 #include <SkRect.h>
 #include <SkStream.h>
+#include <SkJpegEncoder.h>
+#include <SkPngEncoder.h>
 #include <SkWebpEncoder.h>
 
 #include <limits>
@@ -296,7 +299,8 @@
     mPixelStorage.hardware.size = AHardwareBuffer_getAllocationSize(buffer);
     AHardwareBuffer_acquire(buffer);
     setImmutable();  // HW bitmaps are always immutable
-    mImage = SkImage::MakeFromAHardwareBuffer(buffer, mInfo.alphaType(), mInfo.refColorSpace());
+    mImage = SkImages::DeferredFromAHardwareBuffer(buffer, mInfo.alphaType(),
+                                                   mInfo.refColorSpace());
 }
 #endif
 
@@ -407,7 +411,12 @@
         // Note we don't cache in this case, because the raster image holds a pointer to this Bitmap
         // internally and ~Bitmap won't be invoked.
         // TODO: refactor Bitmap to not derive from SkPixelRef, which would allow caching here.
+#ifdef __ANDROID__
+        // pinnable images are only supported with the Ganesh GPU backend compiled in.
+        image = SkImages::PinnableRasterFromBitmap(skiaBitmap);
+#else
         image = SkMakeImageFromRasterBitmap(skiaBitmap, kNever_SkCopyPixelsMode);
+#endif
     }
     return image;
 }
@@ -528,17 +537,25 @@
         return false;
     }
 
-    SkEncodedImageFormat fm;
     switch (format) {
-        case JavaCompressFormat::Jpeg:
-            fm = SkEncodedImageFormat::kJPEG;
-            break;
+        case JavaCompressFormat::Jpeg: {
+            SkJpegEncoder::Options options;
+            options.fQuality = quality;
+            return SkJpegEncoder::Encode(stream, bitmap.pixmap(), options);
+        }
         case JavaCompressFormat::Png:
-            fm = SkEncodedImageFormat::kPNG;
-            break;
-        case JavaCompressFormat::Webp:
-            fm = SkEncodedImageFormat::kWEBP;
-            break;
+            return SkPngEncoder::Encode(stream, bitmap.pixmap(), {});
+        case JavaCompressFormat::Webp: {
+            SkWebpEncoder::Options options;
+            if (quality >= 100) {
+                options.fCompression = SkWebpEncoder::Compression::kLossless;
+                options.fQuality = 75; // This is effort to compress
+            } else {
+                options.fCompression = SkWebpEncoder::Compression::kLossy;
+                options.fQuality = quality;
+            }
+            return SkWebpEncoder::Encode(stream, bitmap.pixmap(), options);
+        }
         case JavaCompressFormat::WebpLossy:
         case JavaCompressFormat::WebpLossless: {
             SkWebpEncoder::Options options;
@@ -548,8 +565,6 @@
             return SkWebpEncoder::Encode(stream, bitmap.pixmap(), options);
         }
     }
-
-    return SkEncodeImage(stream, bitmap, fm, quality);
 }
 
 sp<uirenderer::Gainmap> Bitmap::gainmap() const {
diff --git a/libs/hwui/hwui/Canvas.cpp b/libs/hwui/hwui/Canvas.cpp
index cd8af3d..2351797 100644
--- a/libs/hwui/hwui/Canvas.cpp
+++ b/libs/hwui/hwui/Canvas.cpp
@@ -151,7 +151,7 @@
         memcpy(outPositions, positions, sizeof(float) * 2 * glyphCount);
     };
 
-    const minikin::MinikinFont* minikinFont = font.typeface().get();
+    const minikin::MinikinFont* minikinFont = font.baseTypeface().get();
     SkFont* skfont = &copied.getSkFont();
     MinikinFontSkia::populateSkFont(skfont, minikinFont, minikin::FontFakery());
 
diff --git a/libs/hwui/hwui/ImageDecoder.cpp b/libs/hwui/hwui/ImageDecoder.cpp
index 701a87f..588463c 100644
--- a/libs/hwui/hwui/ImageDecoder.cpp
+++ b/libs/hwui/hwui/ImageDecoder.cpp
@@ -43,9 +43,6 @@
 
 #include <memory>
 
-#undef LOG_TAG
-#define LOG_TAG "ImageDecoder"
-
 using namespace android;
 
 sk_sp<SkColorSpace> ImageDecoder::getDefaultColorSpace() const {
diff --git a/libs/hwui/hwui/MinikinUtils.h b/libs/hwui/hwui/MinikinUtils.h
index 009b84b..51960b0 100644
--- a/libs/hwui/hwui/MinikinUtils.h
+++ b/libs/hwui/hwui/MinikinUtils.h
@@ -76,7 +76,7 @@
         size_t start = 0;
         size_t nGlyphs = layout.nGlyphs();
         for (size_t i = 0; i < nGlyphs; i++) {
-            const minikin::MinikinFont* nextFont = layout.getFont(i)->typeface().get();
+            const minikin::MinikinFont* nextFont = layout.typeface(i).get();
             if (i > 0 && nextFont != curFont) {
                 SkFont* skfont = &paint->getSkFont();
                 MinikinFontSkia::populateSkFont(skfont, curFont, layout.getFakery(start));
diff --git a/libs/hwui/hwui/Typeface.cpp b/libs/hwui/hwui/Typeface.cpp
index 3c67edc..b63ee1b 100644
--- a/libs/hwui/hwui/Typeface.cpp
+++ b/libs/hwui/hwui/Typeface.cpp
@@ -140,9 +140,8 @@
 
         const minikin::FontStyle defaultStyle;
         const minikin::MinikinFont* mf =
-                families.empty()
-                        ? nullptr
-                        : families[0]->getClosestMatch(defaultStyle).font->typeface().get();
+                families.empty() ? nullptr
+                                 : families[0]->getClosestMatch(defaultStyle).typeface().get();
         if (mf != nullptr) {
             SkTypeface* skTypeface = reinterpret_cast<const MinikinFontSkia*>(mf)->GetSkTypeface();
             const SkFontStyle& style = skTypeface->fontStyle();
diff --git a/libs/hwui/jni/AnimatedImageDrawable.cpp b/libs/hwui/jni/AnimatedImageDrawable.cpp
index a7f5aa83..90b1da8 100644
--- a/libs/hwui/jni/AnimatedImageDrawable.cpp
+++ b/libs/hwui/jni/AnimatedImageDrawable.cpp
@@ -14,10 +14,6 @@
  * limitations under the License.
  */
 
-#include "GraphicsJNI.h"
-#include "ImageDecoder.h"
-#include "Utils.h"
-
 #include <SkAndroidCodec.h>
 #include <SkAnimatedImage.h>
 #include <SkColorFilter.h>
@@ -27,10 +23,15 @@
 #include <SkRect.h>
 #include <SkRefCnt.h>
 #include <hwui/AnimatedImageDrawable.h>
-#include <hwui/ImageDecoder.h>
 #include <hwui/Canvas.h>
+#include <hwui/ImageDecoder.h>
 #include <utils/Looper.h>
 
+#include "ColorFilter.h"
+#include "GraphicsJNI.h"
+#include "ImageDecoder.h"
+#include "Utils.h"
+
 using namespace android;
 
 static jclass gAnimatedImageDrawableClass;
@@ -145,8 +146,9 @@
 static void AnimatedImageDrawable_nSetColorFilter(JNIEnv* env, jobject /*clazz*/, jlong nativePtr,
                                                   jlong nativeFilter) {
     auto* drawable = reinterpret_cast<AnimatedImageDrawable*>(nativePtr);
-    auto* filter = reinterpret_cast<SkColorFilter*>(nativeFilter);
-    drawable->setStagingColorFilter(sk_ref_sp(filter));
+    auto filter = uirenderer::ColorFilter::fromJava(nativeFilter);
+    auto skColorFilter = filter != nullptr ? filter->getInstance() : sk_sp<SkColorFilter>();
+    drawable->setStagingColorFilter(skColorFilter);
 }
 
 static jboolean AnimatedImageDrawable_nIsRunning(JNIEnv* env, jobject /*clazz*/, jlong nativePtr) {
diff --git a/libs/hwui/jni/Bitmap.cpp b/libs/hwui/jni/Bitmap.cpp
index 6ee7576..9e21f86 100644
--- a/libs/hwui/jni/Bitmap.cpp
+++ b/libs/hwui/jni/Bitmap.cpp
@@ -1,5 +1,3 @@
-#undef LOG_TAG
-#define LOG_TAG "Bitmap"
 // #define LOG_NDEBUG 0
 #include "Bitmap.h"
 
diff --git a/libs/hwui/jni/BitmapFactory.cpp b/libs/hwui/jni/BitmapFactory.cpp
index 8abcd9a..3d0a534 100644
--- a/libs/hwui/jni/BitmapFactory.cpp
+++ b/libs/hwui/jni/BitmapFactory.cpp
@@ -1,6 +1,3 @@
-#undef LOG_TAG
-#define LOG_TAG "BitmapFactory"
-
 #include "BitmapFactory.h"
 
 #include <Gainmap.h>
diff --git a/libs/hwui/jni/BitmapRegionDecoder.cpp b/libs/hwui/jni/BitmapRegionDecoder.cpp
index 740988f..ea5c144 100644
--- a/libs/hwui/jni/BitmapRegionDecoder.cpp
+++ b/libs/hwui/jni/BitmapRegionDecoder.cpp
@@ -14,9 +14,6 @@
  * limitations under the License.
  */
 
-#undef LOG_TAG
-#define LOG_TAG "BitmapRegionDecoder"
-
 #include "BitmapRegionDecoder.h"
 
 #include <HardwareBitmapUploader.h>
diff --git a/libs/hwui/jni/ColorFilter.cpp b/libs/hwui/jni/ColorFilter.cpp
index 4bd7ef4..0b95148 100644
--- a/libs/hwui/jni/ColorFilter.cpp
+++ b/libs/hwui/jni/ColorFilter.cpp
@@ -15,20 +15,21 @@
 ** limitations under the License.
 */
 
-#include "GraphicsJNI.h"
+#include "ColorFilter.h"
 
+#include "GraphicsJNI.h"
 #include "SkBlendMode.h"
-#include "SkColorFilter.h"
-#include "SkColorMatrixFilter.h"
 
 namespace android {
 
 using namespace uirenderer;
 
-class SkColorFilterGlue {
+class ColorFilterGlue {
 public:
-    static void SafeUnref(SkColorFilter* filter) {
-        SkSafeUnref(filter);
+    static void SafeUnref(ColorFilter* filter) {
+        if (filter) {
+            filter->decStrong(nullptr);
+        }
     }
 
     static jlong GetNativeFinalizer(JNIEnv*, jobject) {
@@ -36,41 +37,75 @@
     }
 
     static jlong CreateBlendModeFilter(JNIEnv* env, jobject, jint srcColor, jint modeHandle) {
-        SkBlendMode mode = static_cast<SkBlendMode>(modeHandle);
-        return reinterpret_cast<jlong>(SkColorFilters::Blend(srcColor, mode).release());
+        auto mode = static_cast<SkBlendMode>(modeHandle);
+        auto* blendModeFilter = new BlendModeColorFilter(srcColor, mode);
+        blendModeFilter->incStrong(nullptr);
+        return static_cast<jlong>(reinterpret_cast<uintptr_t>(blendModeFilter));
     }
 
     static jlong CreateLightingFilter(JNIEnv* env, jobject, jint mul, jint add) {
-        return reinterpret_cast<jlong>(SkColorMatrixFilter::MakeLightingFilter(mul, add).release());
+        auto* lightingFilter = new LightingFilter(mul, add);
+        lightingFilter->incStrong(nullptr);
+        return static_cast<jlong>(reinterpret_cast<uintptr_t>(lightingFilter));
     }
 
-    static jlong CreateColorMatrixFilter(JNIEnv* env, jobject, jfloatArray jarray) {
-        float matrix[20];
-        env->GetFloatArrayRegion(jarray, 0, 20, matrix);
+    static void SetLightingFilterMul(JNIEnv* env, jobject, jlong lightingFilterPtr, jint mul) {
+        auto* filter = reinterpret_cast<LightingFilter*>(lightingFilterPtr);
+        if (filter) {
+            filter->setMul(mul);
+        }
+    }
+
+    static void SetLightingFilterAdd(JNIEnv* env, jobject, jlong lightingFilterPtr, jint add) {
+        auto* filter = reinterpret_cast<LightingFilter*>(lightingFilterPtr);
+        if (filter) {
+            filter->setAdd(add);
+        }
+    }
+
+    static std::vector<float> getMatrixFromJFloatArray(JNIEnv* env, jfloatArray jarray) {
+        std::vector<float> matrix(20);
+        // float matrix[20];
+        env->GetFloatArrayRegion(jarray, 0, 20, matrix.data());
         // java biases the translates by 255, so undo that before calling skia
         matrix[ 4] *= (1.0f/255);
         matrix[ 9] *= (1.0f/255);
         matrix[14] *= (1.0f/255);
         matrix[19] *= (1.0f/255);
-        return reinterpret_cast<jlong>(SkColorFilters::Matrix(matrix).release());
+        return matrix;
+    }
+
+    static jlong CreateColorMatrixFilter(JNIEnv* env, jobject, jfloatArray jarray) {
+        std::vector<float> matrix = getMatrixFromJFloatArray(env, jarray);
+        auto* colorMatrixColorFilter = new ColorMatrixColorFilter(std::move(matrix));
+        colorMatrixColorFilter->incStrong(nullptr);
+        return static_cast<jlong>(reinterpret_cast<uintptr_t>(colorMatrixColorFilter));
+    }
+
+    static void SetColorMatrix(JNIEnv* env, jobject, jlong colorMatrixColorFilterPtr,
+                               jfloatArray jarray) {
+        auto* filter = reinterpret_cast<ColorMatrixColorFilter*>(colorMatrixColorFilterPtr);
+        if (filter) {
+            filter->setMatrix(getMatrixFromJFloatArray(env, jarray));
+        }
     }
 };
 
 static const JNINativeMethod colorfilter_methods[] = {
-    {"nativeGetFinalizer", "()J", (void*) SkColorFilterGlue::GetNativeFinalizer }
-};
+        {"nativeGetFinalizer", "()J", (void*)ColorFilterGlue::GetNativeFinalizer}};
 
 static const JNINativeMethod blendmode_methods[] = {
-    { "native_CreateBlendModeFilter", "(II)J", (void*) SkColorFilterGlue::CreateBlendModeFilter },
+        {"native_CreateBlendModeFilter", "(II)J", (void*)ColorFilterGlue::CreateBlendModeFilter},
 };
 
 static const JNINativeMethod lighting_methods[] = {
-    { "native_CreateLightingFilter", "(II)J", (void*) SkColorFilterGlue::CreateLightingFilter },
-};
+        {"native_CreateLightingFilter", "(II)J", (void*)ColorFilterGlue::CreateLightingFilter},
+        {"native_SetLightingFilterAdd", "(JI)V", (void*)ColorFilterGlue::SetLightingFilterAdd},
+        {"native_SetLightingFilterMul", "(JI)V", (void*)ColorFilterGlue::SetLightingFilterMul}};
 
 static const JNINativeMethod colormatrix_methods[] = {
-    { "nativeColorMatrixFilter", "([F)J", (void*) SkColorFilterGlue::CreateColorMatrixFilter },
-};
+        {"nativeColorMatrixFilter", "([F)J", (void*)ColorFilterGlue::CreateColorMatrixFilter},
+        {"nativeSetColorMatrix", "(J[F)V", (void*)ColorFilterGlue::SetColorMatrix}};
 
 int register_android_graphics_ColorFilter(JNIEnv* env) {
     android::RegisterMethodsOrDie(env, "android/graphics/ColorFilter", colorfilter_methods,
diff --git a/libs/hwui/jni/CreateJavaOutputStreamAdaptor.cpp b/libs/hwui/jni/CreateJavaOutputStreamAdaptor.cpp
index 15e529e..a66d3b8 100644
--- a/libs/hwui/jni/CreateJavaOutputStreamAdaptor.cpp
+++ b/libs/hwui/jni/CreateJavaOutputStreamAdaptor.cpp
@@ -1,11 +1,11 @@
 #include "CreateJavaOutputStreamAdaptor.h"
 #include "SkData.h"
-#include "SkMalloc.h"
 #include "SkRefCnt.h"
 #include "SkStream.h"
 #include "SkTypes.h"
 #include "Utils.h"
 
+#include <cstdlib>
 #include <nativehelper/JNIHelp.h>
 #include <log/log.h>
 #include <memory>
@@ -177,6 +177,10 @@
     return JavaInputStreamAdaptor::Create(env, stream, storage, swallowExceptions);
 }
 
+static void free_pointer_skproc(const void* ptr, void*) {
+    free((void*)ptr);
+}
+
 sk_sp<SkData> CopyJavaInputStream(JNIEnv* env, jobject inputStream, jbyteArray storage) {
     std::unique_ptr<SkStream> stream(CreateJavaInputStreamAdaptor(env, inputStream, storage));
     if (!stream) {
@@ -186,19 +190,31 @@
     size_t bufferSize = 4096;
     size_t streamLen = 0;
     size_t len;
-    char* data = (char*)sk_malloc_throw(bufferSize);
+    char* data = (char*)malloc(bufferSize);
+    LOG_ALWAYS_FATAL_IF(!data);
 
     while ((len = stream->read(data + streamLen,
                                bufferSize - streamLen)) != 0) {
         streamLen += len;
         if (streamLen == bufferSize) {
             bufferSize *= 2;
-            data = (char*)sk_realloc_throw(data, bufferSize);
+            data = (char*)realloc(data, bufferSize);
+            LOG_ALWAYS_FATAL_IF(!data);
         }
     }
-    data = (char*)sk_realloc_throw(data, streamLen);
-
-    return SkData::MakeFromMalloc(data, streamLen);
+    if (streamLen == 0) {
+        // realloc with size 0 is unspecified behavior in C++11
+        free(data);
+        data = nullptr;
+    } else {
+        // Trim down the buffer to the actual size of the data.
+        LOG_FATAL_IF(streamLen > bufferSize);
+        data = (char*)realloc(data, streamLen);
+        LOG_ALWAYS_FATAL_IF(!data);
+    }
+    // Just in case sk_free differs from free, we ask Skia to use
+    // free to cleanup the buffer that SkData wraps.
+    return SkData::MakeWithProc(data, streamLen, free_pointer_skproc, nullptr);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/libs/hwui/jni/FontFamily.cpp b/libs/hwui/jni/FontFamily.cpp
index 69774cc..0c3af61 100644
--- a/libs/hwui/jni/FontFamily.cpp
+++ b/libs/hwui/jni/FontFamily.cpp
@@ -14,9 +14,6 @@
  * limitations under the License.
  */
 
-#undef LOG_TAG
-#define LOG_TAG "Minikin"
-
 #include <nativehelper/ScopedPrimitiveArray.h>
 #include <nativehelper/ScopedUtfChars.h>
 #include "FontUtils.h"
@@ -89,7 +86,8 @@
     }
     std::shared_ptr<minikin::FontFamily> family = minikin::FontFamily::create(
             builder->langId, builder->variant, std::move(builder->fonts),
-            true /* isCustomFallback */, false /* isDefaultFallback */);
+            true /* isCustomFallback */, false /* isDefaultFallback */,
+            minikin::VariationFamilyType::None);
     if (family->getCoverage().length() == 0) {
         return 0;
     }
diff --git a/libs/hwui/jni/Graphics.cpp b/libs/hwui/jni/Graphics.cpp
index 78b4f7b..7cc4866 100644
--- a/libs/hwui/jni/Graphics.cpp
+++ b/libs/hwui/jni/Graphics.cpp
@@ -1,6 +1,3 @@
-#undef LOG_TAG
-#define LOG_TAG "GraphicsJNI"
-
 #include <assert.h>
 #include <unistd.h>
 
diff --git a/libs/hwui/jni/GraphicsJNI.h b/libs/hwui/jni/GraphicsJNI.h
index 23ab5dd..b9fff36 100644
--- a/libs/hwui/jni/GraphicsJNI.h
+++ b/libs/hwui/jni/GraphicsJNI.h
@@ -125,14 +125,6 @@
     static jobject createBitmapRegionDecoder(JNIEnv* env,
                                              android::BitmapRegionDecoderWrapper* bitmap);
 
-    /**
-     * Given a bitmap we natively allocate a memory block to store the contents
-     * of that bitmap.  The memory is then attached to the bitmap via an
-     * SkPixelRef, which ensures that upon deletion the appropriate caches
-     * are notified.
-     */
-    static bool allocatePixels(JNIEnv* env, SkBitmap* bitmap);
-
     /** Copy the colors in colors[] to the bitmap, convert to the correct
         format along the way.
         Whether to use premultiplied pixels is determined by dstBitmap's alphaType.
diff --git a/libs/hwui/jni/GraphicsStatsService.cpp b/libs/hwui/jni/GraphicsStatsService.cpp
index e32c911..54369b9 100644
--- a/libs/hwui/jni/GraphicsStatsService.cpp
+++ b/libs/hwui/jni/GraphicsStatsService.cpp
@@ -14,9 +14,6 @@
  * limitations under the License.
  */
 
-#undef LOG_TAG
-#define LOG_TAG "GraphicsStatsService"
-
 #include <JankTracker.h>
 #include <log/log.h>
 #include <nativehelper/ScopedPrimitiveArray.h>
diff --git a/libs/hwui/jni/MaskFilter.cpp b/libs/hwui/jni/MaskFilter.cpp
index 048ce02..cbd4520 100644
--- a/libs/hwui/jni/MaskFilter.cpp
+++ b/libs/hwui/jni/MaskFilter.cpp
@@ -1,6 +1,5 @@
 #include "GraphicsJNI.h"
 #include "SkMaskFilter.h"
-#include "SkBlurMask.h"
 #include "SkBlurMaskFilter.h"
 #include "SkBlurTypes.h"
 #include "SkTableMaskFilter.h"
@@ -11,6 +10,13 @@
     }
 }
 
+// From https://skia.googlesource.com/skia/+/d74c99a3cd5eef5f16b2eb226e6b45fe523c8552/src/core/SkBlurMask.cpp#28
+static constexpr float kBLUR_SIGMA_SCALE = 0.57735f;
+
+static float convertRadiusToSigma(float radius) {
+    return radius > 0 ? kBLUR_SIGMA_SCALE * radius + 0.5f : 0.0f;
+}
+
 class SkMaskFilterGlue {
 public:
     static void destructor(JNIEnv* env, jobject, jlong filterHandle) {
@@ -19,7 +25,7 @@
     }
 
     static jlong createBlur(JNIEnv* env, jobject, jfloat radius, jint blurStyle) {
-        SkScalar sigma = SkBlurMask::ConvertRadiusToSigma(radius);
+        SkScalar sigma = convertRadiusToSigma(radius);
         SkMaskFilter* filter = SkMaskFilter::MakeBlur((SkBlurStyle)blurStyle, sigma).release();
         ThrowIAE_IfNull(env, filter);
         return reinterpret_cast<jlong>(filter);
@@ -34,7 +40,7 @@
             direction[i] = values[i];
         }
 
-        SkScalar sigma = SkBlurMask::ConvertRadiusToSigma(radius);
+        SkScalar sigma = convertRadiusToSigma(radius);
         SkMaskFilter* filter =  SkBlurMaskFilter::MakeEmboss(sigma,
                 direction, ambient, specular).release();
         ThrowIAE_IfNull(env, filter);
diff --git a/libs/hwui/jni/NinePatch.cpp b/libs/hwui/jni/NinePatch.cpp
index d50a8a2..67ef143 100644
--- a/libs/hwui/jni/NinePatch.cpp
+++ b/libs/hwui/jni/NinePatch.cpp
@@ -15,8 +15,6 @@
 ** limitations under the License.
 */
 
-#undef LOG_TAG
-#define LOG_TAG "9patch"
 #define LOG_NDEBUG 1
 
 #include <androidfw/ResourceTypes.h>
diff --git a/libs/hwui/jni/Paint.cpp b/libs/hwui/jni/Paint.cpp
index 13357fa..1ba7f70 100644
--- a/libs/hwui/jni/Paint.cpp
+++ b/libs/hwui/jni/Paint.cpp
@@ -15,16 +15,29 @@
 ** limitations under the License.
 */
 
-#undef LOG_TAG
-#define LOG_TAG "Paint"
-
-#include <utils/Log.h>
-
-#include "GraphicsJNI.h"
+#include <hwui/BlurDrawLooper.h>
+#include <hwui/MinikinSkia.h>
+#include <hwui/MinikinUtils.h>
+#include <hwui/Paint.h>
+#include <hwui/Typeface.h>
+#include <minikin/GraphemeBreak.h>
+#include <minikin/LocaleList.h>
+#include <minikin/Measurement.h>
+#include <minikin/MinikinPaint.h>
+#include <nativehelper/ScopedPrimitiveArray.h>
 #include <nativehelper/ScopedStringChars.h>
 #include <nativehelper/ScopedUtfChars.h>
-#include <nativehelper/ScopedPrimitiveArray.h>
+#include <unicode/utf16.h>
+#include <utils/Log.h>
 
+#include <cassert>
+#include <cstring>
+#include <memory>
+#include <vector>
+
+#include "ColorFilter.h"
+#include "GraphicsJNI.h"
+#include "SkBlendMode.h"
 #include "SkColorFilter.h"
 #include "SkColorSpace.h"
 #include "SkFont.h"
@@ -35,26 +48,9 @@
 #include "SkPathEffect.h"
 #include "SkPathUtils.h"
 #include "SkShader.h"
-#include "SkBlendMode.h"
 #include "unicode/uloc.h"
 #include "utils/Blur.h"
 
-#include <hwui/BlurDrawLooper.h>
-#include <hwui/MinikinSkia.h>
-#include <hwui/MinikinUtils.h>
-#include <hwui/Paint.h>
-#include <hwui/Typeface.h>
-#include <minikin/GraphemeBreak.h>
-#include <minikin/LocaleList.h>
-#include <minikin/Measurement.h>
-#include <minikin/MinikinPaint.h>
-#include <unicode/utf16.h>
-
-#include <cassert>
-#include <cstring>
-#include <memory>
-#include <vector>
-
 namespace android {
 
 static void getPosTextPath(const SkFont& font, const uint16_t glyphs[], int count,
@@ -584,7 +580,7 @@
         minikin::FakedFont baseFont = typeface->fFontCollection->baseFontFaked(typeface->fStyle);
         float saveSkewX = font->getSkewX();
         bool savefakeBold = font->isEmbolden();
-        MinikinFontSkia::populateSkFont(font, baseFont.font->typeface().get(), baseFont.fakery);
+        MinikinFontSkia::populateSkFont(font, baseFont.typeface().get(), baseFont.fakery);
         SkScalar spacing = font->getMetrics(metrics);
         // The populateSkPaint call may have changed fake bold / text skew
         // because we want to measure with those effects applied, so now
@@ -821,9 +817,11 @@
 
     static jlong setColorFilter(CRITICAL_JNI_PARAMS_COMMA jlong objHandle, jlong filterHandle) {
         Paint* obj = reinterpret_cast<Paint *>(objHandle);
-        SkColorFilter* filter  = reinterpret_cast<SkColorFilter *>(filterHandle);
-        obj->setColorFilter(sk_ref_sp(filter));
-        return reinterpret_cast<jlong>(obj->getColorFilter());
+        auto colorFilter = uirenderer::ColorFilter::fromJava(filterHandle);
+        auto skColorFilter =
+                colorFilter != nullptr ? colorFilter->getInstance() : sk_sp<SkColorFilter>();
+        obj->setColorFilter(skColorFilter);
+        return filterHandle;
     }
 
     static void setXfermode(CRITICAL_JNI_PARAMS_COMMA jlong paintHandle, jint xfermodeHandle) {
diff --git a/libs/hwui/jni/RenderEffect.cpp b/libs/hwui/jni/RenderEffect.cpp
index f3db170..dcd3fa4 100644
--- a/libs/hwui/jni/RenderEffect.cpp
+++ b/libs/hwui/jni/RenderEffect.cpp
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 #include "Bitmap.h"
+#include "ColorFilter.h"
 #include "GraphicsJNI.h"
 #include "SkBlendMode.h"
 #include "SkImageFilter.h"
 #include "SkImageFilters.h"
 #include "graphics_jni_helpers.h"
 #include "utils/Blur.h"
-#include <utils/Log.h>
 
 using namespace android::uirenderer;
 
@@ -76,11 +76,13 @@
     jlong colorFilterHandle,
     jlong inputFilterHandle
 ) {
-    auto* colorFilter = reinterpret_cast<const SkColorFilter*>(colorFilterHandle);
+    auto colorFilter = android::uirenderer::ColorFilter::fromJava(colorFilterHandle);
+    auto skColorFilter =
+            colorFilter != nullptr ? colorFilter->getInstance() : sk_sp<SkColorFilter>();
     auto* inputFilter = reinterpret_cast<const SkImageFilter*>(inputFilterHandle);
-    sk_sp<SkImageFilter> colorFilterImageFilter = SkImageFilters::ColorFilter(
-            sk_ref_sp(colorFilter), sk_ref_sp(inputFilter), nullptr);
-   return reinterpret_cast<jlong>(colorFilterImageFilter.release());
+    sk_sp<SkImageFilter> colorFilterImageFilter =
+            SkImageFilters::ColorFilter(skColorFilter, sk_ref_sp(inputFilter), nullptr);
+    return reinterpret_cast<jlong>(colorFilterImageFilter.release());
 }
 
 static jlong createBlendModeEffect(
diff --git a/libs/hwui/jni/Shader.cpp b/libs/hwui/jni/Shader.cpp
index 7eb79be..2c13ceb 100644
--- a/libs/hwui/jni/Shader.cpp
+++ b/libs/hwui/jni/Shader.cpp
@@ -1,6 +1,3 @@
-#undef LOG_TAG
-#define LOG_TAG "ShaderJNI"
-
 #include <vector>
 
 #include "Gainmap.h"
diff --git a/libs/hwui/jni/YuvToJpegEncoder.cpp b/libs/hwui/jni/YuvToJpegEncoder.cpp
index 69418b0..4dbfa88 100644
--- a/libs/hwui/jni/YuvToJpegEncoder.cpp
+++ b/libs/hwui/jni/YuvToJpegEncoder.cpp
@@ -1,6 +1,3 @@
-#undef LOG_TAG
-#define LOG_TAG "YuvToJpegEncoder"
-
 #include "CreateJavaOutputStreamAdaptor.h"
 #include "SkStream.h"
 #include "YuvToJpegEncoder.h"
diff --git a/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp b/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp
index f060bb3..426644e 100644
--- a/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp
+++ b/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp
@@ -84,7 +84,7 @@
     canvas->resetRecording(width, height, renderNode);
 }
 
-static jint android_view_DisplayListCanvas_getMaxTextureSize(CRITICAL_JNI_PARAMS) {
+static jint android_view_DisplayListCanvas_getMaxTextureSize(JNIEnv*, jobject) {
 #ifdef __ANDROID__ // Layoutlib does not support RenderProxy (RenderThread)
     return android::uirenderer::renderthread::RenderProxy::maxTextureSize();
 #else
@@ -175,14 +175,14 @@
 const char* const kClassPathName = "android/graphics/RecordingCanvas";
 
 static JNINativeMethod gMethods[] = {
+        {"nGetMaximumTextureWidth", "()I", (void*)android_view_DisplayListCanvas_getMaxTextureSize},
+        {"nGetMaximumTextureHeight", "()I",
+         (void*)android_view_DisplayListCanvas_getMaxTextureSize},
         // ------------ @CriticalNative --------------
         {"nCreateDisplayListCanvas", "(JII)J",
          (void*)android_view_DisplayListCanvas_createDisplayListCanvas},
         {"nResetDisplayListCanvas", "(JJII)V",
          (void*)android_view_DisplayListCanvas_resetDisplayListCanvas},
-        {"nGetMaximumTextureWidth", "()I", (void*)android_view_DisplayListCanvas_getMaxTextureSize},
-        {"nGetMaximumTextureHeight", "()I",
-         (void*)android_view_DisplayListCanvas_getMaxTextureSize},
         {"nEnableZ", "(JZ)V", (void*)android_view_DisplayListCanvas_enableZ},
         {"nFinishRecording", "(JJ)V", (void*)android_view_DisplayListCanvas_finishRecording},
         {"nDrawRenderNode", "(JJ)V", (void*)android_view_DisplayListCanvas_drawRenderNode},
diff --git a/libs/hwui/jni/android_graphics_HardwareBufferRenderer.cpp b/libs/hwui/jni/android_graphics_HardwareBufferRenderer.cpp
index 706f18c..e3cdee6 100644
--- a/libs/hwui/jni/android_graphics_HardwareBufferRenderer.cpp
+++ b/libs/hwui/jni/android_graphics_HardwareBufferRenderer.cpp
@@ -14,8 +14,6 @@
  * limitations under the License.
  */
 
-#undef LOG_TAG
-#define LOG_TAG "HardwareBufferRenderer"
 #define ATRACE_TAG ATRACE_TAG_VIEW
 
 #include <GraphicsJNI.h>
diff --git a/libs/hwui/jni/android_graphics_HardwareRenderer.cpp b/libs/hwui/jni/android_graphics_HardwareRenderer.cpp
index d04de37..422ffea 100644
--- a/libs/hwui/jni/android_graphics_HardwareRenderer.cpp
+++ b/libs/hwui/jni/android_graphics_HardwareRenderer.cpp
@@ -14,8 +14,6 @@
  * limitations under the License.
  */
 
-#undef LOG_TAG
-#define LOG_TAG "ThreadedRenderer"
 #define ATRACE_TAG ATRACE_TAG_VIEW
 
 #include <FrameInfo.h>
@@ -27,7 +25,7 @@
 #include <SkColorSpace.h>
 #include <SkData.h>
 #include <SkImage.h>
-#include <SkImagePriv.h>
+#include <SkImageAndroid.h>
 #include <SkPicture.h>
 #include <SkPixmap.h>
 #include <SkSerialProcs.h>
@@ -35,6 +33,7 @@
 #include <SkTypeface.h>
 #include <dlfcn.h>
 #include <gui/TraceUtils.h>
+#include <include/encode/SkPngEncoder.h>
 #include <inttypes.h>
 #include <media/NdkImage.h>
 #include <media/NdkImageReader.h>
@@ -54,6 +53,7 @@
 
 #include <algorithm>
 #include <atomic>
+#include <log/log.h>
 #include <vector>
 
 #include "JvmErrorReporter.h"
@@ -477,7 +477,7 @@
         // actually cross thread boundaries here, make a copy so it's immutable proper
         if (bitmap && !bitmap->isImmutable()) {
             ATRACE_NAME("Copying mutable bitmap");
-            return SkImage::MakeFromBitmap(*bitmap);
+            return SkImages::RasterFromBitmap(*bitmap);
         }
         if (img->isTextureBacked()) {
             ATRACE_NAME("Readback of texture image");
@@ -497,7 +497,7 @@
                 return sk_ref_sp(img);
             }
             bm.setImmutable();
-            return SkMakeImageFromRasterBitmap(bm, kNever_SkCopyPixelsMode);
+            return SkImages::PinnableRasterFromBitmap(bm);
         }
         return sk_ref_sp(img);
     }
@@ -524,7 +524,16 @@
         if (iter != context->mTextureMap.end()) {
             img = iter->second.get();
         }
-        return img->encodeToData();
+        if (!img) {
+            return nullptr;
+        }
+        // The following encode (specifically the pixel readback) will fail on a
+        // texture-backed image. They should already be raster images, but on
+        // the off-chance they aren't, we will just serialize it as nothing.
+        if (img->isTextureBacked()) {
+            return SkData::MakeEmpty();
+        }
+        return SkPngEncoder::Encode(nullptr, img, {});
     }
 
     void serialize(SkWStream* stream) const override {
diff --git a/libs/hwui/jni/android_graphics_RenderNode.cpp b/libs/hwui/jni/android_graphics_RenderNode.cpp
index 8c7b9a4..2a218a2 100644
--- a/libs/hwui/jni/android_graphics_RenderNode.cpp
+++ b/libs/hwui/jni/android_graphics_RenderNode.cpp
@@ -243,6 +243,13 @@
     return SET_AND_DIRTY(mutateLayerProperties().setImageFilter, imageFilter, RenderNode::GENERIC);
 }
 
+static jboolean android_view_RenderNode_setBackdropRenderEffect(
+        CRITICAL_JNI_PARAMS_COMMA jlong renderNodePtr, jlong renderEffectPtr) {
+    SkImageFilter* imageFilter = reinterpret_cast<SkImageFilter*>(renderEffectPtr);
+    return SET_AND_DIRTY(mutateLayerProperties().setBackdropImageFilter, imageFilter,
+                         RenderNode::GENERIC);
+}
+
 static jboolean android_view_RenderNode_setHasOverlappingRendering(CRITICAL_JNI_PARAMS_COMMA jlong renderNodePtr,
         bool hasOverlappingRendering) {
     return SET_AND_DIRTY(setHasOverlappingRendering, hasOverlappingRendering,
@@ -792,6 +799,8 @@
 
         {"nSetAlpha", "(JF)Z", (void*)android_view_RenderNode_setAlpha},
         {"nSetRenderEffect", "(JJ)Z", (void*)android_view_RenderNode_setRenderEffect},
+        {"nSetBackdropRenderEffect", "(JJ)Z",
+         (void*)android_view_RenderNode_setBackdropRenderEffect},
         {"nSetHasOverlappingRendering", "(JZ)Z",
          (void*)android_view_RenderNode_setHasOverlappingRendering},
         {"nSetUsageHint", "(JI)V", (void*)android_view_RenderNode_setUsageHint},
diff --git a/libs/hwui/jni/android_graphics_animation_NativeInterpolatorFactory.cpp b/libs/hwui/jni/android_graphics_animation_NativeInterpolatorFactory.cpp
index 764eff9..b86c74fe 100644
--- a/libs/hwui/jni/android_graphics_animation_NativeInterpolatorFactory.cpp
+++ b/libs/hwui/jni/android_graphics_animation_NativeInterpolatorFactory.cpp
@@ -14,8 +14,6 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "OpenGLRenderer"
-
 #include <Interpolator.h>
 #include <cutils/log.h>
 
diff --git a/libs/hwui/jni/android_graphics_animation_RenderNodeAnimator.cpp b/libs/hwui/jni/android_graphics_animation_RenderNodeAnimator.cpp
index c6d26f8..40be924 100644
--- a/libs/hwui/jni/android_graphics_animation_RenderNodeAnimator.cpp
+++ b/libs/hwui/jni/android_graphics_animation_RenderNodeAnimator.cpp
@@ -14,8 +14,6 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "OpenGLRenderer"
-
 #include <Animator.h>
 #include <Interpolator.h>
 #include <RenderProperties.h>
diff --git a/libs/hwui/jni/android_graphics_drawable_VectorDrawable.cpp b/libs/hwui/jni/android_graphics_drawable_VectorDrawable.cpp
index 9cffceb..ade48f2 100644
--- a/libs/hwui/jni/android_graphics_drawable_VectorDrawable.cpp
+++ b/libs/hwui/jni/android_graphics_drawable_VectorDrawable.cpp
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-#include "GraphicsJNI.h"
+#include <hwui/Paint.h>
 
+#include "ColorFilter.h"
+#include "GraphicsJNI.h"
 #include "PathParser.h"
 #include "VectorDrawable.h"
 
-#include <hwui/Paint.h>
-
 namespace android {
 using namespace uirenderer;
 using namespace uirenderer::VectorDrawable;
@@ -108,8 +108,9 @@
     Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
     SkRect rect;
     GraphicsJNI::jrect_to_rect(env, jrect, &rect);
-    SkColorFilter* colorFilter = reinterpret_cast<SkColorFilter*>(colorFilterPtr);
-    return tree->draw(canvas, colorFilter, rect, needsMirroring, canReuseCache);
+    auto colorFilter = ColorFilter::fromJava(colorFilterPtr);
+    auto skColorFilter = colorFilter != nullptr ? colorFilter->getInstance() : nullptr;
+    return tree->draw(canvas, skColorFilter.get(), rect, needsMirroring, canReuseCache);
 }
 
 /**
diff --git a/libs/hwui/jni/fonts/Font.cpp b/libs/hwui/jni/fonts/Font.cpp
index 1af60b2..2ec94c9 100644
--- a/libs/hwui/jni/fonts/Font.cpp
+++ b/libs/hwui/jni/fonts/Font.cpp
@@ -14,9 +14,6 @@
  * limitations under the License.
  */
 
-#undef LOG_TAG
-#define LOG_TAG "Minikin"
-
 #include "Font.h"
 #include "SkData.h"
 #include "SkFont.h"
@@ -127,7 +124,7 @@
 static jlong Font_Builder_clone(JNIEnv* env, jobject clazz, jlong fontPtr, jlong builderPtr,
                                 jint weight, jboolean italic, jint ttcIndex) {
     FontWrapper* font = reinterpret_cast<FontWrapper*>(fontPtr);
-    MinikinFontSkia* minikinSkia = static_cast<MinikinFontSkia*>(font->font->typeface().get());
+    MinikinFontSkia* minikinSkia = static_cast<MinikinFontSkia*>(font->font->baseTypeface().get());
     std::unique_ptr<NativeFontBuilder> builder(toBuilder(builderPtr));
 
     // Reconstruct SkTypeface with different arguments from existing SkTypeface.
@@ -159,7 +156,7 @@
 static jfloat Font_getGlyphBounds(JNIEnv* env, jobject, jlong fontHandle, jint glyphId,
                                   jlong paintHandle, jobject rect) {
     FontWrapper* font = reinterpret_cast<FontWrapper*>(fontHandle);
-    MinikinFontSkia* minikinSkia = static_cast<MinikinFontSkia*>(font->font->typeface().get());
+    MinikinFontSkia* minikinSkia = static_cast<MinikinFontSkia*>(font->font->baseTypeface().get());
     Paint* paint = reinterpret_cast<Paint*>(paintHandle);
 
     SkFont* skFont = &paint->getSkFont();
@@ -179,7 +176,7 @@
 static jfloat Font_getFontMetrics(JNIEnv* env, jobject, jlong fontHandle, jlong paintHandle,
                                   jobject metricsObj) {
     FontWrapper* font = reinterpret_cast<FontWrapper*>(fontHandle);
-    MinikinFontSkia* minikinSkia = static_cast<MinikinFontSkia*>(font->font->typeface().get());
+    MinikinFontSkia* minikinSkia = static_cast<MinikinFontSkia*>(font->font->baseTypeface().get());
     Paint* paint = reinterpret_cast<Paint*>(paintHandle);
 
     SkFont* skFont = &paint->getSkFont();
@@ -209,7 +206,7 @@
 // Fast Native
 static jobject Font_newByteBuffer(JNIEnv* env, jobject, jlong fontPtr) {
     FontWrapper* font = reinterpret_cast<FontWrapper*>(fontPtr);
-    const std::shared_ptr<minikin::MinikinFont>& minikinFont = font->font->typeface();
+    const std::shared_ptr<minikin::MinikinFont>& minikinFont = font->font->baseTypeface();
     return env->NewDirectByteBuffer(const_cast<void*>(minikinFont->GetFontData()),
                                     minikinFont->GetFontSize());
 }
@@ -217,7 +214,7 @@
 // Critical Native
 static jlong Font_getBufferAddress(CRITICAL_JNI_PARAMS_COMMA jlong fontPtr) {
     FontWrapper* font = reinterpret_cast<FontWrapper*>(fontPtr);
-    return reinterpret_cast<jlong>(font->font->typeface()->GetFontData());
+    return reinterpret_cast<jlong>(font->font->baseTypeface()->GetFontData());
 }
 
 // Critical Native
@@ -236,7 +233,7 @@
         }
         return env->NewStringUTF(path.c_str());
     } else {
-        const std::shared_ptr<minikin::MinikinFont>& minikinFont = font->font->typeface();
+        const std::shared_ptr<minikin::MinikinFont>& minikinFont = font->font->baseTypeface();
         const std::string& path = minikinFont->GetFontPath();
         if (path.empty()) {
             return nullptr;
@@ -275,7 +272,7 @@
         reader.skipString();  // fontPath
         return reader.read<int>();
     } else {
-        const std::shared_ptr<minikin::MinikinFont>& minikinFont = font->font->typeface();
+        const std::shared_ptr<minikin::MinikinFont>& minikinFont = font->font->baseTypeface();
         return minikinFont->GetFontIndex();
     }
 }
@@ -289,7 +286,7 @@
         reader.skip<int>();   // fontIndex
         return reader.readArray<minikin::FontVariation>().second;
     } else {
-        const std::shared_ptr<minikin::MinikinFont>& minikinFont = font->font->typeface();
+        const std::shared_ptr<minikin::MinikinFont>& minikinFont = font->font->baseTypeface();
         return minikinFont->GetAxes().size();
     }
 }
@@ -304,7 +301,7 @@
         reader.skip<int>();   // fontIndex
         var = reader.readArray<minikin::FontVariation>().first[index];
     } else {
-        const std::shared_ptr<minikin::MinikinFont>& minikinFont = font->font->typeface();
+        const std::shared_ptr<minikin::MinikinFont>& minikinFont = font->font->baseTypeface();
         var = minikinFont->GetAxes().at(index);
     }
     uint32_t floatBinary = *reinterpret_cast<const uint32_t*>(&var.value);
@@ -314,7 +311,7 @@
 // Critical Native
 static jint Font_getSourceId(CRITICAL_JNI_PARAMS_COMMA jlong fontPtr) {
     FontWrapper* font = reinterpret_cast<FontWrapper*>(fontPtr);
-    return font->font->typeface()->GetSourceId();
+    return font->font->baseTypeface()->GetSourceId();
 }
 
 static jlongArray Font_getAvailableFontSet(JNIEnv* env, jobject) {
diff --git a/libs/hwui/jni/fonts/FontFamily.cpp b/libs/hwui/jni/fonts/FontFamily.cpp
index ee158ee..462c8c8 100644
--- a/libs/hwui/jni/fonts/FontFamily.cpp
+++ b/libs/hwui/jni/fonts/FontFamily.cpp
@@ -14,9 +14,6 @@
  * limitations under the License.
  */
 
-#undef LOG_TAG
-#define LOG_TAG "Minikin"
-
 #include "graphics_jni_helpers.h"
 #include <nativehelper/ScopedUtfChars.h>
 
@@ -60,7 +57,7 @@
 // Regular JNI
 static jlong FontFamily_Builder_build(JNIEnv* env, jobject clazz, jlong builderPtr,
                                       jstring langTags, jint variant, jboolean isCustomFallback,
-                                      jboolean isDefaultFallback) {
+                                      jboolean isDefaultFallback, jint variationFamilyType) {
     std::unique_ptr<NativeFamilyBuilder> builder(toBuilder(builderPtr));
     uint32_t localeId;
     if (langTags == nullptr) {
@@ -71,7 +68,8 @@
     }
     std::shared_ptr<minikin::FontFamily> family = minikin::FontFamily::create(
             localeId, static_cast<minikin::FamilyVariant>(variant), std::move(builder->fonts),
-            isCustomFallback, isDefaultFallback);
+            isCustomFallback, isDefaultFallback,
+            static_cast<minikin::VariationFamilyType>(variationFamilyType));
     if (family->getCoverage().length() == 0) {
         // No coverage means minikin rejected given font for some reasons.
         jniThrowException(env, "java/lang/IllegalArgumentException",
@@ -121,7 +119,7 @@
 static const JNINativeMethod gFontFamilyBuilderMethods[] = {
         {"nInitBuilder", "()J", (void*)FontFamily_Builder_initBuilder},
         {"nAddFont", "(JJ)V", (void*)FontFamily_Builder_addFont},
-        {"nBuild", "(JLjava/lang/String;IZZ)J", (void*)FontFamily_Builder_build},
+        {"nBuild", "(JLjava/lang/String;IZZI)J", (void*)FontFamily_Builder_build},
         {"nGetReleaseNativeFamily", "()J", (void*)FontFamily_Builder_GetReleaseFunc},
 };
 
diff --git a/libs/hwui/jni/pdf/PdfEditor.cpp b/libs/hwui/jni/pdf/PdfEditor.cpp
index 427bafa..3b18f5f 100644
--- a/libs/hwui/jni/pdf/PdfEditor.cpp
+++ b/libs/hwui/jni/pdf/PdfEditor.cpp
@@ -14,9 +14,6 @@
  * limitations under the License.
  */
 
-#undef LOG_TAG
-#define LOG_TAG "PdfEditor"
-
 #include <sys/types.h>
 #include <unistd.h>
 
diff --git a/libs/hwui/jni/pdf/PdfUtils.cpp b/libs/hwui/jni/pdf/PdfUtils.cpp
index 06d2028..6887fda 100644
--- a/libs/hwui/jni/pdf/PdfUtils.cpp
+++ b/libs/hwui/jni/pdf/PdfUtils.cpp
@@ -16,14 +16,11 @@
 
 #include "PdfUtils.h"
 
-#include "jni.h"
 #include <nativehelper/JNIHelp.h>
+#include <utils/Log.h>
 
 #include "fpdfview.h"
-
-#undef LOG_TAG
-#define LOG_TAG "PdfUtils"
-#include <utils/Log.h>
+#include "jni.h"
 
 namespace android {
 
diff --git a/libs/hwui/jni/text/GraphemeBreak.cpp b/libs/hwui/jni/text/GraphemeBreak.cpp
index 55f03bd..322af7e 100644
--- a/libs/hwui/jni/text/GraphemeBreak.cpp
+++ b/libs/hwui/jni/text/GraphemeBreak.cpp
@@ -14,9 +14,6 @@
  * limitations under the License.
  */
 
-#undef LOG_TAG
-#define LOG_TAG "GraphemeBreaker"
-
 #include <minikin/GraphemeBreak.h>
 #include <nativehelper/ScopedPrimitiveArray.h>
 
diff --git a/libs/hwui/jni/text/LineBreaker.cpp b/libs/hwui/jni/text/LineBreaker.cpp
index 6986517..9ebf23c 100644
--- a/libs/hwui/jni/text/LineBreaker.cpp
+++ b/libs/hwui/jni/text/LineBreaker.cpp
@@ -14,9 +14,6 @@
  * limitations under the License.
  */
 
-#undef LOG_TAG
-#define LOG_TAG "LineBreaker"
-
 #include "utils/misc.h"
 #include "utils/Log.h"
 #include "graphics_jni_helpers.h"
diff --git a/libs/hwui/jni/text/MeasuredText.cpp b/libs/hwui/jni/text/MeasuredText.cpp
index c13c800..081713a 100644
--- a/libs/hwui/jni/text/MeasuredText.cpp
+++ b/libs/hwui/jni/text/MeasuredText.cpp
@@ -14,9 +14,6 @@
  * limitations under the License.
  */
 
-#undef LOG_TAG
-#define LOG_TAG "MeasuredText"
-
 #include "GraphicsJNI.h"
 #include "utils/misc.h"
 #include "utils/Log.h"
diff --git a/libs/hwui/jni/text/TextShaper.cpp b/libs/hwui/jni/text/TextShaper.cpp
index 8e4dd53..6c05346 100644
--- a/libs/hwui/jni/text/TextShaper.cpp
+++ b/libs/hwui/jni/text/TextShaper.cpp
@@ -14,9 +14,6 @@
  * limitations under the License.
  */
 
-#undef LOG_TAG
-#define LOG_TAG "TextShaper"
-
 #include "graphics_jni_helpers.h"
 #include <nativehelper/ScopedStringChars.h>
 #include <nativehelper/ScopedPrimitiveArray.h>
@@ -62,7 +59,7 @@
         const minikin::Font* font = layout.getFont(i);
         if (seenFonts.find(font) != seenFonts.end()) continue;
         minikin::MinikinExtent extent = {};
-        font->typeface()->GetFontExtent(&extent, minikinPaint, layout.getFakery(i));
+        layout.typeface(i)->GetFontExtent(&extent, minikinPaint, layout.getFakery(i));
         overallAscent = std::min(overallAscent, extent.ascent);
         overallDescent = std::max(overallDescent, extent.descent);
     }
@@ -148,6 +145,30 @@
 }
 
 // CriticalNative
+static jboolean TextShaper_Result_getFakeBold(CRITICAL_JNI_PARAMS_COMMA jlong ptr, jint i) {
+    const LayoutWrapper* layout = reinterpret_cast<LayoutWrapper*>(ptr);
+    return layout->layout.getFakery(i).isFakeBold();
+}
+
+// CriticalNative
+static jboolean TextShaper_Result_getFakeItalic(CRITICAL_JNI_PARAMS_COMMA jlong ptr, jint i) {
+    const LayoutWrapper* layout = reinterpret_cast<LayoutWrapper*>(ptr);
+    return layout->layout.getFakery(i).isFakeItalic();
+}
+
+// CriticalNative
+static jfloat TextShaper_Result_getWeightOverride(CRITICAL_JNI_PARAMS_COMMA jlong ptr, jint i) {
+    const LayoutWrapper* layout = reinterpret_cast<LayoutWrapper*>(ptr);
+    return layout->layout.getFakery(i).wghtAdjustment();
+}
+
+// CriticalNative
+static jfloat TextShaper_Result_getItalicOverride(CRITICAL_JNI_PARAMS_COMMA jlong ptr, jint i) {
+    const LayoutWrapper* layout = reinterpret_cast<LayoutWrapper*>(ptr);
+    return layout->layout.getFakery(i).italAdjustment();
+}
+
+// CriticalNative
 static jlong TextShaper_Result_getFont(CRITICAL_JNI_PARAMS_COMMA jlong ptr, jint i) {
     const LayoutWrapper* layout = reinterpret_cast<LayoutWrapper*>(ptr);
     std::shared_ptr<minikin::Font> fontRef = layout->layout.getFontRef(i);
@@ -185,15 +206,19 @@
 };
 
 static const JNINativeMethod gResultMethods[] = {
-    { "nGetGlyphCount", "(J)I", (void*)TextShaper_Result_getGlyphCount },
-    { "nGetTotalAdvance", "(J)F", (void*)TextShaper_Result_getTotalAdvance },
-    { "nGetAscent", "(J)F", (void*)TextShaper_Result_getAscent },
-    { "nGetDescent", "(J)F", (void*)TextShaper_Result_getDescent },
-    { "nGetGlyphId", "(JI)I", (void*)TextShaper_Result_getGlyphId },
-    { "nGetX", "(JI)F", (void*)TextShaper_Result_getX },
-    { "nGetY", "(JI)F", (void*)TextShaper_Result_getY },
-    { "nGetFont", "(JI)J", (void*)TextShaper_Result_getFont },
-    { "nReleaseFunc", "()J", (void*)TextShaper_Result_nReleaseFunc },
+        {"nGetGlyphCount", "(J)I", (void*)TextShaper_Result_getGlyphCount},
+        {"nGetTotalAdvance", "(J)F", (void*)TextShaper_Result_getTotalAdvance},
+        {"nGetAscent", "(J)F", (void*)TextShaper_Result_getAscent},
+        {"nGetDescent", "(J)F", (void*)TextShaper_Result_getDescent},
+        {"nGetGlyphId", "(JI)I", (void*)TextShaper_Result_getGlyphId},
+        {"nGetX", "(JI)F", (void*)TextShaper_Result_getX},
+        {"nGetY", "(JI)F", (void*)TextShaper_Result_getY},
+        {"nGetFont", "(JI)J", (void*)TextShaper_Result_getFont},
+        {"nGetFakeBold", "(JI)Z", (void*)TextShaper_Result_getFakeBold},
+        {"nGetFakeItalic", "(JI)Z", (void*)TextShaper_Result_getFakeItalic},
+        {"nGetWeightOverride", "(JI)F", (void*)TextShaper_Result_getWeightOverride},
+        {"nGetItalicOverride", "(JI)F", (void*)TextShaper_Result_getItalicOverride},
+        {"nReleaseFunc", "()J", (void*)TextShaper_Result_nReleaseFunc},
 };
 
 int register_android_graphics_text_TextShaper(JNIEnv* env) {
diff --git a/libs/hwui/pipeline/skia/BackdropFilterDrawable.cpp b/libs/hwui/pipeline/skia/BackdropFilterDrawable.cpp
new file mode 100644
index 0000000..ffad699
--- /dev/null
+++ b/libs/hwui/pipeline/skia/BackdropFilterDrawable.cpp
@@ -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.
+ */
+
+#include "BackdropFilterDrawable.h"
+
+#include <SkImage.h>
+#include <SkSurface.h>
+
+#include "RenderNode.h"
+#include "RenderNodeDrawable.h"
+
+namespace android {
+namespace uirenderer {
+namespace skiapipeline {
+
+BackdropFilterDrawable::~BackdropFilterDrawable() {}
+
+bool BackdropFilterDrawable::prepareToDraw(SkCanvas* canvas, const RenderProperties& properties,
+                                           int backdropImageWidth, int backdropImageHeight) {
+    // the drawing bounds for blurred content.
+    mDstBounds.setWH(properties.getWidth(), properties.getHeight());
+
+    float alphaMultiplier = 1.0f;
+    RenderNodeDrawable::setViewProperties(properties, canvas, &alphaMultiplier, true);
+
+    // get proper subset for previous content.
+    canvas->getTotalMatrix().mapRect(&mImageSubset, mDstBounds);
+    SkRect imageSubset(mImageSubset);
+    // ensure the subset is inside bounds of previous content.
+    if (!mImageSubset.intersect(SkRect::MakeWH(backdropImageWidth, backdropImageHeight))) {
+        return false;
+    }
+
+    // correct the drawing bounds if subset was changed.
+    if (mImageSubset != imageSubset) {
+        SkMatrix inverse;
+        if (canvas->getTotalMatrix().invert(&inverse)) {
+            inverse.mapRect(&mDstBounds, mImageSubset);
+        }
+    }
+
+    // follow the alpha from the target RenderNode.
+    mPaint.setAlpha(properties.layerProperties().alpha() * alphaMultiplier);
+    return true;
+}
+
+void BackdropFilterDrawable::onDraw(SkCanvas* canvas) {
+    const RenderProperties& properties = mTargetRenderNode->properties();
+    auto* backdropFilter = properties.layerProperties().getBackdropImageFilter();
+    auto* surface = canvas->getSurface();
+    if (!backdropFilter || !surface) {
+        return;
+    }
+
+    auto backdropImage = surface->makeImageSnapshot();
+    // sync necessary properties from target RenderNode.
+    if (!prepareToDraw(canvas, properties, backdropImage->width(), backdropImage->height())) {
+        return;
+    }
+
+    auto imageSubset = mImageSubset.roundOut();
+    backdropImage =
+            backdropImage->makeWithFilter(canvas->recordingContext(), backdropFilter, imageSubset,
+                                          imageSubset, &mOutSubset, &mOutOffset);
+    canvas->drawImageRect(backdropImage, SkRect::Make(mOutSubset), mDstBounds,
+                          SkSamplingOptions(SkFilterMode::kLinear), &mPaint,
+                          SkCanvas::kStrict_SrcRectConstraint);
+}
+
+}  // namespace skiapipeline
+}  // namespace uirenderer
+}  // namespace android
diff --git a/libs/hwui/pipeline/skia/BackdropFilterDrawable.h b/libs/hwui/pipeline/skia/BackdropFilterDrawable.h
new file mode 100644
index 0000000..9e35837
--- /dev/null
+++ b/libs/hwui/pipeline/skia/BackdropFilterDrawable.h
@@ -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.
+ */
+
+#pragma once
+
+#include <SkCanvas.h>
+#include <SkDrawable.h>
+#include <SkPaint.h>
+
+namespace android {
+namespace uirenderer {
+
+class RenderNode;
+class RenderProperties;
+
+namespace skiapipeline {
+
+/**
+ * This drawable captures it's backdrop content and render it with a
+ * image filter.
+ */
+class BackdropFilterDrawable : public SkDrawable {
+public:
+    BackdropFilterDrawable(RenderNode* renderNode, SkCanvas* canvas)
+            : mTargetRenderNode(renderNode), mBounds(canvas->getLocalClipBounds()) {}
+
+    ~BackdropFilterDrawable();
+
+private:
+    RenderNode* mTargetRenderNode;
+    SkPaint mPaint;
+
+    SkRect mDstBounds;
+    SkRect mImageSubset;
+    SkIRect mOutSubset;
+    SkIPoint mOutOffset;
+
+    /**
+     * Check all necessary properties before actual drawing.
+     * Return true if ready to draw.
+     */
+    bool prepareToDraw(SkCanvas* canvas, const RenderProperties& properties, int backdropImageWidth,
+                       int backdropImageHeight);
+
+protected:
+    void onDraw(SkCanvas* canvas) override;
+
+    virtual SkRect onGetBounds() override { return mBounds; }
+    const SkRect mBounds;
+};
+
+}  // namespace skiapipeline
+}  // namespace uirenderer
+}  // namespace android
diff --git a/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp b/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp
index 8d5967b..dbd9ef3 100644
--- a/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp
+++ b/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp
@@ -21,9 +21,12 @@
 #include "GrBackendSurface.h"
 #include "RenderNode.h"
 #include "SkAndroidFrameworkUtils.h"
+#include "SkCanvas.h"
+#include "SkCanvasAndroid.h"
 #include "SkClipStack.h"
 #include "SkRect.h"
 #include "SkM44.h"
+#include <include/gpu/ganesh/SkSurfaceGanesh.h>
 #include "include/gpu/GpuTypes.h" // from Skia
 #include "utils/GLUtils.h"
 #include <effects/GainmapRenderer.h>
@@ -34,7 +37,7 @@
 namespace skiapipeline {
 
 static void setScissor(int viewportHeight, const SkIRect& clip) {
-    SkASSERT(!clip.isEmpty());
+    LOG_FATAL_IF(clip.isEmpty(), "empty scissor clip");
     // transform to Y-flipped GL space, and prevent negatives
     GLint y = viewportHeight - clip.fBottom;
     GLint height = (viewportHeight - clip.fTop) - y;
@@ -42,7 +45,7 @@
 }
 
 static void GetFboDetails(SkCanvas* canvas, GLuint* outFboID, SkISize* outFboSize) {
-    GrBackendRenderTarget renderTarget = canvas->topLayerBackendRenderTarget();
+    GrBackendRenderTarget renderTarget = skgpu::ganesh::TopLayerBackendRenderTarget(canvas);
     GrGLFramebufferInfo fboInfo;
     LOG_ALWAYS_FATAL_IF(!renderTarget.getGLFramebufferInfo(&fboInfo),
         "getGLFrameBufferInfo failed");
@@ -76,13 +79,13 @@
     }
 
     // flush will create a GrRenderTarget if not already present.
-    canvas->flush();
+    directContext->flushAndSubmit();
 
     GLuint fboID = 0;
     SkISize fboSize;
     GetFboDetails(canvas, &fboID, &fboSize);
 
-    SkIRect surfaceBounds = canvas->topLayerBounds();
+    SkIRect surfaceBounds = skgpu::ganesh::TopLayerBounds(canvas);
     SkIRect clipBounds = canvas->getDeviceClipBounds();
     SkM44 mat4(canvas->getLocalToDevice());
     SkRegion clipRegion;
@@ -95,11 +98,12 @@
         SkImageInfo surfaceInfo =
                 canvas->imageInfo().makeWH(clipBounds.width(), clipBounds.height());
         tmpSurface =
-                SkSurface::MakeRenderTarget(directContext, skgpu::Budgeted::kYes, surfaceInfo);
+                SkSurfaces::RenderTarget(directContext, skgpu::Budgeted::kYes, surfaceInfo);
         tmpSurface->getCanvas()->clear(SK_ColorTRANSPARENT);
 
         GrGLFramebufferInfo fboInfo;
-        if (!tmpSurface->getBackendRenderTarget(SkSurface::kFlushWrite_BackendHandleAccess)
+        if (!SkSurfaces::GetBackendRenderTarget(tmpSurface.get(),
+                                                SkSurfaces::BackendHandleAccess::kFlushWrite)
                      .getGLFramebufferInfo(&fboInfo)) {
             ALOGW("Unable to extract renderTarget info from offscreen canvas; aborting GLFunctor");
             return;
@@ -163,7 +167,7 @@
 
         // GL ops get inserted here if previous flush is missing, which could dirty the stencil
         bool stencilWritten = SkAndroidFrameworkUtils::clipWithStencil(tmpCanvas);
-        tmpCanvas->flush();  // need this flush for the single op that draws into the stencil
+        directContext->flushAndSubmit();  // need this flush for the single op that draws into the stencil
 
         // ensure that the framebuffer that the webview will render into is bound before after we
         // draw into the stencil
diff --git a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp
index da4f66d..9d72c23 100644
--- a/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp
+++ b/libs/hwui/pipeline/skia/RenderNodeDrawable.cpp
@@ -362,7 +362,7 @@
 }
 
 void RenderNodeDrawable::setViewProperties(const RenderProperties& properties, SkCanvas* canvas,
-                                           float* alphaMultiplier) {
+                                           float* alphaMultiplier, bool ignoreLayer) {
     if (properties.getLeft() != 0 || properties.getTop() != 0) {
         canvas->translate(properties.getLeft(), properties.getTop());
     }
@@ -378,7 +378,8 @@
             canvas->concat(*properties.getTransformMatrix());
         }
     }
-    if (Properties::getStretchEffectBehavior() == StretchEffectBehavior::UniformScale) {
+    if (Properties::getStretchEffectBehavior() == StretchEffectBehavior::UniformScale &&
+        !ignoreLayer) {
         const StretchEffect& stretch = properties.layerProperties().getStretchEffect();
         if (!stretch.isEmpty()) {
             canvas->concat(
@@ -388,10 +389,10 @@
     const bool isLayer = properties.effectiveLayerType() != LayerType::None;
     int clipFlags = properties.getClippingFlags();
     if (properties.getAlpha() < 1) {
-        if (isLayer) {
+        if (isLayer && !ignoreLayer) {
             clipFlags &= ~CLIP_TO_BOUNDS;  // bounds clipping done by layer
         }
-        if (CC_LIKELY(isLayer || !properties.getHasOverlappingRendering())) {
+        if (CC_LIKELY(isLayer || !properties.getHasOverlappingRendering()) || ignoreLayer) {
             *alphaMultiplier = properties.getAlpha();
         } else {
             // savelayer needed to create an offscreen buffer
diff --git a/libs/hwui/pipeline/skia/RenderNodeDrawable.h b/libs/hwui/pipeline/skia/RenderNodeDrawable.h
index c7582e7..818ac45 100644
--- a/libs/hwui/pipeline/skia/RenderNodeDrawable.h
+++ b/libs/hwui/pipeline/skia/RenderNodeDrawable.h
@@ -120,7 +120,7 @@
      * Applies the rendering properties of a view onto a SkCanvas.
      */
     static void setViewProperties(const RenderProperties& properties, SkCanvas* canvas,
-                                  float* alphaMultiplier);
+                                  float* alphaMultiplier, bool ignoreLayer = false);
 
     /**
      * Stores transform on the canvas at time of recording and is used for
@@ -149,6 +149,11 @@
      * display list that is searched for any render nodes with getProjectBackwards==true
      */
     SkiaDisplayList* mProjectedDisplayList = nullptr;
+
+    /**
+     * Allow BackdropFilterDrawable to apply same render properties onto SkCanvas.
+     */
+    friend class BackdropFilterDrawable;
 };
 
 }  // namespace skiapipeline
diff --git a/libs/hwui/pipeline/skia/ShaderCache.h b/libs/hwui/pipeline/skia/ShaderCache.h
index 7495550..6ccb212 100644
--- a/libs/hwui/pipeline/skia/ShaderCache.h
+++ b/libs/hwui/pipeline/skia/ShaderCache.h
@@ -26,6 +26,7 @@
 #include <string>
 #include <vector>
 
+class GrDirectContext;
 class SkData;
 
 namespace android {
diff --git a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp
index cf31173..23b3074 100644
--- a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp
@@ -16,6 +16,7 @@
 
 #include "SkiaOpenGLPipeline.h"
 
+#include <include/gpu/ganesh/SkSurfaceGanesh.h>
 #include <GrBackendSurface.h>
 #include <SkBlendMode.h>
 #include <SkImageInfo.h>
@@ -150,9 +151,9 @@
         surface = getBufferSkSurface(bufferParams);
         preTransform = bufferParams.getTransform();
     } else {
-        surface = SkSurface::MakeFromBackendRenderTarget(mRenderThread.getGrContext(), backendRT,
-                                                         getSurfaceOrigin(), colorType,
-                                                         mSurfaceColorSpace, &props);
+        surface = SkSurfaces::WrapBackendRenderTarget(mRenderThread.getGrContext(), backendRT,
+                                                      getSurfaceOrigin(), colorType,
+                                                      mSurfaceColorSpace, &props);
         preTransform = SkMatrix::I();
     }
 
@@ -174,7 +175,7 @@
 
     {
         ATRACE_NAME("flush commands");
-        surface->flushAndSubmit();
+        skgpu::ganesh::FlushAndSubmit(surface);
     }
     layerUpdateQueue->clear();
 
@@ -245,8 +246,7 @@
 
     if (mEglSurface != EGL_NO_SURFACE) {
         const bool preserveBuffer = (swapBehavior != SwapBehavior::kSwap_discardBuffer);
-        const bool isPreserved = mEglManager.setPreserveBuffer(mEglSurface, preserveBuffer);
-        ALOGE_IF(preserveBuffer != isPreserved, "Unable to match the desired swap behavior.");
+        mEglManager.setPreserveBuffer(mEglSurface, preserveBuffer);
         return true;
     }
 
diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
index b020e96..3d77877 100644
--- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
@@ -16,14 +16,15 @@
 
 #include "SkiaPipeline.h"
 
+#include <include/android/SkSurfaceAndroid.h>
+#include <include/gpu/ganesh/SkSurfaceGanesh.h>
 #include <SkCanvas.h>
 #include <SkColor.h>
 #include <SkColorSpace.h>
 #include <SkData.h>
 #include <SkImage.h>
-#include <SkImageEncoder.h>
+#include <SkImageAndroid.h>
 #include <SkImageInfo.h>
-#include <SkImagePriv.h>
 #include <SkMatrix.h>
 #include <SkMultiPictureDocument.h>
 #include <SkOverdrawCanvas.h>
@@ -75,7 +76,7 @@
         return false;
     }
     for (SkImage* image : mutableImages) {
-        if (SkImage_pinAsTexture(image, mRenderThread.getGrContext())) {
+        if (skgpu::ganesh::PinAsTexture(mRenderThread.getGrContext(), image)) {
             mPinnedImages.emplace_back(sk_ref_sp(image));
         } else {
             return false;
@@ -86,7 +87,7 @@
 
 void SkiaPipeline::unpinImages() {
     for (auto& image : mPinnedImages) {
-        SkImage_unpinAsTexture(image.get(), mRenderThread.getGrContext());
+        skgpu::ganesh::UnpinTexture(mRenderThread.getGrContext(), image.get());
     }
     mPinnedImages.clear();
 }
@@ -187,9 +188,9 @@
                                  kPremul_SkAlphaType, getSurfaceColorSpace());
         SkSurfaceProps props(0, kUnknown_SkPixelGeometry);
         SkASSERT(mRenderThread.getGrContext() != nullptr);
-        node->setLayerSurface(SkSurface::MakeRenderTarget(mRenderThread.getGrContext(),
-                                                          skgpu::Budgeted::kYes, info, 0,
-                                                          this->getSurfaceOrigin(), &props));
+        node->setLayerSurface(SkSurfaces::RenderTarget(mRenderThread.getGrContext(),
+                                                       skgpu::Budgeted::kYes, info, 0,
+                                                       this->getSurfaceOrigin(), &props));
         if (node->getLayerSurface()) {
             // update the transform in window of the layer to reset its origin wrt light source
             // position
@@ -222,8 +223,8 @@
         ATRACE_FORMAT("Bitmap#prepareToDraw %dx%d", bitmap->width(), bitmap->height());
         auto image = bitmap->makeImage();
         if (image.get()) {
-            SkImage_pinAsTexture(image.get(), context);
-            SkImage_unpinAsTexture(image.get(), context);
+            skgpu::ganesh::PinAsTexture(context, image.get());
+            skgpu::ganesh::UnpinTexture(context, image.get());
             // A submit is necessary as there may not be a frame coming soon, so without a call
             // to submit these texture uploads can just sit in the queue building up until
             // we run out of RAM
@@ -621,7 +622,7 @@
     auto bufferColorSpace = bufferParams.getColorSpace();
     if (mBufferSurface == nullptr || mBufferColorSpace == nullptr ||
         !SkColorSpace::Equals(mBufferColorSpace.get(), bufferColorSpace.get())) {
-        mBufferSurface = SkSurface::MakeFromAHardwareBuffer(
+        mBufferSurface = SkSurfaces::WrapAndroidHardwareBuffer(
                 mRenderThread.getGrContext(), mHardwareBuffer, kTopLeft_GrSurfaceOrigin,
                 bufferColorSpace, nullptr, true);
         mBufferColorSpace = bufferColorSpace;
diff --git a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp
index 3ca7eeb..e917f9a 100644
--- a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp
+++ b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp
@@ -37,6 +37,7 @@
 #include "NinePatchUtils.h"
 #include "RenderNode.h"
 #include "pipeline/skia/AnimatedDrawables.h"
+#include "pipeline/skia/BackdropFilterDrawable.h"
 #ifdef __ANDROID__ // Layoutlib does not support GL, Vulcan etc.
 #include "pipeline/skia/GLFunctorDrawable.h"
 #include "pipeline/skia/VkFunctorDrawable.h"
@@ -168,6 +169,14 @@
         // Put Vulkan WebViews with non-rectangular clips in a HW layer
         renderNode->mutateStagingProperties().setClipMayBeComplex(mRecorder.isClipMayBeComplex());
     }
+
+    // draw backdrop filter drawable if needed.
+    if (renderNode->stagingProperties().layerProperties().getBackdropImageFilter()) {
+        auto* backdropFilterDrawable =
+                mDisplayList->allocateDrawable<BackdropFilterDrawable>(renderNode, asSkCanvas());
+        drawDrawable(backdropFilterDrawable);
+    }
+
     drawDrawable(&renderNodeDrawable);
 
     // use staging property, since recording on UI thread
@@ -227,6 +236,17 @@
     }
 }
 
+void SkiaRecordingCanvas::onFilterPaint(android::Paint& paint) {
+    INHERITED::onFilterPaint(paint);
+    SkShader* shader = paint.getShader();
+    // TODO(b/264559422): This only works for very specifically a BitmapShader.
+    //  It's better than nothing, though
+    SkImage* image = shader ? shader->isAImage(nullptr, nullptr) : nullptr;
+    if (image) {
+        mDisplayList->mMutableImages.push_back(image);
+    }
+}
+
 void SkiaRecordingCanvas::drawBitmap(Bitmap& bitmap, float left, float top, const Paint* paint) {
     auto payload = DrawImagePayload(bitmap);
 
diff --git a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.h b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.h
index a8e4580..3bd091d 100644
--- a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.h
+++ b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.h
@@ -105,6 +105,8 @@
 
     void handleMutableImages(Bitmap& bitmap, DrawImagePayload& payload);
 
+    void onFilterPaint(Paint& paint) override;
+
     using INHERITED = SkiaCanvas;
 };
 
diff --git a/libs/hwui/pipeline/skia/StretchMask.cpp b/libs/hwui/pipeline/skia/StretchMask.cpp
index cad3703..1676787 100644
--- a/libs/hwui/pipeline/skia/StretchMask.cpp
+++ b/libs/hwui/pipeline/skia/StretchMask.cpp
@@ -18,14 +18,13 @@
 #include "SkBlendMode.h"
 #include "SkCanvas.h"
 #include "SkSurface.h"
-#include "include/gpu/GpuTypes.h" // from Skia
 
 #include "TransformCanvas.h"
 #include "SkiaDisplayList.h"
 
 using android::uirenderer::StretchMask;
 
-void StretchMask::draw(GrRecordingContext* context,
+void StretchMask::draw(GrRecordingContext*,
                        const StretchEffect& stretch,
                        const SkRect& bounds,
                        skiapipeline::SkiaDisplayList* displayList,
@@ -35,16 +34,14 @@
     if (mMaskSurface == nullptr || mMaskSurface->width() != width ||
         mMaskSurface->height() != height) {
         // Create a new surface if we don't have one or our existing size does
-        // not match.
-        mMaskSurface = SkSurface::MakeRenderTarget(
-            context,
-            skgpu::Budgeted::kYes,
-            SkImageInfo::Make(
-                width,
-                height,
-                SkColorType::kAlpha_8_SkColorType,
-                SkAlphaType::kPremul_SkAlphaType)
-        );
+        // not match. SkCanvas::makeSurface returns a new surface that will
+        // be GPU-backed if canvas was also.
+        mMaskSurface = canvas->makeSurface(SkImageInfo::Make(
+            width,
+            height,
+            SkColorType::kAlpha_8_SkColorType,
+            SkAlphaType::kPremul_SkAlphaType
+        ));
         mIsDirty = true;
     }
 
@@ -53,7 +50,7 @@
         // Make sure to apply target transformation to the mask canvas
         // to ensure the replayed drawing commands generate the same result
         auto previousMatrix = displayList->mParentMatrix;
-        displayList->mParentMatrix = maskCanvas->getTotalMatrix();
+        displayList->mParentMatrix = maskCanvas->getLocalToDeviceAs3x3();
         maskCanvas->save();
         maskCanvas->drawColor(0, SkBlendMode::kClear);
         TransformCanvas transformCanvas(maskCanvas, SkBlendMode::kSrcOver);
diff --git a/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp b/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp
index adf3c06..475b110 100644
--- a/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp
+++ b/libs/hwui/pipeline/skia/VkInteropFunctorDrawable.cpp
@@ -35,6 +35,8 @@
 #include "effects/GainmapRenderer.h"
 
 #include <SkBlendMode.h>
+#include <SkImage.h>
+#include <SkImageAndroid.h>
 
 namespace android {
 namespace uirenderer {
@@ -183,9 +185,9 @@
     // drawing into the offscreen surface, so we need to reset it here.
     canvas->resetMatrix();
 
-    auto functorImage = SkImage::MakeFromAHardwareBuffer(mFrameBuffer.get(), kPremul_SkAlphaType,
-                                                         canvas->imageInfo().refColorSpace(),
-                                                         kBottomLeft_GrSurfaceOrigin);
+    auto functorImage = SkImages::DeferredFromAHardwareBuffer(
+        mFrameBuffer.get(), kPremul_SkAlphaType, canvas->imageInfo().refColorSpace(),
+        kBottomLeft_GrSurfaceOrigin);
     canvas->drawImage(functorImage, 0, 0, SkSamplingOptions(), &paint);
     canvas->restore();
 }
diff --git a/libs/hwui/private/hwui/DrawGlInfo.h b/libs/hwui/private/hwui/DrawGlInfo.h
index eb1f930..ed3fabc 100644
--- a/libs/hwui/private/hwui/DrawGlInfo.h
+++ b/libs/hwui/private/hwui/DrawGlInfo.h
@@ -24,8 +24,7 @@
 namespace uirenderer {
 
 /**
- * Structure used by OpenGLRenderer::callDrawGLFunction() to pass and
- * receive data from OpenGL functors.
+ * Structure used to pass and receive data from OpenGL functors.
  */
 struct DrawGlInfo {
     // Input: current clip rect
diff --git a/libs/hwui/renderthread/CacheManager.cpp b/libs/hwui/renderthread/CacheManager.cpp
index babce88..8f81dba 100644
--- a/libs/hwui/renderthread/CacheManager.cpp
+++ b/libs/hwui/renderthread/CacheManager.cpp
@@ -277,12 +277,13 @@
 
     const nsecs_t now = systemTime(CLOCK_MONOTONIC);
     // Rate limiting
-    if ((now - mLastDeferredCleanup) < 25_ms) {
+    if ((now - mLastDeferredCleanup) > 25_ms) {
         mLastDeferredCleanup = now;
         const nsecs_t frameCompleteNanos = mFrameCompletions[0];
         const nsecs_t frameDiffNanos = now - frameCompleteNanos;
         const nsecs_t cleanupMillis =
-                ns2ms(std::max(frameDiffNanos, mMemoryPolicy.minimumResourceRetention));
+                ns2ms(std::clamp(frameDiffNanos, mMemoryPolicy.minimumResourceRetention,
+                                 mMemoryPolicy.maximumResourceRetention));
         mGrContext->performDeferredCleanup(std::chrono::milliseconds(cleanupMillis),
                                            mMemoryPolicy.purgeScratchOnly);
     }
diff --git a/libs/hwui/renderthread/CacheManager.h b/libs/hwui/renderthread/CacheManager.h
index 5e43ac2..bcfa4f3 100644
--- a/libs/hwui/renderthread/CacheManager.h
+++ b/libs/hwui/renderthread/CacheManager.h
@@ -64,12 +64,13 @@
     void unregisterCanvasContext(CanvasContext* context);
     void onContextStopped(CanvasContext* context);
 
+    bool areAllContextsStopped();
+
 private:
     friend class RenderThread;
 
     explicit CacheManager(RenderThread& thread);
     void setupCacheLimits();
-    bool areAllContextsStopped();
     void checkUiHidden();
     void scheduleDestroyContext();
     void cancelDestroyContext();
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index a5518eb..2ef7802 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -125,6 +125,7 @@
         , mRenderPipeline(std::move(renderPipeline))
         , mHintSessionWrapper(uiThreadId, renderThreadId) {
     mRenderThread.cacheManager().registerCanvasContext(this);
+    mRenderThread.renderState().registerContextCallback(this);
     rootRenderNode->makeRoot();
     mRenderNodes.emplace_back(rootRenderNode);
     mProfiler.setDensity(DeviceInfo::getDensity());
@@ -137,6 +138,7 @@
     }
     mRenderNodes.clear();
     mRenderThread.cacheManager().unregisterCanvasContext(this);
+    mRenderThread.renderState().removeContextCallback(this);
 }
 
 void CanvasContext::addRenderNode(RenderNode* node, bool placeFront) {
@@ -963,6 +965,10 @@
     }
 }
 
+void CanvasContext::onContextDestroyed() {
+    destroyHardwareResources();
+}
+
 DeferredLayerUpdater* CanvasContext::createTextureLayer() {
     return mRenderPipeline->createTextureLayer();
 }
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h
index 32ac5af..3f02674 100644
--- a/libs/hwui/renderthread/CanvasContext.h
+++ b/libs/hwui/renderthread/CanvasContext.h
@@ -43,6 +43,7 @@
 #include "Lighting.h"
 #include "ReliableSurface.h"
 #include "RenderNode.h"
+#include "renderstate/RenderState.h"
 #include "renderthread/RenderTask.h"
 #include "renderthread/RenderThread.h"
 #include "utils/RingBuffer.h"
@@ -64,7 +65,7 @@
 // This per-renderer class manages the bridge between the global EGL context
 // and the render surface.
 // TODO: Rename to Renderer or some other per-window, top-level manager
-class CanvasContext : public IFrameCallback {
+class CanvasContext : public IFrameCallback, public IGpuContextCallback {
 public:
     static CanvasContext* create(RenderThread& thread, bool translucent, RenderNode* rootRenderNode,
                                  IContextFactory* contextFactory, pid_t uiThreadId,
@@ -154,6 +155,7 @@
     void markLayerInUse(RenderNode* node);
 
     void destroyHardwareResources();
+    void onContextDestroyed() override;
 
     DeferredLayerUpdater* createTextureLayer();
 
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp
index 224c878..f949ddd 100644
--- a/libs/hwui/renderthread/RenderProxy.cpp
+++ b/libs/hwui/renderthread/RenderProxy.cpp
@@ -16,7 +16,13 @@
 
 #include "RenderProxy.h"
 
+#include <SkBitmap.h>
+#include <SkImage.h>
+#include <SkPicture.h>
 #include <gui/TraceUtils.h>
+#include <pthread.h>
+#include <ui/GraphicBufferAllocator.h>
+
 #include "DeferredLayerUpdater.h"
 #include "DisplayList.h"
 #include "Properties.h"
@@ -29,12 +35,6 @@
 #include "utils/Macros.h"
 #include "utils/TimeUtils.h"
 
-#include <SkBitmap.h>
-#include <SkImage.h>
-#include <SkPicture.h>
-
-#include <pthread.h>
-
 namespace android {
 namespace uirenderer {
 namespace renderthread {
@@ -323,6 +323,9 @@
             }
         });
     }
+    std::string grallocInfo;
+    GraphicBufferAllocator::getInstance().dump(grallocInfo);
+    dprintf(fd, "%s\n", grallocInfo.c_str());
 }
 
 void RenderProxy::getMemoryUsage(size_t* cpuUsage, size_t* gpuUsage) {
diff --git a/libs/hwui/renderthread/VulkanManager.cpp b/libs/hwui/renderthread/VulkanManager.cpp
index 46698a6..a6e8c08 100644
--- a/libs/hwui/renderthread/VulkanManager.cpp
+++ b/libs/hwui/renderthread/VulkanManager.cpp
@@ -24,6 +24,7 @@
 #include <GrTypes.h>
 #include <android/sync.h>
 #include <gui/TraceUtils.h>
+#include <include/gpu/ganesh/SkSurfaceGanesh.h>
 #include <ui/FatVector.h>
 #include <vk/GrVkExtensions.h>
 #include <vk/GrVkTypes.h>
@@ -33,9 +34,6 @@
 #include "pipeline/skia/ShaderCache.h"
 #include "renderstate/RenderState.h"
 
-#undef LOG_TAG
-#define LOG_TAG "VulkanManager"
-
 namespace android {
 namespace uirenderer {
 namespace renderthread {
@@ -518,7 +516,7 @@
                         // The following flush blocks the GPU immediately instead of waiting for
                         // other drawing ops. It seems dequeue_fence is not respected otherwise.
                         // TODO: remove the flush after finding why backendSemaphore is not working.
-                        bufferInfo->skSurface->flushAndSubmit();
+                        skgpu::ganesh::FlushAndSubmit(bufferInfo->skSurface);
                     }
                 }
             }
@@ -586,10 +584,10 @@
     } else {
         semaphore = VK_NULL_HANDLE;
     }
-    GrSemaphoresSubmitted submitted =
-            surface->flush(SkSurface::BackendSurfaceAccess::kPresent, flushInfo);
     GrDirectContext* context = GrAsDirectContext(surface->recordingContext());
     ALOGE_IF(!context, "Surface is not backed by gpu");
+    GrSemaphoresSubmitted submitted = context->flush(
+            surface, SkSurfaces::BackendSurfaceAccess::kPresent, flushInfo);
     context->submit();
     const nsecs_t submissionTime = systemTime();
     if (semaphore != VK_NULL_HANDLE) {
@@ -599,7 +597,8 @@
                 // retrieve VkImage used as render target
                 VkImage image = VK_NULL_HANDLE;
                 GrBackendRenderTarget backendRenderTarget =
-                        surface->getBackendRenderTarget(SkSurface::kFlushRead_BackendHandleAccess);
+                        SkSurfaces::GetBackendRenderTarget(
+                            surface, SkSurfaces::BackendHandleAccess::kFlushRead);
                 if (backendRenderTarget.isValid()) {
                     GrVkImageInfo info;
                     if (backendRenderTarget.getVkImageInfo(&info)) {
diff --git a/libs/hwui/renderthread/VulkanSurface.cpp b/libs/hwui/renderthread/VulkanSurface.cpp
index 3168cb0..20b743b 100644
--- a/libs/hwui/renderthread/VulkanSurface.cpp
+++ b/libs/hwui/renderthread/VulkanSurface.cpp
@@ -16,6 +16,7 @@
 
 #include "VulkanSurface.h"
 
+#include <include/android/SkSurfaceAndroid.h>
 #include <GrDirectContext.h>
 #include <SkSurface.h>
 #include <algorithm>
@@ -24,9 +25,6 @@
 #include "VulkanManager.h"
 #include "utils/Color.h"
 
-#undef LOG_TAG
-#define LOG_TAG "VulkanSurface"
-
 namespace android {
 namespace uirenderer {
 namespace renderthread {
@@ -470,12 +468,12 @@
             surfaceProps = SkSurfaceProps(SkSurfaceProps::kAlwaysDither_Flag | surfaceProps.flags(),
                                           surfaceProps.pixelGeometry());
         }
-        bufferInfo->skSurface = SkSurface::MakeFromAHardwareBuffer(
+        bufferInfo->skSurface = SkSurfaces::WrapAndroidHardwareBuffer(
                 mGrContext, ANativeWindowBuffer_getHardwareBuffer(bufferInfo->buffer.get()),
                 kTopLeft_GrSurfaceOrigin, mWindowInfo.colorspace, &surfaceProps,
                 /*from_window=*/true);
         if (bufferInfo->skSurface.get() == nullptr) {
-            ALOGE("SkSurface::MakeFromAHardwareBuffer failed");
+            ALOGE("SkSurfaces::WrapAndroidHardwareBuffer failed");
             mNativeWindow->cancelBuffer(mNativeWindow.get(), buffer,
                                         mNativeBuffers[idx].dequeue_fence.release());
             mNativeBuffers[idx].dequeued = false;
diff --git a/libs/hwui/tests/common/TestUtils.h b/libs/hwui/tests/common/TestUtils.h
index 81ecfe5..ffc664c 100644
--- a/libs/hwui/tests/common/TestUtils.h
+++ b/libs/hwui/tests/common/TestUtils.h
@@ -61,18 +61,10 @@
         ADD_FAILURE() << "ClipState not a rect";                                     \
     }
 
-#define INNER_PIPELINE_TEST(test_case_name, test_name, pipeline, functionCall) \
-    TEST(test_case_name, test_name##_##pipeline) {                             \
-        RenderPipelineType oldType = Properties::getRenderPipelineType();      \
-        Properties::overrideRenderPipelineType(RenderPipelineType::pipeline);  \
-        functionCall;                                                          \
-        Properties::overrideRenderPipelineType(oldType);                       \
-    };
-
-#define INNER_PIPELINE_RENDERTHREAD_TEST(test_case_name, test_name, pipeline) \
-    INNER_PIPELINE_TEST(test_case_name, test_name, pipeline,                  \
-                        TestUtils::runOnRenderThread(                         \
-                                test_case_name##_##test_name##_RenderThreadTest::doTheThing))
+#define INNER_PIPELINE_RENDERTHREAD_TEST(test_case_name, test_name)                                \
+    TEST(test_case_name, test_name) {                                                              \
+        TestUtils::runOnRenderThread(test_case_name##_##test_name##_RenderThreadTest::doTheThing); \
+    }
 
 /**
  * Like gtest's TEST, but runs on the RenderThread, and 'renderThread' is passed, in top level scope
@@ -83,21 +75,7 @@
     public:                                                                                 \
         static void doTheThing(renderthread::RenderThread& renderThread);                   \
     };                                                                                      \
-    INNER_PIPELINE_RENDERTHREAD_TEST(test_case_name, test_name, SkiaGL);                    \
-    /* Temporarily disabling Vulkan until we can figure out a way to stub out the driver */ \
-    /* INNER_PIPELINE_RENDERTHREAD_TEST(test_case_name, test_name, SkiaVulkan); */          \
-    void test_case_name##_##test_name##_RenderThreadTest::doTheThing(                       \
-            renderthread::RenderThread& renderThread)
-
-/**
- * Like RENDERTHREAD_TEST, but only runs with the Skia RenderPipelineTypes
- */
-#define RENDERTHREAD_SKIA_PIPELINE_TEST(test_case_name, test_name)                          \
-    class test_case_name##_##test_name##_RenderThreadTest {                                 \
-    public:                                                                                 \
-        static void doTheThing(renderthread::RenderThread& renderThread);                   \
-    };                                                                                      \
-    INNER_PIPELINE_RENDERTHREAD_TEST(test_case_name, test_name, SkiaGL);                    \
+    INNER_PIPELINE_RENDERTHREAD_TEST(test_case_name, test_name);                            \
     /* Temporarily disabling Vulkan until we can figure out a way to stub out the driver */ \
     /* INNER_PIPELINE_RENDERTHREAD_TEST(test_case_name, test_name, SkiaVulkan); */          \
     void test_case_name##_##test_name##_RenderThreadTest::doTheThing(                       \
@@ -307,13 +285,21 @@
         int destroyed = 0;
         int removeOverlays = 0;
         int glesDraw = 0;
+        int vkInitialize = 0;
+        int vkDraw = 0;
+        int vkPostDraw = 0;
     };
 
     static void expectOnRenderThread(const std::string_view& function = "unknown") {
         EXPECT_EQ(gettid(), TestUtils::getRenderThreadTid()) << "Called on wrong thread: " << function;
     }
 
-    static WebViewFunctorCallbacks createMockFunctor(RenderMode mode) {
+    static int createMockFunctor() {
+        const auto renderMode = WebViewFunctor_queryPlatformRenderMode();
+        return WebViewFunctor_create(nullptr, createMockFunctorCallbacks(renderMode), renderMode);
+    }
+
+    static WebViewFunctorCallbacks createMockFunctorCallbacks(RenderMode mode) {
         auto callbacks = WebViewFunctorCallbacks{
                 .onSync =
                         [](int functor, void* client_data, const WebViewSyncData& data) {
@@ -345,9 +331,22 @@
                     sMockFunctorCounts[functor].glesDraw++;
                 };
                 break;
-            default:
-                ADD_FAILURE();
-                return WebViewFunctorCallbacks{};
+            case RenderMode::Vulkan:
+                callbacks.vk.initialize = [](int functor, void* data,
+                                             const VkFunctorInitParams& params) {
+                    expectOnRenderThread("initialize");
+                    sMockFunctorCounts[functor].vkInitialize++;
+                };
+                callbacks.vk.draw = [](int functor, void* data, const VkFunctorDrawParams& params,
+                                       const WebViewOverlayData& overlayParams) {
+                    expectOnRenderThread("draw");
+                    sMockFunctorCounts[functor].vkDraw++;
+                };
+                callbacks.vk.postDraw = [](int functor, void* data) {
+                    expectOnRenderThread("postDraw");
+                    sMockFunctorCounts[functor].vkPostDraw++;
+                };
+                break;
         }
         return callbacks;
     }
diff --git a/libs/hwui/tests/macrobench/main.cpp b/libs/hwui/tests/macrobench/main.cpp
index f3f32eb..e227999 100644
--- a/libs/hwui/tests/macrobench/main.cpp
+++ b/libs/hwui/tests/macrobench/main.cpp
@@ -14,30 +14,32 @@
  * limitations under the License.
  */
 
-#include "tests/common/LeakChecker.h"
-#include "tests/common/TestScene.h"
-
-#include "Properties.h"
-#include "hwui/Typeface.h"
-#include "HardwareBitmapUploader.h"
-#include "renderthread/RenderProxy.h"
-
+#include <android-base/parsebool.h>
 #include <benchmark/benchmark.h>
+#include <errno.h>
+#include <fcntl.h>
 #include <fnmatch.h>
 #include <getopt.h>
 #include <pthread.h>
 #include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
 #include <unistd.h>
+
+#include <regex>
 #include <string>
 #include <unordered_map>
 #include <vector>
 
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
+#include "HardwareBitmapUploader.h"
+#include "Properties.h"
+#include "hwui/Typeface.h"
+#include "renderthread/RenderProxy.h"
+#include "tests/common/LeakChecker.h"
+#include "tests/common/TestScene.h"
 
 using namespace android;
+using namespace android::base;
 using namespace android::uirenderer;
 using namespace android::uirenderer::test;
 
@@ -69,6 +71,9 @@
   --onscreen           Render tests on device screen. By default tests
                        are offscreen rendered
   --benchmark_format   Set output format. Possible values are tabular, json, csv
+  --benchmark_list_tests Lists the tests that would run but does not run them
+  --benchmark_filter=<regex> Filters the test set to the given regex. If prefixed with `-` and test
+                       that doesn't match the given regex is run
   --renderer=TYPE      Sets the render pipeline to use. May be skiagl or skiavk
   --skip-leak-check    Skips the memory leak check
   --report-gpu-memory[=verbose]  Dumps the GPU memory usage after each test run
@@ -140,6 +145,9 @@
     if (!strcmp(format, "tabular")) {
         gBenchmarkReporter.reset(new benchmark::ConsoleReporter());
     } else if (!strcmp(format, "json")) {
+        // We cannot print the leak check if outputing to JSON as that will break
+        // JSON parsers since it's not JSON-formatted
+        gRunLeakCheck = false;
         gBenchmarkReporter.reset(new benchmark::JSONReporter());
     } else {
         fprintf(stderr, "Unknown format '%s'\n", format);
@@ -160,6 +168,24 @@
     return true;
 }
 
+static void addTestsThatMatchFilter(std::string spec) {
+    if (spec.empty() || spec == "all") {
+        spec = ".";  // Regexp that matches all benchmarks
+    }
+    bool isNegativeFilter = false;
+    if (spec[0] == '-') {
+        spec.replace(0, 1, "");
+        isNegativeFilter = true;
+    }
+    std::regex re(spec, std::regex_constants::extended);
+    for (auto& iter : TestScene::testMap()) {
+        if ((isNegativeFilter && !std::regex_search(iter.first, re)) ||
+            (!isNegativeFilter && std::regex_search(iter.first, re))) {
+            gRunTests.push_back(iter.second);
+        }
+    }
+}
+
 // For options that only exist in long-form. Anything in the
 // 0-255 range is reserved for short options (which just use their ASCII value)
 namespace LongOpts {
@@ -170,6 +196,8 @@
     ReportFrametime,
     CpuSet,
     BenchmarkFormat,
+    BenchmarkListTests,
+    BenchmarkFilter,
     Onscreen,
     Offscreen,
     Renderer,
@@ -179,14 +207,16 @@
 }
 
 static const struct option LONG_OPTIONS[] = {
-        {"frames", required_argument, nullptr, 'f'},
-        {"repeat", required_argument, nullptr, 'r'},
+        {"count", required_argument, nullptr, 'c'},
+        {"runs", required_argument, nullptr, 'r'},
         {"help", no_argument, nullptr, 'h'},
         {"list", no_argument, nullptr, LongOpts::List},
         {"wait-for-gpu", no_argument, nullptr, LongOpts::WaitForGpu},
         {"report-frametime", optional_argument, nullptr, LongOpts::ReportFrametime},
         {"cpuset", required_argument, nullptr, LongOpts::CpuSet},
         {"benchmark_format", required_argument, nullptr, LongOpts::BenchmarkFormat},
+        {"benchmark_list_tests", optional_argument, nullptr, LongOpts::BenchmarkListTests},
+        {"benchmark_filter", required_argument, nullptr, LongOpts::BenchmarkFilter},
         {"onscreen", no_argument, nullptr, LongOpts::Onscreen},
         {"offscreen", no_argument, nullptr, LongOpts::Offscreen},
         {"renderer", required_argument, nullptr, LongOpts::Renderer},
@@ -197,8 +227,12 @@
 static const char* SHORT_OPTIONS = "c:r:h";
 
 void parseOptions(int argc, char* argv[]) {
+    benchmark::BenchmarkReporter::Context::executable_name = (argc > 0) ? argv[0] : "unknown";
+
     int c;
     bool error = false;
+    bool listTestsOnly = false;
+    bool testsAreFiltered = false;
     opterr = 0;
 
     while (true) {
@@ -272,6 +306,21 @@
                 }
                 break;
 
+            case LongOpts::BenchmarkListTests:
+                if (!optarg || ParseBool(optarg) == ParseBoolResult::kTrue) {
+                    listTestsOnly = true;
+                }
+                break;
+
+            case LongOpts::BenchmarkFilter:
+                if (!optarg) {
+                    error = true;
+                    break;
+                }
+                addTestsThatMatchFilter(optarg);
+                testsAreFiltered = true;
+                break;
+
             case LongOpts::Renderer:
                 if (!optarg) {
                     error = true;
@@ -346,11 +395,18 @@
                 }
             }
         } while (optind < argc);
-    } else {
+    } else if (gRunTests.empty() && !testsAreFiltered) {
         for (auto& iter : TestScene::testMap()) {
             gRunTests.push_back(iter.second);
         }
     }
+
+    if (listTestsOnly) {
+        for (auto& iter : gRunTests) {
+            std::cout << iter.name << std::endl;
+        }
+        exit(EXIT_SUCCESS);
+    }
 }
 
 int main(int argc, char* argv[]) {
diff --git a/libs/hwui/tests/unit/AutoBackendTextureReleaseTests.cpp b/libs/hwui/tests/unit/AutoBackendTextureReleaseTests.cpp
index 138b3efd..b8b3f0a 100644
--- a/libs/hwui/tests/unit/AutoBackendTextureReleaseTests.cpp
+++ b/libs/hwui/tests/unit/AutoBackendTextureReleaseTests.cpp
@@ -46,7 +46,7 @@
 
     EXPECT_EQ(1, TestUtils::getUsageCount(textureRelease));
 
-    // SkImage::MakeFromTexture should fail if given null GrDirectContext.
+    // SkImages::BorrowTextureFrom should fail if given null GrDirectContext.
     textureRelease->makeImage(buffer, HAL_DATASPACE_UNKNOWN, /*context = */ nullptr);
 
     EXPECT_EQ(1, TestUtils::getUsageCount(textureRelease));
diff --git a/libs/hwui/tests/unit/CacheManagerTests.cpp b/libs/hwui/tests/unit/CacheManagerTests.cpp
index 2b90bda..89d00d3 100644
--- a/libs/hwui/tests/unit/CacheManagerTests.cpp
+++ b/libs/hwui/tests/unit/CacheManagerTests.cpp
@@ -20,7 +20,8 @@
 #include "renderthread/EglManager.h"
 #include "tests/common/TestUtils.h"
 
-#include <SkImagePriv.h>
+#include <SkImageAndroid.h>
+#include <include/gpu/ganesh/SkSurfaceGanesh.h>
 #include "include/gpu/GpuTypes.h" // from Skia
 
 using namespace android;
@@ -34,7 +35,7 @@
 }
 
 // TOOD(258700630): fix this test and re-enable
-RENDERTHREAD_SKIA_PIPELINE_TEST(CacheManager, DISABLED_trimMemory) {
+RENDERTHREAD_TEST(CacheManager, DISABLED_trimMemory) {
     int32_t width = DeviceInfo::get()->getWidth();
     int32_t height = DeviceInfo::get()->getHeight();
     GrDirectContext* grContext = renderThread.getGrContext();
@@ -46,8 +47,8 @@
 
     while (getCacheUsage(grContext) <= renderThread.cacheManager().getBackgroundCacheSize()) {
         SkImageInfo info = SkImageInfo::MakeA8(width, height);
-        sk_sp<SkSurface> surface = SkSurface::MakeRenderTarget(grContext, skgpu::Budgeted::kYes,
-                                                               info);
+        sk_sp<SkSurface> surface = SkSurfaces::RenderTarget(grContext, skgpu::Budgeted::kYes,
+                                                            info);
         surface->getCanvas()->drawColor(SK_AlphaTRANSPARENT);
 
         grContext->flushAndSubmit();
@@ -57,9 +58,8 @@
 
     // create an image and pin it so that we have something with a unique key in the cache
     sk_sp<Bitmap> bitmap = Bitmap::allocateHeapBitmap(SkImageInfo::MakeA8(width, height));
-    sk_sp<SkImage> image = bitmap->makeImage();
-    ASSERT_TRUE(SkImage_pinAsTexture(image.get(), grContext));
-
+    sk_sp<SkImage> image = bitmap->makeImage(); // calls skgpu::ganesh::PinAsTexture under the hood.
+    ASSERT_TRUE(skgpu::ganesh::PinAsTexture(grContext, image.get()));
     // attempt to trim all memory while we still hold strong refs
     renderThread.cacheManager().trimMemory(TrimLevel::COMPLETE);
     ASSERT_TRUE(0 == grContext->getResourceCachePurgeableBytes());
@@ -71,7 +71,7 @@
     }
 
     // unpin the image which should add a unique purgeable key to the cache
-    SkImage_unpinAsTexture(image.get(), grContext);
+    skgpu::ganesh::UnpinTexture(grContext, image.get());
 
     // verify that we have enough purgeable bytes
     const size_t purgeableBytes = grContext->getResourceCachePurgeableBytes();
diff --git a/libs/hwui/tests/unit/CanvasContextTests.cpp b/libs/hwui/tests/unit/CanvasContextTests.cpp
index 9e376e3..47a4105 100644
--- a/libs/hwui/tests/unit/CanvasContextTests.cpp
+++ b/libs/hwui/tests/unit/CanvasContextTests.cpp
@@ -19,6 +19,7 @@
 #include "AnimationContext.h"
 #include "IContextFactory.h"
 #include "renderthread/CanvasContext.h"
+#include "renderthread/VulkanManager.h"
 #include "tests/common/TestUtils.h"
 
 using namespace android;
@@ -42,3 +43,38 @@
 
     canvasContext->destroy();
 }
+
+RENDERTHREAD_TEST(CanvasContext, buildLayerDoesntLeak) {
+    auto node = TestUtils::createNode(0, 0, 200, 400, [](RenderProperties& props, Canvas& canvas) {
+        canvas.drawColor(0xFFFF0000, SkBlendMode::kSrc);
+    });
+    ASSERT_TRUE(node->isValid());
+    EXPECT_EQ(LayerType::None, node->stagingProperties().effectiveLayerType());
+    node->mutateStagingProperties().mutateLayerProperties().setType(LayerType::RenderLayer);
+
+    auto& cacheManager = renderThread.cacheManager();
+    EXPECT_TRUE(cacheManager.areAllContextsStopped());
+    ContextFactory contextFactory;
+    std::unique_ptr<CanvasContext> canvasContext(
+            CanvasContext::create(renderThread, false, node.get(), &contextFactory, 0, 0));
+    canvasContext->buildLayer(node.get());
+    EXPECT_TRUE(node->hasLayer());
+    if (Properties::getRenderPipelineType() == RenderPipelineType::SkiaVulkan) {
+        auto instance = VulkanManager::peekInstance();
+        if (instance) {
+            EXPECT_TRUE(instance->hasVkContext());
+        } else {
+            ADD_FAILURE() << "VulkanManager wasn't initialized to buildLayer?";
+        }
+    }
+    renderThread.destroyRenderingContext();
+    EXPECT_FALSE(node->hasLayer()) << "Node still has a layer after rendering context destroyed";
+
+    if (Properties::getRenderPipelineType() == RenderPipelineType::SkiaVulkan) {
+        auto instance = VulkanManager::peekInstance();
+        if (instance) {
+            ADD_FAILURE() << "VulkanManager still exists";
+            EXPECT_FALSE(instance->hasVkContext());
+        }
+    }
+}
diff --git a/libs/hwui/tests/unit/DeferredLayerUpdaterTests.cpp b/libs/hwui/tests/unit/DeferredLayerUpdaterTests.cpp
index 0c389bfe8..cfa18ae 100644
--- a/libs/hwui/tests/unit/DeferredLayerUpdaterTests.cpp
+++ b/libs/hwui/tests/unit/DeferredLayerUpdaterTests.cpp
@@ -40,7 +40,7 @@
     // push the deferred updates to the layer
     SkBitmap bitmap;
     bitmap.allocN32Pixels(16, 16);
-    sk_sp<SkImage> layerImage = SkImage::MakeFromBitmap(bitmap);
+    sk_sp<SkImage> layerImage = SkImages::RasterFromBitmap(bitmap);
     layerUpdater->updateLayer(true, layerImage, 0, SkRect::MakeEmpty());
 
     // the backing layer should now have all the properties applied.
diff --git a/libs/hwui/tests/unit/RenderNodeDrawableTests.cpp b/libs/hwui/tests/unit/RenderNodeDrawableTests.cpp
index 596bd37..073a835 100644
--- a/libs/hwui/tests/unit/RenderNodeDrawableTests.cpp
+++ b/libs/hwui/tests/unit/RenderNodeDrawableTests.cpp
@@ -14,20 +14,22 @@
  * limitations under the License.
  */
 
-#include <VectorDrawable.h>
-#include <gtest/gtest.h>
-
 #include <SkBlendMode.h>
 #include <SkClipStack.h>
 #include <SkSurface_Base.h>
+#include <VectorDrawable.h>
+#include <gtest/gtest.h>
+#include <include/effects/SkImageFilters.h>
 #include <string.h>
+
 #include "AnimationContext.h"
 #include "DamageAccumulator.h"
 #include "FatalTestCanvas.h"
 #include "IContextFactory.h"
-#include "hwui/Paint.h"
 #include "RecordingCanvas.h"
 #include "SkiaCanvas.h"
+#include "hwui/Paint.h"
+#include "pipeline/skia/BackdropFilterDrawable.h"
 #include "pipeline/skia/SkiaDisplayList.h"
 #include "pipeline/skia/SkiaOpenGLPipeline.h"
 #include "pipeline/skia/SkiaPipeline.h"
@@ -141,7 +143,7 @@
 }
 
 TEST(RenderNodeDrawable, composeOnLayer) {
-    auto surface = SkSurface::MakeRasterN32Premul(1, 1);
+    auto surface = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(1, 1));
     SkCanvas& canvas = *surface->getCanvas();
     canvas.drawColor(SK_ColorBLUE, SkBlendMode::kSrcOver);
     ASSERT_EQ(TestUtils::getColor(surface, 0, 0), SK_ColorBLUE);
@@ -152,7 +154,7 @@
             });
 
     // attach a layer to the render node
-    auto surfaceLayer = SkSurface::MakeRasterN32Premul(1, 1);
+    auto surfaceLayer = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(1, 1));
     auto canvas2 = surfaceLayer->getCanvas();
     canvas2->drawColor(SK_ColorWHITE, SkBlendMode::kSrcOver);
     rootNode->setLayerSurface(surfaceLayer);
@@ -187,7 +189,7 @@
 }
 
 TEST(RenderNodeDrawable, saveLayerClipAndMatrixRestore) {
-    auto surface = SkSurface::MakeRasterN32Premul(400, 800);
+    auto surface = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(400, 800));
     SkCanvas& canvas = *surface->getCanvas();
     canvas.drawColor(SK_ColorWHITE, SkBlendMode::kSrcOver);
     ASSERT_EQ(TestUtils::getColor(surface, 0, 0), SK_ColorWHITE);
@@ -353,7 +355,7 @@
     EXPECT_EQ(3, canvas.getIndex());
 }
 
-RENDERTHREAD_SKIA_PIPELINE_TEST(RenderNodeDrawable, emptyReceiver) {
+RENDERTHREAD_TEST(RenderNodeDrawable, emptyReceiver) {
     class ProjectionTestCanvas : public SkCanvas {
     public:
         ProjectionTestCanvas(int width, int height) : SkCanvas(width, height) {}
@@ -417,7 +419,7 @@
     EXPECT_EQ(2, canvas.getDrawCounter());
 }
 
-RENDERTHREAD_SKIA_PIPELINE_TEST(RenderNodeDrawable, projectionHwLayer) {
+RENDERTHREAD_TEST(RenderNodeDrawable, projectionHwLayer) {
     /* R is backward projected on B and C is a layer.
                 A
                / \
@@ -1050,7 +1052,7 @@
 }
 
 // Verify that layers are composed with linear filtering.
-RENDERTHREAD_SKIA_PIPELINE_TEST(RenderNodeDrawable, layerComposeQuality) {
+RENDERTHREAD_TEST(RenderNodeDrawable, layerComposeQuality) {
     static const int CANVAS_WIDTH = 1;
     static const int CANVAS_HEIGHT = 1;
     static const int LAYER_WIDTH = 1;
@@ -1074,7 +1076,8 @@
             });
 
     layerNode->animatorProperties().mutateLayerProperties().setType(LayerType::RenderLayer);
-    layerNode->setLayerSurface(SkSurface::MakeRasterN32Premul(LAYER_WIDTH, LAYER_HEIGHT));
+    layerNode->setLayerSurface(SkSurfaces::Raster(SkImageInfo::MakeN32Premul(LAYER_WIDTH, 
+                                                                             LAYER_HEIGHT)));
 
     FrameTestCanvas canvas;
     RenderNodeDrawable drawable(layerNode.get(), &canvas, true);
@@ -1167,7 +1170,7 @@
 }
 
 // Draw a vector drawable twice but with different bounds and verify correct bounds are used.
-RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaRecordingCanvas, drawVectorDrawable) {
+RENDERTHREAD_TEST(SkiaRecordingCanvas, drawVectorDrawable) {
     static const int CANVAS_WIDTH = 100;
     static const int CANVAS_HEIGHT = 200;
     class VectorDrawableTestCanvas : public TestCanvasBase {
@@ -1210,3 +1213,77 @@
     canvas.drawDrawable(&drawable);
     EXPECT_EQ(2, canvas.mDrawCounter);
 }
+
+// Verify drawing logics for BackdropFilterDrawable
+RENDERTHREAD_TEST(BackdropFilterDrawable, drawing) {
+    static const int CANVAS_WIDTH = 100;
+    static const int CANVAS_HEIGHT = 200;
+    class SimpleTestCanvas : public TestCanvasBase {
+    public:
+        SkRect mDstBounds;
+        SimpleTestCanvas() : TestCanvasBase(CANVAS_WIDTH, CANVAS_HEIGHT) {}
+        void onDrawRect(const SkRect& rect, const SkPaint& paint) override {
+            // did nothing.
+        }
+
+        // called when BackdropFilterDrawable is drawn.
+        void onDrawImageRect2(const SkImage*, const SkRect& src, const SkRect& dst,
+                              const SkSamplingOptions&, const SkPaint*,
+                              SrcRectConstraint) override {
+            mDrawCounter++;
+            mDstBounds = dst;
+        }
+    };
+    class SimpleLayer : public SkSurface_Base {
+    public:
+        SimpleLayer()
+                : SkSurface_Base(SkImageInfo::MakeN32Premul(CANVAS_WIDTH, CANVAS_HEIGHT), nullptr) {
+        }
+        virtual sk_sp<SkImage> onNewImageSnapshot(const SkIRect* bounds) override {
+            SkBitmap bitmap;
+            bitmap.allocN32Pixels(CANVAS_WIDTH, CANVAS_HEIGHT);
+            bitmap.setImmutable();
+            return bitmap.asImage();
+        }
+        SkCanvas* onNewCanvas() override { return new SimpleTestCanvas(); }
+        sk_sp<SkSurface> onNewSurface(const SkImageInfo&) override { return nullptr; }
+        bool onCopyOnWrite(ContentChangeMode) override { return true; }
+        void onWritePixels(const SkPixmap&, int x, int y) {}
+    };
+
+    auto node = TestUtils::createSkiaNode(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT,
+                                          [](RenderProperties& props, SkiaRecordingCanvas& canvas) {
+                                              canvas.drawRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT,
+                                                              Paint());
+                                          });
+
+    sk_sp<SkSurface> surface(new SimpleLayer());
+    auto* canvas = reinterpret_cast<SimpleTestCanvas*>(surface->getCanvas());
+    RenderNodeDrawable drawable(node.get(), canvas, true);
+    BackdropFilterDrawable backdropDrawable(node.get(), canvas);
+    canvas->drawDrawable(&drawable);
+    canvas->drawDrawable(&backdropDrawable);
+    // no backdrop filter, skip drawing.
+    EXPECT_EQ(0, canvas->mDrawCounter);
+
+    sk_sp<SkImageFilter> filter(SkImageFilters::Blur(3, 3, nullptr));
+    node->animatorProperties().mutateLayerProperties().setBackdropImageFilter(filter.get());
+    canvas->drawDrawable(&drawable);
+    canvas->drawDrawable(&backdropDrawable);
+    // backdrop filter is set, ok to draw.
+    EXPECT_EQ(1, canvas->mDrawCounter);
+    EXPECT_EQ(SkRect::MakeLTRB(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT), canvas->mDstBounds);
+
+    canvas->translate(30, 30);
+    canvas->drawDrawable(&drawable);
+    canvas->drawDrawable(&backdropDrawable);
+    // the drawable is still visible, ok to draw.
+    EXPECT_EQ(2, canvas->mDrawCounter);
+    EXPECT_EQ(SkRect::MakeLTRB(0, 0, CANVAS_WIDTH - 30, CANVAS_HEIGHT - 30), canvas->mDstBounds);
+
+    canvas->translate(CANVAS_WIDTH, CANVAS_HEIGHT);
+    canvas->drawDrawable(&drawable);
+    canvas->drawDrawable(&backdropDrawable);
+    // the drawable is invisible, skip drawing.
+    EXPECT_EQ(2, canvas->mDrawCounter);
+}
diff --git a/libs/hwui/tests/unit/RenderNodeTests.cpp b/libs/hwui/tests/unit/RenderNodeTests.cpp
index 80796f4..8273524 100644
--- a/libs/hwui/tests/unit/RenderNodeTests.cpp
+++ b/libs/hwui/tests/unit/RenderNodeTests.cpp
@@ -231,8 +231,7 @@
 }
 
 TEST(RenderNode, releasedCallback) {
-    int functor = WebViewFunctor_create(
-            nullptr, TestUtils::createMockFunctor(RenderMode::OpenGL_ES), RenderMode::OpenGL_ES);
+    int functor = TestUtils::createMockFunctor();
 
     auto node = TestUtils::createNode(0, 0, 200, 400, [&](RenderProperties& props, Canvas& canvas) {
         canvas.drawWebViewFunctor(functor);
diff --git a/libs/hwui/tests/unit/ShaderCacheTests.cpp b/libs/hwui/tests/unit/ShaderCacheTests.cpp
index 9aa2e1d..0f8bd13 100644
--- a/libs/hwui/tests/unit/ShaderCacheTests.cpp
+++ b/libs/hwui/tests/unit/ShaderCacheTests.cpp
@@ -370,9 +370,9 @@
 }
 
 using namespace android::uirenderer;
-RENDERTHREAD_SKIA_PIPELINE_TEST(ShaderCacheTest, testOnVkFrameFlushed) {
+RENDERTHREAD_TEST(ShaderCacheTest, testOnVkFrameFlushed) {
     if (Properties::getRenderPipelineType() != RenderPipelineType::SkiaVulkan) {
-        // RENDERTHREAD_SKIA_PIPELINE_TEST declares both SkiaVK and SkiaGL variants.
+        // RENDERTHREAD_TEST declares both SkiaVK and SkiaGL variants.
         GTEST_SKIP() << "This test is only applicable to RenderPipelineType::SkiaVulkan";
     }
     if (!folderExist(getExternalStorageFolder())) {
diff --git a/libs/hwui/tests/unit/SkiaCanvasTests.cpp b/libs/hwui/tests/unit/SkiaCanvasTests.cpp
index 87c5216..e53fcaa 100644
--- a/libs/hwui/tests/unit/SkiaCanvasTests.cpp
+++ b/libs/hwui/tests/unit/SkiaCanvasTests.cpp
@@ -36,7 +36,7 @@
 using namespace android::uirenderer;
 
 TEST(SkiaCanvas, drawShadowLayer) {
-    auto surface = SkSurface::MakeRasterN32Premul(10, 10);
+    auto surface = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(10, 10));
     SkiaCanvas canvas(surface->getCanvas());
 
     // clear to white
diff --git a/libs/hwui/tests/unit/SkiaDisplayListTests.cpp b/libs/hwui/tests/unit/SkiaDisplayListTests.cpp
index f825d7c..064d42e 100644
--- a/libs/hwui/tests/unit/SkiaDisplayListTests.cpp
+++ b/libs/hwui/tests/unit/SkiaDisplayListTests.cpp
@@ -48,8 +48,7 @@
     SkCanvas dummyCanvas;
     RenderNodeDrawable drawable(nullptr, &dummyCanvas);
     skiaDL->mChildNodes.emplace_back(nullptr, &dummyCanvas);
-    int functor1 = WebViewFunctor_create(
-            nullptr, TestUtils::createMockFunctor(RenderMode::OpenGL_ES), RenderMode::OpenGL_ES);
+    int functor1 = TestUtils::createMockFunctor();
     GLFunctorDrawable functorDrawable{functor1, &dummyCanvas};
     WebViewFunctor_release(functor1);
     skiaDL->mChildFunctors.push_back(&functorDrawable);
@@ -101,8 +100,7 @@
 
     SkCanvas dummyCanvas;
 
-    int functor1 = WebViewFunctor_create(
-            nullptr, TestUtils::createMockFunctor(RenderMode::OpenGL_ES), RenderMode::OpenGL_ES);
+    int functor1 = TestUtils::createMockFunctor();
     auto& counts = TestUtils::countsForFunctor(functor1);
     skiaDL.mChildFunctors.push_back(
             skiaDL.allocateDrawable<GLFunctorDrawable>(functor1, &dummyCanvas));
@@ -131,6 +129,33 @@
     EXPECT_EQ(counts.destroyed, 1);
 }
 
+TEST(SkiaDisplayList, recordMutableBitmap) {
+    SkiaRecordingCanvas canvas{nullptr, 100, 100};
+    auto bitmap = Bitmap::allocateHeapBitmap(SkImageInfo::Make(
+            10, 20, SkColorType::kN32_SkColorType, SkAlphaType::kPremul_SkAlphaType));
+    EXPECT_FALSE(bitmap->isImmutable());
+    canvas.drawBitmap(*bitmap, 0, 0, nullptr);
+    auto displayList = canvas.finishRecording();
+    ASSERT_EQ(1, displayList->mMutableImages.size());
+    EXPECT_EQ(10, displayList->mMutableImages[0]->width());
+    EXPECT_EQ(20, displayList->mMutableImages[0]->height());
+}
+
+TEST(SkiaDisplayList, recordMutableBitmapInShader) {
+    SkiaRecordingCanvas canvas{nullptr, 100, 100};
+    auto bitmap = Bitmap::allocateHeapBitmap(SkImageInfo::Make(
+            10, 20, SkColorType::kN32_SkColorType, SkAlphaType::kPremul_SkAlphaType));
+    EXPECT_FALSE(bitmap->isImmutable());
+    SkSamplingOptions sampling(SkFilterMode::kLinear, SkMipmapMode::kNone);
+    Paint paint;
+    paint.setShader(bitmap->makeImage()->makeShader(sampling));
+    canvas.drawPaint(paint);
+    auto displayList = canvas.finishRecording();
+    ASSERT_EQ(1, displayList->mMutableImages.size());
+    EXPECT_EQ(10, displayList->mMutableImages[0]->width());
+    EXPECT_EQ(20, displayList->mMutableImages[0]->height());
+}
+
 class ContextFactory : public IContextFactory {
 public:
     virtual AnimationContext* createAnimationContext(renderthread::TimeLord& clock) override {
@@ -138,7 +163,7 @@
     }
 };
 
-RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaDisplayList, prepareListAndChildren) {
+RENDERTHREAD_TEST(SkiaDisplayList, prepareListAndChildren) {
     auto rootNode = TestUtils::createNode(0, 0, 200, 400, nullptr);
     ContextFactory contextFactory;
     std::unique_ptr<CanvasContext> canvasContext(
@@ -197,7 +222,7 @@
     canvasContext->destroy();
 }
 
-RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaDisplayList, prepareListAndChildren_vdOffscreen) {
+RENDERTHREAD_TEST(SkiaDisplayList, prepareListAndChildren_vdOffscreen) {
     auto rootNode = TestUtils::createNode(0, 0, 200, 400, nullptr);
     ContextFactory contextFactory;
     std::unique_ptr<CanvasContext> canvasContext(
diff --git a/libs/hwui/tests/unit/SkiaPipelineTests.cpp b/libs/hwui/tests/unit/SkiaPipelineTests.cpp
index 4d0595e..3ded540 100644
--- a/libs/hwui/tests/unit/SkiaPipelineTests.cpp
+++ b/libs/hwui/tests/unit/SkiaPipelineTests.cpp
@@ -42,7 +42,7 @@
 using namespace android::uirenderer::renderthread;
 using namespace android::uirenderer::skiapipeline;
 
-RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaPipeline, renderFrame) {
+RENDERTHREAD_TEST(SkiaPipeline, renderFrame) {
     auto redNode = TestUtils::createSkiaNode(
             0, 0, 1, 1, [](RenderProperties& props, SkiaRecordingCanvas& redCanvas) {
                 redCanvas.drawColor(SK_ColorRED, SkBlendMode::kSrcOver);
@@ -54,7 +54,7 @@
     bool opaque = true;
     android::uirenderer::Rect contentDrawBounds(0, 0, 1, 1);
     auto pipeline = std::make_unique<SkiaOpenGLPipeline>(renderThread);
-    auto surface = SkSurface::MakeRasterN32Premul(1, 1);
+    auto surface = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(1, 1));
     surface->getCanvas()->drawColor(SK_ColorBLUE, SkBlendMode::kSrcOver);
     ASSERT_EQ(TestUtils::getColor(surface, 0, 0), SK_ColorBLUE);
     pipeline->renderFrame(layerUpdateQueue, dirty, renderNodes, opaque, contentDrawBounds, surface,
@@ -62,7 +62,7 @@
     ASSERT_EQ(TestUtils::getColor(surface, 0, 0), SK_ColorRED);
 }
 
-RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaPipeline, renderFrameCheckOpaque) {
+RENDERTHREAD_TEST(SkiaPipeline, renderFrameCheckOpaque) {
     auto halfGreenNode = TestUtils::createSkiaNode(
             0, 0, 2, 2, [](RenderProperties& props, SkiaRecordingCanvas& bottomHalfGreenCanvas) {
                 Paint greenPaint;
@@ -76,7 +76,7 @@
     renderNodes.push_back(halfGreenNode);
     android::uirenderer::Rect contentDrawBounds(0, 0, 2, 2);
     auto pipeline = std::make_unique<SkiaOpenGLPipeline>(renderThread);
-    auto surface = SkSurface::MakeRasterN32Premul(2, 2);
+    auto surface = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(2, 2));
     surface->getCanvas()->drawColor(SK_ColorBLUE, SkBlendMode::kSrcOver);
     ASSERT_EQ(TestUtils::getColor(surface, 0, 0), SK_ColorBLUE);
     pipeline->renderFrame(layerUpdateQueue, dirty, renderNodes, true, contentDrawBounds, surface,
@@ -89,7 +89,7 @@
     ASSERT_EQ(TestUtils::getColor(surface, 0, 1), SK_ColorGREEN);
 }
 
-RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaPipeline, renderFrameCheckDirtyRect) {
+RENDERTHREAD_TEST(SkiaPipeline, renderFrameCheckDirtyRect) {
     auto redNode = TestUtils::createSkiaNode(
             0, 0, 2, 2, [](RenderProperties& props, SkiaRecordingCanvas& redCanvas) {
                 redCanvas.drawColor(SK_ColorRED, SkBlendMode::kSrcOver);
@@ -100,7 +100,7 @@
     renderNodes.push_back(redNode);
     android::uirenderer::Rect contentDrawBounds(0, 0, 2, 2);
     auto pipeline = std::make_unique<SkiaOpenGLPipeline>(renderThread);
-    auto surface = SkSurface::MakeRasterN32Premul(2, 2);
+    auto surface = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(2, 2));
     surface->getCanvas()->drawColor(SK_ColorBLUE, SkBlendMode::kSrcOver);
     ASSERT_EQ(TestUtils::getColor(surface, 0, 0), SK_ColorBLUE);
     pipeline->renderFrame(layerUpdateQueue, dirty, renderNodes, true, contentDrawBounds, surface,
@@ -111,12 +111,12 @@
     ASSERT_EQ(TestUtils::getColor(surface, 1, 1), SK_ColorRED);
 }
 
-RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaPipeline, renderLayer) {
+RENDERTHREAD_TEST(SkiaPipeline, renderLayer) {
     auto redNode = TestUtils::createSkiaNode(
             0, 0, 1, 1, [](RenderProperties& props, SkiaRecordingCanvas& redCanvas) {
                 redCanvas.drawColor(SK_ColorRED, SkBlendMode::kSrcOver);
             });
-    auto surfaceLayer1 = SkSurface::MakeRasterN32Premul(1, 1);
+    auto surfaceLayer1 = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(1, 1));
     surfaceLayer1->getCanvas()->drawColor(SK_ColorWHITE, SkBlendMode::kSrcOver);
     ASSERT_EQ(TestUtils::getColor(surfaceLayer1, 0, 0), SK_ColorWHITE);
     redNode->setLayerSurface(surfaceLayer1);
@@ -127,7 +127,7 @@
             0, 0, 2, 2, [](RenderProperties& props, SkiaRecordingCanvas& blueCanvas) {
                 blueCanvas.drawColor(SK_ColorBLUE, SkBlendMode::kSrcOver);
             });
-    auto surfaceLayer2 = SkSurface::MakeRasterN32Premul(2, 2);
+    auto surfaceLayer2 = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(2, 2));
     surfaceLayer2->getCanvas()->drawColor(SK_ColorWHITE, SkBlendMode::kSrcOver);
     ASSERT_EQ(TestUtils::getColor(surfaceLayer2, 0, 0), SK_ColorWHITE);
     blueNode->setLayerSurface(surfaceLayer2);
@@ -154,7 +154,7 @@
     blueNode->setLayerSurface(sk_sp<SkSurface>());
 }
 
-RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaPipeline, renderOverdraw) {
+RENDERTHREAD_TEST(SkiaPipeline, renderOverdraw) {
     ScopedProperty<bool> prop(Properties::debugOverdraw, true);
 
     auto whiteNode = TestUtils::createSkiaNode(
@@ -169,7 +169,7 @@
     // empty contentDrawBounds is avoiding backdrop/content logic, which would lead to less overdraw
     android::uirenderer::Rect contentDrawBounds(0, 0, 0, 0);
     auto pipeline = std::make_unique<SkiaOpenGLPipeline>(renderThread);
-    auto surface = SkSurface::MakeRasterN32Premul(1, 1);
+    auto surface = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(1, 1));
 
     // Initialize the canvas to blue.
     surface->getCanvas()->drawColor(SK_ColorBLUE, SkBlendMode::kSrcOver);
@@ -227,7 +227,7 @@
 };
 }
 
-RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaPipeline, deferRenderNodeScene) {
+RENDERTHREAD_TEST(SkiaPipeline, deferRenderNodeScene) {
     class DeferTestCanvas : public SkCanvas {
     public:
         DeferTestCanvas() : SkCanvas(800, 600) {}
@@ -297,7 +297,7 @@
     EXPECT_EQ(4, surface->canvas()->mDrawCounter);
 }
 
-RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaPipeline, clipped) {
+RENDERTHREAD_TEST(SkiaPipeline, clipped) {
     static const int CANVAS_WIDTH = 200;
     static const int CANVAS_HEIGHT = 200;
     class ClippedTestCanvas : public SkCanvas {
@@ -330,7 +330,7 @@
 }
 
 // Test renderFrame with a dirty clip and a pre-transform matrix.
-RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaPipeline, clipped_rotated) {
+RENDERTHREAD_TEST(SkiaPipeline, clipped_rotated) {
     static const int CANVAS_WIDTH = 200;
     static const int CANVAS_HEIGHT = 100;
     static const SkMatrix rotateMatrix = SkMatrix::MakeAll(0, -1, CANVAS_HEIGHT, 1, 0, 0, 0, 0, 1);
@@ -366,7 +366,7 @@
     EXPECT_EQ(1, surface->canvas()->mDrawCounter);
 }
 
-RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaPipeline, clip_replace) {
+RENDERTHREAD_TEST(SkiaPipeline, clip_replace) {
     static const int CANVAS_WIDTH = 50;
     static const int CANVAS_HEIGHT = 50;
     class ClipReplaceTestCanvas : public SkCanvas {
@@ -396,7 +396,7 @@
     EXPECT_EQ(1, surface->canvas()->mDrawCounter);
 }
 
-RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaPipeline, context_lost) {
+RENDERTHREAD_TEST(SkiaPipeline, context_lost) {
     test::TestContext context;
     auto surface = context.surface();
     auto pipeline = std::make_unique<SkiaOpenGLPipeline>(renderThread);
@@ -410,7 +410,7 @@
     EXPECT_TRUE(pipeline->isSurfaceReady());
 }
 
-RENDERTHREAD_SKIA_PIPELINE_TEST(SkiaPipeline, pictureCallback) {
+RENDERTHREAD_TEST(SkiaPipeline, pictureCallback) {
     // create a pipeline and add a picture callback
     auto pipeline = std::make_unique<SkiaOpenGLPipeline>(renderThread);
     int callbackCount = 0;
@@ -428,7 +428,7 @@
     renderNodes.push_back(redNode);
     bool opaque = true;
     android::uirenderer::Rect contentDrawBounds(0, 0, 1, 1);
-    auto surface = SkSurface::MakeRasterN32Premul(1, 1);
+    auto surface = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(1, 1));
     pipeline->renderFrame(layerUpdateQueue, dirty, renderNodes, opaque, contentDrawBounds, surface,
                           SkMatrix::I());
 
diff --git a/libs/hwui/tests/unit/WebViewFunctorManagerTests.cpp b/libs/hwui/tests/unit/WebViewFunctorManagerTests.cpp
index e1fb8b7..5e8f13d 100644
--- a/libs/hwui/tests/unit/WebViewFunctorManagerTests.cpp
+++ b/libs/hwui/tests/unit/WebViewFunctorManagerTests.cpp
@@ -26,9 +26,15 @@
 using namespace android;
 using namespace android::uirenderer;
 
+#define ASSUME_GLES()                                                      \
+    if (WebViewFunctor_queryPlatformRenderMode() != RenderMode::OpenGL_ES) \
+    GTEST_SKIP() << "Not in GLES, skipping test"
+
 TEST(WebViewFunctor, createDestroyGLES) {
+    ASSUME_GLES();
     int functor = WebViewFunctor_create(
-            nullptr, TestUtils::createMockFunctor(RenderMode::OpenGL_ES), RenderMode::OpenGL_ES);
+            nullptr, TestUtils::createMockFunctorCallbacks(RenderMode::OpenGL_ES),
+            RenderMode::OpenGL_ES);
     ASSERT_NE(-1, functor);
     WebViewFunctor_release(functor);
     TestUtils::runOnRenderThreadUnmanaged([](renderthread::RenderThread&) {
@@ -41,8 +47,10 @@
 }
 
 TEST(WebViewFunctor, createSyncHandleGLES) {
+    ASSUME_GLES();
     int functor = WebViewFunctor_create(
-            nullptr, TestUtils::createMockFunctor(RenderMode::OpenGL_ES), RenderMode::OpenGL_ES);
+            nullptr, TestUtils::createMockFunctorCallbacks(RenderMode::OpenGL_ES),
+            RenderMode::OpenGL_ES);
     ASSERT_NE(-1, functor);
     auto handle = WebViewFunctorManager::instance().handleFor(functor);
     ASSERT_TRUE(handle);
@@ -82,8 +90,10 @@
 }
 
 TEST(WebViewFunctor, createSyncDrawGLES) {
+    ASSUME_GLES();
     int functor = WebViewFunctor_create(
-            nullptr, TestUtils::createMockFunctor(RenderMode::OpenGL_ES), RenderMode::OpenGL_ES);
+            nullptr, TestUtils::createMockFunctorCallbacks(RenderMode::OpenGL_ES),
+            RenderMode::OpenGL_ES);
     ASSERT_NE(-1, functor);
     auto handle = WebViewFunctorManager::instance().handleFor(functor);
     ASSERT_TRUE(handle);
@@ -108,9 +118,11 @@
     EXPECT_EQ(1, counts.destroyed);
 }
 
-TEST(WebViewFunctor, contextDestroyed) {
+TEST(WebViewFunctor, contextDestroyedGLES) {
+    ASSUME_GLES();
     int functor = WebViewFunctor_create(
-            nullptr, TestUtils::createMockFunctor(RenderMode::OpenGL_ES), RenderMode::OpenGL_ES);
+            nullptr, TestUtils::createMockFunctorCallbacks(RenderMode::OpenGL_ES),
+            RenderMode::OpenGL_ES);
     ASSERT_NE(-1, functor);
     auto handle = WebViewFunctorManager::instance().handleFor(functor);
     ASSERT_TRUE(handle);
diff --git a/libs/hwui/tests/unit/main.cpp b/libs/hwui/tests/unit/main.cpp
index 10c874e..76cbc8a 100644
--- a/libs/hwui/tests/unit/main.cpp
+++ b/libs/hwui/tests/unit/main.cpp
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
+#include <getopt.h>
+#include <signal.h>
 
 #include "Properties.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
 #include "hwui/Typeface.h"
 #include "tests/common/LeakChecker.h"
 
-#include <signal.h>
-
 using namespace std;
 using namespace android;
 using namespace android::uirenderer;
@@ -45,6 +45,57 @@
     raise(sig);
 }
 
+// For options that only exist in long-form. Anything in the
+// 0-255 range is reserved for short options (which just use their ASCII value)
+namespace LongOpts {
+enum {
+    Reserved = 255,
+    Renderer,
+};
+}
+
+static const struct option LONG_OPTIONS[] = {
+        {"renderer", required_argument, nullptr, LongOpts::Renderer}, {0, 0, 0, 0}};
+
+static RenderPipelineType parseRenderer(const char* renderer) {
+    // Anything that's not skiavk is skiagl
+    if (!strcmp(renderer, "skiavk")) {
+        return RenderPipelineType::SkiaVulkan;
+    }
+    return RenderPipelineType::SkiaGL;
+}
+
+struct Options {
+    RenderPipelineType renderer = RenderPipelineType::SkiaGL;
+};
+
+Options parseOptions(int argc, char* argv[]) {
+    int c;
+    opterr = 0;
+    Options opts;
+
+    while (true) {
+        /* getopt_long stores the option index here. */
+        int option_index = 0;
+
+        c = getopt_long(argc, argv, "", LONG_OPTIONS, &option_index);
+
+        if (c == -1) break;
+
+        switch (c) {
+            case 0:
+                // Option set a flag, don't need to do anything
+                // (although none of the current LONG_OPTIONS do this...)
+                break;
+
+            case LongOpts::Renderer:
+                opts.renderer = parseRenderer(optarg);
+                break;
+        }
+    }
+    return opts;
+}
+
 class TypefaceEnvironment : public testing::Environment {
 public:
     virtual void SetUp() { Typeface::setRobotoTypefaceForTest(); }
@@ -64,8 +115,9 @@
 
     // Avoid talking to SF
     Properties::isolatedProcess = true;
-    // Default to GLES (Vulkan-aware tests will override this)
-    Properties::overrideRenderPipelineType(RenderPipelineType::SkiaGL);
+
+    auto opts = parseOptions(argc, argv);
+    Properties::overrideRenderPipelineType(opts.renderer);
 
     // Run the tests
     testing::InitGoogleTest(&argc, argv);
diff --git a/location/TEST_MAPPING b/location/TEST_MAPPING
index 214d2f3..f5deb2b 100644
--- a/location/TEST_MAPPING
+++ b/location/TEST_MAPPING
@@ -1,7 +1,13 @@
 {
   "presubmit": [
     {
-      "name": "CtsLocationFineTestCases"
+      "name": "CtsLocationFineTestCases",
+      "options": [
+          {
+             // TODO: Wait for test to deflake - b/293934372
+             "exclude-filter":"android.location.cts.fine.ScanningSettingsTest"
+          }
+      ]
     },
     {
       "name": "CtsLocationCoarseTestCases"
@@ -16,4 +22,4 @@
       }]
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/location/java/android/location/GnssMeasurementRequest.java b/location/java/android/location/GnssMeasurementRequest.java
index 3813e97..3f3ad75 100644
--- a/location/java/android/location/GnssMeasurementRequest.java
+++ b/location/java/android/location/GnssMeasurementRequest.java
@@ -135,8 +135,12 @@
     public String toString() {
         StringBuilder s = new StringBuilder();
         s.append("GnssMeasurementRequest[");
-        s.append("@");
-        TimeUtils.formatDuration(mIntervalMillis, s);
+        if (mIntervalMillis == PASSIVE_INTERVAL) {
+            s.append("passive");
+        } else {
+            s.append("@");
+            TimeUtils.formatDuration(mIntervalMillis, s);
+        }
         if (mFullTracking) {
             s.append(", FullTracking");
         }
diff --git a/location/java/android/location/ILocationManager.aidl b/location/java/android/location/ILocationManager.aidl
index 42b72d4..72761ef 100644
--- a/location/java/android/location/ILocationManager.aidl
+++ b/location/java/android/location/ILocationManager.aidl
@@ -98,12 +98,16 @@
     void addGnssAntennaInfoListener(in IGnssAntennaInfoListener listener, String packageName, @nullable String attributionTag, String listenerId);
     void removeGnssAntennaInfoListener(in IGnssAntennaInfoListener listener);
 
+    @EnforcePermission("INTERACT_ACROSS_USERS")
     void addProviderRequestListener(in IProviderRequestListener listener);
     void removeProviderRequestListener(in IProviderRequestListener listener);
 
     int getGnssBatchSize();
+    @EnforcePermission("LOCATION_HARDWARE")
     void startGnssBatch(long periodNanos, in ILocationListener listener, String packageName, @nullable String attributionTag, String listenerId);
+    @EnforcePermission("LOCATION_HARDWARE")
     void flushGnssBatch();
+    @EnforcePermission("LOCATION_HARDWARE")
     void stopGnssBatch();
 
     boolean hasProvider(String provider);
@@ -111,7 +115,9 @@
     List<String> getProviders(in Criteria criteria, boolean enabledOnly);
     String getBestProvider(in Criteria criteria, boolean enabledOnly);
     ProviderProperties getProviderProperties(String provider);
+    @EnforcePermission("READ_DEVICE_CONFIG")
     boolean isProviderPackage(@nullable String provider, String packageName, @nullable String attributionTag);
+    @EnforcePermission("READ_DEVICE_CONFIG")
     List<String> getProviderPackages(String provider);
 
     @EnforcePermission("LOCATION_HARDWARE")
diff --git a/location/java/android/location/LocationManagerInternal.java b/location/java/android/location/LocationManagerInternal.java
index d59756d..a48cc19 100644
--- a/location/java/android/location/LocationManagerInternal.java
+++ b/location/java/android/location/LocationManagerInternal.java
@@ -87,12 +87,6 @@
     public abstract boolean isProvider(@Nullable String provider, @NonNull CallerIdentity identity);
 
     /**
-     * Should only be used by GNSS code.
-     */
-    // TODO: there is no reason for this to exist as part of any API. move all the logic into gnss
-    public abstract void sendNiResponse(int notifId, int userResponse);
-
-    /**
      * Returns the GNSS provided time.
      *
      * @return LocationTime object that includes the current time, according to the GNSS location
diff --git a/location/java/android/location/altitude/AltitudeConverter.java b/location/java/android/location/altitude/AltitudeConverter.java
index eb73b69..3dc024ef 100644
--- a/location/java/android/location/altitude/AltitudeConverter.java
+++ b/location/java/android/location/altitude/AltitudeConverter.java
@@ -31,6 +31,14 @@
 /**
  * Converts altitudes reported above the World Geodetic System 1984 (WGS84) reference ellipsoid
  * into ones above Mean Sea Level.
+ *
+ * <p>Reference:
+ *
+ * <pre>
+ * Brian Julian and Michael Angermann.
+ * "Resource efficient and accurate altitude conversion to Mean Sea Level."
+ * To appear in 2023 IEEE/ION Position, Location and Navigation Symposium (PLANS).
+ * </pre>
  */
 public final class AltitudeConverter {
 
@@ -81,27 +89,47 @@
         long s2CellId = S2CellIdUtils.fromLatLngDegrees(location.getLatitude(),
                 location.getLongitude());
 
-        // (0,0) cell.
+        // Cell-space properties and coordinates.
+        int sizeIj = 1 << (S2CellIdUtils.MAX_LEVEL - params.mapS2Level);
+        int maxIj = 1 << S2CellIdUtils.MAX_LEVEL;
         long s0 = S2CellIdUtils.getParent(s2CellId, params.mapS2Level);
+        int f0 = S2CellIdUtils.getFace(s2CellId);
+        int i0 = S2CellIdUtils.getI(s2CellId);
+        int j0 = S2CellIdUtils.getJ(s2CellId);
+        int i1 = i0 + sizeIj;
+        int j1 = j0 + sizeIj;
+
+        // Non-boundary region calculation - simplest and most common case.
+        if (i1 < maxIj && j1 < maxIj) {
+            return new long[]{
+                    s0,
+                    S2CellIdUtils.getParent(S2CellIdUtils.fromFij(f0, i1, j0), params.mapS2Level),
+                    S2CellIdUtils.getParent(S2CellIdUtils.fromFij(f0, i0, j1), params.mapS2Level),
+                    S2CellIdUtils.getParent(S2CellIdUtils.fromFij(f0, i1, j1), params.mapS2Level)
+            };
+        }
+
+        // Boundary region calculation.
         long[] edgeNeighbors = new long[4];
         S2CellIdUtils.getEdgeNeighbors(s0, edgeNeighbors);
-
-        // (1,0) cell.
-        int i1 = S2CellIdUtils.getI(s2CellId) > S2CellIdUtils.getI(s0) ? -1 : 1;
-        long s1 = edgeNeighbors[i1 + 2];
-
-        // (0,1) cell.
-        int i2 = S2CellIdUtils.getJ(s2CellId) > S2CellIdUtils.getJ(s0) ? 1 : -1;
-        long s2 = edgeNeighbors[i2 + 1];
-
-        // (1,1) cell.
-        S2CellIdUtils.getEdgeNeighbors(s1, edgeNeighbors);
-        long s3 = 0;
-        for (int i = 0; i < edgeNeighbors.length; i++) {
-            if (edgeNeighbors[i] == s0) {
-                int i3 = (i + i1 * i2 + edgeNeighbors.length) % edgeNeighbors.length;
-                s3 = edgeNeighbors[i3] == s2 ? 0 : edgeNeighbors[i3];
-                break;
+        long s1 = edgeNeighbors[1];
+        long s2 = edgeNeighbors[2];
+        long s3;
+        if (f0 % 2 == 1) {
+            S2CellIdUtils.getEdgeNeighbors(s1, edgeNeighbors);
+            if (i1 < maxIj) {
+                s3 = edgeNeighbors[2];
+            } else {
+                s3 = s1;
+                s1 = edgeNeighbors[1];
+            }
+        } else {
+            S2CellIdUtils.getEdgeNeighbors(s2, edgeNeighbors);
+            if (j1 < maxIj) {
+                s3 = edgeNeighbors[1];
+            } else {
+                s3 = s2;
+                s2 = edgeNeighbors[3];
             }
         }
 
@@ -118,13 +146,12 @@
      * Mean Sea Level altitude accuracy is added if the {@code location} has a valid vertical
      * accuracy; otherwise, does not add a corresponding accuracy.
      */
-    private static void addMslAltitude(@NonNull MapParamsProto params, @NonNull long[] s2CellIds,
+    private static void addMslAltitude(@NonNull MapParamsProto params,
             @NonNull double[] geoidHeightsMeters, @NonNull Location location) {
-        long s0 = s2CellIds[0];
         double h0 = geoidHeightsMeters[0];
         double h1 = geoidHeightsMeters[1];
         double h2 = geoidHeightsMeters[2];
-        double h3 = s2CellIds[3] == 0 ? h0 : geoidHeightsMeters[3];
+        double h3 = geoidHeightsMeters[3];
 
         // Bilinear interpolation on an S2 square of size equal to that of a map cell. wi and wj
         // are the normalized [0,1] weights in the i and j directions, respectively, allowing us to
@@ -132,8 +159,8 @@
         long s2CellId = S2CellIdUtils.fromLatLngDegrees(location.getLatitude(),
                 location.getLongitude());
         double sizeIj = 1 << (S2CellIdUtils.MAX_LEVEL - params.mapS2Level);
-        double wi = Math.abs(S2CellIdUtils.getI(s2CellId) - S2CellIdUtils.getI(s0)) / sizeIj;
-        double wj = Math.abs(S2CellIdUtils.getJ(s2CellId) - S2CellIdUtils.getJ(s0)) / sizeIj;
+        double wi = (S2CellIdUtils.getI(s2CellId) % sizeIj) / sizeIj;
+        double wj = (S2CellIdUtils.getJ(s2CellId) % sizeIj) / sizeIj;
         double offsetMeters = h0 + (h1 - h0) * wi + (h2 - h0) * wj + (h3 - h1 - h2 + h0) * wi * wj;
 
         location.setMslAltitudeMeters(location.getAltitude() - offsetMeters);
@@ -167,7 +194,7 @@
         MapParamsProto params = GeoidHeightMap.getParams(context);
         long[] s2CellIds = findMapSquare(params, location);
         double[] geoidHeightsMeters = mGeoidHeightMap.readGeoidHeights(params, context, s2CellIds);
-        addMslAltitude(params, s2CellIds, geoidHeightsMeters, location);
+        addMslAltitude(params, geoidHeightsMeters, location);
     }
 
     /**
@@ -190,7 +217,7 @@
             return false;
         }
 
-        addMslAltitude(params, s2CellIds, geoidHeightsMeters, location);
+        addMslAltitude(params, geoidHeightsMeters, location);
         return true;
     }
 }
diff --git a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
index fba4249..ee2510f 100644
--- a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
+++ b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
@@ -18,28 +18,14 @@
 
 import android.Manifest;
 import android.annotation.RequiresPermission;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.compat.annotation.UnsupportedAppUsage;
-import android.content.BroadcastReceiver;
 import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.location.INetInitiatedListener;
 import android.location.LocationManager;
-import android.os.RemoteException;
 import android.os.SystemClock;
-import android.os.UserHandle;
 import android.telephony.TelephonyCallback;
 import android.telephony.TelephonyManager;
 import android.telephony.emergency.EmergencyNumber;
 import android.util.Log;
 
-import com.android.internal.R;
-import com.android.internal.notification.SystemNotificationChannels;
-import com.android.internal.telephony.GsmAlphabet;
-
-import java.io.UnsupportedEncodingException;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -53,95 +39,20 @@
 
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
-    // string constants for defining data fields in NI Intent
-    public static final String NI_INTENT_KEY_NOTIF_ID = "notif_id";
-    public static final String NI_INTENT_KEY_TITLE = "title";
-    public static final String NI_INTENT_KEY_MESSAGE = "message";
-    public static final String NI_INTENT_KEY_TIMEOUT = "timeout";
-    public static final String NI_INTENT_KEY_DEFAULT_RESPONSE = "default_resp";
-
-    // the extra command to send NI response to GnssLocationProvider
-    public static final String NI_RESPONSE_EXTRA_CMD = "send_ni_response";
-
-    // the extra command parameter names in the Bundle
-    public static final String NI_EXTRA_CMD_NOTIF_ID = "notif_id";
-    public static final String NI_EXTRA_CMD_RESPONSE = "response";
-
-    // these need to match GpsNiType constants in gps_ni.h
-    public static final int GPS_NI_TYPE_VOICE = 1;
-    public static final int GPS_NI_TYPE_UMTS_SUPL = 2;
-    public static final int GPS_NI_TYPE_UMTS_CTRL_PLANE = 3;
-    public static final int GPS_NI_TYPE_EMERGENCY_SUPL = 4;
-
-    // these need to match GpsUserResponseType constants in gps_ni.h
-    public static final int GPS_NI_RESPONSE_ACCEPT = 1;
-    public static final int GPS_NI_RESPONSE_DENY = 2;
-    public static final int GPS_NI_RESPONSE_NORESP = 3;
-    public static final int GPS_NI_RESPONSE_IGNORE = 4;
-
-    // these need to match GpsNiNotifyFlags constants in gps_ni.h
-    public static final int GPS_NI_NEED_NOTIFY = 0x0001;
-    public static final int GPS_NI_NEED_VERIFY = 0x0002;
-    public static final int GPS_NI_PRIVACY_OVERRIDE = 0x0004;
-
-    // these need to match GpsNiEncodingType in gps_ni.h
-    public static final int GPS_ENC_NONE = 0;
-    public static final int GPS_ENC_SUPL_GSM_DEFAULT = 1;
-    public static final int GPS_ENC_SUPL_UTF8 = 2;
-    public static final int GPS_ENC_SUPL_UCS2 = 3;
-    public static final int GPS_ENC_UNKNOWN = -1;
-
     private final Context mContext;
     private final TelephonyManager mTelephonyManager;
 
     // parent gps location provider
     private final LocationManager mLocationManager;
 
-    // configuration of notificaiton behavior
-    private boolean mPlaySounds = false;
-    private boolean mPopupImmediately = true;
-
-    // read the SUPL_ES form gps.conf
-    private volatile boolean mIsSuplEsEnabled;
-
     // Set to true if the phone is having emergency call.
     private volatile boolean mIsInEmergencyCall;
 
-    // If Location function is enabled.
-    private volatile boolean mIsLocationEnabled = false;
-
-    private final INetInitiatedListener mNetInitiatedListener;
-
-    // Set to true if string from HAL is encoded as Hex, e.g., "3F0039"
-    @UnsupportedAppUsage
-    static private boolean mIsHexInput = true;
 
     // End time of emergency call, and extension, if set
     private volatile long mCallEndElapsedRealtimeMillis = 0;
     private volatile long mEmergencyExtensionMillis = 0;
 
-    public static class GpsNiNotification
-    {
-        @android.compat.annotation.UnsupportedAppUsage
-        public GpsNiNotification() {
-        }
-        public int notificationId;
-        public int niType;
-        public boolean needNotify;
-        public boolean needVerify;
-        public boolean privacyOverride;
-        public int timeout;
-        public int defaultResponse;
-        @UnsupportedAppUsage
-        public String requestorId;
-        @UnsupportedAppUsage
-        public String text;
-        @UnsupportedAppUsage
-        public int requestorIdEncoding;
-        @UnsupportedAppUsage
-        public int textEncoding;
-    }
-
     /** Callbacks for Emergency call events. */
     public interface EmergencyCallCallback {
         /** Callback invoked when an emergency call starts */
@@ -182,72 +93,20 @@
     // reference here.
     private final EmergencyCallListener mEmergencyCallListener = new EmergencyCallListener();
 
-    /**
-     * The notification that is shown when a network-initiated notification
-     * (and verification) event is received.
-     * <p>
-     * This is lazily created, so use {@link #setNINotification()}.
-     */
-    private Notification.Builder mNiNotificationBuilder;
-
     private final EmergencyCallCallback mEmergencyCallCallback;
 
     public GpsNetInitiatedHandler(Context context,
-                                  INetInitiatedListener netInitiatedListener,
                                   EmergencyCallCallback emergencyCallCallback,
                                   boolean isSuplEsEnabled) {
         mContext = context;
-
-        if (netInitiatedListener == null) {
-            throw new IllegalArgumentException("netInitiatedListener is null");
-        } else {
-            mNetInitiatedListener = netInitiatedListener;
-        }
         mEmergencyCallCallback = emergencyCallCallback;
 
-        setSuplEsEnabled(isSuplEsEnabled);
         mLocationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
-        updateLocationMode();
         mTelephonyManager =
             (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
         mTelephonyManager.registerTelephonyCallback(mContext.getMainExecutor(),
                 mEmergencyCallListener);
 
-        BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
-
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                String action = intent.getAction();
-                if (action.equals(LocationManager.MODE_CHANGED_ACTION)) {
-                    updateLocationMode();
-                    if (DEBUG) Log.d(TAG, "location enabled :" + getLocationEnabled());
-                }
-            }
-        };
-        mContext.registerReceiver(broadcastReceiver,
-                new IntentFilter(LocationManager.MODE_CHANGED_ACTION));
-    }
-
-    public void setSuplEsEnabled(boolean isEnabled) {
-        mIsSuplEsEnabled = isEnabled;
-    }
-
-    public boolean getSuplEsEnabled() {
-        return mIsSuplEsEnabled;
-    }
-
-    /**
-     * Updates Location enabler based on location setting.
-     */
-    public void updateLocationMode() {
-        mIsLocationEnabled = mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
-    }
-
-    /**
-     * Checks if user agreed to use location.
-     */
-    public boolean getLocationEnabled() {
-        return mIsLocationEnabled;
     }
 
     /**
@@ -289,346 +148,4 @@
     public void setEmergencyExtensionSeconds(int emergencyExtensionSeconds) {
         mEmergencyExtensionMillis = TimeUnit.SECONDS.toMillis(emergencyExtensionSeconds);
     }
-
-    // Handles NI events from HAL
-    @UnsupportedAppUsage
-    public void handleNiNotification(GpsNiNotification notif) {
-        if (DEBUG) Log.d(TAG, "in handleNiNotification () :"
-                        + " notificationId: " + notif.notificationId
-                        + " requestorId: " + notif.requestorId
-                        + " text: " + notif.text
-                        + " mIsSuplEsEnabled" + getSuplEsEnabled()
-                        + " mIsLocationEnabled" + getLocationEnabled());
-
-        if (getSuplEsEnabled()) {
-            handleNiInEs(notif);
-        } else {
-            handleNi(notif);
-        }
-
-        //////////////////////////////////////////////////////////////////////////
-        //   A note about timeout
-        //   According to the protocol, in the need_notify and need_verify case,
-        //   a default response should be sent when time out.
-        //
-        //   In some GPS hardware, the GPS driver (under HAL) can handle the timeout case
-        //   and this class GpsNetInitiatedHandler does not need to do anything.
-        //
-        //   However, the UI should at least close the dialog when timeout. Further,
-        //   for more general handling, timeout response should be added to the Handler here.
-        //
-    }
-
-    // handle NI form HAL when SUPL_ES is disabled.
-    private void handleNi(GpsNiNotification notif) {
-        if (DEBUG) Log.d(TAG, "in handleNi () :"
-                        + " needNotify: " + notif.needNotify
-                        + " needVerify: " + notif.needVerify
-                        + " privacyOverride: " + notif.privacyOverride
-                        + " mPopupImmediately: " + mPopupImmediately
-                        + " mInEmergency: " + getInEmergency());
-
-        if (!getLocationEnabled() && !getInEmergency()) {
-            // Location is currently disabled, ignore all NI requests.
-            try {
-                mNetInitiatedListener.sendNiResponse(notif.notificationId,
-                                                     GPS_NI_RESPONSE_IGNORE);
-            } catch (RemoteException e) {
-                Log.e(TAG, "RemoteException in sendNiResponse");
-            }
-        }
-        if (notif.needNotify) {
-        // If NI does not need verify or the dialog is not requested
-        // to pop up immediately, the dialog box will not pop up.
-            if (notif.needVerify && mPopupImmediately) {
-                // Popup the dialog box now
-                openNiDialog(notif);
-            } else {
-                // Show the notification
-                setNiNotification(notif);
-            }
-        }
-        // ACCEPT cases: 1. Notify, no verify; 2. no notify, no verify;
-        // 3. privacy override.
-        if (!notif.needVerify || notif.privacyOverride) {
-            try {
-                mNetInitiatedListener.sendNiResponse(notif.notificationId,
-                                                     GPS_NI_RESPONSE_ACCEPT);
-            } catch (RemoteException e) {
-                Log.e(TAG, "RemoteException in sendNiResponse");
-            }
-        }
-    }
-
-    // handle NI from HAL when the SUPL_ES is enabled
-    private void handleNiInEs(GpsNiNotification notif) {
-
-        if (DEBUG) Log.d(TAG, "in handleNiInEs () :"
-                    + " niType: " + notif.niType
-                    + " notificationId: " + notif.notificationId);
-
-        // UE is in emergency mode when in emergency call mode or in emergency call back mode
-        /*
-           1. When SUPL ES bit is off and UE is not in emergency mode:
-                  Call handleNi() to do legacy behaviour.
-           2. When SUPL ES bit is on and UE is in emergency mode:
-                  Call handleNi() to do acceptance behaviour.
-           3. When SUPL ES bit is off but UE is in emergency mode:
-                  Ignore the emergency SUPL INIT.
-           4. When SUPL ES bit is on but UE is not in emergency mode:
-                  Ignore the emergency SUPL INIT.
-        */
-        boolean isNiTypeES = (notif.niType == GPS_NI_TYPE_EMERGENCY_SUPL);
-        if (isNiTypeES != getInEmergency()) {
-            try {
-                mNetInitiatedListener.sendNiResponse(notif.notificationId,
-                                                     GPS_NI_RESPONSE_IGNORE);
-            } catch (RemoteException e) {
-                Log.e(TAG, "RemoteException in sendNiResponse");
-            }
-        } else {
-            handleNi(notif);
-        }
-    }
-
-    /**
-     * Posts a notification in the status bar using the contents in {@code notif} object.
-     */
-    private synchronized void setNiNotification(GpsNiNotification notif) {
-        NotificationManager notificationManager = (NotificationManager) mContext
-                .getSystemService(Context.NOTIFICATION_SERVICE);
-        if (notificationManager == null) {
-            return;
-        }
-
-        String title = getNotifTitle(notif, mContext);
-        String message = getNotifMessage(notif, mContext);
-
-        if (DEBUG) Log.d(TAG, "setNiNotification, notifyId: " + notif.notificationId +
-                ", title: " + title +
-                ", message: " + message);
-
-        // Construct Notification
-        if (mNiNotificationBuilder == null) {
-            mNiNotificationBuilder = new Notification.Builder(mContext,
-                SystemNotificationChannels.NETWORK_ALERTS)
-                    .setSmallIcon(com.android.internal.R.drawable.stat_sys_gps_on)
-                    .setWhen(0)
-                    .setOngoing(true)
-                    .setAutoCancel(true)
-                    .setColor(mContext.getColor(
-                            com.android.internal.R.color.system_notification_accent_color));
-        }
-
-        if (mPlaySounds) {
-            mNiNotificationBuilder.setDefaults(Notification.DEFAULT_SOUND);
-        } else {
-            mNiNotificationBuilder.setDefaults(0);
-        }
-
-        mNiNotificationBuilder.setTicker(getNotifTicker(notif, mContext))
-                .setContentTitle(title)
-                .setContentText(message);
-
-        notificationManager.notifyAsUser(null, notif.notificationId, mNiNotificationBuilder.build(),
-                UserHandle.ALL);
-    }
-
-    // Opens the notification dialog and waits for user input
-    private void openNiDialog(GpsNiNotification notif)
-    {
-        Intent intent = getDlgIntent(notif);
-
-        if (DEBUG) Log.d(TAG, "openNiDialog, notifyId: " + notif.notificationId +
-                ", requestorId: " + notif.requestorId +
-                ", text: " + notif.text);
-
-        mContext.startActivity(intent);
-    }
-
-    // Construct the intent for bringing up the dialog activity, which shows the
-    // notification and takes user input
-    private Intent getDlgIntent(GpsNiNotification notif)
-    {
-        Intent intent = new Intent();
-        String title = getDialogTitle(notif, mContext);
-        String message = getDialogMessage(notif, mContext);
-
-        // directly bring up the NI activity
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
-        intent.setClass(mContext, com.android.internal.app.NetInitiatedActivity.class);
-
-        // put data in the intent
-        intent.putExtra(NI_INTENT_KEY_NOTIF_ID, notif.notificationId);
-        intent.putExtra(NI_INTENT_KEY_TITLE, title);
-        intent.putExtra(NI_INTENT_KEY_MESSAGE, message);
-        intent.putExtra(NI_INTENT_KEY_TIMEOUT, notif.timeout);
-        intent.putExtra(NI_INTENT_KEY_DEFAULT_RESPONSE, notif.defaultResponse);
-
-        if (DEBUG) Log.d(TAG, "generateIntent, title: " + title + ", message: " + message +
-                ", timeout: " + notif.timeout);
-
-        return intent;
-    }
-
-    // Converts a string (or Hex string) to a char array
-    static byte[] stringToByteArray(String original, boolean isHex)
-    {
-        int length = isHex ? original.length() / 2 : original.length();
-        byte[] output = new byte[length];
-        int i;
-
-        if (isHex)
-        {
-            for (i = 0; i < length; i++)
-            {
-                output[i] = (byte) Integer.parseInt(original.substring(i*2, i*2+2), 16);
-            }
-        }
-        else {
-            for (i = 0; i < length; i++)
-            {
-                output[i] = (byte) original.charAt(i);
-            }
-        }
-
-        return output;
-    }
-
-    /**
-     * Unpacks an byte array containing 7-bit packed characters into a String.
-     *
-     * @param input a 7-bit packed char array
-     * @return the unpacked String
-     */
-    static String decodeGSMPackedString(byte[] input)
-    {
-        final char PADDING_CHAR = 0x00;
-        int lengthBytes = input.length;
-        int lengthSeptets = (lengthBytes * 8) / 7;
-        String decoded;
-
-        /* Special case where the last 7 bits in the last byte could hold a valid
-         * 7-bit character or a padding character. Drop the last 7-bit character
-         * if it is a padding character.
-         */
-        if (lengthBytes % 7 == 0) {
-            if (lengthBytes > 0) {
-                if ((input[lengthBytes - 1] >> 1) == PADDING_CHAR) {
-                    lengthSeptets = lengthSeptets - 1;
-                }
-            }
-        }
-
-        decoded = GsmAlphabet.gsm7BitPackedToString(input, 0, lengthSeptets);
-
-        // Return "" if decoding of GSM packed string fails
-        if (null == decoded) {
-            Log.e(TAG, "Decoding of GSM packed string failed");
-            decoded = "";
-        }
-
-        return decoded;
-    }
-
-    static String decodeUTF8String(byte[] input)
-    {
-        String decoded = "";
-        try {
-            decoded = new String(input, "UTF-8");
-        }
-        catch (UnsupportedEncodingException e)
-        {
-            throw new AssertionError();
-        }
-        return decoded;
-    }
-
-    static String decodeUCS2String(byte[] input)
-    {
-        String decoded = "";
-        try {
-            decoded = new String(input, "UTF-16");
-        }
-        catch (UnsupportedEncodingException e)
-        {
-            throw new AssertionError();
-        }
-        return decoded;
-    }
-
-    /** Decode NI string
-     *
-     * @param original   The text string to be decoded
-     * @param isHex      Specifies whether the content of the string has been encoded as a Hex string. Encoding
-     *                   a string as Hex can allow zeros inside the coded text.
-     * @param coding     Specifies the coding scheme of the string, such as GSM, UTF8, UCS2, etc. This coding scheme
-     *                      needs to match those used passed to HAL from the native GPS driver. Decoding is done according
-     *                   to the <code> coding </code>, after a Hex string is decoded. Generally, if the
-     *                   notification strings don't need further decoding, <code> coding </code> encoding can be
-     *                   set to -1, and <code> isHex </code> can be false.
-     * @return the decoded string
-     */
-    @UnsupportedAppUsage
-    static private String decodeString(String original, boolean isHex, int coding)
-    {
-        if (coding == GPS_ENC_NONE || coding == GPS_ENC_UNKNOWN) {
-            return original;
-        }
-
-        byte[] input = stringToByteArray(original, isHex);
-
-        switch (coding) {
-            case GPS_ENC_SUPL_GSM_DEFAULT:
-                return decodeGSMPackedString(input);
-
-            case GPS_ENC_SUPL_UTF8:
-                return decodeUTF8String(input);
-
-            case GPS_ENC_SUPL_UCS2:
-                return decodeUCS2String(input);
-
-            default:
-                Log.e(TAG, "Unknown encoding " + coding + " for NI text " + original);
-                return original;
-        }
-    }
-
-    // change this to configure notification display
-    static private String getNotifTicker(GpsNiNotification notif, Context context)
-    {
-        String ticker = String.format(context.getString(R.string.gpsNotifTicker),
-                decodeString(notif.requestorId, mIsHexInput, notif.requestorIdEncoding),
-                decodeString(notif.text, mIsHexInput, notif.textEncoding));
-        return ticker;
-    }
-
-    // change this to configure notification display
-    static private String getNotifTitle(GpsNiNotification notif, Context context)
-    {
-        String title = String.format(context.getString(R.string.gpsNotifTitle));
-        return title;
-    }
-
-    // change this to configure notification display
-    static private String getNotifMessage(GpsNiNotification notif, Context context)
-    {
-        String message = String.format(context.getString(R.string.gpsNotifMessage),
-                decodeString(notif.requestorId, mIsHexInput, notif.requestorIdEncoding),
-                decodeString(notif.text, mIsHexInput, notif.textEncoding));
-        return message;
-    }
-
-    // change this to configure dialog display (for verification)
-    static public String getDialogTitle(GpsNiNotification notif, Context context)
-    {
-        return getNotifTitle(notif, context);
-    }
-
-    // change this to configure dialog display (for verification)
-    static private String getDialogMessage(GpsNiNotification notif, Context context)
-    {
-        return getNotifMessage(notif, context);
-    }
-
 }
diff --git a/location/java/com/android/internal/location/altitude/GeoidHeightMap.java b/location/java/com/android/internal/location/altitude/GeoidHeightMap.java
index 73b6ab5..8067050 100644
--- a/location/java/com/android/internal/location/altitude/GeoidHeightMap.java
+++ b/location/java/com/android/internal/location/altitude/GeoidHeightMap.java
@@ -99,8 +99,8 @@
 
     /**
      * Adds to {@code values} values in the unit interval [0, 1] for the map cells identified by
-     * {@code s2CellIds}. Returns true if values are present for all non-zero IDs; otherwise,
-     * returns false and adds NaNs for absent values.
+     * {@code s2CellIds}. Returns true if values are present for all IDs; otherwise, returns false
+     * and adds NaNs for absent values.
      */
     private static boolean getUnitIntervalValues(@NonNull MapParamsProto params,
             @NonNull TileFunction tileFunction,
@@ -109,10 +109,8 @@
 
         S2TileProto[] tiles = new S2TileProto[len];
         for (int i = 0; i < len; i++) {
-            if (s2CellIds[i] != 0) {
-                long cacheKey = getCacheKey(params, s2CellIds[i]);
-                tiles[i] = tileFunction.getTile(cacheKey);
-            }
+            long cacheKey = getCacheKey(params, s2CellIds[i]);
+            tiles[i] = tileFunction.getTile(cacheKey);
             values[i] = Double.NaN;
         }
 
@@ -128,9 +126,6 @@
 
         boolean allFound = true;
         for (int i = 0; i < len; i++) {
-            if (s2CellIds[i] == 0) {
-                continue;
-            }
             if (Double.isNaN(values[i])) {
                 allFound = false;
             } else {
@@ -195,7 +190,7 @@
         }
 
         for (int i = tileIndex; i < tiles.length; i++) {
-            if (s2CellIds[i] == 0 || tiles[i] != tiles[tileIndex]) {
+            if (tiles[i] != tiles[tileIndex]) {
                 continue;
             }
 
@@ -226,15 +221,14 @@
     private static void validate(@NonNull MapParamsProto params, @NonNull long[] s2CellIds) {
         Preconditions.checkArgument(s2CellIds.length == 4);
         for (long s2CellId : s2CellIds) {
-            Preconditions.checkArgument(
-                    s2CellId == 0 || S2CellIdUtils.getLevel(s2CellId) == params.mapS2Level);
+            Preconditions.checkArgument(S2CellIdUtils.getLevel(s2CellId) == params.mapS2Level);
         }
     }
 
     /**
      * Returns the geoid heights in meters associated with the map cells identified by
-     * {@code s2CellIds}. Throws an {@link IOException} if a geoid height cannot be calculated for a
-     * non-zero ID.
+     * {@code s2CellIds}. Throws an {@link IOException} if a geoid height cannot be calculated for
+     * an ID.
      */
     @NonNull
     public double[] readGeoidHeights(@NonNull MapParamsProto params, @NonNull Context context,
@@ -254,8 +248,8 @@
 
     /**
      * Same as {@link #readGeoidHeights(MapParamsProto, Context, long[])} except that data will not
-     * be loaded from raw assets. Returns the heights if present for all non-zero IDs; otherwise,
-     * returns null.
+     * be loaded from raw assets. Returns the heights if present for all IDs; otherwise, returns
+     * null.
      */
     @Nullable
     public double[] readGeoidHeights(@NonNull MapParamsProto params, @NonNull long[] s2CellIds) {
@@ -269,8 +263,8 @@
 
     /**
      * Adds to {@code heightsMeters} the geoid heights in meters associated with the map cells
-     * identified by {@code s2CellIds}. Returns true if heights are present for all non-zero IDs;
-     * otherwise, returns false and adds NaNs for absent heights.
+     * identified by {@code s2CellIds}. Returns true if heights are present for all IDs; otherwise,
+     * returns false and adds NaNs for absent heights.
      */
     private boolean getGeoidHeights(@NonNull MapParamsProto params,
             @NonNull TileFunction tileFunction, @NonNull long[] s2CellIds,
@@ -292,9 +286,6 @@
         // Enable batch loading by finding all cache keys upfront.
         long[] cacheKeys = new long[len];
         for (int i = 0; i < len; i++) {
-            if (s2CellIds[i] == 0) {
-                continue;
-            }
             cacheKeys[i] = getCacheKey(params, s2CellIds[i]);
         }
 
@@ -302,7 +293,7 @@
         S2TileProto[] loadedTiles = new S2TileProto[len];
         String[] diskTokens = new String[len];
         for (int i = 0; i < len; i++) {
-            if (s2CellIds[i] == 0 || diskTokens[i] != null) {
+            if (diskTokens[i] != null) {
                 continue;
             }
             loadedTiles[i] = mCacheTiles.get(cacheKeys[i]);
@@ -319,7 +310,7 @@
 
         // Attempt to load tiles from disk.
         for (int i = 0; i < len; i++) {
-            if (s2CellIds[i] == 0 || loadedTiles[i] != null) {
+            if (loadedTiles[i] != null) {
                 continue;
             }
 
diff --git a/location/java/com/android/internal/location/altitude/S2CellIdUtils.java b/location/java/com/android/internal/location/altitude/S2CellIdUtils.java
index 5f11387..08bcda4 100644
--- a/location/java/com/android/internal/location/altitude/S2CellIdUtils.java
+++ b/location/java/com/android/internal/location/altitude/S2CellIdUtils.java
@@ -70,6 +70,34 @@
         return fromLatLngRadians(Math.toRadians(latDegrees), Math.toRadians(lngDegrees));
     }
 
+    /** Returns the leaf S2 cell ID of the specified (face, i, j) coordinate. */
+    public static long fromFij(int face, int i, int j) {
+        int bits = (face & SWAP_MASK);
+        // Update most significant bits.
+        long msb = ((long) face) << (POS_BITS - 33);
+        for (int k = 7; k >= 4; --k) {
+            bits = lookupBits(i, j, k, bits);
+            msb = updateBits(msb, k, bits);
+            bits = maskBits(bits);
+        }
+        // Update least significant bits.
+        long lsb = 0;
+        for (int k = 3; k >= 0; --k) {
+            bits = lookupBits(i, j, k, bits);
+            lsb = updateBits(lsb, k, bits);
+            bits = maskBits(bits);
+        }
+        return (((msb << 32) + lsb) << 1) + 1;
+    }
+
+    /**
+     * Returns the face of the specified S2 cell. The returned face is in [0, 5] for valid S2 cell
+     * IDs. Behavior is undefined for invalid S2 cell IDs.
+     */
+    public static int getFace(long s2CellId) {
+        return (int) (s2CellId >>> POS_BITS);
+    }
+
     /**
      * Returns the ID of the parent of the specified S2 cell at the specified parent level.
      * Behavior is undefined for invalid S2 cell IDs or parent levels not in
@@ -219,26 +247,6 @@
         return fromFij(face, i, j);
     }
 
-    /** Returns the leaf S2 cell ID of the specified (face, i, j) coordinate. */
-    private static long fromFij(int face, int i, int j) {
-        int bits = (face & SWAP_MASK);
-        // Update most significant bits.
-        long msb = ((long) face) << (POS_BITS - 33);
-        for (int k = 7; k >= 4; --k) {
-            bits = lookupBits(i, j, k, bits);
-            msb = updateBits(msb, k, bits);
-            bits = maskBits(bits);
-        }
-        // Update least significant bits.
-        long lsb = 0;
-        for (int k = 3; k >= 0; --k) {
-            bits = lookupBits(i, j, k, bits);
-            lsb = updateBits(lsb, k, bits);
-            bits = maskBits(bits);
-        }
-        return (((msb << 32) + lsb) << 1) + 1;
-    }
-
     private static long fromFijWrap(int face, int i, int j) {
         double u = iToU(i);
         double v = jToV(j);
@@ -314,10 +322,6 @@
         return bits & (SWAP_MASK | INVERT_MASK);
     }
 
-    private static int getFace(long s2CellId) {
-        return (int) (s2CellId >>> POS_BITS);
-    }
-
     private static boolean isLeaf(long s2CellId) {
         return ((int) s2CellId & LEAF_MASK) != 0;
     }
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index 3123ee6..3f013de 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -1342,6 +1342,11 @@
     }
 
     /** @hide */
+    public static boolean isRemoteSubmixDevice(int deviceType) {
+        return deviceType == DEVICE_IN_REMOTE_SUBMIX || deviceType == DEVICE_OUT_REMOTE_SUBMIX;
+    }
+
+    /** @hide */
     public static final String LEGACY_REMOTE_SUBMIX_ADDRESS = "0";
 
     // device states, must match AudioSystem::device_connection_state
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index 180c7fd..b2466e9 100644
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -221,6 +221,7 @@
 
     boolean isSurroundFormatEnabled(int audioFormat);
 
+    @EnforcePermission("WRITE_SETTINGS")
     boolean setEncodedSurroundMode(int mode);
 
     int getEncodedSurroundMode(int targetSdkVersion);
@@ -260,6 +261,7 @@
 
     void forceVolumeControlStream(int streamType, IBinder cb);
 
+    @EnforcePermission("REMOTE_AUDIO_PLAYBACK")
     void setRingtonePlayer(IRingtonePlayer player);
     IRingtonePlayer getRingtonePlayer();
     int getUiSoundsStreamType();
@@ -370,6 +372,7 @@
 
     oneway void playerHasOpPlayAudio(in int piid, in boolean hasOpPlayAudio);
 
+    @EnforcePermission("BLUETOOTH_STACK")
     void handleBluetoothActiveDeviceChanged(in BluetoothDevice newDevice,
             in BluetoothDevice previousDevice, in BluetoothProfileConnectionInfo info);
 
diff --git a/media/java/android/media/IRingtonePlayer.aidl b/media/java/android/media/IRingtonePlayer.aidl
index 5a7ff7f..73f15f2 100644
--- a/media/java/android/media/IRingtonePlayer.aidl
+++ b/media/java/android/media/IRingtonePlayer.aidl
@@ -21,6 +21,7 @@
 import android.net.Uri;
 import android.os.ParcelFileDescriptor;
 import android.os.UserHandle;
+import android.os.VibrationEffect;
 
 /**
  * @hide
@@ -29,12 +30,23 @@
     /** Used for Ringtone.java playback */
     @UnsupportedAppUsage
     oneway void play(IBinder token, in Uri uri, in AudioAttributes aa, float volume, boolean looping);
-    oneway void playWithVolumeShaping(IBinder token, in Uri uri, in AudioAttributes aa,
-        float volume, boolean looping, in @nullable VolumeShaper.Configuration volumeShaperConfig);
     oneway void stop(IBinder token);
     boolean isPlaying(IBinder token);
+
+    // RingtoneV1
+    oneway void playWithVolumeShaping(IBinder token, in Uri uri, in AudioAttributes aa,
+            float volume, boolean looping, in @nullable VolumeShaper.Configuration volumeShaperConfig);
     oneway void setPlaybackProperties(IBinder token, float volume, boolean looping,
-        boolean hapticGeneratorEnabled);
+            boolean hapticGeneratorEnabled);
+
+    // RingtoneV2
+    oneway void playRemoteRingtone(IBinder token, in Uri uri, in AudioAttributes aa,
+        boolean useExactAudioAttributes, int enabledMedia, in @nullable VibrationEffect ve,
+        float volume, boolean looping, boolean hapticGeneratorEnabled,
+        in @nullable VolumeShaper.Configuration volumeShaperConfig);
+    oneway void setLooping(IBinder token, boolean looping);
+    oneway void setVolume(IBinder token, float volume);
+    oneway void setHapticGeneratorEnabled(IBinder token, boolean hapticGeneratorEnabled);
 
     /** Used for Notification sound playback. */
     oneway void playAsync(in Uri uri, in UserHandle user, boolean looping, in AudioAttributes aa);
diff --git a/media/java/android/media/LocalRingtonePlayer.java b/media/java/android/media/LocalRingtonePlayer.java
new file mode 100644
index 0000000..fe7cc3e
--- /dev/null
+++ b/media/java/android/media/LocalRingtonePlayer.java
@@ -0,0 +1,408 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Context;
+import android.content.res.AssetFileDescriptor;
+import android.media.audiofx.HapticGenerator;
+import android.net.Uri;
+import android.os.Trace;
+import android.os.VibrationAttributes;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.util.Log;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Objects;
+
+/**
+ * Plays a ringtone on the local process.
+ * @hide
+ */
+public class LocalRingtonePlayer
+        implements RingtoneV2.RingtonePlayer, MediaPlayer.OnCompletionListener {
+    private static final String TAG = "LocalRingtonePlayer";
+
+    // keep references on active Ringtones until stopped or completion listener called.
+    private static final ArrayList<LocalRingtonePlayer> sActiveMediaPlayers = new ArrayList<>();
+
+    private final MediaPlayer mMediaPlayer;
+    private final AudioAttributes mAudioAttributes;
+    private final RingtoneV2.RingtonePlayer mVibrationPlayer;
+    private final Ringtone.Injectables mInjectables;
+    private final AudioManager mAudioManager;
+    private final VolumeShaper mVolumeShaper;
+    private HapticGenerator mHapticGenerator;
+
+    private LocalRingtonePlayer(@NonNull MediaPlayer mediaPlayer,
+            @NonNull AudioAttributes audioAttributes, @NonNull Ringtone.Injectables injectables,
+            @NonNull AudioManager audioManager, @Nullable HapticGenerator hapticGenerator,
+            @Nullable VolumeShaper volumeShaper,
+            @Nullable RingtoneV2.RingtonePlayer vibrationPlayer) {
+        Objects.requireNonNull(mediaPlayer);
+        Objects.requireNonNull(audioAttributes);
+        Objects.requireNonNull(injectables);
+        Objects.requireNonNull(audioManager);
+        mMediaPlayer = mediaPlayer;
+        mAudioAttributes = audioAttributes;
+        mInjectables = injectables;
+        mAudioManager = audioManager;
+        mVolumeShaper = volumeShaper;
+        mVibrationPlayer = vibrationPlayer;
+        mHapticGenerator = hapticGenerator;
+    }
+
+    /**
+     * Creates a {@link LocalRingtonePlayer} for a Uri, returning null if the Uri can't be
+     * loaded in the local player.
+     */
+    @Nullable
+    static RingtoneV2.RingtonePlayer create(@NonNull Context context,
+            @NonNull AudioManager audioManager, @NonNull Vibrator vibrator,
+            @NonNull Uri soundUri,
+            @NonNull AudioAttributes audioAttributes,
+            boolean isVibrationOnly,
+            @Nullable VibrationEffect vibrationEffect,
+            @NonNull Ringtone.Injectables injectables,
+            @Nullable VolumeShaper.Configuration volumeShaperConfig,
+            @Nullable AudioDeviceInfo preferredDevice, boolean initialHapticGeneratorEnabled,
+            boolean initialLooping, float initialVolume) {
+        Objects.requireNonNull(context);
+        Objects.requireNonNull(soundUri);
+        Objects.requireNonNull(audioAttributes);
+        Trace.beginSection("createLocalMediaPlayer");
+        MediaPlayer mediaPlayer = injectables.newMediaPlayer();
+        HapticGenerator hapticGenerator = null;
+        try {
+            mediaPlayer.setDataSource(context, soundUri);
+            mediaPlayer.setAudioAttributes(audioAttributes);
+            mediaPlayer.setPreferredDevice(preferredDevice);
+            mediaPlayer.setLooping(initialLooping);
+            mediaPlayer.setVolume(isVibrationOnly ? 0 : initialVolume);
+            if (initialHapticGeneratorEnabled) {
+                hapticGenerator = injectables.createHapticGenerator(mediaPlayer);
+                if (hapticGenerator != null) {
+                    // In practise, this should always be non-null because the initial value is
+                    // not true unless it's available.
+                    hapticGenerator.setEnabled(true);
+                    vibrationEffect = null;  // Don't play the VibrationEffect.
+                }
+            }
+            VolumeShaper volumeShaper = null;
+            if (volumeShaperConfig != null) {
+                volumeShaper = mediaPlayer.createVolumeShaper(volumeShaperConfig);
+            }
+            mediaPlayer.prepare();
+            if (vibrationEffect != null && !audioAttributes.areHapticChannelsMuted()) {
+                if (injectables.hasHapticChannels(mediaPlayer)) {
+                    // Don't play the Vibration effect if the URI has haptic channels.
+                    vibrationEffect = null;
+                }
+            }
+            VibrationEffectPlayer vibrationEffectPlayer = (vibrationEffect == null) ? null :
+                    new VibrationEffectPlayer(
+                            vibrationEffect, audioAttributes, vibrator, initialLooping);
+            if (isVibrationOnly && vibrationEffectPlayer != null) {
+                // Abandon the media player now that it's confirmed to not have haptic channels.
+                mediaPlayer.release();
+                return vibrationEffectPlayer;
+            }
+            return new LocalRingtonePlayer(mediaPlayer, audioAttributes, injectables, audioManager,
+                    hapticGenerator, volumeShaper, vibrationEffectPlayer);
+        } catch (SecurityException | IOException e) {
+            if (hapticGenerator != null) {
+                hapticGenerator.release();
+            }
+            // volume shaper closes with media player
+            mediaPlayer.release();
+            return null;
+        } finally {
+            Trace.endSection();
+        }
+    }
+
+    /**
+     * Creates a {@link LocalRingtonePlayer} for an externally referenced file descriptor. This is
+     * intended for loading a fallback from an internal resource, rather than via a Uri.
+     */
+    @Nullable
+    static LocalRingtonePlayer createForFallback(
+            @NonNull AudioManager audioManager, @NonNull Vibrator vibrator,
+            @NonNull AssetFileDescriptor afd,
+            @NonNull AudioAttributes audioAttributes,
+            @Nullable VibrationEffect vibrationEffect,
+            @NonNull Ringtone.Injectables injectables,
+            @Nullable VolumeShaper.Configuration volumeShaperConfig,
+            @Nullable AudioDeviceInfo preferredDevice,
+            boolean initialLooping, float initialVolume) {
+        // Haptic generator not supported for fallback.
+        Objects.requireNonNull(audioManager);
+        Objects.requireNonNull(afd);
+        Objects.requireNonNull(audioAttributes);
+        Trace.beginSection("createFallbackLocalMediaPlayer");
+
+        MediaPlayer mediaPlayer = injectables.newMediaPlayer();
+        try {
+            if (afd.getDeclaredLength() < 0) {
+                mediaPlayer.setDataSource(afd.getFileDescriptor());
+            } else {
+                mediaPlayer.setDataSource(afd.getFileDescriptor(),
+                        afd.getStartOffset(),
+                        afd.getDeclaredLength());
+            }
+            mediaPlayer.setAudioAttributes(audioAttributes);
+            mediaPlayer.setPreferredDevice(preferredDevice);
+            mediaPlayer.setLooping(initialLooping);
+            mediaPlayer.setVolume(initialVolume);
+            VolumeShaper volumeShaper = null;
+            if (volumeShaperConfig != null) {
+                volumeShaper = mediaPlayer.createVolumeShaper(volumeShaperConfig);
+            }
+            mediaPlayer.prepare();
+            if (vibrationEffect != null && !audioAttributes.areHapticChannelsMuted()) {
+                if (injectables.hasHapticChannels(mediaPlayer)) {
+                    // Don't play the Vibration effect if the URI has haptic channels.
+                    vibrationEffect = null;
+                }
+            }
+            VibrationEffectPlayer vibrationEffectPlayer = (vibrationEffect == null) ? null :
+                    new VibrationEffectPlayer(
+                            vibrationEffect, audioAttributes, vibrator, initialLooping);
+            return new LocalRingtonePlayer(mediaPlayer, audioAttributes,  injectables, audioManager,
+                    /* hapticGenerator= */ null, volumeShaper, vibrationEffectPlayer);
+        } catch (SecurityException | IOException e) {
+            Log.e(TAG, "Failed to open fallback ringtone");
+            // TODO: vibration-effect-only / no-sound LocalRingtonePlayer.
+            mediaPlayer.release();
+            return null;
+        } finally {
+            Trace.endSection();
+        }
+    }
+
+    @Override
+    public boolean play() {
+        // Play ringtones if stream volume is over 0 or if it is a haptic-only ringtone
+        // (typically because ringer mode is vibrate).
+        if (mAudioManager.getStreamVolume(AudioAttributes.toLegacyStreamType(mAudioAttributes))
+                == 0 && (mAudioAttributes.areHapticChannelsMuted() || !hasHapticChannels())) {
+            maybeStartVibration();
+            return true;  // Successfully played while muted.
+        }
+        synchronized (sActiveMediaPlayers) {
+            // We keep-alive when a mediaplayer is active, since its finalizer would stop the
+            // ringtone. This isn't necessary for vibrations in the vibrator service
+            // (i.e. maybeStartVibration in the muted case, above).
+            sActiveMediaPlayers.add(this);
+        }
+
+        mMediaPlayer.setOnCompletionListener(this);
+        mMediaPlayer.start();
+        if (mVolumeShaper != null) {
+            mVolumeShaper.apply(VolumeShaper.Operation.PLAY);
+        }
+        maybeStartVibration();
+        return true;
+    }
+
+    private void maybeStartVibration() {
+        if (mVibrationPlayer != null) {
+            mVibrationPlayer.play();
+        }
+    }
+
+    @Override
+    public boolean isPlaying() {
+        return mMediaPlayer.isPlaying();
+    }
+
+    @Override
+    public void stopAndRelease() {
+        synchronized (sActiveMediaPlayers) {
+            sActiveMediaPlayers.remove(this);
+        }
+        try {
+            mMediaPlayer.stop();
+        } finally {
+            if (mVibrationPlayer != null) {
+                try {
+                    mVibrationPlayer.stopAndRelease();
+                } catch (Exception e) {
+                    Log.e(TAG, "Exception stopping ringtone vibration", e);
+                }
+            }
+            if (mHapticGenerator != null) {
+                mHapticGenerator.release();
+            }
+            mMediaPlayer.setOnCompletionListener(null);
+            mMediaPlayer.reset();
+            mMediaPlayer.release();
+        }
+    }
+
+    @Override
+    public void setPreferredDevice(@Nullable AudioDeviceInfo audioDeviceInfo) {
+        mMediaPlayer.setPreferredDevice(audioDeviceInfo);
+    }
+
+    @Override
+    public void setLooping(boolean looping) {
+        boolean wasLooping = mMediaPlayer.isLooping();
+        if (wasLooping == looping) {
+            return;
+        }
+        mMediaPlayer.setLooping(looping);
+        if (mVibrationPlayer != null) {
+            mVibrationPlayer.setLooping(looping);
+        }
+    }
+
+    @Override
+    public void setHapticGeneratorEnabled(boolean enabled) {
+        if (mVibrationPlayer != null) {
+            // Ignore haptic generator changes if a vibration player is present. The decision to
+            // use one or the other happens before this object is constructed.
+            return;
+        }
+        if (enabled && mHapticGenerator == null && !hasHapticChannels()) {
+            mHapticGenerator = mInjectables.createHapticGenerator(mMediaPlayer);
+        }
+        if (mHapticGenerator != null) {
+            mHapticGenerator.setEnabled(enabled);
+        }
+    }
+
+    @Override
+    public void setVolume(float volume) {
+        mMediaPlayer.setVolume(volume);
+        // no effect on vibration player
+    }
+
+    @Override
+    public boolean hasHapticChannels() {
+        return mInjectables.hasHapticChannels(mMediaPlayer);
+    }
+
+    @Override
+    public void onCompletion(MediaPlayer mp) {
+        synchronized (sActiveMediaPlayers) {
+            sActiveMediaPlayers.remove(this);
+        }
+        mp.setOnCompletionListener(null); // Help the Java GC: break the refcount cycle.
+        // No effect on vibration: either it's looping and this callback only happens when stopped,
+        // or it's not looping, in which case the vibration should play to its own completion.
+    }
+
+    /** A RingtonePlayer that only plays a VibrationEffect. */
+    static class VibrationEffectPlayer implements RingtoneV2.RingtonePlayer {
+        private static final int VIBRATION_LOOP_DELAY_MS = 200;
+        private final VibrationEffect mVibrationEffect;
+        private final VibrationAttributes mVibrationAttributes;
+        private final Vibrator mVibrator;
+        private boolean mIsLooping;
+        private boolean mStartedVibration;
+
+        VibrationEffectPlayer(@NonNull VibrationEffect vibrationEffect,
+                @NonNull AudioAttributes audioAttributes,
+                @NonNull Vibrator vibrator, boolean initialLooping) {
+            mVibrationEffect = vibrationEffect;
+            mVibrationAttributes = new VibrationAttributes.Builder(audioAttributes).build();
+            mVibrator = vibrator;
+            mIsLooping = initialLooping;
+        }
+
+        @Override
+        public boolean play() {
+            if (!mStartedVibration) {
+                try {
+                    // Adjust the vibration effect to loop.
+                    VibrationEffect loopAdjustedEffect =
+                            mVibrationEffect.applyRepeatingIndefinitely(
+                                mIsLooping, VIBRATION_LOOP_DELAY_MS);
+                    mVibrator.vibrate(loopAdjustedEffect, mVibrationAttributes);
+                    mStartedVibration = true;
+                } catch (Exception e) {
+                    // Catch exceptions widely, because we don't want to "leak" looping sounds or
+                    // vibrations if something goes wrong.
+                    Log.e(TAG, "Problem starting " + (mIsLooping ? "looping " : "") + "vibration "
+                            + "for ringtone: " + mVibrationEffect, e);
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        @Override
+        public boolean isPlaying() {
+            return mStartedVibration;
+        }
+
+        @Override
+        public void stopAndRelease() {
+            if (mStartedVibration) {
+                try {
+                    mVibrator.cancel(mVibrationAttributes.getUsage());
+                    mStartedVibration = false;
+                } catch (Exception e) {
+                    // Catch exceptions widely, because we don't want to "leak" looping sounds or
+                    // vibrations if something goes wrong.
+                    Log.e(TAG, "Problem stopping vibration for ringtone", e);
+                }
+            }
+        }
+
+        @Override
+        public void setPreferredDevice(AudioDeviceInfo audioDeviceInfo) {
+            // no-op
+        }
+
+        @Override
+        public void setLooping(boolean looping) {
+            if (looping == mIsLooping) {
+                return;
+            }
+            mIsLooping = looping;
+            if (mStartedVibration) {
+                if (!mIsLooping) {
+                    // Was looping, stop looping
+                    stopAndRelease();
+                }
+                // Else was not looping, but can't interfere with a running vibration without
+                // restarting it, and don't know if it was finished. So do nothing: apps shouldn't
+                // toggle looping after calling play anyway.
+            }
+        }
+
+        @Override
+        public void setHapticGeneratorEnabled(boolean enabled) {
+            // n/a
+        }
+
+        @Override
+        public void setVolume(float volume) {
+            // n/a
+        }
+
+        @Override
+        public boolean hasHapticChannels() {
+            return false;
+        }
+    }
+}
diff --git a/media/java/android/media/MediaRoute2Info.java b/media/java/android/media/MediaRoute2Info.java
index 651c732..91fa873 100644
--- a/media/java/android/media/MediaRoute2Info.java
+++ b/media/java/android/media/MediaRoute2Info.java
@@ -284,7 +284,6 @@
      * routing being done by the system.
      *
      * @see #getType
-     * @hide
      */
     public static final int TYPE_REMOTE_TABLET = 1004;
 
@@ -295,7 +294,6 @@
      * routing being done by the system.
      *
      * @see #getType
-     * @hide
      */
     public static final int TYPE_REMOTE_TABLET_DOCKED = 1005;
 
@@ -306,7 +304,6 @@
      * routing being done by the system.
      *
      * @see #getType
-     * @hide
      */
     public static final int TYPE_REMOTE_COMPUTER = 1006;
 
@@ -317,7 +314,6 @@
      * routing being done by the system.
      *
      * @see #getType
-     * @hide
      */
     public static final int TYPE_REMOTE_GAME_CONSOLE = 1007;
 
@@ -328,7 +324,6 @@
      * routing being done by the system.
      *
      * @see #getType
-     * @hide
      */
     public static final int TYPE_REMOTE_CAR = 1008;
 
@@ -339,7 +334,6 @@
      * routing being done by the system.
      *
      * @see #getType
-     * @hide
      */
     public static final int TYPE_REMOTE_SMARTWATCH = 1009;
 
@@ -350,7 +344,6 @@
      * routing being done by the system.
      *
      * @see #getType
-     * @hide
      */
     public static final int TYPE_REMOTE_SMARTPHONE = 1010;
 
@@ -457,27 +450,27 @@
     public static final String FEATURE_REMOTE_GROUP_PLAYBACK =
             "android.media.route.feature.REMOTE_GROUP_PLAYBACK";
 
-    final String mId;
-    final CharSequence mName;
-    final List<String> mFeatures;
+    private final String mId;
+    private final CharSequence mName;
+    private final List<String> mFeatures;
     @Type
-    final int mType;
-    final boolean mIsSystem;
-    final Uri mIconUri;
-    final CharSequence mDescription;
+    private final int mType;
+    private final boolean mIsSystem;
+    private final Uri mIconUri;
+    private final CharSequence mDescription;
     @ConnectionState
-    final int mConnectionState;
-    final String mClientPackageName;
-    final String mPackageName;
-    final int mVolumeHandling;
-    final int mVolumeMax;
-    final int mVolume;
-    final String mAddress;
-    final Set<String> mDeduplicationIds;
-    final Bundle mExtras;
-    final String mProviderId;
-    final boolean mIsVisibilityRestricted;
-    final Set<String> mAllowedPackages;
+    private final int mConnectionState;
+    private final String mClientPackageName;
+    private final String mPackageName;
+    private final int mVolumeHandling;
+    private final int mVolumeMax;
+    private final int mVolume;
+    private final String mAddress;
+    private final Set<String> mDeduplicationIds;
+    private final Bundle mExtras;
+    private final String mProviderId;
+    private final boolean mIsVisibilityRestricted;
+    private final Set<String> mAllowedPackages;
 
     MediaRoute2Info(@NonNull Builder builder) {
         mId = builder.mId;
@@ -956,28 +949,28 @@
      * Builder for {@link MediaRoute2Info media route info}.
      */
     public static final class Builder {
-        final String mId;
-        final CharSequence mName;
-        final List<String> mFeatures;
+        private final String mId;
+        private final CharSequence mName;
+        private final List<String> mFeatures;
 
         @Type
-        int mType = TYPE_UNKNOWN;
-        boolean mIsSystem;
-        Uri mIconUri;
-        CharSequence mDescription;
+        private int mType = TYPE_UNKNOWN;
+        private boolean mIsSystem;
+        private Uri mIconUri;
+        private CharSequence mDescription;
         @ConnectionState
-        int mConnectionState;
-        String mClientPackageName;
-        String mPackageName;
-        int mVolumeHandling = PLAYBACK_VOLUME_FIXED;
-        int mVolumeMax;
-        int mVolume;
-        String mAddress;
-        Set<String> mDeduplicationIds;
-        Bundle mExtras;
-        String mProviderId;
-        boolean mIsVisibilityRestricted;
-        Set<String> mAllowedPackages;
+        private int mConnectionState;
+        private String mClientPackageName;
+        private String mPackageName;
+        private int mVolumeHandling = PLAYBACK_VOLUME_FIXED;
+        private int mVolumeMax;
+        private int mVolume;
+        private String mAddress;
+        private Set<String> mDeduplicationIds;
+        private Bundle mExtras;
+        private String mProviderId;
+        private boolean mIsVisibilityRestricted;
+        private Set<String> mAllowedPackages;
 
         /**
          * Constructor for builder to create {@link MediaRoute2Info}.
diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java
index c620229..94a061a 100644
--- a/media/java/android/media/MediaRouter2.java
+++ b/media/java/android/media/MediaRouter2.java
@@ -29,6 +29,7 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
+import android.os.Message;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.text.TextUtils;
@@ -75,9 +76,7 @@
     private static final long MANAGER_REQUEST_ID_NONE = MediaRoute2ProviderService.REQUEST_ID_NONE;
 
     @GuardedBy("sSystemRouterLock")
-    private static Map<String, MediaRouter2> sSystemMediaRouter2Map = new ArrayMap<>();
-
-    private static MediaRouter2Manager sManager;
+    private static final Map<String, MediaRouter2> sSystemMediaRouter2Map = new ArrayMap<>();
 
     @GuardedBy("sRouterLock")
     private static MediaRouter2 sInstance;
@@ -85,9 +84,12 @@
     private final Context mContext;
     private final IMediaRouterService mMediaRouterService;
     private final Object mLock = new Object();
+    private final MediaRouter2Impl mImpl;
 
     private final CopyOnWriteArrayList<RouteCallbackRecord> mRouteCallbackRecords =
             new CopyOnWriteArrayList<>();
+    private final CopyOnWriteArrayList<RouteListingPreferenceCallbackRecord>
+            mListingPreferenceCallbackRecords = new CopyOnWriteArrayList<>();
     private final CopyOnWriteArrayList<TransferCallbackRecord> mTransferCallbackRecords =
             new CopyOnWriteArrayList<>();
     private final CopyOnWriteArrayList<ControllerCallbackRecord> mControllerCallbackRecords =
@@ -96,12 +98,6 @@
     private final CopyOnWriteArrayList<ControllerCreationRequest> mControllerCreationRequests =
             new CopyOnWriteArrayList<>();
 
-    // TODO: Specify the fields that are only used (or not used) by system media router.
-    private final String mClientPackageName;
-    final ManagerCallback mManagerCallback;
-
-    private final String mPackageName;
-
     /**
      * Stores the latest copy of all routes received from the system server, without any filtering,
      * sorting, or deduplication.
@@ -109,28 +105,26 @@
      * <p>Uses {@link MediaRoute2Info#getId()} to set each entry's key.
      */
     @GuardedBy("mLock")
-    final Map<String, MediaRoute2Info> mRoutes = new ArrayMap<>();
+    private final Map<String, MediaRoute2Info> mRoutes = new ArrayMap<>();
+
+    private final RoutingController mSystemController;
 
     @GuardedBy("mLock")
-    @Nullable
-    private RouteListingPreference mRouteListingPreference;
+    private final Map<String, RoutingController> mNonSystemRoutingControllers = new ArrayMap<>();
 
-    final RoutingController mSystemController;
+    private final AtomicInteger mNextRequestId = new AtomicInteger(1);
+    private final Handler mHandler;
 
     @GuardedBy("mLock")
     private RouteDiscoveryPreference mDiscoveryPreference = RouteDiscoveryPreference.EMPTY;
 
     // TODO: Make MediaRouter2 is always connected to the MediaRouterService.
     @GuardedBy("mLock")
-    MediaRouter2Stub mStub;
+    private MediaRouter2Stub mStub;
 
     @GuardedBy("mLock")
-    private final Map<String, RoutingController> mNonSystemRoutingControllers = new ArrayMap<>();
-
-    private final AtomicInteger mNextRequestId = new AtomicInteger(1);
-    private final AtomicBoolean mIsScanning = new AtomicBoolean(/* initialValue= */ false);
-
-    final Handler mHandler;
+    @Nullable
+    private RouteListingPreference mRouteListingPreference;
 
     /**
      * Stores an auxiliary copy of {@link #mFilteredRoutes} at the time of the last route callback
@@ -178,7 +172,7 @@
      *
      * <ul>
      *   <li>{@link #getControllers()}
-     *   <li>{@link #getController(String)}}
+     *   <li>{@link #getController(String)}
      *   <li>{@link TransferCallback#onTransfer(RoutingController, RoutingController)}
      *   <li>{@link TransferCallback#onStop(RoutingController)}
      *   <li>{@link ControllerCallback#onControllerUpdated(RoutingController)}
@@ -191,7 +185,8 @@
      * <p>Finally, it will have no effect to call {@link #setOnGetControllerHintsListener}.
      *
      * @param clientPackageName the package name of the app to control
-     * @throws SecurityException if the caller doesn't have MODIFY_AUDIO_ROUTING permission.
+     * @throws SecurityException if the caller doesn't have {@link
+     *     Manifest.permission#MEDIA_CONTENT_CONTROL MEDIA_CONTENT_CONTROL} permission.
      * @hide
      */
     @SystemApi
@@ -221,14 +216,8 @@
         synchronized (sSystemRouterLock) {
             MediaRouter2 instance = sSystemMediaRouter2Map.get(clientPackageName);
             if (instance == null) {
-                if (sManager == null) {
-                    sManager = MediaRouter2Manager.getInstance(context.getApplicationContext());
-                }
                 instance = new MediaRouter2(context, clientPackageName);
                 sSystemMediaRouter2Map.put(clientPackageName, instance);
-                // Using direct executor here, since MediaRouter2Manager also posts
-                // to the main handler.
-                sManager.registerCallback(Runnable::run, instance.mManagerCallback);
             }
             return instance;
         }
@@ -255,11 +244,7 @@
     @SystemApi
     @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL)
     public void startScan() {
-        if (isSystemRouter()) {
-            if (!mIsScanning.getAndSet(true)) {
-                sManager.registerScanRequest();
-            }
-        }
+        mImpl.startScan();
     }
 
     /**
@@ -283,11 +268,7 @@
     @SystemApi
     @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL)
     public void stopScan() {
-        if (isSystemRouter()) {
-            if (mIsScanning.getAndSet(false)) {
-                sManager.unregisterScanRequest();
-            }
-        }
+        mImpl.stopScan();
     }
 
     private MediaRouter2(Context appContext) {
@@ -295,14 +276,12 @@
         mMediaRouterService =
                 IMediaRouterService.Stub.asInterface(
                         ServiceManager.getService(Context.MEDIA_ROUTER_SERVICE));
-        mPackageName = mContext.getPackageName();
+        mImpl = new LocalMediaRouter2Impl(mContext.getPackageName());
         mHandler = new Handler(Looper.getMainLooper());
 
         List<MediaRoute2Info> currentSystemRoutes = null;
-        RoutingSessionInfo currentSystemSessionInfo = null;
         try {
             currentSystemRoutes = mMediaRouterService.getSystemRoutes();
-            currentSystemSessionInfo = mMediaRouterService.getSystemSessionInfo();
         } catch (RemoteException ex) {
             ex.rethrowFromSystemServer();
         }
@@ -311,6 +290,7 @@
             throw new RuntimeException("Null or empty currentSystemRoutes. Something is wrong.");
         }
 
+        RoutingSessionInfo currentSystemSessionInfo = mImpl.getSystemSessionInfo();
         if (currentSystemSessionInfo == null) {
             throw new RuntimeException("Null currentSystemSessionInfo. Something is wrong.");
         }
@@ -319,42 +299,17 @@
             mRoutes.put(route.getId(), route);
         }
         mSystemController = new SystemRoutingController(currentSystemSessionInfo);
-
-        // Only used by system MediaRouter2.
-        mClientPackageName = null;
-        mManagerCallback = null;
     }
 
     private MediaRouter2(Context context, String clientPackageName) {
         mContext = context;
-        mClientPackageName = clientPackageName;
-        mManagerCallback = new ManagerCallback();
         mHandler = new Handler(Looper.getMainLooper());
-        mSystemController =
-                new SystemRoutingController(
-                        ensureClientPackageNameForSystemSession(
-                                sManager.getSystemRoutingSession(clientPackageName)));
-        mDiscoveryPreference = sManager.getDiscoveryPreference(clientPackageName);
-        updateAllRoutesFromManager();
+        mMediaRouterService =
+                IMediaRouterService.Stub.asInterface(
+                        ServiceManager.getService(Context.MEDIA_ROUTER_SERVICE));
 
-        // Only used by non-system MediaRouter2.
-        mMediaRouterService = null;
-        mPackageName = null;
-    }
-
-    /**
-     * Returns whether any route in {@code routeList} has a same unique ID with given route.
-     *
-     * @hide
-     */
-    static boolean checkRouteListContainsRouteId(
-            @NonNull List<MediaRoute2Info> routeList, @NonNull String routeId) {
-        for (MediaRoute2Info info : routeList) {
-            if (TextUtils.equals(routeId, info.getId())) {
-                return true;
-            }
-        }
-        return false;
+        mImpl = new ProxyMediaRouter2Impl(context, clientPackageName);
+        mSystemController = new SystemRoutingController(mImpl.getSystemSessionInfo());
     }
 
     /**
@@ -368,7 +323,7 @@
     @SystemApi
     @Nullable
     public String getClientPackageName() {
-        return mClientPackageName;
+        return mImpl.getClientPackageName();
     }
 
     /**
@@ -384,39 +339,16 @@
         Objects.requireNonNull(executor, "executor must not be null");
         Objects.requireNonNull(routeCallback, "callback must not be null");
         Objects.requireNonNull(preference, "preference must not be null");
-        if (isSystemRouter()) {
-            preference = RouteDiscoveryPreference.EMPTY;
-        }
 
-        RouteCallbackRecord record = new RouteCallbackRecord(executor, routeCallback, preference);
+        RouteCallbackRecord record =
+                mImpl.createRouteCallbackRecord(executor, routeCallback, preference);
 
         mRouteCallbackRecords.remove(record);
         // It can fail to add the callback record if another registration with the same callback
         // is happening but it's okay because either this or the other registration should be done.
         mRouteCallbackRecords.addIfAbsent(record);
 
-        if (isSystemRouter()) {
-            return;
-        }
-
-        synchronized (mLock) {
-            if (mStub == null) {
-                MediaRouter2Stub stub = new MediaRouter2Stub();
-                try {
-                    mMediaRouterService.registerRouter2(stub, mPackageName);
-                    mStub = stub;
-                } catch (RemoteException ex) {
-                    ex.rethrowFromSystemServer();
-                }
-            }
-            if (mStub != null && updateDiscoveryPreferenceIfNeededLocked()) {
-                try {
-                    mMediaRouterService.setDiscoveryRequestWithRouter2(mStub, mDiscoveryPreference);
-                } catch (RemoteException ex) {
-                    ex.rethrowFromSystemServer();
-                }
-            }
-        }
+        mImpl.registerRouteCallback();
     }
 
     /**
@@ -434,29 +366,43 @@
             return;
         }
 
-        if (isSystemRouter()) {
-            return;
-        }
+        mImpl.unregisterRouteCallback();
+    }
 
-        synchronized (mLock) {
-            if (mStub == null) {
-                return;
-            }
-            if (updateDiscoveryPreferenceIfNeededLocked()) {
-                try {
-                    mMediaRouterService.setDiscoveryRequestWithRouter2(mStub, mDiscoveryPreference);
-                } catch (RemoteException ex) {
-                    Log.e(TAG, "unregisterRouteCallback: Unable to set discovery request.", ex);
-                }
-            }
-            if (mRouteCallbackRecords.isEmpty() && mNonSystemRoutingControllers.isEmpty()) {
-                try {
-                    mMediaRouterService.unregisterRouter2(mStub);
-                } catch (RemoteException ex) {
-                    ex.rethrowFromSystemServer();
-                }
-                mStub = null;
-            }
+    /**
+     * Registers callback to be invoked when the {@link RouteListingPreference} of the target
+     * router changes.
+     *
+     * <p>Calls using a previously registered callback will overwrite the callback record.
+     *
+     * @see #setRouteListingPreference(RouteListingPreference)
+     * @hide
+     */
+    public void registerRouteListingPreferenceCallback(
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull RouteListingPreferenceCallback routeListingPreferenceCallback) {
+        Objects.requireNonNull(executor, "executor must not be null");
+        Objects.requireNonNull(routeListingPreferenceCallback, "callback must not be null");
+
+        RouteListingPreferenceCallbackRecord record =
+                new RouteListingPreferenceCallbackRecord(executor, routeListingPreferenceCallback);
+
+        mListingPreferenceCallbackRecords.remove(record);
+        mListingPreferenceCallbackRecords.add(record);
+    }
+
+    /**
+     * Unregisters the given callback to not receive {@link RouteListingPreference} change events.
+     *
+     * @hide
+     */
+    public void unregisterRouteListingPreferenceCallback(
+            @NonNull RouteListingPreferenceCallback callback) {
+        Objects.requireNonNull(callback, "callback must not be null");
+
+        if (!mListingPreferenceCallbackRecords.remove(
+                new RouteListingPreferenceCallbackRecord(/* executor */ null, callback))) {
+            Log.w(TAG, "unregisterRouteListingPreferenceCallback: Ignoring an unknown callback");
         }
     }
 
@@ -477,14 +423,7 @@
      * call is ignored because the app is in the background.
      */
     public boolean showSystemOutputSwitcher() {
-        synchronized (mLock) {
-            try {
-                return mMediaRouterService.showMediaOutputSwitcher(mPackageName);
-            } catch (RemoteException ex) {
-                ex.rethrowFromSystemServer();
-            }
-        }
-        return false;
+        return mImpl.showSystemOutputSwitcher();
     }
 
     /**
@@ -498,6 +437,9 @@
      * updates} in order to keep the system UI in a consistent state. You can also call this method
      * at any other point to update the listing preference dynamically.
      *
+     * <p>Any calls to this method from a privileged router will throw an {@link
+     * UnsupportedOperationException}.
+     *
      * <p>Notes:
      *
      * <ol>
@@ -514,22 +456,19 @@
      *     route listing. When null, the system uses its default listing criteria.
      */
     public void setRouteListingPreference(@Nullable RouteListingPreference routeListingPreference) {
+        mImpl.setRouteListingPreference(routeListingPreference);
+    }
+
+    /**
+     * Returns the current {@link RouteListingPreference} of the target router.
+     *
+     * @see #setRouteListingPreference(RouteListingPreference)
+     * @hide
+     */
+    @Nullable
+    public RouteListingPreference getRouteListingPreference() {
         synchronized (mLock) {
-            if (Objects.equals(mRouteListingPreference, routeListingPreference)) {
-                // Nothing changed. We return early to save a call to the system server.
-                return;
-            }
-            mRouteListingPreference = routeListingPreference;
-            try {
-                if (mStub == null) {
-                    MediaRouter2Stub stub = new MediaRouter2Stub();
-                    mMediaRouterService.registerRouter2(stub, mPackageName);
-                    mStub = stub;
-                }
-                mMediaRouterService.setRouteListingPreference(mStub, mRouteListingPreference);
-            } catch (RemoteException ex) {
-                ex.rethrowFromSystemServer();
-            }
+            return mRouteListingPreference;
         }
     }
 
@@ -558,10 +497,7 @@
     @SystemApi
     @NonNull
     public List<MediaRoute2Info> getAllRoutes() {
-        if (isSystemRouter()) {
-            return sManager.getAllRoutes();
-        }
-        return Collections.emptyList();
+        return mImpl.getAllRoutes();
     }
 
     /**
@@ -596,7 +532,6 @@
         TransferCallbackRecord record = new TransferCallbackRecord(executor, callback);
         if (!mTransferCallbackRecords.addIfAbsent(record)) {
             Log.w(TAG, "registerTransferCallback: Ignoring the same callback");
-            return;
         }
     }
 
@@ -612,7 +547,6 @@
 
         if (!mTransferCallbackRecords.remove(new TransferCallbackRecord(null, callback))) {
             Log.w(TAG, "unregisterTransferCallback: Ignoring an unknown callback");
-            return;
         }
     }
 
@@ -630,7 +564,6 @@
         ControllerCallbackRecord record = new ControllerCallbackRecord(executor, callback);
         if (!mControllerCallbackRecords.addIfAbsent(record)) {
             Log.w(TAG, "registerControllerCallback: Ignoring the same callback");
-            return;
         }
     }
 
@@ -645,7 +578,6 @@
 
         if (!mControllerCallbackRecords.remove(new ControllerCallbackRecord(null, callback))) {
             Log.w(TAG, "unregisterControllerCallback: Ignoring an unknown callback");
-            return;
         }
     }
 
@@ -658,10 +590,7 @@
      *     {@code null} for unset.
      */
     public void setOnGetControllerHintsListener(@Nullable OnGetControllerHintsListener listener) {
-        if (isSystemRouter()) {
-            return;
-        }
-        mOnGetControllerHintsListener = listener;
+        mImpl.setOnGetControllerHintsListener(listener);
     }
 
     /**
@@ -674,30 +603,7 @@
      * @see TransferCallback#onTransferFailure
      */
     public void transferTo(@NonNull MediaRoute2Info route) {
-        if (isSystemRouter()) {
-            sManager.transfer(mClientPackageName, route);
-            return;
-        }
-
-        Log.v(TAG, "Transferring to route: " + route);
-
-        boolean routeFound;
-        synchronized (mLock) {
-            // TODO: Check thread-safety
-            routeFound = mRoutes.containsKey(route.getId());
-        }
-        if (!routeFound) {
-            notifyTransferFailure(route);
-            return;
-        }
-
-        RoutingController controller = getCurrentController();
-        if (controller.getRoutingSessionInfo().getTransferableRoutes().contains(route.getId())) {
-            controller.transferToRoute(route);
-            return;
-        }
-
-        requestCreateController(controller, route, MANAGER_REQUEST_ID_NONE);
+        mImpl.transferTo(route);
     }
 
     /**
@@ -705,13 +611,7 @@
      * controls the media routing, this method is a no-op.
      */
     public void stop() {
-        if (isSystemRouter()) {
-            List<RoutingSessionInfo> sessionInfos = sManager.getRoutingSessions(mClientPackageName);
-            RoutingSessionInfo sessionToRelease = sessionInfos.get(sessionInfos.size() - 1);
-            sManager.releaseSession(sessionToRelease);
-            return;
-        }
-        getCurrentController().release();
+        mImpl.stop();
     }
 
     /**
@@ -726,10 +626,7 @@
     @SystemApi
     @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL)
     public void transfer(@NonNull RoutingController controller, @NonNull MediaRoute2Info route) {
-        if (isSystemRouter()) {
-            sManager.transfer(controller.getRoutingSessionInfo(), route);
-            return;
-        }
+        mImpl.transfer(controller.getRoutingSessionInfo(), route);
     }
 
     void requestCreateController(
@@ -820,31 +717,7 @@
      */
     @NonNull
     public List<RoutingController> getControllers() {
-        List<RoutingController> result = new ArrayList<>();
-
-        if (isSystemRouter()) {
-            // Unlike non-system MediaRouter2, controller instances cannot be kept,
-            // since the transfer events initiated from other apps will not come through manager.
-            List<RoutingSessionInfo> sessions = sManager.getRoutingSessions(mClientPackageName);
-            for (RoutingSessionInfo session : sessions) {
-                RoutingController controller;
-                if (session.isSystemSession()) {
-                    mSystemController.setRoutingSessionInfo(
-                            ensureClientPackageNameForSystemSession(session));
-                    controller = mSystemController;
-                } else {
-                    controller = new RoutingController(session);
-                }
-                result.add(controller);
-            }
-            return result;
-        }
-
-        result.add(0, mSystemController);
-        synchronized (mLock) {
-            result.addAll(mNonSystemRoutingControllers.values());
-        }
-        return result;
+        return mImpl.getControllers();
     }
 
     /**
@@ -862,11 +735,7 @@
     public void setRouteVolume(@NonNull MediaRoute2Info route, int volume) {
         Objects.requireNonNull(route, "route must not be null");
 
-        if (isSystemRouter()) {
-            sManager.setRouteVolume(route, volume);
-            return;
-        }
-        // If this API needs to be public, use IMediaRouterService#setRouteVolumeWithRouter2()
+        mImpl.setRouteVolume(route, volume);
     }
 
     void syncRoutesOnHandler(
@@ -1130,31 +999,6 @@
         requestCreateController(controller, route, managerRequestId);
     }
 
-    /**
-     * Returns whether this router is created with {@link #getInstance(Context, String)}. This kind
-     * of router can control the target app's media routing.
-     */
-    private boolean isSystemRouter() {
-        return mClientPackageName != null;
-    }
-
-    /**
-     * Returns a {@link RoutingSessionInfo} which has the client package name. The client package
-     * name is set only when the given sessionInfo doesn't have it. Should only used for system
-     * media routers.
-     */
-    private RoutingSessionInfo ensureClientPackageNameForSystemSession(
-            @NonNull RoutingSessionInfo sessionInfo) {
-        if (!sessionInfo.isSystemSession()
-                || !TextUtils.isEmpty(sessionInfo.getClientPackageName())) {
-            return sessionInfo;
-        }
-
-        return new RoutingSessionInfo.Builder(sessionInfo)
-                .setClientPackageName(mClientPackageName)
-                .build();
-    }
-
     private List<MediaRoute2Info> getSortedRoutes(
             List<MediaRoute2Info> routes, List<String> packageOrder) {
         if (packageOrder.isEmpty()) {
@@ -1203,47 +1047,20 @@
         return filteredRoutes;
     }
 
-    private List<MediaRoute2Info> filterRoutesWithIndividualPreference(
-            List<MediaRoute2Info> routes, RouteDiscoveryPreference discoveryPreference) {
-        List<MediaRoute2Info> filteredRoutes = new ArrayList<>();
-        if (isSystemRouter()) {
-            // Individual discovery preferences do not apply for the system router.
-            filteredRoutes.addAll(routes);
-            return filteredRoutes;
-        }
-        for (MediaRoute2Info route : routes) {
-            if (!route.hasAnyFeatures(discoveryPreference.getPreferredFeatures())) {
-                continue;
-            }
-            if (!discoveryPreference.getAllowedPackages().isEmpty()
-                    && (route.getPackageName() == null
-                            || !discoveryPreference
-                                    .getAllowedPackages()
-                                    .contains(route.getPackageName()))) {
-                continue;
-            }
-            filteredRoutes.add(route);
-        }
-        return filteredRoutes;
-    }
-
-    private void updateAllRoutesFromManager() {
-        if (!isSystemRouter()) {
-            return;
-        }
+    @NonNull
+    private List<MediaRoute2Info> getRoutesWithIds(@NonNull List<String> routeIds) {
         synchronized (mLock) {
-            mRoutes.clear();
-            for (MediaRoute2Info route : sManager.getAllRoutes()) {
-                mRoutes.put(route.getId(), route);
-            }
-            updateFilteredRoutesLocked();
+            return routeIds.stream()
+                    .map(mRoutes::get)
+                    .filter(Objects::nonNull)
+                    .collect(Collectors.toList());
         }
     }
 
     private void notifyRoutesAdded(List<MediaRoute2Info> routes) {
         for (RouteCallbackRecord record : mRouteCallbackRecords) {
             List<MediaRoute2Info> filteredRoutes =
-                    filterRoutesWithIndividualPreference(routes, record.mPreference);
+                    mImpl.filterRoutesWithIndividualPreference(routes, record.mPreference);
             if (!filteredRoutes.isEmpty()) {
                 record.mExecutor.execute(() -> record.mRouteCallback.onRoutesAdded(filteredRoutes));
             }
@@ -1253,7 +1070,7 @@
     private void notifyRoutesRemoved(List<MediaRoute2Info> routes) {
         for (RouteCallbackRecord record : mRouteCallbackRecords) {
             List<MediaRoute2Info> filteredRoutes =
-                    filterRoutesWithIndividualPreference(routes, record.mPreference);
+                    mImpl.filterRoutesWithIndividualPreference(routes, record.mPreference);
             if (!filteredRoutes.isEmpty()) {
                 record.mExecutor.execute(
                         () -> record.mRouteCallback.onRoutesRemoved(filteredRoutes));
@@ -1264,7 +1081,7 @@
     private void notifyRoutesChanged(List<MediaRoute2Info> routes) {
         for (RouteCallbackRecord record : mRouteCallbackRecords) {
             List<MediaRoute2Info> filteredRoutes =
-                    filterRoutesWithIndividualPreference(routes, record.mPreference);
+                    mImpl.filterRoutesWithIndividualPreference(routes, record.mPreference);
             if (!filteredRoutes.isEmpty()) {
                 record.mExecutor.execute(
                         () -> record.mRouteCallback.onRoutesChanged(filteredRoutes));
@@ -1275,7 +1092,7 @@
     private void notifyRoutesUpdated(List<MediaRoute2Info> routes) {
         for (RouteCallbackRecord record : mRouteCallbackRecords) {
             List<MediaRoute2Info> filteredRoutes =
-                    filterRoutesWithIndividualPreference(routes, record.mPreference);
+                    mImpl.filterRoutesWithIndividualPreference(routes, record.mPreference);
             record.mExecutor.execute(() -> record.mRouteCallback.onRoutesUpdated(filteredRoutes));
         }
     }
@@ -1287,6 +1104,15 @@
         }
     }
 
+    private void notifyRouteListingPreferenceUpdated(@Nullable RouteListingPreference preference) {
+        for (RouteListingPreferenceCallbackRecord record : mListingPreferenceCallbackRecords) {
+            record.mExecutor.execute(
+                    () ->
+                            record.mRouteListingPreferenceCallback.onRouteListingPreferenceChanged(
+                                    preference));
+        }
+    }
+
     private void notifyTransfer(RoutingController oldController, RoutingController newController) {
         for (TransferCallbackRecord record : mTransferCallbackRecords) {
             record.mExecutor.execute(
@@ -1300,6 +1126,12 @@
         }
     }
 
+    private void notifyRequestFailed(int reason) {
+        for (TransferCallbackRecord record : mTransferCallbackRecords) {
+            record.mExecutor.execute(() -> record.mTransferCallback.onRequestFailed(reason));
+        }
+    }
+
     private void notifyStop(RoutingController controller) {
         for (TransferCallbackRecord record : mTransferCallbackRecords) {
             record.mExecutor.execute(() -> record.mTransferCallback.onStop(controller));
@@ -1364,6 +1196,12 @@
         public void onPreferredFeaturesChanged(@NonNull List<String> preferredFeatures) {}
     }
 
+    /** @hide */
+    public abstract static class RouteListingPreferenceCallback {
+        /** @hide */
+        public void onRouteListingPreferenceChanged(@Nullable RouteListingPreference preference) {}
+    }
+
     /** Callback for receiving events on media transfer. */
     public abstract static class TransferCallback {
         /**
@@ -1400,6 +1238,15 @@
          * @param controller the controller that controlled the stopped media routing
          */
         public void onStop(@NonNull RoutingController controller) {}
+
+        /**
+         * Called when a routing request fails.
+         *
+         * @param reason Reason for failure as per {@link
+         *     android.media.MediaRoute2ProviderService.Reason}
+         * @hide
+         */
+        public void onRequestFailed(int reason) {}
     }
 
     /**
@@ -1604,7 +1451,7 @@
         /**
          * Selects a route for the remote session. After a route is selected, the media is expected
          * to be played to the all the selected routes. This is different from {@link
-         * MediaRouter2#transferTo(MediaRoute2Info)} transferring to a route}, where the media is
+         * MediaRouter2#transferTo(MediaRoute2Info) transferring to a route}, where the media is
          * expected to 'move' from one route to another.
          *
          * <p>The given route must satisfy all of the following conditions:
@@ -1629,33 +1476,18 @@
             }
 
             List<MediaRoute2Info> selectedRoutes = getSelectedRoutes();
-            if (checkRouteListContainsRouteId(selectedRoutes, route.getId())) {
+            if (containsRouteInfoWithId(selectedRoutes, route.getId())) {
                 Log.w(TAG, "Ignoring selecting a route that is already selected. route=" + route);
                 return;
             }
 
             List<MediaRoute2Info> selectableRoutes = getSelectableRoutes();
-            if (!checkRouteListContainsRouteId(selectableRoutes, route.getId())) {
+            if (!containsRouteInfoWithId(selectableRoutes, route.getId())) {
                 Log.w(TAG, "Ignoring selecting a non-selectable route=" + route);
                 return;
             }
 
-            if (isSystemRouter()) {
-                sManager.selectRoute(getRoutingSessionInfo(), route);
-                return;
-            }
-
-            MediaRouter2Stub stub;
-            synchronized (mLock) {
-                stub = mStub;
-            }
-            if (stub != null) {
-                try {
-                    mMediaRouterService.selectRouteWithRouter2(stub, getId(), route);
-                } catch (RemoteException ex) {
-                    Log.e(TAG, "Unable to select route for session.", ex);
-                }
-            }
+            mImpl.selectRoute(route, getRoutingSessionInfo());
         }
 
         /**
@@ -1683,33 +1515,18 @@
             }
 
             List<MediaRoute2Info> selectedRoutes = getSelectedRoutes();
-            if (!checkRouteListContainsRouteId(selectedRoutes, route.getId())) {
+            if (!containsRouteInfoWithId(selectedRoutes, route.getId())) {
                 Log.w(TAG, "Ignoring deselecting a route that is not selected. route=" + route);
                 return;
             }
 
             List<MediaRoute2Info> deselectableRoutes = getDeselectableRoutes();
-            if (!checkRouteListContainsRouteId(deselectableRoutes, route.getId())) {
+            if (!containsRouteInfoWithId(deselectableRoutes, route.getId())) {
                 Log.w(TAG, "Ignoring deselecting a non-deselectable route=" + route);
                 return;
             }
 
-            if (isSystemRouter()) {
-                sManager.deselectRoute(getRoutingSessionInfo(), route);
-                return;
-            }
-
-            MediaRouter2Stub stub;
-            synchronized (mLock) {
-                stub = mStub;
-            }
-            if (stub != null) {
-                try {
-                    mMediaRouterService.deselectRouteWithRouter2(stub, getId(), route);
-                } catch (RemoteException ex) {
-                    Log.e(TAG, "Unable to deselect route from session.", ex);
-                }
-            }
+            mImpl.deselectRoute(route, getRoutingSessionInfo());
         }
 
         /**
@@ -1769,22 +1586,7 @@
                 return;
             }
 
-            if (isSystemRouter()) {
-                sManager.setSessionVolume(getRoutingSessionInfo(), volume);
-                return;
-            }
-
-            MediaRouter2Stub stub;
-            synchronized (mLock) {
-                stub = mStub;
-            }
-            if (stub != null) {
-                try {
-                    mMediaRouterService.setSessionVolumeWithRouter2(stub, getId(), volume);
-                } catch (RemoteException ex) {
-                    Log.e(TAG, "setVolume: Failed to deliver request.", ex);
-                }
-            }
+            mImpl.setSessionVolume(volume, getRoutingSessionInfo());
         }
 
         /**
@@ -1839,41 +1641,7 @@
                 mState = CONTROLLER_STATE_RELEASED;
             }
 
-            if (isSystemRouter()) {
-                sManager.releaseSession(getRoutingSessionInfo());
-                return;
-            }
-
-            synchronized (mLock) {
-                mNonSystemRoutingControllers.remove(getId(), this);
-
-                if (shouldReleaseSession && mStub != null) {
-                    try {
-                        mMediaRouterService.releaseSessionWithRouter2(mStub, getId());
-                    } catch (RemoteException ex) {
-                        ex.rethrowFromSystemServer();
-                    }
-                }
-
-                if (shouldNotifyStop) {
-                    mHandler.sendMessage(
-                            obtainMessage(
-                                    MediaRouter2::notifyStop,
-                                    MediaRouter2.this,
-                                    RoutingController.this));
-                }
-
-                if (mRouteCallbackRecords.isEmpty()
-                        && mNonSystemRoutingControllers.isEmpty()
-                        && mStub != null) {
-                    try {
-                        mMediaRouterService.unregisterRouter2(mStub);
-                    } catch (RemoteException ex) {
-                        ex.rethrowFromSystemServer();
-                    }
-                    mStub = null;
-                }
-            }
+            mImpl.releaseSession(shouldReleaseSession, shouldNotifyStop, this);
         }
 
         @Override
@@ -1916,19 +1684,15 @@
             }
         }
 
-        private List<MediaRoute2Info> getRoutesWithIds(List<String> routeIds) {
-            if (isSystemRouter()) {
-                return getRoutes().stream()
-                        .filter(r -> routeIds.contains(r.getId()))
-                        .collect(Collectors.toList());
+        /** Returns whether any route in {@code routeList} has a same unique ID with given route. */
+        private static boolean containsRouteInfoWithId(
+                @NonNull List<MediaRoute2Info> routeList, @NonNull String routeId) {
+            for (MediaRoute2Info info : routeList) {
+                if (TextUtils.equals(routeId, info.getId())) {
+                    return true;
+                }
             }
-
-            synchronized (mLock) {
-                return routeIds.stream()
-                        .map(mRoutes::get)
-                        .filter(Objects::nonNull)
-                        .collect(Collectors.toList());
-            }
+            return false;
         }
     }
 
@@ -1986,6 +1750,35 @@
         }
     }
 
+    private static final class RouteListingPreferenceCallbackRecord {
+        public final Executor mExecutor;
+        public final RouteListingPreferenceCallback mRouteListingPreferenceCallback;
+
+        /* package */ RouteListingPreferenceCallbackRecord(
+                @NonNull Executor executor,
+                @NonNull RouteListingPreferenceCallback routeListingPreferenceCallback) {
+            mExecutor = executor;
+            mRouteListingPreferenceCallback = routeListingPreferenceCallback;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (!(obj instanceof RouteListingPreferenceCallbackRecord)) {
+                return false;
+            }
+            return mRouteListingPreferenceCallback
+                    == ((RouteListingPreferenceCallbackRecord) obj).mRouteListingPreferenceCallback;
+        }
+
+        @Override
+        public int hashCode() {
+            return mRouteListingPreferenceCallback.hashCode();
+        }
+    }
+
     static final class TransferCallbackRecord {
         public final Executor mExecutor;
         public final TransferCallback mTransferCallback;
@@ -2118,24 +1911,601 @@
         }
     }
 
-    // Note: All methods are run on main thread.
-    class ManagerCallback implements MediaRouter2Manager.Callback {
+    /**
+     * Provides a common interface for separating {@link LocalMediaRouter2Impl local} and {@link
+     * ProxyMediaRouter2Impl proxy} {@link MediaRouter2} instances.
+     */
+    private interface MediaRouter2Impl {
+        void startScan();
 
-        @Override
-        public void onRoutesUpdated() {
-            updateAllRoutesFromManager();
+        void stopScan();
+
+        String getClientPackageName();
+
+        String getPackageName();
+
+        RoutingSessionInfo getSystemSessionInfo();
+
+        RouteCallbackRecord createRouteCallbackRecord(
+                @NonNull @CallbackExecutor Executor executor,
+                @NonNull RouteCallback routeCallback,
+                @NonNull RouteDiscoveryPreference preference);
+
+        void registerRouteCallback();
+
+        void unregisterRouteCallback();
+
+        void setRouteListingPreference(@Nullable RouteListingPreference preference);
+
+        boolean showSystemOutputSwitcher();
+
+        List<MediaRoute2Info> getAllRoutes();
+
+        void setOnGetControllerHintsListener(OnGetControllerHintsListener listener);
+
+        void transferTo(MediaRoute2Info route);
+
+        void stop();
+
+        void transfer(RoutingSessionInfo sessionInfo, MediaRoute2Info route);
+
+        List<RoutingController> getControllers();
+
+        void setRouteVolume(MediaRoute2Info route, int volume);
+
+        List<MediaRoute2Info> filterRoutesWithIndividualPreference(
+                List<MediaRoute2Info> routes, RouteDiscoveryPreference discoveryPreference);
+
+        // RoutingController methods.
+        void setSessionVolume(int volume, RoutingSessionInfo sessionInfo);
+
+        void selectRoute(MediaRoute2Info route, RoutingSessionInfo sessionInfo);
+
+        void deselectRoute(MediaRoute2Info route, RoutingSessionInfo sessionInfo);
+
+        void releaseSession(
+                boolean shouldReleaseSession,
+                boolean shouldNotifyStop,
+                RoutingController controller);
+
+    }
+
+    /**
+     * Implements logic specific to proxy {@link MediaRouter2} instances.
+     *
+     * <p>A proxy {@link MediaRouter2} instance controls the routing of a different package and can
+     * be obtained by calling {@link #getInstance(Context, String)}. This requires {@link
+     * Manifest.permission#MEDIA_CONTENT_CONTROL MEDIA_CONTENT_CONTROL} permission.
+     *
+     * <p>Proxy routers behave differently than local routers. See {@link #getInstance(Context,
+     * String)} for more details.
+     */
+    private class ProxyMediaRouter2Impl implements MediaRouter2Impl {
+        // Fields originating from MediaRouter2Manager.
+        private final MediaRouter2Manager mManager;
+        private final IMediaRouter2Manager.Stub mClient;
+        private final CopyOnWriteArrayList<MediaRouter2Manager.TransferRequest>
+                mTransferRequests = new CopyOnWriteArrayList<>();
+
+        // Fields originating from MediaRouter2.
+        @NonNull private final String mClientPackageName;
+
+        // TODO(b/281072508): Implement scan request counting when MediaRouter2Manager is removed.
+        private final AtomicBoolean mIsScanning = new AtomicBoolean(/* initialValue= */ false);
+
+        ProxyMediaRouter2Impl(@NonNull Context context, @NonNull String clientPackageName) {
+            mManager = MediaRouter2Manager.getInstance(context.getApplicationContext());
+            mClientPackageName = clientPackageName;
+            mClient = new Client();
+
+            try {
+                mMediaRouterService.registerManager(
+                        mClient, context.getApplicationContext().getPackageName());
+            } catch (RemoteException ex) {
+                throw ex.rethrowFromSystemServer();
+            }
+
+            mDiscoveryPreference = RouteDiscoveryPreference.EMPTY;
         }
 
         @Override
-        public void onTransferred(
+        public void startScan() {
+            if (!mIsScanning.getAndSet(true)) {
+                mManager.registerScanRequest();
+            }
+        }
+
+        @Override
+        public void stopScan() {
+            if (mIsScanning.getAndSet(false)) {
+                mManager.unregisterScanRequest();
+            }
+        }
+
+        @Override
+        public String getClientPackageName() {
+            return mClientPackageName;
+        }
+
+        /**
+         * Returns {@code null}. This refers to the package name of the caller app, which is only
+         * relevant for local routers.
+         */
+        @Override
+        public String getPackageName() {
+            return null;
+        }
+
+        @Override
+        public RoutingSessionInfo getSystemSessionInfo() {
+            RoutingSessionInfo result;
+            try {
+                result =
+                        mMediaRouterService.getSystemSessionInfoForPackage(
+                                mClient, mClientPackageName);
+            } catch (RemoteException ex) {
+                throw ex.rethrowFromSystemServer();
+            }
+            return ensureClientPackageNameForSystemSession(result);
+        }
+
+        /**
+         * {@link RouteDiscoveryPreference Discovery preferences} are ignored for proxy routers, as
+         * their callbacks should receive events related to the media app's preferences. This is
+         * equivalent to setting {@link RouteDiscoveryPreference#EMPTY empty preferences}.
+         */
+        @Override
+        public RouteCallbackRecord createRouteCallbackRecord(
+                Executor executor,
+                RouteCallback routeCallback,
+                RouteDiscoveryPreference preference) {
+            return new RouteCallbackRecord(executor, routeCallback, RouteDiscoveryPreference.EMPTY);
+        }
+
+        /**
+         * No-op. Only local routers communicate directly with {@link
+         * com.android.server.media.MediaRouter2ServiceImpl MediaRouter2ServiceImpl} and modify
+         * {@link RouteDiscoveryPreference}. Proxy routers receive callbacks from {@link
+         * MediaRouter2Manager}.
+         */
+        @Override
+        public void registerRouteCallback() {
+            // Do nothing.
+        }
+
+        /** No-op. See {@link ProxyMediaRouter2Impl#registerRouteCallback()}. */
+        @Override
+        public void unregisterRouteCallback() {
+            // Do nothing.
+        }
+
+        @Override
+        public void setRouteListingPreference(@Nullable RouteListingPreference preference) {
+            throw new UnsupportedOperationException(
+                    "RouteListingPreference cannot be set by a privileged MediaRouter2 instance.");
+        }
+
+        @Override
+        public boolean showSystemOutputSwitcher() {
+            throw new UnsupportedOperationException(
+                    "Cannot show system output switcher from a privileged router.");
+        }
+
+        /** Gets the list of all discovered routes. */
+        @Override
+        public List<MediaRoute2Info> getAllRoutes() {
+            synchronized (mLock) {
+                return new ArrayList<>(mRoutes.values());
+            }
+        }
+
+        /** No-op. Controller hints can only be provided by the media app through a local router. */
+        @Override
+        public void setOnGetControllerHintsListener(OnGetControllerHintsListener listener) {
+            // Do nothing.
+        }
+
+        /**
+         * Transfers the current {@link RoutingSessionInfo routing session} associated with the
+         * router's {@link #mClientPackageName client package name} to a specified {@link
+         * MediaRoute2Info route}.
+         *
+         * <p>This method is equivalent to {@link #transfer(RoutingSessionInfo, MediaRoute2Info)},
+         * except that the {@link RoutingSessionInfo routing session} is resolved based on the
+         * router's {@link #mClientPackageName client package name}.
+         *
+         * @param route The route to transfer to.
+         */
+        @Override
+        public void transferTo(MediaRoute2Info route) {
+            Objects.requireNonNull(route, "route must not be null");
+
+            List<RoutingSessionInfo> sessionInfos = getRoutingSessions();
+            RoutingSessionInfo targetSession = sessionInfos.get(sessionInfos.size() - 1);
+            transfer(targetSession, route);
+        }
+
+        @Override
+        public void stop() {
+            List<RoutingSessionInfo> sessionInfos = getRoutingSessions();
+            RoutingSessionInfo sessionToRelease = sessionInfos.get(sessionInfos.size() - 1);
+            releaseSession(sessionToRelease);
+        }
+
+        /**
+         * Transfers a {@link RoutingSessionInfo routing session} to a {@link MediaRoute2Info
+         * route}.
+         *
+         * <p>{@link #onTransferred} is called on success or {@link #onTransferFailed} is called if
+         * the request fails.
+         *
+         * <p>This method will default for in-session transfer if the {@link MediaRoute2Info route}
+         * is a {@link RoutingSessionInfo#getTransferableRoutes() transferable route}. Otherwise, it
+         * will attempt an out-of-session transfer.
+         *
+         * @param sessionInfo The {@link RoutingSessionInfo routing session} to transfer.
+         * @param route The {@link MediaRoute2Info route} to transfer to.
+         * @see #transferToRoute(RoutingSessionInfo, MediaRoute2Info)
+         * @see #requestCreateSession(RoutingSessionInfo, MediaRoute2Info)
+         */
+        @Override
+        public void transfer(
+                @NonNull RoutingSessionInfo sessionInfo, @NonNull MediaRoute2Info route) {
+            Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
+            Objects.requireNonNull(route, "route must not be null");
+
+            Log.v(
+                    TAG,
+                    "Transferring routing session. session= " + sessionInfo + ", route=" + route);
+
+            boolean isUnknownRoute;
+            synchronized (mLock) {
+                isUnknownRoute = !mRoutes.containsKey(route.getId());
+            }
+
+            if (isUnknownRoute) {
+                Log.w(TAG, "transfer: Ignoring an unknown route id=" + route.getId());
+                this.onTransferFailed(sessionInfo, route);
+                return;
+            }
+
+            if (sessionInfo.getTransferableRoutes().contains(route.getId())) {
+                transferToRoute(sessionInfo, route);
+            } else {
+                requestCreateSession(sessionInfo, route);
+            }
+        }
+
+        /**
+         * Requests an in-session transfer of a {@link RoutingSessionInfo routing session} to a
+         * {@link MediaRoute2Info route}.
+         *
+         * <p>The provided {@link MediaRoute2Info route} must be listed in the {@link
+         * RoutingSessionInfo routing session's} {@link RoutingSessionInfo#getTransferableRoutes()
+         * transferable routes list}. Otherwise, the request will fail.
+         *
+         * <p>Use {@link #requestCreateSession(RoutingSessionInfo, MediaRoute2Info)} to request
+         * an out-of-session transfer.
+         *
+         * @param session The {@link RoutingSessionInfo routing session} to transfer.
+         * @param route The {@link MediaRoute2Info route} to transfer to. Must be one of the {@link
+         *     RoutingSessionInfo routing session's} {@link
+         *     RoutingSessionInfo#getTransferableRoutes() transferable routes}.
+         */
+        private void transferToRoute(
+                @NonNull RoutingSessionInfo session, @NonNull MediaRoute2Info route) {
+            int requestId = createTransferRequest(session, route);
+
+            try {
+                mMediaRouterService.transferToRouteWithManager(
+                        mClient, requestId, session.getId(), route);
+            } catch (RemoteException ex) {
+                throw ex.rethrowFromSystemServer();
+            }
+        }
+
+        /**
+         * Requests an out-of-session transfer of a {@link RoutingSessionInfo routing session} to a
+         * {@link MediaRoute2Info route}.
+         *
+         * <p>This request creates a new {@link RoutingSessionInfo routing session} regardless of
+         * whether the {@link MediaRoute2Info route} is one of the {@link RoutingSessionInfo current
+         * session's} {@link RoutingSessionInfo#getTransferableRoutes() transferable routes}.
+         *
+         * <p>Use {@link #transferToRoute(RoutingSessionInfo, MediaRoute2Info)} to request an
+         * in-session transfer.
+         *
+         * @param oldSession The {@link RoutingSessionInfo routing session} to transfer.
+         * @param route The {@link MediaRoute2Info route} to transfer to.
+         */
+        private void requestCreateSession(
+                @NonNull RoutingSessionInfo oldSession, @NonNull MediaRoute2Info route) {
+            if (TextUtils.isEmpty(oldSession.getClientPackageName())) {
+                Log.w(TAG, "requestCreateSession: Can't create a session without package name.");
+                this.onTransferFailed(oldSession, route);
+                return;
+            }
+
+            int requestId = createTransferRequest(oldSession, route);
+
+            try {
+                mMediaRouterService.requestCreateSessionWithManager(
+                        mClient, requestId, oldSession, route);
+            } catch (RemoteException ex) {
+                throw ex.rethrowFromSystemServer();
+            }
+        }
+
+        @Override
+        public List<RoutingController> getControllers() {
+            List<RoutingController> result = new ArrayList<>();
+
+            /* Unlike local MediaRouter2 instances, controller instances cannot be kept because
+            transfer events initiated from other apps will not come through manager.*/
+            List<RoutingSessionInfo> sessions = getRoutingSessions();
+            for (RoutingSessionInfo session : sessions) {
+                RoutingController controller;
+                if (session.isSystemSession()) {
+                    mSystemController.setRoutingSessionInfo(session);
+                    controller = mSystemController;
+                } else {
+                    controller = new RoutingController(session);
+                }
+                result.add(controller);
+            }
+            return result;
+        }
+
+        /**
+         * Requests a volume change for a {@link MediaRoute2Info route}.
+         *
+         * <p>It may have no effect if the {@link MediaRoute2Info route} is not currently selected.
+         *
+         * @param volume The desired volume value between 0 and {@link
+         *     MediaRoute2Info#getVolumeMax()} (inclusive).
+         */
+        @Override
+        public void setRouteVolume(@NonNull MediaRoute2Info route, int volume) {
+            if (route.getVolumeHandling() == MediaRoute2Info.PLAYBACK_VOLUME_FIXED) {
+                Log.w(TAG, "setRouteVolume: the route has fixed volume. Ignoring.");
+                return;
+            }
+            if (volume < 0 || volume > route.getVolumeMax()) {
+                Log.w(TAG, "setRouteVolume: the target volume is out of range. Ignoring");
+                return;
+            }
+
+            try {
+                int requestId = mNextRequestId.getAndIncrement();
+                mMediaRouterService.setRouteVolumeWithManager(mClient, requestId, route, volume);
+            } catch (RemoteException ex) {
+                throw ex.rethrowFromSystemServer();
+            }
+        }
+
+        /**
+         * Requests a volume change for a {@link RoutingSessionInfo routing session}.
+         *
+         * @param volume The desired volume value between 0 and {@link
+         *     RoutingSessionInfo#getVolumeMax()} (inclusive).
+         */
+        @Override
+        public void setSessionVolume(int volume, RoutingSessionInfo sessionInfo) {
+            Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
+
+            if (sessionInfo.getVolumeHandling() == MediaRoute2Info.PLAYBACK_VOLUME_FIXED) {
+                Log.w(TAG, "setSessionVolume: the route has fixed volume. Ignoring.");
+                return;
+            }
+            if (volume < 0 || volume > sessionInfo.getVolumeMax()) {
+                Log.w(TAG, "setSessionVolume: the target volume is out of range. Ignoring");
+                return;
+            }
+
+            try {
+                int requestId = mNextRequestId.getAndIncrement();
+                mMediaRouterService.setSessionVolumeWithManager(
+                        mClient, requestId, sessionInfo.getId(), volume);
+            } catch (RemoteException ex) {
+                throw ex.rethrowFromSystemServer();
+            }
+        }
+
+        /**
+         * Returns an exact copy of the routes. Individual {@link RouteDiscoveryPreference
+         * preferences} do not apply to proxy routers.
+         */
+        @Override
+        public List<MediaRoute2Info> filterRoutesWithIndividualPreference(
+                List<MediaRoute2Info> routes, RouteDiscoveryPreference discoveryPreference) {
+            // Individual discovery preferences do not apply for the system router.
+            return new ArrayList<>(routes);
+        }
+
+        /**
+         * Adds a {@linkplain MediaRoute2Info route} to the routing session's {@linkplain
+         * RoutingSessionInfo#getSelectedRoutes() selected route list}.
+         *
+         * <p>Upon success, {@link #onSessionUpdated(RoutingSessionInfo)} is invoked. Failed
+         * requests are silently ignored.
+         *
+         * <p>The {@linkplain RoutingSessionInfo#getSelectedRoutes() selected routes list} of a
+         * routing session contains the group of devices playing media for that {@linkplain
+         * RoutingSessionInfo session}.
+         *
+         * <p>The given route must not be already selected and must be listed in the session's
+         * {@linkplain RoutingSessionInfo#getSelectableRoutes() selectable routes}. Otherwise, the
+         * request will be ignored.
+         *
+         * <p>This method should not be confused with {@link #transfer(RoutingSessionInfo,
+         * MediaRoute2Info)}.
+         *
+         * @see RoutingSessionInfo#getSelectedRoutes()
+         * @see RoutingSessionInfo#getSelectableRoutes()
+         */
+        @Override
+        public void selectRoute(MediaRoute2Info route, RoutingSessionInfo sessionInfo) {
+            Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
+            Objects.requireNonNull(route, "route must not be null");
+
+            if (sessionInfo.getSelectedRoutes().contains(route.getId())) {
+                Log.w(TAG, "Ignoring selecting a route that is already selected. route=" + route);
+                return;
+            }
+
+            if (!sessionInfo.getSelectableRoutes().contains(route.getId())) {
+                Log.w(TAG, "Ignoring selecting a non-selectable route=" + route);
+                return;
+            }
+
+            try {
+                int requestId = mNextRequestId.getAndIncrement();
+                mMediaRouterService.selectRouteWithManager(
+                        mClient, requestId, sessionInfo.getId(), route);
+            } catch (RemoteException ex) {
+                throw ex.rethrowFromSystemServer();
+            }
+        }
+
+        /**
+         * Removes a route from a session's {@linkplain RoutingSessionInfo#getSelectedRoutes()
+         * selected routes list}. Calls {@link #onSessionUpdated(RoutingSessionInfo)} on success.
+         *
+         * <p>The given route must be selected and must be listed in the session's {@linkplain
+         * RoutingSessionInfo#getDeselectableRoutes() deselectable route list}. Otherwise, the
+         * request will be ignored.
+         *
+         * @see RoutingSessionInfo#getSelectedRoutes()
+         * @see RoutingSessionInfo#getDeselectableRoutes()
+         */
+        @Override
+        public void deselectRoute(MediaRoute2Info route, RoutingSessionInfo sessionInfo) {
+            Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
+            Objects.requireNonNull(route, "route must not be null");
+
+            if (!sessionInfo.getSelectedRoutes().contains(route.getId())) {
+                Log.w(TAG, "Ignoring deselecting a route that is not selected. route=" + route);
+                return;
+            }
+
+            if (!sessionInfo.getDeselectableRoutes().contains(route.getId())) {
+                Log.w(TAG, "Ignoring deselecting a non-deselectable route=" + route);
+                return;
+            }
+
+            try {
+                int requestId = mNextRequestId.getAndIncrement();
+                mMediaRouterService.deselectRouteWithManager(
+                        mClient, requestId, sessionInfo.getId(), route);
+            } catch (RemoteException ex) {
+                throw ex.rethrowFromSystemServer();
+            }
+        }
+
+        @Override
+        public void releaseSession(
+                boolean shouldReleaseSession,
+                boolean shouldNotifyStop,
+                RoutingController controller) {
+            releaseSession(controller.getRoutingSessionInfo());
+        }
+
+        /**
+         * Sets the routing session's {@linkplain RoutingSessionInfo#getClientPackageName() client
+         * package name} to {@link #mClientPackageName} if empty and returns the session.
+         *
+         * <p>This method must only be used for {@linkplain RoutingSessionInfo#isSystemSession()
+         * system routing sessions}.
+         */
+        private RoutingSessionInfo ensureClientPackageNameForSystemSession(
+                RoutingSessionInfo sessionInfo) {
+            if (!sessionInfo.isSystemSession()
+                    || !TextUtils.isEmpty(sessionInfo.getClientPackageName())) {
+                return sessionInfo;
+            }
+
+            return new RoutingSessionInfo.Builder(sessionInfo)
+                    .setClientPackageName(mClientPackageName)
+                    .build();
+        }
+
+        /**
+         * Requests the release of a {@linkplain RoutingSessionInfo routing session}. Calls {@link
+         * #onSessionReleasedOnHandler(RoutingSessionInfo)} on success.
+         *
+         * <p>Once released, a routing session ignores incoming requests.
+         */
+        private void releaseSession(@NonNull RoutingSessionInfo sessionInfo) {
+            Objects.requireNonNull(sessionInfo, "sessionInfo must not be null");
+
+            try {
+                int requestId = mNextRequestId.getAndIncrement();
+                mMediaRouterService.releaseSessionWithManager(
+                        mClient, requestId, sessionInfo.getId());
+            } catch (RemoteException ex) {
+                throw ex.rethrowFromSystemServer();
+            }
+        }
+
+        private int createTransferRequest(
+                @NonNull RoutingSessionInfo session, @NonNull MediaRoute2Info route) {
+            int requestId = mNextRequestId.getAndIncrement();
+            MediaRouter2Manager.TransferRequest transferRequest =
+                    new MediaRouter2Manager.TransferRequest(requestId, session, route);
+            mTransferRequests.add(transferRequest);
+
+            Message timeoutMessage =
+                    obtainMessage(
+                            ProxyMediaRouter2Impl::handleTransferTimeout, this, transferRequest);
+            mHandler.sendMessageDelayed(timeoutMessage, TRANSFER_TIMEOUT_MS);
+            return requestId;
+        }
+
+        private void handleTransferTimeout(MediaRouter2Manager.TransferRequest request) {
+            boolean removed = mTransferRequests.remove(request);
+            if (removed) {
+                this.onTransferFailed(request.mOldSessionInfo, request.mTargetRoute);
+            }
+        }
+
+        /**
+         * Returns the {@linkplain RoutingSessionInfo routing sessions} associated with {@link
+         * #mClientPackageName}. The first element of the returned list is the {@linkplain
+         * #getSystemSessionInfo() system routing session}.
+         *
+         * @see #getSystemSessionInfo()
+         */
+        @NonNull
+        private List<RoutingSessionInfo> getRoutingSessions() {
+            List<RoutingSessionInfo> sessions = new ArrayList<>();
+            sessions.add(getSystemSessionInfo());
+
+            List<RoutingSessionInfo> remoteSessions;
+            try {
+                remoteSessions = mMediaRouterService.getRemoteSessions(mClient);
+            } catch (RemoteException ex) {
+                throw ex.rethrowFromSystemServer();
+            }
+
+            for (RoutingSessionInfo sessionInfo : remoteSessions) {
+                if (TextUtils.equals(sessionInfo.getClientPackageName(), mClientPackageName)) {
+                    sessions.add(sessionInfo);
+                }
+            }
+            return sessions;
+        }
+
+        private void onTransferred(
                 @NonNull RoutingSessionInfo oldSession, @NonNull RoutingSessionInfo newSession) {
             if (!oldSession.isSystemSession()
-                    && !TextUtils.equals(mClientPackageName, oldSession.getClientPackageName())) {
+                    && !TextUtils.equals(
+                            getClientPackageName(), oldSession.getClientPackageName())) {
                 return;
             }
 
             if (!newSession.isSystemSession()
-                    && !TextUtils.equals(mClientPackageName, newSession.getClientPackageName())) {
+                    && !TextUtils.equals(
+                            getClientPackageName(), newSession.getClientPackageName())) {
                 return;
             }
 
@@ -2165,20 +2535,18 @@
             notifyTransfer(oldController, newController);
         }
 
-        @Override
-        public void onTransferFailed(
+        private void onTransferFailed(
                 @NonNull RoutingSessionInfo session, @NonNull MediaRoute2Info route) {
             if (!session.isSystemSession()
-                    && !TextUtils.equals(mClientPackageName, session.getClientPackageName())) {
+                    && !TextUtils.equals(getClientPackageName(), session.getClientPackageName())) {
                 return;
             }
             notifyTransferFailure(route);
         }
 
-        @Override
-        public void onSessionUpdated(@NonNull RoutingSessionInfo session) {
+        private void onSessionUpdated(@NonNull RoutingSessionInfo session) {
             if (!session.isSystemSession()
-                    && !TextUtils.equals(mClientPackageName, session.getClientPackageName())) {
+                    && !TextUtils.equals(getClientPackageName(), session.getClientPackageName())) {
                 return;
             }
 
@@ -2193,37 +2561,534 @@
             notifyControllerUpdated(controller);
         }
 
-        @Override
-        public void onSessionReleased(@NonNull RoutingSessionInfo session) {
-            if (session.isSystemSession()) {
-                Log.e(TAG, "onSessionReleased: Called on system session. Ignoring.");
+        private void onSessionCreatedOnHandler(
+                int requestId, @NonNull RoutingSessionInfo sessionInfo) {
+            MediaRouter2Manager.TransferRequest matchingRequest = null;
+            for (MediaRouter2Manager.TransferRequest request : mTransferRequests) {
+                if (request.mRequestId == requestId) {
+                    matchingRequest = request;
+                    break;
+                }
+            }
+
+            if (matchingRequest == null) {
                 return;
             }
 
-            if (!TextUtils.equals(mClientPackageName, session.getClientPackageName())) {
+            mTransferRequests.remove(matchingRequest);
+
+            MediaRoute2Info requestedRoute = matchingRequest.mTargetRoute;
+
+            if (!sessionInfo.getSelectedRoutes().contains(requestedRoute.getId())) {
+                Log.w(
+                        TAG,
+                        "The session does not contain the requested route. "
+                                + "(requestedRouteId="
+                                + requestedRoute.getId()
+                                + ", actualRoutes="
+                                + sessionInfo.getSelectedRoutes()
+                                + ")");
+                this.onTransferFailed(matchingRequest.mOldSessionInfo, requestedRoute);
+            } else if (!TextUtils.equals(
+                    requestedRoute.getProviderId(), sessionInfo.getProviderId())) {
+                Log.w(
+                        TAG,
+                        "The session's provider ID does not match the requested route's. "
+                                + "(requested route's providerId="
+                                + requestedRoute.getProviderId()
+                                + ", actual providerId="
+                                + sessionInfo.getProviderId()
+                                + ")");
+                this.onTransferFailed(matchingRequest.mOldSessionInfo, requestedRoute);
+            } else {
+                this.onTransferred(matchingRequest.mOldSessionInfo, sessionInfo);
+            }
+        }
+
+        private void onSessionUpdatedOnHandler(@NonNull RoutingSessionInfo sessionInfo) {
+            for (MediaRouter2Manager.TransferRequest request : mTransferRequests) {
+                String sessionId = request.mOldSessionInfo.getId();
+                if (!TextUtils.equals(sessionId, sessionInfo.getId())) {
+                    continue;
+                }
+                if (sessionInfo.getSelectedRoutes().contains(request.mTargetRoute.getId())) {
+                    mTransferRequests.remove(request);
+                    this.onTransferred(request.mOldSessionInfo, sessionInfo);
+                    break;
+                }
+            }
+            this.onSessionUpdated(sessionInfo);
+        }
+
+        private void onSessionReleasedOnHandler(@NonNull RoutingSessionInfo session) {
+            if (session.isSystemSession()) {
+                Log.e(TAG, "onSessionReleasedOnHandler: Called on system session. Ignoring.");
+                return;
+            }
+
+            if (!TextUtils.equals(getClientPackageName(), session.getClientPackageName())) {
                 return;
             }
 
             notifyStop(new RoutingController(session, RoutingController.CONTROLLER_STATE_RELEASED));
         }
 
-        @Override
-        public void onDiscoveryPreferenceChanged(
-                @NonNull String packageName, @NonNull RouteDiscoveryPreference preference) {
-            if (!TextUtils.equals(mClientPackageName, packageName)) {
+        private void onDiscoveryPreferenceChangedOnHandler(
+                @NonNull String packageName, @Nullable RouteDiscoveryPreference preference) {
+            if (!TextUtils.equals(getClientPackageName(), packageName)) {
+                return;
+            }
+
+            if (preference == null) {
+                return;
+            }
+            synchronized (mLock) {
+                if (Objects.equals(preference, mDiscoveryPreference)) {
+                    return;
+                }
+                mDiscoveryPreference = preference;
+                updateFilteredRoutesLocked();
+            }
+            notifyPreferredFeaturesChanged(preference.getPreferredFeatures());
+        }
+
+        private void onRouteListingPreferenceChangedOnHandler(
+                @NonNull String packageName,
+                @Nullable RouteListingPreference routeListingPreference) {
+            if (!TextUtils.equals(getClientPackageName(), packageName)) {
                 return;
             }
 
             synchronized (mLock) {
-                mDiscoveryPreference = preference;
+                if (Objects.equals(mRouteListingPreference, routeListingPreference)) {
+                    return;
+                }
+
+                mRouteListingPreference = routeListingPreference;
             }
-            updateAllRoutesFromManager();
-            notifyPreferredFeaturesChanged(preference.getPreferredFeatures());
+
+            notifyRouteListingPreferenceUpdated(routeListingPreference);
+        }
+
+        private void onRoutesUpdatedOnHandler(@NonNull List<MediaRoute2Info> routes) {
+            synchronized (mLock) {
+                mRoutes.clear();
+                for (MediaRoute2Info route : routes) {
+                    mRoutes.put(route.getId(), route);
+                }
+                updateFilteredRoutesLocked();
+            }
+        }
+
+        private void onRequestFailedOnHandler(int requestId, int reason) {
+            MediaRouter2Manager.TransferRequest matchingRequest = null;
+            for (MediaRouter2Manager.TransferRequest request : mTransferRequests) {
+                if (request.mRequestId == requestId) {
+                    matchingRequest = request;
+                    break;
+                }
+            }
+
+            if (matchingRequest != null) {
+                mTransferRequests.remove(matchingRequest);
+                onTransferFailed(matchingRequest.mOldSessionInfo, matchingRequest.mTargetRoute);
+            } else {
+                notifyRequestFailed(reason);
+            }
+        }
+
+        private class Client extends IMediaRouter2Manager.Stub {
+
+            @Override
+            public void notifySessionCreated(int requestId, RoutingSessionInfo routingSessionInfo) {
+                mHandler.sendMessage(
+                        obtainMessage(
+                                ProxyMediaRouter2Impl::onSessionCreatedOnHandler,
+                                ProxyMediaRouter2Impl.this,
+                                requestId,
+                                routingSessionInfo));
+            }
+
+            @Override
+            public void notifySessionUpdated(RoutingSessionInfo routingSessionInfo) {
+                mHandler.sendMessage(
+                        obtainMessage(
+                                ProxyMediaRouter2Impl::onSessionUpdatedOnHandler,
+                                ProxyMediaRouter2Impl.this,
+                                routingSessionInfo));
+            }
+
+            @Override
+            public void notifySessionReleased(RoutingSessionInfo routingSessionInfo) {
+                mHandler.sendMessage(
+                        obtainMessage(
+                                ProxyMediaRouter2Impl::onSessionReleasedOnHandler,
+                                ProxyMediaRouter2Impl.this,
+                                routingSessionInfo));
+            }
+
+            @Override
+            public void notifyDiscoveryPreferenceChanged(
+                    String packageName, RouteDiscoveryPreference routeDiscoveryPreference) {
+                mHandler.sendMessage(
+                        obtainMessage(
+                                ProxyMediaRouter2Impl::onDiscoveryPreferenceChangedOnHandler,
+                                ProxyMediaRouter2Impl.this,
+                                packageName,
+                                routeDiscoveryPreference));
+            }
+
+            @Override
+            public void notifyRouteListingPreferenceChange(
+                    String packageName, RouteListingPreference routeListingPreference) {
+                mHandler.sendMessage(
+                        obtainMessage(
+                                ProxyMediaRouter2Impl::onRouteListingPreferenceChangedOnHandler,
+                                ProxyMediaRouter2Impl.this,
+                                packageName,
+                                routeListingPreference));
+            }
+
+            @Override
+            public void notifyRoutesUpdated(List<MediaRoute2Info> routes) {
+                mHandler.sendMessage(
+                        obtainMessage(
+                                ProxyMediaRouter2Impl::onRoutesUpdatedOnHandler,
+                                ProxyMediaRouter2Impl.this,
+                                routes));
+            }
+
+            @Override
+            public void notifyRequestFailed(int requestId, int reason) {
+                mHandler.sendMessage(
+                        obtainMessage(
+                                ProxyMediaRouter2Impl::onRequestFailedOnHandler,
+                                ProxyMediaRouter2Impl.this,
+                                requestId,
+                                reason));
+            }
+        }
+    }
+
+    /**
+     * Implements logic specific to local {@link MediaRouter2} instances.
+     *
+     * <p>Local routers allow an app to control its own routing without any special permissions.
+     * Apps can obtain an instance by calling {@link #getInstance(Context)}.
+     */
+    private class LocalMediaRouter2Impl implements MediaRouter2Impl {
+        private final String mPackageName;
+
+        LocalMediaRouter2Impl(@NonNull String packageName) {
+            mPackageName = packageName;
+        }
+
+        /**
+         * No-op. Local routers cannot explicitly control route scanning.
+         *
+         * <p>Local routers can control scanning indirectly through {@link
+         * #registerRouteCallback(Executor, RouteCallback, RouteDiscoveryPreference)}.
+         */
+        @Override
+        public void startScan() {
+            // Do nothing.
+        }
+
+        /**
+         * No-op. Local routers cannot explicitly control route scanning.
+         *
+         * <p>Local routers can control scanning indirectly through {@link
+         * #registerRouteCallback(Executor, RouteCallback, RouteDiscoveryPreference)}.
+         */
+        @Override
+        public void stopScan() {
+            // Do nothing.
+        }
+
+        /**
+         * Returns {@code null}. The client package name is only associated to proxy {@link
+         * MediaRouter2} instances.
+         */
+        @Override
+        public String getClientPackageName() {
+            return null;
         }
 
         @Override
-        public void onRequestFailed(int reason) {
-            // Does nothing.
+        public String getPackageName() {
+            return mPackageName;
         }
+
+        @Override
+        public RoutingSessionInfo getSystemSessionInfo() {
+            RoutingSessionInfo currentSystemSessionInfo = null;
+            try {
+                currentSystemSessionInfo = mMediaRouterService.getSystemSessionInfo();
+            } catch (RemoteException ex) {
+                ex.rethrowFromSystemServer();
+            }
+            return currentSystemSessionInfo;
+        }
+
+        @Override
+        public RouteCallbackRecord createRouteCallbackRecord(
+                Executor executor,
+                RouteCallback routeCallback,
+                RouteDiscoveryPreference preference) {
+            return new RouteCallbackRecord(executor, routeCallback, preference);
+        }
+
+        @Override
+        public void registerRouteCallback() {
+            synchronized (mLock) {
+                try {
+                    if (mStub == null) {
+                        MediaRouter2Stub stub = new MediaRouter2Stub();
+                        mMediaRouterService.registerRouter2(stub, mPackageName);
+                        mStub = stub;
+                    }
+
+                    if (updateDiscoveryPreferenceIfNeededLocked()) {
+                        mMediaRouterService.setDiscoveryRequestWithRouter2(
+                                mStub, mDiscoveryPreference);
+                    }
+                } catch (RemoteException ex) {
+                    ex.rethrowFromSystemServer();
+                }
+            }
+        }
+
+        @Override
+        public void unregisterRouteCallback() {
+            synchronized (mLock) {
+                if (mStub == null) {
+                    return;
+                }
+
+                try {
+                    if (updateDiscoveryPreferenceIfNeededLocked()) {
+                        mMediaRouterService.setDiscoveryRequestWithRouter2(
+                                mStub, mDiscoveryPreference);
+                    }
+
+                    if (mRouteCallbackRecords.isEmpty() && mNonSystemRoutingControllers.isEmpty()) {
+                        mMediaRouterService.unregisterRouter2(mStub);
+                        mStub = null;
+                    }
+                } catch (RemoteException ex) {
+                    Log.e(TAG, "unregisterRouteCallback: Unable to set discovery request.", ex);
+                }
+            }
+        }
+
+        @Override
+        public void setRouteListingPreference(@Nullable RouteListingPreference preference) {
+            synchronized (mLock) {
+                if (Objects.equals(mRouteListingPreference, preference)) {
+                    // Nothing changed. We return early to save a call to the system server.
+                    return;
+                }
+                mRouteListingPreference = preference;
+                try {
+                    if (mStub == null) {
+                        MediaRouter2Stub stub = new MediaRouter2Stub();
+                        mMediaRouterService.registerRouter2(stub, mImpl.getPackageName());
+                        mStub = stub;
+                    }
+                    mMediaRouterService.setRouteListingPreference(mStub, mRouteListingPreference);
+                } catch (RemoteException ex) {
+                    ex.rethrowFromSystemServer();
+                }
+                notifyRouteListingPreferenceUpdated(preference);
+            }
+        }
+
+        @Override
+        public boolean showSystemOutputSwitcher() {
+            synchronized (mLock) {
+                try {
+                    return mMediaRouterService.showMediaOutputSwitcher(mImpl.getPackageName());
+                } catch (RemoteException ex) {
+                    ex.rethrowFromSystemServer();
+                }
+            }
+            return false;
+        }
+
+        /**
+         * Returns {@link Collections#emptyList()}. Local routes can only access routes related to
+         * their {@link RouteDiscoveryPreference} through {@link #getRoutes()}.
+         */
+        @Override
+        public List<MediaRoute2Info> getAllRoutes() {
+            return Collections.emptyList();
+        }
+
+        @Override
+        public void setOnGetControllerHintsListener(OnGetControllerHintsListener listener) {
+            mOnGetControllerHintsListener = listener;
+        }
+
+        @Override
+        public void transferTo(MediaRoute2Info route) {
+            Log.v(TAG, "Transferring to route: " + route);
+
+            boolean routeFound;
+            synchronized (mLock) {
+                // TODO: Check thread-safety
+                routeFound = mRoutes.containsKey(route.getId());
+            }
+            if (!routeFound) {
+                notifyTransferFailure(route);
+                return;
+            }
+
+            RoutingController controller = getCurrentController();
+            if (controller
+                    .getRoutingSessionInfo()
+                    .getTransferableRoutes()
+                    .contains(route.getId())) {
+                controller.transferToRoute(route);
+                return;
+            }
+
+            requestCreateController(controller, route, MANAGER_REQUEST_ID_NONE);
+        }
+
+        @Override
+        public void stop() {
+            getCurrentController().release();
+        }
+
+        /**
+         * No-op. Local routers cannot request transfers of specific {@link RoutingSessionInfo}.
+         * This operation is only available to proxy routers.
+         *
+         * <p>Local routers can only transfer the current {@link RoutingSessionInfo} using {@link
+         * #transferTo(MediaRoute2Info)}.
+         */
+        @Override
+        public void transfer(RoutingSessionInfo sessionInfo, MediaRoute2Info route) {
+            // Do nothing.
+        }
+
+        @Override
+        public List<RoutingController> getControllers() {
+            List<RoutingController> result = new ArrayList<>();
+
+            result.add(0, mSystemController);
+            synchronized (mLock) {
+                result.addAll(mNonSystemRoutingControllers.values());
+            }
+            return result;
+        }
+
+        /** No-op. Local routers cannot modify the volume of specific routes. */
+        @Override
+        public void setRouteVolume(MediaRoute2Info route, int volume) {
+            // Do nothing.
+            // If this API needs to be public, use IMediaRouterService#setRouteVolumeWithRouter2()
+        }
+
+        @Override
+        public void setSessionVolume(int volume, RoutingSessionInfo sessionInfo) {
+            MediaRouter2Stub stub;
+            synchronized (mLock) {
+                stub = mStub;
+            }
+            if (stub != null) {
+                try {
+                    mMediaRouterService.setSessionVolumeWithRouter2(
+                            stub, sessionInfo.getId(), volume);
+                } catch (RemoteException ex) {
+                    Log.e(TAG, "setVolume: Failed to deliver request.", ex);
+                }
+            }
+        }
+
+        @Override
+        public List<MediaRoute2Info> filterRoutesWithIndividualPreference(
+                List<MediaRoute2Info> routes, RouteDiscoveryPreference discoveryPreference) {
+            List<MediaRoute2Info> filteredRoutes = new ArrayList<>();
+            for (MediaRoute2Info route : routes) {
+                if (!route.hasAnyFeatures(discoveryPreference.getPreferredFeatures())) {
+                    continue;
+                }
+                if (!discoveryPreference.getAllowedPackages().isEmpty()
+                        && (route.getPackageName() == null
+                                || !discoveryPreference
+                                        .getAllowedPackages()
+                                        .contains(route.getPackageName()))) {
+                    continue;
+                }
+                filteredRoutes.add(route);
+            }
+            return filteredRoutes;
+        }
+
+        @Override
+        public void selectRoute(MediaRoute2Info route, RoutingSessionInfo sessionInfo) {
+            MediaRouter2Stub stub;
+            synchronized (mLock) {
+                stub = mStub;
+            }
+            if (stub != null) {
+                try {
+                    mMediaRouterService.selectRouteWithRouter2(stub, sessionInfo.getId(), route);
+                } catch (RemoteException ex) {
+                    Log.e(TAG, "Unable to select route for session.", ex);
+                }
+            }
+        }
+
+        @Override
+        public void deselectRoute(MediaRoute2Info route, RoutingSessionInfo sessionInfo) {
+            MediaRouter2Stub stub;
+            synchronized (mLock) {
+                stub = mStub;
+            }
+            if (stub != null) {
+                try {
+                    mMediaRouterService.deselectRouteWithRouter2(stub, sessionInfo.getId(), route);
+                } catch (RemoteException ex) {
+                    Log.e(TAG, "Unable to deselect route from session.", ex);
+                }
+            }
+        }
+
+        @Override
+        public void releaseSession(
+                boolean shouldReleaseSession,
+                boolean shouldNotifyStop,
+                RoutingController controller) {
+            synchronized (mLock) {
+                mNonSystemRoutingControllers.remove(controller.getId(), controller);
+
+                if (shouldReleaseSession && mStub != null) {
+                    try {
+                        mMediaRouterService.releaseSessionWithRouter2(mStub, controller.getId());
+                    } catch (RemoteException ex) {
+                        ex.rethrowFromSystemServer();
+                    }
+                }
+
+                if (shouldNotifyStop) {
+                    mHandler.sendMessage(
+                            obtainMessage(MediaRouter2::notifyStop, MediaRouter2.this, controller));
+                }
+
+                if (mRouteCallbackRecords.isEmpty()
+                        && mNonSystemRoutingControllers.isEmpty()
+                        && mStub != null) {
+                    try {
+                        mMediaRouterService.unregisterRouter2(mStub);
+                    } catch (RemoteException ex) {
+                        ex.rethrowFromSystemServer();
+                    }
+                    mStub = null;
+                }
+            }
+        }
+
     }
 }
diff --git a/media/java/android/media/Ringtone.java b/media/java/android/media/Ringtone.java
index e78dc31..0319f32 100644
--- a/media/java/android/media/Ringtone.java
+++ b/media/java/android/media/Ringtone.java
@@ -16,27 +16,32 @@
 
 package android.media;
 
+import android.Manifest;
+import android.annotation.IntDef;
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.ContentProvider;
 import android.content.ContentResolver;
 import android.content.Context;
-import android.content.res.AssetFileDescriptor;
-import android.content.res.Resources.NotFoundException;
+import android.content.pm.PackageManager;
 import android.database.Cursor;
 import android.media.audiofx.HapticGenerator;
 import android.net.Uri;
-import android.os.Binder;
-import android.os.Build;
 import android.os.RemoteException;
+import android.os.SystemProperties;
 import android.os.Trace;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
 import android.provider.MediaStore;
 import android.provider.MediaStore.MediaColumns;
 import android.provider.Settings;
 import android.util.Log;
+
 import com.android.internal.annotations.VisibleForTesting;
-import java.io.IOException;
-import java.util.ArrayList;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 
 /**
  * Ringtone provides a quick method for playing a ringtone, notification, or
@@ -49,7 +54,39 @@
  */
 public class Ringtone {
     private static final String TAG = "Ringtone";
-    private static final boolean LOGD = true;
+
+    /**
+     * The ringtone should only play sound. Any vibration is managed externally.
+     * @hide
+     */
+    public static final int MEDIA_SOUND = 1;
+    /**
+     * The ringtone should only play vibration. Any sound is managed externally.
+     * Requires the {@link android.Manifest.permission#VIBRATE} permission.
+     * @hide
+     */
+    public static final int MEDIA_VIBRATION = 1 << 1;
+    /**
+     * The ringtone should play sound and vibration.
+     * @hide
+     */
+    public static final int MEDIA_SOUND_AND_VIBRATION = MEDIA_SOUND | MEDIA_VIBRATION;
+
+    // This is not a public value, because apps shouldn't enable "all" media - that wouldn't be
+    // safe if new media types were added.
+    static final int MEDIA_ALL = MEDIA_SOUND | MEDIA_VIBRATION;
+
+    /**
+     * Declares the types of media that this Ringtone is allowed to play.
+     * @hide
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = "MEDIA_", value = {
+            MEDIA_SOUND,
+            MEDIA_VIBRATION,
+            MEDIA_SOUND_AND_VIBRATION,
+    })
+    public @interface RingtoneMedia {}
 
     private static final String[] MEDIA_COLUMNS = new String[] {
         MediaStore.Audio.Media._ID,
@@ -59,51 +96,70 @@
     private static final String MEDIA_SELECTION = MediaColumns.MIME_TYPE + " LIKE 'audio/%' OR "
             + MediaColumns.MIME_TYPE + " IN ('application/ogg', 'application/x-flac')";
 
-    // keep references on active Ringtones until stopped or completion listener called.
-    private static final ArrayList<Ringtone> sActiveRingtones = new ArrayList<Ringtone>();
-
-    private final Context mContext;
-    private final AudioManager mAudioManager;
-    private VolumeShaper.Configuration mVolumeShaperConfig;
-    private VolumeShaper mVolumeShaper;
-
-    /**
-     * Flag indicating if we're allowed to fall back to remote playback using
-     * {@link #mRemotePlayer}. Typically this is false when we're the remote
-     * player and there is nobody else to delegate to.
-     */
-    private final boolean mAllowRemote;
-    private final IRingtonePlayer mRemotePlayer;
-    private final Binder mRemoteToken;
-
-    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
-    private MediaPlayer mLocalPlayer;
-    private final MyOnCompletionListener mCompletionListener = new MyOnCompletionListener();
-    private HapticGenerator mHapticGenerator;
-
-    @UnsupportedAppUsage
-    private Uri mUri;
-    private String mTitle;
-
-    private AudioAttributes mAudioAttributes = new AudioAttributes.Builder()
-            .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
-            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
-            .build();
-    private boolean mPreferBuiltinDevice;
-    // playback properties, use synchronized with mPlaybackSettingsLock
-    private boolean mIsLooping = false;
-    private float mVolume = 1.0f;
-    private boolean mHapticGeneratorEnabled = false;
-    private final Object mPlaybackSettingsLock = new Object();
+    // Flag-selected ringtone implementation to use.
+    private final ApiInterface mApiImpl;
 
     /** {@hide} */
     @UnsupportedAppUsage
     public Ringtone(Context context, boolean allowRemote) {
-        mContext = context;
-        mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
-        mAllowRemote = allowRemote;
-        mRemotePlayer = allowRemote ? mAudioManager.getRingtonePlayer() : null;
-        mRemoteToken = allowRemote ? new Binder() : null;
+        mApiImpl = new RingtoneV1(context, allowRemote);
+    }
+
+    /**
+     * Constructor for legacy V1 initialization paths using non-public APIs on RingtoneV1.
+     */
+    private Ringtone(RingtoneV1 ringtoneV1) {
+        mApiImpl = ringtoneV1;
+    }
+
+    private Ringtone(Builder builder, @Ringtone.RingtoneMedia int effectiveEnabledMedia,
+            @NonNull AudioAttributes effectiveAudioAttributes,
+            @Nullable VibrationEffect effectiveVibrationEffect,
+            boolean effectiveHapticGeneratorEnabled) {
+        mApiImpl = new RingtoneV2(builder.mContext, builder.mInjectables, builder.mAllowRemote,
+                effectiveEnabledMedia, builder.mUri, effectiveAudioAttributes,
+                builder.mUseExactAudioAttributes, builder.mVolumeShaperConfig,
+                builder.mPreferBuiltinDevice, builder.mInitialSoundVolume, builder.mLooping,
+                effectiveHapticGeneratorEnabled, effectiveVibrationEffect);
+    }
+
+    /**
+     * Temporary V1 constructor for legacy V1 paths with audio attributes.
+     * @hide
+     */
+    public static Ringtone createV1WithCustomAudioAttributes(
+            Context context, AudioAttributes audioAttributes, Uri uri,
+            VolumeShaper.Configuration volumeShaperConfig, boolean allowRemote) {
+        RingtoneV1 ringtoneV1 = new RingtoneV1(context, allowRemote);
+        ringtoneV1.setAudioAttributesField(audioAttributes);
+        ringtoneV1.setUri(uri, volumeShaperConfig);
+        ringtoneV1.reinitializeActivePlayer();
+        return new Ringtone(ringtoneV1);
+    }
+
+    /**
+     * Temporary V1 constructor for legacy V1 paths with stream type.
+     * @hide
+     */
+    public static Ringtone createV1WithCustomStreamType(
+            Context context, int streamType, Uri uri,
+            VolumeShaper.Configuration volumeShaperConfig) {
+        RingtoneV1 ringtoneV1 = new RingtoneV1(context, /* allowRemote= */ true);
+        if (streamType >= 0) {
+            ringtoneV1.setStreamType(streamType);
+        }
+        ringtoneV1.setUri(uri, volumeShaperConfig);
+        if (!ringtoneV1.reinitializeActivePlayer()) {
+            Log.e(TAG, "Failed to open ringtone " + uri);
+            return null;
+        }
+        return new Ringtone(ringtoneV1);
+    }
+
+    /** @hide */
+    @RingtoneMedia
+    public int getEnabledMedia() {
+        return mApiImpl.getEnabledMedia();
     }
 
     /**
@@ -114,10 +170,7 @@
      */
     @Deprecated
     public void setStreamType(int streamType) {
-        PlayerBase.deprecateStreamTypeForPlayback(streamType, "Ringtone", "setStreamType()");
-        setAudioAttributes(new AudioAttributes.Builder()
-                .setInternalLegacyStreamType(streamType)
-                .build());
+        mApiImpl.setStreamType(streamType);
     }
 
     /**
@@ -129,7 +182,7 @@
      */
     @Deprecated
     public int getStreamType() {
-        return AudioAttributes.toLegacyStreamType(mAudioAttributes);
+        return mApiImpl.getStreamType();
     }
 
     /**
@@ -138,54 +191,45 @@
      */
     public void setAudioAttributes(AudioAttributes attributes)
             throws IllegalArgumentException {
-        setAudioAttributesField(attributes);
-        // The audio attributes have to be set before the media player is prepared.
-        // Re-initialize it.
-        setUri(mUri, mVolumeShaperConfig);
-        createLocalMediaPlayer();
+        mApiImpl.setAudioAttributes(attributes);
     }
 
     /**
-     * Same as {@link #setAudioAttributes(AudioAttributes)} except this one does not create
-     * the media player.
+     * Returns the vibration effect that this ringtone was created with, if vibration is enabled.
+     * Otherwise, returns null.
      * @hide
      */
-    public void setAudioAttributesField(@Nullable AudioAttributes attributes) {
-        if (attributes == null) {
-            throw new IllegalArgumentException("Invalid null AudioAttributes for Ringtone");
-        }
-        mAudioAttributes = attributes;
+    @Nullable
+    public VibrationEffect getVibrationEffect() {
+        return mApiImpl.getVibrationEffect();
+    }
+
+    /** @hide */
+    @VisibleForTesting
+    public boolean getPreferBuiltinDevice() {
+        return mApiImpl.getPreferBuiltinDevice();
+    }
+
+    /** @hide */
+    @VisibleForTesting
+    public VolumeShaper.Configuration getVolumeShaperConfig() {
+        return mApiImpl.getVolumeShaperConfig();
     }
 
     /**
-     * Finds the output device of type {@link AudioDeviceInfo#TYPE_BUILTIN_SPEAKER}. This device is
-     * the one on which outgoing audio for SIM calls is played.
-     *
-     * @param audioManager the audio manage.
-     * @return the {@link AudioDeviceInfo} corresponding to the builtin device, or {@code null} if
-     *     none can be found.
-     */
-    private AudioDeviceInfo getBuiltinDevice(AudioManager audioManager) {
-        AudioDeviceInfo[] deviceList = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
-        for (AudioDeviceInfo device : deviceList) {
-            if (device.getType() == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) {
-                return device;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Sets the preferred device of the ringtong playback to the built-in device.
-     *
+     * Returns whether this player is local only, or can defer to the remote player. The
+     * result may differ from the builder if there is no remote player available at all.
      * @hide
      */
-    public boolean preferBuiltinDevice(boolean enable) {
-        mPreferBuiltinDevice = enable;
-        if (mLocalPlayer == null) {
-            return true;
-        }
-        return mLocalPlayer.setPreferredDevice(getBuiltinDevice(mAudioManager));
+    @VisibleForTesting
+    public boolean isLocalOnly() {
+        return mApiImpl.isLocalOnly();
+    }
+
+    /** @hide */
+    @VisibleForTesting
+    public boolean isUsingRemotePlayer() {
+        return mApiImpl.isUsingRemotePlayer();
     }
 
     /**
@@ -194,76 +238,16 @@
      * false if it did not succeed and can't be tried remotely.
      * @hide
      */
-    public boolean createLocalMediaPlayer() {
-        Trace.beginSection("createLocalMediaPlayer");
-        if (mUri == null) {
-            Log.e(TAG, "Could not create media player as no URI was provided.");
-            return mAllowRemote && mRemotePlayer != null;
-        }
-        destroyLocalPlayer();
-        // try opening uri locally before delegating to remote player
-        mLocalPlayer = new MediaPlayer();
-        try {
-            mLocalPlayer.setDataSource(mContext, mUri);
-            mLocalPlayer.setAudioAttributes(mAudioAttributes);
-            mLocalPlayer.setPreferredDevice(
-                    mPreferBuiltinDevice ? getBuiltinDevice(mAudioManager) : null);
-            synchronized (mPlaybackSettingsLock) {
-                applyPlaybackProperties_sync();
-            }
-            if (mVolumeShaperConfig != null) {
-                mVolumeShaper = mLocalPlayer.createVolumeShaper(mVolumeShaperConfig);
-            }
-            mLocalPlayer.prepare();
-
-        } catch (SecurityException | IOException e) {
-            destroyLocalPlayer();
-            if (!mAllowRemote) {
-                Log.w(TAG, "Remote playback not allowed: " + e);
-            }
-        }
-
-        if (LOGD) {
-            if (mLocalPlayer != null) {
-                Log.d(TAG, "Successfully created local player");
-            } else {
-                Log.d(TAG, "Problem opening; delegating to remote player");
-            }
-        }
-        Trace.endSection();
-        return mLocalPlayer != null || (mAllowRemote && mRemotePlayer != null);
+    public boolean reinitializeActivePlayer() {
+        return mApiImpl.reinitializeActivePlayer();
     }
 
     /**
      * Same as AudioManager.hasHapticChannels except it assumes an already created ringtone.
-     * If the ringtone has not been created, it will load based on URI provided at {@link #setUri}
-     * and if not URI has been set, it will assume no haptic channels are present.
      * @hide
      */
     public boolean hasHapticChannels() {
-        // FIXME: support remote player, or internalize haptic channels support and remove entirely.
-        try {
-            android.os.Trace.beginSection("Ringtone.hasHapticChannels");
-            if (mLocalPlayer != null) {
-                for(MediaPlayer.TrackInfo trackInfo : mLocalPlayer.getTrackInfo()) {
-                    if (trackInfo.hasHapticChannels()) {
-                        return true;
-                    }
-                }
-            }
-        } finally {
-            android.os.Trace.endSection();
-        }
-        return false;
-    }
-
-    /**
-     * Returns whether a local player has been created for this ringtone.
-     * @hide
-     */
-    @VisibleForTesting
-    public boolean hasLocalPlayer() {
-        return mLocalPlayer != null;
+        return mApiImpl.hasHapticChannels();
     }
 
     /**
@@ -272,7 +256,7 @@
      *     {@link #setAudioAttributes(AudioAttributes)} or the default attributes if none were set.
      */
     public AudioAttributes getAudioAttributes() {
-        return mAudioAttributes;
+        return mApiImpl.getAudioAttributes();
     }
 
     /**
@@ -280,10 +264,7 @@
      * @param looping whether to loop or not.
      */
     public void setLooping(boolean looping) {
-        synchronized (mPlaybackSettingsLock) {
-            mIsLooping = looping;
-            applyPlaybackProperties_sync();
-        }
+        mApiImpl.setLooping(looping);
     }
 
     /**
@@ -291,9 +272,7 @@
      * @return true if this player loops when playing.
      */
     public boolean isLooping() {
-        synchronized (mPlaybackSettingsLock) {
-            return mIsLooping;
-        }
+        return mApiImpl.isLooping();
     }
 
     /**
@@ -302,12 +281,7 @@
      *   corresponds to no attenuation being applied.
      */
     public void setVolume(float volume) {
-        synchronized (mPlaybackSettingsLock) {
-            if (volume < 0.0f) { volume = 0.0f; }
-            if (volume > 1.0f) { volume = 1.0f; }
-            mVolume = volume;
-            applyPlaybackProperties_sync();
-        }
+        mApiImpl.setVolume(volume);
     }
 
     /**
@@ -315,9 +289,7 @@
      * @return a value between 0.0f and 1.0f.
      */
     public float getVolume() {
-        synchronized (mPlaybackSettingsLock) {
-            return mVolume;
-        }
+        return mApiImpl.getVolume();
     }
 
     /**
@@ -328,14 +300,7 @@
      * @see android.media.audiofx.HapticGenerator#isAvailable()
      */
     public boolean setHapticGeneratorEnabled(boolean enabled) {
-        if (!HapticGenerator.isAvailable()) {
-            return false;
-        }
-        synchronized (mPlaybackSettingsLock) {
-            mHapticGeneratorEnabled = enabled;
-            applyPlaybackProperties_sync();
-        }
-        return true;
+        return mApiImpl.setHapticGeneratorEnabled(enabled);
     }
 
     /**
@@ -343,35 +308,7 @@
      * @return true if the HapticGenerator is enabled.
      */
     public boolean isHapticGeneratorEnabled() {
-        synchronized (mPlaybackSettingsLock) {
-            return mHapticGeneratorEnabled;
-        }
-    }
-
-    /**
-     * Must be called synchronized on mPlaybackSettingsLock
-     */
-    private void applyPlaybackProperties_sync() {
-        if (mLocalPlayer != null) {
-            mLocalPlayer.setVolume(mVolume);
-            mLocalPlayer.setLooping(mIsLooping);
-            if (mHapticGenerator == null && mHapticGeneratorEnabled) {
-                mHapticGenerator = HapticGenerator.create(mLocalPlayer.getAudioSessionId());
-            }
-            if (mHapticGenerator != null) {
-                mHapticGenerator.setEnabled(mHapticGeneratorEnabled);
-            }
-        } else if (mAllowRemote && (mRemotePlayer != null)) {
-            try {
-                mRemotePlayer.setPlaybackProperties(
-                        mRemoteToken, mVolume, mIsLooping, mHapticGeneratorEnabled);
-            } catch (RemoteException e) {
-                Log.w(TAG, "Problem setting playback properties: ", e);
-            }
-        } else {
-            Log.w(TAG,
-                    "Neither local nor remote player available when applying playback properties");
-        }
+        return mApiImpl.isHapticGeneratorEnabled();
     }
 
     /**
@@ -381,8 +318,7 @@
      * @param context A context used for querying.
      */
     public String getTitle(Context context) {
-        if (mTitle != null) return mTitle;
-        return mTitle = getTitle(context, mUri, true /*followSettingsUri*/, mAllowRemote);
+        return mApiImpl.getTitle(context);
     }
 
     /**
@@ -456,126 +392,24 @@
         return title;
     }
 
-    /**
-     * Set {@link Uri} to be used for ringtone playback.
-     * {@link IRingtonePlayer}.
-     *
-     * @hide
-     */
-    @UnsupportedAppUsage
-    public void setUri(Uri uri) {
-        setUri(uri, null);
-    }
-
-    /**
-     * @hide
-     */
-    public void setVolumeShaperConfig(@Nullable VolumeShaper.Configuration volumeShaperConfig) {
-        mVolumeShaperConfig = volumeShaperConfig;
-    }
-
-    /**
-     * Set {@link Uri} to be used for ringtone playback. Attempts to open
-     * locally, otherwise will delegate playback to remote
-     * {@link IRingtonePlayer}. Add {@link VolumeShaper} if required.
-     *
-     * @hide
-     */
-    public void setUri(Uri uri, @Nullable VolumeShaper.Configuration volumeShaperConfig) {
-        mVolumeShaperConfig = volumeShaperConfig;
-        mUri = uri;
-        if (mUri == null) {
-            destroyLocalPlayer();
-        }
-    }
-
     /** {@hide} */
     @UnsupportedAppUsage
     public Uri getUri() {
-        return mUri;
+        return mApiImpl.getUri();
     }
 
     /**
      * Plays the ringtone.
      */
     public void play() {
-        if (mLocalPlayer != null) {
-            // Play ringtones if stream volume is over 0 or if it is a haptic-only ringtone
-            // (typically because ringer mode is vibrate).
-            if (mAudioManager.getStreamVolume(AudioAttributes.toLegacyStreamType(mAudioAttributes))
-                    != 0) {
-                startLocalPlayer();
-            } else if (!mAudioAttributes.areHapticChannelsMuted() && hasHapticChannels()) {
-                // is haptic only ringtone
-                startLocalPlayer();
-            }
-        } else if (mAllowRemote && (mRemotePlayer != null) && (mUri != null)) {
-            final Uri canonicalUri = mUri.getCanonicalUri();
-            final boolean looping;
-            final float volume;
-            synchronized (mPlaybackSettingsLock) {
-                looping = mIsLooping;
-                volume = mVolume;
-            }
-            try {
-                mRemotePlayer.playWithVolumeShaping(mRemoteToken, canonicalUri, mAudioAttributes,
-                        volume, looping, mVolumeShaperConfig);
-            } catch (RemoteException e) {
-                if (!playFallbackRingtone()) {
-                    Log.w(TAG, "Problem playing ringtone: " + e);
-                }
-            }
-        } else {
-            if (!playFallbackRingtone()) {
-                Log.w(TAG, "Neither local nor remote playback available");
-            }
-        }
+        mApiImpl.play();
     }
 
     /**
      * Stops a playing ringtone.
      */
     public void stop() {
-        if (mLocalPlayer != null) {
-            destroyLocalPlayer();
-        } else if (mAllowRemote && (mRemotePlayer != null)) {
-            try {
-                mRemotePlayer.stop(mRemoteToken);
-            } catch (RemoteException e) {
-                Log.w(TAG, "Problem stopping ringtone: " + e);
-            }
-        }
-    }
-
-    private void destroyLocalPlayer() {
-        if (mLocalPlayer != null) {
-            if (mHapticGenerator != null) {
-                mHapticGenerator.release();
-                mHapticGenerator = null;
-            }
-            mLocalPlayer.setOnCompletionListener(null);
-            mLocalPlayer.reset();
-            mLocalPlayer.release();
-            mLocalPlayer = null;
-            mVolumeShaper = null;
-            synchronized (sActiveRingtones) {
-                sActiveRingtones.remove(this);
-            }
-        }
-    }
-
-    private void startLocalPlayer() {
-        if (mLocalPlayer == null) {
-            return;
-        }
-        synchronized (sActiveRingtones) {
-            sActiveRingtones.add(this);
-        }
-        mLocalPlayer.setOnCompletionListener(mCompletionListener);
-        mLocalPlayer.start();
-        if (mVolumeShaper != null) {
-            mVolumeShaper.apply(VolumeShaper.Operation.PLAY);
-        }
+        mApiImpl.stop();
     }
 
     /**
@@ -584,87 +418,364 @@
      * @return True if playing, false otherwise.
      */
     public boolean isPlaying() {
-        if (mLocalPlayer != null) {
-            return mLocalPlayer.isPlaying();
-        } else if (mAllowRemote && (mRemotePlayer != null)) {
-            try {
-                return mRemotePlayer.isPlaying(mRemoteToken);
-            } catch (RemoteException e) {
-                Log.w(TAG, "Problem checking ringtone: " + e);
-                return false;
-            }
-        } else {
-            Log.w(TAG, "Neither local nor remote playback available");
-            return false;
-        }
+        return mApiImpl.isPlaying();
     }
 
-    private boolean playFallbackRingtone() {
-        int streamType = AudioAttributes.toLegacyStreamType(mAudioAttributes);
-        if (mAudioManager.getStreamVolume(streamType) == 0) {
-            return false;
+    /**
+     * Build a {@link Ringtone} to easily play sounds for ringtones, alarms and notifications.
+     *
+     * TODO: when un-hide, deprecate Ringtone: setAudioAttributes, setLooping,
+     *       setHapticGeneratorEnabled (no-effect if MEDIA_VIBRATION),
+     *       static RingtoneManager.getRingtone.
+     * @hide
+     */
+    public static final class Builder {
+        private final Context mContext;
+        private final int mEnabledMedia;
+        private Uri mUri;
+        private final AudioAttributes mAudioAttributes;
+        private boolean mUseExactAudioAttributes = false;
+        // Not a static default since it doesn't really need to be in memory forever.
+        private Injectables mInjectables = new Injectables();
+        private VolumeShaper.Configuration mVolumeShaperConfig;
+        private boolean mPreferBuiltinDevice = false;
+        private boolean mAllowRemote = true;
+        private boolean mHapticGeneratorEnabled = false;
+        private float mInitialSoundVolume = 1.0f;
+        private boolean mLooping = false;
+        private VibrationEffect mVibrationEffect;
+
+        /**
+         * Constructs a builder to play the given media types from the mediaUri. If the mediaUri
+         * is null (for example, an unset-setting), then fallback logic will dictate what plays.
+         *
+         * <p>When built, if the ringtone is already known to be a no-op, such as explicitly
+         * silent, then the {@link #build} may return null.
+         *
+         * @param context The context for playing the ringtone.
+         * @param enabledMedia Which media to play. Media not included is implicitly muted. Device
+         *                     settings such as volume and vibrate-only may also affect which
+         *                     media is played.
+         * @param audioAttributes The attributes to use for playback, which affects the volumes and
+         *                        settings that are applied.
+         */
+        public Builder(@NonNull Context context, @RingtoneMedia int enabledMedia,
+                @NonNull AudioAttributes audioAttributes) {
+            mContext = context;
+            mEnabledMedia = enabledMedia;
+            mAudioAttributes = audioAttributes;
         }
-        int ringtoneType = RingtoneManager.getDefaultType(mUri);
-        if (ringtoneType != -1 &&
-                RingtoneManager.getActualDefaultRingtoneUri(mContext, ringtoneType) == null) {
-            Log.w(TAG, "not playing fallback for " + mUri);
-            return false;
+
+        /**
+         * Inject test intercepters for static methods.
+         * @hide
+         */
+        @NonNull
+        public Builder setInjectables(Injectables injectables) {
+            mInjectables = injectables;
+            return this;
         }
-        // Default ringtone, try fallback ringtone.
-        try {
-            AssetFileDescriptor afd = mContext.getResources().openRawResourceFd(
-                    com.android.internal.R.raw.fallbackring);
-            if (afd == null) {
-                Log.e(TAG, "Could not load fallback ringtone");
+
+        /**
+         * The uri for the ringtone media to play. This is typically a user's preference for the
+         * sound. If null, then it is treated as though the user's preference is unset and
+         * fallback behavior, such as using the default ringtone setting, are used instead.
+         *
+         * When sound media is enabled, this is assumed to be a sound URI.
+         */
+        @NonNull
+        public Builder setUri(@Nullable Uri uri) {
+            mUri = uri;
+            return this;
+        }
+
+        /**
+         * Sets the VibrationEffect to use if vibration is enabled on this ringtone. The caller
+         * should use {@link android.os.Vibrator#areVibrationFeaturesSupported} to ensure
+         * that the effect is usable on this device, otherwise system defaults will be used.
+         *
+         * <p>Vibration will only happen if the Builder was created with media type
+         * {@link Ringtone#MEDIA_VIBRATION} or {@link Ringtone#MEDIA_SOUND_AND_VIBRATION}, and
+         * the application has the {@link android.Manifest.permission#VIBRATE} permission.
+         *
+         * <p>If the Ringtone is looping when it is played, then the VibrationEffect will be
+         * modified to loop. Similarly, if the ringtone is not looping, a repeating
+         * VibrationEffect will be modified to be non-repeating when the ringtone is played. Calls
+         * to {@link Ringtone#setLooping} after the ringtone has started playing will stop a looping
+         * vibration, but has no effect otherwise: specifically it will not restart vibration.
+         */
+        @NonNull
+        public Builder setVibrationEffect(@NonNull VibrationEffect effect) {
+            mVibrationEffect = effect;
+            return this;
+        }
+
+        /**
+         * Sets whether the resulting ringtone should loop until {@link Ringtone#stop()} is called,
+         * or just play once.
+         */
+        @NonNull
+        public Builder setLooping(boolean looping) {
+            mLooping = looping;
+            return this;
+        }
+
+        /**
+         * Sets the VolumeShaper.Configuration to apply to the ringtone.
+         * @hide
+         */
+        @NonNull
+        public Builder setVolumeShaperConfig(
+                @Nullable VolumeShaper.Configuration volumeShaperConfig) {
+            mVolumeShaperConfig = volumeShaperConfig;
+            return this;
+        }
+
+        /**
+         * Whether to enable or disable the haptic generator.
+         * @hide
+         */
+        @NonNull
+        public Builder setEnableHapticGenerator(boolean enabled) {
+            // Note that this property is mutable (but deprecated) on the Ringtone class itself.
+            mHapticGeneratorEnabled = enabled;
+            return this;
+        }
+
+        /**
+         * Sets the initial sound volume for the ringtone.
+         */
+        @NonNull
+        public Builder setInitialSoundVolume(float initialSoundVolume) {
+            mInitialSoundVolume = initialSoundVolume;
+            return this;
+        }
+
+        /**
+         * Sets the preferred device of the ringtone playback to the built-in device. This is
+         * only for use by the system server with known-good Uris.
+         * @hide
+         */
+        @NonNull
+        public Builder setPreferBuiltinDevice() {
+            mPreferBuiltinDevice = true;
+            mAllowRemote = false;  // Already in system.
+            return this;
+        }
+
+        /**
+         * Indicates that {@link AudioAttributes#areHapticChannelsMuted()} on the builder's
+         * AudioAttributes should not be overridden. This is used to enable legacy behavior of
+         * calling {@link Ringtone#setAudioAttributes} on an already-created ringtone, and can in
+         * turn cause vibration during a "sound-only" session or can suppress audio-coupled
+         * haptics that would usually take priority (therefore potentially falling back to
+         * the VibrationEffect or system defaults).
+         *
+         * <p>Without this setting, the haptic channels will be automatically muted or not by the
+         * Ringtone according to whether vibration is enabled or not.
+         *
+         * <p>This is for internal-use only. New applications should configure the vibration
+         * behavior explicitly with the (TODO: future RingtoneSetting.setVibrationSource).
+         * Handling haptic channels outside Ringtone leads to extra loads of the sound uri.
+         * @hide
+         */
+        @NonNull
+        public Builder setUseExactAudioAttributes(boolean useExactAttrs) {
+            mUseExactAudioAttributes = useExactAttrs;
+            return this;
+        }
+
+        /**
+         * Prevent fallback to the remote service. This is primarily intended for use within the
+         * remote IRingtonePlayer service itself, to avoid loops.
+         * @hide
+         */
+        @NonNull
+        public Builder setLocalOnly() {
+            mAllowRemote = false;
+            return this;
+        }
+
+        private boolean isVibrationEnabledAndAvailable() {
+            if ((mEnabledMedia & MEDIA_VIBRATION) == 0) {
                 return false;
             }
-            mLocalPlayer = new MediaPlayer();
-            if (afd.getDeclaredLength() < 0) {
-                mLocalPlayer.setDataSource(afd.getFileDescriptor());
+            Vibrator vibrator = mContext.getSystemService(Vibrator.class);
+            if (!vibrator.hasVibrator()) {
+                return false;
+            }
+            if (mContext.checkSelfPermission(Manifest.permission.VIBRATE)
+                    != PackageManager.PERMISSION_GRANTED) {
+                Log.w(TAG, "Ringtone requests vibration enabled, but no VIBRATE permission");
+                return false;
+            }
+            return true;
+        }
+
+        /**
+         * Returns the built Ringtone, or null if there was a problem loading the Uri and there
+         * are no fallback options available.
+         */
+        @Nullable
+        public Ringtone build() {
+            @Ringtone.RingtoneMedia int effectiveEnabledMedia = mEnabledMedia;
+            VibrationEffect effectiveVibrationEffect = mVibrationEffect;
+
+            // Normalize media to that supported on this SDK level.
+            if (effectiveEnabledMedia != (effectiveEnabledMedia & MEDIA_ALL)) {
+                Log.e(TAG, "Unsupported media type: " + effectiveEnabledMedia);
+                effectiveEnabledMedia = effectiveEnabledMedia & MEDIA_ALL;
+            }
+            final boolean effectiveHapticGenerator;
+            final boolean hapticChannelsSupported;
+            AudioAttributes effectiveAudioAttributes = mAudioAttributes;
+            final boolean hapticChannelsMuted = mAudioAttributes.areHapticChannelsMuted();
+            if (!isVibrationEnabledAndAvailable()) {
+                // Vibration isn't active: turn off everything that might cause extra work.
+                effectiveEnabledMedia &= ~MEDIA_VIBRATION;
+                effectiveHapticGenerator = false;
+                effectiveVibrationEffect = null;
+                if (!mUseExactAudioAttributes && !hapticChannelsMuted) {
+                    effectiveAudioAttributes = new AudioAttributes.Builder(effectiveAudioAttributes)
+                            .setHapticChannelsMuted(true)
+                            .build();
+                }
             } else {
-                mLocalPlayer.setDataSource(afd.getFileDescriptor(),
-                        afd.getStartOffset(),
-                        afd.getDeclaredLength());
+                // Vibration is active.
+                effectiveHapticGenerator =
+                        mHapticGeneratorEnabled && mInjectables.isHapticGeneratorAvailable();
+                hapticChannelsSupported = mInjectables.isHapticPlaybackSupported();
+                // Haptic channels are preferred if they are available, and not explicitly muted.
+                // We won't know if haptic channels are available until loading the media player,
+                // and since the media player needs to be reset to change audio attributes, then
+                // we proactively enable the channels - it won't matter if they aren't present.
+                if (!mUseExactAudioAttributes) {
+                    boolean shouldBeMuted = effectiveHapticGenerator || !hapticChannelsSupported;
+                    if (shouldBeMuted != hapticChannelsMuted) {
+                        effectiveAudioAttributes =
+                                new AudioAttributes.Builder(effectiveAudioAttributes)
+                                .setHapticChannelsMuted(shouldBeMuted)
+                                .build();
+                    }
+                }
+                // If no contextual vibration, then try loading the default one for the URI.
+                if (mVibrationEffect == null && mUri != null) {
+                    effectiveVibrationEffect = VibrationEffect.get(mUri, mContext);
+                }
             }
-            mLocalPlayer.setAudioAttributes(mAudioAttributes);
-            synchronized (mPlaybackSettingsLock) {
-                applyPlaybackProperties_sync();
+            try {
+                Ringtone ringtone = new Ringtone(this, effectiveEnabledMedia,
+                        effectiveAudioAttributes, effectiveVibrationEffect,
+                        effectiveHapticGenerator);
+                if (ringtone.reinitializeActivePlayer()) {
+                    return ringtone;
+                } else {
+                    Log.e(TAG, "Failed to open ringtone " + mUri);
+                    return null;
+                }
+            } catch (Exception ex) {
+                // Catching Exception isn't great, but was done in the old
+                // RingtoneManager.getRingtone and hides errors like DocumentsProvider throwing
+                // IllegalArgumentException instead of FileNotFoundException, and also robolectric
+                // failures when ShadowMediaPlayer wasn't pre-informed of the ringtone.
+                Log.e(TAG, "Failed while opening ringtone " + mUri, ex);
+                return null;
             }
-            if (mVolumeShaperConfig != null) {
-                mVolumeShaper = mLocalPlayer.createVolumeShaper(mVolumeShaperConfig);
+        }
+    }
+
+    /**
+     * Interface for intercepting static methods and constructors, for unit testing only.
+     * @hide
+     */
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    public static class Injectables {
+        /** Intercept {@code new MediaPlayer()}. */
+        @NonNull
+        public MediaPlayer newMediaPlayer() {
+            return new MediaPlayer();
+        }
+
+        /** Intercept {@link HapticGenerator#isAvailable}. */
+        public boolean isHapticGeneratorAvailable() {
+            return HapticGenerator.isAvailable();
+        }
+
+        /**
+         * Intercept {@link HapticGenerator#create} using
+         * {@link MediaPlayer#getAudioSessionId()} from the given media player.
+         */
+        @Nullable
+        public HapticGenerator createHapticGenerator(@NonNull MediaPlayer mediaPlayer) {
+            return HapticGenerator.create(mediaPlayer.getAudioSessionId());
+        }
+
+        /** Returns the result of {@link AudioManager#isHapticPlaybackSupported()}. */
+        public boolean isHapticPlaybackSupported() {
+            return AudioManager.isHapticPlaybackSupported();
+        }
+
+        /**
+         * Returns whether the MediaPlayer tracks have haptic channels. This is the same as
+         * AudioManager.hasHapticChannels, except it uses an already prepared MediaPlayer to avoid
+         * loading the metadata a second time.
+         */
+        public boolean hasHapticChannels(MediaPlayer mp) {
+            try {
+                Trace.beginSection("Ringtone.hasHapticChannels");
+                for (MediaPlayer.TrackInfo trackInfo : mp.getTrackInfo()) {
+                    if (trackInfo.hasHapticChannels()) {
+                        return true;
+                    }
+                }
+            } finally {
+                Trace.endSection();
             }
-            mLocalPlayer.prepare();
-            startLocalPlayer();
-            afd.close();
-        } catch (IOException ioe) {
-            destroyLocalPlayer();
-            Log.e(TAG, "Failed to open fallback ringtone");
-            return false;
-        } catch (NotFoundException nfe) {
-            Log.e(TAG, "Fallback ringtone does not exist");
             return false;
         }
-        return true;
+
     }
 
-    void setTitle(String title) {
-        mTitle = title;
+    /**
+     * Interface for alternative Ringtone implementations. See the public Ringtone methods that
+     * delegate to these for documentation.
+     * @hide
+     */
+    interface ApiInterface {
+        void setStreamType(int streamType);
+        int getStreamType();
+        void setAudioAttributes(AudioAttributes attributes);
+        boolean getPreferBuiltinDevice();
+        VolumeShaper.Configuration getVolumeShaperConfig();
+        boolean isLocalOnly();
+        boolean isUsingRemotePlayer();
+        boolean reinitializeActivePlayer();
+        boolean hasHapticChannels();
+        AudioAttributes getAudioAttributes();
+        void setLooping(boolean looping);
+        boolean isLooping();
+        void setVolume(float volume);
+        float getVolume();
+        boolean setHapticGeneratorEnabled(boolean enabled);
+        boolean isHapticGeneratorEnabled();
+        String getTitle(Context context);
+        Uri getUri();
+        void play();
+        void stop();
+        boolean isPlaying();
+        // V2 future-public methods
+        @RingtoneMedia int getEnabledMedia();
+        VibrationEffect getVibrationEffect();
     }
 
-    @Override
-    protected void finalize() {
-        if (mLocalPlayer != null) {
-            mLocalPlayer.release();
-        }
-    }
-
-    class MyOnCompletionListener implements MediaPlayer.OnCompletionListener {
-        @Override
-        public void onCompletion(MediaPlayer mp) {
-            synchronized (sActiveRingtones) {
-                sActiveRingtones.remove(Ringtone.this);
-            }
-            mp.setOnCompletionListener(null); // Help the Java GC: break the refcount cycle.
-        }
+    /**
+     * Switch for using the new ringtone implementation (RingtoneV1 vs RingtoneV2). This may be
+     * called from both system server and app-side sdk.
+     *
+     * @hide
+     */
+    public static boolean useRingtoneV2() {
+        // TODO(b/293846645): chang eto new flagging infra
+        return SystemProperties.getBoolean("persist.audio.ringtone.use_v2", false);
     }
 }
diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java
index d2b21ae..0ff1b1e 100644
--- a/media/java/android/media/RingtoneManager.java
+++ b/media/java/android/media/RingtoneManager.java
@@ -16,7 +16,6 @@
 
 package android.media;
 
-import android.Manifest;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.RequiresPermission;
@@ -39,14 +38,13 @@
 import android.os.Build;
 import android.os.Environment;
 import android.os.FileUtils;
-import android.os.IBinder;
 import android.os.ParcelFileDescriptor;
-import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.provider.BaseColumns;
 import android.provider.MediaStore;
+import android.provider.MediaStore.Audio.AudioColumns;
 import android.provider.MediaStore.MediaColumns;
 import android.provider.Settings;
 import android.provider.Settings.System;
@@ -357,6 +355,25 @@
         }
     }
 
+    /** @hide */
+    @NonNull
+    public static AudioAttributes getDefaultAudioAttributes(int ringtoneType) {
+        AudioAttributes.Builder builder = new AudioAttributes.Builder();
+        switch (ringtoneType) {
+            case TYPE_ALARM:
+                builder.setUsage(AudioAttributes.USAGE_ALARM);
+                break;
+            case TYPE_NOTIFICATION:
+                builder.setUsage(AudioAttributes.USAGE_NOTIFICATION);
+                break;
+            default:  // ringtone or all
+                builder.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE);
+                break;
+        }
+        builder.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION);
+        return builder.build();
+    }
+
     /**
      * Whether retrieving another {@link Ringtone} will stop playing the
      * previously retrieved {@link Ringtone}.
@@ -481,11 +498,32 @@
             mPreviousRingtone.stop();
         }
 
-        mPreviousRingtone =
-                getRingtone(mContext, getRingtoneUri(position), inferStreamType(), true);
+        Ringtone ringtone;
+        Uri positionUri = getRingtoneUri(position);
+        if (Ringtone.useRingtoneV2()) {
+            mPreviousRingtone = new Ringtone.Builder(
+                    mContext, Ringtone.MEDIA_SOUND, getDefaultAudioAttributes(mType))
+                    .setUri(positionUri)
+                    .build();
+        } else {
+            mPreviousRingtone = createRingtoneV1WithStreamType(mContext, positionUri,
+                    inferStreamType(), /* volumeShaperConfig= */ null);
+        }
         return mPreviousRingtone;
     }
 
+    private static Ringtone createRingtoneV1WithStreamType(
+            final Context context, Uri ringtoneUri, int streamType,
+            @Nullable VolumeShaper.Configuration volumeShaperConfig) {
+        try {
+            return Ringtone.createV1WithCustomStreamType(context, streamType, ringtoneUri,
+                    volumeShaperConfig);
+        } catch (Exception ex) {
+            Log.e(TAG, "Failed to open ringtone " + ringtoneUri + ": " + ex);
+        }
+        return null;
+    }
+
     /**
      * Gets a {@link Uri} for the ringtone at the given position in the {@link Cursor}.
      * 
@@ -507,6 +545,95 @@
         return getUriFromCursor(mContext, mCursor);
     }
 
+    /**
+     * Gets the valid ringtone uri by a given uri string and ringtone type for the restore purpose.
+     *
+     * @param contentResolver ContentResolver to execute media query.
+     * @param value a canonicalized uri which refers to the ringtone.
+     * @param ringtoneType an integer representation of the kind of uri that is being restored, can
+     *     be RingtoneManager.TYPE_RINGTONE, RingtoneManager.TYPE_NOTIFICATION, or
+     *     RingtoneManager.TYPE_ALARM.
+     * @hide
+     */
+    public static @Nullable Uri getRingtoneUriForRestore(
+            @NonNull ContentResolver contentResolver, @Nullable String value, int ringtoneType)
+            throws FileNotFoundException, IllegalArgumentException {
+        if (value == null) {
+            // Return a valid null. It means the null value is intended instead of a failure.
+            return null;
+        }
+
+        Uri ringtoneUri;
+        final Uri canonicalUri = Uri.parse(value);
+
+        // Try to get the media uri via the regular uncanonicalize method first.
+        ringtoneUri = contentResolver.uncanonicalize(canonicalUri);
+        if (ringtoneUri != null) {
+            // Canonicalize it to make the result contain the right metadata of the media asset.
+            ringtoneUri = contentResolver.canonicalize(ringtoneUri);
+            return ringtoneUri;
+        }
+
+        // Query the media by title and ringtone type.
+        final String title = canonicalUri.getQueryParameter(AudioColumns.TITLE);
+        Uri baseUri = ContentUris.removeId(canonicalUri).buildUpon().clearQuery().build();
+        String ringtoneTypeSelection = "";
+        switch (ringtoneType) {
+            case RingtoneManager.TYPE_RINGTONE:
+                ringtoneTypeSelection = MediaStore.Audio.AudioColumns.IS_RINGTONE;
+                break;
+            case RingtoneManager.TYPE_NOTIFICATION:
+                ringtoneTypeSelection = MediaStore.Audio.AudioColumns.IS_NOTIFICATION;
+                break;
+            case RingtoneManager.TYPE_ALARM:
+                ringtoneTypeSelection = MediaStore.Audio.AudioColumns.IS_ALARM;
+                break;
+            default:
+                throw new IllegalArgumentException("Unknown ringtone type: " + ringtoneType);
+        }
+
+        final String selection = ringtoneTypeSelection + "=1 AND " + AudioColumns.TITLE + "=?";
+        Cursor cursor = null;
+        try {
+            cursor =
+                    contentResolver.query(
+                            baseUri,
+                            /* projection */ new String[] {BaseColumns._ID},
+                            /* selection */ selection,
+                            /* selectionArgs */ new String[] {title},
+                            /* sortOrder */ null,
+                            /* cancellationSignal */ null);
+
+        } catch (IllegalArgumentException e) {
+            throw new FileNotFoundException("Volume not found for " + baseUri);
+        }
+        if (cursor == null) {
+            throw new FileNotFoundException("Missing cursor for " + baseUri);
+        } else if (cursor.getCount() == 0) {
+            FileUtils.closeQuietly(cursor);
+            throw new FileNotFoundException("No item found for " + baseUri);
+        } else if (cursor.getCount() > 1) {
+            // Find more than 1 result.
+            // We are not sure which one is the right ringtone file so just abandon this case.
+            FileUtils.closeQuietly(cursor);
+            throw new FileNotFoundException(
+                    "Find multiple ringtone candidates by title+ringtone_type query: count: "
+                            + cursor.getCount());
+        }
+        if (cursor.moveToFirst()) {
+            ringtoneUri = ContentUris.withAppendedId(baseUri, cursor.getLong(0));
+            FileUtils.closeQuietly(cursor);
+        } else {
+            FileUtils.closeQuietly(cursor);
+            throw new FileNotFoundException("Failed to read row from the result.");
+        }
+
+        // Canonicalize it to make the result contain the right metadata of the media asset.
+        ringtoneUri = contentResolver.canonicalize(ringtoneUri);
+        Log.v(TAG, "Find a valid result: " + ringtoneUri);
+        return ringtoneUri;
+    }
+
     private static Uri getUriFromCursor(Context context, Cursor cursor) {
         final Uri uri = ContentUris.withAppendedId(Uri.parse(cursor.getString(URI_COLUMN_INDEX)),
                 cursor.getLong(ID_COLUMN_INDEX));
@@ -677,40 +804,14 @@
      * @return A {@link Ringtone} for the given URI, or null.
      */
     public static Ringtone getRingtone(final Context context, Uri ringtoneUri) {
-        // Don't set the stream type
-        return getRingtone(context, ringtoneUri, -1, true);
-    }
-
-    /**
-     * Returns a {@link Ringtone} with {@link VolumeShaper} if required for a given sound URI.
-     * <p>
-     * If the given URI cannot be opened for any reason, this method will
-     * attempt to fallback on another sound. If it cannot find any, it will
-     * return null.
-     *
-     * @param context A context used to query.
-     * @param ringtoneUri The {@link Uri} of a sound or ringtone.
-     * @param volumeShaperConfig config for volume shaper of the ringtone if applied.
-     * @return A {@link Ringtone} for the given URI, or null.
-     *
-     * @hide
-     */
-    public static Ringtone getRingtone(
-            final Context context, Uri ringtoneUri,
-            @Nullable VolumeShaper.Configuration volumeShaperConfig) {
-        // Don't set the stream type
-        return getRingtone(context, ringtoneUri, -1 /* streamType */, volumeShaperConfig, true);
-    }
-
-    /**
-     * @hide
-     */
-    public static Ringtone getRingtone(final Context context, Uri ringtoneUri,
-            @Nullable VolumeShaper.Configuration volumeShaperConfig,
-            boolean createLocalMediaPlayer) {
-        // Don't set the stream type
-        return getRingtone(context, ringtoneUri, -1 /* streamType */, volumeShaperConfig,
-                createLocalMediaPlayer);
+        if (Ringtone.useRingtoneV2()) {
+            return new Ringtone.Builder(
+                    context, Ringtone.MEDIA_SOUND, getDefaultAudioAttributes(-1))
+                    .setUri(ringtoneUri)
+                    .build();
+        } else {
+            return createRingtoneV1WithStreamType(context, ringtoneUri, -1, null);
+        }
     }
 
     /**
@@ -719,64 +820,23 @@
     public static Ringtone getRingtone(final Context context, Uri ringtoneUri,
             @Nullable VolumeShaper.Configuration volumeShaperConfig,
             AudioAttributes audioAttributes) {
-        // Don't set the stream type
-        Ringtone ringtone = getRingtone(context, ringtoneUri, -1 /* streamType */,
-                volumeShaperConfig, false);
-        if (ringtone != null) {
-            ringtone.setAudioAttributesField(audioAttributes);
-            if (!ringtone.createLocalMediaPlayer()) {
-                Log.e(TAG, "Failed to open ringtone " + ringtoneUri);
+        // TODO: move caller(s) away from this method: inline the builder call.
+        if (Ringtone.useRingtoneV2()) {
+            return new Ringtone.Builder(context, Ringtone.MEDIA_SOUND, audioAttributes)
+                    .setUri(ringtoneUri)
+                    .setVolumeShaperConfig(volumeShaperConfig)
+                    .setUseExactAudioAttributes(true)  // May be using audio-coupled via attrs
+                    .build();
+        } else {
+            try {
+                return Ringtone.createV1WithCustomAudioAttributes(context, audioAttributes,
+                        ringtoneUri, volumeShaperConfig, /* allowRemote= */ true);
+            } catch (Exception ex) {
+                // Match broad catching of createRingtoneV1.
+                Log.e(TAG, "Failed to open ringtone " + ringtoneUri + ": " + ex);
                 return null;
             }
         }
-        return ringtone;
-    }
-
-    //FIXME bypass the notion of stream types within the class
-    /**
-     * Returns a {@link Ringtone} for a given sound URI on the given stream
-     * type. Normally, if you change the stream type on the returned
-     * {@link Ringtone}, it will re-create the {@link MediaPlayer}. This is just
-     * an optimized route to avoid that.
-     *
-     * @param streamType The stream type for the ringtone, or -1 if it should
-     *            not be set (and the default used instead).
-     * @param createLocalMediaPlayer when true, the ringtone returned will be fully
-     *      created otherwise, it will require the caller to create the media player manually
-     *      {@link Ringtone#createLocalMediaPlayer()} in order to play the Ringtone.
-     * @see #getRingtone(Context, Uri)
-     */
-    @UnsupportedAppUsage
-    private static Ringtone getRingtone(final Context context, Uri ringtoneUri, int streamType,
-            boolean createLocalMediaPlayer) {
-        return getRingtone(context, ringtoneUri, streamType, null /* volumeShaperConfig */,
-                createLocalMediaPlayer);
-    }
-
-    private static Ringtone getRingtone(final Context context, Uri ringtoneUri, int streamType,
-            @Nullable VolumeShaper.Configuration volumeShaperConfig,
-            boolean createLocalMediaPlayer) {
-        try {
-            final Ringtone r = new Ringtone(context, true);
-            if (streamType >= 0) {
-                //FIXME deprecated call
-                r.setStreamType(streamType);
-            }
-
-            r.setVolumeShaperConfig(volumeShaperConfig);
-            r.setUri(ringtoneUri, volumeShaperConfig);
-            if (createLocalMediaPlayer) {
-                if (!r.createLocalMediaPlayer()) {
-                    Log.e(TAG, "Failed to open ringtone " + ringtoneUri);
-                    return null;
-                }
-            }
-            return r;
-        } catch (Exception ex) {
-            Log.e(TAG, "Failed to open ringtone " + ringtoneUri + ": " + ex);
-        }
-
-        return null;
     }
 
     /**
diff --git a/media/java/android/media/RingtoneSelection.java b/media/java/android/media/RingtoneSelection.java
new file mode 100644
index 0000000..74f7276
--- /dev/null
+++ b/media/java/android/media/RingtoneSelection.java
@@ -0,0 +1,603 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media;
+
+import static java.util.Objects.requireNonNull;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.TestApi;
+import android.content.ContentResolver;
+import android.net.Uri;
+import android.provider.MediaStore;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Immutable representation a desired ringtone, usually originating from a user preference.
+ * Unlike sound-only Uris, a "silent" setting is an explicit selection value, rather than null.
+ *
+ * <p>This representation can be converted into (or from) a URI form for storing within a string
+ * preference or when using the ringtone picker via {@link RingtoneManager#ACTION_RINGTONE_PICKER}.
+ * It does not carry any actual media data - it only references the components that make
+ * up the preference. Initial selections can be built using {@link RingtoneSelection.Builder}.
+ *
+ * <p>A RingtoneSelection is typically played by passing into a {@link Ringtone.Builder}, and
+ * supplementing with contextual defaults from the application. Bad Uris are handled by the
+ * {@link Ringtone} class - the RingtoneSelection doesn't validate the target of the Uri.
+ *
+ * <p>When a RingtoneSelection is created/loaded, the values of its properties are modified
+ * to be internally consistent and reflect effective values - with the exception of not verifying
+ * the actual URI content. For example, loading a selection Uri that sets a sound source to
+ * {@link #SOUND_SOURCE_URI}, but doesn't also have a sound Uri set, will result in this class
+ * instead returning {@link #SOUND_SOURCE_DEFAULT} from {@link #getSoundSource}.
+ *
+ * <h2>Storing preferences</h2>
+ *
+ * <p>A ringtone preference can have several states: either unset, set to a ringtone selection Uri,
+ * or, from prior to the introduction of {@code RingtoneSelection}, set to a sound-only Uri or
+ * explicitly set to null to indicate silent.
+ *
+ * @hide
+ */
+@TestApi
+public final class RingtoneSelection {
+
+    /**
+     * The sound source was specified but its value was not recognized. This value is used
+     * internally for not stripping unrecognised (possibly future) values during processing.
+     * @hide
+     */
+    public static final int SOUND_SOURCE_UNKNOWN = -1;
+
+    /**
+     * The sound source is not explicitly specified, so it can follow default behavior for its
+     * context.
+     */
+    public static final int SOUND_SOURCE_DEFAULT = 0;
+
+    /**
+     * Sound is explicitly disabled, such as the user having selected "Silent" in the sound picker.
+     */
+    public static final int SOUND_SOURCE_OFF = 1;
+
+    /**
+     * The sound Uri should be used as the source of sound.
+     */
+    public static final int SOUND_SOURCE_URI = 2;
+
+    /**
+     * Directive for how to make sound.
+     * @hide
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = "SOUND_SOURCE_", value = {
+            SOUND_SOURCE_UNKNOWN,
+            SOUND_SOURCE_DEFAULT,
+            SOUND_SOURCE_OFF,
+            SOUND_SOURCE_URI,
+    })
+    public @interface SoundSource {}
+
+    /**
+     * The vibration source was specified but its value was not recognized.
+     * This value is used internally for not stripping unrecognised (possibly
+     * future) values during processing.
+     * @hide
+     */
+    public static final int VIBRATION_SOURCE_UNKNOWN = -1;
+
+    /**
+     * Vibration source is not explicitly specified. If vibration is enabled, this will use the
+     * first available of {@link #VIBRATION_SOURCE_AUDIO_CHANNEL},
+     * {@link #VIBRATION_SOURCE_APPLICATION_PROVIDED}, or system default vibration.
+     */
+    public static final int VIBRATION_SOURCE_DEFAULT = 0;
+
+    /** Specifies that vibration is explicitly disabled for this ringtone. */
+    public static final int VIBRATION_SOURCE_OFF = 1;
+
+    /** The vibration Uri should be used as the source of vibration. */
+    public static final int VIBRATION_SOURCE_URI = 2;
+
+    /**
+     * Specifies that vibration should use the vibration provided by the application. This is
+     * typically the application's own default for the use-case, provided via
+     * {@link Ringtone.Builder#setVibrationEffect}. For notification channels, this is the vibration
+     * effect saved on the notification channel.
+     *
+     * <p>If no vibration is specified by the application, this value behaves if the source was
+     * {@link #VIBRATION_SOURCE_DEFAULT}.
+     */
+    public static final int VIBRATION_SOURCE_APPLICATION_PROVIDED = 3;
+
+    /**
+     * Specifies that vibration should use haptic audio channels from the
+     * sound Uri. If the sound URI doesn't have haptic channels, then reverts to the order specified
+     * by {@link #VIBRATION_SOURCE_DEFAULT}.
+     */
+    // Numeric gap from VIBRATION_SOURCE_APPLICATION_PROVIDED in case we want other common elements.
+    public static final int VIBRATION_SOURCE_AUDIO_CHANNEL = 10;
+
+    /**
+     * Specifies that vibration should generate haptic audio channels from the
+     * audio tracks of the sound Uri.
+     *
+     * If the sound Uri already has haptic channels, then behaves as though
+     * {@link #VIBRATION_SOURCE_AUDIO_CHANNEL} was specified instead.
+     */
+    public static final int VIBRATION_SOURCE_HAPTIC_GENERATOR = 11;
+
+    /**
+     * Directive for how to vibrate.
+     * @hide
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = "VIBRATION_SOURCE_", value = {
+            VIBRATION_SOURCE_UNKNOWN,
+            VIBRATION_SOURCE_DEFAULT,
+            VIBRATION_SOURCE_OFF,
+            VIBRATION_SOURCE_URI,
+            VIBRATION_SOURCE_APPLICATION_PROVIDED,
+            VIBRATION_SOURCE_AUDIO_CHANNEL,
+            VIBRATION_SOURCE_HAPTIC_GENERATOR,
+    })
+    public @interface VibrationSource {}
+
+    /**
+     * Configures {@link #RingtoneSelection#fromUri} to treat an unrecognized Uri as the sound Uri
+     * for the returned {@link RingtoneSelection}, with null meaning {@link #SOUND_SOURCE_OFF}.
+     * This behavior is particularly suited to loading values from older settings that may contain
+     * a raw sound Uri or null for silent.
+     *
+     * <p>An unrecognized Uri is one for which {@link #isRingtoneSelectionUri(Uri)} returns false.
+     */
+    public static final int FROM_URI_RINGTONE_SELECTION_OR_SOUND = 1;
+
+    /**
+     * Configures {@link #RingtoneSelection#fromUri} to treat an unrecognized Uri as the vibration
+     * Uri for the returned {@link RingtoneSelection}, with null meaning
+     * {@link #VIBRATION_SOURCE_OFF}.
+     *
+     * <p>An unrecognized Uri is one for which {@link #isRingtoneSelectionUri(Uri)} returns false.
+     */
+    public static final int FROM_URI_RINGTONE_SELECTION_OR_VIBRATION = 2;
+
+    /**
+     * Configures {@link #RingtoneSelection#fromUri} to treat an unrecognized Uri as an invalid
+     * value. Null or an invalid values will revert to default behavior correspnoding to
+     * {@link #DEFAULT_SELECTION_URI_STRING}.
+     *
+     * <p>An unrecognized Uri is one for which {@link #isRingtoneSelectionUri(Uri)} returns false,
+     * which include {@code null}.
+     */
+    public static final int FROM_URI_RINGTONE_SELECTION_ONLY = 3;
+
+    /**
+     * How to treat values in {@link #fromUri}.
+     * @hide
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = "FROM_URI_", value = {
+            FROM_URI_RINGTONE_SELECTION_OR_SOUND,
+            FROM_URI_RINGTONE_SELECTION_OR_VIBRATION,
+            FROM_URI_RINGTONE_SELECTION_ONLY
+    })
+    public @interface FromUriBehavior {}
+
+    private static final String BASE_RINGTONE_URI = "content://media/ringtone";
+    /**
+     * String representation of a RingtoneSelection Uri that says to use defaults (equivalent
+     * to {@code new RingtoneSelection.Builder().build()}).
+     */
+    public static final String DEFAULT_SELECTION_URI_STRING = BASE_RINGTONE_URI;
+
+    private static final String MEDIA_URI_RINGTONE_PATH = "/ringtone";
+
+    /* Query param keys. */
+    private static final String URI_PARAM_SOUND_URI = "su";
+    private static final String URI_PARAM_SOUND_SOURCE = "ss";
+    private static final String URI_PARAM_VIBRATION_URI = "vu";
+    private static final String URI_PARAM_VIBRATION_SOURCE = "vs";
+
+    /* Common param values */
+    private static final String SOURCE_OFF_STRING = "off";
+
+    /* Vibration source param values. */
+    private static final String VIBRATION_SOURCE_AUDIO_CHANNEL_STRING = "ac";
+    private static final String VIBRATION_SOURCE_APPLICATION_PROVIDED_STRING = "app";
+    private static final String VIBRATION_SOURCE_HAPTIC_GENERATOR_STRING = "hg";
+
+    @Nullable
+    private final Uri mSoundUri;
+    @SoundSource
+    private final int mSoundSource;
+
+    @Nullable
+    private final Uri mVibrationUri;
+    @VibrationSource
+    private final int mVibrationSource;
+
+    private RingtoneSelection(@Nullable Uri soundUri, @SoundSource int soundSource,
+            @Nullable Uri vibrationUri, @VibrationSource int vibrationSource) {
+        // Enforce guarantees on the source values: revert to unset if they depend on something
+        // that's not set.
+        switch (soundSource) {
+            case SOUND_SOURCE_URI:
+            case SOUND_SOURCE_UNKNOWN:  // Allow unknown to revert to URI before default.
+                mSoundSource = soundUri != null ? SOUND_SOURCE_URI : SOUND_SOURCE_DEFAULT;
+                break;
+            default:
+                mSoundSource = soundSource;
+                break;
+        }
+        switch (vibrationSource) {
+            case VIBRATION_SOURCE_AUDIO_CHANNEL:
+            case VIBRATION_SOURCE_HAPTIC_GENERATOR:
+                mVibrationSource = soundUri != null ? vibrationSource : VIBRATION_SOURCE_DEFAULT;
+                break;
+            case VIBRATION_SOURCE_URI:
+            case VIBRATION_SOURCE_UNKNOWN:  // Allow unknown to revert to URI.
+                mVibrationSource =
+                        vibrationUri != null ? VIBRATION_SOURCE_URI : VIBRATION_SOURCE_DEFAULT;
+                break;
+            default:
+                mVibrationSource = vibrationSource;
+                break;
+        }
+        // Clear Uri values if they're un-used by the source.
+        switch (mSoundSource) {
+            case SOUND_SOURCE_OFF:
+                mSoundUri = null;
+                break;
+            default:
+                // Unset case isn't handled here: the defaulting behavior is left to the player.
+                mSoundUri = soundUri;
+                break;
+        }
+        switch (mVibrationSource) {
+            case VIBRATION_SOURCE_OFF:
+            case VIBRATION_SOURCE_APPLICATION_PROVIDED:
+            case VIBRATION_SOURCE_AUDIO_CHANNEL:
+            case VIBRATION_SOURCE_HAPTIC_GENERATOR:
+                mVibrationUri = null;
+                break;
+            default:
+                // Unset case isn't handled here: the defaulting behavior is left to the player.
+                mVibrationUri = vibrationUri;
+                break;
+        }
+    }
+
+    /**
+     * Returns the stored sound behavior.
+     */
+    @SoundSource
+    public int getSoundSource() {
+        return mSoundSource;
+    }
+
+    /**
+     * Returns the sound Uri for this selection. This is guaranteed to be non-null if
+     * {@link #getSoundSource} returns {@link #SOUND_SOURCE_URI}.
+     */
+    @Nullable
+    public Uri getSoundUri() {
+        return mSoundUri;
+    }
+
+    /**
+     * Returns the selected vibration behavior.
+     */
+    @VibrationSource
+    public int getVibrationSource() {
+        return mVibrationSource;
+    }
+
+    /**
+     * Returns the vibration Uri for this selection. This is guaranteed to be non-null if
+     * {@link #getVibrationSource} returns {@link #SOUND_SOURCE_URI}.
+     */
+    @Nullable
+    public Uri getVibrationUri() {
+        return mVibrationUri;
+    }
+
+    /**
+     * Converts the ringtone selection into a Uri-form, suitable for storing as a user preference
+     * or returning as a result.
+     */
+    @NonNull
+    public Uri toUri() {
+        Uri.Builder builder = new Uri.Builder()
+                .scheme(ContentResolver.SCHEME_CONTENT)
+                .authority(MediaStore.AUTHORITY)
+                .path(MEDIA_URI_RINGTONE_PATH);
+        if (mSoundUri != null) {
+            builder.appendQueryParameter(URI_PARAM_SOUND_URI, mSoundUri.toString());
+        }
+        // Only off is explicit for sound sources
+        String soundSourceStr = soundSourceToString(mSoundSource);
+        if (soundSourceStr != null) {
+            builder.appendQueryParameter(URI_PARAM_SOUND_SOURCE, soundSourceStr);
+        }
+        if (mVibrationUri != null) {
+            builder.appendQueryParameter(URI_PARAM_VIBRATION_URI, mVibrationUri.toString());
+        }
+        String vibrationSourceStr = vibrationSourceToString(mVibrationSource);
+        if (vibrationSourceStr != null) {
+            builder.appendQueryParameter(URI_PARAM_VIBRATION_SOURCE, vibrationSourceStr);
+        }
+        return builder.build();
+    }
+
+    /**
+     * Returns true if the Uri is an encoded {@link RingtoneSelection}. This method doesn't
+     * validate the parameters of the selection.
+     *
+     * @see #fromUri
+     * @see #toUri
+     */
+    public static boolean isRingtoneSelectionUri(@Nullable Uri uri) {
+        if (uri == null) {
+            return false;
+        }
+        // Any URI content://media/ringtone
+        return ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())
+                && MediaStore.AUTHORITY.equals(uri.getAuthority())
+                && MEDIA_URI_RINGTONE_PATH.equals(uri.getPath());
+    }
+
+
+
+    /**
+     * Converts a Uri into a RingtoneSelection.
+     *
+     * <p>Null values and Uris that {@link #isRingtoneSelectionUri(Uri)} returns false will be
+     * treated according to the behaviour specified by the {@code unrecognizedValueBehavior}
+     * parameter.
+     *
+     * @param uri The Uri to convert, potentially null.
+     * @param unrecognizedValueBehavior indicates how to treat values for which
+     *   {@link #isRingtoneSelectionUri(Uri)} returns false (including null).
+     * @return the RingtoneSelection represented by the given uri.
+     */
+    @NonNull
+    public static RingtoneSelection fromUri(@Nullable Uri uri,
+            @FromUriBehavior int unrecognizedValueBehavior) {
+        if (isRingtoneSelectionUri(uri)) {
+            return parseRingtoneSelectionUri(uri);
+        }
+        RingtoneSelection.Builder builder = new RingtoneSelection.Builder();
+        switch (unrecognizedValueBehavior) {
+            case FROM_URI_RINGTONE_SELECTION_ONLY:
+                // Always return use-defaults for unrecognized ringtone selection Uris.
+                return builder.build();
+            case FROM_URI_RINGTONE_SELECTION_OR_SOUND:
+                if (uri == null) {
+                    return builder.setSoundSource(SOUND_SOURCE_OFF).build();
+                } else {
+                    return builder.setSoundSource(uri).build();
+                }
+            case FROM_URI_RINGTONE_SELECTION_OR_VIBRATION:
+                if (uri == null) {
+                    return builder.setVibrationSource(VIBRATION_SOURCE_OFF).build();
+                } else {
+                    return builder.setVibrationSource(uri).build();
+                }
+            default:
+                throw new IllegalArgumentException("Unknown behavior parameter: "
+                        + unrecognizedValueBehavior);
+        }
+    }
+
+    /** Parses the Uri, which has already been checked for {@link #isRingtoneSelectionUri(Uri)}. */
+    @NonNull
+    private static RingtoneSelection parseRingtoneSelectionUri(@NonNull Uri uri) {
+        RingtoneSelection.Builder builder = new RingtoneSelection.Builder();
+        int soundSource = stringToSoundSource(uri.getQueryParameter(URI_PARAM_SOUND_SOURCE));
+        int vibrationSource = stringToVibrationSource(
+                uri.getQueryParameter(URI_PARAM_VIBRATION_SOURCE));
+        Uri soundUri = getParamAsUri(uri, URI_PARAM_SOUND_URI);
+        Uri vibrationUri = getParamAsUri(uri, URI_PARAM_VIBRATION_URI);
+        if (soundUri != null) {
+            builder.setSoundSource(soundUri);
+        }
+        if (vibrationUri != null) {
+            builder.setVibrationSource(vibrationUri);
+        }
+        // Don't set the source if there's a URI and the source is default, because that will
+        // override the Uri source set above. In effect, we prioritise "explicit" sources over
+        // an implicit Uri source - except for "default", which isn't really explicit.
+        if (soundSource != SOUND_SOURCE_DEFAULT || soundUri == null) {
+            builder.setSoundSource(soundSource);
+        }
+        if (vibrationSource != VIBRATION_SOURCE_DEFAULT || vibrationUri == null) {
+            builder.setVibrationSource(vibrationSource);
+        }
+        return builder.build();
+    }
+
+    @Nullable
+    private static Uri getParamAsUri(@NonNull Uri uri, String param) {
+        // This returns the uri-decoded value, no need to further decode.
+        String value = uri.getQueryParameter(param);
+        if (value == null) {
+            return null;
+        }
+        return Uri.parse(value);
+    }
+
+    /**
+     * Converts the {@link SoundSource} to the uri query param value for it, or null
+     * if the sound source is default, unknown, or implicit (uri).
+     */
+    @Nullable
+    private static String soundSourceToString(@SoundSource int soundSource) {
+        switch (soundSource) {
+            case SOUND_SOURCE_OFF: return SOURCE_OFF_STRING;
+            default: return null;
+        }
+    }
+
+    /**
+     * Returns the sound source int corresponding to the query string value. Returns
+     * {@link #SOUND_SOURCE_UNKNOWN} if the value isn't recognised, and
+     * {@link #SOUND_SOURCE_DEFAULT} if the value is {@code null} (not in the Uri).
+     */
+    @SoundSource
+    private static int stringToSoundSource(@Nullable String soundSource) {
+        if (soundSource == null) {
+            return SOUND_SOURCE_DEFAULT;
+        }
+        switch (soundSource) {
+            case SOURCE_OFF_STRING: return SOUND_SOURCE_OFF;
+            default: return SOUND_SOURCE_UNKNOWN;
+        }
+    }
+
+    /**
+     * Converts the {@code vibrationSource} to the uri query param value for it, or null
+     * if the vibration source is default, unknown, or implicit (uri).
+     */
+    @Nullable
+    private static String vibrationSourceToString(@VibrationSource int vibrationSource) {
+        switch (vibrationSource) {
+            case VIBRATION_SOURCE_OFF: return SOURCE_OFF_STRING;
+            case VIBRATION_SOURCE_AUDIO_CHANNEL: return VIBRATION_SOURCE_AUDIO_CHANNEL_STRING;
+            case VIBRATION_SOURCE_HAPTIC_GENERATOR:
+                return VIBRATION_SOURCE_HAPTIC_GENERATOR_STRING;
+            case VIBRATION_SOURCE_APPLICATION_PROVIDED:
+                return VIBRATION_SOURCE_APPLICATION_PROVIDED_STRING;
+            default: return null;
+        }
+    }
+
+    @VibrationSource
+    private static int stringToVibrationSource(@Nullable String vibrationSource) {
+        if (vibrationSource == null) {
+            return VIBRATION_SOURCE_DEFAULT;
+        }
+        switch (vibrationSource) {
+            case SOURCE_OFF_STRING: return VIBRATION_SOURCE_OFF;
+            case VIBRATION_SOURCE_AUDIO_CHANNEL_STRING: return VIBRATION_SOURCE_AUDIO_CHANNEL;
+            case VIBRATION_SOURCE_HAPTIC_GENERATOR_STRING: return VIBRATION_SOURCE_HAPTIC_GENERATOR;
+            case VIBRATION_SOURCE_APPLICATION_PROVIDED_STRING:
+                return VIBRATION_SOURCE_APPLICATION_PROVIDED;
+            default: return VIBRATION_SOURCE_UNKNOWN;
+        }
+    }
+
+    /**
+     * Builder for {@link RingtoneSelection}. In general, this builder will be used by interfaces
+     * allowing the user to configure their selection. Once a selection is stored as a Uri, then
+     * the RingtoneSelection can be loaded directly using {@link RingtoneSelection#fromUri}.
+     */
+    public static final class Builder {
+        private Uri mSoundUri;
+        private Uri mVibrationUri;
+        @SoundSource private int mSoundSource = SOUND_SOURCE_DEFAULT;
+        @VibrationSource private int mVibrationSource = VIBRATION_SOURCE_DEFAULT;
+
+        /**
+         * Creates a new {@link RingtoneSelection} builder. A default ringtone selection has its
+         * sound and vibration source unset, which means they would fall back to system defaults.
+         */
+        public Builder() {}
+
+        /**
+         * Creates a builder initialized with the given ringtone selection.
+         */
+        public Builder(@NonNull RingtoneSelection selection) {
+            requireNonNull(selection);
+            mSoundSource = selection.getSoundSource();
+            mSoundUri = selection.getSoundUri();
+            mVibrationSource = selection.getVibrationSource();
+            mVibrationUri = selection.getVibrationUri();
+        }
+
+        /**
+         * Sets the desired sound source.
+         *
+         * <p>Values other than {@link #SOUND_SOURCE_URI} will clear any previous sound Uri.
+         * For {@link #SOUND_SOURCE_URI}, the {@link #setSoundSource(Uri)} method should be
+         * used instead, as setting it here will have no effect unless the Uri is also set.
+         */
+        @NonNull
+        public Builder setSoundSource(@SoundSource int soundSource) {
+            mSoundSource = soundSource;
+            if (soundSource != SOUND_SOURCE_URI && soundSource != SOUND_SOURCE_UNKNOWN) {
+                // Note that this means the configuration of "silent sound, but use haptic
+                // generator" is currently not supported. Future support could be added by either
+                // using the vibration uri in that case, or by having a special
+                // "setSoundUriForVibrationOnly(Uri)" method that sets sound source to off but
+                // also retains the Uri.
+                mSoundUri = null;
+            }
+            return this;
+        }
+
+        /**
+         * Sets the sound source to {@link #SOUND_SOURCE_URI}, and the sound Uri to the
+         * specified {@link Uri}.
+         */
+        @NonNull
+        public Builder setSoundSource(@NonNull Uri soundUri) {
+            mSoundUri = requireNonNull(soundUri);
+            mSoundSource = SOUND_SOURCE_URI;
+            return this;
+        }
+
+        /**
+         * Sets the vibration source to the specified value.
+         *
+         * <p>Values other than {@link #VIBRATION_SOURCE_URI} will clear any previous vibration Uri.
+         * For {@link #VIBRATION_SOURCE_URI}, the {@link #setVibrationSource(Uri)} method should be
+         * used instead, as setting it here will have no effect unless the Uri is also set.
+         */
+        @NonNull
+        public Builder setVibrationSource(@VibrationSource int vibrationSource) {
+            mVibrationSource = vibrationSource;
+            if (vibrationSource != VIBRATION_SOURCE_URI
+                    && vibrationSource != VIBRATION_SOURCE_UNKNOWN) {
+                mVibrationUri = null;
+            }
+            return this;
+        }
+
+        /**
+         * Sets the vibration source to {@link #VIBRATION_SOURCE_URI}, and the vibration Uri to the
+         * specified {@link Uri}.
+         */
+        @NonNull
+        public Builder setVibrationSource(@NonNull Uri vibrationUri) {
+            mVibrationUri = requireNonNull(vibrationUri);
+            mVibrationSource = VIBRATION_SOURCE_URI;
+            return this;
+        }
+
+        /**
+         * Returns the ringtone Uri that was configured.
+         */
+        @NonNull
+        public RingtoneSelection build() {
+            return new RingtoneSelection(mSoundUri, mSoundSource, mVibrationUri, mVibrationSource);
+        }
+    }
+}
diff --git a/media/java/android/media/RingtoneV1.java b/media/java/android/media/RingtoneV1.java
new file mode 100644
index 0000000..3c54d4a
--- /dev/null
+++ b/media/java/android/media/RingtoneV1.java
@@ -0,0 +1,614 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media;
+
+import android.annotation.Nullable;
+import android.compat.annotation.UnsupportedAppUsage;
+import android.content.Context;
+import android.content.res.AssetFileDescriptor;
+import android.content.res.Resources.NotFoundException;
+import android.media.audiofx.HapticGenerator;
+import android.net.Uri;
+import android.os.Binder;
+import android.os.Build;
+import android.os.RemoteException;
+import android.os.Trace;
+import android.os.VibrationEffect;
+import android.provider.MediaStore;
+import android.provider.MediaStore.MediaColumns;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+/**
+ * Hosts original Ringtone implementation, retained for flagging large builder+vibration features
+ * in RingtoneV2.java. This does not support new features in the V2 builder.
+ *
+ * Only modified methods are moved here.
+ *
+ * @hide
+ */
+class RingtoneV1 implements Ringtone.ApiInterface {
+    private static final String TAG = "RingtoneV1";
+    private static final boolean LOGD = true;
+
+    private static final String[] MEDIA_COLUMNS = new String[] {
+            MediaStore.Audio.Media._ID,
+            MediaStore.Audio.Media.TITLE
+    };
+    /** Selection that limits query results to just audio files */
+    private static final String MEDIA_SELECTION = MediaColumns.MIME_TYPE + " LIKE 'audio/%' OR "
+            + MediaColumns.MIME_TYPE + " IN ('application/ogg', 'application/x-flac')";
+
+    // keep references on active Ringtones until stopped or completion listener called.
+    private static final ArrayList<RingtoneV1> sActiveRingtones = new ArrayList<>();
+
+    private final Context mContext;
+    private final AudioManager mAudioManager;
+    private VolumeShaper.Configuration mVolumeShaperConfig;
+    private VolumeShaper mVolumeShaper;
+
+    /**
+     * Flag indicating if we're allowed to fall back to remote playback using
+     * {@link #mRemotePlayer}. Typically this is false when we're the remote
+     * player and there is nobody else to delegate to.
+     */
+    private final boolean mAllowRemote;
+    private final IRingtonePlayer mRemotePlayer;
+    private final Binder mRemoteToken;
+
+    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
+    private MediaPlayer mLocalPlayer;
+    private final MyOnCompletionListener mCompletionListener = new MyOnCompletionListener();
+    private HapticGenerator mHapticGenerator;
+
+    @UnsupportedAppUsage
+    private Uri mUri;
+    private String mTitle;
+
+    private AudioAttributes mAudioAttributes = new AudioAttributes.Builder()
+            .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
+            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+            .build();
+    private boolean mPreferBuiltinDevice;
+    // playback properties, use synchronized with mPlaybackSettingsLock
+    private boolean mIsLooping = false;
+    private float mVolume = 1.0f;
+    private boolean mHapticGeneratorEnabled = false;
+    private final Object mPlaybackSettingsLock = new Object();
+
+    /** {@hide} */
+    @UnsupportedAppUsage
+    public RingtoneV1(Context context, boolean allowRemote) {
+        mContext = context;
+        mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+        mAllowRemote = allowRemote;
+        mRemotePlayer = allowRemote ? mAudioManager.getRingtonePlayer() : null;
+        mRemoteToken = allowRemote ? new Binder() : null;
+    }
+
+    /**
+     * Sets the stream type where this ringtone will be played.
+     *
+     * @param streamType The stream, see {@link AudioManager}.
+     * @deprecated use {@link #setAudioAttributes(AudioAttributes)}
+     */
+    @Deprecated
+    public void setStreamType(int streamType) {
+        PlayerBase.deprecateStreamTypeForPlayback(streamType, "Ringtone", "setStreamType()");
+        setAudioAttributes(new AudioAttributes.Builder()
+                .setInternalLegacyStreamType(streamType)
+                .build());
+    }
+
+    /**
+     * Gets the stream type where this ringtone will be played.
+     *
+     * @return The stream type, see {@link AudioManager}.
+     * @deprecated use of stream types is deprecated, see
+     *     {@link #setAudioAttributes(AudioAttributes)}
+     */
+    @Deprecated
+    public int getStreamType() {
+        return AudioAttributes.toLegacyStreamType(mAudioAttributes);
+    }
+
+    /**
+     * Sets the {@link AudioAttributes} for this ringtone.
+     * @param attributes the non-null attributes characterizing this ringtone.
+     */
+    public void setAudioAttributes(AudioAttributes attributes)
+            throws IllegalArgumentException {
+        setAudioAttributesField(attributes);
+        // The audio attributes have to be set before the media player is prepared.
+        // Re-initialize it.
+        setUri(mUri, mVolumeShaperConfig);
+        reinitializeActivePlayer();
+    }
+
+    /**
+     * Same as {@link #setAudioAttributes(AudioAttributes)} except this one does not create
+     * the media player.
+     * @hide
+     */
+    public void setAudioAttributesField(@Nullable AudioAttributes attributes) {
+        if (attributes == null) {
+            throw new IllegalArgumentException("Invalid null AudioAttributes for Ringtone");
+        }
+        mAudioAttributes = attributes;
+    }
+
+    /**
+     * Finds the output device of type {@link AudioDeviceInfo#TYPE_BUILTIN_SPEAKER}. This device is
+     * the one on which outgoing audio for SIM calls is played.
+     *
+     * @param audioManager the audio manage.
+     * @return the {@link AudioDeviceInfo} corresponding to the builtin device, or {@code null} if
+     *     none can be found.
+     */
+    private AudioDeviceInfo getBuiltinDevice(AudioManager audioManager) {
+        AudioDeviceInfo[] deviceList = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
+        for (AudioDeviceInfo device : deviceList) {
+            if (device.getType() == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) {
+                return device;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Sets the preferred device of the ringtong playback to the built-in device.
+     *
+     * @hide
+     */
+    public boolean preferBuiltinDevice(boolean enable) {
+        mPreferBuiltinDevice = enable;
+        if (mLocalPlayer == null) {
+            return true;
+        }
+        return mLocalPlayer.setPreferredDevice(getBuiltinDevice(mAudioManager));
+    }
+
+    /**
+     * Creates a local media player for the ringtone using currently set attributes.
+     * @return true if media player creation succeeded or is deferred,
+     * false if it did not succeed and can't be tried remotely.
+     * @hide
+     */
+    public boolean reinitializeActivePlayer() {
+        Trace.beginSection("reinitializeActivePlayer");
+        if (mUri == null) {
+            Log.e(TAG, "Could not create media player as no URI was provided.");
+            return mAllowRemote && mRemotePlayer != null;
+        }
+        destroyLocalPlayer();
+        // try opening uri locally before delegating to remote player
+        mLocalPlayer = new MediaPlayer();
+        try {
+            mLocalPlayer.setDataSource(mContext, mUri);
+            mLocalPlayer.setAudioAttributes(mAudioAttributes);
+            mLocalPlayer.setPreferredDevice(
+                    mPreferBuiltinDevice ? getBuiltinDevice(mAudioManager) : null);
+            synchronized (mPlaybackSettingsLock) {
+                applyPlaybackProperties_sync();
+            }
+            if (mVolumeShaperConfig != null) {
+                mVolumeShaper = mLocalPlayer.createVolumeShaper(mVolumeShaperConfig);
+            }
+            mLocalPlayer.prepare();
+
+        } catch (SecurityException | IOException e) {
+            destroyLocalPlayer();
+            if (!mAllowRemote) {
+                Log.w(TAG, "Remote playback not allowed: " + e);
+            }
+        }
+
+        if (LOGD) {
+            if (mLocalPlayer != null) {
+                Log.d(TAG, "Successfully created local player");
+            } else {
+                Log.d(TAG, "Problem opening; delegating to remote player");
+            }
+        }
+        Trace.endSection();
+        return mLocalPlayer != null || (mAllowRemote && mRemotePlayer != null);
+    }
+
+    /**
+     * Same as AudioManager.hasHapticChannels except it assumes an already created ringtone.
+     * If the ringtone has not been created, it will load based on URI provided at {@link #setUri}
+     * and if not URI has been set, it will assume no haptic channels are present.
+     * @hide
+     */
+    public boolean hasHapticChannels() {
+        // FIXME: support remote player, or internalize haptic channels support and remove entirely.
+        try {
+            android.os.Trace.beginSection("Ringtone.hasHapticChannels");
+            if (mLocalPlayer != null) {
+                for(MediaPlayer.TrackInfo trackInfo : mLocalPlayer.getTrackInfo()) {
+                    if (trackInfo.hasHapticChannels()) {
+                        return true;
+                    }
+                }
+            }
+        } finally {
+            android.os.Trace.endSection();
+        }
+        return false;
+    }
+
+    /**
+     * Returns whether a local player has been created for this ringtone.
+     * @hide
+     */
+    @VisibleForTesting
+    public boolean hasLocalPlayer() {
+        return mLocalPlayer != null;
+    }
+
+    public @Ringtone.RingtoneMedia int getEnabledMedia() {
+        return Ringtone.MEDIA_SOUND;  // RingtoneV2 only
+    }
+
+    public VibrationEffect getVibrationEffect() {
+        return null;  // RingtoneV2 only
+    }
+
+    /**
+     * Returns the {@link AudioAttributes} used by this object.
+     * @return the {@link AudioAttributes} that were set with
+     *     {@link #setAudioAttributes(AudioAttributes)} or the default attributes if none were set.
+     */
+    public AudioAttributes getAudioAttributes() {
+        return mAudioAttributes;
+    }
+
+    /**
+     * Sets the player to be looping or non-looping.
+     * @param looping whether to loop or not.
+     */
+    public void setLooping(boolean looping) {
+        synchronized (mPlaybackSettingsLock) {
+            mIsLooping = looping;
+            applyPlaybackProperties_sync();
+        }
+    }
+
+    /**
+     * Returns whether the looping mode was enabled on this player.
+     * @return true if this player loops when playing.
+     */
+    public boolean isLooping() {
+        synchronized (mPlaybackSettingsLock) {
+            return mIsLooping;
+        }
+    }
+
+    /**
+     * Sets the volume on this player.
+     * @param volume a raw scalar in range 0.0 to 1.0, where 0.0 mutes this player, and 1.0
+     *   corresponds to no attenuation being applied.
+     */
+    public void setVolume(float volume) {
+        synchronized (mPlaybackSettingsLock) {
+            if (volume < 0.0f) { volume = 0.0f; }
+            if (volume > 1.0f) { volume = 1.0f; }
+            mVolume = volume;
+            applyPlaybackProperties_sync();
+        }
+    }
+
+    /**
+     * Returns the volume scalar set on this player.
+     * @return a value between 0.0f and 1.0f.
+     */
+    public float getVolume() {
+        synchronized (mPlaybackSettingsLock) {
+            return mVolume;
+        }
+    }
+
+    /**
+     * Enable or disable the {@link android.media.audiofx.HapticGenerator} effect. The effect can
+     * only be enabled on devices that support the effect.
+     *
+     * @return true if the HapticGenerator effect is successfully enabled. Otherwise, return false.
+     * @see android.media.audiofx.HapticGenerator#isAvailable()
+     */
+    public boolean setHapticGeneratorEnabled(boolean enabled) {
+        if (!HapticGenerator.isAvailable()) {
+            return false;
+        }
+        synchronized (mPlaybackSettingsLock) {
+            mHapticGeneratorEnabled = enabled;
+            applyPlaybackProperties_sync();
+        }
+        return true;
+    }
+
+    /**
+     * Return whether the {@link android.media.audiofx.HapticGenerator} effect is enabled or not.
+     * @return true if the HapticGenerator is enabled.
+     */
+    public boolean isHapticGeneratorEnabled() {
+        synchronized (mPlaybackSettingsLock) {
+            return mHapticGeneratorEnabled;
+        }
+    }
+
+    /**
+     * Must be called synchronized on mPlaybackSettingsLock
+     */
+    private void applyPlaybackProperties_sync() {
+        if (mLocalPlayer != null) {
+            mLocalPlayer.setVolume(mVolume);
+            mLocalPlayer.setLooping(mIsLooping);
+            if (mHapticGenerator == null && mHapticGeneratorEnabled) {
+                mHapticGenerator = HapticGenerator.create(mLocalPlayer.getAudioSessionId());
+            }
+            if (mHapticGenerator != null) {
+                mHapticGenerator.setEnabled(mHapticGeneratorEnabled);
+            }
+        } else if (mAllowRemote && (mRemotePlayer != null)) {
+            try {
+                mRemotePlayer.setPlaybackProperties(
+                        mRemoteToken, mVolume, mIsLooping, mHapticGeneratorEnabled);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Problem setting playback properties: ", e);
+            }
+        } else {
+            Log.w(TAG,
+                    "Neither local nor remote player available when applying playback properties");
+        }
+    }
+
+    /**
+     * Returns a human-presentable title for ringtone. Looks in media
+     * content provider. If not in either, uses the filename
+     *
+     * @param context A context used for querying.
+     */
+    public String getTitle(Context context) {
+        if (mTitle != null) return mTitle;
+        return mTitle = Ringtone.getTitle(context, mUri, true /*followSettingsUri*/, mAllowRemote);
+    }
+
+    /**
+     * Set {@link Uri} to be used for ringtone playback.
+     * {@link IRingtonePlayer}.
+     *
+     * @hide
+     */
+    @UnsupportedAppUsage
+    public void setUri(Uri uri) {
+        setUri(uri, null);
+    }
+
+    /**
+     * @hide
+     */
+    public void setVolumeShaperConfig(@Nullable VolumeShaper.Configuration volumeShaperConfig) {
+        mVolumeShaperConfig = volumeShaperConfig;
+    }
+
+    /**
+     * Set {@link Uri} to be used for ringtone playback. Attempts to open
+     * locally, otherwise will delegate playback to remote
+     * {@link IRingtonePlayer}. Add {@link VolumeShaper} if required.
+     *
+     * @hide
+     */
+    public void setUri(Uri uri, @Nullable VolumeShaper.Configuration volumeShaperConfig) {
+        mVolumeShaperConfig = volumeShaperConfig;
+        mUri = uri;
+        if (mUri == null) {
+            destroyLocalPlayer();
+        }
+    }
+
+    /** {@hide} */
+    @UnsupportedAppUsage
+    public Uri getUri() {
+        return mUri;
+    }
+
+    /**
+     * Plays the ringtone.
+     */
+    public void play() {
+        if (mLocalPlayer != null) {
+            // Play ringtones if stream volume is over 0 or if it is a haptic-only ringtone
+            // (typically because ringer mode is vibrate).
+            if (mAudioManager.getStreamVolume(AudioAttributes.toLegacyStreamType(mAudioAttributes))
+                    != 0) {
+                startLocalPlayer();
+            } else if (!mAudioAttributes.areHapticChannelsMuted() && hasHapticChannels()) {
+                // is haptic only ringtone
+                startLocalPlayer();
+            }
+        } else if (mAllowRemote && (mRemotePlayer != null) && (mUri != null)) {
+            final Uri canonicalUri = mUri.getCanonicalUri();
+            final boolean looping;
+            final float volume;
+            synchronized (mPlaybackSettingsLock) {
+                looping = mIsLooping;
+                volume = mVolume;
+            }
+            try {
+                mRemotePlayer.playWithVolumeShaping(mRemoteToken, canonicalUri, mAudioAttributes,
+                        volume, looping, mVolumeShaperConfig);
+            } catch (RemoteException e) {
+                if (!playFallbackRingtone()) {
+                    Log.w(TAG, "Problem playing ringtone: " + e);
+                }
+            }
+        } else {
+            if (!playFallbackRingtone()) {
+                Log.w(TAG, "Neither local nor remote playback available");
+            }
+        }
+    }
+
+    /**
+     * Stops a playing ringtone.
+     */
+    public void stop() {
+        if (mLocalPlayer != null) {
+            destroyLocalPlayer();
+        } else if (mAllowRemote && (mRemotePlayer != null)) {
+            try {
+                mRemotePlayer.stop(mRemoteToken);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Problem stopping ringtone: " + e);
+            }
+        }
+    }
+
+    private void destroyLocalPlayer() {
+        if (mLocalPlayer != null) {
+            if (mHapticGenerator != null) {
+                mHapticGenerator.release();
+                mHapticGenerator = null;
+            }
+            mLocalPlayer.setOnCompletionListener(null);
+            mLocalPlayer.reset();
+            mLocalPlayer.release();
+            mLocalPlayer = null;
+            mVolumeShaper = null;
+            synchronized (sActiveRingtones) {
+                sActiveRingtones.remove(this);
+            }
+        }
+    }
+
+    private void startLocalPlayer() {
+        if (mLocalPlayer == null) {
+            return;
+        }
+        synchronized (sActiveRingtones) {
+            sActiveRingtones.add(this);
+        }
+        if (LOGD) {
+            Log.d(TAG, "Starting ringtone playback");
+        }
+        mLocalPlayer.setOnCompletionListener(mCompletionListener);
+        mLocalPlayer.start();
+        if (mVolumeShaper != null) {
+            mVolumeShaper.apply(VolumeShaper.Operation.PLAY);
+        }
+    }
+
+    /**
+     * Whether this ringtone is currently playing.
+     *
+     * @return True if playing, false otherwise.
+     */
+    public boolean isPlaying() {
+        if (mLocalPlayer != null) {
+            return mLocalPlayer.isPlaying();
+        } else if (mAllowRemote && (mRemotePlayer != null)) {
+            try {
+                return mRemotePlayer.isPlaying(mRemoteToken);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Problem checking ringtone: " + e);
+                return false;
+            }
+        } else {
+            Log.w(TAG, "Neither local nor remote playback available");
+            return false;
+        }
+    }
+
+    private boolean playFallbackRingtone() {
+        int streamType = AudioAttributes.toLegacyStreamType(mAudioAttributes);
+        if (mAudioManager.getStreamVolume(streamType) == 0) {
+            return false;
+        }
+        int ringtoneType = RingtoneManager.getDefaultType(mUri);
+        if (ringtoneType != -1 &&
+                RingtoneManager.getActualDefaultRingtoneUri(mContext, ringtoneType) == null) {
+            Log.w(TAG, "not playing fallback for " + mUri);
+            return false;
+        }
+        // Default ringtone, try fallback ringtone.
+        try {
+            AssetFileDescriptor afd = mContext.getResources().openRawResourceFd(
+                    com.android.internal.R.raw.fallbackring);
+            if (afd == null) {
+                Log.e(TAG, "Could not load fallback ringtone");
+                return false;
+            }
+            mLocalPlayer = new MediaPlayer();
+            if (afd.getDeclaredLength() < 0) {
+                mLocalPlayer.setDataSource(afd.getFileDescriptor());
+            } else {
+                mLocalPlayer.setDataSource(afd.getFileDescriptor(),
+                        afd.getStartOffset(),
+                        afd.getDeclaredLength());
+            }
+            mLocalPlayer.setAudioAttributes(mAudioAttributes);
+            synchronized (mPlaybackSettingsLock) {
+                applyPlaybackProperties_sync();
+            }
+            if (mVolumeShaperConfig != null) {
+                mVolumeShaper = mLocalPlayer.createVolumeShaper(mVolumeShaperConfig);
+            }
+            mLocalPlayer.prepare();
+            startLocalPlayer();
+            afd.close();
+        } catch (IOException ioe) {
+            destroyLocalPlayer();
+            Log.e(TAG, "Failed to open fallback ringtone");
+            return false;
+        } catch (NotFoundException nfe) {
+            Log.e(TAG, "Fallback ringtone does not exist");
+            return false;
+        }
+        return true;
+    }
+
+    public boolean getPreferBuiltinDevice() {
+        return mPreferBuiltinDevice;
+    }
+
+    public VolumeShaper.Configuration getVolumeShaperConfig() {
+        return mVolumeShaperConfig;
+    }
+
+    public boolean isLocalOnly() {
+        return mAllowRemote;
+    }
+
+    public boolean isUsingRemotePlayer() {
+        // V2 testing api, but this is the v1 approximation.
+        return (mLocalPlayer == null) && mAllowRemote && (mRemotePlayer != null);
+    }
+
+    class MyOnCompletionListener implements MediaPlayer.OnCompletionListener {
+        @Override
+        public void onCompletion(MediaPlayer mp) {
+            synchronized (sActiveRingtones) {
+                sActiveRingtones.remove(RingtoneV1.this);
+            }
+            mp.setOnCompletionListener(null); // Help the Java GC: break the refcount cycle.
+        }
+    }
+}
diff --git a/media/java/android/media/RingtoneV2.java b/media/java/android/media/RingtoneV2.java
new file mode 100644
index 0000000..f1a8155
--- /dev/null
+++ b/media/java/android/media/RingtoneV2.java
@@ -0,0 +1,690 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.compat.annotation.UnsupportedAppUsage;
+import android.content.Context;
+import android.content.res.AssetFileDescriptor;
+import android.content.res.Resources.NotFoundException;
+import android.media.Ringtone.Injectables;
+import android.net.Uri;
+import android.os.Binder;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.Trace;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.provider.MediaStore;
+import android.provider.MediaStore.MediaColumns;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.io.IOException;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * New Ringtone implementation, supporting vibration as well as sound, and configuration via a
+ * builder. During flagged transition, the original implementation is in RingtoneV1.java.
+ *
+ * Only modified methods are moved here.
+ *
+ * @hide
+ */
+class RingtoneV2 implements Ringtone.ApiInterface {
+    private static final String TAG = "RingtoneV2";
+
+    /**
+     * The ringtone should only play sound. Any vibration is managed externally.
+     * @hide
+     */
+    public static final int MEDIA_SOUND = 1;
+    /**
+     * The ringtone should only play vibration. Any sound is managed externally.
+     * Requires the {@link android.Manifest.permission#VIBRATE} permission.
+     * @hide
+     */
+    public static final int MEDIA_VIBRATION = 1 << 1;
+    /**
+     * The ringtone should play sound and vibration.
+     * @hide
+     */
+    public static final int MEDIA_SOUND_AND_VIBRATION = MEDIA_SOUND | MEDIA_VIBRATION;
+
+    // This is not a public value, because apps shouldn't enable "all" media - that wouldn't be
+    // safe if new media types were added.
+    static final int MEDIA_ALL = MEDIA_SOUND | MEDIA_VIBRATION;
+
+    /**
+     * Declares the types of media that this Ringtone is allowed to play.
+     * @hide
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = "MEDIA_", value = {
+            MEDIA_SOUND,
+            MEDIA_VIBRATION,
+            MEDIA_SOUND_AND_VIBRATION,
+    })
+    public @interface RingtoneMedia {}
+
+    private static final String[] MEDIA_COLUMNS = new String[] {
+        MediaStore.Audio.Media._ID,
+        MediaStore.Audio.Media.TITLE
+    };
+    /** Selection that limits query results to just audio files */
+    private static final String MEDIA_SELECTION = MediaColumns.MIME_TYPE + " LIKE 'audio/%' OR "
+            + MediaColumns.MIME_TYPE + " IN ('application/ogg', 'application/x-flac')";
+
+    private final Context mContext;
+    private final Vibrator mVibrator;
+    private final AudioManager mAudioManager;
+    private VolumeShaper.Configuration mVolumeShaperConfig;
+
+    /**
+     * Flag indicating if we're allowed to fall back to remote playback using
+     * {@link #mRemoteRingtoneService}. Typically this is false when we're the remote
+     * player and there is nobody else to delegate to.
+     */
+    private final boolean mAllowRemote;
+    private final IRingtonePlayer mRemoteRingtoneService;
+    private final Injectables mInjectables;
+
+    private final int mEnabledMedia;
+
+    private final Uri mUri;
+    private String mTitle;
+
+    private AudioAttributes mAudioAttributes;
+    private boolean mUseExactAudioAttributes;
+    private boolean mPreferBuiltinDevice;
+    private RingtonePlayer mActivePlayer;
+    // playback properties, use synchronized with mPlaybackSettingsLock
+    private boolean mIsLooping;
+    private float mVolume;
+    private boolean mHapticGeneratorEnabled;
+    private final Object mPlaybackSettingsLock = new Object();
+    private final VibrationEffect mVibrationEffect;
+
+    /** Only for use by Ringtone constructor */
+    RingtoneV2(@NonNull Context context, @NonNull Injectables injectables,
+                       boolean allowRemote, @Ringtone.RingtoneMedia int enabledMedia,
+                       @Nullable Uri uri, @NonNull AudioAttributes audioAttributes,
+                       boolean useExactAudioAttributes,
+                       @Nullable VolumeShaper.Configuration volumeShaperConfig,
+                       boolean preferBuiltinDevice, float soundVolume, boolean looping,
+                       boolean hapticGeneratorEnabled, @Nullable VibrationEffect vibrationEffect) {
+        // Context
+        mContext = context;
+        mInjectables = injectables;
+        mVibrator = mContext.getSystemService(Vibrator.class);
+        mAudioManager = mContext.getSystemService(AudioManager.class);
+        mRemoteRingtoneService = allowRemote ? mAudioManager.getRingtonePlayer() : null;
+        mAllowRemote = (mRemoteRingtoneService != null);  // Only set if allowed, and present.
+
+        // Properties potentially propagated to remote player.
+        mEnabledMedia = enabledMedia;
+        mUri = uri;
+        mAudioAttributes = audioAttributes;
+        mUseExactAudioAttributes = useExactAudioAttributes;
+        mVolumeShaperConfig = volumeShaperConfig;
+        mPreferBuiltinDevice = preferBuiltinDevice;  // system-only, not supported for remote play.
+        mVolume = soundVolume;
+        mIsLooping = looping;
+        mHapticGeneratorEnabled = hapticGeneratorEnabled;
+        mVibrationEffect = vibrationEffect;
+    }
+
+    /** @hide */
+    @RingtoneMedia
+    public int getEnabledMedia() {
+        return mEnabledMedia;
+    }
+
+    /**
+     * Sets the stream type where this ringtone will be played.
+     *
+     * @param streamType The stream, see {@link AudioManager}.
+     * @deprecated use {@link #setAudioAttributes(AudioAttributes)}
+     */
+    @Deprecated
+    public void setStreamType(int streamType) {
+        setAudioAttributes(
+                getAudioAttributesForLegacyStreamType(streamType, "setStreamType()"));
+    }
+
+    private AudioAttributes getAudioAttributesForLegacyStreamType(int streamType, String originOp) {
+        PlayerBase.deprecateStreamTypeForPlayback(streamType, "Ringtone", originOp);
+        return new AudioAttributes.Builder()
+                .setInternalLegacyStreamType(streamType)
+                .build();
+    }
+
+    /**
+     * Gets the stream type where this ringtone will be played.
+     *
+     * @return The stream type, see {@link AudioManager}.
+     * @deprecated use of stream types is deprecated, see
+     *     {@link #setAudioAttributes(AudioAttributes)}
+     */
+    @Deprecated
+    public int getStreamType() {
+        return AudioAttributes.toLegacyStreamType(mAudioAttributes);
+    }
+
+    /**
+     * Sets the {@link AudioAttributes} for this ringtone.
+     * @param attributes the non-null attributes characterizing this ringtone.
+     */
+    public void setAudioAttributes(AudioAttributes attributes)
+            throws IllegalArgumentException {
+        // TODO: deprecate this method - it will be done with a builder.
+        if (attributes == null) {
+            throw new IllegalArgumentException("Invalid null AudioAttributes for Ringtone");
+        }
+        mAudioAttributes = attributes;
+        // Setting the audio attributes requires re-initializing the player.
+        if (mActivePlayer != null) {
+            // The audio attributes have to be set before the media player is prepared.
+            // Re-initialize it.
+            reinitializeActivePlayer();
+        }
+    }
+
+    /**
+     * Returns the vibration effect that this ringtone was created with, if vibration is enabled.
+     * Otherwise, returns null.
+     * @hide
+     */
+    @Nullable
+    public VibrationEffect getVibrationEffect() {
+        return mVibrationEffect;
+    }
+
+    /** @hide */
+    @VisibleForTesting
+    public boolean getPreferBuiltinDevice() {
+        return mPreferBuiltinDevice;
+    }
+
+    /** @hide */
+    @VisibleForTesting
+    public VolumeShaper.Configuration getVolumeShaperConfig() {
+        return mVolumeShaperConfig;
+    }
+
+    /**
+     * Returns whether this player is local only, or can defer to the remote player. The
+     * result may differ from the builder if there is no remote player available at all.
+     * @hide
+     */
+    @VisibleForTesting
+    public boolean isLocalOnly() {
+        return !mAllowRemote;
+    }
+
+    /** @hide */
+    @VisibleForTesting
+    public boolean isUsingRemotePlayer() {
+        return mActivePlayer instanceof RemoteRingtonePlayer;
+    }
+
+    /**
+     * Finds the output device of type {@link AudioDeviceInfo#TYPE_BUILTIN_SPEAKER}. This device is
+     * the one on which outgoing audio for SIM calls is played.
+     *
+     * @param audioManager the audio manage.
+     * @return the {@link AudioDeviceInfo} corresponding to the builtin device, or {@code null} if
+     *     none can be found.
+     */
+    private AudioDeviceInfo getBuiltinDevice(AudioManager audioManager) {
+        AudioDeviceInfo[] deviceList = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
+        for (AudioDeviceInfo device : deviceList) {
+            if (device.getType() == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) {
+                return device;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Creates a local media player for the ringtone using currently set attributes.
+     * @return true if media player creation succeeded or is deferred,
+     * false if it did not succeed and can't be tried remotely.
+     * @hide
+     */
+    public boolean reinitializeActivePlayer() {
+        // Try creating a local media player, or fallback to creating a remote one.
+        Trace.beginSection("reinitializeActivePlayer");
+        try {
+            if (mActivePlayer != null) {
+                // This would only happen if calling the deprecated setAudioAttributes after
+                // building the Ringtone.
+                stopAndReleaseActivePlayer();
+            }
+
+            boolean vibrationOnly = (mEnabledMedia & MEDIA_ALL) == MEDIA_VIBRATION;
+            // Vibration can come from the audio file if using haptic generator or if haptic
+            // channels are a possibility.
+            boolean maybeAudioVibration = mUri != null && mInjectables.isHapticPlaybackSupported()
+                    && (mHapticGeneratorEnabled || !mAudioAttributes.areHapticChannelsMuted());
+
+            // VibrationEffect only, use the simplified player without checking for haptic channels.
+            if (vibrationOnly && !maybeAudioVibration && mVibrationEffect != null) {
+                mActivePlayer = new LocalRingtonePlayer.VibrationEffectPlayer(
+                        mVibrationEffect, mAudioAttributes, mVibrator, mIsLooping);
+                return true;
+            }
+
+            AudioDeviceInfo preferredDevice =
+                    mPreferBuiltinDevice ? getBuiltinDevice(mAudioManager) : null;
+            if (mUri != null) {
+                mActivePlayer = LocalRingtonePlayer.create(mContext, mAudioManager, mVibrator, mUri,
+                        mAudioAttributes, vibrationOnly, mVibrationEffect, mInjectables,
+                        mVolumeShaperConfig, preferredDevice, mHapticGeneratorEnabled, mIsLooping,
+                        mVolume);
+            } else {
+                // Using the remote player won't help play a null Uri. Revert straight to fallback.
+                // The vibration-only case was already covered above.
+                mActivePlayer = createFallbackRingtonePlayer();
+                // Fall through to attempting remote fallback play if null.
+            }
+
+            if (mActivePlayer == null && mAllowRemote) {
+                mActivePlayer = new RemoteRingtonePlayer(mRemoteRingtoneService, mUri,
+                        mAudioAttributes, mUseExactAudioAttributes, mEnabledMedia, mVibrationEffect,
+                        mVolumeShaperConfig, mHapticGeneratorEnabled, mIsLooping, mVolume);
+            }
+
+            return mActivePlayer != null;
+        } finally {
+            if (mActivePlayer != null) {
+                Log.d(TAG, "Initialized ringtone player with " + mActivePlayer.getClass());
+            } else {
+                Log.d(TAG, "Failed to initialize ringtone player");
+            }
+            Trace.endSection();
+        }
+    }
+
+    @Nullable
+    private LocalRingtonePlayer createFallbackRingtonePlayer() {
+        int ringtoneType = RingtoneManager.getDefaultType(mUri);
+        if (ringtoneType != -1
+                && RingtoneManager.getActualDefaultRingtoneUri(mContext, ringtoneType) == null) {
+            Log.w(TAG, "not playing fallback for " + mUri);
+            return null;
+        }
+        // Default ringtone, try fallback ringtone.
+        try (AssetFileDescriptor afd = mContext.getResources().openRawResourceFd(
+                    com.android.internal.R.raw.fallbackring)) {
+            if (afd == null) {
+                Log.e(TAG, "Could not load fallback ringtone");
+                return null;
+            }
+
+            AudioDeviceInfo preferredDevice =
+                    mPreferBuiltinDevice ? getBuiltinDevice(mAudioManager) : null;
+            return LocalRingtonePlayer.createForFallback(mAudioManager, mVibrator, afd,
+                    mAudioAttributes, mVibrationEffect, mInjectables, mVolumeShaperConfig,
+                    preferredDevice, mIsLooping, mVolume);
+        } catch (NotFoundException nfe) {
+            Log.e(TAG, "Fallback ringtone does not exist");
+            return null;
+        } catch (IOException e) {
+            // As with the above messages, not including much information about the
+            // failure so as not to expose details of the fallback ringtone resource.
+            Log.e(TAG, "Exception reading fallback ringtone");
+            return null;
+        }
+    }
+
+    /**
+     * Same as AudioManager.hasHapticChannels except it assumes an already created ringtone.
+     * @hide
+     */
+    public boolean hasHapticChannels() {
+        return (mActivePlayer == null) ? false : mActivePlayer.hasHapticChannels();
+    }
+
+    /**
+     * Returns the {@link AudioAttributes} used by this object.
+     * @return the {@link AudioAttributes} that were set with
+     *     {@link #setAudioAttributes(AudioAttributes)} or the default attributes if none were set.
+     */
+    public AudioAttributes getAudioAttributes() {
+        return mAudioAttributes;
+    }
+
+    /**
+     * Sets the player to be looping or non-looping.
+     * @param looping whether to loop or not.
+     */
+    public void setLooping(boolean looping) {
+        synchronized (mPlaybackSettingsLock) {
+            mIsLooping = looping;
+            if (mActivePlayer != null) {
+                mActivePlayer.setLooping(looping);
+            }
+        }
+    }
+
+    /**
+     * Returns whether the looping mode was enabled on this player.
+     * @return true if this player loops when playing.
+     */
+    public boolean isLooping() {
+        synchronized (mPlaybackSettingsLock) {
+            return mIsLooping;
+        }
+    }
+
+    /**
+     * Sets the volume on this player.
+     * @param volume a raw scalar in range 0.0 to 1.0, where 0.0 mutes this player, and 1.0
+     *   corresponds to no attenuation being applied.
+     */
+    public void setVolume(float volume) {
+        // Ignore if sound not enabled.
+        if ((mEnabledMedia & MEDIA_SOUND) == 0) {
+            return;
+        }
+        if (volume < 0.0f) {
+            volume = 0.0f;
+        } else if (volume > 1.0f) {
+            volume = 1.0f;
+        }
+
+        synchronized (mPlaybackSettingsLock) {
+            mVolume = volume;
+            if (mActivePlayer != null) {
+                mActivePlayer.setVolume(volume);
+            }
+        }
+    }
+
+    /**
+     * Returns the volume scalar set on this player.
+     * @return a value between 0.0f and 1.0f.
+     */
+    public float getVolume() {
+        synchronized (mPlaybackSettingsLock) {
+            return mVolume;
+        }
+    }
+
+    /**
+     * Enable or disable the {@link android.media.audiofx.HapticGenerator} effect. The effect can
+     * only be enabled on devices that support the effect.
+     *
+     * @return true if the HapticGenerator effect is successfully enabled. Otherwise, return false.
+     * @see android.media.audiofx.HapticGenerator#isAvailable()
+     */
+    public boolean setHapticGeneratorEnabled(boolean enabled) {
+        if (!mInjectables.isHapticGeneratorAvailable()) {
+            return false;
+        }
+        synchronized (mPlaybackSettingsLock) {
+            mHapticGeneratorEnabled = enabled;
+            if (mActivePlayer != null) {
+                mActivePlayer.setHapticGeneratorEnabled(enabled);
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Return whether the {@link android.media.audiofx.HapticGenerator} effect is enabled or not.
+     * @return true if the HapticGenerator is enabled.
+     */
+    public boolean isHapticGeneratorEnabled() {
+        synchronized (mPlaybackSettingsLock) {
+            return mHapticGeneratorEnabled;
+        }
+    }
+
+    /**
+     * Returns a human-presentable title for ringtone. Looks in media
+     * content provider. If not in either, uses the filename
+     *
+     * @param context A context used for querying.
+     */
+    public String getTitle(Context context) {
+        if (mTitle != null) return mTitle;
+        return mTitle = Ringtone.getTitle(context, mUri, true /*followSettingsUri*/, mAllowRemote);
+    }
+
+
+    /** {@hide} */
+    @UnsupportedAppUsage
+    public Uri getUri() {
+        return mUri;
+    }
+
+    /**
+     * Plays the ringtone.
+     */
+    public void play() {
+        if (mActivePlayer != null) {
+            Log.d(TAG, "Starting ringtone playback");
+            if (mActivePlayer.play()) {
+                return;
+            } else {
+                // Discard active player: play() is only meant to be called once.
+                stopAndReleaseActivePlayer();
+            }
+        }
+        if (!playFallbackRingtone()) {
+            Log.w(TAG, "Neither local nor remote playback available");
+        }
+    }
+
+    /**
+     * Stops a playing ringtone.
+     */
+    public void stop() {
+        stopAndReleaseActivePlayer();
+    }
+
+    private void stopAndReleaseActivePlayer() {
+        if (mActivePlayer != null) {
+            mActivePlayer.stopAndRelease();
+            mActivePlayer = null;
+        }
+    }
+
+    /**
+     * Whether this ringtone is currently playing.
+     *
+     * @return True if playing, false otherwise.
+     */
+    public boolean isPlaying() {
+        if (mActivePlayer != null) {
+            return mActivePlayer.isPlaying();
+        } else {
+            Log.w(TAG, "No active ringtone player");
+            return false;
+        }
+    }
+
+    /**
+     * Fallback during the play stage rather than initialization, typically due to an issue
+     * communicating with the remote player.
+     */
+    private boolean playFallbackRingtone() {
+        if (mActivePlayer != null) {
+            Log.wtf(TAG, "Playing fallback ringtone with another active player");
+            stopAndReleaseActivePlayer();
+        }
+        int streamType = AudioAttributes.toLegacyStreamType(mAudioAttributes);
+        if (mAudioManager.getStreamVolume(streamType) == 0) {
+            // TODO: Return true? If volume is off, this is a successful play.
+            return false;
+        }
+        mActivePlayer = createFallbackRingtonePlayer();
+        if (mActivePlayer == null) {
+            return false;  // the create method logs if it returns null.
+        } else if (mActivePlayer.play()) {
+            return true;
+        } else {
+            stopAndReleaseActivePlayer();
+            return false;
+        }
+    }
+
+    void setTitle(String title) {
+        mTitle = title;
+    }
+
+    /**
+     * Play a specific ringtone. This interface is implemented by either local (this process) or
+     * proxied-remote playback via AudioManager.getRingtonePlayer, so that the caller
+     * (Ringtone class) can just use a single player after the initial creation.
+     * @hide
+     */
+    interface RingtonePlayer {
+        /**
+         * Start playing the ringtone, returning false if there was a problem that
+         * requires falling back to the fallback ringtone resource.
+         */
+        boolean play();
+        boolean isPlaying();
+        void stopAndRelease();
+
+        // Mutating playback methods.
+        void setPreferredDevice(@Nullable AudioDeviceInfo audioDeviceInfo);
+        void setLooping(boolean looping);
+        void setHapticGeneratorEnabled(boolean enabled);
+        void setVolume(float volume);
+
+        boolean hasHapticChannels();
+    }
+
+    /**
+     * Remote RingtonePlayer. All operations are delegated via the IRingtonePlayer interface, which
+     * should ultimately be backed by a RingtoneLocalPlayer within the system services.
+     */
+    static class RemoteRingtonePlayer implements RingtonePlayer {
+        private final IBinder mRemoteToken = new Binder();
+        private final IRingtonePlayer mRemoteRingtoneService;
+        private final Uri mCanonicalUri;
+        private final int mEnabledMedia;
+        private final VibrationEffect mVibrationEffect;
+        private final VolumeShaper.Configuration mVolumeShaperConfig;
+        private final AudioAttributes mAudioAttributes;
+        private final boolean mUseExactAudioAttributes;
+        private boolean mIsLooping;
+        private float mVolume;
+        private boolean mHapticGeneratorEnabled;
+
+        RemoteRingtonePlayer(@NonNull IRingtonePlayer remoteRingtoneService,
+                @NonNull Uri uri, @NonNull AudioAttributes audioAttributes,
+                boolean useExactAudioAttributes,
+                @RingtoneMedia int enabledMedia, @Nullable VibrationEffect vibrationEffect,
+                @Nullable VolumeShaper.Configuration volumeShaperConfig,
+                boolean hapticGeneratorEnabled, boolean initialIsLooping, float initialVolume) {
+            mRemoteRingtoneService = remoteRingtoneService;
+            mCanonicalUri = (uri == null) ? null : uri.getCanonicalUri();
+            mAudioAttributes = audioAttributes;
+            mUseExactAudioAttributes = useExactAudioAttributes;
+            mEnabledMedia = enabledMedia;
+            mVibrationEffect = vibrationEffect;
+            mVolumeShaperConfig = volumeShaperConfig;
+            mHapticGeneratorEnabled = hapticGeneratorEnabled;
+            mIsLooping = initialIsLooping;
+            mVolume = initialVolume;
+        }
+
+        @Override
+        public boolean play() {
+            try {
+                mRemoteRingtoneService.playRemoteRingtone(mRemoteToken, mCanonicalUri,
+                        mAudioAttributes, mUseExactAudioAttributes, mEnabledMedia, mVibrationEffect,
+                        mVolume, mIsLooping, mHapticGeneratorEnabled, mVolumeShaperConfig);
+                return true;
+            } catch (RemoteException e) {
+                Log.w(TAG, "Problem playing ringtone: " + e);
+                return false;
+            }
+        }
+
+        @Override
+        public boolean isPlaying() {
+            try {
+                return mRemoteRingtoneService.isPlaying(mRemoteToken);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Problem checking ringtone isPlaying: " + e);
+                return false;
+            }
+        }
+
+        @Override
+        public void stopAndRelease() {
+            try {
+                mRemoteRingtoneService.stop(mRemoteToken);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Problem stopping ringtone: " + e);
+            }
+        }
+
+        @Override
+        public void setPreferredDevice(@Nullable AudioDeviceInfo audioDeviceInfo) {
+            // un-implemented for remote (but not used outside system).
+        }
+
+        @Override
+        public void setLooping(boolean looping) {
+            mIsLooping = looping;
+            try {
+                mRemoteRingtoneService.setLooping(mRemoteToken, looping);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Problem setting looping: " + e);
+            }
+        }
+
+        @Override
+        public void setHapticGeneratorEnabled(boolean enabled) {
+            mHapticGeneratorEnabled = enabled;
+            try {
+                mRemoteRingtoneService.setHapticGeneratorEnabled(mRemoteToken, enabled);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Problem setting hapticGeneratorEnabled: " + e);
+            }
+        }
+
+        @Override
+        public void setVolume(float volume) {
+            mVolume = volume;
+            try {
+                mRemoteRingtoneService.setVolume(mRemoteToken, volume);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Problem setting volume: " + e);
+            }
+        }
+
+        @Override
+        public boolean hasHapticChannels() {
+            // FIXME: support remote player, or internalize haptic channels support and remove
+            // entirely.
+            return false;
+        }
+    }
+
+}
diff --git a/media/java/android/media/RoutingSessionInfo.java b/media/java/android/media/RoutingSessionInfo.java
index e1af909..a77c943 100644
--- a/media/java/android/media/RoutingSessionInfo.java
+++ b/media/java/android/media/RoutingSessionInfo.java
@@ -55,15 +55,23 @@
     private static final String KEY_GROUP_ROUTE = "androidx.mediarouter.media.KEY_GROUP_ROUTE";
     private static final String KEY_VOLUME_HANDLING = "volumeHandling";
 
+    @NonNull
     final String mId;
+    @Nullable
     final CharSequence mName;
+    @Nullable
     final String mOwnerPackageName;
+    @NonNull
     final String mClientPackageName;
     @Nullable
     final String mProviderId;
+    @NonNull
     final List<String> mSelectedRoutes;
+    @NonNull
     final List<String> mSelectableRoutes;
+    @NonNull
     final List<String> mDeselectableRoutes;
+    @NonNull
     final List<String> mTransferableRoutes;
 
     final int mVolumeHandling;
@@ -100,8 +108,12 @@
 
         boolean volumeAdjustmentForRemoteGroupSessions = Resources.getSystem().getBoolean(
                 com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions);
-        mVolumeHandling = defineVolumeHandling(builder.mVolumeHandling, mSelectedRoutes,
-                volumeAdjustmentForRemoteGroupSessions);
+        mVolumeHandling =
+                defineVolumeHandling(
+                        mIsSystemSession,
+                        builder.mVolumeHandling,
+                        mSelectedRoutes,
+                        volumeAdjustmentForRemoteGroupSessions);
 
         mControlHints = updateVolumeHandlingInHints(builder.mControlHints, mVolumeHandling);
     }
@@ -130,7 +142,9 @@
         mIsSystemSession = src.readBoolean();
     }
 
-    private static Bundle updateVolumeHandlingInHints(Bundle controlHints, int volumeHandling) {
+    @Nullable
+    private static Bundle updateVolumeHandlingInHints(@Nullable Bundle controlHints,
+            int volumeHandling) {
         // Workaround to preserve retro-compatibility with androidx.
         // See b/228021646 for more details.
         if (controlHints != null && controlHints.containsKey(KEY_GROUP_ROUTE)) {
@@ -150,19 +164,26 @@
         return controlHints;
     }
 
-    private static int defineVolumeHandling(int volumeHandling, List<String> selectedRoutes,
+    private static int defineVolumeHandling(
+            boolean isSystemSession,
+            int volumeHandling,
+            List<String> selectedRoutes,
             boolean volumeAdjustmentForRemoteGroupSessions) {
-        if (!volumeAdjustmentForRemoteGroupSessions && selectedRoutes.size() > 1) {
+        if (!isSystemSession
+                && !volumeAdjustmentForRemoteGroupSessions
+                && selectedRoutes.size() > 1) {
             return MediaRoute2Info.PLAYBACK_VOLUME_FIXED;
         }
         return volumeHandling;
     }
 
-    private static String ensureString(String str) {
+    @NonNull
+    private static String ensureString(@Nullable String str) {
         return str != null ? str : "";
     }
 
-    private static <T> List<T> ensureList(List<? extends T> list) {
+    @NonNull
+    private static <T> List<T> ensureList(@Nullable List<? extends T> list) {
         if (list != null) {
             return Collections.unmodifiableList(list);
         }
@@ -361,11 +382,15 @@
     }
 
     @Override
-    public boolean equals(Object obj) {
+    public boolean equals(@Nullable Object obj) {
+        if (obj == null) {
+            return false;
+        }
+
         if (this == obj) {
             return true;
         }
-        if (!(obj instanceof RoutingSessionInfo)) {
+        if (getClass() != obj.getClass()) {
             return false;
         }
 
@@ -445,21 +470,30 @@
      * Builder class for {@link RoutingSessionInfo}.
      */
     public static final class Builder {
-        // TODO: Reorder these (important ones first)
-        final String mId;
-        CharSequence mName;
-        String mOwnerPackageName;
-        String mClientPackageName;
-        String mProviderId;
-        final List<String> mSelectedRoutes;
-        final List<String> mSelectableRoutes;
-        final List<String> mDeselectableRoutes;
-        final List<String> mTransferableRoutes;
-        int mVolumeHandling = MediaRoute2Info.PLAYBACK_VOLUME_FIXED;
-        int mVolumeMax;
-        int mVolume;
-        Bundle mControlHints;
-        boolean mIsSystemSession;
+        @NonNull
+        private final String mId;
+        @Nullable
+        private CharSequence mName;
+        @Nullable
+        private String mOwnerPackageName;
+        @NonNull
+        private String mClientPackageName;
+        @Nullable
+        private String mProviderId;
+        @NonNull
+        private final List<String> mSelectedRoutes;
+        @NonNull
+        private final List<String> mSelectableRoutes;
+        @NonNull
+        private final List<String> mDeselectableRoutes;
+        @NonNull
+        private final List<String> mTransferableRoutes;
+        private int mVolumeHandling = MediaRoute2Info.PLAYBACK_VOLUME_FIXED;
+        private int mVolumeMax;
+        private int mVolume;
+        @Nullable
+        private Bundle mControlHints;
+        private boolean mIsSystemSession;
 
         /**
          * Constructor for builder to create {@link RoutingSessionInfo}.
diff --git a/media/java/android/media/audiopolicy/AudioMix.java b/media/java/android/media/audiopolicy/AudioMix.java
index ed68d1e..d0270d3 100644
--- a/media/java/android/media/audiopolicy/AudioMix.java
+++ b/media/java/android/media/audiopolicy/AudioMix.java
@@ -16,6 +16,9 @@
 
 package android.media.audiopolicy;
 
+import static android.media.AudioSystem.getDeviceName;
+import static android.media.AudioSystem.isRemoteSubmixDevice;
+
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
@@ -445,36 +448,36 @@
                     // CHANNEL_IN_FRONT_BACK is hidden, should not appear.
                 }
             }
-            if ((mDeviceSystemType != AudioSystem.DEVICE_NONE)
-                    && (mDeviceSystemType != AudioSystem.DEVICE_OUT_REMOTE_SUBMIX)
-                    && (mDeviceSystemType != AudioSystem.DEVICE_IN_REMOTE_SUBMIX)) {
-                if ((mRouteFlags & ROUTE_FLAG_RENDER) == 0) {
-                    throw new IllegalArgumentException(
-                            "Can't have audio device without flag ROUTE_FLAG_RENDER");
+
+            if ((mRouteFlags & ROUTE_FLAG_LOOP_BACK) == ROUTE_FLAG_LOOP_BACK) {
+                if (mDeviceSystemType == AudioSystem.DEVICE_NONE) {
+                    // If there was no device type explicitly set, configure it based on mix type.
+                    mDeviceSystemType = getLoopbackDeviceSystemTypeForAudioMixingRule(mRule);
+                } else if (!isRemoteSubmixDevice(mDeviceSystemType)) {
+                    // Loopback mode only supports remote submix devices.
+                    throw new IllegalArgumentException("Device " + getDeviceName(mDeviceSystemType)
+                            + "is not supported for loopback mix.");
                 }
-                if (mRule.getTargetMixType() != AudioMix.MIX_TYPE_PLAYERS) {
-                    throw new IllegalArgumentException("Unsupported device on non-playback mix");
-                }
-            } else if (mDeviceSystemType == AudioSystem.DEVICE_OUT_REMOTE_SUBMIX) {
-                if (mRule.getTargetMixType() != AudioMix.MIX_TYPE_PLAYERS) {
-                    throw new IllegalArgumentException(
-                            "DEVICE_OUT_REMOTE_SUBMIX device is not supported on non-playback mix");
-                }
-            } else {
-                if ((mRouteFlags & ROUTE_FLAG_SUPPORTED) == ROUTE_FLAG_RENDER) {
+            }
+
+            if ((mRouteFlags & ROUTE_FLAG_RENDER) == ROUTE_FLAG_RENDER) {
+                if (mDeviceSystemType == AudioSystem.DEVICE_NONE) {
                     throw new IllegalArgumentException(
                             "Can't have flag ROUTE_FLAG_RENDER without an audio device");
                 }
-                if ((mRouteFlags & ROUTE_FLAG_LOOP_BACK) == ROUTE_FLAG_LOOP_BACK) {
-                    if (mRule.getTargetMixType() == MIX_TYPE_PLAYERS) {
-                        mDeviceSystemType = AudioSystem.DEVICE_OUT_REMOTE_SUBMIX;
-                    } else if (mRule.getTargetMixType() == MIX_TYPE_RECORDERS) {
-                        mDeviceSystemType = AudioSystem.DEVICE_IN_REMOTE_SUBMIX;
-                    } else {
-                        throw new IllegalArgumentException("Unknown mixing rule type");
-                    }
+
+                if (AudioSystem.DEVICE_IN_ALL_SET.contains(mDeviceSystemType)) {
+                    throw new IllegalArgumentException(
+                            "Input device is not supported with ROUTE_FLAG_RENDER");
+                }
+
+                if (mRule.getTargetMixType() == MIX_TYPE_RECORDERS) {
+                    throw new IllegalArgumentException(
+                            "ROUTE_FLAG_RENDER/ROUTE_FLAG_LOOP_BACK_RENDER is not supported for "
+                                    + "non-playback mix rule");
                 }
             }
+
             if (mRule.allowPrivilegedMediaPlaybackCapture()) {
                 String error = AudioMix.canBeUsedForPrivilegedMediaCapture(mFormat);
                 if (error != null) {
@@ -484,5 +487,18 @@
             return new AudioMix(mRule, mFormat, mRouteFlags, mCallbackFlags, mDeviceSystemType,
                     mDeviceAddress);
         }
+
+        private int getLoopbackDeviceSystemTypeForAudioMixingRule(AudioMixingRule rule) {
+            switch (mRule.getTargetMixType()) {
+                case MIX_TYPE_PLAYERS:
+                    return AudioSystem.DEVICE_OUT_REMOTE_SUBMIX;
+                case MIX_TYPE_RECORDERS:
+                    return AudioSystem.DEVICE_IN_REMOTE_SUBMIX;
+                default:
+                    throw new IllegalArgumentException(
+                            "Unknown mixing rule type - 0x" + Integer.toHexString(
+                                    rule.getTargetMixType()));
+            }
+        }
     }
 }
diff --git a/media/java/android/media/audiopolicy/AudioPolicy.java b/media/java/android/media/audiopolicy/AudioPolicy.java
index c1ee74a..3e5de82 100644
--- a/media/java/android/media/audiopolicy/AudioPolicy.java
+++ b/media/java/android/media/audiopolicy/AudioPolicy.java
@@ -865,7 +865,7 @@
                 for (final WeakReference<AudioTrack> weakTrack : mInjectors) {
                     final AudioTrack track = weakTrack.get();
                     if (track == null) {
-                        break;
+                        continue;
                     }
                     try {
                         // TODO: add synchronous versions
@@ -876,12 +876,13 @@
                         // released by the user of the AudioPolicy
                     }
                 }
+                mInjectors.clear();
             }
             if (mCaptors != null) {
                 for (final WeakReference<AudioRecord> weakRecord : mCaptors) {
                     final AudioRecord record = weakRecord.get();
                     if (record == null) {
-                        break;
+                        continue;
                     }
                     try {
                         // TODO: if needed: implement an invalidate method
@@ -891,6 +892,7 @@
                         // released by the user of the AudioPolicy
                     }
                 }
+                mCaptors.clear();
             }
         }
     }
diff --git a/media/java/android/media/audiopolicy/AudioProductStrategy.java b/media/java/android/media/audiopolicy/AudioProductStrategy.java
index 3394dd0..e8adfaf 100644
--- a/media/java/android/media/audiopolicy/AudioProductStrategy.java
+++ b/media/java/android/media/audiopolicy/AudioProductStrategy.java
@@ -134,9 +134,11 @@
 
     /**
      * @hide
-     * @param audioAttributes to identify AudioProductStrategy with
-     * @return legacy stream type associated with matched AudioProductStrategy
-     *              Defaults to STREAM_MUSIC if no match is found, or if matches is STREAM_DEFAULT
+     * @param audioAttributes to identify {@link AudioProductStrategy} with
+     * @return legacy stream type associated with matched {@link AudioProductStrategy}. If no
+     *              strategy found or found {@link AudioProductStrategy} does not have associated
+     *              legacy stream (i.e. associated with {@link AudioSystem#STREAM_DEFAULT}) defaults
+     *              to {@link AudioSystem#STREAM_MUSIC}
      */
     public static int getLegacyStreamTypeForStrategyWithAudioAttributes(
             @NonNull AudioAttributes audioAttributes) {
@@ -147,9 +149,9 @@
                 int streamType = productStrategy.getLegacyStreamTypeForAudioAttributes(
                         audioAttributes);
                 if (streamType == AudioSystem.STREAM_DEFAULT) {
-                    Log.w(TAG, "Attributes " + audioAttributes.toString() + " ported by strategy "
-                            + productStrategy.getId() + " has no stream type associated, "
-                            + "DO NOT USE STREAM TO CONTROL THE VOLUME");
+                    Log.w(TAG, "Attributes " + audioAttributes + " supported by strategy "
+                            + productStrategy.getId() + " have no associated stream type, "
+                            + "therefore falling back to STREAM_MUSIC");
                     return AudioSystem.STREAM_MUSIC;
                 }
                 if (streamType < AudioSystem.getNumStreamTypes()) {
diff --git a/media/java/android/media/midi/MidiDeviceServer.java b/media/java/android/media/midi/MidiDeviceServer.java
index fc33cef..8f1b9fe 100644
--- a/media/java/android/media/midi/MidiDeviceServer.java
+++ b/media/java/android/media/midi/MidiDeviceServer.java
@@ -25,6 +25,7 @@
 import android.system.OsConstants;
 import android.util.Log;
 
+import com.android.internal.annotations.GuardedBy;
 import com.android.internal.midi.MidiDispatcher;
 
 import dalvik.system.CloseGuard;
@@ -34,6 +35,7 @@
 import java.io.Closeable;
 import java.io.FileDescriptor;
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -83,6 +85,14 @@
     private AtomicInteger mTotalInputBytes = new AtomicInteger();
     private AtomicInteger mTotalOutputBytes = new AtomicInteger();
 
+    private static final int UNUSED_UID = -1;
+
+    private final Object mUmpUidLock = new Object();
+    @GuardedBy("mUmpUidLock")
+    private final int[] mUmpInputPortUids;
+    @GuardedBy("mUmpUidLock")
+    private final int[] mUmpOutputPortUids;
+
     public interface Callback {
         /**
          * Called to notify when an our device status has changed
@@ -137,6 +147,9 @@
                 int portNumber = mOutputPort.getPortNumber();
                 mInputPortOutputPorts[portNumber] = null;
                 mInputPortOpen[portNumber] = false;
+                synchronized (mUmpUidLock) {
+                    mUmpInputPortUids[portNumber] = UNUSED_UID;
+                }
                 mTotalOutputBytes.addAndGet(mOutputPort.pullTotalBytesCount());
                 updateTotalBytes();
                 updateDeviceStatus();
@@ -162,6 +175,9 @@
                 dispatcher.getSender().disconnect(mInputPort);
                 int openCount = dispatcher.getReceiverCount();
                 mOutputPortOpenCount[portNumber] = openCount;
+                synchronized (mUmpUidLock) {
+                    mUmpOutputPortUids[portNumber] = UNUSED_UID;
+                }
                 mTotalInputBytes.addAndGet(mInputPort.pullTotalBytesCount());
                 updateTotalBytes();
                 updateDeviceStatus();
@@ -210,6 +226,25 @@
                     return null;
                 }
 
+                if (isUmpDevice()) {
+                    if (portNumber >= mOutputPortCount) {
+                        Log.e(TAG, "out portNumber out of range in openInputPort: " + portNumber);
+                        return null;
+                    }
+                    synchronized (mUmpUidLock) {
+                        if (mUmpInputPortUids[portNumber] != UNUSED_UID) {
+                            Log.e(TAG, "input port already open in openInputPort: " + portNumber);
+                            return null;
+                        }
+                        if ((mUmpOutputPortUids[portNumber] != UNUSED_UID)
+                                && (Binder.getCallingUid() != mUmpOutputPortUids[portNumber])) {
+                            Log.e(TAG, "different uid for output in openInputPort: " + portNumber);
+                            return null;
+                        }
+                        mUmpInputPortUids[portNumber] = Binder.getCallingUid();
+                    }
+                }
+
                 try {
                     FileDescriptor[] pair = createSeqPacketSocketPair();
                     MidiOutputPort outputPort = new MidiOutputPort(pair[0], portNumber);
@@ -242,6 +277,25 @@
                 return null;
             }
 
+            if (isUmpDevice()) {
+                if (portNumber >= mInputPortCount) {
+                    Log.e(TAG, "in portNumber out of range in openOutputPort: " + portNumber);
+                    return null;
+                }
+                synchronized (mUmpUidLock) {
+                    if (mUmpOutputPortUids[portNumber] != UNUSED_UID) {
+                        Log.e(TAG, "output port already open in openOutputPort: " + portNumber);
+                        return null;
+                    }
+                    if ((mUmpInputPortUids[portNumber] != UNUSED_UID)
+                            && (Binder.getCallingUid() != mUmpInputPortUids[portNumber])) {
+                        Log.e(TAG, "different uid for input in openOutputPort: " + portNumber);
+                        return null;
+                    }
+                    mUmpOutputPortUids[portNumber] = Binder.getCallingUid();
+                }
+            }
+
             try {
                 FileDescriptor[] pair = createSeqPacketSocketPair();
                 MidiInputPort inputPort = new MidiInputPort(pair[0], portNumber);
@@ -358,6 +412,13 @@
         mInputPortOpen = new boolean[mInputPortCount];
         mOutputPortOpenCount = new int[numOutputPorts];
 
+        synchronized (mUmpUidLock) {
+            mUmpInputPortUids = new int[mInputPortCount];
+            mUmpOutputPortUids = new int[mOutputPortCount];
+            Arrays.fill(mUmpInputPortUids, UNUSED_UID);
+            Arrays.fill(mUmpOutputPortUids, UNUSED_UID);
+        }
+
         mGuard.open("close");
     }
 
@@ -467,4 +528,8 @@
             Log.e(TAG, "RemoteException in updateTotalBytes");
         }
     }
+
+    private boolean isUmpDevice() {
+        return mDeviceInfo.getDefaultProtocol() != MidiDeviceInfo.PROTOCOL_UNKNOWN;
+    }
 }
diff --git a/media/java/android/media/midi/MidiDeviceService.java b/media/java/android/media/midi/MidiDeviceService.java
index 388d95b..96540a2 100644
--- a/media/java/android/media/midi/MidiDeviceService.java
+++ b/media/java/android/media/midi/MidiDeviceService.java
@@ -34,15 +34,15 @@
  * <p>To extend this class, you must declare the service in your manifest file with
  * an intent filter with the {@link #SERVICE_INTERFACE} action
  * and meta-data to describe the virtual device.
- For example:</p>
+ * For example:</p>
  * <pre>
  * &lt;service android:name=".VirtualDeviceService"
- *          android:label="&#64;string/service_name">
+ *         android:label="&#64;string/service_name">
  *     &lt;intent-filter>
- *         &lt;action android:name="android.media.midi.MidiDeviceService" />
+ *             &lt;action android:name="android.media.midi.MidiDeviceService" />
  *     &lt;/intent-filter>
- *           &lt;meta-data android:name="android.media.midi.MidiDeviceService"
-                android:resource="@xml/device_info" />
+ *     &lt;meta-data android:name="android.media.midi.MidiDeviceService"
+ *             android:resource="@xml/device_info" />
  * &lt;/service></pre>
  */
 abstract public class MidiDeviceService extends Service {
@@ -114,8 +114,8 @@
     }
 
     /**
-     * returns the {@link MidiDeviceInfo} instance for this service
-     * @return our MidiDeviceInfo
+     * Returns the {@link MidiDeviceInfo} instance for this service
+     * @return the MidiDeviceInfo of the virtual MIDI device
      */
     public final MidiDeviceInfo getDeviceInfo() {
         return mDeviceInfo;
@@ -123,13 +123,14 @@
 
     /**
      * Called to notify when an our {@link MidiDeviceStatus} has changed
-     * @param status the number of the port that was opened
+     * @param status the current status of the MIDI device
      */
     public void onDeviceStatusChanged(MidiDeviceStatus status) {
     }
 
     /**
-     * Called to notify when our device has been closed by all its clients
+     * Called to notify when the virtual MIDI device running in this service has been closed by
+     * all its clients
      */
     public void onClose() {
     }
diff --git a/media/java/android/media/midi/MidiUmpDeviceService.java b/media/java/android/media/midi/MidiUmpDeviceService.java
new file mode 100644
index 0000000..6e2aaab
--- /dev/null
+++ b/media/java/android/media/midi/MidiUmpDeviceService.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media.midi;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * A service that implements a virtual MIDI device for Universal MIDI Packets (UMP).
+ * Subclasses must implement the {@link #onGetInputPortReceivers} method to provide a
+ * list of {@link MidiReceiver}s to receive data sent to the device's input ports.
+ * Similarly, subclasses can call {@link #getOutputPortReceivers} to fetch a list
+ * of {@link MidiReceiver}s for sending data out the output ports.
+ *
+ * Unlike traditional MIDI byte streams, only complete UMPs should be sent.
+ * Unlike with {@link #MidiDeviceService}, the number of input and output ports must be equal.
+ *
+ * <p>To extend this class, you must declare the service in your manifest file with
+ * an intent filter with the {@link #SERVICE_INTERFACE} action
+ * and meta-data to describe the virtual device.
+ * For example:</p>
+ * <pre>
+ * &lt;service android:name=".VirtualDeviceService"
+ *         android:label="&#64;string/service_name">
+ *     &lt;intent-filter>
+ *             &lt;action android:name="android.media.midi.MidiUmpDeviceService" />
+ *     &lt;/intent-filter>
+ *     &lt;property android:name="android.media.midi.MidiUmpDeviceService"
+ *             android:resource="@xml/device_info" />
+ * &lt;/service></pre>
+ */
+public abstract class MidiUmpDeviceService extends Service {
+    private static final String TAG = "MidiUmpDeviceService";
+
+    public static final String SERVICE_INTERFACE = "android.media.midi.MidiUmpDeviceService";
+
+    private IMidiManager mMidiManager;
+    private MidiDeviceServer mServer;
+    private MidiDeviceInfo mDeviceInfo;
+
+    private final MidiDeviceServer.Callback mCallback = new MidiDeviceServer.Callback() {
+        @Override
+        public void onDeviceStatusChanged(MidiDeviceServer server, MidiDeviceStatus status) {
+            MidiUmpDeviceService.this.onDeviceStatusChanged(status);
+        }
+
+        @Override
+        public void onClose() {
+            MidiUmpDeviceService.this.onClose();
+        }
+    };
+
+    @Override
+    public void onCreate() {
+        mMidiManager = IMidiManager.Stub.asInterface(
+                    ServiceManager.getService(Context.MIDI_SERVICE));
+        MidiDeviceServer server;
+        try {
+            MidiDeviceInfo deviceInfo = mMidiManager.getServiceDeviceInfo(getPackageName(),
+                    this.getClass().getName());
+            if (deviceInfo == null) {
+                Log.e(TAG, "Could not find MidiDeviceInfo for MidiUmpDeviceService " + this);
+                return;
+            }
+            mDeviceInfo = deviceInfo;
+
+            List<MidiReceiver> inputPortReceivers = onGetInputPortReceivers();
+            if (inputPortReceivers == null) {
+                Log.e(TAG, "Could not get input port receivers for MidiUmpDeviceService " + this);
+                return;
+            }
+            MidiReceiver[] inputPortReceiversArr = new MidiReceiver[inputPortReceivers.size()];
+            inputPortReceivers.toArray(inputPortReceiversArr);
+            server = new MidiDeviceServer(mMidiManager, inputPortReceiversArr, deviceInfo,
+                    mCallback);
+        } catch (RemoteException e) {
+            Log.e(TAG, "RemoteException in IMidiManager.getServiceDeviceInfo");
+            server = null;
+        }
+        mServer = server;
+    }
+
+    /**
+     * Returns a list of {@link MidiReceiver} for the device's input ports.
+     * Subclasses must override this to provide the receivers which will receive
+     * data sent to the device's input ports.
+     * The number of input and output ports must be equal and non-zero.
+     * @return list of MidiReceivers
+     */
+    public abstract @NonNull List<MidiReceiver> onGetInputPortReceivers();
+
+    /**
+     * Returns a list of {@link MidiReceiver} for the device's output ports.
+     * These can be used to send data out the device's output ports.
+     * The number of input and output ports must be equal and non-zero.
+     * @return the list of MidiReceivers
+     */
+    public final @NonNull List<MidiReceiver> getOutputPortReceivers() {
+        if (mServer == null) {
+            return new ArrayList<MidiReceiver>();
+        } else {
+            return Arrays.asList(mServer.getOutputPortReceivers());
+        }
+    }
+
+    /**
+     * Returns the {@link MidiDeviceInfo} instance for this service
+     * @return the MidiDeviceInfo of the virtual MIDI device if it was successfully created
+     */
+    public final @Nullable MidiDeviceInfo getDeviceInfo() {
+        return mDeviceInfo;
+    }
+
+    /**
+     * Called to notify when the {@link MidiDeviceStatus} has changed
+     * @param status the current status of the MIDI device
+     */
+    public void onDeviceStatusChanged(@NonNull MidiDeviceStatus status) {
+    }
+
+    /**
+     * Called to notify when the virtual MIDI device running in this service has been closed by
+     * all its clients
+     */
+    public void onClose() {
+    }
+
+    @Override
+    public @Nullable IBinder onBind(@NonNull Intent intent) {
+        if (SERVICE_INTERFACE.equals(intent.getAction()) && mServer != null) {
+            return mServer.getBinderInterface().asBinder();
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/media/java/android/media/midi/package.html b/media/java/android/media/midi/package.html
index 67df1b2..d9e38e2 100644
--- a/media/java/android/media/midi/package.html
+++ b/media/java/android/media/midi/package.html
@@ -267,6 +267,56 @@
 contain System Real-Time messages, which can be interleaved inside other
 messages.</p>
 
+<h1 id=using_midi_btle>Using MIDI Over Bluetooth LE</h1>
+
+<p>MIDI devices can be connected to Android using Bluetooth LE.</p>
+
+<p>Before using the device, the app must scan for available BTLE devices and then allow
+the user to connect.
+See the Android developer website for an
+<a href="https://source.android.com/devices/audio/midi_test#apps" target="_blank">example
+program</a>.</p>
+
+<h2 id=btle_location_permissions>Request Location Permission for BTLE</h2>
+
+<p>Applications that scan for Bluetooth devices must request permission in the
+manifest file. This LOCATION permission is required because it may be possible to
+guess the location of an Android device by seeing which BTLE devices are nearby.</p>
+
+<pre class=prettyprint>
+&lt;uses-permission android:name="android.permission.BLUETOOTH"/>
+&lt;uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
+&lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+</pre>
+
+<p>Apps must also request location permission from the user at run-time.
+See the documentation for <code>Activity.requestPermissions()</code> for details and an example.
+</p>
+
+<h2 id=btle_scan_devices>Scan for MIDI Devices</h2>
+
+<p>The app will only want to see MIDI devices and not mice or other non-MIDI devices.
+So construct a ScanFilter using the UUID for standard MIDI over BTLE.</p>
+
+<pre class=prettyprint>
+MIDI over BTLE UUID = "03B80E5A-EDE8-4B33-A751-6CE34EC4C700"
+</pre>
+
+<h2 id=btle_open_device>Open a MIDI Bluetooth Device</h2>
+
+<p>See the documentation for <code>android.bluetooth.le.BluetoothLeScanner.startScan()</code>
+method for details. When the user selects a MIDI/BTLE device then you can open it
+using the MidiManager.</p>
+
+<pre class=prettyprint>
+m.openBluetoothDevice(bluetoothDevice, callback, handler);
+</pre>
+
+<p>Once the MIDI/BTLE device has been opened by one app then it will also become available to other
+apps using the
+<a href="#get_list_of_already_plugged_in_entities">MIDI device discovery calls described above</a>.
+</p>
+
 <h1 id=creating_a_midi_virtual_device_service>Creating a MIDI Virtual Device Service</h1>
 
 
@@ -355,62 +405,17 @@
 }
 </pre>
 
-<h1 id=using_midi_btle>Using MIDI Over Bluetooth LE</h1>
 
-<p>MIDI devices can be connected to Android using Bluetooth LE.</p>
+<h1 id=using_midi_2_0>Using MIDI 2.0</h1>
 
-<p>Before using the device, the app must scan for available BTLE devices and then allow
-the user to connect.
-See the Android developer website for an
-<a href="https://source.android.com/devices/audio/midi_test#apps" target="_blank">example
-program</a>.</p>
-
-<h2 id=btle_location_permissions>Request Location Permission for BTLE</h2>
-
-<p>Applications that scan for Bluetooth devices must request permission in the
-manifest file. This LOCATION permission is required because it may be possible to
-guess the location of an Android device by seeing which BTLE devices are nearby.</p>
-
-<pre class=prettyprint>
-&lt;uses-permission android:name="android.permission.BLUETOOTH"/>
-&lt;uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
-&lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
-</pre>
-
-<p>Apps must also request location permission from the user at run-time.
-See the documentation for <code>Activity.requestPermissions()</code> for details and an example.
-</p>
-
-<h2 id=btle_scan_devices>Scan for MIDI Devices</h2>
-
-<p>The app will only want to see MIDI devices and not mice or other non-MIDI devices.
-So construct a ScanFilter using the UUID for standard MIDI over BTLE.</p>
-
-<pre class=prettyprint>
-MIDI over BTLE UUID = "03B80E5A-EDE8-4B33-A751-6CE34EC4C700"
-</pre>
-
-<h2 id=btle_open_device>Open a MIDI Bluetooth Device</h2>
-
-<p>See the documentation for <code>android.bluetooth.le.BluetoothLeScanner.startScan()</code>
-method for details. When the user selects a MIDI/BTLE device then you can open it
-using the MidiManager.</p>
-
-<pre class=prettyprint>
-m.openBluetoothDevice(bluetoothDevice, callback, handler);
-</pre>
-
-<p>Once the MIDI/BTLE device has been opened by one app then it will also become available to other
-apps using the
-<a href="#get_list_of_already_plugged_in_entities">MIDI device discovery calls described above</a>.
-</p>
-
-<h1 id=using_midi_2_0_over_usb>Using MIDI 2.0 over USB</h1>
-
-<p>An app can use MIDI 2.0 over USB starting in Android T. MIDI 2.0 packets are embedded in
+<p>An app can use <a href=
+"https://www.midi.org/midi-articles/details-about-midi-2-0-midi-ci-profiles-and-property-exchange"
+class="external">MIDI 2.0</a> over USB starting in Android T. MIDI 2.0 packets are embedded in
 Universal MIDI Packets, or UMP for short. A MIDI 2.0 USB device should create two interfaces,
 one endpoint that accepts only MIDI 1.0 packets and one that accepts only UMP packets.
-For more info about MIDI 2.0 and UMP, please read the MIDI 2.0 USB spec.</p>
+For more info about MIDI 2.0 and UMP, please read the MIDI 2.0 and UMP spec. Starting from Android
+V, apps can also open <a href="#creating_a_midi_2_0_virtual_device_service"> MIDI 2.0 virtual</a>
+devices.</p>
 
 <p>MidiManager.getDevices() would simply return the 1.0 interface. This interface should work
 exactly the same as before. In order to use the new UMP interface, retrieve the device with the
@@ -421,15 +426,15 @@
         MidiManager.TRANSPORT_UNIVERSAL_MIDI_PACKETS);
 </pre>
 
-<p>UMP Packets are always in multiple of 4 bytes. For each set of 4 bytes, they are sent in network
-order. Compare the following NoteOn code snippet with the NoteOn code snippet above. </p>
+<p>UMP packet sizes are always a multiple of 4 bytes. For each set of 4 bytes, they are sent in
+network order. Compare the following NoteOn code snippet with the NoteOn code snippet above. </p>
 
 <pre class=prettyprint>
 byte[] buffer = new byte[32];
 int numBytes = 0;
 int channel = 3; // MIDI channels 1-16 are encoded as 0-15.
 int group = 0;
-buffer[numBytes++] = (byte)(0x20 + group); // MIDI 1.0 voice message
+buffer[numBytes++] = (byte)(0x20 + group); // MIDI 1.0 Channel Voice Message
 buffer[numBytes++] = (byte)(0x90 + (channel - 1)); // note on
 buffer[numBytes++] = (byte)60; // pitch is middle C
 buffer[numBytes++] = (byte)127; // max velocity
@@ -446,5 +451,108 @@
 int defaultProtocol = info.getDefaultProtocol();
 </pre>
 
+<h1 id=creating_a_midi_2_0_virtual_device_service>Creating a MIDI 2.0 Virtual Device Service</h1>
+
+
+<p>Starting in Android V, an app can provide a MIDI 2.0 Service that can be used by other apps.
+MIDI 2.0 packets are embedded in Universal MIDI Packets, or UMP for short. The service must be
+guarded with permission &quot;android.permission.BIND_MIDI_DEVICE_SERVICE&quot;.</p>
+
+<h2 id=manifest_files>Manifest Files</h2>
+
+
+<p>An app declares that it will function as a MIDI server in the AndroidManifest.xml file. Unlike
+MIDI 1.0 virtual devices, android.media.midi.MidiUmpDeviceService is used</p>
+
+<pre class=prettyprint>
+&lt;service android:name="<strong>MidiEchoDeviceService</strong>"
+  android:permission="android.permission.BIND_MIDI_DEVICE_SERVICE">
+  &lt;intent-filter>
+    &lt;action android:name="android.media.midi.MidiUmpDeviceService" />
+  &lt;/intent-filter>
+  &lt;meta-data android:name="android.media.midi.MidiUmpDeviceService"
+      android:resource="@xml/<strong>echo_device_info</strong>" />
+&lt;/service>
+</pre>
+
+
+<p>The details of the resource in this example is stored in &ldquo;res/xml/echo_device_info.xml
+&rdquo;. The port names that you declare in this file will be available from PortInfo.getName().
+Unlike MIDI 1.0, MIDI 2.0 ports are bidirectional. If you declare a port in this service, then it
+automatically creates an input port and an output port with the same name. Clients can use those
+two ports like the MIDI 1.0 ports.</p>
+
+<pre class=prettyprint>
+&lt;devices>
+    &lt;device manufacturer="MyCompany" product="MidiEcho">
+        &lt;port name="port1" />
+    &lt;/device>
+&lt;/devices>
+</pre>
+
+
+<h2 id=extend_midiumpdeviceservice>Extend MidiUmpDeviceService</h2>
+
+
+<p>You then define your server by extending android.media.midi.MidiUmpDeviceService.</p>
+
+<pre class=prettyprint>
+import android.media.midi.MidiDeviceStatus;
+import android.media.midi.MidiReceiver;
+import android.media.midi.MidiUmpDeviceService;
+
+public class MidiEchoDeviceService extends MidiUmpDeviceService {
+    private static final String TAG = "MidiEchoDeviceService";
+    // Other apps will write to this port.
+    private MidiReceiver mInputReceiver = new MyReceiver();
+    // This app will copy the data to this port.
+    private MidiReceiver mOutputReceiver;
+
+    &#64;Override
+    public void onCreate() {
+        super.onCreate();
+    }
+
+    &#64;Override
+    public void onDestroy() {
+        super.onDestroy();
+    }
+
+    &#64;Override
+    // Declare the receivers associated with your input ports.
+    public List<MidiReceiver> onGetInputPortReceivers() {
+        return new ArrayList<MidiReceiver>(Collections.singletonList(mInputReceiver));
+    }
+
+    /**
+     * Sample receiver to echo from the input port to the output port.
+     * In this example, we are just echoing the data and not parsing it.
+     * You will probably want to convert the bytes to a packet and then interpret the packet.
+     * See the MIDI 2.0 spec at the MMA site. Packets are either 4, 8, 12 or 16 bytes.
+     */
+    class MyReceiver extends MidiReceiver {
+        &#64;Override
+        public void onSend(byte[] data, int offset, int count, long timestamp)
+                throws IOException {
+            if (mOutputReceiver == null) {
+                mOutputReceiver = getOutputPortReceivers().get(0);
+            }
+            // Copy input to output.
+            mOutputReceiver.send(data, offset, count, timestamp);
+        }
+    }
+
+    /**
+     * This will get called when clients connect or disconnect.
+     * You can use it to figure out how many devices are connected.
+     */
+    &#64;Override
+    public void onDeviceStatusChanged(MidiDeviceStatus status) {
+        // inputOpened = status.isInputPortOpen(0);
+        // outputOpenCount = status.getOutputPortOpenCount(0);
+    }
+}
+</pre>
+
 </body>
 </html>
diff --git a/media/java/android/media/projection/IMediaProjection.aidl b/media/java/android/media/projection/IMediaProjection.aidl
index e3829e6..388b2c5 100644
--- a/media/java/android/media/projection/IMediaProjection.aidl
+++ b/media/java/android/media/projection/IMediaProjection.aidl
@@ -28,6 +28,7 @@
     boolean canProjectVideo();
     boolean canProjectSecureVideo();
 
+    @EnforcePermission("MANAGE_MEDIA_PROJECTION")
     @JavaPassthrough(annotation = "@android.annotation.RequiresPermission(android.Manifest"
             + ".permission.MANAGE_MEDIA_PROJECTION)")
     int applyVirtualDisplayFlags(int flags);
@@ -40,6 +41,7 @@
      * Returns the {@link android.os.IBinder} identifying the task to record, or {@code null} if
      * there is none.
      */
+    @EnforcePermission("MANAGE_MEDIA_PROJECTION")
     @JavaPassthrough(annotation = "@android.annotation.RequiresPermission(android.Manifest"
             + ".permission.MANAGE_MEDIA_PROJECTION)")
     IBinder getLaunchCookie();
@@ -48,6 +50,7 @@
      * Updates the {@link android.os.IBinder} identifying the task to record, or {@code null} if
      * there is none.
      */
+    @EnforcePermission("MANAGE_MEDIA_PROJECTION")
     @JavaPassthrough(annotation = "@android.annotation.RequiresPermission(android.Manifest"
             + ".permission.MANAGE_MEDIA_PROJECTION)")
     void setLaunchCookie(in IBinder launchCookie);
@@ -62,6 +65,7 @@
      * @throws IllegalStateException If the caller's target SDK is at least {@code U} and the
      * projection is not valid.
      */
+    @EnforcePermission("MANAGE_MEDIA_PROJECTION")
     @JavaPassthrough(annotation = "@android.annotation.RequiresPermission(android.Manifest"
             + ".permission.MANAGE_MEDIA_PROJECTION)")
     boolean isValid();
@@ -70,6 +74,7 @@
      * Sets that {@link MediaProjection#createVirtualDisplay} has been invoked with this token (it
      * should only be called once).
      */
+    @EnforcePermission("MANAGE_MEDIA_PROJECTION")
     @JavaPassthrough(annotation = "@android.annotation.RequiresPermission(android.Manifest"
             + ".permission.MANAGE_MEDIA_PROJECTION)")
     void notifyVirtualDisplayCreated(int displayId);
diff --git a/media/java/android/media/projection/IMediaProjectionManager.aidl b/media/java/android/media/projection/IMediaProjectionManager.aidl
index a3cd623..304eecb 100644
--- a/media/java/android/media/projection/IMediaProjectionManager.aidl
+++ b/media/java/android/media/projection/IMediaProjectionManager.aidl
@@ -67,6 +67,7 @@
      * Returns {@code true} if the given {@link IMediaProjection} corresponds to the current
      * projection, or {@code false} otherwise.
      */
+    @EnforcePermission("MANAGE_MEDIA_PROJECTION")
     @JavaPassthrough(annotation = "@android.annotation.RequiresPermission(android.Manifest"
             + ".permission.MANAGE_MEDIA_PROJECTION)")
     boolean isCurrentProjection(IMediaProjection projection);
@@ -83,6 +84,7 @@
      *
      * <p>Returns immediately but waits to start recording until user has reviewed their consent.
      */
+    @EnforcePermission("MANAGE_MEDIA_PROJECTION")
     @JavaPassthrough(annotation = "@android.annotation.RequiresPermission(android.Manifest"
             + ".permission.MANAGE_MEDIA_PROJECTION)")
     void requestConsentForInvalidProjection(in IMediaProjection projection);
@@ -91,14 +93,17 @@
             + ".permission.MANAGE_MEDIA_PROJECTION)")
     MediaProjectionInfo getActiveProjectionInfo();
 
+    @EnforcePermission("MANAGE_MEDIA_PROJECTION")
     @JavaPassthrough(annotation = "@android.annotation.RequiresPermission(android.Manifest"
             + ".permission.MANAGE_MEDIA_PROJECTION)")
     void stopActiveProjection();
 
+    @EnforcePermission("MANAGE_MEDIA_PROJECTION")
     @JavaPassthrough(annotation = "@android.annotation.RequiresPermission(android.Manifest"
             + ".permission.MANAGE_MEDIA_PROJECTION)")
     void notifyActiveProjectionCapturedContentResized(int width, int height);
 
+    @EnforcePermission("MANAGE_MEDIA_PROJECTION")
     @JavaPassthrough(annotation = "@android.annotation.RequiresPermission(android.Manifest"
                 + ".permission.MANAGE_MEDIA_PROJECTION)")
     void notifyActiveProjectionCapturedContentVisibilityChanged(boolean isVisible);
@@ -123,6 +128,7 @@
      * @param projection      the non-null projection the session describes
      * @throws SecurityException If the provided projection is not current.
      */
+  @EnforcePermission("MANAGE_MEDIA_PROJECTION")
   @JavaPassthrough(annotation = "@android.annotation.RequiresPermission(android.Manifest"
             + ".permission.MANAGE_MEDIA_PROJECTION)")
     boolean setContentRecordingSession(in ContentRecordingSession incomingSession,
diff --git a/media/java/android/media/projection/TEST_MAPPING b/media/java/android/media/projection/TEST_MAPPING
index 4324930..a792498 100644
--- a/media/java/android/media/projection/TEST_MAPPING
+++ b/media/java/android/media/projection/TEST_MAPPING
@@ -13,20 +13,6 @@
           "exclude-annotation": "org.junit.Ignore"
         }
       ]
-    },
-    {
-      "name": "CtsMediaProjectionTestCases",
-      "options": [
-        {
-          "exclude-annotation": "android.platform.test.annotations.FlakyTest"
-        },
-        {
-          "exclude-annotation": "androidx.test.filters.FlakyTest"
-        },
-        {
-          "exclude-annotation": "org.junit.Ignore"
-        }
-      ]
     }
   ]
 }
diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java
index cda919f..1d6e38d 100644
--- a/media/java/android/media/session/MediaSession.java
+++ b/media/java/android/media/session/MediaSession.java
@@ -267,25 +267,33 @@
     }
 
     /**
-     * Set a pending intent for your media button receiver to allow restarting
-     * playback after the session has been stopped. If your app is started in
-     * this way an {@link Intent#ACTION_MEDIA_BUTTON} intent will be sent via
-     * the pending intent.
-     * <p>
-     * The pending intent is recommended to be explicit to follow the security recommendation of
-     * {@link PendingIntent#getActivity}.
+     * Set a pending intent for your media button receiver to allow restarting playback after the
+     * session has been stopped.
+     *
+     * <p>If your app is started in this way an {@link Intent#ACTION_MEDIA_BUTTON} intent will be
+     * sent via the pending intent.
+     *
+     * <p>The provided {@link PendingIntent} must not target an activity. On apps targeting Android
+     * V and above, passing an activity pending intent to this method causes an {@link
+     * IllegalArgumentException}. On apps targeting Android U and below, passing an activity pending
+     * intent causes the call to be ignored. Refer to this <a
+     * href="https://developer.android.com/guide/components/activities/background-starts">guide</a>
+     * for more information.
+     *
+     * <p>The pending intent is recommended to be explicit to follow the security recommendation of
+     * {@link PendingIntent#getService}.
      *
      * @param mbr The {@link PendingIntent} to send the media button event to.
-     * @see PendingIntent#getActivity
-     *
      * @deprecated Use {@link #setMediaButtonBroadcastReceiver(ComponentName)} instead.
+     * @throws IllegalArgumentException if the pending intent targets an activity on apps targeting
+     * Android V and above.
      */
     @Deprecated
     public void setMediaButtonReceiver(@Nullable PendingIntent mbr) {
         try {
             mBinder.setMediaButtonReceiver(mbr);
         } catch (RemoteException e) {
-            Log.wtf(TAG, "Failure in setMediaButtonReceiver.", e);
+            e.rethrowFromSystemServer();
         }
     }
 
@@ -315,7 +323,7 @@
             }
             mBinder.setMediaButtonBroadcastReceiver(broadcastReceiver);
         } catch (RemoteException e) {
-            Log.wtf(TAG, "Failure in setMediaButtonBroadcastReceiver.", e);
+            e.rethrowFromSystemServer();
         }
     }
 
diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java
index 5a56945..d81843d 100644
--- a/media/java/android/media/tv/tuner/Tuner.java
+++ b/media/java/android/media/tv/tuner/Tuner.java
@@ -1565,6 +1565,10 @@
         mFrontendCiCamLock.lock();
         mFrontendLock.lock();
         try {
+            if (mFrontendHandle == null) {
+                Log.d(TAG, "Operation cannot be done without frontend");
+                return RESULT_INVALID_STATE;
+            }
             if (mFeOwnerTuner != null) {
                 Log.d(TAG, "Operation cannot be done by sharee of tuner");
                 return RESULT_INVALID_STATE;
@@ -1632,6 +1636,10 @@
     public int disconnectFrontendToCiCam(int ciCamId) {
         acquireTRMSLock("disconnectFrontendToCiCam()");
         try {
+            if (mFrontendHandle == null) {
+                Log.d(TAG, "Operation cannot be done without frontend");
+                return RESULT_INVALID_STATE;
+            }
             if (mFeOwnerTuner != null) {
                 Log.d(TAG, "Operation cannot be done by sharee of tuner");
                 return RESULT_INVALID_STATE;
diff --git a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioMixUnitTests.java b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioMixUnitTests.java
index ac8a7f3..a26398a 100644
--- a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioMixUnitTests.java
+++ b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioMixUnitTests.java
@@ -117,7 +117,7 @@
         // --- Equality group 3
         final AudioMix recordingAudioMixWithSessionId42AndUid123Render =
                 new AudioMix.Builder(new AudioMixingRule.Builder()
-                        .setTargetMixRole(MIX_ROLE_INJECTOR)
+                        .setTargetMixRole(MIX_ROLE_PLAYERS)
                         .addMixRule(RULE_MATCH_AUDIO_SESSION_ID, 42)
                         .addMixRule(RULE_MATCH_UID, 123).build())
                         .setFormat(INPUT_FORMAT_MONO_16KHZ_PCM)
@@ -205,7 +205,19 @@
     }
 
     @Test
-    public void buildLoopbackWithDevice_throws() {
+    public void buildLoopbackForInjectorMix_success() {
+        final AudioMix audioMix = new AudioMix.Builder(new AudioMixingRule.Builder()
+                .setTargetMixRole(MIX_ROLE_INJECTOR)
+                .addMixRule(RULE_MATCH_UID, 42).build())
+                .setFormat(OUTPUT_FORMAT_MONO_16KHZ_PCM)
+                .setRouteFlags(AudioMix.ROUTE_FLAG_LOOP_BACK).build();
+
+        assertEquals(OUTPUT_FORMAT_MONO_16KHZ_PCM, audioMix.getFormat());
+        assertEquals(AudioMix.ROUTE_FLAG_LOOP_BACK, audioMix.getRouteFlags());
+    }
+
+    @Test
+    public void buildLoopbackWithIncompatibleDevice_throws() {
         assertThrows(IllegalArgumentException.class, () -> new AudioMix.Builder(
                 new AudioMixingRule.Builder()
                         .setTargetMixRole(MIX_ROLE_PLAYERS)
@@ -225,6 +237,28 @@
                 .setRouteFlags(AudioMix.ROUTE_FLAG_RENDER).build());
     }
 
+    @Test
+    public void buildRenderWithInputDevice_throws() {
+        assertThrows(IllegalArgumentException.class, () -> new AudioMix.Builder(
+                new AudioMixingRule.Builder()
+                        .setTargetMixRole(MIX_ROLE_PLAYERS)
+                        .addMixRule(RULE_MATCH_UID, 42).build())
+                .setFormat(OUTPUT_FORMAT_MONO_16KHZ_PCM)
+                .setRouteFlags(AudioMix.ROUTE_FLAG_RENDER)
+                .setDevice(AudioSystem.DEVICE_IN_BUILTIN_MIC, /*address=*/"").build());
+    }
+
+    @Test
+    public void buildRenderWithInjectorMix_throws() {
+        assertThrows(IllegalArgumentException.class, () -> new AudioMix.Builder(
+                new AudioMixingRule.Builder()
+                        .setTargetMixRole(MIX_ROLE_INJECTOR)
+                        .addMixRule(RULE_MATCH_UID, 42).build())
+                .setFormat(OUTPUT_FORMAT_MONO_16KHZ_PCM)
+                .setRouteFlags(AudioMix.ROUTE_FLAG_RENDER)
+                .setDevice(AudioSystem.DEVICE_OUT_SPEAKER, /*address=*/"").build());
+    }
+
 
 
     private static AudioMix writeToAndFromParcel(AudioMix audioMix) {
diff --git a/media/tests/MediaFrameworkTest/Android.bp b/media/tests/MediaFrameworkTest/Android.bp
index 06ec949e..ca20225e 100644
--- a/media/tests/MediaFrameworkTest/Android.bp
+++ b/media/tests/MediaFrameworkTest/Android.bp
@@ -20,7 +20,9 @@
         "androidx.test.ext.junit",
         "androidx.test.rules",
         "android-ex-camera2",
+        "testables",
         "testng",
+        "truth-prebuilt",
     ],
     jni_libs: [
         "libdexmakerjvmtiagent",
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/OWNERS b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/OWNERS
new file mode 100644
index 0000000..6d5f82c
--- /dev/null
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/OWNERS
@@ -0,0 +1,2 @@
+# Haptics team also works on Ringtone
+per-file *Ringtone* = file:/services/core/java/com/android/server/vibrator/OWNERS
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/RingtoneTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/RingtoneTest.java
new file mode 100644
index 0000000..3c0c684
--- /dev/null
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/RingtoneTest.java
@@ -0,0 +1,840 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.mediaframeworktest.unit;
+
+import static android.media.Ringtone.MEDIA_SOUND;
+import static android.media.Ringtone.MEDIA_SOUND_AND_VIBRATION;
+import static android.media.Ringtone.MEDIA_VIBRATION;
+
+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.anyBoolean;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.Mockito.doCallRealMethod;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
+
+import android.Manifest;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.res.AssetFileDescriptor;
+import android.media.AudioAttributes;
+import android.media.AudioManager;
+import android.media.IRingtonePlayer;
+import android.media.MediaPlayer;
+import android.media.Ringtone;
+import android.media.audiofx.HapticGenerator;
+import android.net.Uri;
+import android.os.IBinder;
+import android.os.VibrationAttributes;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.testing.TestableContext;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.mediaframeworktest.R;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runner.RunWith;
+import org.junit.runners.model.Statement;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import java.io.FileNotFoundException;
+import java.util.ArrayDeque;
+import java.util.Map;
+import java.util.Queue;
+
+@RunWith(AndroidJUnit4.class)
+public class RingtoneTest {
+
+    private static final Uri SOUND_URI = Uri.parse("content://fake-sound-uri");
+
+    private static final AudioAttributes RINGTONE_ATTRIBUTES =
+            audioAttributes(AudioAttributes.USAGE_NOTIFICATION_RINGTONE);
+    private static final AudioAttributes RINGTONE_ATTRIBUTES_WITH_HC =
+            new AudioAttributes.Builder(RINGTONE_ATTRIBUTES).setHapticChannelsMuted(false).build();
+    private static final VibrationAttributes RINGTONE_VIB_ATTRIBUTES =
+            new VibrationAttributes.Builder(RINGTONE_ATTRIBUTES).build();
+
+    private static final VibrationEffect VIBRATION_EFFECT =
+            VibrationEffect.createWaveform(new long[] { 0, 100, 50, 100}, -1);
+    private static final VibrationEffect VIBRATION_EFFECT_REPEATING =
+            VibrationEffect.createWaveform(new long[] { 0, 100, 50, 100, 50}, 1);
+
+    @Rule
+    public final RingtoneInjectablesTrackingTestRule
+            mMediaPlayerRule = new RingtoneInjectablesTrackingTestRule();
+
+    @Captor private ArgumentCaptor<IBinder> mIBinderCaptor;
+    @Mock private IRingtonePlayer mMockRemotePlayer;
+    @Mock private Vibrator mMockVibrator;
+    private AudioManager mSpyAudioManager;
+    private TestableContext mContext;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        TestableContext testContext =
+                new TestableContext(InstrumentationRegistry.getTargetContext(), null);
+        testContext.getTestablePermissions().setPermission(Manifest.permission.VIBRATE,
+                PackageManager.PERMISSION_GRANTED);
+        AudioManager realAudioManager = testContext.getSystemService(AudioManager.class);
+        mSpyAudioManager = spy(realAudioManager);
+        when(mSpyAudioManager.getRingtonePlayer()).thenReturn(mMockRemotePlayer);
+        testContext.addMockSystemService(AudioManager.class, mSpyAudioManager);
+        testContext.addMockSystemService(Vibrator.class, mMockVibrator);
+
+        mContext = spy(testContext);
+    }
+
+    @Test
+    public void testRingtone_fullLifecycleUsingLocalMediaPlayer() throws Exception {
+        MediaPlayer mockMediaPlayer = mMediaPlayerRule.expectLocalMediaPlayer();
+        Ringtone ringtone =
+                newBuilder(MEDIA_SOUND, RINGTONE_ATTRIBUTES).setUri(SOUND_URI).build();
+        assertThat(ringtone).isNotNull();
+        assertThat(ringtone.isUsingRemotePlayer()).isFalse();
+
+        // Verify all the properties.
+        assertThat(ringtone.getEnabledMedia()).isEqualTo(MEDIA_SOUND);
+        assertThat(ringtone.getUri()).isEqualTo(SOUND_URI);
+        assertThat(ringtone.getAudioAttributes()).isEqualTo(RINGTONE_ATTRIBUTES);
+        assertThat(ringtone.getVolume()).isEqualTo(1.0f);
+        assertThat(ringtone.isLooping()).isEqualTo(false);
+        assertThat(ringtone.isHapticGeneratorEnabled()).isEqualTo(false);
+        assertThat(ringtone.getPreferBuiltinDevice()).isFalse();
+        assertThat(ringtone.getVolumeShaperConfig()).isNull();
+        assertThat(ringtone.isLocalOnly()).isFalse();
+
+        // Prepare
+        verifyLocalPlayerSetup(mockMediaPlayer, SOUND_URI, RINGTONE_ATTRIBUTES);
+        verify(mockMediaPlayer).setVolume(1.0f);
+        verify(mockMediaPlayer).setLooping(false);
+        verify(mockMediaPlayer).prepare();
+
+        // Play
+        ringtone.play();
+        verifyLocalPlay(mockMediaPlayer);
+
+        // Verify dynamic controls.
+        ringtone.setVolume(0.8f);
+        verify(mockMediaPlayer).setVolume(0.8f);
+        when(mockMediaPlayer.isLooping()).thenReturn(false);
+        ringtone.setLooping(true);
+        verify(mockMediaPlayer).isLooping();
+        verify(mockMediaPlayer).setLooping(true);
+        HapticGenerator mockHapticGenerator =
+                mMediaPlayerRule.expectHapticGenerator(mockMediaPlayer);
+        ringtone.setHapticGeneratorEnabled(true);
+        verify(mockHapticGenerator).setEnabled(true);
+
+        // Release
+        ringtone.stop();
+        verifyLocalStop(mockMediaPlayer);
+
+        // This test is intended to strictly verify all interactions with MediaPlayer in a local
+        // playback case. This shouldn't be necessary in other tests that have the same basic
+        // setup.
+        verifyNoMoreInteractions(mockMediaPlayer);
+        verify(mockHapticGenerator).release();
+        verifyNoMoreInteractions(mockHapticGenerator);
+        verifyZeroInteractions(mMockRemotePlayer);
+        verifyZeroInteractions(mMockVibrator);
+    }
+
+    @Test
+    public void testRingtone_localMediaPlayerWithAudioCoupledOverride() throws Exception {
+        // Audio coupled playback is enabled in the incoming attributes, plus an instruction
+        // to leave the attributes alone. This test verifies that the attributes reach the
+        // media player without changing.
+        final AudioAttributes audioAttributes = RINGTONE_ATTRIBUTES_WITH_HC;
+        MediaPlayer mockMediaPlayer = mMediaPlayerRule.expectLocalMediaPlayer();
+        mMediaPlayerRule.setHasHapticChannels(mockMediaPlayer, true);
+        Ringtone ringtone =
+                newBuilder(MEDIA_SOUND, audioAttributes)
+                        .setUri(SOUND_URI)
+                        .setUseExactAudioAttributes(true)
+                        .build();
+        assertThat(ringtone).isNotNull();
+        assertThat(ringtone.isUsingRemotePlayer()).isFalse();
+
+        // Verify all the properties.
+        assertThat(ringtone.getEnabledMedia()).isEqualTo(MEDIA_SOUND);
+        assertThat(ringtone.getUri()).isEqualTo(SOUND_URI);
+        assertThat(ringtone.getAudioAttributes()).isEqualTo(audioAttributes);
+
+        // Prepare
+        verifyLocalPlayerSetup(mockMediaPlayer, SOUND_URI, audioAttributes);
+        verify(mockMediaPlayer).prepare();
+
+        // Play
+        ringtone.play();
+        verifyLocalPlay(mockMediaPlayer);
+
+        // Release
+        ringtone.stop();
+        verifyLocalStop(mockMediaPlayer);
+
+        verifyZeroInteractions(mMockRemotePlayer);
+        verifyZeroInteractions(mMockVibrator);
+    }
+
+    @Test
+    public void testRingtone_fullLifecycleUsingRemoteMediaPlayer() throws Exception {
+        MediaPlayer mockMediaPlayer = mMediaPlayerRule.expectLocalMediaPlayer();
+        setupFileNotFound(mockMediaPlayer, SOUND_URI);
+        Ringtone ringtone =
+                newBuilder(MEDIA_SOUND, RINGTONE_ATTRIBUTES)
+                .setUri(SOUND_URI)
+                .build();
+        assertThat(ringtone).isNotNull();
+        assertThat(ringtone.isUsingRemotePlayer()).isTrue();
+
+        // Verify all the properties.
+        assertThat(ringtone.getEnabledMedia()).isEqualTo(MEDIA_SOUND);
+        assertThat(ringtone.getUri()).isEqualTo(SOUND_URI);
+        assertThat(ringtone.getAudioAttributes()).isEqualTo(RINGTONE_ATTRIBUTES);
+        assertThat(ringtone.getVolume()).isEqualTo(1.0f);
+        assertThat(ringtone.isLooping()).isEqualTo(false);
+        assertThat(ringtone.isHapticGeneratorEnabled()).isEqualTo(false);
+        assertThat(ringtone.getPreferBuiltinDevice()).isFalse();
+        assertThat(ringtone.getVolumeShaperConfig()).isNull();
+        assertThat(ringtone.isLocalOnly()).isFalse();
+
+        // Initialization did try to create a local media player.
+        verify(mockMediaPlayer).setDataSource(mContext, SOUND_URI);
+        // setDataSource throws file not found, so nothing else will happen on the local player.
+        verify(mockMediaPlayer).release();
+
+        // Delegates to remote media player.
+        ringtone.play();
+        verify(mMockRemotePlayer).playRemoteRingtone(mIBinderCaptor.capture(), eq(SOUND_URI),
+                eq(RINGTONE_ATTRIBUTES), eq(false), eq(MEDIA_SOUND), isNull(),
+                eq(1.0f), eq(false), eq(false), isNull());
+        IBinder remoteToken = mIBinderCaptor.getValue();
+
+        // Verify dynamic controls.
+        ringtone.setVolume(0.8f);
+        verify(mMockRemotePlayer).setVolume(remoteToken, 0.8f);
+        ringtone.setLooping(true);
+        verify(mMockRemotePlayer).setLooping(remoteToken, true);
+        ringtone.setHapticGeneratorEnabled(true);
+        verify(mMockRemotePlayer).setHapticGeneratorEnabled(remoteToken, true);
+
+        ringtone.stop();
+        verify(mMockRemotePlayer).stop(remoteToken);
+        verifyNoMoreInteractions(mMockRemotePlayer);
+        verifyNoMoreInteractions(mockMediaPlayer);
+        verifyZeroInteractions(mMockVibrator);
+    }
+
+    @Test
+    public void testRingtone_localMediaWithVibration() throws Exception {
+        MediaPlayer mockMediaPlayer = mMediaPlayerRule.expectLocalMediaPlayer();
+        when(mMockVibrator.hasVibrator()).thenReturn(true);
+        Ringtone ringtone =
+                newBuilder(MEDIA_SOUND_AND_VIBRATION, RINGTONE_ATTRIBUTES)
+                        .setUri(SOUND_URI)
+                        .setVibrationEffect(VIBRATION_EFFECT)
+                        .build();
+        assertThat(ringtone).isNotNull();
+        assertThat(ringtone.isUsingRemotePlayer()).isFalse();
+        verify(mMockVibrator).hasVibrator();
+
+        // Verify all the properties.
+        assertThat(ringtone.getEnabledMedia()).isEqualTo(MEDIA_SOUND_AND_VIBRATION);
+        assertThat(ringtone.getUri()).isEqualTo(SOUND_URI);
+        assertThat(ringtone.getVibrationEffect()).isEqualTo(VIBRATION_EFFECT);
+
+        // Prepare
+        // Uses attributes with haptic channels enabled, but will use the effect when there aren't
+        // any present.
+        verifyLocalPlayerSetup(mockMediaPlayer, SOUND_URI, RINGTONE_ATTRIBUTES_WITH_HC);
+        verify(mockMediaPlayer).setVolume(1.0f);
+        verify(mockMediaPlayer).setLooping(false);
+        verify(mockMediaPlayer).prepare();
+
+        // Play
+        ringtone.play();
+
+        verifyLocalPlay(mockMediaPlayer);
+        verify(mMockVibrator).vibrate(VIBRATION_EFFECT, RINGTONE_VIB_ATTRIBUTES);
+
+        // Verify dynamic controls.
+        ringtone.setVolume(0.8f);
+        verify(mockMediaPlayer).setVolume(0.8f);
+
+        // Set looping doesn't affect an already-started vibration.
+        when(mockMediaPlayer.isLooping()).thenReturn(false);  // Checks original
+        ringtone.setLooping(true);
+        verify(mockMediaPlayer).isLooping();
+        verify(mockMediaPlayer).setLooping(true);
+
+        // This is ignored because there's a vibration effect being used.
+        ringtone.setHapticGeneratorEnabled(true);
+
+        // Release
+        ringtone.stop();
+        verifyLocalStop(mockMediaPlayer);
+        verify(mMockVibrator).cancel(VibrationAttributes.USAGE_RINGTONE);
+
+        // This test is intended to strictly verify all interactions with MediaPlayer in a local
+        // playback case. This shouldn't be necessary in other tests that have the same basic
+        // setup.
+        verifyNoMoreInteractions(mockMediaPlayer);
+        verifyZeroInteractions(mMockRemotePlayer);
+        verifyNoMoreInteractions(mMockVibrator);
+    }
+
+    @Test
+    public void testRingtone_localMediaWithVibrationOnly() throws Exception {
+        when(mMockVibrator.hasVibrator()).thenReturn(true);
+        Ringtone ringtone =
+                newBuilder(MEDIA_VIBRATION, RINGTONE_ATTRIBUTES)
+                        // TODO: set sound uri too in diff test
+                        .setVibrationEffect(VIBRATION_EFFECT)
+                        .build();
+        assertThat(ringtone).isNotNull();
+        assertThat(ringtone.isUsingRemotePlayer()).isFalse();
+        verify(mMockVibrator).hasVibrator();
+
+        // Verify all the properties.
+        assertThat(ringtone.getEnabledMedia()).isEqualTo(MEDIA_VIBRATION);
+        assertThat(ringtone.getUri()).isNull();
+        assertThat(ringtone.getVibrationEffect()).isEqualTo(VIBRATION_EFFECT);
+
+        // Play
+        ringtone.play();
+
+        verify(mMockVibrator).vibrate(VIBRATION_EFFECT, RINGTONE_VIB_ATTRIBUTES);
+
+        // Verify dynamic controls (no-op without sound)
+        ringtone.setVolume(0.8f);
+
+        // Set looping doesn't affect an already-started vibration.
+        ringtone.setLooping(true);
+
+        // This is ignored because there's a vibration effect being used and no sound.
+        ringtone.setHapticGeneratorEnabled(true);
+
+        // Release
+        ringtone.stop();
+        verify(mMockVibrator).cancel(VibrationAttributes.USAGE_RINGTONE);
+
+        // This test is intended to strictly verify all interactions with MediaPlayer in a local
+        // playback case. This shouldn't be necessary in other tests that have the same basic
+        // setup.
+        verifyZeroInteractions(mMockRemotePlayer);
+        verifyNoMoreInteractions(mMockVibrator);
+    }
+
+    @Test
+    public void testRingtone_localMediaWithVibrationOnlyAndSoundUriNoHapticChannels()
+            throws Exception {
+        // A media player will still be created for vibration-only because the vibration can come
+        // from haptic channels on the sound file (although in this case it doesn't).
+        MediaPlayer mockMediaPlayer = mMediaPlayerRule.expectLocalMediaPlayer();
+        mMediaPlayerRule.setHasHapticChannels(mockMediaPlayer, false);
+        when(mMockVibrator.hasVibrator()).thenReturn(true);
+        Ringtone ringtone =
+                newBuilder(MEDIA_VIBRATION, RINGTONE_ATTRIBUTES)
+                        .setUri(SOUND_URI)
+                        .setVibrationEffect(VIBRATION_EFFECT)
+                        .build();
+        assertThat(ringtone).isNotNull();
+        assertThat(ringtone.isUsingRemotePlayer()).isFalse();
+        verify(mMockVibrator).hasVibrator();
+
+        // Verify all the properties.
+        assertThat(ringtone.getEnabledMedia()).isEqualTo(MEDIA_VIBRATION);
+        assertThat(ringtone.getUri()).isEqualTo(SOUND_URI);
+        assertThat(ringtone.getVibrationEffect()).isEqualTo(VIBRATION_EFFECT);
+
+        // Prepare
+        // Uses attributes with haptic channels enabled, but will abandon the MediaPlayer when it
+        // knows there aren't any.
+        verifyLocalPlayerSetup(mockMediaPlayer, SOUND_URI, RINGTONE_ATTRIBUTES_WITH_HC);
+        verify(mockMediaPlayer).setVolume(0.0f);  // Vibration-only: sound muted.
+        verify(mockMediaPlayer).setLooping(false);
+        verify(mockMediaPlayer).prepare();
+        verify(mockMediaPlayer).release();  // abandoned: no haptic channels.
+
+        // Play
+        ringtone.play();
+
+        verify(mMockVibrator).vibrate(VIBRATION_EFFECT, RINGTONE_VIB_ATTRIBUTES);
+
+        // Verify dynamic controls (no-op without sound)
+        ringtone.setVolume(0.8f);
+
+        // Set looping doesn't affect an already-started vibration.
+        ringtone.setLooping(true);
+
+        // This is ignored because there's a vibration effect being used and no sound.
+        ringtone.setHapticGeneratorEnabled(true);
+
+        // Release
+        ringtone.stop();
+        verify(mMockVibrator).cancel(VibrationAttributes.USAGE_RINGTONE);
+
+        // This test is intended to strictly verify all interactions with MediaPlayer in a local
+        // playback case. This shouldn't be necessary in other tests that have the same basic
+        // setup.
+        verifyZeroInteractions(mMockRemotePlayer);
+        verifyNoMoreInteractions(mMockVibrator);
+        verifyNoMoreInteractions(mockMediaPlayer);
+    }
+
+    @Test
+    public void testRingtone_localMediaWithVibrationOnlyAndSoundUriWithHapticChannels()
+            throws Exception {
+        MediaPlayer mockMediaPlayer = mMediaPlayerRule.expectLocalMediaPlayer();
+        when(mMockVibrator.hasVibrator()).thenReturn(true);
+        mMediaPlayerRule.setHasHapticChannels(mockMediaPlayer, true);
+        Ringtone ringtone =
+                newBuilder(MEDIA_VIBRATION, RINGTONE_ATTRIBUTES)
+                        .setUri(SOUND_URI)
+                        .setVibrationEffect(VIBRATION_EFFECT)
+                        .build();
+        assertThat(ringtone).isNotNull();
+        assertThat(ringtone.isUsingRemotePlayer()).isFalse();
+        verify(mMockVibrator).hasVibrator();
+
+        // Verify all the properties.
+        assertThat(ringtone.getEnabledMedia()).isEqualTo(MEDIA_VIBRATION);
+        assertThat(ringtone.getUri()).isEqualTo(SOUND_URI);
+        assertThat(ringtone.getVibrationEffect()).isEqualTo(VIBRATION_EFFECT);
+
+        // Prepare
+        // Uses attributes with haptic channels enabled, but will use the effect when there aren't
+        // any present.
+        verifyLocalPlayerSetup(mockMediaPlayer, SOUND_URI, RINGTONE_ATTRIBUTES_WITH_HC);
+        verify(mockMediaPlayer).setVolume(0.0f);  // Vibration-only: sound muted.
+        verify(mockMediaPlayer).setLooping(false);
+        verify(mockMediaPlayer).prepare();
+
+        // Play
+        ringtone.play();
+        // Vibrator.vibrate isn't called because the vibration comes from the sound.
+        verifyLocalPlay(mockMediaPlayer);
+
+        // Verify dynamic controls (no-op without sound)
+        ringtone.setVolume(0.8f);
+
+        when(mockMediaPlayer.isLooping()).thenReturn(false);  // Checks original
+        ringtone.setLooping(true);
+        verify(mockMediaPlayer).isLooping();
+        verify(mockMediaPlayer).setLooping(true);
+
+        // This is ignored because it's using haptic channels.
+        ringtone.setHapticGeneratorEnabled(true);
+
+        // Release
+        ringtone.stop();
+        verifyLocalStop(mockMediaPlayer);
+
+        // This test is intended to strictly verify all interactions with MediaPlayer in a local
+        // playback case. This shouldn't be necessary in other tests that have the same basic
+        // setup.
+        verifyZeroInteractions(mMockRemotePlayer);
+        verifyZeroInteractions(mMockVibrator);
+    }
+
+    @Test
+    public void testRingtone_localMediaWithVibrationPrefersHapticChannels() throws Exception {
+        MediaPlayer mockMediaPlayer = mMediaPlayerRule.expectLocalMediaPlayer();
+        mMediaPlayerRule.setHasHapticChannels(mockMediaPlayer, true);
+        when(mMockVibrator.hasVibrator()).thenReturn(true);
+        Ringtone ringtone =
+                newBuilder(MEDIA_SOUND_AND_VIBRATION, RINGTONE_ATTRIBUTES)
+                        .setUri(SOUND_URI)
+                        .setVibrationEffect(VIBRATION_EFFECT)
+                        .build();
+        assertThat(ringtone).isNotNull();
+        assertThat(ringtone.isUsingRemotePlayer()).isFalse();
+        verify(mMockVibrator).hasVibrator();
+
+        // Verify all the properties.
+        assertThat(ringtone.getEnabledMedia()).isEqualTo(MEDIA_SOUND_AND_VIBRATION);
+        assertThat(ringtone.getUri()).isEqualTo(SOUND_URI);
+        assertThat(ringtone.getVibrationEffect()).isEqualTo(VIBRATION_EFFECT);
+
+        // Prepare
+        // The attributes here have haptic channels enabled (unlike above)
+        verifyLocalPlayerSetup(mockMediaPlayer, SOUND_URI, RINGTONE_ATTRIBUTES_WITH_HC);
+        verify(mockMediaPlayer).prepare();
+
+        // Play
+        ringtone.play();
+        when(mockMediaPlayer.isPlaying()).thenReturn(true);
+        verifyLocalPlay(mockMediaPlayer);
+
+        // Release
+        ringtone.stop();
+        verifyLocalStop(mockMediaPlayer);
+
+        verifyZeroInteractions(mMockRemotePlayer);
+        // Nothing after the initial hasVibrator - it uses audio-coupled.
+        verifyNoMoreInteractions(mMockVibrator);
+    }
+
+    @Test
+    public void testRingtone_localMediaWithVibrationButSoundMuted() throws Exception {
+        MediaPlayer mockMediaPlayer = mMediaPlayerRule.expectLocalMediaPlayer();
+        mMediaPlayerRule.setHasHapticChannels(mockMediaPlayer, false);
+        doReturn(0).when(mSpyAudioManager)
+                .getStreamVolume(AudioAttributes.toLegacyStreamType(RINGTONE_ATTRIBUTES));
+        when(mMockVibrator.hasVibrator()).thenReturn(true);
+        Ringtone ringtone =
+                newBuilder(MEDIA_SOUND_AND_VIBRATION, RINGTONE_ATTRIBUTES)
+                        .setUri(SOUND_URI)
+                        .setVibrationEffect(VIBRATION_EFFECT)
+                        .build();
+        assertThat(ringtone).isNotNull();
+        assertThat(ringtone.isUsingRemotePlayer()).isFalse();
+        verify(mMockVibrator).hasVibrator();
+
+        // Verify all the properties.
+        assertThat(ringtone.getEnabledMedia()).isEqualTo(MEDIA_SOUND_AND_VIBRATION);
+        assertThat(ringtone.getUri()).isEqualTo(SOUND_URI);
+        assertThat(ringtone.getVibrationEffect()).isEqualTo(VIBRATION_EFFECT);
+
+        // Prepare
+        // The attributes here have haptic channels enabled (unlike above)
+        verifyLocalPlayerSetup(mockMediaPlayer, SOUND_URI, RINGTONE_ATTRIBUTES_WITH_HC);
+        verify(mockMediaPlayer).prepare();
+
+        // Play
+        ringtone.play();
+        // The media player is never played, because sound is muted.
+        verify(mockMediaPlayer, never()).start();
+        when(mockMediaPlayer.isPlaying()).thenReturn(true);
+        verify(mMockVibrator).vibrate(VIBRATION_EFFECT, RINGTONE_VIB_ATTRIBUTES);
+
+        // Release
+        ringtone.stop();
+        verify(mockMediaPlayer).release();
+        verify(mMockVibrator).cancel(VibrationAttributes.USAGE_RINGTONE);
+
+        verifyZeroInteractions(mMockRemotePlayer);
+        // Nothing after the initial hasVibrator - it uses audio-coupled.
+        verifyNoMoreInteractions(mMockVibrator);
+    }
+
+    @Test
+    public void testRingtone_nullMediaOnBuilderUsesFallback() throws Exception {
+        AssetFileDescriptor testResourceFd =
+                mContext.getResources().openRawResourceFd(R.raw.shortmp3);
+        // Ensure it will flow as expected.
+        assertThat(testResourceFd).isNotNull();
+        assertThat(testResourceFd.getDeclaredLength()).isAtLeast(0);
+        mContext.getOrCreateTestableResources()
+                .addOverride(com.android.internal.R.raw.fallbackring, testResourceFd);
+
+        MediaPlayer mockMediaPlayer = mMediaPlayerRule.expectLocalMediaPlayer();
+        Ringtone ringtone = newBuilder(MEDIA_SOUND, RINGTONE_ATTRIBUTES)
+                .setUri(null)
+                .build();
+        assertThat(ringtone).isNotNull();
+        assertThat(ringtone.isUsingRemotePlayer()).isFalse();
+
+        // Delegates straight to fallback in local player.
+        // Prepare
+        verifyLocalPlayerFallbackSetup(mockMediaPlayer, testResourceFd, RINGTONE_ATTRIBUTES);
+        verify(mockMediaPlayer).setVolume(1.0f);
+        verify(mockMediaPlayer).setLooping(false);
+        verify(mockMediaPlayer).prepare();
+
+        // Play
+        ringtone.play();
+        verifyLocalPlay(mockMediaPlayer);
+
+        // Release
+        ringtone.stop();
+        verifyLocalStop(mockMediaPlayer);
+
+        verifyNoMoreInteractions(mockMediaPlayer);
+        verifyNoMoreInteractions(mMockRemotePlayer);
+    }
+
+    @Test
+    public void testRingtone_nullMediaOnBuilderUsesFallbackViaRemote() throws Exception {
+        mContext.getOrCreateTestableResources()
+                .addOverride(com.android.internal.R.raw.fallbackring, null);
+        Ringtone ringtone = newBuilder(MEDIA_SOUND, RINGTONE_ATTRIBUTES)
+                .setUri(null)
+                .setLooping(true) // distinct from haptic generator, to match plumbing
+                .build();
+        assertThat(ringtone).isNotNull();
+        // Local player fallback fails as the resource isn't found (no media player creation is
+        // attempted), and then goes on to create the remote player.
+        assertThat(ringtone.isUsingRemotePlayer()).isTrue();
+
+        ringtone.play();
+        verify(mMockRemotePlayer).playRemoteRingtone(mIBinderCaptor.capture(), isNull(),
+                eq(RINGTONE_ATTRIBUTES), eq(false),
+                eq(MEDIA_SOUND), isNull(),
+                eq(1.0f), eq(true), eq(false), isNull());
+        ringtone.stop();
+        verify(mMockRemotePlayer).stop(mIBinderCaptor.getValue());
+        verifyNoMoreInteractions(mMockRemotePlayer);
+    }
+
+    @Test
+    public void testRingtone_noMediaSetOnBuilderFallbackFailsAndNoRemote() throws Exception {
+        mContext.getOrCreateTestableResources()
+                .addOverride(com.android.internal.R.raw.fallbackring, null);
+        Ringtone ringtone = newBuilder(MEDIA_SOUND, RINGTONE_ATTRIBUTES)
+                .setUri(null)
+                .setLocalOnly()
+                .build();
+        // Local player fallback fails as the resource isn't found (no media player creation is
+        // attempted), and since there is no local player, the ringtone ends up having nothing to
+        // do.
+        assertThat(ringtone).isNull();
+    }
+
+    private Ringtone.Builder newBuilder(@Ringtone.RingtoneMedia int ringtoneMedia,
+            AudioAttributes audioAttributes) {
+        return new Ringtone.Builder(mContext, ringtoneMedia, audioAttributes)
+                .setInjectables(mMediaPlayerRule.injectables);
+    }
+
+    private static AudioAttributes audioAttributes(int audioUsage) {
+        return new AudioAttributes.Builder()
+                .setUsage(audioUsage)
+                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+                .build();
+    }
+
+    /** Makes the mock get some sort of file access problem. */
+    private void setupFileNotFound(MediaPlayer mockMediaPlayer, Uri uri) throws Exception {
+        doThrow(new FileNotFoundException("Fake file not found"))
+                .when(mockMediaPlayer).setDataSource(any(Context.class), eq(uri));
+    }
+
+    private void verifyLocalPlayerSetup(MediaPlayer mockPlayer, Uri expectedUri,
+            AudioAttributes expectedAudioAttributes) throws Exception {
+        verify(mockPlayer).setDataSource(mContext, expectedUri);
+        verify(mockPlayer).setAudioAttributes(expectedAudioAttributes);
+        verify(mockPlayer).setPreferredDevice(null);
+        verify(mockPlayer).prepare();
+    }
+
+    private void verifyLocalPlayerFallbackSetup(MediaPlayer mockPlayer, AssetFileDescriptor afd,
+            AudioAttributes expectedAudioAttributes) throws Exception {
+        // This is very specific but it's a simple way to test that the test resource matches.
+        if (afd.getDeclaredLength() < 0) {
+            verify(mockPlayer).setDataSource(afd.getFileDescriptor());
+        } else {
+            verify(mockPlayer).setDataSource(afd.getFileDescriptor(),
+                    afd.getStartOffset(),
+                    afd.getDeclaredLength());
+        }
+        verify(mockPlayer).setAudioAttributes(expectedAudioAttributes);
+        verify(mockPlayer).setPreferredDevice(null);
+        verify(mockPlayer).prepare();
+    }
+
+    private void verifyLocalPlay(MediaPlayer mockMediaPlayer) {
+        verify(mockMediaPlayer).setOnCompletionListener(any());
+        verify(mockMediaPlayer).start();
+    }
+
+    private void verifyLocalStop(MediaPlayer mockMediaPlayer) {
+        verify(mockMediaPlayer).stop();
+        verify(mockMediaPlayer).setOnCompletionListener(isNull());
+        verify(mockMediaPlayer).reset();
+        verify(mockMediaPlayer).release();
+    }
+
+    /**
+     * This rule ensures that all expected media player creations from the factory do actually
+     * occur. The reason for this level of control is that creating a media player is fairly
+     * expensive and blocking, so we do want unit tests of this class to "declare" interactions
+     * of all created media players.
+     *
+     * This needs to be a TestRule so that the teardown assertions can be skipped if the test has
+     * failed (and media player assertions may just be a distracting side effect). Otherwise, the
+     * teardown failures hide the real test ones.
+     */
+    public static class RingtoneInjectablesTrackingTestRule implements TestRule {
+        public Ringtone.Injectables injectables = new TestInjectables();
+        public boolean hapticGeneratorAvailable = true;
+
+        // Queue of (local) media players, in order of expected creation. Enqueue using
+        // expectNewMediaPlayer(), dequeued by the media player factory passed to Ringtone.
+        // This queue is asserted to be empty at the end of the test.
+        private Queue<MediaPlayer> mMockMediaPlayerQueue = new ArrayDeque<>();
+
+        // Similar to media players, but for haptic generator, which also needs releasing.
+        private Map<MediaPlayer, HapticGenerator> mMockHapticGeneratorMap = new ArrayMap<>();
+
+        // Media players with haptic channels.
+        private ArraySet<MediaPlayer> mHapticChannels = new ArraySet<>();
+
+        @Override
+        public Statement apply(Statement base, Description description) {
+            return new Statement() {
+                @Override
+                public void evaluate() throws Throwable {
+                    base.evaluate();
+                    // Only assert if the test didn't fail (base.evaluate() would throw).
+                    assertWithMessage("Test setup an expectLocalMediaPlayer but it wasn't consumed")
+                            .that(mMockMediaPlayerQueue).isEmpty();
+                    // Only assert if the test didn't fail (base.evaluate() would throw).
+                    assertWithMessage(
+                            "Test setup an expectLocalHapticGenerator but it wasn't consumed")
+                            .that(mMockHapticGeneratorMap).isEmpty();
+                }
+            };
+        }
+
+        private TestMediaPlayer expectLocalMediaPlayer() {
+            TestMediaPlayer mockMediaPlayer = Mockito.mock(TestMediaPlayer.class);
+            // Delegate to simulated methods. This means they can be verified but also reflect
+            // realistic transitions from the TestMediaPlayer.
+            doCallRealMethod().when(mockMediaPlayer).start();
+            doCallRealMethod().when(mockMediaPlayer).stop();
+            doCallRealMethod().when(mockMediaPlayer).setLooping(anyBoolean());
+            when(mockMediaPlayer.isLooping()).thenCallRealMethod();
+            when(mockMediaPlayer.isLooping()).thenCallRealMethod();
+            mMockMediaPlayerQueue.add(mockMediaPlayer);
+            return mockMediaPlayer;
+        }
+
+        private HapticGenerator expectHapticGenerator(MediaPlayer mockMediaPlayer) {
+            HapticGenerator mockHapticGenerator = Mockito.mock(HapticGenerator.class);
+            // A test should never want this.
+            assertWithMessage("Can't expect a second haptic generator created "
+                    + "for one media player")
+                    .that(mMockHapticGeneratorMap.put(mockMediaPlayer, mockHapticGenerator))
+                    .isNull();
+            return mockHapticGenerator;
+        }
+
+        private void setHasHapticChannels(MediaPlayer mp, boolean hasHapticChannels) {
+            if (hasHapticChannels) {
+                mHapticChannels.add(mp);
+            } else {
+                mHapticChannels.remove(mp);
+            }
+        }
+
+        private class TestInjectables extends Ringtone.Injectables {
+            @Override
+            public MediaPlayer newMediaPlayer() {
+                assertWithMessage(
+                        "Unexpected MediaPlayer creation. Bug or need expectNewMediaPlayer")
+                        .that(mMockMediaPlayerQueue)
+                        .isNotEmpty();
+                return mMockMediaPlayerQueue.remove();
+            }
+
+            @Override
+            public boolean isHapticGeneratorAvailable() {
+                return hapticGeneratorAvailable;
+            }
+
+            @Override
+            public HapticGenerator createHapticGenerator(MediaPlayer mediaPlayer) {
+                HapticGenerator mockHapticGenerator = mMockHapticGeneratorMap.remove(mediaPlayer);
+                assertWithMessage("Unexpected HapticGenerator creation. "
+                        + "Bug or need expectHapticGenerator")
+                        .that(mockHapticGenerator)
+                        .isNotNull();
+                return mockHapticGenerator;
+            }
+
+            @Override
+            public boolean isHapticPlaybackSupported() {
+                return true;
+            }
+
+            @Override
+            public boolean hasHapticChannels(MediaPlayer mp) {
+                return mHapticChannels.contains(mp);
+            }
+        }
+    }
+
+    /**
+     * MediaPlayer relies on a native backend and so its necessary to intercept calls from
+     * fake usage hitting them.
+     *
+     * Mocks don't work directly on native calls, but if they're overridden then it does work.
+     * Some basic state faking is also done to make the mocks more realistic.
+     */
+    private static class TestMediaPlayer extends MediaPlayer {
+        private boolean mIsPlaying = false;
+        private boolean mIsLooping = false;
+
+        @Override
+        public void start() {
+            mIsPlaying = true;
+        }
+
+        @Override
+        public void stop() {
+            mIsPlaying = false;
+        }
+
+        @Override
+        public void setLooping(boolean value) {
+            mIsLooping = value;
+        }
+
+        @Override
+        public boolean isLooping() {
+            return mIsLooping;
+        }
+
+        @Override
+        public boolean isPlaying() {
+            return mIsPlaying;
+        }
+
+        void simulatePlayingFinished() {
+            if (!mIsPlaying) {
+                throw new IllegalStateException(
+                        "Attempted to pretend playing finished when not playing");
+            }
+            mIsPlaying = false;
+        }
+    }
+}
diff --git a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java
index 4193ffa..ac8e4d4 100644
--- a/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java
+++ b/media/tests/MediaRouter/src/com/android/mediaroutertest/MediaRouter2ManagerTest.java
@@ -64,6 +64,7 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -454,6 +455,7 @@
         assertThat(onTransferFailedLatch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS)).isTrue();
     }
 
+    @Ignore // TODO(b/291800179): Diagnose flakiness and re-enable.
     @Test
     public void testRouterRelease_managerGetRoutingSessions() throws Exception {
         CountDownLatch transferLatch = new CountDownLatch(1);
diff --git a/media/tests/mediatestutils/Android.bp b/media/tests/mediatestutils/Android.bp
new file mode 100644
index 0000000..15bc177
--- /dev/null
+++ b/media/tests/mediatestutils/Android.bp
@@ -0,0 +1,53 @@
+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"],
+}
+
+// TODO audio build defaults
+java_library {
+    name: "mediatestutils_host",
+    host_supported: true,
+    srcs: [
+        "java/com/android/media/mediatestutils/CancelAllFuturesRule.java",
+    ],
+    static_libs: [
+        "junit",
+    ],
+    visibility: [
+        ":__subpackages__",
+    ],
+}
+
+java_library {
+    name: "mediatestutils",
+    srcs: [
+        "java/com/android/media/mediatestutils/TestUtils.java",
+    ],
+    static_libs: [
+        "androidx.concurrent_concurrent-futures",
+        "guava",
+        "mediatestutils_host",
+    ],
+    visibility: [
+        "//cts/tests/tests/media:__subpackages__",
+        ":__subpackages__",
+    ],
+}
+
+java_test_host {
+    name: "mediatestutilshosttests",
+    srcs: ["javatests/**/*.java"],
+    static_libs: [
+        "mediatestutils_host",
+        "junit",
+        "truth",
+    ],
+    test_suites: ["general-tests"],
+    test_options: {
+        unit_test: true,
+    },
+}
diff --git a/media/tests/mediatestutils/OWNERS b/media/tests/mediatestutils/OWNERS
new file mode 100644
index 0000000..b9eb1f8
--- /dev/null
+++ b/media/tests/mediatestutils/OWNERS
@@ -0,0 +1,4 @@
+# Bug component: 48436
+atneya@google.com
+jmtrivi@google.com
+elaurent@google.com
diff --git a/media/tests/mediatestutils/TEST_MAPPING b/media/tests/mediatestutils/TEST_MAPPING
new file mode 100644
index 0000000..6dd09ae
--- /dev/null
+++ b/media/tests/mediatestutils/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+  "presubmit": [
+    {
+      "name": "mediatestutilstests"
+    }
+  ]
+}
diff --git a/media/tests/mediatestutils/java/com/android/media/mediatestutils/CancelAllFuturesRule.java b/media/tests/mediatestutils/java/com/android/media/mediatestutils/CancelAllFuturesRule.java
new file mode 100644
index 0000000..14e261c
--- /dev/null
+++ b/media/tests/mediatestutils/java/com/android/media/mediatestutils/CancelAllFuturesRule.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.media.mediatestutils;
+
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Future;
+
+/**
+ *
+ */
+public class CancelAllFuturesRule implements TestRule {
+    private List<Future> mRegisteredFutures = new ArrayList<>();
+
+    public <T extends Future<?>> T registerFuture(T future) {
+        mRegisteredFutures.add(future);
+        return future;
+    }
+
+    @Override
+    public Statement apply(Statement base, Description description) {
+        return new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                try {
+                    base.evaluate();
+                } finally {
+                    mRegisteredFutures.forEach(f -> f.cancel(false /* shouldInterrupt */));
+                }
+            }
+        };
+    }
+}
diff --git a/media/tests/mediatestutils/java/com/android/media/mediatestutils/TestUtils.java b/media/tests/mediatestutils/java/com/android/media/mediatestutils/TestUtils.java
new file mode 100644
index 0000000..69d836d
--- /dev/null
+++ b/media/tests/mediatestutils/java/com/android/media/mediatestutils/TestUtils.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.media.mediatestutils;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+
+import androidx.concurrent.futures.CallbackToFutureAdapter;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
+
+import java.lang.ref.WeakReference;
+import java.util.Objects;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+/** Utils for audio tests. */
+public class TestUtils {
+    /**
+     * Return a future for an intent delivered by a broadcast receiver which matches an
+     * action and predicate.
+     * @param context - Context to register the receiver with
+     * @param action - String representing action to register receiver for
+     * @param pred - Predicate which sets the future if evaluates to true, otherwise, leaves
+     * the future unset. If the predicate throws, the future is set exceptionally
+     * @return - The future representing intent delivery matching predicate.
+     */
+    public static ListenableFuture<Intent> getFutureForIntent(
+            Context context, String action, Predicate<Intent> pred) {
+        // These are evaluated async
+        Objects.requireNonNull(action);
+        Objects.requireNonNull(pred);
+        return getFutureForListener(
+                (recv) ->
+                        context.registerReceiver(
+                                recv, new IntentFilter(action), Context.RECEIVER_NOT_EXPORTED),
+                (recv) -> {
+                    try {
+                        context.unregisterReceiver(recv);
+                    } catch (IllegalArgumentException e) {
+                        // Thrown when receiver is already unregistered, nothing to do
+                    }
+                },
+                (completer) ->
+                        new BroadcastReceiver() {
+                            @Override
+                            public void onReceive(Context context, Intent intent) {
+                                try {
+                                    if (action.equals(intent.getAction()) && pred.test(intent)) {
+                                        completer.set(intent);
+                                    }
+                                } catch (Exception e) {
+                                    completer.setException(e);
+                                }
+                            }
+                        },
+                "Intent receiver future for action: " + action);
+    }
+
+    /**
+     * Return a future for a callback registered to a listener interface.
+     * @param registerFunc - Function which consumes the callback object for registration
+     * @param unregisterFunc - Function which consumes the callback object for unregistration
+     * This function is called when the future is completed or cancelled
+     * @param instantiateCallback - Factory function for the callback object, provided a completer
+     * object (see {@code CallbackToFutureAdapter.Completer<T>}), which is a logical reference
+     * to the future returned by this function
+     * @param debug - Debug string contained in future {@code toString} representation.
+     */
+    public static <T, V> ListenableFuture<T> getFutureForListener(
+            Consumer<V> registerFunc,
+            Consumer<V> unregisterFunc,
+            Function<CallbackToFutureAdapter.Completer<T>, V> instantiateCallback,
+            String debug) {
+        // Doesn't need to be thread safe since the resolver is called inline
+        final WeakReference<V> wrapper[] = new WeakReference[1];
+        ListenableFuture<T> future =
+                CallbackToFutureAdapter.getFuture(
+                        completer -> {
+                            final var cb = instantiateCallback.apply(completer);
+                            wrapper[0] = new WeakReference(cb);
+                            registerFunc.accept(cb);
+                            return debug;
+                        });
+        if (wrapper[0] == null) {
+            throw new AssertionError("Resolver should be called inline");
+        }
+        final var weakref = wrapper[0];
+        future.addListener(
+                () -> {
+                    var cb = weakref.get();
+                    // If there is no reference left, the receiver has already been unregistered
+                    if (cb != null) {
+                        unregisterFunc.accept(cb);
+                        return;
+                    }
+                },
+                MoreExecutors.directExecutor()); // Direct executor is fine since lightweight
+        return future;
+    }
+}
diff --git a/media/tests/mediatestutils/javatests/com/android/media/mediatestutils/CancelAllFuturesRuleTest.java b/media/tests/mediatestutils/javatests/com/android/media/mediatestutils/CancelAllFuturesRuleTest.java
new file mode 100644
index 0000000..94fa3d7
--- /dev/null
+++ b/media/tests/mediatestutils/javatests/com/android/media/mediatestutils/CancelAllFuturesRuleTest.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.media.mediatestutils;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import org.junit.rules.ExpectedException;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Future;
+
+
+@RunWith(JUnit4.class)
+public class CancelAllFuturesRuleTest {
+
+    public static class TestException extends Throwable { }
+
+    public static class CheckFutureStatusRule implements TestRule {
+        private final List<CompletableFuture> mFutures = Arrays.asList(new CompletableFuture<>(),
+                new CompletableFuture<>());
+
+        private boolean mCompleted;
+
+        @Override
+        public Statement apply(Statement base, Description description) {
+            return new Statement() {
+                @Override
+                public void evaluate() throws Throwable {
+                    try {
+                        base.evaluate();
+                    } finally {
+                        // Intentionally suppresses original exception
+                        if (mCompleted) {
+                            assertThat(mFutures.get(0).isDone())
+                                .isTrue();
+                            assertThat(mFutures.get(0).isCancelled())
+                                .isFalse();
+                        } else {
+                            assertThat(mFutures.get(0).isCancelled())
+                                .isTrue();
+                        }
+                        assertThat(mFutures.get(1).isCancelled())
+                            .isTrue();
+                    }
+                }
+            };
+        }
+
+        Future getFuture(int idx) {
+            return mFutures.get(idx);
+        }
+
+        void completeFirstFuture(boolean exceptionally) {
+            assertThat(mFutures.get(0).complete(null))
+                .isTrue();
+            mCompleted = true;
+        }
+    }
+
+    @Rule(order = 0)
+    public ExpectedException mExpectedThrownRule = ExpectedException.none();
+
+    @Rule(order = 1)
+    public CheckFutureStatusRule mRuleVerifyerRule = new CheckFutureStatusRule();
+
+    @Rule(order = 2)
+    public CancelAllFuturesRule mCancelRule = new CancelAllFuturesRule();
+
+    @Test
+    public void testRuleCancelsFutures_whenFinishesNormally() {
+        mCancelRule.registerFuture(mRuleVerifyerRule.getFuture(0));
+        mCancelRule.registerFuture(mRuleVerifyerRule.getFuture(1));
+        // return normally
+    }
+
+    @Test
+    public void testRuleCancelsFutures_whenFinishesExceptionally() throws TestException {
+        mExpectedThrownRule.expect(TestException.class);
+        mCancelRule.registerFuture(mRuleVerifyerRule.getFuture(0));
+        mCancelRule.registerFuture(mRuleVerifyerRule.getFuture(1));
+        throw new TestException();
+    }
+
+    @Test
+    public void testRuleDoesNotThrow_whenCompletesNormally() {
+        mCancelRule.registerFuture(mRuleVerifyerRule.getFuture(0));
+        mCancelRule.registerFuture(mRuleVerifyerRule.getFuture(1));
+        mRuleVerifyerRule.completeFirstFuture(false);
+    }
+
+    @Test
+    public void testRuleDoesNotThrow_whenCompletesExceptionally() {
+        mCancelRule.registerFuture(mRuleVerifyerRule.getFuture(0));
+        mCancelRule.registerFuture(mRuleVerifyerRule.getFuture(1));
+        mRuleVerifyerRule.completeFirstFuture(false);
+    }
+}
diff --git a/media/tests/mediatestutils/tests/Android.bp b/media/tests/mediatestutils/tests/Android.bp
new file mode 100644
index 0000000..24a8360
--- /dev/null
+++ b/media/tests/mediatestutils/tests/Android.bp
@@ -0,0 +1,22 @@
+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_test {
+    name: "mediatestutilstests",
+    srcs: ["src/**/*.java"],
+    static_libs: [
+        "mockito-target-minus-junit4",
+        "androidx.test.runner",
+        "androidx.test.core",
+        "mediatestutils",
+        "junit",
+        "truth",
+    ],
+    test_suites: ["general-tests"],
+}
diff --git a/media/tests/mediatestutils/tests/AndroidManifest.xml b/media/tests/mediatestutils/tests/AndroidManifest.xml
new file mode 100644
index 0000000..662bc45
--- /dev/null
+++ b/media/tests/mediatestutils/tests/AndroidManifest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.media.mediatestutils">
+
+    <application android:testOnly="false"
+                 android:debuggable="true">
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation
+        android:name="androidx.test.runner.AndroidJUnitRunner"
+        android:targetPackage="com.android.media.mediatestutils"
+        android:label="mediatestutils tests" />
+
+</manifest>
diff --git a/media/tests/mediatestutils/tests/src/java/com/android/media/mediatestutils/GetFutureForIntentTest.java b/media/tests/mediatestutils/tests/src/java/com/android/media/mediatestutils/GetFutureForIntentTest.java
new file mode 100644
index 0000000..a4266a3
--- /dev/null
+++ b/media/tests/mediatestutils/tests/src/java/com/android/media/mediatestutils/GetFutureForIntentTest.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.media.mediatestutils;
+
+import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
+
+import static com.android.media.mediatestutils.TestUtils.getFutureForIntent;
+import static com.android.media.mediatestutils.TestUtils.getFutureForListener;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.fail;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.SystemClock;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.ExecutionException;
+import java.util.function.Predicate;
+
+@RunWith(AndroidJUnit4.class)
+public class GetFutureForIntentTest {
+    public static final String INTENT_ACTION = "com.android.media.mediatestutils.TEST_ACTION";
+    public static final String INTENT_EXTRA = "com.android.media.mediatestutils.TEST_EXTRA";
+    public static final int MAGIC_VALUE = 7;
+
+    public final Context mContext = getApplicationContext();
+    public final Predicate<Intent> mPred =
+            i -> (i != null) && (i.getIntExtra(INTENT_EXTRA, -1) == MAGIC_VALUE);
+
+    @Test
+    public void futureCompletes_afterBroadcastFiresPredicatePasses() throws Exception {
+        final var future = getFutureForIntent(mContext, INTENT_ACTION, mPred);
+        sendIntent(true);
+        var intent = future.get();
+        assertThat(intent.getAction()).isEqualTo(INTENT_ACTION);
+        assertThat(intent.getIntExtra(INTENT_EXTRA, -1)).isEqualTo(MAGIC_VALUE);
+    }
+
+    @Test
+    public void futureDoesNotComplete_afterBroadcastFiresPredicateFails() throws Exception {
+        final var future = getFutureForIntent(mContext, INTENT_ACTION, mPred);
+        sendIntent(false);
+
+        // Wait a bit, and ensure the future hasn't completed
+        SystemClock.sleep(100);
+        assertThat(future.isDone()).isFalse();
+
+        // Future should still respond to subsequent passing intent
+        sendIntent(true);
+        var intent = future.get();
+        assertThat(intent.getAction()).isEqualTo(INTENT_ACTION);
+        assertThat(intent.getIntExtra(INTENT_EXTRA, -1)).isEqualTo(MAGIC_VALUE);
+    }
+
+    @Test
+    public void futureCompletesExceptionally_afterBroadcastFiresPredicateThrows() throws Exception {
+        final var future =
+                getFutureForIntent(
+                        mContext,
+                        INTENT_ACTION,
+                        i -> {
+                            throw new IllegalStateException();
+                        });
+
+        sendIntent(true);
+        try {
+            var intent = future.get();
+            fail("Exception expected if predicate throws");
+        } catch (ExecutionException e) {
+            assertThat(e.getCause().getClass()).isEqualTo(IllegalStateException.class);
+        }
+    }
+
+    @Test
+    public void doesNotThrow_whenDoubleSet() throws Exception {
+        final var future = getFutureForIntent(mContext, INTENT_ACTION, mPred);
+        sendIntent(true);
+        sendIntent(true);
+        var intent = future.get();
+        assertThat(intent.getAction()).isEqualTo(INTENT_ACTION);
+        assertThat(intent.getIntExtra(INTENT_EXTRA, -1)).isEqualTo(MAGIC_VALUE);
+    }
+
+    @Test
+    public void unregisterListener_whenComplete() throws Exception {
+        final var service = new FakeService();
+        final ListenableFuture<Void> future =
+                getFutureForListener(
+                        service::registerListener,
+                        service::unregisterListener,
+                        completer ->
+                                () -> {
+                                    completer.set(null);
+                                },
+                        "FakeService listener future");
+        service.mRunnable.run();
+        assertThat(service.mRunnable).isNull();
+    }
+
+    @Test
+    public void unregisterListener_whenCancel() throws Exception {
+        final var service = new FakeService();
+        final ListenableFuture<Void> future =
+                getFutureForListener(
+                        service::registerListener,
+                        service::unregisterListener,
+                        completer ->
+                                () -> {
+                                    completer.set(null);
+                                },
+                        "FakeService listener future");
+        future.cancel(false);
+        assertThat(service.mRunnable).isNull();
+    }
+
+    private static class FakeService {
+        Runnable mRunnable;
+
+        void registerListener(Runnable r) {
+            mRunnable = r;
+        }
+
+        void unregisterListener(Runnable r) {
+            assertThat(r).isEqualTo(mRunnable);
+            mRunnable = null;
+        }
+    }
+
+    private void sendIntent(boolean correctValue) {
+        final Intent intent = new Intent(INTENT_ACTION).setPackage(mContext.getPackageName());
+        intent.putExtra(INTENT_EXTRA, correctValue ? MAGIC_VALUE : MAGIC_VALUE + 1);
+        mContext.sendBroadcast(intent);
+    }
+}
diff --git a/mime/java-res/android.mime.types b/mime/java-res/android.mime.types
index cb74cfc..fd785a4 100644
--- a/mime/java-res/android.mime.types
+++ b/mime/java-res/android.mime.types
@@ -52,6 +52,7 @@
 ?application/sdp sdp
 ?application/smil+xml smil
 ?application/ttml+xml ttml dfxp
+?application/vnd.android.haptics.vibration+xml ahv
 ?application/vnd.android.ota ota
 ?application/vnd.apple.mpegurl m3u8
 ?application/vnd.ms-pki.stl stl
diff --git a/native/android/TEST_MAPPING b/native/android/TEST_MAPPING
index 6a5d2c0..fd394fc 100644
--- a/native/android/TEST_MAPPING
+++ b/native/android/TEST_MAPPING
@@ -12,6 +12,15 @@
            }
        ],
        "file_patterns": ["permission_manager.cpp"]
+    },
+    {
+       "name": "CtsOsTestCases",
+       "options": [
+           {
+              "include-filter": "android.os.cts.PerformanceHintManagerTest"
+           }
+       ],
+       "file_patterns": ["performance_hint.cpp"]
     }
   ]
 }
diff --git a/native/android/performance_hint.cpp b/native/android/performance_hint.cpp
index b3628fa..6198f40 100644
--- a/native/android/performance_hint.cpp
+++ b/native/android/performance_hint.cpp
@@ -274,9 +274,10 @@
     binder::Status ret = mHintManager->setHintSessionThreads(mHintSession, tids);
     if (!ret.isOk()) {
         ALOGE("%s: failed: %s", __FUNCTION__, ret.exceptionMessage().c_str());
-        if (ret.exceptionCode() == binder::Status::Exception::EX_SECURITY ||
-            ret.exceptionCode() == binder::Status::Exception::EX_ILLEGAL_ARGUMENT) {
+        if (ret.exceptionCode() == binder::Status::Exception::EX_ILLEGAL_ARGUMENT) {
             return EINVAL;
+        } else if (ret.exceptionCode() == binder::Status::Exception::EX_SECURITY) {
+            return EPERM;
         }
         return EPIPE;
     }
diff --git a/native/android/system_fonts.cpp b/native/android/system_fonts.cpp
index fe3132e..de7ea70 100644
--- a/native/android/system_fonts.cpp
+++ b/native/android/system_fonts.cpp
@@ -251,14 +251,15 @@
                         locale.emplace(minikin::getLocaleString(localeId));
                     }
                     std::vector<std::pair<uint32_t, float>> axes;
-                    for (const auto& [tag, value] : font->typeface()->GetAxes()) {
+                    for (const auto& [tag, value] : font->baseTypeface()->GetAxes()) {
                         axes.push_back(std::make_pair(tag, value));
                     }
 
-                    fonts.insert({font->typeface()->GetFontPath(), std::move(locale),
+                    fonts.insert({font->baseTypeface()->GetFontPath(), std::move(locale),
                                   font->style().weight(),
                                   font->style().slant() == minikin::FontStyle::Slant::ITALIC,
-                                  static_cast<uint32_t>(font->typeface()->GetFontIndex()), axes});
+                                  static_cast<uint32_t>(font->baseTypeface()->GetFontIndex()),
+                                  axes});
                 }
             });
 
@@ -323,7 +324,7 @@
                     .font;
     std::unique_ptr<AFont> result = std::make_unique<AFont>();
     const android::MinikinFontSkia* minikinFontSkia =
-            reinterpret_cast<android::MinikinFontSkia*>(font->typeface().get());
+            reinterpret_cast<android::MinikinFontSkia*>(font->baseTypeface().get());
     result->mFilePath = minikinFontSkia->getFilePath();
     result->mWeight = font->style().weight();
     result->mItalic = font->style().slant() == minikin::FontStyle::Slant::ITALIC;
diff --git a/native/android/tests/performance_hint/PerformanceHintNativeTest.cpp b/native/android/tests/performance_hint/PerformanceHintNativeTest.cpp
index 791adfd..6f7562b 100644
--- a/native/android/tests/performance_hint/PerformanceHintNativeTest.cpp
+++ b/native/android/tests/performance_hint/PerformanceHintNativeTest.cpp
@@ -178,4 +178,15 @@
             .WillOnce(Return(Status()));
     result = APerformanceHint_setThreads(session, newTids.data(), newTids.size());
     EXPECT_EQ(0, result);
+
+    testing::Mock::VerifyAndClearExpectations(mMockIHintManager);
+    std::vector<int32_t> invalidTids;
+    auto status = Status::fromExceptionCode(binder::Status::Exception::EX_SECURITY);
+    invalidTids.push_back(4);
+    invalidTids.push_back(6);
+    EXPECT_CALL(*mMockIHintManager, setHintSessionThreads(_, Eq(invalidTids)))
+            .Times(Exactly(1))
+            .WillOnce(Return(status));
+    result = APerformanceHint_setThreads(session, invalidTids.data(), invalidTids.size());
+    EXPECT_EQ(EPERM, result);
 }
diff --git a/packages/BackupRestoreConfirmation/res/values-zh-rHK/strings.xml b/packages/BackupRestoreConfirmation/res/values-zh-rHK/strings.xml
index d3bcd6e..f25c9af 100644
--- a/packages/BackupRestoreConfirmation/res/values-zh-rHK/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-zh-rHK/strings.xml
@@ -18,17 +18,17 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="backup_confirm_title" msgid="827563724209303345">"完整備份"</string>
     <string name="restore_confirm_title" msgid="5469365809567486602">"完整還原"</string>
-    <string name="backup_confirm_text" msgid="1878021282758896593">"系統收到將所有資料完整備份到連線桌上電腦的要求,請問您允許進行備份嗎?\n\n如果您本人並未提出備份要求,請勿允許繼續進行這項作業。"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"系統收到將所有資料完整備份到連線桌上電腦的要求,請問你允許進行備份嗎?\n\n如果你本人並未提出備份要求,請勿允許繼續進行這項作業。"</string>
     <string name="allow_backup_button_label" msgid="4217228747769644068">"備份我的資料"</string>
     <string name="deny_backup_button_label" msgid="6009119115581097708">"不要備份"</string>
-    <string name="restore_confirm_text" msgid="7499866728030461776">"系統收到從連線的桌上電腦完整還原所有資料的要求,請問您允許進行還原嗎?\n\n如果您本人並未提出還原要求,請勿允許繼續進行這項作業。這項作業將取代裝置上現有的全部資料!"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"系統收到從連線的桌上電腦完整還原所有資料的要求,請問你允許進行還原嗎?\n\n如果你本人並未提出還原要求,請勿允許繼續進行這項作業。這項作業將取代裝置上現有的全部資料!"</string>
     <string name="allow_restore_button_label" msgid="3081286752277127827">"還原我的資料"</string>
     <string name="deny_restore_button_label" msgid="1724367334453104378">"不要還原"</string>
-    <string name="current_password_text" msgid="8268189555578298067">"在下面輸入您目前的備份密碼:"</string>
-    <string name="device_encryption_restore_text" msgid="1570864916855208992">"請在下面輸入您的裝置加密密碼。"</string>
-    <string name="device_encryption_backup_text" msgid="5866590762672844664">"請在下面輸入您的裝置加密密碼,這也會用來將封存備份加密。"</string>
-    <string name="backup_enc_password_text" msgid="4981585714795233099">"請輸入為完整備份資料加密的專用密碼。如果留空,系統將使用您目前的備份密碼:"</string>
-    <string name="backup_enc_password_optional" msgid="1350137345907579306">"如果您想將完整的備份資料加密,請在下面輸入一組密碼:"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"在下面輸入你目前的備份密碼:"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"請在下面輸入你的裝置加密密碼。"</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"請在下面輸入你的裝置加密密碼,這也會用來將封存備份加密。"</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"請輸入為完整備份資料加密的專用密碼。如果留空,系統將使用你目前的備份密碼:"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"如果你想將完整的備份資料加密,請在下面輸入一組密碼:"</string>
     <string name="restore_enc_password_text" msgid="6140898525580710823">"如果還原的資料經過加密處理,請在下面輸入密碼:"</string>
     <string name="toast_backup_started" msgid="550354281452756121">"正在開始備份..."</string>
     <string name="toast_backup_ended" msgid="3818080769548726424">"備份完畢"</string>
diff --git a/packages/CarrierDefaultApp/res/values-ja/strings.xml b/packages/CarrierDefaultApp/res/values-ja/strings.xml
index 2bcdaac..f5d85d5 100644
--- a/packages/CarrierDefaultApp/res/values-ja/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ja/strings.xml
@@ -16,7 +16,7 @@
     <string name="ssl_error_continue" msgid="1138548463994095584">"ブラウザから続行"</string>
     <string name="performance_boost_notification_channel" msgid="3475440855635538592">"パフォーマンス ブースト"</string>
     <string name="performance_boost_notification_title" msgid="3126203390685781861">"ご利用の携帯通信会社の 5G オプション"</string>
-    <string name="performance_boost_notification_detail" msgid="216569851036236346">"アプリのパフォーマンスを向上させるためのオプションを確認するには、%s のウェブサイトにアクセスしてください"</string>
+    <string name="performance_boost_notification_detail" msgid="216569851036236346">"アプリの性能を向上させるためのオプションは、%s のウェブサイトにアクセスして確認してください"</string>
     <string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"後で"</string>
     <string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"管理"</string>
     <string name="slice_purchase_app_label" msgid="7170191659233241166">"パフォーマンス ブーストを購入してください。"</string>
diff --git a/packages/CarrierDefaultApp/res/values-mr/strings.xml b/packages/CarrierDefaultApp/res/values-mr/strings.xml
index 4123045..2a6b9d9 100644
--- a/packages/CarrierDefaultApp/res/values-mr/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-mr/strings.xml
@@ -12,7 +12,7 @@
     <string name="mobile_data_status_notification_channel_name" msgid="833999690121305708">"मोबाइल डेटा स्थिती"</string>
     <string name="action_bar_label" msgid="4290345990334377177">"मोबाइल नेटवर्कमध्ये साइन इन करा"</string>
     <string name="ssl_error_warning" msgid="3127935140338254180">"तुम्ही ज्या नेटवर्कमध्‍ये सामील होण्याचा प्रयत्न करत आहात त्यात सुरक्षितता समस्या आहेत."</string>
-    <string name="ssl_error_example" msgid="6188711843183058764">"उदाहरणार्थ, लॉग इन पृष्‍ठ दर्शवलेल्या संस्थेच्या मालकीचे नसू शकते."</string>
+    <string name="ssl_error_example" msgid="6188711843183058764">"उदाहरणार्थ, लॉग इन पेज कदाचित दर्शवलेल्या संस्थेशी संबंधित नसेल."</string>
     <string name="ssl_error_continue" msgid="1138548463994095584">"तरीही ब्राउझरद्वारे सुरू ठेवा"</string>
     <string name="performance_boost_notification_channel" msgid="3475440855635538592">"परफॉर्मन्स बूस्ट"</string>
     <string name="performance_boost_notification_title" msgid="3126203390685781861">"तुमच्या वाहकाकडून 5G पर्याय"</string>
diff --git a/packages/CarrierDefaultApp/res/values-ur/strings.xml b/packages/CarrierDefaultApp/res/values-ur/strings.xml
index 0c7cdc5..d6225c2 100644
--- a/packages/CarrierDefaultApp/res/values-ur/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-ur/strings.xml
@@ -16,9 +16,7 @@
     <string name="ssl_error_continue" msgid="1138548463994095584">"براؤزر کے ذریعے بہرحال جاری رکھیں"</string>
     <string name="performance_boost_notification_channel" msgid="3475440855635538592">"پرفارمینس بوسٹ"</string>
     <string name="performance_boost_notification_title" msgid="3126203390685781861">"‏آپ کے کیریئر سے 5G کے اختیارات"</string>
-    <!-- String.format failed for translation -->
-    <!-- no translation found for performance_boost_notification_detail (216569851036236346) -->
-    <skip />
+    <string name="performance_boost_notification_detail" msgid="216569851036236346">"‏اپنی ایپ کے تجربے کے اختیارات دیکھنے کے لیے %s کی ویب سائٹ ملاحظہ کریں"</string>
     <string name="performance_boost_notification_button_not_now" msgid="6459755324243683785">"ابھی نہیں"</string>
     <string name="performance_boost_notification_button_manage" msgid="4976836444046497973">"نظم کریں"</string>
     <string name="slice_purchase_app_label" msgid="7170191659233241166">"پرفارمینس بوسٹ خریدیں۔"</string>
diff --git a/packages/CarrierDefaultApp/res/values-zh-rHK/strings.xml b/packages/CarrierDefaultApp/res/values-zh-rHK/strings.xml
index 0578256..f2f91fd 100644
--- a/packages/CarrierDefaultApp/res/values-zh-rHK/strings.xml
+++ b/packages/CarrierDefaultApp/res/values-zh-rHK/strings.xml
@@ -4,14 +4,14 @@
     <string name="app_name" msgid="2809080280462257271">"流動網絡供應商通訊"</string>
     <string name="android_system_label" msgid="2797790869522345065">"流動網絡供應商"</string>
     <string name="portal_notification_id" msgid="5155057562457079297">"流動數據量已用盡"</string>
-    <string name="no_data_notification_id" msgid="668400731803969521">"您的流動數據已停用"</string>
+    <string name="no_data_notification_id" msgid="668400731803969521">"你的流動數據已停用"</string>
     <string name="portal_notification_detail" msgid="2295729385924660881">"輕按即可瀏覽 %s 網站"</string>
-    <string name="no_data_notification_detail" msgid="3112125343857014825">"請與您的服務供應商 (%s) 聯絡"</string>
+    <string name="no_data_notification_detail" msgid="3112125343857014825">"請與你的服務供應商 (%s) 聯絡"</string>
     <string name="no_mobile_data_connection_title" msgid="7449525772416200578">"沒有流動數據連線"</string>
     <string name="no_mobile_data_connection" msgid="544980465184147010">"透過「%s」新增數據或漫遊計劃"</string>
     <string name="mobile_data_status_notification_channel_name" msgid="833999690121305708">"流動數據狀態"</string>
     <string name="action_bar_label" msgid="4290345990334377177">"登入流動網絡"</string>
-    <string name="ssl_error_warning" msgid="3127935140338254180">"您正在嘗試加入的網絡有安全性問題。"</string>
+    <string name="ssl_error_warning" msgid="3127935140338254180">"你正在嘗試加入的網絡有安全性問題。"</string>
     <string name="ssl_error_example" msgid="6188711843183058764">"例如,登入頁面可能並不屬於所顯示的機構。"</string>
     <string name="ssl_error_continue" msgid="1138548463994095584">"仍要透過瀏覽器繼續操作"</string>
     <string name="performance_boost_notification_channel" msgid="3475440855635538592">"效能提升服務"</string>
diff --git a/packages/CompanionDeviceManager/res/values-af/strings.xml b/packages/CompanionDeviceManager/res/values-af/strings.xml
index 7a5b564..6c54f70 100644
--- a/packages/CompanionDeviceManager/res/values-af/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-af/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Metgeseltoestel-bestuurder"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Gee &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; toegang tot &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Gee die app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; toegang tot &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"horlosie"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Kies \'n <xliff:g id="PROFILE_NAME">%1$s</xliff:g> om deur &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; bestuur te word"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Hierdie app is nodig om jou <xliff:g id="DEVICE_NAME">%1$s</xliff:g> te bestuur. <xliff:g id="APP_NAME">%2$s</xliff:g> sal toegelaat word om inligting te sinkroniseer, soos die naam van iemand wat bel, interaksie met jou kennisgewings te hê, en sal toegang tot jou Foon-, SMS-, Kontakte-, Kalender-, Oproeprekords-, en Toestelle in die Omtrek-toestemmings hê."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Hierdie app sal toegelaat word om inligting te sinkroniseer, soos die naam van iemand wat bel, en sal toegang tot hierdie toestemmings op jou <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> hê"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Kies ’n toestel wat &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; moet bestuur"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Kies ’n <xliff:g id="PROFILE_NAME">%1$s</xliff:g> om op te stel"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Hierdie app sal toegelaat word om inligting te sinkroniseer, soos die naam van iemand wat bel, en sal toegang tot hierdie toestemmings op jou <xliff:g id="DEVICE_NAME">%1$s</xliff:g> hê"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Laat &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; toe om &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; te bestuur?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"bril"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Hierdie app is nodig om <xliff:g id="DEVICE_NAME">%1$s</xliff:g> te bestuur. <xliff:g id="APP_NAME">%2$s</xliff:g> sal toegelaat word om interaksie met jou kennisgewings te hê en sal toegang tot jou Foon-, SMS-, Kontakte-, Mikrofoon-, en Toestelle in die Omtrek-toestemmings hê."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Hierdie app sal toegang tot hierdie toestemmings op jou <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> hê"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"toestel"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Hierdie app sal toegang tot hierdie toestemmings op jou <xliff:g id="DEVICE_NAME">%1$s</xliff:g> hê"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Gee &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; toegang tot hierdie inligting op jou foon"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Oorkruistoestel-dienste"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> versoek tans namens jou <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> toestemming om apps tussen jou toestelle te stroom"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Laat &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; toe om hierdie handeling uit te voer?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> versoek tans namens jou <xliff:g id="DEVICE_NAME">%2$s</xliff:g> toestemming om apps en ander stelselkenmerke na toestelle in die omtrek te stroom"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"toestel"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Hierdie app sal inligting kan sinkroniseer, soos die naam van iemand wat bel, tussen jou foon en <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Hierdie app sal inligting kan sinkroniseer, soos die naam van iemand wat bel, tussen jou foon en die gekose toestel"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Laat toe"</string>
     <string name="consent_no" msgid="2640796915611404382">"Moenie toelaat nie"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Kanselleer"</string>
     <string name="consent_back" msgid="2560683030046918882">"Terug"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Vou <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> uit"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Vou <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> in"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Gee programme op &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; dieselfde toestemmings as op &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Dit kan &lt;strong&gt;Mikrofoon-&lt;/strong&gt;, &lt;strong&gt;Kamera-&lt;/strong&gt;, &lt;strong&gt;Liggingtoegang-&lt;/strong&gt; en ander sensitiewe toestemmings op &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; insluit. &lt;br/&gt;&lt;br/&gt;Jy kan hierdie toestemmings enige tyd in jou Instellings op &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; verander."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Program-ikoon"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Meer Inligting-knoppie"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Meer inligting"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Foon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontakte"</string>
diff --git a/packages/CompanionDeviceManager/res/values-am/strings.xml b/packages/CompanionDeviceManager/res/values-am/strings.xml
index 09a4de1..d9ddf71 100644
--- a/packages/CompanionDeviceManager/res/values-am/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-am/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"አጃቢ የመሣሪያ አስተዳዳሪ"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;ን እንዲደርስ ይፈቀድለት?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"መተግበሪያው &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;ን እንዲደርስ ይፈቀድለት?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ሰዓት"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"በ&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; የሚተዳደር <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ይምረጡ"</string>
-    <string name="summary_watch" msgid="898569637110705523">"የእርስዎን <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ለማስተዳደር ይህ መተግበሪያ ያስፈልጋል። <xliff:g id="APP_NAME">%2$s</xliff:g> እንደ የሚደውል ሰው ስም፣ ከማሳወቂያዎችዎ ጋር መስተጋብር እንዲፈጥር እና የእርስዎን ስልክ፣ ኤስኤምኤስ፣ ዕውቅያዎች፣ የቀን መቁጠሪያ፣ የጥሪ ምዝግብ ማስታወሻዎች እና በአቅራቢያ ያሉ መሣሪያዎችን መድረስ ያሉ መረጃዎችን እንዲያሰምር ይፈቀድለታል።"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"ይህ መተግበሪያ እንደ የሚደውል ሰው ስም ያለ መረጃን እንዲያሰምር እና እነዚህን ፈቃዶች በእርስዎ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ላይ እንዲደርስ ይፈቀድለታል"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; የሚያስተዳድረው መሣሪያ ይምረጡ"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"የሚያዋቅሩት <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ይምረጡ"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"ይህ መተግበሪያ እንደ የሚደውል ሰው ስም ያለ መረጃን እንዲያሰምር እና እነዚህን ፈቃዶች በእርስዎ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ላይ እንዲደርስ ይፈቀድለታል"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;ን እንዲያስተዳድር ይፈቅዳሉ?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"መነጽሮች"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"ይህ መተግበሪያ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ን ለማስተዳደር ያስፈልጋል። <xliff:g id="APP_NAME">%2$s</xliff:g> ከማሳወቂያዎችዎ ጋር መስተጋብር እንዲፈጥር እና የእርስዎን ስልክ፣ ኤስኤምኤስ፣ ዕውቂያዎች፣ ማይክሮፎን እና በአቅራቢያ ያሉ መሣሪያዎች ፈቃዶችን እንዲደርስ ይፈቀድለታል።"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"ይህ መተግበሪያ በእርስዎ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ላይ እነዚህን ፈቃዶች እንዲደርስ ይፈቀድለታል"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"መሣሪያ"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"ይህ መተግበሪያ በእርስዎ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ላይ እነዚህን ፈቃዶች እንዲደርስ ይፈቀድለታል"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ይህን መረጃ ከስልክዎ እንዲደርስበት ይፍቀዱለት"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"መሣሪያ ተሻጋሪ አገልግሎቶች"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> በእርስዎ መሣሪያዎች መካከል መተግበሪያዎችን በዥረት ለመልቀቅ የእርስዎን <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ወክሎ ፈቃድ እየጠየቀ ነው"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ይህን እርምጃ እንዲወስድ ፈቃድ ይሰጠው?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> የእርስዎን <xliff:g id="DEVICE_NAME">%2$s</xliff:g> በመወከል በአቅራቢያ ላሉ መሣሪያዎች መተግበሪያዎች እና ሌሎች የስርዓት ባህሪያትን በዥረት ለመልቀቅ ፈቃድ እየጠየቀ ነው"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"መሣሪያ"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"ይህ መተግበሪያ እንደ የሚደውል ሰው ስም ያለ መረጃን በስልክዎ እና <xliff:g id="DEVICE_NAME">%1$s</xliff:g> መካከል ማስመር ይችላል"</string>
     <string name="summary_generic" msgid="1761976003668044801">"ይህ መተግበሪያ እንደ የሚደውል ሰው ስም ያለ መረጃን በስልክዎ እና በተመረጠው መሣሪያ መካከል ማስመር ይችላል"</string>
     <string name="consent_yes" msgid="8344487259618762872">"ፍቀድ"</string>
     <string name="consent_no" msgid="2640796915611404382">"አትፍቀድ"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"ይቅር"</string>
     <string name="consent_back" msgid="2560683030046918882">"ተመለስ"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>ን ዘርጋ"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>ን ሰብስብ"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"በ&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ላይ ላሉ መተግበሪያዎች በ&lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ላይ ካሉት ጋር ተመሳሳይ ፈቃዶች ይሰጣቸው?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"ይህ &lt;strong&gt;ማይክሮፎን&lt;/strong&gt;፣ &lt;strong&gt;ካሜራ&lt;/strong&gt; እና &lt;strong&gt;የአካባቢ መዳረሻ&lt;/strong&gt; እና ሌሎች አደገኛ ፈቃዶችን &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; ላይ ሊያካትት ይችላል። &lt;br/&gt;&lt;br/&gt;እነዚህን ቅንብሮች በማንኛውም ጊዜ ቅንብሮችዎ ውስጥ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; ላይ መቀየር ይችላሉ።"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"የመተግበሪያ አዶ"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"የተጨማሪ መረጃ አዝራር"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"ተጨማሪ መረጃ"</string>
     <string name="permission_phone" msgid="2661081078692784919">"ስልክ"</string>
     <string name="permission_sms" msgid="6337141296535774786">"ኤስኤምኤስ"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"ዕውቂያዎች"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ar/strings.xml b/packages/CompanionDeviceManager/res/values-ar/strings.xml
index 5a854e2..8a6f227 100644
--- a/packages/CompanionDeviceManager/res/values-ar/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ar/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"تطبيق \"مدير الجهاز المصاحب\""</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"‏هل تريد السماح لتطبيق &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; بالوصول إلى &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;؟"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"‏هل تريد السماح لـ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; بالوصول إلى &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;؟"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"الساعة"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"‏اختَر <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ليديرها تطبيق &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"هذا التطبيق مطلوب لإدارة \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". سيتم السماح لتطبيق \"<xliff:g id="APP_NAME">%2$s</xliff:g>\" بمزامنة المعلومات، مثلاً اسم المتصل، والتفاعل مع الإشعارات والوصول إلى هاتفك، والرسائل القصيرة، وجهات الاتصال، والتقويم، وسجلات المكالمات وأذونات الأجهزة المجاورة."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"سيتم السماح لهذا التطبيق بمزامنة المعلومات، مثلاً اسم المتصل، والوصول إلى الأذونات التالية على <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"‏اختيار جهاز ليديره تطبيق &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"اختيار \"<xliff:g id="PROFILE_NAME">%1$s</xliff:g>\" لإعداده"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"سيتم السماح لهذا التطبيق بمزامنة المعلومات، مثلاً اسم المتصل، والوصول إلى هذه الأذونات على \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"."</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"‏السماح لتطبيق &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; بإدارة &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"النظارة"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"يجب توفّر هذا التطبيق لإدارة \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". سيتم السماح لتطبيق \"<xliff:g id="APP_NAME">%2$s</xliff:g>\" بالتفاعل مع الإشعارات والوصول إلى أذونات الهاتف والرسائل القصيرة وجهات الاتصال والميكروفون والأجهزة المجاورة."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"سيتم السماح لهذا التطبيق بالوصول إلى الأذونات التالية على <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"جهاز"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"سيتم السماح لهذا التطبيق بالوصول إلى هذه الأذونات على \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"."</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"‏السماح لتطبيق &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; بالوصول إلى هذه المعلومات من هاتفك"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"الخدمات التي تعمل بين الأجهزة"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"يطلب تطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" الحصول على إذن نيابةً عن \"<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>\" لبثّ محتوى التطبيقات بين أجهزتك."</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"‏هل تريد السماح للتطبيق &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; باتّخاذ هذا الإجراء؟"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"يطلب \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" الحصول على إذن نيابةً عن \"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>\" لبثّ التطبيقات وميزات النظام الأخرى إلى أجهزتك المجاورة."</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"جهاز"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"سيتمكّن هذا التطبيق من مزامنة المعلومات، مثل اسم المتصل، بين هاتفك و\"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"."</string>
     <string name="summary_generic" msgid="1761976003668044801">"سيتمكّن هذا التطبيق من مزامنة المعلومات، مثل اسم المتصل، بين هاتفك والجهاز المحدّد."</string>
     <string name="consent_yes" msgid="8344487259618762872">"السماح"</string>
     <string name="consent_no" msgid="2640796915611404382">"عدم السماح"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"إلغاء"</string>
     <string name="consent_back" msgid="2560683030046918882">"رجوع"</string>
+    <string name="permission_expand" msgid="893185038020887411">"توسيع <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"تصغير <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"‏هل تريد منح التطبيقات على &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; نفس الأذونات على &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;؟"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"‏قد يتضمّن هذا الوصول إلى &lt;strong&gt;الميكروفون&lt;/strong&gt; و&lt;strong&gt;الكاميرا&lt;/strong&gt; و&lt;strong&gt;الموقع الجغرافي&lt;/strong&gt; وأذونات الوصول إلى المعلومات الحساسة الأخرى في &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;يمكنك تغيير هذه الأذونات في أي وقت في إعداداتك على &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"رمز التطبيق"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"زر مزيد من المعلومات"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"مزيد من المعلومات"</string>
     <string name="permission_phone" msgid="2661081078692784919">"الهاتف"</string>
     <string name="permission_sms" msgid="6337141296535774786">"الرسائل القصيرة"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"جهات الاتصال"</string>
diff --git a/packages/CompanionDeviceManager/res/values-as/strings.xml b/packages/CompanionDeviceManager/res/values-as/strings.xml
index 4c08891..28a06e6 100644
--- a/packages/CompanionDeviceManager/res/values-as/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-as/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"কম্পেনিয়ন ডিভাইচ মেনেজাৰ"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;ক &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; এক্সেছ কৰিবলৈ দিবনে?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; এপ্‌টোক &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; এক্সেছ কৰিবলৈ দিবনে?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ঘড়ী"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;এ পৰিচালনা কৰিব লগা এটা <xliff:g id="PROFILE_NAME">%1$s</xliff:g> বাছনি কৰক"</string>
-    <string name="summary_watch" msgid="898569637110705523">"আপোনাৰ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> পৰিচালনা কৰিবলৈ এই এপ্‌টোৰ আৱশ্যক। <xliff:g id="APP_NAME">%2$s</xliff:g>ক কল কৰোঁতাৰ নামৰ দৰে তথ্য ছিংক কৰিবলৈ, আপোনাৰ জাননীৰ সৈতে ভাব-বিনিময় কৰিবলৈ আৰু আপোনাৰ ফ’ন, এছএমএছ, সম্পৰ্ক, কেলেণ্ডাৰ, কল লগ আৰু নিকটৱৰ্তী ডিভাইচৰ অনুমতি এক্সেছ কৰিবলৈ দিয়া হ’ব।"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"এই এপ্‌টোক ফ’ন কৰা লোকৰ নামৰ দৰে তথ্য ছিংক কৰিবলৈ আৰু আপোনাৰ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ত এই অনুমতিসমূহ এক্সেছ কৰিবলৈ অনুমতি দিয়া হ’ব"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;এ পৰিচালনা কৰিবলগীয়া এটা ডিভাইচ বাছনি কৰক"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"ছেট আপ কৰিবলৈ এটা <xliff:g id="PROFILE_NAME">%1$s</xliff:g> বাছনি কৰক"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"এই এপ্‌টোক ফ’ন কৰা লোকৰ নামৰ দৰে তথ্য ছিংক কৰিবলৈ আৰু আপোনাৰ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ত এই অনুমতিসমূহ এক্সেছ কৰিবলৈ অনুমতি দিয়া হ’ব"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;ক &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; পৰিচালনা কৰিবলৈ দিবনে?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"চছ্‌মা"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> পৰিচালনা কৰিবলৈ এই এপ্‌টোৰ আৱশ্যক। <xliff:g id="APP_NAME">%2$s</xliff:g>ক আপোনাৰ অনুমতিসমূহৰ সৈতে ভাব-বিনিময় কৰিবলৈ আৰু আপোনাৰ ফ’ন, এছএমএছ, সম্পৰ্ক, মাইক্ৰ’ফ’ন আৰু নিকটৱৰ্তী ডিভাইচৰ অনুমতিসমূহ এক্সেছ কৰিবলৈ দিয়া হ’ব।"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"এই এপ্‌টোক আপোনাৰ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ত এই অনুমতিসমূহ এক্সেছ কৰিবলৈ অনুমতি দিয়া হ’ব"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"ডিভাইচ"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"এই এপ্‌টোক আপোনাৰ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ত এই অনুমতিসমূহ এক্সেছ কৰিবলৈ অনুমতি দিয়া হ’ব"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;ক আপোনাৰ ফ’নৰ পৰা এই তথ্যখিনি এক্সেছ কৰাৰ অনুমতি দিয়ক"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"ক্ৰছ-ডিভাইচ সেৱাসমূহ"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ আপোনাৰ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>ৰ হৈ আপোনাৰ ডিভাইচসমূহৰ মাজত এপ্‌ ষ্ট্ৰীম কৰাৰ বাবে অনুৰোধ জনাইছে"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;ক এই কাৰ্যটো সম্পাদন কৰিবলৈ দিবনে?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ আপোনাৰ <xliff:g id="DEVICE_NAME">%2$s</xliff:g>ৰ হৈ নিকটৱৰ্তী ডিভাইচত এপ্‌ আৰু ছিষ্টেমৰ অন্য সুবিধাসমূহ ষ্ট্ৰীম কৰাৰ অনুমতি দিবলৈ অনুৰোধ জনাইছে"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ডিভাইচ"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"এই এপ্‌টোৱে আপোনাৰ ফ’ন আৰু বাছনি কৰা <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ৰ মাজত কল কৰোঁতাৰ নামৰ দৰে তথ্য ছিংক কৰিব পাৰিব"</string>
     <string name="summary_generic" msgid="1761976003668044801">"এই এপ্‌টোৱে আপোনাৰ ফ’ন আৰু বাছনি কৰা ডিভাইচটোৰ মাজত কল কৰোঁতাৰ নামৰ দৰে তথ্য ছিংক কৰিব পাৰিব"</string>
     <string name="consent_yes" msgid="8344487259618762872">"অনুমতি দিয়ক"</string>
     <string name="consent_no" msgid="2640796915611404382">"অনুমতি নিদিব"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"বাতিল কৰক"</string>
     <string name="consent_back" msgid="2560683030046918882">"উভতি যাওক"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> বিস্তাৰ কৰক"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> সংকোচন কৰক"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"এপ্‌সমূহক &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;ত দিয়াৰ দৰে &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;তো একে অনুমতি প্ৰদান কৰিবনে?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"এইটোত &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;ৰ &lt;strong&gt;মাইক্ৰ’ফ’ন&lt;/strong&gt;, &lt;strong&gt;কেমেৰা&lt;/strong&gt;, আৰু &lt;strong&gt;অৱস্থানৰ এক্সেছ&lt;/strong&gt;, আৰু অন্য সংবেদনশীল অনুমতিসমূহ অন্তৰ্ভুক্ত হ’ব পাৰে। &lt;br/&gt;&lt;br/&gt;আপুনি যিকোনো সময়তে &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;ত থকা আপোনাৰ ছেটিঙত এই অনুমতিসমূহ সলনি কৰিব পাৰে।"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"এপৰ চিহ্ন"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"অধিক তথ্যৰ বুটাম"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"অধিক তথ্য"</string>
     <string name="permission_phone" msgid="2661081078692784919">"ফ’ন"</string>
     <string name="permission_sms" msgid="6337141296535774786">"এছএমএছ"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"সম্পৰ্ক"</string>
diff --git a/packages/CompanionDeviceManager/res/values-az/strings.xml b/packages/CompanionDeviceManager/res/values-az/strings.xml
index 56fad60..18ac2ae 100644
--- a/packages/CompanionDeviceManager/res/values-az/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-az/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Kompanyon Cihaz Meneceri"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; tətbiqinə &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; cihazına daxil olmaq icazəsi verilsin?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; tətbiqinə &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; cihazına daxil olmaq icazəsi verilsin?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"izləyin"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; tərəfindən idarə ediləcək <xliff:g id="PROFILE_NAME">%1$s</xliff:g> seçin"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Tətbiq <xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazını idarə etmək üçün lazımdır. <xliff:g id="APP_NAME">%2$s</xliff:g> zəng edənin adı kimi məlumatları sinxronlaşdıracaq, bildirişlərə giriş edəcək, habelə Telefon, SMS, Kontaktlar, Təqvim, Zəng qeydləri və Yaxınlıqdakı cihazlar üzrə icazələrə daxil olacaq."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Bu tətbiq zəng edənin adı kimi məlumatları sinxronlaşdıra, <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> bu icazələrə daxil ola biləcək"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; tərəfindən idarə ediləcək cihaz seçin"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Ayarlamaq üçün <xliff:g id="PROFILE_NAME">%1$s</xliff:g> seçin"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Bu tətbiq zəng edənin adı kimi məlumatları sinxronlaşdıra, <xliff:g id="DEVICE_NAME">%1$s</xliff:g> bu icazələrə daxil ola biləcək"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; tətbiqinə &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; cihazını idarə etmək icazəsi verilsin?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"eynək"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Bu tətbiq <xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazını idarə etmək üçün lazımdır. <xliff:g id="APP_NAME">%2$s</xliff:g> bildirişlərə, Telefon, SMS, Kontaktlar, Mikrofon və Yaxınlıqdakı cihazlar icazələrinə giriş əldə edəcək."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Bu tətbiq <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> bu icazələrə daxil ola biləcək"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"cihazda"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Bu tətbiq <xliff:g id="DEVICE_NAME">%1$s</xliff:g> bu icazələrə daxil ola biləcək"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; tətbiqinə telefonunuzdan bu məlumata giriş icazəsi verin"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Cihazlararası xidmətlər"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> adından cihazlar arasında tətbiqləri yayımlamaq icazəsi istəyir"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; cihazına bu əməliyyatı yerinə yetirmək icazəsi verilsin?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="DEVICE_NAME">%2$s</xliff:g> adından tətbiq və digər sistem funksiyalarını yaxınlıqdakı cihazlara yayımlamaq icazəsi sitəyir"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"cihaz"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Tətbiq zəng edənin adı kimi məlumatları telefon ilə <xliff:g id="DEVICE_NAME">%1$s</xliff:g> arasında sinxronlaşdıracaq"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Tətbiq zəng edənin adı kimi məlumatları telefon ilə seçilmiş cihaz arasında sinxronlaşdıracaq"</string>
     <string name="consent_yes" msgid="8344487259618762872">"İcazə verin"</string>
     <string name="consent_no" msgid="2640796915611404382">"İcazə verməyin"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Ləğv edin"</string>
     <string name="consent_back" msgid="2560683030046918882">"Geriyə"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Genişləndirin: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Yığcamlaşdırın: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; cihazındakı tətbiqlərə &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; cihazındakılarla eyni icazələr verilsin?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Buraya &lt;strong&gt;Mikrofon&lt;/strong&gt;, &lt;strong&gt;Kamera&lt;/strong&gt; və &lt;strong&gt;Məkana giriş&lt;/strong&gt;, eləcə də &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; cihazında digər həssas icazələr daxil ola bilər. Bu icazələri istənilən vaxt &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; cihazında ayarlarınızda dəyişə bilərsiniz.&lt;/p&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Tətbiq İkonası"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Ətraflı Məlumat Düyməsi"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Ətraflı məlumat"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontakt"</string>
diff --git a/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml b/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
index 457abf9..b37ab4b9 100644
--- a/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Menadžer pridruženog uređaja"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Dozvolite da &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; pristupa uređaju &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Dozvolite da aplikacija &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; pristupa uređaju &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"sat"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Odaberite <xliff:g id="PROFILE_NAME">%1$s</xliff:g> kojim će upravljati aplikacija &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Ova aplikacija je potrebna za upravljanje uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> će dobiti dozvolu za sinhronizovanje informacija, poput osobe koja upućuje poziv, za interakciju sa obaveštenjima i pristup dozvolama za telefon, SMS, kontakte, kalendar, evidencije poziva i uređaje u blizini."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Ovoj aplikaciji će biti dozvoljeno da sinhronizuje podatke, poput imena osobe koja upućuje poziv, i pristupa tim dozvolama na vašem uređaju (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Odaberite uređaj kojim će upravljati aplikacija &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Odaberite profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g> koji želite da podesite"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Ovoj aplikaciji će biti dozvoljeno da sinhronizuje podatke, poput imena osobe koja upućuje poziv, i pristupa tim dozvolama na vašem uređaju (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Želite li da dozvolite da &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; upravlja uređajem &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"naočare"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Ova aplikacija je potrebna za upravljanje uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> će dobiti dozvolu za interakciju sa obaveštenjima i pristup dozvolama za telefon, SMS, kontakte, mikrofon i uređaje u blizini."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Ovoj aplikaciji će biti dozvoljeno da pristupa ovim dozvolama na vašem uređaju (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"uređaj"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Ovoj aplikaciji će biti dozvoljeno da pristupa ovim dozvolama na vašem uređaju (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Dozvolite da &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; pristupa ovim informacijama sa telefona"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Usluge na više uređaja"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> zahteva dozvolu u ime uređaja <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> za strimovanje aplikacija između uređaja"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Želite li da dozvolite da &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; obavi ovu radnju?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> zahteva dozvolu u ime uređaja <xliff:g id="DEVICE_NAME">%2$s</xliff:g> da strimuje aplikacije i druge sistemske funkcije na uređaje u blizini"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"uređaj"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Ova aplikacija će moći da sinhronizuje podatke, poput imena osobe koja upućuje poziv, između telefona i uređaja <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Ova aplikacija će moći da sinhronizuje podatke, poput imena osobe koja upućuje poziv, između telefona i odabranog uređaja"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Dozvoli"</string>
     <string name="consent_no" msgid="2640796915611404382">"Ne dozvoli"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Otkaži"</string>
     <string name="consent_back" msgid="2560683030046918882">"Nazad"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Proširi <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Skupi <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Aplikcijama na uređaju &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; dajete sve dozvole kao na uređaju &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"To može da obuhvata pristup &lt;strong&gt;mikrofonu&lt;/strong&gt;, &lt;strong&gt;kameri&lt;/strong&gt;, i &lt;strong&gt;lokaciji&lt;/strong&gt;, i druge osetljive dozvole na uređaju &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Možete da promenite te dozvole u bilo kom trenutku u Podešavanjima na uređaju &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ikona aplikacije"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Dugme za više informacija"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Još informacija"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontakti"</string>
diff --git a/packages/CompanionDeviceManager/res/values-be/strings.xml b/packages/CompanionDeviceManager/res/values-be/strings.xml
index 335ec44..41889fd 100644
--- a/packages/CompanionDeviceManager/res/values-be/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-be/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Менеджар спадарожнай прылады"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Дазволіць праграме &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; доступ да прылады &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Дазволіць праграме &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; доступ да прылады &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"гадзіннік"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Выберыце прыладу (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>), якой будзе кіраваць праграма &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Гэта праграма неабходная для кіравання прыладай \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". <xliff:g id="APP_NAME">%2$s</xliff:g> зможа сінхранізаваць інфармацыю (напрыклад, імя таго, хто звоніць), узаемадзейнічаць з вашымі апавяшчэннямі, а таксама атрымае доступ да тэлефона, SMS, кантактаў, календара, журналаў выклікаў і прылад паблізу."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Гэта праграма зможа сінхранізаваць інфармацыю (напрыклад, імя таго, хто звоніць) на вашай прыладзе \"<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>\" і атрымае наступныя дазволы"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Выберыце прыладу (<xliff:g id="APP_NAME">%1$s</xliff:g>), якой будзе кіраваць праграма &lt;strong&gt;&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Выберыце імя <xliff:g id="PROFILE_NAME">%1$s</xliff:g> для наладжвання"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Гэтая праграма зможа сінхранізаваць інфармацыю (напрыклад, імя таго, хто звоніць) на вашай прыладзе \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\" і атрымае наступныя дазволы"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Дазволіць праграме &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; кіраваць прыладай &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"акуляры"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Гэта праграма неабходная для кіравання прыладай \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". <xliff:g id="APP_NAME">%2$s</xliff:g> зможа ўзаемадзейнічаць з вашымі апавяшчэннямі і атрымае доступ да тэлефона, SMS, кантактаў, мікрафона і прылад паблізу."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Гэта праграма будзе мець на вашай прыладзе \"<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>\" наступныя дазволы"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"прылада"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Гэтая праграма будзе мець на вашай прыладзе \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\" наступныя дазволы"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Дазвольце праграме &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; мець доступ да гэтай інфармацыі з вашага тэлефона"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Сэрвісы для некалькіх прылад"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Праграма \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запытвае дазвол ад імя вашай прылады \"<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>\" на трансляцыю праграм паміж вашымі прыладамі"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Дазволіць прыладзе &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; выканаць гэта дзеянне?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Праграма \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запытвае дазвол ад імя вашай прылады \"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>\" на перадачу плынню змесціва праграм і іншых функцый сістэмы на прылады паблізу"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"прылада"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Гэта праграма зможа сінхранізаваць інфармацыю (напрыклад, імя таго, хто звоніць) паміж тэлефонам і прыладай \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\""</string>
     <string name="summary_generic" msgid="1761976003668044801">"Гэта праграма зможа сінхранізаваць інфармацыю (напрыклад, імя таго, хто звоніць) паміж тэлефонам і выбранай прыладай"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Дазволіць"</string>
     <string name="consent_no" msgid="2640796915611404382">"Не дазваляць"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Скасаваць"</string>
     <string name="consent_back" msgid="2560683030046918882">"Назад"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Разгарнуць <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Згарнуць <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Даць праграмам на прыладзе &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; такія самыя дазволы, што і на прыладзе &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Праграмы змогуць атрымліваць доступ да &lt;strong&gt;мікрафона&lt;/strong&gt;, &lt;strong&gt;камеры&lt;/strong&gt; і &lt;strong&gt;даных пра месцазнаходжанне&lt;/strong&gt;, а таксама да іншай канфідэнцыяльнай інфармацыі на прыладзе &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Вы можаце ў любы час змяніць гэтыя дазволы ў Наладах на прыладзе &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Значок праграмы"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Кнопка \"Даведацца больш\""</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Дадатковая інфармацыя"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Тэлефон"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Кантакты"</string>
diff --git a/packages/CompanionDeviceManager/res/values-bg/strings.xml b/packages/CompanionDeviceManager/res/values-bg/strings.xml
index ae26942..bb53c5c 100644
--- a/packages/CompanionDeviceManager/res/values-bg/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-bg/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Да се разреши ли на &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; да осъществява достъп до устройството &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Да се разреши ли на приложението &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; да осъществява достъп до устройството &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"часовник"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Изберете устройство (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>), което да се управлява от &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Това приложение е необходимо за управление на <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> ще получи право да синхронизира различна информация, като например името на обаждащия се, да взаимодейства с известията ви и достъп до разрешенията за телефона, SMS съобщенията, контактите, календара, списъците с обажданията и устройствата в близост."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Това приложение ще получи право да синхронизира различна информация, като например името на обаждащия се, и достъп до следните разрешения за вашия <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Изберете устройство, което да се управлява от &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Изберете <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, за да го настроите"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Това приложение ще получи право да синхронизира различна информация, като например името на обаждащия се, и достъп до следните разрешения за вашия <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Разрешавате ли на &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; да управлява устройството &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"очилата"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Това приложение е необходимо за управление на <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Приложението <xliff:g id="APP_NAME">%2$s</xliff:g> ще получи право да взаимодейства с известията ви, както и достъп до разрешенията за телефона, SMS съобщенията, контактите, микрофона и устройствата в близост."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Това приложение ще има достъп до следните разрешения за вашия <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>:"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"устройство"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Това приложение ще има достъп до следните разрешения за вашето <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Разрешете на &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; да осъществява достъп до тази информация от телефона ви"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Услуги за различни устройства"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> иска разрешение от името на <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> да предава поточно приложения между устройствата ви"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Разрешавате ли на &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; да предприема това действие?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> иска разрешение от името на <xliff:g id="DEVICE_NAME">%2$s</xliff:g> да предава поточно приложения и други системни функции към устройства в близост"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"устройство"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Това приложение ще може да синхронизира различна информация, като например името на обаждащия се, между телефона ви и <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Това приложение ще може да синхронизира различна информация, като например името на обаждащия се, между телефона ви и избраното устройство"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Разрешаване"</string>
     <string name="consent_no" msgid="2640796915611404382">"Забраняване"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Отказ"</string>
     <string name="consent_back" msgid="2560683030046918882">"Назад"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Разгъване на <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Свиване на <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Искате ли да дадете на приложенията на &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; същите разрешения както на &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Това може да включва достъп до &lt;strong&gt;микрофона&lt;/strong&gt;, &lt;strong&gt;камерата&lt;/strong&gt; и &lt;strong&gt;местоположението&lt;/strong&gt;, както и други разрешения за достъп до поверителна информация на &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Имате възможност да промените тези разрешения по всяко време от настройките на &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Икона на приложението"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Бутон за още информация"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Още информация"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Телефон"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Контакти"</string>
diff --git a/packages/CompanionDeviceManager/res/values-bn/strings.xml b/packages/CompanionDeviceManager/res/values-bn/strings.xml
index 259a860..bc0af0b 100644
--- a/packages/CompanionDeviceManager/res/values-bn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-bn/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; অ্যাপকে &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; অ্যাক্সেস করার অনুমতি দেবেন?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; অ্যাক্সেস করার জন্য &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; অ্যাপকে কি অনুমতি দিতে চান?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ঘড়ি"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> বেছে নিন যেটি &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; ম্যানেজ করবে"</string>
-    <string name="summary_watch" msgid="898569637110705523">"আপনার <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ম্যানেজ করতে এই অ্যাপটি প্রয়োজন। <xliff:g id="APP_NAME">%2$s</xliff:g> অ্যাপকে কলারের নাম ও আপনার বিজ্ঞপ্তির সাথে ইন্টার‌্যাক্ট করা সংক্রান্ত তথ্য সিঙ্কের অনুমতি দেওয়া হবে এবং আপনার ফোন, এসএমএস, পরিচিতি, ক্যালেন্ডার, কল লগ এবং আশেপাশের ডিভাইস ব্যবহার করার অনুমতির মতো তথ্যে অ্যাক্সেস দেওয়া হবে।"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"এই অ্যাপকে, কল করছেন এমন কোনও ব্যক্তির নামের মতো তথ্য সিঙ্ক এবং আপনার <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>-এ এইসব অনুমতি অ্যাক্সেস করতে দেওয়া হবে"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ম্যানেজ করা যাবে এমন একটি ডিভাইস বেছে নিন"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"সেট-আপ করতে কোনও <xliff:g id="PROFILE_NAME">%1$s</xliff:g> বেছে নিন"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"এই অ্যাপকে, কল করছেন এমন কোনও ব্যক্তির নামের মতো তথ্য সিঙ্ক করতে এবং আপনার <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-এ এইসব অনুমতি অ্যাক্সেস করতে দেওয়া হবে"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"আপনি কি &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ম্যানেজ করার জন্য &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;-কে অনুমতি দেবেন?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"চশমা"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ম্যানেজ করতে এই অ্যাপ দরকার। <xliff:g id="APP_NAME">%2$s</xliff:g>-কে আপনার বিজ্ঞপ্তির সাথে ইন্টার‌্যাক্ট করার এবং ফোন, এসএমএস, পরিচিতি, মাইক্রোফোন ও আশেপাশের ডিভাইসের অনুমতি অ্যাক্সেস করতে দেওয়া হবে।"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"এই অ্যাপ আপনার <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>-এ এইসব অনুমতি অ্যাক্সেস করতে পারবে"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"ডিভাইস"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"এই অ্যাপ আপনার <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-এ এইসব অনুমতি অ্যাক্সেস করতে পারবে"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"আপনার ফোন থেকে &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; অ্যাপকে এই তথ্য অ্যাক্সেস করার অনুমতি দিন"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"ক্রস-ডিভাইস পরিষেবা"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"আপনার ডিভাইসগুলির মধ্যে অ্যাপ স্ট্রিম করার জন্য <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>-এর হয়ে অনুমতি চাইছে"</string>
@@ -35,18 +34,19 @@
     <string name="summary_computer" msgid="3798467601598297062"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play পরিষেবা"</string>
     <string name="helper_summary_computer" msgid="8774832742608187072">"আপনার ফোনের ফটো, মিডিয়া এবং তথ্য অ্যাক্সেস করার জন্য <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>-এর হয়ে অনুমতি চাইছে"</string>
-    <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;কে এই অ্যাকশন করতে দেবেন?"</string>
+    <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;-কে এই কাজটি করতে দেবেন?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"আশেপাশের ডিভাইসে অ্যাপ ও অন্যান্য সিস্টেম ফিচার স্ট্রিম করার জন্য আপনার <xliff:g id="DEVICE_NAME">%2$s</xliff:g>-এর হয়ে <xliff:g id="APP_NAME">%1$s</xliff:g> অনুমতি চেয়ে অনুরোধ করছে"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ডিভাইস"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"এই অ্যাপ, আপনার ফোন এবং <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ডিভাইসের মধ্যে তথ্য সিঙ্ক করতে পারবে, যেমন কোনও কলারের নাম"</string>
     <string name="summary_generic" msgid="1761976003668044801">"এই অ্যাপ, আপনার ফোন এবং বেছে নেওয়া ডিভাইসের মধ্যে তথ্য সিঙ্ক করতে পারবে, যেমন কোনও কলারের নাম"</string>
     <string name="consent_yes" msgid="8344487259618762872">"অনুমতি দিন"</string>
     <string name="consent_no" msgid="2640796915611404382">"অনুমতি দেবেন না"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"বাতিল করুন"</string>
     <string name="consent_back" msgid="2560683030046918882">"ফিরুন"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> বড় করুন"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> আড়াল করুন"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;-এ যে অনুমতি দেওয়া আছে &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;-এও সেই একই অনুমতি দিতে চান?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"এর মধ্যে &lt;strong&gt;মাইক্রোফোন&lt;/strong&gt;, &lt;strong&gt;ক্যামেরা&lt;/strong&gt;, ও &lt;strong&gt;লোকেশন সংক্রান্ত অ্যাক্সেস &lt;/strong&gt;, এবং &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;.-এর অন্যান্য সংবেদনশীল অনুমতি অন্তর্ভুক্ত থাকতে পারে &lt;br/&gt;&lt;br/&gt;আপনি যেকোনও সময়&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;.-এর সেটিংস থেকে এইসব অনুমতি পরিবর্তন করতে পারবেন"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"অ্যাপের আইকন"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"আরও তথ্য সংক্রান্ত বোতাম"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"আরও তথ্য"</string>
     <string name="permission_phone" msgid="2661081078692784919">"ফোন"</string>
     <string name="permission_sms" msgid="6337141296535774786">"এসএমএস"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"পরিচিতি"</string>
diff --git a/packages/CompanionDeviceManager/res/values-bs/strings.xml b/packages/CompanionDeviceManager/res/values-bs/strings.xml
index 1b6970d..538ee35 100644
--- a/packages/CompanionDeviceManager/res/values-bs/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-bs/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Prateći upravitelj uređaja"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Dozvoliti aplikaciji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; da pristupa uređaju &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Dozvoliti aplikaciji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; da pristupa uređaju &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"sat"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Odaberite uređaj \"<xliff:g id="PROFILE_NAME">%1$s</xliff:g>\" kojim će upravljati aplikacija &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Ova aplikacija je potrebna za upravljanje uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Aplikaciji <xliff:g id="APP_NAME">%2$s</xliff:g> će biti dozvoljeni sinhroniziranje informacija, kao što je ime osobe koja upućuje poziv, interakcija s obavještenjima i pristup odobrenjima za Telefon, SMS, Kontakte, Kalendar, Zapisnike poziva i Uređaje u blizini."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Aplikaciji će biti dozvoljeni sinhroniziranje informacija, kao što je ime osobe koja upućuje poziv i pristup ovim odobrenjima na uređaju <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Odaberite uređaj kojim će upravljati aplikacija &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Odaberite <xliff:g id="PROFILE_NAME">%1$s</xliff:g> da postavite"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Aplikaciji će biti dozvoljeni sinhroniziranje informacija, kao što je ime osobe koja upućuje poziv i pristup ovim odobrenjima na uređaju <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Dozvoliti aplikaciji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; da upravlja uređajem &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"naočale"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Ova aplikacija je potrebna za upravljanje uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Aplikaciji <xliff:g id="APP_NAME">%2$s</xliff:g> će biti dozvoljena interakcija s obavještenjima i pristup odobrenjima za Telefon, SMS, Kontakte, Mikrofon i Uređaje u blizini."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Aplikaciji će biti dozvoljen pristup ovim odobrenjima na uređaju <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"uređaj"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Aplikaciji će biti dozvoljen pristup ovim odobrenjima na uređaju <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Dozvolite da aplikacija &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; pristupa ovim informacijama s telefona"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Usluga na više uređaja"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> u ime uređaja <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> zahtijeva odobrenje da prenosi aplikacije između vaših uređaja"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Dozvoliti uređaju &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; da poduzme ovu radnju?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> u ime uređaja <xliff:g id="DEVICE_NAME">%2$s</xliff:g> traži odobrenje da prenosi aplikacije i druge funkcije sistema na uređajima u blizini"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"uređaj"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Ova aplikacija će moći sinhronizirati informacije, kao što je ime osobe koja upućuje poziv, između vašeg telefona i uređaja <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Ova aplikacija će moći sinhronizirati informacije, kao što je ime osobe koja upućuje poziv, između vašeg telefona i odabranog uređaja"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Dozvoli"</string>
     <string name="consent_no" msgid="2640796915611404382">"Nemoj dozvoliti"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Otkaži"</string>
     <string name="consent_back" msgid="2560683030046918882">"Nazad"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Proširivanje stavke <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Sužavanje stavke <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Dati aplikacijama na uređaju &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ista odobrenja kao na uređaju &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Ovo može uključivati odobrenja za pristup &lt;strong&gt;mikrofonu&lt;/strong&gt;, &lt;strong&gt;kameri&lt;/strong&gt; i &lt;strong&gt;lokaciji&lt;/strong&gt; te druga osjetljiva odobrenja na uređaju &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Ova odobrenja možete bilo kada promijeniti u Postavkama na uređaju &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ikona aplikacije"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Dugme Više informacija"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Više informacija"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontakti"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ca/strings.xml b/packages/CompanionDeviceManager/res/values-ca/strings.xml
index 6b9238f..b6f182d 100644
--- a/packages/CompanionDeviceManager/res/values-ca/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ca/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Gestor de dispositius complementaris"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Permet que &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; accedeixi a &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Vols permetre que l\'aplicació &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; accedeixi a &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"rellotge"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Tria un <xliff:g id="PROFILE_NAME">%1$s</xliff:g> perquè el gestioni &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Aquesta aplicació es necessita per gestionar el dispositiu (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>). <xliff:g id="APP_NAME">%2$s</xliff:g> tindrà permís per sincronitzar informació, com ara el nom d\'algú que truca, per interaccionar amb les teves notificacions i accedir al telèfon, als SMS, als contactes, al calendari, als registres de trucades i als dispositius propers."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Aquesta aplicació podrà sincronitzar informació, com ara el nom d\'algú que truca, i accedir a aquests permisos al dispositiu (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Tria un dispositiu perquè el gestioni &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Tria un <xliff:g id="PROFILE_NAME">%1$s</xliff:g> per configurar"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Aquesta aplicació podrà sincronitzar informació, com ara el nom d\'algú que truca, i accedir a aquests permisos al dispositiu (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Permet que &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; gestioni &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"ulleres"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Aquesta aplicació es necessita per gestionar el dispositiu (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>). <xliff:g id="APP_NAME">%2$s</xliff:g> tindrà permís per interaccionar amb les teves notificacions i accedir al telèfon, als SMS, als contactes, al micròfon i als dispositius propers."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Aquesta aplicació podrà accedir a aquests permisos del dispositiu (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"dispositiu"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Aquesta aplicació podrà accedir a aquests permisos del dispositiu (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Permet que &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; accedeixi a aquesta informació del telèfon"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Serveis multidispositiu"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> demana permís en nom del teu dispositiu (<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>) per reproduir en continu aplicacions entre els dispositius"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Vols permetre que &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; dugui a terme aquesta acció?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> sol·licita permís en nom del teu dispositiu (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>) per reproduir en continu aplicacions i altres funcions del sistema en dispositius propers"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"dispositiu"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Aquesta aplicació podrà sincronitzar informació, com ara el nom d\'algú que truca, entre el teu telèfon i el dispositiu (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Aquesta aplicació podrà sincronitzar informació, com ara el nom d\'algú que truca, entre el teu telèfon i el dispositiu triat"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Permet"</string>
     <string name="consent_no" msgid="2640796915611404382">"No permetis"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Cancel·la"</string>
     <string name="consent_back" msgid="2560683030046918882">"Enrere"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Desplega <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Replega <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Vols concedir a les aplicacions del dispositiu &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; els mateixos permisos que tenen a &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Això pot incloure l\'accés al &lt;strong&gt;micròfon&lt;/strong&gt;, a la &lt;strong&gt;càmera&lt;/strong&gt; i a la &lt;strong&gt;ubicació&lt;/strong&gt;, així com altres permisos sensibles a &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Pots canviar aquestes permisos en qualsevol moment a Configuració, a &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Icona de l\'aplicació"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Botó Més informació"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Més informació"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telèfon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contactes"</string>
diff --git a/packages/CompanionDeviceManager/res/values-cs/strings.xml b/packages/CompanionDeviceManager/res/values-cs/strings.xml
index beb6060..b62496d 100644
--- a/packages/CompanionDeviceManager/res/values-cs/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-cs/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Správce doprovodných zařízení"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Povolit aplikaci &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; přístup k &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Povolit aplikaci &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; přístup k &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"hodinky"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Vyberte zařízení <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, které chcete spravovat pomocí aplikace &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Tato aplikace je nutná ke správě zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> bude moci synchronizovat údaje, jako je jméno volajícího, interagovat s vašimi oznámeními a získat přístup k vašim oprávněním k telefonu, SMS, kontaktům, kalendáři, seznamům hovorů a zařízením v okolí."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Tato aplikace bude moci synchronizovat údaje, jako je jméno volajícího, a získat přístup k těmto oprávněním v <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Vyberte zařízení, které chcete spravovat pomocí aplikace &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Vyberte zařízení <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, které chcete nastavit"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Tato aplikace bude moci synchronizovat údaje, jako je jméno volajícího, a získat na zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g> přístup k těmto oprávněním"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Povolit aplikaci &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; spravovat zařízení &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"brýle"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Tato aplikace je nutná ke správě zařízení <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> bude moci interagovat s vašimi oznámeními a získat přístup k vašim oprávněním k telefonu, SMS, kontaktům, mikrofonu a zařízením v okolí."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Tato aplikace bude mít ve vašem <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> povolený přístup k těmto oprávněním:"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"zařízení"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Tato aplikace bude mít ve vašem <xliff:g id="DEVICE_NAME">%1$s</xliff:g> povolený přístup k těmto oprávněním"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Povolte aplikaci &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; přístup k těmto informacím z vašeho telefonu"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Služby pro více zařízení"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> požaduje za vaše zařízení <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> oprávnění ke streamování aplikací mezi zařízeními"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Povolit zařízení &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; podniknout tuto akci?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> žádá jménem vašeho zařízení <xliff:g id="DEVICE_NAME">%2$s</xliff:g> o oprávnění streamovat aplikace a další systémové funkce do zařízení v okolí"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"zařízení"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Tato aplikace bude moci synchronizovat údaje, jako je jméno volajícího, mezi vaším telefonem a zařízením <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Tato aplikace bude moci synchronizovat údaje, jako je jméno volajícího, mezi vaším telefonem a vybraným zařízením"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Povolit"</string>
     <string name="consent_no" msgid="2640796915611404382">"Nepovolovat"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Zrušit"</string>
     <string name="consent_back" msgid="2560683030046918882">"Zpět"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Rozbalit sekci <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Sbalit sekci <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Udělit aplikacím v zařízení &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; stejné oprávnění, jako mají v zařízení &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"To může zahrnovat oprávnění &lt;strong&gt;Mikrofon&lt;/strong&gt;, &lt;strong&gt;Fotoparát&lt;/strong&gt; a &lt;strong&gt;Přístup k poloze&lt;/strong&gt; a další citlivá oprávnění na zařízení &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Tato oprávnění můžete kdykoli změnit v Nastavení na zařízení &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ikona aplikace"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Tlačítko Další informace"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Další informace"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontakty"</string>
diff --git a/packages/CompanionDeviceManager/res/values-da/strings.xml b/packages/CompanionDeviceManager/res/values-da/strings.xml
index 40c93bd..df63e6c 100644
--- a/packages/CompanionDeviceManager/res/values-da/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-da/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Medfølgende enhedsadministrator"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Vil du give &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; adgang til &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Vil du give appen &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; adgang til &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ur"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Vælg det <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, som skal administreres af &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Du skal bruge denne app for at administrere <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> får tilladelse til at interagere med dine notifikationer og synkronisere oplysninger som f.eks. navnet på en person, der ringer, og appen får adgang til dine tilladelser for Opkald, Sms, Kalender, Opkaldshistorik og Enheder i nærheden."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Denne app får tilladelse til at synkronisere oplysninger, f.eks. navne på dem, der ringer, og adgang til disse tilladelser på din <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Vælg en enhed, som skal administreres af &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Vælg en <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, som du vil konfigurere"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Denne app får tilladelse til at synkronisere oplysninger, f.eks. navne på dem, der ringer, og adgang til disse tilladelser på din <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Vil du tillade, at &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; administrerer &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"briller"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Du skal bruge denne app for at administrere <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> får tilladelse til at interagere med dine notifikationer og tilgå tilladelserne Telefon, Sms, Kontakter, Mikrofon og Enheder i nærheden."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Denne app får adgang til disse tilladelser på din <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"enhed"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Denne app får adgang til disse tilladelser på din <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Giv &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; adgang til disse oplysninger fra din telefon"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Tjenester, som kan tilsluttes en anden enhed"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> anmoder om tilladelse på vegne af din <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> til at streame apps mellem dine enheder"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Vil du tillade, at &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; foretager denne handling?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> anmoder om tilladelse på vegne af din <xliff:g id="DEVICE_NAME">%2$s</xliff:g> til at streame apps og andre systemfunktioner til enheder i nærheden"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"enhed"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Denne app vil kunne synkronisere oplysninger som f.eks. navnet på en person, der ringer, mellem din telefon og <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Denne app vil kunne synkronisere oplysninger som f.eks. navnet på en person, der ringer, mellem din telefon og den valgte enhed"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Tillad"</string>
     <string name="consent_no" msgid="2640796915611404382">"Tillad ikke"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Annuller"</string>
     <string name="consent_back" msgid="2560683030046918882">"Tilbage"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Udvid <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Skjul <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Vil du give apps på &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; de samme tilladelser som på &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Dette kan omfatte &lt;strong&gt;mikrofon-&lt;/strong&gt;, &lt;strong&gt;kamera-&lt;/strong&gt; og &lt;strong&gt;lokationsadgang&lt;/strong&gt; samt andre tilladelser til at tilgå følsomme oplysninger på &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Du kan til enhver tid ændre disse tilladelser under Indstillinger på &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Appikon"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Knappen Flere oplysninger"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Flere oplysninger"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"Sms"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontakter"</string>
diff --git a/packages/CompanionDeviceManager/res/values-de/strings.xml b/packages/CompanionDeviceManager/res/values-de/strings.xml
index 99cf792..f487f94 100644
--- a/packages/CompanionDeviceManager/res/values-de/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-de/strings.xml
@@ -17,16 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Begleitgerät-Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Zulassen, dass &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; auf das Gerät &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; zugreifen darf?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Zulassen, dass &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; auf &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; zugreifen darf?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"Smartwatch"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Gerät „<xliff:g id="PROFILE_NAME">%1$s</xliff:g>“ auswählen, das von &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; verwaltet werden soll"</string>
-    <!-- no translation found for summary_watch (898569637110705523) -->
-    <skip />
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Diese App darf dann Daten wie den Namen eines Anrufers synchronisieren und auf folgende Berechtigungen auf deinem <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> zugreifen"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Gerät auswählen, das von &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; verwaltet werden soll"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> zum Einrichten auswählen"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Diese App darf dann Daten wie den Namen eines Anrufers synchronisieren und auf diese Berechtigungen auf deinem <xliff:g id="DEVICE_NAME">%1$s</xliff:g> zugreifen"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Zulassen, dass &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; das Gerät &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; verwalten darf"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"Glass-Geräte"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Diese App wird zur Verwaltung deines Geräts (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>) benötigt. <xliff:g id="APP_NAME">%2$s</xliff:g> darf mit deinen Benachrichtigungen interagieren und auf die Berechtigungen „Telefon“, „SMS“, „Kontakte“, „Mikrofon“ und „Geräte in der Nähe“ zugreifen."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Diese App darf dann auf die folgenden Berechtigungen auf deinem <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> zugreifen:"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"Gerät"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Diese App darf dann auf diese Berechtigungen auf deinem <xliff:g id="DEVICE_NAME">%1$s</xliff:g> zugreifen:"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; Zugriff auf diese Informationen von deinem Smartphone gewähren"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Geräteübergreifende Dienste"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> bittet für dein <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> um die Berechtigung zum Streamen von Apps zwischen deinen Geräten"</string>
@@ -39,17 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Darf das Gerät &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; diese Aktion ausführen?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> bittet für dein Gerät (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>) um die Berechtigung, Apps und andere Systemfunktionen auf Geräte in der Nähe zu streamen"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"Gerät"</string>
-    <!-- no translation found for summary_generic_single_device (4181180669689590417) -->
-    <skip />
-    <!-- no translation found for summary_generic (1761976003668044801) -->
-    <skip />
+    <string name="summary_generic" msgid="1761976003668044801">"Diese App kann dann Daten wie den Namen eines Anrufers zwischen deinem Smartphone und dem ausgewählten Gerät synchronisieren"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Zulassen"</string>
     <string name="consent_no" msgid="2640796915611404382">"Nicht zulassen"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Abbrechen"</string>
     <string name="consent_back" msgid="2560683030046918882">"Zurück"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> maximieren"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> minimieren"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Apps auf &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; die gleichen Berechtigungen geben wie auf &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Dazu können &lt;strong&gt;Mikrofon&lt;/strong&gt;, &lt;strong&gt;Kamera&lt;/strong&gt; und &lt;strong&gt;Standortzugriff&lt;/strong&gt; sowie weitere vertrauliche Berechtigungen auf &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; gehören. &lt;br/&gt;&lt;br/&gt;Du kannst diese Berechtigungen jederzeit in den Einstellungen von &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; ändern."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"App-Symbol"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Weitere-Infos-Schaltfläche"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Weitere Informationen"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontakte"</string>
diff --git a/packages/CompanionDeviceManager/res/values-el/strings.xml b/packages/CompanionDeviceManager/res/values-el/strings.xml
index 137ea73..1c8ecb7 100644
--- a/packages/CompanionDeviceManager/res/values-el/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-el/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Διαχείριση συνοδευτικής εφαρμογής"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Να επιτρέπεται στην εφαρμογή &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; να έχει πρόσβαση στη συσκευή &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ;"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Να επιτρέπεται στην εφαρμογή &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; να έχει πρόσβαση στη συσκευή &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;;"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ρολόι"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Επιλέξτε ένα προφίλ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> για διαχείριση από την εφαρμογή &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Αυτή η εφαρμογή είναι απαραίτητη για τη διαχείριση της συσκευής <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Η εφαρμογή <xliff:g id="APP_NAME">%2$s</xliff:g> θα μπορεί να συγχρονίζει πληροφορίες, όπως το όνομα ενός ατόμου που σας καλεί, να αλληλεπιδρά με τις ειδοποιήσεις σας και να αποκτά πρόσβαση στις άδειες Τηλέφωνο, SMS, Επαφές, Ημερολόγιο, Αρχεία καταγρ. κλήσ. και Συσκευές σε κοντινή απόσταση."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Αυτή η εφαρμογή θα μπορεί να συγχρονίζει πληροφορίες, όπως το όνομα ενός ατόμου που σας καλεί, και να αποκτά πρόσβαση σε αυτές τις άδειες στη συσκευή <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Επιλέξτε μια συσκευή για διαχείριση μέσω της εφαρμογής &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Επιλέξτε ένα προφίλ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> για ρύθμιση"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Αυτή η εφαρμογή θα μπορεί να συγχρονίζει πληροφορίες, όπως το όνομα ενός ατόμου που σας καλεί, και να αποκτά πρόσβαση σε αυτές τις άδειες στη συσκευή <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Να επιτρέπεται στην εφαρμογή &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; να διαχειρίζεται τη συσκευή &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ;"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"γυαλιά"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Αυτή η εφαρμογή είναι απαραίτητη για τη διαχείριση της συσκευής <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Θα επιτρέπεται στην εφαρμογή <xliff:g id="APP_NAME">%2$s</xliff:g> να αλληλεπιδρά με τις ειδοποιήσεις σας και να αποκτά πρόσβαση στις άδειες για το Τηλέφωνο, τα SMS, τις Επαφές, το Μικρόφωνο και τις Συσκευές σε κοντινή απόσταση."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Αυτή η εφαρμογή θα μπορεί να έχει πρόσβαση σε αυτές τις άδειες στη συσκευή <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"συσκευή"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Αυτή η εφαρμογή θα μπορεί να έχει πρόσβαση σε αυτές τις άδειες στη συσκευή <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Να επιτρέπεται στο &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; η πρόσβαση σε αυτές τις πληροφορίες από το τηλέφωνό σας."</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Υπηρεσίες πολλών συσκευών"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> ζητά εκ μέρους της συσκευής σας <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> άδεια για ροή εφαρμογών μεταξύ των συσκευών σας"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Να επιτρέπεται στη συσκευή &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; να εκτελεί αυτήν την ενέργεια;"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> ζητά άδεια εκ μέρους της συσκευής σας <xliff:g id="DEVICE_NAME">%2$s</xliff:g> για ροή εφαρμογών και άλλων λειτουργιών του συστήματος σε συσκευές σε κοντινή απόσταση"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"συσκευή"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Αυτή η εφαρμογή θα μπορεί να συγχρονίζει πληροφορίες μεταξύ του τηλεφώνου και της συσκευής <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, όπως το όνομα ενός ατόμου που σας καλεί."</string>
     <string name="summary_generic" msgid="1761976003668044801">"Αυτή η εφαρμογή θα μπορεί να συγχρονίζει πληροφορίες μεταξύ του τηλεφώνου και της επιλεγμένης συσκευής σας, όπως το όνομα ενός ατόμου που σας καλεί."</string>
     <string name="consent_yes" msgid="8344487259618762872">"Να επιτρέπεται"</string>
     <string name="consent_no" msgid="2640796915611404382">"Να μην επιτρέπεται"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Ακύρωση"</string>
     <string name="consent_back" msgid="2560683030046918882">"Πίσω"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Ανάπτυξη <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Σύμπτυξη <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Παραχώρηση των ίδιων αδειών στις εφαρμογές στη συσκευή &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; όπως στη συσκευή &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;;"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Μπορεί να περιλαμβάνει την πρόσβαση στο &lt;strong&gt;Μικρόφωνο&lt;/strong&gt;, την &lt;strong&gt;Κάμερα&lt;/strong&gt;, και την &lt;strong&gt;Τοποθεσία&lt;/strong&gt;, καθώς και άλλες άδειες πρόσβασης σε ευαίσθητες πληροφορίες στη συσκευή &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Μπορείτε να αλλάξετε αυτές τις άδειες ανά πάσα στιγμή από τις Ρυθμίσεις της συσκευής &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Εικονίδιο εφαρμογής"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Κουμπί περισσότερων πληροφορ."</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Περισσότερες πληροφορίες"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Τηλέφωνο"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Επαφές"</string>
diff --git a/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml b/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml
index 3a3ef18..ca12145 100644
--- a/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Allow &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Allow the app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"watch"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Choose a <xliff:g id="PROFILE_NAME">%1$s</xliff:g> to be managed by &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"This app is needed to manage your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to sync info, like the name of someone calling, interact with your notifications and access your Phone, SMS, Contacts, Calendar, Call logs and Nearby devices permissions."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"This app will be allowed to sync info, like the name of someone calling, and access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Choose a device to be managed by &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Choose a <xliff:g id="PROFILE_NAME">%1$s</xliff:g> to set up"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"This app will be allowed to sync info, like the name of someone calling, and access these permissions on your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Allow &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to manage &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"glasses"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"This app is needed to manage <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to interact with your notifications and access your phone, SMS, contacts, microphone and Nearby devices permissions."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"This app will be allowed to access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"device"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"This app will be allowed to access these permissions on your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Allow &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access this information from your phone"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Cross-device services"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> to stream apps between your devices"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Allow &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; to take this action?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_NAME">%2$s</xliff:g> to stream apps and other system features to nearby devices"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"device"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"This app will be able to sync info, like the name of someone calling, between your phone and <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"This app will be able to sync info, like the name of someone calling, between your phone and the chosen device"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Allow"</string>
     <string name="consent_no" msgid="2640796915611404382">"Don\'t allow"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Cancel"</string>
     <string name="consent_back" msgid="2560683030046918882">"Back"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Expand <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Collapse <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Give apps on &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; the same permissions as on &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"This may include &lt;strong&gt;Microphone&lt;/strong&gt;, &lt;strong&gt;Camera&lt;/strong&gt;, and &lt;strong&gt;Location access&lt;/strong&gt;, and other sensitive permissions on &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;You can change these permissions any time in your Settings on &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"App icon"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"More information button"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"More information"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Phone"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contacts"</string>
diff --git a/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml b/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml
index 4afe1a8..bd0342d 100644
--- a/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Allow &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Allow the app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"watch"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Choose a <xliff:g id="PROFILE_NAME">%1$s</xliff:g> to be managed by &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"This app is needed to manage your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to sync info, like the name of someone calling, interact with your notifications and access your Phone, SMS, Contacts, Calendar, Call logs and Nearby devices permissions."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"This app will be allowed to sync info, like the name of someone calling, and access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Choose a device to be managed by &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Choose a <xliff:g id="PROFILE_NAME">%1$s</xliff:g> to set up"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"This app will be allowed to sync info, like the name of someone calling, and access these permissions on your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Allow &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to manage &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"glasses"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"This app is needed to manage <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to interact with your notifications and access your Phone, SMS, Contacts, Microphone and Nearby devices permissions."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"This app will be allowed to access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"device"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"This app will be allowed to access these permissions on your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Allow &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access this information from your phone"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Cross-device services"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> to stream apps between your devices"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Allow &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; to take this action?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_NAME">%2$s</xliff:g> to stream apps and other system features to nearby devices"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"device"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"This app will be able to sync info, like the name of someone calling, between your phone and <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"This app will be able to sync info, like the name of someone calling, between your phone and the chosen device"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Allow"</string>
     <string name="consent_no" msgid="2640796915611404382">"Don\'t allow"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Cancel"</string>
     <string name="consent_back" msgid="2560683030046918882">"Back"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Expand <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Collapse <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Give apps on &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; the same permissions as on &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"This may include &lt;strong&gt;Microphone&lt;/strong&gt;, &lt;strong&gt;Camera&lt;/strong&gt;, and &lt;strong&gt;Location access&lt;/strong&gt;, and other sensitive permissions on &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;You can change these permissions any time in your Settings on &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"App Icon"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"More Information Button"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"More Information"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Phone"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contacts"</string>
diff --git a/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml b/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml
index 3a3ef18..ca12145 100644
--- a/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Allow &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Allow the app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"watch"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Choose a <xliff:g id="PROFILE_NAME">%1$s</xliff:g> to be managed by &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"This app is needed to manage your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to sync info, like the name of someone calling, interact with your notifications and access your Phone, SMS, Contacts, Calendar, Call logs and Nearby devices permissions."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"This app will be allowed to sync info, like the name of someone calling, and access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Choose a device to be managed by &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Choose a <xliff:g id="PROFILE_NAME">%1$s</xliff:g> to set up"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"This app will be allowed to sync info, like the name of someone calling, and access these permissions on your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Allow &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to manage &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"glasses"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"This app is needed to manage <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to interact with your notifications and access your phone, SMS, contacts, microphone and Nearby devices permissions."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"This app will be allowed to access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"device"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"This app will be allowed to access these permissions on your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Allow &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access this information from your phone"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Cross-device services"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> to stream apps between your devices"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Allow &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; to take this action?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_NAME">%2$s</xliff:g> to stream apps and other system features to nearby devices"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"device"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"This app will be able to sync info, like the name of someone calling, between your phone and <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"This app will be able to sync info, like the name of someone calling, between your phone and the chosen device"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Allow"</string>
     <string name="consent_no" msgid="2640796915611404382">"Don\'t allow"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Cancel"</string>
     <string name="consent_back" msgid="2560683030046918882">"Back"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Expand <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Collapse <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Give apps on &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; the same permissions as on &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"This may include &lt;strong&gt;Microphone&lt;/strong&gt;, &lt;strong&gt;Camera&lt;/strong&gt;, and &lt;strong&gt;Location access&lt;/strong&gt;, and other sensitive permissions on &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;You can change these permissions any time in your Settings on &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"App icon"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"More information button"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"More information"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Phone"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contacts"</string>
diff --git a/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml b/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml
index 3a3ef18..ca12145 100644
--- a/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Allow &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Allow the app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"watch"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Choose a <xliff:g id="PROFILE_NAME">%1$s</xliff:g> to be managed by &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"This app is needed to manage your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to sync info, like the name of someone calling, interact with your notifications and access your Phone, SMS, Contacts, Calendar, Call logs and Nearby devices permissions."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"This app will be allowed to sync info, like the name of someone calling, and access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Choose a device to be managed by &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Choose a <xliff:g id="PROFILE_NAME">%1$s</xliff:g> to set up"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"This app will be allowed to sync info, like the name of someone calling, and access these permissions on your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Allow &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to manage &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"glasses"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"This app is needed to manage <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> will be allowed to interact with your notifications and access your phone, SMS, contacts, microphone and Nearby devices permissions."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"This app will be allowed to access these permissions on your <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"device"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"This app will be allowed to access these permissions on your <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Allow &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; to access this information from your phone"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Cross-device services"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> to stream apps between your devices"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Allow &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; to take this action?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="DEVICE_NAME">%2$s</xliff:g> to stream apps and other system features to nearby devices"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"device"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"This app will be able to sync info, like the name of someone calling, between your phone and <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"This app will be able to sync info, like the name of someone calling, between your phone and the chosen device"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Allow"</string>
     <string name="consent_no" msgid="2640796915611404382">"Don\'t allow"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Cancel"</string>
     <string name="consent_back" msgid="2560683030046918882">"Back"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Expand <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Collapse <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Give apps on &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; the same permissions as on &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"This may include &lt;strong&gt;Microphone&lt;/strong&gt;, &lt;strong&gt;Camera&lt;/strong&gt;, and &lt;strong&gt;Location access&lt;/strong&gt;, and other sensitive permissions on &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;You can change these permissions any time in your Settings on &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"App icon"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"More information button"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"More information"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Phone"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contacts"</string>
diff --git a/packages/CompanionDeviceManager/res/values-en-rXC/strings.xml b/packages/CompanionDeviceManager/res/values-en-rXC/strings.xml
index e5d11dc..70af915 100644
--- a/packages/CompanionDeviceManager/res/values-en-rXC/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rXC/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‎Companion Device Manager‎‏‎‎‏‎"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‏‏‏‏‎Allow &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt; to access &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt;?‎‏‎‎‏‎"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‏‎‎Allow the app &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt; to access &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt;?‎‏‎‎‏‎"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎watch‎‏‎‎‏‎"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‎‎‎‏‎‎‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎Choose a ‎‏‎‎‏‏‎<xliff:g id="PROFILE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ to be managed by &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt;‎‏‎‎‏‎"</string>
-    <string name="summary_watch" msgid="898569637110705523">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎This app is needed to manage your ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎. ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎ will be allowed to sync info, like the name of someone calling, interact with your notifications and access your Phone, SMS, Contacts, Calendar, Call logs and Nearby devices permissions.‎‏‎‎‏‎"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎This app will be allowed to sync info, like the name of someone calling, and access these permissions on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎Choose a device to be managed by &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt;‎‏‎‎‏‎"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‏‎‏‎Choose a ‎‏‎‎‏‏‎<xliff:g id="PROFILE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ to set up‎‏‎‎‏‎"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‎‎This app will be allowed to sync info, like the name of someone calling, and access these permissions on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‏‎‏‎Allow &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt; to manage &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt;?‎‏‎‎‏‎"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‏‎‎glasses‎‏‎‎‏‎"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎This app is needed to manage ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎. ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎ will be allowed to interact with your notifications and access your Phone, SMS, Contacts, Microphone and Nearby devices permissions.‎‏‎‎‏‎"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‏‎‎This app will be allowed to access these permissions on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‏‎‏‎device‎‏‎‎‏‎"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‏‏‎This app will be allowed to access these permissions on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎Allow &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt; to access this information from your phone‎‏‎‎‏‎"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‏‏‎‏‏‏‎‎‎‎‎‏‎‏‎‏‎‏‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‏‎Cross-device services‎‏‎‎‏‎"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‏‏‎‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is requesting permission on behalf of your ‎‏‎‎‏‏‎<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎ to stream apps between your devices‎‏‎‎‏‎"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‏‏‎‎‏‎‎Allow &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt; to take this action?‎‏‎‎‏‎"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is requesting permission on behalf of your ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎ to stream apps and other system features to nearby devices‎‏‎‎‏‎"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‏‏‎‎‎device‎‏‎‎‏‎"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‎‏‎This app will be able to sync info, like the name of someone calling, between your phone and ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="summary_generic" msgid="1761976003668044801">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎This app will be able to sync info, like the name of someone calling, between your phone and the chosen device‎‏‎‎‏‎"</string>
     <string name="consent_yes" msgid="8344487259618762872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‎‎‎Allow‎‏‎‎‏‎"</string>
     <string name="consent_no" msgid="2640796915611404382">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎Don’t allow‎‏‎‎‏‎"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‏‎Cancel‎‏‎‎‏‎"</string>
     <string name="consent_back" msgid="2560683030046918882">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎Back‎‏‎‎‏‎"</string>
+    <string name="permission_expand" msgid="893185038020887411">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‏‏‎‏‏‏‎‎‏‏‎Expand ‎‏‎‎‏‏‎<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎Collapse ‎‏‎‎‏‏‎<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎Give apps on &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt; the same permissions as on &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt;?‎‏‎‎‏‎"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‏‎This may include &lt;strong&gt;Microphone&lt;/strong&gt;, &lt;strong&gt;Camera&lt;/strong&gt;, and &lt;strong&gt;Location access&lt;/strong&gt;, and other sensitive permissions on &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;You can change these permissions any time in your Settings on &lt;strong&gt;‎‏‎‎‏‏‎<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/strong&gt;.‎‏‎‎‏‎"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎App Icon‎‏‎‎‏‎"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎More Information Button‎‏‎‎‏‎"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‏‎‏‏‎‎‎‏‎More Information‎‏‎‎‏‎"</string>
     <string name="permission_phone" msgid="2661081078692784919">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎Phone‎‏‎‎‏‎"</string>
     <string name="permission_sms" msgid="6337141296535774786">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‏‏‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‎‎‎‏‎‎SMS‎‏‎‎‏‎"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎‏‏‎‎‏‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‎Contacts‎‏‎‎‏‎"</string>
diff --git a/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml b/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml
index f4d8d08..cba0b46 100644
--- a/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Administrador de dispositivo complementario"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"¿Quieres permitir que &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acceda a &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"¿Quieres permitir que la app de &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acceda a &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"reloj"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Elige un <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para que la app &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; lo administre"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Esta app es necesaria para administrar tu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> podrá sincronizar información, como el nombre de la persona que llama, interactuar con tus notificaciones y acceder a los permisos de Teléfono, SMS, Contactos, Calendario, Llamadas y Dispositivos cercanos."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Esta app podrá sincronizar información, como el nombre de alguien cuando te llame, y acceder a los siguientes permisos en tu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Elige un dispositivo para que &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; lo administre"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Elige un <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para configurar"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Esta app podrá sincronizar información, como el nombre de alguien cuando te llame, y acceder a los siguientes permisos en tu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Permite que &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; administre &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"Gafas"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Esta app es necesaria para administrar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> podrá interactuar con tus notificaciones y acceder a los permisos de Teléfono, SMS, Contactos, Micrófono y Dispositivos cercanos."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Esta app podrá acceder a los siguientes permisos en tu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"dispositivo"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Esta app podrá acceder a los siguientes permisos en tu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Permite que &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acceda a esta información de tu teléfono"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Servicios multidispositivo"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicita tu permiso en nombre de <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para transmitir apps entre dispositivos"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"¿Permites que &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; realice esta acción?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> está solicitando permiso en nombre de tu <xliff:g id="DEVICE_NAME">%2$s</xliff:g> para transmitir apps y otras funciones del sistema a dispositivos cercanos"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Esta app podrá sincronizar información, como el nombre de la persona que llama, entre el teléfono y <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Esta app podrá sincronizar información, como el nombre de la persona que llama, entre el teléfono y el dispositivo elegido"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
     <string name="consent_no" msgid="2640796915611404382">"No permitir"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Cancelar"</string>
     <string name="consent_back" msgid="2560683030046918882">"Atrás"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Expandir <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Contraer <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"¿Dar a las apps de &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; los mismos permisos que tienen en &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Esto puede incluir &lt;strong&gt;Micrófono&lt;/strong&gt;, &lt;strong&gt;Cámara&lt;/strong&gt;, y &lt;strong&gt;Acceso a la ubicación&lt;/strong&gt;, así como otros permisos sensibles en &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Puedes cambiar estos permisos en cualquier momento desde la Configuración de &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ícono de la app"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Botón Más información"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Más información"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Teléfono"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contactos"</string>
diff --git a/packages/CompanionDeviceManager/res/values-es/strings.xml b/packages/CompanionDeviceManager/res/values-es/strings.xml
index 11e64f3..50d8806 100644
--- a/packages/CompanionDeviceManager/res/values-es/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-es/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Gestor de dispositivos complementario"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"¿Permitir que &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acceda a tu &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"¿Permitir que la aplicación &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acceda a &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"reloj"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Elige un <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para gestionarlo con &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Se necesita esta aplicación para gestionar tu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> podrá sincronizar información (por ejemplo, el nombre de la persona que te llama), interactuar con tus notificaciones y acceder a tus permisos de teléfono, SMS, contactos, calendario, registros de llamadas y dispositivos cercanos."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Esta aplicación podrá sincronizar información, como el nombre de la persona que llama, y acceder a estos permisos de tu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Elige un dispositivo para que lo gestione &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Elige el <xliff:g id="PROFILE_NAME">%1$s</xliff:g> que quieras configurar"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Esta aplicación podrá sincronizar información, como el nombre de la persona que llama, y acceder a estos permisos de tu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"¿Permitir que &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; gestione &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"gafas"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Se necesita esta aplicación para gestionar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> podrá interactuar con tus notificaciones y acceder a tus permisos de teléfono, SMS, contactos, micrófono y dispositivos cercanos."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Esta aplicación podrá acceder a estos permisos de tu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"dispositivo"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Esta aplicación podrá acceder a estos permisos de tu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Permitir que &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acceda a esta información de tu teléfono"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Servicios multidispositivo"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> está pidiendo permiso en nombre de tu <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para emitir aplicaciones en otros dispositivos tuyos"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"¿Permitir que &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; realice esta acción?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> está pidiendo permiso en nombre de tu <xliff:g id="DEVICE_NAME">%2$s</xliff:g> para emitir aplicaciones y otras funciones del sistema en dispositivos cercanos"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Esta aplicación podrá sincronizar información (por ejemplo, el nombre de la persona que te llama) entre tu teléfono y <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Esta aplicación podrá sincronizar información (por ejemplo, el nombre de la persona que te llama) entre tu teléfono y el dispositivo que elijas"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
     <string name="consent_no" msgid="2640796915611404382">"No permitir"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Cancelar"</string>
     <string name="consent_back" msgid="2560683030046918882">"Atrás"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Desplegar <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Contraer <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"¿Dar a las aplicaciones de &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; los mismos permisos que &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Esta acción puede dar acceso al &lt;strong&gt;micrófono&lt;/strong&gt;, la &lt;strong&gt;cámara&lt;/strong&gt; y la &lt;strong&gt;ubicación&lt;/strong&gt;, así como a otros permisos sensibles en &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Puedes cambiar estos permisos cuando quieras en los ajustes de &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Icono de la aplicación"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Botón Más información"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Más información"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Teléfono"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contactos"</string>
diff --git a/packages/CompanionDeviceManager/res/values-et/strings.xml b/packages/CompanionDeviceManager/res/values-et/strings.xml
index 696b83f..2eff7eb 100644
--- a/packages/CompanionDeviceManager/res/values-et/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-et/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Kaasseadme haldur"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Andke rakendusele &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; juurdepääs seadmele &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Kas anda rakendusele &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; juurdepääs seadmele &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"käekell"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Valige <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, mida haldab rakendus &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Seda rakendust on vaja teie seadme <xliff:g id="DEVICE_NAME">%1$s</xliff:g> haldamiseks. Rakendusel <xliff:g id="APP_NAME">%2$s</xliff:g> lubatakse sünkroonida teavet, näiteks helistaja nime, kasutada teie märguandeid ning pääseda juurde teie telefoni, SMS-ide, kontaktide, kalendri, kõnelogide ja läheduses olevate seadmete lubadele."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Sellel rakendusel lubatakse sünkroonida teavet (nt helistaja nime) ja antakse need load teie seadmes <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Valige seade, mida haldab rakendus &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Valige <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, mis seadistada"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Sellel rakendusel lubatakse sünkroonida teavet (nt helistaja nime) ja antakse need load teie seadmes <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Lubage rakendusel &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; hallata seadet &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"prillid"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Seda rakendust on vaja seadme <xliff:g id="DEVICE_NAME">%1$s</xliff:g> haldamiseks. Rakendusel <xliff:g id="APP_NAME">%2$s</xliff:g> lubatakse kasutada teie märguandeid ning pääseda juurde teie telefoni, SMS-ide, kontaktide, mikrofoni ja läheduses olevate seadmete lubadele."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Sellele rakendusele antakse need load teie seadmes <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"seade"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Sellele rakendusele antakse need load teie seadmes <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Lubage rakendusel &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; pääseda teie telefonis juurde sellele teabele"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Seadmeülesed teenused"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> taotleb teie seadme <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> nimel luba teie seadmete vahel rakendusi voogesitada"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Kas lubada seadmel &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; teha seda toimingut?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> taotleb teie seadme <xliff:g id="DEVICE_NAME">%2$s</xliff:g> nimel luba voogesitada rakendusi ja muid süsteemi funktsioone läheduses olevatesse seadmetesse"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"seade"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"See rakendus saab sünkroonida teavet, näiteks helistaja nime, teie telefoni ja seadme <xliff:g id="DEVICE_NAME">%1$s</xliff:g> vahel"</string>
     <string name="summary_generic" msgid="1761976003668044801">"See rakendus saab sünkroonida teavet, näiteks helistaja nime, teie telefoni ja valitud seadme vahel"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Luba"</string>
     <string name="consent_no" msgid="2640796915611404382">"Ära luba"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Tühista"</string>
     <string name="consent_back" msgid="2560683030046918882">"Tagasi"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Laienda: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Ahenda: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Kas anda rakendustele seadmes &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; samad load, mis seadmes &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"See võib hõlmata &lt;strong&gt;mikrofoni&lt;/strong&gt;, &lt;strong&gt;kaamerat&lt;/strong&gt; ja &lt;strong&gt;juurdepääsu asukohale&lt;/strong&gt; ning muid tundlikke lube seadmes &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Võite neid lube seadme &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; seadetes igal ajal muuta."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Rakenduse ikoon"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Nupp Lisateave"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Lisateave"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontaktid"</string>
diff --git a/packages/CompanionDeviceManager/res/values-eu/strings.xml b/packages/CompanionDeviceManager/res/values-eu/strings.xml
index 6ce4654..e130074 100644
--- a/packages/CompanionDeviceManager/res/values-eu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-eu/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Gailu osagarriaren kudeatzailea"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; erabiltzeko baimena eman nahi diozu &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; aplikazioari?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; gailua erabiltzeko baimena eman nahi diozu &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; aplikazioari?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"erlojua"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Aukeratu &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; aplikazioak kudeatu beharreko <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Aplikazioa <xliff:g id="DEVICE_NAME">%1$s</xliff:g> kudeatzeko behar da. Informazioa sinkronizatzeko (esate baterako, deitzaileen izenak), jakinarazpenekin interakzioan aritzeko, eta telefonoa, SMSak, kontaktuak, egutegia, deien erregistroak eta inguruko gailuak erabiltzeko baimena izango du <xliff:g id="APP_NAME">%2$s</xliff:g> aplikazioak."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>n informazioa sinkronizatu (esate baterako, deitzaileen izenak) eta baimen hauek erabili ahalko ditu aplikazioak"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Aukeratu &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; aplikazioak kudeatu behar duen gailua"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Aukeratu konfiguratu nahi duzun <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Informazioa sinkronizatu (esate baterako, deitzaileen izenak) eta baimen hauek erabili ahalko ditu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>n aplikazioak"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; kudeatzeko baimena eman nahi diozu &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; aplikazioari?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"betaurrekoak"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailua kudeatzeko behar da aplikazioa. Jakinarazpenekin interakzioan aritzeko, eta telefonoa, SMSak, kontaktuak, mikrofonoa eta inguruko gailuak erabiltzeko baimena izango du <xliff:g id="APP_NAME">%2$s</xliff:g> aplikazioak."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>n baimen hauek erabili ahalko ditu aplikazioak:"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"gailua"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Baimen hauek erabili ahalko ditu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>n 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="2396773196949578425">"Gailu batetik bestera aplikazioak igortzeko baimena eskatzen ari da <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> gailuaren izenean"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Ekintza hau gauzatzeko baimena eman nahi diozu &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; aplikazioari?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Aplikazioak eta sistemaren beste eginbide batzuk inguruko gailuetara igortzeko baimena eskatzen ari da <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DEVICE_NAME">%2$s</xliff:g> gailuaren izenean"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"gailua"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Telefonoaren eta <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailuaren artean informazioa sinkronizatzeko gai izango da aplikazioa (esate baterako, deitzaileen izenak)"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Telefonoaren eta hautatutako gailuaren artean informazioa sinkronizatzeko gai izango da aplikazioa (esate baterako, deitzaileen izenak)"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Eman baimena"</string>
     <string name="consent_no" msgid="2640796915611404382">"Ez eman baimenik"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Utzi"</string>
     <string name="consent_back" msgid="2560683030046918882">"Atzera"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Zabaldu <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Tolestu <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; gailuan dituzten baimen berberak eman nahi dizkiezu &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; gailuko aplikazioei?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Baliteke &lt;strong&gt;mikrofonoa&lt;/strong&gt;, &lt;strong&gt;kamera&lt;/strong&gt; eta &lt;strong&gt;kokapena&lt;/strong&gt; erabiltzeko baimenak barne hartzea, baita kontuzko informazioa erabiltzeko &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; gailuko beste baimen batzuk ere. &lt;br/&gt;&lt;br/&gt;Baimen horiek aldatzeko, joan &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; gailuaren ezarpenetara."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Aplikazioaren ikonoa"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Informazio gehiagorako botoia"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Informazio gehiago"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefonoa"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMSak"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontaktuak"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fa/strings.xml b/packages/CompanionDeviceManager/res/values-fa/strings.xml
index 6a19bd6..5e78aa5 100644
--- a/packages/CompanionDeviceManager/res/values-fa/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fa/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"مدیر دستگاه مرتبط"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"‏به &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; اجازه داده شود به &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; دسترسی پیدا کند؟"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"‏به برنامه &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; اجازه داده شود به &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; دسترسی پیدا کند؟"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ساعت"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"‏انتخاب <xliff:g id="PROFILE_NAME">%1$s</xliff:g> برای مدیریت کردن با &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>‏&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"این برنامه برای مدیریت <xliff:g id="DEVICE_NAME">%1$s</xliff:g> شما لازم است. به <xliff:g id="APP_NAME">%2$s</xliff:g> اجازه داده می‌شود اطلاعاتی مثل نام شخصی را که تماس می‌گیرد همگام‌سازی کند، با اعلان‌های شما تعامل داشته باشد، و به اجازه‌های «تلفن»، «پیامک»، «مخاطبین»، «تقویم»، «گزارش‌های تماس»، و «دستگاه‌های اطراف» دسترسی داشته باشد."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"به این برنامه اجازه داده می‌شود اطلاعاتی مثل نام تماس‌گیرنده را همگام‌سازی کند و به این اجازه‌ها در <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> شما دسترسی داشته باشد"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"‏انتخاب دستگاه برای مدیریت کردن با &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"انتخاب <xliff:g id="PROFILE_NAME">%1$s</xliff:g> برای راه‌اندازی"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"به این برنامه اجازه داده می‌شود اطلاعاتی مثل نام تماس‌گیرنده را همگام‌سازی کند و به این اجازه‌ها در <xliff:g id="DEVICE_NAME">%1$s</xliff:g> شما دسترسی داشته باشد"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"‏به &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; اجازه داده شود &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; را مدیریت کند؟"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"عینک"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"این برنامه برای مدیریت <xliff:g id="DEVICE_NAME">%1$s</xliff:g> لازم است. به <xliff:g id="APP_NAME">%2$s</xliff:g> اجازه داده می‌شود با اعلان‌های شما تعامل داشته باشد و به اجازه‌های «تلفن»، «پیامک»، «مخاطبین»، «میکروفون»، و «دستگاه‌های اطراف» دسترسی داشته باشد."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"این برنامه مجاز می‌شود به این اجازه‌ها در <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> شما دسترسی پیدا کند"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"دستگاه"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"این برنامه مجاز می‌شود به این اجازه‌ها در <xliff:g id="DEVICE_NAME">%1$s</xliff:g> شما دسترسی پیدا کند"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"‏اجازه دادن به &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; برای دسترسی به اطلاعات تلفن"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"سرویس‌های بین‌دستگاهی"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> ازطرف <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> اجازه می‌خواهد برنامه‌ها را بین دستگاه‌های شما جاری‌سازی کند"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"‏به &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; اجازه داده شود این اقدام را انجام دهد؟"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> ازطرف <xliff:g id="DEVICE_NAME">%2$s</xliff:g> اجازه می‌خواهد تا برنامه‌ها و دیگر ویژگی‌های سیستم را در دستگاه‌های اطراف جاری‌سازی کند."</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"دستگاه"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"این برنامه مجاز می‌شود اطلاعتی مثل نام شخصی را که تماس می‌گیرد بین تلفن شما و <xliff:g id="DEVICE_NAME">%1$s</xliff:g> همگام‌سازی کند"</string>
     <string name="summary_generic" msgid="1761976003668044801">"این برنامه مجاز می‌شود اطلاعتی مثل نام شخصی را که تماس می‌گیرد بین تلفن شما و دستگاه انتخاب‌شده همگام‌سازی کند"</string>
     <string name="consent_yes" msgid="8344487259618762872">"اجازه دادن"</string>
     <string name="consent_no" msgid="2640796915611404382">"اجازه ندادن"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"لغو"</string>
     <string name="consent_back" msgid="2560683030046918882">"برگشتن"</string>
+    <string name="permission_expand" msgid="893185038020887411">"ازهم بازکردن <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"جمع کردن <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"‏به برنامه‌های موجود در &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; همان اجازه‌های &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; داده شود؟"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"‏این مورد ممکن است شامل دسترسی به &lt;strong&gt;میکروفون&lt;/strong&gt;، &lt;strong&gt;دوربین&lt;/strong&gt;، و &lt;strong&gt;مکان&lt;/strong&gt;، و دیگر اجازه‌های حساس در &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; شود. &lt;br/&gt;&lt;br/&gt;هر زمان خواستید می‌توانید این اجازه‌ها را در «تنظیمات» &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; تغییر دهید."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"نماد برنامه"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"دکمه اطلاعات بیشتر"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"اطلاعات بیشتر"</string>
     <string name="permission_phone" msgid="2661081078692784919">"تلفن"</string>
     <string name="permission_sms" msgid="6337141296535774786">"پیامک"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"مخاطبین"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fi/strings.xml b/packages/CompanionDeviceManager/res/values-fi/strings.xml
index b8186bb..552c473 100644
--- a/packages/CompanionDeviceManager/res/values-fi/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fi/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Sallitaanko, että &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; saa pääsyn laitteeseen: &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Sallitaanko, että soellus (&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;) saa pääsyn laitteeseen: &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"kello"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Valitse <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, jota &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; hallinnoi"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Ylläpitoon (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>) tarvitaan tätä sovellusta. <xliff:g id="APP_NAME">%2$s</xliff:g> saa luvan synkronoida tietoja (esimerkiksi soittajan nimen), hallinnoida ilmoituksiasi sekä pääsyn puhelimeen, tekstiviesteihin, yhteystietoihin, kalenteriin, puhelulokeihin ja lähellä olevat laitteet ‑lupiin."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Sovellus saa luvan synkronoida tietoja (esimerkiksi soittajan nimen) ja pääsyn näihin lupiin laitteella (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Valitse laite, jota &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; hallinnoi"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Valitse <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, niin voit suorittaa käyttöönoton"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Sovellus saa luvan synkronoida tietoja (esimerkiksi soittajan nimen) ja pääsyn näihin lupiin laitteella (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Salli, että &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; saa ylläpitää laitetta: &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"lasit"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> edellyttää ylläpitoon tätä sovellusta. <xliff:g id="APP_NAME">%2$s</xliff:g> saa luvan hallinnoida ilmoituksiasi sekä pääsyn puhelimeen, tekstiviesteihin, yhteystietoihin, mikrofoniin ja lähellä olevat laitteet ‑lupiin."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Tämä sovellus saa käyttää näitä lupia laitteella (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"laite"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Tämä sovellus saa käyttää näitä lupia laitteella (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Salli, että &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; saa pääsyn näihin puhelimesi tietoihin"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Laitteidenväliset palvelut"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> pyytää laitteesi (<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>) puolesta lupaa striimata sovelluksia laitteidesi välillä"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Sallitko, että &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; voi suorittaa tämän toiminnon?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> pyytää laitteesi (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>) puolesta lupaa striimata sovelluksia ja muita järjestelmän ominaisuuksia lähellä oleviin laitteisiin."</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"laite"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Sovellus voi synkronoida tietoja (esimerkiksi soittajan nimen) puhelimesi ja laitteen (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>) välillä"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Sovellus voi synkronoida tietoja (esimerkiksi soittajan nimen) puhelimesi ja valitun laitteen välillä"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Salli"</string>
     <string name="consent_no" msgid="2640796915611404382">"Älä salli"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Peruuta"</string>
     <string name="consent_back" msgid="2560683030046918882">"Takaisin"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Laajenna <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Tiivistä <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Anna laitteen &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; sovelluksille samat luvat kuin laitteella &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Tähän voi kuulua pääsy &lt;strong&gt;mikrofoniin&lt;/strong&gt;, &lt;strong&gt;kameraan&lt;/strong&gt;, ja &lt;strong&gt;sijaintiin &lt;/strong&gt;, ja muihin arkaluontoisiin lupiin laitteella&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Voit muuttaa lupia milloin tahansa laitteen &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; asetuksissa."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Sovelluskuvake"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Lisätietopainike"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Lisätietoa"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Puhelin"</string>
     <string name="permission_sms" msgid="6337141296535774786">"Tekstiviesti"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Yhteystiedot"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml b/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
index d0cee6f..753875b 100644
--- a/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Gestionnaire d\'appareil compagnon"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Autoriser &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à accéder à &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Autoriser l\'application &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à accéder à &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"montre"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Choisissez un(e) <xliff:g id="PROFILE_NAME">%1$s</xliff:g> qui sera géré(e) par &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Cette application est nécessaire pour gérer votre <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> aura l\'autorisation de synchroniser des informations, comme le nom de l\'appelant, d\'interagir avec vos notifications et d\'accéder à vos autorisations pour le téléphone, les messages texte, les contacts, l\'agenda, les journaux d\'appels et les appareils à proximité."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Cette application sera autorisée à synchroniser des informations, comme le nom de l\'appelant, et à accéder à ces autorisations sur votre <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Choisir un appareil qui sera géré par &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Choisir un appareil (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>) pour le configurer"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Cette application sera autorisée à synchroniser des informations, comme le nom de l\'appelant, et à accéder à ces autorisations sur votre <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Autoriser &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à gérer &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"lunettes"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Cette application est nécessaire pour gérer <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> sera autorisée à interagir avec vos notifications et à accéder à vos autorisations pour le téléphone, les messages texte, les contacts, le microphone et les appareils à proximité."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Cette application pourra accéder à ces autorisations sur votre <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"appareil"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Cette application pourra accéder à ces autorisations sur votre <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Autorisez &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à accéder à ces informations à partir de votre téléphone"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Services multiappareils"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> demande l\'autorisation au nom de votre <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> pour diffuser des applications entre vos appareils"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Autoriser &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; à effectuer cette action?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> demande l\'autorisation, au nom de votre <xliff:g id="DEVICE_NAME">%2$s</xliff:g>, de diffuser des applications et d\'autres fonctionnalités du système sur des appareils à proximité"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"appareil"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Cette application pourra synchroniser des informations, comme le nom de l\'appelant, entre votre téléphone et <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Cette application pourra synchroniser des informations, comme le nom de l\'appelant, entre votre téléphone et l\'appareil sélectionné"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Autoriser"</string>
     <string name="consent_no" msgid="2640796915611404382">"Ne pas autoriser"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Annuler"</string>
     <string name="consent_back" msgid="2560683030046918882">"Retour"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Développer <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Réduire <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Accorder aux applications sur &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; les autorisations déjà accordées sur &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Cela peut inclure l\'accès &lt;strong&gt;au microphone&lt;/strong&gt;, &lt;strong&gt;à l\'appareil photo&lt;/strong&gt;, et &lt;strong&gt;à la position&lt;/strong&gt;, ainsi que d\'autres autorisations sensibles sur &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Vous pouvez modifier ces autorisations à tout moment dans vos paramètres sur &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Icône de l\'application"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Bouton En savoir plus"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Plus de renseignements"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Téléphone"</string>
     <string name="permission_sms" msgid="6337141296535774786">"Messages texte"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contacts"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fr/strings.xml b/packages/CompanionDeviceManager/res/values-fr/strings.xml
index b51188e..d3704a0 100644
--- a/packages/CompanionDeviceManager/res/values-fr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fr/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Gestionnaire d\'appareils associés"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Autoriser &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à accéder à &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Autoriser l\'appli &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à accéder à &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"montre"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Sélectionnez le/la <xliff:g id="PROFILE_NAME">%1$s</xliff:g> qui sera géré(e) par &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Cette appli est nécessaire pour gérer <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> aura l\'autorisation de synchroniser des infos (comme le nom de l\'appelant), d\'interagir avec vos notifications et d\'accéder à votre téléphone, à votre agenda, ainsi qu\'à vos SMS, contacts, journaux d\'appels et appareils à proximité."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Cette appli sera autorisée à synchroniser des infos (comme le nom de l\'appelant) et disposera de ces autorisations sur votre <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Sélectionner l\'appareil qui sera géré par &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Sélectionner votre <xliff:g id="PROFILE_NAME">%1$s</xliff:g> à configurer"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Cette appli sera autorisée à synchroniser des infos (comme le nom de l\'appelant) et disposera de ces autorisations sur votre <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Autoriser &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à gérer &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"lunettes"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Cette appli est nécessaire pour gérer <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> aura l\'autorisation d\'interagir avec vos notifications et d\'accéder aux autorisations du téléphone, des SMS, des contacts, du micro et des appareils à proximité."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Cette appli sera autorisée à accéder à ces autorisations sur votre <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"appareil"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Cette appli sera autorisée à accéder à ces autorisations sur votre <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Autoriser &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à accéder à ces informations depuis votre téléphone"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Services inter-appareils"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> demande l\'autorisation au nom de votre <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> pour caster des applis d\'un appareil à l\'autre"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Autoriser &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; à effectuer cette action ?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> demande l\'autorisation au nom de votre <xliff:g id="DEVICE_NAME">%2$s</xliff:g> de diffuser des applis et d\'autres fonctionnalités système en streaming sur des appareils à proximité"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"appareil"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Cette appli pourra synchroniser des infos, comme le nom de l\'appelant, entre votre téléphone et <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Cette appli pourra synchroniser des infos, comme le nom de l\'appelant, entre votre téléphone et l\'appareil choisi"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Autoriser"</string>
     <string name="consent_no" msgid="2640796915611404382">"Ne pas autoriser"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Annuler"</string>
     <string name="consent_back" msgid="2560683030046918882">"Retour"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Développer <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Réduire <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Accorder les mêmes autorisations aux applis sur &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; que sur &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Ceci peut inclure l\'accès au &lt;strong&gt;micro&lt;/strong&gt;, à l\'&lt;strong&gt;appareil photo&lt;/strong&gt; et à la &lt;strong&gt;position&lt;/strong&gt;, ainsi que d\'autres autorisations sensibles sur &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Vous pouvez modifier ces autorisations à tout moment dans vos paramètres sur &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Icône d\'application"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Bouton Plus d\'informations"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"En savoir plus"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Téléphone"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contacts"</string>
@@ -69,6 +69,6 @@
     <string name="permission_app_streaming_summary" msgid="606923325679670624">"Diffuser en streaming les applis de votre téléphone"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Diffusez des applis et d\'autres fonctionnalités système en streaming depuis votre téléphone"</string>
-    <string name="device_type" product="default" msgid="8268703872070046263">"Téléphone"</string>
-    <string name="device_type" product="tablet" msgid="5038791954983067774">"Tablette"</string>
+    <string name="device_type" product="default" msgid="8268703872070046263">"téléphone"</string>
+    <string name="device_type" product="tablet" msgid="5038791954983067774">"tablette"</string>
 </resources>
diff --git a/packages/CompanionDeviceManager/res/values-gl/strings.xml b/packages/CompanionDeviceManager/res/values-gl/strings.xml
index f5017d1..a7aa72d 100644
--- a/packages/CompanionDeviceManager/res/values-gl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-gl/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Xestor de dispositivos complementarios"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Queres permitir que &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acceda ao dispositivo (&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;)?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Queres permitir que a aplicación &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acceda ao dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"reloxo"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Escolle un dispositivo (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>) para que o xestione a aplicación &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Esta aplicación é necesaria para xestionar o teu dispositivo (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>). <xliff:g id="APP_NAME">%2$s</xliff:g> poderá sincronizar información (por exemplo, o nome de quen chama), interactuar coas túas notificacións e acceder aos permisos do teu teléfono, das SMS, dos contactos, do calendario, dos rexistros de chamadas e dos dispositivos próximos."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Esta aplicación poderá sincronizar información (por exemplo, o nome de quen chama) e acceder a estes permisos do dispositivo (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Escolle un dispositivo para que o xestione a aplicación &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Escolle o perfil (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>) que queiras configurar"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Esta aplicación poderá sincronizar información (por exemplo, o nome de quen chama) e acceder a estes permisos do dispositivo (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Queres permitir que &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; xestione o dispositivo (&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;)?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"lentes"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Esta aplicación é necesaria para xestionar o dispositivo (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>). <xliff:g id="APP_NAME">%2$s</xliff:g> poderá interactuar coas túas notificacións e acceder aos permisos do teu teléfono, das SMS, dos contactos, do micrófono e dos dispositivos próximos."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Esta aplicación poderá acceder a estes permisos do dispositivo (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"dispositivo"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Esta aplicación poderá acceder a estes permisos do dispositivo (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Permitir que a aplicación &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acceda a esta información desde o teu teléfono"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Servizos multidispositivo"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> está solicitando permiso en nome do teu dispositivo (<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>) para emitir contido de aplicacións entre os teus aparellos"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Queres permitir que &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; leve a cabo esta acción?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> está solicitando permiso en nome do teu dispositivo (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>) para emitir o contido das aplicacións e doutras funcións do sistema en dispositivos próximos"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Esta aplicación poderá sincronizar información (por exemplo, o nome de quen chama) entre o teléfono e o dispositivo (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Esta aplicación poderá sincronizar información (por exemplo, o nome de quen chama) entre o teléfono e o dispositivo escollido"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
     <string name="consent_no" msgid="2640796915611404382">"Non permitir"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Cancelar"</string>
     <string name="consent_back" msgid="2560683030046918882">"Atrás"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Despregar <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Contraer <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Queres darlles ás aplicacións de &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; os mesmos permisos que teñen as de &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Con esta acción podes conceder acceso a &lt;strong&gt;Micrófono&lt;/strong&gt;, &lt;strong&gt;Cámara&lt;/strong&gt;, e &lt;strong&gt;Acceso á localización&lt;/strong&gt;, así como outros permisos de acceso á información confidencial de &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Podes cambiar estes permisos en calquera momento na configuración de &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Icona de aplicación"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Botón de máis información"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Máis información"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Teléfono"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contactos"</string>
diff --git a/packages/CompanionDeviceManager/res/values-gu/strings.xml b/packages/CompanionDeviceManager/res/values-gu/strings.xml
index e717c51..443fb4b 100644
--- a/packages/CompanionDeviceManager/res/values-gu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-gu/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"કમ્પેનિયન ડિવાઇસ મેનેજર"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;ને &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ઍક્સેસ કરવાની મંજૂરી આપીએ?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"શું &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;ને ઍક્સેસ કરવા માટે, &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ઍપને મંજૂરી આપીએ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"સ્માર્ટવૉચ"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; દ્વારા મેનેજ કરવા માટે કોઈ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> પસંદ કરો"</string>
-    <string name="summary_watch" msgid="898569637110705523">"તમારા <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ને મેનેજ કરવા માટે આ ઍપ જરૂરી છે. <xliff:g id="APP_NAME">%2$s</xliff:g>ને કૉલ કરનાર વ્યક્તિનું નામ જેવી માહિતી સિંક કરવાની, તમારા નોટિફિકેશન સાથે ક્રિયાપ્રતિક્રિયા કરવાની અને તમારો ફોન, SMS, સંપર્કો, Calendar, કૉલ લૉગ તથા નજીકના ડિવાઇસની પરવાનગીઓ ઍક્સેસ કરવાની મંજૂરી આપવામાં આવશે."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"આ ઍપને, કૉલ કરનાર વ્યક્તિનું નામ જેવી માહિતી સિંક કરવાની અને તમારા <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> પર આ પરવાનગીઓ ઍક્સેસ કરવાની મંજૂરી આપવામાં આવશે"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; દ્વારા મેનેજ કરવા માટે કોઈ ડિવાઇસ પસંદ કરો"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"સેટઅપ કરવા માટે કોઈ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> પસંદ કરો"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"આ ઍપને, કૉલ કરનાર વ્યક્તિનું નામ જેવી માહિતી સિંક કરવાની અને તમારા <xliff:g id="DEVICE_NAME">%1$s</xliff:g> પર આ પરવાનગીઓ ઍક્સેસ કરવાની મંજૂરી આપવામાં આવશે"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;ને &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; મેનેજ કરવા માટે મંજૂરી આપીએ?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"ચશ્માં"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>ને મેનેજ કરવા માટે આ ઍપ જરૂરી છે. <xliff:g id="APP_NAME">%2$s</xliff:g>ને તમારા નોટિફિકેશન સાથે ક્રિયાપ્રતિક્રિયા કરવાની અને તમારો ફોન, SMS, સંપર્કો, માઇક્રોફોન તથા નજીકના ડિવાઇસની પરવાનગીઓ ઍક્સેસ કરવાની મંજૂરી આપવામાં આવશે."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"આ ઍપને તમારા <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> પર આ પરવાનગીઓ ઍક્સેસ કરવાની મંજૂરી મળશે"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"ડિવાઇસ"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"આ ઍપને તમારા <xliff:g id="DEVICE_NAME">%1$s</xliff:g> પર આ પરવાનગીઓ ઍક્સેસ કરવાની મંજૂરી મળશે"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"તમારા ફોનમાંથી આ માહિતી ઍક્સેસ કરવા માટે, &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;ને મંજૂરી આપો"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"ક્રોસ-ડિવાઇસ સેવાઓ"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> તમારા <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> વતી તમારા ડિવાઇસ વચ્ચે ઍપ સ્ટ્રીમ કરવાની પરવાનગીની વિનંતી કરી રહી છે"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;ને આ પગલું ભરવાની મંજૂરી આપીએ?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> નજીકના ડિવાઇસ પર ઍપ અને સિસ્ટમની અન્ય સુવિધાઓ સ્ટ્રીમ કરવા તમારા <xliff:g id="DEVICE_NAME">%2$s</xliff:g> વતી પરવાનગીની વિનંતી કરી રહી છે"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ડિવાઇસ"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"આ ઍપ તમારા ફોન અને <xliff:g id="DEVICE_NAME">%1$s</xliff:g> વચ્ચે, કૉલ કરનાર કોઈ વ્યક્તિનું નામ જેવી માહિતી સિંક કરી શકશે"</string>
     <string name="summary_generic" msgid="1761976003668044801">"આ ઍપ તમારા ફોન અને પસંદ કરેલા ડિવાઇસ વચ્ચે, કૉલ કરનાર કોઈ વ્યક્તિનું નામ જેવી માહિતી સિંક કરી શકશે"</string>
     <string name="consent_yes" msgid="8344487259618762872">"મંજૂરી આપો"</string>
     <string name="consent_no" msgid="2640796915611404382">"મંજૂરી આપશો નહીં"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"રદ કરો"</string>
     <string name="consent_back" msgid="2560683030046918882">"પાછળ"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>ને મોટું કરો"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>ને નાનું કરો"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; પરની ઍપને &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; પર છે તે જ પરવાનગીઓ આપીએ?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"આમાં &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; પરના &lt;strong&gt;માઇક્રોફોન&lt;/strong&gt;, &lt;strong&gt;કૅમેરા&lt;/strong&gt; અને &lt;strong&gt;લોકેશનના ઍક્સેસ&lt;/strong&gt; તથા અન્ય સંવેદનશીલ માહિતીની પરવાનગીઓ શામેલ હોઈ શકે છે. &lt;br/&gt;&lt;br/&gt;તમે કોઈપણ સમયે &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g> પર તમારા સેટિંગમાં આ પરવાનગીઓમાં ફેરફાર કરી શકો છો&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"ઍપનું આઇકન"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"વધુ માહિતી માટેનું બટન"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"વધુ માહિતી"</string>
     <string name="permission_phone" msgid="2661081078692784919">"ફોન"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"સંપર્કો"</string>
diff --git a/packages/CompanionDeviceManager/res/values-hi/strings.xml b/packages/CompanionDeviceManager/res/values-hi/strings.xml
index 4f1f711..494af37 100644
--- a/packages/CompanionDeviceManager/res/values-hi/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hi/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"सहयोगी डिवाइस मैनेजर"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"क्या &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; को ऐक्सेस करने के लिए &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; को अनुमति देनी है?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"क्या &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; को ऐक्सेस करने के लिए &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ऐप्लिकेशन को अनुमति देनी है?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"स्मार्टवॉच"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"कोई <xliff:g id="PROFILE_NAME">%1$s</xliff:g> चुनें, ताकि उसे &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; की मदद से मैनेज किया जा सके"</string>
-    <string name="summary_watch" msgid="898569637110705523">"यह ऐप्लिकेशन, <xliff:g id="DEVICE_NAME">%1$s</xliff:g> को मैनेज करने के लिए ज़रूरी है. <xliff:g id="APP_NAME">%2$s</xliff:g> को डिवाइस की जानकारी सिंक करने की अनुमति होगी. जैसे, कॉल करने वाले व्यक्ति का नाम. इसे आपकी सूचनाओं पर कार्रवाई करने के साथ-साथ आपके फ़ोन, एसएमएस, संपर्कों, कैलेंडर, कॉल लॉग, और आस-पास मौजूद डिवाइसों को ऐक्सेस करने की अनुमति भी होगी."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"यह ऐप्लिकेशन, आपके <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> पर इन अनुमतियों को ऐक्सेस करने के साथ-साथ कॉल करने वाले व्यक्ति के नाम जैसी जानकारी सिंक कर पाएगा"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; से मैनेज किया जाने वाला डिवाइस चुनें"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"सेट अप करने के लिए कोई <xliff:g id="PROFILE_NAME">%1$s</xliff:g> चुनें"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"यह ऐप्लिकेशन, आपके <xliff:g id="DEVICE_NAME">%1$s</xliff:g> पर इन अनुमतियों को ऐक्सेस करने के साथ-साथ कॉल करने वाले व्यक्ति के नाम जैसी जानकारी सिंक कर पाएगा"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"क्या &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; को &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; मैनेज करने की अनुमति देनी है?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"चश्मा"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"यह ऐप्लिकेशन, <xliff:g id="DEVICE_NAME">%1$s</xliff:g> को मैनेज करने के लिए ज़रूरी है. <xliff:g id="APP_NAME">%2$s</xliff:g> को डिवाइस की सूचनाओं पर कार्रवाई करने की अनुमति होगी. इसे आपके फ़ोन, मैसेज, संपर्कों, माइक्रोफ़ोन, और आस-पास मौजूद डिवाइसों को ऐक्सेस करने की अनुमति भी होगी."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"यह ऐप्लिकेशन, आपके <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> पर इन अनुमतियों को ऐक्सेस कर पाएगा"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"डिवाइस"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"यह ऐप्लिकेशन, आपके <xliff:g id="DEVICE_NAME">%1$s</xliff:g> पर इन अनुमतियों को ऐक्सेस कर पाएगा"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; को अपने फ़ोन से यह जानकारी ऐक्सेस करने की अनुमति दें"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"क्रॉस-डिवाइस से जुड़ी सेवाएं"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> आपके <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> की ओर से, आपके डिवाइसों के बीच ऐप्लिकेशन स्ट्रीम करने की अनुमति मांग रहा है"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"क्या &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; को यह कार्रवाई करने की अनुमति देनी है?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> आपके <xliff:g id="DEVICE_NAME">%2$s</xliff:g> की ओर से, ऐप्लिकेशन और दूसरे सिस्टम की सुविधाओं को आस-पास मौजूद डिवाइसों पर स्ट्रीम करने की अनुमति मांग रहा है"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"डिवाइस"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"यह ऐप्लिकेशन, आपके फ़ोन और <xliff:g id="DEVICE_NAME">%1$s</xliff:g> के बीच जानकारी सिंक करेगा. जैसे, कॉल करने वाले व्यक्ति का नाम"</string>
     <string name="summary_generic" msgid="1761976003668044801">"यह ऐप्लिकेशन, आपके फ़ोन और चुने हुए डिवाइस के बीच जानकारी सिंक करेगा. जैसे, कॉल करने वाले व्यक्ति का नाम"</string>
     <string name="consent_yes" msgid="8344487259618762872">"अनुमति दें"</string>
     <string name="consent_no" msgid="2640796915611404382">"अनुमति न दें"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"रद्द करें"</string>
     <string name="consent_back" msgid="2560683030046918882">"वापस जाएं"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> को बड़ा करें"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> को छोटा करें"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"क्या &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; पर ऐप्लिकेशन को वही अनुमतियां देनी हैं जो &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; पर दी हैं?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"इसमें &lt;strong&gt;माइक्रोफ़ोन&lt;/strong&gt;, &lt;strong&gt;कैमरा&lt;/strong&gt;, &lt;strong&gt;जगह की जानकारी&lt;/strong&gt;, के ऐक्सेस के साथ-साथ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; पर संवेदनशील जानकारी ऐक्सेस करने की अन्य अनुमतियां भी शामिल हो सकती हैं. &lt;br/&gt;&lt;br/&gt;इन अनुमतियों को &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; में जाकर कभी-भी बदला जा सकता है."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"ऐप्लिकेशन आइकॉन"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"ज़्यादा जानकारी वाला बटन"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"ज़्यादा जानकारी"</string>
     <string name="permission_phone" msgid="2661081078692784919">"फ़ोन"</string>
     <string name="permission_sms" msgid="6337141296535774786">"मैसेज (एसएमएस)"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"संपर्क"</string>
@@ -68,7 +68,7 @@
     <string name="permission_notification_summary" msgid="884075314530071011">"इससे सभी सूचनाएं देखी जा सकती हैं. इनमें संपर्क, मैसेज, और फ़ोटो जैसी जानकारी शामिल होती है"</string>
     <string name="permission_app_streaming_summary" msgid="606923325679670624">"अपने फ़ोन पर मौजूद ऐप्लिकेशन स्ट्रीम करें"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
-    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"अपने फ़ोन से ऐप्लिकेशन और दूसरे सिस्टम की सुविधाओं को स्ट्रीम करें"</string>
+    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"अपने फ़ोन से ऐप्लिकेशन और सिस्टम की दूसरी सुविधाओं को स्ट्रीम करें"</string>
     <string name="device_type" product="default" msgid="8268703872070046263">"फ़ोन"</string>
     <string name="device_type" product="tablet" msgid="5038791954983067774">"टैबलेट"</string>
 </resources>
diff --git a/packages/CompanionDeviceManager/res/values-hr/strings.xml b/packages/CompanionDeviceManager/res/values-hr/strings.xml
index 84e8b63..5e175bc 100644
--- a/packages/CompanionDeviceManager/res/values-hr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hr/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Želite li dopustiti aplikaciji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; da pristupa &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Želite li dopustiti aplikaciji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; da pristupa &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"satom"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Odaberite <xliff:g id="PROFILE_NAME">%1$s</xliff:g> kojim će upravljati aplikacija &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Ta je aplikacija potrebna za upravljanje vašim uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Aplikacija <xliff:g id="APP_NAME">%2$s</xliff:g> moći će sinkronizirati podatke, primjerice ime pozivatelja, stupati u interakciju s vašim obavijestima i pristupati vašim dopuštenjima za telefon, SMS-ove, kontakte, kalendar, zapisnike poziva i uređaje u blizini."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Aplikacija će moći sinkronizirati podatke kao što je ime pozivatelja i pristupiti tim dopuštenjima na vašem <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Odaberite uređaj kojim će upravljati aplikacija &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Odaberite profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g> koji želite postaviti"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Aplikacija će moći sinkronizirati podatke kao što je ime pozivatelja i pristupiti tim dopuštenjima na vašem uređaju <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Dopustiti aplikaciji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; da upravlja uređajem &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"naočale"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Ta je aplikacija potrebna za upravljanje uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Aplikacija <xliff:g id="APP_NAME">%2$s</xliff:g> moći će stupati u interakciju s vašim obavijestima i pristupati vašim dopuštenjima za telefon, SMS-ove, kontakte, mikrofon i uređaje u blizini."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Aplikacija će moći pristupati ovim dopuštenjima na vašem <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"uređaj"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Aplikacija će moći pristupati ovim dopuštenjima na vašem uređaju <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Omogućite aplikaciji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; da pristupa informacijama s vašeg telefona"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Usluge na različitim uređajima"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> zahtijeva dopuštenje u ime vašeg uređaja <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> za stream aplikacija s jednog uređaja na drugi"</string>
@@ -35,18 +34,19 @@
     <string name="summary_computer" msgid="3798467601598297062"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Usluge za Google Play"</string>
     <string name="helper_summary_computer" msgid="8774832742608187072">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> zahtijeva dopuštenje u ime vašeg uređaja <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> za pristup fotografijama, medijskim sadržajima i obavijestima na telefonu"</string>
-    <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Dopustiti &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; da izvede tu radnju?"</string>
+    <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Želite li uređaju &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; dopustiti da izvrši tu radnju?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> zahtijeva dopuštenje u ime vašeg uređaja <xliff:g id="DEVICE_NAME">%2$s</xliff:g> za emitiranje aplikacija i drugih značajki sustava na uređajima u blizini"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"uređaj"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Ta će aplikacija moći sinkronizirati podatke između vašeg telefona i uređaja <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, primjerice ime pozivatelja"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Ta će aplikacija moći sinkronizirati podatke između vašeg telefona i odabranog uređaja, primjerice ime pozivatelja"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Dopusti"</string>
     <string name="consent_no" msgid="2640796915611404382">"Nemoj dopustiti"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Odustani"</string>
     <string name="consent_back" msgid="2560683030046918882">"Natrag"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Proširi <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Sažmi <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Dati jednaka dopuštenja aplikacijama na uređaju &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; kao i na uređaju &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"To može uključivati &lt;strong&gt;pristup mikrofonu&lt;/strong&gt;, &lt;strong&gt;kameri&lt;/strong&gt; i &lt;strong&gt;lokaciji&lt;/strong&gt; te druga dopuštenja za osjetljive podatke na uređaju &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Ta dopuštenja uvijek možete promijeniti u postavkama na uređaju &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ikona aplikacije"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Gumb Više informacija"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Više informacija"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontakti"</string>
@@ -68,7 +68,7 @@
     <string name="permission_notification_summary" msgid="884075314530071011">"Može čitati sve obavijesti, uključujući informacije kao što su kontakti, poruke i fotografije"</string>
     <string name="permission_app_streaming_summary" msgid="606923325679670624">"Streaming aplikacija vašeg telefona"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
-    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Emitiranje aplikacija i drugih značajki sustava s vašeg telefona"</string>
+    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Emitirajte stream aplikacija i drugih značajki sustava s vašeg telefona"</string>
     <string name="device_type" product="default" msgid="8268703872070046263">"telefonu"</string>
     <string name="device_type" product="tablet" msgid="5038791954983067774">"tabletu"</string>
 </resources>
diff --git a/packages/CompanionDeviceManager/res/values-hu/strings.xml b/packages/CompanionDeviceManager/res/values-hu/strings.xml
index 6057171..ba480f6 100644
--- a/packages/CompanionDeviceManager/res/values-hu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hu/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Társeszközök kezelője"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Engedélyezi a(z) &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; hozzáférését a következőhöz: &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Engedélyezi a(z) &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; alkalmazás számára, hogy hozzáférjen a következőhöz: &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"óra"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"A(z) &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; alkalmazással kezelni kívánt <xliff:g id="PROFILE_NAME">%1$s</xliff:g> kiválasztása"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Szükség van erre az alkalmazásra a következő kezeléséhez: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. A(z) <xliff:g id="APP_NAME">%2$s</xliff:g> képes lesz szinkronizálni információkat (például a hívó fél nevét), műveleteket végezhet majd az értesítésekkel, és hozzáférhet majd a Telefon, az SMS, a Névjegyek, a Naptár, a Hívásnaplók és a Közeli eszközök engedélyekhez."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Ez az alkalmazás képes lesz szinkronizálni információkat (például a hívó fél nevét), és hozzáférhet majd ezekhez az engedélyekhez az Ön <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> eszközén"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"A(z) &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; alkalmazással kezelni kívánt eszköz kiválasztása"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Válassza ki a beállítani kívánt <xliff:g id="PROFILE_NAME">%1$s</xliff:g> nevet."</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Ez az alkalmazás képes lesz szinkronizálni információkat (például a hívó fél nevét), és hozzáférhet majd ezekhez az engedélyekhez az Ön <xliff:g id="DEVICE_NAME">%1$s</xliff:g> eszközén"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Engedélyezi, hogy a(z) &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; kezelje a következő eszközt: &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"szemüveg"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Erre az alkalmazásra szükség van a következő eszköz kezeléséhez: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. A(z) <xliff:g id="APP_NAME">%2$s</xliff:g> műveleteket végezhet majd az értesítésekkel, és hozzáférhet majd a Telefon, az SMS, a Névjegyek, a Mikrofon és a Közeli eszközök engedélyekhez."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Az alkalmazás hozzáférhet majd ezekhez az engedélyekhez az Ön <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> eszközén"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"eszköz"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Az alkalmazás hozzáférhet majd ezekhez az engedélyekhez az Ön <xliff:g id="DEVICE_NAME">%1$s</xliff:g> eszközén"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Engedélyezi a(z) „<xliff:g id="APP_NAME">%1$s</xliff:g>” alkalmazás számára az információhoz való hozzáférést a telefonról"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Többeszközös szolgáltatások"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> engedélyt kér a(z) <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> nevében az alkalmazások eszközök közötti streameléséhez"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Engedélyezi a(z) &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; számára ennek a műveletnek a végrehajtását?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> engedélyt kér a(z) <xliff:g id="DEVICE_NAME">%2$s</xliff:g> nevében az alkalmazások és más rendszerfunkciók közeli eszközökre történő streamelésére"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"eszköz"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Ez az alkalmazás képes lesz szinkronizálni az olyan információkat a telefon és a(z) <xliff:g id="DEVICE_NAME">%1$s</xliff:g> eszköz között, mint például a hívó fél neve."</string>
     <string name="summary_generic" msgid="1761976003668044801">"Ez az alkalmazás képes lesz szinkronizálni az olyan információkat a telefon és a kiválasztott eszköz között, mint például a hívó fél neve."</string>
     <string name="consent_yes" msgid="8344487259618762872">"Engedélyezés"</string>
     <string name="consent_no" msgid="2640796915611404382">"Tiltás"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Mégse"</string>
     <string name="consent_back" msgid="2560683030046918882">"Vissza"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> kibontása"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> összecsukása"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Ugyanolyan engedélyeket ad a(z) &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; eszközön található alkalmazásoknak, mint a(z) &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; eszköz esetén?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Ide tartozhat a &lt;strong&gt;mikrofonhoz&lt;/strong&gt;, a &lt;strong&gt;kamerához&lt;/strong&gt; és a &lt;strong&gt;helyadatokhoz&lt;/strong&gt; való hozzáférés, valamint a(z) &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; eszközön érvényes egyéb bizalmas engedélyek is. &lt;br/&gt;&lt;br/&gt;Ezeket az engedélyeket bármikor módosíthatja a(z) &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; eszköz beállításai között."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Alkalmazás ikonja"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"További információ gomb"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"További információ"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Címtár"</string>
diff --git a/packages/CompanionDeviceManager/res/values-hy/strings.xml b/packages/CompanionDeviceManager/res/values-hy/strings.xml
index 7975361..9385fd1 100644
--- a/packages/CompanionDeviceManager/res/values-hy/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hy/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Թույլատրե՞լ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; հավելվածին կառավարել &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; սարքը"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Թույլատրե՞լ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; հավելվածին կառավարել &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; սարքը"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ժամացույց"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Ընտրեք <xliff:g id="PROFILE_NAME">%1$s</xliff:g>ը, որը պետք է կառավարվի &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; հավելվածի կողմից"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Այս հավելվածն անհրաժեշտ է ձեր <xliff:g id="DEVICE_NAME">%1$s</xliff:g> պրոֆիլը կառավարելու համար։ <xliff:g id="APP_NAME">%2$s</xliff:g> հավելվածը կկարողանա համաժամացնել տվյալները, օր․՝ զանգողի անունը, փոխազդել ձեր ծանուցումների հետ և կստանա «Հեռախոս», «SMS», «Կոնտակտներ», «Օրացույց», «Կանչերի ցուցակ» և «Մոտակա սարքեր» թույլտվությունները։"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Այս հավելվածը կկարողանա համաժամացնել տվյալները, օր․՝ զանգողի անունը, և կստանա հետևյալ թույլտվությունները ձեր <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ում"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Ընտրեք սարքը, որը պետք է կառավարվի &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; հավելվածի միջոցով"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Կարգավորելու համար ընտրեք <xliff:g id="PROFILE_NAME">%1$s</xliff:g>ը"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Այս հավելվածը կկարողանա համաժամացնել տվյալները, օր․՝ զանգողի անունը, և կստանա հետևյալ թույլտվությունները ձեր <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ում"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Թույլատրե՞լ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; հավելվածին կառավարել &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; սարքը"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"ակնոց"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Այս հավելվածն անհրաժեշտ է <xliff:g id="DEVICE_NAME">%1$s</xliff:g> սարքը կառավարելու համար։ <xliff:g id="APP_NAME">%2$s</xliff:g> հավելվածը կկարողանա փոխազդել ձեր ծանուցումների հետ և կստանա «Հեռախոս», «SMS», «Կոնտակտներ», «Խոսափող» և «Մոտակա սարքեր» թույլտվությունները։"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Այս հավելվածը կստանա հետևյալ թույլտվությունները ձեր <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ում"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"սարք"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Այս հավելվածը կստանա հետևյալ թույլտվությունները ձեր <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ում"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Թույլատրեք &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; հավելվածին օգտագործել այս տեղեկությունները ձեր հեռախոսից"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Միջսարքային ծառայություններ"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը ձեր <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> սարքի անունից թույլտվություն է խնդրում՝ ձեր սարքերի միջև հավելվածներ հեռարձակելու համար"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Թույլատրե՞լ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; հավելվածին կատարել այս գործողությունը"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը ձեր <xliff:g id="DEVICE_NAME">%2$s</xliff:g> սարքի անունից թույլտվություն է խնդրում՝ մոտակա սարքերին հավելվածներ և համակարգի այլ գործառույթներ հեռարձակելու համար"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"սարք"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Այս հավելվածը կկարողանա համաժամացնել ձեր հեռախոսի և <xliff:g id="DEVICE_NAME">%1$s</xliff:g> սարքի տվյալները, օր․՝ զանգողի անունը"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Այս հավելվածը կկարողանա համաժամացնել ձեր հեռախոսի և ընտրված սարքի տվյալները, օր․՝ զանգողի անունը"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Թույլատրել"</string>
     <string name="consent_no" msgid="2640796915611404382">"Չթույլատրել"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Չեղարկել"</string>
     <string name="consent_back" msgid="2560683030046918882">"Հետ"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Ծավալել «<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>» բաժինը"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Ծալել «<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>» բաժինը"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;-ում հավելվածներին տա՞լ նույն թույլտվությունները, ինչ &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;-ում"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Սա կարող է ներառել &lt;strong&gt;խոսափողի&lt;/strong&gt;, &lt;strong&amp;gtտեսախցիկի&lt;/strong&gt;, &lt;strong&gt;տեղադրության&lt;/strong&gt; և այլ կոնֆիդենցիալ տվյալների օգտագործման թույլտվությունները &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; սարքում։ &lt;br/&gt;&lt;br/&gt;Այդ թույլտվությունները ցանկացած ժամանակ կարող եք փոխել &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; սարքի ձեր կարգավորումներում։"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Հավելվածի պատկերակ"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"«Այլ տեղեկություններ» կոճակ"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Լրացուցիչ տեղեկություններ"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Հեռախոս"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Կոնտակտներ"</string>
diff --git a/packages/CompanionDeviceManager/res/values-in/strings.xml b/packages/CompanionDeviceManager/res/values-in/strings.xml
index 2876967..c03a5ab 100644
--- a/packages/CompanionDeviceManager/res/values-in/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-in/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Pengelola Perangkat Pendamping"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Izinkan &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; mengakses &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Izinkan aplikasi &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; mengakses &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"smartwatch"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Pilih <xliff:g id="PROFILE_NAME">%1$s</xliff:g> untuk dikelola oleh &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Aplikasi ini diperlukan untuk mengelola <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> akan diizinkan menyinkronkan info, seperti nama penelepon, berinteraksi dengan notifikasi, dan mengakses izin Telepon, SMS, Kontak, Kalender, Log panggilan, dan Perangkat di sekitar."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Aplikasi ini akan diizinkan menyinkronkan info, seperti nama penelepon, dan mengakses izin ini di <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> Anda"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Pilih perangkat untuk dikelola oleh &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Pilih <xliff:g id="PROFILE_NAME">%1$s</xliff:g> untuk disiapkan"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Aplikasi ini akan diizinkan menyinkronkan info, seperti nama penelepon, dan mengakses izin ini di <xliff:g id="DEVICE_NAME">%1$s</xliff:g> Anda"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Izinkan &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; mengelola &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"glasses"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Aplikasi ini diperlukan untuk mengelola <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> akan diizinkan berinteraksi dengan notifikasi dan mengakses izin Ponsel, SMS, Kontak, Mikrofon, dan Perangkat di sekitar."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Aplikasi ini akan diizinkan mengakses izin ini di <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> Anda"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"perangkat"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Aplikasi ini akan diizinkan mengakses izin ini di <xliff:g id="DEVICE_NAME">%1$s</xliff:g> Anda"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Izinkan &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; untuk mengakses informasi ini dari ponsel Anda"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Layanan lintas perangkat"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> meminta izin atas nama <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> untuk menstreaming aplikasi di antara perangkat Anda"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Izinkan &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; melakukan tindakan ini?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> meminta izin atas nama <xliff:g id="DEVICE_NAME">%2$s</xliff:g> untuk menstreaming aplikasi dan fitur sistem lainnya ke perangkat di sekitar"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"perangkat"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Aplikasi ini akan dapat menyinkronkan info, seperti nama penelepon, antara ponsel dan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Aplikasi ini akan dapat menyinkronkan info, seperti nama penelepon, antara ponsel dan perangkat yang dipilih"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Izinkan"</string>
     <string name="consent_no" msgid="2640796915611404382">"Jangan izinkan"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Batalkan"</string>
     <string name="consent_back" msgid="2560683030046918882">"Kembali"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Luaskan <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Ciutkan <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Berikan aplikasi di &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; izin yang sama seperti di &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Ini bisa termasuk &lt;strong&gt;Mikrofon&lt;/strong&gt;, &lt;strong&gt;Kamera&lt;/strong&gt;, dan &lt;strong&gt;Akses lokasi&lt;/strong&gt;, serta izin sensitif lainnya di &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Anda dapat mengubah izin ini kapan saja di Setelan &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ikon Aplikasi"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Tombol Informasi Lainnya"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Info Selengkapnya"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telepon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontak"</string>
@@ -64,7 +64,7 @@
     <string name="permission_contacts_summary" msgid="675861979475628708">"Dapat mengakses kontak Anda"</string>
     <string name="permission_calendar_summary" msgid="6460000922511766226">"Dapat mengakses kalender Anda"</string>
     <string name="permission_microphone_summary" msgid="3692091540613093394">"Dapat merekam audio"</string>
-    <string name="permission_nearby_devices_summary" msgid="931940524460876655">"Dapat menemukan, menghubungkan, dan menentukan posisi relatif dari perangkat di sekitar"</string>
+    <string name="permission_nearby_devices_summary" msgid="931940524460876655">"Dapat menemukan, terhubung ke, dan menentukan posisi relatif perangkat di sekitar"</string>
     <string name="permission_notification_summary" msgid="884075314530071011">"Dapat membaca semua notifikasi, termasuk informasi seperti kontak, pesan, dan foto"</string>
     <string name="permission_app_streaming_summary" msgid="606923325679670624">"Streaming aplikasi ponsel"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
diff --git a/packages/CompanionDeviceManager/res/values-is/strings.xml b/packages/CompanionDeviceManager/res/values-is/strings.xml
index bca9921..fc9f5a1 100644
--- a/packages/CompanionDeviceManager/res/values-is/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-is/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Stjórnun fylgdartækja"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Veita &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; aðgang að &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Veita forritinu &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; aðgang að &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"úr"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Velja <xliff:g id="PROFILE_NAME">%1$s</xliff:g> sem &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; á að stjórna"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Þetta forrit er nauðsynlegt til að stjórna <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> fær heimild til að samstilla upplýsingar, t.d. nafn þess sem hringir, og bregðast við tilkynningum og fær aðgang að heimildum fyrir síma, SMS, tengiliði, dagatal, símtalaskrár og nálæg tæki."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Þetta forrit fær heimild til að samstilla upplýsingar, t.d. nafn þess sem hringir, og fær aðgang að eftirfarandi heimildum í <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Veldu tæki sem &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; á að stjórna"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Veldu <xliff:g id="PROFILE_NAME">%1$s</xliff:g> til að setja upp"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Þetta forrit fær heimild til að samstilla upplýsingar, t.d. nafn þess sem hringir, og fær aðgang að eftirfarandi heimildum í <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Leyfa &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; að stjórna &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"gleraugu"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Þetta forrit er nauðsynlegt til að stjórna <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> fær heimild til að bregðast við tilkynningum og fær aðgang að heimildum fyrir síma, SMS, tengiliði, hljóðnema og nálæg tæki."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Þetta forrit fær aðgang að eftirfarandi heimildum í <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"tæki"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Þetta forrit fær aðgang að eftirfarandi heimildum í <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Veita &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; aðgang að þessum upplýsingum úr símanum þínum"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Þjónustur á milli tækja"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> biður um heimild fyrir <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> til að streyma forritum á milli tækjanna þinna"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Leyfa &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; að framkvæma þessa aðgerð?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> biður um heimild fyrir <xliff:g id="DEVICE_NAME">%2$s</xliff:g> til að streyma forritum og öðrum kerfiseiginleikum í nálægum tækjum"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"tæki"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Þetta forrit mun geta samstillt upplýsingar, t.d. nafn þess sem hringir, á milli símans og <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Þetta forrit mun geta samstillt upplýsingar, t.d. nafn þess sem hringir, á milli símans og valins tækis"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Leyfa"</string>
     <string name="consent_no" msgid="2640796915611404382">"Ekki leyfa"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Hætta við"</string>
     <string name="consent_back" msgid="2560683030046918882">"Til baka"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Stækka <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Minnka <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Veita forritum í &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; sömu heimildir og í &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Þetta getur átt við um &lt;strong&gt;hljóðnema&lt;/strong&gt;, &lt;strong&gt;myndavél&lt;/strong&gt;, &lt;strong&gt;aðgang að staðsetningu&lt;/strong&gt; og aðrar heimildir fyrir viðkvæmu efni í &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Þú getur breytt þessum heimildum hvenær sem er í stillingunum í &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Tákn forrits"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Hnappur fyrir upplýsingar"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Frekari upplýsingar"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Sími"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Tengiliðir"</string>
diff --git a/packages/CompanionDeviceManager/res/values-it/strings.xml b/packages/CompanionDeviceManager/res/values-it/strings.xml
index 5f5497ab5..be431b6 100644
--- a/packages/CompanionDeviceManager/res/values-it/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-it/strings.xml
@@ -16,16 +16,15 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="4470785958457506021">"Gestione dispositivi companion"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Vuoi consentire all\'app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; di accedere a &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="app_label" msgid="4470785958457506021">"Gestione dispositivi associati"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Vuoi consentire all\'app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; di accedere a &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"orologio"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Scegli un <xliff:g id="PROFILE_NAME">%1$s</xliff:g> da gestire con &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Questa app è necessaria per gestire <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> potrà sincronizzare informazioni, ad esempio il nome di un chiamante, interagire con le tue notifiche e accedere alle autorizzazioni Telefono, SMS, Contatti, Calendario, Registri chiamate e Dispositivi nelle vicinanze."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Questa app potrà sincronizzare informazioni, ad esempio il nome di un chiamante, e accedere alle seguenti autorizzazioni su <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>:"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Scegli un dispositivo che sia gestito da &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Scegli un <xliff:g id="PROFILE_NAME">%1$s</xliff:g> da configurare"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Questa app potrà sincronizzare informazioni, ad esempio il nome di un chiamante, e accedere alle seguenti autorizzazioni su <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Vuoi consentire all\'app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; di gestire &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"occhiali"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Questa app è necessaria per gestire <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> potrà interagire con le tue notifiche e accedere alle autorizzazioni Telefono, SMS, Contatti, Microfono e Dispositivi nelle vicinanze."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Questa app potrà accedere alle seguenti autorizzazioni su <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>:"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"dispositivo"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Questa app potrà accedere alle seguenti autorizzazioni su <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Consenti a &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; di accedere a queste informazioni dal tuo telefono"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Servizi cross-device"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> richiede per conto del tuo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> l\'autorizzazione a trasmettere app in streaming tra i dispositivi"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Vuoi consentire a &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; di compiere questa azione?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> richiede per conto di <xliff:g id="DEVICE_NAME">%2$s</xliff:g> l\'autorizzazione a trasmettere in streaming app e altre funzionalità di sistema ai dispositivi nelle vicinanze"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Questa app potrà sincronizzare informazioni, ad esempio il nome di un chiamante, tra il telefono e <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Questa app potrà sincronizzare informazioni, ad esempio il nome di un chiamante, tra il telefono e il dispositivo scelto"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Consenti"</string>
     <string name="consent_no" msgid="2640796915611404382">"Non consentire"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Annulla"</string>
     <string name="consent_back" msgid="2560683030046918882">"Indietro"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Espandi <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Comprimi <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Vuoi dare alle app su &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; le stesse autorizzazioni che hai dato su &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Potrebbero essere incluse le autorizzazioni &lt;strong&gt;Microfono&lt;/strong&gt;, &lt;strong&gt;Fotocamera&lt;/strong&gt; e &lt;strong&gt;Accesso alla posizione&lt;/strong&gt;, oltre ad altre autorizzazioni sensibili su &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Puoi cambiare queste autorizzazioni in qualsiasi momento nelle Impostazioni su &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Icona dell\'app"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Pulsante Altre informazioni"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Maggiori informazioni"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefono"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contatti"</string>
@@ -68,7 +68,7 @@
     <string name="permission_notification_summary" msgid="884075314530071011">"Puoi leggere tutte le notifiche, incluse le informazioni come contatti, messaggi e foto"</string>
     <string name="permission_app_streaming_summary" msgid="606923325679670624">"Trasmetti in streaming le app del tuo telefono"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
-    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Consente di trasmettere in streaming app e altre funzionalità di sistema dal telefono"</string>
+    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Trasmettere in streaming app e altre funzionalità di sistema dal telefono"</string>
     <string name="device_type" product="default" msgid="8268703872070046263">"telefono"</string>
     <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
 </resources>
diff --git a/packages/CompanionDeviceManager/res/values-iw/strings.xml b/packages/CompanionDeviceManager/res/values-iw/strings.xml
index 7dde216..8982660 100644
--- a/packages/CompanionDeviceManager/res/values-iw/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-iw/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"ניהול מכשיר מותאם"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"‏לאשר לאפליקציה ‎&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&amp;g;‎‏ לגשת אל ‎&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;‎‏?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"‏לאפשר לאפליקציה &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; לגשת אל &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"שעון"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"‏בחירת <xliff:g id="PROFILE_NAME">%1$s</xliff:g> לניהול באמצעות &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"‏האפליקציה הזו נחוצה כדי לנהל את <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. האפליקציה <xliff:g id="APP_NAME">%2$s</xliff:g> תוכל לסנכרן מידע, כמו השם של מישהו שמתקשר, לבצע פעולות בהתראות ולקבל הרשאות גישה לטלפון, ל-SMS, לאנשי הקשר, ליומן, ליומני השיחות ולמכשירים בקרבת מקום."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"האפליקציה הזו תוכל לסנכרן מידע, כמו השם של מישהו שמתקשר, ולגשת להרשאות האלה ב<xliff:g id="DEVICE_TYPE">%1$s</xliff:g> שלך"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"‏בחירה של מכשיר לניהול באמצעות &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"בחירת <xliff:g id="PROFILE_NAME">%1$s</xliff:g> להגדרה"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"האפליקציה הזו תוכל לסנכרן מידע, כמו השם של מישהו שמתקשר, ולגשת להרשאות האלה ב<xliff:g id="DEVICE_NAME">%1$s</xliff:g> שלך"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"‏מתן הרשאה לאפליקציה ‎&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&amp;g;‎‏ לנהל את ‎&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;‎‏"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"משקפיים"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"‏האפליקציה הזו נחוצה כדי לנהל את <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. האפליקציה <xliff:g id="APP_NAME">%2$s</xliff:g> תוכל לבצע פעולות בהתראות ותקבל הרשאות גישה לטלפון, ל-SMS לאנשי הקשר, למיקרופון ולמכשירים בקרבת מקום."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"האפליקציה הזו תוכל לגשת להרשאות האלה ב<xliff:g id="DEVICE_TYPE">%1$s</xliff:g> שלך"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"מכשיר"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"האפליקציה הזו תוכל לגשת להרשאות האלה ב<xliff:g id="DEVICE_NAME">%1$s</xliff:g> שלך"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"‏מתן אישור לאפליקציה &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; לגשת למידע הזה מהטלפון שלך"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"שירותים למספר מכשירים"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> מבקשת הרשאה עבור המכשיר <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> כדי לשדר אפליקציות בין המכשירים שלך"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"‏לתת הרשאה למכשיר &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; לבצע את הפעולה הזו?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> מבקשת הרשאה עבור <xliff:g id="DEVICE_NAME">%2$s</xliff:g> כדי להעביר אפליקציות ותכונות מערכת אחרות בסטרימינג למכשירים בקרבת מקום"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"מכשיר"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"האפליקציה הזו תוכל לסנכרן מידע, כמו השם של מישהו שמתקשר, מהטלפון שלך למכשיר <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"האפליקציה הזו תוכל לסנכרן מידע, כמו השם של מישהו שמתקשר, מהטלפון שלך למכשיר שבחרת"</string>
     <string name="consent_yes" msgid="8344487259618762872">"יש אישור"</string>
     <string name="consent_no" msgid="2640796915611404382">"אין אישור"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"ביטול"</string>
     <string name="consent_back" msgid="2560683030046918882">"חזרה"</string>
+    <string name="permission_expand" msgid="893185038020887411">"הרחבה של <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"כיווץ של <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"‏האם לתת לאפליקציות ב-‎&lt;strong&gt;‎‏<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>‏‎&lt;/strong&gt;‎‏ את אותן הרשאות כמו ב-‏‎&lt;strong&gt;‎‏<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>‏‎&lt;/strong&gt;‎‏?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"‏ההרשאות עשויות לכלול גישה ל&lt;strong&gt;מיקרופון&lt;/strong&gt;, ל&lt;strong&gt;מצלמה&lt;/strong&gt;, ול&lt;strong&gt;מיקום&lt;/strong&gt;, וכן גישה למידע רגיש אחר ב-&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;אפשר לשנות את ההרשאות האלה בכל שלב בהגדרות של &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"סמל האפליקציה"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"לחצן מידע נוסף"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"מידע נוסף"</string>
     <string name="permission_phone" msgid="2661081078692784919">"טלפון"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"אנשי קשר"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ja/strings.xml b/packages/CompanionDeviceManager/res/values-ja/strings.xml
index 8301654..186944a 100644
--- a/packages/CompanionDeviceManager/res/values-ja/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ja/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"コンパニオン デバイス マネージャー"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; に &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; へのアクセスを許可しますか?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; アプリに &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; へのアクセスを許可しますか?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ウォッチ"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; の管理対象となる<xliff:g id="PROFILE_NAME">%1$s</xliff:g>の選択"</string>
-    <string name="summary_watch" msgid="898569637110705523">"このアプリは<xliff:g id="DEVICE_NAME">%1$s</xliff:g>の管理に必要です。<xliff:g id="APP_NAME">%2$s</xliff:g> は通話相手の名前などの情報を同期したり、デバイスの通知を使用したり、電話、SMS、連絡先、カレンダー、通話履歴、付近のデバイスの権限にアクセスしたりできるようになります。"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"このアプリは、通話相手の名前などの情報を同期したり、<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>の以下の権限にアクセスしたりできるようになります"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; の管理対象となるデバイスの選択"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"設定する<xliff:g id="PROFILE_NAME">%1$s</xliff:g>の選択"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"このアプリは、通話相手の名前などの情報を同期したり、<xliff:g id="DEVICE_NAME">%1$s</xliff:g>の以下の権限にアクセスしたりできるようになります"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; に &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; の管理を許可しますか?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"眼鏡"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"このアプリは <xliff:g id="DEVICE_NAME">%1$s</xliff:g> の管理に必要です。<xliff:g id="APP_NAME">%2$s</xliff:g> はデバイスの通知を使用したり、電話、SMS、連絡先、マイク、付近のデバイスの権限にアクセスしたりできるようになります。"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"このアプリは、<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>の以下の権限にアクセスできるようになります"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"デバイス"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"このアプリは、<xliff:g id="DEVICE_NAME">%1$s</xliff:g>の以下の権限にアクセスできるようになります"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"スマートフォンのこの情報へのアクセスを &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; に許可"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"クロスデバイス サービス"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> が <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> に代わってデバイス間でアプリをストリーミングする権限をリクエストしています"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; にこの操作の実行を許可しますか?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> が <xliff:g id="DEVICE_NAME">%2$s</xliff:g> に代わって、アプリやその他のシステム機能を付近のデバイスにストリーミングする権限をリクエストしています"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"デバイス"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"このアプリは、あなたのスマートフォンと <xliff:g id="DEVICE_NAME">%1$s</xliff:g> との間で、通話相手の名前などの情報を同期できるようになります"</string>
     <string name="summary_generic" msgid="1761976003668044801">"このアプリは、あなたのスマートフォンと選択したデバイスとの間で、通話相手の名前などの情報を同期できるようになります"</string>
     <string name="consent_yes" msgid="8344487259618762872">"許可"</string>
     <string name="consent_no" msgid="2640796915611404382">"許可しない"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"キャンセル"</string>
     <string name="consent_back" msgid="2560683030046918882">"戻る"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>を開く"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>を閉じる"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; のアプリに &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; の場合と同じ権限を付与しますか?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"これには、&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; の&lt;strong&gt;マイク&lt;/strong&gt;、&lt;strong&gt;カメラ&lt;/strong&gt;、&lt;strong&gt;位置情報へのアクセス&lt;/strong&gt;や、その他の機密情報に関わる権限が含まれる可能性があります。&lt;br/&gt;&lt;br/&gt;これらの権限は &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; の [設定] でいつでも変更できます。"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"アプリのアイコン"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"詳細情報ボタン"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"詳細情報"</string>
     <string name="permission_phone" msgid="2661081078692784919">"電話"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"連絡先"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ka/strings.xml b/packages/CompanionDeviceManager/res/values-ka/strings.xml
index 88c03c6..a7c6042 100644
--- a/packages/CompanionDeviceManager/res/values-ka/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ka/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"კომპანიონი მოწყობილობების მენეჯერი"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"მიანიჭებთ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; აპს &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; მოწყობილობაზე წვდომას?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"ნებას რთავთ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; აპს, წვდომა ჰქონდეს &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; მოწყობილობაზე?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"საათი"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"აირჩიეთ <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, რომელიც უნდა მართოს &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;-მა"</string>
-    <string name="summary_watch" msgid="898569637110705523">"ეს აპი საჭიროა თქვენი <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ს სამართავად. <xliff:g id="APP_NAME">%2$s</xliff:g>-ს ექნება ისეთი ინფორმაციის სინქრონიზაციის უფლება, როგორიც იმ ადამიანის სახელია, რომელიც გირეკავთ; ასევე, თქვენს შეტყობინებებთან ინტერაქციისა და თქვენს ტელეფონზე, SMS-ებზე, კონტაქტებზე, კალენდარზე, ზარების ჟურნალებსა და ახლომახლო მოწყობილობების ნებართვებზე წვდომის უფლება."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"ეს აპი შეძლებს ინფორმაციის სინქრონიზებას (მაგალითად, იმ ადამიანის სახელი, რომელიც გირეკავთ) და ამ წვდომებზე უფლების მოპოვებას თქვენს <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>-ში"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"აირჩიეთ მოწყობილობა, რომელიც უნდა მართოს &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; აპმა"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"აირჩიეთ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> დასაყენებლად"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"ეს აპი შეძლებს, დაასინქრონოს ინფორმაცია, მაგალითად, შემომავალი ზარის ავტორის სახელი და წვდომა იქონიოს ამ ნებართვებზე თქვენს <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ში"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"ნება დართეთ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>-ს&lt;/strong&gt; მართოს &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"სათვალე"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"ეს აპი საჭიროა თქვენი <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ის სამართავად. <xliff:g id="APP_NAME">%2$s</xliff:g> შეძლებს თქვენს შეტყობინებებთან ინტერაქციას და თქვენს ტელეფონზე, SMS-ებზე, კონტაქტებზე, მიკროფონსა და ახლომახლო მოწყობილობების ნებართვებზე წვდომას."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"ეს აპი შეძლებს ამ ნებართვებზე წვდომას თქვენს <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>-ში"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"მოწყობილობა"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"ეს აპი შეძლებს ამ ნებართვებზე წვდომას თქვენს <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ში"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"ნება დართეთ, რომ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; აპს ჰქონდეს ამ ინფორმაციაზე წვდომა თქვენი ტელეფონიდან"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"მოწყობილობათშორისი სერვისები"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> ითხოვს უფლებას თქვენი <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>-ის სახელით, რომ მოწყობილობებს შორის სტრიმინგი შეძლოს"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"გსურთ ნება მისცეთ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ს&lt;/strong&gt; ამ მოქმედების შესასრულებლად?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> ითხოვს თქვენი <xliff:g id="DEVICE_NAME">%2$s</xliff:g>-ის სახელით აპების და სისტემის სხვა ფუნქციების ახლომახლო მოწყობილობებზე სტრიმინგის ნებართვას"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"მოწყობილობა"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"ეს აპი შეძლებს ინფორმაციის სინქრონიზებას თქვენს ტელეფონსა და თქვენ მიერ არჩეულ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ს შორის, მაგალითად, იმ ადამიანის სახელის, რომელიც გირეკავთ"</string>
     <string name="summary_generic" msgid="1761976003668044801">"ეს აპი შეძლებს ინფორმაციის სინქრონიზებას თქვენს ტელეფონსა და თქვენ მიერ არჩეულ მოწყობილობას შორის, მაგალითად, იმ ადამიანის სახელის, რომელიც გირეკავთ"</string>
     <string name="consent_yes" msgid="8344487259618762872">"დაშვება"</string>
     <string name="consent_no" msgid="2640796915611404382">"არ დაიშვას"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"გაუქმება"</string>
     <string name="consent_back" msgid="2560683030046918882">"უკან"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>-ის გაფართოება"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>-ის ჩაკეცვა"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"გსურთ აპებს &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;-ზე იგივე ნებართვები მიანიჭოთ, როგორიც აქვს &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;-ზე?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"ეს შესაძლოა მოიცავდეს შემდეგს: &lt;strong&gt;მიკროფონი&lt;/strong&gt;, &lt;strong&gt;კამერა&lt;/strong&gt; და &lt;strong&gt;მდებარეობაზე წვდომა&lt;/strong&gt; და &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;-ის სხვა ნებართვა სენსიტიურ ინფორმაციაზე. &lt;br/&gt;&lt;br/&gt;ამ ნებართვების შეცვლა ნებისმიერ დროს შეგიძლიათ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;-ის პარამეტრებიდან."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"აპის ხატულა"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"დამატებითი ინფორმაციის ღილაკი"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"მეტი ინფორმაცია"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Phone"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"კონტაქტები"</string>
diff --git a/packages/CompanionDeviceManager/res/values-kk/strings.xml b/packages/CompanionDeviceManager/res/values-kk/strings.xml
index fe3afa1..5c6d24a 100644
--- a/packages/CompanionDeviceManager/res/values-kk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-kk/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; қолданбасына &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; құрылғысын пайдалануға рұқсат беру керек пе?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; қолданбасына &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;? құрылғысына кіруге рұқсат беріңіз"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"сағат"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; арқылы басқарылатын <xliff:g id="PROFILE_NAME">%1$s</xliff:g> құрылғысын таңдаңыз"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Бұл қолданба <xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысын басқару үшін қажет. <xliff:g id="APP_NAME">%2$s</xliff:g> қолданбасы қоңырау шалушының аты сияқты деректі синхрондау, хабарландыруларды оқу және телефон, SMS, контактілер, күнтізбе, қоңырау журналдары мен маңайдағы құрылғылар рұқсаттарын пайдалана алады."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Бұл қолданба қоңырау шалушының аты сияқты деректі синхрондай алады және <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> құрылғысындағы мына рұқсаттарды пайдалана алады."</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; арқылы басқарылатын құрылғыны таңдаңыз"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Реттеу үшін <xliff:g id="PROFILE_NAME">%1$s</xliff:g> таңдаңыз"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Бұл қолданба қоңырау шалушының аты сияқты деректі синхрондай алады және <xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысындағы мына рұқсаттарды пайдалана алады."</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; қолданбасына &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; құрылғысын басқаруға рұқсат беру керек пе?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"көзілдірік"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Бұл қолданба <xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысын басқару үшін қажет. <xliff:g id="APP_NAME">%2$s</xliff:g> қолданбасына хабарландыруларды оқуға, телефонды, хабарларды, контактілерді, микрофон мен маңайдағы құрылғыларды пайдалануға рұқсат беріледі."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Бұл қолданба <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> құрылғысында осы рұқсаттарды пайдалана алады."</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"құрылғы"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Бұл қолданба <xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысында осы рұқсаттарды пайдалана алады."</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; қолданбасына телефоныңыздағы осы ақпаратты пайдалануға рұқсат беріңіз."</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Аралық құрылғы қызметтері"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> атынан құрылғылар арасында қолданбалар трансляциялау үшін рұқсат сұрайды."</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; құрылғысына бұл әрекетті орындауға рұқсат беру керек пе?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы <xliff:g id="DEVICE_NAME">%2$s</xliff:g> атынан қолданбалар мен басқа да жүйе функцияларын маңайдағы құрылғыларға трансляциялау рұқсатын сұрап тұр."</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"құрылғы"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Бұл қолданба телефон мен <xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысы арасында деректі (мысалы, қоңырау шалушының атын) синхрондай алады."</string>
     <string name="summary_generic" msgid="1761976003668044801">"Бұл қолданба телефон мен таңдалған құрылғы арасында деректі (мысалы, қоңырау шалушының атын) синхрондай алады."</string>
     <string name="consent_yes" msgid="8344487259618762872">"Рұқсат беру"</string>
     <string name="consent_no" msgid="2640796915611404382">"Рұқсат бермеу"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Бас тарту"</string>
     <string name="consent_back" msgid="2560683030046918882">"Артқа"</string>
+    <string name="permission_expand" msgid="893185038020887411">"\"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>\" панелін жаю"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"\"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>\" панелін жию"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; құрылғысындағы қолданбаларға &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; құрылғысындағыдай рұқсаттар берілсін бе?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Оған &lt;strong&gt;микрофонды&lt;/strong&gt;, &lt;strong&gt;камераны&lt;/strong&gt; және &lt;strong&gt;локацияны пайдалану рұқсаттары&lt;/strong&gt;, сондай-ақ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; құрылғысындағы басқа да құпия ақпарат рұқсаттары кіруі мүмкін. &lt;br/&gt;&lt;br/&gt;Бұл рұқсаттарды кез келген уақытта &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; құрылғысындағы параметрлерден өзгертуіңізге болады."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Қолданба белгішесі"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"\"Қосымша ақпарат\" түймесі"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Толық ақпарат"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Телефон"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Контактілер"</string>
diff --git a/packages/CompanionDeviceManager/res/values-km/strings.xml b/packages/CompanionDeviceManager/res/values-km/strings.xml
index 62ad055..c734cb6 100644
--- a/packages/CompanionDeviceManager/res/values-km/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-km/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"កម្មវិធី​គ្រប់​គ្រង​ឧបករណ៍ដៃគូ"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"អនុញ្ញាតឱ្យ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ចូលប្រើ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ឬ?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"អនុញ្ញាតឱ្យកម្មវិធី &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ចូលប្រើ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ឬ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"នាឡិកា"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"ជ្រើសរើស <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ដើម្បីឱ្យស្ថិតក្រោម​ការគ្រប់គ្រងរបស់ &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"ត្រូវការកម្មវិធីនេះ ដើម្បីគ្រប់គ្រង <xliff:g id="DEVICE_NAME">%1$s</xliff:g> របស់អ្នក។ <xliff:g id="APP_NAME">%2$s</xliff:g> នឹងត្រូវបានអនុញ្ញាតឱ្យ​ធ្វើសមកាលកម្មព័ត៌មាន ដូចជាឈ្មោះមនុស្សដែលហៅទូរសព្ទជាដើម ធ្វើអន្តរកម្មជាមួយការជូនដំណឹងរបស់អ្នក និងចូលប្រើការអនុញ្ញាតទូរសព្ទ, SMS, ទំនាក់ទំនង, ប្រតិទិន, កំណត់ហេតុហៅទូរសព្ទ និងឧបករណ៍នៅជិតរបស់អ្នក។"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"កម្មវិធីនេះនឹងត្រូវបានអនុញ្ញាតឱ្យធ្វើសមកាលកម្មព័ត៌មាន ដូចជាឈ្មោះមនុស្សដែលហៅទូរសព្ទជាដើម និងចូលប្រើការអនុញ្ញាតទាំងនេះនៅលើ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> របស់អ្នក"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"ជ្រើសរើសឧបករណ៍ ដើម្បីដាក់ក្រោម​ការគ្រប់គ្រងរបស់ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"ជ្រើសរើស <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ដើម្បីរៀបចំ"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"កម្មវិធីនេះនឹងត្រូវបានអនុញ្ញាតឱ្យធ្វើសមកាលកម្មព័ត៌មាន ដូចជាឈ្មោះមនុស្សដែលហៅទូរសព្ទជាដើម និងចូលប្រើប្រាស់ការអនុញ្ញាតទាំងនេះនៅលើ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> របស់អ្នក"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"អនុញ្ញាតឱ្យ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; គ្រប់គ្រង &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ឬ?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"វ៉ែនតា"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"ត្រូវការកម្មវិធីនេះ ដើម្បីគ្រប់គ្រង <xliff:g id="DEVICE_NAME">%1$s</xliff:g>។ <xliff:g id="APP_NAME">%2$s</xliff:g> នឹងត្រូវបានអនុញ្ញាតឱ្យ​ធ្វើអន្តរកម្មជាមួយ​ការជូនដំណឹងរបស់អ្នក និងចូលប្រើការអនុញ្ញាត​របស់ទូរសព្ទ, SMS, ទំនាក់ទំនង, មីក្រូហ្វូន និងឧបករណ៍នៅជិត​របស់អ្នក។"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"កម្មវិធីនេះ​នឹងត្រូវបានអនុញ្ញាតឱ្យ​ចូលប្រើការអនុញ្ញាតទាំងនេះ​នៅលើ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> របស់អ្នក"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"ឧបករណ៍"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"កម្មវិធីនេះ​នឹងត្រូវបានអនុញ្ញាតឱ្យ​ចូលប្រើប្រាស់ការអនុញ្ញាតទាំងនេះ​នៅលើ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> របស់អ្នក"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"អនុញ្ញាតឱ្យ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ចូលប្រើព័ត៌មាននេះពីទូរសព្ទរបស់អ្នក"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"សេវាកម្មឆ្លងកាត់ឧបករណ៍"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> កំពុងស្នើសុំការអនុញ្ញាតជំនួសឱ្យ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> របស់អ្នក ដើម្បីបញ្ចាំងកម្មវិធីរវាងឧបករណ៍របស់អ្នក"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"អនុញ្ញាតឱ្យ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ធ្វើសកម្មភាពនេះឬ?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> កំពុងស្នើសុំ​ការអនុញ្ញាតជំនួសឱ្យ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> របស់អ្នក ដើម្បីចាក់ផ្សាយកម្មវិធី និងមុខងារប្រព័ន្ធផ្សេងទៀត​ទៅកាន់​ឧបករណ៍នៅជិត"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ឧបករណ៍"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"កម្មវិធីនេះនឹងអាចធ្វើសមកាលកម្មព័ត៌មាន ដូចជាឈ្មោះមនុស្សដែលហៅទូរសព្ទជាដើម ​រវាង <xliff:g id="DEVICE_NAME">%1$s</xliff:g> និងទូរសព្ទរបស់អ្នក"</string>
     <string name="summary_generic" msgid="1761976003668044801">"កម្មវិធីនេះនឹងអាច​ធ្វើសមកាលកម្មព័ត៌មាន ដូចជាឈ្មោះមនុស្សដែលហៅទូរសព្ទជាដើម​ រវាងឧបករណ៍ដែលបានជ្រើសរើស និងទូរសព្ទរបស់អ្នក"</string>
     <string name="consent_yes" msgid="8344487259618762872">"អនុញ្ញាត"</string>
     <string name="consent_no" msgid="2640796915611404382">"មិនអនុញ្ញាត"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"បោះបង់"</string>
     <string name="consent_back" msgid="2560683030046918882">"ថយក្រោយ"</string>
+    <string name="permission_expand" msgid="893185038020887411">"ពង្រីក <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"បង្រួម <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"ផ្ដល់​ការអនុញ្ញាតឱ្យ​កម្មវិធីនៅលើ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ដូចនៅលើ &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ឬ?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"សកម្មភាពនេះ​អាចរួមបញ្ចូល&lt;strong&gt;មីក្រូហ្វូន&lt;/strong&gt; &lt;strong&gt;កាមេរ៉ា&lt;/strong&gt; និង&lt;strong&gt;សិទ្ធិចូលប្រើទីតាំង&lt;/strong&gt; និងការអនុញ្ញាត​ដែលមានលក្ខណៈរសើបផ្សេងទៀតនៅលើ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;។ &lt;br/&gt;&lt;br/&gt;អ្នកអាចប្ដូរ​ការអនុញ្ញាតទាំងនេះ​បានគ្រប់ពេល​នៅក្នុងការកំណត់​របស់អ្នកនៅលើ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;។"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"រូប​កម្មវិធី"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"ប៊ូតុងព័ត៌មានបន្ថែម"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"ព័ត៌មាន​បន្ថែម"</string>
     <string name="permission_phone" msgid="2661081078692784919">"ទូរសព្ទ"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contacts"</string>
diff --git a/packages/CompanionDeviceManager/res/values-kn/strings.xml b/packages/CompanionDeviceManager/res/values-kn/strings.xml
index 940c8f9..5f04cd3 100644
--- a/packages/CompanionDeviceManager/res/values-kn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-kn/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"ಕಂಪ್ಯಾನಿಯನ್ ಸಾಧನ ನಿರ್ವಾಹಕರು"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ಅನ್ನು ಪ್ರವೇಶಿಸಲು &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ಗೆ ಅನುಮತಿಸಬೇಕೇ?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ಅನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸಬೇಕೆ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ವೀಕ್ಷಿಸಿ"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; ಮೂಲಕ ನಿರ್ವಹಿಸಬೇಕಾದ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
-    <string name="summary_watch" msgid="898569637110705523">"ನಿಮ್ಮ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಅನ್ನು ನಿರ್ವಹಿಸಲು ಈ ಆ್ಯಪ್‌ನ ಅಗತ್ಯವಿದೆ. ಕರೆ ಮಾಡುವವರ ಹೆಸರು, ನಿಮ್ಮ ಅಧಿಸೂಚನೆಗಳೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸಲು ಮತ್ತು ಫೋನ್, SMS, ಸಂಪರ್ಕಗಳು, ಕ್ಯಾಲೆಂಡರ್, ಕರೆಯ ಲಾಗ್‌ಗಳು ಮತ್ತು ಸಮೀಪದಲ್ಲಿರುವ ಸಾಧನಗಳ ದೃಢೀಕರಣಗಳಂತಹ ಮಾಹಿತಿಯನ್ನು ಸಿಂಕ್ ಮಾಡಲು <xliff:g id="APP_NAME">%2$s</xliff:g> ಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"ಕರೆ ಮಾಡುವವರ ಹೆಸರಿನಂತಹ ಮಾಹಿತಿಯನ್ನು ಸಿಂಕ್ ಮಾಡಲು ಮತ್ತು ಈ ಅನುಮತಿಗಳನ್ನು ನಿಮ್ಮ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ನಲ್ಲಿ ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಈ ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸಲಾಗುತ್ತದೆ"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ಮೂಲಕ ನಿರ್ವಹಿಸಬೇಕಾದ ಸಾಧನವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"ಸೆಟಪ್ ಮಾಡಲು <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ಅನ್ನು ಆರಿಸಿ"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"ಕರೆ ಮಾಡುವವರ ಹೆಸರಿನಂತಹ ಮಾಹಿತಿಯನ್ನು ಸಿಂಕ್ ಮಾಡಲು ಮತ್ತು ಈ ಅನುಮತಿಗಳನ್ನು ನಿಮ್ಮ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ನಲ್ಲಿ ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಈ ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸಲಾಗುತ್ತದೆ"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;? ನಿರ್ವಹಿಸಲು &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ಗೆ ಅನುಮತಿಸಬೇಕೇ?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"ಗ್ಲಾಸ್‌ಗಳು"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಅನ್ನು ನಿರ್ವಹಿಸಲು ಈ ಆ್ಯಪ್‌ನ ಅಗತ್ಯವಿದೆ. <xliff:g id="APP_NAME">%2$s</xliff:g> ನಿಮ್ಮ ಅಧಿಸೂಚನೆಗಳೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸಲು ಮತ್ತು ನಿಮ್ಮ ಫೋನ್, SMS, ಸಂಪರ್ಕಗಳು, ಮೈಕ್ರೊಫೋನ್ ಮತ್ತು ಸಮೀಪದಲ್ಲಿರುವ ಸಾಧನಗಳ ಅನುಮತಿಗಳನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಅನುಮತಿಸಲಾಗುತ್ತದೆ."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"ನಿಮ್ಮ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ನಲ್ಲಿ ಈ ಅನುಮತಿಗಳನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಈ ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸಲಾಗುತ್ತದೆ"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"ಸಾಧನ"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"ನಿಮ್ಮ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ನಲ್ಲಿ ಈ ಅನುಮತಿಗಳನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಈ ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸಲಾಗುತ್ತದೆ"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"ನಿಮ್ಮ ಫೋನ್ ಮೂಲಕ ಈ ಮಾಹಿತಿಯನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ಗೆ ಅನುಮತಿಸಿ"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"ಕ್ರಾಸ್-ಡಿವೈಸ್ ಸೇವೆಗಳು"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"ನಿಮ್ಮ ಸಾಧನಗಳ ನಡುವೆ ಆ್ಯಪ್‌ಗಳನ್ನು ಸ್ಟ್ರೀಮ್ ಮಾಡಲು ನಿಮ್ಮ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ನ ಪರವಾಗಿ <xliff:g id="APP_NAME">%1$s</xliff:g> ಅನುಮತಿಯನ್ನು ವಿನಂತಿಸಿಕೊಳ್ಳುತ್ತಿದೆ"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"ಈ ಆ್ಯಕ್ಷನ್ ಅನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ಅನುಮತಿಸಬೇಕೇ?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"ಸಮೀಪದಲ್ಲಿರುವ ಸಾಧನಗಳಿಗೆ ಆ್ಯಪ್‌ಗಳು ಮತ್ತು ಇತರ ಸಿಸ್ಟಂ ಫೀಚರ್‌ಗಳನ್ನು ಸ್ಟ್ರೀಮ್ ಮಾಡಲು ನಿಮ್ಮ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> ರ ಪರವಾಗಿ <xliff:g id="APP_NAME">%1$s</xliff:g> ಅನುಮತಿಯನ್ನು ವಿನಂತಿಸುತ್ತಿದೆ"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ಸಾಧನ"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"ಮೊಬೈಲ್ ಫೋನ್ ಮತ್ತು <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಸಾಧನದ ನಡುವೆ, ಕರೆ ಮಾಡುವವರ ಹೆಸರಿನಂತಹ ಮಾಹಿತಿಯನ್ನು ಸಿಂಕ್ ಮಾಡಲು ಈ ಆ್ಯಪ್‌ಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ"</string>
     <string name="summary_generic" msgid="1761976003668044801">"ಮೊಬೈಲ್ ಫೋನ್ ಮತ್ತು ಆಯ್ಕೆಮಾಡಿದ ಸಾಧನದ ನಡುವೆ, ಕರೆ ಮಾಡುವವರ ಹೆಸರಿನಂತಹ ಮಾಹಿತಿಯನ್ನು ಸಿಂಕ್ ಮಾಡಲು ಈ ಆ್ಯಪ್‌ಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ"</string>
     <string name="consent_yes" msgid="8344487259618762872">"ಅನುಮತಿಸಿ"</string>
     <string name="consent_no" msgid="2640796915611404382">"ಅನುಮತಿಸಬೇಡಿ"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"ರದ್ದುಮಾಡಿ"</string>
     <string name="consent_back" msgid="2560683030046918882">"ಹಿಂದೆ"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ಅನ್ನು ವಿಸ್ತರಿಸಿ"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ಅನ್ನು ಕುಗ್ಗಿಸಿ"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;/strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ನಲ್ಲಿನ ಅನುಮತಿಗಳನ್ನೇ &lt;/strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ನಲ್ಲಿನ ಆ್ಯಪ್‌ಗಳಿಗೆ ನೀಡಬೇಕೆ?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"ಇದು &lt;strong&gt;ಮೈಕ್ರೋಫೋನ್&lt;/strong&gt;, &lt;strong&gt;ಕ್ಯಾಮರಾ&lt;/strong&gt;, and &lt;strong&gt;ಸ್ಥಳದ ಆ್ಯಕ್ಸೆಸ್&lt;/strong&gt;, ಮತ್ತು &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; ನಲ್ಲಿ ಸೂಕ್ಷ್ಮ ಮಾಹಿತಿಗಾಗಿ ಇತರ ಅನುಮತಿಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು. &lt;br/&gt;&lt;br/&gt;ನೀವು &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; ನಲ್ಲಿನ ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಈ ಅನುಮತಿಗಳನ್ನು ಯಾವಾಗ ಬೇಕಾದರೂ ಬದಲಾಯಿಸಬಹುದು."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"ಆ್ಯಪ್ ಐಕಾನ್"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"ಹೆಚ್ಚಿನ ಮಾಹಿತಿಯ ಬಟನ್"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"ಇನ್ನಷ್ಟು ಮಾಹಿತಿ"</string>
     <string name="permission_phone" msgid="2661081078692784919">"ಫೋನ್"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"ಸಂಪರ್ಕಗಳು"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ko/strings.xml b/packages/CompanionDeviceManager/res/values-ko/strings.xml
index 5c225c2..e4c56b2 100644
--- a/packages/CompanionDeviceManager/res/values-ko/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ko/strings.xml
@@ -17,36 +17,36 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"부속 기기 관리자"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;에서 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;에 액세스하도록 허용하시겠습니까?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;앱에서 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;에 액세스하도록 허용하시겠습니까?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"시계"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;에서 관리할 <xliff:g id="PROFILE_NAME">%1$s</xliff:g>을(를) 선택"</string>
-    <string name="summary_watch" msgid="898569637110705523">"이 앱은 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 기기를 관리하는 데 필요합니다. <xliff:g id="APP_NAME">%2$s</xliff:g>에서 정보(예: 발신자 이름)를 동기화하고, 알림과 상호작용하고, 전화, SMS, 연락처, 캘린더, 통화 기록 및 근처 기기에 액세스할 수 있게 됩니다."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"이 앱이 정보(예: 발신자 이름)를 동기화하고 <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>에서 이러한 권한에 액세스할 수 있게 됩니다."</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;에서 관리할 기기 선택"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"설정할 <xliff:g id="PROFILE_NAME">%1$s</xliff:g> 선택"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"이 앱이 정보(예: 발신자 이름)를 동기화하고 <xliff:g id="DEVICE_NAME">%1$s</xliff:g>에서 이러한 권한에 액세스할 수 있게 됩니다."</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;에서 &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;? 기기를 관리하도록 허용"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"안경"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"이 앱은 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 기기를 관리하는 데 필요합니다. <xliff:g id="APP_NAME">%2$s</xliff:g>에서 알림과 상호작용하고 내 전화, SMS, 연락처, 마이크, 근처 기기에 대한 권한을 갖게 됩니다."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"앱이 <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>에서 이러한 권한에 액세스할 수 있게 됩니다."</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"기기"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"앱이 <xliff:g id="DEVICE_NAME">%1$s</xliff:g>에서 이러한 권한에 액세스할 수 있게 됩니다."</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;이 휴대전화의 이 정보에 액세스하도록 허용합니다."</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"교차 기기 서비스"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> 대신 기기 간에 앱을 스트리밍할 수 있는 권한을 요청하고 있습니다."</string>
     <string name="title_automotive_projection" msgid="3296005598978412847"></string>
     <string name="summary_automotive_projection" msgid="8683801274662496164"></string>
-    <string name="title_computer" msgid="4693714143506569253">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 앱이 휴대전화에서 이 정보에 액세스하도록 허용"</string>
+    <string name="title_computer" msgid="4693714143506569253">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;이 휴대전화에서 이 정보에 액세스하도록 허용"</string>
     <string name="summary_computer" msgid="3798467601598297062"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play 서비스"</string>
     <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> 대신 휴대전화의 사진, 미디어, 알림에 액세스할 수 있는 권한을 요청하고 있습니다."</string>
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 기기가 이 작업을 수행하도록 허용하시겠습니까?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 <xliff:g id="DEVICE_NAME">%2$s</xliff:g> 대신 근처 기기로 앱 및 기타 시스템 기능을 스트리밍할 권한을 요청하고 있습니다."</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"기기"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"이 앱에서 휴대전화와 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 간에 정보(예: 발신자 이름)를 동기화할 수 있게 됩니다."</string>
     <string name="summary_generic" msgid="1761976003668044801">"이 앱에서 휴대전화와 선택한 기기 간에 정보(예: 발신자 이름)를 동기화할 수 있게 됩니다."</string>
     <string name="consent_yes" msgid="8344487259618762872">"허용"</string>
     <string name="consent_no" msgid="2640796915611404382">"허용 안함"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"취소"</string>
     <string name="consent_back" msgid="2560683030046918882">"뒤로"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> 펼치기"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> 접기"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;에 설치된 앱에 &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;에 설치된 앱과 동일한 권한을 부여하시겠습니까?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"여기에는 &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;의 &lt;strong&gt;마이크&lt;/strong&gt;, &lt;strong&gt;카메라&lt;/strong&gt;, &lt;strong&gt;위치 정보 액세스&lt;/strong&gt; 및 기타 민감한 권한이 포함될 수 있습니다. &lt;br/&gt;&lt;br/&gt;언제든지 &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;의 설정에서 이러한 권한을 변경할 수 있습니다."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"앱 아이콘"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"추가 정보 버튼"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"자세히 알아보기"</string>
     <string name="permission_phone" msgid="2661081078692784919">"전화"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"연락처"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ky/strings.xml b/packages/CompanionDeviceManager/res/values-ky/strings.xml
index ed750a8..d33cced 100644
--- a/packages/CompanionDeviceManager/res/values-ky/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ky/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; колдонмосуна &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; түзмөгүнө кирүүгө уруксат бересизби?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; колдонмосуна &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; түзмөгүнө кирүүгө уруксат бересизби?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"саат"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; тарабынан башкарылсын"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Бул колдонмо <xliff:g id="DEVICE_NAME">%1$s</xliff:g> түзмөгүңүздү башкаруу үчүн керек. <xliff:g id="APP_NAME">%2$s</xliff:g> маалыматты шайкештирип, мисалы, билдирмелериңизди көрүп, телефонуңуз, SMS билдирүүлөр, байланыштар, жылнаама, чалуулар тизмеси жана жакын жердеги түзмөктөргө болгон уруксаттарды пайдалана алат."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Бул колдонмого маалыматты, мисалы, чалып жаткан адамдын аты-жөнүн шайкештирүүгө жана <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> түзмөгүңүздө төмөнкүлөрдү аткарууга уруксат берилет"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; аркылуу башкарыла турган түзмөктү тандаңыз"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Тууралоо үчүн <xliff:g id="PROFILE_NAME">%1$s</xliff:g> тандаңыз"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Бул колдонмого маалыматты, мисалы, чалып жаткан адамдын аты-жөнүн шайкештирүүгө жана <xliff:g id="DEVICE_NAME">%1$s</xliff:g> түзмөгүңүздө төмөнкүлөрдү аткарууга уруксат берилет"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; колдонмосуна &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; түзмөгүн тескөөгө уруксат бересизби?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"көз айнектер"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Бул колдонмо <xliff:g id="DEVICE_NAME">%1$s</xliff:g> түзмөгүн башкаруу үчүн керек. <xliff:g id="APP_NAME">%2$s</xliff:g> билдирмелериңизди көрүп, телефонуңуз, SMS билдирүүлөр, Байланыштар, Микрофон жана Жакын жердеги түзмөктөргө болгон уруксаттарды пайдалана алат."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Бул колдонмого <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> түзмөгүңүздө төмөнкүлөрдү аткарууга уруксат берилет"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"түзмөк"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Бул колдонмого <xliff:g id="DEVICE_NAME">%1$s</xliff:g> түзмөгүңүздө төмөнкүлөрдү аткарууга уруксат берилет"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; колдонмосуна телефонуңуздагы ушул маалыматты көрүүгө уруксат бериңиз"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Түзмөктөр аралык кызматтар"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> түзмөгүңүздүн атынан түзмөктөрүңүздүн ортосунда колдонмолорду алып ойнотууга уруксат сурап жатат"</string>
@@ -36,17 +35,18 @@
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play кызматтары"</string>
     <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> түзмөгүңүздүн атынан телефондогу сүрөттөрдү, медиа файлдарды жана билдирмелерди колдонууга уруксат сурап жатат"</string>
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; түзмөгүнө бул аракетти аткарууга уруксат бересизби?"</string>
-    <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="DEVICE_NAME">%2$s</xliff:g> түзмөгүңүздүн атынан жакын жердеги түзмөктөрдө колдонмолорду жана тутумдун башка функцияларын алып ойнотууга уруксат сурап жатат"</string>
+    <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="DEVICE_NAME">%2$s</xliff:g> түзмөгүңүздүн атынан жакын жердеги түзмөктөрдө колдонмолорду жана системанын башка функцияларын алып ойнотууга уруксат сурап жатат"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"түзмөк"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Бул колдонмо маалыматты шайкештире алат, мисалы, чалып жаткан кишинин атын телефон жана <xliff:g id="DEVICE_NAME">%1$s</xliff:g> түзмөгү менен шайкештирет"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Бул колдонмо маалыматты шайкештире алат, мисалы, чалып жаткан кишинин атын телефон жана тандалган түзмөк менен шайкештирет"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Ооба"</string>
     <string name="consent_no" msgid="2640796915611404382">"Уруксат берилбесин"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Жокко чыгаруу"</string>
     <string name="consent_back" msgid="2560683030046918882">"Артка"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> жайып көрсөтүү"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> жыйыштыруу"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; түзмөгүнө да &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; түзмөгүнө берилген уруксаттар берилсинби?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Буга &lt;strong&gt;Микрофонду&lt;/strong&gt;, &lt;strong&gt;Камераны&lt;/strong&gt; пайдалануу жана &lt;strong&gt;Жайгашкан жерди аныктоо&lt;/strong&gt;, ошондой эле &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; түзмөгүндөгү башка купуя маалыматты көрүүгө уруксаттар кириши мүмкүн. &lt;br/&gt;&lt;br/&gt;Каалаган убакта &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; түзмөгүндөгү параметрлерге өтүп, бул уруксаттарды өзгөртө аласыз."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Колдонмонун сүрөтчөсү"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Дагы маалымат баскычы"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Кеңири маалымат"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Телефон"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Байланыштар"</string>
@@ -68,7 +68,7 @@
     <string name="permission_notification_summary" msgid="884075314530071011">"Бардык билдирмелерди, анын ичинде байланыштар, билдирүүлөр жана сүрөттөр сыяктуу маалыматты окуй алат"</string>
     <string name="permission_app_streaming_summary" msgid="606923325679670624">"Телефондогу колдонмолорду алып ойнотуу"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
-    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Телефонуңуздагы колдонмолорду жана тутумдун башка функцияларын алып ойнотуу"</string>
+    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Телефонуңуздагы колдонмолорду жана системанын башка функцияларын алып ойнотуу"</string>
     <string name="device_type" product="default" msgid="8268703872070046263">"телефон"</string>
     <string name="device_type" product="tablet" msgid="5038791954983067774">"планшет"</string>
 </resources>
diff --git a/packages/CompanionDeviceManager/res/values-lo/strings.xml b/packages/CompanionDeviceManager/res/values-lo/strings.xml
index 9058820..0072e4b 100644
--- a/packages/CompanionDeviceManager/res/values-lo/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-lo/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"ຕົວຈັດການອຸປະກອນປະກອບ"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"ອະນຸຍາດ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ໃຫ້ເຂົ້າເຖິງ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ບໍ?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"ອະນຸຍາດໃຫ້ແອັບ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ເຂົ້າເຖິງ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ບໍ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ໂມງ"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"ເລືອກ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ເພື່ອໃຫ້ຖືກຈັດການໂດຍ &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"ຕ້ອງໃຊ້ແອັບນີ້ເພື່ອຈັດການ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ຂອງທ່ານ. <xliff:g id="APP_NAME">%2$s</xliff:g> ຈະໄດ້ຮັບອະນຸຍາດໃຫ້ຊິ້ງຂໍ້ມູນ ເຊັ່ນ: ຊື່ຂອງຄົນທີ່ໂທເຂົ້າ, ການໂຕ້ຕອບກັບການແຈ້ງເຕືອນຂອງທ່ານ ແລະ ສິດເຂົ້າເຖິງໂທລະສັບ, SMS, ລາຍຊື່ຜູ້ຕິດຕໍ່, ປະຕິທິນ, ບັນທຶກການໂທ ແລະ ອຸປະກອນທີ່ຢູ່ໃກ້ຄຽງຂອງທ່ານ."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"ແອັບນີ້ຈະໄດ້ຮັບອະນຸຍາດໃຫ້ຊິ້ງຂໍ້ມູນ, ເຊັ່ນ: ຊື່ຂອງຄົນທີ່ໂທເຂົ້າ ແລະ ສິດເຂົ້າເຖິງການອະນຸຍາດເຫຼົ່ານີ້ຢູ່ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ຂອງທ່ານ"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"ເລືອກອຸປະກອນທີ່ຈະໃຫ້ມີການຈັດການໂດຍ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"ເລືອກ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ທີ່ຈະຕັ້ງຄ່າ"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"ແອັບນີ້ຈະໄດ້ຮັບອະນຸຍາດໃຫ້ຊິ້ງຂໍ້ມູນ, ເຊັ່ນ: ຊື່ຂອງຄົນທີ່ໂທເຂົ້າ ແລະ ສິດເຂົ້າເຖິງການອະນຸຍາດເຫຼົ່ານີ້ຢູ່ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ຂອງທ່ານ"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"ອະນຸຍາດ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ຈັດການ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ບໍ?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"ແວ່ນຕາ"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"ຕ້ອງໃຊ້ແອັບນີ້ເພື່ອຈັດການ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> ຈະໄດ້ຮັບອະນຸຍາດໃຫ້ໂຕ້ຕອບກັບການແຈ້ງເຕືອນຂອງທ່ານ ແລະ ການອະນຸຍາດສິດເຂົ້າເຖິງໂທລະສັບ, SMS, ລາຍຊື່ຜູ້ຕິດຕໍ່, ໄມໂຄຣໂຟນ ແລະ ອຸປະກອນທີ່ຢູ່ໃກ້ຄຽງຂອງທ່ານ."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"ແອັບນີ້ຈະໄດ້ຮັບສິດເຂົ້າເຖິງການອະນຸຍາດເຫຼົ່ານີ້ຢູ່ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ຂອງທ່ານ"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"ອຸປະກອນ"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"ແອັບນີ້ຈະໄດ້ຮັບສິດເຂົ້າເຖິງການອະນຸຍາດເຫຼົ່ານີ້ຢູ່ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ຂອງທ່ານ"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"ອະນຸຍາດ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ໃຫ້ເຂົ້າເຖິງຂໍ້ມູນນີ້ຈາກໂທລະສັບຂອງທ່ານໄດ້"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"ບໍລິການຂ້າມອຸປະກອນ"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> ກຳລັງຮ້ອງຂໍການອະນຸຍາດໃນນາມຂອງ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ເພື່ອສະຕຣີມແອັບລະຫວ່າງອຸປະກອນຕ່າງໆຂອງທ່ານ"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"ອະນຸຍາດ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ເພື່ອດຳເນີນຄຳສັ່ງນີ້ບໍ?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> ກໍາລັງຮ້ອງຂໍການອະນຸຍາດໃນນາມ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> ຂອງທ່ານເພື່ອສະຕຣີມແອັບ ແລະ ຄຸນສົມບັດລະບົບອື່ນໆໄປຫາອຸປະກອນທີ່ຢູ່ໃກ້ຄຽງ"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ອຸປະກອນ"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"ແອັບນີ້ຈະສາມາດຊິ້ງຂໍ້ມູນ ເຊັ່ນ: ຊື່ຂອງຄົນທີ່ໂທເຂົ້າ, ລະຫວ່າງໂທລະສັບຂອງທ່ານ ແລະ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ໄດ້"</string>
     <string name="summary_generic" msgid="1761976003668044801">"ແອັບນີ້ຈະສາມາດຊິ້ງຂໍ້ມູນ ເຊັ່ນ: ຊື່ຂອງຄົນທີ່ໂທເຂົ້າ, ລະຫວ່າງໂທລະສັບຂອງທ່ານ ແລະ ອຸປະກອນທີ່ເລືອກໄວ້ໄດ້"</string>
     <string name="consent_yes" msgid="8344487259618762872">"ອະນຸຍາດ"</string>
     <string name="consent_no" msgid="2640796915611404382">"ບໍ່ອະນຸຍາດ"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"ຍົກເລີກ"</string>
     <string name="consent_back" msgid="2560683030046918882">"ກັບຄືນ"</string>
+    <string name="permission_expand" msgid="893185038020887411">"ຂະຫຍາຍ <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"ຫຍໍ້ <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ລົງ"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"ໃຫ້ການອະນຸຍາດແອັບຢູ່ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ເປັນການອະນຸຍາດດຽວກັນກັບຢູ່ &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ບໍ?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"ສິ່ງນີ້ອາດຮວມມີສິດເຂົ້າເຖິງ &lt;strong&gt;ໄມໂຄຣໂຟນ&lt;/strong&gt;, &lt;strong&gt;ກ້ອງຖ່າຍຮູບ&lt;/strong&gt; ແລະ &lt;strong&gt;ສະຖານທີ່&lt;/strong&gt; ພ້ອມທັງການອະນຸຍາດທີ່ລະອຽດອ່ອນອື່ນໆຢູ່ໃນ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;ທ່ານສາມາດປ່ຽນແປງສິດການອະນຸຍາດເຫຼົ່ານີ້ໄດ້ທຸກເວລາໃນການຕັ້ງຄ່າຂອງທ່ານຢູ່ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"ໄອຄອນແອັບ"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"ປຸ່ມຂໍ້ມູນເພີ່ມເຕີມ"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"ຂໍ້ມູນເພີ່ມເຕີມ"</string>
     <string name="permission_phone" msgid="2661081078692784919">"ໂທລະສັບ"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"ລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
diff --git a/packages/CompanionDeviceManager/res/values-lt/strings.xml b/packages/CompanionDeviceManager/res/values-lt/strings.xml
index 7af2476..65a266d 100644
--- a/packages/CompanionDeviceManager/res/values-lt/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-lt/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Leisti &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; pasiekti &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Leisti programai &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; pasiekti &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"laikrodį"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Jūsų <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, kurį valdys &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; (pasirinkite)"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Ši programa reikalinga norint tvarkyti jūsų įrenginį „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“. Programai „<xliff:g id="APP_NAME">%2$s</xliff:g>“ bus leidžiama sinchronizuoti tam tikrą informaciją, pvz., skambinančio asmens vardą, sąveikauti su jūsų pranešimais ir pasiekti jūsų leidimus „Telefonas“, „SMS“, „Kontaktai“, „Kalendorius“, „Skambučių žurnalai“ ir „Įrenginiai netoliese."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Šiai programai bus leidžiama sinchronizuoti tam tikrą informaciją, pvz., skambinančio asmens vardą, ir pasiekti toliau nurodytus leidimus jūsų <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Įrenginio, kuris bus valdomas naudojant programą &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;, pasirinkimas"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Norimo nustatyti <xliff:g id="PROFILE_NAME">%1$s</xliff:g> pasirinkimas"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Šiai programai bus leidžiama sinchronizuoti tam tikrą informaciją, pvz., skambinančio asmens vardą, ir pasiekti toliau nurodytus <xliff:g id="DEVICE_NAME">%1$s</xliff:g> leidimus"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Leisti &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; valdyti &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"akiniai"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Ši programa reikalinga norint tvarkyti įrenginį „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“. Programai „<xliff:g id="APP_NAME">%2$s</xliff:g>“ bus leidžiama sąveikauti su jūsų pranešimais ir pasiekti jūsų leidimus „Telefonas“, „SMS“, „Kontaktai“, „Mikrofonas“ ir „Įrenginiai netoliese“."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Šiai programai bus leidžiama pasiekti toliau nurodytus leidimus jūsų <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"įrenginio"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Šiai programai bus leidžiama pasiekti toliau nurodytus <xliff:g id="DEVICE_NAME">%1$s</xliff:g> leidimus."</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="2396773196949578425">"Programa „<xliff:g id="APP_NAME">%1$s</xliff:g>“ prašo leidimo jūsų „<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>“ vardu, kad galėtų srautu perduoti programas iš vieno įrenginio į kitą"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Leisti &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; atlikti šį veiksmą?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ prašo leidimo jūsų „<xliff:g id="DEVICE_NAME">%2$s</xliff:g>“ vardu, kad galėtų srautu perduoti programas ir kitas sistemos funkcijas įrenginiams netoliese"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"įrenginys"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Ši programa galės sinchronizuoti tam tikrą informaciją, pvz., skambinančio asmens vardą, su jūsų telefonu ir įrenginiu „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Ši programa galės sinchronizuoti tam tikrą informaciją, pvz., skambinančio asmens vardą, su jūsų telefonu ir pasirinktu įrenginiu"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Leisti"</string>
     <string name="consent_no" msgid="2640796915611404382">"Neleisti"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Atšaukti"</string>
     <string name="consent_back" msgid="2560683030046918882">"Atgal"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Išskleisti „<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>“"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Sutraukti „<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>“"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Suteikti &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; esančioms programoms tuos pačius leidimus kaip &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; esančioms programoms?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Tai gali apimti &lt;strong&gt;mikrofono&lt;/strong&gt;, &lt;strong&gt;fotoaparato&lt;/strong&gt;, ir &lt;strong&gt;prieigos prie vietovės&lt;/strong&gt;, leidimus bei kitus leidimus pasiekti neskelbtiną informaciją įrenginyje &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Šiuos leidimus galite bet kada pakeisti įrenginio &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; nustatymų skiltyje."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Programos piktograma"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Mygtukas „Daugiau informacijos“"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Daugiau informacijos"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefonas"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontaktai"</string>
diff --git a/packages/CompanionDeviceManager/res/values-lv/strings.xml b/packages/CompanionDeviceManager/res/values-lv/strings.xml
index b74834b..1d29edc 100644
--- a/packages/CompanionDeviceManager/res/values-lv/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-lv/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Palīgierīču pārzinis"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Vai atļaut lietotnei &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; piekļūt ierīcei &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Vai atļaut lietotnei &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; piekļūt lietotnei &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"pulkstenis"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Profila (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>) izvēle, ko pārvaldīt lietotnē &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Šī lietotne ir nepieciešama jūsu ierīces (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>) pārvaldībai. <xliff:g id="APP_NAME">%2$s</xliff:g> drīkstēs sinhronizēt informāciju (piemēram, zvanītāja vārdu), mijiedarboties ar jūsu paziņojumiem un piekļūt atļaujām Tālrunis, Īsziņas, Kontaktpersonas, Kalendārs, Zvanu žurnāli un Tuvumā esošas ierīces."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Šī lietotne drīkstēs sinhronizēt informāciju, piemēram, zvanītāja vārdu, un piekļūt norādītajām atļaujām jūsu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Izvēlieties ierīci, ko pārvaldīt lietotnē &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Jāizvēlas <xliff:g id="PROFILE_NAME">%1$s</xliff:g> iestatīšanai"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Šī lietotne drīkstēs sinhronizēt informāciju, piemēram, zvanītāja vārdu, un piekļūt norādītajām atļaujām jūsu ierīcē (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)."</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Vai atļaut lietotnei &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; piekļūt ierīcei &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"brilles"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Šī lietotne ir nepieciešama šādas ierīces pārvaldībai: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> drīkstēs mijiedarboties ar jūsu paziņojumiem un piekļūt atļaujām Tālrunis, Īsziņas, Kontaktpersonas, Mikrofons un Tuvumā esošas ierīces."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Šai lietotnei tiks sniegta piekļuve norādītajām atļaujām jūsu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"ierīce"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Šai lietotnei tiks sniegta piekļuve norādītajām atļaujām jūsu ierīcē (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)."</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Atļaut lietotnei &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; piekļūt šai informācijai no jūsu tālruņa"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Vairāku ierīču pakalpojumi"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Lietotne <xliff:g id="APP_NAME">%1$s</xliff:g> pieprasa atļauju straumēt lietotnes starp jūsu ierīcēm šīs ierīces vārdā: <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>."</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Vai atļaut ierīcei &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; veikt šo darbību?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> pieprasa atļauju tuvumā esošās ierīcēs straumēt lietotnes un citas sistēmas funkcijas šīs ierīces vārdā: <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ierīce"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Šī lietotne varēs sinhronizēt informāciju (piemēram, zvanītāja vārdu) starp jūsu tālruni un šo ierīci: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Šī lietotne varēs sinhronizēt informāciju (piemēram, zvanītāja vārdu) starp jūsu tālruni un izvēlēto ierīci"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Atļaut"</string>
     <string name="consent_no" msgid="2640796915611404382">"Neatļaut"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Atcelt"</string>
     <string name="consent_back" msgid="2560683030046918882">"Atpakaļ"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Izvērst: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Sakļaut: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Vai lietotnēm ierīcē &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; piešķirt tādas pašas atļaujas kā ierīcē &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Tās var būt &lt;strong&gt;mikrofona&lt;/strong&gt;, &lt;strong&gt;kameras&lt;/strong&gt;, &lt;strong&gt;atrašanās vietas piekļuves&lt;/strong&gt; atļaujas, kā arī citas sensitīvas atļaujas ierīcē &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Atļaujas varat jebkurā brīdī mainīt ierīces &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; iestatījumos."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Lietotnes ikona"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Plašākas informācijas poga"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Plašāka informācija"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Tālrunis"</string>
     <string name="permission_sms" msgid="6337141296535774786">"Īsziņas"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontaktpersonas"</string>
diff --git a/packages/CompanionDeviceManager/res/values-mk/strings.xml b/packages/CompanionDeviceManager/res/values-mk/strings.xml
index f420766..e72e960 100644
--- a/packages/CompanionDeviceManager/res/values-mk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-mk/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Ќе дозволите &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; да пристапува до &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Дозволувате апликацијата &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; да пристапува до &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"часовник"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Изберете <xliff:g id="PROFILE_NAME">%1$s</xliff:g> со којшто ќе управува &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Апликацијава е потребна за управување со вашиот <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> ќе може да ги синхронизира податоците како што се имињата на јавувачите, да остварува интеракција со известувањата и да пристапува до дозволите за „Телефон“, SMS, „Контакти“, „Календар“, „Евиденција на повици“ и „Уреди во близина“."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Оваа апликација ќе има дозвола да ги синхронизира податоците како што се имињата на јавувачите и да пристапува до следниве дозволи на вашиот <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Изберете уред со којшто ќе управува &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Изберете <xliff:g id="PROFILE_NAME">%1$s</xliff:g> за поставување"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Апликацијава ќе има дозвола да ги синхронизира податоците како што се имињата на јавувачите и да пристапува до следниве дозволи на вашиот <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Ќе дозволите &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; да управува со &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"очила"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Апликацијава е потребна за управување со <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> ќе може да остварува интеракција со известувањата и да пристапува до дозволите за „Телефон“, SMS, „Контакти“, „Микрофон“ и „Уреди во близина“."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Апликацијава ќе може да пристапува до овие дозволи на <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"уред"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Апликацијава ќе може да пристапува до овие дозволи на <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Овозможете &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; да пристапува до овие податоци на телефонот"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Повеќенаменски услуги"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> бара дозвола во име на вашиот <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> за да стримува апликации помеѓу вашите уреди"</string>
@@ -36,17 +35,18 @@
     <string name="helper_title_computer" msgid="4671071173916176037">"Услуги на Google Play"</string>
     <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g> бара дозвола во име на вашиот <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> за да пристапува до фотографиите, аудиовизуелните содржини и известувањата на телефонот"</string>
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Ќе дозволите &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; да го преземе ова дејство?"</string>
-    <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> бара дозвола во име на вашиот <xliff:g id="DEVICE_NAME">%2$s</xliff:g> за да стримува апликации и други системски карактеристики на уредите во близина"</string>
+    <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> бара дозвола во име на вашиот <xliff:g id="DEVICE_NAME">%2$s</xliff:g> за да стримува апликации и други системски функции на уредите во близина"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"уред"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Оваа апликација ќе може да ги синхронизира податоците како што се имињата на јавувачите помеѓу вашиот телефон и <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Оваа апликација ќе може да ги синхронизира податоците како што се имињата на јавувачите помеѓу вашиот телефон и избраниот уред"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Дозволи"</string>
     <string name="consent_no" msgid="2640796915611404382">"Не дозволувај"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Откажи"</string>
     <string name="consent_back" msgid="2560683030046918882">"Назад"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Прошири <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Собери <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Дасе дадат исти дозволи на апликациите на &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; како на &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Ова може да вклучува дозволи за пристап до &lt;strong&gt;микрофонот&lt;/strong&gt;, &lt;strong&gt;камерата&lt;/strong&gt; и &lt;strong&gt;локацијата&lt;/strong&gt;, како и други чувствителни дозволи на &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Дозволиве може да ги промените во секое време во „Поставки“ на &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Икона на апликацијата"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Копче за повеќе информации"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Повеќе детали"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Телефон"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Контакти"</string>
@@ -68,7 +68,7 @@
     <string name="permission_notification_summary" msgid="884075314530071011">"може да ги чита сите известувања, вклучително и податоци како контакти, пораки и фотографии"</string>
     <string name="permission_app_streaming_summary" msgid="606923325679670624">"Стримувајте ги апликациите на телефонот"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
-    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Апликации за стриминг и други системски карактеристики од вашиот телефон"</string>
-    <string name="device_type" product="default" msgid="8268703872070046263">"телефон"</string>
-    <string name="device_type" product="tablet" msgid="5038791954983067774">"таблет"</string>
+    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Апликации за стриминг и други системски функции од вашиот телефон"</string>
+    <string name="device_type" product="default" msgid="8268703872070046263">"Телефон"</string>
+    <string name="device_type" product="tablet" msgid="5038791954983067774">"Таблет"</string>
 </resources>
diff --git a/packages/CompanionDeviceManager/res/values-ml/strings.xml b/packages/CompanionDeviceManager/res/values-ml/strings.xml
index 0a9adb6..1703742 100644
--- a/packages/CompanionDeviceManager/res/values-ml/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ml/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"കമ്പാനിയൻ ഉപകരണ മാനേജർ"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ആക്‌സസ് ചെയ്യാൻ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; എന്നതിനെ അനുവദിക്കണോ?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ആക്‌സസ് ചെയ്യാൻ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; എന്ന ആപ്പിനെ അനുവദിക്കണോ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"വാച്ച്"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; ഉപയോഗിച്ച് മാനേജ് ചെയ്യുന്നതിന് ഒരു <xliff:g id="PROFILE_NAME">%1$s</xliff:g> തിരഞ്ഞെടുക്കുക"</string>
-    <string name="summary_watch" msgid="898569637110705523">"നിങ്ങളുടെ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> മാനേജ് ചെയ്യാൻ ഈ ആപ്പ് ആവശ്യമാണ്. വിളിക്കുന്നയാളുടെ പേര് പോലുള്ള വിവരങ്ങൾ സമന്വയിപ്പിക്കുന്നതിനും നിങ്ങളുടെ അറിയിപ്പുകളുമായി സംവദിക്കാനും നിങ്ങളുടെ ഫോൺ, SMS, Contacts, Calendar, കോൾ ചരിത്രം, സമീപമുള്ള ഉപകരണങ്ങളുടെ അനുമതികൾ എന്നിവ ആക്‌സസ് ചെയ്യാനും <xliff:g id="APP_NAME">%2$s</xliff:g> ആപ്പിനെ അനുവദിക്കും."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"വിളിക്കുന്നയാളുടെ പേര് പോലുള്ള വിവരങ്ങൾ സമന്വയിപ്പിക്കാനും നിങ്ങളുടെ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> എന്നതിൽ ഈ അനുമതികൾ ആക്സസ് ചെയ്യാനും ഈ ആപ്പിനെ അനുവദിക്കും"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ഉപയോഗിച്ച് മാനേജ് ചെയ്യുന്നതിന് ഒരു ഉപകരണം തിരഞ്ഞെടുക്കുക"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"സജ്ജീകരിക്കാൻ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> തിരഞ്ഞെടുക്കുക"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"വിളിക്കുന്നയാളുടെ പേര് പോലുള്ള വിവരങ്ങൾ സമന്വയിപ്പിക്കാനും നിങ്ങളുടെ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> എന്നതിൽ ഈ അനുമതികൾ ആക്സസ് ചെയ്യാനും ഈ ആപ്പിനെ അനുവദിക്കും"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;? മാനേജ് ചെയ്യാൻ, &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; എന്നതിനെ അനുവദിക്കുക"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"ഗ്ലാസുകൾ"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> മാനേജ് ചെയ്യാൻ ഈ ആപ്പ് ആവശ്യമാണ്. നിങ്ങളുടെ അറിയിപ്പുകളുമായി ഇടപഴകാനും ഫോൺ, SMS, കോൺടാക്റ്റുകൾ, മൈക്രോഫോൺ, സമീപമുള്ള ഉപകരണങ്ങളുടെ അനുമതികൾ എന്നിവ ആക്‌സസ് ചെയ്യാനും <xliff:g id="APP_NAME">%2$s</xliff:g> എന്നതിനെ അനുവദിക്കും."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"നിങ്ങളുടെ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> എന്നതിൽ ഇനിപ്പറയുന്ന അനുമതികൾ ആക്‌സസ് ചെയ്യാൻ ഈ ആപ്പിനെ അനുവദിക്കും"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"ഉപകരണം"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"നിങ്ങളുടെ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> എന്നതിൽ ഇനിപ്പറയുന്ന അനുമതികൾ ആക്സസ് ചെയ്യാൻ ഈ ആപ്പിനെ അനുവദിക്കും"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"നിങ്ങളുടെ ഫോണിൽ നിന്ന് ഈ വിവരങ്ങൾ ആക്‌സസ് ചെയ്യാൻ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ആപ്പിനെ അനുവദിക്കുക"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"ക്രോസ്-ഉപകരണ സേവനങ്ങൾ"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"നിങ്ങളുടെ ഉപകരണങ്ങളിൽ ഒന്നിൽ നിന്ന് അടുത്തതിലേക്ക് ആപ്പുകൾ സ്ട്രീം ചെയ്യാൻ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> എന്ന ഉപകരണത്തിന് വേണ്ടി <xliff:g id="APP_NAME">%1$s</xliff:g> എന്നത് അനുമതി അഭ്യർത്ഥിക്കുന്നു"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"ഈ പ്രവർത്തനം നടത്താൻ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; എന്നതിനെ അനുവദിക്കണോ?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"സമീപമുള്ള ഉപകരണങ്ങളിൽ ആപ്പുകളും മറ്റ് സിസ്റ്റം ഫീച്ചറുകളും സ്ട്രീം ചെയ്യാൻ നിങ്ങളുടെ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> എന്നതിന് വേണ്ടി <xliff:g id="APP_NAME">%1$s</xliff:g> അനുമതി അഭ്യർത്ഥിക്കുന്നു"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ഉപകരണം"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"വിളിക്കുന്നയാളുടെ പേര് പോലുള്ള വിവരങ്ങൾ നിങ്ങളുടെ ഫോണിനും <xliff:g id="DEVICE_NAME">%1$s</xliff:g> എന്നതിനും ഇടയിൽ സമന്വയിപ്പിക്കുന്നതിന് ഈ ആപ്പിന് കഴിയും"</string>
     <string name="summary_generic" msgid="1761976003668044801">"വിളിക്കുന്നയാളുടെ പേര് പോലുള്ള വിവരങ്ങൾ നിങ്ങളുടെ ഫോണിനും തിരഞ്ഞെടുത്ത ഉപകരണത്തിനും ഇടയിൽ സമന്വയിപ്പിക്കുന്നതിന് ഈ ആപ്പിന് കഴിയും"</string>
     <string name="consent_yes" msgid="8344487259618762872">"അനുവദിക്കുക"</string>
     <string name="consent_no" msgid="2640796915611404382">"അനുവദിക്കരുത്"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"റദ്ദാക്കുക"</string>
     <string name="consent_back" msgid="2560683030046918882">"മടങ്ങുക"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> വികസിപ്പിക്കുക"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ചുരുക്കുക"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; എന്നതിലെ അതേ അനുമതികൾ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; എന്നതിലെ ആപ്പുകൾക്ക് നൽകണോ?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. എന്നതിലെ &lt;strong&gt;മൈക്രോഫോൺ&lt;/strong&gt;, &lt;strong&gt;ക്യാമറ&lt;/strong&gt;, and &lt;strong&gt;ലൊക്കേഷൻ ആക്‌സസ്&lt;/strong&gt;, സെൻസിറ്റീവ് വിവരങ്ങൾക്കുള്ള മറ്റ് അനുമതികൾ എന്നിവയും ഇതിൽ ഉൾപ്പെട്ടേക്കാം. &lt;br/&gt;&lt;br/&gt;നിങ്ങൾക്ക് &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; എന്നതിലെ ക്രമീകരണത്തിൽ ഏതുസമയത്തും ഈ അനുമതികൾ മാറ്റാം."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"ആപ്പ് ഐക്കൺ"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"കൂടുതൽ വിവരങ്ങൾ ബട്ടൺ"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"കൂടുതൽ വിവരങ്ങൾ"</string>
     <string name="permission_phone" msgid="2661081078692784919">"ഫോൺ"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contacts"</string>
diff --git a/packages/CompanionDeviceManager/res/values-mn/strings.xml b/packages/CompanionDeviceManager/res/values-mn/strings.xml
index 7eb2e8d..613c9aa 100644
--- a/packages/CompanionDeviceManager/res/values-mn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-mn/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;-д &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;-д хандахыг зөвшөөрөх үү?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;-д &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; аппыг хандахыг зөвшөөрөх үү?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"цаг"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;-н удирдах<xliff:g id="PROFILE_NAME">%1$s</xliff:g>-г сонгоно уу"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Энэ апп таны <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-г удирдахад шаардлагатай. <xliff:g id="APP_NAME">%2$s</xliff:g>-д залгаж буй хүний нэр зэрэг мэдээллийг синк хийх, таны мэдэгдэлтэй харилцан үйлдэл хийх, Утас, SMS, Харилцагчид, Календарь, Дуудлагын жагсаалт болон Ойролцоох төхөөрөмжүүдийн зөвшөөрөлд хандахыг зөвшөөрнө."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Энэ аппад залгаж буй хүний нэр зэрэг мэдээллийг синк хийх болон таны <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>-н эдгээр зөвшөөрөлд хандахыг зөвшөөрнө"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;-н удирдах төхөөрөмжийг сонгоно уу"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Тохируулахын тулд <xliff:g id="PROFILE_NAME">%1$s</xliff:g> сонгоно уу"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Энэ аппад залгаж буй хүний нэр зэрэг мэдээллийг синк хийх болон таны <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-н эдгээр зөвшөөрөлд хандахыг зөвшөөрнө"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;-д &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;-г удирдахыг зөвшөөрөх үү?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"нүдний шил"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Энэ апп <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-г удирдахад шаардлагатай. <xliff:g id="APP_NAME">%2$s</xliff:g>-д таны мэдэгдэлтэй харилцан үйлдэл хийх, Утас, SMS, Харилцагчид, Микрофон болон Ойролцоох төхөөрөмжүүдийн зөвшөөрөлд хандахыг зөвшөөрнө."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Энэ апп таны <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>-н эдгээр зөвшөөрөлд хандах эрхтэй байх болно"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"төхөөрөмж"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Энэ апп таны <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-н эдгээр зөвшөөрөлд хандах эрхтэй байх болно"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;-д таны утаснаас энэ мэдээлэлд хандахыг зөвшөөрнө үү"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Төхөөрөмж хоорондын үйлчилгээ"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Таны төхөөрөмжүүд хооронд апп дамжуулахын тулд <xliff:g id="APP_NAME">%1$s</xliff:g> таны <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>-н өмнөөс зөвшөөрөл хүсэж байна"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;-д энэ үйлдлийг хийхийг зөвшөөрөх үү?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> таны <xliff:g id="DEVICE_NAME">%2$s</xliff:g>-н өмнөөс аппууд болон системийн бусад онцлогийг ойролцоох төхөөрөмжүүд рүү дамжуулах зөвшөөрөл хүсэж байна"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"төхөөрөмж"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Энэ апп залгаж буй хүний нэр зэрэг мэдээллийг таны утас болон <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-н хооронд синк хийх боломжтой болно"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Энэ апп залгаж буй хүний нэр зэрэг мэдээллийг таны утас болон сонгосон төхөөрөмжийн хооронд синк хийх боломжтой болно"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Зөвшөөрөх"</string>
     <string name="consent_no" msgid="2640796915611404382">"Бүү зөвшөөр"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Цуцлах"</string>
     <string name="consent_back" msgid="2560683030046918882">"Буцах"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>-г дэлгэх"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>-г хураах"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; дээрх аппуудад &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; дээрхтэй адил зөвшөөрөл өгөх үү?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Үүнд &lt;strong&gt;Микрофон&lt;/strong&gt;, &lt;strong&gt;Камер&lt;/strong&gt;,, &lt;strong&gt;Байршлын хандалт&lt;/strong&gt; болон &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; дээрх бусад эмзэг зөвшөөрөл багтаж болно. &lt;br/&gt;&lt;br/&gt;Та эдгээр зөвшөөрлийг &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; дээрх Тохиргоондоо хүссэн үедээ өөрчлөх боломжтой."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Aппын дүрс тэмдэг"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Дэлгэрэнгүй мэдээллийн товчлуур"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Дэлгэрэнгүй мэдээлэл"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Утас"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Харилцагчид"</string>
diff --git a/packages/CompanionDeviceManager/res/values-mr/strings.xml b/packages/CompanionDeviceManager/res/values-mr/strings.xml
index b999641..50ab307 100644
--- a/packages/CompanionDeviceManager/res/values-mr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-mr/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"सहयोगी डिव्हाइस व्यवस्थापक"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ला &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; अ‍ॅक्सेस करण्याची अनुमती द्यायची आहे का?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; अ‍ॅपला &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; अ‍ॅक्सेस करण्याची अनुमती द्यायची आहे का?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"वॉच"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; द्वारे व्यवस्थापित करण्यासाठी <xliff:g id="PROFILE_NAME">%1$s</xliff:g> निवडा"</string>
-    <string name="summary_watch" msgid="898569637110705523">"तुमचे <xliff:g id="DEVICE_NAME">%1$s</xliff:g> व्यवस्थापित करण्यासाठी हे ॲप आवश्यक आहे. <xliff:g id="APP_NAME">%2$s</xliff:g> ला कॉल करत असलेल्या एखाद्या व्यक्तीचे नाव यासारखी माहिती सिंक करण्याची, तुमच्या सूचनांसोबत संवाद साधण्याची आणि तुमचा फोन, एसएमएस, संपर्क, कॅलेंडर, कॉल लॉग व जवळपासच्या डिव्हाइसच्या परवानग्या अ‍ॅक्सेस करण्याची अनुमती मिळेल."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"या अ‍ॅपला कॉल करत असलेल्या एखाद्या व्यक्तीचे नाव यासारखी माहिती सिंक करण्याची आणि तुमच्या <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> वर पुढील परवानग्या अ‍ॅक्सेस करण्याची अनुमती दिली जाईल"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; द्वारे व्यवस्थापित करण्यासाठी डिव्हाइस निवडा"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"सेट करण्यासाठी <xliff:g id="PROFILE_NAME">%1$s</xliff:g> निवडा"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"या अ‍ॅपला कॉल करत असलेल्या एखाद्या व्यक्तीचे नाव यासारखी माहिती सिंक करण्याची आणि तुमच्या <xliff:g id="DEVICE_NAME">%1$s</xliff:g> वर या परवानग्या अ‍ॅक्सेस करण्याची अनुमती असेल"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ला &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; व्यवस्थापित करण्याची अनुमती द्यायची आहे?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"Glasses"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> व्यवस्थापित करण्यासाठी हे ॲप आवश्यक आहे. <xliff:g id="APP_NAME">%2$s</xliff:g> ला तुमच्या सूचनांसोबत संवाद साधण्याची आणि तुमचा फोन, एसएमएस, संपर्क, मायक्रोफोन व जवळपासच्या डिव्हाइसच्या परवानग्या अ‍ॅक्सेस करण्याची अनुमती मिळेल."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"या अ‍ॅपला तुमच्या <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> वर या परवानग्या अ‍ॅक्सेस करण्याची अनुमती दिली जाईल"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"डिव्हाइस"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"या अ‍ॅपला तुमच्या <xliff:g id="DEVICE_NAME">%1$s</xliff:g> वर या परवानग्या अ‍ॅक्सेस करण्याची अनुमती असेल"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ला ही माहिती तुमच्या फोनवरून अ‍ॅक्सेस करण्यासाठी अनुमती द्या"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"क्रॉस-डिव्हाइस सेवा"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"तुमच्या डिव्हाइसदरम्यान ॲप्स स्ट्रीम करण्यासाठी <xliff:g id="APP_NAME">%1$s</xliff:g> हे तुमच्या <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> च्या वतीने परवानगीची विनंती करत आहे"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ला ही कृती करण्याची अनुमती द्यायची आहे का?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> हे जवळपासच्या डिव्हाइसवर अ‍ॅप्स आणि इतर सिस्टीम वैशिष्‍ट्ये स्ट्रीम करण्यासाठी तुमच्या <xliff:g id="DEVICE_NAME">%2$s</xliff:g> च्या वतीने परवानगीची विनंती करा"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"डिव्हाइस"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"हे ॲप तुमचा फोन आणि <xliff:g id="DEVICE_NAME">%1$s</xliff:g> दरम्यान कॉल करत असलेल्‍या एखाद्या व्यक्तीचे नाव यासारखी माहिती सिंक करू शकेल"</string>
     <string name="summary_generic" msgid="1761976003668044801">"हे ॲप तुमचा फोन आणि निवडलेल्या डिव्‍हाइसदरम्यान कॉल करत असलेल्‍या एखाद्या व्यक्तीचे नाव यासारखी माहिती सिंक करू शकेल"</string>
     <string name="consent_yes" msgid="8344487259618762872">"अनुमती द्या"</string>
     <string name="consent_no" msgid="2640796915611404382">"अनुमती देऊ नका"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"रद्द करा"</string>
     <string name="consent_back" msgid="2560683030046918882">"मागे जा"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> चा विस्तार करा"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> कोलॅप्स करा"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; वरील अ‍ॅप्सना &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; प्रमाणेच परवानग्या द्यायच्या आहेत का?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"यामध्ये पुढील गोष्टी समाविष्ट असू शकतात &lt;strong&gt;मायक्रोफोन&lt;/strong&gt;, &lt;strong&gt;कॅमेरा&lt;/strong&gt;, and &lt;strong&gt;स्थान अ‍ॅक्सेस&lt;/strong&gt;, आणि &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; वरील इतर संवेदनशील परवानग्या. &lt;br/&gt;&lt;br/&gt;तुम्ही &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; वर तुमच्या सेटिंग्ज मध्ये कोणत्याही वेळेला या परवानग्या बदलू शकता."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"अ‍ॅप आयकन"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"अधिक माहिती बटण"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"अधिक माहिती"</string>
     <string name="permission_phone" msgid="2661081078692784919">"फोन"</string>
     <string name="permission_sms" msgid="6337141296535774786">"एसएमएस"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contacts"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ms/strings.xml b/packages/CompanionDeviceManager/res/values-ms/strings.xml
index 626b3cf..ef110b6 100644
--- a/packages/CompanionDeviceManager/res/values-ms/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ms/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Pengurus Peranti Rakan"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Benarkan &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; untuk mengakses &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Benarkan apl &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; mengakses &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"jam tangan"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Pilih <xliff:g id="PROFILE_NAME">%1$s</xliff:g> untuk diurus oleh &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Apl ini diperlukan untuk mengurus <xliff:g id="DEVICE_NAME">%1$s</xliff:g> anda. <xliff:g id="APP_NAME">%2$s</xliff:g> akan dibenarkan untuk menyegerakkan maklumat seperti nama individu yang memanggil, berinteraksi dengan pemberitahuan anda dan mengakses kebenaran Telefon, SMS, Kenalan, Kalendar, Log panggilan dan Peranti berdekatan anda."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Apl ini akan dibenarkan untuk menyegerakkan maklumat seperti nama seseorang yang membuat panggilan dan mengakses kebenaran ini pada <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> anda"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Pilih peranti untuk diurus oleh &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Pilih <xliff:g id="PROFILE_NAME">%1$s</xliff:g> untuk disediakan"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Apl ini akan dibenarkan untuk menyegerakkan maklumat seperti nama individu yang membuat panggilan dan mengakses kebenaran ini pada <xliff:g id="DEVICE_NAME">%1$s</xliff:g> anda"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Benarkan &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; mengurus &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"cermin mata"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Apl ini diperlukan untuk mengurus <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> akan dibenarkan untuk berinteraksi dengan pemberitahuan anda dan mengakses kebenaran Telefon, SMS, Kenalan, Mikrofon dan Peranti berdekatan anda."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Apl ini akan dibenarkan untuk mengakses kebenaran yang berikut pada <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> anda"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"peranti"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Apl ini akan dibenarkan untuk mengakses kebenaran yang berikut pada <xliff:g id="DEVICE_NAME">%1$s</xliff:g> anda"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Benarkan &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; mengakses maklumat ini daripada telefon anda"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Perkhidmatan silang peranti"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> sedang meminta kebenaran bagi pihak <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> anda untuk menstrim apl antara peranti anda"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Benarkan &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; mengambil tindakan ini?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> sedang meminta kebenaran bagi pihak <xliff:g id="DEVICE_NAME">%2$s</xliff:g> anda untuk menstrim apl dan ciri sistem yang lain pada peranti berdekatan"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"peranti"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Apl ini akan dapat menyegerakkan maklumat seperti nama individu yang memanggil, antara telefon anda dengan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Apl ini akan dapat menyegerakkan maklumat seperti nama individu yang memanggil, antara telefon anda dengan peranti yang dipilih"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Benarkan"</string>
     <string name="consent_no" msgid="2640796915611404382">"Jangan benarkan"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Batal"</string>
     <string name="consent_back" msgid="2560683030046918882">"Kembali"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Kembangkan <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Kuncupkan <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Beri apl pada &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; kebenaran yang sama seperti pada &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Ini mungkin termasuk &lt;strong&gt;Mikrofon&lt;/strong&gt;, &lt;strong&gt;Kamera&lt;/strong&gt; dan &lt;strong&gt;Akses lokasi&lt;/strong&gt; serta kebenaran sensitif lain pada &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Anda boleh menukar kebenaran ini pada bila-bila masa dalam Tetapan anda pada &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ikon Apl"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Butang Maklumat Lagi"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Maklumat Lanjut"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kenalan"</string>
diff --git a/packages/CompanionDeviceManager/res/values-my/strings.xml b/packages/CompanionDeviceManager/res/values-my/strings.xml
index bf9b422..57f2e23 100644
--- a/packages/CompanionDeviceManager/res/values-my/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-my/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"တွဲဖက်ကိရိယာ မန်နေဂျာ"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; အား &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;? သုံးခွင့်ပြုခြင်း"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ကို သုံးရန် &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; အက်ပ်ကို ခွင့်ပြုမလား။"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"နာရီ"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; က စီမံခန့်ခွဲရန် <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ကို ရွေးချယ်ပါ"</string>
-    <string name="summary_watch" msgid="898569637110705523">"သင်၏ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ကို စီမံခန့်ခွဲရန် ဤအက်ပ်လိုအပ်သည်။ ခေါ်ဆိုသူ၏အမည်ကဲ့သို့ အချက်အလက်ကို စင့်ခ်လုပ်ရန်၊ သင်၏ဖုန်း၊ SMS စာတိုစနစ်၊ အဆက်အသွယ်များ၊ ပြက္ခဒိန်၊ ခေါ်ဆိုမှတ်တမ်းနှင့် အနီးတစ်ဝိုက်ရှိ စက်များဆိုင်ရာ ခွင့်ပြုချက်များသုံးရန်၊ အကြောင်းကြားချက်များနှင့် ပြန်လှန်တုံ့ပြန်ရန် <xliff:g id="APP_NAME">%2$s</xliff:g> ကို ခွင့်ပြုမည်။"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"ခေါ်ဆိုသူ၏အမည်ကဲ့သို့ အချက်အလက်ကို စင့်ခ်လုပ်ရန်နှင့် သင့် <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> တွင် ၎င်းခွင့်ပြုချက်များရယူရန် ဤအက်ပ်ကိုခွင့်ပြုမည်"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; က စီမံခန့်ခွဲရန် စက်တစ်ခုကို ရွေးပါ"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"စနစ်ထည့်သွင်းရန် <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ကို ရွေးပါ"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"ခေါ်ဆိုသူ၏အမည်ကဲ့သို့ အချက်အလက်ကို စင့်ခ်လုပ်ရန်နှင့် သင့် <xliff:g id="DEVICE_NAME">%1$s</xliff:g> တွင် ၎င်းခွင့်ပြုချက်များရယူရန် ဤအက်ပ်ကိုခွင့်ပြုမည်"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ကို &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; အား စီမံခွင့်ပြုမလား။"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"မျက်မှန်"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ကို စီမံခန့်ခွဲရန် ဤအက်ပ်လိုအပ်သည်။ သင်၏ဖုန်း၊ SMS စာတိုစနစ်၊ အဆက်အသွယ်များ၊ မိုက်ခရိုဖုန်းနှင့် အနီးတစ်ဝိုက်ရှိ စက်များဆိုင်ရာ ခွင့်ပြုချက်များသုံးရန်၊ အကြောင်းကြားချက်များနှင့် ပြန်လှန်တုံ့ပြန်ရန် <xliff:g id="APP_NAME">%2$s</xliff:g> ကို ခွင့်ပြုမည်။"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"သင့် <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> တွင် ၎င်းခွင့်ပြုချက်များရယူရန် ဤအက်ပ်ကိုခွင့်ပြုမည်"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"စက်"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"သင့် <xliff:g id="DEVICE_NAME">%1$s</xliff:g> တွင် ၎င်းခွင့်ပြုချက်များရယူရန် ဤအက်ပ်ကိုခွင့်ပြုမည်"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ကို သင့်ဖုန်းမှ ဤအချက်အလက် သုံးခွင့်ပြုမည်"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"စက်များကြားသုံး ဝန်ဆောင်မှုများ"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် သင်၏စက်များအကြား အက်ပ်များတိုက်ရိုက်လွှင့်ရန် <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ကိုယ်စား ခွင့်ပြုချက်တောင်းနေသည်"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ကို ဤသို့လုပ်ဆောင်ခွင့်ပြုမလား။"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် အနီးတစ်ဝိုက်ရှိ အက်ပ်များနှင့် အခြားစနစ်အင်္ဂါရပ်များကို တိုက်ရိုက်ဖွင့်ရန် သင့် <xliff:g id="DEVICE_NAME">%2$s</xliff:g> ကိုယ်စား ခွင့်ပြုချက်တောင်းနေသည်"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"စက်"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"ဤအက်ပ်သည် သင့်ဖုန်းနှင့် <xliff:g id="DEVICE_NAME">%1$s</xliff:g> အကြား ခေါ်ဆိုသူ၏အမည်ကဲ့သို့ အချက်အလက်ကို စင့်ခ်လုပ်နိုင်ပါမည်"</string>
     <string name="summary_generic" msgid="1761976003668044801">"ဤအက်ပ်သည် သင့်ဖုန်းနှင့် ရွေးထားသောစက်အကြား ခေါ်ဆိုသူ၏အမည်ကဲ့သို့ အချက်အလက်ကို စင့်ခ်လုပ်နိုင်ပါမည်"</string>
     <string name="consent_yes" msgid="8344487259618762872">"ခွင့်ပြုရန်"</string>
     <string name="consent_no" msgid="2640796915611404382">"ခွင့်မပြုပါ"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"မလုပ်တော့"</string>
     <string name="consent_back" msgid="2560683030046918882">"နောက်သို့"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ကို ပိုပြရန်"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ကို လျှော့ပြရန်"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"အက်ပ်များကို &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; တွင်ပေးထားသည့် ခွင့်ပြုချက်များအတိုင်း &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; တွင် ပေးမလား။"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; တွင် &lt;strong&gt;မိုက်ခရိုဖုန်း&lt;/strong&gt;၊ &lt;strong&gt;ကင်မရာ&lt;/strong&gt;၊ &lt;strong&gt;တည်နေရာသုံးခွင့်&lt;/strong&gt; နှင့် အခြားသတိထားရမည့် ခွင့်ပြုချက်များ ပါဝင်နိုင်သည်။ &lt;br/&gt;&lt;br/&gt;ဤခွင့်ပြုချက်များကို &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; ရှိ ဆက်တင်များတွင် အချိန်မရွေး ပြောင်းနိုင်သည်။"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"အက်ပ်သင်္ကေတ"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"နောက်ထပ်အချက်အလက်များ ခလုတ်"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"နောက်ထပ်အချက်အလက်"</string>
     <string name="permission_phone" msgid="2661081078692784919">"ဖုန်း"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS စာတိုစနစ်"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"အဆက်အသွယ်များ"</string>
diff --git a/packages/CompanionDeviceManager/res/values-nb/strings.xml b/packages/CompanionDeviceManager/res/values-nb/strings.xml
index 3863d1d..083ec99 100644
--- a/packages/CompanionDeviceManager/res/values-nb/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-nb/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Gi &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; tilgang til &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Vil du gi &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;-appen tilgang til &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"klokke"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Velg <xliff:g id="PROFILE_NAME">%1$s</xliff:g> som skal administreres av &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Denne appen kreves for å administrere <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> får tillatelse til å synkronisere informasjon som navnet til noen som ringer, og samhandle med varslene dine, og får tilgang til tillatelsene for telefon, SMS, kontakter, kalender, samtalelogger og enheter i nærheten."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Denne appen får tillatelse til å synkronisere informasjon som navnet til noen som ringer, og har disse tillatelsene på din/ditt <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Velg en enhet som skal administreres av &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Velg <xliff:g id="PROFILE_NAME">%1$s</xliff:g> som skal konfigureres"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Denne appen får tillatelse til å synkronisere informasjon som navnet til noen som ringer, og har disse tillatelsene på <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Vil du la &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; administrere &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"briller"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Denne appen kreves for å administrere <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> får tilgang til varslene dine og får tillatelsene for telefon, SMS, kontakter, mikrofon og enheter i nærheten."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Denne appen får disse tillatelsene på din/ditt <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"enheten"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Denne appen får disse tillatelsene på <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Gi &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; tilgang til denne informasjonen fra telefonen din"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Tjenester på flere enheter"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> ber om tillatelse til å strømme apper mellom enhetene dine, på vegne av <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Vil du la &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; gjøre dette?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> ber om tillatelse på vegne av <xliff:g id="DEVICE_NAME">%2$s</xliff:g> til å strømme apper og andre systemfunksjoner til enheter i nærheten"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"enhet"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Denne appen kan synkronisere informasjon som navnet til noen som ringer, mellom telefonen og <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Denne appen kan synkronisere informasjon som navnet til noen som ringer, mellom telefonen og den valgte enheten"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Tillat"</string>
     <string name="consent_no" msgid="2640796915611404382">"Ikke tillat"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Avbryt"</string>
     <string name="consent_back" msgid="2560683030046918882">"Tilbake"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Vis <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Skjul <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Vil du gi apper på &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; de samme tillatelsene som på &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Dette kan inkludere &lt;strong&gt;mikrofon&lt;/strong&gt;-, &lt;strong&gt;kamera&lt;/strong&gt;- og &lt;strong&gt;posisjonstilgang&lt;/strong&gt; samt andre sensitive tillatelser på &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Du kan når som helst endre disse tillatelsene i innstillingene på &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Appikon"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Mer informasjon-knapp"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Mer informasjon"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontakter"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ne/strings.xml b/packages/CompanionDeviceManager/res/values-ne/strings.xml
index 60888e5..7a1df5f 100644
--- a/packages/CompanionDeviceManager/res/values-ne/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ne/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"सहयोगी डिभाइसको प्रबन्धक"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; लाई &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; प्रयोग गर्ने अनुमति दिने हो?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; एपलाई &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; प्रयोग गर्ने अनुमति दिने हो?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"घडी"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"आफूले &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; प्रयोग गरी व्यवस्थापन गर्न चाहेको <xliff:g id="PROFILE_NAME">%1$s</xliff:g> चयन गर्नुहोस्"</string>
-    <string name="summary_watch" msgid="898569637110705523">"तपाईंको <xliff:g id="DEVICE_NAME">%1$s</xliff:g> व्यवस्थापन गर्न यो एप चाहिन्छ। <xliff:g id="APP_NAME">%2$s</xliff:g> लाई कल गर्ने व्यक्तिको नाम जस्ता जानकारी सिंक गर्ने, तपाईंका सूचना हेर्ने र फोन, SMS, कन्ट्याक्ट, पात्रो, कल लग तथा नजिकैका डिभाइससम्बन्धी अनुमतिहरू हेर्ने तथा प्रयोग गर्ने अनुमति दिइने छ।"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"तपाईंको <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> मा यो एपलाई कल गर्ने व्यक्तिको नाम जस्ता जानकारी सिंक गर्ने र यी कुराहरू गर्ने अनुमति दिइने छ"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"आफूले &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; प्रयोग गरी व्यवस्थापन गर्न चाहेको डिभाइस चयन गर्नुहोस्"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"सेट अप गर्नका लागि <xliff:g id="PROFILE_NAME">%1$s</xliff:g> छनौट गर्नुहोस्"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"तपाईंको <xliff:g id="DEVICE_NAME">%1$s</xliff:g> मा यो एपलाई कल गर्ने व्यक्तिको नाम जस्ता जानकारी सिंक गर्ने र यी कुराहरू गर्ने अनुमति दिइने छ"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; लाई &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; व्यवस्थापन गर्ने अनुमति दिने हो?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"चस्मा"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> व्यवस्थापन गर्न यो एप चाहिन्छ। <xliff:g id="APP_NAME">%2$s</xliff:g> लाई तपाईंका सूचना हेर्ने र फोन, SMS, कन्ट्याक्ट, माइक्रोफोन तथा नजिकैका डिभाइससम्बन्धी अनुमतिहरू हेर्ने तथा प्रयोग गर्ने अनुमति दिइने छ।"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"तपाईंको <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> मा यो एपलाई निम्न अनुमति दिइने छ:"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"डिभाइस"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"तपाईंको <xliff:g id="DEVICE_NAME">%1$s</xliff:g> मा यो एपलाई निम्न अनुमति दिइने छ:"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; लाई तपाईंको फोनमा भएको यो जानकारी हेर्ने तथा प्रयोग गर्ने अनुमति दिनुहोस्"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"क्रस-डिभाइस सेवाहरू"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> तपाईंको डिभाइस <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> को तर्फबाट तपाईंका कुनै एउटा डिभाइसबाट अर्को डिभाइसमा एप स्ट्रिम गर्ने अनुमति माग्दै छ"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; लाई यो कार्य गर्ने अनुमति दिने हो?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> तपाईंको डिभाइस <xliff:g id="DEVICE_NAME">%2$s</xliff:g> को तर्फबाट नजिकैका डिभाइसहरूमा एप र सिस्टमका अन्य सुविधाहरू स्ट्रिम गर्ने अनुमति माग्दै छ"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"यन्त्र"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"यो एपले तपाईंको फोन र तपाईंले छनौट गर्ने <xliff:g id="DEVICE_NAME">%1$s</xliff:g> का बिचमा कल गर्ने व्यक्तिको नाम जस्ता जानकारी सिंक गर्न सक्ने छ।"</string>
     <string name="summary_generic" msgid="1761976003668044801">"यो एपले तपाईंको फोन र तपाईंले छनौट गर्ने डिभाइसका बिचमा कल गर्ने व्यक्तिको नाम जस्ता जानकारी सिंक गर्न सक्ने छ।"</string>
     <string name="consent_yes" msgid="8344487259618762872">"अनुमति दिनुहोस्"</string>
     <string name="consent_no" msgid="2640796915611404382">"अनुमति नदिनुहोस्"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"रद्द गर्नुहोस्"</string>
     <string name="consent_back" msgid="2560683030046918882">"पछाडि"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> एक्स्पान्ड गर्नुहोस्"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> कोल्याप्स गर्नुहोस्"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; मा भएका एपहरूलाई पनि &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; मा दिइएकै अनुमति दिने हो?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"यसअन्तर्गत &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; का &lt;strong&gt;माइक्रोफोन&lt;/strong&gt;, &lt;strong&gt;क्यामेरा&lt;/strong&gt; र &lt;strong&gt;लोकेसन प्रयोग गर्ने अनुमति&lt;/strong&gt; तथा अन्य संवेदनशील अनुमतिहरू समावेश हुन्छन्। &lt;br/&gt;&lt;br/&gt;तपाईं जुनसुकै बेला &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; का सेटिङमा गई यी अनुमति परिवर्तन गर्न सक्नुहुन्छ।"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"एपको आइकन"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"थप जानकारी देखाउने बटन"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"थप जानकारी"</string>
     <string name="permission_phone" msgid="2661081078692784919">"फोन"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contacts"</string>
diff --git a/packages/CompanionDeviceManager/res/values-nl/strings.xml b/packages/CompanionDeviceManager/res/values-nl/strings.xml
index 2b78bb1..71d14e7 100644
--- a/packages/CompanionDeviceManager/res/values-nl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-nl/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; toegang geven tot &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"De app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; toegang geven tot &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"smartwatch"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Een <xliff:g id="PROFILE_NAME">%1$s</xliff:g> kiezen om te beheren met &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Deze app is vereist om je <xliff:g id="DEVICE_NAME">%1$s</xliff:g> te beheren. <xliff:g id="APP_NAME">%2$s</xliff:g> mag informatie (zoals de naam van iemand die belt) synchroniseren, mag interactie hebben met je meldingen en krijgt toegang tot de rechten Telefoon, Sms, Contacten, Agenda, Gesprekslijsten en Apparaten in de buurt."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Deze app kan informatie synchroniseren (zoals de naam van iemand die belt) en krijgt toegang tot deze rechten op je <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Een apparaat kiezen om te beheren met &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Een <xliff:g id="PROFILE_NAME">%1$s</xliff:g> kiezen om in te stellen"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Deze app kan informatie synchroniseren (zoals de naam van iemand die belt) en krijgt toegang tot deze rechten op je <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; toestaan &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; te beheren?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"brillen"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Deze app is nodig om <xliff:g id="DEVICE_NAME">%1$s</xliff:g> te beheren. <xliff:g id="APP_NAME">%2$s</xliff:g> mag interactie hebben met je meldingen en krijgt toegang tot de rechten Telefoon, Sms, Contacten, Microfoon en Apparaten in de buurt."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Deze app krijgt toegang tot deze rechten op je <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"apparaat"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Deze app krijgt toegang tot deze rechten op je <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; toegang geven tot deze informatie op je telefoon"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Cross-device-services"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> vraagt namens jouw <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> toestemming om apps te streamen tussen je apparaten"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Toestaan dat &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; deze actie uitvoert?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> vraagt namens je <xliff:g id="DEVICE_NAME">%2$s</xliff:g> toestemming om apps en andere systeemfuncties naar apparaten in de buurt te streamen"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"apparaat"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Deze app kan informatie, zoals de naam van iemand die belt, synchroniseren tussen je telefoon en <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Deze app kan informatie, zoals de naam van iemand die belt, synchroniseren tussen je telefoon en het gekozen apparaat"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Toestaan"</string>
     <string name="consent_no" msgid="2640796915611404382">"Niet toestaan"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Annuleren"</string>
     <string name="consent_back" msgid="2560683030046918882">"Terug"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> uitvouwen"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> samenvouwen"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Apps op de &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; dezelfde rechten geven als op de &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Dit kan &lt;strong&gt;Microfoon&lt;/strong&gt;, &lt;strong&gt;Camera&lt;/strong&gt; en &lt;strong&gt;Locatietoegang&lt;/strong&gt; en andere gevoelige rechten op de &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; omvatten. &lt;br/&gt;&lt;br/&gt;Je kunt deze rechten altijd wijzigen in je Instellingen op de &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"App-icoon"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Knop Meer informatie"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Meer informatie"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefoon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"Sms"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contacten"</string>
diff --git a/packages/CompanionDeviceManager/res/values-or/strings.xml b/packages/CompanionDeviceManager/res/values-or/strings.xml
index 9b5116dc..a058374 100644
--- a/packages/CompanionDeviceManager/res/values-or/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-or/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"ସହଯୋଗୀ ଡିଭାଇସ୍ ପରିଚାଳକ"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;କୁ ଆକ୍ସେସ କରିବା ପାଇଁ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;କୁ ଅନୁମତି ଦେବେ?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;କୁ ଆକ୍ସେସ କରିବା ପାଇଁ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ଆପକୁ ଅନୁମତି ଦେବେ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ୱାଚ୍"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; ଦ୍ୱାରା ପରିଚାଳିତ ହେବା ପାଇଁ ଏକ <xliff:g id="PROFILE_NAME">%1$s</xliff:g>କୁ ବାଛନ୍ତୁ"</string>
-    <string name="summary_watch" msgid="898569637110705523">"ଆପଣଙ୍କ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>କୁ ପରିଚାଳନା କରିବା ପାଇଁ ଏହି ଆପ ଆବଶ୍ୟକ। କଲ କରୁଥିବା ଯେ କୌଣସି ବ୍ୟକ୍ତିଙ୍କ ନାମ ପରି ସୂଚନା ସିଙ୍କ କରିବା, ଆପଣଙ୍କ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ସହ ଇଣ୍ଟରାକ୍ଟ କରିବା ଏବଂ ଆପଣଙ୍କର ଫୋନ, SMS, କଣ୍ଟାକ୍ଟ, କେଲେଣ୍ଡର, କଲ ଲଗ ଓ ଆଖପାଖର ଡିଭାଇସ ଅନୁମତିଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ <xliff:g id="APP_NAME">%2$s</xliff:g>କୁ ଅନୁମତି ଦିଆଯିବ।"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"କଲ କରୁଥିବା ଯେ କୌଣସି ବ୍ୟକ୍ତିଙ୍କ ନାମ ପରି ସୂଚନା ସିଙ୍କ କରିବାକୁ ଏବଂ ଆପଣଙ୍କ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ରେ ଏହି ଅନୁମତିଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଏହି ଆପକୁ ଅନୁମତି ଦିଆଯିବ"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ଦ୍ୱାରା ପରିଚାଳିତ ହେବା ପାଇଁ ଏକ ଡିଭାଇସ ବାଛନ୍ତୁ"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"ସେଟ ଅପ କରିବାକୁ ଏକ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ବାଛନ୍ତୁ"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"କଲ କରୁଥିବା ଯେ କୌଣସି ବ୍ୟକ୍ତିଙ୍କ ନାମ ପରି ସୂଚନା ସିଙ୍କ କରିବାକୁ ଏବଂ ଆପଣଙ୍କ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ରେ ଏହି ଅନୁମତିଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଏହି ଆପକୁ ଅନୁମତି ଦିଆଯିବ"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;କୁ ପରିଚାଳନା କରିବା ପାଇଁ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;କୁ ଅନୁମତି ଦେବେ?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"ଚଷମା"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>କୁ ପରିଚାଳନା କରିବା ପାଇଁ ଏହି ଆପ ଆବଶ୍ୟକ। ଆପଣଙ୍କ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ସହ ଇଣ୍ଟରାକ୍ଟ କରିବା ଏବଂ ଆପଣଙ୍କର ଫୋନ, SMS, କଣ୍ଟାକ୍ଟ, ମାଇକ୍ରୋଫୋନ ଓ ଆଖପାଖର ଡିଭାଇସ ଅନୁମତିଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ <xliff:g id="APP_NAME">%2$s</xliff:g>କୁ ଅନୁମତି ଦିଆଯିବ।"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"ଆପଣଙ୍କ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ରେ ଏହି ଅନୁମତିଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଏହି ଆପକୁ ଅନୁମତି ଦିଆଯିବ"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"ଡିଭାଇସ"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"ଆପଣଙ୍କ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ରେ ଏହି ଅନୁମତିଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଏହି ଆପକୁ ଅନୁମତି ଦିଆଯିବ"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"ଆପଣଙ୍କ ଫୋନରୁ ଏହି ସୂଚନାକୁ ଆକ୍ସେସ କରିବା ପାଇଁ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;କୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"କ୍ରସ-ଡିଭାଇସ ସେବାଗୁଡ଼ିକ"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"ଆପଣଙ୍କ ଡିଭାଇସଗୁଡ଼ିକ ମଧ୍ୟରେ ଆପ୍ସକୁ ଷ୍ଟ୍ରିମ କରିବା ପାଇଁ <xliff:g id="APP_NAME">%1$s</xliff:g> ଆପଣଙ୍କର <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ତରଫରୁ ଅନୁମତି ପାଇଁ ଅନୁରୋଧ କରୁଛି"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"ଏହି ପଦକ୍ଷେପ ନେବା ପାଇଁ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;କୁ ଅନୁମତି ଦେବେ?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"ଆଖପାଖର ଡିଭାଇସଗୁଡ଼ିକରେ ଆପ୍ସ ଏବଂ ଅନ୍ୟ ସିଷ୍ଟମ ଫିଚରଗୁଡ଼ିକୁ ଷ୍ଟ୍ରିମ କରିବା ପାଇଁ <xliff:g id="APP_NAME">%1$s</xliff:g> ଆପଣଙ୍କ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> ତରଫରୁ ଅନୁମତି ପାଇଁ ଅନୁରୋଧ କରୁଛି"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ଡିଭାଇସ୍"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"ଆପଣଙ୍କ ଫୋନ ଏବଂ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ମଧ୍ୟରେ, କଲ କରୁଥିବା ଯେ କୌଣସି ବ୍ୟକ୍ତିଙ୍କ ନାମ ପରି ସୂଚନା ସିଙ୍କ କରିବାକୁ ଏହି ଆପ ସକ୍ଷମ ହେବ"</string>
     <string name="summary_generic" msgid="1761976003668044801">"ଆପଣଙ୍କ ଫୋନ ଏବଂ ବଛାଯାଇଥିବା ଡିଭାଇସ ମଧ୍ୟରେ, କଲ କରୁଥିବା ଯେ କୌଣସି ବ୍ୟକ୍ତିଙ୍କ ନାମ ପରି ସୂଚନା ସିଙ୍କ କରିବାକୁ ଏହି ଆପ ସକ୍ଷମ ହେବ"</string>
     <string name="consent_yes" msgid="8344487259618762872">"ଅନୁମତି ଦିଅନ୍ତୁ"</string>
     <string name="consent_no" msgid="2640796915611404382">"ଅନୁମତି ଦିଅନ୍ତୁ ନାହିଁ"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"ବାତିଲ କରନ୍ତୁ"</string>
     <string name="consent_back" msgid="2560683030046918882">"ପଛକୁ ଫେରନ୍ତୁ"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>କୁ ବିସ୍ତାର କରନ୍ତୁ"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>କୁ ସଙ୍କୁଚିତ କରନ୍ତୁ"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;ପରି &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;ରେ ଥିବା ଆପ୍ସକୁ ସମାନ ଅନୁମତିଗୁଡ଼ିକ ଦେବେ?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"ଏହା &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;ରେ &lt;strong&gt;ମାଇକ୍ରୋଫୋନ&lt;/strong&gt;, &lt;strong&gt;କେମେରା&lt;/strong&gt;, ଏବଂ &lt;strong&gt;ଲୋକେସନ ଆକ୍ସେସ&lt;/strong&gt; ଏବଂ ଅନ୍ୟ ସମ୍ବେଦନଶୀଳ ଅନୁମତିଗୁଡ଼ିକୁ ଅନ୍ତର୍ଭୁକ୍ତ କରିପାରେ। &lt;br/&gt;&lt;br/&gt;ଆପଣ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;ରେ ଯେ କୌଣସି ସମୟରେ ଆପଣଙ୍କ ସେଟିଂସରେ ଏହି ଅନୁମତିଗୁଡ଼ିକୁ ପରିବର୍ତ୍ତନ କରିପାରିବେ।"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"ଆପ ଆଇକନ"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"ଅଧିକ ସୂଚନା ବଟନ"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"ଅଧିକ ସୂଚନା"</string>
     <string name="permission_phone" msgid="2661081078692784919">"ଫୋନ"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"କଣ୍ଟାକ୍ଟଗୁଡ଼ିକ"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pa/strings.xml b/packages/CompanionDeviceManager/res/values-pa/strings.xml
index c6bbf37..984ec48 100644
--- a/packages/CompanionDeviceManager/res/values-pa/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pa/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"ਸੰਬੰਧੀ ਡੀਵਾਈਸ ਪ੍ਰਬੰਧਕ"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"ਕੀ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ਨੂੰ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"ਕੀ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ਐਪ ਨੂੰ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ਸਮਾਰਟ-ਵਾਚ"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤੇ ਜਾਣ ਲਈ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ਚੁਣੋ"</string>
-    <string name="summary_watch" msgid="898569637110705523">"ਇਹ ਐਪ ਤੁਹਾਡੇ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ ਲੋੜੀਂਦੀ ਹੈ। <xliff:g id="APP_NAME">%2$s</xliff:g> ਨੂੰ ਕਾਲਰ ਦੇ ਨਾਮ ਵਰਗੀ ਜਾਣਕਾਰੀ ਨੂੰ ਸਿੰਕ ਕਰਨ, ਤੁਹਾਡੀਆਂ ਸੂਚਨਾਵਾਂ ਨਾਲ ਅੰਤਰਕਿਰਿਆ ਕਰਨ ਅਤੇ ਤੁਹਾਡੇ ਫ਼ੋਨ, SMS, ਸੰਪਰਕਾਂ, ਕੈਲੰਡਰ, ਕਾਲ ਲੌਗਾਂ ਅਤੇ ਨਜ਼ਦੀਕੀ ਡੀਵਾਈਸਾਂ ਸੰਬੰਧੀ ਇਜਾਜ਼ਤਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਹੋਵੇਗੀ।"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"ਇਸ ਐਪ ਨੂੰ ਤੁਹਾਡੇ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> \'ਤੇ ਕਾਲਰ ਦੇ ਨਾਮ ਵਰਗੀ ਜਾਣਕਾਰੀ ਨੂੰ ਸਿੰਕ ਕਰਨ ਅਤੇ ਇਨ੍ਹਾਂ ਇਜਾਜ਼ਤਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਹੋਵੇਗੀ"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤੇ ਜਾਣ ਲਈ ਕੋਈ ਡੀਵਾਈਸ ਚੁਣੋ"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"ਸੈੱਟਅੱਪ ਕਰਨ ਲਈ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ਚੁਣੋ"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"ਇਸ ਐਪ ਨੂੰ ਤੁਹਾਡੇ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> \'ਤੇ ਕਾਲਰ ਦੇ ਨਾਮ ਵਰਗੀ ਜਾਣਕਾਰੀ ਨੂੰ ਸਿੰਕ ਕਰਨ ਅਤੇ ਇਨ੍ਹਾਂ ਇਜਾਜ਼ਤਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਹੋਵੇਗੀ"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"ਕੀ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ਨੂੰ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"ਐਨਕਾਂ"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"ਇਹ ਐਪ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ ਲੋੜੀਂਦੀ ਹੈ। <xliff:g id="APP_NAME">%2$s</xliff:g> ਨੂੰ ਤੁਹਾਡੀਆਂ ਸੂਚਨਾਵਾਂ ਨਾਲ ਅੰਤਰਕਿਰਿਆ ਕਰਨ ਅਤੇ ਤੁਹਾਡੇ ਫ਼ੋਨ, SMS, ਸੰਪਰਕਾਂ, ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਅਤੇ ਨਜ਼ਦੀਕੀ ਡੀਵਾਈਸਾਂ ਸੰਬੰਧੀ ਇਜਾਜ਼ਤਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਹੋਵੇਗੀ।"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"ਇਸ ਐਪ ਨੂੰ ਤੁਹਾਡੇ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> \'ਤੇ ਇਨ੍ਹਾਂ ਇਜਾਜ਼ਤਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਹੋਵੇਗੀ"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"ਡੀਵਾਈਸ"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"ਇਸ ਐਪ ਨੂੰ ਤੁਹਾਡੇ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> \'ਤੇ ਇਨ੍ਹਾਂ ਇਜਾਜ਼ਤਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਹੋਵੇਗੀ"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ਨੂੰ ਤੁਹਾਡੇ ਫ਼ੋਨ ਤੋਂ ਇਸ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"ਕ੍ਰਾਸ-ਡੀਵਾਈਸ ਸੇਵਾਵਾਂ"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਤੁਹਾਡੇ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> ਦੀ ਤਰਫ਼ੋਂ ਤੁਹਾਡੇ ਡੀਵਾਈਸਾਂ ਵਿਚਕਾਰ ਐਪਾਂ ਨੂੰ ਸਟ੍ਰੀਮ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਮੰਗ ਰਹੀ ਹੈ"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"ਕੀ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ਨੂੰ ਇਹ ਕਾਰਵਾਈ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਤੁਹਾਡੇ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> ਦੀ ਤਰਫ਼ੋਂ ਨਜ਼ਦੀਕੀ ਡੀਵਾਈਸਾਂ \'ਤੇ ਐਪਾਂ ਅਤੇ ਹੋਰ ਸਿਸਟਮ ਸੰਬੰਧੀ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਸਟ੍ਰੀਮ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਮੰਗ ਰਹੀ ਹੈ"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ਡੀਵਾਈਸ"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"ਇਹ ਐਪ ਤੁਹਾਡੇ ਫ਼ੋਨ ਅਤੇ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਵਿਚਕਾਰ ਕਾਲਰ ਦੇ ਨਾਮ ਵਰਗੀ ਜਾਣਕਾਰੀ ਨੂੰ ਸਿੰਕ ਕਰ ਸਕੇਗੀ"</string>
     <string name="summary_generic" msgid="1761976003668044801">"ਇਹ ਐਪ ਤੁਹਾਡੇ ਫ਼ੋਨ ਅਤੇ ਚੁਣੇ ਗਏ ਡੀਵਾਈਸ ਵਿਚਕਾਰ ਕਾਲਰ ਦੇ ਨਾਮ ਵਰਗੀ ਜਾਣਕਾਰੀ ਨੂੰ ਸਿੰਕ ਕਰ ਸਕੇਗੀ"</string>
     <string name="consent_yes" msgid="8344487259618762872">"ਆਗਿਆ ਦਿਓ"</string>
     <string name="consent_no" msgid="2640796915611404382">"ਆਗਿਆ ਨਾ ਦਿਓ"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"ਰੱਦ ਕਰੋ"</string>
     <string name="consent_back" msgid="2560683030046918882">"ਪਿੱਛੇ"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ਦਾ ਵਿਸਤਾਰ ਕਰੋ"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ਨੂੰ ਸਮੇਟੋ"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"ਕੀ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; \'ਤੇ ਮੌਜੂਦ ਐਪਾਂ ਨੂੰ &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; \'ਤੇ ਮੌਜੂਦ ਐਪਾਂ ਵਾਂਗ ਇਜਾਜ਼ਤਾਂ ਦੇਣੀਆਂ ਹਨ?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"ਇਸ ਵਿੱਚ &lt;strong&gt;ਮਾਈਕ੍ਰੋਫ਼ੋਨ&lt;/strong&gt;, &lt;strong&gt;ਕੈਮਰਾ&lt;/strong&gt;, ਅਤੇ &lt;strong&gt;ਟਿਕਾਣਾ ਪਹੁੰਚ&lt;/strong&gt;, ਅਤੇ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; \'ਤੇ ਮੌਜੂਦ ਹੋਰ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ ਸੰਬੰਧੀ ਇਜਾਜ਼ਤਾਂ ਸ਼ਾਮਲ ਹੋ ਸਕਦੀਆਂ ਹਨ। &lt;br/&gt;&lt;br/&gt;ਤੁਸੀਂ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; \'ਤੇ ਮੌਜੂਦ ਆਪਣੀਆਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜਾ ਕੇ ਕਿਸੇ ਵੀ ਵੇਲੇ ਇਨ੍ਹਾਂ ਇਜਾਜ਼ਤਾਂ ਨੂੰ ਬਦਲ ਸਕਦੇ ਹੋ।"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"ਐਪ ਪ੍ਰਤੀਕ"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"ਹੋਰ ਜਾਣਕਾਰੀ ਬਟਨ"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"ਹੋਰ ਜਾਣਕਾਰੀ"</string>
     <string name="permission_phone" msgid="2661081078692784919">"ਫ਼ੋਨ"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"ਸੰਪਰਕ"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pl/strings.xml b/packages/CompanionDeviceManager/res/values-pl/strings.xml
index 87db327..7ca172e 100644
--- a/packages/CompanionDeviceManager/res/values-pl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pl/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Menedżer urządzeń towarzyszących"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Zezwolić na dostęp aplikacji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; do tego urządzenia (&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;)?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Zezwolić aplikacji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; na dostęp do urządzenia &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"zegarek"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Wybierz profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, którym ma zarządzać aplikacja &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Ta aplikacja jest niezbędna do zarządzania urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Aplikacja <xliff:g id="APP_NAME">%2$s</xliff:g> będzie mogła synchronizować informacje takie jak nazwa osoby dzwoniącej, korzystać z powiadomień oraz uprawnień dotyczących telefonu, SMS-ów, kontaktów, kalendarza, rejestrów połączeń i Urządzeń w pobliżu."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Aplikacja będzie mogła synchronizować informacje takie jak nazwa dzwoniącego oraz korzystać z tych uprawnień na Twoim urządzeniu (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Wybierz urządzenie, którym ma zarządzać aplikacja &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Wybierz profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, aby go skonfigurować"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Aplikacja będzie mogła synchronizować informacje takie jak nazwa dzwoniącego oraz korzystać z tych uprawnień na Twoim urządzeniu (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Zezwolić na dostęp aplikacji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; do urządzenia &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"Okulary"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Ta aplikacja jest niezbędna do zarządzania urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Aplikacja <xliff:g id="APP_NAME">%2$s</xliff:g> będzie mogła wchodzić w interakcję z powiadomieniami i korzystać z uprawnień dotyczących telefonu, SMS-ów, kontaktów, mikrofonu oraz urządzeń w pobliżu."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Aplikacja będzie miała dostęp do tych uprawnień na Twoim urządzeniu (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"urządzenie"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Aplikacja będzie miała dostęp do tych uprawnień na Twoim urządzeniu (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Zezwól urządzeniu &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; na dostęp do tych informacji na Twoim telefonie"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Usługi na innym urządzeniu"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> prosi w imieniu urządzenia <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> o uprawnienia dotyczące strumieniowego odtwarzania treści z aplikacji na innym urządzeniu"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Zezwolić urządzeniu &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; na wykonanie tego działania?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> prosi w imieniu urządzenia <xliff:g id="DEVICE_NAME">%2$s</xliff:g> o uprawnienia do strumieniowego odtwarzania treści i innych funkcji systemowych na urządzeniach w pobliżu"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"urządzenie"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Ta aplikacja może synchronizować informacje takie jak nazwa osoby dzwoniącej między Twoim telefonem i urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Ta aplikacja może synchronizować informacje takie jak nazwa osoby dzwoniącej między Twoim telefonem i wybranym urządzeniem"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Zezwól"</string>
     <string name="consent_no" msgid="2640796915611404382">"Nie zezwalaj"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Anuluj"</string>
     <string name="consent_back" msgid="2560683030046918882">"Wstecz"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Rozwiń sekcję <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Zwiń sekcję <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Czy aplikacjom na urządzeniu &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; przyznać te same uprawnienia co na urządzeniu &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Wśród nich mogą być dane dostępu do &lt;strong&gt;Mikrofonu&lt;/strong&gt;, &lt;strong&gt;Aparatu&lt;/strong&gt;, i &lt;strong&gt;Lokalizacji&lt;/strong&gt;, i inne uprawnienia newralgiczne na urządzeniu &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Możesz w dowolnym momencie zmienić uprawnienia na urządzeniu &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ikona aplikacji"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Przycisk – więcej informacji"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Więcej informacji"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS-y"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontakty"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml b/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
index c630fce..26647c8 100644
--- a/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Gerenciador de dispositivos complementar"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Permitir que o app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acesse o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Permitir que o app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acesse o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"relógio"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Escolha um <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para ser gerenciado pelo app &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"O app <xliff:g id="APP_NAME">%2$s</xliff:g> é necessário para gerenciar o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Ele poderá sincronizar informações, como o nome de quem está ligando, interagir com suas notificações e acessar as permissões do Telefone, SMS, contatos, agenda, registro de chamadas e dispositivos por perto."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"O app poderá sincronizar informações, como o nome de quem está ligando, e acessar estas permissões no seu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Escolha um dispositivo para ser gerenciado pelo app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Escolha um <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para configurar"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"O app poderá sincronizar informações, como o nome de quem está ligando, e acessar estas permissões no seu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Permitir que o app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; gerencie o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"óculos"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"O app <xliff:g id="APP_NAME">%2$s</xliff:g> é necessário para gerenciar o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Ele poderá interagir com suas notificações e acessar suas permissões de telefone, SMS, contatos, microfone e dispositivos por perto."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"O app poderá acessar estas permissões no seu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"dispositivo"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"O app poderá acessar estas permissões no seu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Permitir que o app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acesse estas informações do smartphone"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Serviços entre dispositivos"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu dispositivo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para fazer streaming de apps entre seus dispositivos"</string>
@@ -35,18 +34,19 @@
     <string name="summary_computer" msgid="3798467601598297062"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play Services"</string>
     <string name="helper_summary_computer" msgid="8774832742608187072">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu dispositivo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para acessar fotos, mídia e notificações do smartphone"</string>
-    <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Permitir que o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; realize essa ação?"</string>
+    <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Permitir que o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; realize esta ação?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu dispositivo <xliff:g id="DEVICE_NAME">%2$s</xliff:g> para fazer streaming de apps e de outros recursos do sistema para dispositivos por perto"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"O app poderá sincronizar informações, como o nome de quem está ligando, entre seu smartphone e o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"O app poderá sincronizar informações, como o nome de quem está ligando, entre seu smartphone e o dispositivo escolhido"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
     <string name="consent_no" msgid="2640796915611404382">"Não permitir"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Cancelar"</string>
     <string name="consent_back" msgid="2560683030046918882">"Voltar"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Abrir <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Fechar <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Dar aos apps no dispositivo &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; as mesmas permissões do dispositivo &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Isso pode incluir acesso ao &lt;strong&gt;Microfone&lt;/strong&gt;, à &lt;strong&gt;Câmera&lt;/strong&gt; e à &lt;strong&gt;Localização&lt;/strong&gt;, além de outras permissões sensíveis no dispositivo &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Você pode mudar essas permissões a qualquer momento nas Configurações do dispositivo &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ícone do app"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Botão \"Mais informações\""</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Mais informações"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Smartphone"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contatos"</string>
@@ -68,7 +68,7 @@
     <string name="permission_notification_summary" msgid="884075314530071011">"Pode ler todas as notificações, incluindo informações como contatos, mensagens e fotos"</string>
     <string name="permission_app_streaming_summary" msgid="606923325679670624">"Fazer transmissão dos apps no seu smartphone"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
-    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Faça streaming de apps e outros recursos do sistema pelo smartphone"</string>
+    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Fazer streaming de apps e outros recursos do sistema pelo smartphone"</string>
     <string name="device_type" product="default" msgid="8268703872070046263">"smartphone"</string>
     <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
 </resources>
diff --git a/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml b/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml
index 59d4423..ba60f56 100644
--- a/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Gestor de dispositivos associados"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Permitir que a app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; aceda ao &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Permitir que a app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; aceda ao &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"relógio"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Escolha um <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para ser gerido pela app &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Esta app é necessária para gerir o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. A app <xliff:g id="APP_NAME">%2$s</xliff:g> vai poder sincronizar informações, como o nome do autor de uma chamada, interagir com as suas notificações e aceder às autorizações do Telemóvel, SMS, Contactos, Calendário, Registos de chamadas e Dispositivos próximos."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Esta app vai poder sincronizar informações, como o nome do autor de uma chamada, e aceder a estas autorizações no seu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Escolha um dispositivo para ser gerido pela app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Escolha um perfil de <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para configurar"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Esta app vai poder sincronizar informações, como o nome do autor de uma chamada, e aceder a estas autorizações no seu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Permita que a app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; faça a gestão do dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"óculos"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Esta app é necessária para gerir o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. A app <xliff:g id="APP_NAME">%2$s</xliff:g> vai poder interagir com as suas notificações e aceder às autorizações do Telemóvel, SMS, Contactos, Microfone e Dispositivos próximos."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Esta app vai poder aceder a estas autorizações no seu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"dispositivo"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Esta app vai poder aceder a estas autorizações no seu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Permita que a app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; aceda a estas informações do seu telemóvel"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Serviços entre dispositivos"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> está a pedir autorização em nome do seu dispositivo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para fazer stream de apps entre os seus dispositivos"</string>
@@ -35,18 +34,19 @@
     <string name="summary_computer" msgid="3798467601598297062"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Serviços do Google Play"</string>
     <string name="helper_summary_computer" msgid="8774832742608187072">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> está a pedir autorização em nome do seu dispositivo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para aceder às fotos, ao conteúdo multimédia e às notificações do seu telemóvel"</string>
-    <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Permitir que o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; realize esta ação?"</string>
+    <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Permitir que o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; faça esta ação?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> está a pedir autorização em nome do dispositivo <xliff:g id="DEVICE_NAME">%2$s</xliff:g> para fazer stream de apps e outras funcionalidades do sistema para dispositivos próximos"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Esta app vai poder sincronizar informações, como o nome do autor de uma chamada, entre o telemóvel e o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Esta app vai poder sincronizar informações, como o nome do autor de uma chamada, entre o telemóvel e o dispositivo escolhido"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
     <string name="consent_no" msgid="2640796915611404382">"Não permitir"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Cancelar"</string>
     <string name="consent_back" msgid="2560683030046918882">"Voltar"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Expandir <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Reduzir <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Dar às apps no dispositivo &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; as mesmas autorizações de &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Isto pode incluir o acesso ao &lt;strong&gt;microfone&lt;/strong&gt;, &lt;strong&gt;câmara&lt;/strong&gt;, e &lt;strong&gt;localização&lt;/strong&gt;, bem como outras autorizações confidenciais no dispositivo &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Pode alterar estas autorizações em qualquer altura nas Definições do dispositivo &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ícone da app"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Botão Mais informações"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Mais informações"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telemóvel"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contactos"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pt/strings.xml b/packages/CompanionDeviceManager/res/values-pt/strings.xml
index c630fce..26647c8 100644
--- a/packages/CompanionDeviceManager/res/values-pt/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pt/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Gerenciador de dispositivos complementar"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Permitir que o app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acesse o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Permitir que o app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acesse o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"relógio"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Escolha um <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para ser gerenciado pelo app &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"O app <xliff:g id="APP_NAME">%2$s</xliff:g> é necessário para gerenciar o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Ele poderá sincronizar informações, como o nome de quem está ligando, interagir com suas notificações e acessar as permissões do Telefone, SMS, contatos, agenda, registro de chamadas e dispositivos por perto."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"O app poderá sincronizar informações, como o nome de quem está ligando, e acessar estas permissões no seu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Escolha um dispositivo para ser gerenciado pelo app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Escolha um <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para configurar"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"O app poderá sincronizar informações, como o nome de quem está ligando, e acessar estas permissões no seu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Permitir que o app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; gerencie o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"óculos"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"O app <xliff:g id="APP_NAME">%2$s</xliff:g> é necessário para gerenciar o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Ele poderá interagir com suas notificações e acessar suas permissões de telefone, SMS, contatos, microfone e dispositivos por perto."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"O app poderá acessar estas permissões no seu <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"dispositivo"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"O app poderá acessar estas permissões no seu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Permitir que o app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acesse estas informações do smartphone"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Serviços entre dispositivos"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu dispositivo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para fazer streaming de apps entre seus dispositivos"</string>
@@ -35,18 +34,19 @@
     <string name="summary_computer" msgid="3798467601598297062"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play Services"</string>
     <string name="helper_summary_computer" msgid="8774832742608187072">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu dispositivo <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para acessar fotos, mídia e notificações do smartphone"</string>
-    <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Permitir que o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; realize essa ação?"</string>
+    <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Permitir que o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; realize esta ação?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> está pedindo permissão em nome do seu dispositivo <xliff:g id="DEVICE_NAME">%2$s</xliff:g> para fazer streaming de apps e de outros recursos do sistema para dispositivos por perto"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"O app poderá sincronizar informações, como o nome de quem está ligando, entre seu smartphone e o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"O app poderá sincronizar informações, como o nome de quem está ligando, entre seu smartphone e o dispositivo escolhido"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
     <string name="consent_no" msgid="2640796915611404382">"Não permitir"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Cancelar"</string>
     <string name="consent_back" msgid="2560683030046918882">"Voltar"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Abrir <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Fechar <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Dar aos apps no dispositivo &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; as mesmas permissões do dispositivo &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Isso pode incluir acesso ao &lt;strong&gt;Microfone&lt;/strong&gt;, à &lt;strong&gt;Câmera&lt;/strong&gt; e à &lt;strong&gt;Localização&lt;/strong&gt;, além de outras permissões sensíveis no dispositivo &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Você pode mudar essas permissões a qualquer momento nas Configurações do dispositivo &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ícone do app"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Botão \"Mais informações\""</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Mais informações"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Smartphone"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Contatos"</string>
@@ -68,7 +68,7 @@
     <string name="permission_notification_summary" msgid="884075314530071011">"Pode ler todas as notificações, incluindo informações como contatos, mensagens e fotos"</string>
     <string name="permission_app_streaming_summary" msgid="606923325679670624">"Fazer transmissão dos apps no seu smartphone"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
-    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Faça streaming de apps e outros recursos do sistema pelo smartphone"</string>
+    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Fazer streaming de apps e outros recursos do sistema pelo smartphone"</string>
     <string name="device_type" product="default" msgid="8268703872070046263">"smartphone"</string>
     <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
 </resources>
diff --git a/packages/CompanionDeviceManager/res/values-ro/strings.xml b/packages/CompanionDeviceManager/res/values-ro/strings.xml
index 785ad86..84182e8 100644
--- a/packages/CompanionDeviceManager/res/values-ro/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ro/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Manager de dispozitiv Companion"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Permiți ca &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; să acceseze dispozitivul &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Permiți ca &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; să acceseze dispozitivul &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ceas"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Alege un profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g> pe care să îl gestioneze &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Această aplicație este necesară pentru a gestiona <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> va putea să sincronizeze informații, cum ar fi numele unui apelant, să interacționeze cu notificările tale și să îți acceseze permisiunile pentru Telefon, SMS, Agendă, Calendar, Jurnale de apeluri și Dispozitive din apropiere."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Aplicația va putea să sincronizeze informații, cum ar fi numele unui apelant, și să acceseze aceste permisiuni pe <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Alege un dispozitiv pe care să îl gestioneze &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Alege un <xliff:g id="PROFILE_NAME">%1$s</xliff:g> de configurat"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Aplicația va putea să sincronizeze informații, cum ar fi numele unui apelant, și să acceseze aceste permisiuni pe <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Permiți ca &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; să gestioneze &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"ochelari"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Această aplicație este necesară pentru a gestiona <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> va putea să interacționeze cu notificările tale și să-ți acceseze permisiunile pentru Telefon, SMS, Agendă, Microfon și Dispozitive din apropiere."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Aplicația va putea să acceseze următoarele permisiuni pe <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"dispozitiv"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Aplicația va putea să acceseze următoarele permisiuni pe <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Permite ca &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; să acceseze aceste informații de pe telefon"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Servicii pe mai multe dispozitive"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicită permisiunea pentru <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> de a reda în stream aplicații între dispozitivele tale"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Permiți ca &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; să realizeze această acțiune?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicită permisiunea pentru <xliff:g id="DEVICE_NAME">%2$s</xliff:g> de a reda în stream conținut din aplicații și alte funcții de sistem pe dispozitivele din apropiere"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"dispozitiv"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Aplicația va putea să sincronizeze informații, cum ar fi numele unui apelant, între telefonul tău și <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Aplicația va putea să sincronizeze informații, cum ar fi numele unui apelant, între telefonul tău și dispozitivul ales"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Permite"</string>
     <string name="consent_no" msgid="2640796915611404382">"Nu permite"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Anulează"</string>
     <string name="consent_back" msgid="2560683030046918882">"Înapoi"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Extinde <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Restrânge <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Acorzi aplicațiilor de pe &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; aceleași permisiuni ca pe &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Aici pot fi incluse accesul la &lt;strong&gt;microfon&lt;/strong&gt;, la &lt;strong&gt;camera foto&lt;/strong&gt;, la &lt;strong&gt;locație&lt;/strong&gt; și alte permisiuni de accesare a informațiilor sensibile de pe &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Poți modifica oricând aceste permisiuni din Setările de pe &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Pictograma aplicației"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Butonul Mai multe informații"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Mai multe informații"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Agendă"</string>
@@ -58,7 +58,7 @@
     <string name="permission_notification" msgid="693762568127741203">"Notificări"</string>
     <string name="permission_app_streaming" msgid="6009695219091526422">"Aplicații"</string>
     <string name="permission_nearby_device_streaming" msgid="1023325519477349499">"Streaming"</string>
-    <string name="permission_phone_summary" msgid="6684396967861278044">"Poate să facă și să gestioneze apeluri telefonice"</string>
+    <string name="permission_phone_summary" msgid="6684396967861278044">"Poate să dea și să gestioneze apeluri telefonice"</string>
     <string name="permission_call_logs_summary" msgid="6186103394658755022">"Poate să citească și să scrie în jurnalul de apeluri telefonice"</string>
     <string name="permission_sms_summary" msgid="3508442683678912017">"Poate să trimită și să vadă mesaje SMS"</string>
     <string name="permission_contacts_summary" msgid="675861979475628708">"Poate accesa agenda"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ru/strings.xml b/packages/CompanionDeviceManager/res/values-ru/strings.xml
index 6b03b43..911bddc 100644
--- a/packages/CompanionDeviceManager/res/values-ru/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ru/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Управление подключенными устройствами"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Предоставить приложению &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; доступ к устройству &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Предоставить приложению &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; доступ к устройству &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"часы"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Выберите устройство (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>), которым будет управлять приложение &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Это приложение необходимо для управления устройством \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". Приложение \"<xliff:g id="APP_NAME">%2$s</xliff:g>\" сможет синхронизировать данные, например из журнала звонков, а также получит доступ к уведомлениям и разрешениям \"Телефон\", \"Контакты\", \"Календарь\", \"Список вызовов\", \"Устройства поблизости\" и SMS."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Это приложение сможет синхронизировать данные, например имена вызывающих абонентов, а также получит указанные разрешения на <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Выберите устройство, которым будет управлять приложение &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Выберите <xliff:g id="PROFILE_NAME">%1$s</xliff:g> для настройки"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Это приложение сможет синхронизировать данные, например имена вызывающих абонентов, а также получит указанные разрешения на <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Разрешить приложению &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; управлять устройством &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"Очки"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Это приложение необходимо для управления устройством \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". Приложение \"<xliff:g id="APP_NAME">%2$s</xliff:g>\" сможет взаимодействовать с уведомлениями, а также получит разрешения \"Телефон\", SMS, \"Контакты\", \"Микрофон\" и \"Устройства поблизости\"."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Это приложение получит указанные разрешения на <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"устройстве"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Это приложение получит указанные разрешения на <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Разрешите приложению &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; получать эту информацию с вашего телефона"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Сервисы стриминга приложений"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запрашивает разрешение от имени вашего устройства <xliff:g id="DISPLAY_NAME">%2$s</xliff:g>, чтобы транслировать приложения между устройствами."</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Разрешить приложению &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; выполнять это действие?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" от имени вашего устройства \"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>\" запрашивает разрешение транслировать приложения и системные функции на устройства поблизости."</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"устройство"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Приложение сможет синхронизировать информацию между телефоном и устройством \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\", например данные из журнала звонков."</string>
     <string name="summary_generic" msgid="1761976003668044801">"Приложение сможет синхронизировать информацию между телефоном и выбранным устройством, например данные из журнала звонков."</string>
     <string name="consent_yes" msgid="8344487259618762872">"Разрешить"</string>
     <string name="consent_no" msgid="2640796915611404382">"Запретить"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Отмена"</string>
     <string name="consent_back" msgid="2560683030046918882">"Назад"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Разворачивать список \"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>\"."</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Сворачивать список \"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>\"."</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Предоставить приложениям на устройстве &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; те же разрешения, что на устройстве &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"У приложений может появиться доступ к &lt;strong&gt;микрофону&lt;/strong&gt;, &lt;strong&gt;камере&lt;/strong&gt;, &lt;strong&gt;местоположению&lt;/strong&gt; и другой конфиденциальной информации на устройстве &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Вы можете в любое время изменить разрешения в настройках на устройстве &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Значок приложения"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Кнопка информации"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Дополнительная информация"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Телефон"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Контакты"</string>
diff --git a/packages/CompanionDeviceManager/res/values-si/strings.xml b/packages/CompanionDeviceManager/res/values-si/strings.xml
index c6821c3..daa2058 100644
--- a/packages/CompanionDeviceManager/res/values-si/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-si/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"සහායක උපාංග කළමනාකරු"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; හට &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; වෙත ප්‍රවේශ වීමට ඉඩ දෙන්න ද?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; යෙදුමට &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; වෙත ප්‍රවේශ වීමට ඉඩ දෙන්න ද?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ඔරලෝසුව"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; මගින් කළමනාකරණය කරනු ලැබීමට <xliff:g id="PROFILE_NAME">%1$s</xliff:g>ක් තෝරන්න"</string>
-    <string name="summary_watch" msgid="898569637110705523">"මෙම යෙදුමට ඔබේ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> කළමනාකරණය කිරීමට අවශ්‍යයි. <xliff:g id="APP_NAME">%2$s</xliff:g> හට අමතන කෙනෙකුගේ නම වැනි, තතු සමමුහුර්ත කිරීමට, ඔබේ දැනුම්දීම් සමග අන්තර්ක්‍රියා කිරීමට සහ ඔබේ දුරකථනය, SMS, සම්බන්ධතා, දින දර්ශනය, ඇමතුම් ලොග සහ අවට උපාංග අවසර වෙත ප්‍රවේශ වීමට ඉඩ දෙනු ඇත."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"මෙම යෙදුමට අමතන කෙනෙකුගේ නම වැනි, තතු සමමුහුර්ත කිරීමට, සහ ඔබේ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> මත මෙම අවසර වෙත ප්‍රවේශ වීමට ඉඩ දෙනු ඇත"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; විසින් කළමනා කරනු ලැබීමට උපාංගයක් තෝරන්න"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"සැකසීමට <xliff:g id="PROFILE_NAME">%1$s</xliff:g>ක් තෝරන්න"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"මෙම යෙදුමට අමතන කෙනෙකුගේ නම වැනි, තොරතුරු සමමුහූර්ත කිරීමට, සහ ඔබේ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> මත මෙම අවසර වෙත ප්‍රවේශ වීමට ඉඩ දෙනු ලැබේ"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; හට &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; කළමනා කිරීමට ඉඩ දෙන්න ද?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"කණ්ණාඩි"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> කළමනා කිරීමට මෙම යෙදුම අවශ්‍යයි. <xliff:g id="APP_NAME">%2$s</xliff:g> හට ඔබේ දැනුම්දීම් සමග අන්තර්ක්‍රියා කිරීමට සහ ඔබේ දුරකථනය, කෙටි පණිවුඩය, සම්බන්ධතා, මයික්‍රොෆෝනය සහ අවට උපාංග අවසර වෙත ප්‍රවේශ වීමට ඉඩ දෙයි."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"මෙම යෙදුමට ඔබේ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> මත මෙම අවසර වෙත ප්‍රවේශ වීමට ඉඩ දෙනු ඇත"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"උපාංගය"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"මෙම යෙදුමට ඔබේ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> මත මෙම අවසර වෙත ප්‍රවේශ වීමට ඉඩ දෙනු ලැබේ"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; හට ඔබගේ දුරකථනයෙන් මෙම තොරතුරුවලට ප්‍රවේශ වීමට ඉඩ දෙන්න"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"හරස්-උපාංග සේවා"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> ඔබේ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> වෙනුවෙන් ඔබේ උපාංග අතර යෙදුම් ප්‍රවාහ කිරීමට අවසරය ඉල්ලමින් සිටියි"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"මෙම ක්‍රියාව කිරීමට &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; හට ඉඩ දෙන්න ද?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> ඔබේ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> වෙනුවෙන් යෙදුම් සහ අනෙකුත් පද්ධති විශේෂාංග අවට උපාංග වෙත ප්‍රවාහ කිරීමට අවසර ඉල්ලයි"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"උපාංගය"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"මෙම යෙදුමට ඔබේ දුරකථනය සහ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> අතර, අමතන කෙනෙකුගේ නම වැනි, තතු සමමුහුර්ත කිරීමට හැකි වනු ඇත"</string>
     <string name="summary_generic" msgid="1761976003668044801">"මෙම යෙදුමට ඔබේ දුරකථනය සහ තෝරා ගත් උපාංගය අතර, අමතන කෙනෙකුගේ නම වැනි, තතු සමමුහුර්ත කිරීමට හැකි වනු ඇත"</string>
     <string name="consent_yes" msgid="8344487259618762872">"ඉඩ දෙන්න"</string>
     <string name="consent_no" msgid="2640796915611404382">"ඉඩ නොදෙන්න"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"අවලංගු කරන්න"</string>
     <string name="consent_back" msgid="2560683030046918882">"ආපසු"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> විදහන්න"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> හකුළන්න"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; the හි යෙදුම්වලට &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; හි අවසරම දෙන්නද?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"මෙයට &lt;strong&gt;මයික්‍රොෆෝනය&lt;/strong&gt;, &lt;strong&gt;කැමරාව&lt;/strong&gt;, සහ &lt;strong&gt;ස්ථාන ප්‍රවේශය&lt;/strong&gt;, සහ &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; මත අනෙකුත් සංවේදී අවසර ඇතුළත් විය හැක. &lt;br/&gt;&lt;br/&gt;ඔබට &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; හි ඔබේ සැකසීම් තුළ ඕනෑම වේලාවක මෙම අවසර වෙනස් කළ හැක."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"යෙදුම් නිරූපකය"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"වැඩිදුර තොරතුරු බොත්තම"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"තව තොරතුරු"</string>
     <string name="permission_phone" msgid="2661081078692784919">"දුරකථනය"</string>
     <string name="permission_sms" msgid="6337141296535774786">"කෙටිපණිවුඩය"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"සම්බන්‍ධතා"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sk/strings.xml b/packages/CompanionDeviceManager/res/values-sk/strings.xml
index 24a0f19..929b56c 100644
--- a/packages/CompanionDeviceManager/res/values-sk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sk/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Správca sprievodných zariadení"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Chcete povoliť aplikácii &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; prístup k zariadeniu &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Chcete povoliť aplikácii &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; prístup k zariadeniu &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"hodinky"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Vyberte profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, ktorý bude spravovať aplikácia &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Táto aplikácia sa vyžaduje na správu zariadenia <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> bude môcť synchronizovať informácie, napríklad meno volajúceho, interagovať s vašimi upozorneniami a získavať prístup k povoleniam telefónu, SMS, kontaktov, kalendára, zoznamu hovorov a zariadení v okolí."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Táto aplikácia bude môcť synchronizovať informácie, napríklad meno volajúceho, a získavať prístup k týmto povoleniam v zariadení <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Vyberte zariadenie, ktoré bude spravovať aplikácia &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Vyberte profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, ktorý nastavíte"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Táto aplikácia bude môcť synchronizovať informácie, napríklad meno volajúceho, a získavať prístup k týmto povoleniam v zariadení <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Chcete povoliť aplikácii &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; spravovať zariadenie &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"okuliare"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Táto aplikácia sa vyžaduje na správu zariadenia <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> bude môcť interagovať s vašimi upozorneniami a získa prístup k povoleniam pre telefón, SMS, kontakty, mikrofón a zariadenia v okolí."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Táto aplikácia bude mať prístup k týmto povoleniam v zariadení <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"zariadenie"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Táto aplikácia bude mať prístup k týmto povoleniam v zariadení <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Povoľte aplikácii &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; prístup k týmto informáciám z vášho telefónu"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Služby pre viacero zariadení"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> vyžaduje pre zariadenie <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> povolenie streamovať aplikácie medzi vašimi zariadeniami."</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Chcete povoliť zariadeniu &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; vykonať túto akciu?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> vyžaduje pre zariadenie <xliff:g id="DEVICE_NAME">%2$s</xliff:g> povolenie streamovať aplikácie a ďalšie systémové funkcie do zariadení v okolí"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"zariadenie"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Táto aplikácia bude môcť synchronizovať informácie, napríklad meno volajúceho, medzi telefónom a zariadením <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Táto aplikácia bude môcť synchronizovať informácie, napríklad meno volajúceho, medzi telefónom a vybraným zariadením"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Povoliť"</string>
     <string name="consent_no" msgid="2640796915611404382">"Nepovoliť"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Zrušiť"</string>
     <string name="consent_back" msgid="2560683030046918882">"Späť"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Rozbaliť sekciu <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Zbaliť sekciu <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Chcete udeliť aplikáciám v zariadení &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; rovnaké povolenia ako v zariadení &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Môžu zahŕňať prístup k &lt;strong&gt;mikrofónu&lt;/strong&gt;, &lt;strong&gt;kamere&lt;/strong&gt; a &lt;strong&gt;polohe&lt;/strong&gt;, a ďalšie citlivé povolenia v zariadení &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Tieto povolenia môžete kedykoľvek zmeniť v nastaveniach zariadenia &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ikona aplikácie"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Tlačidlo Ďalšie informácie"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Ďalšie informácie"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefón"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontakty"</string>
@@ -68,7 +68,7 @@
     <string name="permission_notification_summary" msgid="884075314530071011">"Môže čítať všetky upozornenia vrátane informácií, ako sú kontakty, správy a fotky"</string>
     <string name="permission_app_streaming_summary" msgid="606923325679670624">"Streamovať aplikácie telefónu"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
-    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Steaming aplikácii a ďalších systémov funkcií zo zariadenia"</string>
+    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Streaming aplikácii a ďalších systémových funkcií zo zariadenia"</string>
     <string name="device_type" product="default" msgid="8268703872070046263">"telefón"</string>
     <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
 </resources>
diff --git a/packages/CompanionDeviceManager/res/values-sl/strings.xml b/packages/CompanionDeviceManager/res/values-sl/strings.xml
index 6058ae1..b1b1e91 100644
--- a/packages/CompanionDeviceManager/res/values-sl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sl/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Upravitelj spremljevalnih naprav"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Želite aplikaciji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; dovoliti dostop do naprave &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Želite aplikaciji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; dovoliti dostop do naprave &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ura"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Izbira naprave »<xliff:g id="PROFILE_NAME">%1$s</xliff:g>«, ki jo bo upravljala aplikacija &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Ta aplikacija je potrebna za upravljanje naprave »<xliff:g id="DEVICE_NAME">%1$s</xliff:g>«. Aplikaciji <xliff:g id="APP_NAME">%2$s</xliff:g> bodo omogočene sinhronizacija podatkov, na primer imena klicatelja, interakcija z obvestili in uporaba dovoljenj Telefon, SMS, Stiki, Koledar, Dnevniki klicev in Naprave v bližini."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Ta aplikacija bo lahko sinhronizirala podatke, na primer ime klicatelja, in dostopala do teh dovoljenj v napravi »<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>«."</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Izbira naprave, ki jo bo upravljala aplikacija &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Izberite profil naprave »<xliff:g id="PROFILE_NAME">%1$s</xliff:g>« za nastavitev"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Ta aplikacija bo lahko sinhronizirala podatke, na primer ime klicatelja, in dostopala do teh dovoljenj v napravi »<xliff:g id="DEVICE_NAME">%1$s</xliff:g>«."</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Želite aplikaciji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; dovoliti upravljanje naprave &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"očala"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Ta aplikacija je potrebna za upravljanje naprave »<xliff:g id="DEVICE_NAME">%1$s</xliff:g>«. Aplikaciji <xliff:g id="APP_NAME">%2$s</xliff:g> bosta omogočeni interakcija z obvestili in uporaba dovoljenj Telefon, SMS, Stiki, Mikrofon in Naprave v bližini."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Ta aplikacija bo lahko dostopala do teh dovoljenj v napravi »<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>«."</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"naprava"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Ta aplikacija bo lahko dostopala do teh dovoljenj v napravi »<xliff:g id="DEVICE_NAME">%1$s</xliff:g>«."</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Dovolite, da &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; dostopa do teh podatkov v vašem telefonu"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Storitve za zunanje naprave"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> v imenu naprave »<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>« zahteva dovoljenje za pretočno predvajanje aplikacij v vaših napravah."</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Ali napravi &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; dovolite izvedbo tega dejanja?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> v imenu naprave »<xliff:g id="DEVICE_NAME">%2$s</xliff:g>« zahteva dovoljenje za pretočno predvajanje aplikacij in drugih sistemskih funkcij v napravah v bližini."</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"naprava"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Ta aplikacija bo lahko sinhronizirala podatke, na primer ime klicatelja, v telefonu in napravi »<xliff:g id="DEVICE_NAME">%1$s</xliff:g>«."</string>
     <string name="summary_generic" msgid="1761976003668044801">"Ta aplikacija bo lahko sinhronizirala podatke, na primer ime klicatelja, v telefonu in izbrani napravi."</string>
     <string name="consent_yes" msgid="8344487259618762872">"Dovoli"</string>
     <string name="consent_no" msgid="2640796915611404382">"Ne dovoli"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Prekliči"</string>
     <string name="consent_back" msgid="2560683030046918882">"Nazaj"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Razširi dovoljenje »<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>«"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Strni dovoljenje »<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>«"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Ali želite aplikacijam v napravi &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; odobriti enaka dovoljenja kot v napravi &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"To lahko vključuje &lt;strong&gt;dostop do mikrofona&lt;/strong&gt;, &lt;strong&gt;fotoaparata&lt;/strong&gt; in &lt;strong&gt;lokacije&lt;/strong&gt; ter druga občutljiva dovoljenja v napravi &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Ta dovoljenja lahko kadar koli spremenite v nastavitvah v napravi &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ikona aplikacije"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Gumb za več informacij"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Več informacij"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Stiki"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sq/strings.xml b/packages/CompanionDeviceManager/res/values-sq/strings.xml
index aeab5bf..037a707 100644
--- a/packages/CompanionDeviceManager/res/values-sq/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sq/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Menaxheri i pajisjes shoqëruese"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"T\'i lejohet &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; qasja te &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"T\'i lejohet aplikacionit &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; qasja te &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"ora inteligjente"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Zgjidh \"<xliff:g id="PROFILE_NAME">%1$s</xliff:g>\" që do të menaxhohet nga &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Ky aplikacion nevojitet për të menaxhuar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> do të lejohet të sinkronizojë informacione, si p.sh. emrin e dikujt që po telefonon, të ndërveprojë me njoftimet e tua dhe të ketë qasje te lejet e \"Telefonit\", \"SMS-ve\", \"Kontakteve\", \"Kalendarit\", \"Evidencave të telefonatave\" dhe \"Pajisjeve në afërsi\"."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Këtij aplikacioni do t\'i lejohet të sinkronizojë informacione, si p.sh. emrin e dikujt që po telefonon, si dhe të ketë qasje në këto leje në <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Zgjidh një pajisje që do të menaxhohet nga &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Zgjidh një <xliff:g id="PROFILE_NAME">%1$s</xliff:g> për konfigurimin"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Këtij aplikacioni do t\'i lejohet të sinkronizojë informacione, si p.sh. emrin e dikujt që po telefonon, si dhe të ketë qasje në këto leje në <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Të lejohet që &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; të menaxhojë &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"syzet"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Ky aplikacion nevojitet për të menaxhuar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> do të lejohet të ndërveprojë me njoftimet e tua dhe të ketë qasje te lejet e \"Telefonit\", \"SMS-ve\", \"Kontakteve\", \"Mikrofonit\" dhe të \"Pajisjeve në afërsi\"."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Këtij aplikacioni do t\'i lejohet qasja te këto leje në <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"pajisje"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Këtij aplikacioni do t\'i lejohet qasja te këto leje në <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Lejo që &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; të ketë qasje në këtë informacion nga telefoni yt"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Shërbimet mes pajisjeve"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> po kërkon leje në emër të <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> për të transmetuar aplikacione ndërmjet pajisjeve të tua"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Të lejohet që &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; të ndërmarrë këtë veprim?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> po kërkon leje në emër të (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>) tënde për të transmetuar aplikacione dhe veçori të tjera të sistemit te pajisjet në afërsi"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"pajisja"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Ky aplikacion do të mund të sinkronizojë informacione, si p.sh emrin i dikujt që po telefonon, mes telefonit tënd dhe <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="summary_generic" msgid="1761976003668044801">"Ky aplikacion do të mund të sinkronizojë informacione, si p.sh emrin e dikujt që po telefonon, mes telefonit tënd dhe pajisjes së zgjedhur."</string>
     <string name="consent_yes" msgid="8344487259618762872">"Lejo"</string>
     <string name="consent_no" msgid="2640796915611404382">"Mos lejo"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Anulo"</string>
     <string name="consent_back" msgid="2560683030046918882">"Pas"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Zgjero: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Palos: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"T\'i jepen aplikacioneve në &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; të njëjtat leje si në &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Kjo mund të përfshijë qasjen te &lt;strong&gt;Mikrofoni&lt;/strong&gt;, &lt;strong&gt;Kamera&lt;/strong&gt;, dhe &lt;strong&gt;Vendndodhja&lt;/strong&gt;, dhe leje të tjera për informacione delikate në &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Ti mund t\'i ndryshosh këto leje në çdo kohë te \"Cilësimet\" në &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ikona e aplikacionit"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Butoni \"Më shumë informacione\""</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Më shumë informacione"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefoni"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontaktet"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sr/strings.xml b/packages/CompanionDeviceManager/res/values-sr/strings.xml
index cdcddf1..3817d58 100644
--- a/packages/CompanionDeviceManager/res/values-sr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sr/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Менаџер придруженог уређаја"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Дозволите да &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; приступа уређају &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Дозволите да апликација &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; приступа уређају &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"сат"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Одаберите <xliff:g id="PROFILE_NAME">%1$s</xliff:g> којим ће управљати апликација &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Ова апликација је потребна за управљање уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> ће добити дозволу за синхронизовање информација, попут особе која упућује позив, за интеракцију са обавештењима и приступ дозволама за телефон, SMS, контакте, календар, евиденције позива и уређаје у близини."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Овој апликацији ће бити дозвољено да синхронизује податке, попут имена особе која упућује позив, и приступа тим дозволама на вашем уређају (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Одаберите уређај којим ће управљати апликација &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Одаберите профил <xliff:g id="PROFILE_NAME">%1$s</xliff:g> који желите да подесите"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Овој апликацији ће бити дозвољено да синхронизује податке, попут имена особе која упућује позив, и приступа тим дозволама на вашем уређају (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Желите ли да дозволите да &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; управља уређајем &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"наочаре"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Ова апликација је потребна за управљање уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> ће добити дозволу за интеракцију са обавештењима и приступ дозволама за телефон, SMS, контакте, микрофон и уређаје у близини."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Овој апликацији ће бити дозвољено да приступа овим дозволама на вашем уређају (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"уређај"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Овој апликацији ће бити дозвољено да приступа овим дозволама на вашем уређају (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>)"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Дозволите да &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; приступа овим информацијама са телефона"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Услуге на више уређаја"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> захтева дозволу у име уређаја <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> за стримовање апликација између уређаја"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Желите ли да дозволите да &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; обави ову радњу?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Апликација <xliff:g id="APP_NAME">%1$s</xliff:g> захтева дозволу у име уређаја <xliff:g id="DEVICE_NAME">%2$s</xliff:g> да стримује апликације и друге системске функције на уређаје у близини"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"уређај"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Ова апликација ће моћи да синхронизује податке, попут имена особе која упућује позив, између телефона и уређаја <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Ова апликација ће моћи да синхронизује податке, попут имена особе која упућује позив, између телефона и одабраног уређаја"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Дозволи"</string>
     <string name="consent_no" msgid="2640796915611404382">"Не дозволи"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Откажи"</string>
     <string name="consent_back" msgid="2560683030046918882">"Назад"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Прошири <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Скупи <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Апликцијама на уређају &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; дајете све дозволе као на уређају &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"То може да обухвата приступ &lt;strong&gt;микрофону&lt;/strong&gt;, &lt;strong&gt;камери&lt;/strong&gt;, и &lt;strong&gt;локацији&lt;/strong&gt;, и друге осетљиве дозволе на уређају &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Можете да промените те дозволе у било ком тренутку у Подешавањима на уређају &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Икона апликације"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Дугме за више информација"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Још информација"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Телефон"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Контакти"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sv/strings.xml b/packages/CompanionDeviceManager/res/values-sv/strings.xml
index f43f973..f3be3be 100644
--- a/packages/CompanionDeviceManager/res/values-sv/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sv/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Vill du tillåta att &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; får åtkomst till &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Vill du tillåta att appen &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; får åtkomst till &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"klocka"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Välj en <xliff:g id="PROFILE_NAME">%1$s</xliff:g> för hantering av &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Appen behövs för att hantera <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> får tillåtelse att synkronisera information, till exempel namnet på någon som ringer, interagera med dina aviseringar och får åtkomst till behörigheterna Telefon, Sms, Kontakter, Kalender, Samtalsloggar och Enheter i närheten."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Appen får tillåtelse att synkronisera information, till exempel namnet på någon som ringer, och få tillgång till dessa behörigheter på din <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Välj en enhet för hantering av &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Välj en <xliff:g id="PROFILE_NAME">%1$s</xliff:g> för konfigurering"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Appen får tillåtelse att synkronisera information, till exempel namnet på någon som ringer, och få tillgång till dessa behörigheter på din <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Tillåt att &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; hanterar &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"glasögon"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Appen behövs för att hantera <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> får tillåtelse att interagera med dina aviseringar och får åtkomst till behörigheterna Telefon, Sms, Kontakter, Mikrofon och Enheter i närheten."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Appen får tillåtelse att använda dessa behörigheter på din <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"enhet"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Appen får tillåtelse att använda dessa behörigheter på din <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Ge &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; åtkomstbehörighet till denna information på telefonen"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Tjänster för flera enheter"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> begär behörighet att låta <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> streama appar mellan enheter"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Vill du tillåta att &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; utför denna åtgärd?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> begär behörighet att streama appar och andra systemfunktioner till enheter i närheten för din <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"enhet"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Den här appen kommer att kunna synkronisera information mellan telefonen och <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, till exempel namnet på någon som ringer"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Den här appen kommer att kunna synkronisera information mellan telefonen och den valda enheten, till exempel namnet på någon som ringer"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Tillåt"</string>
     <string name="consent_no" msgid="2640796915611404382">"Tillåt inte"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Avbryt"</string>
     <string name="consent_back" msgid="2560683030046918882">"Tillbaka"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Utöka <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Komprimera <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Vill du ge apparna på &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; samma behörigheter som de har på &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Detta kan inkludera &lt;strong&gt;Mikrofon-&lt;/strong&gt;, &lt;strong&gt;Kamera-&lt;/strong&gt;, och &lt;strong&gt;Platsåtkomst&lt;/strong&gt;, samt andra känsliga behörigheter på &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Du kan ändra dessa behörigheter när som helst i inställningarna på &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Appikon"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Knappen Mer information"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Mer information"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"Sms"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontakter"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sw/strings.xml b/packages/CompanionDeviceManager/res/values-sw/strings.xml
index e784373..7b94239 100644
--- a/packages/CompanionDeviceManager/res/values-sw/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sw/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Kidhibiti cha Vifaa Visaidizi"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Ungependa kuruhusu &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ifikie &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Ungependa kuruhusu &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ifikie &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"saa"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Chagua <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ili idhibitiwe na &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Programu hii inahitajika ili udhibiti <xliff:g id="DEVICE_NAME">%1$s</xliff:g> yako. <xliff:g id="APP_NAME">%2$s</xliff:g> itaruhusiwa kusawazisha maelezo, kama vile jina la mtu anayepiga simu, kutumia arifa zako na ruhusa zako za Simu, SMS, Anwani, Maikrofoni na vifaa vilivyo Karibu."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Programu hii itaruhusiwa kusawazisha maelezo, kama vile jina la mtu anayepiga simu na kufikia ruhusa hizi kwenye <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> yako"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Chagua kifaa cha kudhibitiwa na &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Chagua <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ili uweke mipangilio"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Programu hii itaruhusiwa kusawazisha maelezo, kama vile jina la mtu anayepiga simu na kufikia ruhusa hizi kwenye <xliff:g id="DEVICE_NAME">%1$s</xliff:g> yako"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Ungependa kuruhusu &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; idhibiti &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"miwani"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Programu hii inahitajika ili udhibiti <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> itaruhusiwa kutumia arifa zako na kufikia ruhusa zako za Simu, SMS, Anwani, Maikrofoni na Vifaa vilivyo Karibu."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Programu hii itaruhusiwa kufikia ruhusa hizi kwenye <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> yako"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"kifaa"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Programu hii itaruhusiwa kufikia ruhusa hizi kwenye <xliff:g id="DEVICE_NAME">%1$s</xliff:g> yako"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Ruhusu &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ifikie maelezo haya kutoka kwenye simu yako"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Huduma za kifaa kilichounganishwa kwingine"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Programu ya <xliff:g id="APP_NAME">%1$s</xliff:g> inaomba ruhusa kwa niaba ya <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> yako ili itiririshe programu kati ya vifaa vyako"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Ungependa kuruhusu &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; itekeleze kitendo hiki?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> inaomba ruhusa kwa niaba ya <xliff:g id="DEVICE_NAME">%2$s</xliff:g> chako ili itiririshe programu na vipengele vingine vya mfumo kwenye vifaa vilivyo karibu"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"kifaa"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Programu hii itaweza kusawazisha maelezo, kama vile jina la mtu anayepiga simu, kati ya simu na <xliff:g id="DEVICE_NAME">%1$s</xliff:g> yako"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Programu hii itaweza kusawazisha maelezo, kama vile jina la mtu anayepiga simu, kati ya simu yako na kifaa ulichochagua"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Ruhusu"</string>
     <string name="consent_no" msgid="2640796915611404382">"Usiruhusu"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Ghairi"</string>
     <string name="consent_back" msgid="2560683030046918882">"Nyuma"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Panua <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Kunja <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Ungependa kuzipa programu katika &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ruhusa ile ile kama kwenye &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Hii ni pamoja na &lt;strong&gt;Maikrofoni&lt;/strong&gt;, &lt;strong&gt;Kamera&lt;/strong&gt;, na &lt;strong&gt;Uwezo wa kufikia mahali&lt;/strong&gt;, na ruhusa nyingine nyeti kwenye &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Unaweza kubadilisha ruhusa hizi wakati wowote katika Mipangilio yako kwenye &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Aikoni ya Programu"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Kitufe cha Maelezo Zaidi"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Maelezo Zaidi"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Simu"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Anwani"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ta/strings.xml b/packages/CompanionDeviceManager/res/values-ta/strings.xml
index e5fe2b2..c1b8352 100644
--- a/packages/CompanionDeviceManager/res/values-ta/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ta/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"கம்பேனியன் சாதன நிர்வாகி"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; சாதனத்தை அணுக &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ஆப்ஸை அனுமதிக்கவா?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; சாதனத்தை அணுக &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ஆப்ஸை அனுமதிக்கவா?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"வாட்ச்"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; ஆப்ஸ் நிர்வகிக்கக்கூடிய <xliff:g id="PROFILE_NAME">%1$s</xliff:g> தேர்ந்தெடுக்கப்பட வேண்டும்"</string>
-    <string name="summary_watch" msgid="898569637110705523">"உங்கள் <xliff:g id="DEVICE_NAME">%1$s</xliff:g> சாதனத்தை நிர்வகிக்க இந்த ஆப்ஸ் தேவை. அழைப்பவரின் பெயர் போன்ற தகவலை ஒத்திசைத்தல், உங்கள் அறிவிப்புகளைப் பார்த்தல், உங்கள் மொபைல், மெசேஜ், தொடர்புகள், கேலெண்டர், அழைப்புப் பதிவுகள், அருகிலுள்ள சாதனங்களை அணுகுதல் ஆகியவற்றுக்கு <xliff:g id="APP_NAME">%2$s</xliff:g> அனுமதிக்கப்படும்."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"அழைப்பவரின் பெயர் போன்ற தகவல்களை ஒத்திசைக்கவும் உங்கள் <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> சாதனத்தில் இந்த அனுமதிகளை அணுகவும் இந்த ஆப்ஸ் அனுமதிக்கப்படும்"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ஆப்ஸால் நிர்வகிக்கப்பட வேண்டிய சாதனத்தைத் தேர்வுசெய்யுங்கள்"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"அமைக்க <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ஐத் தேர்வுசெய்யவும்"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"அழைப்பவரின் பெயர் போன்ற தகவல்களை ஒத்திசைக்கவும் உங்கள் <xliff:g id="DEVICE_NAME">%1$s</xliff:g> சாதனத்தில் இந்த அனுமதிகளை அணுகவும் இந்த ஆப்ஸ் அனுமதிக்கப்படும்"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&amp;gt சாதனத்தை நிர்வகிக்க &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ஆப்ஸை அனுமதிக்கவா?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"கிளாஸஸ்"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> சாதனத்தை நிர்வகிக்க இந்த ஆப்ஸ் தேவை. உங்கள் மொபைல், மெசேஜ், தொடர்புகள், மைக்ரோஃபோன், அருகிலுள்ள சாதனங்கள் ஆகியவற்றுக்கான அணுகலையும் உங்கள் அறிவிப்புகளைப் பார்ப்பதற்கான அனுமதியையும் <xliff:g id="APP_NAME">%2$s</xliff:g> பெறும்."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"உங்கள் <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> சாதனத்தில் இந்த அனுமதிகளை அணுக இந்த ஆப்ஸ் அனுமதிக்கப்படும்"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"சாதனம்"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"உங்கள் <xliff:g id="DEVICE_NAME">%1$s</xliff:g> சாதனத்தில் இந்த அனுமதிகளை அணுக இந்த ஆப்ஸ் அனுமதிக்கப்படும்"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"மொபைலில் உள்ள இந்தத் தகவல்களை அணுக, &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ஆப்ஸை அனுமதிக்கவும்"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"பன்முக சாதன சேவைகள்"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"உங்கள் சாதனங்களுக்கு இடையே ஆப்ஸை ஸ்ட்ரீம் செய்ய உங்கள் <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> சார்பாக <xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸ் அனுமதியைக் கோருகிறது"</string>
@@ -35,18 +34,19 @@
     <string name="summary_computer" msgid="3798467601598297062"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play சேவைகள்"</string>
     <string name="helper_summary_computer" msgid="8774832742608187072">"உங்கள் மொபைலில் உள்ள படங்கள், மீடியா, அறிவிப்புகள் ஆகியவற்றை அணுக உங்கள் <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> சார்பாக <xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸ் அனுமதியைக் கோருகிறது"</string>
-    <string name="title_nearby_device_streaming" msgid="7269956847378799794">"இந்தச் செயலைச் செய்ய &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&amp;gt சாதனத்தை அனுமதிக்கவா?"</string>
+    <string name="title_nearby_device_streaming" msgid="7269956847378799794">"இந்தச் செயலைச் செய்ய &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ஐ அனுமதிக்கவா?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"அருகிலுள்ள சாதனங்களுக்கு ஆப்ஸையும் பிற சிஸ்டம் அம்சங்களையும் ஸ்ட்ரீம் செய்ய உங்கள் <xliff:g id="DEVICE_NAME">%2$s</xliff:g> சார்பாக <xliff:g id="APP_NAME">%1$s</xliff:g> அனுமதி கோருகிறது"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"சாதனம்"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"அழைப்பவரின் பெயர் போன்ற தகவலை உங்கள் மொபைல் மற்றும் <xliff:g id="DEVICE_NAME">%1$s</xliff:g> சாதனத்திற்கு இடையில் இந்த ஆப்ஸால் ஒத்திசைக்க முடியும்"</string>
     <string name="summary_generic" msgid="1761976003668044801">"அழைப்பவரின் பெயர் போன்ற தகவலை உங்கள் மொபைல் மற்றும் தேர்வுசெய்த சாதனத்திற்கு இடையில் இந்த ஆப்ஸால் ஒத்திசைக்க முடியும்"</string>
     <string name="consent_yes" msgid="8344487259618762872">"அனுமதி"</string>
     <string name="consent_no" msgid="2640796915611404382">"அனுமதிக்க வேண்டாம்"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"ரத்துசெய்"</string>
     <string name="consent_back" msgid="2560683030046918882">"பின்செல்"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ஐ விரிவாக்கும்"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> ஐச் சுருக்கும்"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; சாதனத்தில் இருக்கும் அதே அனுமதிகளை &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; சாதனத்தில் உள்ள ஆப்ஸுக்கும் வழங்கவா?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"&lt;strong&gt;மைக்ரோஃபோன்&lt;/strong&gt;, &lt;strong&gt;கேமரா&lt;/strong&gt;, &lt;strong&gt;இருப்பிட அணுகல்&lt;/strong&gt;, ஆகியவற்றுக்கான அனுமதிகளும் &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; சாதனத்தில் உள்ள பிற பாதுகாக்கவேண்டிய தகவல்களுக்கான அனுமதிகளும் இதில் அடங்கக்கூடும். &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; &lt;br/&gt;&lt;br/&gt;சாதனத்தில் உள்ள அமைப்புகளில் இந்த அனுமதிகளை எப்போது வேண்டுமானாலும் மாற்றிக்கொள்ளலாம்."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"ஆப்ஸ் ஐகான்"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"கூடுதல் தகவல்கள் பட்டன்"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"கூடுதல் தகவல்கள்"</string>
     <string name="permission_phone" msgid="2661081078692784919">"மொபைல்"</string>
     <string name="permission_sms" msgid="6337141296535774786">"மெசேஜ்"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"தொடர்புகள்"</string>
diff --git a/packages/CompanionDeviceManager/res/values-te/strings.xml b/packages/CompanionDeviceManager/res/values-te/strings.xml
index ee20fbc..52316cd 100644
--- a/packages/CompanionDeviceManager/res/values-te/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-te/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"సహచర పరికర మేనేజర్"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;‌ను యాక్సెస్ చేయడానికి &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;‌ను అనుమతించాలా?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;‌ను యాక్సెస్ చేయడానికి &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; యాప్‌ను అనుమతించాలా?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"వాచ్"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; ద్వారా మేనేజ్ చేయబడటానికి ఒక <xliff:g id="PROFILE_NAME">%1$s</xliff:g>ను ఎంచుకోండి"</string>
-    <string name="summary_watch" msgid="898569637110705523">"మీ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>‌ను మేనేజ్ చేయడానికి ఈ యాప్ అవసరం. కాల్ చేస్తున్న వారి పేరు వంటి సమాచారాన్ని సింక్ చేయడానికి, మీ నోటిఫికేషన్‌లతో ఇంటరాక్ట్ అవ్వడానికి, అలాగే మీ ఫోన్, SMS, కాంటాక్ట్‌లు, క్యాలెండర్, కాల్ లాగ్‌లు, సమీపంలోని పరికరాల అనుమతులను యాక్సెస్ చేయడానికి <xliff:g id="APP_NAME">%2$s</xliff:g> అనుమతించబడుతుంది."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"కాల్ చేస్తున్న వారి పేరు వంటి సమాచారాన్ని సింక్ చేయడానికి, మీ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>లో ఈ అనుమతులను యాక్సెస్ చేయడానికి ఈ యాప్ అనుమతించబడుతుంది"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ద్వారా మేనేజ్ చేయబడే పరికరాన్ని ఎంచుకోండి"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"సెటప్ చేయడానికి <xliff:g id="PROFILE_NAME">%1$s</xliff:g>‌ను ఎంచుకోండి"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"కాల్ చేస్తున్న వారి పేరు వంటి సమాచారాన్ని సింక్ చేయడానికి, మీ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>లో ఈ అనుమతులను యాక్సెస్ చేయడానికి ఈ యాప్ అనుమతించబడుతుంది"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;‌ను మేనేజ్ చేయడానికి &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;‌ను అనుమతించాలా?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"గ్లాసెస్"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‌ను మేనేజ్ చేయడానికి ఈ యాప్ అవసరం. మీ నోటిఫికేషన్‌లతో ఇంటరాక్ట్ అవ్వడానికి, అలాగే మీ ఫోన్, SMS, కాంటాక్ట్‌లు, మైక్రోఫోన్, సమీపంలోని పరికరాల అనుమతులను యాక్సెస్ చేయడానికి <xliff:g id="APP_NAME">%2$s</xliff:g> అనుమతించబడుతుంది."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"మీ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>లో ఈ అనుమతులను యాక్సెస్ చేయడానికి ఈ యాప్ అనుమతించబడుతుంది"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"పరికరం"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"మీ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>లో ఈ అనుమతులను యాక్సెస్ చేయడానికి ఈ యాప్ అనుమతించబడుతుంది"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"మీ ఫోన్ నుండి ఈ సమాచారాన్ని యాక్సెస్ చేయడానికి &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; యాప్‌ను అనుమతించండి"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Cross-device services"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"మీ పరికరాల మధ్య యాప్‌లను స్ట్రీమ్ చేయడానికి <xliff:g id="APP_NAME">%1$s</xliff:g> మీ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> తరఫున అనుమతిని రిక్వెస్ట్ చేస్తోంది"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"ఈ చర్యను అమలు చేయడానికి &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;‌ను అనుమతించాలా?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"సమీపంలోని పరికరాలకు యాప్‌లను, ఇతర సిస్టమ్ ఫీచర్‌లను స్ట్రీమ్ చేయడానికి <xliff:g id="APP_NAME">%1$s</xliff:g> మీ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> తరఫున అనుమతిని రిక్వెస్ట్ చేస్తోంది"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"పరికరం"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"కాల్ చేస్తున్న వారి పేరు వంటి సమాచారాన్ని ఈ యాప్ మీ ఫోన్‌కి, <xliff:g id="DEVICE_NAME">%1$s</xliff:g>‌కి మధ్య సింక్ చేయగలుగుతుంది"</string>
     <string name="summary_generic" msgid="1761976003668044801">"కాల్ చేస్తున్న వారి పేరు వంటి సమాచారాన్ని ఈ యాప్ మీ ఫోన్ కు, ఎంచుకున్న పరికరానికీ మధ్య సింక్ చేయగలుగుతుంది"</string>
     <string name="consent_yes" msgid="8344487259618762872">"అనుమతించండి"</string>
     <string name="consent_no" msgid="2640796915611404382">"అనుమతించవద్దు"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"రద్దు చేయండి"</string>
     <string name="consent_back" msgid="2560683030046918882">"వెనుకకు"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>‌ను విస్తరించండి"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>‌ను కుదించండి"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;లోని యాప్‌లకు &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;లో ఉన్న అనుమతులను ఇవ్వాలా?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"వీటిలో భాగంగా &lt;strong&gt;మైక్రోఫోన్&lt;/strong&gt;, &lt;strong&gt;కెమెరా&lt;/strong&gt;, ఇంకా &lt;strong&gt;లొకేషన్ యాక్సెస్&lt;/strong&gt;, అలాగే &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;పై ఇతర గోప్యమైన సమాచార యాక్సెస్ అనుమతులు ఉండవచ్చు. &lt;br/&gt;&lt;br/&gt;ఈ అనుమతులను మీరు &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;లోని మీ సెట్టింగ్‌లలో ఎప్పుడైనా మార్చవచ్చు."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"యాప్ చిహ్నం"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"మరింత సమాచారం బటన్"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"మరింత సమాచారం"</string>
     <string name="permission_phone" msgid="2661081078692784919">"ఫోన్"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"కాంటాక్ట్‌లు"</string>
diff --git a/packages/CompanionDeviceManager/res/values-th/strings.xml b/packages/CompanionDeviceManager/res/values-th/strings.xml
index fc55930..cb01f2d 100644
--- a/packages/CompanionDeviceManager/res/values-th/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-th/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"อนุญาตให้ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; เข้าถึง &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"อนุญาตให้แอป &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; เข้าถึง &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ใช่ไหม"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"นาฬิกา"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"เลือก<xliff:g id="PROFILE_NAME">%1$s</xliff:g>ที่จะให้มีการจัดการโดย &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"ต้องใช้แอปนี้ในการจัดการ<xliff:g id="DEVICE_NAME">%1$s</xliff:g> <xliff:g id="APP_NAME">%2$s</xliff:g> จะได้รับอนุญาตให้ซิงค์ข้อมูล เช่น ชื่อของบุคคลที่โทรเข้ามา โต้ตอบกับการแจ้งเตือน รวมถึงมีสิทธิ์เข้าถึงโทรศัพท์, SMS, รายชื่อติดต่อ, ปฏิทิน, บันทึกการโทร และอุปกรณ์ที่อยู่ใกล้เคียง"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"แอปนี้จะได้รับอนุญาตให้ซิงค์ข้อมูล เช่น ชื่อของบุคคลที่โทรเข้ามา และมีสิทธิ์เข้าถึงข้อมูลเหล่านี้ใน<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ของคุณ"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"เลือกอุปกรณ์ที่จะให้มีการจัดการโดย &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"เลือก<xliff:g id="PROFILE_NAME">%1$s</xliff:g>ที่จะตั้งค่า"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"แอปนี้จะได้รับอนุญาตให้ซิงค์ข้อมูล เช่น ชื่อของบุคคลที่โทรเข้ามา และมีสิทธิ์เข้าถึงข้อมูลเหล่านี้ใน<xliff:g id="DEVICE_NAME">%1$s</xliff:g>ของคุณ"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"อนุญาตให้ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; จัดการ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ไหม"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"แว่นตา"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"ต้องใช้แอปนี้ในการจัดการ<xliff:g id="DEVICE_NAME">%1$s</xliff:g> <xliff:g id="APP_NAME">%2$s</xliff:g> จะได้รับอนุญาตให้โต้ตอบกับการแจ้งเตือนและมีสิทธิ์เข้าถึงโทรศัพท์, SMS, รายชื่อติดต่อ, ไมโครโฟน และอุปกรณ์ที่อยู่ใกล้เคียง"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"แอปนี้จะได้รับสิทธิ์ดังต่อไปนี้ใน<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ของคุณ"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"อุปกรณ์"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"แอปนี้จะได้รับสิทธิ์ดังต่อไปนี้ใน<xliff:g id="DEVICE_NAME">%1$s</xliff:g>ของคุณ"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"อนุญาตให้ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; เข้าถึงข้อมูลนี้จากโทรศัพท์ของคุณ"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"บริการหลายอุปกรณ์"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> กำลังขอสิทธิ์ในนามของ <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> เพื่อสตรีมแอประหว่างอุปกรณ์ต่างๆ ของคุณ"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"อนุญาตให้ &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ทำงานนี้ไหม"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> กำลังขอสิทธิ์ในนามของ <xliff:g id="DEVICE_NAME">%2$s</xliff:g> เพื่อสตรีมแอปและฟีเจอร์อื่นๆ ของระบบไปยังอุปกรณ์ที่อยู่ใกล้เคียง"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"อุปกรณ์"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"แอปนี้จะสามารถซิงค์ข้อมูล เช่น ชื่อของบุคคลที่โทรเข้ามา ระหว่างโทรศัพท์ของคุณและ<xliff:g id="DEVICE_NAME">%1$s</xliff:g>ได้"</string>
     <string name="summary_generic" msgid="1761976003668044801">"แอปนี้จะสามารถซิงค์ข้อมูล เช่น ชื่อของบุคคลที่โทรเข้ามา ระหว่างโทรศัพท์ของคุณและอุปกรณ์ที่เลือกไว้ได้"</string>
     <string name="consent_yes" msgid="8344487259618762872">"อนุญาต"</string>
     <string name="consent_no" msgid="2640796915611404382">"ไม่อนุญาต"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"ยกเลิก"</string>
     <string name="consent_back" msgid="2560683030046918882">"กลับ"</string>
+    <string name="permission_expand" msgid="893185038020887411">"ขยาย <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"ยุบ <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"ให้แอปใน &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; มีสิทธิ์เหมือนกับใน &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ไหม"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"โดยอาจรวมถึงสิทธิ์เข้าถึง &lt;strong&gt;ไมโครโฟน&lt;/strong&gt; &lt;strong&gt;กล้อง&lt;/strong&gt; และ&lt;strong&gt;ตำแหน่ง&lt;/strong&gt; ตลอดจนสิทธิ์ที่มีความละเอียดอ่อนอื่นๆ ใน &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; &lt;br/&gt;&lt;br/&gt;คุณเปลี่ยนแปลงสิทธิ์เหล่านี้ได้ทุกเมื่อในการตั้งค่าบน &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"ไอคอนแอป"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"ปุ่มข้อมูลเพิ่มเติม"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"ข้อมูลเพิ่มเติม"</string>
     <string name="permission_phone" msgid="2661081078692784919">"โทรศัพท์"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"รายชื่อติดต่อ"</string>
diff --git a/packages/CompanionDeviceManager/res/values-tl/strings.xml b/packages/CompanionDeviceManager/res/values-tl/strings.xml
index 6e4ce39..43d5996 100644
--- a/packages/CompanionDeviceManager/res/values-tl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-tl/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Kasamang Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Payagan ang &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; na i-access ang &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Payagan ang app na &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; na i-access ang &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"relo"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Pumili ng <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para pamahalaan ng &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Kailangan ang app na ito para mapamahalaan ang iyong <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Papayagan ang <xliff:g id="APP_NAME">%2$s</xliff:g> na mag-sync ng impormasyon, tulad ng pangalan ng isang taong tumatawag, makipag-ugnayan sa mga notification mo, at ma-access ang iyong mga pahintulot sa Telepono, SMS, Mga Contact, Kalendaryo, Mga log ng tawag, at Mga kalapit na device."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Papayagan ang app na ito na mag-sync ng impormasyon, tulad ng pangalan ng isang taong tumatawag, at i-access ang mga pahintulot na ito sa iyong <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Pumili ng device na papamahalaan ng &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Pumili ng <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para mag-set up"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Papayagan ang app na ito na mag-sync ng impormasyon, tulad ng pangalan ng taong tumatawag, at i-access ang mga pahintulot na ito sa iyong <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Payagan ang &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; na pamahalaan ang &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"salamin"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Kailangan ang app na ito para mapamahalaan ang <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Papayagan ang <xliff:g id="APP_NAME">%2$s</xliff:g> na makipag-ugnayan sa mga notification mo at i-access ang iyong mga pahintulot sa Telepono, SMS, Mga Contact, Mikropono, at Mga kalapit na device."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Papayagan ang app na ito na i-access ang mga pahintulot na ito sa iyong <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"device"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Papayagan ang app na ito na i-access ang mga pahintulot na ito sa iyong <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Payagan ang &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; na i-access ang impormasyong ito sa iyong telepono"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Mga cross-device na serbisyo"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Ang <xliff:g id="APP_NAME">%1$s</xliff:g> ay humihiling ng pahintulot sa ngalan ng iyong <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> para mag-stream ng mga app sa pagitan ng mga device mo"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Payagan ang &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; na gawin ang pagkilos na ito?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Humihiling ang <xliff:g id="APP_NAME">%1$s</xliff:g> ng pahintulot sa ngalan ng iyong <xliff:g id="DEVICE_NAME">%2$s</xliff:g> para mag-stream ng mga app at iba pang feature ng system sa mga kalapit na device"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"device"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Magagawa ng app na ito na mag-sync ng impormasyon, tulad ng pangalan ng isang taong tumatawag, sa pagitan ng iyong telepono at ng <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Magagawa ng app na ito na mag-sync ng impormasyon, tulad ng pangalan ng isang taong tumatawag, sa pagitan ng iyong telepono at ng napiling device"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Payagan"</string>
     <string name="consent_no" msgid="2640796915611404382">"Huwag payagan"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Kanselahin"</string>
     <string name="consent_back" msgid="2560683030046918882">"Bumalik"</string>
+    <string name="permission_expand" msgid="893185038020887411">"I-expand ang <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"I-collapse ang <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Bigyan ang mga app sa &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ng mga pahintulot na mayroon din sa &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Posibleng kasama rito ang &lt;strong&gt;access sa Mikropono&lt;/strong&gt;, &lt;strong&gt;Camera&lt;/strong&gt;, at &lt;strong&gt;Lokasyon&lt;/strong&gt;, at iba pang pahintulot sa sensitibong impormasyon sa &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Puwede mong baguhin ang mga pahintulot na ito anumang oras sa iyong Mga Setting sa &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Icon ng App"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Button ng Dagdag Impormasyon"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Higit Pang Impormasyon"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telepono"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Mga Contact"</string>
diff --git a/packages/CompanionDeviceManager/res/values-tr/strings.xml b/packages/CompanionDeviceManager/res/values-tr/strings.xml
index f9466db..1e8e842 100644
--- a/packages/CompanionDeviceManager/res/values-tr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-tr/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; cihazına erişmesi için &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; uygulamasına izin verin"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; cihazına erişmesi için &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; uygulamasına izin verin"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"saat"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; tarafından yönetilecek bir <xliff:g id="PROFILE_NAME">%1$s</xliff:g> seçin"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Bu uygulama, <xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazınızın yönetilmesi için gereklidir. <xliff:g id="APP_NAME">%2$s</xliff:g> adlı uygulamanın arayan kişinin adı gibi bilgileri senkronize etmesine, bildirimlerinizle etkileşimde bulunup Telefon, SMS, Kişiler, Takvim, Arama kayıtları ve Yakındaki cihazlar izinlerine erişmesine izin verilir."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Bu uygulamanın arayan kişinin adı gibi bilgileri senkronize etmesine ve <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> cihazınızda aşağıdaki izinlere erişmesine izin verilir"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; tarafından yönetilecek bir cihaz seçin"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Ayarlamak için bir <xliff:g id="PROFILE_NAME">%1$s</xliff:g> seçin"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Bu uygulamanın arayan kişinin adı gibi bilgileri senkronize etmesine ve <xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazınızda aşağıdaki izinlere erişmesine izin verilir"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; uygulamasına &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; cihazını yönetmesi için izin verilsin mi?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"glasses"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Bu uygulama, <xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazının yönetilmesi için gereklidir. <xliff:g id="APP_NAME">%2$s</xliff:g> adlı uygulamanın bildirimlerinizle etkileşimde bulunup Telefon, SMS, Kişiler, Mikrofon ve Yakındaki cihazlar izinlerine erişmesine izin verilir."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Bu uygulamanın <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> cihazınızda şu izinlere erişmesine izin verilecek:"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"Cihaz"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Bu uygulamanın <xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazınızda şu izinlere erişmesine izin verilecek:"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; uygulamasının, telefonunuzdaki bu bilgilere erişmesine izin verin"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Cihazlar arası hizmetler"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g>, cihazlarınız arasında uygulama akışı gerçekleştirmek için <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> cihazınız adına izin istiyor"</string>
@@ -33,20 +32,21 @@
     <string name="summary_automotive_projection" msgid="8683801274662496164"></string>
     <string name="title_computer" msgid="4693714143506569253">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; uygulamasının, telefonunuzdaki bu bilgilere erişmesine izin verin"</string>
     <string name="summary_computer" msgid="3798467601598297062"></string>
-    <string name="helper_title_computer" msgid="4671071173916176037">"Google Play hizmetleri"</string>
+    <string name="helper_title_computer" msgid="4671071173916176037">"Google Play Hizmetleri"</string>
     <string name="helper_summary_computer" msgid="8774832742608187072">"<xliff:g id="APP_NAME">%1$s</xliff:g>, telefonunuzdaki fotoğraf, medya ve bildirimlere erişmek için <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> cihazınız adına izin istiyor"</string>
-    <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; cihazının bu işlem yapmasına izin verilsin mi?"</string>
+    <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; cihazının bu işlemi yapmasına izin verilsin mi?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulaması <xliff:g id="DEVICE_NAME">%2$s</xliff:g> cihazınız adına uygulamaları ve diğer sistem özelliklerini yakındaki cihazlara aktarmak için izin istiyor"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"cihaz"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Bu uygulama, arayan kişinin adı gibi bilgileri telefonunuz ve <xliff:g id="DEVICE_NAME">%1$s</xliff:g> adlı cihaz arasında senkronize edebilir"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Bu uygulama, arayan kişinin adı gibi bilgileri telefonunuz ve seçili cihaz arasında senkronize edebilir"</string>
     <string name="consent_yes" msgid="8344487259618762872">"İzin ver"</string>
     <string name="consent_no" msgid="2640796915611404382">"İzin verme"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"İptal"</string>
     <string name="consent_back" msgid="2560683030046918882">"Geri"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> panelini genişlet"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> panelini daralt"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; cihazındaki uygulamalara, &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; cihazındakiyle aynı izinler verilsin mi?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Bu; &lt;strong&gt;Mikrofon&lt;/strong&gt;, &lt;strong&gt;Kamera&lt;/strong&gt; ve &lt;strong&gt;Konum erişimi&lt;/strong&gt; izinlerinin yanı sıra &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; cihazındaki diğer hassas bilgilere erişim izinlerini içerebilir. &lt;br/&gt;&lt;br/&gt;&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; cihazının Ayarlar bölümünden istediğiniz zaman bu izinleri değiştirebilirsiniz."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Uygulama Simgesi"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Daha Fazla Bilgi Düğmesi"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Daha Fazla Bilgi"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kişiler"</string>
@@ -59,16 +59,16 @@
     <string name="permission_app_streaming" msgid="6009695219091526422">"Uygulamalar"</string>
     <string name="permission_nearby_device_streaming" msgid="1023325519477349499">"Yayınlama"</string>
     <string name="permission_phone_summary" msgid="6684396967861278044">"Telefon aramaları yapabilir ve telefon aramalarını yönetebilir"</string>
-    <string name="permission_call_logs_summary" msgid="6186103394658755022">"Telefon arama kaydını okuma ve yazma"</string>
+    <string name="permission_call_logs_summary" msgid="6186103394658755022">"Telefon arama kaydını okuyabilir ve yazabilir"</string>
     <string name="permission_sms_summary" msgid="3508442683678912017">"SMS mesajları gönderebilir ve görüntüleyebilir"</string>
     <string name="permission_contacts_summary" msgid="675861979475628708">"Kişilerinize erişebilir"</string>
     <string name="permission_calendar_summary" msgid="6460000922511766226">"Takviminize erişebilir"</string>
     <string name="permission_microphone_summary" msgid="3692091540613093394">"Ses kaydedebilir"</string>
     <string name="permission_nearby_devices_summary" msgid="931940524460876655">"Yakındaki cihazları keşfedip bağlanabilir ve bu cihazların göreli konumunu belirleyebilir"</string>
     <string name="permission_notification_summary" msgid="884075314530071011">"Kişiler, mesajlar ve fotoğraflar da dahil olmak üzere tüm bildirimleri okuyabilir"</string>
-    <string name="permission_app_streaming_summary" msgid="606923325679670624">"Telefonunuzun uygulamalarını yayınlama"</string>
+    <string name="permission_app_streaming_summary" msgid="606923325679670624">"Telefonunuzun uygulamalarını yayınlayabilir"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
-    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Telefonunuzdan uygulamaları ve diğer sistem özelliklerini yayınlayın"</string>
+    <string name="permission_nearby_device_streaming_summary" msgid="8280824871197081246">"Telefonunuzdan uygulamaları ve diğer sistem özelliklerini yayınlayabilir"</string>
     <string name="device_type" product="default" msgid="8268703872070046263">"telefon"</string>
     <string name="device_type" product="tablet" msgid="5038791954983067774">"tablet"</string>
 </resources>
diff --git a/packages/CompanionDeviceManager/res/values-uk/strings.xml b/packages/CompanionDeviceManager/res/values-uk/strings.xml
index 5b192a8..39a2b1b 100644
--- a/packages/CompanionDeviceManager/res/values-uk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-uk/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Диспетчер супутніх пристроїв"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Надати додатку &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; доступ до інформації на &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Дозволити додатку &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; доступ до інформації на пристрої &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"годинник"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Виберіть <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, яким керуватиме додаток &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Цей додаток потрібен, щоб керувати пристроєм \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". Додаток <xliff:g id="APP_NAME">%2$s</xliff:g> зможе синхронізувати інформацію (наприклад, ім’я абонента, який викликає), взаємодіяти з вашими сповіщеннями й отримає дозволи \"Телефон\", \"SMS\", \"Контакти\", \"Календар\", \"Журнали викликів\" і \"Пристрої поблизу\"."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Цей додаток зможе синхронізувати інформацію (наприклад, ім’я абонента, який викликає) і отримає доступ до перелічених нижче дозволів на вашому <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Виберіть пристрій, яким керуватиме додаток &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Виберіть <xliff:g id="PROFILE_NAME">%1$s</xliff:g> для налаштування"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Цей додаток зможе синхронізувати інформацію (наприклад, ім’я абонента, який викликає) і отримає доступ до перелічених нижче дозволів на вашому <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Дозволити додатку &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; керувати пристроєм &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"окуляри"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Цей додаток потрібен, щоб керувати пристроєм \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\". Додаток <xliff:g id="APP_NAME">%2$s</xliff:g> зможе взаємодіяти з вашими сповіщеннями й отримає дозволи \"Телефон\", \"SMS\", \"Контакти\", \"Мікрофон\" і \"Пристрої поблизу\"."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Цей додаток матиме доступ до перелічених нижче дозволів на вашому <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"пристрій"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Цей додаток матиме доступ до перелічених нижче дозволів на вашому <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Надайте додатку &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; доступ до цієї інформації з телефона"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Сервіси для кількох пристроїв"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> від імені вашого пристрою \"<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>\" запитує дозвіл на трансляцію додатків між вашими пристроями"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Дозволити додатку &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; виконувати цю дію?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> від імені вашого пристрою (<xliff:g id="DEVICE_NAME">%2$s</xliff:g>) запитує дозвіл на трансляцію додатків та інших системних функцій на пристрої поблизу"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"пристрій"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Цей додаток зможе синхронізувати інформацію (наприклад, ім’я абонента, який викликає) між телефоном і пристроєм \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\""</string>
     <string name="summary_generic" msgid="1761976003668044801">"Цей додаток зможе синхронізувати інформацію (наприклад, ім’я абонента, який викликає) між телефоном і вибраним пристроєм"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Дозволити"</string>
     <string name="consent_no" msgid="2640796915611404382">"Не дозволяти"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Скасувати"</string>
     <string name="consent_back" msgid="2560683030046918882">"Назад"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Розгорнути дозвіл \"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>\""</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Згорнути дозвіл \"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>\""</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Надати додаткам на пристрої &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; такі самі дозволи, що й на пристрої &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Це можуть бути дозволи &lt;strong&gt;Мікрофон&lt;/strong&gt;, &lt;strong&gt;Камера&lt;/strong&gt;, &lt;strong&gt;Геодані&lt;/strong&gt;, а також інші дозволи на доступ до чутливих даних на пристрої &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Ви можете будь-коли змінити ці дозволи в налаштуваннях на пристрої &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Значок додатка"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Кнопка \"Докладніше\""</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Докладніше"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Телефон"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Контакти"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ur/strings.xml b/packages/CompanionDeviceManager/res/values-ur/strings.xml
index beeaef3..ce44941 100644
--- a/packages/CompanionDeviceManager/res/values-ur/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ur/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"ساتھی آلہ مینیجر"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"‏‎&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;‎ کو ‎&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;‎ تک رسائی کی اجازت دیں؟"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"‏ایپ ‎&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>‎&lt;/strong&gt;‎ کو ‎‎&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;‎ تک رسائی کی اجازت دیں؟"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"دیکھیں"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"‏&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; کے ذریعے نظم کئے جانے کیلئے <xliff:g id="PROFILE_NAME">%1$s</xliff:g> کو منتخب کریں"</string>
-    <string name="summary_watch" msgid="898569637110705523">"‏آپ کے <xliff:g id="DEVICE_NAME">%1$s</xliff:g> کا نظم کرنے کے لیے اس ایپ کی ضرورت ہے۔ <xliff:g id="APP_NAME">%2$s</xliff:g> کو کسی کال کرنے والے کے نام جیسی معلومات کی مطابقت پذیری کرنے، آپ کی اطلاعات کے ساتھ تعامل کرنے، آپ کے فون، SMS، رابطے، کیلنڈر، کال لاگز اور قریبی آلات کی اجازتوں تک رسائی حاصل کرنے کی اجازت ہوگی۔"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"اس ایپ کو آپ کے <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> پر کسی کال کرنے والے کے نام جیسی معلومات کی مطابقت پذیری کرنے اور ان اجازتوں تک رسائی کی اجازت ہوگی"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"‏‎&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;‎ کے ذریعے منتخب کیے جانے کیلئے آلہ منتخب کریں"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"سیٹ اپ کرنے کے لیے <xliff:g id="PROFILE_NAME">%1$s</xliff:g> کا انتخاب کریں"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"اس ایپ کو آپ کے <xliff:g id="DEVICE_NAME">%1$s</xliff:g> پر کسی کال کرنے والے کے نام جیسی معلومات کی مطابقت پذیری کرنے اور ان اجازتوں تک رسائی کی اجازت ہوگی"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"‏&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; کو &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; کا نظم کرنے کی اجازت دیں؟"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"گلاسز"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"‏<xliff:g id="DEVICE_NAME">%1$s</xliff:g> کا نظم کرنے کے لیے، اس ایپ کی ضرورت ہے۔ <xliff:g id="APP_NAME">%2$s</xliff:g> کو آپ کی اطلاعات کے ساتھ تعامل کرنے اور آپ کے فون، SMS، رابطوں، مائیکروفون اور قریبی آلات کی اجازتوں تک رسائی کی اجازت ہوگی۔"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"اس ایپ کو آپ کے <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> پر ان اجازتوں تک رسائی کی اجازت ہوگی"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"آلہ"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"اس ایپ کو آپ کے <xliff:g id="DEVICE_NAME">%1$s</xliff:g> پر ان اجازتوں تک رسائی کی اجازت ہوگی"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"‏اپنے فون سے ان معلومات تک رسائی حاصل کرنے کی &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; کو اجازت دیں"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"کراس ڈیوائس سروسز"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> ایپ آپ کے <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> کی جانب سے آپ کے آلات کے درمیان ایپس کی سلسلہ بندی کرنے کی اجازت کی درخواست کر رہی ہے"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"‏&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; کو یہ کارروائی انجام دینے کی اجازت دیں؟"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> آپ کے <xliff:g id="DEVICE_NAME">%2$s</xliff:g> کی جانب سے ایپس اور سسٹم کی دیگر خصوصیات کی سلسلہ بندی قریبی آلات پر کرنے کی اجازت طلب کر رہی ہے"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"آلہ"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"یہ ایپ آپ کے فون اور <xliff:g id="DEVICE_NAME">%1$s</xliff:g> کے درمیان معلومات، جیسے کسی کال کرنے والے کے نام، کی مطابقت پذیری کر سکے گی"</string>
     <string name="summary_generic" msgid="1761976003668044801">"یہ ایپ آپ کے فون اور منتخب کردہ آلے کے درمیان معلومات، جیسے کسی کال کرنے والے کے نام، کی مطابقت پذیری کر سکے گی"</string>
     <string name="consent_yes" msgid="8344487259618762872">"اجازت دیں"</string>
     <string name="consent_no" msgid="2640796915611404382">"اجازت نہ دیں"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"منسوخ کریں"</string>
     <string name="consent_back" msgid="2560683030046918882">"پیچھے"</string>
+    <string name="permission_expand" msgid="893185038020887411">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> کو پھیلائیں"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g> کو سکیڑیں"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"‏ایپس کو &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; پر وہی اجازتیں دیں جو &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; پر دی گئی ہیں؟"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"‏اس میں ‎&lt;strong&gt;‎مائیکروفون‎&lt;/strong&gt; ،&lt;strong&gt;‎کیمرا‎&lt;/strong&gt;‎ اور ‎&lt;strong&gt;‎مقام تک رسائی‎&lt;/strong&gt;‎ اور ‎&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;‎ پر دیگر حساس اجازتیں شامل ہو سکتی ہیں۔ ‎&lt;br/&gt;&lt;br/&gt;‎آپ ‎&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;‎ پر کسی بھی وقت اپنی ترتیبات میں ان اجازتوں کو تبدیل کر سکتے ہیں۔"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"ایپ کا آئیکن"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"مزید معلومات کا بٹن"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"مزید معلومات"</string>
     <string name="permission_phone" msgid="2661081078692784919">"فون"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"رابطے"</string>
diff --git a/packages/CompanionDeviceManager/res/values-uz/strings.xml b/packages/CompanionDeviceManager/res/values-uz/strings.xml
index 567539a..82b6937 100644
--- a/packages/CompanionDeviceManager/res/values-uz/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-uz/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ilovasiga &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; qurilmasidan foydalanishga ruxsat berilsinmi?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ilovasiga &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; qurilmasidan foydalanishga ruxsat berilsinmi?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"soat"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; boshqaradigan <xliff:g id="PROFILE_NAME">%1$s</xliff:g> qurilmasini tanlang"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Bu ilova <xliff:g id="DEVICE_NAME">%1$s</xliff:g> profilini boshqarish uchun kerak. <xliff:g id="APP_NAME">%2$s</xliff:g> ilovasiga chaqiruvchining ismi, bildirishnomalar bilan ishlash va telefon, SMS, kontaktlar, taqvim, chaqiruvlar jurnali va yaqin-atrofdagi qurilmalarni aniqlash kabi maʼlumotlarni sinxronlashga ruxsat beriladi."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Bu ilovaga chaqiruvchining ismi kabi maʼlumotlarni sinxronlash va <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> qurilmasida quyidagi amallarni bajarishga ruxsat beriladi"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; boshqaradigan qurilmani tanlang"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Sozlash uchun <xliff:g id="PROFILE_NAME">%1$s</xliff:g> profilini tanlang"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Bu ilovaga chaqiruvchining ismi kabi maʼlumotlarni sinxronlash va <xliff:g id="DEVICE_NAME">%1$s</xliff:g> qurilmasida quyidagi amallarni bajarishga ruxsat beriladi"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ilovasiga &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; qurilmasini boshqarish uchun ruxsat berilsinmi?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"koʻzoynak"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Bu ilova <xliff:g id="DEVICE_NAME">%1$s</xliff:g> qurilmasini boshqarish uchun kerak. <xliff:g id="APP_NAME">%2$s</xliff:g> ilovasiga bildirishnomalar bilan ishlash va telefon, SMS, kontaktlar, mikrofon va yaqin-atrofdagi qurilmalarga kirishga ruxsat beriladi."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Bu ilova <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> qurilmasida quyidagi ruxsatlarni oladi"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"qurilma"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Bu ilova <xliff:g id="DEVICE_NAME">%1$s</xliff:g> qurilmasida quyidagi ruxsatlarni oladi"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ilovasiga telefondagi ushbu maʼlumot uchun ruxsat bering"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Qurilmalararo xizmatlar"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"Qurilamalararo ilovalar strimingi uchun <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasi <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> nomidan ruxsat soʻramoqda"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ilovasiga bu amalni bajarish uchun ruxsat berilsinmi?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasi <xliff:g id="DEVICE_NAME">%2$s</xliff:g> qurilmangizdan nomidan atrofdagi qurilmalarga ilova va boshqa tizim funksiyalarini uzatish uchun ruxsat olmoqchi"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"qurilma"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Bu ilova telefoningiz va <xliff:g id="DEVICE_NAME">%1$s</xliff:g> qurilmasida chaqiruvchining ismi kabi maʼlumotlarni sinxronlay oladi"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Bu ilova telefoningiz va tanlangan qurilmada chaqiruvchining ismi kabi maʼlumotlarni sinxronlay oladi"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Ruxsat"</string>
     <string name="consent_no" msgid="2640796915611404382">"Ruxsat berilmasin"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Bekor qilish"</string>
     <string name="consent_back" msgid="2560683030046918882">"Orqaga"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Yoyish: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Yopish: <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; ilovalariga &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; qurilmasidagi kabi bir xil ruxsatlar berilsinmi?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Ilovada &lt;strong&gt;,ikrofon&lt;/strong&gt;, &lt;strong&gt;kamera&lt;/strong&gt;, &lt;strong&gt;joylashuv axboroti&lt;/strong&gt;, va &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g> qurilmasidagi boshqa shaxsiy maʼlumotlarga kirish imkoni paydo boʻladi&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Bu ruxsatlarni istalgan vaqt &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g> sozlamalari orqali oʻzgartirish mumkin&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Ilova belgisi"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Batafsil axborot tugmasi"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Batafsil"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Telefon"</string>
     <string name="permission_sms" msgid="6337141296535774786">"SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Kontaktlar"</string>
diff --git a/packages/CompanionDeviceManager/res/values-vi/strings.xml b/packages/CompanionDeviceManager/res/values-vi/strings.xml
index d4eefeb..951f429 100644
--- a/packages/CompanionDeviceManager/res/values-vi/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-vi/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Trình quản lý thiết bị đồng hành"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Cho phép &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; truy cập vào &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Cho phép ứng dụng &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; truy cập vào &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"đồng hồ"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Chọn một <xliff:g id="PROFILE_NAME">%1$s</xliff:g> sẽ do &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; quản lý"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Cần ứng dụng này để quản lý <xliff:g id="DEVICE_NAME">%1$s</xliff:g> của bạn. <xliff:g id="APP_NAME">%2$s</xliff:g> được phép đồng bộ hoá thông tin (ví dụ: tên người gọi), tương tác với thông báo cũng như có các quyền truy cập Điện thoại, Tin nhắn SMS, Danh bạ, Lịch, Nhật ký cuộc gọi và Thiết bị ở gần."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Ứng dụng này sẽ được phép đồng bộ hoá thông tin (chẳng hạn như tên của người đang gọi điện) và dùng những quyền sau trên <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> của bạn"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Chọn một thiết bị sẽ do &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; quản lý"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Chọn một <xliff:g id="PROFILE_NAME">%1$s</xliff:g> để thiết lập"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Ứng dụng này sẽ được phép đồng bộ hoá thông tin (chẳng hạn như tên của người đang gọi điện) và dùng những quyền sau trên <xliff:g id="DEVICE_NAME">%1$s</xliff:g> của bạn"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Cho phép &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; quản lý &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"kính"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Bạn cần có ứng dụng này để quản lý <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. <xliff:g id="APP_NAME">%2$s</xliff:g> sẽ được phép tương tác với thông báo của bạn, cũng như sử dụng các quyền đối với Điện thoại, SMS, Danh bạ, Micrô và Thiết bị ở gần."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Ứng dụng này sẽ được phép dùng những quyền sau trên <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> của bạn"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"thiết bị"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Ứng dụng này sẽ được phép dùng những quyền sau trên <xliff:g id="DEVICE_NAME">%1$s</xliff:g> của bạn"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Cho phép &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; truy cập vào thông tin này trên điện thoại của bạn"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Dịch vụ trên nhiều thiết bị"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"<xliff:g id="APP_NAME">%1$s</xliff:g> đang yêu cầu quyền thay cho <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> để truyền trực tuyến ứng dụng giữa các thiết bị của bạn"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Cho phép &lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; thực hiện hành động này?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"<xliff:g id="APP_NAME">%1$s</xliff:g> đang thay <xliff:g id="DEVICE_NAME">%2$s</xliff:g> yêu cầu quyền truyền trực tuyến ứng dụng và các tính năng khác của hệ thống đến các thiết bị ở gần"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"thiết bị"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Ứng dụng này sẽ đồng bộ hoá thông tin (ví dụ: tên người gọi) giữa điện thoại của bạn và <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Ứng dụng này sẽ đồng bộ hoá thông tin (ví dụ: tên người gọi) giữa điện thoại của bạn và thiết bị bạn chọn"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Cho phép"</string>
     <string name="consent_no" msgid="2640796915611404382">"Không cho phép"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Huỷ"</string>
     <string name="consent_back" msgid="2560683030046918882">"Quay lại"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Mở rộng <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Thu gọn <xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Cấp cho các ứng dụng trên &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; các quyền giống như trên &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Những quyền này có thể bao gồm quyền truy cập vào &lt;strong&gt;Micrô&lt;/strong&gt;, &lt;strong&gt;Máy ảnh&lt;/strong&gt;, và &lt;strong&gt;Thông tin vị trí&lt;/strong&gt;, cũng như các quyền truy cập thông tin nhạy cảm khác trên &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Bạn có thể thay đổi những quyền này bất cứ lúc nào trong phần Cài đặt trên &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Biểu tượng ứng dụng"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Nút thông tin khác"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Thông tin khác"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Điện thoại"</string>
     <string name="permission_sms" msgid="6337141296535774786">"Tin nhắn SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Danh bạ"</string>
diff --git a/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
index ea07086..5edf9c0 100644
--- a/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"配套设备管理器"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"允许&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;访问&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"允许应用&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;访问&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"手表"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"选择要由&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;管理的<xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
-    <string name="summary_watch" msgid="898569637110705523">"需要使用此应用才能管理您的设备“<xliff:g id="DEVICE_NAME">%1$s</xliff:g>”。<xliff:g id="APP_NAME">%2$s</xliff:g>将能同步信息(例如来电者的姓名)、与通知交互,并能获得对电话、短信、通讯录、日历、通话记录和附近设备的访问权限。"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"该应用将可以同步信息(例如来电者的姓名),并可以获得您<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上的以下权限"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"选择要由&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;管理的设备"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"选择 <xliff:g id="PROFILE_NAME">%1$s</xliff:g> 进行设置"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"该应用将可以同步信息(例如来电者的姓名),并可以获得您<xliff:g id="DEVICE_NAME">%1$s</xliff:g>上的以下权限"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"允许&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;管理&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"眼镜"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"需要使用此应用才能管理<xliff:g id="DEVICE_NAME">%1$s</xliff:g>。“<xliff:g id="APP_NAME">%2$s</xliff:g>”将能与通知交互,并可获得电话、短信、通讯录、麦克风和附近设备的访问权限。"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"该应用将可以获得您<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上的以下权限"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"设备"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"该应用将可以获得您<xliff:g id="DEVICE_NAME">%1$s</xliff:g>上的以下权限"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"允许“<xliff:g id="APP_NAME">%1$s</xliff:g>”&lt;strong&gt;&lt;/strong&gt;访问您手机中的这项信息"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"跨设备服务"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”正代表您的<xliff:g id="DISPLAY_NAME">%2$s</xliff:g>请求在您的设备之间流式传输应用内容"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"允许&lt;strong&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;进行此操作?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”正代表您的<xliff:g id="DEVICE_NAME">%2$s</xliff:g>请求将应用和其他系统功能流式传输到附近的设备"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"设备"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"此应用将能在您的手机和“<xliff:g id="DEVICE_NAME">%1$s</xliff:g>”之间同步信息,例如来电者的姓名"</string>
     <string name="summary_generic" msgid="1761976003668044801">"此应用将能在您的手机和所选设备之间同步信息,例如来电者的姓名"</string>
     <string name="consent_yes" msgid="8344487259618762872">"允许"</string>
     <string name="consent_no" msgid="2640796915611404382">"不允许"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"取消"</string>
     <string name="consent_back" msgid="2560683030046918882">"返回"</string>
+    <string name="permission_expand" msgid="893185038020887411">"展开<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"收起<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"要让&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt;上的应用享有在&lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;上的同等权限吗?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"这可能包括&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;的&lt;strong&gt;麦克风&lt;/strong&gt;、&lt;strong&gt;摄像头&lt;/strong&gt;和&lt;strong&gt;位置信息访问权限&lt;/strong&gt;以及其他敏感权限。&lt;br/&gt;&lt;br/&gt;您随时可以在&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;的“设置”中更改这些权限。"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"应用图标"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"更多信息按钮"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"更多信息"</string>
     <string name="permission_phone" msgid="2661081078692784919">"手机"</string>
     <string name="permission_sms" msgid="6337141296535774786">"短信"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"通讯录"</string>
diff --git a/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml
index 3c2dcea..0878c23 100644
--- a/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml
@@ -17,36 +17,36 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"隨附裝置管理工具"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;存取「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;嗎?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」應用程式&lt;strong&gt;&lt;/strong&gt;存取「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;嗎?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"手錶"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"選擇由 &lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt; 管理的<xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
-    <string name="summary_watch" msgid="898569637110705523">"必須使用此應用程式,才能管理「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」。「<xliff:g id="APP_NAME">%2$s</xliff:g>」將可同步資訊 (例如來電者的名稱)、透過通知與你互動,並存取電話、短訊、通訊錄、日曆、通話記錄和附近的裝置權限。"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"此應用程式將可同步資訊 (例如來電者的名稱),並可在<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上取得以下權限"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"選擇要讓 &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; 管理的裝置"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"選擇要設定的<xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"此應用程式將可同步資訊 (例如來電者的名稱),並可在<xliff:g id="DEVICE_NAME">%1$s</xliff:g>上取得以下權限"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;管理「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;嗎?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"眼鏡"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"必須使用此應用程式,才能管理「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」。「<xliff:g id="APP_NAME">%2$s</xliff:g>」將可透過通知與您互動,並存取電話、短訊、通訊錄、麥克風和附近的裝置權限。"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"此應用程式將可在<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上取得以下權限"</string>
-    <string name="title_app_streaming" msgid="2270331024626446950">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;存取您手機中的這項資料"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"裝置"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"此應用程式將可在<xliff:g id="DEVICE_NAME">%1$s</xliff:g>上取得以下權限"</string>
+    <string name="title_app_streaming" msgid="2270331024626446950">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;存取你手機中的這項資料"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"跨裝置服務"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表 <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> 要求權限,以便在裝置間串流應用程式的內容"</string>
     <string name="title_automotive_projection" msgid="3296005598978412847"></string>
     <string name="summary_automotive_projection" msgid="8683801274662496164"></string>
-    <string name="title_computer" msgid="4693714143506569253">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;存取您手機中的這項資料"</string>
+    <string name="title_computer" msgid="4693714143506569253">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;存取你手機中的這項資料"</string>
     <string name="summary_computer" msgid="3798467601598297062"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play 服務"</string>
     <string name="helper_summary_computer" msgid="8774832742608187072">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表 <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> 要求權限,以便存取手機上的相片、媒體和通知"</string>
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"要允許「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;執行此操作嗎?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」要求權限,才能在附近的裝置上串流播放應用程式和其他系統功能"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"裝置"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"此應用程式將可同步手機和「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」的資訊,例如來電者的名稱"</string>
     <string name="summary_generic" msgid="1761976003668044801">"此應用程式將可同步手機和所選裝置的資訊,例如來電者的名稱"</string>
     <string name="consent_yes" msgid="8344487259618762872">"允許"</string>
     <string name="consent_no" msgid="2640796915611404382">"不允許"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"取消"</string>
     <string name="consent_back" msgid="2560683030046918882">"返回"</string>
+    <string name="permission_expand" msgid="893185038020887411">"展開<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"收合<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; 上的應用程式可獲在 &lt;strong&gt;<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; 上的相同權限嗎?"</string>
-    <string name="permission_sync_summary" msgid="765497944331294275">"這可能包括 &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; 的&lt;strong&gt;麥克風&lt;/strong&gt;、&lt;strong&gt;相機&lt;/strong&gt;和&lt;strong&gt;位置資訊存取權&lt;/strong&gt;以及其他敏感資料權限。&lt;br/&gt;&lt;br/&gt;您隨時可透過 &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; 的「設定」變更這些權限。"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"應用程式圖示"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"「更多資料」按鈕"</string>
+    <string name="permission_sync_summary" msgid="765497944331294275">"這可能包括 &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; 的&lt;strong&gt;麥克風&lt;/strong&gt;、&lt;strong&gt;相機&lt;/strong&gt;和&lt;strong&gt;位置資訊存取權&lt;/strong&gt;以及其他敏感資料權限。&lt;br/&gt;&lt;br/&gt;你隨時可透過 &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; 的「設定」變更這些權限。"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"瞭解詳情"</string>
     <string name="permission_phone" msgid="2661081078692784919">"手機"</string>
     <string name="permission_sms" msgid="6337141296535774786">"短訊"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"通訊錄"</string>
diff --git a/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
index f22fcba..4f50ef5 100644
--- a/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"隨附裝置管理工具"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;存取「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;嗎?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;應用程式存取「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;嗎?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"手錶"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"選擇要讓「<xliff:g id="APP_NAME">%2$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;管理的<xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
-    <string name="summary_watch" msgid="898569637110705523">"你必須使用這個應用程式,才能管理<xliff:g id="DEVICE_NAME">%1$s</xliff:g>。「<xliff:g id="APP_NAME">%2$s</xliff:g>」將可同步資訊 (例如來電者名稱)、存取通知及在通知上執行操作,並取得電話、簡訊、聯絡人、日曆、通話記錄、麥克風和鄰近裝置權限。"</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"這個應用程式將可同步處理資訊 (例如來電者名稱)、取得<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上的這些權限"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"選擇要讓「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;管理的裝置"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"選擇要設定的<xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"這個應用程式將可同步處理資訊 (例如來電者名稱)、取得<xliff:g id="DEVICE_NAME">%1$s</xliff:g>上的這些權限"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;管理「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;嗎?"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"眼鏡"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"你必須使用這個應用程式,才能管理「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」。「<xliff:g id="APP_NAME">%2$s</xliff:g>」將可存取通知及在通知上執行操作,並取得電話、簡訊、聯絡人、麥克風和鄰近裝置權限。"</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"這個應用程式將可取得<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上的這些權限"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"裝置"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"這個應用程式將可取得<xliff:g id="DEVICE_NAME">%1$s</xliff:g>上的這些權限"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;存取手機中的這項資訊"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"跨裝置服務"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"為了在裝置間串流傳輸應用程式內容,「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表 <xliff:g id="DISPLAY_NAME">%2$s</xliff:g> 要求相關權限"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"要允許「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;執行這項操作嗎?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」要求必要權限,才能在鄰近裝置上串流播放應用程式和其他系統功能"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"裝置"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"這個應用程式將可在手機和「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」之間同步資訊,例如來電者名稱"</string>
     <string name="summary_generic" msgid="1761976003668044801">"這個應用程式將可在手機和指定裝置間同步資訊,例如來電者名稱"</string>
     <string name="consent_yes" msgid="8344487259618762872">"允許"</string>
     <string name="consent_no" msgid="2640796915611404382">"不允許"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"取消"</string>
     <string name="consent_back" msgid="2560683030046918882">"返回"</string>
+    <string name="permission_expand" msgid="893185038020887411">"展開<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"收合<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"要讓「<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;的應用程式沿用在「<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;上的權限嗎?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"這可能包括 &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt; 的&lt;strong&gt;麥克風&lt;/strong&gt;、&lt;strong&gt;相機&lt;/strong&gt;和&lt;strong&gt;位置資訊存取權&lt;/strong&gt;以及機密權限。&lt;br/&gt;&lt;br/&gt;你隨時可透過 &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt; 的「設定」變更這些權限。"</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"應用程式圖示"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"更多資訊按鈕"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"更多資訊"</string>
     <string name="permission_phone" msgid="2661081078692784919">"電話"</string>
     <string name="permission_sms" msgid="6337141296535774786">"簡訊"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"聯絡人"</string>
diff --git a/packages/CompanionDeviceManager/res/values-zu/strings.xml b/packages/CompanionDeviceManager/res/values-zu/strings.xml
index 1de5713..7fb5ece 100644
--- a/packages/CompanionDeviceManager/res/values-zu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zu/strings.xml
@@ -17,15 +17,14 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="4470785958457506021">"Isiphathi sedivayisi esihambisanayo"</string>
-    <string name="confirmation_title" msgid="4593465730772390351">"Vumela &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ukufinyelela &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+    <string name="confirmation_title" msgid="2244241995958340998">"Vumela i-app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ukufinyelela &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="profile_name_watch" msgid="576290739483672360">"buka"</string>
-    <string name="chooser_title" msgid="2262294130493605839">"Khetha i-<xliff:g id="PROFILE_NAME">%1$s</xliff:g> ezophathwa yi-&lt;strong&gt;<xliff:g id="APP_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="summary_watch" msgid="898569637110705523">"Le app iyadingeka ukuphatha i-<xliff:g id="DEVICE_NAME">%1$s</xliff:g> yakho. I-<xliff:g id="APP_NAME">%2$s</xliff:g> izovunyelwa ukuvumelanisa ulwazi, njengegama lomuntu othile ofonayo, ukusebenzisana nezaziso zakho futhi ufinyelele Ifoni yakho, i-SMS, Oxhumana Nabo, Ikhalenda, Amarekhodi Amakholi nezimvume zamadivayisi aseduze."</string>
-    <string name="summary_watch_single_device" msgid="3173948915947011333">"Le-app izovunyelwa ukuvumelanisa ulwazi, olufana negama lomuntu ofonayo, iphinde ifinyelele lezi zimvume ku-<xliff:g id="DEVICE_TYPE">%1$s</xliff:g> yakho"</string>
+    <string name="chooser_title_non_profile" msgid="6035023914517087400">"Khetha idivayisi engaphathwa nge-&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+    <string name="chooser_title" msgid="2235819929238267637">"Khetha i-<xliff:g id="PROFILE_NAME">%1$s</xliff:g> ukusetha"</string>
+    <string name="summary_watch" msgid="7962014927042971830">"Le-app izovunyelwa ukuvumelanisa ulwazi, olufana negama lomuntu ofonayo, iphinde ifinyelele lezi zimvume ku-<xliff:g id="DEVICE_NAME">%1$s</xliff:g> yakho"</string>
     <string name="confirmation_title_glasses" msgid="8288346850537727333">"Vumela i-&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ukuthi ifinyelele i-&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
-    <string name="profile_name_glasses" msgid="8488394059007275998">"Izingilazi"</string>
-    <string name="summary_glasses_multi_device" msgid="615259525961937348">"Le app iyadingeka ukuphatha i-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>. I-<xliff:g id="APP_NAME">%2$s</xliff:g> izovunyelwa ukuthi ihlanganyele nezaziso zakho futhi ifinyelele kufoni yakho, i-SMS, Oxhumana nabo, Imakrofoni Nezimvume zamadivayisi aseduze."</string>
-    <string name="summary_glasses_single_device" msgid="3000909894067413398">"Le-app izovunyelwa ukufinyelela lezi zimvume ku-<xliff:g id="DEVICE_TYPE">%1$s</xliff:g> yakho"</string>
+    <string name="profile_name_glasses" msgid="3506504967216601277">"idivayisi"</string>
+    <string name="summary_glasses" msgid="2872254734959842579">"Le-app izovunyelwa ukufinyelela lezi zimvume ku-<xliff:g id="DEVICE_NAME">%1$s</xliff:g> yakho"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Vumela i-&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ifinyelele lolu lwazi kusukela efonini yakho"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Amasevisi amadivayisi amaningi"</string>
     <string name="helper_summary_app_streaming" msgid="2396773196949578425">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> icela imvume esikhundleni se-<xliff:g id="DISPLAY_NAME">%2$s</xliff:g> yakho ukuze isakaze-bukhoma ama-app phakathi kwamadivayisi akho"</string>
@@ -38,15 +37,16 @@
     <string name="title_nearby_device_streaming" msgid="7269956847378799794">"Vumela i-<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ukwenza lesi senzo?"</string>
     <string name="helper_summary_nearby_device_streaming" msgid="2063965070936844876">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> icela imvume esikhundleni se-<xliff:g id="DEVICE_NAME">%2$s</xliff:g> ukusakaza ama-app nezinye izakhi zesistimu kumadivayisi aseduze"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"idivayisi"</string>
-    <string name="summary_generic_single_device" msgid="4181180669689590417">"Le app izokwazi ukuvumelanisa ulwazi, njengegama lomuntu othile ofonayo, phakathi kwefoni yakho ne-<xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="summary_generic" msgid="1761976003668044801">"Le app izokwazi ukuvumelanisa ulwazi, njengegama lomuntu othile ofonayo, phakathi kwefoni yakho nedivayisi ekhethiwe"</string>
     <string name="consent_yes" msgid="8344487259618762872">"Vumela"</string>
     <string name="consent_no" msgid="2640796915611404382">"Ungavumeli"</string>
+    <string name="consent_cancel" msgid="5655005528379285841">"Khansela"</string>
     <string name="consent_back" msgid="2560683030046918882">"Emuva"</string>
+    <string name="permission_expand" msgid="893185038020887411">"Nweba i-<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
+    <string name="permission_collapse" msgid="3320833884220844084">"Goqa i-<xliff:g id="PERMISSION_TYPE">%1$s</xliff:g>"</string>
     <string name="permission_sync_confirmation_title" msgid="4409622174437248702">"Nikeza ama-app &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME">%1$s</xliff:g>&lt;/strong&gt; izimvume ezifanayot &lt;strong&gt;njengaku-<xliff:g id="PRIMARY_DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
     <string name="permission_sync_summary" msgid="765497944331294275">"Lokhu kungahilela &lt;strong&gt;Imakrofoni&lt;/strong&gt;, &lt;strong&gt;Ikhamera&lt;/strong&gt;, kanye &lt;strong&gt;Nokufinyelelwa kwendawo&lt;/strong&gt;, nezinye izimvume ezizwelayo &lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_0">%1$s</xliff:g>&lt;/strong&gt;. &lt;br/&gt;&lt;br/&gt;Ungakwazi ukushintsha lezi zimvume noma nini Kumasethingi akho ku-&lt;strong&gt;<xliff:g id="COMPANION_DEVICE_NAME_1">%1$s</xliff:g>&lt;/strong&gt;."</string>
-    <string name="vendor_icon_description" msgid="4445875290032225965">"Isithonjana Se-app"</string>
-    <string name="vendor_header_button_description" msgid="6566660389500630608">"Inkinobho Yolwazi Olwengeziwe"</string>
+    <string name="vendor_header_button_description" msgid="7994879208461111473">"Olunye ulwazi"</string>
     <string name="permission_phone" msgid="2661081078692784919">"Ifoni"</string>
     <string name="permission_sms" msgid="6337141296535774786">"I-SMS"</string>
     <string name="permission_contacts" msgid="3858319347208004438">"Oxhumana nabo"</string>
diff --git a/packages/CredentialManager/res/values-af/strings.xml b/packages/CredentialManager/res/values-af/strings.xml
index 05f04cf..0c13cb2 100644
--- a/packages/CredentialManager/res/values-af/strings.xml
+++ b/packages/CredentialManager/res/values-af/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Eiebewysbestuurder"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Kanselleer"</string>
     <string name="string_continue" msgid="1346732695941131882">"Gaan voort"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Meer opsies"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Stoor op ’n ander manier"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Kom meer te wete"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Wys wagwoord"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Versteek wagwoord"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"aanmeldings"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"aanmeldinligting"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Stoor <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> in"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Skep wagwoordsleutel op ’n ander toestel?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Skep wagwoordsleutel op ’n ander toestel?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Stoor wagwoord op ’n ander toestel?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Stoor aanmelding op ’n ander toestel?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Gebruik <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> vir al jou aanmeldings?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Hierdie wagwoordbestuurder vir <xliff:g id="USERNAME">%1$s</xliff:g> sal jou wagwoorde en wagwoordsleutels berg om jou te help om maklik aan te meld"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Stel as verstek"</string>
+    <string name="settings" msgid="6536394145760913145">"Instellings"</string>
     <string name="use_once" msgid="9027366575315399714">"Gebruik een keer"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> wagwoorde • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> wagwoordsleutels"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> wagwoorde"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Maak toe"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Maak toe"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gebruik jou gestoorde wagwoordsleutel vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Gebruik jou gestoorde aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Kies ’n gestoorde aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Gebruik jou gestoorde wagwoord vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Gebruik jou aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Ontsluit aanmeldingopsies vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Kies ’n gestoorde wagwoordsleutel vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Kies ’n gestoorde wagwoord vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Kies ’n gestoorde aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Kies ’n aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Kies ’n opsie vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gebruik hierdie inligting op <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Meld op ’n ander manier aan"</string>
diff --git a/packages/CredentialManager/res/values-am/strings.xml b/packages/CredentialManager/res/values-am/strings.xml
index b093ced..475dcf7 100644
--- a/packages/CredentialManager/res/values-am/strings.xml
+++ b/packages/CredentialManager/res/values-am/strings.xml
@@ -1,16 +1,32 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"የመግቢያ ማስረጃ አስተዳዳሪ"</string>
     <string name="string_cancel" msgid="6369133483981306063">"ይቅር"</string>
     <string name="string_continue" msgid="1346732695941131882">"ቀጥል"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"ተጨማሪ አማራጮች"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"በሌላ መንገድ አስቀምጥ"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"የበለጠ ለመረዳት"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"የይለፍ ቃል አሳይ"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"የይለፍ ቃል ደብቅ"</string>
-    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"በይለፍ ቃል ይበልጥ ደህንነቱ የተጠበቀ"</string>
+    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"በይለፍ ቁልፎች ይበልጥ ደህንነቱ የተጠበቀ"</string>
     <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"በይለፍ ቁልፎች ውስብስብ የይለፍ ቁልፎችን መፍጠር ወይም ማስታወስ አያስፈልግዎትም"</string>
-    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"የይለፍ ቁልፎች የእርስዎን የጣት አሻራ፣ መልክ ወይም የማያ ገጽ መቆለፊያ በመጠቀም የሚፈጥሯቸው የተመሰጠሩ ዲጂታል ቆልፎች ናቸው"</string>
+    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"የይለፍ ቁልፎች የእርስዎን የጣት አሻራ፣ መልክ ወይም የማያ ገፅ መቆለፊያ በመጠቀም የሚፈጥሯቸው የተመሰጠሩ ዲጂታል ቆልፎች ናቸው"</string>
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"በሌሎች መሣሪያዎች ላይ መግባት እንዲችሉ በሚስጥር ቁልፍ አስተዳዳሪ ላይ ይቀመጣሉ"</string>
     <string name="more_about_passkeys_title" msgid="7797903098728837795">"ስለየይለፍ ቁልፎች ተጨማሪ"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"የይለፍ ቃል የሌለው ቴክኖሎጂ"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"መግቢያዎች"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"የመግቢያ መረጃ"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>ን አስቀምጥ ወደ"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"በሌላ መሣሪያ ውስጥ የይለፍ ቁልፍ ይፈጠር?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"በሌላ መሣሪያ ላይ የይለፍ ቁልፍ ይፈጠር?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"የይለፍ ቃል በሌላ መሣሪያ ላይ ይቀመጥ?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"በመለያ መግቢያ በሌላ መሣሪያ ላይ ይቀመጥ?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"ለሁሉም መግቢያዎችዎ <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>ን ይጠቀሙ?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"ይህ የ<xliff:g id="USERNAME">%1$s</xliff:g> የይለፍ ቃል አስተዳዳሪ በቀላሉ እንዲገቡ ለማገዝ የእርስዎን የይለፍ ቃላት እና የይለፍ ቁልፎች ያከማቻል"</string>
     <string name="set_as_default" msgid="4415328591568654603">"እንደ ነባሪ ያዋቅሩ"</string>
+    <string name="settings" msgid="6536394145760913145">"ቅንብሮች"</string>
     <string name="use_once" msgid="9027366575315399714">"አንዴ ይጠቀሙ"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> የይለፍ ቃሎች • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> የይለፍ ቁልፎች"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> የይለፍ ቃሎች"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"ዝጋ"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"አሰናብት"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"የተቀመጠ የይለፍ ቁልፍዎን ለ<xliff:g id="APP_NAME">%1$s</xliff:g> ይጠቀሙ?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"የተቀመጠ መግቢያዎን ለ<xliff:g id="APP_NAME">%1$s</xliff:g> ይጠቀሙ?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የተቀመጠ መግቢያ ይጠቀሙ"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የተቀመጠውን የይለፍ ቃልዎን ይጠቀሙ?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> መግቢያዎ ጥቅም ላይ ይዋል?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የመግቢያ አማራጮች ይከፈቱ?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የተቀመጠ የይለፍ ቁልፍ ይምረጡ"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የተቀመጠ የይለፍ ቃል ይምረጡ"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የተቀመጠ መግቢያ ይጠቀሙ"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> መግቢያ ይምረጡ"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> አማራጭ ይመረጥ?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ይህን መረጃ በ<xliff:g id="APP_NAME">%1$s</xliff:g> ላይ ይጠቀማሉ?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"በሌላ መንገድ ይግቡ"</string>
diff --git a/packages/CredentialManager/res/values-ar/strings.xml b/packages/CredentialManager/res/values-ar/strings.xml
index 13a4de9..3f85b58 100644
--- a/packages/CredentialManager/res/values-ar/strings.xml
+++ b/packages/CredentialManager/res/values-ar/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"مدير بيانات الاعتماد"</string>
     <string name="string_cancel" msgid="6369133483981306063">"إلغاء"</string>
     <string name="string_continue" msgid="1346732695941131882">"متابعة"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"خيارات إضافية"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"الحفظ بطريقة أخرى"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"مزيد من المعلومات"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"عرض كلمة المرور"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"إخفاء كلمة المرور"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"عمليات تسجيل الدخول"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"معلومات تسجيل الدخول"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"حفظ <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> في"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"هل تريد إنشاء مفتاح المرور في خدمة أخرى؟"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"هل تريد إنشاء مفتاح مرور على جهاز آخر؟"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"هل تريد حفظ كلمة المرور على جهاز آخر؟"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"هل تريد حفظ بيانات تسجيل الدخول على جهاز آخر؟"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"هل تريد استخدام \"<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>\" لكل عمليات تسجيل الدخول؟"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"ستخزِّن خدمة \"مدير كلمات المرور\" هذه كلمات المرور ومفاتيح المرور للمستخدم <xliff:g id="USERNAME">%1$s</xliff:g> لمساعدتك في تسجيل الدخول بسهولة."</string>
     <string name="set_as_default" msgid="4415328591568654603">"ضبط الخيار كتلقائي"</string>
+    <string name="settings" msgid="6536394145760913145">"الإعدادات"</string>
     <string name="use_once" msgid="9027366575315399714">"الاستخدام مرة واحدة"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> كلمة مرور • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> مفتاح مرور"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"عدد كلمات المرور: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"إغلاق"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"إغلاق"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"هل تريد استخدام مفتاح المرور المحفوظ لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"هل تريد استخدام بيانات اعتماد تسجيل الدخول المحفوظة لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"اختيار بيانات اعتماد تسجيل دخول محفوظة لـ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"هل تريد استخدام كلمة المرور المحفوظة لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"هل تريد استخدام معلومات تسجيل دخولك لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"هل تريد فتح القفل لاستعادة خيارات تسجيل الدخول لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"اختيار مفتاح مرور محفوظ لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"اختيار كلمة مرور محفوظة لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"اختيار بيانات اعتماد تسجيل دخول محفوظة لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"اختيار معلومات تسجيل الدخول لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"هل تريد اختيار بيانات الاعتماد لتطبيق \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"هل تريد استخدام بيانات الاعتماد هذه في \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"؟"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"تسجيل الدخول بطريقة أخرى"</string>
diff --git a/packages/CredentialManager/res/values-as/strings.xml b/packages/CredentialManager/res/values-as/strings.xml
index be72bbe..e14b34b 100644
--- a/packages/CredentialManager/res/values-as/strings.xml
+++ b/packages/CredentialManager/res/values-as/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"CredentialManager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"বাতিল কৰক"</string>
     <string name="string_continue" msgid="1346732695941131882">"অব্যাহত ৰাখক"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"অধিক বিকল্প"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"অন্য ধৰণে ছেভ কৰক"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"অধিক জানক"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"পাছৱৰ্ড দেখুৱাওক"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"পাছৱৰ্ড লুকুৱাওক"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"ছাইন-ইন"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"ছাইন ইনৰ তথ্য"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> ইয়াত ছেভ কৰক"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"অন্য এটা ডিভাইচত পাছকী সৃষ্টি কৰিবনে?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"অন্য কোনো ডিভাইচত পাছকী সৃষ্টি কৰিব নেকি?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"অন্য কোনো ডিভাইচত পাছৱৰ্ড ছেভ কৰিব নেকি?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"অন্য কোনো ডিভাইচত ছাইন-ইন ছেভ কৰিব নেকি?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"আপোনাৰ আটাইবোৰ ছাইন ইনৰ বাবে <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> ব্যৱহাৰ কৰিবনে?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"আপোনাক সহজে ছাইন ইন কৰাত সহায় কৰিবলৈ <xliff:g id="USERNAME">%1$s</xliff:g>ৰ বাবে থকা এই পাছৱৰ্ড পৰিচালকে আপোনাৰ পাছৱৰ্ড আৰু পাছকী ষ্ট’ৰ কৰিব"</string>
     <string name="set_as_default" msgid="4415328591568654603">"ডিফ’ল্ট হিচাপে ছেট কৰক"</string>
+    <string name="settings" msgid="6536394145760913145">"ছেটিং"</string>
     <string name="use_once" msgid="9027366575315399714">"এবাৰ ব্যৱহাৰ কৰক"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> টা পাছৱৰ্ড • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> টা পাছকী"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> টা পাছৱৰ্ড"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"বন্ধ কৰক"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"অগ্ৰাহ্য কৰক"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে আপোনাৰ ছেভ হৈ থকা পাছকী ব্যৱহাৰ কৰিবনে?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে আপোনাৰ ছেভ হৈ থকা ছাইন ইন তথ্য ব্যৱহাৰ কৰিবনে?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছেভ হৈ থকা এটা ছাইন ইন বাছনি কৰক"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে আপোনাৰ ছেভ কৰি থোৱা পাছৱৰ্ড ব্যৱহাৰ কৰিবনে?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছাইন ইন কৰিবলৈ আপোনাৰ ক্ৰিডেনশ্বিয়েল ব্যৱহাৰ কৰিবনে?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছাইন ইনৰ বিকল্পসমূহ আনলক কৰিবনে?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছেভ হৈ থকা এটা পাছকী বাছনি কৰক"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছেভ হৈ থকা এটা পাছৱৰ্ড বাছনি কৰক"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছেভ হৈ থকা এটা ছাইন ইন বাছনি কৰক"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে ছাইন ইন কৰিবলৈ এটা ক্ৰিডেনশ্বিয়েল বাছনি কৰক"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে এটা বিকল্প বাছনি কৰিবনে?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>ত এই তথ্য ব্যৱহাৰ কৰিবনে?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"অন্য উপায়েৰে ছাইন ইন কৰক"</string>
diff --git a/packages/CredentialManager/res/values-az/strings.xml b/packages/CredentialManager/res/values-az/strings.xml
index c35f849..d0f8bb0 100644
--- a/packages/CredentialManager/res/values-az/strings.xml
+++ b/packages/CredentialManager/res/values-az/strings.xml
@@ -1,26 +1,42 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Giriş Məlumatları Meneceri"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Ləğv edin"</string>
     <string name="string_continue" msgid="1346732695941131882">"Davam edin"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Digər seçimlər"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Başqa cür saxlayın"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Ətraflı məlumat"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Parolu göstərin"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Parolu gizlədin"</string>
-    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Giriş açarları ilə daha təhlükəsiz"</string>
-    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Giriş açarları ilə mürəkkəb parollar yaratmağa və ya yadda saxlamağa ehtiyac yoxdur"</string>
+    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Açarlar ilə daha təhlükəsiz"</string>
+    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Açarlar ilə mürəkkəb parollar yaratmağa və ya yadda saxlamağa ehtiyac yoxdur"</string>
     <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Giriş açarları barmaq izi, üz və ya ekran kilidindən istifadə edərək yaratdığınız şifrələnmiş rəqəmsal açarlardır"</string>
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"Onlar parol menecerində saxlanılır ki, digər cihazlarda daxil ola biləsiniz"</string>
-    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Giriş açarları haqqında ətraflı"</string>
+    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Açarlar haqqında ətraflı"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Parolsuz texnologiya"</string>
-    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Giriş açarları parollara etibar etmədən daxil olmağa imkan verir. Kimliyinizi doğrulamaq və giriş açarı yaratmaq üçün sadəcə barmaq izi, üz tanıma, PIN və ya sürüşdürmə modelindən istifadə etməlisiniz."</string>
+    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Giriş açarları parollara etibar etmədən daxil olmağa imkan verir. Kimliyinizi doğrulamaq və açar yaratmaq üçün sadəcə barmaq izi, üz tanıma, PIN və ya sürüşdürmə modelindən istifadə etməlisiniz."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"İctimai açar kriptoqrafiyası"</string>
-    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"FIDO Alliance (Google, Apple, Microsoft və s. daxildir) və W3C standartlarına əsaslanaraq giriş açarları kriptoqrafik açar cütlərindən istifadə edir. İstifadəçi adı və parollar üçün istifadə etdiyimiz simvol sətrindən fərqli olaraq, tətbiq və ya vebsayt üçün şəxsi-ictimai açar cütü yaradılır. Şəxsi açar cihazınızda və ya parol menecerinizdə təhlükəsiz şəkildə saxlanılır və kimliyinizi təsdiq edir. İctimai açar tətbiq və ya vebsayt serveri ilə paylaşılır. Müvafiq açarlarla dərhal qeydiyyatdan keçə və daxil ola bilərsiniz."</string>
+    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"FIDO Alliance (Google, Apple, Microsoft və s. daxildir) və W3C standartlarına əsaslanaraq açarlar kriptoqrafik açar cütlərindən istifadə edir. İstifadəçi adı və parollar üçün istifadə etdiyimiz simvol sətrindən fərqli olaraq, tətbiq və ya vebsayt üçün şəxsi-ictimai açar cütü yaradılır. Şəxsi açar cihazınızda və ya parol menecerinizdə təhlükəsiz şəkildə saxlanılır və kimliyinizi təsdiq edir. İctimai açar tətbiq və ya vebsayt serveri ilə paylaşılır. Müvafiq açarlarla dərhal qeydiyyatdan keçə və daxil ola bilərsiniz."</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"Təkmilləşdirilmiş hesab təhlükəsizliyi"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Hər bir açar eksklüziv olaraq onların yaradıldığı tətbiq və ya vebsaytla əlaqələndirilib, ona görə də heç vaxt səhvən saxta tətbiqə və ya vebsayta daxil ola bilməzsiniz. Üstəlik, yalnız ictimai açarları saxlayan serverlərlə hekinq daha çətindir."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Rahat keçid"</string>
-    <string name="seamless_transition_detail" msgid="4475509237171739843">"Parolsuz gələcəyə doğru irəlilədikcə parollar hələ də giriş açarları ilə yanaşı əlçatan olacaq."</string>
+    <string name="seamless_transition_detail" msgid="4475509237171739843">"Parolsuz gələcəyə doğru irəlilədikcə parollar hələ də açarlar ilə yanaşı əlçatan olacaq."</string>
     <string name="choose_provider_title" msgid="8870795677024868108">"<xliff:g id="CREATETYPES">%1$s</xliff:g> elementinin saxlanacağı yeri seçin"</string>
     <string name="choose_provider_body" msgid="4967074531845147434">"Məlumatlarınızı yadda saxlamaq və növbəti dəfə daha sürətli daxil olmaq üçün parol meneceri seçin"</string>
     <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"<xliff:g id="APPNAME">%1$s</xliff:g> üçün giriş açarı yaradılsın?"</string>
@@ -28,19 +44,22 @@
     <string name="choose_create_option_sign_in_title" msgid="4124872317613421249">"<xliff:g id="APPNAME">%1$s</xliff:g> üçün giriş məlumatları yadda saxlansın?"</string>
     <string name="passkey" msgid="632353688396759522">"açar"</string>
     <string name="password" msgid="6738570945182936667">"parol"</string>
-    <string name="passkeys" msgid="5733880786866559847">"giriş açarları"</string>
+    <string name="passkeys" msgid="5733880786866559847">"açarlar"</string>
     <string name="passwords" msgid="5419394230391253816">"parollar"</string>
     <string name="sign_ins" msgid="4710739369149469208">"girişlər"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"Giriş məlumatları"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> harada saxlanılsın?"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Başqa cihazda giriş açarı yaradılsın?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Giriş açarı başqa cihazda yaradılsın?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Parol başqa cihazda yadda saxlansın?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Giriş başqa cihazda yadda saxlansın?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Bütün girişlər üçün <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> istifadə edilsin?"</string>
-    <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> üçün bu parol meneceri asanlıqla daxil olmağınız məqsədilə parol və giriş açarlarını saxlayacaq"</string>
+    <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> üçün bu parol meneceri asanlıqla daxil olmağınız məqsədilə parol və açarları saxlayacaq"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Defolt olaraq seçin"</string>
+    <string name="settings" msgid="6536394145760913145">"Ayarlar"</string>
     <string name="use_once" msgid="9027366575315399714">"Bir dəfə istifadə edin"</string>
-    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> parol • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> giriş açarı"</string>
+    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> parol • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> açar"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> parol"</string>
-    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> giriş açarı"</string>
+    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> açarları"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"<xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g> giriş məlumatları"</string>
     <string name="passkey_before_subtitle" msgid="2448119456208647444">"Giriş açarı"</string>
     <string name="another_device" msgid="5147276802037801217">"Digər cihaz"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Bağlayın"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"İmtina edin"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış giriş açarı istifadə edilsin?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış girişdən istifadə edilsin?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış girişi seçin"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış parol istifadə edilsin?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriş istifadə edilsin?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriş seçimləri kiliddən çıxarılsın?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış giriş açarı seçin"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış parol seçin"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmış giriş seçin"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriş seçin"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün seçim edilsin?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Məlumat <xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqində istifadə edilsin?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Başqa üsulla daxil olun"</string>
diff --git a/packages/CredentialManager/res/values-b+sr+Latn/strings.xml b/packages/CredentialManager/res/values-b+sr+Latn/strings.xml
index 94eff9d..89e48f9 100644
--- a/packages/CredentialManager/res/values-b+sr+Latn/strings.xml
+++ b/packages/CredentialManager/res/values-b+sr+Latn/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Menadžer akreditiva"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Otkaži"</string>
     <string name="string_continue" msgid="1346732695941131882">"Nastavi"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Još opcija"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Sačuvaj drugi način"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Saznajte više"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Prikažite lozinku"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Sakrijte lozinku"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"prijavljivanja"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"podaci za prijavljivanje"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Sačuvaj <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> u"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Želite da napravite pristupni kôd na drugom uređaju?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Želite da napravite pristupni kôd na drugom uređaju?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Želite da sačuvate lozinku na drugom uređaju?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Želite da sačuvate akreditive za prijavu na drugom uređaju?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Želite da za sva prijavljivanja koristite: <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Ovaj menadžer lozinki za <xliff:g id="USERNAME">%1$s</xliff:g> će čuvati lozinke i pristupne kodove da biste se lako prijavljivali"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Podesi kao podrazumevano"</string>
+    <string name="settings" msgid="6536394145760913145">"Podešavanja"</string>
     <string name="use_once" msgid="9027366575315399714">"Koristi jednom"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Lozinki: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Pristupnih kodova:<xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"Lozinki: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Zatvorite"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Odbaci"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Želite da koristite sačuvani pristupni kôd za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Želite da koristite sačuvane podatke za prijavljivanje za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Odaberite sačuvano prijavljivanje za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Želite da koristite sačuvanu lozinku za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Želite li da koristite svoje podatke za prijavljivanje za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Želite da otključate opcije prijavljivanja za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Izaberite sačuvan pristupni kôd za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Izaberite sačuvanu lozinku za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Izaberite sačuvane podatke za prijavljivanje za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Odaberite podatke za prijavljivanje za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Želite da odaberete opciju za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Želite da koristite te podatke u aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijavite se na drugi način"</string>
diff --git a/packages/CredentialManager/res/values-be/strings.xml b/packages/CredentialManager/res/values-be/strings.xml
index 4972d7f..144bb86 100644
--- a/packages/CredentialManager/res/values-be/strings.xml
+++ b/packages/CredentialManager/res/values-be/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Менеджар уліковых даных"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Скасаваць"</string>
     <string name="string_continue" msgid="1346732695941131882">"Далей"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Дадатковыя параметры"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Захаваць іншы спосаб"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Даведацца больш"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Паказаць пароль"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Схаваць пароль"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"спосабы ўваходу"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"інфармацыя пра спосабы ўваходу"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Захаваць <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> сюды:"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Стварыць ключ доступу на іншай прыладзе?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Стварыць ключ доступу на іншай прыладзе?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Захаваць пароль на іншай прыладзе?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Захаваць спосаб уваходу на іншай прыладзе?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Выкарыстоўваць папку \"<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>\" для ўсіх спосабаў уваходу?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Каб вам было прасцей уваходзіць у сістэму, вашы паролі і ключы доступу будуць захоўвацца ў менеджары пароляў для <xliff:g id="USERNAME">%1$s</xliff:g>."</string>
     <string name="set_as_default" msgid="4415328591568654603">"Выкарыстоўваць стандартна"</string>
+    <string name="settings" msgid="6536394145760913145">"Налады"</string>
     <string name="use_once" msgid="9027366575315399714">"Скарыстаць адзін раз"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Пароляў: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Ключоў доступу: <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"Пароляў: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Закрыць"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Закрыць"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Скарыстаць захаваны ключ доступу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Скарыстаць захаваныя спосабы ўваходу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Выберыце захаваны спосаб уваходу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Выкарыстоўваць пароль, захаваны для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Скарыстаць ваш спосаб уваходу для праграмы <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Разблакіраваць варыянты ўваходу для праграмы\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Выберыце захаваны ключ доступу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Выберыце захаваны пароль для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Выберыце захаваны спосаб уваходу для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Выберыце спосаб уваходу для праграмы <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Выберыце ўліковыя даныя для ўваходу ў праграму \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Выкарыстоўваць гэтую інфармацыю на прыладзе <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Увайсці іншым спосабам"</string>
diff --git a/packages/CredentialManager/res/values-bg/strings.xml b/packages/CredentialManager/res/values-bg/strings.xml
index ba515c0..ef4dd54c 100644
--- a/packages/CredentialManager/res/values-bg/strings.xml
+++ b/packages/CredentialManager/res/values-bg/strings.xml
@@ -1,26 +1,42 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Мениджър на идентификационни данни"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Отказ"</string>
     <string name="string_continue" msgid="1346732695941131882">"Напред"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Още опции"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Запазване другояче"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Научете повече"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Показване на паролата"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Скриване на паролата"</string>
-    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"По-сигурно с помощта на кодове за достъп"</string>
-    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Когато използвате кодове за достъп, не е необходимо да създавате, нито да помните сложни пароли"</string>
-    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Кодовете за достъп са шифровани дигитални ключове, които създавате посредством отпечатъка, лицето си или опцията си за заключване на екрана"</string>
+    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"По-сигурно с помощта на ключове за достъп"</string>
+    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Когато използвате ключове за достъп, не е необходимо да създавате, нито да помните сложни пароли"</string>
+    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Ключовете за достъп са шифровани дигитални ключове, които създавате посредством отпечатъка, лицето си или опцията си за заключване на екрана"</string>
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"Данните се запазват в мениджър на пароли, за да можете да влизате в профила си на други устройства"</string>
-    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Още за кодовете за достъп"</string>
+    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Още за ключовете за достъп"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Заменяща паролите технология"</string>
-    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Кодовете за достъп ви дават възможност да влизате в профила си без парола. Трябва само да използвате отпечатъка, лицето, ПИН кода или фигурата си, за да потвърдите самоличността си и да създадете код за достъп."</string>
+    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Ключовете за достъп ви дават възможност да влизате в профила си без парола. Трябва само да използвате отпечатъка, лицето, ПИН кода или фигурата си, за да потвърдите самоличността си и да създадете код за достъп."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"Криптография с публичен ключ"</string>
-    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Според съюза FIDO (Google, Apple, Microsoft и др.) и стандартите на W3C кодовете за достъп ползват двойки криптографски ключове. Вместо потребителско име и парола за дадено приложение или уебсайт се създава двойка ключове – частен и публичен. Първият се съхранява надеждно на устройството ви или в мениджъра на пароли и служи за потвърждаване на самоличността ви. Вторият се споделя със съответния сървър. С двойката ключове можете да се регистрирате и да влезете в профила си незабавно."</string>
+    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Според съюза FIDO (Google, Apple, Microsoft и др.) и стандартите на W3C ключовете за достъп ползват двойки криптографски ключове. Вместо потребителско име и парола за дадено приложение или уебсайт се създава двойка ключове – частен и публичен. Първият се съхранява надеждно на устройството ви или в мениджъра на пароли и служи за потвърждаване на самоличността ви. Вторият се споделя със съответния сървър. С двойката ключове можете да се регистрирате и да влезете в профила си незабавно."</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"Подобрена сигурност на профила"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Всеки ключ е свързан само с приложението или уебсайта, за които е създаден. Затова не е възможно да влезете в измамно приложение или уебсайт по погрешка. Освен това сървърите съхраняват само публичните ключове, което значително затруднява опитите за хакерство."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Безпроблемен преход"</string>
-    <string name="seamless_transition_detail" msgid="4475509237171739843">"Паролите ще продължат да са налице заедно с кодовете за достъп по пътя ни към бъдеще без пароли."</string>
+    <string name="seamless_transition_detail" msgid="4475509237171739843">"Паролите ще продължат да са налице заедно с ключовете за достъп по пътя ни към бъдеще без пароли."</string>
     <string name="choose_provider_title" msgid="8870795677024868108">"Изберете къде да запазите своите <xliff:g id="CREATETYPES">%1$s</xliff:g>"</string>
     <string name="choose_provider_body" msgid="4967074531845147434">"Изберете мениджър на пароли, в който да се запазят данните ви, така че следващия път да влезете по-бързо в профила си"</string>
     <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"Да се създаде ли код за достъп за <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
@@ -28,19 +44,22 @@
     <string name="choose_create_option_sign_in_title" msgid="4124872317613421249">"Да се запазят ли данните за вход за <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
     <string name="passkey" msgid="632353688396759522">"код за достъп"</string>
     <string name="password" msgid="6738570945182936667">"парола"</string>
-    <string name="passkeys" msgid="5733880786866559847">"кодове за достъп"</string>
+    <string name="passkeys" msgid="5733880786866559847">"ключове за достъп"</string>
     <string name="passwords" msgid="5419394230391253816">"пароли"</string>
     <string name="sign_ins" msgid="4710739369149469208">"данни за вход"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"данните за вход"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Запазване на <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> във:"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Искате ли да създадете код за достъп на друго устройство?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Да се създаде ли ключ за достъп на друго устройство?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Паролата да се запази ли на друго устройство?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Данните за вход да се запазят ли на друго устройство?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Да се използва ли <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> за всичките ви данни за вход?"</string>
-    <string name="use_provider_for_all_description" msgid="1998772715863958997">"Мениджърът на пароли за <xliff:g id="USERNAME">%1$s</xliff:g> ще съхранява вашите пароли и кодове за достъп, за да влизате лесно в профила си"</string>
+    <string name="use_provider_for_all_description" msgid="1998772715863958997">"Мениджърът на пароли за <xliff:g id="USERNAME">%1$s</xliff:g> ще съхранява вашите пароли и ключове за достъп, за да влизате лесно в профила си"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Задаване като основно"</string>
+    <string name="settings" msgid="6536394145760913145">"Настройки"</string>
     <string name="use_once" msgid="9027366575315399714">"Еднократно използване"</string>
-    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> пароли • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> кода за достъп"</string>
+    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> пароли • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> ключа за достъп"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> пароли"</string>
-    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> кода за достъп"</string>
+    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> ключа за достъп"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"Идентификационни данни: <xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g>"</string>
     <string name="passkey_before_subtitle" msgid="2448119456208647444">"Код за достъп"</string>
     <string name="another_device" msgid="5147276802037801217">"Друго устройство"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Затваряне"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Отхвърляне"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Да се използва ли запазеният ви код за достъп за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Да се използват ли запазените ви данни за вход за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Изберете запазени данни за вход за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Искате ли да използвате запазената си парола за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Да се използват ли вашите данни за вход за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Искате ли да отключите опциите за влизане в профила за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Изберете запазен ключ за достъп за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Изберете запазена парола за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Изберете запазени данни за вход за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Избиране на данни за вход за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Искате ли да изберете опция за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Да се използва ли тази информация за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Влизане в профила по друг начин"</string>
diff --git a/packages/CredentialManager/res/values-bn/strings.xml b/packages/CredentialManager/res/values-bn/strings.xml
index f2862f8..14f4a9b 100644
--- a/packages/CredentialManager/res/values-bn/strings.xml
+++ b/packages/CredentialManager/res/values-bn/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"CredentialManager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"বাতিল করুন"</string>
     <string name="string_continue" msgid="1346732695941131882">"চালিয়ে যান"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"আরও বিকল্প"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"অন্য উপায়ে সেভ করুন"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"আরও জানুন"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"পাসওয়ার্ড দেখুন"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"পাসওয়ার্ড লুকান"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"সাইন-ইন"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"সাইন-ইন সংক্রান্ত তথ্য"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> এখানে সেভ করুন"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"অন্য ডিভাইসে পাসকী তৈরি করবেন?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"অন্য ডিভাইসে \'পাসকী\' তৈরি করবেন?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"অন্য ডিভাইসে পাসওয়ার্ড সেভ করবেন?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"অন্য ডিভাইসে সাইন-ইন ক্রেডেনশিয়াল সেভ করবেন?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"আপনার সব সাইন-ইনের জন্য <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> ব্যবহার করবেন?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g>-এর জন্য এই Password Manager আপনার পাসওয়ার্ড ও \'পাসকী\' সেভ করবে যাতে সহজেই সাইন-ইন করতে পারেন"</string>
     <string name="set_as_default" msgid="4415328591568654603">"ডিফল্ট হিসেবে সেট করুন"</string>
+    <string name="settings" msgid="6536394145760913145">"সেটিংস"</string>
     <string name="use_once" msgid="9027366575315399714">"একবার ব্যবহার করুন"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>টি পাসওয়ার্ড • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>টি \'পাসকী\'"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>টি পাসওয়ার্ড"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"বন্ধ করুন"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"বাতিল করুন"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য আপনার সেভ করা পাসকী ব্যবহার করবেন?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য আপনার সেভ করা সাইন-ইন সম্পর্কিত ক্রেডেনশিয়াল ব্যবহার করবেন?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য সাইন-ইন করা সম্পর্কিত ক্রেডেনশিয়াল বেছে নিন"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"আপনার সেভ করা পাসওয়ার্ড <xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য ব্যবহার করবেন?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য আপনার সাইন-ইন ক্রেডেনশিয়াল ব্যবহার করবেন?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য সাইন-ইন করার বিকল্প আনলক করতে চান?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য সেভ করা পাসকী বেছে নিন"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য সেভ করা পাসকী বেছে নিন"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য সেভ করা ক্রেডেনশিয়াল বেছে নিন"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য সাইন-ইন ক্রেডেনশিয়াল বেছে নিন"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর জন্য বিকল্প বেছে নেবেন?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এ সাইন-ইন করতে এই তথ্য ব্যবহার করবেন?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"অন্যভাবে সাইন-ইন করুন"</string>
diff --git a/packages/CredentialManager/res/values-bs/strings.xml b/packages/CredentialManager/res/values-bs/strings.xml
index 165c1ce..f90db6f 100644
--- a/packages/CredentialManager/res/values-bs/strings.xml
+++ b/packages/CredentialManager/res/values-bs/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Upravitelj akreditiva"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Otkaži"</string>
     <string name="string_continue" msgid="1346732695941131882">"Nastavi"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Više opcija"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Sačuvaj na drugi način"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Saznajte više"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Prikaži lozinku"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Sakrij lozinku"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"prijave"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"informacije o prijavi"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Sačuvaj <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> na"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Kreirati pristupni ključ na drugom uređaju?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Kreirati pristupni ključ na drugom uređaju?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Sačuvati lozinku na drugom uređaju?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Sačuvati akreditive za prijavu na drugom uređaju?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Koristiti uslugu <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> za sve vaše prijave?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Ovaj upravitelj lozinki za <xliff:g id="USERNAME">%1$s</xliff:g> će pohraniti vaše lozinke i pristupne ključeve da vam olakša prijavu"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Postavi kao zadano"</string>
+    <string name="settings" msgid="6536394145760913145">"Postavke"</string>
     <string name="use_once" msgid="9027366575315399714">"Koristi jednom"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Broj lozinki: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Broj pristupnih ključeva: <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"Broj lozinki: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Zatvaranje"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Odbacivanje"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Koristiti sačuvani pristupni ključ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Koristiti sačuvanu prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Odaberite sačuvanu prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Koristiti sačuvanu lozinku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Koristiti vaše akreditive za prijavu u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Otključati opcije prijave za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Odaberite sačuvani pristupni ključ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Odaberite sačuvanu lozinku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Odaberite sačuvanu prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Odaberite akreditive za prijavu u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Odabrati opciju za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Koristiti ove informacije u aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijavite se na drugi način"</string>
diff --git a/packages/CredentialManager/res/values-ca/strings.xml b/packages/CredentialManager/res/values-ca/strings.xml
index 295e916..8e3fda8 100644
--- a/packages/CredentialManager/res/values-ca/strings.xml
+++ b/packages/CredentialManager/res/values-ca/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Gestor de credencials"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Cancel·la"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continua"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Més opcions"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Desa diferent"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Més informació"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Mostra la contrasenya"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Amaga la contrasenya"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"inicis de sessió"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"informació d\'inici de sessió"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Desa la <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> a"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Vols crear una clau d\'accés en un altre dispositiu?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Vols crear una clau d\'accés en un altre dispositiu?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Vols desar la contrasenya en un altre dispositiu?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Vols desar l\'inici de sessió en un altre dispositiu?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Vols utilitzar <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> per a tots els teus inicis de sessió?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Aquest gestor de contrasenyes per a <xliff:g id="USERNAME">%1$s</xliff:g> emmagatzemarà les teves contrasenyes i claus d\'accés per ajudar-te a iniciar la sessió fàcilment"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Estableix com a predeterminada"</string>
+    <string name="settings" msgid="6536394145760913145">"Configuració"</string>
     <string name="use_once" msgid="9027366575315399714">"Utilitza un cop"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> contrasenyes • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> claus d\'accés"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> contrasenyes"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Tanca"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Ignora"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vols utilitzar la clau d\'accés desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Vols utilitzar l\'inici de sessió desat per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Tria un inici de sessió desat per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vols utilitzar la contrasenya desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vols utilitzar el teu inici de sessió per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vols desbloquejar les opcions d\'inici de sessió per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Tria una clau d\'accés desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Tria una clau d\'accés desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Tria un inici de sessió desat per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Tria un inici de sessió per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vols triar una opció per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vols utilitzar aquesta informació a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Inicia la sessió d\'una altra manera"</string>
diff --git a/packages/CredentialManager/res/values-cs/strings.xml b/packages/CredentialManager/res/values-cs/strings.xml
index dbad4a5..9fe5a49 100644
--- a/packages/CredentialManager/res/values-cs/strings.xml
+++ b/packages/CredentialManager/res/values-cs/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Správce oprávnění"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Zrušit"</string>
     <string name="string_continue" msgid="1346732695941131882">"Pokračovat"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Další možnosti"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Uložit jinak"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Další informace"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Zobrazit heslo"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Skrýt heslo"</string>
@@ -16,7 +32,7 @@
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Technologie bez hesel"</string>
     <string name="passwordless_technology_detail" msgid="6853928846532955882">"Přístupové klíče umožňují přihlašovat se bez hesel. Stačí pomocí otisku prstu, rozpoznání obličeje, kódu PIN nebo gesta ověřit svou totožnost a vytvořit přístupový klíč."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"Kryptografie s veřejným klíčem"</string>
-    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Podle pokynů FIDO Alliance (která zahrnuje společnosti Google, Apple, Microsoft a další) a standardů W3C používají přístupové klíče páry kryptografických klíčů. Na rozdíl od uživatelského jména a řetězce znaků, které používáme pro hesla, se pro aplikaci nebo web vytváří pár klíčů (soukromého a veřejného). Soukromý klíč je bezpečně uložen ve vašem zařízení nebo správci hesel a potvrzuje vaši identitu. Veřejný klíč je sdílen s aplikací nebo webovým serverem. Pomocí odpovídajících klíčů se můžete okamžitě zaregistrovat a přihlásit."</string>
+    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Podle pokynů FIDO Alliance (zahrnující mj. firmy Google, Apple a Microsoft) a standardů W3C používají přístupové klíče páry kryptografických klíčů. Na rozdíl od jména uživatele a řetězce znaků používaného pro heslo se pro aplikaci nebo web vytváří soukromý a veřejný klíč. Soukromý klíč se bezpečně uloží do zařízení nebo správce hesel a potvrzuje vaši identitu. Veřejný klíč se sdílí s aplikací nebo webovým serverem. Pomocí odpovídajících klíčů se můžete rychle zaregistrovat a přihlásit."</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"Vylepšené zabezpečení účtu"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Každý klíč je propojen výhradně s aplikací nebo webem, pro které byl vytvořen, takže se nikdy nemůžete omylem přihlásit k podvodné aplikaci nebo webu. Protože na serverech jsou uloženy pouze veřejné klíče, je hackování navíc mnohem obtížnější."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Bezproblémový přechod"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"přihlášení"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"přihlašovací údaje"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Uložit <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> do"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Vytvořit přístupový klíč v jiném zařízení?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Vytvořit přístupový klíč na jiném zařízení?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Uložit přístupový klíč na jiném zařízení?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Uložit přihlášení na jiném zařízení?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Používat <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> pro všechna přihlášení?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Správce hesel pro účet <xliff:g id="USERNAME">%1$s</xliff:g> bude ukládat vaše hesla a přístupové klíče, abyste se mohli snadno přihlásit"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Nastavit jako výchozí"</string>
+    <string name="settings" msgid="6536394145760913145">"Nastavení"</string>
     <string name="use_once" msgid="9027366575315399714">"Použít jednou"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Hesla: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Přístupové klíče: <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"Počet hesel: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Zavřít"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Zavřít"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Použít uložený přístupový klíč pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Použít uložené přihlášení pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Vyberte uložené přihlášení pro <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Použít pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> uložené heslo?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Použít přihlášení pro <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Odemknout možnosti přihlášení pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Vyberte uložený přístupový klíč pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Vyberte uložené heslo pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Vyberte uložené přihlášení pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Vyberte přihlášení pro <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vybrat možnost pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Použít tyto informace na <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Přihlásit se jinak"</string>
diff --git a/packages/CredentialManager/res/values-da/strings.xml b/packages/CredentialManager/res/values-da/strings.xml
index 40761e0c..c7ee038 100644
--- a/packages/CredentialManager/res/values-da/strings.xml
+++ b/packages/CredentialManager/res/values-da/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Loginstyring"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Annuller"</string>
     <string name="string_continue" msgid="1346732695941131882">"Fortsæt"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Flere valgmuligheder"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Gem på en anden måde"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Få flere oplysninger"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Vis adgangskode"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Skjul adgangskode"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"loginmetoder"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"loginoplysninger"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Gem <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> i"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Vil du oprette en adgangsnøgle på en anden enhed?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Vil du oprette en adgangsnøgle på en anden enhed?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Vil du gemme adgangskoden på en anden enhed?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Vil du gemme loginmetoden på en anden enhed?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Vil du bruge <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> til alle dine loginmetoder?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Denne adgangskodeadministrator for <xliff:g id="USERNAME">%1$s</xliff:g> gemmer dine adgangskoder og adgangsnøgler for at hjælpe dig med nemt at logge ind"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Angiv som standard"</string>
+    <string name="settings" msgid="6536394145760913145">"Indstillinger"</string>
     <string name="use_once" msgid="9027366575315399714">"Brug én gang"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> adgangskoder • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> adgangsnøgler"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> adgangskoder"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Luk"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Luk"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vil du bruge din gemte adgangsnøgle til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Vil du bruge din gemte loginmetode til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Vælg en gemt loginmetode til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vil du bruge din gemte adgangskode til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vil du bruge dine loginoplysninger til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vil du låse enheden op for at se loginmetoder for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Vælg en gemt adgangsnøgle til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Vælg en gemt adgangskode til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Vælg en gemt loginmetode til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Vælg loginoplysninger til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vil du vælge en mulighed for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vil du bruge disse oplysninger i <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Log ind på en anden måde"</string>
diff --git a/packages/CredentialManager/res/values-de/strings.xml b/packages/CredentialManager/res/values-de/strings.xml
index 07edca5..29d9a86b 100644
--- a/packages/CredentialManager/res/values-de/strings.xml
+++ b/packages/CredentialManager/res/values-de/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Anmeldedaten-Manager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Abbrechen"</string>
     <string name="string_continue" msgid="1346732695941131882">"Weiter"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Weitere Optionen"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Anders speichern"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Weitere Informationen"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Passwort einblenden"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Passwort ausblenden"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"Anmeldungen"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"Anmeldedaten"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> speichern unter"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Passkey auf einem anderen Gerät erstellen?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Passkey auf einem anderen Gerät erstellen?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Passwort auf einem anderen Gerät speichern?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Anmeldedaten auf einem anderen Gerät speichern?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> für alle Anmeldungen verwenden?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Mit diesem Passwortmanager für <xliff:g id="USERNAME">%1$s</xliff:g> werden deine Passwörter und Passkeys gespeichert, damit du dich problemlos anmelden kannst"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Als Standard festlegen"</string>
+    <string name="settings" msgid="6536394145760913145">"Einstellungen"</string>
     <string name="use_once" msgid="9027366575315399714">"Einmal verwenden"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> Passwörter • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> Passkeys"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> Passwörter"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Schließen"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Schließen"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gespeicherten Passkey für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Gespeicherte Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Gespeicherte Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Soll dein gespeichertes Passwort für <xliff:g id="APP_NAME">%1$s</xliff:g> verwendet werden?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Anmeldeoptionen für <xliff:g id="APP_NAME">%1$s</xliff:g> freischalten?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Einen gespeicherten Passkey für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Ein gespeichertes Passwort für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Gespeicherte Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Option für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Diese Infos für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Andere Anmeldeoption auswählen"</string>
diff --git a/packages/CredentialManager/res/values-el/strings.xml b/packages/CredentialManager/res/values-el/strings.xml
index d7b3f98..4d97803 100644
--- a/packages/CredentialManager/res/values-el/strings.xml
+++ b/packages/CredentialManager/res/values-el/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Credential Manager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Ακύρωση"</string>
     <string name="string_continue" msgid="1346732695941131882">"Συνέχεια"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Περισσότερες επιλογές"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Αποθ. με άλλο τρόπο"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Μάθετε περισσότερα"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Εμφάνιση κωδικού πρόσβασης"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Απόκρυψη κωδικού πρόσβασης"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"στοιχεία σύνδεσης"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"στοιχεία σύνδεσης"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Αποθήκευση <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> σε"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Δημιουργία κλειδιού πρόσβασης σε άλλη συσκευή;"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Θέλετε να δημιουργήσετε ένα κλειδί πρόσβασης σε κάποια άλλη συσκευή;"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Θέλετε να αποθηκεύσετε τον κωδικό πρόσβασης σε κάποια άλλη συσκευή;"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Θέλετε να αποθηκεύσετε τα στοιχεία σύνδεσης σε κάποια άλλη συσκευή;"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Να χρησιμοποιηθεί το <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> για όλες τις συνδέσεις σας;"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Αυτός ο διαχειριστής κωδικών πρόσβασης για τον χρήστη <xliff:g id="USERNAME">%1$s</xliff:g> θα αποθηκεύει τους κωδικούς πρόσβασης και τα κλειδιά πρόσβασης, για πιο εύκολη πρόσβαση"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Ορισμός ως προεπιλογής"</string>
+    <string name="settings" msgid="6536394145760913145">"Ρυθμίσεις"</string>
     <string name="use_once" msgid="9027366575315399714">"Χρήση μία φορά"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> κωδικοί πρόσβασης • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> κλειδιά πρόσβασης"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> κωδικοί πρόσβασης"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Κλείσιμο"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Παράβλεψη"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Να χρησιμοποιηθεί το αποθηκευμένο κλειδί πρόσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Να χρησιμοποιηθούν τα αποθηκευμένα στοιχεία σύνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Επιλογή αποθηκευμένων στοιχείων σύνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Χρήση του αποθηκευμένου κωδικού πρόσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Χρήση της σύνδεσής σας για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Ξεκλείδωμα των επιλογών σύνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Επιλογή αποθηκευμένου κλειδιού πρόσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Επιλογή αποθηκευμένου κωδικού πρόσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Επιλογή αποθηκευμένων στοιχείων σύνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Επιλέξτε μια σύνδεση για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Επιλογή ενέργειας για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Να χρησιμοποιηθούν αυτές οι πληροφορίες στην εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Σύνδεση με άλλον τρόπο"</string>
diff --git a/packages/CredentialManager/res/values-en-rAU/strings.xml b/packages/CredentialManager/res/values-en-rAU/strings.xml
index deb7822..7b80db0 100644
--- a/packages/CredentialManager/res/values-en-rAU/strings.xml
+++ b/packages/CredentialManager/res/values-en-rAU/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Credential manager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Cancel"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continue"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"More options"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Save another way"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Learn more"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Show password"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Hide password"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"sign-ins"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"sign-in info"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Save <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> to"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Create passkey on another device?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Create passkey on another device?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Save password on another device?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Save sign-in on another device?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Use <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> for all your sign-ins?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"This password manager for <xliff:g id="USERNAME">%1$s</xliff:g> will store your passwords and passkeys to help you easily sign in"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Set as default"</string>
+    <string name="settings" msgid="6536394145760913145">"Settings"</string>
     <string name="use_once" msgid="9027366575315399714">"Use once"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> passwords • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> passkeys"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> passwords"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Close"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dismiss"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Use your saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Use your sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choose a saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choose a saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choose a sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string>
diff --git a/packages/CredentialManager/res/values-en-rCA/strings.xml b/packages/CredentialManager/res/values-en-rCA/strings.xml
index 6b226bc..b173616 100644
--- a/packages/CredentialManager/res/values-en-rCA/strings.xml
+++ b/packages/CredentialManager/res/values-en-rCA/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Credential Manager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Cancel"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continue"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"More options"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Save another way"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Learn more"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Show password"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Hide password"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"sign-ins"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"sign-in info"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Save <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> to"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Create passkey in another device?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Create passkey on another device?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Save password on another device?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Save sign-in on another device?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Use <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> for all your sign-ins?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"This password manager for <xliff:g id="USERNAME">%1$s</xliff:g> will store your passwords and passkeys to help you easily sign in"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Set as default"</string>
+    <string name="settings" msgid="6536394145760913145">"Settings"</string>
     <string name="use_once" msgid="9027366575315399714">"Use once"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> passwords • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> passkeys"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> passwords"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Close"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dismiss"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Use your saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Use your sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choose a saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choose a saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choose a sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info on <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string>
diff --git a/packages/CredentialManager/res/values-en-rGB/strings.xml b/packages/CredentialManager/res/values-en-rGB/strings.xml
index deb7822..7b80db0 100644
--- a/packages/CredentialManager/res/values-en-rGB/strings.xml
+++ b/packages/CredentialManager/res/values-en-rGB/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Credential manager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Cancel"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continue"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"More options"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Save another way"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Learn more"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Show password"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Hide password"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"sign-ins"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"sign-in info"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Save <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> to"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Create passkey on another device?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Create passkey on another device?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Save password on another device?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Save sign-in on another device?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Use <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> for all your sign-ins?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"This password manager for <xliff:g id="USERNAME">%1$s</xliff:g> will store your passwords and passkeys to help you easily sign in"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Set as default"</string>
+    <string name="settings" msgid="6536394145760913145">"Settings"</string>
     <string name="use_once" msgid="9027366575315399714">"Use once"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> passwords • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> passkeys"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> passwords"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Close"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dismiss"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Use your saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Use your sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choose a saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choose a saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choose a sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string>
diff --git a/packages/CredentialManager/res/values-en-rIN/strings.xml b/packages/CredentialManager/res/values-en-rIN/strings.xml
index deb7822..7b80db0 100644
--- a/packages/CredentialManager/res/values-en-rIN/strings.xml
+++ b/packages/CredentialManager/res/values-en-rIN/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Credential manager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Cancel"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continue"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"More options"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Save another way"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Learn more"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Show password"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Hide password"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"sign-ins"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"sign-in info"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Save <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> to"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Create passkey on another device?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Create passkey on another device?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Save password on another device?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Save sign-in on another device?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Use <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> for all your sign-ins?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"This password manager for <xliff:g id="USERNAME">%1$s</xliff:g> will store your passwords and passkeys to help you easily sign in"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Set as default"</string>
+    <string name="settings" msgid="6536394145760913145">"Settings"</string>
     <string name="use_once" msgid="9027366575315399714">"Use once"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> passwords • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> passkeys"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> passwords"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Close"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dismiss"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Use your saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Use your sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choose a saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choose a saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choose a sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string>
diff --git a/packages/CredentialManager/res/values-en-rXC/strings.xml b/packages/CredentialManager/res/values-en-rXC/strings.xml
index 18d298b..c3eeb04 100644
--- a/packages/CredentialManager/res/values-en-rXC/strings.xml
+++ b/packages/CredentialManager/res/values-en-rXC/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎‏‎‏‎‎‎Credential Manager‎‏‎‎‏‎"</string>
     <string name="string_cancel" msgid="6369133483981306063">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‏‎‎‎‏‏‎‎‏‏‏‏‎Cancel‎‏‎‎‏‎"</string>
     <string name="string_continue" msgid="1346732695941131882">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎Continue‎‏‎‎‏‎"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‎More options‎‏‎‎‏‎"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‎‎‎‎‎‎‏‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‎Save another way‎‏‎‎‏‎"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‏‏‎Learn more‎‏‎‎‏‎"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎Show password‎‏‎‎‏‎"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‎‏‏‏‏‎‎‎Hide password‎‏‎‎‏‎"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎sign-ins‎‏‎‎‏‎"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎sign-in info‎‏‎‎‏‎"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎Save ‎‏‎‎‏‏‎<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>‎‏‎‎‏‏‏‎ to‎‏‎‎‏‎"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎Create passkey in another device?‎‏‎‎‏‎"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎Create passkey on another device?‎‏‎‎‏‎"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‏‎‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‏‎Save password on another device?‎‏‎‎‏‎"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎Save sign-in on another device?‎‏‎‎‏‎"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎Use ‎‏‎‎‏‏‎<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ for all your sign-ins?‎‏‎‎‏‎"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‎This password manager for ‎‏‎‎‏‏‎<xliff:g id="USERNAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ will store your passwords and passkeys to help you easily sign in‎‏‎‎‏‎"</string>
     <string name="set_as_default" msgid="4415328591568654603">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‏‎‎‎‎‏‎‏‏‎Set as default‎‏‎‎‏‎"</string>
+    <string name="settings" msgid="6536394145760913145">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‎‏‎Settings‎‏‎‎‏‎"</string>
     <string name="use_once" msgid="9027366575315399714">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‎‎Use once‎‏‎‎‏‎"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>‎‏‎‎‏‏‏‎ passwords • ‎‏‎‎‏‏‎<xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>‎‏‎‎‏‏‏‎ passkeys‎‏‎‎‏‎"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>‎‏‎‎‏‏‏‎ passwords‎‏‎‎‏‎"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‎‎‎‎‎‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎Close‎‏‎‎‏‎"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‏‎‎‎‎Dismiss‎‏‎‎‏‎"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‎Use your saved passkey for ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‎Use your saved sign-in for ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‏‎‏‎Choose a saved sign-in for ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‎‏‎‎‎Use your saved password for ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‏‎‎‏‎Use your sign-in for ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎Unlock sign-in options for ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‎‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎Choose a saved passkey for ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‎‎‎‏‎‏‎‏‎Choose a saved password for ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎‎‏‏‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‎‎‎‎Choose a saved sign-in for ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‎‎Choose a sign-in for ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‏‎Choose an option for ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‎Use this info on ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‎‎‎‎Sign in another way‎‏‎‎‏‎"</string>
diff --git a/packages/CredentialManager/res/values-es-rUS/strings.xml b/packages/CredentialManager/res/values-es-rUS/strings.xml
index 93880c0..f6a5dcb 100644
--- a/packages/CredentialManager/res/values-es-rUS/strings.xml
+++ b/packages/CredentialManager/res/values-es-rUS/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Credential Manager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Cancelar"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continuar"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Más opciones"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Guardar otra forma"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Más información"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Mostrar contraseña"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Ocultar contraseña"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"accesos"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"información de acceso"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Guardar <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> en"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"¿Quieres crear una llave de acceso en otro dispositivo?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"¿Quieres crear una llave de acceso en otro dispositivo?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"¿Quieres guardar la contraseña en otro dispositivo?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"¿Quieres guardar las credenciales de acceso en otro dispositivo?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"¿Quieres usar <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> para todos tus accesos?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Este administrador de contraseñas para <xliff:g id="USERNAME">%1$s</xliff:g> almacenará tus contraseñas y llaves de acceso para ayudarte a acceder fácilmente"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Establecer como predeterminado"</string>
+    <string name="settings" msgid="6536394145760913145">"Configuración"</string>
     <string name="use_once" msgid="9027366575315399714">"Usar una vez"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> contraseñas • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> llaves de acceso"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> contraseñas"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Cerrar"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Descartar"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"¿Quieres usar tu llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"¿Quieres usar tu acceso guardado para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Elige un acceso guardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"¿Quieres usar la contraseña guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"¿Quieres usar tu acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"¿Quieres desbloquear las opciones de acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Elige una llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Elige una contraseña guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Elige un acceso guardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Elige un acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"¿Quieres una opción para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"¿Quieres usar esta información en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Acceder de otra forma"</string>
diff --git a/packages/CredentialManager/res/values-es/strings.xml b/packages/CredentialManager/res/values-es/strings.xml
index ae89976..fb0cbf9 100644
--- a/packages/CredentialManager/res/values-es/strings.xml
+++ b/packages/CredentialManager/res/values-es/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Gestor de credenciales"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Cancelar"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continuar"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Más opciones"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Guardar de otra forma"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Más información"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Mostrar contraseña"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Ocultar contraseña"</string>
@@ -12,7 +28,7 @@
     <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Con las llaves de acceso, no tienes que crear ni recordar contraseñas complicadas"</string>
     <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Las llaves de acceso son claves digitales cifradas que puedes crear con tu huella digital, cara o bloqueo de pantalla"</string>
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"Se guardan en un gestor de contraseñas para que puedas iniciar sesión en otros dispositivos"</string>
-    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Más información sobre llaves de acceso"</string>
+    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Más información sobre las llaves de acceso"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Tecnología sin contraseñas"</string>
     <string name="passwordless_technology_detail" msgid="6853928846532955882">"Las llaves de acceso te permiten iniciar sesión sin necesidad de contraseñas. Solo necesitas usar la huella digital, el reconocimiento facial, el PIN o patrón para verificar tu identidad y crear una llave de acceso."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"Criptografía de claves públicas"</string>
@@ -33,14 +49,17 @@
     <string name="sign_ins" msgid="4710739369149469208">"inicios de sesión"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"información de inicio de sesión"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Guardar <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> en"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"¿Crear llave de acceso en otro dispositivo?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"¿Crear llave de acceso en otro dispositivo?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"¿Guardar contraseña en otro dispositivo?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"¿Guardar inicio de sesión en otro dispositivo?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"¿Usar <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> para todos tus inicios de sesión?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Este gestor de contraseñas de <xliff:g id="USERNAME">%1$s</xliff:g> almacenará tus contraseñas y llaves de acceso para que puedas iniciar sesión fácilmente"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Fijar como predeterminado"</string>
+    <string name="settings" msgid="6536394145760913145">"Ajustes"</string>
     <string name="use_once" msgid="9027366575315399714">"Usar una vez"</string>
-    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> contraseñas • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> llaves de acceso"</string>
+    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Contraseñas: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Llaves de acceso: <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> contraseñas"</string>
-    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> llaves de acceso"</string>
+    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"Llaves de acceso: <xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g>"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"<xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g> credenciales"</string>
     <string name="passkey_before_subtitle" msgid="2448119456208647444">"Llave de acceso"</string>
     <string name="another_device" msgid="5147276802037801217">"Otro dispositivo"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Cerrar"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Cerrar"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"¿Usar la llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"¿Usar el inicio de sesión guardado para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Elige un inicio de sesión guardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"¿Usar la contraseña que tienes guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"¿Usar tu inicio de sesión en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"¿Desbloquear las opciones de inicio de sesión de <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Elige una llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Elige una contraseña guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Elige un inicio de sesión guardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Elige un inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"¿Elegir una opción para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"¿Usar esta información en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Iniciar sesión de otra manera"</string>
diff --git a/packages/CredentialManager/res/values-et/strings.xml b/packages/CredentialManager/res/values-et/strings.xml
index 653a0ee..97dbe4d 100644
--- a/packages/CredentialManager/res/values-et/strings.xml
+++ b/packages/CredentialManager/res/values-et/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Mandaatide haldur"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Tühista"</string>
     <string name="string_continue" msgid="1346732695941131882">"Jätka"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Rohkem valikuid"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Salvesta muul viisil"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Lisateave"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Kuva parool"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Peida parool"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"sisselogimisandmed"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"sisselogimisteave"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Salvesta <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>:"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Kas luua pääsuvõti muus seadmes?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Kas luua pääsuvõti teises seadmes?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Kas salvestada parool teises seadmes?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Kas salvestada sisselogimisandmed teises seadmes?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Kas kasutada teenust <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> kõigi teie sisselogimisandmete puhul?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Konto <xliff:g id="USERNAME">%1$s</xliff:g> paroolihaldur salvestab teie paroolid ja pääsuvõtmed, et aidata teil hõlpsalt sisse logida"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Määra vaikeseadeks"</string>
+    <string name="settings" msgid="6536394145760913145">"Seaded"</string>
     <string name="use_once" msgid="9027366575315399714">"Kasuta ühe korra"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> parooli • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> pääsuvõtit"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> parooli"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Sule"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Loobu"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Kas kasutada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud pääsuvõtit?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Kas kasutada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud sisselogimisandmeid?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Valige rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud sisselogimisandmed"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Kas kasutada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> puhul salvestatud parooli?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Kas soovite rakendusse <xliff:g id="APP_NAME">%1$s</xliff:g> sisselogimiseks kasutada oma mandaati?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Kas avada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks sisselogimisvalikud?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Valige rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud pääsuvõti"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Valige rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud parool"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Valige rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud sisselogimisandmed"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Valige rakendusse <xliff:g id="APP_NAME">%1$s</xliff:g> sisselogimiseks mandaat"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Kas teha valik rakendusele <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Kas soovite kasutada seda teavet rakenduses <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Logige sisse muul viisil"</string>
diff --git a/packages/CredentialManager/res/values-eu/strings.xml b/packages/CredentialManager/res/values-eu/strings.xml
index 6e54c1d..8316283 100644
--- a/packages/CredentialManager/res/values-eu/strings.xml
+++ b/packages/CredentialManager/res/values-eu/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Kredentzialen kudeatzailea"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Utzi"</string>
     <string name="string_continue" msgid="1346732695941131882">"Egin aurrera"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Aukera gehiago"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Gorde beste modu batera"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Lortu informazio gehiago"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Erakutsi pasahitza"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Ezkutatu pasahitza"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"kredentzialak"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"saioa hasteko informazioa"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Gorde <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> hemen:"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Beste gailu batean sortu nahi duzu sarbide-gakoa?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Beste gailu batean sarbide-gako bat sortu nahi duzu?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Beste gailu batean pasahitza gorde nahi duzu?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Beste gailu batean saioa hasteko modua gorde nahi duzu?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> erabili nahi duzu kredentzial guztietarako?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> erabiltzailearen pasahitz-kudeatzaile honek pasahitzak eta sarbide-gakoak gordeko ditu saioa erraz has dezazun"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Ezarri lehenetsi gisa"</string>
+    <string name="settings" msgid="6536394145760913145">"Ezarpenak"</string>
     <string name="use_once" msgid="9027366575315399714">"Erabili behin"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> pasahitz • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> sarbide-gako"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> pasahitz"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Itxi"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Baztertu"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gorde duzun sarbide-gakoa erabili nahi duzu?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gorde dituzun kredentzialak erabili nahi dituzu?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gorde dituzun kredentzialak"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako pasahitza erabili nahi duzu?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> zerbitzuan saioa hasteko kredentzialak erabili nahi dituzu?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan saioa hasteko aukerak desblokeatu nahi dituzu?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako sarbide-gakoa"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako pasahitza"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako kredentzialak"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> zerbitzuan saioa hasteko kredentzialak"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako aukera bat hautatu nahi duzu?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan erabili nahi duzu informazio hori?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Hasi saioa beste modu batean"</string>
diff --git a/packages/CredentialManager/res/values-fa/strings.xml b/packages/CredentialManager/res/values-fa/strings.xml
index fa25fa89..8e4113d 100644
--- a/packages/CredentialManager/res/values-fa/strings.xml
+++ b/packages/CredentialManager/res/values-fa/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"مدیر اطلاعات اعتباری"</string>
     <string name="string_cancel" msgid="6369133483981306063">"لغو"</string>
     <string name="string_continue" msgid="1346732695941131882">"ادامه"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"گزینه‌های بیشتر"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"ذخیره به روشی دیگر"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"بیشتر بدانید"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"نمایش گذرواژه"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"پنهان کردن گذرواژه"</string>
@@ -14,7 +30,7 @@
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"گذرکلیدها در «مدیر گذرواژه» ذخیره می‌شود تا بتوانید در دستگاه‌های دیگر به سیستم وارد شوید"</string>
     <string name="more_about_passkeys_title" msgid="7797903098728837795">"اطلاعات بیشتر درباره گذرکلیدها"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"فناوری بی‌گذرواژه"</string>
-    <string name="passwordless_technology_detail" msgid="6853928846532955882">"گذرکلیدها به شما اجازه می‌دهند بدون اتکا به گذرواژه به سیستم وارد شوید. برای به‌تأیید رساندن هویت خود و ایجاد گذرکلید، کافی است از اثر انگشت، تشخیص چهره، پین، یا الگوی کشیدنی استفاده کنید."</string>
+    <string name="passwordless_technology_detail" msgid="6853928846532955882">"گذرکلیدها به شما اجازه می‌دهند بدون اتکا به گذرواژه به سیستم وارد شوید. برای به‌تأیید رساندن هویت و ایجاد گذرکلید، کافی است از اثر انگشت، تشخیص چهره، پین، یا الگوی کشیدنی استفاده کنید."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"رمزنگاری کلید عمومی"</string>
     <string name="public_key_cryptography_detail" msgid="6937631710280562213">"‏براساس «اتحاد FIDO» (که شامل Google،‏ Apple،‏ Microsoft، و غیره می‌شود) و استانداردهای W3C، گذرکلیدها از جفت کلیدهای رمزنگاری‌شده استفاده می‌کنند. برخلاف نام کاربری و رشته نویسه‌هایی که برای گذرواژه‌ها استفاده می‌کنیم، یک جفت کلید خصوصی-عمومی برای برنامه یا وب‌سایت ایجاد می‌شود. کلید خصوصی به‌طور امن در دستگاه یا مدیر گذرواژه شما ذخیره می‌شود و هویت شما را تأیید می‌کند. کلید عمومی با سرور وب‌سایت یا برنامه هم‌رسانی می‌شود. با کلیدهای مربوطه می‌توانید بی‌درنگ ثبت‌نام کنید و به سیستم وارد شوید."</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"بهبود امنیت حساب"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"ورود به سیستم‌ها"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"اطلاعات ورود به سیستم"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"ذخیره <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> در"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"گذرکلید در دستگاه دیگر ایجاد شود؟"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"گذرکلید در دستگاه دیگری ایجاد شود؟"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"گذرواژه در دستگاه دیگری ذخیره شود؟"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"اطلاعات ورود به سیستم در دستگاه دیگری ذخیره شود؟"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"از <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> برای همه ورود به سیستم‌ها استفاده شود؟"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"این مدیر گذرواژه برای <xliff:g id="USERNAME">%1$s</xliff:g> گذرکلیدها و گذرواژه‌های شما را ذخیره می‌کند تا به‌راحتی بتوانید به سیستم وارد شوید"</string>
     <string name="set_as_default" msgid="4415328591568654603">"تنظیم به‌عنوان پیش‌فرض"</string>
+    <string name="settings" msgid="6536394145760913145">"تنظیمات"</string>
     <string name="use_once" msgid="9027366575315399714">"یک‌بار استفاده"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> گذرواژه • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> گذرکلید"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> گذرواژه"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"بستن"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"بستن"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"از گذرکلید ذخیره‌شده برای «<xliff:g id="APP_NAME">%1$s</xliff:g>» استفاده شود؟"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"ورود به سیستم ذخیره‌شده برای <xliff:g id="APP_NAME">%1$s</xliff:g> استفاده شود؟"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"انتخاب ورود به سیستم ذخیره‌شده برای <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"از گذرواژه ذخیره‌شده‌تان برای <xliff:g id="APP_NAME">%1$s</xliff:g> استفاده شود؟"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"از روش ورود به سیستم شما برای <xliff:g id="APP_NAME">%1$s</xliff:g> استفاده شود؟"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"گزینه‌های ورود به سیستم برای <xliff:g id="APP_NAME">%1$s</xliff:g> باز شود؟"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"گذرکلید ذخیره‌شده‌ای را برای <xliff:g id="APP_NAME">%1$s</xliff:g> انتخاب کنید"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"گذرواژه ذخیره‌شده‌ای را برای <xliff:g id="APP_NAME">%1$s</xliff:g> انتخاب کنید"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"اطلاعات ورود به سیستم ذخیره‌شده‌ای را برای <xliff:g id="APP_NAME">%1$s</xliff:g> انتخاب کنید"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"انتخاب روش ورود به سیستم برای <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"گزینه‌ای را برای <xliff:g id="APP_NAME">%1$s</xliff:g> انتخاب کنید؟"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"از این اطلاعات در <xliff:g id="APP_NAME">%1$s</xliff:g> استفاده شود؟"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ورود به سیستم به روشی دیگر"</string>
diff --git a/packages/CredentialManager/res/values-fi/strings.xml b/packages/CredentialManager/res/values-fi/strings.xml
index 384ad56..fff45c9 100644
--- a/packages/CredentialManager/res/values-fi/strings.xml
+++ b/packages/CredentialManager/res/values-fi/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Kirjautumistietojen hallinta"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Peru"</string>
     <string name="string_continue" msgid="1346732695941131882">"Jatka"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Lisäasetukset"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Tallenna eri tavalla"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Lue lisää"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Näytä salasana"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Piilota salasana"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"sisäänkirjautumiset"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"kirjautumistiedot"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Tallenna <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> tänne:"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Luodaanko avainkoodi toisella laitteella?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Luodaanko avainkoodi toisella laitteella?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Tallennetaanko salasana toisella laitteella?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Tallennetaanko sisäänkirjautuminen toisella laitteella?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Otetaanko <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> käyttöön kaikissa sisäänkirjautumisissa?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Tämä salasanojen ylläpitotyökalu, jota <xliff:g id="USERNAME">%1$s</xliff:g> käyttää, tallentaa salasanat ja avainkoodit, jotta voit kirjautua helposti sisään"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Aseta oletukseksi"</string>
+    <string name="settings" msgid="6536394145760913145">"Asetukset"</string>
     <string name="use_once" msgid="9027366575315399714">"Käytä kerran"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> salasanaa • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> avainkoodia"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> salasanaa"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Sulje"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Sulje"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Käytetäänkö tallennettua avainkoodiasi täällä: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Käytetäänkö tallennettuja kirjautumistietoja täällä: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Valitse tallennetut kirjautumistiedot (<xliff:g id="APP_NAME">%1$s</xliff:g>)"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Käytetäänkö tallennettua salasanaasi sovelluksessa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Käytetäänkö kirjautumistapaa: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Avataanko kirjautumisvaihtoehdot (<xliff:g id="APP_NAME">%1$s</xliff:g>)?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>: valitse tallennettu avainkoodi"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>: valitse tallennettu salasana"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>: valitse tallennetut kirjautumistiedot"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Valitse kirjautumistapa: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Valitaanko vaihtoehto, jota <xliff:g id="APP_NAME">%1$s</xliff:g> käyttää?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Saako <xliff:g id="APP_NAME">%1$s</xliff:g> käyttää näitä tietoja?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Kirjaudu sisään toisella tavalla"</string>
diff --git a/packages/CredentialManager/res/values-fr-rCA/strings.xml b/packages/CredentialManager/res/values-fr-rCA/strings.xml
index 7a7fd52..155be6f 100644
--- a/packages/CredentialManager/res/values-fr-rCA/strings.xml
+++ b/packages/CredentialManager/res/values-fr-rCA/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Gestionnaire d\'identifiants"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Annuler"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continuer"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Autres options"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Enregistrer autrement"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"En savoir plus"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Afficher le mot de passe"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Masquer le mot de passe"</string>
@@ -20,7 +36,7 @@
     <string name="improved_account_security_title" msgid="1069841917893513424">"Sécurité accrue du compte"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Chaque clé est exclusivement liée à l\'application ou au site Web pour lequel elle a été créée, de sorte que vous ne pourrez jamais vous connecter par erreur à une application ou à un site Web frauduleux. En outre, comme les serveurs ne conservent que les clés publiques, le piratage informatique est beaucoup plus difficile."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Transition fluide"</string>
-    <string name="seamless_transition_detail" msgid="4475509237171739843">"À mesure que nous nous dirigeons vers un avenir sans mot de passe, les mots de passe seront toujours utilisés parallèlement aux clés d\'accès."</string>
+    <string name="seamless_transition_detail" msgid="4475509237171739843">"À mesure que nous nous dirigeons vers un avenir sans mot de passe, ils resteront toujours utilisés parallèlement aux clés d\'accès."</string>
     <string name="choose_provider_title" msgid="8870795677024868108">"Choisir où enregistrer vos <xliff:g id="CREATETYPES">%1$s</xliff:g>"</string>
     <string name="choose_provider_body" msgid="4967074531845147434">"Sélectionnez un gestionnaire de mots de passe pour enregistrer vos renseignements et vous connecter plus rapidement la prochaine fois"</string>
     <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"Créer une clé d\'accès pour <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"connexions"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"renseignements de connexion"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Enregistrer la <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> dans"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Créer une clé d\'accès dans un autre appareil?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Créer une clé d\'accès sur un autre appareil?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Enregistrer le mot de passe sur un autre appareil?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Enregistrer l\'authentifiant de connexion sur un autre appareil?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Utiliser <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> pour toutes vos connexions?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Ce gestionnaire de mots de passe de <xliff:g id="USERNAME">%1$s</xliff:g> stockera vos mots de passe et vos clés d\'accès pour vous permettre de vous connecter facilement"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Définir par défaut"</string>
+    <string name="settings" msgid="6536394145760913145">"Paramètres"</string>
     <string name="use_once" msgid="9027366575315399714">"Utiliser une fois"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> mots de passe • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> clés d\'accès"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> mots de passe"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Fermer"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Fermer"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Utiliser votre clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Utiliser votre connexion enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Choisir une connexion enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Utiliser votre mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Utiliser votre identifiant de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Déverrouiller les options de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choisissez une clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choisissez un mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choisissez une connexion enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choisissez un identifiant de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choisir une option pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Utiliser ces renseignements dans <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Se connecter d\'une autre manière"</string>
diff --git a/packages/CredentialManager/res/values-fr/strings.xml b/packages/CredentialManager/res/values-fr/strings.xml
index f890e73..e042815 100644
--- a/packages/CredentialManager/res/values-fr/strings.xml
+++ b/packages/CredentialManager/res/values-fr/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Gestionnaire d\'identifiants"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Annuler"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continuer"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Autres options"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Sauver autrement"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"En savoir plus"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Afficher le mot de passe"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Masquer le mot de passe"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"connexions"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"informations de connexion"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Enregistrer la <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> dans"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Créer une clé d\'accès sur un autre appareil ?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Créer une clé d\'accès sur un autre appareil ?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Enregistrer le mot de passe sur un autre appareil ?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Enregistrer les identifiants de connexion sur un autre appareil ?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Utiliser <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> pour toutes vos connexions ?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Ce gestionnaire de mots de passe pour <xliff:g id="USERNAME">%1$s</xliff:g> stockera vos mots de passe et clés d\'accès pour vous permettre de vous connecter facilement"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Définir par défaut"</string>
+    <string name="settings" msgid="6536394145760913145">"Paramètres"</string>
     <string name="use_once" msgid="9027366575315399714">"Utiliser une fois"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> mot(s) de passe • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> clé(s) d\'accès"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> mots de passe"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Fermer"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Fermer"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Utiliser votre clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Utiliser vos informations de connexion enregistrées pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Choisir des informations de connexion enregistrées pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Utiliser votre mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Utiliser vos infos de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Déverrouiller les options de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choisir une clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choisir un mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choisir des informations de connexion enregistrées pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choisir des infos de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choisir une option pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Utiliser ces informations dans <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Se connecter d\'une autre manière"</string>
diff --git a/packages/CredentialManager/res/values-gl/strings.xml b/packages/CredentialManager/res/values-gl/strings.xml
index 0e54a27..79e0b5e 100644
--- a/packages/CredentialManager/res/values-gl/strings.xml
+++ b/packages/CredentialManager/res/values-gl/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Xestor de credenciais"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Cancelar"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continuar"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Máis opcións"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Gardar doutro xeito"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Máis información"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Mostrar contrasinal"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Ocultar contrasinal"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"métodos de inicio de sesión"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"información de inicio de sesión"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Gardar <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> en"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Queres crear unha clave de acceso noutro dispositivo?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Queres crear unha clave de acceso noutro dispositivo?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Queres gardar o contrasinal noutro dispositivo?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Queres gardar o inicio de sesión noutro dispositivo?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Queres usar <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> cada vez que inicies sesión?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Este xestor de contrasinais de <xliff:g id="USERNAME">%1$s</xliff:g> almacenará os teus contrasinais e claves de acceso para axudarche a iniciar sesión facilmente"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Establecer como predeterminado"</string>
+    <string name="settings" msgid="6536394145760913145">"Configuración"</string>
     <string name="use_once" msgid="9027366575315399714">"Usar unha vez"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> contrasinais • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> claves de acceso"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> contrasinais"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Pechar"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Pechar"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Queres usar a clave de acceso gardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Queres usar o método de inicio de sesión gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Escolle un método de inicio de sesión gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Queres usar o contrasinal gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Queres usar o teu inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Queres desbloquear as opcións de inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Escolle unha clave de acceso gardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Escolle un contrasinal gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Escolle un método de inicio de sesión gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Escolle un inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Queres escoller unha opción para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Queres usar esta información en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Iniciar sesión doutra forma"</string>
diff --git a/packages/CredentialManager/res/values-gu/strings.xml b/packages/CredentialManager/res/values-gu/strings.xml
index b90d7a0..c3c5b62 100644
--- a/packages/CredentialManager/res/values-gu/strings.xml
+++ b/packages/CredentialManager/res/values-gu/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"લૉગ ઇન વિગતોના મેનેજર"</string>
     <string name="string_cancel" msgid="6369133483981306063">"રદ કરો"</string>
     <string name="string_continue" msgid="1346732695941131882">"ચાલુ રાખો"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"વધુ વિકલ્પો"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"અન્ય રીતે સાચવો"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"વધુ જાણો"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"પાસવર્ડ બતાવો"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"પાસવર્ડ છુપાવો"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"સાઇન-ઇન"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"સાઇન-ઇન કરવાની માહિતી"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>ને આમાં સાચવો"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"અન્ય ડિવાઇસ પર પાસકી બનાવીએ?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"બીજા કોઈ ડિવાઇસ પર પાસકી બનાવીએ?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"બીજા કોઈ ડિવાઇસ પર પાસવર્ડ સાચવીએ?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"બીજા કોઈ ડિવાઇસ પર સાઇન-ઇન સાચવીએ?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"શું તમારા બધા સાઇન-ઇન માટે <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>નો ઉપયોગ કરીએ?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> માટેના આ પાસવર્ડ મેનેજર તમને સરળતાથી સાઇન ઇન કરવામાં સહાય કરવા માટે, તમારા પાસવર્ડ અને પાસકી સ્ટોર કરશે"</string>
     <string name="set_as_default" msgid="4415328591568654603">"ડિફૉલ્ટ તરીકે સેટ કરો"</string>
+    <string name="settings" msgid="6536394145760913145">"સેટિંગ"</string>
     <string name="use_once" msgid="9027366575315399714">"એકવાર ઉપયોગ કરો"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> પાસવર્ડ • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> પાસકી"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> પાસવર્ડ"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"બંધ કરો"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"છોડી દો"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે શું તમારી સાચવેલી પાસકીનો ઉપયોગ કરીએ?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે શું તમારા સાચવેલા સાઇન-ઇનનો ઉપયોગ કરીએ?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે કોઈ સાચવેલું સાઇન-ઇન પસંદ કરો"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"શું <xliff:g id="APP_NAME">%1$s</xliff:g> માટે તમારા સાચવેલા પાસવર્ડનો ઉપયોગ કરીએ?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"શું <xliff:g id="APP_NAME">%1$s</xliff:g>માં સાઇન ઇન કરવા માટે તમારી આ લૉગ ઇન વિગતોનો ઉપયોગ કરીએ?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે સાઇન ઇન વિકલ્પો અનલૉક કરીએ?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે કોઈ સાચવેલી પાસકી પસંદ કરો"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે કોઈ સાચવેલો પાસવર્ડ પસંદ કરો"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> માટે કોઈ સાચવેલું સાઇન-ઇન પસંદ કરો"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>માં સાઇન ઇન કરવાની કોઈ રીત પસંદ કરો"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>નો વિકલ્પ પસંદ કરીએ?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> પર આ માહિતીનો ઉપયોગ કરીએ?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"કોઈ અન્ય રીતે સાઇન ઇન કરો"</string>
diff --git a/packages/CredentialManager/res/values-hi/strings.xml b/packages/CredentialManager/res/values-hi/strings.xml
index 8a6eab3..d986a93 100644
--- a/packages/CredentialManager/res/values-hi/strings.xml
+++ b/packages/CredentialManager/res/values-hi/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"CredentialManager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"रद्द करें"</string>
     <string name="string_continue" msgid="1346732695941131882">"जारी रखें"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"ज़्यादा विकल्प"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"दूसरा तरीका सेव करें"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"ज़्यादा जानें"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"पासवर्ड दिखाएं"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"पासवर्ड छिपाएं"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"साइन इन"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"साइन-इन की जानकारी"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> को यहां सेव करें"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"क्या किसी दूसरे डिवाइस में पासकी सेव करनी है?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"क्या आपको किसी दूसरे डिवाइस में पासकी बनानी है?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"क्या आपको किसी दूसरे डिवाइस में पासवर्ड सेव करना है?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"क्या आपको किसी दूसरे डिवाइस में साइन इन क्रेडेंशियल सेव करने हैं?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"क्या आपको साइन इन से जुड़ी सारी जानकारी सेव करने के लिए, <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> का इस्तेमाल करना है?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> के लिए यह पासवर्ड मैनेजर, आपके पासवर्ड और पासकी सेव करेगा, ताकि आपको साइन इन करने में आसानी हो"</string>
     <string name="set_as_default" msgid="4415328591568654603">"डिफ़ॉल्ट के तौर पर सेट करें"</string>
+    <string name="settings" msgid="6536394145760913145">"सेटिंग"</string>
     <string name="use_once" msgid="9027366575315399714">"इसका इस्तेमाल एक बार किया जा सकता है"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> पासवर्ड • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> पासकी"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> पासवर्ड"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"बंद करें"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"खारिज करें"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"क्या आपको <xliff:g id="APP_NAME">%1$s</xliff:g> पर साइन इन करने के लिए, सेव की गई पासकी का इस्तेमाल करना है?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"क्या आपको <xliff:g id="APP_NAME">%1$s</xliff:g> पर साइन इन करने के लिए, सेव की गई जानकारी का इस्तेमाल करना है?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> पर साइन इन करने के लिए, सेव की गई जानकारी में से चुनें"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"क्या आपको <xliff:g id="APP_NAME">%1$s</xliff:g> के लिए सेव किया हुआ पासवर्ड इस्तेमाल करना है?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"क्या आपको <xliff:g id="APP_NAME">%1$s</xliff:g> के लिए अपने साइन-इन क्रेडेंशियल का इस्तेमाल करना है?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"क्या आपको <xliff:g id="APP_NAME">%1$s</xliff:g> में साइन इन करने के विकल्पों को अनलॉक करना है?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए सेव की गई पासकी चुनें"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए सेव किया गया पासवर्ड चुनें"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए सेव किया गया साइन इन क्रेडेंशियल चुनें"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए साइन-इन क्रेडेंशियल चुनें"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> में साइन इन करने के लिए सेव किए गए विकल्पों में से किसी को चुनना है?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए, क्या इस जानकारी का इस्तेमाल करना है?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"किसी दूसरे तरीके से साइन इन करें"</string>
diff --git a/packages/CredentialManager/res/values-hr/strings.xml b/packages/CredentialManager/res/values-hr/strings.xml
index 140a099..4425e24 100644
--- a/packages/CredentialManager/res/values-hr/strings.xml
+++ b/packages/CredentialManager/res/values-hr/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Upravitelj vjerodajnicama"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Odustani"</string>
     <string name="string_continue" msgid="1346732695941131882">"Nastavi"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Više opcija"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Spremi drugi način"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Saznajte više"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Prikaži zaporku"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Sakrij zaporku"</string>
@@ -16,7 +32,7 @@
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Tehnologija bez upotrebe zaporke"</string>
     <string name="passwordless_technology_detail" msgid="6853928846532955882">"Pristupni ključevi omogućuju prijavu bez upotrebe zaporki. Treba vam samo otisak prsta, prepoznavanje lica, PIN ili uzorak pokreta prstom da biste potvrdili svoj identitet i izradili pristupni ključ."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"Kriptografija javnog ključa"</string>
-    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Na temelju organizacije FIDO Alliance (koja uključuje Google, Apple, Microsoft i mnoge druge) i standarda W3C pristupni ključevi koriste kriptografske ključeve. Za razliku od korisničkog imena i niza znakova za zaporke, privatno-javni ključ izrađen je za aplikaciju ili web-lokaciju. Privatni ključ pohranjen je na vašem uređaju ili upravitelju zaporki i potvrđuje vaš identitet. Javni se ključ dijeli s poslužiteljem aplikacije ili web-lokacije. Uz odgovarajuće ključeve možete se odmah registrirati i prijaviti."</string>
+    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Prema standardima FIDO Alliancea (koja uključuje Google, Apple, Microsoft i mnoge druge) i W3C-a pristupni ključevi koriste kriptografske ključeve. Za razliku od korisničkog imena i niza znakova za zaporke, privatno-javni ključ izrađen je za aplikaciju ili web-lokaciju. Privatni ključ pohranjen je na vašem uređaju ili upravitelju zaporki i potvrđuje vaš identitet. Javni se ključ dijeli s poslužiteljem aplikacije ili web-lokacije. Uz odgovarajuće ključeve možete se odmah registrirati i prijaviti."</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"Poboljšana sigurnost računa"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Svaki je ključ povezan isključivo s aplikacijom ili web-lokacijom za koju je izrađen, stoga se nikad ne možete pogreškom prijaviti u prijevarnu aplikaciju ili na web-lokaciju. Osim toga, kad je riječ o poslužiteljima na kojem se nalaze samo javni ključevi, hakiranje je mnogo teže."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Besprijekorni prijelaz"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"prijave"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"informacije o prijavi"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Spremi <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> u"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Želite li izraditi pristupni ključ na drugom uređaju?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Izraditi pristupni ključ na drugom uređaju?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Spremiti zaporku na drugom uređaju?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Spremiti prijavu na drugom uređaju?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Želite li upotrebljavati uslugu <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> za sve prijave?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Upravitelj zaporki za korisničko ime <xliff:g id="USERNAME">%1$s</xliff:g> pohranit će vaše zaporke i pristupne ključeve radi jednostavnije prijave"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Postavi kao zadano"</string>
+    <string name="settings" msgid="6536394145760913145">"Postavke"</string>
     <string name="use_once" msgid="9027366575315399714">"Upotrijebi jednom"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Broj zaporki: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • broj pristupnih ključeva: <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"Broj zaporki: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Zatvori"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Odbaci"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Želite li upotrijebiti spremljeni pristupni ključ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Želite li upotrijebiti spremljene podatke za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Odaberite spremljene podatke za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Želite li upotrijebiti spremljenu zaporku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Želite li upotrijebiti prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Želite li otključati opcije za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Odaberite spremljeni pristupni ključ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Odaberite spremljenu zaporku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Odaberite spremljene podatke za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Odaberite prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Želite li odabrati opciju za <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Želite li koristiti te podatke u aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijavite se na neki drugi način"</string>
diff --git a/packages/CredentialManager/res/values-hu/strings.xml b/packages/CredentialManager/res/values-hu/strings.xml
index f07252a..118a77c 100644
--- a/packages/CredentialManager/res/values-hu/strings.xml
+++ b/packages/CredentialManager/res/values-hu/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Tanúsítványkezelő"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Mégse"</string>
     <string name="string_continue" msgid="1346732695941131882">"Folytatás"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"További lehetőségek"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Mentés más módon"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"További információ"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Jelszó megjelenítése"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Jelszó elrejtése"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"bejelentkezési adatok"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"bejelentkezési adatok"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> mentése ide:"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Egy másik eszközön szeretne azonosítókulcsot létrehozni?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Létrehoz egy azonosítókulcsot másik eszközön?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Elmenti a jelszót másik eszközön?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Elmenti a bejelentkezési adatokat másik eszközön?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Szeretné a következőt használni az összes bejelentkezési adatához: <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Ez a jelszókezelő fogja tárolni a(z) <xliff:g id="USERNAME">%1$s</xliff:g> fiókhoz tartozó jelszavait és azonosítókulcsait a bejelentkezés megkönnyítése érdekében."</string>
     <string name="set_as_default" msgid="4415328591568654603">"Beállítás alapértelmezettként"</string>
+    <string name="settings" msgid="6536394145760913145">"Beállítások"</string>
     <string name="use_once" msgid="9027366575315399714">"Egyszeri használat"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> jelszó, <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> azonosítókulcs"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> jelszó"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Bezárás"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Elvetés"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Szeretné a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz mentett azonosítókulcsot használni?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Szeretné a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz mentett bejelentkezési adatait használni?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Mentett bejelentkezési adatok választása a következő számára: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Szeretné az elmentett jelszavát használni a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Szeretné használni a következőhöz tartozó bejelentkezési adatait: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Feloldja a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> bejelentkezési lehetőségeit?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Mentett azonosítókulcs kiválasztása a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Mentett jelszó kiválasztása a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Mentett bejelentkezési adatok kiválasztása a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Válasszon bejelentkezési adatokat – <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Kiválaszt egy lehetőséget a következőbe való bejelentkezéshez: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Használni szeretná ezt az információt a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazásban?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Bejelentkezés más módon"</string>
diff --git a/packages/CredentialManager/res/values-hy/strings.xml b/packages/CredentialManager/res/values-hy/strings.xml
index 2b666c4..a6bda50 100644
--- a/packages/CredentialManager/res/values-hy/strings.xml
+++ b/packages/CredentialManager/res/values-hy/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Մուտքի տվյալների կառավարիչ"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Չեղարկել"</string>
     <string name="string_continue" msgid="1346732695941131882">"Շարունակել"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Այլ տարբերակներ"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Պահել մեկ այլ եղանակ"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Իմանալ ավելին"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Ցուցադրել գաղտնաբառը"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Թաքցնել գաղտնաբառը"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"մուտք"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"մուտքի տվյալներ"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Պահել <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>ն այստեղ՝"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Ստեղծե՞լ անցաբառ այլ սարքում"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Ստեղծե՞լ անցաբառ այլ սարքում"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Պահե՞լ գաղտնաբառն այլ սարքում"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Պահե՞լ մուտքի տվյալներն այլ սարքում"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Միշտ մուտք գործե՞լ <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> հավելվածի միջոցով"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Այս գաղտնաբառերի կառավարչում <xliff:g id="USERNAME">%1$s</xliff:g> օգտատերը կկարողանա պահել իր գաղտնաբառերն ու անցաբառերը, որպեսզի հետագայում ավելի արագ մուտք գործի հաշիվ"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Նշել որպես կանխադրված"</string>
+    <string name="settings" msgid="6536394145760913145">"Կարգավորումներ"</string>
     <string name="use_once" msgid="9027366575315399714">"Օգտագործել մեկ անգամ"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> գաղտնաբառ • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> անցաբառ"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> գաղտնաբառ"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Փակել"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Փակել"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Օգտագործե՞լ պահված անցաբառը <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Օգտագործե՞լ մուտքի պահված տվյալները <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Ընտրեք մուտքի պահված տվյալներ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Օգտագործե՞լ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար պահված ձեր գաղտնաբառը"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Օգտագործե՞լ այս տվյալները <xliff:g id="APP_NAME">%1$s</xliff:g> հավելված մուտք գործելու համար"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Ապակողպե՞լ մուտքի տարբերակներ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Ընտրեք պահված անցաբառ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Ընտրեք պահված գաղտնաբառ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Ընտրեք մուտքի պահված տվյալներ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Ընտրեք, թե ինչպես եք ուզում մուտք գործել <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Ընտրե՞լ տարբերակ <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի համար"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Օգտագործե՞լ այս տեղեկությունները <xliff:g id="APP_NAME">%1$s</xliff:g> մտնելու համար"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Մուտք գործել այլ եղանակով"</string>
diff --git a/packages/CredentialManager/res/values-in/strings.xml b/packages/CredentialManager/res/values-in/strings.xml
index 608c1ac..e47cf7b 100644
--- a/packages/CredentialManager/res/values-in/strings.xml
+++ b/packages/CredentialManager/res/values-in/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Pengelola Kredensial"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Batal"</string>
     <string name="string_continue" msgid="1346732695941131882">"Lanjutkan"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Opsi lainnya"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Simpan dengan cara lain"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Pelajari lebih lanjut"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Tampilkan sandi"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Sembunyikan sandi"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"login"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"info login"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Simpan <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> ke"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Buat kunci sandi di perangkat lain?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Buat kunci sandi di perangkat lain?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Simpan sandi di perangkat lain?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Simpan info login di perangkat lain?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Gunakan <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> untuk semua info login Anda?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Pengelola sandi untuk <xliff:g id="USERNAME">%1$s</xliff:g> ini akan menyimpan sandi dan kunci sandi guna membantu Anda login dengan mudah"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Setel sebagai default"</string>
+    <string name="settings" msgid="6536394145760913145">"Setelan"</string>
     <string name="use_once" msgid="9027366575315399714">"Gunakan sekali"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> sandi • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> kunci sandi"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> sandi"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Tutup"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Tutup"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gunakan kunci sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Gunakan info login tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Pilih info login tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Gunakan sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Gunakan login Anda untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Autentikasi opsi login untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Pilih kunci sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Pilih sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Pilih info login tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Pilih login untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pilih opsi untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gunakan info ini di <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Login dengan cara lain"</string>
diff --git a/packages/CredentialManager/res/values-is/strings.xml b/packages/CredentialManager/res/values-is/strings.xml
index 4f7fa4a..76a869f 100644
--- a/packages/CredentialManager/res/values-is/strings.xml
+++ b/packages/CredentialManager/res/values-is/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Skilríkjastjórnun"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Hætta við"</string>
     <string name="string_continue" msgid="1346732695941131882">"Áfram"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Fleiri valkostir"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Vista á annan hátt"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Nánar"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Sýna aðgangsorð"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Fela aðgangsorð"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"innskráningar"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"innskráningarupplýsingar"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Vista <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> í"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Viltu búa til aðgangslykil í öðru tæki?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Búa til aðgangslykil í öðru tæki?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Vista aðgangsorð í öðru tæki?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Vista innskráningu í öðru tæki?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Nota <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> fyrir allar innskráningar?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Þessi aðgangsorðastjórnun fyrir <xliff:g id="USERNAME">%1$s</xliff:g> vistar aðgangsorð og aðgangslykla til að auðvelda þér að skrá þig inn"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Stilla sem sjálfgefið"</string>
+    <string name="settings" msgid="6536394145760913145">"Stillingar"</string>
     <string name="use_once" msgid="9027366575315399714">"Nota einu sinni"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> aðgangsorð • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> aðgangslyklar"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> aðgangsorð"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Loka"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Hunsa"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Nota vistaðan aðgangslykil fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Nota vistaða innskráningu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Veldu vistaða innskráningu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Nota vistaða aðgangsorðið þitt fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Nota innskráningu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Opna fyrir innskráningarvalkosti fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Veldu vistaðan aðgangslykil fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Veldu vistað aðgangsorð fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Veldu vistaða innskráningu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Veldu innskráningu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Velja valkost fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Nota þessar upplýsingar í <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Skrá inn með öðrum hætti"</string>
diff --git a/packages/CredentialManager/res/values-it/strings.xml b/packages/CredentialManager/res/values-it/strings.xml
index b971b7b..87045cb 100644
--- a/packages/CredentialManager/res/values-it/strings.xml
+++ b/packages/CredentialManager/res/values-it/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Gestore delle credenziali"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Annulla"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continua"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Altre opzioni"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Salva un altro modo"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Scopri di più"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Mostra password"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Nascondi password"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"accessi"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"dati di accesso"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Salva <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> in"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Creare la passkey in un altro dispositivo?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Vuoi creare la passkey su un altro dispositivo?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Vuoi salvare la password su un altro dispositivo?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Vuoi salvare la credenziale di accesso su un altro dispositivo?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Vuoi usare <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> per tutti gli accessi?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Questo gestore delle password di <xliff:g id="USERNAME">%1$s</xliff:g> archivierà le password e le passkey per aiutarti ad accedere facilmente"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Imposta come valore predefinito"</string>
+    <string name="settings" msgid="6536394145760913145">"Impostazioni"</string>
     <string name="use_once" msgid="9027366575315399714">"Usa una volta"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> password • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> passkey"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> password"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Chiudi"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Chiudi"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vuoi usare la passkey salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Vuoi usare l\'accesso salvato per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Scegli un accesso salvato per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vuoi usare la password salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vuoi usare il tuo accesso per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vuoi sbloccare le opzioni di accesso per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Scegli una passkey salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Scegli una password salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Scegli un accesso salvato per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Scegli un accesso per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vuoi scegliere un\'opzione per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vuoi usare questi dati su <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Accedi in un altro modo"</string>
diff --git a/packages/CredentialManager/res/values-iw/strings.xml b/packages/CredentialManager/res/values-iw/strings.xml
index ad7e712..0643568 100644
--- a/packages/CredentialManager/res/values-iw/strings.xml
+++ b/packages/CredentialManager/res/values-iw/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"מנהל פרטי הכניסה"</string>
     <string name="string_cancel" msgid="6369133483981306063">"ביטול"</string>
     <string name="string_continue" msgid="1346732695941131882">"המשך"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"אפשרויות נוספות"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"שמירה בדרך אחרת"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"מידע נוסף"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"הצגת הסיסמה"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"הסתרת הסיסמה"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"פרטי כניסה"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"פרטי הכניסה"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"שמירת <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> ב-"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"ליצור מפתח גישה במכשיר אחר?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"ליצור מפתח גישה במכשיר אחר?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"לשמור את הסיסמה במכשיר אחר?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"לשמור את פרטי הכניסה במכשיר אחר?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"להשתמש ב-<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> בכל הכניסות?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"מנהל הסיסמאות הזה של <xliff:g id="USERNAME">%1$s</xliff:g> יאחסן את הסיסמאות ומפתחות הגישה שלך, כדי לעזור לך להיכנס לחשבון בקלות"</string>
     <string name="set_as_default" msgid="4415328591568654603">"הגדרה כברירת מחדל"</string>
+    <string name="settings" msgid="6536394145760913145">"הגדרות"</string>
     <string name="use_once" msgid="9027366575315399714">"שימוש פעם אחת"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> סיסמאות • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> מפתחות גישה"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> סיסמאות"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"סגירה"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"סגירה"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"להשתמש במפתח גישה שנשמר עבור <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"להשתמש בפרטי הכניסה שנשמרו עבור <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"בחירת פרטי כניסה שמורים עבור <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"להשתמש בסיסמה השמורה של <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"להשתמש בחשבון שלך כדי להיכנס אל <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"לבטל את הנעילה של אפשרויות הכניסה אל <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"בחירת מפתח גישה שמור ל-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"בחירת סיסמה שמורה ל-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"בחירת פרטי כניסה שמורים ל-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"בחירת חשבון לכניסה אל <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"רוצה לבחור אפשרות עבור <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"להשתמש במידע הזה בשביל <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"כניסה בדרך אחרת"</string>
diff --git a/packages/CredentialManager/res/values-ja/strings.xml b/packages/CredentialManager/res/values-ja/strings.xml
index 4adabd4..afbff90 100644
--- a/packages/CredentialManager/res/values-ja/strings.xml
+++ b/packages/CredentialManager/res/values-ja/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"認証情報マネージャー"</string>
     <string name="string_cancel" msgid="6369133483981306063">"キャンセル"</string>
     <string name="string_continue" msgid="1346732695941131882">"続行"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"その他のオプション"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"別の方法を保存"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"詳細"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"パスワードを表示する"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"パスワードを表示しない"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"ログイン"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"ログイン情報"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>の保存先"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"別のデバイスにパスキーを作成しますか?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"別のデバイスでパスキーを作成しますか?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"別のデバイスでパスワードを保存しますか?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"別のデバイスでログインを保存しますか?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"ログインのたびに <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> を使用しますか?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> のパスワード マネージャーにパスワードやパスキーが保存され、簡単にログインできるようになります"</string>
     <string name="set_as_default" msgid="4415328591568654603">"デフォルトに設定"</string>
+    <string name="settings" msgid="6536394145760913145">"設定"</string>
     <string name="use_once" msgid="9027366575315399714">"1 回使用"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> 件のパスワード • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> 件のパスキー"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> 件のパスワード"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"閉じる"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"閉じる"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> の保存したパスキーを使用しますか?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> の保存したログイン情報を使用しますか?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> の保存したログイン情報の選択"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> の保存したパスワードを使用しますか?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"この認証情報を使用して <xliff:g id="APP_NAME">%1$s</xliff:g> にログインしますか?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> がログイン方法を使用できるようにしますか?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> に使用するパスキーを選択してください"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> に使用するパスワードを選択してください"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> に使用するログイン情報を選択してください"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> のログインに使用する認証情報の選択"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> のオプションを選択しますか?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> でこの情報を使用しますか?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"別の方法でログイン"</string>
diff --git a/packages/CredentialManager/res/values-ka/strings.xml b/packages/CredentialManager/res/values-ka/strings.xml
index adba0c0..b597a9a 100644
--- a/packages/CredentialManager/res/values-ka/strings.xml
+++ b/packages/CredentialManager/res/values-ka/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"ავტორიზაციის მონაცემების მმართველი"</string>
     <string name="string_cancel" msgid="6369133483981306063">"გაუქმება"</string>
     <string name="string_continue" msgid="1346732695941131882">"გაგრძელება"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"სხვა ვარიანტები"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"სხვაგვარად შენახვა"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"შეიტყვეთ მეტი"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"პაროლის ჩვენება"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"პაროლის დამალვა"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"სისტემაში შესვლა"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"შესვლის ინფორმაცია"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>-ის შენახვა"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"გსურთ პაროლის შექმნა სხვა მოწყობილობაში?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"გსურთ სხვა მოწყობილობაზე წვდომის გასაღებების შექმნა?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"გსურთ სხვა მოწყობილობაზე პაროლის შენახვა?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"გსურთ სხვა მოწყობილობაზე ავტორიზაციის მონაცემების შენახვა?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"გსურთ, გამოიყენოთ<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> სისტემაში ყველა შესვლისთვის?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"მოცემული პაროლების მმართველი <xliff:g id="USERNAME">%1$s</xliff:g>-ისთვის შეინახავს თქვენს პაროლებს და წვდომის გასაღებს, რომლებიც დაგეხმარებათ სისტემაში მარტივად შესვლაში"</string>
     <string name="set_as_default" msgid="4415328591568654603">"ნაგულისხმევად დაყენება"</string>
+    <string name="settings" msgid="6536394145760913145">"პარამეტრები"</string>
     <string name="use_once" msgid="9027366575315399714">"ერთხელ გამოყენება"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> პაროლები • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> წვდომის გასაღებები"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> პაროლი"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"დახურვა"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"დახურვა"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"გსურთ თქვენი დამახსოვრებული წვდომის გასაღების გამოყენება აპისთვის: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"გსურთ თქვენი დამახსოვრებული სისტემაში შესვლის მონაცემების გამოყენება აპისთვის: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"აირჩიეთ სისტემაში შესვლის ინფორმაცია აპისთვის: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"გამოიყენებთ შენახულ პაროლს <xliff:g id="APP_NAME">%1$s</xliff:g>-სთვის?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"გსურთ შესვლის <xliff:g id="APP_NAME">%1$s</xliff:g>-სთვის გამოყენება?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"გსურთ შესვლის ვარიანტების განბლოკვა <xliff:g id="APP_NAME">%1$s</xliff:g>-სთვის?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"აირჩიეთ შენახული წვდომის გასაღები <xliff:g id="APP_NAME">%1$s</xliff:g>-სთვის"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"აირჩიეთ შენახული პაროლი <xliff:g id="APP_NAME">%1$s</xliff:g>-სთვის"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"აირჩიეთ სისტემაში შესვლის ინფორმაცია <xliff:g id="APP_NAME">%1$s</xliff:g>-სთვის"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"აირჩიეთ შესვლა <xliff:g id="APP_NAME">%1$s</xliff:g>-სთვის"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"გსურთ აირჩიოთ ვარიანტი <xliff:g id="APP_NAME">%1$s</xliff:g>-ისთვის?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"გსურთ ამ ინფორმაციის გამოყენება <xliff:g id="APP_NAME">%1$s</xliff:g>-ში?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"სხვა ხერხით შესვლა"</string>
diff --git a/packages/CredentialManager/res/values-kk/strings.xml b/packages/CredentialManager/res/values-kk/strings.xml
index 09f7b3d..cb68444 100644
--- a/packages/CredentialManager/res/values-kk/strings.xml
+++ b/packages/CredentialManager/res/values-kk/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Тіркелу деректері менеджері"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Бас тарту"</string>
     <string name="string_continue" msgid="1346732695941131882">"Жалғастыру"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Басқа опциялар"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Басқаша сақтау"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Толық ақпарат"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Құпия сөзді көрсету"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Құпия сөзді жасыру"</string>
@@ -28,15 +44,18 @@
     <string name="choose_create_option_sign_in_title" msgid="4124872317613421249">"<xliff:g id="APPNAME">%1$s</xliff:g> үшін кіру мәліметін сақтау керек пе?"</string>
     <string name="passkey" msgid="632353688396759522">"Кіру кілті"</string>
     <string name="password" msgid="6738570945182936667">"құпия сөз"</string>
-    <string name="passkeys" msgid="5733880786866559847">"Кіру кілттері"</string>
+    <string name="passkeys" msgid="5733880786866559847">"кіру кілттері"</string>
     <string name="passwords" msgid="5419394230391253816">"Құпия сөздер"</string>
     <string name="sign_ins" msgid="4710739369149469208">"кіру әрекеттері"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"кіру мәліметі"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> дерегін сақтау орны:"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Кіру кілтін басқа құрылғыда жасау керек пе?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Кіру кілті басқа құрылғыда жасалсын ба?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Құпия сөз басқа құрылғыда сақталсын ба?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Кіру басқа құрылғыда сақталсын ба?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Барлық кіру әрекеті үшін <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> пайдаланылсын ба?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> аккаунтына оңай кіру үшін құпия сөз менеджері құпия сөздер мен кіру кілттерін сақтайды."</string>
     <string name="set_as_default" msgid="4415328591568654603">"Әдепкі етіп орнату"</string>
+    <string name="settings" msgid="6536394145760913145">"Параметрлер"</string>
     <string name="use_once" msgid="9027366575315399714">"Бір рет пайдалану"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> құпия сөз • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> кіру кілті"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> құпия сөз"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Жабу"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Жабу"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған кіру кілті пайдаланылсын ба?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған тіркелу деректері пайдаланылсын ба?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған тіркелу деректерін таңдаңыз"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған құпия сөзіңізді пайдаланасыз ба?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасына кіру деректерін пайдаланасыз ба?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін кіру опциялары ашылсын ба?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған кіру кілтін таңдаңыз"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған құпия сөзді таңдаңыз"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін сақталған тіркелу деректерін таңдаңыз"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасына кіру деректерін таңдаңыз"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін опция таңдайсыз ба?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Бұл ақпарат <xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасында сақталсын ба?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Басқаша кіру"</string>
diff --git a/packages/CredentialManager/res/values-km/strings.xml b/packages/CredentialManager/res/values-km/strings.xml
index b5b1e17..d361ad9 100644
--- a/packages/CredentialManager/res/values-km/strings.xml
+++ b/packages/CredentialManager/res/values-km/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"កម្មវិធី​គ្រប់គ្រង​ព័ត៌មាន​ផ្ទៀងផ្ទាត់"</string>
     <string name="string_cancel" msgid="6369133483981306063">"បោះបង់"</string>
     <string name="string_continue" msgid="1346732695941131882">"បន្ត"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"ជម្រើសច្រើនទៀត"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"រក្សាទុកតាមវិធីផ្សេង"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"ស្វែងយល់បន្ថែម"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"បង្ហាញពាក្យសម្ងាត់"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"លាក់​ពាក្យ​សម្ងាត់"</string>
@@ -33,12 +49,15 @@
     <string name="sign_ins" msgid="4710739369149469208">"ការចូល​គណនី"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"ព័ត៌មានអំពី​ការចូលគណនី"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"រក្សាទុក​<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>​ទៅកាន់"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"បង្កើតកូដសម្ងាត់​នៅក្នុងឧបករណ៍​ផ្សេងទៀតឬ?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"បង្កើត​កូដសម្ងាត់​នៅលើឧបករណ៍​ផ្សេងទៀតឬ?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"រក្សាទុក​ពាក្យសម្ងាត់​នៅលើឧបករណ៍​ផ្សេងទៀតឬ?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"រក្សាទុក​ការចូលគណនី​នៅលើឧបករណ៍​ផ្សេងទៀតឬ?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"ប្រើ <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> សម្រាប់ការចូលគណនីទាំងអស់របស់អ្នកឬ?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់សម្រាប់ <xliff:g id="USERNAME">%1$s</xliff:g> ​នេះនឹងរក្សាទុកពាក្យសម្ងាត់ និងកូដសម្ងាត់​របស់អ្នក ដើម្បីជួយឱ្យអ្នក​ចូលគណនី​បានយ៉ាងងាយស្រួល"</string>
     <string name="set_as_default" msgid="4415328591568654603">"កំណត់ជាលំនាំដើម"</string>
+    <string name="settings" msgid="6536394145760913145">"ការកំណត់"</string>
     <string name="use_once" msgid="9027366575315399714">"ប្រើម្ដង"</string>
-    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"ពាក្យសម្ងាត់ <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • កូដសម្ងាត់<xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
+    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"ពាក្យសម្ងាត់ <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • កូដសម្ងាត់ <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"ពាក្យសម្ងាត់ <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
     <string name="more_options_usage_passkeys" msgid="5390320437243042237">"កូដសម្ងាត់ <xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g>"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"ព័ត៌មានផ្ទៀងផ្ទាត់ <xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g>"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"បិទ"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ច្រានចោល"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ប្រើកូដសម្ងាត់ដែលបានរក្សាទុករបស់អ្នកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"ប្រើការចូល​គណនីដែលបានរក្សាទុករបស់អ្នកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"ជ្រើសរើសការចូលគណនីដែលបានរក្សាទុកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ប្រើពាក្យសម្ងាត់​ដែលអ្នកបាន​រក្សាទុកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ប្រើការចូលគណនីរបស់អ្នកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"ដោះ​សោជម្រើសចូល​គណនីសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ជ្រើសរើសកូដសម្ងាត់ដែលបានរក្សាទុកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ជ្រើសរើសពាក្យ​សម្ងាត់ដែលបានរក្សាទុកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ជ្រើសរើសការចូលគណនីដែលបានរក្សាទុកសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ជ្រើសរើសការចូលគណនីសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ជ្រើសរើសជម្រើសសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ប្រើព័ត៌មាននេះ​នៅលើ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ចូលគណនីដោយប្រើវិធីផ្សេងទៀត"</string>
diff --git a/packages/CredentialManager/res/values-kn/strings.xml b/packages/CredentialManager/res/values-kn/strings.xml
index 9fb614e..ae680a0 100644
--- a/packages/CredentialManager/res/values-kn/strings.xml
+++ b/packages/CredentialManager/res/values-kn/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"ರುಜುವಾತು ನಿರ್ವಾಹಕ"</string>
     <string name="string_cancel" msgid="6369133483981306063">"ರದ್ದುಗೊಳಿಸಿ"</string>
     <string name="string_continue" msgid="1346732695941131882">"ಮುಂದುವರಿಸಿ"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳು"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"ಬೇರೆ ವಿಧಾನದಲ್ಲಿ ಉಳಿಸಿ"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"ಪಾಸ್‌ವರ್ಡ್ ತೋರಿಸಿ"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಮರೆಮಾಡಿ"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"ಸೈನ್-ಇನ್‌ಗಳು"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"ಸೈನ್-ಇನ್ ಮಾಹಿತಿ"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"ಇಲ್ಲಿಗೆ <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> ಅನ್ನು ಉಳಿಸಿ"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"ಮತ್ತೊಂದು ಸಾಧನದಲ್ಲಿ ಪಾಸ್‌ಕೀಯನ್ನು ರಚಿಸಬೇಕೇ?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"ಇನ್ನೊಂದು ಸಾಧನದಲ್ಲಿ ಪಾಸ್‌ಕೀ ಅನ್ನು ರಚಿಸಬೇಕೆ?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"ಇನ್ನೊಂದು ಸಾಧನದಲ್ಲಿ ಪಾಸ್‌ವರ್ಡ್ ಉಳಿಸಬೇಕೆ?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"ಮತ್ತೊಂದು ಸಾಧನದಲ್ಲಿ ಸೈನ್-ಇನ್ ಅನ್ನು ಉಳಿಸಬೇಕೆ?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"ನಿಮ್ಮ ಎಲ್ಲಾ ಸೈನ್-ಇನ್‌ಗಳಿಗಾಗಿ <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> ಅನ್ನು ಬಳಸುವುದೇ?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> ಗಾಗಿ ಈ ಪಾಸ್‌ವರ್ಡ್ ನಿರ್ವಾಹಕವು ನಿಮಗೆ ಸುಲಭವಾಗಿ ಸೈನ್ ಇನ್ ಮಾಡುವುದಕ್ಕೆ ಸಹಾಯ ಮಾಡಲು ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಮತ್ತು ಪಾಸ್‌ಕೀಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ"</string>
     <string name="set_as_default" msgid="4415328591568654603">"ಡೀಫಾಲ್ಟ್ ಆಗಿ ಸೆಟ್ ಮಾಡಿ"</string>
+    <string name="settings" msgid="6536394145760913145">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
     <string name="use_once" msgid="9027366575315399714">"ಒಂದು ಬಾರಿ ಬಳಸಿ"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> ಪಾಸ್‌ವರ್ಡ್‌ಗಳು • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> ಪಾಸ್‌ಕೀಗಳು"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> ಪಾಸ್‌ವರ್ಡ್‌ಗಳು"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"ಮುಚ್ಚಿರಿ"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ವಜಾಗೊಳಿಸಿ"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಉಳಿಸಲಾದ ನಿಮ್ಮ ಪಾಸ್‌ಕೀ ಅನ್ನು ಬಳಸಬೇಕೆ?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಉಳಿಸಲಾದ ನಿಮ್ಮ ಸೈನ್-ಇನ್ ಅನ್ನು ಬಳಸಬೇಕೆ?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಉಳಿಸಲಾದ ಸೈನ್-ಇನ್ ಮಾಹಿತಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ನಿಮ್ಮ ಉಳಿಸಲಾದ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಬಳಸಬೇಕೇ?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ನಿಮ್ಮ ಸೈನ್ ಇನ್ ಅನ್ನು ಬಳಸಬೇಕೇ?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಸೈನ್-ಇನ್ ಆಯ್ಕೆಗಳನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಬೇಕೇ?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಉಳಿಸಲಾದ ಪಾಸ್‌ಕೀ ಅನ್ನು ಆರಿಸಿ"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಉಳಿಸಲಾದ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಆರಿಸಿ"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಉಳಿಸಲಾದ ಸೈನ್-ಇನ್ ಮಾಹಿತಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಸೈನ್ ಇನ್ ಅನ್ನು ಆರಿಸಿ"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಆಯ್ಕೆಯನ್ನು ಆರಿಸಬೇಕೆ?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ಈ ಮಾಹಿತಿಯನ್ನು <xliff:g id="APP_NAME">%1$s</xliff:g> ನಲ್ಲಿ ಬಳಸಬೇಕೆ?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ಬೇರೆ ವಿಧಾನದಲ್ಲಿ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string>
diff --git a/packages/CredentialManager/res/values-ko/strings.xml b/packages/CredentialManager/res/values-ko/strings.xml
index 092bf89..07a7fbc 100644
--- a/packages/CredentialManager/res/values-ko/strings.xml
+++ b/packages/CredentialManager/res/values-ko/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"인증서 관리자"</string>
     <string name="string_cancel" msgid="6369133483981306063">"취소"</string>
     <string name="string_continue" msgid="1346732695941131882">"계속"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"옵션 더보기"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"다른 방법 저장하기"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"자세히 알아보기"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"비밀번호 표시"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"비밀번호 숨기기"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"로그인 정보"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"로그인 정보"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> 저장 위치"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"다른 기기에서 패스키를 만드시겠습니까?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"다른 기기에서 패스키를 만드시겠습니까?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"다른 기기에서 비밀번호를 저장하시겠습니까?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"다른 기기에서 로그인 정보를 저장하시겠습니까?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"모든 로그인에 <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>을(를) 사용하시겠습니까?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g>님을 위한 이 비밀번호 관리자는 비밀번호와 패스키를 저장하여 사용자가 간편하게 로그인할 수 있도록 돕습니다."</string>
     <string name="set_as_default" msgid="4415328591568654603">"기본값으로 설정"</string>
+    <string name="settings" msgid="6536394145760913145">"설정"</string>
     <string name="use_once" msgid="9027366575315399714">"한 번 사용"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"비밀번호 <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>개 • 패스키 <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>개"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"비밀번호 <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>개"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"닫기"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"닫기"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱용으로 저장된 패스키를 사용하시겠습니까?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱용 저장된 로그인 정보를 사용하시겠습니까?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱용 저장된 로그인 정보 선택"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"저장된 비밀번호를 <xliff:g id="APP_NAME">%1$s</xliff:g>에 사용할까요?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g>에 로그인을 사용하시겠습니까?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g>에 대해 로그인 옵션을 잠금 해제하시겠습니까?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>에 대해 저장된 패스키 선택"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>에 대해 저장된 비밀번호 선택"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>에 대해 저장된 로그인 정보 선택"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>에 사용할 로그인 선택"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱의 옵션을 선택하시겠습니까?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 이 정보를 사용하시나요?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"다른 방법으로 로그인"</string>
diff --git a/packages/CredentialManager/res/values-ky/strings.xml b/packages/CredentialManager/res/values-ky/strings.xml
index e055ea3..b4c5670 100644
--- a/packages/CredentialManager/res/values-ky/strings.xml
+++ b/packages/CredentialManager/res/values-ky/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Credential Manager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Жок"</string>
     <string name="string_continue" msgid="1346732695941131882">"Улантуу"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Башка варианттар"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Башка жолду сактоо"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Кеңири маалымат"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Сырсөздү көрсөтүү"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Сырсөздү жашыруу"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"кирүүлөр"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"кирүү маалыматы"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> төмөнкүгө сакталсын:"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Киргизүүчү ачкыч башка түзмөктө түзүлсүнбү?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Башка түзмөктө киргизүүчү ачкычты түзөсүзбү?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Сырсөздү башка түзмөктө сактайсызбы?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Кирүү маалыматын башка түзмөктө сактайсызбы?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> бардык аккаунттарга кирүү үчүн колдонулсунбу?"</string>
-    <string name="use_provider_for_all_description" msgid="1998772715863958997">"Сырсөздөрүңүздү жана ачкычтарыңызды <xliff:g id="USERNAME">%1$s</xliff:g> аккаунтуңуздагы сырсөздөрдү башкаргычка сактап коюп, каалаган убакта колдоно берсеңиз болот"</string>
+    <string name="use_provider_for_all_description" msgid="1998772715863958997">"Сырсөздөрүңүздү жана киргизүүчү ачкычтарыңызды <xliff:g id="USERNAME">%1$s</xliff:g> аккаунтуңуздагы сырсөздөрдү башкаргычка сактап коюп, каалаган убакта колдоно берсеңиз болот"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Демейки катары коюу"</string>
+    <string name="settings" msgid="6536394145760913145">"Параметрлер"</string>
     <string name="use_once" msgid="9027366575315399714">"Бир жолу колдонуу"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> сырсөз • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> киргизүүчү ачкыч"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> сырсөз"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Жабуу"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Жабуу"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна кирүү үчүн сакталган ачкычты колдоносузбу?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн сакталган кирүү параметрин колдоносузбу?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн кирүү маалыматын тандаңыз"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн сакталган сырсөздү колдоносузбу?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна кирүү жолун тандайсызбы?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн кирүү параметрлеринин кулпусу ачылсынбы?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн сакталган киргизүүчү ачкычты тандаңыз"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн сакталган сырсөздү тандаңыз"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн кирүү маалыматын тандаңыз"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна кирүү жолун тандаңыз"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> үчүн параметр тандайсызбы?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Бул маалыматты <xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосунда пайдаланасызбы?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Башка жол менен кирүү"</string>
diff --git a/packages/CredentialManager/res/values-lo/strings.xml b/packages/CredentialManager/res/values-lo/strings.xml
index 28e80fa..3b2e2aa 100644
--- a/packages/CredentialManager/res/values-lo/strings.xml
+++ b/packages/CredentialManager/res/values-lo/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"ຕົວຈັດການຂໍ້ມູນການເຂົ້າສູ່ລະບົບ"</string>
     <string name="string_cancel" msgid="6369133483981306063">"ຍົກເລີກ"</string>
     <string name="string_continue" msgid="1346732695941131882">"ສືບຕໍ່"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"ຕົວເລືອກເພີ່ມເຕີມ"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"ບັນທຶກດ້ວຍວິທີອື່ນ"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"ສຶກສາເພີ່ມເຕີມ"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"ສະແດງລະຫັດຜ່ານ"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"ເຊື່ອງລະຫັດຜ່ານ"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"ການເຂົ້າສູ່ລະບົບ"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"ຂໍ້ມູນການເຂົ້າສູ່ລະບົບ"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"ບັນທຶກ <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> ໃສ່"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"ສ້າງກະແຈຜ່ານໃນອຸປະກອນອື່ນບໍ?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"ສ້າງກະແຈຜ່ານຢູ່ອຸປະກອນອື່ນບໍ?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"ບັນທຶກລະຫັດຜ່ານຢູ່ອຸປະກອນອື່ນບໍ?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"ບັນທຶກການເຂົ້າສູ່ລະບົບຢູ່ອຸປະກອນອື່ນບໍ?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"ໃຊ້ <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> ສຳລັບການເຂົ້າສູ່ລະບົບທັງໝົດຂອງທ່ານບໍ?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"ຕົວຈັດການລະຫັດຜ່ານນີ້ສຳລັບ <xliff:g id="USERNAME">%1$s</xliff:g> ຈະຈັດເກັບລະຫັດຜ່ານ ແລະ ກະແຈຜ່ານຂອງທ່ານໄວ້ເພື່ອຊ່ວຍໃຫ້ທ່ານເຂົ້າສູ່ລະບົບໄດ້ຢ່າງງ່າຍດາຍ"</string>
     <string name="set_as_default" msgid="4415328591568654603">"ຕັ້ງເປັນຄ່າເລີ່ມຕົ້ນ"</string>
+    <string name="settings" msgid="6536394145760913145">"ການຕັ້ງຄ່າ"</string>
     <string name="use_once" msgid="9027366575315399714">"ໃຊ້ເທື່ອດຽວ"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> ລະຫັດຜ່ານ • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> ກະແຈຜ່ານ"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> ລະຫັດຜ່ານ"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"ປິດ"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ປິດໄວ້"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ໃຊ້ກະແຈຜ່ານທີ່ບັນທຶກໄວ້ຂອງທ່ານສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"ໃຊ້ການເຂົ້າສູ່ລະບົບທີ່ບັນທຶກໄວ້ຂອງທ່ານສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"ເລືອກການເຂົ້າສູ່ລະບົບທີ່ບັນທຶກໄວ້ສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ໃຊ້ລະຫັດຜ່ານທີ່ບັນທຶກໄວ້ຂອງທ່ານສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ເລືອກການເຂົ້າສູ່ລະບົບຂອງທ່ານສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"ປົດລັອກຕົວເລືອກການເຂົ້າສູ່ລະບົບສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ເລືອກກະແຈຜ່ານທີ່ບັນທຶກໄວ້ສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ເລືອກລະຫັດຜ່ານທີ່ບັນທຶກໄວ້ສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ເລືອກການເຂົ້າສູ່ລະບົບທີ່ບັນທຶກໄວ້ສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ເລືອກການເຂົ້າສູ່ລະບົບສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ເລືອກຕົວເລືອກສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ໃຊ້ຂໍ້ມູນນີ້ຢູ່ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ເຂົ້າສູ່ລະບົບດ້ວຍວິທີອື່ນ"</string>
diff --git a/packages/CredentialManager/res/values-lt/strings.xml b/packages/CredentialManager/res/values-lt/strings.xml
index ce06610..d5f5f7f 100644
--- a/packages/CredentialManager/res/values-lt/strings.xml
+++ b/packages/CredentialManager/res/values-lt/strings.xml
@@ -1,26 +1,42 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Prisijungimo duomenų tvarkytuvė"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Atšaukti"</string>
     <string name="string_continue" msgid="1346732695941131882">"Tęsti"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Daugiau parinkčių"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Išsaugoti kitu būdu"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Sužinokite daugiau"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Rodyti slaptažodį"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Slėpti slaptažodį"</string>
-    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Saugiau naudojant slaptažodžius"</string>
-    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Naudojant „passkey“ nereikės kurti ir prisiminti sudėtingų slaptažodžių"</string>
-    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"„Passkey“ šifruojami skaitiniais raktais, kuriuos sukuriate naudodami piršto atspaudą, veidą ar ekrano užraktą"</string>
+    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Saugiau naudojant prieigos raktus"</string>
+    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Naudojant prieigos raktus nereikės kurti ir prisiminti sudėtingų slaptažodžių"</string>
+    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Prieigos raktai šifruojami skaitiniais raktais, kuriuos sukuriate naudodami piršto atspaudą, veidą ar ekrano užraktą"</string>
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"Jie saugomi slaptažodžių tvarkyklėje, kad galėtumėte prisijungti kituose įrenginiuose"</string>
-    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Daugiau apie slaptuosius raktus („passkey“)"</string>
+    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Daugiau apie prieigos raktus („passkey“)"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Technologijos be slaptažodžių"</string>
-    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Naudodami slaptuosius raktus galite prisijungti be slaptažodžių. Tiesiog naudokite piršto atspaudą, atpažinimą pagal veidą, PIN kodą arba perbraukiamą atrakinimo piešinį, kad patvirtintumėte tapatybę ir sukurtumėte slaptąjį raktą."</string>
+    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Naudodami prieigos raktus galite prisijungti be slaptažodžių. Tiesiog naudokite piršto atspaudą, atpažinimą pagal veidą, PIN kodą arba perbraukiamą atrakinimo piešinį, kad patvirtintumėte tapatybę ir sukurtumėte prieigos raktą."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"Viešojo rakto kriptografija"</string>
-    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Pagal FIDO aljansą (kuriam priklauso „Google“, „Apple“, „Microsoft“ ir kt.) bei W3C standartus, slaptiesiems raktams naudojamos kriptografinių raktų poros. Priešingai nei naudotojo vardas ir eilutė simbolių, naudojamų slaptažodžiams, privataus ir viešojo raktų pora sukuriama programai ar svetainei. Tapatybę patvirtinantis privatusis raktas saugomas įrenginyje ar Slaptažodžių tvarkyklėje. Viešasis raktas bendrinamas su programos ar svetainės serveriu. Naudodami atitinkamus raktus galite akimirksniu užsiregistruoti ir prisijungti."</string>
+    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Pagal FIDO aljansą (kuriam priklauso „Google“, „Apple“, „Microsoft“ ir kt.) bei W3C standartus, prieigos raktams naudojamos kriptografinių raktų poros. Priešingai nei naudotojo vardas ir eilutė simbolių, naudojamų slaptažodžiams, privataus ir viešojo raktų pora sukuriama programai ar svetainei. Tapatybę patvirtinantis privatusis raktas saugomas įrenginyje ar Slaptažodžių tvarkyklėje. Viešasis raktas bendrinamas su programos ar svetainės serveriu. Naudodami atitinkamus raktus galite akimirksniu užsiregistruoti ir prisijungti."</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"Geresnė paskyros sauga"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Kiekvienas raktas išskirtinai susietas su programa ar svetaine, kuriai buvo sukurtas, todėl niekada per klaidą neprisijungsite prie apgavikiškos programos ar svetainės. Be to, viešieji raktai laikomi tik serveriuose, todėl įsilaužti tampa gerokai sudėtingiau."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Sklandus perėjimas"</string>
-    <string name="seamless_transition_detail" msgid="4475509237171739843">"Kol stengiamės padaryti, kad ateityje nereikėtų naudoti slaptažodžių, jie vis dar bus pasiekiami kartu su slaptaisiais raktais."</string>
+    <string name="seamless_transition_detail" msgid="4475509237171739843">"Kol stengiamės padaryti, kad ateityje nereikėtų naudoti slaptažodžių, jie vis dar bus pasiekiami kartu su prieigos raktais."</string>
     <string name="choose_provider_title" msgid="8870795677024868108">"Pasirinkite, kur išsaugoti „<xliff:g id="CREATETYPES">%1$s</xliff:g>“"</string>
     <string name="choose_provider_body" msgid="4967074531845147434">"Pasirinkite slaptažodžių tvarkyklę, kurią naudodami galėsite išsaugoti informaciją ir kitą kartą prisijungti greičiau"</string>
     <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"Sukurti „passkey“, skirtą „<xliff:g id="APPNAME">%1$s</xliff:g>“?"</string>
@@ -28,19 +44,22 @@
     <string name="choose_create_option_sign_in_title" msgid="4124872317613421249">"Išsaugoti prisijungimo prie „<xliff:g id="APPNAME">%1$s</xliff:g>“ informaciją?"</string>
     <string name="passkey" msgid="632353688396759522">"„passkey“"</string>
     <string name="password" msgid="6738570945182936667">"slaptažodis"</string>
-    <string name="passkeys" msgid="5733880786866559847">"passkey"</string>
+    <string name="passkeys" msgid="5733880786866559847">"prieigos raktas"</string>
     <string name="passwords" msgid="5419394230391253816">"slaptažodžiai"</string>
     <string name="sign_ins" msgid="4710739369149469208">"prisijungimo informacija"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"prisijungimo informaciją"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Išsaugoti <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Kurti „passkey“ kitame įrenginyje?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Sukurti „passkey“ kitame įrenginyje?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Išsaugoti slaptažodį kitame įrenginyje?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Išsaugoti prisijungimo duomenis kitame įrenginyje?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Naudoti <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> visada prisijungiant?"</string>
-    <string name="use_provider_for_all_description" msgid="1998772715863958997">"Šioje <xliff:g id="USERNAME">%1$s</xliff:g> Slaptažodžių tvarkyklėje bus saugomi jūsų slaptažodžiai ir „passkey“, kad galėtumėte lengvai prisijungti"</string>
+    <string name="use_provider_for_all_description" msgid="1998772715863958997">"Šioje <xliff:g id="USERNAME">%1$s</xliff:g> Slaptažodžių tvarkyklėje bus saugomi jūsų slaptažodžiai ir prieigos raktai, kad galėtumėte lengvai prisijungti"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Nustatyti kaip numatytąjį"</string>
+    <string name="settings" msgid="6536394145760913145">"Nustatymai"</string>
     <string name="use_once" msgid="9027366575315399714">"Naudoti vieną kartą"</string>
-    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Slaptažodžių: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • „Passkey“: <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
+    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Slaptažodžių: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Prieigos raktų: <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"slaptažodžių: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
-    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"„passkey“: <xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g>"</string>
+    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"Prieigos raktai: <xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g>"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"Prisijungimo duomenų: <xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g>"</string>
     <string name="passkey_before_subtitle" msgid="2448119456208647444">"Slaptažodis"</string>
     <string name="another_device" msgid="5147276802037801217">"Kitas įrenginys"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Uždaryti"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Atsisakyti"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Naudoti išsaugotą „passkey“ programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Naudoti išsaugotą prisijungimo informaciją programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Pasirinkite išsaugotą prisijungimo informaciją programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Naudoti išsaugotą slaptažodį programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Naudoti prisijungimo informaciją programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Atrakinti prisijungimo prie „<xliff:g id="APP_NAME">%1$s</xliff:g>“ parinktis?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Išsaugoto prieigos rakto, skirto „<xliff:g id="APP_NAME">%1$s</xliff:g>“, pasirinkimas"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Išsaugoto slaptažodžio, skirto „<xliff:g id="APP_NAME">%1$s</xliff:g>“, pasirinkimas"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Pasirinkite išsaugotą prisijungimo informaciją programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Pasirinkite prisijungimo informaciją programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pasirinkti parinktį programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Naudoti šią informaciją programoje „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prisijungti kitu būdu"</string>
diff --git a/packages/CredentialManager/res/values-lv/strings.xml b/packages/CredentialManager/res/values-lv/strings.xml
index a2dd6f5..27115ca 100644
--- a/packages/CredentialManager/res/values-lv/strings.xml
+++ b/packages/CredentialManager/res/values-lv/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Akreditācijas datu pārvaldnieks"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Atcelt"</string>
     <string name="string_continue" msgid="1346732695941131882">"Turpināt"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Citas opcijas"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Saglabāt citā veidā"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Uzzināt vairāk"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Rādīt paroli"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Slēpt paroli"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"pierakstīšanās informācija"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"pierakstīšanās informācija"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Kur jāsaglabā <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Vai izveidot piekļuves atslēgu citā ierīcē?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Vai izveidot piekļuves atslēgu citā ierīcē?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Vai saglabāt paroli citā ierīcē?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Vai saglabāt pierakstīšanās datus citā ierīcē?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Vai vienmēr izmantot <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>, lai pierakstītos?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Šis paroļu pārvaldnieks glabās konta <xliff:g id="USERNAME">%1$s</xliff:g> paroles un piekļuves atslēgas, lai atvieglotu pierakstīšanos."</string>
     <string name="set_as_default" msgid="4415328591568654603">"Iestatīt kā noklusējumu"</string>
+    <string name="settings" msgid="6536394145760913145">"Iestatījumi"</string>
     <string name="use_once" msgid="9027366575315399714">"Izmantot vienreiz"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Paroļu skaits: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Piekļuves atslēgu skaits: <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> paroles"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Aizvērt"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Nerādīt"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vai izmantot saglabāto piekļuves atslēgu lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Vai izmantot saglabāto pierakstīšanās informāciju lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Saglabātas pierakstīšanās informācijas izvēle lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vai izmantot jūsu saglabāto paroli lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vai izmantot jūsu pierakstīšanās informāciju lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vai vēlaties atbloķēt lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> pierakstīšanās opcijas?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Saglabātas piekļuves atslēgas izvēle lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Saglabātas paroles izvēle lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Saglabātas pierakstīšanās informācijas izvēle lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Pierakstīšanās informācijas izvēle lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vai izvēlēties opciju lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vai izmantot šo informāciju lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Pierakstīties citā veidā"</string>
diff --git a/packages/CredentialManager/res/values-mk/strings.xml b/packages/CredentialManager/res/values-mk/strings.xml
index 0f40d49..0755c9c 100644
--- a/packages/CredentialManager/res/values-mk/strings.xml
+++ b/packages/CredentialManager/res/values-mk/strings.xml
@@ -1,13 +1,29 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Управник на акредитиви"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Откажи"</string>
     <string name="string_continue" msgid="1346732695941131882">"Продолжи"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Повеќе опции"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Зачувајте поинаку"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Дознајте повеќе"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Прикажи ја лозинката"</string>
-    <string name="content_description_hide_password" msgid="6841375971631767996">"Сокриј ја лозинката"</string>
+    <string name="content_description_hide_password" msgid="6841375971631767996">"Скриј ја лозинката"</string>
     <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Побезбедно со криптографски клучеви"</string>
     <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Со криптографските клучеви нема потреба да создавате или да помните сложени лозинки"</string>
     <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Криптографските клучеви се шифрирани дигитални клучеви што ги создавате со вашиот отпечаток, лик или заклучување екран"</string>
@@ -33,14 +49,17 @@
     <string name="sign_ins" msgid="4710739369149469208">"најавувања"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"податоци за најавување"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Зачувајте <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> во"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Да се создаде криптографски клуч во друг уред?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Да се создаде криптографски клуч на друг уред?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Да се зачува лозинката на друг уред?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Да се зачува најавувањето на друг уред?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Да се користи <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> за сите ваши најавувања?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Овој управник со лозинки за <xliff:g id="USERNAME">%1$s</xliff:g> ќе ги складира вашите лозинки и криптографски клучеви за да ви помогне лесно да се најавите"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Постави како стандардна опција"</string>
+    <string name="settings" msgid="6536394145760913145">"Поставки"</string>
     <string name="use_once" msgid="9027366575315399714">"Употребете еднаш"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Лозинки: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Криптографски клучеви: <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> лозинки"</string>
-    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> криптографски клучеви"</string>
+    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"Криптографски клучеви: <xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g>"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"Акредитиви: <xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g>"</string>
     <string name="passkey_before_subtitle" msgid="2448119456208647444">"Криптографски клуч"</string>
     <string name="another_device" msgid="5147276802037801217">"Друг уред"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Затвори"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Отфрли"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Да се користи вашиот зачуван криптографски клуч за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Да се користи вашето зачувано најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Изберете зачувано најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Да се користат зачуваните лозинки за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Да се користи вашето најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Да се отклучат опциите за најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Изберете зачуван криптографски клуч за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Изберете зачувана лозинка за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Изберете зачувано најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Изберете најавување за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Избери опција за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Да се користат овие информации на <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Најавете се на друг начин"</string>
diff --git a/packages/CredentialManager/res/values-ml/strings.xml b/packages/CredentialManager/res/values-ml/strings.xml
index d5e33ab..07fea38 100644
--- a/packages/CredentialManager/res/values-ml/strings.xml
+++ b/packages/CredentialManager/res/values-ml/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"ക്രെഡൻഷ്യൽ മാനേജർ"</string>
     <string name="string_cancel" msgid="6369133483981306063">"റദ്ദാക്കുക"</string>
     <string name="string_continue" msgid="1346732695941131882">"തുടരുക"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"കൂടുതൽ ഓപ്‌ഷനുകൾ"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"മറ്റ് രീതിയിൽ സംരക്ഷിക്കൂ"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"കൂടുതലറിയുക"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"പാസ്‌വേഡ് കാണിക്കുക"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"പാസ്‌വേഡ് മറയ്ക്കുക"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"സൈൻ ഇന്നുകൾ"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"സൈൻ ഇൻ വിവരങ്ങൾ"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> ഇനിപ്പറയുന്നതിലേക്ക് സംരക്ഷിക്കുക"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"മറ്റൊരു ഉപകരണത്തിൽ പാസ്‌കീ സൃഷ്ടിക്കണോ?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"മറ്റൊരു ഉപകരണത്തിൽ പാസ്‌കീ സൃഷ്ടിക്കണോ?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"മറ്റൊരു ഉപകരണത്തിൽ പാസ്‌വേഡ് സംരക്ഷിക്കണോ?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"മറ്റൊരു ഉപകരണത്തിൽ സൈൻ ഇൻ ക്രെഡൻഷ്യൽ സംരക്ഷിക്കണോ?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"നിങ്ങളുടെ എല്ലാ സൈൻ ഇന്നുകൾക്കും <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> ഉപയോഗിക്കണോ?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"എളുപ്പത്തിൽ സൈൻ ഇൻ ചെയ്യാൻ സഹായിക്കുന്നതിന്, <xliff:g id="USERNAME">%1$s</xliff:g> എന്ന വിലാസത്തിന്റെ ഈ Password Manager നിങ്ങളുടെ പാസ്‌വേഡുകളും പാസ്‌കീകളും സംഭരിക്കും"</string>
     <string name="set_as_default" msgid="4415328591568654603">"ഡിഫോൾട്ടായി സജ്ജീകരിക്കുക"</string>
+    <string name="settings" msgid="6536394145760913145">"ക്രമീകരണം"</string>
     <string name="use_once" msgid="9027366575315399714">"ഒരു തവണ ഉപയോഗിക്കുക"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> പാസ്‌വേഡുകൾ • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> പാസ്‌കീകൾ"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> പാസ്‌വേഡുകൾ"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"അടയ്ക്കുക"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ഡിസ്‌മിസ് ചെയ്യുക"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി നിങ്ങൾ സംരക്ഷിച്ച പാസ്‌കീ ഉപയോഗിക്കണോ?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി നിങ്ങൾ സംരക്ഷിച്ച സൈൻ ഇൻ ഉപയോഗിക്കണോ?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി ഒരു സംരക്ഷിച്ച സൈൻ ഇൻ തിരഞ്ഞെടുക്കുക"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി നിങ്ങളുടെ സംരക്ഷിച്ച പാസ്‌വേഡ് ഉപയോഗിക്കണോ?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിനുള്ള നിങ്ങളുടെ സൈൻ ഇൻ ക്രെഡൻഷ്യലുകൾ ഉപയോഗിക്കണോ?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി സൈൻ ഇൻ ഓപ്‌ഷനുകൾ അൺലോക്ക് ചെയ്യണോ?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി ഒരു സംരക്ഷിച്ച പാസ്‌കീ തിരഞ്ഞെടുക്കുക"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി ഒരു സംരക്ഷിച്ച പാസ്‌വേഡ് തിരഞ്ഞെടുക്കുക"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിനായി ഒരു സംരക്ഷിച്ച സൈൻ ഇൻ തിരഞ്ഞെടുക്കുക"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിനുള്ള സൈൻ ഇൻ ക്രെഡൻഷ്യലുകൾ തിരഞ്ഞെടുക്കുക"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്ന ആപ്പിനായി ഒരു ഓപ്‌ഷൻ തിരഞ്ഞെടുക്കണോ?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> എന്നതിൽ ഈ വിവരങ്ങൾ ഉപയോഗിക്കണോ?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"മറ്റൊരു രീതിയിൽ സൈൻ ഇൻ ചെയ്യുക"</string>
diff --git a/packages/CredentialManager/res/values-mn/strings.xml b/packages/CredentialManager/res/values-mn/strings.xml
index 4491821..e37155a 100644
--- a/packages/CredentialManager/res/values-mn/strings.xml
+++ b/packages/CredentialManager/res/values-mn/strings.xml
@@ -1,26 +1,42 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Мандат үнэмлэхийн менежер"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Цуцлах"</string>
     <string name="string_continue" msgid="1346732695941131882">"Үргэлжлүүлэх"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Бусад сонголт"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Өөр аргаар хадгалах"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Нэмэлт мэдээлэл авах"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Нууц үгийг харуулах"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Нууц үгийг нуух"</string>
-    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Passkey-тэй байхад илүү аюулгүй"</string>
-    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Passkey-н тусламжтай та нарийн төвөгтэй нууц үг үүсгэх эсвэл санах шаардлагагүй"</string>
-    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Passkey нь таны хурууны хээ, царай эсвэл дэлгэцийн түгжээгээ ашиглан үүсгэсэн шифрлэгдсэн дижитал түлхүүр юм"</string>
+    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Нэвтрэх түлхүүртэй байхад илүү аюулгүй"</string>
+    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Нэвтрэх түлхүүрийн тусламжтай та нарийн төвөгтэй нууц үг үүсгэх эсвэл санах шаардлагагүй"</string>
+    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Нэвтрэх түлхүүр нь таны хурууны хээ, царай эсвэл дэлгэцийн түгжээгээ ашиглан үүсгэсэн шифрлэгдсэн дижитал түлхүүр юм"</string>
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"Тэдгээрийг нууц үгний менежерт хадгалдаг бөгөөд ингэснээр та бусад төхөөрөмжид нэвтрэх боломжтой"</string>
-    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Passkey-н талаарх дэлгэрэнгүй"</string>
+    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Нэвтрэх түлхүүрийн талаарх дэлгэрэнгүй"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Нууц үггүй технологи"</string>
-    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Passkey нь танд нууц үгэнд найдалгүйгээр нэвтрэх боломжийг олгодог. Та хувийн мэдээллээ баталгаажуулах болон passkey үүсгэхийн тулд ердөө хурууны хээ, царай танилт, ПИН эсвэл шудрах хээгээ ашиглах шаардлагатай."</string>
+    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Нэвтрэх түлхүүр нь танд нууц үгэнд найдалгүйгээр нэвтрэх боломжийг олгодог. Та хувийн мэдээллээ баталгаажуулах болон нэвтрэх түлхүүр үүсгэхийн тулд ердөө хурууны хээ, царай танилт, ПИН эсвэл шудрах хээгээ ашиглах шаардлагатай."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"Нийтийн түлхүүрийн криптограф"</string>
-    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Passkey нь FIDO Холбоо (Google, Apple, Microsoft ба бусад багтдаг) болон W3C стандартад тулгуурлан криптограф түлхүүрийн хослолыг ашигладаг. Хэрэглэгчийн нэр, бидний нууц үгэнд ашигладаг тэмдэгтийн мөрөөс ялгаатай хувийн-нийтийн түлхүүрийн хослолыг апп эсвэл вебсайтад үүсгэдэг. Хувийн түлхүүрийг таны төхөөрөмж эсвэл нууц үгний менежерт аюулгүй хадгалдаг бөгөөд үүнийг таны хувийн мэдээллийг баталгаажуулахад ашигладаг. Нийтийн түлхүүрийг апп эсвэл вебсайтын сервертэй хуваалцдаг. Харгалзах түлхүүрээр та даруй бүртгүүлэх, нэвтрэх боломжтой."</string>
+    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Нэвтрэх түлхүүр нь FIDO Холбоо (Google, Apple, Microsoft ба бусад багтдаг) болон W3C стандартад тулгуурлан криптограф түлхүүрийн хослолыг ашигладаг. Хэрэглэгчийн нэр, бидний нууц үгэнд ашигладаг тэмдэгтийн мөрөөс ялгаатай хувийн-нийтийн түлхүүрийн хослолыг апп эсвэл вебсайтад үүсгэдэг. Хувийн түлхүүрийг таны төхөөрөмж эсвэл нууц үгний менежерт аюулгүй хадгалдаг бөгөөд үүнийг таны хувийн мэдээллийг баталгаажуулахад ашигладаг. Нийтийн түлхүүрийг апп эсвэл вебсайтын сервертэй хуваалцдаг. Харгалзах түлхүүрээр та даруй бүртгүүлэх, нэвтрэх боломжтой."</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"Бүртгэлийн сайжруулсан аюулгүй байдал"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Түлхүүр тус бүрийг тэдгээрийг зориулж үүсгэсэн апп эсвэл вебсайттай нь тусгайлан холбодог бөгөөд ингэснээр та залилан мэхэлсэн апп эсвэл вебсайтад санамсаргүй байдлаар хэзээ ч нэвтрэхгүй. Түүнчлэн зөвхөн нийтийн түлхүүрийг хадгалж буй серверүүдийг хакердахад илүү хэцүү байдаг."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Саадгүй шилжилт"</string>
-    <string name="seamless_transition_detail" msgid="4475509237171739843">"Бид нууц үггүй ирээдүй рүү урагшлахын хэрээр нууц үг нь passkey-н хамтаар боломжтой хэвээр байх болно."</string>
+    <string name="seamless_transition_detail" msgid="4475509237171739843">"Бид нууц үггүй ирээдүй рүү урагшлахын хэрээр нууц үг нь нэвтрэх түлхүүрийн хамтаар боломжтой хэвээр байх болно."</string>
     <string name="choose_provider_title" msgid="8870795677024868108">"<xliff:g id="CREATETYPES">%1$s</xliff:g>-г хаана хадгалахаа сонгоно уу"</string>
     <string name="choose_provider_body" msgid="4967074531845147434">"Мэдээллээ хадгалж, дараагийн удаа илүү хурдан нэвтрэхийн тулд нууц үгний менежерийг сонгоно уу"</string>
     <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"<xliff:g id="APPNAME">%1$s</xliff:g>-д passkey үүсгэх үү?"</string>
@@ -28,19 +44,22 @@
     <string name="choose_create_option_sign_in_title" msgid="4124872317613421249">"<xliff:g id="APPNAME">%1$s</xliff:g>-н нэвтрэх мэдээллийг хадгалах уу?"</string>
     <string name="passkey" msgid="632353688396759522">"passkey"</string>
     <string name="password" msgid="6738570945182936667">"нууц үг"</string>
-    <string name="passkeys" msgid="5733880786866559847">"passkeys"</string>
+    <string name="passkeys" msgid="5733880786866559847">"нэвтрэх түлхүүрүүд"</string>
     <string name="passwords" msgid="5419394230391253816">"нууц үг"</string>
     <string name="sign_ins" msgid="4710739369149469208">"нэвтрэлт"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"нэвтрэх мэдээлэл"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>-г дараахад хадгалах"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Өөр төхөөрөмжид passkey үүсгэх үү?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Өөр төхөөрөмжид нэвтрэх түлхүүр үүсгэх үү?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Өөр төхөөрөмжид нууц үг хадгалах уу?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Өөр төхөөрөмжид нэвтрэлт хадгалах уу?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>-г бүх нэвтрэлтдээ ашиглах уу?"</string>
-    <string name="use_provider_for_all_description" msgid="1998772715863958997">"Танд хялбархан нэвтрэхэд туслахын тулд <xliff:g id="USERNAME">%1$s</xliff:g>-н энэ нууц үгний менежер таны нууц үг болон passkey-г хадгална"</string>
+    <string name="use_provider_for_all_description" msgid="1998772715863958997">"Танд хялбархан нэвтрэхэд туслахын тулд <xliff:g id="USERNAME">%1$s</xliff:g>-н энэ нууц үгний менежер таны нууц үг болон нэвтрэх түлхүүрийг хадгална"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Өгөгдмөлөөр тохируулах"</string>
+    <string name="settings" msgid="6536394145760913145">"Тохиргоо"</string>
     <string name="use_once" msgid="9027366575315399714">"Нэг удаа ашиглах"</string>
-    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> нууц үг • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> passkey"</string>
+    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> нууц үг • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> нэвтрэх түлхүүр"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> нууц үг"</string>
-    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> passkey"</string>
+    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> нэвтрэх түлхүүр"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"<xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g> мандат үнэмлэх"</string>
     <string name="passkey_before_subtitle" msgid="2448119456208647444">"Passkey"</string>
     <string name="another_device" msgid="5147276802037801217">"Өөр төхөөрөмж"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Хаах"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Хаах"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д өөрийн хадгалсан passkey-г ашиглах уу?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д хадгалсан нэвтрэх мэдээллээ ашиглах уу?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д зориулж хадгалсан нэвтрэх мэдээллийг сонгоно уу"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д хадгалсан нууц үгээ ашиглах уу?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g>-н нэвтрэлтээ ашиглах уу?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д нэвтрэлтийн сонголтын түгжээг тайлах уу?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д хадгалсан нэвтрэх түлхүүр сонгоно уу"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д хадгалсан нууц үг сонгоно уу"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д хадгалсан нэвтрэх мэдээллийг сонгоно уу"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>-н нэвтрэлтийг сонгоно уу"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>-д сонголт хийх үү?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Энэ мэдээллийг <xliff:g id="APP_NAME">%1$s</xliff:g>-д ашиглах уу?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Өөр аргаар нэвтрэх"</string>
diff --git a/packages/CredentialManager/res/values-mr/strings.xml b/packages/CredentialManager/res/values-mr/strings.xml
index 6f4f5de..ceba101 100644
--- a/packages/CredentialManager/res/values-mr/strings.xml
+++ b/packages/CredentialManager/res/values-mr/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"क्रेडेंशियल व्यवस्थापक"</string>
     <string name="string_cancel" msgid="6369133483981306063">"रद्द करा"</string>
     <string name="string_continue" msgid="1346732695941131882">"पुढे सुरू ठेवा"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"आणखी पर्याय"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"दुसऱ्या पद्धतीने सेव्ह करा"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"अधिक जाणून घ्या"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"पासवर्ड दाखवा"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"पासवर्ड लपवा"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"साइन-इन"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"साइन-इनसंबंधित माहिती"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> येथे सेव्ह करा"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"दुसऱ्या डिव्हाइसमध्ये पासकी तयार करायची का?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"दुसऱ्या डिव्हाइसवर पासकी तयार करायची आहे का?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"दुसऱ्या डिव्हाइसवर पासवर्ड सेव्ह करायचा आहे का?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"दुसऱ्या डिव्हाइसवर साइन-इन सेव्ह करायचे आहे का?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"तुमच्या सर्व साइन-इन साठी <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>वापरायचे का?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"तुम्हाला सहजरीत्या साइन इन करण्यात मदत करण्यासाठी हा <xliff:g id="USERNAME">%1$s</xliff:g> चा पासवर्ड व्यवस्थापक तुमचे पासवर्ड आणि पासकी स्टोअर करेल"</string>
     <string name="set_as_default" msgid="4415328591568654603">"डिफॉल्ट म्हणून सेट करा"</string>
+    <string name="settings" msgid="6536394145760913145">"सेटिंग्ज"</string>
     <string name="use_once" msgid="9027366575315399714">"एकदा वापरा"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> पासवर्ड • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> पासकी"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> पासवर्ड"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"बंद करा"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"डिसमिस करा"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी तुमची सेव्ह केलेली पासकी वापरायची का?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी तुमचे सेव्ह केलेले साइन-इन वापरायचे का?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी सेव्ह केलेले साइन-इन निवडा"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"तुमचा सेव्ह केलेला पासवर्ड <xliff:g id="APP_NAME">%1$s</xliff:g> साठी वापरायचा आहे का?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी तुमचे साइन-इन वापरायचे आहे का?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी साइन-इन पर्याय अनलॉक करायचे आहेत का?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी सेव्ह केलेली पासकी निवडा"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी सेव्ह केलेला पासवर्ड निवडा"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी सेव्ह केलेले साइन-इन निवडा"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी साइन-इन निवडा"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी पर्याय निवडा?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ही माहिती <xliff:g id="APP_NAME">%1$s</xliff:g> वर वापरायची का?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"दुसऱ्या मार्गाने साइन इन करा"</string>
diff --git a/packages/CredentialManager/res/values-ms/strings.xml b/packages/CredentialManager/res/values-ms/strings.xml
index 79390ba..b933f3e 100644
--- a/packages/CredentialManager/res/values-ms/strings.xml
+++ b/packages/CredentialManager/res/values-ms/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Pengurus Bukti Kelayakan"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Batal"</string>
     <string name="string_continue" msgid="1346732695941131882">"Teruskan"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Lagi pilihan"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Simpan cara lain"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Ketahui lebih lanjut"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Tunjukkan kata laluan"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Sembunyikan kata laluan"</string>
@@ -20,7 +36,7 @@
     <string name="improved_account_security_title" msgid="1069841917893513424">"Keselamatan akaun yang dipertingkatkan"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Setiap kunci dipautkan secara eksklusif dengan apl atau laman web kunci dicipta, jadi anda tidak boleh log masuk ke apl atau laman web penipuan secara tidak sengaja. Selain itu, dengan pelayan yang hanya menyimpan kunci awam, penggodaman menjadi jauh lebih sukar."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Peralihan yang lancar"</string>
-    <string name="seamless_transition_detail" msgid="4475509237171739843">"Semasa kita bergerak menuju ke arah masa depan tanpa kata laluan, kata laluan masih akan tersedia bersama dengan kunci laluan."</string>
+    <string name="seamless_transition_detail" msgid="4475509237171739843">"Meskipun masa depan kita nanti tidak memerlukan kata laluan, kata laluan masih akan tersedia bersama dengan kunci laluan."</string>
     <string name="choose_provider_title" msgid="8870795677024868108">"Pilih tempat untuk menyimpan <xliff:g id="CREATETYPES">%1$s</xliff:g> anda"</string>
     <string name="choose_provider_body" msgid="4967074531845147434">"Pilih Password Manager untuk menyimpan maklumat anda dan log masuk lebih pantas pada kali seterusnya"</string>
     <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"Cipta kunci laluan untuk <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
@@ -33,14 +49,17 @@
     <string name="sign_ins" msgid="4710739369149469208">"log masuk"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"maklumat log masuk"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Simpan <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> pada"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Cipta kunci laluan dalam peranti lain?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Buat kunci laluan pada peranti lain?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Simpan kata laluan pada peranti lain?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Simpan log masuk pada peranti lain?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Gunakan <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> untuk semua log masuk anda?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Password Manager untuk <xliff:g id="USERNAME">%1$s</xliff:g> akan menyimpan kata laluan dan kunci laluan anda untuk membantu anda log masuk dengan mudah"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Tetapkan sebagai lalai"</string>
+    <string name="settings" msgid="6536394145760913145">"Tetapan"</string>
     <string name="use_once" msgid="9027366575315399714">"Gunakan sekali"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> kata laluan • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> kunci laluan"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"Kata laluan <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
-    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"Kunci laluan <xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g>"</string>
+    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> kunci laluan"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"<xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g> bukti kelayakan"</string>
     <string name="passkey_before_subtitle" msgid="2448119456208647444">"Kunci laluan"</string>
     <string name="another_device" msgid="5147276802037801217">"Peranti lain"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Tutup"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Ketepikan"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gunakan kunci laluan anda yang telah disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Gunakan maklumat log masuk anda yang telah disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Pilih log masuk yang telah disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Gunakan kata laluan anda yang disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Gunakan log masuk anda untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Buka kunci pilihan log masuk untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Pilih kunci laluan yang disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Pilih kata laluan yang disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Pilih log masuk yang disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Pilih log masuk untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pilih satu pilihan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gunakan maklumat ini pada <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Log masuk menggunakan cara lain"</string>
diff --git a/packages/CredentialManager/res/values-my/strings.xml b/packages/CredentialManager/res/values-my/strings.xml
index 321b7e9..c359ce1 100644
--- a/packages/CredentialManager/res/values-my/strings.xml
+++ b/packages/CredentialManager/res/values-my/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"အထောက်အထားမန်နေဂျာ"</string>
     <string name="string_cancel" msgid="6369133483981306063">"မလုပ်တော့"</string>
     <string name="string_continue" msgid="1346732695941131882">"ရှေ့ဆက်ရန်"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"နောက်ထပ်ရွေးစရာများ"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"အခြားနည်း သိမ်းရန်"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"ပိုမိုလေ့လာရန်"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"စကားဝှက်ကို ပြရန်"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"စကားဝှက်ကို ဖျောက်ရန်"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"လက်မှတ်ထိုးဝင်မှုများ"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"လက်မှတ်ထိုးဝင်သည့် အချက်အလက်"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> သိမ်းမည့်နေရာ"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"အခြားစက်ပစ္စည်းတွင် လျှို့ဝှက်ကီး ပြုလုပ်မလား။"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"စက်နောက်တစ်ခုတွင် လျှို့ဝှက်ကီးလုပ်မလား။"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"စက်နောက်တစ်ခုတွင် စကားဝှက်ကို သိမ်းမလား။"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"စက်နောက်တစ်ခုတွင် လက်မှတ်ထိုးဝင်ရန် အထောက်အထားကို သိမ်းမလား။"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"သင်၏လက်မှတ်ထိုးဝင်မှု အားလုံးအတွက် <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> သုံးမလား။"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"သင်အလွယ်တကူ လက်မှတ်ထိုးဝင်နိုင်ရန် <xliff:g id="USERNAME">%1$s</xliff:g> အတွက် ဤစကားဝှက်မန်နေဂျာက စကားဝှက်နှင့် လျှို့ဝှက်ကီးများကို သိမ်းမည်"</string>
     <string name="set_as_default" msgid="4415328591568654603">"မူရင်းအဖြစ် သတ်မှတ်ရန်"</string>
+    <string name="settings" msgid="6536394145760913145">"ဆက်တင်များ"</string>
     <string name="use_once" msgid="9027366575315399714">"တစ်ကြိမ်သုံးရန်"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"စကားဝှက် <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> ခု • လျှို့ဝှက်ကီး <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> ခု"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"စကားဝှက် <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> ခု"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"ပိတ်ရန်"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ပယ်ရန်"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"သိမ်းထားသောလျှို့ဝှက်ကီးကို <xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သုံးမလား။"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သိမ်းထားသောလက်မှတ်ထိုးဝင်မှု သုံးမလား။"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သိမ်းထားသော လက်မှတ်ထိုးဝင်မှုကို ရွေးပါ"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သိမ်းထားသောစကားဝှက် သုံးမလား။"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သင့်လက်မှတ်ထိုးဝင်မှုကို သုံးမလား။"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် လက်မှတ်ထိုးဝင်မှု ရွေးစရာကို ဖွင့်မလား။"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သိမ်းထားသော လျှို့ဝှက်ကီး ရွေးပါ"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သိမ်းထားသော စကားဝှက် ရွေးပါ"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် သိမ်းထားသော လက်မှတ်ထိုးဝင်မှုကို ရွေးပါ"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် လက်မှတ်ထိုးဝင်မှု ရွေးခြင်း"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် တစ်ခုကိုရွေးမလား။"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> တွင် ဤအချက်အလက်ကို သုံးမလား။"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"နောက်တစ်နည်းဖြင့် လက်မှတ်ထိုးဝင်ရန်"</string>
diff --git a/packages/CredentialManager/res/values-nb/strings.xml b/packages/CredentialManager/res/values-nb/strings.xml
index 4d558d8..33b0b3ae 100644
--- a/packages/CredentialManager/res/values-nb/strings.xml
+++ b/packages/CredentialManager/res/values-nb/strings.xml
@@ -1,26 +1,42 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Legitimasjonslagring"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Avbryt"</string>
     <string name="string_continue" msgid="1346732695941131882">"Fortsett"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Flere alternativer"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Lagre annerledes"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Finn ut mer"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Vis passordet"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Skjul passordet"</string>
-    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Tryggere med tilgangsnøkler"</string>
-    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Med tilgangsnøkler trenger du ikke å lage eller huske kompliserte passord"</string>
-    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Tilgangsnøkler er krypterte digitale nøkler du oppretter med fingeravtrykket, ansiktet eller skjermlåsen"</string>
+    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Tryggere med passnøkler"</string>
+    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Med passnøkler trenger du ikke å lage eller huske kompliserte passord"</string>
+    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Passnøkler er krypterte digitale nøkler du oppretter med fingeravtrykket, ansiktet eller skjermlåsen"</string>
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"De lagres i et verktøy for passordlagring, slik at du kan logge på andre enheter"</string>
-    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Mer om tilgangsnøkler"</string>
+    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Mer om passnøkler"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Passordfri teknologi"</string>
-    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Med tilgangsnøkler kan du logge på uten å bruke passord. Du trenger bare å bruke et fingeravtrykk, ansiktsgjenkjenning, en PIN-kode eller et sveipemønster for å bekrefte hvem du er, og lage en tilgangsnøkkel."</string>
+    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Med passnøkler kan du logge på uten å bruke passord. Du trenger bare å bruke et fingeravtrykk, ansiktsgjenkjenning, en PIN-kode eller et sveipemønster for å bekrefte hvem du er, og lage en passnøkkel."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"Kryptografi for offentlige nøkler"</string>
-    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Tilgangsnøkler er basert på FIDO Alliance (med bl.a. Google, Apple og Microsoft) og W3C-standardene og bruker kryptografiske nøkkelpar. I stedet for brukernavn og strenger med tegn som brukes som passord, opprettes det et privat-offentlig nøkkelpar per app eller nettsted. Den private nøkkelen lagres trygt på enheten eller i passordlagringen og bekrefter hvem du er. Den offentlige nøkkelen deles med app- eller nettstedstjeneren. Med korresponderende nøkler kan du raskt registrere deg og logge på."</string>
+    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Passnøkler er basert på FIDO Alliance (med bl.a. Google, Apple og Microsoft) og W3C-standardene og bruker kryptografiske nøkkelpar. I stedet for brukernavn og strenger med tegn som brukes som passord, opprettes det et privat-offentlig nøkkelpar per app eller nettsted. Den private nøkkelen lagres trygt på enheten eller i passordlagringen og bekrefter hvem du er. Den offentlige nøkkelen deles med app- eller nettstedstjeneren. Med korresponderende nøkler kan du raskt registrere deg og logge på."</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"Forbedret kontosikkerhet"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Hver nøkkel er eksklusivt tilknyttet appen eller nettstedet den er laget for. Dermed kan du aldri logge på falske apper eller nettsteder ved et uhell. Og siden tjenerne bare har offentlige nøkler, blir det mye vanskeligere å hacke deg."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Sømløs overgang"</string>
-    <string name="seamless_transition_detail" msgid="4475509237171739843">"Vi går mot en fremtid uten passord, men passord fortsetter å være tilgjengelige ved siden av tilgangsnøkler."</string>
+    <string name="seamless_transition_detail" msgid="4475509237171739843">"Vi går mot en fremtid uten passord, men passord fortsetter å være tilgjengelige ved siden av passnøkler."</string>
     <string name="choose_provider_title" msgid="8870795677024868108">"Velg hvor du vil lagre <xliff:g id="CREATETYPES">%1$s</xliff:g>"</string>
     <string name="choose_provider_body" msgid="4967074531845147434">"Velg et verktøy for passordlagring for å lagre informasjonen din og logge på raskere neste gang"</string>
     <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"Vil du opprette en tilgangsnøkkel for <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
@@ -28,19 +44,22 @@
     <string name="choose_create_option_sign_in_title" msgid="4124872317613421249">"Vil du lagre påloggingsinformasjon for <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
     <string name="passkey" msgid="632353688396759522">"tilgangsnøkkel"</string>
     <string name="password" msgid="6738570945182936667">"passord"</string>
-    <string name="passkeys" msgid="5733880786866559847">"tilgangsnøkler"</string>
+    <string name="passkeys" msgid="5733880786866559847">"passnøkler"</string>
     <string name="passwords" msgid="5419394230391253816">"passord"</string>
     <string name="sign_ins" msgid="4710739369149469208">"pålogginger"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"påloggingsinformasjon"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Lagre <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> i"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Vil du opprette en tilgangsnøkkel på en annen enhet?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Vil du opprette passnøkkelen på en annen enhet?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Vil du lagre passordet på en annen enhet?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Vil du lagre pålogging på en annen enhet?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Vil du bruke <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> for alle pålogginger?"</string>
-    <string name="use_provider_for_all_description" msgid="1998772715863958997">"Dette verktøyet for passordlagring for <xliff:g id="USERNAME">%1$s</xliff:g> lagrer passord og tilgangsnøkler, så det blir lett å logge på"</string>
+    <string name="use_provider_for_all_description" msgid="1998772715863958997">"Dette verktøyet for passordlagring for <xliff:g id="USERNAME">%1$s</xliff:g> lagrer passord og passnøkler, så det blir lett å logge på"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Angi som standard"</string>
+    <string name="settings" msgid="6536394145760913145">"Innstillinger"</string>
     <string name="use_once" msgid="9027366575315399714">"Bruk én gang"</string>
-    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> passord • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> tilgangsnøkler"</string>
+    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> passord • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> passnøkler"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> passord"</string>
-    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> tilgangsnøkler"</string>
+    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> passnøkler"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"<xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g>-legitimasjon"</string>
     <string name="passkey_before_subtitle" msgid="2448119456208647444">"Tilgangsnøkkel"</string>
     <string name="another_device" msgid="5147276802037801217">"En annen enhet"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Lukk"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Lukk"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vil du bruke den lagrede tilgangsnøkkelen for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Vil du bruke den lagrede påloggingen for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Velg en lagret pålogging for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vil du bruke det lagrede passordet ditt for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vil du bruke påloggingen for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vil du låse opp påloggingsalternativene for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Velg en lagret passnøkkel for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Velg et lagret passord for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Velg en lagret pålogging for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Velg pålogging for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vil du velge et alternativ for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vil du bruke denne informasjonen i <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Bruk en annen påloggingsmetode"</string>
diff --git a/packages/CredentialManager/res/values-ne/strings.xml b/packages/CredentialManager/res/values-ne/strings.xml
index 3213e5d..042ed62 100644
--- a/packages/CredentialManager/res/values-ne/strings.xml
+++ b/packages/CredentialManager/res/values-ne/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"क्रिडेन्सियल म्यानेजर"</string>
     <string name="string_cancel" msgid="6369133483981306063">"रद्द गर्नुहोस्"</string>
     <string name="string_continue" msgid="1346732695941131882">"जारी राख्नुहोस्"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"थप विकल्पहरू"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"अर्को तरिकाले सेभ गर्नुहोस्"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"थप जान्नुहोस्"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"पासवर्ड देखाइयोस्"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"पासवर्ड लुकाइयोस्"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"साइन इनसम्बन्धी जानकारी"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"साइन इन गर्न प्रयोग गरिने जानकारी"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> यहाँ सेभ गर्नुहोस्:"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"अर्को डिभाइसमा पासकी बनाउने हो?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"अर्को डिभाइसमा पासकी बनाउने हो?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"अर्को डिभाइसमा पासवर्ड सेभ गर्ने हो?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"साइन इन गर्न प्रयोग गरिने युजरनेम र पासवर्ड अर्को डिभाइसमा सेभ गर्ने हो?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"तपाईंले साइन इन गर्ने सबै डिभाइसहरूमा <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> प्रयोग गर्ने हो?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"तपाईं सजिलैसँग साइन इन गर्न सक्नुहोस् भन्नाका लागि <xliff:g id="USERNAME">%1$s</xliff:g> को यो पासवर्ड म्यानेजरले तपाईंका पासवर्ड र पासकीहरू सेभ गर्छ"</string>
     <string name="set_as_default" msgid="4415328591568654603">"डिफल्ट जानकारीका रूपमा सेट गर्नुहोस्"</string>
+    <string name="settings" msgid="6536394145760913145">"सेटिङ"</string>
     <string name="use_once" msgid="9027366575315399714">"एक पटक प्रयोग गर्नुहोस्"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> वटा पासवर्ड • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> वटा पासकी"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> वटा पासवर्ड"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"बन्द गर्नुहोस्"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"हटाउनुहोस्"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"आफूले सेभ गरेको पासकी प्रयोग गरी <xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्ने हो?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"आफूले सेभ गरेको साइन इनसम्बन्धी जानकारी प्रयोग गरी <xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्ने हो?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्नका लागि सेभ गरिएका साइन इनसम्बन्धी जानकारी छनौट गर्नुहोस्"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्न सेभ गरिएको पासवर्ड प्रयोग गर्ने हो?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्नका लागि तपाईंका क्रिडेन्सियलहरू प्रयोग गर्ने हो?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> का साइन इनसम्बन्धी विकल्पहरू अनलक गर्ने हो?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्न सेभ गरिएको पासकी छनौट गर्नुहोस्"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्न सेभ गरिएको पासवर्ड छनौट गर्नुहोस्"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्न सेभ गरिएका क्रिडेन्सियल छनौट गर्नुहोस्"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन इन गर्न प्रयोग गरिने क्रिडेन्सियलहरू छनौट गर्नुहोस्"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन गर्न प्रयोग गरिने क्रिडेन्सियल छनौट गर्ने हो?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा साइन गर्न गर्नका निम्ति यो जानकारी प्रयोग गर्ने हो?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"अर्कै विधि प्रयोग गरी साइन इन गर्नुहोस्"</string>
diff --git a/packages/CredentialManager/res/values-nl/strings.xml b/packages/CredentialManager/res/values-nl/strings.xml
index d0963d7..68f95a7 100644
--- a/packages/CredentialManager/res/values-nl/strings.xml
+++ b/packages/CredentialManager/res/values-nl/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Credential Manager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Annuleren"</string>
     <string name="string_continue" msgid="1346732695941131882">"Doorgaan"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Meer opties"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Op een andere manier opslaan"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Meer informatie"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Wachtwoord tonen"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Wachtwoord verbergen"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"inloggegevens"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"inloggegevens"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> opslaan in"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Toegangssleutel maken op een ander apparaat?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Toegangssleutel maken op een ander apparaat?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Wachtwoord opslaan op een ander apparaat?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Login opslaan op een ander apparaat?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> elke keer gebruiken als je inlogt?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Deze wachtwoordmanager voor <xliff:g id="USERNAME">%1$s</xliff:g> slaat je wachtwoorden en toegangssleutels op zodat je makkelijk kunt inloggen"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Instellen als standaard"</string>
+    <string name="settings" msgid="6536394145760913145">"Instellingen"</string>
     <string name="use_once" msgid="9027366575315399714">"Eén keer gebruiken"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> wachtwoorden • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> toegangssleutels"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> wachtwoorden"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Sluiten"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Sluiten"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Je opgeslagen toegangssleutel gebruiken voor <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Je opgeslagen inloggegevens voor <xliff:g id="APP_NAME">%1$s</xliff:g> gebruiken?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Opgeslagen inloggegevens kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Je opgeslagen wachtwoord voor <xliff:g id="APP_NAME">%1$s</xliff:g> gebruiken?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Je login voor <xliff:g id="APP_NAME">%1$s</xliff:g> gebruiken?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Inlogopties voor <xliff:g id="APP_NAME">%1$s</xliff:g> ontgrendelen?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Opgeslagen toegangssleutel kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Opgeslagen wachtwoord kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Opgeslagen login kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Kies een login voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Een optie kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Deze informatie gebruiken in <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Op een andere manier inloggen"</string>
diff --git a/packages/CredentialManager/res/values-or/strings.xml b/packages/CredentialManager/res/values-or/strings.xml
index cdd229f..150ef0b 100644
--- a/packages/CredentialManager/res/values-or/strings.xml
+++ b/packages/CredentialManager/res/values-or/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"କ୍ରେଡେନସିଆଲ ମେନେଜର"</string>
     <string name="string_cancel" msgid="6369133483981306063">"ବାତିଲ କରନ୍ତୁ"</string>
     <string name="string_continue" msgid="1346732695941131882">"ଜାରି ରଖନ୍ତୁ"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"ଅଧିକ ବିକଳ୍ପ"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"ଅନ୍ୟ ଉପାୟରେ ସେଭ କର"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"ଅଧିକ ଜାଣନ୍ତୁ"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"ପାସୱାର୍ଡ ଦେଖାନ୍ତୁ"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"ପାସୱାର୍ଡ ଲୁଚାନ୍ତୁ"</string>
@@ -20,7 +36,7 @@
     <string name="improved_account_security_title" msgid="1069841917893513424">"ଉନ୍ନତ ଆକାଉଣ୍ଟ ସୁରକ୍ଷା"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"ପ୍ରତ୍ୟେକ କୀ\'କୁ ସେହି ଆପ କିମ୍ବା ୱେବସାଇଟ ସହ ଏକ୍ସକ୍ଲୁସିଭ ଭାବେ ଲିଙ୍କ କରାଯାଏ ଯେଉଁଥିପାଇଁ ଏହାକୁ ତିଆରି କରାଯାଇଛି, ଫଳରେ ଆପଣ ଭୁଲବଶତଃ କୌଣସି ପ୍ରତାରଣାମୂଳକ ଆପ କିମ୍ବା ୱେବସାଇଟରେ କେବେ ବି ସାଇନ ଇନ କରିପାରିବେ ନାହିଁ। ଏହା ସହ, କେବଳ ସର୍ଭରଗୁଡ଼ିକ ସାର୍ବଜନୀନ କୀ ରଖୁଥିବା ଯୋଗୁଁ ଏହାକୁ ହେକ କରିବା ବହୁତ କଷ୍ଟକର।"</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"ବାଧାରହିତ ଟ୍ରାଞ୍ଜିସନ"</string>
-    <string name="seamless_transition_detail" msgid="4475509237171739843">"ଆମେ ଏକ ପାସୱାର୍ଡ ବିହୀନ ଭବିଷ୍ୟତ ଆଡ଼କୁ ମୁଭ କରୁଥିବା ଯୋଗୁଁ ଏବେ ବି ପାସକୀଗୁଡ଼ିକ ସହିତ ପାସୱାର୍ଡ ଉପଲବ୍ଧ ହେବ।"</string>
+    <string name="seamless_transition_detail" msgid="4475509237171739843">"ଆମେ ଏକ ପାସୱାର୍ଡବିହୀନ ଭବିଷ୍ୟତ ଆଡ଼କୁ ମୁଭ କରୁଥିବା ଯୋଗୁଁ ଏବେ ବି ପାସକୀଗୁଡ଼ିକ ସହିତ ପାସୱାର୍ଡ ଉପଲବ୍ଧ ହେବ।"</string>
     <string name="choose_provider_title" msgid="8870795677024868108">"ଆପଣଙ୍କ <xliff:g id="CREATETYPES">%1$s</xliff:g> କେଉଁଠାରେ ସେଭ କରିବେ ତାହା ବାଛନ୍ତୁ"</string>
     <string name="choose_provider_body" msgid="4967074531845147434">"ଆପଣଙ୍କ ସୂଚନା ସେଭ କରି ପରବର୍ତ୍ତୀ ସମୟରେ ଶୀଘ୍ର ସାଇନ ଇନ କରିବା ପାଇଁ ଏକ Password Manager ଚୟନ କରନ୍ତୁ"</string>
     <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"<xliff:g id="APPNAME">%1$s</xliff:g> ପାଇଁ ପାସକୀ ତିଆରି କରିବେ?"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"ସାଇନ-ଇନ"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"ସାଇନ-ଇନ ସୂଚନା"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>କୁ ଏଥିରେ ସେଭ କରନ୍ତୁ"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"ଅନ୍ୟ ଏକ ଡିଭାଇସରେ ପାସକୀ ତିଆରି କରିବେ?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"ଅନ୍ୟ ଏକ ଡିଭାଇସରେ ପାସକୀ ତିଆରି କରିବେ?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"ଅନ୍ୟ ଏକ ଡିଭାଇସରେ ପାସୱାର୍ଡ ସେଭ କରିବେ?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"ଅନ୍ୟ ଏକ ଡିଭାଇସରେ ସାଇନ-ଇନ ସେଭ କରିବେ?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"ଆପଣଙ୍କ ସମସ୍ତ ସାଇନ-ଇନ ପାଇଁ <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> ବ୍ୟବହାର କରିବେ?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"ସହଜରେ ସାଇନ ଇନ କରିବାରେ ଆପଣଙ୍କୁ ସାହାଯ୍ୟ କରିବାକୁ <xliff:g id="USERNAME">%1$s</xliff:g>ଙ୍କ ପାଇଁ ଏହି Password Manager ଆପଣଙ୍କ ପାସୱାର୍ଡ ଏବଂ ପାସକୀଗୁଡ଼ିକୁ ଷ୍ଟୋର କରିବ"</string>
     <string name="set_as_default" msgid="4415328591568654603">"ଡିଫଲ୍ଟ ଭାବେ ସେଟ କରନ୍ତୁ"</string>
+    <string name="settings" msgid="6536394145760913145">"ସେଟିଂସ"</string>
     <string name="use_once" msgid="9027366575315399714">"ଥରେ ବ୍ୟବହାର କରନ୍ତୁ"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>ଟି ପାସୱାର୍ଡ • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>ଟି ପାସକୀ"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>ଟି ପାସୱାର୍ଡ"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"ବନ୍ଦ କରନ୍ତୁ"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ଖାରଜ କରନ୍ତୁ"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସେଭ କରାଯାଇଥିବା ଆପଣଙ୍କ ପାସକୀ ବ୍ୟବହାର କରିବେ?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସେଭ କରାଯାଇଥିବା ଆପଣଙ୍କ ସାଇନ-ଇନ ବ୍ୟବହାର କରିବେ?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସେଭ କରାଯାଇଥିବା ଏକ ସାଇନ-ଇନ ବାଛନ୍ତୁ"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଆପଣଙ୍କ ସେଭ କରାଯାଇଥିବା ପାସୱାର୍ଡକୁ ବ୍ୟବହାର କରିବେ?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଆପଣଙ୍କ ସାଇନ-ଇନ ବ୍ୟବହାର କରିବେ?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସାଇନ-ଇନ ବିକଳ୍ପଗୁଡ଼ିକୁ ଅନଲକ କରିବେ?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସେଭ କରାଯାଇଥିବା ଏକ ପାସକୀ ବାଛନ୍ତୁ"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସେଭ କରାଯାଇଥିବା ଏକ ପାସୱାର୍ଡ ବାଛନ୍ତୁ"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ସେଭ କରାଯାଇଥିବା ଏକ ସାଇନ-ଇନ ବାଛନ୍ତୁ"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଏକ ସାଇନ-ଇନ ବାଛନ୍ତୁ"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଏକ ବିକଳ୍ପ ବାଛିବେ?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>ରେ ଏହି ସୂଚନାକୁ ବ୍ୟବହାର କରିବେ?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ଅନ୍ୟ ଏକ ଉପାୟରେ ସାଇନ ଇନ କରନ୍ତୁ"</string>
diff --git a/packages/CredentialManager/res/values-pa/strings.xml b/packages/CredentialManager/res/values-pa/strings.xml
index ed2c40c..10ff1ad 100644
--- a/packages/CredentialManager/res/values-pa/strings.xml
+++ b/packages/CredentialManager/res/values-pa/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਪ੍ਰਬੰਧਕ"</string>
     <string name="string_cancel" msgid="6369133483981306063">"ਰੱਦ ਕਰੋ"</string>
     <string name="string_continue" msgid="1346732695941131882">"ਜਾਰੀ ਰੱਖੋ"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"ਹੋਰ ਵਿਕਲਪ"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"ਹੋਰ ਤਰੀਕੇ ਰੱਖਿਅਤ ਕਰੋ"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"ਹੋਰ ਜਾਣੋ"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"ਪਾਸਵਰਡ ਦਿਖਾਓ"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"ਪਾਸਵਰਡ ਲੁਕਾਓ"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"ਸਾਈਨ-ਇਨਾਂ ਦੀ ਜਾਣਕਾਰੀ"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"ਸਾਈਨ-ਇਨ ਜਾਣਕਾਰੀ"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> ਨੂੰ ਇੱਥੇ ਰੱਖਿਅਤ ਕਰੋ"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"ਕੀ ਕਿਸੇ ਹੋਰ ਡੀਵਾਈਸ ਨਾਲ ਪਾਸਕੀ ਬਣਾਉਣੀ ਹੈ?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"ਕੀ ਕਿਸੇ ਹੋਰ ਡੀਵਾਈਸ \'ਤੇ ਪਾਸਕੀ ਬਣਾਉਣੀ ਹੈ?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"ਕੀ ਕਿਸੇ ਹੋਰ ਡੀਵਾਈਸ \'ਤੇ ਪਾਸਵਰਡ ਰੱਖਿਅਤ ਕਰਨਾ ਹੈ?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"ਕੀ ਕਿਸੇ ਹੋਰ ਡੀਵਾਈਸ \'ਤੇ ਸਾਈਨ-ਇਨ ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਰੱਖਿਅਤ ਕਰਨੇ ਹਨ?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"ਕੀ ਆਪਣੇ ਸਾਰੇ ਸਾਈਨ-ਇਨਾਂ ਲਈ<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਹੈ?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> ਦਾ ਇਹ Password Manager ਆਸਾਨੀ ਨਾਲ ਸਾਈਨ-ਇਨ ਕਰਨ ਵਿੱਚ ਤੁਹਾਡੀ ਮਦਦ ਕਰਨ ਲਈ ਤੁਹਾਡੇ ਪਾਸਵਰਡਾਂ ਅਤੇ ਪਾਸਕੀਆਂ ਨੂੰ ਸਟੋਰ ਕਰੇਗਾ"</string>
     <string name="set_as_default" msgid="4415328591568654603">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਵਜੋਂ ਸੈੱਟ ਕਰੋ"</string>
+    <string name="settings" msgid="6536394145760913145">"ਸੈਟਿੰਗਾਂ"</string>
     <string name="use_once" msgid="9027366575315399714">"ਇੱਕ ਵਾਰ ਵਰਤੋ"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> ਪਾਸਵਰਡ • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> ਪਾਸਕੀਆਂ"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> ਪਾਸਵਰਡ"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"ਬੰਦ ਕਰੋ"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ਖਾਰਜ ਕਰੋ"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਆਪਣੀ ਰੱਖਿਅਤ ਕੀਤੀ ਪਾਸਕੀ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਹੈ?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਆਪਣੀ ਰੱਖਿਅਤ ਕੀਤੀ ਸਾਈਨ-ਇਨ ਜਾਣਕਾਰੀ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਹੈ?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਰੱਖਿਅਤ ਕੀਤੀ ਸਾਈਨ-ਇਨ ਜਾਣਕਾਰੀ ਚੁਣੋ"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਤੁਹਾਡਾ ਰੱਖਿਅਤ ਕੀਤਾ ਪਾਸਵਰਡ ਵਰਤਣਾ ਹੈ?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਆਪਣਾ ਸਾਈਨ-ਇਨ ਕਰਨ ਦਾ ਵਿਕਲਪ ਵਰਤਣਾ ਹੈ?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਸਾਈਨ-ਇਨ ਵਿਕਲਪਾਂ ਨੂੰ ਅਣਲਾਕ ਕਰਨਾ ਹੈ?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਕੋਈ ਰੱਖਿਅਤ ਕੀਤੀ ਪਾਸਕੀ ਚੁਣੋ"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਕੋਈ ਰੱਖਿਅਤ ਕੀਤਾ ਪਾਸਵਰਡ ਚੁਣੋ"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਕੋਈ ਰੱਖਿਅਤ ਕੀਤੀ ਸਾਈਨ-ਇਨ ਜਾਣਕਾਰੀ ਚੁਣੋ"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਸਾਈਨ-ਇਨ ਕਰਨ ਦਾ ਵਿਕਲਪ ਚੁਣੋ"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਕਿਸੇ ਵਿਕਲਪ ਦੀ ਚੋਣ ਕਰਨੀ ਹੈ?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> \'ਤੇ ਇਸ ਜਾਣਕਾਰੀ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਹੈ?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ਕਿਸੇ ਹੋਰ ਤਰੀਕੇ ਨਾਲ ਸਾਈਨ-ਇਨ ਕਰੋ"</string>
diff --git a/packages/CredentialManager/res/values-pl/strings.xml b/packages/CredentialManager/res/values-pl/strings.xml
index 68c8500..be60af5 100644
--- a/packages/CredentialManager/res/values-pl/strings.xml
+++ b/packages/CredentialManager/res/values-pl/strings.xml
@@ -1,26 +1,42 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Menedżer danych logowania"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Anuluj"</string>
     <string name="string_continue" msgid="1346732695941131882">"Dalej"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Więcej opcji"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Zapisz inny sposób"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Więcej informacji"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Pokaż hasło"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Ukryj hasło"</string>
-    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Klucze zwiększają Twoje bezpieczeństwo"</string>
-    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Dzięki kluczom nie musisz tworzyć ani zapamiętywać skomplikowanych haseł"</string>
-    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Klucze są szyfrowanymi kluczami cyfrowymi, które tworzysz za pomocą blokady ekranu bądź funkcji rozpoznawania twarzy lub odcisku palca"</string>
+    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Klucze dostępu zwiększają Twoje bezpieczeństwo"</string>
+    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Dzięki kluczom dostępu nie musisz tworzyć ani zapamiętywać skomplikowanych haseł"</string>
+    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Klucze dostępu są szyfrowanymi kluczami cyfrowymi, które tworzysz za pomocą blokady ekranu bądź funkcji rozpoznawania twarzy lub odcisku palca"</string>
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"Klucze są zapisane w menedżerze haseł, dzięki czemu możesz logować się na innych urządzeniach"</string>
-    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Więcej informacji o kluczach"</string>
+    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Więcej informacji o kluczach dostępu"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Technologia niewymagająca haseł"</string>
-    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Klucze umożliwiają logowanie się bez konieczności stosowania haseł. Wystarczy użyć odcisku palca, rozpoznawania twarzy, kodu PIN lub wzoru, aby potwierdzić tożsamość i utworzyć klucz."</string>
+    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Klucze dostępu umożliwiają logowanie się bez konieczności stosowania haseł. Wystarczy użyć odcisku palca, rozpoznawania twarzy, kodu PIN lub wzoru, aby potwierdzić tożsamość i utworzyć klucz dostępu."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"Kryptografia klucza publicznego"</string>
-    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Zgodnie z zasadami FIDO Alliance (stowarzyszenia zrzeszającego m.in. Google, Apple i Microsoft) oraz standardami W3C klucze opierają się na kluczach kryptograficznych. W odróżnieniu od nazw użytkownika i ciągów znaków stanowiących hasła pary kluczy prywatnych i publicznych są tworzone dla konkretnych aplikacji i stron. Klucz prywatny jest bezpiecznie przechowywany na urządzeniu lub w menedżerze haseł i potwierdza Twoją tożsamość. Klucz publiczny jest udostępniany serwerowi aplikacji lub strony. Mając odpowiednie klucze, od razu się zarejestrujesz i zalogujesz."</string>
+    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Zgodnie z zasadami FIDO Alliance (stowarzyszenia zrzeszającego m.in. Google, Apple i Microsoft) oraz standardami W3C klucze dostępu opierają się na kluczach kryptograficznych. W odróżnieniu od nazw użytkownika i ciągów znaków stanowiących hasła pary kluczy prywatnych i publicznych są tworzone dla konkretnych aplikacji i stron. Klucz prywatny jest bezpiecznie przechowywany na urządzeniu lub w menedżerze haseł i potwierdza Twoją tożsamość. Klucz publiczny jest udostępniany serwerowi aplikacji lub strony. Mając odpowiednie klucze, od razu się zarejestrujesz i zalogujesz."</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"Zwiększone bezpieczeństwo konta"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Każdy klucz jest połączony wyłącznie z aplikacją lub stroną, dla której został utworzony, więc nie zalogujesz się przypadkowo w fałszywej aplikacji ani na fałszywej stronie. Ponadto na serwerach są przechowywane wyłącznie klucze publiczne, co znacznie utrudnia hakowanie."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Płynne przechodzenie"</string>
-    <string name="seamless_transition_detail" msgid="4475509237171739843">"W czasie przechodzenia na technologie niewymagające haseł możliwość stosowania haseł – niezależnie od kluczy – wciąż będzie dostępna."</string>
+    <string name="seamless_transition_detail" msgid="4475509237171739843">"W czasie przechodzenia na technologie niewymagające haseł możliwość stosowania haseł – niezależnie od kluczy dostępu – wciąż będzie dostępna."</string>
     <string name="choose_provider_title" msgid="8870795677024868108">"Wybierz, gdzie zapisywać <xliff:g id="CREATETYPES">%1$s</xliff:g>"</string>
     <string name="choose_provider_body" msgid="4967074531845147434">"Wybierz menedżera haseł, aby zapisywać informacje i logować się szybciej"</string>
     <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"Utworzyć klucz dla aplikacji <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
@@ -28,19 +44,22 @@
     <string name="choose_create_option_sign_in_title" msgid="4124872317613421249">"Zapisać dane logowania do aplikacji <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
     <string name="passkey" msgid="632353688396759522">"klucz"</string>
     <string name="password" msgid="6738570945182936667">"hasło"</string>
-    <string name="passkeys" msgid="5733880786866559847">"klucze"</string>
+    <string name="passkeys" msgid="5733880786866559847">"klucze dostępu"</string>
     <string name="passwords" msgid="5419394230391253816">"hasła"</string>
     <string name="sign_ins" msgid="4710739369149469208">"dane logowania"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"dane logowania"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Zapisać <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> w:"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Utworzyć klucz na innym urządzeniu?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Utworzyć klucz dostępu na innym urządzeniu?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Zapisać hasło na innym urządzeniu?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Zapisać sposób logowania się na innym urządzeniu?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Używać usługi <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> w przypadku wszystkich danych logowania?"</string>
-    <string name="use_provider_for_all_description" msgid="1998772715863958997">"Menedżer haseł na koncie <xliff:g id="USERNAME">%1$s</xliff:g> będzie zapisywał Twoje hasła i klucze, aby ułatwić Ci logowanie"</string>
+    <string name="use_provider_for_all_description" msgid="1998772715863958997">"Menedżer haseł na koncie <xliff:g id="USERNAME">%1$s</xliff:g> będzie zapisywał Twoje hasła i klucze dostępu, aby ułatwić Ci logowanie"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Ustaw jako domyślną"</string>
+    <string name="settings" msgid="6536394145760913145">"Ustawienia"</string>
     <string name="use_once" msgid="9027366575315399714">"Użyj raz"</string>
-    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Hasła: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Klucze: <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
+    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Hasła: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Klucze dostępu: <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"Hasła: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
-    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"Klucze: <xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g>"</string>
+    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"Klucze dostępu: <xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g>"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"Dane logowania: <xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g>"</string>
     <string name="passkey_before_subtitle" msgid="2448119456208647444">"Klucz"</string>
     <string name="another_device" msgid="5147276802037801217">"Inne urządzenie"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Zamknij"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Zamknij"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Użyć zapisanego klucza dla aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Użyć zapisanych danych logowania dla aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Wybierz zapisane dane logowania dla aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Użyć zapisanego hasła do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Użyć tych danych logowania do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Odblokować opcje logowania do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Wybierz zapisany klucz dostępu do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Wybierz zapisane hasło do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Wybierz zapisane dane logowania do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Wybierz dane logowania do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Wybrać opcję dla aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Użyć tych informacji w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Zaloguj się w inny sposób"</string>
diff --git a/packages/CredentialManager/res/values-pt-rBR/strings.xml b/packages/CredentialManager/res/values-pt-rBR/strings.xml
index 67955fe..93459e6 100644
--- a/packages/CredentialManager/res/values-pt-rBR/strings.xml
+++ b/packages/CredentialManager/res/values-pt-rBR/strings.xml
@@ -1,16 +1,32 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Gerenciador de credenciais"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Cancelar"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continuar"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Mais opções"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Salvar de outra forma"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Saiba mais"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Mostrar senha"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Ocultar senha"</string>
     <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Mais segurança com as chaves de acesso"</string>
     <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Com as chaves de acesso, você não precisa criar nem se lembrar de senhas complexas"</string>
-    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"As chaves de acesso são chaves digitais criptografadas que você cria usando a impressão digital, o rosto ou o bloqueio de tela"</string>
+    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"As chaves de acesso são chaves digitais criptografadas que você cria usando a impressão digital, o rosto ou o bloqueio de tela."</string>
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"Elas são salvas em um gerenciador de senhas para que você possa fazer login em outros dispositivos"</string>
     <string name="more_about_passkeys_title" msgid="7797903098728837795">"Saiba mais sobre chaves de acesso"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Tecnologia sem senha"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"logins"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"informações de login"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Salvar <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> em"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Criar chave de acesso em outro dispositivo?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Criar chave de acesso em outro dispositivo?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Salvar senha em outro dispositivo?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Salvar credenciais de login em outro dispositivo?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Usar <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> para todos os seus logins?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Esse gerenciador vai armazenar as senhas e chaves de acesso para facilitar o processo de login de <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Definir como padrão"</string>
+    <string name="settings" msgid="6536394145760913145">"Configurações"</string>
     <string name="use_once" msgid="9027366575315399714">"Usar uma vez"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> senhas • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> chaves de acesso"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> senhas"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Fechar"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dispensar"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Usar sua chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Usar suas informações de login salvas para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Escolher um login salvo para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Usar a senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Usar seu login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Desbloquear opções de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Escolha uma chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Escolha uma senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Escolha uma credencial de login salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Escolha uma opção de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Escolher uma opção para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Usar estas informações no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Fazer login de outra forma"</string>
diff --git a/packages/CredentialManager/res/values-pt-rPT/strings.xml b/packages/CredentialManager/res/values-pt-rPT/strings.xml
index 163134c..27b84aa 100644
--- a/packages/CredentialManager/res/values-pt-rPT/strings.xml
+++ b/packages/CredentialManager/res/values-pt-rPT/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Credential Manager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Cancelar"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continuar"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Mais opções"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Guardar outra forma"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Saber mais"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Mostrar palavra-passe"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Ocultar palavra-passe"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"inícios de sessão"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"informações de início de sessão"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Guardar <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> em:"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Criar token de acesso noutro dispositivo?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Criar uma chave de acesso noutro dispositivo?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Guardar a palavra-passe noutro dispositivo?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Guardar o início de sessão noutro dispositivo?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Usar <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> para todos os seus inícios de sessão?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Este gestor de palavras-passe de <xliff:g id="USERNAME">%1$s</xliff:g> armazena as suas palavras-passe e chaves de acesso para ajudar a iniciar sessão facilmente"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Definir como predefinição"</string>
+    <string name="settings" msgid="6536394145760913145">"Definições"</string>
     <string name="use_once" msgid="9027366575315399714">"Usar uma vez"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> palavras-passe • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> chaves de acesso"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> palavras-passe"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Fechar"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Ignorar"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Usar a sua chave de acesso guardada na app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Usar o seu início de sessão guardado na app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Escolha um início de sessão guardado para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Usar a sua palavra-passe guardada para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Usar o seu início de sessão para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Desbloquear as opções de início de sessão para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Escolha uma chave de acesso guardada para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Escolha uma palavra-passe guardada para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Escolha um início de sessão guardado para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Escolha um início de sessão para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Escolher uma opção para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Usar estas informações na app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Iniciar sessão de outra forma"</string>
diff --git a/packages/CredentialManager/res/values-pt/strings.xml b/packages/CredentialManager/res/values-pt/strings.xml
index 67955fe..93459e6 100644
--- a/packages/CredentialManager/res/values-pt/strings.xml
+++ b/packages/CredentialManager/res/values-pt/strings.xml
@@ -1,16 +1,32 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Gerenciador de credenciais"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Cancelar"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continuar"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Mais opções"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Salvar de outra forma"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Saiba mais"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Mostrar senha"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Ocultar senha"</string>
     <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Mais segurança com as chaves de acesso"</string>
     <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Com as chaves de acesso, você não precisa criar nem se lembrar de senhas complexas"</string>
-    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"As chaves de acesso são chaves digitais criptografadas que você cria usando a impressão digital, o rosto ou o bloqueio de tela"</string>
+    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"As chaves de acesso são chaves digitais criptografadas que você cria usando a impressão digital, o rosto ou o bloqueio de tela."</string>
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"Elas são salvas em um gerenciador de senhas para que você possa fazer login em outros dispositivos"</string>
     <string name="more_about_passkeys_title" msgid="7797903098728837795">"Saiba mais sobre chaves de acesso"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Tecnologia sem senha"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"logins"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"informações de login"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Salvar <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> em"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Criar chave de acesso em outro dispositivo?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Criar chave de acesso em outro dispositivo?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Salvar senha em outro dispositivo?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Salvar credenciais de login em outro dispositivo?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Usar <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> para todos os seus logins?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Esse gerenciador vai armazenar as senhas e chaves de acesso para facilitar o processo de login de <xliff:g id="USERNAME">%1$s</xliff:g>"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Definir como padrão"</string>
+    <string name="settings" msgid="6536394145760913145">"Configurações"</string>
     <string name="use_once" msgid="9027366575315399714">"Usar uma vez"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> senhas • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> chaves de acesso"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> senhas"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Fechar"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dispensar"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Usar sua chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Usar suas informações de login salvas para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Escolher um login salvo para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Usar a senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Usar seu login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Desbloquear opções de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Escolha uma chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Escolha uma senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Escolha uma credencial de login salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Escolha uma opção de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Escolher uma opção para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Usar estas informações no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Fazer login de outra forma"</string>
diff --git a/packages/CredentialManager/res/values-ro/strings.xml b/packages/CredentialManager/res/values-ro/strings.xml
index d9aa106..5292eca 100644
--- a/packages/CredentialManager/res/values-ro/strings.xml
+++ b/packages/CredentialManager/res/values-ro/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Manager de date de conectare"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Anulează"</string>
     <string name="string_continue" msgid="1346732695941131882">"Continuă"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Mai multe opțiuni"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Salvează altfel"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Află mai multe"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Afișează parola"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Ascunde parola"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"date de conectare"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"informațiile de conectare"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Salvează <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> în"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Creezi cheia de acces pe alt dispozitiv?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Creezi o cheie de acces pe alt dispozitiv?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Salvezi parola pe alt dispozitiv?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Salvezi datele de conectare pe alt dispozitiv?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Folosești <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> pentru toate conectările?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Managerul de parole pentru <xliff:g id="USERNAME">%1$s</xliff:g> îți va stoca parolele și cheile de acces, pentru a te ajuta să te conectezi cu ușurință"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Setează ca prestabilite"</string>
+    <string name="settings" msgid="6536394145760913145">"Setări"</string>
     <string name="use_once" msgid="9027366575315399714">"Folosește o dată"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> parole • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> chei de acces"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> parole"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Închide"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Închide"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Folosești cheia de acces salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Folosești datele de conectare salvate pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Alege o conectare salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Folosești parola salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Folosești datele de conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Deblochezi opțiunile de conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Alege o cheie de acces salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Alege o parolă salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Alege o conectare salvată pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Alege un set de date conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Alegi o opțiune pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Folosești aceste informații în <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Conectează-te altfel"</string>
diff --git a/packages/CredentialManager/res/values-ru/strings.xml b/packages/CredentialManager/res/values-ru/strings.xml
index 008cecf..99d2d7cc 100644
--- a/packages/CredentialManager/res/values-ru/strings.xml
+++ b/packages/CredentialManager/res/values-ru/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Менеджер учетных данных"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Отмена"</string>
     <string name="string_continue" msgid="1346732695941131882">"Продолжить"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Другие варианты"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Сохранить"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Подробнее"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Показать пароль"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Скрыть пароль"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"входы"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"учетные данные"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Где сохранить <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Создать ключ доступа на другом устройстве?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Создать ключ доступа на другом устройстве?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Сохранить пароль на другом устройстве?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Сохранить учетные данные на другом устройстве?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Всегда входить с помощью приложения \"<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>\"?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"В этом менеджере паролей пользователь <xliff:g id="USERNAME">%1$s</xliff:g> сможет сохранять пароли и ключи доступа для быстрого входа."</string>
     <string name="set_as_default" msgid="4415328591568654603">"Использовать по умолчанию"</string>
+    <string name="settings" msgid="6536394145760913145">"Настройки"</string>
     <string name="use_once" msgid="9027366575315399714">"Использовать один раз"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Пароли (<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>) и ключи доступа (<xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>)"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"Пароли (<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>)"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Закрыть"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Закрыть"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Использовать сохраненный ключ доступа для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Использовать сохраненные учетные данные для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Выберите сохраненные данные для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Использовать сохраненный пароль для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Войти в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" с этими данными?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Разблокировать варианты входа для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Выберите сохраненный ключ доступа для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Выберите сохраненный пароль для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Выберите сохраненные учетные данные для приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Как вы хотите войти в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Выберите данные для входа в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Использовать эту информацию для входа в приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Войти другим способом"</string>
diff --git a/packages/CredentialManager/res/values-si/strings.xml b/packages/CredentialManager/res/values-si/strings.xml
index 203d0f6..79eaa13 100644
--- a/packages/CredentialManager/res/values-si/strings.xml
+++ b/packages/CredentialManager/res/values-si/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"අක්තපත්‍ර කළමනාකරු"</string>
     <string name="string_cancel" msgid="6369133483981306063">"අවලංගු කරන්න"</string>
     <string name="string_continue" msgid="1346732695941131882">"ඉදිරියට යන්න"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"තවත් විකල්ප"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"වෙන මාර්ගයක සුරකින්න"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"තව දැන ගන්න"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"මුරපදය පෙන්වන්න"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"මුරපදය සඟවන්න"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"පුරනය වීම්"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"පුරනය වීමේ තතු"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"වෙත <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> සුරකින්න"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"වෙනත් උපාංගයක මුරයතුර තනන්න ද?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"වෙනත් උපාංගයක මුරයතුර තනන්න ද?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"වෙනත් උපාංගයක මුරපදය සුරකින්න ද?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"වෙනත් උපාංගයක පුරනය වීම සුරකින්න ද?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"ඔබේ සියලු පුරනය වීම් සඳහා <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> භාවිතා කරන්න ද?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> සඳහා මෙම මුරපද කළමනාකරු ඔබට පහසුවෙන් පුරනය වීමට උදවු කිරීම සඳහා ඔබේ මුරපද සහ මුරයතුරු ගබඩා කරනු ඇත"</string>
     <string name="set_as_default" msgid="4415328591568654603">"පෙරනිමි ලෙස සකසන්න"</string>
+    <string name="settings" msgid="6536394145760913145">"සැකසීම්"</string>
     <string name="use_once" msgid="9027366575315399714">"වරක් භාවිතා කරන්න"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"මුරපද <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>ක් • මුරයතුරු <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>ක්"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"මුරපද <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>ක්"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"වසන්න"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"අස් කරන්න"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා ඔබේ සුරැකි මුරයතුර භාවිතා කරන්න ද?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා ඔබේ සුරැකි පුරනය භාවිතා කරන්න ද?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා සුරැකි පුරනයක් තෝරා ගන්න"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා ඔබේ සුරැකි මුරපදය භාවිත කරන්න ද?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා ඔබේ පුරනය වීම භාවිතා කරන්න ද?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා පුරන විකල්ප අගුලු හරින්න ද?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා සුරකින ලද මුරයතුරක් තෝරන්න"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා සුරකින ලද මුරපදයක් තෝරන්න"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා සුරැකි පුරනයක් තෝරා ගන්න"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා පුරනය වීමක් තෝරා ගන්න"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා විකල්පයක් තෝරන්නද?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> මත මෙම තතු භාවිතා කරන්න ද?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"වෙනත් ආකාරයකින් පුරන්න"</string>
diff --git a/packages/CredentialManager/res/values-sk/strings.xml b/packages/CredentialManager/res/values-sk/strings.xml
index ef3b958..8168b51 100644
--- a/packages/CredentialManager/res/values-sk/strings.xml
+++ b/packages/CredentialManager/res/values-sk/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Správca prihlasovacích údajov"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Zrušiť"</string>
     <string name="string_continue" msgid="1346732695941131882">"Pokračovať"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Ďalšie možnosti"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Uložiť inak"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Ďalšie informácie"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Zobraziť heslo"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Skryť heslo"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"prihlasovacie údaje"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"prihlasovacie údaje"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Uložiť <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> do"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Chcete vytvoriť prístupový kľúč v inom zariadení?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Chcete vytvoriť prístupový kľúč v inom zariadení?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Chcete uložiť heslo v inom zariadení?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Chcete uložiť prihlasovacie údaje v inom zariadení?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Chcete pre všetky svoje prihlasovacie údaje použiť <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Tento správca hesiel poskytovateľa <xliff:g id="USERNAME">%1$s</xliff:g> uchová vaše heslá a prístupové kľúče, aby vám pomohol ľahšie sa prihlasovať"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Nastaviť ako predvolené"</string>
+    <string name="settings" msgid="6536394145760913145">"Nastavenia"</string>
     <string name="use_once" msgid="9027366575315399714">"Použiť raz"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Počet hesiel: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Počet prístupových kľúčov: <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"Počet hesiel: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Zavrieť"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Zavrieť"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Chcete pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> použiť uložený prístupový kľúč?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Chcete pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> použiť uložené prihlasovacie údaje?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Vyberte uložené prihlasovacie údaje pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Chcete použiť uložené heslo aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Chcete použiť svoje prihlásenie pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Chcete odomknúť možnosti prihlásenia pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Vyberte uložený prístupový kľúč pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Vyberte uložené heslo pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Vyberte uložené prihlasovacie údaje pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Vyberte prihlásenie pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Chcete pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> vybrať možnosť?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Chcete použiť tieto informácie v aplikácii <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prihlásiť sa inak"</string>
diff --git a/packages/CredentialManager/res/values-sl/strings.xml b/packages/CredentialManager/res/values-sl/strings.xml
index 8582dab..16ba222 100644
--- a/packages/CredentialManager/res/values-sl/strings.xml
+++ b/packages/CredentialManager/res/values-sl/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Upravitelj poverilnic"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Prekliči"</string>
     <string name="string_continue" msgid="1346732695941131882">"Naprej"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Več možnosti"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Shrani na drug način"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Več o tem"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Prikaz gesla"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Skrivanje gesla"</string>
@@ -28,15 +44,18 @@
     <string name="choose_create_option_sign_in_title" msgid="4124872317613421249">"Želite shraniti podatke za prijavo za aplikacijo <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
     <string name="passkey" msgid="632353688396759522">"ključ za dostop"</string>
     <string name="password" msgid="6738570945182936667">"geslo"</string>
-    <string name="passkeys" msgid="5733880786866559847">"ključev za dostop"</string>
+    <string name="passkeys" msgid="5733880786866559847">"ključi za dostop"</string>
     <string name="passwords" msgid="5419394230391253816">"gesel"</string>
     <string name="sign_ins" msgid="4710739369149469208">"prijave"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"podatkov za prijavo"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Mesto shranjevanja: <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Želite ustvariti ključ za dostop v drugi napravi?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Želite ustvariti ključ za dostop v drugi napravi?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Želite shraniti geslo v drugi napravi?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Želite shraniti prijavo v drugi napravi?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Želite za vse prijave uporabiti »<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>«?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"V tem upravitelju gesel za uporabnika <xliff:g id="USERNAME">%1$s</xliff:g> bodo shranjeni gesla in ključi za dostop, kar vam bo olajšalo prijavo."</string>
     <string name="set_as_default" msgid="4415328591568654603">"Nastavi kot privzeto"</string>
+    <string name="settings" msgid="6536394145760913145">"Nastavitve"</string>
     <string name="use_once" msgid="9027366575315399714">"Uporabi enkrat"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Št. gesel: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Št. ključev za dostop: <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"Št. gesel: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Zapri"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Opusti"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Želite uporabiti shranjeni ključ za dostop do aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Želite uporabiti shranjene podatke za prijavo v aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Izberite shranjene podatke za prijavo v aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Ali želite uporabiti shranjeno geslo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Želite uporabiti svojo prijavo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Želite odkleniti možnosti prijave za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Izberite shranjeni ključ za dostop za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Izberite shranjeno geslo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Izberite shranjene podatke za prijavo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Izberite prijavo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Izberite možnost za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Želite te podatke uporabiti v aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijava na drug način"</string>
diff --git a/packages/CredentialManager/res/values-sq/strings.xml b/packages/CredentialManager/res/values-sq/strings.xml
index a3e2c0d..40f8dc4 100644
--- a/packages/CredentialManager/res/values-sq/strings.xml
+++ b/packages/CredentialManager/res/values-sq/strings.xml
@@ -1,16 +1,32 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Menaxheri i kredencialeve"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Anulo"</string>
     <string name="string_continue" msgid="1346732695941131882">"Vazhdo"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Opsione të tjera"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Ruaje ndryshe"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Mëso më shumë"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Shfaq fjalëkalimin"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Fshih fjalëkalimin"</string>
     <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Më e sigurt me çelësat e kalimit"</string>
     <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Me çelësat e kalimit, nuk ka nevojë të krijosh ose të mbash mend fjalëkalime të ndërlikuara"</string>
-    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Çelësat e kalimit kanë çelësa dixhitalë të enkriptuar që ti i krijon duke përdorur gjurmën e gishtit, fytyrën ose kyçjen e ekranit"</string>
+    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Çelësat e kalimit janë çelësa dixhitalë të enkriptuar që ti i krijon duke përdorur gjurmën e gishtit, fytyrën ose kyçjen e ekranit"</string>
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"Ata ruhen te një menaxher fjalëkalimesh, në mënyrë që të mund të identifikohesh në pajisje të tjera"</string>
     <string name="more_about_passkeys_title" msgid="7797903098728837795">"Më shumë rreth çelësave të kalimit"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Teknologji pa fjalëkalime"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"identifikimet"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"informacionet e identifikimit"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Ruaj <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> te"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Të krijohet çelës kalimi në një pajisje tjetër?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Të krijohet çelësi i kalimit në një pajisje tjetër?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Të ruhet fjalëkalimi në një pajisje tjetër?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Të ruhet identifikimi në një pajisje tjetër?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Të përdoret <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> për të gjitha identifikimet?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Ky menaxher i fjalëkalimeve për <xliff:g id="USERNAME">%1$s</xliff:g> do të ruajë fjalëkalimet dhe çelësat e kalimit për të të ndihmuar të identifikohesh me lehtësi"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Cakto si parazgjedhje"</string>
+    <string name="settings" msgid="6536394145760913145">"Cilësimet"</string>
     <string name="use_once" msgid="9027366575315399714">"Përdor një herë"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> fjalëkalime • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> çelësa kalimi"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> fjalëkalime"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Mbyll"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Hiq"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Të përdoret fjalëkalimi yt i ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Të përdoret identifikimi yt i ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Zgjidh një identifikim të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Të përdoret fjalëkalimi i ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Të përdoret identifikimi yt për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Të shkyçen opsionet e identifikimit për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Zgjidh një çelës kalimi të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Zgjidh një fjalëkalim të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Zgjidh një identifikim të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Zgjidh një identifikim për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Të zgjidhet një opsion për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Të përdoren këto informacione në <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Identifikohu me një mënyrë tjetër"</string>
diff --git a/packages/CredentialManager/res/values-sr/strings.xml b/packages/CredentialManager/res/values-sr/strings.xml
index fabf1fd..f5a29a2 100644
--- a/packages/CredentialManager/res/values-sr/strings.xml
+++ b/packages/CredentialManager/res/values-sr/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Менаџер акредитива"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Откажи"</string>
     <string name="string_continue" msgid="1346732695941131882">"Настави"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Још опција"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Сачувај други начин"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Сазнајте више"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Прикажите лозинку"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Сакријте лозинку"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"пријављивања"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"подаци за пријављивање"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Сачувај <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> у"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Желите да направите приступни кôд на другом уређају?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Желите да направите приступни кôд на другом уређају?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Желите да сачувате лозинку на другом уређају?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Желите да сачувате акредитиве за пријаву на другом уређају?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Желите да за сва пријављивања користите: <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Овај менаџер лозинки за <xliff:g id="USERNAME">%1$s</xliff:g> ће чувати лозинке и приступне кодове да бисте се лако пријављивали"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Подеси као подразумевано"</string>
+    <string name="settings" msgid="6536394145760913145">"Подешавања"</string>
     <string name="use_once" msgid="9027366575315399714">"Користи једном"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Лозинки: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Приступних кодова:<xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"Лозинки: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Затворите"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Одбаци"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Желите да користите сачувани приступни кôд за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Желите да користите сачуване податке за пријављивање за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Одаберите сачувано пријављивање за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Желите да користите сачувану лозинку за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Желите ли да користите своје податке за пријављивање за апликацију <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Желите да откључате опције пријављивања за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Изаберите сачуван приступни кôд за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Изаберите сачувану лозинку за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Изаберите сачуване податке за пријављивање за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Одаберите податке за пријављивање за апликацију <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Желите да одаберете опцију за апликацију <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Желите да користите те податке у апликацији <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Пријавите се на други начин"</string>
diff --git a/packages/CredentialManager/res/values-sv/strings.xml b/packages/CredentialManager/res/values-sv/strings.xml
index 80c6014..65319b0 100644
--- a/packages/CredentialManager/res/values-sv/strings.xml
+++ b/packages/CredentialManager/res/values-sv/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Credential Manager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Avbryt"</string>
     <string name="string_continue" msgid="1346732695941131882">"Fortsätt"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Fler alternativ"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Spara på ett annat sätt"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Läs mer"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Visa lösenord"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Dölj lösenord"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"inloggningar"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"inloggningsuppgifter"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Spara <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> i"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Vill du skapa en nyckel på en annan enhet?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Vill du skapa en nyckel på en annan enhet?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Vill du spara lösenordet på en annan enhet?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Vill du spara inloggningen på en annan enhet?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Vill du använda <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> för alla dina inloggningar?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Den här lösenordshanteraren för <xliff:g id="USERNAME">%1$s</xliff:g> sparar dina lösenord och nycklar för att underlätta inloggning"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Ange som standard"</string>
+    <string name="settings" msgid="6536394145760913145">"Inställningar"</string>
     <string name="use_once" msgid="9027366575315399714">"Använd en gång"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> lösenord • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> nycklar"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> lösenord"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Stäng"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Stäng"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vill du använda din sparade nyckel för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Vill du använda dina sparade inloggningsuppgifter för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Välj en sparad inloggning för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vill du använda det sparade lösenordet för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vill du använda din inloggning för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vill du låsa upp inloggningsalternativ för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Välj en sparad nyckel för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Välj ett sparat lösenord för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Välj en sparad inloggning för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Välj en inloggning för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vill du välja ett alternativ för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vill du använda den här informationen på <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Logga in på ett annat sätt"</string>
diff --git a/packages/CredentialManager/res/values-sw/strings.xml b/packages/CredentialManager/res/values-sw/strings.xml
index 39f7ad9..ffb4fa0 100644
--- a/packages/CredentialManager/res/values-sw/strings.xml
+++ b/packages/CredentialManager/res/values-sw/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Kidhibiti cha Vitambulisho"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Ghairi"</string>
     <string name="string_continue" msgid="1346732695941131882">"Endelea"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Chaguo zaidi"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Hifadhi vingine"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Pata maelezo zaidi"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Onyesha nenosiri"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Ficha nenosiri"</string>
@@ -33,12 +49,15 @@
     <string name="sign_ins" msgid="4710739369149469208">"michakato ya kuingia katika akaunti"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"maelezo ya kuingia katika akaunti"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Hifadhi <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> kwenye"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Ungependa kuunda ufunguo wa siri kwenye kifaa kingine?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Ungependa kuunda ufunguo wa siri kwenye kifaa kingine?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Ungependa kuhifadhi nenosiri kwenye kifaa kingine?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Ungependa kuhifadhi kitambulisho cha kuingia katika akaunti kwenye kifaa kingine?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Ungependa kutumia <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> kwa ajili ya michakato yako yote ya kuingia katika akaunti?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Kidhibiti hiki cha manenosiri cha <xliff:g id="USERNAME">%1$s</xliff:g> kitahifadhi manenosiri na funguo zako za siri ili kukusaidia uingie katika akaunti kwa urahisi"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Weka iwe chaguomsingi"</string>
+    <string name="settings" msgid="6536394145760913145">"Mipangilio"</string>
     <string name="use_once" msgid="9027366575315399714">"Tumia mara moja"</string>
-    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Manenosiri <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • funguo <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> za siri"</string>
+    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Manenosiri <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Funguo <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> za siri"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"Manenosiri <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
     <string name="more_options_usage_passkeys" msgid="5390320437243042237">"Funguo <xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> za siri"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"Kitambulisho cha <xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g>"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Funga"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Ondoa"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Ungependa kutumia ufunguo wa siri uliohifadhiwa wa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Ungependa kutumia kitambulisho kilichohifadhiwa cha kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Chagua vitambulisho vilivyohifadhiwa kwa ajili ya kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Je, ungependa kutumia nenosiri lako lililohifadhiwa kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Ungependa kutumia kitambulisho chako cha kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Je, ungependa kuona chaguo za kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Chagua ufunguo wa siri uliohifadhiwa ambao ungependa kutumia kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Chagua nenosiri lililohifadhiwa ambalo ungependa kutumia kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Chagua vitambulisho vilivyohifadhiwa ambavyo ungependa kutumia kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Chagua kitambulisho cha kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Ungependa kuteua chaguo la <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Ungependa kutumia maelezo haya kwenye <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Ingia katika akaunti kwa kutumia njia nyingine"</string>
diff --git a/packages/CredentialManager/res/values-ta/strings.xml b/packages/CredentialManager/res/values-ta/strings.xml
index 02d2e08..750b67d 100644
--- a/packages/CredentialManager/res/values-ta/strings.xml
+++ b/packages/CredentialManager/res/values-ta/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"அனுமதிச் சான்று நிர்வாகி"</string>
     <string name="string_cancel" msgid="6369133483981306063">"ரத்துசெய்"</string>
     <string name="string_continue" msgid="1346732695941131882">"தொடர்க"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"கூடுதல் விருப்பங்கள்"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"வேறு வழியில் சேமி"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"மேலும் அறிக"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"கடவுச்சொல்லைக் காட்டும்"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"கடவுச்சொல்லை மறைக்கும்"</string>
@@ -33,14 +49,17 @@
     <string name="sign_ins" msgid="4710739369149469208">"உள்நுழைவுகள்"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"உள்நுழைவு விவரங்கள்"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> ஐ இதில் சேமியுங்கள்"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"வேறொரு சாதனத்தில் கடவுச்சாவியை உருவாக்க வேண்டுமா?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"வேறொரு சாதனத்தில் கடவுச்சாவியை உருவாக்கவா?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"வேறொரு சாதனத்தில் கடவுச்சொல்லைச் சேமிக்கவா?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"வேறொரு சாதனத்தில் உள்நுழைவைச் சேமிக்கவா?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"உங்கள் அனைத்து உள்நுழைவுகளுக்கும் <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>ஐப் பயன்படுத்தவா?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> என்ற மின்னஞ்சல் முகவரிக்கான இந்தக் கடவுச்சொல் நிர்வாகி உங்கள் கடவுச்சொற்களையும் கடவுச்சாவிகளையும் சேமித்து நீங்கள் எளிதாக உள்நுழைய உதவும்"</string>
     <string name="set_as_default" msgid="4415328591568654603">"இயல்பானதாக அமை"</string>
+    <string name="settings" msgid="6536394145760913145">"அமைப்புகள்"</string>
     <string name="use_once" msgid="9027366575315399714">"ஒருமுறை பயன்படுத்தவும்"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> கடவுச்சொற்கள் • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> கடவுச்சாவிகள்"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> கடவுச்சொற்கள்"</string>
-    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> கடவுக்குறியீடுகள்"</string>
+    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> கடவுச்சாவிகள்"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"<xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g> அனுமதிச் சான்றுகள்"</string>
     <string name="passkey_before_subtitle" msgid="2448119456208647444">"கடவுச்சாவி"</string>
     <string name="another_device" msgid="5147276802037801217">"மற்றொரு சாதனம்"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"மூடும்"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"நிராகரிக்கும்"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கு ஏற்கெனவே சேமிக்கப்பட்ட கடவுக்குறியீட்டைப் பயன்படுத்தவா?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கு ஏற்கெனவே சேமிக்கப்பட்ட உள்நுழைவுத் தகவலைப் பயன்படுத்தவா?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கு ஏற்கெனவே சேமிக்கப்பட்ட உள்நுழைவுத் தகவலைத் தேர்வுசெய்யவும்"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்குச் சேமித்த கடவுச்சொல்லைப் பயன்படுத்தவா?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கு உங்கள் உள்நுழைவு விவரங்களைப் பயன்படுத்தவா?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான உள்நுழைவு விருப்பங்களை அன்லாக் செய்யவா?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான சேமிக்கப்பட்ட கடவுச்சாவியைத் தேர்ந்தெடுங்கள்"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான சேமிக்கப்பட்ட கடவுச்சொல்லைத் தேர்ந்தெடுங்கள்"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான சேமிக்கப்பட்ட உள்நுழைவுத் தகவல்களைத் தேர்ந்தெடுங்கள்"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான உள்நுழைவு விவரங்களைத் தேர்வுசெய்யுங்கள்"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான விருப்பத்தைத் தேர்வுசெய்யவா?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸில் இந்தத் தகவல்களைப் பயன்படுத்தவா?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"வேறு முறையில் உள்நுழைக"</string>
diff --git a/packages/CredentialManager/res/values-te/strings.xml b/packages/CredentialManager/res/values-te/strings.xml
index 75dd429..064ee96 100644
--- a/packages/CredentialManager/res/values-te/strings.xml
+++ b/packages/CredentialManager/res/values-te/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"డాక్యుమెంట్ ప్రూఫ్ మేనేజర్"</string>
     <string name="string_cancel" msgid="6369133483981306063">"రద్దు చేయండి"</string>
     <string name="string_continue" msgid="1346732695941131882">"కొనసాగించండి"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"మరిన్ని ఆప్షన్‌లు"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"మరోలా సేవ్ చేయండి"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"మరింత తెలుసుకోండి"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"పాస్‌వర్డ్‌ను చూపండి"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"పాస్‌వర్డ్‌ను చూపవద్దు"</string>
@@ -16,7 +32,7 @@
     <string name="passwordless_technology_title" msgid="2497513482056606668">"పాస్‌వర్డ్ రహిత టెక్నాలజీ"</string>
     <string name="passwordless_technology_detail" msgid="6853928846532955882">"పాస్‌వర్డ్‌లపై ఆధారపడకుండా సైన్ ఇన్ చేయడానికి పాస్-కీలు మిమ్మల్ని అనుమతిస్తాయి. మీ గుర్తింపును వెరిఫై చేసి, పాస్-కీని క్రియేట్ చేయడానికి మీరు మీ వేలిముద్ర, ముఖ గుర్తింపు, PIN, లేదా స్వైప్ ఆకృతిని ఉపయోగించాలి."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"పబ్లిక్ కీ క్రిప్టోగ్రఫీ"</string>
-    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"FIDO Alliance (దీనిలో Google, Apple, Microsoft, మరిన్ని ఉన్నాయి), W3C ప్రమాణాల ప్రకారం, పాస్‌కీలు క్రిప్టోగ్రాఫిక్ కీల జతలను ఉపయోగిస్తాయి. మనం పాస్‌వర్డ్‌ల కోసం ఉపయోగించే యూజర్‌నేమ్, అక్షరాల స్ట్రింగ్ కాకుండా, యాప్ లేదా సైట్ కోసం ప్రైవేట్-పబ్లిక్ కీల జత క్రియేట్ చేయబడుతుంది. ప్రైవేట్ కీ మీ డివైజ్/పాస్‌వర్డ్ మేనేజర్‌లో సురక్షితంగా స్టోర్ చేయబడుతుంది, ఇది మీ గుర్తింపును నిర్ధారిస్తుంది. పబ్లిక్ కీ, యాప్/వెబ్‌సైట్ సర్వర్‌తో షేర్ చేయబడుతుంది. సంబంధిత కీలతో, తక్షణమే రిజిస్టర్ చేసుకొని, సైన్ ఇన్ చేయవచ్చు."</string>
+    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"FIDO Alliance (దీనిలో Google, Apple, Microsoft, మరిన్ని ఉన్నాయి), W3C ప్రమాణాల ప్రకారం, పాస్‌కీలు క్రిప్టోగ్రాఫిక్ కీల జతలను ఉపయోగిస్తాయి. మనం పాస్‌వర్డ్‌ల కోసం ఉపయోగించే యూజర్‌నేమ్, అక్షరాల స్ట్రింగ్ కాకుండా, యాప్/సైట్ కోసం ప్రైవేట్-పబ్లిక్ కీల జత క్రియేట్ చేయబడుతుంది. ప్రైవేట్ కీ మీ డివైజ్/పాస్‌వర్డ్ మేనేజర్‌లో సురక్షితంగా స్టోర్ చేయబడుతుంది, ఇది మీ గుర్తింపును నిర్ధారిస్తుంది. పబ్లిక్ కీ, యాప్/వెబ్‌సైట్ సర్వర్‌తో షేర్ చేయబడుతుంది. సంబంధిత కీలతో, తక్షణమే రిజిస్టర్ చేసుకొని, సైన్ ఇన్ చేయవచ్చు."</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"మెరుగైన ఖాతా సెక్యూరిటీ"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"ప్రతి కీ దానిని క్రియేట్ చేసిన యాప్ లేదా వెబ్‌సైట్‌తో ప్రత్యేకంగా లింక్ చేయబడి ఉంటుంది, కాబట్టి మీరు పొరపాటున కూడా మోసపూరిత యాప్ లేదా వెబ్‌సైట్‌కు సైన్ ఇన్ చేయలేరు. అంతే కాకుండా, సర్వర్‌లు పబ్లిక్ కీలను మాత్రమే స్టోర్ చేయడం వల్ల, హ్యాకింగ్ చేయడం చాలా కష్టం."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"అవాంతరాలు లేని పరివర్తన"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"సైన్‌ ఇన్‌లు"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"సైన్ ఇన్ సమాచారం"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>‌లో సేవ్ చేయండి"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"మరొక పరికరంలో పాస్‌కీని క్రియేట్ చేయాలా?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"మరొక పరికరంలో పాస్-కీని క్రియేట్ చేయాలా?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"మరొక పరికరంలో పాస్‌వర్డ్‌ను సేవ్ చేయాలా?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"మరో పరికరంలో సైన్-ఇన్‌ని సేవ్ చేయాలా?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"మీ అన్ని సైన్-ఇన్ వివరాల కోసం <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>ను ఉపయోగించాలా?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> కోసం ఈ పాస్‌వర్డ్ మేనేజర్ మీకు సులభంగా సైన్ ఇన్ చేయడంలో సహాయపడటానికి మీ పాస్‌వర్డ్‌లు, పాస్-కీలను స్టోర్ చేస్తుంది"</string>
     <string name="set_as_default" msgid="4415328591568654603">"ఆటోమేటిక్ సెట్టింగ్‌గా సెట్ చేయండి"</string>
+    <string name="settings" msgid="6536394145760913145">"సెట్టింగ్‌లు"</string>
     <string name="use_once" msgid="9027366575315399714">"ఒకసారి ఉపయోగించండి"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> పాస్‌వర్డ్‌లు • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> పాస్-కీలు"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> పాస్‌వర్డ్‌లు"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"మూసివేయండి"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"విస్మరించండి"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం మీ సేవ్ చేసిన పాస్-కీని ఉపయోగించాలా?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం మీరు సేవ్ చేసిన సైన్ ఇన్ వివరాలను ఉపయోగించాలా?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం సేవ్ చేసిన సైన్ ఇన్ వివరాలను ఎంచుకోండి"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం మీ సేవ్ చేసిన పాస్‌వర్డ్‌ను ఉపయోగించాలా?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం మీ సైన్ ఇన్ వివరాలను ఉపయోగించాలా?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం సైన్ ఇన్ ఆప్షన్‌లను అన్‌లాక్ చేయాలా?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం సేవ్ చేసిన పాస్-కీని ఎంచుకోండి"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం సేవ్ చేసిన పాస్‌వర్డ్‌ను ఎంచుకోండి"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం సేవ్ చేసిన సైన్ ఇన్ వివరాలను ఎంచుకోండి"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం సైన్ ఇన్ వివరాలను ఎంచుకోండి"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం ఏదైనా ఆప్షన్‌ను ఎంచుకోవాలనుకుంటున్నారా?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ఈ సమాచారాన్ని <xliff:g id="APP_NAME">%1$s</xliff:g>లో ఉపయోగించాలా?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"మరొక పద్ధతిలో సైన్ ఇన్ చేయండి"</string>
diff --git a/packages/CredentialManager/res/values-th/strings.xml b/packages/CredentialManager/res/values-th/strings.xml
index b9857ac..249bd88 100644
--- a/packages/CredentialManager/res/values-th/strings.xml
+++ b/packages/CredentialManager/res/values-th/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"เครื่องมือจัดการข้อมูลเข้าสู่ระบบ"</string>
     <string name="string_cancel" msgid="6369133483981306063">"ยกเลิก"</string>
     <string name="string_continue" msgid="1346732695941131882">"ต่อไป"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"ตัวเลือกเพิ่มเติม"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"บันทึกด้วยวิธีอื่น"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"ดูข้อมูลเพิ่มเติม"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"แสดงรหัสผ่าน"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"ซ่อนรหัสผ่าน"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"การลงชื่อเข้าใช้"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"ข้อมูลการลงชื่อเข้าใช้"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"บันทึก<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>ไปยัง"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"สร้างพาสคีย์ในอุปกรณ์อื่นไหม"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"สร้างพาสคีย์ในอุปกรณ์อื่นใช่ไหม"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"บันทึกรหัสผ่านในอุปกรณ์อื่นใช่ไหม"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"บันทึกการลงชื่อเข้าใช้ในอุปกรณ์อื่นใช่ไหม"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"ใช้ <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> สำหรับการลงชื่อเข้าใช้ทั้งหมดใช่ไหม"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"เครื่องมือจัดการรหัสผ่านสำหรับ <xliff:g id="USERNAME">%1$s</xliff:g> นี้จะจัดเก็บรหัสผ่านและพาสคีย์ไว้เพื่อช่วยให้คุณลงชื่อเข้าใช้ได้โดยง่าย"</string>
     <string name="set_as_default" msgid="4415328591568654603">"ตั้งเป็นค่าเริ่มต้น"</string>
+    <string name="settings" msgid="6536394145760913145">"การตั้งค่า"</string>
     <string name="use_once" msgid="9027366575315399714">"ใช้ครั้งเดียว"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"รหัสผ่าน <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> รายการ • พาสคีย์ <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> รายการ"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"รหัสผ่าน <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> รายการ"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"ปิด"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ปิด"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ใช้พาสคีย์ที่บันทึกไว้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ใช่ไหม"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"ใช้การลงชื่อเข้าใช้ที่บันทึกไว้สำหรับ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" ใช่ไหม"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"เลือกการลงชื่อเข้าใช้ที่บันทึกไว้สำหรับ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ใช้รหัสผ่านที่บันทึกไว้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ใช่ไหม"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ใช้การลงชื่อเข้าใช้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ใช่ไหม"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"ปลดล็อกตัวเลือกการลงชื่อเข้าใช้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ใช่ไหม"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"เลือกพาสคีย์ที่บันทึกไว้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"เลือกรหัสผ่านที่บันทึกไว้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"เลือกการลงชื่อเข้าใช้ที่บันทึกไว้สำหรับ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"เลือกการลงชื่อเข้าใช้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ต้องการเลือกตัวเลือกสำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ไหม"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ใช้ข้อมูลนี้กับ <xliff:g id="APP_NAME">%1$s</xliff:g> ไหม"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ลงชื่อเข้าใช้ด้วยวิธีอื่น"</string>
diff --git a/packages/CredentialManager/res/values-tl/strings.xml b/packages/CredentialManager/res/values-tl/strings.xml
index a69cc28..e33f1bf 100644
--- a/packages/CredentialManager/res/values-tl/strings.xml
+++ b/packages/CredentialManager/res/values-tl/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Manager ng Kredensyal"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Kanselahin"</string>
     <string name="string_continue" msgid="1346732695941131882">"Magpatuloy"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Higit pang opsyon"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"I-save sa ibang paraan"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Matuto pa"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Ipakita ang password"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Itago ang password"</string>
@@ -16,7 +32,7 @@
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Teknolohiyang hindi gumagamit ng password"</string>
     <string name="passwordless_technology_detail" msgid="6853928846532955882">"Sa pamamagitan ng mga passkey, makakapag-sign in ka nang hindi umaasa sa mga password. Kailangan mo lang gamitin ang iyong fingerprint, pagkilala ng mukha, PIN, o swipe pattern para i-verify ang pagkakakilanlan mo at gumawa ng passkey."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"Cryptography ng pampublikong key"</string>
-    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Batay sa FIDO Alliance (na kinabibilangan ng Google, Apple, Microsoft, atbp) at W3C standards, gumagamit ang passkeys ng cryptographic key pairs. Hindi tulad ng username at string ng characters na ginagamit sa password, para sa app o website ginagawa ang private-public key pair. Ligtas na naka-store sa device o password manager ang private key at kinukumpirma nito ang identity. Naka-share sa app o website server ang public key. Gamit ang key, instant kang makakapag-register at makakapag-sign in."</string>
+    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Batay sa FIDO Alliance (na kinabibilangan ng Google, Apple, Microsoft, atbp) at W3C standards, gumagamit ang mga passkey ng cryptographic key pairs. Hindi tulad ng username at string ng characters na ginagamit sa password, para sa app o website ginagawa ang private-public key pair. Ligtas na naka-store sa device o password manager ang private key at kinukumpirma nito ang identity. Naka-share sa app o website server ang public key. Gamit ang key, instant kang makakapag-register at makakapag-sign in."</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"Pinahusay na seguridad sa account"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Eksklusibong naka-link sa app o website kung para saan ginawa ang bawat key, kaya hindi ka makakapag-sign in sa isang mapanlokong app o website nang hindi sinasadya. Bukod pa rito, dahil mga pampublikong key lang ang itinatabi ng mga server, lubos na mas mahirap ang pag-hack."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Madaling transition"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"mga sign-in"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"impormasyon sa pag-sign in"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"I-save ang <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> sa"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Gumawa ng passkey sa ibang device?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Gumawa ng passkey sa ibang device?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"I-save ang password sa ibang device?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"I-save ang pag-sign in sa ibang device?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Gamitin ang <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> para sa lahat ng iyong pag-sign in?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Iso-store ng password manager na ito para sa <xliff:g id="USERNAME">%1$s</xliff:g> ang iyong mga password at passkey para madali kang makapag-sign in"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Itakda bilang default"</string>
+    <string name="settings" msgid="6536394145760913145">"Mga Setting"</string>
     <string name="use_once" msgid="9027366575315399714">"Gamitin nang isang beses"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> (na) password • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> (na) passkey"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> (na) password"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Isara"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"I-dismiss"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gamitin ang iyong naka-save na passkey para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Gamitin ang iyong naka-save na sign-in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Pumili ng naka-save na sign-in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Gamitin ang iyong naka-save na password para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Gamitin ang iyong sign-in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"I-unlock ang mga opsyon sa pag-sign in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Pumili ng naka-save na passkey para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Pumili ng naka-save na password para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Pumili ng naka-save na sign-in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Pumili ng sign-in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pumili ng opsyon para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gamitin ang impormasyong ito sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Mag-sign in sa ibang paraan"</string>
diff --git a/packages/CredentialManager/res/values-tr/strings.xml b/packages/CredentialManager/res/values-tr/strings.xml
index 082dc5e..30d1773 100644
--- a/packages/CredentialManager/res/values-tr/strings.xml
+++ b/packages/CredentialManager/res/values-tr/strings.xml
@@ -1,26 +1,42 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Kimlik Bilgisi Yöneticisi"</string>
     <string name="string_cancel" msgid="6369133483981306063">"İptal"</string>
     <string name="string_continue" msgid="1346732695941131882">"Devam"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Diğer seçenekler"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Başka şekilde kaydet"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Daha fazla bilgi"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Şifreyi göster"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Şifreyi gizle"</string>
-    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Şifre anahtarlarıyla daha yüksek güvenlik"</string>
-    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Şifre anahtarı kullandığınızda karmaşık şifreler oluşturmanız veya bunları hatırlamanız gerekmez"</string>
-    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Şifre anahtarları; parmak iziniz, yüzünüz veya ekran kilidinizi kullanarak oluşturduğunuz şifrelenmiş dijital anahtarlardır"</string>
+    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Geçiş anahtarlarıyla daha yüksek güvenlik"</string>
+    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Geçiş anahtarı kullandığınızda karmaşık şifreler oluşturmanız veya bunları hatırlamanız gerekmez"</string>
+    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Geçiş anahtarları; parmak iziniz, yüzünüz veya ekran kilidinizi kullanarak oluşturduğunuz şifrelenmiş dijital anahtarlardır"</string>
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"Diğer cihazlarda oturum açabilmeniz için şifre anahtarları bir şifre yöneticisine kaydedilir"</string>
-    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Şifre anahtarları hakkında daha fazla bilgi"</string>
+    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Geçiş anahtarları hakkında daha fazla bilgi"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Şifresiz teknoloji"</string>
-    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Şifre anahtarları, şifre kullanmadan oturum açmanıza olanak tanır. Kimliğinizi doğrulayıp şifre anahtarı oluşturmak için parmak iziniz, yüz tanıma özelliği, PIN veya kaydırma deseni kullanmanız yeterlidir."</string>
+    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Geçiş anahtarları, şifre kullanmadan oturum açmanıza olanak tanır. Kimliğinizi doğrulayıp geçiş anahtarı oluşturmak için parmak iziniz, yüz tanıma özelliği, PIN veya kaydırma deseni kullanmanız yeterlidir."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"Ortak anahtar kriptografisi"</string>
-    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Şifre anahtarları, FIDO Alliance (Google, Apple, Microsoft ve daha pek çok şirket yer alır) ve W3C standartları uyarınca şifreleme anahtarı çiftleri kullanır. Şifrelerde kullandığımız kullanıcı adı ve karakter dizisinden farklı olarak bir uygulama veya web sitesi için özel-ortak anahtar çifti oluşturulur. Özel anahtar, cihazınızda ya da şifre yöneticinizde güvenle saklanır ve kimliğinizi doğrular. Ortak anahtar, uygulama veya web sitesi sunucusuyla paylaşılır. İlgili anahtarları kullanarak anında kaydolabilir ve oturum açabilirsiniz."</string>
+    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Geçiş anahtarları, FIDO Alliance (Google, Apple, Microsoft ve daha pek çok şirket yer alır) ve W3C standartları uyarınca şifreleme anahtarı çiftleri kullanır. Şifrelerde kullandığımız kullanıcı adı ve karakter dizisinden farklı olarak bir uygulama veya web sitesi için özel-ortak anahtar çifti oluşturulur. Özel anahtar, cihazınızda ya da şifre yöneticinizde güvenle saklanır ve kimliğinizi doğrular. Ortak anahtar, uygulama veya web sitesi sunucusuyla paylaşılır. İlgili anahtarları kullanarak anında kaydolabilir ve oturum açabilirsiniz."</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"Daha iyi hesap güvenliği"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Her anahtar, oluşturulduğu uygulama veya web sitesiyle özel olarak bağlantılı olduğu için sahte bir uygulamaya veya web sitesine hiçbir zaman yanlışlıkla giriş yapamazsınız. Ayrıca, sunucularda yalnızca ortak anahtarlar saklandığı için saldırıya uğramak daha zordur."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Sorunsuz geçiş"</string>
-    <string name="seamless_transition_detail" msgid="4475509237171739843">"Şifresiz bir geleceğe doğru ilerlerken şifreler, şifre anahtarlarıyla birlikte kullanılmaya devam edecektir."</string>
+    <string name="seamless_transition_detail" msgid="4475509237171739843">"Şifresiz bir geleceğe doğru ilerlerken şifreler, geçiş anahtarlarıyla birlikte kullanılmaya devam edecektir."</string>
     <string name="choose_provider_title" msgid="8870795677024868108">"<xliff:g id="CREATETYPES">%1$s</xliff:g> kaydedileceği yeri seçin"</string>
     <string name="choose_provider_body" msgid="4967074531845147434">"Bilgilerinizi kaydedip bir dahaki sefere daha hızlı oturum açmak için bir şifre yöneticisi seçin"</string>
     <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"<xliff:g id="APPNAME">%1$s</xliff:g> için şifre anahtarı oluşturulsun mu?"</string>
@@ -28,19 +44,22 @@
     <string name="choose_create_option_sign_in_title" msgid="4124872317613421249">"<xliff:g id="APPNAME">%1$s</xliff:g> için oturum açma bilgileri kaydedilsin mi?"</string>
     <string name="passkey" msgid="632353688396759522">"Şifre anahtarı"</string>
     <string name="password" msgid="6738570945182936667">"Şifre"</string>
-    <string name="passkeys" msgid="5733880786866559847">"Şifre anahtarlarınızın"</string>
+    <string name="passkeys" msgid="5733880786866559847">"Geçiş anahtarlarınızın"</string>
     <string name="passwords" msgid="5419394230391253816">"şifreler"</string>
     <string name="sign_ins" msgid="4710739369149469208">"oturum aç"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"Oturum açma bilgileri"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> nereye kaydedilsin?"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Başka bir cihazda şifre anahtarı oluşturulsun mu?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Başka bir cihazda geçiş anahtarı oluşturulsun mu?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Şifre başka bir cihaza kaydedilsin mi?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Oturum açma bilgileri başka bir cihaza kaydedilsin mi?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Tüm oturum açma işlemlerinizde <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> kullanılsın mı?"</string>
-    <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> için bu şifre yöneticisi, şifrelerinizi ve şifre anahtarlarınızı saklayarak kolayca oturum açmanıza yardımcı olur"</string>
+    <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> için bu şifre yöneticisi, şifrelerinizi ve geçiş anahtarlarınızı saklayarak kolayca oturum açmanıza yardımcı olur"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Varsayılan olarak ayarla"</string>
+    <string name="settings" msgid="6536394145760913145">"Ayarlar"</string>
     <string name="use_once" msgid="9027366575315399714">"Bir kez kullanın"</string>
-    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> şifre • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> şifre anahtarı"</string>
+    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> şifre • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> geçiş anahtarı"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> şifre"</string>
-    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> şifre anahtarı"</string>
+    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> geçiş anahtarı"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"<xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g> kimlik bilgileri"</string>
     <string name="passkey_before_subtitle" msgid="2448119456208647444">"Şifre anahtarı"</string>
     <string name="another_device" msgid="5147276802037801217">"Başka bir cihaz"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Kapat"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Kapat"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı şifre anahtarınız kullanılsın mı?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı oturum açma bilgileriniz kullanılsın mı?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı oturum açma bilgilerini kullanın"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı şifreniz kullanılsın mı?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> için oturum açma bilgileriniz kullanılsın mı?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> için oturum açma seçeneklerine izin verilsin mi?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı bir geçiş anahtarı kullanın"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı bir şifre kullanın"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı oturum açma bilgilerini kullanın"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> için oturum açma bilgilerini seçin"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> için bir seçim yapmak ister misiniz?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Bu bilgiler <xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasında kullanılsın mı?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Başka bir yöntemle oturum aç"</string>
diff --git a/packages/CredentialManager/res/values-uk/strings.xml b/packages/CredentialManager/res/values-uk/strings.xml
index 22d7789..78a5a5b 100644
--- a/packages/CredentialManager/res/values-uk/strings.xml
+++ b/packages/CredentialManager/res/values-uk/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Диспетчер облікових даних"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Скасувати"</string>
     <string name="string_continue" msgid="1346732695941131882">"Продовжити"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Інші опції"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Зберегти інший спосіб"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Докладніше"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Показати пароль"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Сховати пароль"</string>
@@ -20,7 +36,7 @@
     <string name="improved_account_security_title" msgid="1069841917893513424">"Підвищена безпека облікового запису"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Кожен ключ зв’язано виключно з додатком або веб-сайтом, для якого його створено, тому ви ніколи не зможете помилково ввійти в шахрайський додаток чи на шахрайський веб-сайт. Крім того, коли на серверах зберігаються лише відкриті ключі, зламати захист набагато складніше."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Плавний перехід"</string>
-    <string name="seamless_transition_detail" msgid="4475509237171739843">"На шляху до безпарольного майбутнього паролі й надалі будуть використовуватися паралельно з ключами."</string>
+    <string name="seamless_transition_detail" msgid="4475509237171739843">"На шляху до безпарольного майбутнього паролі й надалі будуть використовуватися паралельно з ключами доступу."</string>
     <string name="choose_provider_title" msgid="8870795677024868108">"Виберіть, де зберігати <xliff:g id="CREATETYPES">%1$s</xliff:g>"</string>
     <string name="choose_provider_body" msgid="4967074531845147434">"Виберіть менеджер паролів, щоб зберігати свої дані й надалі входити в облікові записи швидше"</string>
     <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"Створити ключ доступу для додатка <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"дані для входу"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"дані для входу"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Зберегти <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> в"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Створити ключ доступу на іншому пристрої?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Створити ключ доступу на іншому пристрої?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Зберегти пароль на іншому пристрої?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Зберегти дані для входу на іншому пристрої?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Використовувати сервіс <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> в усіх випадках входу?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Цей менеджер паролів для користувача <xliff:g id="USERNAME">%1$s</xliff:g> зберігатиме ваші паролі й ключі доступу, щоб ви могли легко входити в облікові записи"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Вибрати за умовчанням"</string>
+    <string name="settings" msgid="6536394145760913145">"Налаштування"</string>
     <string name="use_once" msgid="9027366575315399714">"Скористатися раз"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Кількість паролів: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • Кількість ключів доступу: <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"Кількість паролів: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Закрити"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Закрити"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Використати збережений ключ доступу для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Використати збережені дані для входу для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Виберіть збережені дані для входу в додаток <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Використати ваш збережений пароль для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Використовувати ваші дані для входу в додаток <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Розблокувати опції входу для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Виберіть збережений ключ доступу для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Виберіть збережений пароль для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Виберіть збережені дані для входу в додаток <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Виберіть дані для входу в додаток <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Вибрати варіант для додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Використовувати ці дані в додатку <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Увійти іншим способом"</string>
diff --git a/packages/CredentialManager/res/values-ur/strings.xml b/packages/CredentialManager/res/values-ur/strings.xml
index 12126ba..11cba46 100644
--- a/packages/CredentialManager/res/values-ur/strings.xml
+++ b/packages/CredentialManager/res/values-ur/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"سند سے متعلق مینیجر"</string>
     <string name="string_cancel" msgid="6369133483981306063">"منسوخ کریں"</string>
     <string name="string_continue" msgid="1346732695941131882">"جاری رکھیں"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"مزید اختیارات"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"دوسرے طریقے سے محفوظ کریں"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"مزید جانیں"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"پاس ورڈ دکھائیں"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"پاس ورڈ چھپائیں"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"سائن انز"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"سائن ان کی معلومات"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> کو اس میں محفوظ کریں"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"کسی دوسرے آلے میں پاس کی تخلیق کریں؟"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"کسی دوسرے آلے پر پاسکی بنائیں؟"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"کسی دوسرے آلے پر پاس ورڈ محفوظ کریں؟"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"کسی دوسرے آلے پر سائن ان کو محفوظ کریں؟"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"اپنے سبھی سائن انز کے لیے <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> کا استعمال کریں؟"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"آسانی سے سائن ان کرنے میں آپ کی مدد کرنے کے لیے یہ پاس ورڈ مینیجر <xliff:g id="USERNAME">%1$s</xliff:g> کے لیے آپ کے پاس ورڈز اور پاس کیز کو اسٹور کرے گا"</string>
     <string name="set_as_default" msgid="4415328591568654603">"بطور ڈیفالٹ سیٹ کریں"</string>
+    <string name="settings" msgid="6536394145760913145">"ترتیبات"</string>
     <string name="use_once" msgid="9027366575315399714">"ایک بار استعمال کریں"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> پاس ورڈز • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> پاس کیز"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> پاس ورڈز"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"بند کریں"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"برخاست کریں"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے اپنی محفوظ کردہ پاس کی استعمال کریں؟"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے اپنے محفوظ کردہ سائن ان کو استعمال کریں؟"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے محفوظ کردہ سائن انز منتخب کریں"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے آپ کا محفوظ کردہ پاس ورڈ استعمال کریں؟"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے اپنے سائن ان کی اسناد کا استعمال کرنا؟"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے سائن ان کے اختیارات کو غیر مقفل کریں؟"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے ایک محفوظ کردہ پاس کی منتخب کریں"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے ایک محفوظ کردہ پاس ورڈ منتخب کریں"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے محفوظ کردہ سائن ان منتخب کریں"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے سائن ان کی اسناد کا انتخاب کرنا"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے ایک اختیار منتخب کریں؟"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> پر اس معلومات کا استعمال کریں؟"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"دوسرے طریقے سے سائن ان کریں"</string>
diff --git a/packages/CredentialManager/res/values-uz/strings.xml b/packages/CredentialManager/res/values-uz/strings.xml
index f9ee936..a0785b6 100644
--- a/packages/CredentialManager/res/values-uz/strings.xml
+++ b/packages/CredentialManager/res/values-uz/strings.xml
@@ -1,26 +1,42 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Hisob maʼlumotlari menejeri"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Bekor qilish"</string>
     <string name="string_continue" msgid="1346732695941131882">"Davom etish"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Boshqa parametrlar"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Boshqa usulda saqlang"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Batafsil"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Parolni koʻrsatish"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Parolni berkitish"</string>
     <string name="passkey_creation_intro_title" msgid="4251037543787718844">"Kalitlar orqali qulay"</string>
-    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Kodlar yordami tufayli murakkab parollarni yaratish va eslab qolish shart emas"</string>
-    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Kodlar – bu barmoq izi, yuz yoki ekran qulfi yordamida yaratilgan shifrlangan raqamli identifikator."</string>
+    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Kalitlar yordami tufayli murakkab parollarni yaratish va eslab qolish shart emas"</string>
+    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Kalitlar – bu barmoq izi, yuz yoki ekran qulfi yordamida yaratilgan shifrlangan raqamli identifikator."</string>
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"Ular parollar menejerida saqlanadi va ulardan boshqa qurilmalarda hisobga kirib foydalanish mumkin"</string>
-    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Kodlar haqida batafsil"</string>
+    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Kalitlar haqida batafsil"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Parolsiz texnologiya"</string>
-    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Kodlar parollarga tayanmasdan tizimga kirish imkonini beradi. Shaxsingizni tasdiqlash va kod yaratish uchun barmoq izi, yuzni tanish, PIN kod yoki grafik kalitni surishdan foydalanishingiz kifoya."</string>
+    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Kalitlar tizimga parol ishlatmasdan kirish imkonini beradi. Shaxsingizni tasdiqlash va kod yaratish uchun barmoq izi, yuzni tanish, PIN kod yoki grafik kalitni surishdan foydalanishingiz kifoya."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"Ochiq kalit kriptografiyasi"</string>
     <string name="public_key_cryptography_detail" msgid="6937631710280562213">"FIDO Alliance (Google, Apple, Microsoft va boshqalar) va W3C standartlari asosida kodlar kriptografik kalitlar juftligidan foydalanadi. Parollarda ishlatiladigan foydalanuvchi nomi va belgilardan farqli ravishda, ilova yoki veb-sayt uchun maxfiy ochiq kalitlar juftligi yaratiladi. Maxfiy kalit qurilmangizda yoki parollar menejerida xavfsiz saqlanadi va u shaxsingizni tasdiqlaydi. Ochiq kalit ilova yoki veb-sayt serveriga ulashiladi. Mos kalitlar bilan darhol registratsiya va tizimga kirish mumkin."</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"Hisob xavfsizligi yaxshilandi"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Har bir kalit faqat ular uchun yaratilgan ilova yoki veb-sayt bilan ulangan, shuning uchun siz hech qachon xatolik bilan soxta ilova yoki veb-saytga kira olmaysiz. Shuningdek, serverlar bilan faqat ochiq kalitlarni saqlagan holda, buzib kirish ancha qiyinroq boʻladi."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Uzluksiz oʻtish"</string>
-    <string name="seamless_transition_detail" msgid="4475509237171739843">"Parolsiz kelajak sari borayotganimizda, parollar kodlar bilan birga ishlatilishda davom etadi."</string>
+    <string name="seamless_transition_detail" msgid="4475509237171739843">"Parolsiz kelajak sari harakatlanar ekanmiz, parollar kalitlar bilan birga ishlatilishda davom etadi."</string>
     <string name="choose_provider_title" msgid="8870795677024868108">"Bu <xliff:g id="CREATETYPES">%1$s</xliff:g> qayerga saqlanishini tanlang"</string>
     <string name="choose_provider_body" msgid="4967074531845147434">"Maʼlumotlaringizni saqlash va keyingi safar tez kirish uchun parollar menejerini tanlang"</string>
     <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"<xliff:g id="APPNAME">%1$s</xliff:g> uchun kod yaratilsinmi?"</string>
@@ -28,17 +44,20 @@
     <string name="choose_create_option_sign_in_title" msgid="4124872317613421249">"<xliff:g id="APPNAME">%1$s</xliff:g> uchun kirish maʼlumoti saqlansinmi?"</string>
     <string name="passkey" msgid="632353688396759522">"kalit"</string>
     <string name="password" msgid="6738570945182936667">"parol"</string>
-    <string name="passkeys" msgid="5733880786866559847">"kodlar"</string>
+    <string name="passkeys" msgid="5733880786866559847">"kalitlar"</string>
     <string name="passwords" msgid="5419394230391253816">"parollar"</string>
     <string name="sign_ins" msgid="4710739369149469208">"kirishlar"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"kirish maʼlumoti"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Bu <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>ni saqlash"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Boshqa qurilmada kod yaratilsinmi?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Kalit boshqa qurilmada yaratilsinmi?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Parol boshqa qurilmaga saqlansinmi?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Kirish maʼlumotlari boshqa qurilmaga saqlansinmi?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Hamma kirishlarda <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> ishlatilsinmi?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> uchun bu parollar menejerida hisobga oson kirishga yordam beruvchi parol va kalitlar saqlanadi"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Birlamchi deb belgilash"</string>
+    <string name="settings" msgid="6536394145760913145">"Sozlamalar"</string>
     <string name="use_once" msgid="9027366575315399714">"Bir marta ishlatish"</string>
-    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> ta parol • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> ta kod"</string>
+    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> ta parol • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> ta kalit"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> ta parol"</string>
     <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> ta kalit"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"<xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g> hisobi maʼlumotlari"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Yopish"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Yopish"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan kalit ishlatilsinmi?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan maʼlumotlar ishlatilsinmi?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"<xliff:g id="APP_NAME">%1$s</xliff:g> hisob maʼlumotlarini tanlang"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan parol ishlatilsinmi?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga bu maʼlumotlar bilan kirilsinmi?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun kirish usullari ochilsinmi?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan kalitni tanlang"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan parolni tanlang"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun hisob maʼlumotlarini tanlang"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga qanday kirishni tanlang"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish uchun maʼlumotlar tanlansinmi?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Bu axborotdan <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish uchun foydalanilsinmi?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Boshqa usul orqali kirish"</string>
diff --git a/packages/CredentialManager/res/values-vi/strings.xml b/packages/CredentialManager/res/values-vi/strings.xml
index d4acb94..0e17025 100644
--- a/packages/CredentialManager/res/values-vi/strings.xml
+++ b/packages/CredentialManager/res/values-vi/strings.xml
@@ -1,26 +1,42 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Trình quản lý thông tin xác thực"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Huỷ"</string>
     <string name="string_continue" msgid="1346732695941131882">"Tiếp tục"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Tuỳ chọn khác"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Lưu theo cách khác"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Tìm hiểu thêm"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Hiện mật khẩu"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Ẩn mật khẩu"</string>
-    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"An toàn hơn nhờ khoá đăng nhập"</string>
-    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Mã xác thực giúp bạn tránh được việc phải tạo và ghi nhớ mật khẩu phức tạp"</string>
-    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Mã xác thực là các khoá kỹ thuật số được mã hoá mà bạn tạo bằng cách dùng vân tay, khuôn mặt hoặc phương thức khoá màn hình của mình"</string>
+    <string name="passkey_creation_intro_title" msgid="4251037543787718844">"An toàn hơn nhờ khoá truy cập"</string>
+    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"Khoá truy cập giúp bạn tránh được việc phải tạo và ghi nhớ mật khẩu phức tạp"</string>
+    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"Khoá truy cập là các khoá kỹ thuật số được mã hoá mà bạn tạo bằng cách dùng vân tay, khuôn mặt hoặc phương thức khoá màn hình của mình"</string>
     <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"Thông tin này được lưu vào trình quản lý mật khẩu nên bạn có thể đăng nhập trên các thiết bị khác"</string>
-    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Xem thêm thông tin về khoá đăng nhập"</string>
+    <string name="more_about_passkeys_title" msgid="7797903098728837795">"Xem thêm thông tin về khoá truy cập"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"Công nghệ không dùng mật khẩu"</string>
-    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Khoá đăng nhập cho phép bạn đăng nhập mà không cần dựa vào mật khẩu. Bạn chỉ cần dùng vân tay, tính năng nhận dạng khuôn mặt, mã PIN hoặc hình mở khoá để xác minh danh tính và tạo khoá đăng nhập."</string>
+    <string name="passwordless_technology_detail" msgid="6853928846532955882">"Khoá truy cập cho phép bạn đăng nhập mà không cần dựa vào mật khẩu. Bạn chỉ cần dùng vân tay, tính năng nhận dạng khuôn mặt, mã PIN hoặc hình mở khoá để xác minh danh tính và tạo khoá truy cập."</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"Mã hoá khoá công khai"</string>
-    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Dựa trên Liên minh FIDO (bao gồm Google, Apple, Microsoft, v.v.) và tiêu chuẩn W3C, khoá đăng nhập sử dụng cặp khoá mã hoá. Khác với tên người dùng và chuỗi ký tự chúng tôi dùng cho mật khẩu, một cặp khoá riêng tư – công khai được tạo cho một ứng dụng hoặc trang web. Khoá riêng tư được lưu trữ an toàn trên thiết bị hoặc trình quản lý mật khẩu và xác nhận danh tính của bạn. Khoá công khai được chia sẻ với máy chủ ứng dụng hoặc trang web. Với khoá tương ứng, bạn có thể đăng ký và đăng nhập tức thì."</string>
+    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"Dựa trên Liên minh FIDO (bao gồm Google, Apple, Microsoft, v.v.) và tiêu chuẩn W3C, khoá truy cập sử dụng cặp khoá mã hoá. Khác với tên người dùng và chuỗi ký tự chúng tôi dùng cho mật khẩu, một cặp khoá riêng tư – công khai được tạo cho một ứng dụng hoặc trang web. Khoá riêng tư được lưu trữ an toàn trên thiết bị hoặc trình quản lý mật khẩu và xác nhận danh tính của bạn. Khoá công khai được chia sẻ với máy chủ ứng dụng hoặc trang web. Với khoá tương ứng, bạn có thể đăng ký và đăng nhập tức thì."</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"Cải thiện tính bảo mật của tài khoản"</string>
     <string name="improved_account_security_detail" msgid="9123750251551844860">"Mỗi khoá được liên kết riêng với ứng dụng hoặc trang web mà khoá đó được tạo. Vì vậy, bạn sẽ không bao giờ đăng nhập nhầm vào một ứng dụng hoặc trang web lừa đảo. Ngoài ra, với các máy chủ chỉ lưu giữ khoá công khai, việc xâm nhập càng khó hơn nhiều."</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"Chuyển đổi liền mạch"</string>
-    <string name="seamless_transition_detail" msgid="4475509237171739843">"Trong quá trình chúng tôi hướng đến tương lai không dùng mật khẩu, bạn vẫn sẽ dùng được mật khẩu cùng với khoá đăng nhập."</string>
+    <string name="seamless_transition_detail" msgid="4475509237171739843">"Trong quá trình chúng tôi hướng đến tương lai không dùng mật khẩu, bạn vẫn sẽ dùng được mật khẩu cùng với khoá truy cập."</string>
     <string name="choose_provider_title" msgid="8870795677024868108">"Chọn vị trí lưu <xliff:g id="CREATETYPES">%1$s</xliff:g> của bạn"</string>
     <string name="choose_provider_body" msgid="4967074531845147434">"Hãy chọn một trình quản lý mật khẩu để lưu thông tin của bạn và đăng nhập nhanh hơn vào lần tới"</string>
     <string name="choose_create_option_passkey_title" msgid="5220979185879006862">"Tạo khoá đăng nhập cho <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
@@ -28,21 +44,24 @@
     <string name="choose_create_option_sign_in_title" msgid="4124872317613421249">"Lưu thông tin đăng nhập cho <xliff:g id="APPNAME">%1$s</xliff:g>?"</string>
     <string name="passkey" msgid="632353688396759522">"khoá đăng nhập"</string>
     <string name="password" msgid="6738570945182936667">"mật khẩu"</string>
-    <string name="passkeys" msgid="5733880786866559847">"khoá đăng nhập"</string>
+    <string name="passkeys" msgid="5733880786866559847">"khoá truy cập"</string>
     <string name="passwords" msgid="5419394230391253816">"mật khẩu"</string>
     <string name="sign_ins" msgid="4710739369149469208">"thông tin đăng nhập"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"thông tin đăng nhập"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Lưu <xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> vào"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Tạo mã xác thực trên thiết bị khác?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Tạo khoá truy cập trên một thiết bị khác?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Lưu mật khẩu trên một thiết bị khác?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Lưu thông tin đăng nhập trên một thiết bị khác?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Dùng <xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> cho mọi thông tin đăng nhập của bạn?"</string>
-    <string name="use_provider_for_all_description" msgid="1998772715863958997">"Trình quản lý mật khẩu này cho <xliff:g id="USERNAME">%1$s</xliff:g> sẽ lưu trữ mật khẩu và khoá đăng nhập để bạn dễ dàng đăng nhập"</string>
+    <string name="use_provider_for_all_description" msgid="1998772715863958997">"Trình quản lý mật khẩu này cho <xliff:g id="USERNAME">%1$s</xliff:g> sẽ lưu trữ mật khẩu và khoá truy cập để bạn dễ dàng đăng nhập"</string>
     <string name="set_as_default" msgid="4415328591568654603">"Đặt làm mặc định"</string>
+    <string name="settings" msgid="6536394145760913145">"Cài đặt"</string>
     <string name="use_once" msgid="9027366575315399714">"Dùng một lần"</string>
-    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> mật khẩu • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> khoá đăng nhập"</string>
+    <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> mật khẩu • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> khoá truy cập"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> mật khẩu"</string>
-    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> khoá đăng nhập"</string>
+    <string name="more_options_usage_passkeys" msgid="5390320437243042237">"<xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g> khoá truy cập"</string>
     <string name="more_options_usage_credentials" msgid="1785697001787193984">"<xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g> thông tin xác thực"</string>
-    <string name="passkey_before_subtitle" msgid="2448119456208647444">"Mã xác thực"</string>
+    <string name="passkey_before_subtitle" msgid="2448119456208647444">"Khoá truy cập"</string>
     <string name="another_device" msgid="5147276802037801217">"Thiết bị khác"</string>
     <string name="other_password_manager" msgid="565790221427004141">"Trình quản lý mật khẩu khác"</string>
     <string name="close_sheet" msgid="1393792015338908262">"Đóng trang tính"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Đóng"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Đóng"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Dùng khoá đăng nhập bạn đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Dùng thông tin đăng nhập bạn đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Chọn thông tin đăng nhập đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Sử dụng mật khẩu bạn đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Dùng thông tin đăng nhập của bạn cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Mở khoá các tuỳ chọn đăng nhập cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Chọn khoá truy cập đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Chọn mật khẩu đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Chọn thông tin đăng nhập đã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Chọn thông tin đăng nhập cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Chọn một lựa chọn cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Sử dụng thông tin này trên <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Đăng nhập bằng cách khác"</string>
diff --git a/packages/CredentialManager/res/values-zh-rCN/strings.xml b/packages/CredentialManager/res/values-zh-rCN/strings.xml
index a6f2890..42eaf00 100644
--- a/packages/CredentialManager/res/values-zh-rCN/strings.xml
+++ b/packages/CredentialManager/res/values-zh-rCN/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Credential Manager"</string>
     <string name="string_cancel" msgid="6369133483981306063">"取消"</string>
     <string name="string_continue" msgid="1346732695941131882">"继续"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"更多选项"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"换一种方式保存"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"了解详情"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"显示密码"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"隐藏密码"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"登录"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"登录信息"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"将<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>保存到"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"在其他设备上创建通行密钥?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"在其他设备上创建通行密钥?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"在其他设备上保存密码?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"在其他设备上保存登录凭据?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"将“<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>”用于您的所有登录信息?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"此 <xliff:g id="USERNAME">%1$s</xliff:g> 密码管理工具将会存储您的密码和通行密钥,帮助您轻松登录"</string>
     <string name="set_as_default" msgid="4415328591568654603">"设为默认项"</string>
+    <string name="settings" msgid="6536394145760913145">"设置"</string>
     <string name="use_once" msgid="9027366575315399714">"使用一次"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> 个密码 • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> 个通行密钥"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> 个密码"</string>
@@ -49,9 +68,14 @@
     <string name="accessibility_back_arrow_button" msgid="3233198183497842492">"返回上一页"</string>
     <string name="accessibility_close_button" msgid="1163435587545377687">"关闭"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"忽略"</string>
-    <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"要使用您已保存的\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"通行密钥吗?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"将您已保存的登录信息用于<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"为<xliff:g id="APP_NAME">%1$s</xliff:g>选择已保存的登录信息"</string>
+    <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"要使用您为“<xliff:g id="APP_NAME">%1$s</xliff:g>”保存的通行密钥吗?"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"要使用已保存的密码登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”吗?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"使用您的<xliff:g id="APP_NAME">%1$s</xliff:g>登录凭据?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"要解锁“<xliff:g id="APP_NAME">%1$s</xliff:g>”的登录选项吗?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"选择一个已保存的通行密钥来登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"选择一个已保存的密码来登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"选择一种已保存的登录方式来登录“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"选择一种登录<xliff:g id="APP_NAME">%1$s</xliff:g>的方式"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"要为“<xliff:g id="APP_NAME">%1$s</xliff:g>”选择一个选项吗?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"要将此信息用于“<xliff:g id="APP_NAME">%1$s</xliff:g>”吗?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"使用其他登录方式"</string>
diff --git a/packages/CredentialManager/res/values-zh-rHK/strings.xml b/packages/CredentialManager/res/values-zh-rHK/strings.xml
index 44484a5..f786254 100644
--- a/packages/CredentialManager/res/values-zh-rHK/strings.xml
+++ b/packages/CredentialManager/res/values-zh-rHK/strings.xml
@@ -1,24 +1,40 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"憑證管理工具"</string>
     <string name="string_cancel" msgid="6369133483981306063">"取消"</string>
     <string name="string_continue" msgid="1346732695941131882">"繼續"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"更多選項"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"儲存其他方式"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"瞭解詳情"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"顯示密碼"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"隱藏密碼"</string>
     <string name="passkey_creation_intro_title" msgid="4251037543787718844">"使用密鑰確保帳戶安全"</string>
-    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"有了密鑰,您便無需建立或記住複雜的密碼"</string>
-    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"密鑰是您使用指紋、面孔或螢幕鎖定時建立的加密數碼鑰匙"</string>
-    <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"密鑰已儲存至密碼管理工具,方便您在其他裝置上登入"</string>
+    <string name="passkey_creation_intro_body_password" msgid="8825872426579958200">"有了密鑰,你便無需建立或記住複雜的密碼"</string>
+    <string name="passkey_creation_intro_body_fingerprint" msgid="7331338631826254055">"密鑰是你使用指紋、面孔或螢幕鎖定時建立的加密數碼鑰匙"</string>
+    <string name="passkey_creation_intro_body_device" msgid="1203796455762131631">"密鑰已儲存至密碼管理工具,方便你在其他裝置上登入"</string>
     <string name="more_about_passkeys_title" msgid="7797903098728837795">"進一步瞭解密鑰"</string>
     <string name="passwordless_technology_title" msgid="2497513482056606668">"無密碼技術"</string>
     <string name="passwordless_technology_detail" msgid="6853928846532955882">"只要有密鑰,就無需使用密碼登入。使用指紋、面孔識別、PIN 或滑動畫出圖案,便可驗證身分並建立密鑰。"</string>
     <string name="public_key_cryptography_title" msgid="6751970819265298039">"公開金鑰加密技術"</string>
-    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"密鑰根據 FIDO 聯盟 (包括 Google、Apple、Microsoft 等) 及 W3C 標準,使用加密配對金鑰技術。私密 - 公開金鑰組專為應用程式或網站建立,與建立密碼時使用的使用者名稱和作為密碼的字元字串不同。私密金鑰會安全地儲存在裝置或密碼管理工具上,用來確認您的身分。公開金鑰會與應用程式或網站伺服器共用。只要有對應的金鑰,就能立即註冊和登入。"</string>
+    <string name="public_key_cryptography_detail" msgid="6937631710280562213">"密鑰根據 FIDO 聯盟 (包括 Google、Apple、Microsoft 等) 及 W3C 標準,使用加密配對金鑰技術。私密 - 公開金鑰組專為應用程式或網站建立,與建立密碼時使用的使用者名稱和作為密碼的字元字串不同。私密金鑰會安全地儲存在裝置或密碼管理工具上,用來確認你的身分。公開金鑰會與應用程式或網站伺服器共用。只要有對應的金鑰,就能立即註冊和登入。"</string>
     <string name="improved_account_security_title" msgid="1069841917893513424">"提升帳戶安全性"</string>
-    <string name="improved_account_security_detail" msgid="9123750251551844860">"系統會為應用程式或網站建立專用的對應金鑰,因此您不會錯誤登入欺詐的應用程式或網站。此外,伺服器上只會保留公開金鑰,因此可大幅降低駭客入侵的風險。"</string>
+    <string name="improved_account_security_detail" msgid="9123750251551844860">"系統會為應用程式或網站建立專用的對應金鑰,因此你不會錯誤登入欺詐的應用程式或網站。此外,伺服器上只會保留公開金鑰,因此可大幅降低駭客入侵的風險。"</string>
     <string name="seamless_transition_title" msgid="5335622196351371961">"流暢轉換"</string>
     <string name="seamless_transition_detail" msgid="4475509237171739843">"我們將會改用無密碼技術,而密碼仍可與密鑰並行使用。"</string>
     <string name="choose_provider_title" msgid="8870795677024868108">"選擇儲存<xliff:g id="CREATETYPES">%1$s</xliff:g>的位置"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"登入資料"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"登入資料"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"將<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>儲存至"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"要在其他裝置上建立密鑰嗎?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"要在其他裝置上建立密鑰嗎?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"要在其他裝置上儲存密碼嗎?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"要在其他裝置上儲存登入資料嗎?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"要將「<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>」用於所有的登入資料嗎?"</string>
-    <string name="use_provider_for_all_description" msgid="1998772715863958997">"此密碼管理工具將儲存「<xliff:g id="USERNAME">%1$s</xliff:g>」的密碼和密鑰,協助您輕鬆登入"</string>
+    <string name="use_provider_for_all_description" msgid="1998772715863958997">"此密碼管理工具將儲存「<xliff:g id="USERNAME">%1$s</xliff:g>」的密碼和密鑰,協助你輕鬆登入"</string>
     <string name="set_as_default" msgid="4415328591568654603">"設定為預設"</string>
+    <string name="settings" msgid="6536394145760913145">"設定"</string>
     <string name="use_once" msgid="9027366575315399714">"單次使用"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> 個密碼 • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> 個密鑰"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> 個密碼"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"關閉"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"關閉"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"要使用已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密鑰嗎?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"要使用已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」登入資料嗎?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」登入資料"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"要使用已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密碼嗎?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"要以此登入方式使用「<xliff:g id="APP_NAME">%1$s</xliff:g>」嗎?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"要解鎖「<xliff:g id="APP_NAME">%1$s</xliff:g>」的登入選項嗎?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密鑰"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密碼"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」登入資料"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"選擇用於「<xliff:g id="APP_NAME">%1$s</xliff:g>」的登入方式"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"要選擇適用於「<xliff:g id="APP_NAME">%1$s</xliff:g>」的項目嗎?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"要在「<xliff:g id="APP_NAME">%1$s</xliff:g>」上使用這些資料嗎?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"使用其他方式登入"</string>
diff --git a/packages/CredentialManager/res/values-zh-rTW/strings.xml b/packages/CredentialManager/res/values-zh-rTW/strings.xml
index 758f2a4d..f14a5ce 100644
--- a/packages/CredentialManager/res/values-zh-rTW/strings.xml
+++ b/packages/CredentialManager/res/values-zh-rTW/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"憑證管理工具"</string>
     <string name="string_cancel" msgid="6369133483981306063">"取消"</string>
     <string name="string_continue" msgid="1346732695941131882">"繼續"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"更多選項"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"儲存其他方式"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"瞭解詳情"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"顯示密碼"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"隱藏密碼"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"登入資訊"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"登入資訊"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"選擇儲存<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g>的位置"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"要在其他裝置上建立密碼金鑰嗎?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"要在另一部裝置上建立密碼金鑰嗎?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"要將密碼儲存在另一部裝置上嗎?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"要將登入憑證儲存在另一部裝置上嗎?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"要將「<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g>」用於所有的登入資訊嗎?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"<xliff:g id="USERNAME">%1$s</xliff:g> 的密碼管理工具會儲存密碼和密碼金鑰,協助你輕鬆登入"</string>
     <string name="set_as_default" msgid="4415328591568654603">"設為預設"</string>
+    <string name="settings" msgid="6536394145760913145">"設定"</string>
     <string name="use_once" msgid="9027366575315399714">"單次使用"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> 個密碼 • <xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g> 個密碼金鑰"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> 個密碼"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"關閉"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"關閉"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"要使用已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密碼金鑰嗎?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"要使用已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」登入資訊嗎?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」登入資訊"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"要使用已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密碼嗎?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"要使用你的憑證登入「<xliff:g id="APP_NAME">%1$s</xliff:g>」嗎?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"要解鎖「<xliff:g id="APP_NAME">%1$s</xliff:g>」的登入選項嗎?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密碼金鑰"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」密碼"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"選擇已儲存的「<xliff:g id="APP_NAME">%1$s</xliff:g>」登入資訊"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"選擇用於登入「<xliff:g id="APP_NAME">%1$s</xliff:g>」的憑證"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"要選擇適用於「<xliff:g id="APP_NAME">%1$s</xliff:g>」的項目嗎?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"要在「<xliff:g id="APP_NAME">%1$s</xliff:g>」上使用這項資訊嗎?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"使用其他方式登入"</string>
diff --git a/packages/CredentialManager/res/values-zu/strings.xml b/packages/CredentialManager/res/values-zu/strings.xml
index 94bd6c7..91f93e2 100644
--- a/packages/CredentialManager/res/values-zu/strings.xml
+++ b/packages/CredentialManager/res/values-zu/strings.xml
@@ -1,10 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2023 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="4539824758261855508">"Umphathi Wezimfanelo"</string>
     <string name="string_cancel" msgid="6369133483981306063">"Khansela"</string>
     <string name="string_continue" msgid="1346732695941131882">"Qhubeka"</string>
-    <string name="string_more_options" msgid="7990658711962795124">"Okunye okungakukhethwa kukho"</string>
+    <string name="string_more_options" msgid="2763852250269945472">"Londoloza ngenye indlela"</string>
     <string name="string_learn_more" msgid="4541600451688392447">"Funda kabanzi"</string>
     <string name="content_description_show_password" msgid="3283502010388521607">"Bonisa iphasiwedi"</string>
     <string name="content_description_hide_password" msgid="6841375971631767996">"Fihla iphasiwedi"</string>
@@ -33,10 +49,13 @@
     <string name="sign_ins" msgid="4710739369149469208">"ukungena ngemvume"</string>
     <string name="sign_in_info" msgid="2627704710674232328">"ulwazi lokungena ngemvume"</string>
     <string name="save_credential_to_title" msgid="3172811692275634301">"Londoloza i-<xliff:g id="CREDENTIALTYPES">%1$s</xliff:g> ku-"</string>
-    <string name="create_passkey_in_other_device_title" msgid="9195411122362461390">"Sungula ukhiye wokudlula kwenye idivayisi?"</string>
+    <string name="create_passkey_in_other_device_title" msgid="2360053098931886245">"Sungula ukhiye wokudlula kwenye idivayisi?"</string>
+    <string name="save_password_on_other_device_title" msgid="5829084591948321207">"Londoloza iphasiwedi kwenye idivayisi?"</string>
+    <string name="save_sign_in_on_other_device_title" msgid="2827990118560134692">"Londoloza ukungena ngemvume kwenye idivayisi?"</string>
     <string name="use_provider_for_all_title" msgid="4201020195058980757">"Sebenzisa i-<xliff:g id="PROVIDERINFODISPLAYNAME">%1$s</xliff:g> kukho konke ukungena kwakho ngemvume?"</string>
     <string name="use_provider_for_all_description" msgid="1998772715863958997">"Lesi siphathi sephasiwedi sika-<xliff:g id="USERNAME">%1$s</xliff:g> sizogcina amaphasiwedi akho nezikhiye zokungena ukuze zikusize ungene ngemvume kalula."</string>
     <string name="set_as_default" msgid="4415328591568654603">"Setha njengokuzenzakalelayo"</string>
+    <string name="settings" msgid="6536394145760913145">"Amasethingi"</string>
     <string name="use_once" msgid="9027366575315399714">"Sebenzisa kanye"</string>
     <string name="more_options_usage_passwords_passkeys" msgid="3470113942332934279">"Amaphasiwedi angu-<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g> • okhiye bokudlula abangu-<xliff:g id="PASSKEYSNUMBER">%2$s</xliff:g>"</string>
     <string name="more_options_usage_passwords" msgid="1632047277723187813">"Amaphasiwedi angu-<xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
@@ -50,8 +69,13 @@
     <string name="accessibility_close_button" msgid="1163435587545377687">"Vala"</string>
     <string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Chitha"</string>
     <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Sebenzisa ukhiye wakho wokungena olondoloziwe <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_use_sign_in_for" msgid="5283099528915572980">"Sebenzisa ukungena kwakho ngemvume okulondoloziwe <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="get_dialog_title_choose_sign_in_for" msgid="1361715440877613701">"Khetha ukungena ngemvume okulondoloziwe kwakho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Sebenzisa iphasiwedi yakho elondoloziwe ye-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Sebenzisa ukungena kwakho ngemvume ku-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vula ukungena ngemvume okukhethwa kukho kwe-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Khetha ukhiye wokudlula olondoloziwe we-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Khetha iphasiwedi elondoloziwe ye-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Khetha ukungena ngemvume okulondoloziwe kwe-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Khetha ukungenangemvume ku-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Khetha ongakhetha kukho kwe-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Sebenzisa lolu lwazi ku-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Ngena ngemvume ngenye indlela"</string>
diff --git a/packages/EasterEgg/res/values/q_puzzles.xml b/packages/EasterEgg/res/values/q_puzzles.xml
index 2a477f5..bff99d5 100644
--- a/packages/EasterEgg/res/values/q_puzzles.xml
+++ b/packages/EasterEgg/res/values/q_puzzles.xml
@@ -205,7 +205,7 @@
         <item>com.android.systemui:drawable/ic_volume_ringer_vibrate</item>
         <item>com.android.systemui:drawable/ic_volume_voice</item>
         <item>com.android.systemui:drawable/stat_sys_camera</item>
-        <item>com.android.systemui:drawable/stat_sys_managed_profile_status</item>
+        <item>android:drawable/stat_sys_managed_profile_status</item>
         <item>com.android.systemui:drawable/stat_sys_mic_none</item>
         <item>com.android.systemui:drawable/stat_sys_vpn_ic</item>
 
diff --git a/packages/ExternalStorageProvider/res/values-bs/strings.xml b/packages/ExternalStorageProvider/res/values-bs/strings.xml
index 2c42df7..9abfcec 100644
--- a/packages/ExternalStorageProvider/res/values-bs/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-bs/strings.xml
@@ -18,6 +18,6 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="748293919008814871">"Aplikacija za vanjsku pohranu"</string>
     <string name="storage_description" msgid="9176081505553938524">"Lokalna pohrana"</string>
-    <string name="root_internal_storage" msgid="4980477711224234931">"Interna pohrana"</string>
+    <string name="root_internal_storage" msgid="4980477711224234931">"Unutrašnja pohrana"</string>
     <string name="root_documents" msgid="5695037589229175941">"Dokumenti"</string>
 </resources>
diff --git a/packages/ExternalStorageProvider/res/values-te/strings.xml b/packages/ExternalStorageProvider/res/values-te/strings.xml
index 773ae0e..33a57b0 100644
--- a/packages/ExternalStorageProvider/res/values-te/strings.xml
+++ b/packages/ExternalStorageProvider/res/values-te/strings.xml
@@ -16,8 +16,8 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="748293919008814871">"బాహ్య నిల్వ"</string>
-    <string name="storage_description" msgid="9176081505553938524">"స్థానిక నిల్వ"</string>
-    <string name="root_internal_storage" msgid="4980477711224234931">"అంతర్గత నిల్వ"</string>
-    <string name="root_documents" msgid="5695037589229175941">"పత్రాలు"</string>
+    <string name="app_label" msgid="748293919008814871">"బాహ్య స్టోరేజ్‌"</string>
+    <string name="storage_description" msgid="9176081505553938524">"స్థానిక స్టోరేజ్‌"</string>
+    <string name="root_internal_storage" msgid="4980477711224234931">"అంతర్గత స్టోరేజ్‌"</string>
+    <string name="root_documents" msgid="5695037589229175941">"డాక్యుమెంట్లు"</string>
 </resources>
diff --git a/packages/InputDevices/res/values-bg/strings.xml b/packages/InputDevices/res/values-bg/strings.xml
index 5c25f97..1ee9565 100644
--- a/packages/InputDevices/res/values-bg/strings.xml
+++ b/packages/InputDevices/res/values-bg/strings.xml
@@ -38,11 +38,11 @@
     <string name="keyboard_layout_turkish" msgid="7736163250907964898">"турски"</string>
     <string name="keyboard_layout_turkish_f" msgid="9130320856010776018">"Турски (тип F)"</string>
     <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"украински"</string>
-    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Арабска клавиатурна подредба"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"арабска клавиатурна подредба"</string>
     <string name="keyboard_layout_greek" msgid="7289253560162386040">"Гръцка клавиатурна подредба"</string>
     <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Ивритска клавиатурна подредба"</string>
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Литовска клавиатурна подредба"</string>
-    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Исп. клав. подредба (Лат. Америка)"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"испански (Лат. Америка)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"латвийски"</string>
     <string name="keyboard_layout_persian" msgid="3920643161015888527">"персийски"</string>
     <string name="keyboard_layout_azerbaijani" msgid="7315895417176467567">"азербайджански"</string>
diff --git a/packages/InputDevices/res/values-bs/strings.xml b/packages/InputDevices/res/values-bs/strings.xml
index df58464..c6cacbc 100644
--- a/packages/InputDevices/res/values-bs/strings.xml
+++ b/packages/InputDevices/res/values-bs/strings.xml
@@ -34,7 +34,7 @@
     <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"brazilski"</string>
     <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"portugalski"</string>
     <string name="keyboard_layout_slovak" msgid="2469379934672837296">"slovački"</string>
-    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"slovenački"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"slovenski"</string>
     <string name="keyboard_layout_turkish" msgid="7736163250907964898">"turski"</string>
     <string name="keyboard_layout_turkish_f" msgid="9130320856010776018">"turski F"</string>
     <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ukrajinski"</string>
diff --git a/packages/InputDevices/res/values-es/strings.xml b/packages/InputDevices/res/values-es/strings.xml
index 77b896b..216e79f 100644
--- a/packages/InputDevices/res/values-es/strings.xml
+++ b/packages/InputDevices/res/values-es/strings.xml
@@ -4,7 +4,7 @@
     <string name="app_label" msgid="8016145283189546017">"Dispositivos de introducción de datos"</string>
     <string name="keyboard_layouts_label" msgid="6688773268302087545">"Teclado de Android"</string>
     <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Inglés (Reino Unido)"</string>
-    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Inglés (EE.UU.)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Inglés (EE. UU.)"</string>
     <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Inglés (EE.UU.), estilo internacional"</string>
     <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Inglés (EE.UU.), estilo Colemak"</string>
     <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Inglés (EE.UU.), estilo Dvorak"</string>
@@ -27,7 +27,7 @@
     <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finlandés"</string>
     <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croata"</string>
     <string name="keyboard_layout_czech" msgid="1349256901452975343">"Checo"</string>
-    <string name="keyboard_layout_czech_qwerty" msgid="3331402534128515501">"Estilo QWERTY checo"</string>
+    <string name="keyboard_layout_czech_qwerty" msgid="3331402534128515501">"Checo (estilo QWERTY)"</string>
     <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonio"</string>
     <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Húngaro"</string>
     <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandés"</string>
diff --git a/packages/InputDevices/res/values-et/strings.xml b/packages/InputDevices/res/values-et/strings.xml
index c835522..87c486f 100644
--- a/packages/InputDevices/res/values-et/strings.xml
+++ b/packages/InputDevices/res/values-et/strings.xml
@@ -3,7 +3,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="8016145283189546017">"Sisendseadmed"</string>
     <string name="keyboard_layouts_label" msgid="6688773268302087545">"Androidi klaviatuur"</string>
-    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Inglise (Ühendkuningriik)"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Inglise (ÜK)"</string>
     <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Inglise (USA)"</string>
     <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Inglise (USA), rahvusvaheline stiil"</string>
     <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Inglise (USA), Colemaki stiil"</string>
diff --git a/packages/InputDevices/res/values-fr/strings.xml b/packages/InputDevices/res/values-fr/strings.xml
index 0e41a2e..37cde05 100644
--- a/packages/InputDevices/res/values-fr/strings.xml
+++ b/packages/InputDevices/res/values-fr/strings.xml
@@ -27,7 +27,7 @@
     <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finnois"</string>
     <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croate"</string>
     <string name="keyboard_layout_czech" msgid="1349256901452975343">"Tchèque"</string>
-    <string name="keyboard_layout_czech_qwerty" msgid="3331402534128515501">"Clavier QWERTY tchèque"</string>
+    <string name="keyboard_layout_czech_qwerty" msgid="3331402534128515501">"Tchèque QWERTY"</string>
     <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonien"</string>
     <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Hongrois"</string>
     <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandais"</string>
diff --git a/packages/InputDevices/res/values-hi/strings.xml b/packages/InputDevices/res/values-hi/strings.xml
index c3291a0..2562854 100644
--- a/packages/InputDevices/res/values-hi/strings.xml
+++ b/packages/InputDevices/res/values-hi/strings.xml
@@ -28,7 +28,7 @@
     <string name="keyboard_layout_croatian" msgid="4172229471079281138">"क्रोएशियन"</string>
     <string name="keyboard_layout_czech" msgid="1349256901452975343">"चेक"</string>
     <string name="keyboard_layout_czech_qwerty" msgid="3331402534128515501">"चेक QWERTY स्टाइल"</string>
-    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"एस्टोनियाई"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"एस्टोनियन"</string>
     <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"हंगेरियाई"</string>
     <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"आइसलैंडिक"</string>
     <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"ब्राज़ीलियाई"</string>
@@ -38,7 +38,7 @@
     <string name="keyboard_layout_turkish" msgid="7736163250907964898">"तुर्किये"</string>
     <string name="keyboard_layout_turkish_f" msgid="9130320856010776018">"Turkish F"</string>
     <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"यूक्रेनियाई"</string>
-    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"अरबी"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"ऐरेबिक"</string>
     <string name="keyboard_layout_greek" msgid="7289253560162386040">"ग्रीक"</string>
     <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"हिब्रू"</string>
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"लिथुआनियाई"</string>
diff --git a/packages/InputDevices/res/values-km/strings.xml b/packages/InputDevices/res/values-km/strings.xml
index e06ce2c8..fd63ab33c 100644
--- a/packages/InputDevices/res/values-km/strings.xml
+++ b/packages/InputDevices/res/values-km/strings.xml
@@ -45,7 +45,7 @@
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"អេស្ប៉ាញ (ឡាតាំង​)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"ឡាតវីយ៉ា"</string>
     <string name="keyboard_layout_persian" msgid="3920643161015888527">"ពីស៊ាន"</string>
-    <string name="keyboard_layout_azerbaijani" msgid="7315895417176467567">"អាហ្សឺបៃហ្សង់"</string>
+    <string name="keyboard_layout_azerbaijani" msgid="7315895417176467567">"អាស៊ែបៃហ្សង់"</string>
     <string name="keyboard_layout_polish" msgid="1121588624094925325">"ប៉ូឡូញ"</string>
     <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"បេឡារុស"</string>
     <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"មុងហ្គោលី"</string>
diff --git a/packages/InputDevices/res/values-mr/strings.xml b/packages/InputDevices/res/values-mr/strings.xml
index c04006d..6382f6f 100644
--- a/packages/InputDevices/res/values-mr/strings.xml
+++ b/packages/InputDevices/res/values-mr/strings.xml
@@ -24,11 +24,11 @@
     <string name="keyboard_layout_danish" msgid="8036432066627127851">"डॅनिश"</string>
     <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"नॉर्वेजियन"</string>
     <string name="keyboard_layout_swedish" msgid="732959109088479351">"स्वीडिश"</string>
-    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"फिन्निश"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"फिनिश"</string>
     <string name="keyboard_layout_croatian" msgid="4172229471079281138">"क्रोएशियन"</string>
     <string name="keyboard_layout_czech" msgid="1349256901452975343">"झेक"</string>
     <string name="keyboard_layout_czech_qwerty" msgid="3331402534128515501">"Czech QWERTY शैली"</string>
-    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"एस्टोनियन"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"इस्टोनियन"</string>
     <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"हंगेरियन"</string>
     <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"आइसलँडिक"</string>
     <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"ब्राझिलियन"</string>
diff --git a/packages/InputDevices/res/values-ne/strings.xml b/packages/InputDevices/res/values-ne/strings.xml
index a550d37..6e98bf6 100644
--- a/packages/InputDevices/res/values-ne/strings.xml
+++ b/packages/InputDevices/res/values-ne/strings.xml
@@ -4,17 +4,17 @@
     <string name="app_label" msgid="8016145283189546017">"इनपुट डिभाइस"</string>
     <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android किबोर्ड"</string>
     <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"अङ्ग्रेजी (बेलायत)"</string>
-    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"अङ्ग्रेजी (अमेरिकी)"</string>
-    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"अङ्ग्रेजी (अमेरिकी), अन्तर्राष्ट्रिय शैली"</string>
-    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"अङ्ग्रेजी (अमेरिकी), कोलमाक शैली"</string>
-    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"अङ्ग्रेजी (अमेरिकी), डेभोर्याक शैली"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"अङ्ग्रेजी (सं.रा. अमेरिका)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"अङ्ग्रेजी (सं.रा. अमेरिका), अन्तर्राष्ट्रिय शैली"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"अङ्ग्रेजी (सं.रा. अमेरिका), कोलमाक शैली"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"अङ्ग्रेजी (सं.रा. अमेरिका), डेभोर्याक शैली"</string>
     <string name="keyboard_layout_english_us_workman_label" msgid="2944541595262173111">"अंग्रेजी (अमेरिका), वर्कम्यान शैली"</string>
     <string name="keyboard_layout_german_label" msgid="8451565865467909999">"जर्मन"</string>
     <string name="keyboard_layout_french_label" msgid="813450119589383723">"फ्रान्सेली"</string>
     <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"फ्रेंच (क्यानाडा)"</string>
     <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"रसियन"</string>
     <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"रूसी, म्याक शैली"</string>
-    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"स्पानिस"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"स्पेनी"</string>
     <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"स्विस फ्रान्सेली"</string>
     <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"स्विस-जर्मन"</string>
     <string name="keyboard_layout_belgian" msgid="2011984572838651558">"बेल्जियन"</string>
diff --git a/packages/InputDevices/res/values-or/strings.xml b/packages/InputDevices/res/values-or/strings.xml
index 52556ef..5b6aaea 100644
--- a/packages/InputDevices/res/values-or/strings.xml
+++ b/packages/InputDevices/res/values-or/strings.xml
@@ -3,8 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="8016145283189546017">"ଇନପୁଟ୍‌ ଡିଭାଇସ୍"</string>
     <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android କୀ’ବୋର୍ଡ"</string>
-    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"ଇଂରାଜୀ (ୟୁକେ)"</string>
-    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"ଇଂରାଜୀ (ୟୁଏସ୍‍)"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"ଇଂରାଜୀ (ଯୁକ୍ତରାଜ୍ୟ)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"ଇଂରାଜୀ (ଯୁକ୍ତରାଷ୍ଟ୍ର)"</string>
     <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"ଇଂରାଜୀ (ୟୁଏସ୍‍), ଇଣ୍ଟରନେସନାଲ୍‍ ଷ୍ଟାଇଲ୍‍"</string>
     <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"ଇଂରାଜୀ (ୟୁଏସ୍‍), କୋଲେମକ୍‍ ଷ୍ଟାଇଲ୍‍"</string>
     <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"ଇଂରାଜୀ (ୟୁଏସ୍‍), ଡଭୋରାକ୍‌ ଷ୍ଟାଇଲ୍‍"</string>
@@ -21,14 +21,14 @@
     <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"ବୁଲଗାରିଆନ୍‍"</string>
     <string name="keyboard_layout_bulgarian_phonetic" msgid="7568914730360106653">"ବୁଲଗେରିଆନ୍, ଫୋନେଟିକ୍"</string>
     <string name="keyboard_layout_italian" msgid="6497079660449781213">"ଇଟାଲିୟାନ୍‌"</string>
-    <string name="keyboard_layout_danish" msgid="8036432066627127851">"ଡାନିଶ୍‍"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"ଡେନିସ"</string>
     <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"ନରୱେଜିଆନ୍"</string>
     <string name="keyboard_layout_swedish" msgid="732959109088479351">"ସ୍ଵେଡିଶ୍‌"</string>
-    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"ଫିନ୍ନିଶ୍‍"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"ଫିନ୍ନିସ"</string>
     <string name="keyboard_layout_croatian" msgid="4172229471079281138">"କ୍ରୋଆଶିଆନ୍"</string>
     <string name="keyboard_layout_czech" msgid="1349256901452975343">"ଚେକ୍"</string>
     <string name="keyboard_layout_czech_qwerty" msgid="3331402534128515501">"ଚେକ୍ QWERTY ଷ୍ଟାଇଲ୍"</string>
-    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"ଇଷ୍ଟୋନିଆନ୍"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"ଏଷ୍ଟୋନିଆନ"</string>
     <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"ହଙ୍ଗେରିଆନ୍"</string>
     <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"ଆଇସଲାଣ୍ଡିକ୍"</string>
     <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"ବ୍ରାଜିଲିୟାନ୍"</string>
@@ -38,14 +38,14 @@
     <string name="keyboard_layout_turkish" msgid="7736163250907964898">"ତୁର୍କିସ୍"</string>
     <string name="keyboard_layout_turkish_f" msgid="9130320856010776018">"ତୁର୍କିଶ୍ F"</string>
     <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ୟୁକ୍ରାନିଆନ୍"</string>
-    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"ଆରବିକ୍‍"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"ଆରବିକ"</string>
     <string name="keyboard_layout_greek" msgid="7289253560162386040">"ଗ୍ରୀକ୍"</string>
     <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"ହିବ୍ର୍ୟୁ"</string>
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ଲିଥୁଆନିଆନ୍"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"ସ୍ପାନିଶ୍‍ (ଲାଟିନ୍‌)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"ଲାଟିଭିଆନ୍‍"</string>
     <string name="keyboard_layout_persian" msgid="3920643161015888527">"ପାର୍ସିଆନ୍‌"</string>
-    <string name="keyboard_layout_azerbaijani" msgid="7315895417176467567">"ଆଜେର୍‌ବୈଜାନି"</string>
+    <string name="keyboard_layout_azerbaijani" msgid="7315895417176467567">"ଆଜରବୈଜାନି"</string>
     <string name="keyboard_layout_polish" msgid="1121588624094925325">"ପଲିଶ୍"</string>
     <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"ବେଲାରୁସିଆନ୍"</string>
     <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"ମଙ୍ଗୋଲିଆନ୍"</string>
diff --git a/packages/InputDevices/res/values-pa/strings.xml b/packages/InputDevices/res/values-pa/strings.xml
index f261fb52..988b449 100644
--- a/packages/InputDevices/res/values-pa/strings.xml
+++ b/packages/InputDevices/res/values-pa/strings.xml
@@ -3,8 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="8016145283189546017">"ਇਨਪੁੱਟ ਡੀਵਾਈਸਾਂ"</string>
     <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android ਕੀ-ਬੋਰਡ"</string>
-    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"ਅੰਗ੍ਰੇਜ਼ੀ (ਯੂਕੇ)"</string>
-    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"ਅੰਗ੍ਰੇਜੀ (ਅਮ੍ਰੀਕਾ)"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"ਅੰਗਰੇਜ਼ੀ (ਯੂ.ਕੇ.)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"ਅੰਗਰੇਜ਼ੀ (ਯੂ.ਐੱਸ.)"</string>
     <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"ਅੰਗ੍ਰੇਜ਼ੀ (ਅਮਰੀਕਾ), ਅੰਤਰਰਾਸ਼ਟਰੀ ਸਟਾਈਲ"</string>
     <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"ਅੰਗ੍ਰੇਜ਼ੀ (ਅਮਰੀਕਾ), ਕੋਲਮਾਰਕ ਸਟਾਈਲ"</string>
     <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"ਅੰਗ੍ਰੇਜ਼ੀ (ਅਮਰੀਕਾ), ਵੋਰਕ ਸਟਾਈਲ"</string>
@@ -28,7 +28,7 @@
     <string name="keyboard_layout_croatian" msgid="4172229471079281138">"ਕਰੋਆਟੀਆਈ"</string>
     <string name="keyboard_layout_czech" msgid="1349256901452975343">"ਚੈਕ"</string>
     <string name="keyboard_layout_czech_qwerty" msgid="3331402534128515501">"ਚੈੱਕ QWERTY ਸਟਾਈਲ"</string>
-    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"ਇਸਟੋਨੀਅਨ"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"ਇਸਤੋਨੀਆਈ"</string>
     <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"ਹੰਗੇਰੀਅਨ"</string>
     <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"ਆਈਸਲੈਂਡੀ"</string>
     <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"ਬ੍ਰਾਜ਼ਿਲਿਆਈ"</string>
@@ -45,7 +45,7 @@
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"ਸਪੇਨੀ (ਲਾਤੀਨੀ)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"ਲਾਤਵੀਅਨ"</string>
     <string name="keyboard_layout_persian" msgid="3920643161015888527">"ਫ਼ਾਰਸੀ"</string>
-    <string name="keyboard_layout_azerbaijani" msgid="7315895417176467567">"ਅਜ਼ੇਰਬੈਜਾਨੀ"</string>
+    <string name="keyboard_layout_azerbaijani" msgid="7315895417176467567">"ਅਜ਼ਰਬਾਈਜਾਨੀ"</string>
     <string name="keyboard_layout_polish" msgid="1121588624094925325">"ਪੋਲਿਸ਼"</string>
     <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"ਬੇਲਾਰੂਸੀ"</string>
     <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"ਮੰਗੋਲੀਆਈ"</string>
diff --git a/packages/InputDevices/res/values-sk/strings.xml b/packages/InputDevices/res/values-sk/strings.xml
index 301c800..5b239d4 100644
--- a/packages/InputDevices/res/values-sk/strings.xml
+++ b/packages/InputDevices/res/values-sk/strings.xml
@@ -38,14 +38,14 @@
     <string name="keyboard_layout_turkish" msgid="7736163250907964898">"turecké"</string>
     <string name="keyboard_layout_turkish_f" msgid="9130320856010776018">"Turečtina F"</string>
     <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ukrajinské"</string>
-    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabčina"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"arabské"</string>
     <string name="keyboard_layout_greek" msgid="7289253560162386040">"Gréčtina"</string>
     <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebrejčina"</string>
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litovčina"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Španielčina (Latinská Amerika)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Lotyština"</string>
     <string name="keyboard_layout_persian" msgid="3920643161015888527">"Perzština"</string>
-    <string name="keyboard_layout_azerbaijani" msgid="7315895417176467567">"Azerbajdžančina"</string>
+    <string name="keyboard_layout_azerbaijani" msgid="7315895417176467567">"azerbajdžanské"</string>
     <string name="keyboard_layout_polish" msgid="1121588624094925325">"Poľština"</string>
     <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"bieloruština"</string>
     <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongolčina"</string>
diff --git a/packages/InputDevices/res/values-sl/strings.xml b/packages/InputDevices/res/values-sl/strings.xml
index 09b3c31..334326c 100644
--- a/packages/InputDevices/res/values-sl/strings.xml
+++ b/packages/InputDevices/res/values-sl/strings.xml
@@ -38,7 +38,7 @@
     <string name="keyboard_layout_turkish" msgid="7736163250907964898">"turška"</string>
     <string name="keyboard_layout_turkish_f" msgid="9130320856010776018">"Turščina F"</string>
     <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ukrajinska"</string>
-    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"arabščina"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"arabska"</string>
     <string name="keyboard_layout_greek" msgid="7289253560162386040">"grščina"</string>
     <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"hebrejščina"</string>
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litovščina"</string>
diff --git a/packages/InputDevices/res/values-sv/strings.xml b/packages/InputDevices/res/values-sv/strings.xml
index a08a74b..3d0b945 100644
--- a/packages/InputDevices/res/values-sv/strings.xml
+++ b/packages/InputDevices/res/values-sv/strings.xml
@@ -12,13 +12,13 @@
     <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Tyskt"</string>
     <string name="keyboard_layout_french_label" msgid="813450119589383723">"Franskt"</string>
     <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Franskt (Kanada)"</string>
-    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Ryskt"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"ryska"</string>
     <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Ryskt, Mac"</string>
     <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spanskt"</string>
     <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Franskt (Schweiz)"</string>
     <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Tyskt (Schweiz)"</string>
     <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgiskt"</string>
-    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgariskt"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"bulgariska"</string>
     <string name="keyboard_layout_bulgarian_phonetic" msgid="7568914730360106653">"Bulgariska (fonetiskt)"</string>
     <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italienskt"</string>
     <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danskt"</string>
@@ -38,9 +38,9 @@
     <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turkiskt"</string>
     <string name="keyboard_layout_turkish_f" msgid="9130320856010776018">"turkiska, F"</string>
     <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukrainskt"</string>
-    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabiska"</string>
-    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Grekiska"</string>
-    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebreiska"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"arabiska"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"grekiska"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"hebreiska"</string>
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litauiska"</string>
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanska (latinamerikansk)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"lettiska"</string>
diff --git a/packages/InputDevices/res/values-th/strings.xml b/packages/InputDevices/res/values-th/strings.xml
index 5f60c3d..131c536 100644
--- a/packages/InputDevices/res/values-th/strings.xml
+++ b/packages/InputDevices/res/values-th/strings.xml
@@ -38,7 +38,7 @@
     <string name="keyboard_layout_turkish" msgid="7736163250907964898">"ตุรกี"</string>
     <string name="keyboard_layout_turkish_f" msgid="9130320856010776018">"ภาษาตุรกี F"</string>
     <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ยูเครน"</string>
-    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"ภาษาอารบิค"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"อารบิค"</string>
     <string name="keyboard_layout_greek" msgid="7289253560162386040">"กรีก"</string>
     <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"ฮิบรู"</string>
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ลิทัวเนีย"</string>
diff --git a/packages/InputDevices/res/values-tr/strings.xml b/packages/InputDevices/res/values-tr/strings.xml
index 2877cb7..1a84d0ac 100644
--- a/packages/InputDevices/res/values-tr/strings.xml
+++ b/packages/InputDevices/res/values-tr/strings.xml
@@ -45,7 +45,7 @@
     <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"İspanyolca (Latin)"</string>
     <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letonca"</string>
     <string name="keyboard_layout_persian" msgid="3920643161015888527">"Farsça"</string>
-    <string name="keyboard_layout_azerbaijani" msgid="7315895417176467567">"Azerice"</string>
+    <string name="keyboard_layout_azerbaijani" msgid="7315895417176467567">"Azerbaycan dili"</string>
     <string name="keyboard_layout_polish" msgid="1121588624094925325">"Lehçe"</string>
     <string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Belarusça"</string>
     <string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Moğolca"</string>
diff --git a/packages/InputDevices/res/values-uk/strings.xml b/packages/InputDevices/res/values-uk/strings.xml
index 3b0de34..5368f2c 100644
--- a/packages/InputDevices/res/values-uk/strings.xml
+++ b/packages/InputDevices/res/values-uk/strings.xml
@@ -38,7 +38,7 @@
     <string name="keyboard_layout_turkish" msgid="7736163250907964898">"турецька"</string>
     <string name="keyboard_layout_turkish_f" msgid="9130320856010776018">"Турецька-F"</string>
     <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"українська"</string>
-    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Арабська"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"арабська"</string>
     <string name="keyboard_layout_greek" msgid="7289253560162386040">"Грецька"</string>
     <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Іврит"</string>
     <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Литовська"</string>
diff --git a/packages/PackageInstaller/Android.bp b/packages/PackageInstaller/Android.bp
index 8283ec9..58224b8 100644
--- a/packages/PackageInstaller/Android.bp
+++ b/packages/PackageInstaller/Android.bp
@@ -39,7 +39,8 @@
 
     certificate: "platform",
     privileged: true,
-    platform_apis: true,
+    platform_apis: false,
+    sdk_version: "system_current",
     rename_resources_package: false,
     static_libs: [
         "xz-java",
@@ -60,7 +61,8 @@
 
     certificate: "platform",
     privileged: true,
-    platform_apis: true,
+    platform_apis: false,
+    sdk_version: "system_current",
     rename_resources_package: false,
     overrides: ["PackageInstaller"],
 
@@ -83,7 +85,8 @@
 
     certificate: "platform",
     privileged: true,
-    platform_apis: true,
+    platform_apis: false,
+    sdk_version: "system_current",
     rename_resources_package: false,
     overrides: ["PackageInstaller"],
 
diff --git a/packages/PackageInstaller/AndroidManifest.xml b/packages/PackageInstaller/AndroidManifest.xml
index 6ccebfd..1edb751 100644
--- a/packages/PackageInstaller/AndroidManifest.xml
+++ b/packages/PackageInstaller/AndroidManifest.xml
@@ -10,6 +10,7 @@
     <uses-permission android:name="android.permission.DELETE_PACKAGES" />
     <uses-permission android:name="android.permission.READ_INSTALL_SESSIONS" />
     <uses-permission android:name="android.permission.READ_INSTALLED_SESSION_PATHS" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     <uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS" />
     <uses-permission android:name="android.permission.USE_RESERVED_DISK" />
diff --git a/packages/PackageInstaller/res/layout-television/alert_dialog_button_bar_leanback.xml b/packages/PackageInstaller/res/layout-television/alert_dialog_button_bar_leanback.xml
index 3ced1db..4ff09ad 100644
--- a/packages/PackageInstaller/res/layout-television/alert_dialog_button_bar_leanback.xml
+++ b/packages/PackageInstaller/res/layout-television/alert_dialog_button_bar_leanback.xml
@@ -21,13 +21,13 @@
             android:layout_height="wrap_content"
             android:scrollbarAlwaysDrawVerticalTrack="true"
             android:scrollIndicators="top|bottom"
-            android:fillViewport="true"
-            style="?android:attr/buttonBarStyle">
+            android:fillViewport="true">
     <com.android.packageinstaller.ButtonBarLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layoutDirection="locale"
         android:orientation="horizontal"
+        style="?android:attr/buttonBarStyle"
         android:gravity="start">
 
         <Button
diff --git a/packages/PackageInstaller/res/values-af/strings.xml b/packages/PackageInstaller/res/values-af/strings.xml
index 3545179..8a5738e 100644
--- a/packages/PackageInstaller/res/values-af/strings.xml
+++ b/packages/PackageInstaller/res/values-af/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Program geïnstalleer."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Wil jy hierdie program installeer?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Wil jy hierdie program opdateer?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Dateer hierdie app vanaf <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> op?\n\nHierdie app kry gewoonlik opdaterings vanaf <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. As jy vanaf ’n ander bron opdateer, kan jy in die toekoms dalk opdaterings vanaf enige bron op jou foon kry. Appfunksie kan verander."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Dateer hierdie app op vanaf &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Hierdie app ontvang gewoonlik opdaterings vanaf &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. As jy vanaf ’n ander bron opdateer, kan jy in die toekoms dalk opdaterings vanaf enige bron op jou tablet kry. Appfunksies kan verander.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Dateer hierdie app op vanaf &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Hierdie app ontvang gewoonlik opdaterings vanaf &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. As jy vanaf ’n ander bron opdateer, kan jy in die toekoms dalk opdaterings vanaf enige bron op jou TV kry. Appfunksies kan verander.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Dateer hierdie app op vanaf &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Hierdie app ontvang gewoonlik opdaterings vanaf &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. As jy vanaf ’n ander bron opdateer, kan jy in die toekoms dalk opdaterings vanaf enige bron op jou foon kry. Appfunksies kan verander.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Program nie geïnstalleer nie."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Die installering van die pakket is geblokkeer."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Program is nie geïnstalleer nie omdat pakket met \'n bestaande pakket bots."</string>
diff --git a/packages/PackageInstaller/res/values-am/strings.xml b/packages/PackageInstaller/res/values-am/strings.xml
index 3dab467c..7b664bc 100644
--- a/packages/PackageInstaller/res/values-am/strings.xml
+++ b/packages/PackageInstaller/res/values-am/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"መተግበሪያ ተጭኗል።"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"ይህን መተግበሪያ መጫን ይፈልጋሉ?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"ይህን መተግበሪያ ማዘመን ይፈልጋሉ?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"ይህ መተግበሪያ ከ<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> ይዘምን?\n\nይህ መተግበሪያ በመደበኛነት ዝማኔዎችን ከ<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> ይቀበላል። ከተለየ ምንጭ በማዘመን በስልክዎ ላይ ካለ ማንኛውም ምንጭ የወደፊት ዝማኔዎችን ሊቀበሉ ይችላሉ። የመተግበሪያ ተግባራዊነት ሊለወጥ ይችላል።"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;ይህን መተግበሪያ &lt;b&gt;ከ<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;ያዘምኑ?&lt;/p&gt;&lt;p&gt;ይህ መተግበሪያ በተለምዶ ዝማኔዎችን የሚቀበለው &lt;b&gt;ከ<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&amp;gt ነው። ከተለየ ምንጭ በማዘመን በጡባዊዎ ላይ ካለ ማንኛውም ምንጭ የወደፊት ዝማኔዎችን ሊቀበሉ ይችላሉ። የመተግበሪያ ተግባራዊነት ሊቀየር ይችላል።&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;ይህን መተግበሪያ &lt;b&gt;ከ<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;ያዘምኑ?&lt;/p&gt;&lt;p&gt;ይህ መተግበሪያ በተለምዶ ዝማኔዎችን የሚቀበለው &lt;b&gt;ከ<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&amp;gt ነው። ከተለየ ምንጭ በማዘመን በቲቪዎ ላይ ካለ ማንኛውም ምንጭ የወደፊት ዝማኔዎችን ሊቀበሉ ይችላሉ። የመተግበሪያ ተግባራዊነት ሊቀየር ይችላል።&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;ይህን መተግበሪያ &lt;b&gt;ከ<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;ያዘምኑ?&lt;/p&gt;&lt;p&gt;ይህ መተግበሪያ በተለምዶ ዝማኔዎችን የሚቀበለው &lt;b&gt;ከ<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&amp;gt ነው። ከተለየ ምንጭ በማዘመን በስልክዎ ላይ ካለ ማንኛውም ምንጭ የወደፊት ዝማኔዎችን ሊቀበሉ ይችላሉ። የመተግበሪያ ተግባራዊነት ሊቀየር ይችላል።&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"መተግበሪያ አልተጫነም።"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"ጥቅሉ እንዳይጫን ታግዷል።"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"እንደ ጥቅል ያልተጫነ መተግበሪያ ከነባር ጥቅል ጋር ይጋጫል።"</string>
diff --git a/packages/PackageInstaller/res/values-ar/strings.xml b/packages/PackageInstaller/res/values-ar/strings.xml
index 170c1fc..9a4d7ea 100644
--- a/packages/PackageInstaller/res/values-ar/strings.xml
+++ b/packages/PackageInstaller/res/values-ar/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"تم تثبيت التطبيق."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"هل تريد تثبيت هذا التطبيق؟"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"هل تريد تحديث هذا التطبيق؟"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"هل تريد تحديث هذا التطبيق من خلال \"<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>\"؟\n\nيتلقّى هذا التطبيق التحديثات عادةً من \"<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>\". من خلال إجراء التحديث من مصدر مختلف، قد تتلقّى تحديثات في المستقبل من أي مصدر على هاتفك. قد تتغير وظائف التطبيق."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"‏&lt;p&gt;هل تريد تحديث هذا التطبيق من &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;؟&lt;/p&gt;&lt;p&gt;يتلقّى هذا التطبيق التحديثات عادةً من &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. من خلال تحديثه من مصدر مختلف، قد يتلقّى تحديثات في المستقبل من أي مصدر على جهازك اللوحي. قد تتغير وظائف التطبيق.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"‏&lt;p&gt;هل تريد تحديث هذا التطبيق من &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;؟&lt;/p&gt;&lt;p&gt;يتلقّى هذا التطبيق التحديثات عادةً من &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. من خلال تحديثه من مصدر مختلف، قد يتلقّى تحديثات في المستقبل من أي مصدر على التلفزيون. قد تتغير وظائف التطبيق.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"‏&lt;p&gt;هل تريد تحديث هذا التطبيق من &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;؟&lt;/p&gt;&lt;p&gt;يتلقّى هذا التطبيق التحديثات عادةً من &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. من خلال تحديثه مصدر مختلف، قد تتلقّى تحديثات في المستقبل من أي مصدر على هاتفك. قد تتغير وظائف التطبيق.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"التطبيق ليس مثبتًا."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"تم حظر تثبيت الحزمة."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"لم يتم تثبيت التطبيق لأن حزمة التثبيت تتعارض مع حزمة حالية."</string>
diff --git a/packages/PackageInstaller/res/values-as/strings.xml b/packages/PackageInstaller/res/values-as/strings.xml
index 37f6c13..65f6641 100644
--- a/packages/PackageInstaller/res/values-as/strings.xml
+++ b/packages/PackageInstaller/res/values-as/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"এপ্ ইনষ্টল কৰা হ’ল।"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"আপুনি এই এপ্‌টো ইনষ্টল কৰিবলৈ বিচাৰেনে?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"আপুনি এই এপ্‌টো আপডে’ট কৰিবলৈ বিচাৰেনে?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"এই এপ্‌টো <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>ৰ পৰা আপডে’ট কৰিবনে?\n\nএই এপ্‌টোৱে সাধাৰণতে <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>ৰ পৰা আপডে’ট লাভ কৰে। অন্য এটা উৎসৰ পৰা আপডে’ট কৰি আপুনি যিকোনো উৎসৰ পৰা আপোনাৰ ফ’নত অনাগত আপডে’টসমূহ পাব পাৰে। এপৰ কাৰ্যক্ষমতা সলনি হ’ব পাৰে।"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;ৰ পৰা এই এপ্‌টো আপডে’ট কৰিবনে?&lt;/p&gt;&lt;p&gt;এই এপ্‌টোৱে সাধাৰণতে &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;ৰ পৰা আপডে’ট লাভ কৰে। অন্য এটা উৎসৰ পৰা আপডে’ট কৰি আপুনি যিকোনো উৎসৰ পৰা আপোনাৰ টেবলেটত অনাগত আপডে’টসমূহ পাব পাৰে। এপৰ কাৰ্যক্ষমতা সলনি হ’ব পাৰে।&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;ৰ পৰা এই এপ্‌টো আপডে’ট কৰিবনে?&lt;/p&gt;&lt;p&gt;এই এপ্‌টোৱে সাধাৰণতে &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;ৰ পৰা আপডে’ট লাভ কৰে। অন্য এটা উৎসৰ পৰা আপডে’ট কৰি আপুনি যিকোনো উৎসৰ পৰা আপোনাৰ টিভিত অনাগত আপডে’টসমূহ পাব পাৰে। এপৰ কাৰ্যক্ষমতা সলনি হ’ব পাৰে।&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;ৰ পৰা এই এপ্‌টো আপডে’ট কৰিবনে?&lt;/p&gt;&lt;p&gt;এই এপ্‌টোৱে সাধাৰণতে &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;ৰ পৰা আপডে’ট লাভ কৰে। অন্য এটা উৎসৰ পৰা আপডে’ট কৰি আপুনি যিকোনো উৎসৰ পৰা আপোনাৰ ফ’নত অনাগত আপডে’টসমূহ পাব পাৰে। এপৰ কাৰ্যক্ষমতা সলনি হ’ব পাৰে।&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"এপ্ ইনষ্টল কৰা হোৱা নাই।"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"পেকেজটোৰ ইনষ্টল অৱৰোধ কৰা হৈছে।"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"এপ্‌টো ইনষ্টল কৰিব পৰা নগ\'ল কাৰণ ইয়াৰ সৈতে আগৰে পৰা থকা এটা পেকেজৰ সংঘাত হৈছে।"</string>
diff --git a/packages/PackageInstaller/res/values-az/strings.xml b/packages/PackageInstaller/res/values-az/strings.xml
index ae7b2fc..cf3ea84 100644
--- a/packages/PackageInstaller/res/values-az/strings.xml
+++ b/packages/PackageInstaller/res/values-az/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Tətbiq quraşdırılıb."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Bu tətbiqi quraşdırmaq istəyirsiniz?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Bu tətbiqi güncəlləmək istəyirsiniz?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Bu tətbiq <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> mənbəyindən güncəllənsin?\n\nBu tətbiq adətən <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> mənbəyindən güncəllənmələr qəbul edir. Fərqli mənbədən güncəllədikdə telefonda istənilən mənbədən gələcəkdə güncəllənmələr qəbul edə bilərsiniz. Tətbiq funksionallığı dəyişə bilər."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Bu tətbiq &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; mənbəyindən güncəllənsin?&lt;/p&gt;&lt;p&gt;Bu tətbiq adətən &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; mənbəyindən güncəllənir. Fərqli mənbədən güncəllədikdə gələcəkdə planşetdə istənilən mənbədən güncəlləyə bilərsiniz. Tətbiq funksionallığı dəyişə bilər.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Bu tətbiq &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; mənbəyindən güncəllənsin?&lt;/p&gt;&lt;p&gt;Bu tətbiq adətən &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; mənbəyindən güncəllənir. Fərqli mənbədən güncəllədikdə gələcəkdə TV-də istənilən mənbədən güncəlləyə bilərsiniz. Tətbiq funksionallığı dəyişə bilər.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Bu tətbiq &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; mənbəyindən güncəllənsin?&lt;/p&gt;&lt;p&gt;Bu tətbiq adətən &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; mənbəyindən güncəllənir. Fərqli mənbədən güncəllədikdə gələcəkdə telefonda istənilən mənbədən güncəlləyə bilərsiniz. Tətbiq funksionallığı dəyişə bilər.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Tətbiq quraşdırılmayıb."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Paketin quraşdırılması blok edildi."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Bu paketin mövcud paket ilə ziddiyətinə görə tətbiq quraşdırılmadı."</string>
diff --git a/packages/PackageInstaller/res/values-b+sr+Latn/strings.xml b/packages/PackageInstaller/res/values-b+sr+Latn/strings.xml
index 2b0fa82..77fe3ba 100644
--- a/packages/PackageInstaller/res/values-b+sr+Latn/strings.xml
+++ b/packages/PackageInstaller/res/values-b+sr+Latn/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Aplikacija je instalirana."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Želite da instalirate ovu aplikaciju?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Želite da ažurirate ovu aplikaciju?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Želite da ažurirate ovu aplikaciju iz izvora <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nOva aplikacija se obično ažurira iz izvora <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Ako ažurirate iz drugog izvora, možete da primate buduća ažuriranja iz bilo kog izvora na telefonu. Funkcije aplikacije mogu da se promene."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Ažurirajte ovu aplikaciju kod: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ova aplikacija obično dobija ažuriranja od: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ako ažurirate iz drugog izvora, možete da primate buduća ažuriranja iz bilo kog izvora na tabletu. Funkcije aplikacije će se možda promeniti.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Ažurirajte ovu aplikaciju kod: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ova aplikacija obično dobija ažuriranja od: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ako ažurirate iz drugog izvora, možete da primate buduća ažuriranja iz bilo kog izvora na TV-u. Funkcije aplikacije će se možda promeniti.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Ažurirajte ovu aplikaciju kod: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ova aplikacija obično dobija ažuriranja od: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ako ažurirate iz drugog izvora, možete da primate buduća ažuriranja iz bilo kog izvora na telefonu. Funkcije aplikacije će se možda promeniti.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Aplikacija nije instalirana."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Instaliranje paketa je blokirano."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Aplikacija nije instalirana jer je paket neusaglašen sa postojećim paketom."</string>
diff --git a/packages/PackageInstaller/res/values-be/strings.xml b/packages/PackageInstaller/res/values-be/strings.xml
index d18e009..b10a9e0 100644
--- a/packages/PackageInstaller/res/values-be/strings.xml
+++ b/packages/PackageInstaller/res/values-be/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Праграма ўсталявана."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Усталяваць гэту праграму?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Абнавіць гэту праграму?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Абнавіць праграму ад <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nЗвычайна гэтая праграма атрымлівае абнаўленні ад <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Пры абнаўленні з іншай крыніцы вы, магчыма, будзеце атрымліваць будучыя абнаўленні з любой крыніцы на тэлефоне. Функцыі праграмы могуць змяніцца."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Абнавіць праграму з &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Звычайна гэта праграма атрымлівае абнаўленні з &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Калі абнавіць праграму з іншай крыніцы, то ў будучыні вы, магчыма, будзеце атрымліваць абнаўленні з любых крыніц на планшэце. Функцыі праграмы могуць змяніцца.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Абнавіць праграму з &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Звычайна гэта праграма атрымлівае абнаўленні з &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Калі абнавіць праграму з іншай крыніцы, то ў будучыні вы, магчыма, будзеце атрымліваць абнаўленні з любых крыніц на тэлевізары. Функцыі праграмы могуць змяніцца.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Абнавіць праграму з &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Звычайна гэта праграма атрымлівае абнаўленні з &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Пры абнаўленні з іншай крыніцы вы, магчыма, будзеце атрымліваць будучыя абнаўленні з любой крыніцы на тэлефоне. Функцыі праграмы могуць змяніцца.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Праграма не ўсталявана."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Усталяванне пакета заблакіравана."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Праграма не ўсталявана, таму што пакет канфліктуе з існуючым пакетам."</string>
diff --git a/packages/PackageInstaller/res/values-bg/strings.xml b/packages/PackageInstaller/res/values-bg/strings.xml
index 6dc927f..8d4739c 100644
--- a/packages/PackageInstaller/res/values-bg/strings.xml
+++ b/packages/PackageInstaller/res/values-bg/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Приложението бе инсталирано."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Искате ли да инсталирате това приложение?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Искате ли да актуализирате това приложение?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Да се актуализира ли това приложение от <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nТо обикновено получава актуализации от <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Ако инсталирате актуализация от друг източник, може да получавате бъдещи актуализации от който и да е източник на телефона си. Функционалността на приложението може да се промени."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Това приложение да се актуализира ли от &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Обикновено то получава актуализации от &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ако инсталирате актуализация от друг източник, може да получавате бъдещи актуализации от който и да е източник на таблета си. Функционалността на приложението може да се промени.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Това приложение да се актуализира ли от &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Обикновено то получава актуализации от &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ако инсталирате актуализация от друг източник, може да получавате бъдещи актуализации от който и да е източник на телевизора си. Функционалността на приложението може да се промени.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Това приложение да се актуализира ли от &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Обикновено то получава актуализации от &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ако инсталирате актуализация от друг източник, може да получавате бъдещи актуализации от който и да е източник на телефона си. Функционалността на приложението може да се промени.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Приложението не бе инсталирано."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Инсталирането на пакета бе блокирано."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Приложението не бе инсталирано, тъй като пакетът е в конфликт със съществуващ пакет."</string>
diff --git a/packages/PackageInstaller/res/values-bn/strings.xml b/packages/PackageInstaller/res/values-bn/strings.xml
index 5b5c6dc..d3c8ad7 100644
--- a/packages/PackageInstaller/res/values-bn/strings.xml
+++ b/packages/PackageInstaller/res/values-bn/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"অ্যাপটি ইনস্টল করা হয়ে গেছে।"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"আপনি কি এই অ্যাপটি ইনস্টল করতে চান?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"আপনি কি এই অ্যাপটি আপডেট করতে চান?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> থেকে এই অ্যাপ আপডেট করবেন?\n\nএই অ্যাপ সাধারণত <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> থেকে আপডেট পায়। অন্য কোনও সোর্স থেকে আপডেট করলে, আপনার ফোনে ভবিষ্যতে যেকোনও সোর্স থেকে আপডেট পেতে পারেন। অ্যাপের কার্যকারিতা পরিবর্তন হতে পারে।"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;p&gt; থেকে এই অ্যাপ আপডেট করুন &lt;b&gt;&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;এই অ্যাপটি সাধারণত &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> থেকে আপডেট পায়&lt;/b&gt;. অন্য কোনও সোর্স থেকে আপডেট করলে, আপনার ট্যাবলেটে ভবিষ্যতে যেকোনও সোর্স থেকে আপডেট পেতে পারেন। অ্যাপের কার্যকারিতা হয়ত পরিবর্তন হবে।&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;p&gt; থেকে এই অ্যাপ আপডেট করুন &lt;b&gt;&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;এই অ্যাপটি সাধারণত &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> থেকে আপডেট পায়&lt;/b&gt;. অন্য কোনও সোর্স থেকে আপডেট করলে, আপনার টিভিতে ভবিষ্যতে যেকোনও সোর্স থেকে আপডেট পেতে পারেন। অ্যাপের কার্যকারিতা হয়ত পরিবর্তন হবে।&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;p&gt; থেকে এই অ্যাপ আপডেট করুন &lt;b&gt;&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;এই অ্যাপটি সাধারণত &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> থেকে আপডেট পায়&lt;/b&gt;. অন্য কোনও সোর্স থেকে আপডেট করলে, আপনার ফোনে ভবিষ্যতে যেকোনও সোর্স থেকে আপডেট পেতে পারেন। অ্যাপের কার্যকারিতা হয়ত পরিবর্তন হবে।&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"অ্যাপটি ইনস্টল করা হয়নি।"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"ইনস্টল হওয়া থেকে প্যাকেজটিকে ব্লক করা হয়েছে।"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"আগে থেকেই থাকা একটি প্যাকেজের সাথে প্যাকেজটির সমস্যা সৃষ্টি হওয়ায় অ্যাপটি ইনস্টল করা যায়নি।"</string>
diff --git a/packages/PackageInstaller/res/values-bs/strings.xml b/packages/PackageInstaller/res/values-bs/strings.xml
index e728937..f93263f0 100644
--- a/packages/PackageInstaller/res/values-bs/strings.xml
+++ b/packages/PackageInstaller/res/values-bs/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Aplikacija je instalirana."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Želite li instalirati ovu aplikaciju?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Želite li ažurirati ovu aplikaciju?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Ažurirati aplikaciju iz izvora <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nOva aplikacija obično prima ažuriranja iz izvora <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Ako je ažurirate iz drugog izvora, možda ćete primati buduća ažuriranja iz bilo kojeg izvora na telefonu. Funkcionalnost aplikacije se može promijeniti."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Ažurirajte aplikaciju iz izvora &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Aplikacija obično prima ažuriranja iz izvora &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ako je ažurirate iz drugog izvora, možda ćete primati buduća ažuriranja iz bilo kojeg izvora na tabletu. Funkcionalnost aplikacije se može promijeniti.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Ažurirajte aplikaciju iz izvora &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Aplikacija obično prima ažuriranja iz izvora &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ako je ažurirate iz drugog izvora, možda ćete primati buduća ažuriranja iz bilo kojeg izvora na TV-u. Funkcionalnost aplikacije se može promijeniti.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Ažurirajte aplikaciju iz izvora &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Aplikacija obično prima ažuriranja iz izvora &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ako je ažurirate iz drugog izvora, možda ćete primati buduća ažuriranja iz bilo kojeg izvora na telefonu. Funkcionalnost aplikacije se može promijeniti.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Aplikacija nije instalirana."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Instaliranje ovog paketa je blokirano."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Aplikacija nije instalirana jer paket nije usaglašen s postojećim paketom."</string>
diff --git a/packages/PackageInstaller/res/values-ca/strings.xml b/packages/PackageInstaller/res/values-ca/strings.xml
index 7983375..7a60d46 100644
--- a/packages/PackageInstaller/res/values-ca/strings.xml
+++ b/packages/PackageInstaller/res/values-ca/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"S\'ha instal·lat l\'aplicació."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Vols instal·lar aquesta aplicació?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Vols actualitzar aquesta aplicació?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Vols actualitzar l\'aplicació de <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nAquesta aplicació sol rebre actualitzacions de <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> Si l\'actualitzes des d\'una font diferent, pot ser que en el futur rebis actualitzacions des de qualsevol font del teu telèfon. És possible que la funcionalitat de l\'aplicació canviï."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Vols actualitzar l\'aplicació de &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Aquesta aplicació sol rebre actualitzacions de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Si l\'actualitzes des d\'una font diferent, pot ser que en el futur rebis actualitzacions des de qualsevol font de la teva tauleta. És possible que la funcionalitat de l\'aplicació canviï.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Vols actualitzar l\'aplicació de &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Aquesta aplicació sol rebre actualitzacions de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Si l\'actualitzes des d\'una font diferent, pot ser que en el futur rebis actualitzacions des de qualsevol font del teu televisor. És possible que la funcionalitat de l\'aplicació canviï.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Vols actualitzar l\'aplicació de &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Aquesta aplicació sol rebre actualitzacions de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Si l\'actualitzes des d\'una font diferent, pot ser que en el futur rebis actualitzacions des de qualsevol font del teu telèfon. És possible que la funcionalitat de l\'aplicació canviï.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"No s\'ha instal·lat l\'aplicació."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"El paquet s\'ha bloquejat perquè no es pugui instal·lar."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"L\'aplicació no s\'ha instal·lat perquè el paquet entra en conflicte amb un d\'existent."</string>
@@ -80,7 +82,7 @@
     <string name="uninstall_blocked_profile_owner" msgid="6373897407002404848">"Aquesta aplicació és necessària per al teu perfil i no es pot desinstal·lar."</string>
     <string name="uninstall_blocked_device_owner" msgid="6724602931761073901">"L\'administrador del dispositiu necessita l\'aplicació i no la pots desinstal·lar."</string>
     <string name="manage_device_administrators" msgid="3092696419363842816">"Gestiona aplicacions d\'administració del dispositiu"</string>
-    <string name="manage_users" msgid="1243995386982560813">"Gestiona usuaris"</string>
+    <string name="manage_users" msgid="1243995386982560813">"Gestiona els usuaris"</string>
     <string name="uninstall_failed_msg" msgid="2176744834786696012">"No s\'ha pogut desinstal·lar <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
     <string name="Parse_error_dlg_text" msgid="1661404001063076789">"Hi ha hagut un problema en analitzar el paquet."</string>
     <string name="wear_not_allowed_dlg_title" msgid="8664785993465117517">"Android Wear"</string>
diff --git a/packages/PackageInstaller/res/values-cs/strings.xml b/packages/PackageInstaller/res/values-cs/strings.xml
index c96d27e..0874214 100644
--- a/packages/PackageInstaller/res/values-cs/strings.xml
+++ b/packages/PackageInstaller/res/values-cs/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Aplikace je nainstalována."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Chcete tuto aplikaci nainstalovat?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Chcete tuto aplikaci aktualizovat?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Aktualizovat tuto aplikaci ze zdroje <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nTato aplikace obvykle dostává aktualizace ze zdroje <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Pokud ji aktualizujete z jiného zdroje, budete v budoucnu do telefonu moci dostávat aktualizace z libovolného zdroje. Funkčnost aplikace se může změnit."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Aktualizovat tuto aplikaci ze zdroje &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Tato aplikace obvykle dostává aktualizace ze zdroje &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Pokud ji aktualizujete z jiného zdroje, budete v budoucnu do tabletu moci dostávat aktualizace z libovolného zdroje. Funkčnost aplikace se může změnit.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Aktualizovat tuto aplikaci ze zdroje &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Tato aplikace obvykle dostává aktualizace ze zdroje &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Pokud ji aktualizujete z jiného zdroje, budete v budoucnu do televize moci dostávat aktualizace z libovolného zdroje. Funkčnost aplikace se může změnit.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Aktualizovat tuto aplikaci ze zdroje &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Tato aplikace obvykle dostává aktualizace ze zdroje &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Pokud ji aktualizujete z jiného zdroje, budete v budoucnu do telefonu moci dostávat aktualizace z libovolného zdroje. Funkčnost aplikace se může změnit.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Aplikaci nelze nainstalovat."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Instalace balíčku byla zablokována."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Aplikaci nelze nainstalovat, protože balíček je v konfliktu se stávajícím balíčkem."</string>
diff --git a/packages/PackageInstaller/res/values-da/strings.xml b/packages/PackageInstaller/res/values-da/strings.xml
index d8759d4..85032c9 100644
--- a/packages/PackageInstaller/res/values-da/strings.xml
+++ b/packages/PackageInstaller/res/values-da/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Appen er installeret."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Vil du installere denne app?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Vil du opdatere denne app?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Vil du opdatere denne app fra <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nDenne app plejer at modtage opdateringer fra <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Hvis du opdaterer fra en anden kilde, vil du kunne modtage opdateringer fra en hvilken som helst kilde på din telefon fremover. Appfunktionaliteten kan ændre sig."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Vil du opdatere denne app via &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Denne app modtager normalt opdateriner fra &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Hvis du opdaterer fra en anden kilde, vil du kunne modtage opdateringer fra en hvilken som helst kilde på din tablet fremover. Dette kan påvirke appfunktionaliteten.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Vil du opdatere denne app via &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Denne app modtager normalt opdateriner fra &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Hvis du opdaterer fra en anden kilde, vil du kunne modtage opdateringer fra en hvilken som helst kilde på dit fjernsyn fremover. Dette kan påvirke appfunktionaliteten.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Vil du opdatere denne app via &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Denne app modtager normalt opdateriner fra &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Hvis du opdaterer fra en anden kilde, vil du kunne modtage opdateringer fra en hvilken som helst kilde på din telefon fremover. Dette kan påvirke appfunktionaliteten.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Appen blev ikke installeret."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Pakken blev forhindret i at blive installeret."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Appen blev ikke installeret, da pakken er i strid med en eksisterende pakke."</string>
diff --git a/packages/PackageInstaller/res/values-de/strings.xml b/packages/PackageInstaller/res/values-de/strings.xml
index bb55708..b638040b 100644
--- a/packages/PackageInstaller/res/values-de/strings.xml
+++ b/packages/PackageInstaller/res/values-de/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"App wurde installiert."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Möchtest du diese App installieren?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Möchtest du diese App aktualisieren?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Diese App mit einem Update von <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> aktualisieren?\n\nSie erhält normalerweise Updates von <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Wenn du ein Update von einer anderen Quelle verwendest, erhältst du möglicherweise zukünftige Updates von beliebigen Quellen auf deinem Smartphone. Die Funktionalität der App kann sich ändern."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Soll diese App von &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; aktualisiert werden?&lt;/p&gt;&lt;p&gt;Normalerweise erhält diese App Updates von &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Wenn du ein Update von einer anderen Quelle verwendest, erhältst du künftige Updates auf deinem Tablet möglicherweise aus unklaren Quellen. Der Funktionsumfang der App kann sich dadurch ändern.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Soll diese App von &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; aktualisiert werden?&lt;/p&gt;&lt;p&gt;Normalerweise erhält diese App Updates von &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Wenn du ein Update von einer anderen Quelle verwendest, erhältst du künftige Updates auf deinem Fernseher möglicherweise aus unklaren Quellen. Der Funktionsumfang der App kann sich dadurch ändern.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Soll diese App von &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; aktualisiert werden?&lt;/p&gt;&lt;p&gt;Normalerweise erhält diese App Updates von &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Wenn du ein Update von einer anderen Quelle verwendest, erhältst du künftige Updates auf deinem Smartphone möglicherweise aus unklaren Quellen. Der Funktionsumfang der App kann sich dadurch ändern.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"App wurde nicht installiert."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Die Installation des Pakets wurde blockiert."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Die App wurde nicht installiert, da das Paket in Konflikt mit einem bestehenden Paket steht."</string>
diff --git a/packages/PackageInstaller/res/values-el/strings.xml b/packages/PackageInstaller/res/values-el/strings.xml
index 9721a19..43c9b1e 100644
--- a/packages/PackageInstaller/res/values-el/strings.xml
+++ b/packages/PackageInstaller/res/values-el/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Η εφαρμογή εγκαταστάθηκε."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Θέλετε να εγκαταστήσετε αυτήν την εφαρμογή;"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Θέλετε να ενημερώσετε αυτήν την εφαρμογή;"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Να ενημερωθεί αυτή η εφαρμογή από <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>;\n\nΗ συγκεκριμένη εφαρμογή λαμβάνει συνήθως ενημερώσεις από <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Αν κάνετε την ενημέρωση από διαφορετική πηγή, μπορεί να λαμβάνετε μελλοντικές ενημερώσεις από οποιαδήποτε πηγή στο τηλέφωνό σας. Η λειτουργικότητα της εφαρμογής μπορεί να αλλάξει."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Ενημερώστε αυτήν την εφαρμογή από &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Η συγκεκριμένη εφαρμογή λαμβάνει συνήθως ενημερώσεις από &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Αν κάνετε την ενημέρωση από διαφορετική πηγή, μπορεί να λαμβάνετε μελλοντικές ενημερώσεις από οποιαδήποτε πηγή στο tablet σας. Η λειτουργικότητα της εφαρμογής μπορεί να αλλάξει.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Ενημερώστε αυτήν την εφαρμογή από &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Η συγκεκριμένη εφαρμογή λαμβάνει συνήθως ενημερώσεις από &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Αν κάνετε την ενημέρωση από διαφορετική πηγή, μπορεί να λαμβάνετε μελλοντικές ενημερώσεις από οποιαδήποτε πηγή στην τηλεόρασή σας. Η λειτουργικότητα της εφαρμογής μπορεί να αλλάξει.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Ενημερώστε αυτήν την εφαρμογή από &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Η συγκεκριμένη εφαρμογή λαμβάνει συνήθως ενημερώσεις από &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Αν κάνετε την ενημέρωση από διαφορετική πηγή, μπορεί να λαμβάνετε μελλοντικές ενημερώσεις από οποιαδήποτε πηγή στο τηλέφωνό σας. Η λειτουργικότητα της εφαρμογής μπορεί να αλλάξει.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Η εφαρμογή δεν εγκαταστάθηκε."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Η εγκατάσταση του πακέτου αποκλείστηκε."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Η εφαρμογή δεν εγκαταστάθηκε, επειδή το πακέτο είναι σε διένεξη με κάποιο υπάρχον πακέτο."</string>
diff --git a/packages/PackageInstaller/res/values-en-rAU/strings.xml b/packages/PackageInstaller/res/values-en-rAU/strings.xml
index 543dbf6..08b8bf1a 100644
--- a/packages/PackageInstaller/res/values-en-rAU/strings.xml
+++ b/packages/PackageInstaller/res/values-en-rAU/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"App installed."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Do you want to install this app?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Do you want to update this app?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Update this app from <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nThis app normally receives updates from <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. By updating from a different source, you may receive future updates from any source on your phone. App functionality may change."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your tablet. App functionality may change.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your TV. App functionality may change.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your phone. App functionality may change.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"App not installed."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"The package was blocked from being installed."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"App not installed as package conflicts with an existing package."</string>
diff --git a/packages/PackageInstaller/res/values-en-rCA/strings.xml b/packages/PackageInstaller/res/values-en-rCA/strings.xml
index f2457f2..da4a8a0 100644
--- a/packages/PackageInstaller/res/values-en-rCA/strings.xml
+++ b/packages/PackageInstaller/res/values-en-rCA/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"App installed."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Do you want to install this app?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Do you want to update this app?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Update this app from <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nThis app normally receives updates from <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. By updating from a different source, you may receive future updates from any source on your phone. App functionality may change."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your tablet. App functionality may change.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your TV. App functionality may change.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your phone. App functionality may change.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"App not installed."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"The package was blocked from being installed."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"App not installed as package conflicts with an existing package."</string>
diff --git a/packages/PackageInstaller/res/values-en-rGB/strings.xml b/packages/PackageInstaller/res/values-en-rGB/strings.xml
index 543dbf6..08b8bf1a 100644
--- a/packages/PackageInstaller/res/values-en-rGB/strings.xml
+++ b/packages/PackageInstaller/res/values-en-rGB/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"App installed."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Do you want to install this app?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Do you want to update this app?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Update this app from <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nThis app normally receives updates from <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. By updating from a different source, you may receive future updates from any source on your phone. App functionality may change."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your tablet. App functionality may change.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your TV. App functionality may change.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your phone. App functionality may change.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"App not installed."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"The package was blocked from being installed."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"App not installed as package conflicts with an existing package."</string>
diff --git a/packages/PackageInstaller/res/values-en-rIN/strings.xml b/packages/PackageInstaller/res/values-en-rIN/strings.xml
index 543dbf6..08b8bf1a 100644
--- a/packages/PackageInstaller/res/values-en-rIN/strings.xml
+++ b/packages/PackageInstaller/res/values-en-rIN/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"App installed."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Do you want to install this app?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Do you want to update this app?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Update this app from <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nThis app normally receives updates from <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. By updating from a different source, you may receive future updates from any source on your phone. App functionality may change."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your tablet. App functionality may change.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your TV. App functionality may change.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your phone. App functionality may change.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"App not installed."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"The package was blocked from being installed."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"App not installed as package conflicts with an existing package."</string>
diff --git a/packages/PackageInstaller/res/values-en-rXC/strings.xml b/packages/PackageInstaller/res/values-en-rXC/strings.xml
index a674c20..0749a27 100644
--- a/packages/PackageInstaller/res/values-en-rXC/strings.xml
+++ b/packages/PackageInstaller/res/values-en-rXC/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‎‎‎App installed.‎‏‎‎‏‎"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‏‎‏‎‎‎‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎Do you want to install this app?‎‏‎‎‏‎"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎Do you want to update this app?‎‏‎‎‏‎"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎Update this app from ‎‏‎‎‏‏‎<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎This app normally receives updates from ‎‏‎‎‏‏‎<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>‎‏‎‎‏‏‏‎. By updating from a different source, you may receive future updates from any source on your phone. App functionality may change.‎‏‎‎‏‎"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎&lt;p&gt;Update this app from &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your tablet. App functionality may change.&lt;/p&gt;‎‏‎‎‏‎"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎&lt;p&gt;Update this app from &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your TV. App functionality may change.&lt;/p&gt;‎‏‎‎‏‎"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‎&lt;p&gt;Update this app from &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;This app normally receives updates from &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>‎‏‎‎‏‏‏‎&lt;/b&gt;. By updating from a different source, you may receive future updates from any source on your phone. App functionality may change.&lt;/p&gt;‎‏‎‎‏‎"</string>
     <string name="install_failed" msgid="5777824004474125469">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‏‏‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎App not installed.‎‏‎‎‏‎"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‎‎The package was blocked from being installed.‎‏‎‎‏‎"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎‎‏‎‏‎‏‎‎‏‎‎App not installed as package conflicts with an existing package.‎‏‎‎‏‎"</string>
diff --git a/packages/PackageInstaller/res/values-es-rUS/strings.xml b/packages/PackageInstaller/res/values-es-rUS/strings.xml
index 53514fe..3330e5f 100644
--- a/packages/PackageInstaller/res/values-es-rUS/strings.xml
+++ b/packages/PackageInstaller/res/values-es-rUS/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Se instaló la app."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"¿Deseas instalar esta app?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"¿Deseas actualizar esta app?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"¿Quieres actualizar esta app a través <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nEn general, esta suele recibir actualizaciones de <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Si actualizas a través de otra fuente, es posible que recibas las próximas actualizaciones de cualquier fuente en el teléfono. Por ende, podría verse afectada la funcionalidad de la app."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Actualiza esta app desde &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Esta app normalmente recibe actualizaciones desde &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Si actualizas a través de otra fuente, es posible que recibas las próximas actualizaciones de cualquier fuente en la tablet. Las funciones de la app puede cambiar.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Actualiza esta app desde &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Esta app normalmente recibe actualizaciones desde &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Si actualizas a través de otra fuente, es posible que recibas las próximas actualizaciones de cualquier fuente en la TV. Las funciones de la app puede cambiar.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Actualiza esta app desde &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Esta app normalmente recibe actualizaciones desde &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Si actualizas a través de otra fuente, es posible que recibas las próximas actualizaciones de cualquier fuente en el teléfono. Las funciones de la app puede cambiar.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"No se instaló la app."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Se bloqueó el paquete para impedir la instalación."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"No se instaló la app debido a un conflicto con un paquete."</string>
diff --git a/packages/PackageInstaller/res/values-es/strings.xml b/packages/PackageInstaller/res/values-es/strings.xml
index efb73b4..c351f15 100644
--- a/packages/PackageInstaller/res/values-es/strings.xml
+++ b/packages/PackageInstaller/res/values-es/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Aplicación instalada."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"¿Quieres instalar esta aplicación?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"¿Quieres actualizar esta aplicación?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"¿Actualizar esta aplicación con <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nEsta aplicación suele recibir actualizaciones de <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Si actualizas a través de otra fuente, puede que recibas futuras actualizaciones de cualquier fuente de tu teléfono. La funcionalidad de la aplicación puede cambiar."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;¿Actualizar esta aplicación con &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Esta aplicación suele recibir actualizaciones de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Si actualizas a través de otra fuente, puede que recibas futuras actualizaciones de cualquier fuente de tu tablet. La funcionalidad de la aplicación puede cambiar.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;¿Actualizar esta aplicación con &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Esta aplicación suele recibir actualizaciones de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Si actualizas a través de otra fuente, puede que recibas futuras actualizaciones de cualquier fuente de tu TV. La funcionalidad de la aplicación puede cambiar.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;¿Actualizar esta aplicación con &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Esta aplicación suele recibir actualizaciones de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Si actualizas a través de otra fuente, puede que recibas futuras actualizaciones de cualquier fuente de tu teléfono. La funcionalidad de la aplicación puede cambiar.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"No se ha instalado la aplicación."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Se ha bloqueado la instalación del paquete."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"La aplicación no se ha instalado debido a un conflicto con un paquete."</string>
diff --git a/packages/PackageInstaller/res/values-et/strings.xml b/packages/PackageInstaller/res/values-et/strings.xml
index cf488a9..5ecfbf4 100644
--- a/packages/PackageInstaller/res/values-et/strings.xml
+++ b/packages/PackageInstaller/res/values-et/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Rakendus on installitud."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Kas soovite selle rakenduse installida?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Kas soovite seda rakendust värskendada?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Kas värskendada seda rakendust allikast <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nSee rakendus saab tavaliselt värskendusi allikast <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Muust allikast värskendamise korral võite edaspidi saada telefonis värskendusi mis tahes allikast. Rakenduse funktsioonid võivad muutuda."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;See rakendus saab tavaliselt värskendusi omanikult &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Muust allikast värskendamise korral võite edaspidi saada tahvelarvutis värskendusi mis tahes allikast. Rakenduse funktsioonid võivad muutuda.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;See rakendus saab tavaliselt värskendusi omanikult &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Muust allikast värskendamise korral võite edaspidi saada teleris värskendusi mis tahes allikast. Rakenduse funktsioonid võivad muutuda.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Update this app from &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;See rakendus saab tavaliselt värskendusi omanikult &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Muust allikast värskendamise korral võite edaspidi saada telefonis värskendusi mis tahes allikast. Rakenduse funktsioonid võivad muutuda.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Rakendus pole installitud."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Paketi installimine blokeeriti."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Rakendust ei installitud, kuna pakett on olemasoleva paketiga vastuolus."</string>
diff --git a/packages/PackageInstaller/res/values-eu/strings.xml b/packages/PackageInstaller/res/values-eu/strings.xml
index 9dadbed..ec720ac 100644
--- a/packages/PackageInstaller/res/values-eu/strings.xml
+++ b/packages/PackageInstaller/res/values-eu/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Instalatu da aplikazioa."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Aplikazioa instalatu nahi duzu?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Aplikazioa eguneratu nahi duzu?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Aplikazioa <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> zerbitzutik eguneratu nahi duzu?\n\nAplikazioak <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> zerbitzutik jaso ohi ditu eguneratzeak. Beste iturburu batetik eguneratuz gero, baliteke aurrerantzeko eguneratzeak telefonoko edozein iturburutatik jasotzea. Baliteke aplikazioaren funtzioak aldatzea."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Aplikazioa &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; iturburutik eguneratu nahi duzu?&lt;/p&gt;&lt;p&gt;Normalean, &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; iturburuaren eguneratzeak instalatzen dira aplikazioan. Aplikazioa beste iturburu batetik eguneratuz gero, baliteke aurrerantzeko eguneratzeak tabletako edozein iturburutatik jasotzea. Baliteke aplikazioaren funtzioak aldatzea.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Aplikazioa &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; iturburutik eguneratu nahi duzu?&lt;/p&gt;&lt;p&gt;Normalean, &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; iturburuaren eguneratzeak instalatzen dira aplikazioan. Aplikazioa beste iturburu batetik eguneratuz gero, baliteke aurrerantzeko eguneratzeak telebistako edozein iturburutatik jasotzea. Baliteke aplikazioaren funtzioak aldatzea.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Aplikazioa &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; iturburutik eguneratu nahi duzu?&lt;/p&gt;&lt;p&gt;Normalean, &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; iturburuaren eguneratzeak instalatzen dira aplikazioan. Aplikazioa beste iturburu batetik eguneratuz gero, baliteke aurrerantzeko eguneratzeak telefonoko edozein iturburutatik jasotzea. Baliteke aplikazioaren funtzioak aldatzea.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Ez da instalatu aplikazioa."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Paketea instalatzeko aukera blokeatu egin da."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Ez da instalatu aplikazioa, gatazka bat sortu delako lehendik dagoen pakete batekin."</string>
diff --git a/packages/PackageInstaller/res/values-fa/strings.xml b/packages/PackageInstaller/res/values-fa/strings.xml
index 73b070d..7a8b579 100644
--- a/packages/PackageInstaller/res/values-fa/strings.xml
+++ b/packages/PackageInstaller/res/values-fa/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"برنامه نصب شد."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"می‌خواهید این برنامه را نصب کنید؟"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"می‌خواهید این برنامه را به‌روزرسانی کنید؟"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"این برنامه ازطریق <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> به‌روز شود؟\n\nاین برنامه معمولاً به‌روزرسانی‌ها را از <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> دریافت می‌کند. با به‌روزرسانی از منبعی متفاوت، ممکن است به‌روزرسانی‌های بعدی را از هر منبعی در تلفنتان دریافت کنید. قابلیت‌های برنامه ممکن است تغییر کند."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"‏&lt;p&gt;این برنامه ازطریق &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; به‌روز شود؟&lt;/p&gt;&lt;p&gt;این برنامه معمولاً به‌روزرسانی‌ها را از &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; دریافت می‌کند. با به‌روزرسانی از منبعی متفاوت، ممکن است به‌روزرسانی‌های آتی را از هر منبعی در رایانه لوحی‌تان دریافت کنید. ممکن است قابلیت‌های برنامه تغییر کند.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"‏&lt;p&gt;این برنامه ازطریق &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; به‌روز شود؟&lt;/p&gt;&lt;p&gt;این برنامه معمولاً به‌روزرسانی‌ها را از &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; دریافت می‌کند. با به‌روزرسانی از منبعی متفاوت، ممکن است به‌روزرسانی‌های آتی را از هر منبعی در تلویزیون دریافت کنید. ممکن است قابلیت‌های برنامه تغییر کند.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"‏&lt;p&gt;این برنامه ازطریق &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; به‌روز شود؟&lt;/p&gt;&lt;p&gt;این برنامه معمولاً به‌روزرسانی‌ها را از &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; دریافت می‌کند. با به‌روزرسانی از منبعی متفاوت، ممکن است به‌روزرسانی‌های بعدی را از هر منبعی در تلفنتان دریافت کنید. ممکن است قابلیت‌های برنامه تغییر کند.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"برنامه نصب نشد."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"از نصب شدن بسته جلوگیری شد."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"برنامه نصب نشد چون بسته با بسته موجود تداخل دارد."</string>
diff --git a/packages/PackageInstaller/res/values-fi/strings.xml b/packages/PackageInstaller/res/values-fi/strings.xml
index ee8910b..a9b6984 100644
--- a/packages/PackageInstaller/res/values-fi/strings.xml
+++ b/packages/PackageInstaller/res/values-fi/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Sovellus on asennettu."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Haluatko asentaa tämän sovelluksen?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Haluatko päivittää tämän sovelluksen?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Voiko <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> päivittää sovelluksen?\n\nTämän sovelluksen päivitykset tarjoaa yleensä <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Kun päivität uudesta lähteestä, tulevat päivitykset voivat tulla mistä tahansa puhelimella olevasta lähteestä. Sovelluksen toiminnot voivat muuttua."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Päivitä sovellus täältä: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Sovellus saa päivitykset yleensä täältä: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Kun päivität uudesta lähteestä, tulevat päivitykset voivat tulla mistä tahansa tabletilla olevasta lähteestä. Sovelluksen toiminnot voivat muuttua.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Päivitä sovellus täältä: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Sovellus saa päivitykset yleensä täältä: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Kun päivität uudesta lähteestä, tulevat päivitykset voivat tulla mistä tahansa televisiolla olevasta lähteestä. Sovelluksen toiminnot voivat muuttua.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Päivitä sovellus täältä: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Sovellus saa päivitykset yleensä täältä: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Kun päivität uudesta lähteestä, tulevat päivitykset voivat tulla mistä tahansa puhelimella olevasta lähteestä. Sovelluksen toiminnot voivat muuttua.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Sovellusta ei asennettu."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Paketin asennus estettiin."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Sovellusta ei asennettu, koska paketti on ristiriidassa nykyisen paketin kanssa."</string>
diff --git a/packages/PackageInstaller/res/values-fr-rCA/strings.xml b/packages/PackageInstaller/res/values-fr-rCA/strings.xml
index b971c35..0ef53b9 100644
--- a/packages/PackageInstaller/res/values-fr-rCA/strings.xml
+++ b/packages/PackageInstaller/res/values-fr-rCA/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Application installée."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Voulez-vous installer cette application?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Voulez-vous mettre à jour cette application?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Mettre à jour cette application à partir de <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nCette application reçoit normalement des mises à jour de <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. En effectuant une mise à jour à partir d\'une source différente, vous pourriez recevoir des mises à jour futures à partir de n\'importe quelle source sur votre téléphone. Le fonctionnement de l\'application peut en être modifié."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Mettre à jour cette application à partir de &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Cette application reçoit normalement des mises à jour de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. En effectuant une mise à jour à partir d\'une source différente, vous pourriez recevoir des mises à jour futures à partir de n\'importe quelle source sur votre tablette. Le fonctionnement de l\'application peut en être modifié.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Mettre à jour cette application à partir de &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Cette application reçoit normalement des mises à jour de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. En effectuant une mise à jour à partir d\'une source différente, vous pourriez recevoir des mises à jour futures à partir de n\'importe quelle source sur votre téléviseur. Le fonctionnement de l\'application peut en être modifié.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Mettre à jour cette application à partir de &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Cette application reçoit normalement des mises à jour de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. En effectuant une mise à jour à partir d\'une source différente, vous pourriez recevoir des mises à jour futures à partir de n\'importe quelle source sur votre téléphone. Le fonctionnement de l\'application peut en être modifié.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Application non installée."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"L\'installation du paquet a été bloquée."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"L\'application n\'a pas été installée, car le paquet entre en conflit avec un paquet existant."</string>
diff --git a/packages/PackageInstaller/res/values-fr/strings.xml b/packages/PackageInstaller/res/values-fr/strings.xml
index 08d37d1..5065a22 100644
--- a/packages/PackageInstaller/res/values-fr/strings.xml
+++ b/packages/PackageInstaller/res/values-fr/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Application installée."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Voulez-vous installer cette appli ?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Voulez-vous mettre à jour cette appli ?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Mettre à jour cette appli à partir de <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> ?\n\nCette appli reçoit normalement des mises à jour de <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Si vous effectuez la mise à jour à partir d\'une autre source, vous recevrez peut-être les prochaines mises à jour depuis n\'importe quelle source sur votre téléphone. Le fonctionnement de l\'application est susceptible de changer."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Mettez à jour cette appli depuis &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Elle reçoit normalement des mises à jour depuis &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Si vous effectuez la mise à jour à partir d\'une autre source, vous recevrez peut-être les prochaines mises à jour depuis n\'importe quelle source sur votre tablette. Le fonctionnement de l\'application peut changer.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Mettez à jour cette appli depuis &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Elle reçoit normalement des mises à jour depuis &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Si vous effectuez la mise à jour à partir d\'une autre source, vous recevrez peut-être les prochaines mises à jour depuis n\'importe quelle source sur votre téléviseur. Le fonctionnement de l\'application peut changer.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Mettez à jour cette appli depuis &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Elle reçoit normalement des mises à jour depuis &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Si vous effectuez la mise à jour à partir d\'une autre source, vous recevrez peut-être les prochaines mises à jour depuis n\'importe quelle source sur votre téléphone. Le fonctionnement de l\'application peut changer.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Application non installée."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"L\'installation du package a été bloquée."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"L\'application n\'a pas été installée, car le package est en conflit avec un package déjà présent."</string>
diff --git a/packages/PackageInstaller/res/values-gl/strings.xml b/packages/PackageInstaller/res/values-gl/strings.xml
index d6cbf60..694218d 100644
--- a/packages/PackageInstaller/res/values-gl/strings.xml
+++ b/packages/PackageInstaller/res/values-gl/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Instalouse a aplicación."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Queres instalar esta aplicación?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Queres actualizar esta aplicación?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Queres actualizar esta aplicación desde <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nAs actualizacións desta aplicación adoitan provir de <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Se actualizas a aplicación desde unha fonte diferente, pode que, a partir de agora, recibas actualizacións de calquera fonte no teléfono. Poderían cambiar as funcións da aplicación."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Actualiza esta aplicación desde &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Esta aplicación adoita recibir actualizacións de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Se actualizas a aplicación desde unha fonte diferente, pode que, a partir de agora, recibas actualizacións de calquera fonte na tableta. As funcións da aplicación poderían variar.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Actualiza esta aplicación desde &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Esta aplicación adoita recibir actualizacións de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Se actualizas a aplicación desde unha fonte diferente, pode que, a partir de agora, recibas actualizacións de calquera fonte na televisión. As funcións da aplicación poderían variar.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Actualiza esta aplicación desde &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Esta aplicación adoita recibir actualizacións de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Se actualizas a aplicación desde unha fonte diferente, pode que, a partir de agora, recibas actualizacións de calquera fonte no teléfono. As funcións da aplicación poderían variar.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Non se instalou a aplicación"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Bloqueouse a instalación do paquete."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"A aplicación non se instalou porque o paquete presenta un conflito cun paquete que xa hai."</string>
diff --git a/packages/PackageInstaller/res/values-gu/strings.xml b/packages/PackageInstaller/res/values-gu/strings.xml
index dcaa48f..8f5976c 100644
--- a/packages/PackageInstaller/res/values-gu/strings.xml
+++ b/packages/PackageInstaller/res/values-gu/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"ઍપ્લિકેશન ઇન્સ્ટૉલ કરી."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"શું તમે આ ઍપ ઇન્સ્ટૉલ કરવા માગો છો?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"શું તમે આ ઍપ અપડેટ કરવા માગો છો?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"આ ઍપને <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>થી અપડેટ કરવી છે?\n\nઆ ઍપ સામાન્ય રીતે <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>થી અપડેટ મેળવે છે. અલગ સૉર્સથી અપડેટ કરીને, તમે તમારા ફોન પર કોઈપણ સૉર્સથી ભાવિ અપડેટ મેળવી શકો છો. ઍપની કાર્યક્ષમતા બદલાઈ શકે છે."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;શું આ ઍપને &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;થી અપડેટ કરવી છે?&lt;/p&gt;&lt;p&gt;આ ઍપ સામાન્ય રીતે &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;થી અપડેટ મેળવે છે. અલગ સૉર્સથી અપડેટ કરીને, તમે તમારા ટૅબ્લેટ પર કોઈપણ સૉર્સથી ભાવિ અપડેટ મેળવી શકો છો. ઍપની કાર્યક્ષમતામાં ફેરફાર થઈ શકે.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;શું આ ઍપને &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;થી અપડેટ કરવી છે?&lt;/p&gt;&lt;p&gt;આ ઍપ સામાન્ય રીતે &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;થી અપડેટ મેળવે છે. અલગ સૉર્સથી અપડેટ કરીને, તમે તમારા ટીવી પર કોઈપણ સૉર્સથી ભાવિ અપડેટ મેળવી શકો છો. ઍપની કાર્યક્ષમતામાં ફેરફાર થઈ શકે.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;શું આ ઍપને &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;થી અપડેટ કરવી છે?&lt;/p&gt;&lt;p&gt;આ ઍપ સામાન્ય રીતે &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;થી અપડેટ મેળવે છે. અલગ સૉર્સથી અપડેટ કરીને, તમે તમારા ફોન પર કોઈપણ સૉર્સથી ભાવિ અપડેટ મેળવી શકો છો. ઍપની કાર્યક્ષમતામાં ફેરફાર થઈ શકે.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"ઍપ્લિકેશન ઇન્સ્ટૉલ કરી નથી."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"પૅકેજને ઇન્સ્ટૉલ થવાથી બ્લૉક કરવામાં આવ્યું હતું."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"પૅકેજનો અસ્તિત્વમાંના પૅકેજ સાથે વિરોધાભાસ હોવાને કારણે ઍપ્લિકેશન ઇન્સ્ટૉલ થઈ નથી."</string>
diff --git a/packages/PackageInstaller/res/values-hi/strings.xml b/packages/PackageInstaller/res/values-hi/strings.xml
index 48fabd1..ddb16dd 100644
--- a/packages/PackageInstaller/res/values-hi/strings.xml
+++ b/packages/PackageInstaller/res/values-hi/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"ऐप्लिकेशन इंस्‍टॉल हो गया."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"क्या आपको यह ऐप्लिकेशन इंस्टॉल करना है?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"क्या आप इस ऐप्लिकेशन को अपडेट करना चाहते हैं?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"क्या इस ऐप्लिकेशन को <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> से अपडेट करना है?\n\nआम तौर पर, इस ऐप्लिकेशन को <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> से अपडेट मिलते हैं. किसी दूसरे सोर्स से अपडेट करने पर, आपको आगे से अपने फ़ोन पर किसी भी सोर्स से अपडेट मिल सकते हैं. ऐप्लिकेशन की मुख्य सुविधाएं और उनके काम करने का तरीका बदल सकता है."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;क्या इस ऐप्लिकेशन को &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; से अपडेट करना है?&lt;/p&gt;&lt;p&gt;आम तौर पर, इस ऐप्लिकेशन को &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; से अपडेट मिलते हैं. किसी दूसरे सोर्स से अपडेट करने पर, आपको आगे से अपने टैबलेट पर किसी भी सोर्स से अपडेट मिल सकते हैं. ऐप्लिकेशन की मुख्य सुविधाएं और उनके काम करने का तरीका बदल सकता है.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;क्या इस ऐप्लिकेशन को &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; से अपडेट करना है?&lt;/p&gt;&lt;p&gt;आम तौर पर, इस ऐप्लिकेशन को &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; से अपडेट मिलते हैं. किसी दूसरे सोर्स से अपडेट करने पर, आपको आगे से अपने टीवी पर किसी भी सोर्स से अपडेट मिल सकते हैं. ऐप्लिकेशन की मुख्य सुविधाएं और उनके काम करने का तरीका बदल सकता है.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;क्या इस ऐप्लिकेशन को &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; से अपडेट करना है?&lt;/p&gt;&lt;p&gt;आम तौर पर, इस ऐप्लिकेशन को &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; से अपडेट मिलते हैं. किसी दूसरे सोर्स से अपडेट करने पर, आपको आगे से अपने फ़ोन पर किसी भी सोर्स से अपडेट मिल सकते हैं. ऐप्लिकेशन की मुख्य सुविधाएं और उनके काम करने का तरीका बदल सकता है.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"ऐप्लिकेशन इंस्‍टॉल नहीं हुआ."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"पैकेज को इंस्टॉल होने से ब्लॉक किया हुआ है."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"ऐप्लिकेशन इंस्टॉल नहीं हुआ क्योंकि पैकेज का किसी मौजूदा पैकेज से विरोध है."</string>
diff --git a/packages/PackageInstaller/res/values-hr/strings.xml b/packages/PackageInstaller/res/values-hr/strings.xml
index 2d79d1e..c758f4f 100644
--- a/packages/PackageInstaller/res/values-hr/strings.xml
+++ b/packages/PackageInstaller/res/values-hr/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Aplikacija je instalirana."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Želite li instalirati ovu aplikaciju?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Želite li ažurirati ovu aplikaciju?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Želite li ažurirati ovu aplikaciju s izvora <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nOva aplikacija obično prima ažuriranja s izvora <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Ako je ažurirate s nekog drugog izvora, buduća ažuriranja možete primati s bilo kojeg izvora na svojem telefonu. Funkcije aplikacije mogu se promijeniti."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Želite li ovu aplikaciju ažurirati sa &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ova aplikacija uglavnom prima ažuriranja sa &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ako je ažurirate s nekog drugog izvora, buduća ažuriranja možete primati s bilo kojeg izvora na svojem tabletu. Funkcije aplikacije mogu se promijeniti.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Želite li ovu aplikaciju ažurirati sa &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ova aplikacija uglavnom prima ažuriranja sa &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ako je ažurirate s nekog drugog izvora, buduća ažuriranja možete primati s bilo kojeg izvora na svojem TV-u. Funkcije aplikacije mogu se promijeniti.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Želite li ovu aplikaciju ažurirati sa &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ova aplikacija uglavnom prima ažuriranja sa &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ako je ažurirate s nekog drugog izvora, buduća ažuriranja možete primati s bilo kojeg izvora na svojem telefonu. Funkcije aplikacije mogu se promijeniti.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Aplikacija nije instalirana."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Instaliranje paketa blokirano je."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Aplikacija koja nije instalirana kao paket u sukobu je s postojećim paketom."</string>
diff --git a/packages/PackageInstaller/res/values-hu/strings.xml b/packages/PackageInstaller/res/values-hu/strings.xml
index 98072ef..4fd866d 100644
--- a/packages/PackageInstaller/res/values-hu/strings.xml
+++ b/packages/PackageInstaller/res/values-hu/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Alkalmazás telepítve."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Telepíti ezt az alkalmazást?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Frissíti ezt az alkalmazást?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"A(z) <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> forrásból rissíti ezt az appot?\n\nEz az app általában a következő forrásból kap frissítéseket: <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Ha másik forrásból frissíti, a későbbiekben bármelyik forrásból kaphat frissítéseket a telefonján. Emiatt megváltozhat az app működése."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Frissítse ezt az alkalmazást innen: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ez az alkalmazás általában a következő forrásból kap frissítéseket: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ha másik forrásból frissíti, a későbbiekben bármelyik forrásból kaphat frissítéseket a táblagépén. Emiatt megváltozhat az alkalmazás működése.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Frissítse ezt az alkalmazást innen: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ez az alkalmazás általában a következő forrásból kap frissítéseket: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ha másik forrásból frissíti, a későbbiekben bármelyik forrásból kaphat frissítéseket a tévéjén. Emiatt megváltozhat az alkalmazás működése.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Frissítse ezt az alkalmazást innen: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ez az alkalmazás általában a következő forrásból kap frissítéseket: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ha másik forrásból frissíti, a későbbiekben bármelyik forrásból kaphat frissítéseket a telefonján. Emiatt megváltozhat az alkalmazás működése.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Az alkalmazás nincs telepítve."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"A csomag telepítését letiltotta a rendszer."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"A nem csomagként telepített alkalmazás ütközik egy már létező csomaggal."</string>
@@ -42,7 +44,7 @@
     <string name="unknown_apps_user_restriction_dlg_text" msgid="151020786933988344">"Ez a felhasználó nem telepíthet ismeretlen alkalmazásokat"</string>
     <string name="install_apps_user_restriction_dlg_text" msgid="2154119597001074022">"Ez a felhasználó nem telepíthet alkalmazásokat"</string>
     <string name="ok" msgid="7871959885003339302">"OK"</string>
-    <string name="update_anyway" msgid="8792432341346261969">"Frissítés mindenképp"</string>
+    <string name="update_anyway" msgid="8792432341346261969">"Frissítés"</string>
     <string name="manage_applications" msgid="5400164782453975580">"Alkalmazáskezelés"</string>
     <string name="out_of_space_dlg_title" msgid="4156690013884649502">"Nincs elég hely"</string>
     <string name="out_of_space_dlg_text" msgid="8727714096031856231">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazást nem lehet telepíteni. Szabadítson fel egy kis helyet, és próbálkozzon újra."</string>
diff --git a/packages/PackageInstaller/res/values-hy/strings.xml b/packages/PackageInstaller/res/values-hy/strings.xml
index 4f56568..e5e7cec 100644
--- a/packages/PackageInstaller/res/values-hy/strings.xml
+++ b/packages/PackageInstaller/res/values-hy/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Հավելվածը տեղադրված է:"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Տեղադրե՞լ այս հավելվածը:"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Թարմացնե՞լ այս հավելվածը։"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Թարմացնե՞լ այս հավելվածը <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>-ից։\n\nՍովորաբար այս հավելվածի թարմացումները ստացվում են <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>-ից։ Եթե թարմացնեք այլ աղբյուրից, հետագայում կարող եք ձեր հեռախոսում թարմացումներ ստանալ ցանկացած աղբյուրից։ Հավելվածի գործառույթները կարող են փոփոխվել։"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Թարմացրեք այս հավելվածը &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>-ից&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Հավելվածը սովորաբար թարմացումները ստանում է &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>-ից&lt;/b&gt;։ Եթե թարմացնեք այլ աղբյուրից, հետագայում կարող եք ձեր պլանշետում թարմացումներ ստանալ ցանկացած աղբյուրից։ Հավելվածի գործառույթները կարող են փոխվել։&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Թարմացրեք այս հավելվածը &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>-ից&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Հավելվածը սովորաբար թարմացումները ստանում է &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>-ից&lt;/b&gt;։ Եթե թարմացնեք այլ աղբյուրից, հետագայում կարող եք ձեր հեռուստացույցում թարմացումներ ստանալ ցանկացած աղբյուրից։ Հավելվածի գործառույթները կարող են փոխվել։&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Թարմացրեք այս հավելվածը &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>-ից&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Հավելվածը սովորաբար թարմացումները ստանում է &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>-ից&lt;/b&gt;։ Եթե թարմացնեք այլ աղբյուրից, հետագայում կարող եք ձեր հեռախոսում թարմացումներ ստանալ ցանկացած աղբյուրից։ Հավելվածի գործառույթները կարող են փոխվել։&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Հավելվածը տեղադրված չէ:"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Փաթեթի տեղադրումն արգելափակվել է:"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Հավելվածը չի տեղադրվել, քանի որ տեղադրման փաթեթն ունի հակասություն առկա փաթեթի հետ:"</string>
diff --git a/packages/PackageInstaller/res/values-in/strings.xml b/packages/PackageInstaller/res/values-in/strings.xml
index 0758a1d..a52b63c 100644
--- a/packages/PackageInstaller/res/values-in/strings.xml
+++ b/packages/PackageInstaller/res/values-in/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Aplikasi terinstal."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Ingin menginstal aplikasi ini?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Ingin mengupdate aplikasi ini?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Update aplikasi ini dari <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nAplikasi ini biasanya menerima update dari <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Dengan mengupdate dari sumber yang berbeda, Anda mungkin menerima update berikutnya dari sumber mana pun di ponsel. Fungsi aplikasi mungkin berubah."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Update aplikasi ini dari &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Aplikasi ini biasanya menerima update dari &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Dengan mengupdate dari sumber yang berbeda, Anda mungkin menerima update berikutnya dari sumber mana pun di tablet. Fungsi aplikasi mungkin berubah.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Update aplikasi ini dari &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Aplikasi ini biasanya menerima update dari &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Dengan mengupdate dari sumber yang berbeda, Anda mungkin menerima update berikutnya dari sumber mana pun di TV. Fungsi aplikasi mungkin berubah.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Update aplikasi ini dari &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Aplikasi ini biasanya menerima update dari &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Dengan mengupdate dari sumber yang berbeda, Anda mungkin menerima update berikutnya dari sumber mana pun di ponsel. Fungsi aplikasi mungkin berubah.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Aplikasi tidak terinstal."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Paket diblokir sehingga tidak dapat diinstal."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Aplikasi tidak diinstal karena paket ini bentrok dengan paket yang sudah ada."</string>
diff --git a/packages/PackageInstaller/res/values-is/strings.xml b/packages/PackageInstaller/res/values-is/strings.xml
index 6cbb2ee..b125da1 100644
--- a/packages/PackageInstaller/res/values-is/strings.xml
+++ b/packages/PackageInstaller/res/values-is/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Forritið er uppsett."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Viltu setja upp þetta forrit?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Viltu uppfæra þetta forrit?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Uppfæra þetta forrit frá <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nÞetta forrit fær venjulega uppfærslur frá <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Með því að uppfæra frá öðrum uppruna gætirðu fengið framtíðaruppfærslur frá hvaða uppruna sem er í símanum. Forritseiginleikar kunna að breytast."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Uppfæra þetta forrit frá &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Þetta forrit fær yfirleitt uppfærslur frá &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Með því að uppfæra frá öðrum uppruna gætirðu fengið framtíðaruppfærslur frá hvaða uppruna sem er í spjaldtölvunni. Virkni forrits kann að breytast.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Uppfæra þetta forrit frá &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Þetta forrit fær yfirleitt uppfærslur frá &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Með því að uppfæra frá öðrum uppruna gætirðu fengið framtíðaruppfærslur frá hvaða uppruna sem er í sjónvarpinu. Virkni forrits kann að breytast.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Uppfæra þetta forrit frá &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Þetta forrit fær yfirleitt uppfærslur frá &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Með því að uppfæra frá öðrum uppruna gætirðu fengið framtíðaruppfærslur frá hvaða uppruna sem er í símanum. Virkni forrits kann að breytast.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Forritið er ekki uppsett."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Lokað var á uppsetningu pakkans."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Forritið var ekki sett upp vegna árekstra á milli pakkans og annars pakka."</string>
diff --git a/packages/PackageInstaller/res/values-it/strings.xml b/packages/PackageInstaller/res/values-it/strings.xml
index e635313..03e3925 100644
--- a/packages/PackageInstaller/res/values-it/strings.xml
+++ b/packages/PackageInstaller/res/values-it/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"App installata."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Vuoi installare questa app?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Vuoi aggiornare questa app?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Vuoi aggiornare questa app da <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nGeneralmente l\'app riceve gli aggiornamenti da <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Se la aggiorni da un\'origine diversa, in futuro potresti ricevere gli aggiornamenti da qualsiasi origine sul telefono. La funzionalità dell\'app potrebbe cambiare."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Vuoi aggiornare questa app da &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Generalmente l\'app riceve gli aggiornamenti da &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Se la aggiorni da un\'origine diversa, in futuro potresti ricevere aggiornamenti da qualsiasi origine sul tablet. La funzionalità dell\'app potrebbe cambiare.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Vuoi aggiornare questa app da &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Generalmente l\'app riceve gli aggiornamenti da &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Se la aggiorni da un\'origine diversa, in futuro potresti ricevere aggiornamenti da qualsiasi origine sulla TV. La funzionalità dell\'app potrebbe cambiare.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Vuoi aggiornare questa app da &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Generalmente l\'app riceve gli aggiornamenti da &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Se la aggiorni da un\'origine diversa, in futuro potresti ricevere aggiornamenti da qualsiasi origine sullo smartphone. La funzionalità dell\'app potrebbe cambiare.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"App non installata."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"È stata bloccata l\'installazione del pacchetto."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"App non installata poiché il pacchetto è in conflitto con un pacchetto esistente."</string>
diff --git a/packages/PackageInstaller/res/values-iw/strings.xml b/packages/PackageInstaller/res/values-iw/strings.xml
index cf098ac..6684ec0 100644
--- a/packages/PackageInstaller/res/values-iw/strings.xml
+++ b/packages/PackageInstaller/res/values-iw/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"האפליקציה הותקנה."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"האם ברצונך להתקין אפליקציה זו?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"האם ברצונך לעדכן אפליקציה זו?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"לקבל את העדכון לאפליקציה הזו מ-<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nהאפליקציה הזו בדרך כלל מקבלת עדכונים מ-<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. אם בחרת לעדכן ממקור אחר, יכול להיות שבעתיד יתקבלו עדכונים ממקורות אחרים בטלפון. תכונות האפליקציה יכולות להשתנות."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"‏&lt;p&gt;לקבל את העדכון לאפליקציה הזו מ-&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;האפליקציה הזו בדרך כלל מקבלת עדכונים מ-&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. אם בחרת לעדכן ממקור אחר, יכול להיות שבעתיד יתקבלו עדכונים ממקורות אחרים בטאבלט. תכונות האפליקציה עשויות להשתנות.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"‏&lt;p&gt;לקבל את העדכון לאפליקציה הזו מ-&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;האפליקציה הזו בדרך כלל מקבלת עדכונים מ-&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. אם בחרת לעדכן ממקור אחר, יכול להיות שבעתיד יתקבלו עדכונים ממקורות אחרים בטלוויזיה. תכונות האפליקציה עשויות להשתנות.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"‏&lt;p&gt;לקבל את העדכון לאפליקציה הזו מ-&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;האפליקציה הזו בדרך כלל מקבלת עדכונים מ-&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. אם בחרת לעדכן ממקור אחר, יכול להיות שבעתיד יתקבלו עדכונים ממקורות אחרים בטלפון. תכונות האפליקציה עשויות להשתנות.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"האפליקציה לא הותקנה."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"החבילה נחסמה להתקנה."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"האפליקציה לא הותקנה כי החבילה מתנגשת עם חבילה קיימת."</string>
diff --git a/packages/PackageInstaller/res/values-ja/strings.xml b/packages/PackageInstaller/res/values-ja/strings.xml
index 3e7a6c8..600b6b7 100644
--- a/packages/PackageInstaller/res/values-ja/strings.xml
+++ b/packages/PackageInstaller/res/values-ja/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"アプリをインストールしました。"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"このアプリをインストールしますか?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"このアプリを更新しますか?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"このアプリを <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> から更新しますか?\n\nこのアプリは通常、<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> からアップデートを受信しています。別の提供元から更新することにより、お使いのスマートフォンで今後のアップデートを任意の提供元から受け取ることになります。アプリの機能は変更される場合があります。"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;このアプリを &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; から更新しますか?&lt;/p&gt;&lt;p&gt;このアプリは通常、&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; からアップデートを受信しています。別の提供元から更新することにより、お使いのタブレットで今後のアップデートを任意の提供元から受け取ることになります。アプリの機能は変更される場合があります。&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;このアプリを &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; から更新しますか?&lt;/p&gt;&lt;p&gt;このアプリは通常、&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; からアップデートを受信しています。別の提供元から更新することにより、お使いのテレビで今後のアップデートを任意の提供元から受け取ることになります。アプリの機能は変更される場合があります。&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;このアプリを &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; から更新しますか?&lt;/p&gt;&lt;p&gt;このアプリは通常、&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; からアップデートを受信しています。別の提供元から更新することにより、お使いのスマートフォンで今後のアップデートを任意の提供元から受け取ることになります。アプリの機能は変更される場合があります。&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"アプリはインストールされていません。"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"パッケージのインストールはブロックされています。"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"パッケージが既存のパッケージと競合するため、アプリをインストールできませんでした。"</string>
@@ -70,7 +72,7 @@
     <string name="uninstalling_app" msgid="8866082646836981397">"「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」をアンインストールしています…"</string>
     <string name="uninstall_done" msgid="439354138387969269">"アンインストールが完了しました。"</string>
     <string name="uninstall_done_app" msgid="4588850984473605768">"「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」をアンインストールしました"</string>
-    <string name="uninstall_done_clone_app" msgid="5578308154544195413">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> のクローンを削除しました"</string>
+    <string name="uninstall_done_clone_app" msgid="5578308154544195413">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> のクローンが削除されました"</string>
     <string name="uninstall_failed" msgid="1847750968168364332">"アンインストールできませんでした。"</string>
     <string name="uninstall_failed_app" msgid="5506028705017601412">"「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」をアンインストールできませんでした。"</string>
     <string name="uninstalling_cloned_app" msgid="1826380164974984870">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> のクローンを削除しています…"</string>
diff --git a/packages/PackageInstaller/res/values-ka/strings.xml b/packages/PackageInstaller/res/values-ka/strings.xml
index 0699f0b..c8bf93b 100644
--- a/packages/PackageInstaller/res/values-ka/strings.xml
+++ b/packages/PackageInstaller/res/values-ka/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"აპი დაინსტალირებულია."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"გნებავთ ამ აპის დაყენება?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"გსურთ ამ აპის განახლება?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"გსურთ განაახლოთ ეს აპი <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>-ისგან?\n\nეს აპი, როგორც წესი, განახლებებს იღებს <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>-ისგან. აპის სხვა წყაროდან განახლებით შემდგომში განახლებების მიღებას შეძლებთ ნებისმიერი წყაროდან თქვენს ტელეფონზე. აპის ფუნქციები, შესაძლოა, შეიცვალოს."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;გსურთ განაახლოთ ეს აპი &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;-ისგან?&lt;/p&gt;&lt;p&gt;ეს აპი ჩვეულებრივ განახლებებს იღებს &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;-ისგან. სხვა წყაროდან განახლებით, შეგიძლიათ მიიღოთ მომავალი განახლებები ტაბლეტზე არსებული ნებისმიერი წყაროდან. აპის ფუნქციები შეიძლება შეიცვალოს.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;გსურთ განაახლოთ ეს აპი &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;-ისგან?&lt;/p&gt;&lt;p&gt;ეს აპი ჩვეულებრივ განახლებებს იღებს &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;-ისგან. სხვა წყაროდან განახლებით, შეგიძლიათ მიიღოთ მომავალი განახლებები ტელევიზორზე არსებული ნებისმიერი წყაროდან. აპის ფუნქციები შეიძლება შეიცვალოს.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;გსურთ განაახლოთ ეს აპი &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;-ისგან?&lt;/p&gt;&lt;p&gt;ეს აპი ჩვეულებრივ განახლებებს იღებს &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;-ისგან. აპის სხვა წყაროდან განახლებით შემდგომში განახლებების მიღებას შეძლებთ ნებისმიერი წყაროდან თქვენს ტელეფონზე. აპის ფუნქციები შეიძლება შეიცვალოს.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"აპი დაუინსტალირებელია."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"ამ პაკეტის ინსტალაცია დაბლოკილია."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"აპი ვერ დაინსტალირდა, რადგან პაკეტი კონფლიქტშია არსებულ პაკეტთან."</string>
diff --git a/packages/PackageInstaller/res/values-kk/strings.xml b/packages/PackageInstaller/res/values-kk/strings.xml
index 371aca3..1ccac10 100644
--- a/packages/PackageInstaller/res/values-kk/strings.xml
+++ b/packages/PackageInstaller/res/values-kk/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Қолданба орнатылды."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Бұл қолданбаны орнатқыңыз келе ме?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Бұл қолданбаны жаңартқыңыз келе ме?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Бұл қолданба <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> арқылы жаңартылсын ба?\n\nБұл қолданба әдетте <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> көмегімен жаңартылады. Басқа дереккөзден жаңартсаңыз, телефоныңыздағы кез келген дереккөзден алдағы жаңартулар берілуі мүмкін. Қолданба функциялары өзгеруі мүмкін."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Қолданба &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; дереккөзінен жаңартылсын ба?&lt;/p&gt;&lt;p&gt;Бұл қолданба жаңартуды&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; дереккөзінен қалыпты түрде алады. Басқа дереккөзден жаңартсаңыз, планшетіңіздегі кез келген дереккөзден алдағы жаңартулар берілуі мүмкін. Қолданба функциялары өзгеруі мүмкін.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Қолданба &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; дереккөзінен жаңартылсын ба?&lt;/p&gt;&lt;p&gt;Бұл қолданба жаңартуды&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; дереккөзінен қалыпты түрде алады. Басқа дереккөзден жаңартсаңыз, теледидарыңыздағы кез келген дереккөзден алдағы жаңартулар берілуі мүмкін. Қолданба функциялары өзгеруі мүмкін.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Қолданба &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; дереккөзінен жаңартылсын ба?&lt;/p&gt;&lt;p&gt;Бұл қолданба жаңартуды&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; дереккөзінен қалыпты түрде алады. Басқа дереккөзден жаңартсаңыз, телефоныңыздағы кез келген дереккөзден алдағы жаңартулар берілуі мүмкін. Қолданба функциялары өзгеруі мүмкін.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Қолданба орнатылмады."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Пакетті орнатуға тыйым салынды."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Жаңа пакет пен бұрыннан бар пакеттің арасында қайшылық туындағандықтан, қолданба орнатылмады."</string>
diff --git a/packages/PackageInstaller/res/values-km/strings.xml b/packages/PackageInstaller/res/values-km/strings.xml
index 04dc574..3e3ef99 100644
--- a/packages/PackageInstaller/res/values-km/strings.xml
+++ b/packages/PackageInstaller/res/values-km/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"បាន​ដំឡើង​កម្មវិធី។"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"តើ​អ្នក​ចង់​ដំឡើង​កម្មវិធី​នេះ​ដែរទេ?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"តើអ្នកចង់ដំឡើងកំណែ​កម្មវិធីនេះដែរទេ?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"ដំឡើងកំណែកម្មវិធីនេះពី <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> ឬ?\n\nកម្មវិធីនេះជាធម្មតាទទួលបានកំណែថ្មីពី <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>។ តាមរយៈការដំឡើងកំណែពីប្រភពផ្សេង អ្នកអាចនឹងទទួលបានកំណែថ្មីនាពេលអនាគតពីប្រភពណាក៏បាននៅលើទូរសព្ទរបស់អ្នក។ មុខងារ​កម្មវិធីអាចមានការផ្លាស់ប្ដូរ។"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;ដំឡើងកំណែកម្មវិធីនេះពី &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; ឬ?&lt;/p&gt;&lt;p&gt;ជាធម្មតា កម្មវិធីនេះទទួលបានកំណែថ្មីពី &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;។ តាមរយៈការដំឡើងកំណែពីប្រភពផ្សេង អ្នកអាចទទួលបានកំណែថ្មីៗនាពេលអនាគតពីប្រភពណាក៏បាននៅលើថេប្លេតរបស់អ្នក។ មុខងារ​កម្មវិធីអាចផ្លាស់ប្ដូរ។&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;ដំឡើងកំណែកម្មវិធីនេះពី &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; ឬ?&lt;/p&gt;&lt;p&gt;ជាធម្មតា កម្មវិធីនេះទទួលបានកំណែថ្មីពី &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;។ តាមរយៈការដំឡើងកំណែពីប្រភពផ្សេង អ្នកអាចទទួលបានកំណែថ្មីៗនាពេលអនាគតពីប្រភពណាក៏បាននៅលើទូរទស្សន៍របស់អ្នក។ មុខងារ​កម្មវិធីអាចផ្លាស់ប្ដូរ។&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;ដំឡើងកំណែកម្មវិធីនេះពី &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; ឬ?&lt;/p&gt;&lt;p&gt;ជាធម្មតា កម្មវិធីនេះទទួលបានកំណែថ្មីពី &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;។ តាមរយៈការដំឡើងកំណែពីប្រភពផ្សេង អ្នកអាចនឹងទទួលបានកំណែថ្មីនាពេលអនាគតពីប្រភពណាក៏បាននៅលើទូរសព្ទរបស់អ្នក។ មុខងារ​កម្មវិធីអាចផ្លាស់ប្ដូរ។&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"មិន​បាន​ដំឡើង​កម្មវិធីទេ។"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"កញ្ចប់ត្រូវបានទប់ស្កាត់​មិន​ឱ្យ​ដំឡើង។"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"កម្មវិធីមិនបានដំឡើងទេ ដោយសារកញ្ចប់កម្មវិធីមិនត្រូវគ្នាជាមួយកញ្ចប់ដែលមានស្រាប់។"</string>
diff --git a/packages/PackageInstaller/res/values-kn/strings.xml b/packages/PackageInstaller/res/values-kn/strings.xml
index 0378712..9cfe389 100644
--- a/packages/PackageInstaller/res/values-kn/strings.xml
+++ b/packages/PackageInstaller/res/values-kn/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"ಆ್ಯಪ್‌ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಲಾಗಿದೆ."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"ನೀವು ಈ ಆ್ಯಪ್‌ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಲು ಬಯಸುವಿರಾ?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"ನೀವು ಈ ಆ್ಯಪ್‌ ಅನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲು ಬಯಸುವಿರಾ?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> ನಿಂದ ಈ ಆ್ಯಪ್ ಅನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡಬೇಕೇ?\n\nಈ ಆ್ಯಪ್ ಸಾಮಾನ್ಯವಾಗಿ <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> ನಿಂದ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ. ಬೇರೆ ಮೂಲವೊಂದರಿಂದ ಅಪ್‌ಡೇಟ್‌ ಮಾಡುವ ಮೂಲಕ, ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿರುವ ಯಾವುದೇ ಮೂಲದಿಂದ ಭವಿಷ್ಯದ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ನೀವು ಸ್ವೀಕರಿಸಬಹುದು. ಆ್ಯಪ್‌ನ ಕಾರ್ಯಚಟುವಟಿಕೆಯು ಬದಲಾಗಬಹುದು."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;ಈ ಆ್ಯಪ್ ಅನ್ನು &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; ನಿಂದ ಅಪ್‌ಡೇಟ್ ಮಾಡಬೇಕೇ?&lt;/p&gt;&lt;p&gt;ಈ ಆ್ಯಪ್ ಸಾಮಾನ್ಯವಾಗಿ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; ನಿಂದ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ. ಬೇರೆ ಮೂಲವೊಂದರಿಂದ ಅಪ್‌ಡೇಟ್‌ ಮಾಡುವ ಮೂಲಕ, ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ನಲ್ಲಿರುವ ಯಾವುದೇ ಮೂಲದಿಂದ ನೀವು ಭವಿಷ್ಯದ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಸ್ವೀಕರಿಸಬಹುದು. ಆ್ಯಪ್‌ನ ಕಾರ್ಯಚಟುವಟಿಕೆಯು ಬದಲಾಗಬಹುದು.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;ಈ ಆ್ಯಪ್ ಅನ್ನು &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; ನಿಂದ ಅಪ್‌ಡೇಟ್ ಮಾಡಬೇಕೇ?&lt;/p&gt;&lt;p&gt;ಈ ಆ್ಯಪ್ ಸಾಮಾನ್ಯವಾಗಿ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; ನಿಂದ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ. ಬೇರೆ ಮೂಲವೊಂದರಿಂದ ಅಪ್‌ಡೇಟ್‌ ಮಾಡುವ ಮೂಲಕ, ನಿಮ್ಮ TV ಯಲ್ಲಿರುವ ಯಾವುದೇ ಮೂಲದಿಂದ ನೀವು ಭವಿಷ್ಯದ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಸ್ವೀಕರಿಸಬಹುದು. ಆ್ಯಪ್‌ನ ಕಾರ್ಯಚಟುವಟಿಕೆಯು ಬದಲಾಗಬಹುದು.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;ಈ ಆ್ಯಪ್ ಅನ್ನು &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; ನಿಂದ ಅಪ್‌ಡೇಟ್ ಮಾಡಬೇಕೇ?&lt;/p&gt;&lt;p&gt;ಈ ಆ್ಯಪ್ ಸಾಮಾನ್ಯವಾಗಿ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; ನಿಂದ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ. ಬೇರೆ ಮೂಲವೊಂದರಿಂದ ಅಪ್‌ಡೇಟ್‌ ಮಾಡುವ ಮೂಲಕ, ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿರುವ ಯಾವುದೇ ಮೂಲದಿಂದ ನೀವು ಭವಿಷ್ಯದ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಸ್ವೀಕರಿಸಬಹುದು. ಆ್ಯಪ್‌ನ ಕಾರ್ಯಚಟುವಟಿಕೆಯು ಬದಲಾಗಬಹುದು.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"ಆ್ಯಪ್‌ ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಲಾಗಿಲ್ಲ."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡುವ ಪ್ಯಾಕೇಜ್‌ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"ಪ್ಯಾಕೇಜ್‌ನಂತೆ ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಲಾಗಿರುವ ಆ್ಯಪ್‌ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಪ್ಯಾಕೇಜ್ ಜೊತೆಗೆ ಸಂಘರ್ಷವಾಗುತ್ತದೆ."</string>
@@ -98,7 +100,7 @@
     <string name="anonymous_source_continue" msgid="4375745439457209366">"ಮುಂದುವರಿಸಿ"</string>
     <string name="external_sources_settings" msgid="4046964413071713807">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
     <string name="wear_app_channel" msgid="1960809674709107850">"wear ಆ್ಯಪ್‌ಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್‌/ಅನ್‌ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
-    <string name="app_installed_notification_channel_description" msgid="2695385797601574123">"ಆ್ಯಪ್ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿರುವ ಕುರಿತು ಅಧಿಸೂಚನೆ"</string>
+    <string name="app_installed_notification_channel_description" msgid="2695385797601574123">"ಆ್ಯಪ್ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿರುವ ಕುರಿತು ನೋಟಿಫಿಕೇಶನ್"</string>
     <string name="notification_installation_success_message" msgid="6450467996056038442">"ಯಶಸ್ವಿಯಾಗಿ ಇನ್‌ಸ್ಟಾಲ್ ಆಗಿದೆ"</string>
     <string name="notification_installation_success_status" msgid="3172502643504323321">"\"<xliff:g id="APPNAME">%1$s</xliff:g>\" ಆ್ಯಪ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲಾಗಿದೆ"</string>
 </resources>
diff --git a/packages/PackageInstaller/res/values-ko/strings.xml b/packages/PackageInstaller/res/values-ko/strings.xml
index 06ce095..271ec90 100644
--- a/packages/PackageInstaller/res/values-ko/strings.xml
+++ b/packages/PackageInstaller/res/values-ko/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"앱이 설치되었습니다."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"이 앱을 설치하시겠습니까?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"이 앱을 업데이트하시겠습니까?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>에서 이 앱을 업데이트하시겠습니까?\n\n평소에는 <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>에서 앱을 업데이트했습니다. 다른 출처에서 업데이트를 받으면 향후 휴대전화에 있는 어떤 출처든지 업데이트를 받을 수 있습니다. 앱 기능도 변경될 수 있습니다."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>에서&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;이 앱을 업데이트하세요. 이 앱은 보통&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;에서 업데이트를 받습니다. 다른 출처에서 업데이트를 받으면 향후 태블릿에 있는 어떤 출처에서든지 업데이트를 받을 수 있습니다. 앱 기능이 변경될 수 있습니다.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>에서&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;이 앱을 업데이트하세요. 이 앱은 보통&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;에서 업데이트를 받습니다. 다른 출처에서 앱을 업데이트하면 향후 TV에 있는 어떤 출처에서든지 업데이트를 받을 수 있습니다. 앱 기능이 변경될 수 있습니다.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>에서&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;이 앱을 업데이트하세요. 이 앱은 보통&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;에서 업데이트를 받습니다. 다른 출처에서 업데이트를 받으면 향후 휴대전화에 있는 어떤 출처든지 업데이트를 받을 수 있습니다. 앱 기능이 변경될 수 있습니다.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"앱이 설치되지 않았습니다."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"패키지 설치가 차단되었습니다."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"패키지가 기존 패키지와 충돌하여 앱이 설치되지 않았습니다."</string>
@@ -70,7 +72,7 @@
     <string name="uninstalling_app" msgid="8866082646836981397">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> 제거 중…"</string>
     <string name="uninstall_done" msgid="439354138387969269">"제거를 완료했습니다."</string>
     <string name="uninstall_done_app" msgid="4588850984473605768">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>를 제거했습니다."</string>
-    <string name="uninstall_done_clone_app" msgid="5578308154544195413">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> 클론 삭제됨"</string>
+    <string name="uninstall_done_clone_app" msgid="5578308154544195413">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> 복제 삭제됨"</string>
     <string name="uninstall_failed" msgid="1847750968168364332">"제거하지 못했습니다."</string>
     <string name="uninstall_failed_app" msgid="5506028705017601412">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>을(를) 제거하지 못했습니다."</string>
     <string name="uninstalling_cloned_app" msgid="1826380164974984870">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> 클론 삭제 중…"</string>
@@ -94,7 +96,7 @@
     <string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"휴대전화와 개인 데이터는 알 수 없는 앱의 공격에 더욱 취약합니다. 이 앱을 설치하면 앱 사용으로 인해 발생할 수 있는 모든 휴대전화 손상이나 데이터 손실에 사용자가 책임을 진다는 것에 동의하게 됩니다."</string>
     <string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"태블릿과 개인 데이터는 알 수 없는 앱의 공격에 더욱 취약합니다. 이 앱을 설치하면 앱 사용으로 인해 발생할 수 있는 모든 태블릿 손상이나 데이터 손실에 사용자가 책임을 진다는 것에 동의하게 됩니다."</string>
     <string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"TV와 개인 데이터는 알 수 없는 앱의 공격에 더욱 취약합니다. 이 앱을 설치하면 앱 사용으로 인해 발생할 수 있는 모든 TV 손상이나 데이터 손실에 사용자가 책임을 진다는 것에 동의하게 됩니다."</string>
-    <string name="cloned_app_label" msgid="7503612829833756160">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> 클론"</string>
+    <string name="cloned_app_label" msgid="7503612829833756160">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> 복제"</string>
     <string name="anonymous_source_continue" msgid="4375745439457209366">"계속"</string>
     <string name="external_sources_settings" msgid="4046964413071713807">"설정"</string>
     <string name="wear_app_channel" msgid="1960809674709107850">"Wear 앱 설치/제거"</string>
diff --git a/packages/PackageInstaller/res/values-ky/strings.xml b/packages/PackageInstaller/res/values-ky/strings.xml
index c37775c..5e9948d 100644
--- a/packages/PackageInstaller/res/values-ky/strings.xml
+++ b/packages/PackageInstaller/res/values-ky/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Колдонмо орнотулду."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Бул колдонмону орнотоюн деп жатасызбы?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Бул колдонмону жаңыртайын деп жатасызбы?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Колдонмо <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> аркылуу жаңыртылсынбы?\n\nАдатта бул колдонмо <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> жөнөткөн жаңыртууларды алат. Башка булактан жаңыртуу менен келечекте телефонуңуз ар кайсы булактардан жаңыртылып калат. Колдонмонун функциялары өзгөрүшү мүмкүн."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Колдонмо &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; аркылуу жаңыртылсынбы?&lt;/p&gt;&lt;p&gt;Адатта бул колдонмо &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; жөнөткөн жаңыртууларды алат. Башка булактан жаңыртcаңыз, кийинки жаңыртуулар планшетиңиздеги ар кандай булактардан алынышы мүмкүн. Колдонмонун функциялары өзгөрүшү мүмкүн.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Колдонмо &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; аркылуу жаңыртылсынбы?&lt;/p&gt;&lt;p&gt;Адатта бул колдонмо &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; жөнөткөн жаңыртууларды алат. Башка булактан жаңыртcаңыз, кийинки жаңыртуулар сыналгыңыздагы ар кандай булактардан алынышы мүмкүн. Колдонмонун функциялары өзгөрүшү мүмкүн.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Колдонмо &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; аркылуу жаңыртылсынбы?&lt;/p&gt;&lt;p&gt;Адатта бул колдонмо &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; жөнөткөн жаңыртууларды алат. Башка булактан жаңыртcаңыз, кийинки жаңыртуулар телефонуңуздагы ар кандай булактардан алынышы мүмкүн. Колдонмонун функциялары өзгөрүшү мүмкүн.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Колдонмо орнотулган жок."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Топтомду орнотууга болбойт."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Башка топтом менен дал келбегендиктен колдонмо орнотулган жок."</string>
diff --git a/packages/PackageInstaller/res/values-lo/strings.xml b/packages/PackageInstaller/res/values-lo/strings.xml
index f3912cc..d12bb4b 100644
--- a/packages/PackageInstaller/res/values-lo/strings.xml
+++ b/packages/PackageInstaller/res/values-lo/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"ຕິດຕັ້ງແອັບແລ້ວ."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"ທ່ານຕ້ອງການຕິດຕັ້ງແອັບນີ້ບໍ່?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"ທ່ານຕ້ອງການອັບເດດແອັບນີ້ບໍ່?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"ອັບເດດແອັບນີ້ຈາກ <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> ບໍ?\n\nໂດຍທົ່ວໄປແລ້ວແອັບນີ້ຈະໄດ້ຮັບການອັບເດດຈາກ <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. ການອັບເດດຈາກແຫຼ່ງທີ່ມາອື່ນອາດເຮັດໃຫ້ໂທລະສັບຂອງທ່ານໄດ້ຮັບການອັບເດດຈາກແຫຼ່ງທີ່ມານັ້ນໃນອະນາຄົດ. ຟັງຊັນການເຮັດວຽກຂອງແອັບອາດມີການປ່ຽນແປງ."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;ອັບເດດແອັບນີ້ຈາກ &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;ໂດຍປົກກະຕິແລ້ວແອັບນີ້ຈະໄດ້ຮັບການອັບເດດຈາກ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. ການອັບເດດຈາກແຫຼ່ງທີ່ມາອື່ນອາດເຮັດໃຫ້ແທັບເລັດຂອງທ່ານໄດ້ຮັບການອັບເດດຈາກແຫຼ່ງທີ່ມານັ້ນໃນອະນາຄົດ. ເຊິ່ງອາດເຮັດໃຫ້ຟັງຊັນການນຳໃຊ້ແອັບປ່ຽນແປງ.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;ອັບເດດແອັບນີ້ຈາກ &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;ໂດຍປົກກະຕິແລ້ວແອັບນີ້ຈະໄດ້ຮັບການອັບເດດຈາກ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. ການອັບເດດຈາກແຫຼ່ງທີ່ມາອື່ນອາດເຮັດໃຫ້ໂທລະທັດຂອງທ່ານໄດ້ຮັບການອັບເດດຈາກແຫຼ່ງທີ່ມານັ້ນໃນອະນາຄົດ. ເຊິ່ງອາດເຮັດໃຫ້ຟັງຊັນການນຳໃຊ້ແອັບປ່ຽນແປງ.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;ອັບເດດແອັບນີ້ຈາກ &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;ໂດຍປົກກະຕິແລ້ວແອັບນີ້ຈະໄດ້ຮັບການອັບເດດຈາກ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. ການອັບເດດຈາກແຫຼ່ງທີ່ມາອື່ນອາດເຮັດໃຫ້ໂທລະສັບຂອງທ່ານໄດ້ຮັບການອັບເດດຈາກແຫຼ່ງທີ່ມານັ້ນໃນອະນາຄົດ. ເຊິ່ງອາດເຮັດໃຫ້ຟັງຊັນການນຳໃຊ້ແອັບປ່ຽນແປງ.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"ບໍ່ໄດ້ຕິດຕັ້ງແອັບເທື່ອ."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"ແພັກ​ເກດ​ຖືກບ​ລັອກ​ບໍ່​ໃຫ້​ໄດ້​ຮັບ​ການ​ຕິດ​ຕັ້ງ."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"ບໍ່ໄດ້ຕິດຕັ້ງແອັບເນື່ອງຈາກແພັກເກດຂັດແຍ່ງກັບແພັກເກດທີ່ມີຢູ່ກ່ອນແລ້ວ."</string>
diff --git a/packages/PackageInstaller/res/values-lt/strings.xml b/packages/PackageInstaller/res/values-lt/strings.xml
index a7ec560e..91ae9d1 100644
--- a/packages/PackageInstaller/res/values-lt/strings.xml
+++ b/packages/PackageInstaller/res/values-lt/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Programa įdiegta."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Ar norite įdiegti šią programą?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Ar norite atnaujinti šią programą?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Atnaujinti šią programą iš <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nŠi programa įprastai gauna naujinius iš <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Atnaujinę iš kito šaltinio, būsimus naujinius galite gauti iš bet kurio šaltinio telefone. Gali būti pakeistos programos funkcijos."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Šią programą atnaujinti iš &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ši programa paprastai naujinius gauna iš &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Atnaujinę iš kito šaltinio, būsimus naujinius galite gauti iš bet kurio šaltinio planšetiniame kompiuteryje. Programos funkcijos gali pasikeisti.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Šią programą atnaujinti iš &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ši programa paprastai naujinius gauna iš &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Atnaujinę iš kito šaltinio, būsimus naujinius galite gauti iš bet kurio šaltinio televizoriuje. Programos funkcijos gali pasikeisti.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Šią programą atnaujinti iš &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ši programa paprastai naujinius gauna iš &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Atnaujinę iš kito šaltinio, būsimus naujinius galite gauti iš bet kurio šaltinio telefone. Programos funkcijos gali pasikeisti.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Programa neįdiegta."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Paketas užblokuotas ir negali būti įdiegtas."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Programa neįdiegta, nes paketas nesuderinamas su esamu paketu."</string>
diff --git a/packages/PackageInstaller/res/values-lv/strings.xml b/packages/PackageInstaller/res/values-lv/strings.xml
index 17dd542..c6f9eb4 100644
--- a/packages/PackageInstaller/res/values-lv/strings.xml
+++ b/packages/PackageInstaller/res/values-lv/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Lietotne ir instalēta."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Vai vēlaties instalēt šo lietotni?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Vai vēlaties atjaunināt šo lietotni?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Vai atjaunināt šo lietotni, izmantojot “<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>”?\n\nŠī lietotne parasti saņem atjauninājumus no “<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>”. Veicot atjaunināšanu no cita avota, iespējams, turpmāk tālrunī saņemsiet atjauninājumus no jebkāda avota. Lietotnes funkcionalitāte var mainīties."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Vai atjaunināt šo lietotni, izmantojot &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Šī lietotne parasti saņem atjauninājumus no &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Veicot atjaunināšanu no cita avota, iespējams, turpmāk planšetdatorā saņemsiet atjauninājumus no jebkāda avota. Lietotnes funkcionalitāte var mainīties.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Vai atjaunināt šo lietotni, izmantojot &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Šī lietotne parasti saņem atjauninājumus no &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Veicot atjaunināšanu no cita avota, iespējams, turpmāk televizorā saņemsiet atjauninājumus no jebkāda avota. Lietotnes funkcionalitāte var mainīties.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Vai atjaunināt šo lietotni, izmantojot &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Šī lietotne parasti saņem atjauninājumus no &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Veicot atjaunināšanu no cita avota, iespējams, turpmāk tālrunī saņemsiet atjauninājumus no jebkāda avota. Lietotnes funkcionalitāte var mainīties.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Lietotne nav instalēta."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Pakotnes instalēšana tika bloķēta."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Lietotne netika instalēta, jo pastāv pakotnes konflikts ar esošu pakotni."</string>
diff --git a/packages/PackageInstaller/res/values-mk/strings.xml b/packages/PackageInstaller/res/values-mk/strings.xml
index b8bb6b9..bc5cb90 100644
--- a/packages/PackageInstaller/res/values-mk/strings.xml
+++ b/packages/PackageInstaller/res/values-mk/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Апликацијата е инсталирана."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Дали сакате да ја инсталирате апликацијава?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Дали сакате да ја ажурирате апликацијава?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Ажурирајте ја апликацијава од <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nАпликацијава вообичаено добива ажурирања од<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Со ажурирање од различен извор, може да добивате идни ажурирања од кој било извор на вашиот телефон. Функционалноста на апликацијата може да се промени."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Ажурирајте ја апликацијава од &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Апликацијава вообичаено добива ажурирања од &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Со ажурирање од различен извор, може да добивате идни ажурирања од кој било извор на вашиот таблет. Може да дојде до промени во функционалноста на апликацијата.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Ажурирајте ја апликацијава од &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Апликацијава вообичаено добива ажурирања од &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Со ажурирање од различен извор, може да добивате идни ажурирања од кој било извор на вашиот телевизор. Може да дојде до промени во функционалноста на апликацијата.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Ажурирајте ја апликацијава од &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Апликацијава вообичаено добива ажурирања од &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Со ажурирање од различен извор, може да добивате идни ажурирања од кој било извор на вашиот телефон. Може да дојде до промени во функционалноста на апликацијата.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Апликацијата не е инсталирана."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Инсталирањето на пакетот е блокирано."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Апликација што не е инсталирана како пакет е во конфликт со постоечки пакет."</string>
diff --git a/packages/PackageInstaller/res/values-ml/strings.xml b/packages/PackageInstaller/res/values-ml/strings.xml
index 0535843..a64f87f 100644
--- a/packages/PackageInstaller/res/values-ml/strings.xml
+++ b/packages/PackageInstaller/res/values-ml/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്‌തു."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"ഈ ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്യണോ?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"ഈ ആപ്പ് അപ്‌ഡേറ്റ് ചെയ്യണോ?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> എന്നതിൽ നിന്ന് ഈ ആപ്പ് അപ്‌ഡേറ്റ് ചെയ്യണോ?\n\nഈ ആപ്പിന് സാധാരണയായി <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> എന്നതിൽ നിന്ന് അപ്‌ഡേറ്റുകൾ ലഭിക്കാറുണ്ട്. മറ്റൊരു ഉറവിടത്തിൽ നിന്ന് അപ്‌ഡേറ്റ് ചെയ്യുന്നത് വഴി, നിങ്ങളുടെ ഫോണിലെ ഏത് ഉറവിടത്തിൽ നിന്നും ഭാവിയിൽ അപ്‌ഡേറ്റുകൾ ലഭിക്കാൻ ഇടയുണ്ട്. ആപ്പ് ഫംഗ്ഷണാലിറ്റിയിൽ വ്യത്യാസം വന്നേക്കാം."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt; &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; എന്നതിൽ നിന്ന് ഈ ആപ്പ് അപ്ഡേറ്റ് ചെയ്യണോ?&lt;/p&gt;&lt;p&gt;ഈ ആപ്പിന് സാധാരണയായി &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; എന്നതിൽ നിന്ന് അപ്‌ഡേറ്റുകൾ ലഭിക്കാറുണ്ട്. മറ്റൊരു ഉറവിടത്തിൽ നിന്ന് അപ്‌ഡേറ്റ് ചെയ്യുന്നതിലൂടെ, നിങ്ങളുടെ ടാബ്‌ലെറ്റിലെ ഏത് ഉറവിടത്തിൽ നിന്നും ഭാവിയിൽ അപ്‌ഡേറ്റുകൾ ലഭിച്ചേക്കാം. ആപ്പ് ഫംഗ്ഷണാലിറ്റി മാറിയേക്കാം.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt; &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; എന്നതിൽ നിന്ന് ഈ ആപ്പ് അപ്ഡേറ്റ് ചെയ്യണോ?&lt;/p&gt;&lt;p&gt;ഈ ആപ്പിന് സാധാരണയായി &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; എന്നതിൽ നിന്ന് അപ്‌ഡേറ്റുകൾ ലഭിക്കാറുണ്ട്. മറ്റൊരു ഉറവിടത്തിൽ നിന്ന് അപ്‌ഡേറ്റ് ചെയ്യുന്നതിലൂടെ, നിങ്ങളുടെ ടിവിയിലെ ഏത് ഉറവിടത്തിൽ നിന്നും ഭാവിയിൽ അപ്‌ഡേറ്റുകൾ ലഭിച്ചേക്കാം. ആപ്പ് ഫംഗ്ഷണാലിറ്റി മാറിയേക്കാം.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt; &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; എന്നതിൽ നിന്ന് ഈ ആപ്പ് അപ്ഡേറ്റ് ചെയ്യണോ?&lt;/p&gt;&lt;p&gt;ഈ ആപ്പിന് സാധാരണയായി &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; എന്നതിൽ നിന്ന് അപ്‌ഡേറ്റുകൾ ലഭിക്കാറുണ്ട്. മറ്റൊരു ഉറവിടത്തിൽ നിന്ന് അപ്‌ഡേറ്റ് ചെയ്യുന്നത് വഴി, നിങ്ങളുടെ ഫോണിലെ ഏത് ഉറവിടത്തിൽ നിന്നും ഭാവിയിൽ അപ്‌ഡേറ്റുകൾ ലഭിക്കാൻ ഇടയുണ്ട്. ആപ്പ് ഫംഗ്ഷണാലിറ്റി മാറിയേക്കാം.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്‌തിട്ടില്ല."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"പാക്കേജ് ഇൻസ്‌റ്റാൾ ചെയ്യുന്നത് ബ്ലോക്ക് ചെയ്‌തു."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"പാക്കേജിന് നിലവിലുള്ള പാക്കേജുമായി പൊരുത്തക്കേടുള്ളതിനാൽ, ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്‌തില്ല."</string>
diff --git a/packages/PackageInstaller/res/values-mn/strings.xml b/packages/PackageInstaller/res/values-mn/strings.xml
index 84a3909..a9365b6 100644
--- a/packages/PackageInstaller/res/values-mn/strings.xml
+++ b/packages/PackageInstaller/res/values-mn/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Аппыг суулгасан."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Та энэ аппыг суулгахыг хүсэж байна уу?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Та энэ аппыг шинэчлэхийг хүсэж байна уу?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Аппыг <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>-с шинэчлэх үү?\n\nЭнэ апп ихэвчлэн <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>-с шинэчлэлт хүлээн авдаг. Өөр эх сурвалжаас шинэчилснээр та ирээдүйн шинэчлэлтийг утсан дээрх аливаа эх сурвалжаас хүлээн авч магадгүй. Аппын ажиллагаа өөрчлөгдөж магадгүй."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Энэ аппыг &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>-с шинэчлэх үү&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Энэ апп ихэвчлэн &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>-с шинэчлэлт хүлээн авдаг&lt;/b&gt;. Өөр эх сурвалжаас шинэчилснээр та ирээдүйн шинэчлэлтийг таблет дээрх аливаа эх сурвалжаас хүлээн авч магадгүй. Аппын ажиллагаа өөрчлөгдөж магадгүй.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Энэ аппыг &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>-с шинэчлэх үү&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Энэ апп ихэвчлэн &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>-с шинэчлэлт хүлээн авдаг&lt;/b&gt;. Өөр эх сурвалжаас шинэчилснээр та ирээдүйн шинэчлэлтийг ТВ дээрх аливаа эх сурвалжаас хүлээн авч магадгүй. Аппын ажиллагаа өөрчлөгдөж магадгүй.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Энэ аппыг &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>-с шинэчлэх үү&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Энэ апп ихэвчлэн &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>-с шинэчлэлт хүлээн авдаг&lt;/b&gt;. Өөр эх сурвалжаас шинэчилснээр та ирээдүйн шинэчлэлтийг утсан дээрх аливаа эх сурвалжаас хүлээн авч магадгүй. Аппын ажиллагаа өөрчлөгдөж магадгүй.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Аппыг суулгаагүй."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Багц суулгахыг блоклосон байна."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Багц одоо байгаа багцтай тохирохгүй байгаа тул аппыг суулгаж чадсангүй."</string>
diff --git a/packages/PackageInstaller/res/values-mr/strings.xml b/packages/PackageInstaller/res/values-mr/strings.xml
index 367dede..d6f04b4 100644
--- a/packages/PackageInstaller/res/values-mr/strings.xml
+++ b/packages/PackageInstaller/res/values-mr/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"अ‍ॅप इंस्टॉल झाले."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"तुम्हाला हे ॲप इंस्टॉल करायचे आहे का?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"तुम्हाला हे ॲप अपडेट करायचे आहे का?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> वरून हे अ‍ॅप अपडेट करायचे आहे का?\n\nया अ‍ॅपला सामान्यतः <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> कडून अपडेट मिळतात. वेगवेगळ्या स्रोताकडून अपडेट करून, तुम्हाला तुमच्या फोनवरील कोणत्याही स्रोताकडून भविष्यातील अपडेट मिळू शकतात. अ‍ॅपची कार्यक्षमता बदलू शकते."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;हे अ‍ॅप&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;कडून अपडेट करायचे आहे का?&lt;/p&gt;&lt;p&gt;हे अ‍ॅप सामान्यपणे&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; कडून अपडेट मिळवते. वेगवेगळ्या स्रोताकडून अपडेट करून, तुम्हाला तुमच्या टॅबलेटवरील कोणत्याही स्रोताकडून भविष्यातील अपडेट मिळू शकतात. अ‍ॅपची कार्यक्षमता बदलू शकते.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;हे अ‍ॅप&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;कडून अपडेट करायचे आहे का?&lt;/p&gt;&lt;p&gt;हे अ‍ॅप सामान्यपणे&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; कडून अपडेट मिळवते. वेगवेगळ्या स्रोताकडून अपडेट करून, तुम्हाला तुमच्या टीव्हीवरील कोणत्याही स्रोताकडून भविष्यातील अपडेट मिळू शकतात. अ‍ॅपची कार्यक्षमता बदलू शकते.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;हे अ‍ॅप&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;कडून अपडेट करायचे आहे का?&lt;/p&gt;&lt;p&gt;हे अ‍ॅप सामान्यपणे&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; कडून अपडेट मिळवते. वेगवेगळ्या स्रोताकडून अपडेट करून, तुम्हाला तुमच्या फोनवरील कोणत्याही स्रोताकडून भविष्यातील अपडेट मिळू शकतात. अ‍ॅपची कार्यक्षमता बदलू शकते.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"अ‍ॅप इंस्टॉल झाले नाही."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"पॅकेज इंस्टॉल होण्यापासून ब्लॉक केले होते."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"पॅकेजचा विद्यमान पॅकेजशी विरोध असल्याने अ‍ॅप इंस्टॉल झाले नाही."</string>
diff --git a/packages/PackageInstaller/res/values-ms/strings.xml b/packages/PackageInstaller/res/values-ms/strings.xml
index 6ab6622..80f4be3 100644
--- a/packages/PackageInstaller/res/values-ms/strings.xml
+++ b/packages/PackageInstaller/res/values-ms/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Aplikasi dipasang."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Adakah anda ingin memasang aplikasi ini?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Adakah anda mahu mengemas kini apl ini?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Kemas kinikan apl ini daripada <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nApl ini biasanya menerima kemaskinian daripada <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Dengan membuat kemaskinian daripada sumber yang berbeza, anda mungkin menerima kemaskinian masa hadapan daripada sebarang sumber pada telefon anda. Fungsi apl mungkin berubah."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Kemas kinikan apl ini daripada &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Apl ini biasanya menerima kemaskinian daripada &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Dengan membuat kemaskinian daripada sumber yang berbeza, anda mungkin menerima kemaskinian masa hadapan daripada sebarang sumber pada tablet anda. Fungsi apl mungkin berubah.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Kemas kinikan apl ini daripada &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Apl ini biasanya menerima kemaskinian daripada &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Dengan membuat kemaskinian daripada sumber yang berbeza, anda mungkin menerima kemaskinian masa hadapan daripada sebarang sumber pada TV anda. Fungsi apl mungkin berubah.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Kemas kinikan apl ini daripada &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Apl ini biasanya menerima kemaskinian daripada &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Dengan membuat kemaskinian daripada sumber yang berbeza, anda mungkin menerima kemaskinian masa hadapan daripada sebarang sumber pada telefon anda. Fungsi apl mungkin berubah.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Aplikasi tidak dipasang."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Pakej ini telah disekat daripada dipasang."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Apl tidak dipasang kerana pakej bercanggah dengan pakej yang sedia ada."</string>
diff --git a/packages/PackageInstaller/res/values-my/strings.xml b/packages/PackageInstaller/res/values-my/strings.xml
index 4844d58..77a45899 100644
--- a/packages/PackageInstaller/res/values-my/strings.xml
+++ b/packages/PackageInstaller/res/values-my/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"အက်ပ်ထည့်သွင်းပြီးပါပြီ။"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"ဤအက်ပ်ကို ထည့်သွင်းလိုသလား။"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"ဤအက်ပ်ကို အပ်ဒိတ်လုပ်လိုသလား။"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"ဤအက်ပ်ကို <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> မှ အပ်ဒိတ်လုပ်မလား။\n\nဤအက်ပ်သည် ပုံမှန်အားဖြင့် <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> မှ အပ်ဒိတ်များ ရရှိသည်။ မတူညီသောရင်းမြစ်မှ အပ်ဒိတ်လုပ်ခြင်းဖြင့် ဖုန်းပေါ်တွင် နောင်လာမည့်အပ်ဒိတ်များကို မည်သည့်ရင်းမြစ်မဆိုမှ လက်ခံရယူနိုင်သည်။ အက်ပ်လုပ်ဆောင်ချက် ပြောင်းလဲနိုင်သည်။"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;ဤအက်ပ်ကို &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; မှ အပ်ဒိတ်လုပ်မလား။&lt;/p&gt;&lt;p&gt;ဤအက်ပ်သည် ပုံမှန်အားဖြင့် &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; မှ အပ်ဒိတ်များ ရရှိသည်။ မတူညီသောရင်းမြစ်မှ အပ်ဒိတ်လုပ်ခြင်းဖြင့် တက်ဘလက်ပေါ်တွင် နောင်လာမည့်အပ်ဒိတ်များကို မည်သည့်ရင်းမြစ်မဆိုမှ လက်ခံရယူနိုင်သည်။ အက်ပ်လုပ်ဆောင်ချက် ပြောင်းနိုင်သည်။&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;ဤအက်ပ်ကို &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; မှ အပ်ဒိတ်လုပ်မလား။&lt;/p&gt;&lt;p&gt;ဤအက်ပ်သည် ပုံမှန်အားဖြင့် &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; မှ အပ်ဒိတ်များ ရရှိသည်။ မတူညီသောရင်းမြစ်မှ အပ်ဒိတ်လုပ်ခြင်းဖြင့် TV ပေါ်တွင် နောင်လာမည့်အပ်ဒိတ်များကို မည်သည့်ရင်းမြစ်မဆိုမှ လက်ခံရယူနိုင်သည်။ အက်ပ်လုပ်ဆောင်ချက် ပြောင်းနိုင်သည်။&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;ဤအက်ပ်ကို &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; မှ အပ်ဒိတ်လုပ်မလား။&lt;/p&gt;&lt;p&gt;ဤအက်ပ်သည် ပုံမှန်အားဖြင့် &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; မှ အပ်ဒိတ်များ ရရှိသည်။ မတူညီသောရင်းမြစ်မှ အပ်ဒိတ်လုပ်ခြင်းဖြင့် ဖုန်းပေါ်တွင် နောင်လာမည့်အပ်ဒိတ်များကို မည်သည့်ရင်းမြစ်မဆိုမှ လက်ခံရယူနိုင်သည်။ အက်ပ်လုပ်ဆောင်ချက် ပြောင်းနိုင်သည်။&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"အက်ပ်မထည့်သွင်းရသေးပါ"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"ပက်ကေ့ဂျ်ထည့်သွင်းခြင်းကို ပိတ်ထားသည်။"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"ပက်ကေ့ဂျ်အဖြစ် ထည့်သွင်းမထားသော အက်ပ်သည် လက်ရှိပက်ကေ့ဂျ်နှင့် တိုက်နေသည်။"</string>
diff --git a/packages/PackageInstaller/res/values-nb/strings.xml b/packages/PackageInstaller/res/values-nb/strings.xml
index 7532d7b..89d9762 100644
--- a/packages/PackageInstaller/res/values-nb/strings.xml
+++ b/packages/PackageInstaller/res/values-nb/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Appen er installert."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Vil du installere denne appen?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Vil du oppdatere denne appen?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Vil du oppdatere denne appen fra <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nDenne appen mottar vanligvis oppdateringer fra <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Hvis du oppdaterer fra en annen kilde, kan du få fremtidige oppdateringer fra en hvilken som helst kilde på telefonen. Appfunksjonaliteten kan endres."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Vil du oppdatere denne appen fra &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Denne appen mottar vanligvis oppdateringer fra &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Hvis du oppdaterer fra en annen kilde, kan du få fremtidige oppdateringer fra en hvilken som helst kilde på nettbrettet. Appfunksjonaliteten kan endres.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Vil du oppdatere denne appen fra &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Denne appen mottar vanligvis oppdateringer fra &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Hvis du oppdaterer fra en annen kilde, kan du få fremtidige oppdateringer fra en hvilken som helst kilde på TV-en. Appfunksjonaliteten kan endres.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Vil du oppdatere denne appen fra &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Denne appen mottar vanligvis oppdateringer fra &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Hvis du oppdaterer fra en annen kilde, kan du få fremtidige oppdateringer fra en hvilken som helst kilde på telefonen. Appfunksjonaliteten kan endres.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Appen ble ikke installert."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Pakken er blokkert fra å bli installert."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Appen ble ikke installert fordi pakken er i konflikt med en eksisterende pakke."</string>
diff --git a/packages/PackageInstaller/res/values-ne/strings.xml b/packages/PackageInstaller/res/values-ne/strings.xml
index 14f387f..23a689f 100644
--- a/packages/PackageInstaller/res/values-ne/strings.xml
+++ b/packages/PackageInstaller/res/values-ne/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"एप इन्स्टल गरियो।"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"तपाईं यो एप इन्स्टल गर्न चाहनुहुन्छ?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"तपाईं यो एप अपडेट गर्न चाहनुहुन्छ?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"यो एप <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> बाट अपडेट गर्ने हो?\n\nयो एपले सामान्यतया <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> बाट अपडेट प्राप्त गर्छ। तपाईंले कुनै फरक स्रोतबाट अपडेट गर्नुभयो भने तपाईं भविष्यमा आफ्नो फोनमा भएको जुनसुकै स्रोतबाट अपडेटहरू प्राप्त गर्न सक्नुहुन्छ। यसो गर्दा एपको विशेषता परिवर्तन हुन सक्छ।"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> &lt;b&gt;बाट यो एप अपडेट गर्ने हो&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;यो एपले सामान्यतया &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> बाट अपडेटहरू प्राप्त गर्छ&lt;/b&gt;। तपाईंले कुनै फरक स्रोतबाट अपडेट गर्नुभयो भने तपाईं भविष्यमा आफ्नो ट्याब्लेटमा भएको जुनसुकै स्रोतबाट अपडेटहरू प्राप्त गर्न सक्नुहुन्छ। एपका मुख्य सुविधाहरू परिवर्तन हुन सक्छन्।&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> &lt;b&gt;बाट यो एप अपडेट गर्ने हो&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;यो एपले सामान्यतया &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> बाट अपडेटहरू प्राप्त गर्छ&lt;/b&gt;। तपाईंले कुनै फरक स्रोतबाट अपडेट गर्नुभयो भने तपाईं भविष्यमा आफ्नो टिभीमा भएको जुनसुकै स्रोतबाट अपडेटहरू प्राप्त गर्न सक्नुहुन्छ। एपका मुख्य सुविधाहरू परिवर्तन हुन सक्छन्।&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> &lt;b&gt;बाट यो एप अपडेट गर्ने हो&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;यो एपले सामान्यतया &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> बाट अपडेटहरू प्राप्त गर्छ&lt;/b&gt;। तपाईंले कुनै फरक स्रोतबाट अपडेट गर्नुभयो भने तपाईं भविष्यमा आफ्नो फोनमा भएको जुनसुकै स्रोतबाट अपडेटहरू प्राप्त गर्न सक्नुहुन्छ। एपका मुख्य सुविधाहरू परिवर्तन हुन सक्छन्।&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"एप स्थापना गरिएन।"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"यो प्याकेज स्थापना गर्ने क्रममा अवरोध गरियो।"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"प्याकेजका रूपमा स्थापना नगरिएको एप विद्यमान प्याकेजसँग मेल खाँदैन।"</string>
diff --git a/packages/PackageInstaller/res/values-nl/strings.xml b/packages/PackageInstaller/res/values-nl/strings.xml
index fab6d51..731dc48 100644
--- a/packages/PackageInstaller/res/values-nl/strings.xml
+++ b/packages/PackageInstaller/res/values-nl/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"App geïnstalleerd."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Wil je deze app installeren?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Wil je deze app updaten?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Deze app updaten via <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nDeze app krijgt gewoonlijk updates via <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Als je updatet via een andere bron, kun je toekomstige updates via elke bron op je telefoon krijgen. De app-functionaliteit kan veranderen."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Deze app updaten via &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Deze app krijgt gewoonlijk updates via &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Als je updatet via een andere bron, kun je toekomstige updates via elke bron op je tablet krijgen. De app-functionaliteit kan veranderen.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Deze app updaten via &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Deze app krijgt gewoonlijk updates via &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Als je updatet via een andere bron, kun je toekomstige updates via elke bron op je tv krijgen. De app-functionaliteit kan veranderen.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Deze app updaten via &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Deze app krijgt gewoonlijk updates via &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Als je updatet via een andere bron, kun je toekomstige updates via elke bron op je telefoon krijgen. De app-functionaliteit kan veranderen.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"App niet geïnstalleerd."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"De installatie van het pakket is geblokkeerd."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"App die niet is geïnstalleerd als pakket conflicteert met een bestaand pakket."</string>
diff --git a/packages/PackageInstaller/res/values-or/strings.xml b/packages/PackageInstaller/res/values-or/strings.xml
index ee6fa60..331852e 100644
--- a/packages/PackageInstaller/res/values-or/strings.xml
+++ b/packages/PackageInstaller/res/values-or/strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="7488448184431507488">"ପ୍ୟାକେଜ୍‌ ଇନଷ୍ଟଲର୍‍"</string>
-    <string name="install" msgid="711829760615509273">"ଇନଷ୍ଟଲ୍‍ କରନ୍ତୁ"</string>
+    <string name="install" msgid="711829760615509273">"ଇନଷ୍ଟଲ କରନ୍ତୁ"</string>
     <string name="update" msgid="3932142540719227615">"ଅପଡେଟ୍ କରନ୍ତୁ"</string>
     <string name="done" msgid="6632441120016885253">"ହୋଇଗଲା"</string>
     <string name="cancel" msgid="1018267193425558088">"ବାତିଲ କରନ୍ତୁ"</string>
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"ଆପ ଇନଷ୍ଟଲ ହୋଇଗଲା।"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"ଆପଣ ଏହି ଆପକୁ ଇନଷ୍ଟଲ୍ କରିବା ପାଇଁ ଚାହୁଁଛନ୍ତି କି?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"ଆପଣ ଏହି ଆପକୁ ଅପଡେଟ୍ କରିବା ପାଇଁ ଚାହୁଁଛନ୍ତି କି?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>ରୁ ଏହି ଆପକୁ ଅପଡେଟ କରିବେ?\n\nଏହି ଆପ ସାଧାରଣତଃ <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>ରୁ ଅପଡେଟ ପାଇଥାଏ। ଏକ ଭିନ୍ନ ସୋର୍ସରୁ ଅପଡେଟ କରି ଆପଣ ଆପଣଙ୍କ ଫୋନରେ ଯେ କୌଣସି ସୋର୍ସରୁ ଭବିଷ୍ୟତର ଅପଡେଟଗୁଡ଼ିକ ପାଇପାରନ୍ତି। ଆପ କାର୍ଯ୍ୟକ୍ଷମତା ପରିବର୍ତ୍ତନ ହୋଇପାରେ।"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;ରୁ ଏହି ଆପକୁ ଅପଡେଟ କରିବେ?&lt;/p&gt;&lt;p&gt;ଏହି ଆପ ସାଧାରଣତଃ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;ରୁ ଅପଡେଟ ପାଇଥାଏ। ଏକ ଭିନ୍ନ ସୋର୍ସରୁ ଅପଡେଟ କରି ଆପଣ ଆପଣଙ୍କ ଟାବଲେଟରେ ଯେ କୌଣସି ସୋର୍ସରୁ ଭବିଷ୍ୟତର ଅପଡେଟଗୁଡ଼ିକ ପାଇପାରନ୍ତି। ଆପ କାର୍ଯ୍ୟକ୍ଷମତା ପରିବର୍ତ୍ତନ ହୋଇପାରେ।&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;ରୁ ଏହି ଆପକୁ ଅପଡେଟ କରିବେ?&lt;/p&gt;&lt;p&gt;ଏହି ଆପ ସାଧାରଣତଃ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;ରୁ ଅପଡେଟ ପାଇଥାଏ। ଏକ ଭିନ୍ନ ସୋର୍ସରୁ ଅପଡେଟ କରି ଆପଣ ଆପଣଙ୍କ ଟିଭିରେ ଯେ କୌଣସି ସୋର୍ସରୁ ଭବିଷ୍ୟତର ଅପଡେଟଗୁଡ଼ିକ ପାଇପାରନ୍ତି। ଆପ କାର୍ଯ୍ୟକ୍ଷମତା ପରିବର୍ତ୍ତନ ହୋଇପାରେ।&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;ରୁ ଏହି ଆପକୁ ଅପଡେଟ କରିବେ?&lt;/p&gt;&lt;p&gt;ଏହି ଆପ ସାଧାରଣତଃ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;ରୁ ଅପଡେଟ ପାଇଥାଏ। ଏକ ଭିନ୍ନ ସୋର୍ସରୁ ଅପଡେଟ କରି ଆପଣ ଆପଣଙ୍କ ଫୋନରେ ଯେ କୌଣସି ସୋର୍ସରୁ ଭବିଷ୍ୟତର ଅପଡେଟଗୁଡ଼ିକ ପାଇପାରନ୍ତି। ଆପ କାର୍ଯ୍ୟକ୍ଷମତା ପରିବର୍ତ୍ତନ ହୋଇପାରେ।&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"ଆପ୍‍ ଇନଷ୍ଟଲ୍‌ ହୋଇନାହିଁ।"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"ଏହି ପ୍ୟାକେଜ୍‌କୁ ଇନଷ୍ଟଲ୍‍ କରାଯିବାରୁ ଅବରୋଧ କରାଯାଇଥିଲା।"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"ପୂର୍ବରୁ ଥିବା ପ୍ୟାକେଜ୍‍ ସହ ଏହି ପ୍ୟାକେଜ୍‌ର ସମସ୍ୟା ଉପୁଯିବାରୁ ଆପ୍‍ ଇନଷ୍ଟଲ୍‍ ହୋଇପାରିଲା ନାହିଁ।"</string>
diff --git a/packages/PackageInstaller/res/values-pa/strings.xml b/packages/PackageInstaller/res/values-pa/strings.xml
index 1ef4921..5bc4624 100644
--- a/packages/PackageInstaller/res/values-pa/strings.xml
+++ b/packages/PackageInstaller/res/values-pa/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"ਐਪ ਸਥਾਪਤ ਕੀਤੀ ਗਈ।"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"ਕੀ ਤੁਸੀਂ ਇਸ ਐਪ ਨੂੰ ਸਥਾਪਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"ਕੀ ਤੁਸੀਂ ਇਸ ਐਪ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"ਕੀ ਇਸ ਐਪ ਨੂੰ <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> ਤੋਂ ਅੱਪਡੇਟ ਕਰਨਾ ਹੈ?\n\nਇਸ ਐਪ ਨੂੰ ਆਮ ਤੌਰ \'ਤੇ <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> ਤੋਂ ਅੱਪਡੇਟਾਂ ਪ੍ਰਾਪਤ ਹੁੰਦੀਆਂ ਹਨ। ਕਿਸੇ ਵੱਖਰੇ ਸਰੋਤ ਤੋਂ ਅੱਪਡੇਟ ਕਰ ਕੇ, ਤੁਸੀਂ ਆਪਣੇ ਫ਼ੋਨ \'ਤੇ ਕਿਸੇ ਵੀ ਸਰੋਤ ਤੋਂ ਭਵਿੱਖੀ ਅੱਪਡੇਟਾਂ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹੋ। ਐਪ ਪ੍ਰਕਾਰਜਾਤਮਕਤਾ ਬਦਲ ਸਕਦੀ ਹੈ।"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;ਕੀ ਇਸ ਐਪ ਨੂੰ &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; ਤੋਂ ਅੱਪਡੇਟ ਕਰਨਾ ਹੈ?&lt;/p&gt;&lt;p&gt;ਇਹ ਐਪ ਆਮ ਤੌਰ \'ਤੇ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; ਤੋਂ ਅੱਪਡੇਟਾਂ ਪ੍ਰਾਪਤ ਕਰਦੀ ਹੈ। ਕਿਸੇ ਵੱਖਰੇ ਸਰੋਤ ਤੋਂ ਅੱਪਡੇਟ ਕਰ ਕੇ, ਤੁਸੀਂ ਆਪਣੇ ਟੈਬਲੈੱਟ \'ਤੇ ਕਿਸੇ ਵੀ ਸਰੋਤ ਤੋਂ ਭਵਿੱਖੀ ਅੱਪਡੇਟਾਂ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹੋ। ਐਪ ਪ੍ਰਕਾਰਜਾਤਮਕਤਾ ਬਦਲ ਸਕਦੀ ਹੈ।&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;ਕੀ ਇਸ ਐਪ ਨੂੰ &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; ਤੋਂ ਅੱਪਡੇਟ ਕਰਨਾ ਹੈ?&lt;/p&gt;&lt;p&gt;ਇਹ ਐਪ ਆਮ ਤੌਰ \'ਤੇ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; ਤੋਂ ਅੱਪਡੇਟਾਂ ਪ੍ਰਾਪਤ ਕਰਦੀ ਹੈ। ਕਿਸੇ ਵੱਖਰੇ ਸਰੋਤ ਤੋਂ ਅੱਪਡੇਟ ਕਰ ਕੇ, ਤੁਸੀਂ ਆਪਣੇ ਟੀਵੀ \'ਤੇ ਕਿਸੇ ਵੀ ਸਰੋਤ ਤੋਂ ਭਵਿੱਖੀ ਅੱਪਡੇਟਾਂ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹੋ। ਐਪ ਪ੍ਰਕਾਰਜਾਤਮਕਤਾ ਬਦਲ ਸਕਦੀ ਹੈ।&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;ਕੀ ਇਸ ਐਪ ਨੂੰ &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; ਤੋਂ ਅੱਪਡੇਟ ਕਰਨਾ ਹੈ?&lt;/p&gt;&lt;p&gt;ਇਹ ਐਪ ਆਮ ਤੌਰ \'ਤੇ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; ਤੋਂ ਅੱਪਡੇਟਾਂ ਪ੍ਰਾਪਤ ਕਰਦੀ ਹੈ। ਕਿਸੇ ਵੱਖਰੇ ਸਰੋਤ ਤੋਂ ਅੱਪਡੇਟ ਕਰ ਕੇ, ਤੁਸੀਂ ਆਪਣੇ ਫ਼ੋਨ \'ਤੇ ਕਿਸੇ ਵੀ ਸਰੋਤ ਤੋਂ ਭਵਿੱਖੀ ਅੱਪਡੇਟਾਂ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹੋ। ਐਪ ਪ੍ਰਕਾਰਜਾਤਮਕਤਾ ਬਦਲ ਸਕਦੀ ਹੈ।&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"ਐਪ ਸਥਾਪਤ ਨਹੀਂ ਕੀਤੀ ਗਈ।"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"ਪੈਕੇਜ ਨੂੰ ਸਥਾਪਤ ਹੋਣ ਤੋਂ ਬਲਾਕ ਕੀਤਾ ਗਿਆ ਸੀ।"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"ਪੈਕੇਜ ਦੇ ਇੱਕ ਮੌਜੂਦਾ ਪੈਕੇਜ ਨਾਲ ਵਿਵਾਦ ਹੋਣ ਕਰਕੇ ਐਪ ਸਥਾਪਤ ਨਹੀਂ ਕੀਤੀ ਗਈ।"</string>
diff --git a/packages/PackageInstaller/res/values-pl/strings.xml b/packages/PackageInstaller/res/values-pl/strings.xml
index e44a391..4aa96f7 100644
--- a/packages/PackageInstaller/res/values-pl/strings.xml
+++ b/packages/PackageInstaller/res/values-pl/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Aplikacja została zainstalowana."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Zainstalować tę aplikację?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Zaktualizować tę aplikację?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Zastosować do aplikacji aktualizację pochodzącą z tego źródła (<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>)?\n\nAktualizacje dla tej aplikacji zwykle dostarcza <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Jeśli zastosujesz aplikację pochodzącą z innego źródła, możesz w przyszłości otrzymywać na telefonie aktualizacje z dowolnych źródeł. Funkcje aplikacji mogą się zmienić."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Zaktualizować tę aplikację, korzystając z: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Aktualizacje tej aplikacji pochodzą zwykle z: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Jeśli zastosujesz aktualizację pochodzącą z innego źródła, możesz w przyszłości otrzymywać na tablecie aktualizacje z dowolnych źródeł. Funkcje aplikacji mogą ulec zmianie.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Zaktualizować tę aplikację, korzystając z: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Aktualizacje tej aplikacji pochodzą zwykle z: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Jeśli zastosujesz aktualizację pochodzącą z innego źródła, możesz w przyszłości otrzymywać na telewizorze aktualizacje z dowolnych źródeł. Funkcje aplikacji mogą ulec zmianie.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Zaktualizować tę aplikację, korzystając z: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Aktualizacje tej aplikacji pochodzą zwykle z: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Jeśli zastosujesz aplikację pochodzącą z innego źródła, możesz w przyszłości otrzymywać na telefonie aktualizacje z dowolnych źródeł. Funkcje aplikacji mogą ulec zmianie.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Aplikacja nie została zainstalowana."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Instalacja pakietu została zablokowana."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Aplikacja nie została zainstalowana, bo powoduje konflikt z istniejącym pakietem."</string>
diff --git a/packages/PackageInstaller/res/values-pt-rBR/strings.xml b/packages/PackageInstaller/res/values-pt-rBR/strings.xml
index 990895c..d8713db 100644
--- a/packages/PackageInstaller/res/values-pt-rBR/strings.xml
+++ b/packages/PackageInstaller/res/values-pt-rBR/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"App instalado."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Quer instalar esse app?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Quer atualizar esse app?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Atualizar este app com <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nAs atualizações dele normalmente são feitas com <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Ao atualizar usando uma origem diferente, as próximas atualizações poderão ser feitas com qualquer origem no seu smartphone. A funcionalidade do app pode mudar."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Atualizar este app de &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Este app costuma receber atualizações de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ao usar uma fonte diferente, as próximas atualizações poderão ser feitas com qualquer fonte no tablet. A funcionalidade do app pode mudar.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Atualizar este app de &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Este app costuma receber atualizações de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ao usar uma fonte diferente, as próximas atualizações poderão ser feitas com qualquer fonte na TV. A funcionalidade do app pode mudar.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Atualizar este app de &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Este app costuma receber atualizações de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ao atualizar usando uma origem diferente, as próximas atualizações poderão ser feitas com qualquer origem no seu smartphone. A funcionalidade do app pode mudar.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"O app não foi instalado."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"A instalação do pacote foi bloqueada."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Como o pacote tem um conflito com um pacote já existente, o app não foi instalado."</string>
diff --git a/packages/PackageInstaller/res/values-pt-rPT/strings.xml b/packages/PackageInstaller/res/values-pt-rPT/strings.xml
index aff06e9..b14459a 100644
--- a/packages/PackageInstaller/res/values-pt-rPT/strings.xml
+++ b/packages/PackageInstaller/res/values-pt-rPT/strings.xml
@@ -25,8 +25,10 @@
     <string name="installing_app" msgid="1165095864863849422">"A instalar <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
     <string name="install_done" msgid="5987363587661783896">"App instalada."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Instalar esta app?"</string>
-    <string name="install_confirm_question_update" msgid="3348888852318388584">"Pretende atualizar esta app?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Atualizar esta app a partir de <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nNormalmente, esta app recebe atualizações de <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Se atualizar a partir de uma origem diferente, poderá receber futuras atualizações de qualquer origem no seu telemóvel. A funcionalidade da app pode sofrer alterações."</string>
+    <string name="install_confirm_question_update" msgid="3348888852318388584">"Quer atualizar esta app?"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Atualize esta app a partir do proprietário &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Normalmente, esta app recebe atualizações a partir do proprietário &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Se atualizar a partir de uma origem diferente, pode receber futuras atualizações de qualquer origem no seu tablet. A funcionalidade da app pode mudar.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Atualize esta app a partir do proprietário &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Normalmente, esta app recebe atualizações a partir do proprietário &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Se atualizar a partir de uma origem diferente, pode receber futuras atualizações de qualquer origem na sua TV. A funcionalidade da app pode mudar.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Atualize esta app a partir do proprietário &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Normalmente, esta app recebe atualizações a partir do proprietário &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Se atualizar a partir de uma origem diferente, pode receber futuras atualizações de qualquer origem no seu telemóvel. A funcionalidade da app pode mudar.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Aplicação não instalada."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Foi bloqueada a instalação do pacote."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"A app não foi instalada porque o pacote entra em conflito com um pacote existente."</string>
@@ -56,11 +58,11 @@
     <string name="uninstall_update_title" msgid="824411791011583031">"Desinstalar atualização"</string>
     <string name="uninstall_activity_text" msgid="1928194674397770771">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> faz parte da seguinte app:"</string>
     <string name="uninstall_application_text" msgid="3816830743706143980">"Desinstalar esta app?"</string>
-    <string name="uninstall_application_text_all_users" msgid="575491774380227119">"Pretende desinstalar esta app para "<b>"todos"</b>" os utilizadores? A app e os respetivos dados serão removidos de "<b>"todos"</b>" os utilizadores do dispositivo."</string>
-    <string name="uninstall_application_text_user" msgid="498072714173920526">"Pretende desinstalar esta app para o utilizador <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
+    <string name="uninstall_application_text_all_users" msgid="575491774380227119">"Quer desinstalar esta app para "<b>"todos"</b>" os utilizadores? A app e os respetivos dados serão removidos de "<b>"todos"</b>" os utilizadores do dispositivo."</string>
+    <string name="uninstall_application_text_user" msgid="498072714173920526">"Quer desinstalar esta app para o utilizador <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
     <string name="uninstall_application_text_current_user_work_profile" msgid="8788387739022366193">"Quer desinstalar esta app do seu perfil de trabalho?"</string>
-    <string name="uninstall_update_text" msgid="863648314632448705">"Pretende substituir esta app pela versão de fábrica? Todos os dados são removidos."</string>
-    <string name="uninstall_update_text_multiuser" msgid="8992883151333057227">"Pretende substituir esta app pela versão de fábrica? Todos os dados são removidos. Esta ação afeta todos os utilizadores deste dispositivo, incluindo os que têm perfis de trabalho."</string>
+    <string name="uninstall_update_text" msgid="863648314632448705">"Quer substituir esta app pela versão de fábrica? Todos os dados são removidos."</string>
+    <string name="uninstall_update_text_multiuser" msgid="8992883151333057227">"Quer substituir esta app pela versão de fábrica? Todos os dados são removidos. Esta ação afeta todos os utilizadores deste dispositivo, incluindo os que têm perfis de trabalho."</string>
     <string name="uninstall_keep_data" msgid="7002379587465487550">"Manter <xliff:g id="SIZE">%1$s</xliff:g> de dados da app."</string>
     <string name="uninstall_application_text_current_user_clone_profile" msgid="835170400160011636">"Quer apagar esta app?"</string>
     <string name="uninstall_application_text_with_clone_instance" msgid="6944473334273349036">"Quer desinstalar esta app? O clone de <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> também vai ser apagado."</string>
diff --git a/packages/PackageInstaller/res/values-pt/strings.xml b/packages/PackageInstaller/res/values-pt/strings.xml
index 990895c..d8713db 100644
--- a/packages/PackageInstaller/res/values-pt/strings.xml
+++ b/packages/PackageInstaller/res/values-pt/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"App instalado."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Quer instalar esse app?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Quer atualizar esse app?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Atualizar este app com <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nAs atualizações dele normalmente são feitas com <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Ao atualizar usando uma origem diferente, as próximas atualizações poderão ser feitas com qualquer origem no seu smartphone. A funcionalidade do app pode mudar."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Atualizar este app de &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Este app costuma receber atualizações de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ao usar uma fonte diferente, as próximas atualizações poderão ser feitas com qualquer fonte no tablet. A funcionalidade do app pode mudar.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Atualizar este app de &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Este app costuma receber atualizações de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ao usar uma fonte diferente, as próximas atualizações poderão ser feitas com qualquer fonte na TV. A funcionalidade do app pode mudar.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Atualizar este app de &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Este app costuma receber atualizações de &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ao atualizar usando uma origem diferente, as próximas atualizações poderão ser feitas com qualquer origem no seu smartphone. A funcionalidade do app pode mudar.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"O app não foi instalado."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"A instalação do pacote foi bloqueada."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Como o pacote tem um conflito com um pacote já existente, o app não foi instalado."</string>
diff --git a/packages/PackageInstaller/res/values-ro/strings.xml b/packages/PackageInstaller/res/values-ro/strings.xml
index de4dd55..fab0c33 100644
--- a/packages/PackageInstaller/res/values-ro/strings.xml
+++ b/packages/PackageInstaller/res/values-ro/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Aplicație instalată."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Vrei să instalezi această aplicație?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Vrei să actualizezi această aplicație?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Actualizezi aplicația de la <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nDe obicei, aplicația primește actualizări de la <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Dacă actualizezi din altă sursă, este posibil să primești actualizări viitoare din orice sursă pe telefon. Funcționalitatea aplicației se poate modifica."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Actualizează aplicația de la &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;De obicei, aplicația primește actualizări de la &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Dacă actualizezi din altă sursă, este posibil să primești actualizări viitoare din orice sursă pe tabletă. Funcționalitatea aplicației se poate modifica.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Actualizează aplicația de la &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;De obicei, aplicația primește actualizări de la &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Dacă actualizezi din altă sursă, este posibil să primești actualizări viitoare din orice sursă pe televizor. Funcționalitatea aplicației se poate modifica.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Actualizează aplicația de la &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;De obicei, aplicația primește actualizări de la &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Dacă actualizezi din altă sursă, este posibil să primești actualizări viitoare din orice sursă pe telefon. Funcționalitatea aplicației se poate modifica.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Aplicația nu a fost instalată."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Instalarea pachetului a fost blocată."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Aplicația nu a fost instalată deoarece pachetul intră în conflict cu un pachet existent."</string>
diff --git a/packages/PackageInstaller/res/values-ru/strings.xml b/packages/PackageInstaller/res/values-ru/strings.xml
index 2e28c30..094a19a 100644
--- a/packages/PackageInstaller/res/values-ru/strings.xml
+++ b/packages/PackageInstaller/res/values-ru/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Приложение установлено."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Установить приложение?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Обновить приложение?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Обновить приложение с помощью <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nОбычно обновления для этого приложения поступают из <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Если обновить приложение с помощью другого источника, в будущем для этого могут использоваться любые источники на телефоне. Функции приложения могут измениться."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Обновить приложение из &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Обычно это приложение получает обновления из &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Если обновить приложение из другого источника, в будущем для обновления могут использоваться любые источники на планшете. Функции приложения могут измениться.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Обновить приложение из &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Обычно это приложение получает обновления из &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Если обновить приложение из другого источника, в будущем для обновления могут использоваться любые источники на телевизоре. Функции приложения могут измениться.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Обновить приложение из &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Обычно это приложение получает обновления из &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Если обновить приложение из другого источника, в будущем для обновления могут использоваться любые источники на телефоне. Функции приложения могут измениться.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Приложение не установлено."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Установка пакета заблокирована."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Приложение не установлено, так как оно конфликтует с другим пакетом."</string>
diff --git a/packages/PackageInstaller/res/values-si/strings.xml b/packages/PackageInstaller/res/values-si/strings.xml
index c300b68..afc2195 100644
--- a/packages/PackageInstaller/res/values-si/strings.xml
+++ b/packages/PackageInstaller/res/values-si/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"යෙදුම ස්ථාපනය කර ඇත."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"මෙම යෙදුම ස්ථාපනය කිරීමට ඔබට අවශ්‍යද?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"ඔබට මෙම යෙදුම යාවත්කාලීන කිරීමට අවශ්‍යද?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> වෙතින් මෙම යෙදුම යාවත්කාලීන කරන්න ද?\n\nමෙම යෙදුමට සාමාන්‍යයෙන් <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> සිට යාවත්කාලීන ලැබේ. වෙනස් මූලාශ්‍රයකින් යාවත්කාලීන කිරීමෙන්, ඔබට ඔබේ දුරකථනයෙහි ඕනෑම මූලාශ්‍රයකින් අනාගත යාවත්කාලීන ලැබීමට ඉඩ ඇත. යෙදුම් ක්‍රියාකාරිත්වය වෙනස් වීමට ඉඩ ඇත."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;මෙම යෙදුම &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;වෙතින් යාවත්කාලීන කරන්න ද?&lt;/p&gt;&lt;p&gt;මෙම යෙදුම සාමාන්‍යයෙන් &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; වෙතින් යාවත්කාලීන ලබා ගනී. වෙනස් මූලාශ්‍රයකින් යාවත්කාලීන කිරීමෙන්, ඔබට ඔබේ ටැබ්ලටයෙහි ඕනෑම මූලාශ්‍රයකින් අනාගත යාවත්කාලීන ලැබීමට ඉඩ ඇත. යෙදුම් ක්‍රියාකාරිත්වය වෙනස් විය හැක.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;මෙම යෙදුම &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;වෙතින් යාවත්කාලීන කරන්න ද?&lt;/p&gt;&lt;p&gt;මෙම යෙදුම සාමාන්‍යයෙන් &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; වෙතින් යාවත්කාලීන ලබා ගනී. වෙනස් මූලාශ්‍රයකින් යාවත්කාලීන කිරීමෙන්, ඔබට ඔබේ TV මත ඕනෑම මූලාශ්‍රයකින් අනාගත යාවත්කාලීන ලැබීමට ඉඩ ඇත. යෙදුම් ක්‍රියාකාරිත්වය වෙනස් විය හැක.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;මෙම යෙදුම &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;වෙතින් යාවත්කාලීන කරන්න ද?&lt;/p&gt;&lt;p&gt;මෙම යෙදුම සාමාන්‍යයෙන් &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; වෙතින් යාවත්කාලීන ලබා ගනී. වෙනස් මූලාශ්‍රයකින් යාවත්කාලීන කිරීමෙන්, ඔබට ඔබේ දුරකථනයෙහි ඕනෑම මූලාශ්‍රයකින් අනාගත යාවත්කාලීන ලැබීමට ඉඩ ඇත. යෙදුම් ක්‍රියාකාරිත්වය වෙනස් විය හැක.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"යෙදුම ස්ථාපනය කර නැත."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"මෙම පැකේජය ස්ථාපනය කිරීම අවහිර කරන ලදි."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"පැකේජය දැනට පවතින පැකේජයක් සමග ගැටෙන නිසා යෙදුම ස්ථාපනය නොකරන ලදී."</string>
diff --git a/packages/PackageInstaller/res/values-sk/strings.xml b/packages/PackageInstaller/res/values-sk/strings.xml
index f6602b1..7a1e70c 100644
--- a/packages/PackageInstaller/res/values-sk/strings.xml
+++ b/packages/PackageInstaller/res/values-sk/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Aplikácia bola nainštalovaná."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Chcete túto aplikáciu nainštalovať?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Chcete túto aplikáciu aktualizovať?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Chcete aktualizovať túto aplikáciu zo zdroja <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nTáto aplikácia obvykle dostáva aktualizácie zo zdroja <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Ak aktualizujete z iného zdroja, môžete v budúcnosti dostávať aktualizácie z ľubovoľného zdroja v telefóne. Funkcie aplikácie sa môžu zmeniť."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Aktualizujte túto aplikáciu zo zdroja &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Obvykle dostáva aktualizácie zo zdroja &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ak aktualizujete z iného zdroja, môžete v budúcnosti dostávať aktualizácie z ľubovoľného zdroja v tablete. Funkcie aplikácie sa môžu zmeniť.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Aktualizujte túto aplikáciu zo zdroja &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Obvykle dostáva aktualizácie zo zdroja &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ak aktualizujete z iného zdroja, môžete v budúcnosti dostávať aktualizácie z ľubovoľného zdroja v televízore. Funkcie aplikácie sa môžu zmeniť.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Aktualizujte túto aplikáciu zo zdroja &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Obvykle dostáva aktualizácie zo zdroja &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ak aktualizujete z iného zdroja, môžete v budúcnosti dostávať aktualizácie z ľubovoľného zdroja v telefóne. Funkcie aplikácie sa môžu zmeniť.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Aplikácia nebola nainštalovaná."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Inštalácia balíka bola zablokovaná."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Aplikácia sa nenainštalovala, pretože balík je v konflikte s existujúcim balíkom."</string>
@@ -63,14 +65,14 @@
     <string name="uninstall_update_text_multiuser" msgid="8992883151333057227">"Nahradiť túto aplikáciu výrobnou verziou? Všetky údaje sa odstránia. Ovplyvní to všetkých používateľov tohto zariadenia vrátane tých s pracovnými profilmi."</string>
     <string name="uninstall_keep_data" msgid="7002379587465487550">"Zachovať nasledujúcu veľkosť dát aplikácie: <xliff:g id="SIZE">%1$s</xliff:g>."</string>
     <string name="uninstall_application_text_current_user_clone_profile" msgid="835170400160011636">"Chcete túto aplikáciu odstrániť?"</string>
-    <string name="uninstall_application_text_with_clone_instance" msgid="6944473334273349036">"Chcete túto aplikáciu odinštalovať? Bude odstránený aj klon <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
+    <string name="uninstall_application_text_with_clone_instance" msgid="6944473334273349036">"Chcete túto aplikáciu odinštalovať? Bude odstránený aj klon aplikácie <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>."</string>
     <string name="uninstalling_notification_channel" msgid="840153394325714653">"Prebiehajúce odinštalovania"</string>
     <string name="uninstall_failure_notification_channel" msgid="1136405866767576588">"Neúspešné odinštalácie"</string>
     <string name="uninstalling" msgid="8709566347688966845">"Prebieha odinštalovanie..."</string>
     <string name="uninstalling_app" msgid="8866082646836981397">"Prebieha odinštalovanie balíka <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
     <string name="uninstall_done" msgid="439354138387969269">"Odinštalovanie bolo dokončené."</string>
     <string name="uninstall_done_app" msgid="4588850984473605768">"Balík <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> bol odinštalovaný"</string>
-    <string name="uninstall_done_clone_app" msgid="5578308154544195413">"Klon <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> bol odstránený"</string>
+    <string name="uninstall_done_clone_app" msgid="5578308154544195413">"Klon aplikácie <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> bol odstránený"</string>
     <string name="uninstall_failed" msgid="1847750968168364332">"Nepodarilo sa odinštalovať."</string>
     <string name="uninstall_failed_app" msgid="5506028705017601412">"Balík <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> sa nepodarilo odinštalovať."</string>
     <string name="uninstalling_cloned_app" msgid="1826380164974984870">"Klon <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> sa odstraňuje…"</string>
@@ -94,7 +96,7 @@
     <string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Váš telefón a osobné údaje sú zraniteľnejšie voči útoku z neznámych aplikácií. Inštaláciou tejto aplikácie vyjadrujete súhlas s tým, že nesiete zodpovednosť za akékoľvek poškodenie telefónu alebo stratu údajov, ktoré by mohli nastať pri jej používaní."</string>
     <string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Váš tablet a osobné dáta sú náchylnejšie na útok z neznámych aplikácií. Inštaláciou tejto aplikácie vyjadrujete súhlas s tým, že nesiete zodpovednosť za akékoľvek poškodenie tabletu alebo stratu dát, ktoré by mohli nastať pri jej používaní."</string>
     <string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Váš televízor a osobné údaje sú náchylnejšie na útok z neznámych aplikácií. Inštaláciou tejto aplikácie vyjadrujete súhlas s tým, že nesiete zodpovednosť za akékoľvek poškodenie televízora alebo stratu údajov, ktoré by mohli nastať pri jej používaní."</string>
-    <string name="cloned_app_label" msgid="7503612829833756160">"Klon <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
+    <string name="cloned_app_label" msgid="7503612829833756160">"Klon aplikácie <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
     <string name="anonymous_source_continue" msgid="4375745439457209366">"Pokračovať"</string>
     <string name="external_sources_settings" msgid="4046964413071713807">"Nastavenia"</string>
     <string name="wear_app_channel" msgid="1960809674709107850">"Inštalácia/odinštalovanie aplikácií Wear"</string>
diff --git a/packages/PackageInstaller/res/values-sl/strings.xml b/packages/PackageInstaller/res/values-sl/strings.xml
index 00c3d15..91bcbda 100644
--- a/packages/PackageInstaller/res/values-sl/strings.xml
+++ b/packages/PackageInstaller/res/values-sl/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Aplikacija je nameščena."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Ali želite namestiti to aplikacijo?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Ali želite posodobiti to aplikacijo?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Želite to aplikacijo posodobiti iz vira <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nTa aplikacija običajno prejema posodobitve iz vira <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Če jo posodobite iz drugega vira, boste prihodnje posodobitve morda prejemali iz katerega koli vira v telefonu. Funkcija aplikacije se lahko spremeni."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Želite to aplikacijo posodobiti iz vira &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ta aplikacija običajno prejema posodobitve iz vira &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Če jo posodobite iz drugega vira, boste prihodnje posodobitve morda prejemali iz katerega koli vira v tabličnem računalniku. Funkcija aplikacije se lahko spremeni.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Želite to aplikacijo posodobiti iz vira &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ta aplikacija običajno prejema posodobitve iz vira &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Če jo posodobite iz drugega vira, boste prihodnje posodobitve morda prejemali iz katerega koli vira v televizorju. Funkcija aplikacije se lahko spremeni.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Želite to aplikacijo posodobiti iz vira &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ta aplikacija običajno prejema posodobitve iz vira &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Če jo posodobite iz drugega vira, boste prihodnje posodobitve morda prejemali iz katerega koli vira v telefonu. Funkcija aplikacije se lahko spremeni.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Aplikacija ni nameščena."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Namestitev paketa je bila blokirana."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Aplikacija ni bila nameščena, ker je paket v navzkrižju z obstoječim paketom."</string>
diff --git a/packages/PackageInstaller/res/values-sq/strings.xml b/packages/PackageInstaller/res/values-sq/strings.xml
index 9904bc0..566054ed 100644
--- a/packages/PackageInstaller/res/values-sq/strings.xml
+++ b/packages/PackageInstaller/res/values-sq/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Aplikacioni u instalua."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Dëshiron ta instalosh këtë aplikacion?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Dëshiron ta përditësosh këtë aplikacion?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Të përditësohet ky aplikacion nga <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nKy aplikacion zakonisht merr përditësime nga <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Duke përditësuar nga një burim tjetër, mund të marrësh përditësime të ardhshme nga çdo burim në telefonin tënd. Funksionaliteti i aplikacionit mund të ndryshojë."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Përditëso këtë aplikacion nga &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ky aplikacion zakonisht merr përditësime nga &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Duke përditësuar nga një burim tjetër, mund të marrësh përditësime të ardhshme nga çdo burim në tabletin tënd. Funksionaliteti i aplikacionit mund të ndryshojë.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Përditëso këtë aplikacion nga &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ky aplikacion zakonisht merr përditësime nga &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Duke përditësuar nga një burim tjetër, mund të marrësh përditësime të ardhshme nga çdo burim në televizorin tënd. Funksionaliteti i aplikacionit mund të ndryshojë.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Përditëso këtë aplikacion nga &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ky aplikacion zakonisht merr përditësime nga &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Duke përditësuar nga një burim tjetër, mund të marrësh përditësime të ardhshme nga çdo burim në telefonin tënd. Funksionaliteti i aplikacionit mund të ndryshojë.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Aplikacioni nuk u instalua."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Instalimi paketës u bllokua."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Aplikacioni nuk u instalua pasi paketa është në konflikt me një paketë ekzistuese."</string>
diff --git a/packages/PackageInstaller/res/values-sr/strings.xml b/packages/PackageInstaller/res/values-sr/strings.xml
index 5a0f52d..9e17716 100644
--- a/packages/PackageInstaller/res/values-sr/strings.xml
+++ b/packages/PackageInstaller/res/values-sr/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Апликација је инсталирана."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Желите да инсталирате ову апликацију?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Желите да ажурирате ову апликацију?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Желите да ажурирате ову апликацију из извора <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nОва апликација се обично ажурира из извора <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Ако ажурирате из другог извора, можете да примате будућа ажурирања из било ког извора на телефону. Функције апликације могу да се промене."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Ажурирајте ову апликацију код: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ова апликација обично добија ажурирања од: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ако ажурирате из другог извора, можете да примате будућа ажурирања из било ког извора на таблету. Функције апликације ће се можда променити.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Ажурирајте ову апликацију код: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ова апликација обично добија ажурирања од: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ако ажурирате из другог извора, можете да примате будућа ажурирања из било ког извора на ТВ-у. Функције апликације ће се можда променити.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Ажурирајте ову апликацију код: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ова апликација обично добија ажурирања од: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ако ажурирате из другог извора, можете да примате будућа ажурирања из било ког извора на телефону. Функције апликације ће се можда променити.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Апликација није инсталирана."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Инсталирање пакета је блокирано."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Апликација није инсталирана јер је пакет неусаглашен са постојећим пакетом."</string>
diff --git a/packages/PackageInstaller/res/values-sv/strings.xml b/packages/PackageInstaller/res/values-sv/strings.xml
index ec6af2e..79e5738 100644
--- a/packages/PackageInstaller/res/values-sv/strings.xml
+++ b/packages/PackageInstaller/res/values-sv/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Appen har installerats."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Vill du installera den här appen?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Vill du uppdatera den här appen?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Vill du uppdatera den här appen från <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nAppen tar vanligtvis emot uppdateringar från <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Genom att uppdatera från en annan källa kan du komma att ta emot framtida uppdateringar från olika källor på telefonen. Appfunktioner kan förändras."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Uppdatera appen från &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Appen får vanligtvis uppdateringar från &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Om du uppdaterar från en annan källa kanske du får framtida uppdateringar från olika källor på surfplattan. Appfunktionerna kanske ändras.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Uppdatera appen från &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Appen får vanligtvis uppdateringar från &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Om du uppdaterar från en annan källa kanske du får framtida uppdateringar från olika källor på tv:n. Appfunktionerna kanske ändras.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Uppdatera appen från &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Appen får vanligtvis uppdateringar från &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Om du uppdaterar från en annan källa kanske du får framtida uppdateringar från olika källor på telefonen. Appfunktionerna kanske ändras.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Appen har inte installerats."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Paketet har blockerats för installation."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Appen har inte installerats på grund av en konflikt mellan detta paket och ett befintligt paket."</string>
diff --git a/packages/PackageInstaller/res/values-sw/strings.xml b/packages/PackageInstaller/res/values-sw/strings.xml
index d396472..f69d612 100644
--- a/packages/PackageInstaller/res/values-sw/strings.xml
+++ b/packages/PackageInstaller/res/values-sw/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Imesakinisha programu."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Ungependa kusakinisha programu hii?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Ungependa kusasisha programu hii?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Ungependa kusasisha hii programu kutoka kwa<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nProgramu hii kwa kawaida hupokea masasisho kutoka kwa <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Kwa kusasisha kutoka chanzo tofauti, huenda ukapokea masasisho ya siku zijazo kutoka chanzo chochote kwenye simu yako. Utendaji wa programu unaweza kubadilika."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Sasisha programu hii kutoka kwenye &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Programu hii hupokea masasisho kutoka kwenye &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Kwa kusasisha kutoka kwenye chanzo tofauti, unaweza kupokea masasisho ya baadaye kutoka kwenye chanzo chochote katika kishikwambi chako. Huenda utendaji wa programu ukabadilika.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Sasisha programu hii kutoka kwenye &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Programu hii hupokea masasisho kutoka kwenye &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Kwa kusasisha kutoka kwenye chanzo tofauti, unaweza kupokea masasisho ya baadaye kutoka kwenye chanzo chochote katika TV yako. Huenda utendaji wa programu ukabadilika.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Sasisha programu hii kutoka kwenye &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Programu hii hupokea masasisho kutoka kwenye &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Kwa kusasisha kutoka kwenye chanzo tofauti, unaweza kupokea masasisho ya baadaye kutoka kwenye chanzo chochote katika simu yako. Huenda utendaji wa programu ukabadilika.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Imeshindwa kusakinisha programu."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Kifurushi kimezuiwa kisisakinishwe."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Programu haikusakinishwa kwa sababu kifurushi kinakinzana na kifurushi kingine kilichopo."</string>
diff --git a/packages/PackageInstaller/res/values-ta/strings.xml b/packages/PackageInstaller/res/values-ta/strings.xml
index c60910c..f2d5463 100644
--- a/packages/PackageInstaller/res/values-ta/strings.xml
+++ b/packages/PackageInstaller/res/values-ta/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"ஆப்ஸ் நிறுவப்பட்டது."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"இந்த ஆப்ஸை நிறுவ வேண்டுமா?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"இந்த ஆப்ஸைப் புதுப்பிக்க வேண்டுமா?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> இலிருந்து இந்த ஆப்ஸைப் புதுப்பிக்க வேண்டுமா?\n\nபொதுவாக இந்த ஆப்ஸ்<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> இலிருந்து புதுப்பிப்புகளைப் பெறும். வேறொன்றின் மூலம் புதுப்பித்தால் எதிர்காலத்தில் மொபைலில் வேறு இடத்திலிருந்து புதுப்பிப்புகளை நீங்கள் பெறக்கூடும். ஆப்ஸ் செயல்பாடுகள் மாறுபடக்கூடும்."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; இல் இருந்து இந்த ஆப்ஸைப் புதுப்பிக்க வேண்டுமா?&lt;/p&gt;&lt;p&gt;பொதுவாக இந்த ஆப்ஸ் &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; இல் இருந்து புதுப்பிப்புகளைப் பெறும். வேறு உரிமையாளர் மூலம் புதுப்பித்தால் எதிர்காலத்தில் டேப்லெட்டில் இடம்பெற்றுள்ள எந்த உரிமையாளரிடம் இருந்தும் புதுப்பிப்புகளைப் பெறக்கூடும். ஆப்ஸ் செயல்பாடுகள் மாறுபடக்கூடும்.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; இல் இருந்து இந்த ஆப்ஸைப் புதுப்பிக்க வேண்டுமா?&lt;/p&gt;&lt;p&gt;பொதுவாக இந்த ஆப்ஸ் &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; இல் இருந்து புதுப்பிப்புகளைப் பெறும். வேறு உரிமையாளர் மூலம் புதுப்பித்தால் எதிர்காலத்தில் டிவியில் இடம்பெற்றுள்ள எந்த உரிமையாளரிடம் இருந்தும் புதுப்பிப்புகளைப் பெறக்கூடும். ஆப்ஸ் செயல்பாடுகள் மாறுபடக்கூடும்.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; இல் இருந்து இந்த ஆப்ஸைப் புதுப்பிக்க வேண்டுமா?&lt;/p&gt;&lt;p&gt;பொதுவாக இந்த ஆப்ஸ் &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; இல் இருந்து புதுப்பிப்புகளைப் பெறும். வேறு உரிமையாளர் மூலம் புதுப்பித்தால் எதிர்காலத்தில் மொபைலில் இடம்பெற்றுள்ள எந்த உரிமையாளரிடம் இருந்தும் புதுப்பிப்புகளைப் பெறக்கூடும். ஆப்ஸ் செயல்பாடுகள் மாறுபடக்கூடும்.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"ஆப்ஸ் நிறுவப்படவில்லை."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"இந்தத் தொகுப்பு நிறுவப்படுவதிலிருந்து தடுக்கப்பட்டது."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"இந்தத் தொகுப்பு ஏற்கனவே உள்ள தொகுப்புடன் முரண்படுவதால் ஆப்ஸ் நிறுவப்படவில்லை."</string>
diff --git a/packages/PackageInstaller/res/values-te/strings.xml b/packages/PackageInstaller/res/values-te/strings.xml
index 2dd66bc..1013e3d 100644
--- a/packages/PackageInstaller/res/values-te/strings.xml
+++ b/packages/PackageInstaller/res/values-te/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"యాప్ ఇన్‌స్టాల్ చేయబడింది."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"మీరు ఈ యాప్‌ను ఇన్‌స్టాల్ చేయాలనుకుంటున్నారా?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"మీరు ఈ యాప్‌ను అప్‌డేట్ చేయాలనుకుంటున్నారా?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> నుండి ఈ యాప్‌ను అప్‌డేట్ చేయాలా?\n\nఈ యాప్ సాధారణంగా <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> నుండి అప్‌డేట్‌లను అందుకుంటుంది. విభిన్న సోర్స్ నుండి అప్‌డేట్ చేయడం ద్వారా, మీరు మీ ఫోన్‌లోని ఏదైనా సోర్స్ నుండి భవిష్యత్తు అప్‌డేట్‌లను పొందవచ్చు. యాప్ ఫంక్షనాలిటీ మారవచ్చు."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;ఈ యాప్‌ను &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; నుండి అప్‌డేట్ చేయాలా?&lt;/p&gt;&lt;p&gt;ఈ యాప్ సాధారణంగా &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; నుండి అప్‌డేట్‌లను స్వీకరిస్తుంది. విభిన్నమైన సోర్స్ నుండి అప్‌డేట్ చేయడం ద్వారా, మీరు టాబ్లెట్‌లోని ఏదైనా సోర్స్ నుండి భవిష్యత్తు అప్‌డేట్‌లను పొందవచ్చు. యాప్ ఫంక్షనాలిటీ మారవచ్చు.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;ఈ యాప్‌ను &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; నుండి అప్‌డేట్ చేయాలా?&lt;/p&gt;&lt;p&gt;ఈ యాప్ సాధారణంగా &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; నుండి అప్‌డేట్‌లను స్వీకరిస్తుంది. విభిన్నమైన సోర్స్ నుండి అప్‌డేట్ చేయడం ద్వారా, మీరు TVలోని ఏదైనా సోర్స్ నుండి భవిష్యత్తు అప్‌డేట్‌లను పొందవచ్చు. యాప్ ఫంక్షనాలిటీ మారవచ్చు.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;ఈ యాప్‌ను &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; నుండి అప్‌డేట్ చేయాలా?&lt;/p&gt;&lt;p&gt;ఈ యాప్ సాధారణంగా &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; నుండి అప్‌డేట్‌లను స్వీకరిస్తుంది. విభిన్న సోర్స్ నుండి అప్‌డేట్ చేయడం ద్వారా, మీరు ఫోన్‌లోని ఏదైనా సోర్స్ నుండి భవిష్యత్తు అప్‌డేట్‌లను పొందవచ్చు. యాప్ ఫంక్షనాలిటీ మారవచ్చు.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"యాప్ ఇన్‌స్టాల్ చేయబడలేదు."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"ప్యాకేజీ ఇన్‌స్టాల్ కాకుండా బ్లాక్ చేయబడింది."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"ప్యాకేజీ, అలాగే ఇప్పటికే ఉన్న ప్యాకేజీ మధ్య వైరుధ్యం ఉన్నందున యాప్ ఇన్‌స్టాల్ చేయబడలేదు."</string>
@@ -45,7 +47,7 @@
     <string name="update_anyway" msgid="8792432341346261969">"ఏదేమైనా అప్‌డేట్ చేయండి"</string>
     <string name="manage_applications" msgid="5400164782453975580">"యాప్‌లను నిర్వహించండి"</string>
     <string name="out_of_space_dlg_title" msgid="4156690013884649502">"ఖాళీ లేదు"</string>
-    <string name="out_of_space_dlg_text" msgid="8727714096031856231">"<xliff:g id="APP_NAME">%1$s</xliff:g>ని ఇన్‌స్టాల్ చేయడం సాధ్యపడలేదు. కొంత స్థలాన్ని ఖాళీ చేసి మళ్లీ ప్రయత్నించండి."</string>
+    <string name="out_of_space_dlg_text" msgid="8727714096031856231">"<xliff:g id="APP_NAME">%1$s</xliff:g>ని ఇన్‌స్టాల్ చేయడం సాధ్యపడలేదు. కొంత స్థలాన్ని ఖాళీ చేసి మళ్లీ ట్రై చేయండి."</string>
     <string name="app_not_found_dlg_title" msgid="5107924008597470285">"యాప్ కనుగొనబడలేదు"</string>
     <string name="app_not_found_dlg_text" msgid="5219983779377811611">"ఇన్‌స్టాల్ చేసిన యాప్‌ల లిస్ట్‌లో యాప్ కనుగొనబడలేదు."</string>
     <string name="user_is_not_allowed_dlg_title" msgid="6915293433252210232">"అనుమతించబడలేదు"</string>
diff --git a/packages/PackageInstaller/res/values-th/strings.xml b/packages/PackageInstaller/res/values-th/strings.xml
index 0bf2f84..35a7611 100644
--- a/packages/PackageInstaller/res/values-th/strings.xml
+++ b/packages/PackageInstaller/res/values-th/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"ติดตั้งแอปแล้ว"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"คุณต้องการติดตั้งแอปนี้ไหม"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"คุณต้องการอัปเดตแอปนี้ไหม"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"อัปเดตแอปนี้จาก <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> ไหม\n\nโดยปกติแล้ว แอปนี้จะได้รับการอัปเดตจาก <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> การอัปเดตจากแหล่งที่มาอื่นอาจทำให้โทรศัพท์ของคุณได้รับการอัปเดตจากแหล่งที่มานั้นในอนาคต ฟังก์ชันการทำงานของแอปอาจมีการเปลี่ยนแปลง"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;อัปเดตแอปนี้จาก &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; ไหม&lt;/p&gt;&lt;p&gt;โดยปกติแล้ว แอปนี้จะได้รับการอัปเดตจาก &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; การอัปเดตจากแหล่งที่มาอื่นอาจทำให้แท็บเล็ตของคุณได้รับการอัปเดตจากแหล่งที่มานั้นในอนาคต ซึ่งอาจทำให้ฟังก์ชันการทำงานของแอปเปลี่ยนแปลงไป&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;อัปเดตแอปนี้จาก &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; ไหม&lt;/p&gt;&lt;p&gt;โดยปกติแล้ว แอปนี้จะได้รับการอัปเดตจาก &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; การอัปเดตจากแหล่งที่มาอื่นอาจทำให้ทีวีของคุณได้รับการอัปเดตจากแหล่งที่มานั้นในอนาคต ซึ่งอาจทำให้ฟังก์ชันการทำงานของแอปเปลี่ยนแปลงไป&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;อัปเดตแอปนี้จาก &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; ไหม&lt;/p&gt;&lt;p&gt;โดยปกติแล้ว แอปนี้จะได้รับการอัปเดตจาก &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; การอัปเดตจากแหล่งที่มาอื่นอาจทำให้โทรศัพท์ของคุณได้รับการอัปเดตจากแหล่งที่มานั้นในอนาคต ซึ่งอาจทำให้ฟังก์ชันการทำงานของแอปเปลี่ยนแปลงไป&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"ไม่ได้ติดตั้งแอป"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"มีการบล็อกแพ็กเกจไม่ให้ติดตั้ง"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"ไม่ได้ติดตั้งแอปเพราะแพ็กเกจขัดแย้งกับแพ็กเกจที่มีอยู่"</string>
diff --git a/packages/PackageInstaller/res/values-tl/strings.xml b/packages/PackageInstaller/res/values-tl/strings.xml
index 4d516b5..78a1b2b 100644
--- a/packages/PackageInstaller/res/values-tl/strings.xml
+++ b/packages/PackageInstaller/res/values-tl/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Na-install na ang app."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Gusto mo bang i-install ang app na ito?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Gusto mo bang i-update ang app na ito?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"I-update itong app na mula sa <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nKaraniwang nakakatanggap ang app na ito ng mga update mula sa <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Sa pag-update mula sa ibang pinagmulan, puwede kang makatanggap ng mga update mula sa anumang pinagmulan sa iyong telepono sa hinaharap. Posibleng magbago ang functionality ng app."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;I-update ang app na ito mula sa &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Karaniwang nakakatanggap ng mga update ang app na ito mula sa &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Sa pamamagitan ng pag-update mula sa ibang source, puwede kang makatanggap ng mga update mula sa anumang source sa iyong tablet sa hinaharap. Posibleng magbago ang functionality ng app.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;I-update ang app na ito mula sa &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Karaniwang nakakatanggap ng mga update ang app na ito mula sa &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Sa pamamagitan ng pag-update mula sa ibang source, puwede kang makatanggap ng mga update mula sa anumang source sa iyong TV sa hinaharap. Posibleng magbago ang functionality ng app.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;I-update ang app na ito mula sa &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Karaniwang nakakatanggap ng mga update ang app na ito mula sa &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Sa pamamagitan ng pag-update mula sa ibang source, puwede kang makatanggap ng mga update mula sa anumang source sa iyong telepono sa hinaharap. Posibleng magbago ang functionality ng app.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Hindi na-install ang app."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Na-block ang pag-install sa package."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Hindi na-install ang app dahil nagkakaproblema ang package sa isang dati nang package."</string>
diff --git a/packages/PackageInstaller/res/values-tr/strings.xml b/packages/PackageInstaller/res/values-tr/strings.xml
index 050d398..a34765c 100644
--- a/packages/PackageInstaller/res/values-tr/strings.xml
+++ b/packages/PackageInstaller/res/values-tr/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Uygulama yüklendi."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Bu uygulamayı yüklemek istiyor musunuz?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Bu uygulamayı güncellemek istiyor musunuz?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Bu uygulama <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> kaynağından güncellensin mi?\n\nBu uygulama genellikle <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> kaynağından güncelleme alır. Farklı bir kaynaktan güncellerseniz ileride telefonunuzda herhangi bir kaynaktan güncelleme alabilirsiniz. Uygulama işlevselliği değişebilir."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Bu uygulama &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; kaynağından güncellensin mi?&lt;/p&gt;&lt;p&gt;Bu uygulama genellikle &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; kaynağından güncelleme alır. Farklı bir kaynaktan güncellerseniz ileride tabletinizde herhangi bir kaynaktan güncelleme alabilirsiniz. Uygulama işlevselliği değişebilir.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Bu uygulama &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; kaynağından güncellensin mi?&lt;/p&gt;&lt;p&gt;Bu uygulama genellikle &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; kaynağından güncelleme alır. Farklı bir kaynaktan güncellerseniz ileride televizyonunuzda herhangi bir kaynaktan güncelleme alabilirsiniz. Uygulama işlevselliği değişebilir.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Bu uygulama &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt; kaynağından güncellensin mi?&lt;/p&gt;&lt;p&gt;Bu uygulama genellikle &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt; kaynağından güncelleme alır. Farklı bir kaynaktan güncellerseniz ileride telefonunuzda herhangi bir kaynaktan güncelleme alabilirsiniz. Uygulama işlevselliği değişebilir.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Uygulama yüklenmedi."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Paketin yüklemesi engellendi."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Paket, mevcut bir paketle çakıştığından uygulama yüklenemedi."</string>
diff --git a/packages/PackageInstaller/res/values-uk/strings.xml b/packages/PackageInstaller/res/values-uk/strings.xml
index e0e7d88..76f3372 100644
--- a/packages/PackageInstaller/res/values-uk/strings.xml
+++ b/packages/PackageInstaller/res/values-uk/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Програму встановлено."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Установити цей додаток?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Оновити цей додаток?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Оновити цей додаток від <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nЗазвичай цей додаток отримує оновлення від <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Якщо встановити оновлення з іншого джерела, надалі на ваш телефон зможуть надходити оновлення з будь-яких джерел. Це може змінити функції додатка."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Оновити цей додаток з &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Зазвичай цей додаток отримує оновлення від &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Якщо встановити оновлення з іншого джерела, надалі на ваш планшет зможуть надходити оновлення з будь-яких джерел. Це може змінити функції додатка.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Оновити цей додаток з &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Зазвичай цей додаток отримує оновлення від &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Якщо встановити оновлення з іншого джерела, надалі на ваш телевізор зможуть надходити оновлення з будь-яких джерел. Це може змінити функції додатка.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Оновити цей додаток з &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Зазвичай цей додаток отримує оновлення від &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Якщо встановити оновлення з іншого джерела, надалі на ваш телефон зможуть надходити оновлення з будь-яких джерел. Це може змінити функції додатка.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Програму не встановлено."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Встановлення пакета заблоковано."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Додаток не встановлено, оскільки пакет конфліктує з наявним пакетом."</string>
diff --git a/packages/PackageInstaller/res/values-ur/strings.xml b/packages/PackageInstaller/res/values-ur/strings.xml
index b3b4c0d..e621d71 100644
--- a/packages/PackageInstaller/res/values-ur/strings.xml
+++ b/packages/PackageInstaller/res/values-ur/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"ایپ انسٹال ہو گئی۔"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"کیا آپ یہ ایپ انسٹال کرنا چاہتے ہیں؟"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"کیا آپ یہ ایپ اپ ڈیٹ کرنا چاہتے ہیں؟"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"اس ایپ کو <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> سے اپ ڈیٹ کریں؟\n\n اس ایپ کو عام طور پر <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> سے اپ ڈیٹس موصول ہوتی ہیں۔ کسی مختلف ذریعے سے اپ ڈیٹ کر کے، آپ اپنے فون پر کسی بھی ذریعے سے مستقبل کی اپ ڈیٹس حاصل کر سکتے ہیں۔ ایپ کی فعالیت تبدیل ہو سکتی ہے۔"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"‏‎&lt;p&gt;‎اس ایپ کو ‎&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;‎ سے اپ ڈیٹ کریں یہ ایپ عام طور پر ‎&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;‎ سے اپ ڈیٹس موصول کرتی ہے۔ کسی مختلف وسیلے سے اپ ڈیٹ کر کے، آپ اپنے ٹیبلیٹ پر کسی بھی وسیلے سے مستقبل کی اپ ڈیٹس حاصل کر سکتے ہیں۔ ایپ کی فعالیت تبدیل ہو سکتی ہے۔‎&lt;/p&gt;‎"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"‏‎&lt;p&gt;‎اس ایپ کو ‎&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;‎ سے اپ ڈیٹ کریں یہ ایپ عام طور پر ‎&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;‎ سے اپ ڈیٹس موصول کرتی ہے۔ کسی مختلف وسیلے سے اپ ڈیٹ کر کے، آپ اپنے TV پر کسی بھی وسیلے سے مستقبل کی اپ ڈیٹس حاصل کر سکتے ہیں۔ ایپ کی فعالیت تبدیل ہو سکتی ہے۔‎&lt;/p&gt;‎"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"‏‎&lt;p&gt;‎اس ایپ کو ‎&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;‎ سے اپ ڈیٹ کریں یہ ایپ عام طور پر ‎&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;‎ سے اپ ڈیٹس موصول کرتی ہے۔ کسی مختلف ذریعے سے اپ ڈیٹ کر کے، آپ اپنے فون پر کسی بھی ذریعے سے مستقبل کی اپ ڈیٹس حاصل کر سکتے ہیں۔ ایپ کی فعالیت تبدیل ہو سکتی ہے۔‎&lt;/p&gt;‎"</string>
     <string name="install_failed" msgid="5777824004474125469">"ایپ انسٹال نہیں ہوئی۔"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"پیکج کو انسٹال ہونے سے مسدود کر دیا گیا تھا۔"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"ایپ انسٹال نہیں ہوئی کیونکہ پیکج ایک موجودہ پیکیج سے متصادم ہے۔"</string>
diff --git a/packages/PackageInstaller/res/values-uz/strings.xml b/packages/PackageInstaller/res/values-uz/strings.xml
index 2993663c..7597fb2 100644
--- a/packages/PackageInstaller/res/values-uz/strings.xml
+++ b/packages/PackageInstaller/res/values-uz/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Ilova o‘rnatildi."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Bu ilovani oʻrnatmoqchimisiz?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Bu ilova yangilansinmi?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Bu ilova <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g> orqali yangilansinmi?\n\nBu ilova odatda <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g> orqali yangilanishlar oladi. Boshqa manbadan yangilash orqali siz kelajakdagi yangilanishlarni telefoningizda istalgan manbadan olishingiz mumkin. Ilova funksiyalari oʻzgarishi mumkin."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Bu ilovani bundan yangilash: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Bu ilova odatda yangilanishlarni bundan oladi: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Boshqa manbadan yangilash orqali kelgusi yangilanishlarni planshetda istalgan manbadan olishingiz mumkin. Ilova funksiyalari oʻzgarishi mumkin.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Bu ilovani bundan yangilash: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Bu ilova odatda yangilanishlarni bundan oladi: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Boshqa manbadan yangilash orqali kelgusi yangilanishlarni televizorda istalgan manbadan olishingiz mumkin. Ilova funksiyalari oʻzgarishi mumkin.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Bu ilovani bundan yangilash: &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Bu ilova odatda yangilanishlarni bundan oladi: &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Boshqa manbadan yangilash orqali kelgusi yangilanishlarni telefonda istalgan manbadan olishingiz mumkin. Ilova funksiyalari oʻzgarishi mumkin.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Ilova o‘rnatilmadi."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Paket o‘rnatilishga qarshi bloklangan."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Paket mavjud paket bilan zid kelganligi uchun ilovani o‘rnatib bo‘lmadi."</string>
diff --git a/packages/PackageInstaller/res/values-vi/strings.xml b/packages/PackageInstaller/res/values-vi/strings.xml
index f6ffa3a..53b2a78 100644
--- a/packages/PackageInstaller/res/values-vi/strings.xml
+++ b/packages/PackageInstaller/res/values-vi/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Ứng dụng đã được cài đặt."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Bạn có muốn cài đặt ứng dụng này không?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Bạn có muốn cập nhật ứng dụng này không?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Cập nhật ứng dụng này của <xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nỨng dụng này thường nhận thông tin cập nhật từ <xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Khi cập nhật từ một nguồn khác, trong tương lai, bạn có thể nhận thông tin cập nhật từ nguồn bất kỳ trên điện thoại của bạn. Chức năng ứng dụng có thể thay đổi."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Cập nhật ứng dụng này từ &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ứng dụng này thường nhận các bản cập nhật từ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Khi cập nhật từ một nguồn khác, bạn có thể nhận các bản cập nhật trong tương lai từ nguồn bất kỳ trên máy tính bảng của mình. Chức năng của ứng dụng có thể thay đổi.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Cập nhật ứng dụng này từ &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ứng dụng này thường nhận các bản cập nhật từ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Khi cập nhật từ một nguồn khác, bạn có thể nhận các bản cập nhật trong tương lai từ nguồn bất kỳ trên TV của mình. Chức năng của ứng dụng có thể thay đổi.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Cập nhật ứng dụng này từ &lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Ứng dụng này thường nhận các bản cập nhật từ &lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Khi cập nhật từ một nguồn khác, bạn có thể nhận các bản cập nhật trong tương lai từ nguồn bất kỳ trên điện thoại của mình. Chức năng của ứng dụng có thể thay đổi.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Ứng dụng chưa được cài đặt."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Đã chặn cài đặt gói."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Chưa cài đặt được ứng dụng do gói xung đột với một gói hiện có."</string>
diff --git a/packages/PackageInstaller/res/values-zh-rCN/strings.xml b/packages/PackageInstaller/res/values-zh-rCN/strings.xml
index a59f940..eb6d0f2 100644
--- a/packages/PackageInstaller/res/values-zh-rCN/strings.xml
+++ b/packages/PackageInstaller/res/values-zh-rCN/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"已安装应用。"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"要安装此应用吗?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"要更新此应用吗?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"要通过<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>更新此应用?\n\n此应用通常通过<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>接收更新。如果通过其他来源更新,手机未来可能会收到任何来源的更新。应用功能可能会变化。"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;要通过&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;更新此应用?&lt;/p&gt;&lt;p&gt;此应用通常从&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;接收更新。如果通过其他来源更新,平板电脑未来可能会收到任何来源的更新。应用功能可能会改变。&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;要通过&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;更新此应用?&lt;/p&gt;&lt;p&gt;此应用通常从&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;接收更新。如果通过其他来源更新,电视未来可能会收到任何来源的更新。应用功能可能会改变。&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;要通过&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;更新此应用?&lt;/p&gt;&lt;p&gt;此应用通常从&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;接收更新。如果通过其他来源更新,手机未来可能会收到任何来源的更新。应用功能可能会改变。&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"未安装应用。"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"系统已禁止安装该软件包。"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"应用未安装:软件包与现有软件包存在冲突。"</string>
diff --git a/packages/PackageInstaller/res/values-zh-rHK/strings.xml b/packages/PackageInstaller/res/values-zh-rHK/strings.xml
index 6412eff..883a6b1 100644
--- a/packages/PackageInstaller/res/values-zh-rHK/strings.xml
+++ b/packages/PackageInstaller/res/values-zh-rHK/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"已安裝應用程式。"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"要安裝此應用程式嗎?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"要更新此應用程式嗎?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"要從「<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>」更新此應用程式嗎?\n\n在正常情況下,系統會透過「<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>」更新此應用程式。如果透過其他來源更新,手機未來可能會收到任何來源的更新。應用程式功能可能會有變動。"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"要從「<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>」更新此應用程式嗎?在正常情況下,系統會透過「<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>」更新此應用程式。如果透過其他來源更新,平板電腦未來可能會收到任何來源的更新。應用程式功能可能會有變動。"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"要從「<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>」更新此應用程式嗎?在正常情況下,系統會透過「<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>」更新此應用程式。如果透過其他來源更新,電視未來可能會收到任何來源的更新。應用程式功能可能會有變動。"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"要從「<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>」更新此應用程式嗎?在正常情況下,系統會透過「<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>」更新此應用程式。如果透過其他來源更新,手機未來可能會收到任何來源的更新。應用程式功能可能會有變動。"</string>
     <string name="install_failed" msgid="5777824004474125469">"未安裝應用程式。"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"套件已遭封鎖,無法安裝。"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"套件與現有的套件發生衝突,無法安裝應用程式。"</string>
@@ -34,11 +36,11 @@
     <string name="install_failed_incompatible" product="tv" msgid="2890001324362291683">"此應用程式與電視不兼容。"</string>
     <string name="install_failed_incompatible" product="default" msgid="7254630419511645826">"應用程式與手機不兼容,無法安裝應用程式。"</string>
     <string name="install_failed_invalid_apk" msgid="8581007676422623930">"套件似乎無效,無法安裝應用程式。"</string>
-    <string name="install_failed_msg" product="tablet" msgid="6298387264270562442">"無法在您的平板電腦上安裝「<xliff:g id="APP_NAME">%1$s</xliff:g>」。"</string>
-    <string name="install_failed_msg" product="tv" msgid="1920009940048975221">"無法在您的電視上安裝「<xliff:g id="APP_NAME">%1$s</xliff:g>」。"</string>
-    <string name="install_failed_msg" product="default" msgid="6484461562647915707">"無法在您的手機上安裝「<xliff:g id="APP_NAME">%1$s</xliff:g>」。"</string>
+    <string name="install_failed_msg" product="tablet" msgid="6298387264270562442">"無法在你的平板電腦上安裝「<xliff:g id="APP_NAME">%1$s</xliff:g>」。"</string>
+    <string name="install_failed_msg" product="tv" msgid="1920009940048975221">"無法在你的電視上安裝「<xliff:g id="APP_NAME">%1$s</xliff:g>」。"</string>
+    <string name="install_failed_msg" product="default" msgid="6484461562647915707">"無法在你的手機上安裝「<xliff:g id="APP_NAME">%1$s</xliff:g>」。"</string>
     <string name="launch" msgid="3952550563999890101">"開啟"</string>
-    <string name="unknown_apps_admin_dlg_text" msgid="4456572224020176095">"您的管理員不允許安裝來自不明來源的應用程式"</string>
+    <string name="unknown_apps_admin_dlg_text" msgid="4456572224020176095">"你的管理員不允許安裝來自不明來源的應用程式"</string>
     <string name="unknown_apps_user_restriction_dlg_text" msgid="151020786933988344">"此使用者無法安裝來源不明的應用程式"</string>
     <string name="install_apps_user_restriction_dlg_text" msgid="2154119597001074022">"此使用者無法安裝應用程式"</string>
     <string name="ok" msgid="7871959885003339302">"確定"</string>
@@ -55,9 +57,9 @@
     <string name="uninstall_application_title" msgid="4045420072401428123">"解除安裝應用程式"</string>
     <string name="uninstall_update_title" msgid="824411791011583031">"解除安裝更新"</string>
     <string name="uninstall_activity_text" msgid="1928194674397770771">"「<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g>」屬於以下應用程式:"</string>
-    <string name="uninstall_application_text" msgid="3816830743706143980">"您要解除安裝此應用程式嗎?"</string>
-    <string name="uninstall_application_text_all_users" msgid="575491774380227119">"您要為"<b>"所有"</b>"使用者解除安裝這個應用程式嗎?應用程式及其資料會從裝置上的"<b>"所有"</b>"使用者設定檔中移除。"</string>
-    <string name="uninstall_application_text_user" msgid="498072714173920526">"您要為使用者<xliff:g id="USERNAME">%1$s</xliff:g>解除安裝此應用程式嗎?"</string>
+    <string name="uninstall_application_text" msgid="3816830743706143980">"你要解除安裝此應用程式嗎?"</string>
+    <string name="uninstall_application_text_all_users" msgid="575491774380227119">"你要為"<b>"所有"</b>"使用者解除安裝這個應用程式嗎?應用程式及其資料會從裝置上的"<b>"所有"</b>"使用者設定檔中移除。"</string>
+    <string name="uninstall_application_text_user" msgid="498072714173920526">"你要為使用者<xliff:g id="USERNAME">%1$s</xliff:g>解除安裝此應用程式嗎?"</string>
     <string name="uninstall_application_text_current_user_work_profile" msgid="8788387739022366193">"要從工作設定檔解除安裝此應用程式嗎?"</string>
     <string name="uninstall_update_text" msgid="863648314632448705">"要將此應用程式回復至原廠版本嗎?系統會移除所有資料。"</string>
     <string name="uninstall_update_text_multiuser" msgid="8992883151333057227">"要將此應用程式回復至原廠版本嗎?系統會移除所有資料。此裝置的所有使用者 (包括使用工作設定檔的使用者) 亦會受影響。"</string>
@@ -77,8 +79,8 @@
     <string name="uninstall_failed_device_policy_manager" msgid="785293813665540305">"無法解除安裝可用的裝置管理員應用程式"</string>
     <string name="uninstall_failed_device_policy_manager_of_user" msgid="4813104025494168064">"無法為<xliff:g id="USERNAME">%1$s</xliff:g>解除安裝可用的裝置管理員應用程式"</string>
     <string name="uninstall_all_blocked_profile_owner" msgid="2009393666026751501">"部分使用者或設定檔需要使用此應用程式,因此無法完全解除安裝"</string>
-    <string name="uninstall_blocked_profile_owner" msgid="6373897407002404848">"這是您設定檔所需的應用程式,因此無法解除安裝。"</string>
-    <string name="uninstall_blocked_device_owner" msgid="6724602931761073901">"這是您的裝置管理員要求安裝的應用程式,因此無法解除安裝。"</string>
+    <string name="uninstall_blocked_profile_owner" msgid="6373897407002404848">"這是你設定檔所需的應用程式,因此無法解除安裝。"</string>
+    <string name="uninstall_blocked_device_owner" msgid="6724602931761073901">"這是你的裝置管理員要求安裝的應用程式,因此無法解除安裝。"</string>
     <string name="manage_device_administrators" msgid="3092696419363842816">"管理裝置管理員應用程式"</string>
     <string name="manage_users" msgid="1243995386982560813">"管理使用者"</string>
     <string name="uninstall_failed_msg" msgid="2176744834786696012">"無法解除安裝「<xliff:g id="APP_NAME">%1$s</xliff:g>」。"</string>
@@ -87,13 +89,13 @@
     <string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear 不支援安裝/解除安裝操作。"</string>
     <string name="message_staging" msgid="8032722385658438567">"正在準備安裝應用程式…"</string>
     <string name="app_name_unknown" msgid="6881210203354323926">"不明"</string>
-    <string name="untrusted_external_source_warning" product="tablet" msgid="7067510047443133095">"為安全起見,您的平板電腦目前不得安裝此來源的不明應用程式。您可以在「設定」中變更這項設定。"</string>
-    <string name="untrusted_external_source_warning" product="tv" msgid="7057271609532508035">"為安全起見,您的電視目前不得安裝此來源的不明應用程式。您可以在「設定」中變更這項設定。"</string>
-    <string name="untrusted_external_source_warning" product="watch" msgid="7195163388090818636">"為安全起見,您的手錶目前不得安裝此來源的不明應用程式。您可以在「設定」中變更這項設定。"</string>
-    <string name="untrusted_external_source_warning" product="default" msgid="8444191224459138919">"為安全起見,您的手機目前不得安裝此來源的不明應用程式。您可以在「設定」中變更這項設定。"</string>
-    <string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"來源不明的應用程式可能會侵害您的手機和個人資料。安裝此應用程式,即表示您同意承擔因使用這個應用程式而導致手機損壞或資料遺失的責任。"</string>
-    <string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"來源不明的應用程式可能會侵害您的平板電腦和個人資料。安裝此應用程式,即表示您同意承擔因使用這個應用程式而導致平板電腦損壞或資料遺失的責任。"</string>
-    <string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"來源不明的應用程式可能會侵害您的電視和個人資料。安裝此應用程式,即表示您同意承擔因使用這個應用程式而導致電視損壞或資料遺失的責任。"</string>
+    <string name="untrusted_external_source_warning" product="tablet" msgid="7067510047443133095">"為安全起見,你的平板電腦目前不得安裝此來源的不明應用程式。你可以在「設定」中變更這項設定。"</string>
+    <string name="untrusted_external_source_warning" product="tv" msgid="7057271609532508035">"為安全起見,你的電視目前不得安裝此來源的不明應用程式。你可以在「設定」中變更這項設定。"</string>
+    <string name="untrusted_external_source_warning" product="watch" msgid="7195163388090818636">"為安全起見,你的手錶目前不得安裝此來源的不明應用程式。你可以在「設定」中變更這項設定。"</string>
+    <string name="untrusted_external_source_warning" product="default" msgid="8444191224459138919">"為安全起見,你的手機目前不得安裝此來源的不明應用程式。你可以在「設定」中變更這項設定。"</string>
+    <string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"來源不明的應用程式可能會侵害你的手機和個人資料。安裝此應用程式,即表示你同意承擔因使用這個應用程式而導致手機損壞或資料遺失的責任。"</string>
+    <string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"來源不明的應用程式可能會侵害你的平板電腦和個人資料。安裝此應用程式,即表示你同意承擔因使用這個應用程式而導致平板電腦損壞或資料遺失的責任。"</string>
+    <string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"來源不明的應用程式可能會侵害你的電視和個人資料。安裝此應用程式,即表示你同意承擔因使用這個應用程式而導致電視損壞或資料遺失的責任。"</string>
     <string name="cloned_app_label" msgid="7503612829833756160">"「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」複製本"</string>
     <string name="anonymous_source_continue" msgid="4375745439457209366">"繼續"</string>
     <string name="external_sources_settings" msgid="4046964413071713807">"設定"</string>
diff --git a/packages/PackageInstaller/res/values-zh-rTW/strings.xml b/packages/PackageInstaller/res/values-zh-rTW/strings.xml
index 2a87eb8..0d9e266 100644
--- a/packages/PackageInstaller/res/values-zh-rTW/strings.xml
+++ b/packages/PackageInstaller/res/values-zh-rTW/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"已安裝應用程式。"</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"要安裝這個應用程式嗎?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"要更新這個應用程式嗎?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"要透過「<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>」更新這個應用程式嗎?\n\n在正常情況下,系統會透過「<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>」更新這個應用程式。如果透過其他來源更新,手機未來可能會收到任何來源的更新。應用程式功能可能會有變動。"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;要透過「<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>」&lt;b&gt;&lt;/b&gt;更新這個應用程式嗎?&lt;/p&gt;&lt;p&gt;這個應用程式一般是接收「<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>」&lt;b&gt;&lt;/b&gt;的更新。如果透過其他來源更新,平板電腦未來可能會收到任何來源的更新。應用程式功能可能會變動。&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;要透過「<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>」&lt;b&gt;&lt;/b&gt;更新這個應用程式嗎?&lt;/p&gt;&lt;p&gt;這個應用程式一般是接收「<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>」&lt;b&gt;&lt;/b&gt;的更新。如果透過其他來源更新,TV 裝置未來可能會收到任何來源的更新。應用程式功能可能會變動。&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;要透過「<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>」&lt;b&gt;&lt;/b&gt;更新這個應用程式嗎?&lt;/p&gt;&lt;p&gt;這個應用程式一般是接收「<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>」&lt;b&gt;&lt;/b&gt;的更新。如果透過其他來源更新,手機未來可能會收到任何來源的更新。應用程式功能可能會變動。&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"未安裝應用程式。"</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"系統已封鎖這個套件,因此無法安裝。"</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"應用程式套件與現有套件衝突,因此未能完成安裝。"</string>
diff --git a/packages/PackageInstaller/res/values-zu/strings.xml b/packages/PackageInstaller/res/values-zu/strings.xml
index ca9c63b..98c75e8 100644
--- a/packages/PackageInstaller/res/values-zu/strings.xml
+++ b/packages/PackageInstaller/res/values-zu/strings.xml
@@ -26,7 +26,9 @@
     <string name="install_done" msgid="5987363587661783896">"Uhlelo lokusebenza olufakiwe."</string>
     <string name="install_confirm_question" msgid="7663733664476363311">"Ingabe ufuna ukufaka le app?"</string>
     <string name="install_confirm_question_update" msgid="3348888852318388584">"Ingabe ufuna ukubuyekeza le app?"</string>
-    <string name="install_confirm_question_update_owner_reminder" msgid="3750986542284587290">"Buyekeza le app kusuka ku-<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>?\n\nNgokuvamile le app ithola izibuyekezo kusuka ku-<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>. Ngokubuyekeza kusuka kumthombo ohlukile, ungase uthole izibuyekezo zesikhathi esizayo kusuka kunoma yimuphi umthombo efonini yakho. Okwenziwa yi-app kungase kushintshe."</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet" msgid="7994800761970572198">"&lt;p&gt;Buyekeza le-app ukusuka ku-&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Le app ivame ukuthola izibuyekezo ukusuka ku-&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ngokubuyekeza ukusuka kumthombo ohlukile, ungase uthole izibuyekezo zesikhathi esizayo ukusuka kunoma yimuphi umthombo kuthebulethi yakho. Ukusebenza ku-app kungashintsha.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv" msgid="2435174886412089791">"&lt;p&gt;Buyekeza le-app ukusuka ku-&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Le app ivame ukuthola izibuyekezo ukusuka ku-&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ngokubuyekeza ukusuka kumthombo ohlukile, ungase uthole izibuyekezo zesikhathi esizayo ukusuka kunoma yimuphi umthombo ku-TV yakho. Ukusebenza ku-app kungashintsha.&lt;/p&gt;"</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default" msgid="7155138616126795839">"&lt;p&gt;Buyekeza le-app ukusuka ku-&lt;b&gt;<xliff:g id="NEW_UPDATE_OWNER">%1$s</xliff:g>&lt;/b&gt;?&lt;/p&gt;&lt;p&gt;Le app ivame ukuthola izibuyekezo ukusuka ku-&lt;b&gt;<xliff:g id="EXISTING_UPDATE_OWNER">%2$s</xliff:g>&lt;/b&gt;. Ngokubuyekeza ukusuka kumthombo ohlukile, ungase uthole izibuyekezo zesikhathi esizayo ukusuka kunoma yimuphi umthombo efonini yakho. Ukusebenza ku-app kungashintsha.&lt;/p&gt;"</string>
     <string name="install_failed" msgid="5777824004474125469">"Uhlelo lokusebenza alufakiwe."</string>
     <string name="install_failed_blocked" msgid="8512284352994752094">"Iphakheji livinjiwe kusukela ekufakweni."</string>
     <string name="install_failed_conflict" msgid="3493184212162521426">"Uhlelo lokusebenza alufakiwe njengoba ukuphakheja kushayisana nephakheji elikhona."</string>
diff --git a/packages/PackageInstaller/res/values/strings.xml b/packages/PackageInstaller/res/values/strings.xml
index c52fde6..4eaa39b 100644
--- a/packages/PackageInstaller/res/values/strings.xml
+++ b/packages/PackageInstaller/res/values/strings.xml
@@ -38,11 +38,11 @@
     <!-- Message for updating an existing app [CHAR LIMIT=NONE] -->
     <string name="install_confirm_question_update">Do you want to update this app?</string>
     <!-- Message for updating an existing app with update owner reminder [CHAR LIMIT=NONE] -->
-    <string name="install_confirm_question_update_owner_reminder" product="tablet">Update this app from <xliff:g id="new_update_owner">%1$s</xliff:g>?\n\nThis app normally receives updates from <xliff:g id="existing_update_owner">%2$s</xliff:g>. By updating from a different source, you may receive future updates from any source on your tablet. App functionality may change.</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tablet">&lt;p>Update this app from &lt;b><xliff:g id="new_update_owner">%1$s</xliff:g>&lt;/b>\?&lt;/p>&lt;p>This app normally receives updates from &lt;b><xliff:g id="existing_update_owner">%2$s</xliff:g>&lt;/b>. By updating from a different source, you may receive future updates from any source on your tablet. App functionality may change.&lt;/p></string>
     <!-- Message for updating an existing app with update owner reminder [CHAR LIMIT=NONE] -->
-    <string name="install_confirm_question_update_owner_reminder" product="tv">Update this app from <xliff:g id="new_update_owner">%1$s</xliff:g>?\n\nThis app normally receives updates from <xliff:g id="existing_update_owner">%2$s</xliff:g>. By updating from a different source, you may receive future updates from any source on your TV. App functionality may change.</string>
+    <string name="install_confirm_question_update_owner_reminder" product="tv">&lt;p>Update this app from &lt;b><xliff:g id="new_update_owner">%1$s</xliff:g>&lt;/b>\?&lt;/p>&lt;p>This app normally receives updates from &lt;b><xliff:g id="existing_update_owner">%2$s</xliff:g>&lt;/b>. By updating from a different source, you may receive future updates from any source on your TV. App functionality may change.&lt;/p></string>
     <!-- Message for updating an existing app with update owner reminder [CHAR LIMIT=NONE] -->
-    <string name="install_confirm_question_update_owner_reminder" product="default">Update this app from <xliff:g id="new_update_owner">%1$s</xliff:g>?\n\nThis app normally receives updates from <xliff:g id="existing_update_owner">%2$s</xliff:g>. By updating from a different source, you may receive future updates from any source on your phone. App functionality may change.</string>
+    <string name="install_confirm_question_update_owner_reminder" product="default">&lt;p>Update this app from &lt;b><xliff:g id="new_update_owner">%1$s</xliff:g>&lt;/b>\?&lt;/p>&lt;p>This app normally receives updates from &lt;b><xliff:g id="existing_update_owner">%2$s</xliff:g>&lt;/b>. By updating from a different source, you may receive future updates from any source on your phone. App functionality may change.&lt;/p></string>
     <!-- [CHAR LIMIT=100] -->
     <string name="install_failed">App not installed.</string>
     <!-- Reason displayed when installation fails because the package was blocked
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/EventResultPersister.java b/packages/PackageInstaller/src/com/android/packageinstaller/EventResultPersister.java
index 8639f47..0d1475a 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/EventResultPersister.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/EventResultPersister.java
@@ -16,6 +16,8 @@
 
 package com.android.packageinstaller;
 
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageInstaller;
@@ -186,7 +188,9 @@
         int status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, 0);
 
         if (status == PackageInstaller.STATUS_PENDING_USER_ACTION) {
-            context.startActivity(intent.getParcelableExtra(Intent.EXTRA_INTENT));
+            Intent intentToStart = intent.getParcelableExtra(Intent.EXTRA_INTENT);
+            intentToStart.addFlags(FLAG_ACTIVITY_NEW_TASK);
+            context.startActivity(intentToStart);
 
             return;
         }
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallFailed.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallFailed.java
index 3505cfb..74f04e0 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallFailed.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallFailed.java
@@ -33,8 +33,6 @@
 
 import androidx.annotation.Nullable;
 
-import java.io.File;
-
 /**
  * Installation failed: Return status code to the caller or display failure UI to user
  */
@@ -101,14 +99,8 @@
             // Set header icon and title
             PackageUtil.AppSnippet as;
             PackageManager pm = getPackageManager();
-
-            if ("package".equals(packageURI.getScheme())) {
-                as = new PackageUtil.AppSnippet(pm.getApplicationLabel(appInfo),
-                        pm.getApplicationIcon(appInfo));
-            } else {
-                final File sourceFile = new File(packageURI.getPath());
-                as = PackageUtil.getAppSnippet(this, appInfo, sourceFile);
-            }
+            as = intent.getParcelableExtra(PackageInstallerActivity.EXTRA_APP_SNIPPET,
+                    PackageUtil.AppSnippet.class);
 
             // Store label for dialog
             mLabel = as.label;
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java
index 7bea339..1088ace 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java
@@ -16,6 +16,7 @@
 
 package com.android.packageinstaller;
 
+import static com.android.packageinstaller.PackageInstallerActivity.EXTRA_APP_SNIPPET;
 import static com.android.packageinstaller.PackageInstallerActivity.EXTRA_STAGED_SESSION_ID;
 
 import android.app.PendingIntent;
@@ -86,7 +87,8 @@
             // ContentResolver.SCHEME_FILE
             // STAGED_SESSION_ID extra contains an ID of a previously staged install session.
             final File sourceFile = new File(mPackageURI.getPath());
-            PackageUtil.AppSnippet as = PackageUtil.getAppSnippet(this, appInfo, sourceFile);
+            PackageUtil.AppSnippet as = getIntent()
+                    .getParcelableExtra(EXTRA_APP_SNIPPET, PackageUtil.AppSnippet.class);
 
             mAlert.setIcon(as.icon);
             mAlert.setTitle(as.label);
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java
index 15446b6..f2f019d9 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java
@@ -51,7 +51,6 @@
 public class InstallStart extends Activity {
     private static final String TAG = InstallStart.class.getSimpleName();
 
-    private static final String DOWNLOADS_AUTHORITY = "downloads";
 
     private static final int DLG_INSTALL_APPS_RESTRICTED_FOR_USER = 1;
     private static final int DLG_UNKNOWN_SOURCES_RESTRICTED_FOR_USER = 2;
@@ -103,6 +102,8 @@
 
         boolean isDocumentsManager = checkPermission(Manifest.permission.MANAGE_DOCUMENTS,
                 -1, callingUid) == PackageManager.PERMISSION_GRANTED;
+        boolean isSystemDownloadsProvider = PackageUtil.getSystemDownloadsProviderInfo(
+                                                mPackageManager, callingUid) != null;
         boolean isTrustedSource = false;
         if (sourceInfo != null && sourceInfo.isPrivilegedApp()) {
             isTrustedSource = intent.getBooleanExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, false) || (
@@ -111,7 +112,7 @@
                             == PackageManager.PERMISSION_GRANTED);
         }
 
-        if (!isTrustedSource && !isSystemDownloadsProvider(callingUid) && !isDocumentsManager
+        if (!isTrustedSource && !isSystemDownloadsProvider && !isDocumentsManager
                 && originatingUid != Process.INVALID_UID) {
             final int targetSdkVersion = getMaxTargetSdkVersionForUid(this, originatingUid);
             if (targetSdkVersion < 0) {
@@ -241,17 +242,6 @@
         return null;
     }
 
-    private boolean isSystemDownloadsProvider(int uid) {
-        final ProviderInfo downloadProviderPackage = getPackageManager().resolveContentProvider(
-                DOWNLOADS_AUTHORITY, 0);
-        if (downloadProviderPackage == null) {
-            // There seems to be no currently enabled downloads provider on the system.
-            return false;
-        }
-        final ApplicationInfo appInfo = downloadProviderPackage.applicationInfo;
-        return ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0
-                && uid == appInfo.uid);
-    }
 
     @NonNull
     private boolean canPackageQuery(int callingUid, Uri packageUri) {
@@ -266,7 +256,7 @@
         if (callingPackages == null) {
             return false;
         }
-        for (String callingPackage: callingPackages) {
+        for (String callingPackage : callingPackages) {
             try {
                 if (mPackageManager.canPackageQuery(callingPackage, targetPackage)) {
                     return true;
@@ -353,7 +343,6 @@
      * Create a new dialog.
      *
      * @param id The id of the dialog (determines dialog type)
-     *
      * @return The dialog
      */
     private DialogFragment createDialog(int id) {
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java
index ff991d2..fbc9525 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java
@@ -22,7 +22,6 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
-import android.net.Uri;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
@@ -30,7 +29,6 @@
 
 import androidx.annotation.Nullable;
 
-import java.io.File;
 import java.util.List;
 
 /**
@@ -65,18 +63,8 @@
             ApplicationInfo appInfo =
                     intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
             mAppPackageName = appInfo.packageName;
-            Uri packageURI = intent.getData();
-
-            // Set header icon and title
-            PackageManager pm = getPackageManager();
-
-            if ("package".equals(packageURI.getScheme())) {
-                mAppSnippet = new PackageUtil.AppSnippet(pm.getApplicationLabel(appInfo),
-                        pm.getApplicationIcon(appInfo));
-            } else {
-                File sourceFile = new File(packageURI.getPath());
-                mAppSnippet = PackageUtil.getAppSnippet(this, appInfo, sourceFile);
-            }
+            mAppSnippet = intent.getParcelableExtra(PackageInstallerActivity.EXTRA_APP_SNIPPET,
+                    PackageUtil.AppSnippet.class);
 
             mLaunchIntent = getPackageManager().getLaunchIntentForPackage(mAppPackageName);
 
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstalledReceiver.java b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstalledReceiver.java
index 2278f7c..d29765e 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstalledReceiver.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstalledReceiver.java
@@ -19,6 +19,8 @@
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.InstallSourceInfo;
+import android.content.pm.PackageManager;
 import android.net.Uri;
 import android.util.Log;
 
@@ -61,11 +63,19 @@
                 return;
             }
 
-            // TODO: Make sure the installer information here is accurate
-            String installer =
-                    context.getPackageManager().getInstallerPackageName(packageName);
-            new PackageInstalledNotificationUtils(context, installer,
-                    packageName).postAppInstalledNotification();
+            try {
+                InstallSourceInfo installerInfo =
+                        context.getPackageManager().getInstallSourceInfo(packageName);
+                String installer = installerInfo.getInstallingPackageName();
+                if (installer == null) {
+                    Log.e(TAG, "No installer package name for: " + packageName);
+                    return;
+                }
+                new PackageInstalledNotificationUtils(context, installer,
+                        packageName).postAppInstalledNotification();
+            } catch (PackageManager.NameNotFoundException e) {
+                Log.e(TAG, "Cannot get source info for: " + packageName);
+            }
         }
     }
 }
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
index e071c11..df91d98 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java
@@ -16,9 +16,7 @@
 */
 package com.android.packageinstaller;
 
-import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
 import static android.content.Intent.FLAG_ACTIVITY_NO_HISTORY;
-import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
 import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
 
 import android.Manifest;
@@ -49,6 +47,8 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
+import android.text.Html;
+import android.text.Spanned;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
@@ -82,6 +82,7 @@
     static final String EXTRA_CALLING_ATTRIBUTION_TAG = "EXTRA_CALLING_ATTRIBUTION_TAG";
     static final String EXTRA_ORIGINAL_SOURCE_INFO = "EXTRA_ORIGINAL_SOURCE_INFO";
     static final String EXTRA_STAGED_SESSION_ID = "EXTRA_STAGED_SESSION_ID";
+    static final String EXTRA_APP_SNIPPET = "EXTRA_APP_SNIPPET";
     private static final String ALLOW_UNKNOWN_SOURCES_KEY =
             PackageInstallerActivity.class.getName() + "ALLOW_UNKNOWN_SOURCES_KEY";
 
@@ -144,9 +145,12 @@
             final CharSequence requestedUpdateOwnerLabel = getApplicationLabel(mCallingPackage);
             if (!TextUtils.isEmpty(existingUpdateOwnerLabel)
                     && mPendingUserActionReason == PackageInstaller.REASON_REMIND_OWNERSHIP) {
-                viewToEnable.setText(
+                String updateOwnerString =
                         getString(R.string.install_confirm_question_update_owner_reminder,
-                                requestedUpdateOwnerLabel, existingUpdateOwnerLabel));
+                                requestedUpdateOwnerLabel, existingUpdateOwnerLabel);
+                Spanned styledUpdateOwnerString =
+                        Html.fromHtml(updateOwnerString, Html.FROM_HTML_MODE_LEGACY);
+                viewToEnable.setText(styledUpdateOwnerString);
                 mOk.setText(R.string.update_anyway);
             } else {
                 mOk.setText(R.string.update);
@@ -260,6 +264,15 @@
     }
 
     private String getPackageNameForUid(int sourceUid) {
+        // If the sourceUid belongs to the system downloads provider, we explicitly return the
+        // name of the Download Manager package. This is because its UID is shared with multiple
+        // packages, resulting in uncertainty about which package will end up first in the list
+        // of packages associated with this UID
+        ApplicationInfo systemDownloadProviderInfo = PackageUtil.getSystemDownloadsProviderInfo(
+                                                        mPm, sourceUid);
+        if (systemDownloadProviderInfo != null) {
+            return systemDownloadProviderInfo.packageName;
+        }
         String[] packagesForUid = mPm.getPackagesForUid(sourceUid);
         if (packagesForUid == null) {
             return null;
@@ -694,6 +707,9 @@
         if (stagedSessionId > 0) {
             newIntent.putExtra(EXTRA_STAGED_SESSION_ID, stagedSessionId);
         }
+        if (mAppSnippet != null) {
+            newIntent.putExtra(EXTRA_APP_SNIPPET, mAppSnippet);
+        }
         newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
         if (mLocalLOGV) Log.i(TAG, "downloaded app uri=" + mPackageURI);
         startActivity(newIntent);
@@ -790,8 +806,12 @@
             }
             new Handler(Looper.getMainLooper()).postDelayed(() -> {
                 if (!isDestroyed()) {
-                    startActivity(getIntent().addFlags(
-                            FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP));
+                    startActivity(getIntent());
+                    // The start flag (FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP) doesn't
+                    // work for the multiple user case, i.e. the caller task user and started
+                    // Activity user are not the same. To avoid having multiple PIAs in the task,
+                    // finish the current PackageInstallerActivity
+                    finish();
                 }
             }, 500);
 
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java b/packages/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
index ff0e5fb..5880a29 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/PackageUtil.java
@@ -26,9 +26,15 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.ProviderInfo;
 import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
 import android.os.UserHandle;
 import android.util.Log;
 import android.view.View;
@@ -48,7 +54,7 @@
  * used in the package installer application.
  */
 public class PackageUtil {
-    private static final String LOG_TAG = PackageUtil.class.getSimpleName();
+    private static final String LOG_TAG = "PackageInstaller";
 
     public static final String PREFIX="com.android.packageinstaller.";
     public static final String INTENT_ATTR_INSTALL_STATUS = PREFIX+"installStatus";
@@ -56,6 +62,7 @@
     public static final String INTENT_ATTR_PERMISSIONS_LIST=PREFIX+"PermissionsList";
     //intent attribute strings related to uninstall
     public static final String INTENT_ATTR_PACKAGE_NAME=PREFIX+"PackageName";
+    private static final String DOWNLOADS_AUTHORITY = "downloads";
 
     /**
      * Utility method to get package information for a given {@link File}
@@ -115,7 +122,7 @@
                 icon);
     }
 
-    static final class AppSnippet {
+    static final class AppSnippet implements Parcelable {
         @NonNull public CharSequence label;
         @Nullable public Drawable icon;
         public AppSnippet(@NonNull CharSequence label, @Nullable Drawable icon) {
@@ -123,10 +130,52 @@
             this.icon = icon;
         }
 
+        private AppSnippet(Parcel in) {
+            label = in.readString();
+            Bitmap bmp = in.readParcelable(getClass().getClassLoader(), Bitmap.class);
+            icon = new BitmapDrawable(Resources.getSystem(), bmp);
+        }
+
         @Override
         public String toString() {
             return "AppSnippet[" + label + (icon != null ? "(has" : "(no ") + " icon)]";
         }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(@NonNull Parcel dest, int flags) {
+            dest.writeString(label.toString());
+            Bitmap bmp = getBitmapFromDrawable(icon);
+            dest.writeParcelable(bmp, 0);
+        }
+
+        private Bitmap getBitmapFromDrawable(Drawable drawable) {
+            // Create an empty bitmap with the dimensions of our drawable
+            final Bitmap bmp = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
+                    drawable.getIntrinsicHeight(),
+                    Bitmap.Config.ARGB_8888);
+            // Associate it with a canvas. This canvas will draw the icon on the bitmap
+            final Canvas canvas = new Canvas(bmp);
+            // Draw the drawable in the canvas. The canvas will ultimately paint the drawable in the
+            // bitmap held within
+            drawable.draw(canvas);
+
+            return bmp;
+        }
+
+        public static final Parcelable.Creator<AppSnippet> CREATOR = new Parcelable.Creator<>() {
+            public AppSnippet createFromParcel(Parcel in) {
+                return new AppSnippet(in);
+            }
+
+            public AppSnippet[] newArray(int size) {
+                return new AppSnippet[size];
+            }
+        };
     }
 
     /**
@@ -245,4 +294,26 @@
             getActivity().finish();
         }
     }
+
+    /**
+     * Determines if the UID belongs to the system downloads provider and returns the
+     * {@link ApplicationInfo} of the provider
+     *
+     * @param uid UID of the caller
+     * @return {@link ApplicationInfo} of the provider if a downloads provider exists,
+     *          it is a system app, and its UID matches with the passed UID, null otherwise.
+     */
+    public static ApplicationInfo getSystemDownloadsProviderInfo(PackageManager pm, int uid) {
+        final ProviderInfo providerInfo = pm.resolveContentProvider(
+                DOWNLOADS_AUTHORITY, 0);
+        if (providerInfo == null) {
+            // There seems to be no currently enabled downloads provider on the system.
+            return null;
+        }
+        ApplicationInfo appInfo = providerInfo.applicationInfo;
+        if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0 && uid == appInfo.uid) {
+            return appInfo;
+        }
+        return null;
+    }
 }
diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/UninstallUninstalling.java b/packages/PackageInstaller/src/com/android/packageinstaller/UninstallUninstalling.java
index e6710ff..4e28d77 100644
--- a/packages/PackageInstaller/src/com/android/packageinstaller/UninstallUninstalling.java
+++ b/packages/PackageInstaller/src/com/android/packageinstaller/UninstallUninstalling.java
@@ -190,10 +190,10 @@
 
             dialogBuilder.setCancelable(false);
             if (isCloneUser) {
-                dialogBuilder.setMessage(getActivity().getString(R.string.uninstalling_cloned_app,
+                dialogBuilder.setTitle(getActivity().getString(R.string.uninstalling_cloned_app,
                         ((UninstallUninstalling) getActivity()).mLabel));
             } else {
-                dialogBuilder.setMessage(getActivity().getString(R.string.uninstalling_app,
+                dialogBuilder.setTitle(getActivity().getString(R.string.uninstalling_app,
                         ((UninstallUninstalling) getActivity()).mLabel));
             }
 
diff --git a/packages/PrintSpooler/res/values-am/strings.xml b/packages/PrintSpooler/res/values-am/strings.xml
index c1cec38..d5dc97a 100644
--- a/packages/PrintSpooler/res/values-am/strings.xml
+++ b/packages/PrintSpooler/res/values-am/strings.xml
@@ -39,7 +39,7 @@
     <string name="all_printers" msgid="5018829726861876202">"ሁሉም አታሚዎች…"</string>
     <string name="print_dialog" msgid="32628687461331979">"የህትመት መገናኛ"</string>
     <string name="current_page_template" msgid="5145005201131935302">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
-    <string name="page_description_template" msgid="6831239682256197161">"ገጽ <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> ከ<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
+    <string name="page_description_template" msgid="6831239682256197161">"ገፅ <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> ከ<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
     <string name="summary_template" msgid="8899734908625669193">"ማጠቃለያ፣ ቅጂዎች <xliff:g id="COPIES">%1$s</xliff:g>፣ የወረቀት መጠን <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string>
     <string name="expand_handle" msgid="7282974448109280522">"እጀታን ወደ ውጭ ላክ"</string>
     <string name="collapse_handle" msgid="6886637989442507451">"እጀታን ሰብስብ"</string>
diff --git a/packages/PrintSpooler/res/values-mk/strings.xml b/packages/PrintSpooler/res/values-mk/strings.xml
index d96330c..f480255 100644
--- a/packages/PrintSpooler/res/values-mk/strings.xml
+++ b/packages/PrintSpooler/res/values-mk/strings.xml
@@ -46,7 +46,7 @@
     <string name="print_button" msgid="645164566271246268">"Печати"</string>
     <string name="savetopdf_button" msgid="2976186791686924743">"Зачувај во PDF"</string>
     <string name="print_options_expanded" msgid="6944679157471691859">"Опциите на печатачот се прикажани"</string>
-    <string name="print_options_collapsed" msgid="7455930445670414332">"Опциите на печатачот се сокриени"</string>
+    <string name="print_options_collapsed" msgid="7455930445670414332">"Опциите на печатачот се скриени"</string>
     <string name="search" msgid="5421724265322228497">"Пребарај"</string>
     <string name="all_printers_label" msgid="3178848870161526399">"Сите печатачи"</string>
     <string name="add_print_service_label" msgid="5356702546188981940">"Додајте услуга"</string>
diff --git a/packages/PrintSpooler/res/values-mr/strings.xml b/packages/PrintSpooler/res/values-mr/strings.xml
index 255fbbc..f9c668d 100644
--- a/packages/PrintSpooler/res/values-mr/strings.xml
+++ b/packages/PrintSpooler/res/values-mr/strings.xml
@@ -39,7 +39,7 @@
     <string name="all_printers" msgid="5018829726861876202">"सर्व प्रिंटर..."</string>
     <string name="print_dialog" msgid="32628687461331979">"प्रिंट संवाद"</string>
     <string name="current_page_template" msgid="5145005201131935302">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g>/<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string>
-    <string name="page_description_template" msgid="6831239682256197161">"<xliff:g id="PAGE_COUNT">%2$d</xliff:g> पैकी <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> पृष्‍ठ"</string>
+    <string name="page_description_template" msgid="6831239682256197161">"<xliff:g id="PAGE_COUNT">%2$d</xliff:g> पैकी <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> पेज"</string>
     <string name="summary_template" msgid="8899734908625669193">"सारांश, प्रती <xliff:g id="COPIES">%1$s</xliff:g>, कागद आकार <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string>
     <string name="expand_handle" msgid="7282974448109280522">"विस्तृत करण्याचे हँडल"</string>
     <string name="collapse_handle" msgid="6886637989442507451">"संक्षिप्त करण्याचे हँडल"</string>
diff --git a/packages/PrintSpooler/res/values-ne/strings.xml b/packages/PrintSpooler/res/values-ne/strings.xml
index be7af70..13c3886 100644
--- a/packages/PrintSpooler/res/values-ne/strings.xml
+++ b/packages/PrintSpooler/res/values-ne/strings.xml
@@ -49,7 +49,7 @@
     <string name="print_options_collapsed" msgid="7455930445670414332">"कोल्याप्स गरेका विकल्पहरू प्रिन्ट गर्नुहोस्"</string>
     <string name="search" msgid="5421724265322228497">"खोज्नुहोस्"</string>
     <string name="all_printers_label" msgid="3178848870161526399">"सबै प्रिन्टरहरू"</string>
-    <string name="add_print_service_label" msgid="5356702546188981940">"सेवा थप्नुहोस्"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"सेवा हाल्नुहोस्"</string>
     <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"खोज बाकस देखाइयो"</string>
     <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"खोज बाकस लुकाइयो"</string>
     <string name="print_add_printer" msgid="1088656468360653455">"प्रिन्टर थप्नुहोस्"</string>
diff --git a/packages/PrintSpooler/res/values-pt-rPT/strings.xml b/packages/PrintSpooler/res/values-pt-rPT/strings.xml
index c9a52a8..a1a7a3b 100644
--- a/packages/PrintSpooler/res/values-pt-rPT/strings.xml
+++ b/packages/PrintSpooler/res/values-pt-rPT/strings.xml
@@ -89,7 +89,7 @@
     <string name="restart" msgid="2472034227037808749">"Reiniciar"</string>
     <string name="no_connection_to_printer" msgid="2159246915977282728">"Sem ligação à impressora"</string>
     <string name="reason_unknown" msgid="5507940196503246139">"desconhecido"</string>
-    <string name="print_service_security_warning_title" msgid="2160752291246775320">"Pretende utilizar o <xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
+    <string name="print_service_security_warning_title" msgid="2160752291246775320">"Quer utilizar o <xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
     <string name="print_service_security_warning_summary" msgid="1427434625361692006">"O seu documento pode passar por um ou mais servidores no respetivo caminho para a impressora."</string>
   <string-array name="color_mode_labels">
     <item msgid="7602948745415174937">"Preto e branco"</item>
diff --git a/packages/PrintSpooler/res/values-te/strings.xml b/packages/PrintSpooler/res/values-te/strings.xml
index 36dbeba..ed0b6d4 100644
--- a/packages/PrintSpooler/res/values-te/strings.xml
+++ b/packages/PrintSpooler/res/values-te/strings.xml
@@ -103,7 +103,7 @@
     <item msgid="3199660090246166812">"ల్యాండ్‌స్కేప్"</item>
   </string-array>
     <string name="print_write_error_message" msgid="5787642615179572543">"ఫైల్‌లోకి వ్రాయలేకపోయింది"</string>
-    <string name="print_error_default_message" msgid="8602678405502922346">"క్షమించండి, అది పని చేయలేదు. మళ్లీ ప్రయత్నించండి."</string>
+    <string name="print_error_default_message" msgid="8602678405502922346">"క్షమించండి, అది పని చేయలేదు. మళ్లీ ట్రై చేయండి."</string>
     <string name="print_error_retry" msgid="1426421728784259538">"మళ్లీ ప్రయత్నించు"</string>
     <string name="print_error_printer_unavailable" msgid="8985614415253203381">"ఈ ప్రింటర్ ప్రస్తుతం అందుబాటులో లేదు."</string>
     <string name="print_cannot_load_page" msgid="6179560924492912009">"ప్రివ్యూను ప్రదర్శించడం సాధ్యపడలేదు"</string>
diff --git a/packages/PrintSpooler/res/values-zh-rHK/strings.xml b/packages/PrintSpooler/res/values-zh-rHK/strings.xml
index 9a98cee..aa0af31 100644
--- a/packages/PrintSpooler/res/values-zh-rHK/strings.xml
+++ b/packages/PrintSpooler/res/values-zh-rHK/strings.xml
@@ -88,7 +88,7 @@
     <string name="no_connection_to_printer" msgid="2159246915977282728">"尚未與打印機連線"</string>
     <string name="reason_unknown" msgid="5507940196503246139">"不明"</string>
     <string name="print_service_security_warning_title" msgid="2160752291246775320">"要使用 <xliff:g id="SERVICE">%1$s</xliff:g> 嗎?"</string>
-    <string name="print_service_security_warning_summary" msgid="1427434625361692006">"您的文件可能會通過一部或多部伺服器才傳送至打印機。"</string>
+    <string name="print_service_security_warning_summary" msgid="1427434625361692006">"你的文件可能會通過一部或多部伺服器才傳送至打印機。"</string>
   <string-array name="color_mode_labels">
     <item msgid="7602948745415174937">"黑白"</item>
     <item msgid="2762241247228983754">"彩色"</item>
diff --git a/packages/PrintSpooler/res/values/themes.xml b/packages/PrintSpooler/res/values/themes.xml
index 844e9c9..4dcad10 100644
--- a/packages/PrintSpooler/res/values/themes.xml
+++ b/packages/PrintSpooler/res/values/themes.xml
@@ -23,12 +23,14 @@
     <style name="Theme.SelectPrinterActivity"
            parent="android:style/Theme.DeviceDefault.Light">
         <item name="android:textAppearanceListItemSecondary">@style/ListItemSecondary</item>
+        <item name="android:windowLightStatusBar">true</item>
     </style>
 
     <style name="Theme.PrintActivity" parent="@android:style/Theme.DeviceDefault.Light">
         <item name="android:windowIsTranslucent">true</item>
         <item name="android:windowActionBar">false</item>
         <item name="android:windowNoTitle">true</item>
+        <item name="android:windowLightStatusBar">true</item>
     </style>
 
 </resources>
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java
index 0c4cb8e..74acf67 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java
@@ -19,6 +19,7 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.Activity;
+import android.app.ActivityOptions;
 import android.app.LoaderManager;
 import android.content.ComponentName;
 import android.content.Context;
@@ -714,8 +715,13 @@
 
                     try {
                         mPrinterForInfoIntent = printer;
+                        Bundle options = ActivityOptions.makeBasic()
+                                .setPendingIntentBackgroundActivityStartMode(
+                                        ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
+                                .toBundle();
                         startIntentSenderForResult(printer.getInfoIntent().getIntentSender(),
-                                INFO_INTENT_REQUEST_CODE, fillInIntent, 0, 0, 0);
+                                INFO_INTENT_REQUEST_CODE, fillInIntent, 0, 0, 0,
+                                options);
                     } catch (SendIntentException e) {
                         mPrinterForInfoIntent = null;
                         Log.e(LOG_TAG, "Could not execute pending info intent: %s", e);
diff --git a/packages/SettingsLib/Android.bp b/packages/SettingsLib/Android.bp
index c244ca0..3d35bad 100644
--- a/packages/SettingsLib/Android.bp
+++ b/packages/SettingsLib/Android.bp
@@ -58,6 +58,7 @@
         "setupdesign",
         "zxing-core-1.7",
         "androidx.room_room-runtime",
+        "settingslib_flags_lib",
 
     ],
 
@@ -88,3 +89,16 @@
         "SettingsLib",
     ],
 }
+
+aconfig_declarations {
+    name: "settingslib_media_flags",
+    package: "com.android.settingslib.media.flags",
+    srcs: [
+        "aconfig/settingslib_media_flag_declarations.aconfig",
+    ],
+}
+
+java_aconfig_library {
+    name: "settingslib_flags_lib",
+    aconfig_declarations: "settingslib_media_flags",
+}
diff --git a/packages/SettingsLib/AndroidManifest.xml b/packages/SettingsLib/AndroidManifest.xml
index 13f8a37..322d6cf 100644
--- a/packages/SettingsLib/AndroidManifest.xml
+++ b/packages/SettingsLib/AndroidManifest.xml
@@ -18,6 +18,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.settingslib">
 
+    <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
+
     <application>
         <activity
             android:name="com.android.settingslib.users.AvatarPickerActivity"
diff --git a/packages/SettingsLib/AppPreference/res/values-de/strings.xml b/packages/SettingsLib/AppPreference/res/values-de/strings.xml
new file mode 100644
index 0000000..d48a9fa
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/values-de/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="install_type_instant" msgid="7217305006127216917">"Instant App"</string>
+</resources>
diff --git a/packages/SettingsLib/BannerMessagePreference/res/values-te/strings.xml b/packages/SettingsLib/BannerMessagePreference/res/values-te/strings.xml
index 22a6f59..102fdc8 100644
--- a/packages/SettingsLib/BannerMessagePreference/res/values-te/strings.xml
+++ b/packages/SettingsLib/BannerMessagePreference/res/values-te/strings.xml
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="accessibility_banner_message_dismiss" msgid="5272928723898304168">"విస్మరించు"</string>
+    <string name="accessibility_banner_message_dismiss" msgid="5272928723898304168">"విస్మరించండి"</string>
 </resources>
diff --git a/packages/SettingsLib/FooterPreference/res/values-kk/strings.xml b/packages/SettingsLib/FooterPreference/res/values-kk/strings.xml
index db11a76..dc3af28 100644
--- a/packages/SettingsLib/FooterPreference/res/values-kk/strings.xml
+++ b/packages/SettingsLib/FooterPreference/res/values-kk/strings.xml
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="settingslib_learn_more_text" msgid="7385478101223578464">"Толығырақ"</string>
+    <string name="settingslib_learn_more_text" msgid="7385478101223578464">"Толық ақпарат"</string>
 </resources>
diff --git a/packages/SettingsLib/MainSwitchPreference/res/drawable-v31/settingslib_switch_bar_bg.xml b/packages/SettingsLib/MainSwitchPreference/res/drawable-v31/settingslib_switch_bar_bg.xml
new file mode 100644
index 0000000..d3d324b
--- /dev/null
+++ b/packages/SettingsLib/MainSwitchPreference/res/drawable-v31/settingslib_switch_bar_bg.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2023 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:state_enabled="false"
+        android:drawable="@drawable/settingslib_switch_bar_bg_disabled"/>
+    <item
+        android:state_activated="true"
+        android:drawable="@drawable/settingslib_switch_bar_bg_on"/>
+    <item
+        android:state_activated="false"
+        android:drawable="@drawable/settingslib_switch_bar_bg_off"/>
+</selector>
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 b1c26e8..e3f8fbb 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
@@ -32,7 +32,8 @@
         android:layout_height="wrap_content"
         android:layout_width="match_parent"
         android:paddingStart="@dimen/settingslib_switchbar_padding_left"
-        android:paddingEnd="@dimen/settingslib_switchbar_padding_right">
+        android:paddingEnd="@dimen/settingslib_switchbar_padding_right"
+        android:background="@drawable/settingslib_switch_bar_bg">
 
         <TextView
             android:id="@+id/switch_text"
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
index d2e9fbe..255b2c9 100644
--- a/packages/SettingsLib/MainSwitchPreference/res/layout-v33/settingslib_main_switch_bar.xml
+++ b/packages/SettingsLib/MainSwitchPreference/res/layout-v33/settingslib_main_switch_bar.xml
@@ -32,7 +32,8 @@
         android:layout_height="wrap_content"
         android:layout_width="match_parent"
         android:paddingStart="@dimen/settingslib_switchbar_padding_left"
-        android:paddingEnd="@dimen/settingslib_switchbar_padding_right">
+        android:paddingEnd="@dimen/settingslib_switchbar_padding_right"
+        android:background="@drawable/settingslib_switch_bar_bg">
 
         <TextView
             android:id="@+id/switch_text"
diff --git a/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchBar.java b/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchBar.java
index 864a8bb..d1703c3 100644
--- a/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchBar.java
+++ b/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchBar.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.content.res.TypedArray;
-import android.graphics.drawable.Drawable;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.util.AttributeSet;
@@ -52,9 +51,6 @@
 
     protected TextView mTextView;
     protected Switch mSwitch;
-    private Drawable mBackgroundOn;
-    private Drawable mBackgroundOff;
-    private Drawable mBackgroundDisabled;
     private View mFrameView;
 
     public MainSwitchBar(Context context) {
@@ -89,12 +85,6 @@
         mFrameView = findViewById(R.id.frame);
         mTextView = (TextView) findViewById(R.id.switch_text);
         mSwitch = (Switch) findViewById(android.R.id.switch_widget);
-        if (BuildCompatUtils.isAtLeastS()) {
-            mBackgroundOn = getContext().getDrawable(R.drawable.settingslib_switch_bar_bg_on);
-            mBackgroundOff = getContext().getDrawable(R.drawable.settingslib_switch_bar_bg_off);
-            mBackgroundDisabled = getContext().getDrawable(
-                    R.drawable.settingslib_switch_bar_bg_disabled);
-        }
         addOnSwitchChangeListener((switchView, isChecked) -> setChecked(isChecked));
 
         if (mSwitch.getVisibility() == VISIBLE) {
@@ -217,17 +207,15 @@
     /**
      * Enable or disable the text and switch.
      */
+    @Override
     public void setEnabled(boolean enabled) {
         super.setEnabled(enabled);
         mTextView.setEnabled(enabled);
         mSwitch.setEnabled(enabled);
 
         if (BuildCompatUtils.isAtLeastS()) {
-            if (enabled) {
-                mFrameView.setBackground(isChecked() ? mBackgroundOn : mBackgroundOff);
-            } else {
-                mFrameView.setBackground(mBackgroundDisabled);
-            }
+            mFrameView.setEnabled(enabled);
+            mFrameView.setActivated(isChecked());
         }
     }
 
@@ -244,7 +232,7 @@
         if (!BuildCompatUtils.isAtLeastS()) {
             setBackgroundColor(isChecked ? mBackgroundActivatedColor : mBackgroundColor);
         } else {
-            mFrameView.setBackground(isChecked ? mBackgroundOn : mBackgroundOff);
+            mFrameView.setActivated(isChecked);
         }
     }
 
diff --git a/packages/SettingsLib/ProfileSelector/res/values-am/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-am/strings.xml
index 4de6c61..3b3f019 100644
--- a/packages/SettingsLib/ProfileSelector/res/values-am/strings.xml
+++ b/packages/SettingsLib/ProfileSelector/res/values-am/strings.xml
@@ -18,5 +18,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="settingslib_category_personal" msgid="1142302328104700620">"የግል"</string>
-    <string name="settingslib_category_work" msgid="4867750733682444676">"ስራ"</string>
+    <string name="settingslib_category_work" msgid="4867750733682444676">"ሥራ"</string>
 </resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-de/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-de/strings.xml
new file mode 100644
index 0000000..d61ff96
--- /dev/null
+++ b/packages/SettingsLib/ProfileSelector/res/values-de/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="settingslib_category_personal" msgid="1142302328104700620">"Privat"</string>
+    <string name="settingslib_category_work" msgid="4867750733682444676">"Dienstlich"</string>
+</resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-hi/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-hi/strings.xml
index a930032..dc7818f 100644
--- a/packages/SettingsLib/ProfileSelector/res/values-hi/strings.xml
+++ b/packages/SettingsLib/ProfileSelector/res/values-hi/strings.xml
@@ -17,6 +17,6 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="settingslib_category_personal" msgid="1142302328104700620">"निजी"</string>
-    <string name="settingslib_category_work" msgid="4867750733682444676">"ऑफ़िस"</string>
+    <string name="settingslib_category_personal" msgid="1142302328104700620">"निजी ऐप्लिकेशन"</string>
+    <string name="settingslib_category_work" msgid="4867750733682444676">"वर्क"</string>
 </resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-sl/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-sl/strings.xml
index 83ef291..d239f44 100644
--- a/packages/SettingsLib/ProfileSelector/res/values-sl/strings.xml
+++ b/packages/SettingsLib/ProfileSelector/res/values-sl/strings.xml
@@ -18,5 +18,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="settingslib_category_personal" msgid="1142302328104700620">"Osebno"</string>
-    <string name="settingslib_category_work" msgid="4867750733682444676">"Služba"</string>
+    <string name="settingslib_category_work" msgid="4867750733682444676">"Delo"</string>
 </resources>
diff --git a/packages/SettingsLib/ProfileSelector/res/values-te/strings.xml b/packages/SettingsLib/ProfileSelector/res/values-te/strings.xml
index 75ee30f..9a44dcf 100644
--- a/packages/SettingsLib/ProfileSelector/res/values-te/strings.xml
+++ b/packages/SettingsLib/ProfileSelector/res/values-te/strings.xml
@@ -18,5 +18,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="settingslib_category_personal" msgid="1142302328104700620">"వ్యక్తిగతం"</string>
-    <string name="settingslib_category_work" msgid="4867750733682444676">"ఆఫీస్"</string>
+    <string name="settingslib_category_work" msgid="4867750733682444676">"వర్క్"</string>
 </resources>
diff --git a/packages/SettingsLib/SearchWidget/res/values-ky/strings.xml b/packages/SettingsLib/SearchWidget/res/values-ky/strings.xml
index e61ffdb..88008d6 100644
--- a/packages/SettingsLib/SearchWidget/res/values-ky/strings.xml
+++ b/packages/SettingsLib/SearchWidget/res/values-ky/strings.xml
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="search_menu" msgid="1914043873178389845">"Жөндөөлөрдү издөө"</string>
+    <string name="search_menu" msgid="1914043873178389845">"Параметрлерди издөө"</string>
 </resources>
diff --git a/packages/SettingsLib/SearchWidget/res/values-or/strings.xml b/packages/SettingsLib/SearchWidget/res/values-or/strings.xml
index 40cc404..4f92d02 100644
--- a/packages/SettingsLib/SearchWidget/res/values-or/strings.xml
+++ b/packages/SettingsLib/SearchWidget/res/values-or/strings.xml
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="search_menu" msgid="1914043873178389845">"ସେଟିଂସରେ ସନ୍ଧାନ କରନ୍ତୁ"</string>
+    <string name="search_menu" msgid="1914043873178389845">"ସେଟିଂସରେ ସର୍ଚ୍ଚ କରନ୍ତୁ"</string>
 </resources>
diff --git a/packages/SettingsLib/SearchWidget/res/values-vi/strings.xml b/packages/SettingsLib/SearchWidget/res/values-vi/strings.xml
index 90daf11..ec6682e 100644
--- a/packages/SettingsLib/SearchWidget/res/values-vi/strings.xml
+++ b/packages/SettingsLib/SearchWidget/res/values-vi/strings.xml
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="search_menu" msgid="1914043873178389845">"Tìm trong thông tin cài đặt"</string>
+    <string name="search_menu" msgid="1914043873178389845">"Tìm chế độ cài đặt"</string>
 </resources>
diff --git a/packages/SettingsLib/SearchWidget/res/values-zu/strings.xml b/packages/SettingsLib/SearchWidget/res/values-zu/strings.xml
index 900f4ba..3d36fa6 100644
--- a/packages/SettingsLib/SearchWidget/res/values-zu/strings.xml
+++ b/packages/SettingsLib/SearchWidget/res/values-zu/strings.xml
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="search_menu" msgid="1914043873178389845">"Sesha izilungiselelo"</string>
+    <string name="search_menu" msgid="1914043873178389845">"Amasethingi okusesha"</string>
 </resources>
diff --git a/packages/SettingsLib/SelectorWithWidgetPreference/res/values-or/strings.xml b/packages/SettingsLib/SelectorWithWidgetPreference/res/values-or/strings.xml
index 8b211e7..567c4bc 100644
--- a/packages/SettingsLib/SelectorWithWidgetPreference/res/values-or/strings.xml
+++ b/packages/SettingsLib/SelectorWithWidgetPreference/res/values-or/strings.xml
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="settings_label" msgid="5948970810295631236">"ସେଟିଂସ୍"</string>
+    <string name="settings_label" msgid="5948970810295631236">"ସେଟିଂସ"</string>
 </resources>
diff --git a/packages/SettingsLib/SettingsSpinner/Android.bp b/packages/SettingsLib/SettingsSpinner/Android.bp
index d3cc4d1..cbb570e 100644
--- a/packages/SettingsLib/SettingsSpinner/Android.bp
+++ b/packages/SettingsLib/SettingsSpinner/Android.bp
@@ -20,4 +20,8 @@
 
     sdk_version: "system_current",
     min_sdk_version: "21",
+    apex_available: [
+        "//apex_available:platform",
+        "com.android.healthfitness",
+    ],
 }
diff --git a/packages/SettingsLib/Spa/OWNERS b/packages/SettingsLib/Spa/OWNERS
index 2887872..464328e 100644
--- a/packages/SettingsLib/Spa/OWNERS
+++ b/packages/SettingsLib/Spa/OWNERS
@@ -4,3 +4,6 @@
 hanxu@google.com
 kellyz@google.com
 pierreqian@google.com
+lijun@google.com
+songchenxi@google.com
+cyl@google.com
diff --git a/packages/SettingsLib/Spa/gallery/res/values/strings.xml b/packages/SettingsLib/Spa/gallery/res/values/strings.xml
index 0d1a1fe..ec60f8c 100644
--- a/packages/SettingsLib/Spa/gallery/res/values/strings.xml
+++ b/packages/SettingsLib/Spa/gallery/res/values/strings.xml
@@ -24,4 +24,6 @@
     <string name="single_line_summary_preference_title" translatable="false">Preference (singleLineSummary = true)</string>
     <!-- Summary for single line summary preference. [DO NOT TRANSLATE] -->
     <string name="single_line_summary_preference_summary" translatable="false">A very long summary to show case a preference which only shows a single line summary.</string>
+    <!-- Footer text with two links. [DO NOT TRANSLATE] -->
+    <string name="footer_with_two_links" translatable="false">Annotated string with <a href="https://www.android.com/">link 1</a> and <a href="https://source.android.com/">link 2</a>.</string>
 </resources>
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/FooterPage.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/FooterPage.kt
deleted file mode 100644
index 9c7e0ce..0000000
--- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/FooterPage.kt
+++ /dev/null
@@ -1,91 +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.settingslib.spa.gallery.page
-
-import android.os.Bundle
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.remember
-import androidx.compose.ui.tooling.preview.Preview
-import com.android.settingslib.spa.framework.common.EntrySearchData
-import com.android.settingslib.spa.framework.common.SettingsEntry
-import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
-import com.android.settingslib.spa.framework.common.SettingsPageProvider
-import com.android.settingslib.spa.framework.common.createSettingsPage
-import com.android.settingslib.spa.framework.compose.navigator
-import com.android.settingslib.spa.framework.compose.stateOf
-import com.android.settingslib.spa.framework.theme.SettingsTheme
-import com.android.settingslib.spa.widget.preference.Preference
-import com.android.settingslib.spa.widget.preference.PreferenceModel
-import com.android.settingslib.spa.widget.scaffold.RegularScaffold
-import com.android.settingslib.spa.widget.ui.Footer
-
-private const val TITLE = "Sample Footer"
-
-object FooterPageProvider : SettingsPageProvider {
-    override val name = "Footer"
-    private val owner = createSettingsPage()
-
-    override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
-        val entryList = mutableListOf<SettingsEntry>()
-        entryList.add(
-            SettingsEntryBuilder.create( "Some Preference", owner)
-                .setSearchDataFn { EntrySearchData(title = "Some Preference") }
-                .setUiLayoutFn {
-                    Preference(remember {
-                        object : PreferenceModel {
-                            override val title = "Some Preference"
-                            override val summary = stateOf("Some summary")
-                        }
-                    })
-                }.build()
-        )
-
-        return entryList
-    }
-
-    fun buildInjectEntry(): SettingsEntryBuilder {
-        return SettingsEntryBuilder.createInject(owner)
-            .setUiLayoutFn {
-                Preference(object : PreferenceModel {
-                    override val title = TITLE
-                    override val onClick = navigator(name)
-                })
-            }
-    }
-
-    override fun getTitle(arguments: Bundle?): String {
-        return TITLE
-    }
-
-    @Composable
-    override fun Page(arguments: Bundle?) {
-        RegularScaffold(title = getTitle(arguments)) {
-            for (entry in buildEntry(arguments)) {
-                entry.UiLayout()
-            }
-            Footer(footerText = "Footer text always at the end of page.")
-        }
-    }
-}
-
-@Preview(showBackground = true)
-@Composable
-private fun FooterPagePreview() {
-    SettingsTheme {
-        FooterPageProvider.Page(null)
-    }
-}
diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/FooterPageProvider.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/FooterPageProvider.kt
new file mode 100644
index 0000000..50c0eb7
--- /dev/null
+++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/page/FooterPageProvider.kt
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.spa.gallery.page
+
+import android.os.Bundle
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.ui.tooling.preview.Preview
+import com.android.settingslib.spa.framework.common.EntrySearchData
+import com.android.settingslib.spa.framework.common.SettingsEntry
+import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
+import com.android.settingslib.spa.framework.common.SettingsPageProvider
+import com.android.settingslib.spa.framework.common.createSettingsPage
+import com.android.settingslib.spa.framework.compose.navigator
+import com.android.settingslib.spa.framework.compose.stateOf
+import com.android.settingslib.spa.framework.theme.SettingsTheme
+import com.android.settingslib.spa.gallery.R
+import com.android.settingslib.spa.widget.preference.Preference
+import com.android.settingslib.spa.widget.preference.PreferenceModel
+import com.android.settingslib.spa.widget.scaffold.RegularScaffold
+import com.android.settingslib.spa.widget.ui.AnnotatedText
+import com.android.settingslib.spa.widget.ui.Footer
+
+private const val TITLE = "Sample Footer"
+
+object FooterPageProvider : SettingsPageProvider {
+    override val name = "Footer"
+    private val owner = createSettingsPage()
+
+    override fun buildEntry(arguments: Bundle?): List<SettingsEntry> {
+        val entryList = mutableListOf<SettingsEntry>()
+        entryList.add(
+            SettingsEntryBuilder.create( "Some Preference", owner)
+                .setSearchDataFn { EntrySearchData(title = "Some Preference") }
+                .setUiLayoutFn {
+                    Preference(remember {
+                        object : PreferenceModel {
+                            override val title = "Some Preference"
+                            override val summary = stateOf("Some summary")
+                        }
+                    })
+                }.build()
+        )
+
+        return entryList
+    }
+
+    fun buildInjectEntry(): SettingsEntryBuilder {
+        return SettingsEntryBuilder.createInject(owner)
+            .setUiLayoutFn {
+                Preference(object : PreferenceModel {
+                    override val title = TITLE
+                    override val onClick = navigator(name)
+                })
+            }
+    }
+
+    override fun getTitle(arguments: Bundle?): String {
+        return TITLE
+    }
+
+    @Composable
+    override fun Page(arguments: Bundle?) {
+        RegularScaffold(title = getTitle(arguments)) {
+            for (entry in buildEntry(arguments)) {
+                entry.UiLayout()
+            }
+            Footer(footerText = "Footer text always at the end of page.")
+            Footer {
+                AnnotatedText(R.string.footer_with_two_links)
+            }
+        }
+    }
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FooterPagePreview() {
+    SettingsTheme {
+        FooterPageProvider.Page(null)
+    }
+}
diff --git a/packages/SettingsLib/Spa/gradle/libs.versions.toml b/packages/SettingsLib/Spa/gradle/libs.versions.toml
index 9a16df8..ee40b02 100644
--- a/packages/SettingsLib/Spa/gradle/libs.versions.toml
+++ b/packages/SettingsLib/Spa/gradle/libs.versions.toml
@@ -15,7 +15,7 @@
 #
 
 [versions]
-agp = "8.0.2"
+agp = "8.1.0"
 dexmaker-mockito = "2.28.3"
 kotlin = "1.8.10"
 truth = "1.1"
diff --git a/packages/SettingsLib/Spa/gradle/wrapper/gradle-wrapper.jar b/packages/SettingsLib/Spa/gradle/wrapper/gradle-wrapper.jar
index e708b1c..c1962a7 100644
--- a/packages/SettingsLib/Spa/gradle/wrapper/gradle-wrapper.jar
+++ b/packages/SettingsLib/Spa/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/packages/SettingsLib/Spa/gradle/wrapper/gradle-wrapper.properties b/packages/SettingsLib/Spa/gradle/wrapper/gradle-wrapper.properties
index 33f49e3..5b0ac44 100644
--- a/packages/SettingsLib/Spa/gradle/wrapper/gradle-wrapper.properties
+++ b/packages/SettingsLib/Spa/gradle/wrapper/gradle-wrapper.properties
@@ -15,7 +15,7 @@
 #
 
 distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip
 distributionPath=wrapper/dists
-zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
 zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/packages/SettingsLib/Spa/gradlew b/packages/SettingsLib/Spa/gradlew
index 4f906e0..aeb74cb 100755
--- a/packages/SettingsLib/Spa/gradlew
+++ b/packages/SettingsLib/Spa/gradlew
@@ -1,7 +1,7 @@
-#!/usr/bin/env sh
+#!/bin/sh
 
 #
-# Copyright 2015 the original author or authors.
+# Copyright © 2015-2021 the original authors.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -17,67 +17,98 @@
 #
 
 ##############################################################################
-##
-##  Gradle start up script for UN*X
-##
+#
+#   Gradle start up script for POSIX generated by Gradle.
+#
+#   Important for running:
+#
+#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+#       noncompliant, but you have some other compliant shell such as ksh or
+#       bash, then to run this script, type that shell name before the whole
+#       command line, like:
+#
+#           ksh Gradle
+#
+#       Busybox and similar reduced shells will NOT work, because this script
+#       requires all of these POSIX shell features:
+#         * functions;
+#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+#         * compound commands having a testable exit status, especially «case»;
+#         * various built-in commands including «command», «set», and «ulimit».
+#
+#   Important for patching:
+#
+#   (2) This script targets any POSIX shell, so it avoids extensions provided
+#       by Bash, Ksh, etc; in particular arrays are avoided.
+#
+#       The "traditional" practice of packing multiple parameters into a
+#       space-separated string is a well documented source of bugs and security
+#       problems, so this is (mostly) avoided, by progressively accumulating
+#       options in "$@", and eventually passing that to Java.
+#
+#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+#       see the in-line comments for details.
+#
+#       There are tweaks for specific operating systems such as AIX, CygWin,
+#       Darwin, MinGW, and NonStop.
+#
+#   (3) This script is generated from the Groovy template
+#       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       within the Gradle project.
+#
+#       You can find Gradle at https://github.com/gradle/gradle/.
+#
 ##############################################################################
 
 # Attempt to set APP_HOME
+
 # Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
+    [ -h "$app_path" ]
+do
+    ls=$( ls -ld "$app_path" )
+    link=${ls#*' -> '}
+    case $link in             #(
+      /*)   app_path=$link ;; #(
+      *)    app_path=$APP_HOME$link ;;
+    esac
 done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
 
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
 
 # Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
+MAX_FD=maximum
 
 warn () {
     echo "$*"
-}
+} >&2
 
 die () {
     echo
     echo "$*"
     echo
     exit 1
-}
+} >&2
 
 # OS specific support (must be 'true' or 'false').
 cygwin=false
 msys=false
 darwin=false
 nonstop=false
-case "`uname`" in
-  CYGWIN* )
-    cygwin=true
-    ;;
-  Darwin* )
-    darwin=true
-    ;;
-  MINGW* )
-    msys=true
-    ;;
-  NONSTOP* )
-    nonstop=true
-    ;;
+case "$( uname )" in                #(
+  CYGWIN* )         cygwin=true  ;; #(
+  Darwin* )         darwin=true  ;; #(
+  MSYS* | MINGW* )  msys=true    ;; #(
+  NONSTOP* )        nonstop=true ;;
 esac
 
 CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@@ -87,9 +118,9 @@
 if [ -n "$JAVA_HOME" ] ; then
     if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
         # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD="$JAVA_HOME/jre/sh/java"
+        JAVACMD=$JAVA_HOME/jre/sh/java
     else
-        JAVACMD="$JAVA_HOME/bin/java"
+        JAVACMD=$JAVA_HOME/bin/java
     fi
     if [ ! -x "$JAVACMD" ] ; then
         die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -98,7 +129,7 @@
 location of your Java installation."
     fi
 else
-    JAVACMD="java"
+    JAVACMD=java
     which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 
 Please set the JAVA_HOME variable in your environment to match the
@@ -106,80 +137,109 @@
 fi
 
 # Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
-    JAVACMD=`cygpath --unix "$JAVACMD"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
-        fi
-        i=`expr $i + 1`
-    done
-    case $i in
-        0) set -- ;;
-        1) set -- "$args0" ;;
-        2) set -- "$args0" "$args1" ;;
-        3) set -- "$args0" "$args1" "$args2" ;;
-        4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+    case $MAX_FD in #(
+      max*)
+        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC3045
+        MAX_FD=$( ulimit -H -n ) ||
+            warn "Could not query maximum file descriptor limit"
+    esac
+    case $MAX_FD in  #(
+      '' | soft) :;; #(
+      *)
+        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC3045
+        ulimit -n "$MAX_FD" ||
+            warn "Could not set maximum file descriptor limit to $MAX_FD"
     esac
 fi
 
-# Escape application args
-save () {
-    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
-    echo " "
-}
-APP_ARGS=`save "$@"`
+# Collect all arguments for the java command, stacking in reverse order:
+#   * args from the command line
+#   * the main class name
+#   * -classpath
+#   * -D...appname settings
+#   * --module-path (only if needed)
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
 
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+    JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    for arg do
+        if
+            case $arg in                                #(
+              -*)   false ;;                            # don't mess with options #(
+              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
+                    [ -e "$t" ] ;;                      #(
+              *)    false ;;
+            esac
+        then
+            arg=$( cygpath --path --ignore --mixed "$arg" )
+        fi
+        # Roll the args list around exactly as many times as the number of
+        # args, so each arg winds up back in the position where it started, but
+        # possibly modified.
+        #
+        # NB: a `for` loop captures its iteration list before it begins, so
+        # changing the positional parameters here affects neither the number of
+        # iterations, nor the values presented in `arg`.
+        shift                   # remove old arg
+        set -- "$@" "$arg"      # push replacement arg
+    done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command;
+#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+#     shell script including quotes and variable substitutions, so put them in
+#     double quotes to make sure that they get re-expanded; and
+#   * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+        "-Dorg.gradle.appname=$APP_BASE_NAME" \
+        -classpath "$CLASSPATH" \
+        org.gradle.wrapper.GradleWrapperMain \
+        "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+    die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+#   set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+        xargs -n1 |
+        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+        tr '\n' ' '
+    )" '"$@"'
 
 exec "$JAVACMD" "$@"
diff --git a/packages/SettingsLib/Spa/gradlew.bat b/packages/SettingsLib/Spa/gradlew.bat
deleted file mode 100644
index 107acd32..0000000
--- a/packages/SettingsLib/Spa/gradlew.bat
+++ /dev/null
@@ -1,89 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem      https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/packages/SettingsLib/Spa/spa/Android.bp b/packages/SettingsLib/Spa/spa/Android.bp
index 79f8c46..7f5948c 100644
--- a/packages/SettingsLib/Spa/spa/Android.bp
+++ b/packages/SettingsLib/Spa/spa/Android.bp
@@ -22,7 +22,7 @@
     name: "SpaLib",
 
     srcs: ["src/**/*.kt"],
-
+    use_resource_processor: true,
     static_libs: [
         "androidx.slice_slice-builders",
         "androidx.slice_slice-core",
@@ -50,5 +50,6 @@
 // Expose the srcs to tests, so the tests can access the internal classes.
 filegroup {
     name: "SpaLib_srcs",
+    visibility: ["//frameworks/base/packages/SettingsLib/Spa/tests"],
     srcs: ["src/**/*.kt"],
 }
diff --git a/packages/SettingsLib/Spa/spa/build.gradle.kts b/packages/SettingsLib/Spa/spa/build.gradle.kts
index 188e7f6..377e72ed 100644
--- a/packages/SettingsLib/Spa/spa/build.gradle.kts
+++ b/packages/SettingsLib/Spa/spa/build.gradle.kts
@@ -52,11 +52,11 @@
 }
 
 dependencies {
-    api("androidx.appcompat:appcompat:1.7.0-alpha02")
+    api("androidx.appcompat:appcompat:1.7.0-alpha03")
     api("androidx.slice:slice-builders:1.1.0-alpha02")
     api("androidx.slice:slice-core:1.1.0-alpha02")
     api("androidx.slice:slice-view:1.1.0-alpha02")
-    api("androidx.compose.material3:material3:1.2.0-alpha03")
+    api("androidx.compose.material3:material3:1.2.0-alpha04")
     api("androidx.compose.material:material-icons-extended:$jetpackComposeVersion")
     api("androidx.compose.runtime:runtime-livedata:$jetpackComposeVersion")
     api("androidx.compose.ui:ui-tooling-preview:$jetpackComposeVersion")
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/AnnotatedStringResource.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/AnnotatedStringResource.kt
index 9ddd0c6..88ba4b0 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/AnnotatedStringResource.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/AnnotatedStringResource.kt
@@ -16,105 +16,93 @@
 
 package com.android.settingslib.spa.framework.util
 
-import android.content.res.Resources
 import android.graphics.Typeface
 import android.text.Spanned
 import android.text.style.StyleSpan
 import android.text.style.URLSpan
 import androidx.annotation.StringRes
+import androidx.compose.material3.MaterialTheme
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalConfiguration
-import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.ui.text.SpanStyle
 import androidx.compose.ui.text.buildAnnotatedString
 import androidx.compose.ui.text.font.FontStyle
 import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.unit.Density
+import androidx.compose.ui.text.style.TextDecoration
 
-const val URLSPAN_TAG = "URLSPAN_TAG"
+const val URL_SPAN_TAG = "URL_SPAN_TAG"
 
 @Composable
-fun annotatedStringResource(@StringRes id: Int, urlSpanColor: Color): AnnotatedString {
-    LocalConfiguration.current
+fun annotatedStringResource(@StringRes id: Int): AnnotatedString {
     val resources = LocalContext.current.resources
-    val density = LocalDensity.current
+    val urlSpanColor = MaterialTheme.colorScheme.primary
     return remember(id) {
         val text = resources.getText(id)
-        spannableStringToAnnotatedString(text, density, urlSpanColor)
+        spannableStringToAnnotatedString(text, urlSpanColor)
     }
 }
 
-private fun spannableStringToAnnotatedString(text: CharSequence, density: Density, urlSpanColor: Color): AnnotatedString {
-    return if (text is Spanned) {
-        with(density) {
-            buildAnnotatedString {
-                append((text.toString()))
-                text.getSpans(0, text.length, Any::class.java).forEach {
-                    val start = text.getSpanStart(it)
-                    val end = text.getSpanEnd(it)
-                    when (it) {
-                        is StyleSpan ->
-                            when (it.style) {
-                                Typeface.NORMAL -> addStyle(
-                                        SpanStyle(
-                                                fontWeight = FontWeight.Normal,
-                                                fontStyle = FontStyle.Normal
-                                        ),
-                                        start,
-                                        end
-                                )
-                                Typeface.BOLD -> addStyle(
-                                        SpanStyle(
-                                                fontWeight = FontWeight.Bold,
-                                                fontStyle = FontStyle.Normal
-                                        ),
-                                        start,
-                                        end
-                                )
-                                Typeface.ITALIC -> addStyle(
-                                        SpanStyle(
-                                                fontWeight = FontWeight.Normal,
-                                                fontStyle = FontStyle.Italic
-                                        ),
-                                        start,
-                                        end
-                                )
-                                Typeface.BOLD_ITALIC -> addStyle(
-                                        SpanStyle(
-                                                fontWeight = FontWeight.Bold,
-                                                fontStyle = FontStyle.Italic
-                                        ),
-                                        start,
-                                        end
-                                )
-                            }
-                        is URLSpan -> {
-                            addStyle(
-                                    SpanStyle(
-                                            color = urlSpanColor,
-                                    ),
-                                    start,
-                                    end
-                            )
-                            if (!it.url.isNullOrEmpty()) {
-                                addStringAnnotation(
-                                        URLSPAN_TAG,
-                                        it.url,
-                                        start,
-                                        end
-                                )
-                            }
-                        }
-                        else -> addStyle(SpanStyle(), start, end)
-                    }
+private fun spannableStringToAnnotatedString(text: CharSequence, urlSpanColor: Color) =
+    if (text is Spanned) {
+        buildAnnotatedString {
+            append((text.toString()))
+            for (span in text.getSpans(0, text.length, Any::class.java)) {
+                val start = text.getSpanStart(span)
+                val end = text.getSpanEnd(span)
+                when (span) {
+                    is StyleSpan -> addStyleSpan(span, start, end)
+                    is URLSpan -> addUrlSpan(span, urlSpanColor, start, end)
+                    else -> addStyle(SpanStyle(), start, end)
                 }
             }
         }
     } else {
         AnnotatedString(text.toString())
     }
+
+private fun AnnotatedString.Builder.addStyleSpan(styleSpan: StyleSpan, start: Int, end: Int) {
+    when (styleSpan.style) {
+        Typeface.NORMAL -> addStyle(
+            SpanStyle(fontWeight = FontWeight.Normal, fontStyle = FontStyle.Normal),
+            start,
+            end,
+        )
+
+        Typeface.BOLD -> addStyle(
+            SpanStyle(fontWeight = FontWeight.Bold, fontStyle = FontStyle.Normal),
+            start,
+            end,
+        )
+
+        Typeface.ITALIC -> addStyle(
+            SpanStyle(fontWeight = FontWeight.Normal, fontStyle = FontStyle.Italic),
+            start,
+            end,
+        )
+
+        Typeface.BOLD_ITALIC -> addStyle(
+            SpanStyle(fontWeight = FontWeight.Bold, fontStyle = FontStyle.Italic),
+            start,
+            end,
+        )
+    }
+}
+
+private fun AnnotatedString.Builder.addUrlSpan(
+    urlSpan: URLSpan,
+    urlSpanColor: Color,
+    start: Int,
+    end: Int,
+) {
+    addStyle(
+        SpanStyle(color = urlSpanColor, textDecoration = TextDecoration.Underline),
+        start,
+        end,
+    )
+    if (!urlSpan.url.isNullOrEmpty()) {
+        addStringAnnotation(URL_SPAN_TAG, urlSpan.url, start, end)
+    }
 }
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/BasePreference.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/BasePreference.kt
index c75f41b..081e668 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/BasePreference.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/BasePreference.kt
@@ -45,11 +45,10 @@
     BaseLayout(
         title = title,
         subTitle = {
-            if (singleLineSummary) {
-                SettingsBody(body = summary, maxLines = 1)
-            } else {
-                SettingsBody(body = summary)
-            }
+            SettingsBody(
+                body = summary.value,
+                maxLines = if (singleLineSummary) 1 else Int.MAX_VALUE,
+            )
         },
         modifier = modifier,
         icon = icon,
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/AnnotatedText.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/AnnotatedText.kt
new file mode 100644
index 0000000..82ac7e3
--- /dev/null
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/AnnotatedText.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.spa.widget.ui
+
+import androidx.annotation.StringRes
+import androidx.compose.foundation.text.ClickableText
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.platform.LocalUriHandler
+import com.android.settingslib.spa.framework.util.URL_SPAN_TAG
+import com.android.settingslib.spa.framework.util.annotatedStringResource
+
+@Composable
+fun AnnotatedText(@StringRes id: Int) {
+    val uriHandler = LocalUriHandler.current
+    val annotatedString = annotatedStringResource(id)
+    ClickableText(
+        text = annotatedString,
+        style = MaterialTheme.typography.bodyMedium.copy(
+            color = MaterialTheme.colorScheme.onSurfaceVariant,
+        ),
+    ) { offset ->
+        // Gets the url at the clicked position.
+        annotatedString.getStringAnnotations(URL_SPAN_TAG, offset, offset)
+            .firstOrNull()
+            ?.let { uriHandler.openUri(it.item) }
+    }
+}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Text.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Text.kt
index 01ba8f8..57319e7 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Text.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/ui/Text.kt
@@ -24,7 +24,6 @@
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
-import androidx.compose.runtime.State
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.text.style.TextOverflow
@@ -35,11 +34,6 @@
 import com.android.settingslib.spa.framework.theme.toMediumWeight
 
 @Composable
-fun SettingsTitle(title: State<String>, useMediumWeight: Boolean = false) {
-    SettingsTitle(title.value, useMediumWeight)
-}
-
-@Composable
 fun SettingsTitle(title: String, useMediumWeight: Boolean = false) {
     Text(
         text = title,
@@ -55,14 +49,6 @@
 
 @Composable
 fun SettingsBody(
-    body: State<String>,
-    maxLines: Int = Int.MAX_VALUE,
-) {
-    SettingsBody(body = body.value, maxLines = maxLines)
-}
-
-@Composable
-fun SettingsBody(
     body: String,
     maxLines: Int = Int.MAX_VALUE,
 ) {
diff --git a/packages/SettingsLib/Spa/tests/res/values/strings.xml b/packages/SettingsLib/Spa/tests/res/values/strings.xml
index cbfea06..fb8f878 100644
--- a/packages/SettingsLib/Spa/tests/res/values/strings.xml
+++ b/packages/SettingsLib/Spa/tests/res/values/strings.xml
@@ -26,5 +26,7 @@
         other {There are # songs found in {place}.}
     }</string>
 
-    <string name="test_annotated_string_resource">Annotated string with <b>bold</b> and <a href="https://www.google.com/">link</a>.</string>
+    <string name="test_annotated_string_resource">Annotated string with <b>bold</b> and <a href="https://www.android.com/">link</a>.</string>
+
+    <string name="test_link"><a href="https://www.android.com/">link</a></string>
 </resources>
diff --git a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/util/AnnotatedStringResourceTest.kt b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/util/AnnotatedStringResourceTest.kt
index b65be42..9928355 100644
--- a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/util/AnnotatedStringResourceTest.kt
+++ b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/util/AnnotatedStringResourceTest.kt
@@ -16,14 +16,14 @@
 
 package com.android.settingslib.spa.framework.util
 
-import androidx.compose.ui.graphics.Color
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.ui.text.SpanStyle
 import androidx.compose.ui.text.font.FontStyle
 import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.text.style.TextDecoration
 import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.android.settingslib.spa.framework.util.URLSPAN_TAG
-import com.android.settingslib.spa.framework.util.annotatedStringResource
 import com.android.settingslib.spa.test.R
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
@@ -38,24 +38,34 @@
     @Test
     fun testAnnotatedStringResource() {
         composeTestRule.setContent {
-            val annotatedString = annotatedStringResource(R.string.test_annotated_string_resource, Color.Blue)
+            val annotatedString =
+                annotatedStringResource(R.string.test_annotated_string_resource)
 
             val annotations = annotatedString.getStringAnnotations(0, annotatedString.length)
-            assertThat(annotations).hasSize(1)
-            assertThat(annotations[0].start).isEqualTo(31)
-            assertThat(annotations[0].end).isEqualTo(35)
-            assertThat(annotations[0].tag).isEqualTo(URLSPAN_TAG)
-            assertThat(annotations[0].item).isEqualTo("https://www.google.com/")
+            assertThat(annotations).containsExactly(
+                AnnotatedString.Range(
+                    item = "https://www.android.com/",
+                    start = 31,
+                    end = 35,
+                    tag = URL_SPAN_TAG,
+                )
+            )
 
-            assertThat(annotatedString.spanStyles).hasSize(2)
-            assertThat(annotatedString.spanStyles[0].start).isEqualTo(22)
-            assertThat(annotatedString.spanStyles[0].end).isEqualTo(26)
-            assertThat(annotatedString.spanStyles[0].item).isEqualTo(
-                    SpanStyle(fontWeight = FontWeight.Bold, fontStyle = FontStyle.Normal))
-
-            assertThat(annotatedString.spanStyles[1].start).isEqualTo(31)
-            assertThat(annotatedString.spanStyles[1].end).isEqualTo(35)
-            assertThat(annotatedString.spanStyles[1].item).isEqualTo(SpanStyle(color = Color.Blue))
+            assertThat(annotatedString.spanStyles).containsExactly(
+                AnnotatedString.Range(
+                    item = SpanStyle(fontWeight = FontWeight.Bold, fontStyle = FontStyle.Normal),
+                    start = 22,
+                    end = 26,
+                ),
+                AnnotatedString.Range(
+                    item = SpanStyle(
+                        color = MaterialTheme.colorScheme.primary,
+                        textDecoration = TextDecoration.Underline,
+                    ),
+                    start = 31,
+                    end = 35,
+                ),
+            )
         }
     }
 }
diff --git a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/util/AnnotatedTextTest.kt b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/util/AnnotatedTextTest.kt
new file mode 100644
index 0000000..2c218e3
--- /dev/null
+++ b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/util/AnnotatedTextTest.kt
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.spa.framework.util
+
+import android.content.Context
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.ui.platform.LocalUriHandler
+import androidx.compose.ui.platform.UriHandler
+import androidx.compose.ui.test.assertIsDisplayed
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onNodeWithText
+import androidx.compose.ui.test.performClick
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settingslib.spa.test.R
+import com.android.settingslib.spa.widget.ui.AnnotatedText
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.verify
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoRule
+
+@RunWith(AndroidJUnit4::class)
+class AnnotatedTextTest {
+    @get:Rule
+    val composeTestRule = createComposeRule()
+
+    @get:Rule
+    val mockito: MockitoRule = MockitoJUnit.rule()
+
+    @Mock
+    private lateinit var uriHandler: UriHandler
+
+    private val context: Context = ApplicationProvider.getApplicationContext()
+
+    @Test
+    fun text_isDisplayed() {
+        composeTestRule.setContent {
+            AnnotatedText(R.string.test_annotated_string_resource)
+        }
+
+        composeTestRule.onNodeWithText(context.getString(R.string.test_annotated_string_resource))
+            .assertIsDisplayed()
+    }
+
+    @Test
+    fun onUriClick_openUri() {
+        composeTestRule.setContent {
+            CompositionLocalProvider(LocalUriHandler provides uriHandler) {
+                AnnotatedText(R.string.test_link)
+            }
+        }
+
+        composeTestRule.onNodeWithText(context.getString(R.string.test_link)).performClick()
+
+        verify(uriHandler).openUri("https://www.android.com/")
+    }
+}
diff --git a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/widget/ui/TextTest.kt b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/widget/ui/TextTest.kt
index 7e5b4f8..f9c1f94 100644
--- a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/widget/ui/TextTest.kt
+++ b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/widget/ui/TextTest.kt
@@ -20,7 +20,6 @@
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onNodeWithText
 import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.android.settingslib.spa.framework.compose.toState
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -31,14 +30,17 @@
     val composeTestRule = createComposeRule()
 
     @Test
-    fun testTitle() {
+    fun settingsTitle() {
         composeTestRule.setContent {
             SettingsTitle(title = "myTitleValue")
-            SettingsTitle(title = "myTitleState".toState())
+        }
+        composeTestRule.onNodeWithText("myTitleValue").assertIsDisplayed()
+    }
+
+    fun placeholderTitle() {
+        composeTestRule.setContent {
             PlaceholderTitle(title = "myTitlePlaceholder")
         }
-        composeTestRule.onNodeWithText("myTitleState").assertIsDisplayed()
-        composeTestRule.onNodeWithText("myTitleValue").assertIsDisplayed()
         composeTestRule.onNodeWithText("myTitlePlaceholder").assertIsDisplayed()
     }
 }
diff --git a/packages/SettingsLib/Spa/testutils/Android.bp b/packages/SettingsLib/Spa/testutils/Android.bp
index e4d56cc..65f5d34 100644
--- a/packages/SettingsLib/Spa/testutils/Android.bp
+++ b/packages/SettingsLib/Spa/testutils/Android.bp
@@ -22,7 +22,7 @@
     name: "SpaLibTestUtils",
 
     srcs: ["src/**/*.kt"],
-
+    use_resource_processor: true,
     static_libs: [
         "SpaLib",
         "androidx.arch.core_core-testing",
diff --git a/packages/SettingsLib/SpaPrivileged/Android.bp b/packages/SettingsLib/SpaPrivileged/Android.bp
index 4a7418f..eaeda3c 100644
--- a/packages/SettingsLib/SpaPrivileged/Android.bp
+++ b/packages/SettingsLib/SpaPrivileged/Android.bp
@@ -22,7 +22,7 @@
     name: "SpaPrivilegedLib",
 
     srcs: ["src/**/*.kt"],
-
+    use_resource_processor: true,
     static_libs: [
         "SpaLib",
         "SettingsLib",
@@ -45,5 +45,6 @@
 // Expose the srcs to tests, so the tests can access the internal classes.
 filegroup {
     name: "SpaPrivilegedLib_srcs",
+    visibility: [":__subpackages__"],
     srcs: ["src/**/*.kt"],
 }
diff --git a/packages/SettingsLib/SpaPrivileged/res/values-fa/strings.xml b/packages/SettingsLib/SpaPrivileged/res/values-fa/strings.xml
index 30ed347..eaf5bcd 100644
--- a/packages/SettingsLib/SpaPrivileged/res/values-fa/strings.xml
+++ b/packages/SettingsLib/SpaPrivileged/res/values-fa/strings.xml
@@ -21,7 +21,7 @@
     <string name="menu_show_system" msgid="906304605807554788">"نمایش سیستم"</string>
     <string name="menu_hide_system" msgid="374571689914923020">"پنهان کردن سیستم"</string>
     <string name="app_permission_summary_allowed" msgid="6115213465364138103">"مجاز"</string>
-    <string name="app_permission_summary_not_allowed" msgid="58396132188553920">"غیرمجاز"</string>
+    <string name="app_permission_summary_not_allowed" msgid="58396132188553920">"مجاز نبودن"</string>
     <string name="version_text" msgid="4001669804596458577">"نسخه <xliff:g id="VERSION_NUM">%1$s</xliff:g>"</string>
     <string name="cloned_app_info_label" msgid="1765651167024478391">"همسانه <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
 </resources>
diff --git a/packages/SettingsLib/SpaPrivileged/res/values-ko/strings.xml b/packages/SettingsLib/SpaPrivileged/res/values-ko/strings.xml
index ef4ee0d..3e1b837 100644
--- a/packages/SettingsLib/SpaPrivileged/res/values-ko/strings.xml
+++ b/packages/SettingsLib/SpaPrivileged/res/values-ko/strings.xml
@@ -23,5 +23,5 @@
     <string name="app_permission_summary_allowed" msgid="6115213465364138103">"허용됨"</string>
     <string name="app_permission_summary_not_allowed" msgid="58396132188553920">"허용되지 않음"</string>
     <string name="version_text" msgid="4001669804596458577">"버전 <xliff:g id="VERSION_NUM">%1$s</xliff:g>"</string>
-    <string name="cloned_app_info_label" msgid="1765651167024478391">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> 클론"</string>
+    <string name="cloned_app_info_label" msgid="1765651167024478391">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> 복제"</string>
 </resources>
diff --git a/packages/SettingsLib/SpaPrivileged/res/values-mk/strings.xml b/packages/SettingsLib/SpaPrivileged/res/values-mk/strings.xml
index 56ed2d9..fc5b94b 100644
--- a/packages/SettingsLib/SpaPrivileged/res/values-mk/strings.xml
+++ b/packages/SettingsLib/SpaPrivileged/res/values-mk/strings.xml
@@ -19,7 +19,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="no_applications" msgid="5800789569715871963">"Нема апликации."</string>
     <string name="menu_show_system" msgid="906304605807554788">"Прикажи го системот"</string>
-    <string name="menu_hide_system" msgid="374571689914923020">"Сокриј го системот"</string>
+    <string name="menu_hide_system" msgid="374571689914923020">"Скриј го системот"</string>
     <string name="app_permission_summary_allowed" msgid="6115213465364138103">"Со дозволен пристап"</string>
     <string name="app_permission_summary_not_allowed" msgid="58396132188553920">"Без дозволен пристап"</string>
     <string name="version_text" msgid="4001669804596458577">"верзија <xliff:g id="VERSION_NUM">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/SpaPrivileged/res/values-sk/strings.xml b/packages/SettingsLib/SpaPrivileged/res/values-sk/strings.xml
index 9888125..6cca71e 100644
--- a/packages/SettingsLib/SpaPrivileged/res/values-sk/strings.xml
+++ b/packages/SettingsLib/SpaPrivileged/res/values-sk/strings.xml
@@ -23,5 +23,5 @@
     <string name="app_permission_summary_allowed" msgid="6115213465364138103">"Povolené"</string>
     <string name="app_permission_summary_not_allowed" msgid="58396132188553920">"Nepovolené"</string>
     <string name="version_text" msgid="4001669804596458577">"verzia <xliff:g id="VERSION_NUM">%1$s</xliff:g>"</string>
-    <string name="cloned_app_info_label" msgid="1765651167024478391">"Klon <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
+    <string name="cloned_app_info_label" msgid="1765651167024478391">"Klon aplikácie <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
 </resources>
diff --git a/packages/SettingsLib/SpaPrivileged/res/values-zh-rTW/strings.xml b/packages/SettingsLib/SpaPrivileged/res/values-zh-rTW/strings.xml
index 03efe37..1fb9492 100644
--- a/packages/SettingsLib/SpaPrivileged/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/SpaPrivileged/res/values-zh-rTW/strings.xml
@@ -18,7 +18,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="no_applications" msgid="5800789569715871963">"沒有應用程式。"</string>
-    <string name="menu_show_system" msgid="906304605807554788">"顯示系統程序"</string>
+    <string name="menu_show_system" msgid="906304605807554788">"顯示系統設定"</string>
     <string name="menu_hide_system" msgid="374571689914923020">"隱藏系統程序"</string>
     <string name="app_permission_summary_allowed" msgid="6115213465364138103">"允許"</string>
     <string name="app_permission_summary_not_allowed" msgid="58396132188553920">"不允許"</string>
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/framework/compose/StringResources.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/framework/compose/StringResources.kt
new file mode 100644
index 0000000..05cb1b1
--- /dev/null
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/framework/compose/StringResources.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.spaprivileged.framework.compose
+
+import android.content.Context
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.res.stringResource
+import com.android.settingslib.R
+
+/** An empty placer holder string. */
+@Composable
+fun placeholder() = stringResource(R.string.summary_placeholder)
+
+/** Gets an empty placer holder string. */
+fun Context.getPlaceholder(): String = getString(R.string.summary_placeholder)
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppRepository.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppRepository.kt
index 1a7d896..de2cf1f 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppRepository.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/app/AppRepository.kt
@@ -23,11 +23,11 @@
 import androidx.compose.runtime.State
 import androidx.compose.runtime.produceState
 import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.res.stringResource
 import com.android.settingslib.Utils
 import com.android.settingslib.spa.framework.compose.rememberContext
 import com.android.settingslib.spaprivileged.R
 import com.android.settingslib.spaprivileged.framework.common.userManager
+import com.android.settingslib.spaprivileged.framework.compose.placeholder
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.withContext
 
@@ -40,7 +40,7 @@
     @Composable
     fun produceLabel(app: ApplicationInfo, isClonedAppPage: Boolean = false): State<String> {
         val context = LocalContext.current
-        return produceState(initialValue = stringResource(R.string.summary_placeholder), app) {
+        return produceState(initialValue = placeholder(), app) {
             withContext(Dispatchers.IO) {
                 value = if (isClonedAppPage || isCloneApp(context, app)) {
                     context.getString(R.string.cloned_app_info_label, loadLabel(app))
@@ -82,7 +82,7 @@
             withContext(Dispatchers.IO) {
                 value = when {
                     context.userManager.isManagedProfile(app.userId) -> {
-                        context.getString(R.string.category_work)
+                        context.getString(com.android.settingslib.R.string.category_work)
                     }
 
                     else -> null
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/EnterpriseRepository.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/EnterpriseRepository.kt
index fab3ae8..cc3584b 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/EnterpriseRepository.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/EnterpriseRepository.kt
@@ -20,7 +20,7 @@
 import android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_CATEGORY_HEADER
 import android.app.admin.DevicePolicyResources.Strings.Settings.WORK_CATEGORY_HEADER
 import android.content.Context
-import com.android.settingslib.spaprivileged.R
+import com.android.settingslib.R
 
 class EnterpriseRepository(private val context: Context) {
     private val resources by lazy {
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/RestrictionsProvider.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/RestrictionsProvider.kt
index ae362c8..a370ebf 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/RestrictionsProvider.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/model/enterprise/RestrictionsProvider.kt
@@ -22,12 +22,11 @@
 import android.os.UserManager
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.State
-import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi
 import androidx.lifecycle.compose.collectAsStateWithLifecycle
 import com.android.settingslib.RestrictedLockUtils
 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin
 import com.android.settingslib.RestrictedLockUtilsInternal
-import com.android.settingslib.spaprivileged.R
+import com.android.settingslib.widget.R
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.flow
 import kotlinx.coroutines.flow.flowOn
@@ -56,11 +55,15 @@
 
     override fun getSummary(checked: Boolean?) = when (checked) {
         true -> enterpriseRepository.getEnterpriseString(
-            Settings.ENABLED_BY_ADMIN_SWITCH_SUMMARY, R.string.enabled_by_admin
+            updatableStringId = Settings.ENABLED_BY_ADMIN_SWITCH_SUMMARY,
+            resId = R.string.enabled_by_admin,
         )
+
         false -> enterpriseRepository.getEnterpriseString(
-            Settings.DISABLED_BY_ADMIN_SWITCH_SUMMARY, R.string.disabled_by_admin
+            updatableStringId = Settings.DISABLED_BY_ADMIN_SWITCH_SUMMARY,
+            resId = R.string.disabled_by_admin,
         )
+
         else -> ""
     }
 
@@ -86,7 +89,6 @@
         emit(getRestrictedMode())
     }.flowOn(Dispatchers.IO)
 
-    @OptIn(ExperimentalLifecycleComposeApi::class)
     @Composable
     override fun restrictedModeState() =
         restrictedMode.collectAsStateWithLifecycle(initialValue = null)
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfo.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfo.kt
index a0ff216..cee750e 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfo.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfo.kt
@@ -27,14 +27,17 @@
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
-import androidx.compose.material3.Divider
+import androidx.compose.material3.HorizontalDivider
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.res.stringResource
 import androidx.compose.ui.semantics.semantics
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
+import com.android.settingslib.development.DevelopmentSettingsEnabler
 import com.android.settingslib.spa.framework.compose.rememberDrawablePainter
 import com.android.settingslib.spa.framework.theme.SettingsDimension
 import com.android.settingslib.spa.widget.ui.SettingsBody
@@ -69,7 +72,7 @@
     private fun InstallType(app: ApplicationInfo) {
         if (!app.isInstantApp) return
         Spacer(modifier = Modifier.height(4.dp))
-        SettingsBody(stringResource(R.string.install_type_instant))
+        SettingsBody(stringResource(com.android.settingslib.widget.R.string.install_type_instant))
     }
 
     @Composable
@@ -80,11 +83,22 @@
     }
 
     @Composable
-    fun FooterAppVersion() {
+    fun FooterAppVersion(showPackageName: Boolean = rememberIsDevelopmentSettingsEnabled()) {
         if (packageInfo.versionName == null) return
-        Divider()
-        Box(modifier = Modifier.padding(SettingsDimension.itemPadding)) {
+        HorizontalDivider()
+        Column(modifier = Modifier.padding(SettingsDimension.itemPadding)) {
             SettingsBody(stringResource(R.string.version_text, packageInfo.versionNameBidiWrapped))
+            if (showPackageName) {
+                SettingsBody(packageInfo.packageName)
+            }
+        }
+    }
+
+    @Composable
+    private fun rememberIsDevelopmentSettingsEnabled(): Boolean {
+        val context = LocalContext.current
+        return remember {
+            DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(context)
         }
     }
 
@@ -108,5 +122,5 @@
 @Composable
 internal fun AppLabel(app: ApplicationInfo, isClonedAppPage: Boolean = false) {
     val appRepository = rememberAppRepository()
-    SettingsTitle(title = appRepository.produceLabel(app, isClonedAppPage), useMediumWeight = true)
+    SettingsTitle(appRepository.produceLabel(app, isClonedAppPage).value, useMediumWeight = true)
 }
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfoPage.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfoPage.kt
index 21c9e34..945f2e2 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfoPage.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppInfoPage.kt
@@ -28,8 +28,7 @@
     title: String,
     packageName: String,
     userId: Int,
-    footerText: String,
-    footerContent: (@Composable () -> Unit)?,
+    footerContent: @Composable () -> Unit,
     packageManagers: IPackageManagers,
     content: @Composable PackageInfo.() -> Unit,
 ) {
@@ -41,10 +40,6 @@
 
         packageInfo.content()
 
-        if (footerContent != null) {
-            Footer(footerContent)
-        } else {
-            Footer(footerText)
-        }
+        Footer(footerContent)
     }
 }
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt
index e846687..155905b 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItem.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2022 The Android Open Source Project
+ * Copyright (C) 2023 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,26 +19,26 @@
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.State
 import com.android.settingslib.spa.framework.theme.SettingsDimension
+import com.android.settingslib.spa.widget.preference.SwitchPreference
 import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
-import com.android.settingslib.spa.widget.preference.TwoTargetSwitchPreference
 import com.android.settingslib.spaprivileged.model.app.AppRecord
 
 @Composable
 fun <T : AppRecord> AppListItemModel<T>.AppListSwitchItem(
-    onClick: () -> Unit,
     checked: State<Boolean?>,
     changeable: State<Boolean>,
     onCheckedChange: ((newChecked: Boolean) -> Unit)?,
 ) {
-    TwoTargetSwitchPreference(
+    SwitchPreference(
         model = object : SwitchPreferenceModel {
             override val title = label
             override val summary = this@AppListSwitchItem.summary
+            override val icon = @Composable {
+                AppIcon(record.app, SettingsDimension.appIconItemSize)
+            }
             override val checked = checked
             override val changeable = changeable
             override val onCheckedChange = onCheckedChange
         },
-        icon = { AppIcon(record.app, SettingsDimension.appIconItemSize) },
-        onClick = onClick,
     )
 }
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListTwoTargetSwitchItem.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListTwoTargetSwitchItem.kt
new file mode 100644
index 0000000..99d3840
--- /dev/null
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppListTwoTargetSwitchItem.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.spaprivileged.template.app
+
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import com.android.settingslib.spa.framework.theme.SettingsDimension
+import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
+import com.android.settingslib.spa.widget.preference.TwoTargetSwitchPreference
+import com.android.settingslib.spaprivileged.model.app.AppRecord
+
+@Composable
+fun <T : AppRecord> AppListItemModel<T>.AppListTwoTargetSwitchItem(
+    onClick: () -> Unit,
+    checked: State<Boolean?>,
+    changeable: State<Boolean>,
+    onCheckedChange: ((newChecked: Boolean) -> Unit)?,
+) {
+    TwoTargetSwitchPreference(
+        model = object : SwitchPreferenceModel {
+            override val title = label
+            override val summary = this@AppListTwoTargetSwitchItem.summary
+            override val checked = checked
+            override val changeable = changeable
+            override val onCheckedChange = onCheckedChange
+        },
+        icon = { AppIcon(record.app, SettingsDimension.appIconItemSize) },
+        onClick = onClick,
+    )
+}
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppStorageSize.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppStorageSize.kt
index 47bf85d..5fc1972 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppStorageSize.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppStorageSize.kt
@@ -24,9 +24,8 @@
 import androidx.compose.runtime.State
 import androidx.compose.runtime.produceState
 import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.res.stringResource
-import com.android.settingslib.spaprivileged.R
 import com.android.settingslib.spaprivileged.framework.common.storageStatsManager
+import com.android.settingslib.spaprivileged.framework.compose.placeholder
 import com.android.settingslib.spaprivileged.model.app.userHandle
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.withContext
@@ -36,7 +35,7 @@
 @Composable
 fun ApplicationInfo.getStorageSize(): State<String> {
     val context = LocalContext.current
-    return produceState(initialValue = stringResource(R.string.summary_placeholder)) {
+    return produceState(initialValue = placeholder()) {
         withContext(Dispatchers.IO) {
             val sizeBytes = calculateSizeBytes(context)
             value = if (sizeBytes != null) Formatter.formatFileSize(context, sizeBytes) else ""
@@ -44,7 +43,7 @@
     }
 }
 
-private fun ApplicationInfo.calculateSizeBytes(context: Context): Long? {
+fun ApplicationInfo.calculateSizeBytes(context: Context): Long? {
     val storageStatsManager = context.storageStatsManager
     return try {
         val stats = storageStatsManager.queryStatsForPackage(storageUuid, packageName, userHandle)
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt
index 7c689c6..7f82be4 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppInfoPage.kt
@@ -38,6 +38,7 @@
 import com.android.settingslib.spa.widget.preference.Preference
 import com.android.settingslib.spa.widget.preference.PreferenceModel
 import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
+import com.android.settingslib.spa.widget.ui.AnnotatedText
 import com.android.settingslib.spaprivileged.model.app.AppRecord
 import com.android.settingslib.spaprivileged.model.app.IPackageManagers
 import com.android.settingslib.spaprivileged.model.app.PackageManagers
@@ -140,8 +141,7 @@
         title = stringResource(pageTitleResId),
         packageName = packageName,
         userId = userId,
-        footerText = stringResource(footerResId),
-        footerContent = footerContent(),
+        footerContent = { AnnotatedText(footerResId) },
         packageManagers = packageManagers,
     ) {
         val model = createSwitchModel(applicationInfo)
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt
index f4b3204..1ab6230 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppList.kt
@@ -20,7 +20,6 @@
 import android.content.pm.ApplicationInfo
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.State
-import androidx.compose.ui.text.AnnotatedString
 import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
 import com.android.settingslib.spa.framework.common.SettingsPageProvider
 import com.android.settingslib.spa.framework.compose.rememberContext
@@ -37,10 +36,7 @@
     val footerResId: Int
     val switchRestrictionKeys: List<String>
         get() = emptyList()
-    @Composable
-    fun footerContent(): (@Composable () -> Unit)? {
-        return null
-    }
+
     /**
      * Loads the extra info for the App List, and generates the [AppRecord] List.
      *
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt
index cbc4822..1fa854a 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt
@@ -38,6 +38,7 @@
 import com.android.settingslib.spa.widget.preference.Preference
 import com.android.settingslib.spa.widget.preference.PreferenceModel
 import com.android.settingslib.spaprivileged.R
+import com.android.settingslib.spaprivileged.framework.compose.getPlaceholder
 import com.android.settingslib.spaprivileged.model.app.AppListModel
 import com.android.settingslib.spaprivileged.model.app.AppRecord
 import com.android.settingslib.spaprivileged.model.app.userId
@@ -173,7 +174,7 @@
         when (allowed.value) {
             true -> context.getString(R.string.app_permission_summary_allowed)
             false -> context.getString(R.string.app_permission_summary_not_allowed)
-            null -> context.getString(R.string.summary_placeholder)
+            null -> context.getPlaceholder()
         }
     }
 
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/preference/RestrictedSwitchPreference.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/preference/RestrictedSwitchPreference.kt
index b08b6df..e77dcd4 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/preference/RestrictedSwitchPreference.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/preference/RestrictedSwitchPreference.kt
@@ -32,7 +32,7 @@
 import com.android.settingslib.spa.framework.compose.stateOf
 import com.android.settingslib.spa.widget.preference.SwitchPreference
 import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
-import com.android.settingslib.spaprivileged.R
+import com.android.settingslib.spaprivileged.framework.compose.getPlaceholder
 import com.android.settingslib.spaprivileged.model.enterprise.BaseUserRestricted
 import com.android.settingslib.spaprivileged.model.enterprise.BlockedByAdmin
 import com.android.settingslib.spaprivileged.model.enterprise.NoRestricted
@@ -72,9 +72,12 @@
         checked: State<Boolean?>,
     ): State<String> = when (restrictedMode) {
         is NoRestricted -> summaryIfNoRestricted
-        is BaseUserRestricted -> stateOf(context.getString(R.string.disabled))
+        is BaseUserRestricted -> stateOf(
+            context.getString(com.android.settingslib.R.string.disabled)
+        )
+
         is BlockedByAdmin -> derivedStateOf { restrictedMode.getSummary(checked.value) }
-        null -> stateOf(context.getString(R.string.summary_placeholder))
+        null -> stateOf(context.getPlaceholder())
     }
 }
 
diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppRepositoryTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppRepositoryTest.kt
index 26caa01..d11e63a 100644
--- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppRepositoryTest.kt
+++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/model/app/AppRepositoryTest.kt
@@ -25,7 +25,6 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import com.android.settingslib.spa.framework.compose.stateOf
 import com.android.settingslib.spa.testutils.delay
-import com.android.settingslib.spaprivileged.R
 import com.android.settingslib.spaprivileged.framework.common.userManager
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
@@ -66,7 +65,8 @@
 
         val contentDescription = produceIconContentDescription()
 
-        assertThat(contentDescription.value).isEqualTo(context.getString(R.string.category_work))
+        assertThat(contentDescription.value)
+            .isEqualTo(context.getString(com.android.settingslib.R.string.category_work))
     }
 
     @Test
diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppInfoTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppInfoTest.kt
index bb56c10..ab34f68 100644
--- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppInfoTest.kt
+++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppInfoTest.kt
@@ -23,10 +23,12 @@
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.test.assertIsDisplayed
+import androidx.compose.ui.test.hasText
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onNodeWithText
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settingslib.spa.testutils.waitUntilExists
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -51,7 +53,7 @@
             }
         }
 
-        composeTestRule.onNodeWithText(LABEL).assertIsDisplayed()
+        composeTestRule.waitUntilExists(hasText(LABEL))
     }
 
     @Test
@@ -93,6 +95,7 @@
         val packageInfo = PackageInfo().apply {
             applicationInfo = APP
             versionName = VERSION_NAME
+            packageName = PACKAGE_NAME
         }
         val appInfoProvider = AppInfoProvider(packageInfo)
 
@@ -105,9 +108,45 @@
         composeTestRule.onNodeWithText("version $VERSION_NAME").assertIsDisplayed()
     }
 
+    @Test
+    fun footerAppVersion_developmentEnabled_packageNameIsDisplayed() {
+        val packageInfo = PackageInfo().apply {
+            applicationInfo = APP
+            versionName = VERSION_NAME
+            packageName = PACKAGE_NAME
+        }
+        val appInfoProvider = AppInfoProvider(packageInfo)
+
+        composeTestRule.setContent {
+            CompositionLocalProvider(LocalContext provides context) {
+                appInfoProvider.FooterAppVersion(true)
+            }
+        }
+        composeTestRule.onNodeWithText(PACKAGE_NAME).assertIsDisplayed()
+    }
+
+
+    @Test
+    fun footerAppVersion_developmentDisabled_packageNameDoesNotExist() {
+        val packageInfo = PackageInfo().apply {
+            applicationInfo = APP
+            versionName = VERSION_NAME
+            packageName = PACKAGE_NAME
+        }
+        val appInfoProvider = AppInfoProvider(packageInfo)
+
+        composeTestRule.setContent {
+            CompositionLocalProvider(LocalContext provides context) {
+                appInfoProvider.FooterAppVersion(false)
+            }
+        }
+        composeTestRule.onNodeWithText(PACKAGE_NAME).assertDoesNotExist()
+    }
+
     private companion object {
         const val LABEL = "Label"
         const val VERSION_NAME = "VersionName"
+        const val PACKAGE_NAME = "package.name"
         val APP = object : ApplicationInfo() {
             override fun loadLabel(pm: PackageManager) = LABEL
         }
diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListPageTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListPageTest.kt
index f6f4889..82fbee9 100644
--- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListPageTest.kt
+++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListPageTest.kt
@@ -116,7 +116,7 @@
 
     private fun onMoreOptions() =
         composeTestRule.onNodeWithContentDescription(
-            context.getString(R.string.abc_action_menu_overflow_description)
+            context.getString(androidx.appcompat.R.string.abc_action_menu_overflow_description)
         )
 
     private companion object {
diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItemTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItemTest.kt
index abdcd3b..2fd1b10 100644
--- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItemTest.kt
+++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListSwitchItemTest.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2022 The Android Open Source Project
+ * Copyright (C) 2023 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -43,7 +43,6 @@
     fun appLabel_displayed() {
         composeTestRule.setContent {
             ITEM_MODEL.AppListSwitchItem(
-                onClick = {},
                 checked = stateOf(null),
                 changeable = stateOf(false),
                 onCheckedChange = {},
@@ -57,7 +56,6 @@
     fun summary_displayed() {
         composeTestRule.setContent {
             ITEM_MODEL.AppListSwitchItem(
-                onClick = {},
                 checked = stateOf(null),
                 changeable = stateOf(false),
                 onCheckedChange = {},
@@ -68,27 +66,9 @@
     }
 
     @Test
-    fun title_onClick() {
-        var titleClicked = false
-        composeTestRule.setContent {
-            ITEM_MODEL.AppListSwitchItem(
-                onClick = { titleClicked = true },
-                checked = stateOf(false),
-                changeable = stateOf(false),
-                onCheckedChange = {},
-            )
-        }
-
-        composeTestRule.onNodeWithText(LABEL).performClick()
-
-        assertThat(titleClicked).isTrue()
-    }
-
-    @Test
     fun switch_checkIsNull() {
         composeTestRule.setContent {
             ITEM_MODEL.AppListSwitchItem(
-                onClick = {},
                 checked = stateOf(null),
                 changeable = stateOf(false),
                 onCheckedChange = {},
@@ -102,7 +82,6 @@
     fun switch_checked() {
         composeTestRule.setContent {
             ITEM_MODEL.AppListSwitchItem(
-                onClick = {},
                 checked = stateOf(true),
                 changeable = stateOf(false),
                 onCheckedChange = {},
@@ -116,7 +95,6 @@
     fun switch_notChecked() {
         composeTestRule.setContent {
             ITEM_MODEL.AppListSwitchItem(
-                onClick = {},
                 checked = stateOf(false),
                 changeable = stateOf(false),
                 onCheckedChange = {},
@@ -130,7 +108,6 @@
     fun switch_changeable() {
         composeTestRule.setContent {
             ITEM_MODEL.AppListSwitchItem(
-                onClick = {},
                 checked = stateOf(false),
                 changeable = stateOf(true),
                 onCheckedChange = {},
@@ -144,7 +121,6 @@
     fun switch_notChangeable() {
         composeTestRule.setContent {
             ITEM_MODEL.AppListSwitchItem(
-                onClick = {},
                 checked = stateOf(false),
                 changeable = stateOf(false),
                 onCheckedChange = {},
@@ -159,7 +135,6 @@
         var switchClicked = false
         composeTestRule.setContent {
             ITEM_MODEL.AppListSwitchItem(
-                onClick = {},
                 checked = stateOf(false),
                 changeable = stateOf(true),
                 onCheckedChange = { switchClicked = true },
diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTest.kt
index 241a134..124ced6 100644
--- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTest.kt
+++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTest.kt
@@ -21,14 +21,16 @@
 import android.icu.text.CollationKey
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
+import androidx.compose.ui.test.ExperimentalTestApi
 import androidx.compose.ui.test.assertIsDisplayed
+import androidx.compose.ui.test.hasText
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onNodeWithText
 import androidx.compose.ui.test.performClick
 import androidx.compose.ui.unit.dp
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.android.settingslib.spa.framework.compose.toState
+import com.android.settingslib.spa.framework.compose.stateOf
 import com.android.settingslib.spa.widget.ui.SpinnerOption
 import com.android.settingslib.spaprivileged.R
 import com.android.settingslib.spaprivileged.model.app.AppEntry
@@ -42,6 +44,7 @@
 import org.junit.Test
 import org.junit.runner.RunWith
 
+@OptIn(ExperimentalTestApi::class)
 @RunWith(AndroidJUnit4::class)
 class AppListTest {
     @get:Rule
@@ -53,7 +56,10 @@
     fun whenHasOptions_firstOptionDisplayed() {
         setContent(options = listOf(OPTION_0, OPTION_1))
 
-        composeTestRule.onNodeWithText(OPTION_0).assertIsDisplayed()
+        composeTestRule.waitUntilExactlyOneExists(
+            matcher = hasText(OPTION_0),
+            timeoutMillis = 5_000,
+        )
         composeTestRule.onNodeWithText(OPTION_1).assertDoesNotExist()
     }
 
@@ -61,6 +67,10 @@
     fun whenHasOptions_couldSwitchOption() {
         setContent(options = listOf(OPTION_0, OPTION_1))
 
+        composeTestRule.waitUntilExactlyOneExists(
+            matcher = hasText(OPTION_0),
+            timeoutMillis = 5_000,
+        )
         composeTestRule.onNodeWithText(OPTION_0).performClick()
         composeTestRule.onNodeWithText(OPTION_1).performClick()
 
@@ -72,22 +82,30 @@
     fun whenNoApps() {
         setContent(appEntries = emptyList())
 
-        composeTestRule.onNodeWithText(context.getString(R.string.no_applications))
-            .assertIsDisplayed()
+        composeTestRule.waitUntilExactlyOneExists(
+            matcher = hasText(context.getString(R.string.no_applications)),
+            timeoutMillis = 5_000,
+        )
     }
 
     @Test
     fun couldShowAppItem() {
         setContent(appEntries = listOf(APP_ENTRY_A))
 
-        composeTestRule.onNodeWithText(APP_ENTRY_A.label).assertIsDisplayed()
+        composeTestRule.waitUntilExactlyOneExists(
+            matcher = hasText(APP_ENTRY_A.label),
+            timeoutMillis = 5_000,
+        )
     }
 
     @Test
     fun couldShowHeader() {
         setContent(appEntries = listOf(APP_ENTRY_A), header = { Text(HEADER) })
 
-        composeTestRule.onNodeWithText(HEADER).assertIsDisplayed()
+        composeTestRule.waitUntilExactlyOneExists(
+            matcher = hasText(HEADER),
+            timeoutMillis = 5_000,
+        )
     }
 
     @Test
@@ -102,7 +120,10 @@
     fun whenGrouped_groupTitleDisplayed() {
         setContent(appEntries = listOf(APP_ENTRY_A, APP_ENTRY_B), enableGrouping = true)
 
-        composeTestRule.onNodeWithText(GROUP_A).assertIsDisplayed()
+        composeTestRule.waitUntilExactlyOneExists(
+            matcher = hasText(GROUP_A),
+            timeoutMillis = 5_000,
+        )
         composeTestRule.onNodeWithText(GROUP_B).assertIsDisplayed()
     }
 
@@ -112,29 +133,26 @@
         header: @Composable () -> Unit = {},
         enableGrouping: Boolean = false,
     ) {
+        val appListInput = AppListInput(
+            config = AppListConfig(
+                userIds = listOf(USER_ID),
+                showInstantApps = false,
+                matchAnyUserForAdmin = false,
+            ),
+            listModel = TestAppListModel(enableGrouping = enableGrouping),
+            state = AppListState(showSystem = stateOf(false), searchQuery = stateOf("")),
+            header = header,
+            bottomPadding = 0.dp,
+        )
+        val listViewModel = object : IAppListViewModel<TestAppRecord> {
+            override val optionFlow = MutableStateFlow<Int?>(null)
+            override val spinnerOptionsFlow = flowOf(options.mapIndexed { index, option ->
+                SpinnerOption(id = index, text = option)
+            })
+            override val appListDataFlow = flowOf(AppListData(appEntries, option = 0))
+        }
         composeTestRule.setContent {
-            AppListInput(
-                config = AppListConfig(
-                    userIds = listOf(USER_ID),
-                    showInstantApps = false,
-                    matchAnyUserForAdmin = false,
-                ),
-                listModel = TestAppListModel(enableGrouping = enableGrouping),
-                state = AppListState(
-                    showSystem = false.toState(),
-                    searchQuery = "".toState(),
-                ),
-                header = header,
-                bottomPadding = 0.dp,
-            ).AppListImpl {
-                object : IAppListViewModel<TestAppRecord> {
-                    override val optionFlow: MutableStateFlow<Int?> = MutableStateFlow(null)
-                    override val spinnerOptionsFlow = flowOf(options.mapIndexed { index, option ->
-                        SpinnerOption(id = index, text = option)
-                    })
-                    override val appListDataFlow = flowOf(AppListData(appEntries, option = 0))
-                }
-            }
+            appListInput.AppListImpl { listViewModel }
         }
     }
 
diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTwoTargetSwitchItemTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTwoTargetSwitchItemTest.kt
new file mode 100644
index 0000000..6e7fc8e
--- /dev/null
+++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/AppListTwoTargetSwitchItemTest.kt
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.spaprivileged.template.app
+
+import android.content.pm.ApplicationInfo
+import androidx.compose.ui.test.assertIsDisplayed
+import androidx.compose.ui.test.assertIsEnabled
+import androidx.compose.ui.test.assertIsNotEnabled
+import androidx.compose.ui.test.assertIsOff
+import androidx.compose.ui.test.assertIsOn
+import androidx.compose.ui.test.isToggleable
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onNodeWithText
+import androidx.compose.ui.test.performClick
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settingslib.spa.framework.compose.stateOf
+import com.android.settingslib.spaprivileged.model.app.AppRecord
+import com.google.common.truth.Truth.assertThat
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class AppListTwoTargetSwitchItemTest {
+    @get:Rule
+    val composeTestRule = createComposeRule()
+
+    @Test
+    fun appLabel_displayed() {
+        composeTestRule.setContent {
+            ITEM_MODEL.AppListTwoTargetSwitchItem(
+                onClick = {},
+                checked = stateOf(null),
+                changeable = stateOf(false),
+                onCheckedChange = {},
+            )
+        }
+
+        composeTestRule.onNodeWithText(LABEL).assertIsDisplayed()
+    }
+
+    @Test
+    fun summary_displayed() {
+        composeTestRule.setContent {
+            ITEM_MODEL.AppListTwoTargetSwitchItem(
+                onClick = {},
+                checked = stateOf(null),
+                changeable = stateOf(false),
+                onCheckedChange = {},
+            )
+        }
+
+        composeTestRule.onNodeWithText(SUMMARY).assertIsDisplayed()
+    }
+
+    @Test
+    fun title_onClick() {
+        var titleClicked = false
+        composeTestRule.setContent {
+            ITEM_MODEL.AppListTwoTargetSwitchItem(
+                onClick = { titleClicked = true },
+                checked = stateOf(false),
+                changeable = stateOf(false),
+                onCheckedChange = {},
+            )
+        }
+
+        composeTestRule.onNodeWithText(LABEL).performClick()
+
+        assertThat(titleClicked).isTrue()
+    }
+
+    @Test
+    fun switch_checkIsNull() {
+        composeTestRule.setContent {
+            ITEM_MODEL.AppListTwoTargetSwitchItem(
+                onClick = {},
+                checked = stateOf(null),
+                changeable = stateOf(false),
+                onCheckedChange = {},
+            )
+        }
+
+        composeTestRule.onNode(isToggleable()).assertDoesNotExist()
+    }
+
+    @Test
+    fun switch_checked() {
+        composeTestRule.setContent {
+            ITEM_MODEL.AppListTwoTargetSwitchItem(
+                onClick = {},
+                checked = stateOf(true),
+                changeable = stateOf(false),
+                onCheckedChange = {},
+            )
+        }
+
+        composeTestRule.onNode(isToggleable()).assertIsOn()
+    }
+
+    @Test
+    fun switch_notChecked() {
+        composeTestRule.setContent {
+            ITEM_MODEL.AppListTwoTargetSwitchItem(
+                onClick = {},
+                checked = stateOf(false),
+                changeable = stateOf(false),
+                onCheckedChange = {},
+            )
+        }
+
+        composeTestRule.onNode(isToggleable()).assertIsOff()
+    }
+
+    @Test
+    fun switch_changeable() {
+        composeTestRule.setContent {
+            ITEM_MODEL.AppListTwoTargetSwitchItem(
+                onClick = {},
+                checked = stateOf(false),
+                changeable = stateOf(true),
+                onCheckedChange = {},
+            )
+        }
+
+        composeTestRule.onNode(isToggleable()).assertIsEnabled()
+    }
+
+    @Test
+    fun switch_notChangeable() {
+        composeTestRule.setContent {
+            ITEM_MODEL.AppListTwoTargetSwitchItem(
+                onClick = {},
+                checked = stateOf(false),
+                changeable = stateOf(false),
+                onCheckedChange = {},
+            )
+        }
+
+        composeTestRule.onNode(isToggleable()).assertIsNotEnabled()
+    }
+
+    @Test
+    fun switch_onClick() {
+        var switchClicked = false
+        composeTestRule.setContent {
+            ITEM_MODEL.AppListTwoTargetSwitchItem(
+                onClick = {},
+                checked = stateOf(false),
+                changeable = stateOf(true),
+                onCheckedChange = { switchClicked = true },
+            )
+        }
+
+        composeTestRule.onNode(isToggleable()).performClick()
+
+        assertThat(switchClicked).isTrue()
+    }
+
+    private companion object {
+        const val PACKAGE_NAME = "package.name"
+        const val LABEL = "Label"
+        const val SUMMARY = "Summary"
+        val APP = ApplicationInfo().apply {
+            packageName = PACKAGE_NAME
+        }
+        val ITEM_MODEL = AppListItemModel(
+            record = object : AppRecord {
+                override val app = APP
+            },
+            label = LABEL,
+            summary = stateOf(SUMMARY),
+        )
+    }
+}
diff --git a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPageTest.kt b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPageTest.kt
index 961ec10..457b810 100644
--- a/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPageTest.kt
+++ b/packages/SettingsLib/SpaPrivileged/tests/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPageTest.kt
@@ -30,6 +30,7 @@
 import com.android.settingslib.spa.framework.compose.stateOf
 import com.android.settingslib.spa.testutils.FakeNavControllerWrapper
 import com.android.settingslib.spaprivileged.R
+import com.android.settingslib.spaprivileged.framework.compose.getPlaceholder
 import com.android.settingslib.spaprivileged.model.enterprise.NoRestricted
 import com.android.settingslib.spaprivileged.tests.testutils.FakeRestrictionsProvider
 import com.android.settingslib.spaprivileged.tests.testutils.TestAppRecord
@@ -95,9 +96,7 @@
 
         val summaryState = getSummary(listModel)
 
-        assertThat(summaryState.value).isEqualTo(
-            context.getString(R.string.summary_placeholder)
-        )
+        assertThat(summaryState.value).isEqualTo(context.getPlaceholder())
     }
 
     @Test
diff --git a/packages/SettingsLib/Utils/res/values-af/strings.xml b/packages/SettingsLib/Utils/res/values-af/strings.xml
new file mode 100644
index 0000000..d3ebc1f
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-af/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Werk-<xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-am/strings.xml b/packages/SettingsLib/Utils/res/values-am/strings.xml
new file mode 100644
index 0000000..caf393c
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-am/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"የሥራ <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-ar/strings.xml b/packages/SettingsLib/Utils/res/values-ar/strings.xml
new file mode 100644
index 0000000..e18fe63
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-ar/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"\"<xliff:g id="APP_NAME">%s</xliff:g>\" المخصّص للعمل"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-as/strings.xml b/packages/SettingsLib/Utils/res/values-as/strings.xml
new file mode 100644
index 0000000..4463586
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-as/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"কৰ্মস্থান <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-az/strings.xml b/packages/SettingsLib/Utils/res/values-az/strings.xml
new file mode 100644
index 0000000..f0f4b0e
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-az/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> iş tətbiqi"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/Utils/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..1edde54
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Poslovna aplikacija <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-be/strings.xml b/packages/SettingsLib/Utils/res/values-be/strings.xml
new file mode 100644
index 0000000..bdd1c30
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-be/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> (праца)"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-bg/strings.xml b/packages/SettingsLib/Utils/res/values-bg/strings.xml
new file mode 100644
index 0000000..c9b8768
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-bg/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> за работа"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-bn/strings.xml b/packages/SettingsLib/Utils/res/values-bn/strings.xml
new file mode 100644
index 0000000..f7c9a07
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-bn/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"অফিসের <xliff:g id="APP_NAME">%s</xliff:g> অ্যাপ"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-bs/strings.xml b/packages/SettingsLib/Utils/res/values-bs/strings.xml
new file mode 100644
index 0000000..1edde54
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-bs/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Poslovna aplikacija <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-ca/strings.xml b/packages/SettingsLib/Utils/res/values-ca/strings.xml
new file mode 100644
index 0000000..11d8d5c
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-ca/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> de la feina"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-cs/strings.xml b/packages/SettingsLib/Utils/res/values-cs/strings.xml
new file mode 100644
index 0000000..c9fc770
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-cs/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Pracovní aplikace <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-da/strings.xml b/packages/SettingsLib/Utils/res/values-da/strings.xml
new file mode 100644
index 0000000..6ca1760
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-da/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> – arbejde"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-de/strings.xml b/packages/SettingsLib/Utils/res/values-de/strings.xml
new file mode 100644
index 0000000..f263826
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-de/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> (geschäftlich)"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-el/strings.xml b/packages/SettingsLib/Utils/res/values-el/strings.xml
new file mode 100644
index 0000000..aa838cf
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-el/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Εφαρμογή <xliff:g id="APP_NAME">%s</xliff:g> εργασίας"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-en-rAU/strings.xml b/packages/SettingsLib/Utils/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..6b770ea
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-en-rAU/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-en-rCA/strings.xml b/packages/SettingsLib/Utils/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..6b770ea
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-en-rCA/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-en-rGB/strings.xml b/packages/SettingsLib/Utils/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..6b770ea
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-en-rGB/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-en-rIN/strings.xml b/packages/SettingsLib/Utils/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..6b770ea
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-en-rIN/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-en-rXC/strings.xml b/packages/SettingsLib/Utils/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..3abbbef
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-en-rXC/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎‏‏‎Work ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-es-rUS/strings.xml b/packages/SettingsLib/Utils/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..4c20d68
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-es-rUS/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> de trabajo"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-es/strings.xml b/packages/SettingsLib/Utils/res/values-es/strings.xml
new file mode 100644
index 0000000..4c20d68
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-es/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> de trabajo"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-et/strings.xml b/packages/SettingsLib/Utils/res/values-et/strings.xml
new file mode 100644
index 0000000..0953870
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-et/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Töö: <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-eu/strings.xml b/packages/SettingsLib/Utils/res/values-eu/strings.xml
new file mode 100644
index 0000000..4743913
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-eu/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Laneko <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-fa/strings.xml b/packages/SettingsLib/Utils/res/values-fa/strings.xml
new file mode 100644
index 0000000..910e4f9
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-fa/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> کاری"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-fi/strings.xml b/packages/SettingsLib/Utils/res/values-fi/strings.xml
new file mode 100644
index 0000000..81b8b9a
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-fi/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> (työ)"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-fr-rCA/strings.xml b/packages/SettingsLib/Utils/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..57405f4
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-fr-rCA/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> dans le profil professionnel"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-fr/strings.xml b/packages/SettingsLib/Utils/res/values-fr/strings.xml
new file mode 100644
index 0000000..9f255ef
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-fr/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> (pro)"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-gl/strings.xml b/packages/SettingsLib/Utils/res/values-gl/strings.xml
new file mode 100644
index 0000000..32d764e
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-gl/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Aplicación <xliff:g id="APP_NAME">%s</xliff:g> do traballo"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-gu/strings.xml b/packages/SettingsLib/Utils/res/values-gu/strings.xml
new file mode 100644
index 0000000..4f25384
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-gu/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"ઑફિસ માટે <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-hi/strings.xml b/packages/SettingsLib/Utils/res/values-hi/strings.xml
new file mode 100644
index 0000000..e2e2fbf
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-hi/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"वर्क प्रोफ़ाइल वाला <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-hr/strings.xml b/packages/SettingsLib/Utils/res/values-hr/strings.xml
new file mode 100644
index 0000000..1edde54
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-hr/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Poslovna aplikacija <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-hu/strings.xml b/packages/SettingsLib/Utils/res/values-hu/strings.xml
new file mode 100644
index 0000000..72ea4ea
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-hu/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Munkahelyi <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-hy/strings.xml b/packages/SettingsLib/Utils/res/values-hy/strings.xml
new file mode 100644
index 0000000..40f6f62
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-hy/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Աշխատանքային <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-in/strings.xml b/packages/SettingsLib/Utils/res/values-in/strings.xml
new file mode 100644
index 0000000..d2dff14
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-in/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> kerja"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-is/strings.xml b/packages/SettingsLib/Utils/res/values-is/strings.xml
new file mode 100644
index 0000000..e8a3bb6
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-is/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> fyrir vinnu"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-it/strings.xml b/packages/SettingsLib/Utils/res/values-it/strings.xml
new file mode 100644
index 0000000..e7f2599
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-it/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"App <xliff:g id="APP_NAME">%s</xliff:g> di lavoro"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-iw/strings.xml b/packages/SettingsLib/Utils/res/values-iw/strings.xml
new file mode 100644
index 0000000..efbd6f1
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-iw/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> לעבודה"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-ja/strings.xml b/packages/SettingsLib/Utils/res/values-ja/strings.xml
new file mode 100644
index 0000000..d27d062
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-ja/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"仕事用の<xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-ka/strings.xml b/packages/SettingsLib/Utils/res/values-ka/strings.xml
new file mode 100644
index 0000000..8cf1762
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-ka/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"სამსახურის <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-kk/strings.xml b/packages/SettingsLib/Utils/res/values-kk/strings.xml
new file mode 100644
index 0000000..1ac0004
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-kk/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Жұмысқа арналған <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-km/strings.xml b/packages/SettingsLib/Utils/res/values-km/strings.xml
new file mode 100644
index 0000000..1c6198f
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-km/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> សម្រាប់ការងារ"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-kn/strings.xml b/packages/SettingsLib/Utils/res/values-kn/strings.xml
new file mode 100644
index 0000000..97bd006
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-kn/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"ಕೆಲಸ <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-ko/strings.xml b/packages/SettingsLib/Utils/res/values-ko/strings.xml
new file mode 100644
index 0000000..8b8da0f
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-ko/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"직장용 <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-ky/strings.xml b/packages/SettingsLib/Utils/res/values-ky/strings.xml
new file mode 100644
index 0000000..1b7a50e
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-ky/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Жумуш <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-lo/strings.xml b/packages/SettingsLib/Utils/res/values-lo/strings.xml
new file mode 100644
index 0000000..533763c
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-lo/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> ບ່ອນເຮັດວຽກ"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-lt/strings.xml b/packages/SettingsLib/Utils/res/values-lt/strings.xml
new file mode 100644
index 0000000..cfe6436
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-lt/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Darbo „<xliff:g id="APP_NAME">%s</xliff:g>“"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-lv/strings.xml b/packages/SettingsLib/Utils/res/values-lv/strings.xml
new file mode 100644
index 0000000..3026f06
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-lv/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Darba lietotne <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-mk/strings.xml b/packages/SettingsLib/Utils/res/values-mk/strings.xml
new file mode 100644
index 0000000..7844e3be
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-mk/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Работна <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-ml/strings.xml b/packages/SettingsLib/Utils/res/values-ml/strings.xml
new file mode 100644
index 0000000..59e5248
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-ml/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"ഔദ്യോഗിക <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-mn/strings.xml b/packages/SettingsLib/Utils/res/values-mn/strings.xml
new file mode 100644
index 0000000..4fae367
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-mn/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Ажлын <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-mr/strings.xml b/packages/SettingsLib/Utils/res/values-mr/strings.xml
new file mode 100644
index 0000000..6b770ea
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-mr/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Work <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-ms/strings.xml b/packages/SettingsLib/Utils/res/values-ms/strings.xml
new file mode 100644
index 0000000..017c4e1
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-ms/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Kerja <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-my/strings.xml b/packages/SettingsLib/Utils/res/values-my/strings.xml
new file mode 100644
index 0000000..9533ae0
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-my/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"အလုပ်သုံး <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-nb/strings.xml b/packages/SettingsLib/Utils/res/values-nb/strings.xml
new file mode 100644
index 0000000..a513b45
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-nb/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> for jobb"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-ne/strings.xml b/packages/SettingsLib/Utils/res/values-ne/strings.xml
new file mode 100644
index 0000000..54a8d69
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-ne/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"कार्यालयको प्रोफाइल <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-nl/strings.xml b/packages/SettingsLib/Utils/res/values-nl/strings.xml
new file mode 100644
index 0000000..4112f0a
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-nl/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> voor werk"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-or/strings.xml b/packages/SettingsLib/Utils/res/values-or/strings.xml
new file mode 100644
index 0000000..f0d3b18
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-or/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"ୱାର୍କ <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-pa/strings.xml b/packages/SettingsLib/Utils/res/values-pa/strings.xml
new file mode 100644
index 0000000..79151b2
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-pa/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"ਕੰਮ <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-pl/strings.xml b/packages/SettingsLib/Utils/res/values-pl/strings.xml
new file mode 100644
index 0000000..190f6d1
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-pl/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> (aplikacja służbowa)"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-pt-rBR/strings.xml b/packages/SettingsLib/Utils/res/values-pt-rBR/strings.xml
new file mode 100644
index 0000000..77ca1d1
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-pt-rBR/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"App <xliff:g id="APP_NAME">%s</xliff:g> de trabalho"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-pt-rPT/strings.xml b/packages/SettingsLib/Utils/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..e9e945b
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-pt-rPT/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> de trabalho"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-pt/strings.xml b/packages/SettingsLib/Utils/res/values-pt/strings.xml
new file mode 100644
index 0000000..77ca1d1
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-pt/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"App <xliff:g id="APP_NAME">%s</xliff:g> de trabalho"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-ro/strings.xml b/packages/SettingsLib/Utils/res/values-ro/strings.xml
new file mode 100644
index 0000000..0ba1619
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-ro/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> pentru lucru"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-ru/strings.xml b/packages/SettingsLib/Utils/res/values-ru/strings.xml
new file mode 100644
index 0000000..d1a663f
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-ru/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Рабочее приложение \"<xliff:g id="APP_NAME">%s</xliff:g>\""</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-si/strings.xml b/packages/SettingsLib/Utils/res/values-si/strings.xml
new file mode 100644
index 0000000..90a2219
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-si/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"කාර්යාල <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-sk/strings.xml b/packages/SettingsLib/Utils/res/values-sk/strings.xml
new file mode 100644
index 0000000..0066a05
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-sk/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Pracovná aplikácia <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-sl/strings.xml b/packages/SettingsLib/Utils/res/values-sl/strings.xml
new file mode 100644
index 0000000..ee567e1
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-sl/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Delovna aplikacija <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-sq/strings.xml b/packages/SettingsLib/Utils/res/values-sq/strings.xml
new file mode 100644
index 0000000..3ec7f61
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-sq/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> për punën"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-sr/strings.xml b/packages/SettingsLib/Utils/res/values-sr/strings.xml
new file mode 100644
index 0000000..ee4f289
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-sr/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Пословна апликација <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-sv/strings.xml b/packages/SettingsLib/Utils/res/values-sv/strings.xml
new file mode 100644
index 0000000..01ba419
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-sv/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> för arbetet"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-sw/strings.xml b/packages/SettingsLib/Utils/res/values-sw/strings.xml
new file mode 100644
index 0000000..0594a04
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-sw/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Ya kazini <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-ta/strings.xml b/packages/SettingsLib/Utils/res/values-ta/strings.xml
new file mode 100644
index 0000000..b519e62
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-ta/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"பணி <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-te/strings.xml b/packages/SettingsLib/Utils/res/values-te/strings.xml
new file mode 100644
index 0000000..e5bc92e
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-te/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"ఆఫీస్ <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-th/strings.xml b/packages/SettingsLib/Utils/res/values-th/strings.xml
new file mode 100644
index 0000000..e1bc91c
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-th/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> ในโปรไฟล์งาน"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-tl/strings.xml b/packages/SettingsLib/Utils/res/values-tl/strings.xml
new file mode 100644
index 0000000..488a603
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-tl/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> para sa trabaho"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-tr/strings.xml b/packages/SettingsLib/Utils/res/values-tr/strings.xml
new file mode 100644
index 0000000..106608a
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-tr/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> (İş)"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-uk/strings.xml b/packages/SettingsLib/Utils/res/values-uk/strings.xml
new file mode 100644
index 0000000..53ec5ae
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-uk/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Робочий додаток <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-ur/strings.xml b/packages/SettingsLib/Utils/res/values-ur/strings.xml
new file mode 100644
index 0000000..301e92c
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-ur/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"ورک <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-uz/strings.xml b/packages/SettingsLib/Utils/res/values-uz/strings.xml
new file mode 100644
index 0000000..a5079cc
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-uz/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Ishga oid <xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-vi/strings.xml b/packages/SettingsLib/Utils/res/values-vi/strings.xml
new file mode 100644
index 0000000..5bcdb07
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-vi/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"<xliff:g id="APP_NAME">%s</xliff:g> dành cho công việc"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-zh-rCN/strings.xml b/packages/SettingsLib/Utils/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..c0b4564
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-zh-rCN/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"工作<xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-zh-rHK/strings.xml b/packages/SettingsLib/Utils/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..07d5c8f
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-zh-rHK/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"工作設定檔入面嘅「<xliff:g id="APP_NAME">%s</xliff:g>」"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-zh-rTW/strings.xml b/packages/SettingsLib/Utils/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..ff2f6aa
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-zh-rTW/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"工作資料夾中的「<xliff:g id="APP_NAME">%s</xliff:g>」"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/res/values-zu/strings.xml b/packages/SettingsLib/Utils/res/values-zu/strings.xml
new file mode 100644
index 0000000..17b38c7
--- /dev/null
+++ b/packages/SettingsLib/Utils/res/values-zu/strings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="accessibility_work_profile_app_description" msgid="7426881474681968795">"Umsebenzi we-<xliff:g id="APP_NAME">%s</xliff:g>"</string>
+</resources>
diff --git a/packages/SettingsLib/Utils/src/com/android/settingslib/utils/BuildCompatUtils.java b/packages/SettingsLib/Utils/src/com/android/settingslib/utils/BuildCompatUtils.java
index ddbc907..bf3651b 100644
--- a/packages/SettingsLib/Utils/src/com/android/settingslib/utils/BuildCompatUtils.java
+++ b/packages/SettingsLib/Utils/src/com/android/settingslib/utils/BuildCompatUtils.java
@@ -17,7 +17,6 @@
 package com.android.settingslib.utils;
 
 import android.os.Build;
-import android.os.Build.VERSION;
 
 import androidx.annotation.ChecksSdkIntAtLeast;
 
diff --git a/packages/SettingsLib/aconfig/settingslib_media_flag_declarations.aconfig b/packages/SettingsLib/aconfig/settingslib_media_flag_declarations.aconfig
new file mode 100644
index 0000000..0b74fa8
--- /dev/null
+++ b/packages/SettingsLib/aconfig/settingslib_media_flag_declarations.aconfig
@@ -0,0 +1,8 @@
+package: "com.android.settingslib.media.flags"
+
+flag {
+  name: "use_media_router2_for_info_media_manager"
+  namespace: "placeholder_namespace"
+  description: "Gates whether to use a MediaRouter2-based implementation of InfoMediaManager, instead of the legacy MediaRouter2Manager-based implementation."
+  bug: "192657812"
+}
\ No newline at end of file
diff --git a/packages/SettingsLib/res/values-af/arrays.xml b/packages/SettingsLib/res/values-af/arrays.xml
index 41499b0..6dd8fef 100644
--- a/packages/SettingsLib/res/values-af/arrays.xml
+++ b/packages/SettingsLib/res/values-af/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Oudiobron"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index 707768e..ab07758 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -84,7 +84,7 @@
     <string name="preference_summary_default_combination" msgid="2644094566845577901">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="7739366554710388701">"Ontkoppel"</string>
     <string name="bluetooth_disconnecting" msgid="7638892134401574338">"Ontkoppel tans…"</string>
-    <string name="bluetooth_connecting" msgid="5871702668260192755">"Verbind tans…"</string>
+    <string name="bluetooth_connecting" msgid="5871702668260192755">"Verbind tans …"</string>
     <string name="bluetooth_connected" msgid="8065345572198502293">"Gekoppel<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
     <string name="bluetooth_pairing" msgid="4269046942588193600">"Verbind tans…"</string>
     <string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Gekoppel (geen foon nie)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM-toegang"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD-oudio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD oudio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Gehoortoestelle"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE-oudio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Gekoppel aan gehoortoestelle"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Gehoortoestelle"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE-oudio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Gekoppel aan gehoortoestelle"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Gekoppel aan LE-oudio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Gekoppel aan media-oudio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Gekoppel aan foonoudio"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Gebruik vir foonoudio"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Gebruik vir lêeroordrag"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Gebruik vir invoer"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Gebruik vir gehoortoestelle"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Gebruik vir gehoortoestelle"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Gebruik vir LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Bind saam"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"BIND SAAM"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Kies profiel"</string>
     <string name="category_personal" msgid="6236798763159385225">"Persoonlik"</string>
     <string name="category_work" msgid="4014193632325996115">"Werk"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Kloon"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Ontwikkelaaropsies"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Aktiveer ontwikkelaaropsies"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Stel opsies vir programontwikkeling"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Skermlaag wys huidige raakdata"</string>
     <string name="show_touches" msgid="8437666942161289025">"Wys tikke"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Wys visuele terugvoer vir tikke"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Wys sleuteldrukke"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Wys visuele terugvoer vir fisieke sleuteldrukke"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Wys oppervlakopdaterings"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Flits totale vensteroppervlakke wanneer dit opdateer"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Wys aansigopdaterings"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Meer tyd."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Minder tyd."</string>
     <string name="cancel" msgid="5665114069455378395">"Kanselleer"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Volgende"</string>
+    <string name="back" msgid="5554327870352703710">"Terug"</string>
+    <string name="save" msgid="3745809743277153149">"Stoor"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Klaar"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Wekkers en onthounotas"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Sopas"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Hierdie foon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Hierdie tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dokluidspreker"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Eksterne toestel"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Gekoppelde toestel"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Hierdie foon"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Kan nie op hierdie toestel speel nie"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Gradeer rekening op om oor te skakel"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Gebruiker"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Beperkte profiel"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Voeg nuwe gebruiker by?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Jy kan hierdie toestel met ander mense deel deur bykomende gebruikers te skep. Elke gebruiker het sy eie spasie wat hulle kan pasmaak met programme, muurpapier en so meer. Gebruikers kan ook toestelinstellings wat almal raak, soos Wi-Fi, aanpas.\n\nWanneer jy \'n nuwe gebruiker byvoeg, moet daardie persoon hul eie spasie opstel.\n\nEnige gebruiker kan programme vir alle ander gebruikers opdateer. Toeganklikheidinstellings en -dienste sal dalk nie na die nuwe gebruiker oorgedra word nie."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Jy kan hierdie toestel met ander mense deel deur bykomende gebruikers te skep. Elke gebruiker het hulle eie spasie wat hulle kan pasmaak met programme, muurpapier en so meer. Gebruikers kan ook toestelinstellings wat almal raak, soos wi-fi, aanpas.\n\nWanneer jy \'n nuwe gebruiker byvoeg, moet daardie persoon hul eie spasie opstel.\n\nEnige gebruiker kan programme vir alle ander gebruikers opdateer. Toeganklikheidinstellings en -dienste sal dalk nie na die nuwe gebruiker oorgedra word nie."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Wanneer jy \'n nuwe gebruiker byvoeg, moet daardie persoon hul spasie opstel.\n\nEnige gebruiker kan programme vir al die ander gebruikers opdateer."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Maak hierdie gebruiker ’n admin?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Admins het spesiale voorregte wat ander gebruikers nie het nie. ’n Admin kan alle gebruikers bestuur, hierdie toestel opdateer of terugstel, instellings wysig, alle geïnstalleerde apps sien, en adminvoorregte vir ander mense gee of herroep."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Maak admin"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Moet die gebruiker nou opgestel word?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Maak seker die persoon is beskikbaar om die toestel te vat en hul spasie op te stel"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Stel profiel nou op?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Ja, maak hulle ’n admin"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Nee, moet hulle nie ’n admin maak nie"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Skuif op"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Nie gespesifiseer nie"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutrum"</string>
+    <string name="feminine" msgid="1529155595310784757">"Vroulik"</string>
+    <string name="masculine" msgid="4653978041013996303">"Manlik"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-am/arrays.xml b/packages/SettingsLib/res/values-am/arrays.xml
index e8e404f..2a05261 100644
--- a/packages/SettingsLib/res/values-am/arrays.xml
+++ b/packages/SettingsLib/res/values-am/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4ኬ (የተጠበቀ)"</item>
     <item msgid="7322156123728520872">"4ኬ (ከፍ ተድርጎ የተመጣጠነ)"</item>
     <item msgid="7735692090314849188">"4ኬ (ከፍ ተድርጎ የተመጣጠነ፣ የተጠበቀ)"</item>
-    <item msgid="7346816300608639624">"720ፒ፣ 1080ፒ (ሁለትዮሽ ማያ ገጽ)"</item>
+    <item msgid="7346816300608639624">"720ፒ፣ 1080ፒ (dual screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"ምንም"</item>
@@ -258,7 +258,7 @@
   </string-array>
   <string-array name="track_frame_time_entries">
     <item msgid="634406443901014984">"ጠፍቷል"</item>
-    <item msgid="1288760936356000927">"ማያ ገጽ ላይ እንደ አሞሌዎች"</item>
+    <item msgid="1288760936356000927">"ማያ ገፅ ላይ እንደ አሞሌዎች"</item>
     <item msgid="5023908510820531131">"በ<xliff:g id="AS_TYPED_COMMAND">adb shell dumpsys gfxinfo</xliff:g> ውስጥ"</item>
   </string-array>
   <string-array name="debug_hw_overdraw_entries">
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"የኦዲዮ ምንጭ"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 986208f..8d9bf8c 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"የሲም መዳረሻ"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"ኤችዲ ኦዲዮ፦ <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"ኤችዲ ኦዲዮ"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"አጋዥ መስሚያዎች"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE ኦዲዮ"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"ከአጋዥ መስሚያዎች ጋር ተገናኝቷል"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"መስሚያ አጋዥ መሣሪያዎች"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE ኦዲዮ"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"ከመስሚያ አጋዥ መሣሪያዎች ጋር ተገናኝቷል"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"ከLE ኦዲዮ ጋር ተገናኝቷል"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"ወደ ማህደረ  መረጃ  አውዲዮ ተያይዟል"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"ወደ ስልክ አውዲዮ ተያይዟል"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"ለስልክ ድምፅ ተጠቀም"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ለፋይል ዝውውር ተጠቀም"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ለውፅአት ተጠቀም"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"ለአጋዥ መስሚያዎች ይጠቀሙ"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"ለመስሚያ አጋዥ መሣሪያዎች ይጠቀሙ"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"ለLE_AUDIO ይጠቀሙ"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"አጣምር"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"አጣምር"</string>
@@ -214,7 +214,8 @@
   </string-array>
     <string name="choose_profile" msgid="343803890897657450">"መገለጫ ይምረጡ"</string>
     <string name="category_personal" msgid="6236798763159385225">"የግል"</string>
-    <string name="category_work" msgid="4014193632325996115">"ስራ"</string>
+    <string name="category_work" msgid="4014193632325996115">"ሥራ"</string>
+    <string name="category_clone" msgid="1554511758987195974">"አባዛ"</string>
     <string name="development_settings_title" msgid="140296922921597393">"የገንቢዎች አማራጮች"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"የገንቢዎች አማራጮችን አንቃ"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"ለመተግበሪያ ግንባታ አማራጮች አዘጋጅ"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"የማያ ተደራቢ የአሁኑን የCPU አጠቃቀም  እያሳየ ነው።"</string>
     <string name="show_touches" msgid="8437666942161289025">"ነካ ማድረጎችን አሳይ"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"ለነካ ማድረጎች ምስላዊ ግብረመልስን አሳይ"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"የቁልፍ ጭነቶችን አሳይ"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"ለአካላዊ የቁልፍ ጭነቶች የሚታይ ግብረመልስን አሳይ"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"የወለል ዝማኔዎችን አሳይ"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"የመስኮት ወለሎች ሲዘምኑ መላ መስኮቱን አብለጭልጭ"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"የእይታ ዝማኔዎችን አሳይ"</string>
@@ -362,7 +365,7 @@
     <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"የሃርድዌር ንብርብሮች ሲዘምኑ አረንጓዴ አብራ"</string>
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"የጂፒዩ አልፎ መሳል አርም"</string>
     <string name="disable_overlays" msgid="4206590799671557143">"የHW ተደራቢዎችን አሰናክል"</string>
-    <string name="disable_overlays_summary" msgid="1954852414363338166">"ለማያ ገጽ ማቀናበሪያ ሁልጊዜ GPU ተጠቀም"</string>
+    <string name="disable_overlays_summary" msgid="1954852414363338166">"ለማያ ገፅ ማቀናበሪያ ሁልጊዜ GPU ተጠቀም"</string>
     <string name="simulate_color_space" msgid="1206503300335835151">"የቀለም ህዋ አስመስል"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"የ OpenGL ክትትሎችን ያንቁ"</string>
     <string name="usb_audio_disable_routing" msgid="3367656923544254975">"የUSB ተሰሚ ማዛወር ያሰናክሉ"</string>
@@ -370,9 +373,9 @@
     <string name="debug_layout" msgid="1659216803043339741">"የአቀማመጥ ገደቦችን አሳይ"</string>
     <string name="debug_layout_summary" msgid="8825829038287321978">"የቅንጥብ ገደቦች፣ ጠርዞች፣ ወዘተ አሳይ"</string>
     <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"የቀኝ-ወደ-ግራ አቀማመጥ አቅጣጫ አስገድድ"</string>
-    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"ለሁሉም አካባቢዎች የማያ ገጽ አቀማመጥ ከቀኝ-ወደ-ግራ እንዲሆን አስገድድ"</string>
+    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"ለሁሉም አካባቢዎች የማያ ገፅ አቀማመጥ ከቀኝ-ወደ-ግራ እንዲሆን አስገድድ"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"የግልፅነት የአሰሳ አሞሌ"</string>
-    <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"የአሰሳ አሞሌ የዳራ ቀለምን በነባሪ ግልጽ አድርግ"</string>
+    <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"የአሰሳ አሞሌ የዳራ ቀለምን በነባሪ ግልፅ አድርግ"</string>
     <string name="window_blurs" msgid="6831008984828425106">"የመስኮት ደረጃ ብዥታዎችን ፍቀድ"</string>
     <string name="force_msaa" msgid="4081288296137775550">"4x MSAA አስገድድ"</string>
     <string name="force_msaa_summary" msgid="9070437493586769500">"4x MSAA በ OpenGL ES 2.0 መተግበሪያዎች ውስጥ ያንቁ"</string>
@@ -385,7 +388,7 @@
     <string name="window_animation_scale_title" msgid="5236381298376812508">"የ Window እነማ ልኬት ለውጥ"</string>
     <string name="transition_animation_scale_title" msgid="1278477690695439337">"የእነማ ልኬት ለውጥ ሽግግር"</string>
     <string name="animator_duration_scale_title" msgid="7082913931326085176">"እነማ አድራጊ ቆይታ መለኪያ"</string>
-    <string name="overlay_display_devices_title" msgid="5411894622334469607">"ሁለተኛ ማሳያዎችን አስመስለህ ስራ"</string>
+    <string name="overlay_display_devices_title" msgid="5411894622334469607">"ሁለተኛ ማሳያዎችን አስመስለህ ሥራ"</string>
     <string name="debug_applications_category" msgid="5394089406638954196">"መተግበሪያዎች"</string>
     <string name="immediately_destroy_activities" msgid="1826287490705167403">"እንቅስቃሴዎችን አትጠብቅ"</string>
     <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"ተጠቃሚው እስኪተወው ድረስ እያንዳንዱን እንቅስቃሴ አስወግድ"</string>
@@ -393,7 +396,7 @@
     <string name="show_all_anrs" msgid="9160563836616468726">"የጀርባ ኤኤንአሮችን አሳይ"</string>
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"ለጀርባ መተግበሪያዎች የመተግበሪያ ምላሽ አይሰጥም መገናኛን አሳይ"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"የማሳወቂያ ሰርጥ ማስጠንቀቂያዎችን አሳይ"</string>
-    <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"አንድ መተግበሪያ የሚሰራ ሰርጥ ሳይኖረው ማሳወቂያ ሲለጥፍ በማያ ገጽ-ላይ ማስጠንቀቂያን ያሳያል"</string>
+    <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"አንድ መተግበሪያ የሚሰራ ሰርጥ ሳይኖረው ማሳወቂያ ሲለጥፍ በማያ ገፅ-ላይ ማስጠንቀቂያን ያሳያል"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"በውጫዊ ላይ ሃይል ይፈቀዳል"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"የዝርዝር ሰነዶች እሴቶች ግምት ውስጥ ሳያስገባ ማንኛውም መተግበሪያ ወደ ውጫዊ ማከማቻው ለመጻፍ ብቁ ያደርጋል"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"እንቅስቃሴዎች ዳግመኛ እንዲመጣጠኑ አስገድድ"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ተጨማሪ ጊዜ።"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ያነሰ ጊዜ።"</string>
     <string name="cancel" msgid="5665114069455378395">"ይቅር"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"ቀጣይ"</string>
+    <string name="back" msgid="5554327870352703710">"ተመለስ"</string>
+    <string name="save" msgid="3745809743277153149">"አስቀምጥ"</string>
     <string name="okay" msgid="949938843324579502">"እሺ"</string>
     <string name="done" msgid="381184316122520313">"ተከናውኗል"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"ማንቂያዎች እና አስታዋሾች"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"ልክ አሁን"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"ይህ ስልክ"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"ይህ ጡባዊ"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"የመትከያ ድምፅ ማውጫ"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"የውጭ መሣሪያ"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"የተገናኘ መሣሪያ"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"ይህ ስልክ"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"በዚህ መሣሪያ ላይ ማጫወት አልተቻለም"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"ለመቀየር መለያ ያልቁ"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"አዲስ ተጠቃሚ ይታከል?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"ተጨማሪ ተጠቃሚዎችን በመፍጠር ይህን መሣሪያ ለሌሎች ሰዎች ማጋራት ይችላሉ። እያንዳንዱ ተጠቃሚ በራሱ መተግበሪያዎች፣ ልጣፍ እና በመሳሰሉ ነገሮች ሊያበጀው የሚችል የራሱ ቦታ አለው። ተጠቃሚዎችም እንዲሁ እንደ Wi‑Fi ያሉ በሁሉም ሰው ላይ ተጽዕኖ ሊኖራቸው የሚችሉ የመሣሪያ ቅንብሮችን ማስተካከል ይችላሉ። \n\nእርስዎ አንድ አዲስ ተጠቃሚ ሲያክሉ ያ ሰው የራሱ ቦታ ማዘጋጀት አለበት።\n\nማንኛውም ተጠቃሚ መተግበሪያዎችን ለሌሎች ተጠቃሚዎች ሁሉ ሊያዘምኑ ይችላሉ።"</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"እርስዎ አንድ አዲስ ተጠቃሚ ሲያክሉ ያ ሰው የራሱ ቦታ ማዘጋጀት አለበት።\n\nማንኛውም ተጠቃሚ መተግበሪያዎችን ለሌሎች ተጠቃሚዎች ሁሉ ሊያዘምን ይችላል።"</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"ይህ ተጠቃሚ አስተዳዳሪ ይደረጉ?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"አስተዳዳሪዎች ሌሎች ተጠቃሚዎች የሌሏቸው ልዩ መብቶች አሏቸው። አንድ አስተዳዳሪ ሁሉንም ተጠቃሚዎች ማስተዳደር፣ ይህን መሣሪያ ማዘመን ወይም ዳግም ማስጀመር፣ ቅንብሮች መቀየር፣ ሁሉንም የተጫኑ መተግበሪያዎች ማየት እና ለሌሎች የአስተዳዳሪ መብቶችን መፍቀድ ወይም መከልከል ይችላሉ።"</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"አስተዳዳሪ አድርግ"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"ተጠቃሚ አሁን ይዋቀር?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"ግለሰቡ መሣሪያውን ወስደው ቦታቸውን ለማዋቀር እንደሚገኙ ያረጋግጡ"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"መገለጫ አሁን ይዋቀር?"</string>
@@ -595,7 +595,7 @@
     <string name="user_new_profile_name" msgid="2405500423304678841">"አዲስ መገለጫ"</string>
     <string name="user_info_settings_title" msgid="6351390762733279907">"የተጠቃሚ መረጃ"</string>
     <string name="profile_info_settings_title" msgid="105699672534365099">"የመገለጫ መረጃ"</string>
-    <string name="user_need_lock_message" msgid="4311424336209509301">"የተገደበ መገለጫ መፍጠር ከመቻልዎ በፊት መተግበሪያዎችዎን እና የግል ውሂብዎን ለመጠበቅ ቁልፍ ማያ ገጽ ማዋቀር አለብዎት።"</string>
+    <string name="user_need_lock_message" msgid="4311424336209509301">"የተገደበ መገለጫ መፍጠር ከመቻልዎ በፊት መተግበሪያዎችዎን እና የግል ውሂብዎን ለመጠበቅ ቁልፍ ማያ ገፅ ማዋቀር አለብዎት።"</string>
     <string name="user_set_lock_button" msgid="1427128184982594856">"ቁልፍ አዘጋጅ"</string>
     <string name="user_switch_to_user" msgid="6975428297154968543">"ወደ <xliff:g id="USER_NAME">%s</xliff:g> ቀይር"</string>
     <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"አዲስ ተጠቃሚ በመፍጠር ላይ…"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ይህ አዲስ የእንግዳ ክፍለ-ጊዜ ይጀምራል እና ሁሉንም መተግበሪያዎች እና ውሂብ አሁን ካለው ክፍለ-ጊዜ ይሰርዛል"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"ከእንግዳ ሁኔታ ይውጣ?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"ይህ አሁን ካለው የእንግዳ ክፍለ-ጊዜ መተግበሪያዎችን እና ውሂብን ይሰርዛል"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"አዎ፣ እነሱን አስተዳዳሪ ያድርጓቸው"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"አይ፣ እነሱን አስተዳዳሪ አያድርጓቸው"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"ውጣ"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"የእንግዳ እንቅስቃሴ ይቀመጥ?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"እንቅስቃሴን አሁን ካለው ክፍለ-ጊዜ ማስቀመጥ ወይም ሁሉንም መተግበሪያዎች እና ውሂብ መሰረዝ ይችላሉ"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"ወደ ላይ ውሰድ"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"አልተገለጸም"</string>
+    <string name="neuter" msgid="2075249330106127310">"ገለልተኛ"</string>
+    <string name="feminine" msgid="1529155595310784757">"እንስት"</string>
+    <string name="masculine" msgid="4653978041013996303">"ተባዕታይ"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ar/arrays.xml b/packages/SettingsLib/res/values-ar/arrays.xml
index cb1ec38..f389f64 100644
--- a/packages/SettingsLib/res/values-ar/arrays.xml
+++ b/packages/SettingsLib/res/values-ar/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"مصدر الصوت"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index ae4b89d..5a1a135 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"‏الوصول إلى شريحة SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"صوت عالي الدقة: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"صوت عالي الدقة"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"سماعات الأذن الطبية"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"تمّ التوصيل بسماعات الأذن الطبية"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"سماعات الأذن الطبية"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"تم توصيل سماعات الأذن الطبية"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"‏متصل بـ LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"متصل بالإعدادات الصوتية للوسائط"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"متصل بالإعدادات الصوتية للهاتف"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"الاستخدام لإعدادات الهاتف الصوتية"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"استخدامه لنقل الملفات"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"استخدام للإدخال"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"استخدام سماعات الأذن الطبية"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"استخدام سماعات الأذن الطبية"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"‏الاستخدام لـ LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"إقران"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"إقران"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"اختيار ملف شخصي"</string>
     <string name="category_personal" msgid="6236798763159385225">"التطبيقات الشخصية"</string>
     <string name="category_work" msgid="4014193632325996115">"تطبيقات العمل"</string>
+    <string name="category_clone" msgid="1554511758987195974">"استنساخ"</string>
     <string name="development_settings_title" msgid="140296922921597393">"خيارات المطورين"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"تفعيل خيارات المطورين"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"تعيين خيارات تطوير التطبيق"</string>
@@ -256,7 +257,7 @@
     <string name="bugreport_in_power" msgid="8664089072534638709">"اختصار تقرير الأخطاء"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"عرض زر في قائمة زر التشغيل لإعداد تقرير بالأخطاء"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"البقاء في الوضع النشط"</string>
-    <string name="keep_screen_on_summary" msgid="1510731514101925829">"لا يتم مطلقًا دخول الشاشة في وضع السكون أثناء الشحن."</string>
+    <string name="keep_screen_on_summary" msgid="1510731514101925829">"عدم دخول الشاشة في وضع السكون مطلقًا أثناء الشحن"</string>
     <string name="bt_hci_snoop_log" msgid="7291287955649081448">"تفعيل سجلّ تطفل بواجهة وحدة تحكم المضيف في بلوتوث"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"رَقمِن محتوى حزم بيانات البلوتوث. (تبديل البلوتوث بعد تغيير هذا الإعداد)"</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"فتح قفل المصنّع الأصلي للجهاز"</string>
@@ -316,7 +317,7 @@
     <string name="allow_mock_location" msgid="2102650981552527884">"السماح بمواقع وهمية"</string>
     <string name="allow_mock_location_summary" msgid="179780881081354579">"السماح بمواقع وهمية"</string>
     <string name="debug_view_attributes" msgid="3539609843984208216">"تفعيل فحص سمة العرض"</string>
-    <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"‏اجعل بيانات الجوّال نشطة دائمًا، حتى عندما يكون اتصال Wi‑Fi نشطًا (لتبديل الشبكة بسرعة)."</string>
+    <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"‏جعل بيانات الجوّال نشطة دائمًا حتى عندما يكون اتصال Wi‑Fi نشطًا (لتبديل الشبكة بسرعة)"</string>
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"استخدام إعداد تسريع الأجهزة للتوصيل إن كان متاحًا"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"‏هل تريد السماح بتصحيح أخطاء USB؟"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"‏تم تصميم تصحيح أخطاء USB لأغراض التطوير فقط. يمكن استخدامه لنسخ البيانات بين الكمبيوتر والجهاز، وتثبيت التطبيقات على جهازك بدون تنبيه، وقراءة بيانات السجل."</string>
@@ -328,7 +329,7 @@
     <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"‏التحقق من التطبيقات عبر USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"‏التحقق من التطبيقات المثبتة عبر ADB/ADT لكشف السلوك الضار"</string>
     <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"‏سيتم عرض أجهزة البلوتوث بدون أسماء (عناوين MAC فقط)."</string>
-    <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"لإيقاف ميزة مستوى الصوت المطلق للبلوتوث في حال حدوث مشاكل متعلقة بمستوى الصوت في الأجهزة البعيدة، مثل مستوى صوت عالٍ بشكل غير مقبول أو عدم إمكانية التحكّم في الصوت"</string>
+    <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"إيقاف ميزة مستوى الصوت المطلق للبلوتوث في حال حدوث مشاكل متعلقة بمستوى الصوت في الأجهزة البعيدة، مثل مستوى صوت عالٍ بشكل غير مقبول أو عدم إمكانية التحكّم في الصوت"</string>
     <string name="bluetooth_enable_gabeldorsche_summary" msgid="2054730331770712629">"‏تفعيل حِزم ميزة Bluetooth Gabeldorsche"</string>
     <string name="enhanced_connectivity_summary" msgid="1576414159820676330">"لتفعيل الميزة \"إمكانية اتصال محسّن\""</string>
     <string name="enable_terminal_title" msgid="3834790541986303654">"تطبيق طرفي محلي"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"عرض بيانات اللمس الحالية فوق المحتوى على الشاشة"</string>
     <string name="show_touches" msgid="8437666942161289025">"عرض النقرات"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"عرض التعليقات المرئية للنقرات"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"عرض الضغطات على المفاتيح"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"عرض الملاحظات المرئية للضغطات الفعلية على المفاتيح"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"عرض تحديثات السطح"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"وميض أسطح النوافذ بالكامل عندما يتم تحديثها"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"إظهار تحديثات العرض"</string>
@@ -381,7 +384,7 @@
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"‏تفعيل طبقات تصحيح أخطاء GPU"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"‏السماح بتحميل طبقات تصحيح أخطاء GPU لتطبيقات تصحيح الأخطاء"</string>
     <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"تفعيل التسجيل المطوَّل للمورّد"</string>
-    <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"يمكنك تضمين سجلات المورّدين الإضافية الخاصة بالجهاز في تقارير الخطأ، وقد تحتوي على معلومات شخصية و/أو تستهلك المزيد من شحن البطارية و/أو تستهلك المزيد من مساحة التخزين."</string>
+    <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"تضمين سجلات المورّدين الإضافية الخاصة بالجهاز في تقارير الخطأ، والتي قد تحتوي على معلومات شخصية و/أو تستهلك المزيد من شحن البطارية و/أو تستهلك المزيد من مساحة التخزين"</string>
     <string name="window_animation_scale_title" msgid="5236381298376812508">"حجم الرسوم المتحركة للنافذة"</string>
     <string name="transition_animation_scale_title" msgid="1278477690695439337">"حجم الرسوم المتحركة للنقل"</string>
     <string name="animator_duration_scale_title" msgid="7082913931326085176">"طول مدة الرسوم المتحركة"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"وقت أكثر."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"وقت أقل."</string>
     <string name="cancel" msgid="5665114069455378395">"إلغاء"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"التالي"</string>
+    <string name="back" msgid="5554327870352703710">"رجوع"</string>
+    <string name="save" msgid="3745809743277153149">"حفظ"</string>
     <string name="okay" msgid="949938843324579502">"حسنًا"</string>
     <string name="done" msgid="381184316122520313">"تم"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"المنبّهات والتذكيرات"</string>
@@ -547,14 +547,17 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"للتو"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"هذا الهاتف"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"هذا الجهاز اللوحي"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"مكبّر صوت بقاعدة إرساء"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"جهاز خارجي"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"جهاز متّصل"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"هذا الهاتف"</string>
-    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"لا يمكن تشغيل الوسائط على هذا الجهاز."</string>
-    <string name="media_output_status_require_premium" msgid="8411255800047014822">"يجب ترقية الحساب للتبديل."</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"لا يمكن تشغيل المحتوى الذي تم تنزيله هنا."</string>
-    <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"يمكنك إعادة المحاولة بعد الإعلان."</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"يجب تنشيط الجهاز لتشغيل الوسائط هنا."</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"غير مسموح لهذا الجهاز بتشغيل الوسائط."</string>
-    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"لا يمكن تشغيل هذه الوسائط هنا."</string>
+    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"لا يمكن تشغيل الوسائط هنا"</string>
+    <string name="media_output_status_require_premium" msgid="8411255800047014822">"يجب ترقية الحساب للتبديل"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"المحتوى المنزَّل غير متوافق"</string>
+    <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"أعِد المحاولة بعد الإعلان"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"نشِّط الجهاز للتشغيل هنا"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"غير مسموح له بتشغيل وسائط"</string>
+    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"هذه الوسائط غير متوافقة"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"حدثت مشكلة أثناء الاتصال. يُرجى إيقاف الجهاز ثم إعادة تشغيله."</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"جهاز سماعي سلكي"</string>
     <string name="help_label" msgid="3528360748637781274">"المساعدة والملاحظات"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"المستخدم"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"ملف شخصي محظور"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"هل تريد إضافة مستخدم جديد؟"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"‏يمكنك مشاركة هذا الجهاز مع أشخاص آخرين من خلال إنشاء حسابات لمستخدمين إضافيين. وسيحصل كل مستخدم على مساحته الخاصة التي يمكنه تخصيصها بتطبيقاته وخلفياته التي يريدها وغير ذلك. ويمكن أيضًا للمستخدمين ضبط إعدادات الجهاز مثل Wi-Fi والتي تؤثر في جميع المستخدمين.\n\nعند إضافة مستخدم جديد، عليه إعداد مساحته.\n\nيمكن لأي مستخدم تحديث التطبيقات لجميع المستخدمين الآخرين. وقد لا يتم نقل إعدادات وخدمات \"سهولة الاستخدام\" إلى المستخدم الجديد."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"‏يمكنك مشاركة هذا الجهاز مع أشخاص آخرين من خلال إنشاء حسابات لمستخدمين إضافيين. وسيحصل كل مستخدم على مساحته الخاصة التي يمكنه تخصيصها بتطبيقاته وخلفياته التي يريدها وغير ذلك. ويمكن أيضًا للمستخدمين ضبط إعدادات الجهاز مثل Wi-Fi والتي تؤثر في جميع المستخدمين.\n\nعند إضافة مستخدم جديد، عليه إعداد مساحته.\n\nيمكن لأي مستخدم تحديث التطبيقات لجميع المستخدمين الآخرين. وقد لا يتم نقل إعدادات وخدمات \"تسهيل الاستخدام\" إلى المستخدم الجديد."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"عند إضافة مستخدم جديد، عليه إعداد مساحته.\n\nويمكن لأي مستخدم تحديث التطبيقات لجميع المستخدمين الآخرين."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"هل تريد منح هذا المستخدم امتيازات المشرف؟"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"تتوفّر للمشرفين امتيازات خاصة لا يتم منحها للمستخدمين الآخرين. يمكن للمشرف إدارة حسابات جميع المستخدمين، وتحديث الجهاز أو إعادة ضبطه، وتعديل الإعدادات، والاطّلاع على جميع التطبيقات المثبّتة، ومنح امتيازات المشرف للمستخدمين الآخرين أو إبطالها."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"منح المستخدم امتيازات المشرف"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"هل تريد إعداد المستخدم الآن؟"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"يُرجى التأكّد من أن الشخص يمكنه استخدام الجهاز الآن وإعداد مساحته."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"هل ترغب في إعداد ملف شخصي الآن؟"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ستؤدي إعادة الضبط إلى بدء جلسة ضيف جديدة وحذف جميع التطبيقات والبيانات من الجلسة الحالية."</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"هل تريد الخروج من وضع الضيف؟"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"سيؤدي الخروج من وضع الضيف إلى حذف التطبيقات والبيانات من جلسة الضيف الحالية."</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"نعم، أريد منح هذا المستخدم امتيازات المشرف."</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"لا أريد منح هذا المستخدم امتيازات المشرف."</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"خروج"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"هل تريد حفظ النشاط في وضع الضيف؟"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"يمكنك حفظ نشاط من الجلسة الحالية أو حذف كلّ التطبيقات والبيانات."</string>
@@ -674,7 +672,7 @@
     <string name="accessibility_no_calling" msgid="3540827068323895748">"لا يتم الاتصال."</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>
+    <string name="physical_keyboard_title" msgid="4811935435315835220">"لوحة المفاتيح الخارجية"</string>
     <string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"اختيار تنسيق لوحة مفاتيح"</string>
     <string name="keyboard_layout_default_label" msgid="1997292217218546957">"التنسيق التلقائي"</string>
     <string name="turn_screen_on_title" msgid="3266937298097573424">"تشغيل الشاشة"</string>
@@ -685,7 +683,7 @@
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"بث تطبيق <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"تغيير جهاز الإخراج"</string>
     <string name="back_navigation_animation" msgid="8105467568421689484">"صور متحركة تعرض إيماءة الرجوع إلى الخلف التنبؤية"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"فعِّل الصور المتحركة في النظام لإيماءة الرجوع إلى الخلف التنبؤية."</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"تفعيل الصور المتحركة في النظام لإيماءة الرجوع إلى الخلف التنبؤية"</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"‏يفعّل هذا الإعداد الصور المتحركة في النظام للصور المتحركة التي تعرض إيماءة الرجوع إلى الخلف التنبؤية. يتطلب الإعداد ضبط enableOnBackInvokedCallback إلى true لكل تطبيق في ملف البيان."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"نقل لليسار"</item>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"نقل للأعلى"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"%% <xliff:g id="PERCENTAGE">%1$d</xliff:g>"</string>
+    <string name="not_specified" msgid="5423502443185110328">"صيغة مخاطبة غير محدَّدة"</string>
+    <string name="neuter" msgid="2075249330106127310">"صيغة مخاطبة محايدة"</string>
+    <string name="feminine" msgid="1529155595310784757">"صيغة مخاطبة مؤنثة"</string>
+    <string name="masculine" msgid="4653978041013996303">"صيغة مخاطبة مذكّرة"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-as/arrays.xml b/packages/SettingsLib/res/values-as/arrays.xml
index 539b8a6..5a06cb3 100644
--- a/packages/SettingsLib/res/values-as/arrays.xml
+++ b/packages/SettingsLib/res/values-as/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"৪কে. (সুৰক্ষিত)"</item>
     <item msgid="7322156123728520872">"৪কে. (বৰ্ধিত)"</item>
     <item msgid="7735692090314849188">"৪কে. (বৰ্ধিত, সুৰক্ষিত)"</item>
-    <item msgid="7346816300608639624">"৭২০পি., ১০৮০পি. (দ্বৈত স্ক্ৰীন)"</item>
+    <item msgid="7346816300608639624">"৭২০পি., ১০৮০পি. (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"নাই"</item>
@@ -275,13 +275,17 @@
     <item msgid="6506681373060736204">"সৰ্বাধিক ৪টা প্ৰক্ৰিয়া"</item>
   </string-array>
   <string-array name="usb_configuration_titles">
-    <item msgid="3358668781763928157">"চ্চাৰ্জ কৰি থকা হৈছে"</item>
+    <item msgid="3358668781763928157">"চাৰ্জ কৰি থকা হৈছে"</item>
     <item msgid="7804797564616858506">"এমটিপি (মিডিয়া ট্ৰান্সফাৰ প্ৰ’ট’কল)"</item>
     <item msgid="910925519184248772">"পিটিপি (পিকচাৰ ট্ৰান্সফাৰ প্ৰ’ট’কল)"</item>
     <item msgid="3825132913289380004">"RNDIS (USB ইথাৰনেট)"</item>
     <item msgid="8828567335701536560">"ধ্বনিৰ উৎস"</item>
     <item msgid="8688681727755534982">"এমআইডিআই"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index 93813e2..6080dbf 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"ছিমৰ এক্সেছ"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"এইচ্ছডি অডি\'অ: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"এইচ্ছডি অডিঅ’"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"শ্ৰৱণ যন্ত্ৰ"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE অডিঅ’"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"শ্ৰৱণ যন্ত্ৰলৈ সংযোগ কৰা হৈছে"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"শ্ৰৱণ যন্ত্ৰ"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE অডিঅ’"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"শ্ৰৱণ যন্ত্ৰৰ সৈতে সংযোগ কৰা হৈছে"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE অডিঅ’ৰ সৈতে সংযোগ কৰক"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"মিডিয়া অডিঅ’লৈ সংযোগ হৈছে"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"ফ’ন অডিঅ\'ৰ লগত সংযোগ কৰা হ’ল"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"ফ\'ন অডিঅ\'ৰ বাবে ব্যৱহাৰ কৰক"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ফাইল স্থানান্তৰ কৰিবলৈ ব্যৱহাৰ কৰক"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ইনপুটৰ বাবে ব্যৱহাৰ কৰক"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"শ্ৰৱণ যন্ত্ৰৰ বাবে ব্যৱহাৰ কৰক"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"শ্ৰৱণ যন্ত্ৰৰ বাবে ব্যৱহাৰ কৰক"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIOৰ বাবে ব্যৱহাৰ কৰক"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"পেয়াৰ কৰক"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"পেয়াৰ কৰক"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"প্ৰ’ফাইল বাছনি কৰক"</string>
     <string name="category_personal" msgid="6236798763159385225">"ব্যক্তিগত"</string>
     <string name="category_work" msgid="4014193632325996115">"কৰ্মস্থান-সম্পৰ্কীয়"</string>
+    <string name="category_clone" msgid="1554511758987195974">"ক্ল’ন"</string>
     <string name="development_settings_title" msgid="140296922921597393">"বিকাশকৰ্তাৰ বিকল্পসমূহ"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"বিকাশকৰ্তা বিষয়ক বিকল্পসমূহ সক্ষম কৰক"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"এপৰ বিকাশৰ বাবে বিকল্পসমূহ ছেট কৰক"</string>
@@ -256,7 +257,7 @@
     <string name="bugreport_in_power" msgid="8664089072534638709">"বাগ ৰিপৰ্টৰ শ্ৱৰ্টকাট"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"পাৱাৰ মেনুত বাগ প্ৰতিবেদন গ্ৰহণ কৰিবলৈ এটা বুটাম দেখুৱাওক"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"জাগ্ৰত কৰি ৰাখক"</string>
-    <string name="keep_screen_on_summary" msgid="1510731514101925829">"চ্চাৰ্জ হৈ থকাৰ সময়ত স্ক্ৰীন কেতিয়াও সুপ্ত অৱস্থালৈ নাযায়"</string>
+    <string name="keep_screen_on_summary" msgid="1510731514101925829">"চাৰ্জ হৈ থকাৰ সময়ত স্ক্ৰীন কেতিয়াও সুপ্ত অৱস্থালৈ নাযায়"</string>
     <string name="bt_hci_snoop_log" msgid="7291287955649081448">"ব্লুটুথ HCI স্নুপ ল’গ সক্ষম কৰক"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"ব্লুটুথ পেকেট সংগ্ৰহ কৰক। (এই ছেটিংটো সলনি কৰাৰ পাছত ব্লুটুথ ট’গল কৰক)"</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"ঔইএম আনলক"</string>
@@ -354,12 +355,14 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"চলিত স্পৰ্শ-বিষয়ক তথ্যসহ স্ক্ৰীন অভাৰলে’"</string>
     <string name="show_touches" msgid="8437666942161289025">"টেপসমূহ দেখুৱাওক"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"টিপিলে দৃশ্যায়িত ফীডবেক দিয়ক"</string>
-    <string name="show_screen_updates" msgid="2078782895825535494">"পৃষ্ঠভাগৰ আপডেইট দেখুৱাওক"</string>
-    <string name="show_screen_updates_summary" msgid="2126932969682087406">"আপডেইট হওতে গোটেই ৱিণ্ড পৃষ্ঠসমূহ ফ্লাশ্ব কৰক"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"কী টিপা দেখুৱাওক"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"ভৌতিক কী টিপাৰ ভিজুৱেল প্ৰতিক্ৰিয়া দেখুৱাওক"</string>
+    <string name="show_screen_updates" msgid="2078782895825535494">"পৃষ্ঠভাগৰ আপডে’ট দেখুৱাওক"</string>
+    <string name="show_screen_updates_summary" msgid="2126932969682087406">"আপডে’ট হওতে গোটেই ৱিণ্ড পৃষ্ঠসমূহ ফ্লাশ্ব কৰক"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"ভিউৰ আপডে’ট দেখুৱাওক"</string>
     <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"অঁকাৰ সময়ত ৱিণ্ড\'ৰ ভিতৰত ফ্লাশ্ব দৰ্শন"</string>
     <string name="show_hw_layers_updates" msgid="5268370750002509767">"হাৰ্ডৱেৰৰ স্তৰৰ আপডে\'ট দেখুৱাওক"</string>
-    <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"হাৰ্ডৱেৰ লেয়াৰ আপডেইট হওতে সিঁহতক সেউজীয়া ৰঙেৰে ফ্লাশ্ব কৰক"</string>
+    <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"হাৰ্ডৱেৰ লেয়াৰ আপডে’ট হওতে সিঁহতক সেউজীয়া ৰঙেৰে ফ্লাশ্ব কৰক"</string>
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"GPU অভাৰড্ৰ ডিবাগ কৰক"</string>
     <string name="disable_overlays" msgid="4206590799671557143">"HW অ’ভাৰলে অক্ষম কৰক"</string>
     <string name="disable_overlays_summary" msgid="1954852414363338166">"স্ক্ৰীন কম্প’জিট কৰাৰ বাবে সদায় জিপিইউ ব্যৱহাৰ কৰক"</string>
@@ -369,7 +372,7 @@
     <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"স্বয়ংক্ৰিয়ভাৱে ইউএছবি ধ্বনিৰ আনুষংগিক আহিলাবিলাকলৈ ৰাউটিং কৰাটো অক্ষম কৰক"</string>
     <string name="debug_layout" msgid="1659216803043339741">"লেআউটৰ সময় দেখুৱাওক"</string>
     <string name="debug_layout_summary" msgid="8825829038287321978">"ক্লিপ বাউণ্ড, মাৰ্জিন আদিসমূহ দেখুৱাওক"</string>
-    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"আৰটিএল চানেকিৰ দিশ বলেৰে সলনি কৰক"</string>
+    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"সজ্জাৰ দিশ সোঁফালৰ পৰা বাওঁফাললৈ কৰক"</string>
     <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"আটাইবোৰ ভাষাৰ বাবে স্ক্ৰীনৰ চানেকিৰ দিশ RTLলৈ বলেৰে সলনি কৰক"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"স্বচ্ছ নেভিগেশ্বন বাৰ"</string>
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"ডিফ’ল্ট হিচাপে নেভিগেশ্বন বাৰ পটভূমিৰ ৰং স্বচ্ছ কৰক"</string>
@@ -477,7 +480,7 @@
     <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="8573274094093364791">"চাৰ্জ কৰি থকা হৈছে"</string>
-    <string name="battery_info_status_discharging" msgid="6962689305413556485">"চ্চাৰ্জ কৰা নাই"</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>
     <string name="battery_info_status_full_charged" msgid="3536054261505567948">"সম্পূৰ্ণ চাৰ্জ হৈছে"</string>
@@ -544,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"এই মাত্ৰ"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"এই ফ’নটো"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"এই টেবলেটটো"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"ড’ক স্পীকাৰ"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"বাহ্যিক ডিভাইচ"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"সংযোগ হৈ থকা ডিভাইচ"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"এই ফ’নটো"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"এই ডিভাইচটো প্লে\' কৰিব নোৱাৰি"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"সলনি কৰিবলৈ একাউণ্ট আপগ্ৰে’ড কৰক"</string>
@@ -578,7 +584,7 @@
     <string name="user_add_user_message_short" msgid="3295959985795716166">"আপুনি যেতিয়া এজন নতুন ব্যৱহাৰকাৰী যোগ কৰে, তেওঁ নিজৰ ঠাই ছেট আপ কৰাৰ প্ৰয়োজন।\n\nযিকোনো ব্যৱহাৰকাৰীয়ে অন্য সকলো ব্যৱহাৰকাৰীৰ বাবে এপ্ আপডে\'ট কৰিব পাৰে।"</string>
     <string name="user_grant_admin_title" msgid="5157031020083343984">"এই ব্যৱহাৰকাৰীগৰাকীক এগৰাকী প্ৰশাসক বনাবনে?"</string>
     <string name="user_grant_admin_message" msgid="1673791931033486709">"প্ৰশাসকৰ ওচৰত কিছুমান বিশেষাধিকাৰ আছে, যিবোৰ অন্য ব্যৱহাৰকাৰীৰ নাই। এগৰাকী প্ৰশাসকে সকলো ব্যৱহাৰকাৰীক পৰিচালনা কৰিব, এই ডিভাইচটো আপডে’ট অথবা ৰিছেট কৰিব, ছেটিং সংশোধন কৰিব, ইনষ্টল কৰি থোৱা আটাইবোৰ এপ্ চাব আৰু অন্য লোকৰ বাবে প্ৰশাসকৰ বিশেষাধিকাৰ প্ৰদান কৰিব অথবা প্ৰত্যাহাৰ কৰিব পাৰে।"</string>
-    <string name="user_grant_admin_button" msgid="5441486731331725756">"প্ৰশাসকৰ বনাওক"</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"প্ৰশাসক বনাওক"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"ব্যৱহাৰকাৰী এতিয়া ছেট আপ কৰিবনে?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"ডিভাইচটো লৈ নিজৰ ঠাই ছেটআপ কৰিবলৈ নতুন ব্যৱহাৰকাৰী উপলব্ধ থকাটো নিশ্চিত কৰক"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"এতিয়া প্ৰ\'ফাইল ছেট আপ কৰিবনে?"</string>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"ওপৰলৈ নিয়ক"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"নিৰ্দিষ্ট কৰা হোৱা নাই"</string>
+    <string name="neuter" msgid="2075249330106127310">"ক্লীৱ লিংগ"</string>
+    <string name="feminine" msgid="1529155595310784757">"নাৰী-বিষয়ক"</string>
+    <string name="masculine" msgid="4653978041013996303">"পুৰুষ-বিষয়ক"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-az/arrays.xml b/packages/SettingsLib/res/values-az/arrays.xml
index f01def0..4f7aabd 100644
--- a/packages/SettingsLib/res/values-az/arrays.xml
+++ b/packages/SettingsLib/res/values-az/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Audio Mənbə"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index 9d441c9..3cf8afa 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM-karta giriş"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD audio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Eşitmə cihazları"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Eşitmə Aparatlarına qoşuldu"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Eşitmə aparatları"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Eşitmə aparatlarına qoşuldu"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE audiosuna qoşulub"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Media audioya birləşdirilib"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Telefon audiosuna qoşulu"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Telefon audiosu istifadə edin"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Fayl transferi üçün istifadə edin"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Daxiletmə üçün istifadə edin"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Eşitmə Aparatları üçün istifadə edin"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Eşitmə aparatları üçün istifadə edin"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO üçün istifadə edin"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Qoşulsun"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"QOŞULSUN"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Profil seçin"</string>
     <string name="category_personal" msgid="6236798763159385225">"Şəxsi"</string>
     <string name="category_work" msgid="4014193632325996115">"İş"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klonlayın"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Developer seçimləri"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Developer variantlarını aktiv edin"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Tətbiq inkişafı seçimlərini təyin et"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Toxunuş və jest datası göstərilsin"</string>
     <string name="show_touches" msgid="8437666942161289025">"Vizual reaksiya"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Toxunuşa vizual reaksiya verilsin"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Düyməyə basma göstərilsin"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Fiziki düymə basılmaları üçün vizual rəy göstərin"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Səth yenilənməsi göstərilsin"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Pəncərə səthi təzələnəndə işıqlansın"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Baxış yenilənməsi göstərilsin"</string>
@@ -454,7 +457,7 @@
     <string name="power_discharge_by_only_enhanced" msgid="3268796172652988877">"İstifadəyə əsasən təxminən <xliff:g id="TIME">%1$s</xliff:g> olana qədər davam edəcək"</string>
     <string name="power_discharge_by" msgid="4113180890060388350">"Təxminən <xliff:g id="TIME">%1$s</xliff:g> olana qədər davam edəcək (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_discharge_by_only" msgid="92545648425937000">"Təxminən <xliff:g id="TIME">%1$s</xliff:g> olana qədər davam edəcək"</string>
-    <string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> olana qədər"</string>
+    <string name="power_discharge_by_only_short" msgid="5883041507426914446">"<xliff:g id="TIME">%1$s</xliff:g> radəsinə qədər"</string>
     <string name="power_suggestion_battery_run_out" msgid="6332089307827787087">"Batareya <xliff:g id="TIME">%1$s</xliff:g> radələrinə qədər boşala bilər"</string>
     <string name="power_remaining_less_than_duration_only" msgid="8956656616031395152">"Maksimum <xliff:g id="THRESHOLD">%1$s</xliff:g> qalıb"</string>
     <string name="power_remaining_less_than_duration" msgid="318215464914990578">"Maksimum <xliff:g id="THRESHOLD">%1$s</xliff:g> qalıb (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Daha çox vaxt."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Daha az vaxt."</string>
     <string name="cancel" msgid="5665114069455378395">"Ləğv edin"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Növbəti"</string>
+    <string name="back" msgid="5554327870352703710">"Geri"</string>
+    <string name="save" msgid="3745809743277153149">"Yadda saxlayın"</string>
     <string name="okay" msgid="949938843324579502">"Ok"</string>
     <string name="done" msgid="381184316122520313">"Hazırdır"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Siqnallar və xatırladıcılar"</string>
@@ -547,14 +547,17 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"İndicə"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Bu telefon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Bu planşet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dok dinamiki"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Xarici cihaz"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Qoşulmuş cihaz"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Bu telefon"</string>
-    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Bu cihazda oxutmaq mümkün deyil"</string>
-    <string name="media_output_status_require_premium" msgid="8411255800047014822">"Keçirmək üçün hesabı təkmilləşdirin"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Burada endirmələri oxutmaq mümkün deyil"</string>
-    <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Reklamdan sonra yenidən cəhd edin"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Burada oxutmaq üçün cihazı oyadın"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Cihaz oxudulmaq üçün təsdiqlənməyib"</string>
-    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Bu medianı burada oxutmaq mümkün deyil"</string>
+    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Bu cihazda oxutmaq olmur"</string>
+    <string name="media_output_status_require_premium" msgid="8411255800047014822">"Keçirmək üçün hesabı güncəllə"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Burada endirmələri oxutmaq olmur"</string>
+    <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Reklamdan sonra yenidən sına"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Burada oxutmaqçün cihazı oyat"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Cihaz oxutmaq üçün təsdiqlənməyib"</string>
+    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Bu medianı burada oxutmaq olmur"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Qoşulmaqla bağlı problem. Cihazı deaktiv edin, sonra yenidən aktiv edin"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Simli audio cihaz"</string>
     <string name="help_label" msgid="3528360748637781274">"Yardım və rəy"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Yeni istifadəçi əlavə edilsin?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Əlavə istifadəçilər yaratmaqla bu cihazı digərləri ilə paylaşa bilərsiniz. Hər bir istifadəçinin tətbiq, divar kağızı və daha çoxu ilə fərdiləşdirə biləcəyi fərdi məkanları olacaq. İstifadəçilər hər kəsə təsir edən Wi‑Fi kimi cihaz ayarlarını da tənzimləyə biləcək.\n\nYeni istifadəçi əlavə etdiyiniz zaman həmin istifadəçi öz məkanını ayarlamalıdır.\n\nİstənilən istifadəçi tətbiqləri digər bütün istifadəçilər üçün güncəlləyə bilər. Əlçatımlılıq ayarları və xidmətlər yeni istifadəçiyə transfer edilməyə bilər."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Yeni istifadəçi əlavə etdiyiniz zaman həmin şəxs öz yerini quraşdırmalıdır.\n\nİstənilən istifadəçi bütün digər istifadəçilərdən olan tətbiqləri güncəlləşdirə bilər."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Bu istifadəçi admin edilsin?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Adminlərin xüsusi imtiyazları var. Admin bütün istifadəçiləri idarə edə, bu cihazı güncəlləyə və ya sıfırlaya, ayarları dəyişə, quraşdırılmış bütün tətbiqlərə baxa, başqaları üçün admin imtiyazları verə və ya ləğv edə bilər."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Admin edin"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"İstifadəçi indi ayarlansın?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Şəxsin cihazı götürə bilməsinə və yerini quraşdıra bilməsinə əmin olun"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Profil indi quraşdırılsın?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Bəli, admin edin"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Xeyr, admin etməyin"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Yuxarı köçürün"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Göstərilməyib"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neytral"</string>
+    <string name="feminine" msgid="1529155595310784757">"Qadın"</string>
+    <string name="masculine" msgid="4653978041013996303">"Kişi"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
index 772c339..f5ba2df 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Izvor zvuka"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 62025e4..29d2f72 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -60,7 +60,7 @@
     <string name="wifi_not_in_range" msgid="1541760821805777772">"Nije u opsegu"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Automatsko povezivanje nije uspelo"</string>
     <string name="wifi_no_internet" msgid="1774198889176926299">"Nema pristupa internetu"</string>
-    <string name="saved_network" msgid="7143698034077223645">"Sačuvao/la je <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="saved_network" msgid="7143698034077223645">"Čuva <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_network_scorer" msgid="7665725527352893558">"Automatski povezano preko %1$s"</string>
     <string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automatski povezano preko dobavljača ocene mreže"</string>
     <string name="connected_via_app" msgid="3532267661404276584">"Povezano preko: <xliff:g id="NAME">%1$s</xliff:g>"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Pristup SIM kartici"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD zvuk: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD zvuk"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Slušni aparati"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Povezano sa slušnim aparatima"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Slušni aparati"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Povezano sa slušnim aparatima"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Povezano sa LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Povezano sa zvukom medija"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Povezano sa zvukom telefona"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Korišćenje za audio telefona"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Korišćenje za prenos datoteka"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Koristi za ulaz"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Koristi za slušne aparate"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Koristi za slušne aparate"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Koristite za LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Upari"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"UPARI"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Otkaži"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Uparivanje omogućava pristup kontaktima i istoriji poziva nakon povezivanja."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Uparivanje sa uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g> nije moguće."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Uparivanje sa uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g> nije moguće zbog netačnog PIN-a ili pristupnog koda."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Uparivanje sa <xliff:g id="DEVICE_NAME">%1$s</xliff:g> nije moguće zbog netačnog PIN-a ili pristupnog koda."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Nije moguće komunicirati sa uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> je odbio/la uparivanje"</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Računar"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Izaberite profil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Lično"</string>
     <string name="category_work" msgid="4014193632325996115">"Posao"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klonirano"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opcije za programere"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Omogući opcije za programere"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Podešavanje opcija za programiranje aplikacije"</string>
@@ -255,7 +256,7 @@
     <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, otklanjanje grešaka, programer"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Prečica za izveštaj o greškama"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Prikazuje dugme u meniju dugmeta za uključivanje za pravljenje izveštaja o greškama"</string>
-    <string name="keep_screen_on" msgid="1187161672348797558">"Ne zaključavaj"</string>
+    <string name="keep_screen_on" msgid="1187161672348797558">"Ne gasi ekran"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"Ekran neće biti u režimu spavanja tokom punjenja"</string>
     <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Omogući snoop evid. za Bluetooth HCI"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Snimi Bluetooth pakete. (Uključite/isključite Bluetooth kada promenite ovo podešavanje)"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Preklopni element sa trenutnim podacima o dodiru"</string>
     <string name="show_touches" msgid="8437666942161289025">"Prikazuj dodire"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Prikazuje vizuelne povratne informacije za dodire"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Prikazuj pritiske tastera"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Prikazuje povratne informacije za pritiske tastera"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Prikaži ažuriranja površine"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Osvetljava sve površine prozora kada se ažuriraju"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Prikaži ažuriranja prikaza"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Više vremena."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Manje vremena."</string>
     <string name="cancel" msgid="5665114069455378395">"Otkaži"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Dalje"</string>
+    <string name="back" msgid="5554327870352703710">"Nazad"</string>
+    <string name="save" msgid="3745809743277153149">"Sačuvaj"</string>
     <string name="okay" msgid="949938843324579502">"Potvrdi"</string>
     <string name="done" msgid="381184316122520313">"Gotovo"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmi i podsetnici"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Upravo"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Ovaj telefon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Ovaj tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Zvučnik bazne stanice"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Spoljni uređaj"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Povezani uređaj"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Ovaj telefon"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Ne možete da pustite na ovom uređaju"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Nadogradite nalog radi prebacivanja"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Korisnik"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Ograničeni profil"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Dodajete novog korisnika?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Ovaj uređaj možete da delite sa drugim ljudima ako napravite još korisnika. Svaki korisnik ima sopstveni prostor, koji može da prilagođava pomoću aplikacija, pozadine i slično. Korisnici mogu da prilagođavaju i podešavanja uređaja koja utiču na svakoga, poput Wi‑Fi-ja.\n\nKada dodate novog korisnika, ta osoba treba da podesi sopstveni prostor.\n\nSvaki korisnik može da ažurira aplikacije za sve ostale korisnike. Podešavanja i usluge pristupačnosti ne mogu da se prenose na novog korisnika."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Ovaj uređaj možete da delite sa drugim ljudima ako napravite još korisnika. Svaki korisnik ima sopstveni prostor, koji može da prilagođava pomoću aplikacija, pozadine i slično. Korisnici mogu da prilagođavaju i podešavanja uređaja koja utiču na svakoga, poput WiFi-ja.\n\nKada dodate novog korisnika, ta osoba treba da podesi sopstveni prostor.\n\nSvaki korisnik može da ažurira aplikacije za sve ostale korisnike. Podešavanja i usluge pristupačnosti ne mogu da se prenose na novog korisnika."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Kada dodate novog korisnika, ta osoba treba da podesi sopstveni prostor.\n\nSvaki korisnik može da ažurira aplikacije za sve ostale korisnike."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Želite da postavite ovog korisnika za administratora?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Administratori imaju posebne privilegije koje ostali korisnici nemaju. Administrator može da upravlja svim korisnicima, ažurira ili resetuje ovaj uređaj, prilagođava podešavanja, pregleda sve instalirane aplikacije i dodeljuje ili opoziva privilegije administratora za druge."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Postavi za administratora"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Podešavate korisnika?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Ta osoba treba da uzme uređaj i podesi svoj prostor"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Želite li da odmah podesite profil?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Time ćete pokrenuti novu sesiju gosta i izbrisati sve aplikacije i podatke iz aktuelne sesije"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Izlazite iz režima gosta?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Time ćete izbrisati sve aplikacije i podatke iz aktuelne sesije gosta"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Da, postavi ga za administratora"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Ne, ne postavljaj ga za administratora"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Pomerite nagore"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Nije navedeno"</string>
+    <string name="neuter" msgid="2075249330106127310">"Srednji rod"</string>
+    <string name="feminine" msgid="1529155595310784757">"Ženski rod"</string>
+    <string name="masculine" msgid="4653978041013996303">"Muški rod"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-be/arrays.xml b/packages/SettingsLib/res/values-be/arrays.xml
index d253725..b993eb6 100644
--- a/packages/SettingsLib/res/values-be/arrays.xml
+++ b/packages/SettingsLib/res/values-be/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Крыніца аўдыя"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index 4a81fab..6489255 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Доступ да SIM-карты"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Аўдыя ў HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Аўдыя ў HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Слыхавыя апараты"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"Le audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Падключана да слыхавых апаратаў"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Слыхавыя апараты"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Слыхавыя апараты падключаны"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Падключана да LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Падключана да аўдыё медыа"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Падключана да аўдыё тэлефона"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Выкарыстоўваць для аўдыё тэлефона"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Выкарыстоўваць для перадачы файлаў"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Выкарыстоўваць для ўводу"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Выкарыстоўваць для слыхавых апаратаў"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Выкарыстоўваць для слыхавых апаратаў"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Выкарыстоўваць для LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Спалучыць"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"СПАЛУЧЫЦЬ"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Выбраць профіль"</string>
     <string name="category_personal" msgid="6236798763159385225">"Асабісты"</string>
     <string name="category_work" msgid="4014193632325996115">"Працоўны"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Клон"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Параметры распрацоўшчыка"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Уключыць параметры распрацоўшчыка"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Налада параметраў для распрацоўкі прыкладанняў"</string>
@@ -303,7 +304,7 @@
     <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Пры выбары сеткі Wi-Fi указваць у журнале RSSI для кожнага SSID"</string>
     <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"Зніжае расход зараду акумулятара і павышае прадукцыйнасць мабільных сетак"</string>
     <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"Калі ўключаны гэты рэжым, MAC-адрас гэтай прылады можа змяняцца падчас кожнага падключэння да сеткі з актыўнай рандамізацыяй MAC-адрасоў."</string>
-    <string name="wifi_metered_label" msgid="8737187690304098638">"Сетка з улікам трафіка"</string>
+    <string name="wifi_metered_label" msgid="8737187690304098638">"Сетка з падлікам трафіка"</string>
     <string name="wifi_unmetered_label" msgid="6174142840934095093">"Сетка без уліку трафіка"</string>
     <string name="select_logd_size_title" msgid="1604578195914595173">"Памеры буфера журнала"</string>
     <string name="select_logd_size_dialog_title" msgid="2105401994681013578">"Выберыце памеры сродку вядзення журнала для буфераў журнала"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Паказваць на экране націсканні і жэсты"</string>
     <string name="show_touches" msgid="8437666942161289025">"Паказваць дакрананні"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Паказваць візуалізацыю дакрананняў"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Паказваць націсканні"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Паказваць візуальны водгук пры націсканні клавіш"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Абнаўленне паверхні"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Падсвяціць паверхню акна пры абнаўленні"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Паказаць абнаўленні"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Больш часу."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Менш часу."</string>
     <string name="cancel" msgid="5665114069455378395">"Скасаваць"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Далей"</string>
+    <string name="back" msgid="5554327870352703710">"Назад"</string>
+    <string name="save" msgid="3745809743277153149">"Захаваць"</string>
     <string name="okay" msgid="949938843324579502">"ОК"</string>
     <string name="done" msgid="381184316122520313">"Гатова"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Будзільнікі і напаміны"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Толькі што"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Гэты тэлефон"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Гэты планшэт"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Дынамік док-станцыі"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Знешняя прылада"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Падключаная прылада"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Гэты тэлефон"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Не ўдаецца прайграць на гэтай прыладзе"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Для пераключэння перайдзіце на іншую версію ўліковага запісу"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Карыстальнік"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Абмежаваны профiль"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Дадаць новага карыстальніка?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Вы можаце адкрыць доступ да гэтай прылады іншым людзям шляхам стварэння дадатковых карыстальнікаў. Кожны карыстальнік мае свой уласны раздзел, на якім ён можа наладзіць свае праграмы, шпалеры і іншае. Карыстальнікі таксама могуць наладжваць параметры прылады, напрыклад Wi-Fi, якія ўплываюць на ўсіх.\n\nКалі вы дадаяце новага карыстальніка, ён павінен наладзіць свой раздзел.\n\nЛюбы карыстальнік можа абнаўляць праграмы для ўсіх астатніх карыстальнікаў. Спецыяльныя магчымасці наладжваюцца асабіста кожным карыстальнікам."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"Пасля стварэння профіля яго трэба наладзіць.\n\nЛюбы карыстальнік прылады можа абнаўляць праграмы ўсіх іншых карыстальнікаў."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Вы можаце адкрыць доступ да гэтай прылады іншым карыстальнікам шляхам стварэння дадатковых профіляў. Кожны карыстальнік будзе мець свой уласны профіль, на якім ён зможа наладзіць свае праграмы, шпалеры і іншае. Карыстальнікі таксама змогуць наладжваць параметры прылады, напрыклад Wi-Fi, якія ўплываюць на ўсіх.\n\nКалі вы дадаяце новага карыстальніка, ён павінен наладзіць свой профіль.\n\nЛюбы карыстальнік можа абнаўляць праграмы для ўсіх астатніх карыстальнікаў. Спецыяльныя магчымасці наладжваюцца асабіста кожным карыстальнікам."</string>
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"Пасля стварэння профілю яго трэба наладзіць.\n\nЛюбы карыстальнік прылады можа абнаўляць праграмы ўсіх іншых карыстальнікаў."</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Зрабіць гэтага карыстальніка адміністратарам?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Адміністратары маюць спецыяльныя правы, якіх няма ў звычайных карыстальнікаў. Адмінстратар можа кіраваць усімі карыстальнікамі, абнаўляць або скідваць ПЗ прылады, змяняць налады, праглядаць усталяваныя праграмы, даваць іншым карыстальнікам або адклікаць правы адміністратара."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Зрабіць адміністратарам"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Наладзіць профіль?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Пераканайцеся, што чалавек мае магчымасць узяць прыладу і наладзіць свой раздзел"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Наладзiць профiль?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Будзе запушчаны новы гасцявы сеанс. Усе праграмы і даныя бягучага сеанса будуць выдалены"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Выйсці з гасцявога рэжыму?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Будуць выдалены праграмы і даныя бягучага гасцявога сеанса"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Так, зрабіць адміністратарам"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Не рабіць адміністратарам"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Выйсці"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Захаваць дзеянні госця?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Можна захаваць даныя пра дзеянні ў бягучым сеансе ці выдаліць праграмы і даныя"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Перамясціць уверх"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Не ўказаны"</string>
+    <string name="neuter" msgid="2075249330106127310">"Ніякі"</string>
+    <string name="feminine" msgid="1529155595310784757">"Жаночы"</string>
+    <string name="masculine" msgid="4653978041013996303">"Мужчынскі"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-bg/arrays.xml b/packages/SettingsLib/res/values-bg/arrays.xml
index 6be8827..9388e66 100644
--- a/packages/SettingsLib/res/values-bg/arrays.xml
+++ b/packages/SettingsLib/res/values-bg/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (сигурно)"</item>
     <item msgid="7322156123728520872">"4K (с увеличен мащаб)"</item>
     <item msgid="7735692090314849188">"4K (с увеличен мащаб, сигурно)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (двоен екран)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"Без"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Аудиоизточник"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index b6b76c5..91dbb33 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Достъп до SIM картата"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Висококачествено аудио: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Висококачествено аудио"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Слухови апарати"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Установена е връзка със слухов апарат"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Слухови апарати"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Установена е връзка със слухов апарат"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Свързано с LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Установена е връзка с медийно аудио"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Връзка със звука на телефона"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Използване на телефон за аудио"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Използване на за пренос на файлове"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Да се използва за въвеждане"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Използване за слухови апарати"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Използване за слухови апарати"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Използване за LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Сдвояване"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"СДВОЯВАНЕ"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Отказ"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"При свързване сдвояването предоставя достъп до вашите контакти и история на обажданията."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Неуспешно сдвояване с(ъс) <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Неуспешно сдвояване с(ъс) <xliff:g id="DEVICE_NAME">%1$s</xliff:g> поради неправилен ПИН или код за достъп."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Неуспешно сдвояване с(ъс) <xliff:g id="DEVICE_NAME">%1$s</xliff:g>: неправилен ПИН или ключ за достъп."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Не може да се свърже с/ъс <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Сдвояването е отхвърлено от <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Компютър"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Избор на потребителски профил"</string>
     <string name="category_personal" msgid="6236798763159385225">"Лични"</string>
     <string name="category_work" msgid="4014193632325996115">"Служебни"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Клониране"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Опции за програмисти"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Активиране на опциите за програмисти"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Задаване на опции за програмиране на приложения"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Насл. на екран показва текущи данни при докосване"</string>
     <string name="show_touches" msgid="8437666942161289025">"Показване на докосванията"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Показване на визуална обр. връзка за докосванията"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Видими натиск. на клавиши"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Визуална обратна връзка при натискане на клавиши"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Актуализации на повърхн."</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Примигв. на целите повърхности на прозорците при актуализирането им"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Актуализации на изгледите"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Повече време."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"По-малко време."</string>
     <string name="cancel" msgid="5665114069455378395">"Отказ"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Напред"</string>
+    <string name="back" msgid="5554327870352703710">"Назад"</string>
+    <string name="save" msgid="3745809743277153149">"Запазване"</string>
     <string name="okay" msgid="949938843324579502">"ОK"</string>
     <string name="done" msgid="381184316122520313">"Готово"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Будилници и напомняния"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Току-що"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Този телефон"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Този таблет"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Високоговорител докинг станция"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Външно устройство"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Свързано устройство"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Този телефон"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Възпроизвеждането не е възможно на това устройство"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Надстройте профила, за да превключите"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Добавяне на нов потребител?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Можете да споделите това устройство с други хора, като създадете допълнителни потребители. Всеки от тях има собствено работно пространство, което може да персонализира с приложения, тапет и др. Потребителите могат също да коригират настройки на устройството, които засягат всички – например за Wi‑Fi.\n\nКогато добавите нов потребител, той трябва да настрои работното си пространство.\n\nВсеки потребител може да актуализира приложенията за всички останали потребители. Настройките и услугите за достъпност може да не се прехвърлят за новия потребител."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Когато добавите нов потребител, той трябва да настрои работното си пространство.\n\nВсеки потребител може да актуализира приложенията за всички останали потребители."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Искате ли да зададете този потребител като администратор?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Администраторите имат специални права, с които другите потребители не разполагат. Администраторите могат да управляват всички потребители, да актуализират или нулират това устройство, да променят настройките, да преглеждат всички инсталирани приложения, да предоставят или отменят администраторски права на други хора."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Задаване като администратор"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Настройване на потребителя?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Уверете се, че човекът има възможност да вземе устройството и да настрои работното си пространство."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Ще настроите ли потребителския профил сега?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Така ще стартирате нова сесия като гост и ще изтриете всички приложения и данни от текущата сесия"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Изход от режима на гост?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Така ще изтриете приложенията и данните от текущата сесия като гост"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Да, задаване като администратор"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Не, без задаване като администратор"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Изход"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Запазване на активността като гост?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Можете да запазите активността от сесията или да изтриете всички прил. и данни"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Преместване нагоре"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Не е посочено"</string>
+    <string name="neuter" msgid="2075249330106127310">"Среден род"</string>
+    <string name="feminine" msgid="1529155595310784757">"Женски род"</string>
+    <string name="masculine" msgid="4653978041013996303">"Мъжки род"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-bn/arrays.xml b/packages/SettingsLib/res/values-bn/arrays.xml
index b0a1c29..f30ff08 100644
--- a/packages/SettingsLib/res/values-bn/arrays.xml
+++ b/packages/SettingsLib/res/values-bn/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (নিরাপদ)"</item>
     <item msgid="7322156123728520872">"4K (সম্পন্ন)"</item>
     <item msgid="7735692090314849188">"4K (সম্পন্ন, নিরাপদ)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (ডুয়েল স্ক্রিন)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"কোনো কিছুই নয়"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"অডিও উৎস"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index a4ff171..fdbc9e4 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -86,7 +86,7 @@
     <string name="bluetooth_disconnecting" msgid="7638892134401574338">"ডিসকানেক্ট হচ্ছে..."</string>
     <string name="bluetooth_connecting" msgid="5871702668260192755">"কানেক্ট হচ্ছে..."</string>
     <string name="bluetooth_connected" msgid="8065345572198502293">"কানেক্ট করা আছে<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
-    <string name="bluetooth_pairing" msgid="4269046942588193600">"যুক্ত করা হচ্ছে..."</string>
+    <string name="bluetooth_pairing" msgid="4269046942588193600">"পেয়ার করা হচ্ছে..."</string>
     <string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"কানেক্ট করা আছে (ফোনের অডিও ছাড়া)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"কানেক্ট করা আছে (মিডিয়ার অডিও ছাড়া)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"কানেক্ট করা আছে (ফোনের বা মিডিয়ার অডিও ছাড়া)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"সিম অ্যাক্সেস"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD অডিও: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD অডিও"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"হিয়ারিং এড"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE অডিও"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"হিয়ারিং এডের সাথে কানেক্ট করা হয়েছে"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"হিয়ারিং এড"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE অডিও"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"হিয়ারিং এডের সাথে কানেক্ট করা হয়েছে"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE অডিও কানেক্ট করা হয়েছে"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"মিডিয়া অডিওতে কানেক্ট রয়েছে"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"ফোন অডিওতে কানেক্ট"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"ফোন অডিওয়ের জন্য ব্যবহার করুন"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ফাইল স্থানান্তরের জন্য ব্যবহার করুন"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ইনপুটের জন্য ব্যবহার করুন"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"হিয়ারিং এডের জন্য ব্যবহার করুন"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"হিয়ারিং এডের জন্য ব্যবহার করুন"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO-এর জন্য ব্যবহার করুন"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"যুক্ত করুন"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"যুক্ত করুন"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"প্রোফাইল বেছে নিন"</string>
     <string name="category_personal" msgid="6236798763159385225">"ব্যক্তিগত"</string>
     <string name="category_work" msgid="4014193632325996115">"অফিস"</string>
+    <string name="category_clone" msgid="1554511758987195974">"ক্লোন"</string>
     <string name="development_settings_title" msgid="140296922921597393">"ডেভেলপার বিকল্প"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"ডেভেলপার বিকল্প সক্ষম করুন"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"অ্যাপ্লিকেশান উন্নয়নের জন্য বিকল্পগুলি সেট করুন"</string>
@@ -337,7 +338,7 @@
     <string name="hdcp_checking_dialog_title" msgid="7691060297616217781">"HDCP চেক করার আচরণ সেট করুন"</string>
     <string name="debug_debugging_category" msgid="535341063709248842">"ডিবাগিং"</string>
     <string name="debug_app" msgid="8903350241392391766">"ডিবাগ অ্যাপ বেছে নিন"</string>
-    <string name="debug_app_not_set" msgid="1934083001283807188">"ডিবাগ অ্যাপ্লিকেশান সেট করা নেই"</string>
+    <string name="debug_app_not_set" msgid="1934083001283807188">"ডিবাগ অ্যাপ সেট করা নেই"</string>
     <string name="debug_app_set" msgid="6599535090477753651">"ডিবাগিং অ্যাপ্লিকেশান: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="select_application" msgid="2543228890535466325">"অ্যাপ্লিকেশান বেছে নিন"</string>
     <string name="no_application" msgid="9038334538870247690">"কিছুই না"</string>
@@ -349,11 +350,13 @@
     <string name="media_category" msgid="8122076702526144053">"মিডিয়া"</string>
     <string name="debug_monitoring_category" msgid="1597387133765424994">"পর্যবেক্ষণে রাখা"</string>
     <string name="strict_mode" msgid="889864762140862437">"স্ট্রিক্ট মোড চালু আছে"</string>
-    <string name="strict_mode_summary" msgid="1838248687233554654">"মুখ্য থ্রেডে অ্যাপ্লিকেশানগুলির দীর্ঘ অ্যাক্টিভিটির সময় স্ক্রিন ফ্ল্যাশ করে"</string>
+    <string name="strict_mode_summary" msgid="1838248687233554654">"মুখ্য থ্রেডে অ্যাপগুলির দীর্ঘ কার্যকলাপের ক্ষেত্রে স্ক্রিন ফ্ল্যাশ করে"</string>
     <string name="pointer_location" msgid="7516929526199520173">"পয়েন্টারের লোকেশন"</string>
     <string name="pointer_location_summary" msgid="957120116989798464">"স্ক্রিন ওভারলে বর্তমান স্পর্শ ডেটা দেখাচ্ছে"</string>
     <string name="show_touches" msgid="8437666942161289025">"আলতো চাপ দেখান"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"আলতো চাপ দিলে ভিজ্যুয়াল প্রতিক্রিয়া দেখান"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"প্রেস করা কী দেখুন"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"প্রেস করা ফিজিকাল কীয়ের জন্য ভিস্যুয়াল মতামত দেখুন"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"সারফেস আপডেটগুলি দেখান"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"সম্পূর্ণ উইন্ডোর সারফেস আপডেট হয়ে গেলে সেটিকে ফ্ল্যাশ করুন"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"ভিউয়ের আপডেট দেখুন"</string>
@@ -366,7 +369,7 @@
     <string name="simulate_color_space" msgid="1206503300335835151">"রঙ স্থান নকল করুন"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"OpenGL ট্রেসগুলি সক্ষম করুন"</string>
     <string name="usb_audio_disable_routing" msgid="3367656923544254975">"USB অডিও রাউটিং বন্ধ করুন"</string>
-    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"USB অডিও যন্ত্রানুষঙ্গে অটোমেটিক রাউটিং অক্ষম করুন"</string>
+    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"USB অডিও পেরিফেরালে অটোমেটিক রাউটিং বন্ধ করুন"</string>
     <string name="debug_layout" msgid="1659216803043339741">"লেআউট সীমাগুলি দেখান"</string>
     <string name="debug_layout_summary" msgid="8825829038287321978">"ক্লিপ বাউন্ড, মার্জিন ইত্যাদি দেখান"</string>
     <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL লেআউট দিকনির্দেশ জোর দিন"</string>
@@ -395,10 +398,10 @@
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"বিজ্ঞপ্তির সতর্কতা দেখুন"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"অ্যাপ সঠিক চ্যানেল ছাড়া বিজ্ঞপ্তি দেখালে সতর্ক করে"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"বহিরাগততে বলপূর্বক মঞ্জুরি"</string>
-    <string name="force_allow_on_external_summary" msgid="8525425782530728238">"ম্যানিফেস্ট মানগুলি নির্বিশেষে যেকোনো অ্যাপ্লিকেশানকে বাহ্যিক সঞ্চয়স্থানে লেখার উপযুক্ত বানায়"</string>
+    <string name="force_allow_on_external_summary" msgid="8525425782530728238">"ম্যানিফেস্ট মানের নির্বিশেষে যেকোনও অ্যাপকে এক্সটারনাল স্টোরেজে ইনস্টল করার উপযুক্ত বানায়"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"আকার পরিবর্তনযোগ্য করার জন্য ক্রিয়াকলাপগুলিকে জোর করুন"</string>
     <string name="force_resizable_activities_summary" msgid="2490382056981583062">"ম্যানিফেস্ট মানগুলির নির্বিশেষে মাল্টি-উইন্ডোর জন্য সমস্ত ক্রিয়াকলাপগুলির আকার পরিবর্তনযোগ্য করুন৷"</string>
-    <string name="enable_freeform_support" msgid="7599125687603914253">"ফ্রি-ফর্ম উইন্ডোগুলি সক্ষম করুন"</string>
+    <string name="enable_freeform_support" msgid="7599125687603914253">"ফ্রি-ফর্ম উইন্ডো চালু করুন"</string>
     <string name="enable_freeform_support_summary" msgid="1822862728719276331">"পরীক্ষামূলক ফ্রি-ফর্ম উইন্ডোগুলির জন্য সহায়তা সক্ষম করুন৷"</string>
     <string name="desktop_mode" msgid="2389067840550544462">"\'ডেস্কটপ\' মোড"</string>
     <string name="local_backup_password_title" msgid="4631017948933578709">"ডেস্কটপ ব্যাকআপ পাসওয়ার্ড"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"আরও বেশি।"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"আরও কম।"</string>
     <string name="cancel" msgid="5665114069455378395">"বাতিল"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"পরবর্তী"</string>
+    <string name="back" msgid="5554327870352703710">"ফিরে যান"</string>
+    <string name="save" msgid="3745809743277153149">"সেভ করুন"</string>
     <string name="okay" msgid="949938843324579502">"ঠিক আছে"</string>
     <string name="done" msgid="381184316122520313">"হয়ে গেছে"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"অ্যালার্ম এবং রিমাইন্ডার"</string>
@@ -547,10 +547,13 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"এখনই"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"এই ফোন"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"এই ট্যাবলেট"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"ডক স্পিকার"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"এক্সটার্নাল ডিভাইস"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"কানেক্ট থাকা ডিভাইস"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"এই ফোনটি"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"এই ডিভাইসে চালানো যাবে না"</string>
-    <string name="media_output_status_require_premium" msgid="8411255800047014822">"পরিবর্তন করতে অ্যাকাউন্ট আপগ্রেড করুন"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"এখানে ডাউনলোড করা যাবে না"</string>
+    <string name="media_output_status_require_premium" msgid="8411255800047014822">"পাল্টাতে অ্যাকাউন্ট আপগ্রেড করুন"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"এতে ডাউনলোড করা কন্টেন্ট প্লে করা যাবে না"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"বিজ্ঞাপনের পরে আবার চেষ্টা করুন"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"এখানে চালানোর জন্য ডিভাইসকে জাগান"</string>
     <string name="media_output_status_unauthorized" msgid="5880222828273853838">"চালানোর জন্য ডিভাইসের অনুমতি নেই"</string>
@@ -576,15 +579,12 @@
     <string name="user_add_profile_item_summary" msgid="5418602404308968028">"আপনি আপনার অ্যাকাউন্ট থেকে অ্যাপ্লিকেশন এবং কন্টেন্ট অ্যাক্সেস সীমাবদ্ধ করতে পারেন"</string>
     <string name="user_add_user_item_title" msgid="2394272381086965029">"ব্যবহারকারী"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"সীমাবদ্ধ প্রোফাইল"</string>
-    <string name="user_add_user_title" msgid="5457079143694924885">"নতুন ব্যবহারকারী জুড়বেন?"</string>
+    <string name="user_add_user_title" msgid="5457079143694924885">"নতুন ব্যবহারকারী যোগ করবেন?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"আপনি একাধিক ব্যবহারকারীর আইডি তৈরি করে অন্যদের সাথে এই ডিভাইসটি শেয়ার করতে পারেন। ডিভাইসের স্টোরেজে প্রত্যেক ব্যবহারকারী তার নিজস্ব জায়গা পাবেন যা তিনি অ্যাপ, ওয়ালপেপার এবং আরও অনেক কিছু দিয়ে কাস্টমাইজ করতে পারেন। ওয়াই-ফাই এর মতো ডিভাইস সেটিংস, যেগুলি সকলের ক্ষেত্রে প্রযোজ্য হয়, সেগুলি ব্যবহারকারীরা পরিবর্তন করতে পারবেন।\n\nনতুন ব্যবহারকারীর আইডি যোগ করলে সেই ব্যক্তিকে স্টোরেজে তার নিজের জায়গা সেট-আপ করতে হবে।\n\nঅন্যান্য ব্যবহারকারীদের হয়ে যে কোনও ব্যবহারকারী অ্যাপ আপডেট করতে পারবেন। তবে ব্যবহারযোগ্যতার সেটিংস এবং পরিষেবা নতুন ব্যবহারকারীর ক্ষেত্রে প্রযোজ্য নাও হতে পারে।"</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"আপনি একজন নতুন ব্যবহারকারী যোগ করলে তাকে তার জায়গা সেট-আপ করে নিতে হবে৷\n\nযেকোনও ব্যবহারকারী অন্য সব ব্যবহারকারীর জন্য অ্যাপ আপডেট করতে পারবেন৷"</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"এই ব্যবহারকারীকে অ্যাডমিন করবেন?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"অ্যাডমিনদের কাছে বিশেষ সুবিধা থাকে যা অন্যান্য ব্যবহারকারীর কাছে থাকে না। কোনও অ্যাডমিন সব ব্যবহারকারীদের ম্যানেজ, এই ডিভাইস আপডেট বা রিসেট, সেটিংস পরিবর্তন করতে, ইনস্টল করা সব অ্যাপ দেখতে এবং অন্যান্যদের জন্য অ্যাডমিনের বিশেষ সুবিধার অনুমোদন করতে বা তুলে নিতে পারবেন।"</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"নতুন অ্যাডমিন বেছে নিন"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"এখন ব্যবহারকারী সেট-আপ করবেন?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"নিশ্চিত করুন, যে ব্যক্তিটি ডিভাইসটি নেওয়ার জন্য এবং তার জায়গা সেট-আপ করার জন্য উপলব্ধ আছেন"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"এখনই প্রোফাইল সেট-আপ করবেন?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"এটি নতুন অতিথি সেশন চালু করবে এবং বর্তমান সেশন থেকে সব অ্যাপ ও ডেটা মুছে দেবে"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"\'অতিথি মোড\' ছেড়ে বেরিয়ে আসবেন?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"এটি বর্তমান অতিথি সেশন থেকে অ্যাপ ও ডেটা মুছে দেবে"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"হ্যাঁ, তাদের অ্যাডমিন করুন"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"না, তাদের অ্যাডমিন করবেন না"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"বেরিয়ে আসুন"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"অতিথি মোডের অ্যাক্টিভিটি সেভ করবেন?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"আপনি বর্তমান সেশন থেকে অ্যাক্টিভিটি সেভ করতে বা সব অ্যাপ ও ডেটা মুছতে পারবেন"</string>
@@ -627,7 +625,7 @@
     <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_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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"উপরে সরান"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"নির্দিষ্টভাবে উল্লেখ করা নেই"</string>
+    <string name="neuter" msgid="2075249330106127310">"ক্লীব"</string>
+    <string name="feminine" msgid="1529155595310784757">"স্ত্রী"</string>
+    <string name="masculine" msgid="4653978041013996303">"পুং"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-bs/arrays.xml b/packages/SettingsLib/res/values-bs/arrays.xml
index 77d9a20..f6ee587 100644
--- a/packages/SettingsLib/res/values-bs/arrays.xml
+++ b/packages/SettingsLib/res/values-bs/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (sigurno)"</item>
     <item msgid="7322156123728520872">"4K (povećava rezoluciju)"</item>
     <item msgid="7735692090314849188">"4K (povećava rezoluciju, osiguran)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (dupli ekran)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"Ništa"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Izvor zvuka"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index a2b41c5..ec84dc6 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Pristup SIM-u"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD audio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Slušni aparati"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE zvuk"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Povezan na slušne aparate"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Slušni aparati"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Povezano je sa slušnim aparatima"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Povezano s LE zvukom"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Povezano sa zvukom medija"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Povezano na zvuk telefona"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Koristi za zvuk telefona"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Koristi za prijenos fajlova"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Koristi kao ulaz"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Korištenje za slušne aparate"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Korištenje za slušne aparate"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Koristi za: LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Upari"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"UPARI"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Odaberite profil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Lično"</string>
     <string name="category_work" msgid="4014193632325996115">"Posao"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klonirajte"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opcije za programere"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Omogući opcije za programere"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Postavi opcije za razvoj aplikacija"</string>
@@ -224,7 +225,7 @@
     <string name="apn_settings_not_available" msgid="1147111671403342300">"Postavke za ime pristupne tačke nisu dostupne za ovog korisnika"</string>
     <string name="enable_adb" msgid="8072776357237289039">"Otklanjanje grešaka putem USB-a"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Način rada za otklanjanje grešaka kada je povezan USB"</string>
-    <string name="clear_adb_keys" msgid="3010148733140369917">"Ukinite odobrenja otklanjanja grešaka putem USB-a"</string>
+    <string name="clear_adb_keys" msgid="3010148733140369917">"Ukidanje odobrenja otklanjanja grešaka putem USB-a"</string>
     <string name="enable_adb_wireless" msgid="6973226350963971018">"Bežično otklanjanje grešaka"</string>
     <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Način rada za otklanjanje grešaka kada je povezan WiFi"</string>
     <string name="adb_wireless_error" msgid="721958772149779856">"Greška"</string>
@@ -270,7 +271,7 @@
     <string name="wifi_display_certification" msgid="1805579519992520381">"Certifikacija bežičnog prikaza"</string>
     <string name="wifi_verbose_logging" msgid="1785910450009679371">"Omogući detaljni zapisnik za WiFi"</string>
     <string name="wifi_scan_throttling" msgid="2985624788509913617">"Usporavanje skeniranja WiFi-ja"</string>
-    <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Nasumičan odabir MAC adrese prema WiFi mreži s prekidima"</string>
+    <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Nasumični odabir MAC adrese prema WiFi mreži s prekidima"</string>
     <string name="mobile_data_always_on" msgid="8275958101875563572">"Prijenos podataka na mobilnoj mreži uvijek aktivan"</string>
     <string name="tethering_hardware_offload" msgid="4116053719006939161">"Hardversko ubrzavanje dijeljenja internetske veze"</string>
     <string name="bluetooth_show_devices_without_names" msgid="923584526471885819">"Prikaži Bluetooth uređaje bez naziva"</string>
@@ -337,7 +338,7 @@
     <string name="hdcp_checking_dialog_title" msgid="7691060297616217781">"Postavke HDCP provjere"</string>
     <string name="debug_debugging_category" msgid="535341063709248842">"Otklanjanje grešaka"</string>
     <string name="debug_app" msgid="8903350241392391766">"Odabir aplikacije za otklanjanje grešaka"</string>
-    <string name="debug_app_not_set" msgid="1934083001283807188">"Nema postavljenih aplikac. za otklanjanje grešaka"</string>
+    <string name="debug_app_not_set" msgid="1934083001283807188">"Nema postavljenih aplikacija za otklanjanje grešaka"</string>
     <string name="debug_app_set" msgid="6599535090477753651">"Aplikacija za otklanjanje grešaka: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="select_application" msgid="2543228890535466325">"Odaberite aplikaciju"</string>
     <string name="no_application" msgid="9038334538870247690">"Ništa"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Preklapanje ekrana s trenutnim podacima o dodiru"</string>
     <string name="show_touches" msgid="8437666942161289025">"Prikaži dodire"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Prikaz vizuelnih povratnih informacija za dodire"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Prikaži pritiskanja tipki"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Prikaži vizuelne povr. inform. za pritiske tipki"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Prikaži ažuriranja za površinu"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Osvjetljava sve površine prozora kada se ažuriraju"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Prikaži ažuriranja prikaza"</string>
@@ -366,7 +369,7 @@
     <string name="simulate_color_space" msgid="1206503300335835151">"Simuliraj prostor boje"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"Omogući OpenGL zapise"</string>
     <string name="usb_audio_disable_routing" msgid="3367656923544254975">"Onemogući USB preusmjer. zvuka"</string>
-    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Onemoguć. autom. preusmj. na USB audio perif. uređ."</string>
+    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Onemogućava automatsko preusmjeravanje na USB audio periferne uređaje"</string>
     <string name="debug_layout" msgid="1659216803043339741">"Prikaži granice rasporeda"</string>
     <string name="debug_layout_summary" msgid="8825829038287321978">"Prikaz granica isječka, margina itd."</string>
     <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Prisilno postavi raspored s desna ulijevo"</string>
@@ -379,13 +382,13 @@
     <string name="show_non_rect_clip" msgid="7499758654867881817">"Otkl. greške na operac. nepravoug. isjecanja"</string>
     <string name="track_frame_time" msgid="522674651937771106">"Profil HWUI iscrtavanja"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Omogući slojeve za otklanjanje grešaka na GPU-u"</string>
-    <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Omoguć. učit. sloj. za otkl. greš. na GPU-u za apl. za otkl. greš."</string>
+    <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Omogućite slojeve za otkl. grešaka na GPU-u za apl. za otkl. grešaka"</string>
     <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Omogući opširni zapisnik"</string>
     <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"U izvještaje o greškama uključite dodatne zapisnike dobavljača specifične za uređaj, koji mogu sadržavati lične informacije, povećati potrošnju baterije i/ili koristiti više prostora za pohranu."</string>
     <string name="window_animation_scale_title" msgid="5236381298376812508">"Skala animacije prozora"</string>
     <string name="transition_animation_scale_title" msgid="1278477690695439337">"Skala animacije prijelaza"</string>
     <string name="animator_duration_scale_title" msgid="7082913931326085176">"Skala trajanja animatora"</string>
-    <string name="overlay_display_devices_title" msgid="5411894622334469607">"Simuliraj sekundarne ekrane"</string>
+    <string name="overlay_display_devices_title" msgid="5411894622334469607">"Simulacija sekundarnih ekrana"</string>
     <string name="debug_applications_category" msgid="5394089406638954196">"Aplikacije"</string>
     <string name="immediately_destroy_activities" msgid="1826287490705167403">"Ne čuvaj aktivnosti"</string>
     <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"Obustavlja se svaka aktivnost čim je korisnik napusti"</string>
@@ -397,7 +400,7 @@
     <string name="force_allow_on_external" msgid="9187902444231637880">"Nametni aplikacije na vanjskoj pohrani"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Omogućava upisivanje svih aplikacija u vanjsku pohranu, bez obzira na prikazane vrijednosti"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"Nametni aktivnostima mijenjanje veličina"</string>
-    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"Omogućava mijenjanje veličine svih aktivnosti za prikaz s više prozora, bez obzira na prikazane vrijednosti."</string>
+    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"Omogućava mijenjanje veličine svih aktivnosti za prikaz s više prozora, bez obzira na prikazane vrijednosti"</string>
     <string name="enable_freeform_support" msgid="7599125687603914253">"Omogući prozore nepravilnih oblika"</string>
     <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Omogućava podršku za eksperimentalne prozore nepravilnih oblika."</string>
     <string name="desktop_mode" msgid="2389067840550544462">"Način rada radne površine"</string>
@@ -544,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Upravo"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Ovaj telefon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Ovaj tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Zvučnik priključne stanice"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Vanjski uređaj"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Povezani uređaj"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Ovaj telefon"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Nije moguće reproducirati na uređaju"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Nadogradite račun da promijenite"</string>
@@ -597,8 +603,8 @@
     <string name="add_user_failed" msgid="4809887794313944872">"Kreiranje novog korisnika nije uspjelo"</string>
     <string name="add_guest_failed" msgid="8074548434469843443">"Kreiranje novog gosta nije uspjelo"</string>
     <string name="user_nickname" msgid="262624187455825083">"Nadimak"</string>
-    <string name="user_add_user" msgid="7876449291500212468">"Dodajte korisnika"</string>
-    <string name="guest_new_guest" msgid="3482026122932643557">"Dodajte gosta"</string>
+    <string name="user_add_user" msgid="7876449291500212468">"Dodavanje korisnika"</string>
+    <string name="guest_new_guest" msgid="3482026122932643557">"Dodavanje gosta"</string>
     <string name="guest_exit_guest" msgid="5908239569510734136">"Ukloni gosta"</string>
     <string name="guest_reset_guest" msgid="6110013010356013758">"Poništi sesiju gosta"</string>
     <string name="guest_reset_guest_dialog_title" msgid="8047270010895437534">"Poništiti sesiju gosta?"</string>
@@ -677,7 +683,7 @@
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"Emitiraj aplikaciju <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"Promijeni izlaz"</string>
     <string name="back_navigation_animation" msgid="8105467568421689484">"Animacije predvidljivog pokreta unazad"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Omogućite animacije sistema za predvidljivi pokret unazad."</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Omogućava animacije sistema za predvidljivi pokret unazad."</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"Ova postavka omogućava animacije sistema za animaciju predvidljivih pokreta. Potrebno je po aplikaciji postaviti vrijednost za enableOnBackInvokedCallback na tačno u fajlu deklaracije."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"Pomjeranje ulijevo"</item>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"Pomjeranje nagore"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Nije navedeno"</string>
+    <string name="neuter" msgid="2075249330106127310">"Srednji rod"</string>
+    <string name="feminine" msgid="1529155595310784757">"Ženski rod"</string>
+    <string name="masculine" msgid="4653978041013996303">"Muški rod"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ca/arrays.xml b/packages/SettingsLib/res/values-ca/arrays.xml
index f50f9b2..133ad13 100644
--- a/packages/SettingsLib/res/values-ca/arrays.xml
+++ b/packages/SettingsLib/res/values-ca/arrays.xml
@@ -188,7 +188,7 @@
     <item msgid="409235464399258501">"No"</item>
     <item msgid="4195153527464162486">"64 K / memòria intermèdia del registre"</item>
     <item msgid="7464037639415220106">"256 K / memòria intermèdia del registre"</item>
-    <item msgid="8539423820514360724">"1 M / memòria intermèdia reg."</item>
+    <item msgid="8539423820514360724">"1 M / memòria intermèdia del registre"</item>
     <item msgid="1984761927103140651">"4 M / memòria intermèdia del registre"</item>
     <item msgid="2983219471251787208">"8 M / memòria intermèdia del registre"</item>
   </string-array>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Font d\'àudio"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index f8f742b..2901385 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Accés a la SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Àudio HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Àudio HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Audiòfons"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"S\'ha connectat als audiòfons"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Audiòfons"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"S\'ha connectat als audiòfons"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Connectat a LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Connectat a l\'àudio del mitjà"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Connectat a àudio del telèfon"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Utilitza-ho per a l\'àudio del telèfon"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Utilitza per a la transferència de fitxers"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Utilitza per a entrada"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Utilitza per als audiòfons"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Utilitza per als audiòfons"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Utilitza per a LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Vincula"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"VINCULA"</string>
@@ -182,7 +182,7 @@
     <string name="tts_default_lang_title" msgid="4698933575028098940">"Idioma"</string>
     <string name="tts_lang_use_system" msgid="6312945299804012406">"Utilitza l\'idioma del sistema"</string>
     <string name="tts_lang_not_selected" msgid="7927823081096056147">"No has seleccionat cap idioma"</string>
-    <string name="tts_default_lang_summary" msgid="9042620014800063470">"Defineix la llengua utilitzada per a la síntesi de veu"</string>
+    <string name="tts_default_lang_summary" msgid="9042620014800063470">"Defineix la llengua utilitzada per al text enunciat"</string>
     <string name="tts_play_example_title" msgid="1599468547216481684">"Vull escoltar un exemple"</string>
     <string name="tts_play_example_summary" msgid="634044730710636383">"Reprodueix una breu demostració de síntesi de veu"</string>
     <string name="tts_install_data_title" msgid="1829942496472751703">"Instal·la dades de veu"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Tria un perfil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Personal"</string>
     <string name="category_work" msgid="4014193632325996115">"Treball"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clona"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opcions per a desenvolupadors"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Activa les opcions per a desenvolupadors"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Defineix les opcions per al desenvolupament d\'aplicacions"</string>
@@ -253,11 +254,11 @@
     <string name="adb_wireless_qrcode_pairing_description" msgid="6014121407143607851">"Vincula el dispositiu per Wi‑Fi escanejant un codi QR"</string>
     <string name="adb_wireless_no_network_msg" msgid="2365795244718494658">"Connecta\'t a una xarxa Wi‑Fi"</string>
     <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, depurar, desenvolupador"</string>
-    <string name="bugreport_in_power" msgid="8664089072534638709">"Drecera per a informe d\'errors"</string>
+    <string name="bugreport_in_power" msgid="8664089072534638709">"Drecera de l\'informe d\'errors"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostra un botó al menú d\'engegada per crear un informe d\'errors"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Pantalla activa"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"La pantalla no entra mai en mode de repòs si el dispositiu s\'està carregant"</string>
-    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Activa registre de Bluetooth HCI"</string>
+    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Activa el registre de Bluetooth HCI"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Captura els paquets de Bluetooth. Activa el Bluetooth un cop hagis canviat aquesta opció."</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"Desbloqueig d\'OEM"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"Permet desbloquejar el bootloader"</string>
@@ -268,7 +269,7 @@
     <string name="mock_location_app_set" msgid="4706722469342913843">"Aplicació d\'ubicació simulada: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="6829757985772659599">"Xarxes"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"Certificació de pantalla sense fil"</string>
-    <string name="wifi_verbose_logging" msgid="1785910450009679371">"Activa el registre Wi‑Fi detallat"</string>
+    <string name="wifi_verbose_logging" msgid="1785910450009679371">"Activa el registre detallat de Wi‑Fi"</string>
     <string name="wifi_scan_throttling" msgid="2985624788509913617">"Limitació de la cerca de xarxes Wi‑Fi"</string>
     <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Aleatorització de MAC no persistent per a connexions Wi‑Fi"</string>
     <string name="mobile_data_always_on" msgid="8275958101875563572">"Dades mòbils sempre actives"</string>
@@ -280,17 +281,17 @@
     <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7846922290083709633">"Selecciona la versió AVRCP de Bluetooth"</string>
     <string name="bluetooth_select_map_version_string" msgid="526308145174175327">"Versió MAP de Bluetooth"</string>
     <string name="bluetooth_select_map_version_dialog_title" msgid="7085934373987428460">"Selecciona la versió MAP de Bluetooth"</string>
-    <string name="bluetooth_select_a2dp_codec_type" msgid="952001408455456494">"Còdec d\'àudio per Bluetooth"</string>
+    <string name="bluetooth_select_a2dp_codec_type" msgid="952001408455456494">"Còdec d\'àudio de Bluetooth"</string>
     <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="7510542404227225545">"Activa el còdec d\'àudio per Bluetooth\nSelecció"</string>
-    <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="1638623076480928191">"Freqüència de mostratge d’àudio per Bluetooth"</string>
+    <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="1638623076480928191">"Freqüència de mostratge d’àudio de Bluetooth"</string>
     <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="5876305103137067798">"Activa el còdec d\'àudio per Bluetooth\nSelecció: freqüència de mostratge"</string>
     <string name="bluetooth_select_a2dp_codec_type_help_info" msgid="8647200416514412338">"Si una opció està ombrejada, vol dir que el telèfon o els auriculars no l\'admeten"</string>
-    <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="6253965294594390806">"Bits per mostra de l\'àudio per Bluetooth"</string>
+    <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="6253965294594390806">"Bits per mostra de l\'àudio de Bluetooth"</string>
     <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="4898693684282596143">"Activa el còdec d\'àudio per Bluetooth\nSelecció: bits per mostra"</string>
-    <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="364277285688014427">"Mode de canal de l\'àudio per Bluetooth"</string>
+    <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="364277285688014427">"Mode de canal de l\'àudio de Bluetooth"</string>
     <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="2076949781460359589">"Activa el còdec d\'àudio per Bluetooth\nSelecció: mode de canal"</string>
-    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3233402355917446304">"Còdec LDAC d\'àudio per Bluetooth: qualitat de reproducció"</string>
-    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="7274396574659784285">"Activa l\'LDAC d\'àudio per Bluetooth\nSelecció de còdec: qualitat de reproducció"</string>
+    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3233402355917446304">"Còdec LDAC d\'àudio de Bluetooth: qualitat de reproducció"</string>
+    <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="7274396574659784285">"Activa l\'LDAC d\'àudio de Bluetooth\nSelecció de còdec: qualitat de reproducció"</string>
     <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="2040810756832027227">"Reproducció en continu: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
     <string name="select_private_dns_configuration_title" msgid="7887550926056143018">"DNS privat"</string>
     <string name="select_private_dns_configuration_dialog_title" msgid="3731422918335951912">"Selecciona el mode de DNS privat"</string>
@@ -305,7 +306,7 @@
     <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"Quan aquest mode està activat, és possible que l’adreça MAC d\'aquest dispositiu canviï cada vegada que es connecti a una xarxa amb l\'aleatorització d\'adreces MAC activada"</string>
     <string name="wifi_metered_label" msgid="8737187690304098638">"D\'ús mesurat"</string>
     <string name="wifi_unmetered_label" msgid="6174142840934095093">"D\'ús no mesurat"</string>
-    <string name="select_logd_size_title" msgid="1604578195914595173">"Mides de la mem. intermèdia del registrador"</string>
+    <string name="select_logd_size_title" msgid="1604578195914595173">"Mides de la memòria intermèdia del registrador"</string>
     <string name="select_logd_size_dialog_title" msgid="2105401994681013578">"Selecciona la mida de la memòria intermèdia del registre"</string>
     <string name="dev_logpersist_clear_warning_title" msgid="8631859265777337991">"Vols esborrar l\'emmagatzematge persistent del registrador?"</string>
     <string name="dev_logpersist_clear_warning_message" msgid="6447590867594287413">"Quan deixem de supervisar amb el registrador persistent, hem d\'esborrar les dades del registrador que hi ha al teu dispositiu."</string>
@@ -343,17 +344,19 @@
     <string name="no_application" msgid="9038334538870247690">"Cap"</string>
     <string name="wait_for_debugger" msgid="7461199843335409809">"Espera el depurador"</string>
     <string name="wait_for_debugger_summary" msgid="6846330006113363286">"L\'aplicació depurada espera que es connecti el depurador abans d\'executar-se"</string>
-    <string name="debug_input_category" msgid="7349460906970849771">"Introducció de text"</string>
+    <string name="debug_input_category" msgid="7349460906970849771">"Entrada"</string>
     <string name="debug_drawing_category" msgid="5066171112313666619">"Dibuix"</string>
     <string name="debug_hw_drawing_category" msgid="5830815169336975162">"Renderització accelerada per maquinari"</string>
     <string name="media_category" msgid="8122076702526144053">"Multimèdia"</string>
     <string name="debug_monitoring_category" msgid="1597387133765424994">"Supervisió"</string>
     <string name="strict_mode" msgid="889864762140862437">"Mode estricte activat"</string>
-    <string name="strict_mode_summary" msgid="1838248687233554654">"Il·lumina si les aplicacions tarden molt al procés principal"</string>
+    <string name="strict_mode_summary" msgid="1838248687233554654">"Il·lumina la pantalla quan les aplicacions facin operacions llargues al fil principal"</string>
     <string name="pointer_location" msgid="7516929526199520173">"Ubicació del punter"</string>
     <string name="pointer_location_summary" msgid="957120116989798464">"Superposa les dades dels tocs a la pantalla"</string>
     <string name="show_touches" msgid="8437666942161289025">"Mostra els tocs"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Mostra la ubicació visual dels tocs"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Mostra les tecles premudes"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Mostra avisos visuals en prémer tecles físiques"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Canvis de superfície"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Il·lumina superfícies de finestres en actualitzar-se"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Actualitzacions de visualitzacions"</string>
@@ -369,22 +372,22 @@
     <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Desactiva l\'encaminament automàtic a perifèrics d\'àudio USB"</string>
     <string name="debug_layout" msgid="1659216803043339741">"Mostra límits de disposició"</string>
     <string name="debug_layout_summary" msgid="8825829038287321978">"Mostra els límits de clips, els marges, etc."</string>
-    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Força direcció dreta-esquerra"</string>
-    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Força direcció de pantalla dreta-esquerra en totes les llengües"</string>
+    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Força la direcció dreta-esquerra"</string>
+    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Força la direcció dreta-esquerra de la pantalla en totes les llengües"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"Barra de navegació transparent"</string>
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"Fes que el color de fons de la barra de navegació sigui transparent de manera predeterminada"</string>
-    <string name="window_blurs" msgid="6831008984828425106">"Permet desenfoc. finestra"</string>
+    <string name="window_blurs" msgid="6831008984828425106">"Permet desenfocar al nivell de finestra"</string>
     <string name="force_msaa" msgid="4081288296137775550">"Força MSAA 4x"</string>
     <string name="force_msaa_summary" msgid="9070437493586769500">"Activa MSAA 4x en aplicacions d\'OpenGL ES 2.0"</string>
     <string name="show_non_rect_clip" msgid="7499758654867881817">"Depura operacions de retall no rectangulars"</string>
     <string name="track_frame_time" msgid="522674651937771106">"Renderització perfil HWUI"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Activa les capes de depuració de GPU"</string>
-    <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Permet capes de depuració de GPU en apps de depuració"</string>
-    <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Activa el registre detallat"</string>
+    <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Permet carregar capes de depuració de GPU en aplicacions de depuració"</string>
+    <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Activa el registre detallat del proveïdor"</string>
     <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Inclou altres registres de proveïdor específics del dispositiu als informes d’errors; és possible que continguin informació privada, consumeixin més bateria o utilitzin més espai d\'emmagatzematge"</string>
-    <string name="window_animation_scale_title" msgid="5236381298376812508">"Escala d\'animació finestra"</string>
-    <string name="transition_animation_scale_title" msgid="1278477690695439337">"Escala d\'animació transició"</string>
-    <string name="animator_duration_scale_title" msgid="7082913931326085176">"Escala de durada d\'animació"</string>
+    <string name="window_animation_scale_title" msgid="5236381298376812508">"Escala d\'animació de la finestra"</string>
+    <string name="transition_animation_scale_title" msgid="1278477690695439337">"Escala d\'animació de la transició"</string>
+    <string name="animator_duration_scale_title" msgid="7082913931326085176">"Escala de durada de l\'animació"</string>
     <string name="overlay_display_devices_title" msgid="5411894622334469607">"Simula pantalles secundàries"</string>
     <string name="debug_applications_category" msgid="5394089406638954196">"Aplicacions"</string>
     <string name="immediately_destroy_activities" msgid="1826287490705167403">"No desis les activitats"</string>
@@ -395,11 +398,11 @@
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Mostra avisos del canal de notificacions"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Mostra un avís en pantalla quan una aplicació publica una notificació sense un canal vàlid"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"Força permetre aplicacions de manera externa"</string>
-    <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Permet que qualsevol aplicació es pugui escriure en un dispositiu d’emmagatzematge extern, independentment dels valors definits"</string>
+    <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Permet que qualsevol aplicació es pugui escriure en un dispositiu d’emmagatzematge extern, independentment dels valors del manifest"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"Força l\'ajust de la mida de les activitats"</string>
-    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"Permet ajustar la mida de totes les activitats per al mode multifinestra, independentment dels valors definits"</string>
-    <string name="enable_freeform_support" msgid="7599125687603914253">"Activa les finestres de forma lliure"</string>
-    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Activa la compatibilitat amb finestres de forma lliure experimentals"</string>
+    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"Permet ajustar la mida de totes les activitats per al mode multifinestra, independentment dels valors del manifest"</string>
+    <string name="enable_freeform_support" msgid="7599125687603914253">"Activa les finestres amb format lliure"</string>
+    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Activa la compatibilitat amb finestres experimentals amb format lliure"</string>
     <string name="desktop_mode" msgid="2389067840550544462">"Mode d\'escriptori"</string>
     <string name="local_backup_password_title" msgid="4631017948933578709">"Contrasenya per a còpies d\'ordinador"</string>
     <string name="local_backup_password_summary_none" msgid="7646898032616361714">"Les còpies de seguretat completes d\'ordinador no estan protegides"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Més temps"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menys temps"</string>
     <string name="cancel" msgid="5665114069455378395">"Cancel·la"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Següent"</string>
+    <string name="back" msgid="5554327870352703710">"Enrere"</string>
+    <string name="save" msgid="3745809743277153149">"Desa"</string>
     <string name="okay" msgid="949938843324579502">"D\'acord"</string>
     <string name="done" msgid="381184316122520313">"Fet"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmes i recordatoris"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Ara mateix"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Aquest telèfon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Aquesta tauleta"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Base d\'altaveu"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Dispositiu extern"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Dispositiu connectat"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Aquest telèfon"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"No es pot reproduir en aquest dispositiu"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Actualitza el compte per canviar"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Vols afegir un usuari nou?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Pots compartir aquest dispositiu amb altres persones creant usuaris addicionals. Cada usuari té el seu propi espai, que pot personalitzar amb aplicacions i fons de pantalla, entre d\'altres. Els usuaris també poden ajustar opcions de configuració del dispositiu, com ara la Wi-Fi, que afecten els altres usuaris.\n\nQuan afegeixis un usuari nou, haurà de configurar el seu espai.\n\nTots els usuaris poden actualitzar les aplicacions de la resta. És possible que la configuració i els serveis d\'accessibilitat no es transfereixin a l\'usuari nou."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Quan s\'afegeix un usuari nou, aquesta persona ha de configurar el seu espai.\n\nQualsevol usuari pot actualitzar les aplicacions dels altres usuaris."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Vols convertir aquest usuari en administrador?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Els administradors tenen privilegis especials que altres usuaris no tenen. Un administrador pot gestionar tots els usuaris, actualitzar o restablir aquest dispositiu, modificar la configuració, veure totes les aplicacions instal·lades i concedir o revocar privilegis d\'administrador a altres usuaris."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Converteix en administrador"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Vols configurar l\'usuari ara?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Assegura\'t que la persona estigui disponible per accedir al dispositiu i configurar el seu espai."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Vols configurar el perfil ara?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Sí, converteix-lo en administrador"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"No, no el converteixis en administrador"</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>
@@ -627,7 +625,7 @@
     <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_exit_quick_settings_button" msgid="1912362095913765471">"Tanca com a 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>
@@ -685,7 +683,7 @@
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"Emet <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"Canvia la sortida"</string>
     <string name="back_navigation_animation" msgid="8105467568421689484">"Animacions de retrocés predictiu"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Activa animacions del sistema de retrocés predictiu."</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Activa animacions del sistema de retrocés predictiu"</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"Aquesta configuració activa animacions del sistema per a accions gestuals predictives. Requereix definir enableOnBackInvokedCallback com a \"true\" en cada aplicació al fitxer de manifest."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"Mou cap a l\'esquerra"</item>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Mou cap amunt"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"No s\'ha especificat"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutre"</string>
+    <string name="feminine" msgid="1529155595310784757">"Femení"</string>
+    <string name="masculine" msgid="4653978041013996303">"Masculí"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-cs/arrays.xml b/packages/SettingsLib/res/values-cs/arrays.xml
index 034a133..20405ed6 100644
--- a/packages/SettingsLib/res/values-cs/arrays.xml
+++ b/packages/SettingsLib/res/values-cs/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (zabezpečeno)"</item>
     <item msgid="7322156123728520872">"4K (přepočteno)"</item>
     <item msgid="7735692090314849188">"4K (přepočteno, zabezpečeno)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (duální obrazovka)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (funkce Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"Žádné"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Zdroj zvuku"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index 9813ffc..b52e7b7 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -59,8 +59,8 @@
     <string name="wifi_check_password_try_again" msgid="8817789642851605628">"Zkontrolujte heslo a zkuste to znovu"</string>
     <string name="wifi_not_in_range" msgid="1541760821805777772">"Mimo dosah"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Připojení nebude automaticky navázáno"</string>
-    <string name="wifi_no_internet" msgid="1774198889176926299">"Nebyl zjištěn žádný přístup k internetu"</string>
-    <string name="saved_network" msgid="7143698034077223645">"Uloženo uživatelem <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_no_internet" msgid="1774198889176926299">"Není připojení k internetu"</string>
+    <string name="saved_network" msgid="7143698034077223645">"Uložil(a): <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_network_scorer" msgid="7665725527352893558">"Automaticky připojeno přes poskytovatele %1$s"</string>
     <string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Automaticky připojeno přes poskytovatele hodnocení sítí"</string>
     <string name="connected_via_app" msgid="3532267661404276584">"Připojeno přes <xliff:g id="NAME">%1$s</xliff:g>"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Přístup k SIM kartě"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD zvuk: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD zvuk"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Naslouchátka"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Připojeno k naslouchátkům"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Naslouchátka"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Připojeno k naslouchátkům"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Připojeno k LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Připojeno ke zvukovému médiu"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Připojeno k náhlavní soupravě"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Umožňuje připojení náhlavní soupravy"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Použít pro přenos souborů"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Použít pro vstup"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Použít pro naslouchátka"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Použít pro naslouchátka"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Používat pro LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Spárovat"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"SPÁROVAT"</string>
@@ -180,7 +180,7 @@
     <string name="tts_default_pitch_title" msgid="6988592215554485479">"Výška"</string>
     <string name="tts_default_pitch_summary" msgid="9132719475281551884">"Určuje tón syntetizované řeči"</string>
     <string name="tts_default_lang_title" msgid="4698933575028098940">"Jazyk"</string>
-    <string name="tts_lang_use_system" msgid="6312945299804012406">"Použít jazyk systému"</string>
+    <string name="tts_lang_use_system" msgid="6312945299804012406">"Používat jazyk systému"</string>
     <string name="tts_lang_not_selected" msgid="7927823081096056147">"Nebyl vybrán jazyk"</string>
     <string name="tts_default_lang_summary" msgid="9042620014800063470">"Nastavení jazyka hlasu pro mluvený text"</string>
     <string name="tts_play_example_title" msgid="1599468547216481684">"Poslechnout příklad"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Vyberte profil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Osobní"</string>
     <string name="category_work" msgid="4014193632325996115">"Pracovní"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klon"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Pro vývojáře"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Aktivovat možnosti pro vývojáře"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Umožňuje nastavit možnosti pro vývoj aplikací"</string>
@@ -299,7 +300,7 @@
     <string name="private_dns_mode_provider" msgid="3619040641762557028">"Název hostitele poskytovatele soukromého DNS"</string>
     <string name="private_dns_mode_provider_hostname_hint" msgid="6564868953748514595">"Zadejte hostitele poskytovatele DNS"</string>
     <string name="private_dns_mode_provider_failure" msgid="8356259467861515108">"Nelze se připojit"</string>
-    <string name="wifi_display_certification_summary" msgid="8111151348106907513">"Zobrazit možnosti certifikace bezdrátového displeje"</string>
+    <string name="wifi_display_certification_summary" msgid="8111151348106907513">"Zobrazovat možnosti certifikace bezdrátového displeje"</string>
     <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Zvýšit úroveň protokolování Wi‑Fi, při výběru Wi‑Fi zobrazovat RSSI pro každý SSID"</string>
     <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"Snižuje vyčerpávání baterie a vylepšuje výkon sítě"</string>
     <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"Když je tento režim aktivován, adresa MAC tohoto zařízení se může změnit pokaždé, když se zařízení připojí k síti s aktivovanou randomizací adres MAC."</string>
@@ -336,7 +337,7 @@
     <string name="hdcp_checking_title" msgid="3155692785074095986">"Kontrola HDCP"</string>
     <string name="hdcp_checking_dialog_title" msgid="7691060297616217781">"Nastavit chování kontroly HDCP"</string>
     <string name="debug_debugging_category" msgid="535341063709248842">"Ladění"</string>
-    <string name="debug_app" msgid="8903350241392391766">"Vybrat aplikaci pro ladění"</string>
+    <string name="debug_app" msgid="8903350241392391766">"Výběr aplikace pro ladění"</string>
     <string name="debug_app_not_set" msgid="1934083001283807188">"Není nastavena žádná aplikace pro ladění"</string>
     <string name="debug_app_set" msgid="6599535090477753651">"Aplikace pro ladění: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="select_application" msgid="2543228890535466325">"Výběr aplikace"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Překryvná vrstva zobrazuje aktuální data o dotycích"</string>
     <string name="show_touches" msgid="8437666942161289025">"Zobrazovat klepnutí"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Zobrazovat vizuální zpětnou vazbu pro klepnutí"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Zobrazit stisknutí klávesy"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Zobrazit vizuální odezvu při stisknutí fyzické klávesy"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Zobrazit obnovení obsahu"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Rozbliká obsah okna při aktualizaci"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Ukazovat aktualizace zobrazení"</string>
@@ -365,7 +368,7 @@
     <string name="disable_overlays_summary" msgid="1954852414363338166">"Vždy použít GPU ke skládání obrazovky"</string>
     <string name="simulate_color_space" msgid="1206503300335835151">"Simulace barevného prostoru"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"Povolit trasování OpenGL"</string>
-    <string name="usb_audio_disable_routing" msgid="3367656923544254975">"Směrování zvuku do USB"</string>
+    <string name="usb_audio_disable_routing" msgid="3367656923544254975">"Zakázat směrování zvuku do USB"</string>
     <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Vypnout automatické směrování zvuku do zvukových periferií USB"</string>
     <string name="debug_layout" msgid="1659216803043339741">"Zobrazit ohraničení"</string>
     <string name="debug_layout_summary" msgid="8825829038287321978">"U výstřižku zobrazit ohraničení, okraje atd."</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Delší doba"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kratší doba"</string>
     <string name="cancel" msgid="5665114069455378395">"Zrušit"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Další"</string>
+    <string name="back" msgid="5554327870352703710">"Zpět"</string>
+    <string name="save" msgid="3745809743277153149">"Uložit"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Hotovo"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Budíky a připomenutí"</string>
@@ -547,13 +547,16 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Právě teď"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Tento telefon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Tento tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dok s reproduktorem"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Externí zařízení"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Připojené zařízení"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Tento telefon"</string>
-    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Na tomto zařízení média přehrávat nelze"</string>
-    <string name="media_output_status_require_premium" msgid="8411255800047014822">"Pokud chcete přejít, upgradujte účet"</string>
+    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"V zařízení nelze přehrávat"</string>
+    <string name="media_output_status_require_premium" msgid="8411255800047014822">"Účet je třeba upgradovat"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Stažený obsah zde nelze přehrát"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Zkuste to znovu po reklamě"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Pokud zde chcete přehrávat média, probuďte zařízení"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Zařízení není schváleno k přehrávání"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Zařízení je třeba probudit"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Není schváleno k přehrávání"</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Tato média zde přehrát nelze"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problém s připojením. Vypněte zařízení a znovu jej zapněte"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Kabelové audiozařízení"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Přidat nového uživatele?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Vytvořením dalších uživatelů můžete toto zařízení sdílet s jinými lidmi. Každý uživatel má svůj prostor, který si může přizpůsobit instalací aplikací, přidáním tapety apod. Uživatelé také mohou upravit nastavení zařízení (např. Wi-Fi), která ovlivní všechny uživatele.\n\nKaždý nově přidaný uživatel si musí nastavit vlastní prostor.\n\nKaždý uživatel může aktualizovat aplikace všech ostatních uživatelů."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Když přidáte nového uživatele, musí si nastavit vlastní prostor.\n\nJakýkoli uživatel může aktualizovat aplikace všech ostatních uživatelů."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Nastavit uživatele jako administrátora?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Administrátoři mají zvláštní oprávnění, která ostatní uživatelé nemají. Administrátor může spravovat všechny uživatele, aktualizovat nebo resetovat toto zařízení, zobrazit všechny nainstalované aplikace a udělit nebo zrušit ostatním administrátorská práva."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Nastavit jako administrátora"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Nastavit uživatele?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Ujistěte se, že je uživatel k dispozici a může si v zařízení nastavit svůj prostor"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Nastavit profil?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Ano, nastavit jako administrátora"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Ne, nenastavovat jako administrátora"</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>
@@ -679,7 +677,7 @@
     <string name="keyboard_layout_default_label" msgid="1997292217218546957">"Výchozí"</string>
     <string name="turn_screen_on_title" msgid="3266937298097573424">"Zapínání obrazovky"</string>
     <string name="allow_turn_screen_on" msgid="6194845766392742639">"Povolit zapínání obrazovky"</string>
-    <string name="allow_turn_screen_on_description" msgid="43834403291575164">"Povolte aplikaci zapínat obrazovku. Pokud aplikace bude mít toto oprávnění, může kdykoli zapnout obrazovku bez explicitního intentu."</string>
+    <string name="allow_turn_screen_on_description" msgid="43834403291575164">"Povolte aplikaci zapínat obrazovku. Pokud aplikace bude mít toto oprávnění, může kdykoli zapnout obrazovku bez požadavku uživatele."</string>
     <string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"Zastavit vysílání v aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="268234802198852753">"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="5749813313369517812">"Vysílat v aplikaci <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Přesunout nahoru"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Neurčeno"</string>
+    <string name="neuter" msgid="2075249330106127310">"Střední rod"</string>
+    <string name="feminine" msgid="1529155595310784757">"Ženský rod"</string>
+    <string name="masculine" msgid="4653978041013996303">"Mužský rod"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-da/arrays.xml b/packages/SettingsLib/res/values-da/arrays.xml
index 9f3db17..9d783ec 100644
--- a/packages/SettingsLib/res/values-da/arrays.xml
+++ b/packages/SettingsLib/res/values-da/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (sikker)"</item>
     <item msgid="7322156123728520872">"4K (opskaleret)"</item>
     <item msgid="7735692090314849188">"4K (opskaleret, sikker)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (dobbelt skærm)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"Ingen"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Lydkilde"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index 33131c8..b96c28a 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -95,7 +95,7 @@
     <string name="bluetooth_connected_no_a2dp_battery_level" msgid="6499078454894324287">"Tilsluttet <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> (ingen medier) – batteriniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="8477440576953067242">"Tilsluttet <xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g> (ingen telefon eller medier) – batteriniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="bluetooth_active_battery_level" msgid="3450745316700494425">"Aktivt, <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri"</string>
-    <string name="bluetooth_active_battery_level_untethered" msgid="2706188607604205362">"Aktivt – venstre: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> batteri. Højre: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri"</string>
+    <string name="bluetooth_active_battery_level_untethered" msgid="2706188607604205362">"Aktivt, V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> batteri, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri"</string>
     <string name="bluetooth_battery_level" msgid="2893696778200201555">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri"</string>
     <string name="bluetooth_battery_level_untethered" msgid="4002282355111504349">"Venstre: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> batteri. Højre: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri"</string>
     <string name="bluetooth_active_no_battery_level" msgid="4155462233006205630">"Aktiv"</string>
@@ -114,10 +114,10 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Adgang til SIM-kort"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD-lyd: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD-lyd"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Høreapparater"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Forbundet til høreapparater"</string>
-    <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Forbundet med LE Audio"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Høreapparater"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE-lyd"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Forbundet til høreapparater"</string>
+    <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Forbundet med LE-lyd"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Forbundet til medielyd"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Forbundet til telefonlyd"</string>
     <string name="bluetooth_opp_profile_summary_connected" msgid="2393521801478157362">"Forbundet til filoverførselsserver"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Brug til telefonlyd"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Brug til filoverførsel"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Brug til input"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Brug til høreapparater"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Brug til høreapparater"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Brug med LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Par"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ACCEPTÉR PARRING"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Annuller"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Parring giver adgang til dine kontakter og din opkaldshistorik, når enhederne er forbundet."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Der kunne ikke parres med <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Parring med <xliff:g id="DEVICE_NAME">%1$s</xliff:g> mislykkedes på grund af en forkert pinkode eller adgangsnøgle."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Kunne ikke parre med <xliff:g id="DEVICE_NAME">%1$s</xliff:g> pga. forkert pinkode eller adgangsnøgle."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Der kan ikke kommunikeres med <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Parring afvist af <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Computer"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Vælg profil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Personlig"</string>
     <string name="category_work" msgid="4014193632325996115">"Arbejde"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klon"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Indstillinger for udviklere"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Aktivér indstillinger for udviklere"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Konfigurer valgmuligheder for appudvikling"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Skærmoverlejringen viser de aktuelle berøringsdata"</string>
     <string name="show_touches" msgid="8437666942161289025">"Vis tryk"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Vis visuel feedback ved tryk"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Vis tastetryk"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Vis visuel feedback ved fysiske tastetryk"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Vis overfladeopdateringer"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Fremhæv hele vinduesoverflader, når de opdateres"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Se visningsopdateringer"</string>
@@ -438,7 +441,7 @@
     <string name="daltonizer_mode_disabled" msgid="403424372812399228">"Deaktiveret"</string>
     <string name="daltonizer_mode_monochromacy" msgid="362060873835885014">"Monokromasi"</string>
     <string name="daltonizer_mode_deuteranomaly" msgid="3507284319584683963">"Deuteranopi (rød-grøn)"</string>
-    <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanopi (rød-grøn)"</string>
+    <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomali (rød-grøn)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanopi (blå-gul)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Farvekorrigering"</string>
     <string name="accessibility_display_daltonizer_preference_subtitle" msgid="1522101114585266455">"Farvekorrigering kan være en nyttig funktion, når du vil:&lt;br/&gt; &lt;ol&gt; &lt;li&gt;&amp;nbsp;Se farver mere nøjagtigt&lt;/li&gt; &lt;li&gt;&amp;nbsp;Fjerne farver, så du nemmere kan fokusere&lt;/li&gt; &lt;/ol&gt;"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mere tid."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mindre tid."</string>
     <string name="cancel" msgid="5665114069455378395">"Annuller"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Næste"</string>
+    <string name="back" msgid="5554327870352703710">"Tilbage"</string>
+    <string name="save" msgid="3745809743277153149">"Gem"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Udfør"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmer og påmindelser"</string>
@@ -547,13 +547,16 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Lige nu"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Denne telefon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Denne tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dockhøjttaler"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Ekstern enhed"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Forbundet enhed"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Denne telefon"</string>
-    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Indholdet kan ikke afspilles på denne enhed"</string>
+    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Kan ikke afspilles på denne enhed"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Opgrader kontoen for at skifte"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Downloads kan ikke afspilles her"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Prøv igen efter annoncen"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Væk enheden for at afspille her"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Enheden er ikke godkendt til afspilning"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Enheden er ikke godkendt"</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Mediet kan ikke afspilles her"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Der kunne ikke oprettes forbindelse. Sluk og tænd enheden"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Lydenhed med ledning"</string>
@@ -578,13 +581,10 @@
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Begrænset profil"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Vil du tilføje en ny bruger?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Du kan dele denne enhed med andre ved at oprette ekstra brugere. Hver bruger har sit personlige område, som kan tilpasses med apps, baggrund osv. Brugerne kan også justere enhedsindstillinger, som for eksempel Wi-Fi, som påvirker alle.\n\nNår du tilføjer en ny bruger, skal vedkommende konfigurere sit område.\n\nAlle brugere kan opdatere apps for alle andre brugere. Indstillinger og tjenester for hjælpefunktioner overføres muligvis ikke til den nye bruger."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"Når du tilføjer en ny bruger, skal personen konfigurere sit rum.\n\nAlle brugere kan opdatere apps for alle de andre brugere."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"Når du tilføjer en ny bruger, skal personen konfigurere sit område.\n\nAlle brugere kan opdatere apps for alle de andre brugere."</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Vil du tildele denne bruger administratorrettigheder?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Administratorer har særlige rettigheder, som andre brugere ikke har. En administrator kan administrere alle brugere, opdatere eller gendanne denne enhed, skifte indstillinger, se alle installerede apps og tildele eller tilbagekalde andres administratorrettigheder."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Tildel administratorrettigheder"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Vil du konfigurere brugeren nu?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Sørg for, at brugeren har mulighed for at tage enheden og konfigurere sit eget rum"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Vil du oprette en profil nu?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Ja, tildel vedkommende administratorrettigheder"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Nej, tildel ikke vedkommende administratorrettigheder"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Flyt op"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Ikke angivet"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutrum"</string>
+    <string name="feminine" msgid="1529155595310784757">"Femininum"</string>
+    <string name="masculine" msgid="4653978041013996303">"Maskulinum"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-de/arrays.xml b/packages/SettingsLib/res/values-de/arrays.xml
index 05c4630..291f4e5 100644
--- a/packages/SettingsLib/res/values-de/arrays.xml
+++ b/packages/SettingsLib/res/values-de/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Audioquelle"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index c32baec..d93baf1 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Zugriff auf SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD-Audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD-Audio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Hörhilfen"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Mit Hörhilfen verbunden"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Hörgerät"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Mit Hörgerät verbunden"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Mit LE Audio verbunden"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Verbunden mit Medien-Audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Verbunden mit Telefon-Audio"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Für Telefon-Audio verwenden"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Für Dateiübertragung verwenden"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Für Eingabe verwenden"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Für Hörhilfen verwenden"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Für Hörgerät verwenden"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Für LE_AUDIO verwenden"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Koppeln"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"KOPPELN"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Profil auswählen"</string>
     <string name="category_personal" msgid="6236798763159385225">"Privat"</string>
     <string name="category_work" msgid="4014193632325996115">"Geschäftlich"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klonen"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Entwickleroptionen"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Entwickleroptionen aktivieren"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Optionen zur App-Entwicklung festlegen"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Overlay mit aktuellen Daten zu Tippaktionen anzeigen"</string>
     <string name="show_touches" msgid="8437666942161289025">"Fingertippen visualisieren"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Bei Fingertippen visuelles Feedback anzeigen"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Tastatureingaben anzeigen"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Visuelles Feedback für Tastatureingaben anzeigen"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Oberflächenaktualisierungen hervorheben"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Gesamte Fensteroberflächen blinken bei Aktualisierung"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Aktualisierungen von Ansichten hervorheben"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mehr Zeit."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Weniger Zeit."</string>
     <string name="cancel" msgid="5665114069455378395">"Abbrechen"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Weiter"</string>
+    <string name="back" msgid="5554327870352703710">"Zurück"</string>
+    <string name="save" msgid="3745809743277153149">"Speichern"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Fertig"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Wecker und Erinnerungen"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Gerade eben"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Dieses Smartphone"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Dieses Tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dock-Lautsprecher"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Externes Gerät"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Verbundenes Gerät"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Dieses Smartphone"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Wiedergabe auf diesem Gerät nicht möglich"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Zum Umstellen Kontoupgrade durchführen"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Neuen Nutzer hinzufügen?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Du kannst dieses Gerät zusammen mit anderen nutzen, indem du weitere Nutzer erstellst. Jeder erhält einen eigenen Bereich, in dem er Apps, den Hintergrund usw. personalisieren kann. Außerdem lassen sich Geräteeinstellungen wie WLAN ändern, die sich auf alle Nutzer auswirken.\n\nWenn du einen neuen Nutzer hinzufügst, muss dieser seinen Bereich einrichten.\n\nJeder Nutzer kann Apps für alle anderen Nutzer aktualisieren. Bedienungshilfen-Einstellungen und -Dienste werden möglicherweise nicht auf den neuen Nutzer übertragen."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Wenn du einen neuen Nutzer hinzufügst, muss dieser seinen Bereich einrichten.\n\nJeder Nutzer kann Apps für alle anderen Nutzer aktualisieren."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Diesen Nutzer als Administrator festlegen?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Im Gegensatz zu anderen Nutzern haben Administratoren besondere Berechtigungen. Ein Administrator kann alle Nutzer verwalten, dieses Gerät aktualisieren oder zurücksetzen, Einstellungen ändern, alle installierten Apps sehen und für andere Administratorberechtigungen gewähren oder aufheben."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Als Administrator festlegen"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Nutzer jetzt einrichten?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Die Person muss Zugang zum Gerät haben und bereit sein, ihren Bereich einzurichten."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Profil jetzt einrichten?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Ja, als Administrator festlegen"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Nein, nicht als Administrator festlegen"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Nach oben"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Nicht angegeben"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutrum"</string>
+    <string name="feminine" msgid="1529155595310784757">"Feminin"</string>
+    <string name="masculine" msgid="4653978041013996303">"Maskulin"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-el/arrays.xml b/packages/SettingsLib/res/values-el/arrays.xml
index 4e8736c..7f72e1c 100644
--- a/packages/SettingsLib/res/values-el/arrays.xml
+++ b/packages/SettingsLib/res/values-el/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Πηγή ήχου"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 0364665..e8edbff 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Πρόσβαση SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Ήχος HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Ήχος HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Βοηθήματα ακοής"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Έγινε σύνδεση σε βοηθήματα ακοής"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Βοηθήματα ακοής"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Σε σύνδεση με βοηθήματα ακοής"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Συνδέθηκε σε LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Συνδέθηκε σε ήχο πολυμέσων"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Συνδεδεμένο στον ήχο τηλεφώνου"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Χρήση για ήχο τηλεφώνου"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Χρήση για τη μεταφορά αρχείων"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Χρήση για είσοδο"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Χρήση για βοηθήματα ακοής"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Χρήση για βοηθήματα ακοής"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Χρήση για LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Σύζευξη"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ΣΥΖΕΥΞΗ"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Επιλογή προφίλ"</string>
     <string name="category_personal" msgid="6236798763159385225">"Προσωπικό"</string>
     <string name="category_work" msgid="4014193632325996115">"Εργασίας"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Κλωνοποίηση"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Επιλογές για προγραμματιστές"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Ενεργοποίηση επιλογών για προγραμματιστές"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Ορισμός επιλογών για ανάπτυξη εφαρμογής"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Επικάλ.οθόνης για προβολή τρεχόντων δεδ/νων αφής"</string>
     <string name="show_touches" msgid="8437666942161289025">"Εμφάνιση πατημάτων"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Εμφάνιση οπτικών σχολίων για πατήματα"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Εμφάν. πατημάτων πλήκτρων"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Εμφ. οπτικής ανάδρασης για πατήμ. φυσικών πλήκτρων"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Εμφάνιση ενημερώσεων επιφάνειας"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Προβολή Flash ολόκλ. των επιφ παραθ. όταν ενημερ."</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Εμφάνιση ενημερ. προβολής"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Περισσότερη ώρα."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Λιγότερη ώρα."</string>
     <string name="cancel" msgid="5665114069455378395">"Ακύρωση"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Επόμενο"</string>
+    <string name="back" msgid="5554327870352703710">"Πίσω"</string>
+    <string name="save" msgid="3745809743277153149">"Αποθήκευση"</string>
     <string name="okay" msgid="949938843324579502">"ΟΚ"</string>
     <string name="done" msgid="381184316122520313">"Τέλος"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Ξυπνητήρια και ειδοποιήσεις"</string>
@@ -547,7 +547,10 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Μόλις τώρα"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Αυτό το τηλέφωνο"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Αυτό το tablet"</string>
-    <string name="media_transfer_this_phone" msgid="7194341457812151531">"Αυτό το τηλέφωνο"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Ηχείο βάσης σύνδεσης"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Εξωτερική συσκευή"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Συνδεδεμένη συσκευή"</string>
+    <string name="media_transfer_this_phone" msgid="7194341457812151531">"Αυτό το τηλέφ."</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Δεν είναι δυνατή η αναπαραγωγή σε αυτήν τη συσκευή"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Αναβαθμίστε τον λογαριασμό για εναλλαγή"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Δεν είναι δυνατή η αναπαραγωγή των λήψεων εδώ"</string>
@@ -577,16 +580,13 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Χρήστης"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Προφίλ περιορ. πρόσβασης"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Προσθήκη νέου χρήστη;"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Μπορείτε να μοιραστείτε αυτήν τη συσκευή με άλλα άτομα, δημιουργώντας επιπλέον χρήστες. Κάθε χρήστης θα έχει το δικό του χώρο, τον οποίο μπορεί να προσαρμόσει με τις δικές του εφαρμογές, ταπετσαρία κ.λπ. Οι χρήστες μπορούν επίσης να προσαρμόσουν ρυθμίσεις της συσκευής, όπως το Wi‑Fi, που επηρεάζουν τους πάντες.\n\nΚατά την προσθήκη ενός νέου χρήστη, αυτός θα πρέπει να ρυθμίσει τον χώρο του.\n\nΟποιοσδήποτε χρήστης μπορεί να ενημερώσει τις εφαρμογές για όλους τους άλλους χρήστες. Οι ρυθμίσεις και οι υπηρεσίες προσβασιμότητας ενδέχεται να μην μεταφερθούν στον νέο χρήστη."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"Κατά την προσθήκη ενός νέου χρήστη, αυτός θα πρέπει να ρυθμίσει το χώρο του.\n\nΟποιοσδήποτε χρήστης μπορεί να ενημερώσει τις εφαρμογές για όλους τους άλλους χρήστες."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Μπορείτε να μοιραστείτε αυτήν τη συσκευή με άλλα άτομα, δημιουργώντας επιπλέον χρήστες. Κάθε χρήστης θα έχει τον δικό του χώρο, τον οποίο μπορεί να προσαρμόσει με τις δικές του εφαρμογές, ταπετσαρία κ.λπ. Οι χρήστες μπορούν επίσης να προσαρμόσουν ρυθμίσεις της συσκευής, όπως το Wi‑Fi, που επηρεάζουν τους πάντες.\n\nΚατά την προσθήκη ενός νέου χρήστη, αυτός θα πρέπει να ρυθμίσει τον χώρο του.\n\nΟποιοσδήποτε χρήστης μπορεί να ενημερώσει τις εφαρμογές για όλους τους άλλους χρήστες. Οι ρυθμίσεις και οι υπηρεσίες προσβασιμότητας ενδέχεται να μην μεταφερθούν στον νέο χρήστη."</string>
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"Κατά την προσθήκη ενός νέου χρήστη, αυτός θα πρέπει να ρυθμίσει τον χώρο του.\n\nΟποιοσδήποτε χρήστης μπορεί να ενημερώσει τις εφαρμογές για όλους τους άλλους χρήστες."</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Να εκχωρηθούν δικαιώματα διαχειριστή σε αυτόν τον χρήστη;"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Οι διαχειριστές έχουν ειδικά προνόμια που δεν έχουν οι υπόλοιποι χρήστες Ένας διαχειριστής μπορεί να διαχειριστεί όλους τους χρήστες, να ενημερώσει ή να επαναφέρει αυτήν τη συσκευή, να τροποποιήσει τις ρυθμίσεις, να δει όλες τις εγκατεστημένες εφαρμογές και να εκχωρήσει ή να ανακαλέσει προνόμια διαχειριστή άλλων χρηστών."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Εκχώρηση δικαιωμάτων διαχειριστή"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Να γίνει ρύθμιση χρήστη τώρα;"</string>
-    <string name="user_setup_dialog_message" msgid="269931619868102841">"Βεβαιωθείτε ότι ο χρήστης μπορεί να πάρει τη συσκευή και ρυθμίστε το χώρο του"</string>
+    <string name="user_setup_dialog_message" msgid="269931619868102841">"Βεβαιωθείτε ότι ο χρήστης μπορεί να πάρει τη συσκευή και ρυθμίστε τον χώρο του"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Να γίνει ρύθμιση προφίλ τώρα;"</string>
     <string name="user_setup_button_setup_now" msgid="1708269547187760639">"Ρύθμιση τώρα"</string>
     <string name="user_setup_button_setup_later" msgid="8712980133555493516">"Όχι τώρα"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Με αυτόν τον τρόπο θα ξεκινήσει μια νέα περίοδος σύνδεσης επισκέπτη και θα διαγραφούν όλες οι εφαρμογές και τα δεδομένα από την τρέχουσα περίοδο σύνδεσης"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Έξοδος από λειτ. επισκέπτη;"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Θα διαγραφούν εφαρμογές και δεδομένα από την τρέχουσα περίοδο σύνδεσης επισκέπτη"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Ναι, να γίνει εκχώρηση δικαιωμάτων διαχειριστή"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Όχι, να μην γίνει εκχώρηση δικαιωμάτων διαχειριστή"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Έξοδος"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Αποθήκευση δραστ. επισκέπτη;"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Αποθήκευση δραστ. τρέχουσας περιόδου σύνδεσης ή διαγραφή εφαρμογών και δεδομένων"</string>
@@ -672,7 +670,7 @@
     <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Το Ethernet αποσυνδέθηκε."</string>
     <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
     <string name="accessibility_no_calling" msgid="3540827068323895748">"Χωρίς κλήσεις."</string>
-    <string name="avatar_picker_title" msgid="8492884172713170652">"Επιλογή φωτογραφίας προφίλ"</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>
     <string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Επιλέξτε διάταξη πληκτρολογίου"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Μετακίνηση προς τα επάνω"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Δεν έχει καθοριστεί"</string>
+    <string name="neuter" msgid="2075249330106127310">"Ουδέτερο"</string>
+    <string name="feminine" msgid="1529155595310784757">"Θηλυκό"</string>
+    <string name="masculine" msgid="4653978041013996303">"Αρσενικό"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-en-rAU/arrays.xml b/packages/SettingsLib/res/values-en-rAU/arrays.xml
index df643cd..7e846fb 100644
--- a/packages/SettingsLib/res/values-en-rAU/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rAU/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (secure)"</item>
     <item msgid="7322156123728520872">"4K (upscaled)"</item>
     <item msgid="7735692090314849188">"4K (upscaled, secure)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (dual screen)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"None"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Audio Source"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index e1dc7b56..2a2e4ca 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM access"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD audio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Hearing Aids"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Connected to Hearing Aids"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Hearing aids"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Connected to hearing aids"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Connected to LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Connected to media audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Connected to phone audio"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Use for phone audio"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Use for file transfer"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Use for input"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Use for Hearing Aids"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Use for hearing aids"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Use for LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Pair"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"PAIR"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Choose profile"</string>
     <string name="category_personal" msgid="6236798763159385225">"Personal"</string>
     <string name="category_work" msgid="4014193632325996115">"Work"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clone"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Developer options"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Enable developer options"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Set options for app development"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Screen overlay showing current touch data"</string>
     <string name="show_touches" msgid="8437666942161289025">"Show taps"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Show visual feedback for taps"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Show key presses"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Show visual feedback for physical key presses"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Show surface updates"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Flash entire window surfaces when they update"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Show view updates"</string>
@@ -391,7 +394,7 @@
     <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"Destroy every activity as soon as the user leaves it"</string>
     <string name="app_process_limit_title" msgid="8361367869453043007">"Background process limit"</string>
     <string name="show_all_anrs" msgid="9160563836616468726">"Show background ANRs"</string>
-    <string name="show_all_anrs_summary" msgid="8562788834431971392">"Display App Not Responding dialogue for background apps"</string>
+    <string name="show_all_anrs_summary" msgid="8562788834431971392">"Display application not responding dialogue for background apps"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Show notification channel warnings"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Displays on-screen warning when an app posts a notification without a valid channel"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"Force allow apps on external"</string>
@@ -544,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Just now"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"This phone"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"This tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dock speaker"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"External device"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Connected device"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"This phone"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Can\'t play on this device"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Upgrade account to switch"</string>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"Move up"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Not specified"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neuter"</string>
+    <string name="feminine" msgid="1529155595310784757">"Feminine"</string>
+    <string name="masculine" msgid="4653978041013996303">"Masculine"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-en-rCA/arrays.xml b/packages/SettingsLib/res/values-en-rCA/arrays.xml
index 184d210..ec6894a 100644
--- a/packages/SettingsLib/res/values-en-rCA/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rCA/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Audio Source"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml
index e793fb7..a9a95b1 100644
--- a/packages/SettingsLib/res/values-en-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-en-rCA/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM Access"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD audio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Hearing Aids"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Connected to Hearing Aids"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Hearing aids"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Connected to hearing aids"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Connected to LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Connected to media audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Connected to phone audio"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Use for phone audio"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Use for file transfer"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Use for input"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Use for Hearing Aids"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Use for hearing aids"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Use for LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Pair"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"PAIR"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Choose profile"</string>
     <string name="category_personal" msgid="6236798763159385225">"Personal"</string>
     <string name="category_work" msgid="4014193632325996115">"Work"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clone"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Developer options"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Enable developer options"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Set options for app development"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Screen overlay showing current touch data"</string>
     <string name="show_touches" msgid="8437666942161289025">"Show taps"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Show visual feedback for taps"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Show key presses"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Show visual feedback for physical key presses"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Show surface updates"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Flash entire window surfaces when they update"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Show view updates"</string>
@@ -544,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Just now"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"This phone"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"This tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dock speaker"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"External Device"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Connected device"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"This phone"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Cant play on this device"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Upgrade account to switch"</string>
@@ -574,10 +580,10 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"User"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Restricted profile"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Add new user?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"You can share this device with other people by creating additional users. Each user has their own space, which they can customize with apps, wallpaper, and so on. Users can also adjust device settings like Wi‑Fi that affect everyone.\n\nWhen you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users. Accessibility settings and services may not transfer to the new user."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"You can share this device with other people by creating additional users. Each user has their own space, which they can customize with apps, wallpaper and so on. Users can also adjust device settings like Wi‑Fi that affect everyone.\n\nWhen you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users. Accessibility settings and services may not transfer to the new user."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"When you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users."</string>
     <string name="user_grant_admin_title" msgid="5157031020083343984">"Make this user an admin?"</string>
-    <string name="user_grant_admin_message" msgid="1673791931033486709">"Admins have special privileges that other users dont. An admin can manage all users, update or reset this device, modify settings, see all installed apps, and grant or revoke admin privileges for others."</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Admins have special privileges that other users don\'t. An admin can manage all users, update or reset this device, modify settings, see all installed apps and grant or revoke admin privileges for others."</string>
     <string name="user_grant_admin_button" msgid="5441486731331725756">"Make admin"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Set up user now?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Make sure the person is available to take the device and set up their space"</string>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"Move up"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Not specified"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neuter"</string>
+    <string name="feminine" msgid="1529155595310784757">"Feminine"</string>
+    <string name="masculine" msgid="4653978041013996303">"Masculine"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-en-rGB/arrays.xml b/packages/SettingsLib/res/values-en-rGB/arrays.xml
index df643cd..7e846fb 100644
--- a/packages/SettingsLib/res/values-en-rGB/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rGB/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (secure)"</item>
     <item msgid="7322156123728520872">"4K (upscaled)"</item>
     <item msgid="7735692090314849188">"4K (upscaled, secure)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (dual screen)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"None"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Audio Source"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index e1dc7b56..2a2e4ca 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM access"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD audio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Hearing Aids"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Connected to Hearing Aids"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Hearing aids"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Connected to hearing aids"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Connected to LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Connected to media audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Connected to phone audio"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Use for phone audio"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Use for file transfer"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Use for input"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Use for Hearing Aids"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Use for hearing aids"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Use for LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Pair"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"PAIR"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Choose profile"</string>
     <string name="category_personal" msgid="6236798763159385225">"Personal"</string>
     <string name="category_work" msgid="4014193632325996115">"Work"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clone"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Developer options"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Enable developer options"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Set options for app development"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Screen overlay showing current touch data"</string>
     <string name="show_touches" msgid="8437666942161289025">"Show taps"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Show visual feedback for taps"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Show key presses"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Show visual feedback for physical key presses"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Show surface updates"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Flash entire window surfaces when they update"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Show view updates"</string>
@@ -391,7 +394,7 @@
     <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"Destroy every activity as soon as the user leaves it"</string>
     <string name="app_process_limit_title" msgid="8361367869453043007">"Background process limit"</string>
     <string name="show_all_anrs" msgid="9160563836616468726">"Show background ANRs"</string>
-    <string name="show_all_anrs_summary" msgid="8562788834431971392">"Display App Not Responding dialogue for background apps"</string>
+    <string name="show_all_anrs_summary" msgid="8562788834431971392">"Display application not responding dialogue for background apps"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Show notification channel warnings"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Displays on-screen warning when an app posts a notification without a valid channel"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"Force allow apps on external"</string>
@@ -544,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Just now"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"This phone"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"This tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dock speaker"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"External device"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Connected device"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"This phone"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Can\'t play on this device"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Upgrade account to switch"</string>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"Move up"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Not specified"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neuter"</string>
+    <string name="feminine" msgid="1529155595310784757">"Feminine"</string>
+    <string name="masculine" msgid="4653978041013996303">"Masculine"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-en-rIN/arrays.xml b/packages/SettingsLib/res/values-en-rIN/arrays.xml
index df643cd..7e846fb 100644
--- a/packages/SettingsLib/res/values-en-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rIN/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (secure)"</item>
     <item msgid="7322156123728520872">"4K (upscaled)"</item>
     <item msgid="7735692090314849188">"4K (upscaled, secure)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (dual screen)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"None"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Audio Source"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index e1dc7b56..2a2e4ca 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM access"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD audio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Hearing Aids"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Connected to Hearing Aids"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Hearing aids"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Connected to hearing aids"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Connected to LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Connected to media audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Connected to phone audio"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Use for phone audio"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Use for file transfer"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Use for input"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Use for Hearing Aids"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Use for hearing aids"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Use for LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Pair"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"PAIR"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Choose profile"</string>
     <string name="category_personal" msgid="6236798763159385225">"Personal"</string>
     <string name="category_work" msgid="4014193632325996115">"Work"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clone"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Developer options"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Enable developer options"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Set options for app development"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Screen overlay showing current touch data"</string>
     <string name="show_touches" msgid="8437666942161289025">"Show taps"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Show visual feedback for taps"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Show key presses"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Show visual feedback for physical key presses"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Show surface updates"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Flash entire window surfaces when they update"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Show view updates"</string>
@@ -391,7 +394,7 @@
     <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"Destroy every activity as soon as the user leaves it"</string>
     <string name="app_process_limit_title" msgid="8361367869453043007">"Background process limit"</string>
     <string name="show_all_anrs" msgid="9160563836616468726">"Show background ANRs"</string>
-    <string name="show_all_anrs_summary" msgid="8562788834431971392">"Display App Not Responding dialogue for background apps"</string>
+    <string name="show_all_anrs_summary" msgid="8562788834431971392">"Display application not responding dialogue for background apps"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Show notification channel warnings"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Displays on-screen warning when an app posts a notification without a valid channel"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"Force allow apps on external"</string>
@@ -544,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Just now"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"This phone"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"This tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dock speaker"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"External device"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Connected device"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"This phone"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Can\'t play on this device"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Upgrade account to switch"</string>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"Move up"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Not specified"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neuter"</string>
+    <string name="feminine" msgid="1529155595310784757">"Feminine"</string>
+    <string name="masculine" msgid="4653978041013996303">"Masculine"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-en-rXC/arrays.xml b/packages/SettingsLib/res/values-en-rXC/arrays.xml
index dec70f4..1daa29c 100644
--- a/packages/SettingsLib/res/values-en-rXC/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rXC/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎Audio Source‎‏‎‎‏‎"</item>
     <item msgid="8688681727755534982">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‎MIDI‎‏‎‎‏‎"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‏‎‏‏‏‎0‎‏‎‎‏‎"</item>
+    <item msgid="2646486108212979598">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎1‎‏‎‎‏‎"</item>
+    <item msgid="3753634915787796632">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎‎‎‎2‎‏‎‎‏‎"</item>
+    <item msgid="4779928470672877922">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‏‏‎‎‎‏‎‎3‎‏‎‎‏‎"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml
index cfa2df5..af34e5b 100644
--- a/packages/SettingsLib/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/res/values-en-rXC/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎‏‎‎SIM Access‎‏‎‎‏‎"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎HD audio: ‎‏‎‎‏‏‎<xliff:g id="CODEC_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎HD audio‎‏‎‎‏‎"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‎‎‏‏‏‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‎‏‎‎‏‎‎Hearing Aids‎‏‎‎‏‎"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎LE audio‎‏‎‎‏‎"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‏‎‏‏‎‎‏‏‏‏‏‏‏‏‎‎Connected to Hearing Aids‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎Hearing aids‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎LE Audio‎‏‎‎‏‎"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‏‎‏‏‎‎‎Connected to hearing aids‎‏‎‎‏‎"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎‎Connected to LE audio‎‏‎‎‏‎"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎Connected to media audio‎‏‎‎‏‎"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎Connected to phone audio‎‏‎‎‏‎"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎Use for phone audio‎‏‎‎‏‎"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‎‎‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‎Use for file transfer‎‏‎‎‏‎"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‎‎‎Use for input‎‏‎‎‏‎"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎Use for Hearing Aids‎‏‎‎‏‎"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎Use for hearing aids‎‏‎‎‏‎"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎Use for LE_AUDIO‎‏‎‎‏‎"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎Pair‎‏‎‎‏‎"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‎‏‎‏‎‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎PAIR‎‏‎‎‏‎"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎Choose profile‎‏‎‎‏‎"</string>
     <string name="category_personal" msgid="6236798763159385225">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‎‏‎Personal‎‏‎‎‏‎"</string>
     <string name="category_work" msgid="4014193632325996115">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‏‏‎Work‎‏‎‎‏‎"</string>
+    <string name="category_clone" msgid="1554511758987195974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎Clone‎‏‎‎‏‎"</string>
     <string name="development_settings_title" msgid="140296922921597393">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‎‎‎‏‎Developer options‎‏‎‎‏‎"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎Enable developer options‎‏‎‎‏‎"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎Set options for app development‎‏‎‎‏‎"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‎‏‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎Screen overlay showing current touch data‎‏‎‎‏‎"</string>
     <string name="show_touches" msgid="8437666942161289025">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎Show taps‎‏‎‎‏‎"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‏‎Show visual feedback for taps‎‏‎‎‏‎"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‎Show key presses‎‏‎‎‏‎"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎Show visual feedback for physical key presses‎‏‎‎‏‎"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‎‎Show surface updates‎‏‎‎‏‎"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎‎‎‏‎‎‏‎‎‎‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‎‎Flash entire window surfaces when they update‎‏‎‎‏‎"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎Show view updates‎‏‎‎‏‎"</string>
@@ -544,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‏‎‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎Just now‎‏‎‎‏‎"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‎‏‎This phone‎‏‎‎‏‎"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎‎‎‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‎‎‎‎This tablet‎‏‎‎‏‎"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‎Dock speaker‎‏‎‎‏‎"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‎‎‏‎‎‏‎‎‏‎‎External Device‎‏‎‎‏‎"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎Connected device‎‏‎‎‏‎"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎This phone‎‏‎‎‏‎"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‎‏‏‏‎‎Cant play on this device‎‏‎‎‏‎"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎Upgrade account to switch‎‏‎‎‏‎"</string>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎Move up‎‏‎‎‏‎"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="PERCENTAGE">%1$d</xliff:g>‎‏‎‎‏‏‏‎ %%‎‏‎‎‏‎"</string>
+    <string name="not_specified" msgid="5423502443185110328">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎Not specified‎‏‎‎‏‎"</string>
+    <string name="neuter" msgid="2075249330106127310">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‏‎‎Neuter‎‏‎‎‏‎"</string>
+    <string name="feminine" msgid="1529155595310784757">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‏‎Feminine‎‏‎‎‏‎"</string>
+    <string name="masculine" msgid="4653978041013996303">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‎‏‎‏‏‎‎‏‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎Masculine‎‏‎‎‏‎"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-es-rUS/arrays.xml b/packages/SettingsLib/res/values-es-rUS/arrays.xml
index b1b1b2e..be12572 100644
--- a/packages/SettingsLib/res/values-es-rUS/arrays.xml
+++ b/packages/SettingsLib/res/values-es-rUS/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4 K (seguro)"</item>
     <item msgid="7322156123728520872">"4 K (mejorado)"</item>
     <item msgid="7735692090314849188">"4 K (mejorado, seguro)"</item>
-    <item msgid="7346816300608639624">"720 píxeles y 1080 píxeles (pantalla doble)"</item>
+    <item msgid="7346816300608639624">"720 y 1080 píxeles (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"Ninguna"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Fuente de audio"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index 38a7c32..52cd3fa 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -99,9 +99,9 @@
     <string name="bluetooth_battery_level" msgid="2893696778200201555">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería"</string>
     <string name="bluetooth_battery_level_untethered" msgid="4002282355111504349">"I: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batería, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería"</string>
     <string name="bluetooth_active_no_battery_level" msgid="4155462233006205630">"Activado"</string>
-    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Activo; solo izquierda"</string>
-    <string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Activo; solo derecha"</string>
-    <string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Activo; izquierda y derecha"</string>
+    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Activo; solo oído izquierdo"</string>
+    <string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Activo; solo oído derecho"</string>
+    <string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Activo; oídos izquierdo y derecho"</string>
     <string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Audio multimedia"</string>
     <string name="bluetooth_profile_headset" msgid="5395952236133499331">"Llamadas telefónicas"</string>
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferencia de archivos"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acceso a SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Audio en HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Audio en HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Audífonos"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"Audio de bajo consumo"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Conectado a audífonos"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Audífonos"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"audio de bajo consumo"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Conectado a audífonos"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Conectado a audio de bajo consumo"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Conectado al audio multimedia"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Conectado al audio del dispositivo"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Utilizar para el audio del dispositivo"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Utilizar para la transferencia de archivos"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Utilizar para entrada"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Usar para audífonos"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Usar para audífonos"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Usar para LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Vincular"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"SINCRONIZAR"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Cancelar"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"La sincronización te permite acceder a los contactos y al historial de llamadas cuando el dispositivo está conectado."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"No se pudo vincular con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"No se pudo vincular con <xliff:g id="DEVICE_NAME">%1$s</xliff:g> porque la llave de acceso o el PIN son incorrectos."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"No se pudo vincular con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>: llave de acceso o PIN incorrectos."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"No se puede establecer la comunicación con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Vínculo rechazado por <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Computadora"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Elegir perfil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Personal"</string>
     <string name="category_work" msgid="4014193632325996115">"Trabajo"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clonar"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opciones para desarrolladores"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Activar opciones para programador"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Establecer opciones para desarrollar aplicaciones"</string>
@@ -299,9 +300,9 @@
     <string name="private_dns_mode_provider" msgid="3619040641762557028">"Nombre de host del proveedor de DNS privado"</string>
     <string name="private_dns_mode_provider_hostname_hint" msgid="6564868953748514595">"Ingresa el host del proveedor de DNS"</string>
     <string name="private_dns_mode_provider_failure" msgid="8356259467861515108">"No se pudo establecer conexión"</string>
-    <string name="wifi_display_certification_summary" msgid="8111151348106907513">"Mostrar opciones de certificación de pantalla inalámbrica"</string>
-    <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Aumentar nivel de registro Wi-Fi; mostrar por SSID RSSI en el selector de Wi-Fi"</string>
-    <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"Reduce el consumo de batería y mejora el rendimiento de la red"</string>
+    <string name="wifi_display_certification_summary" msgid="8111151348106907513">"Muestra opciones de certificación de pantalla inalámbrica"</string>
+    <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Aumenta el nivel de registro Wi-Fi y se muestra por SSID RSSI en el selector de Wi-Fi"</string>
+    <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"Reduce el consumo de batería y mejora el rendimiento de la red."</string>
     <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"Si este modo está habilitado, es posible que la dirección MAC del dispositivo cambie cada vez que se conecte a una red que tenga habilitada la aleatorización de MAC."</string>
     <string name="wifi_metered_label" msgid="8737187690304098638">"De uso medido"</string>
     <string name="wifi_unmetered_label" msgid="6174142840934095093">"Sin tarifa plana"</string>
@@ -316,8 +317,8 @@
     <string name="allow_mock_location" msgid="2102650981552527884">"Ubicaciones de prueba"</string>
     <string name="allow_mock_location_summary" msgid="179780881081354579">"Permitir ubicaciones de prueba"</string>
     <string name="debug_view_attributes" msgid="3539609843984208216">"Habilitar inspección de atributos de vista"</string>
-    <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Mantener siempre los datos móviles activos, incluso cuando esté activada la conexión Wi‑Fi (para cambiar de red de forma rápida)."</string>
-    <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Usar la aceleración de hardware de conexión mediante dispositivo móvil si está disponible"</string>
+    <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Mantiene siempre los datos móviles activos, incluso cuando esté activada la conexión Wi‑Fi (para cambiar de red de forma rápida)."</string>
+    <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Usa la aceleración de hardware de conexión mediante dispositivo móvil si está disponible."</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"¿Permitir depuración por USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"La depuración por USB solo está indicada para actividades de programación. Úsala para copiar datos entre tu computadora y el dispositivo, para instalar aplicaciones en el dispositivo sin recibir notificaciones y para leer datos de registro."</string>
     <string name="adbwifi_warning_title" msgid="727104571653031865">"¿Permitir la depuración inalámbrica?"</string>
@@ -326,7 +327,7 @@
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"¿Permitir configuración de desarrollo?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Estos parámetros de configuración están destinados únicamente a los programadores. Pueden hacer que el dispositivo o sus aplicaciones no funcionen correctamente."</string>
     <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"Verificar aplicaciones por USB"</string>
-    <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"Comprobar que las aplicaciones instaladas mediante ADB/ADT no ocasionen daños"</string>
+    <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"Comprueba que las apps instaladas mediante ADB/ADT no ocasionen daños"</string>
     <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"Se mostrarán los dispositivos Bluetooth sin nombre (solo direcciones MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"Inhabilita la función de volumen absoluto de Bluetooth si se producen problemas de volumen con dispositivos remotos (por ejemplo, volumen demasiado alto o falta de control)."</string>
     <string name="bluetooth_enable_gabeldorsche_summary" msgid="2054730331770712629">"Habilita la pila de funciones de Bluetooth Gabeldorsche"</string>
@@ -345,15 +346,17 @@
     <string name="wait_for_debugger_summary" msgid="6846330006113363286">"Esperar que se conecte el depurador para iniciar la aplicación"</string>
     <string name="debug_input_category" msgid="7349460906970849771">"Entrada"</string>
     <string name="debug_drawing_category" msgid="5066171112313666619">"Dibujo"</string>
-    <string name="debug_hw_drawing_category" msgid="5830815169336975162">"Procesamiento acelerado mediante hardware"</string>
+    <string name="debug_hw_drawing_category" msgid="5830815169336975162">"Renderización acelerada por hardware"</string>
     <string name="media_category" msgid="8122076702526144053">"Multimedia"</string>
     <string name="debug_monitoring_category" msgid="1597387133765424994">"Supervisión"</string>
     <string name="strict_mode" msgid="889864762140862437">"Modo estricto"</string>
     <string name="strict_mode_summary" msgid="1838248687233554654">"Parpadear si aplicaciones tardan en proceso principal"</string>
     <string name="pointer_location" msgid="7516929526199520173">"Ubicación del puntero"</string>
-    <string name="pointer_location_summary" msgid="957120116989798464">"Superponer capa en pant. para mostrar puntos tocados"</string>
+    <string name="pointer_location_summary" msgid="957120116989798464">"Muestra los datos táctiles en la pantalla"</string>
     <string name="show_touches" msgid="8437666942161289025">"Mostrar presiones"</string>
-    <string name="show_touches_summary" msgid="3692861665994502193">"Mostrar información visual para presiones"</string>
+    <string name="show_touches_summary" msgid="3692861665994502193">"Muestra la ubicación de las presiones en la pantalla"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Ver pulsaciones de teclas"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Ver coment. visual para pulsac. de teclas físicas"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Ver actualiz. de superficie"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Destello en superficie por actualización"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Mostrar cambios de vista"</string>
@@ -361,12 +364,12 @@
     <string name="show_hw_layers_updates" msgid="5268370750002509767">"Ver actualiz. de capas de hardware"</string>
     <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"Luz verde en capas de hardware al actualizarse"</string>
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"Depurar superpos. de GPU"</string>
-    <string name="disable_overlays" msgid="4206590799671557143">"Desactivar superpos. HW"</string>
+    <string name="disable_overlays" msgid="4206590799671557143">"Desactivar superposición de hardware"</string>
     <string name="disable_overlays_summary" msgid="1954852414363338166">"Usar GPU para combinar pantallas"</string>
     <string name="simulate_color_space" msgid="1206503300335835151">"Simular espacio de color"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"Seguimientos de OpenGL"</string>
-    <string name="usb_audio_disable_routing" msgid="3367656923544254975">"Inhab. enrutam. audio USB"</string>
-    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Inhab. enrutam. automático a periféricos audio USB"</string>
+    <string name="usb_audio_disable_routing" msgid="3367656923544254975">"Inhabilitar enrutamiento de audio USB"</string>
+    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Inhabilita el enrutamiento automático a periféricos de audio USB"</string>
     <string name="debug_layout" msgid="1659216803043339741">"Mostrar límites de diseño"</string>
     <string name="debug_layout_summary" msgid="8825829038287321978">"Mostrar límites de recortes, márgenes, etc."</string>
     <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Forzar diseño der. a izq."</string>
@@ -379,7 +382,7 @@
     <string name="show_non_rect_clip" msgid="7499758654867881817">"Depurar operaciones de recorte no rectangulares"</string>
     <string name="track_frame_time" msgid="522674651937771106">"Perfil procesamiento HWUI"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Habilitar depuración GPU"</string>
-    <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Permitir capas de GPU para apps de depuración"</string>
+    <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Permite capas de GPU para apps de depuración"</string>
     <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Habilitar registro detallado"</string>
     <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Incluye otros registros de proveedor específicos del dispositivo en los informes de errores, que podrían contener información privada, consumir más batería o usar más espacio de almacenamiento."</string>
     <string name="window_animation_scale_title" msgid="5236381298376812508">"Escala de animación de ventana"</string>
@@ -399,7 +402,7 @@
     <string name="force_resizable_activities" msgid="7143612144399959606">"Forzar actividades para que cambien de tamaño"</string>
     <string name="force_resizable_activities_summary" msgid="2490382056981583062">"Permitir que todas las actividades puedan cambiar de tamaño para el modo multiventana, sin importar los valores del manifiesto."</string>
     <string name="enable_freeform_support" msgid="7599125687603914253">"Habilitar ventanas de forma libre"</string>
-    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Permitir la compatibilidad con ventanas de forma libre experimentales"</string>
+    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Permite la compatibilidad con ventanas de forma libre experimentales."</string>
     <string name="desktop_mode" msgid="2389067840550544462">"Modo de escritorio"</string>
     <string name="local_backup_password_title" msgid="4631017948933578709">"Contraseñas"</string>
     <string name="local_backup_password_summary_none" msgid="7646898032616361714">"Tus copias de seguridad de escritorio no están protegidas por contraseña."</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Más tiempo"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tiempo"</string>
     <string name="cancel" msgid="5665114069455378395">"Cancelar"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Siguiente"</string>
+    <string name="back" msgid="5554327870352703710">"Atrás"</string>
+    <string name="save" msgid="3745809743277153149">"Guardar"</string>
     <string name="okay" msgid="949938843324579502">"Aceptar"</string>
     <string name="done" msgid="381184316122520313">"Listo"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmas y recordatorios"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Recién"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Este teléfono"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Esta tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Conector de la bocina"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Dispositivo externo"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Dispositivo conectado"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Este teléfono"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"No se puede reproducir en este dispositivo"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Actualiza la cuenta para cambiar"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"¿Agregar usuario nuevo?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Para compartir este dispositivo, crea más usuarios. Cada uno tendrá su propio espacio y podrá personalizarlo con apps, un fondo de pantalla y mucho más. Los usuarios también podrán ajustar algunas opciones del dispositivo, como la conexión Wi‑Fi, que afectan a todos los usuarios.\n\nCuando agregues un nuevo usuario, esa persona deberá configurar su espacio.\n\nCualquier usuario podrá actualizar las apps de otras personas. Es posible que no se transfieran los servicios ni las opciones de accesibilidad al nuevo usuario."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Cuando agregas un nuevo usuario, esa persona debe configurar su espacio.\n\nCualquier usuario puede actualizar las aplicaciones del resto de los usuarios."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"¿Quieres convertir a este usuario en administrador?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Los administradores tienen privilegios especiales que no tienen otros usuarios. Un administrador puede administrar a todos los usuarios, actualizar o restablecer el dispositivo, modificar parámetros de configuración, ver todas las apps instaladas y otorgar o revocar privilegios de administrador de otros usuarios."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Convertir en administrador"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"¿Configurar el usuario ahora?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Asegúrate de que la persona pueda acceder al dispositivo y configurar su espacio."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"¿Quieres configurar tu perfil ahora?"</string>
@@ -613,13 +613,11 @@
     <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_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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Esta acción borrará todas las apps y los datos de la sesión de invitado actual."</string>
+    <string name="grant_admin" msgid="4323199171790522574">"Sí, convertir en administrador"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"No, no convertir en administrador"</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>
@@ -684,8 +682,8 @@
     <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="268234802198852753">"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="5749813313369517812">"Transmitir <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"Cambia la salida"</string>
-    <string name="back_navigation_animation" msgid="8105467568421689484">"Animaciones de retroceso predictivas"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Habilitar animaciones del sistema para gestos de retroceso predictivos."</string>
+    <string name="back_navigation_animation" msgid="8105467568421689484">"Animaciones de gesto predictivo"</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Habilita animaciones del sistema para gestos de retroceso predictivos."</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"Esta configuración habilita las animaciones del sistema para la animación de gestos predictiva. Se requiere la configuración por app de enableOnBackInvokedCallback en verdadero en el archivo de manifiesto."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"Mover hacia la izquierda"</item>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Mover hacia arriba"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Sin especificar"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutro"</string>
+    <string name="feminine" msgid="1529155595310784757">"Femenino"</string>
+    <string name="masculine" msgid="4653978041013996303">"Masculino"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-es/arrays.xml b/packages/SettingsLib/res/values-es/arrays.xml
index 626f2ea..5046194 100644
--- a/packages/SettingsLib/res/values-es/arrays.xml
+++ b/packages/SettingsLib/res/values-es/arrays.xml
@@ -55,7 +55,7 @@
   </string-array>
   <string-array name="hdcp_checking_summaries">
     <item msgid="4045840870658484038">"No usar comprobación de HDCP"</item>
-    <item msgid="8254225038262324761">"Usar comprobación de HDCP solo para contenido DRM"</item>
+    <item msgid="8254225038262324761">"Usa comprobación de HDCP solo para contenido DRM"</item>
     <item msgid="6421717003037072581">"Usar siempre comprobación de HDCP"</item>
   </string-array>
   <string-array name="bt_hci_snoop_log_entries">
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Fuente de audio"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 995a426..dfad8d3 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acceso a tarjeta SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Audio HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Audio HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Audífonos"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"Le Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Conectado a audífonos"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Audífonos"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Conectado a audífonos"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Conectado a LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Conectado al audio del medio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Conectado al audio del teléfono"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Utilizar para audio del teléfono"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Uso de la transferencia de archivos"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Usar para entrada"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Usar con audífonos"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Usar con audífonos"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Usar en LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Emparejar"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"EMPAREJAR"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Cancelar"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"La vinculación permite acceder a tus contactos y al historial de llamadas cuando el dispositivo está conectado."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"No se ha podido emparejar con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"No se puede emparejar con <xliff:g id="DEVICE_NAME">%1$s</xliff:g> porque la llave de acceso o el PIN son incorrectos."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"No se puede emparejar con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>: PIN o llave de acceso incorrectos."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"No se puede establecer comunicación con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Vinculación rechazada por <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Ordenador"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Seleccionar perfil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Personal"</string>
     <string name="category_work" msgid="4014193632325996115">"Trabajo"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clonar"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opciones para desarrolladores"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Habilitar opciones para desarrolladores"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Establecer opciones de desarrollo de aplicaciones"</string>
@@ -315,7 +316,7 @@
     <string name="select_usb_configuration_dialog_title" msgid="3579567144722589237">"Seleccionar configuración de USB"</string>
     <string name="allow_mock_location" msgid="2102650981552527884">"Ubicaciones simuladas"</string>
     <string name="allow_mock_location_summary" msgid="179780881081354579">"Permitir ubicaciones simuladas"</string>
-    <string name="debug_view_attributes" msgid="3539609843984208216">"Inspección de atributos de vista"</string>
+    <string name="debug_view_attributes" msgid="3539609843984208216">"Habilitar inspección de atributos de vista"</string>
     <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Mantiene los datos móviles siempre activos aunque la conexión Wi‑Fi esté habilitada (para cambiar de red rápidamente)"</string>
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Usa la conexión compartida con aceleración por hardware si está disponible"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"¿Permitir depuración por USB?"</string>
@@ -328,7 +329,7 @@
     <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"Verificar aplicaciones por USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"Comprueba las aplicaciones instaladas por ADB/ADT para detectar comportamientos dañinos"</string>
     <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"Muestra los dispositivos Bluetooth sin nombre (solo direcciones MAC)"</string>
-    <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"Inhabilita la función de volumen absoluto de Bluetooth si se producen problemas de volumen con dispositivos remotos (por ejemplo, volumen excesivamente alto o falta de control)"</string>
+    <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"Inhabilita la función de volumen absoluto de Bluetooth si se producen problemas de \\nvolumen con dispositivos remotos (p. ej., volumen excesivamente alto o falta de control)"</string>
     <string name="bluetooth_enable_gabeldorsche_summary" msgid="2054730331770712629">"Habilita la pila de funciones de Bluetooth Gabeldorsche"</string>
     <string name="enhanced_connectivity_summary" msgid="1576414159820676330">"Habilita la función de conectividad mejorada."</string>
     <string name="enable_terminal_title" msgid="3834790541986303654">"Terminal local"</string>
@@ -348,19 +349,21 @@
     <string name="debug_hw_drawing_category" msgid="5830815169336975162">"Renderización acelerada por hardware"</string>
     <string name="media_category" msgid="8122076702526144053">"Multimedia"</string>
     <string name="debug_monitoring_category" msgid="1597387133765424994">"Supervisión"</string>
-    <string name="strict_mode" msgid="889864762140862437">"Modo estricto"</string>
+    <string name="strict_mode" msgid="889864762140862437">"Modo Estricto habilitado"</string>
     <string name="strict_mode_summary" msgid="1838248687233554654">"Hace parpadear la pantalla si las aplicaciones tardan mucho en el subproceso principal"</string>
     <string name="pointer_location" msgid="7516929526199520173">"Ubicación del puntero"</string>
     <string name="pointer_location_summary" msgid="957120116989798464">"Superpone los datos de las pulsaciones en la pantalla"</string>
     <string name="show_touches" msgid="8437666942161289025">"Mostrar toques"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Muestra la ubicación de los toques en la pantalla"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Ver pulsación de teclas"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Ver respuestas visuales al pulsar teclas físicas"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Mostrar cambios de superficies"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Hace parpadear todas las superficies de la ventana cuando se actualizan"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Ver actualizaciones de vista"</string>
     <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"Hacer parpadear las vistas dentro de las ventanas cuando se dibujan"</string>
     <string name="show_hw_layers_updates" msgid="5268370750002509767">"Ver actualizaciones de capas de hardware"</string>
     <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"Hacer parpadear las capas de hardware en verde cuando se actualizan"</string>
-    <string name="debug_hw_overdraw" msgid="8944851091008756796">"Depurar sobredibujos de GPU"</string>
+    <string name="debug_hw_overdraw" msgid="8944851091008756796">"Depurar overdraw de GPU"</string>
     <string name="disable_overlays" msgid="4206590799671557143">"Inhabilitar superposiciones de hardware"</string>
     <string name="disable_overlays_summary" msgid="1954852414363338166">"Usa siempre la GPU para componer pantallas"</string>
     <string name="simulate_color_space" msgid="1206503300335835151">"Simular espacio de color"</string>
@@ -373,7 +376,7 @@
     <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Fuerza la dirección RTL para todos los idiomas"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"Barra de navegación transparente"</string>
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"Haz que el color de fondo de la barra de navegación sea transparente de forma predeterminada"</string>
-    <string name="window_blurs" msgid="6831008984828425106">"Difuminar ventanas"</string>
+    <string name="window_blurs" msgid="6831008984828425106">"Permitir difuminar ventanas"</string>
     <string name="force_msaa" msgid="4081288296137775550">"Forzar MSAA 4x"</string>
     <string name="force_msaa_summary" msgid="9070437493586769500">"Habilita MSAA 4x en aplicaciones de OpenGL ES 2.0"</string>
     <string name="show_non_rect_clip" msgid="7499758654867881817">"Depurar operaciones de recorte no rectangulares"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Más tiempo."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tiempo."</string>
     <string name="cancel" msgid="5665114069455378395">"Cancelar"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Siguiente"</string>
+    <string name="back" msgid="5554327870352703710">"Atrás"</string>
+    <string name="save" msgid="3745809743277153149">"Guardar"</string>
     <string name="okay" msgid="949938843324579502">"Aceptar"</string>
     <string name="done" msgid="381184316122520313">"Hecho"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmas y recordatorios"</string>
@@ -546,9 +546,12 @@
     <string name="zen_mode_forever" msgid="3339224497605461291">"Hasta que lo desactives"</string>
     <string name="time_unit_just_now" msgid="3006134267292728099">"justo ahora"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Este teléfono"</string>
-    <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Este tablet"</string>
+    <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Esta tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Altavoz base"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Dispositivo externo"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Dispositivo conectado"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Este teléfono"</string>
-    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"No se puede reproducir contenido en este dispositivo"</string>
+    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"No se puede reproducir en este dispositivo"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Actualiza la cuenta para cambiar"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"No se pueden reproducir descargas aquí"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Prueba de nuevo después del anuncio"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"¿Añadir nuevo usuario?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Puedes compartir este dispositivo si creas más usuarios. Cada uno tendrá su propio espacio y podrá personalizarlo con aplicaciones, un fondo de pantalla y mucho más. Los usuarios también pueden ajustar opciones del dispositivo, como la conexión Wi‑Fi, que afectan a todos los usuarios.\n\nCuando añadas un usuario, tendrá que configurar su espacio.\n\nCualquier usuario puede actualizar aplicaciones de todos los usuarios. Es posible que no se transfieran los servicios y opciones de accesibilidad al nuevo usuario."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Al añadir un nuevo usuario, dicha persona debe configurar su espacio.\n\nCualquier usuario puede actualizar las aplicaciones del resto de usuarios."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"¿Convertir a este usuario en administrador?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Los administradores tienen privilegios especiales que otros usuarios no tienen. Los administradores pueden gestionar todos los usuarios, actualizar o restablecer este dispositivo, modificar los ajustes, ver todas las aplicaciones instaladas y conceder o revocar privilegios de administrador a otros usuarios."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Convertir en administrador"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"¿Configurar usuario ahora?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Asegúrate de que la persona está disponible en este momento para usar el dispositivo y configurar su espacio."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"¿Quieres configurar un perfil ahora?"</string>
@@ -598,7 +598,7 @@
     <string name="user_need_lock_message" msgid="4311424336209509301">"Para poder crear un perfil restringido, debes configurar una pantalla de bloqueo que proteja tus aplicaciones y datos personales."</string>
     <string name="user_set_lock_button" msgid="1427128184982594856">"Establecer bloqueo"</string>
     <string name="user_switch_to_user" msgid="6975428297154968543">"Cambiar a <xliff:g id="USER_NAME">%s</xliff:g>"</string>
-    <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"Creando usuario nuevo…"</string>
+    <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"Creando nuevo usuario…"</string>
     <string name="creating_new_guest_dialog_message" msgid="1114905602181350690">"Creando nuevo invitado…"</string>
     <string name="add_user_failed" msgid="4809887794313944872">"No se ha podido crear el usuario"</string>
     <string name="add_guest_failed" msgid="8074548434469843443">"No se ha podido crear un nuevo invitado"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Sí, convertir en administrador"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"No convertir en administrador"</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>
@@ -685,7 +683,7 @@
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"Emitir <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"Cambiar salida"</string>
     <string name="back_navigation_animation" msgid="8105467568421689484">"Animaciones para acciones de retorno predictivas"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Habilitar animaciones del sistema para acciones de retorno predictivas."</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Habilita animaciones del sistema para acciones de retorno predictivas."</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"Este ajuste habilita animaciones del sistema para acciones gestuales predictivas. Exige definir el valor de enableOnBackInvokedCallback en \"verdadero\" para cada aplicación en el archivo de manifiesto."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"Muévete hacia la izquierda"</item>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Muévete hacia arriba"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Sin especificar"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutro"</string>
+    <string name="feminine" msgid="1529155595310784757">"Femenino"</string>
+    <string name="masculine" msgid="4653978041013996303">"Masculino"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-et/arrays.xml b/packages/SettingsLib/res/values-et/arrays.xml
index bbfca7d..6762abf 100644
--- a/packages/SettingsLib/res/values-et/arrays.xml
+++ b/packages/SettingsLib/res/values-et/arrays.xml
@@ -97,7 +97,7 @@
     <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="2494959071796102843">"Süsteemivaliku 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>
@@ -107,7 +107,7 @@
     <item msgid="506175145534048710">"Opus"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Süsteemi valiku kasutamine (vaikeseade)"</item>
+    <item msgid="8868109554557331312">"Süsteemivaliku 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>
@@ -117,38 +117,38 @@
     <item msgid="7940970833006181407">"Opus"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
-    <item msgid="926809261293414607">"Süsteemi valiku kasutamine (vaikeseade)"</item>
+    <item msgid="926809261293414607">"Süsteemivaliku kasutamine (vaikeseade)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
     <item msgid="3208896645474529394">"48,0 kHz"</item>
     <item msgid="8420261949134022577">"88,2 kHz"</item>
     <item msgid="8887519571067543785">"96,0 kHz"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
-    <item msgid="2284090879080331090">"Süsteemi valiku kasutamine (vaikeseade)"</item>
+    <item msgid="2284090879080331090">"Süsteemivaliku kasutamine (vaikeseade)"</item>
     <item msgid="1872276250541651186">"44,1 kHz"</item>
     <item msgid="8736780630001704004">"48,0 kHz"</item>
     <item msgid="7698585706868856888">"88,2 kHz"</item>
     <item msgid="8946330945963372966">"96,0 kHz"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
-    <item msgid="2574107108483219051">"Süsteemi valiku kasutamine (vaikeseade)"</item>
+    <item msgid="2574107108483219051">"Süsteemivaliku kasutamine (vaikeseade)"</item>
     <item msgid="4671992321419011165">"16 bitti diskreedi kohta"</item>
     <item msgid="1933898806184763940">"24 bitti diskreedi kohta"</item>
     <item msgid="1212577207279552119">"32 bitti diskreedi kohta"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
-    <item msgid="9196208128729063711">"Süsteemi valiku kasutamine (vaikeseade)"</item>
+    <item msgid="9196208128729063711">"Süsteemivaliku kasutamine (vaikeseade)"</item>
     <item msgid="1084497364516370912">"16 bitti diskreedi kohta"</item>
     <item msgid="2077889391457961734">"24 bitti diskreedi kohta"</item>
     <item msgid="3836844909491316925">"32 bitti diskreedi kohta"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
-    <item msgid="3014194562841654656">"Süsteemi valiku kasutamine (vaikeseade)"</item>
+    <item msgid="3014194562841654656">"Süsteemivaliku kasutamine (vaikeseade)"</item>
     <item msgid="5982952342181788248">"Mono"</item>
     <item msgid="927546067692441494">"Stereo"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
-    <item msgid="1997302811102880485">"Süsteemi valiku kasutamine (vaikeseade)"</item>
+    <item msgid="1997302811102880485">"Süsteemivaliku kasutamine (vaikeseade)"</item>
     <item msgid="8005696114958453588">"Mono"</item>
     <item msgid="1333279807604675720">"Stereo"</item>
   </string-array>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Heliallikas"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index 12e44fe..53995ce 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Juurdepääs SIM-ile"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD-heli: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD-heli"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Kuuldeaparaadid"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Kuuldeaparaatidega ühendatud"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Kuuldeaparaadid"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Kuuldeaparaatidega ühendatud"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Ühendatud üksusega LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Ühendatud meediumiheliga"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Ühendatud telefoniheliga"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Kasuta telefoniheli jaoks"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Kasutage failide edastamiseks"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Kasutage sisendi jaoks"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Kasuta kuulmisaparaatide puhul"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Kasutatakse kuuldeaparaatide puhul"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Üksuse LE_AUDIO kasutamine"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Seo"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"SEO"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Tühista"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Sidumine annab ühenduse ajal juurdepääsu kontaktidele ja kõneajaloole."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Ei saanud seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g> siduda."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Ei saanud seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g> siduda vale PIN-koodi või parooli tõttu."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Ei saanud seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g> siduda vale PIN-koodi või pääsuvõtme tõttu."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ei saa sidet luua."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> hülgas sidumise."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Arvuti"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Profiili valimine"</string>
     <string name="category_personal" msgid="6236798763159385225">"Isiklik"</string>
     <string name="category_work" msgid="4014193632325996115">"Töö"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Kloonimine"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Arendaja valikud"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Arendaja valikute lubamine"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Rakenduse arenduse valikute määramine"</string>
@@ -269,7 +270,7 @@
     <string name="debug_networking_category" msgid="6829757985772659599">"Võrgundus"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"Juhtmeta ekraaniühenduse sertifitseerimine"</string>
     <string name="wifi_verbose_logging" msgid="1785910450009679371">"Luba WiFi sõnaline logimine"</string>
-    <string name="wifi_scan_throttling" msgid="2985624788509913617">"WiFi-skannimise ahendamine"</string>
+    <string name="wifi_scan_throttling" msgid="2985624788509913617">"Ahenda WiFi-skannimist"</string>
     <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"WiFi-võrgu mittepüsiva MAC-aadressi juhuslikustamine"</string>
     <string name="mobile_data_always_on" msgid="8275958101875563572">"Hoia mobiilne andmeside alati aktiivne"</string>
     <string name="tethering_hardware_offload" msgid="4116053719006939161">"Ühenduse jagamise riistvaraline kiirendus"</string>
@@ -325,7 +326,7 @@
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Kas tühistada juurdepääs USB silumisele kõikides arvutites, mille olete varem volitanud?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Kas lubada arendajaseaded?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Need seaded on mõeldud ainult arendajatele. Need võivad põhjustada seadme ja seadmes olevate rakenduste rikkeid või valesti toimimist."</string>
-    <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"Kinnita rakendus USB kaudu"</string>
+    <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"Kinnita USB rakendused"</string>
     <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"Kontrolli, kas ADB/ADT-ga installitud rakendused on ohtlikud."</string>
     <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"Kuvatakse ilma nimedeta (ainult MAC-aadressidega) Bluetoothi seadmed"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"Keelatakse Bluetoothi absoluutse helitugevuse funktsioon, kui kaugseadmetega on helitugevuse probleeme (nt liiga vali heli või juhitavuse puudumine)."</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Praegusi puuteandmeid kuvav ekraani ülekate"</string>
     <string name="show_touches" msgid="8437666942161289025">"Kuva puudutused"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Kuvab puudutuste visuaalse tagasiside"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Kuva klahvivajutused"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Kuva visuaalset tagasisidet füüsiliste klahvivajutuste kohta"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Näita pinna värskendusi"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Akna pinna värskendamiseks kirjuta kogu akna pind üle"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Kuva ekraanikuva värskendusi"</string>
@@ -373,12 +376,12 @@
     <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Jõusta kõikides lokaatides paremalt vasakule ekraanipaigutus"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"Läbipaistev navigeerimisriba"</string>
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"Muuda navigeerimisriba taustavärv vaikimisi läbipaistvaks"</string>
-    <string name="window_blurs" msgid="6831008984828425106">"Luba akna tasemel hägust."</string>
+    <string name="window_blurs" msgid="6831008984828425106">"Luba akna tasemel hägustus"</string>
     <string name="force_msaa" msgid="4081288296137775550">"Jõusta 4x MSAA"</string>
     <string name="force_msaa_summary" msgid="9070437493586769500">"Luba 4x MSAA OpenGL ES 2.0 rakendustes"</string>
     <string name="show_non_rect_clip" msgid="7499758654867881817">"Silu mittetäisnurksed kärpimistoimingud"</string>
     <string name="track_frame_time" msgid="522674651937771106">"Profiili HWUI renderdamine"</string>
-    <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"GPU silumise kihtide lubamine"</string>
+    <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Luba GPU silumise kihid"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"GPU silumise kihtide laadimise lubamine silumisrakendustele"</string>
     <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Luba paljusõnaline logimine"</string>
     <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Veaaruannetesse kaasatakse täiendavad seadmepõhised teenusepakkuja logid, mis võivad sisaldada privaatset teavet, kasutada rohkem akut ja/või salvestusruumi."</string>
@@ -544,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Äsja"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"See telefon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"See tahvelarvuti"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Doki kõlar"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Väline seade"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Ühendatud seade"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"See telefon"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Selles seadmes ei saa esitada"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Lülitamiseks täiendage kontot"</string>
@@ -621,7 +627,7 @@
     <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" msgid="6843799963012259330">"Võite tegevused väljumisel salvestada või kustutada."</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>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"Liiguta üles"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Pole määratud"</string>
+    <string name="neuter" msgid="2075249330106127310">"Kesksugu"</string>
+    <string name="feminine" msgid="1529155595310784757">"Naissugu"</string>
+    <string name="masculine" msgid="4653978041013996303">"Meessugu"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-eu/arrays.xml b/packages/SettingsLib/res/values-eu/arrays.xml
index e2867c2..106dc89 100644
--- a/packages/SettingsLib/res/values-eu/arrays.xml
+++ b/packages/SettingsLib/res/values-eu/arrays.xml
@@ -208,7 +208,7 @@
     <item msgid="2675263395797191850">"Animazioa desaktibatuta"</item>
     <item msgid="5790132543372767872">"Animazio-eskala: 0,5x"</item>
     <item msgid="2529692189302148746">"Animazio-eskala: 1×"</item>
-    <item msgid="8072785072237082286">"Animazio-eskala: 1,5x"</item>
+    <item msgid="8072785072237082286">"Animazio-eskala: 1,5×"</item>
     <item msgid="3531560925718232560">"Animazio-eskala 2x"</item>
     <item msgid="4542853094898215187">"Animazio-eskala: 5x"</item>
     <item msgid="5643881346223901195">"Animazio-eskala: 10x"</item>
@@ -217,7 +217,7 @@
     <item msgid="3376676813923486384">"Animazioa desaktibatuta"</item>
     <item msgid="753422683600269114">"Animazio-eskala: 0,5x"</item>
     <item msgid="3695427132155563489">"Animazio-eskala: 1×"</item>
-    <item msgid="9032615844198098981">"Animazio-eskala: 1,5x"</item>
+    <item msgid="9032615844198098981">"Animazio-eskala: 1,5×"</item>
     <item msgid="8473868962499332073">"Animazio-eskala: 2x"</item>
     <item msgid="4403482320438668316">"Animazio-eskala: 5x"</item>
     <item msgid="169579387974966641">"Animazio-eskala: 10x"</item>
@@ -226,7 +226,7 @@
     <item msgid="6416998593844817378">"Animazioa desaktibatuta"</item>
     <item msgid="875345630014338616">"Animazio-eskala: 0,5x"</item>
     <item msgid="2753729231187104962">"Animazio-eskala: 1×"</item>
-    <item msgid="1368370459723665338">"Animazio-eskala: 1,5x"</item>
+    <item msgid="1368370459723665338">"Animazio-eskala: 1,5×"</item>
     <item msgid="5768005350534383389">"Animazio-eskala: 2x"</item>
     <item msgid="3728265127284005444">"Animazio-eskala: 5x"</item>
     <item msgid="2464080977843960236">"Animazio-eskala: 10x"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Audio-iturburua"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index c882eb9..06528e5 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -99,8 +99,8 @@
     <string name="bluetooth_battery_level" msgid="2893696778200201555">"Bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="bluetooth_battery_level_untethered" msgid="4002282355111504349">"Ezk. gailuaren bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. Esk- gailuaren bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
     <string name="bluetooth_active_no_battery_level" msgid="4155462233006205630">"Aktibo"</string>
-    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktibo, ezkerreko audifonoa soilik"</string>
-    <string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktibo, eskuineko audifonoa soilik"</string>
+    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktibo, ezkerrekoa soilik"</string>
+    <string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktibo, eskuinekoa soilik"</string>
     <string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktibo, ezkerreko eta eskuineko audifonoak"</string>
     <string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Euskarriaren audioa"</string>
     <string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefono-deiak"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIMerako sarbidea"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Kalitate handiko audioa: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Kalitate handiko audioa"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Audifonoak"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Audifonoetara konektatuta"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Audifonoak"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"Kontsumo txikiko Bluetooth bidezko audioa"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Audifonoetara konektatuta"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE audio-ra konektatuta"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Euskarriaren audiora konektatuta"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Telefonoaren audiora konektatuta"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Erabili telefonoaren audiorako"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Erabili fitxategi-transferentziarako"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Erabili idazketarako"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Erabili audifonoak"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Erabili audifonoekin"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Erabili LE_AUDIO-rako"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Parekatu"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"PAREKATU"</string>
@@ -215,12 +215,13 @@
     <string name="choose_profile" msgid="343803890897657450">"Aukeratu profila"</string>
     <string name="category_personal" msgid="6236798763159385225">"Pertsonalak"</string>
     <string name="category_work" msgid="4014193632325996115">"Lanekoak"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klonatu"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Garatzaileentzako aukerak"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Gaitu garatzaileen aukerak"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Ezarri aplikazioak garatzeko aukerak"</string>
     <string name="development_settings_not_available" msgid="355070198089140951">"Erabiltzaile honek ez ditu garatzaileen aukerak"</string>
     <string name="vpn_settings_not_available" msgid="2894137119965668920">"Erabiltzaile honek ezin ditu VPN ezarpenak atzitu"</string>
-    <string name="tethering_settings_not_available" msgid="266821736434699780">"Erabiltzaile honek ezin ditu konexioa partekatzeko ezarpenak atzitu"</string>
+    <string name="tethering_settings_not_available" msgid="266821736434699780">"Erabiltzaile honek ezin ditu konexioa partekatzeko aukeraren ezarpenak atzitu"</string>
     <string name="apn_settings_not_available" msgid="1147111671403342300">"Erabiltzaile honek ezin ditu APN ezarpenak atzitu"</string>
     <string name="enable_adb" msgid="8072776357237289039">"USB bidezko arazketa"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Gaitu arazketa modua USBa konektatzean"</string>
@@ -269,7 +270,7 @@
     <string name="debug_networking_category" msgid="6829757985772659599">"Sareak"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"Hari gabe bistaratzeko ziurtagiria"</string>
     <string name="wifi_verbose_logging" msgid="1785910450009679371">"Gaitu wifi-sareetan saioa hasteko modu xehatua"</string>
-    <string name="wifi_scan_throttling" msgid="2985624788509913617">"Wifi-sareen bilaketaren muga"</string>
+    <string name="wifi_scan_throttling" msgid="2985624788509913617">"Wifi-sareen bilaketaren moteltzea"</string>
     <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Wifi-konexioetan iraunkorrak ez diren MAC helbideak ausaz antolatzea"</string>
     <string name="mobile_data_always_on" msgid="8275958101875563572">"Datu-konexioa beti aktibo"</string>
     <string name="tethering_hardware_offload" msgid="4116053719006939161">"Konexioa partekatzeko hardwarearen azelerazioa"</string>
@@ -342,7 +343,7 @@
     <string name="select_application" msgid="2543228890535466325">"Hautatu aplikazioa"</string>
     <string name="no_application" msgid="9038334538870247690">"Ezer ez"</string>
     <string name="wait_for_debugger" msgid="7461199843335409809">"Itxaron araztaileari"</string>
-    <string name="wait_for_debugger_summary" msgid="6846330006113363286">"Araztutako aplikazioa araztailea erantsi arte itxaroten ari da exekutatu aurretik"</string>
+    <string name="wait_for_debugger_summary" msgid="6846330006113363286">"Araztutako aplikazioak araztailea erantsi arte itxaroten du exekutatu aurretik"</string>
     <string name="debug_input_category" msgid="7349460906970849771">"Sarrera"</string>
     <string name="debug_drawing_category" msgid="5066171112313666619">"Marrazketa"</string>
     <string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardware bidez bizkortutako errendatzea"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Ukipen-datuak erakusteko pantaila-gainjartzea"</string>
     <string name="show_touches" msgid="8437666942161289025">"Erakutsi sakatutakoa"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Erakutsi sakatutako elementuak"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Erakutsi tekla-sakatzeak"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Erakutsi sakatutako tekla fisikoak"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Erakutsi azaleko aldaketak"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Distirarazi leiho osoen azalak haiek eguneratzean"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Erakutsi ikuspegi-aldaketak"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Denbora gehiago."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Denbora gutxiago."</string>
     <string name="cancel" msgid="5665114069455378395">"Utzi"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Hurrengoa"</string>
+    <string name="back" msgid="5554327870352703710">"Atzera"</string>
+    <string name="save" msgid="3745809743277153149">"Gorde"</string>
     <string name="okay" msgid="949938843324579502">"Ados"</string>
     <string name="done" msgid="381184316122520313">"Eginda"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmak eta abisuak"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Oraintxe"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Telefono hau"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Tableta hau"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Oinarri bozgorailuduna"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Kanpoko gailua"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Konektatutako gailua"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Telefono hau"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Ezin da erreproduzitu gailu honetan"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Aldatzeko, bertsio-berritu kontua"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Beste erabiltzaile bat gehitu nahi duzu?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Gailu hau beste pertsona batzuekin partekatzeko, sortu erabiltzaile gehiago. Erabiltzaile bakoitzak bere eremua izango du eta, bertan, aplikazioak, horma-papera eta antzekoak pertsonalizatu ahal izango ditu. Horrez gain, agian erabiltzaile guztiei eragingo dieten ezarpen batzuk ere doi daitezke; adibidez, wifi-konexioarena.\n\nErabiltzaile bat gehitzen duzunean, pertsona horrek berak konfiguratu beharko du bere eremua.\n\nEdozein erabiltzailek egunera ditzake beste erabiltzaile guztien aplikazioak. Baliteke erabilerraztasun-ezarpenak eta -zerbitzuak ez transferitzea erabiltzaile berriei."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Erabiltzaile bat gehitzen duzunean, erabiltzaile horrek bere eremua konfiguratu beharko du.\n\nEdozein erabiltzailek egunera ditzake beste erabiltzaile guztien aplikazioak."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Administratzaile egin nahi duzu erabiltzaile hau?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Beste erabiltzaileek baino baimen gehiago dauzkate administratzaileek. Administratzaileek erabiltzaile guztiak kudea ditzakete, gailu hau eguneratu edo berrezarri, ezarpenak aldatu, instalatutako aplikazio guztiak ikusi, eta besteei administratzaile-baimenak eman eta kendu."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Egin administratzaile"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Erabiltzailea konfiguratu?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Ziurtatu pertsona horrek gailua hartu eta bere eremua konfigura dezakeela"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Profila konfiguratu?"</string>
@@ -593,7 +593,7 @@
     <string name="user_add_user_type_title" msgid="551279664052914497">"Gehitu"</string>
     <string name="user_new_user_name" msgid="60979820612818840">"Erabiltzaile berria"</string>
     <string name="user_new_profile_name" msgid="2405500423304678841">"Profil berria"</string>
-    <string name="user_info_settings_title" msgid="6351390762733279907">"Erabiltzaile-info."</string>
+    <string name="user_info_settings_title" msgid="6351390762733279907">"Erabiltzaile-informazioa"</string>
     <string name="profile_info_settings_title" msgid="105699672534365099">"Profileko informazioa"</string>
     <string name="user_need_lock_message" msgid="4311424336209509301">"Profil murriztua sortu aurretik, aplikazioak eta datu pertsonalak babesteko, pantaila blokeatzeko metodo bat konfiguratu beharko duzu."</string>
     <string name="user_set_lock_button" msgid="1427128184982594856">"Ezarri blokeoa"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Bai, egin administratzaile"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Ez, ez egin administratzaile"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Eraman gora"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"%% <xliff:g id="PERCENTAGE">%1$d</xliff:g>"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Zehaztugabea"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutroa"</string>
+    <string name="feminine" msgid="1529155595310784757">"Emakumezkoa"</string>
+    <string name="masculine" msgid="4653978041013996303">"Gizonezkoa"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-fa/arrays.xml b/packages/SettingsLib/res/values-fa/arrays.xml
index 7feef70..28826bf 100644
--- a/packages/SettingsLib/res/values-fa/arrays.xml
+++ b/packages/SettingsLib/res/values-fa/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"‏4K (ایمن)"</item>
     <item msgid="7322156123728520872">"‏4K (ارتقا یافته)"</item>
     <item msgid="7735692090314849188">"‏4K (ارتقا یافته، ایمن)"</item>
-    <item msgid="7346816300608639624">"‏720p،‏ 1080p (صفحه‌نمایش دوتایی)"</item>
+    <item msgid="7346816300608639624">"‫720p، ‫1080p ‫(Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"خالی"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"منبع صوتی"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"۰"</item>
+    <item msgid="2646486108212979598">"۱"</item>
+    <item msgid="3753634915787796632">"۲"</item>
+    <item msgid="4779928470672877922">"۳"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index 5643322..a46e327 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -86,7 +86,7 @@
     <string name="bluetooth_disconnecting" msgid="7638892134401574338">"در حال قطع اتصال..."</string>
     <string name="bluetooth_connecting" msgid="5871702668260192755">"در حال اتصال…"</string>
     <string name="bluetooth_connected" msgid="8065345572198502293">"متصل<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
-    <string name="bluetooth_pairing" msgid="4269046942588193600">"در حال مرتبط‌سازی..."</string>
+    <string name="bluetooth_pairing" msgid="4269046942588193600">"درحال جفت کردن..."</string>
     <string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"متصل (بدون تلفن)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"متصل (بدون رسانه)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"متصل (بدون تلفن یا رسانه)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"دسترسی سیم‌کارت"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"‏صدای HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"‏صدای HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"سمعک"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"صدای کم‌مصرف"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"به سمعک متصل شد"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"سمعک"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"صدای کم‌مصرف"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"متصل به سمعک"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"به «صدای کم‌مصرف» وصل است"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"به رسانه صوتی متصل شد"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"به تلفن صوتی متصل شد"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"استفاده برای تلفن صوتی"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"استفاده برای انتقال فایل"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"استفاده برای چاپ"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"استفاده کردن برای سمعک"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"استفاده برای سمعک"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"‏استفاده برای LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"مرتبط‌سازی"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"مرتبط‌سازی"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"انتخاب نمایه"</string>
     <string name="category_personal" msgid="6236798763159385225">"شخصی"</string>
     <string name="category_work" msgid="4014193632325996115">"کاری"</string>
+    <string name="category_clone" msgid="1554511758987195974">"مشابه‌سازی"</string>
     <string name="development_settings_title" msgid="140296922921597393">"گزینه‌های برنامه‌نویسان"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"فعال کردن گزینه‌های برنامه‌نویس"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"تنظیم گزینه‌های مربوط به طراحی برنامه"</string>
@@ -230,9 +231,9 @@
     <string name="adb_wireless_error" msgid="721958772149779856">"خطا"</string>
     <string name="adb_wireless_settings" msgid="2295017847215680229">"اشکال‌زدایی بی‌سیم"</string>
     <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"برای مشاهده و استفاده از دستگاه‌های در دسترس، اشکال‌زدایی بی‌سیم را روشن کنید"</string>
-    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"مرتبط کردن دستگاه با رمزینه پاسخ‌سریع"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"جفت کردن دستگاه با رمزینه پاسخ‌سریع"</string>
     <string name="adb_pair_method_qrcode_summary" msgid="7130694277228970888">"دستگاه‌های جدید را بااستفاده از اسکنر رمزینه پاسخ‌سریع مرتبط کنید"</string>
-    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"مرتبط کردن دستگاه با کد مرتبط‌سازی"</string>
+    <string name="adb_pair_method_code_title" msgid="1122590300445142904">"جفت کردن دستگاه با کد مرتبط‌سازی"</string>
     <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"دستگاه‌های جدید را با استفاده از کد شش رقمی مرتبط کنید"</string>
     <string name="adb_paired_devices_title" msgid="5268997341526217362">"دستگاه‌های مرتبط‌شده"</string>
     <string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"درحال‌حاضر متصل"</string>
@@ -241,13 +242,13 @@
     <string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"اثرانگشت دستگاه: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
     <string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"اتصال ناموفق"</string>
     <string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"مطمئن شوید که <xliff:g id="DEVICE_NAME">%1$s</xliff:g> به شبکه درستی متصل شده باشد"</string>
-    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"مرتبط کردن با دستگاه"</string>
+    <string name="adb_pairing_device_dialog_title" msgid="7141739231018530210">"جفت کردن با دستگاه"</string>
     <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"‏کد مرتبط‌سازی Wi‑Fi"</string>
     <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"مرتبط‌سازی ناموفق"</string>
     <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"مطمئن شوید که دستگاه به همان شبکه متصل باشد."</string>
     <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"‏دستگاه را ازطریق Wi‑Fi و با اسکن کردن رمزینه پاسخ‌سریع مرتبط کنید"</string>
-    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"مرتبط‌سازی دستگاه…"</string>
-    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"مرتبط کردن دستگاه انجام نشد. یا رمزینه پاسخ‌سریع اشتباه بوده است، یا دستگاه به همان شبکه متصل نیست."</string>
+    <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"جفت کردن دستگاه…"</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"جفت کردن دستگاه انجام نشد. یا رمزینه پاسخ‌سریع اشتباه بوده است، یا دستگاه به همان شبکه متصل نیست."</string>
     <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"‏نشانی IP و درگاه"</string>
     <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"اسکن رمزینه پاسخ‌سریع"</string>
     <string name="adb_wireless_qrcode_pairing_description" msgid="6014121407143607851">"‏دستگاه را ازطریق Wi‑Fi و با اسکن کردن رمزینه پاسخ‌سریع مرتبط کنید"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"هم‌پوشانی صفحه‌نمایش با نمایش داده لمسی فعلی"</string>
     <string name="show_touches" msgid="8437666942161289025">"نمایش ضربه‌ها"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"نمایش بازخورد تصویری برای ضربه‌ها"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"نمایش فشار کلیدها"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"نمایش بازخورد بصری برای فشار دادن کلیدهای فیزیکی"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"نمایش به‌روزرسانی سطح"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"هنگام به‌روزرسانی سطوح پنجره همه فلش شوند"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"نمایش به‌روزرسانی‌های نما"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"زمان بیشتر."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"زمان کمتر."</string>
     <string name="cancel" msgid="5665114069455378395">"لغو"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"بعدی"</string>
+    <string name="back" msgid="5554327870352703710">"برگشتن"</string>
+    <string name="save" msgid="3745809743277153149">"ذخیره"</string>
     <string name="okay" msgid="949938843324579502">"تأیید"</string>
     <string name="done" msgid="381184316122520313">"تمام"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"زنگ‌های هشدار و یادآوری‌ها"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"هم‌اکنون"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"این تلفن"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"این رایانه لوحی"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"بلندگوی پایه اتصال"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"دستگاه خارجی"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"دستگاه متصل"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"این تلفن"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"نمی‌توان در این دستگاه پخش کرد"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"برای تغییر، حساب را ارتقا دهید"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"کاربر"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"نمایه محدود شده"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"کاربر جدیدی اضافه می‌کنید؟"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"‏با ایجاد کاربران بیشتر، می‌توانید این دستگاه را با دیگران به‌اشتراک بگذارید. هر کاربر فضای مخصوص به خودش را دارد که می‌تواند آن را با برنامه‌ها، کاغذدیواری و موارد دیگر سفارشی کند. همچنین کاربران می‌توانند تنظیماتی در دستگاه ایجاد کنند، مانند تنظیمات Wi-Fi، که بر تنظیمات بقیه اثر دارد.\n\nوقتی کاربر جدیدی اضافه می‌کنید، آن شخص باید فضای خودش را تنظیم کند.\n\nهر کاربر می‌تواند برنامه‌ها را برای سایر کاربران به‌روزرسانی کند. دسترس‌پذیری، تنظیمات، و سرویس‌ها قابل‌انتقال به کاربر جدید نیستند."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"‏با ایجاد کاربران بیشتر، می‌توانید از این دستگاه مشترکاً استفاده کنید. هر کاربر فضای مخصوص به خودش را دارد که می‌تواند آن را با برنامه‌ها، کاغذدیواری و موارد دیگر سفارشی کند. علاوه‌براین کاربران می‌توانند تنظیماتی در دستگاه ایجاد کنند، مانند تنظیمات Wi-Fi، که بر تنظیمات بقیه اثر دارد.\n\nوقتی کاربر جدیدی اضافه می‌کنید، آن شخص باید فضای خودش را تنظیم کند.\n\nهر کاربر می‌تواند برنامه‌ها را برای سایر کاربران به‌روزرسانی کند. دسترس‌پذیری، تنظیمات، و سرویس‌ها قابل‌انتقال به کاربر جدید نیستند."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"وقتی کاربر جدیدی اضافه می‌کنید آن فرد باید فضای خودش را تنظیم کند.\n\nهر کاربری می‌تواند برنامه‌ها را برای همه کاربران دیگر به‌روزرسانی کند."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"این کاربر سرپرست شود؟"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"سرپرستان امتیازهای ویژه‌ای دارند که کاربران دیگر ندارند. سرپرست می‌تواند همه کاربران را مدیریت کند، این دستگاه را به‌روز یا بازنشانی کند، تنظیمات را تغییر دهد، همه برنامه‌های نصب‌شده را ببیند، و امتیازهای سرپرست را به دیگران اعطا کند یا از آن‌ها بگیرد."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"انتخاب به‌عنوان سرپرست"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"هم اکنون کاربر تنظیم شود؟"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"مطمئن شوید شخص در دسترس است تا دستگاه را بگیرد و فضایش را تنظیم کند"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"اکنون نمایه را تنظیم می‌کنید؟"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"با این کار، جلسه مهمان جدیدی شروع خواهد شد و همه برنامه‌ها و داده‌ها از جلسه کنونی حذف خواهند شد"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"از حالت مهمان خارج می‌شوید؟"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"با این کار، برنامه‌ها و داده‌ها از جلسه مهمان کنونی حذف خواهند شد."</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"بله، سرپرست شود"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"نه، سرپرست نشود"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"خروج"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"فعالیت مهمان ذخیره شود؟"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"می‌توانید فعالیت جلسه کنونی را ذخیره کنید یا همه برنامه و داده‌ها را حذف کنید"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"انتقال به‌بالا"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>٪"</string>
+    <string name="not_specified" msgid="5423502443185110328">"نامشخص"</string>
+    <string name="neuter" msgid="2075249330106127310">"خنثی"</string>
+    <string name="feminine" msgid="1529155595310784757">"مؤنث"</string>
+    <string name="masculine" msgid="4653978041013996303">"مذکر"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-fi/arrays.xml b/packages/SettingsLib/res/values-fi/arrays.xml
index 5a1dc18..92814de 100644
--- a/packages/SettingsLib/res/values-fi/arrays.xml
+++ b/packages/SettingsLib/res/values-fi/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Äänilähde"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 6377d2a..a5ce348 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM-kortin käyttö"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD-ääni: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD-ääni"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Kuulolaitteet"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Yhdistetty kuulolaitteisiin"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Kuulolaitteet"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Yhdistetty kuulolaitteisiin"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE Audio yhdistetty"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Yhdistetty median ääneen"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Yhdistetty puhelimen ääneen"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Käytä puhelimen äänille"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Käytä tiedostojen siirtoon"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Käytä syöttöön"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Käytä kuulolaitteilla"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Käytä kuulolaitteilla"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Käyttö: LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Muodosta laitepari"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"MUODOSTA LAITEPARI"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Peru"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Laiteparin muodostaminen mahdollistaa yhteystietojen ja soittohistorian käyttämisen yhteyden aikana."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Laiteparin muodostaminen laitteeseen <xliff:g id="DEVICE_NAME">%1$s</xliff:g> epäonnistui."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Laiteparia (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>) ei voitu muodostaa, koska PIN-koodi tai avain oli virheellinen."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Laiteparia (<xliff:g id="DEVICE_NAME">%1$s</xliff:g>) ei voitu muodostaa, koska PIN tai avain oli väärä."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Ei yhteyttä laitteeseen <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Laite <xliff:g id="DEVICE_NAME">%1$s</xliff:g> torjui laitepariyhteyden."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Tietokone"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Valitse profiili"</string>
     <string name="category_personal" msgid="6236798763159385225">"Henkilökohtainen"</string>
     <string name="category_work" msgid="4014193632325996115">"Työ"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klooni"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Kehittäjäasetukset"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Ota kehittäjäasetukset käyttöön"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Valitse sovellusten kehittämisasetukset"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Näytön peittokuva näyttää nykyiset kosketustiedot"</string>
     <string name="show_touches" msgid="8437666942161289025">"Näytä kosketus"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Anna visuaalista palautetta kosketuksesta"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Näytä näppäinpainallukset"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Näytä visuaalista palautetta näppäinpainalluksista"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Näytä pintapäivitykset"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Väläytä koko ikkunoiden pinnat päivitettäessä"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Näytä näyttöpäivitykset"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Enemmän aikaa"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Vähemmän aikaa"</string>
     <string name="cancel" msgid="5665114069455378395">"Peru"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Seuraava"</string>
+    <string name="back" msgid="5554327870352703710">"Takaisin"</string>
+    <string name="save" msgid="3745809743277153149">"Tallenna"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Valmis"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Herätykset ja muistutukset"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Äsken"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Tämä puhelin"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Tämä tabletti"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Telinekaiutin"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Ulkoinen laite"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Yhdistetty laite"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Tämä puhelin"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Ei voi toistaa tällä laitteella"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Vaihda päivittämällä tili"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Käyttäjä"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Rajoitettu profiili"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Lisätäänkö uusi käyttäjä?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Voit jakaa tämän laitteen muiden kanssa luomalla lisää käyttäjiä. Kullakin käyttäjällä on oma tilansa, jota he voivat muokata esimerkiksi omilla sovelluksilla ja taustakuvilla. Käyttäjät voivat myös muokata laiteasetuksia, kuten Wi‑Fi-asetuksia, jotka vaikuttavat laitteen kaikkiin käyttäjiin.\n\nKun lisäät uuden käyttäjän, hänen tulee määrittää oman tilansa asetukset.\n\nKaikki käyttäjät voivat päivittää muiden käyttäjien sovelluksia. Esteettömyysominaisuuksia tai ‑palveluita ei välttämättä siirretä uudelle käyttäjälle."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Voit jakaa tämän laitteen muiden kanssa luomalla lisää käyttäjiä. Kullakin käyttäjällä on oma tilansa, jota he voivat muokata esimerkiksi omilla sovelluksilla ja taustakuvilla. Käyttäjät voivat myös muokata laiteasetuksia, kuten Wi‑Fi-asetuksia, jotka vaikuttavat laitteen kaikkiin käyttäjiin.\n\nKun lisäät uuden käyttäjän, hänen tulee määrittää oman tilansa asetukset.\n\nKaikki käyttäjät voivat päivittää muiden käyttäjien sovelluksia. Saavutettavuusominaisuuksia tai ‑palveluita ei välttämättä siirretä uudelle käyttäjälle."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Kun lisäät uuden käyttäjän, hänen tulee määrittää oman tilansa asetukset.\n\nKaikki käyttäjät voivat päivittää sovelluksia muille käyttäjille."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Tehdäänkö tästä käyttäjästä järjestelmänvalvoja?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Järjestelmänvalvojilla on enemmän oikeuksia kuin muilla. Järjestelmänvalvoja voi hallinnoida kaikkia käyttäjiä, päivittää tai nollata tämän laitteen, muokata asetuksia, nähdä asennetut sovellukset ja antaa tai peruuttaa järjestelmänvalvojan oikeudet muilta."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Muuta järjestelmänvalvojaksi"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Lisätäänkö käyttäjä nyt?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Varmista, että käyttäjä voi ottaa laitteen nyt ja määrittää oman tilansa."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Määritetäänkö profiilin asetukset nyt?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Kyllä, tee hänestä järjestelmänvalvoja"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Ei, älä tee hänestä järjestelmänvalvojaa"</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>
@@ -685,7 +683,7 @@
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"Lähetä <xliff:g id="SWITCHAPP">%1$s</xliff:g>-sovellusta"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"Muuta ulostuloa"</string>
     <string name="back_navigation_animation" msgid="8105467568421689484">"Takaisin siirtymisen ennakoivat animaatiot"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Ota käyttöön takaisin siirtymisen ennakoivat järjestelmäanimaatiot."</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Ota käyttöön takaisin siirtymisen ennakoivat järjestelmäanimaatiot"</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"Asetus ottaa järjestelmäanimaatiot käyttöön ennakoiville eleanimaatioille. Se edellyttää, että enableOnBackInvokedCallback-arvo on Tosi sovelluksen manifestitiedostossa."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"Siirrä vasemmalle"</item>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Siirrä ylös"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Ei määritetty"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutri"</string>
+    <string name="feminine" msgid="1529155595310784757">"Feminiini"</string>
+    <string name="masculine" msgid="4653978041013996303">"Maskuliini"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-fr-rCA/arrays.xml b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
index 06a703f..8bba20d 100644
--- a/packages/SettingsLib/res/values-fr-rCA/arrays.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Source audio"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index b0203dc..fa565e6 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -37,7 +37,7 @@
     <string name="wifi_security_wep" msgid="1413627788581122366">"WEP"</string>
     <string name="wifi_security_wpa" msgid="1072450904799930636">"WPA-Personal"</string>
     <string name="wifi_security_wpa2" msgid="4038267581230425543">"WPA2-Personal"</string>
-    <string name="wifi_security_wpa_wpa2" msgid="946853615482465986">"WPA/WPA2-Personal"</string>
+    <string name="wifi_security_wpa_wpa2" msgid="946853615482465986">"WPA/WPA2-Personnel"</string>
     <string name="wifi_security_eap" msgid="6179633834446852269">"WPA/WPA2/WPA3-Enterprise"</string>
     <string name="wifi_security_eap_wpa" msgid="6189023812330549957">"WPA-Enterprise"</string>
     <string name="wifi_security_eap_wpa_wpa2" msgid="1089879674896108216">"WPA/WPA2-Enterprise"</string>
@@ -86,7 +86,7 @@
     <string name="bluetooth_disconnecting" msgid="7638892134401574338">"Déconnexion…"</string>
     <string name="bluetooth_connecting" msgid="5871702668260192755">"Connexion en cours…"</string>
     <string name="bluetooth_connected" msgid="8065345572198502293">"Connecté à <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
-    <string name="bluetooth_pairing" msgid="4269046942588193600">"Association…"</string>
+    <string name="bluetooth_pairing" msgid="4269046942588193600">"Association en cours…"</string>
     <string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Connecté (aucun téléphone) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Connecté (aucun média) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Connecté (aucun téléphone ni média) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
@@ -99,7 +99,7 @@
     <string name="bluetooth_battery_level" msgid="2893696778200201555">"Pile : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="bluetooth_battery_level_untethered" msgid="4002282355111504349">"G : charge à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>; D : charge à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
     <string name="bluetooth_active_no_battery_level" msgid="4155462233006205630">"Actif"</string>
-    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Active, gauche seulement"</string>
+    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Actif, gauche seulement"</string>
     <string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Active, droite seulement"</string>
     <string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Active, gauche et droite"</string>
     <string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Paramètres audio du support"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Accès à la carte SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Audio HD : <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Audio HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Prothèses auditives"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Connecté aux prothèses auditives"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Prothèses auditives"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Connecté aux prothèses auditives"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Connecté par LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Connecté aux paramètres audio du média"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Connecté à l\'audio du téléphone"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Utiliser pour les paramètres audio du téléphone"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Utiliser pour le transfert de fichiers"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Utiliser comme entrée"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Utiliser avec les prothèses auditives"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Utiliser avec les prothèses auditives"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Utiliser pour LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Associer"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ASSOCIER"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Sélectionnez un profil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Personnel"</string>
     <string name="category_work" msgid="4014193632325996115">"Professionnel"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Cloner"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Options pour les développeurs"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Activer les options pour les développeurs"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Définir les options pour le développement de l\'application"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Superposition écran indiquant données actuelles"</string>
     <string name="show_touches" msgid="8437666942161289025">"Afficher éléments sélect."</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Afficher repère visuel pour éléments sélectionnés"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Afficher press. de touches"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Afficher retour visuel pour press. de touches phys."</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Afficher mises à jour surface"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Faire clignoter les surfaces à chaque mise à jour"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Afficher m. à j. affichage"</string>
@@ -393,7 +396,7 @@
     <string name="show_all_anrs" msgid="9160563836616468726">"Afficher ANR arrière-plan"</string>
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"Afficher le message « L\'application ne répond plus » pour les applications en arrière-plan"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Affich. avertiss. canal notification"</string>
-    <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Afficher avertiss. à l\'écran quand une app présente une notific. sans canal valide"</string>
+    <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Afficher avertiss. à l\'écran quand une appli présente une notif. sans canal valide"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"Forcer l\'autor. d\'applis sur stockage externe"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Rend possible l\'enregistrement de toute application sur un espace de stockage externe, indépendamment des valeurs du fichier manifeste"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"Forcer les activités à être redimensionnables"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Plus longtemps."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Moins longtemps."</string>
     <string name="cancel" msgid="5665114069455378395">"Annuler"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Suivant"</string>
+    <string name="back" msgid="5554327870352703710">"Retour"</string>
+    <string name="save" msgid="3745809743277153149">"Enregistrer"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"OK"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmes et rappels"</string>
@@ -547,12 +547,15 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"À l\'instant"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Ce téléphone"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Cette tablette"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Haut-parleur du socle"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Appareil externe"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Appareil connecté"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Ce téléphone"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Impossible de faire jouer le contenu sur cet appareil"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Mettez à jour le compte pour passer à la version payante"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Lecture des téléchargements impossible ici"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Réessayez après l\'annonce"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Activer l\'appareil pour faire jouer le contenu ici"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Activez l\'appareil pour faire jouer le contenu ici"</string>
     <string name="media_output_status_unauthorized" msgid="5880222828273853838">"L\'appareil n\'est pas autorisé à faire jouer le contenu"</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Impossible de faire jouer ce contenu multimédia ici"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problème de connexion. Éteingez et rallumez l\'appareil"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Ajouter un utilisateur?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Vous pouvez partager cet appareil avec d\'autres personnes en ajoutant des utilisateurs. Chaque utilisateur dispose de son propre espace, où il peut personnaliser, entre autres, ses applications et son fond d\'écran. Chacun peut également modifier les paramètres de l\'appareil, comme les réseaux Wi-Fi, qui touchent tous les utilisateurs.\n\nLorsque vous ajoutez un utilisateur, celui-ci doit configurer son propre espace.\n\nTout utilisateur peut mettre à jour les applications pour les autres utilisateurs. Il se peut que les paramètres et les services d\'accessibilité ne soient pas transférés aux nouveaux utilisateurs."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Lorsque vous ajoutez un utilisateur, celui-ci doit configurer son espace.\n\nTout utilisateur peut mettre à jour les applications pour tous les autres utilisateurs."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Définir cet utilisateur comme administrateur?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Les administrateurs ont des privilèges spéciaux que les autres utilisateurs n\'ont pas. Un administrateur peut gérer tous les utilisateurs, mettre à jour ou réinitialiser cet appareil, modifier les paramètres, voir toutes les applications installées et accorder ou révoquer les privilèges d\'administrateur à d\'autres personnes."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Définir comme administrateur"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurer l\'utilisateur?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Assurez-vous que la personne est disponible et qu\'elle peut utiliser l\'appareil pour configurer son espace."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Configurer le profil maintenant?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Oui, le définir comme administrateur"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Non, ne pas le définir comme administrateur"</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>
@@ -677,9 +675,9 @@
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Clavier physique"</string>
     <string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Sélectionner disposition du clavier"</string>
     <string name="keyboard_layout_default_label" msgid="1997292217218546957">"Par défaut"</string>
-    <string name="turn_screen_on_title" msgid="3266937298097573424">"Activation de l\'écran"</string>
+    <string name="turn_screen_on_title" msgid="3266937298097573424">"Activer l\'écran"</string>
     <string name="allow_turn_screen_on" msgid="6194845766392742639">"Autoriser l\'activation de l\'écran"</string>
-    <string name="allow_turn_screen_on_description" msgid="43834403291575164">"Autorisez une application à activer l\'écran. Lorsque vous accordez cette autorisation, l\'application peut activer l\'écran à tout moment sans votre volonté explicite."</string>
+    <string name="allow_turn_screen_on_description" msgid="43834403291575164">"Autorisez une application à activer l\'écran. Lorsque vous accordez cette autorisation, l\'application peut activer l\'écran à tout moment sans que vous lui demandiez."</string>
     <string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"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="268234802198852753">"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="5749813313369517812">"Diffuser <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Déplacez vers le haut"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Non précisé"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutre"</string>
+    <string name="feminine" msgid="1529155595310784757">"Féminin"</string>
+    <string name="masculine" msgid="4653978041013996303">"Masculin"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-fr/arrays.xml b/packages/SettingsLib/res/values-fr/arrays.xml
index 6377160..b32adc9 100644
--- a/packages/SettingsLib/res/values-fr/arrays.xml
+++ b/packages/SettingsLib/res/values-fr/arrays.xml
@@ -200,7 +200,7 @@
   </string-array>
   <string-array name="select_logpersist_summaries">
     <item msgid="97587758561106269">"Désactivé"</item>
-    <item msgid="7126170197336963369">"Toutes les mémoires tampon journal"</item>
+    <item msgid="7126170197336963369">"Tous les tampons de journaux"</item>
     <item msgid="7167543126036181392">"Toutes sauf les mémoires tampon journal radio"</item>
     <item msgid="5135340178556563979">"tampon journal du noyau uniquement"</item>
   </string-array>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Source audio"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 33c4b98..4972ebb 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -111,12 +111,12 @@
     <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>
+    <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Accès à la SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Audio HD : <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Audio HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Appareils auditifs"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Connexion établie avec les appareils auditifs"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Appareils auditifs"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Connexion établie avec les appareils auditifs"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Connecté à LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Connecté aux paramètres audio du média"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Connecté aux paramètres audio du téléphone"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Utiliser pour les paramètres audio du téléphone"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Utiliser pour le transfert de fichiers"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Utiliser comme entrée"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Utiliser pour les appareils auditifs"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Utiliser pour les appareils auditifs"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Utiliser pour LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Associer"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ASSOCIER"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Sélectionner un profil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Perso"</string>
     <string name="category_work" msgid="4014193632325996115">"Pro"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clone"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Options pour les développeurs"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Activer les options pour les développeurs"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Définir les options pour le développement de l\'application"</string>
@@ -224,7 +225,7 @@
     <string name="apn_settings_not_available" msgid="1147111671403342300">"Les paramètres de point d\'accès ne sont pas disponibles pour cet utilisateur."</string>
     <string name="enable_adb" msgid="8072776357237289039">"Débogage USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Mode de débogage en connexion USB"</string>
-    <string name="clear_adb_keys" msgid="3010148733140369917">"Annuler autorisations pour débog. USB"</string>
+    <string name="clear_adb_keys" msgid="3010148733140369917">"Révoquer les autorisations de débogage USB"</string>
     <string name="enable_adb_wireless" msgid="6973226350963971018">"Débogage sans fil"</string>
     <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Mode de débogage en connexion Wi-Fi"</string>
     <string name="adb_wireless_error" msgid="721958772149779856">"Erreur"</string>
@@ -257,7 +258,7 @@
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Afficher un bouton dans le menu de démarrage permettant de créer un rapport de bug"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Laisser activé"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"L\'écran ne se met jamais en veille lorsque l\'appareil est en charge"</string>
-    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Activer journaux HCI Bluetooth"</string>
+    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Activer le journal de surveillance HCI Bluetooth"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Capturer les paquets Bluetooth. (Activer/Désactiver le Bluetooth après avoir modifié ce paramètre)"</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"Déverrouillage OEM"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"Autoriser le déverrouillage du chargeur d\'amorçage"</string>
@@ -287,7 +288,7 @@
     <string name="bluetooth_select_a2dp_codec_type_help_info" msgid="8647200416514412338">"Si le codec est grisé, c\'est qu\'il n\'est pas compatible avec le téléphone ou le casque"</string>
     <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="6253965294594390806">"Bits par échantillon pour l\'audio Bluetooth"</string>
     <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="4898693684282596143">"Critère de sélection du codec audio\nBluetooth : nombre de bits par échantillon"</string>
-    <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="364277285688014427">"Mode de chaîne de l\'audio Bluetooth"</string>
+    <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="364277285688014427">"Mode Canal pour l\'audio Bluetooth"</string>
     <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="2076949781460359589">"Critère de sélection du codec audio\nBluetooth : mode de chaîne"</string>
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3233402355917446304">"Codec audio Bluetooth LDAC : qualité de lecture"</string>
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="7274396574659784285">"Critère de sélection du codec audio\nLDAC : qualité de lecture"</string>
@@ -345,7 +346,7 @@
     <string name="wait_for_debugger_summary" msgid="6846330006113363286">"L\'application déboguée attend d\'être liée au débogueur pour s\'exécuter"</string>
     <string name="debug_input_category" msgid="7349460906970849771">"Saisie"</string>
     <string name="debug_drawing_category" msgid="5066171112313666619">"Tracé"</string>
-    <string name="debug_hw_drawing_category" msgid="5830815169336975162">"Accélération matérielle"</string>
+    <string name="debug_hw_drawing_category" msgid="5830815169336975162">"Rendu accéléré par le matériel"</string>
     <string name="media_category" msgid="8122076702526144053">"Multimédia"</string>
     <string name="debug_monitoring_category" msgid="1597387133765424994">"Suivi"</string>
     <string name="strict_mode" msgid="889864762140862437">"Mode Strict activé"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Superposition à l\'écran indiquant l\'emplacement actuel du curseur"</string>
     <string name="show_touches" msgid="8437666942161289025">"Indicateurs visuels"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Afficher un indicateur visuel là où l\'utilisateur appuie sur l\'écran"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Afficher appuis touche"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Afficher retour visuel pour appuis de touches"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Mises à jour de la surface"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Faire clignoter les endroits où des mises à jour sont effectuées"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Mises à jour de fenêtres"</string>
@@ -361,7 +364,7 @@
     <string name="show_hw_layers_updates" msgid="5268370750002509767">"Mises à jour couches matérielles"</string>
     <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"Faire clignoter les couches matérielles en vert lors des mises à jour"</string>
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"Déboguer les conflits GPU"</string>
-    <string name="disable_overlays" msgid="4206590799671557143">"Désactiver superpos. matérielle"</string>
+    <string name="disable_overlays" msgid="4206590799671557143">"Désactiver les superpositions matérielles"</string>
     <string name="disable_overlays_summary" msgid="1954852414363338166">"Toujours utiliser le GPU pour la composition de l\'écran"</string>
     <string name="simulate_color_space" msgid="1206503300335835151">"Simuler l\'espace colorimétrique"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"Activer les traces OpenGL"</string>
@@ -373,7 +376,7 @@
     <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Forcer l\'orientation du texte de droite à gauche pour toutes les langues"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"Barre de navigation transparente"</string>
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"Rendre la couleur d\'arrière-plan de la barre de navigation transparente par défaut"</string>
-    <string name="window_blurs" msgid="6831008984828425106">"Autor. floutage fenêtre"</string>
+    <string name="window_blurs" msgid="6831008984828425106">"Autoriser les floutages au niveau des fenêtres"</string>
     <string name="force_msaa" msgid="4081288296137775550">"Forcer MSAA 4x"</string>
     <string name="force_msaa_summary" msgid="9070437493586769500">"Activer MSAA 4x dans les applications OpenGL ES 2.0"</string>
     <string name="show_non_rect_clip" msgid="7499758654867881817">"Déboguer découpage non rectangulaire"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Plus longtemps."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Moins longtemps."</string>
     <string name="cancel" msgid="5665114069455378395">"Annuler"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Suivant"</string>
+    <string name="back" msgid="5554327870352703710">"Retour"</string>
+    <string name="save" msgid="3745809743277153149">"Enregistrer"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"OK"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmes et rappels"</string>
@@ -535,7 +535,7 @@
     <string name="zen_mode_enable_dialog_turn_on" msgid="6418297231575050426">"Activer"</string>
     <string name="zen_mode_settings_turn_on_dialog_title" msgid="2760567063190790696">"Activer le mode Ne pas déranger"</string>
     <string name="zen_mode_settings_summary_off" msgid="3832876036123504076">"Jamais"</string>
-    <string name="zen_interruption_level_priority" msgid="5392140786447823299">"Prioritaires uniquement"</string>
+    <string name="zen_interruption_level_priority" msgid="5392140786447823299">"Prioritaire uniquement"</string>
     <string name="zen_mode_and_condition" msgid="8877086090066332516">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
     <string name="zen_alarm_warning_indef" msgid="4146527909616457163">"Vous n\'entendrez pas votre prochaine alarme <xliff:g id="WHEN">%1$s</xliff:g>, sauf si vous désactivez cette option avant"</string>
     <string name="zen_alarm_warning" msgid="245729928048586280">"Vous n\'entendrez pas votre prochaine alarme <xliff:g id="WHEN">%1$s</xliff:g>"</string>
@@ -543,16 +543,19 @@
     <string name="alarm_template_far" msgid="6382760514842998629">"le <xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="zen_mode_duration_settings_title" msgid="1553451650289651489">"Durée"</string>
     <string name="zen_mode_duration_always_prompt_title" msgid="3212996860498119555">"Toujours demander"</string>
-    <string name="zen_mode_forever" msgid="3339224497605461291">"Jusqu\'à la désactivation"</string>
+    <string name="zen_mode_forever" msgid="3339224497605461291">"Jusqu\'à ce que vous le désactiviez"</string>
     <string name="time_unit_just_now" msgid="3006134267292728099">"À l\'instant"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Ce téléphone"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Cette tablette"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Haut-parleur station d\'accueil"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Appareil externe"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Appareil connecté"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Ce téléphone"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Impossible de lire du contenu sur cet appareil"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Mettez à niveau le compte pour changer"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Impossible de lire les téléchargements ici"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Réessayez après l\'annonce"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Activer l\'appareil pour lire du contenu ici"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Activez l\'appareil pour y lire du contenu"</string>
     <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Appareil non autorisé à lire du contenu"</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Impossible de lire ce contenu multimédia ici"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problème de connexion. Éteignez l\'appareil, puis rallumez-le"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Ajouter un utilisateur ?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Vous pouvez partager cet appareil avec d\'autres personnes en ajoutant des utilisateurs. Chaque utilisateur dispose de son propre espace où il peut personnaliser ses applications et son fond d\'écran, entre autres. Chaque utilisateur peut également modifier les paramètres de l\'appareil qui s\'appliquent à tous, tels que le Wi-Fi.\n\nLorsque vous ajoutez un utilisateur, celui-ci doit configurer son espace.\n\nN\'importe quel utilisateur peut mettre à jour les applications pour tous les autres. Toutefois, il est possible que les services et les paramètres d\'accessibilité ne soient pas transférés vers le nouvel utilisateur."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Lorsque vous ajoutez un utilisateur, celui-ci doit configurer son espace.\n\nN\'importe quel utilisateur peut mettre à jour les applications pour tous les autres utilisateurs."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Définir cet utilisateur comme administrateur ?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Les administrateurs ont des droits spéciaux que les autres utilisateurs n\'ont pas. Un administrateur peut gérer tous les utilisateurs, mettre à jour ou réinitialiser cet appareil, modifier les paramètres, voir toutes les applis installées et accorder ou révoquer des droits d\'administrateur pour d\'autres."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Définir comme administrateur"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurer l\'utilisateur ?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Assurez-vous que la personne est prête à utiliser l\'appareil et à configurer son espace."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Configurer le profil maintenant ?"</string>
@@ -613,21 +613,19 @@
     <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_reset_and_restart_dialog_message" msgid="2764425635305200790">"Une nouvelle session Invité débutera, et toutes les applis et données de la session actuelle 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">"Cette action supprimera les applis et données de la session Invité actuelle."</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Les applis et données de la session Invité actuelle seront supprimées"</string>
+    <string name="grant_admin" msgid="4323199171790522574">"Oui, le définir comme administrateur"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Non, ne pas le définir comme administrateur"</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_title_non_ephemeral" msgid="7675327443743162986">"Enregistrer activité invité ?"</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_exit_quick_settings_button" msgid="1912362095913765471">"Quitter la session 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>
@@ -679,13 +677,13 @@
     <string name="keyboard_layout_default_label" msgid="1997292217218546957">"Par défaut"</string>
     <string name="turn_screen_on_title" msgid="3266937298097573424">"Activer l\'écran"</string>
     <string name="allow_turn_screen_on" msgid="6194845766392742639">"Autoriser l\'activation de l\'écran"</string>
-    <string name="allow_turn_screen_on_description" msgid="43834403291575164">"Autoriser une appli à activer l\'écran. Si l\'autorisation est accordée, l\'appli peut activer l\'écran à tout moment sans votre intention explicite."</string>
+    <string name="allow_turn_screen_on_description" msgid="43834403291575164">"Autoriser une appli à activer l\'écran. Si elle y est autorisée, l\'appli pourra activer l\'écran à tout moment sans que vous le lui demandiez."</string>
     <string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"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="268234802198852753">"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="5749813313369517812">"Diffuser <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"Modifier le résultat"</string>
-    <string name="back_navigation_animation" msgid="8105467568421689484">"Animations pour prévisualiser le retour en arrière"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Activer les animations système pour la prévisualisation du geste de retour."</string>
+    <string name="back_navigation_animation" msgid="8105467568421689484">"Animations pour prévisualisation du Retour"</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Activer les animations système pour la prévisualisation du Retour"</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"Ce paramètre active les animations système pour la prévisualisation du geste de retour. Pour cela, enableOnBackInvokedCallback doit être défini sur \"True\" dans le fichier manifeste de chaque appli."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"Déplacer vers la gauche"</item>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Déplacer vers le haut"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Non défini"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutre"</string>
+    <string name="feminine" msgid="1529155595310784757">"Féminin"</string>
+    <string name="masculine" msgid="4653978041013996303">"Masculin"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-gl/arrays.xml b/packages/SettingsLib/res/values-gl/arrays.xml
index 797f84b..5d6ef37 100644
--- a/packages/SettingsLib/res/values-gl/arrays.xml
+++ b/packages/SettingsLib/res/values-gl/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (seguro)"</item>
     <item msgid="7322156123728520872">"4K (mellorado)"</item>
     <item msgid="7735692090314849188">"4K (mellorado e seguro)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (pantalla dual)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"Ningún"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Fonte de audio"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index 9dffccb..fadaea5 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acceso á SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Audio en HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Audio en HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Audiófonos"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"Audio de baixo consumo"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Conectado a audiófonos"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Audiófonos"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"Audio de baixo consumo"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Conectado a audiófonos"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Estableceuse conexión co audio de baixo consumo"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Conectado ao audio multimedia"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Conectado ao audio do teléfono"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Utilízase para o audio do teléfono"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Utilízase para a transferencia de ficheiros"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Utilízase para a entrada"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Utilizar para audiófonos"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Úsase para audiófonos"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Usa esta opción para LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Vincular"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"VINCULAR"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Cancelar"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"A vinculación garante acceso aos teus contactos e ao historial de chamadas ao estar conectado"</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Non se puido vincular con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Non se puido vincular con <xliff:g id="DEVICE_NAME">%1$s</xliff:g> porque a clave de acceso ou o PIN son incorrectos."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Non se puido vincular con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, clave de acceso ou PIN incorrectos."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Non se pode comunicar con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Vinculación rexeitada por <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Ordenador"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Escoller perfil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Persoal"</string>
     <string name="category_work" msgid="4014193632325996115">"Traballo"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clonar"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opcións para programadores"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Activar opcións para programadores"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Definir as opcións de desenvolvemento de aplicacións"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Superpón os datos dos toques na pantalla"</string>
     <string name="show_touches" msgid="8437666942161289025">"Mostrar toques"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Mostra a localización dos toques na pantalla"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Mostrar teclas premidas"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Mostra información das teclas físicas premidas"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Mostrar cambios de superficie"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Ilumina as superficies de ventás ao actualizarse"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Mostrar actualizacións"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Máis tempo."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tempo."</string>
     <string name="cancel" msgid="5665114069455378395">"Cancelar"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Seguinte"</string>
+    <string name="back" msgid="5554327870352703710">"Atrás"</string>
+    <string name="save" msgid="3745809743277153149">"Gardar"</string>
     <string name="okay" msgid="949938843324579502">"Aceptar"</string>
     <string name="done" msgid="381184316122520313">"Feito"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmas e recordatorios"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Agora mesmo"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Este teléfono"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Esta tableta"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Altofalante da base"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Dispositivo externo"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Dispositivo conectado"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Este teléfono"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Non se pode reproducir contido neste dispositivo"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Cambia a conta a un plan superior para facer a modificación"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Engadir un usuario novo?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Podes compartir este dispositivo con outras persoas a través da creación de usuarios adicionais. Cada usuario ten o seu propio espazo que pode personalizar coas súas propias aplicacións, fondos de pantalla etc. Os usuarios tamén poden modificar as opcións de configuración do dispositivo, como a rede wifi, que afectan a todo o mundo.\n\nCando engadas un usuario novo, este deberá configurar o seu espazo.\n\nCalquera usuario pode actualizar as aplicacións para todos os demais usuarios. Non se poden transferir ao novo usuario os servizos nin a configuración de accesibilidade."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Cando engadas un usuario novo, este deberá configurar o seu espazo.\n\nCalquera usuario pode actualizar as aplicacións para todos os demais usuarios."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Queres converter este usuario en administrador?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Os administradores teñen privilexios especiais cos que non contan outros usuarios. Un administrador pode xestionar todos os usuarios, actualizar ou restablecer este dispositivo, modificar a configuración, ver todas as aplicacións instaladas, e concederlles ou quitarlles os privilexios de administrador a outras persoas."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Converter en administrador"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurar o usuario agora?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Asegúrate de que a persoa está dispoñible para acceder ao dispositivo e configurar o seu espazo"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Configurar o perfil agora?"</string>
@@ -593,7 +593,7 @@
     <string name="user_add_user_type_title" msgid="551279664052914497">"Engadir"</string>
     <string name="user_new_user_name" msgid="60979820612818840">"Novo usuario"</string>
     <string name="user_new_profile_name" msgid="2405500423304678841">"Novo perfil"</string>
-    <string name="user_info_settings_title" msgid="6351390762733279907">"Información usuario"</string>
+    <string name="user_info_settings_title" msgid="6351390762733279907">"Información do usuario"</string>
     <string name="profile_info_settings_title" msgid="105699672534365099">"Información do perfil"</string>
     <string name="user_need_lock_message" msgid="4311424336209509301">"Para poder crear un perfil restrinxido, precisarás configurar un bloqueo da pantalla para protexer as túas aplicacións e datos persoais."</string>
     <string name="user_set_lock_button" msgid="1427128184982594856">"Establecer bloqueo"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Si, convertelo en administrador"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Non, non convertelo en administrador"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Mover cara arriba"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Sen especificar"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutro"</string>
+    <string name="feminine" msgid="1529155595310784757">"Feminino"</string>
+    <string name="masculine" msgid="4653978041013996303">"Masculino"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-gu/arrays.xml b/packages/SettingsLib/res/values-gu/arrays.xml
index 93d3432..c4f90e4 100644
--- a/packages/SettingsLib/res/values-gu/arrays.xml
+++ b/packages/SettingsLib/res/values-gu/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"ઑડિઓ સ્રોત"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index 157b4f7..11bd628 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -86,7 +86,7 @@
     <string name="bluetooth_disconnecting" msgid="7638892134401574338">"ડિસ્કનેક્ટ થઈ રહ્યું છે..."</string>
     <string name="bluetooth_connecting" msgid="5871702668260192755">"કનેક્ટ થઈ રહ્યું છે…"</string>
     <string name="bluetooth_connected" msgid="8065345572198502293">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> સાથે કનેક્ટ થયેલ"</string>
-    <string name="bluetooth_pairing" msgid="4269046942588193600">"જોડી કરી રહ્યું છે…"</string>
+    <string name="bluetooth_pairing" msgid="4269046942588193600">"જોડાણ કરી રહ્યાં છીએ…"</string>
     <string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> સાથે કનેક્ટ થયેલ (કોઈ ફોન નથી)"</string>
     <string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> સાથે કનેક્ટ થયેલ (કોઈ મીડિયા નથી)"</string>
     <string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> સાથે કનેક્ટ થયેલ (ફોન કે મીડિયા નથી)"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"સિમ ઍક્સેસ"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD ઑડિયો: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD ઑડિયો"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"શ્રવણ યંત્રો"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE ઑડિયો"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"શ્રવણ યંત્રો સાથે કનેક્ટ કરેલું છે"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"સાંભળવામાં મદદ આપતા યંત્રો"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE ઑડિયો"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"સાંભળવામાં મદદ આપતા યંત્રો સાથે કનેક્ટ કરેલું છે"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE ઑડિયોથી કનેક્ટેડ"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"મીડિયા ઑડિઓ સાથે કનેક્ટ કર્યુ"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"ફોન ઑડિઓ સાથે કનેક્ટ થયાં"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"ફોન ઑડિઓ માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ફાઇલ સ્થાનાંતર માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ઇનપુટ માટે ઉપયોગ કરો"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"શ્રવણ યંત્રો માટે ઉપયોગ કરો"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"સાંભળવામાં મદદ આપતા યંત્રો માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO માટે ઉપયોગ કરો"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"જોડી કરો"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"જોડી કરો"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"પ્રોફાઇલ પસંદ કરો"</string>
     <string name="category_personal" msgid="6236798763159385225">"વ્યક્તિગત"</string>
     <string name="category_work" msgid="4014193632325996115">"ઑફિસ"</string>
+    <string name="category_clone" msgid="1554511758987195974">"ક્લોન કરો"</string>
     <string name="development_settings_title" msgid="140296922921597393">"ડેવલપરના વિકલ્પો"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"વિકાસકર્તાનાં વિકલ્પો સક્ષમ કરો"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"ઍપ્લિકેશન વિકાસ માટે વિકલ્પો સેટ કરો"</string>
@@ -263,8 +264,8 @@
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"બુટલોડર અનલૉક કરવાની મંજૂરી આપો"</string>
     <string name="confirm_enable_oem_unlock_title" msgid="8249318129774367535">"OEM ને અનલૉક કરવાની મંજૂરી આપીએ?"</string>
     <string name="confirm_enable_oem_unlock_text" msgid="854131050791011970">"ચેતવણી: જ્યારે આ સેટિંગ ચાલુ હોય ત્યારે આ ઉપકરણ પર ઉપકરણ સંરક્ષણ સુવિધાઓ કાર્ય કરશે નહીં."</string>
-    <string name="mock_location_app" msgid="6269380172542248304">"મોક સ્થાન ઍપ પસંદ કરો"</string>
-    <string name="mock_location_app_not_set" msgid="6972032787262831155">"કોઈ મોક સ્થાન ઍપ સેટ કરાયેલું નથી"</string>
+    <string name="mock_location_app" msgid="6269380172542248304">"મોક લોકેશન ઍપ પસંદ કરો"</string>
+    <string name="mock_location_app_not_set" msgid="6972032787262831155">"કોઈ મોક લોકેશન ઍપ સેટ કરાયેલું નથી"</string>
     <string name="mock_location_app_set" msgid="4706722469342913843">"મોક સ્થાન ઍપ્લિકેશન: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="6829757985772659599">"નેટવર્કિંગ"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"વાયરલેસ ડિસ્પ્લે પ્રમાણન"</string>
@@ -348,12 +349,14 @@
     <string name="debug_hw_drawing_category" msgid="5830815169336975162">"હાર્ડવેર પ્રવેગક રેન્ડરિંગ"</string>
     <string name="media_category" msgid="8122076702526144053">"મીડિયા"</string>
     <string name="debug_monitoring_category" msgid="1597387133765424994">"નિરિક્ષણ કરી રહ્યું છે"</string>
-    <string name="strict_mode" msgid="889864762140862437">"સ્ટ્રિક્ટ મોડ ચાલુ કરેલ છે"</string>
+    <string name="strict_mode" msgid="889864762140862437">"સ્ટ્રિક્ટ મોડ ચાલુ કરેલો છે"</string>
     <string name="strict_mode_summary" msgid="1838248687233554654">"જ્યારે મુખ્ય થ્રેડ પર ઍપ લાંબી કામગીરીઓ કરે ત્યારે સ્ક્રીનને ફ્લેશ કરો"</string>
-    <string name="pointer_location" msgid="7516929526199520173">"પૉઇન્ટર સ્થાન"</string>
+    <string name="pointer_location" msgid="7516929526199520173">"પૉઇન્ટર લોકેશન"</string>
     <string name="pointer_location_summary" msgid="957120116989798464">"વર્તમાન ટચ ડેટા દર્શાવતું સ્ક્રીન ઓવરલે"</string>
     <string name="show_touches" msgid="8437666942161289025">"ટૅપ બતાવો"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"ટૅપ માટે વિઝ્યુઅલ પ્રતિસાદ બતાવો"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"કી દબાવવાની ઘટના બતાવો"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"વાસ્તિવક રીતે કી દબાવવાના વિઝ્યુઅલ પ્રતિસાદ બતાવો"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"સપાટી અપડેટ બતાવો"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"તે અપડેટ થાય ત્યારે સમગ્ર વિન્ડો સપાટી ફ્લેશ કરો"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"વ્યૂના અપડેટ બતાવો"</string>
@@ -383,9 +386,9 @@
     <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"વર્બોઝ વેન્ડર લૉગિંગ ચાલુ કરો"</string>
     <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"ખામીની જાણકારીમાં ડિવાઇસથી જોડાયેલા ચોક્કસ વેન્ડર લૉગ શામેલ કરો, જેમાં ખાનગી માહિતી શામેલ હોઈ શકે છે, તે વધુ બૅટરીનો ઉપયોગ કરી શકે છે અને/અથવા વધુ સ્ટોરેજનો ઉપયોગ કરી શકે છે."</string>
     <string name="window_animation_scale_title" msgid="5236381298376812508">"વિન્ડો ઍનિમેશન સ્કેલ"</string>
-    <string name="transition_animation_scale_title" msgid="1278477690695439337">"સંક્રમણ ઍનિમેશન સ્કેલ"</string>
+    <string name="transition_animation_scale_title" msgid="1278477690695439337">"ટ્રાન્ઝિશન ઍનિમેશન સ્કેલ"</string>
     <string name="animator_duration_scale_title" msgid="7082913931326085176">"ઍનિમેટર અવધિ સ્કેલ"</string>
-    <string name="overlay_display_devices_title" msgid="5411894622334469607">"ગૌણ ડિસ્પ્લેનું અનુકરણ કરો"</string>
+    <string name="overlay_display_devices_title" msgid="5411894622334469607">"સેકન્ડરી ડિસ્પ્લેનું અનુકરણ કરો"</string>
     <string name="debug_applications_category" msgid="5394089406638954196">"ઍપ"</string>
     <string name="immediately_destroy_activities" msgid="1826287490705167403">"પ્રવૃત્તિઓ રાખશો નહીં"</string>
     <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"જેવો વપરાશકર્તા તેને છોડે, તરત જ દરેક પ્રવૃત્તિ નષ્ટ કરો"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"વધુ સમય."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ઓછો સમય."</string>
     <string name="cancel" msgid="5665114069455378395">"રદ કરો"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"આગળ"</string>
+    <string name="back" msgid="5554327870352703710">"પાછળ"</string>
+    <string name="save" msgid="3745809743277153149">"સાચવો"</string>
     <string name="okay" msgid="949938843324579502">"ઓકે"</string>
     <string name="done" msgid="381184316122520313">"થઈ ગયું"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"અલાર્મ અને રિમાઇન્ડર"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"હમણાં જ"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"આ ફોન"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"આ ટૅબ્લેટ"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"ડૉક સ્પીકર"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"બહારનું ડિવાઇસ"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"કનેક્ટ કરેલું ડિવાઇસ"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"આ ફોન"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"આ ડિવાઇસ પર ચલાવી શકતા નથી"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"સ્વિચ કરવા માટે એકાઉન્ટ અપગ્રેડ કરો"</string>
@@ -578,13 +581,10 @@
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"પ્રતિબંધિત પ્રોફાઇલ"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"નવા વપરાશકર્તાને ઉમેરીએ?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"તમે વધારાના વપરાશકર્તાઓ બનાવીને અન્ય લોકો સાથે આ ડિવાઇસને શેર કરી શકો છો. દરેક વપરાશકર્તા પાસે તેમની પોતાની સ્પેસ છે, જેને તેઓ ઍપ, વૉલપેપર, વગેરે સાથે કસ્ટમાઇઝ કરી શકે છે. વપરાશકર્તાઓ પ્રત્યેક વ્યક્તિને અસર કરતી હોય તેવી ડિવાઇસ સેટિંગ જેમ કે વાઇ-ફાઇને પણ સમાયોજિત કરી શકે છે.\n\nજ્યારે તમે કોઈ નવા વપરાશકર્તાને ઉમેરો છો, ત્યારે તે વ્યક્તિને તેમની સ્પેસ સેટ કરવાની જરૂર પડે છે.\n\nકોઈપણ વપરાશકર્તા અન્ય બધા વપરાશકર્તાઓ માટે ઍપને અપડેટ કરી શકે છે. નવા વપરાશકર્તાને ઍક્સેસિબિલિટી સેટિંગ અને સેવાઓ ટ્રાન્સફર ન પણ થાય."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"જ્યારે તમે કોઈ નવા વપરાશકર્તાને ઉમેરો છો, ત્યારે તે વ્યક્તિને તેમનું સ્થાન સેટ અપ કરવાની જરૂર પડે છે.\n\nકોઈપણ વપરાશકર્તા બધા અન્ય વપરાશકર્તાઓ માટે ઍપને અપડેટ કરી શકે છે."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"જ્યારે તમે કોઈ નવા વપરાશકર્તાને ઉમેરો છો, ત્યારે તે વ્યક્તિને તેમની સ્પેસ સેટ અપ કરવાની જરૂર પડે છે.\n\nકોઈપણ વપરાશકર્તા બધા અન્ય વપરાશકર્તાઓ માટે ઍપને અપડેટ કરી શકે છે."</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"આ વપરાશકર્તાને ઍડમિન બનાવવા છે?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"ઍડમિન પાસે વિશિષ્ટ વિશેષાધિકારો હોય છે જે અન્ય વપરાશકર્તાઓ પાસે હોતા નથી. ઍડમિન બધા વપરાશકર્તાઓને મેનેજ કરી શકે, આ ડિવાઇસને અપડેટ અથવા રીસેટ કરી શકે, સેટિંગમાં ફેરફાર કરી શકે, ઇન્સ્ટૉલ કરેલી બધી ઍપ જોઈ શકે અને અન્ય લોકોને ઍડમિનના અધિકારો આપી શકે અથવા તેમને રદબાતલ કરી શકે."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"ઍડમિન બનાવો"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"અત્યારે જ વપરાશકર્તાને સેટ અપ કરીએ?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"ખાતરી કરો કે વ્યક્તિ ડિવાઇસ લેવા અને તેમના સ્થાનનું સેટ અપ કરવા માટે ઉપલબ્ધ છે"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"હવે પ્રોફાઇલ સેટ કરીએ?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"આમ કરવાથી કોઈ નવું અતિથિ સત્ર ચાલુ થશે તેમજ હાલના સત્રમાંની તમામ ઍપ અને ડેટા ડિલીટ થશે"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"શું અતિથિ મોડમાંથી બહાર નીકળીએ?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"આમ કરવાથી હાલના અતિથિ સત્રની તમામ ઍપ અને ડેટા ડિલીટ કરવામાં આવશે"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"હા, તેમને ઍડમિન બનાવો"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"ના, તેમને ઍડમિન બનાવશો નહીં"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"બહાર નીકળો"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"શું અતિથિ પ્રવૃત્તિ સાચવીએ?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"તમે હાલના સત્રની પ્રવૃત્તિ સાચવી શકો છો અથવા તમામ ઍપ અને ડેટા ડિલીટ કરી શકો છો"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"ઉપર ખસેડો"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"ઉલ્લેખિત નથી"</string>
+    <string name="neuter" msgid="2075249330106127310">"નાન્યતર"</string>
+    <string name="feminine" msgid="1529155595310784757">"સ્ત્રીલિંગી"</string>
+    <string name="masculine" msgid="4653978041013996303">"પુલ્લિંગી"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-hi/arrays.xml b/packages/SettingsLib/res/values-hi/arrays.xml
index 24efe28..d023dc7 100644
--- a/packages/SettingsLib/res/values-hi/arrays.xml
+++ b/packages/SettingsLib/res/values-hi/arrays.xml
@@ -107,7 +107,7 @@
     <item msgid="506175145534048710">"Opus"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"सिस्टम से चुने जाने का इस्तेमाल करें (डिफ़ॉल्ट)"</item>
+    <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>
@@ -124,7 +124,7 @@
     <item msgid="8887519571067543785">"96.0 kHz"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
-    <item msgid="2284090879080331090">"सिस्टम से चुने जाने का इस्तेमाल करें (डिफ़ॉल्ट)"</item>
+    <item msgid="2284090879080331090">"सिस्टम की डिफ़ॉल्ट सेटिंग का इस्तेमाल करें"</item>
     <item msgid="1872276250541651186">"44.1 kHz"</item>
     <item msgid="8736780630001704004">"48.0 kHz"</item>
     <item msgid="7698585706868856888">"88.2 kHz"</item>
@@ -137,7 +137,7 @@
     <item msgid="1212577207279552119">"32 बिट/नमूना"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
-    <item msgid="9196208128729063711">"सिस्टम से चुने जाने का इस्तेमाल करें (डिफ़ॉल्ट)"</item>
+    <item msgid="9196208128729063711">"सिस्टम की डिफ़ॉल्ट सेटिंग का इस्तेमाल करें"</item>
     <item msgid="1084497364516370912">"16 बिट/नमूना"</item>
     <item msgid="2077889391457961734">"24 बिट/नमूना"</item>
     <item msgid="3836844909491316925">"32 बिट/नमूना"</item>
@@ -148,7 +148,7 @@
     <item msgid="927546067692441494">"स्टीरियो"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
-    <item msgid="1997302811102880485">"सिस्टम से चुने जाने का इस्तेमाल करें (डिफ़ॉल्ट)"</item>
+    <item msgid="1997302811102880485">"सिस्टम की डिफ़ॉल्ट सेटिंग का इस्तेमाल करें"</item>
     <item msgid="8005696114958453588">"मोनो"</item>
     <item msgid="1333279807604675720">"स्टीरियो"</item>
   </string-array>
@@ -188,7 +188,7 @@
     <item msgid="409235464399258501">"बंद"</item>
     <item msgid="4195153527464162486">"64K प्रति लॉग बफ़र"</item>
     <item msgid="7464037639415220106">"256K प्रति लॉग बफ़र"</item>
-    <item msgid="8539423820514360724">"1M प्रति लॉग बफ़र"</item>
+    <item msgid="8539423820514360724">"हर लॉग बफ़र का साइज़ 1 एमबी"</item>
     <item msgid="1984761927103140651">"4M प्रति लॉग बफ़र"</item>
     <item msgid="2983219471251787208">"8 एमबी प्रति लॉग बफ़र"</item>
   </string-array>
@@ -216,7 +216,7 @@
   <string-array name="transition_animation_scale_entries">
     <item msgid="3376676813923486384">"एनिमेशन बंद"</item>
     <item msgid="753422683600269114">"एनिमेशन स्‍केल .5x"</item>
-    <item msgid="3695427132155563489">"एनिमेशन स्‍केल 1x"</item>
+    <item msgid="3695427132155563489">"ऐनिमेशन स्‍केल 1x"</item>
     <item msgid="9032615844198098981">"एनिमेशन स्‍केल 1.5x"</item>
     <item msgid="8473868962499332073">"एनिमेशन स्‍केल 2x"</item>
     <item msgid="4403482320438668316">"एनिमेशन स्‍केल 5x"</item>
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (सुरक्षित)"</item>
     <item msgid="7322156123728520872">"4K (बेहतर)"</item>
     <item msgid="7735692090314849188">"4K (बेहतर, सुरक्षित)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (ड्यूअल स्‍क्रीन)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (dual screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"कोई नहीं"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"ऑडियो स्रोत"</item>
     <item msgid="8688681727755534982">"एमआईडीआई"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index f0d12cc..828fb60 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"सिम ऐक्सेस"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"एचडी ऑडियो: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"एचडी ऑडियो"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"कान की मशीन"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"सुनने में मदद करने वाले डिवाइस से कनेक्ट है"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"कान की मशीनें"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"कान की मशीनों के साथ कनेक्ट किया गया"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE Audio से कनेक्ट किया गया"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"मीडिया ऑडियो से कनेक्‍ट किया गया"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"फ़ोन ऑडियो से कनेक्‍ट किया गया"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"फ़ोन ऑडियो के लिए उपयोग करें"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"फ़ाइल स्‍थानांतरण के लिए उपयोग करें"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"इनपुट के लिए उपयोग करें"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"सुनने में मदद करने वाले डिवाइस के लिए इस्तेमाल करें"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"कान की मशीनों के लिए इस्तेमाल करें"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO के लिए इस्तेमाल करें"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"जोड़ें"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"जोड़ें"</string>
@@ -175,7 +175,7 @@
     <string name="launch_defaults_none" msgid="8049374306261262709">"कोई डिफ़ॉल्‍ट सेट नहीं है"</string>
     <string name="tts_settings" msgid="8130616705989351312">"लेख से बोली सेटिंग"</string>
     <string name="tts_settings_title" msgid="7602210956640483039">"लिखाई को बोली में बदलने की सुविधा"</string>
-    <string name="tts_default_rate_title" msgid="3964187817364304022">"बोली दर"</string>
+    <string name="tts_default_rate_title" msgid="3964187817364304022">"बोलने की दर"</string>
     <string name="tts_default_rate_summary" msgid="3781937042151716987">"बोलने की गति तय करें"</string>
     <string name="tts_default_pitch_title" msgid="6988592215554485479">"पिच"</string>
     <string name="tts_default_pitch_summary" msgid="9132719475281551884">"कृत्रिम बोली के लहजे को प्रभावित करता है"</string>
@@ -214,7 +214,8 @@
   </string-array>
     <string name="choose_profile" msgid="343803890897657450">"प्रोफ़ाइल चुनें"</string>
     <string name="category_personal" msgid="6236798763159385225">"निजी"</string>
-    <string name="category_work" msgid="4014193632325996115">"वर्क"</string>
+    <string name="category_work" msgid="4014193632325996115">"वर्क ऐप्लिकेशन"</string>
+    <string name="category_clone" msgid="1554511758987195974">"क्लोन"</string>
     <string name="development_settings_title" msgid="140296922921597393">"डेवलपर के लिए सेटिंग और टूल"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"डेवलपर के लिए सेटिंग और टूल चालू करें"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"ऐप्लिकेशन विकास के लिए विकल्‍प सेट करें"</string>
@@ -224,7 +225,7 @@
     <string name="apn_settings_not_available" msgid="1147111671403342300">"ऐक्सेस पॉइंट के नाम की सेटिंग इस उपयोगकर्ता के लिए मौजूद नहीं हैं"</string>
     <string name="enable_adb" msgid="8072776357237289039">"यूएसबी डीबग करना"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"डीबग मोड जब यूएसबी कनेक्‍ट किया गया हो"</string>
-    <string name="clear_adb_keys" msgid="3010148733140369917">"यूएसबी डीबग करने की मंज़ूरी निरस्त करें"</string>
+    <string name="clear_adb_keys" msgid="3010148733140369917">"यूएसबी डीबग करने की अनुमति रद्द करें"</string>
     <string name="enable_adb_wireless" msgid="6973226350963971018">"वॉयरलेस डीबगिंग"</string>
     <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"डिवाइस के वाई-फ़ाई से कनेक्ट हाेने पर, डीबग मोड चालू करें"</string>
     <string name="adb_wireless_error" msgid="721958772149779856">"गड़बड़ी"</string>
@@ -256,10 +257,10 @@
     <string name="bugreport_in_power" msgid="8664089072534638709">"गड़बड़ी की रिपोर्ट का शॉर्टकट"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"गड़बड़ी की रिपोर्ट लेने के लिए पावर मेन्यू में कोई बटन दिखाएं"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"स्क्रीन को चालू रखें"</string>
-    <string name="keep_screen_on_summary" msgid="1510731514101925829">"चार्ज करते समय स्‍क्रीन कभी भी कम बैटरी मोड में नहीं जाएगी"</string>
+    <string name="keep_screen_on_summary" msgid="1510731514101925829">"चार्ज करते समय स्‍क्रीन कभी भी बंद नहीं होगी"</string>
     <string name="bt_hci_snoop_log" msgid="7291287955649081448">"ब्लूटूथ HCI स्‍नूप लॉग चालू करें"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"ब्लूटूथ पैकेट कैप्चर करें. (यह सेटिंग बदलने के बाद ब्लूटूथ टॉगल करें)"</string>
-    <string name="oem_unlock_enable" msgid="5334869171871566731">"OEM अनलॉक करना"</string>
+    <string name="oem_unlock_enable" msgid="5334869171871566731">"OEM अनलॉक करें"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"बूटलोडर को अनलाॅक किए जाने की अनुमति दें"</string>
     <string name="confirm_enable_oem_unlock_title" msgid="8249318129774367535">"OEM अनलॉक करने की अनुमति दें?"</string>
     <string name="confirm_enable_oem_unlock_text" msgid="854131050791011970">"चेतावनी: इस सेटिंग के चालू रहने पर डिवाइस सुरक्षा सुविधाएं इस डिवाइस पर काम नहीं करेंगी."</string>
@@ -325,7 +326,7 @@
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"उन सभी कंप्यूटरों से USB डीबग करने की पहुंचर रद्द करें, जिन्हें आपने पहले इसकी मंज़ूरी दी थी?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"विकास सेटिंग की अनुमति दें?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"ये सेटिंग केवल विकास संबंधी उपयोग के प्रयोजन से हैं. वे आपके डिवाइस और उस पर स्‍थित ऐप्लिकेशन  को खराब कर सकती हैं या उनके दुर्व्यवहार का कारण हो सकती हैं."</string>
-    <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"यूएसबी पर ऐप्लिकेशन की पुष्टि करें"</string>
+    <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"यूएसबी से इंस्टॉल ऐप की पुष्टि करें"</string>
     <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"नुकसान पहुंचाने वाली गतिविधियों के लिए ADB/ADT से इंस्टॉल किए गए ऐप्लिकेशन जांचें."</string>
     <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"बिना नाम वाले ब्लूटूथ डिवाइस (सिर्फ़ MAC पते वाले) दिखाए जाएंगे"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"रिमोट डिवाइस पर आवाज़ बहुत बढ़ जाने या उससे कंट्रोल हटने जैसी समस्याएं होने पर, यह ब्लूटूथ के ज़रिए आवाज़ के कंट्रोल की सुविधा रोक देता है."</string>
@@ -354,12 +355,14 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"मौजूदा टच डेटा दिखाने वाला स्‍क्रीन ओवरले"</string>
     <string name="show_touches" msgid="8437666942161289025">"टैप दिखाएं"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"टैप के लिए विज़ुअल फ़ीडबैक दिखाएं"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"दबाए गए बटन दिखाएं"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"दबाए गए बटन के लिए विज़ुअल फ़ीडबैक दिखाएं"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"सर्फ़ेस अपडेट दिखाएं"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"अपडेट होने पर पूरे विंडो सर्फ़ेस फ़्लैश करें"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"जीपीयू व्यू के अपडेट दिखाएं"</string>
     <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"GPU से बनाए गए व्यू, विंडो में फ़्लैश करता है"</string>
     <string name="show_hw_layers_updates" msgid="5268370750002509767">"हार्डवेयर लेयर अपडेट दिखाएं"</string>
-    <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"हार्डवेयर लेयर अपडेट होने पर उनमें हरी रोशनी डालें"</string>
+    <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"हार्डवेयर लेयर अपडेट होने पर हरा फ़्लैश दिखाएं"</string>
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"जीपीयू ओवरड्रॉ डीबग करें"</string>
     <string name="disable_overlays" msgid="4206590799671557143">"एचडब्ल्यू ओवरले बंद करें"</string>
     <string name="disable_overlays_summary" msgid="1954852414363338166">"स्‍क्रीन कंपोज़िटिंग के लिए हमेशा जीपीयू का इस्तेमाल करें"</string>
@@ -373,7 +376,7 @@
     <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"सभी भाषाओं के लिए स्क्रीन लेआउट की दिशा दाएं से बाएं रखें"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"पारदर्शी बैकग्राउंड वाला नेविगेशन बार"</string>
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"नेविगेशन बार के बैकग्राउंड के रंग को डिफ़ॉल्ट रूप से पारदर्शी के तौर पर सेट करें"</string>
-    <string name="window_blurs" msgid="6831008984828425106">"विंडो को धुंधला करने की सुविधा चालू करें"</string>
+    <string name="window_blurs" msgid="6831008984828425106">"विंडो का बैकग्राउंड धुंधला करने की सुविधा चालू करें"</string>
     <string name="force_msaa" msgid="4081288296137775550">"4x MSAA को हर हाल में चालू करें"</string>
     <string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 ऐप में 4x MSAA को चालू करें"</string>
     <string name="show_non_rect_clip" msgid="7499758654867881817">"उन क्लिप ऑपरेशन को डीबग करें, जो आयताकार नहीं हैं"</string>
@@ -381,28 +384,28 @@
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"जीपीयू डीबग लेयर चालू करें"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"डीबग ऐप के लिए जीपीयू डीबग लेयर लोड करने दें"</string>
     <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"वर्बोस वेंडर लॉगिंग चालू करें"</string>
-    <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"गड़बड़ियों की रिपोर्ट में खास डिवाइस से जुड़े वेंडर लॉग शामिल करें. इन लॉग में निजी जानकारी, बैटरी का ज़्यादा इस्तेमाल, और/या डिवाइस का स्टोरेज ज़्यादा इस्तेमाल करने की जानकारी हो सकती है."</string>
-    <string name="window_animation_scale_title" msgid="5236381298376812508">"विंडो एनिमेशन स्‍केल"</string>
-    <string name="transition_animation_scale_title" msgid="1278477690695439337">"ट्रांज़िशन एनिमेशन स्‍केल"</string>
-    <string name="animator_duration_scale_title" msgid="7082913931326085176">"एनिमेटर अवधि स्केल"</string>
+    <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"गड़बड़ियों की रिपोर्ट में डिवाइस से जुड़े अतिरिक्त वेंडर लॉग शामिल करें. इन लॉग में निजी जानकारी, बैटरी का ज़्यादा इस्तेमाल, और/या डिवाइस का स्टोरेज ज़्यादा इस्तेमाल करने की जानकारी हो सकती है."</string>
+    <string name="window_animation_scale_title" msgid="5236381298376812508">"विंडो ऐनिमेशन स्‍केल"</string>
+    <string name="transition_animation_scale_title" msgid="1278477690695439337">"ट्रांज़िशन ऐनिमेशन स्‍केल"</string>
+    <string name="animator_duration_scale_title" msgid="7082913931326085176">"ऐनिमेटर ड्यूरेशन स्केल"</string>
     <string name="overlay_display_devices_title" msgid="5411894622334469607">"कई साइज़ के डिसप्ले बनाएं"</string>
     <string name="debug_applications_category" msgid="5394089406638954196">"ऐप्लिकेशन"</string>
     <string name="immediately_destroy_activities" msgid="1826287490705167403">"गतिविधियों को न रखें"</string>
     <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"उपयोगकर्ता के छोड़ते ही हर गतिविधि को खत्म करें"</string>
-    <string name="app_process_limit_title" msgid="8361367869453043007">"बैकग्राउंड प्रोसेस सीमित करें"</string>
+    <string name="app_process_limit_title" msgid="8361367869453043007">"बैकग्राउंड प्रोसेस की सीमा"</string>
     <string name="show_all_anrs" msgid="9160563836616468726">"बैकग्राउंड के ANRs दिखाएं"</string>
-    <string name="show_all_anrs_summary" msgid="8562788834431971392">"बैकग्राउंड में चलने वाले ऐप्लिकेशन के लिए, \'यह ऐप्लिकेशन नहीं चल रहा\' मैसेज दिखाएं"</string>
-    <string name="show_notification_channel_warnings" msgid="3448282400127597331">"सूचना चैनल चेतावनी दिखाएं"</string>
+    <string name="show_all_anrs_summary" msgid="8562788834431971392">"बैकग्राउंड में चलने वाले ऐप्लिकेशन के लिए, \'ऐप्लिकेशन नहीं चल रहा\' मैसेज दिखाएं"</string>
+    <string name="show_notification_channel_warnings" msgid="3448282400127597331">"चैनल से जुड़ी चेतावनी दिखाएं"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"कोई ऐप, मान्य चैनल के बिना सूचना पोस्ट करे, तो स्क्रीन पर चेतावनी दिखाएं"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"ऐप्लिकेशन को बाहरी स्टोरेज पर ही चलाएं"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"इससे कोई भी ऐप्लिकेशन बाहरी स्टोरेज में रखने लायक बन जाता है, चाहे उसकी मेनिफ़ेस्ट वैल्यू कुछ भी हो"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"विंडो के हिसाब से गतिविधियों का साइज़ बदल दें"</string>
     <string name="force_resizable_activities_summary" msgid="2490382056981583062">"सभी गतिविधियों को मल्टी-विंडो (एक से ज़्यादा ऐप्लिकेशन, एक साथ) के लिए साइज़ बदलने लायक बनाएं, चाहे उनकी मेनिफ़ेस्ट वैल्यू कुछ भी हो."</string>
     <string name="enable_freeform_support" msgid="7599125687603914253">"फ़्रीफ़ॉर्म विंडो (एक साथ कई विंडो दिखाना) चालू करें"</string>
-    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"जांच के लिए बनी फ़्रीफ़ॉर्म विंडो के लिए सहायता चालू करें."</string>
+    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"फ़्रीफ़ॉर्म विंडो आज़माने की सुविधा चालू करें."</string>
     <string name="desktop_mode" msgid="2389067840550544462">"डेस्कटॉप मोड"</string>
-    <string name="local_backup_password_title" msgid="4631017948933578709">"डेस्‍कटॉप बैक अप पासवर्ड"</string>
-    <string name="local_backup_password_summary_none" msgid="7646898032616361714">"डेस्‍कटॉप के पूरे बैक अप फ़िलहाल सुरक्षित नहीं हैं"</string>
+    <string name="local_backup_password_title" msgid="4631017948933578709">"डेस्‍कटॉप बैकअप पासवर्ड"</string>
+    <string name="local_backup_password_summary_none" msgid="7646898032616361714">"डेस्‍कटॉप का पूरा बैकअप फ़िलहाल सुरक्षित नहीं है"</string>
     <string name="local_backup_password_summary_change" msgid="1707357670383995567">"डेस्कटॉप के पूरे बैक अप का पासवर्ड बदलने या हटाने के लिए टैप करें"</string>
     <string name="local_backup_password_toast_success" msgid="4891666204428091604">"नया बैकअप पासवर्ड सेट किया गया"</string>
     <string name="local_backup_password_toast_confirmation_mismatch" msgid="2994718182129097733">"नया पासवर्ड और पुष्टि मेल नही खाते"</string>
@@ -418,7 +421,7 @@
     <item msgid="4548987861791236754">"आंखों को दिखाई देने वाले प्राकृतिक रंग"</item>
     <item msgid="1282170165150762976">"डिजिटल सामग्री के लिए ऑप्टिमाइज़़ किए गए रंग"</item>
   </string-array>
-    <string name="inactive_apps_title" msgid="5372523625297212320">"स्टैंडबाइ ऐप्लिकेशन"</string>
+    <string name="inactive_apps_title" msgid="5372523625297212320">"स्टैंडबाय ऐप्लिकेशन"</string>
     <string name="inactive_app_inactive_summary" msgid="3161222402614236260">"बंद है. टॉगल करने के लिए टैप करें."</string>
     <string name="inactive_app_active_summary" msgid="8047630990208722344">"सक्रिय. टॉगल करने के लिए टैप करें."</string>
     <string name="standby_bucket_summary" msgid="5128193447550429600">"ऐप्लिकेशन स्टैंडबाय की स्थिति:<xliff:g id="BUCKET"> %s</xliff:g>"</string>
@@ -428,7 +431,7 @@
     <string name="transcode_default" msgid="3784803084573509491">"मानकर चलें कि ऐप्लिकेशन, नए फ़ॉर्मैट के साथ काम करेंगे"</string>
     <string name="transcode_notification" msgid="5560515979793436168">"ट्रांसकोडिंग की सूचनाएं दिखाएं"</string>
     <string name="transcode_disable_cache" msgid="3160069309377467045">"कैश को ट्रांसकोड करने की सुविधा बंद करें"</string>
-    <string name="runningservices_settings_title" msgid="6460099290493086515">"चल रही सेवाएं"</string>
+    <string name="runningservices_settings_title" msgid="6460099290493086515">"चालू सेवाएं"</string>
     <string name="runningservices_settings_summary" msgid="1046080643262665743">"इस समय चल रही सेवाओं को देखें और कंट्रोल करें"</string>
     <string name="select_webview_provider_title" msgid="3917815648099445503">"वेबव्यू लागू करें"</string>
     <string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"वेबव्यू सेट करें"</string>
@@ -544,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"अभी-अभी"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"यह फ़ोन"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"यह टैबलेट"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"डॉक स्पीकर"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"बाहरी डिवाइस"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"कनेक्ट किया गया डिवाइस"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"यह फ़ोन"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"इस डिवाइस पर मीडिया नहीं चलाया जा सकता"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"प्रीमियम खाते में स्विच करने के लिए, अपना खाता अपग्रेड करें"</string>
@@ -574,10 +580,10 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"उपयोगकर्ता"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"प्रतिबंधित प्रोफ़ाइल"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"नया उपयोगकर्ता जोड़ें?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"नए उपयोगकर्ता जोड़कर इस डिवाइस को दूसरे लोगों के साथ शेयर किया जा सकता है. हर उपयोगकर्ता के पास अपनी जगह होती है, जिसमें वे ऐप्लिकेशन, वॉलपेपर, और दूसरी चीज़ों में मनमुताबिक बदलाव कर सकते हैं. उपयोगकर्ता वाई-फ़ाई जैसी डिवाइस सेटिंग में भी बदलाव कर सकते हैं, जिसका असर हर किसी पर पड़ता है.\n\nजब किसी नए उपयोगकर्ता को जोड़ा जाता है, तो उसे अपनी जगह सेट करनी होती है.\n\nकोई भी उपयोगकर्ता, दूसरे सभी उपयोगकर्ताओं के लिए ऐप्लिकेशन अपडेट कर सकता है. ऐसा भी हो सकता है कि सुलभता सेटिंग और सेवाएं नए उपयोगकर्ता को ट्रांसफ़र न हो पाएं."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"कोई नया उपयोगकर्ता जोड़ने पर, उसे अपनी जगह सेट करनी होती है.\n\nकोई भी उपयोगकर्ता बाकी सभी उपयोगकर्ताओं के लिए ऐप्लिकेशन अपडेट कर सकता है."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"नए उपयोगकर्ता जोड़कर इस डिवाइस को दूसरे लोगों के साथ शेयर किया जा सकता है. हर उपयोगकर्ता के पास अपनी जगह होती है, जिसमें वे ऐप्लिकेशन, वॉलपेपर, और दूसरी चीज़ों में मनमुताबिक बदलाव कर सकते हैं. उपयोगकर्ता, वाई-फ़ाई जैसी डिवाइस सेटिंग में भी बदलाव कर सकते हैं. इसका असर हर किसी पर पड़ता है.\n\nजब किसी नए उपयोगकर्ता को जोड़ा जाता है, तो उसे अपनी जगह सेट अप करनी होती है.\n\nकोई भी उपयोगकर्ता, दूसरे सभी उपयोगकर्ताओं के लिए ऐप्लिकेशन अपडेट कर सकता है. ऐसा भी हो सकता है कि सुलभता सेटिंग और सेवाएं नए उपयोगकर्ता को ट्रांसफ़र न हो पाएं."</string>
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"कोई नया उपयोगकर्ता जोड़ने पर, उसे अपनी जगह सेट करनी होती है.\n\nकोई भी उपयोगकर्ता, बाकी सभी उपयोगकर्ताओं के लिए ऐप्लिकेशन अपडेट कर सकता है."</string>
     <string name="user_grant_admin_title" msgid="5157031020083343984">"क्या इस व्यक्ति को एडमिन बनाना है?"</string>
-    <string name="user_grant_admin_message" msgid="1673791931033486709">"एडमिन, अन्य लोगों के मुकाबले खास अधिकार होते हैं. एडमिन के पास ये अधिकार होते हैं: सभी लोगों को मैनेज करना, इस डिवाइस को अपडेट या रीसेट करना, सेटिंग में बदलाव करना, इंस्टॉल किए गए सभी ऐप्लिकेशन देखना, और अन्य लोगों को एडमिन के खास अधिकार देना या उन्हें वापस लेना."</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"एडमिन के पास अन्य लोगों के मुकाबले खास अधिकार होते हैं. एडमिन के पास ये अधिकार होते हैं: सभी लोगों को मैनेज करना, इस डिवाइस को अपडेट या रीसेट करना, सेटिंग में बदलाव करना, इंस्टॉल किए गए सभी ऐप्लिकेशन देखना, और अन्य लोगों को एडमिन के खास अधिकार देना या उन्हें वापस लेना."</string>
     <string name="user_grant_admin_button" msgid="5441486731331725756">"एडमिन बनाएं"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"उपयोगकर्ता को अभी सेट करें?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"पक्का करें कि व्यक्ति डिवाइस का इस्तेमाल करने और अपनी जगह सेट करने के लिए मौजूद है"</string>
@@ -592,14 +598,14 @@
     <string name="user_need_lock_message" msgid="4311424336209509301">"इससे पहले कि आप कोई प्रतिबंधित प्रोफ़ाइल बनाएं, आपको अपने ऐप्लिकेशन  और व्यक्तिगत डेटा की सुरक्षा करने के लिए एक स्क्रीन लॉक सेट करना होगा."</string>
     <string name="user_set_lock_button" msgid="1427128184982594856">"लॉक सेट करें"</string>
     <string name="user_switch_to_user" msgid="6975428297154968543">"<xliff:g id="USER_NAME">%s</xliff:g> पर जाएं"</string>
-    <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"नया उपयोगकर्ता बनाया जा रहा है…"</string>
+    <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"नए उपयोगकर्ता को जोड़ा जा रहा है…"</string>
     <string name="creating_new_guest_dialog_message" msgid="1114905602181350690">"नया मेहमान खाता बनाया जा रहा है…"</string>
     <string name="add_user_failed" msgid="4809887794313944872">"नया उपयोगकर्ता जोड़ा नहीं जा सका"</string>
     <string name="add_guest_failed" msgid="8074548434469843443">"नया मेहमान खाता नहीं बनाया जा सका"</string>
     <string name="user_nickname" msgid="262624187455825083">"प्रचलित नाम"</string>
     <string name="user_add_user" msgid="7876449291500212468">"उपयोगकर्ता जोड़ें"</string>
     <string name="guest_new_guest" msgid="3482026122932643557">"मेहमान जोड़ें"</string>
-    <string name="guest_exit_guest" msgid="5908239569510734136">"मेहमान हटाएं"</string>
+    <string name="guest_exit_guest" msgid="5908239569510734136">"मेहमान को हटाएं"</string>
     <string name="guest_reset_guest" msgid="6110013010356013758">"मेहमान के तौर पर ब्राउज़ करने का सेशन रीसेट करें"</string>
     <string name="guest_reset_guest_dialog_title" msgid="8047270010895437534">"क्या आप मेहमान के तौर पर ब्राउज़ करने का सेशन रीसेट करना चाहते हैं?"</string>
     <string name="guest_remove_guest_dialog_title" msgid="4548511006624088072">"क्या मेहमान को हटाना है?"</string>
@@ -607,7 +613,7 @@
     <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_reset_and_restart_dialog_message" msgid="2764425635305200790">"ऐसा करने पर, मेहमान के तौर पर ब्राउज़ करने का एक नया सेशन शुरू हो जाएगा. साथ ही, मौजूदा सेशन का डेटा और इस्तेमाल किए जा रहे ऐप्लिकेशन को मिटा दिया जाएगा"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"मेहमान मोड से बाहर निकलना है?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"इससे, मेहमान मोड के मौजूदा सेशन का डेटा और इसमें इस्तेमाल हो रहे ऐप्लिकेशन मिट जाएंगे"</string>
     <string name="grant_admin" msgid="4323199171790522574">"हां, इन्हें एडमिन बनाएं"</string>
@@ -676,8 +682,8 @@
     <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="268234802198852753">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> पर ब्रॉडकास्ट शुरू करने पर या आउटपुट बदलने पर, आपका मौजूदा ब्रॉडकास्ट बंद हो जाएगा"</string>
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> पर ब्रॉडकास्ट करें"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"आउटपुट बदलें"</string>
-    <string name="back_navigation_animation" msgid="8105467568421689484">"प्रिडिक्टिव बैक ऐनिमेशन"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"प्रिडिक्टिव बैक के लिए सिस्टम ऐनिमेशन चालू करें."</string>
+    <string name="back_navigation_animation" msgid="8105467568421689484">"पीछे जाने पर झलक दिखाने वाले जेस्चर का ऐनिमेशन"</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"पीछे जाने पर झलक दिखाने वाले हाथ के जेस्चर के लिए सिस्टम ऐनिमेशन चालू करें."</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"यह सेटिंग, सिस्टम के ऐनिमेशन को प्रिडिक्टिव जेस्चर ऐनिमेशन के लिए चालू कर देती है. मेनिफ़ेस्ट फ़ाइल में enableOnBackInvokedCallback की सेटिंग को हर ऐप्लिकेशन के हिसाब से \'सही\' पर सेट होना चाहिए."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"बाईं ओर ले जाएं"</item>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"ऊपर की ओर ले जाएं"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"जानकारी नहीं दी गई"</string>
+    <string name="neuter" msgid="2075249330106127310">"नपुंसक लिंग"</string>
+    <string name="feminine" msgid="1529155595310784757">"महिला"</string>
+    <string name="masculine" msgid="4653978041013996303">"पुरुष"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-hr/arrays.xml b/packages/SettingsLib/res/values-hr/arrays.xml
index fbe62a0..f4bb419 100644
--- a/packages/SettingsLib/res/values-hr/arrays.xml
+++ b/packages/SettingsLib/res/values-hr/arrays.xml
@@ -107,7 +107,7 @@
     <item msgid="506175145534048710">"Opus"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Upotreba odabira sustava (zadano)"</item>
+    <item msgid="8868109554557331312">"Koristi odabir 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>
@@ -117,21 +117,21 @@
     <item msgid="7940970833006181407">"Opus"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
-    <item msgid="926809261293414607">"Upotreba odabira sustava (zadano)"</item>
+    <item msgid="926809261293414607">"Koristi odabir sustava (zadano)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
     <item msgid="3208896645474529394">"48,0 kHz"</item>
     <item msgid="8420261949134022577">"88,2 kHz"</item>
     <item msgid="8887519571067543785">"96,0 kHz"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
-    <item msgid="2284090879080331090">"Upotreba odabira sustava (zadano)"</item>
+    <item msgid="2284090879080331090">"Koristi odabir sustava (zadano)"</item>
     <item msgid="1872276250541651186">"44,1 kHz"</item>
     <item msgid="8736780630001704004">"48,0 kHz"</item>
     <item msgid="7698585706868856888">"88,2 kHz"</item>
     <item msgid="8946330945963372966">"96,0 kHz"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
-    <item msgid="2574107108483219051">"Upotreba odabira sustava (zadano)"</item>
+    <item msgid="2574107108483219051">"Koristi odabir sustava (zadano)"</item>
     <item msgid="4671992321419011165">"16 bitova po uzorku"</item>
     <item msgid="1933898806184763940">"24 bita po uzorku"</item>
     <item msgid="1212577207279552119">"32 bita po uzorku"</item>
@@ -143,7 +143,7 @@
     <item msgid="3836844909491316925">"32 bita po uzorku"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
-    <item msgid="3014194562841654656">"Upotreba odabira sustava (zadano)"</item>
+    <item msgid="3014194562841654656">"Koristi odabir sustava (zadano)"</item>
     <item msgid="5982952342181788248">"Mono"</item>
     <item msgid="927546067692441494">"Stereo"</item>
   </string-array>
@@ -186,10 +186,10 @@
   </string-array>
   <string-array name="select_logd_size_summaries">
     <item msgid="409235464399258501">"Isključeno"</item>
-    <item msgid="4195153527464162486">"64 KB po međusprem. zapisnika"</item>
-    <item msgid="7464037639415220106">"256 KB po međusprem. zapisnika"</item>
-    <item msgid="8539423820514360724">"1 MB po međusprem. zapisnika"</item>
-    <item msgid="1984761927103140651">"4 MB po međusprem. zapisnika"</item>
+    <item msgid="4195153527464162486">"64 KB po međuspremniku zapisnika"</item>
+    <item msgid="7464037639415220106">"256 KB po međuspremniku zapisnika"</item>
+    <item msgid="8539423820514360724">"1 MB po međuspremniku zapisnika"</item>
+    <item msgid="1984761927103140651">"4 MB po međuspremniku zapisnika"</item>
     <item msgid="2983219471251787208">"8 MB po međuspremniku zapisnika"</item>
   </string-array>
   <string-array name="select_logpersist_titles">
@@ -200,7 +200,7 @@
   </string-array>
   <string-array name="select_logpersist_summaries">
     <item msgid="97587758561106269">"Isključeno"</item>
-    <item msgid="7126170197336963369">"Svi međuspremnici zapisa"</item>
+    <item msgid="7126170197336963369">"Svi međuspremnici zapisnika"</item>
     <item msgid="7167543126036181392">"Sve osim međuspremnika zapisnika radija"</item>
     <item msgid="5135340178556563979">"samo međuspremnik zapisnika jezgre"</item>
   </string-array>
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4000 (sigurno)"</item>
     <item msgid="7322156123728520872">"4000 (povećanje razlučivosti)"</item>
     <item msgid="7735692090314849188">"4000 (poveć. razlučiv., sigurno)"</item>
-    <item msgid="7346816300608639624">"720 p, 1080 p (dvojni zaslon)"</item>
+    <item msgid="7346816300608639624">"720 p, 1080 p (dvostruki zaslon)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"Ništa"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Audioizvor"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 41528f3..4c2f89a 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Pristup SIM-u"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD audio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Slušni aparati"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE_AUDIO"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Povezano sa Slušnim aparatima"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Slušna pomagala"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Povezano sa slušnim pomagalima"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Povezano s profilom LE_AUDIO"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Povezano s medijskim zvukom"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Povezano sa telefonskim zvukom"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Koristi za telefonski zvuk"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Koristi za prijenos datoteke"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Upotrijebi za ulaz"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Upotrijebi za Slušne aparate"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Upotrijebi za slušna pomagala"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Upotrebljavajte za LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Upari"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"UPARI"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Odabir profila"</string>
     <string name="category_personal" msgid="6236798763159385225">"Osobno"</string>
     <string name="category_work" msgid="4014193632325996115">"Posao"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Kloniranje"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opcije za razvojne programere"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Omogući opcije za razvojne programere"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Postavljanje opcija za razvoj aplikacije"</string>
@@ -223,7 +224,7 @@
     <string name="tethering_settings_not_available" msgid="266821736434699780">"Postavke dijeljenja veze nisu dostupne ovom korisniku"</string>
     <string name="apn_settings_not_available" msgid="1147111671403342300">"Postavke pristupne točke nisu dostupne ovom korisniku"</string>
     <string name="enable_adb" msgid="8072776357237289039">"Otklanjanje pogrešaka putem USB-a"</string>
-    <string name="enable_adb_summary" msgid="3711526030096574316">"Otklanjanje pogrešaka putem USB-a"</string>
+    <string name="enable_adb_summary" msgid="3711526030096574316">"Način rada za otklanjanje pogrešaka kada je priključen USB"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"Opoziv autorizacija za otklanjanje pogrešaka putem USB-a"</string>
     <string name="enable_adb_wireless" msgid="6973226350963971018">"Bežično otklanjanje pogrešaka"</string>
     <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Način otklanjanja pogrešaka kad je Wi-Fi povezan"</string>
@@ -257,7 +258,7 @@
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Prikaži gumb u izborniku napajanja za izradu izvješća o programskim pogreškama"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Ne pokreći mirovanje"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"Zaslon nikad neće prijeći u mirovanje tijekom punjenja"</string>
-    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Zapisi za Bluetooth HCI"</string>
+    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Omogući Bluetooth HCI snoop log"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Dohvati Bluetooth pakete. (Uključi Bluetooth nakon promjene ove postavke)"</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"OEM otključavanje"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"Neka kôd za pokretanje sustava bude otključan"</string>
@@ -271,7 +272,7 @@
     <string name="wifi_verbose_logging" msgid="1785910450009679371">"Omogući opširnu prijavu na Wi-Fi"</string>
     <string name="wifi_scan_throttling" msgid="2985624788509913617">"Usporavanje traženja Wi-Fija"</string>
     <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Nasumični odabir nepostojane MAC adrese za Wi-Fi"</string>
-    <string name="mobile_data_always_on" msgid="8275958101875563572">"Mobilni podaci uvijek aktivni"</string>
+    <string name="mobile_data_always_on" msgid="8275958101875563572">"Uvijek aktivni mobilni podaci"</string>
     <string name="tethering_hardware_offload" msgid="4116053719006939161">"Hardversko ubrzanje za modemsko povezivanje"</string>
     <string name="bluetooth_show_devices_without_names" msgid="923584526471885819">"Prikaži Bluetooth uređaje bez naziva"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="1452342324349203434">"Onemogući apsolutnu glasnoću"</string>
@@ -316,8 +317,8 @@
     <string name="allow_mock_location" msgid="2102650981552527884">"Dopusti probne lokacije"</string>
     <string name="allow_mock_location_summary" msgid="179780881081354579">"Dopusti probne lokacije"</string>
     <string name="debug_view_attributes" msgid="3539609843984208216">"Omogući pregled atributa prikaza"</string>
-    <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Neka mobilni podaci uvijek budu aktivni, čak i kada je Wi‑Fi aktivan (za brzo prebacivanje s jedne na drugu mrežu)"</string>
-    <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Upotreba hardverskog ubrzanja za modemsko povezivanje ako je dostupno"</string>
+    <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Mobilni podaci uvijek su aktivni, čak i kada je Wi‑Fi aktivan (za brzo prebacivanje s jedne na drugu mrežu)"</string>
+    <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Upotrebljava se hardversko ubrzanje za modemsko povezivanje ako je dostupno"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Omogućiti otklanjanje pogrešaka putem USB-a?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Otklanjanje pogrešaka putem USB-a namijenjeno je samo u razvojne svrhe. Može se upotrijebiti za kopiranje podataka s računala na uređaj i obrnuto, instalaciju aplikacija na uređaju bez obavijesti i za čitanje dnevničkih zapisa."</string>
     <string name="adbwifi_warning_title" msgid="727104571653031865">"Želite li omogućiti bežično otklanjanje pogrešaka?"</string>
@@ -344,54 +345,56 @@
     <string name="wait_for_debugger" msgid="7461199843335409809">"Čeka se program za otklanjanje pogrešaka"</string>
     <string name="wait_for_debugger_summary" msgid="6846330006113363286">"Aplikacija čeka priključivanje programa za otklanjanje pogrešaka"</string>
     <string name="debug_input_category" msgid="7349460906970849771">"Ulaz"</string>
-    <string name="debug_drawing_category" msgid="5066171112313666619">"Crtež"</string>
+    <string name="debug_drawing_category" msgid="5066171112313666619">"Crtanje"</string>
     <string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardverski ubrzano renderiranje"</string>
     <string name="media_category" msgid="8122076702526144053">"Mediji"</string>
     <string name="debug_monitoring_category" msgid="1597387133765424994">"Nadzor"</string>
     <string name="strict_mode" msgid="889864762140862437">"Omogućen strogi način"</string>
-    <string name="strict_mode_summary" msgid="1838248687233554654">"Zaslon bljeska kada operacije apl. u glavnoj niti dugo traju."</string>
+    <string name="strict_mode_summary" msgid="1838248687233554654">"Zaslon bljeska kada operacije aplikacija u glavnoj niti dugo traju"</string>
     <string name="pointer_location" msgid="7516929526199520173">"Mjesto pokazivača"</string>
     <string name="pointer_location_summary" msgid="957120116989798464">"Na zaslonu se prikazuju podaci o dodirima"</string>
     <string name="show_touches" msgid="8437666942161289025">"Prikaži dodire"</string>
-    <string name="show_touches_summary" msgid="3692861665994502193">"Prikaži vizualne povratne informacije za dodire"</string>
-    <string name="show_screen_updates" msgid="2078782895825535494">"Prikaži ažur. površine"</string>
-    <string name="show_screen_updates_summary" msgid="2126932969682087406">"Površina prozora bljeska pri ažuriranju"</string>
+    <string name="show_touches_summary" msgid="3692861665994502193">"Prikazuju se vizualne povratne informacije za dodire"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Prikaži pritiske na tipke"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Prikaži vizualne povratne informacije za pritiske na tipke"</string>
+    <string name="show_screen_updates" msgid="2078782895825535494">"Prikaži ažuriranja površine"</string>
+    <string name="show_screen_updates_summary" msgid="2126932969682087406">"Sve površine prozora bljeskaju pri ažuriranju"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Prikaži ažuriranja prikaza"</string>
     <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"Bljeskanje prikaza u prozorima pri crtanju"</string>
     <string name="show_hw_layers_updates" msgid="5268370750002509767">"Prikaži ažuriranja hardverskih slojeva"</string>
     <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"Hardverski slojevi bljeskaju zeleno pri ažuriranju"</string>
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"Rješavanje GPU preklapanja"</string>
-    <string name="disable_overlays" msgid="4206590799671557143">"Onemogući dijeljenje mem."</string>
-    <string name="disable_overlays_summary" msgid="1954852414363338166">"Uvijek koristi GPU za slaganje zaslona"</string>
+    <string name="disable_overlays" msgid="4206590799671557143">"Onemogući hardverska preklapanja"</string>
+    <string name="disable_overlays_summary" msgid="1954852414363338166">"Uvijek se koristi GPU za slaganje zaslona"</string>
     <string name="simulate_color_space" msgid="1206503300335835151">"Simulacija prostora boja"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"Omogući OpenGL praćenja"</string>
     <string name="usb_audio_disable_routing" msgid="3367656923544254975">"Onemogući USB audiousmj."</string>
-    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Onemogući aut. usmjeravanje na USB audioperiferiju"</string>
+    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Onemogućuje se automatsko usmjeravanje na USB audioperiferiju"</string>
     <string name="debug_layout" msgid="1659216803043339741">"Prikaži okvir prikaza"</string>
     <string name="debug_layout_summary" msgid="8825829038287321978">"Prikazuju se obrubi, margine itd. isječaka"</string>
-    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Nametni zdesna ulijevo"</string>
-    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Nametni smjer zdesna ulijevo za sve zemlje/jezike"</string>
+    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Nametni smjer prikaza zdesna ulijevo"</string>
+    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Nameće se smjer prikaza zdesna ulijevo za sve države/jezike"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"Prozirna navigacijska traka"</string>
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"Neka boja pozadine navigacijske trake bude prozirna prema zadanim postavkama"</string>
     <string name="window_blurs" msgid="6831008984828425106">"Dopusti zamućenja na razini prozora"</string>
     <string name="force_msaa" msgid="4081288296137775550">"Nametni 4x MSAA"</string>
-    <string name="force_msaa_summary" msgid="9070437493586769500">"Omogući 4x MSAA u aplikacijama OpenGL ES 2.0"</string>
+    <string name="force_msaa_summary" msgid="9070437493586769500">"Omogućuje 4x MSAA u aplikacijama OpenGL ES 2.0"</string>
     <string name="show_non_rect_clip" msgid="7499758654867881817">"Otkloni pogreške operacija nepravokutnog isječka"</string>
     <string name="track_frame_time" msgid="522674651937771106">"Profil HWUI generiranja"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Omogući slojeve za otklanjanje pogrešaka GPU-a"</string>
-    <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Omogućite učitavanje slojeva za otklanjanje pogrešaka GPU-a za aplikacije za otklanjanje pogrešaka"</string>
+    <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Omogućuje učitavanje slojeva za otklanjanje pogrešaka GPU-a za aplikacije za otklanjanje pogrešaka"</string>
     <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Omogući opširni zapisnik"</string>
     <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Uključite dodatne zapisnike dobavljača pojedinog uređaja u izvješća o programskim pogreškama koja mogu sadržavati privatne podatke, trošiti više baterije i/ili zauzeti više prostora za pohranu."</string>
     <string name="window_animation_scale_title" msgid="5236381298376812508">"Brzina animacije prozora"</string>
     <string name="transition_animation_scale_title" msgid="1278477690695439337">"Brzina animacije prijelaza"</string>
     <string name="animator_duration_scale_title" msgid="7082913931326085176">"Razmjer duljine animatora"</string>
-    <string name="overlay_display_devices_title" msgid="5411894622334469607">"Simulacija sek. zaslona"</string>
+    <string name="overlay_display_devices_title" msgid="5411894622334469607">"Simulacija sekundarnih zaslona"</string>
     <string name="debug_applications_category" msgid="5394089406638954196">"Aplikacije"</string>
     <string name="immediately_destroy_activities" msgid="1826287490705167403">"Ukloni aktivnosti"</string>
     <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"Aktivnost se uklanja čim je korisnik napusti"</string>
     <string name="app_process_limit_title" msgid="8361367869453043007">"Ograničenje pozadinskog procesa"</string>
-    <string name="show_all_anrs" msgid="9160563836616468726">"Pokaži pozadinske ANR-ove"</string>
-    <string name="show_all_anrs_summary" msgid="8562788834431971392">"Prikaz dijaloškog okvira o pozadinskim aplikacijama koje ne reagiraju"</string>
+    <string name="show_all_anrs" msgid="9160563836616468726">"Prikaži pozadinske ANR-ove"</string>
+    <string name="show_all_anrs_summary" msgid="8562788834431971392">"Prikazuje se dijaloški okvir o pozadinskim aplikacijama koje ne reagiraju"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Prikaži upozorenja kanala obavijesti"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Prikazuje upozorenje na zaslonu kada aplikacija objavi obavijest bez važećeg kanala"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"Prisilno dopusti aplikacije u vanjskoj pohrani"</string>
@@ -399,7 +402,7 @@
     <string name="force_resizable_activities" msgid="7143612144399959606">"Nametni mogućnost promjene veličine za aktivnosti"</string>
     <string name="force_resizable_activities_summary" msgid="2490382056981583062">"Omogući mijenjanje veličine svih aktivnosti za više prozora, neovisno o vrijednostima manifesta."</string>
     <string name="enable_freeform_support" msgid="7599125687603914253">"Omogući prozore slobodnog oblika"</string>
-    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Omogući podršku za eksperimentalne prozore slobodnog oblika."</string>
+    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Omogućuje podršku za eksperimentalne prozore slobodnog oblika."</string>
     <string name="desktop_mode" msgid="2389067840550544462">"Stolni način rada"</string>
     <string name="local_backup_password_title" msgid="4631017948933578709">"Zaporka sigurnosne kopije"</string>
     <string name="local_backup_password_summary_none" msgid="7646898032616361714">"Potpune sigurnosne kopije na stolnom računalu trenutačno nisu zaštićene"</string>
@@ -486,7 +489,7 @@
     <string name="disabled" msgid="8017887509554714950">"Onemogućeno"</string>
     <string name="external_source_trusted" msgid="1146522036773132905">"Dopušteno"</string>
     <string name="external_source_untrusted" msgid="5037891688911672227">"Nije dopušteno"</string>
-    <string name="install_other_apps" msgid="3232595082023199454">"Instalacija nepoznatih apl."</string>
+    <string name="install_other_apps" msgid="3232595082023199454">"Instalacija nepoznatih aplikacija"</string>
     <string name="home" msgid="973834627243661438">"Početni zaslon postavki"</string>
   <string-array name="battery_labels">
     <item msgid="7878690469765357158">"0%"</item>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Više vremena."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Manje vremena."</string>
     <string name="cancel" msgid="5665114069455378395">"Odustani"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Dalje"</string>
+    <string name="back" msgid="5554327870352703710">"Natrag"</string>
+    <string name="save" msgid="3745809743277153149">"Spremi"</string>
     <string name="okay" msgid="949938843324579502">"U redu"</string>
     <string name="done" msgid="381184316122520313">"Gotovo"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmi i podsjetnici"</string>
@@ -543,18 +543,21 @@
     <string name="alarm_template_far" msgid="6382760514842998629">"u <xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="zen_mode_duration_settings_title" msgid="1553451650289651489">"Trajanje"</string>
     <string name="zen_mode_duration_always_prompt_title" msgid="3212996860498119555">"Pitaj svaki put"</string>
-    <string name="zen_mode_forever" msgid="3339224497605461291">"Dok ne isključite"</string>
+    <string name="zen_mode_forever" msgid="3339224497605461291">"Do isključivanja"</string>
     <string name="time_unit_just_now" msgid="3006134267292728099">"Upravo sad"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Ovaj telefon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Ovaj tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Zvučnik priključne stanice"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Vanjski uređaj"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Povezani uređaj"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Ovaj telefon"</string>
-    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Nije moguće reproducirati na ovom uređaju"</string>
-    <string name="media_output_status_require_premium" msgid="8411255800047014822">"Nadogradite račun radi prebacivanja"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Preuzimanja se ne mogu reproducirati ovdje"</string>
+    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Ne može se reproducirati ovdje"</string>
+    <string name="media_output_status_require_premium" msgid="8411255800047014822">"Nadogradite i prebacite se"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Ne može se tu reproducirati"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Pokušajte ponovo nakon oglasa"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Aktivirajte uređaj da biste na njemu reproducirali"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Uređaj nije odobren za reprodukciju"</string>
-    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Ti se mediji ne mogu reproducirati ovdje"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Aktivirajte i reproducirajte ovdje"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Nije odobreno za reprodukciju"</string>
+    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Nemoguća je reprodukcija medija"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problem s povezivanjem. Isključite i ponovo uključite uređaj"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Žičani audiouređaj"</string>
     <string name="help_label" msgid="3528360748637781274">"Pomoć i povratne informacije"</string>
@@ -576,15 +579,12 @@
     <string name="user_add_profile_item_summary" msgid="5418602404308968028">"Možete ograničiti pristup aplikacijama i sadržaju sa svojeg računa"</string>
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Korisnik"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Ograničeni profil"</string>
-    <string name="user_add_user_title" msgid="5457079143694924885">"Dodati novog korisnika?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Da biste ovaj uređaj dijelili s drugima, možete napraviti dodatne korisnike. Svaki korisnik ima svoj prostor koji može prilagoditi pomoću vlastitih aplikacija, pozadine i tako dalje. Korisnici mogu prilagoditi i postavke uređaja koje utječu na sve ostale korisnike, na primjer Wi‑Fi.\n\nKada dodate novog korisnika, ta osoba mora postaviti svoj prostor.\n\nBilo koji korisnik može ažurirati aplikacije za sve ostale korisnike. Postavke i usluge pristupačnosti možda se neće prenijeti na novog korisnika."</string>
+    <string name="user_add_user_title" msgid="5457079143694924885">"Želite li dodati novog korisnika?"</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Da biste ovaj uređaj dijelili s drugima, možete izraditi dodatne korisnike. Svaki korisnik ima svoj prostor koji može prilagoditi vlastitim aplikacijama, pozadinama i drugim sadržajima. Korisnici mogu prilagoditi i postavke uređaja koje utječu na sve korisnike, na primjer Wi‑Fi.\n\nKada dodate novog korisnika, ta osoba mora postaviti svoj prostor.\n\nSvaki korisnik može ažurirati aplikacije za sve ostale korisnike. Postavke i usluge pristupačnosti možda se neće prenijeti na novog korisnika."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Kada dodate novog korisnika, ta osoba mora postaviti vlastiti prostor.\n\nBilo koji korisnik može ažurirati aplikacije za sve ostale korisnike."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Želite li ovom korisniku dodijeliti status administratora?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Administratori imaju posebne ovlasti koje drugi korisnici nemaju. Administrator može upravljati svim korisnicima, ažurirati ili vratiti ovaj uređaj na zadano, izmijeniti postavke, vidjeti sve instalirane aplikacije i dodijeliti ili oduzeti drugima administratorske ovlasti."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Dodijeli status administratora"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Želite li postaviti korisnika?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Uređaj morate dati toj osobi da sama postavi svoj prostor"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Želite li sada postaviti profil?"</string>
@@ -603,8 +603,8 @@
     <string name="add_user_failed" msgid="4809887794313944872">"Izrada novog korisnika nije uspjela"</string>
     <string name="add_guest_failed" msgid="8074548434469843443">"Izrada novog gosta nije uspjela"</string>
     <string name="user_nickname" msgid="262624187455825083">"Nadimak"</string>
-    <string name="user_add_user" msgid="7876449291500212468">"Dodavanje korisnika"</string>
-    <string name="guest_new_guest" msgid="3482026122932643557">"Dodavanje gosta"</string>
+    <string name="user_add_user" msgid="7876449291500212468">"Dodajte korisnika"</string>
+    <string name="guest_new_guest" msgid="3482026122932643557">"Dodajte gosta"</string>
     <string name="guest_exit_guest" msgid="5908239569510734136">"Ukloni gosta"</string>
     <string name="guest_reset_guest" msgid="6110013010356013758">"Poništi gostujuću sesiju"</string>
     <string name="guest_reset_guest_dialog_title" msgid="8047270010895437534">"Poništiti gostujuću sesiju?"</string>
@@ -613,15 +613,13 @@
     <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_reset_and_restart_dialog_message" msgid="2764425635305200790">"Time će se pokrenuti nova gostujuća sesija te izbrisati sve aplikacije i podaci iz trenutačne sesije."</string>
+    <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Želite li izaći iz načina 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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Da, dodijeli status administratora"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Ne, nemoj dodijeliti status administratora"</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_title_non_ephemeral" msgid="7675327443743162986">"Želite li 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>
@@ -629,7 +627,7 @@
     <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" 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>
@@ -672,7 +670,7 @@
     <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Prekinuta je veza s ethernetom."</string>
     <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
     <string name="accessibility_no_calling" msgid="3540827068323895748">"Bez poziva."</string>
-    <string name="avatar_picker_title" msgid="8492884172713170652">"Odabir profilne slike"</string>
+    <string name="avatar_picker_title" msgid="8492884172713170652">"Odaberite profilnu sliku"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Ikona zadanog korisnika"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fizička tipkovnica"</string>
     <string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Odaberite raspored tipkovnice"</string>
@@ -684,8 +682,8 @@
     <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="268234802198852753">"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="5749813313369517812">"Emitiranje aplikacije <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"Promjena izlaza"</string>
-    <string name="back_navigation_animation" msgid="8105467568421689484">"Animacije za pokret povratka s predviđanjem"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Omogući animaciju kad korisnik napravi povratnu kretnju."</string>
+    <string name="back_navigation_animation" msgid="8105467568421689484">"Animacije za pokret povratka s pregledom"</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Omogućuje animaciju kad korisnik napravi povratnu kretnju."</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"Ova postavka omogućuje animacije sustava za animaciju pokreta s predviđanjem. Zahtijeva postavljanje dopuštenja enableOnBackInvokedCallback po aplikaciji na True u datoteci manifesta."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"Pomicanje ulijevo"</item>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Pomicanje prema gore"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Nije navedeno"</string>
+    <string name="neuter" msgid="2075249330106127310">"Srednji rod"</string>
+    <string name="feminine" msgid="1529155595310784757">"Ženski rod"</string>
+    <string name="masculine" msgid="4653978041013996303">"Muški rod"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-hu/arrays.xml b/packages/SettingsLib/res/values-hu/arrays.xml
index ee1ace0..6ece81a 100644
--- a/packages/SettingsLib/res/values-hu/arrays.xml
+++ b/packages/SettingsLib/res/values-hu/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (biztonságos)"</item>
     <item msgid="7322156123728520872">"4K (felskálázott)"</item>
     <item msgid="7735692090314849188">"4K (felskálázott, biztonságos)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (két képernyő)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"Semelyik"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Hangforrás"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 36e4f39..136afb1 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM-elérés"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD audio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Hallókészülékek"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"Alacsony energiaszintű hangátvitel"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Hallókészülékhez csatlakoztatva"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Hallókészülék"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"Alacsony energiaszintű hangátvitel"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Hallókészülékhez csatlakoztatva"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Csatlakoztatva az alacsony energiaszintű hangátvitelhez"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Csatlakoztatva az eszköz hangjához"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Csatlakoztatva a telefon hangjához"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Felhasználás a telefon hangjához"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Felhasználás fájlátvitelre"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Használat beviteli eszközként"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Hallókészülékkel való használat"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Hallókészülékkel való használat"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Használat ehhez: LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Párosítás"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"PÁROSÍTÁS"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Mégse"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"A párosítás hozzáférést biztosít a névjegyekhez és híváselőzményekhez összekapcsolt állapotban."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Nem lehet párosítani a(z) <xliff:g id="DEVICE_NAME">%1$s</xliff:g> eszközzel."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"A párosítás sikertelen volt a(z) <xliff:g id="DEVICE_NAME">%1$s</xliff:g> eszközzel hibás PIN-kód vagy jelszó miatt."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Sikertelen párosítás a(z) <xliff:g id="DEVICE_NAME">%1$s</xliff:g> eszközzel – hibás PIN vagy jelszó"</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Nem lehet kommunikálni a(z) <xliff:g id="DEVICE_NAME">%1$s</xliff:g> eszközzel."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"A(z) <xliff:g id="DEVICE_NAME">%1$s</xliff:g> eszköz elutasította a párosítást."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Számítógép"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Profil kiválasztása"</string>
     <string name="category_personal" msgid="6236798763159385225">"Személyes"</string>
     <string name="category_work" msgid="4014193632325996115">"Munkahelyi"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klónozás"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Fejlesztői beállítások"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Fejlesztői beállítások engedélyezése"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Alkalmazásfejlesztési beállítások megadása"</string>
@@ -341,7 +342,7 @@
     <string name="debug_app_set" msgid="6599535090477753651">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazás hibakeresése"</string>
     <string name="select_application" msgid="2543228890535466325">"Alkalmazás kiválasztása"</string>
     <string name="no_application" msgid="9038334538870247690">"Semmi"</string>
-    <string name="wait_for_debugger" msgid="7461199843335409809">"Várjon a hibakeresőre."</string>
+    <string name="wait_for_debugger" msgid="7461199843335409809">"Várakozás a hibakeresőre"</string>
     <string name="wait_for_debugger_summary" msgid="6846330006113363286">"A javított alkalmazás a hibakeresőre vár."</string>
     <string name="debug_input_category" msgid="7349460906970849771">"Bevitel"</string>
     <string name="debug_drawing_category" msgid="5066171112313666619">"Rajz"</string>
@@ -354,7 +355,9 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"A fedvény mutatja az aktuális érintési adatokat"</string>
     <string name="show_touches" msgid="8437666942161289025">"Koppintások megjelenítése"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Koppintások vizuális visszajelzésének megjelenítése"</string>
-    <string name="show_screen_updates" msgid="2078782895825535494">"Képernyőfrissítések megj."</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Gomblenyomások mutatása"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Fizikai gomblenyomások vizuális visszajelzéseinek mutatása"</string>
+    <string name="show_screen_updates" msgid="2078782895825535494">"Felületfrissítések megj."</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"A teljes ablakfelület villogjon frissítéskor."</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Frissítések megjelenítése"</string>
     <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"Ablakos Flash-nézetek megjelenítéskor"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Több idő."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kevesebb idő."</string>
     <string name="cancel" msgid="5665114069455378395">"Mégse"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Tovább"</string>
+    <string name="back" msgid="5554327870352703710">"Vissza"</string>
+    <string name="save" msgid="3745809743277153149">"Mentés"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Kész"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Ébresztések és emlékeztetők"</string>
@@ -547,14 +547,17 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Az imént"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Ez a telefon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Ez a táblagép"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dokkhangszóró"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Külső eszköz"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Csatlakoztatott eszköz"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Ez a telefon"</string>
-    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Nem lehet tartalmat lejátszani ezen az eszközön"</string>
-    <string name="media_output_status_require_premium" msgid="8411255800047014822">"A váltáshoz frissítse fiókját magasabb kategóriára"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Itt nem lehet lejátszani a letöltött elemeket"</string>
+    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Nem játszható le ezen az eszközön"</string>
+    <string name="media_output_status_require_premium" msgid="8411255800047014822">"A váltáshoz frissítse fiókját"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Itt nem játszhatók le a letöltések"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Próbálja újra a hirdetés után"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"A tartalom itteni lejátszásához ébressze fel az eszközt"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Az eszköz nem játszhat le tartalmat"</string>
-    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"A médiatartalom nem játszható le itt"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Lejátszáshoz ébressze fel az eszközt"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Az eszköz nem játszhat le"</string>
+    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"A tartalom nem játszható le itt"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Sikertelen csatlakozás. Kapcsolja ki az eszközt, majd kapcsolja be újra."</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Vezetékes audioeszköz"</string>
     <string name="help_label" msgid="3528360748637781274">"Súgó és visszajelzés"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Hozzáad új felhasználót?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"További felhasználók létrehozásával megoszthatja ezt az eszközt másokkal. Minden felhasználó saját felülettel rendelkezik, amelyet személyre szabhat saját alkalmazásaival, háttérképével stb. A felhasználók módosíthatják az eszköz beállításait is, például a Wi‑Fi használatát, amely mindenkit érint.\n\nHa új felhasználót ad hozzá, az illetőnek be kell állítania saját felületét.\n\nBármely felhasználó frissítheti az alkalmazásokat valamennyi felhasználó számára. Előfordulhat, hogy a kisegítő lehetőségekkel kapcsolatos beállításokat és szolgáltatásokat nem viszi át a rendszer az új felhasználóhoz."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Ha új felhasználót ad hozzá, az illetőnek be kell állítania saját tárterületét.\n\nBármely felhasználó frissítheti az alkalmazásokat valamennyi felhasználó számára."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Beállítja ezt a felhasználót adminisztrátornak?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Az adminisztrátorok olyan speciális jogosultságokkal rendelkeznek, amelyekkel a többi felhasználó nem. Az adminisztrátorok kezelhetik az összes felhasználót, frissíthetik vagy visszaállíthatják az eszközt, módosíthatják a beállításokat, megnézhetik az összes telepített alkalmazást, valamint megadhatnak és visszavonhatnak adminisztrátori jogosultságokat más felhasználóknál."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Adminisztrátori jogosultság megadása"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Beállít most egy felhasználót?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Győződjön meg arról, hogy a személy hozzá tud férni az eszközhöz, hogy beállíthassa a területét"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Létrehoz most egy profilt?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Igen, legyen adminisztrátor"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Nem, ne legyen adminisztrátor"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Mozgatás felfelé"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Nincs megadva"</string>
+    <string name="neuter" msgid="2075249330106127310">"Semleges nemű alak"</string>
+    <string name="feminine" msgid="1529155595310784757">"Női"</string>
+    <string name="masculine" msgid="4653978041013996303">"Férfi"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-hy/arrays.xml b/packages/SettingsLib/res/values-hy/arrays.xml
index 01b97a8..6819f31 100644
--- a/packages/SettingsLib/res/values-hy/arrays.xml
+++ b/packages/SettingsLib/res/values-hy/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Ձայնի աղբյուրը"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index 23a8044..58b2df54 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM քարտի հասանելիություն"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD աուդիո՝ <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD աուդիո"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Լսողական ապարատ"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Լսողական ապարատը միացված է"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Լսողական սարք"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Միացված է լսողական սարքին"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Միացած է LE audio-ին"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Միացված է մեդիա աուդիոյին"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Միացված է հեռախոսի ձայնային տվյալներին"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Օգտագործել հեռախոսի աուդիոյի համար"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Օգտագործել ֆայլի փոխանցման համար"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Օգտագործել ներմուծման համար"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Օգտագործել լսողական ապարատի համար"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Օգտագործել լսողական սարքի համար"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Օգտագործել LE_AUDIO-ի համար"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Զուգակցել"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"Զուգակցել"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Ընտրեք պրոֆիլ"</string>
     <string name="category_personal" msgid="6236798763159385225">"Անձնական"</string>
     <string name="category_work" msgid="4014193632325996115">"Աշխատանքային"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Կլոն"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Մշակողի ընտրանքներ"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Միացնել մշակողի ընտրանքները"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Կարգավորել ընտրանքները ծրագրի ծրագրավորման համար"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Էկրանի վերադրումը ցույց է տալիս ընթացիկ հպման տվյալները"</string>
     <string name="show_touches" msgid="8437666942161289025">"Ցույց տալ հպումները"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Ցույց տալ հպումների տեսանելի արձագանքը"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Ցույց տալ սեղմումները"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Տեսողական արձագանք ստեղների սեղմումների համար"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Ցույց տալ մակերեսի թարմացումները"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Թարմացվելիս ընդգծել սարքաշարի ծածկույթները կանաչ գույնով"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Ցուցադրել թարմացումները"</string>
@@ -382,8 +385,8 @@
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Թույլատրել GPU վրիպազերծման շերտերի բեռնումը վրիպազերծման հավելվածների համար"</string>
     <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Մատակարարի մանրամասն գրանցամատյան"</string>
     <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Վրիպակների հաշվետվություններում ներառել կոնկրետ սարքի վերաբերյալ մատակարարի լրացուցիչ մատյանները։ Դա կարող է պարունակել խիստ անձնական տեղեկություններ, ավելի արագ սպառել մարտկոցի լիցքը և/կամ ավելի շատ տարածք օգտագործել։"</string>
-    <string name="window_animation_scale_title" msgid="5236381298376812508">"Պատուհանի շարժապատկերի սանդղակ"</string>
-    <string name="transition_animation_scale_title" msgid="1278477690695439337">"Անցումային շարժական սանդղակ"</string>
+    <string name="window_animation_scale_title" msgid="5236381298376812508">"Պատուհանի շարժապատկեր"</string>
+    <string name="transition_animation_scale_title" msgid="1278477690695439337">"Անցումների շարժապատկեր"</string>
     <string name="animator_duration_scale_title" msgid="7082913931326085176">"Շարժանկարի տևողության սանդղակ"</string>
     <string name="overlay_display_devices_title" msgid="5411894622334469607">"Կրկնաստեղծել երկրորդական էկրան"</string>
     <string name="debug_applications_category" msgid="5394089406638954196">"Հավելվածներ"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Ավելացնել ժամանակը:"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Պակասեցնել ժամանակը:"</string>
     <string name="cancel" msgid="5665114069455378395">"Չեղարկել"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Առաջ"</string>
+    <string name="back" msgid="5554327870352703710">"Հետ"</string>
+    <string name="save" msgid="3745809743277153149">"Պահել"</string>
     <string name="okay" msgid="949938843324579502">"Եղավ"</string>
     <string name="done" msgid="381184316122520313">"Պատրաստ է"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Զարթուցիչներ և հիշեցումներ"</string>
@@ -547,10 +547,13 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Հենց նոր"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Այս հեռախոսը"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Այս պլանշետը"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Դոկ-կայանով բարձրախոս"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Արտաքին սարք"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Միացված սարք"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Այս հեռախոսը"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Հնարավոր չէ նվագարկել այս սարքում"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Փոխելու համար անցեք հաշվի պրեմիում տարբերակին"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Հնարավոր չէ նվագարկել ներբեռնումներն այստեղ"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Ներբեռնումները չեն նվագարկվում այստեղ"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Նորից փորձեք գովազդից հետո"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Արթնացրեք սարքը՝ այստեղ նվագարկելու համար"</string>
     <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Նվագարկելու համար հաստատեք սարքը"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Ավելացնե՞լ նոր օգտատեր"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Այս սարքից կարող եք օգտվել մի քանի հոգով: Դրա համար անհրաժեշտ է ստեղծել լրացուցիչ պրոֆիլներ: Յուրաքանչյուր օգտատեր կարող է կարգավորել իր պրոֆիլը ըստ իր հայեցողության և ճաշակի (օր.՝ ընտրել իր ուզած պաստառը, տեղադրել անհրաժեշտ հավելվածները և այլն): Բացի այդ, օգտատերերը կարող են կարգավորել սարքի որոշ պարամետրեր (օր.՝ Wi-Fi-ը), որոնք կգործեն նաև մյուս պրոֆիլների համար:\n\nԵրբ նոր պրոֆիլ ավելացնեք, տվյալ օգտատերը պետք է կարգավորի այն:\n\nՅուրաքանչյուր օգտատեր կարող է թարմացնել մյուս օգտատերերի հավելվածները: Հատուկ գործառույթների և ծառայությունների կարգավորումները կարող են չփոխանցվել նոր օգտատերերին:"</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Երբ նոր օգտատեր եք ավելացնում, նա պետք է կարգավորի իր պրոֆիլը:\n\nՑանկացած օգտատեր կարող է թարմացնել հավելվածները բոլոր օգտատերերի համար:"</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Տրամադրե՞լ այս օգտատիրոջն ադմինիստրատորի իրավունքներ"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Ադմինիստրատորներն ունեն հատուկ արտոնություններ, որոնք մյուս օգտատերերը չունեն։ Նրանք կարող են կառավարել բոլոր օգտատերերին, թարմացնել կամ վերակայել այս սարքը, փոփոխել կարգավորումները, տեսնել բոլոր տեղադրված հավելվածները և տրամադրել/հետ կանչել այլ օգտատերերի ադմինիստրատորի արտոնությունները։"</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Տրամադրել ադմինիստրատորի իրավունքներ"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Կարգավորե՞լ պրոֆիլը"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Համոզվեք, որ անձը կարող է վերցնել սարքը և կարգավորել իր տարածքը"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Կարգավորե՞լ պրոֆիլը հիմա:"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Կսկսվի հյուրի նոր աշխատաշրջան, իսկ նախորդ աշխատաշրջանի բոլոր հավելվածներն ու տվյալները կջնջվեն"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Դուրս գա՞լ հյուրի ռեժիմից"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Հյուրի ընթացիկ աշխատաշրջանի բոլոր հավելվածներն ու տվյալները կջնջվեն"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Այո, տրամադրել ադմինիստրատորի իրավունքներ"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Ոչ, չտրամադրել ադմինիստրատորի իրավունքներ"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Դուրս գալ"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Պահե՞լ հյուրի ռեժիմի պատմությունը"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Պահեք ընթացիկ աշխատաշրջանի պատմությունը կամ ջնջեք հավելվածներն ու տվյալները"</string>
@@ -672,7 +670,7 @@
     <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet-ը անջատված է:"</string>
     <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet։"</string>
     <string name="accessibility_no_calling" msgid="3540827068323895748">"Զանգել հնարավոր չէ։"</string>
-    <string name="avatar_picker_title" msgid="8492884172713170652">"Պրոֆիլի նկար ընտրեք"</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>
     <string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Ընտրեք ստեղնաշարի դասավորությունը"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Տեղափոխել վերև"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Նշված չէ"</string>
+    <string name="neuter" msgid="2075249330106127310">"Չեզոք"</string>
+    <string name="feminine" msgid="1529155595310784757">"Իգական"</string>
+    <string name="masculine" msgid="4653978041013996303">"Արական"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-in/arrays.xml b/packages/SettingsLib/res/values-in/arrays.xml
index d445d9c..e309af7 100644
--- a/packages/SettingsLib/res/values-in/arrays.xml
+++ b/packages/SettingsLib/res/values-in/arrays.xml
@@ -55,7 +55,7 @@
   </string-array>
   <string-array name="hdcp_checking_summaries">
     <item msgid="4045840870658484038">"Jangan gunakan pemeriksaan HDCP"</item>
-    <item msgid="8254225038262324761">"Menggunakan pemeriksaan HDCP untuk konten DRM saja"</item>
+    <item msgid="8254225038262324761">"Gunakan pemeriksaan HDCP untuk konten DRM saja"</item>
     <item msgid="6421717003037072581">"Selalu gunakan pemeriksaan HDCP"</item>
   </string-array>
   <string-array name="bt_hci_snoop_log_entries">
@@ -200,7 +200,7 @@
   </string-array>
   <string-array name="select_logpersist_summaries">
     <item msgid="97587758561106269">"Nonaktif"</item>
-    <item msgid="7126170197336963369">"Semua penyangga log"</item>
+    <item msgid="7126170197336963369">"Semua buffer log"</item>
     <item msgid="7167543126036181392">"Semua kecuali penyangga log radio"</item>
     <item msgid="5135340178556563979">"khusus buffer log kernel"</item>
   </string-array>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Sumber Audio"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 0037b2d..71ecc34 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Akses SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Audio HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Audio HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Alat Bantu Dengar"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Terhubung ke Alat Bantu Dengar"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Alat bantu dengar"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Terhubung ke alat bantu dengar"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Terhubung ke LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Terhubung ke media audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Terhubung ke audio ponsel"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Gunakan untuk audio ponsel"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Gunakan untuk transfer file"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Gunakan untuk masukan"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Gunakan untuk Alat Bantu Dengar"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Gunakan untuk alat bantu dengar"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Digunakan untuk LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Sambungkan"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"SAMBUNGKAN"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Batal"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Penyandingan memberi akses ke kontak dan histori panggilan saat terhubung"</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Tidak dapat menyambungkan dengan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Tidak dapat menyambungkan dengan <xliff:g id="DEVICE_NAME">%1$s</xliff:g> karena PIN atau kode sandi salah."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"PIN atau kunci sandi salah. Penyambungan ke <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gagal."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Tidak dapat berkomunikasi dengan <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Penyandingan ditolak oleh <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Komputer"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Pilih profil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Pribadi"</string>
     <string name="category_work" msgid="4014193632325996115">"Kerja"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clone"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opsi developer"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Aktifkan opsi developer"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Menyetel opsi untuk pengembangan apl"</string>
@@ -254,10 +255,10 @@
     <string name="adb_wireless_no_network_msg" msgid="2365795244718494658">"Harap sambungkan ke jaringan Wi-Fi"</string>
     <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Pintasan laporan bug"</string>
-    <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Menampilkan tombol di menu daya untuk mengambil laporan bug"</string>
+    <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Tampilkan tombol di menu daya untuk mengambil laporan bug"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Tetap terjaga"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"Layar tidak akan redup selama mengisi daya"</string>
-    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Aktifkan log pengintaian HCI Bluetooth"</string>
+    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Aktifkan log snoop HCI Bluetooth"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Ambil paket Bluetooth. (Aktifkan/nonaktifkan Bluetooth setelah mengubah setelan ini)"</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"Buka kunci OEM"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"Izinkan bootloader dibuka kuncinya"</string>
@@ -299,9 +300,9 @@
     <string name="private_dns_mode_provider" msgid="3619040641762557028">"Hostname penyedia DNS pribadi"</string>
     <string name="private_dns_mode_provider_hostname_hint" msgid="6564868953748514595">"Masukkan hostname penyedia DNS"</string>
     <string name="private_dns_mode_provider_failure" msgid="8356259467861515108">"Tidak dapat terhubung"</string>
-    <string name="wifi_display_certification_summary" msgid="8111151348106907513">"Menampilkan opsi untuk sertifikasi tampilan nirkabel"</string>
-    <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Meningkatkan level pencatatan log Wi-Fi, menampilkan per SSID RSSI di Pemilih Wi‑Fi"</string>
-    <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"Memperlambat kehabisan baterai &amp; meningkatkan performa jaringan"</string>
+    <string name="wifi_display_certification_summary" msgid="8111151348106907513">"Tampilkan opsi untuk sertifikasi layar nirkabel"</string>
+    <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Tingkatkan level pencatatan log Wi-Fi, tampilkan per SSID RSSI di Pemilih Wi‑Fi"</string>
+    <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"Memperlambat konsumsi daya baterai &amp; meningkatkan performa jaringan"</string>
     <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"Jika mode ini diaktifkan, alamat MAC perangkat ini dapat berubah setiap kali terhubung ke jaringan yang mengaktifkan pengacakan MAC."</string>
     <string name="wifi_metered_label" msgid="8737187690304098638">"Berbayar"</string>
     <string name="wifi_unmetered_label" msgid="6174142840934095093">"Tidak berbayar"</string>
@@ -316,8 +317,8 @@
     <string name="allow_mock_location" msgid="2102650981552527884">"Mengizinkan lokasi palsu"</string>
     <string name="allow_mock_location_summary" msgid="179780881081354579">"Mengizinkan lokasi palsu"</string>
     <string name="debug_view_attributes" msgid="3539609843984208216">"Aktifkan inspeksi atribut tampilan"</string>
-    <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Selalu mengaktifkan data seluler, meskipun Wi-Fi aktif (agar jaringan beralih dengan cepat)."</string>
-    <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Menggunakan akselerasi hardware tethering jika tersedia"</string>
+    <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Selalu aktifkan data seluler, meskipun Wi-Fi aktif (agar jaringan beralih dengan cepat)."</string>
+    <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Gunakan akselerasi hardware tethering jika tersedia"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Izinkan melakukan debug USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Debugging USB dimaksudkan untuk tujuan pengembangan saja. Gunakan untuk menyalin data antara komputer dan perangkat Anda, memasang apl pada perangkat tanpa notifikasi, dan membaca data log."</string>
     <string name="adbwifi_warning_title" msgid="727104571653031865">"Izinkan proses debug nirkabel?"</string>
@@ -326,9 +327,9 @@
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Izinkan setelan pengembangan?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Setelan ini hanya dimaksudkan untuk penggunaan pengembangan. Setelan dapat menyebabkan perangkat dan aplikasi yang menerapkannya rusak atau tidak berfungsi semestinya."</string>
     <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"Verifikasi aplikasi melalui USB"</string>
-    <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"Memeriksa perilaku berbahaya dalam aplikasi yang diinstal melalui ADB/ADT."</string>
+    <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"Periksa keberadaan perilaku berbahaya di aplikasi yang diinstal melalui ADB/ADT."</string>
     <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"Perangkat Bluetooth tanpa nama (hanya alamat MAC) akan ditampilkan"</string>
-    <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"Menonaktifkan fitur volume absolut Bluetooth jika ada masalah volume dengan perangkat jarak jauh, misalnya volume terlalu keras atau kurangnya kontrol."</string>
+    <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"Nonaktifkan fitur volume absolut Bluetooth jika ada masalah volume pada perangkat jarak jauh, misalnya volume terlalu keras atau tidak terkontrol."</string>
     <string name="bluetooth_enable_gabeldorsche_summary" msgid="2054730331770712629">"Mengaktifkan stack fitur Gabeldorsche Bluetooth."</string>
     <string name="enhanced_connectivity_summary" msgid="1576414159820676330">"Mengaktifkan fitur Konektivitas Yang Disempurnakan."</string>
     <string name="enable_terminal_title" msgid="3834790541986303654">"Terminal lokal"</string>
@@ -343,63 +344,65 @@
     <string name="no_application" msgid="9038334538870247690">"Tidak ada"</string>
     <string name="wait_for_debugger" msgid="7461199843335409809">"Tunggu debugger"</string>
     <string name="wait_for_debugger_summary" msgid="6846330006113363286">"Aplikasi yang di-debug menunggu debugger menempel sebelum berjalan"</string>
-    <string name="debug_input_category" msgid="7349460906970849771">"Masukan"</string>
+    <string name="debug_input_category" msgid="7349460906970849771">"Input"</string>
     <string name="debug_drawing_category" msgid="5066171112313666619">"Gambar"</string>
     <string name="debug_hw_drawing_category" msgid="5830815169336975162">"Render yang dipercepat hardware"</string>
     <string name="media_category" msgid="8122076702526144053">"Media"</string>
     <string name="debug_monitoring_category" msgid="1597387133765424994">"Memantau"</string>
     <string name="strict_mode" msgid="889864762140862437">"Mode ketat diaktifkan"</string>
-    <string name="strict_mode_summary" msgid="1838248687233554654">"Mengedipkan layar saat apl berjalan lama di utas utama"</string>
+    <string name="strict_mode_summary" msgid="1838248687233554654">"Buat layar berkedip saat aplikasi berjalan lama di thread utama"</string>
     <string name="pointer_location" msgid="7516929526199520173">"Lokasi kursor"</string>
     <string name="pointer_location_summary" msgid="957120116989798464">"Overlay layar menampilkan data sentuhan saat ini"</string>
     <string name="show_touches" msgid="8437666942161289025">"Tampilkan ketukan"</string>
-    <string name="show_touches_summary" msgid="3692861665994502193">"Menampilkan efek visual untuk ketukan"</string>
-    <string name="show_screen_updates" msgid="2078782895825535494">"Lihat pembaruan permukaan"</string>
-    <string name="show_screen_updates_summary" msgid="2126932969682087406">"Mengedipkan seluruh permukaan jendela saat diperbarui"</string>
-    <string name="show_hw_screen_updates" msgid="2021286231267747506">"Tampilkan update tampilan"</string>
-    <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"Tampilan cepat dalam jendela saat digambar"</string>
-    <string name="show_hw_layers_updates" msgid="5268370750002509767">"Tunjukkan update lapisan hardware"</string>
-    <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"Lapisan hardware berkedip hijau saat mengupdate"</string>
+    <string name="show_touches_summary" msgid="3692861665994502193">"Tampilkan efek visual untuk ketukan"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Tampilkan penekanan tombol"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Tampilkan respons visual untuk penekanan tombol fisik"</string>
+    <string name="show_screen_updates" msgid="2078782895825535494">"Tampilkan pembaruan permukaan"</string>
+    <string name="show_screen_updates_summary" msgid="2126932969682087406">"Buat seluruh permukaan jendela berkedip saat diperbarui"</string>
+    <string name="show_hw_screen_updates" msgid="2021286231267747506">"Tampilkan pembaruan tampilan"</string>
+    <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"Buat tampilan berkedip dalam jendela saat digambar"</string>
+    <string name="show_hw_layers_updates" msgid="5268370750002509767">"Tampilkan update lapisan hardware"</string>
+    <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"Buat lapisan hardware berkedip hijau saat update"</string>
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"Debug overdraw oleh GPU"</string>
     <string name="disable_overlays" msgid="4206590799671557143">"Nonaktifkan lapisan HW"</string>
     <string name="disable_overlays_summary" msgid="1954852414363338166">"Selalu gunakan GPU untuk pengomposisian layar"</string>
     <string name="simulate_color_space" msgid="1206503300335835151">"Simulasikan ruang warna"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"Aktifkan jejak OpenGL"</string>
     <string name="usb_audio_disable_routing" msgid="3367656923544254975">"Nonaktifkan pemilihan rute audio USB"</string>
-    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Menonaktifkan pemilihan rute otomatis ke periferal audio USB"</string>
+    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Nonaktifkan pemilihan rute otomatis ke periferal audio USB"</string>
     <string name="debug_layout" msgid="1659216803043339741">"Tampilkan batas tata letak"</string>
-    <string name="debug_layout_summary" msgid="8825829038287321978">"Menampilkan batas klip, margin, dll."</string>
+    <string name="debug_layout_summary" msgid="8825829038287321978">"Tampilkan batas klip, margin, dll."</string>
     <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Paksa arah tata letak RTL"</string>
-    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Memaksa arah tata letak layar RTL untuk semua lokalitas"</string>
+    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Paksa arah tata letak layar menjadi RTL untuk semua lokalitas"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"Menu navigasi transparan"</string>
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"Buat warna latar belakang menu navigasi menjadi transparan secara default"</string>
     <string name="window_blurs" msgid="6831008984828425106">"Izinkan buram level jendela"</string>
     <string name="force_msaa" msgid="4081288296137775550">"Paksa 4x MSAA"</string>
-    <string name="force_msaa_summary" msgid="9070437493586769500">"Mengaktifkan 4x MSAA dalam aplikasi OpenGL ES 2.0"</string>
+    <string name="force_msaa_summary" msgid="9070437493586769500">"Aktifkan 4x MSAA dalam aplikasi OpenGL ES 2.0"</string>
     <string name="show_non_rect_clip" msgid="7499758654867881817">"Debug operasi klip non-kotak"</string>
     <string name="track_frame_time" msgid="522674651937771106">"Rendering HWUI profil"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Aktifkan lapisan debug GPU"</string>
-    <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Mengizinkan lapisan debug GPU dimuat di apl debug"</string>
+    <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Izinkan lapisan debug GPU dimuat di aplikasi debug"</string>
     <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Aktifkan logging vendor panjang"</string>
-    <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Menyertakan log vendor khusus perangkat tambahan dalam laporan bug, yang mungkin berisi informasi pribadi, menggunakan lebih banyak baterai, dan/atau menggunakan lebih banyak ruang penyimpanan."</string>
+    <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Sertakan log vendor tambahan khusus perangkat dalam laporan bug, yang mungkin berisi informasi pribadi. Meningkatkan penggunaan baterai dan/atau ruang penyimpanan."</string>
     <string name="window_animation_scale_title" msgid="5236381298376812508">"Skala animasi jendela"</string>
     <string name="transition_animation_scale_title" msgid="1278477690695439337">"Skala animasi transisi"</string>
     <string name="animator_duration_scale_title" msgid="7082913931326085176">"Skala durasi animator"</string>
     <string name="overlay_display_devices_title" msgid="5411894622334469607">"Simulasikan tampilan sekunder"</string>
     <string name="debug_applications_category" msgid="5394089406638954196">"Aplikasi"</string>
     <string name="immediately_destroy_activities" msgid="1826287490705167403">"Jangan simpan aktivitas"</string>
-    <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"Menghancurkan aktivitas setelah apl ditutup"</string>
-    <string name="app_process_limit_title" msgid="8361367869453043007">"Batas proses latar blkng"</string>
+    <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"Hancurkan aktivitas setelah ditinggal pengguna"</string>
+    <string name="app_process_limit_title" msgid="8361367869453043007">"Batas proses di belakang"</string>
     <string name="show_all_anrs" msgid="9160563836616468726">"Tampilkan ANR latar blkng"</string>
-    <string name="show_all_anrs_summary" msgid="8562788834431971392">"Menampilkan dialog Aplikasi Tidak Merespons untuk aplikasi yang ada di latar belakang"</string>
+    <string name="show_all_anrs_summary" msgid="8562788834431971392">"Tampilkan dialog Aplikasi Tidak Merespons untuk aplikasi yang ada di latar belakang"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Tampilkan peringatan saluran notifikasi"</string>
-    <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Menampilkan peringatan di layar saat aplikasi memposting notifikasi tanpa channel yang valid"</string>
+    <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Menampilkan peringatan di layar saat aplikasi memposting notifikasi tanpa saluran yang valid"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"Paksa izinkan aplikasi di eksternal"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Membuat semua aplikasi dapat ditulis ke penyimpanan eksternal, terlepas dari nilai manifes"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"Paksa aktivitas agar ukurannya dapat diubah"</string>
     <string name="force_resizable_activities_summary" msgid="2490382056981583062">"Membuat semua aktivitas dapat diubah ukurannya untuk banyak jendela, terlepas dari nilai manifes."</string>
     <string name="enable_freeform_support" msgid="7599125687603914253">"Aktifkan jendela berformat bebas"</string>
-    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Mengaktifkan dukungan untuk jendela eksperimental berformat bebas."</string>
+    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Aktifkan dukungan untuk jendela eksperimental berformat bebas."</string>
     <string name="desktop_mode" msgid="2389067840550544462">"Mode desktop"</string>
     <string name="local_backup_password_title" msgid="4631017948933578709">"Sandi cadangan desktop"</string>
     <string name="local_backup_password_summary_none" msgid="7646898032616361714">"Saat ini cadangan desktop penuh tidak dilindungi"</string>
@@ -429,7 +432,7 @@
     <string name="transcode_notification" msgid="5560515979793436168">"Tampilkan notifikasi transcoding"</string>
     <string name="transcode_disable_cache" msgid="3160069309377467045">"Nonaktifkan cache transcoding"</string>
     <string name="runningservices_settings_title" msgid="6460099290493086515">"Layanan yang sedang berjalan"</string>
-    <string name="runningservices_settings_summary" msgid="1046080643262665743">"Melihat dan mengontrol layanan yang sedang berjalan"</string>
+    <string name="runningservices_settings_summary" msgid="1046080643262665743">"Lihat dan kontrol layanan yang sedang berjalan"</string>
     <string name="select_webview_provider_title" msgid="3917815648099445503">"Penerapan WebView"</string>
     <string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Setel penerapan WebView"</string>
     <string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Pilihan ini tidak valid lagi. Coba lagi."</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Lebih lama."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Lebih cepat."</string>
     <string name="cancel" msgid="5665114069455378395">"Batal"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Berikutnya"</string>
+    <string name="back" msgid="5554327870352703710">"Kembali"</string>
+    <string name="save" msgid="3745809743277153149">"Simpan"</string>
     <string name="okay" msgid="949938843324579502">"Oke"</string>
     <string name="done" msgid="381184316122520313">"Selesai"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarm dan pengingat"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Baru saja"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Ponsel ini"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Tablet ini"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Speaker dok"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Perangkat Eksternal"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Perangkat yang terhubung"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Ponsel ini"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Tidak dapat memutar di perangkat ini"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Upgrade akun untuk beralih"</string>
@@ -578,13 +581,10 @@
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Profil dibatasi"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Tambahkan pengguna baru?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Anda dapat menggunakan perangkat ini bersama orang lain dengan membuat pengguna tambahan. Setiap pengguna memiliki ruang sendiri, yang dapat disesuaikan dengan aplikasi, wallpaper, dan lainnya. Pengguna juga dapat menyesuaikan setelan perangkat seperti Wi-Fi yang dapat memengaruhi semua pengguna lain.\n\nSaat Anda menambahkan pengguna baru, pengguna tersebut perlu menyiapkan ruangnya.\n\nPengguna mana pun dapat mengupdate aplikasi untuk semua pengguna lainnya. Layanan dan setelan aksesibilitas mungkin tidak ditransfer ke pengguna baru."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"Saat Anda menambahkan pengguna baru, orang tersebut perlu menyiapkan ruang mereka sendiri.\n\nPengguna mana pun dapat memperbarui aplikasi untuk semua pengguna lain."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"Saat Anda menambahkan pengguna baru, orang tersebut harus menyiapkan ruangnya sendiri.\n\nPengguna mana pun dapat meng-update aplikasi untuk semua pengguna lain."</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Jadikan pengguna ini sebagai admin?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Admin memiliki hak istimewa khusus yang tidak dimiliki pengguna lain. Admin dapat mengelola semua pengguna, mengupdate atau mereset perangkat ini, mengubah setelan, melihat semua aplikasi terinstal, dan memberi atau mencabut hak istimewa admin untuk pengguna lain."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Jadikan admin"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Siapkan pengguna sekarang?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Pastikan orang tersebut ada untuk mengambil perangkat dan menyiapkan ruangnya"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Siapkan profil sekarang?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Ya, jadikan sebagai admin"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Tidak, jangan jadikan sebagai admin"</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>
@@ -677,7 +675,7 @@
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Keyboard fisik"</string>
     <string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Pilih tata letak keyboard"</string>
     <string name="keyboard_layout_default_label" msgid="1997292217218546957">"Default"</string>
-    <string name="turn_screen_on_title" msgid="3266937298097573424">"Mengaktifkan layar"</string>
+    <string name="turn_screen_on_title" msgid="3266937298097573424">"Pengaktifan layar"</string>
     <string name="allow_turn_screen_on" msgid="6194845766392742639">"Izinkan pengaktifan layar"</string>
     <string name="allow_turn_screen_on_description" msgid="43834403291575164">"Mengizinkan aplikasi mengaktifkan layar. Jika diizinkan, aplikasi dapat mengaktifkan layar kapan saja tanpa izin Anda."</string>
     <string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"Hentikan siaran <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Pindahkan ke atas"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Tidak ditentukan"</string>
+    <string name="neuter" msgid="2075249330106127310">"Netral"</string>
+    <string name="feminine" msgid="1529155595310784757">"Feminin"</string>
+    <string name="masculine" msgid="4653978041013996303">"Maskulin"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-is/arrays.xml b/packages/SettingsLib/res/values-is/arrays.xml
index 01ce83f..928cdfa 100644
--- a/packages/SettingsLib/res/values-is/arrays.xml
+++ b/packages/SettingsLib/res/values-is/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Audio Source"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index ced9ec6..d78bd13 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Aðgangur að SIM-korti"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD-hljóð: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD-hljóð"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Heyrnartæki"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE-hljóð"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Tengt við heyrnartæki"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Heyrnartæki"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE-hljóð"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Tengt við heyrnartæki"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Tengt við LE-hljóð"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Tengt við hljóðspilun efnis"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Tengt við hljóð símans"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Nota fyrir hljóð símans"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Nota við skráaflutning"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Nota fyrir inntak"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Nota fyrir heyrnartæki"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Nota fyrir heyrnartæki"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Nota fyrir LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Para"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"PARA"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Veldu snið"</string>
     <string name="category_personal" msgid="6236798763159385225">"Persónulegt"</string>
     <string name="category_work" msgid="4014193632325996115">"Vinna"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Afrit"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Forritunarkostir"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Virkja valkosti þróunaraðila"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Stilla valkosti fyrir forritaþróun"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Skjáyfirlögn sem sýnir rauntímagögn um snertingar"</string>
     <string name="show_touches" msgid="8437666942161289025">"Sýna snertingar"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Sýna snertingar myndrænt"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Sýna „Ýtt á lykil“"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Sýna myndsvörun fyrir „Ýtt á raunverulegan lykil“"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Sýna yfirborðsuppfærslur"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Láta allt yfirborð glugga blikka við uppfærslu"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Sýna uppfærslur yfirlits"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Meiri tími."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Minni tími."</string>
     <string name="cancel" msgid="5665114069455378395">"Hætta við"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Áfram"</string>
+    <string name="back" msgid="5554327870352703710">"Til baka"</string>
+    <string name="save" msgid="3745809743277153149">"Vista"</string>
     <string name="okay" msgid="949938843324579502">"Í lagi"</string>
     <string name="done" msgid="381184316122520313">"Lokið"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Vekjarar og áminningar"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Rétt í þessu"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Þessi sími"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Þessi spjaldtölva"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Hátalaradokka"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Ytra tæki"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Tengt tæki"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Þessi sími"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Ekki er hægt að spila í þessu tæki"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Uppfærðu reikninginn til að skipta"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Bæta nýjum notanda við?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Þú getur búið til fleiri notendur til að deila þessu tæki með öðrum. Hver notandi hefur sitt eigið svæði sem viðkomandi getur sérsniðið með forritum, veggfóðri o.s.frv. Notendur geta einnig breytt þeim stillingum tækisins sem hafa áhrif á alla notendur, t.d. Wi-Fi.\n\nÞegar þú bætir nýjum notanda við þarf sá notandi að setja upp svæðið sitt.\n\nHvaða notandi sem er getur uppfært forrit fyrir alla aðra notendur. Ekki er tryggt að stillingar á aðgengi og þjónustu flytjist yfir á nýja notandann."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Þegar þú bætir nýjum notanda við þarf sá notandi að setja upp svæðið sitt.\n\nHvaða notandi sem er getur uppfært forrit fyrir alla aðra notendur."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Gera þennan notanda að stjórnanda?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Stjórnendur hafa tiltekin réttindi sem aðrir notendur hafa ekki. Stjórnandi getur stjórnað öllum notendum, uppfært eða endurstillt þetta tæki, breytt stillingum, séð öll uppsett forrit og veitt eða afturkallað stjórnandaheimildir annarra."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Gera að stjórnanda"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Setja notanda upp núna?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Gakktu úr skugga um að notandinn geti tekið tækið og sett upp sitt svæði"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Setja upp snið núna?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Já, gera viðkomandi að stjórnanda"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Nei, ekki gera viðkomandi að stjórnanda"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Færa upp"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Ekki gefið upp"</string>
+    <string name="neuter" msgid="2075249330106127310">"Kynsegin"</string>
+    <string name="feminine" msgid="1529155595310784757">"Kvenkyn"</string>
+    <string name="masculine" msgid="4653978041013996303">"Karlkyn"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-it/arrays.xml b/packages/SettingsLib/res/values-it/arrays.xml
index be718db..c9f31ff 100644
--- a/packages/SettingsLib/res/values-it/arrays.xml
+++ b/packages/SettingsLib/res/values-it/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Sorgente audio"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index 7829bd2..becf59e 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -86,7 +86,7 @@
     <string name="bluetooth_disconnecting" msgid="7638892134401574338">"Disconnessione…"</string>
     <string name="bluetooth_connecting" msgid="5871702668260192755">"Connessione…"</string>
     <string name="bluetooth_connected" msgid="8065345572198502293">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> Connesso"</string>
-    <string name="bluetooth_pairing" msgid="4269046942588193600">"Accoppiamento…"</string>
+    <string name="bluetooth_pairing" msgid="4269046942588193600">"Accoppiamento in corso…"</string>
     <string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connesso (telefono escluso)"</string>
     <string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connesso (contenuti multimediali esclusi)"</string>
     <string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connesso (telefono o media esclusi)"</string>
@@ -99,8 +99,8 @@
     <string name="bluetooth_battery_level" msgid="2893696778200201555">"Batteria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="bluetooth_battery_level_untethered" msgid="4002282355111504349">"S: batteria <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D: batteria <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
     <string name="bluetooth_active_no_battery_level" msgid="4155462233006205630">"Attivo"</string>
-    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Attivo, solo sinistra"</string>
-    <string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Attivo, solo destra"</string>
+    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Attiva, solo sinistra"</string>
+    <string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Attiva, solo destra"</string>
     <string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Attivo, destra e sinistra"</string>
     <string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Audio multimediale"</string>
     <string name="bluetooth_profile_headset" msgid="5395952236133499331">"Telefonate"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Accesso alla SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Audio HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Audio HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Apparecchi acustici"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Connessione con gli apparecchi acustici stabilita"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Apparecchi acustici"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Connessione con gli apparecchi acustici stabilita"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Connesso a LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Collegato ad audio media"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Collegato ad audio telefono"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Usa per audio telefono"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Usa per trasferimento file"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Utilizza per l\'input"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Utilizza per gli apparecchi acustici"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Utilizza per gli apparecchi acustici"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Usa per LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Accoppia"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ACCOPPIA"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Scegli profilo"</string>
     <string name="category_personal" msgid="6236798763159385225">"Personale"</string>
     <string name="category_work" msgid="4014193632325996115">"Lavoro"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clone"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opzioni sviluppatore"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Attiva Opzioni sviluppatore"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Imposta opzioni per lo sviluppo di applicazioni"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Overlay schermo che mostra i dati touch correnti"</string>
     <string name="show_touches" msgid="8437666942161289025">"Mostra tocchi"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Mostra feedback visivi per i tocchi"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Mostra pressioni tasti"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Mostra feedback visivo per pressioni tasti fisici"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Aggiornamenti superficie"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Fai lampeggiare le superfici delle finestre quando si aggiornano"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Aggiornam. visualizzazione"</string>
@@ -544,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Adesso"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Questo telefono"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Questo tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Base con altoparlante"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Dispositivo esterno"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Dispositivo connesso"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Questo telefono"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Impossibile riprodurre su questo dispositivo"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Esegui l\'upgrade dell\'account per cambiare"</string>
@@ -574,7 +580,7 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Utente"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Profilo con limitazioni"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Aggiungere un nuovo utente?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Puoi condividere il dispositivo con altre persone creando altri utenti. Ogni utente ha un proprio spazio personalizzabile con app, sfondo e così via. Gli utenti possono anche regolare le impostazioni del dispositivo, come il Wi‑Fi, che riguardano tutti.\n\nQuando crei un nuovo utente, la persona in questione deve configurare il proprio spazio.\n\nQualsiasi utente può aggiornare le app per tutti gli altri utenti. I servizi e le impostazioni di accessibilità non potranno essere trasferiti al nuovo utente."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Puoi condividere il dispositivo con altre persone creando altri utenti. Ogni utente ha un proprio spazio personalizzabile con app, sfondo e così via. Gli utenti possono anche regolare le impostazioni del dispositivo, come il Wi‑Fi, che riguardano tutti.\n\nQuando crei un nuovo utente, la persona in questione deve configurare il proprio spazio.\n\nQualsiasi utente può aggiornare le app per tutti gli altri utenti. È possibile che i servizi e le impostazioni di accessibilità non vengano trasferiti al nuovo utente."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Il nuovo utente, una volta aggiunto, deve configurare il proprio spazio.\n\nQualsiasi utente può aggiornare le app per tutti gli altri."</string>
     <string name="user_grant_admin_title" msgid="5157031020083343984">"Vuoi impostare questo utente come amministratore?"</string>
     <string name="user_grant_admin_message" msgid="1673791931033486709">"Gli amministratori hanno privilegi speciali che altri utenti non hanno. Un amministratore può gestire tutti gli utenti, aggiornare o resettare questo dispositivo, modificare le impostazioni, vedere tutte le app installate e concedere o revocare privilegi amministrativi per altri utenti."</string>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"Sposta in alto"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Non specificato"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutro"</string>
+    <string name="feminine" msgid="1529155595310784757">"Femminile"</string>
+    <string name="masculine" msgid="4653978041013996303">"Maschile"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-iw/arrays.xml b/packages/SettingsLib/res/values-iw/arrays.xml
index 2600d9c..01bb1fb 100644
--- a/packages/SettingsLib/res/values-iw/arrays.xml
+++ b/packages/SettingsLib/res/values-iw/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"מקור אודיו"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index 30a79de..77787dc 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"‏גישה ל-SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"‏אודיו באיכות HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"‏אודיו באיכות HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"מכשירי שמיעה"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"מחובר אל מכשירי שמיעה"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"מכשירי שמיעה"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"מחובר למכשירי השמיעה"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"‏מחובר אל LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"מחובר לאודיו של מדיה"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"מחובר לאודיו של הטלפון"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"השתמש עבור האודיו של הטלפון"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"לצורך העברת קבצים"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"שימוש כקלט"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"שימוש בשביל מכשירי שמיעה"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"שימוש למכשירי שמיעה"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"‏לשימוש עבור LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"התאמה"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"התאמה"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"בחירת פרופיל"</string>
     <string name="category_personal" msgid="6236798763159385225">"אישי"</string>
     <string name="category_work" msgid="4014193632325996115">"עבודה"</string>
+    <string name="category_clone" msgid="1554511758987195974">"שכפול"</string>
     <string name="development_settings_title" msgid="140296922921597393">"אפשרויות למפתחים"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"הפעלת אפשרויות למפתחים"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"הגדרת אפשרויות לפיתוח אפליקציות"</string>
@@ -253,8 +254,8 @@
     <string name="adb_wireless_qrcode_pairing_description" msgid="6014121407143607851">"‏כדי להתאים מכשיר דרך Wi‑Fi, יש לסרוק קוד QR"</string>
     <string name="adb_wireless_no_network_msg" msgid="2365795244718494658">"‏יש להתחבר לרשת Wi-Fi"</string>
     <string name="keywords_adb_wireless" msgid="6507505581882171240">"‏adb, ניפוי באגים, פיתוח"</string>
-    <string name="bugreport_in_power" msgid="8664089072534638709">"קיצור של דוח באגים"</string>
-    <string name="bugreport_in_power_summary" msgid="1885529649381831775">"כדי ליצור דוח באגים, יש להציג לחצן בתפריט לניהול צריכת החשמל"</string>
+    <string name="bugreport_in_power" msgid="8664089072534638709">"קיצור דרך לדוח באגים"</string>
+    <string name="bugreport_in_power_summary" msgid="1885529649381831775">"הצגת לחצן ליצירת דוח על באג בתפריט ההפעלה"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"ללא כניסה למצב שינה"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"המסך לעולם לא יהיה במצב שינה במהלך טעינה"</string>
     <string name="bt_hci_snoop_log" msgid="7291287955649081448">"‏הפעלת Snoop Log של Bluetooth HCI"</string>
@@ -269,14 +270,14 @@
     <string name="debug_networking_category" msgid="6829757985772659599">"תקשורת רשתות"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"‏אישור של תצוגת Wi-Fi"</string>
     <string name="wifi_verbose_logging" msgid="1785910450009679371">"‏הפעלת רישום מפורט של Wi‑Fi ביומן"</string>
-    <string name="wifi_scan_throttling" msgid="2985624788509913617">"‏ויסות סריקה לנקודות Wi-Fi"</string>
+    <string name="wifi_scan_throttling" msgid="2985624788509913617">"‏הגבלת החיפוש של נקודות Wi-Fi"</string>
     <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"‏רנדומיזציה של כתובות MAC משתנות ברשתות Wi-Fi"</string>
     <string name="mobile_data_always_on" msgid="8275958101875563572">"חבילת הגלישה פעילה תמיד"</string>
     <string name="tethering_hardware_offload" msgid="4116053719006939161">"שיפור מהירות באמצעות חומרה לצורך שיתוף אינטרנט בין ניידים"</string>
     <string name="bluetooth_show_devices_without_names" msgid="923584526471885819">"‏הצגת מכשירי Bluetooth ללא שמות"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="1452342324349203434">"השבתת עוצמת קול מוחלטת"</string>
     <string name="bluetooth_enable_gabeldorsche" msgid="9131730396242883416">"‏הפעלת Gabeldorsche"</string>
-    <string name="bluetooth_select_avrcp_version_string" msgid="1710571610177659127">"‏Bluetooth גרסה AVRCP"</string>
+    <string name="bluetooth_select_avrcp_version_string" msgid="1710571610177659127">"‏גרסת Bluetooth AVRCP"</string>
     <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7846922290083709633">"‏בחירת Bluetooth גרסה AVRCP"</string>
     <string name="bluetooth_select_map_version_string" msgid="526308145174175327">"‏גרסת Bluetooth MAP"</string>
     <string name="bluetooth_select_map_version_dialog_title" msgid="7085934373987428460">"‏יש לבחור גרסה של Bluetooth MAP"</string>
@@ -349,18 +350,20 @@
     <string name="media_category" msgid="8122076702526144053">"מדיה"</string>
     <string name="debug_monitoring_category" msgid="1597387133765424994">"מעקב"</string>
     <string name="strict_mode" msgid="889864762140862437">"מצב קפדני מופעל"</string>
-    <string name="strict_mode_summary" msgid="1838248687233554654">"המסך יהבהב כאשר אפליקציות יבצעו פעולות ארוכות בשרשור הראשי"</string>
+    <string name="strict_mode_summary" msgid="1838248687233554654">"‏המסך יהבהב כשאפליקציות יבצעו פעולות ארוכות ב-thread הראשי"</string>
     <string name="pointer_location" msgid="7516929526199520173">"מיקום מצביע"</string>
     <string name="pointer_location_summary" msgid="957120116989798464">"שכבת-על של המסך המציגה את נתוני המגע הנוכחיים"</string>
     <string name="show_touches" msgid="8437666942161289025">"הצגת הקשות"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"הצגת משוב ויזואלי להקשות"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"הצגת לחיצות המקשים"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"הצגת משוב חזותי עבור לחיצות פיזיות על מקשים"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"הצגת עדכונים על פני השטח"</string>
-    <string name="show_screen_updates_summary" msgid="2126932969682087406">"הבזקת כל שטחי החלון כשהם מתעדכנים"</string>
-    <string name="show_hw_screen_updates" msgid="2021286231267747506">"תצוגת \'הצגת עדכונים\'"</string>
+    <string name="show_screen_updates_summary" msgid="2126932969682087406">"הבהוב של כל שטחי החלון כשהם מתעדכנים"</string>
+    <string name="show_hw_screen_updates" msgid="2021286231267747506">"הצגת עדכונים של התצוגה"</string>
     <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"הבזקת תצוגות בתוך חלונות בעת ציור"</string>
     <string name="show_hw_layers_updates" msgid="5268370750002509767">"הצגת עדכונים של שכבות חומרה"</string>
     <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"הצגת הבהוב ירוק לשכבות חומרה כשהן מתעדכנות"</string>
-    <string name="debug_hw_overdraw" msgid="8944851091008756796">"‏חריגה בניפוי באגים ב-GPU"</string>
+    <string name="debug_hw_overdraw" msgid="8944851091008756796">"‏ניפוי באגים של ניצול יתר של ה-GPU"</string>
     <string name="disable_overlays" msgid="4206590799671557143">"‏השבתת שכבות-על של HW"</string>
     <string name="disable_overlays_summary" msgid="1954852414363338166">"‏תמיד להשתמש ב-GPU להרכבת מסך"</string>
     <string name="simulate_color_space" msgid="1206503300335835151">"יצירת הדמיה של מרחב צבעים"</string>
@@ -397,7 +400,7 @@
     <string name="force_allow_on_external" msgid="9187902444231637880">"אילוץ הרשאת אפליקציות באחסון חיצוני"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"מאפשר כתיבה של כל אפליקציה באחסון חיצוני, ללא התחשבות בערכי המניפסט"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"אילוץ יכולת קביעת גודל של הפעילויות"</string>
-    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"מאפשר יכולת קביעת גודל של כל הפעילויות לריבוי חלונות, ללא קשר לערך המניפסט."</string>
+    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"מאפשר יכולת קביעת גודל של כל הפעילויות לריבוי חלונות, ללא התחשבות בערכי המניפסט."</string>
     <string name="enable_freeform_support" msgid="7599125687603914253">"הפעלת האפשרות לשנות את הגודל והמיקום של החלונות"</string>
     <string name="enable_freeform_support_summary" msgid="1822862728719276331">"הפעלת תמיכה בתכונה הניסיונית של שינוי הגודל והמיקום של החלונות."</string>
     <string name="desktop_mode" msgid="2389067840550544462">"ממשק המחשב"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"יותר זמן."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"פחות זמן."</string>
     <string name="cancel" msgid="5665114069455378395">"ביטול"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"הבא"</string>
+    <string name="back" msgid="5554327870352703710">"חזרה"</string>
+    <string name="save" msgid="3745809743277153149">"שמירה"</string>
     <string name="okay" msgid="949938843324579502">"אישור"</string>
     <string name="done" msgid="381184316122520313">"סיום"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"שעונים מעוררים ותזכורות"</string>
@@ -547,14 +547,17 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"הרגע"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"הטלפון הזה"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"הטאבלט הזה"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"הרמקול של אביזר העגינה"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"מכשיר חיצוני"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"המכשיר המחובר"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"הטלפון הזה"</string>
-    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"לא ניתן להפעיל במכשיר הזה"</string>
-    <string name="media_output_status_require_premium" msgid="8411255800047014822">"צריך לשדרג את החשבון כדי לעבור"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"לא ניתן להפעיל את ההורדות כאן"</string>
-    <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"אפשר לנסות שוב לאחר המודעה"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"צריך להוציא את המכשיר ממצב השינה כדי להפעיל כאן"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"המכשיר לא קיבל אישור להפעלה"</string>
-    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"אי אפשר להפעיל את המדיה הזו כאן"</string>
+    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"לא ניתן להפעיל במכשיר"</string>
+    <string name="media_output_status_require_premium" msgid="8411255800047014822">"יש לשדרג חשבון כדי לעבור"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"לא ניתן להפעיל הורדות"</string>
+    <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"יש לנסות אחרי המודעה"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"צריך להעיר את המכשיר"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"המכשיר לא אושר"</string>
+    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"אי אפשר להפעיל מדיה"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"יש בעיה בחיבור. עליך לכבות את המכשיר ולהפעיל אותו מחדש"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"התקן אודיו חוטי"</string>
     <string name="help_label" msgid="3528360748637781274">"עזרה ומשוב"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"משתמש"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"פרופיל מוגבל"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"להוסיף משתמש חדש?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"‏ניתן לשתף מכשיר זה עם אנשים אחרים על ידי יצירת משתמשים נוספים. לכל משתמש מרחב משלו, שאותו אפשר להתאים אישית בעזרת אפליקציות, טפט ופריטים נוספים. המשתמשים יכולים גם להתאים הגדרות של המכשיר כגון Wi‑Fi, שמשפיעות על כולם.\n\nכשמוסיפים משתמש חדש, על משתמש זה להגדיר את המרחב שלו.\n\nכל אחד מהמשתמשים יכול לעדכן אפליקציות לכל שאר המשתמשים. ייתכן שהגדרות ושירותים של נגישות לא יועברו למשתמש החדש."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"כשמוסיפים משתמש חדש, המשתמש הזה צריך להגדיר את המרחב שלו.\n\nכל משתמש יכול לעדכן אפליקציות עבור כל המשתמשים האחרים."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"‏ניתן לשתף את המכשיר הזה עם אנשים אחרים על ידי יצירת משתמשים נוספים. לכל משתמש מרחב משלו, שאותו אפשר להתאים אישית בעזרת אפליקציות, טפט ופריטים נוספים. המשתמשים יכולים גם להתאים הגדרות של המכשיר כמו Wi‑Fi, שמשפיעות על כולם.\n\nכשמוסיפים משתמש חדש, המשתמש הזה צריך להגדיר את המרחב שלו.\n\nכל אחד מהמשתמשים יכול לעדכן אפליקציות לכל שאר המשתמשים. יכול להיות שהגדרות ושירותים של נגישות לא יועברו למשתמש החדש."</string>
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"כשמוסיפים משתמש חדש, הוא צריך להגדיר את המרחב שלו.\n\nכל משתמש יכול לעדכן אפליקציות עבור כל המשתמשים האחרים."</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"להגדיר את המשתמש הזה כאדמין?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"לאדמינים יש הרשאות מיוחדות שאין למשתמשים אחרים. אדמין יכול לנהל את כל המשתמשים, לעדכן את המכשיר הזה או לאפס אותו, לשנות הגדרות, לראות את כל האפליקציות המותקנות ולהעניק הרשאות אדמין לאחרים או לשלול אותן."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"הגדרה כאדמין"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"האם להגדיר משתמש עכשיו?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"כדאי לוודא שהמשתמש זמין ויכול לקחת את המכשיר ולהגדיר את המרחב שלו"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"האם להגדיר פרופיל עכשיו?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"הפעולה הזו תתחיל גלישה חדשה כאורח ותמחק את כל האפליקציות והנתונים מהסשן הנוכחי"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"לצאת ממצב אורח?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"הפעולה הזו תמחק את האפליקציות והנתונים מהגלישה הנוכחית כאורח"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"כן, להגדיר כאדמין"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"לא להגדיר כאדמין"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"יציאה"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"לשמור את פעילות האורח?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"אפשר לשמור את הפעילות מהסשן הנוכחי או למחוק את כל האפליקציות והנתונים"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"הזזה למעלה"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"%% <xliff:g id="PERCENTAGE">%1$d</xliff:g>"</string>
+    <string name="not_specified" msgid="5423502443185110328">"לא רוצה להגדיר"</string>
+    <string name="neuter" msgid="2075249330106127310">"ניטרלי"</string>
+    <string name="feminine" msgid="1529155595310784757">"נקבה"</string>
+    <string name="masculine" msgid="4653978041013996303">"זכר"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ja/arrays.xml b/packages/SettingsLib/res/values-ja/arrays.xml
index ab84488..31bcec1 100644
--- a/packages/SettingsLib/res/values-ja/arrays.xml
+++ b/packages/SettingsLib/res/values-ja/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K(セキュア)"</item>
     <item msgid="7322156123728520872">"4K(アップスケール)"</item>
     <item msgid="7735692090314849188">"4K(アップスケール、セキュア)"</item>
-    <item msgid="7346816300608639624">"720p、1080p(デュアルスクリーン)"</item>
+    <item msgid="7346816300608639624">"720p、1080p(デュアル スクリーン)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"なし"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"オーディオソース"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index f0e632a..deaba35 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIMアクセス"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD オーディオ: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD オーディオ"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"補聴器"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"補聴器に接続"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"補聴器"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"補聴器に接続"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE Audio に接続"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"メディアの音声に接続"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"携帯電話の音声に接続"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"携帯電話の音声に使用"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ファイル転送に使用"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"入力に使用"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"補聴器に使用"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"補聴器に使用"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO の使用"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"ペア設定する"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ペア設定する"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"プロファイルの選択"</string>
     <string name="category_personal" msgid="6236798763159385225">"個人用"</string>
     <string name="category_work" msgid="4014193632325996115">"仕事用"</string>
+    <string name="category_clone" msgid="1554511758987195974">"クローン"</string>
     <string name="development_settings_title" msgid="140296922921597393">"開発者向けオプション"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"開発者向けオプションの有効化"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"アプリ開発オプションを設定する"</string>
@@ -258,13 +259,13 @@
     <string name="keep_screen_on" msgid="1187161672348797558">"スリープモードにしない"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"充電中に画面をスリープにしない"</string>
     <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Bluetooth HCI スヌープログ"</string>
-    <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Bluetooth パケットをキャプチャします(この設定を変更した場合は Bluetooth を切り替えてください)。"</string>
+    <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Bluetooth パケットをキャプチャします(設定変更後はBluetoothをオフ/オンしてください)。"</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"OEM ロック解除"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"ブートローダーによるロック解除を許可する"</string>
     <string name="confirm_enable_oem_unlock_title" msgid="8249318129774367535">"OEM ロック解除の許可"</string>
     <string name="confirm_enable_oem_unlock_text" msgid="854131050791011970">"警告: この設定をONにしている場合、このデバイスではデバイス保護機能を利用できません。"</string>
-    <string name="mock_location_app" msgid="6269380172542248304">"現在地情報の強制変更アプリを選択"</string>
-    <string name="mock_location_app_not_set" msgid="6972032787262831155">"現在地情報の強制変更アプリが設定されていません"</string>
+    <string name="mock_location_app" msgid="6269380172542248304">"仮の現在地情報アプリを選択"</string>
+    <string name="mock_location_app_not_set" msgid="6972032787262831155">"仮の現在地情報アプリが設定されていません"</string>
     <string name="mock_location_app_set" msgid="4706722469342913843">"現在地情報の強制変更アプリ: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="6829757985772659599">"ネットワーク"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"ワイヤレス ディスプレイ認証"</string>
@@ -337,7 +338,7 @@
     <string name="hdcp_checking_dialog_title" msgid="7691060297616217781">"HDCP チェック動作を設定"</string>
     <string name="debug_debugging_category" msgid="535341063709248842">"デバッグ"</string>
     <string name="debug_app" msgid="8903350241392391766">"デバッグアプリを選択"</string>
-    <string name="debug_app_not_set" msgid="1934083001283807188">"デバッグアプリケーションが設定されていません"</string>
+    <string name="debug_app_not_set" msgid="1934083001283807188">"デバッグ アプリケーションが設定されていません"</string>
     <string name="debug_app_set" msgid="6599535090477753651">"デバッグアプリケーション: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="select_application" msgid="2543228890535466325">"アプリを選択"</string>
     <string name="no_application" msgid="9038334538870247690">"なし"</string>
@@ -347,13 +348,15 @@
     <string name="debug_drawing_category" msgid="5066171112313666619">"描画"</string>
     <string name="debug_hw_drawing_category" msgid="5830815169336975162">"ハードウェアアクセラレーテッドレンダリング"</string>
     <string name="media_category" msgid="8122076702526144053">"メディア"</string>
-    <string name="debug_monitoring_category" msgid="1597387133765424994">"監視"</string>
+    <string name="debug_monitoring_category" msgid="1597387133765424994">"モニタリング"</string>
     <string name="strict_mode" msgid="889864762140862437">"厳格モードを有効にする"</string>
     <string name="strict_mode_summary" msgid="1838248687233554654">"メインスレッドの処理が長引く場合は画面を点滅させる"</string>
     <string name="pointer_location" msgid="7516929526199520173">"ポインタの位置"</string>
     <string name="pointer_location_summary" msgid="957120116989798464">"現在のタップデータをオーバーレイ表示する"</string>
     <string name="show_touches" msgid="8437666942161289025">"タップを表示"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"タップを視覚表示する"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"キーの押下を表示"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"物理キーの押下に関する視覚的フィードバックを表示"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"表示面の更新を通知"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"更新時にウィンドウの表示面全体を点滅させる"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"画面の更新を表示"</string>
@@ -385,7 +388,7 @@
     <string name="window_animation_scale_title" msgid="5236381298376812508">"ウィンドウ アニメ スケール"</string>
     <string name="transition_animation_scale_title" msgid="1278477690695439337">"トランジション アニメ スケール"</string>
     <string name="animator_duration_scale_title" msgid="7082913931326085176">"Animator 再生時間スケール"</string>
-    <string name="overlay_display_devices_title" msgid="5411894622334469607">"2 次画面シミュレート"</string>
+    <string name="overlay_display_devices_title" msgid="5411894622334469607">"第2画面のシミュレーション"</string>
     <string name="debug_applications_category" msgid="5394089406638954196">"アプリ"</string>
     <string name="immediately_destroy_activities" msgid="1826287490705167403">"アクティビティを保持しない"</string>
     <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"ユーザーが離れたアクティビティを直ちに破棄する"</string>
@@ -542,16 +545,19 @@
     <string name="zen_mode_duration_always_prompt_title" msgid="3212996860498119555">"毎回確認"</string>
     <string name="zen_mode_forever" msgid="3339224497605461291">"OFF にするまで"</string>
     <string name="time_unit_just_now" msgid="3006134267292728099">"たった今"</string>
-    <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"このスマートフォン"</string>
+    <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"このデバイス"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"このタブレット"</string>
-    <string name="media_transfer_this_phone" msgid="7194341457812151531">"このスマートフォン"</string>
-    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"このデバイスで再生できません"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"ホルダー スピーカー"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"外部デバイス"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"接続済みのデバイス"</string>
+    <string name="media_transfer_this_phone" msgid="7194341457812151531">"このデバイス"</string>
+    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"このデバイスでは再生できません"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"アカウントを更新して切り替えてください"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"ダウンロードしたコンテンツをここでは再生できません"</string>
-    <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"広告が表示されてから、もう一度試してください"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"ここで再生するにはデバイスを起動してください"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"このデバイスでの再生が許可されていません"</string>
-    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"このメディアはここで再生できません"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"再生不可: ダウンロードしたコンテンツ"</string>
+    <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"広告の後にもう一度試してください"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"デバイスの起動が必要です"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"再生が許可されていません"</string>
+    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"このメディアは再生できません"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"接続エラーです。デバイスを OFF にしてから ON に戻してください"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"有線オーディオ デバイス"</string>
     <string name="help_label" msgid="3528360748637781274">"ヘルプとフィードバック"</string>
@@ -574,7 +580,7 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"ユーザー"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"制限付きプロファイル"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"新しいユーザーを追加しますか?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"追加ユーザーを作成して、このデバイスを他のユーザーと共有できます。各ユーザーは各自のスペースを所有して、アプリや壁紙などのカスタマイズを行うことができます。Wi-Fi など、すべてのユーザーに影響するデバイス設定を変更することもできます。\n\n新しく追加したユーザーは各自でスペースをセットアップする必要があります。\n\nすべてのユーザーがアプリを更新でき、その影響は他のユーザーにも及びます。ユーザー補助機能の設定とサービスは新しいユーザーに適用されないことがあります。"</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"追加したユーザーとは、このデバイスを共有できます。各ユーザーには独自のスペースが作成され、アプリや壁紙などをカスタマイズできます。Wi-Fi など、すべてのユーザーに影響するデバイス設定を変更することもできます。\n\n新しいユーザーは各自でスペースをセットアップする必要があります。\n\nアプリの更新は、すべてのユーザーが行えます。ユーザー補助機能の設定とサービスは新しいユーザーに引き継がれないことがあります。"</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"新しく追加したユーザーは各自でスペースをセットアップする必要があります。\n\nすべてのユーザーがアプリを更新でき、その影響は他のユーザーにも及びます。"</string>
     <string name="user_grant_admin_title" msgid="5157031020083343984">"このユーザーを管理者にしますか?"</string>
     <string name="user_grant_admin_message" msgid="1673791931033486709">"管理者には、他のユーザーにはない特別な権限が与えられます。管理者は、すべてのユーザーの管理、このデバイスの更新やリセット、設定の変更、インストール済みのすべてのアプリの確認、他のユーザーに対する管理者権限の許可や取り消しを行えます。"</string>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"上に移動"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"指定しない"</string>
+    <string name="neuter" msgid="2075249330106127310">"中性"</string>
+    <string name="feminine" msgid="1529155595310784757">"女性"</string>
+    <string name="masculine" msgid="4653978041013996303">"男性"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ka/arrays.xml b/packages/SettingsLib/res/values-ka/arrays.xml
index be44038..4de27e7 100644
--- a/packages/SettingsLib/res/values-ka/arrays.xml
+++ b/packages/SettingsLib/res/values-ka/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"აუდიო წყარo"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index 99ee13a..fb7bada 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM წვდომა"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD აუდიო: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD აუდიო"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"სმენის მოწყობილობები"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE აუდიო"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"დაკავშირებულია სმენის მოწყობილობებთან"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"სმენის მოწყობილობები"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE-აუდიო"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"დაკავშირებულია სმენის მოწყობილობებთან"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"დაკავშირებულია LE აუდიოსთან"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"დაკავშირებულია აუდიო მულტიმედიურ სისტემასთან"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"დაკავშირებულია ტელეფონის აუდიო მოწყობილობასთან"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"გამოიყენეთ ტელეფონის აუდიომოწყობილობაში"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ფაილების ტრანსფერისათვის გამოყენება"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"შეტანისთვის გამოყენება"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"გამოყენება სმენის მოწყობილობებისთვის"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"გამოყენება სმენის მოწყობილობებისთვის"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"გამოიყენება შემდეგისთვის: LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"დაწყვილება"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"დაწყვილება"</string>
@@ -174,7 +174,7 @@
     <string name="launch_defaults_some" msgid="3631650616557252926">"ზოგიერთი ნაგულისხმევი პარამეტრი დაყენებულია"</string>
     <string name="launch_defaults_none" msgid="8049374306261262709">"ნაგულისხმევი პარამეტრები არ არის დაყენებული."</string>
     <string name="tts_settings" msgid="8130616705989351312">"ტექსტის გახმოვანების პარამეტრები"</string>
-    <string name="tts_settings_title" msgid="7602210956640483039">"მეტყველების სინთეზი"</string>
+    <string name="tts_settings_title" msgid="7602210956640483039">"გახმოვანებული ტექსტის გამოტანა"</string>
     <string name="tts_default_rate_title" msgid="3964187817364304022">"მეტყველების ტემპი"</string>
     <string name="tts_default_rate_summary" msgid="3781937042151716987">"ტექსტის თხრობის სიჩქარე"</string>
     <string name="tts_default_pitch_title" msgid="6988592215554485479">"სიმაღლე"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"აირჩიეთ პროფილი"</string>
     <string name="category_personal" msgid="6236798763159385225">"პირადი"</string>
     <string name="category_work" msgid="4014193632325996115">"სამსახური"</string>
+    <string name="category_clone" msgid="1554511758987195974">"კლონის შექმნა"</string>
     <string name="development_settings_title" msgid="140296922921597393">"პარამეტრები დეველოპერებისთვის"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"დეველოპერთა პარამეტრების ჩართვა"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"პარამეტრების დაყენება აპების დეველოპერებისთვის"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"ეკრანის გადაფარვა შეხების მონაცემების ჩვენებით"</string>
     <string name="show_touches" msgid="8437666942161289025">"შეხებების ჩვენება"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"შეხებებისთვის ვიზუალური უკუკავშირის ჩვენება"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"კლავიშების დაჭერის ჩვენება"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"ვიზუალური გამოხმაურების ჩვენება კლავიშის დაჭერაზე"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"ზედაპირის განახლებების ჩვენება"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"ფანჯრის მთელი ზედაპირის აციმციმება მისი განახლებისას"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"განახლებების ჩვენება"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"მეტი დრო."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ნაკლები დრო."</string>
     <string name="cancel" msgid="5665114069455378395">"გაუქმება"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"შემდეგ"</string>
+    <string name="back" msgid="5554327870352703710">"უკან"</string>
+    <string name="save" msgid="3745809743277153149">"შენახვა"</string>
     <string name="okay" msgid="949938843324579502">"კარგი"</string>
     <string name="done" msgid="381184316122520313">"მზადაა"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"მაღვიძარები და შეხსენებები"</string>
@@ -547,10 +547,13 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"ახლახან"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"ეს ტელეფონი"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"ეს ტაბლეტი"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"დინამიკის სამაგრი"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"გარე მოწყობილობა"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"დაკავშირებული მოწყობილობა"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"ეს ტელეფონი"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"ამ მოწყობილობაზე დაკვრა შეუძლებელია"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"გადასართავად განაახლეთ ანგარიში"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"აქ ჩამოტვირთვების თამაში შეუძლებელია"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"შეუძლებელია აქ ჩამოტვირ. თამაში"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"სცადეთ ხელახლა რეკლამის შემდეგ"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"დასაკრავად გამოაღვიძეთ ტელეფონი"</string>
     <string name="media_output_status_unauthorized" msgid="5880222828273853838">"მოწყობილობა არ არის ავტორიზებული დასაკრავად"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"დაემატოს ახალი მომხმარებელი?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"დამატებითი მომხმარებლების შექმნით, შეგიძლიათ ეს მოწყობილობა სხვებს გაუზიაროთ. ყოველ მომხმარებელს თავისი სივრცე აქვს, რომლის პერსონალიზება შეუძლია საკუთარი აპებით, ფონით და ა.შ. მომხმარებლებს აგრეთვე შეუძლიათ ისეთი პარამეტრების მორგება, როგორიცაა Wi‑Fi, რაც ყველაზე გავრცელდება.\n\nახალი მომხმარებლის დამატების შემდეგ, მომხმარებელმა საკუთარი სივრცე უნდა დააყენოს.\n\nყველა მომხმარებელი შეძლებს აპების ყველა სხვა მომხმარებლისთვის განახლებას. მარტივი წვდომის პარამეტრები/სერვისები შესაძლოა ახალ მომხმარებლებზე არ გავრცელდეს."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"ახალი მომხმარებლის დამატებისას, ამ მომხმარებელს საკუთარი სივრცის შექმნა მოუწევს.\n\nნებისმიერ მომხმარებელს შეუძლია აპები ყველა სხვა მომხმარებლისათვის განაახლოს."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"გსურთ ამ მომხმარებლის ადმინისტრატორად დანიშვნა?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"ადმინისტრატორებს აქვთ სპეციალური პრივილეგიები, დანარჩენი მომხმარებლებისგან განსხვავებით. ადმინისტრატორს შეუძლია მართოს ყველა მომხმარებელი, განაახლოს ან გადააყენოს ეს მოწყობილობა, შეცვალოს პარამეტრები, ნახოს ყველა დაინსტალირებული აპი და მიანიჭოს ან ჩამოართვას ადმინისტრატორის პრივილეგიები სხვებს."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"ადმინისტრატორად დანიშვნა"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"გსურთ მომხმარებლის პარამეტრების დაყენება?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"დარწმუნდით, რომ პირს შეუძლია მოწყობილობის აღება და საკუთარი სივრცის დაყენება"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"გსურთ დავაყენო პროფილი ახლა?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ამ ქმედებით დაიწყება სტუმრის ახალი სესია და წაიშლება ყველა აპი და მონაცემი მიმდინარე სესიიდან"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"გსურთ სტუმრის რეჟიმიდან გასვლა?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"ეს ქმედება წაშლის აპებსა და მონაცემებს სტუმრის რეჟიმის მიმდინარე სესიიდან"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"დიახ, გახდეს ის ადმინისტრატორი"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"არა, არ გახდეს ის ადმინისტრატორი"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"გასვლა"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"გსურთ სტუმრის აქტივობის შენახვა?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"შეგიძლიათ შეინახოთ აქტივობა მიმდინარე სესიიდან ან წაშალოთ ყველა აპი და მონაცემი"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"ზემოთ გადატანა"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"არ არის მითითებული"</string>
+    <string name="neuter" msgid="2075249330106127310">"საშუალო"</string>
+    <string name="feminine" msgid="1529155595310784757">"მდედრობითი"</string>
+    <string name="masculine" msgid="4653978041013996303">"მამრობითი"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-kk/arrays.xml b/packages/SettingsLib/res/values-kk/arrays.xml
index 7d71699..6c8d59f 100644
--- a/packages/SettingsLib/res/values-kk/arrays.xml
+++ b/packages/SettingsLib/res/values-kk/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Аудио көзі"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index c6381d6..0c55c2d 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -84,7 +84,7 @@
     <string name="preference_summary_default_combination" msgid="2644094566845577901">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="7739366554710388701">"Ажыратылған"</string>
     <string name="bluetooth_disconnecting" msgid="7638892134401574338">"Ажыратылуда…"</string>
-    <string name="bluetooth_connecting" msgid="5871702668260192755">"Жалғауда..."</string>
+    <string name="bluetooth_connecting" msgid="5871702668260192755">"Қосылып жатыр..."</string>
     <string name="bluetooth_connected" msgid="8065345572198502293">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> жалғанды"</string>
     <string name="bluetooth_pairing" msgid="4269046942588193600">"Жұптасып жатыр..."</string>
     <string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> жалғанды (телефонсыз)"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM картасына кіру"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD форматты аудио: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD форматты аудио"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Есту аппараттары"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Есту аппараттарына жалғанған"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Есту аппараттары"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Есту аппараттарына жалғанған"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE Audio-ға жалғанды."</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Медиа аудиосына жалғанған"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Телефон аудиосына қосылған"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Телефон аудиосы үшін қолдану"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Файлды жіберу үшін қолдану"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Кіріс үшін қолдану"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Есту аппараттары үшін пайдалану"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Есту аппараттары үшін пайдалану"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO үшін пайдалану"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Жұптау"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ЖҰПТАУ"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Профильді таңдау"</string>
     <string name="category_personal" msgid="6236798763159385225">"Жеке"</string>
     <string name="category_work" msgid="4014193632325996115">"Жұмыс"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Клондау"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Әзірлеуші опциялары"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Әзірлеуші ​​параметрлерін қосу"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Қолданба дамыту үшін опцияларын реттеу"</string>
@@ -253,18 +254,18 @@
     <string name="adb_wireless_qrcode_pairing_description" msgid="6014121407143607851">"QR кодын сканерлеп, құрылғыны Wi‑Fi арқылы жұптау"</string>
     <string name="adb_wireless_no_network_msg" msgid="2365795244718494658">"Wi-Fi желісіне қосылыңыз."</string>
     <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, түзету, әзірлеуші"</string>
-    <string name="bugreport_in_power" msgid="8664089072534638709">"Қате туралы хабарлау"</string>
+    <string name="bugreport_in_power" msgid="8664089072534638709">"Қате туралы есеп жылдам пәрмені"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Қуат мәзірінде қате туралы хабарлауға арналған түймені көрсету"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Ояу тұру"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"Зарядтау кезінде экран өшпейді."</string>
-    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Bluetooth HCI қадағалау журналын қосу"</string>
+    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Bluetooth HCI snoop журналын қосу"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Bluetooth пакеттерін алу (осы параметрді өзгерткен соң, Bluetooth-ты қосыңыз немесе өшіріңіз)"</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"OEM құлып ашу функциясы"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"Операциялық жүйені жүктеу құралының құлпыy ашуға рұқсат ету"</string>
     <string name="confirm_enable_oem_unlock_title" msgid="8249318129774367535">"OEM бекітпесін ашуға рұқсат ету керек пе?"</string>
     <string name="confirm_enable_oem_unlock_text" msgid="854131050791011970">"ЕСКЕРТУ: осы параметр қосулы кезде, құрылғыны қорғау мүмкіндіктері жұмыс істемейді."</string>
     <string name="mock_location_app" msgid="6269380172542248304">"Жалған локация қолданбасын таңдау"</string>
-    <string name="mock_location_app_not_set" msgid="6972032787262831155">"Ешқандай жалған локация қолданбасы орнатылмаған"</string>
+    <string name="mock_location_app_not_set" msgid="6972032787262831155">"Ешқандай жалған локация қолданбасы орнатылмаған."</string>
     <string name="mock_location_app_set" msgid="4706722469342913843">"Жалған локация қолданбасы: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="6829757985772659599">"Желі орнату"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"Сымсыз дисплей сертификаты"</string>
@@ -326,8 +327,8 @@
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Жетілдіру параметрлеріне рұқсат берілсін бе?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Бұл параметрлер жетілдіру мақсатында ғана қолданылады. Олар құрылғыңыз бен қолданбаларыңыздың бұзылуына немесе әдеттен тыс әрекеттерге себеп болуы мүмкін."</string>
     <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"USB арқылы орнатылған қолданбаларды растау"</string>
-    <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"ADB/ADT арқылы орнатылған қолданбалардың қауіпсіздігін тексеру."</string>
-    <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"Bluetooth құрылғылары атаусыз (тек MAC мекенжайымен) көрсетіледі"</string>
+    <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"ADB/ADT арқылы орнатылған қолданбалардың қауіпсіздігі тексеріледі."</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"Bluetooth құрылғылары атаусыз (тек MAC мекенжайымен) көрсетіледі."</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"Қашықтағы құрылғыларда дыбыстың тым қатты шығуы немесе реттеуге келмеуі сияқты дыбыс деңгейіне қатысты мәселелер туындағанда, Bluetooth абсолютті дыбыс деңгейі функциясын өшіреді."</string>
     <string name="bluetooth_enable_gabeldorsche_summary" msgid="2054730331770712629">"Bluetooth Gabeldorsche функциясы стэгін қосады."</string>
     <string name="enhanced_connectivity_summary" msgid="1576414159820676330">"Жетілдірілген байланыс функциясын қосады."</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Экран бетіне түртілген элемент дерегі көрсетіледі"</string>
     <string name="show_touches" msgid="8437666942161289025">"Түрту қимылын көрсету"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Түрту қимылын экраннан көрсету"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Түйменің басылуын көрсету"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Түйменің басылуын экраннан көрсету"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Бедердің жаңарғанын көрсету"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Бедері жаңарғанда, терезені түгелдей жыпылықтату"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Көріністің жаңарғанын көрсету"</string>
@@ -468,12 +471,12 @@
     <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Құрылғы көп ұзамай өшуі мүмкін (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
     <string name="power_charging" msgid="6727132649743436802">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_remaining_charging_duration_only" msgid="8085099012811384899">"Толық зарядталғанға дейін <xliff:g id="TIME">%1$s</xliff:g> қалды."</string>
-    <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – толық зарядталғанға дейін <xliff:g id="TIME">%2$s</xliff:g> қалды."</string>
+    <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g>: толық зарядталуға <xliff:g id="TIME">%2$s</xliff:g> қалды"</string>
     <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – зарядтау оңтайландырылды"</string>
     <string name="power_charging_future_paused" msgid="4730177778538118032">"<xliff:g id="LEVEL">%1$s</xliff:g> – зарядтау оңтайландырылды."</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Белгісіз"</string>
     <string name="battery_info_status_charging" msgid="4279958015430387405">"Зарядталуда"</string>
-    <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Жылдам зарядталуда"</string>
+    <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="8573274094093364791">"Зарядталып жатыр."</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Көбірек уақыт."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Азырақ уақыт."</string>
     <string name="cancel" msgid="5665114069455378395">"Бас тарту"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Келесі"</string>
+    <string name="back" msgid="5554327870352703710">"Артқа"</string>
+    <string name="save" msgid="3745809743277153149">"Сақтау"</string>
     <string name="okay" msgid="949938843324579502">"Жарайды"</string>
     <string name="done" msgid="381184316122520313">"Дайын"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Оятқыш және еске салғыш"</string>
@@ -547,12 +547,15 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Дәл қазір"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Осы телефон"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Осы планшет"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Қондыру динамигі"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Сыртқы құрылғы"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Жалғанған құрылғы"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Осы телефон"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Осы құрылғыда ойнату мүмкін емес."</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Ауысу үшін аккаунтты жаңартыңыз."</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Жүктеп алынғандарды осы жерде ойнату мүмкін емес."</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Жарнамадан кейін қайталап көріңіз."</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Осы жерде ойнату үшін құрылғыны оятыңыз."</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Осы жерде ойнату үшін құрылғыны ұйқы режимінен шығарыңыз."</string>
     <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Ойнату үшін авторизация керек."</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Бұл мультимедиа файлын осы жерде ойнату мүмкін емес."</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Байланыс орнату қатесі шығуып жатыр. Құрылғыны өшіріп, қайта қосыңыз."</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Пайдаланушы"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Шектелген профайл"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Жаңа пайдаланушы қосылсын ба?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Қосымша профильдер жасай отырып, бұл құрылғыны басқалармен ортақ пайдалануға болады. Әр пайдаланушы қолданбаларды, тұсқағаздарды орнатып, профилін өз қалауынша реттей алады. Сондай-ақ барлығы ортақ қолданатын Wi‑Fi сияқты параметрлерді де реттеуге болады.\n\nЖаңа пайдаланушы енгізілгенде, ол өз профилін реттеуі керек болады.\n\nКез келген пайдаланушы барлық басқа пайдаланушылар үшін қолданбаларды жаңарта алады. Арнайы мүмкіндіктерге қатысты параметрлер мен қызметтер жаңа пайдаланушыға өтпейді."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"Жаңа пайдаланушыны қосқанда, сол адам өз кеңістігін реттеуі керек.\n\nКез келген пайдаланушы барлық басқа пайдаланушылар үшін қолданбаларды жаңарта алады."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Қосымша пайдаланушылар жасай отырып, бұл құрылғыны басқалармен бөлісуге болады. Әр пайдаланушы қолданбалар, тұсқағаздар орнатып, профилін қалауынша реттей алады. Барлық пайдаланушы қолданатын Wi‑Fi сияқты параметрлерді де реттеуге болады.\n\nЖаңа пайдаланушы қосылғанда, ол өз профилін реттеуі керек.\n\nКез келген пайдаланушы басқа пайдаланушылар үшін қолданбаларды жаңарта алады. Арнайы мүмкіндіктерге қатысты параметрлер мен қызметтер жаңа пайдаланушыға берілмейді."</string>
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"Жаңадан қосылған пайдаланушы өз профилін реттеуі керек.\n\nКез келген пайдаланушы басқалар үшін қолданбаларды жаңарта алады."</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Осы пайдаланушыны әкімші ету керек пе?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Әкімшілер басқа пайдаланушыларда болмайтын арнайы өкілеттерге ие. Әкімші мына әрекеттерді орындай алады: барлық пайдаланушыны басқару, осы құрылғыны жаңарту не бастапқы күйге қайтару, параметрлерді өзгерту, орнатылған құрылғының барлығын көру және әкімші өкілеттерін басқа пайдаланушыларға беру не қайтару."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Әкімші ету"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Профиль құру керек пе?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Пайдаланушы құрылғыны алып, өз профилін реттеуі керек."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Профайл қазір жасақталсын ба?"</string>
@@ -598,12 +598,12 @@
     <string name="user_need_lock_message" msgid="4311424336209509301">"Шектелген профайл жасақтауға дейін қолданбалар мен жеке деректерді қорғау үшін экран бекітпесін тағайындау қажет."</string>
     <string name="user_set_lock_button" msgid="1427128184982594856">"Бекітпе тағайындау"</string>
     <string name="user_switch_to_user" msgid="6975428297154968543">"Пайдаланушыны ауыстыру: <xliff:g id="USER_NAME">%s</xliff:g>"</string>
-    <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"Жаңа пайдаланушы профилі жасалуда…"</string>
-    <string name="creating_new_guest_dialog_message" msgid="1114905602181350690">"Жаңа қонақ профилі жасалуда…"</string>
+    <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"Жаңа пайдаланушы профилі жасалып жатыр…"</string>
+    <string name="creating_new_guest_dialog_message" msgid="1114905602181350690">"Жаңа қонақ профилі жасалып жатыр…"</string>
     <string name="add_user_failed" msgid="4809887794313944872">"Жаңа пайдаланушы жасалмады."</string>
     <string name="add_guest_failed" msgid="8074548434469843443">"Жаңа қонақ профилі жасалмады."</string>
     <string name="user_nickname" msgid="262624187455825083">"Лақап ат"</string>
-    <string name="user_add_user" msgid="7876449291500212468">"Пайдаланушы қосу"</string>
+    <string name="user_add_user" msgid="7876449291500212468">"Пайда­ланушы қосу"</string>
     <string name="guest_new_guest" msgid="3482026122932643557">"Қонақ қосу"</string>
     <string name="guest_exit_guest" msgid="5908239569510734136">"Қонақты жою"</string>
     <string name="guest_reset_guest" msgid="6110013010356013758">"Қонақ сеансын әдепкі күйге қайтару"</string>
@@ -616,13 +616,11 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Иә, әкімші болсын"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Жоқ, әкімші болмасын"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Шығу"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Қонақ әрекетін сақтау керек пе?"</string>
-    <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Ағымдағы сеанстағы әрекетті сақтай не барлық қолданба мен деректі жоя аласыз."</string>
+    <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>
@@ -668,7 +666,7 @@
     <string name="accessibility_data_one_bar" msgid="6892888138070752480">"Дерекқор бір баған."</string>
     <string name="accessibility_data_two_bars" msgid="9202641507241802499">"Дерекқор екі баған."</string>
     <string name="accessibility_data_three_bars" msgid="2813876214466722413">"Дерекқор үш баған."</string>
-    <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Дерекқор сигналы толы."</string>
+    <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Дерек сигналы толы."</string>
     <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet ажыратылған."</string>
     <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string>
     <string name="accessibility_no_calling" msgid="3540827068323895748">"Қоңырау шалу мүмкін емес."</string>
@@ -679,7 +677,7 @@
     <string name="keyboard_layout_default_label" msgid="1997292217218546957">"Әдепкі"</string>
     <string name="turn_screen_on_title" msgid="3266937298097573424">"Экранды қосу"</string>
     <string name="allow_turn_screen_on" msgid="6194845766392742639">"Экранды қосуға рұқсат беру"</string>
-    <string name="allow_turn_screen_on_description" msgid="43834403291575164">"Қолданбаның экранды қосуына рұқсат береді. Рұқсат берілсе, қолданба кез келген уақытта экранды өздігінен қосуы мүмкін."</string>
+    <string name="allow_turn_screen_on_description" msgid="43834403291575164">"Қолданбаға экранды қосуға рұқсат береді. Рұқсат берілсе, қолданба кез келген уақытта экранды өздігінен қосуы мүмкін."</string>
     <string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасын таратуды тоқтатасыз ба?"</string>
     <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="268234802198852753">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> қолданбасын таратсаңыз немесе аудио шығысын өзгертсеңіз, қазіргі тарату сеансы тоқтайды."</string>
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> қолданбасын тарату"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Жоғары жылжыту"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Көрсетілмеген"</string>
+    <string name="neuter" msgid="2075249330106127310">"Орта тек"</string>
+    <string name="feminine" msgid="1529155595310784757">"Аналық тек"</string>
+    <string name="masculine" msgid="4653978041013996303">"Аталық тек"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-km/arrays.xml b/packages/SettingsLib/res/values-km/arrays.xml
index 548e2d6..3a533ce 100644
--- a/packages/SettingsLib/res/values-km/arrays.xml
+++ b/packages/SettingsLib/res/values-km/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"ប្រភព​អូឌីយ៉ូ"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index 5444bd1..f9f964f 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -99,7 +99,7 @@
     <string name="bluetooth_battery_level" msgid="2893696778200201555">"ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="bluetooth_battery_level_untethered" msgid="4002282355111504349">"L៖ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R៖ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
     <string name="bluetooth_active_no_battery_level" msgid="4155462233006205630">"សកម្ម"</string>
-    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"សកម្មខាងឆ្វេងតែប៉ុណ្ណោះ"</string>
+    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"សកម្ម ខាងឆ្វេងតែប៉ុណ្ណោះ"</string>
     <string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"សកម្មខាងស្ដាំតែប៉ុណ្ណោះ"</string>
     <string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"សកម្មខាងឆ្វេង និងស្ដាំ"</string>
     <string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"សំឡេង​មេឌៀ"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"ការចូលដំណើរការស៊ីម"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"សំឡេងកម្រិត HD៖ <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"សំឡេងកម្រិត HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"ឧបករណ៍​ជំនួយការ​ស្ដាប់"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"បាន​ភ្ជាប់ទៅ​ឧបករណ៍​ជំនួយការ​ស្ដាប់"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"ឧបករណ៍ជំនួយការស្ដាប់"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"បានភ្ជាប់ទៅ​ឧបករណ៍​ជំនួយ​ការស្ដាប់"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"បានភ្ជាប់​ទៅ LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"បា​ន​ភ្ជាប់​ទៅ​អូឌីយ៉ូ​មេឌៀ"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"តភ្ជាប់​ទៅ​អូឌីយ៉ូ​ទូរស័ព្ទ"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"ប្រើ​សម្រាប់​​អូឌីយ៉ូ​ទូរស័ព្ទ"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ប្រើ​សម្រាប់​ផ្ទេរ​ឯកសារ"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ប្រើ​សម្រាប់​បញ្ចូល"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"ប្រើ​សម្រាប់​ឧបករណ៍​ជំនួយការ​ស្តាប់"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"ប្រើ​សម្រាប់​ឧបករណ៍​ជំនួយការ​ស្ដាប់"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"ប្រើ​សម្រាប់ LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"ផ្គូផ្គង"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ផ្គូផ្គង"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"ជ្រើសរើស​កម្រងព័ត៌មាន"</string>
     <string name="category_personal" msgid="6236798763159385225">"ផ្ទាល់ខ្លួន"</string>
     <string name="category_work" msgid="4014193632325996115">"ការងារ"</string>
+    <string name="category_clone" msgid="1554511758987195974">"ក្លូន"</string>
     <string name="development_settings_title" msgid="140296922921597393">"ជម្រើសសម្រាប់អ្នកអភិវឌ្ឍន៍"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"បើកដំណើរការជម្រើសអ្នកអភិវឌ្ឍន៍"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"កំណត់​ជម្រើស​សម្រាប់​ការ​អភិវឌ្ឍ​កម្មវិធី"</string>
@@ -309,7 +310,7 @@
     <string name="select_logd_size_dialog_title" msgid="2105401994681013578">"ជ្រើស​ទំហំ Logger per log buffer"</string>
     <string name="dev_logpersist_clear_warning_title" msgid="8631859265777337991">"ជម្រះទំហំផ្ទុក logger ដែលប្រើបានយូរឬ?"</string>
     <string name="dev_logpersist_clear_warning_message" msgid="6447590867594287413">"នៅពេលដែលយើងឈប់ធ្វើការត្រួតពិនិត្យតទៅទៀតដោយប្រើ logger ដែលប្រើបានយូរ យើងត្រូវបានតម្រូវឲ្យលុបទិន្នន័យ logger ដែលមាននៅលើឧបករណ៍របស់អ្នក"</string>
-    <string name="select_logpersist_title" msgid="447071974007104196">"ផ្ទុកទិន្នន័យឡុកជើនៅលើឧបករណ៍ឲ្យជាប់"</string>
+    <string name="select_logpersist_title" msgid="447071974007104196">"ផ្ទុកទិន្នន័យឡុកជើនៅលើឧបករណ៍ឲ្យជាប់លាប់"</string>
     <string name="select_logpersist_dialog_title" msgid="7745193591195485594">"ជ្រើសអង្គចងចាំកំណត់ហេតុបណ្តោះអាសន្នដើម្បីផ្ទុកនៅលើឧបករណ៍ឲ្យបានយូរ"</string>
     <string name="select_usb_configuration_title" msgid="6339801314922294586">"ជ្រើស​ការ​កំណត់​រចនាសម្ព័ន្ធ​យូអេសប៊ី"</string>
     <string name="select_usb_configuration_dialog_title" msgid="3579567144722589237">"ជ្រើស​ការ​កំណត់​រចនាសម្ព័ន្ធ​យូអេសប៊ី"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"អេក្រង់​ត្រួត​គ្នា​បង្ហាញ​ទិន្នន័យ​ប៉ះ​បច្ចុប្បន្ន"</string>
     <string name="show_touches" msgid="8437666942161289025">"បង្ហាញការចុច"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"បង្ហាញដានចុច នៅពេលចុច"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"បង្ហាញការចុចគ្រាប់ចុច"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"បង្ហាញព័ត៌មានឆ្លើយតបជារូបភាពសម្រាប់ការចុចគ្រាប់ចុចរូបវន្ត"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"បង្ហាញ​បច្ចុប្បន្នភាព​ផ្ទៃ"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"ផ្ទៃ​វីនដូទាំង​មូល​បញ្ចេញពន្លឺ​នៅពេល​ធ្វើ​បច្ចុប្បន្នភាព"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"បង្ហាញ​បច្ចុប្បន្នភាពទិដ្ឋភាព"</string>
@@ -380,8 +383,8 @@
     <string name="track_frame_time" msgid="522674651937771106">"ការបំប្លែង​កម្រងព័ត៌មាន HWUI"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"បើក​ស្រទាប់​ជួសជុល GPU"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"អនុញ្ញាតឱ្យ​ផ្ទុក​ស្រទាប់​ជួស​ជុល GPU សម្រាប់​កម្មវិធី​ជួសជុល"</string>
-    <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"បើកការកត់ត្រាឥតសំចៃអំពីអ្នកផ្គត់ផ្គង់"</string>
-    <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"រួមបញ្ចូលកំណត់​ហេតុបន្ថែមអំពី​អ្នកផ្គត់ផ្គង់សម្រាប់ឧបករណ៍ជាក់លាក់​នៅក្នុងរបាយការណ៍​អំពីបញ្ហា ដែលអាច​មានផ្ទុកព័ត៌មាន​ឯកជន ប្រើប្រាស់​ថ្មច្រើនជាង និង/ឬប្រើប្រាស់​ទំហំផ្ទុកច្រើនជាង។"</string>
+    <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"បើកការកត់ត្រាអ្នកផ្គត់ផ្គង់ឥតសំចៃ"</string>
+    <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"រួមបញ្ចូលកំណត់​ហេតុ​អ្នកផ្គត់ផ្គង់​ពាក់ព័ន្ធ​នឹងឧបករណ៍បន្ថែមទៀតនៅក្នុងរបាយការណ៍​អំពីបញ្ហា ដែលអាច​មានផ្ទុកព័ត៌មាន​ឯកជន ប្រើប្រាស់​ថ្មច្រើនជាង និង/ឬប្រើប្រាស់​ទំហំផ្ទុកច្រើនជាង។"</string>
     <string name="window_animation_scale_title" msgid="5236381298376812508">"មាត្រដ្ឋាន​ចលនា​វិនដូ"</string>
     <string name="transition_animation_scale_title" msgid="1278477690695439337">"មាត្រដ្ឋាន​ដំណើរ​ផ្លាស់ប្ដូរ​ចលនា"</string>
     <string name="animator_duration_scale_title" msgid="7082913931326085176">"មាត្រដ្ឋាន​រយៈពេល​នៃ​កម្មវិធី​ចលនា"</string>
@@ -527,7 +530,7 @@
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"ម៉ោងរោទ៍ និងការរំលឹក"</string>
     <string name="alarms_and_reminders_switch_title" msgid="4939393911531826222">"អនុញ្ញាតឱ្យ​កំណត់​ម៉ោងរោទ៍ និង​ការរំលឹក"</string>
     <string name="alarms_and_reminders_title" msgid="8819933264635406032">"ម៉ោងរោទ៍ និង​ការរំលឹក"</string>
-    <string name="alarms_and_reminders_footer_title" msgid="6302587438389079695">"អនុញ្ញាតឱ្យ​កម្មវិធីនេះ​កំណត់ម៉ោងរោទ៍ និងកំណត់កាលវិភាគសកម្មភាពដែលតម្រូវឱ្យទាន់ពេលវេលា។ ការធ្វើបែបនេះអនុញ្ញាតឱ្យកម្មវិធីនេះដំណើរការនៅផ្ទៃខាងក្រោយ ដែលអាចប្រើថ្មច្រើនជាងមុន។\n\nប្រសិនបើបិទការអនុញ្ញាតនេះ ម៉ោងរោទ៍ដែលមានស្រាប់ និងព្រឹត្តិការណ៍ផ្អែកលើពេលវេលាដែលកំណត់ដោយកម្មវិធីនេះ​នឹងមិនដំណើរការទេ។"</string>
+    <string name="alarms_and_reminders_footer_title" msgid="6302587438389079695">"អនុញ្ញាតឱ្យ​កម្មវិធីនេះ​កំណត់ម៉ោងរោទ៍ និងកំណត់កាលវិភាគសកម្មភាពដែលតម្រូវឱ្យទាន់ពេលវេលា។ ការធ្វើបែបនេះអនុញ្ញាតឱ្យកម្មវិធីនេះដំណើរការនៅផ្ទៃខាងក្រោយ ដែលអាចប្រើថ្មកាន់តែច្រើន។\n\nប្រសិនបើបិទការអនុញ្ញាតនេះ ម៉ោងរោទ៍ដែលមានស្រាប់ និងព្រឹត្តិការណ៍ផ្អែកលើពេលវេលាដែលកំណត់ដោយកម្មវិធីនេះ​នឹងមិនដំណើរការទេ។"</string>
     <string name="keywords_alarms_and_reminders" msgid="6633360095891110611">"កាលវិភាគ ម៉ោងរោទ៍ ការរំលឹក នាឡិកា"</string>
     <string name="zen_mode_enable_dialog_turn_on" msgid="6418297231575050426">"បើក"</string>
     <string name="zen_mode_settings_turn_on_dialog_title" msgid="2760567063190790696">"បើកមុខងារកុំរំខាន"</string>
@@ -544,13 +547,16 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"អម្បាញ់មិញ"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"ទូរសព្ទនេះ"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"ថេប្លេតនេះ"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"ឧបករណ៍បំពងសំឡេងដែលមានជើងភ្ជាប់"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"ឧបករណ៍ខាងក្រៅ"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"​ឧបករណ៍ដែលបាន​ភ្ជាប់"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"ទូរសព្ទនេះ"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"មិនអាចចាក់នៅលើ​ឧបករណ៍នេះបានទេ"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"ដំឡើងកម្រិតគណនី ដើម្បីប្ដូរ"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"មិនអាចចាក់ខ្លឹមសារដែលបានទាញយកនៅទីនេះបានទេ"</string>
-    <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"ព្យាយាមម្ដងទៀត បន្ទាប់ពីការផ្សាយពាណិជ្ជកម្ម"</string>
+    <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"ព្យាយាមម្ដងទៀត បន្ទាប់ពីពាណិជ្ជកម្ម"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"ដាស់ឧបករណ៍ឱ្យចាក់នៅទីនេះ"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"ឧបករណ៍មិន​យល់ព្រមឱ្យចាក់ទេ"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"ឧបករណ៍មិន​ព្រមឱ្យចាក់ទេ"</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"មិនអាចចាក់មេឌៀនេះ​នៅទីនេះបានទេ"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"មាន​បញ្ហា​ក្នុងការ​ភ្ជាប់។ បិទ រួច​បើក​ឧបករណ៍​វិញ"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"ឧបករណ៍​សំឡេងប្រើខ្សែ"</string>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"ផ្លាស់ទី​ឡើង​លើ"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"មិនបានបញ្ជាក់"</string>
+    <string name="neuter" msgid="2075249330106127310">"អភេទ"</string>
+    <string name="feminine" msgid="1529155595310784757">"ស្រី"</string>
+    <string name="masculine" msgid="4653978041013996303">"ប្រុស"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-kn/arrays.xml b/packages/SettingsLib/res/values-kn/arrays.xml
index aa29850..39c49a1 100644
--- a/packages/SettingsLib/res/values-kn/arrays.xml
+++ b/packages/SettingsLib/res/values-kn/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (ಸುರಕ್ಷಿತ)"</item>
     <item msgid="7322156123728520872">"4K (ಮಾಪನ ಮಾಡದ)"</item>
     <item msgid="7735692090314849188">"4K (ಮಾಪನ ಮಾಡದ, ಸುರಕ್ಷಿತ)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (ಡ್ಯುಯಲ್ ಸ್ಕ್ರೀನ್)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"ಯಾವುದೂ ಇಲ್ಲ"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"ಆಡಿಯೊ ಮೂಲ"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index f64bd53..e17121a 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -49,7 +49,7 @@
     <string name="wifi_security_none_owe" msgid="5241745828327404101">"ಯಾವುದೂ ಇಲ್ಲ/Enhanced Open"</string>
     <string name="wifi_security_owe" msgid="3343421403561657809">"Enhanced Open"</string>
     <string name="wifi_security_eap_suiteb" msgid="415842785991698142">"WPA3-ಎಂಟರ್‌ಪ್ರೈಸ್ 192-ಬಿಟ್"</string>
-    <string name="wifi_remembered" msgid="3266709779723179188">"ಉಳಿಸಲಾಗಿದೆ"</string>
+    <string name="wifi_remembered" msgid="3266709779723179188">"ಸೇವ್‌ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="wifi_disconnected" msgid="7054450256284661757">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="wifi_disabled_generic" msgid="2651916945380294607">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="wifi_disabled_network_failure" msgid="2660396183242399585">"IP ಕಾನ್ಫಿಗರೇಶನ್ ವಿಫಲತೆ"</string>
@@ -70,7 +70,7 @@
     <string name="wifi_limited_connection" msgid="1184778285475204682">"ಸೀಮಿತ ಸಂಪರ್ಕ"</string>
     <string name="wifi_status_no_internet" msgid="3799933875988829048">"ಇಂಟರ್ನೆಟ್ ಇಲ್ಲ"</string>
     <string name="wifi_status_sign_in_required" msgid="2236267500459526855">"ಸೈನ್ ಇನ್ ಮಾಡುವ ಅಗತ್ಯವಿದೆ"</string>
-    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"ಪ್ರವೇಶ ಕೇಂದ್ರ ತಾತ್ಕಾಲಿಕವಾಗಿ ಭರ್ತಿಯಾಗಿದೆ"</string>
+    <string name="wifi_ap_unable_to_handle_new_sta" msgid="5885145407184194503">"ಆ್ಯಕ್ಸೆಸ್ ಕೇಂದ್ರ ತಾತ್ಕಾಲಿಕವಾಗಿ ಭರ್ತಿಯಾಗಿದೆ"</string>
     <string name="osu_opening_provider" msgid="4318105381295178285">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ಅನ್ನು ತೆರೆಯಲಾಗುತ್ತಿದೆ"</string>
     <string name="osu_connect_failed" msgid="9107873364807159193">"ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
     <string name="osu_completing_sign_up" msgid="8412636665040390901">"ಸೈನ್-ಅಪ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಲಾಗುತ್ತಿದೆ…"</string>
@@ -106,17 +106,17 @@
     <string name="bluetooth_profile_headset" msgid="5395952236133499331">"ಫೋನ್ ಕರೆಗಳು"</string>
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"ಫೈಲ್ ವರ್ಗಾವಣೆ"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"ಇನ್‌ಪುಟ್‌ ಸಾಧನ"</string>
-    <string name="bluetooth_profile_pan" msgid="1006235139308318188">"ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶ"</string>
+    <string name="bluetooth_profile_pan" msgid="1006235139308318188">"ಇಂಟರ್ನೆಟ್ ಆ್ಯಕ್ಸೆಸ್"</string>
     <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"ಸಂಪರ್ಕಗಳು ಹಾಗೂ ಕರೆ ಇತಿಹಾಸ ಹಂಚಿಕೊಳ್ಳುವಿಕೆ"</string>
     <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"ಸಂಪರ್ಕಗಳು ಮತ್ತು ಕರೆ ಇತಿಹಾಸ ಹಂಚಿಕೆಗಾಗಿ ಬಳಸಿ"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕ ಹಂಚಿಕೊಳ್ಳುವಿಕೆ"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"ಪಠ್ಯ ಸಂದೇಶಗಳು"</string>
-    <string name="bluetooth_profile_sap" msgid="8304170950447934386">"ಸಿಮ್ ಪ್ರವೇಶ"</string>
+    <string name="bluetooth_profile_sap" msgid="8304170950447934386">"ಸಿಮ್ ಆ್ಯಕ್ಸೆಸ್"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD ಆಡಿಯೋ: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD ಆಡಿಯೋ"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"ಶ್ರವಣ ಸಾಧನಗಳು"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE ಆಡಿಯೋ"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"ಶ್ರವಣ ಸಾಧನಗಳಿಗೆ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"ಶ್ರವಣ ಸಾಧನಗಳು"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE ಆಡಿಯೋ"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"ಶ್ರವಣ ಸಾಧನಗಳಿಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE ಆಡಿಯೋಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"ಮಾಧ್ಯಮ ಆಡಿಯೋಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"ಫೋನ್ ಆಡಿಯೋಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"ಫೋನ್‌ ಆಡಿಯೋಗಾಗಿ ಬಳಕೆ"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ಫೈಲ್‌ ವರ್ಗಾವಣೆಗಾಗಿ ಬಳಸು"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ಇನ್‌ಪುಟ್‌ಗಾಗಿ ಬಳಸು"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"ಶ್ರವಣ ಸಾಧನಗಳಿಗಾಗಿ ಬಳಸಿ"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"ಶ್ರವಣ ಸಾಧನಗಳಿಗಾಗಿ ಬಳಸಿ"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO ಗೆ ಬಳಸಿ"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"ಜೋಡಿಸಿ"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ಜೋಡಿ ಮಾಡು"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"ರದ್ದುಮಾಡಿ"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"ಸಂಪರ್ಕಗೊಳಿಸಿದಾಗ, ಜೋಡಿಸುವಿಕೆಯು ನಿಮ್ಮ ಸಂಪರ್ಕಗಳು ಮತ್ತು ಕರೆ ಇತಿಹಾಸಕ್ಕೆ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸುತ್ತದೆ."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಜೊತೆಗೆ ಜೋಡಣೆ ಮಾಡಲಾಗಲಿಲ್ಲ."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"ತಪ್ಪಾಗಿರುವ ಪಿನ್‌ ಅಥವಾ ಪಾಸ್‌ಕೀ ಕಾರಣದಿಂದಾಗಿ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಜೊತೆಗೆ ಜೋಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"ತಪ್ಪು ಪಿನ್‌ ಅಥವಾ ಪಾಸ್‌ಕೀ ಕಾರಣ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಜೊತೆಗೆ ಜೋಡಿಸಲಾಗಲಿಲ್ಲ."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ಜೊತೆಗೆ ಸಂವಹನ ನಡೆಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"ಜೋಡಿಸುವಿಕೆಯನ್ನು <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ತಿರಸ್ಕರಿಸಿದೆ"</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"ಕಂಪ್ಯೂಟರ್‌"</string>
@@ -215,13 +215,14 @@
     <string name="choose_profile" msgid="343803890897657450">"ಪ್ರೊಫೈಲ್ ಆಯ್ಕೆ ಮಾಡಿ"</string>
     <string name="category_personal" msgid="6236798763159385225">"ವೈಯಕ್ತಿಕ"</string>
     <string name="category_work" msgid="4014193632325996115">"ಕೆಲಸ"</string>
+    <string name="category_clone" msgid="1554511758987195974">"ಕ್ಲೋನ್"</string>
     <string name="development_settings_title" msgid="140296922921597393">"ಡೆವಲಪರ್ ಆಯ್ಕೆಗಳು"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"ಡೆವಲಪರ್ ಆಯ್ಕೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"ಅಪ್ಲಿಕೇಶನ್ ಅಭಿವೃದ್ಧಿಗಾಗಿ ಆಯ್ಕೆಗಳನ್ನು ಹೊಂದಿಸಿ"</string>
     <string name="development_settings_not_available" msgid="355070198089140951">"ಈ ಬಳಕೆದಾರರಿಗೆ ಡೆವಲಪರ್‌ ಆಯ್ಕೆಗಳು ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="vpn_settings_not_available" msgid="2894137119965668920">"VPN ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಈ ಬಳಕೆದಾರರಿಗೆ ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="tethering_settings_not_available" msgid="266821736434699780">"ಟೆಥರಿಂಗ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಈ ಬಳಕೆದಾರರಿಗೆ ಲಭ್ಯವಿಲ್ಲ"</string>
-    <string name="apn_settings_not_available" msgid="1147111671403342300">"ಪ್ರವೇಶ ಬಿಂದು ಹೆಸರಿನ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಈ ಬಳಕೆದಾರರಿಗೆ ಲಭ್ಯವಿಲ್ಲ"</string>
+    <string name="apn_settings_not_available" msgid="1147111671403342300">"ಆ್ಯಕ್ಸೆಸ್ ಬಿಂದು ಹೆಸರಿನ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಈ ಬಳಕೆದಾರರಿಗೆ ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="enable_adb" msgid="8072776357237289039">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆ"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"USB ಸಂಪರ್ಕಗೊಂಡಾಗ ಡೀಬಗ್ ಮೋಡ್"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"USB ಡೀಬಗ್‌ ಮಾಡುವಿಕೆಯ ಅಧಿಕೃತಗೊಳಿಸುವಿಕೆಗಳನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ"</string>
@@ -319,7 +320,7 @@
     <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"ವೈ-ಫೈ ಸಕ್ರಿಯವಾಗಿರುವಾಗಲೂ, ಯಾವಾಗಲೂ ಮೊಬೈಲ್‌ ಡೇಟಾ ಸಕ್ರಿಯವಾಗಿರಿಸಿ (ವೇಗವಾಗಿ ನೆಟ್‌ವರ್ಕ್‌ ಬದಲಾಯಿಸಲು)."</string>
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"ಹಾರ್ಡ್‌ವೇರ್‌ನ ವೇಗವರ್ಧನೆ ಟೆಥರಿಂಗ್ ಲಭ್ಯವಿದ್ದರೆ ಅದನ್ನು ಬಳಸಿ"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆಯನ್ನು ಅನುಮತಿಸುವುದೇ?"</string>
-    <string name="adb_warning_message" msgid="8145270656419669221">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆಯು ಅಭಿವೃದ್ಧಿ ಉದ್ದೇಶಗಳಿಗೆ ಮಾತ್ರ ಆಗಿದೆ. ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ನಡುವೆ ಡೇಟಾವನ್ನು ನಕಲಿಸಲು, ಅಧಿಸೂಚನೆ ಇಲ್ಲದೆ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಸ್ಥಾಪಿಸಲು ಮತ್ತು ಲಾಗ್ ಡೇಟಾ ಓದಲು ಅದನ್ನು ಬಳಸಿ."</string>
+    <string name="adb_warning_message" msgid="8145270656419669221">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆಯು ಅಭಿವೃದ್ಧಿ ಉದ್ದೇಶಗಳಿಗೆ ಮಾತ್ರ ಆಗಿದೆ. ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ನಡುವೆ ಡೇಟಾವನ್ನು ನಕಲಿಸಲು, ನೋಟಿಫಿಕೇಶನ್ ಇಲ್ಲದೆ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಆ್ಯಪ್‍ಗಳನ್ನು ಇನ್‍ಸ್ಟಾಲ್ ಮಾಡಲು ಮತ್ತು ಲಾಗ್ ಡೇಟಾ ಓದಲು ಅದನ್ನು ಬಳಸಿ."</string>
     <string name="adbwifi_warning_title" msgid="727104571653031865">"ವೈರ್‌ಲೆಸ್ ಡೀಬಗ್ ಮಾಡುವಿಕೆಯನ್ನು ಅನುಮತಿಸಬೇಕೆ?"</string>
     <string name="adbwifi_warning_message" msgid="8005936574322702388">"ವೈರ್‌ಲೆಸ್ ಡೀಬಗ್ ಮಾಡುವಿಕೆಯು ಅಭಿವೃದ್ಧಿ ಉದ್ದೇಶಗಳಿಗೆ ಮಾತ್ರ ಆಗಿದೆ. ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ನಡುವೆ ಡೇಟಾವನ್ನು ನಕಲಿಸಲು, ಅಧಿಸೂಚನೆ ಇಲ್ಲದೆ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಆ್ಯಪ್‌ಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ಮತ್ತು ಲಾಗ್ ಡೇಟಾ ಓದಲು ಅದನ್ನು ಬಳಸಿ."</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"ನೀವು ಹಿಂದೆ ಅಧಿಕೃತಗೊಳಿಸಿದ ಎಲ್ಲ ಕಂಪ್ಯೂಟರ್‌ಗಳಿಂದ USB ಡೀಬಗ್‌ಗೆ ಪ್ರವೇಶವನ್ನು ರದ್ದುಗೊಳಿಸುವುದೇ?"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"ಪ್ರಸ್ತುತ ಸ್ಪರ್ಶ ಡೇಟಾ ತೋರಿಸುವ ಪರದೆಯ ಓವರ್‌ಲೇ"</string>
     <string name="show_touches" msgid="8437666942161289025">"ಟ್ಯಾಪ್‌ಗಳನ್ನು ತೋರಿಸಿ"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"ಟ್ಯಾಪ್‌ಗಳಿಗೆ ದೃಶ್ಯ ಪ್ರತಿಕ್ರಿಯೆ ತೋರಿಸು"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"ಕೀ ಪ್ರೆಸ್‌ಗಳನ್ನು ತೋರಿಸಿ"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"ಭೌತಿಕ ಕೀ ಪ್ರೆಸ್‌ಗಳ ವಿಷುವಲ್ ಪ್ರತಿಕ್ರಿಯೆಗಾಗಿ ನೋಡಿ"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"ಸರ್ಫೇಸ್‌‌ ಅಪ್‌ಡೇಟ್ ತೋರಿಸಿ‌"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"ಅಪ್‌ಡೇಟ್‌ ಆಗುವಾಗ ವಿಂಡೋದ ಸರ್ಫೇಸ್‌ ಫ್ಲ್ಯಾಶ್ ಆಗುತ್ತದೆ"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"\'ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಿ\' ತೋರಿಸಿ"</string>
@@ -392,7 +395,7 @@
     <string name="app_process_limit_title" msgid="8361367869453043007">"ಹಿನ್ನೆಲೆ ಪ್ರಕ್ರಿಯೆ ಮಿತಿ"</string>
     <string name="show_all_anrs" msgid="9160563836616468726">"ಹಿನ್ನೆಲೆ ANR ಗಳನ್ನು ತೋರಿಸಿ"</string>
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"ಹಿನ್ನೆಲೆ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗಾಗಿ ಅಪ್ಲಿಕೇಶನ್ ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತಿಲ್ಲ ಎಂಬ ಸಂಭಾಷಣೆ ತೋರಿಸಿ"</string>
-    <string name="show_notification_channel_warnings" msgid="3448282400127597331">"ಅಧಿಸೂಚನೆ ಎಚ್ಚರಿಕೆ ತೋರಿಸಿ"</string>
+    <string name="show_notification_channel_warnings" msgid="3448282400127597331">"ನೋಟಿಫಿಕೇಶನ್ ಎಚ್ಚರಿಕೆ ತೋರಿಸಿ"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"ಅಮಾನ್ಯ ಚಾನಲ್ ಅಧಿಸೂಚನೆಗಾಗಿ ಪರದೆಯಲ್ಲಿ ಎಚ್ಚರಿಕೆ"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"ಬಾಹ್ಯವಾಗಿ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಒತ್ತಾಯವಾಗಿ ಅನುಮತಿಸಿ"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"ಮ್ಯಾನಿಫೆಸ್ಟ್ ಮೌಲ್ಯಗಳು ಯಾವುದೇ ಆಗಿದ್ದರೂ, ಬಾಹ್ಯ ಸಂಗ್ರಹಣೆಗೆ ಬರೆಯಲು ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್‌ ಅನ್ನು ಅರ್ಹಗೊಳಿಸುತ್ತದೆ"</string>
@@ -519,14 +522,11 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ಹೆಚ್ಚು ಸಮಯ."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ಕಡಿಮೆ ಸಮಯ."</string>
     <string name="cancel" msgid="5665114069455378395">"ರದ್ದುಮಾಡಿ"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"ಮುಂದಿನದು"</string>
+    <string name="back" msgid="5554327870352703710">"ಹಿಂದಕ್ಕೆ"</string>
+    <string name="save" msgid="3745809743277153149">"ಸೇವ್ ಮಾಡಿ"</string>
     <string name="okay" msgid="949938843324579502">"ಸರಿ"</string>
-    <string name="done" msgid="381184316122520313">"ಮುಗಿದಿದೆ"</string>
+    <string name="done" msgid="381184316122520313">"ಆಯಿತು"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"ಅಲಾರಾಮ್‌ಗಳು ಮತ್ತು ರಿಮೈಂಡರ್‌ಗಳು"</string>
     <string name="alarms_and_reminders_switch_title" msgid="4939393911531826222">"ಅಲಾರಂಗಳು ಮತ್ತು ರಿಮೈಂಡರ್‌ಗಳನ್ನು ಹೊಂದಿಸಲು ಅನುಮತಿಸಿ"</string>
     <string name="alarms_and_reminders_title" msgid="8819933264635406032">"ಅಲಾರಂಗಳು ಮತ್ತು ರಿಮೈಂಡರ್‌ಗಳು"</string>
@@ -547,13 +547,16 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"ಇದೀಗ"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"ಈ ಫೋನ್"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"ಈ ಟ್ಯಾಬ್ಲೆಟ್"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"ಡಾಕ್ ಸ್ಪೀಕರ್"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"ಬಾಹ್ಯ ಸಾಧನ"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"ಕನೆಕ್ಟ್ ಮಾಡಿರುವ ಸಾಧನ"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"ಈ ಫೋನ್"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"ಈ ಸಾಧನದಲ್ಲಿ ಪ್ಲೇ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"ಬದಲಾಯಿಸಲು ಖಾತೆಯನ್ನು ಅಪ್‌ಗ್ರೇಡ್ ಮಾಡಿ"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"ಇಲ್ಲಿ ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ಪ್ಲೇ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
-    <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"ಜಾಹೀರಾತಿನ ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ"</string>
+    <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"ಆ್ಯಡ್‌ನ ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"ಇಲ್ಲಿ ಪ್ಲೇ ಮಾಡಲು ಸಾಧನವನ್ನು ಎಚ್ಚರಿಸಿ"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"ಸಾಧನವನ್ನು ಪ್ಲೇ ಮಾಡಲು ಅನುಮೋದಿಸಲಾಗಿಲ್ಲ"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"ಪ್ಲೇ ಮಾಡಲು ಸಾಧನವನ್ನು ಅನುಮೋದಿಸಲಾಗಿಲ್ಲ"</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"ಈ ಮಾಧ್ಯಮವನ್ನು ಇಲ್ಲಿ ಪ್ಲೇ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"ಕನೆಕ್ಟ್ ಮಾಡುವಾಗ ಸಮಸ್ಯೆ ಎದುರಾಗಿದೆ ಸಾಧನವನ್ನು ಆಫ್ ಮಾಡಿ ಹಾಗೂ ನಂತರ ಪುನಃ ಆನ್ ಮಾಡಿ"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"ವೈರ್ ಹೊಂದಿರುವ ಆಡಿಯೋ ಸಾಧನ"</string>
@@ -576,16 +579,13 @@
     <string name="user_add_profile_item_summary" msgid="5418602404308968028">"ನಿಮ್ಮ ಖಾತೆಯಿಂದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ವಿಷಯಕ್ಕೆ ಪ್ರವೇಶವನ್ನು ನೀವು ನಿರ್ಬಂಧಿಸಬಹುದು"</string>
     <string name="user_add_user_item_title" msgid="2394272381086965029">"ಬಳಕೆದಾರ"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"ನಿರ್ಬಂಧಿಸಿದ ಪ್ರೊಫೈಲ್"</string>
-    <string name="user_add_user_title" msgid="5457079143694924885">"ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸುವುದೇ?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"ನೀವು ಹೆಚ್ಚುವರಿ ಬಳಕೆದಾರರನ್ನು ರಚಿಸುವ ಮೂಲಕ ಇತರ ಜನರ ಜೊತೆಗೆ ಈ ಸಾಧನವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು. ಪ್ರತಿ ಬಳಕೆದಾರರು ತಮ್ಮದೇ ಸ್ಥಳವನ್ನು ಹೊಂದಿರುತ್ತಾರೆ, ಇದರಲ್ಲಿ ಅವರು ತಮ್ಮದೇ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು, ವಾಲ್‌ಪೇಪರ್ ಮತ್ತು ಮುಂತಾದವುಗಳ ಮೂಲಕ ಕಸ್ಟಮೈಸ್ ಮಾಡಿಕೊಳ್ಳಬಹುದು. ಎಲ್ಲರ ಮೇಲೂ ಪರಿಣಾಮ ಬೀರುವಂತೆ ವೈ-ಫೈ ರೀತಿಯ ಸಾಧನ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬಳಕೆದಾರರು ಸರಿಹೊಂದಿಸಬಹುದು.\n\nನೀವು ಒಬ್ಬ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಿದಾಗ, ಆ ವ್ಯಕ್ತಿಯು ಅವರ ಸ್ಥಳವನ್ನು ಹೊಂದಿಸಬೇಕಾಗುತ್ತದೆ.\n\nಯಾವುದೇ ಬಳಕೆದಾರರು ಎಲ್ಲಾ ಇತರೆ ಬಳಕೆದಾರರಿಗೆ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡಬಹುದು. ಆ್ಯಕ್ಸೆಸಿಬಿಲಿಟಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಮತ್ತು ಸೇವೆಗಳು ಹೊಸ ಬಳಕೆದಾರರಿಗೆ ವರ್ಗಾವಣೆ ಆಗದಿರಬಹುದು."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"ನೀವು ಒಬ್ಬ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಿದಾಗ, ಆ ವ್ಯಕ್ತಿಯು ಅವರ ಸ್ಥಳವನ್ನು ಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ.\n\nಯಾವುದೇ ಬಳಕೆದಾರರು ಎಲ್ಲಾ ಇತರೆ ಬಳಕೆದಾರರಿಗಾಗಿ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡಬಹುದು."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
-    <string name="user_setup_dialog_title" msgid="8037342066381939995">"ಈಗ ಬಳಕೆದಾರರನ್ನು ಸೆಟ್ ಮಾಡುವುದೇ?"</string>
+    <string name="user_add_user_title" msgid="5457079143694924885">"ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಬೇಕೆ?"</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"ನೀವು ಹೆಚ್ಚುವರಿ ಬಳಕೆದಾರರನ್ನು ರಚಿಸುವ ಮೂಲಕ ಇತರ ಜನರ ಜೊತೆಗೆ ಈ ಸಾಧನವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು. ಪ್ರತಿ ಬಳಕೆದಾರರು ತಮ್ಮದೇ ಸ್ಥಳವನ್ನು ಹೊಂದಿರುತ್ತಾರೆ, ಇದರಲ್ಲಿ ಅವರು ತಮ್ಮದೇ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು, ವಾಲ್‌ಪೇಪರ್ ಮತ್ತು ಮುಂತಾದವುಗಳ ಮೂಲಕ ಕಸ್ಟಮೈಸ್ ಮಾಡಿಕೊಳ್ಳಬಹುದು. ಎಲ್ಲರ ಮೇಲೂ ಪರಿಣಾಮ ಬೀರುವಂತೆ ವೈ-ಫೈ ರೀತಿಯ ಸಾಧನ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬಳಕೆದಾರರು ಸರಿಹೊಂದಿಸಬಹುದು.\n\nನೀವು ಒಬ್ಬ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಿದಾಗ, ಆ ವ್ಯಕ್ತಿಯು ತಮ್ಮ ಸ್ಥಳವನ್ನು ಸೆಟಪ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ.\n\nಯಾವುದೇ ಬಳಕೆದಾರರು ಎಲ್ಲಾ ಇತರೆ ಬಳಕೆದಾರರಿಗೆ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡಬಹುದು. ಆ್ಯಕ್ಸೆಸಿಬಿಲಿಟಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಮತ್ತು ಸೇವೆಗಳು ಹೊಸ ಬಳಕೆದಾರರಿಗೆ ವರ್ಗಾವಣೆ ಆಗದಿರಬಹುದು."</string>
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"ನೀವು ಒಬ್ಬ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಿದಾಗ, ಆ ವ್ಯಕ್ತಿಯು ತಮ್ಮ ಸ್ಥಳವನ್ನು ಸೆಟಪ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ.\n\nಯಾವುದೇ ಬಳಕೆದಾರರು ಎಲ್ಲಾ ಇತರೆ ಬಳಕೆದಾರರಿಗಾಗಿ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡಬಹುದು."</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"ಈ ಬಳಕೆದಾರರನ್ನು ನಿರ್ವಾಹಕರನ್ನಾಗಿ ಮಾಡಬೇಕೆ?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"ನಿರ್ವಾಹಕರು ಇತರ ಬಳಕೆದಾರರಿಗೆ ಇಲ್ಲದ ವಿಶೇಷ ಸೌಲಭ್ಯಗಳನ್ನು ಹೊಂದಿದ್ದಾರೆ. ನಿರ್ವಾಹಕರು ಎಲ್ಲಾ ಬಳಕೆದಾರರನ್ನು ನಿರ್ವಹಿಸಬಹುದು, ಈ ಸಾಧನವನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡಬಹುದು ಅಥವಾ ರೀಸೆಟ್ ಮಾಡಬಹುದು, ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಹೊಂದಿಸಬಹುದು, ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲಾದ ಎಲ್ಲಾ ಆ್ಯಪ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಬಹುದು ಮತ್ತು ಇತರರಿಗೆ ನಿರ್ವಾಹಕರಿಗೆ ನೀಡಿರುವ ಸೌಲಭ್ಯಗಳನ್ನು ನೀಡಬಹುದು ಅಥವಾ ಹಿಂತೆಗೆದುಕೊಳ್ಳಬಹುದು."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"ನಿರ್ವಾಹಕರನ್ನಾಗಿ ಮಾಡಿ"</string>
+    <string name="user_setup_dialog_title" msgid="8037342066381939995">"ಈಗ ಬಳಕೆದಾರರನ್ನು ಸೆಟ್ ಮಾಡಬೇಕೆ?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"ಸಾಧನವನ್ನು ತೆಗೆದುಕೊಳ್ಳಲು ಮತ್ತು ಅದರ ಸ್ಥಳವನ್ನು ಹೊಂದಿಸಲು ವ್ಯಕ್ತಿಯು ಲಭ್ಯವಿದ್ದಾರೆಯೇ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ಇದೀಗ ಪ್ರೊಫೈಲ್‌ ಅನ್ನು ಹೊಂದಿಸುವುದೇ?"</string>
     <string name="user_setup_button_setup_now" msgid="1708269547187760639">"ಇದೀಗ ಹೊಂದಿಸಿ"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ಈ ಪ್ರಕ್ರಿಯೆಯು ಹೊಸ ಅತಿಥಿ ಸೆಶನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ ಮತ್ತು ಪ್ರಸ್ತುತ ಸೆಶನ್‌ನಿಂದ ಎಲ್ಲಾ ಆ್ಯಪ್‌ಗಳು ಹಾಗೂ ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"ಅತಿಥಿ ಮೋಡ್‌ನಿಂದ ನಿರ್ಗಮಿಸಬೇಕೆ?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"ಈ ಪ್ರಕ್ರಿಯೆಯು ಪ್ರಸ್ತುತ ಅತಿಥಿ ಸೆಷನ್‌ನಿಂದ ಆ್ಯಪ್‌ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"ಹೌದು, ಅವರನ್ನು ನಿರ್ವಾಹಕರನ್ನಾಗಿ ಮಾಡಿ"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"ಬೇಡ, ಅವರನ್ನು ನಿರ್ವಾಹಕರನ್ನಾಗಿ ಮಾಡಬೇಡಿ"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"ನಿರ್ಗಮಿಸಿ"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"ಅತಿಥಿ ಚಟುವಟಿಕೆಯನ್ನು ಉಳಿಸಬೇಕೆ?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"ನೀವು ಪ್ರಸ್ತುತ ಸೆಶನ್‌ನ ಚಟುವಟಿಕೆಯನ್ನು ಉಳಿಸಬಹುದು ಅಥವಾ ಎಲ್ಲಾ ಆ್ಯಪ್‌ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಅಳಿಸಬಹುದು"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"ಮೇಲಕ್ಕೆ ಸರಿಸಿ"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿಲ್ಲ"</string>
+    <string name="neuter" msgid="2075249330106127310">"ನಪುಂಸಕ"</string>
+    <string name="feminine" msgid="1529155595310784757">"ಮಹಿಳೆಯರಿಗಾಗಿ"</string>
+    <string name="masculine" msgid="4653978041013996303">"ಪುರುಷರಿಗಾಗಿ"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ko/arrays.xml b/packages/SettingsLib/res/values-ko/arrays.xml
index bc739b9..0a9663e 100644
--- a/packages/SettingsLib/res/values-ko/arrays.xml
+++ b/packages/SettingsLib/res/values-ko/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K(보안)"</item>
     <item msgid="7322156123728520872">"4K(업스케일됨)"</item>
     <item msgid="7735692090314849188">"4K(업스케일됨, 보안)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p(듀얼 화면)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p(Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"없음"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"오디오 소스"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index 74e1cea..148e81d 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM 액세스"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD 오디오: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD 오디오"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"보청기"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE 오디오"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"보청기에 연결됨"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"보청기"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE 오디오"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"보청기에 연결됨"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE 오디오에 연결됨"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"미디어 오디오에 연결됨"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"휴대전화 오디오에 연결됨"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"휴대전화 오디오에 사용"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"파일 전송에 사용"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"입력에 사용"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"보청기로 사용"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"보청기로 사용"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO에 사용"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"페어링"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"페어링"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"프로필 선택"</string>
     <string name="category_personal" msgid="6236798763159385225">"개인"</string>
     <string name="category_work" msgid="4014193632325996115">"직장"</string>
+    <string name="category_clone" msgid="1554511758987195974">"복사"</string>
     <string name="development_settings_title" msgid="140296922921597393">"개발자 옵션"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"개발자 옵션 사용"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"앱 개발 옵션 설정"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"현재 터치 데이터 오버레이 표시"</string>
     <string name="show_touches" msgid="8437666942161289025">"탭한 항목 표시"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"탭한 항목에 대해 시각적인 피드백 표시"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"키 누름 표시"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"물리적 키 누름에 관한 시각적 피드백을 표시합니다."</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"표면 업데이트 표시"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"전체 창 화면이 업데이트되었을 때 플래시 처리"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"보기 업데이트 표시"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"시간 늘리기"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"시간 줄이기"</string>
     <string name="cancel" msgid="5665114069455378395">"취소"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"다음"</string>
+    <string name="back" msgid="5554327870352703710">"뒤로"</string>
+    <string name="save" msgid="3745809743277153149">"저장"</string>
     <string name="okay" msgid="949938843324579502">"확인"</string>
     <string name="done" msgid="381184316122520313">"완료"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"알람 및 리마인더"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"조금 전"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"이 휴대전화"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"태블릿"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"도크 스피커"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"외부 기기"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"연결된 기기"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"이 휴대전화"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"이 기기에서 재생할 수 없음"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"전환하려면 계정을 업그레이드하세요."</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"신규 사용자를 추가할까요?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"추가 사용자를 만들어 다른 사용자와 기기를 공유할 수 있습니다. 각 사용자는 앱, 배경화면 등으로 맞춤설정할 수 있는 자신만의 공간을 갖게 됩니다. 또한 모든 사용자에게 영향을 미치는 Wi‑Fi와 같은 기기 설정도 조정할 수 있습니다.\n\n추가된 신규 사용자는 자신의 공간을 설정해야 합니다.\n\n모든 사용자가 앱을 업데이트할 수 있으며, 업데이트는 다른 사용자에게도 적용됩니다. 접근성 설정 및 서비스는 신규 사용자에게 이전되지 않을 수도 있습니다."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"추가된 새로운 사용자는 자신의 공간을 설정해야 합니다.\n\n모든 사용자는 다른 사용자들을 위하여 앱을 업데이트할 수 있습니다."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"이 사용자에게 관리자 권한을 부여하시겠습니까?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"관리자는 다른 사용자가 가지지 못한 특별한 권한을 보유합니다. 관리자는 모든 사용자를 관리하고, 기기를 업데이트하거나 재설정하고, 설정을 변경하고, 설치된 모든 앱을 확인하고, 다른 사용자에게 관리자 권한을 부여하거나 취소할 수 있습니다."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"관리자 권한 부여"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"지금 사용자를 설정하시겠습니까?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"사용자가 기기를 사용하여 자신의 공간을 설정할 수 있도록 하세요."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"지금 프로필을 설정하시겠습니까?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"새로운 게스트 세션이 시작되고 기존 세션의 모든 앱과 데이터가 삭제됩니다."</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"게스트 모드를 종료하시겠습니까?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"현재 게스트 세션의 앱과 데이터가 삭제됩니다."</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"예, 관리자 권한을 부여합니다."</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"아니요, 관리자 권한을 부여하지 않습니다."</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"종료"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"게스트 활동을 저장하시겠습니까?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"기존 세션의 활동을 저장하거나 모든 앱과 데이터를 삭제할 수 있습니다."</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"위로 이동"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"지정되지 않음"</string>
+    <string name="neuter" msgid="2075249330106127310">"중성"</string>
+    <string name="feminine" msgid="1529155595310784757">"여성"</string>
+    <string name="masculine" msgid="4653978041013996303">"남성"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ky/arrays.xml b/packages/SettingsLib/res/values-ky/arrays.xml
index 71e10da..f28026e 100644
--- a/packages/SettingsLib/res/values-ky/arrays.xml
+++ b/packages/SettingsLib/res/values-ky/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Аудио булак"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index f67e0bf..b3b5abd 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -99,7 +99,7 @@
     <string name="bluetooth_battery_level" msgid="2893696778200201555">"Батареянын деңгээли: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="bluetooth_battery_level_untethered" msgid="4002282355111504349">"Сол: Батареянын деңгээли <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, оң: Батареянын деңгээли <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
     <string name="bluetooth_active_no_battery_level" msgid="4155462233006205630">"Жигердүү"</string>
-    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Жигердүү, сол кулакчын гана"</string>
+    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Иштеп жатат, сол кулак гана"</string>
     <string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Жигердүү, оң кулакчын гана"</string>
     <string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Жигердүү, сол жана оң кулакчын"</string>
     <string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Аудио"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM картаны пайдалануу мүмкүнчүлүгү"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD форматындагы аудио: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD форматындагы аудио"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Угуу аппараттары"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE аудио"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Угуу аппараттарына туташып турат"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Угуу аппараттары"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Угуу аппараттарына туташып турат"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE аудио менен туташты"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Медиа аудиого туташты"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Телефон аудиосуна туташты"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Телефон аудиосу үчүн колдонулсун"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Файл өткөрүү үчүн колдонулсун"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Киргизүү үчүн колдонулсун"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Угуу аппараттары үчүн колдонуу"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Угуу аппараттары үчүн колдонуу"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO үчүн колдонуу"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Байланыштыруу"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ЖУПТАШТЫРУУ"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Жок"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Жупташканда байланыштарыңыз менен чалуу таржымалыңызды пайдалана аласыз."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> түзмөгүнө туташуу мүмкүн болгон жок."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"PIN-код же сырсөз туура эмес болгондуктан, \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\" туташпай калды."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"\"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\" туташкан жок: PIN код же сырсөз туура эмес."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> менен байланышуу мүмкүн эмес."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Жупташтырууну <xliff:g id="DEVICE_NAME">%1$s</xliff:g> четке какты."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Компьютер"</string>
@@ -195,7 +195,7 @@
     <string name="tts_status_requires_network" msgid="8327617638884678896">"<xliff:g id="LOCALE">%1$s</xliff:g> желеге туташууну талап кылат"</string>
     <string name="tts_status_not_supported" msgid="2702997696245523743">"<xliff:g id="LOCALE">%1$s</xliff:g> колдоого алынган эмес"</string>
     <string name="tts_status_checking" msgid="8026559918948285013">"Текшерилүүдө…"</string>
-    <string name="tts_engine_settings_title" msgid="7849477533103566291">"<xliff:g id="TTS_ENGINE_NAME">%s</xliff:g> жөндөөлөрдү"</string>
+    <string name="tts_engine_settings_title" msgid="7849477533103566291">"<xliff:g id="TTS_ENGINE_NAME">%s</xliff:g> параметрлерди"</string>
     <string name="tts_engine_settings_button" msgid="477155276199968948">"Жарак тууралоолорун ачуу"</string>
     <string name="tts_engine_preference_section_title" msgid="3861562305498624904">"Тандалган жарак"</string>
     <string name="tts_general_section_title" msgid="8919671529502364567">"Жалпы"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Профиль тандоо"</string>
     <string name="category_personal" msgid="6236798763159385225">"Жеке"</string>
     <string name="category_work" msgid="4014193632325996115">"Жумуш"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Клон"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Иштеп чыгуучунун параметрлери"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Иштеп чыгуучунун параметрлерин иштетүү"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Колдонмо өндүрүү мүмкүнчүлүктөрүн орнотуу"</string>
@@ -230,7 +231,7 @@
     <string name="adb_wireless_error" msgid="721958772149779856">"Ката"</string>
     <string name="adb_wireless_settings" msgid="2295017847215680229">"Мүчүлүштүктөрдү Wi-Fi аркылуу аныктоо"</string>
     <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"Жеткиликтүү түзмөктөрдү көрүү үчүн мүчүлүштүктөрдү Wi-Fi аркылуу аныктоону күйгүзүңүз"</string>
-    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Түзмөктү QR коду аркылуу жупташтыруу"</string>
+    <string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"Түзмөктү QR код аркылуу жупташтыруу"</string>
     <string name="adb_pair_method_qrcode_summary" msgid="7130694277228970888">"QR кодунун сканерин колдонуп, жаңы түзмөктөрдү жупташтырыңыз"</string>
     <string name="adb_pair_method_code_title" msgid="1122590300445142904">"Түзмөктү атайын код аркылуу жупташтыруу"</string>
     <string name="adb_pair_method_code_summary" msgid="6370414511333685185">"Жаңы түзмөктөрдү алты сандан турган код аркылуу жупташтырасыз"</string>
@@ -245,12 +246,12 @@
     <string name="adb_pairing_device_dialog_pairing_code_label" msgid="3639239786669722731">"Wi‑Fi аркылуу байланыштыруу коду"</string>
     <string name="adb_pairing_device_dialog_failed_title" msgid="3426758947882091735">"Туташкан жок"</string>
     <string name="adb_pairing_device_dialog_failed_msg" msgid="6611097519661997148">"Түзмөк бир тармакка туташып турушу керек."</string>
-    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"QR кодун скандап, түзмөктү Wi‑Fi аркылуу жупташтырыңыз"</string>
+    <string name="adb_wireless_qrcode_summary" msgid="8051414549011801917">"QR кодду скандап, түзмөктү Wi‑Fi аркылуу жупташтырыңыз"</string>
     <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"Түзмөк жупташтырылууда…"</string>
-    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Түзмөк жупташтырылган жок. QR коду туура эмес же түзмөк бир тармакка туташпай турат."</string>
+    <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"Түзмөк жупташтырылган жок. QR код туура эмес же түзмөк бир тармакка туташпай турат."</string>
     <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP дарек жана порт"</string>
-    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR кодун скандоо"</string>
-    <string name="adb_wireless_qrcode_pairing_description" msgid="6014121407143607851">"QR кодун скандап, түзмөктү Wi‑Fi аркылуу жупташтырыңыз"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR кодду скандоо"</string>
+    <string name="adb_wireless_qrcode_pairing_description" msgid="6014121407143607851">"QR кодду скандап, түзмөктү Wi‑Fi аркылуу жупташтырыңыз"</string>
     <string name="adb_wireless_no_network_msg" msgid="2365795244718494658">"Wi-Fi тармагына туташыңыз"</string>
     <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, мүчүлүштүктөрдү оңдоо, иштеп чыгуу"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Ката жөнүндө кабарлоо"</string>
@@ -258,7 +259,7 @@
     <string name="keep_screen_on" msgid="1187161672348797558">"Ойгоо туруу"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"Түзмөк кубатталып жатканда экран өчпөйт"</string>
     <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Bluetooth HCI журналын иштетүү"</string>
-    <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Bluetooth таңгактарын алуу. (Бул жөндөөнү өзгөрткөндөн кийин Bluetooth\'ду өчүрүп / күйгүзүңүз)"</string>
+    <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Bluetooth таңгактарын алуу. (Бул параметрди өзгөрткөндөн кийин Bluetooth\'ду өчүрүп / күйгүзүңүз)"</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"OEM бөгөттөн чыгаруу"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"Кайра жүктөгүчтү бөгөттөн чыгарууга уруксат берүү"</string>
     <string name="confirm_enable_oem_unlock_title" msgid="8249318129774367535">"OEM бөгөттөн чыгарууга уруксатпы?"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Басылган жерлер жана жаңсоолор экранда көрүнүп турат"</string>
     <string name="show_touches" msgid="8437666942161289025">"Басылган жерлерди көрсөтүү"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Экранда басылган жерлер көрүнүп турат"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Баскычтардын басылганын көрсөтүү"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Баскычтар басылганда визуалдык сигнал көрүнөт"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Экран жаңыруусун көрсөтүү"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Экран жаңырганда анын үстү жарык болот"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Жаңыртууларды көрсөтүү"</string>
@@ -487,7 +490,7 @@
     <string name="external_source_trusted" msgid="1146522036773132905">"Уруксат берилген"</string>
     <string name="external_source_untrusted" msgid="5037891688911672227">"Тыюу салынган"</string>
     <string name="install_other_apps" msgid="3232595082023199454">"Белгисиз колдонмолорду орнотуу"</string>
-    <string name="home" msgid="973834627243661438">"Жөндөөлөрдүн башкы бети"</string>
+    <string name="home" msgid="973834627243661438">"Параметрлердин башкы бети"</string>
   <string-array name="battery_labels">
     <item msgid="7878690469765357158">"0%"</item>
     <item msgid="8894873528875953317">"50%"</item>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Көбүрөөк убакыт."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Азыраак убакыт."</string>
     <string name="cancel" msgid="5665114069455378395">"Жок"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Кийинки"</string>
+    <string name="back" msgid="5554327870352703710">"Артка"</string>
+    <string name="save" msgid="3745809743277153149">"Сактоо"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Бүттү"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Ойготкучтар жана эстеткичтер"</string>
@@ -547,14 +547,17 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Жаңы эле"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Ушул телефон"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Ушул планшет"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Док бекети үчүн динамик"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Тышкы түзмөк"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Туташкан түзмөк"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Ушул телефон"</string>
-    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Бул түзмөктө ойнотуу мүмкүн эмес"</string>
-    <string name="media_output_status_require_premium" msgid="8411255800047014822">"Которулуу үчүн аккаунтуңузду жаңыртыңыз"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Жүктөлүп алынгандарды бул жерде ойнотуу мүмкүн эмес"</string>
-    <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Жарнамадан кийин кайталап көрүңүз"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Угуу үчүн түзмөктү уйку режиминен чыгарыңыз"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Бул түзмөктө ойнотуу үчүн уруксат алуу керек"</string>
-    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Бул медианы ойнотуу мүмкүн эмес"</string>
+    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Бул түзмөктө ойнотууга болбойт"</string>
+    <string name="media_output_status_require_premium" msgid="8411255800047014822">"Премиум аккаунтка которулуу керек"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Жүктөлүп алынгандар ойнотулбайт"</string>
+    <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Жарнамадан кийин кайталаңыз"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Угуу үчүн түзмөктү уйкудан чыгарыңыз"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Ойнотуу үчүн уруксат алышыңыз керек"</string>
+    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Медиа файлды ойното албайсыз"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Туташууда маселе келип чыкты. Түзмөктү өчүрүп, кайра күйгүзүп көрүңүз"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Зымдуу аудио түзмөк"</string>
     <string name="help_label" msgid="3528360748637781274">"Жардам/Пикир билдирүү"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Жаңы колдонуучу кошосузбу?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Эгер түзмөгүңүздү дагы бир адам колдонуп жаткан болсо, кошумча профилдерди түзүп коюңуз. Профилдин ээси аны өзү каалагандай тууралап, тушкагаздарды коюп, керектүү колдонмолорду орнотуп алат. Мындан тышкары, колдонуучулар түзмөктүн Wi‑Fi´ды өчүрүү/күйгүзүү сыяктуу жалпы параметрлерин өзгөртө алышат.\n\nПрофиль түзүлгөндөн кийин, аны тууралап алуу керек.\n\nЖалпы колдонмолорду баары жаңырта алат, бирок атайын мүмкүнчүлүктөр өз-өзүнчө жөндөлөт."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Жаңы колдонуучу кошулганда, ал өз мейкиндигин түзүп алышы керек.\n\nКолдонмолорду бир колдонуучу жаңыртканда, ал калган бардык колдонуучулар үчүн да жаңырат."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Бул колдонуучуну админ кыласызбы?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Админдердин өзгөчө укуктары бар. Админ бардык колдонуучуларды тескеп, бул түзмөктү жаңыртып же баштапкы абалга келтирип, параметрлерди өзгөртүп, орнотулган колдонмолордун баарын көрүп, башкаларга админ укуктарын берип же жокко чыгара алат."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Админ кылуу"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Профилди жөндөйсүзбү?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Өз мейкиндигин жөндөп алышы үчүн, түзмөктү колдонуучуга беришиңиз керек."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Профайл азыр түзүлсүнбү?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Бул аракет жаңы конок сеансын баштап, учурдагы сеанстагы бардык колдонмолорду жана алардагы нерселерди жок кылат"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Конок режиминен чыгасызбы?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Учурдагы конок сеансындагы бардык колдонмолор менен алардагы нерселер өчүп калат"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Ооба, аны админ кылуу"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Жок, ал админ болбосун"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Чыгуу"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Коноктун аракеттерин сактайсызбы?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Учурдагы сеанстагы аракеттерди сактап же бардык колдонмолорду жана алардагы нерселерди жок кылсаңыз болот"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Жогору жылдыруу"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Көрсөтүлгөн эмес"</string>
+    <string name="neuter" msgid="2075249330106127310">"Орто жак"</string>
+    <string name="feminine" msgid="1529155595310784757">"Аял"</string>
+    <string name="masculine" msgid="4653978041013996303">"Эркек"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-lo/arrays.xml b/packages/SettingsLib/res/values-lo/arrays.xml
index 79cdd6f..478b5d5 100644
--- a/packages/SettingsLib/res/values-lo/arrays.xml
+++ b/packages/SettingsLib/res/values-lo/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (ປອດໄພ​)"</item>
     <item msgid="7322156123728520872">"4K (ເພີ່ມຂຶ້ນແລ້ວ​)"</item>
     <item msgid="7735692090314849188">"4K (ເພີ່ມຂຶ້ນແລ້ວ, ປອດໄພ)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (ໜ້າຈໍຄູ່)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"ບໍ່ມີ"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"ແຫຼ່ງ​ທີ່​ມາ​ຂອງ​ສຽງ"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index c9a40f6..3963518 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"ການ​ເຂົ້າ​ເຖິງ SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"ສຽງ HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"ສຽງ HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"ອຸປະກອນຊ່ວຍຟັງ"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"ສຽງ LE"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"ເຊື່ອມຕໍ່ຫາອຸປະກອນຊ່ວຍຟັງແລ້ວ"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"ເຄື່ອງຊ່ວຍຟັງ"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"ສຽງ LE"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"ເຊື່ອມຕໍ່ກັບເຄື່ອງຊ່ວຍຟັງແລ້ວ"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"ເຊື່ອມຕໍ່ຫາສຽງ LE ແລ້ວ"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"ເຊື່ອມຕໍ່ກັບສື່ດ້ານສຽງແລ້ວ"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"ເຊື່ອມຕໍ່ກັບສຽງໂທລະສັບແລ້ວ"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"ໃຊ້ສຳລັບລະບົບສຽງຂອງໂທລະສັບ"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ໃຊ້ເພື່ອໂອນຍ້າຍໄຟລ໌"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ໃຊ້ສຳລັບການປ້ອນຂໍ້ມູນ"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"ໃຊ້ສຳລັບອຸປະກອນຊ່ວຍຟັງ"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"ໃຊ້ສຳລັບເຄື່ອງຊ່ວຍຟັງ"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"ໃຊ້ສຳລັບ LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"ຈັບຄູ່"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ຈັບຄູ່"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"ເລືອກໂປຣໄຟລ໌"</string>
     <string name="category_personal" msgid="6236798763159385225">"​ສ່ວນ​ໂຕ"</string>
     <string name="category_work" msgid="4014193632325996115">"​ບ່ອນ​ເຮັດ​ວຽກ"</string>
+    <string name="category_clone" msgid="1554511758987195974">"ໂຄລນ"</string>
     <string name="development_settings_title" msgid="140296922921597393">"ຕົວເລືອກນັກພັດທະນາ"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"ເປີດໃຊ້ຕົວເລືອກນັກພັດທະນາ"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"ຕັ້ງຄ່າໂຕເລືອກສຳລັບການພັດທະນາແອັບຯ"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"ການວາງຊ້ອນໜ້າຈໍກຳລັງສະແດງຂໍ້ມູນການສຳຜັດໃນປັດຈຸບັນ"</string>
     <string name="show_touches" msgid="8437666942161289025">"ສະແດງການແຕະ"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"ສະແດງຄໍາຕິຊົມທາງຮູບພາບສຳລັບການແຕະ"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"ສະແດງການກົດປຸ່ມ"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"ສະແດງຄຳຕິຊົມພາບສຳລັບການກົດປຸ່ມຈິງ"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"ສະແດງການອັບເດດພື້ນຜິວ"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"ກະພິບໜ້າຈໍທັງໜ້າເມື່ອມີການອັບເດດ"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"ສະແດງອັບເດດມຸມມອງ"</string>
@@ -363,7 +366,7 @@
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"ແກ້ບັນຫາການແຕ້ມທັບຂອງ GPU"</string>
     <string name="disable_overlays" msgid="4206590799671557143">"ປິດການເຮັດວຽກ HW overlays"</string>
     <string name="disable_overlays_summary" msgid="1954852414363338166">"ໃຊ້ GPU ໃນການວາງອົງປະກອບໜ້າຈໍສະເໝີ"</string>
-    <string name="simulate_color_space" msgid="1206503300335835151">"ຈຳລອງ color space"</string>
+    <string name="simulate_color_space" msgid="1206503300335835151">"ຈຳລອງຂອບເຂດສີ"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"ເປີດການໃຊ້ຮ່ອງຮອຍໃນ OpenGL"</string>
     <string name="usb_audio_disable_routing" msgid="3367656923544254975">"ປິດ​ການ​ນຳ​ໃຊ້​ເສັ້ນ​ທາງ​ສຽງ USB"</string>
     <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"ປິດ​​ການ​ນຳ​ໃຊ້​ເສັ້ນ​ທາງ​​ອັດ​ຕະ​ໂນ​ມັດ​ໄປ​ຫາອຸ​ປະ​ກອ​ນ​ຕໍ່​ພ່ວງ​ສຽງ​ USB"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ເພີ່ມເວລາ."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ຫຼຸດເວລາ."</string>
     <string name="cancel" msgid="5665114069455378395">"ຍົກເລີກ"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"ຕໍ່ໄປ"</string>
+    <string name="back" msgid="5554327870352703710">"ກັບຄືນ"</string>
+    <string name="save" msgid="3745809743277153149">"ບັນທຶກ"</string>
     <string name="okay" msgid="949938843324579502">"ຕົກລົງ"</string>
     <string name="done" msgid="381184316122520313">"ແລ້ວໆ"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"ໂມງປຸກ ແລະ ການແຈ້ງເຕືອນ"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"ຕອນນີ້"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"ໂທລະສັບນີ້"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"ແທັບເລັດນີ້"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"ແທ່ນວາງລຳໂພງ"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"ອຸປະກອນພາຍນອກ"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"ອຸປະກອນທີ່ເຊື່ອມຕໍ່"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"ໂທລະສັບນີ້"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"ຫຼິ້ນຢູ່ອຸປະກອນນີ້ບໍ່ໄດ້"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"ອັບເກຣດບັນຊີເພື່ອສະຫຼັບ"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"ເພີ່ມຜູ້ໃຊ້ໃໝ່ບໍ?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"ທ່ານສາມາດໃຊ້ອຸປະກອນນີ້ຮ່ວມກັບຄົນອື່ນໄດ້ໂດຍການສ້າງຜູ້ໃຊ້ເພີ່ມເຕີມ. ຜູ້ໃຊ້ແຕ່ລະຄົນຈະມີພື້ນທີ່ຂອງຕົວເອງ, ເຊິ່ງເຂົາເຈົ້າສາມາດປັບແຕ່ງແອັບ, ຮູບພື້ນຫຼັງ ແລະ ອື່ນໆໄດ້. ຜູ້ໃຊ້ຕ່າງໆ ສາມາດປັບແຕ່ງການຕັ້ງຄ່າອຸປະກອນໄດ້ ເຊັ່ນ: Wi‑Fi ທີ່ມີຜົນກະທົບທຸກຄົນ.\n\nເມື່ອທ່ານເພີ່ມຜູ້ໃຊ້ໃໝ່, ບຸກຄົນນັ້ນຈະຕ້ອງຕັ້ງຄ່າພື້ນທີ່ຂອງເຂົາເຈົ້າກ່ອນ.\n\nຜູ້ໃຊ້ໃດກໍຕາມສາມາດອັບເດດແອັບສຳລັບຜູ້ໃຊ້ຄົນອື່ນທັງໝົດໄດ້. ການຕັ້ງຄ່າການຊ່ວຍເຂົ້າເຖິງອາດບໍ່ຖືກໂອນຍ້າຍໄປໃຫ້ຜູ້ໃຊ້ໃໝ່."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"ເມື່ອ​ທ່ານ​ເພີ່ມ​ຜູ້​ໃຊ້​ໃໝ່, ຜູ້​ໃຊ້​ນັ້ນ​ຈະ​ຕ້ອງ​ຕັ້ງ​ຄ່າ​ພື້ນ​ທີ່​ບ່ອນ​ຈັດ​ເກັບ​ຂໍ້​ມູນ​ຂອງ​ລາວ.\n\nຜູ້​ໃຊ້​ທຸກ​ຄົນ​ສາ​ມາດ​ອັບ​ເດດ​ແອັບສຳ​ລັບ​ຜູ້​ໃຊ້​ຄົນ​ອື່ນ​ທັງ​ໝົດ​ໄດ້."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"ຕັ້ງໃຫ້ຜູ້ໃຊ້ຄົນນີ້ເປັນຜູ້ເບິ່ງແຍງລະບົບບໍ?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"ຜູ້ເບິ່ງແຍງລະບົບຈະມີສິດທິພິເສດທີ່ຜູ້ໃຊ້ຄົນອື່ນບໍ່ມີ. ຜູ້ເບິ່ງແຍງລະບົບສາມາດຈັດການຜູ້ໃຊ້ທັງໝົດ, ການອັບເດດ ຫຼື ການຣີເຊັດອຸປະກອນນີ້, ການແກ້ໄຂການຕັ້ງຄ່າ, ການເບິ່ງແອັບທີ່ຕິດຕັ້ງທັງໝົດ ແລະ ໃຊ້ ຫຼື ຖອດຖອນສິດທິຜູ້ເບິ່ງແຍງລະບົບສຳລັບຄົນອື່ນໆໄດ້."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"ຕັ້ງໃຫ້ເປັນຜູ້ເບິ່ງແຍງລະບົບ"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"ຕັ້ງຄ່າຜູ້ໃຊ້ຕອນນີ້ບໍ?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"ກວດ​ສອບ​ໃຫ້​ແນ່​ໃຈ​ວ່າ​ບຸກ​ຄົນ​ດັ່ງ​ກ່າວ​ສາ​ມາດ​ຮັບ​ອຸ​ປະ​ກອນ​ ແລະ ​ຕັ້ງ​ຄ່າ​ພື້ນ​ທີ່​ຂອງ​ພວກ​ເຂົາ​ໄດ້"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ຕັ້ງຄ່າໂປຣໄຟລ໌ດຽວນີ້?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ນີ້ຈະເລີ່ມໄລຍະເວລາຂອງແຂກໃໝ່ ແລະ ລຶບແອັບ ແລະ ຂໍ້ມູນທັງໝົດອອກຈາກເຊດຊັນປັດຈຸບັນ"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"ອອກຈາກໂໝດແຂກບໍ?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"ນີ້ຈະລຶບແອັບ ແລະ ຂໍ້ມູນອອກຈາກເຊດຊັນແຂກປັດຈຸບັນ"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"ແມ່ນ, ຕັ້ງໃຫ້ເຂົາເຈົ້າເປັນຜູ້ເບິ່ງແຍງລະບົບ"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"ບໍ່, ບໍ່ຕັ້ງໃຫ້ເຂົາເຈົ້າເປັນຜູ້ເບິ່ງແຍງລະບົບ"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"ອອກ"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"ບັນທຶກການເຄື່ອນໄຫວແຂກບໍ?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"ທ່ານສາມາດບັນທຶກການເຄື່ອນໄຫວຈາກເຊດຊັນປັດຈຸບັນ ຫຼື ລຶບແອັບ ແລະ ຂໍ້ມູນທັງໝົດໄດ້"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"ຍ້າຍຂຶ້ນ"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"ບໍ່ໄດ້ລະບຸ"</string>
+    <string name="neuter" msgid="2075249330106127310">"ບໍ່ມີເພດ"</string>
+    <string name="feminine" msgid="1529155595310784757">"ເພດຍິງ"</string>
+    <string name="masculine" msgid="4653978041013996303">"ເພດຊາຍ"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-lt/arrays.xml b/packages/SettingsLib/res/values-lt/arrays.xml
index 8e9fe85..5d3d596 100644
--- a/packages/SettingsLib/res/values-lt/arrays.xml
+++ b/packages/SettingsLib/res/values-lt/arrays.xml
@@ -216,7 +216,7 @@
   <string-array name="transition_animation_scale_entries">
     <item msgid="3376676813923486384">"Animacija išjungta"</item>
     <item msgid="753422683600269114">"Animacijos mastelis 0,5x"</item>
-    <item msgid="3695427132155563489">"Animacijos mastelis 1x"</item>
+    <item msgid="3695427132155563489">"Animacijos mastelis 1 x"</item>
     <item msgid="9032615844198098981">"Animacijos mastelis 1,5x"</item>
     <item msgid="8473868962499332073">"Animacijos mastelis 2x"</item>
     <item msgid="4403482320438668316">"Animacijos mastelis 5x"</item>
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (saugus)"</item>
     <item msgid="7322156123728520872">"4K (didesnio mastelio)"</item>
     <item msgid="7735692090314849188">"4K (didesnio mastelio, saugus)"</item>
-    <item msgid="7346816300608639624">"720 piks., 1 080 piks. (dvig. ekr.)"</item>
+    <item msgid="7346816300608639624">"720 piks. 1 080 piks. (dual screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"Nėra"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Garso šaltinis"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index bac6306..9ede534 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM prieiga"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD garsas: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD garsas"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Klausos aparatai"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Prisijungta prie klausos aparatų"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Klausos aparatai"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Prisijungta prie klausos aparatų"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Prisijungta prie „LE Audio“"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Prijungta prie medijos garso įrašo"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Prijungta prie telefono garso"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Naudoti telefono garso įrašui"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Naudoti failų perkėlimui"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Naudoti įvedant"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Naudoti su klausos aparatais"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Naudoti su klausos aparatais"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Naudoti LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Susieti"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"SUSIETI"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Profilio pasirinkimas"</string>
     <string name="category_personal" msgid="6236798763159385225">"Asmeninės"</string>
     <string name="category_work" msgid="4014193632325996115">"Darbo"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Identiška kopija"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Kūrėjo parinktys"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Įgalinti kūrėjo parinktis"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Nustatyti programos kūrimo parinktis"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Ekrano perdanga rodo dabartinius lietimo duomenis"</string>
     <string name="show_touches" msgid="8437666942161289025">"Rodyti palietimus"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Rodyti vaizdinius palietimų atsiliepimus"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Rodyt klavišų paspaudimus"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Rodyti fizinių klavišų paspaudimų vaizdinį atsiliepimą"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Rodyti paviršiaus naujin."</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Naujinant mirginti visus langų paviršius"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Rodyti rodinių naujinius"</string>
@@ -544,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Ką tik"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Šis telefonas"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Šis planšetinis kompiuteris"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Doko garsiakalbis"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Išorinis įrenginys"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Prijungtas įrenginys"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Šis telefonas"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Negalima leisti šiame įrenginyje"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Jei norite perjungti, naujovinkite paskyrą"</string>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"Perkelti aukštyn"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Nenurodyta"</string>
+    <string name="neuter" msgid="2075249330106127310">"Bevardė giminė"</string>
+    <string name="feminine" msgid="1529155595310784757">"Moteriškoji giminė"</string>
+    <string name="masculine" msgid="4653978041013996303">"Vyriškoji giminė"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-lv/arrays.xml b/packages/SettingsLib/res/values-lv/arrays.xml
index af62148..c9161d9 100644
--- a/packages/SettingsLib/res/values-lv/arrays.xml
+++ b/packages/SettingsLib/res/values-lv/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Audio avots"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index 32d9243..c33243b 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -106,7 +106,7 @@
     <string name="bluetooth_profile_headset" msgid="5395952236133499331">"Tālruņa zvani"</string>
     <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_pan" msgid="1006235139308318188">"Piekļuve internetam"</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>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Piekļuve SIM kartei"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD audio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Dzirdes aparāti"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Izveidots savienojums ar dzirdes aparātiem"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Dzirdes aparāti"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Izveidots savienojums ar dzirdes aparātiem"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Izveidots savienojums ar LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Savienots ar multivides audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Savienots ar tālruņa audio"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Izmantot tālruņa skaņai"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Izmantot faila pārsūtīšanai"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Izmantot ievadei"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Izmantot dzirdes aparātiem"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Izmantot dzirdes aparātiem"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Izmantot LE_AUDIO profilam"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Izveidot pāri"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"SAVIENOT PĀRĪ"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Atcelt"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Veicot savienošanu pārī, šī ierīce savienojuma laikā varēs piekļūt jūsu kontaktpersonām un zvanu vēsturei."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Nevarēja savienot pārī ar ierīci <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Nevarēja savienot pārī ar ierīci <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, jo tika ievadīts nepareizs PIN kods vai nepareiza ieejas atslēga."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Nevarēja savienot pārī ar <xliff:g id="DEVICE_NAME">%1$s</xliff:g>, jo tika ievadīts nepareizs PIN kods vai ieejas atslēga."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Nevar sazināties ar ierīci <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> noraidīja pāra izveidi."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Dators"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Profila izvēlēšanās"</string>
     <string name="category_personal" msgid="6236798763159385225">"Privāts"</string>
     <string name="category_work" msgid="4014193632325996115">"Darba"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klons"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Izstrādātāju opcijas"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Izstrādātāju opciju iespējošana"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Iestatīt lietotņu izstrādes opcijas"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Ekrāna pārklājums ar aktuāliem pieskāriena datiem"</string>
     <string name="show_touches" msgid="8437666942161289025">"Rādīt pieskārienus"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Rādīt vizuālo reakciju pēc pieskārieniem"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Rādīt taustiņu nospiešanu"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Vizuāla reakcija uz fizisku taustiņu nospiešanu"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Rādīt virsmas atjauninājumus WL: 294"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Atjaunināt visa loga virsmas, kad tās tiek atjauninātas WL: 294"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Rādīt skat. atjaunin."</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Vairāk laika."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mazāk laika."</string>
     <string name="cancel" msgid="5665114069455378395">"Atcelt"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Tālāk"</string>
+    <string name="back" msgid="5554327870352703710">"Atpakaļ"</string>
+    <string name="save" msgid="3745809743277153149">"Saglabāt"</string>
     <string name="okay" msgid="949938843324579502">"LABI"</string>
     <string name="done" msgid="381184316122520313">"Gatavs"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Signāli un atgādinājumi"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Tikko"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Šis tālrunis"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Šis planšetdators"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Doka skaļrunis"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Ārēja ierīce"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Pievienotā ierīce"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Šis tālrunis"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Nevar atskaņot šajā ierīcē."</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Lai pārslēgtu, jauniniet kontu"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Vai pievienot jaunu lietotāju?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Varat koplietot šo ierīci ar citām personām, izveidojot papildu lietotājus. Katram lietotājam ir sava vide, kas ir pielāgojama, izmantojot lietotnes, fona tapetes u.c. Lietotāji var pielāgot arī ierīces iestatījumus, kas attiecas uz visiem lietotājiem, piemēram, Wi‑Fi.\n\nKad pievienosiet jaunu lietotāju, viņam būs jāizveido sava vide.\n\nIkviens lietotājs var atjaunināt lietotnes citu lietotāju vietā. Pieejamības iestatījumi un pakalpojumi var netikt pārsūtīti jaunajam lietotājam."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Kad pievienosiet jaunu lietotāju, viņam būs jāizveido sava vide.\n\nIkviens lietotājs var atjaunināt lietotnes citu lietotāju vietā."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Vai iestatīt šo lietotāju kā administratoru?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Administratoriem ir īpašas privilēģijas, kas nav citiem lietotājiem. Administrators var pārvaldīt visus lietotājus, atjaunināt vai atiestatīt šo ierīci, mainīt iestatījumus, skatīt visas instalētās lietotnes un piešķirt vai atsaukt administratora privilēģijas citiem lietotājiem."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Iestatīt kā administratoru"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Iestatīt kontu tūlīt?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Pārliecinieties, ka persona var izmantot ierīci un iestatīt savu vidi."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Vai iestatīt profilu tūlīt?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Jā, iestatīt kā administratoru"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Nē, neiestatīt kā administratoru"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Pārvietojiet pirkstu augšup"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Nav norādīta"</string>
+    <string name="neuter" msgid="2075249330106127310">"Nekatrā dzimte"</string>
+    <string name="feminine" msgid="1529155595310784757">"Sieviešu dzimte"</string>
+    <string name="masculine" msgid="4653978041013996303">"Vīriešu dzimte"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-mk/arrays.xml b/packages/SettingsLib/res/values-mk/arrays.xml
index 3684edb..f1a02bb 100644
--- a/packages/SettingsLib/res/values-mk/arrays.xml
+++ b/packages/SettingsLib/res/values-mk/arrays.xml
@@ -55,12 +55,12 @@
   </string-array>
   <string-array name="hdcp_checking_summaries">
     <item msgid="4045840870658484038">"Никогаш не користи HDCP проверка"</item>
-    <item msgid="8254225038262324761">"Користи HDCP-проверка само за DRM-содржини"</item>
+    <item msgid="8254225038262324761">"Користи проверка со HDCP само за DRM-содржини"</item>
     <item msgid="6421717003037072581">"Секогаш користи HDCP проверка"</item>
   </string-array>
   <string-array name="bt_hci_snoop_log_entries">
     <item msgid="695678520785580527">"Оневозможено"</item>
-    <item msgid="6336372935919715515">"Овозможено е филтрирано"</item>
+    <item msgid="6336372935919715515">"Овозможено филтрирање"</item>
     <item msgid="2779123106632690576">"Овозможено"</item>
   </string-array>
   <string-array name="bt_hci_snoop_log_filters_entries">
@@ -186,11 +186,11 @@
   </string-array>
   <string-array name="select_logd_size_summaries">
     <item msgid="409235464399258501">"Исклучено"</item>
-    <item msgid="4195153527464162486">"64 K/меѓумеморија"</item>
-    <item msgid="7464037639415220106">"256 K/меѓумеморија"</item>
-    <item msgid="8539423820514360724">"1 M/меѓумеморија"</item>
-    <item msgid="1984761927103140651">"4 M/меѓумеморија"</item>
-    <item msgid="2983219471251787208">"8 M/привремена меморија за евиденција"</item>
+    <item msgid="4195153527464162486">"64 K по евиденциска меѓумеморија"</item>
+    <item msgid="7464037639415220106">"256 K по евиденциска меѓумеморија"</item>
+    <item msgid="8539423820514360724">"1 M по евиденциска меѓумеморија"</item>
+    <item msgid="1984761927103140651">"4 M по евиденциска меѓумеморија"</item>
+    <item msgid="2983219471251787208">"8 M по евиденциска меѓумеморија"</item>
   </string-array>
   <string-array name="select_logpersist_titles">
     <item msgid="704720725704372366">"Исклучено"</item>
@@ -200,36 +200,36 @@
   </string-array>
   <string-array name="select_logpersist_summaries">
     <item msgid="97587758561106269">"Исклучено"</item>
-    <item msgid="7126170197336963369">"Привремена меморија на целата евиденција"</item>
+    <item msgid="7126170197336963369">"Сите евиденциски меѓумемории"</item>
     <item msgid="7167543126036181392">"Привремена мем. на цела евиденција освен за радио"</item>
     <item msgid="5135340178556563979">"само привремена меморија за евиденција на јадро"</item>
   </string-array>
   <string-array name="window_animation_scale_entries">
     <item msgid="2675263395797191850">"Без анимација"</item>
-    <item msgid="5790132543372767872">"Опсег на анимација 0,5x"</item>
-    <item msgid="2529692189302148746">"Опсег на анимација 1x"</item>
-    <item msgid="8072785072237082286">"Опсег на анимација 1,5x"</item>
-    <item msgid="3531560925718232560">"Опсег на анимација 2x"</item>
-    <item msgid="4542853094898215187">"Опсег на анимација 5x"</item>
-    <item msgid="5643881346223901195">"Опсег на анимација 10x"</item>
+    <item msgid="5790132543372767872">"Брзина на анимации 0,5x"</item>
+    <item msgid="2529692189302148746">"Брзина на анимации 1x"</item>
+    <item msgid="8072785072237082286">"Брзина на анимации 1,5x"</item>
+    <item msgid="3531560925718232560">"Брзина на анимации 2x"</item>
+    <item msgid="4542853094898215187">"Брзина на анимации 5x"</item>
+    <item msgid="5643881346223901195">"Брзина на анимации 10x"</item>
   </string-array>
   <string-array name="transition_animation_scale_entries">
     <item msgid="3376676813923486384">"Без анимација"</item>
-    <item msgid="753422683600269114">"Опсег на анимација 0,5x"</item>
-    <item msgid="3695427132155563489">"Опсег на анимација 1x"</item>
-    <item msgid="9032615844198098981">"Опсег на анимација 1,5x"</item>
-    <item msgid="8473868962499332073">"Опсег на анимација 2x"</item>
-    <item msgid="4403482320438668316">"Опсег на анимација 5x"</item>
-    <item msgid="169579387974966641">"Опсег на анимација 10x"</item>
+    <item msgid="753422683600269114">"Брзина на анимации 0,5x"</item>
+    <item msgid="3695427132155563489">"Брзина на анимации 1x"</item>
+    <item msgid="9032615844198098981">"Брзина на анимации 1,5x"</item>
+    <item msgid="8473868962499332073">"Брзина на анимации 2x"</item>
+    <item msgid="4403482320438668316">"Брзина на анимации 5x"</item>
+    <item msgid="169579387974966641">"Брзина на анимации 10x"</item>
   </string-array>
   <string-array name="animator_duration_scale_entries">
     <item msgid="6416998593844817378">"Исклучи анимација"</item>
-    <item msgid="875345630014338616">"Опсег на анимација 5x"</item>
-    <item msgid="2753729231187104962">"Опсег на анимација 1x"</item>
-    <item msgid="1368370459723665338">"Опсег на анимација 1,5x"</item>
-    <item msgid="5768005350534383389">"Опсег на анимација 2x"</item>
-    <item msgid="3728265127284005444">"Опсег на анимација 5x"</item>
-    <item msgid="2464080977843960236">"Опсег на анимација 10x"</item>
+    <item msgid="875345630014338616">"Брзина на анимации 5x"</item>
+    <item msgid="2753729231187104962">"Брзина на анимации 1x"</item>
+    <item msgid="1368370459723665338">"Брзина на анимации 1,5x"</item>
+    <item msgid="5768005350534383389">"Брзина на анимации 2x"</item>
+    <item msgid="3728265127284005444">"Брзина на анимации 5x"</item>
+    <item msgid="2464080977843960236">"Брзина на анимации 10x"</item>
   </string-array>
   <string-array name="overlay_display_devices_entries">
     <item msgid="4497393944195787240">"Ниедна"</item>
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4 илјади (безбедно)"</item>
     <item msgid="7322156123728520872">"4 илјади (подобрено)"</item>
     <item msgid="7735692090314849188">"4 илјади (подобрено, безбедно)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (двоен екран)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"Ниедна"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Аудиоизвор"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index f8a66f8..a3d9e96 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Пристап до SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD-аудио: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD-аудио"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Слушни помагала"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE-аудио"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Поврзано со слушни помагала"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Слушни помагала"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE-аудио"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Поврзано со слушни помагала"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Поврзано на LE-аудио"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Поврзан со аудио на медиуми"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Поврзан со аудио на телефон"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Користи за аудио на телефон"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Користи за пренос на датотеки"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Користи за внес"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Користи за слушни помагала"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Користам слушни помагала"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Користи за LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Спари"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"СПАРИ"</string>
@@ -175,9 +175,9 @@
     <string name="launch_defaults_none" msgid="8049374306261262709">"Нема поставено стандардни вредности"</string>
     <string name="tts_settings" msgid="8130616705989351312">"Поставки на текст-во-говор"</string>
     <string name="tts_settings_title" msgid="7602210956640483039">"Претворање текст во говор"</string>
-    <string name="tts_default_rate_title" msgid="3964187817364304022">"Брзина на говор"</string>
+    <string name="tts_default_rate_title" msgid="3964187817364304022">"Брзина на говорот"</string>
     <string name="tts_default_rate_summary" msgid="3781937042151716987">"Брзина со која се кажува текстот"</string>
-    <string name="tts_default_pitch_title" msgid="6988592215554485479">"Интензитет"</string>
+    <string name="tts_default_pitch_title" msgid="6988592215554485479">"Висина на тонот"</string>
     <string name="tts_default_pitch_summary" msgid="9132719475281551884">"Влијае на тонот на синтетизираниот говор"</string>
     <string name="tts_default_lang_title" msgid="4698933575028098940">"Јазик"</string>
     <string name="tts_lang_use_system" msgid="6312945299804012406">"Користи системски јазик"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Изберете профил"</string>
     <string name="category_personal" msgid="6236798763159385225">"Лични"</string>
     <string name="category_work" msgid="4014193632325996115">"Работа"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Клон"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Програмерски опции"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Овозможете ги програмерските опции"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Постави опции за развој на апликација"</string>
@@ -224,7 +225,7 @@
     <string name="apn_settings_not_available" msgid="1147111671403342300">"Поставките за името на пристапната точка не се достапни за овој корисник"</string>
     <string name="enable_adb" msgid="8072776357237289039">"Отстранување грешки преку USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Режим за отстранување грешки кога е поврзано USB"</string>
-    <string name="clear_adb_keys" msgid="3010148733140369917">"Отповикај овластувања за отстранување грешки преку USB"</string>
+    <string name="clear_adb_keys" msgid="3010148733140369917">"Повлечи овластувања за отстранување грешки преку USB"</string>
     <string name="enable_adb_wireless" msgid="6973226350963971018">"Безжично отстранување грешки"</string>
     <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Режим за отстранување грешки кога е поврзано Wi‑Fi"</string>
     <string name="adb_wireless_error" msgid="721958772149779856">"Грешка"</string>
@@ -253,13 +254,13 @@
     <string name="adb_wireless_qrcode_pairing_description" msgid="6014121407143607851">"Скенирајте QR-код за да го спарите уредот преку Wi‑Fi"</string>
     <string name="adb_wireless_no_network_msg" msgid="2365795244718494658">"Поврзете се на Wi-Fi мрежа"</string>
     <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, отстранува грешка, програмер"</string>
-    <string name="bugreport_in_power" msgid="8664089072534638709">"Кратенка за извештај за грешка"</string>
-    <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Прикажи копче во менито за вклучување за да се направи извештај за грешка"</string>
+    <string name="bugreport_in_power" msgid="8664089072534638709">"Кратенка за извештај за грешки"</string>
+    <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Прикажи копче за создавање извештај за грешки во менито на копчето за вклучување"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Остани во активен режим"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"Екранот никогаш нема да биде во режим на спиење додека се полни"</string>
-    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Овозможи Bluetooth HCI за евиденција на пресретнување пакети"</string>
+    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Овозможи евиденција за Bluetooth HCI"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Снимај Bluetooth-пакети. (Вклучи Bluetooth по промената на поставкава)"</string>
-    <string name="oem_unlock_enable" msgid="5334869171871566731">"Отклучување со OEM"</string>
+    <string name="oem_unlock_enable" msgid="5334869171871566731">"Отклучување OEM"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"Дозволи да се отклучи подигнувачот"</string>
     <string name="confirm_enable_oem_unlock_title" msgid="8249318129774367535">"Дозволете отклучување со OEM?"</string>
     <string name="confirm_enable_oem_unlock_text" msgid="854131050791011970">"ПРЕДУПРЕДУВАЊЕ: функциите за заштита на уредот нема да работат на овој уред додека е вклучена оваа поставка."</string>
@@ -267,14 +268,14 @@
     <string name="mock_location_app_not_set" msgid="6972032787262831155">"Не е поставена апликација за лажна локација"</string>
     <string name="mock_location_app_set" msgid="4706722469342913843">"Апликација за лажна локација: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="6829757985772659599">"Вмрежување"</string>
-    <string name="wifi_display_certification" msgid="1805579519992520381">"Приказ на сертификација на безжична мрежа"</string>
-    <string name="wifi_verbose_logging" msgid="1785910450009679371">"Овозможи преопширно пријавување Wi‑Fi"</string>
+    <string name="wifi_display_certification" msgid="1805579519992520381">"Сертификација на безжичен приказ"</string>
+    <string name="wifi_verbose_logging" msgid="1785910450009679371">"Овозможи детално евидентирање за Wi-Fi"</string>
     <string name="wifi_scan_throttling" msgid="2985624788509913617">"Регулирање на скенирањето за Wi‑Fi"</string>
-    <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Непостојана MAC-рандомизација на Wi‑Fi"</string>
-    <string name="mobile_data_always_on" msgid="8275958101875563572">"Мобилниот интернет е секогаш активен"</string>
+    <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Рандомизација на непостојана MAC-адреса за Wi‑Fi"</string>
+    <string name="mobile_data_always_on" msgid="8275958101875563572">"Секогаш активен мобилен интернет"</string>
     <string name="tethering_hardware_offload" msgid="4116053719006939161">"Хардверско забрзување за врзување"</string>
     <string name="bluetooth_show_devices_without_names" msgid="923584526471885819">"Прикажувај уреди со Bluetooth без имиња"</string>
-    <string name="bluetooth_disable_absolute_volume" msgid="1452342324349203434">"Оневозможете апсолутна јачина на звук"</string>
+    <string name="bluetooth_disable_absolute_volume" msgid="1452342324349203434">"Оневозможи апсолутна јачина на звук"</string>
     <string name="bluetooth_enable_gabeldorsche" msgid="9131730396242883416">"Овозможи Gabeldorsche"</string>
     <string name="bluetooth_select_avrcp_version_string" msgid="1710571610177659127">"Верзија на AVRCP за Bluetooth"</string>
     <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7846922290083709633">"Изберете верзија на AVRCP за Bluetooth"</string>
@@ -299,30 +300,30 @@
     <string name="private_dns_mode_provider" msgid="3619040641762557028">"Име на хост на оператор на приватен DNS"</string>
     <string name="private_dns_mode_provider_hostname_hint" msgid="6564868953748514595">"Внесете име на хост на операторот на DNS"</string>
     <string name="private_dns_mode_provider_failure" msgid="8356259467861515108">"Не може да се поврзе"</string>
-    <string name="wifi_display_certification_summary" msgid="8111151348106907513">"Покажи ги опциите за безжичен приказ на сертификат"</string>
-    <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Зголеми Wi‑Fi ниво на пријавување, прикажи по SSID RSSI во Wi‑Fi бирач"</string>
-    <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"Го намалува искористувањето на батеријата и ја подобрува изведбата на мрежата"</string>
-    <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"Кога е овозможен режимов, MAC-адресата на уредов може да се промени секој пат кога ќе се поврзе со мрежа што има овозможена MAC-рандомизација."</string>
+    <string name="wifi_display_certification_summary" msgid="8111151348106907513">"Прикажувај ги опциите за сертификација на безжичен приказ"</string>
+    <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Зголеми го нивото на евидентирање за Wi‑Fi, прикажувај RSSI по SSID во избирачот за Wi‑Fi"</string>
+    <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"Го намалува трошењето на батеријата и ги подобрува мрежните перформанси"</string>
+    <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"Кога е овозможен режимов, MAC-адресата на уредов може да се менува секојпат кога ќе се поврзе на мрежа што има овозможена рандомизација на MAC-адреси."</string>
     <string name="wifi_metered_label" msgid="8737187690304098638">"Со ограничен интернет"</string>
     <string name="wifi_unmetered_label" msgid="6174142840934095093">"Без ограничен интернет"</string>
-    <string name="select_logd_size_title" msgid="1604578195914595173">"Величини на меѓумеморија за дневникот"</string>
-    <string name="select_logd_size_dialog_title" msgid="2105401994681013578">"Величина/меѓумеморија на дневник"</string>
+    <string name="select_logd_size_title" msgid="1604578195914595173">"Големини на евиденциски меѓумемории"</string>
+    <string name="select_logd_size_dialog_title" msgid="2105401994681013578">"Изберете големини за секоја евиденциска меѓумеморија"</string>
     <string name="dev_logpersist_clear_warning_title" msgid="8631859265777337991">"Да се избрише постојаната меморија на дневникот?"</string>
     <string name="dev_logpersist_clear_warning_message" msgid="6447590867594287413">"Кога веќе не го следиме постојаниот дневник, мора да ги избришеме податоците на дневникот што се наоѓаат на вашиот уред."</string>
-    <string name="select_logpersist_title" msgid="447071974007104196">"Трајно зачувувај податоци од дневникот на уредот"</string>
+    <string name="select_logpersist_title" msgid="447071974007104196">"Трајно зачувувај евиденциски податоци на уредот"</string>
     <string name="select_logpersist_dialog_title" msgid="7745193591195485594">"Изберете привремена меморија на евиденција што ќе се користи постојано на уредот"</string>
     <string name="select_usb_configuration_title" msgid="6339801314922294586">"Изберете конфигурација за USB"</string>
     <string name="select_usb_configuration_dialog_title" msgid="3579567144722589237">"Изберете конфигурација за USB"</string>
     <string name="allow_mock_location" msgid="2102650981552527884">"Овозможи лажни локации"</string>
     <string name="allow_mock_location_summary" msgid="179780881081354579">"Овозможи лажни локации"</string>
     <string name="debug_view_attributes" msgid="3539609843984208216">"Овозможете проверка на атрибутот на приказот"</string>
-    <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Секогаш држи го активен мобилниот интернет, дури и при активно Wi-Fi (за брзо префрлување мрежа)."</string>
+    <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Секогаш држи го активен мобилниот интернет, дури и при активно Wi-Fi (заради брзо менување мрежа)."</string>
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Ако е достапно, користи хардверско забрзување за врзување"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Овозможи отстранување грешки на USB?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"Отстранувањето грешки на USB е наменето само за целите на развој. Користете го за копирање податоци меѓу вашиот компјутер и вашиот уред, за инсталирање апликации на вашиот уред без известување и за читање евиденција на податоци."</string>
     <string name="adbwifi_warning_title" msgid="727104571653031865">"Да се дозволи безжично отстранување грешки?"</string>
     <string name="adbwifi_warning_message" msgid="8005936574322702388">"Безжичното отстранување грешки е наменето само за програмирање. Користете го за копирање податоци помеѓу компјутерот и уредот, за инсталирање апликации на уредот без известување и за читање податоци од евиденцијата."</string>
-    <string name="adb_keys_warning_message" msgid="2968555274488101220">"Отповикај пристап кон отстранување грешка од USB од сите претходно овластени компјутери?"</string>
+    <string name="adb_keys_warning_message" msgid="2968555274488101220">"Да се повлече пристапот за сите компјутери што претходно сте ги овластиле за отстранување грешки преку USB?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Дозволи поставки за развој?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Овие поставки се наменети само за употреба за развој. Тие може да предизвикаат уредот и апликациите во него да се расипат или да се однесуваат необично."</string>
     <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"Потврди апликации преку USB"</string>
@@ -333,7 +334,7 @@
     <string name="enhanced_connectivity_summary" msgid="1576414159820676330">"Ја овозможува функцијата „Подобрена поврзливост“."</string>
     <string name="enable_terminal_title" msgid="3834790541986303654">"Локален терминал"</string>
     <string name="enable_terminal_summary" msgid="2481074834856064500">"Овозможи апликација на терминал што овозможува локален пристап кон школка."</string>
-    <string name="hdcp_checking_title" msgid="3155692785074095986">"Проверување HDCP"</string>
+    <string name="hdcp_checking_title" msgid="3155692785074095986">"Проверка со HDCP"</string>
     <string name="hdcp_checking_dialog_title" msgid="7691060297616217781">"Постави однесување на проверка на HDCP"</string>
     <string name="debug_debugging_category" msgid="535341063709248842">"Отстранување грешки"</string>
     <string name="debug_app" msgid="8903350241392391766">"Изберете апликација за отстранување грешки"</string>
@@ -354,12 +355,14 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Прекривката на екран ги покажува тековните податоци на допир"</string>
     <string name="show_touches" msgid="8437666942161289025">"Прикажувај допири"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Прикажувај визуелни повратни информации за допири"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Прикаж. притисн. копчиња"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Визуелно го прикажува притискањето на копчињата"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Прикажи ажурир. површина"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Осветли површ. на прозорци при нивно ажурирање"</string>
-    <string name="show_hw_screen_updates" msgid="2021286231267747506">"Прикажи ажурирања на прегледи"</string>
-    <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"Осветли прегледи во прозорците при цртање"</string>
-    <string name="show_hw_layers_updates" msgid="5268370750002509767">"Ажурир. слоеви на хардвер"</string>
-    <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"Осветли слоеви на хардвер со зелено кога се ажур."</string>
+    <string name="show_hw_screen_updates" msgid="2021286231267747506">"Покажувај ажурирања на приказот"</string>
+    <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"Осветлувај го приказот при повлекување во прозорците"</string>
+    <string name="show_hw_layers_updates" msgid="5268370750002509767">"Покажувај ажурирања на хардверски слоеви"</string>
+    <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"Осветлувај ги хардверските слоеви со зелено кога се ажурираат"</string>
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"Отстр. греш. на GPU"</string>
     <string name="disable_overlays" msgid="4206590799671557143">"Оневозможи HW-преклопувања"</string>
     <string name="disable_overlays_summary" msgid="1954852414363338166">"Секогаш користи GPU за составување екран"</string>
@@ -367,24 +370,24 @@
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"Овозможи траги на OpenGL"</string>
     <string name="usb_audio_disable_routing" msgid="3367656923544254975">"Исклучи USB-пренасочување"</string>
     <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Исклучи автоматско пренасочување до USB-аудиоуреди"</string>
-    <string name="debug_layout" msgid="1659216803043339741">"Прикажи граници на слој"</string>
-    <string name="debug_layout_summary" msgid="8825829038287321978">"Прикажи граници на клип, маргини итн."</string>
-    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Принудно користи RTL за насока"</string>
-    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Принудно постави насока на распоред на екранот во RTL за сите локални стандарди"</string>
+    <string name="debug_layout" msgid="1659216803043339741">"Прикажи граници на распоред"</string>
+    <string name="debug_layout_summary" msgid="8825829038287321978">"Прикажувај граници на исечок, маргини итн."</string>
+    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Наметни насока „оддесно налево“"</string>
+    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Наметни насока „оддесно налево“ за распоредот на екранот за сите локални стандарди"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"Проѕирна лента за навигација"</string>
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"Направете ја заднината на лентата за навигација стандардно проѕирна"</string>
-    <string name="window_blurs" msgid="6831008984828425106">"Дозволи замаглување прозорец"</string>
+    <string name="window_blurs" msgid="6831008984828425106">"Дозволи замаглувања на ниво на прозорци"</string>
     <string name="force_msaa" msgid="4081288296137775550">"Принудно користи 4x MSAA"</string>
     <string name="force_msaa_summary" msgid="9070437493586769500">"Овозможи 4x MSAA за апликации OpenGL ES 2.0"</string>
-    <string name="show_non_rect_clip" msgid="7499758654867881817">"Отстрани грешка на неправоаголни клип операции"</string>
-    <string name="track_frame_time" msgid="522674651937771106">"HWUI-прикажување профил"</string>
+    <string name="show_non_rect_clip" msgid="7499758654867881817">"Отстранување грешки при операции за неправоаголни исечоци"</string>
+    <string name="track_frame_time" msgid="522674651937771106">"Профилирај HWUI-приказ"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Овозм. отстр. греш. на GPU"</string>
-    <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Дозволи отстр. греш. на GPU за поправање апликации"</string>
+    <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Дозволи вчитување GPU-слоеви за отстранув. грешки"</string>
     <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Опширна евиденција на продавачи"</string>
     <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Вклучува дополнителна евиденција на продавачи во извештаите за грешки за конкретен уред, којашто може да содржи приватни податоци, повеќе да ја користи батеријата и/или да користи повеќе капацитет."</string>
-    <string name="window_animation_scale_title" msgid="5236381298376812508">"Опсег на аним. на прозор."</string>
-    <string name="transition_animation_scale_title" msgid="1278477690695439337">"Опсег на преодна анимац."</string>
-    <string name="animator_duration_scale_title" msgid="7082913931326085176">"Скала за времетраење на аниматор"</string>
+    <string name="window_animation_scale_title" msgid="5236381298376812508">"Брзина на анимации за прозорци"</string>
+    <string name="transition_animation_scale_title" msgid="1278477690695439337">"Брзина на преодни анимации"</string>
+    <string name="animator_duration_scale_title" msgid="7082913931326085176">"Брзина на општи анимации"</string>
     <string name="overlay_display_devices_title" msgid="5411894622334469607">"Симул. секундарен екран"</string>
     <string name="debug_applications_category" msgid="5394089406638954196">"Апликации"</string>
     <string name="immediately_destroy_activities" msgid="1826287490705167403">"Не чувај активности"</string>
@@ -392,12 +395,12 @@
     <string name="app_process_limit_title" msgid="8361367869453043007">"Граница на процес во зад."</string>
     <string name="show_all_anrs" msgid="9160563836616468726">"Прикажи заднински ANR"</string>
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"Прикажи го дијалогот „Апликацијата не реагира“ за апликации во заднина"</string>
-    <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Прикажи ги предупредувањата на каналот за известувањe"</string>
+    <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Прикажувај предупредувања за каналот за известувања"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Предупредува кога апликација дава известување без важечки канал"</string>
-    <string name="force_allow_on_external" msgid="9187902444231637880">"Принуд. дозволете апликации на надворешна меморија"</string>
-    <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Прави секоја апликација да биде подобна за запишување на надворешна меморија, независно од вредностите на манифестот"</string>
-    <string name="force_resizable_activities" msgid="7143612144399959606">"Принуди ги активностите да ја менуваат големината"</string>
-    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"Направете сите активности да бидат со променлива големина за повеќе прозорци, без разлика на вредностите на манифестот."</string>
+    <string name="force_allow_on_external" msgid="9187902444231637880">"Наметни апликации во надворешната меморија"</string>
+    <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Сите апликации ќе бидат подобни за запишување во надворешната меморија, независно од вредностите на манифестот"</string>
+    <string name="force_resizable_activities" msgid="7143612144399959606">"Наметни променлива големина на активностите"</string>
+    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"Сите активности ќе имаат променлива големина во режимот со повеќе прозорци, независно од вредностите на манифестот."</string>
     <string name="enable_freeform_support" msgid="7599125687603914253">"Овозможи прозорци со слободна форма"</string>
     <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Овозможи поддршка за експериментални прозорци со слободна форма."</string>
     <string name="desktop_mode" msgid="2389067840550544462">"Режим за компјутер"</string>
@@ -440,8 +443,8 @@
     <string name="daltonizer_mode_deuteranomaly" msgid="3507284319584683963">"Девтераномалија (слепило за црвена и зелена)"</string>
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Протаномалија (слепило за црвена и зелена)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Тританомалија (слепило за сина и жолта)"</string>
-    <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Корекција на бои"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="1522101114585266455">"Корекцијата на боите може да биде корисна кога сакате:&lt;br/&gt; &lt;ol&gt; &lt;li&gt;&amp;nbsp;да ги гледате боите попрецизно&lt;/li&gt; &lt;li&gt;&amp;nbsp;да ги отстраните боите за да се фокусирате подобро&lt;/li&gt; &lt;/ol&gt;"</string>
+    <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Корекција на боите"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="1522101114585266455">"Корекцијата на боите може да биде корисна кога сакате:&lt;br/&gt; &lt;ol&gt; &lt;li&gt;&amp;nbsp;да ги гледате боите попрецизно&lt;/li&gt; &lt;li&gt;&amp;nbsp;да ги отстраните боите за полесно да се концентрирате&lt;/li&gt; &lt;/ol&gt;"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"Прескокнато според <xliff:g id="TITLE">%1$s</xliff:g>"</string>
     <string name="power_remaining_settings_home_page" msgid="4885165789445462557">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> - <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string>
     <string name="power_remaining_duration_only" msgid="8264199158671531431">"Уште околу <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
@@ -468,7 +471,7 @@
     <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"Уредот може да се исклучи наскоро (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
     <string name="power_charging" msgid="6727132649743436802">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_remaining_charging_duration_only" msgid="8085099012811384899">"<xliff:g id="TIME">%1$s</xliff:g> до полна батерија"</string>
-    <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> до полна батерија"</string>
+    <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> до полна батерија"</string>
     <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Полнењето е оптимизирано"</string>
     <string name="power_charging_future_paused" msgid="4730177778538118032">"<xliff:g id="LEVEL">%1$s</xliff:g> - Полнењето е оптимизирано"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"Непознато"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Повеќе време."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Помалку време."</string>
     <string name="cancel" msgid="5665114069455378395">"Откажи"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Следно"</string>
+    <string name="back" msgid="5554327870352703710">"Назад"</string>
+    <string name="save" msgid="3745809743277153149">"Зачувај"</string>
     <string name="okay" msgid="949938843324579502">"Во ред"</string>
     <string name="done" msgid="381184316122520313">"Готово"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Аларми и потсетници"</string>
@@ -547,14 +547,17 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Пред малку"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Овој телефон"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Овој таблет"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Док со звучник"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Надворешен уред"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Поврзан уред"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Овој телефон"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Не може да се пушти на уредов"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Надградете ја сметката за да се префрлите"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Не може да се пуштаат преземања тука"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Обидете се повторно по рекламата"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Разбудете го уредот за да пуштате овде"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Разбудете го уредот за да пуштате тука"</string>
     <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Уредот не е одобрен за репродукција"</string>
-    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Не може да се пуштат аудиовизуелните содржини овде"</string>
+    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Овие аудиовизуелни содржини не може да се пуштат тука"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Проблем со поврзување. Исклучете го уредот и повторно вклучете го"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Жичен аудиоуред"</string>
     <string name="help_label" msgid="3528360748637781274">"Помош и повратни информации"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Да се додаде нов корисник?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Уредов може да го споделувате со други лица ако додадете дополнителни корисници. Секој корисник има сопствен простор што може да го приспособува со апликации, тапети и слично. Корисниците може да приспособуваат и поставки за уредот, како на пр., Wi‑Fi, што важат за сите.\n\nКога додавате нов корисник, тоа лице треба да го постави својот простор.\n\nСекој корисник може да ажурира апликации за сите други корисници. Поставките и услугите за пристапност не може да се префрлат на новиот корисник."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Кога додавате нов корисник, тоа лице треба да го постави својот простор.\n\nСекој корисник може да ажурира апликации за сите други корисници."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Да се постави корисников како администратор?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Администраторите имаат посебни привилегии што другите корисници ги немаат. Администраторот може да управува со сите корисници, да го ажурира или ресетира уредов, да ги менува поставките, да ги прегледува сите инсталирани апликации и да доделува или одзема администраторски привилегии на другите корисници."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Постави како администратор"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Ќе поставите корисник сега?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Проверете дали лицето е достапно да го земе уредот и да го постави својот простор"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Постави профил сега?"</string>
@@ -593,7 +593,7 @@
     <string name="user_add_user_type_title" msgid="551279664052914497">"Додај"</string>
     <string name="user_new_user_name" msgid="60979820612818840">"Нов корисник"</string>
     <string name="user_new_profile_name" msgid="2405500423304678841">"Нов профил"</string>
-    <string name="user_info_settings_title" msgid="6351390762733279907">"Информации за корисникот"</string>
+    <string name="user_info_settings_title" msgid="6351390762733279907">"Податоци за корисникот"</string>
     <string name="profile_info_settings_title" msgid="105699672534365099">"Информации за профил"</string>
     <string name="user_need_lock_message" msgid="4311424336209509301">"Пред да може да создадете ограничен профил, треба да поставите заклучување на екранот за да ги заштити вашите апликации и лични податоци."</string>
     <string name="user_set_lock_button" msgid="1427128184982594856">"Постави заклучување"</string>
@@ -615,21 +615,19 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Ова ќе ги избрише апликациите и податоците од тековната гостинска сесија"</string>
+    <string name="grant_admin" msgid="4323199171790522574">"Да, постави како администратор"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Не, не поставувај како администратор"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Излези"</string>
-    <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Да се зачува активност на гостин?"</string>
-    <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Може да зачувате активност од тековната сесија или да ги избришете сите апликации и податоци"</string>
+    <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" 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>
@@ -679,7 +677,7 @@
     <string name="keyboard_layout_default_label" msgid="1997292217218546957">"Стандардно"</string>
     <string name="turn_screen_on_title" msgid="3266937298097573424">"Вклучување на екранот"</string>
     <string name="allow_turn_screen_on" msgid="6194845766392742639">"Дозволи вклучување на екранот"</string>
-    <string name="allow_turn_screen_on_description" msgid="43834403291575164">"Дозволете апликација да го вклучи екранот. Ако дозволите, апликацијата може да го вклучи екранот во секое време без ваша намера."</string>
+    <string name="allow_turn_screen_on_description" msgid="43834403291575164">"Дозволува одредена апликација да го вклучува екранот. Ако е дозволено, апликацијата може да го вклучува екранот во секое време без ваша намера."</string>
     <string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"Да се прекине емитувањето на <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="268234802198852753">"Ако емитувате на <xliff:g id="SWITCHAPP">%1$s</xliff:g> или го промените излезот, тековното емитување ќе запре"</string>
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"Емитување на <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Преместете нагоре"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Не е наведено"</string>
+    <string name="neuter" msgid="2075249330106127310">"Среден род"</string>
+    <string name="feminine" msgid="1529155595310784757">"Женски род"</string>
+    <string name="masculine" msgid="4653978041013996303">"Машки род"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ml/arrays.xml b/packages/SettingsLib/res/values-ml/arrays.xml
index 29c4a55..5e535d3 100644
--- a/packages/SettingsLib/res/values-ml/arrays.xml
+++ b/packages/SettingsLib/res/values-ml/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"ഓഡിയോ ഉറവിടം"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index ac4b077..8b3caae 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"സിം ആക്സസ്"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD ഓഡിയോ: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD ഓഡിയോ"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"ശ്രവണ സഹായികൾ"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE ഓഡിയോ"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"ശ്രവണ സഹായികളിലേക്ക് കണക്‌റ്റ് ചെയ്‌തു"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"ശ്രവണ സഹായികൾ"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE ഓഡിയോ"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"ശ്രവണ സഹായികളിലേക്ക് കണക്‌റ്റ് ചെയ്‌തു"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE ഓഡിയോയിലേക്ക് കണക്‌റ്റ് ചെയ്‌തു"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"മീഡിയ ഓഡിയോയിലേക്ക് കണ‌ക്റ്റുചെയ്‌തു"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"ഫോൺ ഓഡിയോയിൽ കണ‌ക്റ്റുചെ‌യ്‌തു"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"ഫോൺ ഓഡിയോയ്ക്കായി ഉപയോഗിക്കുക"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ഫയൽ കൈമാറ്റത്തിനായി ഉപയോഗിക്കുന്നു"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ഇൻപുട്ടിനായി ഉപയോഗിക്കുക"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"ശ്രവണ സഹായികൾക്കായി ഉപയോഗിക്കുക"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"ശ്രവണ സഹായികൾക്കായി ഉപയോഗിക്കുക"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO ഉപയോഗിക്കുക"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"ജോടിയാക്കുക"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ജോടിയാക്കുക"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"പ്രൊഫൈൽ തിരഞ്ഞെടുക്കുക"</string>
     <string name="category_personal" msgid="6236798763159385225">"വ്യക്തിപരം"</string>
     <string name="category_work" msgid="4014193632325996115">"ഔദ്യോഗികം"</string>
+    <string name="category_clone" msgid="1554511758987195974">"ക്ലോൺ ചെയ്യുക"</string>
     <string name="development_settings_title" msgid="140296922921597393">"ഡെവലപ്പർ ഓ‌പ്ഷനുകൾ"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"ഡെവലപ്പർ ഓ‌പ്ഷനുകൾ പ്രവർത്തനക്ഷമമാക്കുക"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"അപ്ലിക്കേഷൻ വികസനത്തിന് ഓപ്ഷനുകൾ സജ്ജീകരിക്കുക"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"സ്‌ക്രീൻ ഓവർലേ നിലവിലെ ടച്ച് ഡാറ്റ ദൃശ്യമാക്കുന്നു"</string>
     <string name="show_touches" msgid="8437666942161289025">"ടാപ്പുകൾ കാണിക്കുക"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"ടാപ്പുകൾക്ക് ദൃശ്യ ഫീഡ്ബാക്ക് കാണിക്കുക"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"കീ അമർത്തലുകൾ കാണിക്കുക"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"ഫിസിക്കൽ കീ അമർത്തൽ വിഷ്വൽ ഫീഡ്‌ബാക്ക് കാണിക്കൂ"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"സർഫേസ് അപ്‌ഡേറ്റ് കാണിക്കൂ"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"അപ്‍ഡേറ്റ് പൂർത്തിയാകുമ്പോൾ മുഴുവൻ വിൻഡോ സർഫേസുകളും ഫ്ലാഷ് ചെയ്യുക"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"\'അപ്‌ഡേറ്റുകൾ കാണുക\' കാണിക്കുക"</string>
@@ -544,12 +547,15 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"ഇപ്പോൾ"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"ഈ ഫോൺ"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"ഈ ടാബ്‌ലെറ്റ്"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"ഡോക്ക് സ്‌പീക്കർ"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"ബാഹ്യ ഉപകരണം"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"കണക്‌റ്റ് ചെയ്‌ത ഉപകരണം"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"ഈ ഫോൺ"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"ഈ ഉപകരണത്തിൽ പ്ലേ ചെയ്യാൻ കഴിയില്ല"</string>
-    <string name="media_output_status_require_premium" msgid="8411255800047014822">"അക്കൗണ്ട് മാറുന്നതിന്, അത് അപ്‌ഗ്രേഡ് ചെയ്യുക"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"ഡൗൺലോഡ് ചെയ്തവ ഇവിടെ പ്ലേ ചെയ്യാനാകില്ല"</string>
+    <string name="media_output_status_require_premium" msgid="8411255800047014822">"അക്കൗണ്ട് മാറാൻ അപ്‌ഗ്രേഡ് ചെയ്യുക"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"ഡൗൺലോഡുകൾ പ്ലേ ചെയ്യാനാകില്ല"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"പരസ്യത്തിന് ശേഷം വീണ്ടും ശ്രമിക്കുക"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"ഇവിടെ പ്ലേ ചെയ്യാൻ ഉപകരണം സജീവമാക്കുക"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"പ്ലേ ചെയ്യാൻ ഉപകരണം സജീവമാക്കുക"</string>
     <string name="media_output_status_unauthorized" msgid="5880222828273853838">"ഉപകരണത്തിന് പ്ലേ ചെയ്യാനുള്ള അനുമതിയില്ല"</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"ഈ മീഡിയ ഇവിടെ പ്ലേ ചെയ്യാൻ കഴിയില്ല"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"കണക്‌റ്റ് ചെയ്യുന്നതിൽ പ്രശ്‌നമുണ്ടായി. ഉപകരണം ഓഫാക്കി വീണ്ടും ഓണാക്കുക"</string>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"മുകളിലേക്ക് നീക്കുക"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"വ്യക്തമാക്കിയിട്ടില്ലാത്തവ"</string>
+    <string name="neuter" msgid="2075249330106127310">"നപുംസകലിംഗം"</string>
+    <string name="feminine" msgid="1529155595310784757">"സ്ത്രീലിംഗം"</string>
+    <string name="masculine" msgid="4653978041013996303">"പുല്ലിംഗം"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-mn/arrays.xml b/packages/SettingsLib/res/values-mn/arrays.xml
index b96edd9..2ebbb13 100644
--- a/packages/SettingsLib/res/values-mn/arrays.xml
+++ b/packages/SettingsLib/res/values-mn/arrays.xml
@@ -216,7 +216,7 @@
   <string-array name="transition_animation_scale_entries">
     <item msgid="3376676813923486384">"Дүрс амилуулалт идэвхгүй"</item>
     <item msgid="753422683600269114">"Дүрс амилуулах далайц .5x"</item>
-    <item msgid="3695427132155563489">"Дүрс амилуулах далайц 1x"</item>
+    <item msgid="3695427132155563489">"Анимацийн масштаб 1x"</item>
     <item msgid="9032615844198098981">"Дүрс амилуулах далайц 1.5x"</item>
     <item msgid="8473868962499332073">"Дүрс амилуулалтын далайц 2x"</item>
     <item msgid="4403482320438668316">"Дүрс амилуулалтын далайц 5x"</item>
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4К (найдвартай)"</item>
     <item msgid="7322156123728520872">"4К (өндөр чанартай)"</item>
     <item msgid="7735692090314849188">"4К (өндөр чанартай, найдвартай)"</item>
-    <item msgid="7346816300608639624">"720пиксель, 1080пиксель (хос дэлгэц)"</item>
+    <item msgid="7346816300608639624">"720пиксель, 1080пиксель (dual screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"Алийг нь ч биш"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Аудио эх сурвалж"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index 80ca5fd..a2447d26 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM Хандалт"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD аудио: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD аудио"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Сонсголын төхөөрөмж"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE аудио"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Сонсголын төхөөрөмжтэй холбосон"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Сонсголын төхөөрөмж"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Аудио"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Сонсголын төхөөрөмжтэй холбосон"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE аудионд холбогдсон"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Медиа аудиод холбогдсон"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Утасны аудид холбогдсон"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Утасны аудиод ашиглах"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Файл дамжуулахад ашиглах"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Оруулахад ашиглах"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Сонсголын төхөөрөмжид ашиглах"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Сонсголын төхөөрөмж болгон ашиглах"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_АУДИОНД ашиглах"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Хослуулах"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ХОСЛУУЛАХ"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Профайл сонгох"</string>
     <string name="category_personal" msgid="6236798763159385225">"Хувийн"</string>
     <string name="category_work" msgid="4014193632325996115">"Ажил"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Клон"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Хөгжүүлэгчийн тохиргоо"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Хөгжүүлэгчийн сонголтыг идэвхжүүлэх"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Апп хөгжүүлэлтэд зориулсан сонголтуудыг тохируулах"</string>
@@ -257,7 +258,7 @@
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Цэсэд алдааны мэдэгдэл авахад зориулсан товчийг харуулах"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Идэвхтэй байлгах"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"Цэнэглэж байх үед дэлгэц хэзээ ч амрахгүй"</string>
-    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Bluetooth HCI снүүп логыг идэвхжүүлэх"</string>
+    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Bluetooth HCI snoop log-г идэвхжүүлэх"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Bluetooth-н багцыг авна уу. (Энэ тохиргоог өөрчилсний дараа Bluetooth-г унтрааж/асаана уу)"</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"OEM түгжээ тайлагч"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"Bootloader-н түгжээг тайлахыг зөвшөөрөх"</string>
@@ -268,7 +269,7 @@
     <string name="mock_location_app_set" msgid="4706722469342913843">"Хуурамч байршлын апп: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="6829757985772659599">"Сүлжээ"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"Утасгүй дэлгэцийн сертификат"</string>
-    <string name="wifi_verbose_logging" msgid="1785910450009679371">"Wi‑Fi дэлгэрэнгүй лог-г идэвхжүүлэх"</string>
+    <string name="wifi_verbose_logging" msgid="1785910450009679371">"Wi‑Fi дэлгэрэнгүй логийг идэвхжүүлэх"</string>
     <string name="wifi_scan_throttling" msgid="2985624788509913617">"Wi‑Fi скан бууруулалт"</string>
     <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Wi‑Fi-н байнгын бус MAC-г санамсаргүй байдлаар эмхлэх"</string>
     <string name="mobile_data_always_on" msgid="8275958101875563572">"Мобайл дата байнга идэвхтэй"</string>
@@ -325,8 +326,8 @@
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"Таны өмнө нь зөвшөөрөл өгсөн бүх компьютерээс USB дебаг хандалтыг нь хураах уу?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"Хөгжлийн тохиргоог зөвшөөрөх үү?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Эдгээр тохиргоо нь зөвхөн хөгжүүлэлтэд ашиглах зорилготой. Эдгээр нь таны төхөөрөмж буюу түүн дээрх аппликейшнүүдийг эвдрэх, буруу ажиллах шалтгаан нь болж болно."</string>
-    <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"Апп-г USB-р баталгаажуулах"</string>
-    <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"ADB/ADT-р суулгасан апп-уудыг хорлонтой авиртай эсэхийг шалгах."</string>
+    <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"Аппыг USB-р баталгаажуулах"</string>
+    <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"ADB/ADT-р суулгасан аппуудыг хорлонтой авиртай эсэхийг шалгана."</string>
     <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"Нэргүй Bluetooth төхөөрөмжийг (зөвхөн MAC хаяг) харуулна"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"Хэт чанга дуугаралт эсвэл муу тохиргоо зэрэг алсын зайн төхөөрөмжийн дуугаралттай холбоотой асуудлын үед Bluetooth-ийн үнэмлэхүй дууны түвшнийг идэвхгүй болго."</string>
     <string name="bluetooth_enable_gabeldorsche_summary" msgid="2054730331770712629">"Bluetooth Gabeldorsche онцлогийн өрөлтийг идэвхжүүлдэг."</string>
@@ -341,8 +342,8 @@
     <string name="debug_app_set" msgid="6599535090477753651">"Согог засах аппликейшн: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="select_application" msgid="2543228890535466325">"Аппликейшн сонгох"</string>
     <string name="no_application" msgid="9038334538870247690">"Юуг ч биш"</string>
-    <string name="wait_for_debugger" msgid="7461199843335409809">"Дебаг-г хүлээх"</string>
-    <string name="wait_for_debugger_summary" msgid="6846330006113363286">"Дебаг хийгдсэн апп гүйцэтгэхийнхээ өмнө дебаг-г хавсаргахыг хүлээнэ"</string>
+    <string name="wait_for_debugger" msgid="7461199843335409809">"Дебагийг хүлээх"</string>
+    <string name="wait_for_debugger_summary" msgid="6846330006113363286">"Дебаг хийгдсэн апп гүйцэтгэхийнхээ өмнө дебагийг хавсаргахыг хүлээнэ"</string>
     <string name="debug_input_category" msgid="7349460906970849771">"Оруулах"</string>
     <string name="debug_drawing_category" msgid="5066171112313666619">"Зураг"</string>
     <string name="debug_hw_drawing_category" msgid="5830815169336975162">"Техник хангамжийн хурдасгасан үзүүлэлт"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Дэлгэцийн давхаргаар одоогийн хүрэлтийн өгөгдлийг харуулж байна"</string>
     <string name="show_touches" msgid="8437666942161289025">"Товшилтыг харуулах"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Товшилтын визуал хариу үйлдлийг харуулах"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Түлхүүрийн даралт харуул"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Биет түлхүүрийн даралтын визуал санал хүсэлт харуул"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Гадаргын шинэчлэлтүүдийг харуулах"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Шинэчлэгдэх үед цонхны гадаргыг бүхэлд нь анивчуулах"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Шинэчлэлт харахыг харуулах"</string>
@@ -375,16 +378,16 @@
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"Навигацын самбарын дэвсгэр өнгийг өгөгдмөлөөр нэвт харагддаг болгоно"</string>
     <string name="window_blurs" msgid="6831008984828425106">"Цонхны түвшний бүдгэрүүлэлтийг зөвшөөрөх"</string>
     <string name="force_msaa" msgid="4081288296137775550">"Хүчээр 4x MSAA ашиглах"</string>
-    <string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 апп-уудад 4x MSAA-г идэвхжүүлэх"</string>
+    <string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 аппуудад 4x MSAA-г идэвхжүүлэх"</string>
     <string name="show_non_rect_clip" msgid="7499758654867881817">"Тэгш өнцөгт бус клипийн үйлдлүүдийн согогийг засах"</string>
     <string name="track_frame_time" msgid="522674651937771106">"Профайл HWUI-н буулгалт"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"GPU дебаг хийх давхаргыг идэвхжүүлэх"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Дебаг хийх аппад GPU дебаг хийх давхарга ачаалахыг зөвшөөрөх"</string>
     <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Нийлүүлэгчийн дэлгэрэнгүй логийг идэвхжүүлэх"</string>
     <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Төхөөрөмжийн тодорхойлсон нийлүүлэгчийн нэвтрэх үеийн алдааны нэмэлт мэдээг оруулах бөгөөд энэ нь хувийн мэдээлэл агуулж, батарейг илүү ашиглах болон/эсвэл хадгалах сан илүү ашиглаж болзошгүй."</string>
-    <string name="window_animation_scale_title" msgid="5236381298376812508">"Цонхны дүрс амилуулалтын далайц"</string>
-    <string name="transition_animation_scale_title" msgid="1278477690695439337">"Шилжилтийн дүрс амилуулалтын далайц"</string>
-    <string name="animator_duration_scale_title" msgid="7082913931326085176">"Дүрс амилуулалт үргэлжлэх далайц"</string>
+    <string name="window_animation_scale_title" msgid="5236381298376812508">"Цонхны анимацийн масштаб"</string>
+    <string name="transition_animation_scale_title" msgid="1278477690695439337">"Шилжилтийн анимацийн масштаб"</string>
+    <string name="animator_duration_scale_title" msgid="7082913931326085176">"Анимацийн хугацааны масштаб"</string>
     <string name="overlay_display_devices_title" msgid="5411894622334469607">"Хоёр дахь дэлгэцийн симуляци хийх"</string>
     <string name="debug_applications_category" msgid="5394089406638954196">"Апп"</string>
     <string name="immediately_destroy_activities" msgid="1826287490705167403">"Үйлдлүүдийг хадгалахгүй"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Их хугацаа."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Бага хугацаа."</string>
     <string name="cancel" msgid="5665114069455378395">"Цуцлах"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Дараах"</string>
+    <string name="back" msgid="5554327870352703710">"Буцах"</string>
+    <string name="save" msgid="3745809743277153149">"Хадгалах"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Болсон"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Сэрүүлэг болон сануулагч"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Дөнгөж сая"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Энэ утас"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Энэ таблет"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Суурилуулагчийн чанга яригч"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Гадаад төхөөрөмж"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Холбогдсон төхөөрөмж"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Энэ утас"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Энэ төхөөрөмжид тоглуулах боломжгүй"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Сэлгэхийн тулд бүртгэлийг сайжруулна уу"</string>
@@ -578,13 +581,10 @@
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Хязгаарлагдсан профайл"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Шинэ хэрэглэгч нэмэх үү?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Та нэмэлт хэрэглэгч үүсгэх замаар бусад хүмүүстэй энэ төхөөрөмжийг хуваалцаж болно. Хэрэглэгч тус бүр апп, дэлгэцийн зураг болон бусад зүйлээ өөрчлөх боломжтой хувийн орон зайтай байна. Түүнчлэн хэрэглэгч нь бүх хэрэглэгчид нөлөөлөх боломжтой Wi-Fi зэрэг төхөөрөмжийн тохиргоог өөрчлөх боломжтой.\n\nХэрэв та шинэ хэрэглэгч нэмэх бол тухайн хүн хувийн орон зайгаа бүрдүүлэх ёстой.\n\nХэрэглэгч бүр бусад бүх хэрэглэгчийн өмнөөс апп шинэчилж болно. Хандалтын тохиргоо болон үйлчилгээг шинэ хэрэглэгчид шилжүүлэх боломжгүй байж болзошгүй."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"Та шинэ хэрэглэгч нэмбэл тухайн хүн өөрийн профайлыг тохируулах шаардлагатай.\n\nАль ч хэрэглэгч бүх хэрэглэгчийн апп-уудыг шинэчлэх боломжтой."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"Та шинэ хэрэглэгч нэмбэл тухайн хүн өөрийн орон зайг тохируулах шаардлагатай.\n\nАль ч хэрэглэгч бусад бүх хэрэглэгчийн аппуудыг шинэчлэх боломжтой."</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Энэ хэрэглэгчийг админ болгох уу?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Админууд бусад хэрэглэгчид байхгүй тусгай эрхтэй байдаг. Админ нь бүх хэрэглэгчийг удирдах, энэ төхөөрөмжийг шинэчлэх, сэргээх, тохиргоог өөрчлөх, бүх суулгасан аппыг харах болон бусад хэрэглэгчид админы эрх өгөх эсвэл эрхийг нь цуцлах боломжтой."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Админ болгох"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Хэрэглэгчийг одоо тохируулах уу?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Хэрэглэгч төхөөрөмжийг авч өөрийн профайлыг тохируулах боломжтой эсэхийг шалгана уу"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Профайлыг одоо тохируулах уу?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Энэ нь шинэ зочны харилцан үйлдэл эхлүүлж, одоогийн харилцан үйлдлээс бүх апп болон өгөгдлийг устгана"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Зочны горимоос гарах уу?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Энэ нь одоогийн зочны харилцан үйлдлээс аппууд болон өгөгдлийг устгана"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Тийм, түүнийг админ болго"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Үгүй, түүнийг админ болгохгүй"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Гарах"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Зочны үйл ажиллагааг хадгалах уу?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Та одоогийн харилцан үйлдлээс үйл ажиллагаа хадгалах эсвэл бүх апп, өгөгдлийг устгаж болно"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Дээш зөөх"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Заагаагүй"</string>
+    <string name="neuter" msgid="2075249330106127310">"Саармаг үг"</string>
+    <string name="feminine" msgid="1529155595310784757">"Эм үг"</string>
+    <string name="masculine" msgid="4653978041013996303">"Эр үг"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-mr/arrays.xml b/packages/SettingsLib/res/values-mr/arrays.xml
index db0f56a..9286e77 100644
--- a/packages/SettingsLib/res/values-mr/arrays.xml
+++ b/packages/SettingsLib/res/values-mr/arrays.xml
@@ -107,7 +107,7 @@
     <item msgid="506175145534048710">"Opus"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"सिस्टम निवड वापरा (डीफॉल्ट)"</item>
+    <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>
@@ -117,21 +117,21 @@
     <item msgid="7940970833006181407">"Opus"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
-    <item msgid="926809261293414607">"सिस्टम निवड वापरा (डीफॉल्ट)"</item>
+    <item msgid="926809261293414607">"सिस्टीम निवड वापरा (डीफॉल्ट)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
     <item msgid="3208896645474529394">"48.0 kHz"</item>
     <item msgid="8420261949134022577">"88.2 kHz"</item>
     <item msgid="8887519571067543785">"96.0 kHz"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
-    <item msgid="2284090879080331090">"सिस्टम निवड वापरा (डीफॉल्ट)"</item>
+    <item msgid="2284090879080331090">"सिस्टीम निवड वापरा (डीफॉल्ट)"</item>
     <item msgid="1872276250541651186">"44.1 kHz"</item>
     <item msgid="8736780630001704004">"48.0 kHz"</item>
     <item msgid="7698585706868856888">"88.2 kHz"</item>
     <item msgid="8946330945963372966">"96.0 kHz"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
-    <item msgid="2574107108483219051">"सिस्टम निवड वापरा (डीफॉल्ट)"</item>
+    <item msgid="2574107108483219051">"सिस्टीम निवड वापरा (डीफॉल्ट)"</item>
     <item msgid="4671992321419011165">"16 बिट/पॅटर्न"</item>
     <item msgid="1933898806184763940">"24 बिट/पॅटर्न"</item>
     <item msgid="1212577207279552119">"32 बिट/पॅटर्न"</item>
@@ -143,7 +143,7 @@
     <item msgid="3836844909491316925">"32 बिट/पॅटर्न"</item>
   </string-array>
   <string-array name="bluetooth_a2dp_codec_channel_mode_titles">
-    <item msgid="3014194562841654656">"सिस्टम निवड वापरा (डीफॉल्ट)"</item>
+    <item msgid="3014194562841654656">"सिस्टीम निवड वापरा (डीफॉल्ट)"</item>
     <item msgid="5982952342181788248">"मोनो"</item>
     <item msgid="927546067692441494">"स्टिरिओ"</item>
   </string-array>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"ऑडिओ स्रोत"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index 3836e17..e76c708 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"सिम अ‍ॅक्सेस"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD ऑडिओ: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD ऑडिओ"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"श्रवणयंत्रे"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE ऑडिओ"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"श्रवण यंत्रांशी कनेक्ट केले आहे"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"श्रवणयंत्रे"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE ऑडिओ"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"श्रवणयंत्रांशी कनेक्ट केले आहे"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE ऑडिओशी कनेक्ट केले आहे"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"मीडिया ऑडिओवर कनेक्ट केले"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"फोन ऑडिओ वर कनेक्ट केले"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"फोन ऑडिओसाठी वापरा"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"फाइल स्थानांतरणासाठी वापरा"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"इनपुट साठी वापरा"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"श्रवण यंत्रांसाठी वापरा"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"श्रवणयंत्रांसाठी वापरा"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO साठी वापरले आहे"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"पेअर करा"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"पेअर करा"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"प्रोफाइल निवडा"</string>
     <string name="category_personal" msgid="6236798763159385225">"वैयक्तिक"</string>
     <string name="category_work" msgid="4014193632325996115">"कार्य"</string>
+    <string name="category_clone" msgid="1554511758987195974">"क्लोन करा"</string>
     <string name="development_settings_title" msgid="140296922921597393">"डेव्हलपर पर्याय"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"डेव्हलपर पर्याय सुरू करा"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"अ‍ॅप विकासासाठी पर्याय सेट करा"</string>
@@ -267,7 +268,7 @@
     <string name="mock_location_app_not_set" msgid="6972032787262831155">"कोणतेही बनावट स्थान अ‍ॅप सेट केले नाही"</string>
     <string name="mock_location_app_set" msgid="4706722469342913843">"बनावट स्थान अ‍ॅप: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="6829757985772659599">"नेटवर्किंग"</string>
-    <string name="wifi_display_certification" msgid="1805579519992520381">"वायरलेस डिस्प्ले प्रमाणीकरण"</string>
+    <string name="wifi_display_certification" msgid="1805579519992520381">"वायरलेस डिस्प्ले सर्टिफिकेशन"</string>
     <string name="wifi_verbose_logging" msgid="1785910450009679371">"वाय-फाय व्हर्बोझ लॉगिंग सुरू करा"</string>
     <string name="wifi_scan_throttling" msgid="2985624788509913617">"वाय-फाय स्कॅन थ्रॉटलिंग"</string>
     <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"वाय-फायचे सातत्याने न होणारे MAC रँडमायझेशन"</string>
@@ -299,8 +300,8 @@
     <string name="private_dns_mode_provider" msgid="3619040641762557028">"खाजगी DNS पुरवठादार होस्टनाव"</string>
     <string name="private_dns_mode_provider_hostname_hint" msgid="6564868953748514595">"DNS पुरवठादाराचे होस्टनाव टाका"</string>
     <string name="private_dns_mode_provider_failure" msgid="8356259467861515108">"कनेक्ट करू शकलो नाही"</string>
-    <string name="wifi_display_certification_summary" msgid="8111151348106907513">"वायरलेस डिस्प्ले प्रमाणिकरणाचे पर्याय दाखवा"</string>
-    <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"वाय-फाय लॉगिंग स्‍तर वाढवा, वाय-फाय सिलेक्टरमध्‍ये प्रति SSID RSSI दर्शवा"</string>
+    <string name="wifi_display_certification_summary" msgid="8111151348106907513">"वायरलेस डिस्प्ले सर्टिफिकेशनचे पर्याय दाखवा"</string>
+    <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"वाय-फाय लॉगिंग स्‍तर वाढवा, वाय-फाय पिकरमध्‍ये प्रति SSID RSSI दर्शवा"</string>
     <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"बॅटरी जलदरीतीने संपण्यापासून रोखते आणि नेटवर्क परफॉर्मन्समध्ये सुधारणा करते"</string>
     <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"हा मोड सुरू केलेला असेल, तेव्हा हे डिव्हाइस MAC रँडमायझेशन सुरू केलेल्या नेटवर्कशी कनेक्ट होताना प्रत्येक वेळी त्याचा MAC अ‍ॅड्रेस बदलू शकतो."</string>
     <string name="wifi_metered_label" msgid="8737187690304098638">"मीटरने मोजलेले"</string>
@@ -326,7 +327,7 @@
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"विकास सेटिंग्जला अनुमती द्यायची?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"या सेटिंग्जचा हेतू फक्त विकास वापरासाठी आहे. त्यामुळे तुमचे डिव्हाइस आणि त्यावरील ॲप्लिकेशन ब्रेक होऊ शकतात किंवा नेहमीपेक्षा वेगळे वर्तन करू शकतात."</string>
     <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"USB वर अ‍ॅप्स पडताळून पहा"</string>
-    <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"हानिकारक वर्तनासाठी ADB/ADT द्वारे इंस्टॉल अ‍ॅप्स तपासा."</string>
+    <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"हानिकारक वर्तनासाठी ADB/ADT द्वारे इंस्टॉल केलेली अ‍ॅप्स तपासा."</string>
     <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"नावांशिवाय ब्‍लूटूथ डिव्‍हाइस (फक्‍त MAC अ‍ॅड्रेस) दाखवले जातील"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"रिमोट डिव्हाइसमध्ये सहन न होणारा मोठा व्हॉल्यूम किंवा नियंत्रणाचा अभाव यासारखी व्हॉल्यूमची समस्या असल्यास ब्लूटूथ संपूर्ण व्हॉल्यूम वैशिष्ट्य बंद करते."</string>
     <string name="bluetooth_enable_gabeldorsche_summary" msgid="2054730331770712629">"ब्लूटूथ गाबलडॉर्ष वैशिष्‍ट्य स्टॅक सुरू करा."</string>
@@ -342,7 +343,7 @@
     <string name="select_application" msgid="2543228890535466325">"ॲप्लिकेशन निवडा"</string>
     <string name="no_application" msgid="9038334538870247690">"काहीही नाही"</string>
     <string name="wait_for_debugger" msgid="7461199843335409809">"डीबगरची प्रतीक्षा करा"</string>
-    <string name="wait_for_debugger_summary" msgid="6846330006113363286">"डीबग केलेले ॲप्लिकेशन अंमलात आणण्यापूर्वी डीबगर संलग्न करण्याची प्रतीक्षा करतो"</string>
+    <string name="wait_for_debugger_summary" msgid="6846330006113363286">"डीबग केलेले ॲप्लिकेशन अमलात आणण्यापूर्वी डीबगर संलग्न करण्याची प्रतीक्षा करतो"</string>
     <string name="debug_input_category" msgid="7349460906970849771">"इनपुट"</string>
     <string name="debug_drawing_category" msgid="5066171112313666619">"ड्रॉइंग"</string>
     <string name="debug_hw_drawing_category" msgid="5830815169336975162">"हार्डवेअर अ‍ॅक्सिलरेटेड रेंडरिंग"</string>
@@ -354,10 +355,12 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"वर्तमान स्पर्श डेटा दर्शविणारे स्क्रीन ओव्हरले"</string>
     <string name="show_touches" msgid="8437666942161289025">"टॅप दाखवा"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"टॅपसाठी व्हिज्युअल फीडबॅक दाखवा"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"की प्रेस दाखवा"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"प्रत्यक्ष की प्रेससाठी व्हिज्युअल फीडबॅक दाखवा"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"सर्फेस अपडेट दाखवा"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"संपूर्ण विंडो सर्फेस अपडेट होतात तेव्हा ते फ्‍लॅश करा"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"व्‍ह्यू अपडेट दाखवा"</string>
-    <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"रेखांकित केल्‍यावर विंडोच्‍या आतील फ्लॅश व्‍ह्यू"</string>
+    <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"रेखांकित केल्‍यावर विंडोच्‍या आतील व्‍ह्यू फ्लॅश करा"</string>
     <string name="show_hw_layers_updates" msgid="5268370750002509767">"हार्डवेअर स्तर अपडेट दाखवा"</string>
     <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"हार्डवेअर स्तर अपडेट झाल्यावर ते हिरव्या रंगात फ्लॅश करा"</string>
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"GPU ओव्हरड्रॉ डीबग करा"</string>
@@ -366,7 +369,7 @@
     <string name="simulate_color_space" msgid="1206503300335835151">"रंग स्थान सिम्युलेट करा"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"OpenGL ट्रेस सुरू करा"</string>
     <string name="usb_audio_disable_routing" msgid="3367656923544254975">"USB ऑडिओ राउटिंग बंद करा"</string>
-    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"USB ऑडिओ उपकरणांवरील ऑटेमॅटिक राउटिंग बंद करा"</string>
+    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"USB ऑडिओ उपकरणांवरील ऑटोमॅटिक राउटिंग बंद करा"</string>
     <string name="debug_layout" msgid="1659216803043339741">"लेआउट सीमा दाखवा"</string>
     <string name="debug_layout_summary" msgid="8825829038287321978">"क्लिप सीमा, समास इत्यादी दर्शवा."</string>
     <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL लेआउट दिशानिर्देशाची सक्ती करा"</string>
@@ -376,7 +379,7 @@
     <string name="window_blurs" msgid="6831008984828425106">"विंडो पातळीवरील ब्लरना अनुमती द्या"</string>
     <string name="force_msaa" msgid="4081288296137775550">"4x MSAA ची सक्ती करा"</string>
     <string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 ॲप्समध्ये 4x MSAA सुरू करा"</string>
-    <string name="show_non_rect_clip" msgid="7499758654867881817">"आयताकृती नसलेले क्लिप ऑपरेशन डीबग करा"</string>
+    <string name="show_non_rect_clip" msgid="7499758654867881817">"आयताकृती नसलेली क्लिप ऑपरेशन डीबग करा"</string>
     <string name="track_frame_time" msgid="522674651937771106">"प्रोफाइल HWUI रेंडरिंग"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"GPU डीबग स्तर सुरू करा"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"डीबग अ‍ॅप्ससाठी GPU डीबग स्तर लोड करण्याची अनुमती द्या"</string>
@@ -390,16 +393,16 @@
     <string name="immediately_destroy_activities" msgid="1826287490705167403">"ॲक्टिव्हिटी ठेवू नका"</string>
     <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"वापरकर्त्याने प्रत्येक ॲक्टिव्हिटी सोडताच ती नष्ट करा"</string>
     <string name="app_process_limit_title" msgid="8361367869453043007">"बॅकग्राउंड प्रक्रिया मर्यादा"</string>
-    <string name="show_all_anrs" msgid="9160563836616468726">"बॅकग्राउंड ANR दाखवा"</string>
+    <string name="show_all_anrs" msgid="9160563836616468726">"बॅकग्राउंड ANRs दाखवा"</string>
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"बॅकग्राउंड अ‍ॅप्ससाठी अ‍ॅप प्रतिसाद देत नाही दाखवते"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"सूचना चॅनल चेतावण्या दाखवा"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"एखादे अ‍ॅप वैध चॅनलशिवाय सूचना पोस्ट करते तेव्हा स्क्रीनवर चेतावणी देते"</string>
-    <string name="force_allow_on_external" msgid="9187902444231637880">"बाह्यवर ॲप्सना अनुमती देण्याची सक्ती करा"</string>
+    <string name="force_allow_on_external" msgid="9187902444231637880">"बाह्य स्टोरेजवर अ‍ॅप्सना अनुमती देण्याची सक्ती करा"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"मॅनिफेस्‍ट मूल्ये काहीही असू देत, कोणत्याही अ‍ॅपला बाह्य स्टोरेजवर राइट करण्यासाठी पात्र बनविते"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"ॲक्टिव्हिटीचा आकार बदलण्यायोग्य होण्याची सक्ती करा"</string>
     <string name="force_resizable_activities_summary" msgid="2490382056981583062">"मॅनिफेस्‍ट मूल्ये काहीही असू देत, एकाहून अधिक विंडोसाठी सर्व अ‍ॅक्टिव्हिटीचा आकार बदलण्यायोग्य करा."</string>
-    <string name="enable_freeform_support" msgid="7599125687603914253">"freeform विंडो सुरू करा"</string>
-    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"प्रायोगिक मुक्तस्वरूपाच्या विंडोसाठी सपोर्ट सुरू करा."</string>
+    <string name="enable_freeform_support" msgid="7599125687603914253">"freeform windows सुरू करा"</string>
+    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"प्रायोगिक freeform windows साठी सपोर्ट सुरू करा."</string>
     <string name="desktop_mode" msgid="2389067840550544462">"डेस्कटॉप मोड"</string>
     <string name="local_backup_password_title" msgid="4631017948933578709">"डेस्कटॉप बॅकअप पासवर्ड"</string>
     <string name="local_backup_password_summary_none" msgid="7646898032616361714">"डेस्कटॉप पूर्ण बॅक अप सध्या संरक्षित नाहीत"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"जास्त वेळ."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"कमी वेळ."</string>
     <string name="cancel" msgid="5665114069455378395">"रद्द करा"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"पुढील"</string>
+    <string name="back" msgid="5554327870352703710">"मागे जा"</string>
+    <string name="save" msgid="3745809743277153149">"सेव्ह करा"</string>
     <string name="okay" msgid="949938843324579502">"ठीक आहे"</string>
     <string name="done" msgid="381184316122520313">"पूर्ण झाले"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"अलार्म आणि रिमाइंडर"</string>
@@ -547,13 +547,16 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"आत्ताच"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"हा फोन"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"हा टॅबलेट"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"डॉक स्पीकर"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"बाह्य डिव्हाइस"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"कनेक्ट केलेले डिव्हाइस"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"हा फोन"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"या डिव्हाइसवर प्ले करू शकत नाही"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"स्विच करण्यासाठी खाते अपग्रेड करा"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"येथे डाउनलोड प्ले केले जाऊ शकत नाही"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"येथे डाउनलोड प्ले केले जाऊ शकत नाहीत"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"जाहिरातीनंतर पुन्हा प्रयत्न करा"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"येथे प्ले करण्यासाठी डिव्हाइस सुरू करा"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"प्ले करण्यासाठी डिव्हाइस हे मंजुरी दिलेले नाही"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"डिव्हाइसला प्ले करण्यासाठी मंजुरी नाही"</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"हा मीडिया येथे प्ले करू शकत नाही"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"कनेक्‍ट करण्‍यात समस्‍या आली. डिव्हाइस बंद करा आणि नंतर सुरू करा"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"वायर असलेले ऑडिओ डिव्हाइस"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"वापरकर्ता"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"प्रतिबंधित प्रोफाईल"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"नवीन वापरकर्ता जोडायचा?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"अतिरिक्त वापरकर्ते तयार करून तुम्ही इतर लोकांसोबत हे डिव्हाइस शेअर करू शकता. प्रत्येक वापरकर्त्यास त्यांची स्वतःची स्पेस असते, जी ते अ‍ॅप्स, वॉलपेपर आणि यासारख्या गोष्टींनी कस्टमाइझ करू शकतात. वापरकर्ते प्रत्येकाला प्रभावित करणाऱ्या वाय-फाय सारख्या डिव्हाइस सेटिंग्ज अ‍ॅडजस्ट देखील करू शकतात.\n\nतुम्ही एक नवीन वापरकर्ता जोडता, तेव्हा त्या व्यक्तीला त्याची स्पेस सेट अप करण्याची आवश्यकता असते.\n\nकोणताही वापरकर्ता इतर सर्व वापरकर्त्यांसाठी अ‍ॅप अपडेट करू शकतो. अ‍ॅक्सेसिबिलिटी सेटिंग्ज आणि सेवा नवीन वापरकर्त्याला कदाचित ट्रान्सफर होणार नाहीत."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"तुम्ही एक नवीन वापरकर्ता जोडता तेव्हा, त्या व्यक्तीस त्यांचे स्थान सेट करण्याची आवश्यकता असते.\n\nकोणताही वापरकर्ता इतर सर्व वापरकर्त्यांसाठी अ‍ॅप्स अपडेट करू शकतो."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"अतिरिक्त वापरकर्ते तयार करून तुम्ही इतर लोकांसोबत हे डिव्हाइस शेअर करू शकता. प्रत्येक वापरकर्त्यास त्यांची स्वतःची स्पेस असते, जी ते अ‍ॅप्स, वॉलपेपर आणि यासारख्या गोष्टींनी कस्टमाइझ करू शकतात. वापरकर्ते प्रत्येकाला प्रभावित करणाऱ्या वाय-फाय सारख्या डिव्हाइस सेटिंग्ज अ‍ॅडजस्ट देखील करू शकतात.\n\nतुम्ही एक नवीन वापरकर्ता जोडता, तेव्हा त्या व्यक्तीला त्याची स्पेस सेट अप करण्याची आवश्यकता असते.\n\nकोणताही वापरकर्ता इतर सर्व वापरकर्त्यांसाठी अ‍ॅप्स अपडेट करू शकतो. अ‍ॅक्सेसिबिलिटी सेटिंग्ज आणि सेवा नवीन वापरकर्त्याला कदाचित ट्रान्सफर होणार नाहीत."</string>
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"तुम्ही एक नवीन वापरकर्ता जोडता, तेव्हा त्या व्यक्तीस त्यांची स्पेस सेट करण्याची आवश्यकता असते.\n\nकोणताही वापरकर्ता इतर सर्व वापरकर्त्यांसाठी अ‍ॅप्स अपडेट करू शकतो."</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"या वापरकर्त्याला ॲडमिन करायचे का?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"ॲडमिनकडे खास विशेषाधिकार आहेत जे इतर वापरकर्त्यांकडे नसतात. ॲडमिन सर्व वापरकर्ते व्यवस्थापित करू शकतो, हे डिव्हाइस अपडेट करू शकतो किंवा रीसेट करू शकतो, सेटिंग्जमध्ये सुधारणा करू शकतो, सर्व इंस्टॉल केलेली अ‍ॅप्स पाहू शकतो आणि इतरांसाठी ॲडमिनचे विशेषाधिकार मंजूर करू शकतो किंवा रद्द करू शकतो."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"ॲडमिन करा"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"आता वापरकर्ता सेट करायचा?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"तो वापरकर्ता डिव्हाइसजवळ आहे आणि त्याचे स्थान सेट करण्यासाठी उपलब्ध आहे याची खात्री करा"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"आता प्रोफाईल सेट करायचा?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"हे नवीन अतिथी सत्र सुरू करेल आणि सध्याच्या सत्रातील सर्व अ‍ॅप्स व डेटा हटवेल"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"अतिथी मोडमधून बाहेर पडायचे का?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"हे सध्याच्या अतिथी सत्रातील अ‍ॅप्स आणि डेटा हटवेल"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"होय, त्यांना ॲडमिन करा"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"नाही, त्यांना ॲडमिन करू नका"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"बाहेर पडा"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"अतिथी अ‍ॅक्टिव्हिटी सेव्ह करायची का?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"सध्याच्या सत्रातील अ‍ॅक्टिव्हिटी सेव्ह करू किंवा सर्व अ‍ॅप्स व डेटा हटवू शकता"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"वरती हलवा"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"नमूद केलेले नाही"</string>
+    <string name="neuter" msgid="2075249330106127310">"नपुसकलिंग"</string>
+    <string name="feminine" msgid="1529155595310784757">"स्त्रीलिंग"</string>
+    <string name="masculine" msgid="4653978041013996303">"पुल्लिंग"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ms/arrays.xml b/packages/SettingsLib/res/values-ms/arrays.xml
index 3ee7131..a159282 100644
--- a/packages/SettingsLib/res/values-ms/arrays.xml
+++ b/packages/SettingsLib/res/values-ms/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Sumber Audio"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index 2c3bb50..3f35079 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Akses SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Audio HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Audio HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Alat Bantu Dengar"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Disambungkan pada Alat Bantu Dengar"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Alat bantu pendengaran"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Disambungkan kepada alat bantu pendengaran"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Disambungkan kepada LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Disambungkan ke audio media"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Disambungkan ke audio telefon"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Gunakan untuk audio telefon"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Gunakan untuk pemindahan fail"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Gunakan untuk input"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Gunakan untuk Alat Bantu Dengar"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Gunakan untuk alat bantu pendengaran"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Gunakan untuk LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Gandingkan"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"JADIKAN PASANGAN"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Pilih profil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Peribadi"</string>
     <string name="category_work" msgid="4014193632325996115">"Tempat Kerja"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klon"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Pilihan pembangun"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Dayakan pilihan pembangun"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Tetapkan pilihan untuk pembangunan aplikasi"</string>
@@ -302,7 +303,7 @@
     <string name="wifi_display_certification_summary" msgid="8111151348106907513">"Tunjukkan pilihan untuk pensijilan paparan wayarles"</string>
     <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Tingkatkan tahap pengelogan Wi-Fi, tunjuk setiap SSID RSSI dalam Pemilih Wi-Fi"</string>
     <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"Mengurangkan penyusutan bateri &amp; meningkatkan prestasi rangkaian"</string>
-    <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"Apabila mod ini didayakan, alamat MAC peranti ini mungkin berubah pada setiap kali peranti menyambung kepada rangkaian yang telah mendayakan perawakan MAC."</string>
+    <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"Apabila mod ini didayakan, alamat MAC peranti ini mungkin berubah setiap kali peranti menyambung kepada rangkaian yang telah mendayakan perawakan MAC."</string>
     <string name="wifi_metered_label" msgid="8737187690304098638">"Bermeter"</string>
     <string name="wifi_unmetered_label" msgid="6174142840934095093">"Tidak bermeter"</string>
     <string name="select_logd_size_title" msgid="1604578195914595173">"Saiz penimbal pengelog"</string>
@@ -328,7 +329,7 @@
     <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"Sahkan apl melalui USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"Semak apl yang dipasang melalui ADB/ADT untuk tingkah laku yang berbahaya."</string>
     <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"Peranti Bluetooth tanpa nama (alamat MAC sahaja) akan dipaparkan"</string>
-    <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"Lumpuhkan ciri kelantangan mutlak Bluetooth dalam kes isu kelantangan menggunakan peranti kawalan jauh seperti kelantangan yang sangat kuat atau tidak dapat mengawal."</string>
+    <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"Lumpuhkan ciri kelantangan mutlak Bluetooth jika ada masalah kelantangan pada peranti kawalan jauh seperti kelantangan yang sangat kuat atau tidak terkawal."</string>
     <string name="bluetooth_enable_gabeldorsche_summary" msgid="2054730331770712629">"Mendayakan tindanan ciri Gabeldorche Bluetooth."</string>
     <string name="enhanced_connectivity_summary" msgid="1576414159820676330">"Mendayakan ciri Kesambungan Dipertingkat"</string>
     <string name="enable_terminal_title" msgid="3834790541986303654">"Terminal setempat"</string>
@@ -341,7 +342,7 @@
     <string name="debug_app_set" msgid="6599535090477753651">"Menyahpepijat aplikasi: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="select_application" msgid="2543228890535466325">"Pilih aplikasi"</string>
     <string name="no_application" msgid="9038334538870247690">"Tiada apa-apa"</string>
-    <string name="wait_for_debugger" msgid="7461199843335409809">"Nantikan penyahpepijat"</string>
+    <string name="wait_for_debugger" msgid="7461199843335409809">"Tunggu penyahpepijat"</string>
     <string name="wait_for_debugger_summary" msgid="6846330006113363286">"Menanti penyahpepijat sebelum aplikasi melaksana"</string>
     <string name="debug_input_category" msgid="7349460906970849771">"Input"</string>
     <string name="debug_drawing_category" msgid="5066171112313666619">"Lukisan"</string>
@@ -354,9 +355,11 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Tindihan skrin menunjukkan data sentuh semasa"</string>
     <string name="show_touches" msgid="8437666942161289025">"Tunjukkan ketikan"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Tunjukkan maklum balas visual untuk ketikan"</string>
-    <string name="show_screen_updates" msgid="2078782895825535494">"Tunjuk kemas kini permukaan"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Tunjukkan tekanan kekunci"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Tunjukkan maklum balas visual untuk tekanan kekunci fizikal"</string>
+    <string name="show_screen_updates" msgid="2078782895825535494">"Tunjuk kemaskinian permukaan"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Denyar permukaan tetingkap apabila dikemas kini"</string>
-    <string name="show_hw_screen_updates" msgid="2021286231267747506">"Papar lihat kemas kini"</string>
+    <string name="show_hw_screen_updates" msgid="2021286231267747506">"Tunjuk kemaskinian paparan"</string>
     <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"Denyar paparan dalam tetingkap apabila dilukis"</string>
     <string name="show_hw_layers_updates" msgid="5268370750002509767">"Tunjukkan kemas kini perkakasan"</string>
     <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"Denyar hijau lapisan perkakasan yang dikemas kini"</string>
@@ -378,7 +381,7 @@
     <string name="force_msaa_summary" msgid="9070437493586769500">"Dayakan 4x MSAA dalam apl OpenGL ES 2.0"</string>
     <string name="show_non_rect_clip" msgid="7499758654867881817">"Nyahpepijat operasi keratan bukan segi empat tepat"</string>
     <string name="track_frame_time" msgid="522674651937771106">"Pemaparan HWUI profil"</string>
-    <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Dayakan lepasan nyahpepijat GPU"</string>
+    <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Dayakan lapisan nyahpepijat GPU"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Benarkan pemuatan lapisan nyahpepijat GPU untuk apl penyahpepijatan"</string>
     <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Dayakan pengelogan vendor berjela"</string>
     <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Sertakan log tambahan vendor khusus peranti dalam laporan pepijat, yang mungkin mengandungi maklumat peribadi, menggunakan lebih banyak kuasa bateri dan/atau menggunakan lebih banyak storan."</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Lagi masa."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kurang masa."</string>
     <string name="cancel" msgid="5665114069455378395">"Batal"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Seterusnya"</string>
+    <string name="back" msgid="5554327870352703710">"Kembali"</string>
+    <string name="save" msgid="3745809743277153149">"Simpan"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Selesai"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Penggera dan peringatan"</string>
@@ -547,9 +547,12 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Sebentar tadi"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Telefon ini"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Tablet ini"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Pembesar suara dok"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Peranti Luar"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Peranti yang disambungkan"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Telefon ini"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Tidak dapat dimainkan pada peranti ini"</string>
-    <string name="media_output_status_require_premium" msgid="8411255800047014822">"Tingkatkan akaun untuk bertukar"</string>
+    <string name="media_output_status_require_premium" msgid="8411255800047014822">"Tingkatkan akaun untuk beralih"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Tidak dapat memainkan muat turun di sini"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Cuba lagi selepas iklan"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Bangkitkan peranti untuk main di sini"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Pengguna"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Profil terhad"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Tambah pengguna baharu?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Anda boleh berkongsi peranti ini dengan orang lain dengan membuat pengguna tambahan. Setiap pengguna mempunyai ruang mereka sendiri, yang boleh diperibadikan dengan apl, kertas dinding dan sebagainya. Pengguna juga boleh melaraskan tetapan peranti seperti Wi-Fi yang akan memberi kesan kepada semua orang.\n\nApabila anda menambah pengguna baharu, orang itu perlu menyediakan ruang mereka.\n\nMana-mana pengguna boleh mengemas kini apl untuk semua pengguna lain. Tetapan dan perkhidmatan kebolehaksesan tidak boleh dipindahkan kepada pengguna baharu."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"Apabila anda menambah pengguna baharu, orang itu perlu menyediakan ruang mereka.\n\nMana-mana pengguna boleh mengemas kini apl untuk semua pengguna lain."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Anda boleh berkongsi peranti ini dengan orang lain dengan membuat pengguna tambahan. Setiap pengguna mempunyai ruang mereka sendiri, yang boleh diperibadikan dengan apl, kertas dinding dan sebagainya. Pengguna juga boleh melaraskan tetapan peranti seperti Wi-Fi yang akan memberi kesan kepada semua orang.\n\nApabila anda menambah pengguna baharu, orang itu perlu menyediakan ruang mereka.\n\nMana-mana pengguna boleh mengemaskinikan apl untuk semua pengguna lain. Tetapan dan perkhidmatan kebolehaksesan tidak boleh dipindahkan kepada pengguna baharu."</string>
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"Apabila anda menambah pengguna baharu, orang itu perlu menyediakan ruangnya sendiri.\n\nMana-mana pengguna boleh mengemaskinikan apl untuk semua pengguna lain."</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Jadikan pengguna ini pentadbir?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Pentadbir mempunyai keistimewaan khas yang tiada pada pengguna lain. Pentadbir boleh mengurus semua pengguna, mengemaskinikan atau menetapkan semula peranti ini, mengubah suai tetapan, melihat semua apl yang telah dipasang dan memberikan atau membatalkan keistimewaan pentadbir untuk pengguna lain."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Jadikan pentadbir"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Sediakan pengguna sekarang?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Pastikan orang itu tersedia untuk mengambil peranti dan menyediakan ruangan"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Sediakan profil sekarang?"</string>
@@ -598,7 +598,7 @@
     <string name="user_need_lock_message" msgid="4311424336209509301">"Sebelum anda boleh membuat profil yang terhad, anda perlu menyediakan kunci skrin untuk melindungi apl dan data peribadi anda."</string>
     <string name="user_set_lock_button" msgid="1427128184982594856">"Tetapkan kunci"</string>
     <string name="user_switch_to_user" msgid="6975428297154968543">"Tukar kepada <xliff:g id="USER_NAME">%s</xliff:g>"</string>
-    <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"Mencipta pengguna baharu…"</string>
+    <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"Membuat pengguna baharu…"</string>
     <string name="creating_new_guest_dialog_message" msgid="1114905602181350690">"Membuat tetamu baharu…"</string>
     <string name="add_user_failed" msgid="4809887794313944872">"Gagal membuat pengguna baharu"</string>
     <string name="add_guest_failed" msgid="8074548434469843443">"Gagal membuat tetamu baharu"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Ya, jadikan mereka pentadbir"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Tidak, jangan jadikan mereka pentadbir"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Alih ke atas"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Tidak dinyatakan"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neuter"</string>
+    <string name="feminine" msgid="1529155595310784757">"Feminin"</string>
+    <string name="masculine" msgid="4653978041013996303">"Maskulin"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-my/arrays.xml b/packages/SettingsLib/res/values-my/arrays.xml
index 9c5ee69..e795689 100644
--- a/packages/SettingsLib/res/values-my/arrays.xml
+++ b/packages/SettingsLib/res/values-my/arrays.xml
@@ -75,7 +75,7 @@
     <item msgid="1051534112762023603">"အပြည့်ဖယ်ရှားရန်"</item>
   </string-array>
   <string-array name="bluetooth_avrcp_versions">
-    <item msgid="6603880723315236832">"AVRCP 1.5 (မူလ)"</item>
+    <item msgid="6603880723315236832">"AVRCP 1.5 (မူရင်း)"</item>
     <item msgid="1637054408779685086">"AVRCP 1.3"</item>
     <item msgid="5896162189744596291">"AVRCP 1.4"</item>
     <item msgid="7556896992111771426">"AVRCP 1.6"</item>
@@ -200,7 +200,7 @@
   </string-array>
   <string-array name="select_logpersist_summaries">
     <item msgid="97587758561106269">"ပိတ်"</item>
-    <item msgid="7126170197336963369">"မှတ်တမ်းသိမ်းဆည်းရန် လျာထားချက်များ အားလုံး"</item>
+    <item msgid="7126170197336963369">"မှတ်တမ်းကြားခံနယ်အားလုံး"</item>
     <item msgid="7167543126036181392">"ရေဒီယို မှတ်တမ်းသိမ်းဆည်းရန်လျာထားချက်မှလွဲ၍ အားလုံး"</item>
     <item msgid="5135340178556563979">"ကာနယ်မှတ်တမ်းသိမ်းဆည်းရန် လျာထားချက်သာ"</item>
   </string-array>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"အသံ ရင်းမြစ်"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index e09afe5..9cc6051 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM အသုံးပြုခြင်း"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD အသံ- <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD အသံ"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"နားကြားကိရိယာ"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE အသံ"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"နားကြားကိရိယာနှင့် ချိတ်ဆက်ပြီးပါပြီ"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"နားကြားကိရိယာ"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"နားကြားကိရိယာနှင့် ချိတ်ဆက်ပြီးပါပြီ"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE အသံနှင့် ချိတ်ဆက်ထားသည်"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"မီဒီယာအသံအား ချိတ်ဆက်ရန်"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"ဖုန်းအသံအား ချိတ်ဆက်ရန်"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"ဖုန်းအသံအားအသုံးပြုရန်"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ဖိုင်လွဲပြောင်းရန်အတွက်အသုံးပြုရန်"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ထည့်သွင်းရန်အသုံးပြုသည်"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"နားကြားကိရိယာအတွက် အသုံးပြုသည်"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"နားကြားကိရိယာအတွက် အသုံးပြုသည်"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO အတွက် သုံးသည်"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"တွဲချိတ်ရန်"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"တွဲချိတ်ရန်"</string>
@@ -213,8 +213,9 @@
     <item msgid="6946761421234586000">"၄၀၀%"</item>
   </string-array>
     <string name="choose_profile" msgid="343803890897657450">"ပရိုဖိုင်ကို ရွေးရန်"</string>
-    <string name="category_personal" msgid="6236798763159385225">"ကိုယ်ရေး"</string>
+    <string name="category_personal" msgid="6236798763159385225">"ကိုယ်ပိုင်"</string>
     <string name="category_work" msgid="4014193632325996115">"အလုပ်"</string>
+    <string name="category_clone" msgid="1554511758987195974">"ပုံတူပွားရန်"</string>
     <string name="development_settings_title" msgid="140296922921597393">"ဆော့ဝဲလ်ရေးသူ ရွေးစရာများ"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"ဆော့ဖ်ဝဲရေးသူအတွက် ရွေးစရာများကို ဖွင့်ပါ"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"အပလီကေးရှင်းတိုးတက်မှုအတွက် ရွေးချယ်မှုကိုသတ်မှတ်သည်"</string>
@@ -263,8 +264,8 @@
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"အစပြုခြင်းကိရိယာအား သော့ဖွင့်ရန် ခွင့်ပြုမည်"</string>
     <string name="confirm_enable_oem_unlock_title" msgid="8249318129774367535">"OEM သော့ဖွင့်ခြင်း ခွင့်ပြုမလား?"</string>
     <string name="confirm_enable_oem_unlock_text" msgid="854131050791011970">"သတိပေးချက်: ဤချိန်ညှိချက်ဖွင့်ထားလျှင်၊ ဤစက်ပစ္စည်းပေါ်တွင် စက်ပစ္စည်းကာကွယ်သည့် အထူးပြုလုပ်ချက် အလုပ်လုပ်မည်မဟုတ်ပါ။"</string>
-    <string name="mock_location_app" msgid="6269380172542248304">"တည်နေရာအတုပြု အက်ပ်ရွေးရန်"</string>
-    <string name="mock_location_app_not_set" msgid="6972032787262831155">"တည်နေရာအတုပြု အက်ပ်သတ်မှတ်ထားခြင်းမရှိပါ"</string>
+    <string name="mock_location_app" msgid="6269380172542248304">"တည်နေရာဖန်တီးသည့် အက်ပ်ရွေးရန်"</string>
+    <string name="mock_location_app_not_set" msgid="6972032787262831155">"တည်နေရာဖန်တီးသည့်အက်ပ် သတ်မှတ်ထားခြင်းမရှိပါ"</string>
     <string name="mock_location_app_set" msgid="4706722469342913843">"တည်နေရာအတုပြ အက်ပ်- <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="6829757985772659599">"ချိတ်ဆက်ဆောင်ရွက်ခြင်း"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"ကြိုးမဲ့ပြသမှု အသိအမှတ်ပြုလက်မှတ်"</string>
@@ -299,7 +300,7 @@
     <string name="private_dns_mode_provider" msgid="3619040641762557028">"သီးသန့် DNS ဝန်ဆောင်မှုပေးသူအမည်"</string>
     <string name="private_dns_mode_provider_hostname_hint" msgid="6564868953748514595">"DNS ဝန်ဆောင်ပေးသူအမည်ကို ထည့်ပါ"</string>
     <string name="private_dns_mode_provider_failure" msgid="8356259467861515108">"ချိတ်ဆက်၍ မရပါ"</string>
-    <string name="wifi_display_certification_summary" msgid="8111151348106907513">"ကြိုးမဲ့ အခင်းအကျင်း အသိအမှတ်ပြုလက်မှတ်အတွက် ရွေးချယ်စရာများပြရန်"</string>
+    <string name="wifi_display_certification_summary" msgid="8111151348106907513">"ကြိုးမဲ့ပြသမှု အသိအမှတ်ပြုလက်မှတ်အတွက် ရွေးချယ်စရာများပြသည်"</string>
     <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Wi‑Fi မှတ်တမ်းတင်ခြင်း နှုန်းအားမြင့်ကာ၊ Wi‑Fi ရွေးရာတွင် SSID RSSI ဖြင့်ပြပါ"</string>
     <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"ဘက်ထရီအသုံးပြုမှု လျှော့ချပြီး ကွန်ရက်စွမ်းဆောင်ရည် ပိုမိုကောင်းမွန်သည်"</string>
     <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"ဤမုဒ်ကို ဖွင့်ထားသည့်အခါ MAC ကျပန်းပြုလုပ်ထားသည့် ကွန်ရက်သို့ ချိတ်ဆက်လိုက်သည့်အခါတိုင်း ဤစက်၏ MAC လိပ်စာ ပြောင်းသွားနိုင်သည်။"</string>
@@ -315,7 +316,7 @@
     <string name="select_usb_configuration_dialog_title" msgid="3579567144722589237">"USB စီစဉ်ဖွဲ့စည်းမှု ရွေးရန်"</string>
     <string name="allow_mock_location" msgid="2102650981552527884">"ပုံစံတုတည်နေရာများကို ခွင့်ပြုရန်"</string>
     <string name="allow_mock_location_summary" msgid="179780881081354579">"ပုံစံတုတည်နေရာများကို ခွင့်ပြုရန်"</string>
-    <string name="debug_view_attributes" msgid="3539609843984208216">"ရည်ညွှန်းချက်စိစစ်ခြင်း မြင်ကွင်း"</string>
+    <string name="debug_view_attributes" msgid="3539609843984208216">"ရည်ညွှန်းချက်စိစစ်ခြင်း မြင်ကွင်းဖွင့်ရန်"</string>
     <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Wi-Fi ဖွင့်ထားချိန်တွင်လည်း မိုဘိုင်းဒေတာ အမြဲတမ်းဖွင့်မည် (မြန်ဆန်သည့် ကွန်ရက် ပြောင်းခြင်းအတွက်)။"</string>
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"အရှိန်မြှင့်တင်ရန် မိုဘိုင်းသုံး၍ ချိတ်ဆက်သည့် စက်ပစ္စည်းကို ရနိုင်လျှင် သုံးပါ"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"USB ပြသနာရှာခြင်း ခွင့်ပြုပါမလား?"</string>
@@ -328,7 +329,7 @@
     <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"USB ဖြင့် အက်ပ်များစိစစ်ရန်"</string>
     <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"ADB/ADT မှတစ်ဆင့် ထည့်သွင်းသော အက်ပ်များ အန္တရာယ်ဖြစ်နိုင်ခြင်း ရှိမရှိ စစ်ဆေးသည်။"</string>
     <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"အမည်မရှိသော (MAC လိပ်စာများသာပါသော) ဘလူးတုသ်စက်ပစ္စည်းများကို ပြသပါမည်"</string>
-    <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"ချိတ်ဆက်ထားသည့် ကိရိယာတွင် လက်မခံနိုင်လောက်အောင် ဆူညံ သို့မဟုတ် ထိန်းညှိမရနိုင်သော အသံပိုင်းပြဿနာ ရှိခဲ့လျှင် ဘလူးတုသ် ပကတိ အသံနှုန်းကို ပိတ်ပါ။"</string>
+    <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"ချိတ်ဆက်ထားသည့် ကိရိယာတွင် လက်မခံနိုင်လောက်အောင် ဆူညံ (သို့) ထိန်းညှိမရနိုင်သော အသံပိုင်းပြဿနာ ရှိခဲ့လျှင် ဘလူးတုသ် ပကတိ အသံနှုန်းကို ပိတ်သည်။"</string>
     <string name="bluetooth_enable_gabeldorsche_summary" msgid="2054730331770712629">"ဘလူးတုသ် Gabeldorsche လုပ်ဆောင်ချက်အပိုင်းကို ဖွင့်သည်။"</string>
     <string name="enhanced_connectivity_summary" msgid="1576414159820676330">"အရည်အသွေးမြှင့်တင်ထားသော ချိတ်ဆက်နိုင်သည့် ဝန်ဆောင်မှုကို ဖွင့်ပါ။"</string>
     <string name="enable_terminal_title" msgid="3834790541986303654">"လိုကယ်တာမီနယ်"</string>
@@ -341,7 +342,7 @@
     <string name="debug_app_set" msgid="6599535090477753651">"အမှားရှာသည့်အပလီကေးရှင်း: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="select_application" msgid="2543228890535466325">"အပလီကေးရှင်းရွေးချယ်ရန်"</string>
     <string name="no_application" msgid="9038334538870247690">"တခုမှမရှိ"</string>
-    <string name="wait_for_debugger" msgid="7461199843335409809">"အမှားရှာဖွေ ဖယ်ရှားချက်ကို စောင့်ရန်"</string>
+    <string name="wait_for_debugger" msgid="7461199843335409809">"အမှားရှာပြင်ကိရိယာကို စောင့်ရန်"</string>
     <string name="wait_for_debugger_summary" msgid="6846330006113363286">"အမှားပြင်ဆင်ရှာဖွေသည့် အပလီကေးရှင်းသည် လုပ်ငန်းမစမီ တွဲဖက်ရန် အမှားရှာဖွေမည့်သူကို စောင့်နေသည်။"</string>
     <string name="debug_input_category" msgid="7349460906970849771">"ထည့်သွင်းရန်"</string>
     <string name="debug_drawing_category" msgid="5066171112313666619">"ရေးဆွဲခြင်း"</string>
@@ -353,34 +354,36 @@
     <string name="pointer_location" msgid="7516929526199520173">"မြား၏တည်နေရာ"</string>
     <string name="pointer_location_summary" msgid="957120116989798464">"လက်ရှိထိတွေ့မှုဒေတာကို ဖန်သားပေါ်တွင်ထပ်၍ ပြသသည်"</string>
     <string name="show_touches" msgid="8437666942161289025">"တို့ခြင်းများကို ပြပါ"</string>
-    <string name="show_touches_summary" msgid="3692861665994502193">"တို့ခြင်းများအတွက် အမြင်ဖြင့် တုံ့ပြန်မှုပြပါ"</string>
-    <string name="show_screen_updates" msgid="2078782895825535494">"မျက်နှာပြင်အပ်ဒိတ်များ ပြခြင်း"</string>
+    <string name="show_touches_summary" msgid="3692861665994502193">"တို့ခြင်းများအတွက် အမြင်ဖြင့် တုံ့ပြန်မှုပြသည်"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"ကီးနှိပ်မှုများ ပြပါ"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"ပကတိကီးနှိပ်မှုများအတွက် ရုပ်မြင်အကြံပြုချက် ပြပါ"</string>
+    <string name="show_screen_updates" msgid="2078782895825535494">"မျက်နှာပြင်အပ်ဒိတ်ပြရန်"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"အပ်ဒိတ်လုပ်စဉ် ဝင်းဒိုးမျက်နှာပြင်တွင် အချက်ပြရန်"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"မြင်ကွင်းအပ်ဒိတ်များ ပြခြင်း"</string>
     <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"ပုံဆွဲစဉ် ဝင်းဒိုးအတွင်း တဒင်္ဂပြပါ"</string>
     <string name="show_hw_layers_updates" msgid="5268370750002509767">"ဟာ့ဒ်ဝဲအလွှာ အပ်ဒိတ်များပြခြင်း"</string>
     <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"အပ်ဒိတ်လုပ်ချိန် ဟာ့ဒ်ဝဲအလွှာများ အစိမ်းရောင်ပြပါ"</string>
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"GPU ပိုသုံးစွဲမှု ပြင်ဆင်ခြင်း"</string>
-    <string name="disable_overlays" msgid="4206590799671557143">"HW ထပ်ဆင့်ခြင်းများပိတ်ခြင်း"</string>
+    <string name="disable_overlays" msgid="4206590799671557143">"HW ထပ်ပိုးခြင်းများ ပိတ်ရန်"</string>
     <string name="disable_overlays_summary" msgid="1954852414363338166">"GPU ကိုမျက်နှာပြင်ခင်းကျင်းရာတွင် အမြဲသုံးပါ။"</string>
-    <string name="simulate_color_space" msgid="1206503300335835151">"အရောင်စနစ် ပြင်ဆင်ခြင်း"</string>
+    <string name="simulate_color_space" msgid="1206503300335835151">"အရောင်စနစ် ပြောင်းရန်"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"OpenGL ခြေရာခံခြင်းဖွင့်ပါ။"</string>
     <string name="usb_audio_disable_routing" msgid="3367656923544254975">"USB အသံလမ်းကြောင်း ပိတ်ခြင်း"</string>
     <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"USB အသံစက်ပစ္စည်းများသို့ အလိုအလျောက် ချိတ်ဆက်ခြင်းကို ပိတ်ရန်"</string>
-    <string name="debug_layout" msgid="1659216803043339741">"ပြကွက်၏ဘောင်များ ပြခြင်း"</string>
+    <string name="debug_layout" msgid="1659216803043339741">"ပြကွက်၏ဘောင်များ ပြရန်"</string>
     <string name="debug_layout_summary" msgid="8825829038287321978">"ဖြတ်ပိုင်းအနားသတ်များ၊ အနားများ စသဖြင့် ပြပါ။"</string>
     <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL အပြင်အဆင်အတိုင်း ဖြစ်စေခြင်း"</string>
     <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"ဘာသာစကားအားလုံးအတွက် RTL အပြင်အဆင်အတိုင်း ဖြစ်စေသည်"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"လမ်းညွှန်ဘား အကြည်"</string>
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"လမ်းညွှန်ဘား၏ နောက်ခံအရောင်ကို မူရင်းအားဖြင့် အကြည်ဖြစ်အောင် လုပ်သည်"</string>
     <string name="window_blurs" msgid="6831008984828425106">"ဝင်းဒိုးအဆင့် မှုန်ဝါးမှု ခွင့်ပြုရန်"</string>
-    <string name="force_msaa" msgid="4081288296137775550">"4x MSAA မဖြစ်မနေဖွင့်ခြင်း"</string>
+    <string name="force_msaa" msgid="4081288296137775550">"4x MSAA မဖြစ်မနေဖွင့်ရန်"</string>
     <string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 အက်ပ်များတွင် 4x MSAA ဖွင့်သည်"</string>
-    <string name="show_non_rect_clip" msgid="7499758654867881817">"စတုဂံပုံမကျသောဖြတ်ပိုင်း လုပ်ဆောင်ချက်များကို အမှားဖယ်ရှားသည်"</string>
+    <string name="show_non_rect_clip" msgid="7499758654867881817">"စတုဂံပုံမကျသော ဖြတ်ပိုင်း လုပ်ဆောင်ချက်များကို အမှားဖယ်ရှားရန်"</string>
     <string name="track_frame_time" msgid="522674651937771106">"HWUI ပရိုဖိုင် ဆောင်ရွက်ခြင်း"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"GPU အမှားရှာအလွှာဖွင့်ရန်"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"အမှားရှာအက်ပ်များအတွက် GPU အမှားရှာအလွှာများ ထည့်သွင်းခွင့်ပြုပါ"</string>
-    <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"verbose vendor မှတ်တမ်းဖွင့်ရန်"</string>
+    <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"အကျယ်ရှင်းလင်းချက်ပံ့ပိုးသူ မှတ်တမ်းဖွင့်ရန်"</string>
     <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"ချွတ်ယွင်းမှု အစီရင်ခံချက်တွင် စက်ပစ္စည်းအလိုက် ထုတ်လုပ်သူမှတ်တမ်းများကို ထည့်သွင်းခြင်းဖြင့် ကိုယ်ရေးကိုယ်တာ အချက်အလက်များ ပါဝင်ခြင်း၊ ဘက်ထရီပိုသုံးခြင်း နှင့်/သို့မဟုတ် သိုလှောင်ခန်းပိုသုံးခြင်းတို့ ဖြစ်စေနိုင်သည်။"</string>
     <string name="window_animation_scale_title" msgid="5236381298376812508">"လှုပ်ရှားသက်ဝင်ပုံစကေး"</string>
     <string name="transition_animation_scale_title" msgid="1278477690695439337">"သက်ဝင်အသွင်ပြောင်းခြင်း"</string>
@@ -395,11 +398,11 @@
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"ချန်နယ်သတိပေးချက်များပြရန်"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"ချန်နယ်မရှိဘဲ အကြောင်းကြားလျှင် စကရင်တွင်သတိပေးသည်"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"ပြင်ပစက်တွင် အက်ပ်များခွင့်ပြုရန်"</string>
-    <string name="force_allow_on_external_summary" msgid="8525425782530728238">"တိကျစွာ သတ်မှတ်ထားသည့်တန်ဖိုးများရှိသော်လည်း၊ ပြင်ပသိုလှောင်ခန်းများသို့ မည်သည့်အက်ပ်ကိုမဆို ဝင်ရောက်ခွင့်ပြုပါ"</string>
+    <string name="force_allow_on_external_summary" msgid="8525425782530728238">"သတ်မှတ်တန်ဖိုးများ မည်သို့ပင်ရှိစေ ပြင်ပသိုလှောင်ခန်းများသို့ မည်သည့်အက်ပ်ကိုမဆို ဝင်ရောက်ခွင့်ပြုသည်"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"လုပ်ဆောင်ချက်များ အရွယ်ပြောင်းနိုင်ခြင်း"</string>
     <string name="force_resizable_activities_summary" msgid="2490382056981583062">"သတ်မှတ်တန်ဖိုး မည်သို့ပင်ရှိစေ ဝင်းဒိုးများ၏ လုပ်ဆောင်မှုအားလုံးကို အရွယ်အစားပြင်သည်။"</string>
-    <string name="enable_freeform_support" msgid="7599125687603914253">"ရွှေ့နိုင်ပြင်နိုင်သော ဝင်းဒိုးများ ဖွင့်ရန်"</string>
-    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"ပုံစံမျိုးစုံဝင်းဒိုးများ စမ်းသပ်မှုအတွက် အထောက်အပံ့ကို ဖွင့်ပါ"</string>
+    <string name="enable_freeform_support" msgid="7599125687603914253">"ပုံစံမျိုးစုံ ဝင်းဒိုးများ ဖွင့်ရန်"</string>
+    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"ပုံစံမျိုးစုံဝင်းဒိုးများ စမ်းသပ်ခြင်းအတွက် ပံ့ပိုးမှုကို ဖွင့်သည်"</string>
     <string name="desktop_mode" msgid="2389067840550544462">"ဒက်စ်တော့မုဒ်"</string>
     <string name="local_backup_password_title" msgid="4631017948933578709">"ဒက်စ်တော့ အရန်စကားဝှက်"</string>
     <string name="local_backup_password_summary_none" msgid="7646898032616361714">"ဒက်စ်တော့ အရန်သိမ်းဆည်းခြင်းအားလုံးကို လောလောဆယ် ကာကွယ်မထားပါ"</string>
@@ -440,7 +443,7 @@
     <string name="daltonizer_mode_deuteranomaly" msgid="3507284319584683963">"Deuteranomaly (အနီ-အစိမ်း)"</string>
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"Protanomaly (အနီ-အစိမ်း)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"Tritanomaly (အပြာ-အဝါ)"</string>
-    <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"အရောင်ပြင်ဆင်မှု"</string>
+    <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"အရောင်ပြင်ခြင်း"</string>
     <string name="accessibility_display_daltonizer_preference_subtitle" msgid="1522101114585266455">"အရောင် အမှန်ပြင်ခြင်းသည် အောက်ပါတို့အတွက် အသုံးဝင်နိုင်သည်-&lt;br/&gt; &lt;ol&gt; &lt;li&gt;&amp;nbsp;အရောင်များကို ပိုမိုမှန်ကန်စွာ ကြည့်ရှုခြင်း&lt;/li&gt; &lt;li&gt;&amp;nbsp;အာရုံစိုက်နိုင်ရန် အရောင်များ ဖယ်ရှားခြင်း&lt;/li&gt; &lt;/ol&gt;"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"<xliff:g id="TITLE">%1$s</xliff:g> မှ ကျော်၍ လုပ်ထားသည်။"</string>
     <string name="power_remaining_settings_home_page" msgid="4885165789445462557">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> - <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string>
@@ -468,7 +471,7 @@
     <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="4374784375644214578">"မကြာမီ စက်ပိတ်သွားနိုင်သည် (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string>
     <string name="power_charging" msgid="6727132649743436802">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string>
     <string name="power_remaining_charging_duration_only" msgid="8085099012811384899">"အားပြည့်ရန် <xliff:g id="TIME">%1$s</xliff:g> လိုသည်"</string>
-    <string name="power_charging_duration" msgid="6127154952524919719">"အားပြည့်ရန် <xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> လိုသည်"</string>
+    <string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - အားပြည့်ရန် <xliff:g id="TIME">%2$s</xliff:g> လိုသည်"</string>
     <string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - အားသွင်းခြင်းကို အကောင်းဆုံးပြင်ဆင်ထားသည်"</string>
     <string name="power_charging_future_paused" msgid="4730177778538118032">"<xliff:g id="LEVEL">%1$s</xliff:g> - အားသွင်းခြင်းကို အကောင်းဆုံးပြင်ဆင်ထားသည်"</string>
     <string name="battery_info_status_unknown" msgid="268625384868401114">"မသိ"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"အချိန်တိုးရန်။"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"အချိန်လျှော့ရန်။"</string>
     <string name="cancel" msgid="5665114069455378395">"မလုပ်တော့"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"ရှေ့သို့"</string>
+    <string name="back" msgid="5554327870352703710">"နောက်သို့"</string>
+    <string name="save" msgid="3745809743277153149">"သိမ်းရန်"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"ပြီးပြီ"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"နှိုးစက်နှင့် သတိပေးချက်များ"</string>
@@ -547,12 +547,15 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"ယခုလေးတင်"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"ဤဖုန်း"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"ဤတက်ဘလက်"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"အထိုင် စပီကာ"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"ပြင်ပစက်"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"ချိတ်ဆက်ကိရိယာ"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"ဤဖုန်း"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"ဤစက်ပစ္စည်းတွင် ဖွင့်၍မရပါ"</string>
-    <string name="media_output_status_require_premium" msgid="8411255800047014822">"ပြောင်းရန်အကောင့်ကို အဆင့်မြှင့်ပါ"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"ဤနေရာတွင် ဒေါင်းလုဒ်များကို ဖွင့်၍မရပါ"</string>
+    <string name="media_output_status_require_premium" msgid="8411255800047014822">"ပြောင်းရန် အကောင့်အဆင့်ကိုမြှင့်ပါ"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"ဤနေရာတွင် ဒေါင်းလုဒ်များ ဖွင့်မရပါ"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"ကြော်ငြာအပြီးတွင် ထပ်စမ်းကြည့်ပါ"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"ဤနေရာတွင်ဖွင့်ရန် စက်ပစ္စည်းကိုနှိုးပါ"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"ဒီမှာဖွင့်ရန် စက်ပစ္စည်းကိုနှိုးပါ"</string>
     <string name="media_output_status_unauthorized" msgid="5880222828273853838">"စက်ပစ္စည်းက ဖွင့်ခွင့်မပြုပါ"</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"ဤမီဒီယာကို ဒီမှာဖွင့်၍မရပါ"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"ချိတ်ဆက်ရာတွင် ပြဿနာရှိပါသည်။ စက်ကိုပိတ်ပြီး ပြန်ဖွင့်ပါ"</string>
@@ -578,13 +581,10 @@
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"ကန့်သတ်ထားသော ကိုယ်ရေးအချက်အလက်များ"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"အသုံးပြုသူအသစ် ထည့်မလား။"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"နောက်ထပ် အသုံးပြုသူများ ထည့်သွင်းခြင်းဖြင့် ဤစက်ပစ္စည်းကို အခြားသူများနှင့် မျှဝေအသုံးပြုနိုင်သည်။ အသုံးပြုသူတိုင်းသည် မိမိတို့ကိုယ်ပိုင်နေရာ ရရှိမည်ဖြစ်ပြီး အက်ပ်၊ နောက်ခံပုံနှင့် အခြားအရာတို့ဖြင့် စိတ်ကြိုက်ပြင်ဆင်နိုင်ပါမည်။ အားလုံးကို အကျိုးသက်ရောက်မှု ရှိစေနိုင်သည့် Wi-Fi ကဲ့သို့ ဆက်တင်များကိုလည်း ချိန်ညှိနိုင်ပါမည်။\n\nအသုံးပြုသူအသစ် ထည့်သည့်အခါ ထိုသူသည် မိမိ၏ကိုယ်ပိုင်နေရာကို သတ်မှတ်ရပါမည်။\n\nအသုံးပြုသူ မည်သူမဆို အခြားအသုံးပြုသူများအတွက် အက်ပ်များကို အပ်ဒိတ်လုပ်နိုင်သည်။ အများသုံးစွဲနိုင်မှုဆက်တင်များနှင့် ဝန်ဆောင်မှုများကို အသုံးပြုသူအသစ်ထံသို့ လွှဲပြောင်းပေးမည် မဟုတ်ပါ။"</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"သင်က အသုံးပြုသူ အသစ် တစ်ဦးကို ထည့်ပေးလိုက်လျှင်၊ ထိုသူသည် ၎င်း၏ နေရာကို သတ်မှတ်စီစဉ်ရန် လိုအပ်မည်။\n\n အသုံးပြုသူ မည်သူမဆို ကျန်အသုံးပြုသူ အားလုံးတို့အတွက် အက်ပ်များကို အပ်ဒိတ်လုပ်ပေးနိုင်သည်။"</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"သင်က အသုံးပြုသူအသစ် ထည့်လိုက်လျှင် ထိုသူသည် ၎င်း၏ နေရာကို သတ်မှတ်စီစဉ်ရပါမည်။\n\n အသုံးပြုသူတိုင်းက ကျန်အသုံးပြုသူ အားလုံးအတွက် အက်ပ်များကို အပ်ဒိတ်လုပ်နိုင်သည်။"</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"ဤအသုံးပြုသူကို စီမံခန့်ခွဲသူအဖြစ် သတ်မှတ်မလား။"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"စီမံခန့်ခွဲသူများ၌ အခြားအသုံးပြုသူများတွင်မရှိသော အထူးဆောင်ရွက်ခွင့်များရှိသည်။ စီမံခန့်ခွဲသူက အသုံးပြုသူအားလုံးကို စီမံခြင်း၊ ဤစက်ပစ္စည်းကို အပ်ဒိတ်လုပ်ခြင်း (သို့) ပြင်ဆင်သတ်မှတ်ခြင်း၊ ဆက်တင်များပြင်ဆင်ခြင်း၊ ထည့်သွင်းထားသောအက်ပ်အားလုံးကို ကြည့်ခြင်းနှင့် အခြားသူများအတွက် စီမံခန့်ခွဲသူ ဆောင်ရွက်ခွင့်များပေးခြင်း (သို့) ရုပ်သိမ်းခြင်းတို့ လုပ်နိုင်သည်။"</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"စီမံခန့်ခွဲသူအဖြစ် သတ်မှတ်ရန်"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"အသုံးပြုသူကို ယခုသတ်မှတ်မလား။"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"ထိုသူသည် ကိရိယာကိုယူ၍ ၎င်းတို့၏နေရာများကို ယခုသတ်မှတ်နိုင်ရမည်"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ယခု ကိုယ်ရေးအချက်အလက်ကို အစီအမံလုပ်မည်လား?"</string>
@@ -605,7 +605,7 @@
     <string name="user_nickname" msgid="262624187455825083">"နာမည်ပြောင်"</string>
     <string name="user_add_user" msgid="7876449291500212468">"အသုံးပြုသူ ထည့်ရန်"</string>
     <string name="guest_new_guest" msgid="3482026122932643557">"ဧည့်သည် ထည့်ရန်"</string>
-    <string name="guest_exit_guest" msgid="5908239569510734136">"ဧည့်သည်ကို ဖယ်ထုတ်ရန်"</string>
+    <string name="guest_exit_guest" msgid="5908239569510734136">"ဧည့်သည်ကို ဖယ်ရှားရန်"</string>
     <string name="guest_reset_guest" msgid="6110013010356013758">"ဧည့်သည်ကို ပြင်ဆင်သတ်မှတ်ရန်"</string>
     <string name="guest_reset_guest_dialog_title" msgid="8047270010895437534">"ဧည့်သည်ကို ပြင်ဆင်သတ်မှတ်မလား။"</string>
     <string name="guest_remove_guest_dialog_title" msgid="4548511006624088072">"ဧည့်သည်ကို ဖယ်ရှားမလား။"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"၎င်းသည် ဧည့်သည် စက်ရှင်အသစ်ကို စတင်မည်ဖြစ်ပြီး လက်ရှိစက်ရှင်မှ အက်ပ်နှင့် ဒေတာအားလုံးကို ဖျက်ပါမည်"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"ဧည့်သည်မုဒ်မှ ထွက်မလား။"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"၎င်းသည် လက်ရှိဧည့်သည် စက်ရှင်မှ အက်ပ်နှင့် ဒေတာအားလုံးကို ဖျက်လိုက်ပါမည်"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"စီမံခန့်ခွဲသူအဖြစ် သတ်မှတ်ရန်"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"စီမံခန့်ခွဲသူအဖြစ် မသတ်မှတ်ပါနှင့်"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"ထွက်ရန်"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"ဧည့်သည်လုပ်ဆောင်ချက် သိမ်းမလား။"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"လက်ရှိစက်ရှင်မှ လုပ်ဆောင်ချက် သိမ်းနိုင်သည် (သို့) အက်ပ်နှင့် ဒေတာအားလုံး ဖျက်နိုင်သည်"</string>
@@ -679,7 +677,7 @@
     <string name="keyboard_layout_default_label" msgid="1997292217218546957">"မူရင်း"</string>
     <string name="turn_screen_on_title" msgid="3266937298097573424">"ဖန်သားပြင် ဖွင့်ခြင်း"</string>
     <string name="allow_turn_screen_on" msgid="6194845766392742639">"ဖန်သားပြင် ဖွင့်ခွင့်ပြုရန်"</string>
-    <string name="allow_turn_screen_on_description" msgid="43834403291575164">"အက်ပ်ကို ဖန်သားပြင် ဖွင့်ခွင့်ပြုနိုင်သည်။ ခွင့်ပြုထားပါက အက်ပ်သည် သင့်ထံမှ တိကျသောရည်ရွယ်ချက်မလိုဘဲ ဖန်သားပြင်ကို အချိန်မရွေး ဖွင့်နိုင်မည်။"</string>
+    <string name="allow_turn_screen_on_description" msgid="43834403291575164">"အက်ပ်ကို ဖန်သားပြင် ဖွင့်ခွင့်ပြုနိုင်သည်။ ခွင့်ပြုထားပါက သင်က တစ်စုံတစ်ခု လုပ်ဆောင်ရန် မရည်ရွယ်သော်လည်း အက်ပ်သည် ဖန်သားပြင်ကို အချိန်မရွေး ဖွင့်နိုင်မည်။"</string>
     <string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"<xliff:g id="APP_NAME">%1$s</xliff:g> ထုတ်လွှင့်ခြင်းကို ရပ်မလား။"</string>
     <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="268234802198852753">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ကို ထုတ်လွှင့်သောအခါ (သို့) အထွက်ကို ပြောင်းသောအခါ သင့်လက်ရှိထုတ်လွှင့်ခြင်း ရပ်သွားမည်"</string>
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ထုတ်လွှင့်ခြင်း"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"အပေါ်သို့ရွှေ့ရန်"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"သတ်မှတ်မထားပါ"</string>
+    <string name="neuter" msgid="2075249330106127310">"နပုလ္လိင်"</string>
+    <string name="feminine" msgid="1529155595310784757">"ဣတ္ထိလိင်"</string>
+    <string name="masculine" msgid="4653978041013996303">"ပုလ္လိင်"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-nb/arrays.xml b/packages/SettingsLib/res/values-nb/arrays.xml
index 3029329..0ab39ee 100644
--- a/packages/SettingsLib/res/values-nb/arrays.xml
+++ b/packages/SettingsLib/res/values-nb/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Lydkilde"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index c550e3e..9d35068 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Tilgang til SIM-kortet"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD-lyd: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD-lyd"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Høreapparater"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE-lyd"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Koblet til høreapparater"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Høreapparater"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE-lyd"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Koblet til høreapparater"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Koblet til LE-lyd"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Koblet til medielyd"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Koblet til telefonlyd"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Bruk for telefonlyd"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Bruk til filoverføring"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Bruk for inndata"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Bruk for høreapparater"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Bruk for høreapparater"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Bruk for LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Koble til"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"KOBLE TIL"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Velg profil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Personlig"</string>
     <string name="category_work" msgid="4014193632325996115">"Jobb"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klon"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Utvikleralternativer"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Slå på utvikleralternativer"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Angi alternativer for apputvikling"</string>
@@ -226,7 +227,7 @@
     <string name="enable_adb_summary" msgid="3711526030096574316">"Feilsøkingsmodus når USB kobles til"</string>
     <string name="clear_adb_keys" msgid="3010148733140369917">"USB-feilsøking – opphev autorisasjon"</string>
     <string name="enable_adb_wireless" msgid="6973226350963971018">"Trådløs feilsøking"</string>
-    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Feilsøkingsmodus når Wifi er tilkoblet"</string>
+    <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Feilsøkingsmodus når wifi er tilkoblet"</string>
     <string name="adb_wireless_error" msgid="721958772149779856">"Feil"</string>
     <string name="adb_wireless_settings" msgid="2295017847215680229">"Trådløs feilsøking"</string>
     <string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"For å se og bruke tilgjengelige enheter, slå på trådløs feilsøking"</string>
@@ -268,9 +269,9 @@
     <string name="mock_location_app_set" msgid="4706722469342913843">"App for fiktiv posisjon: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="6829757985772659599">"Nettverk"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"Trådløs skjerm-sertifisering"</string>
-    <string name="wifi_verbose_logging" msgid="1785910450009679371">"Slå på detaljert Wifi-loggføring"</string>
-    <string name="wifi_scan_throttling" msgid="2985624788509913617">"Begrensning av Wi‑Fi-skanning"</string>
-    <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Ikke-vedvarende tilfeldiggjøring av MAC-adresse for Wi‑Fi"</string>
+    <string name="wifi_verbose_logging" msgid="1785910450009679371">"Slå på detaljert wifi-loggføring"</string>
+    <string name="wifi_scan_throttling" msgid="2985624788509913617">"Begrensning av wifi-skanning"</string>
+    <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Ikke-vedvarende tilfeldiggjøring av MAC-adresse for wifi"</string>
     <string name="mobile_data_always_on" msgid="8275958101875563572">"Mobildata er alltid aktiv"</string>
     <string name="tethering_hardware_offload" msgid="4116053719006939161">"Maskinvareakselerasjon for internettdeling"</string>
     <string name="bluetooth_show_devices_without_names" msgid="923584526471885819">"Vis Bluetooth-enheter uten navn"</string>
@@ -300,7 +301,7 @@
     <string name="private_dns_mode_provider_hostname_hint" msgid="6564868953748514595">"Skriv inn DNS-leverandørens vertsnavn"</string>
     <string name="private_dns_mode_provider_failure" msgid="8356259467861515108">"Kunne ikke koble til"</string>
     <string name="wifi_display_certification_summary" msgid="8111151348106907513">"Vis alternativer for sertifisering av trådløs skjerm"</string>
-    <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Øk nivået av Wifi-logging – vis per SSID RSSI i Wifi-velgeren"</string>
+    <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Øk nivået av wifi-logging – vis per SSID RSSI i wifi-velgeren"</string>
     <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"Reduserer batteriforbruket og forbedrer nettverksytelsen"</string>
     <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"Når denne modusen er slått på, kan MAC-adressen til denne enheten endres hver gang den kobler seg til et nettverk som har tilfeldiggjøring av MAC-adresse slått på."</string>
     <string name="wifi_metered_label" msgid="8737187690304098638">"Med datamåling"</string>
@@ -316,7 +317,7 @@
     <string name="allow_mock_location" msgid="2102650981552527884">"Tillat simulert posisjon"</string>
     <string name="allow_mock_location_summary" msgid="179780881081354579">"Tillat bruk av simulerte GPS-koordinater"</string>
     <string name="debug_view_attributes" msgid="3539609843984208216">"Slå på inspeksjon av visningsattributt"</string>
-    <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Ha alltid mobildata slått på, selv når Wifi er aktiv (for hurtig nettverksbytting)."</string>
+    <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Ha alltid mobildata slått på, selv når wifi er aktiv (for hurtig nettverksbytting)."</string>
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"Bruk maskinvareakselerasjon for internettdeling hvis det er tilgjengelig"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"Tillate USB-feilsøking?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB-feilsøking er bare ment for utviklingsformål. Bruk det til å kopiere data mellom datamaskinen og enheten, installere apper på enheten uten varsel og lese loggdata."</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Skjermoverlegg viser aktuelle berøringsdata"</string>
     <string name="show_touches" msgid="8437666942161289025">"Vis trykk"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Vis visuell tilbakemelding for trykk"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Vis tastetrykk"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Vis visuell tilbakemelding for fysiske tastetrykk"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Vis overflateoppdateringer"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Fremhev hele vindusoverflater når de oppdateres"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Vis visningsoppdateringer"</string>
@@ -392,7 +395,7 @@
     <string name="app_process_limit_title" msgid="8361367869453043007">"Bakgrunnsprosessgrense"</string>
     <string name="show_all_anrs" msgid="9160563836616468726">"Vis ANR-feil i bakgrunnen"</string>
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"Vis Appen svarer ikke-dialog for bakgrunnsapper"</string>
-    <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Vis varselskanaladvarsler"</string>
+    <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Vis advarsler om varselkanal"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Viser advarsler på skjermen når apper publiserer varsler uten en gyldig kanal"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"Tillat alltid ekstern lagring av apper"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Dette gjør at alle apper kan lagres på eksterne lagringsmedier – uavhengig av manifestverdier"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mer tid."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mindre tid."</string>
     <string name="cancel" msgid="5665114069455378395">"Avbryt"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Neste"</string>
+    <string name="back" msgid="5554327870352703710">"Tilbake"</string>
+    <string name="save" msgid="3745809743277153149">"Lagre"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Ferdig"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmer og påminnelser"</string>
@@ -547,14 +547,17 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Nå nettopp"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Denne telefonen"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Dette nettbrettet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dokkhøyttaler"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Ekstern enhet"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Tilkoblet enhet"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Denne telefonen"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Kan ikke spille på denne enheten"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Oppgrader kontoen for å bytte"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Kan ikke spille av nedlastinger her"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Prøv igjen etter annonsen"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Vekk enheten for å spille her"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Enheten er ikke godkjent for avspilling"</string>
-    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Kan ikke spille dette medieinnholdet her"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Enheten er ikke godkjent"</string>
+    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Kan ikke spille av dette her"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Tilkoblingsproblemer. Slå enheten av og på igjen"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Lydenhet med kabel"</string>
     <string name="help_label" msgid="3528360748637781274">"Hjelp og tilbakemelding"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Bruker"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Begrenset profil"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Vil du legge til en ny bruker?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Du kan dele denne enheten med andre folk ved å opprette flere brukere. Hver bruker har sin egen plass de kan tilpasse med apper, bakgrunner og annet. Brukere kan også justere enhetsinnstillinger, for eksempel Wifi, som påvirker alle.\n\nNår du legger til en ny bruker, må vedkommende angi innstillinger for plassen sin.\n\nAlle brukere kan oppdatere apper for alle andre brukere. Innstillinger og tjenester for tilgjengelighet overføres kanskje ikke til den nye brukeren."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Du kan dele denne enheten med andre folk ved å opprette flere brukere. Hver bruker har sitt eget område de kan tilpasse med apper, bakgrunner og annet. Brukere kan også justere enhetsinnstillinger, for eksempel wifi, som påvirker alle.\n\nNår du legger til en ny bruker, må vedkommende angi innstillinger for sitt område.\n\nAlle brukere kan oppdatere apper for alle andre brukere. Innstillinger og tjenester for tilgjengelighet overføres kanskje ikke til den nye brukeren."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Når du legger til en ny bruker, må hen konfigurere sitt eget område.\n\nAlle brukere kan oppdatere apper for alle andre brukere."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Vil du gjøre denne brukeren til administrator?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Administratorer har spesielle rettigheter som ikke andre brukere har. Administratorer kan administrere alle brukere, oppdatere og tilbakestille denne enheten, endre innstillinger, se alle installerte apper, gi administratorrettigheter til andre samt oppheve andres administratorrettigheter."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Gjør til administrator"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Vil du konfigurere brukeren?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Sørg for at brukeren er tilgjengelig for å konfigurere området sitt på enheten"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Vil du konfigurere profilen nå?"</string>
@@ -613,13 +613,11 @@
     <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_reset_and_restart_dialog_message" msgid="2764425635305200790">"Dette starter en ny gjesteøkt og sletter alle apper og data fra den nåværende ø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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Da slettes apper og data fra den nåværende gjesteøkten"</string>
+    <string name="grant_admin" msgid="4323199171790522574">"Ja, gjør til administrator"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Nei, ikke gjør til administrator"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Flytt opp"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Ikke angitt"</string>
+    <string name="neuter" msgid="2075249330106127310">"Intetkjønn"</string>
+    <string name="feminine" msgid="1529155595310784757">"Hunkjønn"</string>
+    <string name="masculine" msgid="4653978041013996303">"Hankjønn"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ne/arrays.xml b/packages/SettingsLib/res/values-ne/arrays.xml
index 451f198..447cd80 100644
--- a/packages/SettingsLib/res/values-ne/arrays.xml
+++ b/packages/SettingsLib/res/values-ne/arrays.xml
@@ -23,7 +23,7 @@
   <string-array name="wifi_status">
     <item msgid="1596683495752107015"></item>
     <item msgid="3288373008277313483">"स्क्यान गरिँदै..."</item>
-    <item msgid="6050951078202663628">"जडान हुँदै..."</item>
+    <item msgid="6050951078202663628">"कनेक्ट गरिँदै छ..."</item>
     <item msgid="8356618438494652335">"प्रमाणित गर्दै ..."</item>
     <item msgid="2837871868181677206">"IP एड्रेस पत्ता लगाउँदै ..."</item>
     <item msgid="4613015005934755724">"जडान गरिएको"</item>
@@ -37,7 +37,7 @@
   <string-array name="wifi_status_with_ssid">
     <item msgid="5969842512724979061"></item>
     <item msgid="1818677602615822316">"स्क्यान गर्दै..."</item>
-    <item msgid="8339720953594087771">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>सँग जडान हुँदै..."</item>
+    <item msgid="8339720953594087771">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>सँग कनेक्ट गरिँदै छ..."</item>
     <item msgid="3028983857109369308">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>को साथ प्रमाणित गर्दै…"</item>
     <item msgid="4287401332778341890">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>बाट IP एड्रेस प्राप्त गर्दै…"</item>
     <item msgid="1043944043827424501">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> मा कनेक्ट भएको छ छ"</item>
@@ -59,9 +59,9 @@
     <item msgid="6421717003037072581">"सधैँ HDCP जाँच प्रयोग गर्नुहोस्"</item>
   </string-array>
   <string-array name="bt_hci_snoop_log_entries">
-    <item msgid="695678520785580527">"असक्षम पारिएको छ"</item>
-    <item msgid="6336372935919715515">"फिल्टर सक्षम पारियो"</item>
-    <item msgid="2779123106632690576">"सक्षम पारिएको छ"</item>
+    <item msgid="695678520785580527">"अफ गरिएको छ"</item>
+    <item msgid="6336372935919715515">"फिल्टर अफ पारियो"</item>
+    <item msgid="2779123106632690576">"अन गरिएको छ"</item>
   </string-array>
   <string-array name="bt_hci_snoop_log_filters_entries">
     <item msgid="195768089203590086">"ACL हेडर मात्र छाड्नुहोस्"</item>
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"४ हजार (सुरक्षित)"</item>
     <item msgid="7322156123728520872">"४ हजार (upscaled)"</item>
     <item msgid="7735692090314849188">"४ हजार (upscaled, सुरक्षित)"</item>
-    <item msgid="7346816300608639624">"७२० पिक्सेल, १०८० पिक्सेल (दोहरो स्क्रिन)"</item>
+    <item msgid="7346816300608639624">"७२० पिक्सेल, १०८० पिक्सेल (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"कुनै पनि होइन"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"अडियो स्रोत"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"०"</item>
+    <item msgid="2646486108212979598">"१"</item>
+    <item msgid="3753634915787796632">"२"</item>
+    <item msgid="4779928470672877922">"३"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index 9421e71..e536c16 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -84,7 +84,7 @@
     <string name="preference_summary_default_combination" msgid="2644094566845577901">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="7739366554710388701">"विच्छेदन गरियो"</string>
     <string name="bluetooth_disconnecting" msgid="7638892134401574338">"जडान हटाइँदै ..."</string>
-    <string name="bluetooth_connecting" msgid="5871702668260192755">"जडान हुँदै..."</string>
+    <string name="bluetooth_connecting" msgid="5871702668260192755">"कनेक्ट गरिँदै छ..."</string>
     <string name="bluetooth_connected" msgid="8065345572198502293">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> सँग कनेक्ट भएको छ"</string>
     <string name="bluetooth_pairing" msgid="4269046942588193600">"कनेक्ट गरिँदै छ..."</string>
     <string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"जडान गरियो (फोनबाहेेक) <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
@@ -99,7 +99,7 @@
     <string name="bluetooth_battery_level" msgid="2893696778200201555">"ब्याट्रीको स्तर: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
     <string name="bluetooth_battery_level_untethered" msgid="4002282355111504349">"L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> ब्याट्री, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ब्याट्री"</string>
     <string name="bluetooth_active_no_battery_level" msgid="4155462233006205630">"सक्रिय"</string>
-    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"सक्रिय, बायाँ मात्र"</string>
+    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"बायाँ मात्र अन छ"</string>
     <string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"सक्रिय, दायाँ मात्र"</string>
     <string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"सक्रिय, बायाँ र दायाँ"</string>
     <string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"मिडिया अडियो"</string>
@@ -111,12 +111,12 @@
     <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>
+    <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM एक्सेस"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD अडियो: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD अडियो"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"श्रवण यन्त्रहरू"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE अडियो"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"श्रवण यन्त्रहरूमा जडान गरियो"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"श्रवण यन्त्रहरू"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE अडियो"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"श्रवण यन्त्रहरूमा जडान गरियो"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE अडियोमा कनेक्ट गरिएको छ"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"मिडिया अडियोसँग जडित"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"फोन अडियोमा जडान गरियो"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"फोन अडियोको लागि प्रयोग गर्नुहोस्"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"फाइल ट्रान्सफरका लागि प्रयोग गर्नुहोस्"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"इनपुटको लागि प्रयोग गर्नुहोस्"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"श्रवण यन्त्रहरूका लागि प्रयोग गर्नुहोस्"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"श्रवण यन्त्रहरूका लागि प्रयोग गर्नुहोस्"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO मा प्रयोग गर्नुहोस्"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"कनेक्ट गर्नुहोस्"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"जोडी"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"प्रोफाइल रोज्नुहोस्"</string>
     <string name="category_personal" msgid="6236798763159385225">"व्यक्तिगत"</string>
     <string name="category_work" msgid="4014193632325996115">"काम"</string>
+    <string name="category_clone" msgid="1554511758987195974">"क्लोन"</string>
     <string name="development_settings_title" msgid="140296922921597393">"विकासकर्ताका विकल्पहरू"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"विकासकर्ता विकल्प सक्रिया गर्नुहोस्"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"एप विकासको लागि विकल्पहरू सेट गर्नुहोस्"</string>
@@ -302,7 +303,7 @@
     <string name="wifi_display_certification_summary" msgid="8111151348106907513">"वायरलेस डिस्प्लेसम्बन्धी विकल्प देखाइयोस्"</string>
     <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Wi-Fi लगिङ लेभल बढाइयोस्, Wi-Fi पि‍करमा प्रति SSID RSSI देखाइयोस्"</string>
     <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"यसले ब्याट्रीको खपत कम गर्छ र नेटवर्कको कार्यसम्पादनमा सुधार गर्दछ"</string>
-    <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"यो मोड अन गरिएका बेला यो डिभाइस MAC एड्रेस बदल्ने सुविधा अन गरिएको नेटवर्कमा जति पटक कनेक्ट हुन्छ त्यति नै पटक यस डिभाइसको MAC एड्रेस पनि परिवर्तन हुन सक्छ।"</string>
+    <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"यो मोड अन गरिएका बेला यो डिभाइस म्याक एड्रेस बदल्ने सुविधा अन गरिएको नेटवर्कमा जति पटक कनेक्ट हुन्छ त्यति नै पटक यस डिभाइसको म्याक एड्रेस पनि परिवर्तन हुन सक्छ।"</string>
     <string name="wifi_metered_label" msgid="8737187690304098638">"सशुल्क वाइफाइ"</string>
     <string name="wifi_unmetered_label" msgid="6174142840934095093">"मिटर नगरिएको"</string>
     <string name="select_logd_size_title" msgid="1604578195914595173">"लगर बफरका आकारहरू"</string>
@@ -319,15 +320,15 @@
     <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"Wi-Fi अन हुँदा पनि मोबाइल डेटा सधैँ अन होस् (द्रुत रूपमा नेटवर्क बदल्न)।"</string>
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"उपलब्ध हुँदा टेदरिङ हार्डवेयर एक्सलरेसन प्रयोग गरियोस्"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"USB डिबग गर्न लागि अनुमति दिने हो?"</string>
-    <string name="adb_warning_message" msgid="8145270656419669221">"युएसबी डिबगिङ विकास प्रयोजनका लागि मात्र निर्मित हुन्छ। यसलाई तपाईँको कम्प्युटर र तपाईँको उपकरणका बीच डेटा प्रतिलिपि गर्न, बिना सूचना तपाईँको उपकरणमा एपहरू इन्स्टल गर्न र लग डेटा पढ्नका लागि प्रयोग गर्नुहोस्।"</string>
+    <string name="adb_warning_message" msgid="8145270656419669221">"युएसबी डिबगिङ विकास प्रयोजनका लागि मात्र निर्मित हुन्छ। यसलाई तपाईँको कम्प्युटर र तपाईँको उपकरणका बीच डेटा कपी गर्न, बिना सूचना तपाईँको उपकरणमा एपहरू इन्स्टल गर्न र लग डेटा पढ्नका लागि प्रयोग गर्नुहोस्।"</string>
     <string name="adbwifi_warning_title" msgid="727104571653031865">"वायरलेस डिबगिङ सेवा सक्षम पार्ने हो?"</string>
-    <string name="adbwifi_warning_message" msgid="8005936574322702388">"वायरलेस डिबगिङ डिभलपमेन्ट प्रयोजनका लागि मात्रै हो। यसलाई आफ्ना कम्प्युटर र उपकरणका बिच डेटा प्रतिलिपि गर्न, सूचना नदिई आफ्नो उपकरणमा एपहरू इन्स्टल गर्न र लग डेटा पढ्न प्रयोग गर्नुहोस्।"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"वायरलेस डिबगिङ डिभलपमेन्ट प्रयोजनका लागि मात्रै हो। यसलाई आफ्ना कम्प्युटर र उपकरणका बिच डेटा कपी गर्न, सूचना नदिई आफ्नो उपकरणमा एपहरू इन्स्टल गर्न र लग डेटा पढ्न प्रयोग गर्नुहोस्।"</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"तपाईं पहिले नै अधिकृत गर्नुभएका सबै कम्प्यूटरबाट USB डिबग गर्नको लागि पहुँच रद्द गर्ने हो?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"विकास सेटिङहरू अनुमति दिने हो?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"यी सेटिङहरू केवल विकास प्रयोगको लागि विचार गरिएको हो। तिनीहरूले तपाईंको उपकरण र एपहरूलाई विच्छेदन गर्न वा दुर्व्यवहार गर्न सक्दछ।"</string>
     <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"USB मा एपको पुष्टि गरियोस्"</string>
     <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"हानिकारक व्यवहार पत्ता लगाउन ADB/ADT बाट इन्स्टल गरिएका एपको जाँच गरियोस्"</string>
-    <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"नामकरण नगरिएका ब्लुटुथ डिभाइस (MAC एड्रेस भएका मात्र) देखाइने छ"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"नामकरण नगरिएका ब्लुटुथ डिभाइस (म्याक एड्रेस भएका मात्र) देखाइने छ"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"यसले रिमोट डिभाइसमा अत्याधिक ठूलो वा अनियन्त्रित भोल्युम बज्नेको जस्ता अवस्थामा ब्लुटुथको निरपेक्ष भोल्युम अफ गर्छ।"</string>
     <string name="bluetooth_enable_gabeldorsche_summary" msgid="2054730331770712629">"ब्लुटुथ Gabeldorsche सुविधाको स्ट्याक अन गरियोस्।"</string>
     <string name="enhanced_connectivity_summary" msgid="1576414159820676330">"यसले परिष्कृत जडानको सुविधा सक्षम पार्छ।"</string>
@@ -341,7 +342,7 @@
     <string name="debug_app_set" msgid="6599535090477753651">"डिबग गर्ने एप: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="select_application" msgid="2543228890535466325">"एप चयन गर्नुहोस्"</string>
     <string name="no_application" msgid="9038334538870247690">"केही पनि होइन"</string>
-    <string name="wait_for_debugger" msgid="7461199843335409809">"डिबगरलाई पर्खौँ"</string>
+    <string name="wait_for_debugger" msgid="7461199843335409809">"डिबगरलाई पर्खियोस्"</string>
     <string name="wait_for_debugger_summary" msgid="6846330006113363286">"डिबग भएको एप चल्नुअघि डिबगरलाई पर्खिन्छ"</string>
     <string name="debug_input_category" msgid="7349460906970849771">"इनपुट"</string>
     <string name="debug_drawing_category" msgid="5066171112313666619">"रेखाचित्र"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"स्क्रिन ओभरलेले हालको टच डेटा देखाउँदै छ"</string>
     <string name="show_touches" msgid="8437666942161289025">"ट्याप देखाइयोस्"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"ट्यापका लागि भिजुअल प्रतिक्रिया देखाइयोस्"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"थिचिएका कीहरू देखाइयून्"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"थिचिएका भौतिक कीसम्बन्धी भिजुअल प्रतिक्रिया देखाइयोस्"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"सर्फेस अपडेट देखाइयोस्"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"अपडेट हुँदा विन्डोका पूरै सतहमा देखाइयोस्"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"GPU भ्युको अपडेट देखाइयोस्"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"थप समय।"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"कम समय।"</string>
     <string name="cancel" msgid="5665114069455378395">"रद्द गर्नुहोस्"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"अर्को"</string>
+    <string name="back" msgid="5554327870352703710">"पछाडि"</string>
+    <string name="save" msgid="3745809743277153149">"सेभ गर्नुहोस्"</string>
     <string name="okay" msgid="949938843324579502">"ठिक छ"</string>
     <string name="done" msgid="381184316122520313">"सम्पन्न भयो"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"अलार्म र रिमाइन्डरहरू"</string>
@@ -547,14 +547,17 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"अहिले भर्खरै"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"यो फोन"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"यो ट्याब्लेट"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"डक स्पिकर"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"बाह्य डिभाइस"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"कनेक्ट गरिएको डिभाइस"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"यो फोन"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"यो डिभाइसमा मिडिया प्ले गर्न मिल्दैन"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"आफूले प्रयोग गर्न चाहेको खाता अपग्रेड गर्नुहोस्"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"डाउनलोड गरिएका सामग्री यहाँ प्ले गर्न मिल्दैन"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"डाउनलोड गरिएका सामग्री यसमा प्ले गर्न मिल्दैन"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"विज्ञापन सकिएपछि फेरि प्रयास गर्नुहोस्"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"यो मिडिया यहाँ प्ले गर्न डिभाइस सक्रिय गर्नुहोस्"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"यो डिभाइसलाई मिडिया प्ले गर्ने अनुमोदन दिइएको छैन"</string>
-    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"यो मिडिया यहाँ प्ले गर्न मिल्दैन"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"यो डिभाइसलाई मिडिया प्ले गर्ने अनुमति छैन"</string>
+    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"यो मिडिया यसमा प्ले गर्न मिल्दैन"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"जोड्ने क्रममा समस्या भयो। यन्त्रलाई निष्क्रिय पारेर फेरि अन गर्नुहोस्"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"तारयुक्त अडियो यन्त्र"</string>
     <string name="help_label" msgid="3528360748637781274">"मद्दत र प्रतिक्रिया"</string>
@@ -576,15 +579,12 @@
     <string name="user_add_profile_item_summary" msgid="5418602404308968028">"तपाईं आफ्नो खाताबाट एपहरू र सामग्रीहरूको पहुँचलाई प्रतिबन्ध गर्न सक्नुहुन्छ"</string>
     <string name="user_add_user_item_title" msgid="2394272381086965029">"प्रयोगकर्ता"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"प्रतिबन्धित प्रोफाइल"</string>
-    <string name="user_add_user_title" msgid="5457079143694924885">"नयाँ प्रयोगकर्ता थप्ने हो?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"तपाईं थप प्रयोगकर्ताहरू सिर्जना गरेर ती प्रयोगकर्तालाई यो डिभाइस प्रयोग गर्न दिन सक्नुहुन्छ। हरेक प्रयोगकर्ताको आफ्नै ठाउँ हुन्छ। उनीहरू यो ठाउँमा आफ्नै एप, वालपेपर आदिका लागि प्रयोग गर्न सक्छन्। उनीहरू सबैजनालाई असर पार्ने Wi-Fi जस्ता डिभाइसका सेटिङहरू पनि परिवर्तन गर्न सक्छन्।\n\nतपाईंले नयाँ प्रयोगकर्ता थप्दा उक्त व्यक्तिले आफ्नो ठाउँ सेटअप गर्नु पर्ने हुन्छ।\n\nसबै प्रयोगकर्ता अन्य सबै प्रयोगकर्ताले प्रयोग गर्ने एपहरू अद्यावधिक गर्न सक्छन्। तर पहुँचसम्बन्धी सेटिङ तथा सेवाहरू नयाँ प्रयोगकर्तामा नसर्न सक्छ।"</string>
+    <string name="user_add_user_title" msgid="5457079143694924885">"नयाँ प्रयोगकर्ता हाल्ने हो?"</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"तपाईं थप प्रयोगकर्ताहरू सिर्जना गरेर ती प्रयोगकर्तालाई यो डिभाइस प्रयोग गर्न दिन सक्नुहुन्छ। हरेक प्रयोगकर्ताको आफ्नै ठाउँ हुन्छ। उनीहरू यो ठाउँमा आफ्नै एप, वालपेपर आदिका लागि प्रयोग गर्न सक्छन्। उनीहरू सबैजनालाई असर पार्ने Wi-Fi जस्ता डिभाइसका सेटिङहरू पनि परिवर्तन गर्न सक्छन्।\n\nतपाईंले नयाँ प्रयोगकर्ता थप्दा उक्त व्यक्तिले आफ्नो ठाउँ सेटअप गर्नु पर्ने हुन्छ।\n\nसबै प्रयोगकर्ता अन्य सबै प्रयोगकर्ताले प्रयोग गर्ने एपहरू अद्यावधिक गर्न सक्छन्। तपाईं थप प्रयोगकर्ताहरू सिर्जना गरेर ती प्रयोगकर्तालाई यो डिभाइस प्रयोग गर्न दिन सक्नुहुन्छ। हरेक प्रयोगकर्ताको आफ्नै ठाउँ हुन्छ। उनीहरू यो ठाउँमा आफ्नै एप, वालपेपर आदिका लागि प्रयोग गर्न सक्छन्। उनीहरू सबैजनालाई असर पार्ने Wi-Fi जस्ता डिभाइसका सेटिङहरू पनि परिवर्तन गर्न सक्छन्।BREAK_0BREAK_1तपाईंले नयाँ प्रयोगकर्ता थप्दा उक्त व्यक्तिले आफ्नो ठाउँ सेटअप गर्नु पर्ने हुन्छ।BREAK_2BREAK_3सबै प्रयोगकर्ता अन्य सबै प्रयोगकर्ताले प्रयोग गर्ने एपहरू अद्यावधिक गर्न सक्छन्। तर पहुँचसम्बन्धी सेटिङ तथा सेवाहरू नयाँ प्रयोगकर्तामा नसर्न सक्छन्।"</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"तपाईंले नयाँ प्रयोगकर्ता थप्नुभयो भने ती प्रयोगकर्ताले आफ्नो स्पेस सेट गर्नु पर्ने हुन्छ।\n\nसबै प्रयोगकर्ताले अरू प्रयोगकर्ताका एपहरू अपडेट गर्न सक्छन्।"</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"यी प्रयोगकर्तालाई एड्मिन बनाउने हो?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"एड्मिनहरूसँग अन्य प्रयोगकर्तासँग नभएका विशेषाधिकारहरू हुन्छन्। एड्मिन सबै प्रयोगकर्ताहरूलाई व्यवस्थापन गर्न, यो डिभाइस अपडेट वा रिसेट गर्न, सेटिङ परिमार्जन गर्न, इन्स्टल गरिएका सबै एपहरू हेर्न र अरूलाई एड्मिनका विशेषाधिकारहरू दिन वा अरूलाई दिइएका एड्मिनका विशेषाधिकारहरू खारेज गर्न सक्नुहुन्छ।"</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"एड्मिन बनाउनुहोस्"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"अहिले प्रयोगकर्ता सेटअप गर्ने हो?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"यी व्यक्ति यन्त्र यो डिभाइस चलाउन र आफ्नो ठाउँ सेट गर्न उपलब्ध छन् भन्ने कुरा सुनिश्चित गर्नुहोस्"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"अहिले प्रोफाइल सेटअप गर्ने हो?"</string>
@@ -597,8 +597,8 @@
     <string name="profile_info_settings_title" msgid="105699672534365099">"प्रोफाइलको जानकारी"</string>
     <string name="user_need_lock_message" msgid="4311424336209509301">"निषेधयुक्त प्रोफाइल बनाउनु अघि तपाईँको एप र व्यक्तिगत डेटा सुरक्षा गर्नाका लागि तपाईँले स्क्रिन लक सेटअप गर्नु पर्दछ ।"</string>
     <string name="user_set_lock_button" msgid="1427128184982594856">"लक सेट गर्नुहोस्"</string>
-    <string name="user_switch_to_user" msgid="6975428297154968543">"प्रयोगकर्ता बदलेर <xliff:g id="USER_NAME">%s</xliff:g> पार्नुहोस्"</string>
-    <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"नयाँ प्रयोगकर्ता बनाउँदै…"</string>
+    <string name="user_switch_to_user" msgid="6975428297154968543">"प्रयोगकर्ता बदलेर <xliff:g id="USER_NAME">%s</xliff:g> बनाउनुहोस्"</string>
+    <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"नयाँ प्रयोगकर्ता बनाइँदै छ…"</string>
     <string name="creating_new_guest_dialog_message" msgid="1114905602181350690">"नयाँ अतिथि बनाइँदै छ…"</string>
     <string name="add_user_failed" msgid="4809887794313944872">"नयाँ प्रयोगकर्ता सिर्जना गर्न सकिएन"</string>
     <string name="add_guest_failed" msgid="8074548434469843443">"नयाँ अतिथि बनाउन सकिएन"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"यसो गर्नाले नयाँ अतिथि सत्र सुरु हुने छ र हालको अतिथि सत्रका सबै एप तथा डेटा मेटिने छ"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"अतिथि मोडबाट बाहिरिने हो?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"यसो गर्नाले हालको अतिथि सत्रका एप तथा डेटा मेटिने छ"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"अँ, उहाँलाई एड्मिन बनाउनुहोस्"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"अहँ, उहाँलाई एड्मिन नबनाउनुहोस्"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"बाहिरिनुहोस्"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"अतिथि सत्रमा गरिएका क्रियाकलाप सेभ गर्ने हो?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"तपाईं हालको सत्रमा गरिएका क्रियाकलाप सेभ गर्न वा सबै एप तथा डेटा मेटाउन सक्नुहुन्छ"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"माथितिर सार्नुहोस्"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"नतोकिएको"</string>
+    <string name="neuter" msgid="2075249330106127310">"नपुंसक लिङ्ग"</string>
+    <string name="feminine" msgid="1529155595310784757">"स्त्रीलिङ्ग"</string>
+    <string name="masculine" msgid="4653978041013996303">"पुलिङ्ग"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-nl/arrays.xml b/packages/SettingsLib/res/values-nl/arrays.xml
index f40eec1..6898086 100644
--- a/packages/SettingsLib/res/values-nl/arrays.xml
+++ b/packages/SettingsLib/res/values-nl/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Audiobron"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 2cad755c..c73abb4 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Sim-toegang"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD-audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD-audio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Hoortoestellen"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"Le Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Verbonden met hoortoestellen"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Hoortoestellen"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Verbonden met hoortoestellen"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Verbonden met LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Verbonden met audio van medium"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Verbonden met audio van telefoon"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Gebruiken voor audio van telefoon"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Gebruiken voor bestandsoverdracht"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Gebruiken voor invoer"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Gebruiken voor hoortoestellen"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Gebruiken voor hoortoestellen"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Gebruiken voor LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Koppelen"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"KOPPELEN"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Profiel kiezen"</string>
     <string name="category_personal" msgid="6236798763159385225">"Persoonlijk"</string>
     <string name="category_work" msgid="4014193632325996115">"Werk"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klonen"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Ontwikkelaarsopties"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Opties voor ontwikkelaars aanzetten"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Opties instellen voor appontwikkeling"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Schermoverlay met huidige aanraakgegevens"</string>
     <string name="show_touches" msgid="8437666942161289025">"Tikken tonen"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Toon visuele feedback voor tikken"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Toetsaanslagen tonen"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Visuele feedback tonen voor fysieke toetsaanslagen"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Oppervlakupdates tonen"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Flash volledige vensteroppervlakken bij updates"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Weergave-updates tonen"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Meer tijd."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Minder tijd."</string>
     <string name="cancel" msgid="5665114069455378395">"Annuleren"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Volgende"</string>
+    <string name="back" msgid="5554327870352703710">"Terug"</string>
+    <string name="save" msgid="3745809743277153149">"Opslaan"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Klaar"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Wekkers en herinneringen"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Zojuist"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Deze telefoon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Deze tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dockspeaker"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Extern apparaat"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Verbonden apparaat"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Deze telefoon"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Kan niet afspelen op dit apparaat"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Upgrade het account om te schakelen"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Gebruiker"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Beperkt profiel"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Nieuwe gebruiker toevoegen?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Je kunt dit apparaat met anderen delen door extra gebruikers te maken. Elke gebruiker heeft een eigen profiel met zelf gekozen apps, achtergrond, enzovoort. Gebruikers kunnen ook apparaatinstellingen aanpassen die van invloed zijn op alle gebruikers, zoals wifi.\n\nWanneer je een nieuwe gebruiker toevoegt, moet die persoon een eigen profiel instellen.\n\nElke gebruiker kan apps updaten voor alle andere gebruikers. Toegankelijkheidsinstellingen en -services worden mogelijk niet overgezet naar de nieuwe gebruiker."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"Wanneer je een nieuwe gebruiker toevoegt, moet die persoon hun eigen profiel instellen.\n\nElke gebruiker kan apps updaten voor alle andere gebruikers."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Je kunt dit apparaat met anderen delen door extra gebruikers toe te voegen. Elke gebruiker heeft een eigen profiel met zelf gekozen apps, achtergrond, enzovoort. Gebruikers kunnen ook apparaatinstellingen aanpassen die van invloed zijn op alle gebruikers, zoals wifi.\n\nWanneer je een nieuwe gebruiker toevoegt, moet die persoon een eigen profiel instellen.\n\nElke gebruiker kan apps updaten voor alle andere gebruikers. Toegankelijkheidsinstellingen en -services worden mogelijk niet overgezet naar de nieuwe gebruiker."</string>
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"Wanneer je een nieuwe gebruiker toevoegt, moet die persoon een eigen profiel instellen.\n\nElke gebruiker kan apps updaten voor alle andere gebruikers."</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Deze gebruiker beheerder maken?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Beheerders hebben speciale rechten die andere gebruikers niet hebben. Een beheerder kan alle gebruikers beheren, dit apparaat updaten of resetten, instellingen wijzigen, alle geïnstalleerde apps bekijken en beheerdersrechten toekennen of intrekken voor anderen."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Beheerder maken"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Gebruiker nu instellen?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Zorg ervoor dat de persoon het apparaat kan overnemen om een profiel in te stellen"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Profiel nu instellen?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Hiermee start een nieuwe gastsessie en worden alle apps en gegevens van de huidige sessie verwijderd"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Gastmodus sluiten?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Hierdoor worden apps en gegevens van de huidige gastsessie verwijderd"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Ja, beheerder maken"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Nee, geen beheerder maken"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Omhoog verplaatsen"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Niet opgegeven"</string>
+    <string name="neuter" msgid="2075249330106127310">"Onzijdig"</string>
+    <string name="feminine" msgid="1529155595310784757">"Vrouwelijk"</string>
+    <string name="masculine" msgid="4653978041013996303">"Mannelijk"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-or/arrays.xml b/packages/SettingsLib/res/values-or/arrays.xml
index 8c5589c..c7c857b 100644
--- a/packages/SettingsLib/res/values-or/arrays.xml
+++ b/packages/SettingsLib/res/values-or/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (ସୁରକ୍ଷିତ)"</item>
     <item msgid="7322156123728520872">"4K (ଅପ୍‌ସ୍କେଲ୍‌ କରାଯାଇଛି)"</item>
     <item msgid="7735692090314849188">"4K (ଉତ୍ତମ, ସୁରକ୍ଷିତ)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (ଡୁଆଲ୍ ସ୍କ୍ରୀନ୍‌)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"କିଛିନାହିଁ"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"ଅଡିଓ ଉତ୍ସ"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml
index 2c667c3..89d3636 100644
--- a/packages/SettingsLib/res/values-or/strings.xml
+++ b/packages/SettingsLib/res/values-or/strings.xml
@@ -84,9 +84,9 @@
     <string name="preference_summary_default_combination" msgid="2644094566845577901">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="7739366554710388701">"ବିଛିନ୍ନ ହେଲା"</string>
     <string name="bluetooth_disconnecting" msgid="7638892134401574338">"ବିଚ୍ଛିନ୍ନ କରୁଛି…"</string>
-    <string name="bluetooth_connecting" msgid="5871702668260192755">"ସଂଯୋଗ କରାଯାଉଛି…"</string>
+    <string name="bluetooth_connecting" msgid="5871702668260192755">"କନେକ୍ଟ ହେଉଛି…"</string>
     <string name="bluetooth_connected" msgid="8065345572198502293">"ସଂଯୁକ୍ତ ହେଲା<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
-    <string name="bluetooth_pairing" msgid="4269046942588193600">"ପେୟାର୍‌ କରୁଛି…"</string>
+    <string name="bluetooth_pairing" msgid="4269046942588193600">"ପେୟାର କରୁଛି…"</string>
     <string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"ସଂଯୁକ୍ତ ହେଲା (ଫୋନ୍ ନୁହେଁ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"ସଂଯୁକ୍ତ ହେଲା (ମିଡିଆ ନୁହେଁ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"ସଂଯୁକ୍ତ ହେଲା (ଫୋନ୍ କିମ୍ବା ମେଡିଆ ନୁହେଁ)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM ଆକ୍ସେସ"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD ଅଡିଓ: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD ଅଡିଓ"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"ଶ୍ରବଣ ଯନ୍ତ୍ର"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE ଅଡିଓ"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"ଶ୍ରବଣ ଯନ୍ତ୍ରକୁ ସଂଯୋଗ ହୋଇଛି"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"ଶ୍ରବଣ ଯନ୍ତ୍ର"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE ଅଡିଓ"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"ଶ୍ରବଣ ଯନ୍ତ୍ର ସହ କନେକ୍ଟ କରାଯାଇଛି"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE ଅଡିଓ ସହ କନେକ୍ଟ କରାଯାଇଛି"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"ମିଡିଆ ଅଡିଓ ସହ ସଂଯୁକ୍ତ"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"ଫୋନ୍‌ ଅଡିଓ ସହିତ ସଂଯୁକ୍ତ"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"ଫୋନ୍‌ ଅଡିଓ ପାଇଁ ବ୍ୟବହାର କର"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ଫାଇଲ୍‌ ଟ୍ରାନ୍ସଫର୍‌ ପାଇଁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ଇନ୍‌ପୁଟ୍‌ ପାଇଁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"ଶ୍ରବଣ ଯନ୍ତ୍ର ପାଇଁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"ଶ୍ରବଣ ଯନ୍ତ୍ର ପାଇଁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO ପାଇଁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"ପେୟାର୍‌"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ପେୟାର୍‌"</string>
@@ -174,7 +174,7 @@
     <string name="launch_defaults_some" msgid="3631650616557252926">"କିଛି ପୂର୍ବ-ନିର୍ଦ୍ଧାରିତ ମାନ ସେଟ୍‌ ହୋଇଛି"</string>
     <string name="launch_defaults_none" msgid="8049374306261262709">"କୌଣସି ଡିଫଲ୍ଟ ସେଟ୍‍ ହୋଇନାହିଁ"</string>
     <string name="tts_settings" msgid="8130616705989351312">"ଟେକ୍ସଟ୍-ଟୁ-ସ୍ପିଚ୍ ସେଟିଂସ"</string>
-    <string name="tts_settings_title" msgid="7602210956640483039">"ଟେକ୍ସଟ୍‍-ଟୁ-ସ୍ପିଚ୍‍ ଆଉଟ୍‍ପୁଟ୍‌"</string>
+    <string name="tts_settings_title" msgid="7602210956640483039">"ଟେକ୍ସଟ-ଟୁ-ସ୍ପିଚ ଆଉଟପୁଟ"</string>
     <string name="tts_default_rate_title" msgid="3964187817364304022">"ସ୍ପିଚ୍‌ ରେଟ୍"</string>
     <string name="tts_default_rate_summary" msgid="3781937042151716987">"ଲେଖା ପଢ଼ିବାର ବେଗ"</string>
     <string name="tts_default_pitch_title" msgid="6988592215554485479">"ପିଚ୍‌"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"ପ୍ରୋଫାଇଲ୍‌ ବାଛନ୍ତୁ"</string>
     <string name="category_personal" msgid="6236798763159385225">"ବ୍ୟକ୍ତିଗତ"</string>
     <string name="category_work" msgid="4014193632325996115">"ୱାର୍କ"</string>
+    <string name="category_clone" msgid="1554511758987195974">"କ୍ଲୋନ"</string>
     <string name="development_settings_title" msgid="140296922921597393">"ଡେଭଲପରଙ୍କ ପାଇଁ ବିକଳ୍ପଗୁଡ଼ିକ"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"ଡେଭଲପର୍‌ ବିକଳ୍ପଗୁଡ଼ିକ ସକ୍ଷମ କରନ୍ତୁ"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"ଆପ୍‌ର ବିକାଶ ପାଇଁ ବିକଳ୍ପମାନ ସେଟ୍‌ କରନ୍ତୁ"</string>
@@ -249,7 +250,7 @@
     <string name="adb_wireless_verifying_qrcode_text" msgid="6123192424916029207">"ଡିଭାଇସ୍ ପେୟାର୍ କରାଯାଉଛି…"</string>
     <string name="adb_qrcode_pairing_device_failed_msg" msgid="6936292092592914132">"ଡିଭାଇସରୁ ପେୟାର୍ ହେବାରେ ବିଫଳ ହୋଇଛି। QR କୋଡ୍ ସଠିକ୍ ନଥିଲା ବା ଡିଭାଇସ୍ ସମାନ ନେଟୱାର୍କରେ ସଂଯୋଗ ହୋଇନାହିଁ।"</string>
     <string name="adb_wireless_ip_addr_preference_title" msgid="8335132107715311730">"IP ଠିକଣା ଓ ପୋର୍ଟ"</string>
-    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR କୋଡ୍ ସ୍କାନ୍ କରନ୍ତୁ"</string>
+    <string name="adb_wireless_qrcode_pairing_title" msgid="1906409667944674707">"QR କୋଡ ସ୍କାନ କରନ୍ତୁ"</string>
     <string name="adb_wireless_qrcode_pairing_description" msgid="6014121407143607851">"ଏକ QR କୋଡ୍ ସ୍କାନ୍ କରି ୱାଇ-ଫାଇ ମାଧ୍ୟମରେ ଡିଭାଇସ୍ ପେୟାର୍ କରନ୍ତୁ"</string>
     <string name="adb_wireless_no_network_msg" msgid="2365795244718494658">"ଦୟାକରି ଏକ ୱାଇ-ଫାଇ ନେଟୱାର୍କରେ ସଂଯୋଗ କରନ୍ତୁ"</string>
     <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, ଡିବଗ୍, dev"</string>
@@ -269,10 +270,10 @@
     <string name="debug_networking_category" msgid="6829757985772659599">"ନେଟ୍‌ୱର୍କିଙ୍ଗ"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"ୱାୟରଲେସ୍‌ ଡିସ୍‌ପ୍ଲେ ସାର୍ଟିଫିକେସନ୍"</string>
     <string name="wifi_verbose_logging" msgid="1785910450009679371">"ୱାଇ-ଫାଇ ଭର୍ବୋସ୍‌ ଲଗିଙ୍ଗ ସକ୍ଷମ କରନ୍ତୁ"</string>
-    <string name="wifi_scan_throttling" msgid="2985624788509913617">"ୱାଇ-ଫାଇ ସ୍କାନ୍ ନିୟନ୍ତ୍ରଣ"</string>
-    <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"ୱାଇ-ଫାଇ ଅଣ-ଅବିରତ MAC ରେଣ୍ଡମାଇଜେସନ୍"</string>
-    <string name="mobile_data_always_on" msgid="8275958101875563572">"ମୋବାଇଲ୍‌ ଡାଟା ସର୍ବଦା ସକ୍ରିୟ"</string>
-    <string name="tethering_hardware_offload" msgid="4116053719006939161">"ଟିଥରିଙ୍ଗ ହାର୍ଡୱେର ଆକ୍ସିଲିରେସନ୍"</string>
+    <string name="wifi_scan_throttling" msgid="2985624788509913617">"ୱାଇ-ଫାଇ ସ୍କାନ ନିୟନ୍ତ୍ରଣ"</string>
+    <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"ୱାଇ-ଫାଇ ଅଣ-ଅବିରତ MAC ରେଣ୍ଡମାଇଜେସନ"</string>
+    <string name="mobile_data_always_on" msgid="8275958101875563572">"ମୋବାଇଲ ଡାଟା ସର୍ବଦା ସକ୍ରିୟ"</string>
+    <string name="tethering_hardware_offload" msgid="4116053719006939161">"ଟିଥରିଙ୍ଗ ହାର୍ଡୱେର ଆକ୍ସିଲିରେସନ"</string>
     <string name="bluetooth_show_devices_without_names" msgid="923584526471885819">"ବ୍ଲୁଟୂଥ ଡିଭାଇସଗୁଡ଼ିକୁ ନାମ ବିନା ଦେଖାନ୍ତୁ"</string>
     <string name="bluetooth_disable_absolute_volume" msgid="1452342324349203434">"ପୂର୍ଣ୍ଣ ଭଲ୍ୟୁମ୍‌ ଅକ୍ଷମ କରନ୍ତୁ"</string>
     <string name="bluetooth_enable_gabeldorsche" msgid="9131730396242883416">"ଗାବେଲ୍‌ଡୋର୍ସ ସକ୍ରିୟ କରନ୍ତୁ"</string>
@@ -287,7 +288,7 @@
     <string name="bluetooth_select_a2dp_codec_type_help_info" msgid="8647200416514412338">"ଗ୍ରେ-ଆଉଟ୍ ଅର୍ଥ ଫୋନ୍ କିମ୍ବା ହେଡ୍‌ସେଟ୍‌ରେ ସମର୍ଥନ କରୁନାହିଁ"</string>
     <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="6253965294594390806">"ନମୁନା ପିଛା ବ୍ଲୁଟୂଥ୍‍‌ ଅଡିଓ ବିଟ୍ସ"</string>
     <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="4898693684282596143">"ବ୍ଲୁଟୂଥ୍‍ ଅଡିଓ କୋଡେକ୍\nସିଲେକ୍ସନ୍‌କୁ ଗତିଶୀଳ କରନ୍ତୁ: ନମୁନା ପିଛା ବିଟ୍ସ"</string>
-    <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="364277285688014427">"ବ୍ଲୁଟୂଥ୍‍‌ ଅଡିଓ ଚ୍ୟାନେଲ୍‌ ମୋଡ୍"</string>
+    <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="364277285688014427">"ବ୍ଲୁଟୁଥ ଅଡିଓ ଚେନେଲ ମୋଡ"</string>
     <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="2076949781460359589">"ବ୍ଲୁଟୂଥ୍‍ ଅଡିଓ କୋଡେକ୍\nସିଲେକ୍ସନ୍‌କୁ ଗତିଶୀଳ କରନ୍ତୁ: ଚ୍ୟାନେଲ୍ ମୋଡ୍"</string>
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3233402355917446304">"ବ୍ଲୁଟୂଥ୍‍‌ ଅଡିଓ LDAC କୋଡେକ୍‌: ପ୍ଲେବ୍ୟାକ୍‌ ଗୁଣବତ୍ତା"</string>
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="7274396574659784285">"ବ୍ଲୁ-ଟୁଥ୍‌ ଅଡିଓ LDAC\nକୋଡେକ୍‌ ଚୟନକୁ ଗତିଶୀଳ କରନ୍ତୁ: ପ୍ଲେବ୍ୟାକ୍‌ କ୍ୱାଲିଟୀ"</string>
@@ -301,23 +302,23 @@
     <string name="private_dns_mode_provider_failure" msgid="8356259467861515108">"କନେକ୍ଟ କରିହେଲା ନାହିଁ"</string>
     <string name="wifi_display_certification_summary" msgid="8111151348106907513">"ୱେୟାରଲେସ୍‌ ଡିସ୍‌ପ୍ଲେ ସାର୍ଟିଫିକେସନ୍ ପାଇଁ ବିକଳ୍ପ ଦେଖାନ୍ତୁ"</string>
     <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"ୱାଇ-ଫାଇ ଲଗିଙ୍ଗ ସ୍ତର ବଢ଼ାନ୍ତୁ, ୱାଇ-ଫାଇ ପିକର୍‌ରେ ପ୍ରତି SSID RSSI ଦେଖାନ୍ତୁ"</string>
-    <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କମ୍ ଏବଂ ନେଟ୍‌ୱାର୍କ କାର୍ଯ୍ୟକ୍ଷମତା ଉନ୍ନତ କରିଥାଏ"</string>
-    <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"ଯେତେବେଳେ ଏହି ମୋଡ୍ ସକ୍ଷମ କରାଯାଏ, ପ୍ରତ୍ୟେକ ଥର MAC ରେଣ୍ଡୋମାଇଜେସନ୍ ସକ୍ଷମ ଥିବା କୌଣସି ନେଟୱାର୍କ ସହ ଏହି ଡିଭାଇସ୍ ସଂଯୋଗ ହେଲେ ଏହାର MAC ଠିକଣା ବଦଳିପାରେ।"</string>
+    <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"ବେଟେରୀ ଖର୍ଚ୍ଚକୁ କମ ଏବଂ ନେଟୱାର୍କ କାର୍ଯ୍ୟକ୍ଷମତାକୁ ଉନ୍ନତ କରିଥାଏ"</string>
+    <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"ଯେତେବେଳେ ଏହି ମୋଡକୁ ସକ୍ଷମ କରାଯାଏ, ପ୍ରତ୍ୟେକ ଥର MAC ରେଣ୍ଡମାଇଜେସନ ସକ୍ଷମ ଥିବା କୌଣସି ନେଟୱାର୍କ ସହ ଏହି ଡିଭାଇସ ସଂଯୋଗ ହେଲେ ଏହାର MAC ଠିକଣା ବଦଳିପାରେ।"</string>
     <string name="wifi_metered_label" msgid="8737187690304098638">"ମପାଯାଉଥିବା"</string>
     <string name="wifi_unmetered_label" msgid="6174142840934095093">"ମପାଯାଉନଥିବା"</string>
     <string name="select_logd_size_title" msgid="1604578195914595173">"ଲଗର୍‌ ବଫର୍‌ ସାଇଜ୍"</string>
     <string name="select_logd_size_dialog_title" msgid="2105401994681013578">"ଲଗ୍‌ ବଫର୍‌ ପିଛା ଲଗର୍‌ ଆକାରଗୁଡିକର ଚୟନ କରନ୍ତୁ"</string>
     <string name="dev_logpersist_clear_warning_title" msgid="8631859265777337991">"ଲଗର୍‌ ରୋଧି ଷ୍ଟୋରେଜ୍‌ ଖାଲି କରିବେ?"</string>
     <string name="dev_logpersist_clear_warning_message" msgid="6447590867594287413">"ଯଦି ଆମେ ଦୃଢ ଲଗର୍‌ ସହିତ ଆଉ ତଦାରଖ କରୁନଥିବୁ, ତେବେ ଆମକୁ ଆପଣଙ୍କ ଡିଭାଇସ୍‌ରେ ଥିବା ଲଗର୍‌ ଡାଟାକୁ ଲିଭାଇବାକୁ ପଡ଼ିବ।"</string>
-    <string name="select_logpersist_title" msgid="447071974007104196">"ଡିଭାଇସ୍‌ରେ ଲଗାତାର ଲଗର୍‌ ଡାଟା ଷ୍ଟୋର୍‌ କରନ୍ତୁ"</string>
+    <string name="select_logpersist_title" msgid="447071974007104196">"ଡିଭାଇସରେ ନିରନ୍ତର ଲଗର ଡାଟା ଷ୍ଟୋର କରନ୍ତୁ"</string>
     <string name="select_logpersist_dialog_title" msgid="7745193591195485594">"ଡିଭାଇସ୍‌ରେ ଲଗାତର ଷ୍ଟୋର୍‌ କରିବାକୁ ଲଗ୍‌ ବଫର୍‌ ଚୟନ କରନ୍ତୁ"</string>
     <string name="select_usb_configuration_title" msgid="6339801314922294586">"USB କନଫିଗ୍ୟୁରେସନ୍‌ ଚୟନ କରନ୍ତୁ"</string>
     <string name="select_usb_configuration_dialog_title" msgid="3579567144722589237">"USB କନଫିଗ୍ୟୁରେସନ୍‌ ଚୟନ କରନ୍ତୁ"</string>
     <string name="allow_mock_location" msgid="2102650981552527884">"ନକଲି ଲୋକେଶନ୍‌ର ଅନୁମତି ଦିଅନ୍ତୁ"</string>
     <string name="allow_mock_location_summary" msgid="179780881081354579">"ନକଲି ଲୋକେଶନ୍‌ର ଅନୁମତି ଦିଅନ୍ତୁ"</string>
     <string name="debug_view_attributes" msgid="3539609843984208216">"ବିଶେଷତା ଯାଞ୍ଚ ଭ୍ୟୁକୁ ସକ୍ଷମ କରନ୍ତୁ"</string>
-    <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"ୱାଇ-ଫାଇ ସକ୍ରିୟ ଥିଲେ ମଧ୍ୟ ସର୍ବଦା ମୋବାଇଲ୍‌ ଡାଟାକୁ ସକ୍ରିୟ ରଖନ୍ତୁ (ଦ୍ରୁତ ନେଟ୍‌ୱର୍କ ସ୍ୱିଚିଙ୍ଗ ପାଇଁ)।"</string>
-    <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"ଯଦି ଉପଲବ୍ଧ ଥାଏ, ଟିଥରିଙ୍ଗ ହାର୍ଡୱେର୍‌ ଆକ୍ସିଲିରେସନ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+    <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"ୱାଇ-ଫାଇ ସକ୍ରିୟ ଥିଲେ ମଧ୍ୟ ସର୍ବଦା ମୋବାଇଲ ଡାଟାକୁ ସକ୍ରିୟ ରଖନ୍ତୁ (ଦ୍ରୁତ ନେଟୱାର୍କ ସ୍ୱିଚିଂ ପାଇଁ)।"</string>
+    <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"ଯଦି ଉପଲବ୍ଧ ଥାଏ, ତେବେ ଟିଥରିଙ୍ଗ ହାର୍ଡୱେର ଆକ୍ସିଲିରେସନକୁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"USB ଡିବଗିଙ୍ଗ କରିବେ?"</string>
     <string name="adb_warning_message" msgid="8145270656419669221">"USB ଡିବଗିଂ କେବଳ ଡେଭଲପମେଣ୍ଟ ଉଦ୍ଦେଶ୍ୟ ପାଇଁ ଉଦ୍ଦିଷ୍ଟ ଅଟେ। ଆପଣଙ୍କ କମ୍ପ୍ୟୁଟର ଏବଂ ଡିଭାଇସ୍‌ ମଧ୍ୟରେ ଡାଟା କପି କରିବାକୁ, ବିନା ବିଜ୍ଞପ୍ତିରେ ଆପଣଙ୍କ ଡିଭାଇସରେ ଆପସ୍‌ ସଂସ୍ଥାପନ କରିବାକୁ, ଏବଂ ଲଗ୍‌ ଡାଟା ପଢିବାକୁ ଏହା ବ୍ୟବହାର କରନ୍ତୁ।"</string>
     <string name="adbwifi_warning_title" msgid="727104571653031865">"ୱାୟାରଲେସ୍ ଡିବଗିଂ ପାଇଁ ଅନୁମତି ଦେବେ?"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"ଏବେର ଟଚ୍‌ ଡାଟା ଦେଖାଉଥିବା ସ୍କ୍ରୀନ୍‌ ଓଭର୍‌ଲେ"</string>
     <string name="show_touches" msgid="8437666942161289025">"ଟାପ୍‌ ଦେଖାନ୍ତୁ"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"ଟାପ୍ ପାଇଁ ଭିଜୁଆଲ୍ ମତାମତ ଦେଖାନ୍ତୁ"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"ଦବାଯାଇଥିବା କୀ ଦେଖାନ୍ତୁ"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"ଦବାଯାଇଥିବା ଫିଜିକାଲ କୀ ପାଇଁ ଭିଜୁଆଲ ମତାମତ ଦେଖାନ୍ତୁ"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"ସର୍ଫେସ୍‌ ଅପଡେଟ୍‌ ଦେଖାନ୍ତୁ"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"ସମଗ୍ର ୱିଣ୍ଡୋ ପୃଷ୍ଠ ଅପଡେଟ୍‌ ହେବା ବେଳେ ସେଗୁଡ଼ିକ ଫ୍ଲାସ୍‌ କରନ୍ତୁ"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"ଭ୍ୟୁ ଅପଡେଟ୍‌ଗୁଡ଼ିକୁ ଦେଖାନ୍ତୁ"</string>
@@ -389,7 +392,7 @@
     <string name="debug_applications_category" msgid="5394089406638954196">"ଆପ୍ସ"</string>
     <string name="immediately_destroy_activities" msgid="1826287490705167403">"କାର୍ଯ୍ୟକଳାପଗୁଡ଼ିକୁ ରଖନ୍ତୁ ନାହିଁ"</string>
     <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"ୟୁଜର୍ ଏହାକୁ ଛାଡ଼ିବା କ୍ଷଣି ସମସ୍ତ କାର୍ଯ୍ୟକଳାପ ନଷ୍ଟ କରିଦିଅନ୍ତୁ"</string>
-    <string name="app_process_limit_title" msgid="8361367869453043007">"ବ୍ୟାକ୍‌ଗ୍ରାଉଣ୍ଡ ପ୍ରୋସେସ୍ ସୀମା"</string>
+    <string name="app_process_limit_title" msgid="8361367869453043007">"ବେକଗ୍ରାଉଣ୍ଡ ପ୍ରୋସେସ ସୀମା"</string>
     <string name="show_all_anrs" msgid="9160563836616468726">"ବ୍ୟାକଗ୍ରାଉଣ୍ଡରେ ଥିବା ANRଗୁଡ଼ିକୁ ଦେଖାନ୍ତୁ"</string>
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"ବ୍ୟାକ୍‌ଗ୍ରାଉଣ୍ଡ ଆପ୍‌ଗୁଡ଼ିକ ପାଇଁ \"ଆପ୍‌ ଉତ୍ତର ଦେଉନାହିଁ\" ଡାୟଲଗ୍‌ ଦେଖାନ୍ତୁ"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"ବିଜ୍ଞପ୍ତି ଚ୍ୟାନେଲ୍ ଚେତାବନୀ ଦେଖାନ୍ତୁ"</string>
@@ -397,11 +400,11 @@
     <string name="force_allow_on_external" msgid="9187902444231637880">"ଆପ୍‌କୁ ଏକ୍ସଟର୍ନଲ୍ ମେମୋରୀରେ ଫୋର୍ସ୍ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"ଯେକୌଣସି ଆପ୍‌କୁ ଏକ୍ସଟର୍ନଲ୍ ଷ୍ଟୋରେଜ୍‌ରେ ଲେଖାଯୋଗ୍ୟ କରନ୍ତୁ, ମେନିଫେଷ୍ଟ ମୂଲ୍ୟ ଯାହା ହୋଇଥାଉ ନା କାହିଁକି"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"ୱିଣ୍ଡୋ ହିସାବରେ କାର୍ଯ୍ୟକଳାପର ଆକାର ବଦଳାନ୍ତୁ"</string>
-    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"ୱିଣ୍ଡୋ ହିସାବରେ କାର୍ଯ୍ୟକଳାପଗୁଡ଼ିକୁ ବଦଳାନ୍ତୁ, ସେଗୁଡ଼ିକର ମାନିଫେଷ୍ଟ ଭାଲ୍ୟୁ ଯାହା ହୋଇଥାଉ ନା କାହିଁକି"</string>
-    <string name="enable_freeform_support" msgid="7599125687603914253">"ଫ୍ରୀଫର୍ମ ୱିଣ୍ଡୋ ସକ୍ଷମ କରନ୍ତୁ"</string>
-    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"ପରୀକ୍ଷାମୂଳକ ଫ୍ରୀଫର୍ମ ୱିଣ୍ଡୋସ୍‌ ପାଇଁ ସପୋର୍ଟ ସକ୍ଷମ କରନ୍ତୁ।"</string>
+    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"ମାନିଫେଷ୍ଟ ମୂଲ୍ୟ ଯାହା ହୋଇଥାଉ ନା କାହିଁକି, ଏକାଧିକ-ୱିଣ୍ଡୋ ପାଇଁ ସମସ୍ତ କାର୍ଯ୍ୟକଳାପକୁ ରିସାଇଜ କରନ୍ତୁ।"</string>
+    <string name="enable_freeform_support" msgid="7599125687603914253">"ଫ୍ରିଫର୍ମ ୱିଣ୍ଡୋକୁ ସକ୍ଷମ କରନ୍ତୁ"</string>
+    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"ପରୀକ୍ଷାମୂଳକ ଫ୍ରିଫର୍ମ ୱିଣ୍ଡୋଗୁଡ଼ିକ ପାଇଁ ସପୋର୍ଟକୁ ସକ୍ଷମ କରନ୍ତୁ।"</string>
     <string name="desktop_mode" msgid="2389067840550544462">"ଡେସ୍କଟପ ମୋଡ"</string>
-    <string name="local_backup_password_title" msgid="4631017948933578709">"ଡେସ୍କଟପ୍‌ ବ୍ୟାକଅପ୍‌ ପାସ୍‌ୱର୍ଡ"</string>
+    <string name="local_backup_password_title" msgid="4631017948933578709">"ଡେସ୍କଟପ ବେକଅପ ପାସୱାର୍ଡ"</string>
     <string name="local_backup_password_summary_none" msgid="7646898032616361714">"ଡେସ୍କଟପ୍‌ର ସମ୍ପୂର୍ଣ୍ଣ ବ୍ୟାକଅପ୍‌ଗୁଡ଼ିକ ବର୍ତ୍ତମାନ ସୁରକ୍ଷିତ ନୁହେଁ"</string>
     <string name="local_backup_password_summary_change" msgid="1707357670383995567">"ଡେସ୍କଟପ୍‌ର ସମ୍ପୂର୍ଣ୍ଣ ବ୍ୟାକ୍‌ଅପ୍‌ ପାଇଁ ପାସ୍‌ୱର୍ଡ ବଦଳାଇବା କିମ୍ୱା କାଢ଼ିଦେବା ନିମନ୍ତେ ଟାପ୍‌ କରନ୍ତୁ"</string>
     <string name="local_backup_password_toast_success" msgid="4891666204428091604">"ନୂଆ ବ୍ୟାକ୍‌ଅପ୍‌ ପାସ୍‌ୱର୍ଡ ସେଟ୍‌ କରିଦିଆଗଲା"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ଅଧିକ ସମୟ।"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"କମ୍ ସମୟ।"</string>
     <string name="cancel" msgid="5665114069455378395">"ବାତିଲ"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"ପରବର୍ତ୍ତୀ"</string>
+    <string name="back" msgid="5554327870352703710">"ପଛକୁ ଫେରନ୍ତୁ"</string>
+    <string name="save" msgid="3745809743277153149">"ସେଭ କରନ୍ତୁ"</string>
     <string name="okay" msgid="949938843324579502">"ଠିକ୍‌ ଅଛି"</string>
     <string name="done" msgid="381184316122520313">"ହୋଇଗଲା"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"ଆଲାରାମ୍ ଏବଂ ରିମାଇଣ୍ଡରଗୁଡ଼ିକ"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"ଏହିକ୍ଷଣି"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"ଏହି ଫୋନ"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"ଏହି ଟାବଲେଟ"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"ଡକ ସ୍ପିକର"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"ଏକ୍ସଟର୍ନଲ ଡିଭାଇସ"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"କନେକ୍ଟ କରାଯାଇଥିବା ଡିଭାଇସ"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"ଏହି ଫୋନ୍"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"ଏହି ଡିଭାଇସରେ ପ୍ଲେ କରାଯାଇପାରିବ ନାହିଁ"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"ସ୍ୱିଚ କରିବା ପାଇଁ ଆକାଉଣ୍ଟକୁ ଅପଗ୍ରେଡ କରନ୍ତୁ"</string>
@@ -574,36 +577,33 @@
     <string name="delete_blob_confirmation_text" msgid="7807446938920827280">"ଆପଣ ସେୟାର୍ କରାଯାଇଥିବା ଏହି ଡାଟା ଡିଲିଟ୍ କରିବାକୁ ଚାହୁଁଥିବା ନିଶ୍ଚିତ କି?"</string>
     <string name="user_add_user_item_summary" msgid="5748424612724703400">"ଉପଯୋଗକର୍ତ୍ତାମାନଙ୍କ ପାଖରେ ନିଜର ଆପ୍‌ ଓ କଣ୍ଟେଣ୍ଟ ଅଛି"</string>
     <string name="user_add_profile_item_summary" msgid="5418602404308968028">"ନିଜ ଆକାଉଣ୍ଟରୁ ଆପ୍‌ ତଥା କଣ୍ଟେଣ୍ଟକୁ ଆପଣ ଆକ୍ସେସ୍ ରୋକିପାରିବେ"</string>
-    <string name="user_add_user_item_title" msgid="2394272381086965029">"ଉପଯୋଗକର୍ତ୍ତା"</string>
+    <string name="user_add_user_item_title" msgid="2394272381086965029">"ୟୁଜର"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"ସୀମିତ ସୁବିଧା ଥିବା ପ୍ରୋଫାଇଲ୍‌"</string>
-    <string name="user_add_user_title" msgid="5457079143694924885">"ନୂତନ ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ଯୋଗ କରିବେ?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"ଅତିରିକ୍ତ ଉପଯୋଗକର୍ତ୍ତା ଯୋଗ କରି ଆପଣ ଏହି ଡିଭାଇସକୁ ଅନ୍ୟ ଲୋକମାନଙ୍କ ସହିତ ସେୟାର କରିପାରିବେ। ପ୍ରତ୍ୟେକ ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ନିଜର ସ୍ପେସ୍ ଅଛି ଯାହାକୁ ସେମାନେ ଆପ, ୱାଲପେପର୍ ଓ ଏପରି ଅନେକ କିଛି ସହିତ କଷ୍ଟମାଇଜ କରିପାରିବେ। ଉପଯୋଗକର୍ତ୍ତା ୱାଇ-ଫାଇ ଭଳି ଡିଭାଇସ ସେଟିଂସକୁ ମଧ୍ୟ ଆଡଜଷ୍ଟ କରିପାରିବେ ଯାହା ସମସ୍ତଙ୍କୁ ପ୍ରଭାବିତ କରିଥାଏ। \n\nଯେତେବେଳେ ଆପଣ ଗୋଟିଏ ନୂଆ ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ଯୋଗ କରିବେ, ସେତେବେଳେ ସେହି ବ୍ୟକ୍ତିଙ୍କୁ ନିଜର ସ୍ପେସ୍‌କୁ ସେଟ‌ଅପ କରିବାକୁ ପଡ଼ିବ। \n\nଅନ୍ୟ ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ପାଇଁ ଯେ କୌଣସି ଉପଯୋଗକର୍ତ୍ତା ଆପକୁ ଅପଡେଟ କରିପାରିବେ। ଆକ୍ସେସିବିଲିଟୀ ସେଟିଂସ ଏବଂ ସେବାଗୁଡ଼ିକ ନୂଆ ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ସ୍ଥାନାନ୍ତର ହୋ‌ଇନପାରେ।"</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"ଆପଣ ଜଣେ ନୂଆ ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ଯୋଗ କରିବା ବେଳେ, ସେହି ବ୍ୟକ୍ତିଙ୍କୁ ତାଙ୍କ ସ୍ପେସ ସେଟ ଅପ କରିବାକୁ ପଡ଼ିବ।\n\nଅନ୍ୟ ସମସ୍ତ ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ପାଇଁ, ଆପଗୁଡ଼ିକୁ ଯେ କୌଣସି ଉପଯୋଗକର୍ତ୍ତା ଅପଡେଟ କରିପାରିବେ।"</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_title" msgid="5457079143694924885">"ନୂଆ ୟୁଜରଙ୍କୁ ଯୋଗ କରିବେ?"</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"ଅତିରିକ୍ତ ୟୁଜରଙ୍କୁ ଯୋଗ କରି ଆପଣ ଏହି ଡିଭାଇସକୁ ଅନ୍ୟ ଲୋକମାନଙ୍କ ସହିତ ସେୟାର କରିପାରିବେ। ପ୍ରତ୍ୟେକ ୟୁଜରଙ୍କ ନିଜର ସ୍ପେସ ଅଛି ଯାହାକୁ ସେମାନେ ଆପ, ୱାଲପେପର ଓ ଏପରି ଅନେକ କିଛି ସହିତ କଷ୍ଟମାଇଜ କରିପାରିବେ। ୟୁଜର ୱାଇ-ଫାଇ ଭଳି ଡିଭାଇସ ସେଟିଂସକୁ ମଧ୍ୟ ଆଡଜଷ୍ଟ କରିପାରିବେ ଯାହା ସମସ୍ତଙ୍କୁ ପ୍ରଭାବିତ କରିଥାଏ। \n\nଯେତେବେଳେ ଆପଣ ଜଣେ ନୂଆ ୟୁଜରଙ୍କୁ ଯୋଗ କରିବେ, ସେତେବେଳେ ସେହି ବ୍ୟକ୍ତିଙ୍କୁ ନିଜର ସ୍ପେସକୁ ସେଟ‌ଅପ କରିବାକୁ ପଡ଼ିବ। \n\nଅନ୍ୟ ୟୁଜରଙ୍କ ପାଇଁ ଯେ କୌଣସି ୟୁଜର ଆପକୁ ଅପଡେଟ କରିପାରିବେ। ଆକ୍ସେସିବିଲିଟୀ ସେଟିଂସ ଏବଂ ସେବାଗୁଡ଼ିକ ନୂଆ ୟୁଜରଙ୍କୁ ସ୍ଥାନାନ୍ତର ହୋ‌ଇନପାରେ।"</string>
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"ଆପଣ ଜଣେ ନୂଆ ୟୁଜରଙ୍କୁ ଯୋଗ କରିବା ବେଳେ, ସେହି ବ୍ୟକ୍ତିଙ୍କୁ ତାଙ୍କ ସ୍ପେସ ସେଟ ଅପ କରିବାକୁ ପଡ଼ିବ।\n\nଅନ୍ୟ ସମସ୍ତ ୟୁଜରଙ୍କ ପାଇଁ ଆପ୍ସକୁ ଯେ କୌଣସି ୟୁଜର ଅପଡେଟ କରିପାରିବେ।"</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"ଏହି ୟୁଜରଙ୍କୁ ଜଣେ ଆଡମିନ କରିବେ?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"ଆଡମିନମାନଙ୍କର ବିଶେଷ ଅଧିକାରଗୁଡ଼ିକ ଥାଏ ଯାହା ଅନ୍ୟ ୟୁଜରମାନଙ୍କର ନଥାଏ। ଜଣେ ଆଡମିନ ସମସ୍ତ ୟୁଜରଙ୍କୁ ପରିଚାଳନା କରିପାରିବେ, ଏହି ଡିଭାଇସକୁ ଅପଡେଟ କିମ୍ବା ରିସେଟ କରିପାରିବେ, ସେଟିଂସ ପରିବର୍ତ୍ତନ କରିପାରିବେ, ଇନଷ୍ଟଲ କରାଯାଇଥିବା ସମସ୍ତ ଆପ୍ସ ଦେଖିପାରିବେ ଏବଂ ଅନ୍ୟମାନଙ୍କ ପାଇଁ ଆଡମିନଙ୍କ ବିଶେଷ ଅଧିକାରଗୁଡ଼ିକୁ ଅନୁମତି ଦେଇପାରିବେ କିମ୍ବା ପ୍ରତ୍ୟାହାର କରିପାରିବେ।"</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"ଆଡମିନ କରନ୍ତୁ"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"ଏବେ ଉପଯୋଗକର୍ତ୍ତା ସେଟଅପ କରିବେ?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"ସୁନିଶ୍ଚିତ କରନ୍ତୁ ଯେ, ବ୍ୟକ୍ତି ଜଣକ ଡିଭାଇସ୍‌ ଓ ନିଜର ସ୍ଥାନ ସେଟଅପ୍‌ କରିବା ପାଇଁ ଉପଲବ୍ଧ ଅଛନ୍ତି।"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ପ୍ରୋଫାଇଲ୍‌କୁ ଏବେ ସେଟ୍‌ କରିବେ?"</string>
     <string name="user_setup_button_setup_now" msgid="1708269547187760639">"ଏବେ ସେଟଅପ୍ କରନ୍ତୁ"</string>
     <string name="user_setup_button_setup_later" msgid="8712980133555493516">"ଏବେ ନୁହେଁଁ"</string>
     <string name="user_add_user_type_title" msgid="551279664052914497">"ଯୋଡନ୍ତୁ"</string>
-    <string name="user_new_user_name" msgid="60979820612818840">"ନୂଆ ଉପଯୋଗକର୍ତ୍ତା"</string>
+    <string name="user_new_user_name" msgid="60979820612818840">"ନୂଆ ୟୁଜର"</string>
     <string name="user_new_profile_name" msgid="2405500423304678841">"ନୂଆ ପ୍ରୋଫାଇଲ୍‌"</string>
-    <string name="user_info_settings_title" msgid="6351390762733279907">"ଉପଯୋଗକର୍ତ୍ତା ସୂଚନା"</string>
+    <string name="user_info_settings_title" msgid="6351390762733279907">"ୟୁଜର ସୂଚନା"</string>
     <string name="profile_info_settings_title" msgid="105699672534365099">"ପ୍ରୋଫାଇଲ୍ ସୂଚନା"</string>
     <string name="user_need_lock_message" msgid="4311424336209509301">"ପ୍ରତିବନ୍ଧିତ ପ୍ରୋଫାଇଲ୍‌ ତିଆରି କରିବାବେଳେ, ନିଜ ଆପ୍‌ ଓ ବ୍ୟକ୍ତିଗତ ତଥ୍ୟର ସୁରକ୍ଷା ପାଇଁ ଏକ ସ୍କ୍ରୀନ୍‌ ଲକ୍‌ ସେଟ୍‌ କରନ୍ତୁ।"</string>
     <string name="user_set_lock_button" msgid="1427128184982594856">"ଲକ୍‌ ସେଟ୍‌ କରନ୍ତୁ"</string>
-    <string name="user_switch_to_user" msgid="6975428297154968543">"<xliff:g id="USER_NAME">%s</xliff:g>କୁ ସ୍ୱିଚ୍ କରନ୍ତୁ"</string>
-    <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"ନୂଆ ଉପଯୋଗକର୍ତ୍ତା ତିଆରି କରାଯାଉଛି…"</string>
+    <string name="user_switch_to_user" msgid="6975428297154968543">"<xliff:g id="USER_NAME">%s</xliff:g>କୁ ସୁଇଚ କରନ୍ତୁ"</string>
+    <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"ନୂଆ ୟୁଜର ତିଆରି କରାଯାଉଛି…"</string>
     <string name="creating_new_guest_dialog_message" msgid="1114905602181350690">"ନୂଆ ଅତିଥି ତିଆରି କରାଯାଉଛି…"</string>
     <string name="add_user_failed" msgid="4809887794313944872">"ନୂଆ ଉପଯୋଗକର୍ତ୍ତା ତିଆରି କରିବାକୁ ବିଫଳ ହେଲା"</string>
     <string name="add_guest_failed" msgid="8074548434469843443">"ଜଣେ ନୂଆ ଅତିଥି ତିଆରି କରିବାରେ ବିଫଳ ହୋଇଛି"</string>
     <string name="user_nickname" msgid="262624187455825083">"ଡାକନାମ"</string>
-    <string name="user_add_user" msgid="7876449291500212468">"ଉପଯୋଗକର୍ତ୍ତା ଯୋଗ କରନ୍ତୁ"</string>
+    <string name="user_add_user" msgid="7876449291500212468">"ୟୁଜର ଯୋଗ କରନ୍ତୁ"</string>
     <string name="guest_new_guest" msgid="3482026122932643557">"ଅତିଥି ଯୋଗ କରନ୍ତୁ"</string>
     <string name="guest_exit_guest" msgid="5908239569510734136">"ଅତିଥିଙ୍କୁ କାଢ଼ି ଦିଅନ୍ତୁ"</string>
     <string name="guest_reset_guest" msgid="6110013010356013758">"ଅତିଥି ସେସନକୁ ରିସେଟ୍ କରନ୍ତୁ"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ଏହା ଏକ ନୂଆ ଅତିଥି ସେସନ ଆରମ୍ଭ କରିବ ଏବଂ ବର୍ତ୍ତମାନର ସେସନରୁ ସମସ୍ତ ଆପ୍ସ ଏବଂ ଡାଟାକୁ ଡିଲିଟ କରିବ"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"ଅତିଥି ମୋଡରୁ ବାହାରି ଯିବେ?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"ଏହା ବର୍ତ୍ତମାନର ଅତିଥି ସେସନରୁ ଆପ୍ସ ଏବଂ ଡାଟାକୁ ଡିଲିଟ କରିବ"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"ହଁ, ତାଙ୍କୁ ଜଣେ ଆଡମିନ କରନ୍ତୁ"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"ନା, ତାଙ୍କୁ ଜଣେ ଆଡମିନ କରନ୍ତୁ ନାହିଁ"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"ବାହାରି ଯାଆନ୍ତୁ"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"ଅତିଥି କାର୍ଯ୍ୟକଳାପ ସେଭ କରିବେ?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"ଆପଣ ଏବେର ସେସନରୁ କାର୍ଯ୍ୟକଳାପକୁ ସେଭ କରିପାରିବେ ବା ସବୁ ଆପ୍ସ ଓ ଡାଟାକୁ ଡିଲିଟ କରିପାରିବେ"</string>
@@ -684,8 +682,8 @@
     <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="268234802198852753">"ଯଦି ଆପଣ <xliff:g id="SWITCHAPP">%1$s</xliff:g> ବ୍ରଡକାଷ୍ଟ କରନ୍ତି କିମ୍ବା ଆଉଟପୁଟ ବଦଳାନ୍ତି, ତେବେ ଆପଣଙ୍କ ବର୍ତ୍ତମାନର ବ୍ରଡକାଷ୍ଟ ବନ୍ଦ ହୋଇଯିବ"</string>
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ବ୍ରଡକାଷ୍ଟ କରନ୍ତୁ"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"ଆଉଟପୁଟ ବଦଳାନ୍ତୁ"</string>
-    <string name="back_navigation_animation" msgid="8105467568421689484">"ପ୍ରେଡିକ୍ଟିଭ ବ୍ୟାକ ଆନିମେସନ"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"ପ୍ରେଡିକ୍ଟିଭ ବ୍ୟାକ ପାଇଁ ସିଷ୍ଟମ ଆନିମେସନଗୁଡ଼ିକୁ ସକ୍ଷମ କରନ୍ତୁ।"</string>
+    <string name="back_navigation_animation" msgid="8105467568421689484">"ପ୍ରେଡିକ୍ଟିଭ ବେକ ଆନିମେସନ"</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"ପ୍ରେଡିକ୍ଟିଭ ବେକ ପାଇଁ ସିଷ୍ଟମ ଆନିମେସନଗୁଡ଼ିକୁ ସକ୍ଷମ କରନ୍ତୁ।"</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"ଏହି ସେଟିଂ ପ୍ରେଡିକ୍ଟିଭ ଜେଶ୍ଚର ଆନିମେସନ ପାଇଁ ସିଷ୍ଟମ ଆନିମେସନଗୁଡ଼ିକୁ ସକ୍ଷମ କରେ। ଏଥିପାଇଁ ମାନିଫେଷ୍ଟ ଫାଇଲରେ ପ୍ରତି-ଆପ enableOnBackInvokedCallbackକୁ \"ଠିକ\"ରେ ସେଟ କରିବା ଆବଶ୍ୟକ।"</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"ବାମକୁ ମୁଭ କରନ୍ତୁ"</item>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"ଉପରକୁ ମୁଭ କରନ୍ତୁ"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"ନିର୍ଦ୍ଦିଷ୍ଟ କରାଯାଇନାହିଁ"</string>
+    <string name="neuter" msgid="2075249330106127310">"ନ୍ୟୁଟର"</string>
+    <string name="feminine" msgid="1529155595310784757">"ସ୍ତ୍ରୀଲିଙ୍ଗ"</string>
+    <string name="masculine" msgid="4653978041013996303">"ପୁଲିଙ୍ଗ"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-pa/arrays.xml b/packages/SettingsLib/res/values-pa/arrays.xml
index 533788a..0ac6bb5 100644
--- a/packages/SettingsLib/res/values-pa/arrays.xml
+++ b/packages/SettingsLib/res/values-pa/arrays.xml
@@ -200,7 +200,7 @@
   </string-array>
   <string-array name="select_logpersist_summaries">
     <item msgid="97587758561106269">"ਬੰਦ"</item>
-    <item msgid="7126170197336963369">"ਸਭ ਲੌਗ ਬਫ਼ਰ"</item>
+    <item msgid="7126170197336963369">"ਸਾਰੇ ਲੌਗ ਬਫ਼ਰ"</item>
     <item msgid="7167543126036181392">"ਸਭ ਪਰ ਰੇਡੀਓ ਲੌਗ ਬਫ਼ਰ"</item>
     <item msgid="5135340178556563979">"ਸਿਰਫ਼ ਕਰਨਲ ਲੌਗ ਬਫ਼ਰ"</item>
   </string-array>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">" ਆਡੀਓ  ਸਰੋਤ"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index 068d695..8ba9e78 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"ਸਿਮ ਪਹੁੰਚ"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD ਆਡੀਓ: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD ਆਡੀਓ"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"ਸੁਣਨ ਦੇ ਸਾਧਨ"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE ਆਡੀਓ"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"ਸੁਣਨ ਦੇ ਸਾਧਨਾਂ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"ਸੁਣਨ ਦੇ ਸਾਧਨ"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE ਆਡੀਓ"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"ਸੁਣਨ ਦੇ ਸਾਧਨਾਂ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE ਆਡੀਓ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"ਮੀਡੀਆ  ਆਡੀਓ  ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"ਫ਼ੋਨ ਔਡੀਓ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"ਫ਼ੋਨ ਔਡੀਓ ਲਈ ਵਰਤੋ"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ ਲਈ ਵਰਤੋ"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ਇਨਪੁਟ ਲਈ ਵਰਤੋ"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"ਸੁਣਨ ਦੇ ਸਾਧਨਾਂ ਲਈ ਵਰਤੋ"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"ਸੁਣਨ ਦੇ ਸਾਧਨਾਂ ਲਈ ਵਰਤੋ"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO ਲਈ ਵਰਤੋ"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"ਜੋੜਾਬੱਧ ਕਰੋ"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ਜੋੜਾਬੱਧ ਕਰੋ"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"ਪ੍ਰੋਫਾਈਲ ਚੁਣੋ"</string>
     <string name="category_personal" msgid="6236798763159385225">"ਨਿੱਜੀ"</string>
     <string name="category_work" msgid="4014193632325996115">"ਕੰਮ ਸੰਬੰਧੀ"</string>
+    <string name="category_clone" msgid="1554511758987195974">"ਕਲੋਨ ਕਰੋ"</string>
     <string name="development_settings_title" msgid="140296922921597393">"ਵਿਕਾਸਕਾਰ ਚੋਣਾਂ"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"ਵਿਕਾਸਕਾਰ ਵਿਕਲਪਾਂ ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"ਐਪ ਵਿਕਾਸ ਲਈ ਚੋਣਾਂ ਸੈੱਟ ਕਰੋ"</string>
@@ -345,7 +346,7 @@
     <string name="wait_for_debugger_summary" msgid="6846330006113363286">"ਡੀਬੱਗ ਕੀਤੀ ਐਪਲੀਕੇਸ਼ਨ ਚਲਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਅਟੈਚ ਕਰਨ ਲਈ ਡੀਬੱਗਰ ਦੀ ਉਡੀਕ ਕਰਦੀ ਹੈ"</string>
     <string name="debug_input_category" msgid="7349460906970849771">"ਇਨਪੁੱਟ"</string>
     <string name="debug_drawing_category" msgid="5066171112313666619">"ਡਰਾਇੰਗ"</string>
-    <string name="debug_hw_drawing_category" msgid="5830815169336975162">"ਹਾਰਡਵੇਅਰ ਐਕਸੇਲਰੇਟਿਡ ਰੈਂਡਰਿੰਗ"</string>
+    <string name="debug_hw_drawing_category" msgid="5830815169336975162">"ਹਾਰਡਵੇਅਰ ਐਕਸੈੱਲਰੇਟਿਡ ਰੈਂਡਰਿੰਗ"</string>
     <string name="media_category" msgid="8122076702526144053">"ਮੀਡੀਆ"</string>
     <string name="debug_monitoring_category" msgid="1597387133765424994">"ਨਿਰੀਖਣ ਕਰਨਾ"</string>
     <string name="strict_mode" msgid="889864762140862437">"ਸਟ੍ਰਿਕਟ ਮੋਡ ਚਾਲੂ ਹੈ"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"ਸਕ੍ਰੀਨ ਓਵਰਲੇ ਮੌਜੂਦਾ ਸਪਰਸ਼ ਡਾਟਾ ਦਿਖਾ ਰਿਹਾ ਹੈ"</string>
     <string name="show_touches" msgid="8437666942161289025">"ਟੈਪਾਂ ਦਿਖਾਓ"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"ਟੈਪਾਂ ਲਈ ਦ੍ਰਿਸ਼ਟੀਗਤ ਪ੍ਰਤੀਕਰਮ ਦਿਖਾਓ"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"ਕੁੰਜੀ ਦਬਾਉਣ ਸੰਬੰਧੀ ਜਾਣਕਾਰੀ ਦਿਖਾਓ"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"ਭੌਤਿਕ ਕੁੰਜੀ ਦਬਾਉਣ ਸੰਬੰਧੀ ਦ੍ਰਿਸ਼ਟੀਗਤ ਵਿਚਾਰ ਦਿਖਾਓ"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"ਸਰਫ਼ੇਸ ਅੱਪਡੇਟ ਦਿਖਾਓ"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"ਅੱਪਡੇਟ ਹੋਣ \'ਤੇ, ਸਮੁੱਚੀਆਂ ਵਿੰਡੋ ਸਰਫ਼ੇਸਾਂ ਫਲੈਸ਼ ਕਰੋ"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"\'ਅੱਪਡੇਟ ਦੇਖੋ\' ਨੂੰ ਦਿਖਾਓ"</string>
@@ -396,7 +399,7 @@
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"ਐਪ ਵੱਲੋਂ ਵੈਧ ਚੈਨਲ ਤੋਂ ਬਿਨਾਂ ਸੂਚਨਾ ਪੋਸਟ ਕਰਨ \'ਤੇ ਸਕ੍ਰੀਨ \'ਤੇ ਚਿਤਾਵਨੀ ਦਿਖਾਉਂਦੀ ਹੈ"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"ਐਪਾਂ ਨੂੰ ਜ਼ਬਰਦਸਤੀ ਬਾਹਰੀ ਸਟੋਰੇਜ \'ਤੇ ਆਗਿਆ ਦਿਓ"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"ਮੈਨੀਫੈਸਟ ਮੁੱਲਾਂ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ, ਕਿਸੇ ਵੀ ਐਪ ਨੂੰ ਬਾਹਰੀ ਸਟੋਰੇਜ \'ਤੇ ਲਿਖਣ ਦੇ ਯੋਗ ਬਣਾਉਂਦੀ ਹੈ"</string>
-    <string name="force_resizable_activities" msgid="7143612144399959606">"ਵਿੰਡੋ ਮੁਤਾਬਕ ਸਰਗਰਮੀਆਂ ਦਾ ਆਕਾਰ ਬਦਲ ਦਿਓ"</string>
+    <string name="force_resizable_activities" msgid="7143612144399959606">"ਵਿੰਡੋ ਮੁਤਾਬਕ ਸਰਗਰਮੀਆਂ ਦਾ ਆਕਾਰ ਬਦਲਣ ਦਿਓ"</string>
     <string name="force_resizable_activities_summary" msgid="2490382056981583062">"ਮੈਨੀਫ਼ੈਸਟ ਮੁੱਲਾਂ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ, ਮਲਟੀ-ਵਿੰਡੋ ਲਈ ਸਾਰੀਆਂ ਸਰਗਰਮੀਆਂ ਨੂੰ ਆਕਾਰ ਬਦਲਣਯੋਗ ਬਣਾਓ।"</string>
     <string name="enable_freeform_support" msgid="7599125687603914253">"ਫ੍ਰੀਫਾਰਮ ਵਿੰਡੋਜ਼ ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
     <string name="enable_freeform_support_summary" msgid="1822862728719276331">"ਪ੍ਰਯੋਗਮਈ ਫ੍ਰੀਫਾਰਮ ਵਿੰਡੋਜ਼ ਲਈ ਸਮਰਥਨ ਨੂੰ ਚਾਲੂ ਕਰੋ।"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"ਹੋਰ ਸਮਾਂ।"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"ਘੱਟ ਸਮਾਂ।"</string>
     <string name="cancel" msgid="5665114069455378395">"ਰੱਦ ਕਰੋ"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"ਅੱਗੇ"</string>
+    <string name="back" msgid="5554327870352703710">"ਪਿੱਛੇ ਜਾਓ"</string>
+    <string name="save" msgid="3745809743277153149">"ਰੱਖਿਅਤ ਕਰੋ"</string>
     <string name="okay" msgid="949938843324579502">"ਠੀਕ ਹੈ"</string>
     <string name="done" msgid="381184316122520313">"ਹੋ ਗਿਆ"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"ਅਲਾਰਮ ਅਤੇ ਰਿਮਾਈਂਡਰ"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"ਹੁਣੇ ਹੀ"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"ਇਹ ਫ਼ੋਨ"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"ਇਹ ਟੈਬਲੈੱਟ"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"ਡੌਕ ਸਪੀਕਰ"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"ਬਾਹਰੀ ਡੀਵਾਈਸ"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"ਕਨੈਕਟ ਕੀਤਾ ਡੀਵਾਈਸ"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"ਇਹ ਫ਼ੋਨ"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"ਇਸ ਡੀਵਾਈਸ \'ਤੇ ਨਹੀਂ ਚਲਾਇਆ ਜਾ ਸਕਦਾ"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"ਸਵਿੱਚ ਕਰਨ ਲਈ ਖਾਤੇ ਨੂੰ ਅੱਪਗ੍ਰੇਡ ਕਰੋ"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"ਕੀ ਨਵਾਂ ਵਰਤੋਂਕਾਰ ਸ਼ਾਮਲ ਕਰਨਾ ਹੈ?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"ਤੁਸੀਂ ਵਾਧੂ ਵਰਤੋਂਕਾਰ ਬਣਾ ਕੇ ਹੋਰਾਂ ਲੋਕਾਂ ਨਾਲ ਇਹ ਡੀਵਾਈਸ ਸਾਂਝਾ ਕਰ ਸਕਦੇ ਹੋ। ਹਰੇਕ ਵਰਤੋਂਕਾਰ ਦੀ ਆਪਣੀ ਖੁਦ ਦੀ ਜਗ੍ਹਾ ਹੁੰਦੀ ਹੈ, ਜਿਸਨੂੰ ਉਹ ਐਪਾਂ ਅਤੇ ਵਾਲਪੇਪਰ ਆਦਿ ਨਾਲ ਵਿਉਂਤਬੱਧ ਕਰ ਸਕਦੇ ਹਨ। ਵਰਤੋਂਕਾਰ ਵਾਈ-ਫਾਈ ਵਰਗੀਆਂ ਡੀਵਾਈਸ ਸੈਟਿੰਗਾਂ ਨੂੰ ਵੀ ਵਿਵਸਥਿਤ ਕਰ ਸਕਦੇ ਹਨ, ਜਿਸ ਨਾਲ ਹਰੇਕ ਵਰਤੋਂਕਾਰ \'ਤੇ ਅਸਰ ਪੈਂਦਾ ਹੈ।\n\nਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਨਵਾਂ ਵਰਤੋਂਕਾਰ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋ, ਉਸ ਵਿਅਕਤੀ ਨੂੰ ਆਪਣੀ ਜਗ੍ਹਾ ਸੈੱਟ ਅੱਪ ਕਰਨੀ ਪੈਂਦੀ ਹੈ।\n\nਕੋਈ ਵੀ ਵਰਤੋਂਕਾਰ ਬਾਕੀ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਦੀਆਂ ਐਪਾਂ ਨੂੰ ਅੱਪਡੇਟ ਕਰ ਸਕਦਾ ਹੈ। ਸ਼ਾਇਦ ਪਹੁੰਚਯੋਗਤਾ ਸੈਟਿੰਗਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਨੂੰ ਕਿਸੇ ਨਵੇਂ ਵਰਤੋਂਕਾਰ ਨੂੰ ਟ੍ਰਾਂਸਫਰ ਨਾ ਕੀਤਾ ਜਾ ਸਕੇ।"</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਨਵਾਂ ਵਰਤੋਂਕਾਰ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋ, ਉਸ ਵਿਅਕਤੀ ਨੂੰ ਆਪਣੀ ਜਗ੍ਹਾ ਸੈੱਟਅੱਪ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।\n\nਕੋਈ ਵੀ ਵਰਤੋਂਕਾਰ ਹੋਰ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਦੀਆਂ ਐਪਾਂ ਨੂੰ ਅੱਪਡੇਟ ਕਰ ਸਕਦਾ ਹੈ।"</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"ਕੀ ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਪ੍ਰਸ਼ਾਸਕ ਬਣਾਉਣਾ ਹੈ?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"ਪ੍ਰਸ਼ਾਸਕਾਂ ਕੋਲ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰ ਹੁੰਦੇ ਹਨ ਜੋ ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਕੋਲ ਨਹੀਂ ਹੁੰਦੇ। ਇੱਕ ਪ੍ਰਸ਼ਾਸਕ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦਾ ਹੈ, ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਅੱਪਡੇਟ ਜਾਂ ਰੀਸੈੱਟ ਕਰ ਸਕਦਾ ਹੈ, ਸੈਟਿੰਗਾਂ ਨੂੰ ਸੋਧ ਸਕਦਾ ਹੈ, ਸਾਰੀਆਂ ਸਥਾਪਤ ਐਪਾਂ ਨੂੰ ਦੇਖ ਸਕਦਾ ਹੈ, ਅਤੇ ਦੂਜਿਆਂ ਲਈ ਪ੍ਰਸ਼ਾਸਕ ਦੇ ਅਧਿਕਾਰਾਂ ਨੂੰ ਮਨਜ਼ੂਰ ਜਾਂ ਰੱਦ ਕਰ ਸਕਦਾ ਹੈ।"</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"ਪ੍ਰਸ਼ਾਸਕ ਬਣਾਓ"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"ਕੀ ਹੁਣ ਵਰਤੋਂਕਾਰ ਸੈੱਟ ਅੱਪ ਕਰਨਾ ਹੈ?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"ਇਹ ਪੱਕਾ ਕਰੋ ਕਿ ਵਿਅਕਤੀ ਡੀਵਾਈਸ ਵਰਤਣ ਅਤੇ ਆਪਣੀ ਜਗ੍ਹਾ ਦੇ ਸੈੱਟ ਅੱਪ ਲਈ ਉਪਲਬਧ ਹੈ"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ਕੀ ਹੁਣ ਪ੍ਰੋਫਾਈਲ ਸੈੱਟ ਅੱਪ ਕਰਨੀ ਹੈ?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"ਇਸ ਨਾਲ ਨਵਾਂ ਮਹਿਮਾਨ ਸੈਸ਼ਨ ਸ਼ੁਰੂ ਹੋ ਜਾਵੇਗਾ ਅਤੇ ਮੌਜੂਦਾ ਸੈਸ਼ਨ ਦੀਆਂ ਸਾਰੀਆਂ ਐਪਾਂ ਅਤੇ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"ਕੀ ਮਹਿਮਾਨ ਮੋਡ ਤੋਂ ਬਾਹਰ ਜਾਣਾ ਹੈ?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"ਇਸ ਨਾਲ ਮੌਜੂਦਾ ਮਹਿਮਾਨ ਸੈਸ਼ਨ ਦੀਆਂ ਸਾਰੀਆਂ ਐਪਾਂ ਅਤੇ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"ਹਾਂ, ਉਨ੍ਹਾਂ ਨੂੰ ਪ੍ਰਸ਼ਾਸਕ ਬਣਾਓ"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"ਨਹੀਂ, ਉਨ੍ਹਾਂ ਨੂੰ ਪ੍ਰਸ਼ਾਸਕ ਨਾ ਬਣਾਓ"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"ਬਾਹਰ ਜਾਓ"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"ਕੀ ਮਹਿਮਾਨ ਸਰਗਰਮੀ ਰੱਖਿਅਤ ਕਰਨੀ ਹੈ?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"ਤੁਸੀਂ ਮੌਜੂਦਾ ਸੈਸ਼ਨ ਦੀ ਸਰਗਰਮੀ ਨੂੰ ਰੱਖਿਅਤ ਕਰ ਸਕਦੇ ਹੋ ਜਾਂ ਸਾਰੀਆਂ ਐਪਾਂ ਅਤੇ ਡਾਟਾ ਮਿਟਾ ਸਕਦੇ ਹੋ"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"ਉੱਪਰ ਲਿਜਾਓ"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"ਨਿਰਧਾਰਿਤ ਨਹੀਂ"</string>
+    <string name="neuter" msgid="2075249330106127310">"ਨਿਰਪੱਖ"</string>
+    <string name="feminine" msgid="1529155595310784757">"ਇਸਤਰੀ-ਲਿੰਗ"</string>
+    <string name="masculine" msgid="4653978041013996303">"ਪੁਲਿੰਗ"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-pl/arrays.xml b/packages/SettingsLib/res/values-pl/arrays.xml
index f665850..5358ed8 100644
--- a/packages/SettingsLib/res/values-pl/arrays.xml
+++ b/packages/SettingsLib/res/values-pl/arrays.xml
@@ -257,7 +257,7 @@
     <item msgid="1212561935004167943">"Wyróżnij testowane polecenia rysowania na zielono"</item>
   </string-array>
   <string-array name="track_frame_time_entries">
-    <item msgid="634406443901014984">"Wyłączone"</item>
+    <item msgid="634406443901014984">"Wyłączono"</item>
     <item msgid="1288760936356000927">"Na ekranie w postaci pasków"</item>
     <item msgid="5023908510820531131">"W: <xliff:g id="AS_TYPED_COMMAND">adb shell dumpsys gfxinfo</xliff:g>"</item>
   </string-array>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Źródło dźwięku"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index f8c2c97..e75ea77 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -84,7 +84,7 @@
     <string name="preference_summary_default_combination" msgid="2644094566845577901">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="bluetooth_disconnected" msgid="7739366554710388701">"Rozłączono"</string>
     <string name="bluetooth_disconnecting" msgid="7638892134401574338">"Rozłączanie..."</string>
-    <string name="bluetooth_connecting" msgid="5871702668260192755">"Łączenie..."</string>
+    <string name="bluetooth_connecting" msgid="5871702668260192755">"Łączę..."</string>
     <string name="bluetooth_connected" msgid="8065345572198502293">"Połączono – <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
     <string name="bluetooth_pairing" msgid="4269046942588193600">"Paruję…"</string>
     <string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Połączono (bez telefonu) – <xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
@@ -99,8 +99,8 @@
     <string name="bluetooth_battery_level" msgid="2893696778200201555">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii"</string>
     <string name="bluetooth_battery_level_untethered" msgid="4002282355111504349">"L: bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P: bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
     <string name="bluetooth_active_no_battery_level" msgid="4155462233006205630">"Urządzenie aktywne"</string>
-    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktywny, tylko lewa strona"</string>
-    <string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktywny, tylko prawa strona"</string>
+    <string name="bluetooth_hearing_aid_left_active" msgid="7084887715570971441">"Aktywne, tylko lewa strona"</string>
+    <string name="bluetooth_hearing_aid_right_active" msgid="8574683234077567230">"Aktywne, tylko prawa strona"</string>
     <string name="bluetooth_hearing_aid_left_and_right_active" msgid="407704460573163973">"Aktywny, lewa i prawa strona"</string>
     <string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Dźwięk multimediów"</string>
     <string name="bluetooth_profile_headset" msgid="5395952236133499331">"Połączenia telefoniczne"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Dostęp do karty SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Dźwięk HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Dźwięk HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Aparaty słuchowe"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Połączono z aparatami słuchowymi"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Aparaty słuchowe"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Połączono z aparatami słuchowymi"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Połączono z LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Połączono z funkcją audio multimediów"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Połączono z funkcją audio telefonu"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Użyj dla funkcji audio telefonu"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Użyj do transferu plików"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Użyj do wprowadzania"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Użyj z aparatami słuchowymi"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Używaj w przypadku aparatów słuchowych"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Używaj dla LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Sparuj"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"SPARUJ"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Anuluj"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Sparowanie powoduje przyznanie dostępu do historii połączeń i Twoich kontaktów w trakcie połączenia."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Nie udało się sparować z urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Nie udało się sparować z urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ze względu na błędny kod PIN lub klucz."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Nieudane parowanie z: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Błędny kod PIN lub klucz dostępu."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Nie można skomunikować się z urządzeniem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Powiązanie odrzucone przez urządzenie <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Komputer"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Wybierz profil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Osobiste"</string>
     <string name="category_work" msgid="4014193632325996115">"Służbowe"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klon"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opcje programisty"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Włącz opcje programisty"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Ustaw opcje związane z programowaniem aplikacji."</string>
@@ -255,7 +256,7 @@
     <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Skrót do zgłaszania błędów"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Pokazuj w menu zasilania przycisk zgłaszania błędów"</string>
-    <string name="keep_screen_on" msgid="1187161672348797558">"Pozostaw włączony ekran"</string>
+    <string name="keep_screen_on" msgid="1187161672348797558">"Nie usypiaj"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"Ekran nie będzie gaszony podczas ładowania telefonu"</string>
     <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Włącz dziennik snoop Bluetooth HCI"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Przechwyć wszystkie pakiety Bluetooth (przełącz Bluetooth po zmianie tego ustawienia)."</string>
@@ -309,7 +310,7 @@
     <string name="select_logd_size_dialog_title" msgid="2105401994681013578">"Wybierz rozmiary Rejestratora/bufor dziennika"</string>
     <string name="dev_logpersist_clear_warning_title" msgid="8631859265777337991">"Wyczyścić pamięć trwałych dzienników?"</string>
     <string name="dev_logpersist_clear_warning_message" msgid="6447590867594287413">"Po zakończeniu monitorowania przy użyciu trwale zapisywanych dzienników musimy usunąć ich dane zapisane na urządzeniu."</string>
-    <string name="select_logpersist_title" msgid="447071974007104196">"Zapisuj trwale dane dzienników"</string>
+    <string name="select_logpersist_title" msgid="447071974007104196">"Zapisuj trwale dane dzienników na urządzeniu"</string>
     <string name="select_logpersist_dialog_title" msgid="7745193591195485594">"Wybierz bufory dziennika, które mają być trwale przechowywane na urządzeniu"</string>
     <string name="select_usb_configuration_title" msgid="6339801314922294586">"Wybierz konfigurację USB"</string>
     <string name="select_usb_configuration_dialog_title" msgid="3579567144722589237">"Wybierz konfigurację USB"</string>
@@ -341,7 +342,7 @@
     <string name="debug_app_set" msgid="6599535090477753651">"Aplikacja do debugowania: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="select_application" msgid="2543228890535466325">"Wybierz aplikację"</string>
     <string name="no_application" msgid="9038334538870247690">"Brak"</string>
-    <string name="wait_for_debugger" msgid="7461199843335409809">"Poczekaj na debugera"</string>
+    <string name="wait_for_debugger" msgid="7461199843335409809">"Czekaj na debugera"</string>
     <string name="wait_for_debugger_summary" msgid="6846330006113363286">"Aplikacja do debugowania czeka na przyłączenie debugera"</string>
     <string name="debug_input_category" msgid="7349460906970849771">"Ekran dotykowy"</string>
     <string name="debug_drawing_category" msgid="5066171112313666619">"Rysowanie"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Nakładka pokazująca dane o dotknięciach ekranu"</string>
     <string name="show_touches" msgid="8437666942161289025">"Pokazuj dotknięcia"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Pokazuj potwierdzenie wizualne po dotknięciu"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Wyświetl naciśnięcia klawiszy"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Wyświetl opinie wizualne dla naciśnięć fizycznego klucza"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Pokazuj zmiany powierzchni"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Podświetlaj całe aktualizowane powierzchnie okien"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Pokazuj aktualizacje widoku"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Więcej czasu."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mniej czasu."</string>
     <string name="cancel" msgid="5665114069455378395">"Anuluj"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Dalej"</string>
+    <string name="back" msgid="5554327870352703710">"Wstecz"</string>
+    <string name="save" msgid="3745809743277153149">"Zapisz"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Gotowe"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmy i przypomnienia"</string>
@@ -547,12 +547,15 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Przed chwilą"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Ten telefon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Ten tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Głośnik ze stacją dokującą"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Urządzenie zewnętrzne"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Połączone urządzenie"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Ten telefon"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Nie można odtworzyć na tym urządzeniu"</string>
-    <string name="media_output_status_require_premium" msgid="8411255800047014822">"Uaktualnij konto, aby przełączyć"</string>
+    <string name="media_output_status_require_premium" msgid="8411255800047014822">"Aby przełączyć, potrzebujesz konta premium"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Tutaj nie można odtworzyć pobranych plików"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Spróbuj ponownie po reklamie"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Wybudź urządzenie, aby odtworzyć tutaj"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Wybudź, aby tu odtworzyć"</string>
     <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Urządzenie nie ma uprawnień do odtwarzania"</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Nie można odtworzyć tego pliku multimedialnego"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Problem z połączeniem. Wyłącz i ponownie włącz urządzenie"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Użytkownik"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Profil ograniczony"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Dodać nowego użytkownika?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Z tego urządzenia możesz korzystać wraz z innymi osobami, dodając na nim konta użytkowników. Każdy użytkownik ma własne miejsce na swoje aplikacje, tapety i inne dane. Może też zmieniać ustawienia, które wpływają na wszystkich użytkowników urządzenia (np. Wi‑Fi).\n\nGdy dodasz nowego użytkownika, musi on skonfigurować swoje miejsce na dane.\n\nKażdy użytkownik może aktualizować aplikacje w imieniu wszystkich pozostałych użytkowników. Ułatwienia dostępu i usługi mogą nie zostać przeniesione na konto nowego użytkownika."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Na tym urządzeniu możesz dodać konta użytkowników i dzięki temu korzystać z niego wraz z innymi osobami. Każdy użytkownik ma własne miejsce na swoje aplikacje, tapety i inne dane. Może też zmieniać ustawienia (np. Wi‑Fi), które wpływają na wszystkich użytkowników urządzenia.\n\nGdy dodasz nowego użytkownika, musi on skonfigurować swoje miejsce na dane.\n\nKażdy użytkownik może aktualizować aplikacje wszystkich pozostałych użytkowników. Ułatwienia dostępu i usługi mogą nie zostać przeniesione na konto nowego użytkownika."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Gdy dodasz nowego użytkownika, musi on skonfigurować swoją przestrzeń.\n\nKażdy użytkownik może aktualizować aplikacje wszystkich innych użytkowników."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Przyznać temu użytkownikowi uprawnienia administratora?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Administratorzy mają specjalne uprawnienia, którymi nie dysponują pozostali użytkownicy. Administrator może zarządzać wszystkimi użytkownikami, aktualizować i resetować urządzenie, modyfikować ustawienia, wyświetlać wszystkie zainstalowane aplikacje oraz przyznawać uprawnienia administratora innym użytkownikom i je wycofywać."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Przyznaj uprawnienia administratora"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Skonfigurować ustawienia dla użytkownika?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Upewnij się, że ta osoba jest w pobliżu i może skonfigurować swój profil"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Skonfigurować teraz profil?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Tak, przyznaj uprawnienia administratora"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Nie, nie przyznawaj uprawnień administratora"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Zamknij"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Zapisać aktywność gościa?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Możesz zapisać aktywność z obecnej sesji lub usunąć wszystkie aplikacje i dane"</string>
@@ -628,7 +626,7 @@
     <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_ephemeral" msgid="7263252466950923871">"Po zamknięciu cała aktywność zostanie usunięta"</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>
@@ -685,7 +683,7 @@
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"Transmisja aplikacji <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"Zmień dane wyjściowe"</string>
     <string name="back_navigation_animation" msgid="8105467568421689484">"Animacje przewidywanego przejścia wstecz"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Włącz animacje systemowe dla przewidywanego przejścia wstecz."</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Włącz animacje systemowe dla przewidywanego przejścia wstecz"</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"To ustawienie uruchamia animacje systemowe dla przewidywanych gestów. Wymaga ustawienia w pliku manifestu wartości true w polu enableOnBackInvokedCallback dla każdej aplikacji."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"Przenieś w lewo"</item>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Przenieś w górę"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Nie określono"</string>
+    <string name="neuter" msgid="2075249330106127310">"Nijaki"</string>
+    <string name="feminine" msgid="1529155595310784757">"Żeński"</string>
+    <string name="masculine" msgid="4653978041013996303">"Męski"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-pt-rBR/arrays.xml b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
index 3b61e1a..96f0c1a 100644
--- a/packages/SettingsLib/res/values-pt-rBR/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Fonte de áudio"</item>
     <item msgid="8688681727755534982">"MIDI (som)"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index f6ffce0..1507e5b 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acesso ao chip"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Áudio HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Áudio HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Aparelhos auditivos"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"Áudio de baixa energia"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Conectado a aparelhos auditivos"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Aparelhos auditivos"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Conectado a aparelhos auditivos"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Conectado ao perfil Áudio de baixa energia"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Conectado ao áudio da mídia"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Conectado ao áudio do smartphone"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Usar para áudio do smartphone"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Usado para transferência de arquivo"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Usar para entrada"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Usar para aparelhos auditivos"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Usar para aparelhos auditivos"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Usar para LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Parear"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"PAREAR"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Cancelar"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"O pareamento dá acesso a seus contatos e ao histórico de ligações quando estiver conectado."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Não foi possível parear com <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Não foi possível parear com <xliff:g id="DEVICE_NAME">%1$s</xliff:g> por causa de um PIN ou senha incorretos."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Não foi possível parear com <xliff:g id="DEVICE_NAME">%1$s</xliff:g>: PIN ou senha incorretos."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Não é possível se comunicar com <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Pareamento rejeitado por <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Computador"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Escolher perfil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Pessoal"</string>
     <string name="category_work" msgid="4014193632325996115">"Trabalho"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clone"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opções do desenvolvedor"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Ativar opções do desenvolvedor"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Define as opções para o desenvolvimento do app"</string>
@@ -257,7 +258,7 @@
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostrar um botão para gerar relatórios de bugs no menu do botão liga/desliga"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Permanecer ativo"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"A tela nunca entra em suspensão enquanto está carregando"</string>
-    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Ativar registro de rastreamento Bluetooth HCI"</string>
+    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Ativar registro de rastreamento de HCI Bluetooth"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Capturar pacotes de Bluetooth. Ative o Bluetooth depois de alterar essa configuração."</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"Desbloqueio de OEM"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"Permitir que o bootloader seja desbloqueado"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Exibir dados de toque"</string>
     <string name="show_touches" msgid="8437666942161289025">"Mostrar toques"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Mostrar feedback visual para toques"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Mostrar teclas pressionadas"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Mostrar feedback visual de teclas pressionadas"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Mostrar superfície atualizada"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Piscar superfícies de toda a janela ao atualizar"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Ver atualizações de exibição"</string>
@@ -393,13 +396,13 @@
     <string name="show_all_anrs" msgid="9160563836616468726">"Mostrar ANRs em 2º plano"</string>
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"Exibir a caixa de diálogo \"App não responde\" para apps em segundo plano"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Mostrar avisos de notificações"</string>
-    <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Exibir aviso na tela quando um app posta uma notificação s/ um canal válido"</string>
+    <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Exibir aviso na tela quando um app posta uma notificação sem um canal válido"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"Forçar permissão de apps em armazenamento externo"</string>
-    <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Qualificar apps para gravação em armazenamento externo, independentemente de valores de manifestos"</string>
+    <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Qualificar apps para gravação em armazenamento externo, independentemente dos valores do manifesto"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"Forçar atividades a serem redimensionáveis"</string>
-    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"Tornar todas as atividades redimensionáveis para várias janelas, independentemente dos valores do manifesto."</string>
+    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"Tornar todas as atividades redimensionáveis para várias janelas, independentemente dos valores do manifesto"</string>
     <string name="enable_freeform_support" msgid="7599125687603914253">"Ativar janelas de forma livre"</string>
-    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Ativar a compatibilidade com janelas experimentais de forma livre."</string>
+    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Ativar a compatibilidade com janelas experimentais de forma livre"</string>
     <string name="desktop_mode" msgid="2389067840550544462">"Modo área de trabalho"</string>
     <string name="local_backup_password_title" msgid="4631017948933578709">"Senha de backup local"</string>
     <string name="local_backup_password_summary_none" msgid="7646898032616361714">"Os backups completos não estão protegidos no momento"</string>
@@ -542,9 +545,12 @@
     <string name="zen_mode_duration_always_prompt_title" msgid="3212996860498119555">"Perguntar sempre"</string>
     <string name="zen_mode_forever" msgid="3339224497605461291">"Até você desativar"</string>
     <string name="time_unit_just_now" msgid="3006134267292728099">"Agora"</string>
-    <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Este smartphone"</string>
+    <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Este telefone"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Este tablet"</string>
-    <string name="media_transfer_this_phone" msgid="7194341457812151531">"Este smartphone"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Alto-falante da base"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Dispositivo externo"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Dispositivo conectado"</string>
+    <string name="media_transfer_this_phone" msgid="7194341457812151531">"Este telefone"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Não é possível reproduzir neste dispositivo"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Faça upgrade da conta para trocar"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Não é possível abrir os downloads aqui"</string>
@@ -574,9 +580,9 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Usuário"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Perfil restrito"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Adicionar novo usuário?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Você pode compartilhar este dispositivo com outras pessoas, adicionando usuários. Cada usuário tem o próprio espaço, que pode ser personalizado com apps, planos de fundo, etc. Os usuários também podem ajustar as configurações do dispositivo, como o Wi‑Fi, que afetam a todos.\n\nQuando você adiciona um novo usuário, essa pessoa precisa configurar o próprio espaço.\n\nQualquer usuário pode atualizar apps para todos os outros. Serviços e configurações de acessibilidade podem não ser transferidos para novos usuários."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Você pode compartilhar este dispositivo com outras pessoas, adicionando usuários. Cada um tem o próprio espaço de trabalho, que pode ser personalizado com apps, planos de fundo, etc. Também é possível ajustar as configurações do dispositivo, como o Wi‑Fi, que afetam a todos.\n\nQuando você adiciona um novo usuário, essa pessoa precisa configurar o próprio espaço.\n\nQualquer usuário pode atualizar apps para todos os outros. Serviços e configurações de acessibilidade podem não ser transferidos para novos usuários."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Quando você adiciona um novo usuário, essa pessoa precisa configurar o próprio espaço.\n\nQualquer usuário pode atualizar apps para os demais usuários."</string>
-    <string name="user_grant_admin_title" msgid="5157031020083343984">"Transformar esse usuário um administrador?"</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Tornar esse usuário um administrador?"</string>
     <string name="user_grant_admin_message" msgid="1673791931033486709">"Administradores têm privilégios especiais que outros usuários não têm. Um administrador pode gerenciar todos os usuários, atualizar ou redefinir este dispositivo, modificar configurações, conferir todos os apps instalados e conceder ou revogar privilégios de administrador para outras pessoas."</string>
     <string name="user_grant_admin_button" msgid="5441486731331725756">"Transformar o usuário em administrador"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurar o usuário agora?"</string>
@@ -598,8 +604,8 @@
     <string name="add_guest_failed" msgid="8074548434469843443">"Falha ao criar um novo convidado"</string>
     <string name="user_nickname" msgid="262624187455825083">"Apelido"</string>
     <string name="user_add_user" msgid="7876449291500212468">"Adicionar usuário"</string>
-    <string name="guest_new_guest" msgid="3482026122932643557">"Adicionar convidado"</string>
-    <string name="guest_exit_guest" msgid="5908239569510734136">"Remover convidado"</string>
+    <string name="guest_new_guest" msgid="3482026122932643557">"Adicionar visitante"</string>
+    <string name="guest_exit_guest" msgid="5908239569510734136">"Remover visitante"</string>
     <string name="guest_reset_guest" msgid="6110013010356013758">"Redefinir sessão de visitante"</string>
     <string name="guest_reset_guest_dialog_title" msgid="8047270010895437534">"Redefinir visitante?"</string>
     <string name="guest_remove_guest_dialog_title" msgid="4548511006624088072">"Remover visitante?"</string>
@@ -610,7 +616,7 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Essa ação vai iniciar uma nova Sessão de visitante e excluir todos os apps e dados da sessão atual"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Sair do modo visitante?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Essa ação vai excluir apps e dados da Sessão de visitante atual"</string>
-    <string name="grant_admin" msgid="4323199171790522574">"Sim, transformar esse usuário em administrador"</string>
+    <string name="grant_admin" msgid="4323199171790522574">"Sim, tornar esse usuário um administrador"</string>
     <string name="not_grant_admin" msgid="3557849576157702485">"Não, não transformar o usuário em administrador"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Sair"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Salvar a atividade do visitante?"</string>
@@ -677,7 +683,7 @@
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"Transmitir <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"Mudar saída"</string>
     <string name="back_navigation_animation" msgid="8105467568421689484">"Animações de gestos \"Voltar\" preditivos"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Ativar animações do sistema para gestos \"Voltar\" preditivos."</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Ativar animações do sistema para gestos \"Voltar\" preditivos"</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"Esta configuração ativa animações do sistema para gestos preditivos. Ela requer que a política enableOnBackInvokedCallback por app seja definida como verdadeira no arquivo de manifesto."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"Mover para esquerda"</item>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"Mover para cima"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Não especificado"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutro"</string>
+    <string name="feminine" msgid="1529155595310784757">"Feminino"</string>
+    <string name="masculine" msgid="4653978041013996303">"Masculino"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-pt-rPT/arrays.xml b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
index 9b472dd..50a90eb 100644
--- a/packages/SettingsLib/res/values-pt-rPT/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (seguro)"</item>
     <item msgid="7322156123728520872">"4K (redimensionado)"</item>
     <item msgid="7735692090314849188">"4K (redimensionado, seguro)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (ecrã duplo)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"Nada"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Fonte de áudio"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index 8751ba2..a40cd2a 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acesso ao SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Áudio HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Áudio HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Aparelhos auditivos"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Ligado a aparelhos auditivos"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Aparelhos auditivos"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Ligado a aparelhos auditivos"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Ligado a LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Ligado ao áudio de multimédia"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Ligado ao áudio do telefone"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Usar para áudio do telefone"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Usar para transferência de ficheiros"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Usar para entrada"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Usar para aparelhos auditivos"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Usar para aparelhos auditivos"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Usar para LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Sincr."</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"SINCRONIZAR"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Cancelar"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"A sincronização concede acesso aos seus contactos e ao histórico de chamadas quando tem uma ligação estabelecida."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Não foi possível sincronizar com <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Não foi possível sincronizar com <xliff:g id="DEVICE_NAME">%1$s</xliff:g> devido a PIN ou token de acesso incorreto."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Não foi possível sincronizar com <xliff:g id="DEVICE_NAME">%1$s</xliff:g>: PIN ou chave de acesso errado."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Não é possível comunicar com <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Emparelhamento rejeitado por <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Computador"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Escolher perfil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Pessoal"</string>
     <string name="category_work" msgid="4014193632325996115">"Trabalho"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clone"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opções de programador"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Ativar as opções de programador"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Definir opções de desenvolvimento da aplicação"</string>
@@ -307,7 +308,7 @@
     <string name="wifi_unmetered_label" msgid="6174142840934095093">"Acesso ilimitado"</string>
     <string name="select_logd_size_title" msgid="1604578195914595173">"Tamanhos da memória intermédia do registo"</string>
     <string name="select_logd_size_dialog_title" msgid="2105401994681013578">"Selec. tam. reg. p/ mem. int. reg."</string>
-    <string name="dev_logpersist_clear_warning_title" msgid="8631859265777337991">"Pretende limpar o armazenamento persistente do registo?"</string>
+    <string name="dev_logpersist_clear_warning_title" msgid="8631859265777337991">"Quer limpar o armazenamento persistente do registo?"</string>
     <string name="dev_logpersist_clear_warning_message" msgid="6447590867594287413">"Quando deixamos de monitorizar com o registo persistente, é necessário apagar os dados de registo que se encontram no seu dispositivo."</string>
     <string name="select_logpersist_title" msgid="447071974007104196">"Guardar dados de registo consistentemente"</string>
     <string name="select_logpersist_dialog_title" msgid="7745193591195485594">"Selecionar buffers de registo para armazenamento persistente no dispositivo"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Apresentar dados atuais de toque"</string>
     <string name="show_touches" msgid="8437666942161289025">"Mostrar toques"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Mostrar feedback visual para toques"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Mostrar toques em teclas"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Mostrar feedback visual (toques em teclas físicas)"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Mostrar superfície atualizada"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Destacar a superfície da janela ao atualizar"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Ver atualizações de vistas"</string>
@@ -515,16 +518,13 @@
     <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Não registado"</string>
     <string name="status_unavailable" msgid="5279036186589861608">"Indisponível"</string>
     <string name="wifi_status_mac_randomized" msgid="466382542497832189">"O MAC é aleatório."</string>
-    <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 dispositivo ligados}=1{1 dispositivo ligado}other{# dispositivos ligados}}"</string>
+    <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 dispositivo ligado}=1{1 dispositivo ligado}other{# dispositivos ligados}}"</string>
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mais tempo."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Menos tempo."</string>
     <string name="cancel" msgid="5665114069455378395">"Cancelar"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Seguinte"</string>
+    <string name="back" msgid="5554327870352703710">"Anterior"</string>
+    <string name="save" msgid="3745809743277153149">"Guardar"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Concluir"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmes e lembretes"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Agora mesmo"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Este telemóvel"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Este tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Altifalante estação carregam."</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Dispositivo externo"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Dispositivo associado"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Este telemóvel"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Não é possível reproduzir neste dispositivo"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Atualize a conta para mudar"</string>
@@ -566,25 +569,22 @@
     <string name="blob_id_text" msgid="8680078988996308061">"ID de dados partilhados: <xliff:g id="BLOB_ID">%d</xliff:g>"</string>
     <string name="blob_expires_text" msgid="7882727111491739331">"Expira a <xliff:g id="DATE">%s</xliff:g>"</string>
     <string name="shared_data_delete_failure_text" msgid="3842701391009628947">"Ocorreu um erro ao eliminar os dados partilhados."</string>
-    <string name="shared_data_no_accessors_dialog_text" msgid="8903738462570715315">"Não existem alocações adquiridas para estes dados partilhados. Pretende eliminá-los?"</string>
+    <string name="shared_data_no_accessors_dialog_text" msgid="8903738462570715315">"Não existem alocações adquiridas para estes dados partilhados. Quer eliminá-los?"</string>
     <string name="accessor_info_title" msgid="8289823651512477787">"Apps a partilhar dados"</string>
     <string name="accessor_no_description_text" msgid="7510967452505591456">"Nenhuma descrição fornecida pela app."</string>
     <string name="accessor_expires_text" msgid="4625619273236786252">"A alocação expira a <xliff:g id="DATE">%s</xliff:g>"</string>
     <string name="delete_blob_text" msgid="2819192607255625697">"Eliminar dados partilhados"</string>
-    <string name="delete_blob_confirmation_text" msgid="7807446938920827280">"Tem a certeza de que pretende eliminar estes dados partilhados?"</string>
+    <string name="delete_blob_confirmation_text" msgid="7807446938920827280">"Tem a certeza de que quer eliminar estes dados partilhados?"</string>
     <string name="user_add_user_item_summary" msgid="5748424612724703400">"Os utilizadores têm as suas próprias aplicações e conteúdos"</string>
     <string name="user_add_profile_item_summary" msgid="5418602404308968028">"Pode restringir o acesso às aplicações e conteúdos da sua conta"</string>
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Utilizador"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Perfil restrito"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Adicionar novo utilizador?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Pode partilhar este dispositivo com outras pessoas ao criar utilizadores adicionais. Cada utilizador possui o seu próprio espaço, que pode ser personalizado com apps, imagens de fundo, etc. Os utilizadores também podem ajustar as definições do dispositivo, como o Wi‑Fi, que afetam os restantes utilizadores.\n\nAo adicionar um novo utilizador, essa pessoa tem de configurar o respetivo espaço.\n\nQualquer utilizador pode atualizar apps para todos os outros utilizadores. Os serviços e as definições de acessibilidade podem não ser transferidos para o novo utilizador."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"Ao adicionar um novo utilizador, essa pessoa tem de configurar o respetivo espaço.\n\nQualquer utilizador pode atualizar aplicações para todos os outros utilizadores."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"Ao adicionar um novo utilizador, essa pessoa tem de configurar o respetivo espaço.\n\nQualquer utilizador pode atualizar apps para todos os outros utilizadores."</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Definir este utilizador como um administrador?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Os administradores têm privilégios especiais que outros utilizadores não têm. Um administrador pode gerir todos os utilizadores, atualizar ou repor este dispositivo, modificar definições, ver todas as apps instaladas e revogar ou conceder privilégios de administrador a outras pessoas."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Definir como administrador"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurar o utilizador agora?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Certifique-se de que a pessoa está disponível para levar o dispositivo e configurar o seu espaço"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Configurar perfil agora?"</string>
@@ -593,7 +593,7 @@
     <string name="user_add_user_type_title" msgid="551279664052914497">"Adicionar"</string>
     <string name="user_new_user_name" msgid="60979820612818840">"Novo utilizador"</string>
     <string name="user_new_profile_name" msgid="2405500423304678841">"Novo perfil"</string>
-    <string name="user_info_settings_title" msgid="6351390762733279907">"Info. utilizador"</string>
+    <string name="user_info_settings_title" msgid="6351390762733279907">"Dados do utilizador"</string>
     <string name="profile_info_settings_title" msgid="105699672534365099">"Informação do perfil"</string>
     <string name="user_need_lock_message" msgid="4311424336209509301">"Antes de poder criar um perfil restrito, tem de configurar um bloqueio de ecrã para proteger as suas aplicações e dados pessoais."</string>
     <string name="user_set_lock_button" msgid="1427128184982594856">"Definir bloqueio"</string>
@@ -607,7 +607,7 @@
     <string name="guest_new_guest" msgid="3482026122932643557">"Adicionar convidado"</string>
     <string name="guest_exit_guest" msgid="5908239569510734136">"Remover convidado"</string>
     <string name="guest_reset_guest" msgid="6110013010356013758">"Repor convidado"</string>
-    <string name="guest_reset_guest_dialog_title" msgid="8047270010895437534">"Pretende repor o convidado?"</string>
+    <string name="guest_reset_guest_dialog_title" msgid="8047270010895437534">"Quer repor o convidado?"</string>
     <string name="guest_remove_guest_dialog_title" msgid="4548511006624088072">"Remover o convidado?"</string>
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Repor"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Remover"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Sim, definir como administrador"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Não, não definir como administrador"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Mover para cima"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Não especificado"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutro"</string>
+    <string name="feminine" msgid="1529155595310784757">"Feminino"</string>
+    <string name="masculine" msgid="4653978041013996303">"Masculino"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-pt/arrays.xml b/packages/SettingsLib/res/values-pt/arrays.xml
index 3b61e1a..96f0c1a 100644
--- a/packages/SettingsLib/res/values-pt/arrays.xml
+++ b/packages/SettingsLib/res/values-pt/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Fonte de áudio"</item>
     <item msgid="8688681727755534982">"MIDI (som)"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index f6ffce0..1507e5b 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acesso ao chip"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Áudio HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Áudio HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Aparelhos auditivos"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"Áudio de baixa energia"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Conectado a aparelhos auditivos"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Aparelhos auditivos"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Conectado a aparelhos auditivos"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Conectado ao perfil Áudio de baixa energia"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Conectado ao áudio da mídia"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Conectado ao áudio do smartphone"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Usar para áudio do smartphone"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Usado para transferência de arquivo"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Usar para entrada"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Usar para aparelhos auditivos"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Usar para aparelhos auditivos"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Usar para LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Parear"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"PAREAR"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Cancelar"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"O pareamento dá acesso a seus contatos e ao histórico de ligações quando estiver conectado."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Não foi possível parear com <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Não foi possível parear com <xliff:g id="DEVICE_NAME">%1$s</xliff:g> por causa de um PIN ou senha incorretos."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Não foi possível parear com <xliff:g id="DEVICE_NAME">%1$s</xliff:g>: PIN ou senha incorretos."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Não é possível se comunicar com <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Pareamento rejeitado por <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Computador"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Escolher perfil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Pessoal"</string>
     <string name="category_work" msgid="4014193632325996115">"Trabalho"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clone"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opções do desenvolvedor"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Ativar opções do desenvolvedor"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Define as opções para o desenvolvimento do app"</string>
@@ -257,7 +258,7 @@
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Mostrar um botão para gerar relatórios de bugs no menu do botão liga/desliga"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Permanecer ativo"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"A tela nunca entra em suspensão enquanto está carregando"</string>
-    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Ativar registro de rastreamento Bluetooth HCI"</string>
+    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Ativar registro de rastreamento de HCI Bluetooth"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Capturar pacotes de Bluetooth. Ative o Bluetooth depois de alterar essa configuração."</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"Desbloqueio de OEM"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"Permitir que o bootloader seja desbloqueado"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Exibir dados de toque"</string>
     <string name="show_touches" msgid="8437666942161289025">"Mostrar toques"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Mostrar feedback visual para toques"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Mostrar teclas pressionadas"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Mostrar feedback visual de teclas pressionadas"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Mostrar superfície atualizada"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Piscar superfícies de toda a janela ao atualizar"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Ver atualizações de exibição"</string>
@@ -393,13 +396,13 @@
     <string name="show_all_anrs" msgid="9160563836616468726">"Mostrar ANRs em 2º plano"</string>
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"Exibir a caixa de diálogo \"App não responde\" para apps em segundo plano"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Mostrar avisos de notificações"</string>
-    <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Exibir aviso na tela quando um app posta uma notificação s/ um canal válido"</string>
+    <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Exibir aviso na tela quando um app posta uma notificação sem um canal válido"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"Forçar permissão de apps em armazenamento externo"</string>
-    <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Qualificar apps para gravação em armazenamento externo, independentemente de valores de manifestos"</string>
+    <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Qualificar apps para gravação em armazenamento externo, independentemente dos valores do manifesto"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"Forçar atividades a serem redimensionáveis"</string>
-    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"Tornar todas as atividades redimensionáveis para várias janelas, independentemente dos valores do manifesto."</string>
+    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"Tornar todas as atividades redimensionáveis para várias janelas, independentemente dos valores do manifesto"</string>
     <string name="enable_freeform_support" msgid="7599125687603914253">"Ativar janelas de forma livre"</string>
-    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Ativar a compatibilidade com janelas experimentais de forma livre."</string>
+    <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Ativar a compatibilidade com janelas experimentais de forma livre"</string>
     <string name="desktop_mode" msgid="2389067840550544462">"Modo área de trabalho"</string>
     <string name="local_backup_password_title" msgid="4631017948933578709">"Senha de backup local"</string>
     <string name="local_backup_password_summary_none" msgid="7646898032616361714">"Os backups completos não estão protegidos no momento"</string>
@@ -542,9 +545,12 @@
     <string name="zen_mode_duration_always_prompt_title" msgid="3212996860498119555">"Perguntar sempre"</string>
     <string name="zen_mode_forever" msgid="3339224497605461291">"Até você desativar"</string>
     <string name="time_unit_just_now" msgid="3006134267292728099">"Agora"</string>
-    <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Este smartphone"</string>
+    <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Este telefone"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Este tablet"</string>
-    <string name="media_transfer_this_phone" msgid="7194341457812151531">"Este smartphone"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Alto-falante da base"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Dispositivo externo"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Dispositivo conectado"</string>
+    <string name="media_transfer_this_phone" msgid="7194341457812151531">"Este telefone"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Não é possível reproduzir neste dispositivo"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Faça upgrade da conta para trocar"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Não é possível abrir os downloads aqui"</string>
@@ -574,9 +580,9 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Usuário"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Perfil restrito"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Adicionar novo usuário?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Você pode compartilhar este dispositivo com outras pessoas, adicionando usuários. Cada usuário tem o próprio espaço, que pode ser personalizado com apps, planos de fundo, etc. Os usuários também podem ajustar as configurações do dispositivo, como o Wi‑Fi, que afetam a todos.\n\nQuando você adiciona um novo usuário, essa pessoa precisa configurar o próprio espaço.\n\nQualquer usuário pode atualizar apps para todos os outros. Serviços e configurações de acessibilidade podem não ser transferidos para novos usuários."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Você pode compartilhar este dispositivo com outras pessoas, adicionando usuários. Cada um tem o próprio espaço de trabalho, que pode ser personalizado com apps, planos de fundo, etc. Também é possível ajustar as configurações do dispositivo, como o Wi‑Fi, que afetam a todos.\n\nQuando você adiciona um novo usuário, essa pessoa precisa configurar o próprio espaço.\n\nQualquer usuário pode atualizar apps para todos os outros. Serviços e configurações de acessibilidade podem não ser transferidos para novos usuários."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Quando você adiciona um novo usuário, essa pessoa precisa configurar o próprio espaço.\n\nQualquer usuário pode atualizar apps para os demais usuários."</string>
-    <string name="user_grant_admin_title" msgid="5157031020083343984">"Transformar esse usuário um administrador?"</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Tornar esse usuário um administrador?"</string>
     <string name="user_grant_admin_message" msgid="1673791931033486709">"Administradores têm privilégios especiais que outros usuários não têm. Um administrador pode gerenciar todos os usuários, atualizar ou redefinir este dispositivo, modificar configurações, conferir todos os apps instalados e conceder ou revogar privilégios de administrador para outras pessoas."</string>
     <string name="user_grant_admin_button" msgid="5441486731331725756">"Transformar o usuário em administrador"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurar o usuário agora?"</string>
@@ -598,8 +604,8 @@
     <string name="add_guest_failed" msgid="8074548434469843443">"Falha ao criar um novo convidado"</string>
     <string name="user_nickname" msgid="262624187455825083">"Apelido"</string>
     <string name="user_add_user" msgid="7876449291500212468">"Adicionar usuário"</string>
-    <string name="guest_new_guest" msgid="3482026122932643557">"Adicionar convidado"</string>
-    <string name="guest_exit_guest" msgid="5908239569510734136">"Remover convidado"</string>
+    <string name="guest_new_guest" msgid="3482026122932643557">"Adicionar visitante"</string>
+    <string name="guest_exit_guest" msgid="5908239569510734136">"Remover visitante"</string>
     <string name="guest_reset_guest" msgid="6110013010356013758">"Redefinir sessão de visitante"</string>
     <string name="guest_reset_guest_dialog_title" msgid="8047270010895437534">"Redefinir visitante?"</string>
     <string name="guest_remove_guest_dialog_title" msgid="4548511006624088072">"Remover visitante?"</string>
@@ -610,7 +616,7 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Essa ação vai iniciar uma nova Sessão de visitante e excluir todos os apps e dados da sessão atual"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Sair do modo visitante?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Essa ação vai excluir apps e dados da Sessão de visitante atual"</string>
-    <string name="grant_admin" msgid="4323199171790522574">"Sim, transformar esse usuário em administrador"</string>
+    <string name="grant_admin" msgid="4323199171790522574">"Sim, tornar esse usuário um administrador"</string>
     <string name="not_grant_admin" msgid="3557849576157702485">"Não, não transformar o usuário em administrador"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Sair"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Salvar a atividade do visitante?"</string>
@@ -677,7 +683,7 @@
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"Transmitir <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"Mudar saída"</string>
     <string name="back_navigation_animation" msgid="8105467568421689484">"Animações de gestos \"Voltar\" preditivos"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Ativar animações do sistema para gestos \"Voltar\" preditivos."</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Ativar animações do sistema para gestos \"Voltar\" preditivos"</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"Esta configuração ativa animações do sistema para gestos preditivos. Ela requer que a política enableOnBackInvokedCallback por app seja definida como verdadeira no arquivo de manifesto."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"Mover para esquerda"</item>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"Mover para cima"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Não especificado"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutro"</string>
+    <string name="feminine" msgid="1529155595310784757">"Feminino"</string>
+    <string name="masculine" msgid="4653978041013996303">"Masculino"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ro/arrays.xml b/packages/SettingsLib/res/values-ro/arrays.xml
index f713051..c29a752 100644
--- a/packages/SettingsLib/res/values-ro/arrays.xml
+++ b/packages/SettingsLib/res/values-ro/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Sursă audio"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index ae9f1aa..6fda8d2 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acces la SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Audio HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Audio HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Aparate auditive"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Conectat la aparatul auditiv"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Aparate auditive"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Conectat la aparatul auditiv"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Conectat la LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Conectat la profilul pentru conținut media audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Conectat la componenta audio a telefonului"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Folosește pentru componenta audio a telefonului"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Folosește pentru transferul de fișiere"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Folosește pentru introducere date"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Folosește pentru aparatele auditive"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Folosește pentru aparatele auditive"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Folosește pentru LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Asociază"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"CONECTEAZĂ"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Anulează"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Asocierea dispozitivelor îți permite accesul la persoanele de contact și la istoricul apelurilor când dispozitivul este conectat."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Nu s-a putut împerechea cu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Nu s-a putut asocia cu <xliff:g id="DEVICE_NAME">%1$s</xliff:g> din cauza unui cod PIN sau a unei chei de acces incorecte."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Nu s-a putut asocia cu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>: cod PIN sau cheie de acces incorectă."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Nu se poate comunica cu <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Împerechere respinsă de <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Computer"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Alege un profil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Personal"</string>
     <string name="category_work" msgid="4014193632325996115">"Serviciu"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Clonează"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opțiuni pentru dezvoltatori"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Activează opțiunile pentru dezvoltatori"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Setează opțiuni pentru dezvoltarea aplicației"</string>
@@ -224,7 +225,7 @@
     <string name="apn_settings_not_available" msgid="1147111671403342300">"Setările pentru „Nume puncte de acces” nu sunt disponibile pentru acest utilizator"</string>
     <string name="enable_adb" msgid="8072776357237289039">"Remedierea erorilor prin USB"</string>
     <string name="enable_adb_summary" msgid="3711526030096574316">"Mod de remediere a erorilor când este conectat USB"</string>
-    <string name="clear_adb_keys" msgid="3010148733140369917">"Revoc autorizații remediere a erorilor prin USB"</string>
+    <string name="clear_adb_keys" msgid="3010148733140369917">"Revocă autorizații de remediere a erorilor prin USB"</string>
     <string name="enable_adb_wireless" msgid="6973226350963971018">"Remedierea erorilor wireless"</string>
     <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"Modul de remediere a erorilor când rețeaua Wi-Fi este conectată"</string>
     <string name="adb_wireless_error" msgid="721958772149779856">"Eroare"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Suprapunere care indică date curente pt. atingeri"</string>
     <string name="show_touches" msgid="8437666942161289025">"Afișează atingerile"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Afișează feedbackul vizual pentru atingeri"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Arată apăsările pe taste"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Arată feedback vizual pentru apăsările pe taste"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Actualizări suprafețe"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Iluminarea întregii fereastre la actualizare"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Afiș. actualizări ecran"</string>
@@ -374,9 +377,9 @@
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"Bară de navigare transparentă"</string>
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"Setează culoarea fundalului barei de navigare la transparentă în mod prestabilit"</string>
     <string name="window_blurs" msgid="6831008984828425106">"Permite estompări la nivel de fereastră"</string>
-    <string name="force_msaa" msgid="4081288296137775550">"Forțați MSAA 4x"</string>
+    <string name="force_msaa" msgid="4081288296137775550">"Forțează MSAA 4x"</string>
     <string name="force_msaa_summary" msgid="9070437493586769500">"Activează MSAA 4x în aplicațiile OpenGL ES 2.0"</string>
-    <string name="show_non_rect_clip" msgid="7499758654867881817">"Remediezi decupări nerectangulare"</string>
+    <string name="show_non_rect_clip" msgid="7499758654867881817">"Remediază decupări nerectangulare"</string>
     <string name="track_frame_time" msgid="522674651937771106">"Profil redare cu HWUI"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Activează nivelurile de depanare GPU"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Permite încărcarea nivelurilor de depanare GPU pentru aplicațiile de depanare"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Mai mult timp."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Mai puțin timp."</string>
     <string name="cancel" msgid="5665114069455378395">"Anulează"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Înainte"</string>
+    <string name="back" msgid="5554327870352703710">"Înapoi"</string>
+    <string name="save" msgid="3745809743277153149">"Salvează"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Gata"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarme și mementouri"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Chiar acum"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Acest telefon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Această tabletă"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Difuzorul dispozitivului de andocare"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Dispozitiv extern"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Dispozitiv conectat"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Acest telefon"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Nu se poate reda pe acest dispozitiv"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Fă upgrade contului pentru a comuta"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Adaugi un utilizator nou?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Poți să permiți accesul la acest dispozitiv altor persoane creând utilizatori suplimentari. Fiecare utilizator are propriul spațiu, pe care îl poate personaliza cu aplicații, imagini de fundal etc. De asemenea, utilizatorii pot ajusta setările dispozitivului, cum ar fi setările pentru Wi-Fi, care îi afectează pe toți ceilalți utilizatori.\n\nDupă ce adaugi un utilizator nou, acesta trebuie să-și configureze spațiul.\n\nOricare dintre utilizatori poate actualiza aplicațiile pentru toți ceilalți utilizatori. Este posibil ca setările de accesibilitate și serviciile să nu se transfere la noul utilizator."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Când adaugi un utilizator nou, acesta trebuie să-și configureze spațiul.\n\nOrice utilizator poate actualiza aplicațiile pentru toți ceilalți utilizatori."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Setezi acest utilizator ca administrator?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Administratorii au privilegii speciale în plus față de alți utilizatori. Un administrator poate să gestioneze toți utilizatorii, să actualizeze sau să reseteze dispozitivul, să modifice setările, să vadă toate aplicațiile instalate și să acorde sau să revoce privilegiile de administrator pentru alții."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Setează ca administrator"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Configurezi utilizatorul acum?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Asigură-te că utilizatorul are posibilitatea de a prelua dispozitivul și de a-și configura spațiul"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Configurezi profilul acum?"</string>
@@ -604,11 +604,11 @@
     <string name="add_guest_failed" msgid="8074548434469843443">"Nu s-a putut crea un invitat nou"</string>
     <string name="user_nickname" msgid="262624187455825083">"Pseudonim"</string>
     <string name="user_add_user" msgid="7876449291500212468">"Adaugă un utilizator"</string>
-    <string name="guest_new_guest" msgid="3482026122932643557">"Adăugați un invitat"</string>
+    <string name="guest_new_guest" msgid="3482026122932643557">"Adaugă un invitat"</string>
     <string name="guest_exit_guest" msgid="5908239569510734136">"Șterge invitatul"</string>
     <string name="guest_reset_guest" msgid="6110013010356013758">"Resetezi sesiunea pentru invitați"</string>
     <string name="guest_reset_guest_dialog_title" msgid="8047270010895437534">"Resetezi invitatul?"</string>
-    <string name="guest_remove_guest_dialog_title" msgid="4548511006624088072">"Excludeți invitatul?"</string>
+    <string name="guest_remove_guest_dialog_title" msgid="4548511006624088072">"Excluzi invitatul?"</string>
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Resetează"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Elimină"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Se resetează invitatul…"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Astfel, va începe o nouă sesiune pentru invitați și se vor șterge toate aplicațiile și datele din sesiunea actuală"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Ieși din modul pentru invitați?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Se vor șterge toate aplicațiile și datele din sesiunea pentru invitați actuală"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Setează ca administrator"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Nu seta ca administrator"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Ieși"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Salvezi activitatea invitatului?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Salvează activitatea din sesiunea actuală sau șterge aplicațiile și datele"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Deplasează în sus"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Nespecificat"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutru"</string>
+    <string name="feminine" msgid="1529155595310784757">"Feminin"</string>
+    <string name="masculine" msgid="4653978041013996303">"Masculin"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ru/arrays.xml b/packages/SettingsLib/res/values-ru/arrays.xml
index 80ae696..3e3b21c 100644
--- a/packages/SettingsLib/res/values-ru/arrays.xml
+++ b/packages/SettingsLib/res/values-ru/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Источник аудио"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 96179d7..8127ef2 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -59,7 +59,7 @@
     <string name="wifi_check_password_try_again" msgid="8817789642851605628">"Возможно, вы указали неверный пароль. Повторите попытку."</string>
     <string name="wifi_not_in_range" msgid="1541760821805777772">"Недоступна"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Подключение не будет выполняться автоматически"</string>
-    <string name="wifi_no_internet" msgid="1774198889176926299">"Без доступа к Интернету"</string>
+    <string name="wifi_no_internet" msgid="1774198889176926299">"Без доступа к интернету"</string>
     <string name="saved_network" msgid="7143698034077223645">"Сохранено: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_network_scorer" msgid="7665725527352893558">"Автоматически подключено к %1$s"</string>
     <string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Автоматически подключено через автора рейтинга сетей"</string>
@@ -86,7 +86,7 @@
     <string name="bluetooth_disconnecting" msgid="7638892134401574338">"Отключение..."</string>
     <string name="bluetooth_connecting" msgid="5871702668260192755">"Подключение..."</string>
     <string name="bluetooth_connected" msgid="8065345572198502293">"Подключено<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
-    <string name="bluetooth_pairing" msgid="4269046942588193600">"Устанавливается соединение..."</string>
+    <string name="bluetooth_pairing" msgid="4269046942588193600">"Подключение..."</string>
     <string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"Подключено (кроме звонков)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"Подключено (кроме аудио)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
     <string name="bluetooth_connected_no_headset_no_a2dp" msgid="2893204819854215433">"Подключено (кроме звонков и аудио)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Доступ к SIM-карте"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD Audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD Audio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Слуховые аппараты"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Слуховой аппарат подключен"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Слуховые аппараты"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Слуховой аппарат подключен"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Подключено к LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Подключено к мультимедийному аудиоустройству"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Подключено к аудиоустройству телефона"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Использовать для аудиоустройства телефона"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Используется для передачи файлов"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Использовать для ввода"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Использовать для слухового аппарата"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Использовать для слухового аппарата"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Использовать для LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Добавить"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ДОБАВИТЬ"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Отмена"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Установление соединения обеспечивает доступ к вашим контактам и журналу звонков при подключении."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Не удалось подключиться к устройству \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Устройство \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\" не подключено: неверный PIN-код или пароль."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"\"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\" не подключается: неверный PIN-код или пароль."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Не удается установить соединение с устройством \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> не разрешает подключение."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Компьютер"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Выбор профиля"</string>
     <string name="category_personal" msgid="6236798763159385225">"Личный профиль"</string>
     <string name="category_work" msgid="4014193632325996115">"Рабочий профиль"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Клон"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Для разработчиков"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Включить параметры для разработчиков"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Настройка параметров для разработчиков"</string>
@@ -257,7 +258,7 @@
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Показывать в меню кнопки питания пункт для отправки отчета об ошибке"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Не выключать экран"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"Во время зарядки экран будет всегда включен"</string>
-    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Включить журнал HCI Bluetooth"</string>
+    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Включить snoop-логи HCI Bluetooth"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Сохранять все пакеты Bluetooth (перезапустите Bluetooth после изменения этой настройки)"</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"Заводская разблокировка"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"Разрешить разблокировку загрузчика ОС"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Показывать данные касаний и жестов"</string>
     <string name="show_touches" msgid="8437666942161289025">"Показывать нажатия"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Визуальный отклик при нажатии"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Показывать нажатия клавиш"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Показывать визуальный отклик при нажатии клавиш"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Показ. обнов. поверхности"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Подсвечивать поверхности окон при обновлении"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Показывать обнов. экрана"</string>
@@ -366,7 +369,7 @@
     <string name="simulate_color_space" msgid="1206503300335835151">"Имитировать аномалию"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"Вкл. трассировку OpenGL"</string>
     <string name="usb_audio_disable_routing" msgid="3367656923544254975">"Откл. передачу аудио (USB)"</string>
-    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Откл. автом. маршрутизацию на внеш. USB-устройства"</string>
+    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Отключить автоматическую передачу на внешние USB-устройства"</string>
     <string name="debug_layout" msgid="1659216803043339741">"Показывать границы элементов"</string>
     <string name="debug_layout_summary" msgid="8825829038287321978">"Показывать границы обрезки, поля и т. п."</string>
     <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Отразить интерфейс"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Увеличить продолжительность"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Уменьшить продолжительность"</string>
     <string name="cancel" msgid="5665114069455378395">"Отмена"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Далее"</string>
+    <string name="back" msgid="5554327870352703710">"Назад"</string>
+    <string name="save" msgid="3745809743277153149">"Сохранить"</string>
     <string name="okay" msgid="949938843324579502">"ОК"</string>
     <string name="done" msgid="381184316122520313">"Готово"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Будильники и напоминания"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Только что"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Этот смартфон"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Этот планшет"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Колонка с док-станцией"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Внешнее устройство"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Подключенное устройство"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Этот смартфон"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Невозможно воспроизвести на этом устройстве."</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Для переключения требуется премиум-аккаунт"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Добавить пользователя"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Профиль с огр. доступом"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Добавить пользователя?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Если этим устройством пользуются сразу несколько человек, для каждого из них можно создать отдельный профиль – практически собственное пространство со своими приложениями, обоями и т. д. При этом из профиля можно поменять и настройки устройства, общие для всех, например выбрать сеть Wi-Fi.\n\nКогда вы добавляете нового пользователя, ему нужно настроить свой профиль.\n\nОбновлять общие приложения может любой пользователь, однако специальные возможности настраиваются индивидуально."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Если этим устройством пользуются сразу несколько человек, для каждого из них можно создать профиль – отдельное пространство с выбранными приложениями, обоями и т. д. Новый пользователь настраивает его сам.\n\nИз профиля можно поменять и общие настройки устройства, например сеть Wi-Fi.\n\nОбновлять общие приложения могут все, однако специальные возможности настраиваются индивидуально."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"После создания профиля его потребуется настроить.\n\nЛюбой пользователь устройства может обновлять приложения для всех аккаунтов."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Назначить этого пользователя администратором?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"У администраторов права шире, чем у других пользователей. Администратор может управлять аккаунтами всех пользователей, обновлять ПО на устройстве, менять и сбрасывать его настройки, просматривать установленные приложения, а также предоставлять и отзывать права администратора."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Назначить администратором"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Настроить профиль?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Вам потребуется передать устройство пользователю, чтобы он мог настроить свой профиль."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Настроить профиль?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"При этом начнется новый гостевой сеанс, а все данные и приложения предыдущего сеанса будут удалены."</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Выйти из гостевого режима?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Все приложения и данные текущего гостевого сеанса будут удалены."</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Предоставить права администратора"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Не предоставлять права администратора"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Выйти"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Сохранить историю сеанса?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Сохраните историю текущего сеанса или удалите данные и приложения."</string>
@@ -628,8 +626,8 @@
     <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_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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Переместите палец вверх"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Не указан"</string>
+    <string name="neuter" msgid="2075249330106127310">"Средний"</string>
+    <string name="feminine" msgid="1529155595310784757">"Женский"</string>
+    <string name="masculine" msgid="4653978041013996303">"Мужской"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-si/arrays.xml b/packages/SettingsLib/res/values-si/arrays.xml
index 01103f5..dea89e5 100644
--- a/packages/SettingsLib/res/values-si/arrays.xml
+++ b/packages/SettingsLib/res/values-si/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (ආරක්ෂිත)"</item>
     <item msgid="7322156123728520872">"4K (පරිමාණය වැඩි කළ)"</item>
     <item msgid="7735692090314849188">"4K (පරිමාණය වැඩි කළ, ආරක්ෂිත)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (ද්විත්ව තිරය)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"කිසිවක් නැත"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"ශ්‍රව්‍ය මූලය"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index 8dfe489..277125d 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM ප්‍රවේශය"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD ශ්‍රව්‍යය: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD ශ්‍රව්‍යය"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"ශ්‍රවණාධාරක"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE ශ්‍රව්‍ය"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"ශ්‍රවණාධාරක වෙත සම්බන්ධ කළා"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"ශ්‍රවණාධාරක"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE ශ්‍රව්‍ය"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"ශ්‍රවණාධාරක වෙත සම්බන්ධ කළා"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE ශ්‍රව්‍ය වෙත සම්බන්ධ විය"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"මාධ්‍ය ශ්‍රව්‍යට සම්බන්ධ විය"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"දුරකතනයේ ශ්‍රව්‍යට සම්බන්ධ විය"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"දුරකථන ශ්‍රව්‍ය සඳහා භාවිතා කෙරේ"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ගොනු හුවමාරුව සඳහා භාවිතා කරන්න"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ආදානය සඳහා භාවිතා කරන්න"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"ශ්‍රවණාධාර සඳහා භාවිත කරන්න"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"ශ්‍රවණාධාර සඳහා භාවිත කරන්න"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO සඳහා භාවිත කරන්න"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"යුගල කරන්න"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"යුගල කරන්න"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"පැතිකඩ තෝරන්න"</string>
     <string name="category_personal" msgid="6236798763159385225">"පෞද්ගලික"</string>
     <string name="category_work" msgid="4014193632325996115">"කාර්යාලය"</string>
+    <string name="category_clone" msgid="1554511758987195974">"ක්ලෝන කරන්න"</string>
     <string name="development_settings_title" msgid="140296922921597393">"වර්ධක විකල්ප"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"සංවර්ධක විකල්ප සබල කිරීම"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"යෙදුම් සංවර්ධනයට විකල්ප සකසන්න"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"තිර උඩැතිරිය වර්තමාන ස්පර්ශ දත්ත පෙන්වයි"</string>
     <string name="show_touches" msgid="8437666942161289025">"තට්ටු කිරීම් පෙන්වන්න"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"තට්ටු කිරීම් සඳහා දෘශ්‍ය ප්‍රතිපෝෂණ පෙන්වන්න"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"යතුරු එබීම් පෙන්වන්න"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"භෞතික යතුරු එබීම සඳහා දෘශ්‍ය ප්‍රතිපෝෂණය පෙන්වන්න"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"පෘෂ්ඨ යාවත්කාලීන පෙන්වන්න"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"යාවත්කාලින වනවිට මුළු කවුළු තලයම දැල්වෙන්න"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"නැරඹීම් යාවත්කාලීන පෙන්වන්න"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"වේලාව වැඩියෙන්."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"වේලාව අඩුවෙන්."</string>
     <string name="cancel" msgid="5665114069455378395">"අවලංගු කරන්න"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"මීළඟ"</string>
+    <string name="back" msgid="5554327870352703710">"ආපසු"</string>
+    <string name="save" msgid="3745809743277153149">"සුරකින්න"</string>
     <string name="okay" msgid="949938843324579502">"හරි"</string>
     <string name="done" msgid="381184316122520313">"නිමයි"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"එලාම සහ සිහිකැඳවීම්"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"මේ දැන්"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"මෙම දුරකථනය"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"මෙම ටැබ්ලටය"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"ඩොක් ස්පීකරය"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"බාහිර උපාංගය"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"සම්බන්ධ කළ උපාංගය"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"මෙම දුරකථනය"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"මෙම උපාංගය මත ධාවනය කළ නොහැක"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"මාරු වීමට ගිණුම උත්ශ්‍රේණි කරන්න"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"අලුත් පරිශීලකයෙක් එක් කරන්නද?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"අමතර පරිශීලකයින් නිර්මාණය කිරීම මඟින් වෙනත් පුද්ගලයන් සමඟ මෙම උපාංගය ඔබට බෙදා ගත හැකිය. සෑම පරිශීලකයෙක්ටම ඔවුන්ගේම යෙදුම්, වෝල්පේපර, සහ වෙනත් ඒවා අභිරුචි කළ හැකි තමන්ට අයිති ඉඩක් ඇත. පරිශීලකයින්ට Wi‑Fi වැනි සෑම දෙනාටම බලපාන උපාංග සැකසීම්ද සීරුමාරු කළ හැක.\n\nඔබ නව පරිශීලකයෙකු එක් කළ විට ඔවුන්ගේ ඉඩ එම පුද්ගලයා සකසා ගත යුතු වේ.\n\nඕනෑම පරිශීලකයෙකුට අනෙක් සියලු පරිශීලකයන් සඳහා යෙදුම් යාවත්කාලීන කළ හැකිය. ප්‍රවේශයතා සැකසීම් සහ සේවා නව පරිශීලකයා වෙත මාරු නොකරනු ඇත."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"ඔබ අලුත් පරිශීලකයෙක් එකතු කරන විට, එම පුද්ගලයා ඔහුගේ වැඩ කරන ඉඩ සකසා ගත යුතුය.\n\nසියළුම අනෙක් පරිශීලකයින් සඳහා ඕනෑම පරිශීලකයෙකුට යාවත්කාලීන කළ හැක."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"මෙම පරිශීලකයා පරිපාලකයෙකු කරන්න ද?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"පරිපාලකයින්ට වෙනත් පරිශීලකයින්ට නොමැති විශේෂ වරප්‍රසාද ඇත. පරිපාලකයෙකුට සියලු පරිශීලකයින් කළමනාකරණය කිරීමට, මෙම උපාංගය යාවත්කාලීන කිරීමට හෝ යළි සැකසීමට, සැකසීම් වෙනස් කිරීමට, ස්ථාපිත සියලු යෙදුම් බැලීමට, සහ අනෙකුත් අය සඳහා පරිපාලක වරප්‍රසාද ප්‍රදානය කිරීමට හෝ අහෝසි කිරීමට හැක."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"පරිපාලක කරන්න"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"දැන් පරිශීලකයා සකසන්නද?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"උපාංගය ලබාගෙන තමන්ගේ ඉඩ සකසා ගැනීමට අදාළ පුද්ගලයා සිටින බව තහවුරු කරගන්න"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"දැන් පැතිකඩ සකසන්නද?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"මෙය නව ආගන්තුක සැසියක් ආරම්භ කර වත්මන් සැසියෙන් සියලු යෙදුම් සහ දත්ත මකනු ඇත"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"ආගන්තුක ප්‍රකාරයෙන් පිටවන්නද?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"මෙය වත්මන් ආගන්තුක සැසියෙන් යෙදුම් සහ දත්ත මකනු ඇත"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"ඔව්, ඔවුන්ව පරිපාලකයෙකු කරන්න"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"නැහැ, ඔවුන්ව පරිපාලකයෙකු නොකරන්න"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"පිටවන්න"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"ආගන්තුක ක්‍රියාකාරකම් සුරකින්නද?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"ඔබට වත්මන් සැසියෙන් ක්‍රියාකාරකම් සුරැකීමට හෝ සියලු යෙදුම් සහ දත්ත මැකීමට හැකිය"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"ඉහළට ගෙන යන්න"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"විශේෂයෙන් සඳහන් නොකළ"</string>
+    <string name="neuter" msgid="2075249330106127310">"නපුංසක"</string>
+    <string name="feminine" msgid="1529155595310784757">"ස්ත්‍රී"</string>
+    <string name="masculine" msgid="4653978041013996303">"පුරුෂ"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-sk/arrays.xml b/packages/SettingsLib/res/values-sk/arrays.xml
index 5a6eb99..12adda5 100644
--- a/packages/SettingsLib/res/values-sk/arrays.xml
+++ b/packages/SettingsLib/res/values-sk/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Zdroj zvuku"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index cbfdcef..52b0f0b 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -107,16 +107,16 @@
     <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="4262303387989406171">"Zdieľanie kontaktov a histórie hovorov"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Zdieľať kontakty a históriu 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>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD zvuk: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD zvuk"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Načúvadlá"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Pripojené k načúvadlám"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Načúvadlá"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Pripojené k načúvadlám"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Pripojené k systému LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Pripojené ku zvukovému médiu"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Pripojené ku zvuku telefónu"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Použiť pre zvuk telefónu"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Použiť na prenos súborov"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Použiť pre vstup"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Použiť pre načúvadlá"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Používať pre načúvadlá"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Používať s profilom LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Párovať"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"PÁROVAŤ"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Zrušiť"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Párovaním udelíte zariadeniam po pripojení prístup k svojim kontaktom a histórii hovorov."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Nepodarilo sa spárovať so zariadením <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"So zariadením <xliff:g id="DEVICE_NAME">%1$s</xliff:g> sa nespárovalo pre nesprávny kód PIN alebo prístupový kľúč."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Nespárované so zariadením <xliff:g id="DEVICE_NAME">%1$s</xliff:g>: nesprávny PIN či prístupový kľúč."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"So zariadením <xliff:g id="DEVICE_NAME">%1$s</xliff:g> nie je možné komunikovať."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Párovanie odmietnuté zariadením <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Počítač"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Výber profilu"</string>
     <string name="category_personal" msgid="6236798763159385225">"Osobné"</string>
     <string name="category_work" msgid="4014193632325996115">"Pracovné"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klonovanie"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Pre vývojárov"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Povolenie možností vývojára"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Možnosti nastavenia vývoja aplikácií"</string>
@@ -305,7 +306,7 @@
     <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"Keď je tento režim aktivovaný, adresa MAC tohto zariadenia sa môže pri každom pripojení k sieti s aktivovanou randomizáciou adries MAC zmeniť."</string>
     <string name="wifi_metered_label" msgid="8737187690304098638">"Merané"</string>
     <string name="wifi_unmetered_label" msgid="6174142840934095093">"Bez merania dát"</string>
-    <string name="select_logd_size_title" msgid="1604578195914595173">"Vyrovnávacia pamäť nástroja denníkov"</string>
+    <string name="select_logd_size_title" msgid="1604578195914595173">"Vyrovnávacia pamäť zapisovača do denníkov"</string>
     <string name="select_logd_size_dialog_title" msgid="2105401994681013578">"Veľkosť vyrovnávacej pamäte nástroja denníkov"</string>
     <string name="dev_logpersist_clear_warning_title" msgid="8631859265777337991">"Vymazať trvalé úložisko zapisovača do denníka?"</string>
     <string name="dev_logpersist_clear_warning_message" msgid="6447590867594287413">"Keď prestaneme monitorovať pomocou trvalého zapisovača do denníka, musíme vymazať jeho dáta, ktoré sa nachádzajú vo vašom zariadení."</string>
@@ -327,7 +328,7 @@
     <string name="dev_settings_warning_message" msgid="37741686486073668">"Tieto nastavenia sú určené len pre vývojárov. Môžu spôsobiť poruchu alebo nesprávne fungovanie zariadenia a nainštalovaných aplikácií."</string>
     <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"Overovať aplikácie z USB"</string>
     <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"Kontrolovať škodlivosť aplikácií nainštalovaných pomocou nástroja ADB alebo ADT"</string>
-    <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"Zariadenia Bluetooth sa budú zobrazovať bez názvov (iba adresy MAC)"</string>
+    <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"Zobraziť zariadenia Bluetooth zobrazovať bez názvov (iba adresy MAC)"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"Zakázať funkciu absolútnej hlasitosti rozhrania Bluetooth pri problémoch s hlasitosťou vo vzdialených zariadeniach (napr. príliš vysoká hlasitosť alebo absencia ovládacích prvkov)"</string>
     <string name="bluetooth_enable_gabeldorsche_summary" msgid="2054730331770712629">"Povoliť skupinu funkcií Bluetooth Gabeldorche"</string>
     <string name="enhanced_connectivity_summary" msgid="1576414159820676330">"Povoľuje funkciu Zlepšené možnosti pripojenia."</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Zobraziť prekryvnú vrstvu s aktuálnymi údajmi o klepnutiach"</string>
     <string name="show_touches" msgid="8437666942161289025">"Zobrazovať klepnutia"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Vizuálne znázorňovať klepnutia"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Zobrazovať stlač. kláves."</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Zobr. vizuálnu spätnú väzbu fyz. stlač. klávesov"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Ukazovať obnovenia obsahu"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Rozblikať obsah okna pri aktualizácii"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Ukazovať obnovenia zobrazenia"</string>
@@ -363,16 +366,16 @@
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"Ladiť prekresľovanie grafickým procesorom"</string>
     <string name="disable_overlays" msgid="4206590799671557143">"Zakázať hardvérové prekrytia"</string>
     <string name="disable_overlays_summary" msgid="1954852414363338166">"Vždy skladať obrazovku grafickým procesorom"</string>
-    <string name="simulate_color_space" msgid="1206503300335835151">"Simulácia far. priestoru"</string>
+    <string name="simulate_color_space" msgid="1206503300335835151">"Simulácia farebného priestoru"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"Trasovanie OpenGL"</string>
-    <string name="usb_audio_disable_routing" msgid="3367656923544254975">"Vyp. smer. zvuku do USB"</string>
+    <string name="usb_audio_disable_routing" msgid="3367656923544254975">"Vypnúť smerovanie zvuku do USB"</string>
     <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Vypnúť automatické smerovanie do audio periférií USB"</string>
     <string name="debug_layout" msgid="1659216803043339741">"Zobrazovať ohraničenia"</string>
     <string name="debug_layout_summary" msgid="8825829038287321978">"Zobraziť vo výstrižku ohraničenie, okraje a pod."</string>
-    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Rozloženie sprava doľava"</string>
+    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Vynútiť rozloženie sprava doľava"</string>
     <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Vynútiť pre všetky jazyky rozloženie obrazovky sprava doľava"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"Priehľadný navigačný panel"</string>
-    <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"Nastaviť farbu pozadia navigačné panela predvolene priehľadnú"</string>
+    <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"Nastaviť farbu pozadia navigačného panela predvolene priehľadnú"</string>
     <string name="window_blurs" msgid="6831008984828425106">"Povoliť rozmazanie na úrovni okna"</string>
     <string name="force_msaa" msgid="4081288296137775550">"Vynútiť 4x MSAA"</string>
     <string name="force_msaa_summary" msgid="9070437493586769500">"Povoliť 4x MSAA v aplikáciách OpenGL ES 2.0"</string>
@@ -380,7 +383,7 @@
     <string name="track_frame_time" msgid="522674651937771106">"Vykresľovanie HWUI profilu"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Povoliť vrstvy ladenia grafického procesora"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Povoliť načítanie vrstiev ladenia grafického procesora na ladenie aplikácií"</string>
-    <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Aktivovať podr. zapis. dodáv. do denníka"</string>
+    <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Aktivovať podrobný zápis dodávateľov do denníka"</string>
     <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Zahŕňať do hlásení chýb ďalšie denníky dodávateľa pre konkrétne zariadenie, ktoré môžu obsahovať osobné údaje, zvýšiť spotrebu batérie alebo zabrať viac ukladacieho priestoru"</string>
     <string name="window_animation_scale_title" msgid="5236381298376812508">"Mierka animácie okna"</string>
     <string name="transition_animation_scale_title" msgid="1278477690695439337">"Mierka animácie premeny"</string>
@@ -392,7 +395,7 @@
     <string name="app_process_limit_title" msgid="8361367869453043007">"Limit procesov na pozadí"</string>
     <string name="show_all_anrs" msgid="9160563836616468726">"Zobrazovať nereagovania aplikácií na pozadí"</string>
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"Zobrazovať dialógové okno „Aplikácia nereaguje“ pre aplikácie na pozadí"</string>
-    <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Zobraziť hlásenia kanála upozornení"</string>
+    <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Zobraziť varovania kanála upozornení"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Zobrazovať na obrazovke varovné hlásenie, keď aplikácia zverejní upozornenie bez platného kanála"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"Vynútiť povolenie aplikácií na externom úložisku"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Umožniť zapísať akúkoľvek aplikáciu do externého úložiska bez ohľadu na hodnoty v manifeste"</string>
@@ -544,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Teraz"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Tento telefón"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Tento tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Reproduktor doku"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Externé zariadenie"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Pripojené zariadenie"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Tento telefón"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"V tomto zariadení sa nedá prehrávať obsah"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Inovujte účet a prejdite naň"</string>
@@ -551,7 +557,7 @@
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Skúste to znova po reklame"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Ak chcete prehrávať obsah tu, prebuďte zariadenie"</string>
     <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Prehrávanie v tomto zariadení nie je schválené"</string>
-    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Tu sa toto médium nedá prehrať"</string>
+    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Médium sa tu nedá prehrať"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Pri pripájaní sa vyskytol problém. Zariadenie vypnite a znova zapnite."</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Audio zariadenie s káblom"</string>
     <string name="help_label" msgid="3528360748637781274">"Pomocník a spätná väzba"</string>
@@ -574,8 +580,8 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Používateľ"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Obmedzený profil"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Pridať nového používateľa?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Vytvorením ďalších používateľov môžete toto zariadenie zdieľať s inými ľuďmi. Každý používateľ má svoje prostredie, ktoré si môže prispôsobiť vlastnými aplikáciami, tapetou atď. Používatelia tiež môžu upraviť nastavenia zariadenia (napr. Wi-Fi), ktoré ovplyvnia všetkých používateľov.\n\nKeď pridáte nového používateľa, musí si nastaviť vlastný priestor.\n\nAkýkoľvek používateľ môže aktualizovať aplikácie všetkých používateľov. Nastavenia dostupnosti a služby sa nemusia preniesť novému používateľovi."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"Keď pridáte nového používateľa, musí si nastaviť vlastný priestor.\n\nAkýkoľvek používateľ môže aktualizovať aplikácie všetkých ostatných používateľov."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Vytvorením ďalších používateľov môžete toto zariadenie zdieľať s inými ľuďmi. Každý používateľ má svoje prostredie, ktoré si môže prispôsobiť vlastnými aplikáciami, tapetou atď. Používatelia tiež môžu upraviť nastavenia zariadenia (napr. Wi-Fi), ktoré ovplyvnia všetkých používateľov.\n\nKeď pridáte nového používateľa, musí si nastaviť vlastný priestor.\n\nKaždý používateľ môže aktualizovať aplikácie všetkých používateľov. Nastavenia dostupnosti a služby sa nemusia preniesť novému používateľovi."</string>
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"Keď pridáte nového používateľa, musí si nastaviť vlastný priestor.\n\nKaždý používateľ môže aktualizovať aplikácie všetkých ostatných používateľov."</string>
     <string name="user_grant_admin_title" msgid="5157031020083343984">"Chcete tohto používateľa nastaviť ako správcu?"</string>
     <string name="user_grant_admin_message" msgid="1673791931033486709">"Správcovia majú oproti iným používateľom špeciálne oprávnenia. Správca môže ovládať všetkých používateľov, aktualizovať alebo resetovať toto zariadenie, upravovať nastavenia, prezerať všetky nainštalované aplikácie a udeľovať či odoberať správcovské oprávnenia iným používateľom."</string>
     <string name="user_grant_admin_button" msgid="5441486731331725756">"Nastaviť ako správcu"</string>
@@ -670,14 +676,14 @@
     <string name="keyboard_layout_dialog_title" msgid="3927180147005616290">"Vyberte rozloženie klávesnice"</string>
     <string name="keyboard_layout_default_label" msgid="1997292217218546957">"Predvolené"</string>
     <string name="turn_screen_on_title" msgid="3266937298097573424">"Zapínanie obrazovky"</string>
-    <string name="allow_turn_screen_on" msgid="6194845766392742639">"Povolenie zapínania obrazovky"</string>
+    <string name="allow_turn_screen_on" msgid="6194845766392742639">"Povoliť zapínanie obrazovky"</string>
     <string name="allow_turn_screen_on_description" msgid="43834403291575164">"Povoľte aplikácii zapínať obrazovku. Ak to urobíte, aplikácia bude môcť kedykoľvek zapínať obrazovku, a to aj vtedy, keď to nebudete mať v úmysle."</string>
     <string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"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="268234802198852753">"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="5749813313369517812">"Vysielanie aplikácie <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"Zmena výstupu"</string>
     <string name="back_navigation_animation" msgid="8105467568421689484">"Prediktívne animácie gesta Späť"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Povoľte animácie v systéme pre prediktívne gesto Späť"</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Povoliť animácie v systéme pre prediktívne gesto Späť"</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"Toto nastavenie povoľuje animácie v systéme na účely prediktívnej animácie gest. Vyžaduje nastavenie povolenia enableOnBackInvokedCallback na pravdu v súbore manifestu konkrétnej aplikácie."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"Posuňte doľava"</item>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"Presuňte nahor"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Nešpecifikované"</string>
+    <string name="neuter" msgid="2075249330106127310">"Stredný rod"</string>
+    <string name="feminine" msgid="1529155595310784757">"Ženský rod"</string>
+    <string name="masculine" msgid="4653978041013996303">"Mužský rod"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-sl/arrays.xml b/packages/SettingsLib/res/values-sl/arrays.xml
index aff47ed..301e377 100644
--- a/packages/SettingsLib/res/values-sl/arrays.xml
+++ b/packages/SettingsLib/res/values-sl/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Vir zvoka"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index 222f300..fdd0a22 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Dostop do kartice SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Zvok visoke kakovosti: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Zvok visoke kakovosti"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Slušni pripomočki"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Povezava s slušnimi pripomočki je vzpostavljena"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Slušni aparati"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE zvok"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Povezava s slušnimi aparati je vzpostavljena."</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Povezano s profilom LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Povezan s profilom za predstavnostni zvok"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Povezava s profilom za zvok telefona vzpostavljena"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Uporabi za zvok telefona"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Uporabi za prenos datotek"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Uporabi za vnos"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Uporabi za slušne pripomočke"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Uporabi za slušne aparate"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Uporaba za profil LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Seznani"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"SEZNANI"</string>
@@ -214,7 +214,8 @@
   </string-array>
     <string name="choose_profile" msgid="343803890897657450">"Izbira profila"</string>
     <string name="category_personal" msgid="6236798763159385225">"Osebno"</string>
-    <string name="category_work" msgid="4014193632325996115">"Služba"</string>
+    <string name="category_work" msgid="4014193632325996115">"Delo"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klon"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Možnosti za razvijalce"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Omogočanje možnosti za razvijalce"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Nastavi možnosti za razvoj aplikacij"</string>
@@ -269,8 +270,8 @@
     <string name="debug_networking_category" msgid="6829757985772659599">"Omrežja"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"Potrdilo brezžičnega zaslona"</string>
     <string name="wifi_verbose_logging" msgid="1785910450009679371">"Omogoči podrobno zapisovanje dnevnika za Wi-Fi"</string>
-    <string name="wifi_scan_throttling" msgid="2985624788509913617">"Omejevanje iskanja omrežij Wi-Fi"</string>
-    <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Dodeljevanje nestalnega naključnega naslova MAC za Wi-Fi"</string>
+    <string name="wifi_scan_throttling" msgid="2985624788509913617">"Omeji iskanje omrežij Wi-Fi"</string>
+    <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Dodeli nestalni naključni naslov MAC za Wi-Fi"</string>
     <string name="mobile_data_always_on" msgid="8275958101875563572">"Prenos podatkov v mobilnem omrežju je vedno aktiven"</string>
     <string name="tethering_hardware_offload" msgid="4116053719006939161">"Strojno pospeševanje za internetno povezavo prek mobilnega telefona"</string>
     <string name="bluetooth_show_devices_without_names" msgid="923584526471885819">"Prikaži naprave Bluetooth brez imen"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Prekrivanje zaslona prikazuje trenutni dotik."</string>
     <string name="show_touches" msgid="8437666942161289025">"Prikaži dotike"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Prikaži vizualne povratne informacije za dotike."</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Pokaži pritiske tipk"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Pokaži vizualne povratne informacije za pritiske fizičnih tipk"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Pokaži posodob. površine"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Ob posodobitvi osveži celotne površine oken."</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Prikaži posodob. pogleda"</string>
@@ -515,7 +518,7 @@
     <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"Ni registrirana"</string>
     <string name="status_unavailable" msgid="5279036186589861608">"Ni na voljo"</string>
     <string name="wifi_status_mac_randomized" msgid="466382542497832189">"Naslov MAC je naključno izbran"</string>
-    <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 naprav ni povezanih}=1{1 naprava je povezana}one{# naprava je povezana}two{# napravi sta povezani}few{# naprave so povezane}other{# naprav je povezanih}}"</string>
+    <string name="wifi_tether_connected_summary" msgid="5282919920463340158">"{count,plural, =0{0 naprav ni povezanih.}=1{1 naprava je povezana.}one{# naprava je povezana.}two{# napravi sta povezani.}few{# naprave so povezane.}other{# naprav je povezanih.}}"</string>
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Daljši čas."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Krajši čas."</string>
     <string name="cancel" msgid="5665114069455378395">"Prekliči"</string>
@@ -544,12 +547,15 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Pravkar"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Ta telefon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Ta tablični računalnik"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Zvočnik nosilca"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Zunanja naprava"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Povezana naprava"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Ta telefon"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Ni mogoče predvajati v tej napravi."</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Za preklop je potrebna nadgradnja računa"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Tukaj ni mogoče predvajati prenosov"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Prenosov tu ni mogoče predvajati"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Poskusite znova po oglasu"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Zbudite napravo, če želite predvajati tukaj."</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Zbudite napravo za predvajanje tu"</string>
     <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Naprava ni odobrena za predvajanje."</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Te predstavnosti ni mogoče predvajati tukaj."</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Težava pri povezovanju. Napravo izklopite in znova vklopite."</string>
@@ -591,7 +597,7 @@
     <string name="profile_info_settings_title" msgid="105699672534365099">"Podatki za profil"</string>
     <string name="user_need_lock_message" msgid="4311424336209509301">"Preden lahko ustvarite profil z omejitvami, morate nastaviti zaklepanje zaslona, da zaščitite aplikacije in osebne podatke."</string>
     <string name="user_set_lock_button" msgid="1427128184982594856">"Nastavi zaklepanje"</string>
-    <string name="user_switch_to_user" msgid="6975428297154968543">"Preklopi na račun <xliff:g id="USER_NAME">%s</xliff:g>"</string>
+    <string name="user_switch_to_user" msgid="6975428297154968543">"Preklopi na uporabnika <xliff:g id="USER_NAME">%s</xliff:g>"</string>
     <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"Ustvarjanje novega uporabnika …"</string>
     <string name="creating_new_guest_dialog_message" msgid="1114905602181350690">"Ustvarjanje novega gosta …"</string>
     <string name="add_user_failed" msgid="4809887794313944872">"Ustvarjanje novega uporabnika ni uspelo."</string>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"Premaknite se navzgor"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Ni določeno"</string>
+    <string name="neuter" msgid="2075249330106127310">"Srednji spol"</string>
+    <string name="feminine" msgid="1529155595310784757">"Ženski spol"</string>
+    <string name="masculine" msgid="4653978041013996303">"Moški spol"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-sq/arrays.xml b/packages/SettingsLib/res/values-sq/arrays.xml
index 60dba5b..bd03199 100644
--- a/packages/SettingsLib/res/values-sq/arrays.xml
+++ b/packages/SettingsLib/res/values-sq/arrays.xml
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (i sigurt)"</item>
     <item msgid="7322156123728520872">"4K (i përshkallëzuar)"</item>
     <item msgid="7735692090314849188">"4K (i përshkallëzuar, i sigurt)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (në dy ekrane)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"Asnjë"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Burimi i audios"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index f5cfb95..1622ff7 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Qasje në kartën SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Audio HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Audio HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Aparatet e dëgjimit"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"Audioja LE"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Lidhur me aparatet e dëgjimit"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Aparatet e dëgjimit"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Lidhur me aparatet e dëgjimit"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"U lidh me audion LE"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"U lidh me audion e medias"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"U lidh me audion e telefonit"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Përdor për audion e telefonit"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Përdor për transferimin e skedarëve"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Përdore për hyrjen"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Përdore për aparatet e dëgjimit"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Përdore për aparatet e dëgjimit"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Përdor për LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Çifto"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ÇIFTO"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Zgjidh profilin"</string>
     <string name="category_personal" msgid="6236798763159385225">"Personale"</string>
     <string name="category_work" msgid="4014193632325996115">"Punë"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klono"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Opsionet e zhvilluesit"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Aktivizo opsionet e zhvilluesit"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Cakto opsionet për zhvillimin e aplikacionit"</string>
@@ -268,7 +269,7 @@
     <string name="mock_location_app_set" msgid="4706722469342913843">"Aplikacioni për simulimin e vendndodhjes: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="6829757985772659599">"Rrjetet"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"Certifikimi i ekranit pa tel"</string>
-    <string name="wifi_verbose_logging" msgid="1785910450009679371">"Aktivizo hyrjen Wi-Fi Verbose"</string>
+    <string name="wifi_verbose_logging" msgid="1785910450009679371">"Aktivizo regjistrimin Wi-Fi Verbose"</string>
     <string name="wifi_scan_throttling" msgid="2985624788509913617">"Përshpejtimi i skanimit të Wi‑Fi"</string>
     <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Renditje e rastësishme jo e përhershme e MAC për Wi‑Fi"</string>
     <string name="mobile_data_always_on" msgid="8275958101875563572">"Të dhënat celulare gjithmonë aktive"</string>
@@ -287,7 +288,7 @@
     <string name="bluetooth_select_a2dp_codec_type_help_info" msgid="8647200416514412338">"Çaktivizimi do të thotë se nuk mbështetet nga telefoni ose kufjet"</string>
     <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="6253965294594390806">"Bite për shembull Bluetooth Audio"</string>
     <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="4898693684282596143">"Aktivizo kodekun e audios me Bluetooth\nZgjedhja: Bite për shembull"</string>
-    <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="364277285688014427">"Regjimi i kanalit Bluetooth Audio"</string>
+    <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="364277285688014427">"Modaliteti i kanalit të audios me Bluetooth"</string>
     <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="2076949781460359589">"Aktivizo kodekun e audios me Bluetooth\nZgjedhja: Modaliteti i kanalit"</string>
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3233402355917446304">"Kodeku LDAC i audios së Bluetooth-it: Cilësia e luajtjes"</string>
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="7274396574659784285">"Aktivizo LDAC të audios me Bluetooth\nZgjedhja e kodekut: Cilësia e luajtjes"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Mbivendosja e ekranit tregon të dhënat e prekjes"</string>
     <string name="show_touches" msgid="8437666942161289025">"Shfaq trokitjet"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Shfaq reagimet vizuale për trokitjet"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Shfaq shtypjet e tasteve"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Shfaq reagime vizuale për shtypjen e tasteve fizike"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Shfaq përditësimet e sipërfaqes"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Ndriço të gjitha sipërfaqet e dritares kur ato të përditësohen"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Shfaq përditësimet e pamjes"</string>
@@ -454,7 +457,7 @@
     <string name="power_discharge_by_only_enhanced" msgid="3268796172652988877">"Duhet të zgjasë deri në rreth <xliff:g id="TIME">%1$s</xliff:g> bazuar në përdorimin tënd"</string>
     <string name="power_discharge_by" msgid="4113180890060388350">"Duhet të zgjasë deri në rreth <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_discharge_by_only" msgid="92545648425937000">"Duhet të zgjasë deri në rreth <xliff:g id="TIME">%1$s</xliff:g>"</string>
-    <string name="power_discharge_by_only_short" msgid="5883041507426914446">"Deri në <xliff:g id="TIME">%1$s</xliff:g>"</string>
+    <string name="power_discharge_by_only_short" msgid="5883041507426914446">"Deri në: <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_suggestion_battery_run_out" msgid="6332089307827787087">"Bateria mund të mbarojë deri në <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_remaining_less_than_duration_only" msgid="8956656616031395152">"Më pak se <xliff:g id="THRESHOLD">%1$s</xliff:g> e mbetur"</string>
     <string name="power_remaining_less_than_duration" msgid="318215464914990578">"Më pak se <xliff:g id="THRESHOLD">%1$s</xliff:g> e mbetur (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Më shumë kohë."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Më pak kohë."</string>
     <string name="cancel" msgid="5665114069455378395">"Anulo"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Para"</string>
+    <string name="back" msgid="5554327870352703710">"Prapa"</string>
+    <string name="save" msgid="3745809743277153149">"Ruaj"</string>
     <string name="okay" msgid="949938843324579502">"Në rregull"</string>
     <string name="done" msgid="381184316122520313">"U krye"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmet dhe alarmet rikujtuese"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Pikërisht tani"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Ky telefon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Ky tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Altoparlanti i stacionit"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Pajisja e jashtme"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Pajisja e lidhur"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Ky telefon"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Nuk mund të luhet në këtë pajisje"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Përmirëso llogarinë për të ndryshuar"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Të shtohet përdorues i ri?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Mund ta ndash këtë pajisje me persona të tjerë duke krijuar përdorues shtesë. Çdo përdorues ka hapësirën e vet, të cilën mund ta personalizojë me aplikacione, me imazhin e sfondit etj. Përdoruesit mund të rregullojnë po ashtu cilësimet e pajisjes, si Wi‑Fi, të cilat ndikojnë te të gjithë.\n\nKur shton një përdorues të ri, ai person duhet të konfigurojë hapësirën e vet.\n\nÇdo përdorues mund t\'i përditësojë aplikacionet për të gjithë përdoruesit e tjerë. Cilësimet e qasshmërisë dhe shërbimet mund të mos transferohen te përdoruesi i ri."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Kur shton një përdorues të ri, ai person duhet të konfigurojë hapësirën e vet.\n\nÇdo përdorues mund t\'i përditësojë aplikacionet për të gjithë përdoruesit e tjerë."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Të bëhet administrator ky përdorues?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Administratorët kanë privilegje të veçanta që nuk i kanë përdoruesit e tjerë. Një administrator mund të menaxhojë të gjithë përdoruesit, të përditësojë ose të rivendosë këtë pajisje, të modifikojë cilësimet, të shikojë të gjitha aplikacionet e instaluara dhe të japë ose të revokojë privilegjet e administratorit për të tjerët."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Bëje administrator"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Të konfig. përdoruesi tani?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Sigurohu që personi të jetë i gatshëm të marrë pajisjen dhe të caktojë hapësirën e vet"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Të konfigurohet tani profili?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Po, bëje administrator"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Jo, mos e bëj administrator"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Lëvize lart"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"E papërcaktuar"</string>
+    <string name="neuter" msgid="2075249330106127310">"Asnjanëse"</string>
+    <string name="feminine" msgid="1529155595310784757">"Femërore"</string>
+    <string name="masculine" msgid="4653978041013996303">"Mashkullore"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-sr/arrays.xml b/packages/SettingsLib/res/values-sr/arrays.xml
index d74f55b..1ee7fc0 100644
--- a/packages/SettingsLib/res/values-sr/arrays.xml
+++ b/packages/SettingsLib/res/values-sr/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Извор звука"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 7bd5267..d1b3289 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -60,7 +60,7 @@
     <string name="wifi_not_in_range" msgid="1541760821805777772">"Није у опсегу"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Аутоматско повезивање није успело"</string>
     <string name="wifi_no_internet" msgid="1774198889176926299">"Нема приступа интернету"</string>
-    <string name="saved_network" msgid="7143698034077223645">"Сачувао/ла је <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="saved_network" msgid="7143698034077223645">"Чува <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="connected_via_network_scorer" msgid="7665725527352893558">"Аутоматски повезано преко %1$s"</string>
     <string name="connected_via_network_scorer_default" msgid="7973529709744526285">"Аутоматски повезано преко добављача оцене мреже"</string>
     <string name="connected_via_app" msgid="3532267661404276584">"Повезано преко: <xliff:g id="NAME">%1$s</xliff:g>"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Приступ SIM картици"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD звук: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD звук"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Слушни апарати"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Повезано са слушним апаратима"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Слушни апарати"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Повезано са слушним апаратима"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Повезано са LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Повезано са звуком медија"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Повезано са звуком телефона"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Коришћење за аудио телефона"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Коришћење за пренос датотека"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Користи за улаз"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Користи за слушне апарате"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Користи за слушне апарате"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Користите за LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Упари"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"УПАРИ"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Откажи"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Упаривање омогућава приступ контактима и историји позива након повезивања."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Упаривање са уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g> није могуће."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Упаривање са уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g> није могуће због нетачног PIN-а или приступног кода."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Упаривање са <xliff:g id="DEVICE_NAME">%1$s</xliff:g> није могуће због нетачног PIN-а или приступног кода."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Није могуће комуницирати са уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> је одбио/ла упаривање"</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Рачунар"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Изаберите профил"</string>
     <string name="category_personal" msgid="6236798763159385225">"Лично"</string>
     <string name="category_work" msgid="4014193632325996115">"Посао"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Клонирано"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Опције за програмере"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Омогући опције за програмере"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Подешавање опција за програмирање апликације"</string>
@@ -255,7 +256,7 @@
     <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, отклањање грешака, програмер"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Пречица за извештај о грешкама"</string>
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Приказује дугме у менију дугмета за укључивање за прављење извештаја о грешкама"</string>
-    <string name="keep_screen_on" msgid="1187161672348797558">"Не закључавај"</string>
+    <string name="keep_screen_on" msgid="1187161672348797558">"Не гаси екран"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"Екран неће бити у режиму спавања током пуњења"</string>
     <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Омогући snoop евид. за Bluetooth HCI"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Сними Bluetooth пакете. (Укључите/искључите Bluetooth када промените ово подешавање)"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Преклопни елемент са тренутним подацима о додиру"</string>
     <string name="show_touches" msgid="8437666942161289025">"Приказуј додире"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Приказује визуелне повратне информације за додире"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Приказуј притиске тастера"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Приказује повратне информације за притиске тастера"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Прикажи ажурирања површине"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Осветљава све површине прозора када се ажурирају"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Прикажи ажурирања приказа"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Више времена."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Мање времена."</string>
     <string name="cancel" msgid="5665114069455378395">"Откажи"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Даље"</string>
+    <string name="back" msgid="5554327870352703710">"Назад"</string>
+    <string name="save" msgid="3745809743277153149">"Сачувај"</string>
     <string name="okay" msgid="949938843324579502">"Потврди"</string>
     <string name="done" msgid="381184316122520313">"Готово"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Аларми и подсетници"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Управо"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Овај телефон"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Овај таблет"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Звучник базне станице"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Спољни уређај"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Повезани уређај"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Овај телефон"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Не можете да пустите на овом уређају"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Надоградите налог ради пребацивања"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Корисник"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Ограничени профил"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Додајете новог корисника?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Овај уређај можете да делите са другим људима ако направите још корисника. Сваки корисник има сопствени простор, који може да прилагођава помоћу апликација, позадине и слично. Корисници могу да прилагођавају и подешавања уређаја која утичу на свакога, попут Wi‑Fi-ја.\n\nКада додате новог корисника, та особа треба да подеси сопствени простор.\n\nСваки корисник може да ажурира апликације за све остале кориснике. Подешавања и услуге приступачности не могу да се преносе на новог корисника."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Овај уређај можете да делите са другим људима ако направите још корисника. Сваки корисник има сопствени простор, који може да прилагођава помоћу апликација, позадине и слично. Корисници могу да прилагођавају и подешавања уређаја која утичу на свакога, попут WiFi-ја.\n\nКада додате новог корисника, та особа треба да подеси сопствени простор.\n\nСваки корисник може да ажурира апликације за све остале кориснике. Подешавања и услуге приступачности не могу да се преносе на новог корисника."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Када додате новог корисника, та особа треба да подеси сопствени простор.\n\nСваки корисник може да ажурира апликације за све остале кориснике."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Желите да поставите овог корисника за администратора?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Администратори имају посебне привилегије које остали корисници немају. Администратор може да управља свим корисницима, ажурира или ресетује овај уређај, прилагођава подешавања, прегледа све инсталиране апликације и додељује или опозива привилегије администратора за друге."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Постави за администратора"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Подешавате корисника?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Та особа треба да узме уређај и подеси свој простор"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Желите ли да одмах подесите профил?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Тиме ћете покренути нову сесију госта и избрисати све апликације и податке из актуелне сесије"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Излазите из режима госта?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Тиме ћете избрисати све апликације и податке из актуелне сесије госта"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Да, постави га за администратора"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Не, не постављај га за администратора"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Изађи"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Сачуваћете активности госта?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Сачувајте активности из актуелне сесије или избришите све апликације и податке"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Померите нагоре"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Није наведено"</string>
+    <string name="neuter" msgid="2075249330106127310">"Средњи род"</string>
+    <string name="feminine" msgid="1529155595310784757">"Женски род"</string>
+    <string name="masculine" msgid="4653978041013996303">"Мушки род"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-sv/arrays.xml b/packages/SettingsLib/res/values-sv/arrays.xml
index 5ff90cb..dfe491d 100644
--- a/packages/SettingsLib/res/values-sv/arrays.xml
+++ b/packages/SettingsLib/res/values-sv/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Ljudkälla"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index 177eae4..2c7c736 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM-åtkomst"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD-ljud: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD-ljud"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Hörapparater"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Ansluten till hörapparater"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Hörapparater"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Ansluten till hörapparater"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Ansluten till LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Ansluten till medialjud"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Ansluten till telefonens ljud"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Använd för telefonens ljud"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Använd för filöverföring"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Använd för inmatning"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Använd med hörapparater"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Använd med hörapparater"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Använd för LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Parkoppla"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"PARKOPPLA"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Avbryt"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Om du kopplar enheten får du tillgång till dina kontakter och din samtalshistorik när du är ansluten."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Det gick inte att koppla till <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Det gick inte att koppla till <xliff:g id="DEVICE_NAME">%1$s</xliff:g> på grund av en felaktig PIN-kod eller nyckel."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Parkoppling med <xliff:g id="DEVICE_NAME">%1$s</xliff:g> misslyckades på grund av fel PIN-kod eller nyckel."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Det går inte att kommunicera med <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Parkoppling avvisad av <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Dator"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Välj profil"</string>
     <string name="category_personal" msgid="6236798763159385225">"Privat"</string>
     <string name="category_work" msgid="4014193632325996115">"Jobb"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klon"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Utvecklaralternativ"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Aktivera utvecklaralternativ"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Ange alternativ för apputveckling"</string>
@@ -254,7 +255,7 @@
     <string name="adb_wireless_no_network_msg" msgid="2365795244718494658">"Anslut till ett wifi-nätverk"</string>
     <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, debug, dev, felsöka, felsökning"</string>
     <string name="bugreport_in_power" msgid="8664089072534638709">"Genväg till felrapport"</string>
-    <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Visa en knapp för felrapportering i extramenyn"</string>
+    <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Visa en knapp för felrapportering i startmenyn"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Håll aktiverad"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"Skärmen vilar aldrig när laddning pågår"</string>
     <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Aktivera HCI snoop-logg för Bluetooth"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Överlägg på skärmen med aktuella skärmtryck"</string>
     <string name="show_touches" msgid="8437666942161289025">"Visa tryck"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Visa visuell feedback för tryck"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Visa tangenttryckningar"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Visa visuell feedback för tangenttryckningar"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Visa ytuppdateringar"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Hela fönstret blinkar vid uppdatering"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Visa visningsuppdatering"</string>
@@ -380,7 +383,7 @@
     <string name="track_frame_time" msgid="522674651937771106">"Profilens HWUI-rendering"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Aktivera GPU-felsökningslager"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Tillåt att felsökningsappar läser in GPU-felsökningslager"</string>
-    <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Aktivera verbose-loggning"</string>
+    <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Aktivera utförlig loggning för leverantörer"</string>
     <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Ta med ytterligare enhetsspecifika leverantörsloggar i felrapporter. Dessa kan innehålla privata uppgifter samt använda mer batteri och/eller mer lagringsutrymme."</string>
     <string name="window_animation_scale_title" msgid="5236381298376812508">"Skala – fönsteranimering"</string>
     <string name="transition_animation_scale_title" msgid="1278477690695439337">"Skala – övergångsanimering"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Längre tid."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kortare tid."</string>
     <string name="cancel" msgid="5665114069455378395">"Avbryt"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Nästa"</string>
+    <string name="back" msgid="5554327870352703710">"Tillbaka"</string>
+    <string name="save" msgid="3745809743277153149">"Spara"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Klar"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarm och påminnelser"</string>
@@ -547,13 +547,16 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Nyss"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Den här telefonen"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Den här surfplattan"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dockningsstationens högtalare"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Extern enhet"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Ansluten enhet"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Den här telefonen"</string>
-    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Det går inte att spela upp denna enhet"</string>
+    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Kan inte spelas på denna enhet"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Uppgradera kontot för att byta"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Det går inte att spela upp nedladdningar här"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Försök igen efter annonsen"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Väck enheten för att spela upp här"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Enheten har inte godkänts för uppspelning"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Enheten är inte godkänd"</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Det går inte att spela upp detta här"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Det gick inte att ansluta. Stäng av enheten och slå på den igen"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Ljudenhet med kabelanslutning"</string>
@@ -578,13 +581,10 @@
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Begränsad profil"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Lägga till ny användare?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Du kan dela enheten med andra om du skapar flera användare. Alla användare får sitt eget utrymme som de kan anpassa som de vill med appar, bakgrund och så vidare. Användarna kan även ändra enhetsinställningar som påverkar alla, till exempel wifi.\n\nNär du lägger till en ny användare måste han eller hon konfigurera sitt utrymme.\n\nAlla användare kan uppdatera appar för samtliga användares räkning. Tillgänglighetsinställningar och tjänster kanske inte överförs till den nya användaren."</string>
-    <string name="user_add_user_message_short" msgid="3295959985795716166">"När du lägger till en ny användare måste den personen konfigurera sitt utrymme.\n\nAlla användare kan uppdatera appar för samtliga användares räkning."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_add_user_message_short" msgid="3295959985795716166">"När du lägger till en ny användare måste den personen konfigurera sitt utrymme.\n\nAlla användare kan uppdatera appar för samtliga användare."</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Vill du göra denna användare till administratör?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Administratörer har särskilda behörigheter som andra användare inte har. En administratör kan hantera alla användare, uppdatera eller återställa den här enheten, ändra inställningar, se alla installerade appar och bevilja eller återkalla administratörsbehörigheter för andra."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Gör till administratör"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Konfigurera användare nu?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Kontrollera att personen finns tillgänglig för att konfigurera sitt utrymme på enheten"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Vill du konfigurera en profil nu?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Ja, gör till administratör"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Nej, gör inte till administratör"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Flytta uppåt"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Inte angivet"</string>
+    <string name="neuter" msgid="2075249330106127310">"Neutrum"</string>
+    <string name="feminine" msgid="1529155595310784757">"Femin­informer"</string>
+    <string name="masculine" msgid="4653978041013996303">"Maskulinformer"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-sw/arrays.xml b/packages/SettingsLib/res/values-sw/arrays.xml
index 30cc69f..a75c6f9 100644
--- a/packages/SettingsLib/res/values-sw/arrays.xml
+++ b/packages/SettingsLib/res/values-sw/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Chanzo cha Sauti"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index 6784aa5..60d9186 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Ufikiaji wa SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Sauti ya HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Sauti ya HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Vifaa vya Kusaidia Kusikia"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Imeunganishwa kwenye Vifaa vya Kusaidia Kusikia"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Visaidizi vya kusikia"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Imeunganishwa kwenye visaidizi vya kusikia"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Imeunganishwa kwenye LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Imeunganishwa kwenye sikika ya njia ya mawasiliano"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Imeunganishwa kwenye sauti ya simu"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Tumia kwa sauti ya simu"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Tumia kwa hali faili"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Tumia kwa kuingiza"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Tumia kwenye Vifaa vya Kusaidia Kusikia"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Tumia kwa visaidizi vya kusikia"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Tumia kwa ajili ya LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Oanisha"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"OANISHA"</string>
@@ -214,7 +214,8 @@
   </string-array>
     <string name="choose_profile" msgid="343803890897657450">"Chagua wasifu"</string>
     <string name="category_personal" msgid="6236798763159385225">"Binafsi"</string>
-    <string name="category_work" msgid="4014193632325996115">"Ya Kazini"</string>
+    <string name="category_work" msgid="4014193632325996115">"Kazini"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Kloni"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Chaguo za wasanidi"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Washa chaguo za wasanidi programu"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Weka chaguo kwa ajili ya maendeleo ya programu"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Kuegeshwa kwa skrini ikionyesha data ya mguso ya sasa"</string>
     <string name="show_touches" msgid="8437666942161289025">"Onyesha unapogusa"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Onyesha ishara za kuthibitisha unapogusa"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Onyesha mibofyo ya vitufe"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Onyesha muhtasari wa mibofyo halisi ya vitufe"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Onyesha masasisho ya sehemu"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Angaza dirisha lote zitakaposasisha"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Onyesha taarifa za kuonekana"</string>
@@ -393,7 +396,7 @@
     <string name="show_all_anrs" msgid="9160563836616468726">"Onyesha historia ya ANR"</string>
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"Onyesha kidirisha cha Programu Kutorejesha Majibu kwa programu zinazotumika chinichini"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Onyesha arifa za maonyo ya kituo"</string>
-    <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Huonyesha onyo kwenye skrini programu inapochapisha arifa bila kituo sahihi."</string>
+    <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Huonyesha onyo kwenye skrini programu inapochapisha arifa bila kituo sahihi"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"Lazima uruhusu programu kwenye hifadhi ya nje"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Huruhusu programu yoyote iwekwe kwenye hifadhi ya nje, bila kujali thamani za faili ya maelezo"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"Lazimisha shughuli ziweze kubadilishwa ukubwa"</string>
@@ -486,7 +489,7 @@
     <string name="disabled" msgid="8017887509554714950">"Imezimwa"</string>
     <string name="external_source_trusted" msgid="1146522036773132905">"Imeruhusiwa"</string>
     <string name="external_source_untrusted" msgid="5037891688911672227">"Hairuhusiwi"</string>
-    <string name="install_other_apps" msgid="3232595082023199454">"Kuweka programu zisizojulikana"</string>
+    <string name="install_other_apps" msgid="3232595082023199454">"Kusakinisha programu zisizojulikana"</string>
     <string name="home" msgid="973834627243661438">"Ukurasa wa Kwanza wa Mipangilio"</string>
   <string-array name="battery_labels">
     <item msgid="7878690469765357158">"0%"</item>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Muda zaidi."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Muda kidogo."</string>
     <string name="cancel" msgid="5665114069455378395">"Ghairi"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Endelea"</string>
+    <string name="back" msgid="5554327870352703710">"Rudi nyuma"</string>
+    <string name="save" msgid="3745809743277153149">"Hifadhi"</string>
     <string name="okay" msgid="949938843324579502">"Sawa"</string>
     <string name="done" msgid="381184316122520313">"Nimemaliza"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Ving\'ora na vikumbusho"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Sasa hivi"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Simu hii"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Kompyuta kibao hii"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Spika ya kituo"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Kifaa cha Nje"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Kifaa kilichounganishwa"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Simu hii"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Huwezi kucheza maudhui kwenye kifaa hiki"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Pata toleo jipya la akaunti ili ubadilishe"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Ungependa kuongeza mtumiaji?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Unaweza kutumia kifaa hiki pamoja na watu wengine kwa kuongeza watumiaji wa ziada. Kila mtumiaji ana nafasi yake mwenyewe, ambayo anaweza kuweka programu, mandhari na vipengee vingine anavyopenda. Watumiaji pia wanaweza kurekebisha mipangilio ya kifaa inayoathiri kila mtu kama vile Wi-Fi.\n\nUnapomwongeza mtumiaji mpya, mtu huyo anahitaji kujitayarishia nafasi yake.\n\nMtumiaji yeyote anaweza kuwasasishia watumiaji wengine wote programu. Huenda mipangilio na huduma za ufikivu zisihamishiwe mtumiaji mgeni."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Mtumiaji mpya utakayemwongeza atahitaji kujitayarishia nafasi yake.\n\nMtumiaji yoyote anaweza kusasisha programu kwa niaba ya wengine wote."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Ungependa kumruhusu mtumiaji huyu awe msimamizi?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Wasimamizi wana ruhusa maalum ambazo watumiaji wengine hawana. Msimamizi anaweza kudhibiti watumiaji wote, kusasisha au kuweka upya mipangilio ya kifaa hiki, kubadilisha mipangilio, kuangalia programu zote zilizosakinishwa na kuteua au kubatilisha uteuzi wa watumiaji wengine kuwa wasimamizi."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Mruhusu awe msimamizi"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Mtumiaji aongezwe sasa?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Hakikisha kuwa mtu huyu anaweza kuchukua kifaa na kujitayarishia nafasi yake"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Ungependa kuweka wasifu sasa?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Hatua hii itaanzisha upya kipindi cha mgeni na kufuta programu na data yote kwenye kipindi cha sasa"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Utafunga matumizi ya wageni?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Hatua hii itafuta programu na data kutoka kwenye kipindi cha mgeni cha sasa"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Ndiyo, mruhusu awe msimamizi"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Hapana, usimruhusu awe msimamizi"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Sogeza juu"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"Asilimia <xliff:g id="PERCENTAGE">%1$d</xliff:g>"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Haijabainishwa"</string>
+    <string name="neuter" msgid="2075249330106127310">"Isiyobainika"</string>
+    <string name="feminine" msgid="1529155595310784757">"Jinsia ya kike"</string>
+    <string name="masculine" msgid="4653978041013996303">"Jinsia ya kiume"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ta/arrays.xml b/packages/SettingsLib/res/values-ta/arrays.xml
index 5774bf9..ade1db0 100644
--- a/packages/SettingsLib/res/values-ta/arrays.xml
+++ b/packages/SettingsLib/res/values-ta/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"ஆடியோ மூலம்"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index 76344cb..ce10e21 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"சிம் அணுகல்"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD ஆடியோ: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD ஆடியோ"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"செவித்துணை கருவிகள்"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE ஆடியோ"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"செவித்துணை கருவிகளுடன் இணைக்கப்பட்டது"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"செவித்துணைக் கருவிகள்"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE ஆடியோ"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"செவித்துணைக் கருவிகளுடன் இணைக்கப்பட்டது"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE ஆடியோவுடன் இணைக்கப்பட்டுள்ளது"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"மீடியா ஆடியோவுடன் இணைக்கப்பட்டது"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"மொபைல் ஆடியோவுடன் இணைக்கப்பட்டது"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"மொபைல் ஆடியோவைப் பயன்படுத்து"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ஃபைல் பரிமாற்றத்திற்காகப் பயன்படுத்து"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"உள்ளீட்டுக்குப் பயன்படுத்து"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"செவித்துணை கருவிகளுக்குப் பயன்படுத்தவும்"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"செவித்துணைக் கருவிகளுக்காகப் பயன்படுத்தப்படும்"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIOவிற்குப் பயன்படுத்தும்"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"இணை"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"இணை"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"சுயவிவரத்தைத் தேர்வு செய்க"</string>
     <string name="category_personal" msgid="6236798763159385225">"தனிப்பட்டவை"</string>
     <string name="category_work" msgid="4014193632325996115">"பணியிடம்"</string>
+    <string name="category_clone" msgid="1554511758987195974">"குளோன்"</string>
     <string name="development_settings_title" msgid="140296922921597393">"டெவெலப்பர் விருப்பங்கள்"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"டெவெலப்பர் விருப்பங்களை இயக்கு"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"ஆப்ஸின் மேம்பாட்டிற்காக விருப்பங்களை அமை"</string>
@@ -336,7 +337,7 @@
     <string name="hdcp_checking_title" msgid="3155692785074095986">"HDCP சரிபார்ப்பு"</string>
     <string name="hdcp_checking_dialog_title" msgid="7691060297616217781">"HDCP சரிபார்க்கும் செயல்பாடுகளை அமை"</string>
     <string name="debug_debugging_category" msgid="535341063709248842">"பிழைதிருத்தம்"</string>
-    <string name="debug_app" msgid="8903350241392391766">"பிழைத்திருத்தப் பயன்பாட்டைத் தேர்ந்தெடுக்கவும்"</string>
+    <string name="debug_app" msgid="8903350241392391766">"பிழைத்திருத்த ஆப்ஸைத் தேர்ந்தெடுக்கவும்"</string>
     <string name="debug_app_not_set" msgid="1934083001283807188">"பிழைத்திருத்த ஆப்ஸ் அமைக்கப்படவில்லை"</string>
     <string name="debug_app_set" msgid="6599535090477753651">"பிழைதிருத்தும் ஆப்ஸ்: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="select_application" msgid="2543228890535466325">"பயன்பாட்டைத் தேர்ந்தெடுக்கவும்"</string>
@@ -347,13 +348,15 @@
     <string name="debug_drawing_category" msgid="5066171112313666619">"வரைபொருள்"</string>
     <string name="debug_hw_drawing_category" msgid="5830815169336975162">"வன்பொருள் முடுக்கத்துடன் கூடிய காட்சியாக்கம்"</string>
     <string name="media_category" msgid="8122076702526144053">"மீடியா"</string>
-    <string name="debug_monitoring_category" msgid="1597387133765424994">"கண்காணி"</string>
+    <string name="debug_monitoring_category" msgid="1597387133765424994">"கண்காணித்தல்"</string>
     <string name="strict_mode" msgid="889864762140862437">"நிலையான பயன்முறை இயக்கப்பட்டது"</string>
     <string name="strict_mode_summary" msgid="1838248687233554654">"முக்கியத் தொடரிழையில் நீண்ட நேரம் செயல்படும்போது திரையைக் காட்சிப்படுத்தும்"</string>
     <string name="pointer_location" msgid="7516929526199520173">"குறிப்பான் இடம்"</string>
     <string name="pointer_location_summary" msgid="957120116989798464">"திரையின் மேல் அடுக்கானது தற்போது தொடப்பட்டிருக்கும் தரவைக் காண்பிக்கிறது"</string>
     <string name="show_touches" msgid="8437666942161289025">"தட்டல்களைக் காட்டு"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"தட்டல்களின் போது காட்சி அறிகுறிகளைக் காட்டும்"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"பட்டன் அழுத்தத்தை காட்டவா"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"பட்டன் அழுத்தங்களைக் காட்சி மூலம் உறுதிப்படுத்தும்"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"மேலோட்ட புதுப்பிப்புகளைக் காட்டு"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"சாளரத்தின் பரப்புநிலைகள் புதுப்பிக்கப்படும்போது, அவற்றை முழுவதுமாகக் காட்டும்"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"வியூ அப்டேட்ஸைக் காட்டு"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"நேரத்தை அதிகரிக்கும்."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"நேரத்தைக் குறைக்கும்."</string>
     <string name="cancel" msgid="5665114069455378395">"ரத்துசெய்"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"அடுத்து"</string>
+    <string name="back" msgid="5554327870352703710">"பின்செல்"</string>
+    <string name="save" msgid="3745809743277153149">"சேமி"</string>
     <string name="okay" msgid="949938843324579502">"சரி"</string>
     <string name="done" msgid="381184316122520313">"முடிந்தது"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"அலாரங்களும் நினைவூட்டல்களும்"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"சற்றுமுன்"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"இந்த மொபைல்"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"இந்த டேப்லெட்"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"டாக் ஸ்பீக்கர்"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"வெளிப்புறச் சாதனம்"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"இணைக்கப்பட்டுள்ள சாதனம்"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"இந்த மொபைல்"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"இந்தச் சாதனத்தில் பிளே செய்ய முடியவில்லை"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"மாற்ற, கணக்கை மேம்படுத்துங்கள்"</string>
@@ -579,19 +582,16 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"புதியவரைச் சேர்க்கவா?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"கூடுதல் பயனர்களை உருவாக்குவதன் மூலம், பிறருடன் இந்தச் சாதனத்தைப் பகிர்ந்துகொள்ளலாம். ஒவ்வொரு பயனருக்கும் அவர்களுக்கென ஒரு இடம் இருக்கும், அதில் அவர்கள் ஆப்ஸ், வால்பேப்பர் மற்றும் பலவற்றைப் பயன்படுத்திப் பிரத்தியேகப்படுத்தலாம். வைஃபை போன்ற மற்ற சாதன அமைப்புகளைப் பயனர்கள் மாற்றலாம், இந்த மாற்றம் அனைவருக்கும் பொருந்தும்.\n\nநீங்கள் புதிய பயனரைச் சேர்க்கும்போது, அவர் தனக்கான இடத்தை அமைக்க வேண்டும்.\n\nஎந்தவொரு பயனரும், பிற எல்லாப் பயனர்களுக்குமான ஆப்ஸைப் புதுப்பிக்கலாம். அணுகல்தன்மை அமைப்புகளையும் சேவைகளையும், புதிய பயனருக்கு இடமாற்ற முடியாமல் போகலாம்."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"புதியவரைச் சேர்க்கும் போது, அவர் தனக்கான இடத்தை அமைக்க வேண்டும்.\n\nஇருக்கும் ஆப்ஸை எவரும் புதுப்பிக்கலாம்."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"இந்தப் பயனரை நிர்வாகியாக்கவா?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"மற்ற பயனர்களுக்கு இல்லாத சிறப்புரிமைகள் நிர்வாகிகளுக்கு உண்டு. நிர்வாகி அனைத்துப் பயனர்களையும் நிர்வகிக்கலாம், இந்தச் சாதனத்தைப் புதுப்பிக்கலாம் அல்லது ரீசெட் செய்யலாம், அமைப்புகளை மாற்றலாம், நிறுவப்பட்ட அனைத்து ஆப்ஸையும் பார்க்கலாம், பிறருக்கு நிர்வாகி சிறப்புரிமைகளை வழங்கலாம் அல்லது அகற்றலாம்."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"நிர்வாகியாக்கு"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"இப்போது பயனரை அமைக்கவா?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"இந்தச் சாதனத்தை இவர் பயன்படுத்தும் நிலையிலும், அவருக்கான அமைப்புகளை அவரே செய்து கொள்பவராகவும் இருக்க வேண்டும்."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"இப்போது சுயவிவரத்தை அமைக்கவா?"</string>
     <string name="user_setup_button_setup_now" msgid="1708269547187760639">"இப்போது அமை"</string>
     <string name="user_setup_button_setup_later" msgid="8712980133555493516">"இப்போது இல்லை"</string>
     <string name="user_add_user_type_title" msgid="551279664052914497">"சேர்"</string>
-    <string name="user_new_user_name" msgid="60979820612818840">"புதியவர்"</string>
+    <string name="user_new_user_name" msgid="60979820612818840">"புதிய பயனர்"</string>
     <string name="user_new_profile_name" msgid="2405500423304678841">"புதிய சுயவிவரம்"</string>
     <string name="user_info_settings_title" msgid="6351390762733279907">"பயனர் தகவல்"</string>
     <string name="profile_info_settings_title" msgid="105699672534365099">"சுயவிவரத் தகவல்"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"புதிய கெஸ்ட் அமர்வு தொடங்கப்படும், மேலும் தற்போதைய கெஸ்ட் அமர்வின் ஆப்ஸ் மற்றும் தரவு அனைத்தும் நீக்கப்படும்"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"கெஸ்ட் முறையிலிருந்து வெளியேறவா?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"தற்போதைய கெஸ்ட் அமர்வின் ஆப்ஸ் மற்றும் தரவு அனைத்தும் நீக்கப்படும்"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"ஆம். அவரை நிர்வாகியாக்கு"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"இல்லை. அவரை நிர்வாகியாக்காதே"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"வெளியேறு"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"கெஸ்ட் செயல்பாடுகளைச் சேமிக்கவா?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"தற்போதைய அமர்வின் செயல்பாடுகளைச் சேமிக்கலாம் அல்லது ஆப்ஸையும் தரவையும் நீக்கலாம்"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"மேலே நகர்த்துங்கள்"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"குறிப்பிடப்படவில்லை"</string>
+    <string name="neuter" msgid="2075249330106127310">"அஃறிணை"</string>
+    <string name="feminine" msgid="1529155595310784757">"பெண்"</string>
+    <string name="masculine" msgid="4653978041013996303">"ஆண்"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-te/arrays.xml b/packages/SettingsLib/res/values-te/arrays.xml
index db2307d..fd125b2 100644
--- a/packages/SettingsLib/res/values-te/arrays.xml
+++ b/packages/SettingsLib/res/values-te/arrays.xml
@@ -66,7 +66,7 @@
   <string-array name="bt_hci_snoop_log_filters_entries">
     <item msgid="195768089203590086">"ACLహెడర్‌లను మాత్రమే వదిలివేయండి"</item>
     <item msgid="2776218217644557831">"A2DP మీడియా ప్యాకెట్‌లను ఫిల్టర్ చేయండి"</item>
-    <item msgid="8163235976612675092">"RFCOMM ఛానెల్‌ని ఫిల్టర్ చేయండి"</item>
+    <item msgid="8163235976612675092">"RFCOMM ఛానెల్‌ను ఫిల్టర్ చేయండి"</item>
   </string-array>
   <string-array name="bt_hci_snoop_log_profile_filter_entries">
     <item msgid="3961868665260627524">"డిజేబుల్ చేయండి"</item>
@@ -243,7 +243,7 @@
     <item msgid="8612549335720461635">"4K (సురక్షితం)"</item>
     <item msgid="7322156123728520872">"4K (రిజల్యూషన్ పెంచబడింది)"</item>
     <item msgid="7735692090314849188">"4K (రిజల్యూ. పెంచబడింది, సురక్షితం)"</item>
-    <item msgid="7346816300608639624">"720p, 1080p (డ్యూయల్ స్క్రీన్)"</item>
+    <item msgid="7346816300608639624">"720p, 1080p (Dual Screen)"</item>
   </string-array>
   <string-array name="enable_opengl_traces_entries">
     <item msgid="4433736508877934305">"ఏదీ వద్దు"</item>
@@ -269,10 +269,10 @@
   <string-array name="app_process_limit_entries">
     <item msgid="794656271086646068">"స్టాండర్డ్ పరిమితి"</item>
     <item msgid="8628438298170567201">"నేపథ్య ప్రాసెస్‌లు లేవు"</item>
-    <item msgid="915752993383950932">"గరిష్టంగా 1 ప్రాసెస్"</item>
-    <item msgid="8554877790859095133">"గరిష్టంగా 2 ప్రాసెస్‌లు"</item>
-    <item msgid="9060830517215174315">"గరిష్టంగా 3 ప్రాసెస్‌లు"</item>
-    <item msgid="6506681373060736204">"గరిష్టంగా 4 ప్రాసెస్‌లు"</item>
+    <item msgid="915752993383950932">"గరిష్ఠంగా 1 ప్రాసెస్"</item>
+    <item msgid="8554877790859095133">"గరిష్ఠంగా 2 ప్రాసెస్‌లు"</item>
+    <item msgid="9060830517215174315">"గరిష్ఠంగా 3 ప్రాసెస్‌లు"</item>
+    <item msgid="6506681373060736204">"గరిష్ఠంగా 4 ప్రాసెస్‌లు"</item>
   </string-array>
   <string-array name="usb_configuration_titles">
     <item msgid="3358668781763928157">"ఛార్జింగ్"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"ఆడియో మూలం"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index e31148c..567bffb 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -56,7 +56,7 @@
     <string name="wifi_disabled_password_failure" msgid="6892387079613226738">"ప్రామాణీకరణ సమస్య"</string>
     <string name="wifi_cant_connect" msgid="5718417542623056783">"కనెక్ట్ చేయడం సాధ్యపడదు"</string>
     <string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"\'<xliff:g id="AP_NAME">%1$s</xliff:g>\'కు కనెక్ట్ చేయడం సాధ్యపడదు"</string>
-    <string name="wifi_check_password_try_again" msgid="8817789642851605628">"పాస్‌వర్డ్‌ను చెక్ చేసి, మళ్లీ ప్రయత్నించండి"</string>
+    <string name="wifi_check_password_try_again" msgid="8817789642851605628">"పాస్‌వర్డ్‌ను చెక్ చేసి, మళ్లీ ట్రై చేయండి"</string>
     <string name="wifi_not_in_range" msgid="1541760821805777772">"పరిధిలో లేదు"</string>
     <string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"ఆటోమేటిక్‌గా కనెక్ట్ కాదు"</string>
     <string name="wifi_no_internet" msgid="1774198889176926299">"ఇంటర్నెట్ యాక్సెస్ లేదు"</string>
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM యాక్సెస్"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD ఆడియో: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD ఆడియో"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"వినికిడి మద్దతు ఉపకరణాలు"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"Le ఆడియో"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"వినికిడి మద్దతు ఉపకరణాలకు కనెక్ట్ చేయబడింది"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"వినికిడి పరికరాలు"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE ఆడియో"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"వినికిడి పరికరాలకు కనెక్ట్ చేయబడింది"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE ఆడియోకు కనెక్ట్ చేయబడింది"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"మీడియా ఆడియోకు కనెక్ట్ చేయబడింది"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"ఫోన్ ఆడియోకు కనెక్ట్ చేయబడింది"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"ఫోన్ ఆడియో కోసం ఉపయోగించండి"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ఫైల్ బదిలీ కోసం ఉపయోగించండి"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ఇన్‌పుట్ కోసం ఉపయోగించండి"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"వినికిడి మద్దతు ఉపకరణాలకు ఉపయోగించండి"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"వినికిడి పరికరాల కోసం ఉపయోగించండి"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO కోసం ఉపయోగించండి"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"జత చేయి"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"జత చేయి"</string>
@@ -214,7 +214,8 @@
   </string-array>
     <string name="choose_profile" msgid="343803890897657450">"ప్రొఫైల్‌ను ఎంచుకోండి"</string>
     <string name="category_personal" msgid="6236798763159385225">"వ్యక్తిగతం"</string>
-    <string name="category_work" msgid="4014193632325996115">"ఆఫీస్"</string>
+    <string name="category_work" msgid="4014193632325996115">"వర్క్"</string>
+    <string name="category_clone" msgid="1554511758987195974">"క్లోన్ చేయండి"</string>
     <string name="development_settings_title" msgid="140296922921597393">"డెవలపర్ ఆప్షన్‌లు"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"డెవలపర్ ఎంపికలను ప్రారంభించండి"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"యాప్‌ అభివృద్ధి కోసం ఎంపికలను సెట్ చేయండి"</string>
@@ -257,7 +258,7 @@
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"బగ్ రిపోర్ట్‌ను తీసుకోవడానికి పవర్ మెనూలో బటన్‌ను చూపు"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"యాక్టివ్‌గా ఉంచు"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"ఛార్జ్ చేస్తున్నప్పుడు స్క్రీన్ ఎప్పటికీ నిద్రావస్థలోకి వెళ్లదు"</string>
-    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"బ్లూటూత్ HCI రహస్య లాగ్‌ను ఎనేబుల్ చేయి"</string>
+    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"బ్లూటూత్ HCI స్నూప్ లాగ్‌ను ఎనేబుల్ చేయి"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"బ్లూటూత్‌ ప్యాకెట్‌లను క్యాప్చర్ చేయి. (ఈ సెట్టింగ్‌ని మార్చిన తర్వాత బ్లూటూత్‌ని టోగుల్ చేయండి)"</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"OEM అన్‌లాకింగ్"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"బూట్‌లోడర్ అన్‌లాక్ కావడానికి అనుమతించండి"</string>
@@ -268,7 +269,7 @@
     <string name="mock_location_app_set" msgid="4706722469342913843">"డమ్మీ లొకేషన్ యాప్‌: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="6829757985772659599">"నెట్‌వర్కింగ్"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"వైర్‌లెస్ డిస్‌ప్లే సర్టిఫికేషన్‌"</string>
-    <string name="wifi_verbose_logging" msgid="1785910450009679371">"Wi‑Fi విశదీకృత లాగింగ్‌ను ప్రారంభించండి"</string>
+    <string name="wifi_verbose_logging" msgid="1785910450009679371">"Wi‑Fi వివరణాత్మక లాగింగ్‌ను ప్రారంభించండి"</string>
     <string name="wifi_scan_throttling" msgid="2985624788509913617">"Wi‑Fi స్కాన్ కుదింపు"</string>
     <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Wi‑Fi నిరంతరం కాని MAC ర్యాండమైజేషన్"</string>
     <string name="mobile_data_always_on" msgid="8275958101875563572">"మొబైల్ డేటాను ఎల్లప్పుడూ యాక్టివ్‌గా ఉంచు"</string>
@@ -315,7 +316,7 @@
     <string name="select_usb_configuration_dialog_title" msgid="3579567144722589237">"USB కాన్ఫిగరేషన్‌ని ఎంచుకోండి"</string>
     <string name="allow_mock_location" msgid="2102650981552527884">"డమ్మీ లొకేషన్లను అనుమతించండి"</string>
     <string name="allow_mock_location_summary" msgid="179780881081354579">"డమ్మీ లొకేషన్లను అనుమతించండి"</string>
-    <string name="debug_view_attributes" msgid="3539609843984208216">"వీక్షణ అట్రిబ్యూట్‌ పర్యవేక్షణను ఎనేబుల్ చేయి"</string>
+    <string name="debug_view_attributes" msgid="3539609843984208216">"వీక్షణ అట్రిబ్యూట్‌ పర్యవేక్షణను ఎనేబుల్ చేయండి"</string>
     <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"ఎల్లప్పుడూ మొబైల్ డేటాను యాక్టివ్‌గా ఉంచు, Wi‑Fi యాక్టివ్‌గా ఉన్నా కూడా (వేగవంతమైన నెట్‌వర్క్ మార్పు కోసం)."</string>
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"అందుబాటులో ఉంటే గనుక టెథెరింగ్ హార్డ్‌వేర్ యాగ్జిలరేషన్‌ను ఉపయోగించండి"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"USB డీబగ్గింగ్‌ను అనుమతించాలా?"</string>
@@ -325,7 +326,7 @@
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"మీరు గతంలో ప్రామాణీకరించిన అన్ని కంప్యూటర్‌ల నుండి USB డీబగ్గింగ్‌కు యాక్సెస్‌ను ఉపసంహరించాలా?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"అభివృద్ధి సెట్టింగ్‌లను అనుమతించాలా?"</string>
     <string name="dev_settings_warning_message" msgid="37741686486073668">"ఈ సెట్టింగ్‌లు అభివృద్ధి వినియోగం కోసం మాత్రమే ఉద్దేశించబడినవి. వీటి వలన మీ పరికరం మరియు దీనిలోని యాప్‌లు విచ్ఛిన్నం కావచ్చు లేదా తప్పుగా ప్రవర్తించవచ్చు."</string>
-    <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"USB ద్వారా యాప్‌లను వెరిఫై చేయి"</string>
+    <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"USB ద్వారా యాప్స్ వెరిఫై చేయండి"</string>
     <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"హానికరమైన ప్రవర్తన కోసం ADB/ADT ద్వారా ఇన్‌స్టాల్ చేయబడిన యాప్‌లను చెక్ చేయండి."</string>
     <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"పేర్లు (MAC అడ్రస్‌లు మాత్రమే) లేని బ్లూటూత్ పరికరాలు డిస్‌ప్లే కాబడతాయి"</string>
     <string name="bluetooth_disable_absolute_volume_summary" msgid="2006309932135547681">"రిమోట్ పరికరాల్లో ఆమోదించలేని స్థాయిలో అధిక వాల్యూమ్ ఉండటం లేదా వాల్యూమ్ కంట్రోల్ లేకపోవడం వంటి సమస్యలు ఉంటే బ్లూటూత్ సంపూర్ణ వాల్యూమ్ ఫీచర్‌ను డిజేబుల్ చేస్తుంది."</string>
@@ -348,16 +349,18 @@
     <string name="debug_hw_drawing_category" msgid="5830815169336975162">"హార్డ్‌వేర్ యాగ్జిలరేషన్ ఆధారిత రెండరింగ్"</string>
     <string name="media_category" msgid="8122076702526144053">"మీడియా"</string>
     <string name="debug_monitoring_category" msgid="1597387133765424994">"పర్యవేక్షణ"</string>
-    <string name="strict_mode" msgid="889864762140862437">"ఖచ్చితమైన మోడ్ ప్రారంభించబడింది"</string>
+    <string name="strict_mode" msgid="889864762140862437">"స్ట్రిక్ట్ మోడ్ ఎనేబుల్డ్"</string>
     <string name="strict_mode_summary" msgid="1838248687233554654">"యాప్‌లు ప్రధాన థ్రెడ్‌లో సుదీర్ఘ చర్యలు చేసేటప్పుడు స్క్రీన్‌ను ఫ్లాష్ చేయండి"</string>
     <string name="pointer_location" msgid="7516929526199520173">"పాయింటర్ లొకేషన్"</string>
     <string name="pointer_location_summary" msgid="957120116989798464">"ప్రస్తుత టచ్ డేటాను చూపుతోన్న స్క్రీన్"</string>
     <string name="show_touches" msgid="8437666942161289025">"నొక్కినవి చూపు"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"నొక్కినప్పుడు దృశ్యపరమైన ప్రతిస్పందన చూపు"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"కీ ప్రెస్‌లను చూడండి"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"భౌతిక కీ ప్రెస్‌ల విజువల్ ఫీడ్‌బ్యాక్‌ను చూడండి"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"సర్ఫేస్‌ అప్‌డేట్లను చూపు"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"విండో సర్‌ఫేస్‌లన్నీ అప్‌డేట్‌ అయితే ఫ్లాష్ చేయి"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"వీక్షణ అప్‌డేట్‌లను చూపు"</string>
-    <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"గీసినప్పుడు విండోల లోపల వీక్షణలను ఫ్లాష్ చేయి"</string>
+    <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"విండోలు కదిలితే, లోపలి డిస్‌ప్లేను ఫ్లాష్ చేయాలి"</string>
     <string name="show_hw_layers_updates" msgid="5268370750002509767">"హార్డ్‌వేర్ లేయర్‌ల అప్‌డేట్‌లను చూపు"</string>
     <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"హార్డ్‌వేర్ లేయర్‌లు అప్‌డేట్‌ చేయబడినప్పుడు వాటిని ఆకుపచ్చ రంగులో ఫ్లాష్ చేయి"</string>
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"GPU ఓవర్‌డ్రాను డీబగ్ చేయండి"</string>
@@ -365,18 +368,18 @@
     <string name="disable_overlays_summary" msgid="1954852414363338166">"స్క్రీన్ కంపాజిటింగ్‌కు ఎల్లప్పుడూ GPUని ఉపయోగించండి"</string>
     <string name="simulate_color_space" msgid="1206503300335835151">"రంగుల‌ను సిమ్యులేట్ చేయి"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"OpenGL ట్రేస్‌లను ప్రారంభించండి"</string>
-    <string name="usb_audio_disable_routing" msgid="3367656923544254975">"USB ఆడియో రూటింగ్ నిలిపివేయి"</string>
-    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"USB ఆడియో ప‌రిక‌రాల‌కు ఆటోమేటిక్ రూటింగ్‌ను నిలిపివేయండి"</string>
+    <string name="usb_audio_disable_routing" msgid="3367656923544254975">"USB ఆడియో రూటింగ్‌ను డిజేబుల్ చేయండి"</string>
+    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"USB ఆడియో ప‌రిక‌రాల‌కు ఆటోమేటిక్ రూటింగ్‌ను డిజేబుల్ చేయండి"</string>
     <string name="debug_layout" msgid="1659216803043339741">"లేఅవుట్ హద్దులను చూపు"</string>
     <string name="debug_layout_summary" msgid="8825829038287321978">"క్లిప్ సరిహద్దులు, అంచులు మొ. చూపు"</string>
-    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL లేఅవుట్ దిశను నిర్బంధం చేయండి"</string>
-    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"అన్ని లొకేల్‌ల కోసం RTLకి స్క్రీన్ లేఅవుట్ దిశను నిర్భందించు"</string>
+    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"RTL లేఅవుట్ దిశను నిర్దేశించండి"</string>
+    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"అన్ని భాషల్లో స్క్రీన్ లేఅవుట్ దిశ RTL ఉండేలా నిర్దేశించండి"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"పారదర్శక నావిగేషన్ బార్"</string>
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"నావిగేషన్ బార్ బ్యాక్‌గ్రౌండ్ రంగును ఆటోమేటిక్‌గా పారదర్శకంగా చేయండి"</string>
     <string name="window_blurs" msgid="6831008984828425106">"విండో-స్థాయి బ్లర్ అనుమతించండి"</string>
     <string name="force_msaa" msgid="4081288296137775550">"4x MSAA అమలు తప్పనిసరి"</string>
-    <string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 యాప్‌లలో 4x MSAAను ప్రారంభించండి"</string>
-    <string name="show_non_rect_clip" msgid="7499758654867881817">"దీర్ఘ చతురస్రం కాని క్లిప్ చర్యలను డీబగ్ చేయండి"</string>
+    <string name="force_msaa_summary" msgid="9070437493586769500">"OpenGL ES 2.0 యాప్‌లలో 4x MSAAను ఎనేబుల్ చేయండి"</string>
+    <string name="show_non_rect_clip" msgid="7499758654867881817">"దీర్ఘ చతురస్రం కాని క్లిప్ ఆపరేషన్స్‌ను డీబగ్ చేయండి"</string>
     <string name="track_frame_time" msgid="522674651937771106">"ప్రొఫైల్ HWUI రెండరింగ్"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"GPU డీబగ్ లేయర్‌లను ప్రారంభించండి"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"డీబగ్ యాప్‌ల కోసం GPU డీబగ్ లేయర్‌లను లోడ్ చేయడాన్ని అనుమతించండి"</string>
@@ -432,7 +435,7 @@
     <string name="runningservices_settings_summary" msgid="1046080643262665743">"ప్రస్తుతం అమలులో ఉన్న సర్వీస్‌లను చూడండి, కంట్రోల్‌ చేయండి"</string>
     <string name="select_webview_provider_title" msgid="3917815648099445503">"వెబ్ వీక్షణ అమలు"</string>
     <string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"వెబ్ వీక్షణ అమలుని సెట్ చేయండి"</string>
-    <string name="select_webview_provider_toast_text" msgid="8512254949169359848">"ఈ ఎంపిక ఇప్పుడు లేదు. మళ్లీ ప్రయత్నించండి."</string>
+    <string name="select_webview_provider_toast_text" msgid="8512254949169359848">"ఈ ఎంపిక ఇప్పుడు లేదు. మళ్లీ ట్రై చేయండి."</string>
     <string name="picture_color_mode" msgid="1013807330552931903">"చిత్రం రంగు మోడ్"</string>
     <string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB ఉపయోగిస్తుంది"</string>
     <string name="daltonizer_mode_disabled" msgid="403424372812399228">"డిజేబుల్ చేయబడింది"</string>
@@ -441,7 +444,7 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"ప్రొటానోమలీ (ఎరుపు-ఆకుపచ్చ రంగు)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"ట్రైటనోమలీ (నీలం-పసుపు రంగు)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"కలర్ కరెక్షన్"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="1522101114585266455">"మీరు కింది వాటిని చేయాలనుకున్నప్పుడు కలర్ కరెక్షన్ సహాయకరంగా ఉంటుంది:&lt;br/&gt; &lt;ol&gt; &lt;li&gt;&amp;nbsp;రంగులను మరింత ఖచ్చితంగా చూడండి&lt;/li&gt; &lt;li&gt;&amp;nbsp;మీరు ఫోకస్ చేయడంలో సహాయపడటానికి రంగులను తీసివేయండి&lt;/li&gt; &lt;/ol&gt;"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="1522101114585266455">"మీరు కింది వాటిని చేయాలనుకున్నప్పుడు కలర్ కరెక్షన్ సహాయకరంగా ఉంటుంది:&lt;br/&gt; &lt;ol&gt; &lt;li&gt;&amp;nbsp;రంగులను మరింత ఖచ్చితంగా చూసేందుకు సహాయపడుతుంది&lt;/li&gt; &lt;li&gt;&amp;nbsp;మీరు ఫోకస్ చేయడంలో సహాయపడటానికి రంగులను తీసివేయండి&lt;/li&gt; &lt;/ol&gt;"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"<xliff:g id="TITLE">%1$s</xliff:g> ద్వారా భర్తీ చేయబడింది"</string>
     <string name="power_remaining_settings_home_page" msgid="4885165789445462557">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> - <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string>
     <string name="power_remaining_duration_only" msgid="8264199158671531431">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> సమయం మిగిలి ఉంది"</string>
@@ -539,19 +542,22 @@
     <string name="alarm_template" msgid="3346777418136233330">"<xliff:g id="WHEN">%1$s</xliff:g>కి"</string>
     <string name="alarm_template_far" msgid="6382760514842998629">"<xliff:g id="WHEN">%1$s</xliff:g>కి"</string>
     <string name="zen_mode_duration_settings_title" msgid="1553451650289651489">"వ్యవధి"</string>
-    <string name="zen_mode_duration_always_prompt_title" msgid="3212996860498119555">"ప్రతిసారి అడుగు"</string>
+    <string name="zen_mode_duration_always_prompt_title" msgid="3212996860498119555">"ప్రతిసారి అడగాలి"</string>
     <string name="zen_mode_forever" msgid="3339224497605461291">"మీరు ఆఫ్‌ చేసే వరకు"</string>
     <string name="time_unit_just_now" msgid="3006134267292728099">"ఇప్పుడే"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"ఈ ఫోన్"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"ఈ టాబ్లెట్"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"డాక్ స్పీకర్"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"ఎక్స్‌టర్నల్ పరికరం"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"కనెక్ట్ చేసిన పరికరం"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"ఈ ఫోన్"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"ఈ పరికరంలో ప్లే చేయడం సాధ్యపడదు"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"మారడానికి ఖాతాను అప్‌గ్రేడ్ చేయండి"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"ఇక్కడ డౌన్‌లోడ్‌లను ప్లే చేయడం సాధ్యపడదు"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"యాడ్ తర్వాత మళ్లీ ట్రై చేయండి"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"ఇక్కడ ప్లే చేయడానికి పరికరాన్ని మేల్కొలపండి"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"ప్లే చేయడానికి పరికరానికి అధికారం ఇవ్వలేదు"</string>
-    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"ఇక్కడ ఈ మీడియాను ప్లే చేయడం సాధ్యపడదు"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"ప్లే చేయడానికి పరికరానికి అనుమతి లేదు"</string>
+    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"ఈ మీడియాను ఇక్కడ ప్లే చేయడం సాధ్యపడదు."</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"కనెక్ట్ చేయడంలో సమస్య ఉంది. పరికరాన్ని ఆఫ్ చేసి, ఆపై తిరిగి ఆన్ చేయండి"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"వైర్ గల ఆడియో పరికరం"</string>
     <string name="help_label" msgid="3528360748637781274">"సహాయం &amp; ఫీడ్‌బ్యాక్"</string>
@@ -574,20 +580,20 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"యూజర్"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"పరిమితం చేయబడిన ప్రొఫైల్"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"కొత్త యూజర్‌ను జోడించాలా?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"అదనపు యూజర్‌లను క్రియేట్ చేయడం ద్వారా మీరు ఈ పరికరాన్ని ఇతరులతో షేర్ చేయవచ్చు. ప్రతి యూజర్‌కు‌ వారికంటూ ప్రత్యేక స్థలం ఉంటుంది, వారు ఆ స్థలాన్ని యాప్‌లు, వాల్‌పేపర్ మొదలైనవాటితో అనుకూలంగా మార్చవచ్చు. యూజర్‌లు ప్రతి ఒక్కరిపై ప్రభావం చూపే Wi‑Fi వంటి పరికర సెట్టింగ్‌లను కూడా సర్దుబాటు చేయవచ్చు.\n\nమీరు కొత్త యూజర్‌ను జోడించినప్పుడు, ఆ వ్యక్తి వారికంటూ స్వంత స్థలం సెట్ చేసుకోవాలి.\n\nఏ యూజర్ అయినా మిగిలిన యూజర్‌లందరి కోసం యాప్‌లను అప్‌డేట్ చేయవచ్చు. యాక్సెసిబిలిటీ సెట్టింగ్‌లు, సర్వీస్‌లు కొత్త యూజర్‌కి బదిలీ కాకపోవచ్చు."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"అదనపు యూజర్‌లను క్రియేట్ చేయడం ద్వారా మీరు ఈ పరికరాన్ని ఇతరులతో షేర్ చేయవచ్చు. ప్రతి యూజర్‌కు‌ వారికంటూ ప్రత్యేక స్పేస్ ఉంటుంది, వారు ఆ స్పేస్‌ను యాప్‌లు, వాల్‌పేపర్ మొదలైనవాటితో అనుకూలంగా మార్చుకోవచ్చు. యూజర్‌లు ప్రతి ఒక్కరిపై ప్రభావం చూపే Wi‑Fi వంటి పరికర సెట్టింగ్‌లను కూడా సర్దుబాటు చేయవచ్చు.\n\nమీరు కొత్త యూజర్‌ను జోడించినప్పుడు, ఆ వ్యక్తి వారికంటూ స్వంత స్పేస్‌ను సెట్ చేసుకోవాలి.\n\nఏ యూజర్ అయినా మిగిలిన యూజర్‌లందరి కోసం యాప్‌లను అప్‌డేట్ చేయవచ్చు. యాక్సెసిబిలిటీ సెట్టింగ్‌లు, సర్వీస్‌లు కొత్త యూజర్‌కి బదిలీ కాకపోవచ్చు."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"మీరు కొత్త యూజర్‌ను జోడించినప్పుడు, ఆ వ్యక్తి తన స్పేస్‌ను సెటప్ చేసుకోవాలి.\n\nఏ యూజర్ అయినా మిగతా యూజర్ల కోసం యాప్‌లను అప్‌డేట్‌ చేయగలరు."</string>
     <string name="user_grant_admin_title" msgid="5157031020083343984">"ఈ యూజర్‌ను అడ్మిన్ చేయాలా?"</string>
     <string name="user_grant_admin_message" msgid="1673791931033486709">"యూజర్‌లకు లేని ప్రత్యేక హక్కులు అడ్మిన్‌లకు ఉంటాయి. అడ్మిన్, యూజర్‌లందరినీ మేనేజ్ చేయగలరు, ఈ పరికరాన్ని అప్‌డేట్ లేదా రీసెట్ చేయగలరు, సెట్టింగ్‌లను మార్చగలరు, ఇన్‌స్టాల్ అయ్యి ఉండే యాప్‌లన్నింటినీ చూడగలరు, ఇతరులకు అడ్మిన్ హక్కులను ఇవ్వగలరు, లేదా ఉపసంహరించగలరు."</string>
-    <string name="user_grant_admin_button" msgid="5441486731331725756">"అడ్మిన్‌గా చేయాలి"</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"అడ్మిన్‌గా చేయండి"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"యూజర్‌ను ఇప్పుడే సెటప్ చేయాలా?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"పరికరాన్ని తీసుకోవడానికి వ్యక్తి అందుబాటులో ఉన్నారని నిర్ధారించుకొని, ఆపై వారికి స్టోరేజ్‌ స్థలాన్ని సెటప్ చేయండి"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ఇప్పుడు ప్రొఫైల్‌ను సెటప్ చేయాలా?"</string>
     <string name="user_setup_button_setup_now" msgid="1708269547187760639">"ఇప్పుడే సెట‌ప్ చేయి"</string>
     <string name="user_setup_button_setup_later" msgid="8712980133555493516">"ఇప్పుడు కాదు"</string>
     <string name="user_add_user_type_title" msgid="551279664052914497">"జోడించండి"</string>
-    <string name="user_new_user_name" msgid="60979820612818840">"కొత్త వినియోగదారు"</string>
+    <string name="user_new_user_name" msgid="60979820612818840">"కొత్త యూజర్"</string>
     <string name="user_new_profile_name" msgid="2405500423304678841">"కొత్త ప్రొఫైల్"</string>
-    <string name="user_info_settings_title" msgid="6351390762733279907">"వినియోగదారు సమాచారం"</string>
+    <string name="user_info_settings_title" msgid="6351390762733279907">"యూజర్ సమాచారం"</string>
     <string name="profile_info_settings_title" msgid="105699672534365099">"ప్రొఫైల్ సమాచారం"</string>
     <string name="user_need_lock_message" msgid="4311424336209509301">"మీరు పరిమితం చేయబడిన ప్రొఫైల్‌ను క్రియేట్ చేయడానికి ముందు, మీ యాప్‌లు మరియు వ్యక్తిగత డేటాను రక్షించడానికి స్క్రీన్ లాక్‌ను సెటప్ చేయాల్సి ఉంటుంది."</string>
     <string name="user_set_lock_button" msgid="1427128184982594856">"లాక్‌ను సెట్ చేయి"</string>
@@ -621,7 +627,7 @@
     <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" 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>
@@ -676,8 +682,8 @@
     <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="268234802198852753">"మీరు <xliff:g id="SWITCHAPP">%1$s</xliff:g> ప్రసారం చేస్తే లేదా అవుట్‌పుట్‌ను మార్చినట్లయితే, మీ ప్రస్తుత ప్రసారం ఆగిపోతుంది"</string>
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ప్రసారం చేయండి"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"అవుట్‌పుట్‌ను మార్చండి"</string>
-    <string name="back_navigation_animation" msgid="8105467568421689484">"ఊహించదగిన బ్యాక్ యానిమేషన్‌లు"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"ఊహించదగిన బ్యాక్ యానిమేషన్‌ల కోసం సిస్టమ్ యానిమేషన్‌లను ఎనేబుల్ చేయండి."</string>
+    <string name="back_navigation_animation" msgid="8105467568421689484">"ప్రివ్యూ గల బ్యాక్ యానిమేషన్‌లు"</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"ప్రివ్యూ గల బ్యాక్ యానిమేషన్‌ల కోసం సిస్టమ్ యానిమేషన్‌లను ఎనేబుల్ చేయండి."</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"ఊహించదగిన సంజ్ఞ యానిమేషన్ కోసం ఈ సెట్టింగ్ సిస్టమ్ యానిమేషన్‌లను ఎనేబుల్ చేస్తుంది. దీనికి మ్యానిఫెస్ట్ ఫైల్‌లో ఒక్కో యాప్‌లో enableOnBackInvokedCallback సెట్టింగ్‌ను ఒప్పునకు సెట్ చేయవలసి ఉంటుంది."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"ఎడమ వైపుగా జరపండి"</item>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"పైకి జరపండి"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"పేర్కొనబడలేదు"</string>
+    <string name="neuter" msgid="2075249330106127310">"తటస్థం"</string>
+    <string name="feminine" msgid="1529155595310784757">"స్త్రీ"</string>
+    <string name="masculine" msgid="4653978041013996303">"పురుషుడు"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-th/arrays.xml b/packages/SettingsLib/res/values-th/arrays.xml
index 21eba14..23d5f60 100644
--- a/packages/SettingsLib/res/values-th/arrays.xml
+++ b/packages/SettingsLib/res/values-th/arrays.xml
@@ -186,11 +186,11 @@
   </string-array>
   <string-array name="select_logd_size_summaries">
     <item msgid="409235464399258501">"ปิด"</item>
-    <item msgid="4195153527464162486">"64 K ต่อบัฟเฟอร์ไฟล์บันทึก"</item>
-    <item msgid="7464037639415220106">"256 K ต่อบัฟเฟอร์ไฟล์บันทึก"</item>
-    <item msgid="8539423820514360724">"1 M ต่อบัฟเฟอร์ไฟล์บันทึก"</item>
-    <item msgid="1984761927103140651">"4 M ต่อบัฟเฟอร์ไฟล์บันทึก"</item>
-    <item msgid="2983219471251787208">"8 M ต่อบัฟเฟอร์ไฟล์บันทึก"</item>
+    <item msgid="4195153527464162486">"64 K ต่อบัฟเฟอร์บันทึก"</item>
+    <item msgid="7464037639415220106">"256 K ต่อบัฟเฟอร์บันทึก"</item>
+    <item msgid="8539423820514360724">"1 M ต่อบัฟเฟอร์บันทึก"</item>
+    <item msgid="1984761927103140651">"4 M ต่อบัฟเฟอร์บันทึก"</item>
+    <item msgid="2983219471251787208">"8 M ต่อบัฟเฟอร์บันทึก"</item>
   </string-array>
   <string-array name="select_logpersist_titles">
     <item msgid="704720725704372366">"ปิด"</item>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"แหล่งที่มาของเสียง"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index 54545c1b6..69324d1 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"การเข้าถึงซิม"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"เสียง HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"เสียง HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"เครื่องช่วยฟัง"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"เชื่อมต่อกับเครื่องช่วยฟังแล้ว"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"เครื่องช่วยฟัง"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"เชื่อมต่อกับเครื่องช่วยฟังแล้ว"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"เชื่อมต่อกับ LE Audio แล้ว"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"เชื่อมต่อกับระบบเสียงของสื่อแล้ว"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"เชื่อมต่อกับระบบเสียงของโทรศัพท์แล้ว"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"ใช้สำหรับระบบเสียงของโทรศัพท์"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"ใช้สำหรับการโอนไฟล์"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ใช้สำหรับการป้อนข้อมูล"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"ใช้สำหรับเครื่องช่วยฟัง"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"ใช้สำหรับเครื่องช่วยฟัง"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"ใช้สำหรับ LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"จับคู่"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"จับคู่อุปกรณ์"</string>
@@ -165,7 +165,7 @@
     <string name="data_usage_ota" msgid="7984667793701597001">"การอัปเดตระบบ"</string>
     <string name="tether_settings_title_usb" msgid="3728686573430917722">"เชื่อมต่อเน็ตผ่าน USB"</string>
     <string name="tether_settings_title_wifi" msgid="4803402057533895526">"ฮอตสปอตแบบพกพาได้"</string>
-    <string name="tether_settings_title_bluetooth" msgid="916519902721399656">"ปล่อยสัญญาณบลูทูธ"</string>
+    <string name="tether_settings_title_bluetooth" msgid="916519902721399656">"ต่ออินเทอร์เน็ตผ่านบลูทูธ"</string>
     <string name="tether_settings_title_usb_bluetooth" msgid="1727111807207577322">"การปล่อยสัญญาณ"</string>
     <string name="tether_settings_title_all" msgid="8910259483383010470">"การปล่อยสัญญาณและฮอตสปอต"</string>
     <string name="managed_user_title" msgid="449081789742645723">"แอปการทำงานทั้งหมด"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"เลือกโปรไฟล์"</string>
     <string name="category_personal" msgid="6236798763159385225">"ส่วนตัว"</string>
     <string name="category_work" msgid="4014193632325996115">"งาน"</string>
+    <string name="category_clone" msgid="1554511758987195974">"โคลน"</string>
     <string name="development_settings_title" msgid="140296922921597393">"ตัวเลือกสำหรับนักพัฒนาแอป"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"ตั้งค่าตัวเลือกสำหรับการพัฒนาแอปพลิเคชัน"</string>
@@ -306,7 +307,7 @@
     <string name="wifi_metered_label" msgid="8737187690304098638">"แบบจำกัดปริมาณ"</string>
     <string name="wifi_unmetered_label" msgid="6174142840934095093">"ไม่มีการวัดปริมาณอินเทอร์เน็ต"</string>
     <string name="select_logd_size_title" msgid="1604578195914595173">"ขนาดบัฟเฟอร์ของตัวบันทึก"</string>
-    <string name="select_logd_size_dialog_title" msgid="2105401994681013578">"เลือกขนาด Logger ต่อบัฟเฟอร์ไฟล์บันทึก"</string>
+    <string name="select_logd_size_dialog_title" msgid="2105401994681013578">"เลือกขนาดตัวบันทึกต่อบัฟเฟอร์บันทึก"</string>
     <string name="dev_logpersist_clear_warning_title" msgid="8631859265777337991">"ล้างพื้นที่เก็บข้อมูลถาวรของตัวบันทึกไหม"</string>
     <string name="dev_logpersist_clear_warning_message" msgid="6447590867594287413">"เมื่อเราเลิกตรวจสอบด้วยตัวบันทึกถาวร เราต้องลบ Resident ของข้อมูลตัวบันทึกบนอุปกรณ์ของคุณ"</string>
     <string name="select_logpersist_title" msgid="447071974007104196">"เก็บข้อมูลตัวบันทึกอย่างถาวรบนอุปกรณ์"</string>
@@ -336,7 +337,7 @@
     <string name="hdcp_checking_title" msgid="3155692785074095986">"การตรวจสอบ HDCP"</string>
     <string name="hdcp_checking_dialog_title" msgid="7691060297616217781">"ตั้งค่าการตรวจสอบ HDCP"</string>
     <string name="debug_debugging_category" msgid="535341063709248842">"การแก้ไขข้อบกพร่อง"</string>
-    <string name="debug_app" msgid="8903350241392391766">"เลือกแอปที่จะแก้ไขข้อบกพร่อง"</string>
+    <string name="debug_app" msgid="8903350241392391766">"เลือกแอปแก้ไขข้อบกพร่อง"</string>
     <string name="debug_app_not_set" msgid="1934083001283807188">"ไม่มีชุดแอปพลิเคชันแก้ไขข้อบกพร่อง"</string>
     <string name="debug_app_set" msgid="6599535090477753651">"แอปพลิเคชันแก้ไขข้อบกพร่อง: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="select_application" msgid="2543228890535466325">"เลือกแอปพลิเคชัน"</string>
@@ -354,23 +355,25 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"การวางซ้อนหน้าจอที่แสดงข้อมูลการแตะในปัจจุบัน"</string>
     <string name="show_touches" msgid="8437666942161289025">"แสดงการแตะ"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"แสดงผลตอบสนองแบบภาพเมื่อแตะ"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"แสดงการกดแป้น"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"แสดงฟีดแบ็กที่เป็นภาพสำหรับการกดแป้นพิมพ์"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"แสดงการอัปเดตพื้นผิว"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"กะพริบหน้าต่างทั้งหมดเมื่อมีการอัปเดต"</string>
-    <string name="show_hw_screen_updates" msgid="2021286231267747506">"แสดงมุมมองการอัปเดต"</string>
+    <string name="show_hw_screen_updates" msgid="2021286231267747506">"แสดงการอัปเดตมุมมอง"</string>
     <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"แสดงมุมมองกะพริบภายในหน้าต่างขณะลาก"</string>
     <string name="show_hw_layers_updates" msgid="5268370750002509767">"แสดงอัปเดตเลเยอร์ฮาร์ดแวร์"</string>
     <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"เลเยอร์ฮาร์ดแวร์กะพริบเป็นสีเขียว เมื่อมีการอัปเดต"</string>
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"แก้ปัญหาการแสดงพิกเซลซ้ำด้วย GPU"</string>
     <string name="disable_overlays" msgid="4206590799671557143">"ปิดใช้งานการวางซ้อน HW"</string>
     <string name="disable_overlays_summary" msgid="1954852414363338166">"ใช้ GPU ในการจัดวางองค์ประกอบหน้าจอเสมอ"</string>
-    <string name="simulate_color_space" msgid="1206503300335835151">"จำลองระบบสี"</string>
+    <string name="simulate_color_space" msgid="1206503300335835151">"จำลองพื้นที่สี"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"เปิดใช้การติดตามใน OpenGL"</string>
     <string name="usb_audio_disable_routing" msgid="3367656923544254975">"ปิดการกำหนดเส้นทางเสียงทาง USB"</string>
     <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"ปิดการกำหนดเส้นทางโดยอัตโนมัติไปยังอุปกรณ์ต่อพ่วงเสียงทาง USB"</string>
-    <string name="debug_layout" msgid="1659216803043339741">"แสดงขอบของการจัดวาง"</string>
-    <string name="debug_layout_summary" msgid="8825829038287321978">"แสดงหน้าปกคลิป ขอบ ฯลฯ"</string>
-    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"บังคับทิศทางการจัดวางขวาไปซ้าย"</string>
-    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"บังคับทิศทางการจัดวางหน้าจอเป็นขวาไปซ้ายสำหรับทุกภาษา"</string>
+    <string name="debug_layout" msgid="1659216803043339741">"แสดงขอบเลย์เอาต์"</string>
+    <string name="debug_layout_summary" msgid="8825829038287321978">"แสดงขอบคลิป ระยะขอบ ฯลฯ"</string>
+    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"บังคับทิศทางเลย์เอาต์จากขวาไปซ้าย"</string>
+    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"บังคับทิศทางเลย์เอาต์หน้าจอเป็นขวาไปซ้ายสำหรับทุกภาษา"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"ทำให้แถบนำทางโปร่งใส"</string>
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"ทำให้สีพื้นหลังของแถบนำทางโปร่งใสโดยค่าเริ่มต้น"</string>
     <string name="window_blurs" msgid="6831008984828425106">"อนุญาตการเบลอระดับหน้าต่าง"</string>
@@ -385,7 +388,7 @@
     <string name="window_animation_scale_title" msgid="5236381298376812508">"อัตราการเคลื่อนไหวของหน้าต่าง"</string>
     <string name="transition_animation_scale_title" msgid="1278477690695439337">"อัตราการเคลื่อนไหวของการเปลี่ยนภาพ"</string>
     <string name="animator_duration_scale_title" msgid="7082913931326085176">"อัตราความเร็วตามตัวสร้างภาพเคลื่อนไหว"</string>
-    <string name="overlay_display_devices_title" msgid="5411894622334469607">"จำลองจอแสดงผลที่สอง"</string>
+    <string name="overlay_display_devices_title" msgid="5411894622334469607">"จำลองจอแสดงผลรอง"</string>
     <string name="debug_applications_category" msgid="5394089406638954196">"แอปพลิเคชัน"</string>
     <string name="immediately_destroy_activities" msgid="1826287490705167403">"ไม่เก็บกิจกรรม"</string>
     <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"ล้างทุกกิจกรรมทันทีที่ผู้ใช้ออกไป"</string>
@@ -394,8 +397,8 @@
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"แสดงกล่องโต้ตอบ \"แอปไม่ตอบสนอง\" สำหรับแอปเบื้องหลัง"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"แสดงคำเตือนจากช่องทางการแจ้งเตือน"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"แสดงคำเตือนบนหน้าจอเมื่อแอปโพสต์การแจ้งเตือนโดยไม่มีช่องทางที่ถูกต้อง"</string>
-    <string name="force_allow_on_external" msgid="9187902444231637880">"บังคับให้แอปสามารถใช้ที่เก็บภายนอก"</string>
-    <string name="force_allow_on_external_summary" msgid="8525425782530728238">"เขียนแอปในพื้นที่เก็บข้อมูลภายนอกได้ โดยไม่คำนึงถึงค่าไฟล์ Manifest"</string>
+    <string name="force_allow_on_external" msgid="9187902444231637880">"บังคับให้อนุญาตแอปในที่จัดเก็บข้อมูลภายนอก"</string>
+    <string name="force_allow_on_external_summary" msgid="8525425782530728238">"ทำให้เขียนแอปในที่จัดเก็บข้อมูลภายนอกได้ โดยไม่คำนึงถึงค่าในไฟล์ Manifest"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"บังคับให้กิจกรรมปรับขนาดได้"</string>
     <string name="force_resizable_activities_summary" msgid="2490382056981583062">"ทำให้กิจกรรมทั้งหมดปรับขนาดได้สำหรับหน้าต่างหลายบาน โดยไม่คำนึงถึงค่าในไฟล์ Manifest"</string>
     <string name="enable_freeform_support" msgid="7599125687603914253">"เปิดใช้หน้าต่างรูปแบบอิสระ"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"เวลามากขึ้น"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"เวลาน้อยลง"</string>
     <string name="cancel" msgid="5665114069455378395">"ยกเลิก"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"ถัดไป"</string>
+    <string name="back" msgid="5554327870352703710">"กลับ"</string>
+    <string name="save" msgid="3745809743277153149">"บันทึก"</string>
     <string name="okay" msgid="949938843324579502">"ตกลง"</string>
     <string name="done" msgid="381184316122520313">"เสร็จสิ้น"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"การปลุกและการช่วยเตือน"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"เมื่อสักครู่"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"โทรศัพท์เครื่องนี้"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"แท็บเล็ตเครื่องนี้"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"แท่นวางลำโพง"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"อุปกรณ์ภายนอก"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"อุปกรณ์ที่เชื่อมต่อ"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"โทรศัพท์เครื่องนี้"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"เล่นในอุปกรณ์นี้ไม่ได้"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"อัปเกรดบัญชีเพื่อเปลี่ยน"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"ผู้ใช้"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"โปรไฟล์ที่ถูกจำกัด"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"ต้องการเพิ่มผู้ใช้ใหม่ใช่ไหม"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"คุณมีสิทธิ์แชร์อุปกรณ์นี้กับผู้อื่นได้โดยการเพิ่มผู้ใช้ แต่ละคนจะมีพื้นที่ของตนเองซึ่งปรับใช้กับแอป วอลเปเปอร์ และรายการอื่นๆ ได้ อีกทั้งยังปรับการตั้งค่าอุปกรณ์ได้ด้วย เช่น Wi‑Fi ซึ่งจะมีผลกับทุกคน\n\nเมื่อคุณเพิ่มผู้ใช้ใหม่ ผู้ใช้ดังกล่าวจะต้องตั้งค่าพื้นที่ของตน\n\nผู้ใช้ทุกคนมีสิทธิ์อัปเดตแอปให้ผู้ใช้รายอื่น การตั้งค่าและบริการสำหรับการช่วยเหลือพิเศษอาจโอนไปยังผู้ใช้ใหม่ไม่ได้"</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"คุณมีสิทธิ์แชร์อุปกรณ์นี้กับผู้อื่นได้โดยการเพิ่มผู้ใช้ โดยแต่ละคนจะมีพื้นที่ของตนเองซึ่งปรับใช้กับแอป วอลเปเปอร์ และรายการอื่นๆ ได้ อีกทั้งยังปรับการตั้งค่าอุปกรณ์ได้ด้วย เช่น Wi‑Fi ซึ่งจะมีผลกับทุกคน\n\nเมื่อคุณเพิ่มผู้ใช้ใหม่ ผู้ใช้ดังกล่าวจะต้องตั้งค่าพื้นที่ของตน\n\nผู้ใช้ทุกคนมีสิทธิ์อัปเดตแอปให้ผู้ใช้รายอื่น การตั้งค่าและบริการสำหรับการช่วยเหลือพิเศษจะไม่โอนไปยังผู้ใช้ใหม่"</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"เมื่อคุณเพิ่มผู้ใช้ใหม่ ผู้ใช้ดังกล่าวจะต้องตั้งค่าพื้นที่ของตนเอง\n\nผู้ใช้ทุกคนสามารถอัปเดตแอปสำหรับผู้ใช้รายอื่นได้"</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"กำหนดให้ผู้ใช้รายนี้เป็นผู้ดูแลระบบไหม"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"ผู้ดูแลระบบจะได้รับสิทธิ์พิเศษที่ผู้ใช้รายอื่นๆ ไม่มี ผู้ดูแลระบบสามารถจัดการผู้ใช้ทั้งหมด อัปเดตหรือรีเซ็ตอุปกรณ์นี้ แก้ไขการตั้งค่า ดูแอปที่ติดตั้งทั้งหมด ตลอดจนให้หรือเพิกถอนสิทธิ์ของผู้ดูแลระบบสำหรับคนอื่นๆ ได้"</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"กำหนดให้เป็นผู้ดูแลระบบ"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"ตั้งค่าผู้ใช้เลยไหม"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"ตรวจสอบว่าบุคคลดังกล่าวสามารถนำอุปกรณ์ไปตั้งค่าพื้นที่ของตนได้"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"หากต้องการตั้งค่าโปรไฟล์ทันที"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"การดำเนินการนี้จะเริ่มเซสชันผู้ใช้ชั่วคราวใหม่ และจะลบแอปและข้อมูลทั้งหมดจากเซสชันปัจจุบัน"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"ออกจากโหมดผู้ใช้ชั่วคราวไหม"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"การดำเนินการนี้จะลบแอปและข้อมูลออกจากเซสชันผู้ใช้ชั่วคราวในปัจจุบัน"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"ใช่ กำหนดให้เป็นผู้ดูแลระบบ"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"ไม่ อย่ากำหนดให้เป็นผู้ดูแลระบบ"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"ออก"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"บันทึกกิจกรรมของผู้ใช้ชั่วคราวไหม"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"คุณสามารถบันทึกกิจกรรมจากเซสชันปัจจุบันหรือจะลบแอปและข้อมูลทั้งหมดก็ได้"</string>
@@ -684,8 +682,8 @@
     <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="268234802198852753">"หากคุณออกอากาศ <xliff:g id="SWITCHAPP">%1$s</xliff:g> หรือเปลี่ยนแปลงเอาต์พุต การออกอากาศในปัจจุบันจะหยุดลง"</string>
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"ออกอากาศ <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"เปลี่ยนเอาต์พุต"</string>
-    <string name="back_navigation_animation" msgid="8105467568421689484">"การเคลื่อนไหวย้อนกลับแบบคาดเดา"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"เปิดใช้การเคลื่อนไหวของระบบสำหรับท่าทางสัมผัสย้อนกลับแบบคาดเดา"</string>
+    <string name="back_navigation_animation" msgid="8105467568421689484">"ภาพเคลื่อนไหวของการย้อนกลับที่คาดการณ์ได้"</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"เปิดใช้ภาพเคลื่อนไหวของระบบสำหรับการย้อนกลับที่คาดการณ์ได้"</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"การตั้งค่านี้จะเปิดใช้การเคลื่อนไหวของระบบสำหรับการเคลื่อนไหวจากท่าทางสัมผัสแบบคาดเดา โดยต้องตั้งค่า enableOnBackInvokedCallback สำหรับแต่ละแอปให้เป็น \"จริง\" ในไฟล์ Manifest"</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"ย้ายไปทางซ้าย"</item>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"ย้ายขึ้น"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"ไม่ได้ระบุ"</string>
+    <string name="neuter" msgid="2075249330106127310">"ไม่มีเพศ"</string>
+    <string name="feminine" msgid="1529155595310784757">"เพศหญิง"</string>
+    <string name="masculine" msgid="4653978041013996303">"เพศชาย"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-tl/arrays.xml b/packages/SettingsLib/res/values-tl/arrays.xml
index 9af30d6..94436aa 100644
--- a/packages/SettingsLib/res/values-tl/arrays.xml
+++ b/packages/SettingsLib/res/values-tl/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Pinagmulan ng Audio"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index 6e23eba..889e396 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Access sa SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD audio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Mga Hearing Aid"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Nakakonekta sa Mga Hearing Aid"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Mga hearing aid"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Nakakonekta sa mga hearing aid"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Nakakonekta sa LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Konektado sa media audio"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Nakakonekta sa audio ng telepono"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Ginagamit para sa audio ng telepono"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Ginagamit para sa paglilipat ng file"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Gamitin para sa input"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Gamitin para sa Mga Hearing Aid"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Gamitin para sa mga hearing aid"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Gamitin para sa LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Ipares"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"IPARES"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Pumili ng profile"</string>
     <string name="category_personal" msgid="6236798763159385225">"Personal"</string>
     <string name="category_work" msgid="4014193632325996115">"Trabaho"</string>
+    <string name="category_clone" msgid="1554511758987195974">"I-clone"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Mga opsyon ng developer"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"I-enable ang mga opsyon ng developer"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Magtakda ng mga pagpipilian para sa pagbuo ng app"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Overlay ng screen na nagpapakita ng touch data"</string>
     <string name="show_touches" msgid="8437666942161289025">"Ipakita ang mga pag-tap"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Ipakita ang visual na feedback para sa mga pag-tap"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Ipakita ang mga key press"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Ipakita: visual feedback ng mga physical key press"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Ipakita update sa surface"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"I-flash ang buong window surface kapag nag-update"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Ipakita update ng view"</string>
@@ -380,7 +383,7 @@
     <string name="track_frame_time" msgid="522674651937771106">"Rendering ng Profile HWUI"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"I-enable ang GPU debug layer"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Payagang i-load ang GPU debug layer sa debug app"</string>
-    <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Enable verbose vendor logging"</string>
+    <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"I-enable ang verbose vendor logging"</string>
     <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Magsama sa mga ulat ng bug ng mga karagdagang log ng vendor na partikular sa device, na posibleng may pribadong impormasyon, gumamit ng mas maraming baterya, at/o gumamit ng mas malaking storage."</string>
     <string name="window_animation_scale_title" msgid="5236381298376812508">"Scale ng window animation"</string>
     <string name="transition_animation_scale_title" msgid="1278477690695439337">"Scale ng transition animation"</string>
@@ -479,7 +482,7 @@
     <string name="battery_info_status_charging_dock" msgid="8573274094093364791">"Nagcha-charge"</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>
+    <string name="battery_info_status_full" msgid="1339002294876531312">"Charged"</string>
     <string name="battery_info_status_full_charged" msgid="3536054261505567948">"Puno ang Baterya"</string>
     <string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Pinapamahalaan ng admin"</string>
     <string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Kinokontrol ng Pinaghihigpitang Setting"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Dagdagan ang oras."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Bawasan ang oras."</string>
     <string name="cancel" msgid="5665114069455378395">"Kanselahin"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Susunod"</string>
+    <string name="back" msgid="5554327870352703710">"Bumalik"</string>
+    <string name="save" msgid="3745809743277153149">"I-save"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Tapos na"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Mga alarm at paalala"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Ngayon lang"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Ang teleponong ito"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Ang tablet na ito"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Speaker ng dock"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"External na Device"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Nakakonektang device"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Ang teleponong ito"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Hindi ma-play sa device na ito"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"I-upgrade ang account para lumipat"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Magdagdag ng bagong user?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Puwede mong ibahagi ang device na ito sa ibang tao sa pamamagitan ng paggawa ng mga karagdagang user. May sariling espasyo ang bawat user na maaari nilang i-customize gamit ang mga app, wallpaper, at iba pa. Puwede ring isaayos ng mga user ang mga setting ng device tulad ng Wi‑Fi na nakakaapekto sa lahat.\n\nKapag nagdagdag ka ng bagong user, kailangang i-set up ng taong iyon ang kanyang espasyo.\n\nMaaaring mag-update ng mga app ang sinumang user para sa lahat ng iba pang user. Maaaring hindi malipat sa bagong user ang mga setting at serbisyo sa pagiging naa-access."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Kapag nagdagdag ka ng bagong user, kailangang i-set up ng taong iyon ang kanyang espasyo.\n\nAng sinumang user ay puwedeng mag-update ng mga app para sa lahat ng iba pang user."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Gawing admin ang user na ito?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"May mga espesyal na pribilehiyo ang mga admin na wala ang ibang user. Magagawa ng isang admin na pamahalaan ang lahat ng user, i-update o i-reset ang device na ito, baguhin ang mga settng, tingnan ang lahat ng naka-install na app, at magbigay o magbawi ng mga pribilehiyo ng admin sa iba."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Gawing admin"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"I-set up ang user ngayon?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Tiyaking available ang tao na kunin ang device at i-set up ang kanyang space"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Mag-set up ng profile ngayon?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Oo, gawin siyang admin"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Hindi, huwag siyang gawing admin"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Ilipat pataas"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Hindi tinukoy"</string>
+    <string name="neuter" msgid="2075249330106127310">"Walang Kasarian"</string>
+    <string name="feminine" msgid="1529155595310784757">"Pambabae"</string>
+    <string name="masculine" msgid="4653978041013996303">"Panlalaki"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-tr/arrays.xml b/packages/SettingsLib/res/values-tr/arrays.xml
index 6d8821e..ed3755a 100644
--- a/packages/SettingsLib/res/values-tr/arrays.xml
+++ b/packages/SettingsLib/res/values-tr/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Ses Kaynağı"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index 6187ad2..495bcd9 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM Erişimi"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD ses: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD ses"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"İşitme Cihazları"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"İşitme Cihazlarına Bağlandı"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"İşitme cihazları"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"İşitme cihazlarına bağlandı"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE Audio\'ya bağlandı"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Medya sesine bağlanıldı"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Telefon sesine bağlandı"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Telefon sesi için kullan"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Dosya aktarımı için kullan"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Giriş için kullan"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"İşitme Cihazları için kullan"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"İşitme cihazları için kullan"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO kullan"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Eşle"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"EŞLE"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Profil seçin"</string>
     <string name="category_personal" msgid="6236798763159385225">"Kişisel"</string>
     <string name="category_work" msgid="4014193632325996115">"İş"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Klon"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Geliştirici seçenekleri"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Geliştirici seçeneklerini etkinleştir"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Uygulama geliştirme için seçenekleri ayarla"</string>
@@ -257,7 +258,7 @@
     <string name="bugreport_in_power_summary" msgid="1885529649381831775">"Hata raporu almak için güç menüsünde bir düğme göster"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"Uyanık kal"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"Şarj edilirken ekran hiçbir zaman uykuya geçmez"</string>
-    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Bluetooth HCI araştırmayı etkinleştir"</string>
+    <string name="bt_hci_snoop_log" msgid="7291287955649081448">"Bluetooth HCI araştırma günlüğünü etkinleştir"</string>
     <string name="bt_hci_snoop_log_summary" msgid="6808538971394092284">"Bluetooth paketlerini yakalayın. (Bu ayarı değiştirdikten sonra Bluetooth seçimini değiştirin)"</string>
     <string name="oem_unlock_enable" msgid="5334869171871566731">"OEM kilit açma"</string>
     <string name="oem_unlock_enable_summary" msgid="5857388174390953829">"Önyükleyicinin kilidinin açılmasına izin ver"</string>
@@ -268,8 +269,8 @@
     <string name="mock_location_app_set" msgid="4706722469342913843">"Sahte konum uygulaması: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="debug_networking_category" msgid="6829757985772659599">"Ağ işlemleri"</string>
     <string name="wifi_display_certification" msgid="1805579519992520381">"Kablosuz ekran sertifikası"</string>
-    <string name="wifi_verbose_logging" msgid="1785910450009679371">"Kablosuz Ayrıntılı Günlük Kaydını etkinleştir"</string>
-    <string name="wifi_scan_throttling" msgid="2985624788509913617">"Kablosuz ağ taramasını kısma"</string>
+    <string name="wifi_verbose_logging" msgid="1785910450009679371">"Kablosuz ayrıntılı günlük kaydını etkinleştir"</string>
+    <string name="wifi_scan_throttling" msgid="2985624788509913617">"Kablosuz ağ taramasını sınırlandır"</string>
     <string name="wifi_non_persistent_mac_randomization" msgid="7482769677894247316">"Kablosuz kalıcı olmayan MAC rastgele hale getirme modu"</string>
     <string name="mobile_data_always_on" msgid="8275958101875563572">"Mobil veri her zaman etkin"</string>
     <string name="tethering_hardware_offload" msgid="4116053719006939161">"Tethering donanım hızlandırıcısı"</string>
@@ -305,7 +306,7 @@
     <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"Bu mod etkinleştirildiğinde, bu cihaz MAC rastgele hale getirme işlevi açık olan bir ağa her bağlandığında cihazın MAC adresi değişebilir."</string>
     <string name="wifi_metered_label" msgid="8737187690304098638">"Sayaçlı"</string>
     <string name="wifi_unmetered_label" msgid="6174142840934095093">"Sayaçsız"</string>
-    <string name="select_logd_size_title" msgid="1604578195914595173">"Günlük Kaydedici arabellek boyutları"</string>
+    <string name="select_logd_size_title" msgid="1604578195914595173">"Günlük kaydedici arabellek boyutları"</string>
     <string name="select_logd_size_dialog_title" msgid="2105401994681013578">"Gün. arabel. başına Gün. Kayd. boyutunu seç"</string>
     <string name="dev_logpersist_clear_warning_title" msgid="8631859265777337991">"Günlük kaydedici kalıcı depolama alanı silinsin mi?"</string>
     <string name="dev_logpersist_clear_warning_message" msgid="6447590867594287413">"Kalıcı günlük kaydediciyle artık izlemediğimizde, cihazınızda bulunan günlük kaydedici verilerini silmemiz gerekmektedir."</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Mevcut dokunmatik verilerini gösteren yer paylaşımı"</string>
     <string name="show_touches" msgid="8437666942161289025">"Dokunmayı göster"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Dokunmalarda görsel geri bildirim göster"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Basılan tuşları göster"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Fiziksel tuşlara basınca görsel geri bildirim ver"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Yüzey güncellemelerini göster"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Güncellenirken tüm pencere yüzeylerini yakıp söndür"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Görünüm güncellemelerini göster"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Daha uzun süre."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Daha kısa süre."</string>
     <string name="cancel" msgid="5665114069455378395">"İptal"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Sonraki"</string>
+    <string name="back" msgid="5554327870352703710">"Geri"</string>
+    <string name="save" msgid="3745809743277153149">"Kaydet"</string>
     <string name="okay" msgid="949938843324579502">"Tamam"</string>
     <string name="done" msgid="381184316122520313">"Bitti"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Alarmlar ve hatırlatıcılar"</string>
@@ -547,10 +547,13 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Az önce"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Bu telefon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Bu tablet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Yuva hoparlörü"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Harici Cihaz"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Bağlı cihaz"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Bu telefon"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Bu cihazda oynatılamıyor"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Geçiş yapmak için hesabı yükseltin"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"İndirilenler burada oynatılamıyor"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"İndirilenler burada oynatılamaz"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Reklamdan sonra tekrar deneyin"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Burada oynatmak için cihazı uyandırın"</string>
     <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Cihaz, oynatma işlemini onaylamadı"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Yeni kullanıcı eklensin mi?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Ek kullanıcılar oluşturarak bu cihazı başkalarıyla paylaşabilirsiniz. Her kullanıcının uygulamalarla, duvar kağıdıyla ve başka ayarlarla özelleştirebileceği kendi alanı olur. Kullanıcılar ayrıca kablosuz ağ gibi herkesi etkileyen cihaz ayarlarını değiştirebilirler.\n\nYeni bir kullanıcı eklediğinizde, ilgili kişinin kendi alanını ayarlaması gerekir.\n\nHer kullanıcı diğer tüm kullanıcılar için uygulamaları güncelleyebilir. Erişilebilirlik ayarları ve hizmetleri yeni kullanıcıya aktarılamayabilir."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Yeni bir kullanıcı eklediğinizde, bu kişinin kendi alanını ayarlaması gerekir.\n\nHerhangi bir kullanıcı, diğer tüm kullanıcılar için uygulamaları güncelleyebilir."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Bu kullanıcı yönetici yapılsın mı?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Yöneticiler diğer kullanıcıların sahip olmadığı özel ayrıcalıklara sahiptir. Yöneticiler tüm kullanıcıları yönetebilir, bu cihazı güncelleyebilir veya sıfırlayabilir, ayarları değiştirebilir, yüklü tüm uygulamaları görebilir ve başkalarına yönetici ayrıcalıkları verebilir veya mevcut ayrıcalıkları iptal edebilir."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Yönetici yap"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Kullanıcı şimdi ayarlansın mı?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"İlgili kişinin cihazı almak ve kendi alanını ayarlamak için müsait olduğundan emin olun"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Profil şimdi yapılandırılsın mı?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Evet, onu yönetici yap"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Hayır, onu yönetici yapma"</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>
@@ -684,8 +682,8 @@
     <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="268234802198852753">"<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="5749813313369517812">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> uygulamasında anons yapın"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"Çıkışı değiştirme"</string>
-    <string name="back_navigation_animation" msgid="8105467568421689484">"Tahmine dayalı geri hareketi animasyonları"</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Tahmine dayalı geri hareketi için sistem animasyonlarını etkinleştirin"</string>
+    <string name="back_navigation_animation" msgid="8105467568421689484">"Tahmin edilen geri gitme animasyonları"</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Tahmin edilen geri gitme için sistem animasyonlarını etkinleştirin"</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"Bu ayar, tahmine dayalı hareket animasyonu için sistem animasyonlarını etkinleştirir. Her uygulamanın manifest dosyasında enableOnBackInvokedCallback\'in doğru değerine ayarlanması gerekir."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"Sola taşı"</item>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Yukarı taşı"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"%%<xliff:g id="PERCENTAGE">%1$d</xliff:g>"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Belirtilmedi"</string>
+    <string name="neuter" msgid="2075249330106127310">"Cinsiyetsiz"</string>
+    <string name="feminine" msgid="1529155595310784757">"Kadın"</string>
+    <string name="masculine" msgid="4653978041013996303">"Erkek"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-uk/arrays.xml b/packages/SettingsLib/res/values-uk/arrays.xml
index b606d07..83336d5 100644
--- a/packages/SettingsLib/res/values-uk/arrays.xml
+++ b/packages/SettingsLib/res/values-uk/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Джерело аудіо"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 96708ff..2158ec1 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -107,16 +107,16 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Передавання файлів"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Пристрій введення"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Доступ до Інтернету"</string>
-    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Доступ до контактів та історії дзвінків"</string>
+    <string name="bluetooth_profile_pbap" 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>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD-аудіо: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD-аудіо"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Слухові апарати"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Підключено до слухових апаратів"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Слухові апарати"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Підключено до слухових апаратів"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Підключено до LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Підключено до аудіоджерела"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Підключено до звуку телеф."</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Викор. для звуку тел."</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Викор. для перед. файлів"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Викор. для введ."</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Використовувати для слухових апаратів"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Використовувати для слухових апаратів"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Використовувати для LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Підключити"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ПІДКЛЮЧИТИСЯ"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Скасувати"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Якщо ви під’єднаєте інший пристрій, він матиме доступ до ваших контактів та історії дзвінків."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Не вдалося створити пару з пристроєм <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Помилка підключення до пристрою <xliff:g id="DEVICE_NAME">%1$s</xliff:g>: неправильний PIN-код чи ключ доступу."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Не підключено пристрій <xliff:g id="DEVICE_NAME">%1$s</xliff:g>: неправильний PIN-код чи ключ доступу."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Неможливо зв’язатися з пристроєм <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Створ. пари відхилено <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Комп’ютер"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Вибрати профіль"</string>
     <string name="category_personal" msgid="6236798763159385225">"Особисте"</string>
     <string name="category_work" msgid="4014193632325996115">"Робоче"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Копія профілю"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Параметри розробника"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Увімкнути параметри розробника"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Установити параметри для розробки програми"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Показувати на екрані жести й натискання"</string>
     <string name="show_touches" msgid="8437666942161289025">"Показувати дотики"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Показувати візуальну реакцію на торкання"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Показувати натиск. клавіш"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Показувати візуальний відгук на натискання клавіш"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Показ. оновлення поверхні"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Підсвічувати вікна повністю під час оновлення"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Показувати оновлення областей"</string>
@@ -379,9 +382,9 @@
     <string name="show_non_rect_clip" msgid="7499758654867881817">"Налагодити непрямокутну обрізку"</string>
     <string name="track_frame_time" msgid="522674651937771106">"Обробка HWUI за профілем"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Увімкнути шари налагодження ГП"</string>
-    <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Дозвольте завантажувати шари налагодження ГП для додатків налагодження"</string>
-    <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Увімкнути докладну реєстрацію постачальника"</string>
-    <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Включати у звіти про помилки додаткові записи про постачальника пристрою, які можуть містити особисті дані, призводити до надмірного споживання заряду акумулятора та/або використовувати більший обсяг пам\'яті."</string>
+    <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Дозволити завантажувати шари налагодження ГП для додатків налагодження"</string>
+    <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"Увімкнути докладний журнал постачальника"</string>
+    <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"Включати у звіти про помилки додаткові записи постачальника про пристрій, які можуть містити особисті дані, призводити до надмірного споживання заряду акумулятора та/або використовувати більший обсяг пам\'яті."</string>
     <string name="window_animation_scale_title" msgid="5236381298376812508">"Анімація вікон"</string>
     <string name="transition_animation_scale_title" msgid="1278477690695439337">"Анімація переходів"</string>
     <string name="animator_duration_scale_title" msgid="7082913931326085176">"Тривалість анімації"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Більше часу."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Менше часу."</string>
     <string name="cancel" msgid="5665114069455378395">"Скасувати"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Далі"</string>
+    <string name="back" msgid="5554327870352703710">"Назад"</string>
+    <string name="save" msgid="3745809743277153149">"Зберегти"</string>
     <string name="okay" msgid="949938843324579502">"ОК"</string>
     <string name="done" msgid="381184316122520313">"Готово"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Будильники й нагадування"</string>
@@ -547,14 +547,17 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Щойно"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Цей телефон"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Цей планшет"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Динамік док-станції"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Зовнішній пристрій"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Підключений пристрій"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Цей телефон"</string>
-    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Не можна відтворювати медіаконтент на цьому пристрої"</string>
-    <string name="media_output_status_require_premium" msgid="8411255800047014822">"Щоб змінити, перейдіть на платний обліковий запис"</string>
-    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Тут не можна відтворювати завантажений контент"</string>
+    <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Не можна відтворювати тут"</string>
+    <string name="media_output_status_require_premium" msgid="8411255800047014822">"Потрібний платний обліковий запис"</string>
+    <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Завантаження не відтворюватимуться"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Повторіть спробу після реклами"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Виведіть пристрій із режиму сну, щоб відтворювати медіаконтент"</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Пристрій не схвалений для відтворення медіаконтенту"</string>
-    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"На пристрої не можна відтворювати цей медіафайл"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Виведіть із режиму сну, щоб відтворювати"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Не схвалено для відтворення"</string>
+    <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Цей медіаконтент не підтримується"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Не вдається підключитися. Перезавантажте пристрій."</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Дротовий аудіопристрій"</string>
     <string name="help_label" msgid="3528360748637781274">"Довідка й відгуки"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Користувач"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Профіль з обмеженням"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Додати нового користувача?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Цим пристроєм можуть користуватися кілька людей. Для цього потрібно створити додаткові профілі. Власник профілю може налаштувати його на свій смак: вибрати фоновий малюнок, установити потрібні додатки тощо. Користувачі також можуть налаштовувати певні параметри пристрою (як-от Wi-Fi), які застосовуватимуться до решти профілів.\n\nПісля створення новий профіль потрібно налаштувати.\n\nБудь-який користувач пристрою може оновлювати додатки для решти користувачів. Налаштування спеціальних можливостей і сервісів можуть не передаватися новому користувачеві."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Цим пристроєм можуть користуватися кілька людей. Для цього потрібно створити додаткові профілі. Власник профілю може налаштувати його на свій смак: вибрати фоновий малюнок, установити потрібні додатки тощо. Користувачі також можуть налаштовувати певні параметри пристрою (як-от Wi-Fi), які застосовуватимуться до решти профілів.\n\nПісля створення новий профіль потрібно налаштувати.\n\nБудь-який користувач пристрою може оновлювати додатки для решти користувачів. Налаштування й сервіси доступності можуть не передаватися новому користувачеві."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Користувач має налаштувати свій профіль після створення.\n\nБудь-який користувач пристрою може оновлювати додатки для решти користувачів."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Надати цьому користувачу права адміністратора?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Адміністратори, на відміну від звичайних користувачів, мають спеціальні права. Вони можуть керувати всіма користувачами, оновлювати, скидати чи змінювати налаштування цього пристрою, переглядати всі встановлені додатки, а також надавати іншим користувачам права адміністратора або відкликати їх."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Надати права адміністратора"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Створити користувача зараз?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Переконайтеся, що користувач може взяти пристрій і налаштувати профіль"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Налаштувати профіль зараз?"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Почнеться новий сеанс у режимі гостя, а всі додатки й дані з поточного сеансу буде видалено"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"Вийти з режиму гостя?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"Усі додатки й дані з поточного сеансу в режимі гостя буде видалено."</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Так, надати права адміністратора"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Ні, не надавати прав адміністратора"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"Вийти"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Зберегти дії в режимі гостя?"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Ви можете зберегти дії з поточного сеансу або видалити всі додатки й дані"</string>
@@ -685,7 +683,7 @@
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"Змінити додаток для трансляції на <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
     <string name="bt_le_audio_broadcast_dialog_different_output" msgid="2638402023060391333">"Змінити аудіовихід"</string>
     <string name="back_navigation_animation" msgid="8105467568421689484">"Анімації з підказками для жесту \"Назад\""</string>
-    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Увімкніть системну анімацію з підказками для жесту \"Назад\"."</string>
+    <string name="back_navigation_animation_summary" msgid="741292224121599456">"Увімкнути системну анімацію з підказками для жесту \"Назад\"."</string>
     <string name="back_navigation_animation_dialog" msgid="8696966520944625596">"Якщо вибрати це налаштування, для жесту \"Назад\" відображатиметься анімація з підказками. У файлі маніфесту атрибуту enableOnBackInvokedCallback додатка потрібно присвоїти значення true."</string>
   <string-array name="udfps_accessibility_touch_hints">
     <item msgid="1737722959616802157">"Перемістіть палець ліворуч"</item>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Перемістіть палець угору"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Не вказано"</string>
+    <string name="neuter" msgid="2075249330106127310">"Середній рід"</string>
+    <string name="feminine" msgid="1529155595310784757">"Жіночий рід"</string>
+    <string name="masculine" msgid="4653978041013996303">"Чоловічий рід"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-ur/arrays.xml b/packages/SettingsLib/res/values-ur/arrays.xml
index 6d4062d..df0e56e 100644
--- a/packages/SettingsLib/res/values-ur/arrays.xml
+++ b/packages/SettingsLib/res/values-ur/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"آڈیو ماخذ"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index 5917a32..5dc7332 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"‏SIM رسائی"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"‏HD آڈیو: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"‏HD آڈیو"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"سماعتی آلات"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"‏LE آڈیو"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"سماعتی آلات سے منسلک ہے"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"سماعتی آلات"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"‏LE آڈیو"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"سماعتی آلات سے منسلک ہے"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"‏LE آڈیو سے منسلک ہے"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"میڈیا آڈیو سے مربوط"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"فون آڈیو سے مربوط"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"فون آڈیو کیلئے استعمال کریں"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"فائل منتقل کرنے کیلئے استعمال کریں"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ان پٹ کیلئے استعمال"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"سماعتی آلات کے لیے استعمال کریں"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"سماعتی آلات کیلئے استعمال کریں"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"‏LE_AUDIO کے لیے استعمال کریں"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"جوڑا بنائیں"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"جوڑا بنائیں"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"پروفائل منتخب کریں"</string>
     <string name="category_personal" msgid="6236798763159385225">"ذاتی"</string>
     <string name="category_work" msgid="4014193632325996115">"دفتر"</string>
+    <string name="category_clone" msgid="1554511758987195974">"کلون کریں"</string>
     <string name="development_settings_title" msgid="140296922921597393">"ڈویلپر کے اختیارات"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"ڈویلپر کے اختیارات فعال کریں"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"ایپ ڈویلپمنٹ کیلئے اختیارات سیٹ کریں"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"موجودہ ٹچ ڈیٹا دکھانے والا اسکرین اوور لے"</string>
     <string name="show_touches" msgid="8437666942161289025">"تھپتھپاہٹیں دکھائیں"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"تھپتھپاہٹوں کیلئے بصری تاثرات دکھائیں"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"\'کلید کو دبانا\' دکھائیں"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"\'طبعی کلید کو دبانا\' کیلئے ویژوئل تاثرات دکھائیں"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"سطح کے اپ ڈیٹس دکھائیں"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"اپ ڈیٹ ہونے پر ونڈو کی پوری سطحیں جھلملائیں"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"منظر کے اپ ڈیٹس دکھائیں"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"زیادہ وقت۔"</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"کم وقت۔"</string>
     <string name="cancel" msgid="5665114069455378395">"منسوخ کریں"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"آگے جائیں"</string>
+    <string name="back" msgid="5554327870352703710">"پیچھے جائیں"</string>
+    <string name="save" msgid="3745809743277153149">"محفوظ کریں"</string>
     <string name="okay" msgid="949938843324579502">"ٹھیک ہے"</string>
     <string name="done" msgid="381184316122520313">"ہو گیا"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"الارمز اور یاد دہانیاں"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"ابھی ابھی"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"یہ فون"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"یہ ٹیبلیٹ"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"ڈاک اسپیکر"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"بیرونی آلہ"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"منسلک آلہ"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"یہ فون"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"اس آلے پر چلایا نہیں جا سکتا"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"سوئچ کرنے کے لیے اکاؤنٹ اپ گریڈ کریں"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"نیا صارف شامل کریں؟"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"‏آپ اضافی صارفین تخلیق کر کے دوسرے لوگوں کے ساتھ اس آلہ کا اشتراک کر سکتے ہیں۔ ہر صارف کے پاس اپنی جگہ ہوتی ہے، جسے وہ ایپس، وال پیپر وغیرہ کے ساتھ حسب ضرورت بنا سکتا ہے۔ صارفین Wi‑Fi جیسی آلے کی ترتیبات کو ایڈجسٹ بھی کر سکتے ہیں جس کا اثر ہر کسی پر ہوتا ہے۔\n\nجب آپ ایک نیا صارف شامل کرتے ہیں، تو اسے اپنی جگہ سیٹ اپ کرنا پڑتی ہے۔\n\nکوئی بھی صارف دیگر تمام صارفین کیلئے ایپس اپ ڈیٹ کر سکتا ہے۔ رسائی کی ترتیبات اور سروسز کو نئے صارف کو منتقل نہیں کیا جا سکتا۔"</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"جب آپ ایک نیا صارف شامل کرتے ہیں تو اس شخص کو اپنی جگہ کو ترتیب دینے کی ضرورت ہوتی ہے\n\nکوئی بھی صارف دیگر سبھی صارفین کیلئے ایپس کو اپ ڈیٹ کر سکتا ہے۔"</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"اس صارف کو منتظم بنائیں؟"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"منتظمین کے پاس خصوصی مراعات ہیں جو دوسرے صارفین کو حاصل نہیں ہیں۔ ایک منتظم تمام صارفین کا نظم کر سکتا ہے، اس آلہ کو اپ ڈیٹ یا ری سیٹ کر سکتا ہے، ترتیبات میں ترمیم کر سکتا ہے، تمام انسٹال کردہ ایپس دیکھ سکتا ہے اور دوسروں کے لیے منتظم کی مراعات دے سکتا ہے یا انہیں منسوخ کر سکتا ہے۔"</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"منتظم بنائیں"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"صارف کو ابھی سیٹ اپ کریں؟"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"یقینی بنائیں کہ وہ شخص آلہ لینے اور اپنی جگہ کو سیٹ اپ کرنے کیلئے دستیاب ہے"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"پروفائل کو ابھی ترتیب دیں؟"</string>
@@ -616,10 +616,8 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"اس سے ایک نیا مہمان سیشن شروع ہو گا اور موجودہ سیشن سے تمام ایپس اور ڈیٹا حذف ہو جائے گا"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"مہمان وضع سے باہر نکلیں؟"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"یہ موجودہ مہمان سیشن سے ایپس اور ڈیٹا کو حذف کر دے گا"</string>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"ہاں انہیں منتظم بنائیں"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"نہیں، انہیں منتظم نہ بنائیں"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"باہر نکلیں"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"مہمان کی سرگرمی محفوظ کریں؟"</string>
     <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"آپ موجودہ سیشن سے سرگرمی کو محفوظ یا تمام ایپس اور ڈیٹا کو حذف کر سکتے ہیں"</string>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"اوپر منتقل کریں"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"متعین نہیں ہے"</string>
+    <string name="neuter" msgid="2075249330106127310">"غیر واضح"</string>
+    <string name="feminine" msgid="1529155595310784757">"مؤنث"</string>
+    <string name="masculine" msgid="4653978041013996303">"مذکر"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-uz/arrays.xml b/packages/SettingsLib/res/values-uz/arrays.xml
index da14d78..3c96530 100644
--- a/packages/SettingsLib/res/values-uz/arrays.xml
+++ b/packages/SettingsLib/res/values-uz/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Audio manbasi"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index b32222c..cdc7e1c 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM kartaga kirish"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD audio"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Eshitish apparatlari"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Eshitish apparatlariga ulangan"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Eshitish moslamalari"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Eshitish moslamalariga ulangan"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"LE audioga ulandi"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Audio qurilmasiga ulangan"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Telefon karnayiga ulanildi"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Dok’dan karnay sifatida foydalanish"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Fayl almashinish uchun foydalanish"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Kiritish qurilmasi sifatida foydalanish"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Eshitish apparatlari uchun foydalanish"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Eshitish moslamalari uchun foydalanish"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO uchun foydalanish"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"OK"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"ULANISH"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Profilni tanlang"</string>
     <string name="category_personal" msgid="6236798763159385225">"Shaxsiy"</string>
     <string name="category_work" msgid="4014193632325996115">"Ish"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Nusxalash"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Dasturchi sozlamalari"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Dasturchi sozlamalarini yoqish"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Ilova dasturlash moslamalari"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Ekranda bosilgan va tegilgan joylarni vizuallashtirish"</string>
     <string name="show_touches" msgid="8437666942161289025">"Bosishlarni ko‘rsatish"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Ekranda bosilgan joylardagi nuqtalarni ko‘rsatish"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Tugma bosishlarini chiqarish"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Jismoniy tugmani bosishlar uchun vizual fikr-mulohazani chiqarish"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Yuza yangilanishlarini ko‘rsatish"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Yangilangandan so‘ng to‘liq oyna sirtlarini miltillatish"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Yangilash oynasini ochish"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Ko‘proq vaqt."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Kamroq vaqt."</string>
     <string name="cancel" msgid="5665114069455378395">"Bekor qilish"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Keyingisi"</string>
+    <string name="back" msgid="5554327870352703710">"Orqaga"</string>
+    <string name="save" msgid="3745809743277153149">"Saqlash"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Tayyor"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Signal va eslatmalar"</string>
@@ -547,13 +547,16 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Hozir"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Shu telefon"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Shu planshet"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Dok-stansiyali karnay"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Tashqi qurilma"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Ulangan qurilma"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Shu telefon"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Bu qurilmada ijro etilmaydi"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Oʻtish uchun hisobingizni yangilang"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"Yuklab olingan fayllar ijro etilmaydi"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"Reklamadan keyin qayta urining"</string>
     <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"Ijro etish uchun qurilmani uyqu rejimidan chiqaring."</string>
-    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Qurilmaga ijro etish uchun ruxsat berilmagan"</string>
+    <string name="media_output_status_unauthorized" msgid="5880222828273853838">"Qurilmada ijro ruxsati yoʻq"</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"Media fayl ijro etilmaydi"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Ulanishda muammo yuz berdi. Qurilmani oʻchiring va yoqing"</string>
     <string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Simli audio qurilma"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Foydalanuvchi qo‘shilsinmi?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Bu qurilmadan bir necha kishi alohida foydalanuvchilar qo‘shib foydalanishi mumkin. Har bir foydalanuvchiga diskda joy ajratiladi, tayinlangan hajm ilovalar, ekran foni rasmi, va hokazolarga taqsimlanishi mumkin. Foydalanuvchilar Wi-Fi kabi sozlamalarni o‘zgartirsa, qolganlarda ham aks etishi mumkin. \n\nYangi profil qo‘shilgach, uni sozlash lozim.\n\nQurilmaning istalgan foydalanuvchisi ilovalarni barcha hisoblar uchun yangilashi mumkin. Qulayliklar sozlamalari va xizmatlar yangi foydalanuvchiga o‘tkazilmasligi mumkin."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Yangi profil qo‘shilgach, uni sozlash lozim.\n\nQurilmaning istalgan foydalanuvchisi ilovalarni barcha hisoblar uchun yangilashi mumkin."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Bu foydalanuvchiga administrator huquqi berilsinmi?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Administratorlarga boshqa foydalanuvchilarda boʻlmagan huquqlar beriladi Administrator barcha foydalanuvchilarni boshqarishi, bu qurilmani yangilashi yoki qayta oʻrnatishi, sozlamalarni oʻzgartirishi, barcha oʻrnatilgan ilovalarni koʻrishi va boshqalarga administrator huquqlarini berishi yoki bekor qilishi mumkin."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Administrator sifatida tayinlash"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Profil hozir sozlansinmi?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Agar foydalanuvchi profilini hozir sozlay olmasa, keyinroq ham sozlab olishi mumkin."</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Profil hozir sozlansinmi?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Ha ularga administrator huquqi berilsin"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Ha ularga administrator huquqi berilmasin"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Tepaga siljitish"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Koʻrsatilmagan"</string>
+    <string name="neuter" msgid="2075249330106127310">"Oʻrta"</string>
+    <string name="feminine" msgid="1529155595310784757">"Ayollar uchun"</string>
+    <string name="masculine" msgid="4653978041013996303">"Erkaklar uchun"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-vi/arrays.xml b/packages/SettingsLib/res/values-vi/arrays.xml
index 08f4550..9f7768c 100644
--- a/packages/SettingsLib/res/values-vi/arrays.xml
+++ b/packages/SettingsLib/res/values-vi/arrays.xml
@@ -200,7 +200,7 @@
   </string-array>
   <string-array name="select_logpersist_summaries">
     <item msgid="97587758561106269">"Đang tắt"</item>
-    <item msgid="7126170197336963369">"Tất cả lần tải nhật ký"</item>
+    <item msgid="7126170197336963369">"Tất cả các bộ đệm nhật ký"</item>
     <item msgid="7167543126036181392">"Tất cả trừ lần tải nhật ký qua đài"</item>
     <item msgid="5135340178556563979">"chỉ vùng đệm nhật ký kernel"</item>
   </string-array>
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Nguồn âm thanh"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index 0d24ea9..8ed63e9 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Truy cập SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Âm thanh HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Âm thanh HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Thiết bị trợ thính"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"Âm thanh LE"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Đã kết nối với Thiết bị trợ thính"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Thiết bị trợ thính"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"Âm thanh năng lượng thấp"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Đã kết nối với thiết bị trợ thính"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Đã kết nối với âm thanh LE"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Đã kết nối với âm thanh nội dung nghe nhìn"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Đã kết nối với âm thanh điện thoại"</string>
@@ -134,14 +134,14 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Sử dụng cho âm thanh điện thoại"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Sử dụng để chuyển tệp"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Sử dụng để nhập"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Dùng cho Thiết bị trợ thính"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Dùng cho thiết bị trợ thính"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Dùng cho LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Ghép nối"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"GHÉP NỐI"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"Hủy"</string>
     <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"Ghép nối giúp bạn có thể truy cập danh bạ và nhật ký cuộc gọi của mình khi được kết nối."</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"Không thể ghép nối với <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
-    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Không thể ghép nối với <xliff:g id="DEVICE_NAME">%1$s</xliff:g> do mã PIN hoặc mã xác nhận không đúng."</string>
+    <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"Không thể ghép nối với <xliff:g id="DEVICE_NAME">%1$s</xliff:g> do mã PIN hoặc mã truy cập không đúng."</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"Không thể kết nối với <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
     <string name="bluetooth_pairing_rejected_error_message" msgid="5943444352777314442">"Ghép nối bị <xliff:g id="DEVICE_NAME">%1$s</xliff:g> từ chối."</string>
     <string name="bluetooth_talkback_computer" msgid="3736623135703893773">"Máy tính"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Chọn hồ sơ"</string>
     <string name="category_personal" msgid="6236798763159385225">"Cá nhân"</string>
     <string name="category_work" msgid="4014193632325996115">"Công việc"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Nhân bản"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Tùy chọn cho nhà phát triển"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Bật tùy chọn nhà phát triển"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Đặt tùy chọn cho phát triển ứng dụng"</string>
@@ -299,7 +300,7 @@
     <string name="private_dns_mode_provider" msgid="3619040641762557028">"Tên máy chủ của nhà cung cấp DNS riêng"</string>
     <string name="private_dns_mode_provider_hostname_hint" msgid="6564868953748514595">"Nhập tên máy chủ"</string>
     <string name="private_dns_mode_provider_failure" msgid="8356259467861515108">"Không thể kết nối"</string>
-    <string name="wifi_display_certification_summary" msgid="8111151348106907513">"Hiển thị tùy chọn chứng nhận hiển thị không dây"</string>
+    <string name="wifi_display_certification_summary" msgid="8111151348106907513">"Hiện các lựa chọn chứng nhận hiển thị không dây"</string>
     <string name="wifi_verbose_logging_summary" msgid="4993823188807767892">"Tăng mức ghi nhật ký Wi‑Fi, hiển thị mỗi SSID RSSI trong bộ chọn Wi‑Fi"</string>
     <string name="wifi_scan_throttling_summary" msgid="2577105472017362814">"Giảm hao pin và cải thiện hiệu suất mạng"</string>
     <string name="wifi_non_persistent_mac_randomization_summary" msgid="2159794543105053930">"Khi bật chế độ này, địa chỉ MAC của thiết bị này có thể thay đổi mỗi lần thiết bị kết nối với mạng đã bật chế độ tạo địa chỉ MAC ngẫu nhiên."</string>
@@ -348,12 +349,14 @@
     <string name="debug_hw_drawing_category" msgid="5830815169336975162">"Kết xuất có tăng tốc phần cứng"</string>
     <string name="media_category" msgid="8122076702526144053">"Phương tiện"</string>
     <string name="debug_monitoring_category" msgid="1597387133765424994">"Giám sát"</string>
-    <string name="strict_mode" msgid="889864762140862437">"Đã bật chế độ nghiêm ngặt"</string>
+    <string name="strict_mode" msgid="889864762140862437">"Luôn bật chế độ nghiêm ngặt"</string>
     <string name="strict_mode_summary" msgid="1838248687233554654">"Màn hình nháy khi ứng dụng thực hiện các hoạt động dài trên luồng chính"</string>
     <string name="pointer_location" msgid="7516929526199520173">"Vị trí con trỏ"</string>
     <string name="pointer_location_summary" msgid="957120116989798464">"Lớp phủ màn hình hiển thị dữ liệu chạm hiện tại"</string>
     <string name="show_touches" msgid="8437666942161289025">"Hiện số lần nhấn"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Hiển thị phản hồi trực quan cho các lần nhấn"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Hiện thao tác nhấn phím"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Hiện phản hồi trực quan cho thao tác nhấn phím vật lý"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Hiện bản cập nhật giao diện"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Chuyển nhanh toàn bộ các giao diện cửa sổ khi các giao diện này cập nhật"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Hiện bản cập nhật chế độ xem"</string>
@@ -365,18 +368,18 @@
     <string name="disable_overlays_summary" msgid="1954852414363338166">"Luôn sử dụng GPU để tổng hợp màn hình"</string>
     <string name="simulate_color_space" msgid="1206503300335835151">"Mô phỏng không gian màu"</string>
     <string name="enable_opengl_traces_title" msgid="4638773318659125196">"Bật theo dõi OpenGL"</string>
-    <string name="usb_audio_disable_routing" msgid="3367656923544254975">"Tắt chế độ định tuyến âm thanh USB"</string>
-    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Tắt chế độ tự động định tuyến tới thiết bị âm thanh ngoại vi USB"</string>
+    <string name="usb_audio_disable_routing" msgid="3367656923544254975">"Tắt chế độ định tuyến âm thanh qua USB"</string>
+    <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"Tắt chế độ tự động định tuyến tới thiết bị âm thanh bên ngoài qua USB"</string>
     <string name="debug_layout" msgid="1659216803043339741">"Hiện ranh giới bố cục"</string>
     <string name="debug_layout_summary" msgid="8825829038287321978">"Hiện viền của đoạn video, lề, v.v.."</string>
-    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Buộc hướng bố cục phải sang trái"</string>
-    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Buộc hướng bố cục màn hình phải sang trái cho tất cả ngôn ngữ"</string>
+    <string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"Buộc dùng hướng bố cục từ phải sang trái"</string>
+    <string name="force_rtl_layout_all_locales_summary" msgid="6663016859517239880">"Buộc hướng bố cục màn hình thành từ phải sang trái cho tất cả ngôn ngữ"</string>
     <string name="transparent_navigation_bar" msgid="1933192171384678484">"Thanh điều hướng trong suốt"</string>
     <string name="transparent_navigation_bar_summary" msgid="5454359021817330722">"Thiết lập màu nền của thanh điều hướng thành trong suốt theo mặc định"</string>
     <string name="window_blurs" msgid="6831008984828425106">"Cho phép làm mờ cửa sổ"</string>
     <string name="force_msaa" msgid="4081288296137775550">"Bắt buộc 4x MSAA"</string>
     <string name="force_msaa_summary" msgid="9070437493586769500">"Bật 4x MSAA trong ứng dụng OpenGL ES 2.0"</string>
-    <string name="show_non_rect_clip" msgid="7499758654867881817">"Gỡ lỗi hoạt động của đoạn không phải hình chữ nhật"</string>
+    <string name="show_non_rect_clip" msgid="7499758654867881817">"Gỡ lỗi của hoạt động cắt không phải hình chữ nhật"</string>
     <string name="track_frame_time" msgid="522674651937771106">"Kết xuất HWUI cấu hình"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Bật lớp gỡ lỗi GPU"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Cho phép tải lớp gỡ lỗi GPU cho ứng dụng gỡ lỗi"</string>
@@ -390,7 +393,7 @@
     <string name="immediately_destroy_activities" msgid="1826287490705167403">"Không lưu hoạt động"</string>
     <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"Xoá mọi hoạt động ngay khi người dùng rời khỏi"</string>
     <string name="app_process_limit_title" msgid="8361367869453043007">"Giới hạn quá trình nền"</string>
-    <string name="show_all_anrs" msgid="9160563836616468726">"Hiển thị ANR nền"</string>
+    <string name="show_all_anrs" msgid="9160563836616468726">"Hiện thông báo ứng dụng không phản hồi cho ứng dụng nền"</string>
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"Hiện hộp thoại Ứng dụng không phản hồi cho các ứng dụng nền"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Hiện cảnh báo kênh thông báo"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Hiện cảnh báo trên màn hình khi ứng dụng đăng thông báo mà không có kênh hợp lệ"</string>
@@ -401,8 +404,8 @@
     <string name="enable_freeform_support" msgid="7599125687603914253">"Bật cửa sổ dạng tự do"</string>
     <string name="enable_freeform_support_summary" msgid="1822862728719276331">"Bật tính năng hỗ trợ cửa sổ dạng tự do thử nghiệm."</string>
     <string name="desktop_mode" msgid="2389067840550544462">"Chế độ máy tính"</string>
-    <string name="local_backup_password_title" msgid="4631017948933578709">"Mật khẩu sao lưu vào máy tính"</string>
-    <string name="local_backup_password_summary_none" msgid="7646898032616361714">"Các bản sao lưu đầy đủ vào máy tính hiện không được bảo vệ"</string>
+    <string name="local_backup_password_title" msgid="4631017948933578709">"Mật khẩu cho bản sao lưu qua máy tính"</string>
+    <string name="local_backup_password_summary_none" msgid="7646898032616361714">"Các bản sao lưu đầy đủ qua máy tính hiện không được bảo vệ"</string>
     <string name="local_backup_password_summary_change" msgid="1707357670383995567">"Nhấn để thay đổi hoặc xóa mật khẩu dành cho các bản sao lưu đầy đủ vào máy tính"</string>
     <string name="local_backup_password_toast_success" msgid="4891666204428091604">"Đã đặt mật khẩu sao lưu mới"</string>
     <string name="local_backup_password_toast_confirmation_mismatch" msgid="2994718182129097733">"Mật khẩu mới và xác nhận không khớp"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Nhiều thời gian hơn."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Ít thời gian hơn."</string>
     <string name="cancel" msgid="5665114069455378395">"Hủy"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Tiếp theo"</string>
+    <string name="back" msgid="5554327870352703710">"Quay lại"</string>
+    <string name="save" msgid="3745809743277153149">"Lưu"</string>
     <string name="okay" msgid="949938843324579502">"OK"</string>
     <string name="done" msgid="381184316122520313">"Xong"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Chuông báo và lời nhắc"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Vừa xong"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Điện thoại này"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Máy tính bảng này"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Loa có gắn đế"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Thiết bị bên ngoài"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Thiết bị đã kết nối"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Điện thoại này"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Không phát được trên thiết bị này"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Nâng cấp tài khoản để chuyển đổi"</string>
@@ -579,12 +582,9 @@
     <string name="user_add_user_title" msgid="5457079143694924885">"Thêm người dùng mới?"</string>
     <string name="user_add_user_message_long" msgid="1527434966294733380">"Bạn có thể chia sẻ thiết bị này với người khác bằng cách tạo thêm người dùng. Mỗi người dùng sẽ có không gian riêng của mình. Họ có thể tùy chỉnh không gian riêng đó bằng các ứng dụng, hình nền, v.v. Người dùng cũng có thể điều chỉnh các tùy chọn cài đặt thiết bị có ảnh hưởng đến tất cả mọi người, chẳng hạn như Wi‑Fi.\n\nKhi bạn thêm người dùng mới, họ cần thiết lập không gian của mình.\n\nMọi người dùng đều có thể cập nhật ứng dụng cho tất cả người dùng khác. Các dịch vụ và các tùy chọn cài đặt hỗ trợ tiếp cận có thể không chuyển sang người dùng mới."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Khi bạn thêm người dùng mới, họ cần thiết lập không gian của mình.\n\nMọi người dùng đều có thể cập nhật ứng dụng cho tất cả người dùng khác."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Đặt người dùng này làm quản trị viên?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Quản trị viên có các đặc quyền mà những người dùng khác không có. Một quản trị viên có thể quản lý toàn bộ người dùng, cập nhật hoặc đặt lại thiết bị này, sửa đổi chế độ cài đặt, xem tất cả các ứng dụng đã cài đặt và cấp hoặc thu hồi đặc quyền của quản trị viên đối với những người khác."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Đặt làm quản trị viên"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Thiết lập người dùng ngay bây giờ?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Đảm bảo người dùng có mặt để tự thiết lập không gian của mình trên thiết bị"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Thiết lập tiểu sử ngay bây giờ?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Có, đặt người này làm quản trị viên"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Không, không đặt người này làm quản trị viên"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Di chuyển lên"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Chưa xác định"</string>
+    <string name="neuter" msgid="2075249330106127310">"Vô tính"</string>
+    <string name="feminine" msgid="1529155595310784757">"Giống cái"</string>
+    <string name="masculine" msgid="4653978041013996303">"Giống đực"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-zh-rCN/arrays.xml b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
index 1eb597a..1ae55e4 100644
--- a/packages/SettingsLib/res/values-zh-rCN/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"音频来源"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index 052840d..0f0b9c4 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -111,12 +111,12 @@
     <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>
+    <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM 卡访问权限"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD 音频:<xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD 音频"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"助听器"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE 音频"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"已连接到助听器"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"助听器"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE 音频"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"已连接到助听器"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"已连接到 LE 音频"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"已连接到媒体音频"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"已连接到手机音频"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"用于手机音频"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"用于文件传输"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"用于输入"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"用于助听器"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"用于助听器"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"用于 LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"配对"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"配对"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"选择个人资料"</string>
     <string name="category_personal" msgid="6236798763159385225">"个人"</string>
     <string name="category_work" msgid="4014193632325996115">"工作"</string>
+    <string name="category_clone" msgid="1554511758987195974">"克隆"</string>
     <string name="development_settings_title" msgid="140296922921597393">"开发者选项"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"启用开发者选项"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"设置应用开发选项"</string>
@@ -253,8 +254,8 @@
     <string name="adb_wireless_qrcode_pairing_description" msgid="6014121407143607851">"扫描二维码即可通过 WLAN 配对设备"</string>
     <string name="adb_wireless_no_network_msg" msgid="2365795244718494658">"请连接到 WLAN 网络"</string>
     <string name="keywords_adb_wireless" msgid="6507505581882171240">"adb, 调试, debug, 开发, dev"</string>
-    <string name="bugreport_in_power" msgid="8664089072534638709">"错误报告快捷方式"</string>
-    <string name="bugreport_in_power_summary" msgid="1885529649381831775">"在电源菜单中显示用于提交错误报告的按钮"</string>
+    <string name="bugreport_in_power" msgid="8664089072534638709">"Bug 报告快捷方式"</string>
+    <string name="bugreport_in_power_summary" msgid="1885529649381831775">"在电源菜单中显示用于提交 bug 报告的按钮"</string>
     <string name="keep_screen_on" msgid="1187161672348797558">"不锁定屏幕"</string>
     <string name="keep_screen_on_summary" msgid="1510731514101925829">"充电时屏幕不会休眠"</string>
     <string name="bt_hci_snoop_log" msgid="7291287955649081448">"启用蓝牙 HCI 信息收集日志"</string>
@@ -292,11 +293,11 @@
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3233402355917446304">"蓝牙音频 LDAC 编解码器:播放质量"</string>
     <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="7274396574659784285">"触发蓝牙音频 LDAC\n编解码器选择:播放质量"</string>
     <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="2040810756832027227">"正在流式传输:<xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string>
-    <string name="select_private_dns_configuration_title" msgid="7887550926056143018">"私人 DNS"</string>
+    <string name="select_private_dns_configuration_title" msgid="7887550926056143018">"专用 DNS"</string>
     <string name="select_private_dns_configuration_dialog_title" msgid="3731422918335951912">"选择私人 DNS 模式"</string>
     <string name="private_dns_mode_off" msgid="7065962499349997041">"已关闭"</string>
     <string name="private_dns_mode_opportunistic" msgid="1947864819060442354">"自动"</string>
-    <string name="private_dns_mode_provider" msgid="3619040641762557028">"私人 DNS 提供商主机名"</string>
+    <string name="private_dns_mode_provider" msgid="3619040641762557028">"专用 DNS 提供商主机名"</string>
     <string name="private_dns_mode_provider_hostname_hint" msgid="6564868953748514595">"输入 DNS 提供商的主机名"</string>
     <string name="private_dns_mode_provider_failure" msgid="8356259467861515108">"无法连接"</string>
     <string name="wifi_display_certification_summary" msgid="8111151348106907513">"显示无线显示认证选项"</string>
@@ -354,12 +355,14 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"屏幕叠加层显示当前触摸数据"</string>
     <string name="show_touches" msgid="8437666942161289025">"显示点按操作反馈"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"显示点按操作的视觉反馈"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"显示按键操作"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"显示实体按键操作的视觉反馈"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"显示面 (surface) 更新"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"窗口中的面 (surface) 更新时全部闪烁"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"显示视图更新"</string>
     <string name="show_hw_screen_updates_summary" msgid="3539770072741435691">"绘图时闪烁显示窗口中的视图"</string>
     <string name="show_hw_layers_updates" msgid="5268370750002509767">"显示硬件层更新"</string>
-    <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"Flash 硬件层在更新时会显示为绿色"</string>
+    <string name="show_hw_layers_updates_summary" msgid="5850955890493054618">"硬件层更新时闪烁绿色"</string>
     <string name="debug_hw_overdraw" msgid="8944851091008756796">"调试 GPU 过度绘制"</string>
     <string name="disable_overlays" msgid="4206590799671557143">"停用 HW 叠加层"</string>
     <string name="disable_overlays_summary" msgid="1954852414363338166">"始终使用 GPU 进行屏幕合成"</string>
@@ -381,14 +384,14 @@
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"启用 GPU 调试层"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"允许为调试应用加载 GPU 调试层"</string>
     <string name="enable_verbose_vendor_logging" msgid="1196698788267682072">"启用详细供应商日志记录"</string>
-    <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"在错误报告中包含其他设备特定的供应商日志,这些日志可能会含有隐私信息、消耗更多电量和/或使用更多存储空间。"</string>
+    <string name="enable_verbose_vendor_logging_summary" msgid="5426292185780393708">"在 bug 报告中包含其他设备特定的供应商日志,这些日志可能会含有隐私信息、消耗更多电量和/或使用更多存储空间。"</string>
     <string name="window_animation_scale_title" msgid="5236381298376812508">"窗口动画缩放"</string>
     <string name="transition_animation_scale_title" msgid="1278477690695439337">"过渡动画缩放"</string>
     <string name="animator_duration_scale_title" msgid="7082913931326085176">"Animator 时长缩放"</string>
     <string name="overlay_display_devices_title" msgid="5411894622334469607">"模拟辅助显示设备"</string>
     <string name="debug_applications_category" msgid="5394089406638954196">"应用"</string>
-    <string name="immediately_destroy_activities" msgid="1826287490705167403">"不保留活动"</string>
-    <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"用户离开后即销毁每个活动"</string>
+    <string name="immediately_destroy_activities" msgid="1826287490705167403">"不保留 activity"</string>
+    <string name="immediately_destroy_activities_summary" msgid="6289590341144557614">"用户离开后即销毁每个 activity"</string>
     <string name="app_process_limit_title" msgid="8361367869453043007">"后台进程限制"</string>
     <string name="show_all_anrs" msgid="9160563836616468726">"显示后台 ANR"</string>
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"为后台应用显示“应用无响应”对话框"</string>
@@ -396,8 +399,8 @@
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"当应用未经有效渠道发布通知时,在屏幕上显示警告"</string>
     <string name="force_allow_on_external" msgid="9187902444231637880">"强制允许将应用写入外部存储设备"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"允许将任何应用写入外部存储设备(无论清单值是什么)"</string>
-    <string name="force_resizable_activities" msgid="7143612144399959606">"强制将 Activity 设为可调整大小"</string>
-    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"将所有 Activity 设为可配合多窗口环境调整大小(忽略清单值)。"</string>
+    <string name="force_resizable_activities" msgid="7143612144399959606">"强制将 activity 设为可调整大小"</string>
+    <string name="force_resizable_activities_summary" msgid="2490382056981583062">"将所有 activity 设为可配合多窗口环境调整大小(无论清单值是什么)。"</string>
     <string name="enable_freeform_support" msgid="7599125687603914253">"启用可自由调整的窗口"</string>
     <string name="enable_freeform_support_summary" msgid="1822862728719276331">"启用可自由调整的窗口这一实验性功能。"</string>
     <string name="desktop_mode" msgid="2389067840550544462">"桌面模式"</string>
@@ -454,7 +457,7 @@
     <string name="power_discharge_by_only_enhanced" msgid="3268796172652988877">"根据您的使用情况,估计能用到<xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_discharge_by" msgid="4113180890060388350">"目前电量为 <xliff:g id="LEVEL">%2$s</xliff:g>,估计能用到<xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_discharge_by_only" msgid="92545648425937000">"估计能用到<xliff:g id="TIME">%1$s</xliff:g>"</string>
-    <string name="power_discharge_by_only_short" msgid="5883041507426914446">"直到<xliff:g id="TIME">%1$s</xliff:g>"</string>
+    <string name="power_discharge_by_only_short" msgid="5883041507426914446">"可以用到 <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_suggestion_battery_run_out" msgid="6332089307827787087">"电池电量可能在<xliff:g id="TIME">%1$s</xliff:g> 前耗尽"</string>
     <string name="power_remaining_less_than_duration_only" msgid="8956656616031395152">"剩余电池续航时间不到 <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
     <string name="power_remaining_less_than_duration" msgid="318215464914990578">"剩余电池续航时间不到 <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
@@ -544,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"刚刚"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"这部手机"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"这台平板电脑"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"基座音箱"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"外部设备"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"连接的设备"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"这部手机"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"无法在此设备上播放"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"升级帐号后才能切换"</string>
@@ -613,15 +619,15 @@
     <string name="grant_admin" msgid="4323199171790522574">"是,将其设为管理员"</string>
     <string name="not_grant_admin" msgid="3557849576157702485">"不,不要将其设为管理员"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"退出"</string>
-    <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"要保存访客活动记录吗?"</string>
-    <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"您可以保存当前会话中的活动记录,也可以删除所有应用和数据"</string>
+    <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_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>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"上移"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"未指定"</string>
+    <string name="neuter" msgid="2075249330106127310">"中性"</string>
+    <string name="feminine" msgid="1529155595310784757">"阴性"</string>
+    <string name="masculine" msgid="4653978041013996303">"阳性"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-zh-rHK/arrays.xml b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
index e14f719..1370263 100644
--- a/packages/SettingsLib/res/values-zh-rHK/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"音效檔案來源"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index 3ef92cf..57718d8 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM 卡存取"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"高清音訊:<xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"高清音訊"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"助聽器"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE Audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"已連接助聽器"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"助聽器"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"已連接助聽器"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"已連接 LE Audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"已連接媒體音頻裝置"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"已連接手機耳機"</string>
@@ -134,12 +134,12 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"用於手機音效"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"用於傳輸檔案"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"用於輸入"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"用於助聽器"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"用於助聽器"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"用於 LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"配對"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"配對"</string>
     <string name="bluetooth_pairing_decline" msgid="6483118841204885890">"取消"</string>
-    <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"一旦配對成功,即可存取您的通訊錄和通話記錄。"</string>
+    <string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"一旦配對成功,即可存取你的通訊錄和通話記錄。"</string>
     <string name="bluetooth_pairing_error_message" msgid="6626399020672335565">"無法與 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 配對。"</string>
     <string name="bluetooth_pairing_pin_error_message" msgid="264422127613704940">"無法與 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 配對,因為 PIN 碼或密鑰不正確。"</string>
     <string name="bluetooth_pairing_device_down_error_message" msgid="2554424863101358857">"無法與 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 通訊。"</string>
@@ -187,8 +187,8 @@
     <string name="tts_play_example_summary" msgid="634044730710636383">"播放簡短的語音合成例子"</string>
     <string name="tts_install_data_title" msgid="1829942496472751703">"安裝語音資料"</string>
     <string name="tts_install_data_summary" msgid="3608874324992243851">"安裝語音合成所需的語音資料"</string>
-    <string name="tts_engine_security_warning" msgid="3372432853837988146">"這個語音合成引擎可能會收集您輸入的所有語音,包括密碼和信用卡號等個人資料。這個引擎來自「<xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>」引擎,是否要使用這個語音合成引擎?"</string>
-    <string name="tts_engine_network_required" msgid="8722087649733906851">"您需要操作正常的網絡連線,才能使用文字轉語音功能輸出這種語言。"</string>
+    <string name="tts_engine_security_warning" msgid="3372432853837988146">"這個語音合成引擎可能會收集你輸入的所有語音,包括密碼和信用卡號等個人資料。這個引擎來自「<xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>」引擎,是否要使用這個語音合成引擎?"</string>
+    <string name="tts_engine_network_required" msgid="8722087649733906851">"你需要操作正常的網絡連線,才能使用文字轉語音功能輸出這種語言。"</string>
     <string name="tts_default_sample_string" msgid="6388016028292967973">"這是語音合成例子"</string>
     <string name="tts_status_title" msgid="8190784181389278640">"預設語言狀態"</string>
     <string name="tts_status_ok" msgid="8583076006537547379">"全面支援<xliff:g id="LOCALE">%1$s</xliff:g>"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"選擇設定檔"</string>
     <string name="category_personal" msgid="6236798763159385225">"個人"</string>
     <string name="category_work" msgid="4014193632325996115">"工作"</string>
+    <string name="category_clone" msgid="1554511758987195974">"複製"</string>
     <string name="development_settings_title" msgid="140296922921597393">"開發人員選項"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"啟用開發人員選項"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"設定應用程式開發選項"</string>
@@ -308,7 +309,7 @@
     <string name="select_logd_size_title" msgid="1604578195914595173">"記錄器緩衝區空間"</string>
     <string name="select_logd_size_dialog_title" msgid="2105401994681013578">"選取每個記錄緩衝區的記錄器空間"</string>
     <string name="dev_logpersist_clear_warning_title" msgid="8631859265777337991">"要清除記錄器的持久儲存空間嗎?"</string>
-    <string name="dev_logpersist_clear_warning_message" msgid="6447590867594287413">"當我們不再使用持久記錄器進行監察,便需要清除您裝置上的記錄器資料。"</string>
+    <string name="dev_logpersist_clear_warning_message" msgid="6447590867594287413">"當我們不再使用持久記錄器進行監察,便需要清除你裝置上的記錄器資料。"</string>
     <string name="select_logpersist_title" msgid="447071974007104196">"在裝置持久儲存記錄器資料"</string>
     <string name="select_logpersist_dialog_title" msgid="7745193591195485594">"選擇記錄緩衝區,以便將資料持久儲存在裝置中"</string>
     <string name="select_usb_configuration_title" msgid="6339801314922294586">"選取 USB 設定"</string>
@@ -319,12 +320,12 @@
     <string name="mobile_data_always_on_summary" msgid="1112156365594371019">"即使 Wi‑Fi 已啟用,仍永遠啟用流動數據 (可快速切換網絡)。"</string>
     <string name="tethering_hardware_offload_summary" msgid="7801345335142803029">"使用網絡共享硬件加速功能 (如果可用)"</string>
     <string name="adb_warning_title" msgid="7708653449506485728">"允許 USB 偵錯嗎?"</string>
-    <string name="adb_warning_message" msgid="8145270656419669221">"USB 偵錯是針對應用程式開發而設計的功能,可讓您在電腦與裝置間複製資料、不用通知即可在裝置上安裝應用程式,以及讀取記錄資料。"</string>
+    <string name="adb_warning_message" msgid="8145270656419669221">"USB 偵錯是針對應用程式開發而設計的功能,可讓你在電腦與裝置間複製資料、不用通知即可在裝置上安裝應用程式,以及讀取記錄資料。"</string>
     <string name="adbwifi_warning_title" msgid="727104571653031865">"要啟用無線偵錯嗎?"</string>
-    <string name="adbwifi_warning_message" msgid="8005936574322702388">"無線偵錯僅適用於開發用途,可讓您在電腦和裝置之間複製資料、為裝置安裝應用程式而不提出通知,以及讀取記錄資料。"</string>
+    <string name="adbwifi_warning_message" msgid="8005936574322702388">"無線偵錯僅適用於開發用途,可讓你在電腦和裝置之間複製資料、為裝置安裝應用程式而不提出通知,以及讀取記錄資料。"</string>
     <string name="adb_keys_warning_message" msgid="2968555274488101220">"要針對先前授權的所有電腦撤銷 USB 偵錯存取權嗎?"</string>
     <string name="dev_settings_warning_title" msgid="8251234890169074553">"允許開發設定?"</string>
-    <string name="dev_settings_warning_message" msgid="37741686486073668">"這些設定僅供開發用途,可能會導致您的裝置及應用程式損毀或運作不正常。"</string>
+    <string name="dev_settings_warning_message" msgid="37741686486073668">"這些設定僅供開發用途,可能會導致你的裝置及應用程式損毀或運作不正常。"</string>
     <string name="verify_apps_over_usb_title" msgid="6031809675604442636">"透過 USB 驗證應用程式"</string>
     <string name="verify_apps_over_usb_summary" msgid="1317933737581167839">"透過 ADB/ADT 檢查安裝的應用程式有否有害的行為。"</string>
     <string name="bluetooth_show_devices_without_names_summary" msgid="780964354377854507">"系統將顯示沒有名稱 (只有 MAC 位址) 的藍牙裝置"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"在螢幕上重疊顯示目前的觸控資料"</string>
     <string name="show_touches" msgid="8437666942161289025">"顯示輕按回應"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"顯示輕按位置的視覺回應"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"顯示按鍵操作"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"顯示實際按鍵操作的視覺回應"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"顯示表層更新"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"更新表層時閃動整個視窗表層"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"顯示畫面更新"</string>
@@ -441,17 +444,17 @@
     <string name="daltonizer_mode_protanomaly" msgid="7805583306666608440">"紅色弱視 (紅綠)"</string>
     <string name="daltonizer_mode_tritanomaly" msgid="7135266249220732267">"藍色弱視 (藍黃)"</string>
     <string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"色彩校正"</string>
-    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="1522101114585266455">"「色彩校正」功能適用於以下情況::&lt;br/&gt; &lt;ol&gt; &lt;li&gt;&amp;nbsp;您想讓裝置顯示更準確的色彩&lt;/li&gt; &lt;li&gt;&amp;nbsp;您想移除色彩以提高專注力&lt;/li&gt; &lt;/ol&gt;"</string>
+    <string name="accessibility_display_daltonizer_preference_subtitle" msgid="1522101114585266455">"「色彩校正」功能適用於以下情況::&lt;br/&gt; &lt;ol&gt; &lt;li&gt;&amp;nbsp;你想讓裝置顯示更準確的色彩&lt;/li&gt; &lt;li&gt;&amp;nbsp;你想移除色彩以提高專注力&lt;/li&gt; &lt;/ol&gt;"</string>
     <string name="daltonizer_type_overridden" msgid="4509604753672535721">"已由「<xliff:g id="TITLE">%1$s</xliff:g>」覆寫"</string>
     <string name="power_remaining_settings_home_page" msgid="4885165789445462557">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> - <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string>
     <string name="power_remaining_duration_only" msgid="8264199158671531431">"還有大約 <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
     <string name="power_discharging_duration" msgid="1076561255466053220">"還有大約 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
-    <string name="power_remaining_duration_only_enhanced" msgid="2527842780666073218">"根據您的使用情況,還有大約 <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
-    <string name="power_discharging_duration_enhanced" msgid="1800465736237672323">"根據您的使用情況,還有大約 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
+    <string name="power_remaining_duration_only_enhanced" msgid="2527842780666073218">"根據你的使用情況,還有大約 <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
+    <string name="power_discharging_duration_enhanced" msgid="1800465736237672323">"根據你的使用情況,還有大約 <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <!-- no translation found for power_remaining_duration_only_short (7438846066602840588) -->
     <skip />
-    <string name="power_discharge_by_enhanced" msgid="563438403581662942">"根據您的使用情況 (<xliff:g id="LEVEL">%2$s</xliff:g>),電量剩餘約 <xliff:g id="TIME">%1$s</xliff:g>"</string>
-    <string name="power_discharge_by_only_enhanced" msgid="3268796172652988877">"根據您的使用情況,電量剩餘約 <xliff:g id="TIME">%1$s</xliff:g>"</string>
+    <string name="power_discharge_by_enhanced" msgid="563438403581662942">"根據你的使用情況 (<xliff:g id="LEVEL">%2$s</xliff:g>),電量剩餘約 <xliff:g id="TIME">%1$s</xliff:g>"</string>
+    <string name="power_discharge_by_only_enhanced" msgid="3268796172652988877">"根據你的使用情況,電量剩餘約 <xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_discharge_by" msgid="4113180890060388350">"電量剩餘約 <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
     <string name="power_discharge_by_only" msgid="92545648425937000">"電量大約可用到<xliff:g id="TIME">%1$s</xliff:g>"</string>
     <string name="power_discharge_by_only_short" msgid="5883041507426914446">"還可用到<xliff:g id="TIME">%1$s</xliff:g>"</string>
@@ -508,8 +511,8 @@
     <string name="active_input_method_subtypes" msgid="4232680535471633046">"可用的輸入法"</string>
     <string name="use_system_language_to_select_input_method_subtypes" msgid="4865195835541387040">"使用系統語言"</string>
     <string name="failed_to_open_app_settings_toast" msgid="764897252657692092">"無法開啟 <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g> 的設定"</string>
-    <string name="ime_security_warning" msgid="6547562217880551450">"這個輸入法可能會收集您輸入的所有文字,包括密碼和信用卡號碼等個人資料。這個輸入法由 <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g> 應用程式提供,您要使用嗎?"</string>
-    <string name="direct_boot_unaware_dialog_message" msgid="7845398276735021548">"注意:重新啟動後,您必須解鎖手機,才可開始使用此應用程式"</string>
+    <string name="ime_security_warning" msgid="6547562217880551450">"這個輸入法可能會收集你輸入的所有文字,包括密碼和信用卡號碼等個人資料。這個輸入法由 <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g> 應用程式提供,你要使用嗎?"</string>
+    <string name="direct_boot_unaware_dialog_message" msgid="7845398276735021548">"注意:重新啟動後,你必須解鎖手機,才可開始使用此應用程式"</string>
     <string name="ims_reg_title" msgid="8197592958123671062">"IMS 註冊狀態"</string>
     <string name="ims_reg_status_registered" msgid="884916398194885457">"已註冊"</string>
     <string name="ims_reg_status_not_registered" msgid="2989287366045704694">"未註冊"</string>
@@ -534,22 +537,25 @@
     <string name="zen_mode_settings_summary_off" msgid="3832876036123504076">"永不"</string>
     <string name="zen_interruption_level_priority" msgid="5392140786447823299">"只限優先"</string>
     <string name="zen_mode_and_condition" msgid="8877086090066332516">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>。<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
-    <string name="zen_alarm_warning_indef" msgid="4146527909616457163">"除非您預先關閉此功能,否則您不會聽到下一個<xliff:g id="WHEN">%1$s</xliff:g>的鬧鐘響鬧"</string>
-    <string name="zen_alarm_warning" msgid="245729928048586280">"您不會聽到下一個<xliff:g id="WHEN">%1$s</xliff:g>的鬧鐘響鬧"</string>
+    <string name="zen_alarm_warning_indef" msgid="4146527909616457163">"除非你預先關閉此功能,否則你不會聽到下一個<xliff:g id="WHEN">%1$s</xliff:g>的鬧鐘響鬧"</string>
+    <string name="zen_alarm_warning" msgid="245729928048586280">"你不會聽到下一個<xliff:g id="WHEN">%1$s</xliff:g>的鬧鐘響鬧"</string>
     <string name="alarm_template" msgid="3346777418136233330">"時間:<xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="alarm_template_far" msgid="6382760514842998629">"時間:<xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="zen_mode_duration_settings_title" msgid="1553451650289651489">"持續時間"</string>
     <string name="zen_mode_duration_always_prompt_title" msgid="3212996860498119555">"每次都詢問"</string>
-    <string name="zen_mode_forever" msgid="3339224497605461291">"直至您關閉為止"</string>
+    <string name="zen_mode_forever" msgid="3339224497605461291">"直至你關閉為止"</string>
     <string name="time_unit_just_now" msgid="3006134267292728099">"剛剛"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"此手機"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"此平板電腦"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"插座喇叭"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"外部裝置"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"已連接的裝置"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"這部手機"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"無法在此裝置上播放"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"請升級要切換的帳戶"</string>
     <string name="media_output_status_not_support_downloads" msgid="4523828729240373315">"無法在此播放下載內容"</string>
     <string name="media_output_status_try_after_ad" msgid="8312579066856015441">"請在廣告結束後再試一次"</string>
-    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"喚醒裝置即可在此播放"</string>
+    <string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"必須喚醒裝置才能在此播放"</string>
     <string name="media_output_status_unauthorized" msgid="5880222828273853838">"裝置未獲核准播放"</string>
     <string name="media_output_status_track_unsupported" msgid="5576313219317709664">"無法在此播放此媒體內容"</string>
     <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"無法連接,請關閉裝置然後重新開機"</string>
@@ -570,15 +576,15 @@
     <string name="delete_blob_text" msgid="2819192607255625697">"刪除共用資料"</string>
     <string name="delete_blob_confirmation_text" msgid="7807446938920827280">"確定要刪除此共用資料嗎?"</string>
     <string name="user_add_user_item_summary" msgid="5748424612724703400">"使用者擁有自己的應用程式和內容"</string>
-    <string name="user_add_profile_item_summary" msgid="5418602404308968028">"您可以限制透過您的帳戶存取應用程式和內容"</string>
+    <string name="user_add_profile_item_summary" msgid="5418602404308968028">"你可以限制透過你的帳戶存取應用程式和內容"</string>
     <string name="user_add_user_item_title" msgid="2394272381086965029">"使用者"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"限制存取的個人檔案"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"新增使用者?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"您可以建立其他使用者,與他人共用這部裝置。每位使用者都有屬於自己的空間,並可以自訂應用程式、桌布等等。此外,使用者也可以調整會影響所有人的裝置設定,例如 Wi‑Fi 設定。\n\n新加入的使用者需要自行設定個人空間。\n\n任何使用者都可以為所有其他使用者更新應用程式。無障礙功能設定和服務則未必適用於新的使用者。"</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"你可以建立其他使用者,與他人共用這部裝置。每位使用者都有屬於自己的空間,並可以自訂應用程式、桌布等等。此外,使用者也可以調整會影響所有人的裝置設定,例如 Wi‑Fi 設定。\n\n新加入的使用者需要自行設定個人空間。\n\n任何使用者都可以為所有其他使用者更新應用程式。無障礙功能設定和服務則未必適用於新的使用者。"</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"新增的使用者需要自行設定個人空間。\n\n任何使用者都可以為其他所有使用者更新應用程式。"</string>
-    <string name="user_grant_admin_title" msgid="5157031020083343984">"要將這位使用者設為管理員嗎?"</string>
-    <string name="user_grant_admin_message" msgid="1673791931033486709">"管理員具備其他使用者沒有的權限,例如可管理所有使用者、更新或重設這部裝置、修改設定、查看所有已安裝的應用程式,以及將管理員權限授予他人,或撤銷他人的管理員權限。"</string>
-    <string name="user_grant_admin_button" msgid="5441486731331725756">"設為管理員"</string>
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"要指定此使用者為管理員嗎?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"管理員擁有其他使用者沒有的特殊權限。管理員可管理所有使用者、更新或重設此裝置、修改設定、查看所有已安裝的應用程式,以及對其他使用者授予或撤銷管理員權限。"</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"指定為管理員"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"立即設定使用者?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"請確保對方現在可以在裝置上設定自己的空間"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"立即設定個人檔案?"</string>
@@ -589,7 +595,7 @@
     <string name="user_new_profile_name" msgid="2405500423304678841">"新個人檔案"</string>
     <string name="user_info_settings_title" msgid="6351390762733279907">"使用者資料"</string>
     <string name="profile_info_settings_title" msgid="105699672534365099">"個人檔案資料"</string>
-    <string name="user_need_lock_message" msgid="4311424336209509301">"建立限制存取的個人檔案前,您必須先設定上鎖畫面來保護您的應用程式和個人資料。"</string>
+    <string name="user_need_lock_message" msgid="4311424336209509301">"建立限制存取的個人檔案前,你必須先設定上鎖畫面來保護你的應用程式和個人資料。"</string>
     <string name="user_set_lock_button" msgid="1427128184982594856">"設定上鎖畫面"</string>
     <string name="user_switch_to_user" msgid="6975428297154968543">"切換至<xliff:g id="USER_NAME">%s</xliff:g>"</string>
     <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"正在建立新使用者…"</string>
@@ -610,19 +616,19 @@
     <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"此操作會開始新的訪客工作階段,並刪除目前工作階段的所有應用程式和資料"</string>
     <string name="guest_exit_dialog_title" msgid="1846494656849381804">"要結束訪客模式嗎?"</string>
     <string name="guest_exit_dialog_message" msgid="1743218864242719783">"此操作會刪除目前訪客工作階段中的所有應用程式和資料"</string>
-    <string name="grant_admin" msgid="4323199171790522574">"是,將這位使用者設為管理員"</string>
-    <string name="not_grant_admin" msgid="3557849576157702485">"否,不要將這位使用者設為管理員"</string>
+    <string name="grant_admin" msgid="4323199171790522574">"是,指定他為管理員"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"否,不要指定他為管理員"</string>
     <string name="guest_exit_dialog_button" msgid="1736401897067442044">"結束"</string>
     <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"要儲存訪客活動嗎?"</string>
-    <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"您可儲存目前工作階段中的活動或刪除所有應用程式和資料"</string>
+    <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="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>
@@ -633,7 +639,7 @@
     <string name="cached_apps_freezer_device_default" msgid="2616594131750144342">"裝置預設設定"</string>
     <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"已停用"</string>
     <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"已啟用"</string>
-    <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"您的裝置必須重新開機,才能套用此變更。請立即重新開機或取消。"</string>
+    <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"你的裝置必須重新開機,才能套用此變更。請立即重新開機或取消。"</string>
     <string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"有線耳機"</string>
     <string name="wifi_hotspot_switch_on_text" msgid="9212273118217786155">"開啟"</string>
     <string name="wifi_hotspot_switch_off_text" msgid="7245567251496959764">"關閉"</string>
@@ -671,7 +677,7 @@
     <string name="keyboard_layout_default_label" msgid="1997292217218546957">"預設"</string>
     <string name="turn_screen_on_title" msgid="3266937298097573424">"開啟螢幕"</string>
     <string name="allow_turn_screen_on" msgid="6194845766392742639">"允許開啟螢幕"</string>
-    <string name="allow_turn_screen_on_description" msgid="43834403291575164">"允許應用程式開啟螢幕。應用程式獲授權後,可在您未有明確表明意圖的情況下隨時開啟螢幕。"</string>
+    <string name="allow_turn_screen_on_description" msgid="43834403291575164">"允許應用程式開啟螢幕。應用程式獲授權後,可在你未有明確表明意圖的情況下隨時開啟螢幕。"</string>
     <string name="bt_le_audio_broadcast_dialog_title" msgid="5392738488989777074">"要停止廣播「<xliff:g id="APP_NAME">%1$s</xliff:g>」的內容嗎?"</string>
     <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="268234802198852753">"如要廣播「<xliff:g id="SWITCHAPP">%1$s</xliff:g>」的內容或變更輸出來源,系統就會停止廣播目前的內容"</string>
     <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="5749813313369517812">"廣播「<xliff:g id="SWITCHAPP">%1$s</xliff:g>」的內容"</string>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"向上移"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"未指定"</string>
+    <string name="neuter" msgid="2075249330106127310">"中性"</string>
+    <string name="feminine" msgid="1529155595310784757">"女性"</string>
+    <string name="masculine" msgid="4653978041013996303">"男性"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-zh-rTW/arrays.xml b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
index 16890be..bbddf61 100644
--- a/packages/SettingsLib/res/values-zh-rTW/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"音訊來源"</item>
     <item msgid="8688681727755534982">"MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index 168a8b7..18317da 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM 卡存取權"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"HD 高解析音訊:<xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"HD 高解析音訊"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"助聽器"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"LE audio"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"已連接到助聽器"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"助聽器"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"LE Audio"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"已連上助聽器"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"已連上 LE audio"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"連接至媒體音訊"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"連接至電話音訊"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"用於電話音訊"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"用於傳輸檔案"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"用於輸入"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"用於助聽器"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"用於助聽器"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"用於 LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"配對"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"配對"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"選擇設定檔"</string>
     <string name="category_personal" msgid="6236798763159385225">"個人"</string>
     <string name="category_work" msgid="4014193632325996115">"工作"</string>
+    <string name="category_clone" msgid="1554511758987195974">"複製"</string>
     <string name="development_settings_title" msgid="140296922921597393">"開發人員選項"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"啟用開發人員選項"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"設定應用程式開發選項"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"在螢幕圖層上顯示目前的觸控資料"</string>
     <string name="show_touches" msgid="8437666942161289025">"顯示觸控回應"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"顯示觸控位置的視覺回應"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"顯示按鍵操作"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"顯示實際按鍵操作的視覺回饋"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"顯示表層更新"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"更新表層時閃爍顯示整個視窗表層"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"顯示畫面更新"</string>
@@ -544,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"剛剛"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"這支手機"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"這台平板電腦"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"座架喇叭"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"外部裝置"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"已連結的裝置"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"這支手機"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"無法在這部裝置上播放"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"請升級要切換的帳戶"</string>
@@ -686,4 +692,8 @@
     <item msgid="324200556467459329">"向上移"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"未指定"</string>
+    <string name="neuter" msgid="2075249330106127310">"中性"</string>
+    <string name="feminine" msgid="1529155595310784757">"陰性"</string>
+    <string name="masculine" msgid="4653978041013996303">"陽性"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values-zu/arrays.xml b/packages/SettingsLib/res/values-zu/arrays.xml
index d20c7db..c202896 100644
--- a/packages/SettingsLib/res/values-zu/arrays.xml
+++ b/packages/SettingsLib/res/values-zu/arrays.xml
@@ -282,6 +282,10 @@
     <item msgid="8828567335701536560">"Umthombo Womsindo"</item>
     <item msgid="8688681727755534982">"I-MIDI"</item>
   </string-array>
-  <string-array name="avatar_image_descriptions">
+  <string-array name="grammatical_gender_values">
+    <item msgid="4976102487934077239">"0"</item>
+    <item msgid="2646486108212979598">"1"</item>
+    <item msgid="3753634915787796632">"2"</item>
+    <item msgid="4779928470672877922">"3"</item>
   </string-array>
 </resources>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index 18d19dd..edf5f3c 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -114,9 +114,9 @@
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Ukufinyelela kwe-SIM"</string>
     <string name="bluetooth_profile_a2dp_high_quality" msgid="4739440941324792775">"Umsindo we-HD: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string>
     <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"Umsindo we-HD"</string>
-    <string name="bluetooth_profile_hearing_aid" msgid="58154575573984914">"Izinsiza zokuzwa"</string>
-    <string name="bluetooth_profile_le_audio" msgid="3237854988278539061">"Umsindo we-LE"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="8191273236809964030">"Kuxhumeke kwizinsiza zokuzwa"</string>
+    <string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"Imishini yendlebe"</string>
+    <string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"Umsindo we-LE"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"Kuxhume emishinini yendlebe"</string>
     <string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"Kuxhunywe kumsindo we-LE"</string>
     <string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"Ixhume emsindweni wemidiya"</string>
     <string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"Ixhunywe kumsindo wefoni"</string>
@@ -134,7 +134,7 @@
     <string name="bluetooth_headset_profile_summary_use_for" msgid="808970643123744170">"Sebenziselwa umsindo wefoni"</string>
     <string name="bluetooth_opp_profile_summary_use_for" msgid="461981154387015457">"Sebenziselwa ukudlulisa ifayela"</string>
     <string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"Isetshenziselwa okufakwayo"</string>
-    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="7689393730163320483">"Sebenzisa izinsiza zokuzwa"</string>
+    <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"Sebenzisa imishini yendlebe"</string>
     <string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"Sebenzisela i-LE_AUDIO"</string>
     <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"Bhangqa"</string>
     <string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"BHANGQA"</string>
@@ -215,6 +215,7 @@
     <string name="choose_profile" msgid="343803890897657450">"Khetha iphrofayela"</string>
     <string name="category_personal" msgid="6236798763159385225">"Okomuntu siqu"</string>
     <string name="category_work" msgid="4014193632325996115">"Umsebenzi"</string>
+    <string name="category_clone" msgid="1554511758987195974">"Yenza i-clone"</string>
     <string name="development_settings_title" msgid="140296922921597393">"Izinketho Zonjiniyela"</string>
     <string name="development_settings_enable" msgid="4285094651288242183">"Nika amandla izinketho zonjiniyela"</string>
     <string name="development_settings_summary" msgid="8718917813868735095">"Setha okukhethwayo kwentuthuko yohlelo lokusebenza"</string>
@@ -336,7 +337,7 @@
     <string name="hdcp_checking_title" msgid="3155692785074095986">"Ihlola i-HDCP"</string>
     <string name="hdcp_checking_dialog_title" msgid="7691060297616217781">"Hlela ukuhlola ukuziphatha kwe-HDCP"</string>
     <string name="debug_debugging_category" msgid="535341063709248842">"Ilungisa inkinga"</string>
-    <string name="debug_app" msgid="8903350241392391766">"Khetha uhlelo lokusebenza lokulungisa inkinga"</string>
+    <string name="debug_app" msgid="8903350241392391766">"Khetha i-app yokulungisa inkinga"</string>
     <string name="debug_app_not_set" msgid="1934083001283807188">"Alukho uhlelo lokusebenza lokulungisa inkinga olusethiwe"</string>
     <string name="debug_app_set" msgid="6599535090477753651">"Uhlelo lokusebenza lokulungisa inkinga: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="select_application" msgid="2543228890535466325">"Khetha uhlelo lokusebenza"</string>
@@ -354,6 +355,8 @@
     <string name="pointer_location_summary" msgid="957120116989798464">"Imbondela yesikrini ibonisa idatha yokuthinta yamanje"</string>
     <string name="show_touches" msgid="8437666942161289025">"Bonisa amathebhu"</string>
     <string name="show_touches_summary" msgid="3692861665994502193">"Bonisa izmpendulo ebukekayo ngamathebhu"</string>
+    <string name="show_key_presses" msgid="6360141722735900214">"Bonisa ukucindezela ukhiye"</string>
+    <string name="show_key_presses_summary" msgid="725387457373015024">"Bonisa impendulo ebonakalayo yokucindezela ukhiye obonakalayo"</string>
     <string name="show_screen_updates" msgid="2078782895825535494">"Buka izibuyekezo ezibonakalayo"</string>
     <string name="show_screen_updates_summary" msgid="2126932969682087406">"Khanyisa ukubonakala kwalo lonke iwindi uma libuyekezwa"</string>
     <string name="show_hw_screen_updates" msgid="2021286231267747506">"Bonisa izibuyekezo zokubuka"</string>
@@ -376,7 +379,7 @@
     <string name="window_blurs" msgid="6831008984828425106">"Vumela ukufiphala kweleveli yewindi"</string>
     <string name="force_msaa" msgid="4081288296137775550">"Phoqelela i-4x MSAA"</string>
     <string name="force_msaa_summary" msgid="9070437493586769500">"Nika amandla i-4x MSAA ezinhlelweni zokusebenza ze-OpenGL ES 2.0"</string>
-    <string name="show_non_rect_clip" msgid="7499758654867881817">"Susa iphutha ekusebenzeniokungekhona unxantathu kwesiqeshana"</string>
+    <string name="show_non_rect_clip" msgid="7499758654867881817">"Susa iphutha ekusebenzeni okungekhona unxantathu kwesiqeshana"</string>
     <string name="track_frame_time" msgid="522674651937771106">"Inikezela iphrofayela ye-HWUI"</string>
     <string name="enable_gpu_debug_layers" msgid="4986675516188740397">"Nika amandla izendlalelo zokususa amaphutha ze-GPU"</string>
     <string name="enable_gpu_debug_layers_summary" msgid="4921521407377170481">"Vumela izendlalelo zokususa amaphutha ze-GPU ngezinhlelo zokusebenza zokususa amaphutha"</string>
@@ -394,7 +397,7 @@
     <string name="show_all_anrs_summary" msgid="8562788834431971392">"Uhlelo lokusebenza lwesibonisi aluphenduli kungxoxo yezinhlelo zokusebenza zangemuva"</string>
     <string name="show_notification_channel_warnings" msgid="3448282400127597331">"Bonisa izexwayiso zesiteshi sesaziso"</string>
     <string name="show_notification_channel_warnings_summary" msgid="68031143745094339">"Ibonisa isexwayiso esikusikrini uma uhlelo lokusebenza luthumela isaziso ngaphandle kwesiteshi esivumelekile"</string>
-    <string name="force_allow_on_external" msgid="9187902444231637880">"Phoqelela ukuvumela izinhlelo zokusebenza ngaphandle"</string>
+    <string name="force_allow_on_external" msgid="9187902444231637880">"Phoqelela ukuvumela ama-app kokwangaphandle"</string>
     <string name="force_allow_on_external_summary" msgid="8525425782530728238">"Yenza noma uluphi uhlelo lokusebenza lifaneleke ukuthi libhalwe kusitoreji sangaphandle, ngaphandle kwamavelu we-manifest"</string>
     <string name="force_resizable_activities" msgid="7143612144399959606">"Imisebenzi yamandla izonikezwa usayizi omusha"</string>
     <string name="force_resizable_activities_summary" msgid="2490382056981583062">"Yenza yonke imisebenzi ibe nosayizi abasha kumawindi amaningi, ngokunganaki amavelu e-manifest."</string>
@@ -418,7 +421,7 @@
     <item msgid="4548987861791236754">"Imibala yemvelo njengoba ibonwa yilihlo"</item>
     <item msgid="1282170165150762976">"Imibala elungiselelwe yokuqukethwe kwedijithali"</item>
   </string-array>
-    <string name="inactive_apps_title" msgid="5372523625297212320">"Izinhlelo zokusebenza zokulinda"</string>
+    <string name="inactive_apps_title" msgid="5372523625297212320">"Ama-apps alindile"</string>
     <string name="inactive_app_inactive_summary" msgid="3161222402614236260">"Akusebenzi. Thepha ukuze ushintshe."</string>
     <string name="inactive_app_active_summary" msgid="8047630990208722344">"Kuyasebenza. Thepha ukuze ushintshe."</string>
     <string name="standby_bucket_summary" msgid="5128193447550429600">"Isimo sokulinda kohlelo lokusebenza:<xliff:g id="BUCKET"> %s</xliff:g>"</string>
@@ -519,12 +522,9 @@
     <string name="accessibility_manual_zen_more_time" msgid="5141801092071134235">"Isikhathi esiningi."</string>
     <string name="accessibility_manual_zen_less_time" msgid="6828877595848229965">"Isikhathi esincane."</string>
     <string name="cancel" msgid="5665114069455378395">"Khansela"</string>
-    <!-- no translation found for next (2699398661093607009) -->
-    <skip />
-    <!-- no translation found for back (5554327870352703710) -->
-    <skip />
-    <!-- no translation found for save (3745809743277153149) -->
-    <skip />
+    <string name="next" msgid="2699398661093607009">"Okulandelayo"</string>
+    <string name="back" msgid="5554327870352703710">"Emuva"</string>
+    <string name="save" msgid="3745809743277153149">"Londoloza"</string>
     <string name="okay" msgid="949938843324579502">"KULUNGILE"</string>
     <string name="done" msgid="381184316122520313">"Kwenziwe"</string>
     <string name="alarms_and_reminders_label" msgid="6918395649731424294">"Ama-alamu nezikhumbuzi"</string>
@@ -547,6 +547,9 @@
     <string name="time_unit_just_now" msgid="3006134267292728099">"Khona manje"</string>
     <string name="media_transfer_this_device_name" product="default" msgid="2357329267148436433">"Le foni"</string>
     <string name="media_transfer_this_device_name" product="tablet" msgid="3714653244000242800">"Le thebulethi"</string>
+    <string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"Isipikha sentuba"</string>
+    <string name="media_transfer_external_device_name" msgid="2588672258721846418">"Idivayisi Yangaphandle"</string>
+    <string name="media_transfer_default_device_name" msgid="4315604017399871828">"Idivayisi exhunyiwe"</string>
     <string name="media_transfer_this_phone" msgid="7194341457812151531">"Le foni"</string>
     <string name="media_output_status_unknown_error" msgid="5098565887497902222">"Ayikwazi ukudlala kule divayisi"</string>
     <string name="media_output_status_require_premium" msgid="8411255800047014822">"Thuthukisa i-akhawunti ukuze ushintshe"</string>
@@ -577,14 +580,11 @@
     <string name="user_add_user_item_title" msgid="2394272381086965029">"Umsebenzisi"</string>
     <string name="user_add_profile_item_title" msgid="3111051717414643029">"Iphrofayela evinjelwe"</string>
     <string name="user_add_user_title" msgid="5457079143694924885">"Engeza umsebenzisi omusha?"</string>
-    <string name="user_add_user_message_long" msgid="1527434966294733380">"Manje ungabelana ngale divayisi nabanye abantu ngokudala abasebenzisi abangeziwe. Umsebenzisi ngamunye unesikhala sakhe, angakwazi ukusenza ngendlela ayifisayo ngezinhlelo zokusebenza, isithombe sangemuva, njalo njalo. Abasebenzisi bangalungisa izilungiselelo zedivayisi ezifana ne-Wi-Fi ezithinta wonke umuntu.\n\nUma ungeza umsebenzisi omusha, loyo muntu kumele asethe isikhala sakhe.\n\nNoma imuphi umsebenzisi angabuyekeza izinhlelo zokusebenza kubo bonke abanye abasebenzisi. Izilungiselelo zokufinyelela kungenzeka zingadluliselwa kumsebenzisi omusha."</string>
+    <string name="user_add_user_message_long" msgid="1527434966294733380">"Manje ungabelana ngale divayisi nabanye abantu ngokudala abasebenzisi abangeziwe. Umsebenzisi ngamunye unesikhala sakhe, angakwazi ukusenza ngendlela ayifisayo nge-app, isithombe sangemuva, njalo njalo. Abasebenzisi bangalungisa izilungiselelo zedivayisi ezifana ne-Wi-Fi ezithinta wonke umuntu.\n\nUma ungeza umsebenzisi omusha, loyo muntu kumele asethe isikhala sakhe.\n\nNoma imuphi umsebenzisi angabuyekeza izinhlelo zokusebenza kubo bonke abanye abasebenzisi. Izilungiselelo zokufinyelela kungenzeka zingadluliselwa kumsebenzisi omusha."</string>
     <string name="user_add_user_message_short" msgid="3295959985795716166">"Uma ungeza umsebenzisi omusha, loyo muntu udinga ukusetha isikhala sakhe.\n\nNoma yimuphi umsebenzisi angabuyekeza izinhlelo zokusebenza kubo bonke abasebenzisi."</string>
-    <!-- no translation found for user_grant_admin_title (5157031020083343984) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_message (1673791931033486709) -->
-    <skip />
-    <!-- no translation found for user_grant_admin_button (5441486731331725756) -->
-    <skip />
+    <string name="user_grant_admin_title" msgid="5157031020083343984">"Yenza lo msebenzisi abe umphathi?"</string>
+    <string name="user_grant_admin_message" msgid="1673791931033486709">"Abalawuli banamalungelo akhethekile abanye abasebenzisi abangenawo. Umlawuli angaphatha bonke abasebenzisi, abuyekeze noma asethe kabusha le divayisi, alungise amasethingi, abone wonke ama-app afakiwe, futhi anikeze noma ahoxise amalungelo okuphatha kwabanye."</string>
+    <string name="user_grant_admin_button" msgid="5441486731331725756">"Yenza umphathi"</string>
     <string name="user_setup_dialog_title" msgid="8037342066381939995">"Setha umsebenzisi manje?"</string>
     <string name="user_setup_dialog_message" msgid="269931619868102841">"Qinisekisa ukuthi umuntu uyatholakala ukuze athathe idivayisi futhi asethe isikhala sakhe"</string>
     <string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Setha iphrofayela manje?"</string>
@@ -616,10 +616,8 @@
     <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>
-    <!-- no translation found for grant_admin (4323199171790522574) -->
-    <skip />
-    <!-- no translation found for not_grant_admin (3557849576157702485) -->
-    <skip />
+    <string name="grant_admin" msgid="4323199171790522574">"Yebo, benze abaphathi"</string>
+    <string name="not_grant_admin" msgid="3557849576157702485">"Cha, ungabenzi abaphathi"</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>
@@ -694,4 +692,8 @@
     <item msgid="324200556467459329">"Khuphula"</item>
   </string-array>
     <string name="font_scale_percentage" msgid="2624057443622817886">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
+    <string name="not_specified" msgid="5423502443185110328">"Akucacisiwe"</string>
+    <string name="neuter" msgid="2075249330106127310">"Okungenabulili"</string>
+    <string name="feminine" msgid="1529155595310784757">"Okwabesifazane"</string>
+    <string name="masculine" msgid="4653978041013996303">"Okwabesilisa"</string>
 </resources>
diff --git a/packages/SettingsLib/res/values/arrays.xml b/packages/SettingsLib/res/values/arrays.xml
index 3adb882..3252aad 100644
--- a/packages/SettingsLib/res/values/arrays.xml
+++ b/packages/SettingsLib/res/values/arrays.xml
@@ -660,4 +660,20 @@
         <item>2.0</item>
     </string-array>
 
+    <!-- Grammatical genders -->
+    <array name="grammatical_gender_entries">
+        <item>@string/not_specified</item>
+        <item>@string/neuter</item>
+        <item>@string/feminine</item>
+        <item>@string/masculine</item>
+    </array>
+
+    <!-- Values for grammatical genders -->
+    <string-array name="grammatical_gender_values">
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+        <item>3</item>
+    </string-array>
+
 </resources>
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index 60bc226..dab3bcb 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -1678,4 +1678,13 @@
 
     <!-- Formatting states for the scale of font size, in percent. Double "%" is required to represent the symbol "%". [CHAR LIMIT=20] -->
     <string name="font_scale_percentage"> <xliff:g id="percentage">%1$d</xliff:g> %%</string>
+
+    <!-- List entry in developer settings to set the grammatical gender to Not specified [CHAR LIMIT=30]-->
+    <string name="not_specified">Not specified</string>
+    <!-- List entry in developer settings to set the grammatical gender to Neuter [CHAR LIMIT=30]-->
+    <string name="neuter">Neuter</string>
+    <!-- List entry in developer settings to set the grammatical gender to Feminine [CHAR LIMIT=30]-->
+    <string name="feminine">Feminine</string>
+    <!-- List entry in developer settings to set the grammatical gender to Masculine [CHAR LIMIT=30]-->
+    <string name="masculine">Masculine</string>
 </resources>
diff --git a/packages/SettingsLib/src/com/android/settingslib/PrimarySwitchPreference.java b/packages/SettingsLib/src/com/android/settingslib/PrimarySwitchPreference.java
index 3ec5eba..363e20aa 100644
--- a/packages/SettingsLib/src/com/android/settingslib/PrimarySwitchPreference.java
+++ b/packages/SettingsLib/src/com/android/settingslib/PrimarySwitchPreference.java
@@ -133,6 +133,12 @@
         }
     }
 
+    @Override
+    public void setEnabled(boolean enabled) {
+        super.setEnabled(enabled);
+        setSwitchEnabled(enabled);
+    }
+
     @VisibleForTesting(otherwise = VisibleForTesting.NONE)
     public boolean isSwitchEnabled() {
         return mEnableSwitch;
diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java
index 00ccea1..ff960f3 100644
--- a/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java
+++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java
@@ -409,7 +409,7 @@
      */
     public static EnforcedAdmin checkIfUsbDataSignalingIsDisabled(Context context, int userId) {
         DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
-        if (dpm == null || dpm.isUsbDataSignalingEnabledForUser(userId)) {
+        if (dpm == null || dpm.isUsbDataSignalingEnabled()) {
             return null;
         } else {
             EnforcedAdmin admin = getProfileOrDeviceOwner(context, getUserHandleOf(userId));
diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedPreferenceHelper.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedPreferenceHelper.java
index cb8e7e8..dcb0a07 100644
--- a/packages/SettingsLib/src/com/android/settingslib/RestrictedPreferenceHelper.java
+++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedPreferenceHelper.java
@@ -23,6 +23,7 @@
 import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.os.UserHandle;
 import android.text.TextUtils;
@@ -229,13 +230,15 @@
     }
 
     private void updateDisabledState() {
+        boolean isEnabled = !(mDisabledByAdmin || mDisabledByAppOps);
         if (!(mPreference instanceof RestrictedTopLevelPreference)) {
-            mPreference.setEnabled(!(mDisabledByAdmin || mDisabledByAppOps));
+            mPreference.setEnabled(isEnabled);
         }
 
-        if (mPreference instanceof PrimarySwitchPreference) {
-            ((PrimarySwitchPreference) mPreference)
-                    .setSwitchEnabled(!(mDisabledByAdmin || mDisabledByAppOps));
+        Drawable icon = mPreference.getIcon();
+        if (!isEnabled && icon != null) {
+            Utils.convertToGrayscale(icon);
+            mPreference.setIcon(icon);
         }
     }
 }
diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java
index c967b56..9d533fa 100644
--- a/packages/SettingsLib/src/com/android/settingslib/Utils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java
@@ -700,4 +700,14 @@
         return false;
     }
 
+    /**
+     *  Convert a drawable to grayscale drawable
+     */
+    public static void convertToGrayscale(@NonNull Drawable drawable) {
+        ColorMatrix matrix = new ColorMatrix();
+        matrix.setSaturation(0.0f);
+
+        ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
+        drawable.setColorFilter(filter);
+    }
 }
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
index 2118d2c..f03ff00 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
@@ -1518,10 +1518,15 @@
      *                      list.
      */
     public void switchMemberDeviceContent(CachedBluetoothDevice newMainDevice) {
-        // Backup from main device
+        // Remove the sub device from mMemberDevices first to prevent hash mismatch problem due
+        // to mDevice switch
+        removeMemberDevice(newMainDevice);
+
+        // Backup from current main device
         final BluetoothDevice tmpDevice = mDevice;
         final short tmpRssi = mRssi;
         final boolean tmpJustDiscovered = mJustDiscovered;
+
         // Set main device from sub device
         release();
         mDevice = newMainDevice.mDevice;
@@ -1535,6 +1540,9 @@
         newMainDevice.mRssi = tmpRssi;
         newMainDevice.mJustDiscovered = tmpJustDiscovered;
         newMainDevice.fillData();
+
+        // Add the sub device back into mMemberDevices with correct hash
+        addMemberDevice(newMainDevice);
     }
 
     /**
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidDeviceManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidDeviceManager.java
index efba953..111a2c1 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidDeviceManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HearingAidDeviceManager.java
@@ -186,6 +186,14 @@
             if (cachedDevice.getHiSyncId() != hiSyncId) {
                 continue;
             }
+
+            // The remote device supports CSIP, the other ear should be processed as a member
+            // device. Ignore hiSyncId grouping from ASHA here.
+            if (cachedDevice.getProfiles().stream().anyMatch(
+                    profile -> profile instanceof CsipSetCoordinatorProfile)) {
+                continue;
+            }
+
             if (firstMatchedIndex == -1) {
                 // Found the first one
                 firstMatchedIndex = i;
diff --git a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractWifiMacAddressPreferenceController.java b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractWifiMacAddressPreferenceController.java
index 1d433e7..5bc27195 100644
--- a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractWifiMacAddressPreferenceController.java
+++ b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractWifiMacAddressPreferenceController.java
@@ -59,7 +59,7 @@
 
     @Override
     public boolean isAvailable() {
-        return true;
+        return mWifiManager != null;
     }
 
     @Override
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
index 963bd9d..ed518f7 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
@@ -23,7 +23,6 @@
 import android.graphics.drawable.Drawable;
 import android.media.AudioManager;
 import android.media.MediaRoute2Info;
-import android.media.MediaRouter2Manager;
 import android.media.RouteListingPreference;
 
 import com.android.settingslib.R;
@@ -40,15 +39,21 @@
     private CachedBluetoothDevice mCachedDevice;
     private final AudioManager mAudioManager;
 
-    BluetoothMediaDevice(Context context, CachedBluetoothDevice device,
-            MediaRouter2Manager routerManager, MediaRoute2Info info, String packageName) {
-        this(context, device, routerManager, info, packageName, null);
+    BluetoothMediaDevice(
+            Context context,
+            CachedBluetoothDevice device,
+            MediaRoute2Info info,
+            String packageName) {
+        this(context, device, info, packageName, null);
     }
 
-    BluetoothMediaDevice(Context context, CachedBluetoothDevice device,
-            MediaRouter2Manager routerManager, MediaRoute2Info info, String packageName,
+    BluetoothMediaDevice(
+            Context context,
+            CachedBluetoothDevice device,
+            MediaRoute2Info info,
+            String packageName,
             RouteListingPreference.Item item) {
-        super(context, routerManager, info, packageName, item);
+        super(context, info, packageName, item);
         mCachedDevice = device;
         mAudioManager = context.getSystemService(AudioManager.class);
         initDeviceRecord();
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/ComplexMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/ComplexMediaDevice.java
index c38dfe3..4e0ebd1 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/ComplexMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/ComplexMediaDevice.java
@@ -19,7 +19,6 @@
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.media.MediaRoute2Info;
-import android.media.MediaRouter2Manager;
 import android.media.RouteListingPreference;
 
 import com.android.settingslib.R;
@@ -32,10 +31,12 @@
 
     private final String mSummary = "";
 
-    ComplexMediaDevice(Context context, MediaRouter2Manager routerManager,
-            MediaRoute2Info info, String packageName,
+    ComplexMediaDevice(
+            Context context,
+            MediaRoute2Info info,
+            String packageName,
             RouteListingPreference.Item item) {
-        super(context, routerManager, info, packageName, item);
+        super(context, info, packageName, item);
     }
 
     // MediaRoute2Info.getName was made public on API 34, but exists since API 30.
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
index b10d794..012cbc0 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
@@ -29,7 +29,6 @@
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.media.MediaRoute2Info;
-import android.media.MediaRouter2Manager;
 import android.media.RouteListingPreference;
 
 import androidx.annotation.VisibleForTesting;
@@ -43,15 +42,17 @@
 
     private static final String TAG = "InfoMediaDevice";
 
-    InfoMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
-            String packageName, RouteListingPreference.Item item) {
-        super(context, routerManager, info, packageName, item);
+    InfoMediaDevice(
+            Context context,
+            MediaRoute2Info info,
+            String packageName,
+            RouteListingPreference.Item item) {
+        super(context, info, packageName, item);
         initDeviceRecord();
     }
 
-    InfoMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
-            String packageName) {
-        this(context, routerManager, info, packageName, null);
+    InfoMediaDevice(Context context, MediaRoute2Info info, String packageName) {
+        this(context, info, packageName, null);
     }
 
     @Override
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
index 1728e40..bf63f5d 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java
@@ -41,6 +41,7 @@
 
 import static com.android.settingslib.media.LocalMediaManager.MediaDeviceState.STATE_SELECTED;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.TargetApi;
 import android.app.Notification;
@@ -49,7 +50,6 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.media.MediaRoute2Info;
-import android.media.MediaRouter2Manager;
 import android.media.RouteListingPreference;
 import android.media.RoutingSessionInfo;
 import android.os.Build;
@@ -57,44 +57,42 @@
 import android.util.Log;
 
 import androidx.annotation.DoNotInline;
-import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import com.android.settingslib.media.flags.Flags;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
+import java.util.function.Function;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
-/**
- * InfoMediaManager provide interface to get InfoMediaDevice list.
- */
+/** InfoMediaManager provide interface to get InfoMediaDevice list. */
 @RequiresApi(Build.VERSION_CODES.R)
-public class InfoMediaManager extends MediaManager {
+public abstract class InfoMediaManager extends MediaManager {
 
     private static final String TAG = "InfoMediaManager";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-    @VisibleForTesting
-    final RouterManagerCallback mMediaRouterCallback = new RouterManagerCallback();
-    @VisibleForTesting
-    final Executor mExecutor = Executors.newSingleThreadExecutor();
-    @VisibleForTesting
-    MediaRouter2Manager mRouterManager;
-    @VisibleForTesting
-    String mPackageName;
-    boolean mIsScanning = false;
 
+    /** Checked exception that signals the specified package is not present in the system. */
+    public static class PackageNotAvailableException extends Exception {
+        public PackageNotAvailableException(String message) {
+            super(message);
+        }
+    }
+
+    protected String mPackageName;
     private MediaDevice mCurrentConnectedDevice;
-    private LocalBluetoothManager mBluetoothManager;
+    private final LocalBluetoothManager mBluetoothManager;
     private final Map<String, RouteListingPreference.Item> mPreferenceItemMap =
             new ConcurrentHashMap<>();
 
@@ -102,40 +100,131 @@
             LocalBluetoothManager localBluetoothManager) {
         super(context, notification);
 
-        mRouterManager = MediaRouter2Manager.getInstance(context);
         mBluetoothManager = localBluetoothManager;
         if (!TextUtils.isEmpty(packageName)) {
             mPackageName = packageName;
         }
     }
 
-    @Override
-    public void startScan() {
-        if (!mIsScanning) {
-            mMediaDevices.clear();
-            mRouterManager.registerCallback(mExecutor, mMediaRouterCallback);
-            mRouterManager.registerScanRequest();
-            mIsScanning = true;
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
-                    && !TextUtils.isEmpty(mPackageName)) {
-                RouteListingPreference routeListingPreference =
-                        mRouterManager.getRouteListingPreference(mPackageName);
-                Api34Impl.onRouteListingPreferenceUpdated(routeListingPreference,
-                        mPreferenceItemMap);
+    /** Creates an instance of InfoMediaManager. */
+    public static InfoMediaManager createInstance(
+            Context context,
+            String packageName,
+            Notification notification,
+            LocalBluetoothManager localBluetoothManager) {
+        if (Flags.useMediaRouter2ForInfoMediaManager()) {
+            try {
+                return new RouterInfoMediaManager(
+                        context, packageName, notification, localBluetoothManager);
+            } catch (PackageNotAvailableException ex) {
+                // TODO: b/293578081 - Propagate this exception to callers for proper handling.
+                Log.w(TAG, "Returning a no-op InfoMediaManager for package " + packageName);
+                return new NoOpInfoMediaManager(
+                        context, packageName, notification, localBluetoothManager);
             }
-            refreshDevices();
+        } else {
+            return new ManagerInfoMediaManager(
+                    context, packageName, notification, localBluetoothManager);
         }
     }
 
     @Override
-    public void stopScan() {
-        if (mIsScanning) {
-            mRouterManager.unregisterCallback(mMediaRouterCallback);
-            mRouterManager.unregisterScanRequest();
-            mIsScanning = false;
+    public void startScan() {
+        mMediaDevices.clear();
+        startScanOnRouter();
+        updateRouteListingPreference();
+        refreshDevices();
+    }
+
+    private void updateRouteListingPreference() {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
+                && !TextUtils.isEmpty(mPackageName)) {
+            RouteListingPreference routeListingPreference =
+                    getRouteListingPreference();
+            Api34Impl.onRouteListingPreferenceUpdated(routeListingPreference,
+                    mPreferenceItemMap);
         }
     }
 
+    @Override
+    public abstract void stopScan();
+
+    protected abstract void startScanOnRouter();
+
+    /**
+     * Transfer MediaDevice for media without package name.
+     */
+    protected abstract boolean connectDeviceWithoutPackageName(@NonNull MediaDevice device);
+
+    protected abstract void transferToRoute(@NonNull MediaRoute2Info route);
+
+    protected abstract void selectRoute(
+            @NonNull MediaRoute2Info route, @NonNull RoutingSessionInfo info);
+
+    protected abstract void deselectRoute(
+            @NonNull MediaRoute2Info route, @NonNull RoutingSessionInfo info);
+
+    protected abstract void releaseSession(@NonNull RoutingSessionInfo sessionInfo);
+
+    @NonNull
+    protected abstract List<MediaRoute2Info> getSelectableRoutes(@NonNull RoutingSessionInfo info);
+
+    @NonNull
+    protected abstract List<MediaRoute2Info> getDeselectableRoutes(
+            @NonNull RoutingSessionInfo info);
+
+    @NonNull
+    protected abstract List<MediaRoute2Info> getSelectedRoutes(@NonNull RoutingSessionInfo info);
+
+    protected abstract void setSessionVolume(@NonNull RoutingSessionInfo info, int volume);
+
+    protected abstract void setRouteVolume(@NonNull MediaRoute2Info route, int volume);
+
+    @Nullable
+    protected abstract RouteListingPreference getRouteListingPreference();
+
+    /**
+     * Returns the list of remote {@link RoutingSessionInfo routing sessions} known to the system.
+     */
+    @NonNull
+    protected abstract List<RoutingSessionInfo> getRemoteSessions();
+
+    @NonNull
+    protected abstract List<RoutingSessionInfo> getRoutingSessionsForPackage();
+
+    @Nullable
+    protected abstract RoutingSessionInfo getRoutingSessionById(@NonNull String sessionId);
+
+    @NonNull
+    protected abstract List<MediaRoute2Info> getAllRoutes();
+
+    @NonNull
+    protected abstract List<MediaRoute2Info> getAvailableRoutesFromRouter();
+
+    @NonNull
+    protected abstract List<MediaRoute2Info> getTransferableRoutes(@NonNull String packageName);
+
+    protected final void rebuildDeviceList() {
+        mMediaDevices.clear();
+        mCurrentConnectedDevice = null;
+        if (TextUtils.isEmpty(mPackageName)) {
+            buildAllRoutes();
+        } else {
+            buildAvailableRoutes();
+        }
+    }
+
+    protected final void notifyCurrentConnectedDeviceChanged() {
+        final String id = mCurrentConnectedDevice != null ? mCurrentConnectedDevice.getId() : null;
+        dispatchConnectedDeviceChanged(id);
+    }
+
+    @RequiresApi(34)
+    protected final void notifyRouteListingPreferenceUpdated(
+            RouteListingPreference routeListingPreference) {
+        Api34Impl.onRouteListingPreferenceUpdated(routeListingPreference, mPreferenceItemMap);
+    }
+
     /**
      * Get current device that played media.
      * @return MediaDevice
@@ -144,17 +233,18 @@
         return mCurrentConnectedDevice;
     }
 
-    /**
-     * Transfer MediaDevice for media without package name.
-     */
-    boolean connectDeviceWithoutPackageName(MediaDevice device) {
-        boolean isConnected = false;
-        final RoutingSessionInfo info = mRouterManager.getSystemRoutingSession(null);
-        if (info != null) {
-            mRouterManager.transfer(info, device.mRouteInfo);
-            isConnected = true;
+    /* package */ void connectToDevice(MediaDevice device) {
+        if (device.mRouteInfo == null) {
+            Log.w(TAG, "Unable to connect. RouteInfo is empty");
+            return;
         }
-        return isConnected;
+
+        if (TextUtils.isEmpty(mPackageName)) {
+            connectDeviceWithoutPackageName(device);
+        } else {
+            device.setConnectedRecord();
+            transferToRoute(device.mRouteInfo);
+        }
     }
 
     /**
@@ -170,34 +260,27 @@
         }
 
         final RoutingSessionInfo info = getRoutingSessionInfo();
-        if (info != null && info.getSelectableRoutes().contains(device.mRouteInfo.getId())) {
-            mRouterManager.selectRoute(info, device.mRouteInfo);
-            return true;
+        if (info == null || !info.getSelectableRoutes().contains(device.mRouteInfo.getId())) {
+            Log.w(TAG, "addDeviceToPlayMedia() Ignoring selecting a non-selectable device : "
+                    + device.getName());
+            return false;
         }
 
-        Log.w(TAG, "addDeviceToPlayMedia() Ignoring selecting a non-selectable device : "
-                + device.getName());
-
-        return false;
+        selectRoute(device.mRouteInfo, info);
+        return true;
     }
 
     private RoutingSessionInfo getRoutingSessionInfo() {
-        return getRoutingSessionInfo(mPackageName);
-    }
+        final List<RoutingSessionInfo> sessionInfos = getRoutingSessionsForPackage();
 
-    private RoutingSessionInfo getRoutingSessionInfo(String packageName) {
-        final List<RoutingSessionInfo> sessionInfos =
-                mRouterManager.getRoutingSessions(packageName);
-
-        if (sessionInfos == null || sessionInfos.isEmpty()) {
+        if (sessionInfos.isEmpty()) {
             return null;
         }
         return sessionInfos.get(sessionInfos.size() - 1);
     }
 
     boolean isRoutingSessionAvailableForVolumeControl() {
-        List<RoutingSessionInfo> sessions =
-                mRouterManager.getRoutingSessions(mPackageName);
+        List<RoutingSessionInfo> sessions = getRoutingSessionsForPackage();
 
         for (RoutingSessionInfo session : sessions) {
             if (!session.isSystemSession()
@@ -212,15 +295,17 @@
 
     boolean preferRouteListingOrdering() {
         return Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
-                && Api34Impl.preferRouteListingOrdering(mRouterManager, mPackageName);
+                && !TextUtils.isEmpty(mPackageName)
+                && Api34Impl.preferRouteListingOrdering(getRouteListingPreference());
     }
 
     @Nullable
     ComponentName getLinkedItemComponentName() {
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE && TextUtils.isEmpty(
+                mPackageName)) {
             return null;
         }
-        return Api34Impl.getLinkedItemComponentName(mRouterManager, mPackageName);
+        return Api34Impl.getLinkedItemComponentName(getRouteListingPreference());
     }
 
     /**
@@ -236,15 +321,14 @@
         }
 
         final RoutingSessionInfo info = getRoutingSessionInfo();
-        if (info != null && info.getSelectedRoutes().contains(device.mRouteInfo.getId())) {
-            mRouterManager.deselectRoute(info, device.mRouteInfo);
-            return true;
+        if (info == null || !info.getSelectedRoutes().contains(device.mRouteInfo.getId())) {
+            Log.w(TAG, "removeDeviceFromMedia() Ignoring deselecting a non-deselectable device : "
+                    + device.getName());
+            return false;
         }
 
-        Log.w(TAG, "removeDeviceFromMedia() Ignoring deselecting a non-deselectable device : "
-                + device.getName());
-
-        return false;
+        deselectRoute(device.mRouteInfo, info);
+        return true;
     }
 
     /**
@@ -257,105 +341,112 @@
         }
 
         final RoutingSessionInfo sessionInfo = getRoutingSessionInfo();
-
-        if (sessionInfo != null) {
-            mRouterManager.releaseSession(sessionInfo);
-            return true;
+        if (sessionInfo == null) {
+            Log.w(TAG, "releaseSession() Ignoring release session : " + mPackageName);
+            return false;
         }
 
-        Log.w(TAG, "releaseSession() Ignoring release session : " + mPackageName);
-
-        return false;
+        releaseSession(sessionInfo);
+        return true;
     }
 
     /**
-     * Get the MediaDevice list that can be added to current media.
-     *
-     * @return list of MediaDevice
+     * Returns the list of {@link MediaDevice media devices} that can be added to the current {@link
+     * RoutingSessionInfo routing session}.
      */
-    List<MediaDevice> getSelectableMediaDevice() {
-        final List<MediaDevice> deviceList = new ArrayList<>();
+    @NonNull
+    List<MediaDevice> getSelectableMediaDevices() {
         if (TextUtils.isEmpty(mPackageName)) {
-            Log.w(TAG, "getSelectableMediaDevice() package name is null or empty!");
-            return deviceList;
+            Log.w(TAG, "getSelectableMediaDevices() package name is null or empty!");
+            return Collections.emptyList();
         }
 
         final RoutingSessionInfo info = getRoutingSessionInfo();
-        if (info != null) {
-            for (MediaRoute2Info route : mRouterManager.getSelectableRoutes(info)) {
-                deviceList.add(new InfoMediaDevice(mContext, mRouterManager,
-                        route, mPackageName, mPreferenceItemMap.get(route.getId())));
-            }
-            return deviceList;
+        if (info == null) {
+            Log.w(TAG, "getSelectableMediaDevices() cannot find selectable MediaDevice from : "
+                    + mPackageName);
+            return Collections.emptyList();
         }
 
-        Log.w(TAG, "getSelectableMediaDevice() cannot found selectable MediaDevice from : "
-                + mPackageName);
-
+        final List<MediaDevice> deviceList = new ArrayList<>();
+        for (MediaRoute2Info route : getSelectableRoutes(info)) {
+            deviceList.add(
+                    new InfoMediaDevice(
+                            mContext, route, mPackageName, mPreferenceItemMap.get(route.getId())));
+        }
         return deviceList;
     }
 
     /**
-     * Get the MediaDevice list that can be removed from current media session.
-     *
-     * @return list of MediaDevice
+     * Returns the list of {@link MediaDevice media devices} that can be deselected from the current
+     * {@link RoutingSessionInfo routing session}.
      */
-    List<MediaDevice> getDeselectableMediaDevice() {
-        final List<MediaDevice> deviceList = new ArrayList<>();
+    @NonNull
+    List<MediaDevice> getDeselectableMediaDevices() {
         if (TextUtils.isEmpty(mPackageName)) {
-            Log.d(TAG, "getDeselectableMediaDevice() package name is null or empty!");
-            return deviceList;
+            Log.d(TAG, "getDeselectableMediaDevices() package name is null or empty!");
+            return Collections.emptyList();
         }
 
         final RoutingSessionInfo info = getRoutingSessionInfo();
-        if (info != null) {
-            for (MediaRoute2Info route : mRouterManager.getDeselectableRoutes(info)) {
-                deviceList.add(new InfoMediaDevice(mContext, mRouterManager,
-                        route, mPackageName, mPreferenceItemMap.get(route.getId())));
-                Log.d(TAG, route.getName() + " is deselectable for " + mPackageName);
-            }
-            return deviceList;
+        if (info == null) {
+            Log.d(TAG, "getDeselectableMediaDevices() cannot find deselectable MediaDevice from : "
+                    + mPackageName);
+            return Collections.emptyList();
         }
-        Log.d(TAG, "getDeselectableMediaDevice() cannot found deselectable MediaDevice from : "
-                + mPackageName);
 
+        final List<MediaDevice> deviceList = new ArrayList<>();
+        for (MediaRoute2Info route : getDeselectableRoutes(info)) {
+            deviceList.add(
+                    new InfoMediaDevice(
+                            mContext, route, mPackageName, mPreferenceItemMap.get(route.getId())));
+            Log.d(TAG, route.getName() + " is deselectable for " + mPackageName);
+        }
         return deviceList;
     }
 
     /**
-     * Get the MediaDevice list that has been selected to current media.
-     *
-     * @return list of MediaDevice
+     * Returns the list of {@link MediaDevice media devices} that are selected in the current {@link
+     * RoutingSessionInfo routing session}.
      */
-    List<MediaDevice> getSelectedMediaDevice() {
-        final List<MediaDevice> deviceList = new ArrayList<>();
+    @NonNull
+    List<MediaDevice> getSelectedMediaDevices() {
         if (TextUtils.isEmpty(mPackageName)) {
-            Log.w(TAG, "getSelectedMediaDevice() package name is null or empty!");
-            return deviceList;
+            Log.w(TAG, "getSelectedMediaDevices() package name is null or empty!");
+            return Collections.emptyList();
         }
 
         final RoutingSessionInfo info = getRoutingSessionInfo();
-        if (info != null) {
-            for (MediaRoute2Info route : mRouterManager.getSelectedRoutes(info)) {
-                deviceList.add(new InfoMediaDevice(mContext, mRouterManager,
-                        route, mPackageName, mPreferenceItemMap.get(route.getId())));
-            }
-            return deviceList;
+        if (info == null) {
+            Log.w(TAG, "getSelectedMediaDevices() cannot find selectable MediaDevice from : "
+                    + mPackageName);
+            return Collections.emptyList();
         }
 
-        Log.w(TAG, "getSelectedMediaDevice() cannot found selectable MediaDevice from : "
-                + mPackageName);
-
+        final List<MediaDevice> deviceList = new ArrayList<>();
+        for (MediaRoute2Info route : getSelectedRoutes(info)) {
+            deviceList.add(
+                    new InfoMediaDevice(
+                            mContext, route, mPackageName, mPreferenceItemMap.get(route.getId())));
+        }
         return deviceList;
     }
 
+    /* package */ void adjustDeviceVolume(MediaDevice device, int volume) {
+        if (device.mRouteInfo == null) {
+            Log.w(TAG, "Unable to set volume. RouteInfo is empty");
+            return;
+        }
+        setRouteVolume(device.mRouteInfo, volume);
+    }
+
     void adjustSessionVolume(RoutingSessionInfo info, int volume) {
         if (info == null) {
             Log.w(TAG, "Unable to adjust session volume. RoutingSessionInfo is empty");
             return;
         }
 
-        mRouterManager.setSessionVolume(info, volume);
+        setSessionVolume(info, volume);
     }
 
     /**
@@ -370,15 +461,14 @@
         }
 
         final RoutingSessionInfo info = getRoutingSessionInfo();
-        if (info != null) {
-            Log.d(TAG, "adjustSessionVolume() adjust volume : " + volume + ", with : "
+        if (info == null) {
+            Log.w(TAG, "adjustSessionVolume() can't found corresponding RoutingSession with : "
                     + mPackageName);
-            mRouterManager.setSessionVolume(info, volume);
             return;
         }
 
-        Log.w(TAG, "adjustSessionVolume() can't found corresponding RoutingSession with : "
-                + mPackageName);
+        Log.d(TAG, "adjustSessionVolume() adjust volume: " + volume + ", with : " + mPackageName);
+        setSessionVolume(info, volume);
     }
 
     /**
@@ -393,13 +483,13 @@
         }
 
         final RoutingSessionInfo info = getRoutingSessionInfo();
-        if (info != null) {
-            return info.getVolumeMax();
+        if (info == null) {
+            Log.w(TAG, "getSessionVolumeMax() can't find corresponding RoutingSession with : "
+                    + mPackageName);
+            return -1;
         }
 
-        Log.w(TAG, "getSessionVolumeMax() can't found corresponding RoutingSession with : "
-                + mPackageName);
-        return -1;
+        return info.getVolumeMax();
     }
 
     /**
@@ -414,13 +504,13 @@
         }
 
         final RoutingSessionInfo info = getRoutingSessionInfo();
-        if (info != null) {
-            return info.getVolume();
+        if (info == null) {
+            Log.w(TAG, "getSessionVolume() can't find corresponding RoutingSession with : "
+                    + mPackageName);
+            return -1;
         }
 
-        Log.w(TAG, "getSessionVolume() can't found corresponding RoutingSession with : "
-                + mPackageName);
-        return -1;
+        return info.getVolume();
     }
 
     CharSequence getSessionName() {
@@ -430,22 +520,12 @@
         }
 
         final RoutingSessionInfo info = getRoutingSessionInfo();
-        if (info != null) {
-            return info.getName();
+        if (info == null) {
+            Log.w(TAG, "Unable to get session name for package: " + mPackageName);
+            return null;
         }
 
-        Log.w(TAG, "Unable to get session name for package: " + mPackageName);
-        return null;
-    }
-
-    boolean shouldDisableMediaOutput(String packageName) {
-        if (TextUtils.isEmpty(packageName)) {
-            Log.w(TAG, "shouldDisableMediaOutput() package name is null or empty!");
-            return true;
-        }
-
-        // Disable when there is no transferable route
-        return mRouterManager.getTransferableRoutes(packageName).isEmpty();
+        return info.getName();
     }
 
     @TargetApi(Build.VERSION_CODES.R)
@@ -454,21 +534,15 @@
                 || sessionInfo.getVolumeHandling() != MediaRoute2Info.PLAYBACK_VOLUME_FIXED;
     }
 
-    private synchronized void refreshDevices() {
-        mMediaDevices.clear();
-        mCurrentConnectedDevice = null;
-        if (TextUtils.isEmpty(mPackageName)) {
-            buildAllRoutes();
-        } else {
-            buildAvailableRoutes();
-        }
+    protected final synchronized void refreshDevices() {
+        rebuildDeviceList();
         dispatchDeviceListAdded();
     }
 
     // MediaRoute2Info.getType was made public on API 34, but exists since API 30.
     @SuppressWarnings("NewApi")
     private void buildAllRoutes() {
-        for (MediaRoute2Info route : mRouterManager.getAllRoutes()) {
+        for (MediaRoute2Info route : getAllRoutes()) {
             if (DEBUG) {
                 Log.d(TAG, "buildAllRoutes() route : " + route.getName() + ", volume : "
                         + route.getVolume() + ", type : " + route.getType());
@@ -479,17 +553,10 @@
         }
     }
 
-    List<RoutingSessionInfo> getActiveMediaSession() {
-        List<RoutingSessionInfo> infos = new ArrayList<>();
-        infos.add(mRouterManager.getSystemRoutingSession(null));
-        infos.addAll(mRouterManager.getRemoteSessions());
-        return infos;
-    }
-
     // MediaRoute2Info.getType was made public on API 34, but exists since API 30.
     @SuppressWarnings("NewApi")
     private synchronized void buildAvailableRoutes() {
-        for (MediaRoute2Info route : getAvailableRoutes(mPackageName)) {
+        for (MediaRoute2Info route : getAvailableRoutes()) {
             if (DEBUG) {
                 Log.d(TAG, "buildAvailableRoutes() route : " + route.getName() + ", volume : "
                         + route.getVolume() + ", type : " + route.getType());
@@ -497,18 +564,17 @@
             addMediaDevice(route);
         }
     }
-
-    private synchronized List<MediaRoute2Info> getAvailableRoutes(String packageName) {
+    private synchronized List<MediaRoute2Info> getAvailableRoutes() {
         List<MediaRoute2Info> infos = new ArrayList<>();
-        RoutingSessionInfo routingSessionInfo = getRoutingSessionInfo(packageName);
+        RoutingSessionInfo routingSessionInfo = getRoutingSessionInfo();
         List<MediaRoute2Info> selectedRouteInfos = new ArrayList<>();
         if (routingSessionInfo != null) {
-            selectedRouteInfos = mRouterManager.getSelectedRoutes(routingSessionInfo);
+            selectedRouteInfos = getSelectedRoutes(routingSessionInfo);
             infos.addAll(selectedRouteInfos);
-            infos.addAll(mRouterManager.getSelectableRoutes(routingSessionInfo));
+            infos.addAll(getSelectableRoutes(routingSessionInfo));
         }
         final List<MediaRoute2Info> transferableRoutes =
-                mRouterManager.getTransferableRoutes(packageName);
+                getTransferableRoutes(mPackageName);
         for (MediaRoute2Info transferableRoute : transferableRoutes) {
             boolean alreadyAdded = false;
             for (MediaRoute2Info mediaRoute2Info : infos) {
@@ -523,14 +589,13 @@
         }
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
                 && !TextUtils.isEmpty(mPackageName)) {
-            RouteListingPreference routeListingPreference =
-                    mRouterManager.getRouteListingPreference(mPackageName);
+            RouteListingPreference routeListingPreference = getRouteListingPreference();
             if (routeListingPreference != null) {
                 final List<RouteListingPreference.Item> preferenceRouteListing =
                         Api34Impl.composePreferenceRouteListing(
                                 routeListingPreference);
                 infos = Api34Impl.arrangeRouteListByPreference(selectedRouteInfos,
-                                mRouterManager.getAvailableRoutes(packageName),
+                        getAvailableRoutesFromRouter(),
                                 preferenceRouteListing);
             }
             return Api34Impl.filterDuplicatedIds(infos);
@@ -557,8 +622,12 @@
             case TYPE_REMOTE_CAR:
             case TYPE_REMOTE_SMARTWATCH:
             case TYPE_REMOTE_SMARTPHONE:
-                mediaDevice = new InfoMediaDevice(mContext, mRouterManager, route,
-                        mPackageName, mPreferenceItemMap.get(route.getId()));
+                mediaDevice =
+                        new InfoMediaDevice(
+                                mContext,
+                                route,
+                                mPackageName,
+                                mPreferenceItemMap.get(route.getId()));
                 break;
             case TYPE_BUILTIN_SPEAKER:
             case TYPE_USB_DEVICE:
@@ -568,10 +637,12 @@
             case TYPE_HDMI:
             case TYPE_WIRED_HEADSET:
             case TYPE_WIRED_HEADPHONES:
-                mediaDevice = mPreferenceItemMap.containsKey(route.getId()) ? new PhoneMediaDevice(
-                        mContext, mRouterManager, route, mPackageName,
-                        mPreferenceItemMap.get(route.getId())) : new PhoneMediaDevice(mContext,
-                        mRouterManager, route, mPackageName);
+                mediaDevice =
+                        new PhoneMediaDevice(
+                                mContext,
+                                route,
+                                mPackageName,
+                                mPreferenceItemMap.getOrDefault(route.getId(), null));
                 break;
             case TYPE_HEARING_AID:
             case TYPE_BLUETOOTH_A2DP:
@@ -581,16 +652,22 @@
                 final CachedBluetoothDevice cachedDevice =
                         mBluetoothManager.getCachedDeviceManager().findDevice(device);
                 if (cachedDevice != null) {
-                    mediaDevice = mPreferenceItemMap.containsKey(route.getId())
-                            ? new BluetoothMediaDevice(mContext, cachedDevice, mRouterManager,
-                            route, mPackageName, mPreferenceItemMap.get(route.getId()))
-                            : new BluetoothMediaDevice(mContext, cachedDevice, mRouterManager,
-                                    route, mPackageName);
+                    mediaDevice =
+                            new BluetoothMediaDevice(
+                                    mContext,
+                                    cachedDevice,
+                                    route,
+                                    mPackageName,
+                                    mPreferenceItemMap.getOrDefault(route.getId(), null));
                 }
                 break;
             case TYPE_REMOTE_AUDIO_VIDEO_RECEIVER:
-                mediaDevice = new ComplexMediaDevice(mContext, mRouterManager, route,
-                        mPackageName, mPreferenceItemMap.get(route.getId()));
+                mediaDevice =
+                        new ComplexMediaDevice(
+                                mContext,
+                                route,
+                                mPackageName,
+                                mPreferenceItemMap.get(route.getId()));
             default:
                 Log.w(TAG, "addMediaDevice() unknown device type : " + deviceType);
                 break;
@@ -608,76 +685,8 @@
         }
     }
 
-    class RouterManagerCallback implements MediaRouter2Manager.Callback {
-
-        @Override
-        public void onRoutesUpdated() {
-            refreshDevices();
-        }
-
-        @Override
-        public void onPreferredFeaturesChanged(String packageName, List<String> preferredFeatures) {
-            if (TextUtils.equals(mPackageName, packageName)) {
-                refreshDevices();
-            }
-        }
-
-        @Override
-        public void onTransferred(RoutingSessionInfo oldSession, RoutingSessionInfo newSession) {
-            if (DEBUG) {
-                Log.d(TAG, "onTransferred() oldSession : " + oldSession.getName()
-                        + ", newSession : " + newSession.getName());
-            }
-            mMediaDevices.clear();
-            mCurrentConnectedDevice = null;
-            if (TextUtils.isEmpty(mPackageName)) {
-                buildAllRoutes();
-            } else {
-                buildAvailableRoutes();
-            }
-
-            final String id = mCurrentConnectedDevice != null
-                    ? mCurrentConnectedDevice.getId()
-                    : null;
-            dispatchConnectedDeviceChanged(id);
-        }
-
-        /**
-         * Ignore callback here since we'll also receive {@link #onRequestFailed} with reason code.
-         */
-        @Override
-        public void onTransferFailed(RoutingSessionInfo session, MediaRoute2Info route) {
-        }
-
-        @Override
-        public void onRequestFailed(int reason) {
-            dispatchOnRequestFailed(reason);
-        }
-
-        @Override
-        public void onSessionUpdated(RoutingSessionInfo sessionInfo) {
-            refreshDevices();
-        }
-
-        @Override
-        public void onSessionReleased(@NonNull RoutingSessionInfo session) {
-            refreshDevices();
-        }
-
-        @Override
-        public void onRouteListingPreferenceUpdated(
-                String packageName,
-                RouteListingPreference routeListingPreference) {
-            if (TextUtils.equals(mPackageName, packageName)) {
-                Api34Impl.onRouteListingPreferenceUpdated(
-                        routeListingPreference, mPreferenceItemMap);
-                refreshDevices();
-            }
-        }
-    }
-
     @RequiresApi(34)
-    private static class Api34Impl {
+    static class Api34Impl {
         @DoNotInline
         static List<RouteListingPreference.Item> composePreferenceRouteListing(
                 RouteListingPreference routeListingPreference) {
@@ -709,35 +718,66 @@
             return filteredInfos;
         }
 
+        /**
+         * Returns an ordered list of available devices based on the provided {@code
+         * routeListingPreferenceItems}.
+         *
+         * <p>The result has the following order:
+         *
+         * <ol>
+         *   <li>Selected routes.
+         *   <li>Not-selected system routes.
+         *   <li>Not-selected, non-system, available routes sorted by route listing preference.
+         * </ol>
+         *
+         * @param selectedRoutes List of currently selected routes.
+         * @param availableRoutes List of available routes that match the app's requested route
+         *     features.
+         * @param routeListingPreferenceItems Ordered list of {@link RouteListingPreference.Item} to
+         *     sort routes with.
+         */
         @DoNotInline
         static List<MediaRoute2Info> arrangeRouteListByPreference(
-                List<MediaRoute2Info> selectedRouteInfos, List<MediaRoute2Info> infolist,
-                List<RouteListingPreference.Item> preferenceRouteListing) {
-            final List<MediaRoute2Info> sortedInfoList = new ArrayList<>(selectedRouteInfos);
-            infolist.removeAll(selectedRouteInfos);
-            sortedInfoList.addAll(infolist.stream().filter(
-                    MediaRoute2Info::isSystemRoute).collect(Collectors.toList()));
-            for (RouteListingPreference.Item item : preferenceRouteListing) {
-                for (MediaRoute2Info info : infolist) {
-                    if (item.getRouteId().equals(info.getId())
-                            && !selectedRouteInfos.contains(info)
-                            && !info.isSystemRoute()) {
-                        sortedInfoList.add(info);
-                        break;
-                    }
+                List<MediaRoute2Info> selectedRoutes,
+                List<MediaRoute2Info> availableRoutes,
+                List<RouteListingPreference.Item> routeListingPreferenceItems) {
+            Set<String> sortedRouteIds = new LinkedHashSet<>();
+
+            // Add selected routes first.
+            for (MediaRoute2Info selectedRoute : selectedRoutes) {
+                sortedRouteIds.add(selectedRoute.getId());
+            }
+
+            // Add not-yet-added system routes.
+            for (MediaRoute2Info availableRoute : availableRoutes) {
+                if (availableRoute.isSystemRoute()) {
+                    sortedRouteIds.add(availableRoute.getId());
                 }
             }
-            return sortedInfoList;
+
+            // Create a mapping from id to route to avoid a quadratic search.
+            Map<String, MediaRoute2Info> idToRouteMap =
+                    Stream.concat(selectedRoutes.stream(), availableRoutes.stream())
+                            .collect(
+                                    Collectors.toMap(
+                                            MediaRoute2Info::getId,
+                                            Function.identity(),
+                                            (route1, route2) -> route1));
+
+            // Add not-selected routes that match RLP items. All system routes have already been
+            // added at this point.
+            for (RouteListingPreference.Item item : routeListingPreferenceItems) {
+                MediaRoute2Info route = idToRouteMap.get(item.getRouteId());
+                if (route != null) {
+                    sortedRouteIds.add(route.getId());
+                }
+            }
+
+            return sortedRouteIds.stream().map(idToRouteMap::get).collect(Collectors.toList());
         }
 
         @DoNotInline
-        static boolean preferRouteListingOrdering(MediaRouter2Manager mediaRouter2Manager,
-                String packageName) {
-            if (TextUtils.isEmpty(packageName)) {
-                return false;
-            }
-            RouteListingPreference routeListingPreference =
-                    mediaRouter2Manager.getRouteListingPreference(packageName);
+        static boolean preferRouteListingOrdering(RouteListingPreference routeListingPreference) {
             return routeListingPreference != null
                     && !routeListingPreference.getUseSystemOrdering();
         }
@@ -745,12 +785,7 @@
         @DoNotInline
         @Nullable
         static ComponentName getLinkedItemComponentName(
-                MediaRouter2Manager mediaRouter2Manager, String packageName) {
-            if (TextUtils.isEmpty(packageName)) {
-                return null;
-            }
-            RouteListingPreference routeListingPreference =
-                    mediaRouter2Manager.getRouteListingPreference(packageName);
+                RouteListingPreference routeListingPreference) {
             return routeListingPreference == null ? null
                     : routeListingPreference.getLinkedItemComponentName();
         }
@@ -761,9 +796,8 @@
                 Map<String, RouteListingPreference.Item> preferenceItemMap) {
             preferenceItemMap.clear();
             if (routeListingPreference != null) {
-                routeListingPreference.getItems().forEach((item) -> {
-                    preferenceItemMap.put(item.getRouteId(), item);
-                });
+                routeListingPreference.getItems().forEach((item) ->
+                        preferenceItemMap.put(item.getRouteId(), item));
             }
         }
     }
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
index c45e8e4..fe3ef5d 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
@@ -137,7 +137,8 @@
         }
 
         mInfoMediaManager =
-                new InfoMediaManager(context, packageName, notification, mLocalBluetoothManager);
+                InfoMediaManager.createInstance(
+                        context, packageName, notification, mLocalBluetoothManager);
     }
 
     /**
@@ -187,11 +188,7 @@
         }
 
         device.setState(MediaDeviceState.STATE_CONNECTING);
-        if (TextUtils.isEmpty(mPackageName)) {
-            mInfoMediaManager.connectDeviceWithoutPackageName(device);
-        } else {
-            device.connect();
-        }
+        mInfoMediaManager.connectToDevice(device);
         return true;
     }
 
@@ -346,7 +343,7 @@
      * @return list of MediaDevice
      */
     public List<MediaDevice> getSelectableMediaDevice() {
-        return mInfoMediaManager.getSelectableMediaDevice();
+        return mInfoMediaManager.getSelectableMediaDevices();
     }
 
     /**
@@ -355,7 +352,7 @@
      * @return list of MediaDevice
      */
     public List<MediaDevice> getDeselectableMediaDevice() {
-        return mInfoMediaManager.getDeselectableMediaDevice();
+        return mInfoMediaManager.getDeselectableMediaDevices();
     }
 
     /**
@@ -371,7 +368,17 @@
      * @return list of MediaDevice
      */
     public List<MediaDevice> getSelectedMediaDevice() {
-        return mInfoMediaManager.getSelectedMediaDevice();
+        return mInfoMediaManager.getSelectedMediaDevices();
+    }
+
+    /**
+     * Requests a volume change for a specific media device.
+     *
+     * This operation is different from {@link #adjustSessionVolume(String, int)}, which changes the
+     * volume of the overall session.
+     */
+    public void adjustDeviceVolume(MediaDevice device, int volume) {
+        mInfoMediaManager.adjustDeviceVolume(device, volume);
     }
 
     /**
@@ -381,14 +388,12 @@
      * @param volume the value of volume
      */
     public void adjustSessionVolume(String sessionId, int volume) {
-        final List<RoutingSessionInfo> infos = getActiveMediaSession();
-        for (RoutingSessionInfo info : infos) {
-            if (TextUtils.equals(sessionId, info.getId())) {
-                mInfoMediaManager.adjustSessionVolume(info, volume);
-                return;
-            }
+        RoutingSessionInfo session = mInfoMediaManager.getRoutingSessionById(sessionId);
+        if (session != null) {
+            mInfoMediaManager.adjustSessionVolume(session, volume);
+        } else {
+            Log.w(TAG, "adjustSessionVolume: Unable to find session: " + sessionId);
         }
-        Log.w(TAG, "adjustSessionVolume: Unable to find session: " + sessionId);
     }
 
     /**
@@ -428,12 +433,12 @@
     }
 
     /**
-     * Gets the current active session.
+     * Gets the list of remote {@link RoutingSessionInfo routing sessions} known to the system.
      *
-     * @return current active session list{@link android.media.RoutingSessionInfo}
+     * <p>This list does not include any system routing sessions.
      */
-    public List<RoutingSessionInfo> getActiveMediaSession() {
-        return mInfoMediaManager.getActiveMediaSession();
+    public List<RoutingSessionInfo> getRemoteRoutingSessions() {
+        return mInfoMediaManager.getRemoteSessions();
     }
 
     /**
@@ -446,13 +451,6 @@
     }
 
     /**
-     * Returns {@code true} if needed to disable media output, otherwise returns {@code false}.
-     */
-    public boolean shouldDisableMediaOutput(String packageName) {
-        return mInfoMediaManager.shouldDisableMediaOutput(packageName);
-    }
-
-    /**
      * Returns {@code true} if needed to enable volume seekbar, otherwise returns {@code false}.
      */
     public boolean shouldEnableVolumeSeekBar(RoutingSessionInfo sessionInfo) {
@@ -558,9 +556,7 @@
                 final CachedBluetoothDevice cachedDevice =
                         cachedDeviceManager.findDevice(device);
                 if (isBondedMediaDevice(cachedDevice) && isMutingExpectedDevice(cachedDevice)) {
-                    return new BluetoothMediaDevice(mContext,
-                            cachedDevice,
-                            null, null, mPackageName);
+                    return new BluetoothMediaDevice(mContext, cachedDevice, null, mPackageName);
                 }
             }
             return null;
@@ -606,9 +602,8 @@
             unRegisterDeviceAttributeChangeCallback();
             mDisconnectedMediaDevices.clear();
             for (CachedBluetoothDevice cachedDevice : cachedBluetoothDeviceList) {
-                final MediaDevice mediaDevice = new BluetoothMediaDevice(mContext,
-                        cachedDevice,
-                        null, null, mPackageName);
+                final MediaDevice mediaDevice =
+                        new BluetoothMediaDevice(mContext, cachedDevice, null, mPackageName);
                 if (!mMediaDevices.contains(mediaDevice)) {
                     cachedDevice.registerCallback(mDeviceAttributeChangeCallback);
                     mDisconnectedMediaDevices.add(mediaDevice);
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/ManagerInfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/ManagerInfoMediaManager.java
new file mode 100644
index 0000000..0be2e0e
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/media/ManagerInfoMediaManager.java
@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.media;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.app.Notification;
+import android.content.Context;
+import android.media.MediaRoute2Info;
+import android.media.MediaRouter2Manager;
+import android.media.RouteListingPreference;
+import android.media.RoutingSessionInfo;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+
+import java.util.List;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
+/**
+ * Template implementation of {@link InfoMediaManager} using {@link MediaRouter2Manager}.
+ */
+public class ManagerInfoMediaManager extends InfoMediaManager {
+
+    private static final String TAG = "ManagerInfoMediaManager";
+    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+    @VisibleForTesting
+    /* package */ final RouterManagerCallback mMediaRouterCallback = new RouterManagerCallback();
+    @VisibleForTesting
+    /* package */ MediaRouter2Manager mRouterManager;
+    boolean mIsScanning = false;
+
+    private final Executor mExecutor = Executors.newSingleThreadExecutor();
+
+    public ManagerInfoMediaManager(
+            Context context,
+            String packageName,
+            Notification notification,
+            LocalBluetoothManager localBluetoothManager) {
+        super(context, packageName, notification, localBluetoothManager);
+
+        mRouterManager = MediaRouter2Manager.getInstance(context);
+    }
+
+    @Override
+    protected void startScanOnRouter() {
+        if (!mIsScanning) {
+            mRouterManager.registerCallback(mExecutor, mMediaRouterCallback);
+            mRouterManager.registerScanRequest();
+            mIsScanning = true;
+        }
+    }
+
+    @Override
+    public void stopScan() {
+        if (mIsScanning) {
+            mRouterManager.unregisterCallback(mMediaRouterCallback);
+            mRouterManager.unregisterScanRequest();
+            mIsScanning = false;
+        }
+    }
+
+    @Override
+    protected void transferToRoute(@NonNull MediaRoute2Info route) {
+        mRouterManager.transfer(mPackageName, route);
+    }
+
+    @Override
+    protected boolean connectDeviceWithoutPackageName(@NonNull MediaDevice device) {
+        final RoutingSessionInfo info = mRouterManager.getSystemRoutingSession(null);
+        if (info != null) {
+            mRouterManager.transfer(info, device.mRouteInfo);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    protected void selectRoute(@NonNull MediaRoute2Info route, @NonNull RoutingSessionInfo info) {
+        mRouterManager.selectRoute(info, route);
+    }
+
+    @Override
+    protected void deselectRoute(@NonNull MediaRoute2Info route, @NonNull RoutingSessionInfo info) {
+        mRouterManager.deselectRoute(info, route);
+    }
+
+    @Override
+    protected void releaseSession(@NonNull RoutingSessionInfo sessionInfo) {
+        mRouterManager.releaseSession(sessionInfo);
+    }
+
+    @Override
+    @NonNull
+    protected List<MediaRoute2Info> getSelectableRoutes(@NonNull RoutingSessionInfo info) {
+        return mRouterManager.getSelectableRoutes(info);
+    }
+
+    @Override
+    @NonNull
+    protected List<MediaRoute2Info> getDeselectableRoutes(@NonNull RoutingSessionInfo info) {
+        return mRouterManager.getDeselectableRoutes(info);
+    }
+
+    @Override
+    @NonNull
+    protected List<MediaRoute2Info> getSelectedRoutes(@NonNull RoutingSessionInfo info) {
+        return mRouterManager.getSelectedRoutes(info);
+    }
+
+    @Override
+    protected void setSessionVolume(@NonNull RoutingSessionInfo info, int volume) {
+        mRouterManager.setSessionVolume(info, volume);
+    }
+
+    @Override
+    protected void setRouteVolume(@NonNull MediaRoute2Info route, int volume) {
+        mRouterManager.setRouteVolume(route, volume);
+    }
+
+    @Override
+    @Nullable
+    protected RouteListingPreference getRouteListingPreference() {
+        return mRouterManager.getRouteListingPreference(mPackageName);
+    }
+
+    @Override
+    @NonNull
+    protected List<RoutingSessionInfo> getRoutingSessionsForPackage() {
+        return mRouterManager.getRoutingSessions(mPackageName);
+    }
+
+    @Override
+    @NonNull
+    protected List<RoutingSessionInfo> getRemoteSessions() {
+        return mRouterManager.getRemoteSessions();
+    }
+
+    @Nullable
+    @Override
+    protected RoutingSessionInfo getRoutingSessionById(@NonNull String sessionId) {
+        for (RoutingSessionInfo sessionInfo : getRemoteSessions()) {
+            if (TextUtils.equals(sessionInfo.getId(), sessionId)) {
+                return sessionInfo;
+            }
+        }
+
+        RoutingSessionInfo systemSession = mRouterManager.getSystemRoutingSession(null);
+
+        return TextUtils.equals(systemSession.getId(), sessionId) ? systemSession : null;
+    }
+
+    @Override
+    @NonNull
+    protected List<MediaRoute2Info> getAllRoutes() {
+        return mRouterManager.getAllRoutes();
+    }
+
+    @Override
+    @NonNull
+    protected List<MediaRoute2Info> getAvailableRoutesFromRouter() {
+        return mRouterManager.getAvailableRoutes(mPackageName);
+    }
+
+    @Override
+    @NonNull
+    protected List<MediaRoute2Info> getTransferableRoutes(@NonNull String packageName) {
+        return mRouterManager.getTransferableRoutes(packageName);
+    }
+
+    @VisibleForTesting
+    /* package */ final class RouterManagerCallback implements MediaRouter2Manager.Callback {
+
+        @Override
+        public void onRoutesUpdated() {
+            refreshDevices();
+        }
+
+        @Override
+        public void onPreferredFeaturesChanged(String packageName, List<String> preferredFeatures) {
+            if (TextUtils.equals(mPackageName, packageName)) {
+                refreshDevices();
+            }
+        }
+
+        @Override
+        public void onTransferred(RoutingSessionInfo oldSession, RoutingSessionInfo newSession) {
+            if (DEBUG) {
+                Log.d(
+                        TAG,
+                        "onTransferred() oldSession : "
+                                + oldSession.getName()
+                                + ", newSession : "
+                                + newSession.getName());
+            }
+            rebuildDeviceList();
+            notifyCurrentConnectedDeviceChanged();
+        }
+
+        /**
+         * Ignore callback here since we'll also receive{@link
+         * MediaRouter2Manager.Callback#onRequestFailed onRequestFailed} with reason code.
+         */
+        @Override
+        public void onTransferFailed(RoutingSessionInfo session, MediaRoute2Info route) {}
+
+        @Override
+        public void onRequestFailed(int reason) {
+            dispatchOnRequestFailed(reason);
+        }
+
+        @Override
+        public void onSessionUpdated(RoutingSessionInfo sessionInfo) {
+            refreshDevices();
+        }
+
+        @Override
+        public void onSessionReleased(@NonNull RoutingSessionInfo session) {
+            refreshDevices();
+        }
+
+        @Override
+        public void onRouteListingPreferenceUpdated(
+                String packageName, RouteListingPreference routeListingPreference) {
+            if (!TextUtils.equals(mPackageName, packageName)) {
+                return;
+            }
+            notifyRouteListingPreferenceUpdated(routeListingPreference);
+            refreshDevices();
+        }
+    }
+}
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java
index a9d15f3..9234d37 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java
@@ -50,7 +50,6 @@
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.media.MediaRoute2Info;
-import android.media.MediaRouter2Manager;
 import android.media.NearbyDevice;
 import android.media.RouteListingPreference;
 import android.os.Build;
@@ -116,15 +115,16 @@
 
     protected final Context mContext;
     protected final MediaRoute2Info mRouteInfo;
-    protected final MediaRouter2Manager mRouterManager;
     protected final RouteListingPreference.Item mItem;
     protected final String mPackageName;
 
-    MediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
-            String packageName, RouteListingPreference.Item item) {
+    MediaDevice(
+            Context context,
+            MediaRoute2Info info,
+            String packageName,
+            RouteListingPreference.Item item) {
         mContext = context;
         mRouteInfo = info;
-        mRouterManager = routerManager;
         mPackageName = packageName;
         mItem = item;
         setType(info);
@@ -306,20 +306,6 @@
     public abstract boolean isConnected();
 
     /**
-     * Request to set volume.
-     *
-     * @param volume is the new value.
-     */
-
-    public void requestSetVolume(int volume) {
-        if (mRouteInfo == null) {
-            Log.w(TAG, "Unable to set volume. RouteInfo is empty");
-            return;
-        }
-        mRouterManager.setRouteVolume(mRouteInfo, volume);
-    }
-
-    /**
      * Get max volume from MediaDevice.
      *
      * @return max volume.
@@ -393,21 +379,6 @@
     }
 
     /**
-     * Transfer MediaDevice for media
-     *
-     * @return result of transfer media
-     */
-    public boolean connect() {
-        if (mRouteInfo == null) {
-            Log.w(TAG, "Unable to connect. RouteInfo is empty");
-            return false;
-        }
-        setConnectedRecord();
-        mRouterManager.transfer(mPackageName, mRouteInfo);
-        return true;
-    }
-
-    /**
      * Stop transfer MediaDevice
      */
     public void disconnect() {
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/NoOpInfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/NoOpInfoMediaManager.java
new file mode 100644
index 0000000..9d578bc
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/media/NoOpInfoMediaManager.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.media;
+
+import android.app.Notification;
+import android.content.Context;
+import android.media.MediaRoute2Info;
+import android.media.RouteListingPreference;
+import android.media.RoutingSessionInfo;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * No-op implementation of {@link InfoMediaManager}.
+ *
+ * <p>This implementation is used when {@link RouterInfoMediaManager} throws a {@link
+ * InfoMediaManager.PackageNotAvailableException}.
+ */
+// TODO - b/293578081: Remove once PackageNotAvailableException is propagated to library clients.
+/* package */ final class NoOpInfoMediaManager extends InfoMediaManager {
+
+    NoOpInfoMediaManager(
+            Context context,
+            String packageName,
+            Notification notification,
+            LocalBluetoothManager localBluetoothManager) {
+        super(context, packageName, notification, localBluetoothManager);
+    }
+
+    @Override
+    public void stopScan() {
+        // Do nothing.
+    }
+
+    @Override
+    protected void startScanOnRouter() {
+        // Do nothing.
+    }
+
+    @Override
+    protected boolean connectDeviceWithoutPackageName(@NonNull MediaDevice device) {
+        return false;
+    }
+
+    @Override
+    protected void transferToRoute(@NonNull MediaRoute2Info route) {
+        // Do nothing.
+    }
+
+    @Override
+    protected void selectRoute(@NonNull MediaRoute2Info route, @NonNull RoutingSessionInfo info) {
+        // Do nothing.
+    }
+
+    @Override
+    protected void deselectRoute(@NonNull MediaRoute2Info route, @NonNull RoutingSessionInfo info) {
+        // Do nothing.
+    }
+
+    @Override
+    protected void releaseSession(@NonNull RoutingSessionInfo sessionInfo) {
+        // Do nothing.
+    }
+
+    @NonNull
+    @Override
+    protected List<MediaRoute2Info> getSelectableRoutes(@NonNull RoutingSessionInfo info) {
+        return Collections.emptyList();
+    }
+
+    @NonNull
+    @Override
+    protected List<MediaRoute2Info> getDeselectableRoutes(@NonNull RoutingSessionInfo info) {
+        return Collections.emptyList();
+    }
+
+    @NonNull
+    @Override
+    protected List<MediaRoute2Info> getSelectedRoutes(@NonNull RoutingSessionInfo info) {
+        return Collections.emptyList();
+    }
+
+    @Override
+    protected void setSessionVolume(@NonNull RoutingSessionInfo info, int volume) {
+        // Do nothing.
+    }
+
+    @Override
+    protected void setRouteVolume(@NonNull MediaRoute2Info route, int volume) {
+        // Do nothing.
+    }
+
+    @Nullable
+    @Override
+    protected RouteListingPreference getRouteListingPreference() {
+        return null;
+    }
+
+    @NonNull
+    @Override
+    protected List<RoutingSessionInfo> getRemoteSessions() {
+        return Collections.emptyList();
+    }
+
+    @NonNull
+    @Override
+    protected List<RoutingSessionInfo> getRoutingSessionsForPackage() {
+        return Collections.emptyList();
+    }
+
+    @Nullable
+    @Override
+    protected RoutingSessionInfo getRoutingSessionById(@NonNull String sessionId) {
+        return null;
+    }
+
+    @NonNull
+    @Override
+    protected List<MediaRoute2Info> getAllRoutes() {
+        return Collections.emptyList();
+    }
+
+    @NonNull
+    @Override
+    protected List<MediaRoute2Info> getAvailableRoutesFromRouter() {
+        return Collections.emptyList();
+    }
+
+    @NonNull
+    @Override
+    protected List<MediaRoute2Info> getTransferableRoutes(@NonNull String packageName) {
+        return Collections.emptyList();
+    }
+}
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java
index accd88c..41afc7b 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java
@@ -29,7 +29,6 @@
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.media.MediaRoute2Info;
-import android.media.MediaRouter2Manager;
 import android.media.RouteListingPreference;
 
 import androidx.annotation.VisibleForTesting;
@@ -52,14 +51,16 @@
 
     private final DeviceIconUtil mDeviceIconUtil;
 
-    PhoneMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
-            String packageName) {
-        this(context, routerManager, info, packageName, null);
+    PhoneMediaDevice(Context context, MediaRoute2Info info, String packageName) {
+        this(context, info, packageName, null);
     }
 
-    PhoneMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
-            String packageName, RouteListingPreference.Item item) {
-        super(context, routerManager, info, packageName, item);
+    PhoneMediaDevice(
+            Context context,
+            MediaRoute2Info info,
+            String packageName,
+            RouteListingPreference.Item item) {
+        super(context, info, packageName, item);
         mDeviceIconUtil = new DeviceIconUtil();
         initDeviceRecord();
     }
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/RouterInfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/RouterInfoMediaManager.java
new file mode 100644
index 0000000..70956e9
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/media/RouterInfoMediaManager.java
@@ -0,0 +1,320 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.media;
+
+import android.annotation.SuppressLint;
+import android.app.Notification;
+import android.content.Context;
+import android.media.MediaRoute2Info;
+import android.media.MediaRouter2;
+import android.media.MediaRouter2.RoutingController;
+import android.media.MediaRouter2Manager;
+import android.media.RouteDiscoveryPreference;
+import android.media.RouteListingPreference;
+import android.media.RoutingSessionInfo;
+import android.text.TextUtils;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.stream.Collectors;
+
+/** Implements {@link InfoMediaManager} using {@link MediaRouter2}. */
+@SuppressLint("MissingPermission")
+public final class RouterInfoMediaManager extends InfoMediaManager {
+
+    private static final String TAG = "RouterInfoMediaManager";
+
+    private final MediaRouter2 mRouter;
+    private final MediaRouter2Manager mRouterManager;
+
+    private final Executor mExecutor = Executors.newSingleThreadExecutor();
+
+    private final RouteCallback mRouteCallback = new RouteCallback();
+    private final TransferCallback mTransferCallback = new TransferCallback();
+    private final ControllerCallback mControllerCallback = new ControllerCallback();
+    private final RouteListingPreferenceCallback mRouteListingPreferenceCallback =
+            new RouteListingPreferenceCallback();
+
+    // TODO: b/192657812 - Create factory method in InfoMediaManager to return
+    //      RouterInfoMediaManager or ManagerInfoMediaManager based on flag.
+    public RouterInfoMediaManager(
+            Context context,
+            String packageName,
+            Notification notification,
+            LocalBluetoothManager localBluetoothManager) throws PackageNotAvailableException {
+        super(context, packageName, notification, localBluetoothManager);
+
+        // TODO: b/291277292 - Change optional package name for a mandatory uid.
+        if (packageName == null) {
+            packageName = context.getPackageName();
+        }
+
+        mRouter = MediaRouter2.getInstance(context, packageName);
+
+        if (mRouter == null) {
+            throw new PackageNotAvailableException(
+                    "Package name " + packageName + " does not exist.");
+        }
+        mRouterManager = MediaRouter2Manager.getInstance(context);
+    }
+
+    @Override
+    protected void startScanOnRouter() {
+        mRouter.registerRouteCallback(mExecutor, mRouteCallback, RouteDiscoveryPreference.EMPTY);
+        mRouter.registerRouteListingPreferenceCallback(mExecutor, mRouteListingPreferenceCallback);
+        mRouter.registerTransferCallback(mExecutor, mTransferCallback);
+        mRouter.registerControllerCallback(mExecutor, mControllerCallback);
+        mRouter.startScan();
+    }
+
+    @Override
+    public void stopScan() {
+        mRouter.stopScan();
+        mRouter.unregisterControllerCallback(mControllerCallback);
+        mRouter.unregisterTransferCallback(mTransferCallback);
+        mRouter.unregisterRouteListingPreferenceCallback(mRouteListingPreferenceCallback);
+        mRouter.unregisterRouteCallback(mRouteCallback);
+    }
+
+    @Override
+    protected boolean connectDeviceWithoutPackageName(@NonNull MediaDevice device) {
+        if (device.mRouteInfo == null) {
+            return false;
+        }
+
+        RoutingController controller = mRouter.getSystemController();
+        mRouter.transfer(controller, device.mRouteInfo);
+        return true;
+    }
+
+    @Override
+    protected void transferToRoute(@NonNull MediaRoute2Info route) {
+        mRouter.transferTo(route);
+    }
+
+    @Override
+    protected void selectRoute(@NonNull MediaRoute2Info route, @NonNull RoutingSessionInfo info) {
+        RoutingController controller = getControllerForSession(info);
+        if (controller != null) {
+            controller.selectRoute(route);
+        }
+    }
+
+    @Override
+    protected void deselectRoute(@NonNull MediaRoute2Info route, @NonNull RoutingSessionInfo info) {
+        RoutingController controller = getControllerForSession(info);
+        if (controller != null) {
+            controller.deselectRoute(route);
+        }
+    }
+
+    @Override
+    protected void releaseSession(@NonNull RoutingSessionInfo sessionInfo) {
+        RoutingController controller = getControllerForSession(sessionInfo);
+        if (controller != null) {
+            controller.release();
+        }
+    }
+
+    @NonNull
+    @Override
+    protected List<MediaRoute2Info> getSelectableRoutes(@NonNull RoutingSessionInfo info) {
+        RoutingController controller = getControllerForSession(info);
+        if (controller == null) {
+            return Collections.emptyList();
+        }
+
+        // Filter out selected routes.
+        List<String> selectedRouteIds = controller.getRoutingSessionInfo().getSelectedRoutes();
+        return controller.getSelectableRoutes().stream()
+                .filter(route -> !selectedRouteIds.contains(route.getId()))
+                .collect(Collectors.toList());
+    }
+
+    @NonNull
+    @Override
+    protected List<MediaRoute2Info> getDeselectableRoutes(@NonNull RoutingSessionInfo info) {
+        RoutingController controller = getControllerForSession(info);
+        if (controller == null) {
+            return Collections.emptyList();
+        }
+
+        return controller.getDeselectableRoutes();
+    }
+
+    @NonNull
+    @Override
+    protected List<MediaRoute2Info> getSelectedRoutes(@NonNull RoutingSessionInfo info) {
+        RoutingController controller = getControllerForSession(info);
+        if (controller == null) {
+            return Collections.emptyList();
+        }
+        return controller.getSelectedRoutes();
+    }
+
+    @Override
+    protected void setSessionVolume(@NonNull RoutingSessionInfo info, int volume) {
+        // TODO: b/291277292 - Implement MediaRouter2-based solution. Keeping MR2Manager call as
+        //      MR2 filters information by package name.
+        mRouterManager.setSessionVolume(info, volume);
+    }
+
+    @Override
+    protected void setRouteVolume(@NonNull MediaRoute2Info route, int volume) {
+        mRouter.setRouteVolume(route, volume);
+    }
+
+    @Nullable
+    @Override
+    protected RouteListingPreference getRouteListingPreference() {
+        return mRouter.getRouteListingPreference();
+    }
+
+    @NonNull
+    @Override
+    protected List<RoutingSessionInfo> getRemoteSessions() {
+        // TODO: b/291277292 - Implement MediaRouter2-based solution. Keeping MR2Manager call as
+        //      MR2 filters information by package name.
+        return mRouterManager.getRemoteSessions();
+    }
+
+    @NonNull
+    @Override
+    protected List<RoutingSessionInfo> getRoutingSessionsForPackage() {
+        return mRouter.getControllers().stream()
+                .map(RoutingController::getRoutingSessionInfo)
+                .collect(Collectors.toList());
+    }
+
+    @Nullable
+    @Override
+    protected RoutingSessionInfo getRoutingSessionById(@NonNull String sessionId) {
+        // TODO: b/291277292 - Implement MediaRouter2-based solution. Keeping MR2Manager calls as
+        //      MR2 filters information by package name.
+
+        for (RoutingSessionInfo sessionInfo : getRemoteSessions()) {
+            if (TextUtils.equals(sessionInfo.getId(), sessionId)) {
+                return sessionInfo;
+            }
+        }
+
+        RoutingSessionInfo systemSession = mRouterManager.getSystemRoutingSession(null);
+        return TextUtils.equals(systemSession.getId(), sessionId) ? systemSession : null;
+    }
+
+    @NonNull
+    @Override
+    protected List<MediaRoute2Info> getAllRoutes() {
+        return mRouter.getAllRoutes();
+    }
+
+    @NonNull
+    @Override
+    protected List<MediaRoute2Info> getAvailableRoutesFromRouter() {
+        return mRouter.getRoutes();
+    }
+
+    @NonNull
+    @Override
+    protected List<MediaRoute2Info> getTransferableRoutes(@NonNull String packageName) {
+        List<MediaRoute2Info> transferableRoutes = new ArrayList<>();
+
+        List<RoutingController> controllers = mRouter.getControllers();
+        RoutingController activeController = controllers.get(controllers.size() - 1);
+        RoutingSessionInfo sessionInfo = activeController.getRoutingSessionInfo();
+        List<MediaRoute2Info> routes = mRouter.getRoutes();
+
+        for (MediaRoute2Info route : routes) {
+            boolean isCrossDeviceTransfer = sessionInfo.isSystemSession() ^ route.isSystemRoute();
+
+            // Always show remote routes if transfer is local -> remote or viceversa regardless of
+            // whether route is in transferable routes list.
+            if (sessionInfo.getTransferableRoutes().contains(route.getId())
+                    || isCrossDeviceTransfer) {
+                transferableRoutes.add(route);
+            }
+        }
+
+        return transferableRoutes;
+    }
+
+    @Nullable
+    private RoutingController getControllerForSession(@NonNull RoutingSessionInfo sessionInfo) {
+        return mRouter.getController(sessionInfo.getId());
+    }
+
+    private final class RouteCallback extends MediaRouter2.RouteCallback {
+        @Override
+        public void onRoutesUpdated(@NonNull List<MediaRoute2Info> routes) {
+            refreshDevices();
+        }
+
+        @Override
+        public void onPreferredFeaturesChanged(@NonNull List<String> preferredFeatures) {
+            refreshDevices();
+        }
+    }
+
+    private final class TransferCallback extends MediaRouter2.TransferCallback {
+        @Override
+        public void onTransfer(
+                @NonNull RoutingController oldController,
+                @NonNull RoutingController newController) {
+            rebuildDeviceList();
+            notifyCurrentConnectedDeviceChanged();
+        }
+
+        @Override
+        public void onTransferFailure(@NonNull MediaRoute2Info requestedRoute) {
+            // Do nothing.
+        }
+
+        @Override
+        public void onStop(@NonNull RoutingController controller) {
+            refreshDevices();
+        }
+
+        @Override
+        public void onRequestFailed(int reason) {
+            dispatchOnRequestFailed(reason);
+        }
+    }
+
+    private final class ControllerCallback extends MediaRouter2.ControllerCallback {
+        @Override
+        public void onControllerUpdated(@NonNull RoutingController controller) {
+            refreshDevices();
+        }
+    }
+
+    private final class RouteListingPreferenceCallback
+            extends MediaRouter2.RouteListingPreferenceCallback {
+        @Override
+        public void onRouteListingPreferenceChanged(@Nullable RouteListingPreference preference) {
+            notifyRouteListingPreferenceUpdated(preference);
+            refreshDevices();
+        }
+    }
+}
diff --git a/packages/SettingsLib/src/com/android/settingslib/mobile/dataservice/SubscriptionInfoEntity.java b/packages/SettingsLib/src/com/android/settingslib/mobile/dataservice/SubscriptionInfoEntity.java
index c40388f..361a2461 100644
--- a/packages/SettingsLib/src/com/android/settingslib/mobile/dataservice/SubscriptionInfoEntity.java
+++ b/packages/SettingsLib/src/com/android/settingslib/mobile/dataservice/SubscriptionInfoEntity.java
@@ -16,27 +16,23 @@
 
 package com.android.settingslib.mobile.dataservice;
 
-import static androidx.room.ForeignKey.CASCADE;
-
 import android.text.TextUtils;
 
-import java.util.Objects;
-
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.room.ColumnInfo;
 import androidx.room.Entity;
-import androidx.room.ForeignKey;
-import androidx.room.Index;
 import androidx.room.PrimaryKey;
 
+import java.util.Objects;
+
 @Entity(tableName = DataServiceUtils.SubscriptionInfoData.TABLE_NAME)
 public class SubscriptionInfoEntity {
     public SubscriptionInfoEntity(@NonNull String subId, int simSlotIndex, int carrierId,
             String displayName, String carrierName, int dataRoaming, String mcc, String mnc,
             String countryIso, boolean isEmbedded, int cardId, int portIndex,
             boolean isOpportunistic, @Nullable String groupUUID, int subscriptionType,
-            String uniqueName, boolean isSubscriptionVisible, String formattedPhoneNumber,
+            String uniqueName, boolean isSubscriptionVisible, @Nullable String formattedPhoneNumber,
             boolean isFirstRemovableSubscription, boolean isDefaultSubscriptionSelection,
             boolean isValidSubscription, boolean isUsableSubscription,
             boolean isActiveSubscriptionId, boolean isAvailableSubscription,
@@ -123,6 +119,7 @@
     public boolean isSubscriptionVisible;
 
     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_FORMATTED_PHONE_NUMBER)
+    @Nullable
     public String formattedPhoneNumber;
 
     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_IS_FIRST_REMOVABLE_SUBSCRIPTION)
@@ -165,33 +162,32 @@
 
     @Override
     public int hashCode() {
-        int result = 17;
-        result = 31 * result + subId.hashCode();
-        result = 31 * result + simSlotIndex;
-        result = 31 * result + carrierId;
-        result = 31 * result + displayName.hashCode();
-        result = 31 * result + carrierName.hashCode();
-        result = 31 * result + dataRoaming;
-        result = 31 * result + mcc.hashCode();
-        result = 31 * result + mnc.hashCode();
-        result = 31 * result + countryIso.hashCode();
-        result = 31 * result + Boolean.hashCode(isEmbedded);
-        result = 31 * result + cardId;
-        result = 31 * result + portIndex;
-        result = 31 * result + Boolean.hashCode(isOpportunistic);
-        result = 31 * result + groupUUID.hashCode();
-        result = 31 * result + subscriptionType;
-        result = 31 * result + uniqueName.hashCode();
-        result = 31 * result + Boolean.hashCode(isSubscriptionVisible);
-        result = 31 * result + formattedPhoneNumber.hashCode();
-        result = 31 * result + Boolean.hashCode(isFirstRemovableSubscription);
-        result = 31 * result + Boolean.hashCode(isDefaultSubscriptionSelection);
-        result = 31 * result + Boolean.hashCode(isValidSubscription);
-        result = 31 * result + Boolean.hashCode(isUsableSubscription);
-        result = 31 * result + Boolean.hashCode(isActiveSubscriptionId);
-        result = 31 * result + Boolean.hashCode(isAvailableSubscription);
-        result = 31 * result + Boolean.hashCode(isActiveDataSubscriptionId);
-        return result;
+        return Objects.hash(
+                subId,
+                simSlotIndex,
+                carrierId,
+                displayName,
+                carrierName,
+                dataRoaming,
+                mcc,
+                mnc,
+                countryIso,
+                isEmbedded,
+                cardId,
+                portIndex,
+                isOpportunistic,
+                groupUUID,
+                subscriptionType,
+                uniqueName,
+                isSubscriptionVisible,
+                formattedPhoneNumber,
+                isFirstRemovableSubscription,
+                isDefaultSubscriptionSelection,
+                isValidSubscription,
+                isUsableSubscription,
+                isActiveSubscriptionId,
+                isAvailableSubscription,
+                isActiveDataSubscriptionId);
     }
 
     @Override
diff --git a/packages/SettingsLib/src/com/android/settingslib/net/ChartDataLoader.java b/packages/SettingsLib/src/com/android/settingslib/net/ChartDataLoader.java
deleted file mode 100644
index 573922f..0000000
--- a/packages/SettingsLib/src/com/android/settingslib/net/ChartDataLoader.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS 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.net;
-
-import static android.net.NetworkStats.SET_DEFAULT;
-import static android.net.NetworkStats.SET_FOREGROUND;
-import static android.net.NetworkStats.TAG_NONE;
-
-import android.annotation.NonNull;
-import android.app.usage.NetworkStats;
-import android.app.usage.NetworkStatsManager;
-import android.content.AsyncTaskLoader;
-import android.content.Context;
-import android.net.NetworkTemplate;
-import android.os.Bundle;
-import android.os.RemoteException;
-
-import com.android.settingslib.AppItem;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Framework loader is deprecated, use the compat version instead.
- *
- * @deprecated
- */
-@Deprecated
-public class ChartDataLoader extends AsyncTaskLoader<ChartData> {
-    private static final String KEY_TEMPLATE = "template";
-    private static final String KEY_APP = "app";
-
-    private final NetworkStatsManager mNetworkStatsManager;
-    private final Bundle mArgs;
-
-    public static Bundle buildArgs(NetworkTemplate template, AppItem app) {
-        final Bundle args = new Bundle();
-        args.putParcelable(KEY_TEMPLATE, template);
-        args.putParcelable(KEY_APP, app);
-        return args;
-    }
-
-    public ChartDataLoader(Context context, NetworkStatsManager statsManager, Bundle args) {
-        super(context);
-        mNetworkStatsManager = statsManager;
-        mArgs = args;
-    }
-
-    @Override
-    protected void onStartLoading() {
-        super.onStartLoading();
-        forceLoad();
-    }
-
-    @Override
-    public ChartData loadInBackground() {
-        final NetworkTemplate template = mArgs.getParcelable(KEY_TEMPLATE);
-        final AppItem app = mArgs.getParcelable(KEY_APP);
-
-        try {
-            return loadInBackground(template, app);
-        } catch (RemoteException e) {
-            // since we can't do much without history, and we don't want to
-            // leave with half-baked UI, we bail hard.
-            throw new RuntimeException("problem reading network stats", e);
-        }
-    }
-
-    @NonNull
-    private List<NetworkStats.Bucket> convertToBuckets(@NonNull NetworkStats stats) {
-        final List<NetworkStats.Bucket> ret = new ArrayList<>();
-        while (stats.hasNextBucket()) {
-            final NetworkStats.Bucket bucket = new NetworkStats.Bucket();
-            stats.getNextBucket(bucket);
-            ret.add(bucket);
-        }
-        return ret;
-    }
-
-    private ChartData loadInBackground(NetworkTemplate template, AppItem app)
-            throws RemoteException {
-        final ChartData data = new ChartData();
-        data.network = convertToBuckets(mNetworkStatsManager.queryDetailsForDevice(
-                template, Long.MIN_VALUE, Long.MAX_VALUE));
-
-        if (app != null) {
-            // load stats for current uid and template
-            final int size = app.uids.size();
-            for (int i = 0; i < size; i++) {
-                final int uid = app.uids.keyAt(i);
-                data.detailDefault = collectHistoryForUid(
-                        template, uid, SET_DEFAULT, data.detailDefault);
-                data.detailForeground = collectHistoryForUid(
-                        template, uid, SET_FOREGROUND, data.detailForeground);
-            }
-
-            if (size > 0) {
-                data.detail = new ArrayList<>();
-                data.detail.addAll(data.detailDefault);
-                data.detail.addAll(data.detailForeground);
-            } else {
-                data.detailDefault = new ArrayList<>();
-                data.detailForeground = new ArrayList<>();
-                data.detail = new ArrayList<>();
-            }
-        }
-
-        return data;
-    }
-
-    @Override
-    protected void onStopLoading() {
-        super.onStopLoading();
-        cancelLoad();
-    }
-
-    @Override
-    protected void onReset() {
-        super.onReset();
-        cancelLoad();
-    }
-
-    /**
-     * Collect {@link List<NetworkStats.Bucket>} for the requested UID, combining with
-     * an existing {@link List<NetworkStats.Bucket>} if provided.
-     */
-    private List<NetworkStats.Bucket> collectHistoryForUid(
-            NetworkTemplate template, int uid, int set, List<NetworkStats.Bucket> existing) {
-        final List<NetworkStats.Bucket> history = convertToBuckets(
-                mNetworkStatsManager.queryDetailsForUidTagState(template,
-                        Long.MIN_VALUE, Long.MAX_VALUE, uid, TAG_NONE, set));
-
-        if (existing != null) {
-            existing.addAll(history);
-            return existing;
-        } else {
-            return history;
-        }
-    }
-}
diff --git a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
index 30c6645..d088c3b 100644
--- a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
+++ b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
@@ -23,7 +23,6 @@
 import android.app.usage.NetworkStats.Bucket;
 import android.app.usage.NetworkStatsManager;
 import android.content.Context;
-import android.net.ConnectivityManager;
 import android.net.NetworkPolicy;
 import android.net.NetworkPolicyManager;
 import android.net.NetworkTemplate;
@@ -95,17 +94,6 @@
         return null;
     }
 
-    public DataUsageInfo getDataUsageInfo() {
-        NetworkTemplate template = DataUsageUtils.getMobileTemplate(mContext, mSubscriptionId);
-
-        return getDataUsageInfo(template);
-    }
-
-    public DataUsageInfo getWifiDataUsageInfo() {
-        NetworkTemplate template = new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI).build();
-        return getDataUsageInfo(template);
-    }
-
     public DataUsageInfo getDataUsageInfo(NetworkTemplate template) {
         final NetworkPolicy policy = findNetworkPolicy(template);
         final long now = System.currentTimeMillis();
@@ -137,7 +125,7 @@
         } else {
             usage.warningLevel = getDefaultWarningLevel();
         }
-        if (usage != null && mNetworkController != null) {
+        if (mNetworkController != null) {
             usage.carrier = mNetworkController.getMobileDataNetworkName();
         }
         return usage;
@@ -170,9 +158,7 @@
         if (mPolicyManager == null || template == null) return null;
         final NetworkPolicy[] policies = mPolicyManager.getNetworkPolicies();
         if (policies == null) return null;
-        final int N = policies.length;
-        for (int i = 0; i < N; i++) {
-            final NetworkPolicy policy = policies[i];
+        for (final NetworkPolicy policy : policies) {
             if (policy != null && template.equals(policy.template)) {
                 return policy;
             }
@@ -180,17 +166,6 @@
         return null;
     }
 
-    private static String statsBucketToString(Bucket bucket) {
-        return bucket == null ? null : new StringBuilder("Entry[")
-            .append("bucketDuration=").append(bucket.getEndTimeStamp() - bucket.getStartTimeStamp())
-            .append(",bucketStart=").append(bucket.getStartTimeStamp())
-            .append(",rxBytes=").append(bucket.getRxBytes())
-            .append(",rxPackets=").append(bucket.getRxPackets())
-            .append(",txBytes=").append(bucket.getTxBytes())
-            .append(",txPackets=").append(bucket.getTxPackets())
-            .append(']').toString();
-    }
-
     @VisibleForTesting
     public TelephonyManager getTelephonyManager() {
         int subscriptionId = mSubscriptionId;
@@ -208,8 +183,8 @@
             }
         }
 
-        return mContext.getSystemService(
-                TelephonyManager.class).createForSubscriptionId(subscriptionId);
+        return mContext.getSystemService(TelephonyManager.class)
+                .createForSubscriptionId(subscriptionId);
     }
 
     public void setMobileDataEnabled(boolean enabled) {
@@ -230,28 +205,6 @@
         return getTelephonyManager().isDataEnabled();
     }
 
-    static int getNetworkType(NetworkTemplate networkTemplate) {
-        if (networkTemplate == null) {
-            return ConnectivityManager.TYPE_NONE;
-        }
-        final int matchRule = networkTemplate.getMatchRule();
-        switch (matchRule) {
-            case NetworkTemplate.MATCH_MOBILE:
-                return ConnectivityManager.TYPE_MOBILE;
-            case NetworkTemplate.MATCH_WIFI:
-                return  ConnectivityManager.TYPE_WIFI;
-            case NetworkTemplate.MATCH_ETHERNET:
-                return  ConnectivityManager.TYPE_ETHERNET;
-            default:
-                return ConnectivityManager.TYPE_MOBILE;
-        }
-    }
-
-    private String getActiveSubscriberId() {
-        final String actualSubscriberId = getTelephonyManager().getSubscriberId();
-        return actualSubscriberId;
-    }
-
     private String formatDateRange(long start, long end) {
         final int flags = FORMAT_SHOW_DATE | FORMAT_ABBREV_MONTH;
         synchronized (PERIOD_BUILDER) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageUtils.java b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageUtils.java
deleted file mode 100644
index 386a47a..0000000
--- a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageUtils.java
+++ /dev/null
@@ -1,107 +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.settingslib.net;
-
-import android.content.Context;
-import android.net.NetworkStats;
-import android.net.NetworkTemplate;
-import android.telephony.SubscriptionInfo;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.util.Log;
-
-import com.android.internal.util.ArrayUtils;
-
-import java.util.List;
-import java.util.Set;
-
-/**
- * Utils class for data usage
- */
-public class DataUsageUtils {
-    private static final String TAG = "DataUsageUtils";
-
-    /**
-     * Return mobile NetworkTemplate based on {@code subId}
-     */
-    public static NetworkTemplate getMobileTemplate(Context context, int subId) {
-        final TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
-        final int mobileDefaultSubId = telephonyManager.getSubscriptionId();
-
-        final SubscriptionManager subscriptionManager =
-                context.getSystemService(SubscriptionManager.class);
-        final List<SubscriptionInfo> subInfoList =
-                subscriptionManager.getAvailableSubscriptionInfoList();
-        if (subInfoList == null) {
-            Log.i(TAG, "Subscription is not inited: " + subId);
-            return getMobileTemplateForSubId(telephonyManager, mobileDefaultSubId);
-        }
-
-        for (SubscriptionInfo subInfo : subInfoList) {
-            if ((subInfo != null) && (subInfo.getSubscriptionId() == subId)) {
-                return getNormalizedMobileTemplate(telephonyManager, subId);
-            }
-        }
-        Log.i(TAG, "Subscription is not active: " + subId);
-        return getMobileTemplateForSubId(telephonyManager, mobileDefaultSubId);
-    }
-
-    private static NetworkTemplate getNormalizedMobileTemplate(
-            TelephonyManager telephonyManager, int subId) {
-        final NetworkTemplate mobileTemplate = getMobileTemplateForSubId(telephonyManager, subId);
-        final Set<String> mergedSubscriberIds = Set.of(telephonyManager
-                .createForSubscriptionId(subId).getMergedImsisFromGroup());
-        if (ArrayUtils.isEmpty(mergedSubscriberIds)) {
-            Log.i(TAG, "mergedSubscriberIds is null.");
-            return mobileTemplate;
-        }
-
-        return normalizeMobileTemplate(mobileTemplate, mergedSubscriberIds);
-    }
-
-    private static NetworkTemplate normalizeMobileTemplate(
-            NetworkTemplate template, Set<String> mergedSet) {
-        if (template.getSubscriberIds().isEmpty()) return template;
-        // The input template should have at most 1 subscriberId.
-        final String subscriberId = template.getSubscriberIds().iterator().next();
-
-        if (mergedSet.contains(subscriberId)) {
-            // Requested template subscriber is part of the merge group; return
-            // a template that matches all merged subscribers.
-            return new NetworkTemplate.Builder(template.getMatchRule())
-                    .setSubscriberIds(mergedSet)
-                    .setWifiNetworkKeys(template.getWifiNetworkKeys())
-                    .setMeteredness(NetworkStats.METERED_YES).build();
-        }
-
-        return template;
-    }
-
-    private static NetworkTemplate getMobileTemplateForSubId(
-            TelephonyManager telephonyManager, int subId) {
-        // Create template that matches any mobile network when the subscriberId is null.
-        String subscriberId = telephonyManager.getSubscriberId(subId);
-        return subscriberId != null
-                ? new NetworkTemplate.Builder(NetworkTemplate.MATCH_CARRIER)
-                .setSubscriberIds(Set.of(subscriberId))
-                .setMeteredness(NetworkStats.METERED_YES)
-                .build()
-                : new NetworkTemplate.Builder(NetworkTemplate.MATCH_MOBILE)
-                        .setMeteredness(NetworkStats.METERED_YES)
-                        .build();
-    }
-}
diff --git a/packages/SettingsLib/src/com/android/settingslib/qrcode/QrCodeGenerator.java b/packages/SettingsLib/src/com/android/settingslib/qrcode/QrCodeGenerator.java
index bc5824a..5c48c54 100644
--- a/packages/SettingsLib/src/com/android/settingslib/qrcode/QrCodeGenerator.java
+++ b/packages/SettingsLib/src/com/android/settingslib/qrcode/QrCodeGenerator.java
@@ -40,6 +40,19 @@
      */
     public static Bitmap encodeQrCode(String contents, int size)
             throws WriterException, IllegalArgumentException {
+        return encodeQrCode(contents, size, /*invert=*/false);
+    }
+
+    /**
+     * Generates a barcode image with {@code contents}.
+     *
+     * @param contents The contents to encode in the barcode
+     * @param size     The preferred image size in pixels
+     * @param invert   Whether to invert the black/white pixels (e.g. for dark mode)
+     * @return Barcode bitmap
+     */
+    public static Bitmap encodeQrCode(String contents, int size, boolean invert)
+            throws WriterException, IllegalArgumentException {
         final Map<EncodeHintType, Object> hints = new HashMap<>();
         if (!isIso88591(contents)) {
             hints.put(EncodeHintType.CHARACTER_SET, StandardCharsets.UTF_8.name());
@@ -48,9 +61,11 @@
         final BitMatrix qrBits = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE,
                 size, size, hints);
         final Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.RGB_565);
+        int setColor = invert ? Color.WHITE : Color.BLACK;
+        int unsetColor = invert ? Color.BLACK : Color.WHITE;
         for (int x = 0; x < size; x++) {
             for (int y = 0; y < size; y++) {
-                bitmap.setPixel(x, y, qrBits.get(x, y) ? Color.BLACK : Color.WHITE);
+                bitmap.setPixel(x, y, qrBits.get(x, y) ? setColor : unsetColor);
             }
         }
         return bitmap;
diff --git a/packages/SettingsLib/src/com/android/settingslib/users/CreateUserDialogController.java b/packages/SettingsLib/src/com/android/settingslib/users/CreateUserDialogController.java
index 3011d31..8d03f70 100644
--- a/packages/SettingsLib/src/com/android/settingslib/users/CreateUserDialogController.java
+++ b/packages/SettingsLib/src/com/android/settingslib/users/CreateUserDialogController.java
@@ -80,6 +80,7 @@
     private Bitmap mSavedPhoto;
     private String mSavedName;
     private Drawable mSavedDrawable;
+    private String mCachedDrawablePath;
     private String mUserName;
     private Drawable mNewUserIcon;
     private Boolean mIsAdmin;
@@ -117,6 +118,7 @@
         mUserNameView = null;
         mSuccessCallback = null;
         mCancelCallback = null;
+        mCachedDrawablePath = null;
         mCurrentState = INITIAL_DIALOG;
     }
 
@@ -124,13 +126,7 @@
      * Notifies that the containing activity or fragment was reinitialized.
      */
     public void onRestoreInstanceState(Bundle savedInstanceState) {
-        String pendingPhoto = savedInstanceState.getString(KEY_SAVED_PHOTO);
-        if (pendingPhoto != null) {
-            ThreadUtils.postOnBackgroundThread(() -> {
-                mSavedPhoto = EditUserPhotoController.loadNewUserPhotoBitmap(
-                        new File(pendingPhoto));
-            });
-        }
+        mCachedDrawablePath = savedInstanceState.getString(KEY_SAVED_PHOTO);
         mCurrentState = savedInstanceState.getInt(KEY_CURRENT_STATE);
         if (savedInstanceState.containsKey(KEY_IS_ADMIN)) {
             mIsAdmin = savedInstanceState.getBoolean(KEY_IS_ADMIN);
@@ -143,15 +139,12 @@
      * Notifies that the containing activity or fragment is saving its state for later use.
      */
     public void onSaveInstanceState(Bundle savedInstanceState) {
-        if (mUserCreationDialog != null && mEditUserPhotoController != null) {
-            // Bitmap cannot be stored into bundle because it may exceed parcel limit
-            // Store it in a temporary file instead
-            ThreadUtils.postOnBackgroundThread(() -> {
-                File file = mEditUserPhotoController.saveNewUserPhotoBitmap();
-                if (file != null) {
-                    savedInstanceState.putString(KEY_SAVED_PHOTO, file.getPath());
-                }
-            });
+        if (mUserCreationDialog != null && mEditUserPhotoController != null
+                && mCachedDrawablePath == null) {
+            mCachedDrawablePath = mEditUserPhotoController.getCachedDrawablePath();
+        }
+        if (mCachedDrawablePath != null) {
+            savedInstanceState.putString(KEY_SAVED_PHOTO, mCachedDrawablePath);
         }
         if (mIsAdmin != null) {
             savedInstanceState.putBoolean(KEY_IS_ADMIN, Boolean.TRUE.equals(mIsAdmin));
@@ -271,9 +264,10 @@
                 mGrantAdminView.setVisibility(View.GONE);
                 break;
             case CREATE_USER_AND_CLOSE:
-                mNewUserIcon = mEditUserPhotoController != null
+                mNewUserIcon = (mEditUserPhotoController != null
+                        && mEditUserPhotoController.getNewUserPhotoDrawable() != null)
                         ? mEditUserPhotoController.getNewUserPhotoDrawable()
-                        : null;
+                        : mSavedDrawable;
 
                 String newName = mUserNameView.getText().toString().trim();
                 String defaultName = mActivity.getString(R.string.user_new_user_name);
@@ -295,12 +289,17 @@
         }
     }
 
-    private Drawable getUserIcon(Drawable defaultUserIcon) {
-        if (mSavedPhoto != null) {
-            mSavedDrawable = CircleFramedDrawable.getInstance(mActivity, mSavedPhoto);
-            return mSavedDrawable;
+    private void setUserIcon(Drawable defaultUserIcon, ImageView userPhotoView) {
+        if (mCachedDrawablePath != null) {
+            ThreadUtils.postOnBackgroundThread(() -> {
+                mSavedPhoto = EditUserPhotoController.loadNewUserPhotoBitmap(
+                        new File(mCachedDrawablePath));
+                mSavedDrawable = CircleFramedDrawable.getInstance(mActivity, mSavedPhoto);
+                ThreadUtils.postOnMainThread(() -> userPhotoView.setImageDrawable(mSavedDrawable));
+            });
+        } else {
+            userPhotoView.setImageDrawable(defaultUserIcon);
         }
-        return defaultUserIcon;
     }
 
     private void addUserInfoEditView() {
@@ -312,10 +311,7 @@
         // if oldUserIcon param is null then we use a default gray user icon
         Drawable defaultUserIcon = UserIcons.getDefaultUserIcon(
                 mActivity.getResources(), UserHandle.USER_NULL, false);
-        // in case a new photo was selected and the activity got recreated we have to load the image
-        Drawable userIcon = getUserIcon(defaultUserIcon);
-        userPhotoView.setImageDrawable(userIcon);
-
+        setUserIcon(defaultUserIcon, userPhotoView);
         if (isChangePhotoRestrictedByBase(mActivity)) {
             // some users can't change their photos so we need to remove the suggestive icon
             mEditUserInfoView.findViewById(R.id.add_a_photo_icon).setVisibility(View.GONE);
diff --git a/packages/SettingsLib/src/com/android/settingslib/users/EditUserPhotoController.java b/packages/SettingsLib/src/com/android/settingslib/users/EditUserPhotoController.java
index 38cf383..3fb2f60 100644
--- a/packages/SettingsLib/src/com/android/settingslib/users/EditUserPhotoController.java
+++ b/packages/SettingsLib/src/com/android/settingslib/users/EditUserPhotoController.java
@@ -60,6 +60,7 @@
     private final File mImagesDir;
     private Bitmap mNewUserPhotoBitmap;
     private Drawable mNewUserPhotoDrawable;
+    private String mCachedDrawablePath;
 
     public EditUserPhotoController(Activity activity, ActivityStarter activityStarter,
             ImageView view, Bitmap savedBitmap, Drawable savedDrawable, String fileAuthority) {
@@ -156,6 +157,9 @@
     private void onPhotoProcessed(Bitmap bitmap) {
         if (bitmap != null) {
             mNewUserPhotoBitmap = bitmap;
+            ThreadUtils.postOnBackgroundThread(() -> {
+                mCachedDrawablePath = saveNewUserPhotoBitmap().getPath();
+            });
             mNewUserPhotoDrawable = CircleFramedDrawable
                     .getInstance(mImageView.getContext(), mNewUserPhotoBitmap);
             mImageView.setImageDrawable(mNewUserPhotoDrawable);
@@ -186,4 +190,8 @@
     void removeNewUserPhotoBitmapFile() {
         new File(mImagesDir, NEW_USER_PHOTO_FILE_NAME).delete();
     }
+
+    String getCachedDrawablePath() {
+        return mCachedDrawablePath;
+    }
 }
diff --git a/packages/SettingsLib/src/com/android/settingslib/widget/UpdatableListPreferenceDialogFragment.java b/packages/SettingsLib/src/com/android/settingslib/widget/UpdatableListPreferenceDialogFragment.java
deleted file mode 100644
index bd86d67..0000000
--- a/packages/SettingsLib/src/com/android/settingslib/widget/UpdatableListPreferenceDialogFragment.java
+++ /dev/null
@@ -1,174 +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.settingslib.widget;
-
-import android.content.res.TypedArray;
-import android.os.Bundle;
-import android.widget.ArrayAdapter;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.appcompat.app.AlertDialog.Builder;
-import androidx.preference.ListPreference;
-import androidx.preference.PreferenceDialogFragmentCompat;
-
-import com.android.settingslib.core.instrumentation.Instrumentable;
-
-import java.util.ArrayList;
-
-/**
- * {@link PreferenceDialogFragmentCompat} that updates the available options
- * when {@code onListPreferenceUpdated} is called."
- */
-public class UpdatableListPreferenceDialogFragment extends PreferenceDialogFragmentCompat implements
-        Instrumentable {
-
-    private static final String SAVE_STATE_INDEX = "UpdatableListPreferenceDialogFragment.index";
-    private static final String SAVE_STATE_ENTRIES =
-            "UpdatableListPreferenceDialogFragment.entries";
-    private static final String SAVE_STATE_ENTRY_VALUES =
-            "UpdatableListPreferenceDialogFragment.entryValues";
-    private static final String METRICS_CATEGORY_KEY = "metrics_category_key";
-    private ArrayAdapter mAdapter;
-    private int mClickedDialogEntryIndex;
-    private ArrayList<CharSequence> mEntries;
-    private CharSequence[] mEntryValues;
-    private int mMetricsCategory = METRICS_CATEGORY_UNKNOWN;
-
-    /**
-     * Creates a new instance of {@link UpdatableListPreferenceDialogFragment}.
-     */
-    public static UpdatableListPreferenceDialogFragment newInstance(
-            String key, int metricsCategory) {
-        UpdatableListPreferenceDialogFragment fragment =
-                new UpdatableListPreferenceDialogFragment();
-        Bundle args = new Bundle(1);
-        args.putString(ARG_KEY, key);
-        args.putInt(METRICS_CATEGORY_KEY, metricsCategory);
-        fragment.setArguments(args);
-        return fragment;
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        final Bundle bundle = getArguments();
-        mMetricsCategory =
-                bundle.getInt(METRICS_CATEGORY_KEY, METRICS_CATEGORY_UNKNOWN);
-        if (savedInstanceState == null) {
-            mEntries = new ArrayList<>();
-            setPreferenceData(getListPreference());
-        } else {
-            mClickedDialogEntryIndex = savedInstanceState.getInt(SAVE_STATE_INDEX, 0);
-            mEntries = savedInstanceState.getCharSequenceArrayList(SAVE_STATE_ENTRIES);
-            mEntryValues =
-                    savedInstanceState.getCharSequenceArray(SAVE_STATE_ENTRY_VALUES);
-        }
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putInt(SAVE_STATE_INDEX, mClickedDialogEntryIndex);
-        outState.putCharSequenceArrayList(SAVE_STATE_ENTRIES, mEntries);
-        outState.putCharSequenceArray(SAVE_STATE_ENTRY_VALUES, mEntryValues);
-    }
-
-    @Override
-    public void onDialogClosed(boolean positiveResult) {
-        if (positiveResult && mClickedDialogEntryIndex >= 0) {
-            final ListPreference preference = getListPreference();
-            final String value = mEntryValues[mClickedDialogEntryIndex].toString();
-            if (preference.callChangeListener(value)) {
-                preference.setValue(value);
-            }
-        }
-    }
-
-    @VisibleForTesting
-    void setAdapter(ArrayAdapter adapter) {
-        mAdapter = adapter;
-    }
-
-    @VisibleForTesting
-    void setEntries(ArrayList<CharSequence> entries) {
-        mEntries = entries;
-    }
-
-    @VisibleForTesting
-    ArrayAdapter getAdapter() {
-        return mAdapter;
-    }
-
-    @VisibleForTesting
-    void setMetricsCategory(Bundle bundle) {
-        mMetricsCategory =
-                bundle.getInt(METRICS_CATEGORY_KEY, METRICS_CATEGORY_UNKNOWN);
-    }
-
-    @Override
-    protected void onPrepareDialogBuilder(Builder builder) {
-        super.onPrepareDialogBuilder(builder);
-        final TypedArray a = getContext().obtainStyledAttributes(
-                null,
-                com.android.internal.R.styleable.AlertDialog,
-                com.android.internal.R.attr.alertDialogStyle, 0);
-
-        mAdapter = new ArrayAdapter<>(
-                getContext(),
-                a.getResourceId(
-                        com.android.internal.R.styleable.AlertDialog_singleChoiceItemLayout,
-                        com.android.internal.R.layout.select_dialog_singlechoice),
-                mEntries);
-
-        builder.setSingleChoiceItems(mAdapter, mClickedDialogEntryIndex,
-                (dialog, which) -> {
-                    mClickedDialogEntryIndex = which;
-                    onClick(dialog, -1);
-                    dialog.dismiss();
-                });
-        builder.setPositiveButton(null, null);
-        a.recycle();
-    }
-
-    @Override
-    public int getMetricsCategory() {
-        return mMetricsCategory;
-    }
-
-    @VisibleForTesting
-    ListPreference getListPreference() {
-        return (ListPreference) getPreference();
-    }
-
-    private void setPreferenceData(ListPreference preference) {
-        mEntries.clear();
-        mClickedDialogEntryIndex = preference.findIndexOfValue(preference.getValue());
-        for (CharSequence entry : preference.getEntries()) {
-            mEntries.add(entry);
-        }
-        mEntryValues = preference.getEntryValues();
-    }
-
-    /**
-     * Update new data set for list preference.
-     */
-    public void onListPreferenceUpdated(ListPreference preference) {
-        if (mAdapter != null) {
-            setPreferenceData(preference);
-            mAdapter.notifyDataSetChanged();
-        }
-    }
-}
diff --git a/packages/SettingsLib/tests/integ/Android.bp b/packages/SettingsLib/tests/integ/Android.bp
index ff3eeec..8970deb 100644
--- a/packages/SettingsLib/tests/integ/Android.bp
+++ b/packages/SettingsLib/tests/integ/Android.bp
@@ -48,11 +48,14 @@
         "androidx.test.core",
         "androidx.test.rules",
         "androidx.test.espresso.core",
+        "flag-junit",
         "mockito-target-minus-junit4",
+        "platform-test-annotations",
         "truth-prebuilt",
         "SettingsLibDeviceStateRotationLock",
         "SettingsLibSettingsSpinner",
         "SettingsLibUsageProgressBarPreference",
+        "settingslib_flags_lib",
     ],
 
     dxflags: ["--multi-dex"],
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/media/InfoMediaManagerIntegTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/media/InfoMediaManagerIntegTest.java
new file mode 100644
index 0000000..c647cbb
--- /dev/null
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/media/InfoMediaManagerIntegTest.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.media;
+
+import static com.android.settingslib.media.flags.Flags.FLAG_USE_MEDIA_ROUTER2_FOR_INFO_MEDIA_MANAGER;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.Manifest;
+import android.app.UiAutomation;
+import android.content.Context;
+import android.platform.test.annotations.RequiresFlagsDisabled;
+import android.platform.test.annotations.RequiresFlagsEnabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class InfoMediaManagerIntegTest {
+
+    private static final String FAKE_PACKAGE = "FAKE_PACKAGE";
+
+    private Context mContext;
+    private UiAutomation mUiAutomation;
+
+    @Rule
+    public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
+
+    @Before
+    public void setUp() {
+        mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+        mUiAutomation = InstrumentationRegistry.getInstrumentation().getUiAutomation();
+        mUiAutomation.adoptShellPermissionIdentity(Manifest.permission.MEDIA_CONTENT_CONTROL);
+    }
+
+    @After
+    public void tearDown() {
+        mUiAutomation.dropShellPermissionIdentity();
+    }
+
+    @Test
+    @RequiresFlagsEnabled(FLAG_USE_MEDIA_ROUTER2_FOR_INFO_MEDIA_MANAGER)
+    public void createInstance_withMR2FlagOn_returnsRouterInfoMediaManager() {
+        InfoMediaManager manager =
+                InfoMediaManager.createInstance(mContext, mContext.getPackageName(), null, null);
+        assertThat(manager).isInstanceOf(RouterInfoMediaManager.class);
+    }
+
+    @Test
+    @RequiresFlagsEnabled(FLAG_USE_MEDIA_ROUTER2_FOR_INFO_MEDIA_MANAGER)
+    public void createInstance_withMR2FlagOn_withFakePackage_returnsNoOpInfoMediaManager() {
+        InfoMediaManager manager =
+                InfoMediaManager.createInstance(mContext, FAKE_PACKAGE, null, null);
+        assertThat(manager).isInstanceOf(NoOpInfoMediaManager.class);
+    }
+
+    @Test
+    @RequiresFlagsEnabled(FLAG_USE_MEDIA_ROUTER2_FOR_INFO_MEDIA_MANAGER)
+    public void createInstance_withMR2FlagOn_withNullPackage_returnsRouterInfoMediaManager() {
+        InfoMediaManager manager = InfoMediaManager.createInstance(mContext, null, null, null);
+        assertThat(manager).isInstanceOf(RouterInfoMediaManager.class);
+    }
+
+    @Test
+    @RequiresFlagsDisabled(FLAG_USE_MEDIA_ROUTER2_FOR_INFO_MEDIA_MANAGER)
+    public void createInstance_withMR2FlagOff_returnsManagerInfoMediaManager() {
+        InfoMediaManager manager =
+                InfoMediaManager.createInstance(mContext, mContext.getPackageName(), null, null);
+        assertThat(manager).isInstanceOf(ManagerInfoMediaManager.class);
+    }
+}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HearingAidDeviceManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HearingAidDeviceManagerTest.java
index 56c8c5a..ea10944 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HearingAidDeviceManagerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HearingAidDeviceManagerTest.java
@@ -192,7 +192,7 @@
      * hearing aid info on the device.
      */
     @Test
-    public void initHearingAidDeviceIfNeeded_randomScanFilter_notToSetHearingAidInfo() {
+    public void initHearingAidDeviceIfNeeded_randomScanFilter_setHearingAidInfo() {
         when(mHearingAidProfile.getHiSyncId(mDevice1)).thenReturn(
                 BluetoothHearingAid.HI_SYNC_ID_INVALID);
         final ScanFilter scanFilter = new ScanFilter.Builder().build();
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java
index 5f53a92c..35223c2 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java
@@ -140,8 +140,8 @@
     public void updateState_settingsOn_shouldCheck() {
         when(mUserManager.isAdminUser()).thenReturn(true);
         when(mDevicePolicyManager.getProfileOwner()).thenReturn(TEST_COMPONENT_NAME);
-        when(mDevicePolicyManager.isUsbDataSignalingEnabledForUser(
-                UserHandle.myUserId())).thenReturn(true);
+        when(mDevicePolicyManager.isUsbDataSignalingEnabled(
+                )).thenReturn(true);
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.ADB_ENABLED, 1);
         mPreference.setChecked(false);
@@ -156,8 +156,8 @@
     public void updateState_settingsOff_shouldUncheck() {
         when(mUserManager.isAdminUser()).thenReturn(true);
         when(mDevicePolicyManager.getProfileOwner()).thenReturn(TEST_COMPONENT_NAME);
-        when(mDevicePolicyManager.isUsbDataSignalingEnabledForUser(
-                UserHandle.myUserId())).thenReturn(true);
+        when(mDevicePolicyManager.isUsbDataSignalingEnabled(
+                )).thenReturn(true);
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.ADB_ENABLED, 0);
         mPreference.setChecked(true);
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java
index 19a3db2..a072c17 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java
@@ -65,8 +65,7 @@
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application;
 
-        mInfoMediaDevice = new InfoMediaDevice(mContext, mRouterManager, mRouteInfo,
-                TEST_PACKAGE_NAME);
+        mInfoMediaDevice = new InfoMediaDevice(mContext, mRouteInfo, TEST_PACKAGE_NAME);
     }
 
     @Test
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java
index 7b8815e..2252b69 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java
@@ -96,7 +96,7 @@
     @Mock
     private ComponentName mComponentName;
 
-    private InfoMediaManager mInfoMediaManager;
+    private ManagerInfoMediaManager mInfoMediaManager;
     private Context mContext;
     private ShadowRouter2Manager mShadowRouter2Manager;
 
@@ -108,7 +108,8 @@
         doReturn(mMediaSessionManager).when(mContext).getSystemService(
                 Context.MEDIA_SESSION_SERVICE);
         mInfoMediaManager =
-                new InfoMediaManager(mContext, TEST_PACKAGE_NAME, null, mLocalBluetoothManager);
+                new ManagerInfoMediaManager(
+                        mContext, TEST_PACKAGE_NAME, null, mLocalBluetoothManager);
         mShadowRouter2Manager = ShadowRouter2Manager.getShadow();
         mInfoMediaManager.mRouterManager = MediaRouter2Manager.getInstance(mContext);
     }
@@ -426,7 +427,7 @@
         final MediaRoute2Info availableInfo4 = mock(MediaRoute2Info.class);
         when(availableInfo4.getId()).thenReturn(TEST_ID_1);
         when(availableInfo4.isSystemRoute()).thenReturn(true);
-        when(availableInfo4.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
+        when(availableInfo4.getClientPackageName()).thenReturn(packageName);
         availableRoutes.add(availableInfo4);
 
         when(mRouterManager.getAvailableRoutes(packageName)).thenReturn(availableRoutes);
@@ -546,8 +547,7 @@
     @Test
     public void connectDeviceWithoutPackageName_noSession_returnFalse() {
         final MediaRoute2Info info = mock(MediaRoute2Info.class);
-        final MediaDevice device = new InfoMediaDevice(mContext, mInfoMediaManager.mRouterManager,
-                info, TEST_PACKAGE_NAME);
+        final MediaDevice device = new InfoMediaDevice(mContext, info, TEST_PACKAGE_NAME);
 
         final List<RoutingSessionInfo> infos = new ArrayList<>();
 
@@ -623,9 +623,7 @@
         routingSessionInfos.add(info);
 
         final MediaRoute2Info route2Info = mock(MediaRoute2Info.class);
-        final MediaDevice device =
-                new InfoMediaDevice(mContext, mInfoMediaManager.mRouterManager, route2Info,
-                        TEST_PACKAGE_NAME);
+        final MediaDevice device = new InfoMediaDevice(mContext, route2Info, TEST_PACKAGE_NAME);
 
         final List<String> list = new ArrayList<>();
         list.add(TEST_ID);
@@ -646,9 +644,7 @@
         routingSessionInfos.add(info);
 
         final MediaRoute2Info route2Info = mock(MediaRoute2Info.class);
-        final MediaDevice device =
-                new InfoMediaDevice(mContext, mInfoMediaManager.mRouterManager, route2Info,
-                        TEST_PACKAGE_NAME);
+        final MediaDevice device = new InfoMediaDevice(mContext, route2Info, TEST_PACKAGE_NAME);
 
         final List<String> list = new ArrayList<>();
         list.add("fake_id");
@@ -678,9 +674,7 @@
         routingSessionInfos.add(info);
 
         final MediaRoute2Info route2Info = mock(MediaRoute2Info.class);
-        final MediaDevice device =
-                new InfoMediaDevice(mContext, mInfoMediaManager.mRouterManager, route2Info,
-                        TEST_PACKAGE_NAME);
+        final MediaDevice device = new InfoMediaDevice(mContext, route2Info, TEST_PACKAGE_NAME);
 
         final List<String> list = new ArrayList<>();
         list.add(TEST_ID);
@@ -701,9 +695,7 @@
         routingSessionInfos.add(info);
 
         final MediaRoute2Info route2Info = mock(MediaRoute2Info.class);
-        final MediaDevice device =
-                new InfoMediaDevice(mContext, mInfoMediaManager.mRouterManager, route2Info,
-                        TEST_PACKAGE_NAME);
+        final MediaDevice device = new InfoMediaDevice(mContext, route2Info, TEST_PACKAGE_NAME);
 
         final List<String> list = new ArrayList<>();
         list.add("fake_id");
@@ -722,7 +714,7 @@
     public void getSelectableMediaDevice_packageNameIsNull_returnFalse() {
         mInfoMediaManager.mPackageName = null;
 
-        assertThat(mInfoMediaManager.getSelectableMediaDevice()).isEmpty();
+        assertThat(mInfoMediaManager.getSelectableMediaDevices()).isEmpty();
     }
 
     @Test
@@ -734,14 +726,14 @@
         mShadowRouter2Manager.setRoutingSessions(routingSessionInfos);
         when(info.getClientPackageName()).thenReturn("com.fake.packagename");
 
-        assertThat(mInfoMediaManager.getSelectableMediaDevice()).isEmpty();
+        assertThat(mInfoMediaManager.getSelectableMediaDevices()).isEmpty();
     }
 
     @Test
     public void getDeselectableMediaDevice_packageNameIsNull_returnFalse() {
         mInfoMediaManager.mPackageName = null;
 
-        assertThat(mInfoMediaManager.getDeselectableMediaDevice()).isEmpty();
+        assertThat(mInfoMediaManager.getDeselectableMediaDevices()).isEmpty();
     }
 
     @Test
@@ -757,7 +749,7 @@
         when(mediaRoute2Info.getName()).thenReturn(TEST_NAME);
         when(mediaRoute2Info.getId()).thenReturn(TEST_ID);
 
-        final List<MediaDevice> mediaDevices = mInfoMediaManager.getDeselectableMediaDevice();
+        final List<MediaDevice> mediaDevices = mInfoMediaManager.getDeselectableMediaDevices();
 
         assertThat(mediaDevices.size()).isEqualTo(1);
         assertThat(mediaDevices.get(0).getName()).isEqualTo(TEST_NAME);
@@ -840,19 +832,12 @@
     }
 
     @Test
-    public void getActiveMediaSession_returnActiveSession() {
-        RoutingSessionInfo sysSessionInfo = mock(RoutingSessionInfo.class);
+    public void getRemoteSessions_returnsRemoteSessions() {
         final List<RoutingSessionInfo> infos = new ArrayList<>();
         infos.add(mock(RoutingSessionInfo.class));
-        final List<RoutingSessionInfo> activeSessionInfos = new ArrayList<>();
-        activeSessionInfos.add(sysSessionInfo);
-        activeSessionInfos.addAll(infos);
-
-        mShadowRouter2Manager.setSystemRoutingSession(sysSessionInfo);
         mShadowRouter2Manager.setRemoteSessions(infos);
 
-        assertThat(mInfoMediaManager.getActiveMediaSession())
-                .containsExactlyElementsIn(activeSessionInfos);
+        assertThat(mInfoMediaManager.getRemoteSessions()).containsExactlyElementsIn(infos);
     }
 
     @Test
@@ -1091,51 +1076,4 @@
         assertThat(device.getState()).isEqualTo(STATE_SELECTED);
         assertThat(mInfoMediaManager.getCurrentConnectedDevice()).isEqualTo(device);
     }
-
-    @Test
-    public void shouldDisableMediaOutput_infosIsEmpty_returnsTrue() {
-        mShadowRouter2Manager.setTransferableRoutes(new ArrayList<>());
-
-        assertThat(mInfoMediaManager.shouldDisableMediaOutput("test")).isTrue();
-    }
-
-    @Test
-    public void shouldDisableMediaOutput_infosSizeEqual1_returnsFalse() {
-        final MediaRoute2Info info = mock(MediaRoute2Info.class);
-        final List<MediaRoute2Info> infos = new ArrayList<>();
-        infos.add(info);
-        mShadowRouter2Manager.setTransferableRoutes(infos);
-
-        when(info.getType()).thenReturn(TYPE_REMOTE_SPEAKER);
-
-        assertThat(mInfoMediaManager.shouldDisableMediaOutput("test")).isFalse();
-    }
-
-    @Test
-    public void shouldDisableMediaOutput_infosSizeEqual1AndNotCastDevice_returnsFalse() {
-        final MediaRoute2Info info = mock(MediaRoute2Info.class);
-        final List<MediaRoute2Info> infos = new ArrayList<>();
-        infos.add(info);
-        mShadowRouter2Manager.setTransferableRoutes(infos);
-
-        when(info.getType()).thenReturn(TYPE_BUILTIN_SPEAKER);
-
-        assertThat(mInfoMediaManager.shouldDisableMediaOutput("test")).isFalse();
-    }
-
-
-    @Test
-    public void shouldDisableMediaOutput_infosSizeOverThan1_returnsFalse() {
-        final MediaRoute2Info info = mock(MediaRoute2Info.class);
-        final MediaRoute2Info info2 = mock(MediaRoute2Info.class);
-        final List<MediaRoute2Info> infos = new ArrayList<>();
-        infos.add(info);
-        infos.add(info2);
-        mShadowRouter2Manager.setTransferableRoutes(infos);
-
-        when(info.getType()).thenReturn(TYPE_REMOTE_SPEAKER);
-        when(info2.getType()).thenReturn(TYPE_REMOTE_SPEAKER);
-
-        assertThat(mInfoMediaManager.shouldDisableMediaOutput("test")).isFalse();
-    }
 }
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 d87fc54..926b41a 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
@@ -116,10 +116,8 @@
         when(mLocalProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile);
         when(mLocalProfileManager.getHearingAidProfile()).thenReturn(mHapProfile);
 
-        mInfoMediaDevice1 = spy(new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo1,
-                TEST_PACKAGE_NAME));
-        mInfoMediaDevice2 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo2,
-                TEST_PACKAGE_NAME);
+        mInfoMediaDevice1 = spy(new InfoMediaDevice(mContext, mRouteInfo1, TEST_PACKAGE_NAME));
+        mInfoMediaDevice2 = new InfoMediaDevice(mContext, mRouteInfo2, TEST_PACKAGE_NAME);
         mLocalMediaManager = new LocalMediaManager(mContext, mLocalBluetoothManager,
                 mInfoMediaManager, "com.test.packagename");
         mLocalMediaManager.mAudioManager = mAudioManager;
@@ -150,7 +148,7 @@
         assertThat(mLocalMediaManager.connectDevice(device)).isTrue();
 
         verify(currentDevice).disconnect();
-        verify(device).connect();
+        verify(mInfoMediaManager).connectToDevice(device);
     }
 
     @Test
@@ -435,9 +433,9 @@
         final RoutingSessionInfo info = mock(RoutingSessionInfo.class);
         when(info.getId()).thenReturn(TEST_SESSION_ID);
         routingSessionInfos.add(info);
-        when(mInfoMediaManager.getActiveMediaSession()).thenReturn(routingSessionInfos);
+        when(mInfoMediaManager.getRemoteSessions()).thenReturn(routingSessionInfos);
 
-        assertThat(mLocalMediaManager.getActiveMediaSession().get(0).getId())
+        assertThat(mLocalMediaManager.getRemoteRoutingSessions().get(0).getId())
                 .matches(TEST_SESSION_ID);
     }
 
@@ -508,7 +506,7 @@
         devices.add(currentDevice);
         mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);
 
-        verify(mInfoMediaDevice1).connect();
+        verify(mInfoMediaManager).connectToDevice(mInfoMediaDevice1);
     }
 
     @Test
@@ -546,7 +544,7 @@
         final RoutingSessionInfo info = mock(RoutingSessionInfo.class);
         when(info.getId()).thenReturn(TEST_SESSION_ID);
         routingSessionInfos.add(info);
-        when(mInfoMediaManager.getActiveMediaSession()).thenReturn(routingSessionInfos);
+        when(mInfoMediaManager.getRoutingSessionById(TEST_SESSION_ID)).thenReturn(info);
 
         mLocalMediaManager.adjustSessionVolume(TEST_SESSION_ID, 10);
 
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java
index f22e090..18055d9 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java
@@ -26,14 +26,12 @@
 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.bluetooth.BluetoothClass;
 import android.bluetooth.BluetoothDevice;
 import android.content.Context;
 import android.media.MediaRoute2Info;
-import android.media.MediaRouter2Manager;
 import android.media.NearbyDevice;
 import android.media.RouteListingPreference;
 import android.os.Parcel;
@@ -111,9 +109,6 @@
     private A2dpProfile mA2dpProfile;
     @Mock
     private BluetoothDevice mDevice;
-    @Mock
-    private MediaRouter2Manager mMediaRouter2Manager;
-
     private RouteListingPreference.Item mItem;
 
     private BluetoothMediaDevice mBluetoothMediaDevice1;
@@ -175,23 +170,18 @@
         when(mA2dpProfile.getActiveDevice()).thenReturn(mDevice);
 
         mBluetoothMediaDevice1 =
-                new BluetoothMediaDevice(mContext, mCachedDevice1, mMediaRouter2Manager,
-                        mBluetoothRouteInfo1, TEST_PACKAGE_NAME);
+                new BluetoothMediaDevice(
+                        mContext, mCachedDevice1, mBluetoothRouteInfo1, TEST_PACKAGE_NAME);
         mBluetoothMediaDevice2 =
-                new BluetoothMediaDevice(mContext, mCachedDevice2, mMediaRouter2Manager,
-                        mBluetoothRouteInfo2, TEST_PACKAGE_NAME);
+                new BluetoothMediaDevice(
+                        mContext, mCachedDevice2, mBluetoothRouteInfo2, TEST_PACKAGE_NAME);
         mBluetoothMediaDevice3 =
-                new BluetoothMediaDevice(mContext, mCachedDevice3, mMediaRouter2Manager,
-                        mBluetoothRouteInfo3, TEST_PACKAGE_NAME);
-        mInfoMediaDevice1 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo1,
-                TEST_PACKAGE_NAME);
-        mInfoMediaDevice2 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo2,
-                TEST_PACKAGE_NAME);
-        mInfoMediaDevice3 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo3,
-                TEST_PACKAGE_NAME);
-        mPhoneMediaDevice =
-                new PhoneMediaDevice(mContext, mMediaRouter2Manager, mPhoneRouteInfo,
-                        TEST_PACKAGE_NAME);
+                new BluetoothMediaDevice(
+                        mContext, mCachedDevice3, mBluetoothRouteInfo3, TEST_PACKAGE_NAME);
+        mInfoMediaDevice1 = new InfoMediaDevice(mContext, mRouteInfo1, TEST_PACKAGE_NAME);
+        mInfoMediaDevice2 = new InfoMediaDevice(mContext, mRouteInfo2, TEST_PACKAGE_NAME);
+        mInfoMediaDevice3 = new InfoMediaDevice(mContext, mRouteInfo3, TEST_PACKAGE_NAME);
+        mPhoneMediaDevice = new PhoneMediaDevice(mContext, mPhoneRouteInfo, TEST_PACKAGE_NAME);
     }
 
     @Test
@@ -257,7 +247,7 @@
     public void compareTo_lastSelected_others_lastSelectedFirst() {
         mMediaDevices.add(mBluetoothMediaDevice1);
         mMediaDevices.add(mBluetoothMediaDevice2);
-        mBluetoothMediaDevice2.connect();
+        mBluetoothMediaDevice2.setConnectedRecord();
 
         assertThat(mMediaDevices.get(0)).isEqualTo(mBluetoothMediaDevice1);
         Collections.sort(mMediaDevices, COMPARATOR);
@@ -268,9 +258,9 @@
     public void compareTo_connectionRecord_sortByRecord() {
         mMediaDevices.add(mBluetoothMediaDevice1);
         mMediaDevices.add(mBluetoothMediaDevice2);
-        mBluetoothMediaDevice1.connect();
-        mBluetoothMediaDevice2.connect();
-        mBluetoothMediaDevice2.connect();
+        mBluetoothMediaDevice1.setConnectedRecord();
+        mBluetoothMediaDevice2.setConnectedRecord();
+        mBluetoothMediaDevice2.setConnectedRecord();
         // Reset last selected record
         ConnectionRecordManager.getInstance().setConnectionRecord(mContext, null, 0);
 
@@ -287,9 +277,9 @@
         mMediaDevices.add(mBluetoothMediaDevice2);
         when(mCachedDevice2.isConnected()).thenReturn(false);
 
-        mBluetoothMediaDevice1.connect();
-        mBluetoothMediaDevice2.connect();
-        mBluetoothMediaDevice2.connect();
+        mBluetoothMediaDevice1.setConnectedRecord();
+        mBluetoothMediaDevice2.setConnectedRecord();
+        mBluetoothMediaDevice2.setConnectedRecord();
         // Reset last selected record
         ConnectionRecordManager.getInstance().setConnectionRecord(mContext, null, 0);
 
@@ -325,8 +315,8 @@
         final MediaRoute2Info phoneRouteInfo = mock(MediaRoute2Info.class);
         when(phoneRouteInfo.getType()).thenReturn(TYPE_WIRED_HEADPHONES);
 
-        final PhoneMediaDevice phoneMediaDevice = new PhoneMediaDevice(mContext,
-                mMediaRouter2Manager, phoneRouteInfo, TEST_PACKAGE_NAME);
+        final PhoneMediaDevice phoneMediaDevice =
+                new PhoneMediaDevice(mContext, phoneRouteInfo, TEST_PACKAGE_NAME);
 
         mMediaDevices.add(mBluetoothMediaDevice1);
         mMediaDevices.add(phoneMediaDevice);
@@ -341,8 +331,8 @@
         final MediaRoute2Info phoneRouteInfo = mock(MediaRoute2Info.class);
         when(phoneRouteInfo.getType()).thenReturn(TYPE_WIRED_HEADPHONES);
 
-        final PhoneMediaDevice phoneMediaDevice = new PhoneMediaDevice(mContext,
-                mMediaRouter2Manager, phoneRouteInfo, TEST_PACKAGE_NAME);
+        final PhoneMediaDevice phoneMediaDevice =
+                new PhoneMediaDevice(mContext, phoneRouteInfo, TEST_PACKAGE_NAME);
 
         mMediaDevices.add(mInfoMediaDevice1);
         mMediaDevices.add(phoneMediaDevice);
@@ -403,13 +393,13 @@
         mMediaDevices.add(mInfoMediaDevice2);
         mMediaDevices.add(mInfoMediaDevice3);
         mMediaDevices.add(mPhoneMediaDevice);
-        mBluetoothMediaDevice3.connect();
-        mBluetoothMediaDevice2.connect();
-        mBluetoothMediaDevice2.connect();
-        mInfoMediaDevice3.connect();
-        mInfoMediaDevice2.connect();
-        mInfoMediaDevice2.connect();
-        mInfoMediaDevice1.connect();
+        mBluetoothMediaDevice3.setConnectedRecord();
+        mBluetoothMediaDevice2.setConnectedRecord();
+        mBluetoothMediaDevice2.setConnectedRecord();
+        mInfoMediaDevice3.setConnectedRecord();
+        mInfoMediaDevice2.setConnectedRecord();
+        mInfoMediaDevice2.setConnectedRecord();
+        mInfoMediaDevice1.setConnectedRecord();
 
         Collections.sort(mMediaDevices, COMPARATOR);
         assertThat(mMediaDevices.get(0)).isEqualTo(mPhoneMediaDevice);
@@ -443,15 +433,15 @@
         mMediaDevices.add(mInfoMediaDevice2);
         mMediaDevices.add(mInfoMediaDevice3);
         mMediaDevices.add(mPhoneMediaDevice);
-        mBluetoothMediaDevice3.connect();
-        mBluetoothMediaDevice2.connect();
-        mBluetoothMediaDevice2.connect();
-        mBluetoothMediaDevice2.connect();
-        mBluetoothMediaDevice2.connect();
-        mInfoMediaDevice3.connect();
-        mInfoMediaDevice2.connect();
-        mInfoMediaDevice2.connect();
-        mInfoMediaDevice1.connect();
+        mBluetoothMediaDevice3.setConnectedRecord();
+        mBluetoothMediaDevice2.setConnectedRecord();
+        mBluetoothMediaDevice2.setConnectedRecord();
+        mBluetoothMediaDevice2.setConnectedRecord();
+        mBluetoothMediaDevice2.setConnectedRecord();
+        mInfoMediaDevice3.setConnectedRecord();
+        mInfoMediaDevice2.setConnectedRecord();
+        mInfoMediaDevice2.setConnectedRecord();
+        mInfoMediaDevice1.setConnectedRecord();
 
         Collections.sort(mMediaDevices, COMPARATOR);
         assertThat(mMediaDevices.get(0)).isEqualTo(mPhoneMediaDevice);
@@ -464,13 +454,6 @@
     }
 
     @Test
-    public void connect_shouldSelectRoute() {
-        mInfoMediaDevice1.connect();
-
-        verify(mMediaRouter2Manager).transfer(TEST_PACKAGE_NAME, mRouteInfo1);
-    }
-
-    @Test
     public void getClientPackageName_returnPackageName() {
         when(mRouteInfo1.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);
 
@@ -498,8 +481,9 @@
 
     @Test
     public void getFeatures_noRouteInfo_returnEmptyList() {
-        mBluetoothMediaDevice1 = new BluetoothMediaDevice(mContext, mCachedDevice1,
-                mMediaRouter2Manager, null /* MediaRoute2Info */, TEST_PACKAGE_NAME);
+        mBluetoothMediaDevice1 =
+                new BluetoothMediaDevice(
+                        mContext, mCachedDevice1, null /* MediaRoute2Info */, TEST_PACKAGE_NAME);
 
         assertThat(mBluetoothMediaDevice1.getFeatures().size()).isEqualTo(0);
     }
@@ -509,11 +493,15 @@
         mItem = new RouteListingPreference.Item.Builder(DEVICE_ADDRESS_1)
                 .setSelectionBehavior(SELECTION_BEHAVIOR_GO_TO_APP)
                 .build();
-        mBluetoothMediaDevice1 = new BluetoothMediaDevice(mContext, mCachedDevice1,
-                mMediaRouter2Manager, null /* MediaRoute2Info */, TEST_PACKAGE_NAME, mItem);
+        mBluetoothMediaDevice1 =
+                new BluetoothMediaDevice(
+                        mContext,
+                        mCachedDevice1,
+                        null /* MediaRoute2Info */,
+                        TEST_PACKAGE_NAME,
+                        mItem);
         mPhoneMediaDevice =
-                new PhoneMediaDevice(mContext, mMediaRouter2Manager, mPhoneRouteInfo,
-                        TEST_PACKAGE_NAME, mItem);
+                new PhoneMediaDevice(mContext, mPhoneRouteInfo, TEST_PACKAGE_NAME, mItem);
 
         assertThat(mBluetoothMediaDevice1.getSelectionBehavior()).isEqualTo(
                 SELECTION_BEHAVIOR_TRANSFER);
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java
index 00d1f76..1746bef 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java
@@ -56,8 +56,7 @@
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application;
 
-        mPhoneMediaDevice =
-                new PhoneMediaDevice(mContext, null, mInfo, null);
+        mPhoneMediaDevice = new PhoneMediaDevice(mContext, mInfo, null);
     }
 
     @Test
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/DataUsageUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/DataUsageUtilsTest.java
deleted file mode 100644
index 508dffc..0000000
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/DataUsageUtilsTest.java
+++ /dev/null
@@ -1,113 +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.settingslib.net;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.anyInt;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.net.NetworkTemplate;
-import android.os.ParcelUuid;
-import android.os.RemoteException;
-import android.telephony.SubscriptionInfo;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-import java.util.List;
-
-@RunWith(RobolectricTestRunner.class)
-public class DataUsageUtilsTest {
-
-    private static final int SUB_ID = 1;
-    private static final int SUB_ID_2 = 2;
-    private static final String SUBSCRIBER_ID = "Test Subscriber";
-    private static final String SUBSCRIBER_ID_2 = "Test Subscriber 2";
-
-    @Mock
-    private TelephonyManager mTelephonyManager;
-    @Mock
-    private SubscriptionManager mSubscriptionManager;
-    @Mock
-    private SubscriptionInfo mInfo1;
-    @Mock
-    private SubscriptionInfo mInfo2;
-    @Mock
-    private ParcelUuid mParcelUuid;
-    private Context mContext;
-    private List<SubscriptionInfo> mInfos;
-
-    @Before
-    public void setUp() throws RemoteException {
-        MockitoAnnotations.initMocks(this);
-
-        mContext = spy(RuntimeEnvironment.application);
-        when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
-        when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
-        when(mTelephonyManager.getSubscriberId(SUB_ID)).thenReturn(SUBSCRIBER_ID);
-        when(mTelephonyManager.getSubscriberId(SUB_ID_2)).thenReturn(SUBSCRIBER_ID_2);
-        when(mTelephonyManager.createForSubscriptionId(anyInt())).thenReturn(mTelephonyManager);
-        when(mSubscriptionManager.isActiveSubscriptionId(anyInt())).thenReturn(true);
-    }
-
-    @Test
-    @Ignore
-    public void getMobileTemplate_infoNull_returnMobileAll() {
-        when(mSubscriptionManager.isActiveSubscriptionId(SUB_ID)).thenReturn(false);
-
-        final NetworkTemplate networkTemplate = DataUsageUtils.getMobileTemplate(mContext, SUB_ID);
-        assertThat(networkTemplate.getSubscriberIds().contains(SUBSCRIBER_ID)).isTrue();
-        assertThat(networkTemplate.getSubscriberIds().contains(SUBSCRIBER_ID_2)).isFalse();
-    }
-
-    @Test
-    @Ignore
-    public void getMobileTemplate_groupUuidNull_returnMobileAll() {
-        when(mSubscriptionManager.getActiveSubscriptionInfo(SUB_ID)).thenReturn(mInfo1);
-        when(mInfo1.getGroupUuid()).thenReturn(null);
-        when(mTelephonyManager.getMergedImsisFromGroup())
-                .thenReturn(new String[] {SUBSCRIBER_ID});
-
-        final NetworkTemplate networkTemplate = DataUsageUtils.getMobileTemplate(mContext, SUB_ID);
-        assertThat(networkTemplate.getSubscriberIds().contains(SUBSCRIBER_ID)).isTrue();
-        assertThat(networkTemplate.getSubscriberIds().contains(SUBSCRIBER_ID_2)).isFalse();
-    }
-
-    @Test
-    @Ignore
-    public void getMobileTemplate_groupUuidExist_returnMobileMerged() {
-        when(mSubscriptionManager.getActiveSubscriptionInfo(SUB_ID)).thenReturn(mInfo1);
-        when(mInfo1.getGroupUuid()).thenReturn(mParcelUuid);
-        when(mTelephonyManager.getMergedImsisFromGroup())
-                .thenReturn(new String[] {SUBSCRIBER_ID, SUBSCRIBER_ID_2});
-
-        final NetworkTemplate networkTemplate = DataUsageUtils.getMobileTemplate(mContext, SUB_ID);
-        assertThat(networkTemplate.getSubscriberIds().contains(SUBSCRIBER_ID)).isTrue();
-        assertThat(networkTemplate.getSubscriberIds().contains(SUBSCRIBER_ID_2)).isTrue();
-    }
-}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/UpdatableListPreferenceDialogFragmentTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/UpdatableListPreferenceDialogFragmentTest.java
deleted file mode 100644
index ca0aa0d..0000000
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/UpdatableListPreferenceDialogFragmentTest.java
+++ /dev/null
@@ -1,98 +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.settingslib.widget;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-
-import android.content.Context;
-import android.widget.ArrayAdapter;
-
-import androidx.preference.ListPreference;
-
-import com.android.internal.logging.nano.MetricsProto;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-import java.util.ArrayList;
-
-@RunWith(RobolectricTestRunner.class)
-public class UpdatableListPreferenceDialogFragmentTest {
-
-    private static final String KEY = "Test_Key";
-    @Mock
-    private UpdatableListPreferenceDialogFragment mUpdatableListPrefDlgFragment;
-    private Context mContext;
-    private ArrayAdapter mAdapter;
-    private ArrayList<CharSequence> mEntries;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-
-        mUpdatableListPrefDlgFragment = spy(UpdatableListPreferenceDialogFragment
-                .newInstance(KEY, MetricsProto.MetricsEvent.DIALOG_SWITCH_A2DP_DEVICES));
-        mEntries = new ArrayList<>();
-        mUpdatableListPrefDlgFragment.setEntries(mEntries);
-        mUpdatableListPrefDlgFragment
-                .setMetricsCategory(mUpdatableListPrefDlgFragment.getArguments());
-        initAdapter();
-    }
-
-    private void initAdapter() {
-        mAdapter = spy(new ArrayAdapter<>(
-                mContext,
-                com.android.internal.R.layout.select_dialog_singlechoice,
-                mEntries));
-        mUpdatableListPrefDlgFragment.setAdapter(mAdapter);
-    }
-
-    @Test
-    public void getMetricsCategory() {
-        assertThat(mUpdatableListPrefDlgFragment.getMetricsCategory())
-                .isEqualTo(MetricsProto.MetricsEvent.DIALOG_SWITCH_A2DP_DEVICES);
-    }
-
-    @Test
-    public void onListPreferenceUpdated_verifyAdapterCanBeUpdate() {
-        assertThat(mUpdatableListPrefDlgFragment.getAdapter().getCount()).isEqualTo(0);
-
-        ListPreference listPreference = new ListPreference(mContext);
-        final CharSequence[] charSequences = {"Test_DEVICE_1", "Test_DEVICE_2"};
-        listPreference.setEntries(charSequences);
-        mUpdatableListPrefDlgFragment.onListPreferenceUpdated(listPreference);
-
-        assertThat(mUpdatableListPrefDlgFragment.getAdapter().getCount()).isEqualTo(2);
-    }
-
-    @Test
-    public void onDialogClosed_emptyPreference() {
-        mUpdatableListPrefDlgFragment.onDialogClosed(false);
-
-        verify(mUpdatableListPrefDlgFragment, never()).getListPreference();
-    }
-}
diff --git a/packages/SettingsProvider/res/values-ky/strings.xml b/packages/SettingsProvider/res/values-ky/strings.xml
index 7ab6582..830182b 100644
--- a/packages/SettingsProvider/res/values-ky/strings.xml
+++ b/packages/SettingsProvider/res/values-ky/strings.xml
@@ -19,7 +19,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="4567566098528588863">"Жөндөөлөрдү сактоо"</string>
+    <string name="app_label" msgid="4567566098528588863">"Параметрлерди сактоо"</string>
     <string name="wifi_softap_config_change" msgid="5688373762357941645">"Байланыш түйүнү  параметрлери өзгөрдү"</string>
     <string name="wifi_softap_config_change_summary" msgid="8946397286141531087">"Чоо-жайын билүү үчүн басыңыз"</string>
 </resources>
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index a93cd62..fe51ed5 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -286,7 +286,7 @@
     <bool name="def_wearable_sideButtonPresent">true</bool>
 
     <!-- Android wear version. This value is a string due to no long type in resources -->
-    <string name="def_wearable_androidWearVersion" translatable="false">2</string>
+    <string name="def_wearable_androidWearVersion" translatable="false">4</string>
 
     <!-- This value is the decimal representation of the capabilities bitmask as defined below:
         0000001 - WIFI
@@ -321,4 +321,7 @@
 
     <!-- Whether vibrate icon is shown in the status bar by default. -->
     <integer name="def_statusBarVibrateIconEnabled">0</integer>
+
+    <!-- Whether predictive back animation is enabled by default. -->
+    <bool name="def_enable_back_animation">false</bool>
 </resources>
diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java
index 41ce58e..d1f7f2f 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java
@@ -105,5 +105,6 @@
         Settings.Global.HDR_FORCE_CONVERSION_TYPE,
         Settings.Global.Wearable.RTL_SWIPE_TO_DISMISS_ENABLED_DEV,
         Settings.Global.Wearable.REDUCE_MOTION,
+        Settings.Global.Wearable.WEAR_LAUNCHER_UI_MODE,
     };
 }
diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
index 3efb41d..423c8a3 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
@@ -83,6 +83,8 @@
         Settings.Secure.DOUBLE_TAP_TO_WAKE,
         Settings.Secure.WAKE_GESTURE_ENABLED,
         Settings.Secure.LONG_PRESS_TIMEOUT,
+        Settings.Secure.KEY_REPEAT_TIMEOUT_MS,
+        Settings.Secure.KEY_REPEAT_DELAY_MS,
         Settings.Secure.CAMERA_GESTURE_DISABLED,
         Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED,
         Settings.Secure.ACCESSIBILITY_AUTOCLICK_DELAY,
diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java
index a1c0172..58106c0 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java
@@ -176,10 +176,21 @@
         VALIDATORS.put(Global.REQUIRE_PASSWORD_TO_DECRYPT, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Global.DEVICE_DEMO_MODE, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Global.AWARE_ALLOWED, BOOLEAN_VALIDATOR);
+        VALIDATORS.put(Global.POWER_BUTTON_SHORT_PRESS, new InclusiveIntegerRangeValidator(0, 7));
+        VALIDATORS.put(Global.POWER_BUTTON_DOUBLE_PRESS, new InclusiveIntegerRangeValidator(0, 3));
+        VALIDATORS.put(Global.POWER_BUTTON_TRIPLE_PRESS, new InclusiveIntegerRangeValidator(0, 3));
         VALIDATORS.put(Global.POWER_BUTTON_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 5));
         VALIDATORS.put(
                 Global.POWER_BUTTON_VERY_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 1));
         VALIDATORS.put(Global.KEY_CHORD_POWER_VOLUME_UP, new InclusiveIntegerRangeValidator(0, 2));
+        VALIDATORS.put(
+                Global.STEM_PRIMARY_BUTTON_SHORT_PRESS, new InclusiveIntegerRangeValidator(0, 1));
+        VALIDATORS.put(
+                Global.STEM_PRIMARY_BUTTON_DOUBLE_PRESS, new InclusiveIntegerRangeValidator(0, 1));
+        VALIDATORS.put(
+                Global.STEM_PRIMARY_BUTTON_TRIPLE_PRESS, new InclusiveIntegerRangeValidator(0, 1));
+        VALIDATORS.put(
+                Global.STEM_PRIMARY_BUTTON_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 1));
         VALIDATORS.put(Global.CUSTOM_BUGREPORT_HANDLER_APP, ANY_STRING_VALIDATOR);
         VALIDATORS.put(Global.CUSTOM_BUGREPORT_HANDLER_USER, ANY_INTEGER_VALIDATOR);
         VALIDATORS.put(Global.DEVELOPMENT_SETTINGS_ENABLED, BOOLEAN_VALIDATOR);
@@ -373,7 +384,7 @@
                 Global.Wearable.WEAR_ACTIVITY_AUTO_RESUME_TIMEOUT_SET_BY_USER,
                 BOOLEAN_VALIDATOR);
         VALIDATORS.put(Global.Wearable.BURN_IN_PROTECTION_ENABLED, BOOLEAN_VALIDATOR);
-        VALIDATORS.put(Global.Wearable.COMBINED_LOCATION_ENABLED, BOOLEAN_VALIDATOR);
+        VALIDATORS.put(Global.Wearable.COMBINED_LOCATION_ENABLE, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Global.Wearable.WRIST_ORIENTATION_MODE,
                        new DiscreteValueValidator(new String[] {"0", "1", "2", "3"}));
         VALIDATORS.put(Global.USER_PREFERRED_REFRESH_RATE, NON_NEGATIVE_FLOAT_VALIDATOR);
@@ -405,7 +416,7 @@
         VALIDATORS.put(Global.Wearable.BEDTIME_MODE, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Global.Wearable.BEDTIME_HARD_MODE, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Global.Wearable.DYNAMIC_COLOR_THEME_ENABLED, BOOLEAN_VALIDATOR);
-	VALIDATORS.put(Global.Wearable.SCREENSHOT_ENABLED, BOOLEAN_VALIDATOR);
+        VALIDATORS.put(Global.Wearable.SCREENSHOT_ENABLED, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Global.Wearable.UPGRADE_DATA_MIGRATION_STATUS,
                        new DiscreteValueValidator(
                         new String[] {
@@ -430,5 +441,7 @@
                                 String.valueOf(Global.Wearable.TETHERED_CONFIG_TETHERED)
                         }));
         VALIDATORS.put(Global.Wearable.PHONE_SWITCHING_SUPPORTED, BOOLEAN_VALIDATOR);
+        VALIDATORS.put(Global.Wearable.WEAR_LAUNCHER_UI_MODE, NON_NEGATIVE_INTEGER_VALIDATOR);
+        VALIDATORS.put(Global.Wearable.WEAR_POWER_ANOMALY_SERVICE_ENABLED, 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 f6c2f69..bbfdc38 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
@@ -125,6 +125,8 @@
         VALIDATORS.put(Secure.DOUBLE_TAP_TO_WAKE, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Secure.WAKE_GESTURE_ENABLED, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Secure.LONG_PRESS_TIMEOUT, NON_NEGATIVE_INTEGER_VALIDATOR);
+        VALIDATORS.put(Secure.KEY_REPEAT_TIMEOUT_MS, NON_NEGATIVE_INTEGER_VALIDATOR);
+        VALIDATORS.put(Secure.KEY_REPEAT_DELAY_MS, NON_NEGATIVE_INTEGER_VALIDATOR);
         VALIDATORS.put(Secure.CAMERA_GESTURE_DISABLED, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Secure.ACCESSIBILITY_AUTOCLICK_DELAY, NON_NEGATIVE_INTEGER_VALIDATOR);
@@ -381,5 +383,8 @@
         VALIDATORS.put(Secure.HEARING_AID_SYSTEM_SOUNDS_ROUTING,
                 new DiscreteValueValidator(new String[] {"0", "1", "2"}));
         VALIDATORS.put(Secure.ACCESSIBILITY_FONT_SCALING_HAS_BEEN_CHANGED, BOOLEAN_VALIDATOR);
+        VALIDATORS.put(Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_EDGE_HAPTIC_ENABLED,
+                BOOLEAN_VALIDATOR);
+        VALIDATORS.put(Secure.DND_CONFIGS_MIGRATED, BOOLEAN_VALIDATOR);
     }
 }
diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java
index a08d07e..0dd8569 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java
@@ -221,6 +221,7 @@
         VALIDATORS.put(System.STAY_AWAKE_ON_FOLD, BOOLEAN_VALIDATOR);
         VALIDATORS.put(System.NOTIFICATION_LIGHT_PULSE, BOOLEAN_VALIDATOR);
         VALIDATORS.put(System.WEAR_ACCESSIBILITY_GESTURE_ENABLED, BOOLEAN_VALIDATOR);
+        VALIDATORS.put(System.WEAR_ACCESSIBILITY_GESTURE_ENABLED_DURING_OOBE, BOOLEAN_VALIDATOR);
         VALIDATORS.put(System.CLOCKWORK_BLUETOOTH_SETTINGS_PREF, BOOLEAN_VALIDATOR);
         VALIDATORS.put(System.UNREAD_NOTIFICATION_DOT_INDICATOR, BOOLEAN_VALIDATOR);
         VALIDATORS.put(System.AUTO_LAUNCH_MEDIA_CONTROLS, BOOLEAN_VALIDATOR);
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java b/packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java
index 720d6dd..ffaebf4 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java
@@ -40,21 +40,35 @@
 
 import com.android.internal.util.FastPrintWriter;
 
+import java.io.File;
 import java.io.FileDescriptor;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
+import java.io.InputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Scanner;
 
 /**
  * Receives shell commands from the command line related to device config flags, and dispatches them
  * to the SettingsProvider.
  */
 public final class DeviceConfigService extends Binder {
+    private static final List<String> aconfigTextProtoFilesOnDevice = List.of(
+        "/system/etc/aconfig_flags.textproto",
+        "/system_ext/etc/aconfig_flags.textproto",
+        "/system_ext/etc/aconfig_flags.textproto",
+        "/vendor/etc/aconfig_flags.textproto");
+
     final SettingsProvider mProvider;
 
     public DeviceConfigService(SettingsProvider provider) {
@@ -73,6 +87,66 @@
         }
     }
 
+    @Override
+    protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+      final IContentProvider iprovider = mProvider.getIContentProvider();
+      pw.println("DeviceConfig flags:");
+      for (String line : MyShellCommand.listAll(iprovider)) {
+        pw.println(line);
+      }
+
+      ArrayList<String> missingFiles = new ArrayList<String>();
+      for (String fileName : aconfigTextProtoFilesOnDevice) {
+        File aconfigFile = new File(fileName);
+        if (!aconfigFile.exists()) {
+          missingFiles.add(fileName);
+        }
+      }
+
+      if (missingFiles.isEmpty()) {
+        pw.println("\nAconfig flags:");
+        for (String name : MyShellCommand.listAllAconfigFlags(iprovider)) {
+          pw.println(name);
+        }
+      } else {
+        pw.println("\nFailed to dump aconfig flags due to missing files:");
+        for (String fileName : missingFiles) {
+          pw.println(fileName);
+        }
+      }
+    }
+
+    private static HashSet<String> getAconfigFlagNamesInDeviceConfig() {
+        HashSet<String> nameSet = new HashSet<String>();
+        for (String fileName : aconfigTextProtoFilesOnDevice) {
+          try{
+            File aconfigFile = new File(fileName);
+            String packageName = "";
+            String namespace = "";
+            String name = "";
+
+            try (Scanner scanner = new Scanner(aconfigFile)) {
+              while (scanner.hasNextLine()) {
+                String data = scanner.nextLine().replaceAll("\\s+","");
+                if (data.startsWith("package:\"")) {
+                  packageName = data.substring(9, data.length()-1);
+                } else if (data.startsWith("name:\"")) {
+                  name = data.substring(6, data.length()-1);
+                } else if (data.startsWith("namespace:\"")) {
+                  namespace = data.substring(11, data.length()-1);
+                  nameSet.add(namespace + "/" + packageName + "." + name);
+                }
+              }
+            }
+
+          } catch (FileNotFoundException e) {
+            continue;
+          }
+        }
+
+      return nameSet;
+    }
+
     private void callUpdableDeviceConfigShellCommandHandler(FileDescriptor in, FileDescriptor out,
             FileDescriptor err, String[] args, ResultReceiver resultReceiver) {
         int result = -1;
@@ -99,6 +173,7 @@
             PUT,
             DELETE,
             LIST,
+            LIST_NAMESPACES,
             RESET,
             SET_SYNC_DISABLED_FOR_TESTS,
             GET_SYNC_DISABLED_FOR_TESTS,
@@ -108,6 +183,51 @@
             mProvider = provider;
         }
 
+      public static HashMap<String, String> getAllFlags(IContentProvider provider) {
+        HashMap<String, String> allFlags = new HashMap<String, String>();
+        try {
+            Bundle args = new Bundle();
+            args.putInt(Settings.CALL_METHOD_USER_KEY,
+                ActivityManager.getService().getCurrentUser().id);
+            Bundle b = provider.call(new AttributionSource(Process.myUid(),
+                    resolveCallingPackage(), null), Settings.AUTHORITY,
+                    Settings.CALL_METHOD_LIST_CONFIG, null, args);
+            if (b != null) {
+                Map<String, String> flagsToValues =
+                    (HashMap) b.getSerializable(Settings.NameValueTable.VALUE);
+                allFlags.putAll(flagsToValues);
+            }
+        } catch (RemoteException e) {
+            throw new RuntimeException("Failed in IPC", e);
+        }
+
+        return allFlags;
+      }
+
+      public static List<String> listAll(IContentProvider provider) {
+        HashMap<String, String> allFlags = getAllFlags(provider);
+        final ArrayList<String> lines = new ArrayList<>();
+        for (String key : allFlags.keySet()) {
+          lines.add(key + "=" + allFlags.get(key));
+        }
+        Collections.sort(lines);
+        return lines;
+      }
+
+      public static List<String> listAllAconfigFlags(IContentProvider provider) {
+        HashMap<String, String> allFlags = getAllFlags(provider);
+        HashSet<String> aconfigFlagNames = getAconfigFlagNamesInDeviceConfig();
+        final ArrayList<String> lines = new ArrayList<>();
+        for (String key : aconfigFlagNames) {
+          String val = allFlags.get(key);
+          if (val != null) {
+            lines.add(key + "=" + val);
+          }
+        }
+        Collections.sort(lines);
+        return lines;
+      }
+
         @SuppressLint("AndroidFrameworkRequiresPermission")
         @Override
         public int onCommand(String cmd) {
@@ -131,6 +251,11 @@
                 if (peekNextArg() == null) {
                     isValid = true;
                 }
+            } else if ("list_namespaces".equalsIgnoreCase(cmd)) {
+                verb = CommandVerb.LIST_NAMESPACES;
+                if (peekNextArg() == null) {
+                    isValid = true;
+                }
             } else if ("reset".equalsIgnoreCase(cmd)) {
                 verb = CommandVerb.RESET;
             } else if ("set_sync_disabled_for_tests".equalsIgnoreCase(cmd)) {
@@ -156,6 +281,7 @@
             String key = null;
             String value = null;
             String arg;
+            boolean publicOnly = false;
             while ((arg = getNextArg()) != null) {
                 if (verb == CommandVerb.RESET) {
                     if (resetMode == -1) {
@@ -198,6 +324,11 @@
                             isValid = true;
                         }
                     }
+                } else if (verb == CommandVerb.LIST_NAMESPACES) {
+                    if (arg.equals("--public")) {
+                        isValid = true;
+                        publicOnly = true;
+                    }
                 } else if (namespace == null) {
                     // GET, PUT, DELETE, LIST 1st arg
                     namespace = arg;
@@ -275,6 +406,30 @@
                         }
                     }
                     break;
+                case LIST_NAMESPACES:
+                    List<String> namespaces;
+                    if (publicOnly) {
+                        namespaces = DeviceConfig.getPublicNamespaces();
+                    } else {
+                        Field[] fields = DeviceConfig.class.getDeclaredFields();
+                        namespaces = new ArrayList<>(fields.length);
+                        // TODO(b/265948913): once moved to mainline, it should call a hidden method
+                        // directly
+                        for (Field field : fields) {
+                            int modifiers = field.getModifiers();
+                            try {
+                                if (Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers)
+                                        && field.getType().equals(String.class)
+                                        && field.getName().startsWith("NAMESPACE_")) {
+                                    namespaces.add((String) field.get(null));
+                                }
+                            } catch (IllegalAccessException ignored) { }
+                        }
+                    }
+                    for (int i = 0; i < namespaces.size(); i++) {
+                        pout.println(namespaces.get(i));
+                    }
+                    break;
                 case RESET:
                     DeviceConfig.resetToDefaults(resetMode, namespace);
                     break;
@@ -310,6 +465,8 @@
             pw.println("      {default} to set as the default value.");
             pw.println("  delete NAMESPACE KEY");
             pw.println("      Delete the entry for KEY for the given NAMESPACE.");
+            pw.println("  list_namespaces [--public]");
+            pw.println("      Prints the name of all (or just the public) namespaces.");
             pw.println("  list [NAMESPACE]");
             pw.println("      Print all keys and values defined, optionally for the given "
                     + "NAMESPACE.");
@@ -351,31 +508,6 @@
             return success;
         }
 
-        private List<String> listAll(IContentProvider provider) {
-            final ArrayList<String> lines = new ArrayList<>();
-
-            try {
-                Bundle args = new Bundle();
-                args.putInt(Settings.CALL_METHOD_USER_KEY,
-                        ActivityManager.getService().getCurrentUser().id);
-                Bundle b = provider.call(new AttributionSource(Process.myUid(),
-                                resolveCallingPackage(), null), Settings.AUTHORITY,
-                        Settings.CALL_METHOD_LIST_CONFIG, null, args);
-                if (b != null) {
-                    Map<String, String> flagsToValues =
-                            (HashMap) b.getSerializable(Settings.NameValueTable.VALUE);
-                    for (String key : flagsToValues.keySet()) {
-                        lines.add(key + "=" + flagsToValues.get(key));
-                    }
-                }
-
-                Collections.sort(lines);
-            } catch (RemoteException e) {
-                throw new RuntimeException("Failed in IPC", e);
-            }
-            return lines;
-        }
-
         private static String resolveCallingPackage() {
             switch (Binder.getCallingUid()) {
                 case Process.ROOT_UID: {
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index 11154d1..99a00e4 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -246,9 +246,13 @@
         stateChecksums[STATE_LOCK_SETTINGS] =
                 writeIfChanged(stateChecksums[STATE_LOCK_SETTINGS], KEY_LOCK_SETTINGS,
                         lockSettingsData, data);
-        stateChecksums[STATE_SOFTAP_CONFIG] =
-                writeIfChanged(stateChecksums[STATE_SOFTAP_CONFIG], KEY_SOFTAP_CONFIG,
-                        softApConfigData, data);
+        if (isWatch()) {
+            stateChecksums[STATE_SOFTAP_CONFIG] = 0;
+        } else {
+            stateChecksums[STATE_SOFTAP_CONFIG] =
+                    writeIfChanged(stateChecksums[STATE_SOFTAP_CONFIG], KEY_SOFTAP_CONFIG,
+                            softApConfigData, data);
+        }
         stateChecksums[STATE_NETWORK_POLICIES] =
                 writeIfChanged(stateChecksums[STATE_NETWORK_POLICIES], KEY_NETWORK_POLICIES,
                         netPoliciesData, data);
@@ -265,6 +269,10 @@
         writeNewChecksums(stateChecksums, newState);
     }
 
+    private boolean isWatch() {
+        return getBaseContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH);
+    }
+
     @Override
     public void onRestore(BackupDataInput data, int appVersionCode,
             ParcelFileDescriptor newState) {
@@ -366,19 +374,25 @@
                 case KEY_SOFTAP_CONFIG :
                     byte[] softapData = new byte[size];
                     data.readEntityData(softapData, 0, size);
-                    restoreSoftApConfiguration(softapData);
+                    if (!isWatch()) {
+                        restoreSoftApConfiguration(softapData);
+                    }
                     break;
 
                 case KEY_NETWORK_POLICIES:
                     byte[] netPoliciesData = new byte[size];
                     data.readEntityData(netPoliciesData, 0, size);
-                    restoreNetworkPolicies(netPoliciesData);
+                    if (!isWatch()) {
+                        restoreNetworkPolicies(netPoliciesData);
+                    }
                     break;
 
                 case KEY_WIFI_NEW_CONFIG:
                     byte[] restoredWifiNewConfigData = new byte[size];
                     data.readEntityData(restoredWifiNewConfigData, 0, size);
-                    restoreNewWifiConfigData(restoredWifiNewConfigData);
+                    if (!isWatch()) {
+                        restoreNewWifiConfigData(restoredWifiNewConfigData);
+                    }
                     break;
 
                 case KEY_DEVICE_SPECIFIC_CONFIG:
@@ -407,7 +421,7 @@
         }
 
         // Do this at the end so that we also pull in the ipconfig data.
-        if (restoredWifiSupplicantData != null) {
+        if (restoredWifiSupplicantData != null && !isWatch()) {
             restoreSupplicantWifiConfigData(
                     restoredWifiSupplicantData, restoredWifiIpConfigData);
         }
@@ -491,7 +505,9 @@
                 if (DEBUG_BACKUP) Log.d(TAG, ipconfig_size + " bytes of ip config data");
                 byte[] ipconfig_buffer = new byte[ipconfig_size];
                 in.readFully(ipconfig_buffer, 0, nBytes);
-                restoreSupplicantWifiConfigData(supplicant_buffer, ipconfig_buffer);
+                if (!isWatch()) {
+                    restoreSupplicantWifiConfigData(supplicant_buffer, ipconfig_buffer);
+                }
             }
 
             if (version >= FULL_BACKUP_ADDED_LOCK_SETTINGS) {
@@ -510,7 +526,9 @@
                 if (nBytes > buffer.length) buffer = new byte[nBytes];
                 if (nBytes > 0) {
                     in.readFully(buffer, 0, nBytes);
-                    restoreSoftApConfiguration(buffer);
+                    if (!isWatch()) {
+                        restoreSoftApConfiguration(buffer);
+                    }
                 }
             }
             // network policies
@@ -520,7 +538,9 @@
                 if (nBytes > buffer.length) buffer = new byte[nBytes];
                 if (nBytes > 0) {
                     in.readFully(buffer, 0, nBytes);
-                    restoreNetworkPolicies(buffer);
+                    if (!isWatch()) {
+                        restoreNetworkPolicies(buffer);
+                    }
                 }
             }
             // Restore full wifi config data
@@ -529,7 +549,9 @@
                 if (DEBUG_BACKUP) Log.d(TAG, nBytes + " bytes of full wifi config data");
                 if (nBytes > buffer.length) buffer = new byte[nBytes];
                 in.readFully(buffer, 0, nBytes);
-                restoreNewWifiConfigData(buffer);
+                if (!isWatch()) {
+                    restoreNewWifiConfigData(buffer);
+                }
             }
 
             if (DEBUG_BACKUP) Log.d(TAG, "Full restore complete.");
@@ -961,7 +983,6 @@
                         lockPatternUtils.setOwnerInfo(value, userId);
                         break;
                     case KEY_LOCK_SETTINGS_VISIBLE_PATTERN_ENABLED:
-                        lockPatternUtils.reportPatternWasChosen(userId);
                         lockPatternUtils.setVisiblePatternEnabled("1".equals(value), userId);
                         break;
                     case KEY_LOCK_SETTINGS_POWER_BUTTON_INSTANTLY_LOCKS:
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index 9da1ab8..27a45df 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -44,6 +44,7 @@
 import com.android.internal.app.LocalePicker;
 import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
 
+import java.io.FileNotFoundException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Locale;
@@ -332,21 +333,30 @@
      * @param value can be a canonicalized uri or "_silent" to indicate a silent (null) ringtone.
      */
     private void setRingtone(String name, String value) {
-        // If it's null, don't change the default
-        if (value == null) return;
-        final Uri ringtoneUri;
-        if (SILENT_RINGTONE.equals(value)) {
-            ringtoneUri = null;
-        } else {
-            Uri canonicalUri = Uri.parse(value);
-            ringtoneUri = mContext.getContentResolver().uncanonicalize(canonicalUri);
-            if (ringtoneUri == null) {
-                // Unrecognized or invalid Uri, don't restore
-                return;
-            }
-        }
-        final int ringtoneType = getRingtoneType(name);
+        Log.v(TAG, "Set ringtone for name: " + name + " value: " + value);
 
+        // If it's null, don't change the default.
+        if (value == null) return;
+        final int ringtoneType = getRingtoneType(name);
+        if (SILENT_RINGTONE.equals(value)) {
+            // SILENT_RINGTONE is a special constant generated by onBackupValue in the source
+            // device.
+            RingtoneManager.setActualDefaultRingtoneUri(mContext, ringtoneType, null);
+            return;
+        }
+
+        Uri ringtoneUri = null;
+        try {
+            ringtoneUri =
+                    RingtoneManager.getRingtoneUriForRestore(
+                            mContext.getContentResolver(), value, ringtoneType);
+        } catch (FileNotFoundException | IllegalArgumentException e) {
+            Log.w(TAG, "Failed to resolve " + value + ": " + e);
+            // Unrecognized or invalid Uri, don't restore
+            return;
+        }
+
+        Log.v(TAG, "setActualDefaultRingtoneUri type: " + ringtoneType + ", uri: " + ringtoneUri);
         RingtoneManager.setActualDefaultRingtoneUri(mContext, ringtoneType, ringtoneUri);
     }
 
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
index a83bfda..1192e00 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
@@ -3059,7 +3059,7 @@
                 Settings.System.APPLY_RAMPING_RINGER,
                 SystemSettingsProto.APPLY_RAMPING_RINGER);
 
-        // Please insert new settings using the same order as in SecureSettingsProto.
+        // Please insert new settings using the same order as in SystemSettingsProto.
 
         // The rest of the settings were moved to Settings.Secure, and are thus excluded here since
         // they're deprecated from Settings.System.
@@ -3097,8 +3097,8 @@
         // The rest of the settings were moved to Settings.Secure, and are thus excluded here since
         // they're deprecated from Settings.System.
 
-        // Please insert new settings using the same order as in SecureSettingsProto.
+        // Please insert new settings using the same order as in SystemSettingsProto.
         p.end(token);
-        // Please insert new settings using the same order as in SecureSettingsProto.
+        // Please insert new settings using the same order as in SystemSettingsProto.
     }
 }
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index b76c66b..7e97956 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -246,6 +246,7 @@
     public static final String RESULT_ROWS_DELETED = "result_rows_deleted";
     public static final String RESULT_SETTINGS_LIST = "result_settings_list";
 
+    public static final String SETTINGS_PROVIDER_JOBS_NS = "SettingsProviderJobsNamespace";
     // Used for scheduling jobs to make a copy for the settings files
     public static final int WRITE_FALLBACK_SETTINGS_FILES_JOB_ID = 1;
     public static final long ONE_DAY_INTERVAL_MILLIS = 24 * 60 * 60 * 1000L;
@@ -520,6 +521,13 @@
                 break;
             }
 
+            case Settings.CALL_METHOD_RESET_SYSTEM: {
+                final int mode = getResetModeEnforcingPermission(args);
+                String tag = getSettingTag(args);
+                resetSystemSetting(requestingUserId, mode, tag);
+                break;
+            }
+
             case Settings.CALL_METHOD_DELETE_CONFIG: {
                 int rows  = deleteConfigSetting(name) ? 1 : 0;
                 Bundle result = new Bundle();
@@ -1875,8 +1883,8 @@
                     + requestingUserId + ")");
         }
 
-        return mutateSystemSetting(name, value, requestingUserId, MUTATION_OPERATION_INSERT,
-                overrideableByRestore);
+        return mutateSystemSetting(name, value, /* tag= */ null, requestingUserId,
+                MUTATION_OPERATION_INSERT, /* mode= */ 0, overrideableByRestore);
     }
 
     private boolean deleteSystemSetting(String name, int requestingUserId) {
@@ -1896,15 +1904,25 @@
         return mutateSystemSetting(name, value, requestingUserId, MUTATION_OPERATION_UPDATE);
     }
 
+    private void resetSystemSetting(int requestingUserId, int mode, String tag) {
+        if (DEBUG) {
+            Slog.v(LOG_TAG, "resetSystemSetting(" + requestingUserId + ", "
+                    + mode + ", " + tag + ")");
+        }
+
+        mutateSystemSetting(null, null, tag, requestingUserId, MUTATION_OPERATION_RESET, mode,
+                false);
+    }
+
     private boolean mutateSystemSetting(String name, String value, int runAsUserId, int operation) {
         // overrideableByRestore = false as by default settings values shouldn't be overrideable by
         // restore.
-        return mutateSystemSetting(name, value, runAsUserId, operation,
-                /* overrideableByRestore */ false);
+        return mutateSystemSetting(name, value, /* tag= */ null, runAsUserId, operation,
+                /* mode= */ 0, /* overrideableByRestore */ false);
     }
 
-    private boolean mutateSystemSetting(String name, String value, int runAsUserId, int operation,
-            boolean overrideableByRestore) {
+    private boolean mutateSystemSetting(String name, String value, String tag, int runAsUserId,
+            int operation, int mode, boolean overrideableByRestore) {
         final String callingPackage = getCallingPackage();
         if (!hasWriteSecureSettingsPermission()) {
             // If the caller doesn't hold WRITE_SECURE_SETTINGS, we verify whether this
@@ -1976,6 +1994,12 @@
                             owningUserId, name, value, null, false, callingPackage,
                             false, null);
                 }
+
+                case MUTATION_OPERATION_RESET: {
+                    mSettingsRegistry.resetSettingsLocked(SETTINGS_TYPE_SYSTEM,
+                            runAsUserId, callingPackage, mode, tag);
+                    return true;
+                }
             }
             Slog.e(LOG_TAG, "Unknown operation code: " + operation);
             return false;
@@ -2762,12 +2786,13 @@
      */
     public void scheduleWriteFallbackFilesJob() {
         final Context context = getContext();
-        final JobScheduler jobScheduler =
+        JobScheduler jobScheduler =
                 (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
         if (jobScheduler == null) {
             // Might happen: SettingsProvider is created before JobSchedulerService in system server
             return;
         }
+        jobScheduler = jobScheduler.forNamespace(SETTINGS_PROVIDER_JOBS_NS);
         // Check if the job is already scheduled. If so, skip scheduling another one
         if (jobScheduler.getPendingJob(WRITE_FALLBACK_SETTINGS_FILES_JOB_ID) != null) {
             return;
@@ -3759,7 +3784,7 @@
         }
 
         private final class UpgradeController {
-            private static final int SETTINGS_VERSION = 220;
+            private static final int SETTINGS_VERSION = 221;
 
             private final int mUserId;
 
@@ -5694,6 +5719,7 @@
                                         R.string.airplane_mode_toggleable_radios),
                                 null, true, SettingsState.SYSTEM_PACKAGE_NAME);
                     }
+
                     currentVersion = 216;
                 }
 
@@ -5852,6 +5878,21 @@
                     currentVersion = 220;
                 }
 
+                if (currentVersion == 220) {
+                    final SettingsState globalSettings = getGlobalSettingsLocked();
+                    final Setting enableBackAnimation =
+                            globalSettings.getSettingLocked(Global.ENABLE_BACK_ANIMATION);
+                    if (enableBackAnimation.isNull()) {
+                        final boolean defEnableBackAnimation =
+                                getContext()
+                                        .getResources()
+                                        .getBoolean(R.bool.def_enable_back_animation);
+                        initGlobalSettingsDefaultValLocked(
+                                Settings.Global.ENABLE_BACK_ANIMATION, defEnableBackAnimation);
+                    }
+                    currentVersion = 221;
+                }
+
                 // vXXX: Add new settings above this point.
 
                 if (currentVersion != newVersion) {
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
index e3153e0..73ead3c 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
@@ -94,6 +94,7 @@
 
     static final int SETTINGS_VERSION_NEW_ENCODING = 121;
 
+    public static final int MAX_LENGTH_PER_STRING = 32768;
     private static final long WRITE_SETTINGS_DELAY_MILLIS = 200;
     private static final long MAX_WRITE_SETTINGS_DELAY_MILLIS = 2000;
 
@@ -430,6 +431,19 @@
             return false;
         }
 
+        final boolean isNameTooLong = name.length() > SettingsState.MAX_LENGTH_PER_STRING;
+        final boolean isValueTooLong =
+                value != null && value.length() > SettingsState.MAX_LENGTH_PER_STRING;
+        if (isNameTooLong || isValueTooLong) {
+            // only print the first few bytes of the name in case it is long
+            final String errorMessage = "The " + (isNameTooLong ? "name" : "value")
+                    + " of your setting ["
+                    + (name.length() > 20 ? (name.substring(0, 20) + "...") : name)
+                    + "] is too long. The max length allowed for the string is "
+                    + MAX_LENGTH_PER_STRING + ".";
+            throw new IllegalArgumentException(errorMessage);
+        }
+
         Setting oldState = mSettings.get(name);
         String oldValue = (oldState != null) ? oldState.value : null;
         String oldDefaultValue = (oldState != null) ? oldState.defaultValue : null;
@@ -860,7 +874,6 @@
 
                 final int settingCount = settings.size();
                 for (int i = 0; i < settingCount; i++) {
-
                     Setting setting = settings.valueAt(i);
                     if (setting.isTransient()) {
                         if (DEBUG_PERSISTENCE) {
@@ -869,14 +882,21 @@
                         continue;
                     }
 
-                    if (writeSingleSetting(mVersion, serializer, setting.getId(), setting.getName(),
-                            setting.getValue(), setting.getDefaultValue(), setting.getPackageName(),
-                            setting.getTag(), setting.isDefaultFromSystem(),
-                            setting.isValuePreservedInRestore())) {
-                        if (DEBUG_PERSISTENCE) {
-                            Slog.i(LOG_TAG, "[PERSISTED]" + setting.getName() + "="
-                                    + setting.getValue());
+                    try {
+                        if (writeSingleSetting(mVersion, serializer, setting.getId(),
+                                setting.getName(),
+                                setting.getValue(), setting.getDefaultValue(),
+                                setting.getPackageName(),
+                                setting.getTag(), setting.isDefaultFromSystem(),
+                                setting.isValuePreservedInRestore())) {
+                            if (DEBUG_PERSISTENCE) {
+                                Slog.i(LOG_TAG, "[PERSISTED]" + setting.getName() + "="
+                                        + setting.getValue());
+                            }
                         }
+                    } catch (IOException ex) {
+                        Slog.e(LOG_TAG, "[SKIPPED PERSISTING]" + setting.getName()
+                                + " due to error writing to disk", ex);
                     }
                 }
                 serializer.endTag(null, TAG_SETTINGS);
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/WriteFallbackSettingsFilesJobService.java b/packages/SettingsProvider/src/com/android/providers/settings/WriteFallbackSettingsFilesJobService.java
index 66aa7ba..91e8bf8 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/WriteFallbackSettingsFilesJobService.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/WriteFallbackSettingsFilesJobService.java
@@ -16,6 +16,7 @@
 
 package com.android.providers.settings;
 
+import static com.android.providers.settings.SettingsProvider.SETTINGS_PROVIDER_JOBS_NS;
 import static com.android.providers.settings.SettingsProvider.TABLE_CONFIG;
 import static com.android.providers.settings.SettingsProvider.TABLE_GLOBAL;
 import static com.android.providers.settings.SettingsProvider.TABLE_SECURE;
@@ -35,7 +36,8 @@
 public class WriteFallbackSettingsFilesJobService extends JobService {
     @Override
     public boolean onStartJob(final JobParameters params) {
-        if (params.getJobId() != WRITE_FALLBACK_SETTINGS_FILES_JOB_ID) {
+        if (!SETTINGS_PROVIDER_JOBS_NS.equals(params.getJobNamespace())
+                || params.getJobId() != WRITE_FALLBACK_SETTINGS_FILES_JOB_ID) {
             return false;
         }
         final List<String> settingsFiles = new ArrayList<>();
diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
index 5583384..5475fad 100644
--- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
+++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
@@ -101,6 +101,7 @@
                     Settings.System.MIN_REFRESH_RATE, // depends on hardware capabilities
                     Settings.System.PEAK_REFRESH_RATE, // depends on hardware capabilities
                     Settings.System.SCREEN_BRIGHTNESS_FLOAT,
+                    Settings.System.WEAR_ACCESSIBILITY_GESTURE_ENABLED_DURING_OOBE,
                     Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ,
                     Settings.System.MULTI_AUDIO_FOCUS_ENABLED // form-factor/OEM specific
                     );
@@ -597,7 +598,14 @@
                     Settings.Global.RADIO_BUG_SYSTEM_ERROR_COUNT_THRESHOLD,
                     Settings.Global.ENABLED_SUBSCRIPTION_FOR_SLOT,
                     Settings.Global.MODEM_STACK_ENABLED_FOR_SLOT,
+                    Settings.Global.POWER_BUTTON_SHORT_PRESS,
+                    Settings.Global.POWER_BUTTON_DOUBLE_PRESS,
+                    Settings.Global.POWER_BUTTON_TRIPLE_PRESS,
                     Settings.Global.POWER_BUTTON_VERY_LONG_PRESS,
+                    Settings.Global.STEM_PRIMARY_BUTTON_SHORT_PRESS,
+                    Settings.Global.STEM_PRIMARY_BUTTON_DOUBLE_PRESS,
+                    Settings.Global.STEM_PRIMARY_BUTTON_TRIPLE_PRESS,
+                    Settings.Global.STEM_PRIMARY_BUTTON_LONG_PRESS,
                     Settings.Global.SHOW_MEDIA_ON_QUICK_SETTINGS, // Temporary for R beta
                     Settings.Global.INTEGRITY_CHECK_INCLUDES_RULE_PROVIDER,
                     Settings.Global.CACHED_APPS_FREEZER_ENABLED,
@@ -608,7 +616,7 @@
                     Settings.Global.MANAGED_PROVISIONING_DEFER_PROVISIONING_TO_ROLE_HOLDER,
                     Settings.Global.REVIEW_PERMISSIONS_NOTIFICATION_STATE,
                     Settings.Global.ENABLE_BACK_ANIMATION, // Temporary for T, dev option only
-                    Settings.Global.Wearable.COMBINED_LOCATION_ENABLED,
+                    Settings.Global.Wearable.COMBINED_LOCATION_ENABLE,
                     Settings.Global.Wearable.HAS_PAY_TOKENS,
                     Settings.Global.Wearable.GMS_CHECKIN_TIMEOUT_MIN,
                     Settings.Global.Wearable.HOTWORD_DETECTION_ENABLED,
@@ -681,7 +689,8 @@
                     Settings.Global.Wearable.TETHER_CONFIG_STATE,
                     Settings.Global.Wearable.PHONE_SWITCHING_SUPPORTED,
                     Settings.Global.Wearable.WEAR_MEDIA_CONTROLS_PACKAGE,
-                    Settings.Global.Wearable.WEAR_MEDIA_SESSIONS_PACKAGE);
+                    Settings.Global.Wearable.WEAR_MEDIA_SESSIONS_PACKAGE,
+                    Settings.Global.Wearable.WEAR_POWER_ANOMALY_SERVICE_ENABLED);
 
     private static final Set<String> BACKUP_DENY_LIST_SECURE_SETTINGS =
              newHashSet(
@@ -703,7 +712,6 @@
                  Settings.Secure.ASSIST_SCREENSHOT_ENABLED,
                  Settings.Secure.ASSIST_STRUCTURE_ENABLED,
                  Settings.Secure.ATTENTIVE_TIMEOUT,
-                 Settings.Secure.AUDIO_DEVICE_INVENTORY, // setting not controllable by user
                  Settings.Secure.AUTOFILL_FEATURE_FIELD_CLASSIFICATION,
                  Settings.Secure.AUTOFILL_USER_DATA_MAX_CATEGORY_COUNT,
                  Settings.Secure.AUTOFILL_USER_DATA_MAX_FIELD_CLASSIFICATION_IDS_SIZE,
@@ -715,6 +723,7 @@
                  Settings.Secure.AUTOMATIC_STORAGE_MANAGER_ENABLED,
                  Settings.Secure.AUTOMATIC_STORAGE_MANAGER_LAST_RUN,
                  Settings.Secure.AUTOMATIC_STORAGE_MANAGER_TURNED_OFF_BY_POLICY,
+                 Settings.Secure.AUDIO_DEVICE_INVENTORY, // setting not controllable by user
                  Settings.Secure.BACKUP_AUTO_RESTORE,
                  Settings.Secure.BACKUP_ENABLED,
                  Settings.Secure.BACKUP_PROVISIONED,
@@ -848,7 +857,9 @@
                  Settings.Secure.ACCESSIBILITY_FLOATING_MENU_MIGRATION_TOOLTIP_PROMPT,
                  Settings.Secure.UI_TRANSLATION_ENABLED,
                  Settings.Secure.CREDENTIAL_SERVICE,
-                 Settings.Secure.CREDENTIAL_SERVICE_PRIMARY);
+                 Settings.Secure.CREDENTIAL_SERVICE_PRIMARY,
+                 Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_EDGE_HAPTIC_ENABLED,
+                 Settings.Secure.DND_CONFIGS_MIGRATED);
 
     @Test
     public void systemSettingsBackedUpOrDenied() {
diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/InstallNonMarketAppsDeprecationTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/InstallNonMarketAppsDeprecationTest.java
index ff11f70..2b33057 100644
--- a/packages/SettingsProvider/test/src/com/android/providers/settings/InstallNonMarketAppsDeprecationTest.java
+++ b/packages/SettingsProvider/test/src/com/android/providers/settings/InstallNonMarketAppsDeprecationTest.java
@@ -19,6 +19,7 @@
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertTrue;
+import static org.junit.Assume.assumeTrue;
 
 import android.content.Context;
 import android.content.pm.UserInfo;
@@ -116,6 +117,8 @@
 
     @Test
     public void testValueForNewUser() throws Exception {
+        assumeTrue(mUm.supportsMultipleUsers());
+
         UserInfo newUser = mUm.createUser("TEST_USER", 0);
         mUsersAddedByTest.add(newUser.id);
         String value = getSecureSettingForUserViaShell(newUser.id);
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 bc81c44..ef062df 100644
--- a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java
+++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java
@@ -26,15 +26,24 @@
 import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
+import android.content.ContentProvider;
 import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Context;
+import android.content.pm.ApplicationInfo;
 import android.content.res.Resources;
+import android.database.Cursor;
+import android.database.MatrixCursor;
 import android.media.AudioManager;
 import android.net.Uri;
+import android.os.Bundle;
 import android.os.LocaleList;
+import android.provider.BaseColumns;
+import android.provider.MediaStore;
 import android.provider.Settings;
 import android.telephony.TelephonyManager;
+import android.test.mock.MockContentProvider;
+import android.test.mock.MockContentResolver;
 
 import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
@@ -57,6 +66,13 @@
     private static final String SETTING_VALUE = "setting_value";
     private static final String SETTING_REAL_VALUE = "setting_real_value";
 
+    private static final String DEFAULT_RINGTONE_VALUE =
+            "content://media/internal/audio/media/10?title=DefaultRingtone&canonical=1";
+    private static final String DEFAULT_NOTIFICATION_VALUE =
+            "content://media/internal/audio/media/20?title=DefaultNotification&canonical=1";
+    private static final String DEFAULT_ALARM_VALUE =
+            "content://media/internal/audio/media/30?title=DefaultAlarm&canonical=1";
+
     private SettingsHelper mSettingsHelper;
 
     @Mock private Context mContext;
@@ -74,6 +90,7 @@
                 mTelephonyManager);
         when(mContext.getResources()).thenReturn(mResources);
         when(mContext.getApplicationContext()).thenReturn(mContext);
+        when(mContext.getApplicationInfo()).thenReturn(new ApplicationInfo());
         when(mContext.getContentResolver()).thenReturn(getContentResolver());
 
         mSettingsHelper = spy(new SettingsHelper(mContext));
@@ -338,6 +355,377 @@
     }
 
     @Test
+    public void testRestoreValue_customRingtone_regularUncanonicalize_Success() {
+        final String sourceRingtoneValue =
+                "content://media/internal/audio/media/1?title=Song&canonical=1";
+        final String newRingtoneValueUncanonicalized =
+                "content://media/internal/audio/media/100";
+        final String newRingtoneValueCanonicalized =
+                "content://media/internal/audio/media/100?title=Song&canonical=1";
+
+        MockContentResolver mMockContentResolver = new MockContentResolver();
+        when(mContext.getContentResolver()).thenReturn(mMockContentResolver);
+
+        ContentProvider mockMediaContentProvider =
+                new MockContentProvider(mContext) {
+                    @Override
+                    public Uri uncanonicalize(Uri url) {
+                        assertThat(url).isEqualTo(Uri.parse(sourceRingtoneValue));
+                        return Uri.parse(newRingtoneValueUncanonicalized);
+                    }
+
+                    @Override
+                    public Uri canonicalize(Uri url) {
+                        assertThat(url).isEqualTo(Uri.parse(newRingtoneValueUncanonicalized));
+                        return Uri.parse(newRingtoneValueCanonicalized);
+                    }
+
+                    @Override
+                    public String getType(Uri url) {
+                        return "audio/ogg";
+                    }
+                };
+
+        ContentProvider mockSettingsContentProvider =
+                new MockSettingsProvider(mContext, getContentResolver());
+        mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider);
+        mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider);
+
+        resetRingtoneSettingsToDefault(mMockContentResolver);
+        assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE))
+                .isEqualTo(DEFAULT_RINGTONE_VALUE);
+
+        mSettingsHelper.restoreValue(
+                mContext,
+                mMockContentResolver,
+                new ContentValues(),
+                Uri.EMPTY,
+                Settings.System.RINGTONE,
+                sourceRingtoneValue,
+                0);
+
+        assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE))
+                .isEqualTo(newRingtoneValueCanonicalized);
+    }
+
+    @Test
+    public void testRestoreValue_customRingtone_useCustomLookup_success() {
+        final String sourceRingtoneValue =
+                "content://0@media/external/audio/media/1?title=Song&canonical=1";
+        final String newRingtoneValueUncanonicalized =
+                "content://0@media/external/audio/media/100";
+        final String newRingtoneValueCanonicalized =
+                "content://0@media/external/audio/media/100?title=Song&canonical=1";
+
+        MockContentResolver mMockContentResolver = new MockContentResolver();
+        when(mContext.getContentResolver()).thenReturn(mMockContentResolver);
+
+        MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID});
+        cursor.addRow(new Object[] {100L});
+
+        ContentProvider mockMediaContentProvider =
+                new MockContentProvider(mContext) {
+                    @Override
+                    public Uri uncanonicalize(Uri url) {
+                        // mock the lookup failure in regular MediaProvider.uncanonicalize.
+                        return null;
+                    }
+
+                    @Override
+                    public Uri canonicalize(Uri url) {
+                        assertThat(url).isEqualTo(Uri.parse(newRingtoneValueUncanonicalized));
+                        return Uri.parse(newRingtoneValueCanonicalized);
+                    }
+
+                    @Override
+                    public String getType(Uri url) {
+                        return "audio/ogg";
+                    }
+
+                    @Override
+                    public Cursor query(
+                            Uri uri,
+                            String[] projection,
+                            String selection,
+                            String[] selectionArgs,
+                            String sortOrder) {
+                        assertThat(uri)
+                                .isEqualTo(Uri.parse("content://0@media/external/audio/media"));
+                        assertThat(projection).isEqualTo(new String[] {"_id"});
+                        assertThat(selection).isEqualTo("is_ringtone=1 AND title=?");
+                        assertThat(selectionArgs).isEqualTo(new String[] {"Song"});
+                        return cursor;
+                    }
+                };
+
+        ContentProvider mockSettingsContentProvider =
+                new MockSettingsProvider(mContext, getContentResolver());
+        mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider);
+        mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider);
+        mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider);
+
+        resetRingtoneSettingsToDefault(mMockContentResolver);
+
+        mSettingsHelper.restoreValue(
+                mContext,
+                mMockContentResolver,
+                new ContentValues(),
+                Uri.EMPTY,
+                Settings.System.RINGTONE,
+                sourceRingtoneValue,
+                0);
+
+        assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE))
+                .isEqualTo(newRingtoneValueCanonicalized);
+    }
+
+    @Test
+    public void testRestoreValue_customRingtone_notificationSound_useCustomLookup_success() {
+        final String sourceRingtoneValue =
+                "content://0@media/external/audio/media/2?title=notificationPing&canonical=1";
+        final String newRingtoneValueUncanonicalized =
+                "content://0@media/external/audio/media/200";
+        final String newRingtoneValueCanonicalized =
+                "content://0@media/external/audio/media/200?title=notificationPing&canonicalize=1";
+
+        MockContentResolver mMockContentResolver = new MockContentResolver();
+        when(mContext.getContentResolver()).thenReturn(mMockContentResolver);
+
+        MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID});
+        cursor.addRow(new Object[] {200L});
+
+        ContentProvider mockMediaContentProvider =
+                new MockContentProvider(mContext) {
+                    @Override
+                    public Uri uncanonicalize(Uri url) {
+                        // mock the lookup failure in regular MediaProvider.uncanonicalize.
+                        return null;
+                    }
+
+                    @Override
+                    public Uri canonicalize(Uri url) {
+                        assertThat(url).isEqualTo(Uri.parse(newRingtoneValueUncanonicalized));
+                        return Uri.parse(newRingtoneValueCanonicalized);
+                    }
+
+                    @Override
+                    public String getType(Uri url) {
+                        return "audio/ogg";
+                    }
+
+                    @Override
+                    public Cursor query(
+                            Uri uri,
+                            String[] projection,
+                            String selection,
+                            String[] selectionArgs,
+                            String sortOrder) {
+                        assertThat(uri)
+                                .isEqualTo(Uri.parse("content://0@media/external/audio/media"));
+                        assertThat(projection).isEqualTo(new String[] {"_id"});
+                        assertThat(selection).isEqualTo("is_notification=1 AND title=?");
+                        assertThat(selectionArgs).isEqualTo(new String[] {"notificationPing"});
+                        return cursor;
+                    }
+                };
+
+        ContentProvider mockSettingsContentProvider =
+                new MockSettingsProvider(mContext, getContentResolver());
+        mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider);
+        mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider);
+        mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider);
+
+        resetRingtoneSettingsToDefault(mMockContentResolver);
+
+        mSettingsHelper.restoreValue(
+                mContext,
+                mMockContentResolver,
+                new ContentValues(),
+                Uri.EMPTY,
+                Settings.System.NOTIFICATION_SOUND,
+                sourceRingtoneValue,
+                0);
+
+        assertThat(
+                        Settings.System.getString(
+                                mMockContentResolver, Settings.System.NOTIFICATION_SOUND))
+                .isEqualTo(newRingtoneValueCanonicalized);
+    }
+
+    @Test
+    public void testRestoreValue_customRingtone_alarmSound_useCustomLookup_success() {
+        final String sourceRingtoneValue =
+                "content://0@media/external/audio/media/3?title=alarmSound&canonical=1";
+        final String newRingtoneValueUncanonicalized =
+                "content://0@media/external/audio/media/300";
+        final String newRingtoneValueCanonicalized =
+                "content://0@media/external/audio/media/300?title=alarmSound&canonical=1";
+
+        MockContentResolver mMockContentResolver = new MockContentResolver();
+        when(mContext.getContentResolver()).thenReturn(mMockContentResolver);
+
+        MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID});
+        cursor.addRow(new Object[] {300L});
+
+        ContentProvider mockMediaContentProvider =
+                new MockContentProvider(mContext) {
+                    @Override
+                    public Uri uncanonicalize(Uri url) {
+                        // mock the lookup failure in regular MediaProvider.uncanonicalize.
+                        return null;
+                    }
+
+                    @Override
+                    public Uri canonicalize(Uri url) {
+                        assertThat(url).isEqualTo(Uri.parse(newRingtoneValueUncanonicalized));
+                        return Uri.parse(newRingtoneValueCanonicalized);
+                    }
+
+                    @Override
+                    public String getType(Uri url) {
+                        return "audio/ogg";
+                    }
+
+                    @Override
+                    public Cursor query(
+                            Uri uri,
+                            String[] projection,
+                            String selection,
+                            String[] selectionArgs,
+                            String sortOrder) {
+                        assertThat(uri)
+                                .isEqualTo(Uri.parse("content://0@media/external/audio/media"));
+                        assertThat(projection).isEqualTo(new String[] {"_id"});
+                        assertThat(selection).isEqualTo("is_alarm=1 AND title=?");
+                        assertThat(selectionArgs).isEqualTo(new String[] {"alarmSound"});
+                        return cursor;
+                    }
+                };
+
+        ContentProvider mockSettingsContentProvider =
+                new MockSettingsProvider(mContext, getContentResolver());
+        mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider);
+        mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider);
+        mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider);
+
+        resetRingtoneSettingsToDefault(mMockContentResolver);
+
+        mSettingsHelper.restoreValue(
+                mContext,
+                mMockContentResolver,
+                new ContentValues(),
+                Uri.EMPTY,
+                Settings.System.ALARM_ALERT,
+                sourceRingtoneValue,
+                0);
+
+        assertThat(Settings.System.getString(mMockContentResolver, Settings.System.ALARM_ALERT))
+                .isEqualTo(newRingtoneValueCanonicalized);
+    }
+
+    @Test
+    public void testRestoreValue_customRingtone_useCustomLookup_multipleResults_notRestore() {
+        final String sourceRingtoneValue =
+                "content://0@media/external/audio/media/1?title=Song&canonical=1";
+
+        MockContentResolver mMockContentResolver = new MockContentResolver();
+        when(mContext.getContentResolver()).thenReturn(mMockContentResolver);
+
+        // This is to mock the case that there are multiple results by querying title +
+        // ringtone_type.
+        MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID});
+        cursor.addRow(new Object[] {100L});
+        cursor.addRow(new Object[] {110L});
+
+        ContentProvider mockMediaContentProvider =
+                new MockContentProvider(mContext) {
+                    @Override
+                    public Uri uncanonicalize(Uri url) {
+                        // mock the lookup failure in regular MediaProvider.uncanonicalize.
+                        return null;
+                    }
+
+                    @Override
+                    public String getType(Uri url) {
+                        return "audio/ogg";
+                    }
+                };
+
+        ContentProvider mockSettingsContentProvider =
+                new MockSettingsProvider(mContext, getContentResolver());
+        mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider);
+        mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider);
+        mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider);
+
+        resetRingtoneSettingsToDefault(mMockContentResolver);
+
+        mSettingsHelper.restoreValue(
+                mContext,
+                mMockContentResolver,
+                new ContentValues(),
+                Uri.EMPTY,
+                Settings.System.RINGTONE,
+                sourceRingtoneValue,
+                0);
+
+        assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE))
+                .isEqualTo(DEFAULT_RINGTONE_VALUE);
+    }
+
+    @Test
+    public void testRestoreValue_customRingtone_restoreSilentValue() {
+        MockContentResolver mMockContentResolver = new MockContentResolver();
+        when(mContext.getContentResolver()).thenReturn(mMockContentResolver);
+
+        ContentProvider mockMediaContentProvider =
+                new MockContentProvider(mContext) {
+                    @Override
+                    public Uri uncanonicalize(Uri url) {
+                        // mock the lookup failure in regular MediaProvider.uncanonicalize.
+                        return null;
+                    }
+
+                    @Override
+                    public String getType(Uri url) {
+                        return "audio/ogg";
+                    }
+                };
+
+        ContentProvider mockSettingsContentProvider =
+                new MockSettingsProvider(mContext, getContentResolver());
+        mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider);
+        mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider);
+
+        resetRingtoneSettingsToDefault(mMockContentResolver);
+
+        mSettingsHelper.restoreValue(
+                mContext,
+                mMockContentResolver,
+                new ContentValues(),
+                Uri.EMPTY,
+                Settings.System.RINGTONE,
+                "_silent",
+                0);
+
+        assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE))
+                .isEqualTo(null);
+    }
+
+    public static class MockSettingsProvider extends MockContentProvider {
+        ContentResolver mBaseContentResolver;
+
+        public MockSettingsProvider(Context context, ContentResolver baseContentResolver) {
+            super(context);
+            this.mBaseContentResolver = baseContentResolver;
+        }
+
+        @Override
+        public Bundle call(String method, String request, Bundle args) {
+            return mBaseContentResolver.call(Settings.AUTHORITY, method, request, args);
+        }
+    }
+
+    @Test
     public void restoreValue_autoRotation_deviceStateAutoRotationDisabled_restoresValue() {
         when(mResources.getStringArray(R.array.config_perDeviceStateRotationLockDefaults))
                 .thenReturn(new String[]{});
@@ -400,4 +788,20 @@
         Settings.Global.putString(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, null);
         Settings.Global.putString(cr, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, null);
     }
+
+    private void resetRingtoneSettingsToDefault(ContentResolver contentResolver) {
+        Settings.System.putString(
+                contentResolver, Settings.System.RINGTONE, DEFAULT_RINGTONE_VALUE);
+        Settings.System.putString(
+                contentResolver, Settings.System.NOTIFICATION_SOUND, DEFAULT_NOTIFICATION_VALUE);
+        Settings.System.putString(
+                contentResolver, Settings.System.ALARM_ALERT, DEFAULT_ALARM_VALUE);
+
+        assertThat(Settings.System.getString(contentResolver, Settings.System.RINGTONE))
+                .isEqualTo(DEFAULT_RINGTONE_VALUE);
+        assertThat(Settings.System.getString(contentResolver, Settings.System.NOTIFICATION_SOUND))
+                .isEqualTo(DEFAULT_NOTIFICATION_VALUE);
+        assertThat(Settings.System.getString(contentResolver, Settings.System.ALARM_ALERT))
+                .isEqualTo(DEFAULT_ALARM_VALUE);
+    }
 }
diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java
index 55160fb..26cac37 100644
--- a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java
+++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java
@@ -31,21 +31,21 @@
 public class SettingsStateTest extends AndroidTestCase {
     public static final String CRAZY_STRING =
             "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\n\u000b\u000c\r" +
-            "\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a" +
-            "\u001b\u001c\u001d\u001e\u001f\u0020" +
-            "fake_setting_value_1" +
-            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
-            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
-            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
-            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
-            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
-            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
-            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
-            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
-            "\u1000 \u2000 \u5000 \u8000 \uc000 \ue000" +
-            "\ud800\udc00\udbff\udfff" + // surrogate pairs
-            "\uD800ab\uDC00 " + // broken surrogate pairs
-            "日本語";
+                    "\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a" +
+                    "\u001b\u001c\u001d\u001e\u001f\u0020" +
+                    "fake_setting_value_1" +
+                    "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
+                    "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
+                    "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
+                    "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
+                    "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
+                    "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
+                    "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
+                    "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
+                    "\u1000 \u2000 \u5000 \u8000 \uc000 \ue000" +
+                    "\ud800\udc00\udbff\udfff" + // surrogate pairs
+                    "\uD800ab\uDC00 " + // broken surrogate pairs
+                    "日本語";
 
     private static final String TEST_PACKAGE = "package";
     private static final String SYSTEM_PACKAGE = "android";
@@ -170,11 +170,11 @@
         final PrintStream os = new PrintStream(new FileOutputStream(file));
         os.print(
                 "<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>" +
-                "<settings version=\"120\">" +
-                "  <setting id=\"0\" name=\"k0\" value=\"null\" package=\"null\" />" +
-                "  <setting id=\"1\" name=\"k1\" value=\"\" package=\"\" />" +
-                "  <setting id=\"2\" name=\"k2\" value=\"v2\" package=\"p2\" />" +
-                "</settings>");
+                        "<settings version=\"120\">" +
+                        "  <setting id=\"0\" name=\"k0\" value=\"null\" package=\"null\" />" +
+                        "  <setting id=\"1\" name=\"k1\" value=\"\" package=\"\" />" +
+                        "  <setting id=\"2\" name=\"k2\" value=\"v2\" package=\"p2\" />" +
+                        "</settings>");
         os.close();
 
         final SettingsState ss = new SettingsState(getContext(), lock, file, 1,
@@ -408,4 +408,50 @@
         }
         assertEquals(expectedMemUsage, settingsState.getMemoryUsage(TEST_PACKAGE));
     }
+
+    public void testLargeSettingKey() {
+        SettingsState settingsState = new SettingsState(getContext(), mLock, mSettingsFile, 1,
+                SettingsState.MAX_BYTES_PER_APP_PACKAGE_LIMITED, Looper.getMainLooper());
+        final String largeKey = Strings.repeat("A", SettingsState.MAX_LENGTH_PER_STRING + 1);
+        final String testValue = "testValue";
+        synchronized (mLock) {
+            // Test system package
+            try {
+                settingsState.insertSettingLocked(largeKey, testValue, null, true, SYSTEM_PACKAGE);
+                fail("Should throw because it exceeded max string length");
+            } catch (IllegalArgumentException ex) {
+                assertTrue(ex.getMessage().contains("The max length allowed for the string is "));
+            }
+            // Test non system package
+            try {
+                settingsState.insertSettingLocked(largeKey, testValue, null, true, TEST_PACKAGE);
+                fail("Should throw because it exceeded max string length");
+            } catch (IllegalArgumentException ex) {
+                assertTrue(ex.getMessage().contains("The max length allowed for the string is "));
+            }
+        }
+    }
+
+    public void testLargeSettingValue() {
+        SettingsState settingsState = new SettingsState(getContext(), mLock, mSettingsFile, 1,
+                SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper());
+        final String testKey = "testKey";
+        final String largeValue = Strings.repeat("A", SettingsState.MAX_LENGTH_PER_STRING + 1);
+        synchronized (mLock) {
+            // Test system package
+            try {
+                settingsState.insertSettingLocked(testKey, largeValue, null, true, SYSTEM_PACKAGE);
+                fail("Should throw because it exceeded max string length");
+            } catch (IllegalArgumentException ex) {
+                assertTrue(ex.getMessage().contains("The max length allowed for the string is "));
+            }
+            // Test non system package
+            try {
+                settingsState.insertSettingLocked(testKey, largeValue, null, true, TEST_PACKAGE);
+                fail("Should throw because it exceeded max string length");
+            } catch (IllegalArgumentException ex) {
+                assertTrue(ex.getMessage().contains("The max length allowed for the string is "));
+            }
+        }
+    }
 }
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index ee9883b..323f65f 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -17,12 +17,12 @@
  */
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-   package="com.android.shell"
-   coreApp="true"
-   android:sharedUserId="android.uid.shell"
-   >
+        package="com.android.shell"
+        coreApp="true"
+        android:sharedUserId="android.uid.shell"
+        >
 
-    <!-- Standard permissions granted to the shell. -->
+        <!-- Standard permissions granted to the shell. -->
     <uses-permission android:name="android.permission.MANAGE_HEALTH_PERMISSIONS" />
     <uses-permission android:name="android.permission.MANAGE_HEALTH_DATA" />
     <uses-permission android:name="android.permission.health.READ_EXERCISE_ROUTE" />
@@ -337,6 +337,7 @@
     <uses-permission android:name="android.permission.REQUEST_COMPANION_PROFILE_WATCH" />
     <uses-permission android:name="android.permission.REQUEST_COMPANION_PROFILE_GLASSES" />
     <uses-permission android:name="android.permission.REQUEST_COMPANION_SELF_MANAGED" />
+    <uses-permission android:name="android.permission.USE_COMPANION_TRANSPORTS" />
 
     <uses-permission android:name="android.permission.MANAGE_APPOPS" />
     <uses-permission android:name="android.permission.WATCH_APPOPS" />
@@ -834,8 +835,13 @@
     <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />
 
     <uses-permission android:name="android.permission.LOG_FOREGROUND_RESOURCE_USE" />
+
+    <!-- Permission required for CTS test - CtsPackageInstallTestCases -->
+    <uses-permission android:name="android.permission.READ_INSTALLED_SESSION_PATHS" />
+
     <!-- Permission required for GTS test - GtsAttestationVerificationDeviceSideTestCases -->
     <uses-permission android:name="android.permission.USE_ATTESTATION_VERIFICATION_SERVICE" />
+
     <!-- Permission required for GTS test - GtsCredentialsTestCases -->
     <uses-permission android:name="android.permission.LAUNCH_CREDENTIAL_SELECTOR" />
     <!-- Permission required for CTS test IntentRedirectionTest -->
@@ -843,11 +849,15 @@
     <!-- Permission required for accessing all content provider mime types -->
     <uses-permission android:name="android.permission.GET_ANY_PROVIDER_TYPE" />
 
+    <!-- Permission required for CTS test - CtsWallpaperTestCases -->
+    <uses-permission android:name="android.permission.ALWAYS_UPDATE_WALLPAPER" />
+
     <application
         android:label="@string/app_label"
         android:theme="@android:style/Theme.DeviceDefault.DayNight"
         android:defaultToDeviceProtectedStorage="true"
         android:directBootAware="true">
+
         <provider
             android:name="androidx.core.content.FileProvider"
             android:authorities="com.android.shell"
diff --git a/packages/Shell/res/values-am/strings.xml b/packages/Shell/res/values-am/strings.xml
index fe1f228..6cc13ec 100644
--- a/packages/Shell/res/values-am/strings.xml
+++ b/packages/Shell/res/values-am/strings.xml
@@ -25,9 +25,9 @@
     <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"የሳንካ ሪፖርቱ ከትንሽ ጊዜ በኋላ በስልኩ ላይ ይመጣል"</string>
     <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"የሳንካ ሪፖርትዎን ለማጋራት ይምረጡ"</string>
     <string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"የሳንካ ሪፖርትዎን ለማጋራት መታ ያድርጉ"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"የእርስዎን የሳንካ ሪፖርት ያለ ቅጽበታዊ ማያ ገጽ ለማጋራት ይምረጡ ወይም ቅጽበታዊ ማያ ገጹ እስኪጨርስ ይጠብቁ"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"የእርስዎን የሳንካ ሪፖርት ያለ ቅጽበታዊ ማያ ገጽ ለማጋራት መታ ያድርጉ ወይም ቅጽበታዊ ማያ ገጹ እስኪጨርስ ይጠብቁ"</string>
-    <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"የእርስዎን የሳንካ ሪፖርት ያለ ቅጽበታዊ ማያ ገጽ ለማጋራት መታ ያድርጉ ወይም ቅጽበታዊ ማያ ገጹ እስኪጨርስ ይጠብቁ"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"የእርስዎን የሳንካ ሪፖርት ያለ ቅጽበታዊ ማያ ገፅ ለማጋራት ይምረጡ ወይም ቅጽበታዊ ማያ ገጹ እስኪጨርስ ይጠብቁ"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"የእርስዎን የሳንካ ሪፖርት ያለ ቅጽበታዊ ማያ ገፅ ለማጋራት መታ ያድርጉ ወይም ቅጽበታዊ ማያ ገጹ እስኪጨርስ ይጠብቁ"</string>
+    <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"የእርስዎን የሳንካ ሪፖርት ያለ ቅጽበታዊ ማያ ገፅ ለማጋራት መታ ያድርጉ ወይም ቅጽበታዊ ማያ ገጹ እስኪጨርስ ይጠብቁ"</string>
     <string name="bugreport_confirm" msgid="5917407234515812495">"የሳንካ ሪፖርቶች ከተለያዩ የስርዓቱ የምዝግብ ማስታወሻ ፋይሎች የመጣ ውሂብ ይዘዋል፣ እነዚህም እርስዎ ሚስጥራዊነት ያለው ብለው የሚቆጥሯቸው (እንደ የመተግበሪያ አጠቃቀም እና የአካባቢ ውሂብ ያለ) ሊያካትቱ ይችላሉ። የሳንካ ሪፖርቶች ለሚያምኗቸው ሰዎች እና መተግበሪያዎች ብቻ ያጋሩ።"</string>
     <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"ዳግም አታሳይ"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"የሳንካ ሪፖርቶች"</string>
@@ -35,9 +35,9 @@
     <string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"የሳንካ ሪፖርት ዝርዝሮችን ወደ ዚፕ ፋይል ማከል አልተቻለም"</string>
     <string name="bugreport_unnamed" msgid="2800582406842092709">"ያልተሰየመ"</string>
     <string name="bugreport_info_action" msgid="2158204228510576227">"ዝርዝሮች"</string>
-    <string name="bugreport_screenshot_action" msgid="8677781721940614995">"ቅጽበታዊ ገጽ እይታ"</string>
-    <string name="bugreport_screenshot_taken" msgid="5684211273096253120">"ቅጽበታዊ ገጽ እይታ በተሳካ ሁኔታ ተነስቷል"</string>
-    <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ቅጽበታዊ ገጽ እይታ ሊነሳ አይችልም"</string>
+    <string name="bugreport_screenshot_action" msgid="8677781721940614995">"ቅጽበታዊ ገፅ እይታ"</string>
+    <string name="bugreport_screenshot_taken" msgid="5684211273096253120">"ቅጽበታዊ ገፅ እይታ በተሳካ ሁኔታ ተነስቷል"</string>
+    <string name="bugreport_screenshot_failed" msgid="5853049140806834601">"ቅጽበታዊ ገፅ እይታ ሊነሳ አይችልም"</string>
     <string name="bugreport_info_dialog_title" msgid="1355948594292983332">"የሳንካ ሪፖርት <xliff:g id="ID">#%d</xliff:g> ዝርዝሮች"</string>
     <string name="bugreport_info_name" msgid="4414036021935139527">"የፋይል ስም"</string>
     <string name="bugreport_info_title" msgid="2306030793918239804">"የሳንካ ርዕስ"</string>
diff --git a/packages/Shell/res/values-be/strings.xml b/packages/Shell/res/values-be/strings.xml
index ce369c3..b3d8a44 100644
--- a/packages/Shell/res/values-be/strings.xml
+++ b/packages/Shell/res/values-be/strings.xml
@@ -16,7 +16,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3701846017049540910">"Абалонка"</string>
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
     <string name="bugreport_notification_channel" msgid="2574150205913861141">"Справаздачы пра памылкі"</string>
     <string name="bugreport_in_progress_title" msgid="4311705936714972757">"Справаздача <xliff:g id="ID">#%d</xliff:g> пра памылку генерыруецца"</string>
     <string name="bugreport_finished_title" msgid="4429132808670114081">"Справаздача <xliff:g id="ID">#%d</xliff:g> пра памылку зафіксавана"</string>
diff --git a/packages/Shell/res/values-bs/strings.xml b/packages/Shell/res/values-bs/strings.xml
index 6abcc33..c9b4496 100644
--- a/packages/Shell/res/values-bs/strings.xml
+++ b/packages/Shell/res/values-bs/strings.xml
@@ -16,7 +16,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3701846017049540910">"Ljuska"</string>
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
     <string name="bugreport_notification_channel" msgid="2574150205913861141">"Izvještaji o greškama"</string>
     <string name="bugreport_in_progress_title" msgid="4311705936714972757">"Izvještaj o grešci <xliff:g id="ID">#%d</xliff:g> se generira"</string>
     <string name="bugreport_finished_title" msgid="4429132808670114081">"Izvještaj o grešci <xliff:g id="ID">#%d</xliff:g> je snimljen"</string>
diff --git a/packages/Shell/res/values-el/strings.xml b/packages/Shell/res/values-el/strings.xml
index 05233f7..7776c6b 100644
--- a/packages/Shell/res/values-el/strings.xml
+++ b/packages/Shell/res/values-el/strings.xml
@@ -16,7 +16,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3701846017049540910">"Κέλυφος"</string>
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
     <string name="bugreport_notification_channel" msgid="2574150205913861141">"Αναφορές σφαλμάτων"</string>
     <string name="bugreport_in_progress_title" msgid="4311705936714972757">"Δημιουργείται η αναφορά σφάλματος <xliff:g id="ID">#%d</xliff:g>"</string>
     <string name="bugreport_finished_title" msgid="4429132808670114081">"Έγινε λήψη της αναφοράς σφάλματος <xliff:g id="ID">#%d</xliff:g>"</string>
diff --git a/packages/Shell/res/values-et/strings.xml b/packages/Shell/res/values-et/strings.xml
index 4e3134a..48c7334 100644
--- a/packages/Shell/res/values-et/strings.xml
+++ b/packages/Shell/res/values-et/strings.xml
@@ -16,7 +16,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3701846017049540910">"Kest"</string>
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
     <string name="bugreport_notification_channel" msgid="2574150205913861141">"Veaaruanded"</string>
     <string name="bugreport_in_progress_title" msgid="4311705936714972757">"Luuakse veaaruannet <xliff:g id="ID">#%d</xliff:g>"</string>
     <string name="bugreport_finished_title" msgid="4429132808670114081">"Jäädvustati veaaruanne <xliff:g id="ID">#%d</xliff:g>"</string>
diff --git a/packages/Shell/res/values-gl/strings.xml b/packages/Shell/res/values-gl/strings.xml
index 912dc85..9d4f7de 100644
--- a/packages/Shell/res/values-gl/strings.xml
+++ b/packages/Shell/res/values-gl/strings.xml
@@ -20,7 +20,7 @@
     <string name="bugreport_notification_channel" msgid="2574150205913861141">"Informes de erros"</string>
     <string name="bugreport_in_progress_title" msgid="4311705936714972757">"Estase xerando o informe de erros <xliff:g id="ID">#%d</xliff:g>"</string>
     <string name="bugreport_finished_title" msgid="4429132808670114081">"Rexistrouse o informe de erros <xliff:g id="ID">#%d</xliff:g>"</string>
-    <string name="bugreport_updating_title" msgid="4423539949559634214">"Engadindo detalles ao informe de erro"</string>
+    <string name="bugreport_updating_title" msgid="4423539949559634214">"Engadindo detalles ao informe de erros"</string>
     <string name="bugreport_updating_wait" msgid="3322151947853929470">"Agarda..."</string>
     <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"O informe de erros aparecerá no teléfono en breve"</string>
     <string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"Selecciona para compartir o teu informe de erros"</string>
@@ -32,7 +32,7 @@
     <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"Non mostrar outra vez"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"Informes de erros"</string>
     <string name="bugreport_unreadable_text" msgid="586517851044535486">"Non se puido ler o ficheiro de informe de erros"</string>
-    <string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"Non se puideron engadir os detalles do informe de erro ao ficheiro zip"</string>
+    <string name="bugreport_add_details_to_zip_failed" msgid="1302931926486712371">"Non se puideron engadir os detalles do informe de erros ao ficheiro zip"</string>
     <string name="bugreport_unnamed" msgid="2800582406842092709">"sen nome"</string>
     <string name="bugreport_info_action" msgid="2158204228510576227">"Detalles"</string>
     <string name="bugreport_screenshot_action" msgid="8677781721940614995">"Captura de pantalla"</string>
diff --git a/packages/Shell/res/values-ka/strings.xml b/packages/Shell/res/values-ka/strings.xml
index 486490d..c90ca2b 100644
--- a/packages/Shell/res/values-ka/strings.xml
+++ b/packages/Shell/res/values-ka/strings.xml
@@ -16,7 +16,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3701846017049540910">"გარეკანი"</string>
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
     <string name="bugreport_notification_channel" msgid="2574150205913861141">"შეცდომების ანგარიშები"</string>
     <string name="bugreport_in_progress_title" msgid="4311705936714972757">"ხარვეზების შესახებ ანგარიში <xliff:g id="ID">#%d</xliff:g> გენერირდება"</string>
     <string name="bugreport_finished_title" msgid="4429132808670114081">"ხარვეზების შესახებ ანგარიში <xliff:g id="ID">#%d</xliff:g> აღბეჭდილია"</string>
diff --git a/packages/Shell/res/values-km/strings.xml b/packages/Shell/res/values-km/strings.xml
index 0ab3b68..c852547 100644
--- a/packages/Shell/res/values-km/strings.xml
+++ b/packages/Shell/res/values-km/strings.xml
@@ -16,7 +16,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3701846017049540910">"សែល"</string>
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
     <string name="bugreport_notification_channel" msgid="2574150205913861141">"របាយការណ៍អំពីបញ្ហា"</string>
     <string name="bugreport_in_progress_title" msgid="4311705936714972757">"<xliff:g id="ID">#%d</xliff:g> របាយការណ៍កំហុសកំពុងត្រូវបានបង្កើត"</string>
     <string name="bugreport_finished_title" msgid="4429132808670114081">"<xliff:g id="ID">#%d</xliff:g> របាយការណ៍កំហុសត្រូវបានថត"</string>
diff --git a/packages/Shell/res/values-my/strings.xml b/packages/Shell/res/values-my/strings.xml
index 2376ffd..a9827b0 100644
--- a/packages/Shell/res/values-my/strings.xml
+++ b/packages/Shell/res/values-my/strings.xml
@@ -16,7 +16,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3701846017049540910">"အခွံ"</string>
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
     <string name="bugreport_notification_channel" msgid="2574150205913861141">"ချွတ်ယွင်းမှု အစီရင်ခံစာများ"</string>
     <string name="bugreport_in_progress_title" msgid="4311705936714972757">"ချွတ်ယွင်းမှုအစီရင်ခံချက် <xliff:g id="ID">#%d</xliff:g> ကိုထုတ်နေပါသည်"</string>
     <string name="bugreport_finished_title" msgid="4429132808670114081">"ချွတ်ယွင်းမှုအစီရင်ခံချက် <xliff:g id="ID">#%d</xliff:g> ကိုရယူထားပြီးပါပြီ"</string>
diff --git a/packages/Shell/res/values-or/strings.xml b/packages/Shell/res/values-or/strings.xml
index 190dc5b..868df8b 100644
--- a/packages/Shell/res/values-or/strings.xml
+++ b/packages/Shell/res/values-or/strings.xml
@@ -16,7 +16,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3701846017049540910">"ଶେଲ୍‍"</string>
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
     <string name="bugreport_notification_channel" msgid="2574150205913861141">"ବଗ୍ ରିପୋର୍ଟ"</string>
     <string name="bugreport_in_progress_title" msgid="4311705936714972757">"ବଗ୍‍ ରିପୋର୍ଟ <xliff:g id="ID">#%d</xliff:g> ତିଆରି କରାଯାଉଛି"</string>
     <string name="bugreport_finished_title" msgid="4429132808670114081">"ବଗ୍‍ ରିପୋର୍ଟ <xliff:g id="ID">#%d</xliff:g> କ୍ୟାପଚର୍‍ କରାଗଲା"</string>
@@ -42,6 +42,6 @@
     <string name="bugreport_info_name" msgid="4414036021935139527">"ଫାଇଲ୍ ନାମ"</string>
     <string name="bugreport_info_title" msgid="2306030793918239804">"ବଗ୍‍ର ନାମ"</string>
     <string name="bugreport_info_description" msgid="5072835127481627722">"ବଗ୍‍ର ସଂକ୍ଷିପ୍ତ ବିବରଣୀ"</string>
-    <string name="save" msgid="4781509040564835759">"ସେଭ୍‌ କରନ୍ତୁ"</string>
+    <string name="save" msgid="4781509040564835759">"ସେଭ କରନ୍ତୁ"</string>
     <string name="bugreport_intent_chooser_title" msgid="7605709494790894076">"ବଗ୍‍ ରିପୋର୍ଟ ସେୟାର୍‍ କରନ୍ତୁ"</string>
 </resources>
diff --git a/packages/Shell/res/values-sk/strings.xml b/packages/Shell/res/values-sk/strings.xml
index ecceb55..7261b30 100644
--- a/packages/Shell/res/values-sk/strings.xml
+++ b/packages/Shell/res/values-sk/strings.xml
@@ -16,7 +16,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3701846017049540910">"Prostredie"</string>
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
     <string name="bugreport_notification_channel" msgid="2574150205913861141">"Hlásenia chýb"</string>
     <string name="bugreport_in_progress_title" msgid="4311705936714972757">"Generuje sa hlásenie chyby <xliff:g id="ID">#%d</xliff:g>"</string>
     <string name="bugreport_finished_title" msgid="4429132808670114081">"Hlásenie chyby <xliff:g id="ID">#%d</xliff:g> bolo zaznamenané"</string>
diff --git a/packages/Shell/res/values-zh-rHK/strings.xml b/packages/Shell/res/values-zh-rHK/strings.xml
index ccbea4d..e6118ae 100644
--- a/packages/Shell/res/values-zh-rHK/strings.xml
+++ b/packages/Shell/res/values-zh-rHK/strings.xml
@@ -16,7 +16,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3701846017049540910">"命令介面"</string>
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
     <string name="bugreport_notification_channel" msgid="2574150205913861141">"錯誤報告"</string>
     <string name="bugreport_in_progress_title" msgid="4311705936714972757">"正在產生錯誤報告 <xliff:g id="ID">#%d</xliff:g>"</string>
     <string name="bugreport_finished_title" msgid="4429132808670114081">"已擷取錯誤報告 <xliff:g id="ID">#%d</xliff:g>"</string>
@@ -28,7 +28,7 @@
     <string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"選擇以分享錯誤報告 (不包含螢幕擷取畫面),或等待螢幕畫面擷取完成"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="watch" msgid="1474435374470177193">"輕按以分享錯誤報告 (不包含螢幕擷圖),或等待螢幕畫面擷取完成"</string>
     <string name="bugreport_finished_pending_screenshot_text" product="default" msgid="1474435374470177193">"輕按以分享錯誤報告 (不包含螢幕擷圖),或等待螢幕畫面擷取完成"</string>
-    <string name="bugreport_confirm" msgid="5917407234515812495">"錯誤報告包含來自系統多個記錄檔案的資料,並可能涉及對您而言敏感的資料 (例如應用程式使用情況和位置資料)。您只應與信任的人和應用程式分享錯誤報告。"</string>
+    <string name="bugreport_confirm" msgid="5917407234515812495">"錯誤報告包含來自系統多個記錄檔案的資料,並可能涉及對你而言敏感的資料 (例如應用程式使用情況和位置資料)。你只應與信任的人和應用程式分享錯誤報告。"</string>
     <string name="bugreport_confirm_dont_repeat" msgid="6179945398364357318">"不要再顯示"</string>
     <string name="bugreport_storage_title" msgid="5332488144740527109">"錯誤報告"</string>
     <string name="bugreport_unreadable_text" msgid="586517851044535486">"無法讀取錯誤報告檔案"</string>
diff --git a/packages/Shell/res/values-zh-rTW/strings.xml b/packages/Shell/res/values-zh-rTW/strings.xml
index 96671c8..fb814bd 100644
--- a/packages/Shell/res/values-zh-rTW/strings.xml
+++ b/packages/Shell/res/values-zh-rTW/strings.xml
@@ -16,7 +16,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3701846017049540910">"殼層"</string>
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
     <string name="bugreport_notification_channel" msgid="2574150205913861141">"錯誤報告"</string>
     <string name="bugreport_in_progress_title" msgid="4311705936714972757">"正在產生錯誤報告 <xliff:g id="ID">#%d</xliff:g>"</string>
     <string name="bugreport_finished_title" msgid="4429132808670114081">"已擷取錯誤報告 <xliff:g id="ID">#%d</xliff:g>"</string>
diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java
index e069a9a..42952de 100644
--- a/packages/Shell/src/com/android/shell/BugreportProgressService.java
+++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java
@@ -1212,13 +1212,31 @@
 
     private void maybeShowWarningMessageAndCloseNotification(int id) {
         if (!hasUserDecidedNotToGetWarningMessage()) {
-            Intent warningIntent = buildWarningIntent(mContext, /* sendIntent */ null);
+            Intent warningIntent;
+            if (mIsWatch) {
+                warningIntent = buildWearWarningIntent();
+            } else {
+                warningIntent = buildWarningIntent(mContext, /* sendIntent */ null);
+            }
             warningIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             mContext.startActivity(warningIntent);
         }
         NotificationManager.from(mContext).cancel(id);
     }
 
+    /**
+     * Build intent to show warning dialog on Wear after bugreport is done
+     */
+    private Intent buildWearWarningIntent() {
+        Intent intent = new Intent();
+        intent.setClassName(mContext, getPackageName() + ".WearBugreportWarningActivity");
+        if (mContext.getPackageManager().resolveActivity(intent, /* flags */ 0) == null) {
+            Log.e(TAG, "Cannot find wear bugreport warning activity");
+            return buildWarningIntent(mContext, /* sendIntent */ null);
+        }
+        return intent;
+    }
+
     private void shareBugreport(int id, BugreportInfo sharedInfo) {
         shareBugreport(id, sharedInfo, !hasUserDecidedNotToGetWarningMessage());
     }
diff --git a/packages/Shell/tests/Android.bp b/packages/Shell/tests/Android.bp
index 70e8c10..0dc3314 100644
--- a/packages/Shell/tests/Android.bp
+++ b/packages/Shell/tests/Android.bp
@@ -18,7 +18,7 @@
     static_libs: [
         "androidx.test.rules",
         "mockito-target-minus-junit4",
-        "ub-uiautomator",
+        "androidx.test.uiautomator_uiautomator",
         "junit",
     ],
     platform_apis: true,
diff --git a/packages/Shell/tests/src/com/android/shell/BugreportReceiverTest.java b/packages/Shell/tests/src/com/android/shell/BugreportReceiverTest.java
index a719d77..4579168 100644
--- a/packages/Shell/tests/src/com/android/shell/BugreportReceiverTest.java
+++ b/packages/Shell/tests/src/com/android/shell/BugreportReceiverTest.java
@@ -59,10 +59,6 @@
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.service.notification.StatusBarNotification;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject;
-import android.support.test.uiautomator.UiObject2;
-import android.support.test.uiautomator.UiObjectNotFoundException;
 import android.text.TextUtils;
 import android.text.format.DateUtils;
 import android.util.Log;
@@ -71,6 +67,10 @@
 import androidx.test.filters.LargeTest;
 import androidx.test.rule.ServiceTestRule;
 import androidx.test.runner.AndroidJUnit4;
+import androidx.test.uiautomator.UiDevice;
+import androidx.test.uiautomator.UiObject;
+import androidx.test.uiautomator.UiObject2;
+import androidx.test.uiautomator.UiObjectNotFoundException;
 
 import com.android.shell.ActionSendMultipleConsumerActivity.CustomActionSendMultipleListener;
 
diff --git a/packages/Shell/tests/src/com/android/shell/UiBot.java b/packages/Shell/tests/src/com/android/shell/UiBot.java
index 53b124f..ce9f70d 100644
--- a/packages/Shell/tests/src/com/android/shell/UiBot.java
+++ b/packages/Shell/tests/src/com/android/shell/UiBot.java
@@ -19,16 +19,17 @@
 import android.app.Instrumentation;
 import android.app.StatusBarManager;
 import android.os.SystemClock;
-import android.support.test.uiautomator.By;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject;
-import android.support.test.uiautomator.UiObject2;
-import android.support.test.uiautomator.UiObjectNotFoundException;
-import android.support.test.uiautomator.UiSelector;
-import android.support.test.uiautomator.Until;
 import android.text.format.DateUtils;
 import android.util.Log;
 
+import androidx.test.uiautomator.By;
+import androidx.test.uiautomator.UiDevice;
+import androidx.test.uiautomator.UiObject;
+import androidx.test.uiautomator.UiObject2;
+import androidx.test.uiautomator.UiObjectNotFoundException;
+import androidx.test.uiautomator.UiSelector;
+import androidx.test.uiautomator.Until;
+
 import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertNotNull;
 import static junit.framework.Assert.assertTrue;
diff --git a/packages/SimAppDialog/res/values-zh-rHK/strings.xml b/packages/SimAppDialog/res/values-zh-rHK/strings.xml
index bc490f0..7897987 100644
--- a/packages/SimAppDialog/res/values-zh-rHK/strings.xml
+++ b/packages/SimAppDialog/res/values-zh-rHK/strings.xml
@@ -19,8 +19,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="8898068901680117589">"Sim App Dialog"</string>
     <string name="install_carrier_app_title" msgid="334729104862562585">"啟動流動服務"</string>
-    <string name="install_carrier_app_description" msgid="4014303558674923797">"為確保新的 SIM 卡正常運作,您必須先安裝「<xliff:g id="ID_1">%1$s</xliff:g>」應用程式"</string>
-    <string name="install_carrier_app_description_default" msgid="7356830245205847840">"為確保新的 SIM 卡正常運作,您必須先安裝流動網絡供應商應用程式"</string>
+    <string name="install_carrier_app_description" msgid="4014303558674923797">"為確保新的 SIM 卡正常運作,你必須先安裝「<xliff:g id="ID_1">%1$s</xliff:g>」應用程式"</string>
+    <string name="install_carrier_app_description_default" msgid="7356830245205847840">"為確保新的 SIM 卡正常運作,你必須先安裝流動網絡供應商應用程式"</string>
     <string name="install_carrier_app_defer_action" msgid="2558576736886876209">"暫時不要"</string>
     <string name="install_carrier_app_download_action" msgid="7859229305958538064">"下載應用程式"</string>
 </resources>
diff --git a/packages/SoundPicker/Android.bp b/packages/SoundPicker/Android.bp
index 2c89d6d..235e672 100644
--- a/packages/SoundPicker/Android.bp
+++ b/packages/SoundPicker/Android.bp
@@ -7,22 +7,40 @@
     default_applicable_licenses: ["frameworks_base_license"],
 }
 
-android_app {
-    name: "SoundPicker",
-    defaults: ["platform_app_defaults"],
-    manifest: "AndroidManifest.xml",
-
-    static_libs: [
-        "androidx.appcompat_appcompat",
+android_library {
+    name: "SoundPickerLib",
+    srcs: [
+        "src/**/*.java",
     ],
     resource_dirs: [
         "res",
     ],
-    srcs: [
-        "src/**/*.java",
+    static_libs: [
+        "androidx.appcompat_appcompat",
+        "hilt_android",
+        "guava",
+        "androidx.recyclerview_recyclerview",
+        "androidx-constraintlayout_constraintlayout",
+        "androidx.viewpager2_viewpager2",
+        "com.google.android.material_material",
     ],
+}
 
+android_app {
+    name: "SoundPicker",
+    defaults: ["platform_app_defaults"],
+    manifest: "AndroidManifest.xml",
+    static_libs: ["SoundPickerLib"],
     platform_apis: true,
     certificate: "media",
     privileged: true,
+
+    optimize: {
+        enabled: true,
+        optimize: true,
+        shrink: true,
+        shrink_resources: true,
+        obfuscate: false,
+        proguard_compatibility: false,
+    },
 }
diff --git a/packages/SoundPicker/AndroidManifest.xml b/packages/SoundPicker/AndroidManifest.xml
index 6cb885f..934b003 100644
--- a/packages/SoundPicker/AndroidManifest.xml
+++ b/packages/SoundPicker/AndroidManifest.xml
@@ -9,9 +9,13 @@
     <uses-permission android:name="android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY" />
     <uses-permission android:name="android.permission.WRITE_SETTINGS" />
 
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
+
     <application
+            android:name=".RingtonePickerApplication"
             android:allowBackup="false"
             android:label="@string/app_label"
+            android:theme="@style/Theme.AppCompat"
             android:supportsRtl="true">
         <receiver android:name="RingtoneReceiver"
                 android:exported="true">
@@ -23,13 +27,16 @@
         <service android:name="RingtoneOverlayService" />
 
         <activity android:name="RingtonePickerActivity"
-                android:theme="@style/PickerDialogTheme"
+                android:theme="@style/Theme.AppCompat.Dialog"
                 android:enabled="@*android:bool/config_defaultRingtonePickerEnabled"
                 android:excludeFromRecents="true"
                 android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.RINGTONE_PICKER" />
                 <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.RINGTONE_PICKER_SOUND" />
+                <category android:name="android.intent.category.RINGTONE_PICKER_VIBRATION" />
+                <category android:name="android.intent.category.RINGTONE_PICKER_RINGTONE" />
             </intent-filter>
         </activity>
     </application>
diff --git a/packages/SoundPicker/OWNERS b/packages/SoundPicker/OWNERS
new file mode 100644
index 0000000..5bf46e0
--- /dev/null
+++ b/packages/SoundPicker/OWNERS
@@ -0,0 +1,2 @@
+# Haptics team works on the SoundPicker
+include platform/frameworks/base:/services/core/java/com/android/server/vibrator/OWNERS
diff --git a/packages/SoundPicker/res/layout/activity_ringtone_picker.xml b/packages/SoundPicker/res/layout/activity_ringtone_picker.xml
new file mode 100644
index 0000000..6fc6080
--- /dev/null
+++ b/packages/SoundPicker/res/layout/activity_ringtone_picker.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:orientation="vertical"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"/>
\ No newline at end of file
diff --git a/packages/SoundPicker/res/layout/add_new_sound_item.xml b/packages/SoundPicker/res/layout/add_new_sound_item.xml
index 14421c9..024b97e 100644
--- a/packages/SoundPicker/res/layout/add_new_sound_item.xml
+++ b/packages/SoundPicker/res/layout/add_new_sound_item.xml
@@ -16,12 +16,14 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content"
-    android:gravity="center_vertical"
-    android:background="?android:attr/selectableItemBackground">
+              android:layout_width="fill_parent"
+              android:layout_height="wrap_content"
+              android:gravity="center_vertical"
+              android:background="?android:attr/selectableItemBackground"
+              android:focusable="true"
+              android:clickable="true">
 
-<ImageView
+    <ImageView
         android:layout_width="24dp"
         android:layout_height="24dp"
         android:layout_alignParentRight="true"
@@ -29,9 +31,9 @@
         android:scaleType="centerCrop"
         android:layout_marginRight="24dp"
         android:layout_marginLeft="24dp"
-        android:src="@drawable/ic_add" />
+        android:src="@drawable/ic_add"/>
 
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    <TextView
         android:id="@+id/add_new_sound_text"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -43,5 +45,5 @@
         android:gravity="center_vertical"
         android:paddingEnd="?android:attr/dialogPreferredPadding"
         android:drawablePadding="20dp"
-        android:ellipsize="marquee" />
+        android:ellipsize="marquee"/>
 </LinearLayout>
\ No newline at end of file
diff --git a/packages/SoundPicker/res/layout/fragment_ringtone_picker.xml b/packages/SoundPicker/res/layout/fragment_ringtone_picker.xml
new file mode 100644
index 0000000..787f92e
--- /dev/null
+++ b/packages/SoundPicker/res/layout/fragment_ringtone_picker.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<androidx.recyclerview.widget.RecyclerView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/recycler_view"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+/>
\ No newline at end of file
diff --git a/packages/SoundPicker/res/layout/fragment_tabbed_dialog.xml b/packages/SoundPicker/res/layout/fragment_tabbed_dialog.xml
new file mode 100644
index 0000000..7efd911
--- /dev/null
+++ b/packages/SoundPicker/res/layout/fragment_tabbed_dialog.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:orientation="vertical"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent">
+    <com.google.android.material.tabs.TabLayout
+            android:id="@+id/tabLayout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"/>
+    <androidx.viewpager2.widget.ViewPager2
+            android:id="@+id/masterViewPager"
+            android:paddingTop="12dp"
+            android:paddingBottom="12dp"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/SoundPicker/res/layout/radio_with_work_badge.xml b/packages/SoundPicker/res/layout/radio_with_work_badge.xml
index c8ca231..36ac93e 100644
--- a/packages/SoundPicker/res/layout/radio_with_work_badge.xml
+++ b/packages/SoundPicker/res/layout/radio_with_work_badge.xml
@@ -14,12 +14,14 @@
      limitations under the License.
 -->
 
-<com.android.soundpicker.CheckedListItem xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.soundpicker.CheckedListItem
+    xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:gravity="center_vertical"
     android:background="?android:attr/selectableItemBackground"
-    >
+    android:focusable="true"
+    android:clickable="true">
 
     <CheckedTextView
         android:id="@+id/checked_text_view"
@@ -35,7 +37,7 @@
         android:drawablePadding="20dp"
         android:ellipsize="marquee"
         android:layout_toLeftOf="@+id/work_icon"
-        android:maxLines="3" />
+        android:maxLines="3"/>
 
     <ImageView
         android:id="@id/work_icon"
@@ -44,5 +46,5 @@
         android:layout_alignParentRight="true"
         android:layout_centerVertical="true"
         android:scaleType="centerCrop"
-        android:layout_marginRight="20dp" />
+        android:layout_marginRight="20dp"/>
 </com.android.soundpicker.CheckedListItem>
diff --git a/packages/SoundPicker/res/values-af/strings.xml b/packages/SoundPicker/res/values-af/strings.xml
index fd857b1..7396b76 100644
--- a/packages/SoundPicker/res/values-af/strings.xml
+++ b/packages/SoundPicker/res/values-af/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Kan nie gepasmaakte luitoon byvoeg nie"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Kan nie gepasmaakte luitoon uitvee nie"</string>
     <string name="app_label" msgid="3091611356093417332">"Klanke"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Die lys is leeg"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Klank"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibrasie"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-am/strings.xml b/packages/SoundPicker/res/values-am/strings.xml
index 85206c0..bd1c24b 100644
--- a/packages/SoundPicker/res/values-am/strings.xml
+++ b/packages/SoundPicker/res/values-am/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"ብጁ የጥሪ ቅላጼን ማከል አልተቻለም"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"ብጁ የጥሪ ቅላጼን መሰረዝ አልተቻለም"</string>
     <string name="app_label" msgid="3091611356093417332">"ድምፆች"</string>
+    <string name="empty_list" msgid="2871978423955821191">"ዝርዝሩ ባዶ ነው"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"ድምፅ"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"ንዝረት"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-ar/strings.xml b/packages/SoundPicker/res/values-ar/strings.xml
index f8844e9..805c7cf 100644
--- a/packages/SoundPicker/res/values-ar/strings.xml
+++ b/packages/SoundPicker/res/values-ar/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"يتعذر إضافة نغمة رنين مخصصة"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"يتعذر حذف نغمة الرنين المخصصة"</string>
     <string name="app_label" msgid="3091611356093417332">"الأصوات"</string>
+    <string name="empty_list" msgid="2871978423955821191">"القائمة فارغة."</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"الصوت"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"الاهتزاز"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-as/strings.xml b/packages/SoundPicker/res/values-as/strings.xml
index 5d6bc5d..0a1cd1b 100644
--- a/packages/SoundPicker/res/values-as/strings.xml
+++ b/packages/SoundPicker/res/values-as/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"নিজৰ উপযোগিতা অনুযায়ী তৈয়াৰ কৰা ৰিংট\'ন যোগ কৰিব পৰা নগ\'ল"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"নিজৰ উপযোগিতা অনুযায়ী তৈয়াৰ কৰা ৰিংট\'ন মচিব পৰা নগ\'ল"</string>
     <string name="app_label" msgid="3091611356093417332">"ধ্বনিসমূহ"</string>
+    <string name="empty_list" msgid="2871978423955821191">"সূচীখন খালী আছে"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"ধ্বনি"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"কম্পন"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-az/strings.xml b/packages/SoundPicker/res/values-az/strings.xml
index e32c3eb..a308329 100644
--- a/packages/SoundPicker/res/values-az/strings.xml
+++ b/packages/SoundPicker/res/values-az/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Fərdi zəng səsi əlavə etmək mümkün deyil"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Fərdi zəng səsini silmək mümkün deyil"</string>
     <string name="app_label" msgid="3091611356093417332">"Səslər"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Siyahı boşdur"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Səs"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibrasiya"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-b+sr+Latn/strings.xml b/packages/SoundPicker/res/values-b+sr+Latn/strings.xml
index 947c85c..2a7a196 100644
--- a/packages/SoundPicker/res/values-b+sr+Latn/strings.xml
+++ b/packages/SoundPicker/res/values-b+sr+Latn/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Dodavanje prilagođene melodije zvona nije uspelo"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Brisanje prilagođene melodije zvona nije uspelo"</string>
     <string name="app_label" msgid="3091611356093417332">"Zvukovi"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Lista je prazna"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Zvuk"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibriranje"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-be/strings.xml b/packages/SoundPicker/res/values-be/strings.xml
index 6f7fc68..431a301 100644
--- a/packages/SoundPicker/res/values-be/strings.xml
+++ b/packages/SoundPicker/res/values-be/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Немагчыма дадаць карыстальніцкі рынгтон"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Немагчыма выдаліць карыстальніцкі рынгтон"</string>
     <string name="app_label" msgid="3091611356093417332">"Гукі"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Спіс пусты"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Гук"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Вібрацыя"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-bg/strings.xml b/packages/SoundPicker/res/values-bg/strings.xml
index 4277d28..7447af6 100644
--- a/packages/SoundPicker/res/values-bg/strings.xml
+++ b/packages/SoundPicker/res/values-bg/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Персонализираната мелодия не може да се добави"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Персонализираната мелодия не може да се изтрие"</string>
     <string name="app_label" msgid="3091611356093417332">"Sounds"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Списъкът е празен"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Звук"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Вибриране"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-bn/strings.xml b/packages/SoundPicker/res/values-bn/strings.xml
index 276594a..c31b36a 100644
--- a/packages/SoundPicker/res/values-bn/strings.xml
+++ b/packages/SoundPicker/res/values-bn/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"কাস্টম রিংটোন যোগ করা গেল না"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"কাস্টম রিংটোন মোছা গেল না"</string>
     <string name="app_label" msgid="3091611356093417332">"Sounds"</string>
+    <string name="empty_list" msgid="2871978423955821191">"তালিকায় কিছু নেই"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"সাউন্ড"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"ভাইব্রেশন"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-bs/strings.xml b/packages/SoundPicker/res/values-bs/strings.xml
index 0c8d33f..e65b90d 100644
--- a/packages/SoundPicker/res/values-bs/strings.xml
+++ b/packages/SoundPicker/res/values-bs/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nije moguće dodati prilagođenu melodiju zvona"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nije moguće izbrisati prilagođenu melodiju zvona"</string>
     <string name="app_label" msgid="3091611356093417332">"Zvukovi"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Lista je prazna"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Zvuk"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibracija"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-ca/strings.xml b/packages/SoundPicker/res/values-ca/strings.xml
index ed96f70..33839bc 100644
--- a/packages/SoundPicker/res/values-ca/strings.xml
+++ b/packages/SoundPicker/res/values-ca/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"No es pot afegir el so de trucada personalitzat"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"No es pot suprimir el so de trucada personalitzat"</string>
     <string name="app_label" msgid="3091611356093417332">"Sons"</string>
+    <string name="empty_list" msgid="2871978423955821191">"La llista és buida"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"So"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibració"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-cs/strings.xml b/packages/SoundPicker/res/values-cs/strings.xml
index dc67c96..612a6b2 100644
--- a/packages/SoundPicker/res/values-cs/strings.xml
+++ b/packages/SoundPicker/res/values-cs/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Vlastní vyzvánění se nepodařilo přidat"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Vlastní vyzvánění se nepodařilo smazat"</string>
     <string name="app_label" msgid="3091611356093417332">"Zvuky"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Seznam je prázdný"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Zvuk"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibrace"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-da/strings.xml b/packages/SoundPicker/res/values-da/strings.xml
index b4437dc..56c4d23 100644
--- a/packages/SoundPicker/res/values-da/strings.xml
+++ b/packages/SoundPicker/res/values-da/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Den tilpassede ringetone kunne ikke tilføjes"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Den tilpassede ringetone kunne ikke slettes"</string>
     <string name="app_label" msgid="3091611356093417332">"Lyde"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Listen er tom"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Lyd"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibration"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-de/strings.xml b/packages/SoundPicker/res/values-de/strings.xml
index 8be3aaa..b004e2a 100644
--- a/packages/SoundPicker/res/values-de/strings.xml
+++ b/packages/SoundPicker/res/values-de/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Benutzerdefinierter Klingelton konnte nicht hinzugefügt werden"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Benutzerdefinierter Klingelton konnte nicht gelöscht werden"</string>
     <string name="app_label" msgid="3091611356093417332">"Töne"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Die Liste ist leer"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Ton"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibration"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-el/strings.xml b/packages/SoundPicker/res/values-el/strings.xml
index 41e9b0c..bbcb1f5 100644
--- a/packages/SoundPicker/res/values-el/strings.xml
+++ b/packages/SoundPicker/res/values-el/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Δεν είναι δυνατή η προσθήκη προσαρμοσμένου ήχου κλήσης"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Δεν είναι δυνατή η διαγραφή προσαρμοσμένου ήχου κλήσης"</string>
     <string name="app_label" msgid="3091611356093417332">"Ήχοι"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Η λίστα είναι κενή"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Ήχος"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Δόνηση"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-en-rAU/strings.xml b/packages/SoundPicker/res/values-en-rAU/strings.xml
index 4c237b9..5030314 100644
--- a/packages/SoundPicker/res/values-en-rAU/strings.xml
+++ b/packages/SoundPicker/res/values-en-rAU/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Unable to add customised ringtone"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Unable to delete customised ringtone"</string>
     <string name="app_label" msgid="3091611356093417332">"Sounds"</string>
+    <string name="empty_list" msgid="2871978423955821191">"The list is empty"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Sound"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibration"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-en-rCA/strings.xml b/packages/SoundPicker/res/values-en-rCA/strings.xml
index b0708356..d887082 100644
--- a/packages/SoundPicker/res/values-en-rCA/strings.xml
+++ b/packages/SoundPicker/res/values-en-rCA/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Unable to add custom ringtone"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Unable to delete custom ringtone"</string>
     <string name="app_label" msgid="3091611356093417332">"Sounds"</string>
+    <string name="empty_list" msgid="2871978423955821191">"The list is empty"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Sound"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibration"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-en-rGB/strings.xml b/packages/SoundPicker/res/values-en-rGB/strings.xml
index 4c237b9..5030314 100644
--- a/packages/SoundPicker/res/values-en-rGB/strings.xml
+++ b/packages/SoundPicker/res/values-en-rGB/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Unable to add customised ringtone"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Unable to delete customised ringtone"</string>
     <string name="app_label" msgid="3091611356093417332">"Sounds"</string>
+    <string name="empty_list" msgid="2871978423955821191">"The list is empty"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Sound"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibration"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-en-rIN/strings.xml b/packages/SoundPicker/res/values-en-rIN/strings.xml
index 4c237b9..5030314 100644
--- a/packages/SoundPicker/res/values-en-rIN/strings.xml
+++ b/packages/SoundPicker/res/values-en-rIN/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Unable to add customised ringtone"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Unable to delete customised ringtone"</string>
     <string name="app_label" msgid="3091611356093417332">"Sounds"</string>
+    <string name="empty_list" msgid="2871978423955821191">"The list is empty"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Sound"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibration"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-en-rXC/strings.xml b/packages/SoundPicker/res/values-en-rXC/strings.xml
index 8397e0b..d26c89b 100644
--- a/packages/SoundPicker/res/values-en-rXC/strings.xml
+++ b/packages/SoundPicker/res/values-en-rXC/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‎Unable to add custom ringtone‎‏‎‎‏‎"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‎Unable to delete custom ringtone‎‏‎‎‏‎"</string>
     <string name="app_label" msgid="3091611356093417332">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‎‎Sounds‎‏‎‎‏‎"</string>
+    <string name="empty_list" msgid="2871978423955821191">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‎‎‎‎‏‏‏‎The list is empty‎‏‎‎‏‎"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‎‎‏‎‎‏‎‏‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎Sound‎‏‎‎‏‎"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‎‎‏‎‎‎‏‎‏‎Vibration‎‏‎‎‏‎"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-es-rUS/strings.xml b/packages/SoundPicker/res/values-es-rUS/strings.xml
index 5bf73b2..211bfed 100644
--- a/packages/SoundPicker/res/values-es-rUS/strings.xml
+++ b/packages/SoundPicker/res/values-es-rUS/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"No se puede agregar el tono personalizado"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"No se puede borrar el tono personalizado"</string>
     <string name="app_label" msgid="3091611356093417332">"Sonidos"</string>
+    <string name="empty_list" msgid="2871978423955821191">"La lista está vacía"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Sonido"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibración"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-es/strings.xml b/packages/SoundPicker/res/values-es/strings.xml
index a77f656..3fdad74 100644
--- a/packages/SoundPicker/res/values-es/strings.xml
+++ b/packages/SoundPicker/res/values-es/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"No se ha podido añadir un tono de llamada personalizado"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"No se ha podido eliminar un tono de llamada personalizado"</string>
     <string name="app_label" msgid="3091611356093417332">"Sonidos"</string>
+    <string name="empty_list" msgid="2871978423955821191">"La lista está vacía"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Sonido"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibración"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-et/strings.xml b/packages/SoundPicker/res/values-et/strings.xml
index fa680ac..3d9ee94 100644
--- a/packages/SoundPicker/res/values-et/strings.xml
+++ b/packages/SoundPicker/res/values-et/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Kohandatud helinat ei õnnestu lisada"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Kohandatud helinat ei õnnestu kustutada"</string>
     <string name="app_label" msgid="3091611356093417332">"Helid"</string>
+    <string name="empty_list" msgid="2871978423955821191">"See loend on tühi"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Heli"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibreerimine"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-eu/strings.xml b/packages/SoundPicker/res/values-eu/strings.xml
index e8e07fe..1f929bf 100644
--- a/packages/SoundPicker/res/values-eu/strings.xml
+++ b/packages/SoundPicker/res/values-eu/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Ezin da gehitu tonu pertsonalizatua"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Ezin da ezabatu tonu pertsonalizatua"</string>
     <string name="app_label" msgid="3091611356093417332">"Soinuak"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Zerrenda hutsik dago"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Soinua"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Dardara"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-fa/strings.xml b/packages/SoundPicker/res/values-fa/strings.xml
index 769d5d5..3b75ac9 100644
--- a/packages/SoundPicker/res/values-fa/strings.xml
+++ b/packages/SoundPicker/res/values-fa/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"افزودن آهنگ زنگ سفارشی ممکن نیست"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"حذف آهنگ زنگ سفارشی ممکن نیست"</string>
     <string name="app_label" msgid="3091611356093417332">"صداها"</string>
+    <string name="empty_list" msgid="2871978423955821191">"فهرست خالی است"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"صدا"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"لرزش"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-fi/strings.xml b/packages/SoundPicker/res/values-fi/strings.xml
index 9f64f83..15bf658 100644
--- a/packages/SoundPicker/res/values-fi/strings.xml
+++ b/packages/SoundPicker/res/values-fi/strings.xml
@@ -18,7 +18,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="ringtone_default" msgid="798836092118824500">"Oletussoittoääni"</string>
     <string name="notification_sound_default" msgid="8133121186242636840">"Ilmoituksen oletusääni"</string>
-    <string name="alarm_sound_default" msgid="4787646764557462649">"Herätyksen oletusääni"</string>
+    <string name="alarm_sound_default" msgid="4787646764557462649">"Hälytyksen oletusääni"</string>
     <string name="add_ringtone_text" msgid="6642389991738337529">"Lisää soittoääni"</string>
     <string name="add_alarm_text" msgid="3545497316166999225">"Lisää hälytys"</string>
     <string name="add_notification_text" msgid="4431129543300614788">"Lisää ilmoitus"</string>
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Muokatun soittoäänen lisääminen epäonnistui."</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Muokatun soittoäänen poistaminen epäonnistui."</string>
     <string name="app_label" msgid="3091611356093417332">"Äänet"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Lista on tyhjä"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Ääni"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Värinä"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-fr-rCA/strings.xml b/packages/SoundPicker/res/values-fr-rCA/strings.xml
index 4d4545f..1cc170f 100644
--- a/packages/SoundPicker/res/values-fr-rCA/strings.xml
+++ b/packages/SoundPicker/res/values-fr-rCA/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Impossible d\'ajouter une sonnerie personnalisée"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Impossible de supprimer la sonnerie personnalisée"</string>
     <string name="app_label" msgid="3091611356093417332">"Sons"</string>
+    <string name="empty_list" msgid="2871978423955821191">"La liste est vide"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Son"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibration"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-fr/strings.xml b/packages/SoundPicker/res/values-fr/strings.xml
index 9452e70..ade2c16 100644
--- a/packages/SoundPicker/res/values-fr/strings.xml
+++ b/packages/SoundPicker/res/values-fr/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Impossible d\'ajouter une sonnerie personnalisée"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Impossible de supprimer la sonnerie personnalisée"</string>
     <string name="app_label" msgid="3091611356093417332">"Sounds"</string>
+    <string name="empty_list" msgid="2871978423955821191">"La liste est vide"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Son"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibration"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-gl/strings.xml b/packages/SoundPicker/res/values-gl/strings.xml
index 59a9d06..83f2b2e 100644
--- a/packages/SoundPicker/res/values-gl/strings.xml
+++ b/packages/SoundPicker/res/values-gl/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Non se pode engadir un ton de chamada personalizado"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Non se pode eliminar un ton de chamada personalizado"</string>
     <string name="app_label" msgid="3091611356093417332">"Sons"</string>
+    <string name="empty_list" msgid="2871978423955821191">"A lista está baleira"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Son"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibración"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-gu/strings.xml b/packages/SoundPicker/res/values-gu/strings.xml
index 209769f..8207512 100644
--- a/packages/SoundPicker/res/values-gu/strings.xml
+++ b/packages/SoundPicker/res/values-gu/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"કસ્ટમ રિંગટોન ઉમેરવામાં અસમર્થ"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"કસ્ટમ રિંગટોન કાઢી નાખવામાં અસમર્થ"</string>
     <string name="app_label" msgid="3091611356093417332">"Sounds"</string>
+    <string name="empty_list" msgid="2871978423955821191">"સૂચિ ખાલી છે"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"સાઉન્ડ"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"વાઇબ્રેશન"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-hi/strings.xml b/packages/SoundPicker/res/values-hi/strings.xml
index ab3b7f8..304201f 100644
--- a/packages/SoundPicker/res/values-hi/strings.xml
+++ b/packages/SoundPicker/res/values-hi/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"आपके मुताबिक रिंगटोन नहीं जोड़ी जा सकी"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"आपके मुताबिक रिंगटोन नहीं हटाई जा सकी"</string>
     <string name="app_label" msgid="3091611356093417332">"Sounds"</string>
+    <string name="empty_list" msgid="2871978423955821191">"यह सूची खाली है"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"साउंड"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"वाइब्रेशन"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-hr/strings.xml b/packages/SoundPicker/res/values-hr/strings.xml
index 3adc500..642c7d5 100644
--- a/packages/SoundPicker/res/values-hr/strings.xml
+++ b/packages/SoundPicker/res/values-hr/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Dodavanje prilagođene melodije zvona nije moguće"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Brisanje prilagođene melodije zvona nije moguće"</string>
     <string name="app_label" msgid="3091611356093417332">"Zvukovi"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Popis je prazan"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Zvuk"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibracija"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-hu/strings.xml b/packages/SoundPicker/res/values-hu/strings.xml
index 32d4ba9..401da84 100644
--- a/packages/SoundPicker/res/values-hu/strings.xml
+++ b/packages/SoundPicker/res/values-hu/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nem sikerült hozzáadni az egyéni csengőhangot"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nem sikerült törölni az egyéni csengőhangot"</string>
     <string name="app_label" msgid="3091611356093417332">"Hangok"</string>
+    <string name="empty_list" msgid="2871978423955821191">"A lista üres"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Hang"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Rezgés"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-hy/strings.xml b/packages/SoundPicker/res/values-hy/strings.xml
index da8934f..d57345c 100644
--- a/packages/SoundPicker/res/values-hy/strings.xml
+++ b/packages/SoundPicker/res/values-hy/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Հնարավոր չէ հատուկ զանգերանգ ավելացնել"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Հնարավոր չէ ջնջել հատուկ զանգերանգը"</string>
     <string name="app_label" msgid="3091611356093417332">"Ձայներ"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Ցանկը դատարկ է"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Ձայն"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Թրթռոց"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-in/strings.xml b/packages/SoundPicker/res/values-in/strings.xml
index 86dce64..518a09d 100644
--- a/packages/SoundPicker/res/values-in/strings.xml
+++ b/packages/SoundPicker/res/values-in/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Tidak dapat menambahkan nada dering khusus"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Tidak dapat menghapus nada dering khusus"</string>
     <string name="app_label" msgid="3091611356093417332">"Sounds"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Daftar ini kosong"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Suara"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Getaran"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-is/strings.xml b/packages/SoundPicker/res/values-is/strings.xml
index d0fce78..7f05c79 100644
--- a/packages/SoundPicker/res/values-is/strings.xml
+++ b/packages/SoundPicker/res/values-is/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Get ekki bætt sérsniðnum hringitóni við"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Get ekki eytt sérsniðnum hringitóni"</string>
     <string name="app_label" msgid="3091611356093417332">"Hljóð"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Listinn er auður"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Hljóð"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Titringur"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-it/strings.xml b/packages/SoundPicker/res/values-it/strings.xml
index 632cb41..e1d8e19 100644
--- a/packages/SoundPicker/res/values-it/strings.xml
+++ b/packages/SoundPicker/res/values-it/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Impossibile aggiungere suoneria personalizzata"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Impossibile eliminare suoneria personalizzata"</string>
     <string name="app_label" msgid="3091611356093417332">"Sounds"</string>
+    <string name="empty_list" msgid="2871978423955821191">"L\'elenco è vuoto"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Suoneria"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibrazione"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-iw/strings.xml b/packages/SoundPicker/res/values-iw/strings.xml
index 387b140..238370c9 100644
--- a/packages/SoundPicker/res/values-iw/strings.xml
+++ b/packages/SoundPicker/res/values-iw/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"לא ניתן להוסיף רינגטון מותאם אישית"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"לא ניתן למחוק רינגטון מותאם אישית"</string>
     <string name="app_label" msgid="3091611356093417332">"צלילים"</string>
+    <string name="empty_list" msgid="2871978423955821191">"הרשימה ריקה"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"צליל"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"רטט"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-ja/strings.xml b/packages/SoundPicker/res/values-ja/strings.xml
index 7c2aec6..408e870 100644
--- a/packages/SoundPicker/res/values-ja/strings.xml
+++ b/packages/SoundPicker/res/values-ja/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"カスタム着信音を追加できません"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"カスタム着信音を削除できません"</string>
     <string name="app_label" msgid="3091611356093417332">"サウンド"</string>
+    <string name="empty_list" msgid="2871978423955821191">"このリストは空です"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"音"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"バイブレーション"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-ka/strings.xml b/packages/SoundPicker/res/values-ka/strings.xml
index 1cfe240..83dfc3c 100644
--- a/packages/SoundPicker/res/values-ka/strings.xml
+++ b/packages/SoundPicker/res/values-ka/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"მორგებული ზარის დამატება შეუძლებელია"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"მორგებული ზარის წაშლა შეუძლებელია"</string>
     <string name="app_label" msgid="3091611356093417332">"ხმები"</string>
+    <string name="empty_list" msgid="2871978423955821191">"სია ცარიელია"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"ხმა"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"ვიბრაცია"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-kk/strings.xml b/packages/SoundPicker/res/values-kk/strings.xml
index 8c4c169..1815a95 100644
--- a/packages/SoundPicker/res/values-kk/strings.xml
+++ b/packages/SoundPicker/res/values-kk/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Арнаулы рингтонды енгізу мүмкін емес"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Арнаулы рингтонды жою мүмкін емес"</string>
     <string name="app_label" msgid="3091611356093417332">"Дыбыстар"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Тізім бос."</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Дыбыс"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Діріл"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-km/strings.xml b/packages/SoundPicker/res/values-km/strings.xml
index a334429..6ae048f 100644
--- a/packages/SoundPicker/res/values-km/strings.xml
+++ b/packages/SoundPicker/res/values-km/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"មិន​អាច​បន្ថែម​សំឡេង​រោទ៍​ផ្ទាល់ខ្លួន​បាន"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"មិន​អាច​លុប​សំឡេង​រោទ៍​ផ្ទាល់ខ្លួន​បាន​ទេ"</string>
     <string name="app_label" msgid="3091611356093417332">"សំឡេង"</string>
+    <string name="empty_list" msgid="2871978423955821191">"បញ្ជីគឺទទេ"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"សំឡេង"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"ការញ័រ"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-kn/strings.xml b/packages/SoundPicker/res/values-kn/strings.xml
index e6a05c2..c528866 100644
--- a/packages/SoundPicker/res/values-kn/strings.xml
+++ b/packages/SoundPicker/res/values-kn/strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="ringtone_default" msgid="798836092118824500">"ಡಿಫಾಲ್ಟ್ ರಿಂಗ್‌ಟೋನ್"</string>
-    <string name="notification_sound_default" msgid="8133121186242636840">"ಡೀಫಾಲ್ಟ್ ಅಧಿಸೂಚನೆ ಧ್ವನಿ"</string>
+    <string name="notification_sound_default" msgid="8133121186242636840">"ಡೀಫಾಲ್ಟ್ ನೋಟಿಫಿಕೇಶನ್‌ ಧ್ವನಿ"</string>
     <string name="alarm_sound_default" msgid="4787646764557462649">"ಡೀಫಾಲ್ಟ್ ಅಲಾರಾಂ ಧ್ವನಿ"</string>
     <string name="add_ringtone_text" msgid="6642389991738337529">"ರಿಂಗ್‌ಟೋನ್ ಸೇರಿಸಿ"</string>
     <string name="add_alarm_text" msgid="3545497316166999225">"ಅಲಾರಾಂ ಸೇರಿಸಿ"</string>
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"ಕಸ್ಟಮ್ ರಿಂಗ್‌ಟೋನ್ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"ಕಸ್ಟಮ್ ರಿಂಗ್‌ಟೋನ್ ಅಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
     <string name="app_label" msgid="3091611356093417332">"ಧ್ವನಿಗಳು"</string>
+    <string name="empty_list" msgid="2871978423955821191">"ಪಟ್ಟಿ ಖಾಲಿಯಾಗಿದೆ"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"ಧ್ವನಿ"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"ವೈಬ್ರೇಷನ್"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-ko/strings.xml b/packages/SoundPicker/res/values-ko/strings.xml
index 70554d6..bcab6b2 100644
--- a/packages/SoundPicker/res/values-ko/strings.xml
+++ b/packages/SoundPicker/res/values-ko/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"맞춤 벨소리를 추가할 수 없습니다."</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"맞춤 벨소리를 삭제할 수 없습니다."</string>
     <string name="app_label" msgid="3091611356093417332">"소리"</string>
+    <string name="empty_list" msgid="2871978423955821191">"목록이 비어 있음"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"소리"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"진동"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-ky/strings.xml b/packages/SoundPicker/res/values-ky/strings.xml
index 3c95228..babd8c0 100644
--- a/packages/SoundPicker/res/values-ky/strings.xml
+++ b/packages/SoundPicker/res/values-ky/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Жеке рингтон кошулбай жатат"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Жеке рингтон жок кылынбай жатат"</string>
     <string name="app_label" msgid="3091611356093417332">"Үндөр"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Тизме бош"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Үн"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Дирилдөө"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-lo/strings.xml b/packages/SoundPicker/res/values-lo/strings.xml
index 8bcae0d..5e496e8 100644
--- a/packages/SoundPicker/res/values-lo/strings.xml
+++ b/packages/SoundPicker/res/values-lo/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Unable to add custom ringtone"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Unable to delete custom ringtone"</string>
     <string name="app_label" msgid="3091611356093417332">"ສຽງ"</string>
+    <string name="empty_list" msgid="2871978423955821191">"ລາຍຊື່ຫວ່າງເປົ່າ"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"ສຽງ"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"ການສັ່ນເຕືອນ"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-lt/strings.xml b/packages/SoundPicker/res/values-lt/strings.xml
index c7ea369..c68cc3b 100644
--- a/packages/SoundPicker/res/values-lt/strings.xml
+++ b/packages/SoundPicker/res/values-lt/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nepavyksta pridėti tinkinto skambėjimo tono"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nepavyksta ištrinti tinkinto skambėjimo tono"</string>
     <string name="app_label" msgid="3091611356093417332">"Garsai"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Sąrašas yra tuščias"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Garsas"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibravimas"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-lv/strings.xml b/packages/SoundPicker/res/values-lv/strings.xml
index 2a26289..fab7f8c 100644
--- a/packages/SoundPicker/res/values-lv/strings.xml
+++ b/packages/SoundPicker/res/values-lv/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nevar pievienot pielāgotu zvana signālu"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nevar izdzēst pielāgotu zvana signālu"</string>
     <string name="app_label" msgid="3091611356093417332">"Skaņas"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Saraksts ir tukšs"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Skaņa"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibrācija"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-mk/strings.xml b/packages/SoundPicker/res/values-mk/strings.xml
index 545d5ed..4f2322a 100644
--- a/packages/SoundPicker/res/values-mk/strings.xml
+++ b/packages/SoundPicker/res/values-mk/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Не може да се додаде приспособена мелодија"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Не може да се избрише приспособена мелодија"</string>
     <string name="app_label" msgid="3091611356093417332">"Звуци"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Списокот е празен"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Звук"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Вибрации"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-ml/strings.xml b/packages/SoundPicker/res/values-ml/strings.xml
index 21da8e8..16cf725 100644
--- a/packages/SoundPicker/res/values-ml/strings.xml
+++ b/packages/SoundPicker/res/values-ml/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"ഇഷ്ടാനുസൃത റിംഗ്‌ടോൺ ചേർക്കാനാവില്ല"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"ഇഷ്ടാനുസൃത റിംഗ്‌ടോൺ ഇല്ലാതാക്കാനാവില്ല"</string>
     <string name="app_label" msgid="3091611356093417332">"ശബ്‌ദങ്ങൾ"</string>
+    <string name="empty_list" msgid="2871978423955821191">"ലിസ്‌റ്റിൽ ഒന്നുമില്ല"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"ശബ്‌ദം"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"വൈബ്രേഷൻ"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-mn/strings.xml b/packages/SoundPicker/res/values-mn/strings.xml
index 15f7d12..6215a41 100644
--- a/packages/SoundPicker/res/values-mn/strings.xml
+++ b/packages/SoundPicker/res/values-mn/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Захиалгат хонхны ая нэмэх боломжгүй"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Захиалгат хонхны ая устгах боломжгүй"</string>
     <string name="app_label" msgid="3091611356093417332">"Дуу чимээ"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Жагсаалт хоосон байна"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Дуу"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Чичиргээ"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-mr/strings.xml b/packages/SoundPicker/res/values-mr/strings.xml
index 3ddb991..fe2fe12 100644
--- a/packages/SoundPicker/res/values-mr/strings.xml
+++ b/packages/SoundPicker/res/values-mr/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"कस्टम रिंगटोन जोडण्यात अक्षम"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"कस्टम रिंगटोन हटविण्यात अक्षम"</string>
     <string name="app_label" msgid="3091611356093417332">"आवाज"</string>
+    <string name="empty_list" msgid="2871978423955821191">"ही सूची रिकामी आहे"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"आवाज"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"व्हायब्रेशन"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-ms/strings.xml b/packages/SoundPicker/res/values-ms/strings.xml
index 9d87d72..5788f18 100644
--- a/packages/SoundPicker/res/values-ms/strings.xml
+++ b/packages/SoundPicker/res/values-ms/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Tidak dapat menambah nada dering tersuai"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Tidak dapat memadamkan nada dering tersuai"</string>
     <string name="app_label" msgid="3091611356093417332">"Bunyi"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Senarai ini kosong"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Bunyi"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Getaran"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-my/strings.xml b/packages/SoundPicker/res/values-my/strings.xml
index 62163e9..0a1a4cf 100644
--- a/packages/SoundPicker/res/values-my/strings.xml
+++ b/packages/SoundPicker/res/values-my/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"စိတ်ကြိုက်ဖုန်းမြည်သံကို ထည့်သွင်း၍မရပါ"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"စိတ်ကြိုက်ဖုန်းမြည်သံကို ဖျက်၍မရပါ"</string>
     <string name="app_label" msgid="3091611356093417332">"အသံများ"</string>
+    <string name="empty_list" msgid="2871978423955821191">"ဤစာရင်းတွင် မည်သည့်အရာမျှမရှိပါ"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"အသံ"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"တုန်ခါမှု"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-nb/strings.xml b/packages/SoundPicker/res/values-nb/strings.xml
index e4e259a..c315801 100644
--- a/packages/SoundPicker/res/values-nb/strings.xml
+++ b/packages/SoundPicker/res/values-nb/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Kan ikke legge til egendefinert ringelyd"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Kan ikke slette egendefinert ringelyd"</string>
     <string name="app_label" msgid="3091611356093417332">"Lyder"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Listen er tom"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Lyd"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibrering"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-ne/strings.xml b/packages/SoundPicker/res/values-ne/strings.xml
index 0a2bceb..b95b70c 100644
--- a/packages/SoundPicker/res/values-ne/strings.xml
+++ b/packages/SoundPicker/res/values-ne/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"आफू अनुकूल रिङटोन थप्न सकिएन"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"आफू अनुकूल रिङटोनलाई मेट्न सकिएन"</string>
     <string name="app_label" msgid="3091611356093417332">"ध्वनिहरू"</string>
+    <string name="empty_list" msgid="2871978423955821191">"यो सूची खाली छ"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"ध्वनि"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"भाइब्रेसन"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-nl/strings.xml b/packages/SoundPicker/res/values-nl/strings.xml
index 5b6fb70..192431b 100644
--- a/packages/SoundPicker/res/values-nl/strings.xml
+++ b/packages/SoundPicker/res/values-nl/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Toevoegen van aangepaste ringtone is mislukt"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Verwijderen van aangepaste ringtone is mislukt"</string>
     <string name="app_label" msgid="3091611356093417332">"Geluiden"</string>
+    <string name="empty_list" msgid="2871978423955821191">"De lijst is leeg"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Geluid"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Trillen"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-or/strings.xml b/packages/SoundPicker/res/values-or/strings.xml
index f4bf3cd..5d82039 100644
--- a/packages/SoundPicker/res/values-or/strings.xml
+++ b/packages/SoundPicker/res/values-or/strings.xml
@@ -22,8 +22,11 @@
     <string name="add_ringtone_text" msgid="6642389991738337529">"ରିଙ୍ଗଟୋନ୍‍ ଯୋଡ଼ନ୍ତୁ"</string>
     <string name="add_alarm_text" msgid="3545497316166999225">"ଆଲାର୍ମ ଯୋଗ କରନ୍ତୁ"</string>
     <string name="add_notification_text" msgid="4431129543300614788">"ବିଜ୍ଞପ୍ତି ଯୋଗ କରନ୍ତୁ"</string>
-    <string name="delete_ringtone_text" msgid="201443984070732499">"ଡିଲିଟ୍‌ କରନ୍ତୁ"</string>
+    <string name="delete_ringtone_text" msgid="201443984070732499">"ଡିଲିଟ କରନ୍ତୁ"</string>
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"କଷ୍ଟମ୍‍ ରିଙ୍ଗଟୋନ୍‍ ଯୋଡ଼ିପାରିବ ନାହିଁ"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"କଷ୍ଟମ୍‍ ରିଙ୍ଗଟୋନ୍‍ ଡିଲିଟ୍‍ କରିପାରିବ ନାହିଁ"</string>
     <string name="app_label" msgid="3091611356093417332">"ସାଉଣ୍ଡ"</string>
+    <string name="empty_list" msgid="2871978423955821191">"ତାଲିକା ଖାଲି ଅଛି"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"ସାଉଣ୍ଡ"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"ଭାଇବ୍ରେସନ"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-pa/strings.xml b/packages/SoundPicker/res/values-pa/strings.xml
index 1e62f64..63ecb9d 100644
--- a/packages/SoundPicker/res/values-pa/strings.xml
+++ b/packages/SoundPicker/res/values-pa/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"ਵਿਉਂਤੀ ਰਿੰਗਟੋਨ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਦੇ ਅਯੋਗ"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"ਵਿਉਂਤੀ ਰਿੰਗਟੋਨ ਨੂੰ ਮਿਟਾਉਣ ਦੇ ਅਯੋਗ"</string>
     <string name="app_label" msgid="3091611356093417332">"Sounds"</string>
+    <string name="empty_list" msgid="2871978423955821191">"ਇਹ ਸੂਚੀ ਖਾਲੀ ਹੈ"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"ਅਵਾਜ਼"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"ਥਰਥਰਾਹਟ"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-pl/strings.xml b/packages/SoundPicker/res/values-pl/strings.xml
index 1b3b5c4..310f40f 100644
--- a/packages/SoundPicker/res/values-pl/strings.xml
+++ b/packages/SoundPicker/res/values-pl/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nie można dodać dzwonka niestandardowego"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nie można usunąć dzwonka niestandardowego"</string>
     <string name="app_label" msgid="3091611356093417332">"Dźwięki"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Lista jest pusta"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Dźwięk"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Wibracje"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-pt-rBR/strings.xml b/packages/SoundPicker/res/values-pt-rBR/strings.xml
index 7b545e1..9f58ca0 100644
--- a/packages/SoundPicker/res/values-pt-rBR/strings.xml
+++ b/packages/SoundPicker/res/values-pt-rBR/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Não foi possível adicionar o toque personalizado"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Não foi possível excluir o toque personalizado"</string>
     <string name="app_label" msgid="3091611356093417332">"Sons"</string>
+    <string name="empty_list" msgid="2871978423955821191">"A lista está vazia"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Som"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibração"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-pt-rPT/strings.xml b/packages/SoundPicker/res/values-pt-rPT/strings.xml
index 5d742f1..fd4e69f 100644
--- a/packages/SoundPicker/res/values-pt-rPT/strings.xml
+++ b/packages/SoundPicker/res/values-pt-rPT/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Não foi possível adicionar o toque personalizado"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Não foi possível eliminar o toque personalizado"</string>
     <string name="app_label" msgid="3091611356093417332">"Sons"</string>
+    <string name="empty_list" msgid="2871978423955821191">"A lista está vazia"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Som"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibração"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-pt/strings.xml b/packages/SoundPicker/res/values-pt/strings.xml
index 7b545e1..9f58ca0 100644
--- a/packages/SoundPicker/res/values-pt/strings.xml
+++ b/packages/SoundPicker/res/values-pt/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Não foi possível adicionar o toque personalizado"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Não foi possível excluir o toque personalizado"</string>
     <string name="app_label" msgid="3091611356093417332">"Sons"</string>
+    <string name="empty_list" msgid="2871978423955821191">"A lista está vazia"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Som"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibração"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-ro/strings.xml b/packages/SoundPicker/res/values-ro/strings.xml
index 58b5aeb..08d937c 100644
--- a/packages/SoundPicker/res/values-ro/strings.xml
+++ b/packages/SoundPicker/res/values-ro/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nu se poate adăuga tonul de sonerie personalizat"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nu se poate șterge tonul de sonerie personalizat"</string>
     <string name="app_label" msgid="3091611356093417332">"Sunete"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Lista este goală"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Sunet"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibrație"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-ru/strings.xml b/packages/SoundPicker/res/values-ru/strings.xml
index 0d48ac1..be5495a 100644
--- a/packages/SoundPicker/res/values-ru/strings.xml
+++ b/packages/SoundPicker/res/values-ru/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Не удалось добавить рингтон"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Не удалось удалить рингтон"</string>
     <string name="app_label" msgid="3091611356093417332">"Звуки"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Список пуст"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Звук"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Вибрация"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-si/strings.xml b/packages/SoundPicker/res/values-si/strings.xml
index 1872b6b..6ba86cb 100644
--- a/packages/SoundPicker/res/values-si/strings.xml
+++ b/packages/SoundPicker/res/values-si/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"අභිරුචි නාද රිද්මය එක් කළ නොහැකිය"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"අභිරුචි නාද රිද්මය මැකිය නොහැකිය"</string>
     <string name="app_label" msgid="3091611356093417332">"ශබ්ද"</string>
+    <string name="empty_list" msgid="2871978423955821191">"ලැයිස්තුව හිස් ය"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"ශබ්දය"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"කම්පනය"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-sk/strings.xml b/packages/SoundPicker/res/values-sk/strings.xml
index 8ff6d12..8f54350 100644
--- a/packages/SoundPicker/res/values-sk/strings.xml
+++ b/packages/SoundPicker/res/values-sk/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nepodarilo sa pridať vlastný tón zvonenia"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nepodarilo sa odstrániť vlastný tón zvonenia"</string>
     <string name="app_label" msgid="3091611356093417332">"Zvuky"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Zoznam je prázdny"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Zvuk"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibrácie"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-sl/strings.xml b/packages/SoundPicker/res/values-sl/strings.xml
index 77a2a2c..1a818b2 100644
--- a/packages/SoundPicker/res/values-sl/strings.xml
+++ b/packages/SoundPicker/res/values-sl/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Tona zvonjenja po meri ni mogoče dodati"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Tona zvonjenja po meri ni mogoče izbrisati"</string>
     <string name="app_label" msgid="3091611356093417332">"Zvoki"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Seznam je prazen"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Zvok"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibriranje"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-sq/strings.xml b/packages/SoundPicker/res/values-sq/strings.xml
index e35dd71..4c497bb 100644
--- a/packages/SoundPicker/res/values-sq/strings.xml
+++ b/packages/SoundPicker/res/values-sq/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Nuk mund të shtojë ton zileje të personalizuar"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Nuk mund të fshijë ton zileje të personalizuar"</string>
     <string name="app_label" msgid="3091611356093417332">"Tingujt"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Lista është bosh"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Me tingull"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Me dridhje"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-sr/strings.xml b/packages/SoundPicker/res/values-sr/strings.xml
index bc573f5..2ec1f17 100644
--- a/packages/SoundPicker/res/values-sr/strings.xml
+++ b/packages/SoundPicker/res/values-sr/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Додавање прилагођене мелодије звона није успело"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Брисање прилагођене мелодије звона није успело"</string>
     <string name="app_label" msgid="3091611356093417332">"Звукови"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Листа је празна"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Звук"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Вибрирање"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-sv/strings.xml b/packages/SoundPicker/res/values-sv/strings.xml
index c1dd1c2..cb1cd3a 100644
--- a/packages/SoundPicker/res/values-sv/strings.xml
+++ b/packages/SoundPicker/res/values-sv/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Det gick inte att lägga till en egen ringsignal"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Det gick inte att radera den egna ringsignalen"</string>
     <string name="app_label" msgid="3091611356093417332">"Ljud"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Listan är tom"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Ljud"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Vibration"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-sw/strings.xml b/packages/SoundPicker/res/values-sw/strings.xml
index b023450..8fd6d58 100644
--- a/packages/SoundPicker/res/values-sw/strings.xml
+++ b/packages/SoundPicker/res/values-sw/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Imeshindwa kuongeza mlio maalum wa simu"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Imeshindwa kufuta mlio maalum wa simu"</string>
     <string name="app_label" msgid="3091611356093417332">"Sauti"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Orodha hii haina chochote"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Sauti"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Mtetemo"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-ta/strings.xml b/packages/SoundPicker/res/values-ta/strings.xml
index 38e45b7..692e58a 100644
--- a/packages/SoundPicker/res/values-ta/strings.xml
+++ b/packages/SoundPicker/res/values-ta/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"பிரத்தியேக ரிங்டோனைச் சேர்க்க முடியவில்லை"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"பிரத்தியேக ரிங்டோனை நீக்க முடியவில்லை"</string>
     <string name="app_label" msgid="3091611356093417332">"ஒலிகள்"</string>
+    <string name="empty_list" msgid="2871978423955821191">"பட்டியல் காலியாக உள்ளது"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"ஒலி"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"அதிர்வு"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-te/strings.xml b/packages/SoundPicker/res/values-te/strings.xml
index 2d03ac0..ce13e53 100644
--- a/packages/SoundPicker/res/values-te/strings.xml
+++ b/packages/SoundPicker/res/values-te/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"అనుకూల రింగ్‌టోన్‌ను జోడించలేకపోయింది"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"అనుకూల రింగ్‌టోన్‌ను తొలగించలేకపోయింది"</string>
     <string name="app_label" msgid="3091611356093417332">"ధ్వనులు"</string>
+    <string name="empty_list" msgid="2871978423955821191">"మీ లిస్ట్ ఖాళీగా ఉంది"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"సౌండ్"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"వైబ్రేషన్"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-th/strings.xml b/packages/SoundPicker/res/values-th/strings.xml
index cc2e43f..d5dc9b7 100644
--- a/packages/SoundPicker/res/values-th/strings.xml
+++ b/packages/SoundPicker/res/values-th/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"ไม่สามารถเพิ่มเสียงเรียกเข้าที่กำหนดเอง"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"ไม่สามารถลบเสียงเรียกเข้าที่กำหนดเอง"</string>
     <string name="app_label" msgid="3091611356093417332">"เสียง"</string>
+    <string name="empty_list" msgid="2871978423955821191">"รายการว่างเปล่า"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"เสียง"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"การสั่น"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-tl/strings.xml b/packages/SoundPicker/res/values-tl/strings.xml
index c0c1712..4e3bf7e 100644
--- a/packages/SoundPicker/res/values-tl/strings.xml
+++ b/packages/SoundPicker/res/values-tl/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Hindi maidagdag ang custom na ringtone"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Hindi ma-delete ang custom na ringtone"</string>
     <string name="app_label" msgid="3091611356093417332">"Mga Tunog"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Walang laman ang listahan"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Tunog"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Pag-vibrate"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-tr/strings.xml b/packages/SoundPicker/res/values-tr/strings.xml
index 955c23f..51ac541 100644
--- a/packages/SoundPicker/res/values-tr/strings.xml
+++ b/packages/SoundPicker/res/values-tr/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Özel zil sesi eklenemiyor"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Özel zil sesi silinemiyor"</string>
     <string name="app_label" msgid="3091611356093417332">"Sesler"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Liste boş"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Ses"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Titreşim"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-uk/strings.xml b/packages/SoundPicker/res/values-uk/strings.xml
index 42dbfb0..a905b95 100644
--- a/packages/SoundPicker/res/values-uk/strings.xml
+++ b/packages/SoundPicker/res/values-uk/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Не вдалося додати користувацький сигнал дзвінка"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Не вдалося видалити користувацький сигнал дзвінка"</string>
     <string name="app_label" msgid="3091611356093417332">"Звуки"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Список пустий"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Звук"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Вібрація"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-ur/strings.xml b/packages/SoundPicker/res/values-ur/strings.xml
index 58141d6..9cae118 100644
--- a/packages/SoundPicker/res/values-ur/strings.xml
+++ b/packages/SoundPicker/res/values-ur/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"حسب ضرورت رنگ ٹون شامل کرنے سے قاصر ہے"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"حسب ضرورت رنگ ٹون حذف کرنے سے قاصر ہے"</string>
     <string name="app_label" msgid="3091611356093417332">"آوازیں"</string>
+    <string name="empty_list" msgid="2871978423955821191">"فہرست خالی ہے"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"آواز"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"وائبریشن"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-uz/strings.xml b/packages/SoundPicker/res/values-uz/strings.xml
index c39db5f..e6231f2 100644
--- a/packages/SoundPicker/res/values-uz/strings.xml
+++ b/packages/SoundPicker/res/values-uz/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Maxsus rington qo‘shib bo‘lmadi"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Maxsus ringtonni o‘chirib bo‘lmadi"</string>
     <string name="app_label" msgid="3091611356093417332">"Tovushlar"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Roʻyxat boʻsh"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Tovush"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Tebranish"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-vi/strings.xml b/packages/SoundPicker/res/values-vi/strings.xml
index bed0e96..070ac16 100644
--- a/packages/SoundPicker/res/values-vi/strings.xml
+++ b/packages/SoundPicker/res/values-vi/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Không thể thêm nhạc chuông tùy chỉnh"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Không thể xóa nhạc chuông tùy chỉnh"</string>
     <string name="app_label" msgid="3091611356093417332">"Âm thanh"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Danh sách này đang trống"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Âm thanh"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Rung"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-zh-rCN/strings.xml b/packages/SoundPicker/res/values-zh-rCN/strings.xml
index 864aaae..0420fc9 100644
--- a/packages/SoundPicker/res/values-zh-rCN/strings.xml
+++ b/packages/SoundPicker/res/values-zh-rCN/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"无法添加自定义铃声"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"无法删除自定义铃声"</string>
     <string name="app_label" msgid="3091611356093417332">"声音"</string>
+    <string name="empty_list" msgid="2871978423955821191">"列表为空"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"声音"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"振动"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-zh-rHK/strings.xml b/packages/SoundPicker/res/values-zh-rHK/strings.xml
index 4cde32d..60d9a52 100644
--- a/packages/SoundPicker/res/values-zh-rHK/strings.xml
+++ b/packages/SoundPicker/res/values-zh-rHK/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"無法加入自訂鈴聲"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"無法刪除自訂鈴聲"</string>
     <string name="app_label" msgid="3091611356093417332">"音效"</string>
+    <string name="empty_list" msgid="2871978423955821191">"清單中沒有內容"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"音效"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"震動"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-zh-rTW/strings.xml b/packages/SoundPicker/res/values-zh-rTW/strings.xml
index df8a66a..c173c0a 100644
--- a/packages/SoundPicker/res/values-zh-rTW/strings.xml
+++ b/packages/SoundPicker/res/values-zh-rTW/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"無法新增自訂鈴聲"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"無法刪除自訂鈴聲"</string>
     <string name="app_label" msgid="3091611356093417332">"音效"</string>
+    <string name="empty_list" msgid="2871978423955821191">"清單中沒有任何項目"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"音效"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"震動"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values-zu/strings.xml b/packages/SoundPicker/res/values-zu/strings.xml
index 29a8ffe..978e925 100644
--- a/packages/SoundPicker/res/values-zu/strings.xml
+++ b/packages/SoundPicker/res/values-zu/strings.xml
@@ -26,4 +26,7 @@
     <string name="unable_to_add_ringtone" msgid="4583511263449467326">"Ayikwazi ukwengeza ithoni yokukhala yangokwezifiso"</string>
     <string name="unable_to_delete_ringtone" msgid="6792301380142859496">"Ayikwazi ukususa ithoni yokukhala yangokwezifiso"</string>
     <string name="app_label" msgid="3091611356093417332">"Imisindo"</string>
+    <string name="empty_list" msgid="2871978423955821191">"Uhlu alunalutho"</string>
+    <string name="sound_page_title" msgid="2143312098775103522">"Umsindo"</string>
+    <string name="vibration_page_title" msgid="6519501440349124677">"Ukudlidliza"</string>
 </resources>
diff --git a/packages/SoundPicker/res/values/strings.xml b/packages/SoundPicker/res/values/strings.xml
index 04a2c2b..ab7b95a 100644
--- a/packages/SoundPicker/res/values/strings.xml
+++ b/packages/SoundPicker/res/values/strings.xml
@@ -40,4 +40,8 @@
 
     <!-- Text for the name of the app. [CHAR LIMIT=12] -->
     <string name="app_label">Sounds</string>
+
+    <string name="empty_list">The list is empty</string>
+    <string name="sound_page_title">Sound</string>
+    <string name="vibration_page_title">Vibration</string>
 </resources>
diff --git a/packages/SoundPicker/src/com/android/soundpicker/BasePickerFragment.java b/packages/SoundPicker/src/com/android/soundpicker/BasePickerFragment.java
new file mode 100644
index 0000000..4fc2a86
--- /dev/null
+++ b/packages/SoundPicker/src/com/android/soundpicker/BasePickerFragment.java
@@ -0,0 +1,312 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import android.app.Activity;
+import android.content.ContentProvider;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.provider.MediaStore;
+import android.util.Log;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import dagger.hilt.android.AndroidEntryPoint;
+
+import java.util.Objects;
+
+/**
+ * Base class for generic picker fragments.
+ *
+ * <p>This fragment displays a recycler view that is populated by a {@link RingtoneListViewAdapter}
+ * with data provided by a {@link RingtoneListHandler}. Each item can be selected on click,
+ * which also triggers a ringtone preview performed by the shared {@link RingtonePickerViewModel}.
+ * The ringtone preview uses the selection state of all picker fragments (e.g. sound selected by
+ * one fragment and vibration selected by another).
+ */
+@AndroidEntryPoint(Fragment.class)
+public abstract class BasePickerFragment extends Hilt_BasePickerFragment implements
+        RingtoneListViewAdapter.Callbacks {
+
+    private static final String TAG = "BasePickerFragment";
+    private static final String COLUMN_LABEL = MediaStore.Audio.Media.TITLE;
+    private boolean mIsManagedProfile;
+    private Drawable mWorkIconDrawable;
+
+    protected RingtoneListViewAdapter mRingtoneListViewAdapter;
+    protected RecyclerView mRecyclerView;
+    protected RingtonePickerViewModel.Config mPickerConfig;
+    protected RingtonePickerViewModel mRingtonePickerViewModel;
+    protected RingtoneListHandler.Config mRingtoneListConfig;
+    protected RingtoneListHandler mRingtoneListHandler;
+
+    public BasePickerFragment() {
+        super(R.layout.fragment_ringtone_picker);
+    }
+
+    @Override
+    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        mRingtonePickerViewModel = new ViewModelProvider(requireActivity()).get(
+                RingtonePickerViewModel.class);
+        mRingtoneListHandler = getRingtoneListHandler();
+        mRecyclerView = view.requireViewById(R.id.recycler_view);
+
+        mPickerConfig = mRingtonePickerViewModel.getPickerConfig();
+        mRingtoneListConfig = mRingtoneListHandler.getRingtoneListConfig();
+
+        mIsManagedProfile = UserManager.get(requireActivity()).isManagedProfile(
+                mPickerConfig.userId);
+
+        mRingtoneListViewAdapter = createRingtoneListViewAdapter();
+        mRecyclerView.setHasFixedSize(true);
+        mRecyclerView.setAdapter(mRingtoneListViewAdapter);
+        mRecyclerView.setLayoutManager(new LinearLayoutManager(requireActivity()));
+        setSelectedItem(mRingtoneListHandler.getSelectedItemPosition());
+        prepareRecyclerView(mRecyclerView);
+    }
+
+    @Override
+    public boolean isWorkRingtone(int position) {
+        if (!mIsManagedProfile) {
+            return false;
+        }
+
+        /*
+         * Display the work icon if the ringtone belongs to a work profile. We
+         * can tell that a ringtone belongs to a work profile if the picker user
+         * is a managed profile, the ringtone Uri is in external storage, and
+         * either the uri has no user id or has the id of the picker user
+         */
+        Uri currentUri = mRingtoneListHandler.getRingtoneUri(position);
+        int uriUserId = ContentProvider.getUserIdFromUri(currentUri,
+                mPickerConfig.userId);
+        Uri uriWithoutUserId = ContentProvider.getUriWithoutUserId(currentUri);
+
+        return uriUserId == mPickerConfig.userId
+                && uriWithoutUserId.toString().startsWith(
+                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI.toString());
+    }
+
+    @Override
+    public Drawable getWorkIconDrawable() {
+        if (mWorkIconDrawable == null) {
+            mWorkIconDrawable = requireActivity().getPackageManager()
+                    .getUserBadgeForDensityNoBackground(
+                            UserHandle.of(mPickerConfig.userId), /* density= */ -1);
+        }
+
+        return mWorkIconDrawable;
+    }
+
+    @Override
+    public void onRingtoneSelected(int position) {
+        setSelectedItem(position);
+
+        // In the buttonless (watch-only) version, preemptively set our result since
+        // we won't have another chance to do so before the activity closes.
+        if (!mPickerConfig.showOkCancelButtons) {
+            setSuccessResultWithSelectedRingtone();
+        }
+
+        // Play clip
+        mRingtonePickerViewModel.playRingtone();
+    }
+
+    @Override
+    public void onAddRingtoneSelected() {
+        addRingtoneAsync();
+    }
+
+    /**
+     * Sets up the list by adding fixed items to the top and bottom, if required. And sets the
+     * selected item in the list.
+     * @param recyclerView The recyclerview that contains the list of displayed items.
+     */
+    protected void prepareRecyclerView(@NonNull RecyclerView recyclerView) {
+        // Reset the static item count, as this method can be called multiple times
+        mRingtoneListHandler.resetFixedItems();
+
+        if (mRingtoneListConfig.hasDefaultItem) {
+            int defaultItemPos = addDefaultRingtoneItem();
+
+            if (getSelectedItem() < 0
+                    && RingtoneManager.isDefault(mRingtoneListConfig.initialSelectedUri)) {
+                setSelectedItem(defaultItemPos);
+            }
+        }
+
+        if (mRingtoneListConfig.hasSilentItem) {
+            int silentItemPos = addSilentItem();
+
+            // The 'Silent' item should use a null Uri
+            if (getSelectedItem() < 0
+                    && mRingtoneListConfig.initialSelectedUri == null) {
+                setSelectedItem(silentItemPos);
+            }
+        }
+
+        if (getSelectedItem() < 0) {
+            setSelectedItem(mRingtoneListHandler.getRingtonePosition(
+                    mRingtoneListConfig.initialSelectedUri));
+        }
+
+        // In the buttonless (watch-only) version, preemptively set our result since we won't
+        // have another chance to do so before the activity closes.
+        if (!mPickerConfig.showOkCancelButtons) {
+            setSuccessResultWithSelectedRingtone();
+        }
+
+        addNewRingtoneItem();
+
+        // Enable context menu in ringtone items
+        registerForContextMenu(recyclerView);
+    }
+
+    /**
+     * Returns the fragment's sound/vibration list handler.
+     * @return The ringtone list handler.
+     */
+    protected abstract RingtoneListHandler getRingtoneListHandler();
+
+    /**
+     * Starts the process to add a new ringtone to the list of ringtones asynchronously.
+     * Currently, only works for adding sound files.
+     */
+    protected abstract void addRingtoneAsync();
+
+    /**
+     * Adds an item to the end of the list that can be used to add new ringtones to the list.
+     * Currently, only works for adding sound files.
+     */
+    protected abstract void addNewRingtoneItem();
+
+    protected int getSelectedItem() {
+        return mRingtoneListHandler.getSelectedItemPosition();
+    }
+
+    /**
+     * Returns the selected URI to the caller activity.
+     */
+    protected void setSuccessResultWithSelectedRingtone() {
+        requireActivity().setResult(Activity.RESULT_OK,
+                new Intent().putExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI,
+                        mRingtonePickerViewModel.getSelectedRingtoneUri()));
+    }
+
+    /**
+     * Creates a ringtone recyclerview adapter using the ringtone manager cursor.
+     * @return The created RingtoneListViewAdapter.
+     */
+    protected RingtoneListViewAdapter createRingtoneListViewAdapter() {
+        LocalizedCursor cursor = new LocalizedCursor(
+                mRingtoneListHandler.getRingtoneCursor(), getResources(), COLUMN_LABEL);
+        return new RingtoneListViewAdapter(cursor, /* RingtoneListViewAdapterCallbacks= */ this);
+    }
+
+    /**
+     * Sets the selected item in the list and scroll to the position in the recyclerview.
+     * @param pos the position of the selected item in the list.
+     */
+    protected void setSelectedItem(int pos) {
+        Objects.requireNonNull(mRingtoneListViewAdapter);
+        mRingtoneListHandler.setSelectedItemPosition(pos);
+        mRingtoneListViewAdapter.setSelectedItem(pos);
+        mRingtoneListHandler.setSelectedItemId(mRingtoneListViewAdapter.getItemId(pos));
+        mRecyclerView.scrollToPosition(pos);
+    }
+
+    /**
+     * Adds a fixed item to the fixed items list . A fixed item is one that is not from
+     * the RingtoneManager.
+     *
+     * @param textResId The resource ID of the text for the item.
+     * @return The index of the inserted fixed item in the adapter.
+     */
+    protected int addFixedItem(int textResId) {
+        return mRingtoneListViewAdapter.addTitleForFixedItem(textResId);
+    }
+
+    /**
+     * Re-query RingtoneManager for the most recent set of installed ringtones. May move the
+     * selected item position to match the new position of the chosen ringtone.
+     * <p>
+     * This should only need to happen after adding or removing a ringtone.
+     */
+    protected void requeryForAdapter() {
+        mRingtonePickerViewModel.reinit();
+        // Refresh and set a new cursor, and closing the old one.
+        mRingtoneListViewAdapter = createRingtoneListViewAdapter();
+        mRecyclerView.setAdapter(mRingtoneListViewAdapter);
+        prepareRecyclerView(mRecyclerView);
+
+        // Update selected item location.
+        for (int i = 0; i < mRingtoneListViewAdapter.getItemCount(); i++) {
+            if (mRingtoneListViewAdapter.getItemId(i)
+                    == mRingtoneListHandler.getSelectedItemId()) {
+                setSelectedItem(i);
+                return;
+            }
+        }
+
+        // If selected item is still unknown, then set it to the default item, if available.
+        // If it's not available, then attempt to set it to the silent item in the list.
+        int selectedPosition = mRingtoneListHandler.getDefaultItemPosition();
+
+        if (selectedPosition < 0) {
+            selectedPosition = mRingtoneListHandler.getSilentItemPosition();
+        }
+
+        setSelectedItem(selectedPosition);
+    }
+
+    private int addDefaultRingtoneItem() {
+        int defaultItemPosInAdapter = addFixedItem(
+                RingtonePickerViewModel.getDefaultRingtoneItemTextByType(
+                        mPickerConfig.ringtoneType));
+        int defaultItemPosInListHandler = mRingtoneListHandler.addDefaultItem();
+
+        if (defaultItemPosInAdapter != defaultItemPosInListHandler) {
+            Log.wtf(TAG, "Default item position in adapter and list handler must match.");
+            return RingtoneListHandler.ITEM_POSITION_UNKNOWN;
+        }
+
+        return defaultItemPosInListHandler;
+    }
+
+    private int addSilentItem() {
+        int silentItemPosInAdapter = addFixedItem(com.android.internal.R.string.ringtone_silent);
+        int silentItemPosInListHandler = mRingtoneListHandler.addSilentItem();
+
+        if (silentItemPosInAdapter != silentItemPosInListHandler) {
+            Log.wtf(TAG, "Silent item position in adapter and list handler must match.");
+            return RingtoneListHandler.ITEM_POSITION_UNKNOWN;
+        }
+
+        return silentItemPosInListHandler;
+    }
+}
diff --git a/packages/SoundPicker/src/com/android/soundpicker/ListeningExecutorServiceFactory.java b/packages/SoundPicker/src/com/android/soundpicker/ListeningExecutorServiceFactory.java
new file mode 100644
index 0000000..afdbf05
--- /dev/null
+++ b/packages/SoundPicker/src/com/android/soundpicker/ListeningExecutorServiceFactory.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
+
+import java.util.concurrent.Executors;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+/**
+ * A factory class used to create {@link ListeningExecutorService}.
+ */
+@Singleton
+public class ListeningExecutorServiceFactory {
+
+    @Inject
+    ListeningExecutorServiceFactory() {
+    }
+
+    /**
+     * Returns a single thread {@link ListeningExecutorService}.
+     *
+     */
+    public ListeningExecutorService createSingleThreadExecutor() {
+        return MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
+    }
+}
diff --git a/packages/SoundPicker/src/com/android/soundpicker/LocalizedCursor.java b/packages/SoundPicker/src/com/android/soundpicker/LocalizedCursor.java
new file mode 100644
index 0000000..83d04a3
--- /dev/null
+++ b/packages/SoundPicker/src/com/android/soundpicker/LocalizedCursor.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.database.CursorWrapper;
+import android.util.Log;
+import android.util.TypedValue;
+
+import androidx.annotation.Nullable;
+
+import java.util.Locale;
+import java.util.regex.Pattern;
+
+/**
+ * A cursor wrapper class mainly used to guarantee getting a ringtone title
+ */
+final class LocalizedCursor extends CursorWrapper {
+
+    private static final String TAG = "LocalizedCursor";
+    private static final String SOUND_NAME_RES_PREFIX = "sound_name_";
+
+    private final int mTitleIndex;
+    private final Resources mResources;
+    private final Pattern mSanitizePattern;
+    private final String mNamePrefix;
+
+    LocalizedCursor(Cursor cursor, Resources resources, String columnLabel) {
+        super(cursor);
+        mTitleIndex = mCursor.getColumnIndex(columnLabel);
+        mResources = resources;
+        mSanitizePattern = Pattern.compile("[^a-zA-Z0-9]");
+        if (mTitleIndex == -1) {
+            Log.e(TAG, "No index for column " + columnLabel);
+            mNamePrefix = null;
+        } else {
+            mNamePrefix = buildNamePrefix(mResources);
+        }
+    }
+
+    /**
+     * Builds the prefix for the name of the resource to look up.
+     * The format is: "ResourcePackageName::ResourceTypeName/" (the type name is expected to be
+     * "string" but let's not hardcode it).
+     * Here we use an existing resource "notification_sound_default" which is always expected to be
+     * found.
+     *
+     * @param resources Application's resources
+     * @return the built name prefix, or null if failed to build.
+     */
+    @Nullable
+    private static String buildNamePrefix(Resources resources) {
+        try {
+            return String.format("%s:%s/%s",
+                    resources.getResourcePackageName(R.string.notification_sound_default),
+                    resources.getResourceTypeName(R.string.notification_sound_default),
+                    SOUND_NAME_RES_PREFIX);
+        } catch (Resources.NotFoundException e) {
+            Log.e(TAG, "Failed to build the prefix for the name of the resource.", e);
+        }
+
+        return null;
+    }
+
+    /**
+     * Process resource name to generate a valid resource name.
+     *
+     * @return a non-null String
+     */
+    private String sanitize(String input) {
+        if (input == null) {
+            return "";
+        }
+        return mSanitizePattern.matcher(input).replaceAll("_").toLowerCase(Locale.ROOT);
+    }
+
+    @Override
+    public String getString(int columnIndex) {
+        final String defaultName = mCursor.getString(columnIndex);
+        if ((columnIndex != mTitleIndex) || (mNamePrefix == null)) {
+            return defaultName;
+        }
+        TypedValue value = new TypedValue();
+        try {
+            // the name currently in the database is used to derive a name to match
+            // against resource names in this package
+            mResources.getValue(mNamePrefix + sanitize(defaultName), value,
+                    /* resolveRefs= */ false);
+        } catch (Resources.NotFoundException e) {
+            Log.d(TAG, "Failed to get localized string. Using default string instead.", e);
+            return defaultName;
+        }
+        if ((value != null) && (value.type == TypedValue.TYPE_STRING)) {
+            Log.d(TAG, String.format("Replacing name %s with %s",
+                    defaultName, value.string.toString()));
+            return value.string.toString();
+        } else {
+            Log.e(TAG, "Invalid value when looking up localized name, using " + defaultName);
+            return defaultName;
+        }
+    }
+}
diff --git a/packages/SoundPicker/src/com/android/soundpicker/RingtoneFactory.java b/packages/SoundPicker/src/com/android/soundpicker/RingtoneFactory.java
new file mode 100644
index 0000000..6817f53
--- /dev/null
+++ b/packages/SoundPicker/src/com/android/soundpicker/RingtoneFactory.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import android.content.Context;
+import android.media.AudioAttributes;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
+import android.net.Uri;
+
+import dagger.hilt.android.qualifiers.ApplicationContext;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+/**
+ * A factory class used to create {@link Ringtone}.
+ */
+@Singleton
+public class RingtoneFactory {
+
+    private final Context mApplicationContext;
+
+    @Inject
+    RingtoneFactory(@ApplicationContext Context applicationContext) {
+        mApplicationContext = applicationContext;
+    }
+
+    /**
+     * Returns a {@link Ringtone} built from the provided URI and audio attributes flags.
+     *
+     * @param uri The URI used to build the {@link Ringtone}.
+     * @param audioAttributesFlags A combination of audio attribute flags that affect the volume
+     *                             and settings when playing the ringtone.
+     * @return the built {@link Ringtone}.
+     */
+    public Ringtone create(Uri uri, int audioAttributesFlags) {
+        AudioAttributes audioAttributes = new AudioAttributes.Builder()
+                .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
+                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+                .setFlags(audioAttributesFlags)
+                .build();
+        return RingtoneManager.getRingtone(mApplicationContext, uri,
+                /* volumeShaperConfig= */ null, audioAttributes);
+    }
+}
diff --git a/packages/SoundPicker/src/com/android/soundpicker/RingtoneListHandler.java b/packages/SoundPicker/src/com/android/soundpicker/RingtoneListHandler.java
new file mode 100644
index 0000000..bb38e0e
--- /dev/null
+++ b/packages/SoundPicker/src/com/android/soundpicker/RingtoneListHandler.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import static java.util.Objects.requireNonNull;
+
+import android.annotation.Nullable;
+import android.database.Cursor;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
+import javax.inject.Inject;
+
+/**
+ * Handles ringtone list state and actions. This includes keeping track of the selected item,
+ * ringtone manager cursor and added items to the list.
+ */
+public class RingtoneListHandler {
+
+    // TODO: We're using an empty URI instead of null, because null URIs still produce a sound,
+    //  while empty ones don't (Potentially this might be due to empty URIs being perceived as
+    //  malformed ones). We will switch to using the official silent URIs (SOUND_OFF, VIBRATION_OFF)
+    //  once they become available.
+    static final Uri SILENT_URI = Uri.EMPTY;
+    static final int ITEM_POSITION_UNKNOWN = -1;
+
+    private static final String TAG = "RingtoneListHandler";
+
+    /** The position in the list of the 'Silent' item. */
+    private int mSilentItemPosition = ITEM_POSITION_UNKNOWN;
+    /** The position in the list of the 'Default' item. */
+    private int mDefaultItemPosition = ITEM_POSITION_UNKNOWN;
+    /** The number of fixed items in the list. */
+    private int mFixedItemCount;
+    /**
+     * Stable ID for the ringtone that is currently selected (may be -1 if no ringtone is selected).
+     */
+    private long mSelectedItemId = -1;
+    private int mSelectedItemPosition = ITEM_POSITION_UNKNOWN;
+
+    private RingtoneManager mRingtoneManager;
+    private Config mRingtoneListConfig;
+    private Cursor mRingtoneCursor;
+
+    /**
+     * Holds immutable info on the ringtone list that is displayed.
+     */
+    static final class Config {
+        /**
+         * Whether this list has the 'Default' item.
+         */
+        public final boolean hasDefaultItem;
+        /**
+         * The Uri to play when the 'Default' item is clicked.
+         */
+        public final Uri uriForDefaultItem;
+        /**
+         * Whether this list has the 'Silent' item.
+         */
+        public final boolean hasSilentItem;
+        /**
+         * The initially selected uri in the list.
+         */
+        public final Uri initialSelectedUri;
+
+        Config(boolean hasDefaultItem, Uri uriForDefaultItem, boolean hasSilentItem,
+                Uri initialSelectedUri) {
+            this.hasDefaultItem = hasDefaultItem;
+            this.uriForDefaultItem = uriForDefaultItem;
+            this.hasSilentItem = hasSilentItem;
+            this.initialSelectedUri = initialSelectedUri;
+        }
+    }
+
+    @Inject
+    RingtoneListHandler() {
+    }
+
+    void init(@NonNull Config ringtoneListConfig,
+            @NonNull RingtoneManager ringtoneManager, @NonNull Cursor ringtoneCursor) {
+        mRingtoneManager = requireNonNull(ringtoneManager);
+        mRingtoneListConfig = requireNonNull(ringtoneListConfig);
+        mRingtoneCursor = requireNonNull(ringtoneCursor);
+    }
+
+    Config getRingtoneListConfig() {
+        return mRingtoneListConfig;
+    }
+
+    Cursor getRingtoneCursor() {
+        requireInitCalled();
+        return mRingtoneCursor;
+    }
+
+    Uri getRingtoneUri(int position) {
+        if (position < 0) {
+            Log.w(TAG, "Selected item position is unknown.");
+            // When the selected item is ITEM_POSITION_UNKNOWN, it is not the case we expected.
+            // We return SILENT_URI for this case.
+            return SILENT_URI;
+        } else if (position == mDefaultItemPosition) {
+            // Use the default Uri that they originally gave us.
+            return mRingtoneListConfig.uriForDefaultItem;
+        } else if (position == mSilentItemPosition) {
+            // Use SILENT_URI for the 'Silent' item.
+            return SILENT_URI;
+        } else {
+            requireInitCalled();
+            return mRingtoneManager.getRingtoneUri(mapListPositionToRingtonePosition(position));
+        }
+    }
+
+    int getRingtonePosition(Uri uri) {
+        requireInitCalled();
+        return mapRingtonePositionToListPosition(mRingtoneManager.getRingtonePosition(uri));
+    }
+
+    void resetFixedItems() {
+        mFixedItemCount = 0;
+        mDefaultItemPosition = ITEM_POSITION_UNKNOWN;
+        mSilentItemPosition = ITEM_POSITION_UNKNOWN;
+    }
+
+    int addDefaultItem() {
+        if (mDefaultItemPosition < 0) {
+            mDefaultItemPosition = addFixedItem();
+        }
+        return mDefaultItemPosition;
+    }
+
+    int getDefaultItemPosition() {
+        return mDefaultItemPosition;
+    }
+
+    int addSilentItem() {
+        if (mSilentItemPosition < 0) {
+            mSilentItemPosition = addFixedItem();
+        }
+        return mSilentItemPosition;
+    }
+
+    public int getSilentItemPosition() {
+        return mSilentItemPosition;
+    }
+
+    int getSelectedItemPosition() {
+        return mSelectedItemPosition;
+    }
+
+    void setSelectedItemPosition(int selectedItemPosition) {
+        mSelectedItemPosition = selectedItemPosition;
+    }
+
+    void setSelectedItemId(long selectedItemId) {
+        mSelectedItemId = selectedItemId;
+    }
+
+    long getSelectedItemId() {
+        return mSelectedItemId;
+    }
+
+    @Nullable
+    Uri getSelectedRingtoneUri() {
+        return getRingtoneUri(mSelectedItemPosition);
+    }
+
+    /**
+     * Maps the item position in the list, to its equivalent position in the RingtoneManager.
+     *
+     * @param itemPosition the position of item in the list.
+     * @return position of the item in the RingtoneManager.
+     */
+    private int mapListPositionToRingtonePosition(int itemPosition) {
+        // If the manager position is less than add items, then return that.
+        if (itemPosition < mFixedItemCount) return itemPosition;
+
+        return itemPosition - mFixedItemCount;
+    }
+
+    /**
+     * Maps the item position in the RingtoneManager, to its equivalent position in the list.
+     *
+     * @param itemPosition the position of the item in the RingtoneManager.
+     * @return position of the item in the list.
+     */
+    private int mapRingtonePositionToListPosition(int itemPosition) {
+        // If the manager position is less than add items, then return that.
+        if (itemPosition < 0) return itemPosition;
+
+        return itemPosition + mFixedItemCount;
+    }
+
+    /**
+     * Increments the number of added fixed items and returns the index of the newest added item.
+     * @return index of the newest added fixed item.
+     */
+    private int addFixedItem() {
+        return mFixedItemCount++;
+    }
+
+    private void requireInitCalled() {
+        requireNonNull(mRingtoneManager);
+        requireNonNull(mRingtoneCursor);
+    }
+}
diff --git a/packages/SoundPicker/src/com/android/soundpicker/RingtoneListViewAdapter.java b/packages/SoundPicker/src/com/android/soundpicker/RingtoneListViewAdapter.java
new file mode 100644
index 0000000..4ca8943
--- /dev/null
+++ b/packages/SoundPicker/src/com/android/soundpicker/RingtoneListViewAdapter.java
@@ -0,0 +1,264 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import static com.android.internal.widget.RecyclerView.NO_ID;
+
+import android.database.Cursor;
+import android.graphics.drawable.Drawable;
+import android.media.RingtoneManager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CheckedTextView;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.StringRes;
+import androidx.recyclerview.widget.RecyclerView;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * The adapter presents a list of ringtones which may include fixed item in the list and an action
+ * button at the end.
+ *
+ * The adapter handles three different types of items:
+ * <ul>
+ * <li>FIXED: Fixed items are items added to the top of the list. These items can not be modified
+ * and their position will never change.
+ * <li>DYNAMIC: Dynamic items are items from the ringtone manager. These items can be modified
+ * and their position can change.
+ * <li>FOOTER: A footer item is an added button to the end of the list. This item can be clicked
+ * but not selected and its position will never change.
+ * </ul>
+ */
+final class RingtoneListViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
+
+    private static final int VIEW_TYPE_FIXED_ITEM = 0;
+    private static final int VIEW_TYPE_DYNAMIC_ITEM = 1;
+    private static final int VIEW_TYPE_ADD_RINGTONE_ITEM = 2;
+    private final Cursor mCursor;
+    private final List<Integer> mFixedItemTitles;
+    private final Callbacks mCallbacks;
+    private final int mRowIDColumn;
+    private int mSelectedItem = -1;
+    @StringRes private Integer mAddRingtoneItemTitle;
+
+    /** Provides callbacks for the adapter. */
+    interface Callbacks {
+        void onRingtoneSelected(int position);
+        void onAddRingtoneSelected();
+        boolean isWorkRingtone(int position);
+        Drawable getWorkIconDrawable();
+    }
+
+    RingtoneListViewAdapter(Cursor cursor,
+            Callbacks callbacks) {
+        mCursor = cursor;
+        mCallbacks = callbacks;
+        mFixedItemTitles = new ArrayList<>();
+        mRowIDColumn = mCursor != null ? mCursor.getColumnIndex("_id") : -1;
+        setHasStableIds(true);
+    }
+
+    void setSelectedItem(int position) {
+        notifyItemChanged(mSelectedItem);
+        mSelectedItem = position;
+        notifyItemChanged(mSelectedItem);
+    }
+
+    /**
+     * Adds title to the fixed items list and returns the index of the newest added item.
+     * @param textResId the title to add to the fixed items list.
+     * @return The index of the newest added item in the fixed items list.
+     */
+    int addTitleForFixedItem(@StringRes int textResId) {
+        mFixedItemTitles.add(textResId);
+        notifyItemInserted(mFixedItemTitles.size() - 1);
+        return mFixedItemTitles.size() - 1;
+    }
+
+    void addTitleForAddRingtoneItem(@StringRes int textResId) {
+        mAddRingtoneItemTitle = textResId;
+        notifyItemInserted(getItemCount() - 1);
+    }
+
+    @NotNull
+    @Override
+    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
+
+        if (viewType == VIEW_TYPE_FIXED_ITEM) {
+            View fixedItemView = inflater.inflate(
+                    com.android.internal.R.layout.select_dialog_singlechoice_material, parent,
+                    false);
+
+            return new FixedItemViewHolder(fixedItemView, mCallbacks);
+        }
+
+        if (viewType == VIEW_TYPE_ADD_RINGTONE_ITEM) {
+            View addRingtoneItemView = inflater.inflate(R.layout.add_new_sound_item, parent, false);
+
+            return new AddRingtoneItemViewHolder(addRingtoneItemView,
+                    mCallbacks);
+        }
+
+        View view = inflater.inflate(R.layout.radio_with_work_badge, parent, false);
+
+        return new DynamicItemViewHolder(view, mCallbacks);
+    }
+
+    @Override
+    public void onBindViewHolder(@NotNull RecyclerView.ViewHolder holder, int position) {
+        if (holder instanceof FixedItemViewHolder) {
+            FixedItemViewHolder viewHolder = (FixedItemViewHolder) holder;
+
+            viewHolder.onBind(mFixedItemTitles.get(position),
+                    /* isChecked= */ position == mSelectedItem);
+            return;
+        }
+        if (holder instanceof AddRingtoneItemViewHolder) {
+            AddRingtoneItemViewHolder viewHolder = (AddRingtoneItemViewHolder) holder;
+
+            viewHolder.onBind(mAddRingtoneItemTitle);
+            return;
+        }
+
+        if (!(holder instanceof DynamicItemViewHolder)) {
+            throw new IllegalArgumentException("holder type is not supported");
+        }
+
+        DynamicItemViewHolder viewHolder = (DynamicItemViewHolder) holder;
+        int pos = position - mFixedItemTitles.size();
+        if (!mCursor.moveToPosition(pos)) {
+            throw new IllegalStateException("Could not move cursor to position: " + pos);
+        }
+
+        Drawable workIcon = (mCallbacks != null)
+                && mCallbacks.isWorkRingtone(position)
+                ? mCallbacks.getWorkIconDrawable() : null;
+
+        viewHolder.onBind(mCursor.getString(RingtoneManager.TITLE_COLUMN_INDEX),
+                /* isChecked= */ position == mSelectedItem, workIcon);
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        if (!mFixedItemTitles.isEmpty() && position < mFixedItemTitles.size()) {
+            return VIEW_TYPE_FIXED_ITEM;
+        }
+        if (mAddRingtoneItemTitle != null && position == getItemCount() - 1) {
+            return VIEW_TYPE_ADD_RINGTONE_ITEM;
+        }
+
+        return VIEW_TYPE_DYNAMIC_ITEM;
+    }
+
+    @Override
+    public int getItemCount() {
+        int itemCount = mFixedItemTitles.size() + mCursor.getCount();
+
+        if (mAddRingtoneItemTitle != null) {
+            itemCount++;
+        }
+
+        return itemCount;
+    }
+
+    @Override
+    public long getItemId(int position) {
+        int itemViewType = getItemViewType(position);
+        if (itemViewType == VIEW_TYPE_FIXED_ITEM) {
+            // Since the item is a fixed item, then we can use the position as a stable ID
+            // since the order of the fixed items should never change.
+            return position;
+        }
+        if (itemViewType == VIEW_TYPE_DYNAMIC_ITEM && mCursor != null
+                && mCursor.moveToPosition(position - mFixedItemTitles.size())
+                && mRowIDColumn != -1) {
+            return mCursor.getLong(mRowIDColumn) + mFixedItemTitles.size();
+        }
+
+        // The position is either invalid or the item is the add ringtone item view, so no stable
+        // ID is returned. Add ringtone item view cannot be selected and only include an action
+        // buttons.
+        return NO_ID;
+    }
+
+    private static class DynamicItemViewHolder extends RecyclerView.ViewHolder {
+        private final CheckedTextView mTitleTextView;
+        private final ImageView mWorkIcon;
+
+        DynamicItemViewHolder(View itemView, Callbacks listener) {
+            super(itemView);
+
+            mTitleTextView = itemView.requireViewById(R.id.checked_text_view);
+            mWorkIcon = itemView.requireViewById(R.id.work_icon);
+            itemView.setOnClickListener(v -> listener.onRingtoneSelected(this.getLayoutPosition()));
+        }
+
+        void onBind(String title, boolean isChecked, Drawable workIcon) {
+            mTitleTextView.setText(title);
+            mTitleTextView.setChecked(isChecked);
+
+            if (workIcon == null) {
+                mWorkIcon.setVisibility(View.GONE);
+            } else {
+                mWorkIcon.setImageDrawable(workIcon);
+                mWorkIcon.setVisibility(View.VISIBLE);
+            }
+        }
+    }
+
+    private static class FixedItemViewHolder extends RecyclerView.ViewHolder {
+        private final CheckedTextView mTitleTextView;
+
+        FixedItemViewHolder(View itemView, Callbacks listener) {
+            super(itemView);
+
+            mTitleTextView = (CheckedTextView) itemView;
+            itemView.setOnClickListener(v -> listener.onRingtoneSelected(this.getLayoutPosition()));
+        }
+
+        void onBind(@StringRes int title, boolean isChecked) {
+            Objects.requireNonNull(mTitleTextView);
+
+            mTitleTextView.setText(title);
+            mTitleTextView.setChecked(isChecked);
+        }
+    }
+
+    private static class AddRingtoneItemViewHolder extends RecyclerView.ViewHolder {
+        private final TextView mTitleTextView;
+
+        AddRingtoneItemViewHolder(View itemView, Callbacks listener) {
+            super(itemView);
+
+            mTitleTextView = itemView.requireViewById(R.id.add_new_sound_text);
+            itemView.setOnClickListener(v -> listener.onAddRingtoneSelected());
+        }
+
+        void onBind(@StringRes int title) {
+            mTitleTextView.setText(title);
+        }
+    }
+}
diff --git a/packages/SoundPicker/src/com/android/soundpicker/RingtoneManagerFactory.java b/packages/SoundPicker/src/com/android/soundpicker/RingtoneManagerFactory.java
new file mode 100644
index 0000000..f08eb24
--- /dev/null
+++ b/packages/SoundPicker/src/com/android/soundpicker/RingtoneManagerFactory.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import android.content.Context;
+import android.media.RingtoneManager;
+
+import dagger.hilt.android.qualifiers.ApplicationContext;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+/**
+ * A factory class used to create {@link RingtoneManager}.
+ */
+@Singleton
+public class RingtoneManagerFactory {
+
+    private final Context mApplicationContext;
+
+    @Inject
+    RingtoneManagerFactory(@ApplicationContext Context applicationContext) {
+        mApplicationContext = applicationContext;
+    }
+
+    /**
+     * Creates a new {@link RingtoneManager} and returns it.
+     *
+     * @return a {@link RingtoneManager}
+     */
+    public RingtoneManager create() {
+        return new RingtoneManager(mApplicationContext, /* includeParentRingtones */ true);
+    }
+}
+
diff --git a/packages/SoundPicker/src/com/android/soundpicker/RingtonePickerActivity.java b/packages/SoundPicker/src/com/android/soundpicker/RingtonePickerActivity.java
index 56b940c..90a14f9 100644
--- a/packages/SoundPicker/src/com/android/soundpicker/RingtonePickerActivity.java
+++ b/packages/SoundPicker/src/com/android/soundpicker/RingtonePickerActivity.java
@@ -16,43 +16,19 @@
 
 package com.android.soundpicker;
 
-import android.content.ContentProvider;
-import android.content.Context;
-import android.content.DialogInterface;
 import android.content.Intent;
-import android.content.res.Resources;
-import android.content.res.Resources.NotFoundException;
-import android.database.Cursor;
-import android.database.CursorWrapper;
-import android.media.AudioAttributes;
-import android.media.Ringtone;
 import android.media.RingtoneManager;
 import android.net.Uri;
-import android.os.AsyncTask;
 import android.os.Bundle;
-import android.os.Environment;
-import android.os.Handler;
 import android.os.UserHandle;
-import android.os.UserManager;
-import android.provider.MediaStore;
-import android.provider.Settings;
 import android.util.Log;
-import android.util.TypedValue;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.CursorAdapter;
-import android.widget.ImageView;
-import android.widget.ListView;
-import android.widget.TextView;
-import android.widget.Toast;
 
-import com.android.internal.app.AlertActivity;
-import com.android.internal.app.AlertController;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentTransaction;
+import androidx.lifecycle.ViewModelProvider;
 
-import java.io.IOException;
-import java.util.regex.Pattern;
+import dagger.hilt.android.AndroidEntryPoint;
 
 /**
  * The {@link RingtonePickerActivity} allows the user to choose one from all of the
@@ -60,727 +36,183 @@
  *
  * @see RingtoneManager#ACTION_RINGTONE_PICKER
  */
-public final class RingtonePickerActivity extends AlertActivity implements
-        AdapterView.OnItemSelectedListener, Runnable, DialogInterface.OnClickListener,
-        AlertController.AlertParams.OnPrepareListViewListener {
-
-    private static final int POS_UNKNOWN = -1;
+@AndroidEntryPoint(AppCompatActivity.class)
+public final class RingtonePickerActivity extends Hilt_RingtonePickerActivity {
 
     private static final String TAG = "RingtonePickerActivity";
+    // TODO: Use the extra keys from RingtoneManager once they're added.
+    private static final String EXTRA_RINGTONE_PICKER_CATEGORY = "EXTRA_RINGTONE_PICKER_CATEGORY";
+    private static final String EXTRA_VIBRATION_SHOW_DEFAULT = "EXTRA_VIBRATION_SHOW_DEFAULT";
+    private static final String EXTRA_VIBRATION_DEFAULT_URI = "EXTRA_VIBRATION_DEFAULT_URI";
+    private static final String EXTRA_VIBRATION_SHOW_SILENT = "EXTRA_VIBRATION_SHOW_SILENT";
+    private static final String EXTRA_VIBRATION_EXISTING_URI = "EXTRA_VIBRATION_EXISTING_URI";
+    private static final boolean RINGTONE_PICKER_CATEGORY_FEATURE_ENABLED = false;
 
-    private static final int DELAY_MS_SELECTION_PLAYED = 300;
-
-    private static final String COLUMN_LABEL = MediaStore.Audio.Media.TITLE;
-
-    private static final String SAVE_CLICKED_POS = "clicked_pos";
-
-    private static final String SOUND_NAME_RES_PREFIX = "sound_name_";
-
-    private static final int ADD_FILE_REQUEST_CODE = 300;
-
-    private RingtoneManager mRingtoneManager;
-    private int mType;
-
-    private Cursor mCursor;
-    private Handler mHandler;
-    private BadgedRingtoneAdapter mAdapter;
-
-    /** The position in the list of the 'Silent' item. */
-    private int mSilentPos = POS_UNKNOWN;
-
-    /** The position in the list of the 'Default' item. */
-    private int mDefaultRingtonePos = POS_UNKNOWN;
-
-    /** The position in the list of the ringtone to sample. */
-    private int mSampleRingtonePos = POS_UNKNOWN;
-
-    /** Whether this list has the 'Silent' item. */
-    private boolean mHasSilentItem;
-
-    /** The Uri to place a checkmark next to. */
-    private Uri mExistingUri;
-
-    /** The number of static items in the list. */
-    private int mStaticItemCount;
-
-    /** Whether this list has the 'Default' item. */
-    private boolean mHasDefaultItem;
-
-    /** The Uri to play when the 'Default' item is clicked. */
-    private Uri mUriForDefaultItem;
-
-    /** Id of the user to which the ringtone picker should list the ringtones */
-    private int mPickerUserId;
-
-    /** Context of the user specified by mPickerUserId */
-    private Context mTargetContext;
-
-    /**
-     * A Ringtone for the default ringtone. In most cases, the RingtoneManager
-     * will stop the previous ringtone. However, the RingtoneManager doesn't
-     * manage the default ringtone for us, so we should stop this one manually.
-     */
-    private Ringtone mDefaultRingtone;
-
-    /**
-     * The ringtone that's currently playing, unless the currently playing one is the default
-     * ringtone.
-     */
-    private Ringtone mCurrentRingtone;
-
-    /**
-     * Stable ID for the ringtone that is currently checked (may be -1 if no ringtone is checked).
-     */
-    private long mCheckedItemId = -1;
-
+    private RingtonePickerViewModel mRingtonePickerViewModel;
     private int mAttributesFlags;
 
-    private boolean mShowOkCancelButtons;
-
-    /**
-     * Keep the currently playing ringtone around when changing orientation, so that it
-     * can be stopped later, after the activity is recreated.
-     */
-    private static Ringtone sPlayingRingtone;
-
-    private DialogInterface.OnClickListener mRingtoneClickListener =
-            new DialogInterface.OnClickListener() {
-
-        /*
-         * On item clicked
-         */
-        public void onClick(DialogInterface dialog, int which) {
-            if (which == mCursor.getCount() + mStaticItemCount) {
-                // The "Add new ringtone" item was clicked. Start a file picker intent to select
-                // only audio files (MIME type "audio/*")
-                final Intent chooseFile = getMediaFilePickerIntent();
-                startActivityForResult(chooseFile, ADD_FILE_REQUEST_CODE);
-                return;
-            }
-
-            // Save the position of most recently clicked item
-            setCheckedItem(which);
-
-            // In the buttonless (watch-only) version, preemptively set our result since we won't
-            // have another chance to do so before the activity closes.
-            if (!mShowOkCancelButtons) {
-                setSuccessResultWithRingtone(getCurrentlySelectedRingtoneUri());
-            }
-
-            // Play clip
-            playRingtone(which, 0);
-        }
-
-    };
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_ringtone_picker);
 
-        mHandler = new Handler();
+        mRingtonePickerViewModel = new ViewModelProvider(this).get(RingtonePickerViewModel.class);
 
         Intent intent = getIntent();
-        mPickerUserId = UserHandle.myUserId();
-        mTargetContext = this;
+        /**
+         * Id of the user to which the ringtone picker should list the ringtones
+         */
+        int pickerUserId = UserHandle.myUserId();
 
         // Get the types of ringtones to show
-        mType = intent.getIntExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, -1);
-        initRingtoneManager();
+        int ringtoneType = intent.getIntExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,
+                RingtonePickerViewModel.RINGTONE_TYPE_UNKNOWN);
 
-        /*
-         * Get whether to show the 'Default' item, and the URI to play when the
-         * default is clicked
-         */
-        mHasDefaultItem = intent.getBooleanExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
-        mUriForDefaultItem = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI);
-        if (mUriForDefaultItem == null) {
-            if (mType == RingtoneManager.TYPE_NOTIFICATION) {
-                mUriForDefaultItem = Settings.System.DEFAULT_NOTIFICATION_URI;
-            } else if (mType == RingtoneManager.TYPE_ALARM) {
-                mUriForDefaultItem = Settings.System.DEFAULT_ALARM_ALERT_URI;
-            } else if (mType == RingtoneManager.TYPE_RINGTONE) {
-                mUriForDefaultItem = Settings.System.DEFAULT_RINGTONE_URI;
-            } else {
-                // or leave it null for silence.
-                mUriForDefaultItem = Settings.System.DEFAULT_RINGTONE_URI;
-            }
-        }
-
-        // Get whether to show the 'Silent' item
-        mHasSilentItem = intent.getBooleanExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
         // AudioAttributes flags
         mAttributesFlags |= intent.getIntExtra(
                 RingtoneManager.EXTRA_RINGTONE_AUDIO_ATTRIBUTES_FLAGS,
                 0 /*defaultValue == no flags*/);
 
-        mShowOkCancelButtons = getResources().getBoolean(R.bool.config_showOkCancelButtons);
+        boolean showOkCancelButtons = getResources().getBoolean(R.bool.config_showOkCancelButtons);
+
+        String title = intent.getStringExtra(RingtoneManager.EXTRA_RINGTONE_TITLE);
+        if (title == null) {
+            title = getString(RingtonePickerViewModel.getTitleByType(ringtoneType));
+        }
+        String ringtonePickerCategory = intent.getStringExtra(EXTRA_RINGTONE_PICKER_CATEGORY);
+        RingtonePickerViewModel.PickerType pickerType = mapCategoryToPickerType(
+                ringtonePickerCategory);
+
+        RingtoneListHandler.Config soundListConfig = getSoundListConfig(pickerType, intent,
+                ringtoneType);
+        RingtoneListHandler.Config vibrationListConfig = getVibrationListConfig(pickerType, intent);
+
+        RingtonePickerViewModel.Config pickerConfig =
+                new RingtonePickerViewModel.Config(title, pickerUserId, ringtoneType,
+                        showOkCancelButtons, mAttributesFlags, pickerType);
+
+        mRingtonePickerViewModel.init(pickerConfig, soundListConfig, vibrationListConfig);
+
+        if (savedInstanceState == null) {
+            TabbedDialogFragment dialogFragment = new TabbedDialogFragment();
+
+            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
+            Fragment prev = getSupportFragmentManager().findFragmentByTag(TabbedDialogFragment.TAG);
+            if (prev != null) {
+                ft.remove(prev);
+            }
+            ft.addToBackStack(null);
+            dialogFragment.show(ft, TabbedDialogFragment.TAG);
+        }
 
         // The volume keys will control the stream that we are choosing a ringtone for
-        setVolumeControlStream(mRingtoneManager.inferStreamType());
+        setVolumeControlStream(mRingtonePickerViewModel.getRingtoneStreamType());
+    }
 
-        // Get the URI whose list item should have a checkmark
-        mExistingUri = intent
+    private RingtoneListHandler.Config getSoundListConfig(
+            RingtonePickerViewModel.PickerType pickerType, Intent intent, int ringtoneType) {
+        if (pickerType != RingtonePickerViewModel.PickerType.SOUND_PICKER
+                && pickerType != RingtonePickerViewModel.PickerType.RINGTONE_PICKER) {
+            // This ringtone picker does not require a sound picker.
+            return null;
+        }
+
+        // Get whether to show the 'Default' sound item, and the URI to play when it's clicked
+        boolean hasDefaultSoundItem =
+                intent.getBooleanExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
+
+        // The Uri to play when the 'Default' sound item is clicked.
+        Uri uriForDefaultSoundItem =
+                intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI);
+        if (uriForDefaultSoundItem == null) {
+            uriForDefaultSoundItem = RingtonePickerViewModel.getDefaultItemUriByType(ringtoneType);
+        }
+
+        // Get whether this list has the 'Silent' sound item.
+        boolean hasSilentSoundItem =
+                intent.getBooleanExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
+
+        // AudioAttributes flags
+        mAttributesFlags |= intent.getIntExtra(
+                RingtoneManager.EXTRA_RINGTONE_AUDIO_ATTRIBUTES_FLAGS,
+                0 /*defaultValue == no flags*/);
+
+        // Get the sound URI whose list item should have a checkmark
+        Uri existingSoundUri = intent
                 .getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI);
 
-        // Create the list of ringtones and hold on to it so we can update later.
-        mAdapter = new BadgedRingtoneAdapter(this, mCursor,
-                /* isManagedProfile = */ UserManager.get(this).isManagedProfile(mPickerUserId));
-        if (savedInstanceState != null) {
-            setCheckedItem(savedInstanceState.getInt(SAVE_CLICKED_POS, POS_UNKNOWN));
-        }
-
-        final AlertController.AlertParams p = mAlertParams;
-        p.mAdapter = mAdapter;
-        p.mOnClickListener = mRingtoneClickListener;
-        p.mLabelColumn = COLUMN_LABEL;
-        p.mIsSingleChoice = true;
-        p.mOnItemSelectedListener = this;
-        if (mShowOkCancelButtons) {
-            p.mPositiveButtonText = getString(com.android.internal.R.string.ok);
-            p.mPositiveButtonListener = this;
-            p.mNegativeButtonText = getString(com.android.internal.R.string.cancel);
-            p.mPositiveButtonListener = this;
-        }
-        p.mOnPrepareListViewListener = this;
-
-        p.mTitle = intent.getCharSequenceExtra(RingtoneManager.EXTRA_RINGTONE_TITLE);
-        if (p.mTitle == null) {
-          if (mType == RingtoneManager.TYPE_ALARM) {
-              p.mTitle = getString(com.android.internal.R.string.ringtone_picker_title_alarm);
-          } else if (mType == RingtoneManager.TYPE_NOTIFICATION) {
-              p.mTitle =
-                  getString(com.android.internal.R.string.ringtone_picker_title_notification);
-          } else {
-              p.mTitle = getString(com.android.internal.R.string.ringtone_picker_title);
-          }
-        }
-
-        setupAlert();
-
-        ListView listView = mAlert.getListView();
-        if (listView != null) {
-            // List view needs to gain focus in order for RSB to work.
-            if (!listView.requestFocus()) {
-                Log.e(TAG, "Unable to gain focus! RSB may not work properly.");
-            }
-        }
-    }
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putInt(SAVE_CLICKED_POS, getCheckedItem());
+        return new RingtoneListHandler.Config(hasDefaultSoundItem,
+                uriForDefaultSoundItem, hasSilentSoundItem, existingSoundUri);
     }
 
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-
-        if (requestCode == ADD_FILE_REQUEST_CODE && resultCode == RESULT_OK) {
-            // Add the custom ringtone in a separate thread
-            final AsyncTask<Uri, Void, Uri> installTask = new AsyncTask<Uri, Void, Uri>() {
-                @Override
-                protected Uri doInBackground(Uri... params) {
-                    try {
-                        return mRingtoneManager.addCustomExternalRingtone(params[0], mType);
-                    } catch (IOException | IllegalArgumentException e) {
-                        Log.e(TAG, "Unable to add new ringtone", e);
-                    }
-                    return null;
-                }
-
-                @Override
-                protected void onPostExecute(Uri ringtoneUri) {
-                    if (ringtoneUri != null) {
-                        requeryForAdapter();
-                    } else {
-                        // Ringtone was not added, display error Toast
-                        Toast.makeText(RingtonePickerActivity.this, R.string.unable_to_add_ringtone,
-                                Toast.LENGTH_SHORT).show();
-                    }
-                }
-            };
-            installTask.execute(data.getData());
+    private RingtoneListHandler.Config getVibrationListConfig(
+            RingtonePickerViewModel.PickerType pickerType, Intent intent) {
+        if (pickerType != RingtonePickerViewModel.PickerType.VIBRATION_PICKER
+                && pickerType != RingtonePickerViewModel.PickerType.RINGTONE_PICKER) {
+            // This ringtone picker does not require a vibration picker.
+            return null;
         }
-    }
 
-    // Disabled because context menus aren't Material Design :(
-    /*
-    @Override
-    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {
-        int position = ((AdapterContextMenuInfo) menuInfo).position;
+        // Get whether to show the 'Default' vibration item, and the URI to play when it's clicked
+        boolean hasDefaultVibrationItem =
+                intent.getBooleanExtra(EXTRA_VIBRATION_SHOW_DEFAULT, false);
 
-        Ringtone ringtone = getRingtone(getRingtoneManagerPosition(position));
-        if (ringtone != null && mRingtoneManager.isCustomRingtone(ringtone.getUri())) {
-            // It's a custom ringtone so we display the context menu
-            menu.setHeaderTitle(ringtone.getTitle(this));
-            menu.add(Menu.NONE, Menu.FIRST, Menu.NONE, R.string.delete_ringtone_text);
-        }
-    }
+        // The Uri to play when the 'Default' vibration item is clicked.
+        Uri uriForDefaultVibrationItem = intent.getParcelableExtra(EXTRA_VIBRATION_DEFAULT_URI);
 
-    @Override
-    public boolean onContextItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case Menu.FIRST: {
-                int deletedRingtonePos = ((AdapterContextMenuInfo) item.getMenuInfo()).position;
-                Uri deletedRingtoneUri = getRingtone(
-                        getRingtoneManagerPosition(deletedRingtonePos)).getUri();
-                if(mRingtoneManager.deleteExternalRingtone(deletedRingtoneUri)) {
-                    requeryForAdapter();
-                } else {
-                    Toast.makeText(this, R.string.unable_to_delete_ringtone, Toast.LENGTH_SHORT)
-                            .show();
-                }
-                return true;
-            }
-            default: {
-                return false;
-            }
-        }
+        // Get whether this list has the 'Silent' vibration item.
+        boolean hasSilentVibrationItem =
+                intent.getBooleanExtra(EXTRA_VIBRATION_SHOW_SILENT, true);
+
+        // Get the vibration URI whose list item should have a checkmark
+        Uri existingVibrationUri = intent.getParcelableExtra(EXTRA_VIBRATION_EXISTING_URI);
+
+        return new RingtoneListHandler.Config(
+                hasDefaultVibrationItem, uriForDefaultVibrationItem, hasSilentVibrationItem,
+                existingVibrationUri);
     }
-    */
 
     @Override
     public void onDestroy() {
-        if (mHandler != null) {
-            mHandler.removeCallbacksAndMessages(null);
-        }
-        if (mCursor != null) {
-            mCursor.close();
-            mCursor = null;
-        }
+        mRingtonePickerViewModel.cancelPendingAsyncTasks();
         super.onDestroy();
     }
 
-    public void onPrepareListView(ListView listView) {
-        // Reset the static item count, as this method can be called multiple times
-        mStaticItemCount = 0;
-
-        if (mHasDefaultItem) {
-            mDefaultRingtonePos = addDefaultRingtoneItem(listView);
-
-            if (getCheckedItem() == POS_UNKNOWN && RingtoneManager.isDefault(mExistingUri)) {
-                setCheckedItem(mDefaultRingtonePos);
-            }
-        }
-
-        if (mHasSilentItem) {
-            mSilentPos = addSilentItem(listView);
-
-            // The 'Silent' item should use a null Uri
-            if (getCheckedItem() == POS_UNKNOWN && mExistingUri == null) {
-                setCheckedItem(mSilentPos);
-            }
-        }
-
-        if (getCheckedItem() == POS_UNKNOWN) {
-            setCheckedItem(getListPosition(mRingtoneManager.getRingtonePosition(mExistingUri)));
-        }
-
-        // In the buttonless (watch-only) version, preemptively set our result since we won't
-        // have another chance to do so before the activity closes.
-        if (!mShowOkCancelButtons) {
-            setSuccessResultWithRingtone(getCurrentlySelectedRingtoneUri());
-        }
-        // If external storage is available, add a button to install sounds from storage.
-        if (resolvesMediaFilePicker()
-                && Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
-            addNewSoundItem(listView);
-        }
-
-        // Enable context menu in ringtone items
-        registerForContextMenu(listView);
-    }
-
-    /**
-     * Re-query RingtoneManager for the most recent set of installed ringtones. May move the
-     * selected item position to match the new position of the chosen sound.
-     *
-     * This should only need to happen after adding or removing a ringtone.
-     */
-    private void requeryForAdapter() {
-        // Refresh and set a new cursor, closing the old one.
-        initRingtoneManager();
-        mAdapter.changeCursor(mCursor);
-
-        // Update checked item location.
-        int checkedPosition = POS_UNKNOWN;
-        for (int i = 0; i < mAdapter.getCount(); i++) {
-            if (mAdapter.getItemId(i) == mCheckedItemId) {
-                checkedPosition = getListPosition(i);
-                break;
-            }
-        }
-        if (mHasSilentItem && checkedPosition == POS_UNKNOWN) {
-            checkedPosition = mSilentPos;
-        }
-        setCheckedItem(checkedPosition);
-        setupAlert();
-    }
-
-    /**
-     * Adds a static item to the top of the list. A static item is one that is not from the
-     * RingtoneManager.
-     *
-     * @param listView The ListView to add to.
-     * @param textResId The resource ID of the text for the item.
-     * @return The position of the inserted item.
-     */
-    private int addStaticItem(ListView listView, int textResId) {
-        TextView textView = (TextView) getLayoutInflater().inflate(
-                com.android.internal.R.layout.select_dialog_singlechoice_material, listView, false);
-        textView.setText(textResId);
-        listView.addHeaderView(textView);
-        mStaticItemCount++;
-        return listView.getHeaderViewsCount() - 1;
-    }
-
-    private int addDefaultRingtoneItem(ListView listView) {
-        if (mType == RingtoneManager.TYPE_NOTIFICATION) {
-            return addStaticItem(listView, R.string.notification_sound_default);
-        } else if (mType == RingtoneManager.TYPE_ALARM) {
-            return addStaticItem(listView, R.string.alarm_sound_default);
-        }
-
-        return addStaticItem(listView, R.string.ringtone_default);
-    }
-
-    private int addSilentItem(ListView listView) {
-        return addStaticItem(listView, com.android.internal.R.string.ringtone_silent);
-    }
-
-    private void addNewSoundItem(ListView listView) {
-        View view = getLayoutInflater().inflate(R.layout.add_new_sound_item, listView,
-                false /* attachToRoot */);
-        TextView text = (TextView)view.findViewById(R.id.add_new_sound_text);
-
-        if (mType == RingtoneManager.TYPE_ALARM) {
-            text.setText(R.string.add_alarm_text);
-        } else if (mType == RingtoneManager.TYPE_NOTIFICATION) {
-            text.setText(R.string.add_notification_text);
-        } else {
-            text.setText(R.string.add_ringtone_text);
-        }
-        listView.addFooterView(view);
-    }
-
-    private void initRingtoneManager() {
-        // Reinstantiate the RingtoneManager. Cursor.requery() was deprecated and calling it
-        // causes unexpected behavior.
-        mRingtoneManager = new RingtoneManager(mTargetContext, /* includeParentRingtones */ true);
-        if (mType != -1) {
-            mRingtoneManager.setType(mType);
-        }
-        mCursor = new LocalizedCursor(mRingtoneManager.getCursor(), getResources(), COLUMN_LABEL);
-    }
-
-    private Ringtone getRingtone(int ringtoneManagerPosition) {
-        if (ringtoneManagerPosition < 0) {
-            return null;
-        }
-        return mRingtoneManager.getRingtone(ringtoneManagerPosition);
-    }
-
-    private int getCheckedItem() {
-        return mAlertParams.mCheckedItem;
-    }
-
-    private void setCheckedItem(int pos) {
-        mAlertParams.mCheckedItem = pos;
-        mCheckedItemId = mAdapter.getItemId(getRingtoneManagerPosition(pos));
-    }
-
-    /*
-     * On click of Ok/Cancel buttons
-     */
-    public void onClick(DialogInterface dialog, int which) {
-        boolean positiveResult = which == DialogInterface.BUTTON_POSITIVE;
-
-        // Stop playing the previous ringtone
-        mRingtoneManager.stopPreviousRingtone();
-
-        if (positiveResult) {
-            setSuccessResultWithRingtone(getCurrentlySelectedRingtoneUri());
-        } else {
-            setResult(RESULT_CANCELED);
-        }
-
-        finish();
-    }
-
-    /*
-     * On item selected via keys
-     */
-    public void onItemSelected(AdapterView parent, View view, int position, long id) {
-        // footer view
-        if (position >= mCursor.getCount() + mStaticItemCount) {
-            return;
-        }
-
-        playRingtone(position, DELAY_MS_SELECTION_PLAYED);
-
-        // In the buttonless (watch-only) version, preemptively set our result since we won't
-        // have another chance to do so before the activity closes.
-        if (!mShowOkCancelButtons) {
-            setSuccessResultWithRingtone(getCurrentlySelectedRingtoneUri());
-        }
-    }
-
-    public void onNothingSelected(AdapterView parent) {
-    }
-
-    private void playRingtone(int position, int delayMs) {
-        mHandler.removeCallbacks(this);
-        mSampleRingtonePos = position;
-        mHandler.postDelayed(this, delayMs);
-    }
-
-    public void run() {
-        stopAnyPlayingRingtone();
-        if (mSampleRingtonePos == mSilentPos) {
-            return;
-        }
-
-        Ringtone ringtone;
-        if (mSampleRingtonePos == mDefaultRingtonePos) {
-            if (mDefaultRingtone == null) {
-                mDefaultRingtone = RingtoneManager.getRingtone(this, mUriForDefaultItem);
-            }
-           /*
-            * Stream type of mDefaultRingtone is not set explicitly here.
-            * It should be set in accordance with mRingtoneManager of this Activity.
-            */
-            if (mDefaultRingtone != null) {
-                mDefaultRingtone.setStreamType(mRingtoneManager.inferStreamType());
-            }
-            ringtone = mDefaultRingtone;
-            mCurrentRingtone = null;
-        } else {
-            ringtone = mRingtoneManager.getRingtone(getRingtoneManagerPosition(mSampleRingtonePos));
-            mCurrentRingtone = ringtone;
-        }
-
-        if (ringtone != null) {
-            if (mAttributesFlags != 0) {
-                ringtone.setAudioAttributes(
-                        new AudioAttributes.Builder(ringtone.getAudioAttributes())
-                                .setFlags(mAttributesFlags)
-                                .build());
-            }
-            ringtone.play();
-        }
-    }
-
     @Override
     protected void onStop() {
         super.onStop();
-
-        if (!isChangingConfigurations()) {
-            stopAnyPlayingRingtone();
-        } else {
-            saveAnyPlayingRingtone();
-        }
+        mRingtonePickerViewModel.onStop(isChangingConfigurations());
     }
 
     @Override
     protected void onPause() {
         super.onPause();
-        if (!isChangingConfigurations()) {
-            stopAnyPlayingRingtone();
-        }
+        mRingtonePickerViewModel.onPause(isChangingConfigurations());
     }
 
-    private void setSuccessResultWithRingtone(Uri ringtoneUri) {
-      setResult(RESULT_OK,
-          new Intent().putExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI, ringtoneUri));
-    }
-
-    private Uri getCurrentlySelectedRingtoneUri() {
-        if (getCheckedItem() == POS_UNKNOWN) {
-            // When the getCheckItem is POS_UNKNOWN, it is not the case we expected.
-            // We return null for this case.
-            return null;
-        } else if (getCheckedItem() == mDefaultRingtonePos) {
-            // Use the default Uri that they originally gave us.
-            return mUriForDefaultItem;
-        } else if (getCheckedItem() == mSilentPos) {
-            // Use a null Uri for the 'Silent' item.
-            return null;
-        } else {
-            return mRingtoneManager.getRingtoneUri(getRingtoneManagerPosition(getCheckedItem()));
-        }
-    }
-
-    private void saveAnyPlayingRingtone() {
-        if (mDefaultRingtone != null && mDefaultRingtone.isPlaying()) {
-            sPlayingRingtone = mDefaultRingtone;
-        } else if (mCurrentRingtone != null && mCurrentRingtone.isPlaying()) {
-            sPlayingRingtone = mCurrentRingtone;
-        }
-    }
-
-    private void stopAnyPlayingRingtone() {
-        if (sPlayingRingtone != null && sPlayingRingtone.isPlaying()) {
-            sPlayingRingtone.stop();
-        }
-        sPlayingRingtone = null;
-
-        if (mDefaultRingtone != null && mDefaultRingtone.isPlaying()) {
-            mDefaultRingtone.stop();
+    /**
+     * Maps the ringtone picker category to the appropriate PickerType.
+     * If the category is null or the feature is still not released, then it defaults to sound
+     * picker.
+     *
+     * @param category the ringtone picker category.
+     * @return the corresponding picker type.
+     */
+    private static RingtonePickerViewModel.PickerType mapCategoryToPickerType(String category) {
+        if (category == null || !RINGTONE_PICKER_CATEGORY_FEATURE_ENABLED) {
+            return RingtonePickerViewModel.PickerType.SOUND_PICKER;
         }
 
-        if (mRingtoneManager != null) {
-            mRingtoneManager.stopPreviousRingtone();
-        }
-    }
-
-    private int getRingtoneManagerPosition(int listPos) {
-        return listPos - mStaticItemCount;
-    }
-
-    private int getListPosition(int ringtoneManagerPos) {
-
-        // If the manager position is -1 (for not found), return that
-        if (ringtoneManagerPos < 0) return ringtoneManagerPos;
-
-        return ringtoneManagerPos + mStaticItemCount;
-    }
-
-    private Intent getMediaFilePickerIntent() {
-        final Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
-        chooseFile.setType("audio/*");
-        chooseFile.putExtra(Intent.EXTRA_MIME_TYPES,
-                new String[] { "audio/*", "application/ogg" });
-        return chooseFile;
-    }
-
-    private boolean resolvesMediaFilePicker() {
-        return getMediaFilePickerIntent().resolveActivity(getPackageManager()) != null;
-    }
-
-    private static class LocalizedCursor extends CursorWrapper {
-
-        final int mTitleIndex;
-        final Resources mResources;
-        String mNamePrefix;
-        final Pattern mSanitizePattern;
-
-        LocalizedCursor(Cursor cursor, Resources resources, String columnLabel) {
-            super(cursor);
-            mTitleIndex = mCursor.getColumnIndex(columnLabel);
-            mResources = resources;
-            mSanitizePattern = Pattern.compile("[^a-zA-Z0-9]");
-            if (mTitleIndex == -1) {
-                Log.e(TAG, "No index for column " + columnLabel);
-                mNamePrefix = null;
-            } else {
-                try {
-                    // Build the prefix for the name of the resource to look up
-                    // format is: "ResourcePackageName::ResourceTypeName/"
-                    // (the type name is expected to be "string" but let's not hardcode it).
-                    // Here we use an existing resource "notification_sound_default" which is
-                    // always expected to be found.
-                    mNamePrefix = String.format("%s:%s/%s",
-                            mResources.getResourcePackageName(R.string.notification_sound_default),
-                            mResources.getResourceTypeName(R.string.notification_sound_default),
-                            SOUND_NAME_RES_PREFIX);
-                } catch (NotFoundException e) {
-                    mNamePrefix = null;
-                }
-            }
-        }
-
-        /**
-         * Process resource name to generate a valid resource name.
-         * @param input
-         * @return a non-null String
-         */
-        private String sanitize(String input) {
-            if (input == null) {
-                return "";
-            }
-            return mSanitizePattern.matcher(input).replaceAll("_").toLowerCase();
-        }
-
-        @Override
-        public String getString(int columnIndex) {
-            final String defaultName = mCursor.getString(columnIndex);
-            if ((columnIndex != mTitleIndex) || (mNamePrefix == null)) {
-                return defaultName;
-            }
-            TypedValue value = new TypedValue();
-            try {
-                // the name currently in the database is used to derive a name to match
-                // against resource names in this package
-                mResources.getValue(mNamePrefix + sanitize(defaultName), value, false);
-            } catch (NotFoundException e) {
-                // no localized string, use the default string
-                return defaultName;
-            }
-            if ((value != null) && (value.type == TypedValue.TYPE_STRING)) {
-                Log.d(TAG, String.format("Replacing name %s with %s",
-                        defaultName, value.string.toString()));
-                return value.string.toString();
-            } else {
-                Log.e(TAG, "Invalid value when looking up localized name, using " + defaultName);
-                return defaultName;
-            }
-        }
-    }
-
-    private class BadgedRingtoneAdapter extends CursorAdapter {
-        private final boolean mIsManagedProfile;
-
-        public BadgedRingtoneAdapter(Context context, Cursor cursor, boolean isManagedProfile) {
-            super(context, cursor);
-            mIsManagedProfile = isManagedProfile;
-        }
-
-        @Override
-        public long getItemId(int position) {
-            if (position < 0) {
-                return position;
-            }
-            return super.getItemId(position);
-        }
-
-        @Override
-        public View newView(Context context, Cursor cursor, ViewGroup parent) {
-            LayoutInflater inflater = LayoutInflater.from(context);
-            return inflater.inflate(R.layout.radio_with_work_badge, parent, false);
-        }
-
-        @Override
-        public void bindView(View view, Context context, Cursor cursor) {
-            // Set text as the title of the ringtone
-            ((TextView) view.findViewById(R.id.checked_text_view))
-                    .setText(cursor.getString(RingtoneManager.TITLE_COLUMN_INDEX));
-
-            boolean isWorkRingtone = false;
-            if (mIsManagedProfile) {
-                /*
-                 * Display the work icon if the ringtone belongs to a work profile. We can tell that
-                 * a ringtone belongs to a work profile if the picker user is a managed profile, the
-                 * ringtone Uri is in external storage, and either the uri has no user id or has the
-                 * id of the picker user
-                 */
-                Uri currentUri = mRingtoneManager.getRingtoneUri(cursor.getPosition());
-                int uriUserId = ContentProvider.getUserIdFromUri(currentUri, mPickerUserId);
-                Uri uriWithoutUserId = ContentProvider.getUriWithoutUserId(currentUri);
-
-                if (uriUserId == mPickerUserId && uriWithoutUserId.toString()
-                        .startsWith(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI.toString())) {
-                    isWorkRingtone = true;
-                }
-            }
-
-            ImageView workIcon = (ImageView) view.findViewById(R.id.work_icon);
-            if(isWorkRingtone) {
-                workIcon.setImageDrawable(getPackageManager().getUserBadgeForDensityNoBackground(
-                        UserHandle.of(mPickerUserId), -1 /* density */));
-                workIcon.setVisibility(View.VISIBLE);
-            } else {
-                workIcon.setVisibility(View.GONE);
-            }
+        switch (category) {
+            case "android.intent.category.RINGTONE_PICKER_RINGTONE":
+                return RingtonePickerViewModel.PickerType.RINGTONE_PICKER;
+            case "android.intent.category.RINGTONE_PICKER_SOUND":
+                return RingtonePickerViewModel.PickerType.SOUND_PICKER;
+            case "android.intent.category.RINGTONE_PICKER_VIBRATION":
+                return RingtonePickerViewModel.PickerType.VIBRATION_PICKER;
+            default:
+                Log.w(TAG, "Unrecognized category: " + category + ". Defaulting to sound picker.");
+                return RingtonePickerViewModel.PickerType.SOUND_PICKER;
         }
     }
 }
diff --git a/packages/SoundPicker/src/com/android/soundpicker/RingtonePickerApplication.java b/packages/SoundPicker/src/com/android/soundpicker/RingtonePickerApplication.java
new file mode 100644
index 0000000..48fd4fe
--- /dev/null
+++ b/packages/SoundPicker/src/com/android/soundpicker/RingtonePickerApplication.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import android.app.Application;
+
+import dagger.hilt.android.HiltAndroidApp;
+
+/**
+ * The main application class for the project.
+ */
+@HiltAndroidApp(Application.class)
+public class RingtonePickerApplication extends Hilt_RingtonePickerApplication {
+}
diff --git a/packages/SoundPicker/src/com/android/soundpicker/RingtonePickerViewModel.java b/packages/SoundPicker/src/com/android/soundpicker/RingtonePickerViewModel.java
new file mode 100644
index 0000000..2c09711
--- /dev/null
+++ b/packages/SoundPicker/src/com/android/soundpicker/RingtonePickerViewModel.java
@@ -0,0 +1,340 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import static java.util.Objects.requireNonNull;
+
+import android.annotation.Nullable;
+import android.annotation.StringRes;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.provider.Settings;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.ViewModel;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+
+import dagger.hilt.android.lifecycle.HiltViewModel;
+
+import java.io.IOException;
+import java.util.concurrent.Executor;
+
+import javax.inject.Inject;
+
+/**
+ * A view model which holds immutable info about the picker state and means to retrieve and play
+ * currently selected ringtones.
+ */
+@HiltViewModel
+public final class RingtonePickerViewModel extends ViewModel {
+
+    static final int RINGTONE_TYPE_UNKNOWN = -1;
+
+    /**
+     * Keep the currently playing ringtone around when changing orientation, so that it
+     * can be stopped later, after the activity is recreated.
+     */
+    @VisibleForTesting
+    static Ringtone sPlayingRingtone;
+
+    private static final String TAG = "RingtonePickerViewModel";
+
+    private final RingtoneManagerFactory mRingtoneManagerFactory;
+    private final RingtoneFactory mRingtoneFactory;
+    private final RingtoneListHandler mSoundListHandler;
+    private final RingtoneListHandler mVibrationListHandler;
+    private final ListeningExecutorService mListeningExecutorService;
+
+    private RingtoneManager mRingtoneManager;
+
+    /**
+     * The ringtone that's currently playing.
+     */
+    private Ringtone mCurrentRingtone;
+
+    private Config mPickerConfig;
+
+    private ListenableFuture<Uri> mAddCustomRingtoneFuture;
+
+    public enum PickerType {
+        RINGTONE_PICKER,
+        SOUND_PICKER,
+        VIBRATION_PICKER
+    }
+
+    /**
+     * Holds immutable info on the picker that should be displayed.
+     */
+    static final class Config {
+        public final String title;
+        /**
+         * Id of the user to which the ringtone picker should list the ringtones.
+         */
+        public final int userId;
+        /**
+         * Ringtone type.
+         */
+        public final int ringtoneType;
+        /**
+         * AudioAttributes flags.
+         */
+        public final int audioAttributesFlags;
+        /**
+         * In the buttonless (watch-only) version we don't show the OK/Cancel buttons.
+         */
+        public final boolean showOkCancelButtons;
+
+        public final PickerType mPickerType;
+
+        Config(String title, int userId, int ringtoneType, boolean showOkCancelButtons,
+                int audioAttributesFlags, PickerType pickerType) {
+            this.title = title;
+            this.userId = userId;
+            this.ringtoneType = ringtoneType;
+            this.showOkCancelButtons = showOkCancelButtons;
+            this.audioAttributesFlags = audioAttributesFlags;
+            this.mPickerType = pickerType;
+        }
+    }
+
+    @Inject
+    RingtonePickerViewModel(RingtoneManagerFactory ringtoneManagerFactory,
+            RingtoneFactory ringtoneFactory,
+            ListeningExecutorServiceFactory listeningExecutorServiceFactory,
+            RingtoneListHandler soundListHandler,
+            RingtoneListHandler vibrationListHandler) {
+        mRingtoneManagerFactory = ringtoneManagerFactory;
+        mRingtoneFactory = ringtoneFactory;
+        mListeningExecutorService = listeningExecutorServiceFactory.createSingleThreadExecutor();
+        mSoundListHandler = soundListHandler;
+        mVibrationListHandler = vibrationListHandler;
+    }
+
+    @StringRes
+    static int getTitleByType(int ringtoneType) {
+        switch (ringtoneType) {
+            case RingtoneManager.TYPE_ALARM:
+                return com.android.internal.R.string.ringtone_picker_title_alarm;
+            case RingtoneManager.TYPE_NOTIFICATION:
+                return com.android.internal.R.string.ringtone_picker_title_notification;
+            default:
+                return com.android.internal.R.string.ringtone_picker_title;
+        }
+    }
+
+    static Uri getDefaultItemUriByType(int ringtoneType) {
+        switch (ringtoneType) {
+            case RingtoneManager.TYPE_ALARM:
+                return Settings.System.DEFAULT_ALARM_ALERT_URI;
+            case RingtoneManager.TYPE_NOTIFICATION:
+                return Settings.System.DEFAULT_NOTIFICATION_URI;
+            default:
+                return Settings.System.DEFAULT_RINGTONE_URI;
+        }
+    }
+
+    @StringRes
+    static int getAddNewItemTextByType(int ringtoneType) {
+        switch (ringtoneType) {
+            case RingtoneManager.TYPE_ALARM:
+                return R.string.add_alarm_text;
+            case RingtoneManager.TYPE_NOTIFICATION:
+                return R.string.add_notification_text;
+            default:
+                return R.string.add_ringtone_text;
+        }
+    }
+
+    @StringRes
+    static int getDefaultRingtoneItemTextByType(int ringtoneType) {
+        switch (ringtoneType) {
+            case RingtoneManager.TYPE_ALARM:
+                return R.string.alarm_sound_default;
+            case RingtoneManager.TYPE_NOTIFICATION:
+                return R.string.notification_sound_default;
+            default:
+                return R.string.ringtone_default;
+        }
+    }
+
+    void init(@NonNull Config pickerConfig,
+            RingtoneListHandler.Config soundListConfig,
+            RingtoneListHandler.Config vibrationListConfig) {
+        mRingtoneManager = mRingtoneManagerFactory.create();
+        mPickerConfig = pickerConfig;
+        if (mPickerConfig.ringtoneType != RINGTONE_TYPE_UNKNOWN) {
+            mRingtoneManager.setType(mPickerConfig.ringtoneType);
+        }
+        if (soundListConfig != null) {
+            mSoundListHandler.init(soundListConfig, mRingtoneManager,
+                    mRingtoneManager.getCursor());
+        }
+        if (vibrationListConfig != null) {
+            // TODO: Switch to the vibration cursor, once the API is made available.
+            mVibrationListHandler.init(vibrationListConfig, mRingtoneManager,
+                    mRingtoneManager.getCursor());
+        }
+    }
+
+    /**
+     * Re-initializes the view model which is required after updating any of the picker lists.
+     * This could happen when adding a custom ringtone.
+     */
+    void reinit() {
+        init(mPickerConfig, mSoundListHandler.getRingtoneListConfig(),
+                mVibrationListHandler.getRingtoneListConfig());
+    }
+
+    @NonNull
+    Config getPickerConfig() {
+        requireInitCalled();
+        return mPickerConfig;
+    }
+
+    @NonNull
+    RingtoneListHandler getSoundListHandler() {
+        return mSoundListHandler;
+    }
+
+    @NonNull
+    RingtoneListHandler getVibrationListHandler() {
+        return mVibrationListHandler;
+    }
+
+    /**
+     * Combined the currently selected sound and vibration URIs and returns a unified URI. If the
+     * picker does not show either sound or vibration, that portion of the URI will be null.
+     *
+     * Currently only the sound URI is returned, since we don't have the API to retrieve vibrations
+     * yet.
+     * @return Combined sound and vibration URI.
+     */
+    Uri getSelectedRingtoneUri() {
+        // TODO: Combine sound and vibration URIs before returning.
+        return mSoundListHandler.getSelectedRingtoneUri();
+    }
+
+    int getRingtoneStreamType() {
+        requireInitCalled();
+        return mRingtoneManager.inferStreamType();
+    }
+
+    void onPause(boolean isChangingConfigurations) {
+        if (!isChangingConfigurations) {
+            stopAnyPlayingRingtone();
+        }
+    }
+
+    void onStop(boolean isChangingConfigurations) {
+        if (isChangingConfigurations) {
+            saveAnyPlayingRingtone();
+        } else {
+            stopAnyPlayingRingtone();
+        }
+    }
+
+    /**
+     * Plays a ringtone which is created using the currently selected sound and vibration URIs. If
+     * this is a sound or vibration only picker, then the other portion of the URI will be empty
+     * and should not affect the played ringtone.
+     *
+     * Currently, we only use the sound URI to create the ringtone, since we still don't have the
+     * API to retrieve the available vibrations list.
+     */
+    void playRingtone() {
+        requireInitCalled();
+        stopAnyPlayingRingtone();
+
+        mCurrentRingtone = mRingtoneFactory.create(getSelectedRingtoneUri(),
+                mPickerConfig.audioAttributesFlags);
+
+        if (mCurrentRingtone != null) {
+            mCurrentRingtone.play();
+        }
+    }
+
+    /**
+     * Cancels all pending async tasks.
+     */
+    void cancelPendingAsyncTasks() {
+        if (mAddCustomRingtoneFuture != null && !mAddCustomRingtoneFuture.isDone()) {
+            mAddCustomRingtoneFuture.cancel(/* mayInterruptIfRunning= */ true);
+        }
+    }
+
+    /**
+     * Adds an audio file to the list of ringtones asynchronously.
+     * Any previous async tasks are canceled before start the new one.
+     *
+     * @param uri      Uri of the file to be added as ringtone. Must be a media file.
+     * @param type     The type of the ringtone to be added.
+     * @param callback The callback to invoke when the task is completed.
+     * @param executor The executor to run the callback on when the task completes.
+     */
+    void addSoundRingtoneAsync(Uri uri, int type, FutureCallback<Uri> callback, Executor executor) {
+        // Cancel any currently running add ringtone tasks before starting a new one
+        cancelPendingAsyncTasks();
+        mAddCustomRingtoneFuture = mListeningExecutorService.submit(
+                () -> addRingtone(uri, type));
+        Futures.addCallback(mAddCustomRingtoneFuture, callback, executor);
+    }
+
+    /**
+     * Adds an audio file to the list of ringtones.
+     *
+     * @param uri  Uri of the file to be added as ringtone. Must be a media file.
+     * @param type The type of the ringtone to be added.
+     * @return The Uri of the installed ringtone, which may be the {@code uri} if it
+     * is already in ringtone storage. Or null if it failed to add the audio file.
+     */
+    @Nullable
+    private Uri addRingtone(Uri uri, int type) throws IOException {
+        requireInitCalled();
+        return mRingtoneManager.addCustomExternalRingtone(uri, type);
+    }
+
+    private void saveAnyPlayingRingtone() {
+        if (mCurrentRingtone != null && mCurrentRingtone.isPlaying()) {
+            sPlayingRingtone = mCurrentRingtone;
+        }
+        mCurrentRingtone = null;
+    }
+
+    private void stopAnyPlayingRingtone() {
+        if (sPlayingRingtone != null && sPlayingRingtone.isPlaying()) {
+            sPlayingRingtone.stop();
+        }
+        sPlayingRingtone = null;
+
+        if (mCurrentRingtone != null && mCurrentRingtone.isPlaying()) {
+            mCurrentRingtone.stop();
+        }
+        mCurrentRingtone = null;
+    }
+
+    private void requireInitCalled() {
+        requireNonNull(mRingtoneManager);
+        requireNonNull(mPickerConfig);
+    }
+}
diff --git a/packages/SoundPicker/src/com/android/soundpicker/SoundPickerFragment.java b/packages/SoundPicker/src/com/android/soundpicker/SoundPickerFragment.java
new file mode 100644
index 0000000..a37191f
--- /dev/null
+++ b/packages/SoundPicker/src/com/android/soundpicker/SoundPickerFragment.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Environment;
+import android.util.Log;
+import android.view.View;
+import android.widget.Toast;
+
+import androidx.activity.result.ActivityResult;
+import androidx.activity.result.ActivityResultCallback;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.core.content.ContextCompat;
+import androidx.lifecycle.ViewModelProvider;
+
+import com.google.common.util.concurrent.FutureCallback;
+
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * A fragment that displays a picker used to select sound or silent. It also includes the
+ * ability to add custom sounds.
+ */
+public class SoundPickerFragment extends BasePickerFragment {
+
+    private static final String TAG = "SoundPickerFragment";
+
+    private final FutureCallback<Uri> mAddCustomRingtoneCallback = new FutureCallback<>() {
+        @Override
+        public void onSuccess(Uri ringtoneUri) {
+            requeryForAdapter();
+        }
+
+        @Override
+        public void onFailure(Throwable throwable) {
+            Log.e(TAG, "Failed to add custom ringtone.", throwable);
+            // Ringtone was not added, display error Toast
+            Toast.makeText(requireActivity().getApplicationContext(),
+                    R.string.unable_to_add_ringtone, Toast.LENGTH_SHORT).show();
+        }
+    };
+
+    ActivityResultLauncher<Intent> mActivityResultLauncher = registerForActivityResult(
+            new ActivityResultContracts.StartActivityForResult(),
+            new ActivityResultCallback<ActivityResult>() {
+                @Override
+                public void onActivityResult(ActivityResult result) {
+                    if (result.getResultCode() == Activity.RESULT_OK) {
+                        // There are no request codes
+                        Intent data = result.getData();
+                        mRingtonePickerViewModel.addSoundRingtoneAsync(data.getData(),
+                                mPickerConfig.ringtoneType,
+                                mAddCustomRingtoneCallback,
+                                // Causes the callback to be executed on the main thread.
+                                ContextCompat.getMainExecutor(
+                                        requireActivity().getApplicationContext()));
+                    }
+                }
+            });
+
+    @Override
+    public void onViewCreated(@NotNull View view, Bundle savedInstanceState) {
+        mRingtonePickerViewModel = new ViewModelProvider(requireActivity()).get(
+                RingtonePickerViewModel.class);
+        super.onViewCreated(view, savedInstanceState);
+    }
+
+    @Override
+    protected RingtoneListHandler getRingtoneListHandler() {
+        return mRingtonePickerViewModel.getSoundListHandler();
+    }
+
+    @Override
+    protected void addRingtoneAsync() {
+        // The "Add new ringtone" item was clicked. Start a file picker intent to
+        // select only audio files (MIME type "audio/*")
+        final Intent chooseFile = getMediaFilePickerIntent();
+        mActivityResultLauncher.launch(chooseFile);
+    }
+
+    @Override
+    protected void addNewRingtoneItem() {
+        // If external storage is available, add a button to install sounds from storage.
+        if (resolvesMediaFilePicker()
+                && Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+            mRingtoneListViewAdapter.addTitleForAddRingtoneItem(
+                    RingtonePickerViewModel.getAddNewItemTextByType(mPickerConfig.ringtoneType));
+        }
+    }
+
+    private boolean resolvesMediaFilePicker() {
+        return getMediaFilePickerIntent().resolveActivity(requireActivity().getPackageManager())
+                != null;
+    }
+
+    private Intent getMediaFilePickerIntent() {
+        final Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
+        chooseFile.setType("audio/*");
+        chooseFile.putExtra(Intent.EXTRA_MIME_TYPES,
+                new String[]{"audio/*", "application/ogg"});
+        return chooseFile;
+    }
+}
diff --git a/packages/SoundPicker/src/com/android/soundpicker/TabbedDialogFragment.java b/packages/SoundPicker/src/com/android/soundpicker/TabbedDialogFragment.java
new file mode 100644
index 0000000..50ea9d7
--- /dev/null
+++ b/packages/SoundPicker/src/com/android/soundpicker/TabbedDialogFragment.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import static android.app.Activity.RESULT_CANCELED;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.media.RingtoneManager;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.viewpager2.widget.ViewPager2;
+
+import com.google.android.material.tabs.TabLayout;
+import com.google.android.material.tabs.TabLayoutMediator;
+
+import dagger.hilt.android.AndroidEntryPoint;
+
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * A dialog fragment with a sound and/or vibration tab based on the picker type.
+ * <ul>
+ * <li> Ringtone Pickers will display both sound and vibration tabs.
+ * <li> Sound Pickers will only display the sound tab.
+ * <li> Vibration Pickers will only display the vibration tab.
+ * </ul>
+ */
+@AndroidEntryPoint(DialogFragment.class)
+public class TabbedDialogFragment extends Hilt_TabbedDialogFragment {
+
+    static final String TAG = "TabbedDialogFragment";
+
+    private RingtonePickerViewModel mRingtonePickerViewModel;
+
+    private final ViewPager2.OnPageChangeCallback mOnPageChangeCallback =
+            new ViewPager2.OnPageChangeCallback() {
+                @Override
+                public void onPageScrollStateChanged(int state) {
+                    super.onPageScrollStateChanged(state);
+                    if (state == ViewPager2.SCROLL_STATE_IDLE) {
+                        mRingtonePickerViewModel.onStop(/* isChangingConfigurations= */ false);
+                    }
+                }
+            };
+
+    @Override
+    public void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mRingtonePickerViewModel = new ViewModelProvider(requireActivity()).get(
+                RingtonePickerViewModel.class);
+    }
+
+    @NonNull
+    @Override
+    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireActivity(),
+                android.R.style.ThemeOverlay_Material_Dialog)
+                .setTitle(mRingtonePickerViewModel.getPickerConfig().title);
+        // Do not show OK/Cancel buttons in the buttonless (watch-only) version.
+        if (mRingtonePickerViewModel.getPickerConfig().showOkCancelButtons) {
+            dialogBuilder
+                    .setPositiveButton(getString(com.android.internal.R.string.ok),
+                            (dialog, whichButton) -> {
+                                setSuccessResultWithSelectedRingtone();
+                                requireActivity().finish();
+                            })
+                    .setNegativeButton(getString(com.android.internal.R.string.cancel),
+                            (dialog, whichButton) -> {
+                                requireActivity().setResult(RESULT_CANCELED);
+                                requireActivity().finish();
+                            });
+        }
+
+        View view = buildTabbedView(requireActivity().getLayoutInflater());
+        dialogBuilder.setView(view);
+
+        return dialogBuilder.create();
+    }
+
+    @Override
+    public void onCancel(@NonNull @NotNull DialogInterface dialog) {
+        super.onCancel(dialog);
+        if (!requireActivity().isChangingConfigurations()) {
+            requireActivity().finish();
+        }
+    }
+
+    @Override
+    public void onDismiss(@NonNull @NotNull DialogInterface dialog) {
+        super.onDismiss(dialog);
+        if (!requireActivity().isChangingConfigurations()) {
+            requireActivity().finish();
+        }
+    }
+
+    private void setSuccessResultWithSelectedRingtone() {
+        requireActivity().setResult(Activity.RESULT_OK,
+                new Intent().putExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI,
+                        mRingtonePickerViewModel.getSelectedRingtoneUri()));
+    }
+
+    /**
+     * Inflates the tabbed layout view and adds the required fragments. If there's only one
+     * fragment to display, then the tab area is hidden.
+     * @param inflater The LayoutInflater that is used to inflate the tabbed view.
+     * @return The tabbed view.
+     */
+    private View buildTabbedView(@NonNull LayoutInflater inflater) {
+        View view = inflater.inflate(R.layout.fragment_tabbed_dialog, null, false);
+        TabLayout tabLayout = view.requireViewById(R.id.tabLayout);
+        ViewPager2 viewPager = view.requireViewById(R.id.masterViewPager);
+
+        ViewPagerAdapter adapter = new ViewPagerAdapter(requireActivity());
+        addFragments(adapter);
+
+        if (adapter.getItemCount() == 1) {
+            // Hide the tab area since there's only one fragment to display.
+            tabLayout.setVisibility(View.GONE);
+        }
+
+        viewPager.setAdapter(adapter);
+        viewPager.registerOnPageChangeCallback(mOnPageChangeCallback);
+        new TabLayoutMediator(tabLayout, viewPager,
+                (tab, position) -> tab.setText(adapter.getTitle(position))).attach();
+
+        return view;
+    }
+
+    /**
+     * Adds the appropriate fragments to the adapter based on the PickerType.
+     *
+     * @param adapter The adapter to add the fragments to.
+     */
+    private void addFragments(ViewPagerAdapter adapter) {
+        switch (mRingtonePickerViewModel.getPickerConfig().mPickerType) {
+            case RINGTONE_PICKER:
+                adapter.addFragment(getString(R.string.sound_page_title),
+                        new SoundPickerFragment());
+                adapter.addFragment(getString(R.string.vibration_page_title),
+                        new VibrationPickerFragment());
+                break;
+            case SOUND_PICKER:
+                adapter.addFragment(getString(R.string.sound_page_title),
+                        new SoundPickerFragment());
+                break;
+            case VIBRATION_PICKER:
+                adapter.addFragment(getString(R.string.vibration_page_title),
+                        new VibrationPickerFragment());
+                break;
+            default:
+                adapter.addFragment(getString(R.string.sound_page_title),
+                        new SoundPickerFragment());
+                break;
+        }
+    }
+}
diff --git a/packages/SoundPicker/src/com/android/soundpicker/VibrationPickerFragment.java b/packages/SoundPicker/src/com/android/soundpicker/VibrationPickerFragment.java
new file mode 100644
index 0000000..7412c19
--- /dev/null
+++ b/packages/SoundPicker/src/com/android/soundpicker/VibrationPickerFragment.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.lifecycle.ViewModelProvider;
+
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * A fragment that displays a picker used to select vibration or silent (no vibration).
+ */
+public class VibrationPickerFragment extends BasePickerFragment {
+
+    @Override
+    public void onViewCreated(@NotNull View view, Bundle savedInstanceState) {
+        mRingtonePickerViewModel = new ViewModelProvider(requireActivity()).get(
+                RingtonePickerViewModel.class);
+        super.onViewCreated(view, savedInstanceState);
+    }
+
+    @Override
+    protected RingtoneListHandler getRingtoneListHandler() {
+        return mRingtonePickerViewModel.getVibrationListHandler();
+    }
+
+    @Override
+    protected void addRingtoneAsync() {
+        // no-op
+    }
+
+    @Override
+    protected void addNewRingtoneItem() {
+        // no-op
+    }
+}
diff --git a/packages/SoundPicker/src/com/android/soundpicker/ViewPagerAdapter.java b/packages/SoundPicker/src/com/android/soundpicker/ViewPagerAdapter.java
new file mode 100644
index 0000000..179068e
--- /dev/null
+++ b/packages/SoundPicker/src/com/android/soundpicker/ViewPagerAdapter.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * An adapter used to populate pages inside a ViewPager.
+ */
+public class ViewPagerAdapter extends FragmentStateAdapter {
+
+    private final List<Fragment> mFragments = new ArrayList<>();
+    private final List<String> mTitles = new ArrayList<>();
+
+    public ViewPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
+        super(fragmentActivity);
+    }
+
+    /**
+     * Adds a fragment and page title to the adapter.
+     * @param title the title of the page in the ViewPager.
+     * @param fragment the fragment that will be inflated on this page.
+     */
+    public void addFragment(String title, Fragment fragment) {
+        mTitles.add(title);
+        mFragments.add(fragment);
+    }
+
+    /**
+     * Returns the title of the requested page.
+     * @param position the position of the page in the Viewpager.
+     * @return The title of the requested page.
+     */
+    public String getTitle(int position) {
+        return mTitles.get(position);
+    }
+
+    @NonNull
+    @Override
+    public Fragment createFragment(int position) {
+        return Objects.requireNonNull(mFragments.get(position),
+                "Could not find a fragment using position: " + position);
+    }
+
+    @Override
+    public int getItemCount() {
+        return mFragments.size();
+    }
+}
diff --git a/packages/SoundPicker/tests/Android.bp b/packages/SoundPicker/tests/Android.bp
new file mode 100644
index 0000000..c38426f
--- /dev/null
+++ b/packages/SoundPicker/tests/Android.bp
@@ -0,0 +1,38 @@
+// Copyright 2023, The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package {
+    default_applicable_licenses: ["frameworks_base_license"],
+}
+
+android_test {
+    name: "SoundPickerTests",
+    certificate: "platform",
+    libs: [
+        "android.test.runner",
+        "android.test.base",
+    ],
+    static_libs: [
+        "androidx.test.core",
+        "androidx.test.rules",
+        "androidx.test.ext.junit",
+        "androidx.test.ext.truth",
+        "mockito-target-minus-junit4",
+        "guava-android-testlib",
+        "SoundPickerLib",
+    ],
+    srcs: [
+        "src/**/*.java",
+    ],
+}
diff --git a/packages/SoundPicker/tests/AndroidManifest.xml b/packages/SoundPicker/tests/AndroidManifest.xml
new file mode 100644
index 0000000..295aeb1
--- /dev/null
+++ b/packages/SoundPicker/tests/AndroidManifest.xml
@@ -0,0 +1,11 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.android.soundpicker.tests">
+
+    <application android:debuggable="true">
+        <uses-library android:name="android.test.runner" />
+    </application>
+    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+        android:targetPackage="com.android.soundpicker.tests"
+        android:label="Sound picker tests">
+    </instrumentation>
+</manifest>
diff --git a/packages/SoundPicker/tests/src/com/android/soundpicker/RingtoneListHandlerTest.java b/packages/SoundPicker/tests/src/com/android/soundpicker/RingtoneListHandlerTest.java
new file mode 100644
index 0000000..80e71e200
--- /dev/null
+++ b/packages/SoundPicker/tests/src/com/android/soundpicker/RingtoneListHandlerTest.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.when;
+
+import android.database.Cursor;
+import android.media.RingtoneManager;
+import android.net.Uri;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class RingtoneListHandlerTest {
+
+    private static final Uri DEFAULT_URI = Uri.parse("media://custom/ringtone/default_uri");
+    private static final Uri RINGTONE_URI = Uri.parse("media://custom/ringtone/uri");
+    private static final int SILENT_RINGTONE_POSITION = 0;
+    private static final int DEFAULT_RINGTONE_POSITION = 1;
+    private static final int RINGTONE_POSITION = 2;
+
+    @Mock
+    private RingtoneManager mMockRingtoneManager;
+    @Mock
+    private Cursor mMockCursor;
+
+    private RingtoneListHandler mRingtoneListHandler;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        RingtoneListHandler.Config mRingtoneListConfig = createRingtoneListConfig();
+
+        mRingtoneListHandler = new RingtoneListHandler();
+
+        // Add silent and default options to the list.
+        mRingtoneListHandler.addSilentItem();
+        mRingtoneListHandler.addDefaultItem();
+
+        mRingtoneListHandler.init(mRingtoneListConfig, mMockRingtoneManager, mMockCursor);
+    }
+
+    @Test
+    public void testGetRingtoneCursor_returnsTheCorrectRingtoneCursor() {
+        assertThat(mRingtoneListHandler.getRingtoneCursor()).isEqualTo(mMockCursor);
+    }
+
+    @Test
+    public void testGetRingtoneUri_returnsTheCorrectRingtoneUri() {
+        Uri expectedUri = RINGTONE_URI;
+        when(mMockRingtoneManager.getRingtoneUri(eq(0))).thenReturn(expectedUri);
+
+        // Request 3rd item from list.
+        Uri actualUri = mRingtoneListHandler.getRingtoneUri(RINGTONE_POSITION);
+        assertThat(actualUri).isEqualTo(expectedUri);
+    }
+
+    @Test
+    public void testGetRingtoneUri_withSelectedItemUnknown_returnsTheCorrectRingtoneUri() {
+        Uri uri = mRingtoneListHandler.getRingtoneUri(RingtoneListHandler.ITEM_POSITION_UNKNOWN);
+        assertThat(uri).isEqualTo(RingtoneListHandler.SILENT_URI);
+    }
+
+    @Test
+    public void testGetRingtoneUri_withSelectedItemDefaultPosition_returnsTheCorrectRingtoneUri() {
+        Uri actualUri = mRingtoneListHandler.getRingtoneUri(DEFAULT_RINGTONE_POSITION);
+        assertThat(actualUri).isEqualTo(DEFAULT_URI);
+    }
+
+    @Test
+    public void testGetRingtoneUri_withSelectedItemSilentPosition_returnsTheCorrectRingtoneUri() {
+        Uri uri = mRingtoneListHandler.getRingtoneUri(SILENT_RINGTONE_POSITION);
+        assertThat(uri).isEqualTo(RingtoneListHandler.SILENT_URI);
+    }
+
+    @Test
+    public void testGetCurrentlySelectedRingtoneUri_returnsTheCorrectRingtoneUri() {
+        mRingtoneListHandler.setSelectedItemPosition(RingtoneListHandler.ITEM_POSITION_UNKNOWN);
+        Uri actualUri = mRingtoneListHandler.getSelectedRingtoneUri();
+        assertThat(actualUri).isEqualTo(RingtoneListHandler.SILENT_URI);
+
+        mRingtoneListHandler.setSelectedItemPosition(DEFAULT_RINGTONE_POSITION);
+        actualUri = mRingtoneListHandler.getSelectedRingtoneUri();
+        assertThat(actualUri).isEqualTo(DEFAULT_URI);
+
+        mRingtoneListHandler.setSelectedItemPosition(SILENT_RINGTONE_POSITION);
+        actualUri = mRingtoneListHandler.getSelectedRingtoneUri();
+        assertThat(actualUri).isEqualTo(RingtoneListHandler.SILENT_URI);
+
+        when(mMockRingtoneManager.getRingtoneUri(eq(0))).thenReturn(RINGTONE_URI);
+        mRingtoneListHandler.setSelectedItemPosition(RINGTONE_POSITION);
+        actualUri = mRingtoneListHandler.getSelectedRingtoneUri();
+        assertThat(actualUri).isEqualTo(RINGTONE_URI);
+    }
+
+    @Test
+    public void testGetRingtonePosition_returnsTheCorrectRingtonePosition() {
+        when(mMockRingtoneManager.getRingtonePosition(RINGTONE_URI)).thenReturn(0);
+
+        int actualPosition = mRingtoneListHandler.getRingtonePosition(RINGTONE_URI);
+
+        assertThat(actualPosition).isEqualTo(RINGTONE_POSITION);
+
+    }
+
+    @Test
+    public void testFixedItems_onlyAddsItemsOnceAndInOrder() {
+        // Clear fixed items before testing the add methods.
+        mRingtoneListHandler.resetFixedItems();
+
+        assertThat(mRingtoneListHandler.getSilentItemPosition()).isEqualTo(
+                RingtoneListHandler.ITEM_POSITION_UNKNOWN);
+        assertThat(mRingtoneListHandler.getDefaultItemPosition()).isEqualTo(
+                RingtoneListHandler.ITEM_POSITION_UNKNOWN);
+
+        mRingtoneListHandler.addSilentItem();
+        mRingtoneListHandler.addDefaultItem();
+        mRingtoneListHandler.addSilentItem();
+        mRingtoneListHandler.addDefaultItem();
+
+        assertThat(mRingtoneListHandler.getSilentItemPosition()).isEqualTo(
+                SILENT_RINGTONE_POSITION);
+        assertThat(mRingtoneListHandler.getDefaultItemPosition()).isEqualTo(
+                DEFAULT_RINGTONE_POSITION);
+    }
+
+    @Test
+    public void testResetFixedItems_resetsSilentAndDefaultItemPositions() {
+        assertThat(mRingtoneListHandler.getSilentItemPosition()).isEqualTo(
+                SILENT_RINGTONE_POSITION);
+        assertThat(mRingtoneListHandler.getDefaultItemPosition()).isEqualTo(
+                DEFAULT_RINGTONE_POSITION);
+
+        mRingtoneListHandler.resetFixedItems();
+
+        assertThat(mRingtoneListHandler.getSilentItemPosition()).isEqualTo(
+                RingtoneListHandler.ITEM_POSITION_UNKNOWN);
+        assertThat(mRingtoneListHandler.getDefaultItemPosition()).isEqualTo(
+                RingtoneListHandler.ITEM_POSITION_UNKNOWN);
+    }
+
+    private RingtoneListHandler.Config createRingtoneListConfig() {
+        return new RingtoneListHandler.Config(/* hasDefaultItem= */ true,
+                /* uriForDefaultItem= */ DEFAULT_URI, /* hasSilentItem= */ true,
+                /* existingUri= */ DEFAULT_URI);
+    }
+}
diff --git a/packages/SoundPicker/tests/src/com/android/soundpicker/RingtonePickerViewModelTest.java b/packages/SoundPicker/tests/src/com/android/soundpicker/RingtonePickerViewModelTest.java
new file mode 100644
index 0000000..cde6c76
--- /dev/null
+++ b/packages/SoundPicker/tests/src/com/android/soundpicker/RingtonePickerViewModelTest.java
@@ -0,0 +1,534 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.soundpicker;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertNull;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import android.database.Cursor;
+import android.media.AudioAttributes;
+import android.media.AudioManager;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.provider.Settings;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.testing.TestingExecutors;
+
+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.io.IOException;
+import java.util.concurrent.ExecutorService;
+
+@RunWith(AndroidJUnit4.class)
+public class RingtonePickerViewModelTest {
+
+    private static final Uri DEFAULT_URI = Uri.parse("media://custom/ringtone/default_uri");
+    private static final Uri RINGTONE_URI = Uri.parse("media://custom/ringtone/uri");
+    private static final int RINGTONE_TYPE_UNKNOWN = -1;
+    private static final int DEFAULT_RINGTONE_POSITION = 1;
+
+    @Mock
+    private RingtoneManagerFactory mMockRingtoneManagerFactory;
+    @Mock
+    private RingtoneFactory mMockRingtoneFactory;
+    @Mock
+    private RingtoneManager mMockRingtoneManager;
+    @Mock
+    private ListeningExecutorServiceFactory mMockListeningExecutorServiceFactory;
+    @Mock
+    private Cursor mMockCursor;
+
+    private RingtoneListHandler mSoundListHandler;
+    private RingtoneListHandler mVibrationListHandler;
+    private ExecutorService mMainThreadExecutor;
+    private ListeningExecutorService mBackgroundThreadExecutor;
+    private Ringtone mMockDefaultRingtone;
+    private Ringtone mMockRingtone;
+    private RingtonePickerViewModel mViewModel;
+    private RingtoneListHandler.Config mSoundListConfig;
+    private RingtoneListHandler.Config mVibrationListConfig;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mSoundListHandler = new RingtoneListHandler();
+        mVibrationListHandler = new RingtoneListHandler();
+        mSoundListConfig = createRingtoneListConfig();
+        mVibrationListConfig = createRingtoneListConfig();
+        mMockDefaultRingtone = createMockRingtone();
+        mMockRingtone = createMockRingtone();
+        when(mMockRingtoneManagerFactory.create()).thenReturn(mMockRingtoneManager);
+        when(mMockRingtoneFactory.create(DEFAULT_URI,
+                AudioAttributes.FLAG_AUDIBILITY_ENFORCED)).thenReturn(mMockDefaultRingtone);
+        when(mMockRingtoneManager.getRingtoneUri(anyInt())).thenReturn(RINGTONE_URI);
+        when(mMockRingtoneManager.getCursor()).thenReturn(mMockCursor);
+        mMainThreadExecutor = TestingExecutors.sameThreadScheduledExecutor();
+        mBackgroundThreadExecutor = TestingExecutors.sameThreadScheduledExecutor();
+        when(mMockListeningExecutorServiceFactory.createSingleThreadExecutor()).thenReturn(
+                mBackgroundThreadExecutor);
+
+        mViewModel = new RingtonePickerViewModel(mMockRingtoneManagerFactory, mMockRingtoneFactory,
+                mMockListeningExecutorServiceFactory, mSoundListHandler,
+                mVibrationListHandler);
+
+        // Add silent and default options to the sound list.
+        mSoundListHandler.addSilentItem();
+        mSoundListHandler.addDefaultItem();
+
+        // Add silent and default options to the vibration list.
+        mVibrationListHandler.addSilentItem();
+        mVibrationListHandler.addDefaultItem();
+
+        mSoundListHandler.setSelectedItemPosition(DEFAULT_RINGTONE_POSITION);
+        mVibrationListHandler.setSelectedItemPosition(DEFAULT_RINGTONE_POSITION);
+    }
+
+    @After
+    public void teardown() {
+        if (mMainThreadExecutor != null && !mMainThreadExecutor.isShutdown()) {
+            mMainThreadExecutor.shutdown();
+        }
+        if (mBackgroundThreadExecutor != null && !mBackgroundThreadExecutor.isShutdown()) {
+            mBackgroundThreadExecutor.shutdown();
+        }
+    }
+
+    @Test
+    public void testInitRingtoneManager_whenTypeIsUnknown_createManagerButDoNotSetType() {
+        mViewModel.init(createPickerConfig(RINGTONE_TYPE_UNKNOWN), mSoundListConfig,
+                mVibrationListConfig);
+
+        verify(mMockRingtoneManagerFactory).create();
+        verify(mMockRingtoneManager, never()).setType(anyInt());
+        assertNotNull(mViewModel.getSoundListHandler().getRingtoneListConfig());
+        assertNotNull(mViewModel.getVibrationListHandler().getRingtoneListConfig());
+    }
+
+    @Test
+    public void testInitRingtoneManager_whenTypeIsNotUnknown_createManagerAndSetType() {
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_NOTIFICATION), mSoundListConfig,
+                mVibrationListConfig);
+
+        verify(mMockRingtoneManagerFactory).create();
+        verify(mMockRingtoneManager).setType(RingtoneManager.TYPE_NOTIFICATION);
+        assertNotNull(mViewModel.getSoundListHandler().getRingtoneListConfig());
+        assertNotNull(mViewModel.getVibrationListHandler().getRingtoneListConfig());
+    }
+
+    @Test
+    public void testInitRingtoneManager_bothListConfigsAreNull_onlyRecreateRingtoneManager() {
+        mViewModel.init(
+                createPickerConfig(RingtoneManager.TYPE_NOTIFICATION),
+                /* soundListConfig= */ null, /* vibrationListConfig= */ null);
+
+        verify(mMockRingtoneManagerFactory).create();
+        verify(mMockRingtoneManager).setType(RingtoneManager.TYPE_NOTIFICATION);
+        assertNull(mViewModel.getSoundListHandler().getRingtoneListConfig());
+        assertNull(mViewModel.getVibrationListHandler().getRingtoneListConfig());
+    }
+
+    @Test
+    public void testReinitialize_bothListConfigsInitialized_recreateManagerAndReinitHandlers() {
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_NOTIFICATION), mSoundListConfig,
+                mVibrationListConfig);
+        mViewModel.reinit();
+
+        verify(mMockRingtoneManagerFactory, times(2)).create();
+        verify(mMockRingtoneManager, times(2)).setType(RingtoneManager.TYPE_NOTIFICATION);
+        assertNotNull(mViewModel.getSoundListHandler().getRingtoneListConfig());
+        assertNotNull(mViewModel.getVibrationListHandler().getRingtoneListConfig());
+    }
+
+    @Test
+    public void testReinitialize_bothListConfigsAlreadyNull_onlyRecreateRingtoneManager() {
+        mViewModel.init(
+                createPickerConfig(RingtoneManager.TYPE_NOTIFICATION),
+                /* soundListConfig= */ null, /* vibrationListConfig= */ null);
+        mViewModel.reinit();
+
+        verify(mMockRingtoneManagerFactory, times(2)).create();
+        verify(mMockRingtoneManager, times(2)).setType(RingtoneManager.TYPE_NOTIFICATION);
+        assertNull(mViewModel.getSoundListHandler().getRingtoneListConfig());
+        assertNull(mViewModel.getVibrationListHandler().getRingtoneListConfig());
+    }
+
+    @Test
+    public void testGetStreamType_returnsTheCorrectStreamType() {
+        when(mMockRingtoneManager.inferStreamType()).thenReturn(AudioManager.STREAM_ALARM);
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_RINGTONE), mSoundListConfig,
+                mVibrationListConfig);
+        assertEquals(mViewModel.getRingtoneStreamType(), AudioManager.STREAM_ALARM);
+    }
+
+    @Test
+    public void testOnPause_withChangingConfigurationTrue_doNotStopPlayingRingtone() {
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_RINGTONE), mSoundListConfig,
+                mVibrationListConfig);
+        mViewModel.playRingtone();
+        verifyRingtonePlayCalledAndMockPlayingState(mMockDefaultRingtone);
+        mViewModel.onPause(/* isChangingConfigurations= */ true);
+        verify(mMockDefaultRingtone, never()).stop();
+    }
+
+    @Test
+    public void testOnPause_withChangingConfigurationFalse_stopPlayingRingtone() {
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_RINGTONE), mSoundListConfig,
+                mVibrationListConfig);
+        mViewModel.playRingtone();
+        verifyRingtonePlayCalledAndMockPlayingState(mMockDefaultRingtone);
+        mViewModel.onPause(/* isChangingConfigurations= */ false);
+        verify(mMockDefaultRingtone).stop();
+    }
+
+    @Test
+    public void testOnViewModelRecreated_previousRingtoneCanStillBeStopped() {
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_RINGTONE), mSoundListConfig,
+                mVibrationListConfig);
+        Ringtone mockRingtone1 = createMockRingtone();
+        Ringtone mockRingtone2 = createMockRingtone();
+
+        when(mMockRingtoneFactory.create(any(), anyInt())).thenReturn(mockRingtone1, mockRingtone2);
+        mViewModel.playRingtone();
+        verifyRingtonePlayCalledAndMockPlayingState(mockRingtone1);
+        // Fake a scenario where the activity is destroyed and recreated due to a config change.
+        // This will result in a new view model getting created.
+        mViewModel.onStop(/* isChangingConfigurations= */ true);
+        verify(mockRingtone1, never()).stop();
+        mViewModel = new RingtonePickerViewModel(mMockRingtoneManagerFactory, mMockRingtoneFactory,
+                mMockListeningExecutorServiceFactory, mSoundListHandler,
+                mVibrationListHandler);
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_RINGTONE), mSoundListConfig,
+                mVibrationListConfig);
+        mViewModel.playRingtone();
+        verifyRingtonePlayCalledAndMockPlayingState(mockRingtone2);
+        verify(mockRingtone1).stop();
+        verify(mockRingtone2, never()).stop();
+    }
+
+    @Test
+    public void testOnStop_withChangingConfigurationTrueAndDefaultRingtonePlaying_saveRingtone() {
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_RINGTONE), mSoundListConfig,
+                mVibrationListConfig);
+        mViewModel.playRingtone();
+        verifyRingtonePlayCalledAndMockPlayingState(mMockDefaultRingtone);
+        mViewModel.onStop(/* isChangingConfigurations= */ true);
+        assertEquals(RingtonePickerViewModel.sPlayingRingtone, mMockDefaultRingtone);
+    }
+
+    @Test
+    public void testOnStop_withChangingConfigurationTrueAndCurrentRingtonePlaying_saveRingtone() {
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_RINGTONE), mSoundListConfig,
+                mVibrationListConfig);
+        mViewModel.playRingtone();
+        verifyRingtonePlayCalledAndMockPlayingState(mMockDefaultRingtone);
+        mViewModel.onStop(/* isChangingConfigurations= */ true);
+        assertEquals(RingtonePickerViewModel.sPlayingRingtone, mMockDefaultRingtone);
+    }
+
+    @Test
+    public void testOnStop_withChangingConfigurationTrueAndNoPlayingRingtone_saveNothing() {
+        mViewModel.onStop(/* isChangingConfigurations= */ true);
+        assertNull(RingtonePickerViewModel.sPlayingRingtone);
+    }
+
+    @Test
+    public void testOnStop_withChangingConfigurationFalse_stopPlayingRingtone() {
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_RINGTONE), mSoundListConfig,
+                mVibrationListConfig);
+
+        mViewModel.playRingtone();
+        verifyRingtonePlayCalledAndMockPlayingState(mMockDefaultRingtone);
+        mViewModel.onStop(/* isChangingConfigurations= */ false);
+        verify(mMockDefaultRingtone).stop();
+    }
+
+    @Test
+    public void testGetCurrentlySelectedRingtoneUri_returnsTheCorrectRingtoneUri() {
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_RINGTONE), mSoundListConfig,
+                mVibrationListConfig);
+
+        assertEquals(DEFAULT_URI, mViewModel.getSelectedRingtoneUri());
+    }
+
+    @Test
+    public void testPlayRingtone_playTheCorrectRingtone() {
+        mSoundListHandler.setSelectedItemPosition(DEFAULT_RINGTONE_POSITION);
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_RINGTONE), mSoundListConfig,
+                mVibrationListConfig);
+
+        mViewModel.playRingtone();
+        verifyRingtonePlayCalledAndMockPlayingState(mMockDefaultRingtone);
+    }
+
+    @Test
+    public void testPlayRingtone_stopsPreviouslyRunningRingtone() {
+        // Start playing the first ringtone
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_RINGTONE), mSoundListConfig,
+                mVibrationListConfig);
+        mViewModel.playRingtone();
+        verifyRingtonePlayCalledAndMockPlayingState(mMockDefaultRingtone);
+        // Start playing the second ringtone
+        when(mMockRingtoneFactory.create(DEFAULT_URI,
+                AudioAttributes.FLAG_AUDIBILITY_ENFORCED)).thenReturn(mMockRingtone);
+        mViewModel.playRingtone();
+        verifyRingtonePlayCalledAndMockPlayingState(mMockRingtone);
+
+        verify(mMockDefaultRingtone).stop();
+    }
+
+    @Test
+    public void testDefaultItemUri_withNotificationIntent_returnDefaultNotificationUri() {
+        Uri uri = RingtonePickerViewModel.getDefaultItemUriByType(
+                RingtoneManager.TYPE_NOTIFICATION);
+        assertEquals(Settings.System.DEFAULT_NOTIFICATION_URI, uri);
+    }
+
+    @Test
+    public void testDefaultItemUri_withAlarmIntent_returnDefaultAlarmUri() {
+        Uri uri = RingtonePickerViewModel.getDefaultItemUriByType(RingtoneManager.TYPE_ALARM);
+        assertEquals(Settings.System.DEFAULT_ALARM_ALERT_URI, uri);
+    }
+
+    @Test
+    public void testDefaultItemUri_withRingtoneIntent_returnDefaultRingtoneUri() {
+        Uri uri = RingtonePickerViewModel.getDefaultItemUriByType(RingtoneManager.TYPE_RINGTONE);
+        assertEquals(Settings.System.DEFAULT_RINGTONE_URI, uri);
+    }
+
+    @Test
+    public void testDefaultItemUri_withInvalidRingtoneType_returnDefaultRingtoneUri() {
+        Uri uri = RingtonePickerViewModel.getDefaultItemUriByType(-1);
+        assertEquals(Settings.System.DEFAULT_RINGTONE_URI, uri);
+    }
+
+    @Test
+    public void testTitle_withNotificationRingtoneType_returnRingtoneNotificationTitle() {
+        int title = RingtonePickerViewModel.getTitleByType(RingtoneManager.TYPE_NOTIFICATION);
+        assertEquals(com.android.internal.R.string.ringtone_picker_title_notification, title);
+    }
+
+    @Test
+    public void testTitle_withAlarmRingtoneType_returnRingtoneAlarmTitle() {
+        int title = RingtonePickerViewModel.getTitleByType(RingtoneManager.TYPE_ALARM);
+        assertEquals(com.android.internal.R.string.ringtone_picker_title_alarm, title);
+    }
+
+    @Test
+    public void testTitle_withInvalidRingtoneType_returnDefaultRingtoneTitle() {
+        int title = RingtonePickerViewModel.getTitleByType(/*ringtoneType= */ -1);
+        assertEquals(com.android.internal.R.string.ringtone_picker_title, title);
+    }
+
+    @Test
+    public void testAddNewItemText_withAlarmType_returnAlarmAddItemText() {
+        int addNewItemTextResId = RingtonePickerViewModel.getAddNewItemTextByType(
+                RingtoneManager.TYPE_ALARM);
+        assertEquals(R.string.add_alarm_text, addNewItemTextResId);
+    }
+
+    @Test
+    public void testAddNewItemText_withNotificationType_returnNotificationAddItemText() {
+        int addNewItemTextResId = RingtonePickerViewModel.getAddNewItemTextByType(
+                RingtoneManager.TYPE_NOTIFICATION);
+        assertEquals(R.string.add_notification_text, addNewItemTextResId);
+    }
+
+    @Test
+    public void testAddNewItemText_withRingtoneType_returnRingtoneAddItemText() {
+        int addNewItemTextResId = RingtonePickerViewModel.getAddNewItemTextByType(
+                RingtoneManager.TYPE_RINGTONE);
+        assertEquals(R.string.add_ringtone_text, addNewItemTextResId);
+    }
+
+    @Test
+    public void testAddNewItemText_withInvalidType_returnRingtoneAddItemText() {
+        int addNewItemTextResId = RingtonePickerViewModel.getAddNewItemTextByType(-1);
+        assertEquals(R.string.add_ringtone_text, addNewItemTextResId);
+    }
+
+    @Test
+    public void testDefaultItemText_withNotificationType_returnNotificationDefaultItemText() {
+        int defaultRingtoneItemText = RingtonePickerViewModel.getDefaultRingtoneItemTextByType(
+                RingtoneManager.TYPE_NOTIFICATION);
+        assertEquals(R.string.notification_sound_default, defaultRingtoneItemText);
+    }
+
+    @Test
+    public void testDefaultItemText_withAlarmType_returnAlarmDefaultItemText() {
+        int defaultRingtoneItemText = RingtonePickerViewModel.getDefaultRingtoneItemTextByType(
+                RingtoneManager.TYPE_NOTIFICATION);
+        assertEquals(R.string.notification_sound_default, defaultRingtoneItemText);
+    }
+
+    @Test
+    public void testDefaultItemText_withRingtoneType_returnRingtoneDefaultItemText() {
+        int defaultRingtoneItemText = RingtonePickerViewModel.getDefaultRingtoneItemTextByType(
+                RingtoneManager.TYPE_RINGTONE);
+        assertEquals(R.string.ringtone_default, defaultRingtoneItemText);
+    }
+
+    @Test
+    public void testDefaultItemText_withInvalidType_returnRingtoneDefaultItemText() {
+        int defaultRingtoneItemText = RingtonePickerViewModel.getDefaultRingtoneItemTextByType(-1);
+        assertEquals(R.string.ringtone_default, defaultRingtoneItemText);
+    }
+
+    @Test
+    public void testCancelPendingAsyncTasks_correctlyCancelsPendingTasks()
+            throws IOException {
+        FutureCallback<Uri> mockCallback = mock(FutureCallback.class);
+
+        when(mMockListeningExecutorServiceFactory.createSingleThreadExecutor()).thenReturn(
+                TestingExecutors.noOpScheduledExecutor());
+
+        mViewModel = new RingtonePickerViewModel(mMockRingtoneManagerFactory, mMockRingtoneFactory,
+                mMockListeningExecutorServiceFactory, mSoundListHandler,
+                mVibrationListHandler);
+        mViewModel.addSoundRingtoneAsync(DEFAULT_URI, RingtoneManager.TYPE_NOTIFICATION,
+                mockCallback, mMainThreadExecutor);
+        verify(mockCallback, never()).onFailure(any());
+        // Calling cancelPendingAsyncTasks should cancel the pending task. Cancelling an async
+        // task invokes the onFailure method in the callable.
+        mViewModel.cancelPendingAsyncTasks();
+        verify(mockCallback).onFailure(any());
+        verify(mockCallback, never()).onSuccess(any());
+
+    }
+
+    @Test
+    public void testAddRingtoneAsync_cancelPreviousTaskBeforeStartingNewOne()
+            throws IOException {
+        FutureCallback<Uri> mockCallback1 = mock(FutureCallback.class);
+        FutureCallback<Uri> mockCallback2 = mock(FutureCallback.class);
+
+        when(mMockListeningExecutorServiceFactory.createSingleThreadExecutor()).thenReturn(
+                TestingExecutors.noOpScheduledExecutor());
+
+        mViewModel = new RingtonePickerViewModel(mMockRingtoneManagerFactory, mMockRingtoneFactory,
+                mMockListeningExecutorServiceFactory, mSoundListHandler,
+                mVibrationListHandler);
+        mViewModel.addSoundRingtoneAsync(DEFAULT_URI, RingtoneManager.TYPE_NOTIFICATION,
+                mockCallback1, mMainThreadExecutor);
+        verify(mockCallback1, never()).onFailure(any());
+        // We call addRingtoneAsync again to cancel the previous task and start a new one.
+        // Cancelling an async task invokes the onFailure method in the callable.
+        mViewModel.addSoundRingtoneAsync(DEFAULT_URI, RingtoneManager.TYPE_NOTIFICATION,
+                mockCallback2, mMainThreadExecutor);
+        verify(mockCallback1).onFailure(any());
+        verify(mockCallback1, never()).onSuccess(any());
+        verifyNoMoreInteractions(mockCallback2);
+    }
+
+    @Test
+    public void testAddRingtoneAsync_whenAddRingtoneIsSuccessful_successCallbackIsInvoked()
+            throws IOException {
+        Uri expectedUri = DEFAULT_URI;
+        FutureCallback<Uri> mockCallback = mock(FutureCallback.class);
+
+        when(mMockRingtoneManager.addCustomExternalRingtone(DEFAULT_URI,
+                RingtoneManager.TYPE_NOTIFICATION)).thenReturn(expectedUri);
+
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_RINGTONE), mSoundListConfig,
+                mVibrationListConfig);
+
+        mViewModel.addSoundRingtoneAsync(DEFAULT_URI, RingtoneManager.TYPE_NOTIFICATION,
+                mockCallback, mMainThreadExecutor);
+
+        verify(mockCallback).onSuccess(expectedUri);
+        verify(mockCallback, never()).onFailure(any());
+    }
+
+    @Test
+    public void testAddRingtoneAsync_whenAddRingtoneFailed_failureCallbackIsInvoked()
+            throws IOException {
+        FutureCallback<Uri> mockCallback = mock(FutureCallback.class);
+
+        when(mMockRingtoneManager.addCustomExternalRingtone(any(), anyInt())).thenThrow(
+                IOException.class);
+
+        mViewModel.init(createPickerConfig(RingtoneManager.TYPE_RINGTONE), mSoundListConfig,
+                mVibrationListConfig);
+
+        mViewModel.addSoundRingtoneAsync(DEFAULT_URI, RingtoneManager.TYPE_NOTIFICATION,
+                mockCallback, mMainThreadExecutor);
+
+        verify(mockCallback).onFailure(any(IOException.class));
+        verify(mockCallback, never()).onSuccess(any());
+    }
+
+    private Ringtone createMockRingtone() {
+        Ringtone mockRingtone = mock(Ringtone.class);
+        when(mockRingtone.getAudioAttributes()).thenReturn(
+                audioAttributes(AudioAttributes.USAGE_NOTIFICATION_RINGTONE, 0));
+
+        return mockRingtone;
+    }
+
+    private void verifyRingtonePlayCalledAndMockPlayingState(Ringtone ringtone) {
+        verify(ringtone).play();
+        when(ringtone.isPlaying()).thenReturn(true);
+    }
+
+    private static AudioAttributes audioAttributes(int audioUsage, int flags) {
+        return new AudioAttributes.Builder()
+                .setUsage(audioUsage)
+                .setFlags(flags)
+                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+                .build();
+    }
+
+    private RingtonePickerViewModel.Config createPickerConfig(int ringtoneType,
+            int audioAttributes) {
+        return new RingtonePickerViewModel.Config("Phone ringtone", /* userId= */ 1,
+                ringtoneType, /* showOkCancelButtons= */ true,
+                audioAttributes, RingtonePickerViewModel.PickerType.RINGTONE_PICKER);
+    }
+
+    private RingtonePickerViewModel.Config createPickerConfig(int ringtoneType) {
+        return new RingtonePickerViewModel.Config("Phone ringtone", /* userId= */ 1,
+                ringtoneType, /* showOkCancelButtons= */ true,
+                AudioAttributes.FLAG_AUDIBILITY_ENFORCED,
+                RingtonePickerViewModel.PickerType.RINGTONE_PICKER);
+    }
+
+    private RingtoneListHandler.Config createRingtoneListConfig() {
+        return new RingtoneListHandler.Config(/* hasDefaultItem= */ true,
+                /* uriForDefaultItem= */ DEFAULT_URI, /* hasSilentItem= */ true,
+                /* existingUri= */ Uri.parse(""));
+    }
+}
diff --git a/packages/StatementService/res/values-en-rCA/strings.xml b/packages/StatementService/res/values-en-rCA/strings.xml
deleted file mode 100644
index deb3d4c..0000000
--- a/packages/StatementService/res/values-en-rCA/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="service_name" msgid="5049486369463670924">"Intent Filter Verification Service"</string>
-</resources>
diff --git a/packages/StatementService/res/values-en-rXC/strings.xml b/packages/StatementService/res/values-en-rXC/strings.xml
deleted file mode 100644
index 146db34..0000000
--- a/packages/StatementService/res/values-en-rXC/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="service_name" msgid="5049486369463670924">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‏‎‎‎‏‏‎‎‎‏‎‎‎‏‏‎‎‎Intent Filter Verification Service‎‏‎‎‏‎"</string>
-</resources>
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index ecb8b52..29999c2 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -132,6 +132,17 @@
     manifest: "AndroidManifest-res.xml",
 }
 
+aconfig_declarations {
+    name: "systemui_aconfig_flags",
+    package: "com.android.systemui.aconfig",
+    srcs: ["src/com/android/systemui/aconfig/systemui.aconfig"],
+}
+
+java_aconfig_library {
+    name: "systemui_aconfig_flags_lib",
+    aconfig_declarations: "systemui_aconfig_flags",
+}
+
 android_library {
     name: "SystemUI-core",
     defaults: [
@@ -166,6 +177,7 @@
         "SystemUISharedLib",
         "SystemUI-statsd",
         "SettingsLib",
+        "systemui_aconfig_flags_lib",
         "androidx.core_core-ktx",
         "androidx.viewpager2_viewpager2",
         "androidx.legacy_legacy-support-v4",
@@ -343,6 +355,7 @@
         "SystemUICustomizationLib",
         "SystemUI-statsd",
         "SettingsLib",
+        "systemui_aconfig_flags_lib",
         "androidx.viewpager2_viewpager2",
         "androidx.legacy_legacy-support-v4",
         "androidx.recyclerview_recyclerview",
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 4fd4723..6778d5a 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -549,26 +549,6 @@
         </activity>
 
         <!-- started from UsbDeviceSettingsManager -->
-        <activity android:name=".usb.tv.TvUsbConfirmActivity"
-                  android:exported="true"
-                  android:launchMode="singleTop"
-                  android:permission="android.permission.MANAGE_USB"
-                  android:theme="@style/BottomSheet"
-                  android:finishOnCloseSystemDialogs="true"
-                  android:excludeFromRecents="true">
-        </activity>
-
-        <!-- started from UsbDeviceSettingsManager -->
-        <activity android:name=".usb.tv.TvUsbPermissionActivity"
-                  android:exported="true"
-                  android:launchMode="singleTop"
-                  android:permission="android.permission.MANAGE_USB"
-                  android:theme="@style/BottomSheet"
-                  android:finishOnCloseSystemDialogs="true"
-                  android:excludeFromRecents="true">
-        </activity>
-
-        <!-- started from UsbDeviceSettingsManager -->
         <activity android:name=".usb.UsbResolverActivity"
             android:exported="true"
             android:permission="android.permission.MANAGE_USB"
@@ -577,47 +557,16 @@
             android:excludeFromRecents="true">
         </activity>
 
-        <!-- started from HdmiCecLocalDevicePlayback -->
-        <activity android:name=".hdmi.HdmiCecSetMenuLanguageActivity"
-                  android:exported="true"
-                  android:launchMode="singleTop"
-                  android:permission="android.permission.CHANGE_CONFIGURATION"
-                  android:theme="@style/BottomSheet"
-                  android:finishOnCloseSystemDialogs="true"
-                  android:excludeFromRecents="true">
-        </activity>
-
         <!-- started from SensoryPrivacyService -->
         <activity android:name=".sensorprivacy.SensorUseStartedActivity"
                   android:exported="true"
                   android:launchMode="singleTop"
                   android:permission="android.permission.MANAGE_SENSOR_PRIVACY"
-                  android:theme="@style/Theme.SystemUI.Dialog.Alert"
+                  android:theme="@style/Theme.SystemUI.Dialog.Alert.SensorPrivacy"
                   android:finishOnCloseSystemDialogs="true"
                   android:showForAllUsers="true">
         </activity>
 
-        <!-- started from SensoryPrivacyService -->
-        <activity android:name=".sensorprivacy.television.TvUnblockSensorActivity"
-                  android:exported="true"
-                  android:launchMode="singleTop"
-                  android:permission="android.permission.MANAGE_SENSOR_PRIVACY"
-                  android:theme="@style/BottomSheet"
-                  android:finishOnCloseSystemDialogs="true"
-                  android:showForAllUsers="true">
-        </activity>
-
-        <!-- started from SensoryPrivacyService -->
-        <activity android:name=".sensorprivacy.television.TvSensorPrivacyChangedActivity"
-            android:exported="true"
-            android:launchMode="singleTop"
-            android:permission="android.permission.MANAGE_SENSOR_PRIVACY"
-            android:theme="@style/BottomSheet"
-            android:finishOnCloseSystemDialogs="true"
-            android:showForAllUsers="true">
-        </activity>
-
-
         <!-- started from UsbDeviceSettingsManager -->
         <activity android:name=".usb.UsbAccessoryUriActivity"
             android:exported="true"
@@ -703,14 +652,6 @@
             android:exported="false"
             android:permission="android.permission.MANAGE_MEDIA_PROJECTION"/>
 
-        <!-- started from TvNotificationPanel -->
-        <activity
-            android:name=".statusbar.tv.notifications.TvNotificationPanelActivity"
-            android:excludeFromRecents="true"
-            android:launchMode="singleTask"
-            android:noHistory="true"
-            android:theme="@style/TvSidePanelTheme" />
-
         <!-- started from SliceProvider -->
         <activity android:name=".SlicePermissionActivity"
             android:theme="@style/Theme.SystemUI.Dialog.Alert"
diff --git a/packages/SystemUI/OWNERS b/packages/SystemUI/OWNERS
index a218035..0f1f168 100644
--- a/packages/SystemUI/OWNERS
+++ b/packages/SystemUI/OWNERS
@@ -76,7 +76,6 @@
 pixel@google.com
 pomini@google.com
 rahulbanerjee@google.com
-rasheedlewis@google.com
 roosa@google.com
 saff@google.com
 santie@google.com
diff --git a/packages/SystemUI/TEST_MAPPING b/packages/SystemUI/TEST_MAPPING
index 3af7a45..969c148 100644
--- a/packages/SystemUI/TEST_MAPPING
+++ b/packages/SystemUI/TEST_MAPPING
@@ -56,6 +56,20 @@
       ]
     },
     {
+      "name": "SystemUIGoogleScreenshotTests",
+      "options": [
+        {
+          "exclude-annotation": "org.junit.Ignore"
+        },
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        },
+        {
+          "exclude-annotation": "android.platform.test.annotations.Postsubmit"
+        }
+      ]
+    },
+    {
       // TODO(b/251476085): Consider merging with SystemUIGoogleScreenshotTests (in U+)
       "name": "SystemUIGoogleBiometricsScreenshotTests",
       "options": [
@@ -69,16 +83,16 @@
     },
     {
       // Permission indicators
-      "name": "CtsPermission3TestCases",
+      "name": "CtsPermissionUiTestCases",
       "options": [
         {
           "exclude-annotation": "org.junit.Ignore"
         },
         {
-          "exclude-annotation": "androidx.test.filters.FlakyTest"
+          "exclude-annotation": "android.platform.test.annotations.FlakyTest"
         },
         {
-          "include-filter": "android.permission3.cts.CameraMicIndicatorsPermissionTest"
+          "include-filter": "android.permissionui.cts.CameraMicIndicatorsPermissionTest"
         }
       ]
     },
@@ -113,6 +127,17 @@
       ]
     }
   ],
+  "postsubmit": [
+    {
+      // Permission indicators
+      "name": "CtsPermissionUiTestCases",
+      "options": [
+        {
+          "include-filter": "android.permissionui.cts.CameraMicIndicatorsPermissionTest"
+        }
+      ]
+    }
+  ],
   "silver-sysui": [
    {
       "name": "PlatformScenarioTests",
@@ -137,5 +162,21 @@
         }
       ]
     }
+  ],
+  "postsubmit": [
+   {
+      "name": "SystemUIGoogleScreenshotTests",
+      "options": [
+        {
+            "exclude-annotation": "org.junit.Ignore"
+        },
+        {
+            "exclude-annotation": "android.platform.test.annotations.FlakyTest"
+        },
+        {
+            "include-annotation": "android.platform.test.annotations.Postsubmit"
+        }
+      ]
+    }
   ]
 }
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/tests/TEST_MAPPING b/packages/SystemUI/accessibility/accessibilitymenu/TEST_MAPPING
similarity index 100%
rename from packages/SystemUI/accessibility/accessibilitymenu/tests/TEST_MAPPING
rename to packages/SystemUI/accessibility/accessibilitymenu/TEST_MAPPING
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/layout/grid_item.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/layout/grid_item.xml
index a902c5b..587395d 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/layout/grid_item.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/layout/grid_item.xml
@@ -13,7 +13,7 @@
       android:layout_height="@dimen/image_button_height"
       android:layout_alignParentTop="true"
       android:layout_centerHorizontal="true"
-      android:scaleType="fitCenter"></ImageButton>
+      android:scaleType="fitCenter"/>
 
 <TextView
       android:id="@+id/shortcutLabel"
@@ -22,7 +22,6 @@
       android:layout_marginTop="@dimen/grid_item_text_view_margin_top"
       android:layout_below="@+id/shortcutIconBtn"
       android:layout_centerHorizontal="true"
-      android:ellipsize="end"
       android:gravity="center_horizontal"
       android:importantForAccessibility="no"
       android:lines="2"
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-am/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-am/strings.xml
index f215e85..0aeb410 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-am/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-am/strings.xml
@@ -2,25 +2,25 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="accessibility_menu_service_name" msgid="730136711554740131">"የተደራሽነት ምናሌ"</string>
-    <string name="accessibility_menu_intro" msgid="3164193281544042394">"የተደራሽነት ምናሌ መሣሪያዎን ለመቆጣጠር ትልቅ የማያ ገጽ ላይ ምናሌን ያቀርባል። የእርስዎን መሣሪያ መቆለፍ፣ ድምፅን እና ብሩህነትን መቆጣጠር፣ ቅጽበታዊ ገጽ ዕይታዎችን ማንሳት እና ተጨማሪ ነገሮችን ማድረግ ይችላሉ።"</string>
+    <string name="accessibility_menu_intro" msgid="3164193281544042394">"የተደራሽነት ምናሌ መሣሪያዎን ለመቆጣጠር ትልቅ የማያ ገፅ ላይ ምናሌን ያቀርባል። የእርስዎን መሣሪያ መቆለፍ፣ ድምፅን እና ብሩህነትን መቆጣጠር፣ ቅጽበታዊ ገፅ ዕይታዎችን ማንሳት እና ተጨማሪ ነገሮችን ማድረግ ይችላሉ።"</string>
     <string name="assistant_label" msgid="6796392082252272356">"ረዳት"</string>
     <string name="assistant_utterance" msgid="65509599221141377">"ረዳት"</string>
     <string name="a11y_settings_label" msgid="3977714687248445050">"የተደራሽነት ቅንብሮች"</string>
     <string name="power_label" msgid="7699720321491287839">"ኃይል"</string>
     <string name="power_utterance" msgid="7444296686402104807">"የኃይል አማራጮች"</string>
     <string name="recent_apps_label" msgid="6583276995616385847">"የቅርብ ጊዜ መተግበሪያዎች"</string>
-    <string name="lockscreen_label" msgid="648347953557887087">"ማያ ገጽ ቁልፍ"</string>
+    <string name="lockscreen_label" msgid="648347953557887087">"ማያ ገፅ ቁልፍ"</string>
     <string name="quick_settings_label" msgid="2999117381487601865">"ፈጣን ቅንብሮች"</string>
     <string name="notifications_label" msgid="6829741046963013567">"ማሳወቂያዎች"</string>
-    <string name="screenshot_label" msgid="863978141223970162">"ቅጽበታዊ ገጽ እይታ"</string>
-    <string name="screenshot_utterance" msgid="1430760563401895074">"ቅጽበታዊ ገጽ እይታን ያነሳል"</string>
+    <string name="screenshot_label" msgid="863978141223970162">"ቅጽበታዊ ገፅ እይታ"</string>
+    <string name="screenshot_utterance" msgid="1430760563401895074">"ቅጽበታዊ ገፅ እይታን ያነሳል"</string>
     <string name="volume_up_label" msgid="8592766918780362870">"ድምፅ ጨምር"</string>
     <string name="volume_down_label" msgid="8574981863656447346">"ድምፅ ቀንስ"</string>
     <string name="brightness_up_label" msgid="8010753822854544846">"ብሩህነት ጨምር"</string>
     <string name="brightness_down_label" msgid="7115662941913272072">"ብሩህነት ቀንስ"</string>
-    <string name="previous_button_content_description" msgid="840869171117765966">"ወደ ቀዳሚው ማያ ገጽ ይሂዱ"</string>
-    <string name="next_button_content_description" msgid="6810058269847364406">"ወደ ቀጣዩ ማያ ገጽ ይሂዱ"</string>
-    <string name="accessibility_menu_description" msgid="4458354794093858297">"የተደራሽነት ምናሌ መሣሪያዎን ለመቆጣጠር ትልቅ የማያ ገጽ ላይ ምናሌን ያቀርባል። የእርስዎን መሣሪያ መቆለፍ፣ ድምፅን እና ብሩህነትን መቆጣጠር፣ ቅጽበታዊ ገጽ ዕይታዎችን ማንሳት እና ተጨማሪ ነገሮችን ማድረግ ይችላሉ።"</string>
+    <string name="previous_button_content_description" msgid="840869171117765966">"ወደ ቀዳሚው ማያ ገፅ ይሂዱ"</string>
+    <string name="next_button_content_description" msgid="6810058269847364406">"ወደ ቀጣዩ ማያ ገፅ ይሂዱ"</string>
+    <string name="accessibility_menu_description" msgid="4458354794093858297">"የተደራሽነት ምናሌ መሣሪያዎን ለመቆጣጠር ትልቅ የማያ ገፅ ላይ ምናሌን ያቀርባል። የእርስዎን መሣሪያ መቆለፍ፣ ድምፅን እና ብሩህነትን መቆጣጠር፣ ቅጽበታዊ ገፅ ዕይታዎችን ማንሳት እና ተጨማሪ ነገሮችን ማድረግ ይችላሉ።"</string>
     <string name="accessibility_menu_summary" msgid="340071398148208130">"መሣሪያውን በትልቅ ምናሌ በኩል ይቆጣጠሩ"</string>
     <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"የተደራሽነት ምናሌ ቅንብሮች"</string>
     <string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"ትልቅ አዝራሮች"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-be/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-be/strings.xml
index 572d25c..db1e8b5 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-be/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-be/strings.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="accessibility_menu_service_name" msgid="730136711554740131">"Спецыяльныя магчымасці"</string>
+    <string name="accessibility_menu_service_name" msgid="730136711554740131">"Меню спецыяльных магчымасцей"</string>
     <string name="accessibility_menu_intro" msgid="3164193281544042394">"Меню спецыяльных магчымасцей – гэта вялікае экраннае меню для кіравання прыладай. Вы можаце блакіраваць прыладу, рэгуляваць гучнасць і яркасць, рабіць здымкі экрана і выконваць іншыя дзеянні."</string>
     <string name="assistant_label" msgid="6796392082252272356">"Памочнік"</string>
     <string name="assistant_utterance" msgid="65509599221141377">"Памочнік"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-cs/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-cs/strings.xml
index c0d9d45..e5dd693 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-cs/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-cs/strings.xml
@@ -21,7 +21,7 @@
     <string name="previous_button_content_description" msgid="840869171117765966">"Zpět na předchozí obrazovku"</string>
     <string name="next_button_content_description" msgid="6810058269847364406">"Přejít na další obrazovku"</string>
     <string name="accessibility_menu_description" msgid="4458354794093858297">"Nabídka usnadnění přístupu zobrazuje na obrazovce velkou nabídku k ovládání zařízení. Můžete zamknout zařízení, upravit hlasitost a jas, pořídit snímek obrazovky apod."</string>
-    <string name="accessibility_menu_summary" msgid="340071398148208130">"Ovládejte zařízení pomocí velké nabídky"</string>
+    <string name="accessibility_menu_summary" msgid="340071398148208130">"Ovládat zařízení pomocí velké nabídky"</string>
     <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Nastavení nabídky usnadnění přístupu"</string>
     <string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"Velká tlačítka"</string>
     <string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"Zvětšit tlačítka v nabídce přístupnosti"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-de/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-de/strings.xml
index fb31e1d..9d9b05a 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-de/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-de/strings.xml
@@ -2,7 +2,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="accessibility_menu_service_name" msgid="730136711554740131">"Menü für Bedienungshilfen"</string>
-    <string name="accessibility_menu_intro" msgid="3164193281544042394">"Über das Menü „Bedienungshilfen“ lässt sich ein großes Menü zur Bedienung deines Geräts auf dem Bildschirm öffnen. Du kannst beispielsweise das Gerät sperren, die Lautstärke und Helligkeit anpassen und Screenshots machen."</string>
+    <string name="accessibility_menu_intro" msgid="3164193281544042394">"Über das Menü für Bedienungshilfen lässt sich ein großes Menü zur Bedienung deines Geräts auf dem Bildschirm öffnen. Du kannst beispielsweise das Gerät sperren, die Lautstärke und Helligkeit anpassen und Screenshots machen."</string>
     <string name="assistant_label" msgid="6796392082252272356">"Assistant"</string>
     <string name="assistant_utterance" msgid="65509599221141377">"Assistant"</string>
     <string name="a11y_settings_label" msgid="3977714687248445050">"Einstellungen für Bedienungshilfen"</string>
@@ -20,9 +20,9 @@
     <string name="brightness_down_label" msgid="7115662941913272072">"Helligkeit verringern"</string>
     <string name="previous_button_content_description" msgid="840869171117765966">"Zum vorherigen Bildschirm"</string>
     <string name="next_button_content_description" msgid="6810058269847364406">"Zum nächsten Bildschirm"</string>
-    <string name="accessibility_menu_description" msgid="4458354794093858297">"Über das Menü „Bedienungshilfen“ lässt sich ein großes Menü zur Bedienung deines Geräts auf dem Bildschirm öffnen. Du kannst beispielsweise das Gerät sperren, die Lautstärke und Helligkeit anpassen und Screenshots machen."</string>
+    <string name="accessibility_menu_description" msgid="4458354794093858297">"Über das Menü für Bedienungshilfen lässt sich ein großes Menü zur Bedienung deines Geräts auf dem Bildschirm öffnen. Du kannst beispielsweise das Gerät sperren, die Lautstärke und Helligkeit anpassen und Screenshots machen."</string>
     <string name="accessibility_menu_summary" msgid="340071398148208130">"Gerät mit großem Menü steuern"</string>
-    <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Menüeinstellungen f. Bedienungshilfen"</string>
+    <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Einstellungen für das Menü „Bedienungshilfen“"</string>
     <string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"Große Schaltflächen"</string>
     <string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"Schaltflächen für das Menü „Bedienungshilfen“ vergrößern"</string>
     <string name="pref_help_title" msgid="6871558837025010641">"Hilfe"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-el/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-el/strings.xml
index 60e49ae..c51c9af 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-el/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-el/strings.xml
@@ -5,7 +5,7 @@
     <string name="accessibility_menu_intro" msgid="3164193281544042394">"Το μενού προσβασιμότητας παρέχει ένα μεγάλο μενού στην οθόνη για να ελέγχετε τη συσκευή σας. Μπορείτε να κλειδώνετε τη συσκευή, να ελέγχετε την ένταση ήχου και τη φωτεινότητα, να λαμβάνετε στιγμιότυπα οθόνης και άλλα."</string>
     <string name="assistant_label" msgid="6796392082252272356">"Βοηθός"</string>
     <string name="assistant_utterance" msgid="65509599221141377">"Βοηθός"</string>
-    <string name="a11y_settings_label" msgid="3977714687248445050">"Ρυθμίσεις προσβ­U+00ADασιμότητας"</string>
+    <string name="a11y_settings_label" msgid="3977714687248445050">"Ρυθμίσεις προσβασιμότητας"</string>
     <string name="power_label" msgid="7699720321491287839">"Κουμπί λειτουργίας"</string>
     <string name="power_utterance" msgid="7444296686402104807">"Επιλογές λειτουργίας"</string>
     <string name="recent_apps_label" msgid="6583276995616385847">"Πρόσφατες εφαρμογές"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rAU/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rAU/strings.xml
index 5968179..0993a9b 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rAU/strings.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="accessibility_menu_service_name" msgid="730136711554740131">"Accessibility menu"</string>
-    <string name="accessibility_menu_intro" msgid="3164193281544042394">"The Accessibility menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
+    <string name="accessibility_menu_service_name" msgid="730136711554740131">"Accessibility Menu"</string>
+    <string name="accessibility_menu_intro" msgid="3164193281544042394">"The Accessibility Menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
     <string name="assistant_label" msgid="6796392082252272356">"Assistant"</string>
     <string name="assistant_utterance" msgid="65509599221141377">"Assistant"</string>
     <string name="a11y_settings_label" msgid="3977714687248445050">"Accessibility settings"</string>
@@ -20,11 +20,11 @@
     <string name="brightness_down_label" msgid="7115662941913272072">"Brightness down"</string>
     <string name="previous_button_content_description" msgid="840869171117765966">"Go to previous screen"</string>
     <string name="next_button_content_description" msgid="6810058269847364406">"Go to next screen"</string>
-    <string name="accessibility_menu_description" msgid="4458354794093858297">"The Accessibility menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
+    <string name="accessibility_menu_description" msgid="4458354794093858297">"The Accessibility Menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
     <string name="accessibility_menu_summary" msgid="340071398148208130">"Control device via large menu"</string>
     <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Accessibility Menu settings"</string>
     <string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"Large buttons"</string>
-    <string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"Increase size of Accessibility menu buttons"</string>
+    <string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"Increase size of Accessibility Menu buttons"</string>
     <string name="pref_help_title" msgid="6871558837025010641">"Help"</string>
     <string name="brightness_percentage_label" msgid="7391554573977867369">"Brightness <xliff:g id="PERCENTAGE">%1$s</xliff:g>%%"</string>
     <string name="music_volume_percentage_label" msgid="398635599662604706">"Music volume <xliff:g id="PERCENTAGE">%1$s</xliff:g>%%"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rGB/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rGB/strings.xml
index 5968179..0993a9b 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rGB/strings.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="accessibility_menu_service_name" msgid="730136711554740131">"Accessibility menu"</string>
-    <string name="accessibility_menu_intro" msgid="3164193281544042394">"The Accessibility menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
+    <string name="accessibility_menu_service_name" msgid="730136711554740131">"Accessibility Menu"</string>
+    <string name="accessibility_menu_intro" msgid="3164193281544042394">"The Accessibility Menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
     <string name="assistant_label" msgid="6796392082252272356">"Assistant"</string>
     <string name="assistant_utterance" msgid="65509599221141377">"Assistant"</string>
     <string name="a11y_settings_label" msgid="3977714687248445050">"Accessibility settings"</string>
@@ -20,11 +20,11 @@
     <string name="brightness_down_label" msgid="7115662941913272072">"Brightness down"</string>
     <string name="previous_button_content_description" msgid="840869171117765966">"Go to previous screen"</string>
     <string name="next_button_content_description" msgid="6810058269847364406">"Go to next screen"</string>
-    <string name="accessibility_menu_description" msgid="4458354794093858297">"The Accessibility menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
+    <string name="accessibility_menu_description" msgid="4458354794093858297">"The Accessibility Menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
     <string name="accessibility_menu_summary" msgid="340071398148208130">"Control device via large menu"</string>
     <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Accessibility Menu settings"</string>
     <string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"Large buttons"</string>
-    <string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"Increase size of Accessibility menu buttons"</string>
+    <string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"Increase size of Accessibility Menu buttons"</string>
     <string name="pref_help_title" msgid="6871558837025010641">"Help"</string>
     <string name="brightness_percentage_label" msgid="7391554573977867369">"Brightness <xliff:g id="PERCENTAGE">%1$s</xliff:g>%%"</string>
     <string name="music_volume_percentage_label" msgid="398635599662604706">"Music volume <xliff:g id="PERCENTAGE">%1$s</xliff:g>%%"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rIN/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rIN/strings.xml
index 5968179..0993a9b 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-en-rIN/strings.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="accessibility_menu_service_name" msgid="730136711554740131">"Accessibility menu"</string>
-    <string name="accessibility_menu_intro" msgid="3164193281544042394">"The Accessibility menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
+    <string name="accessibility_menu_service_name" msgid="730136711554740131">"Accessibility Menu"</string>
+    <string name="accessibility_menu_intro" msgid="3164193281544042394">"The Accessibility Menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
     <string name="assistant_label" msgid="6796392082252272356">"Assistant"</string>
     <string name="assistant_utterance" msgid="65509599221141377">"Assistant"</string>
     <string name="a11y_settings_label" msgid="3977714687248445050">"Accessibility settings"</string>
@@ -20,11 +20,11 @@
     <string name="brightness_down_label" msgid="7115662941913272072">"Brightness down"</string>
     <string name="previous_button_content_description" msgid="840869171117765966">"Go to previous screen"</string>
     <string name="next_button_content_description" msgid="6810058269847364406">"Go to next screen"</string>
-    <string name="accessibility_menu_description" msgid="4458354794093858297">"The Accessibility menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
+    <string name="accessibility_menu_description" msgid="4458354794093858297">"The Accessibility Menu provides a large on-screen menu to control your device. You can lock your device, control volume and brightness, take screenshots and more."</string>
     <string name="accessibility_menu_summary" msgid="340071398148208130">"Control device via large menu"</string>
     <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Accessibility Menu settings"</string>
     <string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"Large buttons"</string>
-    <string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"Increase size of Accessibility menu buttons"</string>
+    <string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"Increase size of Accessibility Menu buttons"</string>
     <string name="pref_help_title" msgid="6871558837025010641">"Help"</string>
     <string name="brightness_percentage_label" msgid="7391554573977867369">"Brightness <xliff:g id="PERCENTAGE">%1$s</xliff:g>%%"</string>
     <string name="music_volume_percentage_label" msgid="398635599662604706">"Music volume <xliff:g id="PERCENTAGE">%1$s</xliff:g>%%"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-es/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-es/strings.xml
index b97df64..877a43c 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-es/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-es/strings.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="accessibility_menu_service_name" msgid="730136711554740131">"Menú de accesibilidad"</string>
+    <string name="accessibility_menu_service_name" msgid="730136711554740131">"Menú Accesibilidad"</string>
     <string name="accessibility_menu_intro" msgid="3164193281544042394">"El menú de accesibilidad es un menú de gran tamaño que se muestra en pantalla para controlar tu dispositivo. Puedes bloquear el dispositivo, controlar el volumen y el brillo, hacer capturas de pantalla y más."</string>
     <string name="assistant_label" msgid="6796392082252272356">"Asistente"</string>
     <string name="assistant_utterance" msgid="65509599221141377">"Asistente"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-fr-rCA/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-fr-rCA/strings.xml
index 1715d56..87a9503 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-fr-rCA/strings.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="accessibility_menu_service_name" msgid="730136711554740131">"menu Accessibilité"</string>
+    <string name="accessibility_menu_service_name" msgid="730136711554740131">"Menu Accessibilité"</string>
     <string name="accessibility_menu_intro" msgid="3164193281544042394">"Le menu Accessibilité propose un grand espace à l\'écran à l\'aide duquel vous pouvez contrôler votre appareil. Utilisez-le pour verrouiller votre appareil, régler le volume et la luminosité, prendre des captures d\'écran et plus."</string>
     <string name="assistant_label" msgid="6796392082252272356">"Assistant"</string>
     <string name="assistant_utterance" msgid="65509599221141377">"Assistant"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-fr/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-fr/strings.xml
index 10c6169..0445e8d 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-fr/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-fr/strings.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="accessibility_menu_service_name" msgid="730136711554740131">"Menu d\'accessibilité"</string>
-    <string name="accessibility_menu_intro" msgid="3164193281544042394">"Le menu d\'accessibilité s\'affiche en grand sur votre écran pour vous permettre de contrôler votre appareil. Vous pouvez verrouiller votre appareil, ajuster le volume et la luminosité, réaliser des captures d\'écran, et plus encore."</string>
+    <string name="accessibility_menu_service_name" msgid="730136711554740131">"Menu Accessibilité"</string>
+    <string name="accessibility_menu_intro" msgid="3164193281544042394">"Le menu Accessibilité s\'affiche en grand sur votre écran pour vous permettre de contrôler votre appareil. Vous pouvez verrouiller votre appareil, ajuster le volume et la luminosité, réaliser des captures d\'écran, et plus encore."</string>
     <string name="assistant_label" msgid="6796392082252272356">"Assistant"</string>
     <string name="assistant_utterance" msgid="65509599221141377">"Assistant"</string>
     <string name="a11y_settings_label" msgid="3977714687248445050">"Accessibilité"</string>
@@ -20,8 +20,8 @@
     <string name="brightness_down_label" msgid="7115662941913272072">"Baisser luminosité"</string>
     <string name="previous_button_content_description" msgid="840869171117765966">"Revenir à l\'écran précédent"</string>
     <string name="next_button_content_description" msgid="6810058269847364406">"Accéder à l\'écran suivant"</string>
-    <string name="accessibility_menu_description" msgid="4458354794093858297">"Le menu d\'accessibilité s\'affiche en grand sur votre écran pour vous permettre de contrôler votre appareil. Vous pouvez verrouiller votre appareil, ajuster le volume et la luminosité, réaliser des captures d\'écran, et plus encore."</string>
-    <string name="accessibility_menu_summary" msgid="340071398148208130">"Contrôlez votre appareil via un grand menu"</string>
+    <string name="accessibility_menu_description" msgid="4458354794093858297">"Le menu Accessibilité s\'affiche en grand sur votre écran pour vous permettre de contrôler votre appareil. Vous pouvez verrouiller votre appareil, ajuster le volume et la luminosité, réaliser des captures d\'écran, et plus encore."</string>
+    <string name="accessibility_menu_summary" msgid="340071398148208130">"Contrôler l\'appareil via un grand menu"</string>
     <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Paramètres du menu d\'accessibilité"</string>
     <string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"Boutons de grande taille"</string>
     <string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"Augmenter la taille des boutons du menu d\'accessibilité"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-hr/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-hr/strings.xml
index 1ae3213..eff6cb4 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-hr/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-hr/strings.xml
@@ -9,7 +9,7 @@
     <string name="power_label" msgid="7699720321491287839">"Napajanje"</string>
     <string name="power_utterance" msgid="7444296686402104807">"Opcije napajanja"</string>
     <string name="recent_apps_label" msgid="6583276995616385847">"Nedavne aplikacije"</string>
-    <string name="lockscreen_label" msgid="648347953557887087">"Zaključan zaslon"</string>
+    <string name="lockscreen_label" msgid="648347953557887087">"Zaključani zaslon"</string>
     <string name="quick_settings_label" msgid="2999117381487601865">"Brze postavke"</string>
     <string name="notifications_label" msgid="6829741046963013567">"Obavijesti"</string>
     <string name="screenshot_label" msgid="863978141223970162">"Snimka zaslona"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-it/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-it/strings.xml
index ef9e4a5..147a1d3 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-it/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-it/strings.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="accessibility_menu_service_name" msgid="730136711554740131">"menu Accessibilità"</string>
+    <string name="accessibility_menu_service_name" msgid="730136711554740131">"Menu Accessibilità"</string>
     <string name="accessibility_menu_intro" msgid="3164193281544042394">"Il menu Accessibilità mostra sullo schermo un menu di grandi dimensioni per permetterti di controllare il dispositivo. Puoi bloccare il dispositivo, regolare il volume e la luminosità, acquisire screenshot e altro ancora."</string>
     <string name="assistant_label" msgid="6796392082252272356">"Assistente"</string>
     <string name="assistant_utterance" msgid="65509599221141377">"Assistente"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-kk/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-kk/strings.xml
index 9726f20..48c2634 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-kk/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-kk/strings.xml
@@ -11,7 +11,7 @@
     <string name="recent_apps_label" msgid="6583276995616385847">"Соңғы қолданбалар"</string>
     <string name="lockscreen_label" msgid="648347953557887087">"Құлып экраны"</string>
     <string name="quick_settings_label" msgid="2999117381487601865">"Жылдам параметрлер"</string>
-    <string name="notifications_label" msgid="6829741046963013567">"Хабарланды00ADрулар"</string>
+    <string name="notifications_label" msgid="6829741046963013567">"Хабарланды­рулар"</string>
     <string name="screenshot_label" msgid="863978141223970162">"Скриншот"</string>
     <string name="screenshot_utterance" msgid="1430760563401895074">"Скриншот жасау"</string>
     <string name="volume_up_label" msgid="8592766918780362870">"Дыбысын арттыру"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-ko/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-ko/strings.xml
index b06e432..92d7049 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-ko/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-ko/strings.xml
@@ -9,7 +9,7 @@
     <string name="power_label" msgid="7699720321491287839">"전원"</string>
     <string name="power_utterance" msgid="7444296686402104807">"전원 옵션"</string>
     <string name="recent_apps_label" msgid="6583276995616385847">"최근 앱"</string>
-    <string name="lockscreen_label" msgid="648347953557887087">"잠금 화면"</string>
+    <string name="lockscreen_label" msgid="648347953557887087">"화면 잠금"</string>
     <string name="quick_settings_label" msgid="2999117381487601865">"빠른 설정"</string>
     <string name="notifications_label" msgid="6829741046963013567">"알림"</string>
     <string name="screenshot_label" msgid="863978141223970162">"스크린샷"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-mn/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-mn/strings.xml
index 7b64116..6f8d221 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-mn/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-mn/strings.xml
@@ -9,7 +9,7 @@
     <string name="power_label" msgid="7699720321491287839">"Асаах/унтраах"</string>
     <string name="power_utterance" msgid="7444296686402104807">"Асаах/унтраах сонголт"</string>
     <string name="recent_apps_label" msgid="6583276995616385847">"Саяхны апп"</string>
-    <string name="lockscreen_label" msgid="648347953557887087">"Түгжигдсэн дэлгэц"</string>
+    <string name="lockscreen_label" msgid="648347953557887087">"Түгжээтэй дэлгэц"</string>
     <string name="quick_settings_label" msgid="2999117381487601865">"Шуурхай тохиргоо"</string>
     <string name="notifications_label" msgid="6829741046963013567">"Мэдэгдэл"</string>
     <string name="screenshot_label" msgid="863978141223970162">"Дэлгэцийн агшин"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-my/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-my/strings.xml
index dacd68a..1097f87 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-my/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-my/strings.xml
@@ -21,7 +21,7 @@
     <string name="previous_button_content_description" msgid="840869171117765966">"ယခင် မျက်နှာပြင်သို့ သွားရန်"</string>
     <string name="next_button_content_description" msgid="6810058269847364406">"နောက်မျက်နှာပြင်သို့ ဆက်သွားရန်"</string>
     <string name="accessibility_menu_description" msgid="4458354794093858297">"‘အများသုံးနိုင်မှု မီနူး’ တွင် သင့်စက်ပစ္စည်းကို စီမံရန် ကြီးမားသည့်ဖန်သားပြင်မီနူး ပါဝင်သည်။ စက်ပစ္စည်းလော့ခ်ချခြင်း၊ အသံအတိုးအကျယ်နှင့် အလင်းအမှောင် ထိန်းချုပ်ခြင်း၊ ဖန်သားပြင်ဓာတ်ပုံရိုက်ခြင်း စသည်တို့ ပြုလုပ်နိုင်သည်။"</string>
-    <string name="accessibility_menu_summary" msgid="340071398148208130">"ကြီးမားသည့်မီးနူးဖြင့် စက်ပစ္စည်းကို စီမံနိုင်သည်"</string>
+    <string name="accessibility_menu_summary" msgid="340071398148208130">"ကြီးမားသည့်မီနူးဖြင့် စက်ပစ္စည်းကို စီမံနိုင်သည်"</string>
     <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"အများသုံးနိုင်မှု မီနူးဆက်တင်များ"</string>
     <string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"ခလုတ်အကြီးများ"</string>
     <string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"\'အများသုံးနိုင်မှု မီနူး ခလုတ်များ\' ၏ အရွယ်အစားတိုးရန်"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-sk/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-sk/strings.xml
index c4bf89a..c29002b 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-sk/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-sk/strings.xml
@@ -21,7 +21,7 @@
     <string name="previous_button_content_description" msgid="840869171117765966">"Prejsť na predchádzajúcu obrazovku"</string>
     <string name="next_button_content_description" msgid="6810058269847364406">"Prejsť na ďalšiu obrazovku"</string>
     <string name="accessibility_menu_description" msgid="4458354794093858297">"Ponuka dostupnosti spustí na obrazovke telefónu veľkú ponuku, pomocou ktorej môžete ovládať svoje zariadenie. Môžete ho uzamknúť, ovládať hlasitosť a jas, vytvárať snímky obrazovky a mnoho ďalšieho."</string>
-    <string name="accessibility_menu_summary" msgid="340071398148208130">"Ovládajte zariadenie pomocou veľkej ponuky"</string>
+    <string name="accessibility_menu_summary" msgid="340071398148208130">"Ovládať zariadenie pomocou veľkej ponuky"</string>
     <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"Nastavenia ponuky dostupnosti"</string>
     <string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"Veľké tlačidlá"</string>
     <string name="accessibility_menu_large_buttons_summary" msgid="236873938502785311">"Zväčšiť tlačidlá ponuky dostupnosti"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-zh-rHK/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-zh-rHK/strings.xml
index 9f4033c..fed2e9c 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-zh-rHK/strings.xml
@@ -2,7 +2,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="accessibility_menu_service_name" msgid="730136711554740131">"無障礙功能選單"</string>
-    <string name="accessibility_menu_intro" msgid="3164193281544042394">"「無障礙功能選單」是螢幕上的大型選單,用來控制裝置,方便您鎖定裝置、控制音量和亮度、擷取螢幕畫面及執行其他功能。"</string>
+    <string name="accessibility_menu_intro" msgid="3164193281544042394">"「無障礙功能選單」是螢幕上的大型選單,用來控制裝置,方便你鎖定裝置、控制音量和亮度、擷取螢幕畫面及執行其他功能。"</string>
     <string name="assistant_label" msgid="6796392082252272356">"Google 助理"</string>
     <string name="assistant_utterance" msgid="65509599221141377">"Google 助理"</string>
     <string name="a11y_settings_label" msgid="3977714687248445050">"無障礙功能設定"</string>
@@ -20,7 +20,7 @@
     <string name="brightness_down_label" msgid="7115662941913272072">"調暗亮度"</string>
     <string name="previous_button_content_description" msgid="840869171117765966">"前往上一個畫面"</string>
     <string name="next_button_content_description" msgid="6810058269847364406">"前往下一個畫面"</string>
-    <string name="accessibility_menu_description" msgid="4458354794093858297">"「無障礙功能選單」是螢幕上的大型選單,用來控制裝置,方便您鎖定裝置、控制音量和亮度、擷取螢幕截圖及執行其他功能。"</string>
+    <string name="accessibility_menu_description" msgid="4458354794093858297">"「無障礙功能選單」是螢幕上的大型選單,用來控制裝置,方便你鎖定裝置、控制音量和亮度、擷取螢幕截圖及執行其他功能。"</string>
     <string name="accessibility_menu_summary" msgid="340071398148208130">"透過大型選單控制裝置"</string>
     <string name="accessibility_menu_settings_name" msgid="1716888058785672611">"無障礙功能選單設定"</string>
     <string name="accessibility_menu_large_buttons_title" msgid="8978499601044961736">"大按鈕"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-zh-rTW/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-zh-rTW/strings.xml
index 40c961c..ac6b5c3 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-zh-rTW/strings.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="accessibility_menu_service_name" msgid="730136711554740131">"無障礙選單"</string>
+    <string name="accessibility_menu_service_name" msgid="730136711554740131">"無障礙工具選單"</string>
     <string name="accessibility_menu_intro" msgid="3164193281544042394">"無障礙工具選單是螢幕上的大型選單,可用來操控裝置,方便你鎖定裝置、控制音量和亮度、擷取螢幕畫面,以及執行其他功能。"</string>
     <string name="assistant_label" msgid="6796392082252272356">"Google 助理"</string>
     <string name="assistant_utterance" msgid="65509599221141377">"Google 助理"</string>
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/activity/A11yMenuSettingsActivity.java b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/activity/A11yMenuSettingsActivity.java
index 5ed450a..c26cd12 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/activity/A11yMenuSettingsActivity.java
+++ b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/activity/A11yMenuSettingsActivity.java
@@ -25,8 +25,8 @@
 import android.os.Bundle;
 import android.provider.Browser;
 import android.provider.Settings;
-import android.widget.TextView;
 import android.view.View;
+import android.widget.TextView;
 
 import androidx.annotation.Nullable;
 import androidx.fragment.app.FragmentActivity;
@@ -55,6 +55,10 @@
         ((TextView) findViewById(R.id.action_bar_title)).setText(
                 getResources().getString(R.string.accessibility_menu_settings_name)
         );
+        actionBar.setDisplayOptions(
+                ActionBar.DISPLAY_TITLE_MULTIPLE_LINES
+                        | ActionBar.DISPLAY_SHOW_TITLE
+                        | ActionBar.DISPLAY_HOME_AS_UP);
     }
 
     /**
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuAdapter.java b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuAdapter.java
index 6ae65cb..c64ec6f 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuAdapter.java
+++ b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuAdapter.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.accessibility.accessibilitymenu.view;
 
+import android.content.Context;
 import android.graphics.Rect;
 import android.view.LayoutInflater;
 import android.view.TouchDelegate;
@@ -47,10 +48,11 @@
     private final ShortcutDrawableUtils mShortcutDrawableUtils;
 
     public A11yMenuAdapter(
-            AccessibilityMenuService service, List<A11yMenuShortcut> shortcutDataList) {
+            AccessibilityMenuService service,
+            Context displayContext, List<A11yMenuShortcut> shortcutDataList) {
         this.mService = service;
         this.mShortcutDataList = shortcutDataList;
-        mInflater = LayoutInflater.from(service);
+        mInflater = LayoutInflater.from(displayContext);
 
         mShortcutDrawableUtils = new ShortcutDrawableUtils(service);
 
@@ -75,7 +77,9 @@
 
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
-        convertView = mInflater.inflate(R.layout.grid_item, null);
+        if (convertView == null) {
+            convertView = mInflater.inflate(R.layout.grid_item, parent, false);
+        }
 
         A11yMenuShortcut shortcutItem = (A11yMenuShortcut) getItem(position);
         // Sets shortcut icon and label resource.
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuOverlayLayout.java b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuOverlayLayout.java
index 5b7bbe8..edd6a48 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuOverlayLayout.java
+++ b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuOverlayLayout.java
@@ -17,11 +17,13 @@
 package com.android.systemui.accessibility.accessibilitymenu.view;
 
 import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
 
 import static java.lang.Math.max;
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
+import android.content.Context;
 import android.content.res.Configuration;
 import android.graphics.Insets;
 import android.graphics.PixelFormat;
@@ -135,15 +137,13 @@
             initLayoutParams();
         }
 
-        final Display display = mService.getSystemService(
-                DisplayManager.class).getDisplay(DEFAULT_DISPLAY);
-
-        mLayout = new FrameLayout(
-                mService.createDisplayContext(display).createWindowContext(
-                        WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY, null));
+        final Display display = mDisplayManager.getDisplay(DEFAULT_DISPLAY);
+        final Context context = mService.createDisplayContext(display).createWindowContext(
+                TYPE_ACCESSIBILITY_OVERLAY, null);
+        mLayout = new FrameLayout(context);
         updateLayoutPosition();
-        inflateLayoutAndSetOnTouchListener(mLayout);
-        mA11yMenuViewPager = new A11yMenuViewPager(mService);
+        inflateLayoutAndSetOnTouchListener(mLayout, context);
+        mA11yMenuViewPager = new A11yMenuViewPager(mService, context);
         mA11yMenuViewPager.configureViewPagerAndFooter(mLayout, createShortcutList(), pageIndex);
         mWindowManager.addView(mLayout, mLayoutParameter);
         mLayout.setVisibility(lastVisibilityState);
@@ -169,8 +169,8 @@
         mLayoutParameter.setTitle(mService.getString(R.string.accessibility_menu_service_name));
     }
 
-    private void inflateLayoutAndSetOnTouchListener(ViewGroup view) {
-        LayoutInflater inflater = LayoutInflater.from(mService);
+    private void inflateLayoutAndSetOnTouchListener(ViewGroup view, Context displayContext) {
+        LayoutInflater inflater = LayoutInflater.from(displayContext);
         inflater.inflate(R.layout.paged_menu, view);
         view.setOnTouchListener(mService);
     }
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuViewPager.java b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuViewPager.java
index 0a349e5..b969017 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuViewPager.java
+++ b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuViewPager.java
@@ -147,8 +147,12 @@
     /** The container layout for a11y menu. */
     private ViewGroup mA11yMenuLayout;
 
-    public A11yMenuViewPager(AccessibilityMenuService service) {
+    /** Display context for inflating views. */
+    private Context mDisplayContext;
+
+    public A11yMenuViewPager(AccessibilityMenuService service, Context displayContext) {
         this.mService = service;
+        this.mDisplayContext = displayContext;
     }
 
     /**
@@ -213,10 +217,11 @@
     }
 
     private void addGridPage(List<A11yMenuShortcut> shortcutDataListInPage) {
-        LayoutInflater inflater = LayoutInflater.from(mService);
+        LayoutInflater inflater = LayoutInflater.from(mDisplayContext);
         View view = inflater.inflate(R.layout.grid_view, null);
         GridView gridView = view.findViewById(R.id.gridview);
-        A11yMenuAdapter adapter = new A11yMenuAdapter(mService, shortcutDataListInPage);
+        A11yMenuAdapter adapter = new A11yMenuAdapter(
+                mService, mDisplayContext, shortcutDataListInPage);
         gridView.setNumColumns(GridViewParams.getGridColumnCount(mService));
         gridView.setAdapter(adapter);
         mGridPageList.add(gridView);
diff --git a/packages/SystemUI/proguard_common.flags b/packages/SystemUI/proguard_common.flags
index 9bd26ab1..3194815 100644
--- a/packages/SystemUI/proguard_common.flags
+++ b/packages/SystemUI/proguard_common.flags
@@ -62,10 +62,14 @@
 -keep class ** extends androidx.preference.PreferenceFragment
 -keep class com.android.systemui.tuner.*
 
-# The plugins, log & common subpackages act as shared libraries that might be referenced in
+# The plugins and core log subpackages act as shared libraries that might be referenced in
 # dynamically-loaded plugin APKs.
--keep class com.android.systemui.plugins.** { *; }
--keep class com.android.systemui.log.core.** { *; }
+-keep class com.android.systemui.plugins.** {
+    *;
+}
+-keep class com.android.systemui.log.core.** {
+    *;
+}
 -keep class com.android.systemui.fragments.FragmentService$FragmentCreator {
     *;
 }
diff --git a/packages/SystemUI/res-keyguard/values-af/strings.xml b/packages/SystemUI/res-keyguard/values-af/strings.xml
index 39b4183..fc92e01 100644
--- a/packages/SystemUI/res-keyguard/values-af/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-af/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN word vereis ná vassluit"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Wagwoord word vereis ná vassluit"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Patroon word vereis ná vassluit"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Opdatering word tydens onaktiewe ure geïnstalleer"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Meer sekuriteit vereis. PIN ruk lank nie gebruik nie."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Meer sekuriteit vereis. Wagwoord ruk lank nie gebruik nie."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Meer sekuriteit vereis. Patroon ruk lank nie gebruik nie."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Borrel"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analoog"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Ontsluit jou toestel om voort te gaan"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Voer PIN in om opdatering later te installeer"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Voer wagwoord in om opdatering later te installeer"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Teken patroon om opdatering later te installeer"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Toestel is opgedateer. Voer PIN in om voort te gaan."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Toestel is opgedateer. Voer wagwoord in om voort te gaan."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Toestel is opgedateer. Teken patroon om voort te gaan."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-am/strings.xml b/packages/SystemUI/res-keyguard/values-am/strings.xml
index e175007..88670cd 100644
--- a/packages/SystemUI/res-keyguard/values-am/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-am/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ከመቆለፊያ በኋላ ፒን ያስፈልጋል"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ከመቆለፊያ በኋላ የይለፍ ቃል ያስፈልጋል"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ከመቆለፊያ በኋላ ስርዓተ ጥለት ያስፈልጋል"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"ዝማኔ በቦዘኑ ሰዓታት ወቅት ይጭናል"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ተጨማሪ የደህንነት ጥበቃ ያስፈልጋል። ፒን ለተወሰነ ጊዜ ጥቅም ላይ አልዋለም።"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ተጨማሪ የደህንነት ጥበቃ ያስፈልጋል። የይለፍ ቃል ለተወሰነ ጊዜ ጥቅም ላይ አልዋለም።"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ተጨማሪ የደህንነት ጥበቃ ያስፈልጋል። ስርዓተ ጥለት ለተወሰነ ጊዜ ጥቅም ላይ አልዋለም።"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"አረፋ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"አናሎግ"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ለመቀጠል መሣሪያዎን ይክፈቱ"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"ዝማኔን በኋላ ላይ ለመጫን ፒን ያስገቡ"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"ዝማኔን በኋላ ላይ ለመጫን የይለፍ ቃል ያስገቡ"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"ዝማኔን በኋላ ላይ ለመጫን ስርዓተ ጥለት ይሳሉ"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"መሣሪያ ዘምኗል። ለመቀጠል ፒን ያስገቡ።"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"መሣሪያ ዘምኗል። ለመቀጠል የይለፍ ቃል ያስገቡ።"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"መሣሪያ ዘምኗል። ለመቀጠል ሥርዓተ ጥለት ይሳሉ።"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-ar/strings.xml b/packages/SystemUI/res-keyguard/values-ar/strings.xml
index fa0fb44..b66f6fd 100644
--- a/packages/SystemUI/res-keyguard/values-ar/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ar/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"يجب إدخال رقم التعريف الشخصي بعد إلغاء التأمين."</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"يجب إدخال كلمة المرور بعد إلغاء التأمين."</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"يجب رسم النقش بعد إلغاء التأمين."</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"سيتم تثبيت التحديث خلال ساعات عدم النشاط."</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"‏يجب تعزيز الأمان. لم يُستخدَم رقم PIN لبعض الوقت."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"يجب تعزيز الأمان. لم تستخدَم كلمة المرور لبعض الوقت."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"يجب تعزيز الأمان. لم يُستخدَم النقش لبعض الوقت."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"فقاعة"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ساعة تقليدية"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"يجب فتح قفل الجهاز للمتابعة"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"أدخِل رقم التعريف الشخصي لتثبيت التحديث لاحقًا."</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"أدخِل كلمة المرور لتثبيت التحديث لاحقًا."</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"ارسم النقش لتثبيت التحديث لاحقًا."</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"تم تحديث الجهاز. أدخِل رقم التعريف الشخصي للمتابعة."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"تم تحديث الجهاز. أدخِل كلمة المرور للمتابعة."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"تم تحديث الجهاز. ارسم النقش للمتابعة."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-as/strings.xml b/packages/SystemUI/res-keyguard/values-as/strings.xml
index 686891f..6796756 100644
--- a/packages/SystemUI/res-keyguard/values-as/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-as/strings.xml
@@ -31,8 +31,8 @@
     <string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • বেতাঁৰৰ জৰিয়তে চাৰ্জ কৰি থকা হৈছে"</string>
     <string name="keyguard_plugged_in_dock" msgid="2122073051904360987">"<xliff:g id="PERCENTAGE">%s</xliff:g> • চাৰ্জ কৰি থকা হৈছে"</string>
     <string name="keyguard_plugged_in" msgid="8169926454348380863">"<xliff:g id="PERCENTAGE">%s</xliff:g> • চ্চার্জ কৰি থকা হৈছে"</string>
-    <string name="keyguard_plugged_in_charging_fast" msgid="4386594091107340426">"<xliff:g id="PERCENTAGE">%s</xliff:g> • দ্ৰুত গতিৰে চ্চাৰ্জ কৰি থকা হৈছে"</string>
-    <string name="keyguard_plugged_in_charging_slowly" msgid="217655355424210">"<xliff:g id="PERCENTAGE">%s</xliff:g> • লাহে লাহে চ্চাৰ্জ কৰি থকা হৈছে"</string>
+    <string name="keyguard_plugged_in_charging_fast" msgid="4386594091107340426">"<xliff:g id="PERCENTAGE">%s</xliff:g> • দ্ৰুত গতিৰে চাৰ্জ কৰি থকা হৈছে"</string>
+    <string name="keyguard_plugged_in_charging_slowly" msgid="217655355424210">"<xliff:g id="PERCENTAGE">%s</xliff:g> • লাহে লাহে চাৰ্জ কৰি থকা হৈছে"</string>
     <string name="keyguard_plugged_in_charging_limited" msgid="1053130519456324630">"<xliff:g id="PERCENTAGE">%s</xliff:g> • বেটাৰী সুৰক্ষিত কৰিবলৈ চাৰ্জিং অপ্টিমাইজ কৰা হৈছে"</string>
     <string name="keyguard_plugged_in_incompatible_charger" msgid="3687961801947819076">"<xliff:g id="PERCENTAGE">%s</xliff:g> • চাৰ্জিঙৰ আনুষংগিক সামগ্ৰীত সমস্যা হৈছে"</string>
     <string name="keyguard_instructions_when_pattern_disabled" msgid="8448804180089936954">"আনলক কৰিবলৈ মেনু টিপক।"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"লকডাউনৰ পাছত পিন দিয়াৰ আৱশ্যক"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"লকডাউনৰ পাছত পাছৱৰ্ড দিয়াৰ আৱশ্যক"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"লকডাউনৰ পাছত আৰ্হি দিয়াৰ আৱশ্যক"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"নিষ্ক্ৰিয় হৈ থকাৰ সময়ত আপডে’ট ইনষ্টল কৰা হ’ব"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"অতিৰিক্ত সুৰক্ষাৰ আৱশ্যক। কিছু সময় ধৰি আৰ্হি ব্যৱহাৰ কৰা হোৱা নাই।"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"অতিৰিক্ত সুৰক্ষাৰ আৱশ্যক। কিছু সময় ধৰি পাছৱৰ্ড ব্যৱহাৰ কৰা হোৱা নাই।"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"অতিৰিক্ত সুৰক্ষাৰ আৱশ্যক। কিছু সময় ধৰি আৰ্হি ব্যৱহাৰ কৰা হোৱা নাই।"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"বাবল"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"এনাল’গ"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"অব্যাহত ৰাখিবলৈ আপোনাৰ ডিভাইচটো আনলক কৰক"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"আপডে’ট পাছত ইনষ্টল কৰিবলৈ পিন দিয়ক"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"আপডে’ট পাছত ইনষ্টল কৰিবলৈ পাছৱৰ্ড দিয়ক"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"আপডে’ট পাছত ইনষ্টল কৰিবলৈ আৰ্হি আঁকক"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"ডিভাইচ আপডে’ট কৰা হ’ল। অব্যাহত ৰাখিবলৈ পিন দিয়ক।"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"ডিভাইচ আপডে’ট কৰা হ’ল। অব্যাহত ৰাখিবলৈ পাছৱৰ্ড দিয়ক।"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"ডিভাইচ আপডে’ট কৰা হ’ল। অব্যাহত ৰাখিবলৈ আৰ্হি আঁকক।"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-az/strings.xml b/packages/SystemUI/res-keyguard/values-az/strings.xml
index 6eb36bd..d8cf6c0 100644
--- a/packages/SystemUI/res-keyguard/values-az/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-az/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Kilidləmədən sonra PIN tələb edilir"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Kilidləmədən sonra parol tələb edilir"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Kilidləmədən sonra model tələb edilir"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Güncəllənmə qeyri-işlək saatlarda quraşdırılacaq"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Qoruma lazımdır. PIN bir müddət işlənməyib."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Qoruma lazımdır. Parol bir müddət işlənməyib."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Qoruma lazımdır. Model bir müddət işlənməyib."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Qabarcıq"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analoq"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Davam etmək üçün cihazınızın kilidini açın"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Güncəllənməni sonra quraşdırmaq üçün PIN daxil edin"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Güncəllənməni sonra quraşdırmaq üçün parol daxil edin"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Güncəllənməni sonra quraşdırmaq üçün model çəkin"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Cihaz güncəlləndi. Davam etmək üçün PIN daxil edin."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Cihaz güncəlləndi. Davam etmək üçün parol daxil edin."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Cihaz güncəlləndi. Davam etmək üçün model çəkin."</string>
 </resources>
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 6e2dd24..72067e7 100644
--- a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml
@@ -27,7 +27,7 @@
     <string name="keyguard_enter_your_password" msgid="7225626204122735501">"Unesite lozinku"</string>
     <string name="keyguard_enter_password" msgid="6483623792371009758">"Unesite lozinku"</string>
     <string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Nevažeća kartica."</string>
-    <string name="keyguard_charged" msgid="5478247181205188995">"Napunjena je"</string>
+    <string name="keyguard_charged" msgid="5478247181205188995">"Napunjeno"</string>
     <string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Bežično punjenje"</string>
     <string name="keyguard_plugged_in_dock" msgid="2122073051904360987">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Puni se"</string>
     <string name="keyguard_plugged_in" msgid="8169926454348380863">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Puni se"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN je obavezan posle zaključavanja"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Lozinka je obavezna posle zaključavanja"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Šablon je obavezan posle zaključavanja"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Ažuriranje se instalira tokom neaktivnosti"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Potrebna je dodatna zaštita. PIN dugo nije korišćen."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Potrebna je dodatna zaštita. Lozinka dugo nije korišćena."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Potrebna je dodatna zaštita. Šablon dugo nije korišćen."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Mehurići"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogni"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Otključajte uređaj da biste nastavili"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Unesite PIN da biste kasnije istalirali ažuriranje"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Unesite lozinku da biste kasnije instalirali ažuriranje"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Nacrtajte šablon da biste kasnije instalirali ažuriranje"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Uređaj je ažuriran. Unesite PIN da biste nastavili."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Uređaj je ažuriran. Unesite lozinku da biste nastavili."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Uređaj je ažuriran. Nacrtajte šablon da biste nastavili."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-be/strings.xml b/packages/SystemUI/res-keyguard/values-be/strings.xml
index 4781c3a..12c693f 100644
--- a/packages/SystemUI/res-keyguard/values-be/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-be/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Пасля блакіроўкі неабходна ўвесці PIN-код"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Пасля блакіроўкі неабходна ўвесці пароль"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Пасля блакіроўкі неабходна ўвесці ўзор разблакіроўкі"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Абнаўленне ўсталюецца, калі прылада будзе неактыўная"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Патрабуецца дадатковая праверка. Даўно не выкарыстоўваўся PIN-код."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Патрабуецца дадатковая праверка. Даўно не выкарыстоўваўся пароль."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Патрабуецца дадатковая праверка. Даўно не выкарыстоўваўся ўзор разблакіроўкі."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Бурбалкі"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Са стрэлкамі"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Каб працягнуць, разблакіруйце прыладу"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Увядзіце PIN-код, каб усталяваць абнаўленне пазней"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Увядзіце пароль, каб усталяваць абнаўленне пазней"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Увядзіце ўзор разблакіроўкі, каб усталяваць абнаўленне пазней"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Прылада абноўлена. Каб працягнуць, увядзіце PIN-код."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Прылада абноўлена. Каб працягнуць, увядзіце пароль."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Прылада абноўлена. Каб працягнуць, увядзіце ўзор разблакіроўкі."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-bg/strings.xml b/packages/SystemUI/res-keyguard/values-bg/strings.xml
index 42965f6..6726d42 100644
--- a/packages/SystemUI/res-keyguard/values-bg/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bg/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"След заключването се изисква ПИН код"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"След заключването се изисква парола"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"След заключването се изисква фигура"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Актуализацията ще се инсталира при неактивност"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Изисква се допъл. защита. ПИН кодът не е ползван скоро."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Изисква се допъл. защита. Паролата не е ползвана скоро."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Изисква се допъл. защита. Фигурата не е ползвана скоро."</string>
@@ -124,5 +125,11 @@
     <string name="clock_title_default" msgid="6342735240617459864">"Стандартен"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Балонен"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Аналогов"</string>
-    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Отключете устройството си, за да продължите"</string>
+    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Отключете устройството, за да продължите"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Въведете ПИН код, за да инсталирате актуализацията по-късно"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Въведете парола, за да инсталирате актуализацията по-късно"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Начертайте фигура, за да инсталирате актуализацията по-късно"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Устройството е актуализирано. Въведете ПИН код, за да продължите."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Устройството е актуализирано. Въведете парола, за да продължите."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Устройството е актуализирано. Начертайте фигура, за да продължите."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-bn/strings.xml b/packages/SystemUI/res-keyguard/values-bn/strings.xml
index 4dcceab..457f85d 100644
--- a/packages/SystemUI/res-keyguard/values-bn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bn/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"লকডাউন হওয়ার পরে পিন দিতে হবে"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"লকডাউন হওয়ার পরে পাসওয়ার্ড দিতে হবে"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"লকডাউন হওয়ার পরে প্যাটার্ন দিতে হবে"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"ডিভাইস অ্যাক্টিভ না থাকাকালীন আপডেট ইনস্টল হবে"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"অতিরিক্ত সুরক্ষা দরকার। পিন কিছুক্ষণ ব্যবহার করা হয়নি।"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"অতিরিক্ত সুরক্ষা দরকার। পাসওয়ার্ড কিছুক্ষণ ব্যবহার করা হয়নি।"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"অতিরিক্ত সুরক্ষা দরকার। প্যাটার্ন কিছুক্ষণ ব্যবহার করা হয়নি।"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"বাবল"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"অ্যানালগ"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"চালিয়ে যেতে আপনার ডিভাইস আনলক করুন"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"পরে ইনস্টল আপডেট করতে পিন লিখুন"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"পরে আপডেট ইনস্টল করতে পাসওয়ার্ড লিখুন"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"পরে আপডেট ইনস্টল করতে প্যাটার্ন আঁকুন"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"ডিভাইস আপডেট করা হয়েছে। চালিয়ে যেতে পিন লিখুন।"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"ডিভাইস আপডেট করা হয়েছে। চালিয়ে যেতে পাসওয়ার্ড লিখুন।"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"ডিভাইস আপডেট করা হয়েছে। চালিয়ে যেতে প্যাটার্ন আঁকুন।"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-bs/strings.xml b/packages/SystemUI/res-keyguard/values-bs/strings.xml
index 3770c7d..6dc147f 100644
--- a/packages/SystemUI/res-keyguard/values-bs/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bs/strings.xml
@@ -20,7 +20,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"Unesite svoj PIN"</string>
+    <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"Unesite PIN"</string>
     <string name="keyguard_enter_pin" msgid="8114529922480276834">"Unesite PIN"</string>
     <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Unesite uzorak"</string>
     <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Unesite uzorak"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN je potreban nakon zaključavanja"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Lozinka je potrebna nakon zaključavanja"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Uzorak je potreban nakon zaključavanja"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Ažuriranje će se instalirati u periodu neaktivnosti"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Potrebna je dodatna zaštita. PIN dugo nije unošen."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Potrebna je dodatna zaštita. Lozinka dugo nije unošena."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Potrebna je dodatna zaštita. Uzorak dugo nije unošen."</string>
@@ -98,8 +99,8 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"Otključavanje SIM-a…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"Unesite PIN koji sadrži 4 do 8 brojeva."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"PUK kôd treba sadržavati najmanje 8 brojeva."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"Pogrešno ste unijeli PIN <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_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_pin_attempts_dialog_message" msgid="544687656831558971">"Pogrešno ste napisali PIN <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_password_attempts_dialog_message" msgid="190984061975729494">"Pogrešno ste napisali 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>
     <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>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Mjehurići"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogni"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Otključajte uređaj da nastavite"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Unesite PIN da kasnije instalirate ažuriranje"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Unesite lozinku da kasnije instalirate ažuriranje"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Unesite uzorak da kasnije instalirate ažuriranje"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Uređaj je ažuriran. Unesite PIN da nastavite."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Uređaj je ažuriran. Unesite lozinku da nastavite."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Uređaj je ažuriran. Unesite uzorak da nastavite."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-ca/strings.xml b/packages/SystemUI/res-keyguard/values-ca/strings.xml
index 89c3635..8b901c0 100644
--- a/packages/SystemUI/res-keyguard/values-ca/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ca/strings.xml
@@ -61,7 +61,7 @@
     <string name="kg_wrong_pin" msgid="4160978845968732624">"El PIN no és correcte"</string>
     <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN incorrecte. Torna-hi."</string>
     <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"O desbloqueja amb l\'empremta digital"</string>
-    <string name="kg_fp_not_recognized" msgid="5183108260932029241">"L\'empremta no es reconeix"</string>
+    <string name="kg_fp_not_recognized" msgid="5183108260932029241">"L\'empremta no s\'ha reconegut"</string>
     <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"No s\'ha reconegut la cara"</string>
     <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Torna-ho a provar o introdueix el PIN"</string>
     <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Torna-ho a provar o introdueix la contrasenya"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Cal el PIN després del bloqueig de seguretat"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Cal la contrasenya després del bloqueig de seguretat"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Cal el patró després del bloqueig de seguretat"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"S\'actualitzarà durant les hores d\'inactivitat"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Cal més seguretat. Fa temps que no utilitzes el PIN."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Cal més seguretat. Contrasenya no utilitzada fa temps."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Cal més seguretat. Fa temps que no utilitzes el patró."</string>
@@ -98,8 +99,8 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"S\'està desbloquejant la targeta SIM…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"Escriu un PIN que tingui entre 4 i 8 números."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"El codi PUK ha de tenir 8 números o més."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"Has escrit el PIN <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_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_pin_attempts_dialog_message" msgid="544687656831558971">"Has escrit malament el PIN <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades. \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_password_attempts_dialog_message" msgid="190984061975729494">"Has escrit malament la contrasenya <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades. \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>
     <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.}many{El codi PIN de la SIM no és correcte. Et queden # intents. }other{El codi PIN de la SIM no és correcte. Et queden # intents. }}"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bombolla"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analògica"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Desbloqueja el dispositiu per continuar"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Introdueix el PIN per instal·lar l\'actualització més tard"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Introdueix la contrasenya per instal·lar l\'actualització més tard"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Dibuixa el patró per instal·lar l\'actualització més tard"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Dispositiu actualitzat. Introdueix el PIN per continuar."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Dispositiu actualitzat. Introdueix la contrasenya per continuar."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Dispositiu actualitzat. Dibuixa el patró per continuar."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-cs/strings.xml b/packages/SystemUI/res-keyguard/values-cs/strings.xml
index 22f46a0..b4c0343 100644
--- a/packages/SystemUI/res-keyguard/values-cs/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-cs/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Po uzamčení je třeba zadat PIN"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Po uzamčení je třeba zadat heslo"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Po uzamčení je třeba zadat gesto"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Aktualizace se nainstaluje v období neaktivity"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Je potřeba další krok. PIN dlouho nepoužit."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Je potřeba další krok. Heslo dlouho nepoužito."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Je potřeba další krok. Gesto dlouho nepoužito."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bublina"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogové"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Pokud chcete pokračovat, odemkněte zařízení"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Pokud aktualizaci chcete nainstalovat později, zadejte PIN"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Pokud aktualizaci chcete nainstalovat později, zadejte heslo"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Pokud aktualizaci chcete nainstalovat později, zadejte gesto"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Zařízení bylo aktualizováno. Pokud chcete pokračovat, zadejte PIN."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Zařízení bylo aktualizováno. Pokud chcete pokračovat, zadejte heslo."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Zařízení bylo aktualizováno. Pokud chcete pokračovat, zadejte gesto."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-da/strings.xml b/packages/SystemUI/res-keyguard/values-da/strings.xml
index 5f3c2e7..3840785 100644
--- a/packages/SystemUI/res-keyguard/values-da/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-da/strings.xml
@@ -73,10 +73,11 @@
     <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Lås op med adgangskode eller fingeraftryk"</string>
     <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Lås op med mønster eller fingeraftryk"</string>
     <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Enhed låst af arbejdspolitik af hensyn til sikkerhed"</string>
-    <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Pinkode er påkrævet efter brug af ekstralås"</string>
-    <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Adgangskode er påkrævet efter brug af ekstralås"</string>
-    <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Mønster er påkrævet efter brug af ekstralås"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Opdateringen installeres under inaktivitet"</string>
+    <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Pinkode er påkrævet efter brug af låsning"</string>
+    <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Adgangskode er påkrævet efter brug af låsning"</string>
+    <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Mønster er påkrævet efter brug af låsning"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Mere sikkerhed er påkrævet. Pinkoden er ikke blevet brugt i et stykke tid."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Mere sikkerhed er påkrævet. Adgangskoden er ikke blevet brugt i et stykke tid."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Mere sikkerhed er påkrævet. Mønsteret er ikke blevet brugt i et stykke tid."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Boble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Lås din enhed op for at fortsætte"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Angiv din pinkode for at installere opdateringen senere"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Angiv din adgangskode for at installere opdateringen senere"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Tegn dit mønster for at installere opdateringen senere"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Enheden er opdateret. Angiv din pinkode for at fortsætte."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Enheden er opdateret. Angiv din adgangskode for at fortsætte."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Enheden er opdateret. Tegn dit mønster for at fortsætte."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-de/strings.xml b/packages/SystemUI/res-keyguard/values-de/strings.xml
index 4e168e4..5d069ff 100644
--- a/packages/SystemUI/res-keyguard/values-de/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-de/strings.xml
@@ -21,14 +21,11 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"Gib deine PIN ein"</string>
-    <!-- no translation found for keyguard_enter_pin (8114529922480276834) -->
-    <skip />
+    <string name="keyguard_enter_pin" msgid="8114529922480276834">"Gib die PIN ein"</string>
     <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Muster eingeben"</string>
-    <!-- no translation found for keyguard_enter_pattern (7616595160901084119) -->
-    <skip />
+    <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Zeichne das Muster"</string>
     <string name="keyguard_enter_your_password" msgid="7225626204122735501">"Passwort eingeben"</string>
-    <!-- no translation found for keyguard_enter_password (6483623792371009758) -->
-    <skip />
+    <string name="keyguard_enter_password" msgid="6483623792371009758">"Gib das Passwort ein"</string>
     <string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Ungültige Karte."</string>
     <string name="keyguard_charged" msgid="5478247181205188995">"Aufgeladen"</string>
     <string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Kabelloses Laden"</string>
@@ -58,68 +55,39 @@
     <string name="error_disable_esim_msg" msgid="2441188596467999327">"Die eSim kann aufgrund eines Fehlers nicht deaktiviert werden."</string>
     <string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Eingabe"</string>
     <string name="kg_wrong_pattern" msgid="5907301342430102842">"Falsches Muster"</string>
-    <!-- no translation found for kg_wrong_pattern_try_again (3603524940234151881) -->
-    <skip />
+    <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Muster ist falsch. Versuche es noch einmal."</string>
     <string name="kg_wrong_password" msgid="4143127991071670512">"Falsches Passwort"</string>
-    <!-- no translation found for kg_wrong_password_try_again (6602878676125765920) -->
-    <skip />
+    <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Passwort ist falsch. Versuche es noch einmal."</string>
     <string name="kg_wrong_pin" msgid="4160978845968732624">"Falsche PIN"</string>
-    <!-- no translation found for kg_wrong_pin_try_again (3129729383303430190) -->
+    <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN ist falsch. Versuche es noch einmal.."</string>
+    <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Oder Gerät per Fingerabdruck entsperren"</string>
+    <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Fingerabdruck nicht erkannt"</string>
+    <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"Gesicht nicht erkannt"</string>
+    <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Bitte noch einmal versuchen oder PIN eingeben"</string>
+    <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Bitte noch einmal versuchen oder Passwort eingeben"</string>
+    <string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Bitte noch einmal versuchen oder Muster zeichnen"</string>
+    <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Nach zu vielen Versuchen wird die PIN abgefragt"</string>
+    <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Nach zu vielen Versuchen wird das Passwort abgefragt"</string>
+    <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Nach zu vielen Versuchen wird das Muster abgefragt"</string>
+    <string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Entsperrung mit PIN/Fingerabdruck"</string>
+    <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Entsperrung mit Passwort/Fingerabdruck"</string>
+    <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Entsperrung mit Muster/Fingerabdruck"</string>
+    <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"Gerät vom Admin aus Sicherheitsgründen gesperrt"</string>
+    <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Nach einer Sperre muss die PIN eingegeben werden"</string>
+    <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Nach einer Sperre muss das Passwort eingegeben werden"</string>
+    <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Nach einer Sperre muss das Muster gezeichnet werden"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
     <skip />
-    <!-- no translation found for kg_wrong_input_try_fp_suggestion (3143861542242024833) -->
-    <skip />
-    <!-- no translation found for kg_fp_not_recognized (5183108260932029241) -->
-    <skip />
-    <!-- no translation found for bouncer_face_not_recognized (1666128054475597485) -->
-    <skip />
-    <!-- no translation found for kg_bio_try_again_or_pin (4752168242723808390) -->
-    <skip />
-    <!-- no translation found for kg_bio_try_again_or_password (1473132729225398039) -->
-    <skip />
-    <!-- no translation found for kg_bio_try_again_or_pattern (4867893307468801501) -->
-    <skip />
-    <!-- no translation found for kg_bio_too_many_attempts_pin (5850845723433047605) -->
-    <skip />
-    <!-- no translation found for kg_bio_too_many_attempts_password (5551690347827728042) -->
-    <skip />
-    <!-- no translation found for kg_bio_too_many_attempts_pattern (736884689355181602) -->
-    <skip />
-    <!-- no translation found for kg_unlock_with_pin_or_fp (5635161174698729890) -->
-    <skip />
-    <!-- no translation found for kg_unlock_with_password_or_fp (2251295907826814237) -->
-    <skip />
-    <!-- no translation found for kg_unlock_with_pattern_or_fp (2391870539909135046) -->
-    <skip />
-    <!-- no translation found for kg_prompt_after_dpm_lock (6002804765868345917) -->
-    <skip />
-    <!-- no translation found for kg_prompt_after_user_lockdown_pin (5374732179740050373) -->
-    <skip />
-    <!-- no translation found for kg_prompt_after_user_lockdown_password (9097968458291129795) -->
-    <skip />
-    <!-- no translation found for kg_prompt_after_user_lockdown_pattern (215072203613597906) -->
-    <skip />
-    <!-- no translation found for kg_prompt_unattended_update (8223448855578632202) -->
-    <skip />
-    <!-- no translation found for kg_prompt_pin_auth_timeout (5868644725126275245) -->
-    <skip />
-    <!-- no translation found for kg_prompt_password_auth_timeout (5809110458491920871) -->
-    <skip />
-    <!-- no translation found for kg_prompt_pattern_auth_timeout (1860605401869262178) -->
-    <skip />
-    <!-- no translation found for kg_prompt_auth_timeout (6620679830980315048) -->
-    <skip />
-    <!-- no translation found for kg_face_locked_out (2751559491287575) -->
-    <skip />
-    <!-- no translation found for kg_fp_locked_out (6228277682396768830) -->
-    <skip />
-    <!-- no translation found for kg_trust_agent_disabled (5400691179958727891) -->
-    <skip />
-    <!-- no translation found for kg_primary_auth_locked_out_pin (5492230176361601475) -->
-    <skip />
-    <!-- no translation found for kg_primary_auth_locked_out_pattern (8266214607346180952) -->
-    <skip />
-    <!-- no translation found for kg_primary_auth_locked_out_password (6170245108400198659) -->
-    <skip />
+    <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Zusätzliche Sicherheitsmaßnahme erforderlich. Die PIN wurde länger nicht genutzt."</string>
+    <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Zusätzliche Sicherheitsmaßnahme erforderlich. Passwort wurde länger nicht genutzt."</string>
+    <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Zusätzliche Sicherheitsmaßnahme erforderlich. Muster wurde länger nicht genutzt."</string>
+    <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Zusätzliche Sicherheitsmaßnahme erforderlich. Gerät wurde länger nicht entsperrt."</string>
+    <string name="kg_face_locked_out" msgid="2751559491287575">"Entsperrung mit Gesicht geht nicht. Zu oft versucht."</string>
+    <string name="kg_fp_locked_out" msgid="6228277682396768830">"Entsperrung mit Finger geht nicht. Zu oft versucht."</string>
+    <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Trust Agent nicht verfügbar"</string>
+    <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Zu viele Versuche mit falscher PIN"</string>
+    <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Zu viele Versuche mit falschem Muster"</string>
+    <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Zu viele Versuche mit falschem Passwort"</string>
     <string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{In # Sekunde noch einmal versuchen.}other{In # Sekunden noch einmal versuchen.}}"</string>
     <string name="kg_sim_pin_instructions" msgid="1942424305184242951">"Gib die SIM-PIN ein"</string>
     <string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Gib die SIM-PIN für \"<xliff:g id="CARRIER">%1$s</xliff:g>\" ein."</string>
@@ -142,12 +110,9 @@
     <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>
     <string name="airplane_mode" msgid="2528005343938497866">"Flugmodus"</string>
-    <!-- no translation found for kg_prompt_reason_restart_pattern (3321211830602827742) -->
-    <skip />
-    <!-- no translation found for kg_prompt_reason_restart_pin (2672166323886110512) -->
-    <skip />
-    <!-- no translation found for kg_prompt_reason_restart_password (3967993994418885887) -->
-    <skip />
+    <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Nach Geräteneustart ist das Muster erforderlich"</string>
+    <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Nach Geräteneustart ist die PIN erforderlich"</string>
+    <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Nach Geräteneustart ist das Passwort erforderlich"</string>
     <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Verwende für mehr Sicherheit stattdessen dein Muster"</string>
     <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Verwende für mehr Sicherheit stattdessen deine PIN"</string>
     <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Verwende für mehr Sicherheit stattdessen dein Passwort"</string>
@@ -161,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Gerät entsperren, um fortzufahren"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Gib deine PIN ein, um das Update später zu installieren"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Gib dein Passwort ein, um das Update später zu installieren"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Zeichne dein Muster, um das Update später zu installieren"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Gerät aktualisiert. Gib deine PIN ein, um fortzufahren."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Gerät aktualisiert. Gib dein Passwort ein, um fortzufahren."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Gerät aktualisiert. Zeichne dein Muster, um fortzufahren."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-el/strings.xml b/packages/SystemUI/res-keyguard/values-el/strings.xml
index 23e5668..f02be89 100644
--- a/packages/SystemUI/res-keyguard/values-el/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-el/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Απαιτείται PIN μετά από κλείδωμα"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Απαιτείται κωδικός πρόσβασης μετά από κλείδωμα"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Απαιτείται μοτίβο μετά από κλείδωμα"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Η ενημέρωση θα εγκατασταθεί κατά τις ανενεργές ώρες"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Απαιτ. πρόσθ. ασφάλ. Το PIN έχει καιρό να χρησιμοπ."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Απαιτ. πρόσθ. ασφάλ. Ο κωδ. πρ. έχει καιρό να χρησ."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Απαιτ. πρόσθ. ασφάλ. Το μοτίβο έχει καιρό να χρησιμ."</string>
@@ -98,7 +99,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"Ξεκλείδωμα SIM…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"Πληκτρολογήστε έναν αριθμό PIN που να αποτελείται από 4 έως 8 αριθμούς."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"Ο κωδικός PUK θα πρέπει να περιέχει τουλάχιστον 8 αριθμούς."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"Έχετε πληκτρολογήσει τον αριθμό PIN εσφαλμένα <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_pin_attempts_dialog_message" msgid="544687656831558971">"Έχετε πληκτρολογήσει το PIN σας εσφαλμένα <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_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>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Συννεφάκι"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Αναλογικό"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Ξεκλειδώστε τη συσκευή σας για να συνεχίσετε"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Εισαγάγετε το PIN για να εγκαταστήσετε την ενημέρωση αργότερα"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Εισαγ. τον κωδ. πρόσβασης για να εγκαταστήσετε την ενημέρωση αργότερα"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Σχεδιάστε το μοτίβο για να εγκαταστήσετε την ενημέρωση αργότερα"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Η συσκευή ενημερώθηκε. Εισαγάγετε το PIN για να συνεχίσετε."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Η συσκευή ενημερώθηκε. Εισαγάγ. τον κωδ. πρόσβασης για να συνεχίσετε."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Η συσκευή ενημερώθηκε. Σχεδιάστε το μοτίβο για να συνεχίσετε."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml
index 10b82a4..ab7208b 100644
--- a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN is required after lockdown"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Password is required after lockdown"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pattern is required after lockdown"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Update will be installed during inactive hours"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Added security required. PIN not used for a while."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Added security required. Password not used for a while."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Added security required. Pattern not used for a while."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogue"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Unlock your device to continue"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Enter PIN to install update later"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Enter password to install update later"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Draw pattern to install update later"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Device updated Enter PIN to continue."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Device updated Enter password to continue."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Device updated Draw pattern to continue."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml
index e134d9e..480bcbb 100644
--- a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml
@@ -76,7 +76,7 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN is required after lockdown"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Password is required after lockdown"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pattern is required after lockdown"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Update will install during inactive hours"</string>
+    <string name="kg_prompt_unattended_update" msgid="4366635751738712452">"Update will install when device not in use"</string>
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Added security required. PIN not used for a while."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Added security required. Password not used for a while."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Added security required. Pattern not used for a while."</string>
@@ -125,4 +125,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Unlock your device to continue"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Enter PIN to install update later"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Enter password to install update later"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Draw pattern to install update later"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Device updated. Enter PIN to continue."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Device updated. Enter password to continue."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Device updated. Draw pattern to continue."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml
index 10b82a4..ab7208b 100644
--- a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN is required after lockdown"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Password is required after lockdown"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pattern is required after lockdown"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Update will be installed during inactive hours"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Added security required. PIN not used for a while."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Added security required. Password not used for a while."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Added security required. Pattern not used for a while."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogue"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Unlock your device to continue"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Enter PIN to install update later"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Enter password to install update later"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Draw pattern to install update later"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Device updated Enter PIN to continue."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Device updated Enter password to continue."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Device updated Draw pattern to continue."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml
index 10b82a4..ab7208b 100644
--- a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN is required after lockdown"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Password is required after lockdown"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pattern is required after lockdown"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Update will be installed during inactive hours"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Added security required. PIN not used for a while."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Added security required. Password not used for a while."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Added security required. Pattern not used for a while."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogue"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Unlock your device to continue"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Enter PIN to install update later"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Enter password to install update later"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Draw pattern to install update later"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Device updated Enter PIN to continue."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Device updated Enter password to continue."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Device updated Draw pattern to continue."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml b/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml
index ff9d4f3..b8e89f4 100644
--- a/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml
@@ -76,7 +76,7 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‎‏‏‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎PIN is required after lockdown‎‏‎‎‏‎"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‏‏‎Password is required after lockdown‎‏‎‎‏‎"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎‏‏‎‏‎‎‏‎‎Pattern is required after lockdown‎‏‎‎‏‎"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎Update will install during inactive hours‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_unattended_update" msgid="4366635751738712452">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎‎‎Update will install when device not in use‎‏‎‎‏‎"</string>
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎Added security required. PIN not used for a while.‎‏‎‎‏‎"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎Added security required. Password not used for a while.‎‏‎‎‏‎"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎Added security required. Pattern not used for a while.‎‏‎‎‏‎"</string>
@@ -125,4 +125,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎Bubble‎‏‎‎‏‎"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎Analog‎‏‎‎‏‎"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎Unlock your device to continue‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎Enter PIN to install update later‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‎Enter password to install update later‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‎Draw pattern to install update later‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎Device updated. Enter PIN to continue.‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎Device updated. Enter password to continue.‎‏‎‎‏‎"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‎‎‏‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‎‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‎‎Device updated. Draw pattern to continue.‎‏‎‎‏‎"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
index be1c44f..2aa9c04 100644
--- a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Se requiere el PIN después del bloqueo"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Se requiere la contraseña después del bloqueo"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Se requiere el patrón después del bloqueo"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"La actualización se instala en horas de inactividad"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Reforzar seguridad. PIN sin uso mucho tiempo."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Reforzar seguridad. Contraseña sin uso mucho tiempo."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Reforzar seguridad. Patrón sin uso mucho tiempo."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Burbuja"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analógico"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Desbloquea tu dispositivo para continuar"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Ingresa el PIN para instalar la actualización más tarde."</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Ingresa la contraseña para instalar la actualización más tarde."</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Dibuja el patrón para instalar la actualización más tarde."</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Dispositivo actualizado. Ingresa el PIN para continuar."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Dispositivo actualizado. Ingresa la contraseña para continuar."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Dispositivo actualizado. Dibuja el patrón para continuar."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-es/strings.xml b/packages/SystemUI/res-keyguard/values-es/strings.xml
index aa09cf9..78ecc85 100644
--- a/packages/SystemUI/res-keyguard/values-es/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-es/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Se necesita el PIN después del bloqueo"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Se necesita la contraseña después del bloqueo"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Se necesita el patrón después del bloqueo"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"La actualización se instalará en horas de inactividad"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Se debe reforzar la seguridad. PIN no usado en mucho tiempo."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Se debe reforzar la seguridad. Contraseña no usada en mucho tiempo."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Se debe reforzar la seguridad. Patrón no usado en mucho tiempo."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Burbuja"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analógico"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Desbloquea tu dispositivo para continuar"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Introduce el PIN para instalar la actualización más tarde"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Introduce la contraseña para instalar la actualización más tarde"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Dibuja el patrón para instalar la actualización más tarde"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Dispositivo actualizado. Introduce el PIN para continuar."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Dispositivo actualizado. Introduce la contraseña para continuar."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Dispositivo actualizado. Dibuja el patrón para continuar."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-et/strings.xml b/packages/SystemUI/res-keyguard/values-et/strings.xml
index d6c7f3f..26ead1f 100644
--- a/packages/SystemUI/res-keyguard/values-et/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-et/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Pärast lukustamist on PIN-kood nõutav"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Pärast lukustamist on parool nõutav"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pärast lukustamist on muster nõutav"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Värskendus installitakse mitteaktiivsete tundide ajal"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Turvalisuse suurendamine on nõutav. PIN-koodi ei ole mõnda aega kasutatud."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Turvalisuse suurendamine on nõutav. Parooli ei ole mõnda aega kasutatud."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Turvalisuse suurendamine on nõutav. Mustrit ei ole mõnda aega kasutatud."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Mull"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analoog"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Jätkamiseks avage oma seade"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Sisestage PIN-kood, et värskendus hiljem installida"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Sisestage parool, et värskendus hiljem installida"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Joonistage muster, et värskendus hiljem installida"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Seadet värskendati. Jätkamiseks sisestage PIN-kood."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Seadet värskendati. Jätkamiseks sisestage parool."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Seadet värskendati. Jätkamiseks joonistage muster."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-eu/strings.xml b/packages/SystemUI/res-keyguard/values-eu/strings.xml
index be03ec4..52d2336 100644
--- a/packages/SystemUI/res-keyguard/values-eu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-eu/strings.xml
@@ -41,7 +41,7 @@
     <string name="keyguard_missing_sim_instructions" msgid="7735360104844653246">"Gehitu SIM bat."</string>
     <string name="keyguard_missing_sim_instructions_long" msgid="3451467338947610268">"SIMa falta da, edo ezin da irakurri. Gehitu SIM bat."</string>
     <string name="keyguard_permanent_disabled_sim_message_short" msgid="3955052454216046100">"Ezin da erabili SIMa."</string>
-    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5034635040020685428">"Betiko desaktibatu da SIMa.\n Jarri harremanetan operadorearekin beste SIM bat eskuratzeko."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5034635040020685428">"Betiko desaktibatu da SIMa.\n Jarri operadorearekin harremanetan beste SIM bat eskuratzeko."</string>
     <string name="keyguard_sim_locked_message" msgid="7095293254587575270">"SIMa blokeatuta dago."</string>
     <string name="keyguard_sim_puk_locked_message" msgid="2503428315518592542">"SIMa PUKaren bidez desblokeatu behar da."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="8489092646014631659">"SIMa desblokeatzen…"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PINa behar da blokeoa desgaitu ostean"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Pasahitza behar da blokeoa desgaitu ostean"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Eredua behar da blokeoa desgaitu ostean"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Inaktibo egon ohi den tarte batean instalatuko da eguneratzea"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Segurtasuna areagotu behar da. PINa ez da erabili aldi batez."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Segurtasuna areagotu behar da. Pasahitza ez da erabili aldi batez."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Segurtasuna areagotu behar da. Eredua ez da erabili aldi batez."</string>
@@ -92,7 +93,7 @@
     <string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"Idatzi \"<xliff:g id="CARRIER">%1$s</xliff:g>\" operadorearen SIM txartelaren PINa."</string>
     <string name="kg_sim_lock_esim_instructions" msgid="5577169988158738030">"<xliff:g id="PREVIOUS_MSG">%1$s</xliff:g> Desgaitu eSIM txartela gailua zerbitzu mugikorrik gabe erabiltzeko."</string>
     <string name="kg_puk_enter_puk_hint" msgid="3005288372875367017">"Desgaitu egin da SIM txartela. Aurrera egiteko, idatzi PUK kodea. Xehetasunak lortzeko, jarri operadorearekin harremanetan."</string>
-    <string name="kg_puk_enter_puk_hint_multi" msgid="4876780689904862943">"Desgaitu egin da \"<xliff:g id="CARRIER">%1$s</xliff:g>\" operadorearen SIM txartela. Aurrera egiteko, idatzi PUK kodea. Xehetasunak jakiteko, jarri operadorearekin harremanetan."</string>
+    <string name="kg_puk_enter_puk_hint_multi" msgid="4876780689904862943">"Desgaitu egin da \"<xliff:g id="CARRIER">%1$s</xliff:g>\" operadorearen SIMa. Aurrera egiteko, idatzi PUK kodea. Xehetasunak jakiteko, jarri operadorearekin harremanetan."</string>
     <string name="kg_puk_enter_pin_hint" msgid="6028432138916150399">"Idatzi erabili nahi duzun PIN kodea"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="4261064020391799132">"Berretsi erabili nahi duzun PIN kodea"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"SIMa desblokeatzen…"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Puxikak"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogikoa"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Aurrera egiteko, desblokeatu gailua"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Eguneratzea geroago instalatzeko, idatzi PINa"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Eguneratzea geroago instalatzeko, idatzi pasahitza"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Eguneratzea geroago instalatzeko, marraztu eredua"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Eguneratu egin da gailua. Aurrera egiteko, idatzi PINa."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Eguneratu egin da gailua. Aurrera egiteko, idatzi pasahitza."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Eguneratu egin da gailua. Aurrera egiteko, marraztu eredua."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-fa/strings.xml b/packages/SystemUI/res-keyguard/values-fa/strings.xml
index 91a15a4..1e7978e 100644
--- a/packages/SystemUI/res-keyguard/values-fa/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fa/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"بعداز قفل همه باید از پین استفاده کرد"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"بعداز قفل همه باید از گذرواژه استفاده کرد"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"بعداز قفل همه باید از الگو استفاده کرد"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"به‌روزرسانی درطول ساعات غیرفعال نصب خواهد شد"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"امنیت بیشتر لازم است. مدتی از پین استفاده نشده است."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"امنیت بیشتر لازم است. گذرواژه مدتی استفاده نشده است."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"امنیت بیشتر لازم است. مدتی از الگو استفاده نشده است."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"حباب"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"آنالوگ"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"برای ادامه، قفل دستگاهتان را باز کنید"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"برای نصب به‌روزرسانی در فرصتی دیگر، پین را وارد کنید"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"برای نصب به‌روزرسانی در فرصتی دیگر، گذرواژه را وارد کنید"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"برای نصب به‌روزرسانی در فرصتی دیگر، الگو را وارد کنید"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"دستگاه به‌روز شد. برای ادامه، پین را وارد کنید."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"دستگاه به‌روز شد. برای ادامه، گذرواژه را وارد کنید."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"دستگاه به‌روز شد. برای ادامه، الگو را وارد کنید."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-fi/strings.xml b/packages/SystemUI/res-keyguard/values-fi/strings.xml
index 7db4fea..2ec0c99 100644
--- a/packages/SystemUI/res-keyguard/values-fi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fi/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN-koodi tarvitaan lukitustilan jälkeen"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Salasana tarvitaan lukitustilan jälkeen"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Kuvio tarvitaan lukitustilan jälkeen"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Päivitys asennetaan käyttöajan ulkopuolella"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Lisäsuojausta tarvitaan. PIN-koodia ei ole käytetty."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Lisäsuojausta tarvitaan. Salasanaa ei ole käytetty."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Lisäsuojausta tarvitaan. Kuviota ei ole käytetty."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Kupla"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analoginen"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Jatka avaamalla laitteen lukitus"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Jos haluat asentaa päivityksen myöhemmin, lisää PIN-koodi"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Jos haluat asentaa päivityksen myöhemmin, lisää salasana"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Jos haluat asentaa päivityksen myöhemmin, piirrä kuvio"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Laite päivitetty. Jatka lisäämällä PIN-koodi."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Laite päivitetty. Jatka lisäämällä salasana."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Laite päivitetty. Jatka piirtämällä kuvio."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml
index 4eec915..b0bfa33 100644
--- a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Le NIP est requis après le verrouillage"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Le mot de passe est requis après le verrouillage"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Le schéma est requis après le verrouillage"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"La MAJ sera installée durant les heures d\'inactivité"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Plus de sécurité requise. NIP non utilisé pour un temps."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Plus de sécurité requise. MDP non utilisé pour un temps."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Plus de sécurité requise. Schéma non utilisé pour un temps."</string>
@@ -124,5 +125,11 @@
     <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>
-    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Déverrouiller votre appareil pour continuer"</string>
+    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Déverrouillez votre appareil pour continuer"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Entrez le NIP pour installer la mise à jour plus tard"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Entrez le mot de passe pour installer la mise à jour plus tard"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Dessinez le schéma pour installer la mise à jour plus tard"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Appareil mis à jour. Entrez le NIP pour continuer."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Appareil mis à jour. Entrez le mot de passe pour continuer."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Appareil mis à jour. Dessinez le schéma pour continuer."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-fr/strings.xml b/packages/SystemUI/res-keyguard/values-fr/strings.xml
index bef6105..5161832 100644
--- a/packages/SystemUI/res-keyguard/values-fr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fr/strings.xml
@@ -20,9 +20,9 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"Saisissez le code d\'accès"</string>
+    <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"Saisissez votre code"</string>
     <string name="keyguard_enter_pin" msgid="8114529922480276834">"Saisissez le code"</string>
-    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Tracez le schéma"</string>
+    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Tracez votre schéma"</string>
     <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Dessinez un schéma"</string>
     <string name="keyguard_enter_your_password" msgid="7225626204122735501">"Saisissez votre mot de passe"</string>
     <string name="keyguard_enter_password" msgid="6483623792371009758">"Saisissez le mot de passe"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Code requis après un blocage"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Mot de passe requis après un blocage"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Schéma requis après un blocage"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"La mise à jour sera installée pendant les heures d\'inactivité"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Code inutilisé depuis un moment. Renforcez la sécurité."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Mot de passe inutilisé depuis un moment. Renforcez la sécurité."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Schéma inutilisé depuis un moment. Renforcez la sécurité."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bulle"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogique"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Déverrouillez votre appareil pour continuer"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Saisissez le code pour installer la mise à jour plus tard"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Saisissez le mot de passe pour installer la mise à jour plus tard"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Dessinez le schéma pour installer la mise à jour plus tard"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Appareil mis à jour. Saisissez le code pour continuer."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Appareil mis à jour. Saisissez le mot de passe pour continuer."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Appareil mis à jour. Dessinez le schéma pour continuer."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-gl/strings.xml b/packages/SystemUI/res-keyguard/values-gl/strings.xml
index 6f4b667..e33a899 100644
--- a/packages/SystemUI/res-keyguard/values-gl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-gl/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Requírese o PIN tras o bloqueo"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Requírese o contrasinal tras o bloqueo"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Requírese o padrón tras o bloqueo"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"A actualización instalarase durante a inactividade"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Requírese seguranza adicional. O PIN non se usou desde hai tempo."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Requírese seguranza adicional. O contrasinal non se usou desde hai tempo."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Requírese seguranza adicional. O padrón non se usou desde hai tempo."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Burbulla"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analóxico"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Desbloquea o dispositivo para continuar"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Mete o PIN para instalar a actualización máis tarde"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Mete o contrasinal para instalar a actualización máis tarde"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Debuxa o padrón para instalar a actualización máis tarde"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Actualizouse o dispositivo. Mete o PIN para continuar."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Actualizouse o dispositivo. Mete o contrasinal para continuar."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Actualizouse o dispositivo. Debuxa o padrón para continuar."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-gu/strings.xml b/packages/SystemUI/res-keyguard/values-gu/strings.xml
index 5c2d09b..1d806ca 100644
--- a/packages/SystemUI/res-keyguard/values-gu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-gu/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"પિન પછી પાસવર્ડ આવશ્યક છે"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"લૉકડાઉન પછી પાસવર્ડ આવશ્યક છે"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"પૅટર્ન પછી પાસવર્ડ આવશ્યક છે"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"નિષ્ક્રિયતાના સમય દરમિયાન અપડેટ ઇન્સ્ટૉલ થશે"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"વધારાની સુરક્ષા આવશ્યક છે. થોડા સમય માટે પિનનો ઉપયોગ થયો નથી."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"વધારાની સુરક્ષા આવશ્યક છે. થોડા સમય માટે પાસવર્ડનો ઉપયોગ થયો નથી."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"વધારાની સુરક્ષા આવશ્યક છે. થોડા સમય માટે પૅટર્નનો ઉપયોગ થયો નથી."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"બબલ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"એનાલોગ"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ચાલુ રાખવા માટે તમારા ડિવાઇસને અનલૉક કરો"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"પછીથી અપડેટ ઇન્સ્ટૉલ કરવા માટે પિન દાખલ કરો"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"પછીથી અપડેટ ઇન્સ્ટૉલ કરવા માટે પાસવર્ડ દાખલ કરો"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"પછીથી અપડેટ ઇન્સ્ટૉલ કરવા માટે પૅટર્ન દોરો"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"ડિવાઇસ અપડેટ કર્યું. ચાલુ રાખવા માટે પિન દાખલ કરો."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"ડિવાઇસ અપડેટ કર્યું. ચાલુ રાખવા માટે પાસવર્ડ દાખલ કરો."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"ડિવાઇસ અપડેટ કર્યું. ચાલુ રાખવા માટે પૅટર્ન દોરો."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-hi/strings.xml b/packages/SystemUI/res-keyguard/values-hi/strings.xml
index 52b204f..808950e 100644
--- a/packages/SystemUI/res-keyguard/values-hi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hi/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"लॉकडाउन के बाद, पिन डालना ज़रूरी है"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"लॉकडाउन के बाद, पासवर्ड डालना ज़रूरी है"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"लॉकडाउन के बाद, पैटर्न ड्रॉ करना ज़रूरी है"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"इनऐक्टिव रहने के दौरान, अपडेट इंस्टॉल किया जाएगा"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"अतिरिक्त सुरक्षा ज़रूरी है. कुछ समय से पिन नहीं डाला गया."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"अतिरिक्त सुरक्षा ज़रूरी है. कुछ समय से पासवर्ड नहीं डाला गया."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"अतिरिक्त सुरक्षा ज़रूरी है. कुछ समय से पैटर्न ड्रॉ नहीं किया गया."</string>
@@ -98,7 +99,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"सिम अनलॉक हो रहा है…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"कोई ऐसा पिन लिखें, जिसमें 4 से 8 अंक हों."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"PUK कोड 8 या ज़्यादा संख्या वाला होना चाहिए."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"आप अपना पिन <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_pin_attempts_dialog_message" msgid="544687656831558971">"<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_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>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"बबल"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"एनालॉग"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"जारी रखने के लिए डिवाइस अनलॉक करें"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"अपडेट को बाद में इंस्टॉल करने के लिए पिन डालें"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"अपडेट को बाद में इंस्टॉल करने के लिए पासवर्ड डालें"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"अपडेट को बाद में इंस्टॉल करने के लिए पैटर्न ड्रॉ करें"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"डिवाइस अपडेट किया गया. जारी रखने के लिए पिन डालें."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"डिवाइस अपडेट किया गया. जारी रखने के लिए पासवर्ड डालें."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"डिवाइस अपडेट किया गया. जारी रखने के लिए पैटर्न ड्रॉ करें."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-hr/strings.xml b/packages/SystemUI/res-keyguard/values-hr/strings.xml
index b5034d8..970ae5c 100644
--- a/packages/SystemUI/res-keyguard/values-hr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hr/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN je obavezan nakon zaključavanja"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Zaporka je obavezna nakon zaključavanja"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Uzorak je obavezan nakon zaključavanja"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Ažuriranje će se instalirati tijekom neaktivnosti"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Potrebna je dodatna sigurnost. PIN nije upotrijebljen duže vrijeme."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Potrebna je dodatna sigurnost. Zaporka nije upotrijebljena duže vrijeme."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Potrebna je dodatna sigurnost. Uzorak nije upotrijebljen duže vrijeme."</string>
@@ -98,7 +99,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"Otključavanje SIM-a…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"Unesite PIN koji ima od 4 do 8 brojeva."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"PUK kôd treba imati 8 brojeva ili više."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"Netočno ste unijeli PIN <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_pin_attempts_dialog_message" msgid="544687656831558971">"Netočno ste unijeli PIN <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_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>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Mjehurić"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogni"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Otključajte uređaj da biste nastavili"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Unesite PIN da biste ažuriranje instalirali kasnije"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Unesite zaporku da biste ažuriranje instalirali kasnije"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Nacrtajte uzorak da biste ažuriranje instalirali kasnije"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Uređaj je ažuriran. Unesite PIN da biste nastavili."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Uređaj je ažuriran. Unesite zaporku da biste nastavili."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Uređaj je ažuriran. Nacrtajte uzorak da biste nastavili."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-hu/strings.xml b/packages/SystemUI/res-keyguard/values-hu/strings.xml
index a98408c..bc0a98d 100644
--- a/packages/SystemUI/res-keyguard/values-hu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hu/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN-kód megadása szükséges a zárolás után"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Jelszó megadása szükséges a zárolás után"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Minta megadása szükséges a zárolás után"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"A frissítést inaktív időben telepíti a rendszer"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Fokozott biztonság szükséges. Régóta nem használta a PIN-t."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Fokozott biztonság szükséges. Régóta nem használta jelszavát."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Fokozott biztonság szükséges. Régóta nem használta a mintát."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Buborék"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analóg"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"A folytatáshoz oldja fel az eszközét"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"A frissítés később történő telepítéséhez adja meg a PIN-kódot"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"A frissítés később történő telepítéséhez adja meg a jelszót"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"A frissítés később történő telepítéséhez rajzolja le a mintát"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Eszköz frissítve. A folytatáshoz adja meg a PIN-kódot."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Eszköz frissítve. A folytatáshoz adja meg a jelszót."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Eszköz frissítve. A folytatáshoz rajzolja le a mintát."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-hy/strings.xml b/packages/SystemUI/res-keyguard/values-hy/strings.xml
index 9aa47a7..230c6ba 100644
--- a/packages/SystemUI/res-keyguard/values-hy/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hy/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Արգելափակումից հետո հարկավոր է մուտքագրել PIN կոդը"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Արգելափակումից հետո հարկավոր է մուտքագրել գաղտնաբառը"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Արգելափակումից հետո հարկավոր է գծել նախշը"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Թարմացումը կտեղադրվի ոչ ակտիվ ժամերին"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"PIN կոդը որոշ ժամանակ չի օգտագործվել։"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Գաղտնաբառը որոշ ժամանակ չի օգտագործվել։"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Նախշը որոշ ժամանակ չի օգտագործվել։"</string>
@@ -124,5 +125,11 @@
     <string name="clock_title_default" msgid="6342735240617459864">"Կանխադրված"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Պղպջակ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Անալոգային"</string>
-    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Շարունակելու համար ապակողպեք ձեր սարքը"</string>
+    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Շարունակելու համար ապակողպեք սարքը"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Թարմացումն ավելի ուշ տեղադրելու համար մուտքագրեք PIN կոդը"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Թարմացումն ավելի ուշ տեղադրելու համար մուտքագրեք գաղտնաբառը"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Թարմացումն ավելի ուշ տեղադրելու համար գծեք նախշը"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Սարքը թարմացվեց։ Շարունակելու համար մուտքագրեք PIN կոդը։"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Սարքը թարմացվեց։ Շարունակելու համար մուտքագրեք գաղտնաբառը։"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Սարքը թարմացվեց։ Շարունակելու համար գծեք նախշը։"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-in/strings.xml b/packages/SystemUI/res-keyguard/values-in/strings.xml
index 7af5eac..cf01634 100644
--- a/packages/SystemUI/res-keyguard/values-in/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-in/strings.xml
@@ -76,14 +76,15 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN diperlukan setelah kunci total"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Sandi diperlukan setelah kunci total"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pola diperlukan setelah kunci total"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Update akan diinstal selama jam tidak aktif"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Perlu keamanan tambahan. PIN tidak digunakan selama beberapa waktu."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Perlu keamanan tambahan. Sandi tidak digunakan selama beberapa waktu."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Perlu keamanan tambahan. Pola tidak digunakan selama beberapa waktu."</string>
     <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Perlu keamanan tambahan. Kunci perangkat tidak dibuka selama beberapa waktu."</string>
     <string name="kg_face_locked_out" msgid="2751559491287575">"Tidak dapat membuka kunci dengan wajah. Terlalu banyak upaya gagal."</string>
     <string name="kg_fp_locked_out" msgid="6228277682396768830">"Tidak dapat membuka kunci dengan sidik jari. Terlalu banyak upaya gagal."</string>
-    <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Perangkat dipercaya tidak tersedia"</string>
+    <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Perangkat tepercaya tidak tersedia"</string>
     <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Terlalu banyak upaya dengan PIN yang salah"</string>
     <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Terlalu banyak upaya dengan pola yang salah"</string>
     <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Terlalu banyak upaya dengan sandi yang salah"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Balon"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Buka kunci perangkat untuk melanjutkan"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Masukkan PIN untuk menginstal update nanti"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Masukkan sandi untuk menginstal update nanti"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Gambar pola untuk menginstal update nanti"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Perangkat diupdate. Masukkan PIN untuk melanjutkan."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Perangkat diupdate. Masukkan sandi untuk melanjutkan."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Perangkat diupdate. Gambar pola untuk melanjutkan."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-is/strings.xml b/packages/SystemUI/res-keyguard/values-is/strings.xml
index 1f8687f..ca36400 100644
--- a/packages/SystemUI/res-keyguard/values-is/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-is/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN-númers er krafist eftir læsingu"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Aðgangsorðs er krafist eftir læsingu"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Mynsturs er krafist eftir læsingu"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Uppfærslan verður sett upp í aðgerðaleysi"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Viðbótaröryggis krafist. PIN-númer var ekki notað um hríð."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Viðbótaröryggis krafist. Aðgangsorð var ekki notað um hríð."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Viðbótaröryggis krafist. Mynstur var ekki notað um hríð."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Blaðra"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Með vísum"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Taktu tækið úr lás til að halda áfram"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Sláðu inn PIN-númer til að setja uppfærsluna upp síðar"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Sláðu inn aðgangsorð til að setja uppfærsluna upp síðar"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Teiknaðu mynstur til að setja uppfærsluna upp síðar"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Tæki uppfært. Sláðu inn PIN-númer til að halda áfram."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Tæki uppfært. Sláðu inn aðgangsorð til að halda áfram."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Tæki uppfært. Teiknaðu mynstur til að halda áfram."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-it/strings.xml b/packages/SystemUI/res-keyguard/values-it/strings.xml
index bdfeda7..e46ae37 100644
--- a/packages/SystemUI/res-keyguard/values-it/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-it/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN richiesto dopo il blocco"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Password richiesta dopo il blocco"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Sequenza richiesta dopo il blocco"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Aggiornamento installato durante ore di inattività"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Occorre maggiore sicurezza. PIN non usato per un po\' di tempo."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Occorre maggiore sicurezza. Password non usata per un po\' di tempo."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Occorre maggiore sicurezza. Sequenza non usata per un po\' di tempo."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bolla"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogico"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Sblocca il dispositivo per continuare"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Inserisci il PIN per installare l\'aggiornamento più tardi"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Inserisci la password per installare l\'aggiornamento più tardi"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Inserisci la sequenza per installare l\'aggiornamento più tardi"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Dispositivo aggiornato. Inserisci il PIN per continuare."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Dispositivo aggiornato. Inserisci la password per continuare."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Dispositivo aggiornato. Inserisci la sequenza per continuare."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-iw/strings.xml b/packages/SystemUI/res-keyguard/values-iw/strings.xml
index 08cdd79..667bf9b 100644
--- a/packages/SystemUI/res-keyguard/values-iw/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-iw/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"נדרש קוד אימות לאחר הפעלת \'ללא \'ביטול נעילה בטביעת אצבע\'\'"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"נדרשת סיסמה לאחר הפעלת \'ללא \'ביטול נעילה בטביעת אצבע\'\'"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"נדרש קו ביטול נעילה לאחר הפעלת \'ללא \'ביטול נעילה בטביעת אצבע\'\'"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"העדכון יותקן במהלך השעות שבהן אתם לא משתמשים במכשיר"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"נדרשת אבטחה מוגברת. לא השתמשת בקוד אימות זמן מה."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"נדרשת אבטחה מוגברת. לא השתמשת בסיסמה זמן מה."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"נדרשת אבטחה מוגברת. לא השתמשת בקו ביטול נעילה זמן מה."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"בועה"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"אנלוגי"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"צריך לבטל את הנעילה של המכשיר כדי להמשיך"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"צריך להזין את קוד האימות כדי להתקין את העדכון מאוחר יותר"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"צריך להזין את הסיסמה כדי להתקין את העדכון מאוחר יותר"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"צריך למתוח את קו ביטול הנעילה כדי להתקין את העדכון מאוחר יותר"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"המכשיר עודכן. צריך להזין את קוד האימות כדי להמשיך."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"המכשיר עודכן. צריך להזין את הסיסמה כדי להמשיך."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"המכשיר עודכן. צריך למתוח את קו ביטול הנעילה כדי להמשיך."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-ja/strings.xml b/packages/SystemUI/res-keyguard/values-ja/strings.xml
index 05bd2ba..5230984 100644
--- a/packages/SystemUI/res-keyguard/values-ja/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ja/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ロックダウン後は PIN の入力が必要になります"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ロックダウン後はパスワードの入力が必要になります"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ロックダウン後はパターンの入力が必要になります"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"アップデートはアクティブでない時間帯にインストールされます"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"セキュリティ強化が必要: PIN がしばらく未使用です。"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"セキュリティ強化が必要: パスワードがしばらく未使用です。"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"セキュリティ強化が必要: パターンがしばらく未使用です。"</string>
@@ -112,9 +113,9 @@
     <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"デバイスの再起動後はパターンの入力が必要になります"</string>
     <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"デバイスの再起動後は PIN の入力が必要になります"</string>
     <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"デバイスの再起動後はパスワードの入力が必要になります"</string>
-    <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"セキュリティを強化するには代わりにパターンを使用してください"</string>
-    <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"セキュリティを強化するには代わりに PIN を使用してください"</string>
-    <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"セキュリティを強化するには代わりにパスワードを使用してください"</string>
+    <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"画面ロックを解除するにはパターンを入力してください"</string>
+    <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"画面ロックを解除するには PIN を入力してください"</string>
+    <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"画面ロックを解除するにはパスワードを入力してください"</string>
     <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"デバイスは管理者によりロックされています"</string>
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"デバイスは手動でロックされました"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"認識されませんでした"</string>
@@ -124,5 +125,11 @@
     <string name="clock_title_default" msgid="6342735240617459864">"デフォルト"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"バブル"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"アナログ"</string>
-    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"続行するにはデバイスのロックを解除してください"</string>
+    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"続行するにはデバイスのロックを解除します"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"アップデートを後でインストールするには、PIN を入力してください"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"アップデートを後でインストールするには、パスワードを入力してください"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"アップデートを後でインストールするには、パターンを入力してください"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"デバイスの更新が完了しました。PIN を入力して続行してください。"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"デバイスの更新が完了しました。パスワードを入力して続行してください。"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"デバイスの更新が完了しました。パターンを入力して続行してください。"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-ka/strings.xml b/packages/SystemUI/res-keyguard/values-ka/strings.xml
index 3060cb2..04a7b0d 100644
--- a/packages/SystemUI/res-keyguard/values-ka/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ka/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"დაბლოკვის შემდეგ საჭიროა PIN-კოდი"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"დაბლოკვის შემდეგ საჭიროა პაროლი"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"დაბლოკვის შემდეგ საჭიროა ნიმუში"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"განახლება დაყენდება არასამუშაო საათებში"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"საჭიროა დამ. უსაფრთ. PIN-კოდი ერთხანს არ გამოიყენ."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"საჭ. დამ. უსაფრთ. პაროლი ერთხანს არ გამოიყენება."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"საჭიროა დამ. უსაფრთ. ნიმუში ერთხანს არ გამოიყენება."</string>
@@ -124,5 +125,11 @@
     <string name="clock_title_default" msgid="6342735240617459864">"ნაგულისხმევი"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"ბუშტი"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ანალოგური"</string>
-    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"გასაგრძელებლად განბლოკეთ თქვენი მოწყობილობა"</string>
+    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"გასაგრძელებლად განბლოკეთ მოწყობილობა"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"განახლების მოგვიანებით ინსტალაციისთვის PIN-კოდი შეიყვანეთ"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"განახლების მოგვიანებით ინსტალაციისთვის პაროლი შეიყვანეთ"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"განახლების მოგვიანებით ინსტალაციისთვის ნიმუში დახაზეთ"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"მოწყობილობა განახლებულია. გასაგრძელებლად PIN-კოდი შეიყვანეთ."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"მოწყობილობა განახლებულია. გასაგრძელებლად პაროლი შეიყვანეთ."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"მოწყობილობა განახლებულია. გასაგრძელებლად ნიმუში დახაზეთ."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-kk/strings.xml b/packages/SystemUI/res-keyguard/values-kk/strings.xml
index ecf8350..deab7b8 100644
--- a/packages/SystemUI/res-keyguard/values-kk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-kk/strings.xml
@@ -31,7 +31,7 @@
     <string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Сымсыз зарядталуда"</string>
     <string name="keyguard_plugged_in_dock" msgid="2122073051904360987">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Зарядталып жатыр."</string>
     <string name="keyguard_plugged_in" msgid="8169926454348380863">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Зарядталуда"</string>
-    <string name="keyguard_plugged_in_charging_fast" msgid="4386594091107340426">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Жылдам зарядталуда"</string>
+    <string name="keyguard_plugged_in_charging_fast" msgid="4386594091107340426">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Жылдам зарядтау"</string>
     <string name="keyguard_plugged_in_charging_slowly" msgid="217655355424210">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Баяу зарядталуда"</string>
     <string name="keyguard_plugged_in_charging_limited" msgid="1053130519456324630">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Батареяны қорғау үшін зарядтау оңтайландырылды"</string>
     <string name="keyguard_plugged_in_incompatible_charger" msgid="3687961801947819076">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Зарядтау құрылғысына қатысты мәселе туындады."</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Құлыпталғаннан кейін PIN кодын енгізу қажет."</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Құлыпталғаннан кейін құпия сөз енгізу қажет."</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Құлыпталғаннан кейін өрнек енгізу қажет."</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Пайдаланылмаған кезде жаңартылады."</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Қауіпсіздікті күшейту қажет. PIN коды біраз уақыт қолданылмаған."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Қауіпсіздікті күшейту қажет. Құпия сөз біраз уақыт қолданылмаған."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Қауіпсіздікті күшейту қажет. Өрнек біраз уақыт қолданылмаған."</string>
@@ -124,5 +125,11 @@
     <string name="clock_title_default" msgid="6342735240617459864">"Әдепкі"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Көпіршік"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Аналогтық"</string>
-    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Жалғастыру үшін құрылғының құлпын ашыңыз"</string>
+    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Жалғастыру үшін құлыпты ашыңыз"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Жаңа нұсқаны кейінірек орнату үшін PIN кодын енгізіңіз"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Жаңа нұсқаны кейінірек орнату үшін құпия сөзді енгізіңіз"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Жаңа нұсқаны кейінірек орнату үшін өрнекті салыңыз"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Құрылғы жаңартылды. Жалғастыру үшін PIN кодын енгізіңіз."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Құрылғы жаңартылды. Жалғастыру үшін құпия сөзді енгізіңіз."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Құрылғы жаңартылды. Жалғастыру үшін өрнекті салыңыз."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-km/strings.xml b/packages/SystemUI/res-keyguard/values-km/strings.xml
index 4aa4798..1325151 100644
--- a/packages/SystemUI/res-keyguard/values-km/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-km/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ត្រូវការកូដ PIN បន្ទាប់ពីការចាក់សោ"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ត្រូវការពាក្យសម្ងាត់បន្ទាប់ពីការចាក់សោ"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ត្រូវការលំនាំបន្ទាប់ពីការចាក់សោ"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"នឹងដំឡើងកំណែថ្មីអំឡុងម៉ោងអសកម្ម"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ត្រូវការសុវត្ថិភាពបន្ថែម។ មិនបានប្រើកូដ PIN មួយរយៈ។"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ត្រូវការសុវត្ថិភាពបន្ថែម។ មិនបានប្រើពាក្យសម្ងាត់មួយរយៈ។"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ត្រូវការសុវត្ថិភាពបន្ថែម។ មិនបានប្រើលំនាំមួយរយៈ។"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"ពពុះ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"អាណាឡូក"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ដោះសោឧបករណ៍របស់អ្នកដើម្បីបន្ត"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"បញ្ចូលកូដ PIN ដើម្បីដំឡើងកំណែថ្មីនៅពេលក្រោយ"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"បញ្ចូលពាក្យសម្ងាត់ ដើម្បីដំឡើងកំណែថ្មីនៅពេលក្រោយ"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"គូរលំនាំ ដើម្បីដំឡើងកំណែថ្មីនៅពេលក្រោយ"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"ឧបករណ៍ត្រូវបានដំឡើងកំណែ។ សូមបញ្ចូលកូដ PIN ដើម្បីបន្ត។"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"ឧបករណ៍ត្រូវបានដំឡើងកំណែ។ សូមបញ្ចូលពាក្យសម្ងាត់ដើម្បីបន្ត។"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"ឧបករណ៍ត្រូវបានដំឡើងកំណែ។ សូមគូរលំនាំដើម្បីបន្ត។"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-kn/strings.xml b/packages/SystemUI/res-keyguard/values-kn/strings.xml
index 86a85ab..749ebb6 100644
--- a/packages/SystemUI/res-keyguard/values-kn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-kn/strings.xml
@@ -61,7 +61,7 @@
     <string name="kg_wrong_pin" msgid="4160978845968732624">"ಪಿನ್‌ ತಪ್ಪಾಗಿದೆ"</string>
     <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"ಪಿನ್ ತಪ್ಪಾಗಿದೆ, ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"ಅಥವಾ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌ನೊಂದಿಗೆ ಅನ್‌ಲಾಕ್ ಮಾಡಿ"</string>
-    <string name="kg_fp_not_recognized" msgid="5183108260932029241">"ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಅನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
+    <string name="kg_fp_not_recognized" msgid="5183108260932029241">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
     <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"ಮುಖವನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
     <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ ಪಿನ್ ಅನ್ನು ನಮೂದಿಸಿ"</string>
     <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ನಮೂದಿಸಿ"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ಲಾಕ್‌ಡೌನ್ ಮಾಡಿದ ನಂತರ ಪಿನ್ ಬಳಸುವ ಅಗತ್ಯವಿದೆ"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ಲಾಕ್‌ಡೌನ್‌ನ ನಂತರ ಪಾಸ್‌ವರ್ಡ್‌ನ ಅಗತ್ಯವಿದೆ"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ಲಾಕ್‌ಡೌನ್ ಮಾಡಿದ ನಂತರ ಪ್ಯಾಟರ್ನ್‌ ಬಳಸುವ ಅಗತ್ಯವಿದೆ"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"ನಿಷ್ಕ್ರಿಯ ಸಮಯದಲ್ಲಿ ಅಪ್‌ಡೇಟ್‌ ಇನ್‌ಸ್ಟಾಲ್ ಆಗುತ್ತದೆ"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ಹೆಚ್ಚುವರಿ ಸುರಕ್ಷತೆಯ ಅಗತ್ಯವಿದೆ. ಪಿನ್ ಅನ್ನು ಸ್ವಲ್ಪ ಕಾಲದಿಂದ ಬಳಸಿಲ್ಲ."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ಹೆಚ್ಚುವರಿ ಸುರಕ್ಷತೆಯ ಅಗತ್ಯವಿದೆ. ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಸ್ವಲ್ಪ ಕಾಲದಿಂದ ಬಳಸಿಲ್ಲ."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ಹೆಚ್ಚುವರಿ ಸುರಕ್ಷತೆಯ ಅಗತ್ಯವಿದೆ. ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಸ್ವಲ್ಪ ಕಾಲದಿಂದ ಬಳಸಿಲ್ಲ."</string>
@@ -87,7 +88,7 @@
     <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"ತಪ್ಪಾದ ಪಿನ್‌ನೊಂದಿಗೆ ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿರುವಿರಿ"</string>
     <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"ತಪ್ಪಾದ ಪ್ಯಾಟರ್ನ್‌ನೊಂದಿಗೆ ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿರುವಿರಿ"</string>
     <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"ತಪ್ಪಾದ ಪಾಸ್‌ವರ್ಡ್‌ನೊಂದಿಗೆ ಹಲವು ಬಾರಿ ಪ್ರಯತ್ನಿಸಿರುವಿರಿ"</string>
-    <string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# ಸೆಕೆಂಡಿನಲ್ಲಿ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.}one{# ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.}other{# ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.}}"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# ಸೆಕೆಂಡಿನ ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.}one{# ಸೆಕೆಂಡುಗಳ ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.}other{# ಸೆಕೆಂಡುಗಳ ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.}}"</string>
     <string name="kg_sim_pin_instructions" msgid="1942424305184242951">"ಸಿಮ್‌ ಪಿನ್‌ ನಮೂದಿಸಿ."</string>
     <string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" ಗಾಗಿ ಸಿಮ್ ಪಿನ್ ನಮೂದಿಸಿ."</string>
     <string name="kg_sim_lock_esim_instructions" msgid="5577169988158738030">"<xliff:g id="PREVIOUS_MSG">%1$s</xliff:g> ಮೊಬೈಲ್ ಸೇವೆ ಇಲ್ಲದೆ ಸಾಧನವನ್ನು ಬಳಸಲು eSIM ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ."</string>
@@ -98,9 +99,9 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"SIM ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"4 ರಿಂದ 8 ಸಂಖ್ಯೆಗಳಿರುವ ಪಿನ್‌ ಟೈಪ್ ಮಾಡಿ."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"PUK ಕೋಡ್ 8 ಅಥವಾ ಹೆಚ್ಚು ಸಂಖ್ಯೆಗಳನ್ನು ಹೊಂದಿರಬೇಕು."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"ನಿಮ್ಮ ಪಿನ್‌ ಅನ್ನು ನೀವು <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_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_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"ನಿಮ್ಮ ಪಿನ್‌ ಅನ್ನು ನೀವು <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_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>
     <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>
@@ -118,11 +119,17 @@
     <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ನಿರ್ವಾಹಕರು ಸಾಧನವನ್ನು ಲಾಕ್ ಮಾಡಿದ್ದಾರೆ"</string>
     <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>
+    <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ಫೇಸ್ ಅನ್‌ಲಾಕ್ ಬಳಸಲು, ಸೆಟ್ಟಿಂಗ್ಸ್‌ನಲ್ಲಿ ಕ್ಯಾಮರಾ ಆ್ಯಕ್ಸೆಸ್ ಆನ್ ಮಾಡಿ"</string>
     <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>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ಮುಂದುವರಿಸಲು, ನಿಮ್ಮ ಸಾಧನವನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಿ"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"ಅಪ್‌ಡೇಟ್ ಅನ್ನು ಆನಂತರ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ಪಿನ್ ಅನ್ನು ನಮೂದಿಸಿ"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"ಅಪ್‌ಡೇಟ್ ಅನ್ನು ಆನಂತರ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"ಅಪ್‌ಡೇಟ್ ಅನ್ನು ಆನಂತರ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಬಿಡಿಸಿ"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"ಸಾಧನವನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದುವರಿಸಲು ಪಿನ್ ಅನ್ನು ನಮೂದಿಸಿ."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"ಸಾಧನವನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದುವರಿಸಲು ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"ಸಾಧನವನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದುವರಿಸಲು ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಬಿಡಿಸಿ."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-ko/strings.xml b/packages/SystemUI/res-keyguard/values-ko/strings.xml
index 0dec961..ae75286 100644
--- a/packages/SystemUI/res-keyguard/values-ko/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ko/strings.xml
@@ -20,7 +20,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"PIN을 입력해 주세요."</string>
+    <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"PIN 입력"</string>
     <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN 입력"</string>
     <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"패턴 입력"</string>
     <string name="keyguard_enter_pattern" msgid="7616595160901084119">"패턴 그리기"</string>
@@ -58,10 +58,10 @@
     <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"잘못된 패턴입니다. 다시 시도해 주세요."</string>
     <string name="kg_wrong_password" msgid="4143127991071670512">"잘못된 비밀번호"</string>
     <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"잘못된 비밀번호입니다. 다시 시도해 주세요."</string>
-    <string name="kg_wrong_pin" msgid="4160978845968732624">"PIN 오류"</string>
+    <string name="kg_wrong_pin" msgid="4160978845968732624">"잘못된 PIN"</string>
     <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"잘못된 PIN입니다. 다시 시도해 주세요."</string>
     <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"또는 지문으로 잠금 해제하세요."</string>
-    <string name="kg_fp_not_recognized" msgid="5183108260932029241">"지문이 인식되지 않았습니다."</string>
+    <string name="kg_fp_not_recognized" msgid="5183108260932029241">"지문이 인식되지 않았습니다"</string>
     <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"얼굴을 인식할 수 없습니다."</string>
     <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"다시 시도하거나 PIN을 입력하세요."</string>
     <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"다시 시도하거나 비밀번호를 입력하세요."</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"기기가 잠겨 PIN을 입력해야 합니다."</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"기기가 잠겨 비밀번호를 입력해야 합니다."</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"기기가 잠겨 패턴을 입력해야 합니다."</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"미사용 시간에 업데이트가 설치됩니다."</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"보안을 강화해야 합니다. 한동안 PIN이 사용되지 않았습니다."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"보안을 강화해야 합니다. 한동안 비밀번호가 사용되지 않았습니다."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"보안을 강화해야 합니다. 한동안 패턴이 사용되지 않았습니다."</string>
@@ -124,5 +125,11 @@
     <string name="clock_title_default" msgid="6342735240617459864">"기본"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"버블"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"아날로그"</string>
-    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"기기를 잠금 해제하여 계속"</string>
+    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"계속하려면 기기 잠금 해제"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"나중에 업데이트를 설치하려면 PIN을 입력하세요."</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"나중에 업데이트를 설치하려면 비밀번호를 입력하세요."</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"나중에 업데이트를 설치하려면 패턴을 그리세요."</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"기기가 업데이트되었습니다. 계속하려면 PIN을 입력하세요."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"기기가 업데이트되었습니다. 계속 진행하려면 비밀번호를 입력하세요."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"기기가 업데이트되었습니다. 계속하려면 패턴을 그리세요."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-ky/strings.xml b/packages/SystemUI/res-keyguard/values-ky/strings.xml
index 79ef007..638fd98 100644
--- a/packages/SystemUI/res-keyguard/values-ky/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ky/strings.xml
@@ -22,7 +22,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"PIN кодуңузду киргизиңиз"</string>
     <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN кодду киргизиңиз"</string>
-    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Графикалык ачкычты киргизиңиз"</string>
+    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Графикалык ачкычты тартыңыз"</string>
     <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Графикалык ачкчты тартңыз"</string>
     <string name="keyguard_enter_your_password" msgid="7225626204122735501">"Сырсөзүңүздү киргизиңиз"</string>
     <string name="keyguard_enter_password" msgid="6483623792371009758">"Сырсөздү киргизиңиз"</string>
@@ -45,9 +45,9 @@
     <string name="keyguard_sim_locked_message" msgid="7095293254587575270">"SIM карта кулпуланган."</string>
     <string name="keyguard_sim_puk_locked_message" msgid="2503428315518592542">"SIM карта PUK менен кулпуланган."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="8489092646014631659">"SIM картанын кулпусу ачылууда…"</string>
-    <string name="keyguard_accessibility_pin_area" msgid="7403009340414014734">"PIN-коддун аймагы"</string>
+    <string name="keyguard_accessibility_pin_area" msgid="7403009340414014734">"PIN коддун аймагы"</string>
     <string name="keyguard_accessibility_password" msgid="3524161948484801450">"Түзмөктүн сырсөзү"</string>
-    <string name="keyguard_accessibility_sim_pin_area" msgid="6272116591533888062">"SIM-картанын PIN-кодунун аймагы"</string>
+    <string name="keyguard_accessibility_sim_pin_area" msgid="6272116591533888062">"SIM-картанын PIN кодунун аймагы"</string>
     <string name="keyguard_accessibility_sim_puk_area" msgid="5537294043180237374">"SIM-картанын PUK-кодунун аймагы"</string>
     <string name="keyboardview_keycode_delete" msgid="8489719929424895174">"Өчүрүү"</string>
     <string name="disable_carrier_button_text" msgid="7153361131709275746">"eSIM-картаны өчүрүү"</string>
@@ -58,7 +58,7 @@
     <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"Графклк ачкч тура эмс. Кайтлап крүңз."</string>
     <string name="kg_wrong_password" msgid="4143127991071670512">"Сырсөз туура эмес"</string>
     <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"Сырсөз туура эмес. Кайтлап крүңз."</string>
-    <string name="kg_wrong_pin" msgid="4160978845968732624">"PIN-код туура эмес"</string>
+    <string name="kg_wrong_pin" msgid="4160978845968732624">"PIN код туура эмес"</string>
     <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN кд тура эмс. Кайтлап крүңз."</string>
     <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"Болбосо манжа изи менен кулпусун ачыңыз"</string>
     <string name="kg_fp_not_recognized" msgid="5183108260932029241">"Манжа изи таанылган жок"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Бекем кулпулангандан кийин PIN код талап кылынат"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Бекем кулпулангандан кийин сырсөз талап кылынат"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Бекем кулпулангандан кийн грфикалык ачкыч талп клынт"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Жигердүү эмес сааттарда жаңыртылат"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Кошмча кпсуздук тлап клнат. PIN код бир нче убкыт бою клднулгн эмeс."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Кошмча кпсуздук тлап клнат. Сырсз бир нче убкыт бою клднулгн эмeс."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Кошмча кпсуздук тлап клнат. Грфиклык ачкч бир нче убкыт бою клднулгн эмeс."</string>
@@ -88,20 +89,20 @@
     <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"Туура эмес графикалык ачкыч менен өтө көп аракет"</string>
     <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"Туура эмес сырсөз менен өтө көп аракет"</string>
     <string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# секунддан кийин кайталаңыз.}other{# секунддан кийин кайталаңыз.}}"</string>
-    <string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM-картанын PIN-кодун киргизиңиз."</string>
-    <string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" SIM-картасынын PIN-кодун киргизиңиз."</string>
+    <string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM-картанын PIN кодун киргизиңиз."</string>
+    <string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" SIM-картасынын PIN кодун киргизиңиз."</string>
     <string name="kg_sim_lock_esim_instructions" msgid="5577169988158738030">"<xliff:g id="PREVIOUS_MSG">%1$s</xliff:g> Түзмөктү мобилдик кызматсыз колдонуу үчүн eSIM-картаны өчүрүңүз."</string>
     <string name="kg_puk_enter_puk_hint" msgid="3005288372875367017">"SIM-карта азыр жарактан чыкты. Улантуу үчүн PUK-кодду киргизиңиз. Анын чоо-жайын билүү үчүн байланыш операторуна кайрылыңыз."</string>
     <string name="kg_puk_enter_puk_hint_multi" msgid="4876780689904862943">"Эми SIM-картанын \"<xliff:g id="CARRIER">%1$s</xliff:g>\" байланыш оператору өчүрүлдү. Улантуу үчүн PUK-кодду киргизиңиз. Анын чоо-жайын билүү үчүн байланыш операторуна кайрылыңыз."</string>
-    <string name="kg_puk_enter_pin_hint" msgid="6028432138916150399">"Сиз каалаган PIN-кодду териңиз"</string>
-    <string name="kg_enter_confirm_pin_hint" msgid="4261064020391799132">"Сиз каалаган PIN-кодду ырастаңыз"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="6028432138916150399">"Сиз каалаган PIN кодду териңиз"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="4261064020391799132">"Сиз каалаган PIN кодду ырастаңыз"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"SIM картанын кулпусу ачылууда…"</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"4–8 сандан турган PIN-кодду териңиз."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"4–8 сандан турган PIN кодду териңиз."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"PUK-код 8 же андан көп сандан турушу керек."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"PIN-кодуңузду <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_pin_attempts_dialog_message" msgid="544687656831558971">"PIN кодуңузду <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_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>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIM-картанын PIN коду туура эмес. Эми түзмөктү бөгөттөн чыгаруу үчүн байланыш операторуңузга кайрылышыңыз керек."</string>
     <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>
     <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM-картанын PUK коду туура эмес киргизилди. SIM-картанын биротоло жарактан чыгаарына # аракет калды.}other{SIM-картанын PUK коду туура эмес киргизилди. SIM-картанын биротоло жарактан чыгаарына # аракет калды.}}"</string>
@@ -118,11 +119,17 @@
     <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Түзмөктү администратор кулпулап койгон"</string>
     <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>
+    <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Параметрлерден камерага уруксат беришиңиз керек"</string>
     <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>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Улантуу үчүн түзмөгүңүздүн кулпусун ачыңыз"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Кийинчерээк жаңыртуу үчүн PIN кодду териңиз"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Кийинчерээк жаңыртуу үчүн сырсөздү териңиз"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Кийинчерээк жаңыртуу үчүн графикалык ачкычты тартыңыз"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Түзмөк жаңырды. Улантуу үчүн PIN кодду териңиз."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Түзмөк жаңырды. Улантуу үчүн сырсөздү териңиз."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Түзмөк жаңырды. Улантуу үчүн графикалык ачкычты тартыңыз."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-lo/strings.xml b/packages/SystemUI/res-keyguard/values-lo/strings.xml
index 9e64abe6..efe5377 100644
--- a/packages/SystemUI/res-keyguard/values-lo/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-lo/strings.xml
@@ -27,7 +27,7 @@
     <string name="keyguard_enter_your_password" msgid="7225626204122735501">"ປ້ອນລະຫັດຜ່ານຂອງທ່ານ"</string>
     <string name="keyguard_enter_password" msgid="6483623792371009758">"ໃສ່ລະຫັດຜ່ານ"</string>
     <string name="keyguard_sim_error_message_short" msgid="633630844240494070">"ບັດບໍ່ຖືກຕ້ອງ."</string>
-    <string name="keyguard_charged" msgid="5478247181205188995">"ສາກເຕັມແລ້ວ."</string>
+    <string name="keyguard_charged" msgid="5478247181205188995">"ສາກເຕັມແລ້ວ"</string>
     <string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ກຳ​ລັງ​ສາກ​ໄຟໄຮ້​ສາຍ"</string>
     <string name="keyguard_plugged_in_dock" msgid="2122073051904360987">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ກຳລັງສາກໄຟ"</string>
     <string name="keyguard_plugged_in" msgid="8169926454348380863">"<xliff:g id="PERCENTAGE">%s</xliff:g> • ກຳລັງສາກ"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ຕ້ອງໃສ່ PIN ຫຼັງຈາກທີ່ລັອກໄວ້"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ຕ້ອງໃສ່ລະຫັດຜ່ານຫຼັງຈາກທີ່ລັອກໄວ້"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ຕ້ອງແຕ້ມຮູບແບບຫຼັງຈາກທີ່ລັອກໄວ້"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"ການອັບເດດຈະຕິດຕັ້ງໃນລະຫວ່າງຊົ່ວໂມງທີ່ບໍ່ມີການນຳໃຊ້"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ຕ້ອງເພີ່ມຄວາມປອດໄພ. ບໍ່ໄດ້ໃຊ້ PIN ມາໄລຍະໜຶ່ງແລ້ວ."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ຕ້ອງເພີ່ມຄວາມປອດໄພ. ບໍ່ໄດ້ໃຊ້ລະຫັດຜ່ານມາໄລຍະໜຶ່ງແລ້ວ."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ຕ້ອງເພີ່ມຄວາມປອດໄພ. ບໍ່ໄດ້ໃຊ້ຮູບແບບມາໄລຍະໜຶ່ງແລ້ວ."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"ຟອງ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ໂມງເຂັມ"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ປົດລັອກອຸປະກອນຂອງທ່ານເພື່ອສືບຕໍ່"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"ໃສ່ PIN ເພື່ອຕິດຕັ້ງອັບເດດໃນພາຍຫຼັງ"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"ໃສ່ລະຫັດຜ່ານເພື່ອຕິດຕັ້ງອັບເດດໃນພາຍຫຼັງ"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"ແຕ້ມຮູບແບບເພື່ອຕິດຕັ້ງອັບເດດໃນພາຍຫຼັງ"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"ອັບເດດອຸປະກອນແລ້ວ. ໃສ່ PIN ເພື່ອສືບຕໍ່."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"ອັບເດດອຸປະກອນແລ້ວ. ໃສ່ລະຫັດຜ່ານເພື່ອສືບຕໍ່."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"ອັບເດດອຸປະກອນແລ້ວ. ແຕ້ມຮູບແບບເພື່ອສືບຕໍ່."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-lt/strings.xml b/packages/SystemUI/res-keyguard/values-lt/strings.xml
index d2f7f08..59f0aa3 100644
--- a/packages/SystemUI/res-keyguard/values-lt/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-lt/strings.xml
@@ -22,7 +22,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"Įveskite PIN kodą"</string>
     <string name="keyguard_enter_pin" msgid="8114529922480276834">"Įveskite PIN kodą"</string>
-    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Nubrėžkite atrakinimo piešinį"</string>
+    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Nupieškite atrakinimo piešinį"</string>
     <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Nupieškite atrakinimo piešinį"</string>
     <string name="keyguard_enter_your_password" msgid="7225626204122735501">"Įveskite slaptažodį"</string>
     <string name="keyguard_enter_password" msgid="6483623792371009758">"Įveskite slaptažodį"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Po užrakinimo reikalingas PIN kodas"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Po užrakinimo reikalingas slaptažodis"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Po užrakinimo reikalingas atrakinimo piešinys"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Naujinys bus įdiegtas neaktyvumo valandomis"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Reikalinga papildoma sauga. PIN kodas nebuvo naudojamas kurį laiką."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Reikalinga papildoma sauga. Slaptažodis nebuvo naudojamas kurį laiką."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Reikalinga papildoma sauga. Atrakinimo piešinys nebuvo naudojamas kurį laiką."</string>
@@ -124,5 +125,11 @@
     <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>
-    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Įrenginio atrakinimas norint tęsti"</string>
+    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Atrakinkite įrenginį norėdami tęsti"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Įveskite PIN kodą, kad įdiegtumėte naujinį vėliau"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Įveskite slaptažodį, kad įdiegtumėte naujinį vėliau"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Nubrėžkite atrakinimo piešinį, kad įdiegtumėte naujinį vėliau"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Įrenginys atnaujintas. Įveskite PIN kodą, kad galėtumėte tęsti."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Įrenginys atnaujintas. Įveskite slaptažodį, kad galėtumėte tęsti."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Įrenginys atnaujintas. Nubrėžkite atrakinimo piešinį, kad gal. tęsti."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-lv/strings.xml b/packages/SystemUI/res-keyguard/values-lv/strings.xml
index 5d992f8..ee9e8c2 100644
--- a/packages/SystemUI/res-keyguard/values-lv/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-lv/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Pēc bloķēšanas ir jāievada PIN"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Pēc bloķēšanas ir jāievada parole"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pēc bloķēšanas ir jāzīmē kombinācija"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Atjauninājums tiks instalēts neaktīvajā laikā"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Jāveic papildu drošības darbība. PIN ilgu laiku nav lietots."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Jāveic papildu drošības darbība. Parole ilgu laiku nav lietota."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Jāveic papildu drošības darbība. Kombinācija ilgu laiku nav lietota."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Burbuļi"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogais"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Lai turpinātu, atbloķējiet ierīci"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Ievadiet PIN, lai instalētu atjauninājumu vēlāk."</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Ievadiet paroli, lai instalētu atjauninājumu vēlāk."</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Zīmējiet kombināciju, lai instalētu atjauninājumu vēlāk."</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Ierīce ir atjaunināta. Ievadiet PIN, lai turpinātu."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Ierīce ir atjaunināta. Ievadiet paroli, lai turpinātu."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Ierīce ir atjaunināta. Zīmējiet kombināciju, lai turpinātu."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-mk/strings.xml b/packages/SystemUI/res-keyguard/values-mk/strings.xml
index 99e35f9..a869d60 100644
--- a/packages/SystemUI/res-keyguard/values-mk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-mk/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Потребен е PIN-код по заклучување"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Потребна е лозинка по заклучување"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Потребна е шема по заклучување"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Ажурирањето ќе се инсталира за време на неактивни часови"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Потребна е дополнителна безбедност. PIN-кодот не бил користен некое време."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Потребна е дополнителна безбедност. Лозинката не била користена некое време."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Потребна е дополнителна безбедност. Шемата не била користена некое време."</string>
@@ -98,7 +99,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"Се отклучува SIM-картичката…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"Внесете PIN што содржи 4 - 8 броеви."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"PUK-кодот треба да содржи 8 или повеќе броеви."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"Погрешно сте го напишале вашиот PIN <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_pin_attempts_dialog_message" msgid="544687656831558971">"Внесовте погрешен PIN <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_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>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Балонче"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Аналоген"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Отклучете го уредот за да продолжите"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Внесете PIN за да го инсталирате ажурирањето подоцна"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Внесете ја лозинката за да го инсталирате ажурирањето подоцна"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Нацртајте ја шемата за да го инсталирате ажурирањето подоцна"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Уредот е ажуриран. Внесете PIN за да продолжите."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Уредот е ажуриран. Внесете лозинка за да продолжите."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Уредот е ажуриран. Нацртајте ја шемата за да продолжите."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-ml/strings.xml b/packages/SystemUI/res-keyguard/values-ml/strings.xml
index 8181357..e247cc7 100644
--- a/packages/SystemUI/res-keyguard/values-ml/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ml/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ലോക്ക്‌ഡൗണിന് ശേഷം പിൻ നൽകേണ്ടതുണ്ട്"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ലോക്ക്‌ഡൗണിന് ശേഷം പാസ്‌വേഡ് നൽകേണ്ടതുണ്ട്"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ലോക്ക്‌ഡൗണിന് ശേഷം പാറ്റേൺ വരയ്‌ക്കേണ്ടതുണ്ട്"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"സജീവമല്ലാത്ത സമയത്ത് അപ്ഡേറ്റ് ഇൻസ്റ്റാൾ ചെയ്യും"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"അധിക സുരക്ഷ വേണം. അൽപകാലം പിൻ ഉപയോഗിച്ചില്ല."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"അധിക സുരക്ഷ വേണം. അൽപകാലം പാസ്‌വേഡ് ഉപയോഗിച്ചില്ല."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"അധിക സുരക്ഷ വേണം. അൽപകാലം പാറ്റേൺ ഉപയോഗിച്ചില്ല."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"ബബിൾ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"അനലോഗ്"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"തുടരാൻ നിങ്ങളുടെ ഉപകരണം അൺലോക്ക് ചെയ്യുക"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"അപ്ഡേറ്റ് പിന്നീട് ഇൻസ്റ്റാൾ ചെയ്യാൻ പിൻ നൽകുക"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"അപ്ഡേറ്റ് പിന്നീട് ഇൻസ്റ്റാൾ ചെയ്യാൻ പാസ്‍വേഡ് നൽകുക"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"അപ്ഡേറ്റ് പിന്നീട് ഇൻസ്റ്റാൾ ചെയ്യാൻ പാറ്റേൺ വരയ്ക്കുക"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"ഉപകരണം അപ്ഡേറ്റ് ചെയ്തു. തുടരുന്നതിന് പിൻ നൽകുക."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"ഉപകരണം അപ്ഡേറ്റ് ചെയ്തു. തുടരുന്നതിന് പാസ്‍വേഡ് നൽകുക."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"ഉപകരണം അപ്ഡേറ്റ് ചെയ്തു. തുടരുന്നതിന് പാറ്റേൺ വരയ്ക്കുക."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-mn/strings.xml b/packages/SystemUI/res-keyguard/values-mn/strings.xml
index eefc491..7b555fb64 100644
--- a/packages/SystemUI/res-keyguard/values-mn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-mn/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Түгжсэний дараа ПИН шаардлагатай"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Түгжсэний дараа нууц үг шаардлагатай"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Түгжсэний дараа хээ шаардлагатай"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Шинэчлэлтийг идэвхгүй цагуудаар суулгана"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Нэмэлт аюулгүй байдал шаардлагатай. ПИН-г хэсэг хугацаанд ашиглаагүй."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Нэмэлт аюулгүй байдал шаардлагатай. Нууц үгийг хэсэг хугацаанд ашиглаагүй."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Нэмэлт аюулгүй байдал шаардлагатай. Хээг хэсэг хугацаанд ашиглаагүй."</string>
@@ -98,7 +99,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"SIM-н түгжээг тайлж байна…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"4-8 тооноос бүтэх ПИН-г оруулна уу."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"PUK код 8-с цөөнгүй тооноос бүтнэ."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"Та ПИН кодоо <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_pin_attempts_dialog_message" msgid="544687656831558971">"Та ПИН кодоо <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_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>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Бөмбөлөг"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Aналог"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Үргэлжлүүлэхийн тулд төхөөрөмжийнхөө түгжээг тайлна уу"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Дараа шинэчлэлт суулгахын тулд ПИН оруулна уу"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Дараа шинэчлэлт суулгахын тулд нууц үг оруулна уу"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Дараа шинэчлэлт суулгахын тулд хээ зурна уу"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Төхөөрөмжийг шинэчилсэн. Үргэлжлүүлэхийн тулд ПИН оруулна уу."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Төхөөрөмжийг шинэчилсэн. Үргэлжлүүлэхийн тулд нууц үг оруулна уу."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Төхөөрөмжийг шинэчилсэн. Үргэлжлүүлэхийн тулд хээ зурна уу."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-mr/strings.xml b/packages/SystemUI/res-keyguard/values-mr/strings.xml
index 76494f0..ada2f11 100644
--- a/packages/SystemUI/res-keyguard/values-mr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-mr/strings.xml
@@ -61,7 +61,7 @@
     <string name="kg_wrong_pin" msgid="4160978845968732624">"चुकीचा पिन"</string>
     <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"पिन चुकीचा आहे. पुन्हा प्रयत्न करा."</string>
     <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"किंवा फिंगरप्रिंट वापरून अनलॉक करा"</string>
-    <string name="kg_fp_not_recognized" msgid="5183108260932029241">"फिंगरप्रिंट ओळखले नाही"</string>
+    <string name="kg_fp_not_recognized" msgid="5183108260932029241">"फिंगरप्रिंट ओळखली नाही"</string>
     <string name="bouncer_face_not_recognized" msgid="1666128054475597485">"चेहरा ओळखता आला नाही"</string>
     <string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"पुन्हा प्रयत्न करा किंवा पिन एंटर करा"</string>
     <string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"पुन्हा प्रयत्न करा किंवा पासवर्ड एंटर करा"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"लॉकडाउननंतर पिन आवश्यक आहे"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"लॉकडाउननंतर पासवर्ड आवश्यक आहे"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"लॉकडाउननंतर पॅटर्न आवश्यक आहे"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"अपडेट हे इनॅक्टिव्ह तासांदरम्यान इंस्टॉल होईल"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"अतिरिक्त सुरक्षा आवश्‍यक आहे. काही वेळेसाठी पिन अनलॉक केला गेला नव्हता."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"अतिरिक्त सुरक्षा आवश्‍यक आहे. काही वेळेसाठी पासवर्ड अनलॉक केला गेला नव्हता."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"अतिरिक्त सुरक्षा आवश्‍यक आहे. काही वेळेसाठी पॅटर्न अनलॉक केला गेला नव्हता."</string>
@@ -98,7 +99,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"सिम अनलॉक करत आहे…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"4 ते 8 अंकांचा पिन टाईप करा."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"PUK कोड 8 अंकी किंवा त्यापेक्षा अधिकचा असावा."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"तुम्ही तुमचा PIN <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_pin_attempts_dialog_message" msgid="544687656831558971">"तुम्ही तुमचा पिन <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_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>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"बबल"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"अ‍ॅनालॉग"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"पुढे सुरू ठेवण्यासाठी तुमचे डिव्हाइस अनलॉक करा"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"नंतर अपडेट इंस्टॉल करण्यासाठी पिन एंटर करा"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"नंतर अपडेट इंस्टॉल करण्यासाठी पासवर्ड एंटर करा"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"नंतर अपडेट इंस्टॉल करण्यासाठी पॅटर्न ड्रॉ करा"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"डिव्हाइस अपडेट केले आहे. पुढे सुरू ठेवण्यासाठी पिन एंटर करा."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"डिव्हाइस अपडेट केले आहे. पुढे सुरू ठेवण्यासाठी पासवर्ड एंटर करा."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"डिव्हाइस अपडेट केले आहे. पुढे सुरू ठेवण्यासाठी पॅटर्न ड्रॉ करा."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-ms/strings.xml b/packages/SystemUI/res-keyguard/values-ms/strings.xml
index b063471..60c4531 100644
--- a/packages/SystemUI/res-keyguard/values-ms/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ms/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN diperlukan selepas kunci semua"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Kata laluan diperlukan selepas kunci semua"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Corak diperlukan selepas kunci semua"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Kemaskinian akan dipasang semasa waktu tidak aktif"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Keselamatan tambahan diperlukan. PIN tidak digunakan."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Keselamatan tambahan diperlukan. Kata laluan tidak digunakan."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Keselamatan tambahan diperlukan. Corak tidak digunakan."</string>
@@ -124,5 +125,11 @@
     <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>
-    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Buka kunci peranti anda untuk meneruskan"</string>
+    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Buka kunci peranti untuk meneruskan"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Masukkan PIN untuk memasang kemaskinian kemudian"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Masukkan kata laluan untuk memasang kemaskinian kemudian"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Lukis corak untuk memasang kemaskinian kemudian"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Peranti dikemaskinikan. Masukkan PIN untuk meneruskan."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Peranti dikemaskinikan. Masukkan kata laluan untuk meneruskan."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Peranti dikemaskinikan. Lukis corak untuk meneruskan."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-my/strings.xml b/packages/SystemUI/res-keyguard/values-my/strings.xml
index de1da84..4092c9a 100644
--- a/packages/SystemUI/res-keyguard/values-my/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-my/strings.xml
@@ -37,18 +37,18 @@
     <string name="keyguard_plugged_in_incompatible_charger" msgid="3687961801947819076">"<xliff:g id="PERCENTAGE">%s</xliff:g> • အားသွင်းပစ္စည်းတွင် ပြဿနာရှိသည်"</string>
     <string name="keyguard_instructions_when_pattern_disabled" msgid="8448804180089936954">"မီနူးကို နှိပ်၍ လော့ခ်ဖွင့်ပါ။"</string>
     <string name="keyguard_network_locked_message" msgid="407096292844868608">"ကွန်ရက်ကို လော့ခ်ချထားသည်"</string>
-    <string name="keyguard_missing_sim_message_short" msgid="685029586173458728">"ဆင်းမ်မရှိပါ"</string>
-    <string name="keyguard_missing_sim_instructions" msgid="7735360104844653246">"ဆင်းမ်ထည့်ပါ။"</string>
-    <string name="keyguard_missing_sim_instructions_long" msgid="3451467338947610268">"ဆင်းမ်မရှိပါ (သို့) သုံး၍မရပါ။ ဆင်းမ်ထည့်ပါ။"</string>
-    <string name="keyguard_permanent_disabled_sim_message_short" msgid="3955052454216046100">"ဆင်းမ်ကို သုံး၍မရပါ။"</string>
-    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5034635040020685428">"သင်၏ဆင်းမ်ကို အပြီးပိတ်လိုက်သည်။\n ဆင်းမ်နောက်တစ်ခု ရယူရန် သင်၏ ကြိုးမဲ့ဝန်ဆောင်မှုပေးသူထံ ဆက်သွယ်ပါ။"</string>
-    <string name="keyguard_sim_locked_message" msgid="7095293254587575270">"ဆင်းမ်ကို လော့ခ်ချထားသည်။"</string>
-    <string name="keyguard_sim_puk_locked_message" msgid="2503428315518592542">"ဆင်းမ်၏ ပင်နံပါတ်ပြန်ဖွင့်သည့် ကုဒ်ကို လော့ခ်ချထားသည်။"</string>
-    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="8489092646014631659">"ဆင်းမ်ကိုဖွင့်နေသည်…"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="685029586173458728">"ဆင်းမ်ကတ် မရှိပါ"</string>
+    <string name="keyguard_missing_sim_instructions" msgid="7735360104844653246">"ဆင်းမ်ကတ်ထည့်ပါ။"</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="3451467338947610268">"ဆင်းမ်မရှိပါ (သို့) သုံး၍မရပါ။ ဆင်းမ်ကတ်ထည့်ပါ။"</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="3955052454216046100">"ဆင်းမ်ကတ်ကို သုံး၍မရပါ။"</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5034635040020685428">"သင်၏ဆင်းမ်ကတ်ကို အပြီးပိတ်လိုက်သည်။\n ဆင်းမ်ကတ်နောက်တစ်ခု ရယူရန် သင်၏ ကြိုးမဲ့ဝန်ဆောင်မှုပေးသူထံ ဆက်သွယ်ပါ။"</string>
+    <string name="keyguard_sim_locked_message" msgid="7095293254587575270">"ဆင်းမ်ကတ်ကို လော့ခ်ချထားသည်။"</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="2503428315518592542">"ဆင်းမ်ကတ်၏ ပင်နံပါတ်ပြန်ဖွင့်သည့် ကုဒ်ကို လော့ခ်ချထားသည်။"</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="8489092646014631659">"ဆင်းမ်ကတ် ဖွင့်နေသည်…"</string>
     <string name="keyguard_accessibility_pin_area" msgid="7403009340414014734">"ပင်နံပါတ်နေရာ"</string>
     <string name="keyguard_accessibility_password" msgid="3524161948484801450">"စက်စကားဝှက်"</string>
     <string name="keyguard_accessibility_sim_pin_area" msgid="6272116591533888062">"ဆင်းမ်ပင်နံပါတ်နေရာ"</string>
-    <string name="keyguard_accessibility_sim_puk_area" msgid="5537294043180237374">"ဆင်းမ် ပင်နံပါတ် ပြန်ဖွင့်သည့်ကုဒ် နေရာ"</string>
+    <string name="keyguard_accessibility_sim_puk_area" msgid="5537294043180237374">"ဆင်းမ်ကတ် ပင်နံပါတ် ပြန်ဖွင့်သည့်ကုဒ် နေရာ"</string>
     <string name="keyboardview_keycode_delete" msgid="8489719929424895174">"ဖျက်ရန်"</string>
     <string name="disable_carrier_button_text" msgid="7153361131709275746">"eSIM ကို ပိတ်ရန်"</string>
     <string name="error_disable_esim_title" msgid="3802652622784813119">"eSIM ကို ပိတ်၍မရခြင်း"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"လော့ခ်ဒေါင်းလုပ်ပြီးနောက် ပင်နံပါတ်လိုအပ်သည်"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"လော့ခ်ဒေါင်းလုပ်ပြီးနောက် စကားဝှက်လိုအပ်သည်"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"လော့ခ်ဒေါင်းလုပ်ပြီးနောက် ပုံဖော်ခြင်းလိုအပ်သည်"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"မသုံးသည့်အချိန်အတွင်း အပ်ဒိတ်ထည့်သွင်းမည်"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ထပ်ဆောင်းလုံခြုံရေး လိုအပ်သည်။ ပင်နံပါတ်မသုံးသည်မှာ အနည်းငယ်ကြာပြီ။"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ထပ်ဆောင်းလုံခြုံရေး လိုအပ်သည်။ စကားဝှက်မသုံးသည်မှာ အနည်းငယ်ကြာပြီ။"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ထပ်ဆောင်းလုံခြုံရေး လိုအပ်သည်။ ပုံဖော်ခြင်းမသုံးသည်မှာ အနည်းငယ်ကြာပြီ။"</string>
@@ -92,7 +93,7 @@
     <string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" အတွက် ဆင်းမ်ကဒ်ပင်နံပါတ်ကို ထည့်ပါ။"</string>
     <string name="kg_sim_lock_esim_instructions" msgid="5577169988158738030">"<xliff:g id="PREVIOUS_MSG">%1$s</xliff:g> မိုဘိုင်းဝန်ဆောင်မှု မရှိဘဲ စက်ပစ္စည်းကို အသုံးပြုရန် eSIM ကို ပိတ်ပါ။"</string>
     <string name="kg_puk_enter_puk_hint" msgid="3005288372875367017">"ဆင်းမ်ကဒ်သည် ယခု ပိတ်သွားပါပြီ။ ရှေ့ဆက်ရန် ပင်နံပါတ် ပြန်ဖွင့်သည့် ကုဒ်ကို ထည့်ပါ။ ပိုမိုလေ့လာရန် မိုဘိုင်းဝန်ဆောင်မှုပေးသူကို ဆက်သွယ်နိုင်ပါသည်။"</string>
-    <string name="kg_puk_enter_puk_hint_multi" msgid="4876780689904862943">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" ဆင်းမ်ကို ယခု ပိတ်လိုက်ပါပြီ။ ရှေ့ဆက်ရန် ပင်နံပါတ် ပြန်ဖွင့်သည့်ကုဒ်ကို ထည့်ပါ။ အသေးစိတ် အချက်အလက်များအတွက် မိုဘိုင်းဝန်ဆောင်မှုပေးသူထံ ဆက်သွယ်ပါ။"</string>
+    <string name="kg_puk_enter_puk_hint_multi" msgid="4876780689904862943">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" ဆင်းမ်ကတ်ကို ယခု ပိတ်လိုက်ပါပြီ။ ရှေ့ဆက်ရန် ပင်နံပါတ် ပြန်ဖွင့်သည့်ကုဒ်ကို ထည့်ပါ။ အသေးစိတ် အချက်အလက်များအတွက် မိုဘိုင်းဝန်ဆောင်မှုပေးသူထံ ဆက်သွယ်ပါ။"</string>
     <string name="kg_puk_enter_pin_hint" msgid="6028432138916150399">"မိမိလိုလားသော ပင်နံပါတ်ကို ထည့်ပါ"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="4261064020391799132">"မိမိလိုလားသော ပင်နံပါတ်ကို အတည်ပြုပါ"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"ဆင်းမ်ကိုဖွင့်နေသည်…"</string>
@@ -102,9 +103,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>
-    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{ဆင်းမ်ပင်နံပါတ်ကုဒ် မှားနေသည်။ စက်ကို လော့ခ်ဖွင့်ရန် မိုဘိုင်းဖုန်းကုမ္ပဏီသို့ မဆက်သွယ်မီ သင့်တွင် # ကြိမ် ကြိုးစားခွင့်ရှိသေးသည်။}other{ဆင်းမ်ပင်နံပါတ်ကုဒ် မှားနေသည်။ သင့်တွင် # ကြိမ် ကြိုးစားခွင့်ရှိသေးသည်။ }}"</string>
+    <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>
-    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{ဆင်းမ် PUK ကုဒ် မှားနေသည်။ ဆင်းမ် အပြီးပိတ်မသွားမီ သင့်တွင် # ကြိမ် ကြိုးစားခွင့်ရှိသေးသည်။}other{ဆင်းမ် PUK ကုဒ် မှားနေသည်။ ဆင်းမ် အပြီးပိတ်မသွားမီ သင့်တွင် # ကြိမ် ကြိုးစားခွင့်ရှိသေးသည်။}}"</string>
+    <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>
@@ -120,9 +121,15 @@
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"မသိ"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"‘မျက်နှာပြ လော့ခ်ဖွင့်ခြင်း’ သုံးရန် ‘ဆက်တင်များ’ တွင်ကင်မရာသုံးခွင့်ကိုဖွင့်ပါ"</string>
     <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="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>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ရှေ့ဆက်ရန် သင့်စက်ကိုဖွင့်ပါ"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"နောက်ပိုင်းတွင် အပ်ဒိတ်ထည့်သွင်းရန် ပင်နံပါတ်ထည့်ပါ"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"နောက်ပိုင်းတွင် အပ်ဒိတ်ထည့်သွင်းရန် စကားဝှက်ထည့်ပါ"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"နောက်ပိုင်းတွင် အပ်ဒိတ်ထည့်သွင်းရန် ပုံဖော်ရေးဆွဲပါ"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"စက်ပစ္စည်း အပ်ဒိတ်လုပ်ထားသည်။ ရှေ့ဆက်ရန် ပင်နံပါတ်ထည့်ပါ။"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"စက်ပစ္စည်း အပ်ဒိတ်လုပ်ထားသည်။ ရှေ့ဆက်ရန် စကားဝှက်ထည့်ပါ။"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"စက်ပစ္စည်း အပ်ဒိတ်လုပ်ထားသည်။ ရှေ့ဆက်ရန် ပုံဖော်ရေးဆွဲပါ။"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-nb/strings.xml b/packages/SystemUI/res-keyguard/values-nb/strings.xml
index 501d836..deb1421 100644
--- a/packages/SystemUI/res-keyguard/values-nb/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-nb/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN-koden kreves etter låsing"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Passordet kreves etter låsing"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Mønsteret kreves etter låsing"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Oppdateringen installeres når enheten er inaktiv"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Økt sikkerhet kreves. Har ikke brukt PIN-koden nylig"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Økt sikkerhet kreves. Har ikke brukt passordet nylig"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Økt sikkerhet kreves. Har ikke brukt mønsteret nylig"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Boble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Lås opp enheten for å fortsette"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Oppgi PIN-koden for å installere oppdateringen senere"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Oppgi passordet for å installere oppdateringen senere"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Tegn mønsteret for å installere oppdateringen senere"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Enheten er oppdatert. Oppgi PIN-koden for å fortsette."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Enheten er oppdatert. Oppgi passordet for å fortsette."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Enheten er oppdatert. Tegn mønsteret for å fortsette."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-ne/strings.xml b/packages/SystemUI/res-keyguard/values-ne/strings.xml
index 4b215ae..4cc238d 100644
--- a/packages/SystemUI/res-keyguard/values-ne/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ne/strings.xml
@@ -20,11 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"आफ्नो PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"आफ्नो PIN हाल्नुहोस्"</string>
     <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN हाल्नुहोस्"</string>
-    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"आफ्नो ढाँचा प्रविष्टि गर्नुहोस्"</string>
+    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"प्याटर्न हाल्नुहोस्"</string>
     <string name="keyguard_enter_pattern" msgid="7616595160901084119">"प्याटर्न कोर्नुहोस्"</string>
-    <string name="keyguard_enter_your_password" msgid="7225626204122735501">"आफ्नो पासवर्ड प्रविष्ट गर्नु…"</string>
+    <string name="keyguard_enter_your_password" msgid="7225626204122735501">"पासवर्ड हाल्नुहोस्…"</string>
     <string name="keyguard_enter_password" msgid="6483623792371009758">"पासवर्ड हाल्नुहोस्"</string>
     <string name="keyguard_sim_error_message_short" msgid="633630844240494070">"अमान्य कार्ड।"</string>
     <string name="keyguard_charged" msgid="5478247181205188995">"चार्ज भयो"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"लकडाउन गरेपछि PIN हाल्नु पर्ने हुन्छ"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"लकडाउन गरेपछि पासवर्ड हाल्नु पर्ने हुन्छ"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"लकडाउन गरेपछि प्याटर्न कोर्नु पर्ने हुन्छ"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"डिभाइस प्रयोग नभएका बेला अपडेट इन्स्टल हुने छ"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"थप सुरक्षित बनाउनु पर्ने हुन्छ। केही समयदेखि PIN प्रयोग गरिएको छैन।"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"थप सुरक्षित बनाउनु पर्ने हुन्छ। केही समयदेखि पासवर्ड प्रयोग गरिएको छैन।"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"थप सुरक्षित बनाउनु पर्ने हुन्छ। केही समयदेखि प्याटर्न प्रयोग गरिएको छैन।"</string>
@@ -88,17 +89,17 @@
     <string name="kg_primary_auth_locked_out_pattern" msgid="8266214607346180952">"अत्यन्तै धेरै पटक गलत प्याटर्न कोरियो"</string>
     <string name="kg_primary_auth_locked_out_password" msgid="6170245108400198659">"अत्यन्तै धेरै पटक गलत पासवर्ड हालियो"</string>
     <string name="kg_too_many_failed_attempts_countdown" msgid="2038195171919795529">"{count,plural, =1{# सेकेन्डपछि फेरि प्रयास गर्नुहोस्।}other{# सेकेन्डपछि फेरि प्रयास गर्नुहोस्।}}"</string>
-    <string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM को PIN प्रविष्टि गर्नुहोस्।"</string>
-    <string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" को SIM को PIN प्रविष्टि गर्नुहोस्।"</string>
+    <string name="kg_sim_pin_instructions" msgid="1942424305184242951">"SIM को PIN हाल्नुहोस्।"</string>
+    <string name="kg_sim_pin_instructions_multi" msgid="3639863309953109649">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" को SIM को PIN हाल्नुहोस्।"</string>
     <string name="kg_sim_lock_esim_instructions" msgid="5577169988158738030">"<xliff:g id="PREVIOUS_MSG">%1$s</xliff:g> मोबाइल सेवा बिना डिभाइसको प्रयोग गर्न eSIM लाई असक्षम पार्नुहोस्।"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="3005288372875367017">"SIM कार्ड अहिले असक्षम छ। सुचारु गर्नको लागि PUK कोड प्रविष्टि गर्नुहोस्।  विवरणको लागि सेवा प्रदायकलाई सम्पर्क गर्नुहोस्।"</string>
-    <string name="kg_puk_enter_puk_hint_multi" msgid="4876780689904862943">"SIM <xliff:g id="CARRIER">%1$s</xliff:g> अहिले असक्षम छ। सुचारु गर्नको लागि PUK कोड प्रविष्टि गर्नुहोस्। विवरणका लागि सेवा प्रदायकलाई सम्पर्क गर्नुहोस्।"</string>
-    <string name="kg_puk_enter_pin_hint" msgid="6028432138916150399">"रूचाइएको PIN कोड प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="3005288372875367017">"SIM कार्ड अहिले असक्षम छ। सुचारु गर्नको लागि PUK कोड हाल्नुहोस्।  विवरणको लागि सेवा प्रदायकलाई सम्पर्क गर्नुहोस्।"</string>
+    <string name="kg_puk_enter_puk_hint_multi" msgid="4876780689904862943">"SIM <xliff:g id="CARRIER">%1$s</xliff:g> अहिले असक्षम छ। सुचारु गर्नको लागि PUK कोड हाल्नुहोस्। विवरणका लागि सेवा प्रदायकलाई सम्पर्क गर्नुहोस्।"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="6028432138916150399">"रूचाइएको PIN कोड हाल्नुहोस्"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="4261064020391799132">"रूचाइएको PIN कोड पुष्टि गर्नुहोस्"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"SIM कार्ड अनलक गरिँदै छ…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"४ देखि ८ वटा नम्बर भएको एउटा PIN टाइप गर्नुहोस्।"</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"PUK कोड ८ वा सो भन्दा बढी नम्बरको हुनु पर्छ।"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"तपाईंले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक गलत तरिकाले आफ्नो PIN प्रविष्ट गर्नुभएको छ। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"तपाईंले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक गलत PIN टाइप गर्नुभएको छ। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
     <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>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"बबल"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"एनालग"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"आफ्नो डिभाइस अनलक गरी जारी राख्नुहोस्"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"पछि अपडेट इन्स्टल गर्न PIN हाल्नुहोस्"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"पछि अपडेट इन्स्टल गर्न पासवर्ड हाल्नुहोस्"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"पछि अपडेट इन्स्टल गर्न प्याटर्न बनाउनुहोस्"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"डिभाइस अपडेट गरिएको छ। जारी राख्न PIN हाल्नुहोस्।"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"डिभाइस अपडेट गरिएको छ। जारी राख्न पासवर्ड हाल्नुहोस्।"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"डिभाइस अपडेट गरिएको छ। जारी राख्न प्याटर्न बनाउनुहोस्।"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-nl/strings.xml b/packages/SystemUI/res-keyguard/values-nl/strings.xml
index 9b8b72d..60578fa 100644
--- a/packages/SystemUI/res-keyguard/values-nl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-nl/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Na lockdown is de pincode vereist"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Na lockdown is het wachtwoord vereist"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Na lockdown is het patroon vereist"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Update wordt geïnstalleerd tijdens inactieve uren"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Extra beveiliging. Pincode is lang niet gebruikt."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Extra beveiliging. Wachtwoord is lang niet gebruikt."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Extra beveiliging. Patroon is lang niet gebruikt."</string>
@@ -113,7 +114,7 @@
     <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Pincode is vereist na opnieuw opstarten apparaat"</string>
     <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Wachtwoord is vereist na opnieuw opstarten apparaat"</string>
     <string name="kg_prompt_reason_timeout_pattern" msgid="5514969660010197363">"Gebruik in plaats daarvan het patroon voor extra beveiliging"</string>
-    <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Gebruik in plaats daarvan de pincode voor extra beveiliging"</string>
+    <string name="kg_prompt_reason_timeout_pin" msgid="4227962059353859376">"Gebruik de pincode voor extra beveiliging"</string>
     <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"Gebruik in plaats daarvan het wachtwoord voor extra beveiliging"</string>
     <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"Apparaat vergrendeld door beheerder"</string>
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Apparaat is handmatig vergrendeld"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bel"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analoog"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Ontgrendel je apparaat om door te gaan"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Voer de pincode in om de update later te installeren"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Voer het wachtwoord in om de update later te installeren"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Teken het patroon om de update later te installeren"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Apparaat geüpdatet. Voer de pincode in om door te gaan."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Apparaat geüpdatet. Voer het wachtwoord in om door te gaan."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Apparaat geüpdatet. Teken het patroon om door te gaan."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-or/strings.xml b/packages/SystemUI/res-keyguard/values-or/strings.xml
index 3e381d2..4baae48 100644
--- a/packages/SystemUI/res-keyguard/values-or/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-or/strings.xml
@@ -20,11 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"ନିଜର PIN ଲେଖନ୍ତୁ"</string>
+    <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"ଆପଣଙ୍କ PIN ଲେଖନ୍ତୁ"</string>
     <string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN ଲେଖନ୍ତୁ"</string>
-    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"ନିଜର ପାଟର୍ନ ଆଙ୍କନ୍ତୁ"</string>
+    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"ଆପଣଙ୍କ ପାଟର୍ନ ଲେଖନ୍ତୁ"</string>
     <string name="keyguard_enter_pattern" msgid="7616595160901084119">"ପାଟର୍ନ ଡ୍ର କରନ୍ତୁ"</string>
-    <string name="keyguard_enter_your_password" msgid="7225626204122735501">"ନିଜ ପାସ୍‌ୱର୍ଡ ଲେଖନ୍ତୁ"</string>
+    <string name="keyguard_enter_your_password" msgid="7225626204122735501">"ଆପଣଙ୍କ ପାସୱାର୍ଡ ଲେଖନ୍ତୁ"</string>
     <string name="keyguard_enter_password" msgid="6483623792371009758">"ପାସୱାର୍ଡ ଲେଖନ୍ତୁ"</string>
     <string name="keyguard_sim_error_message_short" msgid="633630844240494070">"ଅମାନ୍ୟ କାର୍ଡ।"</string>
     <string name="keyguard_charged" msgid="5478247181205188995">"ଚାର୍ଜ ହୋଇଗଲା"</string>
@@ -49,7 +49,7 @@
     <string name="keyguard_accessibility_password" msgid="3524161948484801450">"ଡିଭାଇସ୍ ପାସ୍‍ୱର୍ଡ"</string>
     <string name="keyguard_accessibility_sim_pin_area" msgid="6272116591533888062">"SIM PIN ଅଞ୍ଚଳ"</string>
     <string name="keyguard_accessibility_sim_puk_area" msgid="5537294043180237374">"SIM PUK ଅଞ୍ଚଳ"</string>
-    <string name="keyboardview_keycode_delete" msgid="8489719929424895174">"ଡିଲିଟ୍‌ କରନ୍ତୁ"</string>
+    <string name="keyboardview_keycode_delete" msgid="8489719929424895174">"ଡିଲିଟ କରନ୍ତୁ"</string>
     <string name="disable_carrier_button_text" msgid="7153361131709275746">"eSIM ଅକ୍ଷମ କରନ୍ତୁ"</string>
     <string name="error_disable_esim_title" msgid="3802652622784813119">"eSIMକୁ ଅକ୍ଷମ କରାଯାଇପାରିବ ନାହିଁ"</string>
     <string name="error_disable_esim_msg" msgid="2441188596467999327">"ଗୋଟିଏ ତ୍ରୁଟି କାରଣରୁ eSIMକୁ ଅକ୍ଷମ କରାଯାଇପାରିବ ନାହିଁ।"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ଲକଡାଉନ ହେବା ପରେ PIN ଆବଶ୍ୟକ"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ଲକଡାଉନ ହେବା ପରେ ପାସୱାର୍ଡ ଆବଶ୍ୟକ"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ଲକଡାଉନ ହେବା ପରେ ପାଟର୍ନ ଆବଶ୍ୟକ"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"ନିଷ୍କ୍ରିୟ ସମୟରେ ଅପଡେଟ ଇନଷ୍ଟଲ ହେବ"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ଅତିରିକ୍ତ ସୁରକ୍ଷା ଆବଶ୍ୟକ। କିଛି ସମୟ ପାଇଁ PIN ବ୍ୟବହାର କରାଯାଇନାହିଁ।"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ଅତିରିକ୍ତ ସୁରକ୍ଷା ଆବଶ୍ୟକ। କିଛି ସମୟ ପାଇଁ ପାସୱାର୍ଡ ବ୍ୟବହାର କରାଯାଇନାହିଁ।"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ଅତିରିକ୍ତ ସୁରକ୍ଷା ଆବଶ୍ୟକ। କିଛି ସମୟ ପାଇଁ ପାଟର୍ନ ବ୍ୟବହାର କରାଯାଇନାହିଁ।"</string>
@@ -98,7 +99,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"SIMକୁ ଅନଲକ କରାଯାଉଛି…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"4 ରୁ 8 ନମ୍ବର ବିଶିଷ୍ଟ ଏକ PIN ଟାଇପ୍ କରନ୍ତୁ।"</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"PUK କୋଡ୍‍‍ରେ 8ଟି କିମ୍ବା ଅଧିକ ନମ୍ବର ରହିଥାଏ।"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"ଆପଣଙ୍କ PIN ଆପଣ <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_pin_attempts_dialog_message" msgid="544687656831558971">"ଆପଣ <xliff:g id="NUMBER_0">%1$d</xliff:g>ଥର ଭୁଲ ଭାବେ ଆପଣଙ୍କ PIN ଟାଇପ କରିଛନ୍ତି। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <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>
@@ -108,7 +109,7 @@
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM PIN କାମ ବିଫଳ ହେଲା!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUKର କାମ ବିଫଳ ହେଲା!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ଇନପୁଟ୍‌ ପଦ୍ଧତି ବଦଳାନ୍ତୁ"</string>
-    <string name="airplane_mode" msgid="2528005343938497866">"ଏରୋପ୍ଲେନ ମୋଡ"</string>
+    <string name="airplane_mode" msgid="2528005343938497866">"ଏୟାରପ୍ଲେନ ମୋଡ"</string>
     <string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"ଡିଭାଇସ ରିଷ୍ଟାର୍ଟ ହେବା ପରେ ପାଟର୍ନ ଆବଶ୍ୟକ"</string>
     <string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"ଡିଭାଇସ ରିଷ୍ଟାର୍ଟ ହେବା ପରେ PIN ଆବଶ୍ୟକ"</string>
     <string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"ଡିଭାଇସ ରିଷ୍ଟାର୍ଟ ହେବା ପରେ ପାସୱାର୍ଡ ଆବଶ୍ୟକ"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"ବବଲ୍"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ଆନାଲଗ୍"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ଜାରି ରଖିବା ପାଇଁ ଆପଣଙ୍କ ଡିଭାଇସକୁ ଅନଲକ କରନ୍ତୁ"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"ପରେ ଅପଡେଟ ଇନଷ୍ଟଲ କରିବାକୁ PIN ଲେଖନ୍ତୁ"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"ପରେ ଅପଡେଟ ଇନଷ୍ଟଲ କରିବାକୁ ପାସୱାର୍ଡ ଲେଖନ୍ତୁ"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"ପରେ ଅପଡେଟ ଇନଷ୍ଟଲ କରିବାକୁ ପାଟର୍ନ ଡ୍ର କରନ୍ତୁ"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"ଡିଭାଇସ ଅପଡେଟ କରାଯାଇଛି। ଜାରି ରଖିବାକୁ PIN ଲେଖନ୍ତୁ।"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"ଡିଭାଇସ ଅପଡେଟ କରାଯାଇଛି। ଜାରି ରଖିବାକୁ ପାସୱାର୍ଡ ଲେଖନ୍ତୁ।"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"ଡିଭାଇସ ଅପଡେଟ କରାଯାଇଛି। ଜାରି ରଖିବାକୁ ପାଟର୍ନ ଡ୍ର କରନ୍ତୁ।"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-pa/strings.xml b/packages/SystemUI/res-keyguard/values-pa/strings.xml
index 67ba3ef..2306832 100644
--- a/packages/SystemUI/res-keyguard/values-pa/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pa/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ਲਾਕਡਾਊਨ ਤੋਂ ਬਾਅਦ ਪਿੰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ਲਾਕਡਾਊਨ ਤੋਂ ਬਾਅਦ ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ਲਾਕਡਾਊਨ ਤੋਂ ਬਾਅਦ ਪੈਟਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"ਅੱਪਡੇਟ ਅਕਿਰਿਆਸ਼ੀਲ ਘੰਟਿਆਂ ਦੌਰਾਨ ਸਥਾਪਤ ਹੋਵੇਗਾ"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ਵਾਧੂ ਸੁਰੱਖਿਆ ਦੀ ਲੋੜ ਹੈ। ਪਿੰਨ ਨੂੰ ਕੁਝ ਸਮੇਂ ਲਈ ਵਰਤਿਆ ਨਹੀਂ ਗਿਆ।"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ਵਾਧੂ ਸੁਰੱਖਿਆ ਦੀ ਲੋੜ ਹੈ। ਪਾਸਵਰਡ ਨੂੰ ਕੁਝ ਸਮੇਂ ਲਈ ਵਰਤਿਆ ਨਹੀਂ ਗਿਆ।"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ਵਾਧੂ ਸੁਰੱਖਿਆ ਦੀ ਲੋੜ ਹੈ। ਪੈਟਰਨ ਨੂੰ ਕੁਝ ਸਮੇਂ ਲਈ ਵਰਤਿਆ ਨਹੀਂ ਗਿਆ।"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"ਬੁਲਬੁਲਾ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ਐਨਾਲੌਗ"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ਜਾਰੀ ਰੱਖਣ ਲਈ ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਅਣਲਾਕ ਕਰੋ"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"ਅੱਪਡੇਟ ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਸਥਾਪਤ ਕਰਨ ਲਈ ਪਿੰਨ ਦਾਖਲ ਕਰੋ"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"ਅੱਪਡੇਟ ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਸਥਾਪਤ ਕਰਨ ਲਈ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"ਅੱਪਡੇਟ ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਸਥਾਪਤ ਕਰਨ ਲਈ ਪੈਟਰਨ ਬਣਾਓ"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"ਡੀਵਾਈਸ ਅੱਪਡੇਟ ਹੋ ਗਿਆ। ਜਾਰੀ ਰੱਖਣ ਲਈ ਪਿੰਨ ਦਾਖਲ ਕਰੋ।"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"ਡੀਵਾਈਸ ਅੱਪਡੇਟ ਹੋ ਗਿਆ। ਜਾਰੀ ਰੱਖਣ ਲਈ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ।"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"ਡੀਵਾਈਸ ਅੱਪਡੇਟ ਹੋ ਗਿਆ। ਜਾਰੀ ਰੱਖਣ ਲਈ ਪੈਟਰਨ ਬਣਾਓ।"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-pl/strings.xml b/packages/SystemUI/res-keyguard/values-pl/strings.xml
index 1fcde86..f30d2cf 100644
--- a/packages/SystemUI/res-keyguard/values-pl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pl/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Po zablokowaniu wymagany jest kod PIN"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Po zablokowaniu wymagane jest hasło"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Po zablokowaniu wymagany jest wzór"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Aktualizacja zainstaluje się w czasie bezczynności"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Wzmocnij ochronę. Od dawna nie używano kodu PIN."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Wzmocnij ochronę. Od dawna nie używano hasła."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Wzmocnij ochronę. Od dawna nie używano wzoru."</string>
@@ -98,8 +99,8 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"Odblokowuję kartę SIM…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"Wpisz kod PIN o długości od 4 do 8 cyfr."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"Kod PUK musi mieć co najmniej 8 cyfr."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"Po raz <xliff:g id="NUMBER_0">%1$d</xliff:g> wpisałeś nieprawidłowy kod PIN. \n\nSpróbuj ponownie za <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
-    <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_pin_attempts_dialog_message" msgid="544687656831558971">"Po raz <xliff:g id="NUMBER_0">%1$d</xliff:g> został wpisany nieprawidłowy kod PIN. \n\nSpróbuj ponownie za <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Po raz <xliff:g id="NUMBER_0">%1$d</xliff:g> zostało wpisane 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>
     <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>
@@ -124,5 +125,11 @@
     <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>
-    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Odblokuj urządzenie, aby kontynuować"</string>
+    <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Aby przejść dalej, odblokuj urządzenie"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Podaj kod PIN, żeby zainstalować aktualizację później"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Wpisz hasło, żeby zainstalować aktualizację później"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Narysuj wzór, żeby zainstalować aktualizację później"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Urządzenie zostało zaktualizowane. Podaj kod PIN, aby kontynuować."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Urządzenie zostało zaktualizowane. Wpisz hasło, aby kontynuować."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Urządzenie zostało zaktualizowane. Narysuj wzór, aby kontynuować."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml
index 15b3fc0..e9b21ed 100644
--- a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"O PIN é obrigatório após o Bloqueio total"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"A senha é obrigatória após o Bloqueio total"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"O padrão é obrigatório após o Bloqueio total"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"A atualização será feita no período de inatividade"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Segurança necessária. PIN não usado há um tempo."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Segurança necessária. Senha não usada há um tempo."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Segurança necessária. Padrão não usado há um tempo."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bolha"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analógico"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Desbloqueie o dispositivo para continuar"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Digite o PIN para instalar a atualização mais tarde"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Digite a senha para instalar a atualização mais tarde"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Desenhe o padrão para instalar a atualização mais tarde"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Dispositivo atualizado. Digite o PIN para continuar."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Dispositivo atualizado. Digite a senha para continuar."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Dispositivo atualizado. Desenhe o padrão para continuar."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
index ae0c284..b10f313 100644
--- a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
@@ -20,9 +20,9 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"Introduza o PIN."</string>
+    <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"Introduza o PIN"</string>
     <string name="keyguard_enter_pin" msgid="8114529922480276834">"Introduza o PIN"</string>
-    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Introduza o padrão."</string>
+    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Introduza o padrão"</string>
     <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Desenhe o padrão"</string>
     <string name="keyguard_enter_your_password" msgid="7225626204122735501">"Introduza a palavra-passe."</string>
     <string name="keyguard_enter_password" msgid="6483623792371009758">"Introduza a palavra-passe"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"O PIN é necessário após o bloqueio"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"A palavra-passe é necessária após o bloqueio"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"O padrão é necessário após o bloqueio"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"A atualização vai ser instalada nas horas inativas"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Mais segurança necessária. PIN não usado há muito."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Mais segurança necessária. Não usada há muito."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"+ segurança necessária. Padrão não usado há muito."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Balão"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analógico"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Desbloqueie o dispositivo para continuar"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Introduza o PIN para instalar a atualização mais tarde"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Introduza a palavra-passe para instalar a atualização mais tarde"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Desenhe o padrão para instalar a atualização mais tarde"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Dispositivo atualizado. Introduza o PIN para continuar."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Dispositivo atualizado. Introduza a palavra-passe para continuar."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Dispositivo atualizado. Desenhe o padrão para continuar."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-pt/strings.xml b/packages/SystemUI/res-keyguard/values-pt/strings.xml
index 15b3fc0..e9b21ed 100644
--- a/packages/SystemUI/res-keyguard/values-pt/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pt/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"O PIN é obrigatório após o Bloqueio total"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"A senha é obrigatória após o Bloqueio total"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"O padrão é obrigatório após o Bloqueio total"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"A atualização será feita no período de inatividade"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Segurança necessária. PIN não usado há um tempo."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Segurança necessária. Senha não usada há um tempo."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Segurança necessária. Padrão não usado há um tempo."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bolha"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analógico"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Desbloqueie o dispositivo para continuar"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Digite o PIN para instalar a atualização mais tarde"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Digite a senha para instalar a atualização mais tarde"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Desenhe o padrão para instalar a atualização mais tarde"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Dispositivo atualizado. Digite o PIN para continuar."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Dispositivo atualizado. Digite a senha para continuar."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Dispositivo atualizado. Desenhe o padrão para continuar."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-ro/strings.xml b/packages/SystemUI/res-keyguard/values-ro/strings.xml
index 9f568cc..3799ce7 100644
--- a/packages/SystemUI/res-keyguard/values-ro/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ro/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Codul PIN este solicitat după blocarea strictă"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Parola este solicitată după blocarea strictă"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Modelul este solicitat după blocarea strictă"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Actualizarea se va instala în perioada de inactivitate"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Mai multă securitate necesară. PIN-ul nu a fost folosit de ceva timp."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Mai multă securitate necesară. Parola nu a fost folosită de ceva timp."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Mai multă securitate necesară. Modelul nu a fost folosit de ceva timp."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Balon"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogic"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Deblochează dispozitivul pentru a continua"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Introdu codul PIN pentru a instala actualizarea mai târziu"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Introdu parola pentru a instala actualizarea mai târziu"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Desenează modelul pentru a instala actualizarea mai târziu"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Dispozitivul s-a actualizat. Introdu codul PIN pentru a continua."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Dispozitivul s-a actualizat. Introdu parola pentru a continua."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Dispozitivul s-a actualizat. Desenează modelul pentru a continua."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-ru/strings.xml b/packages/SystemUI/res-keyguard/values-ru/strings.xml
index bae5255..184b28d 100644
--- a/packages/SystemUI/res-keyguard/values-ru/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ru/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"После блокировки необходимо ввести PIN-код."</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"После блокировки необходимо ввести пароль."</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"После блокировки необходимо ввести графический ключ."</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Обновление установится, когда устройство неактивно."</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"PIN-код давно не использовался. Усильте защиту."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Пароль давно не использовался. Усильте защиту."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Граф. ключ давно не использовался. Усильте защиту."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Пузырь"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Стрелки"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Чтобы продолжить, разблокируйте устройство"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Введите PIN-код, чтобы установить обновление позже."</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Введите пароль, чтобы установить обновление позже."</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Введите графический ключ, чтобы установить обновление позже."</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Устройство обновлено. Введите PIN-код."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Устройство обновлено. Введите пароль."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Устройство обновлено. Введите графический ключ."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-si/strings.xml b/packages/SystemUI/res-keyguard/values-si/strings.xml
index 4bb8aeb..a484119 100644
--- a/packages/SystemUI/res-keyguard/values-si/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-si/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"අගුළු දැමීමෙන් පසු PIN අවශ්‍ය වේ"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"අගුළු දැමීමෙන් පසු මුරපදය අවශ්‍ය වේ"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"අගුළු දැමීමෙන් පසු රටාව අවශ්‍ය වේ"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"යාවත්කාලීනය අක්‍රිය පැය තුළ ස්ථාපනය වනු ඇත"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"අමතර ආරක්ෂාවක් අවශ්‍යයි. PIN ටික කලකට භාවිතා කර නැත."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"අමතර ආරක්ෂාවක් අවශ්‍යයි. මුරපදය ටික කලකට භාවිතා කර නැත."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"අමතර ආරක්ෂාවක් අවශ්‍යයි. රටාව ටික කලකට භාවිතා කර නැත."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"බුබුළ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ප්‍රතිසමය"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ඉදිරියට යාමට ඔබේ උපාංගය අගුළු හරින්න"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"පසුව යාවත්කාලීනය ස්ථාපනය කිරීමට PIN ඇතුළු කරන්න"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"පසුව යාවත්කාලීනය ස්ථාපනය කිරීමට මුරපදය ඇතුළු කරන්න"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"පසුව යාවත්කාලීනය ස්ථාපනය කිරීමට රටාව අඳින්න"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"උපාංගය යාවත්කාලීන කරන ලදි. ඉදිරියට යාමට PIN ඇතුළු කරන්න."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"උපාංගය යාවත්කාලීන කරන ලදි. ඉදිරියට යාමට මුරපදය ඇතුළු කරන්න."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"උපාංගය යාවත්කාලීන කරන ලදි. ඉදිරියට යාමට රටාව අඳින්න."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-sk/strings.xml b/packages/SystemUI/res-keyguard/values-sk/strings.xml
index b12c9d3..4730273 100644
--- a/packages/SystemUI/res-keyguard/values-sk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sk/strings.xml
@@ -22,7 +22,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"Zadajte PIN"</string>
     <string name="keyguard_enter_pin" msgid="8114529922480276834">"Zadajte PIN"</string>
-    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Zadajte vzor"</string>
+    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Zadajte svoj vzor"</string>
     <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Nakreslite vzor"</string>
     <string name="keyguard_enter_your_password" msgid="7225626204122735501">"Zadajte heslo"</string>
     <string name="keyguard_enter_password" msgid="6483623792371009758">"Zadajte heslo"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Po silnej zámke sa vyžaduje PIN"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Po silnej zámke sa vyžaduje heslo"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Po silnej zámke sa vyžaduje vzor"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Aktualizácia sa nainštaluje počas nečinnosti"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Treba lepšie zabezp. Kód PIN nebol dlhšie použitý."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Treba lepšie zabezp. Heslo nebolo dlhšie použité."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Treba lepšie zabezp. Vzor nebol dlhšie použitý."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bublina"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analógový"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Ak chcete pokračovať, odomknite zariadenie"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Zadajte PIN, aby sa aktualizácia nainštalovala neskôr"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Zadajte heslo, aby sa aktualizácia nainštalovala neskôr"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Nakreslite vzor, aby sa aktualizácia nainštalovala neskôr"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Zariadenie bolo aktualizované. Pokračujte zadaním kódu PIN."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Zariadenie bolo aktualizované. Pokračujte zadaním hesla."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Zariadenie bolo aktualizované. Pokračujte nakreslením vzoru."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-sl/strings.xml b/packages/SystemUI/res-keyguard/values-sl/strings.xml
index 3f29688..bddb9ad 100644
--- a/packages/SystemUI/res-keyguard/values-sl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sl/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Po zaklepu se zahteva vnos kode PIN"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Po zaklepu se zahteva vnos gesla"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Po zaklepu se zahteva vnos vzorca"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Posodobitev bo nameščena v času nedejavnosti"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Zahtevana je dodatna varnost. Koda PIN nekaj časa ni bila uporabljena."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Zahtevana je dodatna varnost. Geslo nekaj časa ni bilo uporabljeno."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Zahtevana je dodatna varnost. Vzorec nekaj časa ni bil uporabljen."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Mehurček"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogno"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Za nadaljevanje odklenite napravo"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Vnesite kodo PIN, če želite posodobitev namestiti pozneje"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Vnesite geslo, če želite posodobitev namestiti pozneje"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Narišite vzorec, če želite posodobitev namestiti pozneje"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Naprava je posodobljena. Vnesite kodo PIN za nadaljevanje."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Naprava je posodobljena. Vnesite geslo za nadaljevanje."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Naprava je posodobljena. Narišite vzorec za nadaljevanje."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-sq/strings.xml b/packages/SystemUI/res-keyguard/values-sq/strings.xml
index 149207c..1739119 100644
--- a/packages/SystemUI/res-keyguard/values-sq/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sq/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Pas bllokimit kërkohet kodi PIN"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Pas bllokimit kërkohet fjalëkalimi"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Pas bllokimit kërkohet motivi"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Përditësimi do të instalohet gjatë kohës joaktive"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Kërkohet një siguri më e lartë. Kodi PIN nuk është përdorur për njëfarë kohe."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Kërkohet një siguri më e lartë. Fjalëkalimi nuk është përdorur për njëfarë kohe."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Kërkohet një siguri më e lartë. Motivi nuk është përdorur për njëfarë kohe."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Flluskë"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analoge"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Shkyç pajisjen tënde për të vazhduar"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Fut kodin PIN për ta instaluar përditësimin më vonë"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Fut fjalëkalimin për ta instaluar përditësimin më vonë"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Vizato motivin për ta instaluar përditësimin më vonë"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Pajisja u përditësua. Fut kodin PIN për të vazhduar."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Pajisja u përditësua. Fut fjalëkalimin për të vazhduar."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Pajisja u përditësua. Vizato motivin për të vazhduar."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-sr/strings.xml b/packages/SystemUI/res-keyguard/values-sr/strings.xml
index bded34a..b8c4b55 100644
--- a/packages/SystemUI/res-keyguard/values-sr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sr/strings.xml
@@ -27,7 +27,7 @@
     <string name="keyguard_enter_your_password" msgid="7225626204122735501">"Унесите лозинку"</string>
     <string name="keyguard_enter_password" msgid="6483623792371009758">"Унесите лозинку"</string>
     <string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Неважећа картица."</string>
-    <string name="keyguard_charged" msgid="5478247181205188995">"Напуњена је"</string>
+    <string name="keyguard_charged" msgid="5478247181205188995">"Напуњено"</string>
     <string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Бежично пуњење"</string>
     <string name="keyguard_plugged_in_dock" msgid="2122073051904360987">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Пуни се"</string>
     <string name="keyguard_plugged_in" msgid="8169926454348380863">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Пуни се"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN је обавезан после закључавања"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Лозинка је обавезна после закључавања"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Шаблон је обавезан после закључавања"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Ажурирање се инсталира током неактивности"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Потребна је додатна заштита. PIN дуго није коришћен."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Потребна је додатна заштита. Лозинка дуго није коришћена."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Потребна је додатна заштита. Шаблон дуго није коришћен."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Мехурићи"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Аналогни"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Откључајте уређај да бисте наставили"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Унесите PIN да бисте касније исталирали ажурирање"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Унесите лозинку да бисте касније инсталирали ажурирање"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Нацртајте шаблон да бисте касније инсталирали ажурирање"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Уређај је ажуриран. Унесите PIN да бисте наставили."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Уређај је ажуриран. Унесите лозинку да бисте наставили."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Уређај је ажуриран. Нацртајте шаблон да бисте наставили."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-sv/strings.xml b/packages/SystemUI/res-keyguard/values-sv/strings.xml
index c11e0f1..bec1771 100644
--- a/packages/SystemUI/res-keyguard/values-sv/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sv/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Pinkod krävs efter låsning"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Lösenord krävs efter låsning"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Mönster krävs efter låsning"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Uppdateringen installeras under inaktiva timmar"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Ökad säkerhet krävs. Pinkoden har inte använts på länge."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Ökad säkerhet krävs. Lösenordet har inte använts på länge."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Ökad säkerhet krävs. Mönstret har inte använts på länge."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bubbla"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Lås upp enheten för att fortsätta"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Ange pinkoden för att installera uppdateringen senare"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Ange lösenordet för att installera uppdateringen senare"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Rita mönstret för att installera uppdateringen senare"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Enheten har uppdaterats. Ange pinkoden för att fortsätta."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Enheten har uppdaterats. Ange lösenordet för att fortsätta."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Enheten har uppdaterats. Rita mönstret för att fortsätta."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-sw/strings.xml b/packages/SystemUI/res-keyguard/values-sw/strings.xml
index 943c76b..c6a8ed5 100644
--- a/packages/SystemUI/res-keyguard/values-sw/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sw/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"PIN inahitajika baada ya kufunga"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Nenosiri linahitajika baada ya kufunga"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Mchoro unahitajika baada ya kufunga"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Sasisho litasakinishwa wakati kifaa hakitumiki"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Usalama wa ziada unahitajika. PIN haikutumika kwa muda."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Usalama wa ziada unahitajika. Nenosiri halikutumika kwa muda."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Usalama wa ziada unahitajika. Mchoro haukutumika kwa muda."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Kiputo"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogi"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Fungua kifaa chako ili uendelee"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Weka PIN ili usakinishe sasisho baadaye"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Weka nenosiri ili usakinishe sasisho baadaye"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Chora mchoro ili usakinishe sasisho baadaye"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Kifaa kimesasishwa. Weka PIN ili uendelee."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Kifaa kimesasishwa. Weka nenosiri ili uendelee."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Kifaa kimesasishwa. Chora mchoro ili uendelee."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-ta/strings.xml b/packages/SystemUI/res-keyguard/values-ta/strings.xml
index 3e64755..147b36b 100644
--- a/packages/SystemUI/res-keyguard/values-ta/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ta/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"முழுப் பூட்டு காரணமாகப் பின் தேவை"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"முழுப் பூட்டு காரணமாகக் கடவுச்சொல் தேவை"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"முழுப் பூட்டு காரணமாகப் பேட்டர்ன் தேவை"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"செயல்பாடில்லாத நேரத்தில் புதுப்பிப்பு நிறுவப்படும்"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"சேர்த்த பாதுகாப்பு தேவை. பின் உபயோகிக்கவில்லை."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"சேர்த்த பாதுகாப்பு தேவை. கடவுச்சொல் உபயோகிக்கவில்லை."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"சேர்த்த பாதுகாப்பு தேவை. பேட்டர்ன் உபயோகிக்கவில்லை."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"பபிள்"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"அனலாக்"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"தொடர, சாதனத்தை அன்லாக் செய்யுங்கள்"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"புதுப்பிப்பைப் பின்னர் நிறுவ பின்னை உள்ளிடவும்"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"புதுப்பிப்பைப் பின்னர் நிறுவ கடவுச்சொல்லை உள்ளிடவும்"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"புதுப்பிப்பைப் பின்னர் நிறுவ பேட்டர்னை வரையவும்"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"சாதனம் புதுப்பிக்கப்பட்டது. தொடர பின்னை உள்ளிடவும்."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"சாதனம் புதுப்பிக்கப்பட்டது. தொடர கடவுச்சொல்லை உள்ளிடவும்."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"சாதனம் புதுப்பிக்கப்பட்டது. தொடர பேட்டர்னை வரையவும்."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml
index f1bcf9c..317fb30 100644
--- a/packages/SystemUI/res-keyguard/values-te/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-te/strings.xml
@@ -20,9 +20,9 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"మీ పిన్‌ని నమోదు చేయండి"</string>
+    <string name="keyguard_enter_your_pin" msgid="5429932527814874032">"మీ PINను ఎంటర్ చేయండి"</string>
     <string name="keyguard_enter_pin" msgid="8114529922480276834">"PINను ఎంటర్ చేయండి"</string>
-    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"మీ నమూనాను నమోదు చేయండి"</string>
+    <string name="keyguard_enter_your_pattern" msgid="351503370332324745">"మీ ఆకృతిని ఎంటర్ చేయండి"</string>
     <string name="keyguard_enter_pattern" msgid="7616595160901084119">"ఆకృతిని గీయండి"</string>
     <string name="keyguard_enter_your_password" msgid="7225626204122735501">"మీ పాస్‌వర్డ్‌ను ఎంటర్ చేయండి"</string>
     <string name="keyguard_enter_password" msgid="6483623792371009758">"పాస్‌వర్డ్‌ను ఎంటర్ చేయండి"</string>
@@ -54,11 +54,11 @@
     <string name="error_disable_esim_title" msgid="3802652622784813119">"eSIMని నిలపడం సాధ్యపడదు"</string>
     <string name="error_disable_esim_msg" msgid="2441188596467999327">"ఎర్రర్ కారణంగా eSIMని నిలపడం సాధ్యపడదు."</string>
     <string name="keyboardview_keycode_enter" msgid="6727192265631761174">"Enter"</string>
-    <string name="kg_wrong_pattern" msgid="5907301342430102842">"నమూనా తప్పు"</string>
+    <string name="kg_wrong_pattern" msgid="5907301342430102842">"ఆకృతి తప్పు"</string>
     <string name="kg_wrong_pattern_try_again" msgid="3603524940234151881">"ఆకృతి తప్పు. మళ్లీ గీయండి."</string>
     <string name="kg_wrong_password" msgid="4143127991071670512">"పాస్‌వర్డ్ తప్పు"</string>
     <string name="kg_wrong_password_try_again" msgid="6602878676125765920">"పాస్‌వర్డ్ తప్పు. రీట్రై."</string>
-    <string name="kg_wrong_pin" msgid="4160978845968732624">"పిన్ తప్పు"</string>
+    <string name="kg_wrong_pin" msgid="4160978845968732624">"PIN తప్పు"</string>
     <string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN తప్పు. రీట్రై చేయండి."</string>
     <string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"లేదా వేలిముద్రతో అన్‌లాక్ చేయండి"</string>
     <string name="kg_fp_not_recognized" msgid="5183108260932029241">"వేలిముద్ర గుర్తించబడలేదు"</string>
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"లాక్‌డౌన్ తర్వాత PIN అవసరం"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"లాక్‌డౌన్ తర్వాత పాస్‌వర్డ్ అవసరం"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"లాక్‌డౌన్ తర్వాత ఆకృతి అవసరం"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"ఇన్‌యాక్టివ్ వేళల్లో అప్‌డేట్ ఇన్‌స్టాల్ చేయబడుతుంది"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"మరింత సెక్యూరిటీ యాడ్ చెయ్యాలి. PINని ఈమధ్య వాడలేదు."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"యాడెడ్ సెక్యూరిటీ కావాలి. పాస్‌వర్డ్ ఈ మధ్య వాడలేదు."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"మరింత సెక్యూరిటీ కావాలి. ఆకృతిని ఈ మధ్య వాడలేదు."</string>
@@ -98,9 +99,9 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"SIMను అన్‌లాక్ చేస్తోంది…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"4 నుండి 8 సంఖ్యలు ఉండే పిన్‌ను టైప్ చేయండి."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"PUK కోడ్ అనేది 8 లేదా అంతకంటే ఎక్కువ సంఖ్యలు ఉండాలి."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"మీరు మీ పిన్‌ను <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_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_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"మీ PINను <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_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>
     <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>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"బబుల్"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ఎనలాగ్"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"కొనసాగించడానికి మీ పరికరాన్ని అన్‌లాక్ చేయండి"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"అప్‌డేట్‌ను తర్వాత ఇన్‌స్టాల్ చేయడానికి PINను ఎంటర్ చేయండి"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"అప్‌డేట్‌ను తర్వాత ఇన్‌స్టాల్ చేయడానికి పాస్‌వర్డ్‌ను ఎంటర్ చేయండి"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"అప్‌డేట్‌ను తర్వాత ఇన్‌స్టాల్ చేయడానికి ఆకృతిని గీయండి"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"పరికరం అప్‌డేట్ అయింది. కొనసాగడానికి PINను ఎంటర్ చేయండి."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"పరికరం అప్‌డేట్ అయింది. కొనసాగడానికి పాస్‌వర్డ్‌ను ఎంటర్ చేయండి."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"పరికరం అప్‌డేట్ అయింది. కొనసాగడానికి ఆకృతిని గీయండి."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-th/strings.xml b/packages/SystemUI/res-keyguard/values-th/strings.xml
index e8c7ef9..85a14fa 100644
--- a/packages/SystemUI/res-keyguard/values-th/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-th/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"ต้องป้อน PIN หลังจากการปิดล็อก"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"ต้องป้อนรหัสผ่านหลังจากการปิดล็อก"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"ต้องวาดรูปแบบหลังจากการปิดล็อก"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"การอัปเดตจะติดตั้งในระหว่างชั่วโมงที่ไม่ได้ใช้งาน"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"ต้องเพิ่มความปลอดภัย ไม่ได้ใช้ PIN มาระยะหนึ่ง"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"ต้องเพิ่มความปลอดภัย ไม่ได้ใช้รหัสผ่านมาระยะหนึ่ง"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"ต้องเพิ่มความปลอดภัย ไม่ได้ใช้รูปแบบมาระยะหนึ่ง"</string>
@@ -117,7 +118,7 @@
     <string name="kg_prompt_reason_timeout_password" msgid="8810879144143933690">"ใช้รหัสผ่านแทนเพื่อเพิ่มความปลอดภัย"</string>
     <string name="kg_prompt_reason_device_admin" msgid="6961159596224055685">"ผู้ดูแลระบบล็อกอุปกรณ์"</string>
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"มีการล็อกอุปกรณ์ด้วยตัวเอง"</string>
-    <string name="kg_face_not_recognized" msgid="7903950626744419160">"ไม่รู้จัก"</string>
+    <string name="kg_face_not_recognized" msgid="7903950626744419160">"ไม่รู้จักลายนิ้วมือ"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"เปิดการเข้าถึงกล้องในการตั้งค่าเพื่อใช้การปลดล็อกด้วยใบหน้า"</string>
     <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>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"บับเบิล"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"แอนะล็อก"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"ปลดล็อกอุปกรณ์ของคุณเพื่อดำเนินการต่อ"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"ป้อน PIN เพื่อติดตั้งอัปเดตในภายหลัง"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"ป้อนรหัสผ่านเพื่อติดตั้งอัปเดตในภายหลัง"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"วาดรูปแบบเพื่อติดตั้งอัปเดตในภายหลัง"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"อัปเดตอุปกรณ์แล้ว ป้อน PIN เพื่อดำเนินการต่อ"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"อัปเดตอุปกรณ์แล้ว ป้อนรหัสผ่านเพื่อดำเนินการต่อ"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"อัปเดตอุปกรณ์แล้ว วาดรูปแบบเพื่อดำเนินการต่อ"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-tl/strings.xml b/packages/SystemUI/res-keyguard/values-tl/strings.xml
index 4d9102c..1e51e0b 100644
--- a/packages/SystemUI/res-keyguard/values-tl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-tl/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Kailangan ang PIN pagkatapos ng lockdown"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Kailangan ang password pagkatapos ng lockdown"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Kailangan ang pattern pagkatapos ng lockdown"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Mag-i-install ang update sa mga hindi aktibong oras"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Kailangan pa ng seguridad. Matagal na hindi ginamit ang PIN."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Kailangan pa ng seguridad. Matagal na hindi ginamit ang password."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Kailangan pa ng seguridad. Matagal na hindi ginamit ang pattern."</string>
@@ -98,7 +99,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"Ina-unlock ang SIM…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"Mag-type ng PIN na 4 hanggang 8 numero."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"Dapat ay 8 numero o higit pa ang PUK code."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"Na-type mo nang mali ang iyong PIN 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_pin_attempts_dialog_message" msgid="544687656831558971">"Na-type mo nang mali ang iyong PIN nang <xliff:g id="NUMBER_0">%1$d</xliff:g> (na) beses. \n\nSubukan ulit pagkatapos ng <xliff:g id="NUMBER_1">%2$d</xliff:g> (na) segundo."</string>
     <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>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"I-unlock ang iyong device para magpatuloy"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Ilagay ang PIN para i-install ang update sa ibang pagkakataon"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Ilagay ang password para i-install ang update sa ibang pagkakataon"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Iguhit ang pattern para i-install ang update sa ibang pagkakataon"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Na-update na ang device. Ilagay ang PIN para magpatuloy."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Na-update na ang device. Ilagay ang password para magpatuloy."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Na-update na ang device. Iguhit ang pattern para magpatuloy."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-tr/strings.xml b/packages/SystemUI/res-keyguard/values-tr/strings.xml
index a2268ef..05a9c95 100644
--- a/packages/SystemUI/res-keyguard/values-tr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-tr/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Tam kilitlemenin ardından PIN gerekli"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Tam kilitlemenin ardından şifre gerekli"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Tam kilitlemenin ardından desen gerekli"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Güncelleme, etkin olmayan saatlerde yüklenecek"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Daha fazla güvenlik gerekli. PIN bir süredir kullanılmamış."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Daha fazla güvenlik gerekli. Şifre bir süredir kullanılmamış."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Daha fazla güvenlik gerekli. Desen bir süredir kullanılmamış."</string>
@@ -98,7 +99,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"SIM\'in kilidi açılıyor…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"4 ila 8 haneli bir PIN yazın."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"PUK kodu 8 veya daha çok basamaklı bir sayı olmalıdır."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"PIN kodunuzu <xliff:g id="NUMBER_0">%1$d</xliff:g> kez yanlış girdiniz. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> saniye içinde tekrar deneyin."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"PIN kodunuzu <xliff:g id="NUMBER_0">%1$d</xliff:g> kez yanlış girdiniz. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> saniye sonra tekrar deneyin."</string>
     <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>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Baloncuk"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Devam etmek için cihazınızın kilidini açın"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Güncellemeyi daha sonra yüklemek için PIN girin."</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Güncellemeyi daha sonra yüklemek için şifre girin."</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Güncellemeyi daha sonra yüklemek için desen çizin."</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Cihaz güncellendi. Devam etmek için PIN girin."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Cihaz güncellendi. Devam etmek için şifre girin."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Cihaz güncellendi. Devam etmek için desen çizin."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-uk/strings.xml b/packages/SystemUI/res-keyguard/values-uk/strings.xml
index 2fd1934..1c3c3ca 100644
--- a/packages/SystemUI/res-keyguard/values-uk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-uk/strings.xml
@@ -76,12 +76,13 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Після блокування входу потрібно ввести PIN-код"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Після блокування входу потрібно ввести пароль"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Після блокування входу потрібно намалювати ключ"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Оновлення встановиться під час годин неактивності"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Потрібен додатковий захист. PIN-код довго не використовувався."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Потрібен додатковий захист. Пароль довго не використовувався."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Потрібен додатковий захист. Ключ довго не використовувався."</string>
     <string name="kg_prompt_auth_timeout" msgid="6620679830980315048">"Потрібен додатковий захист. Пристрій довго не розблоковувався."</string>
-    <string name="kg_face_locked_out" msgid="2751559491287575">"Не розблоковано (фейсконтроль). Забагато спроб."</string>
+    <string name="kg_face_locked_out" msgid="2751559491287575">"Не розблоковано (фейс-контроль). Забагато спроб."</string>
     <string name="kg_fp_locked_out" msgid="6228277682396768830">"Не розблоковано (відбиток пальця). Забагато спроб."</string>
     <string name="kg_trust_agent_disabled" msgid="5400691179958727891">"Довірчий агент недоступний"</string>
     <string name="kg_primary_auth_locked_out_pin" msgid="5492230176361601475">"Неправильний PIN-код введено забагато разів"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Бульбашковий"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Аналоговий"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Розблокуйте пристрій, щоб продовжити"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Щоб установити оновлення пізніше, введіть PIN-код"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Щоб установити оновлення пізніше, введіть пароль"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Щоб установити оновлення пізніше, намалюйте ключ"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Пристрій оновлено. Щоб продовжити, введіть PIN-код."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Пристрій оновлено. Щоб продовжити, введіть пароль."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Пристрій оновлено. Щоб продовжити, намалюйте ключ."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-ur/strings.xml b/packages/SystemUI/res-keyguard/values-ur/strings.xml
index 596e4776..7784766 100644
--- a/packages/SystemUI/res-keyguard/values-ur/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ur/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"‏لاک ڈاؤن کے بعد PIN کی ضرورت ہوتی ہے"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"لاک ڈاؤن کے بعد پاس ورڈ کی ضرورت ہوتی ہے"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"لاک ڈاؤن کے بعد پیٹرن کی ضرورت ہوتی ہے"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"اپ ڈیٹ غیر فعال اوقات کے دوران انسٹال ہوگی"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"‏مزید سیکیورٹی چاہیے۔ PIN کچھ عرصے اسے استعمال نہیں ہوا ہے۔"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"مزید سیکیورٹی چاہیے۔ پاس ورڈ کچھ عرصے سے استعمال نہیں ہوا ہے۔"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"مزید سیکیورٹی چاہیے۔ پیٹرن کچھ عرصے سے استعمال نہیں ہوا ہے۔"</string>
@@ -98,7 +99,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"‏SIM کو غیر مقفل کیا جا رہا ہے…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"‏ایسا PIN ٹائپ کریں جو 4 تا 8 اعداد پر مشتمل ہو۔"</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"‏PUK کوڈ 8 یا زائد اعداد پر مشتمل ہونا چاہیے۔"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"‏آپ نے اپنا PIN <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_pin_attempts_dialog_message" msgid="544687656831558971">"‏آپ نے <xliff:g id="NUMBER_0">%1$d</xliff:g> بار اپنا PIN غلط طریقے سے ٹائپ کیا ہے۔ \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> سیکنڈ میں دوبارہ کوشش کریں۔"</string>
     <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>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"بلبلہ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"اینالاگ"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"جاری رکھنے کے لئے اپنا آلہ غیر مقفل کریں"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"‏بعد میں اپ ڈیٹ انسٹال کرنے کیلئے PIN درج کریں"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"بعد میں اپ ڈیٹ انسٹال کرنے کیلئے پاس ورڈ درج کریں"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"بعد میں اپ ڈیٹ انسٹال کرنے کیلئے پیٹرن ڈرا کریں"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"‏آلہ اپ ڈیٹ ہو گیا۔ جاری رکھنے کیلئے PIN درج کریں۔"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"آلہ اپ ڈیٹ ہو گیا۔ جاری رکھنے کیلئے پاس ورڈ درج کریں۔"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"آلہ اپ ڈیٹ ہو گیا۔ جاری رکھنے کیلئے پیٹرن ڈرا کریں۔"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-uz/strings.xml b/packages/SystemUI/res-keyguard/values-uz/strings.xml
index 0e2a6cf..28d18da 100644
--- a/packages/SystemUI/res-keyguard/values-uz/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-uz/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Bloklangandan keyin PIN kodni kiritish kerak"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Bloklangandan keyin parolni kiritish kerak"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Bloklangandan keyin grafik kalitni chizish kerak"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Yangilanish qurilma nofaol boʻlganda oʻrnatiladi"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Xavfsizlikni oshiring. PIN kod ancha vaqt ishlatilmadi."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Xavfsizlikni oshiring. Parol ancha vaqt ishlatilmadi."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Xavfsizlikni oshiring. Grafik kalit ancha vaqt chizilmadi"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Pufaklar"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Davom etish uchun qurilmangizni qulfdan chiqaring"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Yangilanishni keyinroq oʻrnatish uchun PIN kodni kiriting"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Yangilanishni keyinroq oʻrnatish uchun parolni kiriting"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Yangilanishni keyinroq oʻrnatish uchun grafik kalitni chizing"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Qurilma yangilandi. Davom etish uchun PIN kodni kiriting."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Qurilma yangilandi. Davom etish uchun parolni kiriting."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Qurilma yangilandi. Davom etish uchun grafik kalitni chizing."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-vi/strings.xml b/packages/SystemUI/res-keyguard/values-vi/strings.xml
index e2d2525..726a9e7 100644
--- a/packages/SystemUI/res-keyguard/values-vi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-vi/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Cần nhập mã PIN sau khi hết thời gian khoá"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Cần nhập mật khẩu sau khi hết thời gian khoá"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Cần vẽ hình mở khoá sau khi hết thời gian khoá"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Bản cập nhật sẽ cài đặt vào các giờ không hoạt động"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Cần tăng cường bảo mật. Đã lâu chưa dùng mã PIN."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Cần tăng cường bảo mật. Đã lâu chưa dùng mật khẩu"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Cần tăng cường bảo mật. Đã lâu chưa dùng hình mở khoá."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bong bóng"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Đồng hồ kim"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Mở khoá thiết bị của bạn để tiếp tục"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Hãy nhập mã PIN để cài đặt bản cập nhật vào lúc khác"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Hãy nhập mật khẩu để cài đặt bản cập nhật vào lúc khác"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Hãy vẽ hình mở khoá để cài đặt bản cập nhật vào lúc khác"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Đã cập nhật thiết bị. Hãy nhập mã PIN để tiếp tục."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Đã cập nhật thiết bị. Hãy nhập mật khẩu để tiếp tục."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Đã cập nhật thiết bị. Hãy vẽ hình mở khoá để tiếp tục."</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml
index 2888c37..0efe3bf 100644
--- a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"一旦设备被锁定,必须输入 PIN 码才能解锁"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"一旦设备被锁定,必须输入密码才能解锁"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"一旦设备被锁定,必须绘制图案才能解锁"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"可用更新会在设备闲置期间安装"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"需要锁定设备以提高安全性。已有一段时间未使用 PIN 码了。"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"需要锁定设备以提高安全性。已有一段时间未使用密码了。"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"需要锁定设备以提高安全性。已有一段时间未使用图案了。"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"泡泡"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"指针"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"解锁设备才能继续操作"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"需要输入 PIN 码才能稍后安装更新"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"需要输入密码才能稍后安装更新"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"需要绘制解锁图案才能稍后安装更新"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"设备已更新。您需要输入 PIN 码才能继续。"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"设备已更新。您需要输入密码才能继续。"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"设备已更新。您需要绘制解锁图案才能继续。"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml
index 20a0360..58c3034 100644
--- a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml
@@ -73,10 +73,11 @@
     <string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"使用密碼或指紋解鎖"</string>
     <string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"使用解鎖圖案或指紋解鎖"</string>
     <string name="kg_prompt_after_dpm_lock" msgid="6002804765868345917">"為提高安全性,公司政策已鎖定裝置"</string>
-    <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"需要輸入 PIN 才能解除禁閉模式"</string>
-    <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"需要輸入密碼解才能解除禁閉模式"</string>
-    <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"需要畫出解鎖圖案才能解除禁閉模式"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"裝置會在閒置時安裝更新"</string>
+    <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"需要輸入 PIN 才能解除鎖定"</string>
+    <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"需要輸入密碼解才能解除鎖定"</string>
+    <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"需要畫出解鎖圖案才能解除鎖定"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"需要加強安全設定:已有一段時間沒有使用 PIN。"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"需要加強安全設定:已有一段時間沒有使用密碼。"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"需要加強安全設定:已有一段時間沒有使用解鎖圖案。"</string>
@@ -98,13 +99,13 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="1123048780346295748">"正在解鎖 SIM 卡…"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="2762202646949552978">"請輸入 4 至 8 位數的 PIN 碼。"</string>
     <string name="kg_invalid_sim_puk_hint" msgid="5319756880543857694">"PUK 碼應由 8 個或以上數字組成。"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"您已輸入錯誤的 PIN 碼 <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_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>
-    <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>
-    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM 卡的 PUK 碼不正確,您還可以再試 # 次。如果仍然輪入錯誤,SIM 卡將永久無法使用。}other{SIM 卡的 PUK 碼不正確,您還可以再試 # 次。如果仍然輪入錯誤,SIM 卡將永久無法使用。}}"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="544687656831558971">"你已輸入錯誤的 PIN 碼 <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_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>
+    <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>
+    <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>
@@ -119,10 +120,16 @@
     <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>
-    <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="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>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"解鎖裝置以繼續"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"輸入 PIN 即可在稍後安裝更新"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"輸入密碼即可在稍後安裝更新"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"畫出解鎖圖案即可在稍後安裝更新"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"裝置已更新。輸入 PIN 即可繼續。"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"裝置已更新。輸入密碼即可繼續。"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"裝置已更新。畫出解鎖圖案即可繼續。"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
index b73e803c..35e7824 100644
--- a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"裝置鎖定後,必須輸入 PIN 碼才能解鎖"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"裝置鎖定後,必須輸入密碼才能解鎖"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"裝置鎖定後,必須畫出解鎖圖案才能解鎖"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"裝置會在閒置時安裝更新"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"裝置已有一段時間未鎖定,請使用 PIN 碼鎖定裝置以策安全。"</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"裝置已有一段時間未鎖定,請使用密碼鎖定裝置以策安全。"</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"裝置已有一段時間未鎖定,請使用解鎖圖案鎖定裝置以策安全。"</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"泡泡"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"類比"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"解鎖裝置才能繼續操作"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"請輸入 PIN 碼,系統稍後會安裝更新"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"請輸入密碼,系統稍後會安裝更新"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"請畫出解鎖圖案,系統稍後會安裝更新"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"裝置已更新。如要繼續操作,請輸入 PIN 碼。"</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"裝置已更新。如要繼續操作,請輸入密碼。"</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"裝置已更新。如要繼續操作,請畫出解鎖圖案。"</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values-zu/strings.xml b/packages/SystemUI/res-keyguard/values-zu/strings.xml
index 6a2d368..e229c7e 100644
--- a/packages/SystemUI/res-keyguard/values-zu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zu/strings.xml
@@ -76,7 +76,8 @@
     <string name="kg_prompt_after_user_lockdown_pin" msgid="5374732179740050373">"Iphinikhodi iyadingeka ngemva kokukhiya"</string>
     <string name="kg_prompt_after_user_lockdown_password" msgid="9097968458291129795">"Iphasiwedi iyadingeka ngemuva kokukhiya"</string>
     <string name="kg_prompt_after_user_lockdown_pattern" msgid="215072203613597906">"Iphethini iyadingeka ngemva kokukhiya"</string>
-    <string name="kg_prompt_unattended_update" msgid="8223448855578632202">"Isibuyekezo sizongena phakathi namahora okungasebenzi"</string>
+    <!-- no translation found for kg_prompt_unattended_update (4366635751738712452) -->
+    <skip />
     <string name="kg_prompt_pin_auth_timeout" msgid="5868644725126275245">"Ukuphepha okwengeziwe kuyadingeka. Iphinikhodi ayisetshenziswanga isikhathi eside."</string>
     <string name="kg_prompt_password_auth_timeout" msgid="5809110458491920871">"Ukuphepha okwengeziwe kuyadingeka. Iphasiwedi ayisetshenziswanga isikhathi eside."</string>
     <string name="kg_prompt_pattern_auth_timeout" msgid="1860605401869262178">"Ukuphepha okwengeziwe kuyadingeka. Iphethini ayisetshenziswanga isikhathi eside."</string>
@@ -125,4 +126,10 @@
     <string name="clock_title_bubble" msgid="2204559396790593213">"Ibhamuza"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"I-Analog"</string>
     <string name="keyguard_unlock_to_continue" msgid="7509503484250597743">"Vula idivayisi yakho ukuze uqhubeke"</string>
+    <string name="kg_prompt_unattended_update_pin" msgid="5979434876768801873">"Faka Iphinikhodi ukuze ufake isibuyekezo kamuva"</string>
+    <string name="kg_prompt_unattended_update_password" msgid="8805664437604967210">"Faka iphasiwedi ukuze ufake isibuyekezo kamuva"</string>
+    <string name="kg_prompt_unattended_update_pattern" msgid="8580479377489546091">"Dweba iphethini ukuze ufake isibuyekezo kamuva"</string>
+    <string name="kg_prompt_after_update_pin" msgid="7051709651908643013">"Idivayisi ibuyekeziwe. Faka Iphinikhodi ukuze uqhubeke."</string>
+    <string name="kg_prompt_after_update_password" msgid="153703052501352094">"Idivayisi ibuyekeziwe. Faka iphasiwedi ukuze uqhubeke."</string>
+    <string name="kg_prompt_after_update_pattern" msgid="1484084551298241992">"Idivayisi ibuyekeziwe. Dweba iphethini ukuze uqhubeke."</string>
 </resources>
diff --git a/packages/SystemUI/res-product/values-af/strings.xml b/packages/SystemUI/res-product/values-af/strings.xml
index 1fab1d4..c1a6803 100644
--- a/packages/SystemUI/res-product/values-af/strings.xml
+++ b/packages/SystemUI/res-product/values-af/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Jy het die foon <xliff:g id="NUMBER">%d</xliff:g> keer verkeerd probeer ontsluit. Die werkprofiel sal verwyder word, wat alle profieldata sal uitvee."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%1$d</xliff:g> keer verkeerd geteken. Na nóg <xliff:g id="NUMBER_1">%2$d</xliff:g> onsuksesvolle pogings sal jy gevra word om jou e-posrekening te gebruik om jou tablet te ontsluit.\n\n Probeer weer oor <xliff:g id="NUMBER_2">%3$d</xliff:g> sekondes."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%1$d</xliff:g> keer verkeerd geteken. Na nóg <xliff:g id="NUMBER_1">%2$d</xliff:g> onsuksesvolle pogings sal jy gevra word om jou e-posrekening te gebruik om jou foon te ontsluit.\n\n Probeer weer oor <xliff:g id="NUMBER_2">%3$d</xliff:g> sekondes."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Foon het afgeskakel weens hitte"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Toestel het afgeskakel weens hitte"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet het afgeskakel weens hitte"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Jou foon werk nou normaal.\nTik vir meer inligting"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Jou toestel werk nou normaal.\nTik vir meer inligting"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Jou tablet werk nou normaal.\nTik vir meer inligting"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Jou foon was te warm en het afgeskakel om af te koel. Jou foon werk nou normaal.\n\nJou foon sal dalk te warm word as jy:\n	• Hulpbronintensiewe apps (soos dobbel-, video- of navigasieapps) gebruik\n	• Groot lêers af- of oplaai\n	• Jou foon in hoë temperature gebruik"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Jou toestel was te warm en het afgeskakel om af te koel. Jou toestel werk nou normaal.\n\nJou toestel sal dalk te warm word as jy:\n	• Hulpbronintensiewe apps (soos dobbel-, video- of navigasieapps) gebruik\n	• Groot lêers af- of oplaai\n	• Jou toestel in hoë temperature gebruik"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Jou tablet was te warm en het afgeskakel om af te koel. Jou tablet werk nou normaal.\n\nJou tablet sal dalk te warm word as jy:\n	• Hulpbronintensiewe apps (soos dobbel-, video- of navigasieapps) gebruik\n	• Groot lêers af- of oplaai\n	• Jou tablet in hoë temperature gebruik"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Foon word warm"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Toestel word warm"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet word warm"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Sommige kenmerke word beperk terwyl die foon besig is om af te koel.\nTik vir meer inligting"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Sommige kenmerke word beperk terwyl die toestel besig is om af te koel.\nTik vir meer inligting"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Sommige kenmerke word beperk terwyl die tablet besig is om af te koel.\nTik vir meer inligting"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Jou foon sal outomaties probeer afkoel. Jy kan steeds jou foon gebruik, maar dit sal dalk stadiger werk.\n\nJou foon sal normaal werk nadat dit afgekoel het."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Jou toestel sal outomaties probeer afkoel. Jy kan steeds jou toestel gebruik, maar dit sal dalk stadiger werk.\n\nJou toestel sal normaal werk nadat dit afgekoel het."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Jou tablet sal outomaties probeer afkoel. Jy kan steeds jou tablet gebruik, maar dit sal dalk stadiger werk.\n\nJou tablet sal normaal werk nadat dit afgekoel het."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Die vingerafdruksensor is op die aan/af-skakelaar. Dit is die plat knoppie langs die verhewe volumeknoppie aan die kant van die tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Die vingerafdruksensor is op die aan/af-skakelaar. Dit is die plat knoppie langs die verhewe volumeknoppie aan die kant van die toestel."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Die vingerafdruksensor is op die aan/af-skakelaar. Dit is die plat knoppie langs die verhewe volumeknoppie aan die kant van die foon."</string>
diff --git a/packages/SystemUI/res-product/values-am/strings.xml b/packages/SystemUI/res-product/values-am/strings.xml
index ab55d22..b8b2df8 100644
--- a/packages/SystemUI/res-product/values-am/strings.xml
+++ b/packages/SystemUI/res-product/values-am/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"ስልኩን <xliff:g id="NUMBER">%d</xliff:g> ጊዜ ትክክል ባልሆነ መልኩ ለመክፈት ሞክረዋል። የስራ መገለጫው ይወገዳል፣ ይህም ሁሉንም የመገለጫ ውሂብ ይሰርዛል።"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"የመክፈቻ ስርዓተ ጥለቱን <xliff:g id="NUMBER_0">%1$d</xliff:g> ጊዜ በትክክል አልሳሉትም። ከ<xliff:g id="NUMBER_1">%2$d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ የኢሜይል መለያ ተጠቅመው ጡባዊዎን እንዲከፍቱ ይጠየቃሉ።\n\n ከ<xliff:g id="NUMBER_2">%3$d</xliff:g> ከሰከንዶች በኋላ እንደገና ይሞክሩ።"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"የመክፈቻ ስርዓተ ጥለቱን <xliff:g id="NUMBER_0">%1$d</xliff:g> ጊዜ በትክክል አልሳሉትም። ከ<xliff:g id="NUMBER_1">%2$d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ የኢሜይል መለያ ተጠቅመው ስልክዎን እንዲከፍቱ ይጠየቃሉ።\n\nእባክዎ ከ<xliff:g id="NUMBER_2">%3$d</xliff:g> ሰከንዶች በኋላ እንደገና ይሞክሩ።"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"ስልክ በሙቀት ምክንያት ጠፍቷል"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"መሣሪያ በሙቀት ምክንያት ጠፍቷል"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"ጡባዊ በሙቀት ምክንያት ጠፍቷል"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"የእርስዎ ስልክ በመደበኛነት በማሄድ ላይ ነው።\nለተጨማሪ መረጃ መታ ያድርጉ"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"የእርስዎ ጡባዊ በመደበኛነት በማሄድ ላይ ነው።\nለተጨማሪ መረጃ መታ ያድርጉ"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"የእርስዎ ጡባዊ በመደበኛነት በማሄድ ላይ ነው።\nለተጨማሪ መረጃ መታ ያድርጉ"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"የእርስዎ ስልክ በጣም ግሎ ነበር ስለዚህ እንዲቀዘቅዝ ጠፍቷል። የእርስዎ ስልክ አሁን በመደበኛነት በማሄድ ላይ ነው።\n\nየሚከተሉትን ካደረጉ የእርስዎ ስልክ በጣም ሊግል ይችላል፦\n	• ኃይል በጣም የሚጠቀሙ መተግበሪያዎችን (እንደ ጨዋታ፣ ቪድዮ ወይም የአሰሳ መተግበሪያዎች ያሉ) ከተጠቀሙ\n	• ትልልቅ ፋይሎችን ካወረዱ ወይም ከሰቀሉ\n	• ስልክዎን በከፍተኛ ሙቀት ውስጥ ከተጠቀሙ"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"የእርስዎ መሣሪያ በጣም ግሎ ነበር ስለዚህ እንዲቀዘቅዝ ጠፍቷል። የእርስዎ መሣሪያ አሁን በመደበኛነት በማሄድ ላይ ነው።\n\nየሚከተሉትን ካደረጉ የእርስዎ መሣሪያ በጣም ሊግል ይችላል፦\n	• ኃይል በጣም የሚጠቀሙ መተግበሪያዎችን (እንደ ጨዋታ፣ ቪድዮ ወይም የአሰሳ መተግበሪያዎች ያሉ) ከተጠቀሙ\n	• ትልልቅ ፋይሎችን ካወረዱ ወይም ከሰቀሉ\n	• መሣሪያዎን በከፍተኛ ሙቀት ውስጥ ከተጠቀሙ"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"የእርስዎ ጡባዊ በጣም ግሎ ነበር ስለዚህ እንዲቀዘቅዝ ጠፍቷል። የእርስዎ ጡባዊ አሁን በመደበኛነት በማሄድ ላይ ነው።\n\nየሚከተሉትን ካደረጉ የእርስዎ ጡባዊ በጣም ሊግል ይችላል፦\n	• ኃይል በጣም የሚጠቀሙ መተግበሪያዎችን (እንደ ጨዋታ፣ ቪድዮ ወይም የአሰሳ መተግበሪያዎች ያሉ) ከተጠቀሙ\n	• ትልልቅ ፋይሎችን ካወረዱ ወይም ከሰቀሉ\n	• ጡባዊዎን በከፍተኛ ሙቀት ውስጥ ከተጠቀሙ"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"የስልክ ሙቀት እየጨመረ ነው"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"የመሣሪያ ሙቀት እየጨመረ ነው"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"የጡባዊ ሙቀት እየጨመረ ነው"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"ስልክ እየቀዘቀዘ ሳለ አንዳንድ ባህሪያት ይገደባሉ።\nለተጨማሪ መረጃ መታ ያድርጉ"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"መሣሪያ እየቀዘቀዘ ሳለ አንዳንድ ባህሪያት ይገደባሉ።\nለተጨማሪ መረጃ መታ ያድርጉ"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"ጡባዊ እየቀዘቀዘ ሳለ አንዳንድ ባህሪያት ይገደባሉ።\nለተጨማሪ መረጃ መታ ያድርጉ"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"የእርስዎ ስልክ በራስ-ሰር ለመቀዝቀዝ ይሞክራል። አሁንም ስልክዎን መጠቀም ይችላሉ ነገር ግን ቀትፋፋ ሆኖ ሊያሄድ ይችላል።\n\nአንዴ ስልክዎ ከቀዘቀዘ በኋላ በመደበኛነት ያሄዳል።"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"መሣሪያዎ በራስ-ሰር ለመቀዝቀዝ ይሞክራል። አሁንም መሣሪያዎን መጠቀም ይችላሉ ነገር ግን ቀርፋፋ ሆኖ ሊያሄድ ይችላል።\n\nአንዴ መሣሪያዎ ከቀዘቀዘ በኋላ በመደበኛነት ያሄዳል"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"ጡባዊዎ በራስ-ሰር ለመቀዝቀዝ ይሞክራል። አሁንም ጡባዊዎን መጠቀም ይችላሉ ነገር ግን ቀርፋፋ ሆኖ ሊያሄድ ይችላል።\n\nአንዴ ጡባዊዎ ከቀዘቀዘ በኋላ በመደበኛነት ያሄዳል።"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"የጣት አሻራ ዳሳሹ የማብሪያ/ማጥፊያ ቁልፉ ላይ ነው። በጡባዊው ጫፍ ላይ ከፍ ካለው የድምፅ አዝራር ቀጥሎ ያለው ጠፍጣፋ አዝራር ነው።"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"የጣት አሻራ ዳሳሹ የማብሪያ/ማጥፊያ ቁልፉ ላይ ነው። በመሣሪያው ጫፍ ላይ ከፍ ካለው የድምፅ አዝራር ቀጥሎ ያለው ጠፍጣፋ አዝራር ነው።"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"የጣት አሻራ ዳሳሹ የማብሪያ/ማጥፊያ ቁልፉ ላይ ነው። በስልኩ ጫፍ ላይ ከፍ ካለው የድምፅ አዝራር ቀጥሎ ያለው ጠፍጣፋ አዝራር ነው።"</string>
diff --git a/packages/SystemUI/res-product/values-ar/strings.xml b/packages/SystemUI/res-product/values-ar/strings.xml
index 1664d6f..4d4d8d0 100644
--- a/packages/SystemUI/res-product/values-ar/strings.xml
+++ b/packages/SystemUI/res-product/values-ar/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"أخطأت في محاولة فتح قفل الهاتف <xliff:g id="NUMBER">%d</xliff:g> مرة. ستتم إزالة الملف الشخصي للعمل، ومن ثم يتم حذف جميع بياناته."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"رسمت نقش فتح القفل بشكل غير صحيح <xliff:g id="NUMBER_0">%1$d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%2$d</xliff:g> محاولة غير ناجحة أخرى، ستُطالَب بفتح قفل الجهاز اللوحي باستخدام معلومات حساب بريد إلكتروني.\n\n يُرجى إعادة المحاولة خلال <xliff:g id="NUMBER_2">%3$d</xliff:g> ثانية."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"رسمت نقش فتح القفل بشكل غير صحيح <xliff:g id="NUMBER_0">%1$d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%2$d</xliff:g> محاولة غير ناجحة أخرى، ستُطالَب بفتح قفل الهاتف باستخدام حساب بريد إلكتروني.\n\n يُرجى إعادة المحاولة خلال <xliff:g id="NUMBER_2">%3$d</xliff:g> ثانية."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"تم إطفاء الهاتف بسبب ارتفاع درجة حرارته"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"تم إطفاء الجهاز بسبب ارتفاع درجة حرارته"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"تم إطفاء الجهاز اللوحي لارتفاع حرارته"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"يعمل هاتفك الآن بشكل طبيعي.\nانقر للحصول على مزيد من المعلومات."</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"يعمل جهازك الآن بشكل طبيعي.\nانقر للحصول على مزيد من المعلومات."</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"يعمل جهازك اللوحي الآن بشكل طبيعي.\nانقر للحصول على مزيد من المعلومات."</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"ارتفعت درجة حرارة هاتفك بشدة، لذا تم إطفاؤه لخفض درجة حرارته. يعمل هاتفك الآن بشكل طبيعي.\n\nقد ترتفع درجة حرارة هاتفك بشدة إذا:\n	• استخدمت تطبيقات تستهلك موارد الجهاز بصورة كبيرة (مثل تطبيقات الألعاب أو الفيديو أو التنقل)\n	• نزَّلت أو حمَّلت ملفات كبيرة الحجم\n	• استخدمت هاتفك وسط أجواء مرتفعة الحرارة"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"ارتفعت درجة حرارة جهازك بشدة، لذا تم إطفاؤه لخفض درجة حرارته. يعمل جهازك الآن بشكل طبيعي.\n\nقد ترتفع درجة حرارة جهازك بشدة إذا:\n	• استخدمت تطبيقات تستهلك موارد الجهاز بصورة كبيرة (مثل تطبيقات الألعاب أو الفيديو أو التنقل)\n	• نزَّلت أو حمَّلت ملفات كبيرة الحجم\n	• استخدمت جهازك وسط أجواء مرتفعة الحرارة"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"ارتفعت درجة حرارة جهازك اللوحي بشدة، لذا تم إطفاؤه لخفض درجة حرارته. يعمل جهازك اللوحي الآن بشكل طبيعي.\n\nقد ترتفع درجة حرارة جهازك اللوحي بشدة إذا:\n	• استخدمت تطبيقات تستهلك موارد الجهاز بصورة كبيرة (مثل تطبيقات الألعاب أو الفيديو أو التنقل)\n	• نزَّلت أو حمَّلت ملفات كبيرة الحجم\n	• استخدمت جهازك اللوحي وسط أجواء مرتفعة الحرارة"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"تزداد درجة حرارة الهاتف"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"تزداد درجة حرارة الجهاز"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"تزداد درجة حرارة الجهاز اللوحي"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"سيتم فرض قيود على بعض الميزات إلى أن تنخفض درجة حرارة الهاتف.\nانقر للحصول على مزيد من المعلومات."</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"سيتم فرض قيود على بعض الميزات إلى أن تنخفض درجة حرارة الجهاز.\nانقر للحصول على مزيد من المعلومات."</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"سيتم فرض قيود على بعض الميزات إلى أن تنخفض درجة حرارة الجهاز اللوحي.\nانقر للحصول على مزيد من المعلومات."</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"سيحاول الهاتف تخفيض درجة حرارته تلقائيًا. سيظل بإمكانك استخدام هاتفك، ولكنه قد يعمل بشكل أبطأ.\n\nبعد أن تنخفض درجة حرارة الهاتف، سيستعيد سرعته المعتادة."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"سيحاول جهازك تخفيض درجة حرارته تلقائيًا. سيظل بإمكانك استخدام جهازك، ولكنه قد يعمل بشكل أبطأ.\n\nبعد أن تنخفض درجة حرارة الجهاز، سيستعيد سرعته المعتادة."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"سيحاول جهازك اللوحي تخفيض درجة حرارته تلقائيًا. سيظل بإمكانك استخدام جهازك اللوحي، ولكنه قد يعمل بشكل أبطأ.\n\nبعد أن تنخفض درجة حرارة الجهاز اللوحي، سيستعيد سرعته المعتادة."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"توجد أداة استشعار بصمة الإصبع على زر التشغيل. زر التشغيل هو الزر المسطّح بجانب زرَّي التحكّم بمستوى الصوت البارزَين في الجزء الجانبي من الجهاز اللوحي."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"توجد أداة استشعار بصمة الإصبع على زر التشغيل. زر التشغيل هو الزر المسطّح بجانب زرَّي التحكّم بمستوى الصوت البارزَين في الجزء الجانبي من الجهاز."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"توجد أداة استشعار بصمة الإصبع على زر التشغيل. زر التشغيل هو الزر المسطّح بجانب زرَّي التحكّم بمستوى الصوت البارزَين في الجزء الجانبي من الهاتف."</string>
diff --git a/packages/SystemUI/res-product/values-as/strings.xml b/packages/SystemUI/res-product/values-as/strings.xml
index 05c69b8..40aab2f 100644
--- a/packages/SystemUI/res-product/values-as/strings.xml
+++ b/packages/SystemUI/res-product/values-as/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"আপুনি ফ’নটো আনলক কৰিবলৈ <xliff:g id="NUMBER">%d</xliff:g> বাৰ ভুলকৈ প্ৰয়াস কৰিছে। কৰ্মস্থানৰ প্ৰ’ফাইলটো আঁতৰোৱা হ’ব, যিয়ে প্ৰ’ফাইলটোৰ আটাইবোৰ ডেটা মচি পেলাব।"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"আপুনি নিজৰ আনলক কৰা আৰ্হিটো <xliff:g id="NUMBER_0">%1$d</xliff:g> বাৰ ভুলকৈ আঁকিছে। আৰু <xliff:g id="NUMBER_1">%2$d</xliff:g> বাৰ ভুলকৈ প্ৰয়াস কৰাৰ পাছত আপোনাক নিজৰ টেবলেটটো এটা ইমেইল একাউণ্টৰ জৰিয়তে আনলক কৰিবলৈ কোৱা হ’ব।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> ছেকেণ্ডৰ পাছত পুনৰ চেষ্টা কৰক।"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"আপুনি নিজৰ আনলক কৰা আৰ্হিটো <xliff:g id="NUMBER_0">%1$d</xliff:g> বাৰ ভুলকৈ আঁকিছে। আৰু <xliff:g id="NUMBER_1">%2$d</xliff:g> বাৰ ভুলকৈ প্ৰয়াস কৰাৰ পাছত আপোনাক নিজৰ ফ’নটো এটা ইমেইল একাউণ্টৰ জৰিয়তে আনলক কৰিবলৈ কোৱা হ’ব।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> ছেকেণ্ডৰ পাছত পুনৰ চেষ্টা কৰক।"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"ফ’নটো গৰম হোৱাৰ কাৰণে অফ হৈছিল"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"ডিভাইচটো গৰম হোৱাৰ কাৰণে অফ হৈছিল"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"টেবলেটটো গৰম হোৱাৰ কাৰণে অফ হৈছিল"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"আপোনাৰ ফ’নটো এতিয়া স্বাভাৱিকভাৱে চলি আছে।\nঅধিক তথ্যৰ বাবে টিপক"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"আপোনাৰ ডিভাইচটো এতিয়া স্বাভাৱিকভাৱে চলি আছে।\nঅধিক তথ্যৰ বাবে টিপক"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"আপোনাৰ টেবলেটটো এতিয়া স্বাভাৱিকভাৱে চলি আছে।\nঅধিক তথ্যৰ বাবে টিপক"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"আপোনাৰ ফ’নটো অত্যধিক গৰম হোৱাৰ বাবে সেইটো ঠাণ্ডা কৰিবলৈ অফ হৈছিল। আপোনাৰ ফ’নটো এতিয়া স্বাভাৱিকভাৱে চলি আছে।\n\nআপোনাৰ ফ’নটো গৰম হ’ব পাৰে, যদিহে আপুনি:\n	• ফ’নটোৰ হাৰ্ডৱেৰ অত্যধিক মাত্ৰাত ব্যৱহাৰ কৰা এপ্‌ (যেনে- ভিডিঅ’ গে’ম, ভিডিঅ’, দিক্-নিৰ্দেশনাৰ এপ্‌) ব্যৱহাৰ কৰে\n	• ডাঙৰ আকাৰৰ ফাইল আপল’ড অথবা ডাউনল’ড কৰে\n	• আপোনাৰ ফ’নটো উচ্চ তাপমাত্ৰাৰ পৰিৱেশত ব্যৱহাৰ কৰে"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"আপোনাৰ ডিভাইচটো অত্যধিক গৰম হোৱাৰ বাবে সেইটো ঠাণ্ডা কৰিবলৈ অফ হৈছিল। আপোনাৰ ডিভাইচটো এতিয়া স্বাভাৱিকভাৱে চলি আছে।\n\nআপোনাৰ ডিভাইচটো গৰম হ’ব পাৰে, যদিহে আপুনি:\n	• ডিভাইচটোৰ হাৰ্ডৱেৰ অত্যধিক মাত্ৰাত ব্যৱহাৰ কৰা এপ্‌ (যেনে- ভিডিঅ’ গে’ম, ভিডিঅ’, দিক্-নিৰ্দেশনাৰ এপ্‌) ব্যৱহাৰ কৰে\n	• ডাঙৰ আকাৰৰ ফাইল আপল’ড অথবা ডাউনল’ড কৰে\n	• আপোনাৰ ডিভাইচটো উচ্চ তাপমাত্ৰাৰ পৰিৱেশত ব্যৱহাৰ কৰে"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"আপোনাৰ টেবলেটটো অত্যধিক গৰম হোৱাৰ বাবে সেইটো ঠাণ্ডা কৰিবলৈ অফ হৈছিল। আপোনাৰ টেবলেটটো এতিয়া স্বাভাৱিকভাৱে চলি আছে।\n\nআপোনাৰ টেবলেটটো গৰম হ’ব পাৰে, যদিহে আপুনি:\n	• টেবলেটটোৰ হাৰ্ডৱেৰ অত্যধিক মাত্ৰাত ব্যৱহাৰ কৰা এপ্‌ (যেনে- ভিডিঅ’ গে’ম, ভিডিঅ’, দিক্-নিৰ্দেশনাৰ এপ্‌) ব্যৱহাৰ কৰে\n	• ডাঙৰ আকাৰৰ ফাইল আপল’ড অথবা ডাউনল’ড কৰে\n	• আপোনাৰ টেবলেটটো উচ্চ তাপমাত্ৰাৰ পৰিৱেশত ব্যৱহাৰ কৰে"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"ফ’নটো গৰম হ’বলৈ ধৰিছে"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"ডিভাইচটো গৰম হবলৈ ধৰিছে"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"টেবলেটটো গৰম হবলৈ ধৰিছে"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"ফ’নটো ঠাণ্ডা হ’বলৈ ধৰোঁতে কিছুমান সুবিধা উপলব্ধ নহয়।\nঅধিক তথ্যৰ বাবে টিপক"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"ডিভাইচটো ঠাণ্ডা হ’বলৈ ধৰোঁতে কিছুমান সুবিধা উপলব্ধ নহয়।\nঅধিক তথ্যৰ বাবে টিপক"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"টেবলেটটো ঠাণ্ডা হ’বলৈ ধৰোঁতে কিছুমান সুবিধা উপলব্ধ নহয়।\nঅধিক তথ্যৰ বাবে টিপক"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"আপোনাৰ ফ’নটোৱে নিজে নিজে ঠাণ্ডা হ’বলৈ স্বয়ংক্ৰিয়ভাৱে চেষ্টা কৰিব। আপুনি ফ’নটো ব্যৱহাৰ কৰি থাকিব পাৰে কিন্তু ই লাহে লাহে চলিব পাৰে।\n\nফ’নটো ঠাণ্ডা হোৱাৰ পাছত ই আগৰ নিচিনাকৈ চলিব।"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"আপোনাৰ ডিভাইচটোৱে নিজে নিজে ঠাণ্ডা হ’বলৈ স্বয়ংক্ৰিয়ভাৱে চেষ্টা কৰিব। আপুনি ডিভাইচটো ব্যৱহাৰ কৰি থাকিব পাৰে কিন্তু ই লাহে লাহে চলিব পাৰে।\n\nআপোনাৰ ডিভাইচটো ঠাণ্ডা হোৱাৰ পাছত ই আগৰ নিচিনাকৈ চলিব।"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"আপোনাৰ টেবলেটটোৱে নিজে নিজে ঠাণ্ডা হ’বলৈ স্বয়ংক্ৰিয়ভাৱে চেষ্টা কৰিব। আপুনি টেবলেটটো ব্যৱহাৰ কৰি থাকিব পাৰে কিন্তু ই লাহে লাহে চলিব পাৰে।\n\nআপোনাৰ টেবলেটটো ঠাণ্ডা হোৱাৰ পাছত ই আগৰ নিচিনাকৈ চলিব।"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"ফিংগাৰপ্ৰিণ্ট ছেন্সৰটো পাৱাৰ বুটামটোত আছে। এইটো হৈছে টেবলেটটোৰ প্ৰান্তত থকা উঠঙা ভলিউমৰ বুটামটোৰ কাষত থকা চেপেটা বুটামটো।"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"ফিংগাৰপ্ৰিণ্ট ছেন্সৰটো পাৱাৰ বুটামটোত আছে। এইটো হৈছে ডিভাইচটোৰ প্ৰান্তত থকা উঠঙা ভলিউমৰ বুটামটোৰ কাষত থকা চেপেটা বুটামটো।"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"ফিংগাৰপ্ৰিণ্ট ছেন্সৰটো পাৱাৰ বুটামটোত আছে। এইটো হৈছে ফ’নটোৰ প্ৰান্তত থকা উঠঙা ভলিউমৰ বুটামটোৰ কাষত থকা চেপেটা বুটামটো।"</string>
diff --git a/packages/SystemUI/res-product/values-az/strings.xml b/packages/SystemUI/res-product/values-az/strings.xml
index 3cc7d8c..b7e93fd 100644
--- a/packages/SystemUI/res-product/values-az/strings.xml
+++ b/packages/SystemUI/res-product/values-az/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Telefonun kilidini açmaq üçün <xliff:g id="NUMBER">%d</xliff:g> dəfə yanlış cəhd etmisiniz. İş profili silinəcək və bütün data ləğv ediləcək."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Kilid açma modelini <xliff:g id="NUMBER_0">%1$d</xliff:g> dəfə yanlış çəkmisiniz. Daha <xliff:g id="NUMBER_1">%2$d</xliff:g> uğursuz cəhddən sonra planşet kilidini e-poçt hesabınızla açmaq tələb olunacaq.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> saniyə sonra cəhd edin."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Kilid açma modelini artıq <xliff:g id="NUMBER_0">%1$d</xliff:g> dəfə yanlış çəkmisiniz. Daha <xliff:g id="NUMBER_1">%2$d</xliff:g> uğursuz cəhddən sonra telefon kilidini e-poçt hesabınızla açmaq tələb olunacaq.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> saniyə sonra cəhd edin."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefon qızdığı üçün söndü"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Cihaz qızdığı üçün söndü"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Planşet qızdığı üçün söndü"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Hazırda telefon normal işləyir.\nƏtraflı məlumat üçün toxunun"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Hazırda cihaz normal işləyir.\nƏtraflı məlumat üçün toxunun"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Hazırda planşet normal işləyir.\nƏtraflı məlumat üçün toxunun"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefon çox isti idi və soyumaq üçün söndü. Hazırda telefon normal işləyir.\n\nTelefon bu hallarda çox isinə bilər:\n	• Çoxresurslu tətbiq (oyun, video və ya naviqasiya tətbiqi kimi) istifadə etsəniz\n	• Böyük fayl endirsəniz və ya yükləsəniz\n	• Telefonu yüksək temperaturda istifadə etsəniz"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Cihaz çox isti idi və soyumaq üçün söndü. Hazırda cihaz normal işləyir.\n\nCihaz bu hallarda çox isinə bilər:\n	• Çoxresurslu tətbiq (oyun, video və ya naviqasiya tətbiqi kimi) istifadə etsəniz\n	• Böyük fayl endirsəniz və ya yükləsəniz\n	• Cihazı yüksək temperaturda istifadə etsəniz"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Planşet çox isti idi və soyumaq üçün söndü. Hazırda planşet normal işləyir.\n\nPlanşet bu hallarda çox isinə bilər:\n	• Çoxresurslu tətbiq (oyun, video və ya naviqasiya tətbiqi kimi) istifadə etsəniz\n	• Böyük fayl endirsəniz və ya yükləsəniz\n	• Planşeti yüksək temperaturda istifadə etsəniz"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefon isinir"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Cihaz isinir"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Planşet isinir"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Telefon soyuyarkən bəzi funksiyalar məhdudlaşdırılır.\nƏtraflı məlumat üçün toxunun"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Cihaz soyuyarkən bəzi funksiyalar məhdudlaşdırılır.\nƏtraflı məlumat üçün toxunun"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Planşet soyuyarkən bəzi funksiyalar məhdudlaşdırılır.\nƏtraflı məlumat üçün toxunun"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefon avtomatik soyuyacaq. Telefondan istifadə mümkündür, lakin asta işləyə bilər.\n\nSoyuduqdan sonra normal işləyəcək."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Cihaz avtomatik soyuyacaq. Cihazdan istifadə mümkündür, lakin asta işləyə bilər.\n\nSoyuduqdan sonra normal işləyəcək."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Planşet avtomatik soyuyacaq. Planşetdən istifadə mümkündür, lakin asta işləyə bilər.\n\nSoyuduqdan sonra normal işləyəcək."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Barmaq izi sensoru enerji düyməsinin üzərindədir. Bu, planşetin kənarındakı qabarıq səs düyməsinin yanındakı yastı düymədir."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Barmaq izi sensoru enerji düyməsinin üzərindədir. Bu, cihazın kənarındakı qabarıq səs düyməsinin yanındakı yastı düymədir."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Barmaq izi sensoru enerji düyməsinin üzərindədir. Bu, telefonun kənarındakı qabarıq səs düyməsinin yanındakı yastı düymədir."</string>
diff --git a/packages/SystemUI/res-product/values-b+sr+Latn/strings.xml b/packages/SystemUI/res-product/values-b+sr+Latn/strings.xml
index 07d8c94..067c16b 100644
--- a/packages/SystemUI/res-product/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res-product/values-b+sr+Latn/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Pogrešno ste pokušali da otključate telefon <xliff:g id="NUMBER">%d</xliff:g> puta. Uklonićemo poslovni profil, čime se brišu svi podaci sa profila."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Netačno ste nacrtali šablon za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. Ako pogrešno pokušate još <xliff:g id="NUMBER_1">%2$d</xliff:g> puta, zatražićemo da otključate tablet pomoću imejl naloga.\n\n Probajte ponovo za <xliff:g id="NUMBER_2">%3$d</xliff:g> sek."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Netačno ste nacrtali šablon za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. Ako pogrešno pokušate još <xliff:g id="NUMBER_1">%2$d</xliff:g> puta, zatražićemo da otključate telefon pomoću imejl naloga.\n\n Probajte ponovo za <xliff:g id="NUMBER_2">%3$d</xliff:g> sek."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefon se isključio zbog toplote"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Uređaj se isključio zbog toplote"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet se isključio zbog toplote"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Telefon sada funkcioniše normalno.\nDodirnite za više informacija"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Uređaj sada funkcioniše normalno.\nDodirnite za više informacija"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Tablet sada funkcioniše normalno.\nDodirnite za više informacija"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefon je bio prevruć, pa se isključio da se ohladi. Sada radi normalno.\n\nTelefon može previše da se ugreje ako:\n	• koristite aplikacije koje zahtevaju puno resursa (npr. video igre, video ili aplikacije za navigaciju)\n	• preuzimate ili otpremate velike fajlove\n	• koristite telefon na visokoj temperaturi"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Uređaj je bio prevruć, pa se isključio da se ohladi. Sada radi normalno.\n\nUređaj može previše da se ugreje ako:\n	• koristite aplikacije koje zahtevaju puno resursa (npr. video igre, video ili aplikacije za navigaciju)\n	• preuzimate ili otpremate velike fajlove\n	• koristite uređaj na visokoj temperaturi"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tablet je bio prevruć, pa se isključio da se ohladi. Sada radi normalno.\n\nTablet može previše da se ugreje ako:\n	• koristite aplikacije koje zahtevaju puno resursa (npr. video igre, video ili aplikacije za navigaciju)\n	• preuzimate ili otpremate velike fajlove\n	• koristite tablet na visokoj temperaturi"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefon se zagrejao"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Uređaj se zagrejao"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet se zagrejao"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Neke funkcije su ograničene dok se telefon ne ohladi.\nDodirnite za više informacija"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Neke funkcije su ograničene dok se uređaj ne ohladi.\nDodirnite za više informacija"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Neke funkcije su ograničene dok se tablet ne ohladi.\nDodirnite za više informacija"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefon će automatski pokušati da se ohladi. I dalje možete da koristite telefon, ali će možda raditi sporije.\n\nKad se telefon ohladi, funkcionisaće normalno."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Uređaj će automatski pokušati da se ohladi. I dalje možete da koristite uređaj, ali će možda raditi sporije.\n\nKad se uređaj ohladi, funkcionisaće normalno."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Tablet će automatski pokušati da se ohladi. I dalje možete da koristite tablet, ali će možda raditi sporije.\n\nKad se tablet ohladi, funkcionisaće normalno."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Senzor za otisak prsta se nalazi na dugmetu za uključivanje. To je ravno dugme pored izdignutog dugmeta za jačinu zvuka na ivici tableta."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Senzor za otisak prsta se nalazi na dugmetu za uključivanje. To je ravno dugme pored izdignutog dugmeta za jačinu zvuka na ivici uređaja."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Senzor za otisak prsta se nalazi na dugmetu za uključivanje. To je ravno dugme pored izdignutog dugmeta za jačinu zvuka na ivici telefona."</string>
diff --git a/packages/SystemUI/res-product/values-be/strings.xml b/packages/SystemUI/res-product/values-be/strings.xml
index e9c491a..f9ef0d5 100644
--- a/packages/SystemUI/res-product/values-be/strings.xml
+++ b/packages/SystemUI/res-product/values-be/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Вы не змаглі разблакіраваць тэлефон столькі разоў: <xliff:g id="NUMBER">%d</xliff:g>. Працоўны профіль будзе выдалены, і гэта прывядзе да выдалення ўсіх даных у профілі."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Вы няправільна ўвялі ўзор разблакіроўкі столькі разоў: <xliff:g id="NUMBER_0">%1$d</xliff:g>. Пасля яшчэ некалькіх няўдалых спроб (<xliff:g id="NUMBER_1">%2$d</xliff:g>) вам будзе прапанавана разблакіраваць планшэт, увайшоўшы ва ўліковы запіс электроннай пошты.\n\n Паўтарыце спробу праз <xliff:g id="NUMBER_2">%3$d</xliff:g> с."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Вы няправільна ўвялі ўзор разблакіроўкі столькі разоў: <xliff:g id="NUMBER_0">%1$d</xliff:g>. Пасля яшчэ некалькіх няўдалых спроб (<xliff:g id="NUMBER_1">%2$d</xliff:g>) вам будзе прапанавана разблакіраваць тэлефон, увайшоўшы ва ўліковы запіс электроннай пошты.\n\n Паўтарыце спробу праз <xliff:g id="NUMBER_2">%3$d</xliff:g> с."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Тэлефон выключыўся з-за перагрэву"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Прылада выключылася з-за перагрэву"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Планшэт выключыўся з-за перагрэву"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Ваш тэлефон працуе ў звычайным рэжыме.\nНацісніце, каб даведацца больш"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Ваша прылада працуе ў звычайным рэжыме.\nНацісніце, каб даведацца больш"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Ваш планшэт працуе ў звычайным рэжыме.\nНацісніце, каб даведацца больш"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Ваш тэлефон пераграваўся, таму ён выключыўся, каб астыць. Зараз тэлефон працуе ў звычайным рэжыме.\n\nТэлефон можа перагравацца пры:\n	• выкарыстанні рэсурсаёмістых праграм (напрыклад, гульняў або праграм, звязаных з відэа або навігацыяй);\n	• спампоўванні або запампоўванні вялікіх файлаў;\n	• выкарыстанні тэлефона пры высокіх тэмпературах."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Ваша прылада перагравалася, таму яна выключылася, каб астыць. Зараз прылада працуе ў звычайным рэжыме.\n\nПрылада можа перагравацца пры:\n	• выкарыстанні рэсурсаёмістых праграм (напрыклад, гульняў або праграм, звязаных з відэа або навігацыяй);\n	• спампоўванні або запампоўванні вялікіх файлаў;\n	• выкарыстанні прылады пры высокіх тэмпературах."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Ваш планшэт пераграваўся, таму ён выключыўся, каб астыць. Зараз планшэт працуе ў звычайным рэжыме.\n\nПланшэт можа перагравацца пры:\n	• выкарыстанні рэсурсаёмістых праграм (напрыклад, гульняў або праграм, звязаных з відэа або навігацыяй);\n	• спампоўванні або запампоўванні вялікіх файлаў;\n	• выкарыстанні планшэта пры высокіх тэмпературах."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Тэлефон награваецца"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Прылада награваецца"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Планшэт награваецца"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Некаторыя функцыі абмежаваны, пакуль тэлефон не астыне.\nНацісніце, каб даведацца больш"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Некаторыя функцыі абмежаваны, пакуль прылада не астыне.\nНацісніце, каб даведацца больш"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Некаторыя функцыі абмежаваны, пакуль планшэт не астыне.\nНацісніце, каб даведацца больш"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Ваш тэлефон будзе астываць аўтаматычна. Вы можаце і далей ім карыстацца, але ён можа працаваць больш павольна.\n\nПасля таго як тэлефон астыне, ён будзе працаваць у звычайным рэжыме."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Ваша прылада будзе астываць аўтаматычна. Вы можаце і далей ёй карыстацца, але яна можа працаваць больш павольна.\n\nПасля таго як прылада астыне, яна будзе працаваць у звычайным рэжыме."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Ваш планшэт будзе астываць аўтаматычна. Вы можаце і далей ім карыстацца, але ён можа працаваць больш павольна.\n\nПасля таго як планшэт астыне, ён будзе працаваць у звычайным рэжыме."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Сканер адбіткаў пальцаў знаходзіцца на кнопцы сілкавання. Гэта плоская кнопка побач з выпуклай кнопкай гучнасці на бакавой грані планшэта."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Сканер адбіткаў пальцаў знаходзіцца на кнопцы сілкавання. Гэта плоская кнопка побач з выпуклай кнопкай гучнасці на бакавой грані прылады."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Сканер адбіткаў пальцаў знаходзіцца на кнопцы сілкавання. Гэта плоская кнопка побач з выпуклай кнопкай гучнасці на бакавой грані тэлефона."</string>
diff --git a/packages/SystemUI/res-product/values-bg/strings.xml b/packages/SystemUI/res-product/values-bg/strings.xml
index 3542558..40140c4 100644
--- a/packages/SystemUI/res-product/values-bg/strings.xml
+++ b/packages/SystemUI/res-product/values-bg/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Опитахте да отключите телефона и сбъркахте <xliff:g id="NUMBER">%d</xliff:g> пъти. Служебният потребителски профил ще бъде премахнат, при което ще се изтрият всички данни за него."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Начертахте неправилно фигурата си за отключване <xliff:g id="NUMBER_0">%1$d</xliff:g> пъти. След още <xliff:g id="NUMBER_1">%2$d</xliff:g> неуспешни опита ще бъдете помолени да отключите таблета си посредством имейл адрес.\n\n Опитайте отново след <xliff:g id="NUMBER_2">%3$d</xliff:g> секунди."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Начертахте неправилно фигурата си за отключване <xliff:g id="NUMBER_0">%1$d</xliff:g> пъти. След още <xliff:g id="NUMBER_1">%2$d</xliff:g> неуспешни опита ще бъдете помолени да отключите телефона посредством имейл адрес.\n\n Опитайте отново след <xliff:g id="NUMBER_2">%3$d</xliff:g> секунди."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Телефонът се изключи поради загряване"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Устройството се изключи поради загряване"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Таблетът се изключи поради загряване"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Телефонът ви вече работи нормално.\nДокоснете за още информация"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Устройството ви вече работи нормално.\nДокоснете за още информация"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Таблетът ви вече работи нормално.\nДокоснете за още информация"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Телефонът ви бе твърде горещ, затова се изключи с цел охлаждане. Вече работи нормално.\n\nТелефонът ви може да стане твърде горещ, ако:\n	• използвате натоварващи приложения (като например игри или приложения за видео или за навигация);\n	• изтегляте или качвате големи файлове;\n	• използвате устройството си при високи температури."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Устройството ви бе твърде горещо, затова се изключи с цел охлаждане. Вече работи нормално.\n\nУстройството ви може да стане твърде горещо, ако:\n	• използвате натоварващи приложения (като например игри или приложения за видео или за навигация);\n	• изтегляте или качвате големи файлове;\n	• използвате устройството си при високи температури."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Таблетът ви бе твърде горещ, затова се изключи с цел охлаждане. Вече работи нормално.\n\nТаблетът ви може да стане твърде горещ, ако:\n	• използвате натоварващи приложения (като например игри или приложения за видео или за навигация);\n	• изтегляте или качвате големи файлове;\n	• използвате устройството си при високи температури."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Телефонът загрява"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Устройството загрява"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Таблетът загрява"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Някои функции са ограничени, докато телефонът се охлажда.\nДокоснете за още информация"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Някои функции са ограничени, докато устройството се охлажда.\nДокоснете за още информация"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Някои функции са ограничени, докато таблетът се охлажда.\nДокоснете за още информация"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Телефонът ви автоматично ще направи опит да се охлади. Пак можете да го използвате, но той може да работи по-бавно.\n\nСлед като се охлади, ще работи нормално."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Устройството ви автоматично ще направи опит да се охлади. Пак можете да го използвате, но то може да работи по-бавно.\n\nСлед като се охлади, ще работи нормално."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Таблетът ви автоматично ще направи опит да се охлади. Пак можете да го използвате, но той може да работи по-бавно.\n\nСлед като се охлади, ще работи нормално."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Сензорът за отпечатъци се намира върху бутона за захранване. Този бутон е плосък и е разположен на ръба на таблета до повдигнатия бутон за силата на звука."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Сензорът за отпечатъци се намира върху бутона за захранване. Този бутон е плосък и е разположен на ръба на устройството до повдигнатия бутон за силата на звука."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Сензорът за отпечатъци се намира върху бутона за захранване. Този бутон е плосък и е разположен на ръба на телефона до повдигнатия бутон за силата на звука."</string>
diff --git a/packages/SystemUI/res-product/values-bn/strings.xml b/packages/SystemUI/res-product/values-bn/strings.xml
index 0984de2..19165ef 100644
--- a/packages/SystemUI/res-product/values-bn/strings.xml
+++ b/packages/SystemUI/res-product/values-bn/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"আপনি <xliff:g id="NUMBER">%d</xliff:g> বার ভুল পদ্ধতিতে ফোন আনলক করার চেষ্টা করেছেন। অফিস প্রোফাইলটি সরিয়ে দেওয়া হবে, যার ফলে প্রোফাইলের সমস্ত ডেটা মুছে যাবে।"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুল পদ্ধতিতে প্যাটার্ন আনলক করার চেষ্টা করেছেন। আরও <xliff:g id="NUMBER_1">%2$d</xliff:g> বার এটি করলে আপনাকে প্যাটার্ন আনলক করতে একটি ইমেল অ্যাকাউন্ট ব্যবহার করতে বলা হবে।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> সেকেন্ড পরে আবার চেষ্টা করুন।"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুল পদ্ধতিতে প্যাটার্ন আনলক করার চেষ্টা করেছেন। আরও <xliff:g id="NUMBER_1">%2$d</xliff:g> বার এটি করলে আপনাকে প্যাটার্ন আনলক করতে একটি ইমেল অ্যাকাউন্ট ব্যবহারের করতে বলা হবে।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> সেকেন্ড পরে আবার চেষ্টা করুন।"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"ফোন গরম হওয়ার জন্য বন্ধ হয়ে গেছে"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"ডিভাইস গরম হওয়ার জন্য বন্ধ হয়ে গেছে"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"ট্যাবলেট গরম হওয়ার জন্য বন্ধ হয়ে গেছে"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"আপনার ফোন এখন ভালভাবে কাজ করছে।\nআরও তথ্যের জন্য ট্যাপ করুন"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"আপনার ডিভাইস এখন ভালভাবে কাজ করছে।\nআরও তথ্যের জন্য ট্যাপ করুন"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"আপনার ট্যাবলেট এখন ভালভাবে কাজ করছে।\nআরও তথ্যের জন্য ট্যাপ করুন"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"আপনার ফোন খুব বেশি গরম হয়ে যায়, তাই ঠাণ্ডা হওয়ার জন্য বন্ধ হয়ে গেছে। আপনার ফোন এখন ভালভাবে কাজ করছে।\n\nআপনার ফোন খুব বেশি গরম হয়ে যেতে পারে যদি আপনি:\n	•এমন অ্যাপ ব্যবহার করেন যেটি আপনার ফোনের রিসোর্স বেশি ব্যবহার করে (যেমন গেমিং, ভিডিও বা নেভিগেশন অ্যাপ)\n	• বড় ফাইল ডাউনলোড বা আপলোড করেন\n	• অনেক বেশি তাপমাত্রায় ফোন ব্যবহার করেন"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"আপনার ডিভাইস খুব বেশি গরম হয়ে যায়, তাই ঠাণ্ডা হওয়ার জন্য বন্ধ হয়ে গেছে। আপনার ডিভাইস এখন ভালভাবে কাজ করছে।\n\nআপনার ডিভাইস খুব বেশি গরম হয়ে যেতে পারে যদি আপনি:\n	•এমন অ্যাপ ব্যবহার করেন যেটি আপনার ডিভাইসের রিসোর্স বেশি ব্যবহার করে (যেমন গেমিং, ভিডিও বা নেভিগেশন অ্যাপ)\n	• বড় ফাইল ডাউনলোড বা আপলোড করেন\n	• অনেক বেশি তাপমাত্রায় ডিভাইস ব্যবহার করেন"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"আপনার ট্যাবলেট খুব বেশি গরম হয়ে যায়, তাই ঠাণ্ডা হওয়ার জন্য বন্ধ হয়ে গেছে। আপনার ট্যাবলেট এখন ভালভাবে কাজ করছে।\n\nআপনার ট্যাবলেট খুব বেশি গরম হয়ে যেতে পারে যদি আপনি:\n	•এমন অ্যাপ ব্যবহার করেন যেটি আপনার ট্যাবলেটের রিসোর্স বেশি ব্যবহার করে (যেমন গেমিং, ভিডিও বা নেভিগেশন অ্যাপ)\n	• বড় ফাইল ডাউনলোড বা আপলোড করেন\n	• অনেক বেশি তাপমাত্রায় ট্যাবলেট ব্যবহার করেন"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"ফোন গরম হয়ে গেছে"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"ডিভাইস গরম হয়ে গেছে"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"ট্যাবলেট গরম হয়ে গেছে"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"ফোন ঠাণ্ডা না হওয়া পর্যন্ত কিছু ফিচার কাজ করতে পারে না।\nআরও তথ্যের জন্য ট্যাপ করুন"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"ডিভাইস ঠাণ্ডা না হওয়া পর্যন্ত কিছু ফিচার কাজ করতে পারে না।\nআরও তথ্যের জন্য ট্যাপ করুন"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"ট্যাবলেট ঠাণ্ডা না হওয়া পর্যন্ত কিছু ফিচার কাজ করতে পারে না।\nআরও তথ্যের জন্য ট্যাপ করুন"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"আপনার ফোনটি অটোমেটিক ঠাণ্ডা হওয়ার চেষ্টা করবে। আপনি তবুও ফোন ব্যবহার করতে পারেন, কিন্তু এটি একটু ধীরে চলতে পারে।\n\nফোন পুরোপুরি ঠাণ্ডা হয়ে গেলে, এটি ভালভাবে চলবে।"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"আপনার ডিভাইস অটোমেটিক ঠাণ্ডা হওয়ার চেষ্টা করবে। আপনি তবুও ডিভাইস ব্যবহার করতে পারবেন, কিন্তু এটি একটু ধীরে চলতে পারে।\n\nডিভাইস পুরোপুরি ঠাণ্ডা হয়ে গেলে, এটি ভালভাবে চলবে।"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"আপনার ট্যাবলেট অটোমেটিক ঠাণ্ডা হওয়ার চেষ্টা করবে। আপনি তবুও ট্যাবলেট ব্যবহার করতে পারবেন, কিন্তু এটি একটু ধীরে চলতে পারে।\n\nট্যাবলেট পুরোপুরি ঠাণ্ডা হয়ে গেলে, এটি ভালভাবে চলবে।"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"\'পাওয়ার\' বোতামের উপরে ফিঙ্গারপ্রিন্ট সেন্সর দেওয়া হয়েছে। ট্যাবলেটের প্রান্তে একটু বাইরে বেরিয়ে থাকা ভলিউমের বোতামের ঠিক পাশে এই ফ্ল্যাট বোতামটি আপনি খুঁজে পাবেন।"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"\'পাওয়ার\' বোতামের উপরে ফিঙ্গারপ্রিন্ট সেন্সর দেওয়া হয়েছে। ডিভাইসের সাইডে একটু বাইরে বেরিয়ে থাকা ভলিউমের বোতামের ঠিক পাশে এই ফ্ল্যাট বোতামটি আপনি খুঁজে পাবেন।"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"\'পাওয়ার\' বোতামের উপরে ফিঙ্গারপ্রিন্ট সেন্সর দেওয়া হয়েছে। ফোনের প্রান্তে একটু বাইরে বেরিয়ে থাকা ভলিউমের বোতামের ঠিক পাশে এই ফ্ল্যাট বোতামটি আপনি খুঁজে পাবেন।"</string>
diff --git a/packages/SystemUI/res-product/values-bs/strings.xml b/packages/SystemUI/res-product/values-bs/strings.xml
index 576fac4..1c1316f 100644
--- a/packages/SystemUI/res-product/values-bs/strings.xml
+++ b/packages/SystemUI/res-product/values-bs/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Pokušali ste neispravno otključati telefon <xliff:g id="NUMBER">%d</xliff:g> puta. Radni profil će se ukloniti i svi podaci s profila će se izbrisati."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Pogrešno ste nacrtali uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. U slučaju još <xliff:g id="NUMBER_1">%2$d</xliff:g> pokušaja bez uspjeha, od vas će se tražiti da otključate tablet pomoću računa e-pošte. \n\n Pokušajte ponovo za <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Pogrešno ste nacrtali uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. U slučaju još <xliff:g id="NUMBER_1">%2$d</xliff:g> pokušaja bez uspjeha, od vas će se tražiti da otključate telefon pomoću računa e-pošte. \n\n Pokušajte ponovo za <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefon se isključio zbog pregrijavanja"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Uređaj se isključio zbog pregrijavanja"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet se isključio zbog pregrijavanja"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Vaš telefon sada radi normalno.\nDodirnite za više informacija"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Vaš uređaj sada radi normalno.\nDodirnite za više informacija"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Vaš tablet sada radi normalno.\nDodirnite za više informacija"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Vaš telefon se pregrijao, pa se isključio da se ohladi. Telefon sada radi normalno.\n\nTelefon se može pregrijati ako:\n	• koristite aplikacije koje troše puno resursa (kao što su aplikacije za igranje, videozapise ili navigaciju)\n	• preuzimate ili otpremate velike fajlove\n	• koristite telefon na visokim temperaturama"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Vaš uređaj se pregrijao, pa se isključio da se ohladi. Uređaj sada radi normalno.\n\nUređaj se može pregrijati ako:\n	• koristite aplikacije koje troše puno resursa (kao što su aplikacije za igranje, videozapise ili navigaciju)\n	• preuzimate ili otpremate velike fajlove\n	• koristite uređaj na visokim temperaturama"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Vaš tablet se pregrijao, pa se isključio da se ohladi. Tablet sada radi normalno.\n\nTablet se može pregrijati ako:\n	• koristite aplikacije koje troše puno resursa (kao što su aplikacije za igranje, videozapise ili navigaciju)\n	• preuzimate ili otpremate velike fajlove\n	• koristite tablet na visokim temperaturama"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefon se zagrijava"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Uređaj se zagrijava"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet se zagrijava"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Neke funkcije su ograničene dok se telefon hladi.\nDodirnite za više informacija"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Neke funkcije su ograničene dok se uređaj hladi.\nDodirnite za više informacija"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Neke funkcije su ograničene dok se tablet hladi.\nDodirnite za više informacija"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Vaš telefon će se automatski pokušati ohladiti. I dalje možete koristiti telefon, ali će možda sporije raditi.\n\nNakon što se ohladi, telefon će raditi normalno."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Uređaj će se automatski pokušati ohladiti. I dalje možete koristiti uređaj, ali će možda sporije raditi.\n\nNakon što se ohladi, uređaj će raditi normalno."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Tablet će se automatski pokušati ohladiti. I dalje možete koristiti tablet, ali će možda sporije raditi.\n\nNakon što se ohladi, tablet će raditi normalno."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Senzor za otisak prsta je na dugmetu za uključivanje. To je ravno dugme pored izdignutog dugmeta za jačinu zvuka na rubu tableta."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Senzor za otisak prsta je na dugmetu za uključivanje. To je ravno dugme pored izdignutog dugmeta za jačinu zvuka na rubu uređaja."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Senzor za otisak prsta je na dugmetu za uključivanje. To je ravno dugme pored izdignutog dugmeta za jačinu zvuka na rubu telefona."</string>
diff --git a/packages/SystemUI/res-product/values-ca/strings.xml b/packages/SystemUI/res-product/values-ca/strings.xml
index d8d4a47..4b84a6b 100644
--- a/packages/SystemUI/res-product/values-ca/strings.xml
+++ b/packages/SystemUI/res-product/values-ca/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Has provat de desbloquejar el telèfon <xliff:g id="NUMBER">%d</xliff:g> vegades de manera incorrecta. El perfil de treball se suprimirà, juntament amb totes les dades que contingui."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Has dibuixat el patró de desbloqueig <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades de manera incorrecta. Si falles <xliff:g id="NUMBER_1">%2$d</xliff:g> vegades més, se\'t demanarà que desbloquegis la tauleta amb un compte de correu electrònic.\n\n Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_2">%3$d</xliff:g> segons."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Has dibuixat el patró de desbloqueig <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades de manera incorrecta. Si falles <xliff:g id="NUMBER_1">%2$d</xliff:g> vegades més, se\'t demanarà que desbloquegis el telèfon amb un compte de correu electrònic.\n\n Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_2">%3$d</xliff:g> segons."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"El telèfon s\'ha apagat per la calor"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"El dispositiu s\'ha apagat per la calor"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"La tauleta s\'ha apagat per la calor"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Ara el telèfon funciona amb normalitat.\nToca per obtenir més informació."</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Ara el dispositiu funciona amb normalitat.\nToca per obtenir més informació."</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Ara la tauleta funciona amb normalitat.\nToca per obtenir més informació."</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"El telèfon s\'havia sobreescalfat i s\'ha apagat per refredar-se. Ara funciona amb normalitat.\n\nEs pot sobreescalfar si:\n	• Utilitzes aplicacions que consumeixen molts recursos (com ara, videojocs, vídeos o aplicacions de navegació).\n	• Baixes o penges fitxers grans.\n	• L\'utilitzes amb temperatures altes."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"El dispositiu s\'havia sobreescalfat i s\'ha apagat per refredar-se. Ara funciona amb normalitat.\n\nEs pot sobreescalfar si:\n	• Utilitzes aplicacions que consumeixen molts recursos (com ara videojocs, vídeos o aplicacions de navegació).\n	• Baixes o penges fitxers grans.\n	• L\'utilitzes amb temperatures altes."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"La tauleta s\'havia sobreescalfat i s\'ha apagat per refredar-se. Ara funciona amb normalitat.\n\nEs pot sobreescalfar si:\n	• Utilitzes aplicacions que consumeixen molts recursos (com ara videojocs, vídeos o aplicacions de navegació).\n	• Baixes o penges fitxers grans.\n	• L\'utilitzes amb temperatures altes."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"El telèfon s\'està escalfant"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"El dispositiu s\'està escalfant"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"La tauleta s\'està escalfant"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Algunes funcions estan limitades mentre el telèfon es refreda.\nToca per obtenir més informació."</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Algunes funcions estan limitades mentre el dispositiu es refreda.\nToca per obtenir més informació."</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Algunes funcions estan limitades mentre la tauleta es refreda.\nToca per obtenir més informació."</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"El telèfon provarà de refredar-se automàticament. Podràs continuar utilitzant-lo, però és possible que funcioni més lentament.\n\nUn cop s\'hagi refredat, funcionarà amb normalitat."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"El dispositiu provarà de refredar-se automàticament. Pots continuar utilitzant-lo, però és possible que funcioni més lentament.\n\nUn cop s\'hagi refredat, funcionarà amb normalitat."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"La tauleta provarà de refredar-se automàticament. Pots continuar utilitzant-la, però és possible que funcioni més lentament.\n\nUn cop s\'hagi refredat, funcionarà amb normalitat."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"El sensor d\'empremtes digitals es troba al botó d\'engegada. És el botó pla situat al costat del botó de volum amb relleu al lateral de la tauleta."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"El sensor d\'empremtes digitals es troba al botó d\'engegada. És el botó pla situat al costat del botó de volum amb relleu al lateral del dispositiu."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"El sensor d\'empremtes digitals es troba al botó d\'engegada. És el botó pla situat al costat del botó de volum amb relleu al lateral del telèfon."</string>
diff --git a/packages/SystemUI/res-product/values-cs/strings.xml b/packages/SystemUI/res-product/values-cs/strings.xml
index 47881bd..ffefb98 100644
--- a/packages/SystemUI/res-product/values-cs/strings.xml
+++ b/packages/SystemUI/res-product/values-cs/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Již <xliff:g id="NUMBER">%d</xliff:g>krát jste se pokusili odemknout telefon nesprávným způsobem. Pracovní profil bude odstraněn, čímž budou smazána všechna jeho data."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Již <xliff:g id="NUMBER_0">%1$d</xliff:g>krát jste nesprávně zadali své bezpečnostní gesto. Po <xliff:g id="NUMBER_1">%2$d</xliff:g>dalších neúspěšných pokusech budete požádáni o odemčení tabletu pomocí e-mailového účtu.\n\n Zkuste to znovu za <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Již <xliff:g id="NUMBER_0">%1$d</xliff:g>krát jste nesprávně zadali své bezpečnostní gesto. Po <xliff:g id="NUMBER_1">%2$d</xliff:g> dalších neúspěšných pokusech budete požádáni o odemčení telefonu pomocí e-mailového účtu.\n\n Zkuste to znovu za <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefon se vypnul z důvodu zahřátí"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Zařízení se vypnulo z důvodu zahřátí"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet se vypnul z důvodu zahřátí"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Nyní telefon funguje jako obvykle.\nKlepnutím zobrazíte další informace"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Nyní zařízení funguje jako obvykle.\nKlepnutím zobrazíte další informace"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Nyní tablet funguje jako obvykle.\nKlepnutím zobrazíte další informace"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefon byl příliš zahřátý, proto se vypnul, aby vychladl. Nyní telefon funguje jako obvykle.\n\nTelefon se může příliš zahřát v těchto případech:\n	• používání náročných aplikací (např. her, videí nebo navigace),\n	• stahování nebo nahrávání velkých souborů,\n	• používání telefonu při vysokých teplotách."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Zařízení bylo příliš zahřáté, proto se vypnulo, aby vychladlo. Nyní zařízení funguje jako obvykle.\n\nZařízení se může příliš zahřát v těchto případech:\n	• používání náročných aplikací (např. her, videí nebo navigace),\n	• stahování nebo nahrávání velkých souborů,\n	• používání zařízení při vysokých teplotách."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tablet byl příliš zahřátý, proto se vypnul, aby vychladl. Nyní tablet funguje jako obvykle.\n\nTablet se může příliš zahřát v těchto případech:\n	• používání náročných aplikací (např. her, videí nebo navigace),\n	• stahování nebo nahrávání velkých souborů,\n	• používání tabletu při vysokých teplotách."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefon se zahřívá"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Zařízení se zahřívá"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet se zahřívá"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Některé funkce jsou při chladnutí telefonu omezeny.\nKlepnutím zobrazíte další informace"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Některé funkce jsou při chladnutí zařízení omezeny.\nKlepnutím zobrazíte další informace"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Některé funkce jsou při chladnutí tabletu omezeny.\nKlepnutím zobrazíte další informace"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefon se automaticky pokusí vychladnout. Lze jej nadále používat, ale může být pomalejší.\n\nAž telefon vychladne, bude fungovat normálně."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Zařízení se automaticky pokusí vychladnout. Lze jej nadále používat, ale může být pomalejší.\n\nAž zařízení vychladne, bude fungovat normálně."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Tablet se automaticky pokusí vychladnout. Lze jej nadále používat, ale může být pomalejší.\n\nAž tablet vychladne, bude fungovat normálně."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Snímač otisků prstů je na vypínači. Je to ploché tlačítko vedle vystouplého tlačítka hlasitosti na hraně tabletu."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Snímač otisků prstů je na vypínači. Je to ploché tlačítko vedle vystouplého tlačítka hlasitosti na hraně zařízení."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Snímač otisků prstů je na vypínači. Je to ploché tlačítko vedle vystouplého tlačítka hlasitosti na hraně telefonu."</string>
diff --git a/packages/SystemUI/res-product/values-da/strings.xml b/packages/SystemUI/res-product/values-da/strings.xml
index 47531e7..9bed837 100644
--- a/packages/SystemUI/res-product/values-da/strings.xml
+++ b/packages/SystemUI/res-product/values-da/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Du har forsøgt at låse telefonen op med den forkerte adgangskode <xliff:g id="NUMBER">%d</xliff:g> gange. Arbejdsprofilen fjernes, hvilket sletter alle profildata."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Du har tegnet dit oplåsningsmønster forkert <xliff:g id="NUMBER_0">%1$d</xliff:g> gange. Efter endnu <xliff:g id="NUMBER_1">%2$d</xliff:g> mislykkede forsøg bliver du bedt om at låse din tablet op ved hjælp af en mailkonto.\n\n Prøv igen om <xliff:g id="NUMBER_2">%3$d</xliff:g> sekunder."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Du har tegnet dit oplåsningsmønster forkert <xliff:g id="NUMBER_0">%1$d</xliff:g> gange. Efter endnu <xliff:g id="NUMBER_1">%2$d</xliff:g> mislykkede forsøg bliver du bedt om at låse din telefon op ved hjælp af en mailkonto.\n\n Prøv igen om <xliff:g id="NUMBER_2">%3$d</xliff:g> sekunder."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefonen slukkede pga. varme"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Enheden slukkede pga. varme"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Din tablet slukkede pga. varme"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Din telefon kører nu normalt.\nTryk for at få flere oplysninger"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Din enhed kører nu normalt.\nTryk for at få flere oplysninger"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Din tablet kører nu normalt.\nTryk for at få flere oplysninger"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Din telefon var blevet for varm, så den slukkede for at køle ned. Din telefon kører nu igen normalt. \n\nDin telefon kan blive for varm, hvis du:\n	• Bruger ressourcekrævende apps (f.eks. spil, video eller navigation)\n	• Downloader eller uploader store filer\n	• Bruger din telefon i varme omgivelser"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Din enhed var blevet for varm, så den slukkede for at køle ned. Din enhed kører nu igen normalt. \n\nDin enhed kan blive for varm, hvis du:\n	• Bruger ressourcekrævende apps (f.eks. spil, video eller navigation)\n	• Downloader eller uploader store filer\n	• Bruger din enhed i varme omgivelser"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Din tablet var blevet for varm, så den slukkede for at køle ned. Din tablet kører nu igen normalt. \n\nDin tablet kan blive for varm, hvis du:\n	• Bruger ressourcekrævende apps (f.eks. spil, video eller navigation)\n	• Downloader eller uploader store filer\n	• Bruger din tablet i varme omgivelser"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefonen er ved at blive varm"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Enheden er ved at blive varm"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tabletten er ved at blive varm"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Nogle funktioner er begrænsede, mens telefonen køler ned.\nTryk for at få flere oplysninger"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Nogle funktioner er begrænsede, mens enheden køler ned.\nTryk for at få flere oplysninger"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Nogle funktioner er begrænsede, mens din tablet køler ned.\nTryk for at få flere oplysninger"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Din telefon forsøger automatisk at køle sig selv ned. Du kan stadig bruge telefonen, men den kører muligvis langsommere end normalt.\n\nNår din telefon er kølet ned, fungerer den normalt igen."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Din enhed forsøger automatisk at køle sig selv ned. Du kan stadig bruge din enhed, men den kører muligvis langsommere end normalt.\n\nNår din enhed er kølet ned, fungerer den normalt igen."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Din tablet forsøger automatisk at køle sig selv ned. Du kan stadig bruge din tablet, men den kører muligvis langsommere end normalt.\n\nNår din tablet er kølet ned, fungerer den normalt igen."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Fingeraftrykssensoren sidder på afbryderknappen. Det er den flade knap ved siden af den hævede lydstyrkeknap på siden af din tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Fingeraftrykssensoren sidder på afbryderknappen. Det er den flade knap ved siden af den hævede lydstyrkeknap på siden af enheden."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Fingeraftrykssensoren sidder på afbryderknappen. Det er den flade knap ved siden af den hævede lydstyrkeknap på siden af telefonen."</string>
diff --git a/packages/SystemUI/res-product/values-de/strings.xml b/packages/SystemUI/res-product/values-de/strings.xml
index 9c0b768..80389a4 100644
--- a/packages/SystemUI/res-product/values-de/strings.xml
+++ b/packages/SystemUI/res-product/values-de/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Du hast <xliff:g id="NUMBER">%d</xliff:g>-mal erfolglos versucht, das Smartphone zu entsperren. Das Arbeitsprofil wird nun entfernt und alle Profildaten werden gelöscht."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Du hast dein Entsperrungsmuster <xliff:g id="NUMBER_0">%1$d</xliff:g>-mal falsch gezeichnet. Nach <xliff:g id="NUMBER_1">%2$d</xliff:g> weiteren erfolglosen Versuchen wirst du aufgefordert, dein Tablet mithilfe eines E-Mail-Kontos zu entsperren.\n\n Versuche es in <xliff:g id="NUMBER_2">%3$d</xliff:g> Sekunden noch einmal."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Du hast dein Entsperrungsmuster <xliff:g id="NUMBER_0">%1$d</xliff:g>-mal falsch gezeichnet. Nach <xliff:g id="NUMBER_1">%2$d</xliff:g> weiteren erfolglosen Versuchen wirst du aufgefordert, dein Smartphone mithilfe eines E-Mail-Kontos zu entsperren.\n\n Versuche es in <xliff:g id="NUMBER_2">%3$d</xliff:g> Sekunden noch einmal."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Smartphone wegen Überhitzung ausgeschaltet"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Gerät wegen Überhitzung ausgeschaltet"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet wegen Überhitzung ausgeschaltet"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Dein Smartphone funktioniert jetzt wieder normal.\nFür mehr Informationen tippen."</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Dein Gerät funktioniert jetzt wieder normal.\nFür mehr Informationen tippen."</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Dein Tablet funktioniert jetzt wieder normal.\nFür mehr Informationen tippen."</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Dein Smartphone war zu heiß und wurde zum Abkühlen ausgeschaltet. Nun funktioniert es wieder normal.\n\nMögliche Ursachen:\n	• Verwendung ressourcenintensiver Apps, z. B. Spiele-, Video- oder Navigations-Apps\n	• Download oder Upload großer Dateien\n	• Verwendung des Smartphones bei hohen Temperaturen"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Dein Gerät war zu heiß und wurde zum Abkühlen ausgeschaltet. Nun funktioniert es wieder normal.\n\nMögliche Ursachen:\n	• Verwendung ressourcenintensiver Apps, z. B. Spiele-, Video- oder Navigations-Apps\n	• Download oder Upload großer Dateien\n	• Verwendung des Geräts bei hohen Temperaturen"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Dein Tablet war zu heiß und wurde zum Abkühlen ausgeschaltet. Nun funktioniert es wieder normal.\n\nMögliche Ursachen:\n	• Verwendung ressourcenintensiver Apps, z. B. Spiele-, Video- oder Navigations-Apps\n	• Download oder Upload großer Dateien\n	• Verwendung des Tablets bei hohen Temperaturen"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Smartphone wird warm"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Gerät wird warm"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet wird warm"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Einige Funktionen sind während der Abkühlphase des Smartphones eingeschränkt.\nFür mehr Informationen tippen."</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Einige Funktionen sind während der Abkühlphase des Geräts eingeschränkt.\nFür mehr Informationen tippen."</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Einige Funktionen sind während der Abkühlphase des Tablets eingeschränkt.\nFür mehr Informationen tippen."</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Dein Smartphone kühlt sich automatisch ab. Du kannst es weiterhin nutzen, aber es reagiert möglicherweise langsamer.\n\nSobald dein Smartphone abgekühlt ist, funktioniert es wieder normal."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Dein Gerät kühlt sich automatisch ab. Du kannst es weiterhin nutzen, aber es reagiert möglicherweise langsamer.\n\nSobald dein Gerät abgekühlt ist, funktioniert es wieder normal."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Dein Tablet kühlt sich automatisch ab. Du kannst es weiterhin nutzen, aber es reagiert möglicherweise langsamer.\n\nSobald dein Tablet abgekühlt ist, funktioniert es wieder normal."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Der Fingerabdrucksensor befindet sich auf der Ein-/Aus-Taste. Das ist die flache Taste neben der erhöhten Lautstärketaste am Rand des Tablets."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Der Fingerabdrucksensor befindet sich auf der Ein-/Aus-Taste. Das ist die flache Taste neben der erhöhten Lautstärketaste am Rand des Geräts."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Der Fingerabdrucksensor befindet sich auf der Ein-/Aus-Taste. Das ist die flache Taste neben der erhöhten Lautstärketaste am Rand des Smartphones."</string>
diff --git a/packages/SystemUI/res-product/values-el/strings.xml b/packages/SystemUI/res-product/values-el/strings.xml
index 139fa04..67bdbcf 100644
--- a/packages/SystemUI/res-product/values-el/strings.xml
+++ b/packages/SystemUI/res-product/values-el/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Δοκιμάσατε να ξεκλειδώσετε το τηλέφωνο <xliff:g id="NUMBER">%d</xliff:g> φορές χωρίς επιτυχία. Το προφίλ εργασίας θα καταργηθεί και θα διαγραφούν όλα τα δεδομένα προφίλ."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Σχεδιάσατε το μοτίβο ξεκλειδώματος εσφαλμένα <xliff:g id="NUMBER_0">%1$d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%2$d</xliff:g> ακόμα ανεπιτυχείς προσπάθειες, θα σας ζητηθεί να ξεκλειδώσετε το tablet με τη χρήση ενός λογαριασμού ηλεκτρονικού ταχυδρομείου.\n\n Δοκιμάστε να συνδεθείτε ξανά σε <xliff:g id="NUMBER_2">%3$d</xliff:g> δευτερόλεπτα."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Σχεδιάσατε το μοτίβο ξεκλειδώματος εσφαλμένα <xliff:g id="NUMBER_0">%1$d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%2$d</xliff:g> ακόμα ανεπιτυχείς προσπάθειες, θα σας ζητηθεί να ξεκλειδώσετε το τηλέφωνό σας με τη χρήση ενός λογαριασμού ηλεκτρονικού ταχυδρομείου.\n\n Δοκιμάστε ξανά σε <xliff:g id="NUMBER_2">%3$d</xliff:g> δευτερόλεπτα."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Το τηλέφωνο απενεργοποιήθηκε λόγω ζέστης"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Η συσκευή απενεργοποιήθηκε λόγω ζέστης"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Το tablet απενεργοποιήθηκε λόγω ζέστης"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Το τηλέφωνο λειτουργεί πλέον κανονικά.\nΠατήστε για περισσότερες πληροφορίες"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Η συσκευή λειτουργεί πλέον κανονικά.\nΠατήστε για περισσότερες πληροφορίες"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Το tablet λειτουργεί πλέον κανονικά.\nΠατήστε για περισσότερες πληροφορίες"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Η θερμοκρασία του τηλεφώνου είναι πολύ υψηλή και απενεργοποιήθηκε για να κρυώσει. Πλέον, το τηλέφωνο λειτουργεί κανονικά.\n\nΗ θερμοκρασία του τηλεφώνου ενδέχεται να ανέβει κατά τη:\n	• Χρήση εφαρμογών υψηλής κατανάλωσης πόρων (όπως gaming, βίντεο ή περιήγησης)\n	• Λήψη ή μεταφόρτωση μεγάλων αρχείων\n	• Χρήση του τηλεφώνου σε υψηλές θερμοκρασίες"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Η θερμοκρασία της συσκευής είναι πολύ υψηλή και απενεργοποιήθηκε για να κρυώσει. Πλέον, η συσκευή λειτουργεί κανονικά.\n\nΗ θερμοκρασία της συσκευής ενδέχεται να ανέβει κατά τη:\n	• Χρήση εφαρμογών υψηλής κατανάλωσης πόρων (όπως gaming, βίντεο ή περιήγησης)\n	• Λήψη ή μεταφόρτωση μεγάλων αρχείων\n	• Χρήση της συσκευής σε υψηλές θερμοκρασίες"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Η θερμοκρασία του tablet είναι πολύ υψηλή και απενεργοποιήθηκε για να κρυώσει. Πλέον, το tablet λειτουργεί κανονικά.\n\nΗ θερμοκρασία του tablet ενδέχεται να ανέβει κατά τη:\n	• Χρήση εφαρμογών υψηλής κατανάλωσης πόρων (όπως gaming, βίντεο ή περιήγησης)\n	• Λήψη ή μεταφόρτωση μεγάλων αρχείων\n	• Χρήση του tablet σε υψηλές θερμοκρασίες"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Το τηλέφωνο θερμαίνεται"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Η συσκευή θερμαίνεται"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Το tablet θερμαίνεται"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Ορισμένες λειτουργίες περιορίζονται κατά τη μείωση της θερμοκρασίας του τηλεφώνου.\nΠατήστε για περισσότερες πληροφορίες"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Ορισμένες λειτουργίες περιορίζονται κατά τη μείωση της θερμοκρασίας της συσκευής.\nΠατήστε για περισσότερες πληροφορίες"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Ορισμένες λειτουργίες περιορίζονται κατά τη μείωση της θερμοκρασίας του tablet.\nΠατήστε για περισσότερες πληροφορίες"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Το τηλέφωνό σας θα προσπαθήσει αυτόματα να κρυώσει. Μπορείτε να εξακολουθήσετε να το χρησιμοποιείτε, αλλά είναι πιθανό να λειτουργεί πιο αργά.\n\nΜόλις μειωθεί η θερμοκρασία του τηλεφώνου σας, θα λειτουργεί ξανά κανονικά."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Η συσκευή σας θα προσπαθήσει αυτόματα να κρυώσει. Μπορείτε να εξακολουθήσετε να τη χρησιμοποιείτε, αλλά είναι πιθανό να λειτουργεί πιο αργά.\n\nΜόλις μειωθεί η θερμοκρασία της συσκευής σας, θα λειτουργεί ξανά κανονικά."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Το tablet σας θα προσπαθήσει αυτόματα να κρυώσει. Μπορείτε να εξακολουθήσετε να το χρησιμοποιείτε, αλλά είναι πιθανό να λειτουργεί πιο αργά.\n\nΜόλις μειωθεί η θερμοκρασία του tablet σας, θα λειτουργεί ξανά κανονικά."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Ο αισθητήρας δακτυλικών αποτυπωμάτων βρίσκεται στο κουμπί λειτουργίας. Είναι το επίπεδο κουμπί δίπλα στο ανυψωμένο κουμπί έντασης ήχου στο άκρο του tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Ο αισθητήρας δακτυλικών αποτυπωμάτων βρίσκεται στο κουμπί λειτουργίας. Είναι το επίπεδο κουμπί δίπλα στο ανυψωμένο κουμπί έντασης ήχου στο άκρο της συσκευής."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Ο αισθητήρας δακτυλικών αποτυπωμάτων βρίσκεται στο κουμπί λειτουργίας. Είναι το επίπεδο κουμπί δίπλα στο ανυψωμένο κουμπί έντασης ήχου στο άκρο του τηλεφώνου."</string>
diff --git a/packages/SystemUI/res-product/values-en-rAU/strings.xml b/packages/SystemUI/res-product/values-en-rAU/strings.xml
index 6356fc2..1373251 100644
--- a/packages/SystemUI/res-product/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res-product/values-en-rAU/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. The work profile will be removed, which will delete all profile data."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your tablet using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Phone turned off due to heat"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Device turned off due to heat"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet turned off due to heat"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Your phone is now running normally.\nTap for more info"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Your device is now running normally.\nTap for more info"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Your tablet is now running normally.\nTap for more info"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Your phone was too hot, so it turned off to cool down. Your phone is now running normally.\n\nYour phone may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video or navigation apps)\n	• Download or upload large files\n	• Use your phone in high temperatures"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Your device was too hot, so it turned off to cool down. Your device is now running normally.\n\nYour device may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video or navigation apps)\n	• Download or upload large files\n	• Use your device in high temperatures"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Your tablet was too hot, so it turned off to cool down. Your tablet is now running normally.\n\nYour tablet may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video or navigation apps)\n	• Download or upload large files\n	• Use your tablet in high temperatures"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Phone is getting warm"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Device is getting warm"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet is getting warm"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Some features limited while phone cools down.\nTap for more info"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Some features limited while device cools down.\nTap for more info"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Some features limited while tablet cools down.\nTap for more info"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Your phone will automatically try to cool down. You can still use your phone, but it may run more slowly.\n\nOnce your phone has cooled down, it will run normally."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Your device will automatically try to cool down. You can still use your device, but it may run slower.\n\nOnce your device has cooled down, it will run normally."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Your tablet will automatically try to cool down. You can still use your tablet, but it may run slower.\n\nOnce your tablet has cooled down, it will run normally."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"The fingerprint sensor is on the power button. It’s the flat button next to the raised volume button on the edge of the tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"The fingerprint sensor is on the power button. It’s the flat button next to the raised volume button on the edge of the device."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"The fingerprint sensor is on the power button. It’s the flat button next to the raised volume button on the edge of the phone."</string>
diff --git a/packages/SystemUI/res-product/values-en-rCA/strings.xml b/packages/SystemUI/res-product/values-en-rCA/strings.xml
index fb7aa72..eaa5de0 100644
--- a/packages/SystemUI/res-product/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res-product/values-en-rCA/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. The work profile will be removed, which will delete all profile data."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your tablet using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Phone turned off due to heat"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Device turned off due to heat"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet turned off due to heat"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Your phone is now running normally.\nTap for more info"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Your device is now running normally.\nTap for more info"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Your tablet is now running normally.\nTap for more info"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Your phone was too hot, so it turned off to cool down. Your phone is now running normally.\n\nYour phone may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video, or navigation apps)\n	• Download or upload large files\n	• Use your phone in high temperatures"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Your device was too hot, so it turned off to cool down. Your device is now running normally.\n\nYour device may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video, or navigation apps)\n	• Download or upload large files\n	• Use your device in high temperatures"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Your tablet was too hot, so it turned off to cool down. Your tablet is now running normally.\n\nYour tablet may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video, or navigation apps)\n	• Download or upload large files\n	• Use your tablet in high temperatures"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Phone is getting warm"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Device is getting warm"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet is getting warm"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Some features limited while phone cools down.\nTap for more info"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Some features limited while device cools down.\nTap for more info"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Some features limited while tablet cools down.\nTap for more info"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Your phone will automatically try to cool down. You can still use your phone, but it may run slower.\n\nOnce your phone has cooled down, it will run normally."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Your device will automatically try to cool down. You can still use your device, but it may run slower.\n\nOnce your device has cooled down, it will run normally."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Your tablet will automatically try to cool down. You can still use your tablet, but it may run slower.\n\nOnce your tablet has cooled down, it will run normally."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"The fingerprint sensor is on the power button. It\'s the flat button next to the raised volume button on the edge of the tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"The fingerprint sensor is on the power button. It\'s the flat button next to the raised volume button on the edge of the device."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"The fingerprint sensor is on the power button. It\'s the flat button next to the raised volume button on the edge of the phone."</string>
diff --git a/packages/SystemUI/res-product/values-en-rGB/strings.xml b/packages/SystemUI/res-product/values-en-rGB/strings.xml
index 6356fc2..1373251 100644
--- a/packages/SystemUI/res-product/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res-product/values-en-rGB/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. The work profile will be removed, which will delete all profile data."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your tablet using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Phone turned off due to heat"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Device turned off due to heat"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet turned off due to heat"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Your phone is now running normally.\nTap for more info"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Your device is now running normally.\nTap for more info"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Your tablet is now running normally.\nTap for more info"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Your phone was too hot, so it turned off to cool down. Your phone is now running normally.\n\nYour phone may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video or navigation apps)\n	• Download or upload large files\n	• Use your phone in high temperatures"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Your device was too hot, so it turned off to cool down. Your device is now running normally.\n\nYour device may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video or navigation apps)\n	• Download or upload large files\n	• Use your device in high temperatures"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Your tablet was too hot, so it turned off to cool down. Your tablet is now running normally.\n\nYour tablet may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video or navigation apps)\n	• Download or upload large files\n	• Use your tablet in high temperatures"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Phone is getting warm"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Device is getting warm"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet is getting warm"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Some features limited while phone cools down.\nTap for more info"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Some features limited while device cools down.\nTap for more info"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Some features limited while tablet cools down.\nTap for more info"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Your phone will automatically try to cool down. You can still use your phone, but it may run more slowly.\n\nOnce your phone has cooled down, it will run normally."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Your device will automatically try to cool down. You can still use your device, but it may run slower.\n\nOnce your device has cooled down, it will run normally."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Your tablet will automatically try to cool down. You can still use your tablet, but it may run slower.\n\nOnce your tablet has cooled down, it will run normally."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"The fingerprint sensor is on the power button. It’s the flat button next to the raised volume button on the edge of the tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"The fingerprint sensor is on the power button. It’s the flat button next to the raised volume button on the edge of the device."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"The fingerprint sensor is on the power button. It’s the flat button next to the raised volume button on the edge of the phone."</string>
diff --git a/packages/SystemUI/res-product/values-en-rIN/strings.xml b/packages/SystemUI/res-product/values-en-rIN/strings.xml
index 6356fc2..1373251 100644
--- a/packages/SystemUI/res-product/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res-product/values-en-rIN/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. The work profile will be removed, which will delete all profile data."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your tablet using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. After <xliff:g id="NUMBER_1">%2$d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%3$d</xliff:g> seconds."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Phone turned off due to heat"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Device turned off due to heat"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet turned off due to heat"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Your phone is now running normally.\nTap for more info"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Your device is now running normally.\nTap for more info"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Your tablet is now running normally.\nTap for more info"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Your phone was too hot, so it turned off to cool down. Your phone is now running normally.\n\nYour phone may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video or navigation apps)\n	• Download or upload large files\n	• Use your phone in high temperatures"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Your device was too hot, so it turned off to cool down. Your device is now running normally.\n\nYour device may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video or navigation apps)\n	• Download or upload large files\n	• Use your device in high temperatures"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Your tablet was too hot, so it turned off to cool down. Your tablet is now running normally.\n\nYour tablet may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video or navigation apps)\n	• Download or upload large files\n	• Use your tablet in high temperatures"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Phone is getting warm"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Device is getting warm"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet is getting warm"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Some features limited while phone cools down.\nTap for more info"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Some features limited while device cools down.\nTap for more info"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Some features limited while tablet cools down.\nTap for more info"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Your phone will automatically try to cool down. You can still use your phone, but it may run more slowly.\n\nOnce your phone has cooled down, it will run normally."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Your device will automatically try to cool down. You can still use your device, but it may run slower.\n\nOnce your device has cooled down, it will run normally."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Your tablet will automatically try to cool down. You can still use your tablet, but it may run slower.\n\nOnce your tablet has cooled down, it will run normally."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"The fingerprint sensor is on the power button. It’s the flat button next to the raised volume button on the edge of the tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"The fingerprint sensor is on the power button. It’s the flat button next to the raised volume button on the edge of the device."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"The fingerprint sensor is on the power button. It’s the flat button next to the raised volume button on the edge of the phone."</string>
diff --git a/packages/SystemUI/res-product/values-en-rXC/strings.xml b/packages/SystemUI/res-product/values-en-rXC/strings.xml
index 4a7d0ad..b1a5613 100644
--- a/packages/SystemUI/res-product/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res-product/values-en-rXC/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‎‏‎‎‏‎‏‏‏‏‎‎‎‎‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎You have incorrectly attempted to unlock the phone ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎ times. The work profile will be removed, which will delete all profile data.‎‏‎‎‏‎"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‏‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‏‏‏‏‎‎‎‎You have incorrectly drawn your unlock pattern ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, you will be asked to unlock your tablet using an email account.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_2">%3$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎You have incorrectly drawn your unlock pattern ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. After ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ more unsuccessful attempts, you will be asked to unlock your phone using an email account.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_2">%3$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎Phone turned off due to heat‎‏‎‎‏‎"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‏‎Device turned off due to heat‎‏‎‎‏‎"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‏‎‏‎Tablet turned off due to heat‎‏‎‎‏‎"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‏‎‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‎‎Your phone is now running normally.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Tap for more info‎‏‎‎‏‎"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎Your device is now running normally.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Tap for more info‎‏‎‎‏‎"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‎‎‏‏‎‎‏‏‏‏‎‏‎‎Your tablet is now running normally.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Tap for more info‎‏‎‎‏‎"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎Your phone was too hot, so it turned off to cool down. Your phone is now running normally.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Your phone may get too hot if you:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Use resource-intensive apps (such as gaming, video, or navigation apps)‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Download or upload large files‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Use your phone in high temperatures‎‏‎‎‏‎"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎Your device was too hot, so it turned off to cool down. Your device is now running normally.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Your device may get too hot if you:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Use resource-intensive apps (such as gaming, video, or navigation apps)‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Download or upload large files‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Use your device in high temperatures‎‏‎‎‏‎"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‎Your tablet was too hot, so it turned off to cool down. Your tablet is now running normally.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Your tablet may get too hot if you:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Use resource-intensive apps (such as gaming, video, or navigation apps)‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Download or upload large files‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Use your tablet in high temperatures‎‏‎‎‏‎"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‎‏‏‎Phone is getting warm‎‏‎‎‏‎"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎Device is getting warm‎‏‎‎‏‎"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎Tablet is getting warm‎‏‎‎‏‎"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‏‏‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎Some features limited while phone cools down.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Tap for more info‎‏‎‎‏‎"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‎‎Some features limited while device cools down.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Tap for more info‎‏‎‎‏‎"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‎‎Some features limited while tablet cools down.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Tap for more info‎‏‎‎‏‎"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‎‏‎Your phone will automatically try to cool down. You can still use your phone, but it may run slower.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Once your phone has cooled down, it will run normally.‎‏‎‎‏‎"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎‏‎‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎Your device will automatically try to cool down. You can still use your device, but it may run slower.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Once your device has cooled down, it will run normally.‎‏‎‎‏‎"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎Your tablet will automatically try to cool down. You can still use your tablet, but it may run slower.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Once your tablet has cooled down, it will run normally.‎‏‎‎‏‎"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎The fingerprint sensor is on the power button. It’s the flat button next to the raised volume button on the edge of the tablet.‎‏‎‎‏‎"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‎The fingerprint sensor is on the power button. It’s the flat button next to the raised volume button on the edge of the device.‎‏‎‎‏‎"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎The fingerprint sensor is on the power button. It’s the flat button next to the raised volume button on the edge of the phone.‎‏‎‎‏‎"</string>
diff --git a/packages/SystemUI/res-product/values-es-rUS/strings.xml b/packages/SystemUI/res-product/values-es-rUS/strings.xml
index 3a22304..7ee96b2 100644
--- a/packages/SystemUI/res-product/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res-product/values-es-rUS/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Intentaste desbloquear el teléfono <xliff:g id="NUMBER">%d</xliff:g> veces de manera incorrecta. Se quitará el perfil de trabajo, lo que borrará todos los datos asociados."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Dibujaste el patrón de desbloqueo <xliff:g id="NUMBER_0">%1$d</xliff:g> veces de manera incorrecta. Después de <xliff:g id="NUMBER_1">%2$d</xliff:g> intentos incorrectos más, se te solicitará que desbloquees la tablet mediante una cuenta de correo electrónico.\n\n Vuelve a intentarlo en <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Dibujaste el patrón de desbloqueo <xliff:g id="NUMBER_0">%1$d</xliff:g> veces de manera incorrecta. Después de <xliff:g id="NUMBER_1">%2$d</xliff:g> intentos incorrectos más, se te solicitará que desbloquees el dispositivo mediante una cuenta de correo electrónico.\n\n Vuelve a intentarlo en <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Se apagó el tel. debido a alta temp."</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Se apagó el disp. debido a alta temp."</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Se apagó la tablet debido a alta temp."</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Tu teléfono ahora se ejecuta con normalidad.\nPresiona para obtener más información"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Tu dispositivo ahora se ejecuta con normalidad.\nPresiona para obtener más información"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Tu tablet ahora se ejecuta con normalidad.\nPresiona para obtener más información"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Tu teléfono estaba muy caliente y se apagó para enfriarse. Ya funciona correctamente.\n\nTu teléfono puede calentarse en los siguientes casos:\n	• Si usas apps que consumen muchos recursos (como juegos, videos o navegación).\n	• Si subes o descargas archivos grandes.\n	• Si usas el teléfono en condiciones de temperatura alta."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Tu dispositivo estaba muy caliente y se apagó para enfriarse. Ya funciona correctamente.\n\nTu dispositivo puede calentarse en los siguientes casos:\n	• Si usas apps que consumen muchos recursos (como juegos, videos o navegación).\n	• Si subes o descargas archivos grandes.\n	• Si usas el dispositivo en condiciones de temperatura alta."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tu tablet estaba muy caliente y se apagó para enfriarse. Ya funciona correctamente.\n\nTu tablet puede calentarse en los siguientes casos:\n	• Si usas apps que consumen muchos recursos (como juegos, videos o navegación).\n	• Si subes o descargas archivos grandes.\n	• Si usas la tablet en condiciones de temperatura alta."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"El teléfono se está calentando"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"El disp. se está calentando"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"La tablet se está calentando"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Algunas funciones se limitan durante el enfriamiento del teléfono.\nPresiona para obtener más información"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Algunas funciones se limitan durante el enfriamiento del dispositivo.\nPresiona para obtener más información"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Algunas funciones se limitan durante el enfriamiento de la tablet.\nPresiona para obtener más información"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Tu teléfono intentará enfriarse automáticamente. Podrás usarlo, pero es posible que funcione más lento.\n\nUna vez que se haya enfriado, volverá a funcionar con normalidad."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Tu dispositivo intentará enfriarse automáticamente. Podrás usarlo, pero es posible que funcione más lento.\n\nUna vez que se haya enfriado, volverá a funcionar con normalidad."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Tu tablet intentará enfriarse automáticamente. Podrás usarla, pero es posible que funcione más lenta.\n\nUna vez que se haya enfriado, volverá a funcionar con normalidad."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"El sensor de huellas dactilares está en el botón de encendido. Es el botón plano que está junto al botón de volumen en relieve, en el borde de la tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"El sensor de huellas dactilares está en el botón de encendido. Es el botón plano que está junto al botón de volumen en relieve, en el borde del dispositivo."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"El sensor de huellas dactilares está en el botón de encendido. Es el botón plano que está junto al botón de volumen en relieve, en el borde del teléfono."</string>
diff --git a/packages/SystemUI/res-product/values-es/strings.xml b/packages/SystemUI/res-product/values-es/strings.xml
index b13018b..d39c6ed 100644
--- a/packages/SystemUI/res-product/values-es/strings.xml
+++ b/packages/SystemUI/res-product/values-es/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Has intentado desbloquear el teléfono de forma incorrecta <xliff:g id="NUMBER">%d</xliff:g> veces. Se quitará este perfil de trabajo y se eliminarán todos sus datos."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Has dibujado un patrón de desbloqueo incorrecto <xliff:g id="NUMBER_0">%1$d</xliff:g> veces. Si se producen <xliff:g id="NUMBER_1">%2$d</xliff:g> intentos incorrectos más, se te pedirá que desbloquees el tablet con una cuenta de correo electrónico.\n\n Vuelve a intentarlo en <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Has dibujado un patrón de desbloqueo incorrecto <xliff:g id="NUMBER_0">%1$d</xliff:g> veces. Si se producen <xliff:g id="NUMBER_1">%2$d</xliff:g> intentos incorrectos más, se te pedirá que desbloquees el teléfono con una cuenta de correo electrónico.\n\n Vuelve a intentarlo en <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Teléfono apagado por calor"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Dispositivo apagado por calor"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet apagada por calor"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"El teléfono ya funciona con normalidad.\nToca para ver más información."</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"El dispositivo ya funciona con normalidad.\nToca para ver más información."</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"La tablet ya funciona con normalidad.\nToca para ver más información."</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"El teléfono se calentó demasiado, así que se apagó para enfriarse. Ahora funciona con normalidad.\n\nTu teléfono puede calentarse demasiado si:\n	• Usas aplicaciones que consumen muchos recursos (como aplicaciones de juegos, vídeos o navegación)\n	• Descargas o subes archivos de gran tamaño\n	• Lo usas a altas temperaturas"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"El dispositivo se calentó demasiado, así que se apagó para enfriarse. Ahora funciona con normalidad.\n\nTu dispositivo puede calentarse demasiado si:\n	• Usas aplicaciones que consumen muchos recursos (como aplicaciones de juegos, vídeos o navegación)\n	• Descargas o subes archivos de gran tamaño\n	• Lo usas a altas temperaturas"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"La tablet se calentó demasiado, así que se apagó para enfriarse. Ahora funciona con normalidad.\n\nTu tablet puede calentarse demasiado si:\n	• Usas aplicaciones que consumen muchos recursos (como aplicaciones de juegos, vídeos o navegación)\n	• Descargas o subes archivos de gran tamaño\n	• La usas a altas temperaturas"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"El teléfono se está calentando"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"El dispositivo se está calentando"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"La tablet se está calentando"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Se han limitado algunas funciones mientras el teléfono se enfría.\nToca para ver más información."</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Se han limitado algunas funciones mientras el dispositivo se enfría.\nToca para ver más información."</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Se han limitado algunas funciones mientras la tablet se enfría.\nToca para ver más información."</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"El teléfono intentará enfriarse automáticamente. Puedes seguir usándolo, pero es posible que funcione más lento.\n\nUna vez que el teléfono se haya enfriado, funcionará con normalidad."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"El dispositivo intentará enfriarse automáticamente. Puedes seguir usándolo, pero es posible que funcione más lento.\n\nUna vez que el dispositivo se haya enfriado, funcionará con normalidad."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"La tablet intentará enfriarse automáticamente. Puedes seguir usándola, pero es posible que funcione más lenta.\n\nUna vez que la tablet se haya enfriado, funcionará con normalidad."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"El sensor de huellas digitales está en el botón de encendido. Es el botón plano situado junto al botón de volumen con relieve cerca de una de la esquinas de la tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"El sensor de huellas digitales está en el botón de encendido. Es el botón plano situado junto al botón de volumen con relieve en el lateral del dispositivo."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"El sensor de huellas digitales está en el botón de encendido. Es el botón plano situado junto al botón de volumen con relieve en el lateral del teléfono."</string>
@@ -47,5 +65,5 @@
     <string name="global_action_lock_message" product="tablet" msgid="1024230056230539493">"Desbloquea el tablet para ver más opciones"</string>
     <string name="global_action_lock_message" product="device" msgid="3165224897120346096">"Desbloquea el dispositivo para ver más opciones"</string>
     <string name="media_transfer_playing_this_device" product="default" msgid="5795784619523545556">"Reproduciendo en este teléfono"</string>
-    <string name="media_transfer_playing_this_device" product="tablet" msgid="222514408550408633">"Reproduciendo en este tablet"</string>
+    <string name="media_transfer_playing_this_device" product="tablet" msgid="222514408550408633">"Reproduciendo en esta tablet"</string>
 </resources>
diff --git a/packages/SystemUI/res-product/values-et/strings.xml b/packages/SystemUI/res-product/values-et/strings.xml
index 4d8af24..8cd4ae6 100644
--- a/packages/SystemUI/res-product/values-et/strings.xml
+++ b/packages/SystemUI/res-product/values-et/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Olete püüdnud <xliff:g id="NUMBER">%d</xliff:g> korda telefoni valesti avada. Tööprofiil eemaldatakse ja kõik profiiliandmed kustutatakse."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%1$d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%2$d</xliff:g> ebaõnnestunud katset palutakse teil tahvelarvuti avada meilikontoga.\n\n Proovige uuesti <xliff:g id="NUMBER_2">%3$d</xliff:g> sekundi pärast."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%1$d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%2$d</xliff:g> ebaõnnestunud katset palutakse teil telefon avada meilikontoga.\n\n Proovige uuesti <xliff:g id="NUMBER_2">%3$d</xliff:g> sekundi pärast."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefon lülitati kuuma tõttu välja"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Seade lülitati kuuma tõttu välja"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tahvelarvuti lülitati kuuma tõttu välja"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Telefon töötab nüüd tavapäraselt.\nPuudutage lisateabe saamiseks."</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Seade töötab nüüd tavapäraselt.\nPuudutage lisateabe saamiseks."</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Tahvelarvuti töötab nüüd tavapäraselt.\nPuudutage lisateabe saamiseks."</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefon oli liiga kuum, seetõttu lülitus see jahtumiseks välja. Telefon töötab nüüd tavapäraselt.\n\nTelefon võib kuumaks minna:\n	• ressursse koormavate rakenduste kasutamisel (nt mängu-, video- või navigatsioonirakendused)\n	• suurte failide alla-/üleslaadimisel\n	• telefoni kasutamisel kõrgel temperatuuril"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Seade oli liiga kuum, seetõttu lülitus see jahtumiseks välja. Seade töötab nüüd tavapäraselt.\n\nSeade võib kuumaks minna:\n	• ressursse koormavate rakenduste kasutamisel (nt mängu-, video- või navigatsioonirakendused)\n	• suurte failide alla-/üleslaadimisel\n	• seadme kasutamisel kõrgel temperatuuril"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tahvelarvuti oli liiga kuum, seetõttu lülitus see jahtumiseks välja. Tahvelarvuti töötab nüüd tavapäraselt.\n\nTahvelarvuti võib kuumaks minna:\n	• ressursse koormavate rakenduste kasutamisel (nt mängu-, video- või navigatsioonirakendused)\n	• suurte failide alla-/üleslaadimisel\n	• tahvelarvuti kasutamisel kõrgel temperatuuril"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefon soojeneb"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Seade soojeneb"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tahvelarvuti soojeneb"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Mõned funktsioonid on piiratud, kuni telefon jahtub.\nPuudutage lisateabe saamiseks."</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Mõned funktsioonid on piiratud, kuni seade jahtub.\nPuudutage lisateabe saamiseks."</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Mõned funktsioonid on piiratud, kuni tahvelarvuti jahtub.\nPuudutage lisateabe saamiseks."</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Teie telefon proovib automaatselt maha jahtuda. Saate telefoni ikka kasutada, kuid see võib olla aeglasem.\n\nKui telefon on jahtunud, töötab see tavapäraselt."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Teie seade proovib automaatselt maha jahtuda. Saate seadet ikka kasutada, kuid see võib olla aeglasem.\n\nKui seade on jahtunud, töötab see tavapäraselt."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Teie tahvelarvuti proovib automaatselt maha jahtuda. Saate tahvelarvutit ikka kasutada, kuid see võib olla aeglasem.\n\nKui tahvelarvuti on jahtunud, töötab see tavapäraselt."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Sõrmejäljeandur asub toitenupul. See on tahvelarvuti küljel helitugevuse kõrgendatud nupu kõrval olev lame nupp."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Sõrmejäljeandur asub toitenupul. See on seadme küljel helitugevuse kõrgendatud nupu kõrval olev lame nupp."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Sõrmejäljeandur asub toitenupul. See on telefoni küljel helitugevuse kõrgendatud nupu kõrval olev lame nupp."</string>
diff --git a/packages/SystemUI/res-product/values-eu/strings.xml b/packages/SystemUI/res-product/values-eu/strings.xml
index dcb1ead..032811c 100644
--- a/packages/SystemUI/res-product/values-eu/strings.xml
+++ b/packages/SystemUI/res-product/values-eu/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"<xliff:g id="NUMBER">%d</xliff:g> aldiz saiatu zara telefonoa desblokeatzen, baina huts egin duzu denetan. Laneko profila kendu egingo da eta, ondorioz, profileko datu guztiak ezabatuko dira."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Desblokeatzeko eredua oker marraztu duzu <xliff:g id="NUMBER_0">%1$d</xliff:g> aldiz. Beste <xliff:g id="NUMBER_1">%2$d</xliff:g> aldiz oker marrazten baduzu, tableta posta-kontu baten bidez desblokeatzeko eskatuko dizugu.\n\n Saiatu berriro <xliff:g id="NUMBER_2">%3$d</xliff:g> segundo barru."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Desblokeatzeko eredua oker marraztu duzu <xliff:g id="NUMBER_0">%1$d</xliff:g> aldiz. Beste <xliff:g id="NUMBER_1">%2$d</xliff:g> aldiz oker marrazten baduzu, telefonoa posta-kontu baten bidez desblokeatzeko eskatuko dizugu.\n\n Saiatu berriro <xliff:g id="NUMBER_2">%3$d</xliff:g> segundo barru."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Gehiegi berotu delako itzali da telefonoa"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Gehiegi berotu delako itzali da gailua"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Gehiegi berotu delako itzali da tableta"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Orain, ohi bezala funtzionatzen du telefonoak.\nInformazio gehiago lortzeko, sakatu hau"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Orain, ohi bezala funtzionatzen du gailuak.\nInformazio gehiago lortzeko, sakatu hau"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Orain, ohi bezala funtzionatzen du tabletak.\nInformazio gehiago lortzeko, sakatu hau"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefonoa gehiegi berotu denez, itzali egin da hoztu ahal izateko. Orain, ohi bezala funtzionatzen du.\n\nBerotzeko arrazoi posibleak:\n	• Baliabide asko behar dituzten aplikazioak erabiltzea (adibidez, jokoak, bideoak edo nabigazio-aplikazioak).\n	• Fitxategi handiak deskargatzea edo kargatzea.\n	• Telefonoa tenperatura altuak daudenean erabiltzea."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Gailua gehiegi berotu denez, itzali egin da hoztu ahal izateko. Orain, ohi bezala funtzionatzen du.\n\nBerotzeko arrazoi posibleak:\n	• Baliabide asko behar dituzten aplikazioak erabiltzea (adibidez, jokoak, bideoak edo nabigazio-aplikazioak).\n	• Fitxategi handiak deskargatzea edo kargatzea.\n	• Gailua tenperatura altuak daudenean erabiltzea."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tableta gehiegi berotu denez, itzali egin da hoztu ahal izateko. Orain, ohi bezala funtzionatzen du.\n\nBerotzeko arrazoi posibleak:\n	• Baliabide asko behar dituzten aplikazioak erabiltzea (adibidez, jokoak, bideoak edo nabigazio-aplikazioak).\n	• Fitxategi handiak deskargatzea edo kargatzea.\n	• Tableta tenperatura altuak daudenean erabiltzea."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefonoa berotzen ari da"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Gailua berotzen ari da"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tableta berotzen ari da"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Eginbide batzuk ezingo dira erabili telefonoa hozten den arte.\nInformazio gehiago lortzeko, sakatu hau"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Eginbide batzuk ezingo dira erabili gailua hozten den arte.\nInformazio gehiago lortzeko, sakatu hau"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Eginbide batzuk ezingo dira erabili tableta hozten den arte.\nInformazio gehiago lortzeko, sakatu hau"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefonoa automatikoki saiatuko da hozten. Hoztu bitartean, erabiltzen jarrai dezakezu, baina baliteke mantsoago funtzionatzea.\n\nHozten denean, ohi bezala funtzionatuko du."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Gailua automatikoki saiatuko da hozten. Hoztu bitartean, erabiltzen jarrai dezakezu, baina baliteke mantsoago funtzionatzea.\n\nHozten denean, ohi bezala funtzionatuko du."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Tableta automatikoki saiatuko da hozten. Hoztu bitartean, erabiltzen jarrai dezakezu, baina baliteke mantsoago funtzionatzea.\n\nHozten denean, ohi bezala funtzionatuko du."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Hatz-marken sentsorea etengailuan dago. Tabletaren ertzeko bolumen-botoi goratuaren ondoan dagoen botoi laua da."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Hatz-marken sentsorea etengailuan dago. Gailuaren ertzeko bolumen-botoi goratuaren ondoan dagoen botoi laua da."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Hatz-marken sentsorea etengailuan dago. Telefonoaren ertzeko bolumen-botoi goratuaren ondoan dagoen botoi laua da."</string>
diff --git a/packages/SystemUI/res-product/values-fa/strings.xml b/packages/SystemUI/res-product/values-fa/strings.xml
index a861261..30121cc 100644
--- a/packages/SystemUI/res-product/values-fa/strings.xml
+++ b/packages/SystemUI/res-product/values-fa/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"<xliff:g id="NUMBER">%d</xliff:g> تلاش ناموفق برای باز کردن قفل تلفن داشته‌اید. نمایه کاری پاک می‌شود که با آن همه داده‌های نمایه حذف می‌شود."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"‏الگوی بازگشایی قفل را <xliff:g id="NUMBER_0">%1$d</xliff:g> بار اشتباه کشیده‌اید. بعداز <xliff:g id="NUMBER_1">%2$d</xliff:g> تلاش ناموفق، از شما خواسته می‌‎شود که بااستفاده از یک حساب ایمیل قفل رایانه لوحی‌تان را باز کنید.\n\n لطفاً پس‌از <xliff:g id="NUMBER_2">%3$d</xliff:g> ثانیه دوباره امتحان کنید."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"الگوی بازگشایی قفل را <xliff:g id="NUMBER_0">%1$d</xliff:g> بار اشتباه کشیده‌اید. پس‌از <xliff:g id="NUMBER_1">%2$d</xliff:g> تلاش ناموفق، از شما خواسته می‌شود که بااستفاده از یک حساب ایمیل قفل تلفن را باز کنید.\n\n لطفاً پس‌از <xliff:g id="NUMBER_2">%3$d</xliff:g> ثانیه دوباره امتحان کنید."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"تلفن به‌علت گرم شدن خاموش شد"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"دستگاه به‌علت گرم شدن خاموش شد"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"رایانه لوحی به‌علت گرم شدن خاموش شد"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"اکنون عملکرد تلفنتان به حالت عادی برگشته است.\nبرای اطلاعات بیشتر ضربه بزنید"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"اکنون عملکرد دستگاهتان به حالت عادی برگشته است.\nبرای اطلاعات بیشتر ضربه بزنید"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"اکنون عملکرد رایانه لوحی‌تان به حالت عادی برگشته است.\nبرای اطلاعات بیشتر ضربه بزنید"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"تلفنتان خیلی گرم شده بود، بنابراین خاموش شد تا خنک شود. اکنون تلفنتان عملکرد معمولش را دارد.\n\nتلفنتان ممکن است خیلی گرم شود، اگر:\n	• از برنامه‌های نیازمند پردازش زیاد (مثل بازی، ویدیو، یا برنامه‌های ناوبری) استفاده کنید\n	• فایل‌های بزرگ بارگیری یا بارگذاری کنید\n	• در دماهای بالا از تلفنتان استفاده کنید"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"دستگاهتان خیلی گرم شده بود، بنابراین خاموش شد تا خنک شود. اکنون دستگاهتان عملکرد معمولش را دارد.\n\nدستگاهتان ممکن است خیلی گرم شود، اگر:\n	• از برنامه‌های نیازمند پردازش زیاد (مثل بازی، ویدیو، یا برنامه‌های ناوبری) استفاده کنید\n	• فایل‌های بزرگ بارگیری یا بارگذاری کنید\n	• در دماهای بالا از دستگاهتان استفاده کنید"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"رایانه لوحی‌تان خیلی گرم شده بود، بنابراین خاموش شد تا خنک شود. اکنون رایانه لوحی‌تان عملکرد معمولش را دارد.\n\nرایانه لوحی‌تان ممکن است خیلی گرم شود، اگر:\n	• از برنامه‌های نیازمند پردازش زیاد (مثل بازی، ویدیو، یا برنامه‌های ناوبری) استفاده کنید\n	• فایل‌های بزرگ بارگیری یا بارگذاری کنید\n	• در دماهای بالا از رایانه لوحی‌تان استفاده کنید"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"تلفن درحال گرم شدن است"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"دستگاه درحال گرم شدن است"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"رایانه لوحی درحال گرم شدن است"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"وقتی تلفن درحال خنک شدن است، بعضی‌از ویژگی‌ها محدود می‌شوند.\nبرای اطلاعات بیشتر ضربه بزنید"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"وقتی دستگاه درحال خنک شدن است، بعضی‌از ویژگی‌ها محدود می‌شوند.\nبرای اطلاعات بیشتر ضربه بزنید"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"وقتی رایانه لوحی درحال خنک شدن است، بعضی‌از ویژگی‌ها محدود می‌شوند.\nبرای اطلاعات بیشتر ضربه بزنید"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"تلفنتان به‌طور خودکار سعی می‌کند خنک شود. همچنان می‌توانید از تلفنتان استفاده کنید، اما ممکن است کندتر عمل کند.\n\nوقتی تلفن خنک شد، عملکرد عادی‌اش از سرگرفته می‌شود."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"دستگاهتان به‌طور خودکار سعی می‌کند خنک شود. همچنان می‌توانید از دستگاهتان استفاده کنید، اما ممکن است کندتر عمل کند.\n\nوقتی دستگاه خنک شد، عملکرد عادی‌اش از سرگرفته می‌شود."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"رایانه لوحی‌تان به‌طور خودکار سعی می‌کند خنک شود. همچنان می‌توانید از رایانه لوحی‌تان استفاده کنید، اما ممکن است کندتر عمل کند.\n\nوقتی رایانه لوحی خنک شد، عملکرد عادی‌اش از سرگرفته می‌شود."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"حسگر اثر انگشت روی دکمه روشن/خاموش قرار دارد. این همان دکمه مسطحی است که در کنار دکمه برآمده صدا در لبه رایانه لوحی قرار دارد."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"حسگر اثر انگشت روی دکمه روشن/خاموش قرار دارد. این همان دکمه مسطحی است که در کنار دکمه برآمده صدا در لبه دستگاه قرار دارد."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"حسگر اثر انگشت روی دکمه روشن/خاموش قرار دارد. این همان دکمه مسطحی است که در کنار دکمه برآمده صدا در لبه تلفن قرار دارد."</string>
diff --git a/packages/SystemUI/res-product/values-fi/strings.xml b/packages/SystemUI/res-product/values-fi/strings.xml
index c6db4fe..3ed7f6d 100644
--- a/packages/SystemUI/res-product/values-fi/strings.xml
+++ b/packages/SystemUI/res-product/values-fi/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Yritit avata puhelimen lukituksen virheellisillä tiedoilla <xliff:g id="NUMBER">%d</xliff:g> kertaa. Työprofiili ja kaikki sen data poistetaan."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Piirsit lukituksenpoistokuvion väärin <xliff:g id="NUMBER_0">%1$d</xliff:g> kertaa. Jos piirrät kuvion väärin vielä <xliff:g id="NUMBER_1">%2$d</xliff:g> kertaa, sinua pyydetään avaamaan tabletin lukitus sähköpostitilin avulla.\n\n Yritä uudelleen <xliff:g id="NUMBER_2">%3$d</xliff:g> sekunnin kuluttua."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Piirsit lukituksenpoistokuvion väärin <xliff:g id="NUMBER_0">%1$d</xliff:g> kertaa. Jos piirrät kuvion väärin vielä <xliff:g id="NUMBER_1">%2$d</xliff:g> kertaa, sinua pyydetään avaamaan puhelimesi lukitus sähköpostitilin avulla.\n\n Yritä uudelleen <xliff:g id="NUMBER_2">%3$d</xliff:g> sekunnin kuluttua."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Puhelin sammui kuumuuden takia"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Laite sammui kuumuuden takia"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tabletti sammui kuumuuden takia"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Puhelimesi toimii nyt normaalisti.\nLue lisää napauttamalla"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Laitteesi toimii nyt normaalisti.\nLue lisää napauttamalla"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Tablettisi toimii nyt normaalisti.\nLue lisää napauttamalla"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Puhelimesi oli liian kuuma, joten se sammui. Puhelimesi toimii nyt normaalisti.\n\nPuhelimesi voi kuumentua liikaa, jos\n	• käytät paljon resursseja vaativia sovelluksia (esim. pelejä, videoita tai navigointisovelluksia)\n	• lataat tai lähetät suuria tiedostoja\n	• käytät puhelintasi korkeissa lämpötiloissa."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Laitteesi oli liian kuuma, joten se sammui. Laitteesi toimii nyt normaalisti.\n\nLaitteesi voi kuumentua liikaa, jos\n	• käytät paljon resursseja vaativia sovelluksia (esim. pelejä, videoita tai navigointisovelluksia)\n	• lataat tai lähetät suuria tiedostoja\n	• käytät laitetta korkeissa lämpötiloissa."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tablettisi oli liian kuuma, joten se sammui. Tablettisi toimii nyt normaalisti.\n\nTablettisi voi kuumentua liikaa, jos\n	• käytät paljon resursseja vaativia sovelluksia (esim. pelejä, videoita tai navigointisovelluksia)\n	• lataat tai lähetät suuria tiedostoja\n	• käytät tablettia korkeissa lämpötiloissa."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Puhelin lämpenee"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Laite lämpenee"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tabletti lämpenee"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Joidenkin ominaisuuksien käyttöä on rajoitettu puhelimen jäähtymisen aikana.\nLue lisää napauttamalla"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Joidenkin ominaisuuksien käyttöä on rajoitettu laitteen jäähtymisen aikana.\nLue lisää napauttamalla"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Joidenkin ominaisuuksien käyttöä on rajoitettu tabletin jäähtymisen aikana.\nLue lisää napauttamalla"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Puhelimesi yrittää automaattisesti jäähdyttää itsensä. Voit silti käyttää puhelinta, mutta se voi toimia hitaammin.\n\nKun puhelin on jäähtynyt, se toimii normaalisti."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Laitteesi yrittää jäähtyä automaattisesti. Voit silti käyttää laitetta, mutta se voi toimia hitaammin.\n\nKun laite on jäähtynyt, se toimii normaalisti."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Tablettisi yrittää jäähtyä automaattisesti. Voit silti käyttää tablettia, mutta se voi toimia hitaammin.\n\nKun tabletti on jäähtynyt, se toimii normaalisti."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Sormenjälkitunnistin on virtapainikkeessa. Se on litteä painike koholla olevan äänenvoimakkuuspainikkeen vieressä tabletin sivussa."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Sormenjälkitunnistin on virtapainikkeessa. Se on litteä painike koholla olevan äänenvoimakkuuspainikkeen vieressä laitteen sivussa."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Sormenjälkitunnistin on virtapainikkeessa. Se on litteä painike koholla olevan äänenvoimakkuuspainikkeen vieressä puhelimen sivussa."</string>
diff --git a/packages/SystemUI/res-product/values-fr-rCA/strings.xml b/packages/SystemUI/res-product/values-fr-rCA/strings.xml
index 3862796..1b6c6099 100644
--- a/packages/SystemUI/res-product/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res-product/values-fr-rCA/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Vous avez tenté de déverrouiller ce téléphone à <xliff:g id="NUMBER">%d</xliff:g> reprises. Le profil professionnel sera supprimé, ce qui entraîne la suppression de toutes ses données."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%1$d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%2$d</xliff:g> fois, vous devrez déverrouiller votre tablette à l\'aide d\'un compte de courriel.\n\nVeuillez réessayer dans <xliff:g id="NUMBER_2">%3$d</xliff:g> secondes."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%1$d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%2$d</xliff:g> fois, vous devrez déverrouiller votre téléphone à l\'aide d\'un compte de courriel.\n\nVeuillez réessayer dans <xliff:g id="NUMBER_2">%3$d</xliff:g> secondes."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Le téléphone s\'est éteint; surchauffage."</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"L\'appareil s\'est éteint; surchauffage."</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"La tablette s\'est éteinte; surchauffage."</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Votre téléphone fonctionne normalement maintenant.\nTouchez pour en savoir plus"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Votre appareil fonctionne normalement maintenant.\nTouchez pour en savoir plus"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Votre tablette fonctionne normalement maintenant.\nTouchez pour en savoir plus."</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Votre téléphone surchauffait et s\'est éteint afin de se refroidir. Il fonctionne normalement maintenant.\n\nIl peut surchauffer si vous :\n	• utilisez. des applications qui utilisent beaucoup de ressources (jeux, vidéo, navigation, etc.)\n	• téléchargez ou téléversez des fichiers lourds \n	• si vous l\'utilisez lors de températures élevées."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Votre téléphone surchauffait et s\'est éteint afin de se refroidir. Il fonctionne normalement maintenant.\n\nIl peut surchauffer si vous :\n	• utilisez. des applications qui utilisent beaucoup de ressources (jeux, vidéo, navigation, etc.)\n	• téléchargez ou téléversez des fichiers lourds \n	• ou si vous l\'utilisez lors de températures élevées."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Votre tablette surchauffait et s\'est éteinte afin de se refroidir. Elle fonctionne normalement maintenant.\n\nElle peut surchauffer si vous :\n	• utilisez. des applications qui utilisent beaucoup de ressources (jeux, vidéo, navigation, etc.)\n	• téléchargez ou téléversez des fichiers lourds \n	• si vous l\'utilisez lors de températures élevées."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Le téléphone surchauffe"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"L\'appareil surchauffe"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"La tablette surchauffe"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Certaines fonctionnalités sont limitées lors du refroidissement du téléphone.\nTouchez pour en savoir plus"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Certaines fonctionnalités sont limitées lors du refroidissement du téléphone.\nTouchez pour en savoir plus"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Certaines fonctionnalités sont limitées lors du refroidissement du téléphone.\nTouchez pour en savoir plus"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Votre téléphone va se refroidir automatiquement. Vous pouvez toujours l\'utiliser, mais il risque d\'être plus lent.\n\nUne fois refroidi, il va fonctionner normalement."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Votre téléphone va se refroidir automatiquement. Vous pouvez toujours utiliser votre téléphone, mais il risque d\'être plus lent.\n\nUne fois refroidi, il fonctionnera normalement."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Votre tablette va se refroidir automatiquement. Vous pouvez toujours utiliser votre tablette, mais elle risque d\'être plus lente.\n\nUne fois refroidie, elle va fonctionner normalement."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Le capteur d\'empreintes digitales est situé sur l\'interrupteur. Il s\'agit du bouton plat situé à côté du bouton de volume surélevé, sur le bord de la tablette."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Le capteur d\'empreintes digitales est situé sur l\'interrupteur. Il s\'agit du bouton plat situé à côté du bouton de volume surélevé, sur le bord de l\'appareil."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Le capteur d\'empreintes digitales est situé sur l\'interrupteur. Il s\'agit du bouton plat situé à côté du bouton de volume surélevé, sur le bord du téléphone."</string>
diff --git a/packages/SystemUI/res-product/values-fr/strings.xml b/packages/SystemUI/res-product/values-fr/strings.xml
index d874882..eedc182 100644
--- a/packages/SystemUI/res-product/values-fr/strings.xml
+++ b/packages/SystemUI/res-product/values-fr/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Vous avez tenté de déverrouiller le téléphone à <xliff:g id="NUMBER">%d</xliff:g> reprises. Le profil professionnel et toutes les données associées vont être supprimés."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%1$d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%2$d</xliff:g> fois, vous devrez déverrouiller votre tablette à l\'aide d\'un compte de messagerie électronique.\n\nRéessayez dans <xliff:g id="NUMBER_2">%3$d</xliff:g> secondes."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%1$d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%2$d</xliff:g> fois, vous devrez déverrouiller votre téléphone à l\'aide d\'un compte de messagerie électronique.\n\nRéessayez dans <xliff:g id="NUMBER_2">%3$d</xliff:g> secondes."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Téléphone éteint car il surchauffait"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Appareil éteint car il surchauffait"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablette éteinte car elle surchauffait"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"À présent, votre téléphone fonctionne normalement.\nAppuyer pour en savoir plus"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"À présent, votre appareil fonctionne normalement.\nAppuyer pour en savoir plus"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"À présent, votre tablette fonctionne normalement.\nAppuyer pour en savoir plus"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Votre téléphone s\'est éteint, car il surchauffait. Il s\'est refroidi et fonctionne normalement.\n\nIl peut surchauffer si vous :\n	• exécutez des applis utilisant beaucoup de ressources (jeux, vidéo, navigation, etc.) ;\n	• téléchargez ou importez de gros fichiers ;\n	• utilisez votre téléphone à des températures élevées."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Votre appareil s\'est éteint, car il surchauffait. Il s\'est refroidi et fonctionne normalement.\n\nIl peut surchauffer si vous :\n	• exécutez des applis utilisant beaucoup de ressources (jeux, vidéo, navigation, etc.) ;\n	• téléchargez ou importez de gros fichiers ;\n	• utilisez votre appareil à des températures élevées."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Votre tablette s\'est éteinte, car elle surchauffait. Elle s\'est refroidie et fonctionne normalement.\n\nElle peut surchauffer si vous :\n	• exécutez des applis utilisant beaucoup de ressources (jeux, vidéo, navigation, etc.) ;\n	• téléchargez ou importez de gros fichiers ;\n	• utilisez votre tablette à des températures élevées."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Le téléphone chauffe"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"L\'appareil chauffe"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"La tablette chauffe"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Fonctionnalités limitées pendant le refroidissement du téléphone.\nAppuyer pour en savoir plus"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Fonctionnalités limitées pendant le refroidissement de l\'appareil.\nAppuyer pour en savoir plus"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Fonctionnalités limitées pendant le refroidissement de la tablette.\nAppuyer pour en savoir plus"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Votre téléphone va essayer de se refroidir automatiquement. Vous pouvez toujours l\'utiliser, mais il risque d\'être plus lent.\n\nUne fois refroidi, il fonctionnera normalement."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Votre appareil va essayer de se refroidir automatiquement. Vous pouvez toujours l\'utiliser, mais il risque d\'être plus lent.\n\nUne fois refroidi, il fonctionnera normalement."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Votre tablette va essayer de se refroidir automatiquement. Vous pouvez toujours l\'utiliser, mais elle risque d\'être plus lente.\n\nUne fois refroidie elle fonctionnera normalement."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Le lecteur d\'empreinte digitale est sur le bouton Marche/Arrêt. C\'est le bouton plat à côté du bouton de volume en relief sur un bord de la tablette."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Le lecteur d\'empreinte digitale est sur le bouton Marche/Arrêt. C\'est le bouton plat à côté du bouton de volume en relief sur un bord de l\'appareil."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Le lecteur d\'empreinte digitale est sur le bouton Marche/Arrêt. C\'est le bouton plat à côté du bouton de volume en relief sur un bord du téléphone."</string>
diff --git a/packages/SystemUI/res-product/values-gl/strings.xml b/packages/SystemUI/res-product/values-gl/strings.xml
index b3e03ca..67be4b2 100644
--- a/packages/SystemUI/res-product/values-gl/strings.xml
+++ b/packages/SystemUI/res-product/values-gl/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Tentaches desbloquear o teléfono <xliff:g id="NUMBER">%d</xliff:g> veces de forma incorrecta. Quitarase o perfil de traballo e, por conseguinte, todos os seus datos."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Debuxaches o padrón de desbloqueo <xliff:g id="NUMBER_0">%1$d</xliff:g> veces de forma incorrecta. Se realizas <xliff:g id="NUMBER_1">%2$d</xliff:g> intentos incorrectos máis, terás que desbloquear a tableta a través dunha conta de correo electrónico.\n\n Téntao de novo en <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Debuxaches o padrón de desbloqueo <xliff:g id="NUMBER_0">%1$d</xliff:g> veces de forma incorrecta. Se realizas <xliff:g id="NUMBER_1">%2$d</xliff:g> intentos incorrectos máis, terás que desbloquear o teléfono a través dunha conta de correo electrónico.\n\n Téntao de novo en <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"O teléfono apagouse pola calor"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"O dispositivo apagouse pola calor"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"A tableta apagouse pola calor"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"O teléfono funciona con normalidade.\nToca para obter máis información"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"O dispositivo funciona con normalidade.\nToca para obter máis información"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"A tableta funciona con normalidade.\nToca para obter máis información"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Como teléfono estaba demasiado quente, apagouse para arrefriar. Agora funciona con normalidade.\n\nÉ posible que se quente demasiado se:\n	• Usas aplicacións que requiran moitos recursos (como aplicacións de navegación, vídeos ou xogos).\n	• Descargas ou cargas ficheiros grandes.\n	• Utilizas o teléfono en ambientes con temperatura elevada."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Como o dispositivo estaba demasiado quente, apagouse para arrefriar. Agora funciona con normalidade.\n\nÉ posible que se quente demasiado se:\n	• Usas aplicacións que requiran moitos recursos (como aplicacións de navegación, vídeos ou xogos).\n	• Descargas ou cargas ficheiros grandes.\n	• Utilizas o dispositivo en ambientes con temperatura elevada."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Como a tableta estaba demasiado quente, apagouse para arrefriar. Agora funciona con normalidade.\n\nÉ posible que se quente demasiado se:\n	• Usas aplicacións que requiran moitos recursos (como aplicacións de navegación, vídeos ou xogos).\n	• Descargas ou cargas ficheiros grandes.\n	• Utilizas a tableta en ambientes con temperatura elevada."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"O teléfono estase quentando"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"O dispositivo estase quentando"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"A tableta estase quentando"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Algunhas funcións estarán limitadas mentres arrefría o teléfono.\nToca para obter máis información"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Algunhas funcións estarán limitadas mentres arrefría o dispositivo.\nToca para obter máis información"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Algunhas funcións estarán limitadas mentres arrefría a tableta.\nToca para obter máis información"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"O teléfono tentará arrefriar automaticamente. Podes utilizalo igual, pero quizais vaia máis lento.\n\nUnha vez que arrefríe, funcionará con normalidade."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"O dispositivo tentará arrefriar automaticamente. Podes utilizalo igual, pero quizais vaia máis lento.\n\nUnha vez que arrefríe, funcionará con normalidade."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"A tableta tentará arrefriar automaticamente. Podes utilizala igual, pero quizais vaia máis lenta.\n\nUnha vez que arrefríe, funcionará con normalidade."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"O sensor de impresión dixital está no botón de acendido. É o botón plano que se atopa a carón do botón de volume con relevo, no lateral da tableta."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"O sensor de impresión dixital está no botón de acendido. É o botón plano que se atopa a carón do botón de volume con relevo, no lateral do dispositivo."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"O sensor de impresión dixital está no botón de acendido. É o botón plano que se atopa a carón do botón de volume con relevo, no lateral do teléfono."</string>
diff --git a/packages/SystemUI/res-product/values-gu/strings.xml b/packages/SystemUI/res-product/values-gu/strings.xml
index 4621be3..d43c3d3 100644
--- a/packages/SystemUI/res-product/values-gu/strings.xml
+++ b/packages/SystemUI/res-product/values-gu/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"તમે ફોનને <xliff:g id="NUMBER">%d</xliff:g> વખત ખોટી રીતે અનલૉક કરવાનો પ્રયાસ કર્યો છે. આ કાર્યાલયની પ્રોફાઇલ કાઢી નાખવામાં આવશે, જે તમામ પ્રોફાઇલ ડેટાને ડિલીટ કરી દેશે."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"તમે તમારી અનલૉક પૅટર્ન <xliff:g id="NUMBER_0">%1$d</xliff:g> વખત ખોટી રીતે દોરી છે. વધુ <xliff:g id="NUMBER_1">%2$d</xliff:g> અસફળ પ્રયાસો પછી, તમને એક ઇમેઇલ એકાઉન્ટનો ઉપયોગ કરીને તમારા ટૅબ્લેટને અનલૉક કરવાનું કહેવામાં આવશે.\n\n<xliff:g id="NUMBER_2">%3$d</xliff:g> સેકન્ડમાં ફરી પ્રયાસ કરો."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"તમે તમારી અનલૉક પૅટર્ન <xliff:g id="NUMBER_0">%1$d</xliff:g> વખત ખોટી રીતે દોરી છે. વધુ <xliff:g id="NUMBER_1">%2$d</xliff:g> અસફળ પ્રયાસો પછી, તમને ઇમેઇલ એકાઉન્ટનો ઉપયોગ કરીને તમારા ફોનને અનલૉક કરવાનું કહેવામાં આવશે.\n\n<xliff:g id="NUMBER_2">%3$d</xliff:g> સેકન્ડમાં ફરીથી પ્રયાસ કરો."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"ગરમ થવાના કારણે ફોન બંધ થઇ ગયો છે"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"ગરમ થવાના કારણે ડિવાઇસ બંધ થઈ ગયું છે"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"ગરમ થવાના કારણે ટૅબ્લેટ બંધ થઈ ગયું છે"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"તમારો ફોન હવે સામાન્ય રીતે કાર્ય કરી રહ્યો છે.\nવધુ માહિતી માટે ટૅપ કરો"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"તમારું ડિવાઇસ હવે સામાન્ય રીતે કાર્ય કરી રહ્યું છે.\nવધુ માહિતી માટે ટૅપ કરો"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"તમારું ટૅબ્લેટ હવે સામાન્ય રીતે કાર્ય કરી રહ્યું છે.\nવધુ માહિતી માટે ટૅપ કરો"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"તમારો ફોન અત્યંત ગરમ હતો, તેથી તે ઠંડો થવા ઑટોમૅટિક રીતે બંધ થઈ ગયો છે. તમારો ફોન હવે સામાન્ય રીતે કાર્ય કરી રહ્યો છે.\n\nતમારો ફોન અત્યંત ગરમ થઈ શકે છે, જો તમે:\n	• એવી ઍપ વાપરતા હો જે સંસાધન સઘન રીતે વાપરતી હોય (જેમ કે ગેમિંગ, વીડિયો, અથવા નેવિગેટ કરતી ઍપ)\n	• મોટી ફાઇલો અપલોડ અથવા ડાઉનલોડ કરતા હો\n	• તમારા ફોનનો ઉપયોગ ઉચ્ચ તાપમાનમાં કરતા હો"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"તમારું ડિવાઇસ અત્યંત ગરમ હતું, તેથી તે ઠંડું થવા ઑટોમૅટિક રીતે બંધ થઈ ગયું છે. તમારું ડિવાઇસ હવે સામાન્ય રીતે કાર્ય કરી રહ્યું છે.\n\nતમારું ડિવાઇસ અત્યંત ગરમ થઈ શકે છે, જો તમે:\n	• એવી ઍપ વાપરતા હો જે સંસાધન સઘન રીતે વાપરતી હોય (જેમ કે ગેમિંગ, વીડિયો, અથવા નેવિગેટ કરતી ઍપ)\n	• મોટી ફાઇલો અપલોડ અથવા ડાઉનલોડ કરતા હો\n	• તમારા ડિવાઇસનો ઉપયોગ ઉચ્ચ તાપમાનમાં કરતા હો"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"તમારું ટૅબ્લેટ અત્યંત ગરમ હતું, તેથી તે ઠંડું થવા ઑટોમૅટિક રીતે બંધ થઈ ગયું છે. તમારું ટૅબ્લેટ હવે સામાન્ય રીતે કાર્ય કરી રહ્યું છે.\n\nતમારું ટૅબ્લેટ અત્યંત ગરમ થઈ શકે છે, જો તમે:\n	• એવી ઍપ વાપરતા હો જે સંસાધન સઘન રીતે વાપરતી હોય (જેમ કે ગેમિંગ, વીડિયો, અથવા નેવિગેટ કરતી ઍપ)\n	• મોટી ફાઇલો અપલોડ અથવા ડાઉનલોડ કરતા હો\n	• તમારા ટૅબ્લેટનો ઉપયોગ ઉચ્ચ તાપમાનમાં કરતા હો"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"ફોન ગરમ થવા લાગ્યો છે"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"ડિવાઇસ ગરમ થવા લાગ્યું છે"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"ટૅબ્લેટ ગરમ થવા લાગ્યું છે"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"ફોન ઠંડો થાય ત્યાં સુધી અમુક સુવિધાઓ મર્યાદિત હોય છે.\nવધુ માહિતી માટે ટૅપ કરો"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"ડિવાઇસ ઠંડું થાય ત્યાં સુધી અમુક સુવિધાઓ મર્યાદિત હોય છે.\nવધુ માહિતી માટે ટૅપ કરો"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"ટૅબ્લેટ ઠંડું થાય ત્યાં સુધી અમુક સુવિધાઓ મર્યાદિત હોય છે.\nવધુ માહિતી માટે ટૅપ કરો"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"તમારો ફોન ઑટોમૅટિક રીતે ઠંડો થવાનો પ્રયાસ કરશે. તમે હજી પણ તમારા ફોનનો ઉપયોગ કરી શકો છો, પરંતુ તે કદાચ થોડો ધીમો ચાલે.\n\nએકવાર તમારો ફોન ઠંડો થઈ ગયા પછી, તે સામાન્ય રીતે ચાલશે."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"તમારું ડિવાઇસ ઑટોમૅટિક રીતે ઠંડુ થવાનો પ્રયાસ કરશે. તમે હજી પણ તમારા ડિવાઇસનો ઉપયોગ કરી શકો છો, પરંતુ તે કદાચ થોડું ધીમું કાર્ય કરે.\n\nએકવાર તમારું ડિવાઇસ ઠંડું થઈ ગયા પછી, તે સામાન્ય રીતે કાર્ય કરશે."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"તમારું ટૅબ્લેટ ઑટોમૅટિક રીતે ઠંડું થવાનો પ્રયાસ કરશે. તમે હજી પણ તમારા ટૅબ્લેટનો ઉપયોગ કરી શકો છો, પરંતુ તે કદાચ થોડું ધીમું ચાલે.\n\nએકવાર તમારું ટૅબ્લેટ ઠંડું થઈ ગયા પછી, તે સામાન્ય રીતે કાર્ય કરશે."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"ફિંગરપ્રિન્ટ સેન્સર પાવર બટન પર છે. તે ટૅબ્લેટની કિનારીએ આવેલા ઉપસેલા વૉલ્યૂમ બટનની બાજુમાં આવેલું સપાટ બટન છે."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"ફિંગરપ્રિન્ટ સેન્સર પાવર બટન પર છે. તે ડિવાઇસની કિનારીએ આવેલા ઉપસેલા વૉલ્યૂમ બટનની બાજુમાં આવેલું સપાટ બટન છે."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"ફિંગરપ્રિન્ટ સેન્સર પાવર બટન પર છે. તે ફોનની કિનારીએ આવેલા ઉપસેલા વૉલ્યૂમ બટનની બાજુમાં આવેલું સપાટ બટન છે."</string>
diff --git a/packages/SystemUI/res-product/values-hi/strings.xml b/packages/SystemUI/res-product/values-hi/strings.xml
index 4c69df50..dab5f57 100644
--- a/packages/SystemUI/res-product/values-hi/strings.xml
+++ b/packages/SystemUI/res-product/values-hi/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"आप फ़ोन को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत पासवर्ड डाल चुके हैं. इसकी वजह से वर्क प्रोफ़ाइल को हटा दिया जाएगा जिससे उपयोगकर्ता की प्रोफ़ाइल का सारा डेटा मिट जाएगा."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"आपने लॉक खोलने के पैटर्न को <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से बनाया है. इसलिए, <xliff:g id="NUMBER_1">%2$d</xliff:g> और गलत पैटर्न बनाने के बाद, टैबलेट को अनलॉक करने के लिए आपसे ईमेल खाते का इस्तेमाल करने को कहा जाएगा.\n\n अनलॉक करने के लिए <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंड में फिर से कोशिश करें."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"आपने लॉक खोलने के पैटर्न को <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से बनाया है. इसलिए, <xliff:g id="NUMBER_1">%2$d</xliff:g> और गलत पैटर्न बनाने के बाद, आपसे फ़ोन को अनलॉक करने के लिए ईमेल खाते का इस्तेमाल करने को कहा जाएगा.\n\n अनलॉक करने के लिए <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंड में फिर से कोशिश करें."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"गर्म होने की वजह से फ़ोन बंद हो गया"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"गर्म होने की वजह से डिवाइस बंद हो गया"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"गर्म होने की वजह से टैबलेट बंद हो गया"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"आपका फ़ोन अब सामान्य रूप से काम कर रहा है.\nज़्यादा जानकारी के लिए टैप करें"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"आपका डिवाइस अब सामान्य रूप से काम कर रहा है.\nज़्यादा जानकारी के लिए टैप करें"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"आपका टैबलेट अब सामान्य रूप से काम कर रहा है.\nज़्यादा जानकारी के लिए टैप करें"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"आपका फ़ोन बहुत गर्म हो गया था. इसलिए, यह ठंडा होने के लिए बंद हो गया. फ़ोन अब सामान्य रूप से काम कर रहा है.\n\nफ़ोन बहुत गर्म हो सकता है, अगर:\n	• ज़्यादा रिसॉर्स का इस्तेमाल करने वाले ऐप्लिकेशन चलाए जाते हैं. जैसे, गेमिंग, वीडियो या नेविगेशन ऐप्लिकेशन\n	• बड़ी फ़ाइलें डाउनलोड या अपलोड की जाती हैं\n	• ज़्यादा तापमान में फ़ोन का इस्तेमाल किया जाता है"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"आपका डिवाइस बहुत गर्म हो गया था. इसलिए, यह ठंडा होने के लिए बंद हो गया. डिवाइस अब सामान्य रूप से काम कर रहा है.\n\nडिवाइस बहुत गर्म हो सकता है, अगर:\n	• ज़्यादा रिसॉर्स का इस्तेमाल करने वाले ऐप्लिकेशन चलाए जाते हैं. जैसे, गेमिंग, वीडियो या नेविगेशन ऐप्लिकेशन\n	• बड़ी फ़ाइलें डाउनलोड या अपलोड की जाती हैं\n	• ज़्यादा तापमान में डिवाइस का इस्तेमाल किया जाता है"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"आपका टैबलेट बहुत गर्म हो गया था. इसलिए, यह ठंडा होने के लिए बंद हो गया. टैबलेट अब सामान्य रूप से काम कर रहा है.\n\nटैबलेट बहुत गर्म हो सकता है, अगर:\n	• ज़्यादा रिसॉर्स का इस्तेमाल करने वाले ऐप्लिकेशन चलाए जाते हैं. जैसे, गेमिंग, वीडियो या नेविगेशन ऐप्लिकेशन\n	• बड़ी फ़ाइलें डाउनलोड या अपलोड की जाती हैं\n	• ज़्यादा तापमान में टैबलेट का इस्तेमाल किया जाता है"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"फ़ोन गर्म हो रहा है"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"डिवाइस गर्म हो रहा है"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"टैबलेट गर्म हो रहा है"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"फ़ोन के ठंडा होने तक कुछ सुविधाएं काम नहीं करतीं.\nज़्यादा जानकारी के लिए टैप करें"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"डिवाइस के ठंडा होने तक कुछ सुविधाएं काम नहीं करतीं.\nज़्यादा जानकारी के लिए टैप करें"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"टैबलेट के ठंडा होने तक कुछ सुविधाएं काम नहीं करतीं.\nज़्यादा जानकारी के लिए टैप करें"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"आपका फ़ोन अपने-आप ठंडा हो जाएगा. इस दौरान भी अपने फ़ोन का इस्तेमाल किया जा सकता है. हालांकि, ऐसे में फ़ोन शायद धीमा काम करे.\n\nठंडा हो जाने के बाद, यह पहले की तरह काम करेगा."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"आपका डिवाइस अपने-आप ठंडा हो जाएगा. इस दौरान भी अपने डिवाइस का इस्तेमाल किया जा सकता है. हालांकि, ऐसे में डिवाइस शायद धीमा काम करे.\n\nठंडा हो जाने के बाद, यह पहले की तरह काम करेगा."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"आपका टैबलेट अपने-आप ठंडा हो जाएगा. इस दौरान भी अपने टैबलेट का इस्तेमाल किया जा सकता है. हालांकि, ऐसे में टैबलेट शायद धीमा काम करे.\n\nठंडा हो जाने के बाद, यह पहले की तरह काम करेगा."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"फ़िंगरप्रिंट सेंसर, पावर बटन पर होता है. यह टैबलेट के किनारे पर मौजूद एक फ़्लैट बटन होता है, जो कि आपको आवाज़ कम या ज़्यादा करने वाले उभरे हुए बटन के बगल में मिलेगा."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"फ़िंगरप्रिंट सेंसर, पावर बटन पर होता है. यह डिवाइस के किनारे पर मौजूद एक फ़्लैट बटन होता है, जो कि आपको आवाज़ कम या ज़्यादा करने वाले उभरे हुए बटन के बगल में मिलेगा."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"फ़िंगरप्रिंट सेंसर, पावर बटन पर होता है. यह फ़ोन के किनारे पर मौजूद एक फ़्लैट बटन होता है, जो कि आपको आवाज़ कम या ज़्यादा करने वाले उभरे हुए बटन के बगल में मिलेगा."</string>
diff --git a/packages/SystemUI/res-product/values-hr/strings.xml b/packages/SystemUI/res-product/values-hr/strings.xml
index a7bd4b0..8be9a22 100644
--- a/packages/SystemUI/res-product/values-hr/strings.xml
+++ b/packages/SystemUI/res-product/values-hr/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Neuspješno ste pokušali otključati telefon <xliff:g id="NUMBER">%d</xliff:g> put/a. Radni će se profil ukloniti, a time će se izbrisati i svi njegovi podaci."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Netočno ste iscrtali uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> put/a. Nakon još <xliff:g id="NUMBER_1">%2$d</xliff:g> pokušaja morat ćete otključati tablet pomoću računa e-pošte.\n\n Pokušajte ponovo za <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Netočno ste iscrtali uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> put/a. Nakon još <xliff:g id="NUMBER_1">%2$d</xliff:g> pokušaja morat ćete otključati telefon pomoću računa e-pošte.\n\n Pokušajte ponovo za <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefon se isključio zbog vrućine"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Uređaj se isključio zbog vrućine"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet se isključio zbog vrućine"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Telefon sad radi normalno.\nDodirnite za više informacija."</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Uređaj sad radi normalno.\nDodirnite za više informacija."</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Tablet sad radi normalno.\nDodirnite za više informacija."</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefon se pregrijao, stoga se isključio kako bi se ohladio Telefon sada radi normalno.\n\nTelefon se može pregrijati ako:\n	• Upotrebljavate zahtjevne aplikacije (kao što su igre, aplikacije za videozapise ili navigaciju).\n	• Preuzimate ili prenosite velike datoteke.\n	• Upotrebljavate telefon na visokim temperaturama."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Uređaj se pregrijao, stoga se isključio kako bi se ohladio Uređaj sada radi normalno.\n\nUređaj se može pregrijati ako:\n	• Upotrebljavate zahtjevne aplikacije (kao što su igre, aplikacije za videozapise ili navigaciju).\n	• Preuzimate ili prenosite velike datoteke.\n	• Upotrebljavate uređaj na visokim temperaturama."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tablet se pregrijao, stoga se isključio kako bi se ohladio Tablet sada radi normalno.\n\nTablet se može pregrijati ako:\n	• Upotrebljavate zahtjevne aplikacije (kao što su igre, aplikacije za videozapise ili navigaciju).\n	• Preuzimate ili prenosite velike datoteke.\n	• Upotrebljavate tablet na visokim temperaturama."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefon se zagrijava"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Uređaj se zagrijava"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet se zagrijava"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Neke su značajke ograničene dok se telefon ne ohladi.\nDodirnite za više informacija"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Neke su značajke ograničene dok se uređaj ne ohladi.\nDodirnite za više informacija"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Neke su značajke ograničene dok se tablet ne ohladi.\nDodirnite za više informacija"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefon će se automatski pokušati ohladiti. Možete ga nastaviti koristiti, no mogao bi raditi sporije.\n\nKad se ohladi, radit će normalno."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Uređaj će se automatski pokušati ohladiti. Možete ga nastaviti koristiti, no mogao bi raditi sporije.\n\nKad se ohladi, radit će normalno."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Tablet će se automatski pokušati ohladiti. Možete ga nastaviti koristiti, no mogao bi raditi sporije.\n\nKad se ohladi, radit će normalno."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Senzor otiska prsta nalazi se na tipki za uključivanje/isključivanje. To je ravni gumb pored izdignutog gumba za glasnoću na rubu tableta."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Senzor otiska prsta nalazi se na tipki za uključivanje/isključivanje. To je ravni gumb pored izdignutog gumba za glasnoću na rubu uređaja."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Senzor otiska prsta nalazi se na tipki za uključivanje/isključivanje. To je ravni gumb pored izdignutog gumba za glasnoću na rubu telefona."</string>
diff --git a/packages/SystemUI/res-product/values-hu/strings.xml b/packages/SystemUI/res-product/values-hu/strings.xml
index 75c10e9..34f20a0 100644
--- a/packages/SystemUI/res-product/values-hu/strings.xml
+++ b/packages/SystemUI/res-product/values-hu/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"<xliff:g id="NUMBER">%d</xliff:g> alkalommal próbálkozott sikertelenül a telefon zárolásának feloldásával. A rendszer eltávolítja a munkaprofilt, és ezzel a profil összes adata törlődik."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"<xliff:g id="NUMBER_0">%1$d</xliff:g> alkalommal helytelenül rajzolta le a feloldási mintát. További <xliff:g id="NUMBER_1">%2$d</xliff:g> sikertelen kísérlet után e-mail-fiók használatával kell feloldania táblagépét.\n\nPróbálja újra <xliff:g id="NUMBER_2">%3$d</xliff:g> másodperc múlva."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"<xliff:g id="NUMBER_0">%1$d</xliff:g> alkalommal helytelenül rajzolta le a feloldási mintát. További <xliff:g id="NUMBER_1">%2$d</xliff:g> sikertelen kísérlet után e-mail-fiók használatával kell feloldania telefonját.\n\nPróbálja újra <xliff:g id="NUMBER_2">%3$d</xliff:g> másodperc múlva."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"A telefon a meleg miatt kikapcsolt"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Az eszköz a meleg miatt kikapcsolt"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"A táblagép a meleg miatt kikapcsolt"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Telefonja most már megfelelően működik.\nKoppintson, ha további információra van szüksége."</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Eszköze most már megfelelően működik.\nKoppintson, ha további információra van szüksége."</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Táblagépe most már megfelelően működik.\nKoppintson, ha további információra van szüksége."</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefonja túlmelegedett, így kikapcsolt, hogy lehűlhessen. Most már megfelelően működik.\n\nA telefon akkor melegedhet túl, ha Ön:\n	• Energiaigényes alkalmazásokat használ (például játékokat, videókat vagy navigációs alkalmazásokat)\n	• Nagy fájlokat tölt le vagy fel\n	• Melegben használja a telefonját"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Eszköze túlmelegedett, így kikapcsolt, hogy lehűlhessen. Most már megfelelően működik.\n\nAz eszköz akkor melegedhet túl, ha Ön:\n	• Energiaigényes alkalmazásokat használ (például játékokat, videókat vagy navigációs alkalmazásokat)\n	• Nagy fájlokat tölt le vagy fel\n	• Melegben használja eszközét"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Táblagépe túlmelegedett, így kikapcsolt, hogy lehűlhessen. Most már megfelelően működik.\n\nA táblagép akkor melegedhet túl, ha Ön:\n	• Energiaigényes alkalmazásokat használ (például játékokat, videókat vagy navigációs alkalmazásokat)\n	• Nagy fájlokat tölt le vagy fel\n	• Melegben használja a táblagépet"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"A telefon melegszik"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Az eszköz melegszik"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"A táblagép melegszik"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Bizonyos funkciók korlátozottan működnek a telefon lehűlése közben.\nKoppintson, ha további információra van szüksége."</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Bizonyos funkciók korlátozottan működnek az eszköz lehűlése közben.\nKoppintson, ha további információra van szüksége."</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Bizonyos funkciók korlátozottan működnek a táblagép lehűlése közben.\nKoppintson, ha további információra van szüksége."</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"A telefon automatikusan megpróbál lehűlni. Továbbra is tudja használni a telefont, de elképzelhető, hogy működése lelassul.\n\nAmint a telefon lehűl, újra a szokásos módon működik majd."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Az eszköz automatikusan megpróbál lehűlni. Továbbra is tudja használni, de elképzelhető, hogy működése lelassul.\n\nAmint az eszköz lehűl, újra a szokásos módon működik majd."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"A táblagép automatikusan megpróbál lehűlni. Továbbra is tudja használni, de elképzelhető, hogy működése lelassul.\n\nAmint a táblagép lehűl, újra a szokásos módon működik majd."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Az ujjlenyomat-érzékelő a bekapcsológombon található. Ez a kiemelkedő hangerőgomb melletti lapos gomb a táblagép szélén."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Az ujjlenyomat-érzékelő a bekapcsológombon található. Ez a kiemelkedő hangerőgomb melletti lapos gomb az eszköz szélén."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Az ujjlenyomat-érzékelő a bekapcsológombon található. Ez a kiemelkedő hangerőgomb melletti lapos gomb a telefon szélén."</string>
diff --git a/packages/SystemUI/res-product/values-hy/strings.xml b/packages/SystemUI/res-product/values-hy/strings.xml
index acee335..f527eab 100644
--- a/packages/SystemUI/res-product/values-hy/strings.xml
+++ b/packages/SystemUI/res-product/values-hy/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Դուք կատարել եք հեռախոսն ապակողպելու <xliff:g id="NUMBER">%d</xliff:g> անհաջող փորձ: Աշխատանքային պրոֆիլը կհեռացվի, և պրոֆիլի բոլոր տվյալները կջնջվեն:"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Դուք կատարել եք ապակողպման նախշը մուտքագրելու <xliff:g id="NUMBER_0">%1$d</xliff:g> անհաջող փորձ: Եվս <xliff:g id="NUMBER_1">%2$d</xliff:g> անհաջող փորձից հետո ձեզանից կպահանջվի ապակողպել պլանշետը էլփոստի հաշվի միջոցով։\n\n Խնդրում ենք կրկին փորձել <xliff:g id="NUMBER_2">%3$d</xliff:g> վայրկյանից:"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Դուք <xliff:g id="NUMBER_0">%1$d</xliff:g> անգամ սխալ եք հավաքել ձեր ապակողպման նմուշը: Եվս <xliff:g id="NUMBER_1">%2$d</xliff:g> անհաջող փորձից հետո ձեզ կառաջարկվի ապակողպել հեռախոսը` օգտագործելով էլփոստի հաշիվ:\n\n Կրկին փորձեք <xliff:g id="NUMBER_2">%3$d</xliff:g> վայրկյանից:"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Հեռախոսն անջատվել էր տաքանալու պատճառով"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Սարքն անջատվել էր տաքանալու պատճառով"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Պլանշետն անջատվել էր տաքանալու պատճառով"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Ձեր հեռախոսն այժմ նորմալ է աշխատում։\nՀպեք՝ ավելին իմանալու համար"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Ձեր սարքն այժմ նորմալ է աշխատում։\nՀպեք՝ ավելին իմանալու համար"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Ձեր պլանշետն այժմ նորմալ է աշխատում։\nՀպեք՝ ավելին իմանալու համար"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Ձեր հեռախոսը չափազանց տաք էր, այդ պատճառով այն անջատվել է՝ հովանալու համար։ Հեռախոսն այժմ նորմալ աշխատում է։\n\nՀեռախոսը կարող է տաքանալ, եթե՝\n	• Օգտագործում եք ռեսուրսատար հավելվածներ (օրինակ՝ խաղեր, տեսանյութեր կամ նավիգացիայի հավելվածներ)\n	• Ներբեռնում կամ վերբեռնում եք ծանր ֆայլեր\n	• Օգտագործում եք ձեր հեռախոսը բարձր ջերմային պայմաններում"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Ձեր սարքը չափազանց տաք էր, այդ պատճառով այն անջատվել է՝ հովանալու համար։ Սարքն այժմ նորմալ աշխատում է։\n\nՍարքը կարող է տաքանալ, եթե՝\n	• Օգտագործում եք ռեսուրսատար հավելվածներ (օրինակ՝ խաղեր, տեսանյութեր կամ նավիգացիայի հավելվածներ)\n	• Ներբեռնում կամ վերբեռնում եք ծանր ֆայլեր\n	• Օգտագործում եք ձեր սարքը բարձր ջերմային պայմաններում"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Ձեր պլանշետը չափազանց տաք էր, այդ պատճառով այն անջատվել է՝ հովանալու համար: Պլանշետը այժմ նորմալ աշխատում է:\n\nՊլանշետը կարող է տաքանալ, եթե՝\n	• Օգտագործում եք ռեսուրսատար հավելվածներ (օրինակ՝ խաղեր, տեսանյութեր կամ նավիգացիայի հավելվածներ)\n	• Ներբեռնում կամ վերբեռնում եք ծանր ֆայլեր\n	• Օգտագործում եք ձեր պլանշետը բարձր ջերմային պայմաններում"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Հեռախոսը տաքանում է"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Սարքը տաքանում է"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Պլանշետը տաքանում է"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Հովանալու ընթացքում հեռախոսի որոշ գործառույթներ սահմանափակված են։\nՀպեք՝ ավելին իմանալու համար"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Հովանալու ընթացքում սարքի որոշ գործառույթներ սահմանափակված են։\nՀպեք՝ ավելին իմանալու համար"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Հովանալու ընթացքում պլանշետի որոշ գործառույթներ սահմանափակված են։\nՀպեք՝ ավելին իմանալու համար"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Ձեր հեռախոսն ավտոմատ կերպով կփորձի hովանալ։ Կարող եք շարունակել օգտագործել հեռախոսը, սակայն հնարավոր է, որ այն ավելի դանդաղ աշխատի։\n\nՀովանալուց հետո հեռախոսը կաշխատի կանոնավոր կերպով։"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Ձեր սարքը ավտոմատ կերպով կփորձի hովանալ։ Կարող եք շարունակել օգտագործել սարքը, սակայն հնարավոր է, որ այն ավելի դանդաղ աշխատի:\n\nՀովանալուց հետո սարքը կաշխատի կանոնավոր կերպով։"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Ձեր պլանշետը ավտոմատ կերպով կփորձի hովանալ։ Կարող եք շարունակել օգտագործել պլանշետը, սակայն հնարավոր է, որ այն ավելի դանդաղ աշխատի:\n\nՀովանալուց հետո պլանշետը կաշխատի կանոնավոր կերպով։"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Մատնահետքերի սկաները սնուցման կոճակի վրա է։ Այն հարթ կոճակ է ձայնի ուժգնության ուռուցիկ կոճակի կողքին՝ պլանշետի կողային մասում։"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Մատնահետքերի սկաները սնուցման կոճակի վրա է։ Այն հարթ կոճակ է ձայնի ուժգնության ուռուցիկ կոճակի կողքին՝ սարքի կողային մասում։"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Մատնահետքերի սկաները սնուցման կոճակի վրա է։ Այն հարթ կոճակ է ձայնի ուժգնության ուռուցիկ կոճակի կողքին՝ հեռախոսի կողային մասում։"</string>
diff --git a/packages/SystemUI/res-product/values-in/strings.xml b/packages/SystemUI/res-product/values-in/strings.xml
index af1895c..2224810 100644
--- a/packages/SystemUI/res-product/values-in/strings.xml
+++ b/packages/SystemUI/res-product/values-in/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Anda telah <xliff:g id="NUMBER">%d</xliff:g> kali berupaya membuka kunci ponsel dengan tidak benar. Profil kerja akan dihapus, sehingga semua data profil akan dihapus."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Anda telah <xliff:g id="NUMBER_0">%1$d</xliff:g> kali salah menggambar pola pembuka kunci. Setelah <xliff:g id="NUMBER_1">%2$d</xliff:g> lagi upaya yang tidak berhasil, Anda akan diminta membuka kunci tablet menggunakan akun email.\n\n Coba lagi dalam <xliff:g id="NUMBER_2">%3$d</xliff:g> detik."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Anda telah <xliff:g id="NUMBER_0">%1$d</xliff:g> kali salah menggambar pola pembuka kunci. Setelah <xliff:g id="NUMBER_1">%2$d</xliff:g> lagi upaya yang tidak berhasil, Anda akan diminta membuka kunci ponsel menggunakan akun email.\n\n Coba lagi dalam <xliff:g id="NUMBER_2">%3$d</xliff:g> detik."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Ponsel dimatikan karena panas"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Perangkat dimatikan karena panas"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet dimatikan karena panas"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Ponsel kini berfungsi normal.\nKetuk untuk info selengkapnya"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Perangkat kini berfungsi normal.\nKetuk untuk info selengkapnya"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Tablet kini berfungsi normal.\nKetuk untuk info selengkapnya"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Ponsel terlalu panas, jadi dimatikan agar mendingin. Ponsel kini berfungsi normal.\n\nPonsel dapat menjadi terlalu panas jika Anda:\n	• Menggunakan aplikasi yang menggunakan sumber daya secara intensif (seperti aplikasi game, video, atau navigasi)\n	• Mendownload atau mengupload file besar\n	• Menggunakan ponsel dalam suhu tinggi"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Perangkat terlalu panas, jadi dimatikan agar mendingin. Perangkat kini berfungsi normal.\n\nPerangkat dapat menjadi terlalu panas jika Anda:\n	• Menggunakan aplikasi yang menggunakan sumber daya secara intensif (seperti aplikasi game, video, atau navigasi)\n	• Mendownload atau mengupload file besar\n	• Menggunakan perangkat dalam suhu tinggi"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tablet terlalu panas, jadi dimatikan agar mendingin. Tablet kini berfungsi normal.\n\nTablet dapat menjadi terlalu panas jika Anda:\n	• Menggunakan aplikasi yang menggunakan sumber daya secara intensif (seperti aplikasi game, video, atau navigasi)\n	• Mendownload atau mengupload file besar\n	• Menggunakan tablet dalam suhu tinggi"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Ponsel menjadi panas"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Perangkat menjadi panas"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet menjadi panas"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Beberapa fitur dibatasi saat ponsel mendingin.\nKetuk untuk info selengkapnya"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Beberapa fitur dibatasi saat perangkat mendingin.\nKetuk untuk info selengkapnya"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Beberapa fitur dibatasi saat tablet mendingin.\nKetuk untuk info selengkapnya"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Ponsel akan otomatis mencoba mendingin. Anda tetap dapat menggunakan ponsel, tetapi mungkin berjalan lebih lambat.\n\nSetelah dingin, ponsel akan berjalan seperti biasa."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Perangkat akan otomatis mencoba mendingin. Anda tetap dapat menggunakan perangkat, tetapi mungkin berjalan lebih lambat.\n\nSetelah dingin, perangkat akan berjalan seperti biasa."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Tablet akan otomatis mencoba mendingin. Anda tetap dapat menggunakan tablet, tetapi mungkin berjalan lebih lambat.\n\nSetelah dingin, tablet akan berjalan seperti biasa."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Sensor sidik jari ada di tombol daya. Tombol ini berupa tombol datar di samping tombol volume timbul di tepi tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Sensor sidik jari ada di tombol daya. Tombol ini berupa tombol datar di samping tombol volume timbul di tepi perangkat."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Sensor sidik jari ada di tombol daya. Tombol ini berupa tombol datar di samping tombol volume timbul di tepi ponsel."</string>
diff --git a/packages/SystemUI/res-product/values-is/strings.xml b/packages/SystemUI/res-product/values-is/strings.xml
index 1e42255..0f3f71c 100644
--- a/packages/SystemUI/res-product/values-is/strings.xml
+++ b/packages/SystemUI/res-product/values-is/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Þú hefur gert <xliff:g id="NUMBER">%d</xliff:g> árangurslausar tilraunir til að opna símann. Vinnusniðið verður fjarlægt, með þeim afleiðingum að öllum gögnum þess verður eytt."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Þú hefur teiknað rangt opnunarmynstur <xliff:g id="NUMBER_0">%1$d</xliff:g> sinnum. Eftir <xliff:g id="NUMBER_1">%2$d</xliff:g> árangurslausar tilraunir í viðbót verðurðu beðin(n) um að opna spjaldtölvuna með tölvupóstreikningi.\n\n Reyndu aftur eftir <xliff:g id="NUMBER_2">%3$d</xliff:g> sekúndur."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Þú hefur teiknað rangt opnunarmynstur <xliff:g id="NUMBER_0">%1$d</xliff:g> sinnum. Eftir <xliff:g id="NUMBER_1">%2$d</xliff:g> árangurslausar tilraunir í viðbót verðurðu beðin(n) um að opna símann með tölvupóstreikningi.\n\n Reyndu aftur eftir <xliff:g id="NUMBER_2">%3$d</xliff:g> sekúndur."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Slökkt var á símanum vegna hita"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Slökkt var á tækinu vegna hita"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Slökkt var á spjaldtölvunni vegna hita"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Síminn virkar nú eins og venjulega.\nÝttu til að fá frekari upplýsingar"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Tækið virkar nú eins og venjulega.\nÝttu til að fá frekari upplýsingar"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Spjaldtölvan virkar nú eins og venjulega.\nÝttu til að fá frekari upplýsingar"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Síminn varð of heitur og því var slökkt á honum til að kæla hann. Síminn virkar núna sem skyldi.\n\nSíminn getur orðið of heitur ef þú:\n	• Notar plássfrek forrit (t.d. leikja-, myndbands- eða leiðsagnarforrit\n	• Sækir eða hleður upp stórum skrám\n	• Notar símann í miklum hita"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Tækið varð of heitt og því var slökkt á því til að kæla það. Tækið virkar núna sem skyldi.\n\nTækið getur orðið of heitt ef þú:\n	• Notar plássfrek forrit (t.d. leikja-, myndbands- eða leiðsagnarforrit\n	• Sækir eða hleður upp stórum skrám\n	• Notar tækið í miklum hita"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Spjaldtölvan varð of heit og því var slökkt á henni til að kæla hana. Spjaldtölvan virkar núna sem skyldi.\n\nSpjaldtölvan getur orðið of heit ef þú:\n	• Notar plássfrek forrit (t.d. leikja-, myndbands- eða leiðsagnarforrit\n	• Sækir eða hleður upp stórum skrám\n	• Notar spjaldtölvuna í miklum hita"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Síminn er að hitna"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Tækið er að hitna"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Spjaldtölvan er að hitna"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Sumir eiginleikar eru takmarkaðir á meðan síminn kælir sig.\nÝttu til að fá frekari upplýsingar"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Sumir eiginleikar eru takmarkaðir á meðan tækið kælir sig.\nÝttu til að fá frekari upplýsingar"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Sumir eiginleikar eru takmarkaðir á meðan spjaldtölvan kælir sig.\nÝttu til að fá frekari upplýsingar"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Síminn reynir að kæla sig sjálfkrafa. Þú getur áfram notað símann en hann gæti verið hægvirkari.\n\nÞegar síminn hefur kælt sig mun hann virka eðlilega."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Tækið reynir að kæla sig sjálfkrafa. Þú getur áfram notað tækið en það gæti verið hægvirkara.\n\nÞegar tækið hefur kælt sig mun það virka eðlilega."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Spjaldtölvan reynir að kæla sig sjálfkrafa. Þú getur áfram notað spjaldtölvuna en hún gæti verið hægvirkari.\n\nÞegar spjaldtölvan hefur kælt sig mun hún virka eðlilega."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Fingrafaralesarinn er á aflrofanum. Það er flati hnappurinn við hliðina á upphleypta hljóðstyrkshnappnum á hlið spjaldtölvunnar."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Fingrafaralesarinn er á aflrofanum. Það er flati hnappurinn við hliðina á upphleypta hljóðstyrkshnappnum á hlið tækisins."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Fingrafaralesarinn er á aflrofanum. Það er flati hnappurinn við hliðina á upphleypta hljóðstyrkshnappnum á hlið símans."</string>
diff --git a/packages/SystemUI/res-product/values-it/strings.xml b/packages/SystemUI/res-product/values-it/strings.xml
index 982afb9..a9fd80b 100644
--- a/packages/SystemUI/res-product/values-it/strings.xml
+++ b/packages/SystemUI/res-product/values-it/strings.xml
@@ -40,9 +40,27 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Hai tentato di sbloccare il telefono senza riuscirci per <xliff:g id="NUMBER">%d</xliff:g> volte. Il profilo di lavoro verrà rimosso e verranno quindi eliminati tutti i dati associati."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"<xliff:g id="NUMBER_0">%1$d</xliff:g> tentativi errati di inserimento della sequenza di sblocco. Dopo altri <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativi falliti, ti verrà chiesto di sbloccare il tablet con un account email.\n\n Riprova tra <xliff:g id="NUMBER_2">%3$d</xliff:g> secondi."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"<xliff:g id="NUMBER_0">%1$d</xliff:g> tentativi errati di inserimento della sequenza di sblocco. Dopo altri <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativi falliti, ti verrà chiesto di sbloccare il telefono con un account email.\n\n Riprova tra <xliff:g id="NUMBER_2">%3$d</xliff:g> secondi."</string>
-    <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Il sensore di impronte digitali si trova sul tasto di accensione. Si tratta del tasto piatto accanto al tasto del volume in rilievo sulla parte laterale del tablet."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Lo smartphone si è spento per il calore"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Il dispositivo si è spento per il calore"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Il tablet si è spento per il calore"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Ora lo smartphone funziona normalmente.\nTocca per maggiori informazioni"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Ora il dispositivo funziona normalmente.\nTocca per maggiori informazioni"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Ora il tablet funziona normalmente.\nTocca per maggiori informazioni"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Lo smartphone era surriscaldato e si è spento per raffreddarsi. Ora funziona normalmente.\n\nLo smartphone può surriscaldarsi se:\n	• Utilizzi app che consumano molte risorse (ad esempio app di navigazione, giochi o video)\n	• Scarichi o carichi grandi file\n	• Lo utilizzi in presenza di alte temperature"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Il dispositivo era surriscaldato e si è spento per raffreddarsi. Ora funziona normalmente.\n\nIl dispositivo può surriscaldarsi se:\n	• Utilizzi app che consumano molte risorse (ad esempio app di navigazione, giochi o video)\n	• Scarichi o carichi grandi file\n	• Lo utilizzi in presenza di alte temperature"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Il tablet era surriscaldato e si è spento per raffreddarsi. Ora funziona normalmente.\n\nIl tablet può surriscaldarsi se:\n	• Utilizzi app che consumano molte risorse (ad esempio app di navigazione, giochi o video)\n	• Scarichi o carichi grandi file\n	• Lo utilizzi in presenza di alte temperature"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Surriscaldamento smartphone"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Surriscaldamento dispositivo"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Surriscaldamento tablet"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Alcune funzionalità sono state limitate durante il raffreddamento dello smartphone.\nTocca per maggiori informazioni"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Alcune funzionalità sono state limitate durante il raffreddamento del dispositivo.\nTocca per maggiori informazioni"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Alcune funzionalità sono state limitate durante il raffreddamento del tablet.\nTocca per maggiori informazioni"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Lo smartphone cercherà automaticamente di raffreddarsi. Puoi comunque usarlo, ma potrebbe essere più lento.\n\nUna volta raffreddato, lo smartphone funzionerà normalmente."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Il dispositivo cercherà automaticamente di raffreddarsi. Puoi comunque usarlo, ma potrebbe essere più lento.\n\nUna volta raffreddato, il dispositivo funzionerà normalmente."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Il tablet cercherà automaticamente di raffreddarsi. Puoi comunque usarlo, ma potrebbe essere più lento.\n\nUna volta raffreddato, il tablet funzionerà normalmente."</string>
+    <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Il sensore di impronte digitali si trova sul tasto di accensione. Si tratta del tasto piatto accanto al tasto del volume in rilievo sul bordo del tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Il sensore di impronte digitali si trova sul tasto di accensione. Si tratta del tasto piatto accanto al tasto del volume in rilievo sulla parte laterale del dispositivo."</string>
-    <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Il sensore di impronte digitali si trova sul tasto di accensione. Si tratta del tasto piatto accanto al tasto del volume in rilievo sulla parte laterale del telefono."</string>
+    <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Il sensore di impronte digitali si trova sul tasto di accensione. Si tratta del tasto piatto accanto al tasto del volume in rilievo sulla parte laterale dello smartphone."</string>
     <string name="global_action_lock_message" product="default" msgid="7092460751050168771">"Sblocca il telefono per visualizzare altre opzioni"</string>
     <string name="global_action_lock_message" product="tablet" msgid="1024230056230539493">"Sblocca il tablet per visualizzare altre opzioni"</string>
     <string name="global_action_lock_message" product="device" msgid="3165224897120346096">"Sblocca il dispositivo per visualizzare altre opzioni"</string>
diff --git a/packages/SystemUI/res-product/values-iw/strings.xml b/packages/SystemUI/res-product/values-iw/strings.xml
index 71779f30..9365dd9 100644
--- a/packages/SystemUI/res-product/values-iw/strings.xml
+++ b/packages/SystemUI/res-product/values-iw/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"ניסית לבטל את נעילת הטלפון <xliff:g id="NUMBER">%d</xliff:g> פעמים. פרופיל העבודה יוסר וכל נתוני הפרופיל יימחקו."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"שרטטת קו ביטול נעילה שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, ,תישלח אליך בקשה לבטל את נעילת הטאבלט באמצעות חשבון אימייל‏.\n\n יש לנסות שוב בעוד <xliff:g id="NUMBER_2">%3$d</xliff:g> שניות."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"שרטטת קו ביטול נעילה שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, תישלח אליך בקשה לבטל את נעילת הטלפון באמצעות חשבון אימייל‏.\n\n יש לנסות שוב בעוד <xliff:g id="NUMBER_2">%3$d</xliff:g> שניות."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"הטלפון כבה בגלל התחממות"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"המכשיר כבה בגלל התחממות"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"הטאבלט כבה בגלל התחממות"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"הטלפון פועל כרגיל עכשיו.\nיש להקיש כדי להציג מידע נוסף"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"המכשיר פועל כרגיל עכשיו.\nיש להקיש כדי להציג מידע נוסף"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"הטאבלט פועל כרגיל עכשיו.\nיש להקיש כדי להציג מידע נוסף"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"הטלפון שלך התחמם יותר מדי וכבה כדי להתקרר. הטלפון פועל כרגיל עכשיו.\n\nייתכן שהטלפון יתחמם יותר מדי אם:\n	• משתמשים באפליקציות עתירות משאבים (כמו משחקים, אפליקציות וידאו או אפליקציות ניווט).\n	• מורידים או מעלים קבצים גדולים.\n	• משתמשים בטלפון בסביבה עם טמפרטורות גבוהות."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"המכשיר שלך התחמם יותר מדי וכבה כדי להתקרר. המכשיר פועל כרגיל עכשיו.\n\nייתכן שהמכשיר יתחמם יותר מדי אם:\n	• משתמשים באפליקציות עתירות משאבים (כמו משחקים, אפליקציות וידאו או אפליקציות ניווט).\n	• מורידים או מעלים קבצים גדולים.\n	• משתמשים במכשיר בסביבה עם טמפרטורות גבוהות."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"הטאבלט שלך התחמם יותר מדי וכבה כדי להתקרר. הטאבלט פועל כרגיל עכשיו.\n\nייתכן שהטאבלט יתחמם יותר מדי אם:\n	• משתמשים באפליקציות עתירות משאבים (כמו משחקים, אפליקציות וידאו או אפליקציות ניווט).\n	• מורידים או מעלים קבצים גדולים.\n	• משתמשים בטאבלט בסביבה עם טמפרטורות גבוהות."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"הטלפון מתחמם"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"המכשיר מתחמם"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"הטאבלט מתחמם"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"חלק מהתכונות מוגבלות כל עוד הטלפון מתקרר.\nיש להקיש כדי להציג מידע נוסף"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"חלק מהתכונות מוגבלות כל עוד המכשיר מתקרר.\nיש להקיש כדי להציג מידע נוסף"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"חלק מהתכונות מוגבלות כל עוד הטאבלט מתקרר.\nיש להקיש כדי להציג מידע נוסף"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"קירור הטלפון ייעשה באופן אוטומטי. אפשר עדיין להשתמש בטלפון, אבל ייתכן שהוא יפעל לאט יותר.\n\nהטלפון יחזור לפעול כרגיל לאחר שיתקרר."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"קירור המכשיר ייעשה באופן אוטומטי. אפשר עדיין להשתמש במכשיר אבל ייתכן שהוא יפעל לאט יותר.\n\nהמכשיר יחזור לפעול כרגיל לאחר שיתקרר."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"קירור הטאבלט ייעשה באופן אוטומטי. אפשר עדיין להשתמש בטאבלט אבל ייתכן שהוא יפעל לאט יותר.\n\nהטאבלט יחזור לפעול כרגיל לאחר שיתקרר."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"חיישן טביעות האצבע נמצא על לחצן ההפעלה. זה הלחצן השטוח ליד הלחצן הבולט של עוצמת הקול בשולי הטאבלט."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"חיישן טביעות האצבע נמצא על לחצן ההפעלה. זה הלחצן השטוח ליד הלחצן הבולט של עוצמת הקול בשולי המכשיר."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"חיישן טביעות האצבע נמצא על לחצן ההפעלה. זה הלחצן השטוח ליד הלחצן הבולט של עוצמת הקול בשולי הטלפון."</string>
diff --git a/packages/SystemUI/res-product/values-ja/strings.xml b/packages/SystemUI/res-product/values-ja/strings.xml
index 68f030b..1fc8775 100644
--- a/packages/SystemUI/res-product/values-ja/strings.xml
+++ b/packages/SystemUI/res-product/values-ja/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"スマートフォンのロック解除に <xliff:g id="NUMBER">%d</xliff:g> 回失敗しました。仕事用プロファイルは削除され、プロファイルのデータはすべて消去されます。"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"ロック解除パターンの入力を <xliff:g id="NUMBER_0">%1$d</xliff:g> 回間違えました。あと <xliff:g id="NUMBER_1">%2$d</xliff:g> 回間違えると、タブレットのロック解除にメール アカウントが必要になります。\n\n<xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後にもう一度お試しください。"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"ロック解除パターンの入力を <xliff:g id="NUMBER_0">%1$d</xliff:g> 回間違えました。あと <xliff:g id="NUMBER_1">%2$d</xliff:g> 回間違えると、スマートフォンのロック解除にメール アカウントが必要になります。\n\n<xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後にもう一度お試しください。"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"温度上昇により電源が OFF になりました"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"温度上昇により電源が OFF になりました"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"温度上昇により電源が OFF になりました"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"お使いのスマートフォンは現在、正常に動作しています。\nタップして詳細を表示"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"お使いのデバイスは現在、正常に動作しています。\nタップして詳細を表示"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"お使いのタブレットは現在、正常に動作しています。\nタップして詳細を表示"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"スマートフォンが熱くなりすぎたため電源が OFF になりました。現在は正常に動作しています。\n\nスマートフォンは以下の場合に熱くなる場合があります。\n	• リソースを集中的に使用する機能やアプリ(ゲームアプリ、動画アプリ、ナビアプリなど)を使用\n	• サイズの大きいファイルをダウンロードまたはアップロード\n	• 高温の場所で使用"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"デバイスが熱くなりすぎたため電源が OFF になりました。現在は正常に動作しています。\n\nデバイスは以下の場合に熱くなる場合があります。\n	• リソースを集中的に使用する機能やアプリ(ゲームアプリ、動画アプリ、ナビアプリなど)を使用\n	• サイズの大きいファイルをダウンロードまたはアップロード\n	• 高温の場所で使用"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"タブレットが熱くなりすぎたため電源が OFF になりました。現在は正常に動作しています。\n\nタブレットは以下の場合に熱くなる場合があります。\n	• リソースを集中的に使用する機能やアプリ(ゲームアプリ、動画アプリ、ナビアプリなど)を使用\n	• サイズの大きいファイルをダウンロードまたはアップロード\n	• 高温の場所で使用"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"スマートフォンの温度が上昇中"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"デバイスの温度が上昇中"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"タブレットの温度が上昇中"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"スマートフォンのクールダウン中は一部の機能が制限されます。\nタップして詳細を表示"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"デバイスのクールダウン中は一部の機能が制限されます。\nタップして詳細を表示"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"タブレットのクールダウン中は一部の機能が制限されます。\nタップして詳細を表示"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"スマートフォンは自動的にクールダウンを行います。その間もスマートフォンを使用できますが、動作が遅くなる可能性があります。\n\nクールダウンが完了すると、通常どおり動作します。"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"デバイスは自動的にクールダウンを行います。その間もデバイスを使用できますが、動作が遅くなる可能性があります。\n\nクールダウンが完了すると、通常どおり動作します。"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"タブレットは自動的にクールダウンを行います。その間もタブレットを使用できますが、動作が遅くなる可能性があります。\n\nクールダウンが完了すると、通常どおり動作します。"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"指紋認証センサーは電源ボタンに内蔵されています。タブレット側面のボタンのうち、音量ボタンの横にあるフラットなボタンです。"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"指紋認証センサーは電源ボタンに内蔵されています。デバイス側面のボタンのうち、音量ボタンの横にあるフラットなボタンです。"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"指紋認証センサーは電源ボタンに内蔵されています。スマートフォン側面のボタンのうち、音量ボタンの横にあるフラットなボタンです。"</string>
diff --git a/packages/SystemUI/res-product/values-ka/strings.xml b/packages/SystemUI/res-product/values-ka/strings.xml
index 34fc24c..f007c4a 100644
--- a/packages/SystemUI/res-product/values-ka/strings.xml
+++ b/packages/SystemUI/res-product/values-ka/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"თქვენ არასწორად ცადეთ ტელეფონის განბლოკვა <xliff:g id="NUMBER">%d</xliff:g>-ჯერ. ამის გამო, სამსახურის პროფილი ამოიშლება, რაც პროფილის ყველა მონაცემის წაშლას გამოიწვევს."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"თქვენ არასწორად დახატეთ თქვენი განბლოკვის ნიმუში <xliff:g id="NUMBER_0">%1$d</xliff:g>-ჯერ. კიდევ <xliff:g id="NUMBER_1">%2$d</xliff:g> წარუმატებელი მცდელობის შემდეგ მოგთხოვთ, ტაბლეტი თქვენი ელფოსტის ანგარიშის მეშვეობით განბლოკოთ.\n\n ცადეთ ხელახლა <xliff:g id="NUMBER_2">%3$d</xliff:g> წამში."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"თქვენ არასწორად დახატეთ თქვენი განბლოკვის ნიმუში <xliff:g id="NUMBER_0">%1$d</xliff:g>-ჯერ. კიდევ <xliff:g id="NUMBER_1">%2$d</xliff:g> წარუმატებელი მცდელობის შემდეგ მოგთხოვთ, ტელეფონი თქვენი ელფოსტის ანგარიშის მეშვეობით განბლოკოთ.\n\n ცადეთ ხელახლა <xliff:g id="NUMBER_2">%3$d</xliff:g> წამში."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"ტელეფონი გამოირთო გაცხელების გამო"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"მოწყობილობა გამოირთო გაცხელების გამო"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"ტაბლეტი გამოირთო გაცხელების გამო"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"თქვენი ტელეფონი უკვე ნორმალურად მუშაობს.\nშეეხეთ დამატებითი ინფორმაციის მისაღებად"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"თქვენი მოწყობილობა უკვე ნორმალურად მუშაობს.\nშეეხეთ დამატებითი ინფორმაციის მისაღებად"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"თქვენი ტაბლეტი უკვე ნორმალურად მუშაობს.\nშეეხეთ დამატებითი ინფორმაციის მისაღებად"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"თქვენი ტელეფონი გამოირთო გასაგრილებლად, რადგან ის მეტისმეტად გაცხელდა. ახლა ის ჩვეულებრივად მუშაობს.\n\nტელეფონის გაცხელების მიზეზებია:\n	• რესურსტევადი აპების გამოყენება (მაგ.: სათამაშო, ვიდეო ან ნავიგაციის აპების)\n	• დიდი ფაილების ჩამოტვირთვა ან ატვირთვა\n	• მოწყობილობის გამოყენება მაღალი ტემპერატურისას"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"თქვენი მოწყობილობა გამოირთო გასაგრილებლად, რადგან ის მეტისმეტად გაცხელდა. ახლა ის ჩვეულებრივად მუშაობს.\n\nმოწყობილობის გაცხელების მიზეზებია:\n	• რესურსტევადი აპების გამოყენება (მაგ.: სათამაშო, ვიდეო ან ნავიგაციის აპების)\n	• დიდი ფაილების ჩამოტვირთვა ან ატვირთვა\n	• მოწყობილობის გამოყენება მაღალი ტემპერატურისას"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"თქვენი ტაბლეტი გამოირთო გასაგრილებლად, რადგან ის მეტისმეტად გაცხელდა. ახლა ის ჩვეულებრივად მუშაობს.\n\nტაბლეტის გაცხელების მიზეზებია:\n	• რესურსტევადი აპების გამოყენება (მაგ.: სათამაშო, ვიდეო ან ნავიგაციის აპების)\n	• დიდი ფაილების ჩამოტვირთვა ან ატვირთვა\n	• მოწყობილობის გამოყენება მაღალი ტემპერატურისას"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"ტელეფონი ცხელდება"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"მოწყობილობა ცხელდება"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"ტაბლეტი ცხელდება"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"ზოგიერთი ფუნქცია შეზღუდული იქნება, სანამ ტელეფონი გაგრილდება.\nშეეხეთ დამატებითი ინფორმაციის მისაღებად"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"ზოგიერთი ფუნქცია შეზღუდული იქნება, სანამ მოწყობილობა გაგრილდება.\nშეეხეთ დამატებითი ინფორმაციის მისაღებად"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"ზოგიერთი ფუნქცია შეზღუდული იქნება, სანამ ტაბლეტი გაგრილდება.\nშეეხეთ დამატებითი ინფორმაციის მისაღებად"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"თქვენი ტელეფონი გაგრილებას ავტომატურად შეეცდება. შეგიძლიათ გააგრძელოთ მისით სარგებლობა, თუმცა ტელეფონმა შეიძლება უფრო ნელა იმუშაოს.\n\nგაგრილების შემდგომ ის ჩვეულებრივად იმუშავებს."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"თქვენი მოწყობილობა გაგრილებას ავტომატურად შეეცდება. შეგიძლიათ გააგრძელოთ მისით სარგებლობა, თუმცა ტელეფონმა შეიძლება უფრო ნელა იმუშაოს.\n\nგაგრილების შემდგომ ის ჩვეულებრივად იმუშავებს."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"თქვენი ტაბლეტი გაგრილებას ავტომატურად შეეცდება. შეგიძლიათ გააგრძელოთ თქვენი ტაბლეტით სარგებლობა, თუმცა მან შეიძლება უფრო ნელა იმუშაოს.\n\nგაგრილების შემდგომ ის ჩვეულებრივად იმუშავებს."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"თითის ანაბეჭდის სენსორი ჩართვის ღილაკზეა. ეს არის ბრტყელი ღილაკი ხმის აწევის ღილაკის გვერდით, ტაბლეტის კიდეში."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"თითის ანაბეჭდის სენსორი ჩართვის ღილაკზეა. ეს არის ბრტყელი ღილაკი ხმის აწევის ღილაკის გვერდით, მოწყობილობის კიდეში."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"თითის ანაბეჭდის სენსორი ჩართვის ღილაკზეა. ეს არის ბრტყელი ღილაკი ხმის აწევის ღილაკის გვერდით, ტელეფონის კიდეში."</string>
diff --git a/packages/SystemUI/res-product/values-kk/strings.xml b/packages/SystemUI/res-product/values-kk/strings.xml
index 73b637e..83b2351 100644
--- a/packages/SystemUI/res-product/values-kk/strings.xml
+++ b/packages/SystemUI/res-product/values-kk/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Телефон құлпын ашуға <xliff:g id="NUMBER">%d</xliff:g> рет сәтсіз әрекет жасалды. Жұмыс профилі өшіріліп, оның бүкіл деректері жойылады."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Құлыпты ашу өрнегі <xliff:g id="NUMBER_0">%1$d</xliff:g> рет қате енгізілді. <xliff:g id="NUMBER_1">%2$d</xliff:g> әрекет қалды. Одан кейін планшетті аккаунт арқылы ашу сұралады. \n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> секундтан кейін әрекетті қайталаңыз."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Құлыпты ашу өрнегі <xliff:g id="NUMBER_0">%1$d</xliff:g> рет қате енгізілді. <xliff:g id="NUMBER_1">%2$d</xliff:g> әрекет қалды. Одан кейін телефонды аккаунт арқылы ашу сұралады. \n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> секундтан кейін әрекетті қайталаңыз."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Телефон қызып кеткендіктен өшірілді"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Құрылғы қызып кеткендіктен өшірілді"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Планшет қызып кеткендіктен өшірілді"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Телефоныңыз қалыпты жұмыс істеп тұр.\nТолық ақпарат алу үшін түртіңіз."</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Құрылғыңыз қалыпты жұмыс істеп тұр.\nТолық ақпарат алу үшін түртіңіз."</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Планшетіңіз қалыпты жұмыс істеп тұр.\nТолық ақпарат алу үшін түртіңіз."</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Телефоныңыз қатты қызып кеткендіктен өшірілген еді. Ал қазір қалыпты жұмыс істеп тұр.\n\nОл мына жағдайларда қызып кетуі мүмкін:\n	• ресурстарды көп көлемде қажет ететін қолданбаларды (ойын, бейне немесе навигация қолданбалары) пайдалану\n	• үлкен көлемді файлдарды жүктеу немесе жүктеп салу;\n	• телефонды жоғары температурада пайдалану."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Құрылғыңыз қатты қызып кеткендіктен өшірілген еді. Ал қазір қалыпты жұмыс істеп тұр.\n\nОл мына жағдайларда қызып кетуі мүмкін:\n	• ресурстарды көп көлемде қажет ететін қолданбаларды (ойын, бейне немесе навигация қолданбалары) пайдалану;\n	• үлкен көлемді файлдарды жүктеу немесе жүктеп салу;\n	• құрылғыны жоғары температурада пайдалану."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Планшетіңіз қатты қызып кеткендіктен өшірілген еді. Ал қазір қалыпты жұмыс істеп тұр.\n\nОл мына жағдайларда қызып кетуі мүмкін:\n	• ресурстарды көп көлемде қажет ететін қолданбаларды (ойын, бейне немесе навигация қолданбалары) пайдалану;\n	• үлкен көлемді файлдарды жүктеу немесе жүктеп салу;\n	• планшетті жоғары температурада пайдалану."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Телефон қызып бара жатыр"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Құрылғы қызып бара жатыр"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Планшет қызып бара жатыр"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Телефон толық суығанға дейін, кейбір функцияның жұмысы шектеледі.\nТолық ақпарат үшін түртіңіз."</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Құрылғы толық суығанға дейін, кейбір функцияның жұмысы шектеледі.\nТолық ақпарат үшін түртіңіз."</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Планшет толық суығанға дейін, кейбір функцияның жұмысы шектеледі.\nТолық ақпарат үшін түртіңіз."</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Телефон автоматты түрде суи бастайды. Оны пайдалана бере аласыз, бірақ ол баяуырақ жұмыс істеуі мүмкін.\n\nСуығаннан кейін, оның жұмысы қалпына келеді."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Құрылғы автоматты түрде суи бастайды. Оны пайдалана бере аласыз, бірақ ол баяуырақ жұмыс істеуі мүмкін.\n\nСуығаннан кейін, оның жұмысы қалпына келеді."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Планшет автоматты түрде суи бастайды. Оны пайдалана бере аласыз, бірақ ол баяуырақ жұмыс істеуі мүмкін.\n\nСуығаннан кейін, оның жұмысы қалпына келеді."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Саусақ ізін оқу сканері қуат түймесінде орналасқан. Ол – планшет шетіндегі шығыңқы дыбыс деңгейі түймесінің жанында орналасқан жалпақ түйме."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Саусақ ізін оқу сканері қуат түймесінде орналасқан. Ол – құрылғы шетіндегі шығыңқы дыбыс деңгейі түймесінің жанында орналасқан жалпақ түйме."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Саусақ ізін оқу сканері қуат түймесінде орналасқан. Ол – телефон шетіндегі шығыңқы дыбыс деңгейі түймесінің жанында орналасқан жалпақ түйме."</string>
diff --git a/packages/SystemUI/res-product/values-km/strings.xml b/packages/SystemUI/res-product/values-km/strings.xml
index 611ee94..34189d4 100644
--- a/packages/SystemUI/res-product/values-km/strings.xml
+++ b/packages/SystemUI/res-product/values-km/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"អ្នក​បាន​ព្យាយាម​ដោះសោ​ទូរសព្ទ​នេះ​មិន​ត្រឹមត្រូវ​ចំនួន <xliff:g id="NUMBER">%d</xliff:g> ដង​ហើយ។ កម្រង​ព័ត៌មាន​ការងារ​នេះ​នឹង​ត្រូវ​បាន​លុប ហើយ​វា​នឹង​លុប​ទិន្នន័យ​កម្រង​ព័ត៌មាន​ទាំងអស់។"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"អ្នក​បាន​គូរ​លំនាំ​ដោះ​សោ​របស់​អ្នក​មិន​ត្រឹមត្រូវ​ចំនួន <xliff:g id="NUMBER_0">%1$d</xliff:g> ដង​ហើយ។ បន្ទាប់ពីមានការ​ព្យាយាម​ដោះ​សោ​ចំនួន <xliff:g id="NUMBER_1">%2$d</xliff:g> ដងទៀត​មិន​ទទួល​បាន​ជោគជ័យ អ្នក​នឹង​ត្រូវ​បាន​ស្នើ​ឱ្យ​ដោះ​សោ​ថេប្លេត​របស់​អ្នក​ ដោយ​ប្រើ​គណនី​អ៊ីមែល។\n\n សូមព្យាយាម​ម្ដង​ទៀត​ក្នុង​រយៈ​ពេល <xliff:g id="NUMBER_2">%3$d</xliff:g> វិនាទី​ទៀត។"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"អ្នកបានគូរលំនាំ​ដោះសោ​របស់អ្នក​មិន​ត្រឹមត្រូវចំនួន <xliff:g id="NUMBER_0">%1$d</xliff:g> ដងហើយ។ បន្ទាប់ពីមាន​ការព្យាយាម​ដោះសោចំនួន <xliff:g id="NUMBER_1">%2$d</xliff:g> ដងទៀតមិនទទួលបាន​ជោគជ័យ អ្នកនឹង​ត្រូវបាន​ស្នើឱ្យ​ដោះសោ​ទូរសព្ទ​របស់​អ្នកដោយ​ប្រើគណនី​អ៊ីមែល។\n\n សូមព្យាយាម​ម្ដងទៀតក្នុង​រយៈពេល <xliff:g id="NUMBER_2">%3$d</xliff:g> វិនាទីទៀត។"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"ទូរសព្ទបានបិទដោយសារកម្ដៅ"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"ឧបករណ៍បានបិទដោយសារកម្ដៅ"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"ថេប្លេតបានបិទដោយសារកម្ដៅ"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"ឥឡូវនេះ ទូរសព្ទ​របស់អ្នក​កំពុងដំណើរការ​ជាធម្មតា។\nសូមចុច​ដើម្បីទទួលបាន​ព័ត៌មានបន្ថែម"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"ឥឡូវនេះ ឧបករណ៍​របស់អ្នក​កំពុងដំណើរការ​ជាធម្មតា។\nសូមចុច​ដើម្បីទទួលបាន​ព័ត៌មានបន្ថែម"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"ឥឡូវនេះ ថេប្លេត​របស់អ្នក​កំពុងដំណើរការ​ជាធម្មតា។\nសូមចុច​ដើម្បីទទួលបាន​ព័ត៌មានបន្ថែម"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"ទូរសព្ទ​របស់អ្នក​ក្តៅពេក ដូច្នេះ​វាបាន​បិទ​ដើម្បី​បន្ថយ​កម្តៅ។ ឥឡូវនេះ ​ទូរសព្ទ​របស់អ្នក​កំពុង​ដំណើរការ​ធម្មតា។\n\nទូរសព្ទ​របស់អ្នក​អាចនឹង​ឡើង​កម្តៅ​ខ្លាំងជ្រុល ប្រសិន​បើអ្នក៖\n	• ប្រើប្រាស់​កម្មវិធី​ដែល​ប្រើប្រាស់ទិន្នន័យច្រើនក្នុងរយៈពេលខ្លី (ដូចជាហ្គេម វីដេអូ ឬកម្មវិធីរុករក)\n	• ទាញយក ឬ​បង្ហោះ​ឯកសារដែលមានទំហំធំ\n	• ប្រើប្រាស់​ទូរសព្ទ​របស់អ្នក​នៅកន្លែង​មានសីតុណ្ហភាព​ខ្ពស់"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"ឧបករណ៍​របស់អ្នក​ក្តៅពេក ដូច្នេះ​វាបាន​បិទ​ដើម្បី​បន្ថយ​កម្តៅ។ ឥឡូវនេះ ​ឧបករណ៍​របស់អ្នក​កំពុង​ដំណើរការ​ធម្មតា។\n\nឧបករណ៍​របស់អ្នក​អាចនឹង​ឡើង​កម្តៅ​ខ្លាំងជ្រុល ប្រសិន​បើអ្នក៖\n	• ប្រើប្រាស់​កម្មវិធី​ដែល​ប្រើប្រាស់ទិន្នន័យច្រើនក្នុងរយៈពេលខ្លី (ដូចជាហ្គេម វីដេអូ ឬកម្មវិធីរុករក)\n	• ទាញយក ឬ​បង្ហោះ​ឯកសារដែលមានទំហំធំ\n	• ប្រើប្រាស់​ឧបករណ៍​របស់អ្នក​នៅកន្លែង​មានសីតុណ្ហភាព​ខ្ពស់"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"ថេប្លេត​របស់អ្នក​ក្តៅពេក ដូច្នេះ​វាបាន​បិទ​ដើម្បី​បន្ថយ​កម្តៅ។ ឥឡូវនេះ ​ថេប្លេតរបស់អ្នក​កំពុង​ដំណើរការ​ធម្មតា។\n\nថេប្លេត​របស់អ្នក​អាចនឹង​ឡើង​កម្តៅ​ខ្លាំងជ្រុល ប្រសិន​បើអ្នក៖\n	• ប្រើប្រាស់​កម្មវិធី​ដែល​ប្រើប្រាស់ទិន្នន័យច្រើនក្នុងរយៈពេលខ្លី (ដូចជាហ្គេម វីដេអូ ឬកម្មវិធីរុករក)\n	• ទាញយក ឬ​បង្ហោះ​ឯកសារដែលមានទំហំធំ\n	• ប្រើប្រាស់​ថេប្លេត​របស់អ្នក​នៅកន្លែង​មានសីតុណ្ហភាព​ខ្ពស់"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"ទូរសព្ទ​កំពុងកើនកម្តៅ"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"ឧបករណ៍​កំពុងកើនកម្ដៅ"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"ថេប្លេត​កំពុងកើនកម្តៅ"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"មុខងារ​មួយចំនួន​នឹងមិនអាច​ប្រើបានពេញលេញ​នោះទេ ខណៈពេល​ដែលទូរសព្ទ​កំពុងបញ្ចុះកម្ដៅ។\nសូមចុច​ដើម្បីទទួលបាន​ព័ត៌មានបន្ថែម"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"មុខងារមួយចំនួន​នឹងមិនអាចប្រើបានពេញលេញនោះទេ ខណៈពេលដែល​ឧបករណ៍​កំពុងបញ្ចុះកម្ដៅ។\nសូមចុចដើម្បីទទួលបាន​ព័ត៌មានបន្ថែម"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"មុខងារ​មួយចំនួន​នឹងមិនអាច​ប្រើបានពេញលេញ​នោះទេ ខណៈពេល​ដែលថេប្លេត​កំពុងបញ្ចុះកម្ដៅ។\nសូមចុច​ដើម្បីទទួលបាន​ព័ត៌មានបន្ថែម"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"ទូរសព្ទ​របស់អ្នក​នឹង​ព្យាយាម​បញ្ចុះ​កម្តៅ​ដោយ​ស្វ័យប្រវត្តិ។ អ្នក​នៅតែ​អាច​ប្រើ​ទូរសព្ទ​របស់អ្នក​បាន​ដដែល​ ប៉ុន្តែ​ទូរសព្ទនេះ​អាចដំណើរការ​យឺតជាងមុន។\n\nនៅពេល​ទូរសព្ទ​របស់អ្នកចុះ​ត្រជាក់​​ហើយ ទូរសព្ទនេះ​នឹង​ដំណើរការធម្មតា។"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"ឧបករណ៍របស់អ្នក​នឹងព្យាយាមបញ្ចុះកម្ដៅ​ដោយស្វ័យប្រវត្តិ។ អ្នកនៅតែ​អាចប្រើឧបករណ៍​របស់អ្នកបានដដែល ប៉ុន្តែឧបករណ៍នេះ​អាចដំណើរការ​យឺតជាងមុន។\n\nនៅពេលឧបករណ៍​របស់អ្នកចុះ​ត្រជាក់​ហើយ ឧបករណ៍នេះនឹង​ដំណើរការ​ធម្មតា។"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"ថេប្លេតរបស់អ្នក​នឹងព្យាយាមបញ្ចុះកម្ដៅ​ដោយស្វ័យប្រវត្តិ។ អ្នកនៅតែ​អាចប្រើថេប្លេត​របស់អ្នកបានដដែល ប៉ុន្តែថេប្លេតនេះ​អាចដំណើរការ​យឺតជាងមុន។\n\nនៅពេលថេប្លេត​របស់អ្នកចុះត្រជាក់ហើយ ថេប្លេតនេះនឹង​ដំណើរការ​ធម្មតា។"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"សេនស័រចាប់ស្នាមម្រាមដៃ​ស្ថិតនៅលើប៊ូតុង​ថាមពល។ វាជាប៊ូតុងរាបស្មើនៅជាប់នឹងប៊ូតុងកម្រិតសំឡេងដែលលៀនចេញមកនៅលើគែមថេប្លេត។"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"សេនស័រចាប់ស្នាមម្រាមដៃ​ស្ថិតនៅលើប៊ូតុង​ថាមពល។ វាជាប៊ូតុងរាបស្មើនៅជាប់នឹងប៊ូតុងកម្រិតសំឡេងដែលលៀនចេញមកនៅលើគែមឧបករណ៍។"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"សេនស័រចាប់ស្នាមម្រាមដៃ​ស្ថិតនៅលើប៊ូតុង​ថាមពល។ វាជាប៊ូតុងរាបស្មើនៅជាប់នឹងប៊ូតុងកម្រិតសំឡេងដែលលៀនចេញមកនៅលើគែមទូរសព្ទ។"</string>
diff --git a/packages/SystemUI/res-product/values-kn/strings.xml b/packages/SystemUI/res-product/values-kn/strings.xml
index 371c36a..4532d83 100644
--- a/packages/SystemUI/res-product/values-kn/strings.xml
+++ b/packages/SystemUI/res-product/values-kn/strings.xml
@@ -40,9 +40,27 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"ಫೋನ್ ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಲು ನೀವು <xliff:g id="NUMBER">%d</xliff:g> ಬಾರಿ ತಪ್ಪಾಗಿ ಪ್ರಯತ್ನಿಸಿದ್ದೀರಿ. ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ, ಇದು ಪ್ರೊಫೈಲ್‌ನ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"ನಿಮ್ಮ ಅನ್‍‍ಲಾಕ್ ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ನೀವು <xliff:g id="NUMBER_0">%1$d</xliff:g> ಬಾರಿ ತಪ್ಪಾಗಿ ಡ್ರಾ ಮಾಡಿರುವಿರಿ. <xliff:g id="NUMBER_1">%2$d</xliff:g> ಕ್ಕೂ ಹೆಚ್ಚಿನ ವಿಫಲ ಪ್ರಯತ್ನಗಳ ಬಳಿಕ, ನಿಮ್ಮ ಇಮೇಲ್ ಖಾತೆಯನ್ನು ಬಳಸಿ ಟ್ಯಾಬ್ಲೆಟ್ ಅನ್‌ಲಾಕ್ ಮಾಡಲು ನಿಮ್ಮನ್ನು ಕೇಳಲಾಗುತ್ತದೆ.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> ಸೆಕೆಂಡ್‌ಗಳಲ್ಲಿ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"ನಿಮ್ಮ ಅನ್‍‍ಲಾಕ್ ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ನೀವು <xliff:g id="NUMBER_0">%1$d</xliff:g> ಬಾರಿ ತಪ್ಪಾಗಿ ಡ್ರಾ ಮಾಡಿರುವಿರಿ. <xliff:g id="NUMBER_1">%2$d</xliff:g> ಕ್ಕೂ ಹೆಚ್ಚಿನ ವಿಫಲ ಪ್ರಯತ್ನಗಳ ಬಳಿಕ, ಇಮೇಲ್ ಖಾತೆಯನ್ನು ಬಳಸಿ ನಿಮ್ಮ ಫೋನ್ ಅನ್‌ಲಾಕ್ ಮಾಡಲು ನಿಮ್ಮನ್ನು ಕೇಳಲಾಗುತ್ತದೆ.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> ಸೆಕೆಂಡ್‌ಗಳಲ್ಲಿ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್ ಪವರ್ ಬಟನ್‌ನಲ್ಲಿದೆ. ಇದು ಟ್ಯಾಬ್ಲೆಟ್‌ನ ಅಂಚಿನಲ್ಲಿರುವ ಎತ್ತರಿಸಿದ ವಾಲ್ಯೂಮ್ ಬಟನ್‌ನ ಪಕ್ಕದಲ್ಲಿರುವ ಫ್ಲಾಟ್ ಬಟನ್ ಆಗಿದೆ."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"ಫೋನ್ ಬಿಸಿಯಾದ ಕಾರಣದಿಂದಾಗಿ ಆಫ್ ಆಗಿದೆ"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"ಸಾಧನ ಬಿಸಿಯಾದ ಕಾರಣದಿಂದಾಗಿ ಆಫ್ ಆಗಿದೆ"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"ಟ್ಯಾಬ್ಲೆಟ್‌‌ ಬಿಸಿಯಾದ ಕಾರಣ ಆಫ್ ಆಗಿದೆ"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"ನಿಮ್ಮ ಫೋನ್ ಈಗ ಎಂದಿನಂತೆ ರನ್ ಆಗುತ್ತಿದೆ.\nಇನ್ನಷ್ಟು ಮಾಹಿತಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"ನಿಮ್ಮ ಸಾಧನವು ಈಗ ಎಂದಿನಂತೆ ರನ್ ಆಗುತ್ತಿದೆ.\nಇನ್ನಷ್ಟು ಮಾಹಿತಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌‌ ಈಗ ಎಂದಿನಂತೆ ರನ್ ಆಗುತ್ತಿದೆ.\nಇನ್ನಷ್ಟು ಮಾಹಿತಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"ನಿಮ್ಮ ಫೋನ್ ತುಂಬಾ ಬಿಸಿಯಾದ ಕಾರಣ ಅದನ್ನು ತಣ್ಣಗಾಗಿಸಲು ಆಫ್ ಮಾಡಲಾಗಿದೆ. ನಿಮ್ಮ ಫೋನ್ ಈಗ ಸಾಮಾನ್ಯ ರೀತಿಯಲ್ಲಿ ರನ್ ಆಗುತ್ತಿದೆ.\n\nನಿಮ್ಮ ಫೋನ್ ಈ ಕೆಳಗಿನ ಕಾರಣಗಳಿಂದ ತುಂಬಾ ಬಿಸಿಯಾಗಬಹುದು:\n	• ಹೆಚ್ಚು ಸಂಪನ್ಮೂಲಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳುವ ಆ್ಯಪ್‌ಗಳ ಬಳಕೆ (ಉದಾಹರಣೆಗೆ ಗೇಮಿಂಗ್, ವೀಡಿಯೊ ಅಥವಾ ನ್ಯಾವಿಗೇಶನ್ ಆ್ಯಪ್‌ಗಳು)\n	• ದೊಡ್ಡ ಫೈಲ್‌ಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಅಥವಾ ಅಪ್‌ಲೋಡ್ ಮಾಡುವುದು\n	• ಅಧಿಕ ತಾಪಮಾನದಲ್ಲಿ ಫೋನ್‌ ಬಳಸುವುದು"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"ನಿಮ್ಮ ಸಾಧನವು ತುಂಬಾ ಬಿಸಿಯಾದ ಕಾರಣ ಅದನ್ನು ತಣ್ಣಗಾಗಿಸಲು ಆಫ್ ಮಾಡಲಾಗಿದೆ. ನಿಮ್ಮ ಸಾಧನವು ಈಗ ಸಾಮಾನ್ಯ ರೀತಿಯಲ್ಲಿ ರನ್ ಆಗುತ್ತಿದೆ.\n\nನಿಮ್ಮ ಸಾಧನವು ಈ ಕೆಳಗಿನ ಕಾರಣಗಳಿಂದ ತುಂಬಾ ಬಿಸಿಯಾಗಬಹುದು:\n	• ಹೆಚ್ಚು ಸಂಪನ್ಮೂಲಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳುವ ಆ್ಯಪ್‌ಗಳ ಬಳಕೆ (ಉದಾಹರಣೆಗೆ ಗೇಮಿಂಗ್, ವೀಡಿಯೊ ಅಥವಾ ನ್ಯಾವಿಗೇಶನ್ ಆ್ಯಪ್‌ಗಳು)\n	• ದೊಡ್ಡ ಫೈಲ್‌ಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಅಥವಾ ಅಪ್‌ಲೋಡ್ ಮಾಡುವುದು\n	• ಅಧಿಕ ತಾಪಮಾನದಲ್ಲಿ ಸಾಧನವನ್ನು ಬಳಸುವುದು"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌‌ ತುಂಬಾ ಬಿಸಿಯಾದ ಕಾರಣ ಅದನ್ನು ತಣ್ಣಗಾಗಿಸಲು ಆಫ್ ಮಾಡಲಾಗಿದೆ. ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌‌ ಈಗ ಸಾಮಾನ್ಯ ರೀತಿಯಲ್ಲಿ ರನ್ ಆಗುತ್ತಿದೆ.\n\nನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌‌ ಈ ಕೆಳಗಿನ ಕಾರಣಗಳಿಂದ ತುಂಬಾ ಬಿಸಿಯಾಗಬಹುದು:\n	• ಹೆಚ್ಚು ಸಂಪನ್ಮೂಲಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳುವ ಆ್ಯಪ್‌ಗಳ ಬಳಕೆ (ಉದಾಹರಣೆಗೆ ಗೇಮಿಂಗ್, ವೀಡಿಯೊ ಅಥವಾ ನ್ಯಾವಿಗೇಶನ್ ಆ್ಯಪ್‌ಗಳು)\n	• ದೊಡ್ಡ ಫೈಲ್‌ಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಅಥವಾ ಅಪ್‌ಲೋಡ್ ಮಾಡುವುದು\n	• ಅಧಿಕ ತಾಪಮಾನದಲ್ಲಿ ಟ್ಯಾಬ್ಲೆಟ್‌‌ ಬಳಸುವುದು"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"ಫೋನ್ ಬಿಸಿಯಾಗುತ್ತಿದೆ"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"ಸಾಧನವು ಬಿಸಿಯಾಗುತ್ತಿದೆ"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"ಟ್ಯಾಬ್ಲೆಟ್‌‌ ಬಿಸಿಯಾಗುತ್ತಿದೆ"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"ಫೋನ್ ತಣ್ಣಗಾಗುವವರೆಗೂ ಕೆಲವು ಫೀಚರ್‌ಗಳನ್ನು ಸೀಮಿತಗೊಳಿಸಲಾಗುತ್ತದೆ.\nಇನ್ನಷ್ಟು ಮಾಹಿತಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"ಸಾಧನವು ತಣ್ಣಗಾಗುವವರೆಗೂ ಕೆಲವು ಫೀಚರ್‌ಗಳು ಸೀಮಿತಗೊಳಿಸಲಾಗುತ್ತದೆ.\nಇನ್ನಷ್ಟು ಮಾಹಿತಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"ಟ್ಯಾಬ್ಲೆಟ್‌‌ ತಣ್ಣಗಾಗುವವರೆಗೂ ಕೆಲವು ಫೀಚರ್‌ಗಳನ್ನು ಸೀಮಿತಗೊಳಿಸಲಾಗುತ್ತದೆ.\nಇನ್ನಷ್ಟು ಮಾಹಿತಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"ನಿಮ್ಮ ಫೋನ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತಣ್ಣಗಾಗಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ. ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೀವು ಈಗಲೂ ಬಳಸಬಹುದು, ಆದರೆ ಅದು ನಿಧಾನವಾಗಿ ರನ್‌ ಆಗಬಹುದು.\n\nಫೋನ್ ತಣ್ಣಗಾದ ನಂತರ ಇದು ಸಾಮಾನ್ಯ ರೀತಿಯಲ್ಲಿ ರನ್‌ ಆಗುತ್ತದೆ."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"ನಿಮ್ಮ ಸಾಧನವು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತಣ್ಣಗಾಗಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ. ನಿಮ್ಮ ಸಾಧನವನ್ನು ನೀವು ಈಗಲೂ ಬಳಸಬಹುದು, ಆದರೆ ಅದು ನಿಧಾನವಾಗಿ ರನ್‌ ಆಗಬಹುದು.\n\nಸಾಧನವು ತಣ್ಣಗಾದ ನಂತರ, ಇದು ಸಾಮಾನ್ಯ ರೀತಿಯಲ್ಲಿ ರನ್‌ ಆಗುತ್ತದೆ."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌‌ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತಣ್ಣಗಾಗಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ. ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌‌ ಅನ್ನು ನೀವು ಈಗಲೂ ಬಳಸಬಹುದು, ಆದರೆ ಅದು ನಿಧಾನವಾಗಿ ರನ್‌ ಆಗಬಹುದು.\n\nಟ್ಯಾಬ್ಲೆಟ್‌‌ ತಣ್ಣಗಾದ ನಂತರ, ಇದು ಸಾಮಾನ್ಯ ರೀತಿಯಲ್ಲಿ ರನ್‌ ಆಗುತ್ತದೆ."</string>
+    <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್ ಪವರ್ ಬಟನ್‌ನಲ್ಲಿದೆ. ಇದು ಟ್ಯಾಬ್ಲೆಟ್‌ನ ಅಂಚಿನಲ್ಲಿರುವ ಎತ್ತರಿಸಿದ ವಾಲ್ಯೂಮ್ ಬಟನ್‌ನ ಪಕ್ಕದಲ್ಲಿರುವ ಫ್ಲ್ಯಾಟ್ ಬಟನ್ ಆಗಿದೆ."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್ ಪವರ್ ಬಟನ್‌ನಲ್ಲಿದೆ. ಇದು ಸಾಧನದ ಅಂಚಿನಲ್ಲಿರುವ ಎತ್ತರಿಸಿದ ವಾಲ್ಯೂಮ್ ಬಟನ್‌ನ ಪಕ್ಕದಲ್ಲಿರುವ ಫ್ಲಾಟ್ ಬಟನ್ ಆಗಿದೆ."</string>
-    <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್ ಪವರ್ ಬಟನ್‌ನಲ್ಲಿದೆ. ಇದು ಫೋನ್‌ನ ಅಂಚಿನಲ್ಲಿರುವ ಎತ್ತರಿಸಿದ ವಾಲ್ಯೂಮ್ ಬಟನ್‌ನ ಪಕ್ಕದಲ್ಲಿರುವ ಫ್ಲಾಟ್ ಬಟನ್ ಆಗಿದೆ."</string>
+    <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್ ಪವರ್ ಬಟನ್‌ನಲ್ಲಿದೆ. ಇದು ಫೋನ್‌ನ ಅಂಚಿನಲ್ಲಿರುವ ಎತ್ತರಿಸಿದ ವಾಲ್ಯೂಮ್ ಬಟನ್‌ನ ಪಕ್ಕದಲ್ಲಿರುವ ಫ್ಲ್ಯಾಟ್ ಬಟನ್ ಆಗಿದೆ."</string>
     <string name="global_action_lock_message" product="default" msgid="7092460751050168771">"ಹೆಚ್ಚಿನ ಆಯ್ಕೆಗಳಿಗಾಗಿ ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಿ"</string>
     <string name="global_action_lock_message" product="tablet" msgid="1024230056230539493">"ಹೆಚ್ಚಿನ ಆಯ್ಕೆಗಳಿಗಾಗಿ ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಿ"</string>
     <string name="global_action_lock_message" product="device" msgid="3165224897120346096">"ಹೆಚ್ಚಿನ ಆಯ್ಕೆಗಳಿಗಾಗಿ ನಿಮ್ಮ ಸಾಧನವನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಿ"</string>
diff --git a/packages/SystemUI/res-product/values-ko/strings.xml b/packages/SystemUI/res-product/values-ko/strings.xml
index b262452..cb4a620 100644
--- a/packages/SystemUI/res-product/values-ko/strings.xml
+++ b/packages/SystemUI/res-product/values-ko/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"휴대전화 잠금 해제에 <xliff:g id="NUMBER">%d</xliff:g>번 실패했습니다. 직장 프로필과 모든 프로필 데이터가 삭제됩니다."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"잠금 해제 패턴을 <xliff:g id="NUMBER_0">%1$d</xliff:g>회 잘못 그렸습니다. <xliff:g id="NUMBER_1">%2$d</xliff:g>회 더 실패하면 이메일 계정을 사용하여 태블릿을 잠금 해제해야 합니다.\n\n<xliff:g id="NUMBER_2">%3$d</xliff:g>초 후에 다시 시도해 주세요."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"잠금 해제 패턴을 <xliff:g id="NUMBER_0">%1$d</xliff:g>회 잘못 그렸습니다. <xliff:g id="NUMBER_1">%2$d</xliff:g>회 더 실패하면 이메일 계정을 사용하여 휴대전화를 잠금 해제해야 합니다.\n\n<xliff:g id="NUMBER_2">%3$d</xliff:g>초 후에 다시 시도해 주세요."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"발열로 인해 휴대전화가 꺼짐"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"발열로 인해 기기가 꺼짐"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"발열로 인해 태블릿이 꺼짐"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"이제 휴대전화가 정상적으로 작동합니다.\n자세히 알아보려면 탭하세요."</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"이제 기기가 정상적으로 작동합니다.\n자세히 알아보려면 탭하세요."</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"이제 태블릿이 정상적으로 작동합니다.\n자세히 알아보려면 탭하세요."</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"휴대전화가 과열되어 온도를 낮추기 위해 전원이 종료되었습니다. 지금은 휴대전화가 정상적으로 작동합니다.\n\n휴대전화가 과열되는 이유는 다음과 같습니다.\n	• 리소스를 많이 사용하는 앱 사용(예: 게임, 동영상 또는 내비게이션 앱)\n	• 대용량 파일을 다운로드 또는 업로드\n	• 온도가 높은 곳에서 휴대전화 사용"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"기기가 과열되어 온도를 낮추기 위해 전원이 종료되었습니다. 지금은 기기가 정상적으로 작동합니다.\n\n기기가 과열되는 이유는 다음과 같습니다.\n	• 리소스를 많이 사용하는 앱 사용(예: 게임, 동영상 또는 내비게이션 앱)\n	• 대용량 파일을 다운로드 또는 업로드\n	• 온도가 높은 곳에서 기기 사용"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"태블릿이 과열되어 온도를 낮추기 위해 전원이 종료되었습니다. 지금은 태블릿이 정상적으로 작동합니다.\n\n태블릿이 과열되는 이유는 다음과 같습니다.\n	• 리소스를 많이 사용하는 앱 사용(예: 게임, 동영상 또는 내비게이션 앱)\n	• 대용량 파일을 다운로드 또는 업로드\n	• 온도가 높은 곳에서 태블릿 사용"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"휴대전화 온도가 높음"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"기기 온도가 높음"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"태블릿 온도가 높음"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"휴대전화 온도를 낮추는 동안 일부 기능이 제한됩니다.\n자세히 알아보려면 탭하세요."</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"기기 온도를 낮추는 동안 일부 기능이 제한됩니다.\n자세히 알아보려면 탭하세요."</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"태블릿 온도를 낮추는 동안 일부 기능이 제한됩니다.\n자세히 알아보려면 탭하세요."</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"휴대전화가 자동으로 온도를 낮추려고 시도합니다. 휴대전화를 계속 사용할 수는 있지만 작동이 느려질 수도 있습니다.\n\n휴대전화 온도가 낮아지면 정상적으로 작동됩니다."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"기기가 자동으로 온도를 낮추려고 시도합니다. 기기를 계속 사용할 수는 있지만 작동이 느려질 수도 있습니다.\n\n기기 온도가 낮아지면 정상적으로 작동됩니다."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"태블릿이 자동으로 온도를 낮추려고 시도합니다. 태블릿을 계속 사용할 수 있지만 작동이 느려질 수도 있습니다.\n\n태블릿 온도가 낮아지면 정상적으로 작동합니다."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"지문 센서는 전원 버튼에 있습니다. 태블릿 옆면에 있는 튀어나온 볼륨 버튼 옆의 평평한 버튼입니다."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"지문 센서는 전원 버튼에 있습니다. 기기 옆면에 있는 튀어나온 볼륨 버튼 옆의 평평한 버튼입니다."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"지문 센서는 전원 버튼에 있습니다. 휴대전화 옆면에 있는 튀어나온 볼륨 버튼 옆의 평평한 버튼입니다."</string>
diff --git a/packages/SystemUI/res-product/values-ky/strings.xml b/packages/SystemUI/res-product/values-ky/strings.xml
index 0f6acfc..8bd066f0 100644
--- a/packages/SystemUI/res-product/values-ky/strings.xml
+++ b/packages/SystemUI/res-product/values-ky/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Телефондун кулпусун <xliff:g id="NUMBER">%d</xliff:g> жолу туура эмес ачууга аракет жасадыңыз. Жумуш профили өчүрүлүп, андагы бардык нерселер өчүрүлөт."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Графикалык ачкычты <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес тарттыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин планшетиңизди бөгөттөн электрондук почтаңыз аркылуу чыгаруу талап кылынат.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> секунддан кийин кайра аракеттениңиз."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Графикалык ачкычты <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес тарттыңыз. Дагы <xliff:g id="NUMBER_1">%2$d</xliff:g> ийгиликсиз аракеттен кийин телефонуңузду бөгөттөн электрондук почтаңыз аркылуу чыгаруу талап кылынат.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> секунддан кийин кайра аракеттениңиз."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Телефон ысыгандыктан өчүрүлдү"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Түзмөк ысыгандыктан өчүрүлдү"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Планшет ысыгандыктан өчүрүлдү"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Телефонуңуз кадимкидей иштеп жатат.\nКеңири маалымат алуу үчүн таптап коюңуз"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Түзмөгүңүз кадимкидей иштеп жатат.\nКеңири маалымат алуу үчүн таптап коюңуз"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Планшетиңиз кадимкидей иштеп жатат.\nКеңири маалымат алуу үчүн таптап коюңуз"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Телефонуңуз өтө ысып кеткендиктен, аны муздатуу үчүн өчүрүлдү. Эми телефонуңуз кадимкидей иштеп жатат.\n\nТелефонуңуз төмөнкү шарттарда ысып кетиши мүмкүн:\n	• Ашыкча ресурс короткон колдонмолорду (оюндар, видео же чабыттоо колдонмолору) пайдалансаңыз \n	• Ири көлөмдөгү файлдарды жүктөп алсаңыз же берсеңиз\n	• Телефонуңузду жогорку температураларда пайдалансаңыз"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Түзмөгүңүз өтө ысып кеткендиктен, аны муздатуу үчүн өчүрүлдү. Эми түзмөгүңүз кадимкидей иштеп жатат.\n\nТүзмөгүңүз төмөнкү шарттарда ысып кетиши мүмкүн:\n	• Ашыкча ресурс короткон колдонмолорду (оюндар, видео же чабыттоо колдонмолору) пайдалансаңыз \n	• Ири көлөмдөгү файлдарды жүктөп алсаңыз же берсеңиз\n	• Түзмөгүңүздү жогорку температураларда пайдалансаңыз"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Планшетиңиз өтө ысып кеткендиктен, аны муздатуу үчүн өчүрүлдү. Эми планшетиңиз кадимкидей иштеп жатат.\n\nПланшетиңиз төмөнкү шарттарда ысып кетиши мүмкүн:\n	• Ашыкча ресурс короткон колдонмолорду (оюндар, видео же чабыттоо колдонмолору) пайдалансаңыз \n	• Ири көлөмдөгү файлдарды жүктөп алсаңыз же берсеңиз\n	• Планшетиңизди жогорку температураларда пайдалансаңыз"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Телефон ысып баратат"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Түзмөк ысып баратат"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Планшет ысып баратат"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Телефон сууганча айрым элементтердин иши чектелген.\nКеңири маалымат алуу үчүн таптап коюңуз"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Түзмөк сууганча айрым элементтердин иши чектелген.\nКеңири маалымат алуу үчүн таптап коюңуз"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Планшет сууганча айрым элементтердин иши чектелген.\nКеңири маалымат алуу үчүн таптап коюңуз"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Телефонуңуз автоматтык түрдө сууйт. Аны колдоно берсеңиз болот, бирок ал жайыраак иштеп калат.\n\nТелефонуңуз суугандан кийин адаттагыдай эле иштеп баштайт."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Түзмөгүңүз автоматтык түрдө сууйт. Аны колдоно берсеңиз болот, бирок ал жайыраак иштеп калат.\n\nТүзмөгүңүз суугандан кийин адаттагыдай эле иштеп баштайт."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Планшетиңиз автоматтык түрдө сууйт. Аны колдоно берсеңиз болот, бирок ал жайыраак иштеп калат.\n\nПланшетиңиз суугандан кийин адаттагыдай эле иштеп баштайт."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Манжа изинин сенсору кубат баскычында жайгашкан. Бул планшеттин четиндеги үндү катуулатуу/акырындатуу баскычынын (көтөрүлгөн) жанындагы жалпак баскыч."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Манжа изинин сенсору кубат баскычында жайгашкан. Бул түзмөктүн четиндеги үндү катуулатуу/акырындатуу баскычынын (көтөрүлгөн) жанындагы жалпак баскыч."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Манжа изинин сенсору кубат баскычында жайгашкан. Бул телефондун четиндеги үндү катуулатуу/акырындатуу баскычынын (көтөрүлгөн) жанындагы жалпак баскыч."</string>
diff --git a/packages/SystemUI/res-product/values-lo/strings.xml b/packages/SystemUI/res-product/values-lo/strings.xml
index fee741d..958cf32 100644
--- a/packages/SystemUI/res-product/values-lo/strings.xml
+++ b/packages/SystemUI/res-product/values-lo/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"ທ່ານພະຍາຍາມປົດລັອກໂທລະສັບຜິດ <xliff:g id="NUMBER">%d</xliff:g> ເທື່ອແລ້ວ. ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຈະຖືກລຶບອອກ, ເຊິ່ງຈະລຶບຂໍ້ມູນໂປຣໄຟລ໌ທັງໝົດອອກນຳ."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"ທ່ານແຕ້ມຮູບແບບປົດລັອກຜິດ <xliff:g id="NUMBER_0">%1$d</xliff:g> ເທື່ອແລ້ວ. ຫຼັງຈາກແຕ້ມຜິດອີກ <xliff:g id="NUMBER_1">%2$d</xliff:g> ເທື່ອ, ທ່ານຈະຖືກຖາມໃຫ້ປົດລັອກແທັບເລັດຂອງທ່ານດ້ວຍການເຂົ້າສູ່ລະບົບໂດຍໃຊ້ອີເມວຂອງທ່ານ.\n\n ກະລຸນາລອງໃໝ່ໃນອີກ <xliff:g id="NUMBER_2">%3$d</xliff:g> ວິນາທີ."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"ທ່ານແຕ້ມຮູບແບບປົດລັອກຜິດ <xliff:g id="NUMBER_0">%1$d</xliff:g> ເທື່ອແລ້ວ. ຫຼັງຈາກແຕ້ມຜິດອີກ <xliff:g id="NUMBER_1">%2$d</xliff:g> ເທື່ອ, ທ່ານຈະຖືກຖາມໃຫ້ປົດໂທລະສັບຂອງທ່ານດ້ວຍການເຂົ້າສູ່ລະບົບໂດຍໃຊ້ບັນຊີອີເມວ.\n\n ກະລຸນາລອງໃໝ່ໃນອີກ <xliff:g id="NUMBER_2">%3$d</xliff:g> ວິນາທີ."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"ໂທລະສັບປິດເຄື່ອງເນື່ອງຈາກຮ້ອນເກີນໄປ"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"ອຸປະກອນປິດເຄື່ອງເນື່ອງຈາກຮ້ອນເກີນໄປ"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"ແທັບເລັດປິດເຄື່ອງເນື່ອງຈາກຮ້ອນເກີນໄປ"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"ຕອນນີ້ໂທລະສັບຂອງທ່ານເຮັດວຽກຕາມປົກກະຕິແລ້ວ.\nແຕະເພື່ອເບິ່ງຂໍ້ມູນເພີ່ມເຕີມ"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"ຕອນນີ້ອຸປະກອນຂອງທ່ານເຮັດວຽກຕາມປົກກະຕິແລ້ວ.\nແຕະເພື່ອເບິ່ງຂໍ້ມູນເພີ່ມເຕີມ"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"ຕອນນີ້ແທັບເລັດຂອງທ່ານເຮັດວຽກຕາມປົກກະຕິແລ້ວ.\nແຕະເພື່ອເບິ່ງຂໍ້ມູນເພີ່ມເຕີມ"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"ໂທລະສັບຂອງທ່ານຮ້ອນເກີນໄປ, ດັ່ງນັ້ນຈຶ່ງຖືກປິດເຄື່ອງເພື່ອໃຫ້ເຢັນລົງ. ຕອນນີ້ໂທລະສັບຂອງທ່ານເຮັດວຽກຕາມປົກກະຕິແລ້ວ.\n\nໂທລະສັບຂອງທ່ານອາດຮ້ອນເກີນໄປ ຫາກທ່ານ:\n	• ໃຊ້ແອັບທີ່ກິນຊັບພະຍາກອນຫຼາຍ (ເຊັ່ນ: ເກມ, ວິດີໂອ ຫຼື ແອັບການນຳທາງ)\n	• ດາວໂຫຼດ ຫຼື ອັບໂຫຼດໄຟລ໌ຂະໜາດໃຫຍ່\n	• ໃຊ້ໂທລະສັບຂອງທ່ານໃນອຸນຫະພູມທີ່ສູງ"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"ອຸປະກອນຂອງທ່ານຮ້ອນເກີນໄປ, ດັ່ງນັ້ນຈຶ່ງຖືກປິດເຄື່ອງເພື່ອໃຫ້ເຢັນລົງ. ຕອນນີ້ອຸປະກອນຂອງທ່ານເຮັດວຽກຕາມປົກກະຕິແລ້ວ.\n\nອຸປະກອນຂອງທ່ານອາດຮ້ອນເກີນໄປ ຫາກທ່ານ:\n	• ໃຊ້ແອັບທີ່ກິນຊັບພະຍາກອນຫຼາຍ (ເຊັ່ນ: ເກມ, ວິດີໂອ ຫຼື ແອັບການນຳທາງ)\n	• ດາວໂຫຼດ ຫຼື ອັບໂຫຼດໄຟລ໌ຂະໜາດໃຫຍ່\n	• ໃຊ້ອຸປະກອນຂອງທ່ານໃນອຸນຫະພູມທີ່ສູງ"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"ແທັບເລັດຂອງທ່ານຮ້ອນເກີນໄປ, ດັ່ງນັ້ນຈຶ່ງຖືກປິດເຄື່ອງເພື່ອໃຫ້ເຢັນລົງ. ຕອນນີ້ແທັບເລັດຂອງທ່ານເຮັດວຽກຕາມປົກກະຕິແລ້ວ.\n\nແທັບເລັດຂອງທ່ານອາດຮ້ອນເກີນໄປ ຫາກທ່ານ:\n	• ໃຊ້ແອັບທີ່ກິນຊັບພະຍາກອນຫຼາຍ (ເຊັ່ນ: ເກມ, ວິດີໂອ ຫຼື ແອັບການນຳທາງ)\n	• ດາວໂຫຼດ ຫຼື ອັບໂຫຼດໄຟລ໌ຂະໜາດໃຫຍ່\n	• ໃຊ້ແທັບເລັດຂອງທ່ານໃນອຸນຫະພູມທີ່ສູງ"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"ໂທລະສັບເລີ່ມຮ້ອນຂຶ້ນ"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"ອຸປະກອນເລີ່ມຮ້ອນຂຶ້ນ"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"ແທັບເລັດເລີ່ມຮ້ອນຂຶ້ນ"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"ຄຸນສົມບັດບາງຢ່າງອາດໃຊ້ໄດ້ແບບຈຳກັດໃນລະຫວ່າງທີ່ໂທລະສັບເຢັນລົງ.\nແຕະເພື່ອເບິ່ງຂໍ້ມູນເພີ່ມເຕີມ"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"ຄຸນສົມບັດບາງຢ່າງອາດໃຊ້ໄດ້ແບບຈຳກັດໃນລະຫວ່າງທີ່ອຸປະກອນເຢັນລົງ.\nແຕະເພື່ອເບິ່ງຂໍ້ມູນເພີ່ມເຕີມ"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"ຄຸນສົມບັດບາງຢ່າງອາດໃຊ້ໄດ້ແບບຈຳກັດໃນລະຫວ່າງທີ່ແທັບເລັດເຢັນລົງ.\nແຕະເພື່ອເບິ່ງຂໍ້ມູນເພີ່ມເຕີມ"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"ໂທລະສັບຂອງທ່ານຈະພະຍາຍາມຫຼຸດອຸນຫະພູມລົງໂດຍອັດຕະໂນມັດ. ທ່ານຍັງສາມາດໃຊ້ໂທລະສັບຂອງທ່ານໄດ້ຢູ່, ແຕ່ໂທລະສັບອາດເຮັດວຽກຊ້າລົງ.\n\nໂທລະສັບຂອງທ່ານຈະກັບມາເຮັດວຽກຕາມປົກກະຕິເມື່ອເຢັນລົງແລ້ວ."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"ອຸປະກອນຂອງທ່ານຈະພະຍາຍາມເຮັດໃຫ້ເຢັນລົງໂດຍອັດຕະໂນມັດ. ທ່ານຍັງສາມາດໃຊ້ອຸປະກອນຂອງທ່ານໄດ້ຢູ່, ແຕ່ອຸປະກອນອາດເຮັດວຽກຊ້າລົງ.\n\nອຸປະກອນຂອງທ່ານຈະກັບມາເຮັດວຽກຕາມປົກກະຕິເມື່ອເຢັນລົງແລ້ວ."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"ແທັບເລັດຂອງທ່ານຈະພະຍາຍາມເຮັດໃຫ້ເຢັນລົງໂດຍອັດຕະໂນມັດ. ທ່ານຍັງສາມາດໃຊ້ແທັບເລັດຂອງທ່ານໄດ້ຢູ່, ແຕ່ແທັບເລັດອາດເຮັດວຽກຊ້າລົງ.\n\nແທັບເລັດຂອງທ່ານຈະກັບມາເຮັດວຽກຕາມປົກກະຕິເມື່ອເຢັນລົງແລ້ວ."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"ເຊັນເຊີລາຍນິ້ວມືແມ່ນຢູ່ປຸ່ມເປີດປິດ. ມັນເປັນປຸ່ມແປໆທີ່ຢູ່ຖັດຈາກປຸ່ມລະດັບສຽງຢູ່ຂອບຂອງແທັບເລັດ."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"ເຊັນເຊີລາຍນິ້ວມືແມ່ນຢູ່ປຸ່ມເປີດປິດ. ມັນເປັນປຸ່ມແປໆທີ່ຢູ່ຖັດຈາກປຸ່ມລະດັບສຽງຢູ່ຂອບຂອງອຸປະກອນ."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"ເຊັນເຊີລາຍນິ້ວມືແມ່ນຢູ່ປຸ່ມເປີດປິດ. ມັນເປັນປຸ່ມແປໆທີ່ຢູ່ຖັດຈາກປຸ່ມລະດັບສຽງຢູ່ຂອບຂອງໂທລະສັບ."</string>
diff --git a/packages/SystemUI/res-product/values-lt/strings.xml b/packages/SystemUI/res-product/values-lt/strings.xml
index 3035e4f..989e411 100644
--- a/packages/SystemUI/res-product/values-lt/strings.xml
+++ b/packages/SystemUI/res-product/values-lt/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"<xliff:g id="NUMBER">%d</xliff:g> kart. nesėkmingai bandėte atrakinti telefoną. Darbo profilis bus pašalintas ir visi profilio duomenys bus ištrinti."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"<xliff:g id="NUMBER_0">%1$d</xliff:g> kart. netinkamai nupiešėte atrakinimo piešinį. Po dar <xliff:g id="NUMBER_1">%2$d</xliff:g> nesėkm. band. būsite paprašyti atrakinti planšetinį kompiuterį naudodami el. pašto paskyrą.\n\n Bandykite dar kartą po <xliff:g id="NUMBER_2">%3$d</xliff:g> sek."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"<xliff:g id="NUMBER_0">%1$d</xliff:g> kart. netinkamai nupiešėte atrakinimo piešinį. Po dar <xliff:g id="NUMBER_1">%2$d</xliff:g> nesėkm. band. būsite paprašyti atrakinti telefoną naudodami el. pašto paskyrą.\n\n Bandykite dar kartą po <xliff:g id="NUMBER_2">%3$d</xliff:g> sek."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefonas išjungtas, nes įkaito"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Įrenginys išjungtas, nes įkaito"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Planšetinis komp. išjungtas, nes įkaito"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Telefonas dabar veikia įprastai.\nPalietę gausite daugiau informacijos"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Įrenginys dabar veikia įprastas.\nPalietę gausite daugiau informacijos"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Planšetinis kompiuteris dabar veikia įprastai.\nPalietę gausite daugiau informacijos"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefonas per daug įkaito, todėl buvo išjungtas, kad atvėstų. Dabar telefonas veikia įprastai.\n\nTelefonas gali per daug įkaisti, jei:\n	• esate įjungę daug išteklių naudojančių programų (pvz., žaidimų, vaizdo įrašų arba navigacijos programų);\n	• atsisiunčiate arba įkeliate didelius failus;\n	• telefoną naudojate esant aukštai temperatūrai."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Įrenginys per daug įkaito, todėl buvo išjungtas, kad atvėstų. Dabar įrenginys veikia įprastai.\n\nĮrenginys gali per daug įkaisti, jei:\n	• esate įjungę daug išteklių naudojančių programų (pvz., žaidimų, vaizdo įrašų arba navigacijos programų);\n	• atsisiunčiate arba įkeliate didelius failus;\n	• įrenginį naudojate esant aukštai temperatūrai."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Planšetinis kompiuteris per daug įkaito, todėl buvo išjungtas, kad atvėstų. Dabar planšetinis kompiuteris veikia įprastai.\n\nPlanšetinis kompiuteris gali per daug įkaisti, jei:\n	• esate įjungę daug išteklių naudojančių programų (pvz., žaidimų, vaizdo įrašų arba navigacijos programų);\n	• atsisiunčiate arba įkeliate didelius failus;\n	• planšetinį kompiuterį naudojate esant aukštai temperatūrai."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefonas kaista"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Įrenginys kaista"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Planšetinis kompiuteris kaista"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Kai kurios funkcijos gali neveikti, kol telefonas vėsta.\nPalietę gausite daugiau informacijos"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Kai kurios funkcijos gali neveikti, kol įrenginys vėsta.\nPalietę gausite daugiau informacijos"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Kai kurios funkcijos gali neveikti, kol planšetinis kompiuteris vėsta.\nPalietę gausite daugiau informacijos"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefonas automatiškai bandys atvėsti. Telefoną vis tiek galėsite naudoti, tačiau jis gali veikti lėčiau.\n\nKai telefonas atvės, jis veiks įprastai."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Įrenginys automatiškai bandys atvėsti. Įrenginį vis tiek galėsite naudoti, tačiau jis gali veikti lėčiau.\n\nKai įrenginys atvės, jis veiks įprastai."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Planšetinis kompiuteris automatiškai bandys atvėsti. Planšetinį kompiuterį vis tiek galėsite naudoti, tačiau jis gali veikti lėčiau.\n\nKai planšetinis kompiuteris atvės, jis veiks įprastai."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Piršto atspaudo jutiklis yra ant maitinimo mygtuko. Tai yra plokščias mygtukas šalia iškilusio garsumo mygtuko ant planšetinio kompiuterio krašto."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Piršto atspaudo jutiklis yra ant maitinimo mygtuko. Tai yra plokščias mygtukas šalia iškilusio garsumo mygtuko ant įrenginio krašto."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Piršto atspaudo jutiklis yra ant maitinimo mygtuko. Tai yra plokščias mygtukas šalia iškilusio garsumo mygtuko ant telefono krašto."</string>
diff --git a/packages/SystemUI/res-product/values-lv/strings.xml b/packages/SystemUI/res-product/values-lv/strings.xml
index 8e9c064d..a18076a 100644
--- a/packages/SystemUI/res-product/values-lv/strings.xml
+++ b/packages/SystemUI/res-product/values-lv/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Jūs <xliff:g id="NUMBER">%d</xliff:g> reizi(-es) nesekmīgi mēģinājāt atbloķēt tālruni. Darba profils tiks noņemts, kā arī visi profila dati tiks dzēsti."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Jūs <xliff:g id="NUMBER_0">%1$d</xliff:g> reizi(-es) nepareizi norādījāt atbloķēšanas kombināciju. Pēc vēl <xliff:g id="NUMBER_1">%2$d</xliff:g> neveiksmīga(-iem) mēģinājuma(-iem) planšetdators būs jāatbloķē, izmantojot e-pasta kontu.\n\nMēģiniet vēlreiz pēc <xliff:g id="NUMBER_2">%3$d</xliff:g> sekundes(-ēm)."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Jūs <xliff:g id="NUMBER_0">%1$d</xliff:g> reizi(-es) nepareizi norādījāt atbloķēšanas kombināciju. Pēc vēl <xliff:g id="NUMBER_1">%2$d</xliff:g> nesekmīga(-iem) mēģinājuma(-iem) tālrunis būs jāatbloķē, izmantojot e-pasta kontu.\n\nMēģiniet vēlreiz pēc <xliff:g id="NUMBER_2">%3$d</xliff:g> sekundes(-ēm)."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Tālrunis izslēgts karstuma dēļ"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Ierīce izslēgta karstuma dēļ"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Planšetdators izslēgts karstuma dēļ"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Tagad jūsu tālrunis darbojas normāli.\nPieskarieties, lai uzzinātu vairāk."</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Tagad jūsu ierīce darbojas normāli.\nPieskarieties, lai uzzinātu vairāk."</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Tagad jūsu planšetdators darbojas normāli.\nPieskarieties, lai uzzinātu vairāk."</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Jūsu tālrunis bija pārkarsis un tika izslēgts. Tagad tas darbojas normāli.\n\nTālrunis var sakarst, ja:\n	• tiek izmantotas lietotnes, kas patērē daudz enerģijas (piem., spēles, video lietotnes vai navigācija);\n	• tiek lejupielādēti/augšupielādēti lieli faili;\n	• tālrunis tiek lietots augstā temperatūrā."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Jūsu ierīce bija pārkarsusi un tika izslēgta. Tagad tā darbojas normāli.\n\nIerīce var sakarst, ja:\n	• tiek izmantotas lietotnes, kas patērē daudz enerģijas (piem., spēles, video lietotnes vai navigācija);\n	• tiek lejupielādēti/augšupielādēti lieli faili;\n	• ierīce tiek lietota augstā temperatūrā."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Jūsu planšetdators bija pārkarsis un tika izslēgts. Tagad tas darbojas normāli.\n\nPlanšetdators var sakarst, ja:\n	• tiek izmantotas lietotnes, kas patērē daudz enerģijas (piem., spēles, video lietotnes vai navigācija);\n	• tiek lejupielādēti/augšupielādēti lieli faili;\n	• planšetdators tiek lietots augstā temperatūrā."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Tālrunis kļūst silts"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Ierīce kļūst silta"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Planšetdators kļūst silts"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Dažas funkcijas ir ierobežotas, kamēr notiek tālruņa atdzišana.\nPieskarieties, lai uzzinātu vairāk."</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Dažas funkcijas ir ierobežotas, kamēr notiek ierīces atdzišana.\nPieskarieties, lai uzzinātu vairāk."</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Dažas funkcijas ir ierobežotas, kamēr notiek planšetdatora atdzišana.\nPieskarieties, lai uzzinātu vairāk."</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Jūsu tālrunis automātiski mēģinās atdzist. Jūs joprojām varat izmantot tālruni, taču tas, iespējams, darbosies lēnāk.\n\nTiklīdz tālrunis būs atdzisis, tas darbosies normāli."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Jūsu ierīce automātiski mēģinās atdzist. Jūs joprojām varat izmantot ierīci, taču tā, iespējams, darbosies lēnāk.\n\nTiklīdz ierīce būs atdzisusi, tā darbosies normāli."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Jūsu planšetdators automātiski mēģinās atdzist. Jūs joprojām varat izmantot planšetdatoru, taču tas, iespējams, darbosies lēnāk.\n\nTiklīdz planšetdators būs atdzisis, tas darbosies normāli."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Pirksta nospieduma sensors atrodas uz barošanas pogas. Tā ir plakanā poga, kas atrodas blakus augstākai skaļuma pogai planšetdatora sānos."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Pirksta nospieduma sensors atrodas uz barošanas pogas. Tā ir plakanā poga, kas atrodas blakus augstākai skaļuma pogai ierīces sānos."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Pirksta nospieduma sensors atrodas uz barošanas pogas. Tā ir plakanā poga, kas atrodas blakus augstākai skaļuma pogai tālruņa sānos."</string>
diff --git a/packages/SystemUI/res-product/values-mk/strings.xml b/packages/SystemUI/res-product/values-mk/strings.xml
index 6d34f97..bb58df2 100644
--- a/packages/SystemUI/res-product/values-mk/strings.xml
+++ b/packages/SystemUI/res-product/values-mk/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Погрешно се обидовте да го отклучите телефонот <xliff:g id="NUMBER">%d</xliff:g> пати. Работниот профил ќе се отстрани, со што ќе се избришат сите податоци на профилот."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Погрешно ја употребивте вашата шема на отклучување <xliff:g id="NUMBER_0">%1$d</xliff:g> пати. По уште <xliff:g id="NUMBER_1">%2$d</xliff:g> неуспешни обиди, ќе побараме да го отклучите таблетот со сметка на е-пошта.\n\n Обидете се повторно за <xliff:g id="NUMBER_2">%3$d</xliff:g> секунди."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Погрешно ја употребивте вашата шема на отклучување <xliff:g id="NUMBER_0">%1$d</xliff:g> пати. По уште <xliff:g id="NUMBER_1">%2$d</xliff:g> неуспешни обиди, ќе побараме да го отклучите телефонот со сметка на е-пошта.\n\n Обидете се повторно за <xliff:g id="NUMBER_2">%3$d</xliff:g> секунди."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Телефонот се исклучи поради загреаност"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Уредот се исклучи поради загреаност"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Таблетот се исклучи поради загреаност"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Сега телефонот работи нормално.\nДопрете за повеќе информации"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Сега уредот работи нормално.\nДопрете за повеќе информации"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Сега таблетот работи нормално.\nДопрете за повеќе информации"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Телефонот беше премногу загреан, така што се исклучи за да се олади. Сега работи нормално.\n\nТелефонот може премногу да се загрее ако:\n	• користите апликации што користат многу ресурси (како што се, на пример, апликациите за видеа, навигација или игри)\n	• преземате или поставувате големи датотеки\n	• го користите телефонот на високи температури"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Уредот беше премногу загреан, така што се исклучи за да се олади. Сега работи нормално.\n\nУредот може премногу да се загрее ако:\n	• користите апликации што користат многу ресурси (како што се, на пример, апликациите за видеа, навигација или игри)\n	• преземате или прикачувате големи датотеки\n	• го користите уредот на високи температури"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Таблетот беше премногу загреан, така што се исклучи за да се олади. Сега работи нормално.\n\nТаблетот може премногу да се загрее ако:\n	• користите апликации што користат многу ресурси (како што се, на пример, апликациите за видеа, навигација или игри)\n	• преземате или поставувате големи датотеки\n	• го користите таблетот на високи температури"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Телефонот се загрева"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Уредот се загрева"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Таблетот се загрева"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Некои функции се ограничени додека телефонот се лади.\nДопрете за повеќе информации"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Некои функции се ограничени додека уредот се лади.\nДопрете за повеќе информации"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Некои функции се ограничени додека таблетот се лади.\nДопрете за повеќе информации"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Телефонот автоматски ќе почне да се лади. Сѐ уште ќе може да го користите, но можно е да работи побавно.\n\nОткако ќе се олади, ќе работи нормално."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Уредот автоматски ќе почне да се лади. Сѐ уште ќе може да го користите, но можно е да работи побавно.\n\nОткако ќе се олади, ќе работи нормално."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Таблетот автоматски ќе почне да се лади. Сѐ уште ќе може да го користите, но можно е да работи побавно.\n\nОткако ќе се олади, ќе работи нормално."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Сензорот за отпечатоци се наоѓа на копчето за вклучување. Тоа е рамното копче веднаш до подигнатото копче за јачина на звук на работ од таблетот."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Сензорот за отпечатоци се наоѓа на копчето за вклучување. Тоа е рамното копче веднаш до подигнатото копче за јачина на звук на работ од уредот."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Сензорот за отпечатоци се наоѓа на копчето за вклучување. Тоа е рамното копче веднаш до подигнатото копче за јачина на звук на работ од телефонот."</string>
diff --git a/packages/SystemUI/res-product/values-ml/strings.xml b/packages/SystemUI/res-product/values-ml/strings.xml
index d1e7b4b..55cfd06 100644
--- a/packages/SystemUI/res-product/values-ml/strings.xml
+++ b/packages/SystemUI/res-product/values-ml/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"നിങ്ങൾ <xliff:g id="NUMBER">%d</xliff:g> തവണ തെറ്റായ രീതിയിൽ ഫോൺ അൺലോക്ക് ചെയ്യാൻ ശ്രമിച്ചു. ഔദ്യോഗിക പ്രൊഫൈൽ നീക്കം ചെയ്യപ്പെടുകയും, അതുവഴി എല്ലാ പ്രൊഫൈൽ ഡാറ്റയും ഇല്ലാതാകുകയും ചെയ്യും."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"നിങ്ങൾ <xliff:g id="NUMBER_0">%1$d</xliff:g> തവണ തെറ്റായ രീതിയിൽ അൺലോക്ക് പാറ്റേൺ വരച്ചു. <xliff:g id="NUMBER_1">%2$d</xliff:g> ശ്രമങ്ങൾ കൂടി പരാജയപ്പെട്ടാൽ, ഒരു ഇമെയിൽ അക്കൗണ്ടുപയോഗിച്ച് ടാബ്‌ലെറ്റ് അൺലോക്ക് ചെയ്യാൻ നിങ്ങളോട് ആവശ്യപ്പെടും.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> സെക്കന്റ് കഴിഞ്ഞ് വീണ്ടും ശ്രമിക്കുക."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"നിങ്ങൾ <xliff:g id="NUMBER_0">%1$d</xliff:g> തവണ തെറ്റായ രീതിയിൽ അൺലോക്ക് പാറ്റേൺ വരച്ചു. <xliff:g id="NUMBER_1">%2$d</xliff:g> ശ്രമങ്ങൾ കൂടി പരാജയപ്പെട്ടാൽ, ഒരു ഇമെയിൽ അക്കൗണ്ടുപയോഗിച്ച് ഫോൺ അൺലോക്ക് ചെയ്യാൻ നിങ്ങളോട് ആവശ്യപ്പെടും.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> സെക്കന്റ് കഴിഞ്ഞ് വീണ്ടും ശ്രമിക്കുക."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"ചൂട് കൂടിയതിനാൽ ഫോൺ ഓഫായി"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"ചൂട് കൂടിയതിനാൽ ഉപകരണം ഓഫായി"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"ചൂട് കൂടിയതിനാൽ ടാബ്‌ലെറ്റ് ഓഫായി"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"നിങ്ങളുടെ ഫോൺ ഇപ്പോൾ സാധാരണ ഗതിയിൽ പ്രവർത്തിക്കുന്നുണ്ട്.\nകൂടുതൽ വിവരങ്ങൾക്ക് ടാപ്പ് ചെയ്യുക"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"നിങ്ങളുടെ ഉപകരണം ഇപ്പോൾ സാധാരണ ഗതിയിൽ പ്രവർത്തിക്കുന്നുണ്ട്.\nകൂടുതൽ വിവരങ്ങൾക്ക് ടാപ്പ് ചെയ്യുക"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"നിങ്ങളുടെ ടാബ്‌ലെറ്റ് ഇപ്പോൾ സാധാരണ ഗതിയിൽ പ്രവർത്തിക്കുന്നുണ്ട്.\nകൂടുതൽ വിവരങ്ങൾക്ക് ടാപ്പ് ചെയ്യുക"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"ഫോൺ വളരെയധികം ചൂടായതിനാൽ തണുക്കാൻ വേണ്ടിയാണ് ഓഫായത്. ഫോൺ ഇപ്പോൾ സാധാരണഗതിയിൽ പ്രവർത്തിക്കുന്നുണ്ട്.\n\nഇനിപ്പറയുന്ന സാഹചര്യങ്ങളിൽ ഫോൺ വളരെയധികം ചൂടായേക്കാം:\n	• ഗെയിമിംഗ്, വീഡിയോ അല്ലെങ്കിൽ നാവിഗേഷൻ തുടങ്ങിയ കൂടുതൽ വിഭവങ്ങൾ ഉപയോഗിക്കുന്ന ആപ്പുകൾ ഉപയോഗിക്കുന്നത്\n	• വലിയ ഫയലുകൾ അപ്‌ലോഡോ ഡൗൺലോഡോ ചെയ്യുന്നത്\n	• ഉയർന്ന താപനിലയിൽ ഫോൺ ഉപയോഗിക്കുന്നത്"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"ഉപകരണം വളരെയധികം ചൂടായതിനാൽ തണുക്കാൻ വേണ്ടിയാണ് ഓഫായത്. ഉപകരണം ഇപ്പോൾ സാധാരണഗതിയിൽ പ്രവർത്തിക്കുന്നുണ്ട്.\n\nഇനിപ്പറയുന്ന സാഹചര്യങ്ങളിൽ ഉപകരണം വളരെയധികം ചൂടായേക്കാം:\n	• ഗെയിമിംഗ്, വീഡിയോ അല്ലെങ്കിൽ നാവിഗേഷൻ തുടങ്ങിയ കൂടുതൽ വിഭവങ്ങൾ ഉപയോഗിക്കുന്ന ആപ്പുകൾ ഉപയോഗിക്കുന്നത്\n	• വലിയ ഫയലുകൾ അപ്‌ലോഡോ ഡൗൺലോഡോ ചെയ്യുന്നത്\n	• ഉയർന്ന താപനിലയിൽ ഉപകരണം ഉപയോഗിക്കുന്നത്"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"ടാബ്‌ലെറ്റ് വളരെയധികം ചൂടായതിനാൽ തണുക്കാൻ വേണ്ടിയാണ് ഓഫായത്. ടാബ്‌ലെറ്റ് ഇപ്പോൾ സാധാരണഗതിയിൽ പ്രവർത്തിക്കുന്നുണ്ട്.\n\nഇനിപ്പറയുന്ന സാഹചര്യങ്ങളിൽ ടാബ്‌ലെറ്റ് വളരെയധികം ചൂടായേക്കാം:\n	• ഗെയിമിംഗ്, വീഡിയോ അല്ലെങ്കിൽ നാവിഗേഷൻ തുടങ്ങിയ കൂടുതൽ വിഭവങ്ങൾ ഉപയോഗിക്കുന്ന ആപ്പുകൾ ഉപയോഗിക്കുന്നത്\n	• വലിയ ഫയലുകൾ അപ്‌ലോഡോ ഡൗൺലോഡോ ചെയ്യുന്നത്\n	• ഉയർന്ന താപനിലയിൽ ടാബ്‌ലെറ്റ് ഉപയോഗിക്കുന്നത്"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"ഫോൺ ചൂടാകുന്നു"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"ഉപകരണം ചൂടാകുന്നു"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"ടാബ്‌ലെറ്റ് ചൂടാകുന്നു"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"ഫോൺ തണുത്തുകൊണ്ടിരിക്കുമ്പോൾ ചില ഫീച്ചറുകൾ പരിമിതപ്പെടുത്തും.\nകൂടുതൽ വിവരങ്ങൾക്ക് ടാപ്പ് ചെയ്യുക"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"ഉപകരണം തണുത്തുകൊണ്ടിരിക്കുമ്പോൾ ചില ഫീച്ചറുകൾ പരിമിതപ്പെടുത്തും.\nകൂടുതൽ വിവരങ്ങൾക്ക് ടാപ്പ് ചെയ്യുക"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"ടാബ്‌ലെറ്റ് തണുത്തുകൊണ്ടിരിക്കുമ്പോൾ ചില ഫീച്ചറുകൾ പരിമിതപ്പെടുത്തും.\nകൂടുതൽ വിവരങ്ങൾക്ക് ടാപ്പ് ചെയ്യുക"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"നിങ്ങളുടെ ഫോൺ സ്വയമേവ തണുക്കാൻ ശ്രമിക്കും. നിങ്ങൾക്ക് അപ്പോഴും ഫോൺ ഉപയോഗിക്കാമെങ്കിലും അതിന്റെ പ്രവർത്തനം മന്ദഗതിയിലായിരിക്കാം.\n\nതണുത്തുകഴിഞ്ഞാൽ ഫോൺ സാധാരണപോലെ പ്രവർത്തിക്കും."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"നിങ്ങളുടെ ഉപകരണം സ്വയമേവ തണുക്കാൻ ശ്രമിക്കും. നിങ്ങൾക്ക് അപ്പോഴും ഉപകരണം ഉപയോഗിക്കാമെങ്കിലും അതിന്റെ പ്രവർത്തനം മന്ദഗതിയിലായിരിക്കാം.\n\nതണുത്തുകഴിഞ്ഞാൽ ഉപകരണം സാധാരണപോലെ പ്രവർത്തിക്കും."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"നിങ്ങളുടെ ടാബ്‌ലെറ്റ് സ്വയമേവ തണുക്കാൻ ശ്രമിക്കും. നിങ്ങൾക്ക് അപ്പോഴും ടാബ്‌ലെറ്റ് ഉപയോഗിക്കാമെങ്കിലും അതിന്റെ പ്രവർത്തനം മന്ദഗതിയിലായിരിക്കാം.\n\nതണുത്തുകഴിഞ്ഞാൽ ടാബ്‌ലെറ്റ് സാധാരണപോലെ പ്രവർത്തിക്കും."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"പവർ ബട്ടണിലാണ് ഫിംഗർപ്രിന്റ് സെൻസർ ഉള്ളത്. ടാബ്‌ലെറ്റിന്റെ അറ്റത്ത് ഉയർന്ന് നിൽക്കുന്ന ശബ്ദ ബട്ടണിന്റെ അടുത്തുള്ള പരന്ന ബട്ടൺ ആണ് ഇത്."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"പവർ ബട്ടണിലാണ് ഫിംഗർപ്രിന്റ് സെൻസർ ഉള്ളത്. ഉപകരണത്തിന്റെ അറ്റത്ത് ഉയർന്ന് നിൽക്കുന്ന ശബ്ദ ബട്ടണിന്റെ അടുത്തുള്ള പരന്ന ബട്ടൺ ആണ് ഇത്."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"പവർ ബട്ടണിലാണ് ഫിംഗർപ്രിന്റ് സെൻസർ ഉള്ളത്. ഫോണിന്റെ അറ്റത്ത് ഉയർന്ന് നിൽക്കുന്ന ശബ്ദ ബട്ടണിന്റെ അടുത്തുള്ള പരന്ന ബട്ടൺ ആണ് ഇത്."</string>
diff --git a/packages/SystemUI/res-product/values-mn/strings.xml b/packages/SystemUI/res-product/values-mn/strings.xml
index 1cc1a1c..179e816 100644
--- a/packages/SystemUI/res-product/values-mn/strings.xml
+++ b/packages/SystemUI/res-product/values-mn/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Та утасны түгжээг тайлах оролдлогыг <xliff:g id="NUMBER">%d</xliff:g> удаа буруу хийсэн байна. Ажлын профайлыг устгах бөгөөд ингэснээр профайлын бүх өгөгдлийг устгах болно."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Та тайлах хээгээ <xliff:g id="NUMBER_0">%1$d</xliff:g> удаа буруу зурсан байна. Дахин <xliff:g id="NUMBER_1">%2$d</xliff:g> удаа буруу зурсны дараа та имэйл бүртгэл ашиглан таблетынхаа түгжээг тайлах шаардлагатай болно.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> секундийн дараа дахин оролдоно уу."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Та тайлах хээгээ <xliff:g id="NUMBER_0">%1$d</xliff:g> удаа буруу зурсан байна. Дахин <xliff:g id="NUMBER_1">%2$d</xliff:g> удаа буруу зурсны дараа та имэйл бүртгэл ашиглан утасныхаа түгжээг тайлах шаардлагатай болно.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> секундийн дараа дахин оролдоно уу."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Халсны улмаас утас унтарсан"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Халсны улмаас төхөөрөмж унтарсан"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Халсны улмаас таблет унтарсан"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Таны утас одоо хэвийн ажиллаж байна.\nДэлгэрэнгүй мэдээлэл авах бол товшино уу"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Таны төхөөрөмж одоо хэвийн ажиллаж байна.\nДэлгэрэнгүй мэдээлэл авах бол товшино уу"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Таны таблет одоо хэвийн ажиллаж байна.\nДэлгэрэнгүй мэдээлэл авах бол товшино уу"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Таны утас хэт халсан тул хөрөхөөр унтарсан. Таны утас одоо хэвийн ажиллаж байна.\n\nТа дараахыг хийсэн тохиолдолд утас тань хэт халж магадгүй:\n	• Нөөц их ашигладаг аппуудыг (тоглоом, видео эсвэл навигацын аппууд) ашиглах\n	• Том файлууд татах эсвэл байршуулах\n	• Утсаа өндөр температурт ашиглах"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Таны төхөөрөмж хэт халсан тул хөрөхөөр унтарсан. Таны төхөөрөмж одоо хэвийн ажиллаж байна.\n\nТа дараахыг хийсэн тохиолдолд төхөөрөмж тань хэт халж магадгүй:\n	• Нөөц их ашигладаг аппуудыг (тоглоом, видео эсвэл навигацын аппууд) ашиглах\n	• Том файлууд татах эсвэл байршуулах\n	• Төхөөрөмжөө өндөр температурт ашиглах"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Таны таблет хэт халсан тул хөрөхөөр унтарсан. Таны таблет одоо хэвийн ажиллаж байна.\n\nТа дараахыг хийсэн тохиолдолд таблет тань хэт халж магадгүй:\n	• Нөөц их ашигладаг аппуудыг (тоглоом, видео эсвэл навигацын аппууд) ашиглах\n	• Том файлууд татах эсвэл байршуулах\n	• Таблетаа өндөр температурт ашиглах"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Утас халж байна"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Төхөөрөмж халж байна"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Таблет халж байна"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Утсыг хөрөх үед зарим онцлогийг хязгаарлана.\nДэлгэрэнгүй мэдээлэл авах бол товшино уу"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Төхөөрөмжийг хөрөх үед зарим онцлогийг хязгаарлана.\nДэлгэрэнгүй мэдээлэл авах бол товшино уу"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Таблетыг хөрөх үед зарим онцлогийг хязгаарлана.\nДэлгэрэнгүй мэдээлэл авах бол товшино уу"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Таны утас хөрөхөөр автоматаар оролдоно. Та утсаа ашиглах боломжтой хэвээр байх хэдий ч энэ нь удаан ажиллаж магадгүй.\n\nТаны утас хөрснийхөө дараа хэвийн ажиллана."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Таны төхөөрөмж хөрөхөөр автоматаар оролдоно. Та төхөөрөмжөө ашиглах боломжтой хэвээр байх хэдий ч энэ нь удаан ажиллаж магадгүй.\n\nТаны төхөөрөмж хөрснийхөө дараа хэвийн ажиллана."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Таны таблет хөрөхөөр автоматаар оролдоно. Та таблетаа ашиглах боломжтой хэвээр байх хэдий ч энэ нь удаан ажиллаж магадгүй.\n\nТаны таблет хөрснийхөө дараа хэвийн ажиллана."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Хурууны хээ мэдрэгч асаах/унтраах товчин дээр байдаг. Энэ нь таблетын ирмэг дээрх дууны түвшний товгор товчлуурын хажууд байх хавтгай товчлуур юм."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Хурууны хээ мэдрэгч асаах/унтраах товчин дээр байдаг. Энэ нь төхөөрөмжийн ирмэг дээрх дууны түвшний товгор товчлуурын хажууд байх хавтгай товчлуур юм."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Хурууны хээ мэдрэгч асаах/унтраах товчин дээр байдаг. Энэ нь утасны ирмэг дээрх дууны түвшний товгор товчлуурын хажууд байх хавтгай товчлуур юм."</string>
diff --git a/packages/SystemUI/res-product/values-mr/strings.xml b/packages/SystemUI/res-product/values-mr/strings.xml
index 33c3eb4..821b303 100644
--- a/packages/SystemUI/res-product/values-mr/strings.xml
+++ b/packages/SystemUI/res-product/values-mr/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"तुम्ही फोन अनलॉक करण्याचा <xliff:g id="NUMBER">%d</xliff:g> वेळा चुकीच्या पद्धतीने प्रयत्न केला आहे. कार्य प्रोफाइल काढली जाईल, त्यामुळे सर्व प्रोफाइल डेटा हटवला जाईल."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"तुम्ही तुमचा अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा चुकीच्या पद्धतीने काढला आहे. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, तुम्हाला ईमेल खाते वापरून तुमचा टॅबलेट अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"तुम्ही तुमचा अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा चुकीच्या पद्धतीने काढला आहे. आणखी <xliff:g id="NUMBER_1">%2$d</xliff:g> अयशस्वी प्रयत्नांनंतर, तुम्हाला ईमेल खाते वापरून तुमचा फोन अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"खूप गरम झाल्यामुळे फोन बंद झाला"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"खूप गरम झाल्यामुळे डिव्हाइस बंद झाले"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"खूप गरम झाल्यामुळे टॅबलेट बंद झाला"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"तुमचा फोन आता सामान्यपणे रन होत आहे.\nअधिक माहितीसाठी टॅप करा"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"तुमचे डिव्हाइस आता सामान्यपणे रन होत आहे.\nअधिक माहितीसाठी टॅप करा"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"तुमचा टॅबलेट आता सामान्यपणे रन होत आहे.\nअधिक माहितीसाठी टॅप करा"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"तुमचा फोन खूप गरम झाला होता, म्हणून तो थंड होण्यासाठी बंद झाला आहे. तुमचा फोन आता सामान्यपणे रन होत आहे.\n\nतुम्ही पुढील गोष्टी केल्यास तुमचा फोन खूप गरम होऊ शकतो:\n	•स्रोत इंटेन्सिव्ह अ‍ॅप्स वापरणे (जसे की गेमिंग, व्हिडिओ किंवा नेव्हिगेशन यांसारखी अ‍ॅप्स)\n	•मोठ्या फाइल डाउनलोड किंवा अपलोड करणे\n	•तुमचा फोन उच्च तापमानांमध्ये वापरणे"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"तुमचे डिव्हाइस खूप गरम झाले होते, म्हणून ते थंड होण्यासाठी बंद झाले आहे. तुमचे डिव्हाइस आता सामान्यपणे रन होत आहे.\n\nतुम्ही पुढील गोष्टी केल्यास तुमचे डिव्हाइस खूप गरम होऊ शकते:\n	•स्रोत इंटेन्सिव्ह अ‍ॅप्स वापरणे (जसे की गेमिंग, व्हिडिओ किंवा नेव्हिगेशन यांसारखी अ‍ॅप्स)\n	•मोठ्या फाइल डाउनलोड किंवा अपलोड करणे\n	•तुमचे डिव्हाइस उच्च तापमानांमध्ये वापरणे"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"तुमचा टॅबलेट खूप गरम झाला होता, म्हणून तो थंड होण्यासाठी बंद झाला आहे. तुमचा टॅबलेट आता सामान्यपणे रन होत आहे.\n\nतुम्ही पुढील गोष्टी केल्यास तुमचा टॅबलेट खूप गरम होऊ शकतो:\n	•स्रोत इंटेन्सिव्ह अ‍ॅप्स वापरणे (जसे की गेमिंग, व्हिडिओ किंवा नेव्हिगेशन यांसारखी अ‍ॅप्स)\n	•मोठ्या फाइल डाउनलोड किंवा अपलोड करणे\n	•तुमचा टॅबलेट उच्च तापमानांमध्ये वापरणे"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"फोन गरम होत आहे"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"डिव्हाइस गरम होत आहे"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"टॅबलेट गरम होत आहे"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"फोन थंड होईपर्यंत काही वैशिष्ट्ये मर्यादित केली आहेत.\nअधिक माहितीसाठी टॅप करा"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"डिव्हाइस थंड होईपर्यंत काही वैशिष्ट्ये मर्यादित केली आहेत.\nअधिक माहितीसाठी टॅप करा"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"टॅबलेट थंड होईपर्यंत काही वैशिष्ट्ये मर्यादित केली आहेत.\nअधिक माहितीसाठी टॅप करा"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"तुमचा फोन आपोआप थंड होण्याचा प्रयत्न करेल. तुम्ही तरीही तुमचा फोन वापरू शकता, पण तो कदाचित धीम्या गतीने रन होईल.\n\nतुमचा फोन थंड झाल्यानंतर तो सामान्यपणे काम करेल."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"तुमचे डिव्हाइस आपोआप थंड होण्याचा प्रयत्न करेल. तुम्ही तरीही तुमचे डिव्हाइस वापरू शकता, पण ते कदाचित धीम्या गतीने रन होईल.\n\nतुमचे डिव्हाइस थंड झाल्यानंतर ते सामान्यपणे काम करेल."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"तुमचा टॅबलेट आपोआप थंड होण्याचा प्रयत्न करेल. तुम्ही तरीही तुमचा टॅबलेट वापरू शकता, पण तो कदाचित धीम्या गतीने रन होईल.\n\nतुमचा टॅबलेट थंड झाल्यानंतर तो सामान्यपणे काम करेल."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"फिंगरप्रिंट सेन्सर हे पॉवर बटणावर आहे. टॅबलेटच्या कडेला वर आलेल्या व्हॉल्यूम बटणाच्या बाजूला असलेले सपाट बटण म्हणजे पॉवर बटण."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"फिंगरप्रिंट सेन्सर हे पॉवर बटणावर आहे. डिव्हाइसच्या कडेला वरती आलेल्या व्हॉल्यूम बटणाच्या बाजूला असलेले सपाट बटण म्हणजे पॉवर बटण."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"फिंगरप्रिंट सेन्सर हे पॉवर बटणावर आहे. फोनच्या कडेला वर आलेल्या व्हॉल्यूम बटणाच्या बाजूला असलेले सपाट बटण म्हणजे पॉवर बटण."</string>
diff --git a/packages/SystemUI/res-product/values-ms/strings.xml b/packages/SystemUI/res-product/values-ms/strings.xml
index e1e6976..ee10626 100644
--- a/packages/SystemUI/res-product/values-ms/strings.xml
+++ b/packages/SystemUI/res-product/values-ms/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Anda telah salah membuka kunci telefon sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Profil kerja ini akan dialih keluar sekali gus memadamkan semua data profil."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Anda telah tersilap lukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%1$d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%2$d</xliff:g> lagi percubaan yang gagal, anda akan diminta membuka kunci tablet anda menggunakan akaun e-mel.\n\n Cuba lagi dalam <xliff:g id="NUMBER_2">%3$d</xliff:g> saat."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Anda telah tersilap lukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%1$d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%2$d</xliff:g> lagi percubaan yang gagal, anda akan diminta membuka kunci telefon anda menggunakan akaun e-mel.\n\n Cuba lagi dalam <xliff:g id="NUMBER_2">%3$d</xliff:g> saat."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefon dimatikan kerana panas"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Peranti dimatikan kerana panas"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet dimatikan kerana panas"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Kini telefon anda berjalan seperti biasa.\nKetik untuk mendapatkan maklumat lanjut"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Kini peranti anda berjalan seperti biasa.\nKetik untuk mendapatkan maklumat lanjut"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Kini tablet anda berjalan seperti biasa.\nKetik untuk mendapatkan maklumat lanjut"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefon anda terlalu panas, oleh yang demikian telefon itu telah dimatikan untuk menyejuk. Sekarang, telefon anda berjalan seperti biasa.\n\nTelefon anda mungkin menjadi terlalu panas jika anda:\n	• Menggunakan apl intensif sumber (seperti permainan, video atau apl navigasi)\n	• Memuat turun atau memuat naik fail besar\n	• Menggunakan telefon anda dalam suhu tinggi"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Peranti anda terlalu panas, oleh yang demikian peranti itu telah dimatikan untuk menyejuk. Sekarang, peranti anda berjalan seperti biasa.\n\nPeranti anda mungkin menjadi terlalu panas jika anda:\n	• Menggunakan apl intensif sumber (seperti permainan, video atau apl navigasi)\n	• Memuat turun atau memuat naik fail besar\n	• Menggunakan peranti anda dalam suhu tinggi"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tablet anda terlalu panas, oleh yang demikian tablet itu telah dimatikan untuk menyejuk. Sekarang, tablet anda berjalan seperti biasa.\n\nTablet anda mungkin menjadi terlalu panas jika anda:\n	• Menggunakan apl intensif sumber (seperti permainan, video atau apl navigasi)\n	• Memuat turun atau memuat naik fail besar\n	• Menggunakan tablet anda dalam suhu tinggi"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefon semakin panas"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Peranti semakin panas"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet semakin panas"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Sesetengah ciri adalah terhad semasa telefon menyejuk.\nKetik untuk mendapatkan maklumat lanjut"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Sesetengah ciri adalah terhad semasa peranti menyejuk.\nKetik untuk mendapatkan maklumat lanjut"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Sesetengah ciri adalah terhad semasa tablet menyejuk.\nKetik untuk mendapatkan maklumat lanjut"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefon anda akan cuba menyejuk secara automatik. Anda masih dapat menggunakan telefon itu tetapi telefon tersebut mungkin berjalan lebih perlahan.\n\nSetelah telefon anda sejuk, telefon itu akan berjalan seperti biasa."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Peranti anda akan cuba menyejuk secara automatik. Anda masih dapat menggunakan peranti anda tetapi peranti tersebut mungkin berjalan lebih perlahan.\n\nSetelah peranti anda sejuk, peranti itu akan berjalan seperti biasa."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Tablet anda akan cuba menyejuk secara automatik. Anda masih dapat menggunakan tablet itu tetapi tablet tersebut mungkin berjalan lebih perlahan.\n\nSetelah tablet anda sejuk, tablet itu akan berjalan seperti biasa."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Penderia cap jari berada pada butang kuasa. Penderia cap jari ialah butang leper yang terletak bersebelahan butang kelantangan timbul pada bahagian tepi tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Penderia cap jari berada pada butang kuasa. Penderia cap jari ialah butang leper yang terletak bersebelahan butang kelantangan timbul pada bahagian tepi peranti."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Penderia cap jari berada pada butang kuasa. Penderia cap jari ialah butang leper yang terletak bersebelahan butang kelantangan timbul pada bahagian tepi telefon."</string>
diff --git a/packages/SystemUI/res-product/values-my/strings.xml b/packages/SystemUI/res-product/values-my/strings.xml
index 4ec1ff6..9a61692 100644
--- a/packages/SystemUI/res-product/values-my/strings.xml
+++ b/packages/SystemUI/res-product/values-my/strings.xml
@@ -23,7 +23,7 @@
     <string name="dock_alignment_not_charging" product="default" msgid="3980752926226749808">"ကြိုးမဲ့အားသွင်းရန် ဖုန်းကို ပြန်၍ချိန်ပါ"</string>
     <string name="inattentive_sleep_warning_message" product="tv" msgid="6844464574089665063">"Android TV စက်သည် မကြာမီ ပိတ်သွားပါမည်၊ ဆက်ဖွင့်ထားရန် ခလုတ်တစ်ခုကို နှိပ်ပါ။"</string>
     <string name="inattentive_sleep_warning_message" product="default" msgid="5693904520452332224">"စက်သည် မကြာမီ ပိတ်သွားပါမည်၊ ဆက်ဖွင့်ထားရန် နှိပ်ပါ။"</string>
-    <string name="keyguard_missing_sim_message" product="tablet" msgid="408124574073032188">"တက်ဘလက်တွင် ဆင်းမ်မရှိပါ။"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="408124574073032188">"တက်ဘလက်တွင် ဆင်းမ်ကတ်မရှိပါ။"</string>
     <string name="keyguard_missing_sim_message" product="default" msgid="2605468359948247208">"ဖုန်းတွင် ဆင်းမ်မရှိပါ။"</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="6278551068943958651">"ပင်နံပါတ် ကိုက်ညီမှု မရှိပါ"</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="302165994845009232">"တက်ဘလက်ကို <xliff:g id="NUMBER_0">%1$d</xliff:g> ကြိမ် မှားယွင်းစွာ လော့ခ်ဖွင့်ရန် ကြိုးစားခဲ့ပါသည်။ <xliff:g id="NUMBER_1">%2$d</xliff:g> ကြိမ် ထပ်မံမှားယွင်းခဲ့လျှင် ဤတက်ဘလက်ကို ပြင်ဆင်သတ်မှတ်လိုက်မည် ဖြစ်ပြီး ၎င်းအတွင်းရှိ ဒေတာအားလုံးကိုလည်း ဖျက်လိုက်ပါမည်။"</string>
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"ဖုန်းကို <xliff:g id="NUMBER">%d</xliff:g> ကြိမ် မှားယွင်းစွာ လော့ခ်ဖွင့်ရန် ကြိုးစားခဲ့ပါသည်။ အလုပ်ပရိုဖိုင်ကို ဖယ်ရှားလိုက်မည်ဖြစ်ပြီး ပရိုဖိုင်ဒေတာ အားလုံးကိုလည်း ဖျက်လိုက်ပါမည်။"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"သင်သည် သင်၏ လော့ခ်ဖွင့်ခြင်းပုံစံကို <xliff:g id="NUMBER_0">%1$d</xliff:g> ကြိမ် မှားယွင်းစွာ ဆွဲခဲ့ပါသည်။ <xliff:g id="NUMBER_1">%2$d</xliff:g> ကြိမ် ထပ်မံမှားယွင်းပြီးသည့်နောက်တွင် သင့်အီးမေးလ်အကောင့်အား အသုံးပြု၍ တက်ဘလက်ကို လော့ခ်ဖွင့်ရန် တောင်းဆိုသွားပါမည်။\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> စက္ကန့်အကြာတွင် ထပ်စမ်းကြည့်ပါ။"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"သင်သည် သင်၏ လော့ခ်ဖွင့်ခြင်းပုံစံကို <xliff:g id="NUMBER_0">%1$d</xliff:g> ကြိမ် မှားယွင်းစွာ ဆွဲခဲ့ပါသည်။ <xliff:g id="NUMBER_1">%2$d</xliff:g> ကြိမ် ထပ်မံမှားယွင်းပြီးသည့်နောက်တွင် သင့်အီးမေးလ်အကောင့်အား အသုံးပြု၍ ဖုန်းကို လော့ခ်ဖွင့်ရန် တောင်းဆိုသွားပါမည်။\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> စက္ကန့်အကြာတွင် ထပ်စမ်းကြည့်ပါ။"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"အပူရှိန်ကြောင့် ဖုန်းပိတ်သွားသည်"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"အပူရှိန်ကြောင့် စက်ပစ္စည်းပိတ်သွားသည်"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"အပူရှိန်ကြောင့် တက်ဘလက်ပိတ်သွားသည်"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"သင့်ဖုန်းသည် ယခု ပုံမှန်လုပ်ဆောင်နေပါပြီ။\nနောက်ထပ်အချက်အလက်များအတွက် တို့ပါ"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"သင့်စက်ပစ္စည်းသည် ယခု ပုံမှန်လုပ်ဆောင်နေပါပြီ။\nနောက်ထပ်အချက်အလက်များအတွက် တို့ပါ"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"သင့်တက်ဘလက်သည် ယခု ပုံမှန်လုပ်ဆောင်နေပါပြီ။\nနောက်ထပ်အချက်အလက်များအတွက် တို့ပါ"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"သင့်ဖုန်းအလွန်ပူနေသည့်အတွက် အေးသွားစေရန် ပိတ်ထားပါသည်။ ယခုပုံမှန် လုပ်ဆောင်နေပါပြီ။\n\nအောက်ပါတို့ကိုသုံးလျှင် အလွန်ပူလာနိုင်သည်-\n	• ရင်းမြစ်အထူးစိုက်ထုတ်ရသော အက်ပ်များကို သုံးခြင်း (ဂိမ်းကစားခြင်း၊ ဗီဒီယို (သို့) လမ်းညွှန်အက်ပ်များ ကဲ့သို့)\n	• ကြီးမားသောဖိုင်များ ဒေါင်းလုဒ် (သို့) အပ်လုဒ်လုပ်ခြင်း\n	• အပူရှိန်မြင့်သောနေရာတွင် ဖုန်းကိုသုံးခြင်း"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"သင့်စက်ပစ္စည်း အလွန်ပူနေသည့်အတွက် အေးသွားစေရန် ပိတ်ထားပါသည်။ ယခုပုံမှန် လုပ်ဆောင်နေပါပြီ။\n\nအောက်ပါတို့ကိုသုံးလျှင် အလွန်ပူလာနိုင်သည်-\n	• ရင်းမြစ်အထူးစိုက်ထုတ်ရသော အက်ပ်များကို သုံးခြင်း (ဂိမ်းကစားခြင်း၊ ဗီဒီယို (သို့) လမ်းညွှန်အက်ပ်များကဲ့သို့)\n	• ကြီးမားသောဖိုင်များ ဒေါင်းလုဒ် (သို့) အပ်လုဒ်လုပ်ခြင်း\n	• အပူရှိန်မြင့်သောနေရာတွင် စက်ပစ္စည်းကိုသုံးခြင်း"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"သင့်တက်ဘလက်အလွန်ပူနေသည့်အတွက် အေးသွားစေရန် ပိတ်ထားပါသည်။ ယခုပုံမှန် လုပ်ဆောင်နေပါပြီ။\n\nအောက်ပါတို့ကိုသုံးလျှင် အလွန်ပူလာနိုင်သည်-\n	• ရင်းမြစ်အထူးစိုက်ထုတ်ရသော အက်ပ်များကို သုံးခြင်း (ဂိမ်းကစားခြင်း၊ ဗီဒီယို (သို့) လမ်းညွှန်အက်ပ်များကဲ့သို့)\n	• ကြီးမားသောဖိုင်များ ဒေါင်းလုဒ် (သို့) အပ်လုဒ်လုပ်ခြင်း\n	• အပူရှိန်မြင့်သောနေရာတွင် တက်ဘလက်ကိုသုံးခြင်း"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"ဖုန်း ပူနွေးလာပါပြီ"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"စက်ပစ္စည်း ပူနွေးလာပါပြီ"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"တက်ဘလက် ပူနွေးလာပါပြီ"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"ဖုန်း ပြန်အေးလာစဉ် အင်္ဂါရပ်အချို့ကို ကန့်သတ်ထားပါသည်။\nနောက်ထပ်အချက်အလက်များအတွက် တို့ပါ"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"စက်ပစ္စည်း ပြန်အေးလာစဉ် အင်္ဂါရပ်အချို့ကို ကန့်သတ်ထားပါသည်။\nနောက်ထပ်အချက်အလက်များအတွက် တို့ပါ"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"တက်ဘလက် ပြန်အေးလာစဉ် အင်္ဂါရပ်အချို့ကို ကန့်သတ်ထားပါသည်။\nနောက်ထပ်အချက်အလက်များအတွက် တို့ပါ"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"သင့်ဖုန်းသည် အလိုအလျောက် ပြန်အေးသွားပါမည်။ ဖုန်းကို အသုံးပြုနိုင်သေးသော်လည်း ပိုနှေးသွားနိုင်ပါသည်။\n\nဖုန်း အေးသွားသည့်အခါ ပုံမှန်အတိုင်း ပြန်လုပ်ဆောင်လိမ့်မည်။"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"သင့်စက်ပစ္စည်းသည် အလိုအလျောက် ပြန်အေးသွားပါမည်။ စက်ပစ္စည်းကို အသုံးပြုနိုင်သေးသော်လည်း ပိုနှေးသွားနိုင်ပါသည်။\n\nစက်ပစ္စည်း အေးသွားသည့်အခါ ပုံမှန်အတိုင်း ပြန်လုပ်ဆောင်လိမ့်မည်။"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"သင့်တက်ဘလက်သည် အလိုအလျောက် ပြန်အေးသွားပါမည်။ တက်ဘလက်ကို အသုံးပြုနိုင်သေးသော်လည်း ပိုနှေးသွားနိုင်ပါသည်။\n\nတက်ဘလက် အေးသွားသည့်အခါ ပုံမှန်အတိုင်း ပြန်လုပ်ဆောင်လိမ့်မည်။"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"လက်ဗွေ အာရုံခံကိရိယာသည် ဖွင့်ပိတ်ခလုတ်ပေါ်တွင် ရှိသည်။ တက်ဘလက်၏ဘေးဘက်ရှိ အသံထိန်းခလုတ်ဖုသီးနှင့် ကပ်လျက်မှ ခလုတ်ပြားဖြစ်သည်။"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"လက်ဗွေ အာရုံခံကိရိယာသည် ဖွင့်ပိတ်ခလုတ်ပေါ်တွင် ရှိသည်။ စက်၏ဘေးဘက်ရှိ အသံထိန်းခလုတ်ဖုသီးနှင့် ကပ်လျက်မှ ခလုတ်ပြားဖြစ်သည်။"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"လက်ဗွေ အာရုံခံကိရိယာသည် ဖွင့်ပိတ်ခလုတ်ပေါ်တွင် ရှိသည်။ ဖုန်း၏ဘေးဘက်ရှိ အသံထိန်းခလုတ်ဖုသီးနှင့် ကပ်လျက်မှ ခလုတ်ပြားဖြစ်သည်။"</string>
diff --git a/packages/SystemUI/res-product/values-nb/strings.xml b/packages/SystemUI/res-product/values-nb/strings.xml
index 4b16a43..533a9b8 100644
--- a/packages/SystemUI/res-product/values-nb/strings.xml
+++ b/packages/SystemUI/res-product/values-nb/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Du har gjort feil i forsøket på å låse opp telefonen <xliff:g id="NUMBER">%d</xliff:g> ganger. Jobbprofilen blir fjernet, og alle profildataene blir slettet."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Du har tegnet opplåsingsmønsteret feil <xliff:g id="NUMBER_0">%1$d</xliff:g> ganger. Etter ytterligere <xliff:g id="NUMBER_1">%2$d</xliff:g> nye mislykkede forsøk blir du bedt om å låse opp nettbrettet via en e-postkonto.\n\n Prøv på nytt om <xliff:g id="NUMBER_2">%3$d</xliff:g> sekunder."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Du har tegnet opplåsingsmønsteret feil <xliff:g id="NUMBER_0">%1$d</xliff:g> ganger. Etter ytterligere <xliff:g id="NUMBER_1">%2$d</xliff:g> nye mislykkede forsøk blir du bedt om å låse opp telefonen via en e-postkonto.\n\n Prøv på nytt om <xliff:g id="NUMBER_2">%3$d</xliff:g> sekunder."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefonen ble slått av på grunn av varme"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Enheten ble slått av på grunn av varme"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Nettbrett ble slått av på grunn av varme"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Telefonen kjører nå som normalt.\nTrykk for å se mer informasjon"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Enheten kjører nå som normalt.\nTrykk for å se mer informasjon"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Nettbrettet kjører nå som normalt.\nTrykk for å se mer informasjon"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefonen var for varm, så den ble slått av for å kjøles ned. Den kjører nå som normalt.\n\nTelefonen kan blir for varm hvis du\n	• bruker ressurskrevende apper (for eksempel spill-, video- eller navigeringsapper)\n	• laster store filer opp eller ned\n	• bruker den ved høy temperatur"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Enheten var for varm, så den ble slått av for å kjøles ned. Den kjører nå som normalt.\n\nEnheten kan blir for varm hvis du\n	• bruker ressurskrevende apper (for eksempel spill-, video- eller navigeringsapper)\n	• laster store filer opp eller ned\n	• bruker den ved høy temperatur"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Nettbrettet var for varmt, så det ble slått av for å kjøles ned. Det kjører nå som normalt.\n\nNettbrettet kan blir for varmt hvis du\n	• bruker ressurskrevende apper (for eksempel spill-, video- eller navigeringsapper)\n	• laster store filer opp eller ned\n	• bruker det ved høy temperatur"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefonen begynner å bli varm"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Enheten begynner å bli varm"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Nettbrett begynner å bli varmt"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Enkelte funksjoner er begrenset mens telefonen kjøles ned.\nTrykk for å se mer informasjon"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Enkelte funksjoner er begrenset mens enheten kjøles ned.\nTrykk for å se mer informasjon"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Enkelte funksjoner er begrenset mens nettbrettet kjøles ned.\nTrykk for å se mer informasjon"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefonen prøver automatisk å kjøle seg ned. Du kan fremdeles bruke den, men den kjører muligens saktere.\n\nNår telefonen har kjølt seg ned, kjører den som normalt."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Enheten prøver automatisk å kjøle seg ned. Du kan fremdeles bruke den, men den kjører muligens saktere.\n\nNår enheten har kjølt seg ned, kjører den som normalt."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Nettbrettet prøver automatisk å kjøle seg ned. Du kan fremdeles bruke det, men det kjører muligens saktere.\n\nNår nettbrettet har kjølt seg ned, kjører det som normalt."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Fingeravtrykkssensoren er på av/på-knappen. Det er den flate knappen ved siden av den hevede volumknappen på siden av nettbrettet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Fingeravtrykkssensoren er på av/på-knappen. Det er den flate knappen ved siden av den hevede volumknappen på siden av enheten."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Fingeravtrykkssensoren er på av/på-knappen. Det er den flate knappen ved siden av den hevede volumknappen på siden av telefonen."</string>
diff --git a/packages/SystemUI/res-product/values-ne/strings.xml b/packages/SystemUI/res-product/values-ne/strings.xml
index 7276e23..274b72a 100644
--- a/packages/SystemUI/res-product/values-ne/strings.xml
+++ b/packages/SystemUI/res-product/values-ne/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"तपाईंले <xliff:g id="NUMBER">%d</xliff:g> पटक गलत तरिकाले फोन अनलक गर्ने प्रयास गर्नुभएको छ। कार्य प्रोफाइललाई यसका सबै डेटा मेटिने गरी हटाइने छ।"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"तपाईंले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक आफ्नो अनलक गर्ने ढाँचा गलत रूपमा कोर्नुभयो। थप <xliff:g id="NUMBER_1">%2$d</xliff:g> पटक असफल प्रयास गरेपछि, तपाईंलाई एउटा इमेल खाता प्रयोग गरेर आफ्नो ट्याब्लेट अनलक गर्न आग्रह गरिने छ।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"तपाईंले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक आफ्नो अनलक गर्ने ढाँचा गलत रूपमा कोर्नुभयो। थप <xliff:g id="NUMBER_1">%2$d</xliff:g> पटक असफल प्रयास गरेपछि, तपाईंलाई एउटा इमेल खाता प्रयोग गरेर आफ्नो फोन अनलक गर्न आग्रह गरिने छ।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"तातिएका कारण फोन अफ भयो"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"तातिएका कारण डिभाइस अफ भयो"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"तातिएका कारण ट्याब्लेट अफ भयो"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"तपाईंको फोन अहिले सामान्य रूपमा चलिरहेको छ।\nथप जानकारीका लागि ट्याप गर्नुहोस्"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"तपाईंको डिभाइस अहिले सामान्य रूपमा चलिरहेको छ।\nथप जानकारीका लागि ट्याप गर्नुहोस्"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"तपाईंको ट्याब्लेट अहिले सामान्य रूपमा चलिरहेको छ।\nथप जानकारीका लागि ट्याप गर्नुहोस्"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"तपाईंको फोन अत्यधिक तातेका कारण सेलाउनका लागि अफ भयो। तपाईंको फोन अहिले सामान्य रूपमा चल्दै छ।\n\nतपाईंले निम्न कुरा गर्नुभयो भने तपाईंको फोन अत्यधिक तात्न सक्छ:\n	• धेरै स्रोत प्रयोग गर्ने एपहरू (गेमिङ, भिडियो वा नेभिगेसन एप जस्ता) प्रयोग गर्दा\n	• ठुला फाइलहरू डाउनलोड वा अपलोड गर्दा\n	• उच्च तापक्रममा फोन प्रयोग गर्दा"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"तपाईंको डिभाइस अत्यधिक तातेका कारण सेलाउनका लागि अफ भयो। तपाईंको डिभाइस अहिले सामान्य रूपमा चल्दै छ।\n\nतपाईंले निम्न कुरा गर्नुभयो भने तपाईंको डिभाइस अत्यधिक तात्न सक्छ:\n	• धेरै स्रोत प्रयोग गर्ने एपहरू (गेमिङ, भिडियो वा नेभिगेसन एप जस्ता) प्रयोग गर्दा\n	• ठुला फाइलहरू डाउनलोड वा अपलोड गर्दा\n	•उच्च तापक्रममा डिभाइस प्रयोग गर्दा"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"तपाईंको ट्याब्लेट अत्यधिक तातेका कारण सेलाउनका लागि अफ भयो। तपाईंको ट्याब्लेट अहिले सामान्य रूपमा चल्दै छ।\n\nतपाईंले निम्न कुरा गर्नुभयो भने तपाईंको ट्याब्लेट अत्यधिक तात्न सक्छ:\n	•धेरै स्रोत प्रयोग गर्ने एपहरू (गेमिङ, भिडियो वा नेभिगेसन एप जस्ता) प्रयोग गर्दा \n	• ठुला फाइलहरू डाउनलोड वा अपलोड गर्दा\n	• उच्च तापक्रममा ट्याब्लेट प्रयोग गर्दा"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"फोन तात्न थालेको छ"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"डिभाइस तात्न थालेको छ"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"ट्याब्लेट तात्न थालेको छ"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"फोन सेलाउने क्रममा गर्दा केही सुविधाहरू उपलब्ध हुँदैनन्।\nथप जानकारीका लागि ट्याप गर्नुहोस्"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"डिभाइस सेलाउने क्रममा केही सुविधाहरू उपलब्ध हुँदैनन्।\nथप जानकारीका लागि ट्याप गर्नुहोस्"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"ट्याब्लेट सेलाउने क्रममा केही सुविधाहरू उपलब्ध हुँदैनन्।\nथप जानकारीका लागि ट्याप गर्नुहोस्"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"तपाईंको फोनले स्वतः सेलाउने प्रयास गर्ने छ। तपाईं अझै पनि आफ्नो फोन प्रयोग गर्न सक्नुहुन्छ तर उक्त फोन अलि सुस्त चल्न सक्छ।\n\nसेलाइसकेपछि भने तपाईंको फोन पहिले जस्तै राम्ररी चल्न थाल्ने छ।"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"तपाईंको डिभाइसले स्वतः सेलाउने प्रयास गर्ने छ। तपाईं अझै पनि आफ्नो डिभाइस प्रयोग गर्न सक्नुहुन्छ तर उक्त डिभाइस अलि सुस्त चल्न सक्छ।\n\nसेलाइसकेपछि भने तपाईंको डिभाइस पहिले जस्तै राम्ररी चल्न थाल्ने छ।"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"तपाईंको ट्याब्लेटले स्वतः सेलाउने प्रयास गर्ने छ। तपाईं अझै पनि आफ्नो ट्याब्लेट प्रयोग गर्न सक्नुहुन्छ तर उक्त ट्याब्लेट अलि सुस्त चल्न सक्छ।\n\nसेलाइसकेपछि भने तपाईंको ट्याब्लेट पहिले जस्तै राम्ररी चल्न थाल्ने छ।"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"फिंगरप्रिन्ट सेन्सर पावर बटनमा हुन्छ। यो ट्याब्लेटको किनारामा रहेको थोरै उचालिएको भोल्युम बटनको छेउमा रहेको चेप्टो बटन नै पावर बटन हो।"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"फिंगरप्रिन्ट सेन्सर पावर बटनमा हुन्छ। यो डिभाइसको किनारामा रहेको थोरै उचालिएको भोल्युम बटनको छेउमा रहेको चेप्टो बटन नै पावर बटन हो।"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"फिंगरप्रिन्ट सेन्सर पावर बटनमा हुन्छ। यो फोनको किनारामा रहेको थोरै उचालिएको भोल्युम बटनको छेउमा रहेको चेप्टो बटन नै पावर बटन हो।"</string>
diff --git a/packages/SystemUI/res-product/values-nl/strings.xml b/packages/SystemUI/res-product/values-nl/strings.xml
index 6109e17..abdc7ee 100644
--- a/packages/SystemUI/res-product/values-nl/strings.xml
+++ b/packages/SystemUI/res-product/values-nl/strings.xml
@@ -40,9 +40,27 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Je hebt <xliff:g id="NUMBER">%d</xliff:g> mislukte pogingen ondernomen om de telefoon te ontgrendelen. Het werkprofiel wordt verwijderd, waardoor alle profielgegevens worden verwijderd."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Je hebt je ontgrendelingspatroon <xliff:g id="NUMBER_0">%1$d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%2$d</xliff:g> mislukte pogingen wordt je gevraagd je tablet te ontgrendelen via een e-mailaccount.\n\n Probeer het over <xliff:g id="NUMBER_2">%3$d</xliff:g> seconden opnieuw."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Je hebt je ontgrendelingspatroon <xliff:g id="NUMBER_0">%1$d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%2$d</xliff:g> mislukte pogingen wordt je gevraagd je telefoon te ontgrendelen via een e-mailaccount.\n\n Probeer het over <xliff:g id="NUMBER_2">%3$d</xliff:g> seconden opnieuw."</string>
-    <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Je vindt de vingerafdruksensor onder de aan/uit-knop. Het is de platte knop naast de verhoogde volumeknop aan de zijkant van de tablet."</string>
-    <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Je vindt de vingerafdruksensor onder de aan/uit-knop. Het is de platte knop naast de verhoogde volumeknop aan de zijkant van het apparaat."</string>
-    <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Je vindt de vingerafdruksensor onder de aan/uit-knop. Het is de platte knop naast de verhoogde volumeknop aan de zijkant van de telefoon."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefoon uitgezet wegens hitte"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Apparaat uitgezet wegens hitte"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet uitgezet wegens hitte"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Je telefoon functioneert nu weer zoals normaal.\nTik voor meer informatie"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Je apparaat functioneert nu weer zoals normaal.\nTik voor meer informatie"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Je tablet functioneert nu weer zoals normaal.\nTik voor meer informatie"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Je telefoon was te warm en is uitgezet om af te koelen. Je telefoon presteert nu weer zoals normaal.\n\nJe telefoon kan warm worden als je:\n	• bronintensieve apps gebruikt (zoals game-, video-, of navigatie-apps),\n	• grote bestanden up- of downloadt,\n	• je telefoon gebruikt bij hoge temperaturen."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Je apparaat was te warm en is uitgezet om af te koelen. Je apparaat presteert nu weer zoals normaal.\n\nJe apparaat kan warm worden als je:\n	• bronintensieve apps gebruikt (zoals game-, video-, of navigatie-apps),\n	• grote bestanden up- of downloadt,\n	• je apparaat gebruikt bij hoge temperaturen."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Je tablet was te warm en is uitgezet om af te koelen. Je tablet presteert nu weer zoals normaal.\n\nJe tablet kan warm worden als je:\n	• bronintensieve apps gebruikt (zoals game-, video-, of navigatie-apps),\n	• grote bestanden up- of downloadt,\n	• je tablet gebruikt bij hoge temperaturen."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"De telefoon wordt warm"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Het apparaat wordt warm"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"De tablet wordt warm"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Bepaalde functies zijn beperkt terwijl de telefoon afkoelt.\nTik voor meer informatie"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Bepaalde functies zijn beperkt terwijl het apparaat afkoelt.\nTik voor meer informatie"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Bepaalde functies zijn beperkt terwijl de tablet afkoelt.\nTik voor meer informatie"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Je telefoon probeert automatisch af te koelen. Je kunt je telefoon nog steeds gebruiken, maar deze kan langzamer werken.\n\nZodra de telefoon is afgekoeld, werkt deze weer normaal."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Je apparaat probeert automatisch af te koelen. Je kunt je apparaat nog steeds gebruiken, maar het kan langzamer werken.\n\nZodra het apparaat is afgekoeld, werkt het weer normaal."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Je tablet probeert automatisch af te koelen. Je kunt je tablet nog steeds gebruiken, maar deze kan langzamer werken.\n\nZodra de tablet is afgekoeld, werkt deze weer normaal."</string>
+    <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Je vindt de vingerafdruksensor op de aan/uit-knop. Het is de platte knop naast de verhoogde volumeknop aan de zijkant van de tablet."</string>
+    <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Je vindt de vingerafdruksensor op de aan/uit-knop. Het is de platte knop naast de verhoogde volumeknop aan de zijkant van het apparaat."</string>
+    <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Je vindt de vingerafdruksensor op de aan/uit-knop. Het is de platte knop naast de verhoogde volumeknop aan de zijkant van de telefoon."</string>
     <string name="global_action_lock_message" product="default" msgid="7092460751050168771">"Ontgrendel je telefoon voor meer opties"</string>
     <string name="global_action_lock_message" product="tablet" msgid="1024230056230539493">"Ontgrendel je tablet voor meer opties"</string>
     <string name="global_action_lock_message" product="device" msgid="3165224897120346096">"Ontgrendel je apparaat voor meer opties"</string>
diff --git a/packages/SystemUI/res-product/values-or/strings.xml b/packages/SystemUI/res-product/values-or/strings.xml
index dde1aa8..5d9345b 100644
--- a/packages/SystemUI/res-product/values-or/strings.xml
+++ b/packages/SystemUI/res-product/values-or/strings.xml
@@ -40,9 +40,27 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"ଆପଣ ଫୋନ୍‌କୁ ଅନ୍‌ଲକ୍ କରିବାକୁ<xliff:g id="NUMBER">%d</xliff:g>ଥର ଭୁଲ ପ୍ରୟାସ କରିଛନ୍ତି। କାର୍ଯ୍ୟ ପ୍ରୋଫାଇଲ୍ ବାହାର କରିଦିଆଯିବ, ଯାହା ଫଳରେ ସମସ୍ତ ପ୍ରୋଫାଇଲ୍ ଡାଟା ଡିଲିଟ୍ ହେବ।"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"ଆପଣ ଆପଣଙ୍କ ଅନ୍‌ଲକ୍ ପାଟର୍ନକୁ <xliff:g id="NUMBER_0">%1$d</xliff:g>ଥର ଭୁଲ ଭାବେ ଡ୍ର କରିଛନ୍ତି। ଆଉ <xliff:g id="NUMBER_1">%2$d</xliff:g>ଟି ଭୁଲ ପ୍ରୟାସ ପରେ ଆପଣଙ୍କୁ ଏକ ଇମେଲ୍ ଆକାଉଣ୍ଟ ବ୍ୟବହାର କରି ଆପଣଙ୍କ ଟାବ୍‌ଲୋଟ୍‌କୁ ଅନ୍‌ଲକ୍ କରିବା ପାଇଁ କୁହାଯିବ।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"ଆପଣ ଆପଣଙ୍କ ଅନ୍‌ଲକ୍ ପାଟର୍ନକୁ <xliff:g id="NUMBER_0">%1$d</xliff:g>ଥର ଭୁଲ ଭାବେ ଡ୍ର କରିଛନ୍ତି। ଆଉ <xliff:g id="NUMBER_1">%2$d</xliff:g>ଟି ଭୁଲ ପ୍ରୟାସ ପରେ ଆପଣଙ୍କୁ ଏକ ଇମେଲ୍ ଆକାଉଣ୍ଟ ବ୍ୟବହାର କରି ଆପଣଙ୍କ ଫୋନ୍‌କୁ ଅନ୍‌ଲକ୍‌ କରିବା ପାଇଁ କୁହାଯିବ।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"ଗରମ ହେବା ଯୋଗୁଁ ଫୋନଟି ବନ୍ଦ ହୋଇଯାଇଛି"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"ଗରମ ହେବା ଯୋଗୁଁ ଡିଭାଇସଟି ବନ୍ଦ ହୋଇଯାଇଛି"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"ଗରମ ହେବା ଯୋଗୁଁ ଟାବଲେଟଟି ବନ୍ଦ ହୋଇଯାଇଛି"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"ଆପଣଙ୍କ ଫୋନ ବର୍ତ୍ତମାନ ସ୍ୱାଭାବିକ ଭାବେ ଚାଲୁଛି।\nଅଧିକ ସୂଚନା ପାଇଁ ଟାପ କରନ୍ତୁ"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"ଆପଣଙ୍କ ଡିଭାଇସ ବର୍ତ୍ତମାନ ସ୍ୱାଭାବିକ ଭାବେ ଚାଲୁଛି।\nଅଧିକ ସୂଚନା ପାଇଁ ଟାପ କରନ୍ତୁ"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"ଆପଣଙ୍କ ଟାବଲେଟ ବର୍ତ୍ତମାନ ସ୍ୱାଭାବିକ ଭାବେ ଚାଲୁଛି।\nଅଧିକ ସୂଚନା ପାଇଁ ଟାପ କରନ୍ତୁ"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"ଆପଣଙ୍କ ଫୋନଟି ଅତ୍ୟଧିକ ଗରମ ଥିବା ଯୋଗୁଁ ଥଣ୍ଡା କରାଯିବାକୁ ଏହାକୁ ବନ୍ଦ କରାଯାଇଛି। ଆପଣଙ୍କ ଫୋନ ବର୍ତ୍ତମାନ ସ୍ୱାଭାବିକ ଭାବେ ଚାଲୁଛି।\n\nଆପଣଙ୍କ ଫୋନ ଅତ୍ୟଧିକ ଗରମ ହୋଇଯାଇପାରେ ଯଦି ଆପଣ:\n	• ରିସୋର୍ସ-ଇଣ୍ଟେନସିଭ ଆପ୍ସ (ଯେପରି ଗେମିଂ, ଭିଡିଓ କିମ୍ବା ନେଭିଗେସନ ଆପ୍ସ) ବ୍ୟବହାର କରନ୍ତି\n	• ବଡ଼ ଫାଇଲଗୁଡ଼ିକ ଡାଉନଲୋଡ କିମ୍ବା ଅପଲୋଡ କରନ୍ତି\n	• ଅଧିକ ତାପମାତ୍ରାରେ ଆପଣଙ୍କ ଫୋନ ବ୍ୟବହାର କରନ୍ତି"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"ଆପଣଙ୍କ ଡିଭାଇସଟି ଅତ୍ୟଧିକ ଗରମ ଥିବା ଯୋଗୁଁ ଥଣ୍ଡା କରାଯିବାକୁ ଏହାକୁ ବନ୍ଦ କରାଯାଇଛି। ଆପଣଙ୍କ ଡିଭାଇସ ବର୍ତ୍ତମାନ ସ୍ୱାଭାବିକ ଭାବେ ଚାଲୁଛି।\n\nଆପଣଙ୍କ ଡିଭାଇସ ଅତ୍ୟଧିକ ଗରମ ହୋଇଯାଇପାରେ ଯଦି ଆପଣ:\n	• ରିସୋର୍ସ-ଇଣ୍ଟେନସିଭ ଆପ୍ସ (ଯେପରି ଗେମିଂ, ଭିଡିଓ କିମ୍ବା ନେଭିଗେସନ ଆପ୍ସ) ବ୍ୟବହାର କରନ୍ତି\n	• ବଡ଼ ଫାଇଲଗୁଡ଼ିକ ଡାଉନଲୋଡ କିମ୍ବା ଅପଲୋଡ କରନ୍ତି\n	• ଅଧିକ ତାପମାତ୍ରାରେ ଆପଣଙ୍କ ଡିଭାଇସ ବ୍ୟବହାର କରନ୍ତି"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"ଆପଣଙ୍କ ଟାବଲେଟଟି ଅତ୍ୟଧିକ ଗରମ ଥିବା ଯୋଗୁଁ ଥଣ୍ଡା କରାଯିବାକୁ ଏହାକୁ ବନ୍ଦ କରାଯାଇଛି। ଆପଣଙ୍କ ଟାବଲେଟ ବର୍ତ୍ତମାନ ସ୍ୱାଭାବିକ ଭାବେ ଚାଲୁଛି।\n\nଆପଣଙ୍କ ଟାବଲେଟ ଅତ୍ୟଧିକ ଗରମ ହୋଇଯାଇପାରେ ଯଦି ଆପଣ:\n	• ରିସୋର୍ସ-ଇଣ୍ଟେନସିଭ ଆପ୍ସ (ଯେପରି ଗେମିଂ, ଭିଡିଓ କିମ୍ବା ନେଭିଗେସନ ଆପ୍ସ) ବ୍ୟବହାର କରନ୍ତି\n	• ବଡ଼ ଫାଇଲଗୁଡ଼ିକ ଡାଉନଲୋଡ କିମ୍ବା ଅପଲୋଡ କରନ୍ତି\n	• ଅଧିକ ତାପମାତ୍ରାରେ ଆପଣଙ୍କ ଟାବଲେଟ ବ୍ୟବହାର କରନ୍ତି"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"ଫୋନଟି ଗରମ ହେଉଛି"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"ଡିଭାଇସଟି ଗରମ ହେଉଛି"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"ଟାବଲେଟଟି ଗରମ ହେଉଛି"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"ଫୋନ ଥଣ୍ଡା ହେବା ସମୟରେ କିଛି ଫିଚର ସୀମିତ ଅଟେ।\nଅଧିକ ସୂଚନା ପାଇଁ ଟାପ କରନ୍ତୁ"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"ଡିଭାଇସ ଥଣ୍ଡା ହେବା ସମୟରେ କିଛି ଫିଚର ସୀମିତ ଅଟେ।\nଅଧିକ ସୂଚନା ପାଇଁ ଟାପ କରନ୍ତୁ"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"ଟାବଲେଟ ଥଣ୍ଡା ହେବା ସମୟରେ କିଛି ଫିଚର ସୀମିତ ଅଟେ।\nଅଧିକ ସୂଚନା ପାଇଁ ଟାପ କରନ୍ତୁ"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"ଆପଣଙ୍କ ଫୋନ ସ୍ୱତଃ ଥଣ୍ଡା ହେବାକୁ ଚେଷ୍ଟା କରିବ। ଆପଣ ଏବେ ବି ଆପଣଙ୍କ ଫୋନ ବ୍ୟବହାର କରିପାରିବେ, କିନ୍ତୁ ଏହା ଧୀରେ ଚାଲିପାରେ।\n\nଆପଣଙ୍କ ଫୋନ ଥଣ୍ଡା ହୋଇଯିବା ପରେ ଏହା ସ୍ୱାଭାବିକ ଭାବେ ଚାଲିବ।"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"ଆପଣଙ୍କ ଡିଭାଇସ ସ୍ୱତଃ ଥଣ୍ଡା ହେବାକୁ ଚେଷ୍ଟା କରିବ। ଆପଣ ଏବେ ବି ଆପଣଙ୍କ ଡିଭାଇସ ବ୍ୟବହାର କରିପାରିବେ, କିନ୍ତୁ ଏହା ଧୀରେ ଚାଲିପାରେ।\n\nଆପଣଙ୍କ ଡିଭାଇସ ଥଣ୍ଡା ହୋଇଯିବା ପରେ ଏହା ସ୍ୱାଭାବିକ ଭାବେ ଚାଲିବ।"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"ଆପଣଙ୍କ ଟାବଲେଟ ସ୍ୱତଃ ଥଣ୍ଡା ହେବାକୁ ଚେଷ୍ଟା କରିବ। ଆପଣ ଏବେ ବି ଆପଣଙ୍କ ଟାବଲେଟ ବ୍ୟବହାର କରିପାରିବେ, କିନ୍ତୁ ଏହା ଧୀରେ ଚାଲିପାରେ।\n\nଆପଣଙ୍କ ଟାବଲେଟ ଥଣ୍ଡା ହୋଇଯିବା ପରେ ଏହା ସ୍ୱାଭାବିକ ଭାବେ ଚାଲିବ।"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"ଟିପଚିହ୍ନ ସେନ୍ସର ପାୱାର ବଟନରେ ଅଛି। ଏହା ଟାବଲେଟର ଧାରରେ ବଢ଼ାଯାଇଥିବା ଭଲ୍ୟୁମ ବଟନ ପାଖରେ ଥିବା ଫ୍ଲାଟ ବଟନ ଅଟେ।"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"ଟିପଚିହ୍ନ ସେନ୍ସର ପାୱାର ବଟନରେ ଅଛି। ଏହା ଡିଭାଇସର ଧାରରେ ବଢ଼ାଯାଇଥିବା ଭଲ୍ୟୁମ ବଟନ ପାଖରେ ଥିବା ଫ୍ଲାଟ ବଟନ ଅଟେ।"</string>
-    <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"ଟିପଚିହ୍ନ ସେନ୍ସର ପାୱାର ବଟନରେ ଅଛି। ଏହା ଫୋନର ଧାରରେ ବଢ଼ାଯାଇଥିବା ଭଲ୍ୟୁମ ବଟନ ପାଖରେ ଥିବା ଫ୍ଲାଟ ବଟନ ଅଟେ।"</string>
+    <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"ଟିପଚିହ୍ନ ସେନ୍ସର ପାୱାର ବଟନରେ ଅଛି। ଏହା ଫୋନର ଧାରରେ ଉଠି ରହିଥିବା ଭଲ୍ୟୁମ ବଟନ ପାଖରେ ଥିବା ଫ୍ଲାଟ ବଟନ ଅଟେ।"</string>
     <string name="global_action_lock_message" product="default" msgid="7092460751050168771">"ଅଧିକ ବିକଳ୍ପ ପାଇଁ ଆପଣଙ୍କ ଫୋନ୍ ଅନଲକ୍ କରନ୍ତୁ"</string>
     <string name="global_action_lock_message" product="tablet" msgid="1024230056230539493">"ଅଧିକ ବିକଳ୍ପ ପାଇଁ ଆପଣଙ୍କ ଟାବଲେଟ୍ ଅନଲକ୍ କରନ୍ତୁ"</string>
     <string name="global_action_lock_message" product="device" msgid="3165224897120346096">"ଅଧିକ ବିକଳ୍ପ ପାଇଁ ଆପଣଙ୍କ ଡିଭାଇସ୍ ଅନଲକ୍ କରନ୍ତୁ"</string>
diff --git a/packages/SystemUI/res-product/values-pa/strings.xml b/packages/SystemUI/res-product/values-pa/strings.xml
index 38fd890..81b047c 100644
--- a/packages/SystemUI/res-product/values-pa/strings.xml
+++ b/packages/SystemUI/res-product/values-pa/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"ਤੁਸੀਂ <xliff:g id="NUMBER">%d</xliff:g> ਵਾਰ ਗਲਤ ਢੰਗ ਨਾਲ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ। ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਹਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਜਿਸ ਨਾਲ ਸਾਰਾ ਪ੍ਰੋਫਾਈਲ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਆਪਣਾ ਅਣਲਾਕ ਪੈਟਰਨ ਗਲਤ ਢੰਗ ਨਾਲ ਉਲੀਕਿਆ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਨੂੰ ਇੱਕ ਈਮੇਲ ਖਾਤਾ ਵਰਤਦੇ ਹੋਏ ਆਪਣੇ ਟੈਬਲੈੱਟ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ ਕਿਹਾ ਜਾਵੇਗਾ।\n\n<xliff:g id="NUMBER_2">%3$d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਆਪਣਾ ਅਣਲਾਕ ਪੈਟਰਨ ਗਲਤ ਢੰਗ ਨਾਲ ਡ੍ਰਾ ਕੀਤਾ ਹੈ। <xliff:g id="NUMBER_1">%2$d</xliff:g> ਹੋਰ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਨੂੰ ਇੱਕ ਈਮੇਲ ਖਾਤਾ ਵਰਤਦੇ ਹੋਏ ਆਪਣਾ ਫ਼ੋਨ ਅਣਲਾਕ ਕਰਨ ਲਈ ਕਿਹਾ ਜਾਏਗਾ।\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"ਗਰਮ ਹੋਣ ਕਰਕੇ ਫ਼ੋਨ ਬੰਦ ਹੋ ਗਿਆ"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"ਗਰਮ ਹੋਣ ਕਰਕੇ ਡੀਵਾਈਸ ਬੰਦ ਹੋ ਗਿਆ"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"ਗਰਮ ਹੋਣ ਕਰਕੇ ਟੈਬਲੈੱਟ ਬੰਦ ਹੋ ਗਿਆ"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਹੁਣ ਸਹੀ ਚੱਲ ਰਿਹਾ ਹੈ।\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ ਟੈਪ ਕਰੋ"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਹੁਣ ਸਹੀ ਚੱਲ ਰਿਹਾ ਹੈ।\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ ਟੈਪ ਕਰੋ"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"ਤੁਹਾਡਾ ਟੈਬਲੈੱਟ ਹੁਣ ਸਹੀ ਚੱਲ ਰਿਹਾ ਹੈ।\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ ਟੈਪ ਕਰੋ"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਬਹੁਤ ਗਰਮ ਸੀ, ਇਸ ਲਈ ਇਹ ਠੰਡਾ ਹੋਣ ਵਾਸਤੇ ਬੰਦ ਹੋ ਗਿਆ ਸੀ। ਤੁਹਾਡਾ ਫ਼ੋਨ ਹੁਣ ਸਹੀ ਚੱਲ ਰਿਹਾ ਹੈ।\n\nਤੁਹਾਡਾ ਫ਼ੋਨ ਬਹੁਤ ਗਰਮ ਹੋ ਸਕਦਾ ਹੈ ਜੇ:\n	• ਤੁਸੀਂ ਸਰੋਤਾਂ ਦੀ ਵੱਧ ਵਰਤੋਂ ਵਾਲੀਆਂ ਐਪਾਂ (ਜਿਵੇਂ ਗੇਮਿੰਗ, ਵੀਡੀਓ, ਜਾਂ ਦਿਸ਼ਾ-ਨਿਰਦੇਸ਼ ਐਪਾਂ) ਵਰਤਦੇ ਹੋ\n	• ਵੱਡੀਆਂ ਫ਼ਾਈਲਾਂ ਡਾਊਨਲੋਡ ਜਾਂ ਅੱਪਲੋਡ ਕਰਦੇ ਹੋ\n	• ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਉੱਚ ਤਾਪਮਾਨਾਂ ਵਿੱਚ ਵਰਤਦੇ ਹੋ"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਬਹੁਤ ਗਰਮ ਸੀ, ਇਸ ਲਈ ਇਹ ਠੰਡਾ ਹੋਣ ਵਾਸਤੇ ਬੰਦ ਹੋ ਗਿਆ ਸੀ। ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਹੁਣ ਸਹੀ ਚੱਲ ਰਿਹਾ ਹੈ।\n\nਤੁਹਾਡਾ ਡੀਵਾਈਸ ਬਹੁਤ ਗਰਮ ਹੋ ਸਕਦਾ ਹੈ ਜੇ:\n	• ਤੁਸੀਂ ਸਰੋਤਾਂ ਦੀ ਵੱਧ ਵਰਤੋਂ ਵਾਲੀਆਂ ਐਪਾਂ (ਜਿਵੇਂ ਗੇਮਿੰਗ, ਵੀਡੀਓ, ਜਾਂ ਦਿਸ਼ਾ-ਨਿਰਦੇਸ਼ ਐਪਾਂ) ਵਰਤਦੇ ਹੋ\n	• ਵੱਡੀਆਂ ਫ਼ਾਈਲਾਂ ਡਾਊਨਲੋਡ ਜਾਂ ਅੱਪਲੋਡ ਕਰਦੇ ਹੋ\n	• ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਉੱਚ ਤਾਪਮਾਨਾਂ ਵਿੱਚ ਵਰਤਦੇ ਹੋ"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"ਤੁਹਾਡਾ ਟੈਬਲੈੱਟ ਬਹੁਤ ਗਰਮ ਸੀ, ਇਸ ਲਈ ਇਹ ਠੰਡਾ ਹੋਣ ਵਾਸਤੇ ਬੰਦ ਹੋ ਗਿਆ ਸੀ। ਤੁਹਾਡਾ ਟੈਬਲੈੱਟ ਹੁਣ ਸਹੀ ਚੱਲ ਰਿਹਾ ਹੈ।\n\nਤੁਹਾਡਾ ਟੈਬਲੈੱਟ ਬਹੁਤ ਗਰਮ ਹੋ ਸਕਦਾ ਹੈ ਜੇ:\n	• ਤੁਸੀਂ ਸਰੋਤਾਂ ਦੀ ਵੱਧ ਵਰਤੋਂ ਵਾਲੀਆਂ ਐਪਾਂ (ਜਿਵੇਂ ਗੇਮਿੰਗ, ਵੀਡੀਓ, ਜਾਂ ਦਿਸ਼ਾ-ਨਿਰਦੇਸ਼ ਐਪਾਂ) ਵਰਤਦੇ ਹੋ\n	• ਵੱਡੀਆਂ ਫ਼ਾਈਲਾਂ ਡਾਊਨਲੋਡ ਜਾਂ ਅੱਪਲੋਡ ਕਰਦੇ ਹੋ\n	• ਆਪਣੇ ਟੈਬਲੈੱਟ ਨੂੰ ਉੱਚ ਤਾਪਮਾਨਾਂ ਵਿੱਚ ਵਰਤਦੇ ਹੋ"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"ਫ਼ੋਨ ਗਰਮ ਹੋ ਰਿਹਾ ਹੈ"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"ਡੀਵਾਈਸ ਗਰਮ ਹੋ ਰਿਹਾ ਹੈ"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"ਟੈਬਲੈੱਟ ਗਰਮ ਹੋ ਰਿਹਾ ਹੈ"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"ਫ਼ੋਨ ਦੇ ਠੰਡਾ ਹੋਣ ਦੇ ਦੌਰਾਨ ਕੁਝ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਸੀਮਤ ਹੁੰਦੀਆਂ ਹਨ।\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ ਟੈਪ ਕਰੋ"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"ਡੀਵਾਈਸ ਦੇ ਠੰਡਾ ਹੋਣ ਦੇ ਦੌਰਾਨ ਕੁਝ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਸੀਮਤ ਹੁੰਦੀਆਂ ਹਨ।\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ ਟੈਪ ਕਰੋ"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"ਟੈਬਲੈੱਟ ਦੇ ਠੰਡਾ ਹੋਣ ਦੇ ਦੌਰਾਨ ਕੁਝ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਸੀਮਤ ਹੁੰਦੀਆਂ ਹਨ।\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ ਟੈਪ ਕਰੋ"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਆਪਣੇ-ਆਪ ਠੰਡਾ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੇਗਾ। ਤੁਸੀਂ ਹਾਲੇ ਵੀ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਵਰਤ ਸਕਦੇ ਹੋ, ਪਰ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਇਹ ਹੌਲੀ ਚੱਲੇ।\n\nਠੰਡਾ ਹੋਣ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਡਾ ਫ਼ੋਨ ਆਮ ਵਾਂਗ ਚੱਲੇਗਾ।"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਆਪਣੇ-ਆਪ ਠੰਡਾ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੇਗਾ। ਤੁਸੀਂ ਹਾਲੇ ਵੀ ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਵਰਤ ਸਕਦੇ ਹੋ, ਪਰ ਹੋ ਸਕਦਾ ਹੈ ਇਹ ਹੌਲੀ ਚੱਲੇ।\n\nਠੰਡਾ ਹੋਣ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਆਮ ਵਾਂਗ ਚੱਲੇਗਾ।"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"ਤੁਹਾਡਾ ਟੈਬਲੈੱਟ ਆਪਣੇ-ਆਪ ਠੰਡਾ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੇਗਾ। ਤੁਸੀਂ ਹਾਲੇ ਵੀ ਆਪਣੇ ਟੈਬਲੈੱਟ ਨੂੰ ਵਰਤ ਸਕਦੇ ਹੋ, ਪਰ ਹੋ ਸਕਦਾ ਹੈ ਇਹ ਹੌਲੀ ਚੱਲੇ।\n\nਠੰਡਾ ਹੋਣ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਡਾ ਟੈਬਲੈੱਟ ਆਮ ਵਾਂਗ ਚੱਲੇਗਾ।"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਪਾਵਰ ਬਟਨ \'ਤੇ ਹੈ। ਇਹ ਟੈਬਲੈੱਟ ਦੇ ਕਿਨਾਰੇ \'ਤੇ ਅਜਿਹਾ ਸਮਤਲ ਬਟਨ ਹੁੰਦਾ ਹੈ ਜੋ ਉੱਭਰੇ ਹੋਏ ਅਵਾਜ਼ ਬਟਨ ਦੇ ਅੱਗੇ ਹੁੰਦਾ ਹੈ।"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਪਾਵਰ ਬਟਨ \'ਤੇ ਹੈ। ਇਹ ਡੀਵਾਈਸ ਦੇ ਕਿਨਾਰੇ \'ਤੇ ਅਜਿਹਾ ਸਮਤਲ ਬਟਨ ਹੁੰਦਾ ਹੈ ਜੋ ਉੱਭਰੇ ਹੋਏ ਅਵਾਜ਼ ਬਟਨ ਦੇ ਅੱਗੇ ਹੁੰਦਾ ਹੈ।"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਪਾਵਰ ਬਟਨ \'ਤੇ ਹੈ। ਇਹ ਫ਼ੋਨ ਦੇ ਕਿਨਾਰੇ \'ਤੇ ਅਜਿਹਾ ਸਮਤਲ ਬਟਨ ਹੁੰਦਾ ਹੈ ਜੋ ਉੱਭਰੇ ਹੋਏ ਅਵਾਜ਼ ਬਟਨ ਦੇ ਅੱਗੇ ਹੁੰਦਾ ਹੈ।"</string>
diff --git a/packages/SystemUI/res-product/values-pl/strings.xml b/packages/SystemUI/res-product/values-pl/strings.xml
index 7dc2ded..286a242 100644
--- a/packages/SystemUI/res-product/values-pl/strings.xml
+++ b/packages/SystemUI/res-product/values-pl/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Po raz <xliff:g id="NUMBER">%d</xliff:g> próbowano nieprawidłowo odblokować telefon. Profil służbowy zostanie usunięty, co spowoduje skasowanie wszystkich jego danych."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Po raz <xliff:g id="NUMBER_0">%1$d</xliff:g> nieprawidłowo narysowano wzór odblokowania. Po kolejnych <xliff:g id="NUMBER_1">%2$d</xliff:g> nieudanych próbach konieczne będzie odblokowanie tabletu przy użyciu konta e-mail.\n\n Spróbuj ponownie za <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Po raz <xliff:g id="NUMBER_0">%1$d</xliff:g> nieprawidłowo narysowano wzór odblokowania. Po kolejnych <xliff:g id="NUMBER_1">%2$d</xliff:g> nieudanych próbach konieczne będzie odblokowanie telefonu przy użyciu konta e-mail.\n\n Spróbuj ponownie za <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefon wyłączony: przegrzanie"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Urządzenie wyłączone: przegrzanie"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet wyłączony: przegrzanie"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Telefon działa teraz normalnie.\nKliknij, aby dowiedzieć się więcej"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Urządzenie działa teraz normalnie.\nKliknij, aby dowiedzieć się więcej"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Tablet działa teraz normalnie.\nKliknij, aby dowiedzieć się więcej"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefon był zbyt gorący i wyłączył się, aby obniżyć temperaturę. Działa teraz normalnie.\n\nTelefon może się przegrzać, gdy:\n	• używasz aplikacji zużywających dużo zasobów (np. aplikacji do gier, nawigacji lub odtwarzania filmów);\n	• pobierasz lub przesyłasz duże pliki;\n	• używasz go w wysokiej temperaturze."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Urządzenie było zbyt gorące i wyłączyło się, aby obniżyć temperaturę. Działa teraz normalnie.\n\nUrządzenie może się przegrzać, gdy:\n	• używasz aplikacji zużywających dużo zasobów (np. aplikacji do gier, nawigacji lub odtwarzania filmów);\n	• pobierasz lub przesyłasz duże pliki;\n	• używasz go w wysokiej temperaturze."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tablet był zbyt gorący i wyłączył się, aby obniżyć temperaturę. Działa teraz normalnie.\n\nTablet może się przegrzać, gdy:\n	• używasz aplikacji zużywających dużo zasobów (np. aplikacji do gier, nawigacji lub odtwarzania filmów);\n	• pobierasz lub przesyłasz duże pliki;\n	• używasz go w wysokiej temperaturze."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefon się nagrzewa"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Urządzenie się nagrzewa"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet się nagrzewa"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Podczas obniżania temperatury telefonu niektóre funkcje są ograniczone.\nKliknij, aby dowiedzieć się więcej"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Podczas obniżania temperatury urządzenia niektóre funkcje są ograniczone.\nKliknij, aby dowiedzieć się więcej"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Podczas obniżania temperatury tabletu niektóre funkcje są ograniczone.\nKliknij, aby dowiedzieć się więcej"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefon automatycznie podejmie próbę obniżenia temperatury. Możesz go wciąż używać, ale może działać wolniej.\n\nGdy temperatura się obniży, telefon będzie działać normalnie."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Urządzenie automatycznie podejmie próbę obniżenia temperatury. Możesz go wciąż używać, ale może działać wolniej.\n\nGdy temperatura się obniży, urządzenie będzie działać normalnie."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Tablet automatycznie podejmie próbę obniżenia temperatury. Możesz go wciąż używać, ale może działać wolniej.\n\nGdy temperatura się obniży, tablet będzie działać normalnie."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Czytnik linii papilarnych znajduje się na przycisku zasilania. To płaski przycisk przy uniesionym przycisku głośności na krawędzi tabletu."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Czytnik linii papilarnych znajduje się na przycisku zasilania. To płaski przycisk przy uniesionym przycisku głośności na krawędzi urządzenia."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Czytnik linii papilarnych znajduje się na przycisku zasilania. To płaski przycisk przy uniesionym przycisku głośności na krawędzi telefonu."</string>
diff --git a/packages/SystemUI/res-product/values-pt-rBR/strings.xml b/packages/SystemUI/res-product/values-pt-rBR/strings.xml
index 53efe3e..3d6d890 100644
--- a/packages/SystemUI/res-product/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res-product/values-pt-rBR/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Você tentou desbloquear o smartphone incorretamente <xliff:g id="NUMBER">%d</xliff:g> vezes. O perfil de trabalho será removido, o que excluirá todos os dados do perfil."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Você desenhou seu padrão de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Se fizer mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas incorretas, será solicitado que você use uma conta de e-mail para desbloquear o tablet.\n\n Tente novamente em <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Você desenhou seu padrão de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Se fizer mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas incorretas, será solicitado que você use uma conta de e-mail para desbloquear o smartphone.\n\n Tente novamente em <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Smartphone desligado por superaquecimento"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Dispositivo desligado por superaquecimento"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet desligado por superaquecimento"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"O smartphone está funcionando normalmente agora.\nToque para saber mais"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"O dispositivo está funcionando normalmente agora.\nToque para saber mais"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"O tablet está funcionando normalmente agora.\nToque para saber mais"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"O smartphone estava muito quente e foi desligado para resfriar. Agora, ele está funcionando normalmente.\n\nO smartphone pode ficar quente demais se você:\n	• usar apps que consomem muitos recursos (como apps de jogos, vídeos ou navegação);\n	• fizer o download ou upload de arquivos grandes;\n	• usar o smartphone em temperaturas altas."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"O dispositivo estava muito quente e foi desligado para resfriar. Agora, ele está funcionando normalmente.\n\nO dispositivo pode ficar quente demais se você:\n	• usa apps que consomem muitos recursos (como apps de jogos, vídeos ou navegação);\n	• faz download ou upload de arquivos grandes;\n	• usa o dispositivo em temperaturas altas."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"O tablet estava muito quente e foi desligado para resfriar. Agora, ele está funcionando normalmente.\n\nO tablet pode ficar quente demais se você:\n	• usar apps que consomem muitos recursos (como apps de jogos, vídeos ou navegação);\n	• fizer download ou upload de arquivos grandes;\n	• usar o tablet em temperaturas altas."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"O smartphone está esquentando"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"O dispositivo está esquentando"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"O tablet está esquentando"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Alguns recursos ficam limitados enquanto o smartphone é resfriado.\nToque para saber mais"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Alguns recursos ficam limitados enquanto o dispositivo é resfriado.\nToque para saber mais"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Alguns recursos ficam limitados enquanto o tablet é resfriado.\nToque para saber mais"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Seu smartphone tentará se resfriar automaticamente. Você ainda poderá usá-lo, mas talvez ele fique mais lento.\n\nQuando o smartphone estiver resfriado, ele voltará ao normal."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Seu dispositivo vai tentar se resfriar automaticamente. Você ainda poderá usá-lo, mas talvez ele fique mais lento.\n\nDepois de resfriado, o dispositivo volta ao normal."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Seu tablet vai tentar se resfriar automaticamente. Você ainda poderá usá-lo, mas talvez ele fique mais lento.\n\nDepois de resfriado, o tablet volta ao normal."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"O sensor de impressão digital fica no botão liga/desliga. Ele é plano e está ao lado do botão de volume na borda do tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"O sensor de impressão digital fica no botão liga/desliga. Ele é plano e está ao lado do botão de volume na borda do dispositivo."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"O sensor de impressão digital fica no botão liga/desliga. Ele é plano e está ao lado do botão de volume na borda do smartphone."</string>
diff --git a/packages/SystemUI/res-product/values-pt-rPT/strings.xml b/packages/SystemUI/res-product/values-pt-rPT/strings.xml
index 29a2001..40c7e53 100644
--- a/packages/SystemUI/res-product/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res-product/values-pt-rPT/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Tentou desbloquear incorretamente o telemóvel <xliff:g id="NUMBER">%d</xliff:g> vezes. O perfil de trabalho será removido, o que eliminará todos os dados do mesmo."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Desenhou o padrão de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Após mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem êxito, ser-lhe-á pedido para desbloquear o tablet através de uma conta de email.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Desenhou o padrão de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Após mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas sem êxito, ser-lhe-á pedido para desbloquear o telemóvel através de uma conta de email.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telemóvel desligado devido ao calor"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Dispositivo desligado devido ao calor"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet desligado devido ao calor"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"O seu telemóvel já está a funcionar normalmente.\nToque para obter mais informações"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"O seu dispositivo já está a funcionar normalmente.\nToque para obter mais informações"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"O seu tablet já está a funcionar normalmente.\nToque para obter mais informações"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"O telemóvel estava muito quente, por isso desligou-se para arrefecer. Agora funciona normalmente.\n\nO telemóvel pode sobreaquecer se:\n	• Usar apps que exigem mais recursos (jogos, vídeo ou apps de navegação)\n	• Transferir ou carregar ficheiros grandes\n	• For usado em altas temperaturas"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"O dispositivo estava muito quente, por isso desligou-se para arrefecer. Agora funciona normalmente.\n\nO dispositivo pode sobreaquecer se:\n	• Usar apps que exigem mais recursos (jogos, vídeo ou apps de navegação)\n	• Transferir ou carregar ficheiros grandes\n	• For usado em altas temperaturas"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"O tablet estava muito quente, por isso desligou-se para arrefecer. Agora funciona normalmente.\n\nO tablet pode sobreaquecer se:\n	• Usar apps que exigem mais recursos (jogos, vídeo ou apps de navegação)\n	• Transferir ou carregar ficheiros grandes\n	• For usado em altas temperaturas"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"O telemóvel está a aquecer"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"O dispositivo está a aquecer"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"O tablet está a aquecer"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Algumas funcionalidades são limitadas enquanto o telemóvel arrefece.\nToque para obter mais informações"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Algumas funcionalidades são limitadas enquanto o dispositivo arrefece.\nToque para obter mais informações"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Algumas funcionalidades são limitadas enquanto o tablet arrefece.\nToque para obter mais informações"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Pode continuar a usá-lo, mas este pode funcionar mais lentamente.\n\nAssim que o telemóvel tiver arrefecido, vai funcionar normalmente."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"O dispositivo vai tentar arrefecer automaticamente. Pode continuar a usá-lo, mas este pode funcionar mais lentamente.\n\nAssim que o dispositivo tiver arrefecido, vai funcionar normalmente."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"O tablet vai tentar arrefecer automaticamente. Pode continuar a usá-lo, mas este pode funcionar mais lentamente.\n\nAssim que o tablet tiver arrefecido, vai funcionar normalmente."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"O sensor de impressões digitais encontra-se no botão ligar/desligar. É o botão sem relevo junto ao botão de volume com relevo na extremidade do tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"O sensor de impressões digitais encontra-se no botão ligar/desligar. É o botão sem relevo junto ao botão de volume com relevo na extremidade do dispositivo."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"O sensor de impressões digitais encontra-se no botão ligar/desligar. É o botão sem relevo junto ao botão de volume com relevo na extremidade do telemóvel."</string>
diff --git a/packages/SystemUI/res-product/values-pt/strings.xml b/packages/SystemUI/res-product/values-pt/strings.xml
index 53efe3e..3d6d890 100644
--- a/packages/SystemUI/res-product/values-pt/strings.xml
+++ b/packages/SystemUI/res-product/values-pt/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Você tentou desbloquear o smartphone incorretamente <xliff:g id="NUMBER">%d</xliff:g> vezes. O perfil de trabalho será removido, o que excluirá todos os dados do perfil."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Você desenhou seu padrão de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Se fizer mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas incorretas, será solicitado que você use uma conta de e-mail para desbloquear o tablet.\n\n Tente novamente em <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Você desenhou seu padrão de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. Se fizer mais <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativas incorretas, será solicitado que você use uma conta de e-mail para desbloquear o smartphone.\n\n Tente novamente em <xliff:g id="NUMBER_2">%3$d</xliff:g> segundos."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Smartphone desligado por superaquecimento"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Dispositivo desligado por superaquecimento"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet desligado por superaquecimento"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"O smartphone está funcionando normalmente agora.\nToque para saber mais"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"O dispositivo está funcionando normalmente agora.\nToque para saber mais"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"O tablet está funcionando normalmente agora.\nToque para saber mais"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"O smartphone estava muito quente e foi desligado para resfriar. Agora, ele está funcionando normalmente.\n\nO smartphone pode ficar quente demais se você:\n	• usar apps que consomem muitos recursos (como apps de jogos, vídeos ou navegação);\n	• fizer o download ou upload de arquivos grandes;\n	• usar o smartphone em temperaturas altas."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"O dispositivo estava muito quente e foi desligado para resfriar. Agora, ele está funcionando normalmente.\n\nO dispositivo pode ficar quente demais se você:\n	• usa apps que consomem muitos recursos (como apps de jogos, vídeos ou navegação);\n	• faz download ou upload de arquivos grandes;\n	• usa o dispositivo em temperaturas altas."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"O tablet estava muito quente e foi desligado para resfriar. Agora, ele está funcionando normalmente.\n\nO tablet pode ficar quente demais se você:\n	• usar apps que consomem muitos recursos (como apps de jogos, vídeos ou navegação);\n	• fizer download ou upload de arquivos grandes;\n	• usar o tablet em temperaturas altas."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"O smartphone está esquentando"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"O dispositivo está esquentando"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"O tablet está esquentando"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Alguns recursos ficam limitados enquanto o smartphone é resfriado.\nToque para saber mais"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Alguns recursos ficam limitados enquanto o dispositivo é resfriado.\nToque para saber mais"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Alguns recursos ficam limitados enquanto o tablet é resfriado.\nToque para saber mais"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Seu smartphone tentará se resfriar automaticamente. Você ainda poderá usá-lo, mas talvez ele fique mais lento.\n\nQuando o smartphone estiver resfriado, ele voltará ao normal."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Seu dispositivo vai tentar se resfriar automaticamente. Você ainda poderá usá-lo, mas talvez ele fique mais lento.\n\nDepois de resfriado, o dispositivo volta ao normal."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Seu tablet vai tentar se resfriar automaticamente. Você ainda poderá usá-lo, mas talvez ele fique mais lento.\n\nDepois de resfriado, o tablet volta ao normal."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"O sensor de impressão digital fica no botão liga/desliga. Ele é plano e está ao lado do botão de volume na borda do tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"O sensor de impressão digital fica no botão liga/desliga. Ele é plano e está ao lado do botão de volume na borda do dispositivo."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"O sensor de impressão digital fica no botão liga/desliga. Ele é plano e está ao lado do botão de volume na borda do smartphone."</string>
diff --git a/packages/SystemUI/res-product/values-ro/strings.xml b/packages/SystemUI/res-product/values-ro/strings.xml
index cd08dee..f10d5ca 100644
--- a/packages/SystemUI/res-product/values-ro/strings.xml
+++ b/packages/SystemUI/res-product/values-ro/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Ai făcut <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a telefonului. Profilul de serviciu va fi eliminat, iar toate datele profilului vor fi șterse."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Ai desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, ți se va solicita să deblochezi tableta cu ajutorul unui cont de e-mail.\n\n Încearcă din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> secunde."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Ai desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, ți se va solicita să deblochezi telefonul cu ajutorul unui cont de e-mail.\n\n Încearcă din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> secunde."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefonul s-a oprit din cauza încălzirii"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Dispozitiv oprit din cauza căldurii"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tableta s-a oprit din cauza încălzirii"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Acum telefonul funcționează normal.\nAtinge pentru mai multe informații"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Acum dispozitivul funcționează normal.\nAtinge pentru mai multe informații"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Acum tableta funcționează normal.\nAtinge pentru mai multe informații"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefonul se încălzise prea mult și s-a oprit pentru a se răci. Acum funcționează normal.\n\nTelefonul s-ar putea încălzi prea mult dacă:\n	• folosești aplicații care consumă multe resurse (de ex., jocuri, aplicații video sau de navigare);\n	• descarci sau încarci fișiere mari;\n	• folosești telefonul la temperaturi ridicate."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Dispozitivul se încălzise prea mult și s-a oprit pentru a se răci. Acum funcționează normal.\n\nDispozitivul s-ar putea încălzi prea mult dacă:\n	• folosești aplicații care consumă multe resurse (de ex., jocuri, aplicații video sau de navigare);\n	• descarci sau încarci fișiere mari;\n	• folosești dispozitivul la temperaturi ridicate."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tableta se încălzise prea mult și s-a oprit pentru a se răci. Acum funcționează normal.\n\nTableta s-ar putea încălzi prea mult dacă:\n	• folosești aplicații care consumă multe resurse (de ex., jocuri, aplicații video sau de navigare);\n	• descarci sau încarci fișiere mari;\n	• folosești tableta la temperaturi ridicate."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefonul se încălzește"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Dispozitivul se încălzește"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tableta se încălzește"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Anumite funcții sunt limitate în timp ce telefonul se răcește.\nAtinge pentru mai multe informații"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Anumite funcții sunt limitate în timp ce dispozitivul se răcește.\nAtinge pentru mai multe informații"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Anumite funcții sunt limitate în timp ce tableta se răcește.\nAtinge pentru mai multe informații"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefonul va încerca automat să se răcească. Îl poți folosi în continuare, dar e posibil să funcționeze mai lent.\n\nDupă ce se răcește, telefonul va funcționa normal."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Dispozitivul va încerca automat să se răcească. Îl poți folosi în continuare, dar e posibil să funcționeze mai lent.\n\nDupă ce se răcește, dispozitivul va funcționa normal."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Tableta va încerca automat să se răcească. O poți folosi în continuare, dar e posibil să funcționeze mai lent.\n\nDupă ce se răcește, tableta va funcționa normal."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Senzorul de amprentă se află pe butonul de pornire. Este butonul plat de lângă butonul de volum în relief de pe marginea tabletei."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Senzorul de amprentă se află pe butonul de pornire. Este butonul plat de lângă butonul de volum în relief de pe marginea dispozitivului."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Senzorul de amprentă se află pe butonul de pornire. Este butonul plat de lângă butonul de volum în relief de pe marginea telefonului."</string>
diff --git a/packages/SystemUI/res-product/values-ru/strings.xml b/packages/SystemUI/res-product/values-ru/strings.xml
index 1649c02..ed9ad1a 100644
--- a/packages/SystemUI/res-product/values-ru/strings.xml
+++ b/packages/SystemUI/res-product/values-ru/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Вы несколько раз (<xliff:g id="NUMBER">%d</xliff:g>) не смогли разблокировать телефон. Рабочий профиль и все его данные будут удалены."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Вы несколько раз (<xliff:g id="NUMBER_0">%1$d</xliff:g>) ввели неверный графический ключ. Осталось попыток: <xliff:g id="NUMBER_1">%2$d</xliff:g>. В случае неудачи вам будет предложено разблокировать планшет с помощью аккаунта электронной почты.\n\nПовторите попытку через <xliff:g id="NUMBER_2">%3$d</xliff:g> сек."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Вы несколько раз (<xliff:g id="NUMBER_0">%1$d</xliff:g>) ввели неверный графический ключ. Осталось попыток: <xliff:g id="NUMBER_1">%2$d</xliff:g>. В случае неудачи вам будет предложено разблокировать телефон с помощью аккаунта электронной почты.\n\nПовторите попытку через <xliff:g id="NUMBER_2">%3$d</xliff:g> сек."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Телефон выключился из-за перегрева"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Устройство выключилось из-за перегрева"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Планшет выключился из-за перегрева"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Сейчас телефон работает нормально.\nНажмите, чтобы получить дополнительную информацию."</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Сейчас устройство работает нормально.\nНажмите, чтобы получить дополнительную информацию."</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Сейчас планшет работает нормально.\nНажмите, чтобы получить дополнительную информацию."</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Телефон выключился из-за перегрева. Сейчас он работает нормально.\n\nВозможные причины перегрева:\n	• использование ресурсоемких игр и приложений, например связанных с видео или навигацией;\n	• скачивание или загрузка больших файлов;\n	• высокая температура окружающей среды."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Устройство выключилось из-за перегрева. Сейчас оно работает нормально.\n\nВозможные причины перегрева:\n	• использование ресурсоемких игр и приложений, например связанных с видео или навигацией;\n	• скачивание или загрузка больших файлов;\n	• высокая температура окружающей среды."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Планшет выключился из-за перегрева. Сейчас он работает нормально.\n\nВозможные причины перегрева:\n	• использование ресурсоемких игр и приложений, например связанных с видео или навигацией;\n	• скачивание или загрузка больших файлов;\n	• высокая температура окружающей среды."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Телефон нагревается"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Устройство нагревается"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Планшет нагревается"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Пока телефон не остынет, некоторые функции могут быть недоступны.\nНажмите, чтобы получить дополнительную информацию."</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Пока устройство не остынет, некоторые функции могут быть недоступны.\nНажмите, чтобы получить дополнительную информацию."</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Пока планшет не остынет, некоторые функции могут быть недоступны.\nНажмите, чтобы получить дополнительную информацию."</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Телефон автоматически попробует снизить температуру. Вы можете продолжать им пользоваться, но его производительность, возможно, уменьшится.\n\nСкорость работы телефона восстановится, когда он остынет."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Устройство автоматически попробует снизить температуру. Вы можете продолжать им пользоваться, но его производительность, возможно, уменьшится.\n\nСкорость работы устройства восстановится, когда оно остынет."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Планшет автоматически попробует снизить температуру. Вы можете продолжать им пользоваться, но его производительность, возможно, уменьшится.\n\nСкорость работы планшета восстановится, когда он остынет."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Сканер отпечатков пальцев находится на кнопке питания. Она плоская и расположена рядом с приподнятой кнопкой регулировки громкости на боковой стороне планшета."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Сканер отпечатков пальцев находится на кнопке питания. Она плоская и расположена рядом с приподнятой кнопкой регулировки громкости на боковой стороне устройства."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Сканер отпечатков пальцев находится на кнопке питания. Она плоская и расположена рядом с приподнятой кнопкой регулировки громкости на боковой стороне телефона."</string>
diff --git a/packages/SystemUI/res-product/values-si/strings.xml b/packages/SystemUI/res-product/values-si/strings.xml
index 4ab2a4b..f2c0f43 100644
--- a/packages/SystemUI/res-product/values-si/strings.xml
+++ b/packages/SystemUI/res-product/values-si/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"ඔබ දුරකථනය අගුළු හැරීමට <xliff:g id="NUMBER">%d</xliff:g> වරක් වැරදියට උත්සාහ කර ඇත. කාර්යාල පැතිකඩ ඉවත් කරනු ඇති අතර, එය සියලු පැතිකඩ දත්ත මකනු ඇත."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"ඔබ අගුළු ඇරිමේ රටාව <xliff:g id="NUMBER_0">%1$d</xliff:g> වතාවක් වැරදියට ඇඳ ඇත. තවත් අසාර්ථක උත්සාහ <xliff:g id="NUMBER_1">%2$d</xliff:g> කින් පසුව, ඊ-තැපැල් ගිණුම භාවිතා කරමින් ඔබගේ ටැබ්ලටයේ අගුළු ඇරීමට ඔබට පවසනු ඇත.\n\n නැවත තත්පර <xliff:g id="NUMBER_2">%3$d</xliff:g> කින් උත්සාහ කරන්න."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"ඔබ වැරදියට <xliff:g id="NUMBER_0">%1$d</xliff:g> වතාවක් ඔබගේ අගුළු හැරීමේ රටාව ඇඳ ඇත. අසාර්ථක උත්සහ කිරීම් <xliff:g id="NUMBER_1">%2$d</xliff:g> න් පසුව, ඔබගේ ඊ-තැපැල් ලිපිනය භාවිතයෙන් ඔබගේ දුරකථනය අගුළු හැරීමට ඔබගෙන් අසයි.\n\n තත්පර <xliff:g id="NUMBER_2">%3$d</xliff:g> න් පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"දුරකථනය රත් වීම නිසා ක්‍රියාවිරහිත විය"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"උණුසුම හේතුවෙන් උපාංගය ක්‍රියාවිරහිත විය"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"ටැබ්ලටය රත් වීම නිසා ක්‍රියාවිරහිත විය"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"ඔබේ දුරකථනය දැන් සාමාන්‍ය ලෙස ධාවනය වේ.\nතව තතු සඳහා තට්ටු කරන්න"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"ඔබේ උපාංගය දැන් සාමාන්‍ය ලෙස ධාවනය වේ.\nතව තතු සඳහා තට්ටු කරන්න"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"ඔබේ ටැබ්ලටය දැන් සාමාන්‍ය ලෙස ධාවනය වේ.\nතව තතු සඳහා තට්ටු කරන්න"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"ඔබේ දුරකථනය ඉතාම උණුසුම් විය, එම නිසා එය සිසිල් වීමට ක්‍රියාවිරහිත කරන ලදි. දැන් ඔබේ දුරකථනය සාමාන්‍ය පරිදි ධාවනය වේ.\n\nඔබ පහත දේවල් සිදු කළහොත් ඔබේ දුරකථනය ඉතාම උණුසුම් විය හැක:\n	• සම්පත්-දැඩි සත්කාරක යෙදුම් භාවිතය (ක්‍රීඩා, වීඩියෝ, හෝ සංචලන යෙදුම් යනාදී)\n	• විශාල ගොනු බාගැනීම හෝ උඩුගත කිරීම\n	• ඔබේ දුරකථනය අධික උෂ්ණත්වයේදී භාවිත කිරීම"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"ඔබේ උපාංගය ඉතාම උණුසුම් විය, එම නිසා එය සිසිල් වීමට ක්‍රියාවිරහිත කරන ලදි. දැන් ඔබේ දුරකථනය සාමාන්‍ය පරිදි ධාවනය වේ.\n\nඔබ පහත දේවල් සිදු කළහොත් ඔබේ උපාංගය ඉතාම උණුසුම් විය හැක:\n	• සම්පත්-දැඩි සත්කාරක යෙදුම් භාවිතය (ක්‍රීඩා, වීඩියෝ, හෝ සංචලන යෙදුම් යනාදී)\n	• විශාල ගොනු බාගැනීම හෝ උඩුගත කිරීම\n	• ඔබේ දුරකථනය අධික උෂ්ණත්වයේ දී භාවිත කිරීම"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"ඔබේ ටැබ්ලටය ඉතාම උණුසුම් විය, එම නිසා එය සිසිල් වීමට ක්‍රියාවිරහිත කරන ලදි. දැන් ඔබේ දුරකථනය සාමාන්‍ය පරිදි ධාවනය වේ.\n\nඔබ පහත දේවල් සිදු කළහොත් ඔබේ දුරකථනය ඉතාම උණුසුම් විය හැක:\n	• සම්පත්-දැඩි සත්කාරක යෙදුම් භාවිතය (ක්‍රීඩා, වීඩියෝ, හෝ සංචලන යෙදුම් යනාදී)\n	• විශාල ගොනු බාගැනීම හෝ උඩුගත කිරීම\n	• ඔබේ දුරකථනය අධික උෂ්ණත්වයේ දී භාවිත කිරීම"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"දුරකථනය උණුසුම් වෙමින්"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"උපාංගය උණුසුම් වෙමින් පවතී"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"ටැබ්ලටය උණුසුම් වෙමින් පවතී"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"දුරකථනය සිසිල් වන අතරේ සමහර විශේෂාංග සීමිත විය හැක.\nතව තතු සඳහා තට්ටු කරන්න"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"උපාංගය සිසිල් වන අතරේ සමහර විශේෂාංග සීමිත විය හැක.\nතව තතු සඳහා තට්ටු කරන්න"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"ටැබ්ලටය සිසිල් වන අතරේ සමහර විශේෂාංග සීමිත විය හැක.\nතව තතු සඳහා තට්ටු කරන්න"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"ඔ බේ දුරකථනය ස්වයංක්‍රීයව සිසිල් වීමට උත්සාහ කරනු ඇත. ඔබට තවම ඔබේ දුරකථනය භාවිත කළ හැකි නමුත්, එය සෙමින් ධාවනය විය හැක.\n\nඔබේ දුරකථනය සිසිල් වූ පසු, එය සාමාන්‍ය ලෙස ධාවනය වනු ඇත."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"ඔබේ උපාංගය ස්වයංක්‍රීයව සිසිල් වීමට උත්සාහ දරනු ඇත. ඔබට තවමත් බබේ උපාංගය භාවිතා කළ හැකි නමුත්, එය මන්දගාමීව ධාවනය විය හැක.\n\nඔබේ උපාංගය සිසිල් වූ පසු, එය සාමාන්‍ය පරිදි ධාවනය වනු ඇත."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"ඔබේ ටැබ්ලටය ස්වයංක්‍රීයව සිසිල් වීමට උත්සාහ දරනු ඇත. ඔබට තවමත් බබේ ටැබ්ලටය භාවිතා කළ හැකි නමුත්, එය මන්දගාමීව ධාවනය විය හැක.\n\nඔබේ ටැබ්ලටය සිසිල් වූ පසු, එය සාමාන්‍ය පරිදි ධාවනය වනු ඇත."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"ඇඟිලි සලකුණු සංවේදකය බල බොත්තම මත ඇත. එය ටැබ්ලටයෙහි කෙළවර ඇති ඉහළ හඬ පරිමා බොත්තම අසල ඇති පැතලි බොත්තමයි."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"ඇඟිලි සලකුණු සංවේදකය බල බොත්තම මත ඇත. එය උපාංගයෙහි කෙළවර ඇති ඉහළ හඬ පරිමා බොත්තම අසල ඇති පැතලි බොත්තමයි."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"ඇඟිලි සලකුණු සංවේදකය බල බොත්තම මත ඇත. එය දුරකථනයෙහි කෙළවර ඇති ඉහළ හඬ පරිමා බොත්තම අසල ඇති පැතලි බොත්තමයි."</string>
diff --git a/packages/SystemUI/res-product/values-sk/strings.xml b/packages/SystemUI/res-product/values-sk/strings.xml
index 21bcc2a..8e1bb39 100644
--- a/packages/SystemUI/res-product/values-sk/strings.xml
+++ b/packages/SystemUI/res-product/values-sk/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Telefón ste sa pokúsili <xliff:g id="NUMBER">%d</xliff:g>‑krát nesprávne odomknúť. Pracovný profil bude odstránený spolu so všetkými údajmi."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"<xliff:g id="NUMBER_0">%1$d</xliff:g>‑krát ste nesprávne nakreslili svoj bezpečnostný vzor. Po <xliff:g id="NUMBER_1">%2$d</xliff:g> ďalších neúspešných pokusoch sa zobrazí výzva na odomknutie tabletu pomocou e‑mailového účtu.\n\n Skúste to znova o <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Už ste <xliff:g id="NUMBER_0">%1$d</xliff:g>‑krát nesprávne nakreslili svoj bezpečnostný vzor. Po <xliff:g id="NUMBER_1">%2$d</xliff:g> ďalších neúspešných pokusoch sa zobrazí výzva na odomknutie telefónu pomocou e‑mailového účtu.\n\n Skúste to znova o <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefón sa vypol z dôvodu prehriatia"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Zariadenie sa vyplo z dôvodu prehriatia"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet sa vypol z dôvodu prehriatia"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Teraz telefón funguje ako obvykle.\nViac sa dozviete po klepnutí."</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Teraz zariadenie funguje ako obvykle.\nViac sa dozviete po klepnutí."</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Teraz tablet funguje ako obvykle.\nViac sa dozviete po klepnutí."</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefón bol príliš horúci, preto sa vypol, aby vychladol. Teraz funguje ako obvykle.\n\nTelefón sa môže prehrievať, keď:\n	• používate aplikácie náročné na zdroje (ako sú aplikácie na video alebo herné či navigačné),\n	• sťahujete alebo nahrávate veľké súbory,\n	• používate telefón pri vysokých teplotách."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Zariadenie bolo príliš horúce, preto sa vyplo, aby vychladlo. Teraz funguje ako obvykle.\n\nZariadenie sa môže prehrievať, keď:\n	• používate aplikácie náročné na zdroje (ako sú aplikácie na video alebo herné či navigačné),\n	• sťahujete alebo nahrávate veľké súbory,\n	• používate zariadenie pri vysokých teplotách."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tablet bol príliš horúci, preto sa vypol, aby vychladol. Teraz funguje ako obvykle.\n\nTablet sa môže prehrievať, keď:\n	• používate aplikácie náročné na zdroje (ako sú aplikácie na video alebo herné či navigačné),\n	• sťahujete alebo nahrávate veľké súbory,\n	• používate tablet pri vysokých teplotách."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefón sa prehrieva"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Zariadenie sa prehrieva"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet sa prehrieva"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Niektoré funkcie budú obmedzené, dokým neklesne teplota telefónu.\nViac sa dozviete po klepnutí."</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Niektoré funkcie budú obmedzené, dokým neklesne teplota zariadenia.\nViac sa dozviete po klepnutí."</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Niektoré funkcie budú obmedzené, dokým neklesne teplota tabletu.\nViac sa dozviete po klepnutí."</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Váš telefón sa automaticky pokúsi schladiť. Môžete ho naďalej používať, ale môže fungovať pomalšie.\n\nPo poklese teploty bude fungovať ako obvykle."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Vaše zariadenie sa automaticky pokúsi schladiť. Môžete ho naďalej používať, ale môže fungovať pomalšie.\n\nPo poklese teploty bude fungovať ako obvykle."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Váš tablet sa automaticky pokúsi schladiť. Môžete ho naďalej používať, ale môže fungovať pomalšie.\n\nPo poklese teploty bude fungovať ako obvykle."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Senzor odtlačkov prstov je na vypínači. Je to ploché tlačidlo vedľa vypuklého tlačidla hlasitosti na okraji tabletu."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Senzor odtlačkov prstov je na vypínači. Je to ploché tlačidlo vedľa vypuklého tlačidla hlasitosti na okraji zariadenia."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Senzor odtlačkov prstov je na vypínači. Je to ploché tlačidlo vedľa vypuklého tlačidla hlasitosti na okraji telefónu."</string>
diff --git a/packages/SystemUI/res-product/values-sl/strings.xml b/packages/SystemUI/res-product/values-sl/strings.xml
index 95191a4..04c7bc7 100644
--- a/packages/SystemUI/res-product/values-sl/strings.xml
+++ b/packages/SystemUI/res-product/values-sl/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Telefon ste neuspešno poskusili odkleniti <xliff:g id="NUMBER">%d</xliff:g>-krat. Delovni profil bo odstranjen in vsi podatki profila bodo izbrisani."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Vzorec za odklepanje ste <xliff:g id="NUMBER_0">%1$d</xliff:g>-krat napačno vnesli. Če ga neuspešno poskusite vnesti še <xliff:g id="NUMBER_1">%2$d</xliff:g>-krat, boste pozvani, da tablični računalnik odklenete z e-poštnim računom.\n\nPoskusite znova čez <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Vzorec za odklepanje ste <xliff:g id="NUMBER_0">%1$d</xliff:g>-krat napačno vnesli. Če ga neuspešno poskusite vnesti še <xliff:g id="NUMBER_1">%2$d</xliff:g>-krat, boste pozvani, da telefon odklenete z e-poštnim računom.\n\nPoskusite znova čez <xliff:g id="NUMBER_2">%3$d</xliff:g> s."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefon se je izklopil zaradi vročine"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Naprava se je izklopila zaradi vročine"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablični računalnik se je izklopil zaradi vročine"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Telefon zdaj deluje kot običajno.\nDotaknite se za več informacij"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Naprava zdaj deluje kot običajno.\nDotaknite se za več informacij"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Tablični računalnik zdaj deluje kot običajno.\nDotaknite se za več informacij"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefon je bil prevroč, zato se je izklopil, da se ohladi. Zdaj deluje kot običajno.\n\nTelefon lahko postane prevroč pri:\n	• uporabi aplikacij, ki intenzivno porabljajo sredstva (npr. za igranje iger, videoposnetke ali navigacijo);\n	• prenosu ali nalaganju velikih datotek;\n	• uporabi naprave pri visokih temperaturah."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Naprava je bila prevroča, zato se je izklopila, da se ohladi. Zdaj deluje kot običajno.\n\nNaprava lahko postane prevroča pri:\n	• uporabi aplikacij, ki intenzivno porabljajo sredstva (npr. za igranje iger, videoposnetke ali navigacijo);\n	• prenosu ali nalaganju velikih datotek;\n	• uporabi naprave pri visokih temperaturah."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tablični računalnik je bil prevroč, zato se je izklopil, da se ohladi. Zdaj deluje kot običajno.\n\nTablični računalnik lahko postane prevroč pri:\n	• uporabi aplikacij, ki intenzivno porabljajo sredstva (npr. za igranje iger, videoposnetke ali navigacijo);\n	• prenosu ali nalaganju velikih datotek;\n	• uporabi naprave pri visokih temperaturah."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefon se segreva"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Naprava se segreva"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablični računalnik se segreva"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Nekatere funkcije bodo med ohlajanjem telefona omejene.\nDotaknite se za več informacij"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Nekatere funkcije bodo med ohlajanjem naprave omejene.\nDotaknite se za več informacij"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Nekatere funkcije bodo med ohlajanjem tabličnega računalnika omejene.\nDotaknite se za več informacij"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefon se bo samodejno poskusil ohladiti. Še naprej ga lahko uporabljate, vendar bo morda deloval počasneje.\n\nKo se bo telefon ohladil, bo znova deloval kot običajno."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Naprava se bo samodejno poskusila ohladiti. Še naprej jo lahko uporabljate, vendar bo morda delovala počasneje.\n\nKo se bo naprava ohladila, bo znova delovala kot običajno."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Tablični računalnik se bo samodejno poskusil ohladiti. Še naprej ga lahko uporabljate, vendar bo morda deloval počasneje.\n\nKo se bo tablični računalnik ohladil, bo znova deloval kot običajno."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Tipalo prstnih odtisov je na gumbu za vklop. To je ploski gumb ob izbočenem gumbu za glasnost na robu tabličnega računalnika."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Tipalo prstnih odtisov je na gumbu za vklop. To je ploski gumb ob izbočenem gumbu za glasnost na robu naprave."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Tipalo prstnih odtisov je na gumbu za vklop. To je ploski gumb ob izbočenem gumbu za glasnost na robu telefona."</string>
diff --git a/packages/SystemUI/res-product/values-sq/strings.xml b/packages/SystemUI/res-product/values-sq/strings.xml
index 435966eb..619f22f 100644
--- a/packages/SystemUI/res-product/values-sq/strings.xml
+++ b/packages/SystemUI/res-product/values-sq/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Ke tentuar <xliff:g id="NUMBER">%d</xliff:g> herë pa sukses për ta shkyçur telefonin. Profili i punës do të hiqet, gjë që do të fshijë të gjitha të dhënat e profilit."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Ke vizatuar <xliff:g id="NUMBER_0">%1$d</xliff:g> herë pa sukses motivin tënd të shkyçjes. Pas <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativave të tjera të pasuksesshme, do të të duhet ta shkyçësh tabletin duke përdorur një llogari email-i.\n\n Provo sërish për <xliff:g id="NUMBER_2">%3$d</xliff:g> sekonda."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Ke vizatuar <xliff:g id="NUMBER_0">%1$d</xliff:g> herë pa sukses motivin tënd. Pas <xliff:g id="NUMBER_1">%2$d</xliff:g> tentativave të tjera të pasuksesshme, do të të duhet ta shkyçësh telefonin duke përdorur një llogari email-i.\n\n Provo sërish për <xliff:g id="NUMBER_2">%3$d</xliff:g> sekonda."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefoni u fik për shkak të nxehtësisë"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Pajisja u fik për shkak të nxehtësisë"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tableti u fik për shkak të nxehtësisë"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Telefoni tani po funksionon normalisht.\nTrokit për më shumë informacione"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Pajisja tani po funksionon normalisht.\nTrokit për më shumë informacione"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Tableti tani po funksionon normalisht.\nTrokit për më shumë informacione"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefoni yt ishte shumë i nxehtë, prandaj u fik për t\'u ftohur. Telefoni tani po funksionon normalisht.\n\nTelefoni yt mund të nxehet shumë nëse ti:\n	• Përdor aplikacione intensive për burimet (si p.sh. aplikacione lojërash, videosh ose navigimi)\n	• Shkarkon ose ngarkon skedarë të mëdhenj\n	• Përdor telefonin në temperatura të larta"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Pajisja jote ishte shumë e nxehtë, prandaj u fik për t\'u ftohur. Pajisja tani po funksionon normalisht.\n\nPajisja jote mund të nxehet shumë nëse ti:\n	• Përdor aplikacione intensive për burimet (si p.sh. aplikacione lojërash, videosh ose navigimi)\n	• Shkarkon ose ngarkon skedarë të mëdhenj\n	• Përdor pajisjen në temperatura të larta"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tableti yt ishte shumë i nxehtë, prandaj u fik për t\'u ftohur. Tableti tani po funksionon normalisht.\n\nTableti yt mund të nxehet shumë nëse ti:\n	• Përdor aplikacione intensive për burimet (si p.sh. aplikacione lojërash, videosh ose navigimi)\n	• Shkarkon ose ngarkon skedarë të mëdhenj\n	• Përdor tabletin në temperatura të larta"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefoni po nxehet"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Pajisja po nxehet"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tableti po nxehet"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Disa veçori janë të kufizuara ndërkohë që telefoni ftohet.\nTrokit për më shumë informacione"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Disa veçori janë të kufizuara ndërkohë që pajisja ftohet.\nTrokit për më shumë informacione"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Disa veçori janë të kufizuara ndërkohë që telefoni ftohet.\nTrokit për më shumë informacione"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefoni yt do të përpiqet automatikisht të ftohet. Mund të vazhdosh ta përdorësh telefonin, por ai mund të funksionojë më ngadalë.\n\nPasi telefoni të jetë ftohur, ai do të funksionojë normalisht."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Pajisja jote do të përpiqet automatikisht të ftohet. Mund të vazhdosh ta përdorësh pajisjen, por ajo mund të funksionojë më ngadalë.\n\nPasi pajisja të jetë ftohur, ajo do të funksionojë normalisht."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Tableti yt do të përpiqet automatikisht të ftohet. Mund të vazhdosh ta përdorësh tabletin, por ai mund të funksionojë më ngadalë.\n\nPasi tableti të jetë ftohur, ai do të funksionojë normalisht."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Sensori i gjurmës së gishtit është në butonin e energjisë. Ai është butoni i rrafshët pranë butonit të ngritur të volumit në anë të tabletit."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Sensori i gjurmës së gishtit është në butonin e energjisë. Ai është butoni i rrafshët pranë butonit të ngritur të volumit në anë të pajisjes."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Sensori i gjurmës së gishtit është në butonin e energjisë. Ai është butoni i rrafshët pranë butonit të ngritur të volumit në anë të telefonit."</string>
diff --git a/packages/SystemUI/res-product/values-sr/strings.xml b/packages/SystemUI/res-product/values-sr/strings.xml
index 4c458a4..76cd9ed 100644
--- a/packages/SystemUI/res-product/values-sr/strings.xml
+++ b/packages/SystemUI/res-product/values-sr/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Погрешно сте покушали да откључате телефон <xliff:g id="NUMBER">%d</xliff:g> пута. Уклонићемо пословни профил, чиме се бришу сви подаци са профила."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Нетачно сте нацртали шаблон за откључавање <xliff:g id="NUMBER_0">%1$d</xliff:g> пута. Ако погрешно покушате још <xliff:g id="NUMBER_1">%2$d</xliff:g> пута, затражићемо да откључате таблет помоћу имејл налога.\n\n Пробајте поново за <xliff:g id="NUMBER_2">%3$d</xliff:g> сек."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Нетачно сте нацртали шаблон за откључавање <xliff:g id="NUMBER_0">%1$d</xliff:g> пута. Ако погрешно покушате још <xliff:g id="NUMBER_1">%2$d</xliff:g> пута, затражићемо да откључате телефон помоћу имејл налога.\n\n Пробајте поново за <xliff:g id="NUMBER_2">%3$d</xliff:g> сек."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Телефон се искључио због топлоте"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Уређај се искључио због топлоте"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Таблет се искључио због топлоте"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Телефон сада функционише нормално.\nДодирните за више информација"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Уређај сада функционише нормално.\nДодирните за више информација"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Таблет сада функционише нормално.\nДодирните за више информација"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Телефон је био преврућ, па се искључио да се охлади. Сада ради нормално.\n\nТелефон може превише да се угреје ако:\n	• користите апликације које захтевају пуно ресурса (нпр. видео игре, видео или апликације за навигацију)\n	• преузимате или отпремате велике фајлове\n	• користите телефон на високој температури"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Уређај је био преврућ, па се искључио да се охлади. Сада ради нормално.\n\nУређај може превише да се угреје ако:\n	• користите апликације које захтевају пуно ресурса (нпр. видео игре, видео или апликације за навигацију)\n	• преузимате или отпремате велике фајлове\n	• користите уређај на високој температури"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Таблет је био преврућ, па се искључио да се охлади. Сада ради нормално.\n\nТаблет може превише да се угреје ако:\n	• користите апликације које захтевају пуно ресурса (нпр. видео игре, видео или апликације за навигацију)\n	• преузимате или отпремате велике фајлове\n	• користите таблет на високој температури"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Телефон се загрејао"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Уређај се загрејао"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Таблет се загрејао"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Неке функције су ограничене док се телефон не охлади.\nДодирните за више информација"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Неке функције су ограничене док се уређај не охлади.\nДодирните за више информација"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Неке функције су ограничене док се таблет не охлади.\nДодирните за више информација"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Телефон ће аутоматски покушати да се охлади. И даље можете да користите телефон, али ће можда радити спорије.\n\nКад се телефон охлади, функционисаће нормално."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Уређај ће аутоматски покушати да се охлади. И даље можете да користите уређај, али ће можда радити спорије.\n\nКад се уређај охлади, функционисаће нормално."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Таблет ће аутоматски покушати да се охлади. И даље можете да користите таблет, али ће можда радити спорије.\n\nКад се таблет охлади, функционисаће нормално."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Сензор за отисак прста се налази на дугмету за укључивање. То је равно дугме поред издигнутог дугмета за јачину звука на ивици таблета."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Сензор за отисак прста се налази на дугмету за укључивање. То је равно дугме поред издигнутог дугмета за јачину звука на ивици уређаја."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Сензор за отисак прста се налази на дугмету за укључивање. То је равно дугме поред издигнутог дугмета за јачину звука на ивици телефона."</string>
diff --git a/packages/SystemUI/res-product/values-sv/strings.xml b/packages/SystemUI/res-product/values-sv/strings.xml
index e2bbfa1..bb97e5c 100644
--- a/packages/SystemUI/res-product/values-sv/strings.xml
+++ b/packages/SystemUI/res-product/values-sv/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Du har försökt låsa upp telefonen på ett felaktigt sätt <xliff:g id="NUMBER">%d</xliff:g> gånger. Jobbprofilen tas bort och all profildata raderas."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%1$d</xliff:g> gånger. Efter ytterligare <xliff:g id="NUMBER_1">%2$d</xliff:g> försök måste du låsa upp surfplattan med hjälp av ett e-postkonto.\n\n Försök igen om <xliff:g id="NUMBER_2">%3$d</xliff:g> sekunder."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%1$d</xliff:g> gånger. Efter ytterligare <xliff:g id="NUMBER_1">%2$d</xliff:g> försök måste du låsa upp telefonen med hjälp av ett e-postkonto.\n\n Försök igen om <xliff:g id="NUMBER_2">%3$d</xliff:g> sekunder."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefonen stängdes av p.g.a. värme"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Enheten stängdes av p.g.a. värme"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Surfplattan stängdes av p.g.a. värme"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Telefonen fungerar nu som vanligt.\nTryck för mer information"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Enheten fungerar nu som vanligt.\nTryck för mer information"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Surfplattan fungerar nu som vanligt.\nTryck för mer information"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefonen var för varm och stängdes av för att svalna. Den fungerar nu som vanligt.\n\nTelefonen kan bli för varm om du\n	• använder resurskrävande appar (till exempel spel-, video- eller navigeringsappar)\n	• laddar ned eller laddar upp stora filer\n	• använder telefonen vid höga temperaturer."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Enheten var för varm och stängdes av för att svalna. Den fungerar nu som vanligt.\n\nEnheten kan bli för varm om du\n	• använder resurskrävande appar (till exempel spel-, video- eller navigeringsappar)\n	• laddar ned eller laddar upp stora filer\n	• använder enheten vid höga temperaturer."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Surfplattan var för varm och stängdes av för att svalna. Den fungerar nu som vanligt.\n\nSurfplattan kan bli för varm om du\n	• använder resurskrävande appar (till exempel spel-, video- eller navigeringsappar)\n	• laddar ned eller laddar upp stora filer\n	• använder surfplattan vid höga temperaturer."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefonen börjar bli varm"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Enheten börjar bli varm"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Surfplattan börjar bli varm"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Vissa funktioner är begränsade medan telefonen svalnar.\nTryck för mer information"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Vissa funktioner är begränsade medan enheten svalnar.\nTryck för mer information"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Vissa funktioner är begränsade medan surfplattan svalnar.\nTryck för mer information"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefonen försöker svalna automatiskt. Du kan fortfarande använda telefonen, men den kan vara långsammare än vanligt.\n\nTelefonen fungerar som vanligt när den har svalnat."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Enheten försöker svalna automatiskt. Du kan fortfarande använda enheten, men den kan vara långsammare än vanligt.\n\nEnheten fungerar som vanligt när den har svalnat."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Surfplattan försöker svalna automatiskt. Du kan fortfarande använda surfplattan, men den kan vara långsammare än vanligt.\n\nSurfplattan fungerar som vanligt när den har svalnat."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Fingeravtryckssensorn sitter på av/på-knappen. Det är den platta knappen bredvid den upphöjda volymknappen på surfplattans kant."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Fingeravtryckssensorn sitter på av/på-knappen. Det är den platta knappen bredvid den upphöjda volymknappen på enhetens kant."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Fingeravtryckssensorn sitter på av/på-knappen. Det är den platta knappen bredvid den upphöjda volymknappen på telefonens kant."</string>
diff --git a/packages/SystemUI/res-product/values-sw/strings.xml b/packages/SystemUI/res-product/values-sw/strings.xml
index 2ebc3eb..44e95de 100644
--- a/packages/SystemUI/res-product/values-sw/strings.xml
+++ b/packages/SystemUI/res-product/values-sw/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Umejaribu kufungua simu mara <xliff:g id="NUMBER">%d</xliff:g> bila mafanikio. Wasifu wa kazini utaondolewa, hatua itakayofuta data yote ya wasifu."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Umeweka mchoro usio sahihi wa kufungua skrini mara <xliff:g id="NUMBER_0">%1$d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%2$d</xliff:g> zaidi bila mafanikio, utaombwa ufungue kompyuta yako kibao kwa kutumia akaunti ya barua pepe.\n\n Jaribu tena baada ya sekunde <xliff:g id="NUMBER_2">%3$d</xliff:g>."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Umeweka mchoro usio sahihi wa kufungua skrini mara <xliff:g id="NUMBER_0">%1$d</xliff:g>. Ukikosea mara nyingine <xliff:g id="NUMBER_1">%2$d</xliff:g>, utaombwa ufungue simu yako kwa kutumia akaunti ya barua pepe.\n\n Jaribu tena baada ya sekunde <xliff:g id="NUMBER_2">%3$d</xliff:g>."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Simu imezimika kwa sababu ya joto"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Kifaa kimezimika kwa sababu ya joto"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Kishikwambi kimezimika kutokana na joto"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Simu yako sasa inafanya kazi inavyostahili.\nGusa ili upate maelezo zaidi"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Kifaa chako sasa kinafanya kazi inavyostahili.\nGusa ili upate maelezo zaidi"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Kishikwambi chako sasa kinafanya kazi inavyostahili.\nGusa ili upate maelezo zaidi"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Simu yako ilikuwa na joto jingi mno, kwa hivyo imezimika ili ipoe. Simu yako sasa inafanya kazi inavyostahili.\n\nHuenda simu yako ikawa na joto jingi mno:\n	• Ukitumia programu zinazoendesha nyenzo nyingi (kama vile michezo ya video, video au programu za uelekezaji)\n	• Ukipakua au ukipakia faili kubwa\n	• Ukitumia simu mahali palipo na joto jingi"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Kifaa chako kilikuwa na joto jingi mno, kwa hivyo kimezimika ili kipoe. Kifaa chako sasa kinafanya kazi inavyostahili.\n\nHuenda kifaa chako kikawa na joto jingi mno:\n	• Ukitumia programu zinazoendesha nyenzo nyingi (kama vile michezo ya video, video au programu za uelekezaji)\n	• Ukipakua au ukipakia faili kubwa\n	• Ukitumia kifaa mahali palipo na joto jingi"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Kishikwambi chako kilikuwa na joto jingi mno, kwa hivyo kimezimika ili kipoe. Kishikwambi chako sasa kinafanya kazi inavyostahili.\n\nHuenda kishikwambi chako kikawa na joto jingi mno:\n	• Ukitumia programu zinazoendesha nyenzo nyingi (kama vile michezo ya video, video au programu za uelekezaji)\n	• Ukipakua au ukipakia faili kubwa\n	• Ukitumia kishikwambi mahali palipo na joto jingi"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Simu inapata joto"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Kifaa kinapata joto"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Kishikwambi kinapata joto"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Huenda usiweze kutumia baadhi ya vipengele wakati simu inapoa.\nGusa ili upate maelezo zaidi"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Huenda usiweze kutumia baadhi ya vipengele wakati kifaa kinapoa.\nGusa ili upate maelezo zaidi"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Huenda usiweze kutumia baadhi ya vipengele wakati kishikwambi kinapoa.\nGusa ili upate maelezo zaidi"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Simu yako itajaribu kupoa kiotomatiki. Bado unaweza kutumia simu yako, lakini huenda ikafanya kazi polepole.\n\nSimu yako ikipoa, itaendelea kufanya kazi inavyostahili."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Kifaa chako kitajaribu kupoa kiotomatiki. Bado unaweza kutumia kifaa chako, lakini huenda kikafanya kazi polepole.\n\nKifaa chako kikipoa, kitaendelea kufanya kazi inavyostahili."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Kishikwambi chako kitajaribu kupoa kiotomatiki. Bado unaweza kutumia kishikwambi chako, lakini huenda kikafanya kazi polepole.\n\nKishikwambi chako kikipoa, kitaendelea kufanya kazi inavyostahili."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Kitambuzi cha alama ya kidole kinapatikana kwenye kitufe cha kuwasha/kuzima. Ni kitufe bapa pembeni pa kitufe cha sauti kilichoinuka kwenye ukingo wa kompyuta kibao."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Kitambuzi cha alama ya kidole kinapatikana kwenye kitufe cha kuwasha/kuzima. Ni kitufe bapa pembeni pa kitufe cha sauti kilichoinuka kwenye ukingo wa kifaa."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Kitambuzi cha alama ya kidole kinapatikana kwenye kitufe cha kuwasha/kuzima. Ni kitufe bapa pembeni pa kitufe cha sauti kilichoinuka kwenye ukingo wa simu."</string>
diff --git a/packages/SystemUI/res-product/values-ta/strings.xml b/packages/SystemUI/res-product/values-ta/strings.xml
index 967afed..774134e 100644
--- a/packages/SystemUI/res-product/values-ta/strings.xml
+++ b/packages/SystemUI/res-product/values-ta/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"மொபைலை அன்லாக் செய்ய, <xliff:g id="NUMBER">%d</xliff:g> முறை தவறாக முயன்றுவிட்டதனால் பணிக் கணக்கு அகற்றப்படும். இதனால் அதிலுள்ள அனைத்துச் சுயவிவரத் தரவும் நீக்கப்படும்."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"அன்லாக் பேட்டர்னை, <xliff:g id="NUMBER_0">%1$d</xliff:g> முறை தவறாக வரைந்துவிட்டீர்கள். இன்னும் <xliff:g id="NUMBER_1">%2$d</xliff:g> முறை தவறாக வரைந்தால், மின்னஞ்சல் கணக்கைப் பயன்படுத்தி டேப்லெட்டை அன்லாக் செய்யும்படி கேட்கப்படுவீர்கள்.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> வினாடிகளில் மீண்டும் முயலவும்."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"அன்லாக் பேட்டர்னை, <xliff:g id="NUMBER_0">%1$d</xliff:g> முறை தவறாக வரைந்துவிட்டீர்கள். இன்னும் <xliff:g id="NUMBER_1">%2$d</xliff:g> முறை தவறாக வரைந்தால், மின்னஞ்சல் கணக்கைப் பயன்படுத்தி மொபைலை அன்லாக் செய்யும்படி கேட்கப்படுவீர்கள்.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> வினாடிகளில் மீண்டும் முயலவும்."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"மொபைல் சூடானதால் அணைக்கப்பட்டது"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"சாதனம் சூடானதால் அணைக்கப்பட்டது"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"டேப்லெட் சூடானதால் அணைக்கப்பட்டது"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"இப்போது உங்கள் மொபைல் இயல்புநிலையில் இயங்குகிறது.\nமேலும் தகவலுக்குத் தட்டவும்."</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"இப்போது உங்கள் சாதனம் இயல்புநிலையில் இயங்குகிறது.\nமேலும் தகவலுக்குத் தட்டவும்."</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"இப்போது உங்கள் டேப்லெட் இயல்புநிலையில் இயங்குகிறது.\nமேலும் தகவலுக்குத் தட்டவும்."</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"உங்கள் மொபைல் அதிக சூடானதால் அதன் சூட்டைக் குறைக்க அணைக்கப்பட்டது. இப்போது உங்கள் மொபைல் இயல்புநிலையில் இயங்குகிறது.\n\nபின்வருபவற்றைச் செய்தால், உங்கள் மொபைல் சூடாகலாம்:\n	• அதிகளவு தரவைப் பயன்படுத்தும் ஆப்ஸை (கேமிங், வீடியோ, வழிகாட்டுதல் ஆப்ஸ் போன்றவை) பயன்படுத்துதல்\n	• பெரிய ஃபைல்களைப் பதிவிறக்குதல்/பதிவேற்றுதல்\n	• அதிக வெப்பநிலையில் மொபைலைப் பயன்படுத்துதல்"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"உங்கள் சாதனம் அதிக சூடானதால் அதன் சூட்டைக் குறைக்க அணைக்கப்பட்டது. இப்போது உங்கள் சாதனம் இயல்புநிலையில் இயங்குகிறது.\n\nபின்வருபவற்றைச் செய்தால், உங்கள் சாதனம் சூடாகலாம்:\n	• அதிகளவு தரவைப் பயன்படுத்தும் ஆப்ஸை (கேமிங், வீடியோ, வழிகாட்டுதல் ஆப்ஸ் போன்றவை) பயன்படுத்துதல்\n	• பெரிய ஃபைல்களைப் பதிவிறக்குதல்/பதிவேற்றுதல்\n	• அதிக வெப்பநிலையில் சாதனத்தைப் பயன்படுத்துதல்"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"உங்கள் டேப்லெட் அதிக சூடானதால் அதன் சூட்டைக் குறைக்க அணைக்கப்பட்டது. இப்போது உங்கள் டேப்லெட் இயல்புநிலையில் இயங்குகிறது.\n\nபின்வருபவற்றைச் செய்தால், உங்கள் டேப்லெட் சூடாகலாம்:\n	• அதிகளவு தரவைப் பயன்படுத்தும் ஆப்ஸை (கேமிங், வீடியோ, வழிகாட்டுதல் ஆப்ஸ் போன்றவை) பயன்படுத்துதல்\n	• பெரிய ஃபைல்களைப் பதிவிறக்குதல்/பதிவேற்றுதல்\n	• அதிக வெப்பநிலையில் டேப்லெட்டைப் பயன்படுத்துதல்"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"மொபைல் சூடாகிறது"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"சாதனம் சூடாகிறது"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"டேப்லெட் சூடாகிறது"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"மொபைலின் சூடு குறையும் வரை சில அம்சங்களைப் பயன்படுத்த முடியாது.\nமேலும் தகவலுக்குத் தட்டவும்."</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"சாதனத்தின் சூடு குறையும் வரை சில அம்சங்களைப் பயன்படுத்த முடியாது.\nமேலும் தகவலுக்குத் தட்டவும்."</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"டேப்லெட்டின் சூடு குறையும் வரை சில அம்சங்களைப் பயன்படுத்த முடியாது.\nமேலும் தகவலுக்குத் தட்டவும்."</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"உங்கள் மொபைல் தானாகவே அதன் சூட்டைக் குறைக்க முயலும். தொடர்ந்து மொபைலை உங்களால் பயன்படுத்த முடியும். ஆனால் அது மெதுவாக இயங்கக்கூடும்.\n\nஉங்கள் மொபைலின் சூடு குறைந்தவுடன் அது இயல்பாக இயங்கும்."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"உங்கள் சாதனம் தானாகவே அதன் சூட்டைக் குறைக்க முயலும். தொடர்ந்து சாதனத்தை உங்களால் பயன்படுத்த முடியும். ஆனால் அது மெதுவாக இயங்கக்கூடும்.\n\nஉங்கள் சாதனத்தின் சூடு குறைந்தவுடன் அது இயல்பாக இயங்கும்."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"உங்கள் டேப்லெட் தானாகவே அதன் சூட்டைக் குறைக்க முயலும். தொடர்ந்து டேப்லெட்டை உங்களால் பயன்படுத்த முடியும். ஆனால் அது மெதுவாக இயங்கக்கூடும்.\n\nஉங்கள் டேப்லெட்டின் சூடு குறைந்தவுடன் அது இயல்பாக இயங்கும்."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"\'கைரேகை சென்சார்\' பவர் பட்டனில் உள்ளது. இது டேப்லெட்டின் விளிம்பில் சற்று மேலெழும்பிய ஒலியளவு பட்டனுக்கு அடுத்துள்ள தட்டையான பட்டனாகும்."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"\'கைரேகை சென்சார்\' பவர் பட்டனில் உள்ளது. இது சாதனத்தின் விளிம்பில் சற்று மேலெழும்பிய ஒலியளவு பட்டனுக்கு அடுத்துள்ள தட்டையான பட்டனாகும்."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"\'கைரேகை சென்சார்\' பவர் பட்டனில் உள்ளது. இது மொபைலின் விளிம்பில் சற்று மேலெழும்பிய ஒலியளவு பட்டனுக்கு அடுத்துள்ள தட்டையான பட்டனாகும்."</string>
diff --git a/packages/SystemUI/res-product/values-te/strings.xml b/packages/SystemUI/res-product/values-te/strings.xml
index 98b2189..357b274 100644
--- a/packages/SystemUI/res-product/values-te/strings.xml
+++ b/packages/SystemUI/res-product/values-te/strings.xml
@@ -38,8 +38,26 @@
     <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="3280816298678433681">"మీరు ఫోన్‌ను అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పు ప్రయత్నాలు చేశారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> ప్రయత్నాలలో విఫలమైతే, కార్యాలయ ప్రొఫైల్ తీసివేయబడుతుంది, దీని వలన ప్రొఫైల్ డేటా మొత్తం తొలగించబడుతుంది."</string>
     <string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="4417100487251371559">"మీరు టాబ్లెట్‌ను అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు తప్పు ప్రయత్నాలు చేశారు. కార్యాలయ ప్రొఫైల్ తీసివేయబడుతుంది, దీని వలన ప్రొఫైల్ డేటా మొత్తం తొలగించబడుతుంది."</string>
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"మీరు ఫోన్‌ను అన్‌లాక్ చేయడానికి <xliff:g id="NUMBER">%d</xliff:g> సార్లు తప్పు ప్రయత్నాలు చేశారు. కార్యాలయ ప్రొఫైల్ తీసివేయబడుతుంది, దీని వలన ప్రొఫైల్ డేటా మొత్తం తొలగించబడుతుంది."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"మీరు మీ అన్‌లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> ప్రయత్నాలలో విఫలమైతే, మీరు ఈమెయిల్‌ ఖాతాను ఉపయోగించి మీ టాబ్లెట్‌ను అన్‌లాక్ చేయాల్సి వస్తుంది.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"మీరు మీ అన్‌లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> ప్రయత్నాలలో విఫలమైతే, మీరు ఈమెయిల్‌ ఖాతాను ఉపయోగించి మీ ఫోన్‌ను అన్‌లాక్ చేయాల్సి వస్తుంది.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"మీరు మీ అన్‌లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> ప్రయత్నాలలో విఫలమైతే, మీరు ఈమెయిల్‌ ఖాతాను ఉపయోగించి మీ టాబ్లెట్‌ను అన్‌లాక్ చేయాల్సి వస్తుంది.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"మీరు మీ అన్‌లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%2$d</xliff:g> ప్రయత్నాలలో విఫలమైతే, మీరు ఈమెయిల్‌ ఖాతాను ఉపయోగించి మీ ఫోన్‌ను అన్‌లాక్ చేయాల్సి వస్తుంది.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> సెకన్లలో మళ్లీ ట్రై చేయండి."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"వేడెక్కినందుకు ఫోన్ ఆఫ్ చేయబడింది"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"వేడెక్కినందుకు పరికరం ఆఫ్ చేయబడింది"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"వేడెక్కినందుకు టాబ్లెట్ ఆఫ్ చేయబడింది"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"మీ ఫోన్ ఇప్పుడు సాధారణంగా పని చేస్తోంది.\nమరింత సమాచారం కోసం ట్యాప్ చేయండి"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"మీ పరికరం ఇప్పుడు సాధారణంగా పని చేస్తోంది.\nమరింత సమాచారం కోసం ట్యాప్ చేయండి"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"మీ టాబ్లెట్ ఇప్పుడు సాధారణంగా పని చేస్తోంది.\nమరింత సమాచారం కోసం ట్యాప్ చేయండి"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"మీ ఫోన్ చాలా వేడిగా ఉంది, కనుక చల్లబర్చడానికి ఆఫ్ చేయబడింది. మీ ఫోన్ ఇప్పుడు సాధారణంగా పని చేస్తుంది.\n\nమీరు ఇలా చేస్తే మీ ఫోన్ చాలా వేడెక్కవచ్చు:\n	• రిసోర్స్-ఆధారిత యాప్‌లు (వీడియో గేమ్‌లు, వీడియో లేదా నావిగేషన్ వంటి యాప్‌లు) ఉపయోగించడం\n	• పెద్ద ఫైల్స్‌ను డౌన్‌లోడ్ లేదా అప్‌లోడ్ చేయడం\n	• అధిక ఉష్ణోగ్రతలలో మీ ఫోన్‌ని ఉపయోగించడం"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"మీ పరికరం చాలా వేడిగా ఉంది, కనుక చల్లబర్చడానికి ఆఫ్ చేయబడింది. మీ పరికరం ఇప్పుడు సాధారణంగా పని చేస్తుంది.\n\nమీరు ఇలా చేస్తే మీ పరికరం చాలా వేడెక్కవచ్చు:\n	• రిసోర్స్-ఆధారిత యాప్‌లు (వీడియో గేమ్‌లు, వీడియో లేదా నావిగేషన్ వంటి యాప్‌లు) ఉపయోగించడం\n	• పెద్ద ఫైల్స్‌ను డౌన్‌లోడ్ లేదా అప్‌లోడ్ చేయడం\n	• అధిక ఉష్ణోగ్రతలలో మీ పరికరాన్ని ఉపయోగించడం"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"మీ టాబ్లెట్ చాలా వేడిగా ఉంది, కనుక చల్లబర్చడానికి ఆఫ్ చేయబడింది. మీ టాబ్లెట్ ఇప్పుడు సాధారణంగా పని చేస్తుంది.\n\nమీరు ఇలా చేస్తే మీ టాబ్లెట్ చాలా వేడెక్కవచ్చు:\n	• రిసోర్స్-ఆధారిత యాప్‌లు (వీడియో గేమ్‌లు, వీడియో లేదా నావిగేషన్ వంటి యాప్‌లు) ఉపయోగించడం\n	• పెద్ద ఫైల్స్‌ను డౌన్‌లోడ్ లేదా అప్‌లోడ్ చేయడం\n	• అధిక ఉష్ణోగ్రతలలో మీ టాబ్లెట్‌ను ఉపయోగించడం"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"ఫోన్ వేడెక్కుతోంది"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"పరికరం వేడెక్కుతోంది"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"టాబ్లెట్ వేడెక్కుతోంది"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"ఫోన్‌ను చల్లబరిచే క్రమంలో కొన్ని ఫీచర్‌లు పరిమితం చేయబడ్డాయి.\nమరింత సమాచారం కోసం ట్యాప్ చేయండి"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"పరికరాన్ని చల్లబరిచే క్రమంలో కొన్ని ఫీచర్‌లు పరిమితం చేయబడ్డాయి.\nమరింత సమాచారం కోసం ట్యాప్ చేయండి"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"టాబ్లెట్‌ను చల్లబరిచే క్రమంలో కొన్ని ఫీచర్‌లు పరిమితం చేయబడ్డాయి.\nమరింత సమాచారం కోసం ట్యాప్ చేయండి"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"మీ ఫోన్ ఆటోమేటిక్‌గా చల్లబడటానికి ప్రయత్నిస్తుంది. మీరు ఇప్పటికీ మీ ఫోన్‌ను ఉపయోగించవచ్చు, కానీ దాని పనితీరు నెమ్మదిగా ఉండవచ్చు.\n\nమీ ఫోన్ చల్లబడిన తర్వాత, అది సాధారణ రీతిలో పని చేస్తుంది."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"మీ పరికరం ఆటోమేటిక్‌గా చల్లబరచడానికి ట్రై చేస్తుంది. మీరు ఇప్పటికీ మీ పరికరాన్ని ఉపయోగించవచ్చు, కానీ దాని పనితీరు నెమ్మదిగా ఉండవచ్చు.\n\nమీ పరికరం చల్లబడిన తర్వాత, అది సాధారణ రీతిలో పని చేస్తుంది."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"మీ టాబ్లెట్ ఆటోమేటిక్‌గా చల్లబరచడానికి ట్రై చేస్తుంది. మీరు ఇప్పటికీ మీ టాబ్లెట్‌ని ఉపయోగించవచ్చు, కానీ దాని పనితీరు నెమ్మదిగా ఉండవచ్చు.\n\nమీ టాబ్లెట్ చల్లబడిన తర్వాత, అది సాధారణ రీతిలో పని చేస్తుంది."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"వేలిముద్ర సెన్సార్ పవర్ బటన్‌పై ఉంది. ఇది, ఈ టాబ్లెట్ అంచున ఉబ్బెత్తుగా ఉన్న వాల్యూమ్ బటన్ పక్కన ఉన్న ఫ్లాట్ బటన్."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"వేలిముద్ర సెన్సార్ పవర్ బటన్‌పై ఉంది. ఇది, ఈ పరికరం అంచున ఉబ్బెత్తుగా ఉన్న వాల్యూమ్ బటన్ పక్కన ఉన్న ఫ్లాట్ బటన్."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"వేలిముద్ర సెన్సార్ పవర్ బటన్‌పై ఉంది. ఇది, ఈ ఫోన్ అంచున ఉబ్బెత్తుగా ఉన్న వాల్యూమ్ బటన్ పక్కన ఉన్న ఫ్లాట్ బటన్."</string>
diff --git a/packages/SystemUI/res-product/values-th/strings.xml b/packages/SystemUI/res-product/values-th/strings.xml
index e3d5640..ae1f3ed 100644
--- a/packages/SystemUI/res-product/values-th/strings.xml
+++ b/packages/SystemUI/res-product/values-th/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"คุณปลดล็อกโทรศัพท์ไม่ถูกต้อง <xliff:g id="NUMBER">%d</xliff:g> ครั้งแล้ว ระบบจะนำโปรไฟล์งานออก ซึ่งจะเป็นการลบข้อมูลทั้งหมดในโปรไฟล์"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้อง <xliff:g id="NUMBER_0">%1$d</xliff:g> ครั้งแล้ว หากทำไม่สำเร็จอีก <xliff:g id="NUMBER_1">%2$d</xliff:g> ครั้ง ระบบจะขอให้คุณปลดล็อกแท็บเล็ตโดยใช้บัญชีอีเมล\n\n โปรดลองอีกครั้งใน <xliff:g id="NUMBER_2">%3$d</xliff:g> วินาที"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้อง <xliff:g id="NUMBER_0">%1$d</xliff:g> ครั้งแล้ว หากทำไม่สำเร็จอีก <xliff:g id="NUMBER_1">%2$d</xliff:g> ครั้ง ระบบจะขอให้คุณปลดล็อกโทรศัพท์โดยใช้บัญชีอีเมล\n\n โปรดลองอีกครั้งในอีก <xliff:g id="NUMBER_2">%3$d</xliff:g> วินาที"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"โทรศัพท์ปิดไปเพราะร้อนมาก"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"อุปกรณ์ปิดไปเพราะร้อนมาก"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"แท็บเล็ตปิดไปเพราะร้อนมาก"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"ขณะนี้โทรศัพท์ทำงานเป็นปกติ\nแตะเพื่อดูข้อมูลเพิ่มเติม"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"ขณะนี้อุปกรณ์ทำงานเป็นปกติ\nแตะเพื่อดูข้อมูลเพิ่มเติม"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"ขณะนี้แท็บเล็ตทำงานเป็นปกติ\nแตะเพื่อดูข้อมูลเพิ่มเติม"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"โทรศัพท์ร้อนเกินไปจึงปิดเครื่องเพื่อให้เย็นลง ขณะนี้โทรศัพท์ทำงานเป็นปกติ\n\nโทรศัพท์อาจร้อนเกินไปหากคุณ\n	• ใช้แอปที่ใช้ทรัพยากรมาก (เช่น เกม วิดีโอ หรือแอปการนำทาง)\n	• ดาวน์โหลดหรืออัปโหลดไฟล์ขนาดใหญ่\n	• ใช้โทรศัพท์ในอุณหภูมิที่สูง"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"อุปกรณ์ร้อนเกินไปจึงปิดเครื่องเพื่อให้เย็นลง ขณะนี้อุปกรณ์ทำงานเป็นปกติ\n\nอุปกรณ์อาจร้อนเกินไปหากคุณ\n	• ใช้แอปที่ใช้ทรัพยากรมาก (เช่น เกม วิดีโอ หรือแอปการนำทาง)\n	• ดาวน์โหลดหรืออัปโหลดไฟล์ขนาดใหญ่\n	• ใช้อุปกรณ์ในอุณหภูมิที่สูง"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"แท็บเล็ตร้อนเกินไปจึงปิดเครื่องเพื่อให้เย็นลง ขณะนี้แท็บเล็ตทำงานเป็นปกติ\n\nแท็บเล็ตอาจร้อนเกินไปหากคุณ\n	• ใช้แอปที่ใช้ทรัพยากรมาก (เช่น เกม วิดีโอ หรือแอปการนำทาง)\n	• ดาวน์โหลดหรืออัปโหลดไฟล์ขนาดใหญ่\n	• ใช้แท็บเล็ตในอุณหภูมิที่สูง"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"โทรศัพท์เริ่มร้อน"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"อุปกรณ์เริ่มร้อน"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"แท็บเล็ตเริ่มร้อน"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"ฟีเจอร์บางอย่างจะใช้งานได้จำกัดขณะโทรศัพท์เย็นลง\nแตะเพื่อดูข้อมูลเพิ่มเติม"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"ฟีเจอร์บางอย่างจะใช้งานได้จำกัดขณะอุปกรณ์เย็นลง\nแตะเพื่อดูข้อมูลเพิ่มเติม"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"ฟีเจอร์บางอย่างจะใช้งานได้จำกัดขณะแท็บเล็ตเย็นลง\nแตะเพื่อดูข้อมูลเพิ่มเติม"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"โทรศัพท์จะพยายามลดอุณหภูมิลงโดยอัตโนมัติ คุณยังสามารถใช้โทรศัพท์ได้ แต่อาจทำงานช้าลง\n\nโทรศัพท์จะทำงานตามปกติเมื่อเย็นลงแล้ว"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"อุปกรณ์จะพยายามลดอุณหภูมิลงโดยอัตโนมัติ คุณยังสามารถใช้อุปกรณ์ได้ แต่อาจทำงานช้าลง\n\nอุปกรณ์จะทำงานตามปกติเมื่อเย็นลงแล้ว"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"แท็บเล็ตจะพยายามลดอุณหภูมิลงโดยอัตโนมัติ คุณยังสามารถใช้แท็บเล็ตได้ แต่อาจทำงานช้าลง\n\nแท็บเล็ตจะทำงานตามปกติเมื่อเย็นลงแล้ว"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"เซ็นเซอร์ลายนิ้วมืออยู่ที่ปุ่มเปิด/ปิด ซึ่งเป็นปุ่มแบนข้างปุ่มนูนที่ใช้ปรับระดับเสียงตรงบริเวณขอบของแท็บเล็ต"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"เซ็นเซอร์ลายนิ้วมืออยู่ที่ปุ่มเปิด/ปิด ซึ่งเป็นปุ่มแบนข้างปุ่มนูนที่ใช้ปรับระดับเสียงตรงบริเวณขอบของอุปกรณ์"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"เซ็นเซอร์ลายนิ้วมืออยู่ที่ปุ่มเปิด/ปิด ซึ่งเป็นปุ่มแบนข้างปุ่มนูนที่ใช้ปรับระดับเสียงตรงบริเวณขอบของโทรศัพท์"</string>
diff --git a/packages/SystemUI/res-product/values-tl/strings.xml b/packages/SystemUI/res-product/values-tl/strings.xml
index 4c286eb..74f30ae 100644
--- a/packages/SystemUI/res-product/values-tl/strings.xml
+++ b/packages/SystemUI/res-product/values-tl/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"<xliff:g id="NUMBER">%d</xliff:g> (na) beses mo nang sinubukang i-unlock ang telepono gamit ang maling password. Aalisin ang profile sa trabaho, na magiging dahilan para ma-delete ang lahat ng data sa profile."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"<xliff:g id="NUMBER_0">%1$d</xliff:g> (na) beses kang nagkamali sa pagguhit ng iyong pattern sa pag-unlock. Pagkatapos ng <xliff:g id="NUMBER_1">%2$d</xliff:g> pang hindi matagumpay na pagsubok, hihilingin sa iyong i-unlock ang tablet mo gamit ang isang email account.\n\n Subukan ulit sa loob ng <xliff:g id="NUMBER_2">%3$d</xliff:g> (na) segundo."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"<xliff:g id="NUMBER_0">%1$d</xliff:g> (na) beses kang nagkamali sa pagguhit ng iyong pattern sa pag-unlock. Pagkatapos ng <xliff:g id="NUMBER_1">%2$d</xliff:g> pang hindi matagumpay na pagsubok, hihilingin sa iyong i-unlock ang telepono mo gamit ang isang email account.\n\n Subukan ulit sa loob ng <xliff:g id="NUMBER_2">%3$d</xliff:g> (na) segundo."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Na-off ang telepono dahil sa init"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Na-off ang device dahil sa init"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Na-off ang tablet dahil sa init"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Maayos na ngayong gumagana ang iyong telepono.\nMag-tap para sa higit pang impormasyon"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Maayos na ngayong gumagana ang iyong device.\nMag-tap para sa higit pang impormasyon"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Maayos na ngayong gumagana ang iyong tablet.\nMag-tap para sa higit pang impormasyon"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Napakainit ng telepono mo, kaya nag-off ito para magpalamig. Maayos na itong gumagana.\n\nPosibleng lubos na uminit ang iyong telepono kapag:\n	• Gumagamit ka ng mga resource-intensive na app (gaya ng app para sa gaming, video, o pag-navigate)\n	• Nagda-download o nag-a-upload ka ng malalaking file\n	• Ginagamit mo ang iyong telepono sa maiinit na lugar"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Napakainit ng device mo, kaya nag-off ito para magpalamig. Maayos na itong gumagana.\n\nPosibleng lubos na uminit ang iyong device kapag:\n	• Gumagamit ka ng mga resource-intensive na app (gaya ng app para sa gaming, video, o pag-navigate)\n	• Nagda-download o nag-a-upload ka ng malalaking file\n	• Ginagamit mo ang iyong device sa maiinit na lugar"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Napakainit ng tablet mo, kaya nag-off ito para magpalamig. Maayos na itong gumagana.\n\nPosibleng lubos na uminit ang iyong tablet kapag:\n	• Gumagamit ka ng mga resource-intensive na app (gaya ng app para sa gaming, video, o pag-navigate)\n	• Nagda-download o nag-a-upload ka ng malalaking file\n	• Ginagamit mo ang iyong tablet sa maiinit na lugar"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Umiinit ang telepono"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Umiinit ang device"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Umiinit ang tablet"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Limitado ang ilang feature habang nagpapalamig ang telepono.\nMag-tap para sa higit pang impormasyon"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Limitado ang ilang feature habang nagpapalamig ang device.\nMag-tap para sa higit pang impormasyon"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Limitado ang ilang feature habang nagpapalamig ang tablet.\nMag-tap para sa higit pang impormasyon"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Awtomatikong susubukan ng iyong telepono na magpalamig. Magagamit mo pa rin ang iyong telepono, pero posibleng mas mabagal ang paggana nito.\n\nKapag lumamig na ang telepono mo, gagana ito gaya ng karaniwan."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Awtomatikong susubukan ng iyong device na magpalamig. Magagamit mo pa rin ang iyong device, pero posibleng mas mabagal ang paggana nito.\n\nKapag lumamig na ang device mo, gagana ito gaya ng karaniwan."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Awtomatikong susubukan ng iyong tablet na magpalamig. Magagamit mo pa rin ang iyong tablet, pero posibleng mas mabagal ang paggana nito.\n\nKapag lumamig na ang tablet mo, gagana ito gaya ng karaniwan."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Nasa power button ang sensor para sa fingerprint. Ito ang flat na button sa tabi ng nakaangat na button ng volume sa gilid ng tablet."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Nasa power button ang sensor para sa fingerprint. Ito ang flat na button sa tabi ng nakaangat na button ng volume sa gilid ng device."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Nasa power button ang sensor para sa fingerprint. Ito ang flat na button sa tabi ng nakaangat na button ng volume sa gilid ng telepono."</string>
diff --git a/packages/SystemUI/res-product/values-tr/strings.xml b/packages/SystemUI/res-product/values-tr/strings.xml
index b376e98..68183e4 100644
--- a/packages/SystemUI/res-product/values-tr/strings.xml
+++ b/packages/SystemUI/res-product/values-tr/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Telefonun kilidini <xliff:g id="NUMBER">%d</xliff:g> kez hatalı bir şekilde açmayı denediniz. İş profili kaldırılacak ve tüm profil verileri silinecektir."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Kilit açma deseninizi <xliff:g id="NUMBER_0">%1$d</xliff:g> kez hatalı çizdiniz. <xliff:g id="NUMBER_1">%2$d</xliff:g> başarısız deneme daha yaparsanız tabletinizin kilidini bir e-posta hesabı kullanarak açmanız istenir.\n<xliff:g id="NUMBER_2">%3$d</xliff:g>\n saniye içinde tekrar deneyin."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Kilit açma deseninizi <xliff:g id="NUMBER_0">%1$d</xliff:g> kez yanlış çizdiniz. <xliff:g id="NUMBER_1">%2$d</xliff:g> başarısız deneme daha yaparsanız telefonunuzu bir e-posta hesabı kullanarak açmanız istenir.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> saniye içinde tekrar deneyin."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefon ısındığından kapatıldı"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Cihaz ısındığından kapatıldı"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Tablet ısındığından kapatıldı"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Telefonunuz şu anda normal bir şekilde çalışıyor.\nDaha fazla bilgi için dokunun"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Cihazınız şu anda normal bir şekilde çalışıyor.\nDaha fazla bilgi için dokunun"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Tabletiniz şu anda normal bir şekilde çalışıyor.\nDaha fazla bilgi için dokunun"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefonunuz çok ısındığından soğuması için kapatıldı ve şu anda normal bir şekilde çalışıyor.\n\nTelefonunuz şu koşullarda çok ısınabilir:\n	• Yoğun kaynak gerektiren uygulamalar (oyun, video veya gezinme uygulamaları gibi) kullanma\n	• Büyük dosyalar indirme veya yükleme\n	• Telefonunuzu sıcak yerlerde kullanma"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Cihazınız çok ısındığından soğuması için kapatıldı ve şu anda normal bir şekilde çalışıyor.\n\nAygıtınız şu koşullarda çok ısınabilir:\n	• Yoğun kaynak gerektiren uygulamalar (oyun, video veya gezinme uygulamaları gibi) kullanma\n	• Büyük dosyalar indirme veya yükleme\n	• Cihazınızı sıcak yerlerde kullanma"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Tabletiniz çok ısındığından soğuması için kapatıldı ve şu anda normal bir şekilde çalışıyor.\n\nTabletiniz şu koşullarda çok ısınabilir:\n	• Yoğun kaynak gerektiren uygulamalar (oyun, video veya gezinme uygulamaları gibi) kullanma\n	• Büyük dosyalar indirme veya yükleme\n	• Tabletinizi sıcak yerlerde kullanma"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefon ısınıyor"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Cihaz ısınıyor"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Tablet ısınıyor"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Telefon soğurken bazı özellikler sınırlı olarak kullanılabilir.\nDaha fazla bilgi için dokunun"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Telefon soğurken bazı özellikler sınırlı olarak kullanılabilir.\nDaha fazla bilgi için dokunun"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Tablet soğurken bazı özellikler sınırlı olarak kullanılabilir.\nDaha fazla bilgi için dokunun"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefonunuz otomatik olarak soğumaya çalışacak. Bu sırada telefonunuzu kullanmaya devam edebilirsiniz ancak uygulamalar daha yavaş çalışabilir.\n\nTelefonunuz soğuduktan sonra normal şekilde çalışacaktır."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Cihazınız otomatik olarak soğumaya çalışacak. Cihazınız bu sırada kullanılabilir ancak daha yavaş çalışabilir.\n\nCihazınız soğuduktan sonra normal şekilde çalışacaktır."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Tabletiniz otomatik olarak soğumaya çalışacak. Tabletiniz bu sırada kullanılabilir ancak daha yavaş çalışabilir.\n\nTabletiniz soğuduktan sonra normal şekilde çalışacaktır."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Parmak izi sensörü güç düğmesinin üzerindedir. Bu sensör, tabletin kenarındaki standart ses düğmesinin yanında bulunan düz düğmedir."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Parmak izi sensörü güç düğmesinin üzerindedir. Bu sensör, cihazın kenarındaki standart ses düğmesinin yanında bulunan düz düğmedir."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Parmak izi sensörü güç düğmesinin üzerindedir. Bu sensör, telefonun kenarındaki standart ses düğmesinin yanında bulunan düz düğmedir."</string>
diff --git a/packages/SystemUI/res-product/values-uk/strings.xml b/packages/SystemUI/res-product/values-uk/strings.xml
index ed0762b..e0aff9e8 100644
--- a/packages/SystemUI/res-product/values-uk/strings.xml
+++ b/packages/SystemUI/res-product/values-uk/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Кількість невдалих спроб розблокувати телефон: <xliff:g id="NUMBER">%d</xliff:g>. Буде видалено робочий профіль і всі його дані."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Ключ розблокування неправильно намальовано стільки разів: <xliff:g id="NUMBER_0">%1$d</xliff:g>. Залишилося спроб: <xliff:g id="NUMBER_1">%2$d</xliff:g>. У разі невдачі з\'явиться запит розблокувати планшет за допомогою облікового запису електронної пошти.\n\n Повторіть спробу за <xliff:g id="NUMBER_2">%3$d</xliff:g> с."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Ключ розблокування неправильно намальовано стільки разів: <xliff:g id="NUMBER_0">%1$d</xliff:g>. Залишилося спроб: <xliff:g id="NUMBER_1">%2$d</xliff:g>. У разі невдачі з\'явиться запит розблокувати телефон за допомогою облікового запису електронної пошти.\n\n Повторіть спробу за <xliff:g id="NUMBER_2">%3$d</xliff:g> с."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Телефон перегрівся й вимкнувся"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Пристрій перегрівся й вимкнувся"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Планшет перегрівся й вимкнувся"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Зараз телефон працює як зазвичай.\nНатисніть, щоб дізнатися більше"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Зараз пристрій працює як зазвичай.\nНатисніть, щоб дізнатися більше"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Зараз планшет працює як зазвичай.\nНатисніть, щоб дізнатися більше"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Телефон перегрівся, тому вимкнувся, щоб охолонути. Зараз він працює як зазвичай.\n\nТелефон може перегріватися, якщо ви:\n	• використовуєте ресурсомісткі додатки (наприклад, ігри, додатки з відео чи для навігації);\n	• завантажуєте великі файли на телефон або з нього;\n	• використовуєте телефон за високої температури."</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Пристрій перегрівся, тому вимкнувся, щоб охолонути. Зараз він працює як зазвичай.\n\nПристрій може перегріватися, якщо ви:\n	• використовуєте ресурсомісткі додатки (наприклад, ігри, додатки з відео чи для навігації);\n	• завантажуєте великі файли на пристрій або з нього;\n	• використовуєте пристрій за високої температури."</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Планшет перегрівся, тому вимкнувся, щоб охолонути. Зараз він працює як зазвичай.\n\nПланшет може перегріватися, якщо ви:\n	• використовуєте ресурсомісткі додатки (наприклад, ігри, додатки з відео чи для навігації);\n	• завантажуєте великі файли на планшет або з нього;\n	• використовуєте планшет за високої температури."</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Телефон нагрівається"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Пристрій нагрівається"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Планшет нагрівається"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Під час охолодження телефона деякі функції обмежуються.\nНатисніть, щоб дізнатися більше"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Під час охолодження пристрою деякі функції обмежуються.\nНатисніть, щоб дізнатися більше"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Під час охолодження планшета деякі функції обмежуються.\nНатисніть, щоб дізнатися більше"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Ваш телефон автоматично спробує охолодитися. Ви можете й далі користуватися ним, але він може працювати повільніше.\n\nКоли телефон охолоне, він знову працюватиме як зазвичай."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Ваш пристрій автоматично спробує охолодитися. Ви можете й далі користуватися ним, але він може працювати повільніше.\n\nКоли пристрій охолоне, він знову працюватиме як зазвичай."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Ваш планшет автоматично спробує охолодитися. Ви можете й далі користуватися ним, але він може працювати повільніше.\n\nКоли планшет охолоне, він знову працюватиме як зазвичай."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Сканер відбитків пальців розташовано на кнопці живлення. Це плоска кнопка поруч із випуклою кнопкою гучності на бічній крайці планшета."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Сканер відбитків пальців розташовано на кнопці живлення. Це плоска кнопка поруч із випуклою кнопкою гучності на бічній крайці пристрою."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Сканер відбитків пальців розташовано на кнопці живлення. Це плоска кнопка поруч із випуклою кнопкою гучності на бічній крайці телефона."</string>
diff --git a/packages/SystemUI/res-product/values-ur/strings.xml b/packages/SystemUI/res-product/values-ur/strings.xml
index c706aba..98fe163 100644
--- a/packages/SystemUI/res-product/values-ur/strings.xml
+++ b/packages/SystemUI/res-product/values-ur/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"آپ نے فون کو غیر مقفل کرنے کیلئے <xliff:g id="NUMBER">%d</xliff:g> بار غلط طریقے سے کوشش کی ہے۔ دفتری پروفائل ہٹا دی جائے گی، جس سے پروفائل کا سبھی ڈیٹا حذف ہو جائے گا۔"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"آپ نے اپنا غیر مقفل کرنے کا پیٹرن <xliff:g id="NUMBER_0">%1$d</xliff:g> بار غلط طریقے سے ڈرا کیا ہے۔ <xliff:g id="NUMBER_1">%2$d</xliff:g> مزید ناکام کوششوں کے بعد، آپ سے ایک ای میل اکاؤنٹ استعمال کر کے اپنا ٹیبلیٹ غیر مقفل کرنے کو کہا جائے گا۔\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> سیکنڈ میں دوبارہ کوشش کریں۔"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"آپ نے اپنا غیر مقفل کرنے کا پیٹرن <xliff:g id="NUMBER_0">%1$d</xliff:g> بار غلط طریقے سے ڈرا کیا ہے۔ <xliff:g id="NUMBER_1">%2$d</xliff:g> مزید ناکام کوششوں کے بعد، آپ سے ایک ای میل اکاؤنٹ استعمال کر کے اپنا فون غیر مقفل کرنے کو کہا جائے گا۔\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> سیکنڈ میں دوبارہ کوشش کریں۔"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"گرم ہونے کی وجہ سے فون آف ہو گیا"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"گرم ہونے کی وجہ سے آلہ آف ہو گیا"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"گرم ہونے کی وجہ سے ٹیبلیٹ آف ہو گیا"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"آپ کا فون اب حسب معمول چل رہا ہے۔\nمزید معلومات کیلئے تھپتھپائیں"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"آپ کا آلہ اب حسب معمول چل رہا ہے۔\nمزید معلومات کیلئے تھپتھپائیں"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"آپ کا ٹیبلیٹ اب حسب معمول چل رہا ہے۔\nمزید معلومات کیلئے تھپتھپائیں"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"آپ کا فون کافی گرم ہو گيا تھا، اس لئے ٹھنڈا ہونے کیلئے یہ آف ہو گیا۔ اب آپ کا فون حسب معمول کام کر رہا ہے۔\n\nمندرجہ ذیل چیزیں کرنے پر آپ کا فون کافی گرم ہو سکتا ہے:\n	• ماخذ کا زیادہ استعمال کرنے والی ایپس (جیسے کہ گیمنگ، ویڈیو، یا نیویگیشن ایپس) کا استعمال کرنا\n	• بڑی فائلز ڈاؤن لوڈ یا اپ لوڈ کرنا\n	• اعلی درجہ حرارت میں فون کا استعمال کرنا"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"آپ کا آلہ کافی گرم ہو گيا تھا، اس لئے ٹھنڈا ہونے کیلئے یہ آف ہو گیا۔ اب آپ کا آلہ حسب معمول کام کر رہا ہے۔\n\nمندرجہ ذیل چیزیں کرنے پر آپ کا آلہ کافی گرم ہو سکتا ہے:\n	• ماخذ کا زیادہ استعمال کرنے والی ایپس (جیسے کہ گیمنگ، ویڈیو، یا نیویگیشن ایپس) کا استعمال کرنا\n	• بڑی فائلز ڈاؤن لوڈ یا اپ لوڈ کرنا\n	• اعلی درجہ حرارت میں آلہ کا استعمال کرنا"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"آپ کا ٹیبلیٹ کافی گرم ہو گيا تھا، اس لئے ٹھنڈا ہونے کیلئے یہ آف ہو گیا۔ اب آپ کا ٹیبلیٹ حسب معمول کام کر رہا ہے۔\n\nمندرجہ ذیل چیزیں کرنے پر آپ کا ٹیبلیٹ کافی گرم ہو سکتا ہے:\n	• ماخذ کا زیادہ استعمال کرنے والی ایپس (جیسے کہ گیمنگ، ویڈیو، یا نیویگیشن ایپس) کا استعمال کرنا\n	• بڑی فائلز ڈاؤن لوڈ یا اپ لوڈ کرنا\n	• اعلی درجہ حرارت میں اپنے ٹیبلیٹ کا استعمال کرنا"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"فون گرم ہو رہا ہے"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"آلہ گرم ہو رہا ہے"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"ٹیبلیٹ گرم ہو رہا ہے"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"فون کے ٹھنڈا ہونے تک کچھ خصوصیات محدود ہیں۔\nمزید معلومات کیلئے تھپتھپائیں"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"آلہ کے ٹھنڈا ہونے تک کچھ خصوصیات محدود ہیں۔\nمزید معلومات کیلئے تھپتھپائیں"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"ٹیبلیٹ کے ٹھنڈا ہونے تک کچھ خصوصیات محدود ہیں۔\nمزید معلومات کیلئے تھپتھپائیں"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"آپ کا فون خودکار طور پر ٹھنڈا ہونے کی کوشش کرے گا۔ آپ ابھی بھی اپنا فون استعمال کر سکتے ہیں، مگر ہو سکتا ہے یہ سست چلے۔\n\nآپ کا فون ٹھنڈا ہونے کے بعد، یہ حسب معمول چلے گا۔"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"آپ کا آلہ خودکار طور پر ٹھنڈا ہونے کی کوشش کرے گا۔ آپ اب بھی اپنا آلہ استعمال کر سکتے ہیں، لیکن یہ آہستہ چل سکتا ہے۔\n\nآپ کا آلہ ٹھنڈا ہونے کے بعد، یہ حسب معمول چلے گا۔"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"آپ کا ٹیبلیٹ خودکار طور پر ٹھنڈا ہونے کی کوشش کرے گا۔ آپ اب بھی اپنا ٹیبلیٹ استعمال کر سکتے ہیں، لیکن یہ آہستہ چل سکتا ہے۔\n\nآپ کا ٹیبلیٹ ٹھنڈا ہونے کے بعد، یہ حسب معمول چلے گا۔"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"فنگر پرنٹ سینسر پاور بٹن پر موجود ہے۔ یہ ٹیبلیٹ کے کنارے پر ابھرے ہوئے والیوم بٹن کے آگے والا ہموار بٹن ہے۔"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"فنگر پرنٹ سینسر پاور بٹن پر موجود ہے۔ یہ آلے کے کنارے پر ابھرے ہوئے والیوم بٹن کے آگے والا ہموار بٹن ہے۔"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"فنگر پرنٹ سینسر پاور بٹن پر موجود ہے۔ یہ فون کے کنارے پر ابھرے ہوئے والیوم بٹن کے آگے والا ہموار بٹن ہے۔"</string>
diff --git a/packages/SystemUI/res-product/values-uz/strings.xml b/packages/SystemUI/res-product/values-uz/strings.xml
index 3afa159..38f9ebb 100644
--- a/packages/SystemUI/res-product/values-uz/strings.xml
+++ b/packages/SystemUI/res-product/values-uz/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Siz telefonni qulfdan chiqarish uchun <xliff:g id="NUMBER">%d</xliff:g> marta xato urinish qildingiz. Endi ish profili oʻchirib tashlanadi va undagi barcha maʼlumotlar ham oʻchib ketadi."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Grafik kalit <xliff:g id="NUMBER_0">%1$d</xliff:g> marta xato chizildi. <xliff:g id="NUMBER_1">%2$d</xliff:g> marta muvaffaqiyatsiz urinishdan keyin sizdan emailingizdan foydalanib, planshet qulfini ochishingiz soʻraladi.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> soniyadan keyin yana urinib koʻring."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Grafik kalit <xliff:g id="NUMBER_0">%1$d</xliff:g> marta xato chizildi. <xliff:g id="NUMBER_1">%2$d</xliff:g> marta muvaffaqiyatsiz urinishdan keyin sizdan emailngizdan foydalanib, telefon qulfini ochishingiz soʻraladi.\n\n <xliff:g id="NUMBER_2">%3$d</xliff:g> soniyadan keyin qayta urinib koʻring."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Telefon isib ketgani sababli oʻchirildi"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Qurilma isib ketgani sababli oʻchirildi"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Planshet isib ketgani sababli oʻchirildi"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Endi telefoningiz normal holatda ishlayapti.\nBatafsil axborot uchun bosing"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Endi qurilmangiz normal holatda ishlayapti.\nBatafsil axborot uchun bosing"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Endi planshetingiz normal holatda ishlayapti.\nBatafsil axborot uchun bosing"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Telefon qizib ketganligi sababli sovitish uchun oʻchirilgan edi. Endi telefoningiz normal holatda ishlayapti.\n\nTelefon quyidagi hollarda qizib ketishi mumkin:\n	• Resurstalab ilovalar ishlatilganda (masalan, oʻyin, video yoki navigatsiya ilovalari)\n	• Katta faylni yuklab olishda yoki yuklashda\n	• Telefondan yuqori haroratda foydalanganda"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Qurilma qizib ketganligi sababli sovitish uchun oʻchirilgan edi. Endi qurilmangiz normal holatda ishlayapti.\n\nQurilma quyidagi hollarda qizib ketishi mumkin:\n	• Resurstalab ilovalar ishlatilganda (masalan, oʻyin, video yoki navigatsiya ilovalari)\n	• Katta faylni yuklab olishda yoki yuklashda\n	• Qurilmadan yuqori haroratda foydalanganda"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Planshet qizib ketganligi sababli sovitish uchun oʻchirilgan edi. Endi planshetingiz normal holatda ishlayapti.\n\nPlanshet quyidagi hollarda qizib ketishi mumkin:\n	• Resurstalab ilovalar ishlatilganda (masalan, oʻyin, video yoki navigatsiya ilovalari)\n	• Katta faylni yuklab olishda yoki yuklashda\n	• Planshetdan yuqori haroratda foydalanganda"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Telefon qizimoqda"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Qurilma qizimoqda"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Planshet qizimoqda"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Telefon sovib olishi uchun ayrim funksiyalar cheklanadi.\nBatafsil axborot uchun bosing"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Qurilma sovib olishi uchun ayrim funksiyalar cheklanadi.\nBatafsil axborot uchun bosing"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Planshet sovib olishi uchun ayrim funksiyalar cheklanadi.\nBatafsil axborot uchun bosing"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Telefoningiz avtomatik ravishda oʻzini sovitadi. Telefondan foydalanishda davom etishingiz mumkin, lekin u sekinroq ishlashi mumkin.\n\nTelefon sovishi bilan normal holatda ishlashni boshlaydi."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Qurilmangiz avtomatik ravishda oʻzini sovitadi. Qurilmadan foydalanishda davom etishingiz mumkin, lekin u sekinroq ishlashi mumkin.\n\nQurilma sovishi bilan normal holatda ishlashni boshlaydi."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Planshetingiz avtomatik ravishda oʻzini sovitadi. Planshetdan foydalanishda davom etishingiz mumkin, lekin u sekinroq ishlashi mumkin.\n\nPlanshet sovishi bilan normal holatda ishlashni boshlaydi."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Barmoq izi sensori quvvat tugmasida joylashgan. U tekis tugma planshetning yon chekkasida tovush balandligi tugmasining yonida joylashgan."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Barmoq izi sensori quvvat tugmasida joylashgan. U tekis tugma qurilmaning yon chekkasida tovush balandligi tugmasining yonida joylashgan."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Barmoq izi sensori quvvat tugmasida joylashgan. U tekis tugma telefonning yon chekkasida tovush balandligi tugmasining yonida joylashgan."</string>
diff --git a/packages/SystemUI/res-product/values-vi/strings.xml b/packages/SystemUI/res-product/values-vi/strings.xml
index 6e121c6..fb3f862 100644
--- a/packages/SystemUI/res-product/values-vi/strings.xml
+++ b/packages/SystemUI/res-product/values-vi/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Bạn đã mở khóa điện thoại sai <xliff:g id="NUMBER">%d</xliff:g> lần. Hồ sơ công việc sẽ bị xóa, tức là tất cả dữ liệu hồ sơ sẽ bị xóa."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"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. Sau <xliff:g id="NUMBER_1">%2$d</xliff:g> lần thử không thành công nữa, bạn sẽ được yêu cầu mở khóa máy tính bảng bằng tài khoản email.\n\n Hãy thử lại sau <xliff:g id="NUMBER_2">%3$d</xliff:g> giây."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"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. Sau <xliff:g id="NUMBER_1">%2$d</xliff:g> lần thử không thành công nữa, bạn sẽ được yêu cầu mở khóa điện thoại bằng tài khoản email.\n\n Hãy thử lại sau <xliff:g id="NUMBER_2">%3$d</xliff:g> giây."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Điện thoại đã tắt do quá nóng"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Thiết bị đã tắt do quá nóng"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Máy tính bảng đã tắt do quá nóng"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Hiện điện thoại của bạn đang chạy bình thường.\nHãy nhấn để biết thêm thông tin"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Hiện thiết bị của bạn đang chạy bình thường.\nHãy nhấn để biết thêm thông tin"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Hiện máy tính bảng của bạn đang chạy bình thường.\nHãy nhấn để biết thêm thông tin"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Do quá nóng nên điện thoại đã tắt để hạ nhiệt. Hiện điện thoại của bạn đang chạy bình thường.\n\nĐiện thoại có thể bị quá nóng nếu bạn:\n	• Dùng các ứng dụng tốn nhiều tài nguyên (như ứng dụng trò chơi, video hoặc chỉ đường)\n	• Tải xuống hoặc tải lên tệp có dung lượng lớn\n	• Dùng điện thoại ở nhiệt độ cao"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Do quá nóng nên thiết bị đã tắt để hạ nhiệt. Hiện thiết bị của bạn đang chạy bình thường.\n\nThiết bị có thể bị quá nóng nếu bạn:\n	• Dùng các ứng dụng tốn nhiều tài nguyên (như ứng dụng trò chơi, video hoặc chỉ đường)\n	• Tải xuống hoặc tải lên tệp có dung lượng lớn\n	• Dùng thiết bị ở nhiệt độ cao"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Do quá nóng nên máy tính bảng đã tắt để hạ nhiệt. Hiện máy tính bảng của bạn đang chạy bình thường.\n\nMáy tính bảng có thể bị quá nóng nếu bạn:\n	• Dùng các ứng dụng tốn nhiều tài nguyên (như ứng dụng trò chơi, video hoặc chỉ đường)\n	• Tải xuống hoặc tải lên tệp có dung lượng lớn\n	• Dùng máy tính bảng ở nhiệt độ cao"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Điện thoại đang nóng lên"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Thiết bị đang nóng lên"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Máy tính bảng đang nóng lên"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Một số tính năng bị hạn chế trong khi điện thoại nguội dần.\nHãy nhấn để biết thêm thông tin"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Một số tính năng bị hạn chế trong khi thiết bị nguội dần.\nHãy nhấn để biết thêm thông tin"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Một số tính năng bị hạn chế trong khi máy tính bảng nguội dần.\nHãy nhấn để biết thêm thông tin"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Điện thoại của bạn sẽ tự động nguội dần. Bạn vẫn sẽ sử dụng được điện thoại, nhưng điện thoại có thể chạy chậm hơn.\n\nSau khi đã nguội, điện thoại sẽ chạy bình thường."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Thiết bị của bạn sẽ tự động nguội dần. Bạn vẫn sẽ sử dụng được thiết bị, nhưng thiết bị có thể chạy chậm hơn.\n\nSau khi đã nguội, thiết bị sẽ chạy bình thường."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Máy tính bảng của bạn sẽ tự động nguội dần. Bạn vẫn sẽ sử dụng được máy tính bảng, nhưng máy tính bảng có thể chạy chậm hơn.\n\nSau khi đã nguội, máy tính bảng sẽ chạy bình thường."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Cảm biến vân tay nằm trên nút nguồn. Đó là nút phẳng cạnh nút âm lượng nhô lên trên cạnh của máy tính bảng."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Cảm biến vân tay nằm trên nút nguồn. Đó là nút phẳng cạnh nút âm lượng nhô lên trên cạnh của thiết bị."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Cảm biến vân tay nằm trên nút nguồn. Đó là nút phẳng cạnh nút âm lượng nhô lên trên cạnh của điện thoại."</string>
diff --git a/packages/SystemUI/res-product/values-zh-rCN/strings.xml b/packages/SystemUI/res-product/values-zh-rCN/strings.xml
index a60982f..6895219 100644
--- a/packages/SystemUI/res-product/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res-product/values-zh-rCN/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"您尝试解锁手机后失败的次数已达 <xliff:g id="NUMBER">%d</xliff:g> 次。系统将移除此工作资料,而这将删除所有的工作资料数据。"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"您已 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次画错解锁图案。如果再尝试 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次后仍不成功,系统就会要求您使用自己的电子邮件帐号解锁平板电脑。\n\n请在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒后重试。"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"您已 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次画错解锁图案。如果再尝试 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次后仍不成功,系统就会要求您使用自己的电子邮件帐号解锁手机。\n\n请在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒后重试。"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"手机先前因过热而关机"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"设备先前因过热而关机"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"平板电脑先前因过热而关机"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"现在,您的手机已恢复正常运行。\n点按即可了解详情"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"现在,您的设备已恢复正常运行。\n点按即可了解详情"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"现在,您的平板电脑已恢复正常运行。\n点按即可了解详情"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"您的手机先前因过热而关机降温。现已恢复正常运行。\n\n以下情况可能会导致您的手机过热:\n	• 使用占用大量资源的应用(例如游戏、视频或导航应用)\n	• 下载或上传大型文件\n	• 在高温环境下使用手机"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"您的设备先前因过热而关机降温。现已恢复正常运行。\n\n以下情况可能会导致您的设备过热:\n	• 使用占用大量资源的应用(例如游戏、视频或导航应用)\n	• 下载或上传大型文件\n	• 在高温环境下使用设备"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"您的平板电脑先前因过热而关机降温。现已恢复正常运行。\n\n以下情况可能会导致您的平板电脑过热:\n	• 使用占用大量资源的应用(例如游戏、视频或导航应用)\n	• 下载或上传大型文件\n	• 在高温环境下使用平板电脑"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"手机温度上升中"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"设备温度上升中"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"平板电脑温度上升中"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"手机降温期间,部分功能的使用会受限制。\n点按即可了解详情"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"设备降温期间,部分功能的使用会受限制。\n点按即可了解详情"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"平板电脑降温期间,部分功能的使用会受限制。\n点按即可了解详情"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"您的手机将自动尝试降温。您依然可以使用您的手机,但是它的运行速度可能会较慢。\n\n手机降温完毕后,就会恢复正常的运行速度。"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"您的设备将自动尝试降温。您依然可以使用您的设备,但是它的运行速度可能会较慢。\n\n设备降温完毕后,就会恢复正常的运行速度。"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"您的平板电脑将自动尝试降温。您依然可以使用您的平板电脑,但是它的运行速度可能会较慢。\n\n平板电脑降温完毕后,就会恢复正常的运行速度。"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"指纹传感器在电源按钮上。电源按钮是一个扁平按钮,位于平板电脑边缘凸起的音量按钮旁边。"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"指纹传感器在电源按钮上。电源按钮是一个扁平按钮,位于设备边缘凸起的音量按钮旁边。"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"指纹传感器在电源按钮上。电源按钮是一个扁平按钮,位于手机边缘凸起的音量按钮旁边。"</string>
diff --git a/packages/SystemUI/res-product/values-zh-rHK/strings.xml b/packages/SystemUI/res-product/values-zh-rHK/strings.xml
index 9e55398..6bcb048 100644
--- a/packages/SystemUI/res-product/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res-product/values-zh-rHK/strings.xml
@@ -26,20 +26,38 @@
     <string name="keyguard_missing_sim_message" product="tablet" msgid="408124574073032188">"平板電腦中沒有 SIM 卡。"</string>
     <string name="keyguard_missing_sim_message" product="default" msgid="2605468359948247208">"手機中沒有 SIM 卡。"</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="6278551068943958651">"PIN 碼不符"</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="302165994845009232">"您嘗試解鎖平板電腦已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統將重設此平板電腦,而所有平板電腦資料亦會一併刪除。"</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="2594813176164266847">"您嘗試解鎖手機已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統將重設此手機,而所有手機資料亦會一併刪除。"</string>
-    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="8710104080409538587">"您嘗試解鎖平板電腦已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。系統將重設此平板電腦,而所有平板電腦資料亦會一併刪除。"</string>
-    <string name="kg_failed_attempts_now_wiping" product="default" msgid="6381835450014881813">"您嘗試解鎖手機已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。系統將重設此手機,而所有手機資料亦會一併刪除。"</string>
-    <string name="kg_failed_attempts_almost_at_erase_user" product="tablet" msgid="7325071812832605911">"您嘗試解鎖平板電腦已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統將移除此使用者,而所有使用者資料亦會一併刪除。"</string>
-    <string name="kg_failed_attempts_almost_at_erase_user" product="default" msgid="8110939900089863103">"您嘗試解鎖手機已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統將移除此使用者,而所有使用者資料亦會一併刪除。"</string>
-    <string name="kg_failed_attempts_now_erasing_user" product="tablet" msgid="8509811676952707883">"您嘗試解鎖平板電腦已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。系統將移除此使用者,而所有使用者資料亦會一併刪除。"</string>
-    <string name="kg_failed_attempts_now_erasing_user" product="default" msgid="3051962486994265014">"您嘗試解鎖手機已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。系統將移除此使用者,而所有使用者資料亦會一併刪除。"</string>
-    <string name="kg_failed_attempts_almost_at_erase_profile" product="tablet" msgid="1049523640263353830">"您嘗試解鎖平板電腦已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統將移除此工作設定檔,而所有設定檔資料亦會一併刪除。"</string>
-    <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="3280816298678433681">"您嘗試解鎖手機已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統將移除此工作設定檔,而所有設定檔資料亦會一併刪除。"</string>
-    <string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="4417100487251371559">"您嘗試解鎖平板電腦已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。系統將移除此工作設定檔,而所有設定檔資料亦會一併刪除。"</string>
-    <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"您嘗試解鎖手機已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。系統將移除此工作設定檔,而所有設定檔資料亦會一併刪除。"</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求您透過電郵帳戶解鎖平板電腦。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求您透過電郵帳戶解鎖手機。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="302165994845009232">"你嘗試解鎖平板電腦已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統將重設此平板電腦,而所有平板電腦資料亦會一併刪除。"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="2594813176164266847">"你嘗試解鎖手機已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統將重設此手機,而所有手機資料亦會一併刪除。"</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="8710104080409538587">"你嘗試解鎖平板電腦已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。系統將重設此平板電腦,而所有平板電腦資料亦會一併刪除。"</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="6381835450014881813">"你嘗試解鎖手機已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。系統將重設此手機,而所有手機資料亦會一併刪除。"</string>
+    <string name="kg_failed_attempts_almost_at_erase_user" product="tablet" msgid="7325071812832605911">"你嘗試解鎖平板電腦已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統將移除此使用者,而所有使用者資料亦會一併刪除。"</string>
+    <string name="kg_failed_attempts_almost_at_erase_user" product="default" msgid="8110939900089863103">"你嘗試解鎖手機已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統將移除此使用者,而所有使用者資料亦會一併刪除。"</string>
+    <string name="kg_failed_attempts_now_erasing_user" product="tablet" msgid="8509811676952707883">"你嘗試解鎖平板電腦已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。系統將移除此使用者,而所有使用者資料亦會一併刪除。"</string>
+    <string name="kg_failed_attempts_now_erasing_user" product="default" msgid="3051962486994265014">"你嘗試解鎖手機已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。系統將移除此使用者,而所有使用者資料亦會一併刪除。"</string>
+    <string name="kg_failed_attempts_almost_at_erase_profile" product="tablet" msgid="1049523640263353830">"你嘗試解鎖平板電腦已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統將移除此工作設定檔,而所有設定檔資料亦會一併刪除。"</string>
+    <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="3280816298678433681">"你嘗試解鎖手機已失敗 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統將移除此工作設定檔,而所有設定檔資料亦會一併刪除。"</string>
+    <string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="4417100487251371559">"你嘗試解鎖平板電腦已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。系統將移除此工作設定檔,而所有設定檔資料亦會一併刪除。"</string>
+    <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"你嘗試解鎖手機已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。系統將移除此工作設定檔,而所有設定檔資料亦會一併刪除。"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"你已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求你透過電郵帳戶解鎖平板電腦。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"你已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。如果之後再嘗試 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次仍未成功,系統會要求你透過電郵帳戶解鎖手機。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"手機因過熱而關機"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"裝置因過熱而關機"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"平板電腦因過熱而關機"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"你的手機現已正常運作。\n輕按即可瞭解詳情"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"你的裝置現已正常運作。\n輕按即可瞭解詳情"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"你的平板電腦現已正常運作。\n輕按即可瞭解詳情"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"你的手機之前因過熱而關機降溫。手機現已正常運作。\n\n以下情況可能會導致手機過熱:\n	• 使用耗用大量資源的應用程式 (例如遊戲、影片或導航應用程式)\n	• 下載或上載大型檔案\n	• 在高溫環境下使用手機"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"你的裝置之前因過熱而關機降溫。裝置現已正常運作。\n\n以下情況可能會導致裝置過熱:\n	• 使用耗用大量資源的應用程式 (例如遊戲、影片或導航應用程式)\n	• 下載或上載大型檔案\n	• 在高溫環境下使用裝置"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"你的平板電腦之前因過熱而關機降溫。平板電腦現已正常運作。\n\n以下情況可能會導致平板電腦過熱:\n	• 使用耗用大量資源的應用程式 (例如遊戲、影片或導航應用程式)\n	• 下載或上載大型檔案\n	• 在高溫環境下使用平板電腦"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"手機溫度正在上升"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"裝置溫度正在上升"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"平板電腦溫度正在上升"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"手機降溫時,部分功能會受限制。\n輕按即可瞭解詳情"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"裝置降溫時,部分功能會受限制。\n輕按即可瞭解詳情"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"平板電腦降溫時,部分功能會受限制。\n輕按即可瞭解詳情"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"手機會自動嘗試降溫。你仍可以使用手機,但手機的運作速度可能較慢。\n\n手機降溫後便會正常運作。"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"裝置會自動嘗試降溫。你仍可以使用裝置,但裝置的運作速度可能較慢。\n\n裝置降溫後便會正常運作。"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"平板電腦會自動嘗試降溫。你仍可以使用平板電腦,但平板電腦的運作速度可能較慢。\n\n平板電腦降溫後便會正常運作。"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"指紋感應器位於開關按鈕上,開關按鈕形狀扁平,位於平板電腦邊緣凸起的音量按鈕旁。"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"指紋感應器位於開關按鈕上,開關按鈕形狀扁平,位於裝置邊緣凸起的音量按鈕旁。"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"指紋感應器位於開關按鈕上,開關按鈕形狀扁平,位於手機邊緣凸起的音量按鈕旁。"</string>
diff --git a/packages/SystemUI/res-product/values-zh-rTW/strings.xml b/packages/SystemUI/res-product/values-zh-rTW/strings.xml
index ae512e0..f407803 100644
--- a/packages/SystemUI/res-product/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res-product/values-zh-rTW/strings.xml
@@ -40,9 +40,27 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"你嘗試解鎖手機已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次。你的工作資料夾將遭到移除,所有設定檔資料也會一併遭到刪除。"</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"你的解鎖圖案已畫錯 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,目前還剩 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次機會。如果失敗次數超過限制,系統會要求你透過電子郵件帳戶將平板電腦解鎖。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"你的解鎖圖案已畫錯 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次,目前還剩 <xliff:g id="NUMBER_1">%2$d</xliff:g> 次機會。如果失敗次數超過限制,系統會要求你透過電子郵件帳戶將手機解鎖。\n\n請在 <xliff:g id="NUMBER_2">%3$d</xliff:g> 秒後再試一次。"</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"手機因過熱而關機"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"裝置因過熱而關機"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"平板電腦因過熱而關機"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"手機現在已恢復正常運作。\n輕觸即可瞭解詳情"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"裝置現在已恢復正常運作。\n輕觸即可瞭解詳情"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"平板電腦現在已恢復正常運作。\n輕觸即可瞭解詳情"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"手機先前過熱,因此關機降溫,現在已恢復正常運作。\n\n以下狀況可能會導致手機過熱:\n	• 使用的應用程式需要大量資源,例如遊戲、影片或導航應用程式\n	• 下載或上傳大型檔案\n	• 在高溫下使用手機"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"裝置先前過熱,因此關機降溫,現在已恢復正常運作。\n\n以下狀況可能會導致裝置過熱:\n	• 使用的應用程式需要大量資源,例如遊戲、影片或導航應用程式\n	• 下載或上傳大型檔案\n	• 在高溫下使用裝置"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"平板電腦先前過熱,因此關機降溫,現在已恢復正常運作。\n\n以下狀況可能會導致平板電腦過熱:\n	• 使用的應用程式需要大量資源,例如遊戲、影片或導航應用程式\n	• 下載或上傳大型檔案\n	• 在高溫下使用平板電腦"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"手機溫度上升"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"裝置溫度上升"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"平板電腦溫度上升"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"手機降溫期間,某些功能會受到限制。\n輕觸即可瞭解詳情"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"裝置降溫時,某些功能會受到限制。\n輕觸即可瞭解詳情"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"平板電腦降溫時,某些功能會受到限制。\n輕觸即可瞭解詳情"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"手機會自動嘗試降溫。你仍可繼續使用手機,但運作速度可能會變慢。\n\n手機降溫後就會恢復正常運作。"</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"裝置會自動嘗試降溫。你仍可繼續使用裝置,但運作速度可能會變慢。\n\n裝置降溫後就會恢復正常運作。"</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"平板電腦會自動嘗試降溫。你仍可繼續使用平板電腦,但運作速度可能會變慢。\n\n平板電腦降溫後就會恢復正常運作。"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"指紋感應器在電源鍵上。電源鍵的形狀是扁平的,位在平板電腦側邊凸起的音量按鈕旁。"</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"指紋感應器在電源鍵上。電源鍵的形狀是扁平的,位在裝置側邊凸起的音量按鈕旁。"</string>
-    <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"指紋感應器在電源鍵上。電源鍵的形狀是扁平的,位在手機側邊凸起的音量按鈕旁。"</string>
+    <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"指紋感應器在電源鍵上。電源鍵的形狀是扁平的,位在手機側邊凸起的音量鍵旁。"</string>
     <string name="global_action_lock_message" product="default" msgid="7092460751050168771">"解鎖手機可查看更多選項"</string>
     <string name="global_action_lock_message" product="tablet" msgid="1024230056230539493">"解鎖平板電腦可查看更多選項"</string>
     <string name="global_action_lock_message" product="device" msgid="3165224897120346096">"解鎖裝置可查看更多選項"</string>
diff --git a/packages/SystemUI/res-product/values-zu/strings.xml b/packages/SystemUI/res-product/values-zu/strings.xml
index 6b20014..89d4264 100644
--- a/packages/SystemUI/res-product/values-zu/strings.xml
+++ b/packages/SystemUI/res-product/values-zu/strings.xml
@@ -40,6 +40,24 @@
     <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Uzame ngokungalungile ukuvula ifoni izikhathi ezingu-<xliff:g id="NUMBER">%d</xliff:g>. Iphrofayela yomsebenzi izosuswa, okuzosusa yonke idatha yephrofayela."</string>
     <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Udwebe ngokungalungile iphethini yakho yokuvula ngezikhathi ezingu-<xliff:g id="NUMBER_0">%1$d</xliff:g>. Ngemuva kwemizamo engaphumelelanga kaningi engu-<xliff:g id="NUMBER_1">%2$d</xliff:g>, uzocelwa ukuthi uvule ithebulethi yakho usebenzisa i-akhawunti ye-imeyili.\n\nZama futhi kumasekhondi angu-<xliff:g id="NUMBER_2">%3$d</xliff:g>."</string>
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Ukulayisha ungenisa iphathini yakho yokuvula ngendlela engalungile izikhathi ezi-<xliff:g id="NUMBER_0">%1$d</xliff:g> Emva kweminye imizamo engu-<xliff:g id="NUMBER_1">%2$d</xliff:g>, uzocelwa ukuvula ifoni yakho usebenzisa ukungena ngemvume ku-Google\n\n Zame futhi emumva kwengu- <xliff:g id="NUMBER_2">%3$d</xliff:g> imizuzwana."</string>
+    <string name="thermal_shutdown_title" product="default" msgid="8039593017174903505">"Ifoni ivaliwe ngenxa yokushisa"</string>
+    <string name="thermal_shutdown_title" product="device" msgid="2954206342842856379">"Idivayisi ivaliwe ngenxa yokushisa"</string>
+    <string name="thermal_shutdown_title" product="tablet" msgid="8941033526856177533">"Ithebulethi ivaliwe ngenxa yokushisa"</string>
+    <string name="thermal_shutdown_message" product="default" msgid="6685194547904051408">"Ifoni yakho manje isebenza ngokuvamile.\nThepha ukuze uthole ulwazi olungeziwe"</string>
+    <string name="thermal_shutdown_message" product="device" msgid="3039675532521590478">"Idivayisi yakho manje isebenza ngokuvamile.\nThepha ukuze uthole ulwazi olwengeziwe"</string>
+    <string name="thermal_shutdown_message" product="tablet" msgid="5285898074484811386">"Ithebulethi yakho manje isebenza ngokuvamile.\nThepha ukuze uthole ulwazi olwengeziwe"</string>
+    <string name="thermal_shutdown_dialog_message" product="default" msgid="6145923570358574186">"Ifoni yakho ibishisa kakhulu, ngakho-ke yacisha ukuze iphole. Ifoni yakho manje isebenza ngokuvamile.\n\nIfoni yakho ingashisa kakhulu uma:\n	• Usebenzisa izinhlelo zokusebenza ezinkulu (njegegeyimu, ividiyo, noma ama-app okufuna)\n	• Landa noma layisha amafayela amakhulu\n	• Sebenzisa ifoni yakho kumazinga okushisa aphezulu"</string>
+    <string name="thermal_shutdown_dialog_message" product="device" msgid="3647879000909527365">"Idivayisi yakho ibishisa kakhulu, ngakho-ke yacisha ukuze iphole. Idivayisi yakho manje isebenza ngokuvamile.\n\nIdivayisi yakho ingashisa kakhulu uma:\n	• Usebenzisa ama-app wensiza enamandla (njegegeyimu, ividiyo, noma ama-app wokufuna)\n	• Dawuniloda noma layisha amafayela amakhulu\n	• Sebenzisa idivayisi yakho kumazinga wokushisa aphezulu"</string>
+    <string name="thermal_shutdown_dialog_message" product="tablet" msgid="8274487811928782165">"Ithebulethi yakho ibishisa kakhulu, ngakho-ke yacisha ukuze iphole. Ithebulethi yakho manje isebenza ngokuvamile.\n\nIthebulethi yakho ingashisa kakhulu uma:\n	• Usebenzisa ama-app wensiza enamandla (njegegeyimu, ividiyo, noma ama-app wokufuna)\n	• Dawuniloda noma layisha amafayela amakhulu\n	• Sebenzisa ithebulethi yakho kumazinga wokushisa aphezulu kakhulu"</string>
+    <string name="high_temp_title" product="default" msgid="5365000411304924115">"Ifoni iyafudumala"</string>
+    <string name="high_temp_title" product="device" msgid="6622009907401563664">"Idivayisi iyafudumala"</string>
+    <string name="high_temp_title" product="tablet" msgid="9039733706606446616">"Ithebulethi iyafudumala"</string>
+    <string name="high_temp_notif_message" product="default" msgid="3928947950087257452">"Ezinye izakhi zikhawulelwe ngenkathi ifoni iphola.\nThepha mayelana nolwazi olwengeziwe"</string>
+    <string name="high_temp_notif_message" product="device" msgid="6105125771372547292">"Ezinye izakhi zikhawulelwe ngenkathi idivayisi iphola.\nThepha mayelana nolwazi olwengeziwe"</string>
+    <string name="high_temp_notif_message" product="tablet" msgid="7799279192797476850">"Ezinye izakhi zikhawulelwe ngenkathi ithebulethi iphola.\nThepha mayelana nolwazi olwengeziwe"</string>
+    <string name="high_temp_dialog_message" product="default" msgid="4272882413847595625">"Ifoni yakho izozama ngokuzenzakalela ukuphola. Ungasasebenzisa ifoni yakho, kodwa ingasebenza ngokungasheshi.\n\nUma ifoni yakho isipholile, izosebenza ngokuvamile."</string>
+    <string name="high_temp_dialog_message" product="device" msgid="263861943935989046">"Idivayisi yakho izozama ukupholisa ngokuzenzekelayo. Usengasebenzisa idivayisi yakho, kodwa ingase isebenze ngokunensayo.\n\nLapho idivayisi yakho isipholile, izosebenza ngokuvamile."</string>
+    <string name="high_temp_dialog_message" product="tablet" msgid="5613713326841935537">"Ithebulethi yakho izozama ukupholisa. Usengasebenzisa ithebulethi yakho, kodwa ingase isebenze ngokunensayo.\n\nLapho ithebulethi yakho isipholile, izosebenza ngokuvamile."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="tablet" msgid="3726972508570143945">"Inzwa yesigxivizo somunwe esenkinobhweni yamandla. Inkinobho eyisicaba eduze kwenkinobho yevolumu ephakanyisiwe emaphethelweni wethebulethi."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="device" msgid="2929467060295094725">"Inzwa yesigxivizo somunwe esenkinobhweni yamandla. Inkinobho eyisicaba eduze kwenkinobho yevolumu ephakanyisiwe emaphethelweni edivayisi."</string>
     <string name="security_settings_sfps_enroll_find_sensor_message" product="default" msgid="8582726566542997639">"Inzwa yesigxivizo somunwe esenkinobhweni yamandla. Inkinobho eyisicaba eduze kwenkinobho yevolumu ephakanyisiwe emaphethelweni efoni."</string>
diff --git a/packages/SystemUI/res/anim/tv_bottom_sheet_button_state_list_animator.xml b/packages/SystemUI/res/anim/tv_bottom_sheet_button_state_list_animator.xml
deleted file mode 100644
index fc3b4ed..0000000
--- a/packages/SystemUI/res/anim/tv_bottom_sheet_button_state_list_animator.xml
+++ /dev/null
@@ -1,52 +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">
-    <item android:state_focused="true">
-        <set>
-            <objectAnimator
-                android:duration="200"
-                android:propertyName="scaleX"
-                android:valueFrom="1.0"
-                android:valueTo="@dimen/bottom_sheet_button_selection_scaled"
-                android:valueType="floatType"/>
-            <objectAnimator
-                android:duration="200"
-                android:propertyName="scaleY"
-                android:valueFrom="1.0"
-                android:valueTo="@dimen/bottom_sheet_button_selection_scaled"
-                android:valueType="floatType"/>
-        </set>
-    </item>
-    <item android:state_focused="false">
-        <set>
-            <objectAnimator
-                android:duration="200"
-                android:propertyName="scaleX"
-                android:valueFrom="@dimen/bottom_sheet_button_selection_scaled"
-                android:valueTo="1.0"
-                android:valueType="floatType"/>
-            <objectAnimator
-                android:duration="200"
-                android:propertyName="scaleY"
-                android:valueFrom="@dimen/bottom_sheet_button_selection_scaled"
-                android:valueTo="1.0"
-                android:valueType="floatType"/>
-        </set>
-    </item>
-</selector>
\ No newline at end of file
diff --git a/packages/SystemUI/res/anim/tv_bottom_sheet_enter.xml b/packages/SystemUI/res/anim/tv_bottom_sheet_enter.xml
deleted file mode 100644
index cace36d..0000000
--- a/packages/SystemUI/res/anim/tv_bottom_sheet_enter.xml
+++ /dev/null
@@ -1,23 +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.
-  -->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
-     android:interpolator="@android:interpolator/decelerate_quint">
-    <translate android:fromYDelta="100%"
-               android:toYDelta="0"
-               android:duration="900"/>
-</set>
\ No newline at end of file
diff --git a/packages/SystemUI/res/anim/tv_bottom_sheet_exit.xml b/packages/SystemUI/res/anim/tv_bottom_sheet_exit.xml
deleted file mode 100644
index f7efe7cd..0000000
--- a/packages/SystemUI/res/anim/tv_bottom_sheet_exit.xml
+++ /dev/null
@@ -1,23 +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.
-  -->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
-     android:interpolator="@android:interpolator/decelerate_quint">
-    <translate android:fromYDelta="0"
-               android:toYDelta="100%"
-               android:duration="500"/>
-</set>
\ No newline at end of file
diff --git a/packages/SystemUI/res/anim/tv_privacy_chip_collapse.xml b/packages/SystemUI/res/anim/tv_privacy_chip_collapse.xml
deleted file mode 100644
index 94deced..0000000
--- a/packages/SystemUI/res/anim/tv_privacy_chip_collapse.xml
+++ /dev/null
@@ -1,22 +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.
-  -->
-<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
-    android:propertyName="collapseProgress"
-    android:interpolator="@interpolator/tv_privacy_chip_collapse_interpolator"
-    android:valueTo="1"
-    android:valueType="floatType"
-    android:duration="@integer/privacy_chip_animation_millis" />
\ No newline at end of file
diff --git a/packages/SystemUI/res/anim/tv_privacy_chip_expand.xml b/packages/SystemUI/res/anim/tv_privacy_chip_expand.xml
deleted file mode 100644
index 81c83e2..0000000
--- a/packages/SystemUI/res/anim/tv_privacy_chip_expand.xml
+++ /dev/null
@@ -1,22 +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.
-  -->
-<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
-    android:propertyName="collapseProgress"
-    android:interpolator="@interpolator/tv_privacy_chip_expand_interpolator"
-    android:valueTo="0"
-    android:valueType="floatType"
-    android:duration="@integer/privacy_chip_animation_millis" />
\ No newline at end of file
diff --git a/packages/SystemUI/res/color/bottom_sheet_button_background_color.xml b/packages/SystemUI/res/color/bottom_sheet_button_background_color.xml
deleted file mode 100644
index 9b0bae0..0000000
--- a/packages/SystemUI/res/color/bottom_sheet_button_background_color.xml
+++ /dev/null
@@ -1,21 +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">
-    <item android:state_focused="true"
-          android:color="@color/bottom_sheet_button_background_color_focused"/>
-    <item android:color="@color/bottom_sheet_button_background_color_unfocused"/>
-</selector>
\ No newline at end of file
diff --git a/packages/SystemUI/res/color/bottom_sheet_button_text_color.xml b/packages/SystemUI/res/color/bottom_sheet_button_text_color.xml
deleted file mode 100644
index 05248f1..0000000
--- a/packages/SystemUI/res/color/bottom_sheet_button_text_color.xml
+++ /dev/null
@@ -1,21 +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">
-    <item android:state_focused="true"
-          android:color="@color/bottom_sheet_button_text_color_focused"/>
-    <item android:color="@color/bottom_sheet_button_text_color_unfocused"/>
-</selector>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/bottom_sheet_background.xml b/packages/SystemUI/res/drawable/bottom_sheet_background.xml
deleted file mode 100644
index 87850a0..0000000
--- a/packages/SystemUI/res/drawable/bottom_sheet_background.xml
+++ /dev/null
@@ -1,20 +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.
-  -->
-<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
-    <solid android:color="@color/bottom_sheet_background_color"/>
-    <corners android:radius="@dimen/bottom_sheet_corner_radius"/>
-</shape>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/bottom_sheet_background_with_blur.xml b/packages/SystemUI/res/drawable/bottom_sheet_background_with_blur.xml
deleted file mode 100644
index cd2aa9c..0000000
--- a/packages/SystemUI/res/drawable/bottom_sheet_background_with_blur.xml
+++ /dev/null
@@ -1,20 +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.
-  -->
-<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
-    <solid android:color="@color/bottom_sheet_background_color_with_blur"/>
-    <corners android:radius="@dimen/bottom_sheet_corner_radius"/>
-</shape>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/bottom_sheet_button_background.xml b/packages/SystemUI/res/drawable/bottom_sheet_button_background.xml
deleted file mode 100644
index 585a6bc..0000000
--- a/packages/SystemUI/res/drawable/bottom_sheet_button_background.xml
+++ /dev/null
@@ -1,20 +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.
-  -->
-<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
-    <solid android:color="@color/bottom_sheet_button_background_color"/>
-    <corners android:radius="@dimen/bottom_sheet_button_corner_radius"/>
-</shape>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/list_item_background.xml b/packages/SystemUI/res/drawable/list_item_background.xml
new file mode 100644
index 0000000..2dbab9c
--- /dev/null
+++ b/packages/SystemUI/res/drawable/list_item_background.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2023 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_focused="true" android:drawable="@*android:drawable/list_choice_background_material" />
+    <item android:drawable="@android:color/transparent" />
+</selector>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/tv_volume_dialog_background.xml b/packages/SystemUI/res/drawable/tv_volume_dialog_background.xml
index 3705d918..264e10a 100644
--- a/packages/SystemUI/res/drawable/tv_volume_dialog_background.xml
+++ b/packages/SystemUI/res/drawable/tv_volume_dialog_background.xml
@@ -14,7 +14,7 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-
+<!-- TODO(b/289498394) move this to the TvSystemUI target -->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
 
diff --git a/packages/SystemUI/res/drawable/tv_volume_dialog_circle.xml b/packages/SystemUI/res/drawable/tv_volume_dialog_circle.xml
index 3c4fc05..bc73aab 100644
--- a/packages/SystemUI/res/drawable/tv_volume_dialog_circle.xml
+++ b/packages/SystemUI/res/drawable/tv_volume_dialog_circle.xml
@@ -14,7 +14,7 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-
+<!-- TODO(b/289498394) move this to the TvSystemUI target -->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="oval">
   <solid android:color="@color/tv_volume_dialog_circle" />
diff --git a/packages/SystemUI/res/drawable/tv_volume_row_seek_thumb.xml b/packages/SystemUI/res/drawable/tv_volume_row_seek_thumb.xml
index 588782d..3c31861 100644
--- a/packages/SystemUI/res/drawable/tv_volume_row_seek_thumb.xml
+++ b/packages/SystemUI/res/drawable/tv_volume_row_seek_thumb.xml
@@ -14,6 +14,7 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 -->
+<!-- TODO(b/289498394) move this to the TvSystemUI target -->
 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
     <solid android:color="@color/tv_volume_dialog_accent" />
     <size android:width="@dimen/tv_volume_seek_bar_thumb_diameter"
diff --git a/packages/SystemUI/res/interpolator/tv_privacy_chip_collapse_interpolator.xml b/packages/SystemUI/res/interpolator/tv_privacy_chip_collapse_interpolator.xml
deleted file mode 100644
index 1a40173..0000000
--- a/packages/SystemUI/res/interpolator/tv_privacy_chip_collapse_interpolator.xml
+++ /dev/null
@@ -1,22 +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.
-  -->
-
-<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
-    android:controlX1="0.4"
-    android:controlY1="1.00"
-    android:controlX2="0.12"
-    android:controlY2="1.00"/>
diff --git a/packages/SystemUI/res/interpolator/tv_privacy_chip_expand_interpolator.xml b/packages/SystemUI/res/interpolator/tv_privacy_chip_expand_interpolator.xml
deleted file mode 100644
index ed44715..0000000
--- a/packages/SystemUI/res/interpolator/tv_privacy_chip_expand_interpolator.xml
+++ /dev/null
@@ -1,22 +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.
-  -->
-
-<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
-                  android:controlX1="0.12"
-                  android:controlY1="1.00"
-                  android:controlX2="0.4"
-                  android:controlY2="1.00"/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout-land-television/volume_dialog_row.xml b/packages/SystemUI/res/layout-land-television/volume_dialog_row.xml
index 991dc63e..bddcb6a 100644
--- a/packages/SystemUI/res/layout-land-television/volume_dialog_row.xml
+++ b/packages/SystemUI/res/layout-land-television/volume_dialog_row.xml
@@ -13,6 +13,7 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
+<!-- TODO(b/289498394) move this to the TvSystemUI target -->
 <FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:tag="row"
diff --git a/packages/SystemUI/res/layout-television/inattentive_sleep_warning.xml b/packages/SystemUI/res/layout-television/inattentive_sleep_warning.xml
deleted file mode 100644
index eb21c43..0000000
--- a/packages/SystemUI/res/layout-television/inattentive_sleep_warning.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2019 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/sleep_warning_dialog_container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:theme="@android:style/Theme.DeviceDefault.Dialog"
-    android:focusable="true">
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:background="@android:color/black"
-        android:alpha="?android:backgroundDimAmount" />
-    <LinearLayout
-        android:layout_width="380dp"
-        android:layout_height="wrap_content"
-        android:background="@drawable/rounded_bg_full"
-        android:padding="16dp"
-        android:layout_margin="32dp"
-        android:layout_gravity="bottom|right"
-        android:orientation="vertical">
-        <TextView
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/inattentive_sleep_warning_title"
-            android:layout_marginBottom="8dp"
-            android:textColor="?android:attr/textColorPrimary"
-            android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"/>
-
-        <TextView
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/inattentive_sleep_warning_message"
-            android:textColor="?android:attr/textColorSecondary"
-            android:textAppearance="@android:style/TextAppearance.DeviceDefault"/>
-    </LinearLayout>
-</FrameLayout>
diff --git a/packages/SystemUI/res/layout/keyboard_shortcut_app_item.xml b/packages/SystemUI/res/layout/keyboard_shortcut_app_item.xml
index 3786812..fcf9638 100644
--- a/packages/SystemUI/res/layout/keyboard_shortcut_app_item.xml
+++ b/packages/SystemUI/res/layout/keyboard_shortcut_app_item.xml
@@ -17,6 +17,8 @@
 <com.android.systemui.statusbar.KeyboardShortcutAppItemLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="horizontal"
+        android:background="@drawable/list_item_background"
+        android:focusable="true"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:minHeight="48dp"
@@ -55,6 +57,5 @@
             android:layout_alignParentEnd="true"
             android:textSize="14sp"
             android:scrollHorizontally="false"
-            android:layout_centerVertical="true"
-            android:focusable="true"/>
+            android:layout_centerVertical="true"/>
 </com.android.systemui.statusbar.KeyboardShortcutAppItemLayout>
diff --git a/packages/SystemUI/res/layout/keyboard_shortcuts_category_title.xml b/packages/SystemUI/res/layout/keyboard_shortcuts_category_title.xml
index 8414223..0759990 100644
--- a/packages/SystemUI/res/layout/keyboard_shortcuts_category_title.xml
+++ b/packages/SystemUI/res/layout/keyboard_shortcuts_category_title.xml
@@ -16,10 +16,11 @@
   ~ limitations under the License
   -->
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
-          android:layout_width="wrap_content"
+          android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:textSize="14sp"
           android:fontFamily="sans-serif-medium"
+          android:importantForAccessibility="yes"
           android:paddingStart="24dp"
           android:paddingTop="20dp"
           android:paddingEnd="24dp"
diff --git a/packages/SystemUI/res/layout/log_access_user_consent_dialog_permission.xml b/packages/SystemUI/res/layout/log_access_user_consent_dialog_permission.xml
index 89e36ac..d647c9b 100644
--- a/packages/SystemUI/res/layout/log_access_user_consent_dialog_permission.xml
+++ b/packages/SystemUI/res/layout/log_access_user_consent_dialog_permission.xml
@@ -16,22 +16,29 @@
 ** limitations under the License.
 */
 -->
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:tools="http://schemas.android.com/tools"
-        android:layout_width="380dp"
-        android:layout_height="match_parent"
-        android:clipToPadding="false">
-    <LinearLayout
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="380dp"
+    android:layout_height="match_parent"
+    android:clipToPadding="false"
+    android:orientation="vertical">
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1">
+
+        <LinearLayout
             android:layout_width="match_parent"
-            android:layout_height="match_parent"
+            android:layout_height="wrap_content"
             android:orientation="vertical"
-            android:gravity="center"
             android:paddingLeft="24dp"
             android:paddingRight="24dp"
             android:paddingTop="24dp"
-            android:paddingBottom="24dp">
+            android:paddingBottom="24dp"
+            android:gravity="center">
 
-        <ImageView
+            <ImageView
                 android:id="@+id/log_access_image_view"
                 android:layout_width="32dp"
                 android:layout_height="32dp"
@@ -41,7 +48,7 @@
                 tools:layout_editor_absoluteY="35dp"
                 android:gravity="center" />
 
-        <TextView
+            <TextView
                 android:id="@+id/log_access_dialog_title"
                 android:layout_height="wrap_content"
                 android:layout_width="wrap_content"
@@ -51,7 +58,7 @@
                 android:textColor="?android:attr/textColorPrimary"
                 android:gravity="center" />
 
-        <TextView
+            <TextView
                 android:id="@+id/log_access_dialog_body"
                 android:layout_height="wrap_content"
                 android:layout_width="wrap_content"
@@ -60,42 +67,37 @@
                 android:textAppearance="@style/PrimaryAllowLogAccess"
                 android:textColor="?android:attr/textColorPrimary"
                 android:gravity="center" />
-
-        <Space
-                android:layout_width="match_parent"
-                android:layout_height="0dp"
-                android:layout_weight="1" />
-
-        <LinearLayout
-                android:orientation="vertical"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content">
-            <Button
-                    android:id="@+id/log_access_dialog_allow_button"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="@string/log_access_confirmation_allow"
-                    style="?permissionGrantButtonTopStyle"
-                    android:textAppearance="@style/PermissionGrantButtonTextAppearance"
-                    android:layout_marginBottom="5dp"
-                    android:layout_centerHorizontal="true"
-                    android:layout_alignParentTop="true"
-                    android:layout_alignParentBottom="true"
-                    android:clipToOutline="true"
-                    android:gravity="center" />
-
-            <Button
-                    android:id="@+id/log_access_dialog_deny_button"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="@string/log_access_confirmation_deny"
-                    style="?permissionGrantButtonBottomStyle"
-                    android:textAppearance="@style/PermissionGrantButtonTextAppearance"
-                    android:layout_centerHorizontal="true"
-                    android:layout_alignParentTop="true"
-                    android:layout_alignParentBottom="true"
-                    android:clipToOutline="true"
-                    android:gravity="center" />
         </LinearLayout>
+    </ScrollView>
+
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingLeft="24dp"
+        android:paddingRight="24dp"
+        android:paddingTop="24dp"
+        android:paddingBottom="24dp">
+
+        <Button
+            android:id="@+id/log_access_dialog_allow_button"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="@string/log_access_confirmation_allow"
+            style="?permissionGrantButtonTopStyle"
+            android:textAppearance="@style/PermissionGrantButtonTextAppearance"
+            android:layout_marginBottom="5dp"
+            android:clipToOutline="true"
+            android:gravity="center" />
+
+        <Button
+            android:id="@+id/log_access_dialog_deny_button"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="@string/log_access_confirmation_deny"
+            style="?permissionGrantButtonBottomStyle"
+            android:textAppearance="@style/PermissionGrantButtonTextAppearance"
+            android:clipToOutline="true"
+            android:gravity="center" />
     </LinearLayout>
-</ScrollView>
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/tv_bottom_sheet.xml b/packages/SystemUI/res/layout/tv_bottom_sheet.xml
deleted file mode 100644
index b69cdc7..0000000
--- a/packages/SystemUI/res/layout/tv_bottom_sheet.xml
+++ /dev/null
@@ -1,87 +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.
-  -->
-
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/bottom_sheet"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:gravity="center_vertical"
-    android:orientation="horizontal"
-    android:minHeight="@dimen/bottom_sheet_min_height"
-    android:paddingHorizontal="@dimen/bottom_sheet_padding_horizontal"
-    android:paddingVertical="@dimen/bottom_sheet_padding_vertical">
-
-    <LinearLayout
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:minWidth="80dp"
-        android:gravity="center"
-        android:orientation="horizontal">
-        <ImageView
-            android:id="@+id/bottom_sheet_icon"
-            android:layout_width="@dimen/bottom_sheet_icon_size"
-            android:layout_height="@dimen/bottom_sheet_icon_size"
-            android:layout_gravity="center_vertical"
-            android:tint="@color/bottom_sheet_icon_color"/>
-        <ImageView
-            android:id="@+id/bottom_sheet_second_icon"
-            android:layout_width="@dimen/bottom_sheet_icon_size"
-            android:layout_height="@dimen/bottom_sheet_icon_size"
-            android:layout_marginStart="@dimen/bottom_sheet_icon_margin"
-            android:layout_gravity="center_vertical"
-            android:tint="@color/bottom_sheet_icon_color"/>
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="@dimen/bottom_sheet_padding_horizontal"
-        android:layout_weight="1"
-        android:orientation="vertical">
-        <TextView
-            android:id="@+id/bottom_sheet_title"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="@dimen/bottom_sheet_title_margin_bottom"
-            android:textAppearance="@style/BottomSheet.TitleText"/>
-
-        <TextView
-            android:id="@+id/bottom_sheet_body"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="@dimen/bottom_sheet_details_margin_bottom"
-            android:textAppearance="@style/BottomSheet.BodyText" />
-    </LinearLayout>
-
-    <LinearLayout
-        android:orientation="vertical"
-        android:layout_width="@dimen/bottom_sheet_actions_width"
-        android:layout_height="match_parent"
-        android:gravity="center">
-        <Button
-            android:id="@+id/bottom_sheet_positive_button"
-            style="@style/BottomSheet.ActionItem" />
-        <Space
-            android:layout_width="0dp"
-            android:layout_height="@dimen/bottom_sheet_actions_spacing" />
-        <Button
-            android:id="@+id/bottom_sheet_negative_button"
-            style="@style/BottomSheet.ActionItem" />
-    </LinearLayout>
-
-</LinearLayout>
diff --git a/packages/SystemUI/res/layout/tv_notification_item.xml b/packages/SystemUI/res/layout/tv_notification_item.xml
deleted file mode 100644
index 711cd4e..0000000
--- a/packages/SystemUI/res/layout/tv_notification_item.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?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.
-  -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="@dimen/tv_notification_panel_width"
-    android:layout_height="wrap_content"
-    android:background="?android:attr/selectableItemBackground"
-    android:orientation="vertical"
-    android:padding="12dp">
-
-    <TextView
-        android:id="@+id/tv_notification_title"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:paddingBottom="12dp"
-        android:textColor="@color/tv_notification_text_color"
-        android:textSize="18sp" />
-
-    <TextView
-        android:id="@+id/tv_notification_details"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:textColor="@color/tv_notification_text_color" />
-
-</LinearLayout>
diff --git a/packages/SystemUI/res/layout/tv_notification_panel.xml b/packages/SystemUI/res/layout/tv_notification_panel.xml
deleted file mode 100644
index eae44c8..0000000
--- a/packages/SystemUI/res/layout/tv_notification_panel.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?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.
-  -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/tv_notification_panel"
-    android:layout_width="@dimen/tv_notification_panel_width"
-    android:layout_height="match_parent"
-    android:layout_gravity="end"
-    android:background="@android:color/transparent"
-    android:orientation="vertical">
-
-    <TextView
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:padding="12dp"
-        android:paddingTop="24dp"
-        android:text="@string/tv_notification_panel_title"
-        android:textColor="@color/tv_notification_text_color"
-        android:textSize="24sp"
-        android:textStyle="bold" />
-
-    <TextView
-        android:id="@+id/no_tv_notifications"
-        style="?android:attr/titleTextStyle"
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"
-        android:gravity="top|center"
-        android:paddingTop="24dp"
-        android:text="@string/tv_notification_panel_no_notifications"
-        android:textColor="@color/tv_notification_text_color"
-        android:visibility="gone" />
-
-    <androidx.leanback.widget.VerticalGridView
-        android:id="@+id/notifications_list"
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1" />
-</LinearLayout>
diff --git a/packages/SystemUI/res/layout/tv_ongoing_privacy_chip.xml b/packages/SystemUI/res/layout/tv_ongoing_privacy_chip.xml
deleted file mode 100644
index 9069b8f..0000000
--- a/packages/SystemUI/res/layout/tv_ongoing_privacy_chip.xml
+++ /dev/null
@@ -1,33 +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.
-  -->
-
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="@dimen/privacy_chip_height"
-    android:minWidth="@dimen/privacy_chip_dot_bg_width"
-    android:gravity="center">
-    <LinearLayout
-        android:id="@+id/icons_container"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/privacy_chip_height"
-        android:minWidth="@dimen/privacy_chip_dot_bg_width"
-        android:orientation="horizontal"
-        android:gravity="center"
-        android:paddingHorizontal="@dimen/privacy_chip_padding_horizontal"
-        android:clipToPadding="false" />
-</FrameLayout>
diff --git a/packages/SystemUI/res/layout/tv_privacy_chip_container.xml b/packages/SystemUI/res/layout/tv_privacy_chip_container.xml
deleted file mode 100644
index 20ffe2b9..0000000
--- a/packages/SystemUI/res/layout/tv_privacy_chip_container.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2022 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:minWidth="@dimen/privacy_chips_max_width"
-    android:orientation="horizontal"
-    android:clipToPadding="false"
-    android:gravity="end"
-    android:padding="@dimen/privacy_chips_bar_padding">
-    <Space
-        android:layout_width="0dp"
-        android:layout_height="@dimen/privacy_chip_height" />
-</LinearLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 4d43b19..2355341 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Aktiveer USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Kom meer te wete"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Skermkiekie"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Verleng Ontsluiting is gedeaktiveer"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Hou Ontsluit is gedeaktiveer"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"het \'n prent gestuur"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Stoor tans skermkiekie..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Stoor tans skermskoot in werkprofiel …"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> het hierdie skermskoot bespeur."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> en ander oop apps het hierdie skermskoot bespeur."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Voeg by nota"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Skermopnemer"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Skermopnemer"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Verwerk tans skermopname"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Deurlopende kennisgewing vir \'n skermopnamesessie"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Begin opname?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Terwyl dit opneem, kan die Android-stelsel enige sensitiewe inligting wat op jou skerm sigbaar is of wat op jou toestel gespeel word, vasvang. Dit sluit wagwoorde, betalinginligting, foto\'s, boodskappe en oudio in."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Neem hele skerm op"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Neem ’n enkele program op"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Terwyl jy opneem, het Android toegang tot enigiets wat op jou skerm sigbaar is of op jou toestel gespeel word. Wees dus versigtig met wagwoorde, betalingbesonderhede, boodskappe of ander sensitiewe inligting."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Terwyl jy ’n program opneem, het Android toegang tot enigiets wat in daardie program gewys of gespeel word. Wees dus versigtig met wagwoorde, betalingbesonderhede, boodskappe of ander sensitiewe inligting."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Begin opneem"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Begin opneem?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Terwyl jy opneem, het Android toegang tot enigiets wat op jou skerm sigbaar is of op jou toestel gespeel word. Wees dus versigtig met dinge soos wagwoorde, betalingbesonderhede, boodskappe, foto’s, en oudio en video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Terwyl jy ’n app opneem, het Android toegang tot enigiets wat in daardie app gewys of gespeel word. Wees dus versigtig met dinge soos wagwoorde, betalingbesonderhede, boodskappe, foto’s, en oudio en video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Begin opneem"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Neem oudio op"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Toesteloudio"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Klank vanaf jou toestel, soos musiek, oproepe en luitone"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofoon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Toesteloudio en -mikrofoon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Begin"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Begin"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Neem tans skerm op"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Neem tans skerm en oudio op"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Wys raakgebare op skerm"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Deel"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Skermopname is gestoor"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Tik om te bekyk"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Kon nie skermopname uitvee nie"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Kon nie skermopname stoor nie"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Kon nie skermopname begin nie"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Bekyk tans volskerm"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Swiep van bo af as jy wil uitgaan."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Het dit"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Terug"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Tuis"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Kieslys"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Gesig is gestaaf"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Bevestig"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tik op Bevestig om te voltooi"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Ontsluit met gesig. Druk die ontsluitikoon om voort te gaan."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Ontsluit met gesig"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Ontsluit met gesig. Druk om voort te gaan."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Gesig is herken. Druk om voort te gaan."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Gesig is herken. Druk die ontsluitikoon om voort te gaan."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Gestaaf"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Kanselleer stawing"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Gebruik PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Gebruik patroon"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Gebruik wagwoord"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"As jy met jou volgende poging \'n verkeerde patroon invoer, sal jou werkprofiel en die data daarvan uitgevee word."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"As jy met jou volgende poging \'n verkeerde PIN invoer, sal jou werkprofiel en die data daarvan uitgevee word."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"As jy met jou volgende poging \'n verkeerde wagwoord invoer, sal jou werkprofiel en die data daarvan uitgevee word."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Stel op"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Nie nou nie"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Dit word vereis om sekuriteit en werkverrigting te verbeter"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Stel Vingerafdrukslot weer op"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Vingerafdrukslot"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Stel Vingerafdrukslot op"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Om Vingerafdrukslot weer op te stel, sal jou huidige vingerafdrukprente en -modelle uitgevee word.\n\nSodra hulle uitgevee is, sal jy Vingerafdrukslot weer moet opstel as jy jou vingerafdruk wil gebruik om jou foon te ontsluit of te verifieer dat dit jy is."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Om Vingerafdrukslot weer op te stel, sal jou huidige vingerafdrukprente en -model uitgevee word.\n\nSodra hulle uitgevee is, sal jy Vingerafdrukslot weer moet opstel as jy jou vingerafdruk wil gebruik om jou foon te ontsluit of te verifieer dat dit jy is."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Kon nie Vingerafdrukslot opstel nie. Gaan na Instellings toe om weer te probeer."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Stel Gesigslot weer op"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Gesigslot"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Stel Gesigslot op"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Om Gesigslot weer op te stel, sal jou huidige gesigmodel uitgevee word.\n\nJy sal hierdie kenmerk weer moet opstel as jy jou gesig wil gebruik om jou foon te ontsluit."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Kon nie Gesigslot opstel nie. Gaan na Instellings toe om weer te probeer."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Raak die vingerafdruksensor"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Druk die ontsluitikoon om voort te gaan"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Kan nie gesig herken nie. Gebruik eerder vingerafdruk."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Oudio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Kopstuk"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Invoer"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Gehoortoestelle"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Gehoortoestelle"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Skakel tans aan …"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Outo-draai"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Outodraai skerm"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Ontsluit met gesig"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Gesig is herken"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Swiep op om weer te probeer"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Swiep op om Gesigslot weer te probeer"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Ontsluit om NFC te gebruik"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Hierdie toestel behoort aan jou organisasie"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Hierdie toestel behoort aan <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sal toegang hê tot al die inligting wat op jou skerm sigbaar is of wat op jou toestel gespeel word terwyl dit opneem of uitsaai. Dit sluit in inligting soos wagwoorde, betalingbesonderhede, foto\'s, boodskappe en oudio wat jy speel."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Die diens wat hierdie funksie verskaf, sal toegang hê tot al die inligting wat op jou skerm sigbaar is of wat op jou toestel gespeel word terwyl dit opneem of uitsaai. Dit sluit in inligting soos wagwoorde, betalingbesonderhede, foto\'s, boodskappe en oudio wat jy speel."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Begin opneem of uitsaai?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Begin opneem of uitsaai met <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Laat <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> toe om te deel of op te neem?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Hele skerm"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"’n Enkele app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Wanneer jy deel, opneem of uitsaai, het <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> toegang tot enigiets wat op jou skerm sigbaar is of op jou toestel gespeel word. Wees dus versigtig met wagwoorde, betalingbesonderhede, boodskappe of ander sensitiewe inligting."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Wanneer jy ’n program deel, opneem of uitsaai, het <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> toegang tot enigiets wat in daardie program sigbaar is of daarin gespeel word. Wees dus versigtig met wagwoorde, betalingbesonderhede, boodskappe of ander sensitiewe inligting."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Gaan voort"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Deel of neem ’n app op"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Laat hierdie app toe om te deel of op te neem?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Wanneer jy deel, opneem of uitsaai, het hierdie app toegang tot enigiets wat op jou skerm sigbaar is of op jou toestel gespeel word. Wees dus versigtig met wagwoorde, betalingbesonderhede, boodskappe of ander sensitiewe inligting."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Wanneer jy ’n app deel, opneem of uitsaai, het hierdie app toegang tot enigiets wat in daardie program sigbaar is of daarin gespeel word. Wees dus versigtig met wagwoorde, betalingbesonderhede, boodskappe of ander sensitiewe inligting."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sal toegang hê tot al die inligting wat op jou skerm sigbaar is of op jou toestel gespeel word terwyl dit opneem of uitsaai. Dit sluit in inligting soos wagwoorde, betalingbesonderhede, foto’s, boodskappe en oudio wat jy speel."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Begin opneem of uitsaai?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Die diens wat hierdie funksie verskaf, sal toegang hê tot al die inligting wat op jou skerm sigbaar is of op jou toestel gespeel word terwyl dit opneem of uitsaai. Dit sluit in inligting soos wagwoorde, betalingbesonderhede, foto’s, boodskappe en oudio wat jy speel."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Hele skerm"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"’n Enkele app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Deel of neem ’n app op"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Begin opneem of uitsaai met <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Wanneer jy deel, opneem of uitsaai, het <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> toegang tot enigiets wat op jou skerm sigbaar is of op jou toestel gespeel word. Wees dus versigtig met dinge soos wagwoorde, betalingbesonderhede, boodskappe, foto’s, en oudio en video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Wanneer jy ’n app deel, opneem of uitsaai, het <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> toegang tot enigiets wat in daardie app gewys of gespeel word. Wees dus versigtig met dinge soos wagwoorde, betalingbesonderhede, boodskappe, foto’s, en oudio en video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Begin"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Begin uitsaai?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Wanneer jy uitsaai, het Android toegang tot enigiets wat op jou skerm sigbaar is of op jou toestel gespeel word. Wees dus versigtig met dinge soos wagwoorde, betalingbesonderhede, boodskappe, foto’s, en oudio en video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Wanneer jy ’n app uitsaai, het Android toegang tot enigiets wat in daardie app gewys of gespeel word. Wees dus versigtig met dinge soos wagwoorde, betalingbesonderhede, boodskappe, foto’s, en oudio en video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Begin uitsaai"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Begin deel?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Wanneer jy deel, opneem of uitsaai, het Android toegang tot enigiets wat op jou skerm sigbaar is of op jou toestel gespeel word. Wees dus versigtig met dinge soos wagwoorde, betalingbesonderhede, boodskappe, foto’s, en oudio en video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Wanneer jy ’n app deel, opneem of uitsaai, het Android toegang tot enigiets wat in daardie app gewys of gespeel word. Wees dus versigtig met dinge soos wagwoorde, betalingbesonderhede, boodskappe, foto’s, en oudio en video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Begin"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Deling word onderbreek wanneer jy apps wissel"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Deel eerder hierdie app"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Skakel terug"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Appwisselaar"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Deur jou IT-admin geblokkeer"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Skermskote is deur toestelbeleid gedeaktiveer"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Vee alles uit"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"\'n Sertifikaatoutoriteit is op hierdie toestel geïnstalleer. Jou veilige netwerkverkeer kan gemonitor of gewysig word."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Jou administrateur het netwerkloginskrywing aangeskakel, wat verkeer op jou toestel monitor."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Jou administrateur het netwerkloglêers aangeskakel wat verkeer in jou werkprofiel monitor, maar nie in jou persoonlike profiel nie."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Hierdie toestel is gekoppel aan die internet deur <xliff:g id="VPN_APP">%1$s</xliff:g>. Jou IT-admin kan jou netwerkaktiwiteit sien, insluitend jou e-posse en blaaierdata."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Hierdie toestel is deur <xliff:g id="VPN_APP">%1$s</xliff:g> aan die internet gekoppel. Die VPN-verskaffer kan jou netwerkaktiwiteit sien, insluitend jou e-posse en blaaierdata."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Hierdie toestel is deur <xliff:g id="VPN_APP">%1$s</xliff:g> aan die internet gekoppel. Jou IT-admin kan jou netwerkaktiwiteit sien, insluitend jou e-posse en blaaierdata."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Hierdie toestel is gekoppel aan die internet deur <xliff:g id="VPN_APP_0">%1$s</xliff:g> en <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Jou IT-admin kan jou netwerkaktiwiteit sien, insluitend jou e-posse en blaaierdata."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Jou werkprogramme is gekoppel aan die internet deur <xliff:g id="VPN_APP">%1$s</xliff:g>. Jou IT-admin en VPN-verskaffer kan jou netwerkaktiwiteit in werkprogramme sien, insluitend jou e-posse en blaaierdata."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Jou persoonlike programme is gekoppel aan die internet deur <xliff:g id="VPN_APP">%1$s</xliff:g>. Jou VPN-verskaffer kan jou netwerkaktiwiteit sien, insluitend jou e-posse en blaaierdata."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"deaktiveer"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Klank en vibrasie"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Instellings"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Verlaag na veiliger volume"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Die volume was langer as wat aanbeveel word hoog"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volume is verlaag na ’n veiliger vlak"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Oorfoonvolume was langer as wat aanbeveel word hoog"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Oorfoonvolume het die veilige limiet vir hierdie week oorskry"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Hou aan luister"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Stel volume sagter"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Program is vasgespeld"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Dit hou dit in sig totdat jy dit ontspeld. Raak en hou Terug en Oorsig om dit te ontspeld."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Dit hou dit in sig totdat jy dit ontspeld. Raak en hou Terug en Tuis om dit te ontspeld."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Aan/af-kieslys"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Bladsy <xliff:g id="ID_1">%1$d</xliff:g> van <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Sluitskerm"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Foon afgeskakel weens hitte"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Jou foon werk nou normaal.\nTik vir meer inligting"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Jou foon was te warm en dit het afgeskakel om af te koel. Jou foon werk nou normaal.\n\nJou foon kan dalk te warm word as jy:\n	• Hulpbron-intensiewe programme (soos dobbel-, video- of navigasieprogramme) gebruik\n	• Groot lêers af- of oplaai\n	• Jou foon in hoë temperature gebruik"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Sien versorgingstappe"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Foon raak warm"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Sommige kenmerke is beperk terwyl foon afkoel.\nTik vir meer inligting"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Jou foon sal outomaties probeer om af te koel. Jy kan steeds jou foon gebruik, maar dit sal dalk stadiger wees.\n\nJou foon sal normaalweg werk nadat dit afgekoel het."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Sien versorgingstappe"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Prop jou toestel uit"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Jou toestel word tans warm naby die laaipoort. Prop dit uit as dit aan ’n laaier of USB-bykomstigheid gekoppel is. Wees versigtig, aangesien die kabel dalk ook warm is."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Vergroot die hele skerm"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Vergroot \'n deel van die skerm"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Maak vergrotinginstellings oop"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Maak vergrotinginstellings toe"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Sleep hoek om grootte te verander"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Laat diagonale rollees toe"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Verander grootte"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Tik om toeganklikheidkenmerke oop te maak Pasmaak of vervang knoppie in Instellings.\n\n"<annotation id="link">"Bekyk instellings"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Skuif knoppie na kant om dit tydelik te versteek"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Ontdoen"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> kortpad is verwyder"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g>-kortpad is verwyder"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# kortpad is verwyder}other{# kortpaaie is verwyder}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Beweeg na links bo"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Beweeg na regs bo"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ontmerk as gunsteling"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Skuif na posisie <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroles"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Kies toestelkontroles waartoe jy vinnig toegang wil kry"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hou en sleep om kontroles te herrangskik"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Alle kontroles is verwyder"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Veranderinge is nie gestoor nie"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Probeer \'n ander PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Bevestig verandering vir <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Swiep om meer te sien"</string>
+    <string name="retry_face" msgid="416380073082560186">"Probeer weer gesigstawing"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Laai tans aanbevelings"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Versteek hierdie mediakontrole vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Instellings"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> deur <xliff:g id="ARTIST_NAME">%2$s</xliff:g> speel tans vanaf <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> van <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> loop tans"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Speel"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Onderbreek"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Vorige snit"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Luidsprekers en skerms"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Voorgestelde toestelle"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Stop jou gedeelde sessie om media na ’n ander toestel toe te skuif"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Stop"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Hoe uitsaai werk"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Saai uit"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Mense in jou omtrek met versoenbare Bluetooth-toestelle kan na die media luister wat jy uitsaai"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Kan nie stoor nie. Probeer weer."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Kan nie stoor nie."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Gebruik minstens 4 karakters"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Gebruik minder as 16 karakters"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Gebruik minder as <xliff:g id="LENGTH">%1$d</xliff:g> karakters"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Bounommer"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Bounommer is na knipbord gekopieer."</string>
     <string name="basic_status" msgid="2315371112182658176">"Maak gesprek oop"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Kon nie jou batterymeter lees nie"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Tik vir meer inligting"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Geen wekker nie"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"voer skermslot in"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Vingerafdruksensor"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"staaf"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"gaan by toestel in"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistent luister"</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="note_task_button_label" msgid="8718616095800343136">"Neem notas"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Maak notas"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Maak notas, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Kom meer te wete"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Kom meer te wete by <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Maak <xliff:g id="APPNAME">%1$s</xliff:g> oop"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Die app opgestel is"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Minstens een kaart by Wallet gevoeg is"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Installeer ’n kamera-app"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Die app opgestel is"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Minstens een toestel beskikbaar is"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Om die Wallet-app as ’n kortpad by te voeg, moet jy seker maak dat die app geïnstalleer is"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Om die Wallet-app as ’n kortpad by te voeg, moet jy seker maak dat minstens een kaart bygevoeg is"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Om die QR-kodeskandeerder as ’n kortpad by te voeg, moet jy seker maak dat ’n kamera-app geïnstalleer is"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Om die Home-app as ’n kortpad by te voeg, moet jy seker maak dat die app geïnstalleer is"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Minstens een toestel beskikbaar is"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Kies ’n versteknotasapp om die notaneemkortpad te gebruik"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Kies app"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Raak en hou kortpad"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Kanselleer"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Wissel skerms nou"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Koppel jou stilus aan ’n laaier"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Stilus se battery is amper pap"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Kan nie van hierdie profiel af bel nie"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Jou werkbeleid laat jou toe om slegs van die werkprofiel af foonoproepe te maak"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Kan nie van ’n persoonlike app af bel nie"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Jou organisasie laat jou net toe om oproepe van werkapps af te maak"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Skakel oor na werkprofiel"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Maak toe"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Installeer ’n werkfoonapp"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Kanselleer"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Pasmaak sluitskerm"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Ontsluit om sluitskerm te pasmaak"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-fi is nie beskikbaar nie"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera is geblokkeer"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera en mikrofoon is geblokkeer"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofoon is geblokkeer"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioriteitmodus is aan"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistent-aandag is aan"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Stel versteknotasapp in Instellings"</string>
+    <string name="install_app" msgid="5066668100199613936">"Installeer app"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofoon en kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Onlangse appgebruik"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Sien onlangse toegang"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Klaar"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Vou uit en wys opsies"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Vou in"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Maak hierdie app toe"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> is toegemaak"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Bestuur diens"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Bestuur toegang"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Word gebruik deur foonoproep"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Onlangs gebruik in foonoproep"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Word gebruik deur <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Onlangs gebruik deur <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Word gebruik deur <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Onlangs gebruik deur <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Word gebruik deur <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Onlangs gebruik deur <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-af/strings_tv.xml b/packages/SystemUI/res/values-af/strings_tv.xml
deleted file mode 100644
index 4fec3b2..0000000
--- a/packages/SystemUI/res/values-af/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN is gekoppel"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN is ontkoppel"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Via <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Kennisgewings"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Geen kennisgewings nie"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofoon neem tans op"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera neem tans op"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera en mikrofoon neem tans op"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofoon het opname gestop"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kamera het opname gestop"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kamera en mikrofoon het opname gestop"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Skermopname het begin"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Skermopname het gestop"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 8adb782..0fd3f11 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -68,59 +68,59 @@
     <string name="usb_port_enabled" msgid="531823867664717018">"ኃይል መሙያዎችን እና ተጨማሪ መሣሪያዎችን ፈልጎ ለማግኘት የነቃ የዩኤስቢ ወደብ"</string>
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"ዩኤስቢ አንቃ"</string>
     <string name="learn_more" msgid="4690632085667273811">"የበለጠ ለመረዳት"</string>
-    <string name="global_action_screenshot" msgid="2760267567509131654">"ቅጽበታዊ ገጽ እይታ"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"መክፈትን አራዝም ተሰናክሏል"</string>
+    <string name="global_action_screenshot" msgid="2760267567509131654">"ቅጽበታዊ ገፅ እይታ"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock ተሰናክሏል"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ምስል ተልኳል"</string>
-    <string name="screenshot_saving_title" msgid="2298349784913287333">"ቅጽበታዊ ገጽ እይታ በማስቀመጥ ላይ..."</string>
-    <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"ቅጽበታዊ ገጽ እይታን ወደ የስራ መገለጫ በማስቀመጥ ላይ…"</string>
-    <string name="screenshot_saved_title" msgid="8893267638659083153">"ቅጽበታዊ ገጽ እይታ ተቀምጧል"</string>
-    <string name="screenshot_failed_title" msgid="3259148215671936891">"ቅጽበታዊ ገጽ ዕይታን ማስቀመጥ አልተቻለም"</string>
-    <string name="screenshot_failed_to_save_user_locked_text" msgid="6156607948256936920">"ቅጽበታዊ ገጽ እይታ ከመቀመጡ በፊት መሣሪያ መከፈት አለበት"</string>
-    <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"ቅጽበታዊ ገጽ ዕይታን እንደገና ማንሳት ይሞክሩ"</string>
-    <string name="screenshot_failed_to_save_text" msgid="7232739948999195960">"ቅጽበታዊ ገጽ እይታን ማስቀመጥ አልተቻለም"</string>
-    <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ቅጽበታዊ ገጽ እይታዎችን ማንሳት በመተግበሪያው ወይም በእርስዎ ድርጅት አይፈቀድም"</string>
-    <string name="screenshot_blocked_by_admin" msgid="5486757604822795797">"ቅጽበታዊ ገጽ እይታዎችን ማንሳት በእርስዎ አይቲ አስተዳዳሪ ታግዷል"</string>
+    <string name="screenshot_saving_title" msgid="2298349784913287333">"ቅጽበታዊ ገፅ እይታ በማስቀመጥ ላይ..."</string>
+    <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"ቅጽበታዊ ገፅ እይታን ወደ የስራ መገለጫ በማስቀመጥ ላይ…"</string>
+    <string name="screenshot_saved_title" msgid="8893267638659083153">"ቅጽበታዊ ገፅ እይታ ተቀምጧል"</string>
+    <string name="screenshot_failed_title" msgid="3259148215671936891">"ቅጽበታዊ ገፅ ዕይታን ማስቀመጥ አልተቻለም"</string>
+    <string name="screenshot_failed_to_save_user_locked_text" msgid="6156607948256936920">"ቅጽበታዊ ገፅ እይታ ከመቀመጡ በፊት መሣሪያ መከፈት አለበት"</string>
+    <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"ቅጽበታዊ ገፅ ዕይታን እንደገና ማንሳት ይሞክሩ"</string>
+    <string name="screenshot_failed_to_save_text" msgid="7232739948999195960">"ቅጽበታዊ ገፅ እይታን ማስቀመጥ አልተቻለም"</string>
+    <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ቅጽበታዊ ገፅ እይታዎችን ማንሳት በመተግበሪያው ወይም በእርስዎ ድርጅት አይፈቀድም"</string>
+    <string name="screenshot_blocked_by_admin" msgid="5486757604822795797">"ቅጽበታዊ ገፅ እይታዎችን ማንሳት በእርስዎ አይቲ አስተዳዳሪ ታግዷል"</string>
     <string name="screenshot_edit_label" msgid="8754981973544133050">"አርትዕ ያድርጉ"</string>
-    <string name="screenshot_edit_description" msgid="3333092254706788906">"ቅጽበታዊ ገጽ ዕይታን አርትዕ ያድርጉ"</string>
-    <string name="screenshot_share_description" msgid="2861628935812656612">"ቅጽበታዊ ገጽ እይታን ያጋሩ"</string>
+    <string name="screenshot_edit_description" msgid="3333092254706788906">"ቅጽበታዊ ገፅ ዕይታን አርትዕ ያድርጉ"</string>
+    <string name="screenshot_share_description" msgid="2861628935812656612">"ቅጽበታዊ ገፅ እይታን ያጋሩ"</string>
     <string name="screenshot_scroll_label" msgid="2930198809899329367">"ተጨማሪ ይቅረጹ"</string>
-    <string name="screenshot_dismiss_description" msgid="4702341245899508786">"ቅጽበታዊ ገጽ ዕይታን አሰናብት"</string>
+    <string name="screenshot_dismiss_description" msgid="4702341245899508786">"ቅጽበታዊ ገፅ ዕይታን አሰናብት"</string>
     <string name="screenshot_dismiss_work_profile" msgid="3101530842987697045">"የስራ መገለጫ መልዕክትን ያሰናብታል"</string>
-    <string name="screenshot_preview_description" msgid="7606510140714080474">"የቅጽበታዊ ገጽ ዕይታ ቅድመ-ዕይታ"</string>
+    <string name="screenshot_preview_description" msgid="7606510140714080474">"የቅጽበታዊ ገፅ ዕይታ ቅድመ-ዕይታ"</string>
     <string name="screenshot_top_boundary_pct" msgid="2520148599096479332">"የላይ ወሰን <xliff:g id="PERCENT">%1$d</xliff:g> በመቶ"</string>
     <string name="screenshot_bottom_boundary_pct" msgid="3880821519814946478">"የታች ወሰን <xliff:g id="PERCENT">%1$d</xliff:g> በመቶ"</string>
     <string name="screenshot_left_boundary_pct" msgid="8502323556112287469">"የግራ ወሰን <xliff:g id="PERCENT">%1$d</xliff:g> በመቶ"</string>
     <string name="screenshot_right_boundary_pct" msgid="1201150713021779321">"የቀኝ ወሰን <xliff:g id="PERCENT">%1$d</xliff:g> በመቶ"</string>
     <string name="screenshot_work_profile_notification" msgid="203041724052970693">"<xliff:g id="APP">%1$s</xliff:g> ውስጥ የስራ መገለጫው ውስጥ ተቀምጧል"</string>
     <string name="screenshot_default_files_app_name" msgid="8721579578575161912">"ፋይሎች"</string>
-    <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> ይህን ቅጽበታዊ ገጽ እይታ ለይቷል።"</string>
-    <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> እና ሌሎች ክፍት መተግበሪያዎች ይህን ቅጽበታዊ ገጽ እይታ ለይተዋል።"</string>
+    <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> ይህን ቅጽበታዊ ገፅ እይታ ለይቷል።"</string>
+    <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> እና ሌሎች ክፍት መተግበሪያዎች ይህን ቅጽበታዊ ገፅ እይታ ለይተዋል።"</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"ወደ ማስታወሻ አክል"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"የማያ መቅጃ"</string>
-    <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"የማያ ገጽ ቀረጻን በማሰናዳት ላይ"</string>
-    <string name="screenrecord_channel_description" msgid="4147077128486138351">"ለአንድ የማያ ገጽ ቀረጻ ክፍለ-ጊዜ በመካሄድ ያለ ማሳወቂያ"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"መቅረጽ ይጀመር?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"እየቀረጹ ሳለ የAndroid ስርዓት በማያ ገጽዎ ላይ የሚታይ ወይም በመሣሪያዎ ላይ የሚጫወት ማንኛውም ሚስጥራዊነት ያለው መረጃን መያዝ ይችላል። ይህ የይለፍ ቃላትን፣ የክፍያ መረጃን፣ ፎቶዎችን፣ መልዕክቶችን እና ኦዲዮን ያካትታል።"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"መላው ማያ ገጹን ቅረጽ"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"አንድ ነጠላ መተግበሪያን ቅረጽ"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"እየቀረጹ እያለ Android በማያ ገጽዎ ላይ ለሚታይ ወይም በመሣሪያዎ ላይ ለሚጫወት ማንኛውም ነገር መዳረሻ አለው። ስለዚህ በይለፍ ቃላት፣ በክፍያ ዝርዝሮች፣ በመልዕክቶች ወይም በሌሎች ልዩ ጥንቃቄ የሚያስፈልጋቸው መረጃዎች ላይ ጥንቃቄ ያድርጉ።"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"አንድን መተግበሪያ እየቀረጹ ሳለ Android በዚያ መተግበሪያ ላይ ለሚታይ ወይም ለሚጫወት ማንኛውም ነገር መዳረሻ አለው። ስለዚህ በይለፍ ቃላት፣ በክፍያ ዝርዝሮች፣ በመልዕክቶች ወይም በሌሎች ልዩ ጥንቃቄ የሚያስፈልጋቸው መረጃዎች ላይ ጥንቃቄ ያድርጉ።"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"መቅረጽ ጀምር"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"የማያ መቅረጫ"</string>
+    <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"የማያ ገፅ ቀረጻን በማሰናዳት ላይ"</string>
+    <string name="screenrecord_channel_description" msgid="4147077128486138351">"ለአንድ የማያ ገፅ ቀረጻ ክፍለ-ጊዜ በመካሄድ ያለ ማሳወቂያ"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"መቅረጽ ይጀመር?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"እርስዎ ሲቀርጹ Android በማያ ገጽዎ ላይ ለሚታይ ወይም በመሣሪያዎ ላይ ለሚጫወት ማንኛውም ነገር መዳረሻ አለው። ስለዚህ እንደ የይለፍ ቃላት፣ የክፍያ ዝርዝሮች፣ መልዕክቶች፣ ፎቶዎች እና ኦዲዮ እና ቪድዮ ላሉ ነገሮች ጥንቃቄ ያድርጉ።"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"እርስዎ አንድን መተግበሪያ ሲቀርጹ Android በማያ ገጽዎ ላይ ለሚታይ ወይም በመሣሪያዎ ላይ ለሚጫወት ማንኛውም ነገር መዳረሻ አለው። ስለዚህ እንደ የይለፍ ቃላት፣ የክፍያ ዝርዝሮች፣ መልዕክቶች፣ ፎቶዎች እና ኦዲዮ እና ቪድዮ ላሉ ነገሮች ጥንቃቄ ያድርጉ።"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"መቅረጽ ጀምር"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"ኦዲዮን ቅረጽ"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"የመሣሪያ ኦዲዮ"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"እንደ ሙዚቃ፣ ጥሪዎች እና የጥሪ ቅላጼዎች ያሉ የመሣሪያዎ ድምፅ"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"ማይክሮፎን"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"የመሣሪያ ኦዲዮ እና ማይክሮፎን"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"ጀምር"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"ጀምር"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"ማያ ገጽን በመቅረጽ ላይ"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"ማያ ገጽን እና ኦዲዮን በመቅረጽ ላይ"</string>
-    <string name="screenrecord_taps_label" msgid="1595690528298857649">"በማያ ገጽ ላይ ያሉ ንክኪዎችን አሳይ"</string>
+    <string name="screenrecord_taps_label" msgid="1595690528298857649">"በማያ ገፅ ላይ ያሉ ንክኪዎችን አሳይ"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"አቁም"</string>
     <string name="screenrecord_share_label" msgid="5025590804030086930">"አጋራ"</string>
-    <string name="screenrecord_save_title" msgid="1886652605520893850">"የማያ ገጽ ቀረጻ ተቀምጧል"</string>
+    <string name="screenrecord_save_title" msgid="1886652605520893850">"የማያ ገፅ ቀረጻ ተቀምጧል"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"ለመመልከት መታ ያድርጉ"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"የማያ ገጽ ቀረጻን መሰረዝ ላይ ስህተት"</string>
-    <string name="screenrecord_start_error" msgid="2200660692479682368">"የማያ ገጽ ቀረጻን መጀመር ላይ ስህተት"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"የማያ ገጽ ቀረጻን ማስቀመጥ ላይ ስህተት"</string>
+    <string name="screenrecord_start_error" msgid="2200660692479682368">"የማያ ገፅ ቀረጻን መጀመር ላይ ስህተት"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"በሙሉ ገጽ ዕይታ በማየት ላይ"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"ለመውጣት፣ ከላይ ወደታች ያንሸራትቱ።"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"ገባኝ"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"ተመለስ"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"መነሻ"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"ምናሌ"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"መልክ ተረጋግጧል"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"ተረጋግጧል"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"ለማጠናቀቅ አረጋግጥን መታ ያድርጉ"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"በመልክ ተከፍቷል። ለመቀጠል የመክፈቻ አዶውን ይጫኑ።"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"በመልክ ተከፍቷል"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"በመልክ ተከፍቷል። ለመቀጠል ይጫኑ።"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"መልክ ተለይቶ ታውቋል። ለመቀጠል ይጫኑ።"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"መልክ ተለይቶ ታውቋል። ለመቀጠል የመክፈቻ አዶውን ይጫኑ።"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"የተረጋገጠ"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"ማረጋገጥን ሰርዝ"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ፒን ይጠቀሙ"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ሥርዓተ ጥለትን ተጠቀም"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"የይለፍ ቃልን ተጠቀም"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"በሚቀጥለው ሙከራ ላይ ትክክል ያልሆነ ሥርዓተ ጥለት ካስገቡ የእርስዎ የሥራ መገለጫ እና ውሂቡ ይሰረዛሉ።"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"በሚቀጥለው ሙከራ ላይ ትክክል ያልሆነ ፒን ካስገቡ የእርስዎ የሥራ መገለጫ እና ውሂቡ ይሰረዛሉ።"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"በሚቀጥለው ሙከራ ላይ ትክክል ያልሆነ የይለፍ ቃል ካስገቡ የእርስዎ የሥራ መገለጫ እና ውሂቡ ይሰረዛሉ።"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"አዋቅር"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"አሁን አይደለም"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"ደህንነትን እና አፈጻጸምን ለማሻሻል ይህ ያስፈልጋል"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"በጣት አሻራ መክፈቻን እንደገና ያዋቅሩ"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"በጣት አሻራ መክፈቻ"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"በጣት አሻራ መክፈቻን ያዋቅሩ"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"በጣት አሻራ መክፈቻን እንደገና ለማዋቀር አሁን ያሉት የጣት አሻራ ምስሎችዎ እና ሞዴሎችዎ ይሰረዛሉ።\n\nከተሰረዙ በኋላ የጣት አሻራዎን ተጠቅመው ስልክዎን ለመክፈት ወይም እርስዎ መሆንዎን ለማረጋገጥ የጣት አሻራ መክፈቻን እንደገና ማዋቀር ያስፈልግዎታል።"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"የጣት አሻራ መክፈቻን እንደገና ለማዋቀር አሁን ያሉት የጣት አሻራ ምስሎችዎ እና ሞዴል ይሰረዛሉ።\n\nከተሰረዙ በኋላ የጣት አሻራዎን ተጠቅመው ስልክዎን ለመክፈት ወይም እርስዎ መሆንዎን ለማረጋገጥ የጣት አሻራ መክፈቻን እንደገና ማዋቀር ያስፈልግዎታል።"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"በጣት አሻራ መክፈቻን ማዋቀር አልተቻለም። እንደገና ለመሞከር ወደ ቅንብሮች ይሂዱ።"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"በመልክ መክፈትን እንደገና ያዋቅሩ"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"በመልክ መክፈት"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"በመልክ መክፈትን ያዋቅሩ"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"በመልክ መክፈትን እንደገና ለማዋቀር አሁን ያለው የመልክ ሞዴልዎ ይሰረዛል።\n\nስልክዎን ለመክፈት ፊትዎን ለመጠቀም ይህን ባህሪ እንደገና ማዋቀር ያስፈልግዎታል።"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"በመልክ መክፈትን ማዋቀር አልተቻለም። እንደገና ለመሞከር ወደ ቅንብሮች ይሂዱ።"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"የጣት አሻራ ዳሳሹን ይንኩ"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"ለመቀጠል የክፈት አዶውን ይጫኑ"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"መልክን መለየት አልተቻለም። በምትኩ የጣት አሻራ ይጠቀሙ።"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -198,10 +214,10 @@
     <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"የማሳወቂያ ጥላ።"</string>
     <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ፈጣን ቅንብሮች።"</string>
     <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ፈጣን ቅንብሮች እና የማሳወቂያ ጥላ።"</string>
-    <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ማያ ገጽ ቆልፍ።"</string>
-    <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"የስራ ማያ ገጽ ቁልፍ"</string>
+    <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ማያ ገፅ ቆልፍ።"</string>
+    <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"የስራ ማያ ገፅ ቁልፍ"</string>
     <string name="accessibility_desc_close" msgid="8293708213442107755">"ዝጋ"</string>
-    <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ሙሉ ለሙሉ ጸጥታ"</string>
+    <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ሙሉ ለሙሉ ፀጥታ"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="3375848309132140014">"ማንቂያዎች ብቻ"</string>
     <string name="accessibility_quick_settings_dnd" msgid="2415967452264206047">"አትረብሽ።"</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="8250942386687551283">"ብሉቱዝ።"</string>
@@ -209,7 +225,7 @@
     <string name="accessibility_quick_settings_alarm" msgid="558094529584082090">"ማንቂያ ለ<xliff:g id="TIME">%s</xliff:g> ተዋቅሯል።"</string>
     <string name="accessibility_quick_settings_more_time" msgid="7646479831704665284">"ተጨማሪ ጊዜ።"</string>
     <string name="accessibility_quick_settings_less_time" msgid="9110364286464977870">"ያነሰ ጊዜ።"</string>
-    <string name="accessibility_casting_turned_off" msgid="1387906158563374962">"ማያ ገጽ መውሰድ ቆሟል።"</string>
+    <string name="accessibility_casting_turned_off" msgid="1387906158563374962">"ማያ ገፅ መውሰድ ቆሟል።"</string>
     <string name="accessibility_brightness" msgid="5391187016177823721">"ብሩህነት ያሳዩ"</string>
     <string name="data_usage_disabled_dialog_mobile_title" msgid="2286843518689837719">"የተንቀሳቃሽ ስልክ ውሂብ ባለበት ቆሟል"</string>
     <string name="data_usage_disabled_dialog_title" msgid="9131615296036724838">"ውሂብ ላፍታ ቆሟል"</string>
@@ -220,10 +236,10 @@
     <string name="accessibility_clear_all" msgid="970525598287244592">"ሁሉንም ማሳወቂያዎች አጽዳ"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <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="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>
-    <string name="start_dreams" msgid="9131802557946276718">"የማያ ገጽ ማቆያ"</string>
+    <string name="start_dreams" msgid="9131802557946276718">"የማያ ገፅ ማቆያ"</string>
     <string name="ethernet_label" msgid="2203544727007463351">"ኤተርኔት"</string>
     <string name="quick_settings_dnd_label" msgid="7728690179108024338">"አትረብሽ"</string>
     <string name="quick_settings_bluetooth_label" msgid="7018763367142041481">"ብሉቱዝ"</string>
@@ -232,12 +248,12 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ኦዲዮ"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ማዳመጫ"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ግቤት"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"አጋዥ መስሚያዎች"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"መስሚያ አጋዥ መሣሪያዎች"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"በማብራት ላይ..."</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"በራስ ሰር አሽከርክር"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ማያ ገጽን በራስ-አሽከርክር"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"አካባቢ"</string>
-    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"የማያ ገጽ ማቆያ"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"የማያ ገፅ ማቆያ"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"የካሜራ መዳረሻ"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"የማይክሮፎን መዳረሻ"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"ይገኛል"</string>
@@ -250,7 +266,7 @@
     <string name="quick_settings_networks_unavailable" msgid="1167847013337940082">"አውታረ መረቦች አይገኙም"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="483130889414601732">"ምንም የWi-Fi  አውታረ መረቦች የሉም"</string>
     <string name="quick_settings_wifi_secondary_label_transient" msgid="7501659015509357887">"በማብራት ላይ..."</string>
-    <string name="quick_settings_cast_title" msgid="2279220930629235211">"የማያ ገጽ መውሰድ"</string>
+    <string name="quick_settings_cast_title" msgid="2279220930629235211">"የማያ ገፅ መውሰድ"</string>
     <string name="quick_settings_casting" msgid="1435880708719268055">"በመውሰድ ላይ"</string>
     <string name="quick_settings_cast_device_default_name" msgid="6988469571141331700">"ያልተሰየመ መሣሪያ"</string>
     <string name="quick_settings_cast_detail_empty_text" msgid="2846282280014617785">"ምንም መሣሪያዎች አይገኙም"</string>
@@ -270,7 +286,7 @@
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"ውሂብ ቆጣቢ በርቷል"</string>
     <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# መሣሪያ}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_flashlight_camera_in_use" msgid="4820591564526512571">"ካሜራ ሥራ ላይ ነው"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"የተንቀሳቃሽ ስልክ ውሂብ"</string>
     <string name="quick_settings_cellular_detail_data_usage" msgid="6105969068871138427">"የውሂብ አጠቃቀም"</string>
     <string name="quick_settings_cellular_detail_remaining_data" msgid="1136599216568805644">"ቀሪ ውሂብ"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"በመልክ ተከፍቷል"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"መልክ ተለይቶ ታውቋል"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"እንደገና ለመሞከር ወደ ላይ ይጥረጉ"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"በመልክ መክፈትን እንደገና ለመሞከር ወደ ላይ ያንሸራትቱ"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFCን ለመጠቀም ይክፈቱ"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"ይህ መሣሪያ የድርጅትዎ ነው"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"ይህ መሣሪያ ንብረትነቱ የ<xliff:g id="ORGANIZATION_NAME">%s</xliff:g> ነው"</string>
@@ -355,11 +372,11 @@
     <string name="phone_hint" msgid="6682125338461375925">"ለስልክ ከአዶ ላይ ጠረግ ያድርጉ"</string>
     <string name="voice_hint" msgid="7476017460191291417">"ለድምጽ ረዳት ከአዶ ጠረግ ያድርጉ"</string>
     <string name="camera_hint" msgid="4519495795000658637">"ለካሜራ ከአዶ ላይ ጠረግ ያድርጉ"</string>
-    <string name="interruption_level_none_with_warning" msgid="8394434073508145437">"አጠቃላይ ጸጥታ። ይህ በተጨማሪ ማያ ገጽ አንባቢን ፀጥ ያደርጋል።"</string>
-    <string name="interruption_level_none" msgid="219484038314193379">"ሙሉ ለሙሉ ጸጥታ"</string>
+    <string name="interruption_level_none_with_warning" msgid="8394434073508145437">"አጠቃላይ ፀጥታ። ይህ በተጨማሪ ማያ ገፅ አንባቢን ፀጥ ያደርጋል።"</string>
+    <string name="interruption_level_none" msgid="219484038314193379">"ሙሉ ለሙሉ ፀጥታ"</string>
     <string name="interruption_level_priority" msgid="661294280016622209">"ቅድሚያ የሚሰጠው ብቻ"</string>
     <string name="interruption_level_alarms" msgid="2457850481335846959">"ማንቂያዎች ብቻ"</string>
-    <string name="interruption_level_none_twoline" msgid="8579382742855486372">"ሙሉ ለሙሉ\nጸጥታ"</string>
+    <string name="interruption_level_none_twoline" msgid="8579382742855486372">"ሙሉ ለሙሉ\nፀጥታ"</string>
     <string name="interruption_level_priority_twoline" msgid="8523482736582498083">"ቅድሚያ ተሰጪ\nብቻ"</string>
     <string name="interruption_level_alarms_twoline" msgid="2045067991335708767">"ማንቂያዎች\nብቻ"</string>
     <string name="keyguard_indication_charging_time_wireless" msgid="577856646141738675">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • በገመድ-አልባ ኃይል በመሙላት ላይ • በ<xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ውስጥ ይሞላል"</string>
@@ -382,22 +399,31 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"ተጠቃሚ ይወገድ?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"ሁሉም የዚህ ተጠቃሚ መተግበሪያዎች እና ውሂብ ይሰረዛሉ።"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"አስወግድ"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> በእርስዎ ማያ ገጽ ላይ ያለን ወይም በእርስዎ መሣሪያ ላይ በመጫወት ላይ ያለን ሁሉንም መረጃ በቀረጻ ወይም casting ላይ እያለ መዳረሻ ይኖረዋል። ይህ እንደ የይለፍ ቃላት፣ የክፍያ ዝርዝሮች፣ ፎቶዎች፣ መልዕክቶች እና እርስዎ የሚጫውቱት ኦዲዮን የመሳሰለ መረጃን ያካትታል።"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"ይህን ተግባር የሚያቀርበው አገልግሎት በእርስዎ ማያ ገጽ ላይ ያለን ወይም በእርስዎ መሣሪያ ላይ በመጫወት ላይ ያለን ሁሉንም መረጃ በቀረጻ ወይም casting ላይ እያለ መዳረሻ ይኖረዋል። ይህ እንደ የይለፍ ቃላት፣ የክፍያ ዝርዝሮች፣ ፎቶዎች፣ መልዕክቶች እና እርስዎ የሚጫውቱት ኦዲዮን የመሳሰለ መረጃን ያካትታል።"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"ቀረጻ ወይም cast ማድረግ ይጀምር?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"ከ<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ጋር ቀረጻ ወይም casting ይጀምር?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> እንዲያጋራ ወይም እንዲቀርጽ ይፈቀድለት?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"መላው ማያ ገጽ"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"አንድ ነጠላ መተግበሪያ"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"ሲያጋሩ፣ ሲቀርጹ ወይም cast ሲያደርጉ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> በማያ ገጽዎ ላይ ለሚታይ ወይም በመሣሪያዎ ላይ ለሚጫወት ማንኛውም ነገር መዳረሻ አለው። ስለዚህ በይለፍ ቃላት፣ በክፍያ ዝርዝሮች፣ በመልዕክቶች ወይም በሌሎች ልዩ ጥንቃቄ የሚያስፈልጋቸው መረጃዎች ላይ ጥንቃቄ ያድርጉ።"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"አንድን መተግበሪያ ሲያጋሩ፣ ሲቀርጹ ወይም cast ሲያደርጉ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> በዚያ መተግበሪያ ላይ ለሚታይ ወይም ለሚጫወት ማንኛውም ነገር መዳረሻ አለው። ስለዚህ በይለፍ ቃላት፣ በክፍያ ዝርዝሮች፣ በመልዕክቶች ወይም በሌሎች ልዩ ጥንቃቄ የሚያስፈልጋቸው መረጃዎች ላይ ጥንቃቄ ያድርጉ።"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"ቀጥል"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"መተግበሪያ ያጋሩ ወይም ይቅረጹ"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"ይህ መተግበሪያ እንዲያጋራ ወይም እንዲቀርጽ ይፈቀድለት?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"ሲያጋሩ፣ ሲቀርጹ ወይም cast ሲያደርጉ ይህ መተግበሪያ በማያ ገጽዎ ላይ ለሚታይ ወይም በመሣሪያዎ ላይ ለሚጫወት ማንኛውም ነገር መዳረሻ አለው። ስለዚህ በይለፍ ቃላት፣ በክፍያ ዝርዝሮች፣ በመልዕክቶች ወይም በሌሎች ልዩ ጥንቃቄ የሚያስፈልጋቸው መረጃዎች ላይ ጥንቃቄ ያድርጉ።"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"አንድን መተግበሪያ ሲያጋሩ፣ ሲቀርጹ ወይም cast ሲያደርጉ ይህ መተግበሪያ በዚያ መተግበሪያ ላይ ለሚታይ ወይም ለሚጫወት ማንኛውም ነገር መዳረሻ አለው። ስለዚህ በይለፍ ቃላት፣ በክፍያ ዝርዝሮች፣ በመልዕክቶች ወይም በሌሎች ልዩ ጥንቃቄ የሚያስፈልጋቸው መረጃዎች ላይ ጥንቃቄ ያድርጉ።"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> በእርስዎ ማያ ገጽ ላይ ለሚታየው ወይም በሚቀረጽበት ወይም cast በሚደረግበት ጊዜ በእርስዎ መሣሪያ ላይ ለሚጫወተው ሁሉም መረጃ መዳረሻ ይኖረዋል። ይህ እንደ የይለፍ ቃላት፣ የክፍያ ዝርዝሮች፣ ፎቶዎች፣ መልዕክቶች እና እርስዎ የሚያጫውቱትን ኦዲዮ የመሳሰለ መረጃን ያካትታል።"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"መቅረጽ ወይም cast ማድረግ ይጀመር?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"ይህን ተግባር የሚያቀርበው አገልግሎት በእርስዎ ማያ ገጽ ላይ ለሚታየው ወይም በሚቀረጽበት ወይም cast በሚደረግበት ጊዜ በእርስዎ መሣሪያ ላይ ለሚጫወተው ሁሉም መረጃ መዳረሻ ይኖረዋል። ይህ እንደ የይለፍ ቃላት፣ የክፍያ ዝርዝሮች፣ ፎቶዎች፣ መልዕክቶች እና እርስዎ የሚያጫውቱትን ኦዲዮ የመሳሰለ መረጃን ያካትታል።"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"መላው ማያ ገጽ"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"አንድ ነጠላ መተግበሪያ"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"መተግበሪያን ያጋሩ ወይም ይቅረጹ"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"በ<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> መቅረጽ ወይም cast ማድረግ ይጀመር?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"እርስዎ ሲያጋሩ፣ ሲቀርጹ ወይም cast ሲያደርጉ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> በማያ ገጽዎ ላይ ለሚታይ ወይም በመሣሪያዎ ላይ ለሚጫወት ማንኛውም ነገር መዳረሻ አለው። ስለዚህ እንደ የይለፍ ቃላት፣ የክፍያ ዝርዝሮች፣ መልዕክቶች፣ ፎቶዎች እና ኦዲዮ እና ቪድዮ ላሉ ነገሮች ጥንቃቄ ያድርጉ።"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"አንድን መተግበሪያ ሲያጋሩ፣ ሲቀርጹ ወይም cast ሲያደርጉ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> በዚያ መተግበሪያ ላይ ለሚታይ ወይም ለሚጫወት ማንኛውም ነገር መዳረሻ አለው። ስለዚህ እንደ የይለፍ ቃላት፣ የክፍያ ዝርዝሮች፣ መልዕክቶች፣ ፎቶዎች እና ኦዲዮ እና ቪድዮ ላሉ ነገሮች ጥንቃቄ ያድርጉ።"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"ጀምር"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"cast ማድረግ ይጀምር?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"እርስዎ cast በሚያደርጉበት ጊዜ Android በማያ ገጽዎ ላይ ለሚታይ ወይም በመሣሪያዎ ላይ ለሚጫወት ማንኛውም ነገር መዳረሻ አለው። ስለዚህ እንደ የይለፍ ቃላት፣ የክፍያ ዝርዝሮች፣ መልዕክቶች፣ ፎቶዎች እና ኦዲዮ እና ቪድዮ ላሉ ነገሮች ጥንቃቄ ያድርጉ።"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"አንድን መተግበሪያ cast ሲያደርጉ Android በዚያ መተግበሪያ ላይ ለሚታይ ወይም ለሚጫወት ማንኛውም ነገር መዳረሻ አለው። ስለዚህ እንደ ይለፍ ቃላት፣ የክፍያ ዝርዝሮች፣ መልዕክቶች፣ ፎቶዎች እና ኦዲዮ እና ቪድዮ ላሉ ነገሮች ጥንቃቄ ያድርጉ"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"cast ማድረግ ይጀምር"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"ማጋራት ይጀምር?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"እርስዎ ሲያጋሩ፣ ሲቀርጹ ወይም cast ሲያደርጉ Android በማያ ገጽዎ ላይ ለሚታይ ወይም በመሣሪያዎ ላይ ለሚጫወት ማንኛውም ነገር መዳረሻ አለው። ስለዚህ እንደ የይለፍ ቃላት፣ የክፍያ ዝርዝሮች፣ መልዕክቶች፣ ፎቶዎች እና ኦዲዮ እና ቪድዮ ላሉ ነገሮች ጥንቃቄ ያድርጉ።"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"እርስዎ ሲያጋሩ፣ ሲቀርጹ ወይም cast ሲያደርጉ Android በማያ ገጽዎ ላይ ለሚታይ ወይም በመሣሪያዎ ላይ ለሚጫወት ማንኛውም ነገር መዳረሻ አለው። ስለዚህ እንደ የይለፍ ቃላት፣ የክፍያ ዝርዝሮች፣ መልዕክቶች፣ ፎቶዎች እና ኦዲዮ እና ቪድዮ ላሉ ነገሮች ጥንቃቄ ያድርጉ።"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"ጀምር"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"መተግበሪያዎችን በሚቀያይሩበት ጊዜ ለአፍታ ማቆሞችን ማጋራት"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"በምትኩ ይህን መተግበሪያ ያጋሩ"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"ተመልሰው ይቀይሩ"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"የመተግበሪያ መቀየሪያ"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"በእርስዎ የአይቲ አስተዳዳሪ ታግዷል"</string>
-    <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"የማያ ገጽ ቀረጻ በመሣሪያ መመሪያ ተሰናክሏል"</string>
+    <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"የማያ ገፅ ቀረጻ በመሣሪያ መመሪያ ተሰናክሏል"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"ሁሉንም አጽዳ"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"ያቀናብሩ"</string>
     <string name="manage_notifications_history_text" msgid="57055985396576230">"ታሪክ"</string>
@@ -444,13 +470,14 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"የእውቅና ማረጋገጫ ሰጪ ባለሥልጣን በዚህ መሣሪያ ላይ ተጭኗል። የእርስዎ ደኅንነቱ የተጠበቀ አውታረ መረብ ትራፊክ ክትትል ሊደረግበት እና ሊሻሻል ይችላል።"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"የእርስዎ አስተዳዳሪ የአውታረ መረብ ምዝግብ ማስታወሻ መያዝን አብርተዋል፣ ይህም በመሣሪያዎ ላይ ያለውን ትራፊክ ይከታተላል።"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"የእርስዎ አስተዳዳሪ በስራ መገለጫዎ ውስጥ፣ ግን በግል መገለጫዎ ላይ ሳይሆን፣ ትራፊክን የሚቆጣጠር የአውታረ መረብ ምዝግብ ማስታወሻ አብርተዋል።"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"ይህ መሣሪያ በ <xliff:g id="VPN_APP">%1$s</xliff:g> በኩል ከበይነመረብ ጋር ተገናኝቷል። ኢሜይሎችን እና የአሰሳ ውሂብን ጨምሮ የእርስዎ የአውታረ መረብ እንቅስቃሴ ለአይቲ አስተዳዳሪዎ ይታያል።"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"ይህ መሣሪያ በ<xliff:g id="VPN_APP">%1$s</xliff:g> በኩል ከበይነመረብ ጋር ተገናኝቷል። ኢሜይሎችን እና የአሰሳ ውሂብን ጨምሮ የአውታረ መረብ እንቅስቃሴዎ ለVPN አቅራቢ ይታያል።"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"ይህ መሣሪያ በ<xliff:g id="VPN_APP">%1$s</xliff:g> በኩል ከበይነመረብ ጋር ተገናኝቷል። ኢሜይሎችን እና የአሰሳ ውሂብን ጨምሮ የእርስዎ የአውታረ መረብ እንቅስቃሴ ለአይቲ አስተዳዳሪዎ ይታያል።"</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"ይህ መሣሪያ በ <xliff:g id="VPN_APP_0">%1$s</xliff:g> እና <xliff:g id="VPN_APP_1">%2$s</xliff:g> በኩል ከበይነመረብ ጋር ተገናኝቷል። ኢሜይሎችን እና የአሰሳ ውሂብን ጨምሮ የእርስዎ የአውታረ መረብ እንቅስቃሴ ለአይቲ አስተዳዳሪዎ ይታያል።"</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"የእርስዎ የሥራ መተግበሪያዎች በ <xliff:g id="VPN_APP">%1$s</xliff:g> በኩል ከበይነመረብ ጋር ተገናኝተዋል። ኢሜይሎችን እና የአሰሳ ውሂብን ጨምሮ በሥራ መተግበሪያዎች ውስጥ ያለው የአውታረ መረብ እንቅስቃሴዎ ለአይቲ አስተዳዳሪዎ እና ለVPN አቅራቢዎ ይታያል።"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"የእርስዎ ግላዊ መተግበሪያዎች በ<xliff:g id="VPN_APP">%1$s</xliff:g> በኩል ከበይነመረብ ጋር ተገናኝተዋል። ኢሜይሎችን እና የአሰሳ ውሂብን ጨምሮ የአውታረ መረብ እንቅስቃሴዎ ለVPN አቅራቢዎ ይታያል።"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="8292589617720435430">" "</string>
     <string name="monitoring_description_vpn_settings" msgid="5264167033247632071">"የቪፒኤን ቅንብሮችን ይክፈቱ"</string>
-    <string name="monitoring_description_parental_controls" msgid="8184693528917051626">"ይህ መሣሪያ በእርስዎ ወላጅ የሚተዳደር ነው። ወላጅዎ የሚጠቀሙባቸውን መተግበሪያዎች፣ አካባቢዎን እና የማያ ገጽ ጊዜዎን የመሳሰሉ መረጃዎችን ማየት እና ማስተዳደር ይችላል።"</string>
+    <string name="monitoring_description_parental_controls" msgid="8184693528917051626">"ይህ መሣሪያ በእርስዎ ወላጅ የሚተዳደር ነው። ወላጅዎ የሚጠቀሙባቸውን መተግበሪያዎች፣ አካባቢዎን እና የማያ ገፅ ጊዜዎን የመሳሰሉ መረጃዎችን ማየት እና ማስተዳደር ይችላል።"</string>
     <string name="legacy_vpn_name" msgid="4174223520162559145">"VPN"</string>
     <string name="keyguard_indication_trust_unlocked" msgid="7395154975733744547">"በ TrustAgent እንደተከፈተ ቀርቷል"</string>
     <string name="zen_mode_and_condition" msgid="5043165189511223718">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>። <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"አሰናክል"</string>
     <string name="sound_settings" msgid="8874581353127418308">"ድምፅ እና ንዝረት"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ቅንብሮች"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ደህንነቱ ወደ የተጠበቀ ድምፅ ተቀንሷል"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"ድምፁ ከሚመከረው በላይ ረዘም ላለ ጊዜ ከፍተኛ ነበር"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"የድምፅ መጠን ይበልጥ ደህንነቱ ወደተጠበቀ ደረጃ ዝቅ ተደርጓል"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"የራስ ላይ ማዳመጫ የድምፅ መጠን ከሚመከረው በላይ ረዘም ላለ ጊዜ ከፍተኛ ነበር"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"የራስ ላይ ማዳመጫ የድምፅ መጠን ለዚህ ሳምንት ደህንነቱ ከተጠበቀው ገደብ አልፏል"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"ማዳመጡን ይቀጥሉ"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"ዝቅተኛ የድምፅ መጠን"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"መተግበሪያ ተሰክቷል"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"ይሄ እስኪነቅሉት ድረስ በእይታ ውስጥ ያስቀምጠዋል። ለመንቀል ተመለስ እና አጠቃላይ ዕይታ የሚለውን ይጫኑ እና ይያዙ።"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"ይሄ እስኪነቅሉት ድረስ በእይታ ውስጥ ያስቀምጠዋል። ለመንቀል ተመለስ እና መነሻ የሚለውን ይንኩ እና ይያዙ።"</string>
@@ -538,7 +568,7 @@
     <string name="enable_bluetooth_confirmation_ok" msgid="2866408183324184876">"አብራ"</string>
     <string name="tuner_full_importance_settings" msgid="1388025816553459059">"የኃይል ማሳወቂያ መቆጣጠሪያዎች"</string>
     <string name="rotation_lock_camera_rotation_on" msgid="789434807790534274">"በርቷል - መልክ ላይ የተመሠረተ"</string>
-    <string name="power_notification_controls_description" msgid="1334963837572708952">"በኃይል ማሳወቂያ መቆጣጠሪያዎች አማካኝነት የአንድ መተግበሪያ ማሳወቂያዎች የአስፈላጊነት ደረጃ ከ0 እስከ 5 ድረስ ማዘጋጀት ይችላሉ። \n\n"<b>"ደረጃ 5"</b>" \n- በማሳወቂያ ዝርዝሩ አናት ላይ አሳይ \n- የሙሉ ማያ ገጽ ማቋረጥን ፍቀድ \n- ሁልጊዜ አጮልቀው ይመልከቱ \n\n"<b>"ደረጃ 4"</b>" \n- የሙሉ ማያ ገጽ ማቋረጥን ከልክል \n- ሁልጊዜ አጮልቀው ይመልከቱ \n\n"<b>"ደረጃ 3"</b>" \n- የሙሉ ማያ ገጽ ማቋረጥን ከልክል \n- በፍጹም አጮልቀው አይምልከቱ \n\n"<b>"ደረጃ 2"</b>" \n- የሙሉ ማያ ገጽ ማቋረጥን ይከልክሉ \n- በፍጹም አጮልቀው አይመልከቱ \n- ድምፅ እና ንዝረትን በፍጹም አይኑር \n\n"<b>"ደረጃ 1"</b>" \n- የሙሉ ማያ ገጽ ማቋረጥን ይከልክሉ \n- በፍጹም አጮልቀው አይመልከቱ \n- ድምፅ ወይም ንዝረትን በፍጹም አያደርጉ \n- ከመቆለፊያ ገጽ እና የሁኔታ አሞሌ ይደብቁ \n- በማሳወቂያ ዝርዝር ግርጌ ላይ አሳይ \n\n"<b>"ደረጃ 0"</b>" \n- ሁሉንም የመተግበሪያው ማሳወቂያዎች ያግዱ"</string>
+    <string name="power_notification_controls_description" msgid="1334963837572708952">"በኃይል ማሳወቂያ መቆጣጠሪያዎች አማካኝነት የአንድ መተግበሪያ ማሳወቂያዎች የአስፈላጊነት ደረጃ ከ0 እስከ 5 ድረስ ማዘጋጀት ይችላሉ። \n\n"<b>"ደረጃ 5"</b>" \n- በማሳወቂያ ዝርዝሩ አናት ላይ አሳይ \n- የሙሉ ማያ ገፅ ማቋረጥን ፍቀድ \n- ሁልጊዜ አጮልቀው ይመልከቱ \n\n"<b>"ደረጃ 4"</b>" \n- የሙሉ ማያ ገፅ ማቋረጥን ከልክል \n- ሁልጊዜ አጮልቀው ይመልከቱ \n\n"<b>"ደረጃ 3"</b>" \n- የሙሉ ማያ ገፅ ማቋረጥን ከልክል \n- በፍጹም አጮልቀው አይምልከቱ \n\n"<b>"ደረጃ 2"</b>" \n- የሙሉ ማያ ገፅ ማቋረጥን ይከልክሉ \n- በፍጹም አጮልቀው አይመልከቱ \n- ድምፅ እና ንዝረትን በፍጹም አይኑር \n\n"<b>"ደረጃ 1"</b>" \n- የሙሉ ማያ ገፅ ማቋረጥን ይከልክሉ \n- በፍጹም አጮልቀው አይመልከቱ \n- ድምፅ ወይም ንዝረትን በፍጹም አያደርጉ \n- ከመቆለፊያ ገፅ እና የሁኔታ አሞሌ ይደብቁ \n- በማሳወቂያ ዝርዝር ግርጌ ላይ አሳይ \n\n"<b>"ደረጃ 0"</b>" \n- ሁሉንም የመተግበሪያው ማሳወቂያዎች ያግዱ"</string>
     <string name="inline_done_button" msgid="6043094985588909584">"ተከናውኗል"</string>
     <string name="inline_ok_button" msgid="603075490581280343">"ተግብር"</string>
     <string name="inline_turn_off_notifications" msgid="8543989584403106071">"ማሳወቂያዎችን አጥፋ"</string>
@@ -554,10 +584,10 @@
     <string name="notification_channel_summary_automatic_silenced" msgid="7403004439649872047">"&lt;b&gt;ሁኔታ:&lt;/b&gt; ወደ ዝምታ ዝቅ ተደርጓል"</string>
     <string name="notification_channel_summary_automatic_promoted" msgid="1301710305149590426">"&lt;b&gt;ሁኔታ:&lt;/b&gt; ክፍተኛ ደረጃ ተሰጥቶታል"</string>
     <string name="notification_channel_summary_automatic_demoted" msgid="1831303964660807700">"&lt;b&gt;ሁኔታ:&lt;/b&gt; ዝቅተኛ ደረጃ ተሰጥቶታል"</string>
-    <string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"በውይይት ማሳወቂያዎች አናት ላይ እና በማያ ገጽ መቆለፊያ ላይ እንደ መገለጫ ምስል ይታያል"</string>
-    <string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"በውይይት ማሳወቂያዎች አናት ላይ እና በማያ ገጽ መቆለፊያ ላይ እንደ መገለጫ ምስል ይታያል፣ እንደ አረፋ ሆኖ ይታያል"</string>
-    <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"በውይይት ማሳወቂያዎች አናት ላይ እና በማያ ገጽ መቆለፊያ ላይ እንደ መገለጫ ምስል ይታያል፣ አትረብሽን ያቋርጣል"</string>
-    <string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"በውይይት ማሳወቂያዎች አናት ላይ እና በማያ ገጽ መቆለፊያ ላይ እንደ መገለጫ ምስል ይታያል፣ እንደ አረፋ ሆኖ ይታያል፣ አትረብሽን ያቋርጣል"</string>
+    <string name="notification_channel_summary_priority_baseline" msgid="46674690072551234">"በውይይት ማሳወቂያዎች አናት ላይ እና በማያ ገፅ መቆለፊያ ላይ እንደ መገለጫ ምስል ይታያል"</string>
+    <string name="notification_channel_summary_priority_bubble" msgid="1275413109619074576">"በውይይት ማሳወቂያዎች አናት ላይ እና በማያ ገፅ መቆለፊያ ላይ እንደ መገለጫ ምስል ይታያል፣ እንደ አረፋ ሆኖ ይታያል"</string>
+    <string name="notification_channel_summary_priority_dnd" msgid="6665395023264154361">"በውይይት ማሳወቂያዎች አናት ላይ እና በማያ ገፅ መቆለፊያ ላይ እንደ መገለጫ ምስል ይታያል፣ አትረብሽን ያቋርጣል"</string>
+    <string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"በውይይት ማሳወቂያዎች አናት ላይ እና በማያ ገፅ መቆለፊያ ላይ እንደ መገለጫ ምስል ይታያል፣ እንደ አረፋ ሆኖ ይታያል፣ አትረብሽን ያቋርጣል"</string>
     <string name="notification_priority_title" msgid="2079708866333537093">"ቅድሚያ"</string>
     <string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> የውይይት ባህሪያትን አይደግፍም"</string>
     <string name="notification_unblockable_desc" msgid="2073030886006190804">"እነዚህ ማሳወቂያዎች ሊሻሻሉ አይችሉም።"</string>
@@ -604,8 +634,8 @@
     <string name="keyboard_key_media_previous" msgid="5637875709190955351">"ቀዳሚ"</string>
     <string name="keyboard_key_media_rewind" msgid="3450387734224327577">"ወደኋላ አጠንጥን"</string>
     <string name="keyboard_key_media_fast_forward" msgid="3572444327046911822">"በፍጥነት አሳልፍ"</string>
-    <string name="keyboard_key_page_up" msgid="173914303254199845">"ገጽ ወደ ላይ"</string>
-    <string name="keyboard_key_page_down" msgid="9035902490071829731">"ገጽ ወደ ታች"</string>
+    <string name="keyboard_key_page_up" msgid="173914303254199845">"ገፅ ወደ ላይ"</string>
+    <string name="keyboard_key_page_down" msgid="9035902490071829731">"ገፅ ወደ ታች"</string>
     <string name="keyboard_key_forward_del" msgid="5325501825762733459">"ሰርዝ"</string>
     <string name="keyboard_key_move_home" msgid="3496502501803911971">"መነሻ"</string>
     <string name="keyboard_key_move_end" msgid="99190401463834854">"መጨረሻ"</string>
@@ -629,10 +659,10 @@
     <string name="keyboard_shortcut_search_category_open_apps" msgid="1450959949739257562">"መተግበሪያዎችን ይክፈቱ"</string>
     <string name="keyboard_shortcut_search_category_current_app" msgid="2011953559133734491">"የአሁኑ መተግበሪያ"</string>
     <string name="group_system_access_notification_shade" msgid="7116898151485382275">"የማሳወቂያ ጥላ መዳረሻ"</string>
-    <string name="group_system_full_screenshot" msgid="7389040853798023211">"ሙሉ ቅጽበታዊ ገጽ እይታ ያነሳል"</string>
+    <string name="group_system_full_screenshot" msgid="7389040853798023211">"ሙሉ ቅጽበታዊ ገፅ እይታ ያነሳል"</string>
     <string name="group_system_access_system_app_shortcuts" msgid="4421497579210445641">"የሥርዓት / የመተግበሪያ አቋራጮች ዝርዝር መዳረሻ"</string>
     <string name="group_system_go_back" msgid="8838454003680364227">"ተመለስ፦ ወደ ቀዳሚው ሁኔታ ይመለሳል (ተመለስ አዝራር)"</string>
-    <string name="group_system_access_home_screen" msgid="1857344316928441909">"የመነሻ ማያ ገጽ መዳረሻ"</string>
+    <string name="group_system_access_home_screen" msgid="1857344316928441909">"የመነሻ ማያ ገፅ መዳረሻ"</string>
     <string name="group_system_overview_open_apps" msgid="6897128761003265350">"የክፍት መተግበሪያዎች አጠቃላይ እይታ"</string>
     <string name="group_system_cycle_forward" msgid="9202444850838205990">"የቅርብ ጊዜ መተግበሪያዎች ላይ ዑደት ያደርጋል (ወደ ፊት)"</string>
     <string name="group_system_cycle_back" msgid="5163464503638229131">"የቅርብ ጊዜ መተግበሪያዎች ላይ ዑደት ያደርጋል (ወደ ኋላ)"</string>
@@ -640,13 +670,13 @@
     <string name="group_system_hide_reshow_taskbar" msgid="3809304065624351131">"የተግባር አሞሌን ይደብቃል እና (እንደገና) ያሳያል"</string>
     <string name="group_system_access_system_settings" msgid="7961639365383008053">"የሥርዓት ቅንብሮች መዳረሻ"</string>
     <string name="group_system_access_google_assistant" msgid="1186152943161483864">"የGoogle ረዳት መዳረሻ"</string>
-    <string name="group_system_lock_screen" msgid="7391191300363416543">"ማያ ገጽ ቁልፍ"</string>
+    <string name="group_system_lock_screen" msgid="7391191300363416543">"ማያ ገፅ ቁልፍ"</string>
     <string name="group_system_quick_memo" msgid="2914234890158583919">"ለፈጣን ማስታወሻ የማስታወሻዎች መተግበሪያን ያወጣል"</string>
     <string name="keyboard_shortcut_group_system_multitasking" msgid="1065232949510862593">"የሥርዓት ብዙ ተግባራትን በተመሳሳይ ጊዜ ማከናወን"</string>
-    <string name="system_multitasking_rhs" msgid="6593269428880305699">"ለአርኤችኤስ በአሁኑ መተግበሪያ ወደ የተከፈለ ማያ ገጽ ይገባል"</string>
-    <string name="system_multitasking_lhs" msgid="8839380725557952846">"ለኤልኤችኤስ በአሁኑ መተግበሪያ ወደ የተከፈለ ማያ ገጽ ይገባል"</string>
-    <string name="system_multitasking_full_screen" msgid="1962084334200006297">"ከየተከፈለ ማያ ገጽ ወደ ሙሉ ገጽ ዕይታ ይቀይራል"</string>
-    <string name="system_multitasking_replace" msgid="844285282472557186">"በተከፈለ ማያ ገጽ ወቅት፦ መተግበሪያን ከአንዱ ወደ ሌላው ይተካል"</string>
+    <string name="system_multitasking_rhs" msgid="6593269428880305699">"ለአርኤችኤስ በአሁኑ መተግበሪያ ወደ የተከፈለ ማያ ገፅ ይገባል"</string>
+    <string name="system_multitasking_lhs" msgid="8839380725557952846">"ለኤልኤችኤስ በአሁኑ መተግበሪያ ወደ የተከፈለ ማያ ገፅ ይገባል"</string>
+    <string name="system_multitasking_full_screen" msgid="1962084334200006297">"ከየተከፈለ ማያ ገፅ ወደ ሙሉ ገፅ ዕይታ ይቀይራል"</string>
+    <string name="system_multitasking_replace" msgid="844285282472557186">"በተከፈለ ማያ ገፅ ወቅት፦ መተግበሪያን ከአንዱ ወደ ሌላው ይተካል"</string>
     <string name="keyboard_shortcut_group_input" msgid="6888282716546625610">"ግቤት"</string>
     <string name="input_switch_input_language_next" msgid="3394291576873633793">"የግቤት ቋንቋን ይቀይራል (ቀጣይ ቋንቋ)"</string>
     <string name="input_switch_input_language_previous" msgid="8823659252918609216">"ግቤት ቋንቋን ይቀይራል (ቀዳሚ ቋንቋ)"</string>
@@ -737,15 +767,9 @@
     <string name="accessibility_quick_settings_open_settings" msgid="536838345505030893">"የ<xliff:g id="ID_1">%s</xliff:g> ቅንብሮችን ክፈት።"</string>
     <string name="accessibility_quick_settings_edit" msgid="1523745183383815910">"የቅንብሮድ ቅደም-ተከተል አርትዕ።"</string>
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"የኃይል ምናሌ"</string>
-    <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"ገጽ <xliff:g id="ID_1">%1$d</xliff:g> ከ <xliff:g id="ID_2">%2$d</xliff:g>"</string>
-    <string name="tuner_lock_screen" msgid="2267383813241144544">"ማያ ገጽ ቁልፍ"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"ስልክ በሙቀት ምክንያት ጠፍቷል"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"የእርስዎ ስልክ በመደበኛ ሁኔታ እየሠራ ነው።\nለተጨማሪ መረጃ መታ ያድርጉ"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"የእርስዎ ስልክ በጣም ግሎ ነበር፣ ስለዚህ እንዲቀዘቅዝ ጠፍቷል። የእርስዎ ስልክ አሁን በመደበኝነት እያሄደ ነው።\n\nየሚከተሉትን ካደረጉ የእርስዎ በጣም ሊግል ይችላል፦\n	• ኃይል በጣም የሚጠቀሙ መተግበሪያዎችን (እንደ ጨዋታ፣ ቪዲዮ ወይም የአሰሳ መተግበሪያዎች ያሉ) ከተጠቀሙ\n	• ትላልቅ ፋይሎችን ካወረዱ ወይም ከሰቀሉ\n	• ስልክዎን በከፍተኛ ሙቀት ውስጥ ከተጠቀሙ"</string>
+    <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"ገፅ <xliff:g id="ID_1">%1$d</xliff:g> ከ <xliff:g id="ID_2">%2$d</xliff:g>"</string>
+    <string name="tuner_lock_screen" msgid="2267383813241144544">"ማያ ገፅ ቁልፍ"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"የእንክብካቤ ደረጃዎችን ይመልከቱ"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"ስልኩ እየሞቀ ነው"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"አንዳንድ ባሕሪያት ስልኩ እየቀዘቀዘ እያለ ውስን ይሆናሉ።\nለተጨማሪ መረጃ መታ ያድርጉ"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"የእርስዎ ስልክ በራስ-ሰር ለመቀዝቀዝ ይሞክራል። አሁንም ስልክዎን መጠቀም ይችላሉ፣ ነገር ግን ሊንቀራፈፍ ይችላል።\n\nአንዴ ስልክዎ ከቀዘቀዘ በኋላ በመደበኝነት ያሄዳል።"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"የእንክብካቤ ደረጃዎችን ይመልከቱ"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"መሣሪያዎን ይንቀሉ"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"መሣሪያዎ ከኃይል መሙያ ወደቡ አቅራቢያ እየሞቀ ነው። ከኃይል መሙያ ወይም ከዩኤስቢ ተጨማሪ መሣሪያ ጋር ከተገናኘ ይንቀሉት እና ገመዱ የሞቀ ሊሆን ስለሚችል ጥንቃቄ ያድርጉ።"</string>
@@ -766,7 +790,7 @@
     <string name="tuner_app" msgid="6949280415826686972">"የ<xliff:g id="APP">%1$s</xliff:g> መተግበሪያ"</string>
     <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_screenshot" msgid="7665814998932211997">"ቅጽበታዊ ገፅ እይታዎች"</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>
@@ -811,9 +835,9 @@
     <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8341216022442383954">"መተግበሪያዎች የእርስዎን <xliff:g id="TYPES_LIST">%s</xliff:g> እየተጠቀሙ ነው።"</string>
     <string name="ongoing_privacy_dialog_separator" msgid="1866222499727706187">"፣ "</string>
     <string name="ongoing_privacy_dialog_last_separator" msgid="5615876114268009767">" እና "</string>
-    <string name="ongoing_privacy_dialog_using_op" msgid="426635338010011796">"በ<xliff:g id="APPLICATION_NAME">%1$s</xliff:g> ስራ ላይ እየዋለ ነው"</string>
-    <string name="ongoing_privacy_dialog_recent_op" msgid="2736290123662790026">"በቅርብ ጊዜ በ<xliff:g id="APPLICATION_NAME">%1$s</xliff:g> ስራ ላይ ውሏል"</string>
-    <string name="ongoing_privacy_dialog_enterprise" msgid="3003314125311966061">"(ስራ)"</string>
+    <string name="ongoing_privacy_dialog_using_op" msgid="426635338010011796">"በ<xliff:g id="APPLICATION_NAME">%1$s</xliff:g> ሥራ ላይ እየዋለ ነው"</string>
+    <string name="ongoing_privacy_dialog_recent_op" msgid="2736290123662790026">"በቅርብ ጊዜ በ<xliff:g id="APPLICATION_NAME">%1$s</xliff:g> ሥራ ላይ ውሏል"</string>
+    <string name="ongoing_privacy_dialog_enterprise" msgid="3003314125311966061">"(ሥራ)"</string>
     <string name="ongoing_privacy_dialog_phonecall" msgid="4487370562589839298">"የስልክ ጥሪ"</string>
     <string name="ongoing_privacy_dialog_attribution_text" msgid="4738795925380373994">"(በ<xliff:g id="APPLICATION_NAME_S_">%s</xliff:g> በኩል)"</string>
     <string name="ongoing_privacy_dialog_attribution_label" msgid="3385241594101496292">"(<xliff:g id="ATTRIBUTION_LABEL">%s</xliff:g>)"</string>
@@ -836,9 +860,10 @@
     <string name="accessibility_control_move_left" msgid="8156206978511401995">"ወደ ግራ ውሰድ"</string>
     <string name="accessibility_control_move_right" msgid="8926821093629582888">"ወደ ቀኝ ውሰድ"</string>
     <string name="magnification_mode_switch_description" msgid="2698364322069934733">"የማጉላት ማብሪያ/ማጥፊያ"</string>
-    <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ሙሉ ገጽ እይታን ያጉሉ"</string>
+    <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ሙሉ ገፅ እይታን ያጉሉ"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"የማያ ገጹን ክፍል አጉላ"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"የማጉያ ቅንብሮችን ክፈት"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"የማጉላት ቅንብሮችን ዝጋ"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"መጠን ለመቀየር ጠርዙን ይዘው ይጎትቱ"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"ሰያፍ ሽብለላን ፍቀድ"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"መጠን ቀይር"</string>
@@ -854,7 +879,7 @@
     <string name="accessibility_magnification_medium" msgid="6994632616884562625">"መካከለኛ"</string>
     <string name="accessibility_magnification_small" msgid="8144502090651099970">"ትንሽ"</string>
     <string name="accessibility_magnification_large" msgid="6602944330021308774">"ትልቅ"</string>
-    <string name="accessibility_magnification_fullscreen" msgid="5043514702759201964">"ሙሉ ገጽ ዕይታ"</string>
+    <string name="accessibility_magnification_fullscreen" msgid="5043514702759201964">"ሙሉ ገፅ ዕይታ"</string>
     <string name="accessibility_magnification_done" msgid="263349129937348512">"ተከናውኗል"</string>
     <string name="accessibility_magnifier_edit" msgid="1522877239671820636">"አርትዕ"</string>
     <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"የማጉያ መስኮት ቅንብሮች"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ተወዳጅ አታድርግ"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"ወደ ቦታ <xliff:g id="NUMBER">%d</xliff:g> ውሰድ"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"መቆጣጠሪያዎች"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"በፍጥነት ለመድረስ የመሣሪያ መቆጣጠሪያዎችን ይምረጡ"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"መቆጣጠሪያዎችን ዳግም ለማስተካከል ይያዙ እና ይጎትቱ"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"ሁሉም መቆጣጠሪያዎች ተወግደዋል"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ለውጦች አልተቀመጡም"</string>
@@ -902,9 +926,9 @@
     <string name="controls_dialog_remove" msgid="3775288002711561936">"አስወግድ"</string>
     <string name="controls_dialog_message" msgid="342066938390663844">"በ<xliff:g id="APP">%s</xliff:g> የተጠቆመ"</string>
     <string name="controls_tile_locked" msgid="731547768182831938">"መሣሪያ ተቆልፏል"</string>
-    <string name="controls_settings_show_controls_dialog_title" msgid="3357852503553809554">"ከማያ ገጽ ቆልፍ ላይ መሳሪያዎች ይታዩ እና ይቆጣጠሩ?"</string>
-    <string name="controls_settings_show_controls_dialog_message" msgid="7666211700524587969">"ለውጫዊ መሳሪያዎችዎ መቆጣጠሪያዎችን ወደ ማያ ገጽ ቆልፍ ማከል ይችላሉ።\n\nየእርስዎ መሣሪያ መተግበሪያ የእርስዎን ስልክ ወይም ጡባዊ ሳይከፍቱ አንዳንድ መሣሪያዎችን እንዲቆጣጠሩ ሊፈቅድልዎ ይችላል።\n\nበቅንብሮች ውስጥ በማንኛውም ጊዜ ለውጦችን ማድረግ ይችላሉ።"</string>
-    <string name="controls_settings_trivial_controls_dialog_title" msgid="7593188157655036677">"መሳሪያዎች ከማያ ገጽ ቆልፍ ይቆጣጠሩ?"</string>
+    <string name="controls_settings_show_controls_dialog_title" msgid="3357852503553809554">"ከማያ ገፅ ቆልፍ ላይ መሳሪያዎች ይታዩ እና ይቆጣጠሩ?"</string>
+    <string name="controls_settings_show_controls_dialog_message" msgid="7666211700524587969">"ለውጫዊ መሳሪያዎችዎ መቆጣጠሪያዎችን ወደ ማያ ገፅ ቆልፍ ማከል ይችላሉ።\n\nየእርስዎ መሣሪያ መተግበሪያ የእርስዎን ስልክ ወይም ጡባዊ ሳይከፍቱ አንዳንድ መሣሪያዎችን እንዲቆጣጠሩ ሊፈቅድልዎ ይችላል።\n\nበቅንብሮች ውስጥ በማንኛውም ጊዜ ለውጦችን ማድረግ ይችላሉ።"</string>
+    <string name="controls_settings_trivial_controls_dialog_title" msgid="7593188157655036677">"መሳሪያዎች ከማያ ገፅ ቆልፍ ይቆጣጠሩ?"</string>
     <string name="controls_settings_trivial_controls_dialog_message" msgid="397178734990952575">"የእርስዎን ስልክ ወይም ጡባዊ ሳይከፍቱ አንዳንድ መሣሪያዎችን መቆጣጠር ይችላሉ። የእርስዎ መሣሪያ መተግበሪያ የትኞቹን መሣሪያዎች በዚህ መንገድ መቆጣጠር እንደሚቻል ይወስናል።"</string>
     <string name="controls_settings_dialog_neutral_button" msgid="4514446354793124140">"አይ፣ አመሰግናለሁ"</string>
     <string name="controls_settings_dialog_positive_button" msgid="436070672551674863">"አዎ"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"ሌላ ፒን ይሞክሩ"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"ለ<xliff:g id="DEVICE">%s</xliff:g> ለውጥን ያረጋግጡ"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"ተጨማሪ ለማየት ያንሸራትቱ"</string>
+    <string name="retry_face" msgid="416380073082560186">"የመልክ ማረጋገጫን እንደገና ይሞክሩ"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"ምክሮችን በመጫን ላይ"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"ሚዲያ"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"ለ<xliff:g id="APP_NAME">%1$s</xliff:g> የዚህ ሚዲያ መቆጣጠሪያ ይደበቅ?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"ቅንብሮች"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> በ<xliff:g id="ARTIST_NAME">%2$s</xliff:g> ከ<xliff:g id="APP_LABEL">%3$s</xliff:g> እየተጫወተ ነው"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> ከ<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> እያሄደ ነው"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"አጫውት"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"ላፍታ አቁም"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"ቀዳሚ ትራክ"</string>
@@ -967,8 +993,10 @@
     <string name="media_output_dialog_accessibility_title" msgid="4681741064190167888">"ለኦዲዮ ውጽዓት ተገኚ የሆኑ መሣሪያዎች"</string>
     <string name="media_output_dialog_accessibility_seekbar" msgid="5332843993805568978">"የድምጽ መጠን"</string>
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
-    <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"ድምጽ ማውጫዎች እና ማሳያዎች"</string>
+    <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"ድምፅ ማውጫዎች እና ማሳያዎች"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"የተጠቆሙ መሣሪያዎች"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"ሚዲያን ወደ ሌላ መሣሪያ ለማንቀሳቀስ የተጋራውን ክፍለ ጊዜዎን ያቁሙ"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"አቁም"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"ማሰራጨት እንዴት እንደሚሠራ"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"ስርጭት"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"ተኳሃኝ የብሉቱዝ መሣሪያዎች ያላቸው በአቅራቢያዎ ያሉ ሰዎች እርስዎ እያሰራጩት ያሉትን ሚዲያ ማዳመጥ ይችላሉ"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"ማስቀመጥ አልተቻለም። እንደገና ይሞክሩ።"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"ማስቀመጥ አልተቻለም።"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"ቢያንስ 4 ቁምፊዎችን ይጠቀሙ"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"ከ16 የሚያንሱ ቁምፊዎችን ይጠቀሙ"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"ከ<xliff:g id="LENGTH">%1$d</xliff:g> የሚያንሱ ቁምፊዎችን ይጠቀሙ"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"የግንብ ቁጥር"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"የገንባ ቁጥር ወደ ቅንጥብ ሰሌዳ ተቀድቷል።"</string>
     <string name="basic_status" msgid="2315371112182658176">"ውይይት ይክፈቱ"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"የባትሪ መለኪያዎን የማንበብ ችግር"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"ለበለጠ መረጃ መታ ያድርጉ"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"ምንም ማንቂያ አልተቀናበረም"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ማያ ገጽ መቆለፊያ ያስገቡ"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"የጣት አሻራ ዳሳሽ"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"ያረጋግጡ"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"መሣሪያን ያስገቡ"</string>
@@ -1075,7 +1104,7 @@
     <string name="clipboard_edit" msgid="4500155216174011640">"አርትዕ"</string>
     <string name="add" msgid="81036585205287996">"አክል"</string>
     <string name="manage_users" msgid="1823875311934643849">"ተጠቃሚዎችን ያስተዳድሩ"</string>
-    <string name="drag_split_not_supported" msgid="7173481676120546121">"ይህ ማሳወቂያ ወደ የተከፈለ ማያ ገጽ መጎተትን አይደግፍም"</string>
+    <string name="drag_split_not_supported" msgid="7173481676120546121">"ይህ ማሳወቂያ ወደ የተከፈለ ማያ ገፅ መጎተትን አይደግፍም"</string>
     <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>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"ረዳት በማዳመጥ ላይ ነው"</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="note_task_button_label" msgid="8718616095800343136">"Notetaking"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"የማስታወሻ አያያዝ"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"የማስታወሻ አያያዝ፣ <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"የበለጠ ለመረዳት"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"<xliff:g id="URL">%s</xliff:g> ላይ የበለጠ ይወቁ"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> ይክፈቱ"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• መተግበሪያው ተዋቅሯል"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• ቢያንስ አንድ ካርድ ወደ Wallet ታክሏል"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• የካሜራ መተግበሪያ ይጫኑ"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• መተግበሪያው ተዋቅሯል"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• ቢያንስ አንድ መሣሪያ ይገኛል"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"የWallet መተግበሪያን እንደ አቋራጭ ለማከል መተግበሪያው መጫኑን ያረጋግጡ"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"የWallet መተግበሪያን እንደ አቋራጭ ለማከል ቢያንስ አንድ ካርድ መታከሉን ያረጋግጡ"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"የQR ኮድ መቃኛውን እንደ አቋራጭ ለማከል የካሜራ መተግበሪያ መጫኑን ያረጋግጡ"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"የHome መተግበሪያውን እንደ አቋራጭ ለማከል መተግበሪያው እንደተጫነ ያረጋግጡ"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• ቢያንስ አንድ መሣሪያ ይገኛል"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"የማስታወሻ አያያዝ አቋራጭን ለመጠቀም ነባሪ የማስታወሻ መተግበሪያ ይምረጡ"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"መተግበሪያ ይምረጡ"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"የይንኩ እና ይያዙ አቋራጭ"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"ይቅር"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"ማያ ገፆችን አሁን ይቀይሩ"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"ብሮስፌዎን ከኃይል መሙያ ጋር ያገናኙ"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"የብሮስፌ ባትሪ ዝቅተኛ ነው"</string>
     <string name="video_camera" msgid="7654002575156149298">"የቪድዮ ካሜራ"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"ከዚህ መገለጫ መደወል አይቻልም"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"የሥራ መመሪያዎ እርስዎ ከሥራ መገለጫው ብቻ ጥሪ እንዲያደርጉ ይፈቅድልዎታል"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"ከግል መተግበሪያ መደወል አይቻልም"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"ድርጅትዎ ከሥራ መተግበሪያዎች ብቻ ጥሪዎችን እንዲያደርጉ ይፈቅድልዎታል"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"ወደ የሥራ መገለጫ ቀይር"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"ዝጋ"</string>
-    <string name="lock_screen_settings" msgid="6152703934761402399">"ማያ ገጽ ቁልፍን አብጅ"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"የስልክ መተግበሪያ ጫን"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"ይቅር"</string>
+    <string name="lock_screen_settings" msgid="6152703934761402399">"ማያ ገፅ ቁልፍን አብጅ"</string>
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"የማያ ገጽ ቁልፍን ለማበጀት ይክፈቱ"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi አይገኝም"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"ካሜራ ታግዷል"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"ካሜራ እና ማይክሮፎን ታግደዋል"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"ማይክሮፎን ታግዷል"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"የቅድሚያ ሁነታ በርቷል"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"የረዳት ትኩረት በርቷል"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"በቅንብሮች ውስጥ ነባሪ የማስታወሻዎች መተግበሪያን ያቀናብሩ"</string>
+    <string name="install_app" msgid="5066668100199613936">"መተግበሪያን ጫን"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"ማይክሮፎን እና ካሜራ"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"የቅርብ ጊዜ የመተግበሪያ አጠቃቀም"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"የቅርብ ጊዜ መዳረሻን አሳይ"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"ተከናውኗል"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"ዘርጋ እና አማራጮችን አሳይ"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"ሰብስብ"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"ይህን መተግበሪያ ዝጋ"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> ተዘግቷል"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"አገልግሎትን አስተዳድር"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"መዳረሻን አስተዳድር"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"በስልክ ጥሪ ሥራ ላይ እየዋለ ነው"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"በቅርብ ጊዜ በስልክ ጥሪ ውስጥ ጥቅም ላይ ውሏል"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"በ<xliff:g id="APP_NAME">%1$s</xliff:g> ጥቅም ላይ እየዋለ ነው"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"በቅርብ ጊዜ በ<xliff:g id="APP_NAME">%1$s</xliff:g> ጥቅም ላይ ውሏል"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"በ<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ጥቅም ላይ እየዋለ ነው"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"በቅርብ ጊዜ በ<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ጥቅም ላይ ውሏል"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"በ<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ጥቅም ላይ እየዋለ ነው"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"በቅርብ ጊዜ በ<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ጥቅም ላይ ውሏል"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-am/strings_tv.xml b/packages/SystemUI/res/values-am/strings_tv.xml
deleted file mode 100644
index a89d79be..0000000
--- a/packages/SystemUI/res/values-am/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN ተያይዟል"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN ተቋርቷል"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"በ<xliff:g id="VPN_APP">%1$s</xliff:g> በኩል"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"ማሳወቂያዎች"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"ምንም ማሳወቂያዎች የሉም"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"ማይክሮፎን እየቀዳ ነው"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"ካሜራ እየቀረጸ ነው"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"ካሜራ እየቀረጸ እና ማይክሮፎን እየቀዳ ነው"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"ማይክሮፎን መቅዳት አቁሟል"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"ካሜራ መቅረጽ አቁሟል"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"ካሜራ መቅረጽ እና ማይክሮፎን መቅዳት አቁመዋል"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"የማያ ገጽ ቀረጻ ተጀምሯል"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"የማያ ገጽ ቀረጻ ቆሟል"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 29a7c50..bb99e2c 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"‏تفعيل USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"مزيد من المعلومات"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"لقطة شاشة"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"‏تم إيقاف ميزة Extend Unlock."</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"تم إيقاف ميزة \"إبقاء الجهاز مفتوحًا\"."</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"أرسَل صورة"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"جارٍ حفظ لقطة الشاشة..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"جارٍ حفظ لقطة الشاشة في الملف الشخصي للعمل…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"رصَد تطبيق \"<xliff:g id="APPNAME">%1$s</xliff:g>\" لقطة الشاشة هذه."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"رصَد تطبيق \"<xliff:g id="APPNAME">%1$s</xliff:g>\" والتطبيقات المفتوحة الأخرى لقطة الشاشة هذه."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"إضافة إلى الملاحظة"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"مسجّل الشاشة"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"مسجّل الشاشة"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"جارٍ معالجة تسجيل الشاشة"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"إشعار مستمر لجلسة تسجيل شاشة"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"هل تريد بدء التسجيل؟"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"‏أثناء التسجيل، يمكن أن يسجّل نظام Android أي معلومات حساسة مرئية على شاشتك أو يتم تشغيلها على جهازك. ويشمل ذلك كلمات المرور ومعلومات الدفع والصور والرسائل والمقاطع الصوتية."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"تسجيل الشاشة بالكامل"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"تسجيل محتوى تطبيق واحد"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"‏أثناء التسجيل، يمكن لنظام Android الوصول إلى كل العناصر المرئية على شاشتك أو التي يتم تشغيلها على جهازك، لذا يُرجى توخي الحذر بشأن كلمات المرور أو تفاصيل الدفع أو الرسائل أو المعلومات الحساسة الأخرى."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"‏أثناء تسجيل محتوى أحد التطبيقات، يمكن لنظام Android الوصول إلى كل العناصر المعروضة أو التي يتم تشغيلها في ذلك التطبيق، لذا يُرجى توخي الحذر بشأن كلمات المرور أو تفاصيل الدفع أو الرسائل أو المعلومات الحساسة الأخرى."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"بدء التسجيل"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"هل تريد بدء التسجيل؟"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"‏أثناء التسجيل، يمكن لنظام Android الوصول إلى كل المحتوى المعروض على شاشتك أو الذي يتم تشغيله على جهازك، لذا يُرجى توخي الحذر بشأن المعلومات، مثل كلمات المرور وتفاصيل الدفع والرسائل والصور وملفات الصوت والفيديو."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"‏أثناء تسجيل محتوى تطبيق، يمكن لنظام Android الوصول إلى كل المحتوى المعروض أو الذي يتم تشغيله في ذلك التطبيق، لذا يُرجى توخي الحذر بشأن المعلومات، مثل كلمات المرور وتفاصيل الدفع والرسائل والصور وملفات الصوت والفيديو."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"بدء التسجيل"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"تسجيل الصوت"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"صوت الجهاز"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"الصوت من جهازك، مثلاً الموسيقى والمكالمات ونغمات الرنين"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"الميكروفون"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"صوت الجهاز والميكروفون"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"بدء"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"بدء"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"جارٍ تسجيل الشاشة"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"جارٍ تسجيل الشاشة والصوت"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"إظهار اللمسات على الشاشة"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"مشاركة"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"تم حفظ تسجيل الشاشة"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"انقر لعرض التسجيل."</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"حدث خطأ أثناء حذف تسجيل الشاشة."</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"حدث خطأ أثناء حفظ تسجيل محتوى الشاشة."</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"حدث خطأ في بدء تسجيل الشاشة"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"جارٍ العرض بملء الشاشة"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"للخروج، مرِّر سريعًا من أعلى الشاشة لأسفلها."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"حسنًا"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"رجوع"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"الرئيسية"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"القائمة"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"تمّت مصادقة الوجه."</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"تمّ التأكيد."</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"يمكنك النقر على \"تأكيد\" لإكمال المهمة."</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"تم فتح القفل بالتعرّف على وجهك. للمتابعة، اضغط على رمز فتح القفل."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"تم فتح قفل جهازك عند تقريبه من وجهك."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"تم فتح قفل جهازك عند تقريبه من وجهك. اضغط للمتابعة."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"تم التعرّف على الوجه. اضغط للمتابعة."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"تم التعرّف على الوجه. للمتابعة، اضغط على رمز فتح القفل."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"مصادقة"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"إلغاء المصادقة"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"استخدام رقم تعريف شخصي"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"استخدام نقش"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"استخدام كلمة المرور"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"عند إدخال نقش غير صحيح في المحاولة التالية، سيتم حذف ملفك الشخصي للعمل وبياناته."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"عند إدخال رقم تعريف شخصي غير صحيح في المحاولة التالية، سيتم حذف ملفك الشخصي للعمل وبياناته."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"عند إدخال كلمة مرور غير صحيحة في المحاولة التالية، سيتم حذف ملفك الشخصي للعمل وبياناته."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"إعداد"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"لاحقًا"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"هذا الإجراء مطلوب لتحسين مستوى الأمان والأداء."</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"إعادة إعداد ميزة \"فتح الجهاز ببصمة الإصبع\""</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"فتح الجهاز ببصمة الإصبع"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"إعداد ميزة \"فتح الجهاز ببصمة الإصبع\""</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"لإعادة إعداد ميزة \"فتح الجهاز ببصمة الإصبع\"، سيتم حذف صور بصمة الإصبع ونماذجها.\n\nبعد حذفها، عليك إعادة إعداد ميزة \"فتح الجهاز ببصمة الإصبع\" لتتمكن من استخدام بصمة الإصبع في فتح قفل الهاتف أو إثبات هويتك."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"لإعادة إعداد ميزة \"فتح الجهاز ببصمة الإصبع\"، سيتم حذف صور بصمة الإصبع ونموذجها.\n\nبعد حذفها، عليك إعادة إعداد ميزة \"فتح الجهاز ببصمة الإصبع\" لتتمكن من استخدام بصمة الإصبع في فتح قفل الهاتف أو إثبات هويتك."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"تعذّر إعداد ميزة \"فتح الجهاز ببصمة الإصبع\". انتقِل إلى \"الإعدادات\" لإعادة المحاولة."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"إعادة إعداد ميزة \"فتح الجهاز بالتعرّف على الوجه\""</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"فتح الجهاز بالتعرّف على الوجه"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"إعداد ميزة \"فتح الجهاز بالتعرّف على الوجه\""</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"لإعادة إعداد ميزة \"فتح الجهاز بالتعرّف على الوجه\"، سيتم حذف نموذج الوجه الحالي.\n\nعليك إعادة إعداد الميزة لتتمكن من فتح قفل الهاتف باستخدام وجهك."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"تعذّر إعداد ميزة \"فتح الجهاز بالتعرّف على الوجه\". انتقِل إلى \"الإعدادات\" لإعادة المحاولة."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"المس أداة استشعار بصمة الإصبع"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"للمتابعة، اضغط على رمز فتح القفل."</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"يتعذّر التعرّف على الوجه. استخدِم بصمة الإصبع بدلاً من ذلك."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"صوت"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"سماعة الرأس"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"الإدخال"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"سماعات الأذن الطبية"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"سماعات الأذن الطبية"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"جارٍ التفعيل…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"التدوير التلقائي"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"التدوير التلقائي للشاشة"</string>
@@ -269,7 +285,7 @@
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"جارٍ التفعيل…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"توفير البيانات مفعّل"</string>
     <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{جهاز واحد}zero{# جهاز}two{جهازان}few{# أجهزة}many{# جهازًا}other{# جهاز}}"</string>
-    <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"الفلاش"</string>
+    <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"ضوء الفلاش"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"الكاميرا قيد الاستخدام"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"بيانات الجوّال"</string>
     <string name="quick_settings_cellular_detail_data_usage" msgid="6105969068871138427">"استخدام البيانات"</string>
@@ -338,7 +354,7 @@
     <string name="zen_silence_introduction" msgid="6117517737057344014">"سيؤدي هذا إلى حظر جميع الأصوات والاهتزازات، بما في ذلك ما يرد من التنبيهات والموسيقى والفيديو والألعاب."</string>
     <string name="notification_tap_again" msgid="4477318164947497249">"انقر مرة أخرى للفتح"</string>
     <string name="tap_again" msgid="1315420114387908655">"انقر مرة أخرى"</string>
-    <string name="keyguard_unlock" msgid="8031975796351361601">"يمكنك الفتح بالتمرير سريعًا لأعلى."</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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"تم فتح قفل جهازك عند تقريبه من وجهك."</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"تم التعرّف على الوجه."</string>
     <string name="keyguard_retry" msgid="886802522584053523">"مرِّر سريعًا للأعلى لإعادة المحاولة."</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"مرِّر سريعًا للأعلى لاستخدام \"فتح الجهاز بالتعرف على الوجه\""</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"‏افتح قفل الشاشة لاستخدام تقنية NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"هذا الجهاز يخص مؤسستك."</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"هذا الجهاز يخص <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>."</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"هل تريد إزالة المستخدم؟"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"سيتم حذف جميع تطبيقات وبيانات هذا المستخدم."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"إزالة"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"سيتمكن تطبيق <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> من الوصول إلى كل المعلومات المرئية لك على الشاشة أو التي يتم تشغيلها على جهازك أثناء التسجيل أو الإرسال. ويشمل ذلك معلومات مثل كلمات المرور وتفاصيل الدفع والصور والرسائل والمقاطع الصوتية التي تشغِّلها."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"ستتمكن الخدمة التي تقدّم هذه الوظيفة من الوصول إلى كل المعلومات المرئية لك على الشاشة أو التي يتم تشغيلها على جهازك أثناء التسجيل أو البث. ويشمل ذلك معلومات مثل كلمات المرور وتفاصيل الدفع والصور والرسائل والمقاطع الصوتية التي تشغِّلها."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"هل تريد بدء التسجيل أو البث؟"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"هل تريد بدء التسجيل أو الإرسال باستخدام <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>؟"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"هل تريد السماح لتطبيق <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> بالمشاركة أو التسجيل؟"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"الشاشة بالكامل"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"تطبيق واحد"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"أثناء المشاركة أو التسجيل أو البث، يمكن لتطبيق <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> الوصول إلى كل العناصر المرئية على شاشتك أو التي يتم تشغيلها على جهازك، لذا يُرجى توخي الحذر بشأن كلمات المرور أو تفاصيل الدفع أو الرسائل أو المعلومات الحساسة الأخرى."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"أثناء مشاركة محتوى تطبيق أو تسجيله أو بثه، يمكن لتطبيق <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> الوصول إلى كل العناصر المعروضة أو التي يتم تشغيلها في ذلك التطبيق، لذا يُرجى توخي الحذر بشأن كلمات المرور أو تفاصيل الدفع أو الرسائل أو المعلومات الحساسة الأخرى."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"متابعة"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"مشاركة محتوى تطبيق أو تسجيله"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"هل تريد السماح لهذا التطبيق بمشاركة المحتوى أو تسجيله؟"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"أثناء مشاركة المحتوى أو تسجيله أو بثه، يمكن لهذا التطبيق الوصول إلى كل العناصر المرئية على شاشتك أو التي يتم تشغيلها على جهازك، لذا يُرجى توخي الحذر بشأن كلمات المرور أو تفاصيل الدفع أو الرسائل أو المعلومات الحساسة الأخرى."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"أثناء مشاركة محتوى تطبيق أو تسجيله أو بثه، يمكن لهذا التطبيق الوصول إلى كل العناصر المعروضة أو التي يتم تشغيلها في ذلك التطبيق، لذا يُرجى توخي الحذر بشأن كلمات المرور أو تفاصيل الدفع أو الرسائل أو المعلومات الحساسة الأخرى."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"سيتمكن تطبيق \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" من الوصول إلى كل المحتوى المعروض على شاشتك أو الذي يتم تشغيله على جهازك أثناء التسجيل أو البثّ. ويشمل ذلك معلومات، مثل كلمات المرور وتفاصيل الدفع والصور والرسائل والمقاطع الصوتية التي تشغِّلها."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"هل تريد بدء التسجيل أو البثّ؟"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"ستتمكن الخدمة التي تقدّم هذه الوظيفة من الوصول إلى كل المحتوى المعروض على شاشتك أو الذي يتم تشغيله على جهازك أثناء التسجيل أو البثّ. ويشمل ذلك معلومات، مثل كلمات المرور وتفاصيل الدفع والصور والرسائل والمقاطع الصوتية التي تشغِّلها."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"الشاشة بالكامل"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"تطبيق واحد"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"مشاركة أو تسجيل محتوى تطبيق محدّد"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"هل تريد بدء التسجيل أو البثّ باستخدام \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\"؟"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"أثناء المشاركة أو التسجيل أو البثّ، يمكن لتطبيق \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" الوصول إلى كل المحتوى المعروض على شاشتك أو الذي يتم تشغيله على جهاز، لذا يُرجى توخي الحذر بشأن المعلومات، مثل كلمات المرور وتفاصيل الدفع والرسائل والصور وملفات الصوت والفيديو."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"أثناء مشاركة محتوى تطبيق أو تسجيله أو بثّه، يمكن لتطبيق \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" الوصول إلى كل المحتوى المعروض أو الذي يتم تشغيله في ذلك التطبيق، لذا يُرجى توخي الحذر بشأن المعلومات، مثل كلمات المرور وتفاصيل الدفع والرسائل والصور وملفات الصوت والفيديو."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"بدء"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"هل تريد بدء البثّ؟"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"‏أثناء البثّ، يمكن لنظام Android الوصول إلى كل المحتوى المعروض على شاشتك أو الذي يتم تشغيله على جهازك، لذا يُرجى توخي الحذر بشأن المعلومات، مثل كلمات المرور وتفاصيل الدفع والرسائل والصور وملفات الصوت والفيديو."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"‏أثناء بثّ محتوى تطبيق، يمكن لنظام Android الوصول إلى كل المحتوى المعروض أو الذي يتم تشغيله في ذلك التطبيق، لذا يُرجى توخي الحذر بشأن المعلومات، مثل كلمات المرور وتفاصيل الدفع والرسائل والصور وملفات الصوت والفيديو."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"بدء البثّ"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"هل تريد بدء المشاركة؟"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"‏أثناء المشاركة أو التسجيل أو البثّ، يمكن لنظام Android الوصول إلى كل المحتوى المعروض على شاشتك أو الذي يتم تشغيله على جهازك، لذا يُرجى توخي الحذر بشأن المعلومات، مثل كلمات المرور وتفاصيل الدفع والرسائل والصور وملفات الصوت والفيديو."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"‏أثناء مشاركة محتوى تطبيق أو تسجيله أو بثّه، يمكن لنظام Android الوصول إلى كل المحتوى المعروض أو الذي يتم تشغيله في ذلك التطبيق، لذا يُرجى توخي الحذر بشأن المعلومات مثل كلمات المرور وتفاصيل الدفع والرسائل والصور وملفات الصوت والفيديو."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"بدء"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"تتوقف المشاركة مؤقتًا عند التبديل بين التطبيقات."</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"مشاركة هذا التطبيق بدلاً من ذلك"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"الرجوع"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"التبديل بين التطبيقات"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"حظر مشرف تكنولوجيا المعلومات هذه الميزة"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"ميزة \"تصوير الشاشة\" غير مفعَّلة بسبب سياسة الجهاز."</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"محو الكل"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"تم تثبيت مرجع مصدّق على هذا الجهاز. قد تتم مراقبة حركة بيانات شبكتك الآمنة أو تعديلها."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"شغَّل المشرف ميزة تسجيل بيانات الشبكة، والتي يتم من خلالها مراقبة حركة البيانات على جهازك."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"شغَّل المشرف ميزة تسجيل بيانات الشبكة، والتي يتم من خلالها مراقبة حركة البيانات في ملفك الشخصي للعمل ولكن لا تتم مراقبتها في ملفك الشخصي."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"هذا الجهاز متّصل بالإنترنت من خلال <xliff:g id="VPN_APP">%1$s</xliff:g>. تظهر أنشطة الشبكة، بما في ذلك الرسائل الإلكترونية وبيانات التصفُّح، لمشرف تكنولوجيا المعلومات."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"‏هذا الجهاز متّصل بالإنترنت من خلال \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". ويمكن لمقدِّم شبكة VPN الاطّلاع على أنشطة الشبكة، بما في ذلك الرسائل الإلكترونية وبيانات التصفّح."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"هذا الجهاز متّصل بالإنترنت من خلال \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". تجدر الإشارة إلى أنّ أنشطة الشبكة، بما في ذلك الرسائل الإلكترونية وبيانات التصفُّح، مرئية لمشرف تكنولوجيا المعلومات في مؤسستك."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"هذا الجهاز متّصل بالإنترنت من خلال <xliff:g id="VPN_APP_0">%1$s</xliff:g> و<xliff:g id="VPN_APP_1">%2$s</xliff:g>. يمكن لمشرف تكنولوجيا المعلومات رؤية أنشطة الشبكة، بما في ذلك الرسائل الإلكترونية وبيانات التصفُّح."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"‏تطبيقات العمل الخاصة بك متّصلة بالإنترنت من خلال <xliff:g id="VPN_APP">%1$s</xliff:g>. يمكن لمشرف تكنولوجيا المعلومات ومزوّد خدمة الشبكة الافتراضية الخاصة (VPN) رؤية أنشطة الشبكة في تطبيقات العمل، بما في ذلك الرسائل الإلكترونية وبيانات التصفُّح."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"‏تطبيقاتك الشخصية متّصلة بالإنترنت من خلال <xliff:g id="VPN_APP">%1$s</xliff:g>. تظهر أنشطة الشبكة، بما في ذلك الرسائل الإلكترونية وبيانات التصفُّح، لمزوّد خدمة الشبكة الافتراضية الخاصة (VPN)."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"إيقاف"</string>
     <string name="sound_settings" msgid="8874581353127418308">"الصوت والاهتزاز"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"الإعدادات"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"تم خفض الصوت إلى المستوى الآمن"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"كان مستوى الصوت مرتفعًا لمدة أطول مما يُنصَح به."</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"تم خفض مستوى الصوت إلى مستوى أكثر أمانًا"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"كان مستوى صوت سمّاعة الرأس مرتفعًا لمدة أطول مما يُنصَح به."</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"تجاوز مستوى صوت سمّاعة الرأس الحد الآمن هذا الأسبوع."</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"مواصلة الاستماع"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"خفض مستوى الصوت"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"تم تثبيت الشاشة على التطبيق"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"يؤدي هذا إلى استمرار عرض الشاشة المُختارة إلى أن تتم إزالة تثبيتها. المس مع الاستمرار الزرين \"رجوع\" و\"نظرة عامة\" لإزالة التثبيت."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"يؤدي هذا إلى استمرار عرض الشاشة المُختارة إلى أن تتم إزالة تثبيتها. المس مع الاستمرار الزرين \"رجوع\" و\"الشاشة الرئيسية\" لإزالة التثبيت."</string>
@@ -634,7 +664,7 @@
     <string name="group_system_go_back" msgid="8838454003680364227">"رجوع: العودة إلى الحالة السابقة (زر الرجوع)"</string>
     <string name="group_system_access_home_screen" msgid="1857344316928441909">"الوصول إلى الشاشة الرئيسية"</string>
     <string name="group_system_overview_open_apps" msgid="6897128761003265350">"نظرة عامة على التطبيقات المفتوحة"</string>
-    <string name="group_system_cycle_forward" msgid="9202444850838205990">"التنقّل بين التطبيقات الحديثة (للأمام)"</string>
+    <string name="group_system_cycle_forward" msgid="9202444850838205990">"التنقّل بين التطبيقات المُستخدَمة مؤخرًا (للأمام)"</string>
     <string name="group_system_cycle_back" msgid="5163464503638229131">"التنقّل بين التطبيقات الحديثة (للخلف)"</string>
     <string name="group_system_access_all_apps_search" msgid="488070738028991753">"قائمة الوصول لجميع التطبيقات والبحث (أي البحث/مشغّل التطبيقات)"</string>
     <string name="group_system_hide_reshow_taskbar" msgid="3809304065624351131">"إظهار أو إخفاء أو إعادة إظهار شريط التطبيقات"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"قائمة زر التشغيل"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"الصفحة <xliff:g id="ID_1">%1$d</xliff:g> من <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"شاشة القفل"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"تم إيقاف الهاتف بسبب الحرارة"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"يعمل هاتفك الآن بشكل طبيعي.\nانقر للحصول على مزيد من المعلومات."</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"ارتفعت درجة حرارة هاتفك بشدة، لذا تم إيقاف تشغيله لخفض درجة حرارته. يعمل هاتفك الآن بشكل طبيعي.\n\nقد ترتفع بشدة درجة حرارة هاتفك إذا:\n	• استخدمت تطبيقات كثيفة الاستخدام لموارد الجهاز (مثل الألعاب أو الفيديو أو تطبيقات التنقل)\n	• نزَّلت أو حمَّلت ملفات كبيرة الحجم\n	• استخدمت هاتفك وسط أجواء مرتفعة الحرارة"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"الاطّلاع على خطوات العناية"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"تزداد درجة حرارة الهاتف"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"يتم تقييد عمل بعض الميزات إلى أن تنخفض درجة حرارة الهاتف.\nانقر للحصول على مزيد من المعلومات."</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"سيحاول الهاتف تخفيض درجة حرارته تلقائيًا. سيظل بإمكانك استخدام هاتفك، ولكن قد يعمل بشكل أبطأ.\n\nبعد أن تنخفض درجة حرارة الهاتف، سيستعيد سرعته المعتادة."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"الاطّلاع على خطوات العناية"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"افصِل جهازك"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"‏تزداد حرارة الجهاز بالقرب من منفذ الشحن. إذا كان الجهاز متصلاً بشاحن أو ملحق USB، عليك فصله وتوخي الحذر لأن درجة حرارة الكابل قد تكون مرتفعة أيضًا."</string>
@@ -811,8 +835,8 @@
     <string name="ongoing_privacy_chip_content_multiple_apps" msgid="8341216022442383954">"تستخدم التطبيقات <xliff:g id="TYPES_LIST">%s</xliff:g>."</string>
     <string name="ongoing_privacy_dialog_separator" msgid="1866222499727706187">"، "</string>
     <string name="ongoing_privacy_dialog_last_separator" msgid="5615876114268009767">" و "</string>
-    <string name="ongoing_privacy_dialog_using_op" msgid="426635338010011796">"يجري الاستخدام الآن من قِبل <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>."</string>
-    <string name="ongoing_privacy_dialog_recent_op" msgid="2736290123662790026">"تم الاستخدام مؤخرًا من قِبل <xliff:g id="APPLICATION_NAME">%1$s</xliff:g>."</string>
+    <string name="ongoing_privacy_dialog_using_op" msgid="426635338010011796">"يجري الاستخدام الآن من قِبل \"<xliff:g id="APPLICATION_NAME">%1$s</xliff:g>\"."</string>
+    <string name="ongoing_privacy_dialog_recent_op" msgid="2736290123662790026">"تم الاستخدام مؤخرًا من قِبل \"<xliff:g id="APPLICATION_NAME">%1$s</xliff:g>\"."</string>
     <string name="ongoing_privacy_dialog_enterprise" msgid="3003314125311966061">"(العمل)"</string>
     <string name="ongoing_privacy_dialog_phonecall" msgid="4487370562589839298">"المكالمات الهاتفية"</string>
     <string name="ongoing_privacy_dialog_attribution_text" msgid="4738795925380373994">"(من خلال <xliff:g id="APPLICATION_NAME_S_">%s</xliff:g>)"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"تكبير الشاشة كلها"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"تكبير جزء من الشاشة"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"فتح إعدادات التكبير"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"إغلاق إعدادات التكبير"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"اسحب الزاوية لتغيير الحجم."</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"السماح بالتمرير القطري"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"تغيير الحجم"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"إزالة من المفضّلة"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"نقل إلى الموضع <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"عناصر التحكّم"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"اختَر ميزة \"أدوات التحكّم بالجهاز\" للوصول إليها بسرعة."</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"اضغط مع الاستمرار واسحب لإعادة ترتيب عناصر التحكّم."</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"تمت إزالة كل عناصر التحكّم."</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"لم يتم حفظ التغييرات."</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"حاوِل إدخال رقم تعريف شخصي آخر"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"تأكيد التغيير لـ <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"مرّر سريعًا لرؤية المزيد."</string>
+    <string name="retry_face" msgid="416380073082560186">"يُرجى إعادة محاولة المصادقة للتعرّف على الوجه."</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"جارٍ تحميل الاقتراحات"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"الوسائط"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"هل تريد إخفاء عنصر التحكم في الوسائط هذا للتطبيق <xliff:g id="APP_NAME">%1$s</xliff:g>؟"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"الإعدادات"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"يتم تشغيل <xliff:g id="SONG_NAME">%1$s</xliff:g> للفنان <xliff:g id="ARTIST_NAME">%2$s</xliff:g> من تطبيق <xliff:g id="APP_LABEL">%3$s</xliff:g>."</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> من إجمالي <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"‫\"<xliff:g id="APP_NAME">%1$s</xliff:g>\" قيد التشغيل"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"تشغيل"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"إيقاف مؤقت"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"المقطع الصوتي السابق"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"%%<xliff:g id="PERCENTAGE">%1$d</xliff:g>"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"مكبّرات الصوت والشاشات"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"الأجهزة المقترَحة"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"أوقِف الجلسة المشتركة لنقل الوسائط إلى جهاز آخر."</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"إيقاف"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"كيفية عمل البث"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"البث"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"يمكن للأشخاص القريبين منك الذين لديهم أجهزة متوافقة تتضمّن بلوتوث الاستماع إلى الوسائط التي تبثها."</string>
@@ -981,11 +1009,11 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"لا يمكن إجراء الحفظ. يُرجى إعادة المحاولة."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"لا يمكن إجراء الحفظ."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"يجب استخدام 4 أحرف على الأقل."</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"يجب أن يحتوي الرمز على أقل من 16 حرفًا."</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"يجب استخدام أقل من <xliff:g id="LENGTH">%1$d</xliff:g> حرف."</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"رقم الإصدار"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"تم نسخ رقم الإصدار إلى الحافظة."</string>
     <string name="basic_status" msgid="2315371112182658176">"محادثة مفتوحة"</string>
-    <string name="select_conversation_title" msgid="6716364118095089519">"أدوات المحادثة"</string>
+    <string name="select_conversation_title" msgid="6716364118095089519">"التطبيقات المصغّرة للمحادثات"</string>
     <string name="select_conversation_text" msgid="3376048251434956013">"انقر على محادثة لإضافتها إلى \"الشاشة الرئيسية\"."</string>
     <string name="no_conversations_text" msgid="5354115541282395015">"ستظهر هنا المحادثات الحديثة."</string>
     <string name="priority_conversations" msgid="3967482288896653039">"المحادثات ذات الأولوية"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"حدثت مشكلة أثناء قراءة مقياس مستوى شحن البطارية."</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"انقر للحصول على مزيد من المعلومات."</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"لم يتم ضبط منبّه."</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"إدخال الرمز لفتح القفل"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"مستشعر بصمات الإصبع"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"المصادقة"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"الدخول إلى الجهاز"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"‏يستمع \"مساعد Google\" إليك الآن."</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="note_task_button_label" msgid="8718616095800343136">"تدوين الملاحظات"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"تدوين الملاحظات"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"تدوين الملاحظات في \"<xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"مزيد من المعلومات"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"مزيد من المعلومات على <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"فتح \"<xliff:g id="APPNAME">%1$s</xliff:g>\""</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• إعداد التطبيق"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"‏• إضافة بطاقة واحدة على الأقل إلى \"محفظة Google\""</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• تثبيت تطبيق كاميرا"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• إعداد التطبيق"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• توفُّر جهاز واحد على الأقل"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"‏لإضافة تطبيق \"محفظة Google\" كاختصار، تأكَّد من أنّ التطبيق مثبَّت."</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"‏لإضافة تطبيق \"محفظة Google\" كاختصار، تأكَّد من إضافة بطاقة واحدة على الأقل."</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"لإضافة تطبيق الماسح الضوئي لرمز الاستجابة السريعة كاختصار، تأكَّد من أنّ تطبيق الكاميرا مثبَّت."</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"‏لإضافة تطبيق Home كاختصار، تأكَّد من أنّ التطبيق مثبَّت."</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• توفُّر جهاز واحد على الأقل"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"اختَر تطبيقًا تلقائيًا لتدوين الملاحظات لاستخدام اختصار تدوين الملاحظات."</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"اختيار تطبيق"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"انقر مع الاستمرار على الاختصار."</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"إلغاء"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"تبديل الشاشتَين الآن"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"عليك توصيل قلم الشاشة بشاحن."</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"بطارية قلم الشاشة منخفضة"</string>
     <string name="video_camera" msgid="7654002575156149298">"كاميرا فيديو"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"لا يمكن الاتصال باستخدام هذا الملف الشخصي."</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"تسمح لك سياسة العمل بإجراء المكالمات الهاتفية من الملف الشخصي للعمل فقط."</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"لا يمكن الاتصال من تطبيق شخصي"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"تسمح لك مؤسستك بإجراء المكالمات من تطبيقات العمل فقط."</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"التبديل إلى الملف الشخصي للعمل"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"إغلاق"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"تثبيت تطبيق الهاتف في الملف الشخصي للعمل"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"إلغاء"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"تخصيص شاشة القفل"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"الفتح لتخصيص شاشة القفل"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"‏لا يتوفّر اتصال Wi-Fi."</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"استخدام الكاميرا محظور."</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"استخدام الكاميرا والميكروفون محظور."</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"استخدام الميكروفون محظور."</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"وضع الأولوية مفعّل."</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"‏ميزة لفت انتباه \"مساعد Google\" مفعّلة."</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"يمكنك ضبط تطبيق تدوين الملاحظات التلقائي في \"الإعدادات\"."</string>
+    <string name="install_app" msgid="5066668100199613936">"تثبيت التطبيق"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"الميكروفون والكاميرا"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"آخر استخدام في التطبيقات"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"عرض آخر استخدام في التطبيقات"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"تم"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"توسيع الخيارات وعرضها"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"تصغير"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"إغلاق هذا التطبيق"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"تم إغلاق <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"إدارة الخدمة"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"إدارة أذونات الوصول"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"قيد الاستخدام في المكالمة الهاتفية"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"تم الاستخدام مؤخرًا في المكالمة الهاتفية"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"قيد الاستخدام في <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"تم الاستخدام مؤخرًا في <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"قيد الاستخدام في <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"تم الاستخدام مؤخرًا في <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"قيد الاستخدام في <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"تم الاستخدام مؤخرًا في <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ar/strings_tv.xml b/packages/SystemUI/res/values-ar/strings_tv.xml
deleted file mode 100644
index 0a96069..0000000
--- a/packages/SystemUI/res/values-ar/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"‏شبكة VPN متصلة."</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"‏شبكة VPN غير متصلة."</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"عبر <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"الإشعارات"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"ما من إشعارات"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"جارٍ التسجيل بالميكرفون"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"جارٍ التسجيل بالكاميرا"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"جارٍ التسجيل بالكاميرا والميكروفون"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"توقف التسجيل بالميكرفون."</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"توقف التسجيل بالكاميرا."</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"توقف التسجيل بالكاميرا والميكروفون."</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"بدأ تسجيل الشاشة."</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"توقَّف تسجيل الشاشة."</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 31d9707..856ae1d 100644
--- a/packages/SystemUI/res/values-ar/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ar/tiles_states_strings.xml
@@ -89,7 +89,7 @@
   <string-array name="tile_states_color_correction">
     <item msgid="2840507878437297682">"غير متوفّر"</item>
     <item msgid="1909756493418256167">"غير مفعّل"</item>
-    <item msgid="4531508423703413340">"مفعّل"</item>
+    <item msgid="4531508423703413340">"الميزة مفعّلة"</item>
   </string-array>
   <string-array name="tile_states_inversion">
     <item msgid="3638187931191394628">"الميزة غير متاحة"</item>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index 775c8d4..d52301c 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -24,7 +24,7 @@
     <string name="battery_low_description" msgid="3282977755476423966">"আপোনাৰ <xliff:g id="PERCENTAGE">%s</xliff:g> বেটাৰী বাকী আছে। বেটাৰী সঞ্চয়কাৰীয়ে গাঢ় ৰঙৰ থীম অন কৰে, নেপথ্যৰ কাৰ্যকলাপ সীমাবদ্ধ কৰে আৰু জাননী পলম কৰে।"</string>
     <string name="battery_low_intro" msgid="5148725009653088790">"বেটাৰী সঞ্চয়কাৰীয়ে গাঢ় ৰঙৰ থীম অন কৰে, নেপথ্যৰ কাৰ্যকলাপ সীমাবদ্ধ কৰে আৰু জাননী পলম কৰে।"</string>
     <string name="battery_low_percent_format" msgid="4276661262843170964">"<xliff:g id="PERCENTAGE">%s</xliff:g> বাকী আছে"</string>
-    <string name="invalid_charger_title" msgid="938685362320735167">"ইউএছবি জৰিয়তে চ্চাৰ্জ কৰিব নোৱাৰি"</string>
+    <string name="invalid_charger_title" msgid="938685362320735167">"ইউএছবি জৰিয়তে চাৰ্জ কৰিব নোৱাৰি"</string>
     <string name="invalid_charger_text" msgid="2339310107232691577">"আপোনাৰ ডিভাইচৰ লগত পোৱা চ্চাৰ্জাৰটো ব্যৱহাৰ কৰক।"</string>
     <string name="battery_saver_confirmation_title" msgid="1234998463717398453">"বেটাৰী সঞ্চয়কাৰী অন কৰিবনে?"</string>
     <string name="battery_saver_confirmation_title_generic" msgid="2299231884234959849">"বেটাৰী সঞ্চয়কাৰীৰ বিষয়ে"</string>
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB সক্ষম কৰক"</string>
     <string name="learn_more" msgid="4690632085667273811">"অধিক জানক"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"স্ক্ৰীনশ্বট"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock অক্ষম কৰা আছে"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"এক্সটেণ্ড আনলক অক্ষম কৰা আছে"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"এখন প্ৰতিচ্ছবি পঠিয়াইছে"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"স্ক্ৰীনশ্বট ছেভ কৰি থকা হৈছে…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"কৰ্মস্থানৰ প্ৰ’ফাইলত স্ক্ৰীনশ্বট ছেভ কৰি থকা হৈছে…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g>এ এই স্ক্ৰীনশ্বটটো চিনাক্ত কৰিছে।"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> আৰু আন খোলা এপ্‌সমূহে এই স্ক্ৰীনশ্বটটো চিনাক্ত কৰিছে।"</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"টোকাত যোগ দিয়ক"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"স্ক্ৰীন ৰেকৰ্ডাৰ"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"স্ক্ৰীন ৰেকৰ্ডাৰ"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"স্ক্রীন ৰেকৰ্ডিঙৰ প্ৰক্ৰিয়াকৰণ হৈ আছে"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"স্ক্রীন ৰেকৰ্ডিং ছেশ্বন চলি থকা সময়ত পোৱা জাননী"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"ৰেকৰ্ড কৰা আৰম্ভ কৰিবনে?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"ৰেকৰ্ড কৰি থাকোঁতে, Android Systemএ আপোনাৰ স্ক্রীনত দৃশ্যমান হোৱা অথবা আপোনাৰ ডিভাইচত প্লে’ হৈ থকা যিকোনো সংবেনদশীল তথ্য কেপচাৰ কৰিব পাৰে। এইটোত পাছৱর্ড, পৰিশোধৰ তথ্য, ফট’, বার্তাসমূহ আৰু অডিঅ’ অন্তর্ভুক্ত হয়।"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"গোটেই স্ক্ৰীনখন ৰেকৰ্ড কৰক"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"এটা এপ্ ৰেকৰ্ড কৰক"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"আপুনি ৰেকৰ্ড কৰাৰ সময়ত, আপোনাৰ স্ক্ৰীনখনত দৃশ্যমান যিকোনো বস্তু অথবা আপোনাৰ ডিভাইচত প্লে’ কৰা যিকোনো সমললৈ Androidৰ এক্সেছ থাকে। গতিকে, পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা অথবা অন্য সংবেদনশীল তথ্যৰ ক্ষেত্ৰত সাৱধান হওক।"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"আপুনি এপ এপ্ ৰেকৰ্ড কৰাৰ সময়ত সেইটো এপত দৃশ্যমান যিকোনো বস্তু অথবা আপোনাৰ ডিভাইচত প্লে’ কৰা যিকোনো সমললৈ Androidৰ এক্সেছ থাকে। গতিকে, পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা অথবা অন্য সংবেদনশীল তথ্যৰ ক্ষেত্ৰত সাৱধান হওক।"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"ৰেকৰ্ডিং আৰম্ভ কৰক"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"ৰেকৰ্ড কৰা আৰম্ভ কৰিবনে?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"আপুনি ৰেকৰ্ড কৰাৰ সময়ত, আপোনাৰ স্ক্ৰীনখনত দৃশ্যমান যিকোনো বস্তু অথবা আপোনাৰ ডিভাইচত প্লে’ কৰা যিকোনো সমললৈ Androidৰ এক্সেছ থাকে। গতিকে, পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা, ফট’ আৰু অডিঅ’ আৰু ভিডিঅ’ৰ ক্ষেত্ৰত সাৱধান হওক।"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"আপুনি এটা এপ্ ৰেকৰ্ড কৰাৰ সময়ত সেইটো এপত দৃশ্যমান হোৱা যিকোনো বস্তু অথবা আপোনাৰ ডিভাইচত প্লে’ কৰা যিকোনো সমললৈ Androidৰ এক্সেছ থাকে। গতিকে, পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা, ফট’ আৰু অডিঅ’ আৰু ভিডিঅ’ৰ ক্ষেত্ৰত সাৱধান হওক।"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"ৰেকৰ্ডিং আৰম্ভ কৰক"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"অডিঅ’ ৰেকৰ্ড কৰক"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"ডিভাইচৰ অডিঅ’"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"সংগীত, কল আৰু ৰিংট’নসমূহৰ দৰে আপোনাৰ ডিভাইচৰ পৰা কেপচাৰ কৰিব পৰা ধ্বনি"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"মাইক্ৰ’ফ’ন"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"ডিভাইচৰ অডিঅ’ আৰু মাইক্ৰ’ফ’ন"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"আৰম্ভ কৰক"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"আৰম্ভ কৰক"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"স্ক্ৰীন ৰেকৰ্ড কৰি থকা হৈছে"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"স্ক্ৰীন আৰু অডিঅ’ ৰেকৰ্ড কৰি থকা হৈছে"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"স্ক্ৰীনত স্পৰ্শসমূহ প্ৰদৰ্শন কৰক"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"শ্বেয়াৰ কৰক"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"স্ক্ৰীন ৰেকৰ্ডিং ছেভ কৰা হ’ল"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"চাবলৈ টিপক"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"স্ক্রীন ৰেকৰ্ডিং মচি থাকোঁতে কিবা আসোঁৱাহ হ’ল"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"ৰেকৰ্ড কৰা স্ক্ৰীন ছেভ কৰোঁতে আসোঁৱাহ হৈছে"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"স্ক্রীন ৰেকৰ্ড কৰা আৰম্ভ কৰোঁতে আসোঁৱাহ হৈছে"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"পূৰ্ণ স্ক্ৰীনত চাই আছে"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"বাহিৰ হ’বলৈ ওপৰৰ পৰা তললৈ ছোৱাইপ কৰক।"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"বুজি পালোঁ"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"উভতি যাওক"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"গৃহ পৃষ্ঠাৰ বুটাম"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"মেনু"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"মুখমণ্ডলৰ বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ কৰা হ’ল"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"নিশ্চিত কৰিলে"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"সম্পূৰ্ণ কৰিবলৈ নিশ্চিত কৰক-ত টিপক"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"মুখাৱয়বৰ জৰিয়তে আনলক কৰা হৈছে। অব্যাহত ৰাখিবলৈ আনলক কৰক চিহ্নটোত টিপক।"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"মুখাৱয়বৰ জৰিয়তে আনলক কৰা হৈছে"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"মুখাৱয়বৰ জৰিয়তে আনলক কৰা হৈছে। অব্যাহত ৰাখিবলৈ টিপক।"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"মুখাৱয়ব চিনাক্ত কৰা হৈছে। অব্যাহত ৰাখিবলৈ টিপক।"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"মুখাৱয়ব চিনাক্ত কৰা হৈছে। অব্যাহত ৰাখিবলৈ আনলক কৰক চিহ্নটোত টিপক।"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ কৰা হ’ল"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ বাতিল কৰক"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"পিন ব্যৱহাৰ কৰক"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"আৰ্হি ব্যৱহাৰ কৰক"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"পাছৱৰ্ড ব্যৱহাৰ কৰক"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"আপুনি পৰৱৰ্তী প্ৰয়াসত এটা ভুল আৰ্হি দিলে, আপোনাৰ কৰ্মস্থানৰ প্ৰ’ফাইল আৰু ইয়াৰ ডেটা মচি পেলোৱা হ’ব।"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"আপুনি পৰৱৰ্তী প্ৰয়াসত এটা ভুল পিন দিলে, আপোনাৰ কৰ্মস্থানৰ প্ৰ’ফাইল আৰু ইয়াৰ ডেটা মচি পেলোৱা হ’ব।"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"আপুনি পৰৱৰ্তী প্ৰয়াসত এটা ভুল পাছৱৰ্ড দিলে, আপোনাৰ কৰ্মস্থানৰ প্ৰ’ফাইল আৰু ইয়াৰ ডেটা মচি পেলোৱা হ’ব।"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"ছেট আপ কৰক"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"এতিয়া নহয়"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"সুৰক্ষা আৰু কাৰ্যক্ষমতা উন্নত কৰিবলৈ এইটোৰ আৱশ্যক"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"ফিংগাৰপ্ৰিণ্ট আনলক পুনৰ ছেট আপ কৰক"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"ফিংগাৰপ্ৰিণ্ট আনলক"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"ফিংগাৰপ্ৰিণ্ট আনলক ছেট আপ কৰক"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"ফিংগাৰপ্ৰিণ্ট আনলক পুনৰ ছেট আপ কৰিবলৈ, আপোনাৰ বৰ্তমানৰ ফিংগাৰপ্ৰিণ্টৰ প্ৰতিচ্ছবি আৰু মডেলসমূহ মচা হ’ব।\n\nসেইসমূহ মচাৰ পাছত, আপোনাৰ ফ’নটো আনলক কৰিবলৈ অথবা এয়া আপুনিয়েই বুলি সত্যাপন কৰিবলৈ আপোনাৰ ফিংগাৰপ্ৰিণ্ট ব্যৱহাৰ কৰাৰ বাবে আপুনি ফিংগাৰপ্ৰিণ্ট আনলক পুনৰ ছেট আপ কৰিব লাগিব।"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"ফিংগাৰপ্ৰিণ্ট আনলক পুনৰ ছেট আপ কৰিবলৈ, আপোনাৰ বৰ্তমানৰ ফিংগাৰপ্ৰিণ্টৰ প্ৰতিচ্ছবিসমূহ আৰু মডেলটো মচা হ’ব।\n\nসেইসমূহ মচাৰ পাছত, আপোনাৰ ফ’নটো আনলক কৰিবলৈ অথবা এয়া আপুনিয়েই বুলি সত্যাপন কৰিবলৈ আপোনাৰ ফিংগাৰপ্ৰিণ্ট ব্যৱহাৰ কৰাৰ বাবে আপুনি ফিংগাৰপ্ৰিণ্ট আনলক পুনৰ ছেট আপ কৰিব লাগিব।"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"ফিংগাৰপ্ৰিণ্ট আনলক ছেট আপ কৰিব পৰা নগ’ল। পুনৰ চেষ্টা কৰিবলৈ ছেটিঙলৈ যাওক।"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"ফে’চ আনলক পুনৰ ছেট আপ কৰক"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"ফে’চ আনলক"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"ফে’চ আনলক ছেট আপ কৰক"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"ফে’চ আনলক পুনৰ ছেট আপ কৰিবলৈ, আপোনাৰ বৰ্তমানৰ মুখাৱয়বৰ মডেলটো মচা হ’ব।\n\nআপোনাৰ ফ’নটো আনলক কৰিবৰ বাবে আপোনাৰ মুখাৱয়ব ব্যৱহাৰ কৰিবলৈ আপুনি এই সুবিধাটো পুনৰ ছেট আপ কৰিব লাগিব।"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"ফে’চ আনলক ছেট আপ কৰিব পৰা নগ’ল। পুনৰ চেষ্টা কৰিবলৈ ছেটিঙলৈ যাওক।"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"ফিংগাৰপ্ৰিণ্ট ছেন্সৰটো স্পৰ্শ কৰক"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"অব্যাহত ৰাখিবলৈ আনলক কৰক চিহ্নটোত টিপক"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"মুখাৱয়ব চিনিব নোৱাৰি। ফিংগাৰপ্ৰিণ্ট ব্যৱহাৰ কৰক।"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -202,7 +218,7 @@
     <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"কৰ্মস্থানৰ প্ৰ\'ফাইলৰ লক স্ক্ৰীন"</string>
     <string name="accessibility_desc_close" msgid="8293708213442107755">"বন্ধ কৰক"</string>
     <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"সম্পূৰ্ণ নিৰৱতা"</string>
-    <string name="accessibility_quick_settings_dnd_alarms_on" msgid="3375848309132140014">"কেৱল এলাৰ্মবোৰৰ বাবে"</string>
+    <string name="accessibility_quick_settings_dnd_alarms_on" msgid="3375848309132140014">"কেৱল এলাৰ্ম"</string>
     <string name="accessibility_quick_settings_dnd" msgid="2415967452264206047">"অসুবিধা নিদিব"</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="8250942386687551283">"ব্লুটুথ।"</string>
     <string name="accessibility_quick_settings_bluetooth_on" msgid="3819082137684078013">"ব্লুটুথ অন হৈ আছে।"</string>
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"অডিঅ’"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"হেডছেট"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ইনপুট"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"শ্ৰৱণ যন্ত্ৰ"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"শ্ৰৱণ যন্ত্ৰ"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"অন কৰি থকা হৈছে…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"স্বয়ং-ঘূৰ্ণন"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"স্বয়ং-ঘূৰ্ণন স্ক্ৰীন"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"মুখাৱয়বৰ জৰিয়তে আনলক কৰা"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"মুখাৱয়ব চিনাক্ত কৰা হৈছে"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"পুনৰ চেষ্টা কৰিবলৈ ওপৰলৈ ছোৱাইপ কৰক"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"ফে’চ আনলক পুনৰ ব্যৱহাৰ কৰি চাবলৈ ওপৰলৈ ছোৱাইপ কৰক"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC ব্যৱহাৰ কৰিবলৈ আনলক কৰক"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"এই ডিভাইচটো আপোনাৰ প্ৰতিষ্ঠানৰ"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"এই ডিভাইচটো <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>ৰ"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"ব্যৱহাৰকাৰীক আঁতৰাবনে?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"এই ব্যৱহাৰকাৰীৰ আটাইবোৰ এপ্ আৰু ডেটা মচা হ\'ব।"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"আঁতৰাওক"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>এ আপোনাৰ স্ক্ৰীনত দৃশ্যমান হোৱা অথবা ৰেকর্ডিং অথবা কাষ্টিঙৰ সময়ত আপোনাৰ ডিভাইচত প্লে\' কৰা আটাইবোৰ তথ্যলৈ এক্সেছ পাব। এইটোত পাছৱর্ড, পৰিশোধৰ সবিশেষ, ফট\', বার্তাসমূহ আৰু আপুনি প্লে\' কৰা অডিঅ\'ৰ দৰে তথ্য অন্তর্ভুক্ত হয়।"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"এই সুবিধাটো প্ৰদান কৰা সেৱাটোৱে আপোনাৰ স্ক্ৰীনত দৃশ্যমান হোৱা অথবা ৰেকর্ডিং অথবা কাষ্টিঙৰ সময়ত আপোনাৰ ডিভাইচত প্লে\' কৰা আটাইবোৰ তথ্যলৈ এক্সেছ পাব। এইটোত পাছৱর্ড, পৰিশোধৰ সবিশেষ, ফট\', বার্তাসমূহ আৰু আপুনি প্লে\' কৰা অডিঅ\'ৰ দৰে তথ্য অন্তর্ভুক্ত হয়।"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"ৰেকর্ডিং অথবা কাষ্টিং আৰম্ভ কৰিবনে?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ৰ জৰিয়তে ৰেকর্ডিং অথবা কাষ্টিং আৰম্ভ কৰিবনে ?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ক শ্বেয়াৰ অথবা ৰেকৰ্ড কৰিবলৈ অনুমতি দিবনে?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"সম্পূৰ্ণ স্ক্ৰীন"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"এটা একক এপ্"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"আপুনি শ্বেয়াৰ কৰা, ৰেকৰ্ড কৰা অথবা কাষ্ট কৰাৰ সময়ত, আপোনাৰ স্ক্ৰীনখনত দৃশ্যমান যিকোনো বস্তু অথবা আপোনাৰ ডিভাইচত প্লে’ কৰা যিকোনো সমললৈ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ৰ এক্সেছ থাকে। গতিকে, পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা অথবা অন্য সংবেদনশীল তথ্যৰ ক্ষেত্ৰত সাৱধান হওক।"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"আপুনি শ্বেয়াৰ কৰা, ৰেকৰ্ড কৰা অথবা কাষ্ট কৰাৰ সময়ত, সেইটো এপত দৃশ্যমান যিকোনো বস্তু অথবা আপোনাৰ ডিভাইচত প্লে’ কৰা যিকোনো সমললৈ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ৰ এক্সেছ থাকে। গতিকে, পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা অথবা অন্য সংবেদনশীল তথ্যৰ ক্ষেত্ৰত সাৱধান হওক।"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"অব্যাহত ৰাখক"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"এটা এপ্ শ্বেয়াৰ অথবা ৰেকৰ্ড কৰক"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"এই এপ্‌টোক শ্বেয়াৰ অথবা ৰেকৰ্ড কৰিবলৈ অনুমতি দিবনে?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"আপুনি শ্বেয়াৰ কৰা, ৰেকৰ্ড কৰা অথবা কাষ্ট কৰাৰ সময়ত, আপোনাৰ স্ক্ৰীনখনত দৃশ্যমান যিকোনো বস্তু অথবা আপোনাৰ ডিভাইচত প্লে’ কৰা যিকোনো সমললৈ এই এপ্‌টোৰ এক্সেছ থাকে। গতিকে, পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা অথবা অন্য সংবেদনশীল তথ্যৰ ক্ষেত্ৰত সাৱধান হওক।"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"আপুনি শ্বেয়াৰ কৰা, ৰেকৰ্ড কৰা অথবা কাষ্ট কৰাৰ সময়ত, সেইটো এপত দৃশ্যমান যিকোনো বস্তু অথবা আপোনাৰ ডিভাইচত প্লে’ কৰা যিকোনো সমললৈ এই এপ্‌টোৰ এক্সেছ থাকে। গতিকে, পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা অথবা অন্য সংবেদনশীল তথ্যৰ ক্ষেত্ৰত সাৱধান হওক।"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>এ আপোনাৰ স্ক্ৰীনত দৃশ্যমান হোৱা অথবা ৰেকৰ্ডিং অথবা কাষ্টিঙৰ সময়ত আপোনাৰ ডিভাইচত প্লে’ কৰা আটাইবোৰ তথ্যলৈ এক্সেছ পাব। এইটোত পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, ফট’, বাৰ্তাসমূহ আৰু আপুনি প্লে’ কৰা অডিঅ’ৰ দৰে তথ্য অন্তৰ্ভুক্ত হয়।"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"ৰেকৰ্ডিং অথবা কাষ্টিং আৰম্ভ কৰিবনে?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"এই সুবিধাটো প্ৰদান কৰা সেৱাটোৱে আপোনাৰ স্ক্ৰীনত দৃশ্যমান হোৱা অথবা ৰেকৰ্ডিং অথবা কাষ্টিঙৰ সময়ত আপোনাৰ ডিভাইচত প্লে’ কৰা আটাইবোৰ তথ্যলৈ এক্সেছ পাব। এইটোত পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, ফট’, বাৰ্তাসমূহ আৰু আপুনি প্লে’ কৰা অডিঅ’ৰ দৰে তথ্য অন্তৰ্ভুক্ত হয়।"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"সম্পূৰ্ণ স্ক্ৰীন"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"এটা একক এপ্"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"এটা এপ্ শ্বেয়াৰ অথবা ৰেকৰ্ড কৰক"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ৰ জৰিয়তে ৰেকৰ্ডিং অথবা কাষ্টিং আৰম্ভ কৰিবনে?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"আপুনি শ্বেয়াৰ কৰা, ৰেকৰ্ড কৰা অথবা কাষ্ট কৰাৰ সময়ত, আপোনাৰ স্ক্ৰীনখনত দৃশ্যমান হোৱা যিকোনো বস্তু অথবা আপোনাৰ ডিভাইচত প্লে’ কৰা যিকোনো সমললৈ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ৰ এক্সেছ থাকে। গতিকে, পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা, ফট’ আৰু অডিঅ’ আৰু ভিডিঅ’ৰ ক্ষেত্ৰত সাৱধান হওক।"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"আপুনি শ্বেয়াৰ কৰা, ৰেকৰ্ড কৰা অথবা কাষ্ট কৰাৰ সময়ত, সেইটো এপত দৃশ্যমান যিকোনো বস্তু অথবা আপোনাৰ ডিভাইচত প্লে’ কৰা যিকোনো সমললৈ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ৰ এক্সেছ থাকে। গতিকে, পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা, ফট’ আৰু অডিঅ’ আৰু ভিডিঅ’ৰ ক্ষেত্ৰত সাৱধান হওক।"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"আৰম্ভ কৰক"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"কাষ্ট কৰিবলৈ আৰম্ভ কৰিবনে?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"আপুনি কাষ্ট কৰাৰ সময়ত, আপোনাৰ স্ক্ৰীনখনত দৃশ্যমান যিকোনো বস্তু অথবা আপোনাৰ ডিভাইচত প্লে’ কৰা যিকোনো সমললৈ Androidৰ এক্সেছ থাকে। গতিকে, পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা, ফট’ আৰু অডিঅ’ আৰু ভিডিঅ’ৰ ক্ষেত্ৰত সাৱধান হওক।"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"আপুনি এটা এপ্ কাষ্ট কৰাৰ সময়ত সেইটো এপত দৃশ্যমান হোৱা যিকোনো বস্তু অথবা আপোনাৰ ডিভাইচত প্লে’ কৰা যিকোনো সমললৈ Androidৰ এক্সেছ থাকে। গতিকে, পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা, ফট’ আৰু অডিঅ’ আৰু ভিডিঅ’ৰ ক্ষেত্ৰত সাৱধান হওক।"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"কাষ্ট কৰিবলৈ আৰম্ভ কৰক"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"শ্বেয়াৰ কৰিবলৈ আৰম্ভ কৰিবনে?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"আপুনি শ্বেয়াৰ কৰা, ৰেকৰ্ড কৰা অথবা কাষ্ট কৰাৰ সময়ত, আপোনাৰ স্ক্ৰীনখনত দৃশ্যমান হোৱা যিকোনো বস্তু অথবা আপোনাৰ ডিভাইচত প্লে’ কৰা যিকোনো সমললৈ Androidৰ এক্সেছ থাকে। গতিকে, পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা, ফট’ আৰু অডিঅ’ আৰু ভিডিঅ’ৰ ক্ষেত্ৰত সাৱধান হওক।"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"আপুনি শ্বেয়াৰ কৰা, ৰেকৰ্ড কৰা অথবা কাষ্ট কৰাৰ সময়ত, সেইটো এপত দৃশ্যমান যিকোনো বস্তু অথবা আপোনাৰ ডিভাইচত প্লে’ কৰা যিকোনো সমললৈ Androidৰ এক্সেছ থাকে। গতিকে, পাছৱৰ্ড, পৰিশোধৰ সবিশেষ, বাৰ্তা, ফট’ আৰু অডিঅ’ আৰু ভিডিঅ’ৰ ক্ষেত্ৰত সাৱধান হওক।"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"আৰম্ভ কৰক"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"আপুনি এপ্‌ সলনি কৰিলে শ্বেয়াৰ কৰাটো পজ হয়"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"তাৰ সলনি এই এপ্‌টো শ্বেয়াৰ কৰক"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"উভতি যাওক"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"এপ্‌ সলনি কৰা"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"আপোনাৰ আইটি প্ৰশাসকে অৱৰোধ কৰিছে"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"ডিভাইচ সম্পৰ্কীয় নীতিয়ে স্ক্ৰীন কেপশ্বাৰ কৰাটো অক্ষম কৰিছে"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"আটাইবোৰ মচক"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"এই ডিভাইচটোত এটা প্ৰমাণপত্ৰ সম্পৰ্কীয় কৰ্তৃপক্ষ ইনষ্টল কৰা হৈছে। আপোনাৰ সুৰক্ষিত নেটৱৰ্কৰ ট্ৰেফিক পৰ্যবেক্ষণ বা সংশোধন কৰা হ\'ব পাৰে।"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"আপোনাৰ প্ৰশাসকে নেটৱৰ্ক লগিং অন কৰিছে, যিয়ে আপোনাৰ ডিভাইচটোত নেটৱৰ্ক ট্ৰেফিক পৰ্যবেক্ষণ কৰে।"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"আপোনাৰ প্ৰশাসকে নেটৱৰ্ক লগিং অন কৰিছে, যিয়ে আপোনাৰ কৰ্মস্থানৰ প্ৰ’ফাইলত ট্ৰেফিক নিৰীক্ষণ কৰে কিন্তু আপোনাৰ ব্যক্তিগত প্ৰ’ফাইলত নকৰে।"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"এই ডিভাইচটো <xliff:g id="VPN_APP">%1$s</xliff:g>ৰ জৰিয়তে ইণ্টাৰনেটৰ সৈতে সংযুক্ত হৈ আছে। ইমেইল আৰু ব্ৰাউজিঙৰ ডেটাকে ধৰি আপোনাৰ নেটৱৰ্ক সম্পৰ্কীয় কাৰ্যকলাপ আপোনাৰ আইটি প্ৰশাসকে দেখা পায়।"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"এই ডিভাইচটো <xliff:g id="VPN_APP">%1$s</xliff:g>ৰ জৰিয়তে ইণ্টাৰনেটৰ সৈতে সংযুক্ত হৈ আছে। ইমেইল আৰু ব্ৰাউজিঙৰ ডেটাকে ধৰি আপোনাৰ নেটৱৰ্ক সম্পৰ্কীয় কাৰ্যকলাপ ভিপিএন প্ৰদানকাৰীয়ে দেখা পায়।"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"এই ডিভাইচটো <xliff:g id="VPN_APP">%1$s</xliff:g>ৰ জৰিয়তে ইণ্টাৰনেটৰ সৈতে সংযুক্ত হৈ আছে। ইমেইল আৰু ব্ৰাউজিঙৰ ডেটাকে ধৰি আপোনাৰ নেটৱৰ্ক সম্পৰ্কীয় কাৰ্যকলাপ আপোনাৰ আইটি প্ৰশাসকে দেখা পায়।"</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"এই ডিভাইচটো <xliff:g id="VPN_APP_0">%1$s</xliff:g> আৰু <xliff:g id="VPN_APP_1">%2$s</xliff:g>ৰ জৰিয়তে ইণ্টাৰনেটৰ সৈতে সংযুক্ত হৈ আছে। ইমেইল আৰু ব্ৰাউজিঙৰ ডেটাকে ধৰি আপোনাৰ নেটৱৰ্ক সম্পৰ্কীয় কাৰ্যকলাপ আপোনাৰ আইটি প্ৰশাসকে দেখা পায়।"</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"আপোনাৰ কৰ্মস্থানৰ এপ্‌সমূহ <xliff:g id="VPN_APP">%1$s</xliff:g>ৰ জৰিয়তে ইণ্টাৰনেটৰ সৈতে সংযুক্ত হৈ আছে। ইমেইল আৰু ব্ৰাউজিঙৰ ডেটাকে ধৰি আপুনি কৰ্মস্থানৰ এপ্‌সমূহত কৰা নেটৱৰ্ক সম্পৰ্কীয় কাৰ্যকলাপ আপোনাৰ আইটি প্ৰশাসক আৰু ভিপিএন প্ৰদানকাৰীয়ে দেখা পায়।"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"আপোনাৰ ব্যক্তিগত এপ্‌সমূহ <xliff:g id="VPN_APP">%1$s</xliff:g>ৰ জৰিয়তে ইণ্টাৰনেটৰ সৈতে সংযুক্ত হৈ আছে। ইমেইল আৰু ব্ৰাউজিঙৰ ডেটাকে ধৰি আপোনাৰ নেটৱৰ্ক সম্পৰ্কীয় কাৰ্যকলাপ আপোনাৰ ভিপিএন প্ৰদানকাৰীয়ে দেখা পায়।"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"অক্ষম কৰক"</string>
     <string name="sound_settings" msgid="8874581353127418308">"ধ্বনি আৰু কম্পন"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ছেটিং"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"নিৰাপদ ভলিউমলৈ কমোৱা হৈছে"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"চুপাৰিছ কৰাতকৈ দীঘলীয়া সময়ৰ বাবে ভলিউম উচ্চ হৈ আছিল"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"ভলিউম সুৰক্ষিত স্তৰলৈ কম কৰা হৈছে"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"চুপাৰিছ কৰাতকৈ দীঘলীয়া সময়ৰ বাবে হেডফ’নৰ ভলিউম উচ্চ হৈ আছে"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"হেডফ’নৰ ভলিউমে এই সপ্তাহৰ বাবে সুৰক্ষিত সীমা অতিক্ৰম কৰিছে"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"শুনি থাকক"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"ভলিউম কমাওক"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"এপ্‌টো পিন কৰা আছে"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"এই কাৰ্যই আপুনি আনপিন নকৰালৈকে ইয়াক দেখা পোৱা অৱস্থাত ৰাখে। আনপিন কৰিবলৈ \'পিছলৈ যাওক\' আৰু \'অৱলোকন\'-ত স্পৰ্শ কৰি থাকক।"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"এই কাৰ্যই আপুনি আনপিন নকৰালৈকে ইয়াক দেখা পোৱা অৱস্থাত ৰাখে। আনপিন কৰিবলৈ পিছলৈ যাওক আৰু হ\'মত স্পৰ্শ কৰি সেঁচি ধৰক।"</string>
@@ -712,7 +742,7 @@
   </string-array>
   <string-array name="battery_options">
     <item msgid="7714004721411852551">"সদায় শতাংশত দেখুৱাব"</item>
-    <item msgid="3805744470661798712">"চ্চাৰ্জ কৰি থকাৰ সময়ত শতাংশ দেখুৱাওক (ডিফ\'ল্ট)"</item>
+    <item msgid="3805744470661798712">"চাৰ্জ কৰি থকাৰ সময়ত শতাংশ দেখুৱাওক (ডিফ\'ল্ট)"</item>
     <item msgid="8619482474544321778">"এই আইকনটো নেদেখুৱাব"</item>
   </string-array>
     <string name="tuner_low_priority" msgid="8412666814123009820">"কম গুৰুত্বপূৰ্ণ জাননীৰ আইকনসমূহ দেখুৱাওক"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"পাৱাৰ মেনু"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g>ৰ পৃষ্ঠা <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"লক স্ক্ৰীন"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"আপোনাৰ ফ\'নটো গৰম হোৱাৰ কাৰণে অফ কৰা হৈছিল"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"আপোনাৰ ফ’নটো এতিয়া স্বাভাৱিকভাৱে চলি আছে।\nঅধিক তথ্যৰ বাবে টিপক"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"আপোনাৰ ফ\'নটো অত্যধিক গৰম হোৱাৰ বাবে ইয়াক ঠাণ্ডা কৰিবলৈ অফ কৰা হৈছিল। আপোনাৰ ফ\'নটো এতিয়া স্বাভাৱিকভাৱে চলি আছে।\n\nআপোনাৰ ফ\'নটো গৰম হ\'ব পাৰে, যদিহে আপুনি:\n	• ফ\'নটোৰ হাৰ্ডৱেৰ অত্যধিক মাত্ৰাত ব্যৱহাৰ কৰা এপ্‌সমূহ চলালে (যেনে, ভিডিঅ\' গেইম, ভিডিঅ\', দিক্-নিৰ্দেশনা এপ্‌সমূহ)\n	• খুউব ডাঙৰ আকাৰৰ ফাইল আপল\'ড বা ডাউনল’ড কৰিলে\n	• আপোনাৰ ফ\'নটো উচ্চ তাপমাত্ৰাৰ পৰিৱেশত ব্যৱহাৰ কৰিলে"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"যত্ন লোৱাৰ পদক্ষেপসমূহ চাওক"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"ফ\'নটো গৰম হ\'বলৈ ধৰিছে"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"ফ’নটো ঠাণ্ডা হৈ থকাৰ সময়ত কিছুমান সুবিধা উপলব্ধ নহয়।\nঅধিক তথ্যৰ বাবে টিপক"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"আপোনাৰ ফ\'নটোৱে নিজে নিজে ঠাণ্ডা হ\'বলৈ স্বয়ংক্ৰিয়ভাৱে চেষ্টা কৰিব। আপুনি ফ\'নটো ব্যৱহাৰ কৰি থাকিব পাৰে কিন্তু ই লাহে লাহে চলিব পাৰে।\n\nফ\'নটো সম্পূৰ্ণভাৱে ঠাণ্ডা হোৱাৰ পাছত ই আগৰ নিচিনাকৈয়েই চলিব।"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"যত্ন লোৱাৰ পদক্ষেপসমূহ চাওক"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"আপোনাৰ ডিভাইচটো আনপ্লাগ কৰক"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"আপোনাৰ ডিভাইচটো চাৰ্জিং প’ৰ্টৰ ওচৰত গৰম হৈছে। যদি এইটো কোনো চার্জাৰ অথবা ইউএছবিৰ সহায়ক সামগ্ৰীৰ সৈতে সংযুক্ত হৈ আছে, ইয়াক আনপ্লাগ কৰক আৰু কে’বলডালো গৰম হ\'ব পাৰে, গতিকে যত্ন লওক।"</string>
@@ -839,8 +863,9 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"পূৰ্ণ স্ক্ৰীন বিবৰ্ধন কৰক"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"স্ক্ৰীনৰ কিছু অংশ বিবৰ্ধন কৰক"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"বিবৰ্ধন কৰাৰ ছেটিং খোলক"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"বিবৰ্ধনৰ ছেটিং বন্ধ কৰক"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"আকাৰ সলনি কৰিবলৈ চুককেইটা টানি আনি এৰক"</string>
-    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"কৰ্ণডালৰ দিশত স্ক্ৰ’ল কৰাৰ সুবিধা"</string>
+    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"কোণীয়াকৈ স্ক্ৰ’ল কৰাৰ অনুমতি দিয়ক"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"আকাৰ সলনি কৰক"</string>
     <string name="accessibility_change_magnification_type" msgid="666000085077432421">"বিবৰ্ধনৰ প্ৰকাৰ সলনি কৰক"</string>
     <string name="accessibility_magnification_end_resizing" msgid="4881690585800302628">"আকাৰ সলনি কৰাটো অন্ত পেলাওক"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"সাধ্য সুবিধাসমূহ খুলিবলৈ টিপক। ছেটিঙত এই বুটামটো কাষ্টমাইজ অথবা সলনি কৰক।\n\n"<annotation id="link">"ছেটিং চাওক"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"বুটামটোক সাময়িকভাৱে লুকুৱাবলৈ ইয়াক একেবাৰে কাষলৈ লৈ যাওক"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"আনডু কৰক"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> টা শ্বৰ্টকাট আঁতৰোৱা হ’ল"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g>ৰ শ্বৰ্টকাট আঁতৰোৱা হ’ল"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# টা শ্বৰ্টকাট আঁতৰোৱা হ’ল}one{# টা শ্বৰ্টকাট আঁতৰোৱা হ’ল}other{# টা শ্বৰ্টকাট আঁতৰোৱা হ’ল}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"শীৰ্ষৰ বাওঁফালে নিয়ক"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"শীৰ্ষৰ সোঁফালে নিয়ক"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"অপ্ৰিয়"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> নম্বৰ অৱস্থানলৈ স্থানান্তৰিত কৰক"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"নিয়ন্ত্ৰণসমূহ"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"দ্ৰুতভাৱে এক্সেছ কৰিবলৈ ডিভাইচৰ নিয়ন্ত্ৰণসমূহ বাছনি কৰক"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"নিয়ন্ত্ৰণসমূহ পুনৰ সজাবলৈ ধৰি ৰাখক আৰু টানি আনি এৰক"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"আটাইবোৰ নিয়ন্ত্ৰণ আঁতৰোৱা হৈছে"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"সালসলনিসমূহ ছেভ নহ’ল"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"অন্য এটা পিন ব্যৱহাৰ কৰি চাওক"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g>ৰ বাবে সলনি কৰাটো নিশ্চিত কৰক"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"অধিক চাবলৈ ছোৱাইপ কৰক"</string>
+    <string name="retry_face" msgid="416380073082560186">"পুনৰ মুখমণ্ডলৰ বিশ্বাসযোগ্যতাৰ প্ৰমাণীকৰণ কৰিবলৈ চেষ্টা কৰক"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"চুপাৰিছসমূহ ল’ড কৰি থকা হৈছে"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"মিডিয়া"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ বাবে এই মিডিয়া নিয়ন্ত্ৰণটো লুকুৱাবনে?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"ছেটিং"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g>ত <xliff:g id="ARTIST_NAME">%2$s</xliff:g>ৰ <xliff:g id="SONG_NAME">%1$s</xliff:g> গীতটো প্লে’ হৈ আছে"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>ৰ <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> চলি আছে"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"প্লে’ কৰক"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"পজ কৰক"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"পূৰ্বৱৰ্তী ট্ৰেক"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"স্পীকাৰ আৰু ডিছপ্লে’"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"পৰামৰ্শ হিচাপে পোৱা ডিভাইচ"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"মিডিয়া অন্য ডিভাইচলৈ স্থানান্তৰ কৰিবলৈ আপোনাৰ শ্বেয়াৰ কৰা ছেশ্বনটো বন্ধ কৰক"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"বন্ধ কৰক"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"সম্প্ৰচাৰ কৰাটোৱে কেনেকৈ কাম কৰে"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"সম্প্ৰচাৰ"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"সমিল ব্লুটুথ ডিভাইচৰ সৈতে আপোনাৰ নিকটৱৰ্তী স্থানত থকা লোকসকলে আপুনি সম্প্ৰচাৰ কৰা মিডিয়াটো শুনিব পাৰে"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"ছেভ কৰিব নোৱাৰি। পুনৰ চেষ্টা কৰক।"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"ছেভ কৰিব নোৱাৰি।"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"অতি কমেও ৪ টা বৰ্ণ ব্যৱহাৰ কৰক"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"১৬ টাতকৈ কম বৰ্ণ ব্যৱহাৰ কৰক"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g> টাতকৈ কম বৰ্ণ ব্যৱহাৰ কৰক"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"বিল্ডৰ নম্বৰ"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"ক্লিপব’ৰ্ডলৈ বিল্ডৰ নম্বৰ প্ৰতিলিপি কৰা হ’ল।"</string>
     <string name="basic_status" msgid="2315371112182658176">"বাৰ্তালাপ খোলক"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"আপোনাৰ বেটাৰী মিটাৰ পঢ়োঁতে সমস্যা হৈছে"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"অধিক তথ্যৰ বাবে টিপক"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"কোনো এলাৰ্ম ছেট কৰা হোৱা নাই"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"স্ক্ৰীন লকটো দিয়ক"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"ফিংগাৰপ্ৰিণ্ট ছেন্সৰ"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"বিশ্বাসযোগ্যতা প্ৰমাণ কৰক"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"ডিভাইচ আনলক কৰক"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistantএ শুনি আছে"</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="note_task_button_label" msgid="8718616095800343136">"টোকাগ্ৰহণ"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"টোকা গ্ৰহণ কৰা"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"টোকা গ্ৰহণ কৰা, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"অধিক জানক"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"<xliff:g id="URL">%s</xliff:g>ত অধিক জানক"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> খোলক"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• এপ্‌টো ছেট আপ কৰা হৈছে"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Walletত অতি কমেও এখন কাৰ্ড যোগ দিয়া হৈছে"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• এটা কেমেৰা এপ্ ইনষ্টল কৰক"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• এপ্‌টো ছেট আপ কৰা হৈছে"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• অতি কমেও এটা ডিভাইচ উপলব্ধ"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Wallet এপ্‌টোক এটা শ্বৰ্টকাট হিচাপে যোগ দিবলৈ, এপ্‌টো ইনষ্টল কৰি থোৱাটো নিশ্চিত কৰক"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Wallet এপ্‌টোক এটা শ্বৰ্টকাট হিচাপে যোগ দিবলৈ, কমেও এখন কাৰ্ড যোগ দিয়াটো নিশ্চিত কৰক"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"কিউআৰ ক’ড স্কেনাৰক এটা শ্বৰ্টকাট হিচাপে যোগ দিবলৈ, কেমেৰা এপ্‌টো ইনষ্টল কৰি থোৱাটো নিশ্চিত কৰক"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home এপ্‌টোক এটা শ্বৰ্টকাট হিচাপে যোগ দিবলৈ, এপ্‌টো ইনষ্টল কৰি থোৱাটো নিশ্চিত কৰক"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• অতি কমেও এটা ডিভাইচ উপলব্ধ"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"টোকা গ্ৰহণৰ শ্বৰ্টকাটটো ব্যৱহাৰ কৰিবলৈ এটা ডিফ’ল্ট টোকা গ্ৰহণৰ এপ্‌ বাছনি কৰক"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"এপ্‌ বাছনি কৰক"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"শ্বৰ্টকাটটোত স্পৰ্শ কৰি ধৰি ৰাখক"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"বাতিল কৰক"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"এতিয়াই স্ক্ৰীন সলনি কৰক"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"আপোনাৰ ষ্টাইলাছ এটা চাৰ্জাৰৰ সৈতে সংযোগ কৰক"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"ষ্টাইলাছৰ বেটাৰী কম আছে"</string>
     <string name="video_camera" msgid="7654002575156149298">"ভিডিঅ’ কেমেৰা"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"এই প্ৰ’ফাইলৰ পৰা কল কৰিব নোৱাৰি"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"আপোনাৰ কৰ্মস্থানৰ নীতিয়ে আপোনাক কেৱল কৰ্মস্থানৰ প্ৰ’ফাইলৰ পৰা ফ’ন কল কৰিবলৈ দিয়ে"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"ব্যক্তিগত এপৰ পৰা বাৰ্তা পঠিয়াব নোৱাৰি"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"আপোনাৰ প্ৰতিষ্ঠানে আপোনাক কেৱল কাম সম্পৰ্কীয় এপ্‌সমূহৰ পৰা কল কৰিবলৈ অনুমতি দিয়ে"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"কৰ্মস্থানৰ প্ৰ’ফাইললৈ সলনি কৰক"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"বন্ধ কৰক"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"কাম সম্পৰ্কীয় এটা ফ’ন এপ্ ইনষ্টল কৰক"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"বাতিল কৰক"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"লক স্ক্ৰীন কাষ্টমাইজ কৰক"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"লক স্ক্ৰীন কাষ্টমাইজ কৰিবলৈ আনলক কৰক"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"ৱাই-ফাই উপলব্ধ নহয়"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"অগ্ৰাধিকাৰ দিয়া ম’ড অন আছে"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistantএ আপোনাৰ কথা শুনি আছে"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"ছেটিঙত টোকাৰ ডিফ’ল্ট এপ্ ছেট কৰক"</string>
+    <string name="install_app" msgid="5066668100199613936">"এপ্‌টো ইনষ্টল কৰক"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"মাইক্ৰ’ফ’ন আৰু কেমেৰা"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"শেহতীয়া এপৰ ব্যৱহাৰ"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"শেহতীয়া এক্সেছ চাওক"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"কৰা হ’ল"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"বিস্তাৰ কৰক আৰু বিকল্পসমূহ দেখুৱাওক"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"সংকোচন কৰক"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"এই এপ্‌টো বন্ধ কৰক"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> বন্ধ কৰা হৈছে"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"সেৱা পৰিচালনা কৰক"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"এক্সেছ পৰিচালনা কৰক"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"ফ’ন কলত ব্যৱহাৰ কৰি থকা হৈছে"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"শেহতীয়াকৈ ফ’ন কলত ব্যৱহাৰ কৰা হৈছে"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ ব্যৱহাৰ কৰি আছে"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"শেহতীয়াকৈ <xliff:g id="APP_NAME">%1$s</xliff:g>এ ব্যৱহাৰ কৰিছে"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)এ ব্যৱহাৰ কৰি আছে"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"শেহতীয়াকৈ <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)এ ব্যৱহাৰ কৰিছে"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)এ ব্যৱহাৰ কৰি আছে"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"শেহতীয়াকৈ <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)এ ব্যৱহাৰ কৰিছে"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-as/strings_tv.xml b/packages/SystemUI/res/values-as/strings_tv.xml
deleted file mode 100644
index ec37d53..0000000
--- a/packages/SystemUI/res/values-as/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"ভিপিএন সংযোগ হৈ আছে"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"ভিপিএনৰ সংযোগ বিচ্ছিন্ন হৈছে"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g>ৰ জৰিয়তে"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"জাননী"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"কোনো জাননী নাই"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"মাইক্ৰ’ফ’নটোৱে ৰেক’ৰ্ড কৰি আছে"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"কেমেৰাটোৱে ৰেক’ৰ্ড কৰি আছে"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"কেমেৰা আৰু মাইক্ৰ’ফ’নটোৱে ৰেক’ৰ্ড কৰি আছে"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"মাইক্ৰ’ফ’নটোৱে ৰেক’ৰ্ড কৰাটো বন্ধ কৰিছে"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"কেমেৰাটোৱে ৰেক’ৰ্ড কৰাটো বন্ধ কৰিছে"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"কেমেৰা আৰু মাইক্ৰ’ফ’নটোৱে ৰেক’ৰ্ড কৰাটো বন্ধ কৰিছে"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"স্ক্ৰীন ৰেকৰ্ডিং আৰম্ভ কৰা হৈছে"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"স্ক্ৰীন ৰেকৰ্ডিং বন্ধ হৈছে"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index c30b283..85220a6 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB-ni aktiv edin"</string>
     <string name="learn_more" msgid="4690632085667273811">"Ətraflı məlumat"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Skrinşot"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock deaktiv edilib"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Uzaqdan kiliddən çıxarma deaktiv edilib"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"şəkil göndərdi"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Skrinşot yadda saxlanır..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"İş profili skrinşotu saxlanılır…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> bu skrinşotu aşkarladı."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> və digər açıq tətbiqlər bu skrinşotu aşkarladı."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Qeydə əlavə edin"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Ekran Yazıcısı"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Ekran yazıcısı"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Ekran çəkilişi emal edilir"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ekranın video çəkimi ərzində silinməyən bildiriş"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Yazmağa başlanılsın?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Ekranda görünən və ya cihazda oxudulan şəxsi məlumat (parol, bank hesabı, mesaj, fotoşəkil və sair) videoyazıya düşə bilər."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Bütün ekranı qeydə alın"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Bir tətbiqi qeydə alın"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Qeydə aldığınız zaman Android ekranınızda görünən və ya cihazınızda oxudulan hər şeyə giriş edə bilir. Odur ki, parollar, ödəniş detalları, mesajlar və ya digər həssas məlumatlarla bağlı diqqətli olun."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Tətbiqi qeydə aldığınız zaman Android həmin tətbiqdə göstərilən və ya oxudulan hər şeyə giriş edə bilir. Odur ki, parollar, ödəniş detalları, mesajlar və ya digər həssas məlumatlarla bağlı diqqətli olun."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Qeydə almağa başlayın"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Qeydəalma başladılsın?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Qeydə aldıqda Android-in ekranda görünən və ya cihazda oxudulan məlumatlara girişi olur. Parol, ödəniş detalları, mesaj, foto, habelə audio və video kimi məlumatlarla bağlı diqqətli olun."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Tətbiq qeydə aldıqda Android-in həmin tətbiqdə göstərilən və ya oxudulan məlumatlara girişi olur. Parol, ödəniş detalları, mesaj, foto, habelə audio və video kimi məlumatlarla bağlı diqqətli olun."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Qeydə almağa başlayın"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Audio yazın"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Cihaz audiosu"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Cihazınızdan gələn musiqi, zənglər və zəng melodiyaları kimi səslər"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Cihaz audiosu və mikrofon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Başlayın"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Başlayın"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Ekran yazılır"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Ekran və audio yazılır"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Ekrana toxunuş göstərilsin"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Paylaşın"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Ekran çəkilişi yadda saxlanıldı"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Baxmaq üçün toxunun"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Ekranın video çəkiminin silinməsi zamanı xəta baş verdi"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Ekran çəkimini yadda saxlayarkən xəta oldu"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Ekranın yazılması ilə bağlı xəta"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Tam ekran rejimi"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Çıxmaq üçün yuxarıdan aşağı sürüşdürün."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Anladım"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Geri"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Ana səhifə"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menyu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Üz doğrulandı"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Təsdiqləndi"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tamamlamaq üçün \"Təsdiq edin\" seçiminə toxunun"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Üzlə kilidi açılıb. \"Kilidi aç\" ikonasına basıb davam edin."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Üz ilə kiliddən çıxarılıb"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Üz ilə kiliddən çıxarılıb. Davam etmək üçün basın."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Üz tanınıb. Davam etmək üçün basın."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Üz tanınıb. \"Kiliddən çıxar\" ikonasına basıb davam edin."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Doğrulandı"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"İdentifikasiyanı ləğv edin"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN istifadə edin"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Model istifadə edin"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Parol istifadə edin"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Növbəti cəhddə yanlış model daxil etsəniz, iş profili və datası silinəcək."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Növbəti cəhddə yanlış PIN daxil etsəniz, iş profili və datası silinəcək."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Növbəti cəhddə yanlış parol daxil etsəniz, iş profili və datası silinəcək."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Ayarlayın"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"İndi yox"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Təhlükəsizlik və performansı təkmilləşdirmək üçün tələb edilir"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Barmaqla Kiliddən Açmanı yenidən ayarlayın"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Barmaqla Kiliddən Açma"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Barmaqla Kiliddən Açmanı ayarlayın"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Üz ilə Kiliddən Açmanı yenidən ayarlamaq üçün cari barmaq izi şəkil və modelləri silinəcək.\n\nSilindikdən sonra telefonu barmaq izi ilə kiliddən çıxarmaq və ya kimliyi doğrulamaq üçün Barmaqla Kiliddən Açmanı yenidən ayarlamalısınız."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Barmaqla Kiliddən Açmanı yenidən ayarlamaq üçün cari barmaq izi şəkil və modelləri silinəcək.\n\nSilindikdən sonra telefonu barmaq izi ilə kiliddən çıxarmaq və ya kimliyi doğrulamaq üçün Barmaqla Kiliddən Açmanı yenidən ayarlamalısınız."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Barmaqla kiliddən açma ayarlanmadı. Yenidən cəhd etmək üçün Ayarlara keçin."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Üz ilə Kiliddən Açmanı yenidən ayarlayın"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Üz tanıma kilidi"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Üz tanıma kilidini qurun"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Üz ilə Kiliddən Açmanı yenidən ayarlamaq üçün cari üz modeli silinəcək.\n\nTelefonu üz ilə kiliddən çıxarmaq üçün bu funksiyanı yenidən ayarlamalısınız."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Üz ilə Kiliddən Açma ayarlanmadı. Yenidən cəhd etmək üçün Ayarlara keçin."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Barmaq izi sensoruna klikləyin"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"\"Kiliddən çıxarın\" ikonasını basaraq davam edin"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Tanımaq olmur. Barmaq izini işlədin."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Qulaqlıq"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Giriş"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Eşitmə cihazları"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Eşitmə aparatları"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aktiv edilir..."</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Üz ilə kiliddən çıxarılıb"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Üz tanınıb"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Yenidən cəhd etmək üçün yuxarı sürüşdürün"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Yuxarı sürüşdürməklə Üz ilə Kiliddən Açmanı yenidən sınayın"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC istifadə etmək üçün kiliddən çıxarın"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Bu cihaz təşkilatınıza məxsusdur"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Bu cihaz <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> təşkilatına məxsusdur"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tətbiqinin yazma və ya yayım zamanı ekranda görünən və ya cihazdan oxudulan bütün məlumatlara girişi olacaq. Bura parollar, ödəniş detalları, fotolar, mesajlar və oxudulan audio kimi məlumatlar daxildir."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Bu funksiyanı təmin edən xidmətin yazma və ya yayım zamanı ekranda görünən və ya cihazdan oxudulan bütün bilgilərə girişi olacaq. Buraya parollar, ödəniş detalları, fotolar, mesajlar və oxudulan audio kimi məlumatlar daxildir."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Yazma və ya yayımlama başladılsın?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ilə yazma və ya yayımlama başladılsın?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tətbiqinə paylaşmaq və ya qeydə almaq üçün icazə verilsin?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Bütün ekran"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Vahid tətbiq"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Paylaşdığınız, qeydə aldığınız və ya yayımladığınız zaman <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tətbiqi ekranınızda görünən və ya cihazınızda oxudulan hər şeyə giriş edə bilir. Odur ki, parollar, ödəniş detalları, mesajlar və ya digər həssas məlumatlarla bağlı diqqətli olun."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Paylaşdığınız, qeydə aldığınız və ya yayımladığınız zaman <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tətbiqi həmin tətbiqdə göstərilən və ya oxudulan hər şeyə giriş edə bilir. Odur ki, parollar, ödəniş detalları, mesajlar və ya digər həssas məlumatlarla bağlı diqqətli olun."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Davam edin"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Tətbiqi paylaşın və ya qeydə alın"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Bu tətbiqə paylaşmağa və ya yazmağa icazə verilsin?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Paylaşdığınız, yazdığınız və ya yayımladığınız zaman bu tətbiq ekranınızda görünən və ya cihazınızda oxudulan hər şeyə giriş edə bilir. Odur ki, parollar, ödəniş detalları, mesajlar və ya digər həssas məlumatlarla bağlı diqqətli olun."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Paylaşdığınız, qeydə aldığınız və ya yayımladığınız zaman bu tətbiq həmin tətbiqdə göstərilən və ya oxudulan hər şeyə giriş edə bilir. Odur ki, parollar, ödəniş detalları, mesajlar və ya digər həssas məlumatlarla bağlı diqqətli olun."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> qeydəalma və ya yayım zamanı ekranda görünən, yaxud cihazda oxudulan məlumatlara giriş edə biləcək. Bura parol, ödəniş detalları, foto, mesaj və oxudulan audio kimi məlumatlar daxildir."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Qeydəalma və ya yayım başladılsın?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Bu funksiyanı təmin edən xidmətin qeydəalma və ya yayım zamanı ekranda görünən, yaxud cihazda oxudulan məlumatlara girişi olacaq. Bura parol, ödəniş detalları, foto, mesaj və oxudulan audio kimi məlumatlar daxildir."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Bütün ekran"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Tək tətbiq"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Tətbiq paylaşın və ya qeydə alın"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ilə qeydəalma və ya yayım başladılsın?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Paylaşım, qeydəalma və ya yayım zamanı <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ekranda görünən, yaxud cihazda oxudulan məlumatlara giriş edə bilir. Parol, ödəniş detalları, mesaj, foto, habelə audio və video kimi məlumatlarla bağlı diqqətli olun."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Tətbiq paylaşdıqda, qeydə aldıqda və ya yayımladıqda <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> həmin tətbiqdə göstərilən, yaxud oxudulan məlumatlara giriş edə bilir. Parol, ödəniş detalları, mesaj, foto, habelə audio və video kimi məlumatlarla bağlı diqqətli olun."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Başlayın"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Yayım başladılsın?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Yayım zamanı Android-in ekranda görünən, yaxud cihazda oxudulan məlumatlara girişi olur. Parol, ödəniş detalları, mesaj, foto, habelə audio və video kimi məlumatlarla bağlı diqqətli olun."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Tətbiq yayımladıqda Android-in həmin tətbiqdə göstərilən və ya oxudulan məlumatlara girişi olur. Parol, ödəniş detalları, mesaj, foto, habelə audio və video kimi məlumatlarla bağlı diqqətli olun."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Yayıma başlayın"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Paylaşım başladılsın?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Paylaşım, qeydəalma və ya yayım zamanı Android-in ekranda görünən, yaxud cihazda oxudulan məlumatlara girişi olur. Parol, ödəniş detalları, mesaj, foto, habelə audio və video kimi məlumatlarla bağlı diqqətli olun."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Tətbiq paylaşdıqda, qeydə aldıqda və ya yayımladıqda Android-in həmin tətbiqdə göstərilən, yaxud oxudulan məlumatlara girişi olur. Parol, ödəniş detalları, mesaj, foto, habelə audio və video kimi məlumatlarla bağlı diqqətli olun."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Başlayın"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Tətbiqləri dəyişdikdə paylaşım durdurulur"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Bu tətbiqi paylaşın"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Geri dəyişin"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Tətbiq keçirici"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"İT admininiz tərəfindən bloklanıb"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Ekran çəkimi cihaz siyasəti ilə deaktiv edilib"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Hamısını silin"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Bu cihazda sertifikat səlahiyyəti quraşdırıldı. Təhlükəsiz şəbəkə ötürülməsinə nəzarət edilə və ya dəyişdirilə bilər."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Admin cihazda şəbəkə ötürülməsinə nəzarət edən şəbəkə qeydlərini aktiv etdi."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Admininiz şəxsi profilinizdəki deyil, iş profilinizdəki trafikə nəzarət edən şəbəkə qeydiyyatını aktiv edib."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Bu cihaz <xliff:g id="VPN_APP">%1$s</xliff:g> vasitəsilə internetə qoşulub. E-məktublar və baxış datası daxil olmaqla, iş tətbiqlərindəki şəbəkə fəaliyyətiniz İT admininiz görünür."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Bu cihaz <xliff:g id="VPN_APP">%1$s</xliff:g> ilə internetə qoşulub. VPN provayderi sizin e-məktub və baxış datanız daxil olmaqla şəbəkə fəaliyyətinizi görür."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Bu cihaz <xliff:g id="VPN_APP">%1$s</xliff:g> ilə internetə qoşulub. IT admini e-məktub və baxış datası daxil olmaqla şəbəkə fəaliyyətini görür."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Bu cihaz <xliff:g id="VPN_APP_0">%1$s</xliff:g> və <xliff:g id="VPN_APP_1">%2$s</xliff:g> vasitəsilə internetə qoşulub. E-məktublar və baxış datası daxil olmaqla, iş tətbiqlərindəki şəbəkə fəaliyyətiniz İT admininiz görünür."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"İş tətbiqləriniz <xliff:g id="VPN_APP">%1$s</xliff:g> vasitəsilə internetə qoşulub. E-məktublar və baxış datası daxil olmaqla, iş tətbiqlərindəki şəbəkə fəaliyyətiniz İT admininiz və VPN provayderinizə görünür."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Şəxsi tətbiqləriniz <xliff:g id="VPN_APP">%1$s</xliff:g> vasitəsilə internetə qoşulub. E-məktublar və baxış datası daxil olmaqla, iş tətbiqlərindəki şəbəkə fəaliyyətiniz VPN provayderinizə görünür."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"deaktiv edin"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Səs və vibrasiya"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Ayarlar"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Təhlükəsiz səs səviyyəsinə azaldıldı"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Səs səviyyəsi tövsiyə ediləndən uzun müddət yüksək olub"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Səs təhlükəsiz səviyyəyə azaldıldı"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Qulaqlığın səsi tövsiyə ediləndən uzun müddət yüksək olub"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Bu həftə qulaqlığın səsi təhlükəsiz limiti keçib"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Dinləməyə davam edin"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Səsi azaldın"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Tətbiq bərkidilib"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Sancaq götürülənə qədər bu görünəcək. Sancağı götürmək üçün Geri və İcmal düymələrinə basıb saxlayın."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"\"Geri\" və \"Əsas ekran\" düymələrinin davamlı basılması ilə çıxarılana qədər tətbiq göz önündə qalır."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Qidalanma düyməsi menyusu"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g> səhifədən <xliff:g id="ID_1">%1$d</xliff:g> səhifə"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Ekran kilidi"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"İstiliyə görə telefon söndü"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Telefonunuz indi normal işləyir.\nƏtraflı məlumat üçün toxunun"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefon çox isti idi və soyumaq üçün söndü. Hazırda telefon normal işləyir.\n\n Telefon bu hallarda çox isti ola bilər:\n 	• Çox resurslu tətbiq istifadə etsəniz (oyun, video və ya naviqasiya tətbiqi kimi)\n	• Böyük həcmli fayl endirsəniz və ya yükləsəniz\n	• Telefonu yüksək temperaturda istifadə etsəniz"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Ehtiyat tədbiri mərhələlərinə baxın"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefon qızmağa başlayır"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Telefon soyuyana kimi bəzi funksiyalar məhdudlaşdırılır.\nƏtraflı məlumat üçün toxunun"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Telefonunuz avtomatik olaraq soyumağa başlayacaq. Telefon istifadəsinə davam edə bilərsiniz, lakin sürəti yavaşlaya bilər.\n\nTelefonunuz soyuduqdan sonra normal işləyəcək."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Ehtiyat tədbiri mərhələlərinə baxın"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Cihazınızı ayırın"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Cihazınız şarj portunun yaxınlığında qızmağa başlayır. Şarj cihazına və ya USB aksesuarına qoşulubsa, onu ayırın və diqqətli olun, çünki kabel də qıza bilər."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Tam ekranı böyüdün"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ekran hissəsinin böyüdülməsi"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Böyütmə ayarlarını açın"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Böyütmə ayarlarını bağlayın"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Ölçüsünü dəyişmək üçün küncündən sürüşdürün"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Diaqonal sürüşdürməyə icazə verin"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Ölçüsünü dəyişin"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"sevimlilərdən silin"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> mövqeyinə keçirin"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Nizamlayıcılar"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Cəld daxil olmaq üçün cihaz idarəetmələri seçin"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Vidcetləri daşıyaraq yerini dəyişin"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Kontrol vidcetləri silindi"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Dəyişikliklər yadda saxlanmadı"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Başqa PIN\'i yoxlayın"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> üzrə dəyişikliyi təsdiq edin"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Digərlərini görmək üçün sürüşdürün"</string>
+    <string name="retry_face" msgid="416380073082560186">"Üz identifikasiyasını təkrar sınayın"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Tövsiyələr yüklənir"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün bu media nizamlayıcısı gizlədilsin?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Ayarlar"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> tərəfindən <xliff:g id="SONG_NAME">%1$s</xliff:g> <xliff:g id="APP_LABEL">%3$s</xliff:g> tətbiqindən oxudulur"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> işləyir"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Oxudun"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Durdurun"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Əvvəlki trek"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Dinamiklər &amp; Displeylər"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Təklif olunan Cihazlar"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Medianı başqa cihaza köçürmək üçün paylaşılan sessiyanı dayandırın"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Dayandırın"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Yayım necə işləyir"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Yayım"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Uyğun Bluetooth cihazları olan yaxınlığınızdakı insanlar yayımladığınız medianı dinləyə bilər"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Yadda saxlamaq mümkün deyil. Yenə cəhd edin."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Yadda saxlamaq mümkün deyil."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Ən azı 4 simvoldan istifadə edin"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Maksimum 16 simvoldan istifadə edin"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Maksimum <xliff:g id="LENGTH">%1$d</xliff:g> simvol istifadə edin"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Montaj nömrəsi"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Versiya nömrəsi mübadilə buferinə kopyalandı."</string>
     <string name="basic_status" msgid="2315371112182658176">"Açıq söhbət"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Batareya ölçüsünü oxuyarkən problem yarandı"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Ətraflı məlumat üçün toxunun"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Siqnal ayarlanmayıb"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ekran kilidi daxil edin"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Barmaq izi sensoru"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"doğrulayın"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"cihaz daxil edin"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistent dinləyir"</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="note_task_button_label" msgid="8718616095800343136">"Qeyd tutma"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Qeydgötürmə"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Qeydgötürmə, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Ətraflı məlumat"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Ətraflı məlumat: <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> tətbiqini açın"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Tətbiq ayarlanmalıdır"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Pulqabına ən azı bir kart əlavə edilməlidir"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Kamera tətbiqini quraşdırın"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Tətbiq ayarlanmalıdır"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Ən azı bir cihaz əlçatandır"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Pulqabı tətbiqini qısayol kimi əlavə etmək üçün tətbiq quraşdırılmalıdır"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Pulqabı tətbiqini qısayol kimi əlavə etmək üçün kart əlavə edilməlidir"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR kod skanerini qısayol kimi əlavə etmək üçün kamera tətbiqi quraşdırılmalıdır"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home tətbiqini qısayol kimi əlavə etmək üçün tətbiq quraşdırılmalıdır"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Ən azı bir cihaz əlçatandır"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Qeydgötürmə qısayolu üçün defolt qeyd tətbiqi seçin"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Tətbiq seçin"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Qısayola toxunub saxlayın"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Ləğv edin"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"İndi ekranları dəyişin"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Qələmi adapterə qoşun"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Qələm enerjisi azdır"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Bu profildən zəng etmək mümkün deyil"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"İş siyasətiniz yalnız iş profilindən telefon zəngləri etməyə imkan verir"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Şəxsi tətbiqdən zəng etmək olmur"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Təşkilat yalnız iş tətbiqindən zəng etməyə icazə verir"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"İş profilinə keçin"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Bağlayın"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"İş üçün telefon tətbiqi quraşdırın"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Ləğv edin"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Kilid ekranını fərdiləşdirin"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Kilid ekranını fərdiləşdirmək üçün kiliddən çıxarın"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi əlçatan deyil"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera bloklanıb"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera və mikrofon bloklanıb"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon bloklanıb"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioritet rejimi aktivdir"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistent aktivdir"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Ayarlarda defolt qeydlər tətbiqi ayarlayın"</string>
+    <string name="install_app" msgid="5066668100199613936">"Tətbiqi quraşdırın"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon və kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Son tətbiq istifadəsi"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Son girişə baxın"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Hazırdır"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Genişləndirin və seçimləri göstərin"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Yığcamlaşdırın"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Bu tətbiqi bağlayın"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> bağlandı"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Xidməti idarə edin"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Girişi idarə edin"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Telefon zəngində istifadə edilir"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Bu yaxınlarda telefon zəngində istifadə edilib"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> istifadə edir"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Bu yaxınlarda <xliff:g id="APP_NAME">%1$s</xliff:g> istifadə edib"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) istifadə edir"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Bu yaxınlarda <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) istifadə edib"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) istifadə edir"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Bu yaxınlarda <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) istifadə edib"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-az/strings_tv.xml b/packages/SystemUI/res/values-az/strings_tv.xml
deleted file mode 100644
index 055b2fa..0000000
--- a/packages/SystemUI/res/values-az/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN qoşulub"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN ayrılıb"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> vasitəsilə"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Bildirişlər"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Bildiriş yoxdur"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofon yazır"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera yazır"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera və mikrofon yazır"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofon yazmağı dayandırıb"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kamera yazmağı dayandırıb"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kamera və mikrofon yazmağı dayandırıb"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Ekranı videoya çəkməyə başlandı"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Ekranı videoya çəkməyi dayandırdınız"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index 81e2eff..3790300 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"Aplikacija <xliff:g id="APPNAME">%1$s</xliff:g> je otkrila ovaj snimak ekrana."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> i druge otvorene aplikacije su otkrile ovaj snimak ekrana."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Dodaj u belešku"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Snimač ekrana"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Snimač ekrana"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Obrađujemo video snimka ekrana"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Obaveštenje o sesiji snimanja ekrana je aktivno"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Želite da započnete snimanje?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Tokom snimanja Android sistem može da snimi osetljive informacije koje su vidljive na ekranu ili koje se puštaju na uređaju. To obuhvata lozinke, informacije o plaćanju, slike, poruke i zvuk."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Snimaj ceo ekran"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Snimaj jednu aplikaciju"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Android ima pristup kompletnom sadržaju koji je vidljiv na ekranu ili se pušta na uređaju dok snimate. Budite pažljivi sa lozinkama, informacijama o plaćanju, porukama ili drugim osetljivim informacijama."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Kada snimate aplikaciju, Android ima pristup kompletnom sadržaju koji je vidljiv ili se pušta u toj aplikaciji. Budite pažljivi sa lozinkama, informacijama o plaćanju, porukama ili drugim osetljivim informacijama."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Započni snimanje"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Želite da započnete snimanje?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Android ima pristup kompletnom sadržaju koji je vidljiv na ekranu ili se pušta na uređaju dok snimate. Zato budite pažljivi sa lozinkama, informacijama o plaćanju, porukama, slikama i audio i video snimcima."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Kada snimate aplikaciju, Android ima pristup kompletnom sadržaju koji je vidljiv ili se pušta u toj aplikaciji. Zato budite pažljivi sa lozinkama, informacijama o plaćanju, porukama, slikama i audio i video snimcima."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Započni snimanje"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Snimaj zvuk"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Zvuk uređaja"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Zvuk sa uređaja, na primer, muzika, pozivi i melodije zvona"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Zvuk uređaja i mikrofon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Pokreni"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Pokreni"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Snima se ekran"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Snimaju se ekran i zvuk"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Prikazuj dodire na ekranu"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Deli"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Snimak ekrana je sačuvan"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Dodirnite da biste pregledali"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Došlo je do problema pri brisanju snimka ekrana"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Greška pri čuvanju snimka ekrana"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Greška pri pokretanju snimanja ekrana"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Prikazuje se ceo ekran"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Da biste izašli, prevucite nadole odozgo."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Važi"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Nazad"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Početna"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Meni"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Lice je potvrđeno"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Potvrđeno"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Dodirnite Potvrdi da biste završili"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Otključano je licem. Pritisnite ikonu otključavanja za nastavak"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Otključano je licem"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Otključano je licem. Pritisnite da biste nastavili."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Lice je prepoznato. Pritisnite da biste nastavili."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Lice prepoznato. Pritisnite ikonu otključavanja za nastavak."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Identitet je potvrđen"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Otkažite potvrdu identiteta"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Koristite PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Koristite šablon"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Koristite lozinku"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Ako unesete netačan šablon pri sledećem pokušaju, izbrisaćemo poslovni profil i njegove podatke."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Ako unesete netačan PIN pri sledećem pokušaju, izbrisaćemo poslovni profil i njegove podatke."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Ako unesete netačnu lozinku pri sledećem pokušaju, izbrisaćemo poslovni profil i njegove podatke."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Podesi"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Ne sada"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Ovo je neophodno za poboljšanje bezbednosti i performansi"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Ponovo podesite otključavanje otiskom prsta"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Otključavanje otiskom prsta"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Podesite otključavanje otiskom prsta"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Da biste ponovo podesili otključavanje otiskom prsta, aktuelne slike i modeli otiska prsta biće izbrisani.\n\nPosle brisanja, morate ponovo da podesite otključavanje otiskom prsta da biste koristili otisak za otključavanje telefona ili verifikovali da ste to vi."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Da biste ponovo podesili otključavanje otiskom prsta, aktuelne slike i model otiska prsta biće izbrisani.\n\nPosle brisanja, morate ponovo da podesite otključavanje otiskom prsta da biste koristili otisak za otključavanje telefona ili verifikovali da ste to vi."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Podešavanje otključavanja otiskom prsta nije uspelo. Idite u Podešavanja da biste probali ponovo."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Ponovo podesite otključavanje licem"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Otključavanje licem"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Podesite otključavanje licem"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Da biste ponovo podesili otključavanje licem, aktuelni model lica se briše.\n\nMoraćete ponovo da podesite ovu funkciju da biste koristili lice za otključavanje telefona."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Podešavanje otključavanja licem nije uspelo. Idite u Podešavanja da biste probali ponovo."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Dodirnite senzor za otisak prsta"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Pritisnite ikonu otključavanja za nastavak"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Lice nije prepoznato. Koristite otisak prsta."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -198,7 +214,7 @@
     <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Prozor sa obaveštenjima."</string>
     <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Brza podešavanja."</string>
     <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Brza podešavanja i traka sa obaveštenjima."</string>
-    <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Zaključan ekran."</string>
+    <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Zaključan ekran"</string>
     <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Zaključan ekran za posao"</string>
     <string name="accessibility_desc_close" msgid="8293708213442107755">"Zatvori"</string>
     <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"potpuna tišina"</string>
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Slušalice"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Unos"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Slušni aparati"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Slušni aparati"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Uključuje se..."</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatska rotacija"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatsko rotiranje ekrana"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Otključano je licem"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Lice je prepoznato"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Prevucite nagore da biste probali ponovo"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Prevucite nagore da biste ponovo probali otključavanje licem"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Otključajte da biste koristili NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Ovaj uređaj pripada organizaciji"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Ovaj uređaj pripada organizaciji <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> će imati pristup svim informacijama koje se prikazuju na ekranu ili reprodukuju sa uređaja tokom snimanja ili prebacivanja. To obuhvata informacije poput lozinki, informacija o plaćanju, slika, poruka i zvuka koji puštate."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Usluga koja pruža ovu funkciju će imati pristup svim informacijama koje se prikazuju na ekranu ili reprodukuju sa uređaja tokom snimanja ili prebacivanja. To obuhvata informacije poput lozinki, informacija o plaćanju, slika, poruka i zvuka koji puštate."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Želite da počnete snimanje ili prebacivanje?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Želite da počnete snimanje ili prebacivanje pomoću aplikacije <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Želite da dozvolite deljenje i snimanje za <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Ceo ekran"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Jedna aplikacija"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Kada delite, snimate ili prebacujete, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ima pristup kompletnom sadržaju koji je vidljiv na ekranu ili se pušta na uređaju. Budite pažljivi sa lozinkama, informacijama o plaćanju, porukama ili drugim osetljivim informacijama."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Kada delite, snimate ili prebacujete aplikaciju, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ima pristup kompletnom sadržaju koji je vidljiv ili se pušta u toj aplikaciji. Budite pažljivi sa lozinkama, informacijama o plaćanju, porukama ili drugim osetljivim informacijama."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Nastavi"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Delite ili snimite aplikaciju"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Želite da dozvolite ovoj aplikaciji da deli ili snima?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Kada delite, snimate ili prebacujete, ova aplikacija ima pristup kompletnom sadržaju koji je vidljiv na ekranu ili se pušta na uređaju. Budite pažljivi sa lozinkama, informacijama o plaćanju, porukama ili drugim osetljivim informacijama."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Kada delite, snimate ili prebacujete aplikaciju, ova aplikacija ima pristup kompletnom sadržaju koji je vidljiv ili se pušta u toj aplikaciji. Budite pažljivi sa lozinkama, informacijama o plaćanju, porukama ili drugim osetljivim informacijama."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> će imati pristup svim informacijama koje se prikazuju na ekranu ili reprodukuju sa uređaja tokom snimanja ili prebacivanja. To obuhvata informacije poput lozinki, informacija o plaćanju, slika, poruka i zvuka koji puštate."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Želite da počnete snimanje ili prebacivanje?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Usluga koja pruža ovu funkciju će imati pristup svim informacijama koje se prikazuju na ekranu ili reprodukuju sa uređaja tokom snimanja ili prebacivanja. To obuhvata informacije poput lozinki, informacija o plaćanju, slika, poruka i zvuka koji puštate."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Ceo ekran"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Jedna aplikacija"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Delite ili snimite aplikaciju"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Želite da počnete snimanje ili prebacivanje pomoću aplikacije <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Kada delite, snimate ili prebacujete, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ima pristup kompletnom sadržaju koji je vidljiv na ekranu ili se pušta na uređaju. Zato budite pažljivi sa lozinkama, informacijama o plaćanju, porukama, slikama i audio i video snimcima."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Kada delite, snimate ili prebacujete aplikaciju, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ima pristup kompletnom sadržaju koji je vidljiv ili se pušta u toj aplikaciji. Zato budite pažljivi sa lozinkama, informacijama o plaćanju, porukama, slikama i audio i video snimcima."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Pokreni"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Želite da započnete prebacivanje?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Kada prebacujete, Android ima pristup kompletnom sadržaju koji je vidljiv na ekranu ili se pušta na uređaju. Zato budite pažljivi sa lozinkama, informacijama o plaćanju, porukama, slikama i audio i video snimcima."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Kada prebacujete aplikaciju, Android ima pristup kompletnom sadržaju koji je vidljiv ili se pušta u toj aplikaciji. Zato budite pažljivi sa lozinkama, informacijama o plaćanju, porukama, slikama i audio i video snimcima."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Započni prebacivanje"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Želite da počnete da delite?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Kada delite, snimate ili prebacujete, Android ima pristup kompletnom sadržaju koji je vidljiv na ekranu ili se pušta na uređaju. Zato budite pažljivi sa lozinkama, informacijama o plaćanju, porukama, slikama i audio i video snimcima."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Kada delite, snimate ili prebacujete aplikaciju, Android ima pristup kompletnom sadržaju koji je vidljiv ili se pušta u toj aplikaciji. Zato budite pažljivi sa lozinkama, informacijama o plaćanju, porukama, slikama i audio i video snimcima."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Pokreni"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Deljenje se zaustavlja kada menjate aplikacije"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Deli ovu aplikaciju"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Vrati"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Promena aplikacije"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blokira IT administrator"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Snimanje ekrana je onemogućeno smernicama za uređaj"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Obriši sve"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Na ovom uređaju je instaliran autoritet za izdavanje sertifikata. Bezbedni mrežni saobraćaj može da se prati ili menja."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Administrator je uključio evidentiranje mreže, koje prati saobraćaj na uređaju."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Administrator je uključio evidentiranje mreže, koje prati saobraćaj na poslovnom profilu, ali ne i na ličnom profilu."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Ovaj uređaj je povezan na internet preko: <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša aktivnost na mreži, uključujući imejlove i podatke pregledanja, vidljiva je IT administratoru."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Ovaj uređaj je povezan na internet preko: <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša aktivnost na mreži, uključujući imejlove i podatke pregledanja, vidljiva je dobavljaču VPN-a."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Ovaj uređaj je povezan na internet preko: <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša aktivnost na mreži, uključujući imejlove i podatke pregledanja, vidljiva je IT administratoru."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Ovaj uređaj je povezan na internet preko: <xliff:g id="VPN_APP_0">%1$s</xliff:g> i <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Vaša aktivnost na mreži, uključujući imejlove i podatke pregledanja, vidljiva je IT administratoru."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Vaše poslovne aplikacije su povezane na internet preko: <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša aktivnost na mreži u poslovnim aplikacijama, uključujući imejlove i podatke pregledanja, vidljiva je IT administratoru i dobavljaču VPN-a."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Vaše lične aplikacije su povezane na internet preko: <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša aktivnost na mreži, uključujući imejlove i podatke pregledanja, vidljiva je dobavljaču VPN-a."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"onemogućite"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Zvuk i vibriranje"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Podešavanja"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Zvuk je smanjen na bezbednu jačinu"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Zvuk je bio glasan duže nego što se preporučuje"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Zvuk je smanjen na bezbednu jačinu"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Zvuk u slušalicama je bio glasan duže nego što se preporučuje"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Jačina zvuka u slušalicama je premašila bezbednosno ograničenje za ovu nedelju"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Nastavite da slušate"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Smanjite jačinu zvuka"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Aplikacija je zakačena"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Na ovaj način se ovo stalno prikazuje dok ga ne otkačite. Dodirnite i zadržite Nazad i Pregled da biste ga otkačili."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Na ovaj način se ovo stalno prikazuje dok ga ne otkačite. Dodirnite i zadržite Nazad i Početna da biste ga otkačili."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Meni dugmeta za uključivanje"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_1">%1$d</xliff:g>. strana od <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Zaključan ekran"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telefon se isključio zbog toplote"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Telefon sada normalno radi.\nDodirnite za više informacija"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefon je bio prevruć, pa se isključio da se ohladi. Sada radi normalno.\n\nTelefon može previše da se ugreje ako:\n	• Koristite aplikacije koje zahtevaju puno resursa (npr. video igre, video ili aplikacije za navigaciju)\n	• Preuzimate/otpremate velike datoteke\n	• Koristite telefon na visokoj temperaturi"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Pogledajte upozorenja"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefon se zagrejao"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Neke funkcije su ograničene dok se telefon ne ohladi.\nDodirnite za više informacija"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Telefon će automatski pokušati da se ohladi. I dalje ćete moći da koristite telefon, ali će sporije reagovati.\n\nKada se telefon ohladi, normalno će raditi."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Pogledajte upozorenja"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Isključite uređaj"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Uređaj se zagreva u blizini porta za punjenje. Ako je povezan sa punjačem ili USB opremom, isključite je i budite pažljivi jer i kabl može da bude vruć."</string>
@@ -764,7 +788,7 @@
     <string name="tuner_right" msgid="8247571132790812149">"Strelica udesno"</string>
     <string name="tuner_menu" msgid="363690665924769420">"Meni"</string>
     <string name="tuner_app" msgid="6949280415826686972">"Aplikacija <xliff:g id="APP">%1$s</xliff:g>"</string>
-    <string name="notification_channel_alerts" msgid="3385787053375150046">"Obaveštenja"</string>
+    <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">"Snimci ekrana"</string>
     <string name="notification_channel_instant" msgid="7556135423486752680">"Instant aplikacije"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Uvećajte ceo ekran"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Uvećajte deo ekrana"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Otvori podešavanja uvećanja"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Zatvori podešavanja uvećanja"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Prevucite ugao da biste promenili veličinu"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Dozvoli dijagonalno skrolovanje"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Promeni veličinu"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Dodirnite za funkcije pristupačnosti. Prilagodite ili zamenite ovo dugme u Podešavanjima.\n\n"<annotation id="link">"Podešavanja"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Pomerite dugme do ivice da biste ga privremeno sakrili"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Opozovi"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Prečica funkcije<xliff:g id="FEATURE_NAME">%s</xliff:g> je uklonjena"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Prečica funkcije <xliff:g id="FEATURE_NAME">%s</xliff:g> je uklonjena"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# prečica je uklonjena}one{# prečica je uklonjena}few{# prečice su uklonjene}other{# prečica je uklonjeno}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Premesti gore levo"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Premesti gore desno"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"uklonili iz omiljenih"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Premestite na <xliff:g id="NUMBER">%d</xliff:g>. poziciju"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrole"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Odaberite kontrole uređaja za brz pristup"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Zadržite i prevucite da biste promenili raspored kontrola"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Sve kontrole su uklonjene"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Promene nisu sačuvane"</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Probajte drugi PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Potvrdite promenu za: <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Prevucite da biste videli još"</string>
+    <string name="retry_face" msgid="416380073082560186">"Probajte ponovo potvrdu identiteta pomoću lica"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Učitavaju se preporuke"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Mediji"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"Želite li da sakrijete ovu kontrolu za medije za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"Želite da sakrijete ovu kontrolu za medije za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"Aktuelna sesija medija ne može da bude sakrivena."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Sakrij"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Nastavi"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Podešavanja"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> izvođača <xliff:g id="ARTIST_NAME">%2$s</xliff:g> se pušta iz aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> od <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je pokrenuta"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Pusti"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pauziraj"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Prethodna pesma"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Zvučnici i ekrani"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Predloženi uređaji"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Zaustavite deljenu sesiju da biste premestili medijski sadržaj na drugi uređaj"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Zaustavi"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Kako funkcioniše emitovanje"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Emitovanje"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Ljudi u blizini sa kompatibilnim Bluetooth uređajima mogu da slušaju medijski sadržaj koji emitujete"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Čuvanje nije uspelo. Probajte ponovo."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Čuvanje nije uspelo."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Koristite bar 4 znaka"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Koristite manje od 16 znakova"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Koristite manji broj znakova od <xliff:g id="LENGTH">%1$d</xliff:g>"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Broj verzije"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Broj verzije je kopiran u privremenu memoriju."</string>
     <string name="basic_status" msgid="2315371112182658176">"Otvorite konverzaciju"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problem sa očitavanjem merača baterije"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Dodirnite za više informacija"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Nije podešen"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"unesite zaključavanje ekrana"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Senzor za otisak prsta"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"potvrdite identitet"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"unesite uređaj"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Pomoćnik sluša"</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="note_task_button_label" msgid="8718616095800343136">"Pravljenje beležaka"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Pravljenje beležaka"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Pravljenje beležaka, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Saznajte više"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Saznajte više na <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Otvorite: <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• da je aplikacija podešena"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• da je u Novčanik dodata barem jedna kartica"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• da ste instalirali aplikaciju za kameru"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• da je aplikacija podešena"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• da je dostupan barem jedan uređaj"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Da biste dodali aplikaciju Novčanik kao prečicu, uverite se da je aplikacija instalirana"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Da biste dodali aplikaciju Novčanik kao prečicu, uverite se da je dodata bar jedna kartica"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Da biste dodali Skener QR koda kao prečicu, uverite se da je aplikacija za kameru instalirana"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Da biste dodali aplikaciju Home kao prečicu, uverite se da je aplikacija instalirana"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Dostupan je bar jedan uređaj"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Izaberite podrazumevanu aplikaciju za beleške da biste koristili prečicu za pravljenje beleški"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Izaberi aplikaciju"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Dodirnite i zadržite prečicu"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Otkaži"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Zameni ekrane"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Povežite pisaljku sa punjačem"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Nizak nivo baterije pisaljke"</string>
     <string name="video_camera" msgid="7654002575156149298">"Video kamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Ne možete da upućujete pozive sa ovog profila"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Smernice za posao vam omogućavaju da telefonirate samo sa poslovnog profila"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Ne možete da upućujete pozive iz lične aplikacije"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Vaša organizacija dozvoljava pozivanje samo iz poslovnih aplikacija"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Pređi na poslovni profil"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Zatvori"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instalirajte poslovnu aplikaciju za telefon"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Otkaži"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Prilagodi zaključani ekran"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Otključajte da biste prilagodili zaključani ekran"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"WiFi nije dostupan"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera je blokirana"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera i mikrofon su blokirani"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon je blokiran"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioritetni režim je uključen"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Pomoćnik je u aktivnom stanju"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Podesite podrazumevanu aplikaciju za beleške u Podešavanjima"</string>
+    <string name="install_app" msgid="5066668100199613936">"Instaliraj aplikaciju"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon i kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Nedavno koristila aplikacija"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Prikaži nedavni pristup"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Gotovo"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Proširi i prikaži opcije"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Skupi"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Zatvori ovu aplikaciju"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Zatvoreno: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Upravljaj uslugom"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Upravljaj pristupom"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Koristi telefonski poziv"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Nedavno korišćeno u telefonskom pozivu"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Koristi <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Nedavno koristila aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Koristi <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Nedavno koristila aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Koristi <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Nedavno koristila aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings_tv.xml b/packages/SystemUI/res/values-b+sr+Latn/strings_tv.xml
deleted file mode 100644
index f72890b..0000000
--- a/packages/SystemUI/res/values-b+sr+Latn/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN je povezan"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"Veza sa VPN-om je prekinuta"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Preko: <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Obaveštenja"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Nema obaveštenja"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofon snima"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera snima"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera i mikrofon snimaju"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Snimanje mikrofonom je zaustavljeno"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Snimanje kamerom je zaustavljeno"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Snimanje kamerom i mikrofonom je zaustavljeno"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Snimanje ekrana je započeto"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Snimanje ekrana je zaustavljeno"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index e742c01..def25b4 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Уключыць USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Даведацца больш"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Здымак экрана"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Функцыя падоўжанай разблакіроўкі адключана"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Функцыя працяглай разблакіроўкі адключана"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"адпраўлены відарыс"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Захаванне скрыншота..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Захаванне здымка экрана ў працоўны профіль…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"Праграма \"<xliff:g id="APPNAME">%1$s</xliff:g>\" выявіла гэты здымак экрана."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> і іншыя адкрытыя праграмы выявілі гэты здымак экрана."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Дадаць у нататку"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Запіс экрана"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Запіс экрана"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Апрацоўваецца запіс экрана"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Бягучае апавяшчэнне для сеанса запісу экрана"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Пачаць запіс?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Падчас запісу сістэма Android можа збіраць канфідэнцыяльную інфармацыю, якая адлюстроўваецца на экране вашай прылады ці прайграецца на ёй. Гэта могуць быць паролі, плацежная інфармацыя, фота, паведамленні і аўдыяданыя."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Запісаць змесціва ўсяго экрана"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Запісаць змесціва праграмы"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Калі адбываецца запіс, Android мае доступ да ўсяго змесціва, якое паказваецца на экране ці прайграецца на прыладзе. Таму прадухіліце паказ пароляў, плацежных рэквізітаў, паведамленняў і іншай канфідэнцыяльнай інфармацыі."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Калі адбываецца запіс змесціва праграмы, Android мае доступ да ўсяго змесціва, якое паказваецца ці прайграецца ў праграме. Таму прадухіліце паказ пароляў, плацежных рэквізітаў, паведамленняў і іншай канфідэнцыяльнай інфармацыі."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Пачаць запіс"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Пачаць запіс?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Калі адбываецца запіс, Android мае доступ да ўсяго змесціва, якое паказваецца на экране ці прайграецца на прыладзе. Таму прадухіліце паказ пароляў, плацежных рэквізітаў, паведамленняў, фота, відэа і аўдыя."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Калі адбываецца запіс змесціва праграмы, Android мае доступ да ўсяго змесціва, якое паказваецца ці прайграецца ў праграме. Таму прадухіліце паказ пароляў, плацежных рэквізітаў, паведамленняў, фота, відэа і аўдыя."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Пачаць запіс"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Запісаць аўдыя"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Аўдыя з прылады"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Гук на вашай прыладзе, напрыклад музыка, выклікі і рынгтоны"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Мікрафон"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Аўдыя з прылады і мікрафон"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Пачаць"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Пачаць"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Ідзе запіс экрана"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Ідзе запіс экрана і аўдыя"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Паказваць дотыкі да экрана"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Абагуліць"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Запіс экрана захаваны"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Націсніце для прагляду"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Памылка выдалення запісу экрана"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Памылка захавання запісу экрана"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Памылка пачатку запісу экрана"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Прагляд у поўнаэкранным рэжыме"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Каб выйсці, правядзіце пальцам па экране зверху ўніз."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Зразумела"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Назад"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"На Галоўную старонку"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Меню"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Твар распазнаны"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Пацверджана"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Націсніце \"Пацвердзіць\", каб завяршыць"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Твар распазнаны. Для працягу націсніце значок разблакіроўкі."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Разблакіравана распазнаваннем твару"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Разблакіравана распазнаваннем твару. Націсніце для працягу."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Твар распазнаны. Націсніце для працягу."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Твар распазнаны. Для працягу націсніце значок разблакіроўкі."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Распазнана"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Скасаваць аўтэнтыфікацыю"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Увесці PIN-код"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Выкарыстаць узор разблакіроўкі"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Выкарыстаць пароль"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Калі вы ўведзяце няправільны ўзор разблакіроўкі яшчэ раз, ваш працоўны профіль і звязаныя з ім даныя будуць выдалены."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Калі вы ўведзяце няправільны PIN-код яшчэ раз, ваш працоўны профіль і звязаныя з ім даныя будуць выдалены."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Калі вы ўведзяце няправільны пароль яшчэ раз, ваш працоўны профіль і звязаныя з ім даныя будуць выдалены."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Наладзіць"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Не зараз"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Абавязкова, каб павысіць бяспеку і палепшыць прадукцыйнасць"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Наладзіць разблакіроўку адбіткам пальца паўторна"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Разблакіроўка адбіткам пальца"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Наладзіць разблакіроўку адбіткам пальца"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Для паўторнага наладжвання разблакіроўкі адбіткам пальца бягучыя відарысы і мадэлі адбіткаў пальцаў будуць выдалены.\n\nКаб выкарыстоўваць адбітак пальца для разблакіроўкі тэлефона ці спраўджвання асобы пасля іх выдалення, трэба будзе зноў наладзіць разблакіроўку адбіткам пальца."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Для паўторнага наладжвання разблакіроўкі адбіткам пальца вашы відарысы і мадэль адбіткаў пальца будуць выдалены.\n\nКаб выкарыстоўваць адбітак пальца для разблакіроўкі тэлефона ці спраўджвання асобы пасля іх выдалення, трэба будзе зноў наладзіць разблакіроўку адбіткам пальца."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Не ўдалося наладзіць разблакіроўку адбіткам пальца. Каб паўтарыць, перайдзіце ў Налады."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Паўторна наладзьце распазнаванне твару"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Распазнаванне твару"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Наладзіць распазнаванне твару"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Для паўторнага наладжвання распазнавання твару бягучая мадэль твару будзе выдалена.\n\nДля разблакіроўкі тэлефона распазнаваннем твару трэба будзе наладзіць гэтую функцыю зноў."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Не ўдалося наладзіць функцыю распазнавання твару. Каб паўтарыць, перайдзіце ў Налады."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Дакраніцеся да сканера адбіткаў пальцаў"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Каб працягнуць, націсніце на значок разблакіроўкі"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Твар не распазнаны. Скарыстайце адбітак пальца."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Гук"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Гарнітура"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Увод"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Слыхавыя апараты"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слыхавыя апараты"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Уключэнне…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Аўтапаварот"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Аўтаматычны паварот экрана"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Разблакіравана распазнаваннем твару"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Твар распазнаны"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Прагартайце ўверх, каб паўтарыць спробу"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Правядзіце пальцам уверх, каб паўтарыць распазнанне твару"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Разблакіруйце, каб выкарыстоўваць NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Гэта прылада належыць вашай арганізацыі"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Гэта прылада належыць арганізацыі \"<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>\""</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"Выдаліць карыстальніка?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Усе праграмы і даныя гэтага карыстальніка будуць выдалены."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Выдаліць"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Падчас запісу ці трансляцыі праграма \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" будзе мець доступ да ўсёй інфармацыі, адлюстраванай на экране вашай прылады, ці той, якая праз яе прайграецца. Гэта інфармацыя ўключае паролі, звесткі пра аплату, фота, паведамленні і аўдыя, якое вы прайграяце."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Падчас запісу ці трансляцыі служба, якая забяспечвае работу гэтай функцыі, будзе мець доступ да ўсёй інфармацыі, адлюстраванай на экране вашай прылады, ці той, якая праз яе прайграецца. Гэта інфармацыя ўключае паролі, звесткі пра аплату, фота, паведамленні і аўдыя, якое вы прайграяце."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Пачаць запіс або трансляцыю?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Пачаць запіс або трансляцыю з дапамогай праграмы \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\"?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Дазволіць праграме \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" абагульваць ці запісваць змесціва?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Увесь экран"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Адна праграма"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Калі пачынаецца абагульванне, запіс ці трансляцыя, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> атрымлівае доступ да ўсяго змесціва, якое паказваецца на экране ці прайграецца на прыладзе. Таму прадухіліце паказ пароляў, плацежных рэквізітаў, паведамленняў і іншай канфідэнцыяльнай інфармацыі."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Калі пачынаецца абагульванне, запіс ці трансляцыя змесціва праграмы, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> атрымлівае доступ да ўсяго змесціва, якое паказваецца ці прайграецца ў праграме. Таму прадухіліце паказ пароляў, плацежных рэквізітаў, паведамленняў і іншай канфідэнцыяльнай інфармацыі."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Далей"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Абагульванне або запіс праграмы"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Дазволіць гэтай праграме абагульваць або запісваць змесціва?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Калі пачынаецца абагульванне, запіс ці трансляцыя, гэта праграма атрымлівае доступ да ўсяго змесціва, якое паказваецца на экране ці прайграецца на прыладзе. Таму прадухіліце паказ пароляў, звестак пра плацяжы, паведамленняў і іншай канфідэнцыяльнай інфармацыі."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Калі пачынаецца абагульванне, запіс ці трансляцыя змесціва праграмы, гэта праграма атрымлівае доступ да ўсяго змесціва, якое ў ёй паказваецца ці прайграецца. Таму прадухіліце паказ пароляў, звестак пра плацяжы, паведамленняў і іншай канфідэнцыяльнай інфармацыі."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Падчас запісу ці трансляцыі праграма \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" будзе мець доступ да ўсёй інфармацыі, адлюстраванай на экране вашай прылады, ці той, якая праз яе прайграецца. Гэтая інфармацыя ўключае паролі, звесткі пра аплату, фота, паведамленні і аўдыя, якое вы прайграяце."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Пачаць запіс або трансляцыю?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Падчас запісу ці трансляцыі служба, якая забяспечвае работу гэтай функцыі, будзе мець доступ да ўсёй інфармацыі, адлюстраванай на экране вашай прылады, ці той, якая праз яе прайграецца. Гэтая інфармацыя ўключае паролі, плацежных рэквізітаў, фота, паведамленні і аўдыя, якое вы прайграяце."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Увесь экран"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Адна праграма"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Абагульванне або запіс праграмы"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Пачаць запіс або трансляцыю з дапамогай праграмы \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\"?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Калі пачынаецца абагульванне, запіс ці трансляцыя, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> атрымлівае доступ да ўсяго змесціва, якое паказваецца на экране ці прайграецца на прыладзе. Таму прадухіліце паказ пароляў, плацежных рэквізітаў, паведамленняў, фота, відэа і аўдыя."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Калі пачынаецца абагульванне, запіс ці трансляцыя змесціва праграмы, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> атрымлівае доступ да ўсяго змесціва, якое паказваецца ці прайграецца ў праграме. Таму прадухіліце паказ пароляў, плацежных рэквізітаў, паведамленняў, фота, відэа і аўдыя."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Пачаць"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Пачаць трансляцыю?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Калі адбываецца трансляцыя, Android мае доступ да ўсяго змесціва, якое паказваецца на экране ці прайграецца на прыладзе. Таму прадухіліце паказ пароляў, плацежных рэквізітаў, паведамленняў, фота, відэа і аўдыя."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Калі адбываецца трансляцыя змесціва праграмы, Android мае доступ да ўсяго змесціва, якое паказваецца ці прайграецца ў праграме. Таму прадухіліце паказ пароляў, плацежных рэквізітаў, паведамленняў, фота, відэа і аўдыя."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Пачаць трансляцыю"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Пачаць абагульванне?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Калі адбываецца абагульванне, запіс ці трансляцыя, Android мае доступ да ўсяго змесціва, якое паказваецца на экране ці прайграецца на прыладзе. Таму прадухіліце паказ пароляў, плацежных рэквізітаў, паведамленняў, фота, відэа і аўдыя."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Калі адбываецца абагульванне, запіс ці трансляцыя змесціва праграмы, Android мае доступ да ўсяго змесціва, якое паказваецца ці прайграецца ў праграме. Таму прадухіліце паказ пароляў, плацежных рэквізітаў, паведамленняў, фота, відэа і аўдыя."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Пачаць"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Пры пераключэнні праграм абагульванне прыпыняецца"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Абагуліць гэту праграму"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Пераключыцца назад"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Пераключальнік праграм"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Заблакіравана вашым ІТ-адміністратарам"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Здыманне экрана адключана згодна з палітыкай прылады"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Ачысціць усё"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"На гэтай прыладзе ўсталяваны цэнтр сертыфікацыі. Ваш абаронены сеткавы трафік могуць праглядваць ці змяняць."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Ваш адміністратар уключыў вядзенне журнала сеткі, з дапамогай якога адсочваецца трафік на вашай прыладзе."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Ваш адміністратар уключыў вядзенне журнала сеткі, з дапамогай якога адсочваецца трафік у вашым працоўным профілі. Трафік вашага асабістага профілю застаецца недаступным."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Гэта прылада падключана да інтэрнэту праз праграму \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". Ваш IT-адміністратар можа бачыць вашы дзеянні ў сетцы, у тым ліку інфармацыю пра электронную пошту і даныя прагляду."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Гэта прылада падключана да інтэрнэту праз праграму \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". Пастаўшчык VPN можа бачыць вашы дзеянні ў сетцы, у тым ліку інфармацыю пра электронную пошту і даныя прагляду."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Гэта прылада падключана да інтэрнэту праз праграму \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". Ваш IT-адміністратар можа бачыць вашы дзеянні ў сетцы, у тым ліку інфармацыю пра электронную пошту і даныя прагляду."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Гэта прылада падключана да інтэрнэту праз праграмы \"<xliff:g id="VPN_APP_0">%1$s</xliff:g>\" і \"<xliff:g id="VPN_APP_1">%2$s</xliff:g>\". Ваш IT-адміністратар можа бачыць вашы дзеянні ў сетцы, у тым ліку інфармацыю пра электронную пошту і даныя прагляду."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Вашы працоўныя праграмы падключаны да інтэрнэту праз праграму \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". Ваш IT-адміністратар і пастаўшчык VPN могуць бачыць вашы дзеянні ў сетцы ў працоўных праграмах, у тым ліку інфармацыю пра электронную пошту і даныя прагляду."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Вашы асабістыя праграмы падключаны да інтэрнэту праз праграму \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". Пастаўшчык VPN можа бачыць вашы дзеянні ў сетцы, у тым ліку інфармацыю пра электронную пошту і даныя прагляду."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"адключыць"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Гук і вібрацыя"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Налады"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Гук паменшаны да бяспечнага ўзроўню"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Гучнасць была моцнай больш часу, чым рэкамендавана"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Гучнасць паніжана да больш бяспечнага ўзроўню"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Гучнасць у навушніках была вялікай больш часу, чым рэкамендавана"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Гучнасць у навушніках перавысіла ліміт бяспечнага праслухоўвання на гэтым тыдні"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Працягваць слухаць"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Паменшыць гучнасць"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Праграма замацавана"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Будзе паказвацца, пакуль не адмацуеце. Каб адмацаваць, краніце і ўтрымлівайце кнопкі \"Назад\" і \"Агляд\"."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Будзе паказвацца, пакуль не адмацуеце. Каб адмацаваць, націсніце і ўтрымлівайце кнопкі \"Назад\" і \"Галоўны экран\"."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Меню кнопкі сілкавання"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Старонка <xliff:g id="ID_1">%1$d</xliff:g> з <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Экран блакіроўкі"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"З-за перагрэву тэл. выключыўся"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Ваш тэлефон працуе нармальна.\nНацісніце, каб даведацца больш"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Ваш тэлефон пераграваўся, таму ён выключыўся, каб астыць. Зараз тэлефон працуе нармальна.\n\nТэлефон можа перагравацца пры:\n	• Выкарыстанні рэсурсаёмістых праграм (напрыклад, гульняў, відэа або праграм навігацыі)\n	• Спампоўцы або запампоўцы вялікіх файлаў\n	• Выкарыстанні тэлефона пры высокіх тэмпературах"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Глядзець паэтапную дапамогу"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Тэлефон награваецца"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Некаторыя функцыі абмежаваны, пакуль тэлефон не астыне.\nНацісніце, каб даведацца больш"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Ваш тэлефон аўтаматычна паспрабуе астыць. Вы можаце па-ранейшаму карыстацца сваім тэлефонам, але ён можа працаваць больш павольна.\n\nПасля таго як ваш тэлефон астыне, ён будзе працаваць у звычайным рэжыме."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Глядзець паэтапную дапамогу"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Адключыце прыладу"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Ваша прылада моцна награваецца ў месцы, дзе знаходзіцца зарадны порт. Калі яна падключана да зараднай прылады ці USB-прылады, адключыце яе і будзьце асцярожнымі з кабелем, які таксама можа награвацца."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Павялічыць увесь экран"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Павялічыць частку экрана"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Адкрыць налады павелічэння"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Закрыць налады павелічэння"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Каб змяніць памер, перацягніце вугал"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Дазволіць прагортванне па дыяганалі"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Змяніць памер"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Націсніце, каб адкрыць спецыяльныя магчымасці. Рэгулюйце ці замяняйце кнопку ў Наладах.\n\n"<annotation id="link">"Прагляд налад"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Каб часова схаваць кнопку, перамясціце яе на край"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Адрабіць"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Выдалены <xliff:g id="FEATURE_NAME">%s</xliff:g> ярлык"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Выдалены ярлык <xliff:g id="FEATURE_NAME">%s</xliff:g>"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{Выдалены # ярлык}one{Выдалены # ярлык}few{Выдалена # ярлыкі}many{Выдалена # ярлыкоў}other{Выдалена # ярлыка}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Перамясціць лявей і вышэй"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Перамясціць правей і вышэй"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"выдаліць з абранага"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Перамясціць у пазіцыю <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Сродкі кіравання"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Выберыце элементы кіравання прыладай для хуткага доступу"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Каб змяніць парадак элементаў кіравання, утрымлівайце і перацягвайце іх"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Усе элементы кіравання выдалены"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Змяненні не захаваны"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Паспрабуйце іншы PIN-код"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Пацвердзіце змяненне для прылады \"<xliff:g id="DEVICE">%s</xliff:g>\""</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Правядзіце пальцам, каб убачыць больш інфармацыі"</string>
+    <string name="retry_face" msgid="416380073082560186">"Паўтарыць распазнаванне твару"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Загружаюцца рэкамендацыі"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Мультымедыя"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Схаваць гэту панэль мультымедыя для праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Налады"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"У праграме \"<xliff:g id="APP_LABEL">%3$s</xliff:g>\" прайграецца кампазіцыя \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\", выканаўца – <xliff:g id="ARTIST_NAME">%2$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> з <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> працуе"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Прайграць"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Прыпыніць"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Папярэдні трэк"</string>
@@ -960,7 +986,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Выбрана прылад: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(адключана)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Не ўдалося пераключыцца. Дакраніцеся, каб паўтарыць спробу."</string>
-    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Падключыце прыладу"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Падключыць прыладу"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Для трансляцыі гэтага сеанса адкрыйце праграму."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Невядомая праграма"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Спыніць трансляцыю"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Дынамікі і дысплэі"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Прылады, якія падтрымліваюцца"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Каб перамясціць медыяфайлы на іншую прыладу, спыніце абагулены сеанс"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Спыніць"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Як адбываецца трансляцыя"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Трансляцыя"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Людзі паблізу, у якіх ёсць прылады з Bluetooth, змогуць праслухваць мультымедыйнае змесціва, якое вы трансліруеце"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Не ўдалося захаваць. Паўтарыце спробу."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Не ўдалося захаваць."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Скарыстайце не менш як 4 сімвалы"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Скарыстайце менш за 16 сімвалаў"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Колькасць сімвалаў павінна быць меншай за <xliff:g id="LENGTH">%1$d</xliff:g>"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Нумар зборкі"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Нумар зборкі скапіраваны ў буфер абмену."</string>
     <string name="basic_status" msgid="2315371112182658176">"Адкрытая размова"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Праблема з чытаннем індыкатара зараду акумулятара"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Націсніце, каб убачыць больш"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Няма будзільнікаў"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"прыступіць да разблакіроўкі экрана"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Сканер адбіткаў пальцаў"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"правесці аўтэнтыфікацыю"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"адкрыць галоўны экран прылады"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Памочнік слухае"</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="note_task_button_label" msgid="8718616095800343136">"Стварэнне нататак"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Стварэнне нататак"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Стварэнне нататак, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Даведацца больш"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Даведайцеся больш на старонцы <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Адкрыць праграму \"<xliff:g id="APPNAME">%1$s</xliff:g>\""</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Праграма наладжана."</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• У Кашалёк дададзена хаця б адна картка."</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Усталявана праграма \"Камера\"."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Праграма наладжана."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Даступная хаця б адна прылада."</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Вы можаце дадаць ярлык праграмы \"Кашалёк\", толькі калі яна ўсталявана"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Вы можаце дадаць ярлык праграмы \"Кашалёк\", толькі калі дададзена хаця б адна картка"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Вы можаце дадаць ярлык сканера QR-кодаў, толькі калі ўсталявана праграма камеры"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Вы можаце дадаць ярлык праграмы Home, толькі калі яна ўсталявана"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Даступная хаця б адна прылада"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Выберыце стандартную праграму для нататак, якая будзе адкрывацца пры націсканні на ярлык"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Выберыце праграму"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Дакраніцеся і ўтрымлівайце ярлык"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Скасаваць"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Пераключыцца на іншы экран"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Падключыце пяро да зараднай прылады"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Нізкі ўзровень зараду пяра"</string>
     <string name="video_camera" msgid="7654002575156149298">"Відэакамера"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Не ўдалося зрабіць выклік з гэтага профілю"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Згодна з палітыкай вашай арганізацыі, рабіць тэлефонныя выклікі дазволена толькі з працоўнага профілю"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Нельга рабіць выклік з асабістай праграмы"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Ваша арганізацыя дазваляе рабіць выклікі толькі з працоўных праграм"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Пераключыцца на працоўны профіль"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Закрыць"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Усталяваць праграму для тэлефона"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Скасаваць"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Наладзіць экран блакіроўкі"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Разблакіруйце, каб наладзіць экран блакіроўкі"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Сетка Wi-Fi недаступная"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камера заблакіравана"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камера і мікрафон заблакіраваны"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Мікрафон заблакіраваны"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Прыярытэтны рэжым уключаны"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Памочнік гатовы выконваць каманды"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Задайце ў Наладах стандартную праграму для нататак"</string>
+    <string name="install_app" msgid="5066668100199613936">"Усталяваць праграму"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Мікрафон і камера"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Нядаўна выкарыстоўваліся праграмамі"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Паглядзець нядаўні доступ"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Гатова"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Разгарнуць і паказаць варыянты дзеянняў"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Згарнуць"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Закрыць гэту праграму"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Праграма \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" закрыта"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Кіраваць сэрвісам"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Кіраваць доступам"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Зараз выкарыстоўваецца для тэлефоннага выкліку"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Нядаўна выкарыстоўваўся для тэлефоннага выкліку"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Зараз выкарыстоўваецца праграмай \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Нядаўна выкарыстоўваўся праграмай \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Зараз выкарыстоўваецца праграмай \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Нядаўна выкарыстоўваўся праграмай \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Зараз выкарыстоўваецца праграмай \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Нядаўна выкарыстоўваўся праграмай \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-be/strings_tv.xml b/packages/SystemUI/res/values-be/strings_tv.xml
deleted file mode 100644
index aee04c2..0000000
--- a/packages/SystemUI/res/values-be/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN падключаны"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN адключаны"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Праз <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Апавяшчэнні"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Апавяшчэнняў няма"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Ідзе запіс з выкарыстаннем мікрафона"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Ідзе запіс з выкарыстаннем камеры"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Ідзе запіс з выкарыстаннем камеры і мікрафона"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Запіс з выкарыстаннем мікрафона спынены"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Запіс з выкарыстаннем камеры спынены"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Запіс з выкарыстаннем камеры і мікрафона спынены"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Пачаўся запіс экрана"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Запіс экрана спынены"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 910ecfc..224ff1f 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> установи заснемането на тази екранна снимка."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> и други отворени приложения установиха заснемането на тази екранна снимка."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Добавяне към бележката"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Запис на екрана"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Запис на екрана"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Записът на екрана се обработва"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Текущо известие за сесия за записване на екрана"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Да се стартира ли записът?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"По време на записване системата Android може да запише и поверителна информация, която е показана на екрана или възпроизвеждана на устройството ви. Това включва пароли, данни за плащане, снимки, съобщения и аудио."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Записване на целия екран"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Записване на едно приложение"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Когато записвате, Android има достъп до всичко, което се вижда на екрана ви или се възпроизвежда на устройството ви, затова бъдете внимателни с пароли, подробности за начини на плащане, съобщения или друга поверителна информация."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Когато записвате приложение, Android има достъп до всичко, което се показва или възпроизвежда в това приложение, затова бъдете внимателни с пароли, подробности за начини на плащане, съобщения или друга поверителна информация."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Стартиране на записа"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Искате ли да стартирате записване?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Когато записвате, Android има достъп до всичко, което се вижда на екрана ви или се възпроизвежда на устройството ви. Затова бъдете внимателни с неща като пароли, подробности за начини на плащане, съобщения, снимки, аудио и видео."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Докато записвате дадено приложение, Android има достъп до всичко, което се показва или възпроизвежда в него. Затова бъдете внимателни с неща като пароли, подробности за начини на плащане, съобщения, снимки, аудио и видео."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Стартиране на записването"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Записване на звук"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Аудио от устройството"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Звук от устройството ви, като например музика, обаждания и мелодии"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Микрофон"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Аудио от устройството и микрофона"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Стартиране"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Стартиране"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Екранът се записва"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Екранът и аудиото се записват"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Показване на докосванията на екрана"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Споделяне"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Записът е запазен"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Докоснете за преглед"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"При изтриването на записа на екрана възникна грешка"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Грешка при запазването на записа на екрана"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"При стартирането на записа на екрана възникна грешка"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Изглед на цял екран"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"За изход прекарайте пръст надолу от горната част."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Разбрах"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Назад"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Начало"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Меню"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Лицето е удостоверено"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Потвърдено"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Докоснете „Потвърждаване“ за завършване"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Отключено с лице. Натиснете иконата за отключване, за да продължите."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Отключено с лице"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Отключено с лице. Натиснете, за да продължите."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Лицето бе разпознато. Натиснете, за да продължите."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Лицето бе разпознато. Продължете чрез иконата за отключване."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Удостоверено"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Анулиране на удостоверяването"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Използване на ПИН"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Използване на фигура"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Използване на парола"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Ако въведете неправилна фигура при следващия опит, служебният ви потребителски профил и данните в него ще бъдат изтрити."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Ако въведете неправилен ПИН код при следващия опит, служебният ви потребителски профил и данните в него ще бъдат изтрити."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Ако въведете неправилна парола при следващия опит, служебният ви потребителски профил и данните в него ще бъдат изтрити."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Настройване"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Не сега"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Това се изисква с цел подобряване на сигурността и ефективността"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Повторно настройване на „Отключване с отпечатък“"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Отключване с отпечатък"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Настройване на „Отключване с отпечатък“"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"За да настроите „Отключване с отпечатък“ отново, текущите изображения на отпечатъците ви и моделите им ще бъдат изтрити.\n\nСлед това ще трябва да настроите „Отключване с отпечатък“ отново, за да отключвате телефона си или да потвърждавате самоличността си с отпечатък."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"За да настроите „Отключване с отпечатък“ отново, текущите изображения на отпечатъка ви и моделът му ще бъдат изтрити.\n\nСлед това ще трябва да настроите „Отключване с отпечатък“ отново, за да отключвате телефона си или да потвърждавате самоличността си с отпечатък."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Функцията „Отключване с отпечатък“ не бе настроена. Отворете настройките, за да опитате отново."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Повторно настройване на „Отключване с лице“"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Отключване с лице"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Настройване на „Отключване с лице“"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"За да настроите „Отключване с лице“ отново, текущият модел на лицето ви ще бъде изтрит.\n\nЩе трябва да настроите функцията отново, за да отключвате телефона си с лице."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Функцията „Отключване с лице“ не бе настроена. Отворете настройките, за да опитате отново."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Докоснете сензора за отпечатъци"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Натиснете иконата за отключване, за да продължите"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Лицето не е разпознато. Използвайте отпечатък."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Аудио"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Слушалки"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Вход"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Слухови апарати"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слухови апарати"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Включва се..."</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Авт. ориентация"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоматично завъртане на екрана"</string>
@@ -259,7 +275,7 @@
     <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Инвертиране на цветовете"</string>
     <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Корекция на цветове"</string>
     <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"Размер на шрифта"</string>
-    <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Управление на потребителите"</string>
+    <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Управляване"</string>
     <string name="quick_settings_done" msgid="2163641301648855793">"Готово"</string>
     <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Затваряне"</string>
     <string name="quick_settings_connected" msgid="3873605509184830379">"Установена е връзка"</string>
@@ -338,7 +354,7 @@
     <string name="zen_silence_introduction" msgid="6117517737057344014">"Този режим блокира ВСИЧКИ звуци и вибрирания, включително от будилници, музика, видеоклипове и игри."</string>
     <string name="notification_tap_again" msgid="4477318164947497249">"Докоснете отново, за да отворите"</string>
     <string name="tap_again" msgid="1315420114387908655">"Докоснете отново"</string>
-    <string name="keyguard_unlock" msgid="8031975796351361601">"Прекарайте пръст нагоре, за да отключите"</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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Отключено с лице"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Лицето бе разпознато"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Плъзнете бързо нагоре, за да опитате отново"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Плъзнете нагоре, за да изпробвате отново „Отключване с лице“"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Отключете, за да използвате NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Това устройство принадлежи на организацията ви"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Това устройство принадлежи на <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"Да се премахне ли потребителят?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Всички приложения и данни на този потребител ще бъдат изтрити."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Премахване"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ще има достъп до цялата информация, която е видима на екрана или възпроизвеждана от устройството ви по време на записване или предаване. Това включва различна информация, като например пароли, данни за плащане, снимки, съобщения и възпроизвеждано аудио."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Услугата, предоставяща тази функция, ще има достъп до цялата информация, която е видима на екрана или възпроизвеждана от устройството ви по време на записване или предаване. Това включва различна информация, като например пароли, данни за плащане, снимки, съобщения и възпроизвеждано аудио."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Да се стартира ли записване или предаване?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Да се стартира ли записване или предаване чрез <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Разрешавате ли на <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> да споделя и записва?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Цял екран"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Едно приложение"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Когато споделяте, записвате или предавате, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> има достъп до всичко, което се вижда на екрана ви или се възпроизвежда на устройството ви, затова бъдете внимателни с пароли, подробности за начини на плащане, съобщения или друга поверителна информация."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Когато споделяте, записвате или предавате приложение, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> има достъп до всичко, което се показва или възпроизвежда в това приложение, затова бъдете внимателни с пароли, подробности за начини на плащане, съобщения или друга поверителна информация."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Напред"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Споделяне или записване на приложение"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Да се разреши ли на това приложение да споделя или записва?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Когато споделяте, записвате или предавате, това приложение има достъп до всичко, което се вижда на екрана ви или се възпроизвежда на устройството ви, затова бъдете внимателни с пароли, подробности за начини на плащане, съобщения или друга поверителна информация."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Когато споделяте, записвате или предавате приложение, това приложение има достъп до всичко, което се показва или възпроизвежда в приложението, затова бъдете внимателни с пароли, подробности за начини на плащане, съобщения или друга поверителна информация."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ще има достъп до цялата информация, която е видима на екрана или възпроизвеждана от устройството ви по време на записване или предаване. Това включва различна информация, като например пароли, подробности за начини на плащане, снимки, съобщения и възпроизвеждано аудио."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Искате ли да стартирате записване или предаване?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Услугата, предоставяща тази функция, ще има достъп до цялата информация, която е видима на екрана или възпроизвеждана от устройството ви по време на записване или предаване. Това включва различна информация, като например пароли, подробности за начини на плащане, снимки, съобщения и възпроизвеждано аудио."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Цял екран"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Едно приложение"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Споделяне или записване на приложение"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Искате ли да стартирате записване или предаване чрез <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Когато споделяте, записвате или предавате, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> има достъп до всичко, което се вижда на екрана ви или се възпроизвежда на устройството ви. Затова бъдете внимателни с неща като пароли, подробности за начини на плащане, съобщения, снимки, аудио и видео."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Когато споделяте, записвате или предавате дадено приложение, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> има достъп до всичко, което се показва или възпроизвежда в него. Затова бъдете внимателни с неща като пароли, подробности за начини на плащане, съобщения, снимки, аудио и видео."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Стартиране"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Искате ли да стартирате предаване?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Когато предавате, Android има достъп до всичко, което се вижда на екрана ви или се възпроизвежда на устройството ви. Затова бъдете внимателни с неща като пароли, подробности за начини на плащане, съобщения, снимки, аудио и видео."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Когато предавате дадено приложение, Android има достъп до всичко, което се показва или възпроизвежда в него. Затова бъдете внимателни с неща като пароли, подробности за начини на плащане, съобщения, снимки, аудио и видео."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Стартиране на предаването"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Искате ли да стартирате споделяне?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Когато споделяте, записвате или предавате, Android има достъп до всичко, което се вижда на екрана ви или се възпроизвежда на устройството ви. Затова бъдете внимателни с неща като пароли, подробности за начини на плащане, съобщения, снимки, аудио и видео."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Когато споделяте, записвате или предавате дадено приложение, Android има достъп до всичко, което се показва или възпроизвежда в него. Затова бъдете внимателни с неща като пароли, подробности за начини на плащане, съобщения, снимки, аудио и видео."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Стартиране"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Споделянето се поставя на пауза, когато превключвате приложенията"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Вместо това споделете приложението"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Превключване обратно"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Превключване на приложението"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Блокирано от системния ви администратор"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Заснемането на екрана е деактивирано от правило за устройството"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Изчистване на всички"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"На това устройство е инсталиран сертифициращ орган. Трафикът в защитената ви мрежа може да бъде наблюдаван или променян."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Администраторът ви е включил функцията за регистриране на мрежовата активност, която следи трафика на устройството ви."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Администраторът ви е включил функцията за регистриране на мрежовата активност, която следи трафика в служебния ви потребителски профил, но не и в личния."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Това устройство е свързано с интернет чрез <xliff:g id="VPN_APP">%1$s</xliff:g>. Активността ви в мрежата, включително имейлите и данните за сърфирането, е видима за системния ви администратор."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Това устройство е свързано с интернет чрез <xliff:g id="VPN_APP">%1$s</xliff:g>. Активността ви в мрежата, включително имейлите и данните за сърфирането, е видима за доставчика ви на VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Това устройство е свързано с интернет чрез <xliff:g id="VPN_APP">%1$s</xliff:g>. Активността ви в мрежата, включително имейлите и данните за сърфирането, е видима за системния ви администратор."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Това устройство е свързано с интернет чрез <xliff:g id="VPN_APP_0">%1$s</xliff:g> и <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Активността ви в мрежата, включително имейлите и данните за сърфирането, е видима за системния ви администратор."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Служебните ви приложения са свързани с интернет чрез <xliff:g id="VPN_APP">%1$s</xliff:g>. Активността ви в мрежата в тези приложения, включително имейлите и данните за сърфирането, е видима за системния ви администратор и доставчика ви на VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Личните ви приложения са свързани с интернет чрез <xliff:g id="VPN_APP">%1$s</xliff:g>. Активността ви в мрежата, включително имейлите и данните за сърфирането, е видима от доставчика ви на VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"деактивиране"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Звук и вибриране"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Настройки"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Силата на звука е намалена до по-безопасно ниво"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Нивото на силата на звука е било високо по-дълго, отколкото е препоръчително"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Силата на звука е намалена до по-безопасно ниво"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Нивото на силата на звука на слушалките е било високо по-дълго, отколкото е препоръчително"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Нивото на силата на звука на слушалките е надвишило безопасния лимит за тази седмица"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Продължете да слушате"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Намаляване на силата на звука"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Приложението е фиксирано"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Екранът ще се показва, докато не го освободите с докосване и задържане на бутона за връщане назад и този за общ преглед."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Екранът ще се показва, докато не го освободите с докосване и задържане на бутона за връщане назад и „Начало“."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Меню за включване/изключване"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Страница <xliff:g id="ID_1">%1$d</xliff:g> от <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Заключен екран"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Тел. се изкл. поради загряване"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Телефонът ви вече работи нормално.\nДокоснете за още информация"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Телефонът ви бе твърде горещ, затова се изключи с цел охлаждане. Вече работи нормално.\n\nТелефонът ви може да стане твърде горещ, ако:\n	• използвате приложения, които ползват голям обем ресурси (като например игри, видеосъдържание или приложения за навигация);\n	• изтегляте или качвате големи файлове;\n	• използвате устройството си при високи температури."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Вижте стъпките, които да предприемете"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Телефонът загрява"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Някои функции са ограничени, докато телефонът се охлажда.\nДокоснете за още информация"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Телефонът ви автоматично ще направи опит за охлаждане. Пак можете да го използвате, но той може да работи по-бавно.\n\nСлед като се охлади, ще работи нормално."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Вижте стъпките, които да предприемете"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Изключете устройството си"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Устройството ви се загрява до порта за зареждане. Ако е свързано със зарядно устройство или аксесоар за USB, изключете го и внимавайте, тъй като и кабелът може да е топъл."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Увеличаване на целия екран"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Увеличаване на част от екрана"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Отваряне на настройките за увеличението"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Затваряне на настройките за увеличение"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Плъзнете ъгъла за преоразмеряване"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Разрешаване на диагонално превъртане"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Преоразмеряване"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Докоснете, за да отворите функциите за достъпност. Персон./заменете бутона от настройките.\n\n"<annotation id="link">"Преглед на настройките"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Преместете бутона до края, за да го скриете временно"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Отмяна"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> пряк път бе премахнат"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Прекият път за „<xliff:g id="FEATURE_NAME">%s</xliff:g>“ бе премахнат"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# пряк път бе премахнат}other{# преки пътя бяха премахнати}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Преместване горе вляво"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Преместване горе вдясно"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"за премахване на означаването като любимо"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Преместете на позиция <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Контроли"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Изберете контроли за устройството, до които да осъществявате бърз достъп"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Задръжте и плъзнете, за да пренаредите контролите"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Всички контроли са премахнати"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Промените не са запазени"</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Опитайте с друг ПИН код"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Потвърдете промяната за <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Прекарайте пръст, за да видите повече"</string>
+    <string name="retry_face" msgid="416380073082560186">"Повторен опит за удостоверяване с лице"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Препоръките се зареждат"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Мултимедия"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"Скриване за <xliff:g id="APP_NAME">%1$s</xliff:g> на контролата за мултимедия?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"Скриване на мултимед. контрола за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"Текущата сесия за мултимедия не бе скрита."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Скриване"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Възобновяване"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Настройки"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> на <xliff:g id="ARTIST_NAME">%2$s</xliff:g> се възпроизвежда от <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> от <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> се изпълнява"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Пускане"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Пауза"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Предишен запис"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Високоговорители и екрани"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Предложени устройства"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Спиране на споделената ви сесия с цел преместване на мултимедията на друго устройство"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Спиране"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Как работи предаването"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Предаване"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Хората в близост със съвместими устройства с Bluetooth могат да слушат мултимедията, която предавате"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Не може да се запази. Опитайте отново."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Не може да се запази."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Използвайте поне 4 знака"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Използвайте по-малко от 16 знака"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Използвайте по-малко от <xliff:g id="LENGTH">%1$d</xliff:g> знака"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Номер на компилацията"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Номерът на компилацията е копиран в буферната памет."</string>
     <string name="basic_status" msgid="2315371112182658176">"Отворен разговор"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Възникна проблем при четенето на данните за нивото на батерията"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Докоснете за още информация"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Няма зададен будилник"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"въведете опция за заключване на екрана"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Сензор за отпечатъци"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"удостоверяване"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"вход в устройството"</string>
@@ -1034,7 +1063,7 @@
     <string name="mobile_data_connection_active" msgid="944490013299018227">"Свързано"</string>
     <string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Установена е временна връзка"</string>
     <string name="mobile_data_poor_connection" msgid="819617772268371434">"Слаба връзка"</string>
-    <string name="mobile_data_off_summary" msgid="3663995422004150567">"Връзката за мобилни данни няма да е автоматична"</string>
+    <string name="mobile_data_off_summary" msgid="3663995422004150567">"Връзката за мобилни данни няма да е автом."</string>
     <string name="mobile_data_no_connection" msgid="1713872434869947377">"Няма връзка"</string>
     <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Няма други налични мрежи"</string>
     <string name="all_network_unavailable" msgid="4112774339909373349">"Няма налични мрежи"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Асистент слуша"</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="note_task_button_label" msgid="8718616095800343136">"Водене на бележки"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Водене на бележки"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Водене на бележки, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Научете повече"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Научете повече на адрес <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Отваряне на <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Приложението е настроено."</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• В Wallet е добавена поне една карта."</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Инсталирано е приложение за камера."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Приложението е настроено."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Налице е поне едно устройство."</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"За да добавите пряк път към приложението Wallet, уверете се, че то е инсталирано"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"За да добавите пряк път към приложението Wallet, уверете се, че е добавена поне една карта"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"За да добавите пряк път към скенера за QR кодове, уверете се, че е инсталирано приложение за камера"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"За да добавите пряк път към приложението Home, уверете се, че то е инсталирано"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Налице е поне едно устройство."</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Изберете стандартно приложение за бележки, за да използвате прекия път за водене на бележки"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Избиране на приложение"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Докоснете и задръжте прекия път"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Отказ"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Превключване на екраните сега"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Свържете писалката към зарядно устройство"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Батерията на писалката е изтощена"</string>
     <string name="video_camera" msgid="7654002575156149298">"Видеокамера"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Не може да се извърши обаждане от този потребителски профил"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Служебните правила ви дават възможност да извършвате телефонни обаждания само от служебния потребителски профил"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Не можете да извършвате обаждания от лично приложение"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Организацията ви разрешава да извършвате обаждания само от служебни приложения"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Превключване към служебния потребителски профил"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Затваряне"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Инсталиране на служебно приложение за телефон"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Отказ"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Персонализ. на заключения екран"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Отключете, за да персонализирате заключения екран"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi не е налице"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Достъпът до камерата е блокиран"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Достъпът до камерата и микрофона е блокиран"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Достъпът до микрофона е блокиран"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Приоритетният режим е включен"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Функцията за активиране на Асистент е включена"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Задайте стандартно приложение за бележки от настройките"</string>
+    <string name="install_app" msgid="5066668100199613936">"Инсталиране на приложението"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Микрофон и камера"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Скорошно използване на приложението"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Вижте скорошния достъп"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Готово"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Разгъване и показване на опциите"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Свиване"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Затваряне на това приложение"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Затворихте <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Управление на услугата"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Управление на достъпа"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Използва се от телефонно обаждане"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Наскоро използвано в телефонно обаждане"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Използва се от <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Наскоро използвано от <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Използва се от <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Наскоро използвано от <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Използва се от <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Наскоро използвано от <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-bg/strings_tv.xml b/packages/SystemUI/res/values-bg/strings_tv.xml
deleted file mode 100644
index 6d578ad..0000000
--- a/packages/SystemUI/res/values-bg/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN е свързана"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"Връзката с VPN е прекратена"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Чрез <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Известия"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Няма известия"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Микрофонът записва"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Камерата записва"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Камерата и микрофонът записват"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Микрофонът спря да записва"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Камерата спря да записва"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Камерата и микрофонът спряха да записват"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Записването на екрана започна"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Записването на екрана бе спряно"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 9e029dc..aca0931 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g>, এই স্ক্রিনশট শনাক্ত করেছে।"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> এবং খোলা থাকা অন্য অ্যাপ এই স্ক্রিনশট শনাক্ত করেছে।"</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"নোটে যোগ করুন"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"স্ক্রিন রেকর্ডার"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"স্ক্রিন রেকর্ডার"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"স্ক্রিন রেকর্ডিং প্রসেস হচ্ছে"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"স্ক্রিন রেকর্ডিং সেশন চলার বিজ্ঞপ্তি"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"রেকর্ডিং শুরু করবেন?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"রেকর্ড করার সময়, আপনার স্ক্রিনে দেখানো বা ডিভাইসে চালানো যেকোনও ধরনের সংবেদনশীল তথ্য Android সিস্টেম ক্যাপচার করতে পারে। এর মধ্যে পাসওয়ার্ড, পেমেন্টের তথ্য, ফটো, মেসেজ এবং অডিও সম্পর্কিত তথ্য থাকে।"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"সম্পূর্ণ স্ক্রিন রেকর্ড করুন"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"একটিমাত্র অ্যাপ রেকর্ড করুন"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"আপনার রেকর্ড করার সময়, স্ক্রিনে দেখা যায় বা ডিভাইসে খেলা হয় এমন সব কিছু অ্যাক্সেস করার অনুমতি Android-এর আছে। তাই পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ বা অন্য সংবেদনশীল তথ্য সম্পর্কে সতর্ক থাকুন।"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"কোনও অ্যাপ আপনার রেকর্ড করার সময়, সেই অ্যাপে দেখা যায় বা খেলা হয় এমন সব কিছু অ্যাক্সেস করার অনুমতি Android-এর আছে। তাই পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ বা অন্য সংবেদনশীল তথ্য সম্পর্কে সতর্ক থাকুন।"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"রেকর্ড করা শুরু করুন"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"রেকর্ডিং শুরু করবেন?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"আপনি রেকর্ড করার সময়, স্ক্রিনে দৃশ্যমান বা ডিভাইসে চালানো সবকিছুই Android অ্যাক্সেস করতে পারবে। তাই পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ, ফটো এবং অডিও ও ভিডিওর মতো বিষয়ে সতর্ক থাকুন।"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"আপনি কোনও অ্যাপের মাধ্যমে রেকর্ড করার সময়, ওই অ্যাপে দেখানো বা চালানো হয় এমন সবকিছুই Android অ্যাক্সেস করতে পারবে। তাই পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ, ফটো এবং অডিও ও ভিডিওর মতো জিনিস সম্পর্কে সতর্ক থাকুন।"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"রেকর্ড করা শুরু করুন"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"অডিও রেকর্ড করুন"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"ডিভাইস অডিও"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"মিউজিক, কল এবং রিংটোনগুলির মতো আপনার ডিভাইস থেকে সাউন্ড"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"মাইক্রোফোন"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"ডিভাইস অডিও এবং মাইক্রোফোন"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"শুরু করুন"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"শুরু করুন"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"স্ক্রিন রেকর্ড করা হচ্ছে"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"স্ক্রিন এবং অডিও রেকর্ড করা হচ্ছে"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"স্ক্রিনে টাচ লোকেশন দেখুন"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"শেয়ার করুন"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"স্ক্রিন রেকর্ডিং সেভ করা হয়েছে"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"দেখতে ট্যাপ করুন"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"স্ক্রিন রেকডিং মুছে ফেলার সময় সমস্যা হয়েছে"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"স্ক্রিন রেকর্ডিং সেভ করার সময় কোনও সমস্যা হয়েছে"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"স্ক্রিন রেকর্ডিং শুরু করার সময় সমস্যা হয়েছে"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"ফুল-স্ক্রিনে দেখা হচ্ছে"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"বেরিয়ে যেতে উপর থেকে নিচের দিকে সোয়াইপ করুন।"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"বুঝেছি"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"ফিরুন"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"হোম"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"মেনু"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"ফেস যাচাই করা হয়েছে"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"কনফার্ম করা হয়েছে"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"সম্পূর্ণ করতে \'কনফার্ম করুন\' বোতামে ট্যাপ করুন"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ফেসের সাহায্যে আনলক করা হয়েছে। চালিয়ে যাওয়ার জন্য আনলক আইকনে প্রেস করুন।"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"ফেস দেখিয়ে আনলক করা হয়েছে"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ফেসের সাহায্যে আনলক করা হয়েছে। চালিয়ে যেতে প্রেস করুন।"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ফেস শনাক্ত করা হয়েছে। চালিয়ে যেতে প্রেস করুন।"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ফেস শনাক্ত করা হয়েছে। চালিয়ে যেতে আনলক আইকন প্রেস করুন।"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"প্রমাণীকৃত"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"যাচাইকরণ বাতিল করুন"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"পিন ব্যবহার করুন"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"প্যাটার্ন ব্যবহার করুন"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"পাসওয়ার্ড ব্যবহার করুন"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"আপনি পরের বারও ভুল প্যাটার্ন দিলে আপনার অফিস প্রোফাইল এবং তার ডেটা মুছে দেওয়া হবে।"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"আপনি পরের বারও ভুল পিন দিলে আপনার অফিস প্রোফাইল এবং তার ডেটা মুছে দেওয়া হবে।"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"আপনি পরের বারও ভুল পাসওয়ার্ড দিলে আপনার অফিস প্রোফাইল এবং তার ডেটা মুছে দেওয়া হবে।"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"সেট-আপ করুন"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"এখন নয়"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"সুরক্ষা ও পারফর্ম্যান্স উন্নত করতে এটি প্রয়োজন"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"\'ফিঙ্গারপ্রিন্ট আনলক\' আবার সেট-আপ করুন"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"ফিঙ্গারপ্রিন্ট আনলক"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"\'ফিঙ্গারপ্রিন্ট আনলক\' সেট-আপ করুন"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"\'ফিঙ্গারপ্রিন্ট আনলক\' আবার সেট-আপ করতে, আপনার বর্তমানে থাকা ফিঙ্গারপ্রিন্ট ইমেজ ও মডেল মুছে ফেলা হবে।\n\nমুছে ফেলা হয়ে গেলে, আপনার ফোন আনলক করতে অথবা নিজের পরিচয় যাচাই করার জন্য ফিঙ্গারপ্রিন্ট ব্যবহার করতে হলে আপনাকে আবার \'ফিঙ্গারপ্রিন্ট আনলক\' সেট-আপ করতে হবে।"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"\'ফিঙ্গারপ্রিন্ট আনলক\' আবার সেট-আপ করতে, আপনার বর্তমানে থাকা ফিঙ্গারপ্রিন্ট ইমেজ ও মডেল মুছে ফেলা হবে।\n\nমুছে ফেলা হয়ে গেলে, আপনার ফোন আনলক করতে অথবা নিজের পরিচয় যাচাই করার জন্য ফিঙ্গারপ্রিন্ট ব্যবহার করতে হলে আপনাকে আবার \'ফিঙ্গারপ্রিন্ট আনলক\' সেট-আপ করতে হবে।"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"\'ফিঙ্গারপ্রিন্ট আনলক\' সেট-আপ করা যায়নি। আবার চেষ্টা করতে সেটিংসে যান।"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"\'ফেস আনলক\' আবার সেট আপ করুন"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"ফেস আনলক"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"\'ফেস আনলক\' সেট-আপ করুন"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"\'ফেস আনলক\' আবার সেট-আপ করতে, বর্তমানে থাকা আপনার ফেস মডেলটি মুছে ফেলা হবে।\n\nফেস ব্যবহার করে আপনার ফোন আনলক করার জন্য আপনাকে আবার এই ফিচার সেট-আপ করতে হবে।"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"\'ফেস আনলক\' সেট-আপ করা যায়নি। আবার চেষ্টা করতে সেটিংসে যান।"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"আঙ্গুলের ছাপের সেন্সর স্পর্শ করুন"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"চালিয়ে যেতে \'আনলক করুন\' আইকনে প্রেস করুন"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"মুখ শনাক্ত করতে পারছি না। পরিবর্তে আঙ্গুলের ছাপ ব্যবহার করুন।"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"অডিও"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"হেডসেট"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ইনপুট"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"হিয়ারিং এড"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"হিয়ারিং এড"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"চালু করা হচ্ছে…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"নিজে থেকে ঘুরবে"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"অটো-রোটেট স্ক্রিন"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"ফেস দেখিয়ে আনলক করা হয়েছে"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"ফেস চিনে নেওয়া হয়েছে"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"আবার চেষ্টা করতে উপরের দিকে সোয়াইপ করুন"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"\'ফেস আনলক\' ফিচার আবার ব্যবহার করতে উপরের দিকে সোয়াইপ করুন"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC ব্যবহার করতে আনলক করুন"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"এই ডিভাইসটি আপনার প্রতিষ্ঠানের"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"এই ডিভাইসটি <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>-এর"</string>
@@ -382,24 +399,33 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"ব্যবহারকারী সরাবেন?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"এই ব্যবহারকারীর সমস্ত অ্যাপ্লিকেশান ও ডেটা মুছে ফেলা হবে।"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"সরান"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"রেকর্ড করা বা কাস্টিং করার সময় স্ক্রিনে দেখানো বা ডিভাইসে দেখানো সমস্ত তথ্যের অ্যাক্সেস <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-এর থাকবে। এর মধ্যে আপনার পাসওয়ার্ড, পেমেন্টের বিবরণ, ফটো, মেসেজ এবং যে অডিও আপনি চালান সেগুলি সম্পর্কিত তথ্য রয়েছে।"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"রেকর্ড করা বা কাস্টিং করার সময় আপনার স্ক্রিনে দেখানো বা ডিভাইসে চালানো হয়েছে এমন সমস্ত তথ্যের অ্যাক্সেস এই ফাংশন প্রদানকারী পরিষেবার কাছে থাকবে। এর মধ্যে আপনার পাসওয়ার্ড, পেমেন্টের বিবরণ, ফটো, মেসেজ এবং যে অডিও আপনি চালান সেগুলি সম্পর্কিত তথ্য রয়েছে।"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"রেকর্ড অথবা কাস্টিং শুরু করতে চান?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> দিয়ে রেকর্ড করা বা কাস্টিং শুরু করবেন?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-কে শেয়ার বা রেকর্ড করার অনুমতি দেবেন?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"সম্পূর্ণ স্ক্রিন"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"একটি মাত্র অ্যাপ"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"আপনার শেয়ার করা, রেকর্ড করা বা কাস্ট করার সময়, স্ক্রিনে দেখা যায় বা ডিভাইসে খেলা হয় এমন সব কিছু অ্যাক্সেস করার অনুমতি <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-এর আছে। তাই পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ বা অন্য সংবেদনশীল তথ্য সম্পর্কে সতর্ক থাকুন।"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"কোনও অ্যাপ আপনার শেয়ার করা, রেকর্ড করা বা কাস্ট করার সময়, সেই অ্যাপে দেখা যায় বা খেলা হয় এমন সব কিছু অ্যাক্সেস করার অনুমতি <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-এর আছে। তাই পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ বা অন্য সংবেদনশীল তথ্য সম্পর্কে সতর্ক থাকুন।"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"চালিয়ে যান"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"অ্যাপ শেয়ার বা রেকর্ড করা"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"এই অ্যাপকে শেয়ার বা রেকর্ড করার অনুমতি দেবেন?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"আপনি শেয়ার, রেকর্ড বা কাস্ট করার সময় স্ক্রিনে দৃশ্যমান বা ডিভাইসে চালানো হয়েছে এমন সব কিছুই এই অ্যাপ অ্যাক্সেস করতে পারবে। সেই জন্য পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ বা অন্য সংবেদনশীল তথ্য সম্পর্কে সতর্ক থাকুন।"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"কোনও অ্যাপের মাধ্যমে শেয়ার, রেকর্ড বা কাস্ট করার সময়, অ্যাপে দৃশ্যমান বা তাতে চালানো হয়েছে এমন সব কিছুই এই অ্যাপ অ্যাক্সেস করতে পারবে। সেই জন্য পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ বা অন্য সংবেদনশীল তথ্য সম্পর্কে সতর্ক থাকুন।"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"রেকর্ড বা কাস্ট করার সময় স্ক্রিনে বা ডিভাইসে দৃশ্যমান সব তথ্য <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> অ্যাক্সেস করতে পারবে। এর মধ্যে আপনার পাসওয়ার্ড, পেমেন্টের বিবরণ, ফটো, মেসেজ এবং আপনার চালানো অডিও সম্পর্কিত তথ্য রয়েছে।"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"রেকর্ডিং বা কাস্টিং শুরু করতে চান?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"যে পরিষেবা এই ফাংশন প্রদান করছে, সেটি রেকর্ড বা কাস্ট করার সময় আপনার স্ক্রিনে দৃশ্যমান বা ডিভাইসে চালানো হয়েছে এমন সব তথ্য অ্যাক্সেস করতে পারবে। এর মধ্যে আপনার পাসওয়ার্ড, পেমেন্টের বিবরণ, ফটো, মেসেজ এবং আপনার চালানো অডিও সম্পর্কিত তথ্য রয়েছে।"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"পুরো স্ক্রিন"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"একটি অ্যাপ"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"অ্যাপ শেয়ার বা রেকর্ড করুন"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ব্যবহার করে রেকর্ডিং বা কাস্টিং শুরু করবেন?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"আপনি শেয়ার, রেকর্ড বা কাস্ট করার সময়, স্ক্রিনে দৃশ্যমান বা ডিভাইসে চালানো সব কিছুই <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> অ্যাক্সেস করতে পারবে। তাই পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ, ফটো এবং অডিও ও ভিডিওর মতো বিষয়ে সতর্ক থাকুন।"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"আপনি কোনও অ্যাপ শেয়ার, রেকর্ড বা কাস্ট করার সময়, সেই অ্যাপে দেখা যায় বা চালানো হয় এমন সব কিছু <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> অ্যাক্সেস করতে পারবে। তাই পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ, ফটো এবং অডিও ও ভিডিওর মতো বিষয়ে সতর্ক থাকুন।"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"শুরু করুন"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"কাস্ট করা শুরু করবেন?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"আপনি কাস্ট করার সময়, স্ক্রিনে দৃশ্যমান বা ডিভাইসে চালানো সবকিছুই Android অ্যাক্সেস করতে পারবে। তাই পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ, ফটো এবং অডিও ও ভিডিওর মতো বিষয়ে সতর্ক থাকুন।"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"আপনি কোনও অ্যাপ কাস্ট করার সময়, ওই অ্যাপে দেখানো বা চালানো হয় এমন সবকিছুই Android অ্যাক্সেস করতে পারবে। তাই পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ, ফটো এবং অডিও ও ভিডিওর মতো বিষয়ে সতর্ক থাকুন।"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"কাস্ট করা শুরু করুন"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"শেয়ার করা শুরু করবেন?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"আপনি শেয়ার, রেকর্ড বা কাস্ট করার সময়, স্ক্রিনে দৃশ্যমান বা ডিভাইসে চালানো সব কিছুই Android অ্যাক্সেস করতে পারবে। তাই পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ, ফটো এবং অডিও ও ভিডিওর মতো বিষয়ে সতর্ক থাকুন।"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"আপনি কোনও অ্যাপ শেয়ার, রেকর্ড বা কাস্ট করার সময়, সেই অ্যাপে দেখা যায় বা চালানো হয় এমন সব কিছু Android অ্যাক্সেস করতে পারবে। তাই পাসওয়ার্ড, পেমেন্টের বিবরণ, মেসেজ, ফটো এবং অডিও ও ভিডিওর মতো বিষয়ে সতর্ক থাকুন।"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"শুরু করুন"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"আপনি অ্যাপ পাল্টানোর সময় শেয়ারিং পজ করা হয়"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"এর পরিবর্তে এই অ্যাপ শেয়ার করুন"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"আবার পাল্টান"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"অ্যাপ পাল্টান"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"আপনার আইটি অ্যাডমিন ব্লক করেছেন"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"ডিভাইস নীতির কারণে স্ক্রিন ক্যাপচার করার প্রসেস বন্ধ করা আছে"</string>
-    <string name="clear_all_notifications_text" msgid="348312370303046130">"সবকিছু সাফ করুন"</string>
-    <string name="manage_notifications_text" msgid="6885645344647733116">"পরিচালনা করুন"</string>
+    <string name="clear_all_notifications_text" msgid="348312370303046130">"সব মুছে দিন"</string>
+    <string name="manage_notifications_text" msgid="6885645344647733116">"ম্যানেজ করুন"</string>
     <string name="manage_notifications_history_text" msgid="57055985396576230">"ইতিহাস"</string>
     <string name="notification_section_header_incoming" msgid="850925217908095197">"নতুন"</string>
     <string name="notification_section_header_gentle" msgid="6804099527336337197">"আওয়াজ করবে না"</string>
@@ -408,7 +434,7 @@
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"সব নীরব বিজ্ঞপ্তি মুছুন"</string>
     <string name="dnd_suppressing_shade_text" msgid="5588252250634464042">"\'বিরক্ত করবে না\' দিয়ে বিজ্ঞপ্তি পজ করা হয়েছে"</string>
     <string name="media_projection_action_text" msgid="3634906766918186440">"এখন শুরু করুন"</string>
-    <string name="empty_shade_text" msgid="8935967157319717412">"কোনো বিজ্ঞপ্তি নেই"</string>
+    <string name="empty_shade_text" msgid="8935967157319717412">"কোনও বিজ্ঞপ্তি নেই"</string>
     <string name="no_unseen_notif_text" msgid="395512586119868682">"নতুন কোনও বিজ্ঞপ্তি নেই"</string>
     <string name="unlock_to_see_notif_text" msgid="7439033907167561227">"পুরনো বিজ্ঞপ্তি দেখতে আনলক করুন"</string>
     <string name="quick_settings_disclosure_parental_controls" msgid="2114102871438223600">"আপনার অভিভাবক এই ডিভাইস ম্যানেজ করেন"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"এই ডিভাইসে একটি সার্টিফিকেট কর্তৃপক্ষ ইনস্টল করা আছে। আপনার নিরাপদ নেটওয়ার্ক ট্রাফিকে নজর রাখা হতে পারে বা তাতে পরিবর্তন করা হতে পারে।"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"আপনার প্রশাসক নেটওয়ার্ক লগিং চালু করেছেন, যা আপনার ডিভাইসের ট্রাফিকের উপরে নজর রাখে।"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"আপনার অ্যাডমিন নেটওয়ার্ক লগ করা চালু করেছেন যা আপনার অফিস প্রোফাইলে ট্রাফিক মনিটর করে তবে ব্যক্তিগত প্রোফাইলে করে না।"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"<xliff:g id="VPN_APP">%1$s</xliff:g>-এর মাধ্যমে আপনার ডিভাইস ইন্টারনেটের সাথে কানেক্ট করা আছে। ইমেল ও ব্রাউজ করা ডেটা সহ নেটওয়ার্ক অ্যাক্টিভিটি আপনার আইটি অ্যাডমিন দেখতে পারবেন।"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"এই ডিভাইসটিকে <xliff:g id="VPN_APP">%1$s</xliff:g>-এর মাধ্যমে ইন্টারনেটের সাথে কানেক্ট করা আছে। ইমেল ও ব্রাউজিং ডেটা সহ আপনার নেটওয়ার্ক অ্যাক্টিভিটি VPN প্রদানকারী দেখতে পারবেন।"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"<xliff:g id="VPN_APP">%1$s</xliff:g>-এর মাধ্যমে এই ডিভাইসটি ইন্টারনেটের সাথে কানেক্ট করা আছে। ইমেল ও ব্রাউজ করা ডেটা সহ আপনার নেটওয়ার্ক অ্যাক্টিভিটি আইটি অ্যাডমিন দেখতে পারবেন।"</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"<xliff:g id="VPN_APP_0">%1$s</xliff:g> ও <xliff:g id="VPN_APP_1">%2$s</xliff:g>-এর মাধ্যমে এই ডিভাইস ইন্টারনেটের সাথে কানেক্ট করা আছে। ইমেল ও ব্রাউজ করা ডেটা সহ নেটওয়ার্ক অ্যাক্টিভিটি আপনার আইটি অ্যাডমিন দেখতে পারবেন।"</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"<xliff:g id="VPN_APP">%1$s</xliff:g>-এর মাধ্যমে আপনার অফিসের অ্যাপ ইন্টারনেটের সাথে কানেক্ট করা আছে। ইমেল ও ব্রাউজ করা ডেটা সহ অফিসের অ্যাপে করা নেটওয়ার্ক অ্যাক্টিভিটি আপনার আইটি অ্যাডমিন ও ভিপিএন প্রদানকারী দেখতে পারবেন।"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"<xliff:g id="VPN_APP">%1$s</xliff:g>-এর মাধ্যমে আপনার ব্যক্তিগত অ্যাপ ইন্টারনেটের সাথে কানেক্ট করা আছে। ইমেল ও ব্রাউজ করা ডেটা সহ নেটওয়ার্ক অ্যাক্টিভিটি আপনার ভিপিএন প্রদানকারী দেখতে পারবেন।"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"বন্ধ হবে"</string>
     <string name="sound_settings" msgid="8874581353127418308">"সাউন্ড ও ভাইব্রেশন"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"সেটিংস"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"নিরাপদ ভলিউমে কমানো হয়েছে"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"যতক্ষণ সাজেস্ট করা হয়েছে তার থেকে বেশি সময় ভলিউম হাই ছিল"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"ভলিউম কমিয়ে আরও নিরাপদ মাত্রায় নামানো হয়েছে"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"সাজেস্ট করা সময়ের চেয়ে অতিরিক্ত সময় ধরে হেডফোনের ভলিউম বেশি করা আছে"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"এই সপ্তাহে হেডফোনের ভলিউম নিরাপদ মাত্রা ছাড়িয়ে গেছে"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"শুনতে থাকুন"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"ভলিউম কমান"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"অ্যাপ পিন করা হয়েছে"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"এটি আপনি আনপিন না করা পর্যন্ত এটিকে প্রদর্শিত করবে৷ আনপিন করতে ফিরুন এবং ওভারভিউ স্পর্শ করে ধরে থাকুন।"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"এর ফলে আপনি এটি আনপিন না করা পর্যন্ত এটি দেখানো হতে থাকবে। আনপিন করতে \"ফিরে যান\" এবং \"হোম\" বোতামদুটি ট্যাপ করে ধরে রাখুন।"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"পাওয়ার মেনু"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g>টির মধ্যে <xliff:g id="ID_1">%1$d</xliff:g> নং পৃষ্ঠা"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"লক স্ক্রিন"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"আপনার ফোন গরম হওয়ার জন্য বন্ধ হয়ে গেছে"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"আপনার ফোন এখন ভালভাবে কাজ করছে।\nআরও তথ্যের জন্য ট্যাপ করুন"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"আপনার ফোন খুব বেশি গরম হয়েছিল বলে ঠাণ্ডা হওয়ার জন্য বন্ধ হয়ে গেছে। আপনার ফোন ঠিক-ঠাক ভাবে চলছে না।\n\nআপনার ফোন খুব বেশি গরম হয়ে যাবে যদি আপনি:\n	•এমন অ্যাপ ব্যবহার করলে যেটি আপনার ডিভাইসের রিসোর্স বেশি ব্যবহার করে (যেমন গেমিং, ভিডিও বা নেভিগেশন অ্যাপ)\n	• বড় ফাইল ডাউনলোড বা আপলোড করলে\n	• বেশি তাপমাত্রায় আপনার ফোন ব্যবহার করলে"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"ডিভাইস রক্ষণাবেক্ষণের ধাপগুলি দেখুন"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"ফোনটি গরম হচ্ছে"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"ফোন ঠাণ্ডা না হওয়া পর্যন্ত কিছু ফিচার কাজ করে না।\nআরও তথ্যের জন্য ট্যাপ করুন"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"আপনার ফোনটি নিজে থেকেই ঠাণ্ডা হওয়ার চেষ্টা করবে৷ আপনি তবুও আপনার ফোন ব্যবহার করতে পারেন, কিন্তু এটি একটু ধীরে চলতে পারে৷\n\nআপনার ফোনটি পুরোপুরি ঠাণ্ডা হয়ে গেলে এটি স্বাভাবিকভাবে চলবে৷"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"ডিভাইস রক্ষণাবেক্ষণের ধাপগুলি দেখুন"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"আপনার ডিভাইস আনপ্লাগ করা"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"চার্জিং পোর্টের কাছে আপনার ডিভাইসটি গরম হচ্ছে। এটি চার্জার বা ইউএসবি অ্যাক্সেসরির সাথে কানেক্ট করা থাকলে, আনপ্লাগ করুন এবং সতর্ক থাকুন কারণ কেবেলটিও গরম হতে পারে।"</string>
@@ -839,8 +863,9 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"সম্পূর্ণ স্ক্রিন বড় করে দেখা"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"স্ক্রিনের কিছুটা অংশ বড় করুন"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"বড় করে দেখার সেটিংস খুলুন"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"\'বড় করে দেখা\' সেটিংস বন্ধ করুন"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"ছোট বড় করার জন্য কোণ টেনে আনুন"</string>
-    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"কোণাকুণি স্ক্রল করার অনুমতি দেওয়া"</string>
+    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"কোনাকুনি স্ক্রল করার অনুমতি দেওয়া"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"ছোট বড় করা"</string>
     <string name="accessibility_change_magnification_type" msgid="666000085077432421">"বড় করে দেখার ধরন পরিবর্তন করা"</string>
     <string name="accessibility_magnification_end_resizing" msgid="4881690585800302628">"ছোট বড় করার সুবিধা বন্ধ করা"</string>
@@ -885,15 +910,14 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"পছন্দসই থেকে সরান"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> অবস্থানে সরান"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"নিয়ন্ত্রণ"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"ঝটপট অ্যাক্সেস করতে, ডিভাইস সংক্রান্ত কন্ট্রোল বেছে নিন"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"কন্ট্রোলগুলিকে আবার সাজানোর জন্য ধরে রেখে টেনে আনুন"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"সমস্ত কন্ট্রোল সরানো হয়েছে"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"পরিবর্তন সেভ করা হয়নি"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"অন্যান্য অ্যাপ দেখুন"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"আবার সাজান"</string>
     <string name="controls_favorite_add_controls" msgid="1221420435546694004">"কন্ট্রোল যোগ করুন"</string>
-    <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"’এডিট করুন’ বোতামে ফিরে যান"</string>
+    <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"এডিটিং মোডে ফিরে যান"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"কন্ট্রোল লোড করা যায়নি। অ্যাপ সেটিংসে কোনও পরিবর্তন করা হয়েছে কিনা তা ভাল করে দেখে নিতে <xliff:g id="APP">%s</xliff:g> অ্যাপ চেক করুন।"</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"মানানসই কন্ট্রোল উপলভ্য নেই"</string>
     <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"অন্য"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"আরেকটি পিন লিখে চেষ্টা করুন"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g>-এর জন্য পরিবর্তন কনফার্ম করুন"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"আরও দেখতে সোয়াইপ করুন"</string>
+    <string name="retry_face" msgid="416380073082560186">"আবার মুখ যাচাইকরণের চেষ্টা করুন"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"সাজেশন লোড করা হচ্ছে"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"মিডিয়া"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এর মিডিয়া কন্ট্রোল লুকিয়ে রাখতে চান?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"সেটিংস"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g>-এর <xliff:g id="SONG_NAME">%1$s</xliff:g> গানটি <xliff:g id="APP_LABEL">%3$s</xliff:g> অ্যাপে চলছে"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>টির মধ্যে <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>টি"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> এখন চালু রয়েছে"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"চালান"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"পজ করুন"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"আগের ট্র্যাক"</string>
@@ -967,8 +993,10 @@
     <string name="media_output_dialog_accessibility_title" msgid="4681741064190167888">"অডিও আউটপুটের জন্য উপলভ্য ডিভাইস।"</string>
     <string name="media_output_dialog_accessibility_seekbar" msgid="5332843993805568978">"ভলিউম"</string>
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
-    <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"স্পিকার &amp; ডিসপ্লে"</string>
+    <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"স্পিকার ও ডিসপ্লে"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"সাজেস্ট করা ডিভাইস"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"অন্য ডিভাইসে মিডিয়া সরাতে আপনার শেয়ার করা সেশন বন্ধ করুন"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"বন্ধ করুন"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"ব্রডকাস্ট কীভাবে কাজ করে"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"সম্প্রচার করুন"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"আশপাশে লোকজন যাদের মানানসই ব্লুটুথ ডিভাইস আছে, তারা আপনার ব্রডকাস্ট করা মিডিয়া শুনতে পারবেন"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"সেভ করা যাচ্ছে না। আবার চেষ্টা করুন।"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"সেভ করা যাচ্ছে না।"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"কমপক্ষে ৪টি অক্ষর ব্যবহার করুন"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"১৬টির চেয়ে কম অক্ষর ব্যবহার করুন"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g>টির চেয়ে কম অক্ষর ব্যবহার করুন"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"বিল্ড নম্বর"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"বিল্ড নম্বর ক্লিপবোর্ডে কপি করা হয়েছে।"</string>
     <string name="basic_status" msgid="2315371112182658176">"খোলা কথোপকথন"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"ব্যাটারির মিটারের রিডিং নেওয়ার সময় সমস্যা হয়েছে"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"আরও তথ্যের জন্য ট্যাপ করুন"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"কোনও অ্যালার্ম সেট করা নেই"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"স্ক্রিন লক খুলুন"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"ফিঙ্গারপ্রিন্ট সেন্সর"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"যাচাই করিয়ে নিন"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"ডিভাইস আনলক করুন"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant শুনছে"</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="note_task_button_label" msgid="8718616095800343136">"Notetaking"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"নোট নেওয়া"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"নোট নেওয়া, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"আরও জানুন"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"আরও জানতে <xliff:g id="URL">%s</xliff:g>-এ যান"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> খুলুন"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• অ্যাপ সেট-আপ করা হয়ে গেছে"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• অন্তত একটি কার্ড Wallet-এ যোগ করা হয়েছে"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• ক্যামেরা অ্যাপ ইনস্টল করুন"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• অ্যাপ সেট-আপ করা হয়ে গেছে"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• অন্তত একটি ডিভাইস উপলভ্য"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Wallet অ্যাপ, শর্টকাট হিসেবে যোগ করতে, অ্যাপ ইনস্টল করা আছে কিনা তা ভালভাবে দেখে নিন"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Wallet অ্যাপ, শর্টকাট হিসেবে যোগ করতে, অন্তত একটি কার্ড যোগ করা হয়েছে কিনা তা ভালভাবে দেখে নিন"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR কোড স্ক্যানার, শর্টকাট হিসেবে যোগ করতে, ক্যামেরা অ্যাপ ইনস্টল করা আছে কিনা তা ভালভাবে দেখে নিন"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home অ্যাপ, শর্টকাট হিসেবে যোগ করতে, অ্যাপ ইনস্টল করা আছে কিনা তা ভালভাবে দেখে নিন"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• অন্তত একটি ডিভাইস উপলভ্য আছে"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"নোট নেওয়ার শর্টকাট ব্যবহার করতে, ডিফল্ট কোনও নোট অ্যাপ বেছে নিন"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"অ্যাপ বেছে নিন"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"শর্টকাট টাচ করে ধরে রাখুন"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"বাতিল করুন"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"এখন স্ক্রিন পাল্টান"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"কোনও চার্জারের সাথে আপনার স্টাইলাস কানেক্ট করুন"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"স্টাইলাস ব্যাটারিতে চার্জ কম আছে"</string>
     <string name="video_camera" msgid="7654002575156149298">"ভিডিও ক্যামেরা"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"এই প্রোফাইল থেকে কল করা যাচ্ছে না"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"কাজ সংক্রান্ত নীতি, আপনাকে শুধুমাত্র অফিস প্রোফাইল থেকে কল করার অনুমতি দেয়"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"ব্যক্তিগত অ্যাপ থেকে কল করা যাবে না"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"আপনার সংস্থা শুধু অফিসের অ্যাপ থেকেই আপনাকে কল করার অনুমতি দেয়"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"অফিস প্রোফাইলে পাল্টে নিন"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"বন্ধ করুন"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"একটি অফিসের ফোন অ্যাপ ইনস্টল করুন"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"বাতিল করুন"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"লক স্ক্রিন কাস্টমাইজ করুন"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"লক স্ক্রিন কাস্টমাইজ করতে আনলক করুন"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"ওয়াই-ফাই উপলভ্য নয়"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"ক্যামেরার অ্যাক্সেস ব্লক করা আছে"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"ক্যামেরা এবং মাইক্রোফোনের অ্যাক্সেস ব্লক করা আছে"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"মাইক্রোফোনের অ্যাক্সেস ব্লক করা আছে"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"\'প্রায়োরিটি\' মোড চালু করা আছে"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"অ্যাসিস্ট্যান্ট আপনার কথা শোনার জন্য চালু করা আছে"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"\'সেটিংস\' থেকে ডিফল্ট নোট নেওয়ার অ্যাপ সেট করুন"</string>
+    <string name="install_app" msgid="5066668100199613936">"অ্যাপ ইনস্টল করুন"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"মাইক্রোফোন ও ক্যামেরা"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"সম্প্রতি ব্যবহার করা অ্যাপ"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"সাম্প্রতিক অ্যাক্সেস দেখুন"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"হয়ে গেছে"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"বড় করুন ও বিকল্প দেখান"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"আড়াল করুন"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"এই অ্যাপ বন্ধ করুন"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপ বন্ধ করা আছে"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"পরিষেবা ম্যানেজ করুন"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"অ্যাক্সেস ম্যানেজ করুন"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"ফোন কলে ব্যবহার করা হচ্ছে"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"সম্প্রতি ফোন কলে ব্যবহার করা হয়েছে"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপে ব্যবহার করা হচ্ছে"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"সম্প্রতি <xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপে ব্যবহার করা হয়েছে"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপে (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ব্যবহার করা হচ্ছে"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"সম্প্রতি <xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপে (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ব্যবহার করা হয়েছে"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপে (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ব্যবহার করা হচ্ছে"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"সম্প্রতি <xliff:g id="APP_NAME">%1$s</xliff:g> অ্যাপে (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ব্যবহার করা হয়েছে"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-bn/strings_tv.xml b/packages/SystemUI/res/values-bn/strings_tv.xml
deleted file mode 100644
index dcaefd97..0000000
--- a/packages/SystemUI/res/values-bn/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN কানেক্ট করা হয়েছে"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN ডিসকানেক্ট করা হয়েছে"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g>-এর মাধ্যমে"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"বিজ্ঞপ্তি"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"কোনও বিজ্ঞপ্তি নেই"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"মাইক্রোফোনে রেকর্ড করা হচ্ছে"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"ক্যামেরায় রেকর্ড করা হচ্ছে"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"ক্যামেরা ও মাইক্রোফোনে রেকর্ড করা হচ্ছে"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"মাইক্রোফোনে রেকর্ড করা বন্ধ হয়ে গেছে"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"ক্যামেরায় রেকর্ড করা বন্ধ হয়ে গেছে"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"ক্যামেরা ও মাইক্রোফোনে রেকর্ড করা বন্ধ হয়ে গেছে"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"স্ক্রিন রেকর্ড করা শুরু হয়েছে"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"স্ক্রিন রেকর্ড করা বন্ধ হয়েছে"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index 34dc7f5..1e4588d 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"Aplikacija <xliff:g id="APPNAME">%1$s</xliff:g> je otkrila ovaj snimak ekrana."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"Aplikacija <xliff:g id="APPNAME">%1$s</xliff:g> i druge otvorene aplikacije su otkrile ovaj snimak ekrana."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Dodaj u bilješku"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Snimač ekrana"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Snimač ekrana"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Obrađivanje snimka ekrana"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Obavještenje za sesiju snimanja ekrana je u toku"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Započeti snimanje?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Prilikom snimanja, Android sistem može snimiti sve osjetljive informacije koje su vidljive na vašem ekranu ili koje reproducirate na uređaju. To uključuje lozinke, informacije za plaćanje, fotografije, poruke i zvuk."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Snimaj cijeli ekran"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Snimaj jednu aplikaciju"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Dok snimate, Android ima pristup svemu što se vidi na ekranu ili reproducira na uređaju. Zato budite oprezni s lozinkama, detaljima o plaćanju, porukama i drugim osjetljivim informacijama."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Dok snimate aplikaciju, Android ima pristup svemu što se prikazuje ili reproducira u toj aplikaciji. Zato budite oprezni s lozinkama, detaljima o plaćanju, porukama i drugim osjetljivim informacijama."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Započni snimanje"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Pokrenuti snimanje?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Dok snimate, Android ima pristup svemu što je vidljivo na ekranu ili što se reproducira na uređaju. Stoga budite oprezni s informacijama kao što su lozinke, podaci o plaćanju, poruke, fotografije, zvukovi i videozapisi."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Dok snimate aplikaciju, Android ima pristup svemu što se prikazuje ili reproducira u toj aplikaciji. Stoga budite oprezni s informacijama kao što su lozinke, podaci o plaćanju, poruke, fotografije, zvukovi i videozapisi."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Pokreni snimanje"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Snimi zvučni zapis"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Zvuk na uređaju"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Zvuk s vašeg uređaja, naprimjer muzika, pozivi i melodije zvona"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Zvuk na uređaju i mikrofon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Započni"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Pokreni"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Snimanje ekrana"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Snimanje ekrana i zvuka"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Prikaži dodire na ekranu"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Dijeli"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Snimak ekrana je sačuvan"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Dodirnite da vidite"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Greška prilikom brisanja snimka ekrana"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Greška prilikom pohranjivanja snimka ekrana"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Greška pri pokretanju snimanja ekrana"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Prikazivanje preko cijelog ekrana"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Da izađete, prevucite s vrha nadolje."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Razumijem"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Nazad"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Dugme za početnu stranicu"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Dugme Meni"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Lice je provjereno"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Potvrđeno"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Dodirnite Potvrdi da završite"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Otključano licem. Pritisnite ikonu za otklj. da nastavite."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Otključano je licem"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Otključano licem. Pritisnite da nastavite."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Lice prepoznato. Pritisnite da nastavite."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Lice prepoznato. Pritisnite ikonu za otklj. da nastavite."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentificirano"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Otkažite autentifikaciju"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Koristi PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Koristi uzorak"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Koristi lozinku"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Ako u sljedećem pokušaju unesete neispravan uzorak, vaš radni profil i njegovi podaci će se izbrisati."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Ako u sljedećem pokušaju unesete neispravan PIN, vaš radni profil i njegovi podaci će se izbrisati."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Ako u sljedećem pokušaju unesete neispravnu lozinku, vaš radni profil i njegovi podaci će se izbrisati."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Postavi"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Ne sada"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Ovo je potrebno radi poboljšanja sigurnosti i performansi"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Ponovo postavite otključavanje otiskom prsta"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Otključavanje otiskom prsta"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Postavite otključavanje otiskom prsta"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Da ponovo postavite otključavanje otiskom prsta, trenutne slike i modeli otiska prsta će se izbrisati.\n\nNakon što se izbrišu, morat ćete ponovo postaviti otključavanje otiskom prsta da koristite otisak prsta za otključavanje telefona ili potvrdu identiteta."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Da ponovo postavite otključavanje otiskom prsta, trenutne slike i model otiska prsta će se izbrisati.\n\nNakon što se izbrišu, morat ćete ponovo postaviti otključavanje otiskom prsta da koristite otisak prsta za otključavanje telefona ili potvrdu identiteta."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Postavljanje otključavanja otiskom prsta nije uspjelo. Idite u Postavke da pokušate ponovo."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Ponovo postavite otključavanje licem"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Otključavanje licem"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Postavite otključavanje licem"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Da ponovo postavite otključavanje licem, trenutni model lica će se izbrisati.\n\nMorat ćete ponovo postaviti ovu funkciju da koristite lice za otključavanje telefona."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Postavljanje otključavanja licem nije uspjelo. Idite u Postavke da pokušate ponovo."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Dodirnite senzor za otisak prsta"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Nastavak pritiskanjem ikone za otključavanje"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Nije moguće prepoznati lice. Koristite otisak prsta."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Zvuk"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Slušalice"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Ulaz"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Slušni aparat"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Slušni aparati"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Uključivanje…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatsko rotiranje"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatsko rotiranje ekrana"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Otključano je licem"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Lice je prepoznato"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Prevucite prema gore da pokušate ponovo"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Prevucite nagore da ponovo isprobate otključavanje licem"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Otključajte da koristite NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Ovaj uređaj pripada vašoj organizaciji"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Ovaj uređaj pripada organizaciji <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> će imati pristup svim informacijama koje se prikazuju na ekranu ili koje se reproduciraju s vašeg uređaja za vrijeme snimanja ili emitiranja. To obuhvata informacije kao što su lozinke, detalji o plaćanju, fotografije, poruke i zvuk koji reproducirate."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Usluga koja pruža ovu funkciju će imati pristup svim informacijama koje se prikazuju na ekranu ili koje se reproduciraju s vašeg uređaja za vrijeme snimanja ili emitiranja. To obuhvata informacije kao što su lozinke, detalji o plaćanju, fotografije, poruke i zvuk koji reproducirate."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Započeti snimanje ili emitiranje?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Započeti snimanje ili emitiranje s aplikacijom <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Dozvoliti aplikaciji <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> da dijeli ili snima?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Cijeli ekran"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Jedna aplikacija"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Kada dijelite, snimate ili emitirate, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ima pristup svemu što se vidi na ekranu ili što se reproducira na uređaju. Zato budite oprezni s lozinkama, detaljima o plaćanju, porukama i drugim osjetljivim informacijama."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Kada aplikaciju dijelite, snimate ili emitirate, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ima pristup svemu što se prikazuje ili reproducira u toj aplikaciji. Zato budite oprezni s lozinkama, detaljima o plaćanju, porukama i drugim osjetljivim informacijama."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Nastavi"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Dijelite ili snimajte aplikaciju"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Dozvoliti aplikaciji da dijeli ili snima?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Kada dijelite, snimate ili emitirate, aplikacija ima pristup svemu što je vidljivo na ekranu ili što se reproducira na uređaju. Zato budite oprezni s lozinkama, detaljima o plaćanju, porukama i drugim osjetljivim informacijama."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Kada dijelite, snimate ili emitirate aplikaciju, ona ima pristup svemu što se prikazuje ili reproducira u toj aplikaciji. Zato budite oprezni s lozinkama, detaljima o plaćanju, porukama i drugim osjetljivim informacijama."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> će imati pristup svim informacijama koje su vidljive na ekranu ili koje se reproduciraju s uređaja tokom snimanja ili emitiranja. To uključuje informacije kao što su lozinke, detalji o plaćanju, fotografije, poruke i zvuk koji reproducirate."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Pokrenuti snimanje ili emitiranje?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Usluga koja pruža ovu funkciju će imati pristup svim informacijama koje su vidljive na ekranu ili koje se reproduciraju s uređaja tokom snimanja ili emitiranja. To uključuje informacije kao što su lozinke, detalji o plaćanju, fotografije, poruke i zvuk koji reproducirate."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Cijeli ekran"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Jedna aplikacija"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Dijelite ili snimite aplikaciju"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Pokrenuti snimanje ili emitiranje uz aplikaciju <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Kada dijelite, snimate ili emitirate, aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ima pristup svemu što je vidljivo na ekranu ili što se reproducira na uređaju. Stoga budite oprezni s informacijama kao što su lozinke, podaci o plaćanju, poruke, fotografije, zvukovi i videozapisi."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Kada dijelite, snimate ili emitirate aplikaciju, aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ima pristup svemu što se prikazuje ili reproducira u toj aplikaciji. Stoga budite oprezni s informacijama kao što su lozinke, podaci o plaćanju, poruke, fotografije, zvukovi i videozapisi."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Pokreni"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Pokrenuti emitiranje?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Kada emitirate, Android ima pristup svemu što je vidljivo na ekranu ili što se reproducira na uređaju. Stoga budite oprezni s informacijama kao što su lozinke, podaci o plaćanju, poruke, fotografije, zvukovi i videozapisi."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Kada emitirate aplikaciju, Android ima pristup svemu što se prikazuje ili reproducira u toj aplikaciji. Stoga budite oprezni s informacijama kao što su lozinke, podaci o plaćanju, poruke, fotografije, zvukovi i videozapisi."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Pokreni emitiranje"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Pokrenuti dijeljenje?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Kada dijelite, snimate ili emitirate, Android ima pristup svemu što je vidljivo na ekranu ili što se reproducira na uređaju. Stoga budite oprezni s informacijama kao što su lozinke, podaci o plaćanju, poruke, fotografije, zvukovi i videozapisi."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Kada dijelite, snimate ili emitirate aplikaciju, Android ima pristup svemu što se prikazuje ili reproducira u toj aplikaciji. Stoga budite oprezni s informacijama kao što su lozinke, podaci o plaćanju, poruke, fotografije, zvukovi i videozapisi."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Pokreni"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Dijeljenje se pauzira kada promijenite aplikaciju"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Umjesto toga, dijeli aplikaciju"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Vrati se"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Promjena aplikacije"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blokirao je vaš IT administrator"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Snimanje ekrana je onemogućeno pravilima uređaja"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Očisti sve"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"CA certifikat je instaliran na ovom uređaju. Vaš saobraćaj preko sigurne mreže može se pratiti."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Vaš administrator je uključio zapisivanje na mreži, čime se prati saobraćaj na vašem uređaju."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Administrator je uključio zapisivanje na mreži, čime se nadzire saobraćaj na vašem radnom profilu, ali ne i na ličnom profilu."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Uređaj je povezan s internetom putem aplikacije <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša mrežna aktivnost, uključujući e-poštu i podatke o pregledanju, je vidljiva vašem IT administratoru."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Uređaj je povezan s internetom putem aplikacije <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša mrežna aktivnost, uključujući e-poštu i podatke o pregledanju, je vidljiva vašem pružaocu VPN usluga."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Uređaj je povezan s internetom putem aplikacije <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša aktivnost na mreži, uključujući e-poruke i podatke o pregledanju, je vidljiva vašem IT administratoru."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Uređaj je povezan s internetom putem aplikacija <xliff:g id="VPN_APP_0">%1$s</xliff:g> i <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Vaša mrežna aktivnost, uključujući e-poštu i podatke o pregledanju, je vidljiva vašem IT administratoru."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Vaše poslovne aplikacije su povezane s internetom putem aplikacije <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša mrežna aktivnost u poslovnim aplikacijama, uključujući e-poštu i podatke o pregledanju, je vidljiva IT administratoru i pružaocu VPN usluga."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Lične aplikacije su povezane s internetom putem aplikacije <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša mrežna aktivnost, uključujući e-poštu i podatke o pregledanju, je vidljiva vašem pružaocu VPN usluga."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"onemogući"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Zvuk i vibracija"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Postavke"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Stišano je na sigurniju jačinu zvuka"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Jačina zvuka je bila glasna duže nego što se preporučuje"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Zvuk je smanjen na sigurniju jačinu"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Jačina zvuka slušalica je bila visoka duže od preporučenog"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Jačina zvuka slušalica je premašila sigurno ograničenje za ovu sedmicu"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Nastavite slušati"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Smanji jačinu zvuka"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Aplikacija je zakačena"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Ekran ostaje prikazan ovako dok ga ne otkačite. Da ga otkačite, dodirnite i držite dugme Nazad."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Na ovaj način ekran ostaje prikazan dok ga ne otkačite. Da otkačite ekran, dodirnite i držite dugme Nazad i Početna."</string>
@@ -738,22 +768,16 @@
     <string name="accessibility_quick_settings_edit" msgid="1523745183383815910">"Urediti raspored postavki."</string>
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Meni napajanja"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Stranica <xliff:g id="ID_1">%1$d</xliff:g> od <xliff:g id="ID_2">%2$d</xliff:g>"</string>
-    <string name="tuner_lock_screen" msgid="2267383813241144544">"Zaključavanje ekrana"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telefon se isključio zbog pregrijavanja"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Vaš telefon sada radi normalno.\nDodirnite za više informacija"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Vaš telefon se pregrijao, pa se isključio da se ohladi. Telefon sada radi normalno.\n\nTelefon se može pregrijati ako:\n	• Koristite aplikacije koje troše puno resursa (kao što su aplikacije za igranje, videozapise ili navigaciju)\n	• Preuzimate ili otpremate velike fajlove\n	• Koristite telefon na visokim temperaturama"</string>
+    <string name="tuner_lock_screen" msgid="2267383813241144544">"Zaključani ekran"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Pogledajte korake za zaštitu"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefon se pregrijava"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Neke funkcije su ograničene dok se telefon hladi.\nDodirnite za više informacija"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Vaš telefon će se automatski pokušati ohladiti. I dalje možete koristi telefon, ali će možda raditi sporije.\n\nNakon što se ohladi, telefon će normalno raditi."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Pogledajte korake za zaštitu"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Iskopčajte uređaj"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Uređaj se zagrijava u blizini priključka za punjenje. Ako je povezan s punjačem ili USB dodatkom, iskopčajte ga i vodite računa jer i kabl može biti topao."</string>
     <string name="high_temp_alarm_help_care_steps" msgid="5017002218341329566">"Prikaz koraka za zaštitu"</string>
-    <string name="lockscreen_shortcut_left" msgid="1238765178956067599">"Prečica lijevo"</string>
-    <string name="lockscreen_shortcut_right" msgid="4138414674531853719">"Prečica desno"</string>
-    <string name="lockscreen_unlock_left" msgid="1417801334370269374">"Prečica lijevo također otključava"</string>
-    <string name="lockscreen_unlock_right" msgid="4658008735541075346">"Prečica desno također otključava"</string>
+    <string name="lockscreen_shortcut_left" msgid="1238765178956067599">"Lijeva prečica"</string>
+    <string name="lockscreen_shortcut_right" msgid="4138414674531853719">"Desna prečica"</string>
+    <string name="lockscreen_unlock_left" msgid="1417801334370269374">"Lijeva prečica također otključava"</string>
+    <string name="lockscreen_unlock_right" msgid="4658008735541075346">"Desna prečica također otključava"</string>
     <string name="lockscreen_none" msgid="4710862479308909198">"Ništa"</string>
     <string name="tuner_launch_app" msgid="3906265365971743305">"Pokrenite aplikaciju <xliff:g id="APP">%1$s</xliff:g>"</string>
     <string name="tuner_other_apps" msgid="7767462881742291204">"Ostale aplikacije"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Uvećavanje prikaza preko cijelog ekrana"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Uvećavanje dijela ekrana"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Otvori postavke uvećavanja"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Zatvori postavke uvećavanja"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Prevucite ugao da promijenite veličinu"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Dozvoli dijagonalno klizanje"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Promijeni veličinu"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"uklonite iz omiljenog"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Premjesti na poziciju <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrole"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Odaberite kontrole uređaja za brzi pristup"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Držite i prevucite da preuredite kontrole"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Sve kontrole su uklonjene"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Promjene nisu sačuvane"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Prikaži druge aplikacije"</string>
-    <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Preuređivanje"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Dodaj kontrole"</string>
+    <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Preuredi"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Dodajte kontrole"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Nazad na uređivanje"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"Učitavanje kontrola nije uspjelo. Provjerite aplikaciju <xliff:g id="APP">%s</xliff:g> da se uvjerite da postavke aplikacije nisu izmijenjene."</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"Kompatibilne kontrole nisu dostupne"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Pokušajte s drugim PIN-om"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Potvrdite promjenu za uređaj <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Prevucite da vidite više"</string>
+    <string name="retry_face" msgid="416380073082560186">"Ponovni pokušaj autentifikacije licem"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Učitavanje preporuka"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Mediji"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Sakriti kontrolu medija za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Postavke"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Pjesma <xliff:g id="SONG_NAME">%1$s</xliff:g> izvođača <xliff:g id="ARTIST_NAME">%2$s</xliff:g> se reproducira pomoću aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> od <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je pokrenuta"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Reproduciranje"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pauziranje"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Prethodna numera"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Zvučnici i ekrani"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Predloženi uređaji"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Zaustavite dijeljenu sesiju da premjestite medij na drugi uređaj"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Zaustavi"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Kako funkcionira emitiranje"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Emitirajte"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Osobe u vašoj blizini s kompatibilnim Bluetooth uređajima mogu slušati medijske sadržaje koje emitirate"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Nije moguće sačuvati. Pokušajte ponovo."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Nije moguće sačuvati."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Koristite najmanje 4 znaka"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Koristite manje od 16 znakova"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Koristite manje od <xliff:g id="LENGTH">%1$d</xliff:g> znak(ov)a"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Broj verzije"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Broj verzije je kopiran u međumemoriju."</string>
     <string name="basic_status" msgid="2315371112182658176">"Otvoreni razgovor"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Došlo je do problema prilikom očitavanja mjerača stanja baterije"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Dodirnite za više informacija"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Nema nijednog alarma"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"unos zaključavanja ekrana"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Senzor za otisak prsta"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autentificiranje"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"pristup uređaju"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Asistent sluša"</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="note_task_button_label" msgid="8718616095800343136">"Pisanje bilješki"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Pisanje bilješki"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Pisanje bilješki, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1097,15 +1127,17 @@
     <string name="log_access_confirmation_title" msgid="4843557604739943395">"Dozvoliti aplikaciji <xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> da pristupa svim zapisnicima uređaja?"</string>
     <string name="log_access_confirmation_allow" msgid="752147861593202968">"Dozvoli jednokratni pristup"</string>
     <string name="log_access_confirmation_deny" msgid="2389461495803585795">"Nemoj dozvoliti"</string>
-    <string name="log_access_confirmation_body" msgid="6883031912003112634">"Zapisnici uređaja bilježe šta se dešava na uređaju. Aplikacije mogu koristiti te zapisnike pronađu i riješe probleme.\n\nNeki zapisnici mogu sadržavati osjetljive podatke, zato pristup svim zapisnicima uređaja dozvolite samo aplikacijama kojima vjerujete. \n\nAko ne dozvolite ovoj aplikaciji da pristupa svim zapisnicima uređaja, ona i dalje može pristupati svojim zapisnicima. Proizvođač uređaja će možda i dalje biti u stanju pristupiti nekim zapisnicima ili podacima na uređaju."</string>
+    <string name="log_access_confirmation_body" msgid="6883031912003112634">"Zapisnici uređaja bilježe šta se dešava na uređaju. Aplikacije mogu koristiti te zapisnike da pronađu i riješe probleme.\n\nNeki zapisnici mogu sadržavati osjetljive podatke, zato pristup svim zapisnicima uređaja dozvolite samo aplikacijama kojima vjerujete. \n\nAko ne dozvolite ovoj aplikaciji da pristupa svim zapisnicima uređaja, ona i dalje može pristupati svojim zapisnicima. Proizvođač uređaja će možda i dalje biti u stanju pristupiti nekim zapisnicima ili podacima na uređaju."</string>
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Saznajte više"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Saznajte više na <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Otvori aplikaciju <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Aplikacija je postavljena"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Najmanje jedna kartica je dodana u Novčanik"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Instalirajte aplikaciju kamere"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Aplikacija je postavljena"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Dostupan je najmanje jedan uređaj"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Da dodate aplikaciju Novčanik kao prečicu, instalirajte aplikaciju"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Da dodate aplikaciju Novčanik kao prečicu, dodajte barem jednu karticu"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Da dodate skener QR koda kao prečicu, instalirajte aplikaciju kamere"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Da dodate aplikaciju Home kao prečicu, instalirajte aplikaciju"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Dostupan je najmanje jedan uređaj"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Odaberite zadanu aplikaciju za bilješke da koristite prečicu za zapisivanje bilješki"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Odaberi aplikaciju"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Dodirnite i zadržite prečicu"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Otkaži"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Promijenite ekran sada"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Priključite pisaljku na punjač"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Baterija pisaljke je slaba"</string>
     <string name="video_camera" msgid="7654002575156149298">"Video kamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Nije moguće pozvati s ovog profila"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Radna pravila vam dozvoljavaju upućivanje telefonskih poziva samo s radnog profila"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Nije moguće pozvati iz lične aplikacije"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Vaša organizacija vam dozvoljava da upućujete pozive samo iz poslovnih aplikacija"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Pređite na radni profil"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Zatvori"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instalirajte poslovnu aplikaciju za telefon"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Otkaži"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Prilagodi zaključavanje ekrana"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Otključajte da prilagodite zaključavanje ekrana"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"WiFi mreža nije dostupna"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Način rada Prioriteti je uključen"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Pažnja Asistenta je uključena"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Postavite zadanu aplikaciju za bilješke u Postavkama"</string>
+    <string name="install_app" msgid="5066668100199613936">"Instaliraj aplikaciju"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon i kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Nedavno koristila aplikacija"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Prikaži nedavni pristup"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Gotovo"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Proširite i prikažite opcije"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Sužavanje"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Zatvori ovu aplikaciju"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je zatvorena"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Upravljajte uslugom"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Upravljajte pristupom"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Koristi telefonski poziv"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Nedavno je korišteno u telefonskom pozivu"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Koristi aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Nedavno je koristila aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Koristi aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Nedavno je koristila aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Koristi aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Nedavno je koristila aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-bs/strings_tv.xml b/packages/SystemUI/res/values-bs/strings_tv.xml
deleted file mode 100644
index db8c5b3..0000000
--- a/packages/SystemUI/res/values-bs/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN je povezan"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"Veza s VPN-om je prekinuta"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Putem: <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Obavještenja"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Nema obavještenja"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofon snima"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera snima"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera i mikrofon snimaju"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofon je prestao snimati"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kamera je prestala snimati"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kamera i mikrofon su prestali snimati"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Snimanje ekrana je pokrenuto"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Snimanje ekrana je zaustavljeno"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 1a8239b..a25cda6 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Activa l\'USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Més informació"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Captura de pantalla"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock desactivat"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Desbloqueig ampliat desactivat"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ha enviat una imatge"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"S\'està desant la captura de pantalla..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"S\'està desant la captura al perfil de treball…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> ha detectat aquesta captura de pantalla."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> i altres aplicacions obertes han detectat aquesta captura de pantalla."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Afegeix a una nota"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Gravació de pantalla"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Gravació de pantalla"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Processant gravació de pantalla"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notificació en curs d\'una sessió de gravació de la pantalla"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Vols iniciar la gravació?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Durant la gravació, el sistema Android pot capturar qualsevol informació sensible que es mostri a la pantalla o que es reprodueixi al dispositiu. Això inclou contrasenyes, informació de pagament, fotos, missatges i àudio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Grava la pantalla completa"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Grava una sola aplicació"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Mentre graves contingut, Android pot accedir a tot el que es veu a la pantalla o que es reprodueix al dispositiu. Per això cal que vagis amb compte amb les contrasenyes, les dades de pagament, els missatges o qualsevol altra informació sensible."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Mentre graves una aplicació, Android té accés a qualsevol cosa que es vegi a la pantalla o que es reprodueixi a l\'aplicació. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges o altra informació sensible."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Inicia la gravació"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Vols iniciar una gravació?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Mentre graves, Android té accés a qualsevol cosa que es vegi a la pantalla o que es reprodueixi al dispositiu. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges, les fotos i l\'àudio i el vídeo."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Mentre graves una aplicació, Android té accés a qualsevol cosa que es mostri o que es reprodueixi en aquella aplicació. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges, les fotos i l\'àudio i el vídeo."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Inicia una gravació"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Grava l\'àudio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Àudio del dispositiu"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"So del dispositiu, com ara música, trucades i sons de trucada"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Micròfon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Àudio del dispositiu i micròfon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Inicia"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Inicia"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"S\'està gravant la pantalla"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"S\'estan gravant la pantalla i l\'àudio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Mostra els tocs a la pantalla"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Comparteix"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"S\'ha desat la gravació de pantalla"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Toca per veure-la"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"S\'ha produït un error en suprimir la gravació de la pantalla"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"S\'ha produït un error en desar la gravació de la pantalla"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"S\'ha produït un error en iniciar la gravació de pantalla"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Visualització en pantalla completa"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Per sortir, llisca cap avall des de la part superior."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Entesos"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Enrere"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Inici"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menú"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Cara autenticada"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmat"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Toca Confirma per completar"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"S\'ha desbloquejat amb la cara. Prem la icona per continuar."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"S\'ha desbloquejat amb la cara"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"S\'ha desbloquejat amb la cara. Prem per continuar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"S\'ha reconegut la cara. Prem per continuar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"S\'ha reconegut la cara. Prem la icona per continuar."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenticat"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Cancel·la l\'autenticació"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Utilitza el PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Utilitza el patró"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Utilitza la contrasenya"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Si tornes a introduir un patró incorrecte, se suprimirà el perfil de treball i les dades que contingui."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Si tornes a introduir un PIN incorrecte, se suprimirà el perfil de treball i les dades que contingui."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Si tornes a introduir una contrasenya incorrecta, se suprimirà el perfil de treball i les dades que contingui."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Configura"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Ara no"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Aquesta acció és necessària per millorar la seguretat i el rendiment"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Torna a configurar Desbloqueig amb empremta digital"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Desbloqueig amb empremta digital"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Configura Desbloqueig amb empremta digital"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Per tornar a configurar Desbloqueig amb empremta digital, les imatges i els models actuals de la teva empremta digital se suprimiran.\n\nDesprés de suprimir-los, hauràs de tornar a configurar Desbloqueig amb empremta digital per utilitzar la teva empremta digital i desbloquejar el telèfon o verificar la teva identitat."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Per tornar a configurar Desbloqueig amb empremta digital, les imatges i el model actuals de la teva empremta digital se suprimiran.\n\nDesprés de suprimir-los, hauràs de tornar a configurar Desbloqueig amb empremta digital per utilitzar la teva empremta digital i desbloquejar el telèfon o verificar la teva identitat."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"No s\'ha pogut configurar el desbloqueig amb empremta digital. Ves a Configuració per tornar-ho a provar."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Torna a configurar Desbloqueig facial"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Desbloqueig facial"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Configura Desbloqueig facial"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Per tornar a configurar Desbloqueig facial, el model facial actual se suprimirà.\n\nHauràs de tornar configurar aquesta funció per desbloquejar el telèfon utilitzant la cara."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"No s\'ha pogut configurar el desbloqueig facial. Ves a Configuració per tornar-ho a provar."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Toca el sensor d\'empremtes digitals"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Prem la icona de desbloqueig per continuar"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"No podem detectar la cara. Usa l\'empremta digital."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Àudio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Auriculars"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Audiòfons"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audiòfons"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"S\'està activant…"</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"S\'ha desbloquejat amb la cara"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"S\'ha reconegut la cara"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Llisca cap a dalt per tornar-ho a provar"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Llisca cap amunt per tornar a provar Desbloqueig facial"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Desbloqueja per utilitzar l\'NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Aquest dispositiu pertany a la teva organització"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Aquest dispositiu pertany a <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"Vols suprimir l\'usuari?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Totes les aplicacions i les dades d\'aquest usuari se suprimiran."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Suprimeix"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tindrà accés a tota la informació que es mostri a la pantalla o que es reprodueixi al dispositiu mentre graves o emets contingut. Això inclou contrasenyes, dades de pagament, fotos, missatges i àudio."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"El servei que ofereix aquesta funció tindrà accés a tota la informació que es mostri a la pantalla o que es reprodueixi al dispositiu mentre graves o emets contingut. Això inclou contrasenyes, dades de pagament, fotos, missatges i àudio."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Vols començar a gravar o emetre contingut?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Vols començar a gravar o emetre contingut amb <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Vols permetre que <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> comparteixi o gravi contingut?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Tota la pantalla"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Una sola aplicació"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Quan estàs compartint, gravant o emetent, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> té accés a qualsevol cosa que es vegi a la pantalla o que es reprodueixi al dispositiu. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges o altra informació sensible."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Mentre comparteixes, graves o emets contingut, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> pot accedir a tot el que es veu a la pantalla o que es reprodueix a l\'aplicació. Per això cal que vagis amb compte amb les contrasenyes, les dades de pagament, els missatges o qualsevol altra informació sensible."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continua"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Comparteix o grava una aplicació"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Vols permetre que aquesta aplicació comparteixi o gravi contingut?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Quan estàs compartint, gravant o emetent, aquesta aplicació té accés a qualsevol cosa que es vegi a la pantalla o que es reprodueixi al dispositiu. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges o altra informació sensible."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Quan estàs compartint, gravant o emetent, aquesta aplicació té accés a qualsevol cosa que es vegi a la pantalla o que es reprodueixi a l\'aplicació. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges o altra informació sensible."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tindrà accés a tota la informació que es veu en pantalla o que es reprodueix al dispositiu mentre graves o emets contingut, com ara contrasenyes, detalls dels pagaments, fotos, missatges i àudio que reprodueixis."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Vols començar a gravar o emetre contingut?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"El servei que ofereix aquesta funció tindrà accés a tota la informació visible a la teva pantalla o que es reprodueix al dispositiu mentre graves o emets contingut, com ara les contrasenyes, les dades de pagament, les fotos, els missatges i àudio que reprodueixis."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Tota la pantalla"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Una sola aplicació"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Comparteix o grava una aplicació"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Vols començar a gravar o emetre contingut amb <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Quan comparteixes, graves o emets contingut, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> té accés a qualsevol cosa que es vegi a la pantalla o que es reprodueixi al dispositiu. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges, les fotos i l\'àudio i el vídeo."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Quan comparteixes, graves o emets contingut, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> té accés a qualsevol cosa que es vegi a la pantalla o que es reprodueixi a l\'aplicació. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges, les fotos i l\'àudio i el vídeo."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Inicia"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Vols iniciar una emissió?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Quan emets contingut, Android té accés a qualsevol cosa que es vegi a la pantalla o que es reprodueixi al dispositiu. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges, les fotos i l\'àudio i el vídeo."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Quan emets una aplicació, Android té accés a qualsevol cosa que es mostri o que es reprodueixi en aquella aplicació. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges, les fotos i l\'àudio i el vídeo."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Inicia una emissió"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Vols començar a compartir?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Quan comparteixes, graves o emets contingut, Android té accés a qualsevol cosa que es vegi a la pantalla o que es reprodueixi al dispositiu. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges, les fotos i l\'àudio i el vídeo."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Quan comparteixes, graves o emets contingut, Android té accés a qualsevol cosa que es vegi a la pantalla o que es reprodueixi a l\'aplicació. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges, les fotos i l\'àudio i el vídeo."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Inicia"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"La compartició es posa en pausa quan canvies d\'aplicació"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Comparteix aquesta aplicació"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Torna a canviar"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Canvi d\'aplicació"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Bloquejat per l\'administrador de TI"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Les captures de pantalla estan desactivades per la política de dispositius"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Esborra-ho tot"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"S\'ha instal·lat una autoritat de certificació en aquest dispositiu. És possible que el trànsit de xarxa segura se supervisi o es modifiqui."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"L\'administrador ha activat el registre de xarxa, que supervisa el trànsit del teu dispositiu."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"L\'administrador ha activat el registre de xarxa, que monitora el trànsit al teu perfil de treball, però no al personal."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Aquest dispositiu es connecta a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. El teu administrador de TI pot veure l\'activitat de la teva xarxa, inclosos els correus electrònics i les dades de navegació."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Aquest dispositiu es connecta a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. El teu proveïdor de VPN pot veure l\'activitat de la teva xarxa, inclosos els correus electrònics i les dades de navegació."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Aquest dispositiu es connecta a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. El teu administrador de TI pot veure l\'activitat de la teva xarxa, inclosos els correus electrònics i les dades de navegació."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Aquest dispositiu es connecta a Internet a través de <xliff:g id="VPN_APP_0">%1$s</xliff:g> i <xliff:g id="VPN_APP_1">%2$s</xliff:g>. El teu administrador de TI pot veure la teva activitat de xarxa, inclosos els correus electrònics i les dades de navegació."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Les aplicacions de treball es connecten a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. El teu administrador de TI i el teu proveïdor de VPN poden veure la teva activitat de xarxa en aplicacions de treball, inclosos els correus electrònics i les dades de navegació."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Les aplicacions personals es connecten a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. El teu proveïdor de VPN pot veure l\'activitat de la teva xarxa, inclosos els correus electrònics i les dades de navegació."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"desactivar"</string>
     <string name="sound_settings" msgid="8874581353127418308">"So i vibració"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Configuració"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"El volum s\'ha abaixat a un nivell més segur"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"El volum ha estat elevat durant més temps del recomanat"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"El volum s\'ha abaixat a un nivell més segur"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"El volum dels auriculars ha estat elevat durant més temps del recomanat"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"El volum dels auriculars ha superat el límit de seguretat d\'aquesta setmana"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Continua escoltant"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Abaixa el volum"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"L\'aplicació està fixada"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Aquest element es continuarà mostrant fins que deixis de fixar-lo. Per fer-ho, toca i mantén premudes els botons Enrere i Aplicacions recents."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Aquest element es continuarà mostrant fins que deixis de fixar-lo. Per fer-ho, mantén premuts els botons Enrere i Inici."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menú d\'engegada"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Pàgina <xliff:g id="ID_1">%1$d</xliff:g> (<xliff:g id="ID_2">%2$d</xliff:g> en total)"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Pantalla de bloqueig"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telèfon apagat per la calor"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Ara el telèfon funciona correctament.\nToca per obtenir més informació"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"El telèfon s\'havia sobreescalfat i s\'ha apagat per refredar-se. Ara funciona amb normalitat.\n\nEs pot sobreescalfar si:\n	• utilitzes aplicacions que consumeixen molts recursos (com ara, videojocs, vídeos o aplicacions de navegació);\n	• baixes o penges fitxers grans;\n	• l\'utilitzes amb temperatures altes."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Mostra els passos de manteniment"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"El telèfon s\'està escalfant"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Algunes funcions estan limitades mentre el telèfon es refreda.\nToca per obtenir més informació"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"El telèfon provarà de refredar-se automàticament. Podràs continuar utilitzant-lo, però és possible que funcioni més lentament.\n\nUn cop s\'hagi refredat, funcionarà amb normalitat."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Mostra els passos de manteniment"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Desconnecta el dispositiu"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"El dispositiu s\'està escalfant a prop del port de càrrega. Si està connectat a un carregador o a un accessori USB, desconnecta\'l. Ves amb compte perquè el cable també pot haver-se escalfat."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Amplia la pantalla completa"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Amplia una part de la pantalla"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Obre la configuració de l\'ampliació"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Tanca la configuració de l\'ampliació"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Arrossega el cantó per canviar la mida"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Permet el desplaçament en diagonal"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Canvia la mida"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Toca per obrir funcions d\'accessibilitat. Personalitza o substitueix el botó a Configuració.\n\n"<annotation id="link">"Mostra"</annotation>"."</string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Mou el botó a l\'extrem per amagar-lo temporalment"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Desfés"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"S\'ha suprimit la drecera <xliff:g id="FEATURE_NAME">%s</xliff:g>"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"S\'ha suprimit la drecera a <xliff:g id="FEATURE_NAME">%s</xliff:g>"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{S\'ha suprimit # drecera}many{S\'han suprimit # dreceres}other{S\'han suprimit # dreceres}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mou a dalt a l\'esquerra"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mou a dalt a la dreta"</string>
@@ -885,9 +910,8 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"suprimir dels preferits"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Mou a la posició <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
-    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mantén premut i arrossega per reorganitzar els controls"</string>
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Tria a quins controls del dispositiu vols accedir ràpidament"</string>
+    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mantén premuts els controls i arrossega\'ls per reordenar-los"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"S\'han suprimit tots els controls"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Els canvis no s\'han desat"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Mostra altres aplicacions"</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Prova un altre PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Confirma el canvi per a <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Llisca per veure\'n més"</string>
+    <string name="retry_face" msgid="416380073082560186">"Torna a provar l\'autenticació facial"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Carregant les recomanacions"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Multimèdia"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"Vols amagar aquest control multimèdia per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"Amagar aquest control multimèdia per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"La sessió multimèdia actual no es pot amagar."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Amaga"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Reprèn"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Configuració"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>) s\'està reproduint des de l\'aplicació <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> s\'està executant"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Reprodueix"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Posa en pausa"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Pista anterior"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Altaveus i pantalles"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Dispositius suggerits"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Atura la sessió compartida per moure contingut multimèdia a un altre dispositiu"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Atura"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Com funciona l\'emissió"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Emet"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Les persones properes amb dispositius Bluetooth compatibles poden escoltar el contingut multimèdia que emets"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"No es pot desar. Torna-ho a provar."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"No es pot desar."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Utilitza 4 caràcters com a mínim"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Utilitza menys de 16 caràcters"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Utilitza menys de <xliff:g id="LENGTH">%1$d</xliff:g> caràcters"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Número de compilació"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"El número de compilació s\'ha copiat al porta-retalls."</string>
     <string name="basic_status" msgid="2315371112182658176">"Conversa oberta"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Hi ha hagut un problema en llegir el mesurador de la bateria"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Toca per obtenir més informació"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Cap alarma definida"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"utilitza el bloqueig de pantalla"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Sensor d\'empremtes digitals"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autenticar"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"accedir al dispositiu"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"L\'assistent t\'escolta"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificació}many{# notificacions}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="note_task_button_label" msgid="8718616095800343136">"Presa de notes"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Presa de notes"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Presa de notes, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Més informació"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Més informació a <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Obre <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• L\'aplicació està configurada."</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Almenys s\'ha afegit una targeta a Wallet."</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Tens una aplicació de càmera."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• L\'aplicació està configurada."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Almenys un dispositiu està disponible."</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Per afegir l\'aplicació Wallet com a drecera, assegura\'t que estigui instal·lada"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Per afegir l\'aplicació Wallet com a drecera, assegura\'t que s\'hagi afegit almenys una targeta"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Per afegir l\'escàner de codis QR com a drecera, assegura\'t que hi hagi una aplicació de càmera instal·lada"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Per afegir l\'aplicació Home com a drecera, assegura\'t que estigui instal·lada"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Almenys un dispositiu està disponible."</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Selecciona una aplicació de notes predeterminada per utilitzar la drecera de presa de notes"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Selecciona una aplicació"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Mantén premuda la drecera"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Cancel·la"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Canvia de pantalla ara"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Connecta el llapis òptic a un carregador"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Bateria del llapis òptic baixa"</string>
     <string name="video_camera" msgid="7654002575156149298">"Càmera de vídeo"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"No es pot trucar des d\'aquest perfil"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"La teva política de treball et permet fer trucades només des del perfil de treball"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"No pots trucar des d\'una aplicació personal"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"La teva organització només et permet fer trucades des d\'aplicacions de treball"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Canvia al perfil de treball"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Tanca"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instal·la una aplicació de treball per a telèfons"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Cancel·la"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Personalitza pantalla de bloqueig"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Desbloqueja per personalitzar la pantalla de bloqueig"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"No hi ha cap Wi‑Fi disponible"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"La càmera està bloquejada"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"La càmera i el micròfon estan bloquejats"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"El micròfon està bloquejat"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"El mode Prioritat està activat"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"L\'Assistent està activat"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Defineix l\'aplicació de notes predeterminada a Configuració"</string>
+    <string name="install_app" msgid="5066668100199613936">"Instal·la l\'aplicació"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Micròfon i càmera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Ús recent de l\'aplicació"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Mostra l\'accés recent"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Fet"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Desplega i mostra opcions"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Replega"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Tanca aquesta aplicació"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"S\'ha tancat <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Gestiona el servei"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Gestiona l\'accés"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"En ús per una trucada"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Utilitzat recentment en una trucada"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"En ús per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Utilitzat recentment per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"En ús per <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Utilitzat recentment per <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"En ús per <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Utilitzat recentment per <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ca/strings_tv.xml b/packages/SystemUI/res/values-ca/strings_tv.xml
deleted file mode 100644
index 972d38b..0000000
--- a/packages/SystemUI/res/values-ca/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"La VPN està connectada"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"La VPN està desconnectada"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Mitjançant <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notificacions"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Cap notificació"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"El micròfon està gravant"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"La càmera està gravant"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"La càmera i el micròfon estan gravant"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"El micròfon ha deixat de gravar"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"La càmera ha deixat de gravar"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"La càmera i el micròfon han deixat de gravar"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"La gravació de la pantalla ha començat"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"La gravació de la pantalla s\'ha aturat"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index c26bd88..638c26a 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Aktivovat USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Další informace"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Snímek obrazovky"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Prodloužení odemknutí deaktivováno"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Rozšíření odemknutí deaktivováno"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"odesílá obrázek"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Ukládání snímku obrazovky..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Ukládání snímku obrazovky do pracovního profilu…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"Aplikace <xliff:g id="APPNAME">%1$s</xliff:g> objevila tento snímek obrazovky."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> a ostatní otevřené aplikace objevily tento snímek obrazovky."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Přidat do poznámky"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Rekordér obrazovky"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Rekordér obrazovky"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Záznam obrazovky se zpracovává"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Trvalé oznámení o relaci nahrávání"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Spustit nahrávání?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Při nahrávání může systém Android zaznamenávat citlivé údaje, které jsou viditelné na obrazovce nebo které jsou přehrávány na zařízení. Týká se to hesel, údajů o platbě, fotek, zpráv a zvuků."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Nahrát celou obrazovku"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Nahrát samostatnou aplikaci"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Během nahrávání má Android přístup k veškerému obsahu, který je viditelný na obrazovce nebo se přehrává v zařízení. Dejte proto pozor na hesla, platební údaje, zprávy nebo jiné citlivé informace."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Během nahrávání aplikace má Android přístup k veškerému obsahu, který je v této aplikaci zobrazen nebo přehráván. Dejte proto pozor na hesla, platební údaje, zprávy nebo jiné citlivé informace."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Spustit nahrávání"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Začít nahrávat?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Během nahrávání má Android přístup k veškerému obsahu, který je viditelný na obrazovce nebo se přehrává v zařízení. Buďte proto opatrní s věcmi, jako jsou hesla, platební údaje, zprávy, fotografie, zvuk a video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Během nahrávání aplikace má Android přístup k veškerému obsahu, který je v dané aplikaci zobrazen nebo přehráván. Buďte proto opatrní s věcmi, jako jsou hesla, platební údaje, zprávy, fotografie, zvuk a video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Začít nahrávat"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Nahrávat zvuk"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Zvuk zařízení"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Zvuk ze zařízení, například hudba, hovory a vyzvánění"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Zvuk zařízení a mikrofon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Spustit"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Začít"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Nahrávání obrazovky"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Nahrávání obrazovky a zvuku"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Zobrazovat klepnutí na obrazovku"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Sdílet"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Nahrávka obrazovky se uložila"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Klepnutím nahrávku zobrazíte"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Při mazání záznamu obrazovky došlo k chybě"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Při ukládání záznamu obrazovky došlo k chybě"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Při spouštění nahrávání obrazovky došlo k chybě"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Zobrazování přes celou obrazovku"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Režim ukončíte přejetím prstem shora dolů."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Rozumím"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Zpět"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Domů"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Obličej byl ověřen"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Potvrzeno"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Ověření dokončíte klepnutím na Potvrdit"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Odemknuto obličejem. Klepněte na ikonu odemknutí."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Odemknuto obličejem"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Odemknuto obličejem. Pokračujte stisknutím."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Obličej rozpoznán. Pokračujte stisknutím."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Obličej rozpoznán. Klepněte na ikonu odemknutí."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Ověřeno"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Zrušit ověření"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Použít kód PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Použít gesto"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Použít heslo"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Pokud při příštím pokusu zadáte nesprávné gesto, váš pracovní profil a přidružená data budou smazána."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Pokud při příštím pokusu zadáte nesprávný PIN, váš pracovní profil a přidružená data budou smazána."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Pokud při příštím pokusu zadáte nesprávné heslo, váš pracovní profil a přidružená data budou smazána."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Nastavit"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Teď ne"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Je to vyžadováno ke zlepšení zabezpečení a výkonu"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Opětovné nastavení odemknutí otiskem prstu"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Odemknutí otiskem prstu"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Nastavení odemknutí otiskem prstu"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Aby bylo možné znovu nastavit odemknutí otiskem prstu, aktuální snímky a modely otisků prstů se smažou.\n\nPo smazání bude nutné funkci nastavit znovu, aby bylo možné odemykat telefon a ověřovat vaši totožnosti pomocí otisku prstu."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Aby bylo možné znovu nastavit odemknutí otiskem prstu, aktuální snímky a model otisků prstů se smažou.\n\nPo smazání bude nutné funkci nastavit znovu, aby bylo možné odemykat telefon a ověřovat vaši totožnosti pomocí otisku prstu."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Odemknutí otiskem prstu se nepodařilo nastavit. Pokud to chcete zkusit znovu, přejděte do Nastavení."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Nastavte odemknutí obličejem znovu"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Odemknutí obličejem"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Nastavit odemknutí obličejem"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Aby bylo možné znovu nastavit odemknutí obličejem, aktuální model obličeje se smaže.\n\nFunkci bude nutné nastavit znovu, aby telefon bylo možné odemykat obličejem."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Odemknutí obličejem se nepodařilo nastavit. Pokud to chcete zkusit znovu, přejděte do Nastavení."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Dotkněte se snímače otisků prstů"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Klepněte na ikonu odemknutí"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Obličej se nepodařilo rozpoznat. Použijte místo něj otisk prstu."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,10 +248,10 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Zvuk"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Sluchátka"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Vstup"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Naslouchátka"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Naslouchátka"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Zapínání…"</string>
     <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="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatické otáč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>
@@ -259,7 +275,7 @@
     <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Převrácení barev"</string>
     <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Korekce barev"</string>
     <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"Velikost písma"</string>
-    <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Správa uživatelů"</string>
+    <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Spravovat uživatele"</string>
     <string name="quick_settings_done" msgid="2163641301648855793">"Hotovo"</string>
     <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zavřít"</string>
     <string name="quick_settings_connected" msgid="3873605509184830379">"Připojeno"</string>
@@ -295,7 +311,7 @@
     <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string>
     <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC je vypnuto"</string>
     <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC je zapnuto"</string>
-    <string name="quick_settings_screen_record_label" msgid="8650355346742003694">"Záznam obrazovky"</string>
+    <string name="quick_settings_screen_record_label" msgid="8650355346742003694">"Rekordér obrazovky"</string>
     <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"Spustit"</string>
     <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"Ukončit"</string>
     <string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Režim jedné ruky"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Odemknuto obličejem"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Obličej rozpoznán"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Přejetím nahoru to zkusíte znovu"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Přejeďte nahoru a zopakujte odemknutí obličejem"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC vyžaduje odemknutou obrazovku"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Toto zařízení patří vaší organizaci"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Toto zařízení patří organizaci <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -379,30 +396,39 @@
     <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>
     <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_title" msgid="9124124694835811874">"Odebrat 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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Aplikace <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> bude mít přístup ke všem informacím, které jsou viditelné na obrazovce nebo které jsou přehrávány ze za řízení při nahrávání nebo odesílání. Týká se to i hesel, údajů o platbě, fotek, zpráv a přehrávaných zvuků."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Služba, která tuto funkci poskytuje, bude mít při nahrávání nebo odesílání přístup ke všem informacím, které jsou viditelné na obrazovce nebo které jsou přehrávány ze zařízení. Týká se to i hesel, údajů o platbě, fotek, zpráv a přehrávaných zvuků."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Začít nahrávat nebo odesílat?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Začít nahrávat nebo odesílat s aplikací <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Povolit aplikaci <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sdílení nebo nahrávání?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Celá obrazovka"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Samostatná aplikace"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Když sdílíte, nahráváte nebo odesíláte obsah, aplikace <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> má přístup k veškerému obsahu, který je viditelný na obrazovce nebo se přehrává v zařízení. Dejte proto pozor na hesla, platební údaje, zprávy nebo jiné citlivé informace."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Když sdílíte, nahráváte nebo odesíláte aplikaci, aplikace <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> má přístup k veškerému obsahu, který je v této aplikaci zobrazen nebo přehráván. Dejte proto pozor na hesla, platební údaje, zprávy nebo jiné citlivé informace."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Pokračovat"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Sdílení nebo nahrání aplikace"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Povolit této aplikaci sdílet nebo nahrávat?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Když sdílíte, nahráváte nebo odesíláte obsah, aplikace má přístup ke všemu, co je viditelné na obrazovce nebo se přehrává v zařízení. Dejte proto pozor na hesla, platební údaje, zprávy nebo jiné citlivé informace."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Když sdílíte, nahráváte nebo odesíláte aplikaci, aplikace má přístup ke všemu, co je v této aplikaci zobrazeno nebo se přehrává. Dejte proto pozor na hesla, platební údaje, zprávy nebo jiné citlivé informace."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Aplikace <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> bude mít přístup ke všem informacím, které jsou viditelné na obrazovce nebo které jsou přehrávány ze za řízení při nahrávání nebo odesílání. Týká se to i hesel, údajů o platbě, fotek, zpráv a přehrávaných zvuků."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Začít nahrávat nebo odesílat?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Služba, která tuto funkci poskytuje, bude mít při nahrávání nebo odesílání přístup ke všem informacím, které jsou viditelné na obrazovce nebo které jsou přehrávány ze zařízení. Týká se to i hesel, údajů o platbě, fotek, zpráv a přehrávaných zvuků."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Celá obrazovka"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Jedna aplikace"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Sdílení nebo nahrání aplikace"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Začít nahrávat nebo odesílat pomocí aplikace <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Během sdílení, nahrávání nebo odesílání má <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> přístup k veškerému obsahu, který je viditelný na obrazovce nebo se přehrává v zařízení. Buďte proto opatrní s věcmi, jako jsou hesla, platební údaje, zprávy, fotografie, zvuk a video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Během sdílení, nahrávání nebo odesílání aplikace má <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> přístup k veškerému obsahu, který je v dané aplikaci zobrazen nebo přehráván. Buďte proto opatrní s věcmi, jako jsou hesla, platební údaje, zprávy, fotografie, zvuk a video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Začít"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Začít odesílat?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Během odesílání má Android přístup ke všemu, co je viditelné na obrazovce nebo se přehrává v zařízení. Buďte proto opatrní s věcmi, jako jsou hesla, platební údaje, zprávy, fotografie, zvuk a video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Během odesílání aplikace má Android přístup k veškerému obsahu, který je v dané aplikaci zobrazen nebo přehráván. Buďte proto opatrní s věcmi, jako jsou hesla, platební údaje, zprávy, fotografie, zvuk a video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Začít odesílat"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Začít sdílet?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Během sdílení, nahrávání nebo odesílání má Android přístup k veškerému obsahu, který je viditelný na obrazovce nebo se přehrává v zařízení. Buďte proto opatrní s věcmi, jako jsou hesla, platební údaje, zprávy, fotografie, zvuk a video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Během sdílení, nahrávání nebo odesílání aplikace má Android přístup k veškerému obsahu, který je v dané aplikaci zobrazen nebo přehráván. Buďte proto opatrní s věcmi, jako jsou hesla, platební údaje, zprávy, fotografie, zvuk a video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Začít"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Když přepnete aplikace, sdílení se pozastaví"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Sdílet aplikaci"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Přepnout zpět"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Přepnutí aplikace"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blokováno administrátorem IT"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Záznam obrazovky je zakázán zásadami zařízení"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Smazat vše"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Spravovat"</string>
     <string name="manage_notifications_history_text" msgid="57055985396576230">"Historie"</string>
     <string name="notification_section_header_incoming" msgid="850925217908095197">"Nové"</string>
-    <string name="notification_section_header_gentle" msgid="6804099527336337197">"Tichá oznámení"</string>
+    <string name="notification_section_header_gentle" msgid="6804099527336337197">"Tichý režim"</string>
     <string name="notification_section_header_alerting" msgid="5581175033680477651">"Oznámení"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Konverzace"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Vymazat všechna tichá oznámení"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"V zařízení je nainstalována certifikační autorita. Zabezpečený síťový provoz může být sledován nebo upravován."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Administrátor zapnul protokolování sítě, které monitoruje síťový provoz v zařízení."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Administrátor zapnul protokolování sítě, které monitoruje síťový provoz ve vašem pracovním profilu (ale ne v osobním)."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Toto zařízení je připojeno k internetu prostřednictvím aplikace <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaší síťovou aktivitu (jako jsou e-maily a údaje o prohlížení) vidí administrátor IT."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Toto zařízení je připojeno k internetu prostřednictvím aplikace <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaší síťovou aktivitu (jako jsou e-maily a údaje o prohlížení) vidí poskytovatel VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Toto zařízení je připojeno k internetu prostřednictvím aplikace <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaší síťovou aktivitu (jako jsou e-maily a údaje o prohlížení) vidí administrátor IT."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Toto zařízení je připojeno k internetu prostřednictvím aplikací <xliff:g id="VPN_APP_0">%1$s</xliff:g> a <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Vaší síťovou aktivitu (jako jsou e-maily a údaje o prohlížení) vidí administrátor IT."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Vaše pracovní aplikace jsou připojeny k internetu prostřednictvím aplikace <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaší síťovou aktivitu v pracovních aplikacích (jako jsou e-maily a údaje o prohlížení) vidí administrátor IT a poskytovatel VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Vaše osobní aplikace jsou připojeny k internetu prostřednictvím aplikace <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaší síťovou aktivitu (jako jsou e-maily a údaje o prohlížení) vidí poskytovatel VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"deaktivovat"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Zvuk a vibrace"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Nastavení"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Ztišeno na bezpečnější hlasitost"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Hlasitost byla vysoká déle, než je doporučeno"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Hlasitost byla snížena na bezpečnou úroveň"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Hlasitost sluchátek byla vysoká déle, než je doporučeno"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Hlasitost sluchátek překročila bezpečný limit pro tento týden"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Poslouchat dál"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Snížit hlasitost"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Aplikace je připnutá"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Obsah bude připnut v zobrazení, dokud jej neuvolníte. Uvolníte jej stisknutím a podržením tlačítek Zpět a Přehled."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Obsah bude připnut v zobrazení, dokud ho neuvolníte. Uvolníte ho podržením tlačítek Zpět a Plocha."</string>
@@ -542,7 +572,7 @@
     <string name="inline_done_button" msgid="6043094985588909584">"Hotovo"</string>
     <string name="inline_ok_button" msgid="603075490581280343">"Použít"</string>
     <string name="inline_turn_off_notifications" msgid="8543989584403106071">"Vypnout oznámení"</string>
-    <string name="notification_silence_title" msgid="8608090968400832335">"Tiché"</string>
+    <string name="notification_silence_title" msgid="8608090968400832335">"Tichý režim"</string>
     <string name="notification_alert_title" msgid="3656229781017543655">"Výchozí"</string>
     <string name="notification_automatic_title" msgid="3745465364578762652">"Automaticky"</string>
     <string name="notification_channel_summary_low" msgid="4860617986908931158">"Žádný zvuk ani vibrace"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Nabídka vypínače"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Stránka <xliff:g id="ID_1">%1$d</xliff:g> z <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Obrazovka uzamčení"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telefon se vypnul z důvodu zahřátí"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Nyní telefon funguje jako obvykle.\nKlepnutím zobrazíte další informace"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefon byl příliš zahřátý, proto se vypnul, aby vychladl. Nyní telefon funguje jako obvykle.\n\nTelefon se může příliš zahřát v těchto případech:\n	• používání náročných aplikací (např. her, videí nebo navigace),\n	• stahování nebo nahrávání velkých souborů,\n	• používání telefonu při vysokých teplotách."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Zobrazit pokyny, co dělat"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefon se zahřívá"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Některé funkce jsou při chladnutí telefonu omezeny.\nKlepnutím zobrazíte další informace"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Telefon se automaticky pokusí vychladnout. Lze jej nadále používat, ale může být pomalejší.\n\nAž telefon vychladne, bude fungovat normálně."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Zobrazit pokyny, co dělat"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Odpojte zařízení"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Zařízení se zahřívá v oblasti nabíjecího portu. Pokud je připojeno k nabíječce nebo příslušenství USB, odpojte ho (dejte pozor, kabel také může být zahřátý)."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Zvětšit celou obrazovku"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Zvětšit část obrazovky"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Otevřít nastavení zvětšení"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Zavřít nastavení zvětšení"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Velikost změníte přetažením rohu"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Povolit diagonální posouvání"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Změnit velikost"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Klepnutím otevřete funkce přístupnosti. Tlačítko lze upravit nebo nahradit v Nastavení.\n\n"<annotation id="link">"Nastavení"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Přesunutím tlačítka k okraji ho dočasně skryjete"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Vrátit zpět"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Zkratka <xliff:g id="FEATURE_NAME">%s</xliff:g> byla odstraněna"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Zkratka pro <xliff:g id="FEATURE_NAME">%s</xliff:g> byla odstraněna"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{Byla odstraněna # zkratka}few{Byly odstraněny # zkratky}many{Bylo odstraněno # zkratky}other{Bylo odstraněno # zkratek}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Přesunout vlevo nahoru"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Přesunout vpravo nahoru"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"odeberete z oblíbených"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Přesunout na pozici <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Ovládací prvky"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Vyberte ovládací prvky, které chcete mít po ruce"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Ovládací prvky můžete uspořádat podržením a přetažením"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Všechny ovládací prvky byly odstraněny"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Změny nebyly uloženy"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Zkuste jiný PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Ověřte změnu v zařízení <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Přejetím prstem zobrazíte další položky"</string>
+    <string name="retry_face" msgid="416380073082560186">"Znovu zkusit ověření obličejem"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Načítání doporučení"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Média"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Skrýt toto ovládání médií aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Nastavení"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Skladba <xliff:g id="SONG_NAME">%1$s</xliff:g> od interpreta <xliff:g id="ARTIST_NAME">%2$s</xliff:g> hrajte z aplikace <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> z <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> je spuštěna"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Přehrát"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pozastavit"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Předchozí skladba"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Reproduktory a displeje"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Navrhovaná zařízení"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Ukončí sdílenou relaci a bude možné přesunout médium do jiného zařízení"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Zastavit"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Jak vysílání funguje"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Vysílání"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Lidé ve vašem okolí s kompatibilními zařízeními Bluetooth mohou poslouchat média, která vysíláte"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Uložení se nezdařilo. Zkuste to znovu."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Uložení se nezdařilo."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Heslo musí mít alespoň 4 znaky"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Použijte méně než 16 znaků"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Použijte méně než <xliff:g id="LENGTH">%1$d</xliff:g> znaků"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Číslo sestavení"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Číslo sestavení bylo zkopírováno do schránky."</string>
     <string name="basic_status" msgid="2315371112182658176">"Otevřít konverzaci"</string>
@@ -989,7 +1017,7 @@
     <string name="select_conversation_text" msgid="3376048251434956013">"Klepnutím na konverzaci ji přidáte na plochu"</string>
     <string name="no_conversations_text" msgid="5354115541282395015">"Tady se zobrazí vaše nedávné konverzace"</string>
     <string name="priority_conversations" msgid="3967482288896653039">"Prioritní konverzace"</string>
-    <string name="recent_conversations" msgid="8531874684782574622">"Poslední konverzace"</string>
+    <string name="recent_conversations" msgid="8531874684782574622">"Nedávné konverzace"</string>
     <string name="days_timestamp" msgid="5821854736213214331">"Před <xliff:g id="DURATION">%1$s</xliff:g> dny"</string>
     <string name="one_week_timestamp" msgid="4925600765473875590">"Před týdnem"</string>
     <string name="two_weeks_timestamp" msgid="9111801081871962155">"Před 2 týdny"</string>
@@ -1009,11 +1037,11 @@
     <string name="audio_status" msgid="4237055636967709208">"Poslouchá"</string>
     <string name="game_status" msgid="1340694320630973259">"Hraji hru"</string>
     <string name="empty_user_name" msgid="3389155775773578300">"Přátelé"</string>
-    <string name="empty_status" msgid="5938893404951307749">"Pojďme chatovat!"</string>
+    <string name="empty_status" msgid="5938893404951307749">"Proberem to večer?"</string>
     <string name="status_before_loading" msgid="1500477307859631381">"Obsah se brzy zobrazí"</string>
     <string name="missed_call" msgid="4228016077700161689">"Zmeškaný hovor"</string>
     <string name="messages_count_overflow_indicator" msgid="7850934067082006043">"<xliff:g id="NUMBER">%d</xliff:g>+"</string>
-    <string name="people_tile_description" msgid="8154966188085545556">"Zobrazit poslední zprávy, zmeškané hovory a aktualizace stavu"</string>
+    <string name="people_tile_description" msgid="8154966188085545556">"Zobrazte si poslední zprávy, zmeškané hovory a aktualizace stavu"</string>
     <string name="people_tile_title" msgid="6589377493334871272">"Konverzace"</string>
     <string name="paused_by_dnd" msgid="7856941866433556428">"Pozastaveno funkcí Nerušit"</string>
     <string name="new_notification_text_content_description" msgid="2915029960094389291">"<xliff:g id="NAME">%1$s</xliff:g> posílá zprávu: <xliff:g id="NOTIFICATION">%2$s</xliff:g>"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problém s načtením měřiče baterie"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Klepnutím zobrazíte další informace"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Budík nenastaven"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"zadejte zámek obrazovky"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Snímač otisků prstů"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"ověříte"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"zadáte zařízení"</string>
@@ -1074,7 +1103,7 @@
     <string name="clipboard_image_preview" msgid="2156475174343538128">"Náhled obrázku"</string>
     <string name="clipboard_edit" msgid="4500155216174011640">"upravit"</string>
     <string name="add" msgid="81036585205287996">"Přidat"</string>
-    <string name="manage_users" msgid="1823875311934643849">"Správa uživatelů"</string>
+    <string name="manage_users" msgid="1823875311934643849">"Spravovat uživatele"</string>
     <string name="drag_split_not_supported" msgid="7173481676120546121">"Toto oznámení nepodporuje přetažení na rozdělenou obrazovku"</string>
     <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>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Asistent poslouchá"</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="note_task_button_label" msgid="8718616095800343136">"Poznámky"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Psaní poznámek"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Psaní poznámek, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Další informace"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Další informace najdete na adrese <xliff:g id="URL">%s</xliff:g>."</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Otevřít <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Aplikace je nastavena"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Do Peněženky byla přidána alespoň jedna karta"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Je nainstalována aplikace pro fotoaparát"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Aplikace je nastavena"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Je k dispozici alespoň jedno zařízení"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Pokud chcete přidat aplikaci Peněženka jako zkratku, nainstalujte ji"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Pokud chcete přidat aplikaci Peněženka jako zkratku, přidejte alespoň jednu kartu"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Pokud chcete přidat skener QR kódů jako zkratku, ujistěte se, že je nainstalována aplikace k focení a natáčení"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Pokud chcete přidat aplikaci Home jako zkratku, nainstalujte ji"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Je k dispozici alespoň jedno zařízení"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Vyberte výchozí aplikaci k psaní poznámek, ke které přidružíte zkratku pro poznámky"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Vyberte aplikaci"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Podržte zkratku"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Zrušit"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Přepnout obrazovky"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Připojte dotykové pero k nabíječce"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Slabá baterie dotykového pera"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Z tohoto profilu nelze volat"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Vaše pracovní zásady vám umožňují telefonovat pouze z pracovního profilu"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Z osobní aplikace volat nelze"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Vaše organizace dovoluje volat jen z pracovních aplikací"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Přepnout na pracovní profil"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Zavřít"</string>
-    <string name="lock_screen_settings" msgid="6152703934761402399">"Přizpůsobit zámek obrazovky"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Nainstalovat pracovní telefonní aplikaci"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Zrušit"</string>
+    <string name="lock_screen_settings" msgid="6152703934761402399">"Přizpůsobit obrazovku uzamčení"</string>
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Pokud chcete upravit obrazovku uzamčení, odemkněte zařízení"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Síť Wi-Fi není dostupná"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera je blokována"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera a mikrofon jsou blokovány"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon je blokován"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Režim priority je zapnutý"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Pozornost Asistenta je zapnutá"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Výchozí aplikaci pro poznámky nastavíte v Nastavení"</string>
+    <string name="install_app" msgid="5066668100199613936">"Nainstalovat aplikaci"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon a fotoaparát"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Nedávné použití aplikacemi"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Zobrazit nedávný přístup"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Hotovo"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Rozbalit a zobrazit možnosti"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Sbalit"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Zavřít tuto aplikaci"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> byla zavřena"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Spravovat službu"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Spravovat přístup"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Právě používán telefonním hovorem"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Nedávno použito při telefonním hovoru"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Právě používán aplikací <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Nedávno použila aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Právě používán aplikací <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Nedávno použila aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Právě používán aplikací <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Nedávno použila aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-cs/strings_tv.xml b/packages/SystemUI/res/values-cs/strings_tv.xml
deleted file mode 100644
index ab391f4..0000000
--- a/packages/SystemUI/res/values-cs/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"Síť VPN je připojena"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"Síť VPN je odpojena"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Přes <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Oznámení"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Žádná oznámení"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofon nahrává"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera nahrává"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera a mikrofon nahrávají"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofon přestal nahrávat"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kamera přestala nahrávat"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kamera a mikrofon přestaly nahrávat"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Zahájeno nahrávání obrazovky"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Záznam obrazovky ukončen"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index bb3841d..663aac4 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Aktivér USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Få flere oplysninger"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Screenshot"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Hold oplåst er deaktiveret"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Hold ulåst er deaktiveret"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"sendte et billede"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Gemmer screenshot..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Gemmer screenshot på din arbejdsprofil…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> har registreret dette screenshot."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> og andre åbne apps har registreret dette screenshot."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Føj til note"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Skærmoptagelse"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Skærmoptagelse"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Behandler skærmoptagelse"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Konstant notifikation om skærmoptagelse"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Vil du starte optagelse?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Når du optager, kan Android-systemet registrere følsomme oplysninger, der er synlige på din skærm, eller som afspilles på din enhed. Dette inkluderer adgangskoder, betalingsoplysninger, fotos, meddelelser og lyd."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Optag hele skærmen"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Optag én app"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Mens du optager, har Android adgang til alt, der er synligt på din skærm eller afspilles på din enhed. Vær derfor forsigtig med adgangskoder, betalingsoplysninger, beskeder og andre følsomme oplysninger."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Mens du optager en app, har Android adgang til alt, der vises eller afspilles i den pågældende app. Vær derfor forsigtig med adgangskoder, betalingsoplysninger, beskeder og andre følsomme oplysninger."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Start optagelse"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Vil du starte optagelsen?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Mens du optager, har Android adgang til alt, der er synligt på din skærm, eller som afspilles på din enhed. Vær derfor forsigtig med ting såsom adgangskoder, betalingsoplysninger, beskeder, billeder, lyd og video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Mens du optager en app, har Android adgang til alt, der vises eller afspilles i den pågældende app. Vær derfor forsigtig med ting såsom adgangskoder, betalingsoplysninger, beskeder, billeder, lyd og video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Start optagelse"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Optag lyd"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Enhedslyd"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Lyd fra din enhed såsom musik, opkald og ringetoner"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Enhedslyd og mikrofon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Start"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Start"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Optager skærm"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Optager skærm og lyd"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Vis skærmtryk"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Del"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Skærmoptagelsen er gemt"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Tryk for at se"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Der opstod en fejl ved sletning af skærmoptagelsen"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Skærmoptagelsen kunne ikke gemmes"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Skærmoptagelsen kunne ikke startes"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Visning i fuld skærm"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Stryg ned fra toppen for at afslutte."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"OK"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Tilbage"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Hjem"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Ansigtet er godkendt"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Bekræftet"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tryk på Bekræft for at udføre"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Låst op vha. ansigt. Tryk på oplåsningsikonet for at fortsætte."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Låst op via ansigtsgenkendelse"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Låst op ved hjælp af ansigt. Tryk for at fortsætte."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Ansigt genkendt. Tryk for at fortsætte."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Ansigt genkendt. Tryk på oplåsningsikonet for at fortsætte."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Godkendt"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Annuller godkendelsen"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Brug pinkode"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Brug mønster"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Brug adgangskode"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Hvis du angiver et forkert mønster i næste forsøg, slettes din arbejdsprofil og de tilhørende data."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Hvis du angiver en forkert pinkode i næste forsøg, slettes din arbejdsprofil og de tilhørende data."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Hvis du angiver en forkert adgangskode i næste forsøg, slettes din arbejdsprofil og de tilhørende data."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Konfigurer"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Ikke nu"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Dette er påkrævet for at forbedre sikkerheden og ydeevnen"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Konfigurer oplåsning med fingeraftryk igen"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Oplåsning med fingeraftryk"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Konfigurer oplåsning med fingeraftryk"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Hvis du vil konfigurere oplåsning med fingeraftryk igen, bliver dine nuværende fingeraftryksbilleder og -modeller slettet.\n\nNår de er slettet, skal du konfigurere oplåsning med fingeraftryk igen for at bruge dit fingeraftryk til at låse din telefon op eller verificere din identitet."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Hvis du vil konfigurere oplåsning med fingeraftryk igen, bliver dine nuværende fingeraftryksbilleder og -modeller slettet.\n\nNår de er slettet, skal du konfigurere oplåsning med fingeraftryk igen for at bruge dit fingeraftryk til at låse din telefon op eller verificere din identitet."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Oplåsning med fingeraftryk kunne ikke konfigureres. Gå til Indstillinger for at prøve igen."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Konfigurer ansigtslås igen"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Ansigtslås"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Konfigurer ansigtslås"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Hvis du vil konfigurere ansigtslås igen, bliver din nuværende ansigtsmodel slettet.\n\nDu skal konfigurere funktionen igen for at bruge ansigtsgenkendelse til at låse din telefon op."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Ansigtslås kunne ikke konfigureres. Gå til Indstillinger for at prøve igen."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Sæt fingeren på fingeraftrykssensoren"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Tryk på oplåsningsikonet for at fortsætte"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Ansigtet kan ikke genkendes. Brug fingeraftryk i stedet."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Lyd"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Høreapparater"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Høreapparater"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aktiverer…"</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Låst op via ansigtsgenkendelse"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Ansigtet er genkendt"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Stryg opad for at prøve igen"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Stryg opad for at prøve ansigtslåsen igen"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Lås op for at bruge NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Denne enhed tilhører din organisation"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Denne enhed tilhører <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> får adgang til alle de oplysninger, der er synlige på din skærm, eller som afspilles på din enhed, når du optager eller caster. Dette omfatter oplysninger som f.eks. adgangskoder, betalingsoplysninger, billeder, beskeder og afspillet lyd."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Tjenesten, der tilbyder denne funktion, får adgang til alle de oplysninger, der er synlige på din skærm, eller som afspilles på din enhed, når du optager eller caster. Dette omfatter oplysninger som f.eks. adgangskoder, betalingsoplysninger, billeder, beskeder og afspillet lyd."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Vil du begynde at optage eller caste?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Vil du begynde at optage eller caste via <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Vil du tillade, at <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> deler eller optager?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Hele skærmen"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Én app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Når du deler, optager eller caster, har <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> adgang til alt, der er synligt på din skærm eller afspilles på din enhed. Vær derfor forsigtig med adgangskoder, betalingsoplysninger, beskeder og andre følsomme oplysninger."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Når du deler, optager eller caster en app, har <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> adgang til alt, der vises eller afspilles i den pågældende app. Vær derfor forsigtig med adgangskoder, betalingsoplysninger, beskeder og andre følsomme oplysninger."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Fortsæt"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Del eller optag en app"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Vil du tillade, at denne app deler eller optager?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Når du deler, optager eller caster, har denne app adgang til alt, der vises på din skærm eller afspilles på din enhed. Vær derfor forsigtig med adgangskoder, betalingsoplysninger, beskeder og andre følsomme oplysninger."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Når du deler, optager eller caster en app, har denne app adgang til alt, der vises eller afspilles i den pågældende app. Vær derfor forsigtig med adgangskoder, betalingsoplysninger, beskeder og andre følsomme oplysninger."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> får adgang til alle de oplysninger, der er synlige på din skærm, eller som afspilles på din enhed, når du optager eller caster. Dette omfatter oplysninger som f.eks. adgangskoder, betalingsoplysninger, billeder, beskeder og afspillet lyd."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Vil du begynde at optage eller caste?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Tjenesten, der tilbyder denne funktion, får adgang til alle de oplysninger, der er synlige på din skærm, eller som afspilles på din enhed, når du optager eller caster. Dette omfatter oplysninger som f.eks. adgangskoder, betalingsoplysninger, billeder, beskeder og afspillet lyd."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Hele skærmen"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Én app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Del eller optag en app"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Vil du begynde at optage eller caste via <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Når du deler, optager eller caster, har <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> adgang til alt, der er synligt på din skærm eller afspilles på din enhed. Vær derfor forsigtig med ting såsom adgangskoder, betalingsoplysninger, beskeder, billeder, lyd og video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Når du deler, optager eller caster en app, har <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> adgang til alt, der vises eller afspilles i den pågældende app. Vær derfor forsigtig med ting såsom adgangskoder, betalingsoplysninger, beskeder, billeder, lyd og video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Start"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Vil du begynde at caste?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Når du caster, har Android adgang til alt, der vises på din skærm eller afspilles på din enhed. Vær derfor forsigtig med ting såsom adgangskoder, betalingsoplysninger, beskeder, billeder, lyd og video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Når du caster en app, har Android adgang til alt, der vises eller afspilles i den pågældende app. Vær derfor forsigtig med ting såsom adgangskoder, betalingsoplysninger, beskeder, billeder, lyd og video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Start casting"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Vil du begynde at dele?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Når du deler, optager eller caster, har Android adgang til alt, der er synligt på din skærm eller afspilles på din enhed. Vær derfor forsigtig med ting såsom adgangskoder, betalingsoplysninger, beskeder, billeder, lyd og video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Når du deler, optager eller caster en app, har Android adgang til alt, der vises eller afspilles i den pågældende app. Vær derfor forsigtig med ting såsom adgangskoder, betalingsoplysninger, beskeder, billeder, lyd og video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Start"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Delingen sættes på pause, når du skifter apps"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Del denne app i stedet"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Skift tilbage"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Skift app"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blokeret af din it-administrator"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Screenshots er deaktiveret af enhedspolitikken"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Ryd alle"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Der er installeret et nøglecenter på denne enhed. Din sikre netværkstrafik kan overvåges eller ændres."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Din administrator har aktiveret netværksregistrering, som overvåger trafik på din enhed."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Din administrator har aktiveret netværkslogging, som overvåger trafik på din arbejdsprofil, men ikke på din personlige profil."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Denne enhed har forbindelse til internettet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Din netværksaktivitet, herunder mails og browserdata, er synlig for din it-administrator."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Denne enhed har forbindelse til nettet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Din netværksaktivitet, herunder mails og browserdata, er synlig for VPN-udbyderen."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Denne enhed har forbindelse til internettet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Din netværksaktivitet, herunder mails og browserdata, er synlig for din it-administrator."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Denne enhed har forbindelse til internettet via <xliff:g id="VPN_APP_0">%1$s</xliff:g> og <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Din netværksaktivitet, herunder mails og browserdata, er synlig for din it-administrator."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Dine arbejdsapps har forbindelse til internettet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Din netværksaktivitet i arbejdsapps, herunder mails og browserdata, er synlig for din it-administrator og VPN-udbyder."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Dine personlige apps har forbindelse til nettet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Din netværksaktivitet, herunder mails og browserdata, er synlig for din VPN-udbyder."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"deaktiver"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Lyd og vibration"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Indstillinger"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Der blev skruet ned til en mere sikker lydstyrke"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Lydstyrken har været for høj i længere tid end anbefalet"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Lydstyrken blev sænket til et mere sikkert niveau"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Høretelefonernes lydstyrke har været høj i længere tid end anbefalet"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Høretelefonernes lydstyrke har overskredet sikkerhedsgrænsen for denne uge"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Fortsæt med at lytte"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Skru ned for lyden"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Appen er fastgjort"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Dette fastholder skærmen i visningen, indtil du frigør den. Tryk på Tilbage og Overblik, og hold fingeren nede for at frigøre skærmen."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Dette fastholder skærmen i visningen, indtil du frigør den. Hold Tilbage og Startskærm nede for at frigøre skærmen."</string>
@@ -641,12 +671,12 @@
     <string name="group_system_access_system_settings" msgid="7961639365383008053">"Åbn systemindstillinger"</string>
     <string name="group_system_access_google_assistant" msgid="1186152943161483864">"Åbn Google Assistent"</string>
     <string name="group_system_lock_screen" msgid="7391191300363416543">"Lås skærm"</string>
-    <string name="group_system_quick_memo" msgid="2914234890158583919">"Hent appen Notes for at skrive et hurtigt notat"</string>
+    <string name="group_system_quick_memo" msgid="2914234890158583919">"Åbn appen Notes for at skrive et hurtigt notat"</string>
     <string name="keyboard_shortcut_group_system_multitasking" msgid="1065232949510862593">"Systemmultitasking"</string>
     <string name="system_multitasking_rhs" msgid="6593269428880305699">"Start opdelt skærm med aktuel app til højre"</string>
     <string name="system_multitasking_lhs" msgid="8839380725557952846">"Start opdelt skærm med aktuel app til venstre"</string>
     <string name="system_multitasking_full_screen" msgid="1962084334200006297">"Skift fra opdelt skærm til fuld skærm"</string>
-    <string name="system_multitasking_replace" msgid="844285282472557186">"Ved opdelt skærm: Erstat en app med én app ad gangen"</string>
+    <string name="system_multitasking_replace" msgid="844285282472557186">"Ved opdelt skærm: Erstat en app med en anden app"</string>
     <string name="keyboard_shortcut_group_input" msgid="6888282716546625610">"Input"</string>
     <string name="input_switch_input_language_next" msgid="3394291576873633793">"Skift inputsprog (næste sprog)"</string>
     <string name="input_switch_input_language_previous" msgid="8823659252918609216">"Skift inputsprog (forrige sprog)"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menu for afbryderknappen"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Side <xliff:g id="ID_1">%1$d</xliff:g> af <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Låseskærm"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telefonen slukkede pga. varme"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Din telefon kører nu normalt.\nTryk for at få flere oplysninger"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Din telefon var blevet for varm, så den slukkede for at køle ned. Din telefon kører nu igen normalt. \n\nDin telefon kan blive for varm, hvis du:\n	• Bruger ressourcekrævende apps (f.eks. spil, video eller navigation)\n	• Downloader eller uploader store filer\n	• Bruger din telefon i varme omgivelser"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Se håndteringsvejledning"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefonen er ved at blive varm"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Nogle funktioner er begrænsede, mens telefonen køler ned.\nTryk for at få flere oplysninger"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Din telefon forsøger automatisk at køle ned. Du kan stadig bruge telefonen, men den kører muligvis langsommere.\n\nNår din telefon er kølet ned, fungerer den normalt igen."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Se håndteringsvejledning"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Træk stikket ud af din enhed"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Din enhed er ved at blive varm i nærheden af opladningsporten. Hvis enheden er tilsluttet en oplader eller USB-enhed, skal du trække stikket ud. Vær opmærksom på, at stikket også kan være varmt."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Forstør hele skærmen"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Forstør en del af skærmen"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Åbn indstillinger for forstørrelse"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Luk indstillinger for forstørrelse"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Træk i hjørnet for at justere størrelsen"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Tillad diagonal rulning"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Juster"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"fjern fra favoritter"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Flyt til position <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Betjeningselementer"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Vælg, hvilke enhedsindstillinger du vil have hurtig adgang til"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Flyt et felt ved at holde det nede og trække"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Alle styringselementerne blev fjernet"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Ændringerne blev ikke gemt"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Prøv en anden pinkode"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Bekræft ændring på <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Stryg for at se mere"</string>
+    <string name="retry_face" msgid="416380073082560186">"Prøv ansigtsgodkendelse igen"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Indlæser anbefalinger"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Medie"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Vil du skjule denne mediefunktion for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Indstillinger"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> af <xliff:g id="ARTIST_NAME">%2$s</xliff:g> afspilles via <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> af <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> kører"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Afspil"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Sæt på pause"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Afspil forrige"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Højttalere og skærme"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Foreslåede enheder"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Stop din delte session for at flytte medier til en anden enhed"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Stop"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Sådan fungerer udsendelser"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Udsendelse"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Personer i nærheden, som har kompatible Bluetooth-enheder, kan lytte til det medie, du udsender"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Der kan ikke gemmes. Prøv igen."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Der kan ikke gemmes."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Angiv mindst 4 tegn"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Angiv højst 16 tegn"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Angiv færre end <xliff:g id="LENGTH">%1$d</xliff:g> tegn"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Buildnummer"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Buildnummeret blev kopieret til udklipsholderen."</string>
     <string name="basic_status" msgid="2315371112182658176">"Åben samtale"</string>
@@ -990,8 +1018,8 @@
     <string name="no_conversations_text" msgid="5354115541282395015">"Dine seneste samtaler vises her"</string>
     <string name="priority_conversations" msgid="3967482288896653039">"Prioriterede samtaler"</string>
     <string name="recent_conversations" msgid="8531874684782574622">"Seneste samtaler"</string>
-    <string name="days_timestamp" msgid="5821854736213214331">"For <xliff:g id="DURATION">%1$s</xliff:g> dage siden"</string>
-    <string name="one_week_timestamp" msgid="4925600765473875590">"For 1 uge siden"</string>
+    <string name="days_timestamp" msgid="5821854736213214331">"<xliff:g id="DURATION">%1$s</xliff:g> dage siden"</string>
+    <string name="one_week_timestamp" msgid="4925600765473875590">"1 uge siden"</string>
     <string name="two_weeks_timestamp" msgid="9111801081871962155">"For 2 uger siden"</string>
     <string name="over_one_week_timestamp" msgid="3770560704420807142">"For mere end 1 uge siden"</string>
     <string name="over_two_weeks_timestamp" msgid="6300507859007874050">"For mere end 2 uger siden"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Der er problemer med at læse dit batteriniveau"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Tryk for at få flere oplysninger"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Ingen alarm er indstillet"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"angiv skærmlås"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Fingeraftrykssensor"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"godkende"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"få adgang til enheden"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Google Assistent lytter med"</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="note_task_button_label" msgid="8718616095800343136">"Notetagning"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Notetagning"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Notetagning, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Få flere oplysninger"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Få flere oplysninger på <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Åbn <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Appen er konfigureret"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Mindst ét kort er føjet til Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Installer en kameraapp"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Appen er konfigureret"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Mindst én enhed er tilgængelig"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Hvis du vil tilføje en genvej til Wallet-appen, skal du sørge for, at appen er installeret"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Hvis du vil tilføje en genvej til Wallet-appen, skal du sørge for, at du har tilføjet mindst ét kort"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Hvis du vil tilføje en genvej til QR-kodescanneren, skal du sørge for, at kameraappen er installeret"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Hvis du vil tilføje en genvej til Home-appen, skal du sørge for, at appen er installeret"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Mindst én enhed er tilgængelig"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Vælg en standardapp til noter for at bruge genvejen til notetagning"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Vælg app"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Hold fingeren på genvejen"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Annuller"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Skift skærm nu"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Slut din styluspen til en oplader"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Lavt batteriniveau på styluspen"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Du kan ikke ringe fra denne profil"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Din arbejdspolitik tillader kun, at du kan foretage telefonopkald fra arbejdsprofilen"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Du kan ikke foretage opkald via en personlig app"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Din organisation tillader kun, at du foretager opkald via arbejdsapps"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Skift til arbejdsprofil"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Luk"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Installer en arbejdstelefonapp"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Annuller"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Tilpas låseskærm"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Lås op for at tilpasse låseskærmen"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi er ikke tilgængeligt"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kameraet er blokeret"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Der er blokeret for kameraet og mikrofonen"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofonen er blokeret"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioritetstilstand er aktiveret"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistent lytter"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Angiv standardapp til noter i Indstillinger"</string>
+    <string name="install_app" msgid="5066668100199613936">"Installer app"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon og kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Seneste brug af apps"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Se seneste adgang"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Udfør"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Udvid og vis mulighederne"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Skjul"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Luk denne app"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> er lukket"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Administrer tjeneste"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Administrer adgang"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Bruges af telefonopkald"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Brugt for nylig af telefonopkald"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Bruges af <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Brugt for nylig af <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Bruges af <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Brugt for nylig af <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Bruges af <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Brugt for nylig af <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-da/strings_tv.xml b/packages/SystemUI/res/values-da/strings_tv.xml
deleted file mode 100644
index 66b7964..0000000
--- a/packages/SystemUI/res/values-da/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN er tilsluttet"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN er afbrudt"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Via <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notifikationer"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Ingen notifikationer"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofonen optager"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kameraet optager"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kameraet og mikrofonen optager"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofonen er stoppet med at optage"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kameraet er stoppet med at optage"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kameraet og mikrofonen er stoppet med at optage"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Skærmoptagelsen er startet"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Skærmoptagelsen er stoppet"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 23ba2fe..ead5001 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> hat diesen Screenshot erkannt."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> und andere geöffnete Apps haben diesen Screenshot erkannt."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Zu Notiz hinzufügen"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Bildschirmaufzeichnung"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Bildschirmaufzeichnung"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Bildschirmaufzeichnung…"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Fortlaufende Benachrichtigung für eine Bildschirmaufzeichnung"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Aufzeichnung starten?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Beim Aufnehmen kann das Android-System vertrauliche Informationen erfassen, die auf deinem Bildschirm angezeigt oder von deinem Gerät wiedergegeben werden. Das können Passwörter, Zahlungsinformationen, Fotos, Nachrichten und Audioinhalte sein."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Gesamten Bildschirm aufnehmen"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Eine einzelne App aufnehmen"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Während der Aufnahme hat Android Zugriff auf alle Inhalte, die auf dem Bildschirm sichtbar sind oder auf dem Gerät wiedergegeben werden. Sei daher vorsichtig mit Passwörtern, Zahlungsdetails, Nachrichten oder anderen vertraulichen Informationen."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Während der Aufnahme einer App hat Android Zugriff auf alle Inhalte, die in dieser App sichtbar sind oder wiedergegeben werden. Sei daher vorsichtig mit Passwörtern, Zahlungsdetails, Nachrichten oder anderen vertraulichen Informationen."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Aufnahme starten"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Aufnahme starten?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Während der Aufnahme hat Android Zugriff auf alle Inhalte, die auf deinem Bildschirm sichtbar sind oder von deinem Gerät wiedergegeben werden. Sei also vorsichtig mit Informationen wie Passwörtern, Zahlungsdetails, Nachrichten, Fotos sowie Audio- und Videoinhalten."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Während der Aufnahme einer App hat Android Zugriff auf alle Inhalte, die in dieser App sichtbar sind oder von ihr wiedergegeben werden. Sei also vorsichtig mit Informationen wie Passwörtern, Zahlungsdetails, Nachrichten, Fotos sowie Audio- und Videoinhalten."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Aufnahme starten"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Audio aufnehmen"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Audio des Geräts"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Audioinhalte auf deinem Gerät, wie Musik, Anrufe und Klingeltöne"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Audio des Geräts und über Mikrofon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Starten"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Starten"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Bildschirm wird aufgezeichnet"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Bildschirm und Ton werden aufgezeichnet"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Berührungen des Bildschirms anzeigen"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Teilen"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Bildschirmaufzeichnung gespeichert"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Zum Ansehen tippen"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Fehler beim Löschen der Bildschirmaufzeichnung"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Fehler beim Speichern der Bildschirmaufzeichnung"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Fehler beim Start der Bildschirmaufzeichnung"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Vollbildmodus wird aktiviert"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Zum Beenden von oben nach unten wischen."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Ok"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Zurück"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Startbildschirm"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menü"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Gesicht authentifiziert"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Bestätigt"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Zum Abschließen auf \"Bestätigen\" tippen"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Per Gesichtserkennung entsperrt. Tippe auf das Symbol „Entsperren“, um fortzufahren."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Mit Gesicht entsperrt"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Gerät mit dem Gesicht entsperrt. Tippe, um fortzufahren."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Gesicht erkannt. Tippe, um fortzufahren."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Gesicht erkannt. Tippe zum Fortfahren auf das Symbol „Entsperren“."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authentifiziert"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Authentifizierung abbrechen"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN verwenden"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Muster verwenden"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Passwort verwenden"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Wenn du beim nächsten Versuch ein falsches Muster eingibst, werden dein Arbeitsprofil und die zugehörigen Daten gelöscht."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Wenn du beim nächsten Versuch eine falsche PIN eingibst, werden dein Arbeitsprofil und die zugehörigen Daten gelöscht."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Wenn du beim nächsten Versuch ein falsches Passwort eingibst, werden dein Arbeitsprofil und die zugehörigen Daten gelöscht."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Einrichten"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Nicht jetzt"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Dies ist nötig, um die Sicherheit und Leistung zu erhöhen"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Entsperrung per Fingerabdruck neu einrichten"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Entsperrung per Fingerabdruck"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Entsperrung per Fingerabdruck einrichten"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Wenn du die Entsperrung per Fingerabdruck neu einrichtest, werden die aktuellen Bilder und Modelle deines Fingerabdrucks gelöscht.\n\nNachdem sie gelöscht wurden, musst du die Entsperrung per Fingerabdruck neu einrichten, damit du deinen Fingerabdruck nutzen kannst, um dein Smartphone zu entsperren oder deine Identität zu bestätigen."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Wenn du die Entsperrung per Fingerabdruck neu einrichtest, werden die aktuellen Bilder und das aktuelle Modell deines Fingerabdrucks gelöscht.\n\nNachdem sie gelöscht wurden, musst du die Entsperrung per Fingerabdruck neu einrichten, damit du deinen Fingerabdruck nutzen kannst, um dein Smartphone zu entsperren oder deine Identität zu bestätigen."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Die Entsperrung per Fingerabdruck konnte nicht eingerichtet werden. Gehe zu den Einstellungen und versuche es noch einmal."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Entsperrung per Gesichtserkennung neu einrichten"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Entsperrung per Gesichtserkennung"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Entsperrung per Gesichtserkennung einrichten"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Wenn du die Entsperrung per Gesichtserkennung neu einrichtest, wird dein aktuelles Gesichtsmodell gelöscht.\n\nDu musst diese Funktion neu einrichten, damit du dein Smartphone weiterhin mit deinem Gesicht entsperren kannst."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Die Entsperrung per Gesichtserkennung konnte nicht eingerichtet werden. Gehe zu den Einstellungen und versuche es noch einmal."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Berühre den Fingerabdrucksensor"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Tippe zum Fortfahren auf das Symbol „Entsperren“"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Gesicht wurde nicht erkannt. Verwende stattdessen den Fingerabdruck."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Eingabe"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Hörhilfen"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hörgerät"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Wird aktiviert…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autom. drehen"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Bildschirm automatisch drehen"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Gerät mit Gesicht entsperrt"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Gesicht erkannt"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Zum Wiederholen nach oben wischen"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Nach oben wischen &amp; Gesichtsentsperrung erneut versuchen"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Zur Verwendung von NFC entsperren"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Dieses Gerät gehört deiner Organisation"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Dieses Gerät gehört <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Die App \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" erhält Zugriff auf alle Informationen, die auf deinem Bildschirm sichtbar sind oder von deinem Gerät wiedergegeben werden, während du aufnimmst oder streamst. Dazu gehören beispielsweise angezeigte Passwörter und Zahlungsdetails, Fotos, Nachrichten und Audioinhalte."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Der Anbieter dieser App erhält Zugriff auf alle Informationen, die auf deinem Bildschirm sichtbar sind oder von deinem Gerät wiedergegeben werden, während du aufnimmst oder streamst. Dazu gehören beispielsweise angezeigte Passwörter, Zahlungsdetails, Fotos, Nachrichten und Audioinhalte."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Aufnahme oder Stream starten?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Aufnehmen oder Streamen mit der App \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" starten?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Zulassen, dass <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> Inhalte teilt oder aufnimmt?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Gesamter Bildschirm"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Eine einzelne App"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Beim Teilen, Aufnehmen oder Übertragen hat <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> Zugriff auf alle Inhalte, die auf dem Bildschirm sichtbar sind oder auf dem Gerät wiedergegeben werden. Sei daher vorsichtig mit Passwörtern, Zahlungsdetails, Nachrichten oder anderen vertraulichen Informationen."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Beim Teilen, Aufnehmen oder Übertragen einer App hat <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> Zugriff auf alle Inhalte, die in dieser App sichtbar sind oder wiedergegeben werden. Sei daher vorsichtig mit Passwörtern, Zahlungsdetails, Nachrichten oder anderen vertraulichen Informationen."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Weiter"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"App teilen oder aufnehmen"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Dieser App das Teilen oder Aufnehmen erlauben?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Beim Teilen, Aufnehmen oder Übertragen hat diese App Zugriff auf alle Inhalte, die auf dem Bildschirm sichtbar sind oder auf dem Gerät wiedergegeben werden. Sei daher vorsichtig mit Passwörtern, Zahlungsdetails, Nachrichten oder anderen vertraulichen Informationen."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Beim Teilen, Aufnehmen oder Übertragen einer App hat diese App Zugriff auf alle Inhalte, die in dieser App sichtbar sind oder wiedergegeben werden. Sei daher vorsichtig mit Passwörtern, Zahlungsdetails, Nachrichten oder anderen vertraulichen Informationen."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Die <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> App erhält Zugriff auf alle Informationen, die auf deinem Bildschirm sichtbar sind oder von deinem Gerät wiedergegeben werden, während du aufnimmst oder streamst. Dazu gehören beispielsweise Passwörter, Zahlungsdetails, Fotos, Nachrichten und Audioinhalte."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Aufnahme oder Stream starten?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Der Anbieter dieser App erhält Zugriff auf alle Informationen, die auf deinem Bildschirm sichtbar sind oder von deinem Gerät wiedergegeben werden, während du aufnimmst oder streamst. Dazu gehören beispielsweise Passwörter, Zahlungsdetails, Fotos, Nachrichten und Audioinhalte."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Gesamter Bildschirm"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Einzelne App"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"App teilen oder aufnehmen"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Aufnehmen oder Streamen mit der <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> App starten?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Beim Teilen, Aufnehmen oder Streamen hat <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> Zugriff auf alle Inhalte, die auf deinem Bildschirm sichtbar sind oder von deinem Gerät wiedergegeben werden. Sei also vorsichtig mit Informationen wie Passwörtern, Zahlungsdetails, Nachrichten, Fotos sowie Audio- und Videoinhalten."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Beim Teilen, Aufnehmen oder Streamen einer App hat <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> Zugriff auf alle Inhalte, die in dieser App sichtbar sind oder von ihr wiedergegeben werden. Sei also vorsichtig mit Informationen wie Passwörtern, Zahlungsdetails, Nachrichten, Fotos sowie Audio- und Videoinhalten."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Starten"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Stream starten?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Beim Streamen hat Android Zugriff auf alle Inhalte, die auf deinem Bildschirm sichtbar sind oder von deinem Gerät wiedergegeben werden. Sei also vorsichtig mit Informationen wie Passwörtern, Zahlungsdetails, Nachrichten, Fotos sowie Audio- und Videoinhalten."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Beim Streamen einer App hat Android Zugriff auf alle Inhalte, die in dieser App sichtbar sind oder von ihr wiedergegeben werden. Sei also vorsichtig mit Informationen wie Passwörtern, Zahlungsdetails, Nachrichten, Fotos sowie Audio- und Videoinhalten."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Stream starten"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Teilen starten?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Beim Teilen, Aufnehmen oder Streamen hat Android Zugriff auf alle Inhalte, die auf deinem Bildschirm sichtbar sind oder von deinem Gerät wiedergegeben werden. Sei also vorsichtig mit Informationen wie Passwörtern, Zahlungsdetails, Nachrichten, Fotos sowie Audio- und Videoinhalten."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Beim Teilen, Aufnehmen oder Streamen einer App hat Android Zugriff auf alle Inhalte, die in dieser App sichtbar sind oder von ihr wiedergegeben werden. Sei also vorsichtig mit Informationen wie Passwörtern, Zahlungsdetails, Nachrichten, Fotos sowie Audio- und Videoinhalten."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Starten"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Das Teilen wird pausiert, wenn du zwischen Apps wechselst"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Stattdessen diese App teilen"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Zurückwechseln"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"App wechseln"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Vom IT-Administrator blockiert"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Bildschirmaufnahme ist durch die Geräterichtlinien deaktiviert"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Alle löschen"</string>
@@ -436,21 +462,22 @@
     <string name="monitoring_subtitle_ca_certificate" msgid="8588092029755175800">"CA-Zertifikate"</string>
     <string name="monitoring_button_view_policies" msgid="3869724835853502410">"Richtlinien ansehen"</string>
     <string name="monitoring_button_view_controls" msgid="8316440345340701117">"Jugendschutzeinstellungen"</string>
-    <string name="monitoring_description_named_management" msgid="505833016545056036">"Dieses Gerät gehört <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nDein IT-Administrator kann Einstellungen, Zugriffsrechte im Unternehmen, Apps, mit diesem Gerät verknüpfte Daten und die Standortdaten deines Geräts sehen und verwalten.\n\nWeitere Informationen erhältst du von deinem IT-Administrator."</string>
+    <string name="monitoring_description_named_management" msgid="505833016545056036">"Dieses Gerät gehört <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nIhr IT-Administrator kann Einstellungen, Zugriffsrechte im Unternehmen, Apps, mit diesem Gerät verknüpfte Daten und die Standortdaten Ihres Geräts sehen und verwalten.\n\nWeitere Informationen erhalten Sie von Ihrem IT-Administrator."</string>
     <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> kann möglicherweise auf die Daten zugreifen, die mit diesem Gerät verknüpft sind, Apps verwalten und die Geräteeinstellungen ändern.\n\nFalls du Fragen hast, wende dich an <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g>."</string>
-    <string name="monitoring_description_management" msgid="4308879039175729014">"Dieses Gerät gehört deiner Organisation.\n\nDein IT-Administrator kann Einstellungen, Zugriffsrechte im Unternehmen, Apps, mit diesem Gerät verknüpfte Daten und die Standortdaten deines Geräts sehen und verwalten.\n\nWeitere Informationen erhältst du von deinem IT-Administrator."</string>
+    <string name="monitoring_description_management" msgid="4308879039175729014">"Dieses Gerät gehört Ihrer Organisation.\n\nIhr IT-Administrator kann Einstellungen, Zugriffsrechte im Unternehmen, Apps, mit diesem Gerät verknüpfte Daten und die Standortdaten Ihres Geräts sehen und verwalten.\n\nWeitere Informationen erhalten Sie von Ihrem IT-Administrator."</string>
     <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"Deine Organisation hat ein Zertifikat einer Zertifizierungsstelle auf deinem Gerät installiert. Eventuell wird dein sicherer Netzwerkverkehr überwacht oder bearbeitet."</string>
     <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"Deine Organisation hat ein Zertifikat einer Zertifizierungsstelle in deinem Arbeitsprofil installiert. Eventuell wird dein sicherer Netzwerkverkehr überwacht oder bearbeitet."</string>
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Auf dem Gerät ist das Zertifikat einer Zertifizierungsstelle installiert. Eventuell wird dein sicherer Netzwerkverkehr überwacht oder bearbeitet."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Dein Administrator hat die Netzwerkprotokollierung aktiviert. Damit wird der Netzwerkverkehr auf deinem Gerät überwacht."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Dein Administrator hat die Netzwerkprotokollierung aktiviert. Damit werden die Zugriffe in deinem Arbeitsprofil erfasst, jedoch nicht in deinem privaten Profil."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Dieses Gerät ist über <xliff:g id="VPN_APP">%1$s</xliff:g> mit dem Internet verbunden. Deine Netzwerkaktivitäten, einschließlich E-Mails und Browserdaten, sind für deinen IT-Administrator sichtbar."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Dieses Gerät geht über <xliff:g id="VPN_APP">%1$s</xliff:g> ins Internet. Der VPN-Anbieter hat Zugriff auf Daten zu deinen Netzwerkaktivitäten, einschließlich E-Mails und Browserdaten."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Dieses Gerät ist über die <xliff:g id="VPN_APP">%1$s</xliff:g> mit dem Internet verbunden. Deine Netzwerkaktivitäten, einschließlich E-Mails und Browserdaten, sind für deinen IT-Administrator sichtbar."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Dieses Gerät ist über <xliff:g id="VPN_APP_0">%1$s</xliff:g> und <xliff:g id="VPN_APP_1">%2$s</xliff:g> mit dem Internet verbunden. Deine Netzwerkaktivitäten, einschließlich E-Mails und Browserdaten, sind für deinen IT-Administrator sichtbar."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Deine geschäftlichen Apps sind über <xliff:g id="VPN_APP">%1$s</xliff:g> mit dem Internet verbunden. Deine Netzwerkaktivitäten in geschäftlichen Apps, einschließlich E-Mails und Browserdaten, sind für deinen IT-Administrator und deinen VPN-Anbieter sichtbar."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Deine privaten Apps sind über <xliff:g id="VPN_APP">%1$s</xliff:g> mit dem Internet verbunden. Deine Netzwerkaktivitäten, einschließlich E-Mails und Browserdaten, sind für deinen VPN-Anbieter sichtbar."</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="8292589617720435430">" "</string>
     <string name="monitoring_description_vpn_settings" msgid="5264167033247632071">"VPN-Einstellungen öffnen"</string>
-    <string name="monitoring_description_parental_controls" msgid="8184693528917051626">"Dieses Gerät wird von deinen Eltern verwaltet. Sie können unter anderem Informationen über deine genutzten Apps, deinen Standort und deine Gerätenutzungsdauer einsehen und verwalten."</string>
+    <string name="monitoring_description_parental_controls" msgid="8184693528917051626">"Dieses Gerät wird von deinen Eltern verwaltet. Sie können unter anderem Informationen über deine genutzten Apps, deinen Standort und deine Bildschirmzeit einsehen und verwalten."</string>
     <string name="legacy_vpn_name" msgid="4174223520162559145">"VPN"</string>
     <string name="keyguard_indication_trust_unlocked" msgid="7395154975733744547">"Durch TrustAgent entsperrt"</string>
     <string name="zen_mode_and_condition" msgid="5043165189511223718">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"deaktivieren"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Ton &amp; Vibration"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Einstellungen"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Lautstärke zur Sicherheit verringert"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Die Lautstärke war länger als empfohlen hoch eingestellt"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Auf sicherere Lautstärke gesenkt"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Die Kopfhörerlautstärke war länger als empfohlen hoch eingestellt"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Die Kopfhörerlautstärke hat für diese Woche das Sicherheitslimit überschritten"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Weiterhören"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Leiser stellen"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"App ist auf dem Bildschirm fixiert"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Die App bleibt so lange auf dem Bildschirm fixiert, bis du die Fixierung aufhebst. Berühre und halte dazu \"Zurück\" und \"Übersicht\"."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Die App bleibt so lange auf dem Bildschirm fixiert, bis du die Fixierung aufhebst. Berühre und halte dazu \"Zurück\" und \"Startbildschirm\"."</string>
@@ -643,10 +673,10 @@
     <string name="group_system_lock_screen" msgid="7391191300363416543">"Sperrbildschirm"</string>
     <string name="group_system_quick_memo" msgid="2914234890158583919">"Notizen-App für schnelles Memo aufrufen"</string>
     <string name="keyboard_shortcut_group_system_multitasking" msgid="1065232949510862593">"System-Multitasking"</string>
-    <string name="system_multitasking_rhs" msgid="6593269428880305699">"Geteilten Bildschirm aktivieren, aktuelle App rechts"</string>
-    <string name="system_multitasking_lhs" msgid="8839380725557952846">"Geteilten Bildschirm aktivieren, aktuelle App links"</string>
-    <string name="system_multitasking_full_screen" msgid="1962084334200006297">"Vom geteilten Bildschirm zum Vollbild wechseln"</string>
-    <string name="system_multitasking_replace" msgid="844285282472557186">"Im geteilten Bildschirm: eine App durch eine andere ersetzen"</string>
+    <string name="system_multitasking_rhs" msgid="6593269428880305699">"Splitscreen aktivieren, aktuelle App rechts"</string>
+    <string name="system_multitasking_lhs" msgid="8839380725557952846">"Splitscreen aktivieren, aktuelle App links"</string>
+    <string name="system_multitasking_full_screen" msgid="1962084334200006297">"Vom Splitscreen zum Vollbild wechseln"</string>
+    <string name="system_multitasking_replace" msgid="844285282472557186">"Im Splitscreen: eine App durch eine andere ersetzen"</string>
     <string name="keyboard_shortcut_group_input" msgid="6888282716546625610">"Eingabe"</string>
     <string name="input_switch_input_language_next" msgid="3394291576873633793">"Eingabesprache ändern (nächste Sprache)"</string>
     <string name="input_switch_input_language_previous" msgid="8823659252918609216">"Eingabesprache ändern (vorherige Sprache)"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Ein-/Aus-Menü"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Seite <xliff:g id="ID_1">%1$d</xliff:g> von <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Sperrbildschirm"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Ausgeschaltet, da zu heiß"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Dein Smartphone funktioniert jetzt wieder normal.\nFür mehr Informationen tippen."</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Dein Smartphone war zu heiß und wurde zum Abkühlen ausgeschaltet. Nun funktioniert es wieder normal.\n\nMögliche Ursachen:\n	• Verwendung ressourcenintensiver Apps (z. B. Spiele-, Video- oder Navigations-Apps)\n	• Download oder Upload großer Dateien \n	• Verwendung des Smartphones bei hohen Temperaturen"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Schritte zur Abkühlung des Geräts ansehen"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Smartphone wird warm"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Einige Funktionen sind während der Abkühlphase des Smartphones eingeschränkt.\nFür mehr Informationen tippen."</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Dein Smartphone kühlt sich automatisch ab. Du kannst dein Smartphone weiterhin nutzen, aber es reagiert möglicherweise langsamer.\n\nSobald dein Smartphone abgekühlt ist, funktioniert es wieder normal."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Schritte zur Abkühlung des Geräts ansehen"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Gerät vom Stromnetz trennen"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Dein Gerät erwärmt sich am Ladeanschluss. Trenne das Gerät vom Stromnetz, wenn es an ein Ladegerät oder USB-Zubehör angeschlossen ist. Sei vorsichtig, denn das Kabel könnte ebenfalls heiß sein."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ganzen Bildschirm vergrößern"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Teil des Bildschirms vergrößern"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Vergrößerungseinstellungen öffnen"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Vergrößerungseinstellungen schließen"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Zum Anpassen der Größe Ecke ziehen"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Diagonales Scrollen erlauben"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Größe ändern"</string>
@@ -876,8 +901,8 @@
     <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="controls_panel_authorization_title" msgid="267429338785864842">"<xliff:g id="APPNAME">%s</xliff:g> hinzufügen?"</string>
-    <string name="controls_panel_authorization" msgid="7045551688535104194">"<xliff:g id="APPNAME">%s</xliff:g> darf auswählen, welche Einstellungen und Inhalte hier angezeigt werden."</string>
-    <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"Einstellungen für <xliff:g id="APPNAME">%s</xliff:g> entfernen?"</string>
+    <string name="controls_panel_authorization" msgid="7045551688535104194">"<xliff:g id="APPNAME">%s</xliff:g> darf auswählen, welche Steuerelemente und Inhalte hier angezeigt werden."</string>
+    <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"Steuerelemente für <xliff:g id="APPNAME">%s</xliff:g> entfernen?"</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>
     <string name="accessibility_control_not_favorite" msgid="1291760269563092359">"Aus Favoriten entfernt"</string>
@@ -885,18 +910,14 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"Entfernen aus Favoriten"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Auf Position <xliff:g id="NUMBER">%d</xliff:g> verschieben"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Steuerelemente"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Für schnellen Zugriff Gerätesteuerung auswählen"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Zum Verschieben von Steuerelementen halten und ziehen"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Alle Steuerelemente entfernt"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Änderungen nicht gespeichert"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Andere Apps ansehen"</string>
-    <!-- no translation found for controls_favorite_rearrange_button (2942788904364641185) -->
-    <skip />
-    <!-- no translation found for controls_favorite_add_controls (1221420435546694004) -->
-    <skip />
-    <!-- no translation found for controls_favorite_back_to_editing (184125114090062713) -->
-    <skip />
+    <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Neu anordnen"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Steuerelemente hinzufügen"</string>
+    <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Zurück zum Bearbeiten"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"Steuerelemente konnten nicht geladen werden. Prüfe in der <xliff:g id="APP">%s</xliff:g> App, ob die Einstellungen möglicherweise geändert wurden."</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"Kompatible Steuerelemente nicht verfügbar"</string>
     <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Andere"</string>
@@ -918,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Andere PIN ausprobieren"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Änderung für <xliff:g id="DEVICE">%s</xliff:g> bestätigen"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Wischen, um weitere zu sehen"</string>
+    <string name="retry_face" msgid="416380073082560186">"Authentifizierung per Gesicht noch einmal versuchen"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Empfehlungen werden geladen"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Medien"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"Dieses Mediensteuerelement für <xliff:g id="APP_NAME">%1$s</xliff:g> ausblenden?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"Mediensteuerung für <xliff:g id="APP_NAME">%1$s</xliff:g> ausblenden?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"Die Mediensitzung kann nicht ausgeblendet werden."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Ausblenden"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Fortsetzen"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Einstellungen"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> von <xliff:g id="ARTIST_NAME">%2$s</xliff:g> wird gerade über <xliff:g id="APP_LABEL">%3$s</xliff:g> wiedergegeben"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> von <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> wird ausgeführt"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Wiedergeben"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausieren"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Vorheriger Titel"</string>
@@ -972,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Lautsprecher &amp; Displays"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Vorgeschlagene Geräte"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Beende die Freigabesitzung zur Übertragung von Medien auf das andere Gerät"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Beenden"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Funktionsweise von Nachrichten an alle"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Nachricht an alle"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Personen, die in der Nähe sind und kompatible Bluetooth-Geräten haben, können sich die Medien anhören, die du per Nachricht an alle sendest"</string>
@@ -984,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Speichern nicht möglich. Versuche es noch einmal."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Speichern nicht möglich."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Gib mindestens vier Zeichen ein"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Maximal 16 Zeichen möglich"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Maximal <xliff:g id="LENGTH">%1$d</xliff:g> Zeichen möglich"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Build-Nummer"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Build-Nummer in Zwischenablage kopiert."</string>
     <string name="basic_status" msgid="2315371112182658176">"Offene Unterhaltung"</string>
@@ -1026,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problem beim Lesen des Akkustands"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Für weitere Informationen tippen"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Kein Wecker gestellt"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"Displaysperre-Anmeldedaten eingeben"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Fingerabdrucksensor"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"Authentifizieren"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"Eingeben des Geräts"</string>
@@ -1078,7 +1104,7 @@
     <string name="clipboard_edit" msgid="4500155216174011640">"bearbeiten"</string>
     <string name="add" msgid="81036585205287996">"Hinzufügen"</string>
     <string name="manage_users" msgid="1823875311934643849">"Nutzer verwalten"</string>
-    <string name="drag_split_not_supported" msgid="7173481676120546121">"Diese Benachrichtigung lässt sich nicht auf einen geteilten Bildschirm ziehen"</string>
+    <string name="drag_split_not_supported" msgid="7173481676120546121">"Diese Benachrichtigung lässt sich nicht auf einen Splitscreen ziehen"</string>
     <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>
@@ -1088,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant hört zu"</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="note_task_button_label" msgid="8718616095800343136">"Notizen machen"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Notizen"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Notizen, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1104,37 +1131,57 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Weitere Informationen"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Weitere Informationen unter <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> öffnen"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Die App ist eingerichtet"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Wallet wurde mindestens eine Karte hinzugefügt"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Kamera-App ist installiert"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Die App ist eingerichtet"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Mindestens ein Gerät ist verfügbar"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Damit du die Wallet App als Verknüpfung hinzufügen kannst, muss die App installiert sein"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Damit du die Wallet App als Verknüpfung hinzufügen kannst, muss mindestens eine Karte hinzugefügt sein"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Damit du den QR-Code-Scanner als Verknüpfung hinzufügen kannst, muss eine Kamera-App installiert sein"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Damit du die Home App als Verknüpfung hinzufügen kannst, muss die App installiert sein"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Mindestens ein Gerät ist verfügbar"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Wähle eine Standard-App für Notizen aus, die du für die Verknüpfung verwenden möchtest"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"App wählen"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Verknüpfung berühren &amp; halten"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Abbrechen"</string>
-    <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Bildschirm jetzt wechseln"</string>
+    <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Jetzt umdrehen"</string>
     <string name="rear_display_folded_bottom_sheet_title" msgid="3930008746560711990">"Smartphone auffalten"</string>
     <string name="rear_display_unfolded_bottom_sheet_title" msgid="6291111173057304055">"Bildschirm wechseln?"</string>
     <string name="rear_display_folded_bottom_sheet_description" msgid="6842767125783222695">"Mit der Rückkamera lassen sich Fotos mit höherer Auflösung aufnehmen"</string>
-    <string name="rear_display_unfolded_bottom_sheet_description" msgid="7229961336309960201">"Smartphone umdrehen, um Fotos mit höherer Auflösung aufzunehmen"</string>
+    <string name="rear_display_unfolded_bottom_sheet_description" msgid="7229961336309960201">"Für höhere Auflösung Smartphone umdrehen"</string>
     <string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Faltbares Gerät wird geöffnet"</string>
     <string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Faltbares Gerät wird umgeklappt"</string>
     <string name="stylus_battery_low_percentage" msgid="1620068112350141558">"Akku bei <xliff:g id="PERCENTAGE">%s</xliff:g>"</string>
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Schließe deinen Eingabestift an ein Ladegerät an"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Stylus-Akkustand niedrig"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Keine Anrufe über dieses Profil möglich"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Gemäß den Arbeitsrichtlinien darfst du nur über dein Arbeitsprofil telefonieren"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Telefonieren über private App nicht möglich"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Deine Organisation lässt das Telefonieren nur über geschäftliche Apps zu"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Zum Arbeitsprofil wechseln"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Schließen"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Geschäftliche Smartphone-App installieren"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Abbrechen"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Sperrbildschirm personalisieren"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Zum Anpassen des Sperrbildschirms entsperren"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Kein WLAN verfügbar"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera blockiert"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera und Mikrofon blockiert"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon blockiert"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioritätsmodus an"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant-Aktivierung an"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Standard-Notizen-App in den Einstellungen einrichten"</string>
+    <string name="install_app" msgid="5066668100199613936">"App installieren"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon &amp; Kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Kürzliche App-Nutzung"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Kürzliche Zugriffe ansehen"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Fertig"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Maximieren und Optionen einblenden"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Minimieren"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Diese App schließen"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> geschlossen"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Dienst verwalten"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Zugriff verwalten"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Verwendet in Telefonanruf"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Kürzlich in einem Telefonanruf verwendet"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Verwendet von <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Kürzlich von <xliff:g id="APP_NAME">%1$s</xliff:g> verwendet"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Verwendet von <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Kürzlich von <xliff:g id="APP_NAME">%1$s</xliff:g> verwendet (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Verwendet von <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Kürzlich von <xliff:g id="APP_NAME">%1$s</xliff:g> verwendet (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-de/strings_tv.xml b/packages/SystemUI/res/values-de/strings_tv.xml
deleted file mode 100644
index 5df9d32..0000000
--- a/packages/SystemUI/res/values-de/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN ist verbunden"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN ist nicht verbunden"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Über <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Benachrichtigungen"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Keine Benachrichtigungen"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofon nimmt auf"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera nimmt auf"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera und Mikrofon nehmen auf"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Aufnahme des Mikrofons gestoppt"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Aufnahme der Kamera gestoppt"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Aufnahme von Kamera und Mikrofon gestoppt"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Bildschirmaufzeichnung gestartet"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Bildschirmaufzeichnung beendet"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index b7ad7b9..7a74831 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Ενεργοποίηση USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Μάθετε περισσότερα"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Στιγμιότυπο οθόνης"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Το εκτεταμένο ξεκλείδωμα είναι απενεργοποιημένο"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Η Επέκταση ξεκλειδώματος είναι απενεργοποιημένη"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"έστειλε μια εικόνα"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Αποθήκευση στιγμιότυπου οθόνης..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Αποθήκευση στιγμιότ. οθόνης στο προφίλ εργασίας…"</string>
@@ -83,7 +83,7 @@
     <string name="screenshot_edit_label" msgid="8754981973544133050">"Επεξεργασία"</string>
     <string name="screenshot_edit_description" msgid="3333092254706788906">"Επεξεργασία στιγμιότυπου οθόνης"</string>
     <string name="screenshot_share_description" msgid="2861628935812656612">"Κοινοποίηση στιγμιότυπου οθόνης"</string>
-    <string name="screenshot_scroll_label" msgid="2930198809899329367">"Λήψη περισσότερων"</string>
+    <string name="screenshot_scroll_label" msgid="2930198809899329367">"Περισσότερα"</string>
     <string name="screenshot_dismiss_description" msgid="4702341245899508786">"Παράβλεψη στιγμιότυπου οθόνης"</string>
     <string name="screenshot_dismiss_work_profile" msgid="3101530842987697045">"Παράβλεψη μηνύματος προφίλ εργασίας"</string>
     <string name="screenshot_preview_description" msgid="7606510140714080474">"Προεπισκόπηση στιγμιότυπου οθόνης"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"Η εφαρμογή <xliff:g id="APPNAME">%1$s</xliff:g> εντόπισε αυτό το στιγμιότυπο οθόνης."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"Η εφαρμογή <xliff:g id="APPNAME">%1$s</xliff:g> και άλλες ανοικτές εφαρμογές εντόπισαν το στιγμιότυπο οθόνης."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Προσθήκη σε σημείωση"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Εγγραφή οθόνης"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Εγγραφή οθόνης"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Επεξεργασία εγγραφής οθόνης"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ειδοποίηση σε εξέλιξη για μια περίοδο λειτουργίας εγγραφής οθόνης"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Έναρξη εγγραφής;"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Κατά την εγγραφή, το σύστημα Android μπορεί να καταγράψει τυχόν ευαίσθητες πληροφορίες που είναι ορατές στην οθόνη ή αναπαράγονται στη συσκευή σας. Σε αυτές περιλαμβάνονται οι κωδικοί πρόσβασης, οι πληροφορίες πληρωμής, οι φωτογραφίες, τα μηνύματα και ο ήχος."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Εγγραφή ολόκληρης οθόνης"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Εγγραφή μίας εφαρμογής"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Όταν κάνετε εγγραφή, το Android έχει πρόσβαση σε οτιδήποτε είναι ορατό στην οθόνη ή αναπαράγεται στη συσκευή σας. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα ή άλλες ευαίσθητες πληροφορίες."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Όταν κάνετε εγγραφή μιας εφαρμογής, το Android έχει πρόσβαση σε οτιδήποτε είναι ορατό ή αναπαράγεται στη συγκεκριμένη εφαρμογή. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα ή άλλες ευαίσθητες πληροφορίες."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Έναρξη εγγραφής"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Έναρξη εγγραφής;"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Όταν κάνετε εγγραφή, το Android έχει πρόσβαση σε οτιδήποτε είναι ορατό στην οθόνη ή αναπαράγεται στη συσκευή σας. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα, τις φωτογραφίες, τον ήχο και το βίντεο."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Όταν κάνετε εγγραφή μιας εφαρμογής, το Android έχει πρόσβαση σε οτιδήποτε είναι ορατό ή αναπαράγεται στη συγκεκριμένη εφαρμογή. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα, τις φωτογραφίες, τον ήχο και το βίντεο."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Έναρξη εγγραφής"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Ηχογράφηση"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Ήχος συσκευής"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Ήχος από τη συσκευή σας, όπως μουσική, κλήσεις και ήχοι κλήσης"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Μικρόφωνο"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Ήχος συσκευής και μικρόφωνο"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Έναρξη"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Έναρξη"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Εγγραφή οθόνης"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Εγγραφή οθόνης και ήχου"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Εμφάνιση αγγιγμάτων στην οθόνη"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Κοινοποίηση"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Η εγγραφή οθόνης αποθηκεύτηκε"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Πατήστε για προβολή"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Παρουσιάστηκε σφάλμα κατά τη διαγραφή της εγγραφής οθόνης"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Σφάλμα κατά την αποθήκευση της εγγραφής οθόνης"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Σφάλμα κατά την έναρξη της εγγραφής οθόνης"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Προβολή σε πλήρη οθόνη"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Για έξοδο, σύρετε προς τα κάτω από το επάνω μέρος."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Το κατάλαβα"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Πίσω"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Αρχική οθόνη"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Μενού"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Έγινε έλεγχος ταυτότητας προσώπου"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Επιβεβαιώθηκε"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Πατήστε Επιβεβαίωση για ολοκλήρωση"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Ξεκλείδωμα με πρόσωπο. Πατήστε το εικονίδιο ξεκλειδώματος."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Ξεκλειδώθηκε με αναγνώριση προσώπου"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Ξεκλείδωμα με αναγνώριση προσώπου. Πατήστε για συνέχεια."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Το πρόσωπο αναγνωρίστηκε. Πατήστε για συνέχεια."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Το πρόσωπο αναγνωρ. Πατήστε το εικον. ξεκλειδ. για συνέχεια."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Ολοκληρώθηκε ο έλεγχος ταυτότητας"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Ακύρωση ελέγχου ταυτότητας"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Χρήση PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Χρήση μοτίβου"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Χρήση κωδικού πρόσβασης"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Εάν εισαγάγετε εσφαλμένο μοτίβο στην επόμενη προσπάθεια, το προφίλ εργασίας σας και τα δεδομένα του θα διαγραφούν."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Εάν εισαγάγετε εσφαλμένο PIN στην επόμενη προσπάθεια, το προφίλ εργασίας σας και τα δεδομένα του θα διαγραφούν."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Εάν εισαγάγετε εσφαλμένο κωδικό πρόσβασης στην επόμενη προσπάθεια, το προφίλ εργασίας σας και τα δεδομένα του θα διαγραφούν."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Ρύθμιση"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Όχι τώρα"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Αυτό απαιτείται για τη βελτίωση της ασφάλειας και της απόδοσης"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Ρυθμίστε ξανά τη λειτουργία Ξεκλείδωμα με δακτυλικό αποτύπωμα"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Ξεκλείδωμα με δακτυλικό αποτύπωμα"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Ρύθμιση λειτουργίας Ξεκλείδωμα με δακτυλικό αποτύπωμα"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Για να ρυθμίσετε ξανά το Ξεκλείδωμα με δακτυλικό αποτύπωμα, οι τρέχουσες εικόνες και τα μοντέλα δακτυλικών αποτυπωμάτων σας θα διαγραφούν.\n\nΑφού διαγραφούν, θα πρέπει να ρυθμίσετε ξανά το Ξεκλείδωμα με δακτυλικό αποτύπωμα για να χρησιμοποιήσετε το δακτυλικό σας αποτύπωμα προκειμένου να ξεκλειδώσετε το τηλέφωνό σας ή να επαληθεύσετε την ταυτότητά σας."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Για να ρυθμίσετε ξανά το Ξεκλείδωμα με δακτυλικό αποτύπωμα, οι τρέχουσες εικόνες και το μοντέλο δακτυλικών αποτυπωμάτων σας θα διαγραφούν.\n\nΑφού διαγραφούν, θα πρέπει να ρυθμίσετε ξανά το Ξεκλείδωμα με δακτυλικό αποτύπωμα για να χρησιμοποιήσετε το δακτυλικό σας αποτύπωμα προκειμένου να ξεκλειδώσετε το τηλέφωνό σας ή να επαληθεύσετε την ταυτότητά σας."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Δεν ήταν δυνατή η ρύθμιση του Ξεκλειδώματος με δακτυλικό αποτύπωμα. Μεταβείτε στις Ρυθμίσεις και δοκιμάστε ξανά."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Επαναρρύθμιση λειτουργίας Ξεκλείδωμα με το πρόσωπο"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Ξεκλείδωμα με το πρόσωπο"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Ρύθμιση λειτουργίας Ξεκλείδωμα με το πρόσωπο"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Για να ρυθμίσετε ξανά το Ξεκλείδωμα με το πρόσωπο, το τρέχον μοντέλο προσώπου σας θα διαγραφεί.\n\nΘα χρειαστεί να ρυθμίσετε ξανά αυτήν τη λειτουργία για να χρησιμοποιήσετε το πρόσωπό σας για να ξεκλειδώσετε το τηλέφωνό σας."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Δεν ήταν δυνατή η ρύθμιση για το Ξεκλείδωμα με το πρόσωπο. Μεταβείτε στις Ρυθμίσεις και δοκιμάστε ξανά."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Αγγίξτε τον αισθητήρα δακτυλικού αποτυπώματος"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Πατήστε το εικονίδιο ξεκλειδώματος για συνέχεια"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Το πρόσωπο δεν αναγνωρίζεται. Χρησιμ. δακτ. αποτ."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Ήχος"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Ακουστικά"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Είσοδος"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Βοηθήματα ακρόασης"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Βοηθήματα ακοής"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Ενεργοποίηση…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Αυτόματη περιστροφή"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Αυτόματη περιστροφή οθόνης"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Ξεκλείδωμα με αναγνώριση προσώπου"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Το πρόσωπο αναγνωρίστηκε"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Σύρετε προς τα πάνω για να δοκιμάσετε ξανά"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Σύρ. προς τα πάνω για να επαναλ. το Ξεκλείδωμα με το πρόσωπο"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Ξεκλείδωμα για χρήση του NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Αυτή η συσκευή ανήκει στον οργανισμό σας."</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Αυτή η συσκευή ανήκει στον οργανισμό <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"Κατάργηση χρήστη;"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Όλες οι εφαρμογές και τα δεδομένα αυτού του χρήστη θα διαγραφούν."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Κατάργηση"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Η εφαρμογή <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> θα έχει πρόσβαση σε όλες τις πληροφορίες που εμφανίζονται στην οθόνη σας ή που αναπαράγονται από τη συσκευή σας κατά την εγγραφή ή τη μετάδοση. Αυτό περιλαμβάνει πληροφορίες όπως κωδικούς πρόσβασης, στοιχεία πληρωμής, φωτογραφίες, μηνύματα και ήχο που αναπαράγετε."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Η υπηρεσία που παρέχει αυτήν τη λειτουργία θα έχει πρόσβαση σε όλες τις πληροφορίες που εμφανίζονται στην οθόνη σας ή που αναπαράγονται από τη συσκευή σας κατά την εγγραφή ή τη μετάδοση. Αυτό περιλαμβάνει πληροφορίες όπως κωδικούς πρόσβασης, στοιχεία πληρωμής, φωτογραφίες, μηνύματα και ήχο που αναπαράγετε."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Έναρξη εγγραφής ή μετάδοσης;"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Έναρξη εγγραφής ή μετάδοσης με <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>;"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Να επιτρέπεται στην εφαρμογή <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> η κοινοποίηση ή η εγγραφή;"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Ολόκληρη την οθόνη"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Μία εφαρμογή"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Όταν κάνετε κοινοποίηση, εγγραφή ή μετάδοση, η εφαρμογή <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> έχει πρόσβαση σε οτιδήποτε είναι ορατό στην οθόνη σας ή αναπαράγεται στη συσκευή σας. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα ή άλλες ευαίσθητες πληροφορίες."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Όταν κάνετε κοινοποίηση, εγγραφή ή μετάδοση μιας εφαρμογής, η εφαρμογή <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> έχει πρόσβαση σε οτιδήποτε είναι ορατό ή αναπαράγεται στη συγκεκριμένη εφαρμογή. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα ή άλλες ευαίσθητες πληροφορίες."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Συνέχεια"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Κοινοποίηση ή εγγραφή εφαρμογής"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Να επιτρέπεται σε αυτήν την εφαρμογή η κοινή χρήση ή εγγραφή;"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Όταν κάνετε κοινοποίηση, εγγραφή ή μετάδοση, αυτή η εφαρμογή έχει πρόσβαση σε οτιδήποτε είναι ορατό στην οθόνη σας ή αναπαράγεται στη συσκευή σας. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα ή άλλες ευαίσθητες πληροφορίες."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Όταν κάνετε κοινοποίηση, εγγραφή ή μετάδοση μιας εφαρμογής, αυτή η εφαρμογή έχει πρόσβαση σε οτιδήποτε είναι ορατό ή αναπαράγεται στη συγκεκριμένη εφαρμογή. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα ή άλλες ευαίσθητες πληροφορίες."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Η εφαρμογή <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> θα έχει πρόσβαση σε όλες τις πληροφορίες που εμφανίζονται στην οθόνη σας ή που αναπαράγονται από τη συσκευή σας κατά την εγγραφή ή τη μετάδοση. Αυτό περιλαμβάνει πληροφορίες όπως κωδικούς πρόσβασης, στοιχεία πληρωμής, φωτογραφίες, μηνύματα και ήχο που αναπαράγετε."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Έναρξη εγγραφής ή μετάδοσης;"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Η υπηρεσία που παρέχει αυτήν τη λειτουργία θα έχει πρόσβαση σε όλες τις πληροφορίες που εμφανίζονται στην οθόνη σας ή που αναπαράγονται από τη συσκευή σας κατά την εγγραφή ή τη μετάδοση. Αυτό περιλαμβάνει πληροφορίες όπως κωδικούς πρόσβασης, στοιχεία πληρωμής, φωτογραφίες, μηνύματα και ήχο που αναπαράγετε."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Ολόκληρη την οθόνη"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Μία εφαρμογή"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Κοινή χρήση ή εγγραφή εφαρμογής"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Έναρξη εγγραφής ή μετάδοσης με <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>;"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Όταν κάνετε κοινή χρήση, εγγραφή ή μετάδοση, η εφαρμογή <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> έχει πρόσβαση σε οτιδήποτε είναι ορατό στην οθόνη σας ή αναπαράγεται στη συσκευή σας. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα, τις φωτογραφίες, τον ήχο και το βίντεο."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Όταν κάνετε κοινή χρήση, εγγραφή ή μετάδοση μιας εφαρμογής, η εφαρμογή <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> έχει πρόσβαση σε οτιδήποτε είναι ορατό ή αναπαράγεται στη συγκεκριμένη εφαρμογή. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα, τις φωτογραφίες, τον ήχο και το βίντεο."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Έναρξη"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Έναρξη μετάδοσης;"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Όταν κάνετε μετάδοση, το Android έχει πρόσβαση σε οτιδήποτε είναι ορατό στην οθόνη σας ή αναπαράγεται στη συσκευή σας. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα, τις φωτογραφίες, τον ήχο και το βίντεο."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Όταν κάνετε μετάδοση μιας εφαρμογής, το Android έχει πρόσβαση σε οτιδήποτε είναι ορατό ή αναπαράγεται στη συγκεκριμένη εφαρμογή. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα, τις φωτογραφίες, τον ήχο και το βίντεο."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Έναρξη μετάδοσης"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Έναρξη κοινοποίησης περιεχομένου;"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Όταν κάνετε κοινή χρήση, εγγραφή ή μετάδοση, το Android έχει πρόσβαση σε οτιδήποτε είναι ορατό στην οθόνη σας ή αναπαράγεται στη συσκευή σας. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα, τις φωτογραφίες, τον ήχο και το βίντεο."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Όταν κάνετε κοινή χρήση, εγγραφή ή μετάδοση μιας εφαρμογής, το Android έχει πρόσβαση σε οτιδήποτε είναι ορατό ή αναπαράγεται στη συγκεκριμένη εφαρμογή. Επομένως, να είστε προσεκτικοί με τους κωδικούς πρόσβασης, τα στοιχεία πληρωμής, τα μηνύματα, τις φωτογραφίες, τον ήχο και το βίντεο."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Έναρξη"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Η κοινοποίηση τίθεται σε παύση κατά την εναλλαγή μεταξύ εφαρμογών"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Εναλλακτικά, κοινοποιήστε την εφαρμογή"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Επιστροφή"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Εναλλαγή μεταξύ εφαρμογών"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Αποκλείστηκε από τον διαχειριστή IT"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Η καταγραφή οθόνης έχει απενεργοποιηθεί από την πολιτική χρήσης συσκευής."</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Διαγραφή όλων"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Μια αρχή έκδοσης πιστοποιητικών έχει εγκατασταθεί σε αυτήν τη συσκευή. Η ασφαλής επισκεψιμότητα δικτύου σας μπορεί να παρακολουθείται ή να τροποποιείται."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Ο διαχειριστής σας ενεργοποίησε την καταγραφή δικτύου, η οποία παρακολουθεί την επισκεψιμότητα στη συσκευή σας."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Ο διαχειριστής σας έχει ενεργοποιήσει την καταγραφή δικτύου, η οποία παρακολουθεί την επισκεψιμότητα στο προφίλ εργασίας σας, αλλά όχι στο προσωπικό προφίλ σας."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Αυτή η συσκευή συνδέεται στο διαδίκτυο μέσω της εφαρμογής <xliff:g id="VPN_APP">%1$s</xliff:g>. Η δραστηριότητα δικτύου σας, συμπεριλαμβανομένων των μηνυμάτων ηλεκτρονικού ταχυδρομείου και των δεδομένων περιήγησης, είναι ορατή στον διαχειριστή IT σας."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Αυτή η συσκευή συνδέεται στο διαδίκτυο μέσω της εφαρμογής <xliff:g id="VPN_APP">%1$s</xliff:g>. Η δραστηριότητα δικτύου, συμπεριλαμβανομένων των μηνυμάτων ηλεκτρονικού ταχυδρομείου και των δεδομένων περιήγησης, είναι ορατή στον πάροχο VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Αυτή η συσκευή συνδέεται στο διαδίκτυο μέσω της εφαρμογής <xliff:g id="VPN_APP">%1$s</xliff:g>. Η δραστηριότητα δικτύου σας, συμπεριλαμβανομένων των μηνυμάτων ηλεκτρονικού ταχυδρομείου και των δεδομένων περιήγησης, είναι ορατή στον διαχειριστή IT σας."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Αυτή η συσκευή συνδέεται στο διαδίκτυο μέσω των εφαρμογών <xliff:g id="VPN_APP_0">%1$s</xliff:g> και <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Η δραστηριότητα δικτύου σας, συμπεριλαμβανομένων των μηνυμάτων ηλεκτρονικού ταχυδρομείου και των δεδομένων περιήγησης, είναι ορατή στον διαχειριστή IT σας."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Οι εφαρμογές εργασιών σας συνδέονται στο διαδίκτυο μέσω της εφαρμογής <xliff:g id="VPN_APP">%1$s</xliff:g>. Η δραστηριότητα δικτύου σας στις εφαρμογές εργασίας, συμπεριλαμβανομένων των μηνυμάτων ηλεκτρονικού ταχυδρομείου και των δεδομένων περιήγησης, είναι ορατή στον διαχειριστή IT και τον πάροχο VPN σας."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Οι προσωπικές εφαρμογές σας συνδέονται στο διαδίκτυο μέσω της εφαρμογής <xliff:g id="VPN_APP">%1$s</xliff:g>. Η δραστηριότητα δικτύου, συμπεριλαμβανομένων των μηνυμάτων ηλεκτρονικού ταχυδρομείου και των δεδομένων περιήγησης, είναι ορατή στον πάροχο VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"απενεργοποίηση"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Ήχος και δόνηση"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Ρυθμίσεις"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Μειώθηκε σε πιο ασφαλή ένταση ήχου"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Η ένταση ήχου ήταν σε υψηλό επίπεδο για μεγαλύτερο διάστημα από αυτό που συνιστάται"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Η ένταση ήχου μειώθηκε σε πιο ασφαλές επίπεδο"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Η ένταση ήχου των ακουστικών ήταν σε υψηλό επίπεδο για μεγαλύτερο διάστημα από αυτό που συνιστάται"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Η ένταση ήχου των ακουστικών ξεπέρασε το ασφαλές όριο για αυτήν την εβδομάδα"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Συνέχιση ακρόασης"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Μείωση έντασης ήχου"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Η εφαρμογή είναι καρφιτσωμένη."</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Με αυτόν τον τρόπο παραμένει σε προβολή μέχρι να το ξεκαρφιτσώσετε. Αγγίξτε παρατεταμένα τα στοιχεία \"Επιστροφή\" και \"Επισκόπηση\" για ξεκαρφίτσωμα."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Με αυτόν τον τρόπο, παραμένει σε προβολή μέχρι να το ξεκαρφιτσώσετε. Αγγίξτε παρατεταμένα τα στοιχεία \"Πίσω\" και \"Αρχική οθόνη\" για ξεκαρφίτσωμα."</string>
@@ -630,7 +660,7 @@
     <string name="keyboard_shortcut_search_category_current_app" msgid="2011953559133734491">"Τρέχ. εφαρμογή"</string>
     <string name="group_system_access_notification_shade" msgid="7116898151485382275">"Πρόσβαση στο πλαίσιο σκίασης ειδοποιήσεων"</string>
     <string name="group_system_full_screenshot" msgid="7389040853798023211">"Λήψη πλήρους στιγμιότυπου οθόνης"</string>
-    <string name="group_system_access_system_app_shortcuts" msgid="4421497579210445641">"Πρόσβαση σε λίστα συστήματος / συντομεύσεις εφαρμογών"</string>
+    <string name="group_system_access_system_app_shortcuts" msgid="4421497579210445641">"Πρόσβαση σε λίστα συντομεύσεων συστήματος / εφαρμογών"</string>
     <string name="group_system_go_back" msgid="8838454003680364227">"Πίσω: επιστροφή στην προηγούμενη κατάσταση (κουμπί πίσω)"</string>
     <string name="group_system_access_home_screen" msgid="1857344316928441909">"Πρόσβαση στην αρχική οθόνη"</string>
     <string name="group_system_overview_open_apps" msgid="6897128761003265350">"Επισκόπηση ανοιχτών εφαρμογών"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Μενού λειτουργίας"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Σελίδα <xliff:g id="ID_1">%1$d</xliff:g> από <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Οθόνη κλειδώματος"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Το τηλέφωνο απεν. λόγω ζέστης"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Το τηλέφωνο λειτουργεί πλέον κανονικά.\nΠατήστε για περισσότερες πληροφορίες."</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Η θερμοκρασία του τηλεφώνου είναι πολύ υψηλή και απενεργοποιήθηκε για να κρυώσει. Πλέον, λειτουργεί κανονικά.\n\nΗ θερμοκρασία ενδέχεται να ανέβει κατά τη:\n	• Χρήση εφαρμογών υψηλής κατανάλωσης πόρων (όπως gaming, βίντεο ή περιήγησης)\n	• Λήψη/μεταφόρτωση μεγάλων αρχείων\n	• Χρήση σε υψηλές θερμοκρασίες"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Δείτε βήματα αντιμετώπισης."</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Αύξηση θερμοκρασίας τηλεφώνου"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Ορισμένες λειτουργίες περιορίζονται κατά τη μείωση της θερμοκρασίας.\nΠατήστε για περισσότερες πληροφορίες."</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Το τηλέφωνό σας θα προσπαθήσει να μειώσει αυτόματα τη θερμοκρασία. Μπορείτε να εξακολουθήσετε να το χρησιμοποιείτε, αλλά είναι πιθανό να λειτουργεί πιο αργά.\n\nΜόλις μειωθεί η θερμοκρασία του τηλεφώνου σας, θα λειτουργεί ξανά κανονικά."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Δείτε βήματα αντιμετώπισης."</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Αποσυνδέστε τη συσκευή"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Η συσκευή έχει αρχίσει να ζεσταίνεται κοντά στη θύρα φόρτισης. Αν είναι συνδεδεμένη σε φορτιστή ή αξεσουάρ USB, αποσυνδέστε την και προσέξτε γιατί και το καλώδιο μπορεί να έχει ζεσταθεί."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Μεγέθυνση πλήρους οθόνης"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Μεγέθυνση μέρους της οθόνης"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Άνοιγμα ρυθμίσεων μεγιστοποίησης"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Κλείσιμο ρυθμίσεων μεγιστοποίησης"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Σύρετε τη γωνία για αλλαγή μεγέθους"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Να επιτρέπεται η διαγώνια κύλιση"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Αλλαγή μεγέθους"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"μη αγαπημένο"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Μετακίνηση στη θέση <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Στοιχεία ελέγχου"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Επιλέξτε στοιχεία ελέγχου συσκευής για εύκολη πρόσβαση"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Κρατήστε και σύρετε για αναδιάταξη των στοιχείων ελέγχου"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Όλα τα στοιχεία ελέγχου καταργήθηκαν"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Οι αλλαγές δεν αποθηκεύτηκαν"</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Δοκιμάστε άλλο PIN."</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Επιβεβαίωση αλλαγής για <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Σύρετε για να δείτε περισσότερα."</string>
+    <string name="retry_face" msgid="416380073082560186">"Επανάληψη ελέγχου ταυτότητας προσώπου"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Φόρτωση προτάσεων"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Μέσα"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"Απόκρυψη στοιχείων ελέγχου μέσων για την εφαρμ. <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"Απόκρυψη στοιχ. ελέγχου μέσων για <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"Αδυναμία απόκρ. τρέχουσας περιόδ. λειτουργ. μέσου."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Απόκρυψη"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Συνέχιση"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Ρυθμίσεις"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Γίνεται αναπαραγωγή του <xliff:g id="SONG_NAME">%1$s</xliff:g> από <xliff:g id="ARTIST_NAME">%2$s</xliff:g> στην εφαρμογή <xliff:g id="APP_LABEL">%3$s</xliff:g>."</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> από <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> εκτελείται"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Αναπαραγωγή"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Παύση"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Προηγούμενο κομμάτι"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Ηχεία και οθόνες"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Προτεινόμενες συσκευές"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Διακόψτε την κοινόχρηστη περίοδο λειτουργίας για να μεταφέρετε μέσα σε άλλη συσκευή"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Διακοπή"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Πώς λειτουργεί η μετάδοση"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Μετάδοση"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Οι άνθρωποι με συμβατές συσκευές Bluetooth που βρίσκονται κοντά σας μπορούν να ακούσουν το μέσο που μεταδίδετε."</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Δεν είναι δυνατή η αποθήκευση. Δοκιμάστε ξανά."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Δεν είναι δυνατή η αποθήκευση."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Χρησιμοποιήστε τουλάχιστον 4 χαρακτήρες"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Χρησιμοποιήστε λιγότερους από 16 χαρακτήρες"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Χρησιμοποιήστε λιγότερους από <xliff:g id="LENGTH">%1$d</xliff:g> χαρακτήρες"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Αριθμός έκδοσης"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Ο αριθμός έκδοσης αντιγράφηκε στο πρόχειρο."</string>
     <string name="basic_status" msgid="2315371112182658176">"Άνοιγμα συνομιλίας"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Υπάρχει κάποιο πρόβλημα με την ανάγνωση του μετρητή μπαταρίας"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Πατήστε για περισσότερες πληροφορίες."</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Δεν ορίστηκε ξυπνητ."</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"εισαγωγή κλειδώματος οθόνης"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Αισθητήρας δακτυλικών αποτυπωμάτων"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"έλεγχος ταυτότητας"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"εισαγωγή συσκευής"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Ο Βοηθός ακούει"</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="note_task_button_label" msgid="8718616095800343136">"Δημιουργία σημειώσεων"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Δημιουργία σημειώσεων"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Δημιουργία σημειώσεων, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Μάθετε περισσότερα"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Μάθετε περισσότερα στο <xliff:g id="URL">%s</xliff:g>."</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Άνοιγμα <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Η εφαρμογή έχει ρυθμιστεί"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Έχει προστεθεί τουλάχιστον μία κάρτα στο Πορτοφόλι"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Εγκαταστήσατε μια εφαρμογή κάμερας"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Η εφαρμογή έχει ρυθμιστεί"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Είναι διαθέσιμη τουλάχιστον μία συσκευή"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Για να προσθέσετε ως συντόμευση την εφαρμογή Πορτοφόλι, βεβαιωθείτε ότι έχει εγκατασταθεί η εφαρμογή"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Για να προσθέσετε ως συντόμευση την εφαρμογή Πορτοφόλι, βεβαιωθείτε ότι έχει προστεθεί τουλάχιστον μία κάρτα"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Για να προσθέσετε ως συντόμευση τη Σάρωση κωδικών QR, βεβαιωθείτε ότι η εφαρμογή κάμερας είναι εγκατεστημένη"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Για να προσθέσετε την εφαρμογή Home ως συντόμευση, βεβαιωθείτε ότι η εφαρμογή είναι εγκατεστημένη"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Είναι διαθέσιμη τουλάχιστον μία συσκευή"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Επιλέξτε μια προεπιλεγμένη εφαρμογή σημειώσεων για να χρησιμοποιήσετε τη συντόμευση δημιουργίας σημειώσεων"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Επιλογή εφαρμογής"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Παρατεταμένο άγγιγμα συντόμευσης"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Ακύρωση"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Εναλλαγή οθονών τώρα"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Συνδέστε τη γραφίδα σε έναν φορτιστή"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Χαμηλή στάθμη μπαταρίας γραφίδας"</string>
     <string name="video_camera" msgid="7654002575156149298">"Βιντεοκάμερα"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Δεν είναι δυνατή η κλήση από αυτό το προφίλ"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Η πολιτική εργασίας σάς επιτρέπει να πραγματοποιείτε τηλεφωνικές κλήσεις μόνο από το προφίλ εργασίας σας."</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Δεν είναι δυνατές οι κλήσεις από μια προσωπική εφαρμογή"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Ο οργανισμός σας επιτρέπει την πραγματοποίηση κλήσεων μόνο από εφαρμογές εργασιών"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Εναλλαγή σε προφίλ εργασίας"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Κλείσιμο"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Εγκαταστήστε μια εφαρμογή εργασιών για τηλεφωνικές κλήσεις"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Ακύρωση"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Προσαρμογή οθόνης κλειδώματος"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Ξεκλειδώστε για προσαρμογή της οθόνης κλειδώματος"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Δεν υπάρχει διαθέσιμο δίκτυο Wi-Fi"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Η κάμερα έχει αποκλειστεί"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Η κάμερα και το μικρόφωνο έχουν αποκλειστεί"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Το μικρόφωνο έχει αποκλειστεί"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Η λειτουργία προτεραιότητας είναι ενεργοποιημένη"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Ο Βοηθός βρίσκεται σε αναμονή"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Ορίστε την προεπιλεγμένη εφαρμογή σημειώσεων στις Ρυθμίσεις"</string>
+    <string name="install_app" msgid="5066668100199613936">"Εγκατάσταση εφαρμογής"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Μικρόφωνο και Κάμερα"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Πρόσφατη χρήση εφαρμογής"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Εμφάνιση πρόσφατης πρόσβασης"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Τέλος"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Ανάπτυξη και εμφάνιση επιλογών"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Σύμπτυξη"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Κλείσιμο αυτής της εφαρμογής"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> έκλεισε"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Διαχείριση υπηρεσίας"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Διαχείριση πρόσβασης"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Χρησιμοποιείται από την τηλεφωνική κλήση"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Χρησιμοποιήθηκε πρόσφατα στην τηλεφωνική κλήση"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Χρησιμοποιείται από την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Χρησιμοποιήθηκε πρόσφατα από την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Χρησιμοποιείται από την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Χρησιμοποιήθηκε πρόσφατα από την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Χρησιμοποιείται από την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Χρησιμοποιήθηκε πρόσφατα από την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-el/strings_tv.xml b/packages/SystemUI/res/values-el/strings_tv.xml
deleted file mode 100644
index 9fb126d..0000000
--- a/packages/SystemUI/res/values-el/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"Το VPN συνδέθηκε"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"Το VPN αποσυνδέθηκε"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Μέσω <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Ειδοποιήσεις"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Δεν υπάρχουν ειδοποιήσεις."</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Πραγματοποιείται εγγραφή από το μικρόφωνο"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Πραγματοποιείται εγγραφή από την κάμερα"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Πραγματοποιείται εγγραφή από την κάμερα και το μικρόφωνο"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Η εγγραφή από το μικρόφωνο διακόπηκε"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Η εγγραφή από την κάμερα διακόπηκε"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Η εγγραφή από την κάμερα και το μικρόφωνο διακόπηκε"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Η εγγραφή οθόνης ξεκίνησε"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Η εγγραφή οθόνης σταμάτησε"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index bed2089..5d713bb 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> detected this screenshot."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> and other open apps detected this screenshot."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Add to note"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Screen Recorder"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Screen recorder"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Processing screen recording"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ongoing notification for a screen record session"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Start recording?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"While recording, the Android System can capture any sensitive information that’s visible on your screen or played on your device. This includes passwords, payment info, photos, messages and audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Record entire screen"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Record a single app"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"While you\'re recording, Android has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"While you\'re recording an app, Android has access to anything shown or played on that app. So, be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Start recording"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Start recording?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"While you’re recording, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"While you’re recording an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Start recording"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Record audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Device audio"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Sound from your device, like music, calls and ringtones"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Microphone"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Device audio and microphone"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Start"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Start"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Recording screen"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Recording screen and audio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Show touches on screen"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Share"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Screen recording saved"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Tap to view"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Error deleting screen recording"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Error saving screen recording"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Error starting screen recording"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Viewing full screen"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"To exit, swipe down from the top."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Got it"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Back"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Home"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Face authenticated"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmed"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tap Confirm to complete"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Unlocked by face. Press the unlock icon to continue."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Unlocked by face"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Unlocked by face. Press to continue."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Face recognised. Press to continue."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Face recognised. Press the unlock icon to continue."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authenticated"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Cancel authentication"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Use PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Use pattern"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Use password"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"If you enter an incorrect pattern on the next attempt, your work profile and its data will be deleted."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"If you enter an incorrect PIN on the next attempt, your work profile and its data will be deleted."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"If you enter an incorrect password on the next attempt, your work profile and its data will be deleted."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Set up"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Not now"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"This is required to improve security and performance"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Set up Fingerprint Unlock again"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Fingerprint Unlock"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Set up Fingerprint Unlock"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"To set up Fingerprint Unlock again, your current fingerprint images and models will be deleted.\n\nAfter they\'re deleted, you\'ll need to set up Fingerprint Unlock again to use your fingerprint to unlock your phone or verify that it\'s you."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"To set up Fingerprint Unlock again, your current fingerprint images and model will be deleted.\n\nAfter they\'re deleted, you\'ll need to set up Fingerprint Unlock again to use your fingerprint to unlock your phone or verify that it\'s you."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Couldn\'t set up Fingerprint Unlock. Go to Settings to try again."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Set up Face Unlock again"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Face Unlock"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Set up Face Unlock"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"To set up Face Unlock again, your current face model will be deleted.\n\nYou\'ll need to set up this feature again to use your face to unlock your phone."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Couldn\'t set up Face Unlock. Go to Settings to try again."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Touch the fingerprint sensor"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Press the unlock icon to continue"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Can’t recognise face. Use fingerprint instead."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Hearing Aids"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hearing aids"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Turning on…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Unlocked by face"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Face recognised"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Swipe up to try again"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Swipe up to try Face Unlock again"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Unlock to use NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"This device belongs to your organisation"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"This device belongs to <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages and audio that you play."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"The service providing this function will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages and audio that you play."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Start recording or casting?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Start recording or casting with <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Allow <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> to share or record?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Entire screen"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"A single app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"When you\'re sharing, recording or casting, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"When you\'re sharing, recording or casting an app, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything shown or played on that app. So, be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continue"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Share or record an app"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Allow this app to share or record?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"When you\'re sharing, recording or casting, this app has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"When you\'re sharing, recording or casting an app, this app has access to anything shown or played on that app. So be careful with passwords, payment details, messages or other sensitive information."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages and audio that you play."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Start recording or casting?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"The service providing this function will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages and audio that you play."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Entire screen"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"A single app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Share or record an app"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Start recording or casting with <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"When you’re sharing, recording or casting, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"When you’re sharing, recording or casting an app, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Start"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Start casting?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"When you’re casting, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"When you’re casting an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Start casting"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Start sharing?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"When you’re sharing, recording or casting, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"When you’re sharing, recording or casting an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Start"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Sharing pauses when you switch apps"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Share this app instead"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Switch back"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"App switch"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blocked by your IT admin"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Screen capturing is disabled by device policy"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Clear all"</string>
@@ -434,17 +460,18 @@
     <string name="monitoring_subtitle_vpn" msgid="800485258004629079">"VPN"</string>
     <string name="monitoring_subtitle_network_logging" msgid="2444199331891219596">"Network logging"</string>
     <string name="monitoring_subtitle_ca_certificate" msgid="8588092029755175800">"CA certificates"</string>
-    <string name="monitoring_button_view_policies" msgid="3869724835853502410">"View Policies"</string>
+    <string name="monitoring_button_view_policies" msgid="3869724835853502410">"View policies"</string>
     <string name="monitoring_button_view_controls" msgid="8316440345340701117">"View controls"</string>
     <string name="monitoring_description_named_management" msgid="505833016545056036">"This device belongs to <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nYour IT admin can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nFor more information, contact your IT admin."</string>
     <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> may be able to access data associated with this device, manage apps and change this device\'s settings.\n\nIf you have questions, contact <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g>."</string>
-    <string name="monitoring_description_management" msgid="4308879039175729014">"This device belongs to your organisation.\n\nYour IT admin can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nFor more information, contact your IT admin."</string>
+    <string name="monitoring_description_management" msgid="4308879039175729014">"This device belongs to your organisation.\n\nYour IT admin can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nFor more information, contact your IT admin."</string>
     <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"Your organisation installed a certificate authority on this device. Your secure network traffic may be monitored or modified."</string>
     <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"Your organisation installed a certificate authority in your work profile. Your secure network traffic may be monitored or modified."</string>
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"A certificate authority is installed on this device. Your secure network traffic may be monitored or modified."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Your admin has turned on network logging, which monitors traffic on your device."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Your admin has turned on network logging, which monitors traffic in your work profile but not in your personal profile."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"This device is connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your IT admin."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"This device is connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to the VPN provider."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"This device is connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your IT admin."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"This device is connected to the Internet through <xliff:g id="VPN_APP_0">%1$s</xliff:g> and <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your IT admin."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Your work apps are connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity in work apps, including emails and browsing data, is visible to your IT admin and VPN provider."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Your personal apps are connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your VPN provider."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"disable"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Sound and vibration"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Settings"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Lowered to safer volume"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"The volume has been high for longer than recommended"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volume lowered to safer level"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Headphone volume has been high for longer than recommended"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Headphone volume has exceeded the safe limit for this week"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Keep listening"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Lower volume"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"App is pinned"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"This keeps it in view until you unpin. Touch &amp; hold Back and Overview to unpin."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"This keeps it in view until you unpin. Touch &amp; hold Back and Home to unpin."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Power menu"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Page <xliff:g id="ID_1">%1$d</xliff:g> of <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Lock screen"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Phone turned off due to heat"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Your phone is now running normally.\nTap for more info"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Your phone was too hot, so it turned off to cool down. Your phone is now running normally.\n\nYour phone may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video or navigation apps)\n	• Download or upload large files\n	• Use your phone in high temperatures"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"See care steps"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Phone is getting warm"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Some features are limited while phone cools down.\nTap for more info"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Your phone will automatically try to cool down. You can still use your phone, but it may run more slowly.\n\nOnce your phone has cooled down, it will run normally."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"See care steps"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Unplug your device"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Your device is getting warm near the charging port. If it’s connected to a charger or USB accessory, unplug it and take care as the cable may also be warm."</string>
@@ -794,7 +818,7 @@
     <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"your operator"</string>
     <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Switch back to <xliff:g id="CARRIER">%s</xliff:g>?"</string>
     <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Mobile data won\'t automatically switch based on availability"</string>
-    <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"No thanks"</string>
+    <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"No, thanks"</string>
     <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Yes, switch"</string>
     <string name="touch_filtered_warning" msgid="8119511393338714836">"Because an app is obscuring a permission request, Settings can’t verify your response."</string>
     <string name="slice_permission_title" msgid="3262615140094151017">"Allow <xliff:g id="APP_0">%1$s</xliff:g> to show <xliff:g id="APP_2">%2$s</xliff:g> slices?"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Magnify full screen"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Magnify part of screen"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Open magnification settings"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Close magnification settings"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Drag corner to resize"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Allow diagonal scrolling"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Resize"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"unfavourite"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Move to position <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Choose device controls to access quickly"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Changes not saved"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Try another PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Confirm change for <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Swipe to see more"</string>
+    <string name="retry_face" msgid="416380073082560186">"Retry face authentication"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Loading recommendations"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Hide this media control for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Settings"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> is playing from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> of <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> is running"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Play"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pause"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Previous track"</string>
@@ -967,8 +993,10 @@
     <string name="media_output_dialog_accessibility_title" msgid="4681741064190167888">"Available devices for audio output."</string>
     <string name="media_output_dialog_accessibility_seekbar" msgid="5332843993805568978">"Volume"</string>
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
-    <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Speakers &amp; displays"</string>
+    <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Speakers and displays"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Suggested devices"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Stop your shared session to move media to another device"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Stop"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"How broadcasting works"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Broadcast"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"People near you with compatible Bluetooth devices can listen to the media that you\'re broadcasting"</string>
@@ -981,13 +1009,13 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Can’t save. Try again."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Can’t save."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Use at least four characters"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Use fewer than 16 characters"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Use fewer than <xliff:g id="LENGTH">%1$d</xliff:g> characters"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Build number"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Build number copied to clipboard."</string>
     <string name="basic_status" msgid="2315371112182658176">"Open conversation"</string>
     <string name="select_conversation_title" msgid="6716364118095089519">"Conversation widgets"</string>
     <string name="select_conversation_text" msgid="3376048251434956013">"Tap a conversation to add it to your home screen"</string>
-    <string name="no_conversations_text" msgid="5354115541282395015">"Your recent conversations will show up here"</string>
+    <string name="no_conversations_text" msgid="5354115541282395015">"Your recent conversations will show here"</string>
     <string name="priority_conversations" msgid="3967482288896653039">"Priority conversations"</string>
     <string name="recent_conversations" msgid="8531874684782574622">"Recent conversations"</string>
     <string name="days_timestamp" msgid="5821854736213214331">"<xliff:g id="DURATION">%1$s</xliff:g> days ago"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problem reading your battery meter"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Tap for more information"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"No alarm set"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"enter screen lock"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Fingerprint sensor"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"Authenticate"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"enter device"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant is listening"</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="note_task_button_label" msgid="8718616095800343136">"Notetaking"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Note-taking"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Note-taking, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Learn more"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Learn more at <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Open <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• The app is set up"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• At least one card has been added to Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Install a camera app"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• The app is set up"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• At least one device is available"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"To add the Wallet app as a shortcut, make sure that the app is installed"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"To add the Wallet app as a shortcut, make sure that at least one card has been added"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"To add the QR code scanner as a shortcut, make sure that a camera app is installed"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"To add the Home app as a shortcut, make sure that the app is installed"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• At least one device is available"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Select a default notes app to use the note-taking shortcut"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Select app"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Touch &amp; hold shortcut"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Cancel"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Switch screens now"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Connect your stylus to a charger"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Stylus battery low"</string>
     <string name="video_camera" msgid="7654002575156149298">"Video camera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Can\'t call from this profile"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Your work policy allows you to make phone calls only from the work profile"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Can\'t call from a personal app"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Your organisation only allows you to make calls from work apps"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Switch to work profile"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Close"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Install a work phone app"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Cancel"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Customise lock screen"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Unlock to customise lock screen"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi not available"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Priority mode on"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant attention on"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Set default notes app in Settings"</string>
+    <string name="install_app" msgid="5066668100199613936">"Install app"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Microphone &amp; Camera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Recent app use"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"See recent access"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Done"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Expand and show options"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Collapse"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Close this app"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> closed"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Manage service"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Manage access"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"In use by phone call"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Recently used in phone call"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"In use by <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Recently used by <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"In use by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Recently used by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"In use by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Recently used by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rAU/strings_tv.xml b/packages/SystemUI/res/values-en-rAU/strings_tv.xml
deleted file mode 100644
index e97dbe4..0000000
--- a/packages/SystemUI/res/values-en-rAU/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN is connected"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN is disconnected"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Via <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notifications"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"No notifications"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Microphone is recording"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Camera is recording"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Camera and microphone are recording"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Microphone stopped recording"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Camera stopped recording"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Camera and microphone stopped recording"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Screen recording started"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Screen recording stopped"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index 01cccac..9d4a4fe 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> detected this screenshot."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> and other open apps detected this screenshot."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Add to note"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Screen Recorder"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Screen Recorder"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Processing screen recording"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ongoing notification for a screen record session"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Start Recording?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"While recording, Android System can capture any sensitive information that’s visible on your screen or played on your device. This includes passwords, payment info, photos, messages, and audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Record entire screen"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Record a single app"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"While you\'re recording, Android has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages, or other sensitive information."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"While you\'re recording an app, Android has access to anything shown or played on that app. So be careful with passwords, payment details, messages, or other sensitive information."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Start recording"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Start Recording?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"While you’re recording, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, and audio and video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"While you’re recording an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, and audio and video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Start recording"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Record audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Device audio"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Sound from your device, like music, calls, and ringtones"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Microphone"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Device audio and microphone"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Start"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Start"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Recording screen"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Recording screen and audio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Show touches on screen"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Share"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Screen recording saved"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Tap to view"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Error deleting screen recording"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Error saving screen recording"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Error starting screen recording"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Viewing full screen"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"To exit, swipe down from the top."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Got it"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Back"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Home"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Face authenticated"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmed"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tap Confirm to complete"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Unlocked by face. Press the unlock icon to continue."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Unlocked by face"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Unlocked by face. Press to continue."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Face recognized. Press to continue."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Face recognized. Press the unlock icon to continue."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authenticated"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Cancel Authentication"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Use PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Use pattern"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Use password"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"If you enter an incorrect pattern on the next attempt, your work profile and its data will be deleted."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"If you enter an incorrect PIN on the next attempt, your work profile and its data will be deleted."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"If you enter an incorrect password on the next attempt, your work profile and its data will be deleted."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Set up"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Not now"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"This is required to improve security and performance"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Set up Fingerprint Unlock again"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Fingerprint Unlock"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Set up Fingerprint Unlock"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"To set up Fingerprint Unlock again, your current fingerprint images and models will be deleted.\n\nAfter theyre deleted, youll need to set up Fingerprint Unlock again to use your fingerprint to unlock your phone or verify its you."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"To set up Fingerprint Unlock again, your current fingerprint images and model will be deleted.\n\nAfter theyre deleted, youll need to set up Fingerprint Unlock again to use your fingerprint to unlock your phone or verify its you."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Couldn’t set up fingerprint unlock. Go to Settings to try again."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Set up Face Unlock again"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Face Unlock"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Set up Face Unlock"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"To set up Face Unlock again, your current face model will be deleted.\n\nYoull need to set up this feature again to use your face to unlock your phone."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Couldn’t set up face unlock. Go to Settings to try again."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Touch the fingerprint sensor"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Press the unlock icon to continue"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Can’t recognize face. Use fingerprint instead."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Hearing Aids"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hearing aids"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Turning on…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Unlocked by face"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Face recognized"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Swipe up to try again"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Swipe up to try Face Unlock again"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Unlock to use NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"This device belongs to your organization"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"This device belongs to <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages, and audio that you play."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"The service providing this function will have access to all of the information that\'s visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages and audio that you play."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Start recording or casting?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Start recording or casting with <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Allow <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> to share or record?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Entire screen"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"A single app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"When you\'re sharing, recording, or casting, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages, or other sensitive information."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"When you\'re sharing, recording, or casting an app, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything shown or played on that app. So be careful with passwords, payment details, messages, or other sensitive information."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continue"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Share or record an app"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Allow this app to share or record?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"When you\'re sharing, recording, or casting, this app has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages, or other sensitive information."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"When you\'re sharing, recording, or casting an app, this app has access to anything shown or played on that app. So be careful with passwords, payment details, messages, or other sensitive information."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages, and audio that you play."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Start recording or casting?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"The service providing this function will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages, and audio that you play."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Entire screen"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"A single app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Share or record an app"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Start recording or casting with <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"When you’re sharing, recording, or casting, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, and audio and video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"When you’re sharing, recording, or casting an app, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, and audio and video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Start"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Start casting?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"When you’re casting, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, and audio and video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"When you’re casting an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, and audio and video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Start casting"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Start sharing?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"When you’re sharing, recording, or casting, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, and audio and video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"When you’re sharing, recording, or casting an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, and audio and video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Start"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Sharing pauses when you switch apps"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Share this app instead"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Switch back"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"App switch"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blocked by your IT admin"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Screen capturing is disabled by device policy"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Clear all"</string>
@@ -434,17 +460,18 @@
     <string name="monitoring_subtitle_vpn" msgid="800485258004629079">"VPN"</string>
     <string name="monitoring_subtitle_network_logging" msgid="2444199331891219596">"Network logging"</string>
     <string name="monitoring_subtitle_ca_certificate" msgid="8588092029755175800">"CA certificates"</string>
-    <string name="monitoring_button_view_policies" msgid="3869724835853502410">"View Policies"</string>
+    <string name="monitoring_button_view_policies" msgid="3869724835853502410">"View policies"</string>
     <string name="monitoring_button_view_controls" msgid="8316440345340701117">"View controls"</string>
-    <string name="monitoring_description_named_management" msgid="505833016545056036">"This device belongs to <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nYour IT admin can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nFor more information, contact your IT admin."</string>
+    <string name="monitoring_description_named_management" msgid="505833016545056036">"This device belongs to <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nYour IT admin can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nFor more information, contact your IT admin."</string>
     <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> may be able to access data associated with this device, manage apps, and change this devices settings.\n\nIf you have questions, contact <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g>."</string>
-    <string name="monitoring_description_management" msgid="4308879039175729014">"This device belongs to your organization.\n\nYour IT admin can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nFor more information, contact your IT admin."</string>
+    <string name="monitoring_description_management" msgid="4308879039175729014">"This device belongs to your organization.\n\nYour IT admin can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nFor more information, contact your IT admin."</string>
     <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"Your organization installed a certificate authority on this device. Your secure network traffic may be monitored or modified."</string>
     <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"Your organization installed a certificate authority in your work profile. Your secure network traffic may be monitored or modified."</string>
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"A certificate authority is installed on this device. Your secure network traffic may be monitored or modified."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Your admin has turned on network logging, which monitors traffic on your device."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Your admin has turned on network logging, which monitors traffic in your work profile but not in your personal profile."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"This device is connected to the internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your IT admin."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"This device is connected to the internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to the VPN provider."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"This device is connected to the internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your IT admin."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"This device is connected to the internet through <xliff:g id="VPN_APP_0">%1$s</xliff:g> and <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your IT admin."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Your work apps are connected to the internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity in work apps, including emails and browsing data, is visible to your IT admin and VPN provider."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Your personal apps are connected to the internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your VPN provider."</string>
@@ -462,18 +489,21 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"disable"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Sound and vibration"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Settings"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Lowered to safer volume"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"The volume has been high for longer than recommended"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volume lowered to safer level"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Headphone volume has been high for longer than recommended"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Headphone volume has exceeded the safe limit for this week"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Keep listening"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Lower volume"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"App is pinned"</string>
-    <string name="screen_pinning_description" msgid="8699395373875667743">"This keeps it in view until you unpin. Touch &amp; hold Back and Overview to unpin."</string>
-    <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"This keeps it in view until you unpin. Touch &amp; hold Back and Home to unpin."</string>
+    <string name="screen_pinning_description" msgid="8699395373875667743">"This keeps it in view until you unpin. Touch and hold Back and Overview to unpin."</string>
+    <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"This keeps it in view until you unpin. Touch and hold Back and Home to unpin."</string>
     <string name="screen_pinning_description_gestural" msgid="7246323931831232068">"This keeps it in view until you unpin. Swipe up &amp; hold to unpin."</string>
-    <string name="screen_pinning_description_accessible" msgid="7386449191953535332">"This keeps it in view until you unpin. Touch &amp; hold Overview to unpin."</string>
-    <string name="screen_pinning_description_recents_invisible_accessible" msgid="2857071808674481986">"This keeps it in view until you unpin. Touch &amp; hold Home to unpin."</string>
+    <string name="screen_pinning_description_accessible" msgid="7386449191953535332">"This keeps it in view until you unpin. Touch and hold Overview to unpin."</string>
+    <string name="screen_pinning_description_recents_invisible_accessible" msgid="2857071808674481986">"This keeps it in view until you unpin. Touch and hold Home to unpin."</string>
     <string name="screen_pinning_exposes_personal_data" msgid="8189852022981524789">"Personal data may be accessible (such as contacts and email content)."</string>
     <string name="screen_pinning_can_open_other_apps" msgid="7529756813231421455">"Pinned app may open other apps."</string>
-    <string name="screen_pinning_toast" msgid="8177286912533744328">"To unpin this app, touch &amp; hold Back and Overview buttons"</string>
-    <string name="screen_pinning_toast_recents_invisible" msgid="6850978077443052594">"To unpin this app, touch &amp; hold Back and Home buttons"</string>
+    <string name="screen_pinning_toast" msgid="8177286912533744328">"To unpin this app, touch and hold the Back and Overview buttons"</string>
+    <string name="screen_pinning_toast_recents_invisible" msgid="6850978077443052594">"To unpin this app, touch and hold the Back and Home buttons"</string>
     <string name="screen_pinning_toast_gesture_nav" msgid="170699893395336705">"To unpin this app, swipe up &amp; hold"</string>
     <string name="screen_pinning_positive" msgid="3285785989665266984">"Got it"</string>
     <string name="screen_pinning_negative" msgid="6882816864569211666">"No thanks"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Power menu"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Page <xliff:g id="ID_1">%1$d</xliff:g> of <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Lock screen"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Phone turned off due to heat"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Your phone is now running normally.\nTap for more info"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Your phone was too hot, so it turned off to cool down. Your phone is now running normally.\n\nYour phone may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video, or navigation apps)\n	• Download or upload large files\n	• Use your phone in high temperatures"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"See care steps"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Phone is getting warm"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Some features limited while phone cools down.\nTap for more info"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Your phone will automatically try to cool down. You can still use your phone, but it may run slower.\n\nOnce your phone has cooled down, it will run normally."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"See care steps"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Unplug your device"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Your device is getting warm near the charging port. If it’s connected to a charger or USB accessory, unplug it, and take care as the cable may also be warm."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Magnify full screen"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Magnify part of screen"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Open magnification settings"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Close magnification settings"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Drag corner to resize"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Allow diagonal scrolling"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Resize"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"unfavorite"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Move to position <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Choose device controls to access quickly"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold &amp; drag to rearrange controls"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Changes not saved"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Try another PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Confirm change for <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Swipe to see more"</string>
+    <string name="retry_face" msgid="416380073082560186">"Retry face authentication"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Loading recommendations"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Hide this media control for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Settings"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> is playing from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> of <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> is running"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Play"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pause"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Previous track"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Speakers &amp; Displays"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Suggested Devices"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Stop your shared session to move media to another device"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Stop"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"How broadcasting works"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Broadcast"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"People near you with compatible Bluetooth devices can listen to the media you\'re broadcasting"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Can’t save. Try again."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Can’t save."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Use at least 4 characters"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Use fewer than 16 characters"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Use fewer than <xliff:g id="LENGTH">%1$d</xliff:g> characters"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Build number"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Build number copied to clipboard."</string>
     <string name="basic_status" msgid="2315371112182658176">"Open conversation"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problem reading your battery meter"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Tap for more information"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"No alarm set"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"enter screen lock"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Fingerprint sensor"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"authenticate"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"enter device"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant is listening"</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="note_task_button_label" msgid="8718616095800343136">"Notetaking"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Note-taking"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Note-taking, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,12 +1131,14 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Learn more"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Learn more at <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Open <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• The app is set up"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• At least one card has been added to Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Install a camera app"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• The app is set up"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• At least one device is available"</string>
-    <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Touch &amp; hold shortcut"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"To add the Wallet app as a shortcut, make sure the app is installed"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"To add the Wallet app as a shortcut, make sure at least one card has been added"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"To add the QR code scanner as a shortcut, make sure a camera app is installed"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"To add the Home app as a shortcut, make sure the app is installed"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• At least one device is available"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Select a default notes app to use the notetaking shortcut"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Select app"</string>
+    <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Touch and hold shortcut"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Cancel"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Switch screens now"</string>
     <string name="rear_display_folded_bottom_sheet_title" msgid="3930008746560711990">"Unfold phone"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Connect your stylus to a charger"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Stylus battery low"</string>
     <string name="video_camera" msgid="7654002575156149298">"Video camera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Can\'t call from this profile"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Your work policy allows you to make phone calls only from the work profile"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Can\'t call from a personal app"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Your organization only allows you to make calls from work apps"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Switch to work profile"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Close"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Install a work phone app"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Cancel"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Customize lock screen"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Unlock to customize lock screen"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi not available"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Priority mode on"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant attention on"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Set default notes app in Settings"</string>
+    <string name="install_app" msgid="5066668100199613936">"Install app"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Microphone &amp; Camera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Recent app use"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"See recent access"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Done"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Expand and show options"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Collapse"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Close this app"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> closed"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Manage service"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Manage access"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"In use by phone call"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Recently used in phone call"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"In use by <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Recently used by <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"In use by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Recently used by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"In use by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Recently used by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rCA/strings_tv.xml b/packages/SystemUI/res/values-en-rCA/strings_tv.xml
deleted file mode 100644
index a628846..0000000
--- a/packages/SystemUI/res/values-en-rCA/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN is connected"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN is disconnected"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Via <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notifications"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"No Notifications"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Microphone is recording"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Camera is recording"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Camera and Microphone are recording"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Microphone stopped recording"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Camera stopped recording"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Camera and Microphone stopped recording"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Screen recording started"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Screen recording stopped"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index bed2089..5d713bb 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> detected this screenshot."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> and other open apps detected this screenshot."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Add to note"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Screen Recorder"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Screen recorder"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Processing screen recording"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ongoing notification for a screen record session"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Start recording?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"While recording, the Android System can capture any sensitive information that’s visible on your screen or played on your device. This includes passwords, payment info, photos, messages and audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Record entire screen"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Record a single app"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"While you\'re recording, Android has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"While you\'re recording an app, Android has access to anything shown or played on that app. So, be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Start recording"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Start recording?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"While you’re recording, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"While you’re recording an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Start recording"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Record audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Device audio"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Sound from your device, like music, calls and ringtones"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Microphone"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Device audio and microphone"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Start"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Start"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Recording screen"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Recording screen and audio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Show touches on screen"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Share"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Screen recording saved"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Tap to view"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Error deleting screen recording"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Error saving screen recording"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Error starting screen recording"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Viewing full screen"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"To exit, swipe down from the top."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Got it"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Back"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Home"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Face authenticated"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmed"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tap Confirm to complete"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Unlocked by face. Press the unlock icon to continue."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Unlocked by face"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Unlocked by face. Press to continue."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Face recognised. Press to continue."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Face recognised. Press the unlock icon to continue."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authenticated"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Cancel authentication"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Use PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Use pattern"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Use password"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"If you enter an incorrect pattern on the next attempt, your work profile and its data will be deleted."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"If you enter an incorrect PIN on the next attempt, your work profile and its data will be deleted."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"If you enter an incorrect password on the next attempt, your work profile and its data will be deleted."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Set up"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Not now"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"This is required to improve security and performance"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Set up Fingerprint Unlock again"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Fingerprint Unlock"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Set up Fingerprint Unlock"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"To set up Fingerprint Unlock again, your current fingerprint images and models will be deleted.\n\nAfter they\'re deleted, you\'ll need to set up Fingerprint Unlock again to use your fingerprint to unlock your phone or verify that it\'s you."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"To set up Fingerprint Unlock again, your current fingerprint images and model will be deleted.\n\nAfter they\'re deleted, you\'ll need to set up Fingerprint Unlock again to use your fingerprint to unlock your phone or verify that it\'s you."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Couldn\'t set up Fingerprint Unlock. Go to Settings to try again."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Set up Face Unlock again"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Face Unlock"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Set up Face Unlock"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"To set up Face Unlock again, your current face model will be deleted.\n\nYou\'ll need to set up this feature again to use your face to unlock your phone."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Couldn\'t set up Face Unlock. Go to Settings to try again."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Touch the fingerprint sensor"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Press the unlock icon to continue"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Can’t recognise face. Use fingerprint instead."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Hearing Aids"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hearing aids"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Turning on…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Unlocked by face"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Face recognised"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Swipe up to try again"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Swipe up to try Face Unlock again"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Unlock to use NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"This device belongs to your organisation"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"This device belongs to <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages and audio that you play."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"The service providing this function will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages and audio that you play."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Start recording or casting?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Start recording or casting with <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Allow <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> to share or record?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Entire screen"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"A single app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"When you\'re sharing, recording or casting, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"When you\'re sharing, recording or casting an app, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything shown or played on that app. So, be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continue"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Share or record an app"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Allow this app to share or record?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"When you\'re sharing, recording or casting, this app has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"When you\'re sharing, recording or casting an app, this app has access to anything shown or played on that app. So be careful with passwords, payment details, messages or other sensitive information."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages and audio that you play."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Start recording or casting?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"The service providing this function will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages and audio that you play."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Entire screen"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"A single app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Share or record an app"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Start recording or casting with <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"When you’re sharing, recording or casting, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"When you’re sharing, recording or casting an app, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Start"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Start casting?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"When you’re casting, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"When you’re casting an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Start casting"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Start sharing?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"When you’re sharing, recording or casting, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"When you’re sharing, recording or casting an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Start"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Sharing pauses when you switch apps"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Share this app instead"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Switch back"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"App switch"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blocked by your IT admin"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Screen capturing is disabled by device policy"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Clear all"</string>
@@ -434,17 +460,18 @@
     <string name="monitoring_subtitle_vpn" msgid="800485258004629079">"VPN"</string>
     <string name="monitoring_subtitle_network_logging" msgid="2444199331891219596">"Network logging"</string>
     <string name="monitoring_subtitle_ca_certificate" msgid="8588092029755175800">"CA certificates"</string>
-    <string name="monitoring_button_view_policies" msgid="3869724835853502410">"View Policies"</string>
+    <string name="monitoring_button_view_policies" msgid="3869724835853502410">"View policies"</string>
     <string name="monitoring_button_view_controls" msgid="8316440345340701117">"View controls"</string>
     <string name="monitoring_description_named_management" msgid="505833016545056036">"This device belongs to <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nYour IT admin can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nFor more information, contact your IT admin."</string>
     <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> may be able to access data associated with this device, manage apps and change this device\'s settings.\n\nIf you have questions, contact <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g>."</string>
-    <string name="monitoring_description_management" msgid="4308879039175729014">"This device belongs to your organisation.\n\nYour IT admin can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nFor more information, contact your IT admin."</string>
+    <string name="monitoring_description_management" msgid="4308879039175729014">"This device belongs to your organisation.\n\nYour IT admin can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nFor more information, contact your IT admin."</string>
     <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"Your organisation installed a certificate authority on this device. Your secure network traffic may be monitored or modified."</string>
     <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"Your organisation installed a certificate authority in your work profile. Your secure network traffic may be monitored or modified."</string>
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"A certificate authority is installed on this device. Your secure network traffic may be monitored or modified."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Your admin has turned on network logging, which monitors traffic on your device."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Your admin has turned on network logging, which monitors traffic in your work profile but not in your personal profile."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"This device is connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your IT admin."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"This device is connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to the VPN provider."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"This device is connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your IT admin."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"This device is connected to the Internet through <xliff:g id="VPN_APP_0">%1$s</xliff:g> and <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your IT admin."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Your work apps are connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity in work apps, including emails and browsing data, is visible to your IT admin and VPN provider."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Your personal apps are connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your VPN provider."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"disable"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Sound and vibration"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Settings"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Lowered to safer volume"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"The volume has been high for longer than recommended"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volume lowered to safer level"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Headphone volume has been high for longer than recommended"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Headphone volume has exceeded the safe limit for this week"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Keep listening"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Lower volume"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"App is pinned"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"This keeps it in view until you unpin. Touch &amp; hold Back and Overview to unpin."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"This keeps it in view until you unpin. Touch &amp; hold Back and Home to unpin."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Power menu"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Page <xliff:g id="ID_1">%1$d</xliff:g> of <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Lock screen"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Phone turned off due to heat"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Your phone is now running normally.\nTap for more info"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Your phone was too hot, so it turned off to cool down. Your phone is now running normally.\n\nYour phone may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video or navigation apps)\n	• Download or upload large files\n	• Use your phone in high temperatures"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"See care steps"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Phone is getting warm"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Some features are limited while phone cools down.\nTap for more info"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Your phone will automatically try to cool down. You can still use your phone, but it may run more slowly.\n\nOnce your phone has cooled down, it will run normally."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"See care steps"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Unplug your device"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Your device is getting warm near the charging port. If it’s connected to a charger or USB accessory, unplug it and take care as the cable may also be warm."</string>
@@ -794,7 +818,7 @@
     <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"your operator"</string>
     <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Switch back to <xliff:g id="CARRIER">%s</xliff:g>?"</string>
     <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Mobile data won\'t automatically switch based on availability"</string>
-    <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"No thanks"</string>
+    <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"No, thanks"</string>
     <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Yes, switch"</string>
     <string name="touch_filtered_warning" msgid="8119511393338714836">"Because an app is obscuring a permission request, Settings can’t verify your response."</string>
     <string name="slice_permission_title" msgid="3262615140094151017">"Allow <xliff:g id="APP_0">%1$s</xliff:g> to show <xliff:g id="APP_2">%2$s</xliff:g> slices?"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Magnify full screen"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Magnify part of screen"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Open magnification settings"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Close magnification settings"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Drag corner to resize"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Allow diagonal scrolling"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Resize"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"unfavourite"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Move to position <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Choose device controls to access quickly"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Changes not saved"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Try another PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Confirm change for <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Swipe to see more"</string>
+    <string name="retry_face" msgid="416380073082560186">"Retry face authentication"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Loading recommendations"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Hide this media control for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Settings"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> is playing from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> of <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> is running"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Play"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pause"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Previous track"</string>
@@ -967,8 +993,10 @@
     <string name="media_output_dialog_accessibility_title" msgid="4681741064190167888">"Available devices for audio output."</string>
     <string name="media_output_dialog_accessibility_seekbar" msgid="5332843993805568978">"Volume"</string>
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
-    <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Speakers &amp; displays"</string>
+    <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Speakers and displays"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Suggested devices"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Stop your shared session to move media to another device"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Stop"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"How broadcasting works"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Broadcast"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"People near you with compatible Bluetooth devices can listen to the media that you\'re broadcasting"</string>
@@ -981,13 +1009,13 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Can’t save. Try again."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Can’t save."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Use at least four characters"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Use fewer than 16 characters"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Use fewer than <xliff:g id="LENGTH">%1$d</xliff:g> characters"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Build number"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Build number copied to clipboard."</string>
     <string name="basic_status" msgid="2315371112182658176">"Open conversation"</string>
     <string name="select_conversation_title" msgid="6716364118095089519">"Conversation widgets"</string>
     <string name="select_conversation_text" msgid="3376048251434956013">"Tap a conversation to add it to your home screen"</string>
-    <string name="no_conversations_text" msgid="5354115541282395015">"Your recent conversations will show up here"</string>
+    <string name="no_conversations_text" msgid="5354115541282395015">"Your recent conversations will show here"</string>
     <string name="priority_conversations" msgid="3967482288896653039">"Priority conversations"</string>
     <string name="recent_conversations" msgid="8531874684782574622">"Recent conversations"</string>
     <string name="days_timestamp" msgid="5821854736213214331">"<xliff:g id="DURATION">%1$s</xliff:g> days ago"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problem reading your battery meter"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Tap for more information"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"No alarm set"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"enter screen lock"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Fingerprint sensor"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"Authenticate"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"enter device"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant is listening"</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="note_task_button_label" msgid="8718616095800343136">"Notetaking"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Note-taking"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Note-taking, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Learn more"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Learn more at <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Open <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• The app is set up"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• At least one card has been added to Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Install a camera app"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• The app is set up"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• At least one device is available"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"To add the Wallet app as a shortcut, make sure that the app is installed"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"To add the Wallet app as a shortcut, make sure that at least one card has been added"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"To add the QR code scanner as a shortcut, make sure that a camera app is installed"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"To add the Home app as a shortcut, make sure that the app is installed"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• At least one device is available"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Select a default notes app to use the note-taking shortcut"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Select app"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Touch &amp; hold shortcut"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Cancel"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Switch screens now"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Connect your stylus to a charger"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Stylus battery low"</string>
     <string name="video_camera" msgid="7654002575156149298">"Video camera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Can\'t call from this profile"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Your work policy allows you to make phone calls only from the work profile"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Can\'t call from a personal app"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Your organisation only allows you to make calls from work apps"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Switch to work profile"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Close"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Install a work phone app"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Cancel"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Customise lock screen"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Unlock to customise lock screen"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi not available"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Priority mode on"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant attention on"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Set default notes app in Settings"</string>
+    <string name="install_app" msgid="5066668100199613936">"Install app"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Microphone &amp; Camera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Recent app use"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"See recent access"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Done"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Expand and show options"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Collapse"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Close this app"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> closed"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Manage service"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Manage access"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"In use by phone call"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Recently used in phone call"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"In use by <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Recently used by <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"In use by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Recently used by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"In use by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Recently used by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings_tv.xml b/packages/SystemUI/res/values-en-rGB/strings_tv.xml
deleted file mode 100644
index e97dbe4..0000000
--- a/packages/SystemUI/res/values-en-rGB/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN is connected"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN is disconnected"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Via <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notifications"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"No notifications"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Microphone is recording"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Camera is recording"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Camera and microphone are recording"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Microphone stopped recording"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Camera stopped recording"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Camera and microphone stopped recording"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Screen recording started"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Screen recording stopped"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index bed2089..5d713bb 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> detected this screenshot."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> and other open apps detected this screenshot."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Add to note"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Screen Recorder"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Screen recorder"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Processing screen recording"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ongoing notification for a screen record session"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Start recording?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"While recording, the Android System can capture any sensitive information that’s visible on your screen or played on your device. This includes passwords, payment info, photos, messages and audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Record entire screen"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Record a single app"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"While you\'re recording, Android has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"While you\'re recording an app, Android has access to anything shown or played on that app. So, be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Start recording"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Start recording?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"While you’re recording, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"While you’re recording an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Start recording"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Record audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Device audio"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Sound from your device, like music, calls and ringtones"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Microphone"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Device audio and microphone"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Start"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Start"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Recording screen"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Recording screen and audio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Show touches on screen"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Share"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Screen recording saved"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Tap to view"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Error deleting screen recording"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Error saving screen recording"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Error starting screen recording"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Viewing full screen"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"To exit, swipe down from the top."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Got it"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Back"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Home"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Face authenticated"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmed"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tap Confirm to complete"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Unlocked by face. Press the unlock icon to continue."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Unlocked by face"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Unlocked by face. Press to continue."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Face recognised. Press to continue."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Face recognised. Press the unlock icon to continue."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authenticated"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Cancel authentication"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Use PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Use pattern"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Use password"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"If you enter an incorrect pattern on the next attempt, your work profile and its data will be deleted."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"If you enter an incorrect PIN on the next attempt, your work profile and its data will be deleted."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"If you enter an incorrect password on the next attempt, your work profile and its data will be deleted."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Set up"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Not now"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"This is required to improve security and performance"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Set up Fingerprint Unlock again"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Fingerprint Unlock"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Set up Fingerprint Unlock"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"To set up Fingerprint Unlock again, your current fingerprint images and models will be deleted.\n\nAfter they\'re deleted, you\'ll need to set up Fingerprint Unlock again to use your fingerprint to unlock your phone or verify that it\'s you."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"To set up Fingerprint Unlock again, your current fingerprint images and model will be deleted.\n\nAfter they\'re deleted, you\'ll need to set up Fingerprint Unlock again to use your fingerprint to unlock your phone or verify that it\'s you."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Couldn\'t set up Fingerprint Unlock. Go to Settings to try again."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Set up Face Unlock again"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Face Unlock"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Set up Face Unlock"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"To set up Face Unlock again, your current face model will be deleted.\n\nYou\'ll need to set up this feature again to use your face to unlock your phone."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Couldn\'t set up Face Unlock. Go to Settings to try again."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Touch the fingerprint sensor"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Press the unlock icon to continue"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Can’t recognise face. Use fingerprint instead."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Hearing Aids"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hearing aids"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Turning on…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Unlocked by face"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Face recognised"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Swipe up to try again"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Swipe up to try Face Unlock again"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Unlock to use NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"This device belongs to your organisation"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"This device belongs to <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages and audio that you play."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"The service providing this function will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages and audio that you play."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Start recording or casting?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Start recording or casting with <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Allow <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> to share or record?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Entire screen"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"A single app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"When you\'re sharing, recording or casting, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"When you\'re sharing, recording or casting an app, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything shown or played on that app. So, be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continue"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Share or record an app"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Allow this app to share or record?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"When you\'re sharing, recording or casting, this app has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages or other sensitive information."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"When you\'re sharing, recording or casting an app, this app has access to anything shown or played on that app. So be careful with passwords, payment details, messages or other sensitive information."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages and audio that you play."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Start recording or casting?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"The service providing this function will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages and audio that you play."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Entire screen"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"A single app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Share or record an app"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Start recording or casting with <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"When you’re sharing, recording or casting, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"When you’re sharing, recording or casting an app, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Start"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Start casting?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"When you’re casting, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"When you’re casting an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Start casting"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Start sharing?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"When you’re sharing, recording or casting, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"When you’re sharing, recording or casting an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, audio and video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Start"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Sharing pauses when you switch apps"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Share this app instead"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Switch back"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"App switch"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blocked by your IT admin"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Screen capturing is disabled by device policy"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Clear all"</string>
@@ -434,17 +460,18 @@
     <string name="monitoring_subtitle_vpn" msgid="800485258004629079">"VPN"</string>
     <string name="monitoring_subtitle_network_logging" msgid="2444199331891219596">"Network logging"</string>
     <string name="monitoring_subtitle_ca_certificate" msgid="8588092029755175800">"CA certificates"</string>
-    <string name="monitoring_button_view_policies" msgid="3869724835853502410">"View Policies"</string>
+    <string name="monitoring_button_view_policies" msgid="3869724835853502410">"View policies"</string>
     <string name="monitoring_button_view_controls" msgid="8316440345340701117">"View controls"</string>
     <string name="monitoring_description_named_management" msgid="505833016545056036">"This device belongs to <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>.\n\nYour IT admin can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nFor more information, contact your IT admin."</string>
     <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> may be able to access data associated with this device, manage apps and change this device\'s settings.\n\nIf you have questions, contact <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g>."</string>
-    <string name="monitoring_description_management" msgid="4308879039175729014">"This device belongs to your organisation.\n\nYour IT admin can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nFor more information, contact your IT admin."</string>
+    <string name="monitoring_description_management" msgid="4308879039175729014">"This device belongs to your organisation.\n\nYour IT admin can monitor and manage settings, corporate access, apps, data associated with your device and your device\'s location information.\n\nFor more information, contact your IT admin."</string>
     <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"Your organisation installed a certificate authority on this device. Your secure network traffic may be monitored or modified."</string>
     <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"Your organisation installed a certificate authority in your work profile. Your secure network traffic may be monitored or modified."</string>
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"A certificate authority is installed on this device. Your secure network traffic may be monitored or modified."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Your admin has turned on network logging, which monitors traffic on your device."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Your admin has turned on network logging, which monitors traffic in your work profile but not in your personal profile."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"This device is connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your IT admin."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"This device is connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to the VPN provider."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"This device is connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your IT admin."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"This device is connected to the Internet through <xliff:g id="VPN_APP_0">%1$s</xliff:g> and <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your IT admin."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Your work apps are connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity in work apps, including emails and browsing data, is visible to your IT admin and VPN provider."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Your personal apps are connected to the Internet through <xliff:g id="VPN_APP">%1$s</xliff:g>. Your network activity, including emails and browsing data, is visible to your VPN provider."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"disable"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Sound and vibration"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Settings"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Lowered to safer volume"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"The volume has been high for longer than recommended"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volume lowered to safer level"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Headphone volume has been high for longer than recommended"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Headphone volume has exceeded the safe limit for this week"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Keep listening"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Lower volume"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"App is pinned"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"This keeps it in view until you unpin. Touch &amp; hold Back and Overview to unpin."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"This keeps it in view until you unpin. Touch &amp; hold Back and Home to unpin."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Power menu"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Page <xliff:g id="ID_1">%1$d</xliff:g> of <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Lock screen"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Phone turned off due to heat"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Your phone is now running normally.\nTap for more info"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Your phone was too hot, so it turned off to cool down. Your phone is now running normally.\n\nYour phone may get too hot if you:\n	• Use resource-intensive apps (such as gaming, video or navigation apps)\n	• Download or upload large files\n	• Use your phone in high temperatures"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"See care steps"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Phone is getting warm"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Some features are limited while phone cools down.\nTap for more info"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Your phone will automatically try to cool down. You can still use your phone, but it may run more slowly.\n\nOnce your phone has cooled down, it will run normally."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"See care steps"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Unplug your device"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Your device is getting warm near the charging port. If it’s connected to a charger or USB accessory, unplug it and take care as the cable may also be warm."</string>
@@ -794,7 +818,7 @@
     <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"your operator"</string>
     <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Switch back to <xliff:g id="CARRIER">%s</xliff:g>?"</string>
     <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Mobile data won\'t automatically switch based on availability"</string>
-    <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"No thanks"</string>
+    <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"No, thanks"</string>
     <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Yes, switch"</string>
     <string name="touch_filtered_warning" msgid="8119511393338714836">"Because an app is obscuring a permission request, Settings can’t verify your response."</string>
     <string name="slice_permission_title" msgid="3262615140094151017">"Allow <xliff:g id="APP_0">%1$s</xliff:g> to show <xliff:g id="APP_2">%2$s</xliff:g> slices?"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Magnify full screen"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Magnify part of screen"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Open magnification settings"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Close magnification settings"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Drag corner to resize"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Allow diagonal scrolling"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Resize"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"unfavourite"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Move to position <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Controls"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Choose device controls to access quickly"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold and drag to rearrange controls"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"All controls removed"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Changes not saved"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Try another PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Confirm change for <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Swipe to see more"</string>
+    <string name="retry_face" msgid="416380073082560186">"Retry face authentication"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Loading recommendations"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Hide this media control for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Settings"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> is playing from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> of <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> is running"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Play"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pause"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Previous track"</string>
@@ -967,8 +993,10 @@
     <string name="media_output_dialog_accessibility_title" msgid="4681741064190167888">"Available devices for audio output."</string>
     <string name="media_output_dialog_accessibility_seekbar" msgid="5332843993805568978">"Volume"</string>
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
-    <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Speakers &amp; displays"</string>
+    <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Speakers and displays"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Suggested devices"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Stop your shared session to move media to another device"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Stop"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"How broadcasting works"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Broadcast"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"People near you with compatible Bluetooth devices can listen to the media that you\'re broadcasting"</string>
@@ -981,13 +1009,13 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Can’t save. Try again."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Can’t save."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Use at least four characters"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Use fewer than 16 characters"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Use fewer than <xliff:g id="LENGTH">%1$d</xliff:g> characters"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Build number"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Build number copied to clipboard."</string>
     <string name="basic_status" msgid="2315371112182658176">"Open conversation"</string>
     <string name="select_conversation_title" msgid="6716364118095089519">"Conversation widgets"</string>
     <string name="select_conversation_text" msgid="3376048251434956013">"Tap a conversation to add it to your home screen"</string>
-    <string name="no_conversations_text" msgid="5354115541282395015">"Your recent conversations will show up here"</string>
+    <string name="no_conversations_text" msgid="5354115541282395015">"Your recent conversations will show here"</string>
     <string name="priority_conversations" msgid="3967482288896653039">"Priority conversations"</string>
     <string name="recent_conversations" msgid="8531874684782574622">"Recent conversations"</string>
     <string name="days_timestamp" msgid="5821854736213214331">"<xliff:g id="DURATION">%1$s</xliff:g> days ago"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problem reading your battery meter"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Tap for more information"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"No alarm set"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"enter screen lock"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Fingerprint sensor"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"Authenticate"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"enter device"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant is listening"</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="note_task_button_label" msgid="8718616095800343136">"Notetaking"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Note-taking"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Note-taking, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Learn more"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Learn more at <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Open <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• The app is set up"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• At least one card has been added to Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Install a camera app"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• The app is set up"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• At least one device is available"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"To add the Wallet app as a shortcut, make sure that the app is installed"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"To add the Wallet app as a shortcut, make sure that at least one card has been added"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"To add the QR code scanner as a shortcut, make sure that a camera app is installed"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"To add the Home app as a shortcut, make sure that the app is installed"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• At least one device is available"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Select a default notes app to use the note-taking shortcut"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Select app"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Touch &amp; hold shortcut"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Cancel"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Switch screens now"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Connect your stylus to a charger"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Stylus battery low"</string>
     <string name="video_camera" msgid="7654002575156149298">"Video camera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Can\'t call from this profile"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Your work policy allows you to make phone calls only from the work profile"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Can\'t call from a personal app"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Your organisation only allows you to make calls from work apps"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Switch to work profile"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Close"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Install a work phone app"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Cancel"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Customise lock screen"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Unlock to customise lock screen"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi not available"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Priority mode on"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant attention on"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Set default notes app in Settings"</string>
+    <string name="install_app" msgid="5066668100199613936">"Install app"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Microphone &amp; Camera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Recent app use"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"See recent access"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Done"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Expand and show options"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Collapse"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Close this app"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> closed"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Manage service"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Manage access"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"In use by phone call"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Recently used in phone call"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"In use by <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Recently used by <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"In use by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Recently used by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"In use by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Recently used by <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings_tv.xml b/packages/SystemUI/res/values-en-rIN/strings_tv.xml
deleted file mode 100644
index e97dbe4..0000000
--- a/packages/SystemUI/res/values-en-rIN/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN is connected"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN is disconnected"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Via <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notifications"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"No notifications"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Microphone is recording"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Camera is recording"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Camera and microphone are recording"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Microphone stopped recording"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Camera stopped recording"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Camera and microphone stopped recording"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Screen recording started"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Screen recording stopped"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
index 885acd1..6a172f0 100644
--- a/packages/SystemUI/res/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="APPNAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ detected this screenshot.‎‏‎‎‏‎"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎‎‏‎‎‏‏‎‎‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="APPNAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ and other open apps detected this screenshot.‎‏‎‎‏‎"</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‏‎Add to note‎‏‎‎‏‎"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎Screen Recorder‎‏‎‎‏‎"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‏‎‎‎‎‎Screen Recorder‎‏‎‎‏‎"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‏‎‎‏‎‎Processing screen recording‎‏‎‎‏‎"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‏‎Ongoing notification for a screen record session‎‏‎‎‏‎"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‎‏‎‎‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎Start Recording?‎‏‎‎‏‎"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‎‎‎‎While recording, Android System can capture any sensitive information that’s visible on your screen or played on your device. This includes passwords, payment info, photos, messages, and audio.‎‏‎‎‏‎"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎Record entire screen‎‏‎‎‏‎"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‎Record a single app‎‏‎‎‏‎"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎While you\'re recording, Android has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages, or other sensitive information.‎‏‎‎‏‎"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‏‎‏‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎While you\'re recording an app, Android has access to anything shown or played on that app. So be careful with passwords, payment details, messages, or other sensitive information.‎‏‎‎‏‎"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎Start recording‎‏‎‎‏‎"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‎Start Recording?‎‏‎‎‏‎"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎While you’re recording, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, and audio and video.‎‏‎‎‏‎"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎While you’re recording an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, and audio and video.‎‏‎‎‏‎"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‏‏‎Start recording‎‏‎‎‏‎"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎Record audio‎‏‎‎‏‎"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎Device audio‎‏‎‎‏‎"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎Sound from your device, like music, calls, and ringtones‎‏‎‎‏‎"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‏‎‎‏‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎Microphone‎‏‎‎‏‎"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‎‎‏‎Device audio and microphone‎‏‎‎‏‎"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‏‏‎‏‎‎‎‏‏‎‎‎‏‎‏‏‎‎‎‏‏‏‎‎‎Start‎‏‎‎‏‎"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‎Start‎‏‎‎‏‎"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‏‏‏‏‎Recording screen‎‏‎‎‏‎"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎Recording screen and audio‎‏‎‎‏‎"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‏‎Show touches on screen‎‏‎‎‏‎"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‏‏‏‏‏‎‎‎‏‎‎‏‎‎Share‎‏‎‎‏‎"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‎Screen recording saved‎‏‎‎‏‎"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‏‏‎‎‎‏‏‎Tap to view‎‏‎‎‏‎"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎‎‎‎‏‎‏‏‎‏‎‏‎‎‎Error deleting screen recording‎‏‎‎‏‎"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎Error saving screen recording‎‏‎‎‏‎"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎Error starting screen recording‎‏‎‎‏‎"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‏‎Viewing full screen‎‏‎‎‏‎"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‏‏‏‎To exit, swipe down from the top.‎‏‎‎‏‎"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎‎‎Got it‎‏‎‎‏‎"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎Back‎‏‎‎‏‎"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎Home‎‏‎‎‏‎"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‎‎‎Menu‎‏‎‎‏‎"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎Face authenticated‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‏‎‎Confirmed‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‎‎Tap Confirm to complete‎‏‎‎‏‎"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎Unlocked by face. Press the unlock icon to continue.‎‏‎‎‏‎"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‎Unlocked by face‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‎‎‎‏‎‎‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎Unlocked by face. Press to continue.‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‎Face recognized. Press to continue.‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‎‎‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎Face recognized. Press the unlock icon to continue.‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎Authenticated‎‏‎‎‏‎"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‎Cancel Authentication‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‎‏‎Use PIN‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎‎Use pattern‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‏‎‏‏‎Use password‎‏‎‎‏‎"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‏‎‎If you enter an incorrect pattern on the next attempt, your work profile and its data will be deleted.‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎If you enter an incorrect PIN on the next attempt, your work profile and its data will be deleted.‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎If you enter an incorrect password on the next attempt, your work profile and its data will be deleted.‎‏‎‎‏‎"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‎‎Set up‎‏‎‎‏‎"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‏‎‎‏‎Not now‎‏‎‎‏‎"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‏‎‎‎This is required to improve security and performance‎‏‎‎‏‎"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎Set up Fingerprint Unlock again‎‏‎‎‏‎"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎‎‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‏‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎‎Fingerprint Unlock‎‏‎‎‏‎"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‎‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎Set up Fingerprint Unlock‎‏‎‎‏‎"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‏‏‏‎To set up Fingerprint Unlock again, your current fingerprint images and models will be deleted.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎After theyre deleted, youll need to set up Fingerprint Unlock again to use your fingerprint to unlock your phone or verify its you.‎‏‎‎‏‎"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‎‏‎‎To set up Fingerprint Unlock again, your current fingerprint images and model will be deleted.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎After theyre deleted, youll need to set up Fingerprint Unlock again to use your fingerprint to unlock your phone or verify its you.‎‏‎‎‏‎"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‏‎‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‎Couldn’t set up fingerprint unlock. Go to Settings to try again.‎‏‎‎‏‎"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎Set up Face Unlock again‎‏‎‎‏‎"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‎‎‏‎‎‎‎‎‏‎‏‎‎‏‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‏‎Face Unlock‎‏‎‎‏‎"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎Set up Face Unlock‎‏‎‎‏‎"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‏‎‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‎‏‏‎‏‏‏‏‎To set up Face Unlock again, your current face model will be deleted.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Youll need to set up this feature again to use your face to unlock your phone.‎‏‎‎‏‎"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎Couldn’t set up face unlock. Go to Settings to try again.‎‏‎‎‏‎"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎Touch the fingerprint sensor‎‏‎‎‏‎"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‎‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‏‎‎Press the unlock icon to continue‎‏‎‎‏‎"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‎‎Can’t recognize face. Use fingerprint instead.‎‏‎‎‏‎"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‎‏‎Audio‎‏‎‎‏‎"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎Headset‎‏‎‎‏‎"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‎‎‎Input‎‏‎‎‏‎"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‏‎‏‎Hearing Aids‎‏‎‎‏‎"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‏‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎Hearing aids‎‏‎‎‏‎"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‎‎Turning on…‎‏‎‎‏‎"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‎‎‎‎‎Auto-rotate‎‏‎‎‏‎"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‎‎Auto-rotate screen‎‏‎‎‏‎"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎Unlocked by face‎‏‎‎‏‎"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‎‎‎Face recognized‎‏‎‎‏‎"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎Swipe up to try again‎‏‎‎‏‎"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎Swipe up to try Face Unlock again‎‏‎‎‏‎"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‏‏‎Unlock to use NFC‎‏‎‎‏‎"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎This device belongs to your organization‎‏‎‎‏‎"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‎‏‎‎‏‎‎‎‏‏‏‎‏‏‎This device belongs to ‎‏‎‎‏‏‎<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‏‎‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‎‏‎‎‏‏‏‎ will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages, and audio that you play.‎‏‎‎‏‎"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‎‎‎‎‏‎‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎The service providing this function will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages, and audio that you play.‎‏‎‎‏‎"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‏‎‎‎‎Start recording or casting?‎‏‎‎‏‎"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‎‏‎‎‎‎‎‏‏‎‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‎‎‎‎‏‏‎‎Start recording or casting with ‎‏‎‎‏‏‎<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎Allow ‎‏‎‎‏‏‎<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‎‏‎‎‏‏‏‎ to share or record?‎‏‎‎‏‎"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‏‏‏‎Entire screen‎‏‎‎‏‎"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‏‎‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎A single app‎‏‎‎‏‎"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎When you\'re sharing, recording, or casting, ‎‏‎‎‏‏‎<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‎‏‎‎‏‏‏‎ has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages, or other sensitive information.‎‏‎‎‏‎"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎When you\'re sharing, recording, or casting an app, ‎‏‎‎‏‏‎<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‎‏‎‎‏‏‏‎ has access to anything shown or played on that app. So be careful with passwords, payment details, messages, or other sensitive information.‎‏‎‎‏‎"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‏‏‎‎Continue‎‏‎‎‏‎"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‎‎‎‎Share or record an app‎‏‎‎‏‎"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‏‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‏‏‎‎Allow this app to share or record?‎‏‎‎‏‎"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎‎‎‎‏‏‏‎When you\'re sharing, recording, or casting, this app has access to anything visible on your screen or played on your device. So be careful with passwords, payment details, messages, or other sensitive information.‎‏‎‎‏‎"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‏‎‎When you\'re sharing, recording, or casting an app, this app has access to anything shown or played on that app. So be careful with passwords, payment details, messages, or other sensitive information.‎‏‎‎‏‎"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‎‏‎‎‏‏‏‎ will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages, and audio that you play.‎‏‎‎‏‎"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‎Start recording or casting?‎‏‎‎‏‎"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‎‎‎‎The service providing this function will have access to all of the information that is visible on your screen or played from your device while recording or casting. This includes information such as passwords, payment details, photos, messages, and audio that you play.‎‏‎‎‏‎"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‎‎Entire screen‎‏‎‎‏‎"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‏‎A single app‎‏‎‎‏‎"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‎‏‏‎Share or record an app‎‏‎‎‏‎"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎Start recording or casting with ‎‏‎‎‏‏‎<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‏‏‏‏‏‎‏‏‎‏‎When you’re sharing, recording, or casting, ‎‏‎‎‏‏‎<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‎‏‎‎‏‏‏‎ has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, and audio and video.‎‏‎‎‏‎"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‏‏‎When you’re sharing, recording, or casting an app, ‎‏‎‎‏‏‎<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‎‏‎‎‏‏‏‎ has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, and audio and video.‎‏‎‎‏‎"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‎‎‎‎‎‎‎‎Start‎‏‎‎‏‎"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‏‎‎‏‏‏‎‏‎‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‏‏‎Start casting?‎‏‎‎‏‎"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎When you’re casting, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, and audio and video.‎‏‎‎‏‎"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‎‎‎When you’re casting an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, and audio and video.‎‏‎‎‏‎"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‎‏‏‎‏‎‎Start casting‎‏‎‎‏‎"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎Start sharing?‎‏‎‎‏‎"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎When you’re sharing, recording, or casting, Android has access to anything visible on your screen or played on your device. So be careful with things like passwords, payment details, messages, photos, and audio and video.‎‏‎‎‏‎"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‏‏‏‎When you’re sharing, recording, or casting an app, Android has access to anything shown or played on that app. So be careful with things like passwords, payment details, messages, photos, and audio and video.‎‏‎‎‏‎"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎‎Start‎‏‎‎‏‎"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‎Sharing pauses when you switch apps‎‏‎‎‏‎"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎Share this app instead‎‏‎‎‏‎"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎Switch back‎‏‎‎‏‎"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‎‏‎‏‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‎App switch‎‏‎‎‏‎"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‎‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‏‎Blocked by your IT admin‎‏‎‎‏‎"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‏‏‏‏‎Screen capturing is disabled by device policy‎‏‎‎‏‎"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‎Clear all‎‏‎‎‏‎"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‎A certificate authority is installed on this device. Your secure network traffic may be monitored or modified.‎‏‎‎‏‎"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‏‎Your admin has turned on network logging, which monitors traffic on your device.‎‏‎‎‏‎"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎Your admin has turned on network logging, which monitors traffic in your work profile but not in your personal profile.‎‏‎‎‏‎"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‏‏‏‎‎This device is connected to the internet through ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Your network activity, including emails and browsing data, is visible to your IT admin.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‎‏‏‏‎This device is connected to the internet through ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Your network activity, including emails and browsing data, is visible to the VPN provider.‎‏‎‎‏‎"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‎This device is connected to the internet through ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Your network activity, including emails and browsing data, is visible to your IT admin.‎‏‎‎‏‎"</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎This device is connected to the internet through ‎‏‎‎‏‏‎<xliff:g id="VPN_APP_0">%1$s</xliff:g>‎‏‎‎‏‏‏‎ and ‎‏‎‎‏‏‎<xliff:g id="VPN_APP_1">%2$s</xliff:g>‎‏‎‎‏‏‏‎. Your network activity, including emails and browsing data, is visible to your IT admin.‎‏‎‎‏‎"</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‎‎‎‏‏‎‎Your work apps are connected to the internet through ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Your network activity in work apps, including emails and browsing data, is visible to your IT admin and VPN provider.‎‏‎‎‏‎"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‎‎‎Your personal apps are connected to the internet through ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Your network activity, including emails and browsing data, is visible to your VPN provider.‎‏‎‎‏‎"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‎‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎disable‎‏‎‎‏‎"</string>
     <string name="sound_settings" msgid="8874581353127418308">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‎‎Sound &amp; vibration‎‏‎‎‏‎"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‏‏‎‎Settings‎‏‎‎‏‎"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‎‎‎‏‎‎‏‎‎‎‎Lowered to safer volume‎‏‎‎‏‎"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‎The volume has been high for longer than recommended‎‏‎‎‏‎"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎Volume lowered to safer level‎‏‎‎‏‎"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎Headphone volume has been high for longer than recommended‎‏‎‎‏‎"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎Headphone volume has exceeded the safe limit for this week‎‏‎‎‏‎"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎Keep listening‎‏‎‎‏‎"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎Lower volume‎‏‎‎‏‎"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎‎‏‎App is pinned‎‏‎‎‏‎"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎‎‏‏‎‎‎‏‏‏‏‏‎This keeps it in view until you unpin. Touch &amp; hold Back and Overview to unpin.‎‏‎‎‏‎"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎This keeps it in view until you unpin. Touch &amp; hold Back and Home to unpin.‎‏‎‎‏‎"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‏‏‏‎‎‏‏‎‎‎Power menu‎‏‎‎‏‎"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‏‎Page ‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$d</xliff:g>‎‏‎‎‏‏‏‎ of ‎‏‎‎‏‏‎<xliff:g id="ID_2">%2$d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‎Lock screen‎‏‎‎‏‎"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‏‎‎‎‎‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎Phone turned off due to heat‎‏‎‎‏‎"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎‎Your phone is now running normally.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Tap for more info‎‏‎‎‏‎"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎Your phone was too hot, so it turned off to cool down. Your phone is now running normally.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Your phone may get too hot if you:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Use resource-intensive apps (such as gaming, video, or navigation apps)‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Download or upload large files‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎	• Use your phone in high temperatures‎‏‎‎‏‎"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎See care steps‎‏‎‎‏‎"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎Phone is getting warm‎‏‎‎‏‎"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‎Some features limited while phone cools down.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Tap for more info‎‏‎‎‏‎"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‏‎‏‎‎‎‎‎Your phone will automatically try to cool down. You can still use your phone, but it may run slower.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Once your phone has cooled down, it will run normally.‎‏‎‎‏‎"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎See care steps‎‏‎‎‏‎"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‏‎‎‏‎Unplug your device‎‏‎‎‏‎"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‎‎Your device is getting warm near the charging port. If it’s connected to a charger or USB accessory, unplug it, and take care as the cable may also be warm.‎‏‎‎‏‎"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎Magnify full screen‎‏‎‎‏‎"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎Magnify part of screen‎‏‎‎‏‎"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎Open magnification settings‎‏‎‎‏‎"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‎‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎Close magnification settings‎‏‎‎‏‎"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎Drag corner to resize‎‏‎‎‏‎"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‎‏‏‏‎‎Allow diagonal scrolling‎‏‎‎‏‎"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‏‏‎Resize‎‏‎‎‏‎"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‏‎‎‏‏‏‎unfavorite‎‏‎‎‏‎"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‏‏‎‎‎‎‎Move to position ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‎Controls‎‏‎‎‏‎"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‎Choose device controls to access quickly‎‏‎‎‏‎"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎Hold &amp; drag to rearrange controls‎‏‎‎‏‎"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‎‎All controls removed‎‏‎‎‏‎"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‏‏‏‎‎‎‏‎‏‏‎‏‏‎‏‏‎‏‎‏‏‎Changes not saved‎‏‎‎‏‎"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎Try another PIN‎‏‎‎‏‎"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎Confirm change for ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎Swipe to see more‎‏‎‎‏‎"</string>
+    <string name="retry_face" msgid="416380073082560186">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎Retry face authentication‎‏‎‎‏‎"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‎‏‎‎‎Loading recommendations‎‏‎‎‏‎"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎Media‎‏‎‎‏‎"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎Hide this media control for ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‏‎‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‎‏‏‎‎‎‎Settings‎‏‎‎‏‎"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="SONG_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ by ‎‏‎‎‏‏‎<xliff:g id="ARTIST_NAME">%2$s</xliff:g>‎‏‎‎‏‏‏‎ is playing from ‎‏‎‎‏‏‎<xliff:g id="APP_LABEL">%3$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ of ‎‏‎‎‏‏‎<xliff:g id="TOTAL_TIME">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is running‎‏‎‎‏‎"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎Play‎‏‎‎‏‎"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎Pause‎‏‎‎‏‎"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎Previous track‎‏‎‎‏‎"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="PERCENTAGE">%1$d</xliff:g>‎‏‎‎‏‏‏‎%%‎‏‎‎‏‎"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎Speakers &amp; Displays‎‏‎‎‏‎"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎‎Suggested Devices‎‏‎‎‏‎"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎Stop your shared session to move media to another device‎‏‎‎‏‎"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎Stop‎‏‎‎‏‎"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‏‏‏‏‏‏‎‎How broadcasting works‎‏‎‎‏‎"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎Broadcast‎‏‎‎‏‎"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‏‎‎People near you with compatible Bluetooth devices can listen to the media you\'re broadcasting‎‏‎‎‏‎"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎‎‏‎Can’t save. Try again.‎‏‎‎‏‎"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‎Can’t save.‎‏‎‎‏‎"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‎Use at least 4 characters‎‏‎‎‏‎"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎Use fewer than 16 characters‎‏‎‎‏‎"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎Use fewer than ‎‏‎‎‏‏‎<xliff:g id="LENGTH">%1$d</xliff:g>‎‏‎‎‏‏‏‎ characters‎‏‎‎‏‎"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‎‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‎‏‎‎‏‎‎Build number‎‏‎‎‏‎"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‎Build number copied to clipboard.‎‏‎‎‏‎"</string>
     <string name="basic_status" msgid="2315371112182658176">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎Open conversation‎‏‎‎‏‎"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‏‎‎Problem reading your battery meter‎‏‎‎‏‎"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎Tap for more information‎‏‎‎‏‎"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎No alarm set‎‏‎‎‏‎"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎enter screen lock‎‏‎‎‏‎"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‎‎‎Fingerprint sensor‎‏‎‎‏‎"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‏‎‎‏‎authenticate‎‏‎‎‏‎"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‎enter device‎‏‎‎‏‎"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‏‎‏‏‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‎‎Assistant is listening‎‏‎‎‏‎"</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="note_task_button_label" msgid="8718616095800343136">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎Notetaking‎‏‎‎‏‎"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‎‎Note-taking‎‏‎‎‏‎"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‎‎‎‏‎‎‎‎‏‏‏‎‎‎‏‎Note-taking, ‎‏‎‎‏‏‎<xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎Learn more‎‏‎‎‏‎"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‏‎Learn more at ‎‏‎‎‏‏‎<xliff:g id="URL">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‏‎‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‎Open ‎‏‎‎‏‏‎<xliff:g id="APPNAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‏‎‎• The app is set up‎‏‎‎‏‎"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‎• At least one card has been added to Wallet‎‏‎‎‏‎"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‏‏‏‏‎‏‏‏‏‎• Install a camera app‎‏‎‎‏‎"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎‎‏‏‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎• The app is set up‎‏‎‎‏‎"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎• At least one device is available‎‏‎‎‏‎"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎To add the Wallet app as a shortcut, make sure the app is installed‎‏‎‎‏‎"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎To add the Wallet app as a shortcut, make sure at least one card has been added‎‏‎‎‏‎"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎To add the QR code scanner as a shortcut, make sure a camera app is installed‎‏‎‎‏‎"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎‎‎‎To add the Home app as a shortcut, make sure the app is installed‎‏‎‎‏‎"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‏‎‎‏‏‏‎• At least one device is available‎‏‎‎‏‎"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‎‎Select a default notes app to use the notetaking shortcut‎‏‎‎‏‎"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎Select app‎‏‎‎‏‎"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‎‎‎‎Touch &amp; hold shortcut‎‏‎‎‏‎"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‎‎‎‎‎‎Cancel‎‏‎‎‏‎"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‏‏‎Switch screens now‎‏‎‎‏‎"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‎Connect your stylus to a charger‎‏‎‎‏‎"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‎Stylus battery low‎‏‎‎‏‎"</string>
     <string name="video_camera" msgid="7654002575156149298">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎Video camera‎‏‎‎‏‎"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‎‎‎‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‎Can\'t call from this profile‎‏‎‎‏‎"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎Your work policy allows you to make phone calls only from the work profile‎‏‎‎‏‎"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‏‎‎Can\'t call from a personal app‎‏‎‎‏‎"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‏‏‎‎‎‎‎‎‎‏‎‎Your organization only allows you to make calls from work apps‎‏‎‎‏‎"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎‎‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‎‏‎‎‏‎‎‎Switch to work profile‎‏‎‎‏‎"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‎‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‎‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎Close‎‏‎‎‏‎"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎Install a work phone app‎‏‎‎‏‎"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‏‎Cancel‎‏‎‎‏‎"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‎‏‏‏‏‏‎Customize lock screen‎‏‎‎‏‎"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‏‎Unlock to customize lock screen‎‏‎‎‏‎"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‎‎‏‎‎‎Wi-Fi not available‎‏‎‎‏‎"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‏‎‏‎‏‎‏‏‎‎‏‎‎‏‎‎‎‎Priority mode on‎‏‎‎‏‎"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‎‎‏‏‏‎‏‏‎Assistant attention on‎‏‎‎‏‎"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‎‎‏‎Set default notes app in Settings‎‏‎‎‏‎"</string>
+    <string name="install_app" msgid="5066668100199613936">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎Install app‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‎‎‏‏‏‎Microphone &amp; Camera‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎Recent app use‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎See recent access‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‏‎‎‎‏‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‎Done‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‎‎‏‎Expand and show options‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎Collapse‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‏‎‎Close this app‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ closed‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎Manage service‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎‏‏‎‏‎Manage access‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎In use by phone call‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‏‎‏‏‎‏‏‏‎‎‎‏‏‎‎‎‎‎Recently used in phone call‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‏‎‎‎‎In use by ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‎‎‏‏‏‏‎‎‏‎‎Recently used by ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‎‎‎‎‎‏‎‏‏‏‏‎In use by ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ (‎‏‎‎‏‏‎<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‎Recently used by ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ (‎‏‎‎‏‏‎<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎In use by ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ (‎‏‎‎‏‏‎<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎ • ‎‏‎‎‏‏‎<xliff:g id="PROXY_LABEL">%3$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎Recently used by ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ (‎‏‎‎‏‏‎<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎ • ‎‏‎‎‏‏‎<xliff:g id="PROXY_LABEL">%3$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rXC/strings_tv.xml b/packages/SystemUI/res/values-en-rXC/strings_tv.xml
deleted file mode 100644
index 06116ed..0000000
--- a/packages/SystemUI/res/values-en-rXC/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‏‎‎‎‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎VPN is connected‎‏‎‎‏‎"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎VPN is disconnected‎‏‎‎‏‎"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎Via ‎‏‎‎‏‏‎<xliff:g id="VPN_APP">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‎‏‎‎‎‎‎‏‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎Notifications‎‏‎‎‏‎"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‎‎‏‎‏‏‎‎No Notifications‎‏‎‎‏‎"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎Microphone is recording‎‏‎‎‏‎"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‎‎‎‎‏‎‎‎‎Camera is recording‎‏‎‎‏‎"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎Camera and Microphone are recording‎‏‎‎‏‎"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎‎Microphone stopped recording‎‏‎‎‏‎"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎Camera stopped recording‎‏‎‎‏‎"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‏‎‎‎Camera and Microphone stopped recording‎‏‎‎‏‎"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎Screen recording started‎‏‎‎‏‎"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‎‎‎‎Screen recording stopped‎‏‎‎‏‎"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index f63abf2..4d0ed14 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -92,26 +92,23 @@
     <string name="screenshot_left_boundary_pct" msgid="8502323556112287469">"Límite izquierdo: <xliff:g id="PERCENT">%1$d</xliff:g> por ciento"</string>
     <string name="screenshot_right_boundary_pct" msgid="1201150713021779321">"Límite derecho: <xliff:g id="PERCENT">%1$d</xliff:g> por ciento"</string>
     <string name="screenshot_work_profile_notification" msgid="203041724052970693">"Se guardó en <xliff:g id="APP">%1$s</xliff:g> en el perfil de trabajo"</string>
-    <string name="screenshot_default_files_app_name" msgid="8721579578575161912">"Files"</string>
+    <string name="screenshot_default_files_app_name" msgid="8721579578575161912">"Archivos"</string>
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> detectó que tomaste una captura de pantalla."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> y otras apps en ejecución detectaron que tomaste una captura de pantalla."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Agregar a la nota"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Grabadora de pantalla"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Grabadora de pantalla"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Procesando grabación pantalla"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notificación constante para una sesión de grabación de pantalla"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"¿Comenzar a grabar?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Durante la grabación, el sistema Android puede capturar cualquier información sensible que aparezca en la pantalla o que se reproduzca en el dispositivo. Se incluyen contraseñas, información de pago, fotos, mensajes y audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Grabar toda la pantalla"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Grabar una sola app"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Mientras grabes, Android podrá acceder a todo el contenido visible en la pantalla o que reproduzcas en el dispositivo. Por lo tanto, debes tener cuidado con contraseñas, detalles de pagos, mensajes y otra información sensible."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Mientras grabes una app, Android podrá acceder a todo el contenido que se muestre o reproduzca en ella. Por lo tanto, debes tener cuidado con contraseñas, detalles de pagos, mensajes y otra información sensible."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Iniciar grabación"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"¿Quieres comenzar a grabar?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Cuando grabes contenido, Android podrá acceder a todo lo que sea visible en la pantalla o que reproduzcas en el dispositivo. Por lo tanto, debes tener cuidado con contraseñas, detalles de pagos, mensajes, fotos, audios y videos."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Cuando grabes una app, Android podrá acceder a todo el contenido que se muestre o que reproduzcas en ella. Por lo tanto, debes tener cuidado con contraseñas, detalles de pagos, mensajes, fotos, audios y videos."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Iniciar grabación"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Grabar audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Audio del dispositivo"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Sonidos del dispositivo, como música, llamadas y tonos"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Micrófono"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Audio del dispositivo y micrófono"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Iniciar"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Iniciar"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Grabando pantalla"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Grabando pantalla y audio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Mostrar toques en la pantalla"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Compartir"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Se guardó la grabación de pantalla"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Presiona para ver"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"No se pudo borrar la grabación de pantalla"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Se produjo un error al guardar la grabación de pantalla"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Error al iniciar la grabación de pantalla"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Visualización en pantalla completa"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Para salir, desliza el dedo hacia abajo desde la parte superior."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Entendido"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Atrás"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Página principal"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menú"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Se autenticó el rostro"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmado"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Presiona Confirmar para completar"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Desbloqueo con rostro. Presiona ícono desbl. para continuar."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Se desbloqueó con el rostro"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Desbloqueo con rostro. Presiona para continuar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Rostro reconocido. Presiona para continuar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Rostro reconocido. Presiona el desbloqueo para continuar."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenticado"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Cancelar autenticación"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Usar PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Usar patrón"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Usar contraseña"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Si ingresas un patrón incorrecto en el próximo intento, se borrarán tu perfil de trabajo y sus datos."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Si ingresas un PIN incorrecto en el próximo intento, se borrarán tu perfil de trabajo y sus datos."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Si ingresas una contraseña incorrecta en el próximo intento, se borrarán tu perfil de trabajo y sus datos."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Configurar"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Ahora no"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Se requiere para mejorar la seguridad y el rendimiento"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Vuelve a configurar el Desbloqueo con huellas dactilares"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Desbloqueo con huellas dactilares"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Desbloqueo con huellas dactilares"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Para volver a configurar el Desbloqueo con huellas dactilares, se eliminarán las imágenes y los modelos actuales de tus huellas.\n\nUna vez eliminados, podrás volver a configurar el Desbloqueo con huellas dactilares y usar tus huellas para desbloquear el teléfono o verificar tu identidad."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Para volver a configurar el Desbloqueo con huellas dactilares, se eliminarán las imágenes y los modelos actuales de tus huellas.\n\nUna vez eliminados, podrás volver a configurar el Desbloqueo con huellas dactilares y usar tus huellas para desbloquear el teléfono o verificar tu identidad."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"No se pudo configurar el desbloqueo con huellas dactilares. Ve a Configuración para volver a intentarlo."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Vuelve a configurar Desbloqueo facial"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Desbloqueo facial"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Configura el Desbloqueo facial"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Para volver a configurar el Desbloqueo facial, se eliminará tu modelo de rostro actual.\n\nDeberás volver a configurar esta función si quieres usar tu rostro para desbloquear el teléfono."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"No se pudo configurar el desbloqueo facial. Ve a Configuración para volver a intentarlo."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Toca el sensor de huellas dactilares"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Presiona el ícono de desbloqueo para continuar"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"No se reconoce el rostro. Usa la huella dactilar."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Auriculares"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Audífonos"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audífonos"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activando…"</string>
     <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>
@@ -258,7 +274,7 @@
     <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Brillo"</string>
     <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Invertir colores"</string>
     <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Corregir colores"</string>
-    <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"Tamaño de la fuente"</string>
+    <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"Tamaño de fuente"</string>
     <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Administrar usuarios"</string>
     <string name="quick_settings_done" msgid="2163641301648855793">"Listo"</string>
     <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Cerrar"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Se desbloqueó con el rostro"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Se reconoció el rostro"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Desliza el dedo hacia arriba para volver a intentarlo"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Desliza hacia arriba para volver a probar Desbloqueo facial"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Desbloquea el dispositivo para usar NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Este dispositivo pertenece a tu organización"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Este dispositivo pertenece a <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,23 +399,32 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tendrá acceso a toda la información que sea visible en la pantalla o que reproduzcas en tu dispositivo durante una grabación o transmisión. Se incluyen las contraseñas, los detalles del pago, las fotos, los mensajes y el audio que reproduzcas."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"El servicio que brinda esta función tendrá acceso a toda la información que sea visible en la pantalla o que reproduzcas en tu dispositivo durante una grabación o transmisión. Se incluyen contraseñas, detalles de pago, fotos, mensajes y audios que reproduzcas."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"¿Deseas comenzar a grabar o transmitir contenido?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"¿Deseas iniciar una grabación o transmisión con <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"¿Quieres permitir que <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> comparta o grabe contenido?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Pantalla completa"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Una sola app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Cuando compartas, grabes o transmitas contenido, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> podrá acceder a todo aquel que sea visible en la pantalla o que reproduzcas en el dispositivo. Por lo tanto, debes tener cuidado con contraseñas, detalles de pagos, mensajes y otra información sensible."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Cuando compartas, grabes o transmitas una app, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> podrá acceder a todo el contenido que se muestre o reproduzca en ella. Por lo tanto, debes tener cuidado con las contraseñas, los detalles de pagos, los mensajes y otra información sensible."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continuar"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Compartir o grabar una app"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"¿Quieres permitir que esta app comparta o grabe tu pantalla?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Cuando compartas, grabes o transmitas contenido, esta app podrá acceder a todo lo que sea visible en la pantalla o que reproduzcas en el dispositivo. Por lo tanto, debes tener cuidado con contraseñas, detalles de pagos, mensajes y otra información sensible que pueda estar visible."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Cuando compartas, grabes o transmitas una app, esta app podrá acceder a todo el contenido que se muestre o reproduzca en ella. Por lo tanto, debes tener cuidado con contraseñas, detalles de pagos, mensajes y otra información sensible que pueda estar visible."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tendrá acceso a toda la información que sea visible en la pantalla o que reproduzcas en el dispositivo durante una grabación o transmisión. Se incluyen contraseñas, detalles de pagos, fotos, mensajes y el audio que reproduzcas."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"¿Quieres comenzar a grabar o transmitir contenido?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"El servicio que brinda esta función tendrá acceso a toda la información que sea visible en la pantalla o que reproduzcas en el dispositivo durante una grabación o transmisión. Se incluyen contraseñas, detalles de pagos, fotos, mensajes y audio que reproduzcas."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Pantalla completa"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Una sola app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Comparte o graba una app"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"¿Quieres iniciar una grabación o transmisión con <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Cuando compartas, grabes o transmitas contenido, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> podrá acceder a todo lo que sea visible en la pantalla o que reproduzcas en el dispositivo. Por lo tanto, debes tener cuidado con contraseñas, detalles de pagos, mensajes, fotos, audios y videos."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Cuando compartas, grabes o transmitas una app, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> podrá acceder a todo el contenido que se muestre o que reproduzcas en ella. Por lo tanto, debes tener cuidado con contraseñas, detalles de pagos, mensajes, fotos, audios y videos."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Iniciar"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"¿Quieres comenzar a transmitir contenido?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Cuando transmitas contenido, Android podrá acceder a todo lo que sea visible en la pantalla o que reproduzcas en el dispositivo. Por lo tanto, debes tener cuidado con contraseñas, detalles de pagos, mensajes, fotos, audios y videos."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Cuando transmitas una app, Android podrá acceder a todo el contenido que se muestre o que reproduzcas en ella. Por lo tanto, debes tener cuidado con contraseñas, detalles de pagos, mensajes, fotos, audios y videos."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Comenzar a transmitir contenido"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"¿Quieres empezar a compartir?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Cuando compartas, grabes o transmitas contenido, Android podrá acceder a todo lo que sea visible en la pantalla o que reproduzcas en el dispositivo. Por lo tanto, debes tener cuidado con contraseñas, detalles de pagos, mensajes, fotos, audios y videos."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Cuando compartas, grabes o transmitas una app, Android podrá acceder a todo el contenido que se muestre o que reproduzcas en ella. Por lo tanto, debes tener cuidado con contraseñas, detalles de pagos, mensajes, fotos, audios y videos."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Iniciar"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"El uso compartido se detiene al cambiar de app"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Compartir esta app en su lugar"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Cambiar de cuenta"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Cambio de app"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Bloqueada por tu administrador de TI"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"La captura de pantalla está inhabilitada debido a la política del dispositivo"</string>
-    <string name="clear_all_notifications_text" msgid="348312370303046130">"Borrar todo"</string>
+    <string name="clear_all_notifications_text" msgid="348312370303046130">"Cerrar todo"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Administrar"</string>
     <string name="manage_notifications_history_text" msgid="57055985396576230">"Historial"</string>
     <string name="notification_section_header_incoming" msgid="850925217908095197">"Nuevo"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Hay una autoridad de certificación instalada en este dispositivo. Es posible que se controle o modifique el tráfico de tu red segura."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Tu administrador activó el registro de red, que supervisa el tráfico en tu dispositivo."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"El administrador activó el registro de red, que supervisa el tráfico de tu perfil de trabajo, pero no el de tu perfil personal."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Este dispositivo está conectado a Internet mediante <xliff:g id="VPN_APP">%1$s</xliff:g>. El administrador de TI puede ver tu actividad de red (incluidos tus correos electrónicos y datos de navegación)."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Este dispositivo está conectado a Internet mediante <xliff:g id="VPN_APP">%1$s</xliff:g>. El proveedor de VPN puede ver tu actividad de red (incluidos los correos electrónicos y los datos de navegación)."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Este dispositivo está conectado a Internet mediante <xliff:g id="VPN_APP">%1$s</xliff:g>. El administrador de TI puede ver tu actividad de red (incluidos los correos electrónicos y datos de navegación)."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Este dispositivo está conectado a Internet mediante <xliff:g id="VPN_APP_0">%1$s</xliff:g> y <xliff:g id="VPN_APP_1">%2$s</xliff:g>. El administrador de TI puede ver tu actividad de red (incluidos tus correos electrónicos y datos de navegación)."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Tus apps de trabajo están conectadas a Internet mediante <xliff:g id="VPN_APP">%1$s</xliff:g>. El administrador de TI y el proveedor de VPN pueden ver tu actividad de red en las apps de trabajo (incluidos los correos electrónicos y los datos de navegación)."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Tus apps personales están conectadas a Internet mediante <xliff:g id="VPN_APP">%1$s</xliff:g>. El proveedor de VPN puede ver tu actividad (incluidos los correos electrónicos y los datos de navegación)."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"inhabilitar"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Sonido y vibración"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Configuración"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Se bajó el volumen a un nivel seguro"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"El volumen se mantuvo elevado por más tiempo del recomendado"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Se bajó el volumen a un nivel seguro"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"El volumen de los auriculares se mantuvo elevado por más tiempo del recomendado"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Se excedió el límite seguro de volumen de los auriculares para esta semana"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Seguir escuchando"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Bajar volumen"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"La app está fijada"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Esta función mantiene la pantalla visible hasta que dejes de fijarla. Para ello, mantén presionados los botones Atrás y Recientes."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Esta función mantiene la pantalla visible hasta que dejes de fijarla. Para ello, mantén presionados los botones de inicio y Atrás."</string>
@@ -516,7 +546,7 @@
     <string name="wallet_secondary_label_updating" msgid="5726130686114928551">"Actualizando"</string>
     <string name="wallet_secondary_label_device_locked" msgid="5175862019125370506">"Desbloquear para usar"</string>
     <string name="wallet_error_generic" msgid="257704570182963611">"Ocurrió un problema al obtener las tarjetas; vuelve a intentarlo más tarde"</string>
-    <string name="wallet_lockscreen_settings_label" msgid="3539105300870383570">"Configuración de pantalla de bloqueo"</string>
+    <string name="wallet_lockscreen_settings_label" msgid="3539105300870383570">"Configuración de la pantalla de bloqueo"</string>
     <string name="qr_code_scanner_title" msgid="1938155688725760702">"Escáner de código QR"</string>
     <string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"Actualizando"</string>
     <string name="status_bar_work" msgid="5238641949837091056">"Perfil de trabajo"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menú de encendido"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Página <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Pantalla de bloqueo"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"El teléfono se apagó por calor"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Tu teléfono ahora se ejecuta con normalidad.\nPresiona para obtener más información"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Tu teléfono estaba muy caliente y se apagó para enfriarse. Ya funciona correctamente.\n\nTu teléfono puede calentarse en estos casos:\n	• Usas apps que consumen muchos recursos (como juegos, videos o navegación).\n	• Subes o descargas archivos grandes.\n	• Usas el teléfono en condiciones de temperatura alta."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Ver pasos de mantenimiento"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"El teléfono se está calentando"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Algunas funciones se limitan durante el enfriamiento del teléfono.\nPresiona para obtener más información"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Tu teléfono intentará enfriarse automáticamente. Podrás usarlo, pero es posible que funcione más lento.\n\nUna vez que se haya enfriado, volverá a funcionar correctamente."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Ver pasos de mantenimiento"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Desenchufa el dispositivo"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"El puerto de carga del dispositivo se está calentando. Si está conectado a un cargador o accesorio USB, desenchúfalo con cuidado, ya que el cable también puede estar caliente."</string>
@@ -839,8 +863,9 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ampliar pantalla completa"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ampliar parte de la pantalla"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Abrir la configuración de ampliación"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Cerrar configuración de ampliación"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Arrastra la esquina para cambiar el tamaño"</string>
-    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Permitir desplazamiento en diagonal"</string>
+    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Desplazamiento en diagonal"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Cambiar tamaño"</string>
     <string name="accessibility_change_magnification_type" msgid="666000085077432421">"Cambiar tipo de ampliación"</string>
     <string name="accessibility_magnification_end_resizing" msgid="4881690585800302628">"Finalizar cambio de tamaño"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Presiona para abrir las funciones de accesibilidad. Personaliza o cambia botón en Config.\n\n"<annotation id="link">"Ver config"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Mueve el botón hacia el borde para ocultarlo temporalmente"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Deshacer"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Se quitó el acceso directo <xliff:g id="FEATURE_NAME">%s</xliff:g>"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Se quitó el acceso directo a <xliff:g id="FEATURE_NAME">%s</xliff:g>"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{Se quitó # acceso directo}many{Se quitaron # accesos directos}other{Se quitaron # accesos directos}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mover arriba a la izquierda"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover arriba a la derecha"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"quitar de favoritos"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Mover a la posición <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Elige los controles de dispositivos a los que quieres acceder rápido"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mantén presionado y arrastra un control para reubicarlo"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Se quitaron todos los controles"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"No se guardaron los cambios"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Prueba con otro PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Confirmar cambio para <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Desliza el dedo para ver más elementos"</string>
+    <string name="retry_face" msgid="416380073082560186">"Vuelve a intentar la autenticación facial"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Cargando recomendaciones"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Contenido multimedia"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"¿Ocultar control multimedia para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Configuración"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Se está reproduciendo <xliff:g id="SONG_NAME">%1$s</xliff:g>, de <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, en <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> se está ejecutando"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Reproducir"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausar"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Pista anterior"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Bocinas y pantallas"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Dispositivos sugeridos"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Detiene la sesión de uso compartido para transferir contenido multimedia a otro dispositivo"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Detener"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Cómo funciona la transmisión"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Transmisión"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Las personas cercanas con dispositivos Bluetooth compatibles pueden escuchar el contenido multimedia que transmites"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"No se puede guardar. Vuelve a intentarlo."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"No se puede guardar."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Usa al menos 4 caracteres"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Usa menos de 16 caracteres"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Usa menos de <xliff:g id="LENGTH">%1$d</xliff:g> caracteres"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Número de compilación"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Se copió el número de compilación en el portapapeles."</string>
     <string name="basic_status" msgid="2315371112182658176">"Conversación abierta"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problema al leer el medidor de batería"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Presiona para obtener más información"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"No establecida"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ingresa el bloqueo pantalla"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Sensor de huellas dactilares"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autenticar"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"ingresar al dispositivo"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Asistente está escuchando"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificación}many{# notificaciones}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="note_task_button_label" msgid="8718616095800343136">"Tomar notas"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Tomar notas"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Tomar notas, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Más información"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Más información en <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Se configuró la app."</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Se agregó al menos una tarjeta a la Billetera."</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Se instaló la app de Cámara."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Se configuró la app."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Hay al menos un dispositivo disponible."</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Para agregar la app de Billetera como acceso directo, asegúrate de haber instalado la app"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Para agregar la app de Billetera como acceso directo, asegúrate de haber agregado al menos una tarjeta"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Para agregar el escáner de código QR como acceso directo, asegúrate de haber instalado la app de la cámara"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Para agregar la app de Home como acceso directo, asegúrate de haber instalado la app"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Hay al menos un dispositivo disponible"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Selecciona una app de notas predeterminada para usar el acceso directo de toma de notas"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Seleccionar app"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Mantener presionado atajo"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Cancelar"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Cambiar de pantalla ahora"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Conecta tu pluma stylus a un cargador"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"La pluma stylus tiene poca batería"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videocámara"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"No se puede llamar desde este perfil"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Tu política del trabajo te permite hacer llamadas telefónicas solo desde el perfil de trabajo"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"No puedes realizar llamadas desde una app personal"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Tu organización solo te permite realizar llamadas desde apps de trabajo"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Cambiar al perfil de trabajo"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Cerrar"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instala una app de Teléfono de trabajo"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Cancelar"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizar pantalla de bloqueo"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Desbloquea para personalizar la pantalla de bloqueo"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi no disponible"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"La cámara está bloqueada"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"La cámara y el micrófono están bloqueados"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"El micrófono está bloqueado"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"El modo de prioridad está activado"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Asistente está prestando atención"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Configura la app de notas predeterminada en Configuración"</string>
+    <string name="install_app" msgid="5066668100199613936">"Instalar app"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Micrófono y cámara"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Uso reciente de una app"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Ver accesos recientes"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Listo"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Expandir y mostrar opciones"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Contraer"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Cerrar esta app"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> cerrada"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Administrar servicio"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Administrar acceso"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"En uso por una llamada telefónica"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Uso reciente en una llamada telefónica"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"En uso por <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Uso reciente en <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"En uso por <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Uso reciente en <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"En uso por <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Uso reciente en <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings_tv.xml b/packages/SystemUI/res/values-es-rUS/strings_tv.xml
deleted file mode 100644
index 513e0c7..0000000
--- a/packages/SystemUI/res/values-es-rUS/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"La VPN está conectada."</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"La VPN está desconectada"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"A través de <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notificaciones"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"No hay notificaciones"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"El micrófono está grabando"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"La cámara está grabando"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"La cámara y el micrófono están grabando"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"El micrófono dejó de grabar"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"La cámara dejó de grabar"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"La cámara y el micrófono dejaron de grabar"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Se inició la grabación de pantalla"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Se detuvo la grabación de pantalla"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 3714253..953171a 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Habilitar USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Más información"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Captura de pantalla"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock inhabilitado"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Prolongar Desbloqueo inhabilitado"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ha enviado una imagen"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Guardando captura..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Guardando captura en el perfil de trabajo…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> ha detectado esta captura de pantalla."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> y otras aplicaciones abiertas han detectado esta captura de pantalla."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Añadir a nota"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Grabación de pantalla"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Grabación de pantalla"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Procesando grabación de pantalla"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notificación continua de una sesión de grabación de la pantalla"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"¿Empezar a grabar?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Mientras grabas, el sistema Android puede capturar información sensible que se muestre o se reproduzca en tu dispositivo, como contraseñas, datos de pago, fotos, mensajes y audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Grabar toda la pantalla"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Grabar una sola aplicación"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Mientras grabes contenido, Android podrá acceder a todo lo que sea visible en tu pantalla o que reproduzcas en tu dispositivo. Debes tener cuidado con contraseñas, detalles de pagos, mensajes o cualquier otra información sensible."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Mientras grabes una aplicación, Android podrá acceder a todo lo que muestre o reproduzca la aplicación. Debes tener cuidado con contraseñas, detalles de pagos, mensajes o cualquier otra información sensible."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Iniciar grabación"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"¿Empezar a grabar?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Mientras grabas contenido, Android puede acceder a todo lo que se muestre en la pantalla o se reproduzca en tu dispositivo. Debes tener cuidado con elementos como contraseñas, detalles de pagos, mensajes, fotos, audio y vídeo."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Mientras grabas una aplicación, Android puede acceder a todo lo que se muestre o se reproduzca en ella. Debes tener cuidado con elementos como contraseñas, detalles de pagos, mensajes, fotos, audio y vídeo."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Empezar a grabar"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Grabar audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Audio del dispositivo"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Sonido de tu dispositivo, como música, llamadas y tonos de llamada"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Micrófono"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Audio del dispositivo y micrófono"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Iniciar"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Empezar"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Grabando pantalla"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Grabando pantalla y audio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Mostrar toques de pantalla"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Compartir"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Grabación de pantalla guardada"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Toca para verla"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"No se ha podido eliminar la grabación de la pantalla"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"No se ha podido guardar la grabación de pantalla"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"No se ha podido empezar a grabar la pantalla"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Visualización en pantalla completa"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Para salir, desliza de arriba abajo."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Entendido"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Atrás"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Inicio"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menú"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Cara autenticada"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmada"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Toca Confirmar para completar la acción"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Desbloqueado con la cara. Toca el icono de desbloquear para continuar."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Desbloqueado con la cara"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Desbloqueado con la cara. Pulsa para continuar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Cara reconocida. Pulsa para continuar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Cara reconocida. Pulsa el icono de desbloquear para continuar."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Se ha autenticado"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Cancelar autenticación"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Usar PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Usar patrón"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Usar contraseña"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Si vuelves a introducir un patrón incorrecto, tu perfil de trabajo y sus datos se eliminarán."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Si vuelves a introducir un PIN incorrecto, tu perfil de trabajo y sus datos se eliminarán."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Si vuelves a introducir una contraseña incorrecta, tu perfil de trabajo y sus datos se eliminarán."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Configurar"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Ahora no"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Esta acción es necesaria para mejorar la seguridad y el rendimiento"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Configura Desbloqueo con huella digital de nuevo"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Desbloqueo con huella digital"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Configura Desbloqueo con huella digital"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Para configurar Desbloqueo con huella digital de nuevo, se eliminarán los modelos e imágenes de tu huella digital.\n\nUna vez eliminados, deberás configurar Desbloqueo con huella digital de nuevo para desbloquear tu teléfono con la huella digital o verificar que eres tú."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Para configurar Desbloqueo con huella digital de nuevo, se eliminarán los modelos e imágenes de tu huella digital.\n\nUna vez eliminados, deberás configurar Desbloqueo con huella digital de nuevo para desbloquear tu teléfono con la huella digital o verificar que eres tú."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"No se ha podido configurar Desbloqueo con huella digital. Ve a Ajustes e inténtalo de nuevo."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Configura Desbloqueo facial de nuevo"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Desbloqueo facial"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Configura Desbloqueo facial"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Para configurar Desbloqueo facial de nuevo, se eliminará tu modelo facial.\n\nDebes configurar de nuevo esta función para poder desbloquear tu teléfono con la cara."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"No se ha podido configurar Desbloqueo facial. Ve a Ajustes e inténtalo de nuevo."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Toca el sensor de huellas digitales"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Pulsa el icono de desbloquear para continuar"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"No se reconoce la cara. Usa la huella digital."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Auriculares"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Audífonos"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audífonos"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activando…"</string>
     <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>
@@ -338,7 +354,7 @@
     <string name="zen_silence_introduction" msgid="6117517737057344014">"Este modo bloquea TODOS los sonidos y todas las vibraciones, lo que incluye alarmas, música, vídeos y juegos."</string>
     <string name="notification_tap_again" msgid="4477318164947497249">"Toca de nuevo para abrir"</string>
     <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" msgid="8031975796351361601">"Desliza 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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Desbloqueado con la cara"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Cara reconocida"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Desliza el dedo hacia arriba para volverlo a intentar"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Desliza hacia arriba para reintentar Desbloqueo facial"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Desbloquea para usar el NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Este dispositivo pertenece a tu organización"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Este dispositivo pertenece a <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,21 +399,30 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tendrá acceso a toda la información que se muestre en la pantalla o se reproduzca en el dispositivo mientras grabas o envías contenido, incluyendo contraseñas, detalles de pagos, fotos, mensajes y audios que reproduzcas."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"El servicio que ofrece esta función tendrá acceso a toda la información que se muestre en tu pantalla o se reproduzca en tu dispositivo mientras grabas o envías contenido, incluyendo contraseñas, detalles de pagos, fotos, mensajes y audios que reproduzcas."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"¿Empezar a grabar o enviar contenido?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"¿Iniciar grabación o el envío de contenido en <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"¿Permitir que <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> comparta o grabe contenido?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Toda la pantalla"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Una sola aplicación"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Cuando compartas, grabes o envíes contenido, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> podrá acceder a todo lo que sea visible en tu pantalla o que reproduzcas en tu dispositivo. Debes tener cuidado con contraseñas, detalles de pagos, mensajes o cualquier otra información sensible."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Cuando compartas, grabes o envíes una aplicación, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> podrá acceder a todo lo que muestre o reproduzca la aplicación. Debes tener cuidado con contraseñas, detalles de pagos, mensajes o cualquier otra información sensible."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continuar"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Compartir o grabar una aplicación"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"¿Permitir que esta aplicación que comparta o grabe contenido?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Cuando compartas, grabes o envíes contenido, esta aplicación podrá acceder a todo lo que se vea en tu pantalla o reproduzcas en tu dispositivo. Debes tener cuidado con contraseñas, detalles de pagos, mensajes o cualquier otra información sensible."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Cuando compartas, grabes o envíes contenido, esta aplicación podrá acceder a todo lo que se muestre o reproduzca en ella. Debes tener cuidado con contraseñas, detalles de pagos, mensajes o cualquier otra información sensible."</string>
-    <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Bloqueadas por tu administrador de TI"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tendrá acceso a toda la información que se muestre en la pantalla o se reproduzca en el dispositivo mientras grabas o envías contenido, incluidos contraseñas, detalles de pagos, fotos, mensajes y audio que reproduzcas."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"¿Empezar a grabar o enviar contenido?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"El servicio que ofrece esta función tendrá acceso a toda la información que se muestre en la pantalla o se reproduzca en el dispositivo mientras grabas o envías contenido, incluidos contraseñas, detalles de pagos, fotos, mensajes y audio que reproduzcas."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Toda la pantalla"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Una sola aplicación"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Compartir o grabar una aplicación"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"¿Empezar a grabar o enviar contenido con <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Cuando compartes, grabas o envías contenido, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> puede acceder a todo lo que se muestre en la pantalla o se reproduzca en tu dispositivo. Debes tener cuidado con elementos como contraseñas, detalles de pagos, mensajes, fotos, audio y vídeo."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Cuando compartes, grabas o envías una aplicación, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> puede acceder a todo lo que se muestre o se reproduzca en ella. Debes tener cuidado con elementos como contraseñas, detalles de pagos, mensajes, fotos, audio y vídeo."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Empezar"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"¿Empezar a enviar contenido?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Cuando envías contenido, Android puede acceder a todo lo que se muestre en la pantalla o se reproduzca en tu dispositivo. Debes tener cuidado con elementos como contraseñas, detalles de pagos, mensajes, fotos, audio y vídeo."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Cuando envías una aplicación, Android puede acceder a todo lo que se muestre o se reproduzca en ella. Debes tener cuidado con elementos como contraseñas, detalles de pagos, mensajes, fotos, audio y vídeo."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Empezar a enviar"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"¿Empezar a compartir?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Cuando compartes, grabas o envías contenido, Android puede acceder a todo lo que se muestre en la pantalla o se reproduzca en tu dispositivo. Debes tener cuidado con elementos como contraseñas, detalles de pagos, mensajes, fotos, audio y vídeo."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Cuando compartes, grabas o envías una aplicación, Android puede acceder a todo lo que se muestre o se reproduzca en ella. Debes tener cuidado con elementos como contraseñas, detalles de pagos, mensajes, fotos, audio y vídeo."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Empezar"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"El uso compartido se detiene al cambiar de aplicación"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Compartir esta aplicación"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Volver"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Cambio de aplicación"</string>
+    <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Bloqueado por tu administrador de TI"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Las capturas de pantalla están inhabilitadas debido a la política de dispositivos"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Borrar todo"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Gestionar"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Se ha instalado una entidad de certificación en este dispositivo. Es posible que se supervise o se modifique tu tráfico de red seguro."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"El administrador ha activado el registro de la red para supervisar el tráfico en tu dispositivo."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Tu administrador ha activado el registro de la red, por lo que se monitorizará el tráfico de tu perfil de trabajo, aunque no el de tu perfil personal."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Este dispositivo está conectado a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. Tu actividad en esta red, como tus correos electrónicos y tus datos de navegación, es visible para tu administrador de TI."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Este dispositivo está conectado a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. Tu actividad de red, como tus correos y tus datos de navegación, es visible para tu proveedor de VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Este dispositivo está conectado a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. Tu actividad de red, como tus correos y tus datos de navegación, es visible para tu administrador de TI."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Este dispositivo está conectado a Internet a través de <xliff:g id="VPN_APP_0">%1$s</xliff:g> y <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Tu actividad de red, como los correos electrónicos y los datos de navegación, es visible para tu administrador de TI."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Tus aplicaciones de trabajo están conectadas a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. Tu actividad de red en las aplicaciones de trabajo, incluidos los correos electrónicos y los datos de navegación, es visible para tu administrador de TI y tu proveedor de VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Tus aplicaciones personales están conectadas a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. Tu actividad de red, como los correos electrónicos y los datos de navegación, es visible para tu proveedor de VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"desactivar"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Sonido y vibración"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Ajustes"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Se ha bajado el volumen a un nivel más seguro"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"El volumen ha sido elevado durante más tiempo del recomendado"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volumen bajado a un nivel más seguro"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"El volumen de los auriculares ha estado alto durante más tiempo del recomendado"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"El volumen de los auriculares ha superado el límite de seguridad de esta semana"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Seguir escuchando"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Bajar volumen"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Aplicación fijada"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"La aplicación se mantendrá visible hasta que dejes de fijarla. Para dejar de fijarla, mantén pulsados los botones Atrás y Aplicaciones recientes."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"La aplicación se mantendrá visible hasta que dejes de fijarla. Para dejar de fijarla, mantén pulsados los botones Atrás e Inicio."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menú de encendido"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Página <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Pantalla de bloqueo"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Teléfono apagado por calor"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"El teléfono ya funciona con normalidad.\nToca para ver más información"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"El teléfono se había calentado demasiado y se ha apagado para enfriarse. Ahora funciona con normalidad.\n\nPuede calentarse demasiado si:\n	• Usas aplicaciones que consumen muchos recursos (p. ej., apps de juegos, vídeos o navegación)\n	• Descargas o subes archivos grandes\n	• Lo usas a altas temperaturas"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Ver pasos de mantenimiento"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"El teléfono se está calentando"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Se han limitado algunas funciones mientras el teléfono se enfría.\nToca para ver más información"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"El teléfono intentará enfriarse. Puedes seguir utilizándolo, pero es posible que funcione con mayor lentitud.\n\nUna vez que se haya enfriado, funcionará con normalidad."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Ver pasos de mantenimiento"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Desenchufa tu dispositivo"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Tu dispositivo se está calentando cerca del puerto de carga. Si está conectado a un cargador o a un accesorio USB, desenchúfalo con cuidado, ya que el cable también puede estar caliente."</string>
@@ -839,8 +863,9 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ampliar pantalla completa"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ampliar parte de la pantalla"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Abrir ajustes de ampliación"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Cerrar ajustes de ampliación"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Arrastra la esquina para cambiar el tamaño"</string>
-    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Permitir desplazamiento en diagonal"</string>
+    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Permitir ir en diagonal"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Cambiar tamaño"</string>
     <string name="accessibility_change_magnification_type" msgid="666000085077432421">"Cambiar tipo de ampliación"</string>
     <string name="accessibility_magnification_end_resizing" msgid="4881690585800302628">"Finalizar cambio de tamaño"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Toca para abrir funciones de accesibilidad. Personaliza o sustituye este botón en Ajustes.\n\n"<annotation id="link">"Ver ajustes"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Mueve el botón hacia el borde para ocultarlo temporalmente"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Deshacer"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Acceso directo de <xliff:g id="FEATURE_NAME">%s</xliff:g> eliminado"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Acceso directo a <xliff:g id="FEATURE_NAME">%s</xliff:g> quitado"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# acceso directo eliminado}many{# accesos directos eliminados}other{# accesos directos eliminados}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mover arriba a la izquierda"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover arriba a la derecha"</string>
@@ -885,15 +910,14 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"quitar de favoritos"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Mover a la posición <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Selecciona los controles de dispositivos a los que quieras acceder de forma rápida"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mantén pulsado un control y arrástralo para reubicarlo"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Todos los controles quitados"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"No se han guardado los cambios"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Ver otras aplicaciones"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Reorganizar"</string>
     <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Añadir controles"</string>
-    <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Volver a editar"</string>
+    <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Volver a edición"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"No se han podido cargar los controles. Comprueba que no hayan cambiado los ajustes de la aplicación <xliff:g id="APP">%s</xliff:g>."</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"Los controles compatibles no están disponibles"</string>
     <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Otros"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Prueba con otro PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Confirma el cambio de <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Desliza el dedo para ver más"</string>
+    <string name="retry_face" msgid="416380073082560186">"Reintentar autenticación facial"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Cargando recomendaciones"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Multimedia"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"¿Ocultar este control multimedia para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Ajustes"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Se está reproduciendo <xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> en <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> se está ejecutando"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Reproducir"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausar"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Canción anterior"</string>
@@ -968,7 +994,9 @@
     <string name="media_output_dialog_accessibility_seekbar" msgid="5332843993805568978">"Volumen"</string>
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Altavoces y pantallas"</string>
-    <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Sugerencias de dispositivos"</string>
+    <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Dispositivos sugeridos"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Detén tu sesión compartida para transferir el contenido multimedia a otro dispositivo"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Detener"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Cómo funciona la emisión"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Emisión"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Las personas cercanas con dispositivos Bluetooth compatibles pueden escuchar el contenido multimedia que emites"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"No se puede guardar. Inténtalo de nuevo."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"No se puede guardar."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Usa 4 caracteres como mínimo"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Usa menos de 16 caracteres"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Usa menos de <xliff:g id="LENGTH">%1$d</xliff:g> caracteres"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Número de compilación"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Número de compilación copiado en el portapapeles."</string>
     <string name="basic_status" msgid="2315371112182658176">"Conversación abierta"</string>
@@ -1013,7 +1041,7 @@
     <string name="status_before_loading" msgid="1500477307859631381">"El contenido se mostrará en breve"</string>
     <string name="missed_call" msgid="4228016077700161689">"Llamada perdida"</string>
     <string name="messages_count_overflow_indicator" msgid="7850934067082006043">"<xliff:g id="NUMBER">%d</xliff:g>+"</string>
-    <string name="people_tile_description" msgid="8154966188085545556">"Consulta los mensajes recientes, las llamadas perdidas y los cambios de estado"</string>
+    <string name="people_tile_description" msgid="8154966188085545556">"Consulta mensajes recientes, llamadas perdidas y cambios de estado"</string>
     <string name="people_tile_title" msgid="6589377493334871272">"Conversación"</string>
     <string name="paused_by_dnd" msgid="7856941866433556428">"Pausado por No molestar"</string>
     <string name="new_notification_text_content_description" msgid="2915029960094389291">"<xliff:g id="NAME">%1$s</xliff:g> ha enviado un mensaje: <xliff:g id="NOTIFICATION">%2$s</xliff:g>"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"No se ha podido leer el indicador de batería"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Toca la pantalla para consultar más información"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Ninguna alarma puesta"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"Poner bloqueo de pantalla"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Sensor de huellas digitales"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autenticarte"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"acceder al dispositivo"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"El Asistente está escuchando"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificación}many{# notificaciones}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="note_task_button_label" msgid="8718616095800343136">"Tomar notas"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Toma de notas"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Toma de notas, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1097,15 +1127,17 @@
     <string name="log_access_confirmation_title" msgid="4843557604739943395">"¿Permitir que <xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> acceda a todos los registros del dispositivo?"</string>
     <string name="log_access_confirmation_allow" msgid="752147861593202968">"Permitir el acceso una vez"</string>
     <string name="log_access_confirmation_deny" msgid="2389461495803585795">"No permitir"</string>
-    <string name="log_access_confirmation_body" msgid="6883031912003112634">"Los registros del dispositivo documentan lo que sucede en tu dispositivo. Las aplicaciones pueden usar estos registros para encontrar y solucionar problemas.\n\nComo algunos registros pueden contener información sensible, es mejor que solo permitas que accedan a ellos las aplicaciones en las que confíes. \n\nAunque no permitas que esta aplicación acceda a todos los registros del dispositivo, podrá seguir accediendo a sus propios registros. Es posible que el fabricante del dispositivo pueda acceder a algunos registros o información de tu dispositivo. Más información"</string>
+    <string name="log_access_confirmation_body" msgid="6883031912003112634">"Los registros del dispositivo documentan lo que sucede en tu dispositivo. Las aplicaciones pueden usar estos registros para encontrar y solucionar problemas.\n\nComo algunos registros pueden contener información sensible, es mejor que solo permitas que accedan a ellos las aplicaciones en las que confíes. \n\nAunque no permitas que esta aplicación acceda a todos los registros del dispositivo, podrá seguir accediendo a sus propios registros. Es posible que el fabricante del dispositivo pueda acceder a algunos registros o información de tu dispositivo."</string>
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Más información"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Más información en <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• La aplicación debe estar configurada"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Se debe haber añadido al menos una tarjeta a Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Debes instalar una aplicación de cámara"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• La aplicación debe estar configurada"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Al menos un dispositivo debe estar disponible"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Para añadir la aplicación Wallet como acceso directo, asegúrate de que está instalada"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Para añadir la aplicación Wallet como acceso directo, asegúrate de haber añadido al menos una tarjeta"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Para añadir el escáner de códigos QR como acceso directo, asegúrate de que hay instalada una aplicación de cámara"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Para añadir la aplicación Home como acceso directo, asegúrate de que está instalada"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Al menos un dispositivo debe estar disponible"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Selecciona una aplicación de notas predeterminada para usar el acceso directo de toma de notas"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Seleccionar aplicación"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Mantén pulsado el acceso directo"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Cancelar"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Cambia de pantalla ahora"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Conecta tu lápiz óptico a un cargador"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Batería del lápiz óptico baja"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videocámara"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"No se puede llamar desde este perfil"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Tu política del trabajo solo te permite hacer llamadas telefónicas desde el perfil de trabajo"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"No puedes llamar desde una aplicación personal"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Tu organización solo te permite hacer llamadas desde aplicaciones de trabajo"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Cambiar al perfil de trabajo"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Cerrar"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instalar una aplicación de llamadas de trabajo"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Cancelar"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizar pantalla de bloqueo"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Desbloquea para personalizar la pantalla de bloqueo"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Red Wi-Fi no disponible"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Cámara bloqueada"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Cámara y micrófono bloqueados"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Micrófono bloqueado"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Modo Prioridad activado"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"El Asistente está activado"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Configura la aplicación de notas predeterminada en Ajustes"</string>
+    <string name="install_app" msgid="5066668100199613936">"Instalar aplicación"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Micrófono y cámara"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Uso reciente en aplicaciones"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Ver acceso reciente"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Hecho"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Desplegar y mostrar opciones"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Ocultar"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Cerrar esta aplicación"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Se ha cerrado <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Gestionar servicio"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Gestionar acceso"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"En uso por llamada telefónica"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Usado recientemente en llamada telefónica"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"En uso por <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Usado recientemente por <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"En uso por <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Usado recientemente por <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"En uso por <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Usado recientemente por <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-es/strings_tv.xml b/packages/SystemUI/res/values-es/strings_tv.xml
deleted file mode 100644
index 1482fd0..0000000
--- a/packages/SystemUI/res/values-es/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"La VPN está conectada"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"La VPN está desconectada"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"A través de <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notificaciones"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Sin notificaciones"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"El micrófono está grabando"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"La cámara está grabando"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"La cámara y el micrófono están grabando"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"El micrófono ha dejado de grabar"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"La cámara ha dejado de grabar"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"La cámara y el micrófono han dejado de grabar"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Grabación de pantalla iniciada"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Grabación de pantalla detenida"</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 7451e6b..66c7ee5 100644
--- a/packages/SystemUI/res/values-es/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-es/tiles_states_strings.xml
@@ -43,7 +43,7 @@
   </string-array>
   <string-array name="tile_states_cell">
     <item msgid="1235899788959500719">"No disponible"</item>
-    <item msgid="2074416252859094119">"Desactivado"</item>
+    <item msgid="2074416252859094119">"Desactivadas"</item>
     <item msgid="287997784730044767">"Activado"</item>
   </string-array>
   <string-array name="tile_states_battery">
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index bb9b4fc..1e7bbf4 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Luba USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Lisateave"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Ekraanipilt"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock on keelatud"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Avatuna hoidmine on keelatud"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"saatis kujutise"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Kuvatõmmise salvestamine ..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Ekraanipildi salvestamine tööprofiilile …"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> tuvastas selle ekraanipildi."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> ja muud avatud rakendused tuvastasid selle ekraanipildi."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Lisa märkmesse"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Ekraanisalvesti"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Ekraanisalvesti"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Ekraanisalvestuse töötlemine"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Pooleli märguanne ekraanikuva salvestamise seansi puhul"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Kas alustada salvestamist?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Salvestamise ajal võib Androidi süsteem jäädvustada tundlikku teavet, mis on ekraanikuval nähtav või mida seadmes esitatakse. See hõlmab paroole, makseteavet, fotosid, sõnumeid ja heli."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Kogu ekraanikuva salvestamine"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Ühe rakenduse salvestamine"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Salvestamise ajal on Androidil juurdepääs kõigele, mis on teie ekraanikuval nähtaval või mida teie seadmes esitatakse. Seega olge paroolide, makseteabe, sõnumite ja muu tundliku teabega ettevaatlik."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Rakenduse salvestamise ajal on Androidil juurdepääs kõigele, mis on selles rakenduses nähtaval või mida selles esitatakse. Seega olge paroolide, makseteabe, sõnumite ja muu tundliku teabega ettevaatlik."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Alusta salvestamist"</string>
-    <string name="screenrecord_audio_label" msgid="6183558856175159629">"Heli salvestamine"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Kas alustada salvestamist?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Salvestamise ajal on Androidil juurdepääs kõigele, mis on teie ekraanikuval nähtaval või mida teie seadmes esitatakse. Seega olge ettevaatlik selliste andmetega nagu paroolid, makseteave, sõnumid, fotod ning heli ja video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Rakenduse salvestamise ajal on Androidil juurdepääs kõigele, mis on selles rakenduses nähtaval või mida selles esitatakse. Seega olge ettevaatlik selliste andmetega nagu paroolid, makseteave, sõnumid, fotod ning heli ja video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Alusta salvestamist"</string>
+    <string name="screenrecord_audio_label" msgid="6183558856175159629">"Salvesta heli"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Seadme heli"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Seadmest pärinev heli, nt muusika, kõned ja helinad"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Seadme heli ja mikrofon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Alusta"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Alusta"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Ekraanikuva salvestamine"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Ekraanikuva ja heli salvestamine"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Kuva ekraanipuudutused"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Jaga"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Ekraanisalvestis on salvestatud"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Puudutage kuvamiseks"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Viga ekraanikuva salvestise kustutamisel"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Viga ekraanisalvestise salvestamisel"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Viga ekraanikuva salvestamise alustamisel"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Kuvamine täisekraanil"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Väljumiseks pühkige ülevalt alla."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Selge"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Tagasi"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Kodu"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menüü"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Nägu on autenditud"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Kinnitatud"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Lõpuleviimiseks puudutage nuppu Kinnita"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Avati näoga. Jätkamiseks vajutage avamise ikooni."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Avati näoga"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Avati näoga. Vajutage jätkamiseks."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Nägu tuvastati. Vajutage jätkamiseks."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Nägu tuvastati. Jätkamiseks vajutage avamise ikooni."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenditud"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Tühista autentimine"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Kasuta PIN-koodi"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Kasuta mustrit"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Kasuta parooli"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Kui sisestate järgmisel katsel vale mustri, kustutatakse teie tööprofiil ja selle andmed."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Kui sisestate järgmisel katsel vale PIN-koodi, kustutatakse teie tööprofiil ja selle andmed."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Kui sisestate järgmisel katsel vale parooli, kustutatakse teie tööprofiil ja selle andmed."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Seadista"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Mitte praegu"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"See on turvalisuse ja toimivuse täiustamiseks nõutav"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Seadistage sõrmejäljega avamine uuesti"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Sõrmejäljega avamine"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Sõrmejäljega avamise seadistamine"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Sõrmejäljega avamise uuesti seadistamiseks kustutatakse teie praegused sõrmejäljekujutised ja -mudelid.\n\nPärast nende kustutamist peate sõrmejäljega avamise funktsiooni uuesti seadistama, et sõrmejäljega telefon avada või oma isik kinnitada."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Sõrmejäljega avamise uuesti seadistamiseks kustutatakse teie praegused sõrmejäljekujutised ja -mudel.\n\nPärast nende kustutamist peate sõrmejäljega avamise funktsiooni uuesti seadistama, et sõrmejäljega telefon avada või oma isik kinnitada."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Sõrmejäljega avamist ei õnnestunud seadistada. Avage seaded ja proovige uuesti."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Seadistage näoga avamine uuesti"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Näoga avamine"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Näoga avamise funktsiooni seadistamine"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Näoga avamise uuesti seadistamiseks kustutatakse teie praegune näomudel.\n\nTelefoni avamiseks oma näoga peate selle funktsiooni uuesti seadistama."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Näoga avamist ei õnnestunud seadistada. Avage seaded ja proovige uuesti."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Puudutage sõrmejäljeandurit"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Jätkamiseks vajutage avamise ikooni"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Nägu ei õnnestu tuvastada. Kasutage sõrmejälge."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -202,7 +218,7 @@
     <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Töö lukustuskuva"</string>
     <string name="accessibility_desc_close" msgid="8293708213442107755">"Sulgemine"</string>
     <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"täielik vaikus"</string>
-    <string name="accessibility_quick_settings_dnd_alarms_on" msgid="3375848309132140014">"ainult alarmid"</string>
+    <string name="accessibility_quick_settings_dnd_alarms_on" msgid="3375848309132140014">"ainult äratused"</string>
     <string name="accessibility_quick_settings_dnd" msgid="2415967452264206047">"Mitte segada."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="8250942386687551283">"Bluetooth."</string>
     <string name="accessibility_quick_settings_bluetooth_on" msgid="3819082137684078013">"Bluetooth on sees."</string>
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Heli"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Peakomplekt"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Sisend"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Kuuldeaparaadid"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Kuuldeaparaadid"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Sisselülitamine …"</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Avati näoga"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Nägu tuvastati"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Uuesti proovimiseks pühkige üles"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Pühkige üles, et uuesti näoga avamist proovida"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC kasutamiseks avage."</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"See seade kuulub teie organisatsioonile"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Selle seadme omanik on <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Rakendus <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> saab juurdepääsu kogu teabele, mis on teie ekraanikuval nähtav või mida seadmes salvestamise või ülekande ajal esitatakse. See hõlmab teavet, nagu paroolid, maksete üksikasjad, fotod, sõnumid ja esitatav heli."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Seda funktsiooni pakkuv teenus saab juurdepääsu kogu teabele, mis on teie ekraanikuval nähtav või mida seadmes salvestamise või ülekande ajal esitatakse. See hõlmab teavet, nagu paroolid, maksete üksikasjad, fotod, sõnumid ja esitatav heli."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Kas alustada salvestamist või ülekannet?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Kas alustada rakendusega <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> salvestamist või ülekannet?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Kas lubada rakendusel <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> jagada või salvestada?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Kogu ekraanikuva"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Üks rakendus"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Kui jagate, salvestate või kannate üle, on rakendusel <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> juurdepääs kõigele, mis on teie ekraanikuval nähtaval või mida teie seadmes esitatakse. Seega olge paroolide, makseteabe, sõnumite ja muu tundliku teabega ettevaatlik."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Kui jagate, salvestate või kannate rakendust üle, on rakendusel <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> juurdepääs kõigele, mida selles rakenduses kuvatakse või esitatakse. Seega olge paroolide, makseteabe, sõnumite ja muu tundliku teabega ettevaatlik."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Jätka"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Rakenduse jagamine või salvestamine"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Kas lubada sellel rakendusel jagada või salvestada?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Kui jagate, salvestate või kannate üle, on selle rakendusel juurdepääs kõigele, mis on teie ekraanikuval nähtaval või mida teie seadmes esitatakse. Seega olge paroolide, makseteabe, sõnumite ja muu tundliku teabega ettevaatlik."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Kui jagate, salvestate või kannate rakendust üle, on sellel rakendusel juurdepääs kõigele, mida selles rakenduses kuvatakse või esitatakse. Seega olge paroolide, makseteabe, sõnumite ja muu tundliku teabega ettevaatlik."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Rakendus <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> saab juurdepääsu kogu teabele, mis on teie ekraanikuval nähtav või mida seadmes salvestamise või ülekande ajal esitatakse. See hõlmab teavet, nagu paroolid, maksete üksikasjad, fotod, sõnumid ja esitatav heli."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Kas alustada salvestamist või ülekannet?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Seda funktsiooni pakkuv teenus saab juurdepääsu kogu teabele, mis on teie ekraanikuval nähtav või mida seadmes salvestamise või ülekande ajal esitatakse. See hõlmab teavet, nagu paroolid, maksete üksikasjad, fotod, sõnumid ja esitatav heli."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Kogu ekraanikuva"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Üks rakendus"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Rakenduse jagamine või salvestamine"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Kas alustada rakendusega <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> salvestamist või ülekannet?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Kui jagate, salvestate või kannate üle, on rakendusel <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> juurdepääs kõigele, mis on teie ekraanikuval nähtaval või mida teie seadmes esitatakse. Seega olge ettevaatlik selliste andmetega nagu paroolid, makseteave, sõnumid, fotod ning heli ja video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Kui jagate, salvestate või kannate rakendust üle, on rakendusel <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> juurdepääs kõigele, mida selles rakenduses kuvatakse või esitatakse. Seega olge paroolide, makseteabe, sõnumite, fotode, heli ja videoga ettevaatlik."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Alusta"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Kas alustada ülekandmist?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Kui kannate üle, on Androidil juurdepääs kõigele, mis on teie ekraanikuval nähtaval või mida teie seadmes esitatakse. Seega olge ettevaatlik selliste andmetega nagu paroolid, makseteave, sõnumid, fotod ning heli ja video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Rakenduse ülekandmise ajal on Androidil juurdepääs kõigele, mis on selles rakenduses nähtaval või mida selles esitatakse. Seega olge paroolide, makseteabe, sõnumite, fotode, heli ja videoga ettevaatlik."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Alusta ülekandmist"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Kas alustada jagamist?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Kui jagate, salvestate või kannate üle, on Androidil juurdepääs kõigele, mis on teie ekraanikuval nähtaval või mida teie seadmes esitatakse. Seega olge ettevaatlik selliste andmetega nagu paroolid, makseteave, sõnumid, fotod ning heli ja video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Kui jagate, salvestate või kannate rakendust üle, on Androidil juurdepääs kõigele, mida selles rakenduses kuvatakse või esitatakse. Seega olge paroolide, makseteabe, sõnumite, fotode, heli ja videoga ettevaatlik."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Alusta"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Rakenduste vahetamisel jagamine peatatakse"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Jaga hoopis seda rakendust"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Lülitu tagasi"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Rakenduse vahetamine"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blokeeris teie IT-administraator"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Ekraanikuva jäädvustamine on seadmereeglitega keelatud"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Tühjenda kõik"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Sertifikaadi volitus on sellesse seadmesse installitud. Teie turvalist võrguliiklust võidakse jälgida ja muuta."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Teie administraator lülitas sisse võrgu logimise funktsiooni, mis jälgib teie seadmes liiklust."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Teie administraator on sisse lülitanud võrgu logimise funktsiooni, mis jälgib liiklust teie võrguprofiilil, kuid mitte teie isiklikul profiilil."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"See seade on internetiga rakenduse <xliff:g id="VPN_APP">%1$s</xliff:g> kaudu ühendatud. Teie võrgutegevus, sealhulgas meilid ja sirvimisandmed, on nähtav teie IT-administraatorile."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"See seade on ühendatud internetiga rakenduse <xliff:g id="VPN_APP">%1$s</xliff:g> kaudu. Teie võrgutegevused, sealhulgas meilid ja sirvimisandmed, on nähtavad teie VPN-teenuse pakkujale."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"See seade on Internetiga ühendatud rakenduse <xliff:g id="VPN_APP">%1$s</xliff:g> kaudu. Teie võrgutegevus, sealhulgas meilid ja sirvimisandmed, on nähtav teie IT-administraatorile."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"See seade on ühendatud internetiga rakenduste <xliff:g id="VPN_APP_0">%1$s</xliff:g> ja <xliff:g id="VPN_APP_1">%2$s</xliff:g> kaudu. Teie võrgutegevused (sealhulgas meilid ja sirvimisandmed) on nähtavad teie IT-administraatorile."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Teie töörakendused on ühendatud internetiga rakenduse <xliff:g id="VPN_APP">%1$s</xliff:g> kaudu. Teie töörakenduste võrgutegevused (sealhulgas meilid ja sirvimisandmed) on nähtavad teie IT-administraatorile ning VPN-i teenusepakkujale."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Teie isiklikud rakendused on internetiga rakenduse <xliff:g id="VPN_APP">%1$s</xliff:g> kaudu ühendatud. Teie võrgutegevus, sealhulgas meilid ja sirvimisandmed, on nähtav teie VPN-i teenusepakkujale."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"keela"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Heli ja vibreerimine"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Seaded"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Ohutuma helitugevuse huvides vähendatud"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Heli on olnud vali soovitatavast ajast kauem"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Helitugevust vähendati ohutumale tasemele"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Kõrvaklappide helitugevus on olnud suur soovitatavast ajast kauem"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Kõrvaklappide helitugevus on ületanud selle nädala ohutuspiirangu"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Jätkake kuulamist"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Vähenda helitugevust"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Rakendus on kinnitatud"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"See hoitakse kuval, kuni selle vabastate. Vabastamiseks puudutage pikalt nuppe Tagasi ja Ülevaade."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"See hoitakse kuval, kuni selle vabastate. Vabastamiseks puudutage pikalt nuppe Tagasi ja Avakuva."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Toitemenüü"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Leht <xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Lukustuskuva"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Tel. lül. kuumuse tõttu välja"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Telefon töötab nüüd tavapäraselt.\nPuudutage lisateabe saamiseks."</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefon oli liiga kuum, seetõttu lülitus see jahtumiseks välja. Telefon töötab nüüd tavapäraselt.\n\nTelefon võib kuumaks minna:\n • ressursse koormavate rakenduste kasutamisel (nt mängu-, video- või navigatsioonirakendused)\n • suurte failide alla-/üleslaadimisel\n • telefoni kasutamisel kõrgel temperatuuril"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Vaadake hooldusjuhiseid"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefon soojeneb"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Mõned funktsioonid on piiratud, kuni telefon jahtub.\nPuudutage lisateabe saamiseks."</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Teie telefon proovib automaatselt maha jahtuda. Saate telefoni ikka kasutada, kuid see võib olla aeglasem.\n\nKui telefon on jahtunud, töötab see tavapäraselt."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Vaadake hooldusjuhiseid"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Eemaldage seade"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Teie seade läheb laadimispordi juurest soojaks. Kui see on ühendatud laadija või USB-tarvikuga, eemaldage see ja olge ettevaatlik, kuna kaabel võib samuti soe olla."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Täisekraani suurendamine"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ekraanikuva osa suurendamine"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Ava suurendamisseaded"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Sule suurendamisseaded"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Suuruse muutmiseks lohistage nurka"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Luba diagonaalne kerimine"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Muuda suurust"</string>
@@ -850,7 +875,7 @@
     <string name="accessibility_magnification_bottom_handle" msgid="6531646968813821258">"Alumine käepide"</string>
     <string name="accessibility_magnification_settings_panel_description" msgid="8174187340747846953">"Suurendamisseaded"</string>
     <string name="accessibility_magnifier_size" msgid="3038755600030422334">"Luubi suurus"</string>
-    <string name="accessibility_magnification_zoom" msgid="4222088982642063979">"Suumi"</string>
+    <string name="accessibility_magnification_zoom" msgid="4222088982642063979">"Suum"</string>
     <string name="accessibility_magnification_medium" msgid="6994632616884562625">"Keskmine"</string>
     <string name="accessibility_magnification_small" msgid="8144502090651099970">"Väike"</string>
     <string name="accessibility_magnification_large" msgid="6602944330021308774">"Suur"</string>
@@ -871,7 +896,7 @@
     <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Teisalda servast eemale ja kuva"</string>
     <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Eemalda"</string>
     <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="quick_controls_title" msgid="6839108006171302273">"Seadmete juhtimisvidinad"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Valige juhtelementide lisamiseks rakendus"</string>
     <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>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"eemalda lemmikute hulgast"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Teisalda asendisse <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Juhtnupud"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Valige seadme juhtelemendid, millele kiirelt juurde pääseda"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Juhtelementide ümberpaigutamiseks hoidke neid all ja lohistage"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Kõik juhtelemendid eemaldati"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Muudatusi ei salvestatud"</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Proovige muud PIN-koodi"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Kinnitage seadme <xliff:g id="DEVICE">%s</xliff:g> muudatus"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Pühkige sõrmega, et näha rohkem"</string>
+    <string name="retry_face" msgid="416380073082560186">"Näo autentimise uuesti proovimine"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Soovituste laadimine"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Meedia"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"Kas peita rakenduses <xliff:g id="APP_NAME">%1$s</xliff:g> see meediajuhik?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"Kas peita see rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> meediajuhik?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"Praegust meediaseanssi ei saa peita."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Peida"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Jätka"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Seaded"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> esitajalt <xliff:g id="ARTIST_NAME">%2$s</xliff:g> esitatakse rakenduses <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> töötab"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Esita"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Peata"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Eelmine lugu"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Kõlarid ja ekraanid"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Soovitatud seadmed"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Peatage jagatud seanss, et meedia teise seadmesse teisaldada"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Peata"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Kuidas ülekandmine toimib?"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Ülekanne"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Teie läheduses olevad inimesed, kellel on ühilduvad Bluetooth-seadmed, saavad kuulata teie ülekantavat meediat"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Ei saa salvestada. Proovige uuesti."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Ei saa salvestada."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Kasutage vähemalt 4 tähemärki"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Kasutage vähem kui 16 tähemärki"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Kasutage vähem kui <xliff:g id="LENGTH">%1$d</xliff:g> tähemärki"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Järgunumber"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Järgunumber kopeeriti lõikelauale."</string>
     <string name="basic_status" msgid="2315371112182658176">"Avage vestlus"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Probleem akumõõdiku lugemisel"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Puudutage lisateabe saamiseks"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Äratust pole"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"sisesta ekraanilukk"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Sõrmejäljeandur"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autentimiseks"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"seadmesse sisenemiseks"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistent kuulab"</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="note_task_button_label" msgid="8718616095800343136">"Märkmete tegemine"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Märkmete tegemine"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Märkmete tegemine <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Lisateave"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Lisateave: <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Ava <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Rakendus on seadistatud"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Vähemalt üks kaart on Walletisse lisatud"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Installige kaamerarakendus"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Rakendus on seadistatud"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Vähemalt üks seade on saadaval"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Rahakotirakenduse otsetee lisamiseks veenduge, et rakendus oleks installitud"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Rahakotirakenduse otsetee lisamiseks veenduge, et vähemalt üks kaart oleks lisatud"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR-koodi skanneri otsetee lisamiseks veenduge, et kaamerarakendus oleks installitud"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Rakenduse Home otsetee lisamiseks veenduge, et rakendus oleks installitud"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Vähemalt üks seade on saadaval"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Valige märkmete tegemise vaikerakendus, et kasutada märkmete tegemise otseteed"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Valige rakendus"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Pikalt puudutamise otsetee"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Tühista"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Vaheta ekraane kohe"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Ühendage elektronpliiats laadijaga"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Elektronpliiatsi akutase on madal"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokaamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Sellelt profiililt ei saa helistada"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Teie töökoha eeskirjad lubavad teil helistada ainult tööprofiililt"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Isiklikust rakendusest ei saa helistada"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Teie organisatsioon lubab helistada ainult töörakendustest."</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Lülitu tööprofiilile"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Sule"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"• Installige töö telefonirakendus"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Tühista"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Kohanda lukustuskuva"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Lukustuskuva kohandamiseks avage"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"WiFi pole saadaval"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioriteetne režiim on sisse lülitatud"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistent on aktiveeritud"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Määrake seadetes märkmete vaikerakendus."</string>
+    <string name="install_app" msgid="5066668100199613936">"Installi rakendus"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon ja kaamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Rakenduse hiljutine kasutamine"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Kuva hiljutine juurdepääs"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Valmis"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Laiendamine ja valikute kuvamine"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Ahendamine"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Sule see rakendus"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> on suletud"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Teenuse haldamine"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Juurdepääsu haldamine"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Seda kasutab telefonikõne"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Kasutati hiljuti telefonikõne jaoks"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Seda kasutab <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Kasutas hiljuti rakendus <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Seda kasutab <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Kasutas hiljuti rakendus <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Seda kasutab <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Kasutas hiljuti rakendus <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-et/strings_tv.xml b/packages/SystemUI/res/values-et/strings_tv.xml
deleted file mode 100644
index ee7bba8..0000000
--- a/packages/SystemUI/res/values-et/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN on ühendatud"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN-i ühendus on katkestatud"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Teenuse <xliff:g id="VPN_APP">%1$s</xliff:g> kaudu"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Märguanded"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Märguandeid pole"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofon salvestab"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kaamera salvestab"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kaamera ja mikrofon salvestavad"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofon peatas salvestamise"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kaamera peatas salvestamise"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kaamera ja mikrofon peatasid salvestamise"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Ekraanikuva salvestamine algas"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Ekraanikuva salvestamine on peatatud"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 7a6b8f8..3ce64b2 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Gaitu USB ataka"</string>
     <string name="learn_more" msgid="4690632085667273811">"Lortu informazio gehiago"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Pantaila-argazkia"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Desgaitu da desblokeatze luzatua"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Desgaitu da desblokeatuta mantentzeko eginbidea"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"erabiltzaileak irudi bat bidali du"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Pantaila-argazkia gordetzen…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Pantaila-argazkia laneko profilean gordetzen…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> aplikazioak pantaila-argazkia hauteman du."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> aplikazioak eta irekitako beste aplikazio batzuek pantaila-argazkia hauteman dute."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Gehitu oharrean"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Pantaila-grabagailua"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Pantaila-grabagailua"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Pantaila-grabaketa prozesatzen"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Pantailaren grabaketa-saioaren jakinarazpen jarraitua"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Grabatzen hasi nahi duzu?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Pantaila grabatzen duzun bitartean, baliteke Android sistemak pantailan agertzen den edo gailuak erreproduzitzen duen kontuzko informazioa grabatzea; besteak beste, pasahitzak, ordainketa-informazioa, argazkiak, mezuak eta audioa."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Grabatu pantaila osoko edukia"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Grabatu aplikazio bakar bat"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Grabatzen ari zarenean, pantailan ikusgai dagoen edo gailuan erreproduzitzen ari den guztirako sarbidea du Android-ek. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin edo bestelako kontuzko informazioarekin."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Aplikazio bat grabatzen ari zarenean, aplikazio horretan ikusgai dagoen edo bertan erreproduzitzen ari den guztirako sarbidea du Android-ek. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin edo bestelako kontuzko informazioarekin."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Hasi grabatzen"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Grabatzen hasi nahi duzu?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Grabatzen duzunean, pantailan ikusgai dagoen edo gailuan erreproduzitzen ari den guztia atzi dezake Android-ek. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin, argazkiekin, audioekin eta bideoekin, besteak beste."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Aplikazio bat grabatzen duzunean, aplikazio horretan ikusgai dagoen edo bertan erreproduzitzen ari den guztia atzi dezake Android-ek. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin, argazkiekin, audioekin eta bideoekin, besteak beste."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Hasi grabatzen"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Grabatu audioa"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Gailuaren audioa"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Gailuko soinuak; adibidez, musika, deiak eta tonuak"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofonoa"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Gailuaren audioa eta mikrofonoa"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Hasi"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Hasi"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Pantaila grabatzen"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Pantaila eta audioa grabatzen"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Erakutsi pantaila-ukitzeak"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Partekatu"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Gorde da pantailaren grabaketa"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Sakatu ikusteko"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Errore bat gertatu da pantailaren grabaketa ezabatzean"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Errore bat gertatu da pantaila-grabaketa gordetzean"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Errore bat gertatu da pantaila grabatzen hastean"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Pantaila osoa ikusgai"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Irteteko, pasatu hatza goitik behera."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Ados"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Atzera"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Hasiera"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menua"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Autentifikatu da aurpegia"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Berretsita"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Amaitzeko, sakatu \"Berretsi\""</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Aurpegiaren bidez desblokeatu da. Aurrera egiteko, sakatu desblokeatzeko ikonoa."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Aurpegiaren bidez desblokeatu da"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Aurpegiaren bidez desblokeatu da. Sakatu aurrera egiteko."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Ezagutu da aurpegia. Sakatu aurrera egiteko."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Ezagutu da aurpegia. Aurrera egiteko, sakatu desblokeatzeko ikonoa."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentifikatuta"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Utzi bertan behera autentifikazioa"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Erabili PINa"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Erabili eredua"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Erabili pasahitza"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Hurrengo saiakeran eredua oker marrazten baduzu, laneko profila eta bertako datuak ezabatuko dira."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Hurrengo saiakeran PINa oker idazten baduzu, laneko profila eta bertako datuak ezabatuko dira."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Hurrengo saiakeran pasahitza oker idazten baduzu, laneko profila eta bertako datuak ezabatuko dira."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Konfiguratu"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Orain ez"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Ezinbestekoa da segurtasuna eta errendimendua hobetzeko"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Konfiguratu berriro hatz-marka bidez desblokeatzeko eginbidea"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Hatz-marka bidez desblokeatzea"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Konfiguratu hatz-marka bidez desblokeatzeko eginbidea"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Hatz-marka bidez desblokeatzeko eginbidea berriro konfiguratzeko, oraingo hatz-markaren irudiak eta ereduak ezabatu egingo dira lehendabizi.\n\nHaiek ezabatuz gero, hatz-marka bidez desblokeatzeko eginbidea berriro konfiguratu beharko duzu telefonoa hatz-marka erabilita desblokeatzeko edo zeu zarela egiaztatzeko."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Hatz-marka bidez desblokeatzeko eginbidea berriro konfiguratzeko, oraingo hatz-markaren irudiak eta eredua ezabatu egingo dira lehendabizi.\n\nHaiek ezabatuz gero, hatz-marka bidez desblokeatzeko eginbidea berriro konfiguratu beharko duzu telefonoa hatz-marka erabilita desblokeatzeko edo zeu zarela egiaztatzeko."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Ezin izan da konfiguratu hatz-marka bidez desblokeatzeko eginbidea. Berriro saiatzeko, joan ezarpenetara."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Konfiguratu berriro aurpegi bidez desblokeatzeko eginbidea"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Aurpegi bidez desblokeatzea"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Konfiguratu aurpegi bidez desblokeatzeko eginbidea"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Aurpegi bidez desblokeatzeko eginbidea berriro konfiguratzeko, oraingo aurpegi-eredua ezabatu egingo da lehendabizi.\n\nEzabatuz gero, eginbidea berriro konfiguratu beharko duzu telefonoa aurpegia erabilita desblokeatzeko."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Ezin izan da konfiguratu aurpegi bidez desblokeatzeko eginbidea. Berriro saiatzeko, joan ezarpenetara."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Sakatu hatz-marken sentsorea"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Aurrera egiteko, sakatu desblokeatzeko ikonoa"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Ezin da hauteman aurpegia. Erabili hatz-marka."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audioa"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Entzungailua"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Sarrera"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Audifonoak"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audifonoak"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aktibatzen…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Biratze automatikoa"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Biratu pantaila automatikoki"</string>
@@ -256,7 +272,7 @@
     <string name="quick_settings_cast_detail_empty_text" msgid="2846282280014617785">"Ez dago gailurik erabilgarri"</string>
     <string name="quick_settings_cast_no_wifi" msgid="6980194769795014875">"Ez zaude konektatuta wifi-sarera"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Distira"</string>
-    <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Kolore-alderantzikatzea"</string>
+    <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Koloreen alderantzikatzea"</string>
     <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Koloreen zuzenketa"</string>
     <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"Letra-tamaina"</string>
     <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Kudeatu erabiltzaileak"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Aurpegiaren bidez desblokeatu da"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Ezagutu da aurpegia"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Berriro saiatzeko, pasatu hatza gora"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Pasatu hatza gora aurpegi bidez berriro desblokeatzen saiatzeko"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Desblokea ezazu NFCa erabiltzeko"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Gailu hau zure erakundearena da"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Gailu hau <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> erakundearena da"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Zerbait grabatzen edo igortzen duzunean, pantailan ikus daitekeen edo gailuak erreproduzitzen duen informazio guztia atzitu ahalko du <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aplikazioak; besteak beste, pasahitzak, ordainketen xehetasunak, argazkiak, mezuak eta erreproduzitzen dituzun audioak."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Zerbait grabatzen edo igortzen duzunean, pantailan ikus daitekeen edo gailuak erreproduzitzen duen informazio guztia atzitu ahalko du funtzio hori eskaintzen duen zerbitzuak; besteak beste, pasahitzak, ordainketen xehetasunak, argazkiak, mezuak eta erreproduzitzen dituzun audioak."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Grabatzen edo igortzen hasi nahi duzu?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aplikazioarekin grabatzen edo igortzen hasi nahi duzu?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Edukia partekatu edo grabatzeko baimena eman nahi diozu <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aplikazioari?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Pantaila osoa"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Aplikazio bakar bat"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Edukia partekatzen, grabatzen edo igortzen ari zarenean, pantailan ikusgai dagoen edo gailuan erreproduzitzen ari den guztirako sarbidea du <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aplikazioak. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin edo bestelako kontuzko informazioarekin."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Aplikazio bat partekatzen, grabatzen edo igortzen ari zarenean, aplikazio horretan ikusgai dagoen edo bertan erreproduzitzen ari den guztirako sarbidea du <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aplikazioak. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin edo bestelako kontuzko informazioarekin."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Egin aurrera"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Partekatu edo grabatu aplikazioak"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Edukia partekatzeko edo grabatzeko baimena eman nahi diozu aplikazioari?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Edukia partekatzen, grabatzen edo igortzen ari zarenean, pantailan ikusgai dagoen edo gailuan erreproduzitzen ari den guztirako sarbidea du aplikazioak. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin edo bestelako kontuzko informazioarekin."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Aplikazio bat partekatzen, grabatzen edo igortzen ari zarenean, aplikazio horretan ikusgai dagoen edo bertan erreproduzitzen ari den guztirako sarbidea du aplikazioak. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin edo bestelako kontuzko informazioarekin."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Zerbait grabatzen edo igortzen duzunean, pantailan ikusgai dagoen edo gailuak erreproduzitzen duen informazio guztia atzi dezake <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aplikazioak. Pasahitzak, ordainketen xehetasunak, argazkiak, mezuak eta erreproduzitzen dituzun audioak sartzen dira informazio horretan."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Grabatzen edo igortzen hasi nahi duzu?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Zerbait grabatzen edo igortzen duzunean, pantailan ikusgai dagoen edo gailuak erreproduzitzen duen informazio guztia erabili ahalko du funtzio hori eskaintzen duen zerbitzuak. Pasahitzak, ordainketen xehetasunak, argazkiak, mezuak eta erreproduzitzen dituzun audioak sartzen dira informazio horretan."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Pantaila osoa"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Aplikazio bakar bat"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Partekatu edo grabatu aplikazio bat"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aplikazioarekin grabatzen edo igortzen hasi nahi duzu?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Edukia partekatzen, grabatzen edo igortzen ari zarenean, pantailan ikusgai dagoen edo gailuan erreproduzitzen ari den guztia atzi dezake <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aplikazioak. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin, argazkiekin, audioekin eta bideoekin, besteak beste."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Aplikazio bat partekatzen, grabatzen edo igortzen ari zarenean, aplikazio horretan ikusgai dagoen edo bertan erreproduzitzen ari den guztia atzi dezake <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aplikazioak. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin, argazkiekin, audioekin eta bideoekin, besteak beste."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Hasi"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Igortzen hasi nahi duzu?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Edukia igortzen ari zarenean, pantailan ikusgai dagoen edo gailuan erreproduzitzen ari den guztia atzi dezake Android-ek. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin, argazkiekin, audioekin eta bideoekin, besteak beste."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Aplikazio bat igortzen ari zarenean, aplikazio horretan ikusgai dagoen edo bertan erreproduzitzen ari den guztia atzi dezake Android-ek. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin, argazkiekin, audioekin eta bideoekin, besteak beste."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Hasi igortzen"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Partekatzen hasi nahi duzu?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Edukia partekatzen, grabatzen edo igortzen ari zarenean, pantailan ikusgai dagoen edo gailuan erreproduzitzen ari den guztia atzi dezake Android-ek. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin, argazkiekin, audioekin eta bideoekin, besteak beste."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Aplikazio bat partekatzen, grabatzen edo igortzen ari zarenean, aplikazio horretan ikusgai dagoen edo bertan erreproduzitzen ari den guztia atzi dezake Android-ek. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin, argazkiekin, audioekin eta bideoekin, besteak beste."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Hasi"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Partekatzea pausatu egiten da aplikazioz aldatzean"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Partekatu aplikazioa"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Itzuli"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Aplikazioz aldatzeko aukera"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"IKT saileko administratzaileak blokeatu du"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Pantaila-kapturak egiteko aukera desgaituta dago, gailu-gidalerroei jarraikiz"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Garbitu guztiak"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Autoritate ziurtagiri-emaile bat dago instalatuta gailuan. Baliteke sareko trafiko segurua gainbegiratzea edo aldatzea."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Administratzaileak sarearen erregistroak aktibatu ditu; horrela, zure gailuko trafikoa gainbegira dezake."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Administratzaileak sarearen erregistroak aktibatu ditu; horrela, zure laneko profileko trafikoa gainbegira dezake, baina ez zure profil pertsonalekoa."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Gailua <xliff:g id="VPN_APP">%1$s</xliff:g> bidez dago konektatuta Internetera. IKT saileko administratzaileak laneko aplikazioen bidez egiten dituzun sareko jarduerak (mezu elektronikoak eta arakatze-datuak barne) ikusi ahalko ditu."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Gailua <xliff:g id="VPN_APP">%1$s</xliff:g> bidez dago konektatuta Internetera. VPN hornitzaileak sareko jarduerak (mezu elektronikoak eta arakatze-datuak barne) ikusi ahalko ditu."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Gailua <xliff:g id="VPN_APP">%1$s</xliff:g> bidez dago konektatuta Internetera. IKT saileko administratzaileak laneko aplikazioen bidez egiten dituzun sareko jarduerak (mezu elektronikoak eta arakatze-datuak barne) ikusi ahalko ditu."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Gailua <xliff:g id="VPN_APP_0">%1$s</xliff:g> eta <xliff:g id="VPN_APP_1">%2$s</xliff:g> bidez dago konektatuta Internetera. IKT saileko administratzaileak laneko aplikazioen bidez egiten dituzun sareko jarduerak (mezu elektronikoak eta arakatze-datuak barne) ikusi ahalko ditu."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Laneko aplikazioak <xliff:g id="VPN_APP">%1$s</xliff:g> bidez daude konektatuta Internetera. IKT saileko administratzaileak eta VPNaren hornitzaileak laneko aplikazioen bidez egiten dituzun sareko jarduerak (mezu elektronikoak eta arakatze-datuak barne) ikusi ahalko dituzte."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Aplikazio pertsonalak <xliff:g id="VPN_APP">%1$s</xliff:g> bidez daude konektatuta Internetera. IKT saileko administratzaileak sareko jarduerak (mezu elektronikoak eta arakatze-datuak barne) ikusi ahalko ditu."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"desgaitu"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Audioa eta dardara"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Ezarpenak"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Bolumena jaitsi da entzumena babesteko"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Gomendatutakoa baino denbora gehiagoan eduki da bolumena ozen"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Bolumena maila seguruago batera jaitsi da"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Entzungailuen bolumena gomendatutako denboran baino gehiagoan eduki da ozen"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Entzungailuen bolumenak aste honetarako muga segurua gainditu du"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Jarraitu entzuten"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Jaitsi bolumena"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Aplikazioa ainguratuta dago"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Horrela, ikusgai egongo da aingura kendu arte. Aingura kentzeko, eduki sakatuta \"Atzera\" eta \"Ikuspegi orokorra\" botoiak."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Horrela, ikusgai egongo da aingura kendu arte. Aingura kentzeko, eduki sakatuta Atzera eta Hasiera botoiak."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Itzaltzeko menua"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g> orria"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Pantaila blokeatua"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Beroegi egoteagatik itzali da"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Ohi bezala ari da funtzionatzen telefonoa orain.\nInformazio gehiago lortzeko, sakatu hau."</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefonoa gehiegi berotu da, eta itzali egin da tenperatura jaisteko. Orain, ohiko moduan dabil.\n\nBerotzearen zergati posibleak:\n	• Baliabide asko behar dituzten aplikazioak erabiltzea (adib., bideojokoak, bideoak edo nabigazio-aplikazioak).\n	• Fitxategi handiak deskargatu edo kargatzea.\n	• Telefonoa giro beroetan erabiltzea."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Ikusi zaintzeko urratsak"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Berotzen ari da telefonoa"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Eginbide batzuk ezingo dira erabili telefonoa hoztu arte.\nInformazio gehiago lortzeko, sakatu hau."</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Telefonoa automatikoki saiatuko da hozten. Hoztu bitartean, telefonoa erabiltzen jarrai dezakezu, baina mantsoago funtziona lezake.\n\nTelefonoaren tenperatura jaitsi bezain laster, ohi bezala funtzionatzen jarraituko du."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Ikusi zaintzeko urratsak"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Deskonektatu gailua"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Gailua berotzen ari da kargatzeko atakaren inguruan. Kargagailu edo USB bidezko osagarri batera konektatuta badago, deskonekta ezazu kontuz, kablea ere beroa egongo baita agian."</string>
@@ -824,7 +848,7 @@
     <string name="privacy_type_media_projection" msgid="8136723828804251547">"pantaila-grabaketa"</string>
     <string name="music_controls_no_title" msgid="4166497066552290938">"Ez du izenik"</string>
     <string name="inattentive_sleep_warning_title" msgid="3891371591713990373">"Egonean"</string>
-    <string name="font_scaling_dialog_title" msgid="6273107303850248375">"Letraren tamaina"</string>
+    <string name="font_scaling_dialog_title" msgid="6273107303850248375">"Letra-tamaina"</string>
     <string name="font_scaling_smaller" msgid="1012032217622008232">"Txikitu"</string>
     <string name="font_scaling_larger" msgid="5476242157436806760">"Handitu"</string>
     <string name="magnification_window_title" msgid="4863914360847258333">"Lupa-leihoa"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Handitu pantaila osoa"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Handitu pantailaren zati bat"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Ireki luparen ezarpenak"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Itxi luparen ezarpenak"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Arrastatu izkina bat tamaina aldatzeko"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Eman diagonalki gora eta behera egiteko aukera erabiltzeko baimena"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Aldatu tamaina"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Erabilerraztasun-eginbideak irekitzeko, sakatu hau. Ezarpenetan pertsonalizatu edo ordez dezakezu botoia.\n\n"<annotation id="link">"Ikusi ezarpenak"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Eraman botoia ertzera aldi baterako ezkutatzeko"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Desegin"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> eginbidearen lasterbidea kendu da"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Kendu da lasterbidea (<xliff:g id="FEATURE_NAME">%s</xliff:g>)"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# lasterbide kendu da}other{# lasterbide kendu dira}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Eraman goialdera, ezkerretara"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Eraman goialdera, eskuinetara"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"kendu gogokoetatik"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Eraman <xliff:g id="NUMBER">%d</xliff:g>garren postura"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrolatzeko aukerak"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Aukeratu bizkor atzitu nahi dituzun gailuak kontrolatzeko aukerak"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Kontrolatzeko aukerak antolatzeko, eduki itzazu sakatuta, eta arrastatu"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Kendu dira kontrolatzeko aukera guztiak"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Ez dira gorde aldaketak"</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Saiatu beste PIN batekin"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Berretsi <xliff:g id="DEVICE">%s</xliff:g> gailuaren aldaketa"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Pasatu hatza aukera gehiago ikusteko"</string>
+    <string name="retry_face" msgid="416380073082560186">"Saiatu berriro aurpegi bidez autentifikatzen"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Gomendioak kargatzen"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Multimedia-edukia"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioaren multimedia kontr. aukerak ezkutatu?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"Multimedia kontrolatzeko aukerak (<xliff:g id="APP_NAME">%1$s</xliff:g>) ezkutatu?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"Ezin da ezkutatu multimedia-saioa."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Ezkutatu"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Berrekin"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Ezarpenak"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>) ari da erreproduzitzen <xliff:g id="APP_LABEL">%3$s</xliff:g> bidez"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> abian da"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Erreproduzitu"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausatu"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Aurrekoa"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"%% <xliff:g id="PERCENTAGE">%1$d</xliff:g>"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Bozgorailuak eta pantailak"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Iradokitako gailuak"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Gelditu partekatutako saioa multimedia-edukia beste gailu batera eramateko"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Gelditu"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Nola funtzionatzen dute iragarpenek?"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Iragarri"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Bluetooth bidezko gailu bateragarriak dituzten inguruko pertsonek iragartzen ari zaren multimedia-edukia entzun dezakete"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Ezin da gorde. Saiatu berriro."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Ezin da gorde."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Erabili lau karaktere gutxienez"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Erabili 16 karaktere baino gutxiago"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Erabili <xliff:g id="LENGTH">%1$d</xliff:g> karaktere baino gutxiago"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Konpilazio-zenbakia"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Kopiatu da konpilazio-zenbakia arbelean."</string>
     <string name="basic_status" msgid="2315371112182658176">"Elkarrizketa irekia"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Arazo bat izan da bateria-neurgailua irakurtzean"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Informazio gehiago lortzeko, sakatu hau"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Ez da ezarri alarmarik"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"erabili pantailaren blokeoa"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Hatz-marken sentsorea"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autentifikatu"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"sartu gailuan"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Laguntzailea entzuten ari da"</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="note_task_button_label" msgid="8718616095800343136">"Oharrak idaztea"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Oharrak idaztea"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Oharrak idaztea, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Lortu informazio gehiago"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Lortu informazio gehiago <xliff:g id="URL">%s</xliff:g> helbidean"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Ireki <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Aplikazioa konfiguratuta dago."</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Diru-zorroa zerbitzuan gutxienez txartel bat gehitu da."</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Kamera-aplikazio bat instalatu da."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Aplikazioa konfiguratuta dago."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Gutxienez gailu bat erabilgarri dago."</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Diru-zorroa aplikazioa lasterbide gisa gehitzeko, ziurtatu aplikazioa instalatuta dagoela."</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Diru-zorroa aplikazioa lasterbide gisa gehitzeko, ziurtatu gutxienez txartel bat gehitu dela."</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR kodeen eskanerra lasterbide gisa gehitzeko, ziurtatu kameraren aplikazioa instalatuta dagoela."</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home aplikazioa lasterbide gisa gehitzeko, ziurtatu aplikazioa instalatuta dagoela."</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Gutxienez gailu bat erabilgarri dago."</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Oharrak idazteko lasterbidea erabiltzeko, hautatu oharretarako aplikazio lehenetsia."</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Hautatu aplikazioa"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Eduki sakatuta lasterbidea"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Utzi"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Aldatu pantaila batetik bestera"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Konektatu arkatza kargagailu batera"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Arkatzak bateria gutxi du"</string>
     <string name="video_camera" msgid="7654002575156149298">"Bideokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Ezin duzu deitu profil honetatik"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Deiak laneko profiletik soilik egiteko baimena ematen dizute laneko gidalerroek"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Ezin duzu deitu aplikazio pertsonaletatik"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Laneko aplikazioetatik soilik deitzeko baimena ematen du zure erakundeak"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Aldatu laneko profilera"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Itxi"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instalatu telefonoetarako aplikazio bat (lanerako)"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Utzi"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Pertsonalizatu pantaila blokeatua"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Desblokeatu eta pertsonalizatu pantaila blokeatua"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wifi-konexioa ez dago erabilgarri"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera blokeatuta dago"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera eta mikrofonoa blokeatuta daude"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofonoa blokeatuta dago"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Lehentasun modua aktibatuta dago"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Laguntzailea zerbitzuak arreta jarrita dauka"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Ezarri oharren aplikazio lehenetsia ezarpenetan"</string>
+    <string name="install_app" msgid="5066668100199613936">"Instalatu aplikazioa"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofonoa eta kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Aplikazioen azken erabilera"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Ikusi azkenaldiko sarbidea"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Eginda"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Zabaldu eta erakutsi aukerak"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Tolestu"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Itxi aplikazioa"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Itxi da <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Kudeatu zerbitzua"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Kudeatu sarbidea"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Telefono-dei batek darabil"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Telefono-dei batean erabili da duela gutxi"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak darabil"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak erabili du duela gutxi"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak darabil (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) aplikazioak erabili du duela gutxi"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak darabil (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) aplikazioak erabili du duela gutxi"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-eu/strings_tv.xml b/packages/SystemUI/res/values-eu/strings_tv.xml
deleted file mode 100644
index de5249b..0000000
--- a/packages/SystemUI/res/values-eu/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN sarera konektatuta dago"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN ez dago sarera konektatuta"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> bidez"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Jakinarazpenak"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Ez dago jakinarazpenik"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofonoa grabatzen ari da"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera grabatzen ari da"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera eta mikrofonoa grabatzen ari dira"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofonoak grabatzeari utzi dio"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kamerak grabatzeari utzi dio"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kamerak eta mikrofonoak grabatzeari utzi diote"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Hasi da pantailaren grabaketa"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Gelditu da pantailaren grabaketa"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index f12ca75..33bd9f4 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"‏فعال کردن USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"بیشتر بدانید"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"نماگرفت"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"‏Extend Unlock غیرفعال شده است"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"«تمدید حالت باز» غیرفعال شده است"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"تصویری ارسال کرد"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"درحال ذخیره نماگرفت…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"درحال ذخیره کردن نماگرفت در نمایه کاری…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"‫«<xliff:g id="APPNAME">%1$s</xliff:g>» این نماگرفت را تشخیص داد."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> و سایر برنامه‌های باز این نماگرفت را تشخیص دادند."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"افزودن به یادداشت"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"ضبط‌کننده صفحه‌نمایش"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"ضبط‌کن صفحه‌نمایش"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"درحال پردازش ضبط صفحه‌نمایش"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"اعلان درحال انجام برای جلسه ضبط صفحه‌نمایش"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"ضبط شروع شود؟"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"‏هنگام ضبط، «سیستم Android» می‌تواند هر اطلاعات حساسی را که روی صفحه‌نمایش شما نشان داده می‌شود یا روی دستگاه شما پخش می‌شود ضبط کند. این شامل گذرواژه‌ها، اطلاعات پرداخت، عکس‌ها، پیام‌ها، و صدا می‌شود."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"ضبط کل صفحه"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"ضبط یک برنامه"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"‏درحین ضبط کردن، Android به همه محتوایی که در صفحه‌تان نمایان است یا در دستگاهتان پخش می‌شود دسترسی دارد. بنابراین مراقب گذرواژه‌ها، جزئیات پرداخت، پیام‌ها، یا دیگر اطلاعات حساس باشید."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"‏درحین ضبط برنامه، Android به همه محتوایی که در آن برنامه نمایان است یا پخش می‌شود دسترسی دارد. بنابراین مراقب گذرواژه‌ها، جزئیات پرداخت، پیام‌ها، یا دیگر اطلاعات حساس باشید."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"شروع ضبط"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"ضبط شروع شود؟"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"‏درحین ضبط کردن، Android به همه محتوایی که در صفحه‌تان نمایان است یا در دستگاهتان پخش می‌شود دسترسی دارد. درنتیجه مراقب چیزهایی مثل گذرواژه‌ها، جزئیات پرداخت، پیام‌ها، عکس‌ها، و صدا و تصویر باشید."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"‏درحین ضبط کردن برنامه، Android به همه محتوایی که در آن برنامه نمایان است یا پخش می‌شود دسترسی دارد. درنتیجه مراقب چیزهایی مثل گذرواژه‌ها، جزئیات پرداخت، پیام‌ها، عکس‌ها، و صدا و تصویر باشید."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"شروع ضبط"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"ضبط صدا"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"صدای دریافتی از دستگاه"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"صدای دریافتی از دستگاه، مثل موسیقی، تماس، و آهنگ زنگ"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"میکروفن"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"صدا و میکروفون دستگاه"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"شروع"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"شروع"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"درحال ضبط صفحه‌نمایش"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"درحال ضبط صفحه‌نمایش و صدا"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"نمایش قسمت‌های لمس‌شده روی صفحه‌نمایش"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"هم‌رسانی"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"قطعه ضبط‌شده از صفحه‌نمایش ذخیره شد"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"برای مشاهده ضربه بزنید"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"خطا در حذف فایل ضبط صفحه‌نمایش"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"خطا در ذخیره‌سازی ضبط صفحه‌نمایش"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"خطا هنگام شروع ضبط صفحه‌نمایش"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"درحال مشاهده در حالت تمام‌صفحه"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"برای خروج، از بالای صفحه تند به‌پایین بکشید."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"متوجه‌ام"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"برگشت"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"صفحهٔ اصلی"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"منو"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"چهره اصالت‌سنجی شد"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"تأیید شد"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"برای تکمیل، روی تأیید ضربه بزنید"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"قفلْ با چهره باز شد. برای ادامه، نماد قفل‌گشایی را فشار دهید."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"قفل با چهره باز شد"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"قفلْ با چهره باز شد. برای ادامه، فشار دهید."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"چهره شناسایی شد. برای ادامه، فشار دهید."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"چهره شناسایی شد. برای ادامه، نماد قفل‌گشایی را فشار دهید."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"راستی‌آزمایی‌شده"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"لغو اصالت‌سنجی"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"استفاده از پین"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"استفاده از الگو"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"استفاده از گذرواژه"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"اگر در تلاش بعدی الگوی نادرستی وارد کنید، داده‌های نمایه کاری شما و داده‌های آن حذف خواهد شد."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"اگر در تلاش بعدی‌ پین نادرستی وارد کنید، نمایه کاری شما و داده‌های آن حذف خواهند شد."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"اگر در تلاش بعدی‌ گذرواژه نادرستی وارد کنید، نمایه کاری شما و داده‌های آن حذف خواهند شد."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"راه‌اندازی"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"اکنون نه"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"این کار برای بهبود امنیت و عملکرد لازم است"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"راه‌اندازی مجدد «قفل‌گشایی با اثر انگشت»"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"قفل‌گشایی با اثر انگشت"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"راه‌اندازی «قفل‌گشایی با اثر انگشت»"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"برای راه‌اندازی مجدد «قفل‌گشایی با اثر انگشت»، تصاویر و مدل‌های فعلی اثر انگشتتان حذف خواهد شد.\n\nبعداز حذف آن‌ها، اگر بخواهید برای قفل‌گشایی تلفن یا تأیید هویت از اثر انگشتتان استفاده کنید، باید «قفل‌گشایی با اثر انگشت» را دوباره راه‌اندازی کنید."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"برای راه‌اندازی مجدد «قفل‌گشایی با اثر انگشت»، تصاویر و مدل‌های فعلی اثر انگشتتان حذف خواهد شد.\n\nبعداز حذف آن‌ها، اگر بخواهید برای قفل‌گشایی تلفن یا تأیید هویت از اثر انگشتتان استفاده کنید، باید «قفل‌گشایی با اثر انگشت» را دوباره راه‌اندازی کنید."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"«قفل‌گشایی با اثر انگشت» راه‌اندازی نشد. برای امتحان مجدد، به «تنظیمات» بروید."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"راه‌اندازی مجدد «قفل‌گشایی با چهره»"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"قفل‌گشایی با چهره"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"راه‌اندازی «قفل‌گشایی با چهره»"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"برای راه‌اندازی مجدد «قفل‌گشایی با چهره»، مدل چهره فعلی‌تان حذف خواهد شد.\n\nاگر بخواهید برای قفل‌گشایی تلفن از چهره‌تان استفاده کنید، باید این ویژگی را دوباره راه‌اندازی کنید."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"«قفل‌گشایی با چهره» راه‌اندازی نشد. برای امتحان مجدد، به «تنظیمات» بروید."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"حسگر اثر انگشت را لمس کنید"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"برای ادامه، نماد قفل‌گشایی را فشار دهید"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"چهره شناسایی نشد. درعوض از اثر انگشت استفاده کنید."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"صوت"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"هدست"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ورودی"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"سمعک"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"سمعک"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"روشن کردن…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"چرخش خودکار"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"چرخش خودکار صفحه‌نمایش"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"قفل با چهره باز شد"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"چهره شناسایی شد"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"برای امتحان مجدد، انگشتتان را تند به‌بالا بکشید"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"برای امتحان دوباره «قفل‌گشایی با چهره»، تند به‌بالا بکشید"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"‏برای استفاده از NFC، قفل را باز کنید"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"این دستگاه به سازمان شما تعلق دارد"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"این دستگاه به <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> تعلق دارد"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"کاربر حذف شود؟"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"همه برنامه‌ها و داده‌های این کاربر حذف می‌شود."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"حذف"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> به همه اطلاعاتی که روی صفحه‌نمایش قابل‌مشاهد است و هنگام ضبط کردن یا پخش محتوا از دستگاهتان پخش می‌شود دسترسی خواهد داشت. این شامل اطلاعاتی مانند گذرواژه‌ها، جزئیات پرداخت، عکس‌ها، پیام‌ها، و صداهایی که پخش می‌کنید می‌شود."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"سرویس ارائه‌دهنده این عملکرد به همه اطلاعاتی که روی صفحه‌نمایش قابل‌مشاهد است و هنگام ضبط کردن یا پخش محتوا از دستگاهتان پخش می‌شود دسترسی خواهد داشت. این شامل اطلاعاتی مانند گذرواژه‌ها، جزئیات پرداخت، عکس‌ها، پیام‌ها، و صداهایی که پخش می‌کنید می‌شود."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"ضبط یا پخش محتوا شروع شود؟"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"ضبط یا پخش محتوا با <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> شروع شود؟"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"به <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> اجازه هم‌رسانی یا ضبط داده شود؟"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"کل صفحه"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"یک برنامه"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"وقتی درحال هم‌رسانی، ضبط، یا پخش محتوا هستید، <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> به همه محتوایی که در صفحه‌تان نمایان است یا در دستگاهتان پخش می‌شود دسترسی دارد. بنابراین مراقب گذرواژه‌ها، جزئیات پرداخت، پیام‌ها، یا دیگر اطلاعات حساس باشید."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"وقتی درحال هم‌رسانی، ضبط، یا پخش محتوای برنامه‌ای هستید، <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> به همه محتوایی که در آن برنامه نمایان است یا پخش می‌شود دسترسی دارد. بنابراین مراقب گذرواژه‌ها، جزئیات پرداخت، پیام‌ها، یا دیگر اطلاعات حساس باشید."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"ادامه"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"هم‌رسانی یا ضبط برنامه"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"به این برنامه اجازه هم‌رسانی یا ضبط می‌دهید؟"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"وقتی درحال هم‌رسانی، ضبط، یا پخش محتوا هستید، این برنامه به همه محتوایی که در صفحه‌تان نمایان است یا در دستگاهتان پخش می‌شود دسترسی دارد. بنابراین مراقب گذرواژه‌ها، جزئیات پرداخت، پیام‌ها، یا دیگر اطلاعات حساس باشید."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"وقتی درحال هم‌رسانی، ضبط، یا پخش محتوای برنامه‌ای هستید، این برنامه به همه محتوایی که در آن برنامه نمایان است یا پخش می‌شود دسترسی دارد. بنابراین مراقب گذرواژه‌ها، جزئیات پرداخت، پیام‌ها، یا دیگر اطلاعات حساس باشید."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> به همه اطلاعاتی که روی صفحه‌نمایش قابل‌مشاهد است و هنگام ضبط کردن یا پخش محتوا از دستگاهتان پخش می‌شود دسترسی خواهد داشت. این شامل اطلاعاتی مانند گذرواژه‌ها، جزئیات پرداخت، عکس‌ها، پیام‌ها، و صداهایی که پخش می‌کنید می‌شود."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"ضبط یا پخش محتوا شروع شود؟"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"سرویس ارائه‌دهنده این عملکرد به همه اطلاعاتی که روی صفحه‌نمایش قابل‌مشاهد است و هنگام ضبط کردن یا پخش محتوا از دستگاهتان پخش می‌شود دسترسی خواهد داشت. این شامل اطلاعاتی مانند گذرواژه‌ها، جزئیات پرداخت، عکس‌ها، پیام‌ها، و صداهایی که پخش می‌کنید می‌شود."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"کل صفحه"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"یک برنامه"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"هم‌رسانی یا ضبط برنامه"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"ضبط یا پخش محتوا با <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> شروع شود؟"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"وقتی درحال هم‌رسانی، ضبط، یا پخش محتوا هستید، <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> به همه محتوایی که در صفحه‌تان نمایان است یا در دستگاهتان پخش می‌شود دسترسی دارد. درنتیجه مراقب چیزهایی مثل گذرواژه‌ها، جزئیات پرداخت، پیام‌ها، عکس‌ها، و صدا و تصویر باشید."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"وقتی درحال هم‌رسانی، ضبط، یا پخش محتوای برنامه‌ای هستید، <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> به همه محتوایی که در آن برنامه نمایان است یا پخش می‌شود دسترسی دارد. درنتیجه مراقب چیزهایی مثل گذرواژه‌ها، جزئیات پرداخت، پیام‌ها، عکس‌ها، و صدا و تصویر باشید."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"شروع"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"پخش محتوا شروع شود؟"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"‏وقتی محتوا پخش می‌کنید، Android به همه محتوایی که در صفحه‌تان نمایان است یا در دستگاهتان پخش می‌شود دسترسی دارد. درنتیجه مراقب چیزهایی مثل گذرواژه‌ها، جزئیات پرداخت، پیام‌ها، عکس‌ها، و صدا و تصویر باشید."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"‏وقتی محتوای برنامه‌ای را پخش می‌کنید، Android به همه محتوایی که در آن برنامه نمایان است یا پخش می‌شود دسترسی دارد. درنتیجه مراقب چیزهایی مثل گذرواژه‌ها، جزئیات پرداخت، پیام‌ها، عکس‌ها، و صدا و تصویر باشید."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"شروع پخش محتوا"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"هم‌رسانی شروع شود؟"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"‏وقتی درحال هم‌رسانی، ضبط، یا پخش محتوا هستید، Android به همه محتوایی که در صفحه‌تان نمایان است یا در دستگاهتان پخش می‌شود دسترسی دارد. درنتیجه مراقب چیزهایی مثل گذرواژه‌ها، جزئیات پرداخت، پیام‌ها، عکس‌ها، و صدا و تصویر باشید."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"‏وقتی درحال هم‌رسانی، ضبط، یا پخش محتوای برنامه‌ای هستید، Android به همه محتوایی که در آن برنامه نمایان است یا پخش می‌شود دسترسی دارد. درنتیجه مراقب چیزهایی مثل گذرواژه‌ها، جزئیات پرداخت، پیام‌ها، عکس‌ها، و صدا و تصویر باشید."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"شروع"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"وقتی برنامه‌ها را تغییر می‌دهید، هم‌رسانی متوقف می‌شود"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"درعوض هم‌رسانی این برنامه"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"تغییر به حالت قبل"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"تغییر برنامه"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"سرپرست فناوری اطلاعات آن را مسدود کرده است"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"«ضبط صفحه‌نمایش» به‌دلیل خط‌مشی دستگاه غیرفعال است"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"پاک کردن همه موارد"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"مرجع گواهینامه‌ای در این دستگاه نصب شده است. ممکن است ترافیک امن شبکه شما پایش یا تغییر داده شود."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"سرپرست سیستم شما گزارش‌گیری از شبکه را (که ترافیک دستگاه شما را پایش می‌کند) روشن کرده است."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"سرپرست شما گزارش‌گیری شبکه را که بر ترافیک نمایه کاری‌تان نظارت می‌کند، اما بر ترافیک نمایه شخصی‌تان نظارت نمی‌کند روشن کرده است."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"این دستگاه ازطریق <xliff:g id="VPN_APP">%1$s</xliff:g> به اینترنت متصل شده است. سرپرست فناوری اطلاعات شما می‌تواند فعالیت شبکه شما را (ازجمله ایمیل‌ها و داده‌های مرور) ببیند."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"‏این دستگاه ازطریق <xliff:g id="VPN_APP">%1$s</xliff:g> به اینترنت متصل شده است. ارائه‌دهنده VPN می‌تواند فعالیت شبکه شما شامل ایمیل‌ها و داده‌های مرور را ببیند."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"این دستگاه ازطریق <xliff:g id="VPN_APP">%1$s</xliff:g> به اینترنت متصل شده است. سرپرست فناوری اطلاعات می‌تواند فعالیت شبکه شما شامل ایمیل‌ها و داده‌های مرور را ببیند."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"این دستگاه ازطریق <xliff:g id="VPN_APP_0">%1$s</xliff:g> و <xliff:g id="VPN_APP_1">%2$s</xliff:g> به اینترنت متصل شده است. سرپرست فناوری اطلاعات شما می‌تواند فعالیت شبکه شما را (ازجمله ایمیل‌ها و داده‌های مرور) ببیند."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"‏برنامه‌های کاری‌تان ازطریق <xliff:g id="VPN_APP">%1$s</xliff:g> به اینترنت متصل شده است. ارائه‌دهنده VPN و سرپرست فناوری اطلاعات شما می‌توانند فعالیت شبکه شما در برنامه‌های کاری را (ازجمله ایمیل‌ها و داده‌های مرور) ببینند."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"‏برنامه‌های شخصی‌تان ازطریق <xliff:g id="VPN_APP">%1$s</xliff:g> به اینترنت متصل شده است. ارائه‌دهنده VPN شما می‌تواند فعالیت شبکه شما را (ازجمله ایمیل‌ها و داده‌های مرور) ببیند."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"غیرفعال کردن"</string>
     <string name="sound_settings" msgid="8874581353127418308">"صدا و لرزش"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"تنظیمات"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"به میزان صدای ایمن‌تر کاهش یافت"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"صدا برای مدتی طولانی‌تر از حد توصیه‌شده بلند بوده است"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"صدا به سطح ایمن‌تر کاهش یافت"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"صدای هدفون برای مدتی طولانی‌تر از حد توصیه‌شده بلند بوده است"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"صدای هدفون از حد ایمن برای این هفته فراتر رفته است"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"ادامه گوش کردن"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"کم کردن صدا"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"برنامه سنجاق شده است"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"تا زمانی که سنجاق را برندارید، در نما نگه‌داشته می‌شود. برای برداشتن سنجاق، «برگشت» و «نمای کلی» را لمس کنید و نگه‌دارید."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"تا برداشتن سنجاق، در نما نگه‌داشته می‌شود. برای برداشتن سنجاق، «برگشت» و «صفحه اصلی» را لمس کنید و نگه‌دارید."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"منوی روشن/خاموش"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"صفحه <xliff:g id="ID_1">%1$d</xliff:g> از <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"صفحه قفل"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"تلفن به علت گرم شدن خاموش شد"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"اکنون عملکرد تلفنتان به حالت عادی برگشته است.\nبرای اطلاعات بیشتر ضربه بزنید"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"تلفنتان خیلی گرم شده بود، بنابراین خاموش شد تا خنک شود. اکنون تلفنتان عملکرد معمولش را دارد.\n\nتلفنتان خیلی گرم می‌شود، اگر:\n	• از برنامه‌های نیازمند پردازش زیاد (مانند بازی، برنامه‌های ویدیویی یا پیمایشی) استفاده کنید\n	• فایل‌های بزرگ بارگیری یا بارگذاری کنید\n	• در دماهای بالا از تلفنتان استفاده کنید"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"دیدن اقدامات محافظتی"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"تلفن درحال گرم شدن است"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"وقتی تلفن درحال خنک شدن است، بعضی از ویژگی‌ها محدود می‌شوند.\nبرای اطلاعات بیشتر ضربه بزنید"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"تلفنتان به‌طور خودکار سعی می‌کند خنک شود. همچنان می‌توانید از تلفنتان استفاده کنید، اما ممکن است کندتر عمل کند.\n\nوقتی تلفن خنک شد، عملکرد عادی‌اش از سرگرفته می‌شود."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"دیدن اقدامات محافظتی"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"دستگاه را جدا کنید"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"‏دستگاهتان کنار درگاه شارژ گرم شده است. اگر دستگاهتان به شارژر یا لوازم جانبی USB متصل است، آن را جدا کنید و مراقب باشید چون ممکن است کابل هم گرم باشد."</string>
@@ -796,7 +820,7 @@
     <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"وضعیت داده تلفن همراه به‌طور خودکار براساس دردسترس بودن تغییر نخواهد کرد"</string>
     <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"نه متشکرم"</string>
     <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"بله، عوض شود"</string>
-    <string name="touch_filtered_warning" msgid="8119511393338714836">"چون برنامه‌ای درحال ایجاد تداخل در درخواست مجوز است، «تنظیمات» نمی‌تواند پاسخ شما را تأیید کند."</string>
+    <string name="touch_filtered_warning" msgid="8119511393338714836">"چون برنامه‌ای درحال ایجاد تداخل در درخواست اجازه است، «تنظیمات» نمی‌تواند پاسخ شما را تأیید کند."</string>
     <string name="slice_permission_title" msgid="3262615140094151017">"به <xliff:g id="APP_0">%1$s</xliff:g> اجازه داده شود تکه‌های <xliff:g id="APP_2">%2$s</xliff:g> را نشان دهد؟"</string>
     <string name="slice_permission_text_1" msgid="6675965177075443714">"- می‌تواند اطلاعات <xliff:g id="APP">%1$s</xliff:g> را بخواند"</string>
     <string name="slice_permission_text_2" msgid="6758906940360746983">"- می‌تواند در <xliff:g id="APP">%1$s</xliff:g> اقدام انجام دهد"</string>
@@ -839,8 +863,9 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"درشت‌نمایی تمام‌صفحه"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"درشت‌نمایی بخشی از صفحه"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"باز کردن تنظیمات درشت‌نمایی"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"بستن تنظیمات درشت‌نمایی"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"برای تغییر اندازه، گوشه را بکشید"</string>
-    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"مجاز کردن پیمایش قطری"</string>
+    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"اجازه دادن برای پیمایش قطری"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"تغییر اندازه"</string>
     <string name="accessibility_change_magnification_type" msgid="666000085077432421">"تغییر نوع درشت‌نمایی"</string>
     <string name="accessibility_magnification_end_resizing" msgid="4881690585800302628">"پایان تغییر اندازه"</string>
@@ -879,14 +904,13 @@
     <string name="controls_panel_authorization" msgid="7045551688535104194">"<xliff:g id="APPNAME">%s</xliff:g> می‌تواند انتخاب کند چه کنترل‌ها و محتوایی اینجا نشان داده شود."</string>
     <string name="controls_panel_remove_app_authorization" msgid="5920442084735364674">"کنترل‌های <xliff:g id="APPNAME">%s</xliff:g> برداشته شود؟"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"به موارد دلخواه اضافه شد"</string>
-    <string name="accessibility_control_favorite_position" msgid="54220258048929221">"اضافه‌شده به موارد دلخواه، جایگاه <xliff:g id="NUMBER">%d</xliff:g>"</string>
+    <string name="accessibility_control_favorite_position" msgid="54220258048929221">"به «موارد دلخواه» اضافه شد، جایگاه <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="accessibility_control_not_favorite" msgid="1291760269563092359">"حذف‌شده از موارد دلخواه"</string>
     <string name="accessibility_control_change_favorite" msgid="2943178027582253261">"افزودن به موارد دلخواه"</string>
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"حذف کردن از موارد دلخواه"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"انتقال به موقعیت <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"کنترل‌ها"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"کنترل‌های دستگاه را برای دسترسی سریع انتخاب کنید"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"برای تغییر دادن ترتیب کنترل‌ها، آن‌ها را نگه دارید و بکشید"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"همه کنترل‌ها برداشته شده‌اند"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"تغییرات ذخیره نشد"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"پین دیگری را امتحان کنید"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"تأیید تغییر مربوط به <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"برای دیدن موارد بیشتر، تند بکشید"</string>
+    <string name="retry_face" msgid="416380073082560186">"امتحان مجدد اصالت‌سنجی با چهره"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"درحال بار کردن توصیه‌ها"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"رسانه"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"این کنترل رسانه برای <xliff:g id="APP_NAME">%1$s</xliff:g> پنهان شود؟"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"تنظیمات"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> از <xliff:g id="ARTIST_NAME">%2$s</xliff:g> ازطریق <xliff:g id="APP_LABEL">%3$s</xliff:g> پخش می‌شود"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> از <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"‫<xliff:g id="APP_NAME">%1$s</xliff:g> درحال اجرا است"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"پخش"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"توقف موقت"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"آهنگ قبلی"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"بلندگوها و نمایشگرها"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"دستگاه‌های پیشنهادی"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"جلسه مشترک برای انتقال رسانه به دستگاهی دیگر متوقف می‌شود"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"توقف"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"همه‌فرتستی چطور کار می‌کند"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"همه‌فرستی"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"‏افرادی که در اطرافتان دستگاه‌های Bluetooth سازگار دارند می‌توانند به رسانه‌ای که همه‌فرستی می‌کنید گوش کنند"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"ذخیره نشد. دوباره امتحان کنید."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"ذخیره نشد."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"حداقل از ۴ نویسه استفاده کنید"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"از کمتر از ۱۶ نویسه استفاده کنید"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"از کمتر از <xliff:g id="LENGTH">%1$d</xliff:g> نویسه استفاده کنید"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"شماره ساخت"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"شماره ساخت در بریده‌دان کپی شد."</string>
     <string name="basic_status" msgid="2315371112182658176">"باز کردن مکالمه"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"مشکلی در خواندن میزان باتری وجود دارد"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"برای اطلاعات بیشتر ضربه بزنید"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"هشداری تنظیم نشده"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"وارد کردن قفل صفحه"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"حسگر اثرانگشت"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"اصالت‌سنجی کردن"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"وارد شدن به دستگاه"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"«دستیار» درحال گوش کردن است"</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="note_task_button_label" msgid="8718616095800343136">"یادداشت‌برداری"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"یادداشت‌برداری"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"یادداشت‌برداری، <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"بیشتر بدانید"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"در <xliff:g id="URL">%s</xliff:g> اطلاعات بیشتری دریافت کنید"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"باز کردن <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• برنامه راه‌اندازی شده باشد"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• حداقل یک کارت به «کیف پول» اضافه شده باشد"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• برنامه دوربین نصب شده باشد"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• برنامه راه‌اندازی شده باشد"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• حداقل یک دستگاه دردسترس باشد"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"برای افزودن برنامه «کیف پول» به‌عنوان میان‌بر، مطمئن شوید این برنامه نصب شده باشد"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"برای افزودن برنامه «کیف پول» به‌عنوان میان‌بر، مطمئن شوید حداقل یک کارت اضافه شده باشد"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"برای افزودن «کدخوان پاسخ‌سریع» به‌عنوان میان‌بر، مطمئن شوید برنامه دوربین نصب شده باشد"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"‏برای افزودن برنامه Home به‌عنوان میان‌بر، مطمئن شوید این برنامه نصب شده باشد"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• حداقل یک دستگاه دردسترس باشد"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"برای استفاده از میان‌بر یادداشت‌برداری، برنامه یادداشت پیش‌فرضی را انتخاب کنید"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"انتخاب برنامه"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"میان‌بر را لمس کنید و نگه دارید"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"لغو کردن"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"صفحه‌ها اکنون جابه‌جا می‌شود"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"قلم را به شارژر وصل کنید"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"باتری قلم ضعیف است"</string>
     <string name="video_camera" msgid="7654002575156149298">"دوربین ویدیویی"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"نمی‌توانید از این نمایه تماس بگیرید"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"خط‌مشی کاری شما فقط به برقراری تماس ازطریق نمایه کاری اجازه می‌دهد"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"نمی‌توانید ازطریق برنامه‌های شخصی تماس بگیرید"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"سازمانتان به شما اجازه می‌دهد فقط ازطریق برنامه‌های کاری تماس بگیرید"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"رفتن به نمایه کاری"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"بستن"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"نصب برنامه کاری در تلفن"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"لغو"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"سفارشی‌سازی صفحه قفل"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"برای سفارشی‌سازی صفحه قفل، قفل را باز کنید"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"‏Wi-Fi دردسترس نیست"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"دوربین مسدود شده است"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"دوربین و میکروفون مسدود شده‌اند"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"میکروفون مسدود شده است"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"حالت اولویت روشن است"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"توجه «دستیار» روشن است"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"برنامه پیش‌فرض یادداشت را در «تنظیمات» تنظیم کنید"</string>
+    <string name="install_app" msgid="5066668100199613936">"نصب برنامه"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"میکروفون و دوربین"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"استفاده اخیر برنامه‌ها"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"دیدن دسترسی اخیر"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"تمام"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"ازهم بازکردن و نمایش گزینه‌ها"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"جمع کردن"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"بستن این برنامه"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> بسته شد"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"مدیریت سرویس"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"مدیریت دسترسی"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"تماس تلفنی از آن استفاده می‌کند"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"اخیراً تماس تلفنی از آن استفاده کرده است"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> از آن استفاده می‌کند"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"اخیراً <xliff:g id="APP_NAME">%1$s</xliff:g> از آن استفاده کرده است"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> از آن استفاده می‌کند (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"اخیراً <xliff:g id="APP_NAME">%1$s</xliff:g> از آن استفاده کرده است (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> از آن استفاده می‌کند (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"اخیراً <xliff:g id="APP_NAME">%1$s</xliff:g> از آن استفاده کرده است (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fa/strings_tv.xml b/packages/SystemUI/res/values-fa/strings_tv.xml
deleted file mode 100644
index 89f57af..0000000
--- a/packages/SystemUI/res/values-fa/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"‏VPN متصل است"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"‏VPN قطع است"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"ازطریق <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"اعلان‌ها"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"اعلانی ندارید"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"میکروفون درحال ضبط کردن است"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"دوربین درحال ضبط کردن است"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"دوربین و میکروفون درحال ضبط کردن هستند"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"ضبط میکروفون متوقف شد"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"ضبط دوربین متوقف شد"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"ضبط دوربین و میکروفون متوقف شد"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"ضبط صفحه شروع شد"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"ضبط صفحه متوقف شد"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 435cfc9..6da1262 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Ota USB käyttöön"</string>
     <string name="learn_more" msgid="4690632085667273811">"Lue lisää"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Kuvakaappaus"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock poistettu käytöstä"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Lukitsematon tila poistettu käytöstä"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"lähetti kuvan"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Tallennetaan kuvakaappausta..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Kuvakaappausta tallennetaan työprofiiliin…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> havaitsi tämän kuvakaappauksen."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> ja jotkin muut sovellukset havaitsivat tämän kuvakaappauksen."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Lisää muistiinpanoon"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Näytön tallentaja"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Näytön tallentaja"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Näytön tallennusta käsitellään"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Pysyvä ilmoitus näytön tallentamisesta"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Aloitetaanko tallennus?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Tallennuksen aikana Android-järjestelmä voi tallentaa mitä tahansa näytöllä näkyvää tai laitteen toistamaa arkaluontoista tietoa. Näitä tietoja ovat esimerkiksi salasanat, maksutiedot, kuvat, viestit ja audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Tallenna koko näyttö"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Tallenna yhtä sovellusta"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Kun tallennat, Android saa pääsyn kaikkeen näytölläsi näkyvään tai laitteellasi toistettuun sisältöön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä tai muita arkaluontoisia tietoja."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Kun tallennat sovellusta, Android saa pääsyn kaikkeen sovelluksessa näkyvään tai toistettuun sisältöön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä tai muita arkaluontoisia tietoja."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Aloita tallennus"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Aloitetaanko tallennus?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Kun tallennat, Android saa pääsyn kaikkeen näytölläsi näkyvään tai laitteellasi toistettuun sisältöön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä, kuvia, audiota tai videoita."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Kun striimaat sovellusta, Android saa pääsyn kaikkeen sovelluksessa näkyvään tai toistettuun sisältöön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä, audiota tai videoita."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Aloita tallennus"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Tallenna audiota"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Laitteen audio"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Musiikki, puhelut, soittoäänet ja muut äänet laitteesta"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofoni"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Laitteen äänet ja mikrofoni"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Aloita"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Aloita"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Näyttöä tallennetaan"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Tallennetaan näyttöä ja ääniä"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Näytä kosketukset näytöllä"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Jaa"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Näyttötallenne tallennettu"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Napauta näyttääksesi"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Virhe poistettaessa näyttötallennetta"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Virhe näyttötallenteen tallentamisessa"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Virhe näytön tallennuksen aloituksessa"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Koko näytön tilassa"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Sulje palkki pyyhkäisemällä alas ruudun ylälaidasta."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Selvä"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Takaisin"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Aloitus"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Valikko"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Kasvot tunnistettu"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Vahvistettu"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Valitse lopuksi Vahvista"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Avattu kasvojen avulla. Jatka lukituksen avauskuvakkeella."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Avattu kasvojen avulla"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Avattu kasvojen avulla. Jatka painamalla."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Kasvot tunnistettu. Jatka painamalla."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Kasvot tunnistettu. Jatka lukituksen avauskuvakkeella."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Todennettu"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Peruuta todennus"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Käytä PIN-koodia"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Käytä kuviota"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Käytä salasanaa"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Jos annat väärän kuvion seuraavalla yrityskerralla, työprofiilisi ja sen data poistetaan."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Jos annat väärän PIN-koodin seuraavalla yrityskerralla, työprofiilisi ja sen data poistetaan."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Jos annat väärän salasanan seuraavalla yrityskerralla, työprofiilisi ja sen data poistetaan."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Ota käyttöön"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Ei nyt"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Tätä edellytetään tietosuojan ja suorituskyvyn parantamiseksi"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Ota sormenjälkiavaus uudelleen käyttöön"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Sormenjälkiavaus"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Sormenjälkiavauksen käyttöönotto"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Jos haluat ottaa kasvojentunnistusavauksen uudelleen käyttöön, nykyiset sormenjälkien kuvat ja mallit poistetaan.\n\nKun ne on poistettu, sinun on otettava sormenjälkiavaus uudelleen käyttöön, jos haluat käyttää sormenjälkeä puhelimen lukituksen avaamiseen tai henkilöllisyyden vahvistamiseen."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Jos haluat ottaa kasvojentunnistusavauksen uudelleen käyttöön, nykyiset sormenjälkien kuvat ja mallit poistetaan.\n\nKun ne on poistettu, sinun on otettava sormenjälkiavaus uudelleen käyttöön, jos haluat käyttää sormenjälkeä puhelimen lukituksen avaamiseen tai henkilöllisyyden vahvistamiseen."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Sormenjälkiavauksen määritys epäonnistui. Siirry asetuksiin ja yritä uudelleen."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Ota kasvojentunnistusavaus uudelleen käyttöön"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Kasvojentunnistusavaus"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Kasvojentunnistusavauksen käyttöönotto"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Jos haluat ottaa kasvojentunnistusavauksen uudelleen käyttöön, nykyinen kasvomalli poistetaan.\n\nJos haluat avata puhelimen lukituksen kasvoilla, sinun on otettava ominaisuus uudelleen käyttöön."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Kasvojentunnistusavauksen käyttöönotto epäonnistui. Siirry asetuksiin ja yritä uudelleen."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Kosketa sormenjälkitunnistinta"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Jatka lukituksen avauskuvakkeella"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Kasvoja ei voi tunnistaa. Käytä sormenjälkeä."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Ääni"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Syöttölaite"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Kuulolaitteet"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Kuulolaitteet"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Otetaan käyttöön…"</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Avattu kasvojen avulla"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Kasvot tunnistettu"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Yritä uudelleen pyyhkäisemällä ylös"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Pyyhkäise ylös ja kokeile kasvojentunnistusavausta uudelleen"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Avaa lukitus, jotta voit käyttää NFC:tä"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Organisaatiosi omistaa tämän laitteen"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"<xliff:g id="ORGANIZATION_NAME">%s</xliff:g> omistaa tämän laitteen"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> saa pääsyn kaikkiin näytölläsi näkyviin tietoihin ja tietoihin laitteesi toistamasta sisällöstä tallennuksen tai striimauksen aikana. Näitä tietoja ovat esimerkiksi salasanat, maksutiedot, kuvat, viestit ja toistettava audiosisältö."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Ominaisuuden tarjoavalla palvelulla on pääsy kaikkiin näytölläsi näkyviin tietoihin ja tietoihin laitteesi toistamasta sisällöstä tallennuksen tai striimauksen aikana. Näitä tietoja ovat esimerkiksi salasanat, maksutiedot, kuvat, viestit ja toistettava audiosisältö."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Aloitetaanko tallentaminen tai striimaus?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Haluatko, että <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aloittaa tallennuksen tai striimauksen?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Sallitaanko, että <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> jaetaan tai tallennetaan?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Koko näyttö"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Yksittäinen sovellus"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Kun jaat, tallennat tai striimaat, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> saa pääsyn kaikkeen näytölläsi näkyvään tai laitteellasi toistettuun sisältöön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä tai muita arkaluontoisia tietoja."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Kun jaat, tallennat tai striimaat sovellusta, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> saa pääsyn kaikkeen sovelluksessa näkyvään tai toistettuun sisältöön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä tai muita arkaluontoisia tietoja."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Jatka"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Jaa sovellus tai tallenna sen sisältöä"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Sallitko sovelluksen jakaa tai tallentaa sisältöä?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Kun jaat, tallennat tai striimaat sisältöä, sovellus saa pääsyn kaikkeen näytölläsi näkyvään tai laitteellasi toistettuun sisältöön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä tai muita arkaluontoisia tietoja."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Kun jaat, tallennat tai striimaat sovellusta, tämä sovellus saa pääsyn kaikkeen sovelluksessa näkyvään tai toistettuun sisältöön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä tai muita arkaluontoisia tietoja."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> saa pääsyn kaikkiin näytölläsi näkyviin tietoihin ja tietoihin laitteesi toistamasta sisällöstä tallennuksen tai striimauksen aikana. Näitä tietoja ovat esimerkiksi salasanat, maksutiedot, kuvat, viestit ja toistettava audiosisältö."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Aloitetaanko tallentaminen tai striimaus?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Ominaisuuden tarjoavalla palvelulla on pääsy kaikkiin näytölläsi näkyviin tietoihin ja tietoihin laitteesi toistamasta sisällöstä tallennuksen tai striimauksen aikana. Näitä tietoja ovat esimerkiksi salasanat, maksutiedot, kuvat, viestit ja toistettava audiosisältö."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Koko näyttö"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Yksittäinen sovellus"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Jaa sovellus tai tallenna sen sisältöä"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Haluatko, että <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aloittaa tallennuksen tai striimauksen?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Kun jaat, tallennat tai striimaat, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> saa pääsyn kaikkeen näytölläsi näkyvään tai laitteellasi toistettuun sisältöön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä, kuvia, audiota tai videoita."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Kun jaat, tallennat tai striimaat sovellusta, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> saa pääsyn kaikkeen sovelluksessa näkyvään tai toistettuun sisältöön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä, kuvia, audiota tai videoita."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Aloita"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Aloitetaanko striimaus?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Kun striimaat, Android saa pääsyn kaikkeen näytölläsi näkyvään tai laitteellasi toistettuun sisältöön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä, kuvia, audiota tai videoita."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Kun striimaat sovellusta, Android saa pääsyn kaikkeen sovelluksessa näkyvään tai toistettuun sisältöön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä, kuvia, audiota tai videoita."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Aloita striimaus"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Aloitetaanko jakaminen?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Kun jaat, tallennat tai striimaat, Android saa pääsyn kaikkeen näytölläsi näkyvään tai laitteellasi toistettuun sisältöön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä, kuvia, audiota tai videoita."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Kun jaat, tallennat tai striimaat, Android saa pääsyn kaikkeen sovelluksella näkyvään tai toistettuun sisältöön. Ole siis varovainen, kun lisäät salasanoja, maksutietoja, viestejä, kuvia, audiota tai videoita."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Aloita"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Jakaminen keskeytyy, kun vaihdat sovelluksia"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Jaa tämä sovellus"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Vaihda takaisin"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Sovelluksen vaihto"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"IT-järjestelmänvalvojasi estämä"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Kuvakaappaus on poistettu käytöstä laitekäytännön perusteella"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Tyhjennä kaikki"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Laitteeseen on asennettu varmenteen myöntäjä. Suojattua verkkoliikennettäsi voidaan valvoa tai muuttaa."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Järjestelmänvalvoja on ottanut käyttöön verkkolokitietojen tallentamisen, joka valvoo laitteellasi tapahtuvaa liikennettä."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Järjestelmänvalvoja on ottanut käyttöön verkkolokitietojen tallentamisen. Sen avulla seurataan liikennettä työprofiilissasi mutta ei henkilökohtaisessa profiilissasi."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Laite on yhdistetty internetiin tämän kautta: <xliff:g id="VPN_APP">%1$s</xliff:g>. Verkkotoimintasi, mukaan lukien sähköpostit ja selausdata, näkyy IT-järjestelmänvalvojalle."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Laite on yhdistetty internetiin tämän kautta: <xliff:g id="VPN_APP">%1$s</xliff:g>. Verkkotoimintasi, mukaan lukien sähköpostit ja selausdata, näkyy VPN-palveluntarjoajalle."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Laite on yhdistetty internetiin tämän kautta: <xliff:g id="VPN_APP">%1$s</xliff:g>. Verkkotoimintasi, mukaan lukien sähköpostit ja selausdata, näkyy IT-järjestelmänvalvojalle."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Laite on yhdistetty internetiin näiden kautta: <xliff:g id="VPN_APP_0">%1$s</xliff:g> ja <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Verkkotoimintasi, mukaan lukien sähköpostit ja selausdata, näkyy IT-järjestelmänvalvojalle."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Työsovelluksesi on yhdistetty internetiin tämän kautta: <xliff:g id="VPN_APP">%1$s</xliff:g>. Verkkotoimintasi työsovelluksissa, mukaan lukien sähköpostit ja selausdata, näkyy IT-järjestelmänvalvojalle ja VPN-palveluntarjoajalle."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Henkilökohtaiset sovelluksesi on yhdistetty internetiin tämän kautta: <xliff:g id="VPN_APP">%1$s</xliff:g>. Verkkotoimintasi, mukaan lukien sähköpostit ja selausdata, näkyy VPN-palveluntarjoajalle."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"poista käytöstä"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Ääni ja värinä"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Asetukset"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Äänenvoimakkuutta vähennetty turvallisemmalle tasolle"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Äänenvoimakkuus on ollut suuri yli suositellun ajan"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Äänenvoimakkuus laskettu turvalliselle tasolle"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Äänenvoimakkuus on ollut suuri yli suositellun ajan"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Kuulokkeiden äänenvoimakkuus on ylittänyt tämän viikon turvarajan"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Jatka kuuntelua"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Vähennä äänenvoimakkuutta"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Sovellus on kiinnitetty"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Pysyy näkyvissä, kunnes irrotat sen. Irrota painamalla pitkään Edellinen ja Viimeisimmät."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Pysyy näkyvissä, kunnes irrotat sen. Irrota painamalla pitkään Edellinen ja Aloitusnäyttö."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Virtavalikko"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Sivu <xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Lukitusnäyttö"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Puhelin sammui kuumuuden takia"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Puhelimesi toimii nyt normaalisti.\nLue lisää napauttamalla"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Puhelimesi oli liian kuuma, joten se sammui. Puhelimesi toimii nyt normaalisti.\n\nPuhelimesi voi kuumentua liikaa, jos\n	• käytät paljon resursseja vaativia sovelluksia (esim. pelejä, videoita tai navigointisovelluksia)\n	• lataat tai lähetät suuria tiedostoja\n	• käytät puhelintasi korkeissa lämpötiloissa."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Katso huoltovaiheet"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Puhelin lämpenee"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Joidenkin ominaisuuksien käyttöä on rajoitettu puhelimen jäähtymisen aikana.\nLue lisää napauttamalla"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Puhelimesi yrittää automaattisesti jäähdyttää itsensä. Voit silti käyttää puhelinta, mutta se voi toimia hitaammin.\n\nKun puhelin on jäähtynyt, se toimii normaalisti."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Katso huoltovaiheet"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Irrota laite"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Laite lämpenee latausportin lähellä. Jos laite on yhdistetty laturiin tai USB-lisälaitteeseen, irrota se varoen, sillä johtokin voi olla lämmin."</string>
@@ -839,8 +863,9 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Koko näytön suurennus"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Suurenna osa näytöstä"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Avaa suurennusasetukset"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Sulje suurennusasetukset"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Muuta kokoa vetämällä kulmaa"</string>
-    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Diagonaalisen vierittämisen salliminen"</string>
+    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Salli diagonaalinen vierittäminen"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Muuta kokoa"</string>
     <string name="accessibility_change_magnification_type" msgid="666000085077432421">"Suurennustyypin muuttaminen"</string>
     <string name="accessibility_magnification_end_resizing" msgid="4881690585800302628">"Lopeta koon muuttaminen"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"poista suosikeista"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Siirrä kohtaan <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Säätimet"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Valitse laiteohjaimet, joita haluat käyttää nopeasti"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Järjestele säätimiä koskettamalla pitkään ja vetämällä"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Kaikki säätimet poistettu"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Muutoksia ei tallennettu"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Katso muita sovelluksia"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Järjestä uudelleen"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Lisää asetuksia"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Lisää säätimiä"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Palaa muokkaukseen"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"Säätimiä ei voitu ladata. Avaa <xliff:g id="APP">%s</xliff:g> ja tarkista, että sovelluksen asetukset eivät ole muuttuneet."</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"Yhteensopivat säätimet eivät käytettävissä"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Kokeile toista PIN-koodia"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Vahvista muutos: <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Pyyhkäise nähdäksesi lisää"</string>
+    <string name="retry_face" msgid="416380073082560186">"Kokeile kasvojentunnistusta uudelleen"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Ladataan suosituksia"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Piilotetaanko mediaohjain (<xliff:g id="APP_NAME">%1$s</xliff:g>)?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Asetukset"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> soittaa nyt tätä: <xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>)"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> on käynnissä"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Toista"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Keskeytä"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Edellinen kappale"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Kaiuttimet ja näytöt"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Ehdotetut laitteet"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Lopeta jaettu istunto, jotta voit siirtyä mediaan toisella laitteella"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Lopeta"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Miten lähetys toimii"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Lähetys"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Lähistöllä olevat ihmiset, joilla on yhteensopiva Bluetooth-laite, voivat kuunnella lähettämääsi mediaa"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Tallennus ei onnistu. Yritä uudelleen."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Tallennus ei onnistu."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Käytä vähintään 4 merkkiä"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Käytä alle 16 merkkiä"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Käytä alle <xliff:g id="LENGTH">%1$d</xliff:g> merkkiä"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Koontiversion numero"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Koontiversion numero kopioitu leikepöydälle"</string>
     <string name="basic_status" msgid="2315371112182658176">"Avaa keskustelu"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Ongelma akkumittarin lukemisessa"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Saat lisätietoja napauttamalla"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Ei herätyksiä"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"käytä näytön lukitustapaa"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Sormenjälkitunnistin"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"todentaaksesi"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"avataksesi laitteen"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant kuuntelee"</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="note_task_button_label" msgid="8718616095800343136">"Muistiinpanojen tekeminen"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Muistiinpanojen tekeminen"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Muistiinpanot, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Lue lisää"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Lue lisää: <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Avaa <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Sovellus on otettu käyttöön"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Ainakin yksi kortti on lisätty Walletiin"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Asenna kamerasovellus"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Sovellus on otettu käyttöön"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Ainakin yksi laite on käytettävissä"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Jos haluat lisätä Wallet-sovelluksen pikakuvakkeena, varmista, että se on asennettuna"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Jos haluat lisätä Wallet-sovelluksen pikakuvakkeena, varmista, että lisättynä on vähintään yksi kortti"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Jos haluat lisätä QR-koodiskannerin pikakuvakkeena, varmista, että kamerasovellus on asennettuna"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Jos haluat lisätä Home-sovelluksen pikakuvakkeena, varmista, että se on asennettuna"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Ainakin yksi laite on käytettävissä"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Valitse muistiinpanojen tekemisen oletussovellus, jota käytetään pikakuvakkeen avulla"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Valitse sovellus"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Kosketa pikakuvaketta pitkään"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Peru"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Vaihda näyttöä nyt"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Yhdistä näyttökynä laturiin"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Näyttökynän akku vähissä"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Tästä profiilista ei voi soittaa"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Työkäytäntö sallii sinun soittaa puheluita vain työprofiilista"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Et voi soittaa henkilökohtaisella sovelluksella"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Organisaatio sallii soittamisen vain työsovelluksilla"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Vaihda työprofiiliin"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Sulje"</string>
-    <string name="lock_screen_settings" msgid="6152703934761402399">"Customize lukitusnäyttöä"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Asenna työpuhelinsovellus"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Peruuta"</string>
+    <string name="lock_screen_settings" msgid="6152703934761402399">"Muokkaa lukitusnäyttöä"</string>
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Avaa lukitus muokataksesi lukitusnäyttöä"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi-yhteys ei ole käytettävissä"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera estetty"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera ja mikrofoni estetty"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofoni estetty"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Tärkeät-tila on päällä"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant on aktiivinen"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Aseta oletusmuistiinpanosovellus Asetuksista"</string>
+    <string name="install_app" msgid="5066668100199613936">"Asenna sovellus"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofoni ja kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Sovellusten viimeaikainen käyttö"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Katso viimeaikainen käyttö"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Valmis"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Laajenna ja näytä vaihtoehdot"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Tiivistä"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Sulje tämä sovellus"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> suljettu"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Ylläpidä palvelua"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Hallinnoi pääsyä"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Puhelun käytössä"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Käytetty äskettäin puhelussa"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Tämän käytössä: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"<xliff:g id="APP_NAME">%1$s</xliff:g> käytti tätä äskettäin"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Tämän käytössä: <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"<xliff:g id="APP_NAME">%1$s</xliff:g> käytti tätä äskettäin (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Tämän käytössä: <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"<xliff:g id="APP_NAME">%1$s</xliff:g> käytti tätä äskettäin (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fi/strings_tv.xml b/packages/SystemUI/res/values-fi/strings_tv.xml
deleted file mode 100644
index 61198d4..0000000
--- a/packages/SystemUI/res/values-fi/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN on yhdistetty"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN ei ole yhdistettynä"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Palvelun <xliff:g id="VPN_APP">%1$s</xliff:g> kautta"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Ilmoitukset"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Ei ilmoituksia"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofoni tallentaa"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera kuvaa"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera ja mikrofoni tallentavat"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofoni lopetti tallentamisen"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kamera lopetti kuvaamisen"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kamera ja mikrofoni lopettivat tallentamisen"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Näytön tallennus aloitettu"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Näytön tallennus lopetettu"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 71b6ad8..2f8fcfb 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Activer l\'USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"En savoir plus"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Capture d\'écran"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock désactivée"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Déverrouillage prolongé désactivé"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"a envoyé une image"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Enregistrement capture écran…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Sauv. de la capture dans le profil prof. en cours…"</string>
@@ -95,23 +95,20 @@
     <string name="screenshot_default_files_app_name" msgid="8721579578575161912">"Fichiers"</string>
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> a détecté cette capture d\'écran."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> et d\'autres applications ouvertes ont détecté cette capture d\'écran."</string>
-    <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Ajouter à l\'application de prise de notes"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Enregistreur d\'écran"</string>
+    <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Ajouter à une note"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Enregistreur d\'écran"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Trait. de l\'enregist. d\'écran…"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notification en cours pour une session d\'enregistrement d\'écran"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Commencer l\'enregistrement?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Durant l\'enregistrement, le système Android peut capturer de l\'information confidentielle qui s\'affiche sur votre écran ou qui joue sur votre appareil. Cela comprend les mots de passe, les renseignements sur le paiement, les photos, les messages et l\'audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Enregistrer l\'écran entier"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Enregistrer une seule appli"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Pendant l\'enregistrement, Android a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Par conséquent, soyez prudent avec les mots de passe, les détails du paiement, les messages ou toute autre information confidentielle."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Pendant l\'enregistrement, Android a accès à tout ce qui est affiché ou lu sur cette application. Par conséquent, soyez prudent avec les mots de passe, les détails du paiement, les messages ou toute autre information confidentielle."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Commencer l\'enregistrement"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Commencer l\'enregistrement?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Pendant l\'enregistrement, Android a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Par conséquent, soyez prudent avec les mots de passe, les détails du paiement, les messages, les photos et les contenus audio et vidéo."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Lorsque vous enregistrez une application, Android a accès à tout ce qui est visible ou lu sur cette application. Par conséquent, soyez prudent avec les mots de passe, les détails du paiement, les messages, les photos et les contenus audio et vidéo."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Commencer l\'enregistrement"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Enregistrer des fichiers audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Audio de l\'appareil"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Sons de l\'appareil comme la musique, les appels et les sonneries"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Microphone"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Audio de l\'appareil et du microphone"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Démarrer"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Commencer"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Enregistrement de l\'écran"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Enregistrement de l\'écran et de l\'audio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Afficher les endroits touchés à l\'écran"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Partager"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Enregistrement sauvegardé"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Touchez pour afficher"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Une erreur s\'est produite lors de la suppression de l\'enregistrement d\'écran"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Erreur d\'enregistrement de l\'écran"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Une erreur s\'est produite lors du démarrage de l\'enregistrement d\'écran"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Affichage plein écran"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Pour quitter, balayez du haut vers le bas."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"OK"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Précédent"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Domicile"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Visage authentifié"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmé"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Touchez Confirmer pour terminer"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Déverr. par reconn. faciale. App. sur l\'icône pour continuer."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Déverrouillé avec le visage"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Déverr. par reconnaissance faciale. Appuyez pour continuer."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Visage reconnu. Appuyez pour continuer."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Visage reconnu. Appuyez sur Déverrouiller pour continuer."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authentifié"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Annuler l\'authentification"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Utiliser un NIP"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Utiliser un schéma"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Utiliser un mot de passe"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Si vous entrez un schéma incorrect à la prochaine tentative suivante, votre profil professionnel et ses données seront supprimés."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Si vous entrez un NIP incorrect à la prochaine tentative, votre profil professionnel et ses données seront supprimés."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Si vous entrez un mot de passe incorrect à la prochaine tentative suivante, votre profil professionnel et ses données seront supprimés."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Configuration"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Plus tard"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Cela est requis pour améliorer la sécurité et la performance"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Configurer le Déverrouillage par empreinte digitale à nouveau"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Déverrouillage par empreinte digitale"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Configurer le Déverrouillage par empreinte digitale"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Pour configurer le Déverrouillage par empreinte digitale à nouveau, les images et les modèles actuels de votre empreinte digitale devront être supprimés.\n\nAprès cela, vous devrez configurer le Déverrouillage par empreinte digitale à nouveau pour utiliser votre empreinte digitale afin de déverrouiller votre téléphone."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Pour configurer le Déverrouillage par empreinte digitale à nouveau, les images et les modèles actuels de votre empreinte digitale devront être supprimés.\n\nAprès cela, vous devrez configurer le Déverrouillage par empreinte digitale à nouveau pour utiliser votre empreinte digitale afin de déverrouiller votre téléphone."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Impossible de configurer le Déverrouillage par empreinte digitale. Accédez au menu Paramètres pour réessayer."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Configurer le déverrouillage par reconnaissance faciale à nouveau"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Déverrouillage par reconnaissance faciale"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Configurer le Déverrouillage par reconnaissance faciale"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Pour configurer le Déverrouillage par reconnaissance faciale à nouveau, votre modèle facial devra être supprimé.\n\nVous devrez configurer cette fonctionnalité à nouveau pour utiliser votre visage afin de déverrouiller votre téléphone."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Impossible de configurer le Déverrouillage par reconnaissance faciale. Accédez au menu Paramètres pour réessayer."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Touchez le capteur d\'empreintes digitales"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Appuyez sur l\'icône Déverrouiller pour continuer"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Visage non reconnu. Utilisez plutôt l\'empreinte digitale."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,13 +248,13 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Écouteurs"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrée"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Prothèses auditives"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Prothèses auditives"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activation en cours…"</string>
     <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_camera_label" msgid="5612076679385269339">"Accès à la caméra"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Accès au micro"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Accessible"</string>
     <string name="quick_settings_camera_mic_blocked" msgid="4710884905006788281">"Bloqué"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Déverrouillé avec le visage"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Visage reconnu"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Balayez l\'écran vers le haut pour réessayer"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Balayez vers le haut pour réessayer le Déverrouillage par reconnaissance faciale"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Déverrouillez l\'écran pour utiliser la CCP"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Cet appareil appartient à votre organisation"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Cet appareil appartient à <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aura accès à toute l\'information visible sur votre écran ou qui joue sur votre appareil durant l\'enregistrement ou la diffusion. Cela comprend des renseignements comme les mots de passe, les détails du paiement, les photos, les messages et le contenu audio que vous faites jouer."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Le service offrant cette fonction aura accès à toute l\'information qui est visible sur votre écran ou à ce qui joue sur votre appareil durant l\'enregistrement ou la diffusion. Cela comprend des renseignements comme les mots de passe, les détails du paiement, les photos, les messages et le contenu audio que vous faites jouer."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Commencer à enregistrer ou à diffuser?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Commencer à enregistrer ou à diffuser avec <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Autoriser <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> à partager ou à enregistrer?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Écran entier"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Une seule application"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Lorsque vous partagez, enregistrez ou diffusez, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Par conséquent, soyez prudent avec les mots de passe, les détails du paiement, les messages ou toute autre information confidentielle."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Lorsque vous partagez, enregistrez ou diffusez une application, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> a accès à tout ce qui est affiché ou lu sur cette application. Par conséquent, soyez prudent avec les mots de passe, les détails du paiement, les messages ou toute autre information confidentielle."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continuer"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Partager ou enregistrer une application"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Autoriser cette application à partager ou à enregistrer?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Lorsque vous partagez, enregistrez ou diffusez, cette application a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Par conséquent, soyez prudent avec les mots de passe, les détails du paiement, les messages ou toute autre information confidentielle."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Lorsque vous partagez, enregistrez ou diffusez une application, cette application a accès à tout ce qui est affiché ou lu sur cette application. Par conséquent, soyez prudent avec les mots de passe, les détails du paiement, les messages ou toute autre information confidentielle."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aura accès à toute l\'information qui est visible sur votre écran ou lue sur votre appareil durant l\'enregistrement ou la diffusion. Cela comprend des renseignements comme les mots de passe, les détails du paiement, les photos, les messages et les contenus audio que vous faites jouer."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Commencer à enregistrer ou à diffuser?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Le service offrant cette fonction aura accès à toute l\'information qui est visible sur votre écran ou lu sur votre appareil pendant que vous enregistrez ou diffusez. Cela comprend des renseignements comme les mots de passe, les détails du paiement, les photos, les messages et le contenu audio que vous faites jouer."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Écran entier"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Une seule application"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Partager ou enregistrer une application"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Commencer à enregistrer ou à diffuser avec <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Lorsque vous partagez, enregistrez ou diffusez, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Par conséquent, soyez prudent avec les mots de passe, les détails du paiement, les messages, les photos et les contenus audio et vidéo."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Lorsque vous partagez, enregistrez ou diffusez une application, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> a accès à tout ce qui est visible sur votre écran ou lu sur cette application. Par conséquent, soyez prudent avec les mots de passe, les détails du paiement, les messages, les photos et les contenus audio et vidéo."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Commencer"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Commencer la diffusion?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Lorsque vous diffusez, Android a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Par conséquent, soyez prudent avec les mots de passe, les détails du paiement, les messages, les photos et les contenus audio et vidéo."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Lorsque vous diffusez une application, Android a accès à tout ce qui est visible sur votre écran ou lu sur cette application. Par conséquent, soyez prudent avec les mots de passe, les détails du paiement, les messages, les photos et les contenus audio et vidéo."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Commencer la diffusion"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Commencer à partager?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Lorsque vous partagez, enregistrez ou diffusez, Android a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Par conséquent, soyez prudent avec les mots de passe, les détails du paiement, les messages, les photos et les contenus audio et vidéo."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Lorsque vous partagez, enregistrez ou diffusez une application, Android a accès à tout ce qui est visible sur votre écran ou lu sur cette application. Par conséquent, soyez prudent avec les mots de passe, les détails du paiement, les messages, les photos et les contenus audio et vidéo."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Commencer"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Le partage s\'interrompt lorsque vous changez d\'application"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Partager plutôt cette application"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Revenir en arrière"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Commutateur d\'application"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Bloquée par votre administrateur informatique"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"La fonctionnalité de capture d\'écran est désactivée par l\'application Device Policy"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Tout effacer"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Une autorité de certification est installée sur cet appareil. Votre trafic sur le réseau sécurisé peut être contrôlé ou modifié."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Votre administrateur a activé la journalisation réseau, qui surveille le trafic sur votre appareil."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Votre administrateur a activé la journalisation réseau, qui surveille le trafic dans votre profil professionnel, mais pas dans votre profil personnel."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Cet appareil est connecté à Internet par l\'intermédiaire de <xliff:g id="VPN_APP">%1$s</xliff:g>. Votre activité réseau, y compris les courriels et les données de navigation, est visible par votre administrateur informatique."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Cet appareil est connecté à Internet par l\'intermédiaire de <xliff:g id="VPN_APP">%1$s</xliff:g>. Votre activité réseau, y compris les courriels et les données de navigation, est visible par le fournisseur de RPV."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Cet appareil est connecté à Internet par l\'intermédiaire de <xliff:g id="VPN_APP">%1$s</xliff:g>. Votre activité réseau, y compris les courriels et les données de navigation, est visible par votre administrateur informatique."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Cet appareil est connecté à Internet par l\'intermédiaire de <xliff:g id="VPN_APP_0">%1$s</xliff:g> et de <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Votre activité réseau, y compris les courriels et les données de navigation, est visible par votre administrateur informatique."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Vos applications professionnelles sont connectées à Internet par l\'intermédiaire de <xliff:g id="VPN_APP">%1$s</xliff:g>. Votre activité réseau dans les applications professionnelles, y compris les courriels et les données de navigation, est visible par votre administrateur informatique et par votre fournisseur de RPV."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Vos applications personnelles sont connectées à Internet par l\'intermédiaire de <xliff:g id="VPN_APP">%1$s</xliff:g>. Votre activité réseau, y compris les courriels et les données de navigation, est visible par votre fournisseur de RPV."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"désactiver"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Son et vibration"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Paramètres"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Réduction du volume à un niveau moins dangereux"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Le niveau du volume est resté élevé au-delà de la durée recommandée"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volume réduit à un niveau plus sécuritaire"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Le niveau du volume des écouteurs est resté élevé au-delà de la durée recommandée"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Le niveau du volume des écouteurs a dépassé la limite de sécurité pour cette semaine"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Poursuivre l\'écoute"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Diminuer le volume"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"L\'application est épinglée"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Cet écran est épinglé jusqu\'à ce que vous annuliez l\'opération. Pour annuler l\'épinglage, maintenez le doigt sur « Retour » et « Aperçu »."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Cet écran est épinglé jusqu\'à ce que vous annuliez l\'opération. Pour annuler l\'épinglage, maintenez le doigt sur les touches Retour et Accueil."</string>
@@ -701,7 +731,7 @@
     <string name="right_icon" msgid="1103955040645237425">"Icône droite"</string>
     <string name="drag_to_add_tiles" msgid="8933270127508303672">"Sélectionnez et faites glisser les tuiles pour les ajouter"</string>
     <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Faites glisser les tuiles pour les réorganiser"</string>
-    <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Faites glisser les tuiles ici pour les supprimer"</string>
+    <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Faites glisser les tuiles ici pour les retirer"</string>
     <string name="drag_to_remove_disabled" msgid="933046987838658850">"Vous avez besoin d\'au moins <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> tuiles"</string>
     <string name="qs_edit" msgid="5583565172803472437">"Modifier"</string>
     <string name="tuner_time" msgid="2450785840990529997">"Heure"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menu de l\'interrupteur"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Page <xliff:g id="ID_1">%1$d</xliff:g> sur <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Écran de verrouillage"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Tél. éteint car il surchauffait"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Votre téléphone fonctionne maintenant de manière normale.\nTouchez pour en savoir plus"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Votre téléphone s\'est éteint, car il surchauffait. Il s\'est refroidi et fonctionne normalement.\n\nIl peut surchauffer si vous :\n	• Util. des applis utilisant beaucoup de ressources (jeux, vidéo, navigation, etc.)\n	• Téléchargez ou téléversez de gros fichiers\n	• Utilisez téléphone dans des températures élevées"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Afficher les étapes d\'entretien"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Le téléphone commence à chauffer"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Certaines fonctionnalités sont limitées pendant que le téléphone refroidit.\nTouchez pour en savoir plus"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Votre téléphone va essayer de se refroidir automatiquement. Vous pouvez toujours l\'utiliser, mais il risque d\'être plus lent.\n\nUne fois refroidi, il fonctionnera normalement."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Afficher les étapes d\'entretien"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Débranchez votre appareil"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Votre appareil chauffe près du port de recharge. S\'il est connecté à un chargeur ou à un accessoire USB, débranchez-le en faisant attention : le câble pourrait également être chaud."</string>
@@ -839,8 +863,9 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Agrandir la totalité de l\'écran"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Agrandir une partie de l\'écran"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Ouvrir les paramètres d\'agrandissement"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Fermer les paramètres d\'agrandissement"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Faire glisser le coin pour redimensionner"</string>
-    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Autoriser le défilement en diagonale"</string>
+    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Autoriser défilement diagonal"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Redimensionner"</string>
     <string name="accessibility_change_magnification_type" msgid="666000085077432421">"Changer le type d\'agrandissement"</string>
     <string name="accessibility_magnification_end_resizing" msgid="4881690585800302628">"Terminer le redimensionnement"</string>
@@ -885,10 +910,9 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"supprimer des favoris"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Déplacer l\'élément à la position <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Commandes"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
-    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Maintenez le doigt sur l\'écran, puis glissez-le pour réorganiser les commandes"</string>
-    <string name="controls_favorite_removed" msgid="5276978408529217272">"Toutes les commandes ont été supprimées"</string>
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Choisissez les commandes de l\'appareil auxquelles vous souhaitez accéder rapidement"</string>
+    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Faites glisser les commandes pour les réorganiser"</string>
+    <string name="controls_favorite_removed" msgid="5276978408529217272">"Toutes les commandes ont été retirées"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Modifications non enregistrées"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Afficher autres applications"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Réorganiser"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Essayez un autre NIP"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Confirmer la modification pour <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Balayez l\'écran pour en afficher davantage"</string>
+    <string name="retry_face" msgid="416380073082560186">"Réessayez l\'authentification faciale"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Chargement des recommandations…"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Commandes multimédias"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Masquer ce contrôleur de contenu multimédia pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Paramètres"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> par <xliff:g id="ARTIST_NAME">%2$s</xliff:g> est en cours de lecteur à partir de <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> en cours d\'exécution"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Faire jouer"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Interrompre"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Chanson précédente"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Haut-parleurs et écrans"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Appareils suggérés"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Arrêtez votre session partagée pour déplacer des contenus multimédias vers un autre appareil"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Arrêter"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Fonctionnement de la diffusion"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Diffusion"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Les personnes à proximité disposant d\'appareils Bluetooth compatibles peuvent écouter le contenu multimédia que vous diffusez"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Impossible d\'enregistrer. Réessayez."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Impossible d\'enregistrer."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Utilisez au moins 4 caractères"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Utilisez moins de 16 caractères"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Utilisez moins de <xliff:g id="LENGTH">%1$d</xliff:g> caractères"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Numéro de version"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Le numéro de version a été copié dans le presse-papiers."</string>
     <string name="basic_status" msgid="2315371112182658176">"Ouvrir la conversation"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Un problème est survenu lors de la lecture du niveau de charge de la pile"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Touchez pour en savoir plus"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Aucune alarme définie"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"entrer verrouillage de l\'écran"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Capteur d\'empreintes digitales"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"authentifier"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"accéder à l\'appareil"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"L\'Assistant est à l\'écoute"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notification}one{# notification}many{# de notifications}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="note_task_button_label" msgid="8718616095800343136">"Prise de note"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Prise de note"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Prise de note, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"En savoir plus"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"En savoir plus : <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Ouvrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• que cette application est configurée;"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• qu\'au moins une carte a été ajoutée à Portefeuille."</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• qu\'une application de caméra est installée;"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• que cette application est configurée;"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• qu\'au moins un appareil est utilisable;"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Pour ajouter l\'application portefeuille sous forme de raccourci, assurez-vous que l\'application est installée"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Pour ajouter l\'application Portefeuille sous forme de raccourci, assurez-vous qu\'au moins une carte a été ajoutée"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Pour ajouter le numériseur de code QR sous forme de raccourci, assurez-vous qu\'une application d\'appareil photo est installée"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Pour ajouter l\'application Home sous forme de raccourci, assurez-vous que l\'application est installée"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• qu\'au moins un appareil est utilisable;"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Sélectionnez une application de prise de notes par défaut pour utiliser le raccourci de prise de notes"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Sélectionner l\'application"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Maintenir le doigt sur raccourci"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Annuler"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Changer d\'écran maintenant"</string>
@@ -1118,20 +1150,38 @@
     <string name="stylus_battery_low_percentage" msgid="1620068112350141558">"Charge restante de la pile : <xliff:g id="PERCENTAGE">%s</xliff:g>"</string>
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Connectez votre stylet à un chargeur"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Pile du stylet faible"</string>
-    <string name="video_camera" msgid="7654002575156149298">"Mode vidéo"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Impossible de passer un appel à partir de ce profil"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Votre politique de l\'entreprise vous autorise à passer des appels téléphoniques uniquement à partir de votre profil professionnel"</string>
+    <string name="video_camera" msgid="7654002575156149298">"Caméra"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Impossible d\'appeler à partir d\'une application personnelle"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Votre organisation vous autorise à passer des appels uniquement à partir d\'applications professionnelles"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Passer au profil professionnel"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Fermer"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Installer une application de téléphone professionnelle"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Annuler"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Personn. l\'écran de verrouillage"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Déverrouiller pour personnaliser l\'écran de verrouillage"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi non accessible"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Appareil photo bloqué"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Appareil photo et microphone bloqués"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microphone bloqué"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Mode Priorité activé"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant à l\'écoute"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Définir l\'application de prise de notes par défaut dans les Paramètres"</string>
+    <string name="install_app" msgid="5066668100199613936">"Installer l\'application"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Microphone et appareil photo"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Utilisation récente d\'application"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Afficher l\'accès récent"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"OK"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Développer et afficher les options"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Réduire"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Fermer cette application"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> fermé"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Gérer le service"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Gérer l\'accès"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Utilisé par un appel téléphonique"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Récemment utilisé par un appel téléphonique"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Utilisé par <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Récemment utilisé par <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Utilisé par <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Récemment utilisé par <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Utilisé par <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Récemment utilisé par <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings_tv.xml b/packages/SystemUI/res/values-fr-rCA/strings_tv.xml
deleted file mode 100644
index 7ab63af..0000000
--- a/packages/SystemUI/res/values-fr-rCA/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"RPV connecté"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"RPV déconnecté"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Par <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notifications"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Aucune notification"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Le microphone enregistre"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"L\'appareil photo enregistre"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"L\'appareil photo et le microphone enregistrent"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Le microphone a arrêté l\'enregistrement"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"L\'appareil photo a arrêté l\'enregistrement"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"L\'appareil photo et le microphone ont arrêté l\'enregistrement"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"L\'enregistrement d\'écran a commencé"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"L\'enregistrement d\'écran s\'est arrêté"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 8f96d2c..3a77d37 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Activer le port USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"En savoir plus"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Capture d\'écran"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Déverrouillage étendu désactivé"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock désactivé"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"a envoyé une image"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Enregistrement de la capture d\'écran…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Enregistrement de capture d\'écran dans profil pro…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> a détecté cette capture d\'écran."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> et d\'autres applis ouvertes ont détecté cette capture d\'écran."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Ajouter à la note"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Enregistreur d\'écran"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Enregistreur d\'écran"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Enregistrement de l\'écran…"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notification en cours pour une session d\'enregistrement de l\'écran"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Démarrer l\'enregistrement ?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Durant l\'enregistrement, le système Android peut capturer les infos sensibles affichées à l\'écran ou lues sur votre appareil. Cela inclut les mots de passe, les infos de paiement, les photos, les messages et l\'audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Enregistrer tout l\'écran"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Enregistrer une seule appli"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Lorsque vous enregistrez une appli, Android à accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Faites donc attention à vos mots de passe, détails de mode de paiement, messages ou autres informations sensibles."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Lorsque vous enregistrez une appli, Android a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Faites donc attention à vos mots de passe, détails de mode de paiement, messages ou autres informations sensibles."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Lancer l\'enregistrement"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Commencer à enregistrer ?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Lorsque vous enregistrez, Android a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Faites donc attention aux éléments tels que les mots de passe, détails de mode de paiement, messages, photos et contenus audio et vidéo."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Lorsque vous enregistrez une appli, Android a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Faites donc attention aux éléments tels que les mots de passe, détails de mode de paiement, messages et contenus audio et vidéo."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Lancer l\'enregistrement"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Enregistrer l\'audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Audio de l\'appareil"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Son provenant de l\'appareil (musique, appels et sonneries, etc.)"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Micro"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Audio de l\'appareil et micro"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Démarrer"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Commencer"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Enregistrement de l\'écran…"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Enregistrement de l\'écran et de l\'audio…"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Afficher les points touchés sur l\'écran"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Partager"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Enregistrement sauvegardé"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Appuyez pour afficher"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Erreur lors de la suppression de l\'enregistrement de l\'écran"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Erreur lors de l\'enregistrement de l\'écran"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Erreur lors du démarrage de l\'enregistrement de l\'écran"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Affichage en plein écran"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Pour quitter, balayez l\'écran du haut vers le bas."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"OK"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Retour"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Accueil"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Visage authentifié"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmé"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Appuyez sur \"Confirmer\" pour terminer"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Déverrouillage par visage. Appuyez sur l\'icône de déverrouillage pour continuer."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Déverrouillé par le visage"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Déverrouillé par visage. Appuyez pour continuer."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Visage reconnu. Appuyez pour continuer."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Visage reconnu. Appuyez sur l\'icône de déverrouillage pour continuer."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Authentifié"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Annuler l\'authentification"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Utiliser un code PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Utiliser un schéma"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Utiliser un mot de passe"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Si vous dessinez un schéma incorrect lors de la prochaine tentative, votre profil professionnel et les données associées seront supprimés."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Si vous saisissez un code incorrect lors de la prochaine tentative, votre profil professionnel et les données associées seront supprimés."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Si vous saisissez un mot de passe incorrect lors de la prochaine tentative, votre profil professionnel et les données associées seront supprimés."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Configurer"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Pas maintenant"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Ceci est obligatoire pour améliorer la sécurité et les performances"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Reconfigurer le déverrouillage par empreinte digitale"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Empreinte digitale"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Configurer le déverrouillage par empreinte digitale"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Pour reconfigurer le déverrouillage par empreinte digitale, les images et modèles actuels de votre empreinte digitale seront supprimés.\n\nAprès leur suppression, vous devrez reconfigurer le déverrouillage par empreinte digitale pour déverrouiller votre téléphone ou confirmer votre identité avec votre empreinte digitale."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Pour reconfigurer le déverrouillage par empreinte digitale, les images et le modèle actuels de votre empreinte digitale seront supprimés.\n\nAprès leur suppression, vous devrez reconfigurer le déverrouillage par empreinte digitale pour déverrouiller votre téléphone ou confirmer votre identité avec votre empreinte digitale."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Impossible de configurer le déverrouillage par empreinte digitale. Accédez aux paramètres pour réessayer."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Reconfigurer le déverrouillage par reconnaissance faciale"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Déverrouillage par reconnaissance faciale"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Configurer le déverrouillage par reconnaissance faciale"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Pour reconfigurer le déverrouillage par reconnaissance faciale, votre empreinte faciale actuelle sera supprimée.\n\nVous devrez reconfigurer cette fonctionnalité pour déverrouiller votre téléphone avec votre visage."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Impossible de configurer le déverrouillage par reconnaissance faciale. Accédez aux paramètres pour réessayer."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Appuyez sur le lecteur d\'empreinte digitale"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Appuyez sur l\'icône de déverrouillage pour continuer"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Visage non reconnu. Utilisez votre empreinte."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Casque"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrée"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Appareils auditifs"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Appareils auditifs"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activation…"</string>
     <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>
@@ -304,11 +320,11 @@
     <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Moyen"</string>
     <string name="quick_settings_contrast_high" msgid="656049259587494499">"Élevé"</string>
     <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Débloquer le micro de l\'appareil ?"</string>
-    <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Débloquer l\'appareil photo de l\'appareil ?"</string>
+    <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Débloquer la caméra de l\'appareil ?"</string>
     <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Débloquer l\'appareil photo et le micro de l\'appareil ?"</string>
-    <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"Cette action débloque l\'accès à tous les services et applis autorisés à utiliser votre micro."</string>
-    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"Cette action débloque l\'accès à tous les services et applis autorisés à utiliser votre appareil photo."</string>
-    <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"Cette action débloque l\'accès pour tous les services et applis autorisés à utiliser votre appareil photo ou votre micro."</string>
+    <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"L\'accès sera débloqué pour tous les services et applis autorisés à utiliser votre micro."</string>
+    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"L\'accès sera débloqué pour tous les services et applis autorisés à utiliser votre caméra."</string>
+    <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"L\'accès sera débloqué pour tous les services et applis autorisés à utiliser votre caméra ou votre micro."</string>
     <string name="sensor_privacy_start_use_mic_blocked_dialog_title" msgid="2640140287496469689">"Le micro est bloqué"</string>
     <string name="sensor_privacy_start_use_camera_blocked_dialog_title" msgid="7398084286822440384">"La caméra est bloquée"</string>
     <string name="sensor_privacy_start_use_mic_camera_blocked_dialog_title" msgid="195236134743281973">"Le micro et la caméra sont bloqués"</string>
@@ -338,7 +354,7 @@
     <string name="zen_silence_introduction" msgid="6117517737057344014">"Cette option permet de bloquer TOUS les sons et les vibrations, y compris pour les alarmes, la musique, les vidéos et les jeux."</string>
     <string name="notification_tap_again" msgid="4477318164947497249">"Appuyer à nouveau pour ouvrir"</string>
     <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" msgid="8031975796351361601">"Balayez 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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Déverrouillé par le visage"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Visage reconnu"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Balayez l\'écran vers le haut pour réessayer"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Réessayez la reconnaissance faciale en balayant vers le haut"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Déverrouillez l\'écran pour pouvoir utiliser le NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Cet appareil appartient à votre organisation"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Cet appareil appartient à <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,21 +399,30 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aura accès à toutes les informations visibles sur votre écran ou lues depuis votre appareil pendant un enregistrement ou une diffusion de contenu. Il peut s\'agir de mots de passe, données de paiement, photos, messages ou encore contenus audio lus."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Le service qui fournit cette fonction aura accès à toutes les infos visibles sur votre écran ou lues depuis votre appareil lors d\'un enregistrement ou de la diffusion d\'un contenu. Cela comprend, entre autres, vos mots de passe, les détails de vos paiements, vos photos, vos messages ou les contenus audio que vous écoutez."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Démarrer l\'enregistrement ou la diffusion ?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Démarrer l\'enregistrement ou la diffusion avec <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Autoriser <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> à partager ou enregistrer ?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Tout l\'écran"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Une seule appli"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Lorsque vous partagez, enregistrez ou castez, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Faites donc attention à vos mots de passe, détails de mode de paiement, messages ou autres informations sensibles."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Lorsque vous partagez, enregistrez ou castez une appli, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Faites donc attention à vos mots de passe, détails de mode de paiement, messages ou autres informations sensibles."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continuer"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Partager ou enregistrer une appli"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Autoriser cette appli à partager ou enregistrer ?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Lorsque vous partagez, enregistrez ou castez, cette appli a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Faites donc attention à vos mots de passe, détails de mode de paiement, messages ou autres informations sensibles."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Lorsque vous partagez, enregistrez ou castez une appli, cette appli a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Faites donc attention à vos mots de passe, détails de mode de paiement, messages ou autres informations sensibles."</string>
-    <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Bloquée par votre administrateur informatique"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aura accès à toutes les informations visibles sur votre écran ou lues depuis votre appareil pendant un enregistrement ou une diffusion de contenu. Il peut s\'agir de mots de passe, détails de mode de paiement, photos, messages ou encore contenus audio lus."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Commencer à enregistrer ou à caster ?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Le service qui fournit cette fonction aura accès à toutes les infos visibles sur votre écran ou lues depuis votre appareil pendant un enregistrement ou une diffusion de contenu. Il peut s\'agir de mots de passe, détails de mode de paiement, photos, messages ou encore contenus audio lus."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Tout l\'écran"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Une seule appli"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Partager ou enregistrer une appli"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Commencer à enregistrer ou à caster avec <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Lorsque vous partagez, enregistrez ou castez, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Faites donc attention aux éléments tels que les mots de passe, détails de mode de paiement, messages, photos et contenus audio et vidéo."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Lorsque vous partagez, enregistrez ou castez une appli, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Faites donc attention aux éléments tels que les mots de passe, détails de mode de paiement, messages et contenus audio et vidéo."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Commencer"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Commencer à caster ?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Lorsque vous castez, Android a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Faites donc attention aux éléments tels que les mots de passe, détails de mode de paiement, messages, photos et contenus audio et vidéo."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Lorsque vous castez une appli, Android a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Faites donc attention aux éléments tels que les mots de passe, détails de mode de paiement, messages et contenus audio et vidéo."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Commencer à caster"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Commencer à partager ?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Lorsque vous partagez, enregistrez ou castez, Android a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Faites donc attention aux éléments tels que les mots de passe, détails de mode de paiement, messages, photos et contenus audio et vidéo."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Lorsque vous partagez, enregistrez ou castez une appli, Android a accès à tout ce qui est visible sur votre écran ou lu sur votre appareil. Faites donc attention aux éléments tels que les mots de passe, détails de mode de paiement, messages et contenus audio et vidéo."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Commencer"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Le partage est suspendu pendant le changement d\'application"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Partager cette application à la place"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Revenir"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Changement d\'application"</string>
+    <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Bloqué par votre administrateur informatique"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"La capture d\'écran est désactivée conformément aux règles relatives à l\'appareil"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Tout effacer"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Gérer"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Une autorité de certification est installée sur cet appareil. Votre trafic sur le réseau sécurisé peut être contrôlé ou modifié."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Votre administrateur a activé la journalisation du réseau, pour contrôler le trafic sur votre appareil."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Votre administrateur a activé la journalisation réseau, qui surveille le trafic de votre profil professionnel, mais pas celui de votre profil personnel."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Cet appareil est connecté à Internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Votre administrateur informatique a accès à votre activité réseau (e-mails, données de navigation, etc.)."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Cet appareil est connecté à Internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Le fournisseur de VPN a accès à votre activité réseau (e-mails, données de navigation, etc.)."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Cet appareil est connecté à Internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Votre administrateur informatique a accès à votre activité réseau (e-mails, données de navigation, etc.)."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Cet appareil est connecté à Internet via <xliff:g id="VPN_APP_0">%1$s</xliff:g> et <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Votre administrateur informatique a accès à votre activité réseau (e-mails, données de navigation, etc.)."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Vos applis professionnelles sont connectées à Internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Votre administrateur informatique et votre fournisseur de VPN ont accès à votre activité réseau dans les applis professionnelles (e-mails, données de navigation, etc.)."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Vos applis personnelles sont connectées à Internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Votre fournisseur de VPN a accès à votre activité réseau (e-mails, données de navigation, etc.)."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"désactiver"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Son et vibreur"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Paramètres"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Volume réduit à un niveau plus sûr"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"La période pendant laquelle le volume est resté élevé est supérieure à celle recommandée"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volume réduit à un niveau plus sûr"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Le volume du casque est élevé depuis plus longtemps que recommandé"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Le volume du casque a dépassé la limite de sécurité pour cette semaine"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Continuer d\'écouter"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Réduire le volume"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"L\'application est épinglée"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Elle restera visible jusqu\'à ce que vous la retiriez. Pour la retirer, appuyez de manière prolongée sur les boutons Retour et Récents."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Elle restera visible jusqu\'à ce que vous la retiriez. Pour la retirer, appuyez de manière prolongée sur les boutons Retour et Accueil."</string>
@@ -504,7 +534,7 @@
     <string name="volume_dialog_ringer_guidance_ring" msgid="9143194270463146858">"Les appels et les notifications sonneront (<xliff:g id="VOLUME_LEVEL">%1$s</xliff:g>)"</string>
     <string name="system_ui_tuner" msgid="1471348823289954729">"System UI Tuner"</string>
     <string name="status_bar" msgid="4357390266055077437">"Barre d\'état"</string>
-    <string name="demo_mode" msgid="263484519766901593">"Mode de démonstration de l\'interface du système"</string>
+    <string name="demo_mode" msgid="263484519766901593">"Mode démo de l\'UI du système"</string>
     <string name="enable_demo_mode" msgid="3180345364745966431">"Activer le mode de démonstration"</string>
     <string name="show_demo_mode" msgid="3677956462273059726">"Afficher le mode de démonstration"</string>
     <string name="status_bar_ethernet" msgid="5690979758988647484">"Ethernet"</string>
@@ -579,7 +609,7 @@
     <string name="notification_conversation_unbubble" msgid="6908427185031099868">"Désactiver l\'affichage sous forme de bulles"</string>
     <string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> : <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
     <string name="notification_menu_gear_description" msgid="6429668976593634862">"paramètres des notifications"</string>
-    <string name="notification_menu_snooze_description" msgid="4740133348901973244">"options de répétition des notifications"</string>
+    <string name="notification_menu_snooze_description" msgid="4740133348901973244">"options de mise en attente des notifications"</string>
     <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>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menu Marche/Arrêt"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Page <xliff:g id="ID_1">%1$d</xliff:g> sur <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Écran de verrouillage"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Tél. éteint car il surchauffait"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"À présent, votre téléphone fonctionne normalement.\nAppuyer pour en savoir plus"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Votre téléphone s\'est éteint, car il surchauffait. Il s\'est refroidi et fonctionne normalement.\n\nIl peut surchauffer si vous :\n	• exécutez applis utilisant beaucoup de ressources (jeux, vidéo, navigation, etc.) ;\n	• téléchargez ou importez gros fichiers ;\n	• utilisez téléphone à des températures élevées."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Afficher les étapes d\'entretien"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Le téléphone chauffe"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Fonctionnalités limitées pendant le refroidissement du téléphone.\nAppuyer pour en savoir plus"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Votre téléphone va essayer de se refroidir automatiquement. Vous pouvez toujours l\'utiliser, mais il risque d\'être plus lent.\n\nUne fois refroidi, il fonctionnera normalement."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Afficher les étapes d\'entretien"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Débrancher votre appareil"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Votre appareil se réchauffe près du port de recharge. S\'il est connecté à un chargeur ou un accessoire USB, débranchez-le en faisant attention, car le câble peut lui aussi être chaud."</string>
@@ -795,7 +819,7 @@
     <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Rebasculer sur <xliff:g id="CARRIER">%s</xliff:g> ?"</string>
     <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Il n\'y aura pas de basculement automatique entre les données mobile selon la disponibilité"</string>
     <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"Non, merci"</string>
-    <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Oui, revenir"</string>
+    <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Oui, rebasculer"</string>
     <string name="touch_filtered_warning" msgid="8119511393338714836">"L\'application Paramètres ne peut pas valider votre réponse, car une application masque la demande d\'autorisation."</string>
     <string name="slice_permission_title" msgid="3262615140094151017">"Autoriser <xliff:g id="APP_0">%1$s</xliff:g> à afficher des éléments de <xliff:g id="APP_2">%2$s</xliff:g> ?"</string>
     <string name="slice_permission_text_1" msgid="6675965177075443714">"- Accès aux informations de <xliff:g id="APP">%1$s</xliff:g>"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Agrandir tout l\'écran"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Agrandir une partie de l\'écran"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Ouvrir les paramètres d\'agrandissement"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Fermer les paramètres d\'agrandissement"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Faire glisser le coin pour redimensionner"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Autoriser le défilement diagonal"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Redimensionner"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Appuyez pour ouvrir fonctionnalités d\'accessibilité. Personnalisez ou remplacez bouton dans paramètres.\n\n"<annotation id="link">"Voir paramètres"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Déplacer le bouton vers le bord pour le masquer temporairement"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Annuler"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Raccourci <xliff:g id="FEATURE_NAME">%s</xliff:g> supprimé"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Raccourci vers <xliff:g id="FEATURE_NAME">%s</xliff:g> supprimé"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# raccourci supprimé}one{# raccourci supprimé}many{# raccourcis supprimés}other{# raccourcis supprimés}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Déplacer en haut à gauche"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Déplacer en haut à droite"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"supprimer des favoris"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Déplacer l\'élément à la position <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Commandes"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Choisissez les commandes de contrôle des appareils auxquelles accéder rapidement"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Faites glisser les commandes pour les réorganiser"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Toutes les commandes ont été supprimées"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Les modifications n\'ont pas été enregistrées"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Essayez un autre code PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Confirmer la modification pour <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Balayer l\'écran pour voir plus d\'annonces"</string>
+    <string name="retry_face" msgid="416380073082560186">"Réessayer l\'authentification faciale"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Chargement des recommandations"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Multimédia"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Masquer cette commande multimédia pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Paramètres"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> par <xliff:g id="ARTIST_NAME">%2$s</xliff:g> est en cours de lecture depuis <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> sur <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> est en cours d\'exécution"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Lecture"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pause"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Titre précédent"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Enceintes et écrans"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Appareils suggérés"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Arrêter votre session partagée pour déplacer des contenus multimédias vers un autre appareil"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Arrêter"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Fonctionnement des annonces"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Annonce"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Les personnes à proximité équipées d\'appareils Bluetooth compatibles peuvent écouter le contenu multimédia que vous diffusez"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Impossible d\'enregistrer. Réessayez."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Impossible d\'enregistrer."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Utilisez au moins quatre caractères"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Utilisez moins de 16 caractères"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Utilisez moins de <xliff:g id="LENGTH">%1$d</xliff:g> caractères"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Numéro de build"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Numéro de build copié dans le presse-papiers."</string>
     <string name="basic_status" msgid="2315371112182658176">"Conversation ouverte"</string>
@@ -1009,11 +1037,11 @@
     <string name="audio_status" msgid="4237055636967709208">"Écoute du contenu"</string>
     <string name="game_status" msgid="1340694320630973259">"Joue"</string>
     <string name="empty_user_name" msgid="3389155775773578300">"Amis"</string>
-    <string name="empty_status" msgid="5938893404951307749">"Bavardons ce soir !"</string>
+    <string name="empty_status" msgid="5938893404951307749">"Parlons-en ce soir !"</string>
     <string name="status_before_loading" msgid="1500477307859631381">"Le contenu s\'affichera bientôt"</string>
     <string name="missed_call" msgid="4228016077700161689">"Appel manqué"</string>
     <string name="messages_count_overflow_indicator" msgid="7850934067082006043">"+ de <xliff:g id="NUMBER">%d</xliff:g>"</string>
-    <string name="people_tile_description" msgid="8154966188085545556">"Voir les messages récents, les appels manqués et les notifications d\'état"</string>
+    <string name="people_tile_description" msgid="8154966188085545556">"Voir les messages récents, les appels manqués et les changements d\'état"</string>
     <string name="people_tile_title" msgid="6589377493334871272">"Conversation"</string>
     <string name="paused_by_dnd" msgid="7856941866433556428">"Mise en pause par Ne pas déranger"</string>
     <string name="new_notification_text_content_description" msgid="2915029960094389291">"<xliff:g id="NAME">%1$s</xliff:g> a envoyé un message : <xliff:g id="NOTIFICATION">%2$s</xliff:g>"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Un problème est survenu au niveau de la lecture de votre outil de mesure de batterie"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Appuyer pour en savoir plus"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Pas d\'alarme définie"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"accéder au verrouillage de l\'écran"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Lecteur d\'empreinte digitale"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"s\'authentifier"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"accéder à l\'appareil"</string>
@@ -1044,7 +1073,7 @@
     <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Recherche de réseaux…"</string>
     <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Échec de la connexion au réseau"</string>
     <string name="wifi_wont_autoconnect_for_now" msgid="5782282612749867762">"Connexion automatique au Wi-Fi désactivée pour le moment"</string>
-    <string name="see_all_networks" msgid="3773666844913168122">"Tout afficher"</string>
+    <string name="see_all_networks" msgid="3773666844913168122">"Tout voir"</string>
     <string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"Pour changer de réseau, déconnectez l\'Ethernet"</string>
     <string name="wifi_scan_notify_message" msgid="3753839537448621794">"Pour améliorer l\'expérience sur l\'appareil, les applis et les services peuvent continuer de rechercher les réseaux Wi-Fi, même si le Wi-Fi est désactivé. Vous pouvez modifier cela dans les paramètres de recherche Wi-Fi. "<annotation id="link">"Modifier"</annotation></string>
     <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Désactiver le mode Avion"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"L\'Assistant écoute"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notification}one{# notification}many{# notifications}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="note_task_button_label" msgid="8718616095800343136">"Prendre des notes"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Prise de notes"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Prise de notes, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1095,17 +1125,19 @@
     <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>
     <string name="log_access_confirmation_title" msgid="4843557604739943395">"Autoriser <xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> à accéder à tous les journaux de l\'appareil ?"</string>
-    <string name="log_access_confirmation_allow" msgid="752147861593202968">"Autoriser un accès unique"</string>
+    <string name="log_access_confirmation_allow" msgid="752147861593202968">"Autoriser un accès ponctuel"</string>
     <string name="log_access_confirmation_deny" msgid="2389461495803585795">"Ne pas autoriser"</string>
     <string name="log_access_confirmation_body" msgid="6883031912003112634">"Les journaux enregistrent ce qui se passe sur votre appareil. Les applis peuvent les utiliser pour rechercher et résoudre des problèmes.\n\nCertains journaux pouvant contenir des infos sensibles, autorisez uniquement les applis de confiance à accéder à tous les journaux de l\'appareil. \n\nSi vous refusez à cette appli l\'accès à tous les journaux de l\'appareil, elle a quand même accès aux siens. Le fabricant de l\'appareil peut accéder à certains journaux ou certaines infos sur votre appareil."</string>
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"En savoir plus"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Pour en savoir plus, rendez-vous sur <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Ouvrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• L\'appli est configurée"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Au moins une carte a été ajoutée à Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Installer une appli d\'appareil photo"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• L\'appli est configurée"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Au moins un appareil est disponible"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Pour ajouter l\'appli Wallet comme raccourci, vérifiez que l\'appli est installée"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Pour ajouter l\'appli Wallet comme raccourci, assurez-vous qu\'au moins une carte a été ajoutée"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Pour ajouter le lecteur de code QR comme raccourci, assurez-vous qu\'une appli d\'appareil photo est installée"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Pour ajouter l\'application Home comme raccourci, vérifiez que l\'appli est installée"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Au moins un appareil est disponible"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Sélectionnez une appli de notes par défaut pour utiliser le raccourci de prise de notes"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Sélectionner une appli"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Appuyez de manière prolongée sur raccourci"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Annuler"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Changer d\'écran maintenant"</string>
@@ -1118,20 +1150,38 @@
     <string name="stylus_battery_low_percentage" msgid="1620068112350141558">"<xliff:g id="PERCENTAGE">%s</xliff:g> de batterie restante"</string>
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Connectez votre stylet à un chargeur"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"La batterie du stylet est faible"</string>
-    <string name="video_camera" msgid="7654002575156149298">"Caméra vidéo"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Impossible d\'appeler depuis ce profil"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Votre règle professionnelle ne vous permet de passer des appels que depuis le profil professionnel"</string>
+    <string name="video_camera" msgid="7654002575156149298">"Caméra"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Impossible d\'appeler depuis une appli personnelle"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Votre organisation ne vous autorise à passer des appels que depuis des applis professionnelles"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Passer au profil professionnel"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Fermer"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Installer une appli professionnelle pour téléphoner"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Annuler"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Personnaliser écran verrouillage"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Déverrouiller pour personnaliser l\'écran de verrouillage"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi non disponible"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Caméra bloquée"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Caméra et micro bloqués"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Micro bloqué"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Mode Prioritaire activé"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant à l\'écoute"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Définir une appli de notes par défaut dans les paramètres"</string>
+    <string name="install_app" msgid="5066668100199613936">"Installer l\'appli"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Micro et caméra"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Utilisation récente par une appli"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Consulter les accès récents"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"OK"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Développer et afficher les options"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Réduire"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Fermer cette appli"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> fermé"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Gérer le service"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Gérer l\'accès"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"En cours d\'utilisation par l\'appel téléphonique"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Récemment utilisé lors d\'un appel téléphonique"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"En cours d\'utilisation par <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Récemment utilisé par <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"En cours d\'utilisation par <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Récemment utilisé par <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"En cours d\'utilisation par <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Récemment utilisé par <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fr/strings_tv.xml b/packages/SystemUI/res/values-fr/strings_tv.xml
deleted file mode 100644
index d1ac554..0000000
--- a/packages/SystemUI/res/values-fr/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN connecté"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN déconnecté"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Via <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notifications"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Aucune notification"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Le micro enregistre…"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"La caméra enregistre…"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"La caméra et le micro enregistrent…"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Le micro a arrêté l\'enregistrement"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"La caméra a arrêté l\'enregistrement"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"La caméra et le micro ont arrêté l\'enregistrement"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Enregistrement de l\'écran démarré"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Enregistrement de l\'écran arrêté"</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 12fa44d..34440a0 100644
--- a/packages/SystemUI/res/values-fr/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-fr/tiles_states_strings.xml
@@ -43,7 +43,7 @@
   </string-array>
   <string-array name="tile_states_cell">
     <item msgid="1235899788959500719">"Indisponibles"</item>
-    <item msgid="2074416252859094119">"Désactivées"</item>
+    <item msgid="2074416252859094119">"Désactivé"</item>
     <item msgid="287997784730044767">"Activées"</item>
   </string-array>
   <string-array name="tile_states_battery">
@@ -64,7 +64,7 @@
   <string-array name="tile_states_rotation">
     <item msgid="4578491772376121579">"Indisponible"</item>
     <item msgid="5776427577477729185">"Désactivée"</item>
-    <item msgid="7105052717007227415">"Activée"</item>
+    <item msgid="7105052717007227415">"Activé"</item>
   </string-array>
   <string-array name="tile_states_bt">
     <item msgid="5330252067413512277">"Indisponible"</item>
@@ -89,12 +89,12 @@
   <string-array name="tile_states_color_correction">
     <item msgid="2840507878437297682">"Indisponible"</item>
     <item msgid="1909756493418256167">"Désactivé"</item>
-    <item msgid="4531508423703413340">"Activée"</item>
+    <item msgid="4531508423703413340">"Activé"</item>
   </string-array>
   <string-array name="tile_states_inversion">
     <item msgid="3638187931191394628">"Indisponible"</item>
     <item msgid="9103697205127645916">"Désactivé"</item>
-    <item msgid="8067744885820618230">"Activée"</item>
+    <item msgid="8067744885820618230">"Activé"</item>
   </string-array>
   <string-array name="tile_states_saver">
     <item msgid="39714521631367660">"Indisponible"</item>
@@ -134,7 +134,7 @@
   <string-array name="tile_states_reduce_brightness">
     <item msgid="1839836132729571766">"Indisponible"</item>
     <item msgid="4572245614982283078">"Désactivé"</item>
-    <item msgid="6536448410252185664">"Activée"</item>
+    <item msgid="6536448410252185664">"Activé"</item>
   </string-array>
   <string-array name="tile_states_cameratoggle">
     <item msgid="6680671247180519913">"Indisponible"</item>
@@ -148,7 +148,7 @@
   </string-array>
   <string-array name="tile_states_controls">
     <item msgid="8199009425335668294">"Indisponibles"</item>
-    <item msgid="4544919905196727508">"Désactivées"</item>
+    <item msgid="4544919905196727508">"Désactivé"</item>
     <item msgid="3422023746567004609">"Activées"</item>
   </string-array>
   <string-array name="tile_states_wallet">
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index e2f625d..6390dc8 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Activar USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Máis información"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Facer captura"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Desactivouse o desbloqueo ampliado"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Desactivouse Desbloqueo extra"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"enviou unha imaxe"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Gardando captura de pantalla…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Gardando captura de pantalla no perfil de traballo"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> detectou esta captura de pantalla."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> e outras aplicacións abertas detectaron esta captura de pantalla."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Engadir a unha nota"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Gravadora da pantalla"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Gravadora da pantalla"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Procesando gravación pantalla"</string>
-    <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notificación en curso sobre unha sesión de gravación de pantalla"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Queres iniciar a gravación?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Durante a gravación, o sistema Android pode captar información confidencial que apareza na pantalla ou se reproduza no dispositivo, como contrasinais, información de pago, fotos, mensaxes e audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Gravar pantalla completa"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Gravar unha soa aplicación"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Durante a gravación, Android ten acceso a todo o que se vexa na pantalla ou se reproduza no teu dispositivo. Polo tanto, debes ter coidado cos contrasinais, os detalles de pago, as mensaxes ou outra información confidencial."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Cando gravas unha aplicación, Android ten acceso a todo o que se vexa ou se reproduza nela. Polo tanto, debes ter coidado cos contrasinais, os detalles de pago, as mensaxes ou outra información confidencial."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Iniciar gravación"</string>
+    <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notificación de actividade en curso sobre unha sesión de gravación de pantalla"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Queres iniciar a gravación?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Durante a gravación, Android ten acceso a todo o que se vexa na pantalla ou se reproduza no teu dispositivo. Polo tanto, debes ter coidado con determinada información, como os contrasinais, os detalles de pago, as mensaxes e as fotos, así como o contido de audio e de vídeo."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Durante a gravación dunha aplicación, Android ten acceso a todo o que se vexa ou se reproduza nela. Polo tanto, debes ter coidado con determinada información, como os contrasinais, os detalles de pago, as mensaxes e as fotos, así como o contido de audio e de vídeo."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Iniciar gravación"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Gravar audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Audio do dispositivo"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Son do dispositivo (por exemplo, música, chamadas e tons de chamada)"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Micrófono"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Audio e micrófono do dispositivo"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Iniciar"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Iniciar"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Gravando pantalla"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Gravando pantalla e audio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Mostrar a localización dos toques na pantalla"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Compartir"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Gravación da pantalla gardada"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Toca para ver o contido"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Produciuse un erro ao eliminar a gravación de pantalla"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Produciuse un erro ao gardar a gravación da pantalla"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Produciuse un erro ao iniciar a gravación da pantalla"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Vendo pantalla completa"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Para saír, pasa o dedo cara abaixo desde a parte superior."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Entendido"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Volver"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Inicio"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menú"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Autenticouse a cara"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmada"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Toca Confirmar para completar o proceso"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Usouse o desbloqueo facial. Preme a icona de desbloquear."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Usouse o desbloqueo facial"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Usouse o desbloqueo facial. Preme para continuar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Recoñeceuse a cara. Preme para continuar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Recoñeceuse a cara. Preme a icona de desbloquear."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenticado"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Cancelar a autenticación"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Usar PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Usar padrón"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Usar contrasinal"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Se indicas un padrón incorrecto no seguinte intento, eliminaranse o teu perfil de traballo e os datos asociados."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Se indicas un PIN incorrecto no seguinte intento, eliminaranse o teu perfil de traballo e os datos asociados."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Se indicas un contrasinal incorrecto no seguinte intento, eliminaranse o teu perfil de traballo e os datos asociados."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Configurar"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Agora non"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Esta acción é necesaria para mellorar a seguranza e o rendemento"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Configura de novo o desbloqueo dactilar"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Desbloqueo dactilar"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Configura o desbloqueo dactilar"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Para configurar de novo o desbloqueo dactilar, eliminaranse os modelos e as imaxes actuais da impresión dixital.\n\nUnha vez eliminados, terás que volver configurar o desbloqueo dactilar para poder utilizar a impresión dixital a fin de desbloquear o teléfono ou verificar a túa identidade."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Para configurar de novo o desbloqueo dactilar, eliminaranse o modelo e as imaxes actuais da impresión dixital.\n\nUnha vez eliminados, terás que volver configurar o desbloqueo dactilar para poder utilizar a impresión dixital a fin de desbloquear o teléfono ou verificar a túa identidade."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Non se puido configurar o desbloqueo dactilar. Para tentalo de novo, vai a Configuración."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Configura de novo o desbloqueo facial"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Desbloqueo facial"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Configura o desbloqueo facial"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Para configurar de novo o desbloqueo facial, eliminarase o modelo facial actual.\n\nTes que volver configurar esta función se queres utilizar o recoñecemento facial para desbloquear o teléfono."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Non se puido configurar o desbloqueo facial. Para tentalo de novo, vai a Configuración."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Toca o sensor de impresión dixital"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Preme a icona de desbloquear para continuar"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Non se recoñeceu a cara. Usa a impresión dixital."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Auriculares"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Audiófonos"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audiófonos"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activando…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Xirar automaticamente"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Xirar pantalla automaticamente"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Usouse o desbloqueo facial"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Recoñeceuse a cara"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Pasa o dedo cara arriba para tentalo de novo"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Pasa o dedo cara arriba para tentar usar o desbloqueo facial"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Desbloquea o dispositivo para utilizar a NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Este dispositivo pertence á túa organización."</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Este dispositivo pertence a <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>."</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> terá acceso a toda a información visible na pantalla ou reproducida desde o teu dispositivo mentres graves ou emitas contido. Isto inclúe información como contrasinais, detalles de pago, fotos, mensaxes e o audio que reproduzas."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"O servizo que proporciona esta función terá acceso a toda a información visible na pantalla ou reproducida desde o teu dispositivo mentres graves ou emitas contido. Isto inclúe información como contrasinais, detalles de pago, fotos, mensaxes e o audio que reproduzas."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Queres iniciar a gravación ou a emisión?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Queres comezar a gravar ou emitir contido con <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Queres permitir que <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> comparta ou grave contido?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Pantalla completa"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Unha soa aplicación"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Cando compartes, gravas ou emites contido, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ten acceso a todo o que se vexa na pantalla ou se reproduza no teu dispositivo. Polo tanto, debes ter coidado cos contrasinais, os detalles de pago, as mensaxes ou outra información confidencial."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Cando compartes, gravas ou emites unha aplicación, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ten acceso a todo o que se vexa ou se reproduza nela. Polo tanto, debes ter coidado cos contrasinais, os detalles de pago, as mensaxes ou outra información confidencial."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continuar"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Compartir ou gravar unha aplicación"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Queres permitir que esta aplicación comparta ou grave contido?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Cando compartes, gravas ou emites contido, esta aplicación ten acceso a todo o que se vexa na pantalla ou se reproduza no teu dispositivo. Polo tanto, debes ter coidado cos contrasinais, os detalles de pago, as mensaxes ou outra información confidencial."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Cando compartes, gravas ou emites aplicacións, esta aplicación ten acceso a todo o que se vexa ou se reproduza nelas. Polo tanto, debes ter coidado cos contrasinais, os detalles de pago, as mensaxes ou outra información confidencial."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> terá acceso a toda a información visible na pantalla ou reproducida desde o teu dispositivo mentres graves ou emitas contido. Isto inclúe datos como contrasinais, detalles de pago, fotos, mensaxes e o audio que reproduzas."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Queres iniciar a gravación ou a emisión?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"O servizo que proporciona esta función terá acceso a toda a información visible na pantalla ou reproducida desde o teu dispositivo mentres graves ou emitas contido. Isto inclúe datos como contrasinais, detalles de pago, fotos, mensaxes e o audio que reproduzas."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Pantalla completa"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Unha soa aplicación"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Compartir ou gravar unha aplicación"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Queres comezar a gravar ou emitir contido con <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Cando compartes, gravas ou emites contido, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ten acceso a todo o que se vexa na pantalla ou se reproduza no teu dispositivo. Polo tanto, debes ter coidado con determinada información, como os contrasinais, os detalles de pago, as mensaxes e as fotos, así como o contido de audio e de vídeo."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Cando compartes, gravas ou emites unha aplicación, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ten acceso a todo o que se vexa ou se reproduza nela. Polo tanto, debes ter coidado con determinada información, como os contrasinais, os detalles de pago, as mensaxes e as fotos, así como o contido de audio e de vídeo."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Iniciar"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Queres comezar a emitir contido?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Cando emites contido, Android ten acceso a todo o que se vexa na pantalla ou se reproduza no teu dispositivo. Polo tanto, debes ter coidado con determinada información, como os contrasinais, os detalles de pago, as mensaxes e as fotos, así como o contido de audio e de vídeo."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Cando emites unha aplicación, Android ten acceso a todo o que se vexa ou se reproduza nela. Polo tanto, debes ter coidado con determinada información, como os contrasinais, os detalles de pago, as mensaxes e as fotos, así como o contido de audio e de vídeo."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Comezar emisión"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Queres comezar a compartir contido?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Cando compartes, gravas ou emites contido, Android ten acceso a todo o que se vexa na pantalla ou se reproduza no teu dispositivo. Polo tanto, debes ter coidado con determinada información, como os contrasinais, os detalles de pago, as mensaxes e as fotos, así como o contido de audio e de vídeo."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Cando compartes, gravas ou emites unha aplicación, Android ten acceso a todo o que se vexa ou se reproduza nela. Polo tanto, debes ter coidado con determinada información, como os contrasinais, os detalles de pago, as mensaxes e as fotos, así como o contido de audio e de vídeo."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Iniciar"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Cando cambias de aplicación, ponse en pausa o uso compartido"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Compartir esta aplicación"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Volver"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Cambio de aplicación"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"O teu administrador de TI bloqueou esta aplicación"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"A política do dispositivo desactivou a opción de capturar a pantalla"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Eliminar todo"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Este dispositivo ten unha autoridade de certificación instalada. É posible que se controle ou se modifique o teu tráfico de rede segura."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"O administrador activou o rexistro na rede, que controla o tráfico do teu dispositivo."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"O administrador activou o rexistro na rede, que supervisa o tráfico do teu perfil de traballo, pero non o do perfil persoal."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Este dispositivo está conectado a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. O teu administrador de TI pode ver a actividade que levas a cabo na rede (por exemplo, os correos electrónicos e os datos de navegación)."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Este dispositivo está conectado a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. O fornecedor de VPN pode ver a actividade que levas a cabo na rede (por exemplo, os correos electrónicos e os datos de navegación)."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Este dispositivo está conectado a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. O teu administrador de TI pode ver a actividade que levas a cabo na rede (por exemplo, os correos electrónicos e os datos de navegación)."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Este dispositivo está conectado a Internet a través de <xliff:g id="VPN_APP_0">%1$s</xliff:g> e de <xliff:g id="VPN_APP_1">%2$s</xliff:g>. O teu administrador de TI pode ver a actividade que levas a cabo na rede (por exemplo, os correos electrónicos e os datos de navegación)."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"As túas aplicacións do traballo están conectadas a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. O teu administrador de TI e o fornecedor da VPN poden ver a actividade que levas a cabo na rede a través das aplicacións do traballo (por exemplo, os correos electrónicos e os datos de navegación)."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"As túas aplicacións persoais están conectadas a Internet a través de <xliff:g id="VPN_APP">%1$s</xliff:g>. O fornecedor da VPN pode ver a actividade que levas a cabo na rede (por exemplo, os correos electrónicos e os datos de navegación)."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"desactiva"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Son e vibración"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Configuración"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"O volume baixouse a un nivel máis seguro"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"O volume estivo a un nivel alto durante máis tempo do recomendado"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"O volume baixouse ata un nivel máis seguro"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Usaches os auriculares cun volume alto durante máis tempo do recomendado"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"O volume dos auriculares superou o límite de seguranza desta semana"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Seguir escoitando"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Baixar volume"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"A aplicación está fixada"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"A pantalla manterase visible ata que deixes de fixala. Para facelo, mantén premido Atrás e Visión xeral."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"A pantalla manterase visible ata que deixes de fixala. Para facelo, mantén premido Atrás e Inicio."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menú de acendido"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Páxina <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Pantalla de bloqueo"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"O teléfono apagouse pola calor"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"O teléfono funciona con normalidade.\nToca para obter máis información"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"O teléfono estaba moi quente, apagouse para que arrefríe e agora funciona con normalidade.\n\nÉ posible que estea moi quente se:\n	• Usas aplicacións que requiren moitos recursos (como aplicacións de navegación, vídeos e xogos)\n	• Descargas/cargas ficheiros grandes\n	• Usas o teléfono a alta temperatura"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Ver pasos de mantemento"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"O teléfono está quentando"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"O uso dalgunhas funcións é limitado mentres o teléfono arrefría.\nToca para obter máis información"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"O teléfono tentará arrefriar automaticamente. Podes utilizalo, pero é probable que funcione máis lento.\n\nUnha vez que arrefríe, funcionará con normalidade."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Ver pasos de mantemento"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Desconectar o dispositivo"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"O dispositivo estase quentando cerca do porto de carga. Se está conectado a un cargador ou a un accesorio USB, desconéctao con coidado, xa que o cable tamén podería estar quente."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ampliar pantalla completa"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Amplía parte da pantalla"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Abrir configuración da ampliación"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Pechar configuración de ampliación"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Arrastrar a esquina para cambiar o tamaño"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Permitir desprazamento diagonal"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Cambiar tamaño"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"quitar dos controis favoritos"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Mover á posición <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Controis"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Escolle os controis de dispositivos aos que queres acceder rapidamente"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Para reorganizar os controis, mantenos premidos e arrástraos"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Quitáronse todos os controis"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Non se gardaron os cambios"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Proba con outro PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Confirma o cambio para <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Pasar o dedo para ver máis"</string>
+    <string name="retry_face" msgid="416380073082560186">"Tentar de novo a autenticación por recoñecemento facial"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Cargando recomendacións"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Contido multimedia"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Queres ocultar este control multimedia para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Configuración"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Estase reproducindo <xliff:g id="SONG_NAME">%1$s</xliff:g>, de <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, en <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> estase executando"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Reproducir"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pór en pausa"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Pista anterior"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Altofalantes e pantallas"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Dispositivos suxeridos"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Detén a sesión de uso compartido para mover contido multimedia a outro dispositivo"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Deter"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Como funcionan as difusións?"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Difusión"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"As persoas que estean preto de ti e que dispoñan de dispositivos Bluetooth compatibles poden escoitar o contido multimedia que difundas"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Non se puido gardar a información. Téntao de novo."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Non se pode gardar a información."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Utiliza como mínimo 4 caracteres"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Utiliza menos de 16 caracteres"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Utiliza menos de <xliff:g id="LENGTH">%1$d</xliff:g> caracteres"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Número de compilación"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Copiouse o número de compilación no portapapeis."</string>
     <string name="basic_status" msgid="2315371112182658176">"Conversa aberta"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Produciuse un problema ao ler o medidor da batería"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Toca para obter máis información"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Sen alarmas postas"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"introducir o bloqueo de pantalla"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Sensor de impresión dixital"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autenticar"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"poñer o dispositivo"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"O Asistente está escoitando"</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="note_task_button_label" msgid="8718616095800343136">"Toma de notas"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Toma de notas"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Toma de notas (<xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Máis información"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Máis información en <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• A aplicación debe estar configurada"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Ten que haber polo menos unha tarxeta engadida a Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Debes instalar a aplicación de cámara"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• A aplicación debe estar configurada"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Ten que haber polo menos un dispositivo dispoñible"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Para engadir a aplicación Wallet como atallo, asegúrate de que estea instalada"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Para engadir a aplicación Wallet como atallo, asegúrate de que se incluíse polo menos unha tarxeta"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Para engadir o escáner de códigos QR como atallo, asegúrate de que a aplicación de cámara estea instalada"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Para engadir a aplicación Google Home como atallo, asegúrate de que estea instalada"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Ten que haber polo menos un dispositivo dispoñible"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Selecciona unha aplicación de notas predeterminada para usar o atallo de tomar notas"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Seleccionar aplicación"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Mantén premido o atallo"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Cancelar"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Cambiar de pantalla agora"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Conecta o lapis óptico a un cargador"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"O lapis óptico ten pouca batería"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videocámara"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Non se pode chamar desde este perfil"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"A política do teu traballo só che permite facer chamadas de teléfono desde o perfil de traballo"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Non se pode chamar desde aplicacións persoais"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"A túa organización só che permite chamar desde aplicacións do traballo"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Cambiar ao perfil de traballo"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Pechar"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instalar unha aplicación para teléfonos do traballo"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Cancelar"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizar pantalla de bloqueo"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Para personalizar a pantalla de bloqueo, primeiro desbloquea o dispositivo"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wifi non dispoñible"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"A cámara está bloqueada"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"A cámara e o micrófono están bloqueados"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"O micrófono está bloqueado"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"O modo de prioridade está activado"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"A atención do Asistente está activada"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Establece a aplicación de notas predeterminada en Configuración"</string>
+    <string name="install_app" msgid="5066668100199613936">"Instalar aplicación"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Micrófono e cámara"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Uso recente por parte de aplicacións"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Ver acceso recente"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Feito"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Despregar e mostrar opcións"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Contraer"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Pechar esta aplicación"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Pechouse <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Xestionar servizo"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Xestionar acceso"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"En uso por unha chamada telefónica"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"En uso recentemente por unha chamada telefónica"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"En uso por <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"En uso recentemente por <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"En uso por <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"En uso recentemente por <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"En uso por <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"En uso recentemente por <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-gl/strings_tv.xml b/packages/SystemUI/res/values-gl/strings_tv.xml
deleted file mode 100644
index 58279ee..0000000
--- a/packages/SystemUI/res/values-gl/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"A VPN está conectada"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"A VPN está desconectada"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"A través de <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notificacións"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Non hai notificacións"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"O micrófono está gravando"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"A cámara está gravando"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"A cámara e o micrófono están gravando"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"O micrófono deixou de gravar"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"A cámara deixou de gravar"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"A cámara e o micrófono deixaron de gravar"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Iniciouse a gravación da pantalla"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Parouse a gravación da pantalla"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index b78d852..6a4fa7f 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB ચાલુ કરો"</string>
     <string name="learn_more" msgid="4690632085667273811">"વધુ જાણો"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"સ્ક્રીનશૉટ"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlockની સુવિધા બંધ કરવામાં આવી"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"એક્સટેન્ડ અનલૉકની સુવિધા બંધ કરવામાં આવી"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"છબી મોકલી"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"સ્ક્રીનશોટ સાચવી રહ્યું છે…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"ઑફિસની પ્રોફાઇલમાં સ્ક્રીનશૉટ સાચવી રહ્યાં છીએ…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> દ્વારા આ સ્ક્રીનશૉટ લેવાયાની ભાળ મેળવવામાં આવી."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> અને કામ કરતી અન્ય ઍપ દ્વારા આ સ્ક્રીનશૉટ લેવાયાની ભાળ મેળવવામાં આવી."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"નોંધમાં ઉમેરો"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"સ્ક્રીન રેકોર્ડર"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"સ્ક્રીન રેકોર્ડર"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"સ્ક્રીન રેકૉર્ડિંગ ચાલુ છે"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"સ્ક્રીન રેકોર્ડિંગ સત્ર માટે ચાલુ નોટિફિકેશન"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"રેકોર્ડિંગ શરૂ કરીએ?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"રેકોર્ડ કરતી વખતે, Android System તમારી સ્ક્રીન પર દેખાતી હોય અથવા તમારા ડિવાઇસ પર ચલાવવામાં આવતી હોય તેવી કોઈપણ સંવેદનશીલ માહિતીને કૅપ્ચર કરી શકે છે. આમાં પાસવર્ડ, ચુકવણીની માહિતી, ફોટા, મેસેજ અને ઑડિયોનો સમાવેશ થાય છે."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"પૂર્ણ સ્ક્રીન રેકોર્ડ કરો"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"કોઈ એક ઍપ રેકોર્ડ કરો"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"જ્યારે તમે રેકોર્ડ કરી રહ્યાં હો, ત્યારે તમારી સ્ક્રીન પર દેખાતી હોય કે તમારા ડિવાઇસ પર ચલાવવામાં આવતી હોય તેવી કોઈપણ વસ્તુનો ઍક્સેસ Android ધરાવે છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ અથવા અન્ય સંવેદનશીલ માહિતીની બાબતે સાવચેત રહેશો."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"જ્યારે તમે કોઈ ઍપ રેકોર્ડ કરી રહ્યાં હો, ત્યારે તે ઍપ પર બતાવવામાં કે ચલાવવામાં આવતી હોય તેવી કોઈપણ વસ્તુનો ઍક્સેસ Android ધરાવે છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ અથવા અન્ય સંવેદનશીલ માહિતીની બાબતે સાવચેત રહેશો."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"રેકોર્ડિંગ શરૂ કરો"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"રેકોર્ડિંગ શરૂ કરીએ?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"જ્યારે તમે રેકોર્ડ કરી રહ્યાં હો, ત્યારે તમારી સ્ક્રીન પર દેખાતી હોય કે તમારા ડિવાઇસ પર ચલાવવામાં આવતી હોય તેવી કોઈપણ વસ્તુનો ઍક્સેસ Android પાસે હોય છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ, ફોટા અને ડિવાઇસ પર વાગી રહેલા ઑડિયો તથા વીડિયો જેવી બાબતોને લઈને સાવચેત રહો."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"જ્યારે તમે કોઈ ઍપ રેકોર્ડ કરી રહ્યાં હો, ત્યારે તે ઍપ પર બતાવવામાં કે ચલાવવામાં આવતી હોય તેવી બધી વસ્તુનો ઍક્સેસ Android પાસે હોય છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ, ફોટા અને ડિવાઇસ પર વાગી રહેલા ઑડિયો તથા વીડિયો જેવી બાબતોને લઈને સાવચેત રહો."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"રેકોર્ડિંગ શરૂ કરો"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"ઑડિયો રેકોર્ડ કરો"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"ડિવાઇસનો ઑડિયો"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"મ્યુઝિક, કૉલ અને રિંગટોન જેવા તમારા ડિવાઇસના સાઉન્ડ"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"માઇક્રોફોન"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"ડિવાઇસનો ઑડિયો અને માઇક્રોફોન"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"શરૂ કરો"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"શરૂ કરો"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"સ્ક્રીનને રેકૉર્ડ કરી રહ્યાં છીએ"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"સ્ક્રીન અને ઑડિયોને રેકોર્ડ કરી રહ્યાં છીએ"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"સ્ક્રીન પર ટચ બતાવો"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"શેર કરો"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"સ્ક્રીન રેકોર્ડિંગ સાચવ્યું"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"જોવા માટે ટૅપ કરો"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"સ્ક્રીન રેકોર્ડિંગ ડિલીટ કરવામાં ભૂલ આવી"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"સ્ક્રીન રેકોર્ડિંગ સાચવવામાં ભૂલ આવી"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"સ્ક્રીનને રેકૉર્ડ કરવાનું શરૂ કરવામાં ભૂલ"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"પૂર્ણ સ્ક્રીન જોઈ રહ્યાં છે"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"બહાર નીકળવા માટે, સૌથી ઉપરથી નીચેની તરફ સ્વાઇપ કરો."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"સમજાઈ ગયું"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"પાછળ"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"હોમ"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"મેનુ"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"ચહેરાનું પ્રમાણીકરણ થયું"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"પુષ્ટિ કરી"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"પરીક્ષણ પૂર્ણ કરવા કન્ફર્મ કરોને ટૅપ કરો"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ચહેરા દ્વારા અનલૉક કર્યું. આગળ વધવા \'અનલૉક કરો\' આઇકન દબાવો."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"ચહેરા દ્વારા અનલૉક કર્યું"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ચહેરા દ્વારા અનલૉક કર્યું. આગળ વધવા માટે દબાવો."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ચહેરો ઓળખ્યો. આગળ વધવા માટે દબાવો."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ચહેરો ઓળખ્યો. આગળ વધવા \'અનલૉક કરો\' આઇકન દબાવો."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"પ્રમાણિત"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"પ્રમાણીકરણ રદ કરો"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"પિનનો ઉપયોગ કરો"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"પૅટર્નનો ઉપયોગ કરો"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"પાસવર્ડનો ઉપયોગ કરો"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"જો તમે આગલા પ્રયત્નમાં ખોટી પૅટર્ન દાખલ કરશો, તો તમારી કાર્યાલયની પ્રોફાઇલ અને તેનો ડેટા ડિલીટ કરવામાં આવશે."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"જો તમે આગલા પ્રયત્નમાં ખોટો પિન દાખલ કરશો, તો તમારી કાર્યાલયની પ્રોફાઇલ અને તેનો ડેટા ડિલીટ કરવામાં આવશે."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"જો તમે આગલા પ્રયત્નમાં ખોટો પાસવર્ડ દાખલ કરશો, તો તમારી કાર્યાલયની પ્રોફાઇલ અને તેનો ડેટા ડિલીટ કરવામાં આવશે."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"સેટઅપ કરો"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"હમણાં નહીં"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"સુરક્ષા અને કાર્યપ્રદર્શનને બહેતર બનાવવા માટે આ જરૂરી છે"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"ફિંગરપ્રિન્ટ અનલૉક સુવિધાનું ફરી સેટઅપ કરો"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"ફિંગરપ્રિન્ટ અનલૉક"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"ફિંગરપ્રિન્ટ અનલૉક સુવિધાનું સેટઅપ કરો"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"ફિંગરપ્રિન્ટ અનલૉક સુવિધાનું ફરી સેટઅપ કરવા માટે, તમારી ફિંગરપ્રિન્ટની વર્તમાન છબીઓ અને મૉડલ ડિલીટ કરવામાં આવશે.\n\nતે ડિલીટ થયા પછી, તમારા ફોનને અનલૉક કરવા અથવા એ તમે જ છો તેની ચકાસણી કરવા માટે તમારી ફિંગરપ્રિન્ટનો ઉપયોગ કરવા, તમારે ફિંગરપ્રિન્ટ અનલૉક સુવિધાનું ફરી સેટઅપ કરવું જરૂરી રહેશે."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"ફિંગરપ્રિન્ટ અનલૉક સુવિધાનું ફરી સેટઅપ કરવા માટે, તમારી ફિંગરપ્રિન્ટની વર્તમાન છબીઓ અને મૉડલ ડિલીટ કરવામાં આવશે.\n\nતે ડિલીટ થયા પછી, તમારા ફોનને અનલૉક કરવા અથવા એ તમે જ છો તેની ચકાસણી કરવા માટે તમારી ફિંગરપ્રિન્ટનો ઉપયોગ કરવા, તમારે ફિંગરપ્રિન્ટ અનલૉક સુવિધાનું ફરી સેટઅપ કરવું જરૂરી રહેશે."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"ફિંગરપ્રિન્ટ અનલૉક સુવિધાનું સેટઅપ કરી શક્યા નથી. ફરી પ્રયાસ કરવા માટે સેટિંગ પર જાઓ."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"ફેસ અનલૉક સુવિધાનું ફરી સેટઅપ કરો"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"ફેસ અનલૉક"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"ફેસ અનલૉક સુવિધાનું સેટઅપ કરો"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"ફેસ અનલૉક સુવિધાનું ફરી સેટઅપ કરવા માટે, તમારા ચહેરાનું વર્તમાન મૉડલ ડિલીટ કરવામાં આવશે.\n\nતમારો ફોન અનલૉક કરવા તમારા ચહેરાનો ઉપયોગ કરવા માટે, તમારે આ સુવિધાનું ફરી સેટઅપ કરવું જરૂરી રહેશે."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"ફેસ અનલૉક સુવિધાનું સેટઅપ કરી શક્યા નથી. ફરી પ્રયાસ કરવા માટે સેટિંગ પર જાઓ."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"ફિંગરપ્રિન્ટના સેન્સરને સ્પર્શ કરો"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"ચાલુ રાખવા \'અનલૉક કરો\' આઇકન દબાવો"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"ચહેરો ઓળખી શકતા નથી. તેને બદલે ફિંગરપ્રિન્ટ વાપરો."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ઑડિયો"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"હૅડસેટ"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ઇનપુટ"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"શ્રવણ યંત્રો"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"સાંભળવામાં મદદ આપતા યંત્રો"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ચાલુ કરી રહ્યાં છીએ…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ઑટો રોટેટ"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ઑટો રોટેટ સ્ક્રીન"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"ચહેરા દ્વારા અનલૉક કર્યું"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"ચહેરો ઓળખ્યો"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"ફરી પ્રયાસ કરવા માટે ઉપરની તરફ સ્વાઇપ કરો"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"ફેસ અનલૉક ફરીથી અજમાવવા માટે ઉપર સ્વાઇપ કરો"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFCનો ઉપયોગ કરવા માટે અનલૉક કરો"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"આ ડિવાઇસ તમારી સંસ્થાની માલિકીનું છે"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"આ ડિવાઇસ <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>ની માલિકીનું છે"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"વપરાશકર્તાને દૂર કરીએ?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"આ વપરાશકર્તાની તમામ ઍપ્લિકેશનો અને ડેટા કાઢી નાખવામાં આવશે."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"કાઢી નાખો"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"રેકોર્ડ અથવા કાસ્ટ કરતી વખતે, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ને તમારી સ્ક્રીન પર દેખાતી હોય અથવા તમારા ડિવાઇસ પર ચલાવવામાં આવતી હોય તેવી બધી માહિતીનો ઍક્સેસ હશે. આમાં પાસવર્ડ, ચુકવણીની વિગતો, ફોટા, સંદેશા અને તમે ચલાવો છો તે ઑડિયો જેવી માહિતીનો સમાવેશ થાય છે."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"રેકોર્ડ અથવા કાસ્ટ કરતી વખતે, આ સુવિધા આપતી સેવાને તમારી સ્ક્રીન પર દેખાતી હોય અથવા તમારા ડિવાઇસ પર ચલાવવામાં આવતી હોય તેવી બધી માહિતીનો ઍક્સેસ હશે. આમાં પાસવર્ડ, ચુકવણીની વિગતો, ફોટા, મેસેજ અને તમે ચલાવો છો તે ઑડિયો જેવી માહિતીનો સમાવેશ થાય છે."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"શું રેકોર્ડ અથવા કાસ્ટ કરવાનું શરૂ કરીએ?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> વડે રેકોર્ડ અથવા કાસ્ટ કરવાનું શરૂ કરીએ?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"શુ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ને શેર અથવા રેકોર્ડ કરવાની મંજૂરી આપીએ?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"પૂર્ણ સ્ક્રીન"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"કોઈ એક ઍપ"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"જ્યારે તમે શેર, રેકોર્ડ અથવા કાસ્ટ કરી રહ્યાં હો, ત્યારે તમારી સ્ક્રીન પર દેખાતી હોય કે તમારા ડિવાઇસ પર ચલાવવામાં આવતી હોય તેવી કોઈપણ વસ્તુનો ઍક્સેસ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ધરાવે છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ અથવા અન્ય સંવેદનશીલ માહિતીની બાબતે સાવચેત રહેશો."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"જ્યારે તમે કોઈ ઍપ શેર, રેકોર્ડ અથવા કાસ્ટ કરી રહ્યાં હો, ત્યારે તે ઍપ પર બતાવવામાં કે ચલાવવામાં આવતી હોય તેવી કોઈપણ વસ્તુનો ઍક્સેસ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ધરાવે છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ અથવા અન્ય સંવેદનશીલ માહિતીની બાબતે સાવચેત રહેશો."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"ચાલુ રાખો"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"કોઈ ઍપ શેર કરો અથવા રેકોર્ડ કરો"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"આ ઍપને શેર કે રેકોર્ડ કરવાની મંજૂરી આપીએ?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"જ્યારે તમે શેર, રેકોર્ડ અથવા કાસ્ટ કરી રહ્યાં હો, ત્યારે આ ઍપ પાસે તમારી સ્ક્રીન પર જોઈ શકાતી કે તમારા ડિવાઇસ પર ચલાવવામાં આવતી બધી વસ્તુઓનો ઍક્સેસ હોય છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ અથવા અન્ય સંવેદનશીલ માહિતીની બાબતે સાવચેત રહેશો."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"જ્યારે તમે કોઈ ઍપને શેર, રેકોર્ડ અથવા કાસ્ટ કરી રહ્યાં હો, ત્યારે તેના પર બતાવવામાં કે ચલાવવામાં આવતી બધી વસ્તુઓનો ઍક્સેસ આ ઍપ પાસે હોય છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ અથવા અન્ય સંવેદનશીલ માહિતીની બાબતે સાવચેત રહેશો."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"રેકોર્ડ અથવા કાસ્ટ કરતી વખતે, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ને તમારી સ્ક્રીન પર દેખાતી હોય અથવા તમારા ડિવાઇસ પર ચલાવવામાં આવતી હોય તેવી બધી માહિતીનો ઍક્સેસ હશે. આમાં પાસવર્ડ, ચુકવણીની વિગતો, ફોટા, મેસેજ અને તમે વગાડો છો તે ઑડિયો જેવી માહિતીનો સમાવેશ થાય છે."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"શું રેકોર્ડ અથવા કાસ્ટ કરવાનું શરૂ કરીએ?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"રેકોર્ડ અથવા કાસ્ટ કરતી વખતે, આ સુવિધા આપતી સેવાને તમારી સ્ક્રીન પર દેખાતી હોય અથવા તમારા ડિવાઇસ પર ચલાવવામાં આવતી હોય તેવી બધી માહિતીનો ઍક્સેસ હશે. જેમાં પાસવર્ડ, ચુકવણીની વિગતો, ફોટા, મેસેજ અને તમે વગાડો છો તે ઑડિયો જેવી માહિતીનો સમાવેશ થાય છે."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"પૂર્ણ સ્ક્રીન"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"કોઈ એક ઍપ"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"કોઈ ઍપ શેર કરો અથવા રેકોર્ડ કરો"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> વડે રેકોર્ડ અથવા કાસ્ટ કરવાનું શરૂ કરીએ?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"જ્યારે તમે શેર, રેકોર્ડ અથવા કાસ્ટ કરી રહ્યાં હો, ત્યારે તમારી સ્ક્રીન પર દેખાતી હોય કે તમારા ડિવાઇસ પર ચલાવવામાં આવતી હોય તેવી બધી વસ્તુનો ઍક્સેસ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> પાસે હોય છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ, ફોટા અને ડિવાઇસ પર વાગી રહેલા ઑડિયો તથા વીડિયો જેવી બાબતોને લઈને સાવચેત રહો."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"જ્યારે તમે કોઈ ઍપ શેર, રેકોર્ડ અથવા કાસ્ટ કરી રહ્યાં હો, ત્યારે તે ઍપ પર બતાવવામાં કે ચલાવવામાં આવતી હોય તેવી બધી વસ્તુનો ઍક્સેસ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> પાસે હોય છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ, ફોટા અને ડિવાઇસ પર વાગી રહેલા ઑડિયો તથા વીડિયો જેવી બાબતોને લઈને સાવચેત રહો."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"શરૂ કરો"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"કાસ્ટ કરવાનું શરૂ કરીએ?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"જ્યારે તમે કાસ્ટ કરી રહ્યાં હો, ત્યારે તમારી સ્ક્રીન પર દેખાતી કે તમારા ડિવાઇસ પર ચલાવવામાં આવતી બધી વસ્તુઓનો ઍક્સેસ Android પાસે હોય છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ, ફોટા અને ડિવાઇસ પર વાગી રહેલા ઑડિયો તથા વીડિયો જેવી બાબતોને લઈને સાવચેત રહો."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"જ્યારે તમે ઍપને કાસ્ટ કરી રહ્યાં હો, ત્યારે તે ઍપ પર બતાવવામાં કે ચલાવવામાં આવતી હોય તેવી બધી વસ્તુનો ઍક્સેસ Android પાસે હોય છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ, ફોટા અને ડિવાઇસ પર વાગી રહેલા ઑડિયો તથા વીડિયો જેવી બાબતોને લઈને સાવચેત રહો."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"કાસ્ટ કરવાનું શરૂ કરો"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"શેર કરવાનું શરૂ કરીએ?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"જ્યારે તમે શેર, રેકોર્ડ અથવા કાસ્ટ કરી રહ્યાં હો, ત્યારે તમારી સ્ક્રીન પર દેખાતી હોય કે તમારા ડિવાઇસ પર ચલાવવામાં આવતી હોય તેવી બધી વસ્તુનો ઍક્સેસ Android પાસે હોય છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ, ફોટા અને ડિવાઇસ પર વાગી રહેલા ઑડિયો તથા વીડિયો જેવી બાબતોને લઈને સાવચેત રહો."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"જ્યારે તમે કોઈ ઍપ શેર, રેકોર્ડ અથવા કાસ્ટ કરી રહ્યાં હો, ત્યારે તે ઍપ પર બતાવવામાં કે ચલાવવામાં આવતી હોય તેવી બધી વસ્તુનો ઍક્સેસ Android પાસે હોય છે. તેથી પાસવર્ડ, ચુકવણીની વિગતો, મેસેજ, ફોટા અને ડિવાઇસ પર વાગી રહેલા ઑડિયો તથા વીડિયો જેવી બાબતોને લઈને સાવચેત રહો."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"શરૂ કરો"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"તમે ઍપ સ્વિચ કરો ત્યારે શેરિંગ થોભી જાય છે"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"તેના બદલે આ ઍપ શેર કરો"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"પાછળ સ્વિચ કરો"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"ઍપ સ્વિચ"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"તમારા IT ઍડમિન દ્વારા બ્લૉક કરાયેલી"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"ડિવાઇસ પૉલિસી અનુસાર સ્ક્રીન કૅપ્ચર કરવાની સુવિધા બંધ કરવામાં આવી છે"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"બધુ સાફ કરો"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"આ ઉપકરણ પર પ્રમાણપત્ર સત્તાધિકારી ઇન્સ્ટૉલ કરેલ છે. તમારા સુરક્ષિત નેટવર્ક ટ્રાફિકનું નિયમન થઈ શકે છે અથવા તેમાં ફેરફાર કરવામાં આવી શકે છે."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"તમારા વ્યવસ્થાપકે નેટવર્ક લૉગિંગ ચાલુ કર્યું છે, જે તમારા ઉપકરણ પર નેટવર્ક ટ્રાફિકનું નિયમન કરે છે."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"તમારા વ્યવસ્થાપકે નેટવર્ક લૉગ ઇન ચાલુ કર્યું છે, જે તમારી વ્યક્તિગત પ્રોફાઇલમાં નહીં, પરંતુ ઑફિસની પ્રોફાઇલમાં ટ્રાફિકનું નિરીક્ષણ કરે છે."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"આ ડિવાઇસ <xliff:g id="VPN_APP">%1$s</xliff:g> મારફતે ઇન્ટરનેટ સાથે કનેક્ટેડ છે. ઇમેઇલ અને બ્રાઉઝિંગ ડેટા સહિતની તમારી નેટવર્ક પ્રવૃત્તિ, તમારા IT ઍડમિન જોઈ શકે છે."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"આ ડિવાઇસ <xliff:g id="VPN_APP">%1$s</xliff:g> મારફતે ઇન્ટરનેટ સાથે કનેક્ટેડ છે. ઇમેઇલ અને બ્રાઉઝિંગ ડેટા સહિતની તમારી નેટવર્ક પ્રવૃત્તિને VPN પ્રદાતા જોઈ શકે છે."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"આ ડિવાઇસ <xliff:g id="VPN_APP">%1$s</xliff:g> મારફતે ઇન્ટરનેટ સાથે કનેક્ટેડ છે. ઇમેઇલ અને બ્રાઉઝિંગ ડેટા સહિતની તમારી નેટવર્ક પ્રવૃત્તિ, તમારા IT ઍડમિન જોઈ શકે છે."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"આ ડિવાઇસ <xliff:g id="VPN_APP_0">%1$s</xliff:g> અને <xliff:g id="VPN_APP_1">%2$s</xliff:g> મારફતે ઇન્ટરનેટ સાથે કનેક્ટેડ છે. ઇમેઇલ અને બ્રાઉઝિંગ ડેટા સહિતની તમારી નેટવર્ક પ્રવૃત્તિ, તમારા IT ઍડમિન જોઈ શકે છે."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"તમારી ઑફિસ માટેની ઍપ <xliff:g id="VPN_APP">%1$s</xliff:g> મારફતે ઇન્ટરનેટ સાથે કનેક્ટેડ છે. ઇમેઇલ અને બ્રાઉઝિંગ ડેટા સહિતની ઑફિસ માટેની ઍપમાંની તમારી નેટવર્ક પ્રવૃત્તિ, તમારા IT ઍડમિન અને VPN પ્રદાતા જોઈ શકે છે."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"તમારી વ્યક્તિગત ઍપ <xliff:g id="VPN_APP">%1$s</xliff:g> મારફતે ઇન્ટરનેટ સાથે કનેક્ટેડ છે. ઇમેઇલ અને બ્રાઉઝિંગ ડેટા સહિતની તમારી નેટવર્ક પ્રવૃત્તિ, તમારા VPN પ્રદાતા જોઈ શકે છે."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"બંધ કરો"</string>
     <string name="sound_settings" msgid="8874581353127418308">"સાઉન્ડ અને વાઇબ્રેશન"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"સેટિંગ"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"વૉલ્યૂમ ઘટાડીને સલામત વૉલ્યૂમ જેટલું કર્યું"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"સુઝાવ આપેલા સમય કરતાં વધુ સમય સુધી વૉલ્યૂમ વધારે રહ્યું છે"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"વૉલ્યૂમને વધુ સલામત લેવલ સુધી ઘટાડ્યું"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"હૅડફોનનું વૉલ્યૂમ સુઝાવ આપેલા સમય કરતાં વધારે સમય સુધી ઊંચા વૉલ્યૂમ પર રહ્યું છે"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"હૅડફોનનું વૉલ્યૂમ આ અઠવાડિયા માટેની સુરક્ષિત મર્યાદા કરતાં વધારે છે"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"સાંભળવાનું ચાલુ રાખો"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"વૉલ્યૂમ ઘટાડો"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"ઍપને પિન કરેલી છે"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"તમે જ્યાં સુધી અનપિન કરશો નહીં ત્યાં સુધી આ તેને વ્યૂમાં રાખે છે. અનપિન કરવા માટે પાછળ અને ઓવરવ્યૂને સ્પર્શ કરી રાખો."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"તમે જ્યાં સુધી અનપિન કરશો નહીં ત્યાં સુધી આ તેને વ્યૂમાં રાખે છે. અનપિન કરવા માટે પાછળ અને હોમને સ્પર્શ કરી રાખો."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"પાવર મેનૂ"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g> માંથી <xliff:g id="ID_1">%1$d</xliff:g> પૃષ્ઠ"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"લૉક સ્ક્રીન"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"ફોન વધુ પડતી ગરમીને લીધે બંધ થઇ ગયો છે"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"તમારો ફોન હવે સામાન્યપણે કાર્ય કરી રહ્યો છે.\nવધુ માહિતી માટે ટૅપ કરો"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"તમારો ફોન અત્યંત ગરમ હતો, તેથી તે ઠંડો થવા ઑટોમૅટિક રીતે બંધ થઈ ગયો છે. તમારો ફોન હવે સામાન્યપણે કાર્ય કરી રહ્યો છે.\n\nતમારો ફોન અત્યંત ગરમ થઈ શકે છે, જો તમે:\n • એવી ઍપ વાપરતા હો જે સંસાધન સઘન રીતે વાપરતી હોય (જેમ કે ગેમિંગ, વીડિયો, અથવા નેવિગેટ કરતી ઍપ)\n • મોટી ફાઇલો અપલોડ અથવા ડાઉનલોડ કરતા હો\n • તમારા ફોનનો ઉપયોગ ઉચ્ચ તાપમાનમાં કરતા હો"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"સારસંભાળના પગલાં જુઓ"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"ફોન ગરમ થઈ રહ્યો છે"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"ફોન ઠંડો થાય ત્યાં સુધી અમુક સુવિધાઓ મર્યાદિત હોય છે.\nવધુ માહિતી માટે ટૅપ કરો"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"તમારો ફોન ઑટોમૅટિક રીતે ઠંડો થવાનો પ્રયાસ કરશે. તમે હજી પણ તમારા ફોનનો ઉપયોગ કરી શકો છો, પરંતુ તે કદાચ થોડો ધીમો ચાલે.\n\nતમારો ફોન ઠંડો થઈ જવા પર, તે સામાન્ય રીતે ચાલશે."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"સારસંભાળના પગલાં જુઓ"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"તમારા ડિવાઇસને અનપ્લગ કરો"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"તમારું ડિવાઇસ ચાર્જિંગ પોર્ટની પાસે ગરમ થઈ રહ્યું છે. જો તે કોઈ ચાર્જર અથવા USB ઍક્સેસરી સાથે કનેક્ટેડ હોય, તો તેને અનપ્લગ કરો અને ધ્યાન રાખો, કારણ કે કેબલ ગરમ પણ હોઈ શકે છે."</string>
@@ -819,7 +843,7 @@
     <string name="ongoing_privacy_dialog_attribution_label" msgid="3385241594101496292">"(<xliff:g id="ATTRIBUTION_LABEL">%s</xliff:g>)"</string>
     <string name="ongoing_privacy_dialog_attribution_proxy_label" msgid="1111829599659403249">"(<xliff:g id="ATTRIBUTION_LABEL">%1$s</xliff:g> • <xliff:g id="PROXY_LABEL">%2$s</xliff:g>)"</string>
     <string name="privacy_type_camera" msgid="7974051382167078332">"કૅમેરા"</string>
-    <string name="privacy_type_location" msgid="7991481648444066703">"સ્થાન"</string>
+    <string name="privacy_type_location" msgid="7991481648444066703">"લોકેશન"</string>
     <string name="privacy_type_microphone" msgid="9136763906797732428">"માઇક્રોફોન"</string>
     <string name="privacy_type_media_projection" msgid="8136723828804251547">"સ્ક્રીન રેકોર્ડિંગ"</string>
     <string name="music_controls_no_title" msgid="4166497066552290938">"કોઈ શીર્ષક નથી"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"પૂર્ણ સ્ક્રીનને મોટી કરો"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"સ્ક્રીનનો કોઈ ભાગ મોટો કરો"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"મોટા કરવાના સેટિંગ ખોલો"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"મોટા કરવાના સેટિંગ બંધ કરો"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"કદ બદલવા માટે ખૂણો ખેંચો"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"ડાયગોનલ સ્ક્રોલિંગને મંજૂરી આપો"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"કદ બદલો"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"મનપસંદમાંથી કાઢી નાખો"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"સ્થાન <xliff:g id="NUMBER">%d</xliff:g> પર ખસેડો"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"નિયંત્રણો"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"ઝડપથી ઍક્સેસ કરવા માટે ડિવાઇસ નિયંત્રણો પસંદ કરો"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"નિયંત્રણોને ફરીથી ગોઠવવા માટે તેમને હોલ્ડ કરીને ખેંચો"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"બધા નિયંત્રણો કાઢી નાખ્યા"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ફેરફારો સાચવ્યા નથી"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"બીજા પિનને અજમાવી જુઓ"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> માટે ફેરફાર કન્ફર્મ કરો"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"વધુ જોવા માટે સ્વાઇપ કરો"</string>
+    <string name="retry_face" msgid="416380073082560186">"ચહેરાના પ્રમાણીકરણ માટે ફરીથી પ્રયાસ કરો"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"સુઝાવ લોડ કરી રહ્યાં છીએ"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"મીડિયા"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"શું <xliff:g id="APP_NAME">%1$s</xliff:g> માટે મીડિયાના નિયંત્રણો છુપાવીએ?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"સેટિંગ"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> પર <xliff:g id="ARTIST_NAME">%2$s</xliff:g>નું <xliff:g id="SONG_NAME">%1$s</xliff:g> ગીત ચાલી રહ્યું છે"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>માંથી <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> ચાલી રહી છે"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"ચલાવો"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"થોભાવો"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"પહેલાનો ટ્રૅક"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"સ્પીકર અને ડિસ્પ્લે"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"સૂચવેલા ડિવાઇસ"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"મીડિયાને બીજા ડિવાઇસ પર ખસેડવા માટે તમારું શેર કરેલું સત્ર રોકો"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"રોકો"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"બ્રોડકાસ્ટ પ્રક્રિયાની કામ કરવાની રીત"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"બ્રોડકાસ્ટ કરો"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"સુસંગત બ્લૂટૂથ ડિવાઇસ ધરાવતા નજીકના લોકો તમે જે મીડિયા બ્રોડકાસ્ટ કરી રહ્યાં છો તે સાંભળી શકે છે"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"સાચવી શકતા નથી. ફરી પ્રયાસ કરો."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"સાચવી શકતા નથી."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"ઓછામાં ઓછા 4 અક્ષરનો ઉપયોગ કરો"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"16 કરતાં ઓછા અક્ષરનો ઉપયોગ કરો"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g> કરતાં ઓછા અક્ષરનો ઉપયોગ કરો"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"બિલ્ડ નંબર"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"બિલ્ડ નંબર ક્લિપબૉર્ડ પર કૉપિ કર્યો."</string>
     <string name="basic_status" msgid="2315371112182658176">"વાતચીત ખોલો"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"તમારું બૅટરી મીટર વાંચવામાં સમસ્યા આવી"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"વધુ માહિતી માટે ટૅપ કરો"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"કોઈ અલાર્મ સેટ નથી"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"સ્ક્રીન લૉક દાખલ કરો"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"ફિંગરપ્રિન્ટ સેન્સર"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"ખાતરી કરો"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"ડિવાઇસ અનલૉક કરો"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant સાંભળી રહ્યું છે"</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="note_task_button_label" msgid="8718616095800343136">"નોંધ લેવી"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"નોંધ લેવી"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"નોંધ લેવી, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"વધુ જાણો"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"<xliff:g id="URL">%s</xliff:g> પરથી વધુ જાણો"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> ખોલો"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• ઍપનું સેટઅપ કરેલું છે"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• ઓછામાં ઓછું એક કાર્ડ વૉલેટમાં ઉમેરેલું છે"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• કૅમેરા ઍપ ઇન્સ્ટૉલ કરી છે"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• ઍપનું સેટઅપ કરેલું છે"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• ઓછામાં ઓછું એક ડિવાઇસ ઉપલબ્ધ છે"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Wallet ઍપને શૉર્ટકટ તરીકે ઉમેરવા માટે, ખાતરી કરો કે ઍપ ઇન્સ્ટૉલ કરેલી હોય"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Wallet ઍપને શૉર્ટકટ તરીકે ઉમેરવા માટે, ખાતરી કરો કે ઓછામાં ઓછું એક કાર્ડ ઉમેરવામાં આવ્યું હોય"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR કોડ સ્કૅનરને શૉર્ટકટ તરીકે ઉમેરવા માટે, ખાતરી કરો કે કૅમેરા ઍપ ઇન્સ્ટૉલ કરેલી હોય"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home ઍપને શૉર્ટકટ તરીકે ઉમેરવા માટે, ખાતરી કરો કે ઍપ ઇન્સ્ટૉલ કરેલી હોય"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• ઓછામાં ઓછું એક ડિવાઇસ ઉપલબ્ધ છે"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"નોંધ લેવાના શૉર્ટકટનો ઉપયોગ કરવા માટે, નોંધ માટેની ડિફૉલ્ટ ઍપ પસંદ કરો"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"ઍપ પસંદ કરો"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"શૉર્ટકટને ટચ વડે પળભર દબાવી રાખો"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"રદ કરો"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"હમણાં સ્ક્રીન સ્વિચ કરો"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"તમારા સ્ટાઇલસને ચાર્જર સાથે કનેક્ટ કરો"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"સ્ટાઇલસની બૅટરીમાં ચાર્જ ઓછો છે"</string>
     <string name="video_camera" msgid="7654002575156149298">"વીડિયો કૅમેરા"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"આ પ્રોફાઇલ પરથી કૉલ કરી શકતા નથી"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"તમારી ઑફિસની પૉલિસી તમને માત્ર ઑફિસની પ્રોફાઇલ પરથી જ ફોન કૉલ કરવાની મંજૂરી આપે છે"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"કોઈ વ્યક્તિગત ઍપ પરથી કૉલ કરી શકાશે નહીં"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"તમારી સંસ્થા તમને માત્ર ઑફિસ માટેની ઍપ પરથી કૉલ કરવાની મંજૂરી આપે છે"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"ઑફિસની પ્રોફાઇલ પર સ્વિચ કરો"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"બંધ કરો"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"ઑફિસ માટેની કોઈ ફોન ઍપ ઇન્સ્ટૉલ કરો"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"રદ કરો"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"લૉક સ્ક્રીન કસ્ટમાઇઝ કરો"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"લૉક સ્ક્રીનને કસ્ટમાઇઝ કરવા માટે અનલૉક કરો"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"વાઇ-ફાઇ ઉપલબ્ધ નથી"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"કૅમેરા બ્લૉક કરેલો છે"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"કૅમેરા અને માઇક્રોફોન બ્લૉક કરેલા છે"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"માઇક્રોફોન બ્લૉક કરેલો છે"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"પ્રાધાન્યતા મોડ ચાલુ છે"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant સક્રિય છે"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"સેટિંગમાં નોંધની ડિફૉલ્ટ ઍપ સેટ કરો"</string>
+    <string name="install_app" msgid="5066668100199613936">"ઍપ ઇન્સ્ટૉલ કરો"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"માઇક્રોફોન અને કૅમેરા"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"તાજેતરનો ઍપનો વપરાશ"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"તાજેતરનો ઍક્સેસ મેનેજ કરો"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"થઈ ગયું"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"મોટું કરો અને વિકલ્પો બતાવો"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"નાનું કરો"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"આ ઍપ બંધ કરો"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> બંધ છે"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"સેવા મેનેજ કરો"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"ઍક્સેસ મેનેજ કરો"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"ફોન કૉલ દ્વારા ઉપયોગ ચાલુ છે"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"તાજેતરમાં ફોન કૉલમાં ઉપયોગ કરવામાં આવ્યો"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> દ્વારા ઉપયોગ ચાલુ છે"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"<xliff:g id="APP_NAME">%1$s</xliff:g> દ્વારા તાજેતરમાં ઉપયોગ કરવામાં આવ્યો"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) દ્વારા ઉપયોગ ચાલુ છે"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) દ્વારા તાજેતરમાં ઉપયોગ કરવામાં આવ્યો"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) દ્વારા ઉપયોગ ચાલુ છે"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) દ્વારા તાજેતરમાં ઉપયોગ કરવામાં આવ્યો"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-gu/strings_tv.xml b/packages/SystemUI/res/values-gu/strings_tv.xml
deleted file mode 100644
index 096a93a..0000000
--- a/packages/SystemUI/res/values-gu/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN કનેક્ટ કરેલું છે"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN ડિસ્કનેક્ટ કરેલું છે"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> મારફતે"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"નોટિફિકેશન"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"કોઈ નોટિફિકેશન નથી"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"માઇક્રોફોનનું રેકોર્ડિંગ ચાલુ છે"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"કૅમેરાનું રેકોર્ડિંગ ચાલુ છે"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"કૅમેરા અને માઇક્રોફોનનું રેકોર્ડિંગ ચાલુ છે"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"માઇક્રોફોનનું રેકોર્ડિંગ બંધ થઈ ગયું"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"કૅમેરાનું રેકોર્ડિંગ બંધ થઈ ગયું"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"કૅમેરા અને માઇક્રોફોનનું રેકોર્ડિંગ બંધ થઈ ગયું"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"સ્ક્રીન રેકોર્ડિંગ શરૂ થયું"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"સ્ક્રીન રેકોર્ડિંગ બંધ કર્યું"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 946b193..091dd75 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -96,31 +96,31 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> को इस स्क्रीनशॉट का पता चला है."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> और खुले हुए अन्य ऐप्लिकेशन को इस स्क्रीनशॉट का पता चला है."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"नोट में जोड़ें"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"स्क्रीन रिकॉर्डर"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"स्क्रीन रिकॉर्डर"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"स्क्रीन रिकॉर्डिंग को प्रोसेस किया जा रहा है"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"स्क्रीन रिकॉर्ड सेशन के लिए जारी सूचना"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"क्या आपको रिकॉर्डिंग शुरू करनी है?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"रिकॉर्ड करते समय, Android सिस्टम आपकी स्क्रीन पर दिखने वाली या चलाई जाने वाली संवेदनशील जानकारी को कैप्चर कर सकता है. इसमें पासवर्ड, पैसे चुकाने से जुड़ी जानकारी, फ़ोटो, मैसेज, और ऑडियो शामिल हैं."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"पूरी स्क्रीन रिकॉर्ड करें"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"सिर्फ़ एक ऐप्लिकेशन रिकॉर्ड करें"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Android के पास, रिकॉर्ड करने के दौरान, स्क्रीन पर दिख रही हर चीज़ या डिवाइस पर चल रहे हर मीडिया का ऐक्सेस होता है. इसलिए, शेयर, रिकॉर्ड या कास्ट करते समय, पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज या किसी और संवेदनशील जानकारी को लेकर खास सावधानी बरतें."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"कोई ऐप्लिकेशन रिकॉर्ड करने के दौरान, Android के पास उस पर दिख रही हर चीज़ या उस पर चल रहे हर मीडिया का ऐक्सेस होता है. इसलिए, पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज या किसी और संवेदनशील जानकारी को लेकर खास सावधानी बरतें."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"रिकॉर्ड करना शुरू करें"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"क्या स्क्रीन रिकॉर्ड करनी है?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"रिकॉर्ड करते समय, Android के पास स्क्रीन पर दिख रहे कॉन्टेंट या डिवाइस पर चल रहे हर मीडिया का ऐक्सेस होता है. इसलिए, पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज, फ़ोटो, और डिवाइस पर चल रहे ऑडियो और वीडियो को लेकर सावधानी बरतें."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"किसी ऐप्लिकेशन को रिकॉर्ड करते समय, Android के पास उस ऐप्लिकेशन पर दिख रहे कॉन्टेंट या उस पर चल रहे हर मीडिया का ऐक्सेस होता है. इसलिए, पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज, फ़ोटो, और डिवाइस पर चल रहे ऑडियो और वीडियो को लेकर सावधानी बरतें."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"रिकॉर्ड करें"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"ऑडियो रिकॉर्ड करें"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"डिवाइस ऑडियो"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"आपके डिवाइस से आने वाली आवाज़ जैसे कि संगीत, कॉल, और रिंगटोन"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"माइक्रोफ़ोन"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"डिवाइस ऑडियो और माइक्रोफ़ोन"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"शुरू करें"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"शुरू करें"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"स्क्रीन को रिकॉर्ड किया जा रहा है"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"स्क्रीन और ऑडियो, दोनों रिकॉर्ड हो रहे हैं"</string>
-    <string name="screenrecord_taps_label" msgid="1595690528298857649">"स्क्रीन को कहां छुआ गया, ये दिखाएं"</string>
+    <string name="screenrecord_taps_label" msgid="1595690528298857649">"स्क्रीन को कहां-कहां छुआ गया, यह दिखाएं"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"रोकें"</string>
     <string name="screenrecord_share_label" msgid="5025590804030086930">"शेयर करें"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"स्क्रीन रिकॉर्डिंग सेव की गई"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"देखने के लिए टैप करें"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"स्क्रीन रिकॉर्डिंग मिटाने में गड़बड़ी हुई"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"स्क्रीन रिकॉर्डिंग सेव करते समय गड़बड़ी हुई"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"स्क्रीन को रिकॉर्ड करने में गड़बड़ी आ रही है"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"फ़ुल स्क्रीन मोड पर देखा जा रहा है"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"बाहर निकलने के लिए, सबसे ऊपर से नीचे की ओर स्वाइप करें."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"ठीक है"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"वापस जाएं"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"होम"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"मेन्यू"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"चेहरे की पुष्टि हो गई"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"पुष्टि हो गई"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"\'पुष्टि करें\' पर टैप करके पूरा करें"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"चेहरे से अनलॉक किया. जारी रखने के लिए, अनलॉक आइकॉन को दबाएं."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"चेहरे से अनलॉक किया गया"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"चेहरे से अनलॉक किया गया. जारी रखने के लिए टैप करें."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"चेहरे की पहचान हो गई. जारी रखने के लिए टैप करें."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"चेहरे की पहचान हो गई. जारी रखने के लिए अनलॉक आइकॉन को टैप करें."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"पुष्टि हो गई"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"पुष्टि करने की प्रोसेस को रद्द करें"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"पिन इस्तेमाल करें"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"पैटर्न इस्तेमाल करें"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"पासवर्ड इस्तेमाल करें"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"अगर आप फिर से गलत पैटर्न डालते हैं, तो आपकी वर्क प्रोफ़ाइल और उसका डेटा मिटा दिया जाएगा."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"अगर आप फिर से गलत पिन डालते हैं, तो आपकी वर्क प्रोफ़ाइल और उसका डेटा मिटा दिया जाएगा."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"अगर आप फिर से गलत पासवर्ड डालते हैं, तो आपकी वर्क प्रोफ़ाइल और उसका डेटा मिटा दिया जाएगा."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"सेट अप करें"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"अभी नहीं"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"सिस्टम की सुरक्षा और परफ़ॉर्मेंस को बेहतर बनाने के लिए यह ज़रूरी है"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"फ़िंगरप्रिंट अनलॉक की सुविधा दोबारा सेट अप करें"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"फ़िंगरप्रिंट अनलॉक"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"फ़िंगरप्रिंट अनलॉक की सुविधा सेट अप करें"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"फ़िंगरप्रिंट अनलॉक की सुविधा दोबारा सेट अप करने के लिए, फ़िंगरप्रिंट की मौजूदा इमेज और मॉडल मिटा दिए जाएंगे.\n\nइसके बाद, फ़िंगरप्रिंट का इस्तेमाल करके, फ़ोन को अनलॉक करने या अपनी पहचान की पुष्टि करने के लिए, आपको फ़िंगरप्रिंट अनलॉक की सुविधा को दोबारा सेट अप करना होगा."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"फ़िंगरप्रिंट अनलॉक की सुविधा दोबारा सेट अप करने के लिए, फ़िंगरप्रिंट की मौजूदा इमेज और मॉडल को मिटा दिया जाएगा.\n\nइसके बाद, फ़िंगरप्रिंट का इस्तेमाल करके, फ़ोन को अनलॉक करने या अपनी पहचान की पुष्टि करने के लिए, आपको फ़िंगरप्रिंट अनलॉक की सुविधा को दोबारा सेट अप करना होगा."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"फ़िंगरप्रिंट अनलॉक की सुविधा सेट अप नहीं की जा सकी. सेटिंग पर जाकर दोबारा कोशिश करें."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"फ़ेस अनलॉक की सुविधा को दोबारा सेट अप करें"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"फ़ेस अनलॉक"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"फे़स अनलॉक की सुविधा सेट अप करें"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"फ़ेस अनलॉक की सुविधा दोबारा सेट अप करने के लिए, आपके चेहरे के मौजूदा मॉडल को मिटा दिया जाएगा.\n\nअपने चेहरे से फ़ोन अनलॉक करने के लिए, आपको इस सुविधा को दोबारा सेट अप करना होगा."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"फ़ेस अनलॉक की सुविधा सेट अप नहीं की जा सकी. सेटिंग पर जाकर दोबारा कोशिश करें."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"फ़िंगरप्रिंट सेंसर को छुएं"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"जारी रखने के लिए अनलॉक आइकॉन पर टैप करें"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"चेहरे की पहचान नहीं हुई. फ़िंगरप्रिंट इस्तेमाल करें."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ऑडियो"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"हेडसेट"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"इनपुट"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"कान की मशीन"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"कान की मशीनें"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ब्लूटूथ चालू हो रहा है…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ऑटो-रोटेट"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"स्क्रीन का अपने-आप दिशा बदलना (ऑटो-रोटेट)"</string>
@@ -278,7 +294,7 @@
     <string name="quick_settings_cellular_detail_data_used" msgid="6798849610647988987">"<xliff:g id="DATA_USED">%s</xliff:g> उपयोग किया गया"</string>
     <string name="quick_settings_cellular_detail_data_limit" msgid="1791389609409211628">"<xliff:g id="DATA_LIMIT">%s</xliff:g> सीमा"</string>
     <string name="quick_settings_cellular_detail_data_warning" msgid="7957253810481086455">"<xliff:g id="DATA_LIMIT">%s</xliff:g> चेतावनी"</string>
-    <string name="quick_settings_work_mode_label" msgid="6440531507319809121">"ऑफ़िस के काम से जुड़े ऐप्लिकेशन"</string>
+    <string name="quick_settings_work_mode_label" msgid="6440531507319809121">"वर्क ऐप्लिकेशन"</string>
     <string name="quick_settings_night_display_label" msgid="8180030659141778180">"नाइट लाइट"</string>
     <string name="quick_settings_night_secondary_label_on_at_sunset" msgid="3358706312129866626">"शाम को चालू की जाएगी"</string>
     <string name="quick_settings_night_secondary_label_until_sunrise" msgid="4063448287758262485">"सुबह तक चालू रहेगी"</string>
@@ -306,9 +322,9 @@
     <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"क्या आपको डिवाइस का माइक्रोफ़ोन अनब्लॉक करना है?"</string>
     <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"क्या आपको डिवाइस का कैमरा अनब्लॉक करना है?"</string>
     <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"क्या आप डिवाइस का कैमरा और माइक्रोफ़ोन अनब्लॉक करना चाहते हैं?"</string>
-    <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"ऐसा करने से, माइक्रोफ़ोन का ऐक्सेस उन सभी ऐप्लिकेशन और सेवाओं के लिए अनब्लॉक हो जाएगा जिन्हें माइक्रोफ़ोन का इस्तेमाल करने की अनुमति दी गई है."</string>
-    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"ऐसा करने से, कैमरे का ऐक्सेस उन सभी ऐप्लिकेशन और सेवाओं के लिए अनब्लॉक हो जाएगा जिन्हें कैमरे का इस्तेमाल करने की अनुमति दी गई है."</string>
-    <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"ऐसा करने से, कैमरा या माइक्रोफ़ोन का ऐक्सेस उन सभी ऐप्लिकेशन और सेवाओं के लिए अनब्लॉक हो जाएगा जिन्हें ये इस्तेमाल करने की अनुमति है."</string>
+    <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"ऐसा करने से, सभी ऐप्लिकेशन और सेवाओं के लिए माइक्रोफ़ोन का ऐक्सेस अनब्लॉक हो जाएगा और वे इसका इस्तेमाल कर पाएंगी."</string>
+    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"ऐसा करने से, सभी ऐप्लिकेशन और सेवाओं के लिए कैमरे का ऐक्सेस अनब्लॉक हो जाएगा और वे इसका इस्तेमाल कर पाएंगी."</string>
+    <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"ऐसा करने से, सभी ऐप्लिकेशन और सेवाओं के लिए कैमरे या माइक्रोफ़ोन का ऐक्सेस अनब्लॉक हो जाएगा और वे इनका इस्तेमाल कर पाएंगी."</string>
     <string name="sensor_privacy_start_use_mic_blocked_dialog_title" msgid="2640140287496469689">"माइक्रोफ़ोन को ब्लॉक किया गया है"</string>
     <string name="sensor_privacy_start_use_camera_blocked_dialog_title" msgid="7398084286822440384">"कैमरे को ब्लॉक किया गया है"</string>
     <string name="sensor_privacy_start_use_mic_camera_blocked_dialog_title" msgid="195236134743281973">"माइक्रोफ़ोन और कैमरे को ब्लॉक किया गया है"</string>
@@ -338,7 +354,7 @@
     <string name="zen_silence_introduction" msgid="6117517737057344014">"इससे अलार्म, संगीत, वीडियो और गेम सहित सभी आवाज़ और कंपन (वाइब्रेशन) रोक दिए जाते हैं."</string>
     <string name="notification_tap_again" msgid="4477318164947497249">"खोलने के लिए फिर से टैप करें"</string>
     <string name="tap_again" msgid="1315420114387908655">"फिर से टैप करें"</string>
-    <string name="keyguard_unlock" msgid="8031975796351361601">"खोलने के लिए ऊपर स्वाइप करें"</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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"चेहरे से अनलॉक किया गया"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"चेहरे की पहचान हो गई"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"फिर से कोशिश करने के लिए ऊपर की ओर स्वाइप करें"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"फ़ेस अनलॉक को फिर से आज़माने के लिए ऊपर की ओर स्वाइप करें"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"एनएफ़सी इस्तेमाल करने के लिए स्क्रीन को अनलॉक करें"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"इस डिवाइस का मालिकाना हक आपके संगठन के पास है"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"इस डिवाइस का मालिकाना हक <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> के पास है"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"उपयोगकर्ता निकालें?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"इस उपयोगकर्ता के सभी ऐप और डेटा को हटा दिया जाएगा."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"हटाएं"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"रिकॉर्ड या कास्ट करते समय, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> आपकी स्क्रीन पर दिख रही या आपके डिवाइस पर चलाई जा रही जानकारी ऐक्सेस कर सकता है. इसमें पासवर्ड, पैसे चुकाने का ब्यौरा, फ़ोटो, मैसेज, और चलाए गए ऑडियो जैसी जानकारी शामिल है."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"इस फ़ंक्शन को उपलब्ध कराने वाली सेवा, रिकॉर्ड या कास्ट करते समय, आपकी स्क्रीन पर दिखने वाली या चलाई जाने वाली जानकारी को ऐक्सेस कर सकती है. इसमें पासवर्ड, पेमेंट के तरीके की जानकारी, फ़ोटो, मैसेज, और चलाए जाने वाले ऑडियो शामिल हैं."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"रिकॉर्डिंग या कास्ट करना शुरू करें?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> का इस्तेमाल करके रिकॉर्ड और कास्ट करना शुरू करें?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"क्या आपको शेयर या रिकॉर्ड करने की <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> को अनुमति देनी है?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"पूरी स्क्रीन"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"सिर्फ़ एक ऐप्लिकेशन"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"शेयर, रिकॉर्ड या कास्ट करते समय <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> के पास स्क्रीन पर दिख रही हर चीज़ या डिवाइस पर चल रहे हर मीडिया का ऐक्सेस होता है. इसलिए, पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज या किसी और संवेदनशील जानकारी को लेकर खास सावधानी बरतें."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"शेयर, रिकॉर्ड या कास्ट करते समय, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> के पास उस ऐप्लिकेशन पर दिख रही हर चीज़ या उस पर चल रहे हर मीडिया का ऐक्सेस होता है. इसलिए, पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज या किसी और संवेदनशील जानकारी को लेकर खास सावधानी बरतें."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"जारी रखें"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"ऐप्लिकेशन शेयर करें या उसकी रिकॉर्डिंग करें"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"क्या इस ऐप्लिकेशन को शेयर या रिकॉर्ड करने की अनुमति देनी है?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"शेयर, रिकॉर्ड या कास्ट करते समय, इस ऐप्लिकेशन के पास स्क्रीन पर दिख रही हर चीज़ या डिवाइस पर चल रहे सभी मीडिया का ऐक्सेस होता है. इसलिए, इस दौरान पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज या दूसरी संवेदनशील जानकारी को लेकर खास सावधानी बरतें."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"किसी ऐप्लिकेशन को शेयर, रिकॉर्ड या कास्ट करते समय, इस ऐप्लिकेशन के पास उस ऐप्लिकेशन पर दिख रही हर चीज़ या उस पर चल रहे सभी मीडिया का ऐक्सेस होता है. इसलिए, इस दौरान पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज या दूसरी संवेदनशील जानकारी को लेकर खास सावधानी बरतें."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"रिकॉर्ड या कास्ट करते समय, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> के पास आपकी स्क्रीन पर दिख रही जानकारी या डिवाइस पर चल रहे हर मीडिया का ऐक्सेस होता है. जैसे, पासवर्ड, पेमेंट के तरीके की जानकारी, फ़ोटो, मैसेज, और डिवाइस पर चल रहा ऑडियो."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"क्या मीडिया रिकॉर्ड या कास्ट करना है?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"रिकॉर्ड या कास्ट करते समय, इस सुविधा को उपलब्ध कराने वाली सेवा के पास आपकी स्क्रीन पर दिख रही जानकारी या डिवाइस पर चल रहे हर मीडिया का ऐक्सेस होता है. जैसे, पासवर्ड, पेमेंट के तरीके की जानकारी, फ़ोटो, मैसेज, और डिवाइस पर चल रहा ऑडियो."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"पूरी स्क्रीन"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"सिर्फ़ एक ऐप्लिकेशन"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"रिकॉर्ड या शेयर करने के लिए ऐप्लिकेशन चुनें"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"क्या <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> का इस्तेमाल करके रिकॉर्ड या कास्ट करना है?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"शेयर, रिकॉर्ड या कास्ट करते समय, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> के पास स्क्रीन पर दिख रहे कॉन्टेंट या डिवाइस पर चल रहे हर मीडिया का ऐक्सेस होता है. इसलिए, पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज, फ़ोटो, और डिवाइस पर चल रहे ऑडियो और वीडियो को लेकर सावधानी बरतें."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"किसी ऐप्लिकेशन को शेयर, रिकॉर्ड या कास्ट करते समय, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> के पास उस ऐप्लिकेशन पर दिख रहे कॉन्टेंट या उस पर चल रहे हर मीडिया का ऐक्सेस होता है. इसलिए, पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज, फ़ोटो, और डिवाइस पर चल रहे ऑडियो और वीडियो को लेकर सावधानी बरतें."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"शुरू करें"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"क्या मीडिया कास्ट करना है?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"कास्ट करते समय, Android के पास स्क्रीन पर दिख रहे कॉन्टेंट या डिवाइस पर चल रहे हर मीडिया का ऐक्सेस होता है. इसलिए, पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज, फ़ोटो, और डिवाइस पर चल रहे ऑडियो और वीडियो को लेकर सावधानी बरतें."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"किसी ऐप्लिकेशन को कास्ट करते समय, Android के पास उस ऐप्लिकेशन पर दिख रहे कॉन्टेंट या उस पर चल रहे हर मीडिया का ऐक्सेस होता है. इसलिए, पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज, फ़ोटो, और डिवाइस पर चल रहे ऑडियो और वीडियो को लेकर सावधानी बरतें."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"कास्ट करें"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"क्या मीडिया शेयर करना है?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"शेयर, रिकॉर्ड या कास्ट करते समय, Android के पास स्क्रीन पर दिख रहे कॉन्टेंट या डिवाइस पर चल रहे हर मीडिया का ऐक्सेस होता है. इसलिए, पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज, फ़ोटो, और डिवाइस पर चल रहे ऑडियो और वीडियो को लेकर सावधानी बरतें."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"किसी ऐप्लिकेशन को शेयर, रिकॉर्ड या कास्ट करते समय, Android के पास उस ऐप्लिकेशन पर दिख रहे कॉन्टेंट या उस पर चल रहे हर मीडिया का ऐक्सेस होता है. इसलिए, पासवर्ड, पेमेंट के तरीके की जानकारी, मैसेज, फ़ोटो, और डिवाइस पर चल रहे ऑडियो और वीडियो को लेकर सावधानी बरतें."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"शुरू करें"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"ऐप्लिकेशन स्विच करते समय शेयर करने की प्रोसेस रुक जाती है"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"इसके बजाय, यह ऐप्लिकेशन शेयर करें"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"वापस जाएं"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"ऐप्लिकेशन स्विच करें"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"आपके आईटी एडमिन ने स्क्रीन कैप्चर करने की सुविधा पर रोक लगाई है"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"डिवाइस से जुड़ी नीति के तहत स्क्रीन कैप्चर करने की सुविधा बंद है"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"सभी को हटाएं"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"इस डिवाइस पर एक प्रमाणपत्र अनुमति इंस्टॉल की है. आपके सुरक्षित नेटवर्क ट्रैफ़िक की निगरानी या उसमें बदलाव किया जा सकता है."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"आपके व्यवस्थापक ने नेटवर्क लॉगिंग चालू किया है, जो आपके डिवाइस पर ट्रैफ़िक की निगरानी करता है."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"आपके एडमिन ने नेटवर्क लॉगिंग की सुविधा चालू कर दी है. इससे आपकी वर्क प्रोफ़ाइल पर आने वाले ट्रैफ़िक की निगरानी की जाती है. हालांकि, इससे आपकी निजी प्रोफ़ाइल की निगरानी नहीं की जाती."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"इस डिवाइस को <xliff:g id="VPN_APP">%1$s</xliff:g> के ज़रिए इंटरनेट से कनेक्ट किया गया है. नेटवर्क पर की गई गतिविधि से जुड़ी जानकारी, आपके आईटी एडमिन को दिखती है. इस जानकारी में, ईमेल और ब्राउज़िंग डेटा शामिल है."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"इस डिवाइस को <xliff:g id="VPN_APP">%1$s</xliff:g> के ज़रिए इंटरनेट से कनेक्ट किया गया है. नेटवर्क पर की जाने वाली आपकी गतिविधि, वीपीएन सेवा देने वाली कंपनी को दिखती है. इस जानकारी में ईमेल और ब्राउज़िंग डेटा शामिल हैं."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"इस डिवाइस को <xliff:g id="VPN_APP">%1$s</xliff:g> के ज़रिए इंटरनेट से कनेक्ट किया गया है. नेटवर्क पर की गई गतिविधि से जुड़ी जानकारी, आपके आईटी एडमिन को दिखती है. इस जानकारी में ईमेल और ब्राउज़िंग डेटा शामिल हैं."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"इस डिवाइस को <xliff:g id="VPN_APP_0">%1$s</xliff:g> और <xliff:g id="VPN_APP_1">%2$s</xliff:g> के ज़रिए इंटरनेट से कनेक्ट किया गया है. नेटवर्क पर की गई गतिविधि से जुड़ी जानकारी, आपके आईटी एडमिन को दिखती है. इस जानकारी में, ईमेल और ब्राउज़िंग डेटा शामिल है."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"ऑफ़िस के काम से जुड़े ऐप्लिकेशन, <xliff:g id="VPN_APP">%1$s</xliff:g> के ज़रिए इंटरनेट से कनेक्ट किए गए हैं. ऑफ़िस के काम से जुड़े ऐप्लिकेशन में, नेटवर्क पर की गई गतिविधि से जुड़ी जानकारी आपके आईटी एडमिन और वीपीएन सेवा देने वाले को दिखती है. इस जानकारी में, ईमेल और ब्राउज़िंग डेटा शामिल है."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"आपके निजी ऐप्लिकेशन, <xliff:g id="VPN_APP">%1$s</xliff:g> के ज़रिए इंटरनेट से कनेक्ट किए गए हैं. नेटवर्क पर की गई गतिविधि से जुड़ी जानकारी, वीपीएन सेवा देने वाले को दिखती है. इस जानकारी में, ईमेल और ब्राउज़िंग डेटा शामिल है."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"बंद करें"</string>
     <string name="sound_settings" msgid="8874581353127418308">"आवाज़ और वाइब्रेशन"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"सेटिंग"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"बेहतर ऑडियो के लिए वॉल्यूम का लेवल कम किया गया"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"सुझाए गए समय से ज़्यादा देर तक वॉल्यूम का लेवल ज़्यादा रहा है"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"आवाज़ को कम करके, सुरक्षित लेवल पर सेट कर दिया गया है"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"हेडफ़ोन की आवाज़ सुझाए गए समय के बाद भी ज़्यादा रही"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"इस हफ़्ते के लिए हेडफ़ोन की आवाज़, सुझाई गई सीमा से ज़्यादा हो गई है"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"सुनना जारी रखें"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"आवाज़ कम करें"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"ऐप्लिकेशन पिन किया गया है"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"इससे वह तब तक दिखता रहता है, जब तक कि आप उसे अनपिन नहीं कर देते. अनपिन करने के लिए, \'वापस जाएं\' और \'खास जानकारी\' को दबाकर रखें."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"इससे वह तब तक दिखाई देती है जब तक आप उसे अनपिन नहीं कर देते. अनपिन करने के लिए, होम और वापस जाएं वाले बटन को दबाकर रखें."</string>
@@ -545,7 +575,7 @@
     <string name="notification_silence_title" msgid="8608090968400832335">"बिना आवाज़ के सूचनाएं दिखाएं"</string>
     <string name="notification_alert_title" msgid="3656229781017543655">"डिफ़ॉल्ट"</string>
     <string name="notification_automatic_title" msgid="3745465364578762652">"अपने-आप"</string>
-    <string name="notification_channel_summary_low" msgid="4860617986908931158">"किसी तरह की आवाज़ या वाइब्रेशन न हो"</string>
+    <string name="notification_channel_summary_low" msgid="4860617986908931158">"आवाज़ या वाइब्रेशन न हो"</string>
     <string name="notification_conversation_summary_low" msgid="1734433426085468009">"इससे किसी तरह की आवाज़ या वाइब्रेशन नहीं होता और बातचीत, सेक्शन में सबसे नीचे दिखती है"</string>
     <string name="notification_channel_summary_default" msgid="777294388712200605">"डिवाइस की सेटिंग के आधार पर, सूचना आने पर घंटी बज सकती है या वाइब्रेशन हो सकता है"</string>
     <string name="notification_channel_summary_default_with_bubbles" msgid="3482483084451555344">"डिवाइस की सेटिंग के आधार पर, सूचना आने पर घंटी बज सकती है या वाइब्रेशन हो सकता है. <xliff:g id="APP_NAME">%1$s</xliff:g> पर होने वाली बातचीत, डिफ़ॉल्ट रूप से बबल के तौर पर दिखती है."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"पावर मेन्यू"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"पेज <xliff:g id="ID_2">%2$d</xliff:g> में से <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"लॉक स्‍क्रीन"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"गर्म होने की वजह से फ़ोन बंद हुआ"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"आपका फ़ोन सामान्य रूप से काम कर रहा है.\nज़्यादा जानकारी के लिए टैप करें"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"फ़ोन बहुत गर्म हो गया था, इसलिए ठंडा होने के लिए बंद हो गया. फ़ोन अब अच्छे से चल रहा है.\n\nफ़ोन तब बहुत गर्म हो सकता है जब आप:\n	• ज़्यादा रिसॉर्स का इस्तेमाल करने वाले ऐप्लिकेशन चलाते हैं (जैसे गेमिंग, वीडियो या नेविगेशन ऐप्लिकेशन)\n	• बड़ी फ़ाइलें डाउनलोड या अपलोड करते हैं\n	• ज़्यादा तापमान में फ़ोन का इस्तेमाल करते हैं"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"डिवाइस के रखरखाव के तरीके देखें"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"फ़ोन गर्म हो रहा है"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"फ़ोन के ठंडा होने तक कुछ सुविधाएं काम नहीं करतीं.\nज़्यादा जानकारी के लिए टैप करें"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"आपका फ़ोन अपने आप ठंडा होने की कोशिश करेगा. आप अब भी अपने फ़ोन का उपयोग कर सकते हैं, लेकिन हो सकता है कि यह धीमी गति से चले.\n\nठंडा हो जाने पर आपका फ़ोन सामान्य रूप से चलेगा."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"डिवाइस के रखरखाव के तरीके देखें"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"डिवाइस को अनप्लग करें"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"आपका डिवाइस चार्जिंग पोर्ट के पास गर्म हो रहा है. अगर डिवाइस चार्जर या यूएसबी ऐक्सेसरी से कनेक्ट है, तो उसे अनप्लग करें. साथ ही, ध्यान रखें कि केबल भी गर्म हो सकती है."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"फ़ुल स्क्रीन को ज़ूम करें"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"स्क्रीन के किसी हिस्से को ज़ूम करें"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"ज़ूम करने की सुविधा वाली सेटिंग खोलें"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"ज़ूम करने की सुविधा वाली सेटिंग को बंद करें"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"साइज़ बदलने के लिए, कोने को खींचें और छोड़ें"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"तिरछी दिशा में स्क्रोल करने की अनुमति दें"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"साइज़ बदलें"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"पसंदीदा से हटाएं"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"इसे <xliff:g id="NUMBER">%d</xliff:g> नंबर पर ले जाएं"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"कंट्राेल"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"फटाफट ऐक्सेस करने के लिए, डिवाइस कंट्रोल को चुनें"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"कंट्रोल का क्रम बदलने के लिए उन्हें दबाकर रखें और खींचें"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"सभी कंट्रोल हटा दिए गए"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"बदलाव सेव नहीं किए गए"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"दूसरे ऐप्लिकेशन देखें"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"फिर से व्यवस्थित करें"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"कंट्रोल बटन जोड़ें"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"कंट्रोल जोड़ें"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"बदलाव करने के लिए वापस जाएं"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"कंट्रोल लोड नहीं किए जा सके. <xliff:g id="APP">%s</xliff:g> ऐप्लिकेशन देखें, ताकि यह पक्का किया जा सके कि ऐप्लिकेशन की सेटिंग में कोई बदलाव नहीं हुआ है."</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"इस सेटिंग के साथ काम करने वाले कंट्रोल उपलब्ध नहीं हैं"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"कोई और पिन आज़माएं"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> में बदलाव के लिए पुष्टि करें"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"ज़्यादा देखने के लिए स्वाइप करें"</string>
+    <string name="retry_face" msgid="416380073082560186">"चेहरे की पुष्टि करने वाली प्रोसेस फिर से करें"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"सुझाव लोड हो रहे हैं"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"मीडिया"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"क्या <xliff:g id="APP_NAME">%1$s</xliff:g> के लिए, इस मीडिया कंट्रोल को छिपाना है?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"सेटिंग"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> पर, <xliff:g id="ARTIST_NAME">%2$s</xliff:g> का <xliff:g id="SONG_NAME">%1$s</xliff:g> चल रहा है"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g> में से <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> चालू है"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"चलाएं"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"रोकें"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"पिछला ट्रैक"</string>
@@ -963,12 +989,14 @@
     <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>
+    <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"कास्ट करना बंद करें"</string>
     <string name="media_output_dialog_accessibility_title" msgid="4681741064190167888">"ऑडियो आउटपुट के लिए उपलब्ध डिवाइस."</string>
     <string name="media_output_dialog_accessibility_seekbar" msgid="5332843993805568978">"वॉल्यूम"</string>
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"स्पीकर और डिसप्ले"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"सुझाए गए डिवाइस"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"मीडिया को किसी दूसरे डिवाइस में ट्रांसफ़र करने के लिए, अपने शेयर किए गए सेशन को बंद करें"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"बंद करें"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"ब्रॉडकास्ट करने की सुविधा कैसे काम करती है"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"ब्रॉडकास्ट करें"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"आपके आस-पास मौजूद लोग, ब्रॉडकास्ट किए जा रहे मीडिया को सुन सकते हैं. हालांकि, इसके लिए उनके पास ऐसे ब्लूटूथ डिवाइस होने चाहिए जिन पर मीडिया चलाया जा सके"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"सेव नहीं किया जा सका. फिर से कोशिश करें."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"सेव नहीं किया जा सका."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"कम से कम चार वर्ण इस्तेमाल करें"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"16 वर्ण से कम इस्तेमाल करें"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g> वर्ण से कम इस्तेमाल करें"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"बिल्ड नंबर"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"बिल्ड नंबर को क्लिपबोर्ड पर कॉपी किया गया."</string>
     <string name="basic_status" msgid="2315371112182658176">"ऐसी बातचीत जिसमें इंटरैक्शन डेटा मौजूद नहीं है"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"आपके डिवाइस के बैटरी मीटर की रीडिंग लेने में समस्या आ रही है"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"ज़्यादा जानकारी के लिए टैप करें"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"कोई अलार्म सेट नहीं है"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"स्क्रीन लॉक डालें"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"फ़िंगरप्रिंट सेंसर"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"पुष्टि करें"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"डिवाइस की होम स्क्रीन पर जाएं"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant सुन रही है"</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="note_task_button_label" msgid="8718616095800343136">"नोट बनाएं"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"नोट बनाएं"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"नोट लेने के लिए, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"ज़्यादा जानें"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"ज़्यादा जानने के लिए <xliff:g id="URL">%s</xliff:g> पर जाएं"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> खोलें"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• ऐप्लिकेशन को सेट अप किया गया है"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Wallet में कम से कम एक कार्ड जोड़ा गया है"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• कैमरा ऐप्लिकेशन इंस्टॉल किया गया है"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• ऐप्लिकेशन को सेट अप किया गया है"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• कम से कम एक डिवाइस उपलब्ध है"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Wallet ऐप्लिकेशन को शॉर्टकट के तौर पर जोड़ने के लिए, पक्का करें कि ऐप्लिकेशन इंस्टॉल किया गया हो"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Wallet ऐप्लिकेशन को शॉर्टकट के तौर पर जोड़ने के लिए, पक्का करें कि कम से कम एक कार्ड जोड़ा गया हो"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"क्यूआर कोड स्कैनर को शॉर्टकट के तौर पर जोड़ने के लिए, पक्का करें कि कैमरा ऐप्लिकेशन इंस्टॉल किया गया हो"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home ऐप्लिकेशन को शॉर्टकट के तौर पर जोड़ने के लिए, पक्का करें कि ऐप्लिकेशन इंस्टॉल किया गया हो"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• कम से कम एक डिवाइस उपलब्ध है"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"नोट लेने से जुड़ा शॉर्टकट इस्तेमाल करने के लिए, नोट लेने का डिफ़ॉल्ट ऐप्लिकेशन चुनें"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"ऐप्लिकेशन चुनें"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"शॉर्टकट को दबाकर रखें"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"रद्द करें"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"अब स्क्रीन स्विच करें"</string>
@@ -1119,11 +1151,12 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"अपने स्टाइलस को चार्ज करें"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"स्टाइलस की बैटरी कम है"</string>
     <string name="video_camera" msgid="7654002575156149298">"वीडियो कैमरा"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"यह प्रोफ़ाइल होने पर कॉल नहीं की जा सकती"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"ऑफ़िस की नीति के तहत, वर्क प्रोफ़ाइल होने पर ही फ़ोन कॉल किए जा सकते हैं"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"निजी ऐप्लिकेशन से कॉल नहीं की जा सकती"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"आपके संगठन ने, सिर्फ़ वर्क ऐप्लिकेशन से कॉल करने की अनुमति दी है"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"वर्क प्रोफ़ाइल पर स्विच करें"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"बंद करें"</string>
-    <string name="lock_screen_settings" msgid="6152703934761402399">"लॉक स्क्रीन को कस्टमाइज़ करें"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"वर्क प्रोफ़ाइल वाला फ़ोन ऐप्लिकेशन इंस्टॉल करें"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"रद्द करें"</string>
+    <string name="lock_screen_settings" msgid="6152703934761402399">"लॉक स्क्रीन को पसंद के मुताबिक बनाएं"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"लॉक स्क्रीन को पसंद के मुताबिक बनाने के लिए अनलॉक करें"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"वाई-फ़ाई उपलब्ध नहीं है"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"कैमरे का ऐक्सेस नहीं है"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"प्राथमिकता मोड चालू है"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant आपकी बातें सुन रही है"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"सेटिंग में जाकर, नोट लेने की सुविधा देने वाले ऐप्लिकेशन को डिफ़ॉल्ट के तौर पर सेट करें"</string>
+    <string name="install_app" msgid="5066668100199613936">"ऐप्लिकेशन इंस्टॉल करें"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"माइक्रोफ़ोन और कैमरा"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"हाल ही में इस्तेमाल करने वाला ऐप्लिकेशन"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"हाल ही का ऐक्सेस देखें"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"हो गया"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"बड़ा करें और विकल्प दिखाएं"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"छोटा करें"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"इस ऐप्लिकेशन को बंद करें"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> बंद हो गया है"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"सेवा मैनेज करें"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"ऐक्सेस मैनेज करें"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"फ़ोन कॉल पर इस्तेमाल किया जा रहा है"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"हाल ही में, फ़ोन कॉल में इस्तेमाल किया गया"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> पर इस्तेमाल किया जा रहा है"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"हाल ही में, <xliff:g id="APP_NAME">%1$s</xliff:g> ने इस्तेमाल किया"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) पर इस्तेमाल किया जा रहा है"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"हाल ही में, <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ने इस्तेमाल किया"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) पर इस्तेमाल किया जा रहा है"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"हाल ही में, <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ने इस्तेमाल किया"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hi/strings_tv.xml b/packages/SystemUI/res/values-hi/strings_tv.xml
deleted file mode 100644
index 0e5e1225..0000000
--- a/packages/SystemUI/res/values-hi/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"वीपीएन कनेक्ट हो गया है"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"वीपीएन डिसकनेक्ट हो गया है"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> के ज़रिए"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"सूचनाएं"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"कोई सूचना नहीं है"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"माइक्रोफ़ोन रिकॉर्ड कर रहा है"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"कैमरा रिकॉर्ड कर रहा है"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"कैमरा और माइक्रोफ़ोन रिकॉर्ड कर रहे हैं"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"माइक्रोफ़ोन ने रिकॉर्ड करना बंद कर दिया है"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"कैमरे ने रिकॉर्ड करना बंद कर दिया है"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"कैमरे और माइक्रोफ़ोन ने रिकॉर्ड करना बंद कर दिया है"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"स्क्रीन रिकॉर्डिंग शुरू की गई"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"स्क्रीन रिकॉर्डिंग बंद की गई"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 8a13b54..baf74d2 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -53,7 +53,7 @@
     <string name="usb_debugging_allow" msgid="1722643858015321328">"Dopusti"</string>
     <string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"Otklanjanje pogrešaka putem USB-a nije dopušteno"</string>
     <string name="usb_debugging_secondary_user_message" msgid="1888835696965417845">"Korisnik koji je trenutačno prijavljen na ovaj uređaj ne može uključiti otklanjanje pogrešaka putem USB-a. Da biste upotrebljavali tu značajku, prijeđite na korisnika s administratorskim pravima."</string>
-    <string name="hdmi_cec_set_menu_language_title" msgid="1259765420091503742">"Želite li promijeniti jezik sustava u <xliff:g id="LANGUAGE">%1$s</xliff:g>?"</string>
+    <string name="hdmi_cec_set_menu_language_title" msgid="1259765420091503742">"Želite li jezik sustava promijeniti na <xliff:g id="LANGUAGE">%1$s</xliff:g>?"</string>
     <string name="hdmi_cec_set_menu_language_description" msgid="8176716678074126619">"Drugi uređaj zatražio je promjenu jezika sustava"</string>
     <string name="hdmi_cec_set_menu_language_accept" msgid="2513689457281009578">"Promijeni jezik"</string>
     <string name="hdmi_cec_set_menu_language_decline" msgid="7650721096558646011">"Zadrži trenutačni jezik"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"Aplikacija <xliff:g id="APPNAME">%1$s</xliff:g> otkrila je ovu snimku zaslona."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> i druge otvorene aplikacije otkrile su ovu snimku zaslona."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Dodaj bilješci"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Snimač zaslona"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Snimač zaslona"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Obrada snimanja zaslona"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Tekuća obavijest za sesiju snimanja zaslona"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Želite li pokrenuti snimanje?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Za vrijeme snimanja sustav Android može snimiti osjetljive podatke koji su vidljivi na vašem zaslonu ili se reproduciraju na vašem uređaju. To uključuje zaporke, podatke o plaćanju, fotografije, poruke i zvuk."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Snimi cijeli zaslon"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Snimi jednu aplikaciju"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Dok snimate, Android ima pristup svemu što je vidljivo na vašem zaslonu ili se reproducira na vašem uređaju. Stoga pazite na zaporke, podatke o plaćanju, poruke i druge osjetljive podatke."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Dok snimate aplikaciju, Android ima pristup svemu što se prikazuje ili reproducira u toj aplikaciji. Stoga pazite na zaporke, podatke o plaćanju, poruke i druge osjetljive podatke."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Započni snimanje"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Želite li pokrenuti snimanje?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Dok snimate, Android ima pristup svemu što je vidljivo na vašem zaslonu ili se reproducira na vašem uređaju. Stoga pazite na stvari kao što su zaporke, podaci o plaćanju, poruke, fotografije te audio i videozapisi."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Dok snimate aplikaciju, Android ima pristup svemu što se prikazuje ili reproducira u toj aplikaciji. Stoga pazite na stvari kao što su zaporke, podaci o plaćanju, poruke, fotografije te audio i videozapisi."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Pokreni snimanje"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Snimanje zvuka"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Zvuk na uređaju"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Zvuk s vašeg uređaja, poput glazbe, poziva i melodija zvona"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Zvuk na uređaju i mikrofon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Započni"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Pokreni"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Snimanje zaslona"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Snimanje zaslona i zvuka"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Prikaz dodira na zaslonu"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Dijeli"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Snimanje zaslona spremljeno"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Dodirnite za prikaz"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Pogreška prilikom brisanja snimanja zaslona"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Pogreška prilikom spremanja snimke zaslona"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Pogreška prilikom pokretanja snimanja zaslona"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Gledanje preko cijelog zaslona"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Za izlaz prijeđite prstom od vrha prema dolje."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Shvaćam"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Natrag"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Početna"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Izbornik"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Lice je autentificirano"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Potvrđeno"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Dodirnite Potvrdi za dovršetak"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Otključano pomoću lica. Pritisnite ikonu otključavanja da biste nastavili."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Otključano licem"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Otključano pomoću lica. Pritisnite da biste nastavili."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Lice je prepoznato. Pritisnite da biste nastavili."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Lice je prepoznato. Pritisnite ikonu otključavanja da biste nastavili."</string>
-    <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentičnost provjerena"</string>
+    <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentifikacija izvršena"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Otkaži autentifikaciju"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Koristite PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Koristite uzorak"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Koristite zaporku"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Ako pri sljedećem pokušaju unesete netočan uzorak, izbrisat će se vaš poslovni profil i njegovi podaci."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Ako pri sljedećem pokušaju unesete netočan PIN, izbrisat će se vaš poslovni profil i njegovi podaci."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Ako pri sljedećem pokušaju unesete netočnu zaporku, izbrisat će se vaš poslovni profil i njegovi podaci."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Postavi"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Ne sad"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"To je potrebno radi poboljšanja sigurnosti i izvedbe"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Ponovo postavite otključavanje otiskom prsta"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Otključavanje otiskom prsta"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Postavite otključavanje otiskom prsta"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Da biste ponovo postavili otključavanje otiskom prsta, izbrisat će se slike i modeli vašeg trenutačnog otiska prsta.\n\nNakon što se izbrišu, trebat ćete ponovo postaviti otključavanje otiskom prsta kako biste na taj način otključavali telefon ili potvrđivali svoj identitet."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Da biste ponovo postavili otključavanje otiskom prsta, izbrisat će se slike i model vašeg trenutačnog otiska prsta.\n\nNakon što se izbrišu, trebat ćete ponovo postaviti otključavanje otiskom prsta kako biste na taj način otključavali telefon ili potvrđivali svoj identitet."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Postavljanje otključavanja otiskom prsta nije uspjelo. Pokušajte ponovo u postavkama."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Ponovo postavite otključavanje licem"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Otključavanje licem"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Postavljanje otključavanja licem"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Da biste ponovo postavili otključavanje licem, vaš će se trenutačni model lica izbrisati.\n\nTrebat ćete ponovo postaviti tu značajku da biste otključavali telefon licem."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Postavljanje otključavanja licem nije uspjelo. Pokušajte ponovo u postavkama."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Dodirnite senzor otiska prsta"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Pritisnite ikonu otključavanja da biste nastavili"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Prepoznavanje lica nije uspjelo. Upotrijebite otisak prsta."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -199,7 +215,7 @@
     <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Brze postavke."</string>
     <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Brze postavke i zaslon obavijesti."</string>
     <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Zaključavanje zaslona."</string>
-    <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Zaključan zaslon radnog profila"</string>
+    <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Zaključani zaslon radnog profila"</string>
     <string name="accessibility_desc_close" msgid="8293708213442107755">"Zatvaranje"</string>
     <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"potpuna tišina"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="3375848309132140014">"samo alarmi"</string>
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Slušalice"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Unos"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Slušni aparati"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Slušna pomagala"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Uključivanje…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autom. zakretanje"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatsko zakretanje zaslona"</string>
@@ -338,7 +354,7 @@
     <string name="zen_silence_introduction" msgid="6117517737057344014">"To blokira SVE zvukove i vibracije, uključujući alarme, glazbu, videozapise i igre."</string>
     <string name="notification_tap_again" msgid="4477318164947497249">"Dodirnite opet za otvaranje"</string>
     <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" msgid="8031975796351361601">"Prijeđite prstom prema gore za otvaranje"</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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Otključano licem"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Lice je prepoznato"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Prijeđite prstom prema gore za ponovni pokušaj"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Prijeđite prstom prema gore da biste ponovo isprobali otključavanje licem"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Otključajte da biste upotrijebili NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Ovaj uređaj pripada vašoj organizaciji"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Ovaj uređaj pripada organizaciji <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> imat će pristup svim podacima koji su vidljivi na vašem zaslonu ili koji se reproduciraju s vašeg uređaja tijekom snimanja ili emitiranja. To uključuje podatke kao što su zaporke, podaci o plaćanju, fotografije, poruke i audiozapisi koje reproducirate."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Usluga koja pruža ovu funkcionalnost imat će pristup svim podacima koji su vidljivi na vašem zaslonu ili koji se reproduciraju s vašeg uređaja tijekom snimanja ili emitiranja. To uključuje podatke kao što su zaporke, podaci o plaćanju, fotografije, poruke i audiozapisi koje reproducirate."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Želite li pokrenuti snimanje ili emitiranje?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Želite li započeti snimanje ili emitiranje pomoću aplikacije <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Želite li dopustiti aplikaciji <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> da dijeli ili snima?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Cijeli zaslon"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Jedna aplikacija"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Kad dijelite, snimate ili emitirate, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ima pristup svemu što je vidljivo na vašem zaslonu ili se reproducira na vašem uređaju. Stoga pazite na zaporke, podatke o plaćanju, poruke i druge osjetljive podatke."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Kad dijelite, snimate ili emitirate aplikaciju, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ima pristup svemu što se prikazuje ili reproducira u toj aplikaciji. Stoga pazite na zaporke, podatke o plaćanju, poruke i druge osjetljive podatke."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Nastavi"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Dijeljenje ili snimanje aplikacije"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Želite li ovoj aplikaciji omogućiti dijeljenje ili bilježenje?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Kad dijelite, snimate ili emitirate, ova aplikacija ima pristup svemu što je vidljivo na vašem zaslonu ili se reproducira na vašem uređaju. Stoga pazite na zaporke, podatke o plaćanju, poruke i druge osjetljive podatke."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Kad dijelite, snimate ili emitirate aplikaciju, ova aplikacija ima pristup svemu što se prikazuje ili reproducira u toj aplikaciji. Stoga pazite na zaporke, podatke o plaćanju, poruke i druge osjetljive podatke."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> imat će pristup svim podacima koji su vidljivi na vašem zaslonu ili koji se reproduciraju s vašeg uređaja tijekom snimanja ili emitiranja. To uključuje podatke kao što su zaporke, podaci o plaćanju, fotografije, poruke i audiozapisi koje reproducirate."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Želite li pokrenuti snimanje ili emitiranje?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Usluga koja pruža ovu funkciju imat će pristup svim podacima koji su vidljivi na vašem zaslonu ili koji se reproduciraju s vašeg uređaja tijekom snimanja ili emitiranja. To uključuje podatke kao što su zaporke, podaci o plaćanju, fotografije, poruke i audiozapisi koje reproducirate."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Cijeli zaslon"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Jedna aplikacija"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Dijeljenje ili snimanje aplikacije"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Želite li započeti snimanje ili emitiranje pomoću aplikacije <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Kad dijelite, snimate ili emitirate, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ima pristup svemu što je vidljivo na vašem zaslonu ili se reproducira na vašem uređaju. Stoga pazite na stvari kao što su zaporke, podaci o plaćanju, poruke, fotografije te audio i videozapisi."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Kad dijelite, snimate ili emitirate aplikaciju, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ima pristup svemu što se prikazuje ili reproducira u toj aplikaciji. Stoga pazite na stvari kao što su zaporke, podaci o plaćanju, poruke, fotografije te audio i videozapisi."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Pokreni"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Želite li pokrenuti emitiranje?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Kad emitirate, Android ima pristup svemu što je vidljivo na vašem zaslonu ili se reproducira na vašem uređaju. Stoga pazite na stvari kao što su zaporke, podaci o plaćanju, poruke, fotografije te audio i videozapisi."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Kad emitirate aplikaciju, Android ima pristup svemu što se prikazuje ili reproducira u toj aplikaciji. Stoga pazite na stvari kao što su zaporke, podaci o plaćanju, poruke, fotografije te audio i videozapisi."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Pokreni emitiranje"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Želite li pokrenuti dijeljenje?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Kad dijelite, snimate ili emitirate, Android ima pristup svemu što je vidljivo na vašem zaslonu ili se reproducira na vašem uređaju. Stoga pazite na stvari kao što su zaporke, podaci o plaćanju, poruke, fotografije te audio i videozapisi."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Kad dijelite, snimate ili emitirate aplikaciju, Android ima pristup svemu što se prikazuje ili reproducira u toj aplikaciji. Stoga pazite na stvari kao što su zaporke, podaci o plaćanju, poruke, fotografije te audio i videozapisi."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Pokreni"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Dijeljenje pauza tijekom prebacivanja aplikacija"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Umjesto toga podijelite ovu aplikaciju"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Promjena računa"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Prekidač aplikacije"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blokirao vaš IT administrator"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Snimanje zaslona onemogućeno je u skladu s pravilima za uređaje"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Izbriši sve"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Na ovom je uređaju instaliran izdavač certifikata. Vaš sigurni mrežni promet možda se nadzire ili modificira."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Administrator je uključio mrežni zapisnik koji nadzire promet na vašem uređaju."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Administrator je uključio mrežni zapisnik koji prati promet na vašem poslovnom profilu, ali ne i na osobnom profilu."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Uređaj je povezan s internetom putem aplikacije <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaše aktivnosti na mreži, uključujući e-poruke i podatke o pregledavanju, vidljive su IT administratoru."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Uređaj je povezan s internetom putem aplikacije <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaše aktivnosti na mreži, uključujući e-poruke i podatke o pregledavanju, vidljive su davatelju usluge VPN-a."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Uređaj je povezan s internetom putem aplikacije <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaše aktivnosti na mreži, uključujući e-poruke i podatke o pregledavanju, vidljive su IT administratoru."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Uređaj je povezan s internetom putem aplikacija <xliff:g id="VPN_APP_0">%1$s</xliff:g> i <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Vaše aktivnosti na mreži, uključujući e-poruke i podatke o pregledavanju, vidljive su IT administratoru."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Poslovne aplikacije povezane su s internetom putem aplikacije <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaše aktivnosti na mreži u poslovnim aplikacijama, uključujući e-poruke i podatke o pregledavanju, vidljive su IT administratoru i davatelju VPN usluga."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Osobne su aplikacije povezane s internetom putem aplikacije <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaše aktivnosti na mreži, uključujući e-poruke i podatke o pregledavanju, vidljive su davatelju VPN usluga."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"onemogući"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Zvuk i vibracija"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Postavke"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Stišano na sigurniju glasnoću"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Zvuk je bio glasan duže nego što se preporučuje"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Glasnoća je stišana na sigurniju razinu"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Pojačana je glasnoća u slušalicama dulje nego što se preporučuje"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Glasnoća slušalica premašila je sigurno ograničenje za ovaj tjedan"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Nastavite slušati"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Stišaj"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Aplikacija je prikvačena"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Zaslon će tako ostati u prvom planu dok ga ne otkvačite. Dodirnite i zadržite Natrag i Pregled da biste ga otkvačili."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Zaslon će tako ostati u prvom planu dok ga ne otkvačite. Dodirnite gumbe Natrag i Početna i zadržite pritisak da biste ga otkvačili."</string>
@@ -623,7 +653,7 @@
     <string name="keyboard_shortcut_clear_text" msgid="4679927133259287577">"Ukloni tekst"</string>
     <string name="keyboard_shortcut_search_list_title" msgid="1156178106617830429">"Prečaci"</string>
     <string name="keyboard_shortcut_search_list_hint" msgid="5982623262974326746">"Pretražite prečace"</string>
-    <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"Nema nađenih prečaca"</string>
+    <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"Nema nijednog prečaca"</string>
     <string name="keyboard_shortcut_search_category_system" msgid="1151182120757052669">"Sustav"</string>
     <string name="keyboard_shortcut_search_category_input" msgid="5440558509904296233">"Unos"</string>
     <string name="keyboard_shortcut_search_category_open_apps" msgid="1450959949739257562">"Otvaranje aplikacija"</string>
@@ -738,14 +768,8 @@
     <string name="accessibility_quick_settings_edit" msgid="1523745183383815910">"Uređivanje redoslijeda postavki."</string>
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Izbornik tipke za uključivanje/isključivanje"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Stranica <xliff:g id="ID_1">%1$d</xliff:g> od <xliff:g id="ID_2">%2$d</xliff:g>"</string>
-    <string name="tuner_lock_screen" msgid="2267383813241144544">"Zaključan zaslon"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telefon se isključio zbog vrućine"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Telefon sad radi normalno.\nDodirnite za više informacija"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefon se pregrijao, stoga se isključio kako bi se ohladio Telefon sada radi normalno.\n\nTelefon se može pregrijati ako:\n	• upotrebljavate zahtjevne aplikacije (kao što su igre, aplikacije za videozapise ili navigaciju)\n	• preuzimate ili prenosite velike datoteke\n	• upotrebljavate telefon na visokim temperaturama."</string>
+    <string name="tuner_lock_screen" msgid="2267383813241144544">"Zaključani zaslon"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Pročitajte upute za održavanje"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefon se zagrijava"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Neke su značajke ograničene dok se telefon ne ohladi.\nDodirnite za više informacija"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Telefon će se automatski pokušati ohladiti. Možete ga nastaviti koristiti, no mogao bi raditi sporije.\n\nKad se ohladi, radit će normalno."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Pročitajte upute za održavanje"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Iskopčajte uređaj"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Vaš se uređaj zagrijava u blizini priključka za punjenje. Ako je priključen u punjač ili USB uređaj, iskopčajte ga. Pazite jer se i kabel možda zagrijao."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Povećajte cijeli zaslon"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Povećaj dio zaslona"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Otvori postavke povećavanja"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Zatvori postavke povećavanja"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Povucite kut da biste promijenili veličinu"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Dopusti dijagonalno pomicanje"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Promijeni veličinu"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Dodirnite za otvaranje značajki pristupačnosti. Prilagodite ili zamijenite taj gumb u postavkama.\n\n"<annotation id="link">"Pregledajte postavke"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Pomaknite gumb do ruba da biste ga privremeno sakrili"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Poništi"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Uklonjen je prečac za <xliff:g id="FEATURE_NAME">%s</xliff:g>"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Uklonjen je prečac za uslugu <xliff:g id="FEATURE_NAME">%s</xliff:g>"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{Uklonjen je # prečac}one{Uklonjen je # prečac}few{Uklonjena su # prečaca}other{Uklonjeno je # prečaca}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Premjesti u gornji lijevi kut"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Premjesti u gornji desni kut"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"uklonili iz favorita"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Premjestite na položaj <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrole"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Odaberite kontrole uređaja za brzi pristup"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Zadržite i povucite da biste promijenili raspored kontrola"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Sve su kontrole uklonjene"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Promjene nisu spremljene"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Pogledajte ostale aplikacije"</string>
-    <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Promjena rasporeda"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Dodajte kontrole"</string>
+    <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Promijeni raspored"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Dodaj kontrole"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Natrag na uređivanje"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"Kontrole se ne mogu učitati. U aplikaciji <xliff:g id="APP">%s</xliff:g> provjerite da se postavke aplikacije nisu promijenile."</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"Kompatibilne kontrole nisu dostupne"</string>
@@ -903,7 +927,7 @@
     <string name="controls_dialog_message" msgid="342066938390663844">"Preporuka s kanala <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="controls_tile_locked" msgid="731547768182831938">"Uređaj je zaključan"</string>
     <string name="controls_settings_show_controls_dialog_title" msgid="3357852503553809554">"Prikazati uređaje i omogućiti upravljanje njima na zaključanom zaslonu?"</string>
-    <string name="controls_settings_show_controls_dialog_message" msgid="7666211700524587969">"Na zaključan zaslon možete dodati kontrole za svoje vanjske uređaje.\n\nAplikacija vašeg uređaja može vam dopustiti upravljanje nekim uređajima bez otključavanja telefona ili tableta.\n\nPromjene uvijek možete unijeti u Postavkama."</string>
+    <string name="controls_settings_show_controls_dialog_message" msgid="7666211700524587969">"Na zaključani zaslon možete dodati kontrole za svoje vanjske uređaje.\n\nAplikacija vašeg uređaja može vam dopustiti upravljanje nekim uređajima bez otključavanja telefona ili tableta.\n\nPromjene uvijek možete unijeti u Postavkama."</string>
     <string name="controls_settings_trivial_controls_dialog_title" msgid="7593188157655036677">"Upravljati uređajima na zaključanom zaslonu?"</string>
     <string name="controls_settings_trivial_controls_dialog_message" msgid="397178734990952575">"Nekim uređajima možete upravljati bez otključavanja telefona ili tableta. Aplikacija vašeg uređaja odlučuje kojim se uređajima može upravljati na taj način."</string>
     <string name="controls_settings_dialog_neutral_button" msgid="4514446354793124140">"Ne, hvala"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Pokušajte s drugim PIN-om"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Potvrdite promjenu za uređaj <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Prijeđite prstom da vidite više"</string>
+    <string name="retry_face" msgid="416380073082560186">"Ponovo pokušajte autentifikaciju licem"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Učitavanje preporuka"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Mediji"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Želite li sakriti kontroler medija za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Postavke"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g>, <xliff:g id="ARTIST_NAME">%2$s</xliff:g> reproducira se putem aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> od <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> se izvodi"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Reproduciraj"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pauziraj"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Prethodni zapis"</string>
@@ -960,7 +986,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="5098212763195577270">"Povezivanje uređaja"</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 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>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Zvučnici i zasloni"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Predloženi uređaji"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Zaustavite dijeljenu sesiju da biste premjestili medij na drugi uređaj"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Zaustavi"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Kako emitiranje funkcionira"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Emitiranje"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Osobe u blizini s kompatibilnim Bluetooth uređajima mogu slušati medije koje emitirate"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Spremanje nije uspjelo. Pokušajte ponovo."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Spremanje nije uspjelo."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Upotrijebite barem četiri znaka"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Upotrijebite manje od 16 znakova"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Upotrijebite manje od ovoliko znakova: <xliff:g id="LENGTH">%1$d</xliff:g>"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Broj međuverzije"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Broj međuverzije kopiran je u međuspremnik."</string>
     <string name="basic_status" msgid="2315371112182658176">"Otvoreni razgovor"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problem s očitavanjem mjerača baterije"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Dodirnite za više informacija"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Nema nijednog alarma"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"unesite zaključavanje zaslona"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Senzor otiska prsta"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autentificirali"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"pristupili uređaju"</string>
@@ -1034,7 +1063,7 @@
     <string name="mobile_data_connection_active" msgid="944490013299018227">"Povezano"</string>
     <string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Privremeno povezano"</string>
     <string name="mobile_data_poor_connection" msgid="819617772268371434">"Slaba veza"</string>
-    <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobilna veza neće se automatski uspostaviti"</string>
+    <string name="mobile_data_off_summary" msgid="3663995422004150567">"Mobilni podaci neće se automatski prenositi"</string>
     <string name="mobile_data_no_connection" msgid="1713872434869947377">"Niste povezani"</string>
     <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Nije dostupna nijedna druga mreža"</string>
     <string name="all_network_unavailable" msgid="4112774339909373349">"Nema dostupnih mreža"</string>
@@ -1051,7 +1080,7 @@
     <string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> želi dodati sljedeću pločicu u Brze postavke"</string>
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Dodaj pločicu"</string>
     <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>
+    <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Odaberite korisnika"</string>
     <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>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Asistent sluša"</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="note_task_button_label" msgid="8718616095800343136">"Pisanje bilježaka"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Pisanje bilježaka"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Pisanje bilježaka, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1094,18 +1124,20 @@
     <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Nepoznato"</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>
-    <string name="log_access_confirmation_title" msgid="4843557604739943395">"Želite li dopustiti aplikaciji <xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> da pristupa svim zapisnicima uređaja?"</string>
+    <string name="log_access_confirmation_title" msgid="4843557604739943395">"Želite li aplikaciji <xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> dopustiti da pristupa svim zapisnicima uređaja?"</string>
     <string name="log_access_confirmation_allow" msgid="752147861593202968">"Omogući jednokratni pristup"</string>
     <string name="log_access_confirmation_deny" msgid="2389461495803585795">"Nemoj dopustiti"</string>
-    <string name="log_access_confirmation_body" msgid="6883031912003112634">"U zapisnicima uređaja bilježi se što se događa na uređaju. Aplikacije mogu koristiti te zapisnike kako bi pronašle i riješile poteškoće.\n\nNeki zapisnici mogu sadržavati osjetljive podatke, pa pristup svim zapisnicima uređaja odobrite samo pouzdanim aplikacijama. \n\nAko ne dopustite ovoj aplikaciji da pristupa svim zapisnicima uređaja, ona i dalje može pristupati svojim zapisnicima. Proizvođač vašeg uređaja i dalje može pristupati nekim zapisnicima ili podacima na vašem uređaju."</string>
+    <string name="log_access_confirmation_body" msgid="6883031912003112634">"U zapisnicima uređaja bilježi se što se događa na uređaju. Aplikacije mogu koristiti te zapisnike kako bi pronašle i riješile poteškoće.\n\nNeki zapisnici mogu sadržavati osjetljive podatke, pa pristup svim zapisnicima uređaja odobrite samo pouzdanim aplikacijama. \n\nAko ovoj aplikaciji ne dopustite da pristupa svim zapisnicima uređaja, ona i dalje može pristupati svojim zapisnicima. Proizvođač vašeg uređaja i dalje bi mogao pristupati nekim zapisnicima ili podacima na vašem uređaju."</string>
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Saznajte više"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Saznajte više na <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Otvorite <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Aplikacija je postavljena"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Najmanje jedna kartica dodana je u Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Instalirajte aplikaciju fotoaparata"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Aplikacija je postavljena"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Dostupan je najmanje jedan uređaj"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Za dodavanje aplikacije Wallet kao prečaca provjerite je li instalirana"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Provjerite je li dodana barem jedna kartica kako biste dodali aplikaciju Wallet kao prečac"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Provjerite je li instalirana aplikacija kamere kako biste dodali čitač QR koda kao prečac"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Provjerite je li aplikacija Home instalirana kako biste je dodali kao prečac"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Dostupan je najmanje jedan uređaj"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Odaberite zadanu aplikaciju za bilješke da biste koristili prečac za pisanje bilježaka"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Odaberite aplikaciju"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Prečac za dodirnuti i zadržati"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Odustani"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Promijenite zaslon odmah"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Priključite pisaljku na punjač"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Slaba baterija pisaljke"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Nije moguće uspostavljati pozive s ovog profila"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Vaša pravila za poslovne uređaje omogućuju vam upućivanje poziva samo s poslovnog profila"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Ne možete upućivati pozive iz osobne aplikacije"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Vaša organizacija dopušta upućivanje poziva samo iz poslovnih aplikacija"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Prijeđite na poslovni profil"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Zatvori"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instaliraj poslovnu aplikaciju telefona"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Odustani"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Prilagodi zaključavanje zaslona"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Otključajte da biste prilagodili zaključani zaslon"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi nije dostupan"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera je blokirana"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Blokirani su kamera i mikrofon"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon je blokiran"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Uključen je prioritetni način rada"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Pažnja Asistenta je aktivirana"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Postavite zadanu aplikaciju za bilješke u postavkama"</string>
+    <string name="install_app" msgid="5066668100199613936">"Instalacija"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon i kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Nedavna upotreba aplikacije"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Pogledajte nedavni pristup"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Gotovo"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Opcije proširivanja i prikazivanja"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Sažimanje"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Zatvori ovu aplikaciju"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Zatvoreno: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Upravljajte uslugama"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Upravljajte pristupom"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Koristi telefonski poziv"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Nedavno korišteno tijekom telefonskog poziva"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Koristi: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Nedavno koristila aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Koristi: <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Nedavno koristila aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Koristi: <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Nedavno koristila aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hr/strings_tv.xml b/packages/SystemUI/res/values-hr/strings_tv.xml
deleted file mode 100644
index 61cf646..0000000
--- a/packages/SystemUI/res/values-hr/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN je spojen"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN je isključen"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Putem mreže <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Obavijesti"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Nema obavijesti"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofon snima"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera snima"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera i mikrofon snimaju"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofon je prestao snimati"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kamera je prestala snimati"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kamera i mikrofon prestali su snimati"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Snimanje zaslona je počelo"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Snimanje zaslona je zaustavljeno"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 4163cb9..e225682 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB engedélyezése"</string>
     <string name="learn_more" msgid="4690632085667273811">"Részletek"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Képernyőkép"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock letiltva"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Tartós feloldás letiltva"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"képet küldött"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Képernyőkép mentése..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Képernyőkép mentése a munkaprofilba…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"A(z) <xliff:g id="APPNAME">%1$s</xliff:g> észlelte ezt a képernyőképet."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"A(z) <xliff:g id="APPNAME">%1$s</xliff:g> és más nyitott alkalmazások észlelték ezt a képernyőképet."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Hozzáadás jegyzethez"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Képernyőrögzítő"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Képernyőrögzítő"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Képernyőrögzítés feldolgozása"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Folyamatban lévő értesítés képernyőrögzítési munkamenethez"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Elindítja a felvételt?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"A felvétel készítése során az Android rendszer rögzítheti az eszközön lejátszott, illetve a képernyőjén megjelenő bizalmas információkat. Ide tartoznak például a jelszavak, a fizetési információk, a fotók, az üzenetek és az audiotartalmak is."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Teljes képernyő rögzítése"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Egyetlen alkalmazás rögzítése"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Rögzítés közben az Android a képernyőn látható vagy az eszközön lejátszott minden tartalomhoz hozzáfér. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel és más bizalmas információkkal."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Alkalmazás rögzítése közben az Android az adott appban látható vagy lejátszott minden tartalomhoz hozzáfér. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel és más bizalmas információkkal."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Rögzítés indítása"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Elindítja a felvételt?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Rögzítés közben az Android a képernyőn látható vagy az eszközön lejátszott minden tartalomhoz hozzáfér. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel, a fotókkal, valamint a hang- és videófelvételekkel."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Alkalmazás rögzítése közben az Android az adott alkalmazásban látható vagy lejátszott minden tartalomhoz hozzáfér. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel, a fotókkal, valamint a hang- és videófelvételekkel."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Felvétel indítása"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Hang rögzítése"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Eszköz hangja"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Az eszköz által lejátszott hangok, például zeneszámok, hívások és csengőhangok"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Eszköz hangja és mikrofon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Indítás"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Indítás"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Kép rögzítése folyamatban"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Kép és hang rögzítése folyamatban"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"A képernyőn végzett érintések mutatása"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Megosztás"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Képernyőfelvétel elmentve"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Koppintson a megtekintéshez"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Hiba történt a képernyőről készült felvétel törlésekor"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Hiba történt a képernyőrögzítés mentése során"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Hiba a képernyőrögzítés indításakor"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Megtekintése teljes képernyőn"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Kilépéshez csúsztassa ujját fentről lefelé."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Értem"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Vissza"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Főoldal"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menü"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Arc hitelesítve"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Megerősítve"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Koppintson a Megerősítés lehetőségre"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Arccal feloldva. A folytatáshoz nyomja meg a feloldás ikont."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Zárolás arccal feloldva"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Zárolás arccal feloldva. Koppintson a folytatáshoz."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Arc felismerve. Koppintson a folytatáshoz."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Arc felismerve. A folytatáshoz koppintson a Feloldásra."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Hitelesítve"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Hitelesítés megszakítása"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN-kód használata"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Minta használata"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Jelszó használata"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Amennyiben helytelen mintát ad meg a következő kísérletnél, a rendszer törli munkaprofilját és a kapcsolódó adatokat."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Amennyiben helytelen PIN-kódot ad meg a következő kísérletnél, a rendszer törli munkaprofilját és a kapcsolódó adatokat."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Amennyiben helytelen jelszót ad meg a következő kísérletnél, a rendszer törli munkaprofilját és a kapcsolódó adatokat."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Beállítás"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Most nem"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"A műveletre a biztonság és a teljesítmény fokozása érdekében van szükség"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"A Feloldás ujjlenyomattal funkció újbóli beállítása"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Feloldás ujjlenyomattal"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Ujjlenyomattal való feloldás beállítása"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"A Feloldás ujjlenyomattal funkció újbóli beállításához a rendszer törli majd jelenlegi ujjlenyomatképeit és -modelljeit.\n\nTörlésüket követően újból be kell állítania a Feloldás ujjlenyomattal funkciót ahhoz, hogy ujjlenyomatával oldhassa fel telefonja zárolását, illetve igazolhassa személyazonosságát."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"A Feloldás ujjlenyomattal funkció újbóli beállításához a rendszer törli majd jelenlegi ujjlenyomatképeit és -modelljeit.\n\nTörlésüket követően újból be kell állítania a Feloldás ujjlenyomattal funkciót ahhoz, hogy ujjlenyomatával oldhassa fel telefonja zárolását, illetve igazolhassa személyazonosságát."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Nem sikerült beállítani a Feloldás ujjlenyomattal funkciót. Próbálkozzon újra a Beállításokban."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Állítsa be újra az Arcalapú feloldást"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Arcalapú feloldás"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Az Arcalapú feloldás beállítása"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Az Arcalapú feloldás újbóli beállításához a rendszer törli majd arcmodelljét.\n\nA funkciót újból be kell állítania ahhoz, hogy arca segítségével tudja feloldani telefonja zárolását."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Nem sikerült beállítani az arcalapú feloldást. Próbálkozzon újra a Beállításokban."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Érintse meg az ujjlenyomat-érzékelőt"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"A folytatáshoz koppintson a Feloldás ikonra"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Az arc nem felismerhető. Használjon ujjlenyomatot."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Hang"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Bevitel"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Hallókészülékek"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hallókészülék"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Bekapcsolás…"</string>
     <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>
@@ -303,9 +319,9 @@
     <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Normál"</string>
     <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Közepes"</string>
     <string name="quick_settings_contrast_high" msgid="656049259587494499">"Nagy"</string>
-    <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Feloldja az eszközmikrofon letiltását?"</string>
-    <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Feloldja az eszközkamera letiltását?"</string>
-    <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Feloldja az eszközkamera és -mikrofon letiltását?"</string>
+    <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Feloldja az eszköz mikrofonjának letiltását?"</string>
+    <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Feloldja az eszköz kamerájának letiltását?"</string>
+    <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Feloldja az eszköz kamerájának és mikrofonjának letiltását?"</string>
     <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"Ezzel feloldja a hozzáférés letiltását az összes olyan alkalmazás és szolgáltatás esetében, amelyek számára engedélyezte a mikrofon használatát."</string>
     <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"Ezzel feloldja a hozzáférés letiltását az összes olyan alkalmazás és szolgáltatás esetében, amelyek számára engedélyezte a kamera használatát."</string>
     <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"Ezzel feloldja a hozzáférés letiltását az összes olyan alkalmazás és szolgáltatás esetében, amelyek számára engedélyezte a kamera vagy a mikrofon használatát."</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Zárolás arccal feloldva"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Arc felismerve"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Az újrapróbálkozáshoz csúsztassa felfelé az ujját"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Felfelé csúsztatással próbálja újra az arcalapú feloldást"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Az NFC használatához oldja fel a képernyőzárat"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Ez az eszköz az Ön szervezetének tulajdonában van"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Ez az eszköz a(z) <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> tulajdonában van"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"A(z) <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> hozzáfér majd minden olyan információhoz, amely látható az Ön képernyőjén, vagy amelyet az Ön eszközéről játszanak le rögzítés vagy átküldés során. Ez olyan információkat is tartalmaz, mint a jelszavak, a fizetési részletek, fotók, üzenetek és lejátszott audiotartalmak."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"A funkciót biztosító szolgáltatás hozzáfér majd minden olyan információhoz, amely látható az Ön képernyőjén, illetve amelyet az Ön eszközéről játszanak le rögzítés vagy átküldés közben. Ez olyan információkat is tartalmaz, mint a jelszavak, a fizetési részletek, fotók, üzenetek és lejátszott audiotartalmak."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Biztosan elkezdi a rögzítést vagy az átküldést?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Elkezdi a rögzítést vagy átküldést a következővel: <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Engedélyezi a(z) <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> számára a megosztást és rögzítést?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Teljes képernyő"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Egyetlen alkalmazás"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Amikor Ön megosztást, rögzítést vagy átküldést végez, a(z) <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> a képernyőn látható vagy az eszközön lejátszott minden tartalomhoz hozzáfér. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel és más bizalmas információkkal."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Amikor Ön megoszt, rögzít vagy átküld egy alkalmazást, a(z) <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> az adott appban látható vagy lejátszott minden tartalomhoz hozzáfér. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel és más bizalmas információkkal."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Folytatás"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Alkalmazás megosztása és rögzítése"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Engedélyezi ennek az alkalmazásnak a megosztást és a rögzítést?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Amikor Ön megosztást, rögzítést vagy átküldést végez, az alkalmazás a képernyőn látható vagy az eszközön lejátszott minden tartalomhoz hozzáfér. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel és más bizalmas információkkal."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Amikor Ön megoszt, rögzít vagy átküld egy alkalmazást, az alkalmazás az adott appban látható vagy lejátszott minden tartalomhoz hozzáfér. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel és más bizalmas információkkal."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"A(z) <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> hozzáfér majd minden olyan információhoz, amely látható az Ön képernyőjén, vagy amelyet az Ön eszközéről játszanak le rögzítés vagy átküldés során. Ez olyan információkat is tartalmaz, mint a jelszavak, a fizetési részletek, a fotók, az üzenetek és a lejátszott audiotartalmak."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Biztosan elkezdi a rögzítést vagy az átküldést?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"A funkciót biztosító szolgáltatás hozzáfér majd minden olyan információhoz, amely látható az Ön képernyőjén, illetve amelyet az Ön eszközéről játszanak le rögzítés vagy átküldés közben. Ez olyan információkat is tartalmaz, mint a jelszavak, a fizetési részletek, a fotók, az üzenetek és a lejátszott audiotartalmak."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Teljes képernyő"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Egyetlen alkalmazás"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Alkalmazás megosztása vagy rögzítése"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Elkezdi a rögzítést vagy az átküldést a következővel: <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Amikor Ön megosztást, rögzítést vagy átküldést végez, a(z) <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> a képernyőn látható vagy az eszközön lejátszott minden tartalomhoz hozzáfér. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel, a fotókkal, valamint a hang- és videófelvételekkel."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Amikor Ön megoszt, rögzít vagy átküld egy alkalmazást, a(z) <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> az adott appban látható vagy lejátszott minden tartalomhoz hozzáfér. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel, a fotókkal, valamint a hang- és videófelvételekkel."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Indítás"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Elindítja az átküldést?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Amikor Ön átküldést végez, az Android a képernyőn látható vagy az eszközön lejátszott minden tartalomhoz hozzáfér. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel, a fotókkal, valamint a hang- és videófelvételekkel."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Alkalmazás átküldése közben az Android az adott appban látható vagy lejátszott minden tartalomhoz hozzáfér. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel, a fotókkal, valamint a hang- és videófelvételekkel."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Az átküldés indítása"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Megkezdi a megosztást?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Amikor Ön megosztást, rögzítést vagy átküldést végez, az Android a képernyőn látható vagy az eszközön lejátszott minden tartalomhoz hozzáfér. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel, a fotókkal, valamint a hang- és videófelvételekkel."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Amikor Ön megoszt, rögzít vagy átküld egy alkalmazást, az Android az adott alkalmazásban látható vagy lejátszott minden tartalomhoz hozzáfér. Ezért legyen elővigyázatos a jelszavakkal, a fizetési adatokkal, az üzenetekkel, a fotókkal, valamint a hang- és videófelvételekkel."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Indítás"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"A megosztás szünetel alkalmazásváltáskor"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Inkább ennek az appnak a megosztása"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Visszaváltás"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Alkalmazásváltás"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Rendszergazda által letiltva"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"A képernyőfelvételt eszközszabályzat tiltja"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Az összes törlése"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Az eszközre tanúsítványkibocsátó van telepítve. Ezáltal figyelhetik és befolyásolhatják az Ön biztonságos hálózati forgalmát."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"A rendszergazda bekapcsolta az eszköz forgalmát figyelő hálózati naplózást."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"A rendszergazda bekapcsolta a hálózati naplózást, amely a munkaprofilban figyeli a forgalmat, a személyes profilban azonban nem."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Ez az eszköz a következőn keresztül csatlakozik az internethez: <xliff:g id="VPN_APP">%1$s</xliff:g>. Hálózati tevékenységei (pl. az e-mailek és a böngészési adatok) láthatók a rendszergazdája számára."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Ez az eszköz a következőn keresztül csatlakozik az internethez: <xliff:g id="VPN_APP">%1$s</xliff:g>. Hálózati tevékenységei (pl. az e-mailek és a böngészési adatok) láthatók a VPN-szolgáltató számára."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Ez az eszköz a következőn keresztül csatlakozik az internethez: <xliff:g id="VPN_APP">%1$s</xliff:g>. Hálózati tevékenységei (pl. az e-mailek és a böngészési adatok) láthatók a rendszergazdája számára."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Ez az eszköz a következőkön keresztül csatlakozik az internethez: <xliff:g id="VPN_APP_0">%1$s</xliff:g> és <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Hálózati tevékenységei (pl. az e-mailek és a böngészési adatok) láthatók a rendszergazdája és VPN-szolgáltatója számára."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Munkahelyi alkalmazásai a következőn keresztül csatlakoznak az internethez: <xliff:g id="VPN_APP">%1$s</xliff:g>. A munkahelyi alkalmazásaiban végzett hálózati tevékenységei (pl. az e-mailek és a böngészési adatok) láthatók a rendszergazdája és VPN-szolgáltatója számára."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Személyes alkalmazásai a következőn keresztül csatlakoznak az internethez: <xliff:g id="VPN_APP">%1$s</xliff:g>. Hálózati tevékenységei (pl. az e-mailek és a böngészési adatok) láthatók a VPN-szolgáltatója számára."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"letiltás"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Hang és rezgés"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Beállítások"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Hangerő csökkentve a biztonság érdekében"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"A hangerő az ajánlottnál hosszabb ideig volt nagy"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Hangerő biztonságos szintre csökkentve"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"A fejhallgató hangereje az ajánlottnál hosszabb ideig volt nagy"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"A fejhallgató hangereje túllépte a biztonságos határt a hétre vonatkozóan"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Hangerő megtartása"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Hangerő csökkentése"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Az alkalmazás ki van tűzve"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Megjelenítve tartja addig, amíg Ön fel nem oldja a rögzítést. A feloldáshoz tartsa lenyomva a Vissza és az Áttekintés lehetőséget."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Megjelenítve tartja addig, amíg Ön fel nem oldja a rögzítést. A feloldáshoz tartsa lenyomva a Vissza és a Kezdőképernyő elemet."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Bekapcsológombhoz tartozó menü"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_1">%1$d</xliff:g>. oldal, összesen: <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Lezárási képernyő"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"A meleg miatt kikapcsolt"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Telefonja most már megfelelően működik.\nKoppintson, ha további információra van szüksége."</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefonja túlmelegedett, így kikapcsolt, hogy lehűlhessen. Most már megfelelően működik.\n\nA telefon akkor melegedhet túl, ha Ön:\n	• Energiaigényes alkalmazásokat használ (például játékokat, videókat vagy navigációs alkalmazásokat)\n	• Nagy fájlokat tölt le vagy fel\n	• Melegben használja a telefonját"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Olvassa el a kímélő használat lépéseit"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"A telefon melegszik"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Bizonyos funkciók korlátozottan működnek a telefon lehűlése közben.\nKoppintson, ha további információra van szüksége."</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"A telefon automatikusan megpróbál lehűlni. Továbbra is tudja használni a telefont, de elképzelhető, hogy működése lelassul.\n\nAmint a telefon lehűl, újra a szokásos módon működik majd."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Olvassa el a kímélő használat lépéseit"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Húzza ki az eszközt"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Eszköze kezd melegedni a töltőport közelében. Ha töltő vagy USB-s kiegészítő van csatlakoztatva hozzá, húzza ki, és legyen óvatos, mert a kábel is meleg lehet."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"A teljes képernyő felnagyítása"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Képernyő bizonyos részének nagyítása"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Nagyítási beállítások megnyitása"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Nagyítási beállítások bezárása"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Az átméretezéshez húzza a kívánt sarkot"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Átlós görgetés engedélyezése"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Átméretezés"</string>
@@ -885,9 +910,8 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"eltávolítás a kedvencek közül"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Áthelyezés a következő pozícióba: <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Vezérlők"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
-    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Tartsa lenyomva, és húzza a vezérlők átrendezéséhez"</string>
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Válasszon ki eszközvezérlőket a gyors hozzáféréshez"</string>
+    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"A vezérlőket húzással lehet átrendezni"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Minden vezérlő eltávolítva"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"A rendszer nem mentette a módosításokat"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Többi alkalmazás megtekintése"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Próbálkozzon másik kóddal"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"A(z) <xliff:g id="DEVICE">%s</xliff:g> módosításának megerősítése"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Továbbiak megtekintéséhez csúsztasson"</string>
+    <string name="retry_face" msgid="416380073082560186">"Arcfelismerés újraindítása"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Javaslatok betöltése…"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Média"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Elrejti ezt a(z) <xliff:g id="APP_NAME">%1$s</xliff:g>-médiavezérlőt?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Beállítások"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> <xliff:g id="SONG_NAME">%1$s</xliff:g> című száma hallható itt: <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>/<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> jelenleg fut"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Lejátszás"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Szünet"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Előző szám"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Hangfalak és kijelzők"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Javasolt eszközök"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Állítsa le a megosztott munkamenetet, ha át szeretné helyezni a médiát egy másik eszközre"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Leállítás"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"A közvetítés működése"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Közvetítés"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"A közelben tartózkodó, kompatibilis Bluetooth-eszközzel rendelkező személyek meghallgathatják az Ön közvetített médiatartalmait"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"A mentés nem sikerült. Próbálja újra."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"A mentés nem sikerült."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Legalább négy karaktert használjon"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Legfeljebb 16 karaktert használhat"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Legfeljebb <xliff:g id="LENGTH">%1$d</xliff:g> karaktert használhat"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Buildszám"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Buildszám a vágólapra másolva."</string>
     <string name="basic_status" msgid="2315371112182658176">"Beszélgetés megnyitása"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Probléma merült fel az akkumulátor-töltésmérő olvasásakor"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Koppintással további információkat érhet el."</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Nincs ébresztés"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"képernyőzár megadása"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Ujjlenyomat-érzékelő"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"a hitelesítéshez"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"eszköz megadásához"</string>
@@ -1044,7 +1073,7 @@
     <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Hálózatok keresése…"</string>
     <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Nem sikerült hálózathoz csatlakozni."</string>
     <string name="wifi_wont_autoconnect_for_now" msgid="5782282612749867762">"A Wi-Fi-re történő csatlakozás jelenleg nem automatikus"</string>
-    <string name="see_all_networks" msgid="3773666844913168122">"Megtekintés"</string>
+    <string name="see_all_networks" msgid="3773666844913168122">"Összes megtekintése"</string>
     <string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"Hálózatváltáshoz válassza le az ethernetet"</string>
     <string name="wifi_scan_notify_message" msgid="3753839537448621794">"Az eszközhasználati élmény javítása érdekében az alkalmazások és a szolgáltatások továbbra is bármikor kereshetnek Wi-Fi-hálózatokat, még akkor is, ha a Wi-Fi ki van kapcsolva. A funkciót a Wi-Fi-keresési beállításoknál módosíthatja. "<annotation id="link">"Módosítás"</annotation></string>
     <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Repülős üzemmód kikapcsolása"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"A Segéd figyel"</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="note_task_button_label" msgid="8718616095800343136">"Jegyzetelés"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Jegyzetelés"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Jegyzetelés, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"További információ"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"További információ: <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"A(z) <xliff:g id="APPNAME">%1$s</xliff:g> megnyitása"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Az alkalmazás be van állítva"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Legalább egy kártya hozzá lett adva a Wallethez"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Kameraalkalmazás telepítése"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Az alkalmazás be van állítva"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Legalább egy eszköz rendelkezésre áll"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Ha szeretné felvenni Wallet alkalmazást gyorsparancsként, gondoskodjon az app telepítéséről"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Ha szeretné felvenni Wallet alkalmazást gyorsparancsként, győződjön meg róla, hogy hozzáadott legalább egy kártyát a szolgáltatáshoz"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Ha szeretné felvenni a QR-kód-szkennelőt gyorsparancsként, győződjön meg róla, hogy van az eszközre telepítve kameraalkalmazás"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Ha szeretné felvenni Home appot gyorsparancsként, gondoskodjon az alkalmazás telepítéséről"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Legalább egy eszköz rendelkezésre áll"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Válassza ki az alapértelmezett jegyzetkészítő alkalmazást, amelyet a jegyzetelési gyorsparancshoz szeretne használni"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Alkalmazás kiválasztása"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Tartsa nyomva a parancsikont"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Mégse"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Váltson képernyőt most"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Tegye töltőre az érintőceruzát"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Az érintőceruza töltöttsége alacsony"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Nem lehet hívást kezdeményezni ebből a profilból"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"A munkahelyi házirend csak munkaprofilból kezdeményezett telefonhívásokat engedélyez"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Személyes alkalmazásokból nem lehet hívást indítani"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Szervezete csak munkahelyi alkalmazásokból engedélyezi a hívásindítást"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Váltás munkaprofilra"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Bezárás"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Munkahelyi telefonalkalmazás telepítése"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Mégse"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Lezárási képernyő testreszabása"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Oldja fel a zárolást a lezárási képernyő testreszabásához"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Nem áll rendelkezésre Wi-Fi"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera letiltva"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera és mikrofon letiltva"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon letiltva"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioritás mód bekapcsolva"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"A Segéd figyel"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Állítson be alapértelmezett jegyzetkészítő alkalmazást a Beállításokban"</string>
+    <string name="install_app" msgid="5066668100199613936">"Alkalmazás telepítése"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon és kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Legutóbbi alkalmazáshasználat"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Legutóbbi hozzáférés"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Kész"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Kibontás és lehetőségek megjelenítése"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Összecsukás"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Az alkalmazás bezárása"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> lezárva"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Szolgáltatás kezelése"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Hozzáférés kezelése"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Telefonhívás által használatban"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Legutóbb telefonhívás során volt használva"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Használatban a következő által: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Legutóbb használta: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Használatban a következő által: <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Legutóbb használta: <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Használatban a következő által: <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Legutóbb használta: <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hu/strings_tv.xml b/packages/SystemUI/res/values-hu/strings_tv.xml
deleted file mode 100644
index f251c38..0000000
--- a/packages/SystemUI/res/values-hu/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"A VPN-kapcsolat létrejött"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"A VPN-kapcsolat megszakadt"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Ezzel: <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Értesítések"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Nincs értesítés"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"A mikrofon felvételt készít…"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"A kamera felvételt készít…"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"A kamera és a mikrofon felvételt készít…"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"A mikrofon befejezte a felvételkészítést"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"A kamera befejezte a felvételkészítést"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"A kamera és a mikrofon befejezte a felvételkészítést"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"A képernyő rögzítése elindult"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"A képernyő rögzítése leállt"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index bdfb8b0..e573682 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Միացնել USB-ն"</string>
     <string name="learn_more" msgid="4690632085667273811">"Իմանալ ավելին"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Սքրինշոթ"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"«Երկարացնել կողպումը» գործառույթն անջատված է"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"«Հետաձգված ապակողպում» գործառույթն անջատված է"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"պատկեր է ուղարկվել"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Սքրինշոթը պահվում է..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Սքրինշոթը պահվում է աշխատանքային պրոֆիլում…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> հավելվածը հայտնաբերել է այս սքրինշոթը։"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g>-ն ու բացված այլ հավելվածներ հայտնաբերել են այս սքրինշոթը։"</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Ավելացնել նշմանը"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Էկրանի տեսագրիչ"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Էկրանի տեսագրում"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Էկրանի տեսագրության մշակում"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Էկրանի տեսագրման աշխատաշրջանի ընթացիկ ծանուցում"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Սկսե՞լ տեսագրումը"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Տեսագրման ընթացքում Android համակարգը կարող է գրանցել անձնական տեղեկություններ, որոնք տեսանելի են էկրանին կամ նվագարկվում են ձեր սարքում։ Սա ներառում է այնպիսի տեղեկություններ, ինչպիսիք են, օրինակ, գաղտնաբառերը, վճարային տվյալները, լուսանկարները, հաղորդագրությունները և նվագարկվող աուդիո ֆայլերը։"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Տեսագրել ամբողջ էկրանը"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Տեսագրել մեկ հավելված"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Երբ դուք տեսագրում եք էկրանը, Android-ին հասանելի է դառնում այն ամենը, ինչ տեսանելի է էկրանին և նվագարկվում է ձեր սարքում։ Հիշեք այդ մասին, երբ պատրաստվում եք դիտել կամ մուտքագրել գաղտնաբառեր, վճարային տվյալներ, հաղորդագրություններ և այլ կոնֆիդենցիալ տեղեկություններ։"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Երբ դուք տեսագրում եք որևէ հավելվածի էկրանը, Android-ին հասանելի է դառնում այն ամենը, ինչ ցուցադրվում է կամ նվագարկվում այդ հավելվածում։ Հիշեք այդ մասին, երբ պատրաստվում եք դիտել կամ մուտքագրել գաղտնաբառեր, վճարային տվյալներ, հաղորդագրություններ և այլ կոնֆիդենցիալ տեղեկություններ։"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Սկսել տեսագրումը"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Սկսե՞լ տեսագրումը"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Երբ դուք տեսագրում եք էկրանը, Android-ին հասանելի է լինում այն ամենը, ինչ տեսանելի է ձեր էկրանին և նվագարկվում է ձեր սարքում։ Ուստի ուշադիր եղեք այնպիսի բաների հետ, ինչպիսիք են գաղտնաբառերը, վճարային տվյալները, հաղորդագրությունները, լուսանկարները, աուդիո և վիդեո բովանդակությունը։"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Երբ դուք տեսագրում եք որևէ հավելվածի էկրանը, Android-ին հասանելի է լինում այն ամենը, ինչ ցուցադրվում կամ նվագարկվում է այդ հավելվածում։ Ուստի ուշադիր եղեք այնպիսի բաների հետ, ինչպիսիք են գաղտնաբառերը, վճարային տվյալները, հաղորդագրությունները, լուսանկարները, աուդիո և վիդեո բովանդակությունը։"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Սկսել տեսագրումը"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Ձայնագրել"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Սարքի ձայները"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Ձեր սարքի ձայները, օրինակ՝ երաժշտությունը, զանգերն ու զանգերանգները"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Խոսափող"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Սարքի բարձրախոսը և խոսափողը"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Սկսել"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Սկսել"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Էկրանի տեսագրում"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Էկրանի տեսագրում և ձայնագրում"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Ցուցադրել էկրանի հպումները"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Կիսվել"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Էկրանի տեսագրությունը պահվեց"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Հպեք՝ դիտելու համար"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Չհաջողվեց ջնջել տեսագրությունը"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Չհաջողվեց պահել էկրանի տեսագրությունը"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Չհաջողվեց սկսել տեսագրումը"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Լիաէկրան դիտակերպ"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Դուրս գալու համար վերևից մատը սահեցրեք դեպի ներքև։"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Եղավ"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Հետ"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Տուն"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Ցանկ"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Դեմքը ճանաչվեց"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Հաստատվեց"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Ավարտելու համար հպեք «Հաստատել»"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Ապակողպվել է դեմքով։ Սեղմեք ապակողպման պատկերակը։"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Ապակողպվեց դեմքով"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Ապակողպվել է դեմքով։ Սեղմեք շարունակելու համար։"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Դեմքը ճանաչվեց։ Սեղմեք շարունակելու համար։"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Դեմքը ճանաչվեց։ Սեղմեք ապակողպման պատկերակը։"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Նույնականացված է"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Չեղարկել իսկորոշումը"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Օգտագործել PIN կոդ"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Օգտագործել նախշ"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Օգտագործել գաղտնաբառ"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Հաջորդ փորձի ժամանակ սխալ նախշ մուտքագրելու դեպքում ձեր աշխատանքային պրոֆիլը և դրա տվյալները կջնջվեն։"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Հաջորդ փորձի ժամանակ սխալ PIN կոդ մուտքագրելու դեպքում աշխատանքային պրոֆիլը և դրա տվյալները կջնջվեն։"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Հաջորդ փորձի ժամանակ սխալ գաղտնաբառ մուտքագրելու դեպքում աշխատանքային պրոֆիլը և դրա տվյալները կջնջվեն։"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Կարգավորել"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Ոչ հիմա"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Սա անհրաժեշտ է անվտանգությունը և արդյունավետությունը բարելավելու համար"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Նորից կարգավորեք մատնահետքով ապակողպումը"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Մատնահետքով ապակողպում"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Մատնահետքով ապակողպման կարգավորում"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Մատնահետքով ապակողպումը նորից կարգավորելու համար ձեր մատնահետքի ընթացիկ պատկերներն ու նմուշները կջնջվեն։\n\nԴուք նորից պետք է կարգավորեք մատնահետքով ապակողպումը, որպեսզի օգտագործեք ձեր մատնահետքը՝ հեռախոսն ապակողպելու կամ ձեր ինքնությունը հաստատելու համար։"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Մատնահետքով ապակողպումը նորից կարգավորելու համար ձեր մատնահետքի ընթացիկ պատկերներն ու նմուշը կջնջվեն։\n\nԴուք նորից պետք է կարգավորեք մատնահետքով ապակողպումը, որպեսզի օգտագործեք ձեր մատնահետքը՝ հեռախոսն ապակողպելու կամ ձեր ինքնությունը հաստատելու համար։"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Չհաջողվեց կարգավորել մատնահետքով ապակողպումը։ Անցեք Կարգավորումներ և նորից փորձեք։"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Նորից կարգավորեք դեմքով ապակողպումը"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Դեմքով ապակողպում"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Կարգավորեք դեմքով ապակողպումը"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Դեմքով ապակողպումը նորից կարգավորելու համար ձեր ընթացիկ դեմքի նմուշը կջնջվի։\n\nԴուք պետք է նորից կարգավորեք այս գործառույթը, որպեսզի դեմքի միջոցով ապակողպեք ձեր հեռախոսը։"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Չհաջողվեց կարգավորել դեմքով ապակողպումը։ Անցեք Կարգավորումներ և նորից փորձեք։"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Հպեք մատնահետքի սկաներին"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Շարունակելու համար սեղմեք ապակողպման պատկերակը"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Դեմքը չի հաջողվում ճանաչել։ Օգտագործեք մատնահետքը։"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Աուդիո"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Ականջակալ"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Մուտքագրում"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Լսողական ապարատ"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Լսողական սարք"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Միացում…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Ինքնապտտում"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Ավտոմատ պտտել էկրանը"</string>
@@ -348,8 +364,9 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Ապակողպվեց դեմքով"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Դեմքը ճանաչվեց"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Սահեցրեք վերև՝ նորից փորձելու համար"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Սահեցրեք վերև՝ դեմքով ապակողպումը նորից փորձելու համար"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Ապակողպեք՝ NFC-ն օգտագործելու համար"</string>
-    <string name="do_disclosure_generic" msgid="4896482821974707167">"Այս սարքը պատկանում է ձեր կազմակերպությանը"</string>
+    <string name="do_disclosure_generic" msgid="4896482821974707167">"Այս սարքը պատկանում է ձեր ընկերությանը"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Այս սարքը պատկանում է «<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>» կազմակերպությանը"</string>
     <string name="do_financed_disclosure_with_name" msgid="6723004643314467864">"Այս սարքը տրամադրվել է «<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>» կազմակերպության կողմից"</string>
     <string name="phone_hint" msgid="6682125338461375925">"Սահահարվածեք հեռախոսի պատկերակից"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"Հեռացնե՞լ օգտատիրոջը:"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Այս օգտատիրոջ բոլոր հավելվածներն ու տվյալները կջնջվեն:"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Հեռացնել"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Տեսագրման և հեռարձակման ընթացքում <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածին հասանելի կլինեն ձեր սարքի էկրանին ցուցադրվող տեղեկությունները և ձեր սարքով նվագարկվող նյութերը։ Սա ներառում է այնպիսի տեղեկություններ, ինչպիսիք են, օրինակ, գաղտնաբառերը, վճարային տվյալները, լուսանկարները, հաղորդագրությունները և նվագարկվող աուդիո ֆայլերը։"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Տեսագրման և հեռարձակման ընթացքում ծառայությունների մատակարարին հասանելի կլինեն ձեր սարքի էկրանին ցուցադրվող տեղեկությունները և ձեր սարքով նվագարկվող նյութերը։ Սա ներառում է այնպիսի տեղեկություններ, ինչպիսիք են, օրինակ, գաղտնաբառերը, վճարային տվյալները, լուսանկարները, հաղորդագրությունները և նվագարկվող աուդիո ֆայլերը։"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Սկսե՞լ տեսագրումը կամ հեռարձակումը"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Սկսե՞լ տեսագրումը կամ հեռարձակումը <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածով"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Թույլատրե՞լ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածին ցուցադրել կամ տեսագրել էկրանը"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Ամբողջ էկրանը"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Մեկ հավելված"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Երբ դուք ցուցադրում, տեսագրում կամ հեռարձակում եք էկրանը, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածին հասանելի է դառնում այն ամենը, ինչ տեսանելի է էկրանին և նվագարկվում է ձեր սարքում։ Հիշեք այդ մասին, երբ պատրաստվում եք դիտել կամ մուտքագրել գաղտնաբառեր, վճարային տվյալներ, հաղորդագրություններ և այլ կոնֆիդենցիալ տեղեկություններ։"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Երբ դուք ցուցադրում, տեսագրում կամ հեռարձակում եք որևէ հավելվածի էկրանը, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածին հասանելի է դառնում այն ամենը, ինչ ցուցադրվում է կամ նվագարկվում այդ հավելվածում։ Հիշեք այդ մասին, երբ պատրաստվում եք դիտել կամ մուտքագրել գաղտնաբառեր, վճարային տվյալներ, հաղորդագրություններ և այլ կոնֆիդենցիալ տեղեկություններ։"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Շարունակել"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Հավելվածի էկրանի ցուցադրում կամ տեսագրում"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Թույլատրե՞լ այս հավելվածին ցուցադրել կամ տեսագրել էկրանը"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Երբ դուք ցուցադրում, տեսագրում կամ հեռարձակում եք էկրանը, այս հավելվածին հասանելի է դառնում այն ամենը, ինչ տեսանելի է էկրանին և նվագարկվում է ձեր սարքում։ Հիշեք այդ մասին, երբ պատրաստվում եք դիտել կամ մուտքագրել գաղտնաբառեր, վճարային տվյալներ, հաղորդագրություններ և այլ կոնֆիդենցիալ տեղեկություններ։"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Երբ դուք ցուցադրում, տեսագրում կամ հեռարձակում եք որևէ հավելվածի էկրանը, այս հավելվածին հասանելի է դառնում այն ամենը, ինչ ցուցադրվում է կամ նվագարկվում այդ հավելվածում։ Հիշեք այդ մասին, երբ պատրաստվում եք դիտել կամ մուտքագրել գաղտնաբառեր, վճարային տվյալներ, հաղորդագրություններ և այլ կոնֆիդենցիալ տեղեկություններ։"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Տեսագրման և հեռարձակման ընթացքում <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածին հասանելի կլինեն ձեր սարքի էկրանին ցուցադրվող տեղեկությունները և ձեր սարքով նվագարկվող նյութերը։ Սա ներառում է այնպիսի տեղեկություններ, ինչպիսիք են, օրինակ, գաղտնաբառերը, վճարային տվյալները, լուսանկարները, հաղորդագրությունները և նվագարկվող աուդիո ֆայլերը։"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Սկսե՞լ տեսագրումը կամ հեռարձակումը"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Տեսագրման և հեռարձակման ընթացքում ծառայությունների մատակարարին հասանելի կլինեն ձեր սարքի էկրանին ցուցադրվող տեղեկությունները և ձեր սարքով նվագարկվող նյութերը։ Սա ներառում է այնպիսի տեղեկություններ, ինչպիսիք են, օրինակ, գաղտնաբառերը, վճարային տվյալները, լուսանկարները, հաղորդագրությունները և նվագարկվող աուդիո ֆայլերը։"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Ամբողջ էկրանը"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Մեկ հավելված"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Հավելվածի էկրանի ցուցադրում կամ տեսագրում"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Սկսե՞լ տեսագրումը կամ հեռարձակումը <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածով"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Երբ դուք ցուցադրում, տեսագրում կամ հեռարձակում եք էկրանը, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածին հասանելի է լինում այն ամենը, ինչ տեսանելի է ձեր էկրանին և նվագարկվում է ձեր սարքում։ Ուստի ուշադիր եղեք այնպիսի բաների հետ, ինչպիսիք են գաղտնաբառերը, վճարային տվյալները, հաղորդագրությունները, լուսանկարները, աուդիո և վիդեո բովանդակությունը։"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Երբ դուք ցուցադրում, տեսագրում կամ հեռարձակում եք որևէ հավելվածի էկրանը, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> հավելվածին հասանելի է լինում այն ամենը, ինչ ցուցադրվում կամ նվագարկվում է այդ հավելվածում։ Ուստի ուշադիր եղեք այնպիսի բաների հետ, ինչպիսիք են գաղտնաբառերը, վճարային տվյալները, հաղորդագրությունները, լուսանկարները, աուդիո և վիդեո բովանդակությունը։"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Սկսել"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Սկսե՞լ հեռարձակումը"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Երբ դուք հեռարձակում եք էկրանը, Android-ին հասանելի է լինում այն ամենը, ինչ տեսանելի է ձեր էկրանին կամ նվագարկվում է ձեր սարքում։ Ուստի ուշադիր եղեք այնպիսի բաների հետ, ինչպիսիք են գաղտնաբառերը, վճարային տվյալները, հաղորդագրությունները, լուսանկարները, աուդիո և վիդեո բովանդակությունը։"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Երբ դուք տեսագրում եք որևէ հավելվածի էկրանը, Android-ին հասանելի է լինում այն ամենը, ինչ ցուցադրվում կամ նվագարկվում է այդ հավելվածում։ Ուստի ուշադիր եղեք այնպիսի բաների հետ, ինչպիսիք են գաղտնաբառերը, վճարային տվյալները, հաղորդագրությունները, լուսանկարները, աուդիո և վիդեո բովանդակությունը։"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Սկսել հեռարձակումը"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Սկսե՞լ էկրանի ցուցադրումը"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Երբ դուք ցուցադրում, տեսագրում կամ հեռարձակում եք էկրանը, Android-ին հասանելի է լինում այն ամենը, ինչ տեսանելի է ձեր էկրանին և նվագարկվում է ձեր սարքում։ Ուստի ուշադիր եղեք այնպիսի բաների հետ, ինչպիսիք են գաղտնաբառերը, վճարային տվյալները, հաղորդագրությունները, լուսանկարները, աուդիո և վիդեո բովանդակությունը։"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Երբ դուք ցուցադրում, տեսագրում կամ հեռարձակում եք որևէ հավելվածի էկրանը, Android-ին հասանելի է լինում այն ամենը, ինչ ցուցադրվում է կամ նվագարկվում այդ հավելվածում։ Ուստի ուշադիր եղեք այնպիսի բաների հետ, ինչպիսիք են գաղտնաբառերը, վճարային տվյալները, հաղորդագրությունները, լուսանկարները, աուդիո և վիդեո բովանդակությունը։"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Սկսել"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Երբ անցում եք կատարում մեկ այլ հավելվածի, ընթացիկ հավելվածի համատեղ օգտագործումը դադարեցվում է"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Փոխարենը կիսվել այս հավելվածով"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Վերադառնալ"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Հավելվածների փոխանջատիչ"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Արգելափակվել է ձեր ՏՏ ադմինիստրատորի կողմից"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Էկրանի տեսագրումն անջատված է սարքի կանոնների համաձայն"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Մաքրել բոլորը"</string>
@@ -415,11 +441,11 @@
     <string name="quick_settings_disclosure_management_monitoring" msgid="8231336875820702180">"Ձեր կազմակերպությունը այս սարքի սեփականատերն է և կարող է վերահսկել ցանցային թրաֆիկը"</string>
     <string name="quick_settings_disclosure_named_management_monitoring" msgid="2831423806103479812">"«<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>» կազմակերպությունը այս սարքի սեփականատերն է և կարող է վերահսկել ցանցային թրաֆիկը"</string>
     <string name="quick_settings_financed_disclosure_named_management" msgid="2307703784594859524">"Այս սարքը տրամադրվել է <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> կազմակերպության կողմից"</string>
-    <string name="quick_settings_disclosure_management_named_vpn" msgid="4137564460025113168">"Այս սարքը պատկանում է ձեր կազմակերպությանը և համացանցին միացած է <xliff:g id="VPN_APP">%1$s</xliff:g>-ի միջոցով"</string>
+    <string name="quick_settings_disclosure_management_named_vpn" msgid="4137564460025113168">"Այս սարքը պատկանում է ձեր ընկերությանը և համացանցին միացած է <xliff:g id="VPN_APP">%1$s</xliff:g>-ի միջոցով"</string>
     <string name="quick_settings_disclosure_named_management_named_vpn" msgid="2169227918166358741">"Այս սարքը պատկանում է <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> կազմակերպությանը և համացանցին միացած է <xliff:g id="VPN_APP">%2$s</xliff:g>-ի միջոցով"</string>
-    <string name="quick_settings_disclosure_management" msgid="5515296598440684962">"Այս սարքը պատկանում է ձեր կազմակերպությանը"</string>
+    <string name="quick_settings_disclosure_management" msgid="5515296598440684962">"Այս սարքը պատկանում է ձեր ընկերությանը"</string>
     <string name="quick_settings_disclosure_named_management" msgid="3476472755775165827">"Այս սարքը պատկանում է «<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>» կազմակերպությանը"</string>
-    <string name="quick_settings_disclosure_management_vpns" msgid="929181757984262902">"Այս սարքը պատկանում է ձեր կազմակերպությանը և համացանցին միացած է VPN-ների միջոցով"</string>
+    <string name="quick_settings_disclosure_management_vpns" msgid="929181757984262902">"Այս սարքը պատկանում է ձեր ընկերությանը և համացանցին միացած է VPN-ների միջոցով"</string>
     <string name="quick_settings_disclosure_named_management_vpns" msgid="3312645578322079185">"Այս սարքը պատկանում է <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> կազմակերպությանը և համացանցին միացած է VPN-ների միջոցով"</string>
     <string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Ձեր կազմակերպությունը կարող է վերահսկել ձեր աշխատանքային պրոֆիլի ցանցային թրաֆիկը"</string>
     <string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> կազմակերպությունը կարող է վերահսկել ձեր աշխատանքային պրոֆիլի ցանցային թրաֆիկը"</string>
@@ -438,13 +464,14 @@
     <string name="monitoring_button_view_controls" msgid="8316440345340701117">"Դիտել կառավարման տարրերը"</string>
     <string name="monitoring_description_named_management" msgid="505833016545056036">"Այս սարքը պատկանում է «<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>» կազմակերպությանը։\n\nՁեր ՏՏ ադմինիստրատորը կարող է վերահսկել և կառավարել կարգավորումները, կորպորատիվ ռեսուրսներից օգտվելու թույլտվությունները, հավելվածները, սարքի հետ կապված տվյալները և սարքի տեղադրության տվյալները։\n\nԼրացուցիչ տեղեկությունների համար դիմեք ձեր ՏՏ ադմինիստրատորին։"</string>
     <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> կազմակերպությունը կարող է ստանալ այս սարքի հետ կապված տվյալների օգտագործման թույլտվություն, փոփոխել դրա կարգավորումներն ու կառավարել հավելվածները։\n\nԱվելին իմանալու համար դիմեք <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g> ընկերությանը։"</string>
-    <string name="monitoring_description_management" msgid="4308879039175729014">"Այս սարքը պատկանում է ձեր կազմակերպությանը։\n\nՁեր ՏՏ ադմինիստրատորը կարող է վերահսկել և կառավարել կարգավորումները, կորպորատիվ ռեսուրսներից օգտվելու թույլտվությունները, հավելվածները, սարքի հետ կապված տվյալները և սարքի տեղադրության տվյալները։\n\nԼրացուցիչ տեղեկությունների համար դիմեք ձեր ՏՏ ադմինիստրատորին։"</string>
+    <string name="monitoring_description_management" msgid="4308879039175729014">"Այս սարքը պատկանում է ձեր ընկերությանը։\n\nՁեր ՏՏ ադմինիստրատորը կարող է վերահսկել և կառավարել կարգավորումները, կորպորատիվ ռեսուրսներից օգտվելու թույլտվությունները, հավելվածները, սարքի հետ կապված տվյալները և սարքի տեղադրության տվյալները։\n\nԼրացուցիչ տեղեկությունների համար դիմեք ձեր ՏՏ ադմինիստրատորին։"</string>
     <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"Ձեր կազմակերպությունը այս սարքում տեղադրել է վկայագրման կենտրոն։ Ձեր ցանցի ապահով թրաֆիկը կարող է վերահսկվել կամ փոփոխվել։"</string>
     <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"Ձեր կազմակերպությունը ձեր աշխատանքային պրոֆիլում տեղադրել է վկայագրման կենտրոն։ Ձեր ցանցի ապահով թրաֆիկը կարող է վերահսկվել կամ փոփոխվել։"</string>
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Այս սարքում տեղադրված է վկայագրման կենտրոն։ Ձեր ցանցի ապահով թրաֆիկը կարող է վերահսկվել կամ փոփոխվել։"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Ձեր ադմինիստրատորը միացրել է ցանցային իրադարձությունների գրանցումը, որը վերահսկում է ձեր սարքի թրաֆիկը։"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Ձեր ադմինիստրատորը միացրել է ցանցային իրադարձությունների գրանցումը, որը վերահսկում է ձեր աշխատանքային պրոֆիլի թրաֆիկը (այլ ոչ անձնական պրոֆիլը)։"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Այս սարքը միացած է համացանցին <xliff:g id="VPN_APP">%1$s</xliff:g>-ի միջոցով։ Ձեր ցանցային ակտիվությունը աշխատանքային հավելվածներում, ներառյալ էլփոստում և դիտարկիչում արված գործողությունների տվյալները, տեսանելի են ձեր ՏՏ ադմինիստրատորին։"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Այս սարքը միացած է համացանցին <xliff:g id="VPN_APP">%1$s</xliff:g>-ի միջոցով։ Ձեր ցանցային ակտիվությունը՝ ներառյալ էլփոստում և դիտարկիչում արված գործողությունների տվյալները, տեսանելի են VPN պրովայդերին։"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Այս սարքը միացած է համացանցին <xliff:g id="VPN_APP">%1$s</xliff:g>-ի միջոցով։ Ձեր ցանցային ակտիվությունը՝ ներառյալ էլփոստում և դիտարկիչում արված գործողությունների տվյալները, տեսանելի են ձեր ՏՏ ադմինիստրատորին։"</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Այս սարքը համացանցին միացած է <xliff:g id="VPN_APP_0">%1$s</xliff:g>-ի և <xliff:g id="VPN_APP_1">%2$s</xliff:g>-ի միջոցով։ Ձեր ցանցային ակտիվությունը աշխատանքային հավելվածներում, ներառյալ էլփոստում և դիտարկիչում արված գործողությունների տվյալները, տեսանելի են ձեր ՏՏ ադմինիստրատորին։"</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Աշխատանքային հավելվածները համացանցին միացած են <xliff:g id="VPN_APP">%1$s</xliff:g>-ի միջոցով։ Ձեր ցանցային ակտիվությունը աշխատանքային հավելվածներում, ներառյալ էլփոստում և դիտարկիչում արված գործողությունների տվյալները, տեսանելի են ձեր ՏՏ ադմինիստրատորին և VPN-ի մատակարարին։"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Անձնական հավելվածները համացանցին միացած են <xliff:g id="VPN_APP">%1$s</xliff:g>-ի միջոցով։ Ձեր ցանցային ակտիվությունը անձնական հավելվածներում, ներառյալ էլփոստում և դիտարկիչում արված գործողությունների տվյալները, տեսանելի են ձեր VPN-ի մատակարարին։"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"անջատել"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Ձայն և թրթռոց"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Կարգավորումներ"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Ձայնն իջեցվեց անվտանգ մակարդակի"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Ձայնը բարձր է եղել առաջարկված ժամանակահատվածից ավելի երկար"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Ձայնն իջեցվեց անվտանգ մակարդակի"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Ձայնը բարձր է եղել առաջարկված ժամանակահատվածից ավելի երկար"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Ականջակալների ձայնի ուժգնությունը այս շաբաթ գերազանցել է անվտանգ մակարդակի շեմը"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Շարունակել լսել"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Ցածրացնել ձայնը"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Հավելվածն ամրացված է"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Էկրանը կմնա տեսադաշտում, մինչև այն ապամրացնեք: Ապամրացնելու համար հպեք և պահեք Հետ և Համատեսք կոճակները:"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Էկրանը կցուցադրվի այնքան ժամանակ, մինչև չեղարկեք ամրացումը: Չեղարկելու համար հպեք և պահեք «Հետ» և «Գլխավոր էկրան» կոճակները"</string>
@@ -651,7 +681,7 @@
     <string name="input_switch_input_language_next" msgid="3394291576873633793">"Անցնել ներածման հաջորդ լեզվին"</string>
     <string name="input_switch_input_language_previous" msgid="8823659252918609216">"Անցնել ներածման նախորդ լեզվին"</string>
     <string name="input_access_emoji" msgid="8105642858900406351">"Բացել էմոջիները"</string>
-    <string name="input_access_voice_typing" msgid="7291201476395326141">"Ակտիվացնել ձայնային մուտքագրումը"</string>
+    <string name="input_access_voice_typing" msgid="7291201476395326141">"Ակտիվացնել ձայնային ներածումը"</string>
     <string name="keyboard_shortcut_group_applications" msgid="7386239431100651266">"Հավելվածներ"</string>
     <string name="keyboard_shortcut_group_applications_assist" msgid="771606231466098742">"Օգնություն"</string>
     <string name="keyboard_shortcut_group_applications_browser" msgid="7328131901589876868">"Դիտարկիչ (Chrome-ը որպես կանխադրված)"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Սնուցման կոճակի ընտրացանկ"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Էջ <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Կողպէկրան"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Հեռախոսն անջատվել էր տաքանալու պատճառով"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Հեռախոսն այժմ նորմալ է աշխատում։\nՀպեք՝ ավելին իմանալու համար։"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Ձեր հեռախոսը չափազանց տաք էր, այդ պատճառով այն անջատվել է՝ հովանալու համար: Հեռախոսն այժմ նորմալ աշխատում է:\n\nՀեռախոսը կարող է տաքանալ, եթե՝\n	• Օգտագործում եք ռեսուրսատար հավելվածներ (օրինակ՝ խաղեր, տեսանյութեր կամ նավիգացիայի հավելվածներ)\n	• Ներբեռնում կամ վերբեռնում եք ծանր ֆայլեր\n	• Օգտագործում եք ձեր հեռախոսը բարձր ջերմային պայմաններում"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Քայլեր գերտաքացման ահազանգի դեպքում"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Հեռախոսը տաքանում է"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Հովանալու ընթացքում հեռախոսի որոշ գործառույթներ սահմանափակ են։\nՀպեք՝ ավելին իմանալու համար։"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Ձեր հեռախոսն ավտոմատ կերպով կփորձի hովանալ: Կարող եք շարունակել օգտագործել հեռախոսը, սակայն հնարավոր է, որ այն ավելի դանդաղ աշխատի:\n\nՀովանալուց հետո հեռախոսը կաշխատի կանոնավոր կերպով:"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Քայլեր գերտաքացման ահազանգի դեպքում"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Անջատեք սարքը"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Լիցքավորման միացքի հատվածում սարքը տաքանում է։ Եթե լիցքավորիչի կամ USB լրասարքի է միացված սարքը, անջատեք այն և զգույշ եղեք, քանի որ մալուխը ևս կարող է տաքացած լինել։"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Խոշորացնել ամբողջ էկրանը"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Խոշորացնել էկրանի որոշակի հատվածը"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Բացել խոշորացման կարգավորումները"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Փակել խոշորացման կարգավորումները"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Քաշեք անկյունը՝ չափը փոխելու համար"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Թույլատրել անկյունագծով ոլորումը"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Փոխել չափը"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ընտրանուց հեռացնելու համար"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Տեղափոխել դիրք <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Կառավարման տարրեր"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Ընտրեք սարքի կառավարման տարրերը՝ արագ բացելու համար"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Պահեք և քաշեք՝ կառավարման տարրերը վերադասավորելու համար"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Կառավարման բոլոր տարրերը հեռացվեցին"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Փոփոխությունները չեն պահվել"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Տեսնել այլ հավելվածներ"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Վերադասավորել"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Ավելացնել կարգավորումներ"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Ավելացնել կառավարման տարրեր"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Վերադառնալ խմբագրման ռեժիմին"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"Չհաջողվեց բեռնել կառավարման տարրերը։ Ստուգեք <xliff:g id="APP">%s</xliff:g> հավելվածը՝ համոզվելու, որ հավելվածի կարգավորումները չեն փոխվել։"</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"Համատեղելի կառավարման տարրերը հասանելի չեն"</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Փորձեք մեկ այլ PIN կոդ"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Հաստատեք փոփոխությունը <xliff:g id="DEVICE">%s</xliff:g> սարքի համար"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Սահեցրեք մատը՝ ավելին իմանալու համար"</string>
+    <string name="retry_face" msgid="416380073082560186">"Նորից փորձեք դեմքով իսկորոշումը"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Բեռնման խորհուրդներ"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Մեդիա"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Թաքցնե՞լ <xliff:g id="APP_NAME">%1$s</xliff:g>-ի մեդիա աշխատաշրջանի կառավարման տարրը։"</string>
-    <string name="controls_media_active_session" msgid="3146882316024153337">"Չհաջողվեց թաքցնել մեդիայի ընթացիկ աշխատաշրջանը։"</string>
+    <string name="controls_media_active_session" msgid="3146882316024153337">"Չհաջողվեց թաքցնել ընթացիկ մուլտիմեդիա աշխատաշրջանը։"</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Թաքցնել"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Շարունակել"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Կարգավորումներ"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Այժմ նվագարկվում է <xliff:g id="SONG_NAME">%1$s</xliff:g> երգը <xliff:g id="ARTIST_NAME">%2$s</xliff:g>-ի կատարմամբ <xliff:g id="APP_LABEL">%3$s</xliff:g> հավելվածից"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>՝ <xliff:g id="TOTAL_TIME">%2$s</xliff:g>-ից"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածն աշխատում է"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Նվագարկել"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Դադարեցնել"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Նախորդ կատարումը"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Բարձրախոսներ և էկրաններ"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Առաջարկվող սարքեր"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Կանգնեցրեք ընդհանուր աշխատաշրջանը՝ մուլտիմեդիա բովանդակությունն այլ սարք տեղափոխելու համար"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Կանգնեցնել"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Ինչպես է աշխատում հեռարձակումը"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Հեռարձակում"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Ձեր մոտակայքում գտնվող՝ համատեղելի Bluetooth սարքերով մարդիկ կարող են լսել մեդիա ֆայլերը, որոնք դուք հեռարձակում եք։"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Չհաջողվեց պահել։ Նորից փորձեք։"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Չհաջողվեց պահել։"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Օգտագործեք առնվազն 4 նիշ"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Օգտագործեք ոչ ավել քան 16 նիշ"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Օգտագործեք մինչև <xliff:g id="LENGTH">%1$d</xliff:g> նիշ"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Կառուցման համարը"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Կառուցման համարը պատճենվեց սեղմատախտակին։"</string>
     <string name="basic_status" msgid="2315371112182658176">"Բաց զրույց"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Մարտկոցի ցուցիչի ցուցմունքը կարդալու հետ կապված խնդիր կա"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Հպեք՝ ավելին իմանալու համար"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Զարթուցիչ դրված չէ"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ապակողպել էկրանը"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Մատնահետքի սկաներ"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"նույնականացնել"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"նշել սարքը"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Օգնականը լսում է"</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="note_task_button_label" msgid="8718616095800343136">"Նշումների ստեղծում"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Նշումների ստեղծում"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Նշումների ստեղծում, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Իմանալ ավելին"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Իմացեք ավելին <xliff:g id="URL">%s</xliff:g> էջում"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Բացել <xliff:g id="APPNAME">%1$s</xliff:g> հավելվածը"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Հավելվածը կարգավորված է"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Առնվազն մեկ քարտ ավելացված է Wallet-ում"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• «Տեսախցիկ» հավելվածը տեղադրված է"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Հավելվածը կարգավորված է"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Հասանելի է առնվազն մեկ սարք"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Wallet հավելվածի դյուրանցումն ավելացնելու համար համոզվեք, որ հավելվածը տեղադրված է"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Wallet հավելվածի դյուրանցումն ավելացնելու համար համոզվեք, որ առնվազն մեկ քարտ ավելացված է"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR կոդերի սկաների դյուրանցումն ավելացնելու համար համոզվեք, որ տեսախցիկի հավելվածը տեղադրված է"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home հավելվածի դյուրանցումն ավելացնելու համար համոզվեք, որ հավելվածը տեղադրված է"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Հասանելի է առնվազն մեկ սարք"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Ընտրեք նշումների կանխադրված հավելված՝ նշումների ստեղծման դյուրանցումն օգտագործելու համար"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Ընտրել հավելված"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Հպեք դյուրանցմանը և պահեք"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Չեղարկել"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Փոխել էկրանը հիմա"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Ձեր ստիլուսը միացրեք լիցքավորիչի"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Ստիլուսի մարտկոցի լիցքի ցածր մակարդակ"</string>
     <string name="video_camera" msgid="7654002575156149298">"Տեսախցիկ"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Հնարավոր չէ զանգել այս պրոֆիլից"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Ձեր աշխատանքային կանոնների համաձայն՝ դուք կարող եք զանգեր կատարել աշխատանքային պրոֆիլից"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Հնարավոր չէ զանգել անձնական հավելվածից"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Ձեր կազմակերպությունը թույլատրում է ձեզ զանգեր կատարել միայն աշխատանքային հավելվածներից"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Անցնել աշխատանքային պրոֆիլ"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Փակել"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Տեղադրել հեռախոսի աշխատանքային հավելված"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Չեղարկել"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Անհատականացնել կողպէկրանը"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Ապակողպեք սարքը՝ կողպէկրանը կարգավորելու համար"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi ցանց հասանելի չէ"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Տեսախցիկն արգելափակված է"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Տեսախցիկն ու խոսափողը արգելափակված են"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Խոսափողն արգելափակված է"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Առաջնահերթության ռեժիմը միացված է"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Օգնականը լսում է"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Կարգավորեք նշումների կանխադրված հավելված Կարգավորումներում"</string>
+    <string name="install_app" msgid="5066668100199613936">"Տեղադրել հավելվածը"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Խոսափող և տեսախցիկ"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Հավելվածի վերջին օգտագործումը"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Տեսնել վերջին օգտագործումը"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Պատրաստ է"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Ծավալել և ցույց տալ տարբերակները"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Ծալել"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Փակել այս հավելվածը"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը փակվեց"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Կառավարել ծառայությունը"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Կառավարել հասանելիությունը"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Օգտագործվում է հեռախոսազանգի կողմից"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Վերջերս օգտագործվել է հեռախոսազանգի ժամանակ"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Օգտագործվում է <xliff:g id="APP_NAME">%1$s</xliff:g>-ի կողմից"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Վերջերս օգտագործվել է <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի կողմից"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Օգտագործվում է <xliff:g id="APP_NAME">%1$s</xliff:g>-ի կողմից (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Վերջերս օգտագործվել է <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի կողմից (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Օգտագործվում է <xliff:g id="APP_NAME">%1$s</xliff:g>-ի կողմից (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Վերջերս օգտագործվել է <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի կողմից (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hy/strings_tv.xml b/packages/SystemUI/res/values-hy/strings_tv.xml
deleted file mode 100644
index b6a2e13..0000000
--- a/packages/SystemUI/res/values-hy/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN-ը միացված է"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN-ն անջատված է"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g>-ի միջոցով"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Ծանուցումներ"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Ծանուցումներ չկան"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Խոսափողը ձայնագրում է"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Տեսախցիկը տեսագրում է"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Տեսախցիկն ու խոսափողը տեսաձայնագրում են"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Խոսափողն այլևս չի ձայնագրում"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Տեսախցիկն այլևս չի տեսագրում"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Տեսախցիկն ու խոսափողը այլևս չեն տեսաձայնագրում"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Էկրանի տեսագրումը սկսվեց"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Էկրանի տեսագրումը կանգնեցվեց"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index ce3e7e3..0e8c3a1 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -83,7 +83,7 @@
     <string name="screenshot_edit_label" msgid="8754981973544133050">"Edit"</string>
     <string name="screenshot_edit_description" msgid="3333092254706788906">"Mengedit screenshot"</string>
     <string name="screenshot_share_description" msgid="2861628935812656612">"Bagikan screenshot"</string>
-    <string name="screenshot_scroll_label" msgid="2930198809899329367">"Ambil lebih banyak"</string>
+    <string name="screenshot_scroll_label" msgid="2930198809899329367">"Ambil screenshot lagi"</string>
     <string name="screenshot_dismiss_description" msgid="4702341245899508786">"Menutup screenshot"</string>
     <string name="screenshot_dismiss_work_profile" msgid="3101530842987697045">"Tutup pesan profil kerja"</string>
     <string name="screenshot_preview_description" msgid="7606510140714080474">"Pratinjau screenshot"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> mendeteksi screenshot ini."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> dan aplikasi terbuka lainnya mendeteksi screenshot ini."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Tambahkan ke catatan"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Perekam Layar"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Perekam Layar"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Memproses perekaman layar"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notifikasi yang sedang berjalan untuk sesi rekaman layar"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Mulai merekam?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Saat merekam, Sistem Android dapat ikut merekam informasi sensitif yang terlihat di layar atau diputar di perangkat Anda. Informasi ini mencakup sandi, info pembayaran, foto, pesan, dan audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Rekam seluruh layar"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Rekam satu aplikasi"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Saat Anda merekam, Android akan memiliki akses ke semua hal yang ditampilkan di layar atau yang diputar di perangkat Anda. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, atau informasi sensitif lainnya."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Saat Anda merekam aplikasi, Android akan memiliki akses ke semua hal yang ditampilkan atau yang diputar di aplikasi tersebut. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, atau informasi sensitif lainnya."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Mulai merekam"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Mulai Merekam?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Saat Anda merekam, Android akan memiliki akses ke semua hal yang ditampilkan di layar atau yang diputar di perangkat Anda. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, foto, audio, dan video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Saat Anda merekam aplikasi, Android akan memiliki akses ke semua hal yang ditampilkan atau yang diputar di aplikasi tersebut. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, foto, audio, dan video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Mulai merekam"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Rekam audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Audio perangkat"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Suara dari perangkat Anda, seperti musik, panggilan, dan nada dering"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Audio perangkat dan mikrofon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Mulai"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Mulai"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Merekam layar"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Merekam layar dan audio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Tampilkan lokasi sentuhan pada layar"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Bagikan"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Perekaman layar disimpan"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Ketuk untuk melihat"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Error saat menghapus rekaman layar"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Terjadi error saat menyimpan rekaman layar"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Terjadi error saat memulai perekaman layar"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Melihat layar penuh"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Untuk keluar, geser layar ke bawah dari atas."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Oke"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Kembali"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Utama"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Wajah diautentikasi"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Dikonfirmasi"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Ketuk Konfirmasi untuk menyelesaikan"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Kunci dibuka dengan wajah. Tekan ikon buka kunci untuk melanjutkan."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Kunci dibuka dengan wajah"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Kunci dibuka dengan wajah. Tekan untuk melanjutkan."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Wajah dikenali. Tekan untuk melanjutkan."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Wajah dikenali. Tekan ikon buka kunci untuk melanjutkan."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Diautentikasi"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Batalkan Autentikasi"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Gunakan PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Gunakan pola"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Gunakan sandi"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Jika Anda memasukkan pola yang salah saat mencoba lagi, profil kerja dan datanya akan dihapus."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Jika Anda memasukkan PIN yang salah saat mencoba lagi, profil kerja dan datanya akan dihapus."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Jika Anda memasukkan sandi yang salah saat mencoba lagi, profil kerja dan datanya akan dihapus."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Siapkan"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Lain kali"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Tindakan ini diperlukan untuk meningkatkan keamanan dan performa"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Siapkan Buka dengan Sidik Jari lagi"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Buka dengan Sidik Jari"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Siapkan Buka dengan Sidik Jari"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Untuk menyiapkan Buka dengan Sidik Jari lagi, gambar dan model sidik jari Anda saat ini akan dihapus.\n\nSetelah dihapus, Anda perlu menyiapkan Buka dengan Sidik Jari lagi untuk menggunakan sidik jari untuk membuka kunci ponsel atau memverifikasi diri Anda."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Untuk menyiapkan Buka dengan Sidik Jari lagi, gambar dan model sidik jari Anda saat ini akan dihapus.\n\nSetelah dihapus, Anda perlu menyiapkan Buka dengan Sidik Jari lagi untuk menggunakan sidik jari untuk membuka kunci ponsel atau memverifikasi diri Anda."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Tidak dapat menyiapkan buka dengan sidik jari. Buka Setelan untuk mencoba lagi."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Siapkan Buka dengan Wajah lagi"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Buka dengan Wajah"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Menyiapkan Buka dengan Wajah"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Untuk menyiapkan Buka dengan Wajah lagi, model wajah Anda saat ini akan dihapus.\n\nAnda perlu menyiapkan fitur ini lagi untuk menggunakan wajah Anda untuk membuka kunci ponsel."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Tidak dapat menyiapkan buka dengan wajah. Buka Setelan untuk mencoba lagi."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Sentuh sensor sidik jari"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Tekan ikon buka kunci untuk melanjutkan"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Tidak dapat mengenali wajah. Gunakan sidik jari."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -231,8 +247,8 @@
     <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Baterai <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
-    <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Masukan"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Alat Bantu Dengar"</string>
+    <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Alat bantu dengar"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Mengaktifkan…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Putar Otomatis"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Putar layar otomatis"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Kunci dibuka dengan wajah"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Wajah dikenali"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Geser ke atas untuk mencoba lagi"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Geser ke atas untuk mencoba Buka dengan Wajah lagi"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Buka kunci untuk menggunakan NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Perangkat ini milik organisasi Anda"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Perangkat ini milik <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> akan memiliki akses ke semua informasi yang terlihat di layar atau diputar dari perangkat saat merekam atau melakukan transmisi. Ini mencakup informasi seperti sandi, detail pembayaran, foto, pesan, dan audio yang Anda putar."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Layanan yang menyediakan fungsi ini akan memiliki akses ke semua informasi yang terlihat di layar atau diputar dari perangkat saat merekam atau melakukan transmisi. Ini mencakup informasi seperti sandi, detail pembayaran, foto, pesan, dan audio yang Anda putar."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Mulai merekam atau melakukan transmisi?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Mulai merekam atau melakukan transmisi dengan <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Izinkan <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> untuk membagikan atau merekam?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Seluruh layar"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Satu aplikasi"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Jika Anda membagikan, merekam, atau mentransmisikan, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> akan memiliki akses ke semua hal yang ditampilkan di layar atau yang diputar di perangkat Anda. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, atau informasi sensitif lainnya."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Jika Anda membagikan, merekam, atau mentransmisikan suatu aplikasi, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> akan memiliki akses ke semua hal yang ditampilkan atau yang diputar di aplikasi tersebut. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, atau informasi sensitif lainnya."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Lanjutkan"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Bagikan atau rekam aplikasi"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Izinkan aplikasi ini membagikan atau merekam?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Jika Anda membagikan, merekam, atau mentransmisikan, aplikasi ini akan memiliki akses ke semua hal yang ditampilkan di layar atau yang diputar di perangkat Anda. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, atau informasi sensitif lainnya."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Jika Anda membagikan, merekam, atau mentransmisikan suatu aplikasi, aplikasi ini akan memiliki akses ke semua hal yang ditampilkan atau yang diputar di aplikasi tersebut. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, atau informasi sensitif lainnya."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> akan memiliki akses ke semua informasi yang terlihat di layar atau diputar dari perangkat saat merekam atau melakukan transmisi. Ini mencakup informasi seperti sandi, detail pembayaran, foto, pesan, dan audio yang Anda putar."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Mulai merekam atau melakukan transmisi?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Layanan yang menyediakan fungsi ini akan memiliki akses ke semua informasi yang terlihat di layar atau diputar dari perangkat saat merekam atau melakukan transmisi. Ini mencakup informasi seperti sandi, detail pembayaran, foto, pesan, dan audio yang Anda putar."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Seluruh layar"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Satu aplikasi"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Bagikan atau rekam aplikasi"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Mulai merekam atau mentransmisikan dengan <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Jika Anda membagikan, merekam, atau mentransmisikan, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> akan memiliki akses ke semua hal yang ditampilkan di layar atau yang diputar di perangkat Anda. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, foto, audio, dan video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Jika Anda membagikan, merekam, atau mentransmisikan suatu aplikasi, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> akan memiliki akses ke semua hal yang ditampilkan atau yang diputar di aplikasi tersebut. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, foto, audio dan video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Mulai"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Mulai mentransmisikan?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Jika mentransmisikan, Android akan memiliki akses ke semua hal yang ditampilkan di layar atau yang diputar di perangkat Anda. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, foto, audio, dan video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Jika Anda mentransmisikan aplikasi, Android akan memiliki akses ke semua hal yang ditampilkan atau yang diputar di aplikasi tersebut. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, foto, audio, dan video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Mulai mentransmisikan"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Mulai berbagi?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Jika Anda membagikan, merekam, atau mentransmisikan, Android akan memiliki akses ke semua hal yang ditampilkan di layar atau yang diputar di perangkat Anda. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, foto, audio, dan video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Jika Anda membagikan, merekam, atau mentransmisikan suatu aplikasi, Android akan memiliki akses ke semua hal yang ditampilkan atau yang diputar di aplikasi tersebut. Jadi, berhati-hatilah saat memasukkan sandi, detail pembayaran, pesan, foto, audio, dan video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Mulai"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Berbagi akan dijeda saat Anda beralih aplikasi"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Bagikan aplikasi ini"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Beralih kembali"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Beralih aplikasi"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Diblokir oleh admin IT Anda"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Pengambilan screenshot dinonaktifkan oleh kebijakan perangkat"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Hapus semua"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Otoritas sertifikat diinstal di perangkat. Traffic jaringan aman Anda mungkin dipantau atau diubah."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Admin telah mengaktifkan pencatatan log jaringan, yang memantau traffic di perangkat."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Admin telah mengaktifkan pencatatan log jaringan, yang memantau traffic di profil kerja, tetapi tidak di profil pribadi."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Perangkat ini terhubung ke internet melalui <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktivitas jaringan Anda, termasuk email dan data penjelajahan, dapat dilihat oleh admin IT."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Perangkat ini terhubung ke internet melalui <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktivitas jaringan Anda, termasuk email dan data penjelajahan, dapat dilihat oleh penyedia VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Perangkat ini terhubung ke internet melalui <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktivitas jaringan Anda, termasuk email dan data penjelajahan, dapat dilihat oleh admin IT."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Perangkat ini terhubung ke internet melalui <xliff:g id="VPN_APP_0">%1$s</xliff:g> dan <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Aktivitas jaringan Anda, termasuk email dan data penjelajahan, dapat dilihat oleh admin IT."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Aplikasi kerja Anda terhubung ke internet melalui <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktivitas jaringan Anda di aplikasi kerja, termasuk email dan data penjelajahan, dapat dilihat oleh admin IT dan penyedia VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Aplikasi pribadi Anda terhubung ke internet melalui <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktivitas jaringan Anda, termasuk email dan data penjelajahan, dapat dilihat oleh penyedia VPN."</string>
@@ -455,15 +482,18 @@
     <string name="keyguard_indication_trust_unlocked" msgid="7395154975733744547">"Tetap terbuka kuncinya oleh TrustAgent"</string>
     <string name="zen_mode_and_condition" msgid="5043165189511223718">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
     <string name="accessibility_volume_settings" msgid="1458961116951564784">"Setelan suara"</string>
-    <string name="volume_odi_captions_tip" msgid="8825655463280990941">"Otomatis beri teks ke media"</string>
+    <string name="volume_odi_captions_tip" msgid="8825655463280990941">"Otomatis beri teks di media"</string>
     <string name="accessibility_volume_close_odi_captions_tip" msgid="8924753283621160480">"Tutup tooltip teks"</string>
     <string name="volume_odi_captions_content_description" msgid="4172765742046013630">"Overlay teks"</string>
     <string name="volume_odi_captions_hint_enable" msgid="2073091194012843195">"aktifkan"</string>
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"nonaktifkan"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Suara &amp; getaran"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Setelan"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Diturunkan ke volume yang lebih aman"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Volume tinggi selama lebih lama dari yang direkomendasikan"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volume diturunkan ke level yang lebih aman"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Volume headphone tinggi selama lebih lama dari yang direkomendasikan"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Volume headphone telah melampaui batas aman untuk minggu ini"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Terus dengarkan"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Turunkan volume"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Aplikasi disematkan"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Ini akan terus ditampilkan sampai Anda melepas sematan. Sentuh lama tombol Kembali dan Ringkasan untuk melepas sematan."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ini akan terus ditampilkan sampai Anda melepas sematan. Sentuh lama tombol Kembali dan Beranda untuk melepas sematan."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menu daya"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Halaman <xliff:g id="ID_1">%1$d</xliff:g> dari <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Layar kunci"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Ponsel dimatikan karena panas"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Ponsel kini berfungsi normal.\nKetuk untuk info selengkapnya"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Ponsel menjadi terlalu panas, jadi dimatikan untuk mendinginkan. Ponsel kini berfungsi normal.\n\nPonsel dapat menjadi terlalu panas jika Anda:\n	• Menggunakan aplikasi yang menggunakan sumber daya secara intensif (seperti aplikasi game, video, atau navigasi)\n	• Mendownload atau mengupload file besar\n	• Menggunakan ponsel dalam suhu tinggi"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Lihat langkah-langkah perawatan"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Ponsel menjadi hangat"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Beberapa fitur dibatasi saat ponsel mendingin.\nKetuk untuk info selengkapnya"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Ponsel akan otomatis mencoba mendingin. Anda tetap dapat menggunakan ponsel, tetapi mungkin berjalan lebih lambat.\n\nSetelah dingin, ponsel akan berjalan seperti biasa."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Lihat langkah-langkah perawatan"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Cabut perangkat"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Perangkat menjadi panas saat di dekat port pengisi daya. Jika perangkat terhubung ke pengisi daya atau aksesori USB, cabutlah dan berhati-hatilah karena suhu kabel mungkin juga panas."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Memperbesar tampilan layar penuh"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Perbesar sebagian layar"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Buka setelan pembesaran"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Tutup setelan pembesaran"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Tarik pojok persegi untuk mengubah ukuran"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Izinkan scrolling diagonal"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Ubah ukuran"</string>
@@ -849,7 +874,7 @@
     <string name="accessibility_magnification_right_handle" msgid="9055988237319397605">"Tuas kanan"</string>
     <string name="accessibility_magnification_bottom_handle" msgid="6531646968813821258">"Tuas bawah"</string>
     <string name="accessibility_magnification_settings_panel_description" msgid="8174187340747846953">"Setelan pembesaran"</string>
-    <string name="accessibility_magnifier_size" msgid="3038755600030422334">"Ukuran kaca pembesar"</string>
+    <string name="accessibility_magnifier_size" msgid="3038755600030422334">"Ukuran pembesaran"</string>
     <string name="accessibility_magnification_zoom" msgid="4222088982642063979">"Zoom"</string>
     <string name="accessibility_magnification_medium" msgid="6994632616884562625">"Sedang"</string>
     <string name="accessibility_magnification_small" msgid="8144502090651099970">"Kecil"</string>
@@ -857,7 +882,7 @@
     <string name="accessibility_magnification_fullscreen" msgid="5043514702759201964">"Layar penuh"</string>
     <string name="accessibility_magnification_done" msgid="263349129937348512">"Selesai"</string>
     <string name="accessibility_magnifier_edit" msgid="1522877239671820636">"Edit"</string>
-    <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Setelan jendela kaca pembesar"</string>
+    <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Setelan jendela pembesaran"</string>
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Ketuk untuk membuka fitur aksesibilitas. Sesuaikan atau ganti tombol ini di Setelan.\n\n"<annotation id="link">"Lihat setelan"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Pindahkan tombol ke tepi agar tersembunyi untuk sementara"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Urungkan"</string>
@@ -885,13 +910,12 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"batal favoritkan"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Pindah ke posisi <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrol"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Pilih kontrol perangkat untuk mengakses dengan cepat"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Tahan &amp; tarik untuk menata ulang kontrol"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Semua kontrol dihapus"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Perubahan tidak disimpan"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Lihat aplikasi lainnya"</string>
-    <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Atur ulang"</string>
+    <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Tata ulang"</string>
     <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Tambahkan kontrol"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Kembali mengedit"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"Kontrol tidak dapat dimuat. Periksa aplikasi <xliff:g id="APP">%s</xliff:g> untuk memastikan setelan aplikasi tidak berubah."</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Coba PIN lain"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Konfirmasi perubahan untuk <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Geser untuk melihat selengkapnya"</string>
+    <string name="retry_face" msgid="416380073082560186">"Coba autentikasi wajah lagi"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Memuat rekomendasi"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"Sembunyikan kontrol media ini untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"Sembunyikan kontrol media untuk <xliff:g id="APP_NAME">%1$s</xliff:g> ini?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"Sesi media aktif tidak dapat disembunyikan."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Sembunyikan"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Lanjutkan"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Setelan"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> oleh <xliff:g id="ARTIST_NAME">%2$s</xliff:g> sedang diputar dari <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> dari <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> sedang berjalan"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Putar"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Jeda"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Lagu sebelumnya"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Speaker &amp; Layar"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Perangkat yang Disarankan"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Menghentikan sesi berbagi Anda untuk memindahkan media ke perangkat lain"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Berhenti"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Cara kerja siaran"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Siaran"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Orang di dekat Anda dengan perangkat Bluetooth yang kompatibel dapat mendengarkan media yang sedang Anda siarkan"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Tidak dapat menyimpan. Coba lagi."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Tidak dapat menyimpan."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Gunakan minimal 4 karakter"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Gunakan kurang dari 16 karakter"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Gunakan kurang dari <xliff:g id="LENGTH">%1$d</xliff:g> karakter"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Nomor build"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Nomor versi disalin ke papan klip."</string>
     <string name="basic_status" msgid="2315371112182658176">"Membuka percakapan"</string>
@@ -1013,7 +1041,7 @@
     <string name="status_before_loading" msgid="1500477307859631381">"Konten akan segera muncul"</string>
     <string name="missed_call" msgid="4228016077700161689">"Panggilan tak terjawab"</string>
     <string name="messages_count_overflow_indicator" msgid="7850934067082006043">"<xliff:g id="NUMBER">%d</xliff:g>+"</string>
-    <string name="people_tile_description" msgid="8154966188085545556">"Lihat pesan terbaru, panggilan tak terjawab, dan pembaruan status"</string>
+    <string name="people_tile_description" msgid="8154966188085545556">"Lihat pesan terbaru, panggilan tak terjawab, dan status terkini"</string>
     <string name="people_tile_title" msgid="6589377493334871272">"Percakapan"</string>
     <string name="paused_by_dnd" msgid="7856941866433556428">"Dijeda oleh fitur Jangan Ganggu"</string>
     <string name="new_notification_text_content_description" msgid="2915029960094389291">"<xliff:g id="NAME">%1$s</xliff:g> mengirim pesan: <xliff:g id="NOTIFICATION">%2$s</xliff:g>"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Terjadi error saat membaca indikator baterai"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Ketuk untuk informasi selengkapnya"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Alarm tidak disetel"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"masukkan kunci layar"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Sensor sidik jari"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autentikasi"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"masukkan perangkat"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant sedang mendengarkan"</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="note_task_button_label" msgid="8718616095800343136">"Pembuatan catatan"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Pembuatan catatan"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Pembuatan catatan, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Pelajari lebih lanjut"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Pelajari lebih lanjut di <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Buka <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Aplikasi disiapkan"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Minimal satu kartu telah ditambahkan ke Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Menginstal aplikasi kamera"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Aplikasi disiapkan"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Tersedia minimal satu perangkat"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Untuk menambahkan aplikasi Wallet sebagai pintasan, pastikan aplikasi sudah diinstal"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Untuk menambahkan aplikasi Wallet sebagai pintasan, pastikan minimal satu kartu telah ditambahkan"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Untuk menambahkan pemindai kode QR sebagai pintasan, pastikan aplikasi kamera sudah diinstal"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Untuk menambahkan aplikasi Home sebagai pintasan, pastikan aplikasi sudah diinstal"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Tersedia minimal satu perangkat"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Pilih aplikasi catatan default untuk menggunakan pintasan pembuatan catatan"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Pilih aplikasi"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Sentuh lama pintasan"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Batal"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Beralih layar sekarang"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Hubungkan stilus ke pengisi daya"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Baterai stilus lemah"</string>
     <string name="video_camera" msgid="7654002575156149298">"Kamera video"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Tidak dapat melakukan panggilan dari profil ini"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Kebijakan kantor mengizinkan Anda melakukan panggilan telepon hanya dari profil kerja"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Tidak dapat menelepon dari aplikasi pribadi"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Organisasi Anda hanya mengizinkan menelepon dari aplikasi kerja"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Beralih ke profil kerja"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Tutup"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instal aplikasi telepon kerja"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Batalkan"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Sesuaikan layar kunci"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Buka kunci untuk menyesuaikan layar kunci"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi tidak tersedia"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera diblokir"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera dan mikrofon diblokir"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon diblokir"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Mode prioritas diaktifkan"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Asisten sedang memerhatikan"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Setel aplikasi catatan default di Setelan"</string>
+    <string name="install_app" msgid="5066668100199613936">"Instal aplikasi"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon &amp; Kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Penggunaan aplikasi baru-baru ini"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Lihat akses terbaru"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Selesai"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Luaskan dan tampilkan opsi"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Ciutkan"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Tutup aplikasi ini"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> ditutup"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Kelola layanan"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Kelola akses"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Sedang digunakan untuk panggilan telepon"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Baru saja digunakan untuk panggilan telepon"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Sedang digunakan oleh <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Baru saja digunakan oleh <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Sedang digunakan oleh <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Baru saja digunakan oleh <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Sedang digunakan oleh <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Baru saja digunakan oleh <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-in/strings_tv.xml b/packages/SystemUI/res/values-in/strings_tv.xml
deleted file mode 100644
index 1b8261e7..0000000
--- a/packages/SystemUI/res/values-in/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN terhubung"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN terputus"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Melalui <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notifikasi"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Tidak Ada Notifikasi"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofon sedang merekam"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera sedang merekam"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera dan Mikrofon sedang merekam"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofon berhenti merekam"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kamera berhenti merekam"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kamera dan Mikrofon berhenti merekam"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Perekaman layar dimulai"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Perekaman layar dihentikan"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index 0f29c29..8411db4 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Virkja USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Frekari upplýsingar"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Skjámynd"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Slökkt á Extend Unlock"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Slökkt á Lengri opnun"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"sendi mynd"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Vistar skjámynd…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Vistar skjámynd á vinnusnið…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> greindi skjámyndina."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> og önnur opin forrit greindu skjámyndina."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Bæta við glósu"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Skjáupptaka"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Skjáupptaka"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Vinnur úr skjáupptöku"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Áframhaldandi tilkynning fyrir skjáupptökulotu"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Hefja upptöku?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Á meðan tekið er upp getur Android-kerfið fangað viðkvæmar upplýsingar sem sjást á skjánum eða spilast í tækinu, þar á meðal aðgangsorð, greiðsluupplýsingar, myndir, skilaboð og hljóð."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Taka upp allan skjáinn"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Taka upp eitt forrit"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Þegar þú tekur upp hefur Android aðgang að öllu sem sést á skjánum eða spilast í tækinu. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð eða aðrar viðkvæmar upplýsingar."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Þegar þú tekur upp forrit hefur Android aðgang að öllu sem sést eða spilast í viðkomandi forriti. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð eða aðrar viðkvæmar upplýsingar."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Hefja upptöku"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Hefja upptöku?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Þegar þú tekur upp hefur Android aðgang að öllu sem sést á skjánum eða spilast í tækinu. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð, myndir, hljóð og myndskeið."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Þegar þú tekur upp forrit hefur Android aðgang að öllu sem sést eða spilast í viðkomandi forriti. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð, myndir, hljóð og myndskeið."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Hefja upptöku"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Taka upp hljóð"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Hljóð tækis"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Hljóð úr tækinu á borð við tónlist, símtöl og hringitóna"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Hljóðnemi"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Hljóð og hljóðnemi tækis"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Byrja"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Byrja"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Tekur upp skjá"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Tekur upp skjá og hljóð"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Sýna snertingu skjás"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Deila"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Skjáupptaka vistuð"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Ýttu til að skoða"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Villa við að eyða skjáupptöku"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Villa við að vista skjáupptöku"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Villa við að hefja upptöku skjás"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Notar allan skjáinn"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Strjúktu niður frá efsta hluta skjásins til að hætta."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Ég skil"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Til baka"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Heim"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Valmynd"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Andlit staðfest"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Staðfest"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Ýttu á „Staðfesta“ til að ljúka"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Opnað með andliti. Ýttu á táknið taka úr lás til að halda áfram."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Opnað með andliti"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Opnað með andliti. Ýttu til að halda áfram."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Andlitið var greint. Ýttu til að halda áfram."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Andlitið var greint. Ýttu á opnunartáknið til að halda áfr."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Auðkennt"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Hætta við auðkenningu"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Nota PIN-númer"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Nota mynstur"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Nota aðgangsorð"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Ef þú slærð inn rangt mynstur í næstu tilraun verður vinnusniðinu þínu og gögnum þess eytt."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Ef þú slærð inn rangt PIN-númer í næstu tilraun verður vinnusniðinu þínu og gögnum þess eytt."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Ef þú slærð inn rangt aðgangsorð í næstu tilraun verður vinnusniðinu þínu og gögnum þess eytt."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Setja upp"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Ekki núna"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Þetta er áskilið til að bæta öryggi og afköst"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Setja upp fingrafarskenni aftur"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Fingrafarskenni"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Setja upp fingrafarskenni"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Núverandi fingrafarsmyndum og -líkönum verður eytt til að setja fingrafarskenni upp á ný.\n\nÞegar búið er að eyða efninu þarftu að setja upp fingrafarskenni aftur til að nota fingrafarið til að taka símann úr lás eða staðfesta hver þú ert."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Núverandi fingrafarsmyndum og -líkani verður eytt til að setja fingrafarskenni upp á ný.\n\nÞegar búið er að eyða efninu þarftu að setja upp fingrafarskenni aftur til að nota fingrafarið til að taka símann úr lás eða staðfesta hver þú ert."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Ekki var hægt að setja upp fingrafarskenni. Farðu í stillingar og reyndu aftur."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Setja upp andlitskenni aftur"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Andlitskenni"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Setja upp andlitskenni"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Núverandi andlitslíkani verður eytt til að setja andlitskenni upp á ný.\n\nÞú þarft að setja þennan eiginleika upp aftur til að nota andlitið til að taka símann úr lás."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Ekki var hægt að setja upp andlitskenni. Farðu í stillingar og reyndu aftur."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Snertu fingrafaralesarann"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Ýttu á táknið taka úr lás til að halda áfram"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Andlit þekkist ekki. Notaðu fingrafar í staðinn."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Hljóð"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Höfuðtól"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Inntak"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Heyrnartæki"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Heyrnartæki"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Kveikir…"</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Opnað með andliti"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Andlitið var greint"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Strjúktu upp til að reyna aftur"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Strjúktu upp til að prófa andlitskenni aftur"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Taktu úr lás til að nota NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Þetta tæki tilheyrir fyrirtækinu þínu"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Þetta tæki tilheyrir <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> mun hafa aðgang að öllum upplýsingum sem sjást á skjánum eða eru spilaðar í tækinu á meðan upptaka eða útsending er í gangi. Þar á meðal eru upplýsingar á borð við aðgangsorð, greiðsluupplýsingar, myndir, skilaboð og hljóð sem þú spilar."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Þjónustan sem býður upp á þennan eiginleika fær aðgang að öllum upplýsingum sem sjást á skjánum eða eru spilaðar í tækinu á meðan upptaka eða útsending er í gangi, þar á meðal aðgangsorði, greiðsluupplýsingum, myndum, skilaboðum og hljóðefni sem þú spilar."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Viltu hefja upptöku eða útsendingu?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Viltu hefja upptöku eða útsendingu með <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Leyfa <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> að deila eða taka upp?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Allur skjárinn"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Eitt forrit"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Þegar þú deilir, tekur upp eða sendir út hefur<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aðgang að öllu sem sést á skjánum eða spilast í tækinu. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð eða aðrar viðkvæmar upplýsingar."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Þegar þú deilir, tekur upp eða sendir út forrit hefur <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aðgang að öllu sem sést eða spilast í viðkomandi forriti. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð eða aðrar viðkvæmar upplýsingar."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Áfram"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Deila eða taka upp forrit"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Leyfa þessu forriti að deila eða taka upp?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Þegar þú deilir, tekur upp eða sendir út fær þetta forrit aðgang að öllu sem sést á skjánum eða spilast í tækinu. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð eða aðrar viðkvæmar upplýsingar."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Þegar þú deilir, tekur upp eða sendir út forrit hefur viðkomandi forrit aðgang að öllu sem sést eða spilast í forritinu. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð eða aðrar viðkvæmar upplýsingar."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> mun hafa aðgang að öllum upplýsingum sem sjást á skjánum eða eru spilaðar í tækinu á meðan upptaka eða vörpun er í gangi. Þar á meðal eru upplýsingar á borð við aðgangsorð, greiðsluupplýsingar, myndir, skilaboð og hljóð sem þú spilar."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Viltu hefja upptöku eða vörpun?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Þjónustan sem býður upp á þennan eiginleika fær aðgang að öllum upplýsingum sem sjást á skjánum eða eru spilaðar í tækinu á meðan upptaka eða vörpun er í gangi, þar á meðal aðgangsorði, greiðsluupplýsingum, myndum, skilaboðum og hljóðefni sem þú spilar."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Allur skjárinn"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Eitt forrit"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Deila eða taka upp forrit"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Viltu hefja upptöku eða vörpun með <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Þegar þú deilir, tekur upp eða varpar hefur<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aðgang að öllu sem sést á skjánum eða spilast í tækinu. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð, myndir, hljóð og myndskeið."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Þegar þú deilir, tekur upp eða varpar forriti hefur <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aðgang að öllu sem sést eða spilast í viðkomandi forriti. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð, myndir, hljóð og myndskeið."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Byrja"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Byrja að varpa?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Þegar þú varpar hefur Android aðgang að öllu sem er sýnilegt á skjánum hjá þér eða spilast í tækinu þínu. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð, myndir, hljóð og myndskeið."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Þegar þú varpar forriti hefur Android aðgang að öllu sem sést eða spilast í viðkomandi forriti. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð, myndir, hljóð og myndskeið."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Byrja að varpa"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Byrja að deila?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Þegar þú deilir, tekur upp eða varpar hefur Android aðgang að öllu sem sést á skjánum eða spilast í tækinu. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð, myndir, hljóð og myndskeið."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Þegar þú deilir, tekur upp eða varpar forriti hefur Android aðgang að öllu sem sést eða spilast í viðkomandi forriti. Passaðu því upp á aðgangsorð, greiðsluupplýsingar, skilaboð, myndir, hljóð og myndskeið."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Byrja"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Hlé er gert á samnýtingu þegar þú skiptir um forrit"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Deila frekar þessu forriti"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Skipta til baka"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Skipta um forrit"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Útilokað af kerfisstjóra"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Slökkt er á skjáupptöku í tækjareglum"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Hreinsa allt"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"CA-vottorð er uppsett á þessu tæki. Eftirlit kann að vera haft með öruggri netnotkun þinni eða henni kann að vera breytt."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Kerfisstjóri hefur kveikt á eftirliti netkerfa, sem fylgist með netumferð á tækinu þínu."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Stjórnandinn kveikti á eftirliti netkerfa sem fylgist með netumferð á vinnusniðinu þínu en ekki á eigin sniði."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Þetta tæki er nettengt í gegnum <xliff:g id="VPN_APP">%1$s</xliff:g>. Kerfisstjórinn þinn getur séð netvirkni þína í vinnuforritum, þar á meðal tölvupósta og vefskoðunargögn."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Þetta tæki er nettengt í gegnum <xliff:g id="VPN_APP">%1$s</xliff:g>. VPN-þjónustuaðilinn getur séð netvirkni þína, þar á meðal tölvupóst og vefskoðunargögn."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Þetta tæki er nettengt í gegnum <xliff:g id="VPN_APP">%1$s</xliff:g>. Kerfisstjórinn þinn getur séð netvirkni þína í vinnuforritum, þar á meðal tölvupóst og vefskoðunargögn."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Þetta tæki er nettengt í gegnum <xliff:g id="VPN_APP_0">%1$s</xliff:g> og <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Kerfisstjórinn þinn getur séð netvirkni þína í vinnuforritum, þar á meðal tölvupósta og vefskoðunargögn."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Vinnuforritin þín eru nettengd í gegnum <xliff:g id="VPN_APP">%1$s</xliff:g>. Kerfisstjórinn þinn og VPN-þjónustuaðilinn geta séð netvirkni þína í vinnuforritum, þar á meðal tölvupósta og vefskoðunargögn."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Forritin þín til einkanota eru nettengd í gegnum <xliff:g id="VPN_APP">%1$s</xliff:g>. VPN-þjónustuaðilinn þinn getur séð netvirkni þína í vinnuforritum, þar á meðal tölvupósta og vefskoðunargögn."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"slökkva"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Hljóð og titringur"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Stillingar"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Lækkað í öruggari hljóðstyrk"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Hljóðstyrkurinn hefur verið hár í lengri tíma en mælt er með"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Hljóð lækkað í öruggari hljóðstyrk"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Hljóðstyrkur í heyrnartólum hefur verið hár í lengri tíma en mælt er með"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Hljóðstyrkur í heyrnartólum hefur náð öryggismörkum fyrir þessa viku"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Halda áfram að hlusta"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Lækka hljóð"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Forrit er fest"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Þetta heldur þessu opnu þangað til þú losar það. Haltu fingri á „Til baka“ og „Yfirlit“ til að losa."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Þetta heldur þessu opnu þangað til það er losað. Haltu inni bakkhnappinum og heimahnappinum til að losa."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Aflrofavalmynd"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Blaðsíða <xliff:g id="ID_1">%1$d</xliff:g> af <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Lásskjár"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Slökkt var á símanum vegna hita"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Síminn virkar nú eins og venjulega.\nÝttu til að fá frekari upplýsingar"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Síminn varð of heitur og því var slökkt á honum til að kæla hann. Síminn virkar núna sem skyldi.\n\nSíminn getur orðið of heitur ef þú:\n	• Notar plássfrek forrit (t.d. leikja-, myndbands- eða leiðsagnarforrit\n	• Sækir eða hleður upp stórum skrám\n	• Notar símann í miklum hita"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Sjá varúðarskref"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Síminn er að hitna"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Sumir eiginleikar eru takmarkaðir meðan síminn kælir sig.\nÝttu til að fá frekari upplýsingar"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Síminn reynir sjálfkrafa að kæla sig. Þú getur enn notað símann en hann gæti verið hægvirkari.\n\nEftir að síminn hefur kælt sig niður virkar hann eðlilega."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Sjá varúðarskref"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Taktu tækið úr sambandi"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Tækið er að hitna nálægt hleðslutenginu. Ef það er tengt við hleðslutæki eða USB-aukahlut skaltu taka það úr sambandi og hafa í huga að snúran gæti einnig verið heit."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Stækka allan skjáinn"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Stækka hluta skjásins"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Opna stillingar stækkunar"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Loka stillingum stækkunar"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Dragðu horn til að breyta stærð"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Leyfa skáflettingu"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Breyta stærð"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"fjarlægja úr eftirlæti"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Færa í stöðu <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Stýringar"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Veldu tækjastjórnun sem þú vilt nálgast í skyndi"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Haltu og dragðu til að endurraða stýringum"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Allar stýringar fjarlægðar"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Breytingar ekki vistaðar"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Prófaðu annað PIN-númer"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Staðfesta breytingu fyrir <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Strjúktu til að sjá meira"</string>
+    <string name="retry_face" msgid="416380073082560186">"Prófa andlitsgreiningu aftur"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Hleður tillögum"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Margmiðlunarefni"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Fela þessa efnisstýringu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Stillingar"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> með <xliff:g id="ARTIST_NAME">%2$s</xliff:g> er í spilun á <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> af <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> er í gangi"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Spila"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Gera hlé"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Fyrra lag"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Hátalarar og skjáir"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Tillögur að tækjum"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Stöðvaðu sameiginlega lotu til að flytja efni yfir í annað tæki"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Stöðva"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Svona virkar útsending"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Útsending"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Fólk nálægt þér með samhæf Bluetooth-tæki getur hlustað á efnið sem þú sendir út"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Ekki hægt að vista. Reyndu aftur."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Ekki hægt að vista."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Notaðu að minnsta kosti 4 stafi"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Notaðu færri en 16 stafi"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Notaðu færri en <xliff:g id="LENGTH">%1$d</xliff:g> stafi"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Útgáfunúmer smíðar"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Útgáfunúmer smíðar afritað á klippiborð."</string>
     <string name="basic_status" msgid="2315371112182658176">"Opna samtal"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Vandamál við að lesa stöðu rafhlöðu"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Ýttu til að fá frekari upplýsingar"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Enginn vekjari"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"sláðu inn skjálás"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Fingrafaralesari"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"auðkenna"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"opna tæki"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Hjálparinn er að hlusta"</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="note_task_button_label" msgid="8718616095800343136">"Glósugerð"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Glósugerð"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Glósugerð, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1094,18 +1124,20 @@
     <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Óþekkt"</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>
-    <string name="log_access_confirmation_title" msgid="4843557604739943395">"Veita <xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> aðgang að öllum annálum í tækinu?"</string>
+    <string name="log_access_confirmation_title" msgid="4843557604739943395">"Veita „<xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g>“ aðgang að öllum annálum í tækinu?"</string>
     <string name="log_access_confirmation_allow" msgid="752147861593202968">"Leyfa aðgang í eitt skipti"</string>
     <string name="log_access_confirmation_deny" msgid="2389461495803585795">"Ekki leyfa"</string>
     <string name="log_access_confirmation_body" msgid="6883031912003112634">"Annálar tækisins skrá það sem gerist í tækinu. Forrit geta notað þessa annála til að finna og lagfæra vandamál.\n\nTilteknir annálar innihalda viðkvæmar upplýsingar og því skaltu einungis veita forritum sem þú treystir aðgang að öllum annálum tækisins. \n\nEf þú veitir þessu forriti ekki aðgang að öllum annálum tækisins hefur það áfram aðgang að eigin annálum. Framleiðandi tækisins getur þó hugsanlega opnað tiltekna annála eða upplýsingar í tækinu."</string>
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Nánar"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Nánar á <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Opna <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Forritið er uppsett"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Að minnsta kosti einu korti var bætt við Veski"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Setja upp myndavélarforrit"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Forritið er uppsett"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Að minnsta kosti eitt tæki er tiltækt"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Til að bæta Veskisforritinu við sem flýtileið skaltu ganga úr skugga um að forritið sé uppsett"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Til að bæta Veskisforritinu við sem flýtileið skaltu ganga úr skugga um að hafa bætt að minnsta kosti einu korti við"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Til að bæta QR-kóðaskanna við sem flýtileið skaltu ganga úr skugga um að myndavélarforrit sé uppsett"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Til að bæta Home-forritinu við sem flýtileið skaltu ganga úr skugga um að forritið sé uppsett"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Að minnsta kosti eitt tæki er tiltækt"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Veldu sjálfgefið glósuforrit til að nota flýtileið fyrir glósugerð"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Velja forrit"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Haltu flýtilyklinum inni"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Hætta við"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Skipta um skjá núna"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Tengdu pennann við hleðslutæki"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Rafhlaða pennans er að tæmast"</string>
     <string name="video_camera" msgid="7654002575156149298">"Kvikmyndatökuvél"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Ekki er hægt að hringja úr þessu sniði"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Vinnureglur gera þér aðeins kleift að hringja símtöl úr vinnusniði"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Ekki er hægt að hringja úr forriti til einkanota"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Fyrirtækið heimilar þér aðeins að hringja úr vinnuforritum"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Skipta yfir í vinnusnið"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Loka"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Setja upp símaforrit fyrir vinnu"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Hætta við"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Sérsníða lásskjá"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Taktu úr lás til að sérsníða lásskjá"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi er ekki til staðar"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Lokað fyrir myndavél"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Lokað fyrir myndavél og hljóðnema"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Lokað fyrir hljóðnema"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Kveikt er á forgangsstillingu"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Hjálparinn er að hlusta"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Stilltu sjálfgefið glósuforrit í stillingunum"</string>
+    <string name="install_app" msgid="5066668100199613936">"Setja upp forrit"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Hljóðnemi og myndavél"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Nýlega notað af forriti"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Sjá nýlegan aðgang"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Lokið"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Stækka og sýna valkosti"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Minnka"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Loka þessu forriti"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> er lokað"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Stjórna þjónustu"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Stjórna aðgangi"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Í notkun í símtali"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Nýlega notað í símtali"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Í notkun í <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Nýlega notað af <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Í notkun í <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Nýlega notað af <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Í notkun í <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Nýlega notað af <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-is/strings_tv.xml b/packages/SystemUI/res/values-is/strings_tv.xml
deleted file mode 100644
index 7150fc8..0000000
--- a/packages/SystemUI/res/values-is/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN er tengt"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN er ekki tengt"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Í gegnum <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Tilkynningar"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Engar tilkynningar"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Hljóðnemi er að taka upp"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Myndavél er að taka upp"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Myndavél og hljóðnemi eru að taka upp"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Hljóðnemi er hættur að taka upp"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Myndavél er hætt að taka upp"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Myndavél og hljóðnemi eru hætt að taka upp"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Skjáupptaka er hafin"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Skjáupptöku er lokið"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 908a42d..561da81 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Attiva USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Scopri di più"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Screenshot"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Funzionalità Extend Unlock disattivata"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Sblocco avanzato disattivato"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"è stata inviata un\'immagine"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Salvataggio screenshot…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Salvataggio screenshot nel profilo di lavoro…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> ha rilevato questo screenshot."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> e altre app aperte hanno rilevato questo screenshot."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Aggiungi alla nota"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Registrazione dello schermo"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Registrazione dello schermo"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Elaboraz. registraz. schermo"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notifica costante per una sessione di registrazione dello schermo"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Avviare la registrazione?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Durante la registrazione, il sistema Android può acquisire informazioni sensibili visibili sullo schermo o riprodotte sul tuo dispositivo, tra cui password, dati di pagamento, foto, messaggi e audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Registra l\'intero schermo"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Registra una singola pp"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Quando registri, Android ha accesso a qualsiasi elemento visibile sul tuo schermo o in riproduzione sul tuo dispositivo. Presta quindi attenzione a password, dati di pagamento, messaggi o altre informazioni sensibili."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Quando registri un\'app, Android ha accesso a qualsiasi elemento visualizzato o riprodotto sull\'app. Presta quindi attenzione a password, dati di pagamento, messaggi o altre informazioni sensibili."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Avvia registrazione"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Iniziare a registrare?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Quando registri, Android ha accesso a qualsiasi elemento visibile sul tuo schermo o in riproduzione sul tuo dispositivo. Presta quindi attenzione a password, dettagli sui pagamenti, messaggi, foto, audio e video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Quando registri un\'app, Android ha accesso a qualsiasi elemento visualizzato o riprodotto sull\'app. Presta quindi attenzione a password, dettagli sui pagamenti, messaggi, foto, audio e video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Avvia registrazione"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Registra audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Audio del dispositivo"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Suoni del dispositivo, come musica, chiamate e suonerie"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Microfono"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Audio del dispositivo e microfono"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Avvia"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Inizia"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Registrazione schermo"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Registrazione schermo e audio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Mostra tocchi sullo schermo"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Condividi"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Registrazione schermo salvata"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Tocca per visualizzare"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Errore durante l\'eliminazione della registrazione dello schermo"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Errore durante il salvataggio della registrazione dello schermo"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Errore durante l\'avvio della registrazione dello schermo"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Visualizzazione a schermo intero"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Per uscire, scorri dall\'alto verso il basso."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"OK"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Indietro"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Home"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Volto autenticato"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confermato"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tocca Conferma per completare"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Sbloccato con il volto. Premi l\'icona Sblocca e continua."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Sbloccato con il volto"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Sbloccato con il volto. Premi per continuare."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Volto riconosciuto. Premi per continuare."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Volto riconosciuto. Premi l\'icona Sblocca e continua."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenticazione eseguita"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Annulla autenticazione"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Utilizza PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Usa sequenza"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Utilizza password"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Se al prossimo tentativo inserirai una sequenza sbagliata, il tuo profilo di lavoro e i relativi dati verranno eliminati."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Se al prossimo tentativo inserirai un PIN sbagliato, il tuo profilo di lavoro e i relativi dati verranno eliminati."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Se al prossimo tentativo inserirai una password sbagliata, il tuo profilo di lavoro e i relativi dati verranno eliminati."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Configura"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Non ora"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"L\'operazione è necessaria per migliorare la sicurezza e le prestazioni"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Riconfigura lo sblocco con l\'impronta"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Sblocco con l\'impronta"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Configura lo sblocco con l\'impronta"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Per riconfigurare lo sblocco con l\'impronta, i modelli e le immagini dell\'impronta correnti verranno eliminati.\n\nDopo la cancellazione, dovrai riconfigurare la funzionalità per usare l\'impronta per sbloccare il telefono o verificare la tua identità."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Per riconfigurare lo sblocco con l\'impronta, il modello e le immagini dell\'impronta correnti verranno eliminati.\n\nDopo la cancellazione, dovrai riconfigurare la funzionalità per usare l\'impronta per sbloccare il telefono o verificare la tua identità."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Impossibile configurare lo sblocco con l\'impronta. Vai alle Impostazioni e riprova."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Riconfigura lo sblocco con il volto"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Sblocco con il volto"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Configura lo sblocco con il volto"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Per riconfigurare lo sblocco con il volto, l\'attuale modello del volto verrà eliminato.\n\nDovrai riconfigurare questa funzionalità per usare il volto per sbloccare il telefono."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Impossibile configurare lo sblocco con il volto. Vai alle Impostazioni e riprova."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Tocca il sensore di impronte"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Premi l\'icona Sblocca per continuare"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Impossibile riconoscere il volto. Usa l\'impronta."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Auricolare"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Ingresso"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Apparecchi acustici"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Apparecchi acustici"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Attivazione…"</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Sbloccato con il volto"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Volto riconosciuto"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Scorri verso l\'alto per riprovare"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Scorri verso l\'alto per riprovare lo sblocco con il volto"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Sblocca per usare NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Questo dispositivo appartiene alla tua organizzazione"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Questo dispositivo appartiene a <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> avrà accesso a tutte le informazioni visibili sul tuo schermo o riprodotte dal tuo dispositivo durante la registrazione o la trasmissione. Sono incluse informazioni quali password, dettagli sui pagamenti, foto, messaggi e audio riprodotto."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Il servizio che offre questa funzione avrà accesso a tutte le informazioni visibili sul tuo schermo o riprodotte dal tuo dispositivo durante la registrazione o la trasmissione. Sono incluse informazioni quali password, dettagli sui pagamenti, foto, messaggi e audio riprodotto."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Vuoi avviare la registrazione o la trasmissione?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Vuoi avviare la registrazione o la trasmissione con <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Consentire a <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> di condividere o registrare?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Schermo intero"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Una sola app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Quando condividi, registri o trasmetti, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ha accesso a qualsiasi elemento visibile sul tuo schermo o in riproduzione sul tuo dispositivo. Presta quindi attenzione a password, dati di pagamento, messaggi o altre informazioni sensibili."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Quando condividi, registri o trasmetti un\'app, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ha accesso a qualsiasi elemento visualizzato o riprodotto sull\'app. Presta quindi attenzione a password, dati di pagamento, messaggi o altre informazioni sensibili."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continua"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Condividi o registra un\'app"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Consentire all\'app di condividere o registrare?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Quando condividi, registri o trasmetti, l\'app ha accesso a qualsiasi elemento visibile sul tuo schermo o in riproduzione sul tuo dispositivo. Presta quindi attenzione a password, dati di pagamento, messaggi o altre informazioni sensibili."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Quando condividi, registri o trasmetti un\'app, questa app ha accesso a qualsiasi elemento visualizzato o riprodotto su quell\'app. Presta quindi attenzione a password, dati di pagamento, messaggi o altre informazioni sensibili."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> avrà accesso a tutte le informazioni visibili sul tuo schermo o riprodotte dal tuo dispositivo durante la registrazione o la trasmissione. Sono incluse informazioni quali password, dettagli sui pagamenti, foto, messaggi e audio riprodotto."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Vuoi avviare la registrazione o la trasmissione?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Il servizio che offre questa funzione avrà accesso a tutte le informazioni visibili sul tuo schermo o riprodotte dal tuo dispositivo durante la registrazione o la trasmissione. Sono incluse informazioni quali password, dettagli sui pagamenti, foto, messaggi e audio riprodotto."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Schermo intero"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Una sola app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Condividi o registra un\'app"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Vuoi avviare la registrazione o la trasmissione con <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Quando condividi, registri o trasmetti, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ha accesso a qualsiasi elemento visibile sul tuo schermo o in riproduzione sul tuo dispositivo. Presta quindi attenzione a password, dettagli sui pagamenti, messaggi, foto, audio e video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Quando condividi, registri o trasmetti un\'app, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ha accesso a qualsiasi elemento visualizzato o riprodotto sull\'app. Presta quindi attenzione a password, dettagli sui pagamenti, messaggi, foto, audio e video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Inizia"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Iniziare a trasmettere?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Quando trasmetti, Android ha accesso a qualsiasi elemento visibile sul tuo schermo o in riproduzione sul tuo dispositivo. Presta quindi attenzione a password, dettagli sui pagamenti, messaggi, foto, audio e video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Quando trasmetti un\'app, Android ha accesso a qualsiasi elemento visualizzato o riprodotto sull\'app. Presta quindi attenzione a password, dettagli sui pagamenti, messaggi, foto, audio e video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Inizia a trasmettere"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Iniziare a condividere?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Quando condividi, registri o trasmetti, Android ha accesso a qualsiasi elemento visibile sul tuo schermo o in riproduzione sul tuo dispositivo. Presta quindi attenzione a password, dettagli sui pagamenti, messaggi, foto, audio e video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Quando condividi, registri o trasmetti un\'app, Android ha accesso a qualsiasi elemento visualizzato o riprodotto sull\'app. Presta quindi attenzione a password, dettagli sui pagamenti, messaggi, foto, audio e video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Inizia"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"La condivisione viene messa in pausa quando cambi app"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Condividi invece questa app"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Torna indietro"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Cambio app"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Bloccata dall\'amministratore IT"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"L\'acquisizione schermo è disattivata dai criteri relativi ai dispositivi"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Cancella tutto"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Sul dispositivo è installata un\'autorità di certificazione. Il tuo traffico di rete protetto potrebbe essere monitorato o modificato."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"L\'amministratore ha attivato i log di rete, che consentono di monitorare il traffico sul dispositivo."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"L\'amministratore ha attivato i log di rete, che consentono di monitorare il traffico nel profilo di lavoro, ma non nel profilo personale."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Questo dispositivo si connette a Internet tramite <xliff:g id="VPN_APP">%1$s</xliff:g>. La tua attività di rete, inclusi email e dati di navigazione, è visibile all\'amministratore IT."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Questo dispositivo è connesso a internet tramite <xliff:g id="VPN_APP">%1$s</xliff:g>. La tua attività di rete, inclusi email e dati di navigazione, è visibile al provider VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Questo dispositivo è connesso a internet tramite <xliff:g id="VPN_APP">%1$s</xliff:g>. La tua attività di rete, inclusi email e dati di navigazione, è visibile all\'amministratore IT."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Questo dispositivo si connette a Internet tramite <xliff:g id="VPN_APP_0">%1$s</xliff:g> e <xliff:g id="VPN_APP_1">%2$s</xliff:g>. La tua attività di rete, inclusi email e dati di navigazione, è visibile all\'amministratore IT."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Le tue app di lavoro si connettono a Internet tramite <xliff:g id="VPN_APP">%1$s</xliff:g>. La tua attività di rete nelle app di lavoro, inclusi email e dati di navigazione, è visibile all\'amministratore IT e al provider VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Le tue app personali si connettono a Internet tramite <xliff:g id="VPN_APP">%1$s</xliff:g>. La tua attività di rete, inclusi email e dati di navigazione, è visibile al provider VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"disattiva"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Suoni e vibrazione"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Impostazioni"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Audio abbassato a un volume più sicuro"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Il volume è alto da più tempo di quanto consigliato"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volume abbassato a un livello più sicuro"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Il volume delle cuffie è rimasto alto per un periodo superiore a quello consigliato"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Il volume delle cuffie ha superato il limite di sicurezza per questa settimana"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Continua ad ascoltare"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Abbassa il volume"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"L\'app è bloccata sullo schermo"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"La schermata rimane visibile finché non viene sganciata. Per sganciarla, tieni premuto Indietro e Panoramica."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"La schermata rimane visibile finché non viene disattivato il blocco su schermo. Per disattivarlo, tocca e tieni premuto Indietro e Home."</string>
@@ -490,14 +520,14 @@
     <string name="stream_accessibility" msgid="3873610336741987152">"Accessibilità"</string>
     <string name="volume_ringer_status_normal" msgid="1339039682222461143">"Attiva suoneria"</string>
     <string name="volume_ringer_status_vibrate" msgid="6970078708957857825">"Attiva vibrazione"</string>
-    <string name="volume_ringer_status_silent" msgid="3691324657849880883">"Disattiva suoneria"</string>
+    <string name="volume_ringer_status_silent" msgid="3691324657849880883">"Silenzia"</string>
     <string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Tocca per riattivare l\'audio."</string>
     <string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Tocca per attivare la vibrazione. L\'audio dei servizi di accessibilità può essere disattivato."</string>
     <string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Tocca per disattivare l\'audio. L\'audio dei servizi di accessibilità può essere disattivato."</string>
     <string name="volume_stream_content_description_vibrate_a11y" msgid="2742330052979397471">"%1$s. Tocca per attivare la vibrazione."</string>
     <string name="volume_stream_content_description_mute_a11y" msgid="5743548478357238156">"%1$s. Tocca per disattivare l\'audio."</string>
     <string name="volume_ringer_change" msgid="3574969197796055532">"Tocca per cambiare la modalità della suoneria"</string>
-    <string name="volume_ringer_hint_mute" msgid="4263821214125126614">"disattiva l\'audio"</string>
+    <string name="volume_ringer_hint_mute" msgid="4263821214125126614">"silenzia"</string>
     <string name="volume_ringer_hint_unmute" msgid="6119086890306456976">"riattiva l\'audio"</string>
     <string name="volume_ringer_hint_vibrate" msgid="6211609047099337509">"vibrazione"</string>
     <string name="volume_dialog_title" msgid="6502703403483577940">"Controlli del volume %s"</string>
@@ -626,11 +656,11 @@
     <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"Scorciatoie non trovate"</string>
     <string name="keyboard_shortcut_search_category_system" msgid="1151182120757052669">"Sistema"</string>
     <string name="keyboard_shortcut_search_category_input" msgid="5440558509904296233">"Inserimento"</string>
-    <string name="keyboard_shortcut_search_category_open_apps" msgid="1450959949739257562">"Aprire app"</string>
+    <string name="keyboard_shortcut_search_category_open_apps" msgid="1450959949739257562">"App aperte"</string>
     <string name="keyboard_shortcut_search_category_current_app" msgid="2011953559133734491">"App corrente"</string>
     <string name="group_system_access_notification_shade" msgid="7116898151485382275">"Accedi all\'area notifiche"</string>
     <string name="group_system_full_screenshot" msgid="7389040853798023211">"Acquisisci uno screenshot completo"</string>
-    <string name="group_system_access_system_app_shortcuts" msgid="4421497579210445641">"Accedi all\'elenco di scorciatoie app/di sistema"</string>
+    <string name="group_system_access_system_app_shortcuts" msgid="4421497579210445641">"Accedi all\'elenco di scorciatoie app e di sistema"</string>
     <string name="group_system_go_back" msgid="8838454003680364227">"Indietro: torna allo stato precedente (pulsante Indietro)"</string>
     <string name="group_system_access_home_screen" msgid="1857344316928441909">"Accedi alla schermata Home"</string>
     <string name="group_system_overview_open_apps" msgid="6897128761003265350">"Panoramica delle app aperte"</string>
@@ -641,7 +671,7 @@
     <string name="group_system_access_system_settings" msgid="7961639365383008053">"Accedi alle impostazioni di sistema"</string>
     <string name="group_system_access_google_assistant" msgid="1186152943161483864">"Accedi all\'Assistente Google"</string>
     <string name="group_system_lock_screen" msgid="7391191300363416543">"Blocca lo schermo"</string>
-    <string name="group_system_quick_memo" msgid="2914234890158583919">"Visualizza l\'app Note per rapidi appunti"</string>
+    <string name="group_system_quick_memo" msgid="2914234890158583919">"Visualizza l\'app Note per appunti rapidi"</string>
     <string name="keyboard_shortcut_group_system_multitasking" msgid="1065232949510862593">"Multitasking di sistema"</string>
     <string name="system_multitasking_rhs" msgid="6593269428880305699">"Attiva lo schermo diviso con l\'app corrente a destra"</string>
     <string name="system_multitasking_lhs" msgid="8839380725557952846">"Attiva lo schermo diviso con l\'app corrente a sinistra"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menu del tasto di accensione"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Pagina <xliff:g id="ID_1">%1$d</xliff:g> di <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Schermata di blocco"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Il telefono si è spento perché surriscaldato"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Ora il telefono funziona normalmente.\nTocca per ulteriori informazioni"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Il telefono era surriscaldato e si è spento per raffreddarsi. Ora funziona normalmente.\n\nIl telefono può surriscaldarsi se:\n	• Utilizzi app che consumano molte risorse (ad esempio app di navigazione, giochi o video)\n	• Scarichi o carichi grandi file\n	• Lo utilizzi in presenza di alte temperature"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Leggi le misure da adottare"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Il telefono si sta scaldando"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Alcune funzionalità limitate durante il raffreddamento del telefono.\nTocca per ulteriori informazioni"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Il telefono cercherà automaticamente di raffreddarsi. Puoi comunque usarlo, ma potrebbe essere più lento.\n\nUna volta raffreddato, il telefono funzionerà normalmente."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Leggi le misure da adottare"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Scollega il dispositivo"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Il tuo dispositivo si sta scaldando vicino alla porta di ricarica. Se è collegato a un caricabatterie o a un accessorio USB, scollegalo e fai attenzione perché il cavo potrebbe essere caldo."</string>
@@ -839,8 +863,9 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ingrandisci l\'intero schermo"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ingrandisci parte dello schermo"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Apri le impostazioni di ingrandimento"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Chiudi impostazioni di ingrandimento"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Trascina l\'angolo per ridimensionare"</string>
-    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Consenti lo scorrimento diagonale"</string>
+    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Scorrimento diagonale"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Ridimensiona"</string>
     <string name="accessibility_change_magnification_type" msgid="666000085077432421">"Modifica il tipo di ingrandimento"</string>
     <string name="accessibility_magnification_end_resizing" msgid="4881690585800302628">"Termina ridimensionamento"</string>
@@ -885,15 +910,14 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"rimuovere l\'elemento dai preferiti"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Sposta nella posizione <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Controlli"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Seleziona i controlli dei dispositivi per accedere rapidamente"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Tieni premuto e trascina per riordinare i controlli"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Tutti i controlli sono stati rimossi"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Modifiche non salvate"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Mostra altre app"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Riordina"</string>
     <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Aggiungi controlli"</string>
-    <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Torna alle modifiche"</string>
+    <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Torna alla modifica"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"Impossibile caricare i controlli. Verifica nell\'app <xliff:g id="APP">%s</xliff:g> che le relative impostazioni non siano cambiate."</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"Controlli compatibili non disponibili"</string>
     <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"Altro"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Prova con un altro PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Conferma modifica per <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Scorri per vedere altro"</string>
+    <string name="retry_face" msgid="416380073082560186">"Riprova autenticazione volto"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Caricamento dei consigli"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Contenuti multimediali"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Nascondere questo controllo multimediale per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Impostazioni"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> di <xliff:g id="ARTIST_NAME">%2$s</xliff:g> è in riproduzione da <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> di <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> è in esecuzione"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Riproduci"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Metti in pausa"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Traccia precedente"</string>
@@ -953,7 +979,7 @@
     <string name="controls_menu_add" msgid="4447246119229920050">"Aggiungi controlli"</string>
     <string name="controls_menu_edit" msgid="890623986951347062">"Modifica controlli"</string>
     <string name="controls_menu_add_another_app" msgid="8661172304650786705">"Aggiungi app"</string>
-    <string name="controls_menu_remove" msgid="3006525275966023468">"Rimuovi l\'app"</string>
+    <string name="controls_menu_remove" msgid="3006525275966023468">"Rimuovi app"</string>
     <string name="media_output_dialog_add_output" msgid="5642703238877329518">"Aggiungi uscite"</string>
     <string name="media_output_dialog_group" msgid="5571251347877452212">"Gruppo"</string>
     <string name="media_output_dialog_single_device" msgid="3102758980643351058">"1 dispositivo selezionato"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Speaker e display"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Dispositivi consigliati"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Interrompi la sessione condivisa per spostare i contenuti multimediali su un altro dispositivo"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Interrompi"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Come funziona la trasmissione"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Annuncio"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Le persone vicine a te che hanno dispositivi Bluetooth compatibili possono ascoltare i contenuti multimediali che stai trasmettendo"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Impossibile salvare. Riprova."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Impossibile salvare."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Usa almeno 4 caratteri"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Usa meno di 16 caratteri"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Usa meno di <xliff:g id="LENGTH">%1$d</xliff:g> caratteri"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Numero build"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Numero build copiato negli appunti."</string>
     <string name="basic_status" msgid="2315371112182658176">"Apri conversazione"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problema durante la lettura dell\'indicatore di livello della batteria"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Tocca per ulteriori informazioni"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Nessuna"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"inserisci blocco schermo"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Sensore di impronte digitali"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"effettuare l\'autenticazione"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"accedere al dispositivo"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"L\'assistente è in ascolto"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notifica}many{# notifiche}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="note_task_button_label" msgid="8718616095800343136">"Aggiunta di note"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Aggiunta di note"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Aggiunta di note, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Scopri di più"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Scopri di più all\'indirizzo <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Apri <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• L\'app sia configurata"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Sia stata aggiunta almeno una carta a Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Sia installata un\'app fotocamera"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• L\'app sia configurata"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Ci sia almeno un dispositivo disponibile"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Per aggiungere l\'app Wallet come scorciatoia, assicurati che l\'app sia installata"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Per aggiungere l\'app Wallet come scorciatoia, assicurati che sia stata aggiunta almeno una carta"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Per aggiungere lo scanner di codici QR come scorciatoia, assicurati che ci sia un\'app fotocamera installata"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Per aggiungere l\'app Home come scorciatoia, assicurati che l\'app sia installata"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Ci sia almeno un dispositivo disponibile"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Seleziona un\'app per le note predefinita per usare la scorciatoia per l\'aggiunta di note"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Seleziona app"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Tocca scorciatoia/tieni premuto"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Annulla"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Cambia schermo ora"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Connetti lo stilo a un caricabatterie"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Batteria stilo in esaurimento"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videocamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Impossibile chiamare da questo profilo"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Le norme di lavoro ti consentono di fare telefonate soltanto dal profilo di lavoro"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Impossibile fare chiamate da un\'app personale"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"La tua organizzazione consente di fare chiamate solo dalle app di lavoro"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Passa al profilo di lavoro"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Chiudi"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Installa un\'app di lavoro per smartphone"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Annulla"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizza schermata di blocco"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Sblocca per personalizzare la schermata di blocco"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi non disponibile"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Modalità priorità attivata"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"L\'assistente è attivo"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Imposta l\'app per le note predefinita nelle Impostazioni"</string>
+    <string name="install_app" msgid="5066668100199613936">"Installa app"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Microfono e videocamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Uso recente da app"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Vedi accesso recente"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Fine"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Espandi e mostra le opzioni"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Comprimi"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Chiudi l\'app"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"App <xliff:g id="APP_NAME">%1$s</xliff:g> chiusa"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Gestisci servizio"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Gestisci accesso"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"In uso nella telefonata"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Recentemente in uso nella telefonata"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"In uso da <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Recentemente in uso da <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"In uso da <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Recentemente in uso da <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"In uso da <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Recentemente in uso da <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-it/strings_tv.xml b/packages/SystemUI/res/values-it/strings_tv.xml
deleted file mode 100644
index ab9ee78..0000000
--- a/packages/SystemUI/res/values-it/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN connessa"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN disconnessa"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Tramite <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notifiche"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Nessuna notifica"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Registrazione in corso con il microfono"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Registrazione in corso con la fotocamera"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Registrazione in corso con fotocamera e microfono"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Registrazione con il microfono interrotta"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Registrazione con la fotocamera interrotta"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Registrazione con fotocamera e microfono interrotta"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Registrazione dello schermo avviata"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Registrazione dello schermo interrotta"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index b632953..c905b04 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"‏הפעלת USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"מידע נוסף"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"צילום מסך"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"התכונה \'הרחבה של ביטול הנעילה\' מושבתת"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"‏התכונה Extend Unlock מושבתת"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"נשלחה תמונה"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"המערכת שומרת את צילום המסך..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"צילום המסך נשמר בפרופיל העבודה…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"האפליקציה <xliff:g id="APPNAME">%1$s</xliff:g> זיהתה את צילום המסך הזה."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"האפליקציה <xliff:g id="APPNAME">%1$s</xliff:g> ואפליקציות פתוחות נוספות זיהו את צילום המסך הזה."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"הוספה לפתק"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"מקליט המסך"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"מקליט המסך"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"מתבצע עיבוד של הקלטת מסך"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"התראה מתמשכת לסשן הקלטת מסך"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"להתחיל את ההקלטה?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"‏בזמן ההקלטה, מערכת Android יכולה לתעד מידע רגיש שגלוי במסך או מופעל במכשיר שלך. מידע זה כולל סיסמאות, פרטי תשלום, תמונות, הודעות ואודיו."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"הקלטה של כל המסך"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"הקלטה של אפליקציה אחת"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"‏בזמן ההקלטה, תהיה ל-Android גישה לכל הפרטים שגלויים במסך שלך או מופעלים מהמכשיר שלך. חשוב להיזהר עם סיסמאות, פרטי תשלום, הודעות או מידע רגיש אחר."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"‏בזמן הקלטה של אפליקציה, תהיה ל-Android גישה לכל מה שגלוי באפליקציה או מופעל מהאפליקציה. חשוב להיזהר עם סיסמאות, פרטי תשלום, הודעות או מידע רגיש אחר."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"התחלת ההקלטה"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"להתחיל את ההקלטה?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"‏בזמן ההקלטה, תהיה ל-Android גישה לכל מה שמופיע במסך שלך או מנוגן במכשיר שלך. מומלץ להיזהר עם סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"‏בזמן הקלטה של אפליקציה, תהיה ל-Android גישה לכל מה שגלוי באפליקציה או מופעל מהאפליקציה. כדאי להיזהר עם סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"התחלת ההקלטה"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"הקלטת אודיו"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"אודיו מהמכשיר"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"צלילים מהמכשיר, כמו מוזיקה, שיחות ורינגטונים"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"מיקרופון"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"מיקרופון ואודיו מהמכשיר"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"התחלה"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"התחלה"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"מתבצעת הקלטה של המסך"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"מתבצעת הקלטה של המסך והאודיו"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"הצגת מיקומים של נגיעות במסך"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"שיתוף"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"הקלטת המסך נשמרה"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"יש להקיש כדי להציג"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"שגיאה במחיקת הקלטת המסך"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"שגיאה בשמירה של הקלטת המסך"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"שגיאה בהפעלה של הקלטת המסך"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"צפייה במסך מלא"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"כדי לצאת, מחליקים למטה מהחלק העליון של המסך."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"הבנתי"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"חזרה"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"בית"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"תפריט"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"זיהוי הפנים בוצע"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"יש אישור"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"יש להקיש על \'אישור\' לסיום התהליך"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"הנעילה בוטלה בזיהוי פנים. להמשך, לוחצים על סמל ביטול הנעילה."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"הנעילה בוטלה באמצעות זיהוי הפנים"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"הנעילה בוטלה באמצעות זיהוי הפנים. יש ללחוץ כדי להמשיך."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"הפנים זוהו. יש ללחוץ כדי להמשיך."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"הפנים זוהו. להמשך יש ללחוץ על סמל ביטול הנעילה."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"מאומת"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"ביטול האימות"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"שימוש בקוד אימות"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"שימוש בקו ביטול נעילה"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"שימוש בסיסמה"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"הזנת קו ביטול נעילה שגוי בניסיון הבא תגרום למחיקת פרופיל העבודה והנתונים המשויכים אליו."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"הזנה של קוד אימות שגוי בניסיון הבא תגרום למחיקת פרופיל העבודה והנתונים המשויכים אליו."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"הזנת סיסמה שגויה בניסיון הבא תגרום למחיקת פרופיל העבודה והנתונים המשויכים אליו."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"הגדרה"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"לא עכשיו"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"הפעולה הזו נדרשת כדי לשפר את האבטחה והביצועים"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"הגדרה חוזרת של \'ביטול הנעילה בטביעת אצבע\'"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"ביטול הנעילה בטביעת אצבע"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"הגדרת \'ביטול הנעילה בטביעת אצבע\'"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"כדי להגדיר שוב את התכונה \'ביטול הנעילה בטביעת אצבע\', עליך למחוק את התבניות והמודלים הנוכחיים של טביעת האצבע.\n\nאחרי המחיקה יהיה צורך להגדיר שוב את \'ביטול הנעילה בטביעת אצבע\' כדי להשתמש בטביעת האצבע לביטול הנעילה של הטלפון ולאמת את זהותך."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"כדי להגדיר שוב את התכונה \'ביטול הנעילה בטביעת אצבע\', עליך למחוק את התבניות והמודל הנוכחיים של טביעת האצבע.\n\nאחרי המחיקה יהיה צורך להגדיר שוב את \'ביטול הנעילה בטביעת אצבע\' כדי להשתמש בטביעת האצבע לביטול הנעילה של הטלפון ולאמת את זהותך."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"לא ניתן להגדיר ביטול נעילה בטביעת אצבע. יש לעבור להגדרות כדי לנסות שוב."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"הגדרה חוזרת של \'פתיחה ע\"י זיהוי הפנים\'"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"פתיחה ע\"י זיהוי הפנים"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"להגדרת התכונה \'פתיחה ע\"י זיהוי הפנים\'"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"כדי להגדיר שוב את התכונה \'פתיחה ע\"י זיהוי הפנים\', עליך למחוק את התבנית הנוכחית לזיהוי הפנים.\n\nיהיה צורך להגדיר את התכונה הזו שוב כדי להשתמש בזיהוי הפנים לביטול הנעילה של הטלפון."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"לא ניתן להגדיר פתיחה ע\"י זיהוי הפנים. צריך לעבור להגדרות כדי לנסות שוב."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"יש לגעת בחיישן טביעות האצבע"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"להמשך יש ללחוץ על סמל ביטול הנעילה"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"לא ניתן לזהות את הפנים. יש להשתמש בטביעת אצבע במקום."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"אודיו"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"אוזניות"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"קלט"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"מכשירי שמיעה"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"מכשירי שמיעה"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ההפעלה מתבצעת…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"סיבוב אוטומטי"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"סיבוב אוטומטי של המסך"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"הנעילה בוטלה באמצעות זיהוי הפנים"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"הפנים זוהו"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"יש להחליק למעלה כדי לנסות שוב"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"אפשר להחליק למעלה כדי לנסות שוב לפתוח ע\"י זיהוי הפנים"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"‏יש לבטל את הנעילה כדי להשתמש ב-NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"המכשיר הזה שייך לארגון שלך"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"המכשיר הזה שייך לארגון <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,21 +399,30 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"להסיר את המשתמש?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"כל האפליקציות והנתונים של המשתמש הזה יימחקו."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"הסרה"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"‏לאפליקציית <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> תהיה גישה לכל המידע הגלוי במסך שלך ולכל תוכן שמופעל במכשיר שלך בזמן הקלטה או העברה (casting). המידע הזה כולל פרטים כמו סיסמאות, פרטי תשלום, תמונות, הודעות ואודיו שמושמע מהמכשיר."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"‏לשירות שמספק את הפונקציה הזו תהיה גישה לכל המידע שגלוי במסך שלך או מופעל מהמכשיר שלך בזמן הקלטה או העברה (cast) – כולל מידע כמו סיסמאות, פרטי תשלום, תמונות, הודעות ואודיו שמושמע מהמכשיר."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"‏להתחיל להקליט או להעביר (cast)?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"‏להתחיל להקליט או להעביר (cast) באמצעות <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"לאפשר לאפליקציה <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> לשתף או להקליט?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"כל המסך"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"אפליקציה אחת"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"‏בזמן שיתוף, הקלטה או העברה (cast) תהיה ל-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> גישה לכל הפרטים שגלויים במסך שלך או מופעלים מהמכשיר שלך. חשוב להיזהר עם סיסמאות, פרטי תשלום, הודעות או מידע רגיש אחר."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"‏בזמן שיתוף, הקלטה או העברה (cast) של אפליקציה, תהיה ל-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> גישה לכל מה שגלוי באפליקציה או מופעל מהאפליקציה. חשוב להיזהר עם סיסמאות, פרטי תשלום, הודעות או מידע רגיש אחר."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"המשך"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"שיתוף או הקלטה של אפליקציה"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"לאפשר לאפליקציה הזו לשתף או להקליט?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"‏בזמן שיתוף, הקלטה או העברה (cast) תהיה לאפליקציה הזו גישה לכל הפרטים שגלויים במסך שלך או מופעלים מהמכשיר שלך. כדאי להיזהר ולא לחשוף סיסמאות, פרטי תשלום, הודעות או מידע רגיש אחר."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"‏בזמן שיתוף, הקלטה או העברה (cast) של אפליקציה, תהיה לאפליקציה הזו גישה לכל מה שמוצג בה או מופעל ממנה. כדאי להיזהר ולא לחשוף סיסמאות, פרטי תשלום, הודעות או מידע רגיש אחר."</string>
-    <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"‏נחסם על ידי מנהל ה-IT"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"‏לאפליקציית <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> תהיה גישה לכל המידע הגלוי במסך שלך ולכל תוכן שמופעל במכשיר שלך בזמן הקלטה או העברה (cast). המידע הזה כולל פרטים כמו סיסמאות, פרטי תשלום, תמונות, הודעות ואודיו שמושמע מהמכשיר."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"‏להתחיל להקליט או להעביר (cast)?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"‏לשירות שמספק את הפונקציה הזו תהיה גישה לכל הפרטים שגלויים במסך שלך או מופעלים מהמכשיר שלך בזמן הקלטה או העברה (cast) – כולל פרטים כמו סיסמאות, פרטי תשלום, תמונות, הודעות ואודיו שמושמע מהמכשיר."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"כל המסך"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"אפליקציה אחת"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"שיתוף או הקלטה של אפליקציה"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"‏להתחיל להקליט או להעביר (cast) באמצעות <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"‏בזמן שיתוף, הקלטה או העברה (cast) תהיה ל-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> גישה לכל הפרטים שגלויים במסך שלך או מופעלים מהמכשיר שלך. מומלץ להיזהר עם סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"‏בזמן שיתוף, הקלטה או העברה (cast) של אפליקציה, תהיה ל-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> גישה לכל מה שגלוי באפליקציה או מופעל מהאפליקציה. מומלץ להיזהר עם סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"התחלה"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"להתחיל את ההעברה?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"‏בזמן העברה (cast), תהיה ל-Android גישה לכל הפרטים שגלויים במסך שלך או מופעלים מהמכשיר שלך. מומלץ להיזהר עם סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"‏בזמן העברה (cast) של אפליקציה, תהיה ל-Android גישה לכל מה שגלוי באפליקציה או מופעל מהאפליקציה. כדאי להיזהר עם סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"‏התחלת ההעברה (cast)"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"להתחיל את השיתוף?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"‏בזמן שיתוף, הקלטה או העברה (cast) תהיה ל-Android גישה לכל הפרטים שגלויים במסך שלך או מופעלים מהמכשיר שלך. מומלץ להיזהר עם סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"‏בזמן שיתוף, הקלטה או העברה (cast) של אפליקציה, תהיה ל-Android גישה לכל מה שגלוי באפליקציה או מופעל מהאפליקציה. מומלץ להיזהר עם סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"התחלה"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"השיתוף מושהה כשמחליפים אפליקציות"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"שיתוף של האפליקציה הזו במקום"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"חזרה למשימה הקודמת"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"החלפת אפליקציה"</string>
+    <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"‏האפשרות נחסמה על ידי אדמין ב-IT"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"צילום המסך מושבת בגלל מדיניות המכשיר"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"ניקוי הכול"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"ניהול"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"במכשיר זה מותקנת רשות אישורים. ניתן לעקוב אחר התנועה ברשת המאובטחת או לשנות אותה."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"מנהל המערכת הפעיל את התכונה \'רישום התנועה ברשת\', שמנטרת את תנועת הנתונים במכשיר."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"מנהל המערכת הפעיל את תכונת רישום התנועה ברשת, שמנטרת את תנועת הנתונים בפרופיל העבודה, אבל לא בפרופיל האישי."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"‏המכשיר הזה מחובר לאינטרנט דרך <xliff:g id="VPN_APP">%1$s</xliff:g>. הפעילויות שלך ברשת, כולל האימיילים ונתוני הגלישה, גלויות למנהל ה-IT."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"‏המכשיר הזה מחובר לאינטרנט דרך <xliff:g id="VPN_APP">%1$s</xliff:g>. הפעילויות שלך ברשת, כולל האימיילים ונתוני הגלישה, גלויות לספק ה-VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"‏המכשיר הזה מחובר לאינטרנט דרך <xliff:g id="VPN_APP">%1$s</xliff:g>. הפעילויות שלך ברשת, כולל האימיילים ונתוני הגלישה, גלויות לאדמין ב-IT."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"‏המכשיר הזה מחובר לאינטרנט דרך <xliff:g id="VPN_APP_0">%1$s</xliff:g> ו-<xliff:g id="VPN_APP_1">%2$s</xliff:g>. הפעילויות שלך ברשת, כולל האימיילים ונתוני הגלישה, גלויות למנהל ה-IT."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"‏האפליקציות לעבודה מחוברות לאינטרנט דרך <xliff:g id="VPN_APP">%1$s</xliff:g>. הפעילויות שלך ברשת באפליקציות לעבודה, כולל האימיילים ונתוני הגלישה, גלויות למנהל ה-IT ולספק ה-VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"‏האפליקציות האישיות שלך מחוברות לאינטרנט דרך <xliff:g id="VPN_APP">%1$s</xliff:g>. הפעילויות שלך ברשת, כולל האימיילים ונתוני הגלישה, גלויות לספק ה-VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"השבתה"</string>
     <string name="sound_settings" msgid="8874581353127418308">"צליל ורטט"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"הגדרות"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"עוצמת הקול הוחלשה לרמה בטוחה יותר"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"עוצמת הקול הייתה גבוהה במשך יותר זמן מהמומלץ"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"עוצמת הקול הוחלשה לרמה בטוחה יותר"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"עוצמת הקול של האוזניות הייתה גבוהה במשך יותר זמן מהמומלץ"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"עוצמת הקול של האוזניות חרגה ממגבלת הבטיחות לשבוע הזה"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"המשך ההאזנה"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"החלשה של עוצמת הקול"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"האפליקציה מוצמדת"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"נשאר בתצוגה עד לביטול ההצמדה. יש ללחוץ לחיצה ארוכה על הלחצנים \'הקודם\' ו\'סקירה\' כדי לבטל את ההצמדה."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"נשאר בתצוגה עד לביטול ההצמדה. יש ללחוץ לחיצה ארוכה על הלחצנים \'הקודם\' ו\'דף הבית\' כדי לבטל את ההצמדה."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"תפריט הפעלה"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"דף <xliff:g id="ID_1">%1$d</xliff:g> מתוך <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"מסך נעילה"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"הטלפון כבה עקב התחממות"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"הטלפון פועל כרגיל עכשיו.\nיש להקיש כדי להציג מידע נוסף"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"הטלפון שלך התחמם יותר מדי וכבה כדי להתקרר. הטלפון פועל כרגיל עכשיו.\n\nייתכן שהטלפון יתחמם יותר מדי אם:\n	• משתמשים באפליקציות עתירות משאבים (כגון משחקים, אפליקציות וידאו או אפליקציות ניווט)\n	• מורידים או מעלים קבצים גדולים\n	• משתמשים בטלפון בסביבה עם טמפרטורות גבוהות"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"לצפייה בשלבי הטיפול"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"הטלפון מתחמם"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"חלק מהתכונות מוגבלות כל עוד הטלפון מתקרר.\nיש להקיש כדי להציג מידע נוסף"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"קירור הטלפון ייעשה באופן אוטומטי. ניתן עדיין להשתמש בטלפון, אבל ייתכן שהוא יפעל לאט יותר.\n\nהטלפון יחזור לפעול כרגיל לאחר שיתקרר."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"לצפייה בשלבי הטיפול"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"ניתוק המכשיר"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"‏המכשיר שלך מתחמם בקרבת יציאת הטעינה. אם המכשיר מחובר למטען או לאביזר בחיבור USB, צריך לנתק אותו בזהירות כיוון שגם הכבל עלול להיות חם."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"הגדלה של המסך המלא"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"הגדלת חלק מהמסך"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"פתיחת הגדרות ההגדלה"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"סגירת הגדרות ההגדלה"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"צריך לגרור את הפינה כדי לשנות את הגודל"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"הפעלת גלילה באלכסון"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"שינוי גודל"</string>
@@ -885,9 +910,8 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"להסיר מהמועדפים"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"העברה למיקום <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"פקדים"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
-    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"יש ללחוץ לחיצה ארוכה ולגרור כדי לארגן מחדש את הפקדים"</string>
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"יש לבחור פקדי מכשירים כדי לקבל גישה מהירה"</string>
+    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"כדי לארגן מחדש את הפקדים, צריך ללחוץ לחיצה ארוכה ולגרור"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"כל הפקדים הוסרו"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"השינויים לא נשמרו"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"הצגת אפליקציות אחרות"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"יש לנסות קוד אימות אחר"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"יש לאשר את השינוי עבור <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"יש להחליק כדי להציג עוד פריטים"</string>
+    <string name="retry_face" msgid="416380073082560186">"איך מנסים שוב לזהות את הפנים לצורך אימות"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"ההמלצות בטעינה"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"מדיה"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"להסתיר את בקר המדיה הזה לאפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"הגדרות"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> של <xliff:g id="ARTIST_NAME">%2$s</xliff:g> מופעל מ-<xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> מתוך <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"אפליקציית <xliff:g id="APP_NAME">%1$s</xliff:g> פועלת"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"הפעלה"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"השהיה"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"הטראק הקודם"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"‎<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%‎‎"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"רמקולים ומסכים"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"הצעות למכשירים"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"עצירת הסשן המשותף כדי להעביר מדיה למכשיר אחר"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"עצירה"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"הסבר על שידורים"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"שידור"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"‏אנשים בקרבת מקום עם מכשירי Bluetooth תואמים יכולים להאזין למדיה שמשודרת על ידך"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"לא ניתן לשמור. כדאי לנסות שוב."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"לא ניתן לשמור."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"יש להזין 4 תווים לפחות"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"אפשר להזין עד 16 תווים"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"אפשר להזין עד <xliff:g id="LENGTH">%1$d</xliff:g> תווים"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"‏מספר Build"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"‏מספר ה-Build הועתק ללוח."</string>
     <string name="basic_status" msgid="2315371112182658176">"פתיחת שיחה"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"בעיה בקריאת מדדי הסוללה"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"יש להקיש כדי להציג מידע נוסף"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"לא הוגדרה"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"הזנת קוד נעילת המסך"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"חיישן טביעות אצבע"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"אימות"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"הזנת מכשיר"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"‏Assistant מאזינה"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{התראה אחת}one{# התראות}two{# התראות}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="note_task_button_label" msgid="8718616095800343136">"כתיבת הערות"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"כתיבת הערות"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"כתיבת הערות, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"מידע נוסף"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"מידע נוסף זמין בכתובת <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"פתיחת <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• האפליקציה מוגדרת"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"‏• לפחות כרטיס אחד נוסף ל-Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• התקנה של אפליקציית מצלמה"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• האפליקציה מוגדרת"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• יש לפחות מכשיר אחד זמין"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"‏כדי להוסיף את אפליקציית Wallet כקיצור דרך, צריך לוודא שהאפליקציה מותקנת"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"‏כדי להוסיף את אפליקציית Wallet כקיצור דרך, צריך לוודא שנוסף לפחות כרטיס אחד"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"‏כדי להוסיף את סורק קודי ה-QR כקיצור דרך, צריך לוודא שמותקנת אפליקציית מצלמה"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"‏כדי להוסיף את אפליקציית Home כקיצור דרך, צריך לוודא שהאפליקציה מותקנת"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• יש לפחות מכשיר אחד זמין"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"צריך לבחור אפליקציית פתקים שתיפתח כברירת מחדל כשייעשה שימוש במקש הקיצור לכתיבת פתקים"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"בחירת אפליקציה"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"מקש קיצור ללחיצה ארוכה"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"ביטול"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"כן, אני רוצה להחליף בין המסכים"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"כדאי לחבר את הסטיילוס למטען"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"הסוללה של הסטיילוס חלשה"</string>
     <string name="video_camera" msgid="7654002575156149298">"מצלמת וידאו"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"אי אפשר להתקשר מהפרופיל הזה"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"המדיניות של מקום העבודה מאפשרת לך לבצע שיחות טלפון רק מפרופיל העבודה"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"אי אפשר לבצע שיחות מהאפליקציה לשימוש אישי"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"בארגון שלך מאפשרים לבצע שיחות רק מאפליקציות לעבודה"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"מעבר לפרופיל עבודה"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"סגירה"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"התקנה של אפליקציה לעבודה בטלפון"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"ביטול"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"התאמה אישית של מסך הנעילה"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"כדי להתאים אישית את מסך הנעילה, יש לבטל את הנעילה"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"‏ה-Wi-Fi לא זמין"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"המצלמה חסומה"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"המצלמה והמיקרופון חסומים"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"המיקרופון חסום"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"מצב \'עדיפות\' מופעל"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"‏Assistant מאזינה"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"צריך להגדיר את אפליקציית ברירת המחדל לפתקים ב\'הגדרות\'"</string>
+    <string name="install_app" msgid="5066668100199613936">"התקנת האפליקציה"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"מיקרופון ומצלמה"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"נעשה שימוש לאחרונה באפליקציה"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"צפייה בהרשאות הגישה האחרונות"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"סיום"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"הרחבה והצגת האפשרויות"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"כיווץ"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"סגירת האפליקציה הזו"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"אפליקציית <xliff:g id="APP_NAME">%1$s</xliff:g> סגורה"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"ניהול השירות"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"ניהול הרשאות הגישה"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"בשימוש על ידי שיחת טלפון"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"נעשה שימוש לאחרונה על ידי שיחת טלפון"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"בשימוש על ידי <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"נעשה שימוש לאחרונה על ידי <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"בשימוש על ידי <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"נעשה שימוש לאחרונה על ידי <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"בשימוש על ידי <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"נעשה שימוש לאחרונה על ידי <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-iw/strings_tv.xml b/packages/SystemUI/res/values-iw/strings_tv.xml
deleted file mode 100644
index 1085505..0000000
--- a/packages/SystemUI/res/values-iw/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"‏ה-VPN מחובר"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"‏ה-VPN מנותק"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"דרך <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"התראות"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"אין התראות"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"המיקרופון מקליט"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"המצלמה מקליטה"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"המצלמה והמיקרופון מקליטים"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"המיקרופון הפסיק להקליט"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"המצלמה הפסיקה להקליט"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"המצלמה והמיקרופון הפסיקו להקליט"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"הקלטת המסך החלה"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"הקלטת המסך הופסקה"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 54b989a1..8a40d71 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB を有効にする"</string>
     <string name="learn_more" msgid="4690632085667273811">"詳細"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"スクリーンショット"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock は無効です"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"ロック解除延長は無効です"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"画像を送信しました"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"スクリーンショットを保存しています..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"スクリーンショットを仕事用プロファイルに保存中…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> がこのスクリーンショットを検出しました。"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> とその他の開いているアプリがこのスクリーンショットを検出しました。"</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"メモに追加"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"スクリーン レコーダー"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"スクリーン レコーダー"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"画面の録画を処理しています"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"画面の録画セッション中の通知"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"録画を開始しますか?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"録画中に機密情報が画面に表示されたりデバイスで再生されたりした場合、Android システムでキャプチャされることがあります。これには、パスワード、お支払い情報、写真、メッセージ、音声などが含まれます。"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"画面全体を録画する"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"1 つのアプリを録画する"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"録画中は、画面に表示されている内容やデバイスで再生されている内容に Android がアクセスできるため、パスワード、お支払いの詳細、メッセージなどの機密情報にご注意ください。"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"アプリの録画中は、そのアプリで表示されている内容や再生されている内容に Android がアクセスできるため、パスワード、お支払いの詳細、メッセージなどの機密情報にご注意ください。"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"録画を開始"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"録画を開始しますか?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"録画中は、表示や再生される内容に Android がアクセスできます。パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"アプリの録画中は、そのアプリで表示または再生される内容に Android がアクセスできます。パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"録画を開始"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"録音"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"デバイスの音声"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"デバイスからの音(音楽、通話、着信音など)"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"マイク"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"デバイスの音声とマイク"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"開始"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"開始"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"画面を録画しています"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"画面と音声を記録しています"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"画面上のタップも記録する"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"共有"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"画面の録画を保存しました"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"タップすると表示されます"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"画面の録画の削除中にエラーが発生しました"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"画面の録画の保存中にエラーが発生しました"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"画面の録画中にエラーが発生しました"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"全画面表示"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"終了するには、上から下にスワイプします。"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"OK"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"戻る"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"ホーム"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"メニュー"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"顔を認証しました"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"確認しました"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"完了するには [確認] をタップしてください"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"顔でロック解除しました。アイコンを押すと続行します。"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"顔でロック解除しました"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"顔でロック解除しました。押して続行してください。"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"顔を認識しました。押して続行してください。"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"顔を認識しました。ロック解除アイコンを押して続行します。"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"認証済み"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"認証をキャンセルします"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN を使用"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"パターンを使用"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"パスワードを使用"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"パターンをあと 1 回間違えると、仕事用プロファイルと関連データが削除されます。"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"PIN をあと 1 回間違えると、仕事用プロファイルと関連データが削除されます。"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"パスワードをあと 1 回間違えると、仕事用プロファイルと関連データが削除されます。"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"設定"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"後で"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"これはセキュリティとパフォーマンスを向上させるために必要です"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"指紋認証をもう一度設定してください"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"指紋認証"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"指紋認証を設定する"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"指紋認証をもう一度設定するために、現在の指紋の画像とモデルが削除されます。\n\n削除された後に、スマートフォンのロックの解除や本人確認に指紋を使用するには、指紋認証をもう一度設定する必要があります。"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"指紋認証をもう一度設定するために、現在の指紋の画像とモデルが削除されます。\n\n削除された後に、スマートフォンのロックの解除や本人確認に指紋を使用するには、指紋認証をもう一度設定する必要があります。"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"指紋認証を設定できませんでした。[設定] に移動してもう一度お試しください。"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"顔認証をもう一度設定してください"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"顔認証"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"顔認証の設定"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"顔認証をもう一度設定するために、現在の顔モデルが削除されます。\n\nスマートフォンのロックの解除に顔認証を使用するには、この機能をもう一度設定する必要があります。"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"顔認証を設定できませんでした。[設定] に移動してもう一度お試しください。"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"指紋認証センサーをタッチ"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"ロック解除アイコンを押して続行してください"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"顔を認識できません。指紋認証を使用してください。"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"オーディオ"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ヘッドセット"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"入力"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"補聴器"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"補聴器"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ON にしています…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"自動回転"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"画面を自動回転します"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"顔でロック解除しました"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"顔を認識しました"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"上にスワイプしてもう一度お試しください"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"顔認証をもう一度試すには上にスワイプします"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC を使用するには、ロックを解除してください"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"これは組織が所有するデバイスです"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"これは <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> が所有するデバイスです"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"ユーザーを削除しますか?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"このユーザーのアプリとデータがすべて削除されます。"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"削除"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> は、録画中やキャスト中に画面に表示されたり、デバイスで再生されるすべての情報にアクセスできます。これには、パスワード、お支払いの詳細、写真、メッセージ、再生される音声などが含まれます。"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"この機能を提供するサービスは、録画中またはキャスト中に画面上に表示される情報、またはキャスト先に転送される情報すべてにアクセスできます。これには、パスワード、お支払いの詳細、写真、メッセージ、再生される音声などが含まれます。"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"録画やキャストを開始しますか?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> で録画やキャストを開始しますか?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> に共有や録画を許可しますか?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"画面全体"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"1 つのアプリ"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"共有、録画、キャスト中は、画面に表示されている内容やデバイスで再生している内容に <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> がアクセスできるため、パスワード、お支払いの詳細、メッセージなどの機密情報にご注意ください。"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"アプリの共有、録画、キャスト中は、そのアプリで表示されている内容や再生している内容に <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> がアクセスできるため、パスワード、お支払いの詳細、メッセージなどの機密情報にご注意ください。"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"続行"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"アプリの共有、録画"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"このアプリに共有や録画を許可しますか?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"共有、録画、キャスト中は、画面に表示されている内容やデバイスで再生している内容にこのアプリがアクセスできるため、パスワード、お支払いの詳細、メッセージなどの機密情報にご注意ください。"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"アプリの共有、録画、キャスト中は、そのアプリで表示されている内容や再生している内容にこのアプリがアクセスできるため、パスワード、お支払いの詳細、メッセージなどの機密情報にご注意ください。"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> は、録画中またはキャスト中に画面上に表示または再生される情報のすべてにアクセスできるようになります。これには、パスワード、お支払いの詳細、写真、メッセージ、音声などが含まれます。"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"録画やキャストを開始しますか?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"この機能を提供するサービスは、録画中またはキャスト中に画面上に表示または再生される情報のすべてにアクセスできるようになります。これには、パスワード、お支払いの詳細、写真、メッセージ、音声などが含まれます。"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"画面全体"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"1 つのアプリ"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"アプリの共有または録画"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> で録画やキャストを開始しますか?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"共有、録画、キャスト中は、画面に表示される内容やデバイスで再生される内容に <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> がアクセスできるため、パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"アプリの共有、録画、キャスト中は、そのアプリで表示または再生される内容に <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> がアクセスできるため、パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"開始"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"キャスト開始しますか?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"キャスト中は、画面に表示される内容やデバイスで再生される内容に Android がアクセスできるため、パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"アプリのキャスト中は、そのアプリで表示または再生される内容に Android がアクセスできるため、パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"キャストを開始"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"共有を開始しますか?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"共有、録画、キャスト中は、画面に表示される内容やデバイスで再生される内容に Android がアクセスできるため、パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"アプリの共有、録画、キャスト中は、そのアプリで表示または再生される内容に Android がアクセスできるため、パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"開始"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"アプリを切り替えるときに共有を一時停止します"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"代わりにこのアプリを共有する"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"切り替える"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"アプリの切り替え"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"IT 管理者によりブロックされました"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"デバイス ポリシーに基づき、画面のキャプチャが無効になりました"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"すべて消去"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"このデバイスには認証局がインストールされています。保護されたネットワーク トラフィックが監視、変更される可能性があります。"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"管理者がネットワーク ログを有効にしているため、このデバイスのトラフィックが監視されています。"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"管理者がネットワーク ログを有効にしているため、仕事用プロファイルのトラフィックは監視されています(個人用プロファイルは対象外)。"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"このデバイスは <xliff:g id="VPN_APP">%1$s</xliff:g>を介してインターネットに接続しています。メールや閲覧データなど、ネットワーク アクティビティは、IT 管理者に公開されます。"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"このデバイスは <xliff:g id="VPN_APP">%1$s</xliff:g>を介してインターネットに接続しています。メールや閲覧データなど、ネットワーク アクティビティは、VPN プロバイダに公開されます。"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"このデバイスは <xliff:g id="VPN_APP">%1$s</xliff:g>を介してインターネットに接続しています。メールや閲覧データなど、ネットワーク アクティビティは、IT 管理者に公開されます。"</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"このデバイスは <xliff:g id="VPN_APP_0">%1$s</xliff:g>と <xliff:g id="VPN_APP_1">%2$s</xliff:g>を介してインターネットに接続しています。メールや閲覧データなど、ネットワーク アクティビティは、IT 管理者に公開されます。"</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"仕事用アプリは <xliff:g id="VPN_APP">%1$s</xliff:g>を介してインターネットに接続しています。メールや閲覧データなど、仕事用アプリのネットワーク アクティビティは、IT 管理者と VPN プロバイダに公開されます。"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"個人用アプリは <xliff:g id="VPN_APP">%1$s</xliff:g>を介してインターネットに接続しています。メールや閲覧データなど、ネットワーク アクティビティは、VPN プロバイダに公開されます。"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"無効にする"</string>
     <string name="sound_settings" msgid="8874581353127418308">"音とバイブレーション"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"設定"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"安全な音量まで下げました"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"おすすめの時間よりも長く大音量になっていました"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"音量を安全なレベルまで下げました"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"おすすめの時間よりも長い時間にわたってヘッドフォンの音量が大きく設定されています"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"ヘッドフォンの音量が今週一週間の安全基準とされる音量、時間を超えています"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"引き続き聴く"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"音量を下げる"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"アプリは固定されています"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"固定を解除するまで画面が常に表示されるようになります。[戻る] と [最近] を同時に押し続けると固定が解除されます。"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"固定を解除するまで画面が常に表示されるようになります。[戻る] と [ホーム] を同時に押し続けると固定が解除されます。"</string>
@@ -623,7 +653,7 @@
     <string name="keyboard_shortcut_clear_text" msgid="4679927133259287577">"テキストを消去"</string>
     <string name="keyboard_shortcut_search_list_title" msgid="1156178106617830429">"ショートカット"</string>
     <string name="keyboard_shortcut_search_list_hint" msgid="5982623262974326746">"ショートカットの検索"</string>
-    <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"ショートカットがないです"</string>
+    <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"ショートカットがありません"</string>
     <string name="keyboard_shortcut_search_category_system" msgid="1151182120757052669">"システム"</string>
     <string name="keyboard_shortcut_search_category_input" msgid="5440558509904296233">"入力"</string>
     <string name="keyboard_shortcut_search_category_open_apps" msgid="1450959949739257562">"開いているアプリ"</string>
@@ -634,7 +664,7 @@
     <string name="group_system_go_back" msgid="8838454003680364227">"戻る: 前の状態に戻る([戻る] ボタン)"</string>
     <string name="group_system_access_home_screen" msgid="1857344316928441909">"ホーム画面にアクセス"</string>
     <string name="group_system_overview_open_apps" msgid="6897128761003265350">"開いているアプリの概要"</string>
-    <string name="group_system_cycle_forward" msgid="9202444850838205990">"最近使ったアプリを切り替え(進)"</string>
+    <string name="group_system_cycle_forward" msgid="9202444850838205990">"最近使ったアプリを切り替え(進む)"</string>
     <string name="group_system_cycle_back" msgid="5163464503638229131">"最近使ったアプリを切り替え(戻る)"</string>
     <string name="group_system_access_all_apps_search" msgid="488070738028991753">"すべてのアプリの一覧にアクセスして検索(検索 / ランチャー)"</string>
     <string name="group_system_hide_reshow_taskbar" msgid="3809304065624351131">"タスクバーを非表示 /(再)表示"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"電源ボタン メニュー"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"ページ <xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"ロック画面"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"高熱で電源が OFF になりました"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"お使いのスマートフォンは現在、正常に動作しています。\nタップして詳細を表示"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"スマートフォンが熱すぎたため電源が OFF になりました。現在は正常に動作しています。\n\nスマートフォンは以下の場合に熱くなる場合があります。\n	• リソースを集中的に使用する機能やアプリ(ゲームアプリ、動画アプリ、ナビアプリなど)を使用\n	• サイズの大きいファイルをダウンロードまたはアップロード\n	• 高温の場所で使用"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"取り扱いに関する手順をご覧ください"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"スマートフォンの温度が上昇中"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"スマートフォンのクールダウン中は一部の機能が制限されます。\nタップして詳細を表示"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"スマートフォンは自動的にクールダウンを行います。その間もスマートフォンを使用できますが、動作が遅くなる可能性があります。\n\nクールダウンが完了すると、通常どおり動作します。"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"取り扱いに関する手順をご覧ください"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"デバイスを電源から外します"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"充電ポートの近くにデバイスを置くと、本体が熱くなります。デバイスが充電器や USB アクセサリに接続されている場合は外してください。ケーブルが熱くなっていることもあるので注意してください。"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"画面全体を拡大します"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"画面の一部を拡大します"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"画面の拡大設定を開く"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"拡大の設定を閉じる"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"サイズを変更するには角をドラッグ"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"斜めスクロールを許可"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"サイズ変更"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"タップしてユーザー補助機能を開きます。ボタンのカスタマイズや入れ替えを [設定] で行えます。\n\n"<annotation id="link">"設定を表示"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"ボタンを一時的に非表示にするには、端に移動させてください"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"元に戻す"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> のショートカットを削除"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> のショートカットを削除しました"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# 個のショートカットを削除}other{# 個のショートカットを削除}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"左上に移動"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"右上に移動"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"お気に入りから削除"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"ポジション <xliff:g id="NUMBER">%d</xliff:g> に移動"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"コントロール"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"デバイス コントロールを選んで、すばやくアクセスしましょう"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"コントロールを並べ替えるには長押ししてドラッグします"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"すべてのコントロールを削除しました"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"変更が保存されていません"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"その他のアプリを表示"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"再配置"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"コントロールを追加する"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"コントロールを追加"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"編集に戻る"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"コントロールを読み込めませんでした。<xliff:g id="APP">%s</xliff:g> アプリで、アプリの設定が変更されていないことをご確認ください。"</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"互換性のあるコントロールがありません"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"別の PIN をお試しください"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g>の変更を確認する"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"スワイプすると他の構造が表示されます"</string>
+    <string name="retry_face" msgid="416380073082560186">"顔認証を再試行"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"候補を読み込んでいます"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"メディア"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> のこのコントロールを非表示にしますか?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"設定"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g>(アーティスト名: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>)が <xliff:g id="APP_LABEL">%3$s</xliff:g> で再生中"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> を実行中"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"再生"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"一時停止"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"前のトラック"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"スピーカーとディスプレイ"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"デバイスの候補"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"メディアを他のデバイスに移動する共有中のセッションを停止します。"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"停止"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"ブロードキャストの仕組み"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"ブロードキャスト"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Bluetooth 対応デバイスを持っている付近のユーザーは、あなたがブロードキャストしているメディアを聴けます"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"保存できません。もう一度お試しください。"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"保存できません。"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"4 文字以上にしてください"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"使用できる文字数は 16 文字未満です"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"使用できる文字数は <xliff:g id="LENGTH">%1$d</xliff:g> 文字未満です"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"ビルド番号"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"ビルド番号をクリップボードにコピーしました。"</string>
     <string name="basic_status" msgid="2315371112182658176">"空の会話"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"バッテリー残量の読み込み中に問題が発生しました"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"タップすると詳細が表示されます"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"アラーム未設定"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"画面ロックを設定"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"指紋認証センサー"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"認証"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"デバイスを入力"</string>
@@ -1046,7 +1075,7 @@
     <string name="wifi_wont_autoconnect_for_now" msgid="5782282612749867762">"Wi-Fi に自動接続しません"</string>
     <string name="see_all_networks" msgid="3773666844913168122">"すべて表示"</string>
     <string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"ネットワークを変更するにはイーサネット接続を解除してください"</string>
-    <string name="wifi_scan_notify_message" msgid="3753839537448621794">"デバイスの機能向上のため、アプリやサービスは、Wi-Fi が OFF の場合でも、いつでも Wi-Fi ネットワークをスキャンできます。この設定は Wi-Fi スキャンの設定で変更できます。"<annotation id="link">"変更"</annotation></string>
+    <string name="wifi_scan_notify_message" msgid="3753839537448621794">"デバイスの利便性向上のため、アプリやサービスは、Wi-Fi が OFF の場合でもいつでも Wi-Fi ネットワークをスキャンすることができます。この動作は Wi-Fi スキャンの設定で変更できます。"<annotation id="link">"変更"</annotation></string>
     <string name="turn_off_airplane_mode" msgid="8425587763226548579">"機内モードを OFF にする"</string>
     <string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> が以下のタイルをクイック設定に追加しようとしています"</string>
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"タイルを追加"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"アシスタントが音声認識中です"</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="note_task_button_label" msgid="8718616095800343136">"メモ"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"メモ"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"メモ、<xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"詳細"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"詳しくは、<xliff:g id="URL">%s</xliff:g> をご覧ください"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> を開く"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• アプリが設定されている"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• ウォーレットに追加されているカードが 1 枚以上ある"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• カメラアプリをインストールする"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• アプリが設定されている"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• 利用できるデバイスが 1 台以上ある"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"ウォレット アプリをショートカットとして追加するには、アプリがインストールされていることを確認してください"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"ウォレット アプリをショートカットとして追加するには、カードが 1 枚以上追加されていることを確認してください"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR コードスキャナをショートカットとして追加するには、カメラアプリがインストールされていることを確認してください"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Google Home アプリをショートカットとして追加するには、アプリがインストールされていることを確認してください"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• 利用できるデバイスが 1 台以上ある"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"メモのショートカットを使用するデフォルトのメモアプリを選択してください"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"アプリを選択"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"ショートカットの長押しが必要です"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"キャンセル"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"画面を切り替えましょう"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"タッチペンを充電器に接続してください"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"タッチペンのバッテリー残量が少なくなっています"</string>
     <string name="video_camera" msgid="7654002575156149298">"ビデオカメラ"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"このプロファイルからは通話を発信できません"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"仕事用ポリシーでは、通話の発信を仕事用プロファイルからのみに制限できます"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"個人用アプリからの通話はできません"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"組織では、仕事用アプリからの通話のみ許可されています"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"仕事用プロファイルに切り替える"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"閉じる"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"仕事用電話アプリをインストール"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"キャンセル"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"ロック画面のカスタマイズ"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"ロック画面をカスタマイズするにはロックを解除してください"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi は利用できません"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"優先モードは ON です"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"アシスタントは起動済みです"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"[設定] でデフォルトのメモアプリを設定してください"</string>
+    <string name="install_app" msgid="5066668100199613936">"アプリをインストール"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"マイクとカメラ"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"最近のアプリの使用状況"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"最近のアクセスを表示"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"完了"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"オプションを開いて表示する"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"閉じる"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"このアプリを閉じる"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> を閉じました"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"サービスを管理"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"アクセスを管理"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"通話で使用中"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"通話で最近使用"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> が使用中"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"<xliff:g id="APP_NAME">%1$s</xliff:g> が最近使用"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> が使用中(<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"<xliff:g id="APP_NAME">%1$s</xliff:g> が最近使用(<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> が使用中(<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"<xliff:g id="APP_NAME">%1$s</xliff:g> が最近使用(<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ja/strings_tv.xml b/packages/SystemUI/res/values-ja/strings_tv.xml
deleted file mode 100644
index 6b68c73..0000000
--- a/packages/SystemUI/res/values-ja/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN に接続しました"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN に接続していません"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> 経由"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"通知"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"通知はありません"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"マイクで録音しています"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"カメラで録画しています"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"カメラとマイクで録画、録音しています"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"マイクが録音を停止しました"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"カメラが録画を停止しました"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"カメラとマイクが録画、録音を停止しました"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"画面の録画を開始しました"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"画面の録画を停止しました"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index 9d46a75..0c5c76e 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB-ის ჩართვა"</string>
     <string name="learn_more" msgid="4690632085667273811">"შეიტყვეთ მეტი"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ეკრანის ანაბეჭდი"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"გაფართოებული განბლოკვა გაითიშა"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"ხანგრძლივი განბლოკვა გაითიშა"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"გაიგზავნა სურათი"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"ეკრანის სურათის შენახვა…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"მიმდინარეობს ეკრანის ანაბეჭდის შენახვა სამუშაო პროფილში…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g>-მა აღმოაჩინა ეკრანის ეს ანაბეჭდი"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g>-მა და სხვა გახსნილმა აპებმა აღმოაჩინეს ეკრანის ეს ანაბეჭდი."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"დაამატეთ შენიშვნა"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"ეკრანის ჩამწერი"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"ეკრანის ჩამწერი"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"ეკრანის ჩანაწერი მუშავდება"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"უწყვეტი შეტყობინება ეკრანის ჩაწერის სესიისთვის"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"დაიწყოს ჩაწერა?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"ჩაწერის განმავლობაში Android სისტემას შეუძლია აღბეჭდოს ნებისმიერი სენსიტიური ინფორმაცია, რომელიც თქვენს ეკრანზე გამოჩნდება ან თქვენს მოწყობილობაზე დაიკვრება. აღნიშნული მოიცავს პაროლებს, გადახდის დეტალებს, ფოტოებს, შეტყობინებებსა და აუდიოს."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"მთელი ეკრანის ჩაწერა"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"ერთი აპის ჩაწერა"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"ჩაწერის განხორციელებისას Android-ს აქვს წვდომა ყველაფერზე, რაც თქვენს ეკრანზე ჩანს ან უკრავს თქვენი მოწყობილობის მეშვეობით. შესაბამისად, გამოიჩინეთ სიფრთხილე პაროლებთან, გადახდის დეტალებთან, შეტყობინებებთან თუ სხვა მგრძნობიარე ინფორმაციასთან დაკავშირებით."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"სანამ აპის ჩაწერას ახორციელებთ, Android-ს აქვს წვდომა ყველაფერზე, რაც ჩანს აპში ან ითამაშეთ. ამიტომ იყავით ფრთხილად პაროლებთან, გადახდის დეტალებთან, შეტყობინებებთან ან სხვა მგრძნობიარე ინფორმაციასთან"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"ჩაწერის დაწყება"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"დაიწყოს ჩაწერა?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"სანამ აპის ჩაწერას ახორციელებთ, Android-ს აქვს წვდომა ყველაფერზე, რაც ჩანს თქვენს ეკრანზე ან უკრავს თქვენი მოწყობილობის მეშვეობით. ამიტომ იყავით ფრთხილად ისეთ ინფორმაციასთან, როგორიცაა პაროლები, გადახდის დეტალები, შეტყობინებები, ფოტოები, აუდიო და ვიდეო."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"სანამ აპს იწერთ, Android-ს წვდომა აქვს ყველაფერზე, რაც ჩანს ან რასაც უკრავთ აპში. ამიტომ იყავით ფრთხილად ისეთ ინფორმაციასთან, როგორიცაა პაროლები, გადახდის დეტალები, შეტყობინებები, ფოტოები, აუდიო და ვიდეო."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"ჩაწერის დაწყება"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"აუდიოს ჩაწერა"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"მოწყობილობის აუდიო"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"ხმა თქვენი მოწყობილობიდან, როგორიც არის მუსიკა, საუბარი და ზარები"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"მიკროფონი"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"მოწყობილობის აუდიო და მიკროფონი"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"დაწყება"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"დაწყება"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"მიმდინარეობს ეკრანის ჩაწერა"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"მიმდინარეობს ეკრანისა და აუდიოს ჩაწერა"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"ეკრანზე შეხების ჩვენება"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"გაზიარება"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"ეკრანის ჩაწერა შეინახა"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"შეეხეთ სანახავად"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"ეკრანის ჩანაწერის წაშლისას წარმოიშვა შეცდომა"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"ეკრანის ჩანაწერის შენახვისას შეცდომა მოხდა"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"ეკრანის ჩაწერის დაწყებისას წარმოიქმნა შეცდომა"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"მიმდინარეობს სრულ ეკრანზე ნახვა"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"გასვლისთვის გადაფურცლეთ ზემოდან ქვემოთ."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"გასაგებია"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"უკან"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"საწყისი"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"მენიუ"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"სახის ამოცნობილია"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"დადასტურებული"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"დასასრულებლად შეეხეთ „დადასტურებას“"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"განიბლოკა სახით. გასაგრძელებლად დააჭირეთ განბლოკვის ხატულას."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"განიბლოკა სახით"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"განიბლოკა სახით. დააჭირეთ გასაგრძელებლად."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ამოცნობილია სახით. დააჭირეთ გასაგრძელებლად."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ამოცნობილია სახით. გასაგრძელებლად დააჭირეთ განბლოკვის ხატულას."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ავტორიზებულია"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"ავტორიზაციის გაუქმება"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN-კოდის გამოყენება"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ნიმუშის გამოყენება"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"პაროლის გამოყენება"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"შემდეგი მცდელობისას განმბლოკავი ნიმუშის არასწორად შეყვანის შემთხვევაში, თქვენი სამსახურის პროფილი და მისი მონაცემები წაიშლება."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"შემდეგი მცდელობისას PIN-კოდის არასწორად შეყვანის შემთხვევაში, თქვენი სამსახურის პროფილი და მისი მონაცემები წაიშლება."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"შემდეგი მცდელობისას პაროლის არასწორად შეყვანის შემთხვევაში, თქვენი სამსახურის პროფილი და მისი მონაცემები წაიშლება."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"დაყენება"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"ახლა არა"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"საჭიროა უსაფრთხოებისა და ეფექტურობის გასაუმჯობესებლად"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"ანაბეჭდით განბლოკვის ხელახლა დაყენება"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"ანაბეჭდით განბლოკვა"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"თითის ანაბეჭდით განბლოკვის დაყენება"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"ანაბეჭდით განბლოკვის ხელახლა დასაყენებლად ამჟამინდელი ანაბეჭდის ფოტოები და მოდელები წაიშლება.\n\nმათი წაშლის შემდეგ მოგიწევთ ანაბეჭდით განბლოკვის ხელახლა დაყენება, ტელეფონის ანაბეჭდით განსაბლოკად ან ვინაობის დასადასტურებლად."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"ანაბეჭდით განბლოკვის ხელახლა დასაყენებლად ამჟამინდელი ანაბეჭდის ფოტოები და მოდელები წაიშლება.\n\nმათი წაშლის შემდეგ მოგიწევთ ანაბეჭდით განბლოკვის ხელახლა დაყენება, ტელეფონის ანაბეჭდით განსაბლოკად ან ვინაობის დასადასტურებლად."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"ანაბეჭდით განბლოკვის დაყენება ვერ მოხერხდა. გადადით პარამეტრებზე და ცადეთ ხელახლა."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"დააყენეთ სახით განბლოკვა ხელახლა"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"განბლოკვა სახით"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"სახით განბლოკვის პარამეტრების დაყენება"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"სახით განბლოკვის ისევ დასაყენებლად თქვენი ამჟამინდელი სახის მოდელი წაიშლება.\n\nთქვენ მოგიწევთ ამ ფუნქციის ხელახლა დაყენება სახის მეშვეობით ტელეფონის განსაბლოკად."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"სახით განბლოკვის დაყენება ვერ მოხერხდა. გადადით პარამეტრებზე და ცადეთ ხელახლა."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"შეეხეთ თითის ანაბეჭდის სენსორს"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"გასაგრძელებლად დააჭირეთ განბლოკვის ხატულას"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"სახის ამოცნობა ვერ ხერხდება. სანაცვლოდ თითის ანაბეჭდი გამოიყენეთ."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"აუდიო"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ყურსაცვამი"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"შეყვანა"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"სმენის მოწყობილობები"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"სმენის მოწყობილობები"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ირთვება…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ავტოროტაცია"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ეკრანის ავტომატური შეტრიალება"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"განიბლოკა სახით"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"სახე ამოცნობილია"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"ხელახლა საცდელად გადაფურცლეთ ზემოთ"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"გადაფურცლეთ ზემოთ, რომ კიდევ ცადოთ სახით განბლოკვა"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"განბლოკეთ NFC-ის გამოსაყენებლად"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"ამ მოწყობილობას ფლობს თქვენი ორგანიზაცია"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"ამ მოწყობილობას ფლობს <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"გსურთ მომხმარებლის წაშლა?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"ამ მომხმარებლის ყველა აპი და მონაცემი წაიშლება."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"წაშლა"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-ს ექნება წვდომა ყველა ინფორმაციაზე, რომელიც თქვენს ეკრანზე გამოჩნდება ან თქვენს მოწყობილობაზე დაიკვრება ჩაწერის ან ტრანსლირების განმავლობაში. აღნიშნული მოიცავს ისეთ ინფორმაციას, როგორიც არის პაროლები, გადახდის დეტალები, ფოტოები, შეტყობინებები და თქვენ მიერ დაკრული აუდიო."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"ამ ფუნქციის მომწოდებელ სერვისს ექნება წვდომა ყველა ინფორმაციაზე, რომელიც თქვენს ეკრანზე გამოჩნდება ან თქვენს მოწყობილობაზე დაიკვრება ჩაწერის ან ტრანსლირების განმავლობაში. აღნიშნული მოიცავს ისეთ ინფორმაციას, როგორიც არის პაროლები, გადახდის დეტალები, ფოტოები, შეტყობინებები და თქვენ მიერ დაკრული აუდიო."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"დაიწყოს ჩაწერა ან ტრანსლირება?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"დაიწყოს ჩაწერა ან ტრანსლირება <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-ით?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"გსურთ, დართოთ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-ს გაზიარების ან ჩაწერის ნება?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"მთელი ეკრანი"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"ერთი აპი"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"როდესაც თქვენ აზიარებთ, ჩაწერთ ან ტრანსლირებთ, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> აქვს წვდომა ყველაფერზე, რაც ჩანს თქვენს ეკრანზე ან უკრავს თქვენს მოწყობილობაზე. ამიტომ იყავით ფრთხილად პაროლებთან, გადახდის დეტალებთან, შეტყობინებებთან ან სხვა მგრძნობიარე ინფორმაციასთან."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"აპის გაზიარებისას, ჩაწერისას ან ტრანსლირებისას <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-ს აქვს წვდომა ყველაფერზე, რაც ამ აპში ჩანს და მასშია გაშვებული. შესაბამისად, გამოიჩინეთ სიფრთხილე პაროლებთან, გადახდის დეტალებთან, შეტყობინებებთან თუ სხვა მგრძნობიარე ინფორმაციასთან დაკავშირებით."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"გაგრძელება"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"გააზიარეთ ან ჩაწერეთ აპი"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"გსურთ ამ აპისთვის გაზიარების ან ჩაწერის უფლების მიცემა?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"როდესაც თქვენ აზიარებთ, იწერთ ან ტრანსლირებთ, ამ აპს აქვს წვდომა ყველაფერზე, რაც ჩანს თქვენს ეკრანზე ან უკრავს თქვენს მოწყობილობაზე. ამიტომ იყავით ფრთხილად პაროლებთან, გადახდის დეტალებთან, შეტყობინებებთან ან სხვა სენსიტიურ ინფორმაციასთან."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"როდესაც თქვენ აზიარებთ, იწერთ ან ტრანსლირებთ, ამ აპს აქვს წვდომა ყველაფერზე, რაც ჩანს თქვენს ეკრანზე ან უკრავს თქვენს მოწყობილობაზე. ამიტომ იყავით ფრთხილად პაროლებთან, გადახდის დეტალებთან, შეტყობინებებთან ან სხვა სენსიტიურ ინფორმაციასთან."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-ს ექნება წვდომა ყველა ინფორმაციაზე, რომელიც თქვენს ეკრანზე გამოჩნდება ან თქვენს მოწყობილობაზე დაიკვრება ჩაწერის ან ტრანსლირების განმავლობაში. აღნიშნული მოიცავს ისეთ ინფორმაციას, როგორიც არის პაროლები, გადახდის დეტალები, ფოტოები, შეტყობინებები და თქვენ მიერ დაკრული აუდიო."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"დაიწყოს ჩაწერა ან ტრანსლირება?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"ამ ფუნქციის მომწოდებელ სერვისს ექნება წვდომა ყველა ინფორმაციაზე, რომელიც თქვენს ეკრანზე გამოჩნდება ან თქვენს მოწყობილობაზე დაიკვრება ჩაწერის ან ტრანსლირების განმავლობაში. აღნიშნული მოიცავს ისეთ ინფორმაციას, როგორიც არის პაროლები, გადახდის დეტალები, ფოტოები, შეტყობინებები და თქვენ მიერ დაკრული აუდიო."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"მთელი ეკრანი"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"ერთი აპი"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"გააზიარეთ ან ჩაწერეთ აპი"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"დაიწყოს ჩაწერა ან ტრანსლირება <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-ით?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"გაზიარების, ჩაწერის ან ტრანსლირების დროს, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-ს აქვს წვდომა ყველაფერზე, რაც ჩანს თქვენს ეკრანზე ან უკრავს თქვენს მოწყობილობაზე. ამიტომ იყავით ფრთხილად ისეთ ინფორმაციასთან, როგორიცაა პაროლები, გადახდის დეტალები, შეტყობინებები, ფოტოები, აუდიო და ვიდეო."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"აპის გაზიარებისას, ჩაწერისას ან ტრანსლირებისას, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-ს წვდომა აქვს ყველაფერზე, რაც ჩანს ან იკვრება აპში. ამიტომ იყავით ფრთხილად ისეთ ინფორმაციასთან, როგორიცაა პაროლები, გადახდის დეტალები, შეტყობინებები, ფოტოები, აუდიო და ვიდეო."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"დაწყება"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"გსურთ ტრანსლირების დაწყება?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"როდესაც თქვენ ტრანსლირებთ, ამ აპს აქვს წვდომა ყველაფერზე, რაც ჩანს თქვენს ეკრანზე ან უკრავს თქვენს მოწყობილობაზე. ამიტომ იყავით ფრთხილად ისეთ ინფორმაციასთან, როგორიცაა პაროლები, გადახდის დეტალები, შეტყობინებები, ფოტოები, აუდიო და ვიდეო."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"როდესაც აპს ტრანსლირებთ, Android-ს წვდომა აქვს ყველაფერზე, რაც ჩანს ან იკვრება აპში. ამიტომ იყავით ფრთხილად ისეთ ინფორმაციასთან, როგორიცაა პაროლები, გადახდის დეტალები, შეტყობინებები, ფოტოები, აუდიო და ვიდეო."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"ტრანსლირების დაწყება"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"გსურთ გაზიარების დაწყება?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"გაზიარებისას, ჩაწერისას ან ტრანსლირებისას, Android-ს წვდომა აქვს ყველაფერზე, რაც ჩანს თქვენს ეკრანზე ან უკრავს თქვენს მოწყობილობაზე. ამიტომ იყავით ფრთხილად ისეთ ინფორმაციასთან, როგორიცაა პაროლები, გადახდის დეტალები, შეტყობინებები, ფოტოები, აუდიო და ვიდეო."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"აპის გაზიარებისას, ჩაწერისას ან ტრანსლირებისას, Android-ს წვდომა აქვს ყველაფერზე, რაც ჩანს ან იკვრება აპში. ამიტომ იყავით ფრთხილად ისეთ ინფორმაციასთან, როგორიცაა პაროლები, გადახდის დეტალები, შეტყობინებები, ფოტოები, აუდიო და ვიდეო."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"დაწყება"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"აპების გადართვისას გაზიარება პაუზდება"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"სანაცვლოდ ამ აპის გაზიარება"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"უკან გადართვა"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"აპის გადამრთველი"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"დაბლოკილია თქვენი IT-ადმინისტრატორის მიერ"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"ეკრანის აღბეჭდვა გამორთულია მოწყობილობის წესების თანახმად"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"ყველას გასუფთავება"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"ამ მოწყობილობაზე დაინსტალირებულია სერტიფიცირების ორგანო. თქვენი ქსელის დაცული ტრაფიკი შეიძლება შეიცვალოს, ან მასზე მონიტორინგი განხორციელდეს."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"თქვენმა ადმინისტრატორმა ჩართო ქსელის ჟურნალირება, რომელიც თქვენი მოწყობილობის ტრაფიკის მონიტორინგს ახორციელებს."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"თქვენმა ადმინისტრატორმა ქსელის ჟურნალირება ჩართო, რომელიც ახორციელებს თქვენი სამსახურის პროფილის, მაგრამ არა პირადი პროფილის, ტრაფიკის მონიტორინგს."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"ეს მოწყობილობა დაკავშირებულია ინტერნეტთან <xliff:g id="VPN_APP">%1$s</xliff:g> აპით. თქვენი ქსელის აქტივობა, მათ შორის, ელფოსტები და დათვალიერების მონაცემები, ხილულია თქვენი IT ადმინისტრატორისთვის."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"ეს მოწყობილობა დაკავშირებულია ინტერნეტთან <xliff:g id="VPN_APP">%1$s</xliff:g>. აპით თქვენი ქსელის აქტივობა, მათ შორის, ელფოსტა და დათვალიერების მონაცემები, ხილულია VPN პროვაიდერისთვის."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"ეს მოწყობილობა დაკავშირებულია ინტერნეტთან <xliff:g id="VPN_APP">%1$s</xliff:g> აპით თქვენი ქსელის აქტივობა, მათ შორის, ელფოსტები და დათვალიერების მონაცემები, ხილულია თქვენი IT ადმინისტრატორისთვის."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"ეს მოწყობილობა დაკავშირებულია ინტერნეტთან <xliff:g id="VPN_APP_0">%1$s</xliff:g> და <xliff:g id="VPN_APP_1">%2$s</xliff:g> აპებით. თქვენი ქსელის აქტივობა, მათ შორის, ელფოსტები და დათვალიერების მონაცემები, ხილულია თქვენი IT ადმინისტრატორისთვის."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"თქვენი სამსახურის აპები დაკავშირებულია ინტერნეტთან <xliff:g id="VPN_APP">%1$s</xliff:g> აპით. თქვენი ქსელის აქტივობა სამსახურის აპებში, მათ შორის, ელფოსტები და დათვალიერების მონაცემები, ხილულია IT ადმინისტრატორისა და VPN პროვაიდერისთვის."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"თქვენი პირადი აპები დაკავშირებულია ინტერნეტთან <xliff:g id="VPN_APP">%1$s</xliff:g> აპით. თქვენი ქსელის აქტივობა, მათ შორის, ელფოსტები და დათვალიერების მონაცემები, ხილულია VPN პროვაიდერისთვის."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"გამორთვა"</string>
     <string name="sound_settings" msgid="8874581353127418308">"ხმა და ვიბრაცია"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"პარამეტრები"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ხმა დაკლებულია უსაფრთხო დონემდე"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"ხმა მაღალია რეკომენდებულზე მეტი ხნის განავლობაში"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"ხმა დაწეულია უსაფრთხო დონემდე"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"ხმა მაღალი იყო რეკომენდებულზე მეტი ხნის განმავლობაში"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"ყურსასმენების ხმამ ამ კვირაში უსაფრთხოების ლიმიტს გადააჭარბა"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"მოსმენის გაგრძელება"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"ხმის დაწევა"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"აპი ჩამაგრებულია"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"ამით ის დარჩება ხედში ჩამაგრების მოხსნამდე. ჩამაგრების მოსახსნელად, ხანგრძლივად შეეხეთ „უკან და მიმოხილვა“-ს."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"ამით ის დარჩება ხედში ჩამაგრების მოხსნამდე. ჩამაგრების მოსახსნელად, ხანგრძლივად შეეხეთ „უკან მთავარ გვერდზე“-ს."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"ჩართვის მენიუ"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"გვერდი <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>-დან"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"ჩაკეტილი ეკრანი"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"ტელეფონი გამოირთო გაცხელების გამო"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"თქვენი ტელეფონი უკვე ნორმალურად მუშაობს.\nშეეხეთ დამატებითი ინფორმაციის მისაღებად"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"თქვენი ტელეფონი გამოირთო გასაგრილებლად, რადგან ის მეტისმეტად გაცხელდა. ახლა ის ჩვეულებრივად მუშაობს.\n\nტელეფონის გაცხელების მიზეზებია:\n	• რესურსტევადი აპების გამოყენება (მაგ. სათამაშო, ვიდეო ან ნავიგაციის აპების)\n	• დიდი ფაილების ჩამოტვირთვა ან ატვირთვა\n	• ტელეფონის გამოყენება მაღალი ტემპერატურისას"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"მისაღები ზომების გაცნობა"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"ტელეფონი ცხელდება"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"ზოგიერთი ფუნქცია შეზღუდული იქნება, სანამ ტელეფონი გაგრილდება.\nშეეხეთ დამატებითი ინფორმაციის მისაღებად"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"თქვენი ტელეფონი გაგრილებას ავტომატურად შეეცდება. შეგიძლიათ გააგრძელოთ მისით სარგებლობა, თუმცა ტელეფონმა შეიძლება უფრო ნელა იმუშაოს.\n\nგაგრილების შემდგომ ის ჩვეულებრივად იმუშავებს."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"მისაღები ზომების გაცნობა"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"გამოაერᲗეᲗ Თქვენი მოწყობილობა"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"თქვენი მოწყობილობა ხურდება დამტენის პორტთან ახლოს. თუ ის დაკავშირებულია დამტენთან ან USB აქსესუართან, გამორთეთ იგი და იზრუნეთ, რადგან შესაძლოა კაბელიც გახურებული იყოს."</string>
@@ -839,8 +863,9 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"გაადიდეთ სრულ ეკრანზე"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ეკრანის ნაწილის გადიდება"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"გახსენით გადიდების პარამეტრები"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"გადიდების პარამეტრების დახურვა"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"ჩავლებით გადაიტანეთ კუთხე ზომის შესაცვლელად"</string>
-    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"დიაგონალური გადახვევის დაშვება"</string>
+    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"დიაგონალური გადაადგილების დაშვება"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"ზომის შეცვლა"</string>
     <string name="accessibility_change_magnification_type" msgid="666000085077432421">"გადიდების ტიპის შეცვლა"</string>
     <string name="accessibility_magnification_end_resizing" msgid="4881690585800302628">"ზომის Შეცვლია დასრულება"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"რჩეულებიდან ამოღება"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"გადატანა პოზიციაზე <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"მართვის საშუალებები"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"სწრაფად წვდომისთვის აირჩიეთ მოწყობილობების მართვის საშუალებები"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"მართვის საშუალებების გადაწყობა შეგიძლიათ მათი ჩავლებით გადატანით"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"მართვის ყველა საშუალება ამოიშალა"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ცვლილებები არ შენახულა"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"სხვა PIN-კოდის ცდა"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"დაადასტურეთ ცვლილება <xliff:g id="DEVICE">%s</xliff:g>-ისთვის"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"გადაფურცლეთ მეტის სანახავად"</string>
+    <string name="retry_face" msgid="416380073082560186">"ხელახლა სცადეთ სახის ავტორიზაცია"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"მიმდინარეობს რეკომენდაციების ჩატვირთვა"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"მედია"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"დაიმალოს მედიის ეს კონტროლერი <xliff:g id="APP_NAME">%1$s</xliff:g> აპში?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"პარამეტრები"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g>, <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, უკრავს <xliff:g id="APP_LABEL">%3$s</xliff:g>-დან"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>-დან <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> გაშვებულია"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"დაკვრა"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"პაუზა"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"წინა ჩანაწერი"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"დინამიკები და დისპლეები"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"შემოთავაზებული მოწყობილობები"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"შეწყვიტეთ გაზიარებული სესია, რათა მულტიმედია სხვა მოწყობილობაზე გადაიტანოთ"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"შეწყვეტა"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"ტრანსლირების მუშაობის პრინციპი"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"ტრანსლაცია"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"თქვენთან ახლოს მყოფ ხალხს თავსებადი Bluetooth მოწყობილობით შეუძლიათ თქვენ მიერ ტრანსლირებული მედიის მოსმენა"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"შენახვა ვერ ხერხდება. ცადეთ ხელახლა."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"შენახვა ვერ ხერხდება."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"გამოიყენეთ მინიმუმ 4 სიმბოლო."</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"გამოიყენეთ 16-ზე ნაკლები სიმბოლო"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"გამოიყენეთ <xliff:g id="LENGTH">%1$d</xliff:g>-ზე ნაკლები სიმბოლო"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"ანაწყობის ნომერი"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"ანაწყობის ნომერი დაკოპირებულია გაცვლის ბუფერში."</string>
     <string name="basic_status" msgid="2315371112182658176">"მიმოწერის გახსნა"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"თქვენი ბატარეის მზომის წაკითხვასთან დაკავშირებით პრობლემა დაფიქსირდა"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"შეეხეთ მეტი ინფორმაციისთვის"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"მაღვიძარა არ არის"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ეკრანის დაბლოკვის შეყვანა"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"თითის ანაბეჭდის სენსორი"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"ავტორიზაცია"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"მოწყობილობის შეყვანა"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"ასისტენტი უსმენს"</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="note_task_button_label" msgid="8718616095800343136">"შენიშვნების ჩაწერა"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"ჩანიშვნა"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"ჩანიშვნა, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"შეიტყვეთ მეტი"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"შეიტყვეთ მეტი აქ: <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> აპის გახსნა"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• აპი დაყენებულია"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• საფულეში დამატებულია მინიმუმ ერთი ბარათი"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• დააინსტალირეთ კამერის აპი"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• აპი დაყენებულია"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• ხელმისაწვდომია მინიმუმ ერთი მოწყობილობა"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"საფულის აპის მალსახმობის დასამატებლად დარწმუნდით, რომ აპი დაინსტალირებულია"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"საფულის აპის მალსახმობის დასამატებლად დარწმუნდით, რომ დამატებულია მინიმუმ ერთი ბარათი"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR კოდის სკანერის მალსახმობის დასამატებლად დარწმუნდით, რომ დაინსტალირებულია კამერის აპი"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"მთავარი აპის მალსახმობის დასამატებლად დარწმუნდით, რომ აპი დაინსტალირებულია"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• ხელმისაწვდომია მინიმუმ ერთი მოწყობილობა"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"აირჩიეთ ჩანიშვნების ნაგულისხმევი აპი, რათა ჩანიშვნების შექმნის მალსახმობი გამოიყენოთ"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"აირჩიეთ აპი"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"შეხების დაamp; მოცდის მალსახმობი"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"გაუქმება"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"ეკრანების ახლა გადართვა"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"დააკავშირეთ თქვენი სტილუსი დამტენს"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"სტილუსის ბატარეა დაცლის პირასაა"</string>
     <string name="video_camera" msgid="7654002575156149298">"ვიდეოკამერა"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"ამ პროფილიდან დარეკვა ვერ ხერხდება"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"თქვენი სამსახურის წესები საშუალებას გაძლევთ, სატელეფონო ზარები განახორციელოთ მხოლოდ სამსახურის პროფილიდან"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"პირადი აპიდან დარეკვა შეუძლებელია"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"თქვენი ორგანიზაცია ნებას გრთავთ, რომ დარეკოთ მხოლოდ სამსახურის აპებიდან"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"სამსახურის პროფილზე გადართვა"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"დახურვა"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"სამსახურის ტელეფონის აპის ინსტალაცია"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"გაუქმება"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"ჩაკეთილი ეკრანის მორგება"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"ჩაკეტილი ეკრანის მოსარგებად გაბლოკეთ"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi მიუწვდომელია"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"კამერა დაბლოკილია"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"კამერა და მიკროფონი დაბლოკილია"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"მიკროფონი დაბლოკილია"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"პრიორიტეტული რეჟიმი ჩართულია"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"ასისტენტის ყურადღების ფუნქცია ჩართულია"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"დააყენეთ ნაგულისხმევი შენიშვნების აპი პარამეტრებში"</string>
+    <string name="install_app" msgid="5066668100199613936">"აპის ინსტალაცია"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"მიკროფონი და კამერა"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"აპის ბოლოდროინდელი გამოყენება"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"ბოლოდროინდელი წვდომის ნახვა"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"მზადაა"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"გაფართოება და ვარიანტების ჩვენება"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"ჩაკეცვა"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"ამ აპის დახურვა"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> დახურულია"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"სერვისის მართვა"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"წვდომის მართვა"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"გამოიყენება სატელეფონო ზარის მიერ"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"ახლახან გამოყენებულია სატელეფონო ზარის მიერ"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"გამოიყენება <xliff:g id="APP_NAME">%1$s</xliff:g>-ის მიერ"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"ახლახან გამოყენებულია <xliff:g id="APP_NAME">%1$s</xliff:g>-ის მიერ"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"გამოიყენება <xliff:g id="APP_NAME">%1$s</xliff:g>-ის მიერ (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"ახლახან გამოყენებულია <xliff:g id="APP_NAME">%1$s</xliff:g>-ის მიერ (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"გამოიყენება <xliff:g id="APP_NAME">%1$s</xliff:g>-ის მიერ (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"ახლახან გამოყენებულია <xliff:g id="APP_NAME">%1$s</xliff:g>-ის მიერ (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ka/strings_tv.xml b/packages/SystemUI/res/values-ka/strings_tv.xml
deleted file mode 100644
index dcaa138..0000000
--- a/packages/SystemUI/res/values-ka/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN დაკავშირებულია"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN გათიშულია"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g>-ის მიერ"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"შეტყობინებები"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"შეტყობინებები არ არის"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"მიკროფონი იწერს"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"კამერა იწერს"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"კამერა და მიკროფონი იწერს"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"მიკროფონმა ჩაწერა შეწყვიტა"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"კამერამ ჩაწერა შეწყვიტა"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"კამერამ და მიკროფონმა ჩაწერა შეწყვიტა"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"ეკრანის ჩაწერა დაიწყო"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"ეკრანის ჩაწერა დასრულდა"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 7eb7a93..953292d 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> қолданбасы осы скриншотты анықтады."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> және басқа да ашық қолданбалар осы скриншотты анықтады."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Ескертпеге қосу"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Экран жазғыш"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Экран жазғыш"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Экран жазғыш бейнесін өңдеу"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Экранды бейнеге жазудың ағымдағы хабарландыруы"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Жазу басталсын ба?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Android жүйесі экранда көрсетілетін немесе құрылғыда ойнатылатын құпия ақпаратты жазып алуы мүмкін. Ондай ақпаратқа құпия сөздер, төлем ақпараты, фотосуреттер, хабарлар және дыбыстар жатады."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Бүкіл экранды жазу"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Жалғыз қолданбаны жазу"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Жазу кезінде Android жүйесі экраныңызда көрінетін не құрылғыңызда ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізу кезінде сақ болыңыз."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Қолданба экранын жазу кезінде Android жүйесі қолданбада көрінетін не ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізу кезінде сақ болыңыз."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Жазуды бастау"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Жазу басталсын ба?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Жазу кезінде Android жүйесі экраныңызда көрінетін не құрылғыңызда ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізген кезде сақ болыңыз."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Қолданбаны жазу кезінде Android жүйесі қолданбада көрінетін не ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізген кезде сақ болыңыз."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Жазуды бастау"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Аудио жазу"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Құрылғыдан шығатын дыбыс"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Музыка, қоңыраулар және рингтондар сияқты құрылғыдан шығатын дыбыс"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Микрофон"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Құрылғыдан шығатын дыбыс және микрофон"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Бастау"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Бастау"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Экран жазылып жатыр."</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Экрандағы бейне және аудио жазылуда."</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Экранды түрткенде көрсету"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Бөлісу"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Экран жазбасы сақталды."</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Көру үшін түртіңіз."</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Экран бейне жазбасын жою кезінде қате кетті"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Экран жазбасын сақтау кезінде қате шықты."</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Экрандағы бейнені жазу кезінде қате шықты."</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Толық экранда көру"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Шығу үшін жоғарыдан төмен қарай сырғытыңыз."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Түсінікті"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Артқа"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Үй"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Mәзір"</string>
@@ -138,18 +138,19 @@
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Жіберу"</string>
     <string name="cancel" msgid="1089011503403416730">"Бас тарту"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Растау"</string>
-    <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Қайталап көріңіз"</string>
+    <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Қайта көру"</string>
     <string name="biometric_dialog_empty_space_description" msgid="3330555462071453396">"Аутентификациядан бас тарту үшін түртіңіз."</string>
     <string name="biometric_dialog_face_icon_description_idle" msgid="4351777022315116816">"Қайталап көріңіз."</string>
     <string name="biometric_dialog_face_icon_description_authenticating" msgid="3401633342366146535">"Құрылғы бетіңізді талдап жатыр."</string>
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Бет танылды."</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Расталды"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Аяқтау үшін \"Растау\" түймесін түртіңіз."</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Бет үлгісі арқылы ашылды. Жалғастыру үшін құлыпты ашу белгішесін басыңыз."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Бетпен ашылды."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Бетпен ашылды. Жалғастыру үшін басыңыз."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Бет танылды. Жалғастыру үшін басыңыз."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Бет танылды. Жалғастыру үшін құлыпты ашу белгішесін басыңыз."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Аутентификацияланған"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Аутентификациядан бас тарту"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN кодын пайдалану"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Өрнекті пайдалану"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Құпия сөзді пайдалану"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Келесі әрекет кезінде қате өрнек енгізсеңіз, жұмыс профиліңіз бен оның деректері жойылады."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Келесі әрекет кезінде қате PIN кодын енгізсеңіз, жұмыс профиліңіз бен оның деректері жойылады."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Келесі әрекет кезінде қате құпия сөз енгізсеңіз, жұмыс профиліңіз бен оның деректері жойылады."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Реттеу"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Қазір емес"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Бұл —қауіпсіздік пен өнімділікті жақсарту үшін қажет."</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Саусақ ізімен ашу функциясын қайта реттеңіз"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Саусақ ізімен ашу"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Саусақ ізімен ашу функциясын реттеу"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Саусақ ізімен ашу функциясын реттеу үшін қолданыстағы саусақ ізінің суреттері мен үлгілері жойылады.\n\nОлар жойылғаннан кейін, саусақ ізімен телефон құлпын ашу не жеке басыңызды растау үшін функцияны қайта реттеуіңіз қажет."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Саусақ ізімен ашу функциясын реттеу үшін қолданыстағы саусақ ізінің суреттері мен үлгісі жойылады.\n\nОлар жойылғаннан кейін, саусақ ізімен телефон құлпын ашу не жеке басыңызды растау үшін функцияны қайта реттеуіңіз қажет."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Саусақ ізімен ашу функциясы реттелмеді. \"Параметрлер\" бөліміне өтіп, әрекетті қайталап көріңіз."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Бет тану функциясын қайта реттеңіз"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Бет тану"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Бет тану функциясын реттеу"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Бет тану функциясын қайта реттеу үшін қолданыстағы бет үлгісі жойылады.\n\nБет үлгісімен телефон құлпын ашу үшін бұл функцияны қайта реттеуіңіз қажет."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Бет тану функциясы реттелмеді. \"Параметрлер\" бөліміне өтіп, әрекетті қайталап көріңіз."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Саусақ ізін оқу сканерін түртіңіз"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Жалғастыру үшін құлыпты ашу белгішесін басыңыз."</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Бет танылмады. Орнына саусақ ізін пайдаланыңыз."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Aудио"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Гарнитура"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Кіріс"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Есту аппараттары"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Есту аппараттары"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Қосылуда…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автоматты түрде бұру"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоматты айналатын экран"</string>
@@ -290,8 +306,8 @@
     <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"Күн шыққанға дейін"</string>
     <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"Қосылу уақыты: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="quick_settings_dark_mode_secondary_label_until" msgid="2289774641256492437">"<xliff:g id="TIME">%s</xliff:g> дейін"</string>
-    <string name="quick_settings_dark_mode_secondary_label_on_at_bedtime" msgid="2274300599408864897">"Ұйқы уақытында"</string>
-    <string name="quick_settings_dark_mode_secondary_label_until_bedtime_ends" msgid="1790772410777123685">"Ұйқы уақыты аяқталғанға дейін"</string>
+    <string name="quick_settings_dark_mode_secondary_label_on_at_bedtime" msgid="2274300599408864897">"Ұйқы режимінде"</string>
+    <string name="quick_settings_dark_mode_secondary_label_until_bedtime_ends" msgid="1790772410777123685">"Ұйқы режимі аяқталғанға дейін"</string>
     <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string>
     <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC өшірулі"</string>
     <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC қосулы"</string>
@@ -303,15 +319,15 @@
     <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"Стандартты режим"</string>
     <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"Орташа"</string>
     <string name="quick_settings_contrast_high" msgid="656049259587494499">"Жоғары"</string>
-    <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Құрылғы микрофонының бөгеуі алынсын ба?"</string>
-    <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Құрылғы камерасының бөгеуі алынсын ба?"</string>
-    <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Құрылғы камерасы мен микрофонының бөгеуі алынсын ба?"</string>
+    <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Құрылғы микрофонын блоктан шығару керек пе?"</string>
+    <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Құрылғы камерасын блоктан шығару керек пе?"</string>
+    <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Құрылғы камерасы мен микрофонын блоктан шығару керек пе?"</string>
     <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"Микрофоныңызды пайдалануға рұқсат берілген барлық қолданба мен қызметтің бөгеуі алынады."</string>
     <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"Камераңызды пайдалануға рұқсат берілген барлық қолданба мен қызметтің бөгеуі алынады."</string>
     <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"Камераңызды немесе микрофоныңызды пайдалануға рұқсат берілген барлық қолданба мен қызметтің бөгеуі алынады."</string>
-    <string name="sensor_privacy_start_use_mic_blocked_dialog_title" msgid="2640140287496469689">"Микрофон бөгелген"</string>
-    <string name="sensor_privacy_start_use_camera_blocked_dialog_title" msgid="7398084286822440384">"Камера бөгелген"</string>
-    <string name="sensor_privacy_start_use_mic_camera_blocked_dialog_title" msgid="195236134743281973">"Микрофон мен камера бөгелген"</string>
+    <string name="sensor_privacy_start_use_mic_blocked_dialog_title" msgid="2640140287496469689">"Микрофон блокталған"</string>
+    <string name="sensor_privacy_start_use_camera_blocked_dialog_title" msgid="7398084286822440384">"Камера блокталған"</string>
+    <string name="sensor_privacy_start_use_mic_camera_blocked_dialog_title" msgid="195236134743281973">"Микрофон мен камера блокталған"</string>
     <string name="sensor_privacy_start_use_mic_blocked_dialog_content" msgid="2138318880682877747">"Бөгеуді алу үшін құрылғыдағы құпиялық ауыстырғышын микрофонға жылжытыңыз, оның қалпы микрофонды пайдалануға мүмкіндік беруі тиіс. Құрылғыдағы құпиялық ауыстырғышының орналасқан жерін құрылғы нұсқаулығынан қараңыз."</string>
     <string name="sensor_privacy_start_use_camera_blocked_dialog_content" msgid="7216015168047965948">"Бөгеуді алу үшін құрылғыдағы құпиялық ауыстырғышын камераға жылжытыңыз, оның қалпы камераны пайдалануға мүмкіндік беруі тиіс. Құрылғыдағы құпиялық ауыстырғышының орналасқан жерін құрылғы нұсқаулығынан қараңыз."</string>
     <string name="sensor_privacy_start_use_mic_camera_blocked_dialog_content" msgid="3960837827570483762">"Оның бөгеуін алу үшін құрылғыдағы құпиялық ауыстырғышын ашық қалыпқа жылжытып, пайдалану мүмкіндігін қамтамасыз етіңіз. Құрылғыдағы құпиялық ауыстырғышының орналасқан жерін құрылғы нұсқаулығынан қараңыз."</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Бетпен ашылды."</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Бет танылды."</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Әрекетті қайталау үшін жоғары сырғытыңыз."</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Бет тану функциясын тағы қолданып көру үшін жоғары сырғытыңыз."</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC пайдалану үшін құлыпты ашыңыз."</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Бұл құрылғы ұйымыңызға тиесілі."</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Бұл құрылғы <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> ұйымына тиесілі."</string>
@@ -364,12 +381,12 @@
     <string name="interruption_level_alarms_twoline" msgid="2045067991335708767">"Тек\nдабылдар"</string>
     <string name="keyguard_indication_charging_time_wireless" msgid="577856646141738675">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Сымсыз зарядталуда • Толуына <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> қалды."</string>
     <string name="keyguard_indication_charging_time" msgid="6492711711891071502">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Зарядталуда • Толуына <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> қалды."</string>
-    <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Жылдам зарядталуда • Толуына <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> қалды."</string>
+    <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Жылдам зарядтау • Толуына <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> қалды."</string>
     <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Баяу зарядталуда • Толуына <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> қалды."</string>
     <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Зарядталып жатыр. • Толуына <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> қалды."</string>
     <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Пайдаланушыны ауыстыру"</string>
     <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ашылмалы мәзір"</string>
-    <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Осы сеанстағы барлық қолданбалар мен деректер жойылады."</string>
+    <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Осы сеанстағы барлық қолданба мен дерек жойылады."</string>
     <string name="guest_wipe_session_title" msgid="7147965814683990944">"Қош келдіңіз, қонақ!"</string>
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Сеансты жалғастыру керек пе?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Қайта бастау"</string>
@@ -382,23 +399,32 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"Пайдаланушы жойылсын ба?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Осы пайдаланушының барлық қолданбалары мен деректері жойылады."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Жою"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> жазу не трансляциялау кезінде экранда көрсетілетін немесе дыбысталатын барлық ақпаратты пайдалана алады. Бұған құпия сөздер, төлем туралы мәліметтер, суреттер, хабарлар және аудиоматериалдар кіреді."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Осы функцияны ұсынатын қызмет жазу не трансляциялау кезінде экранда көрсетілетін немесе құрылғыда дыбысталатын ақпаратты пайдалана алады. Бұған құпия сөздер, төлем туралы мәліметтер, суреттер, хабарлар және аудиоматериалдар кіреді."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Жазу немесе трансляциялау басталсын ба?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> арқылы жазу немесе трансляциялау басталсын ба?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> қолданбасына экранды бөлісуге не жазуға рұқсат берілсін бе?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Бүкіл экран"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Жалғыз қолданба"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Бөлісу, жазу не трансляциялау кезінде <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> қолданбасы экраныңызда көрінетін не құрылғыңызда ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізу кезінде сақ болыңыз."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Қолданба экранын бөлісу, жазу не трансляциялау кезінде <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> қолданбасы онда көрінетін не ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізу кезінде сақ болыңыз."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Жалғастыру"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Қолданба экранын бөлісу не жазу"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Қолданбаға бөлісуге не жазып алуға рұқсат берілсін бе?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Экранды бөлісу, жазып алу не трансляциялау кезінде бұл қолданба экраныңызда көрінетін не құрылғыңызда ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізу кезінде сақ болыңыз."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Қолданбаны бөлісу, жазып алу не трансляциялау кезінде бұл қолданба онда көрінетін не ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізу кезінде сақ болыңыз."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> экранда көрсетілетін немесе жазу не трансляциялау кезінде құрылғыда ойнатылған барлық ақпаратты пайдалана алады. Бұған құпия сөздер, төлем туралы мәліметтер, суреттер, хабарлар және ойнатылатын аудио сияқты ақпарат кіреді."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Жазу немесе трансляциялау басталсын ба?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Осы функцияны ұсынатын қызмет экранда көрсетілетін немесе жазу не трансляциялау кезінде құрылғыда ойнатылған барлық ақпаратты пайдалана алады. Бұған құпия сөздер, төлем туралы мәліметтер, суреттер, хабарлар және ойнатылатын аудио сияқты ақпарат кіреді."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Бүкіл экран"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Жалғыз қолданба"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Қолданба экранын бөлісу не жазу"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> арқылы жазу немесе трансляциялау басталсын ба?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Бөлісу, жазу не трансляциялау кезінде <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> экраныңызда көрінетін не құрылғыңызда ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізген кезде сақ болыңыз."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Қолданба экранын бөлісу, жазу не трансляциялау кезінде <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> онда көрінетін не ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізген кезде сақ болыңыз."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Бастау"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Трансляциялау басталсын ба?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Трансляциялау кезінде Android жүйесі экраныңызда көрінетін не құрылғыңызда ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізген кезде сақ болыңыз."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Қолданба экранын трансляциялау кезінде Android жүйесі қолданбада көрінетін не ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізген кезде сақ болыңыз."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Трансляциялауды бастау"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Бөлісу басталсын ба?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Бөлісу, жазу не трансляциялау кезінде Android жүйесі экраныңызда көрінетін не құрылғыңызда ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізген кезде сақ болыңыз."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Қолданба экранын бөлісу, жазу не трансляциялау кезінде Android жүйесі онда көрінетін не ойнатылатын барлық нәрсені пайдалана алады. Сондықтан құпия сөздерді, төлем туралы мәліметті, хабарларды немесе басқа құпия ақпаратты енгізген кезде сақ болыңыз."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Бастау"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Қолданба ауыстырғанда, бөлісу кідіртіледі."</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Орнына осы қолданбаны бөлісу"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Қайта ауысу"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Қолданба ауыстыру"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Әкімшіңіз бөгеген"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Құрылғы саясатына байланысты экранды түсіру өшірілді."</string>
-    <string name="clear_all_notifications_text" msgid="348312370303046130">"Барлығын тазалау"</string>
+    <string name="clear_all_notifications_text" msgid="348312370303046130">"Барлығын тазарту"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Басқару"</string>
     <string name="manage_notifications_history_text" msgid="57055985396576230">"Тарих"</string>
     <string name="notification_section_header_incoming" msgid="850925217908095197">"Жаңа"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Осы құрылғыда сертификат орнатылған. Қорғалған желі трафигіңіз бақылануы немесе өзгертілуі мүмкін."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Әкімші құрылғыңыздағы трафикті бақылайтын желі журналын жүргізуді қосқан."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Әкімші жұмыс профиліндегі трафикті (жеке профильдегі трафик қаралмайды) қадағалау үшін желі журналын жүргізуді қосып қойған."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Бұл құрылғы интернетке <xliff:g id="VPN_APP">%1$s</xliff:g> арқылы қосылған. Желідегі әрекетіңіз, соның ішінде электрондық пошталар мен браузерді пайдалану деректеріңіз әкімшіге көрінеді."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Бұл құрылғы интернетке <xliff:g id="VPN_APP">%1$s</xliff:g> арқылы қосылған. Желідегі әрекетіңіз, соның ішінде электрондық пошталар мен браузерді пайдалану деректеріңіз VPN провайдеріне көрінеді."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Бұл құрылғы интернетке <xliff:g id="VPN_APP">%1$s</xliff:g> арқылы қосылған. Желідегі әрекетіңіз, соның ішінде электрондық пошталар мен браузерді пайдалану деректеріңіз әкімшіге көрінеді."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Бұл құрылғы интернетке <xliff:g id="VPN_APP_0">%1$s</xliff:g> және <xliff:g id="VPN_APP_1">%2$s</xliff:g> арқылы қосылған. Желідегі әрекетіңіз, соның ішінде электрондық пошталар мен браузерді пайдалану деректеріңіз әкімшіге көрінеді."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Жұмыс қолданбаларыңыз интернетке <xliff:g id="VPN_APP">%1$s</xliff:g> арқылы қосылған. Жұмыс қолданбаларында жасаған желідегі әрекетіңіз, соның ішінде электрондық пошталар мен браузерді пайдалану деректеріңіз әкімшіге және VPN провайдеріне көрінеді."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Жеке қолданбаларыңыз интернетке <xliff:g id="VPN_APP">%1$s</xliff:g> арқылы қосылған. Желідегі әрекетіңіз, соның ішінде электрондық пошталар мен браузерді пайдалану деректеріңіз VPN провайдеріне көрінеді."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"өшіру"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Дыбыс және діріл"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Параметрлер"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Қауіпсіз дыбыс деңгейіне төмендетілді"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Дыбыстың жоғары деңгейі ұсынылғаннан уақыттан ұзағырақ болды."</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Дыбыс деңгейі қауіпсіз шекке дейін түсірілді"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Құлақаспаптың жоғары дыбыс деңгейі ұсынылған уақыттан ұзақ қосылып тұрды."</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Құлақаспаптың дыбыс деңгейі осы аптадағы қауіпсіз шектен асып кетті."</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Тыңдай беру"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Дыбыс деңгейін азайту"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Қолданба бекітілді"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Өзіңіз босатқаша ашық тұрады. Босату үшін \"Артқа\" және \"Шолу\" түймелерін басып тұрыңыз."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Өзіңіз босатқаша ашық тұрады. Босату үшін \"Артқа\" және \"Негізгі бет\" түймелерін басып тұрыңыз"</string>
@@ -738,14 +768,8 @@
     <string name="accessibility_quick_settings_edit" msgid="1523745183383815910">"Параметрлер тәртібін өзгерту."</string>
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Қуат мәзірі"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g> ішінен <xliff:g id="ID_1">%1$d</xliff:g>"</string>
-    <string name="tuner_lock_screen" msgid="2267383813241144544">"Құлыпталған экран"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Телефон қызып кеткендіктен өшірілді"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Телефоныңыз қалыпты жұмыс істеп тұр.\nТолығырақ ақпарат алу үшін түртіңіз."</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Телефоныңыз қатты қызып кеткендіктен өшірілді. Телефоныңыз қазір қалыпты жұмыс істеп тұр.\n\nТелефоныңыз мына жағдайларда ыстық болуы мүмкін:\n	• Ресурстар талап ететін қолданбаларды пайдалану (ойын, бейне немесе навигация қолданбалары)\n	• Үлкен көлемді файлдарды жүктеу немесе жүктеп салу\n	• Телефонды жоғары температурада пайдалану"</string>
+    <string name="tuner_lock_screen" msgid="2267383813241144544">"Құлыптаулы экран"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Пайдалану нұсқаулығын қараңыз"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Телефон қызуда"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Телефон толық суығанға дейін, кейбір функциялардың жұмысы шектеледі.\nТолығырақ ақпарат үшін түртіңіз."</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Телефон автоматты түрде суи бастайды. Оны пайдалана бере аласыз, бірақ ол баяуырақ жұмыс істеуі мүмкін.\n\nТелефон суығаннан кейін, оның жұмысы қалпына келеді."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Пайдалану нұсқаулығын қараңыз"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Құрылғыны ажыратыңыз"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Құрылғының зарядтау ұяшығы тұрған бөлігі қызып келеді. Зарядтағышқа немесе USB құрылғысына жалғанған болса, оны ажыратыңыз. Абайлаңыз, кабель де ыстық болуы мүмкін."</string>
@@ -764,7 +788,7 @@
     <string name="tuner_right" msgid="8247571132790812149">"Оң жақ"</string>
     <string name="tuner_menu" msgid="363690665924769420">"Mәзір"</string>
     <string name="tuner_app" msgid="6949280415826686972">"<xliff:g id="APP">%1$s</xliff:g> қолданбасы"</string>
-    <string name="notification_channel_alerts" msgid="3385787053375150046">"Ескертулер"</string>
+    <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_instant" msgid="7556135423486752680">"Instant Apps"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Толық экранды ұлғайту"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Экранның бөлігін ұлғайту"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Ұлғайту параметрлерін ашу"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Ұлғайту параметрлерін жабу"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Өлшемін өзгерту үшін бұрышынан сүйреңіз."</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Диагональ бойынша айналдыруға рұқсат беру"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Өлшемін өзгерту"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Арнайы мүмкіндікті ашу үшін түртіңіз. Түймені параметрден реттеңіз не ауыстырыңыз.\n\n"<annotation id="link">"Параметрді көру"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Түймені уақытша жасыру үшін оны шетке қарай жылжытыңыз."</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Қайтару"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> таңбашасы өшірілді."</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> жылдам пәрмені өшірілді."</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# таңбаша өшірілді.}other{# таңбаша өшірілді.}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Жоғарғы сол жаққа жылжыту"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Жоғарғы оң жаққа жылжыту"</string>
@@ -885,10 +910,9 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"таңдаулылардан алып тастау"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> позициясына жылжыту"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Басқару элементтері"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Жылдам кіру үшін құрылғыны басқару элементтерін таңдаңыз."</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Басқару элементтерінің ретін өзгерту үшін оларды басып тұрып сүйреңіз."</string>
-    <string name="controls_favorite_removed" msgid="5276978408529217272">"Барлық басқару элементтері жойылды."</string>
+    <string name="controls_favorite_removed" msgid="5276978408529217272">"Барлық басқару элементі жойылды."</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Өзгерістер сақталмады."</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Басқа қолданбаларды көру"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Қайта реттеу"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Басқа PIN кодын енгізіңіз"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> құрылғысындағы өзгерісті растау"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Толығырақ ақпарат алу үшін сырғытыңыз."</string>
+    <string name="retry_face" msgid="416380073082560186">"Бет аутентификациясын қайталап көру"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Жүктеуге қатысты ұсыныстар"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Мультимедиа"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> үшін медиа контроллері жасырылсын ба?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Параметрлер"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> қолданбасында <xliff:g id="ARTIST_NAME">%2$s</xliff:g> орындайтын \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\" әні ойнатылуда."</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>/<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> қосулы тұр"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Ойнату"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Кідірту"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Алдыңғы трек"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Динамиктер мен дисплейлер"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Ұсынылған құрылғылар"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Мультимедиа файлын басқа құрылғыға жылжыту үшін ортақ сеансты тоқтатыңыз."</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Тоқтату"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Тарату қалай жүзеге асады"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Тарату"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Үйлесімді Bluetooth құрылғылары бар маңайдағы адамдар сіз таратып жатқан медиамазмұнды тыңдай алады."</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Сақталмайды. Қайталап көріңіз."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Сақталмайды."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Кемінде 4 таңба пайдаланыңыз."</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Ең көбі 16 таңба пайдаланыңыз."</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Ең көбі <xliff:g id="LENGTH">%1$d</xliff:g> таңба пайдаланыңыз."</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Құрама нөмірі"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Құрама нөмірі буферге көшірілді."</string>
     <string name="basic_status" msgid="2315371112182658176">"Ашық әңгіме"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Батарея зарядының дерегі алынбай жатыр"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Толығырақ ақпарат алу үшін түртіңіз."</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Оятқыш орнатылмаған."</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"экран құлпын енгізу"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Саусақ ізін оқу сканері"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"аутентификациялау"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"құрылғыны енгізу"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant тыңдап тұр."</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="note_task_button_label" msgid="8718616095800343136">"Ескертпе жазу"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Ескертпе жазу"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Ескертпе жазу, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Толық ақпарат"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Толық ақпарат: <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> ашу"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Қолданба реттелген"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Wallet-ке кемінде бір карта қосылған"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Камера қолданбасын орнатыңыз"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Қолданба реттелген"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Кемінде бір құрылғы қолжетімді"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Wallet қолданбасын таңбаша ретінде қосу үшін қолданбаның орнатылғанын тексеріңіз."</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Wallet қолданбасын таңбаша ретінде қосу үшін кемінде бір картаның қосылғанын тексеріңіз."</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR кодының сканерін таңбаша ретінде қосу үшін камера қолданбасының орнатылғанын тексеріңіз."</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home қолданбасын таңбаша ретінде қосу үшін қолданбаның орнатылғанын тексеріңіз."</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Кемінде бір құрылғы қолжетімді."</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Жазба жазу таңбашасын пайдалану үшін әдепкі жазба қолданбаны таңдаңыз."</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Қолданба таңдау"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Таңбашаны басып тұрыңыз."</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Бас тарту"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Экрандарды қазір ауыстыру"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Стилусты зарядтағышқа жалғаңыз."</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Стилус батареясының заряды аз"</string>
     <string name="video_camera" msgid="7654002575156149298">"Бейнекамера"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Бұл профильден қоңырау шалу мүмкін емес"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Жұмыс саясатыңызға сәйкес тек жұмыс профилінен қоңырау шалуға болады."</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Жеке қолданбадан қоңырау шалу мүмкін емес"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Ұйымыңыз тек жұмыс қолданбаларынан қоңырау шалуға рұқсат етеді."</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Жұмыс профиліне ауысу"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Жабу"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Жұмысқа арналған телефон қолданбасын орнату"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Бас тарту"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Құлып экранын бейімдеу"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Құлып экранын бейімдеу үшін құлыпты ашыңыз"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi қолжетімсіз."</string>
-    <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камера бөгелген."</string>
-    <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камера мен микрофон бөгелген."</string>
-    <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Микрофон бөгелген."</string>
+    <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камера блокталған."</string>
+    <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камера мен микрофон блокталған."</string>
+    <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Микрофон блокталған."</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"\"Маңызды\" режимі қосулы."</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant қосулы."</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Параметрлерден әдепкі жазба қолданбасын орнатыңыз."</string>
+    <string name="install_app" msgid="5066668100199613936">"Қолданбаны орнату"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Микрофон және камера"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Соңғы рет қолданбаның датчикті пайдалануы"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Соңғы рет пайдаланғандар"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Дайын"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Опцияларды көрсету және жаю"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Жию"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Осы қолданбаны жабу"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы жабылды."</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Қызметті басқару"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Пайдалану рұқсатын басқару"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Телефон қоңырауы үшін пайдаланылып жатыр"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Соңғы рет телефон қоңырауы үшін пайдаланылды."</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы пайдаланып жатыр"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Соңғы рет <xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы пайдаланды."</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) қолданбасы пайдаланып жатыр"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Соңғы рет <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) қолданбасы пайдаланды."</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) қолданбасы пайдаланып жатыр"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Соңғы рет <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) қолданбасы пайдаланды."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-kk/strings_tv.xml b/packages/SystemUI/res/values-kk/strings_tv.xml
deleted file mode 100644
index bb0e06b..0000000
--- a/packages/SystemUI/res/values-kk/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN қосылған"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN ажыратылған"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> арқылы жалғанған"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Хабарландырулар"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Хабарландырулар жоқ"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Микрофон жазып жатыр."</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Камера жазып жатыр."</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Камера мен микрофон жазып жатыр."</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Микрофон жазуды тоқтатты."</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Камера жазуды тоқтатты."</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Камера мен микрофон жазуды тоқтатты."</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Экранды бейнеге жазу басталды."</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Экранды бейнеге жазу тоқтатылды."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index 4eafd98..535400f 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"បើក USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"ស្វែងយល់​បន្ថែម"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"រូបថតអេក្រង់"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"បានបិទការដោះសោបន្ថែម"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"បានបិទ Extend Unlock"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"បាន​ផ្ញើរូបភាព"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"កំពុង​រក្សាទុក​រូបថត​អេក្រង់..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"កំពុងរក្សាទុករូបថតអេក្រង់ទៅកម្រងព័ត៌មានការងារ…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> បានរកឃើញ​រូបថតអេក្រង់នេះ។"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> និងកម្មវិធីដែលបើក​ផ្សេងទៀតបានរកឃើញ​រូបថតអេក្រង់នេះ។"</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"បញ្ចូលទៅក្នុងកំណត់ចំណាំ"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"មុខងារថត​វីដេអូអេក្រង់"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"មុខងារថត​វីដេអូអេក្រង់"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"កំពុង​ដំណើរការ​ការថតអេក្រង់"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"ការជូនដំណឹង​ដែល​កំពុង​ដំណើរការ​សម្រាប់​រយៈពេលប្រើ​ការថត​សកម្មភាព​អេក្រង់"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"ចាប់ផ្តើម​ថត​ឬ?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"នៅពេល​កំពុងថត ប្រព័ន្ធ Android អាច​ថត​ព័ត៌មាន​រសើប​ដែលអាច​មើលឃើញ​នៅលើ​អេក្រង់​របស់អ្នក ឬដែល​បានចាក់​នៅលើ​ឧបករណ៍​របស់អ្នក។ ព័ត៌មាននេះ​រួមមាន​ពាក្យសម្ងាត់ ព័ត៌មាន​អំពី​ការបង់ប្រាក់ រូបថត សារ និងសំឡេង។"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"ថតអេក្រង់ទាំងមូល"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"ថតកម្មវិធីតែមួយ"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"នៅពេលអ្នកកំពុងថត Android មានសិទ្ធិចូលប្រើប្រាស់អ្វីៗដែលបង្ហាញឱ្យឃើញនៅលើអេក្រង់របស់អ្នក ឬលេងនៅលើឧបករណ៍របស់អ្នក។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះពាក្យសម្ងាត់ ព័ត៌មាន​លម្អិតអំពី​ការ​ទូទាត់ប្រាក់ សារ ឬព័ត៌មានរសើបផ្សេងទៀត។"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"នៅពេលអ្នកកំពុងថតកម្មវិធី Android មានសិទ្ធិចូលប្រើប្រាស់អ្វីៗដែលបង្ហាញ ឬលេងនៅលើកម្មវិធីនោះ។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះពាក្យសម្ងាត់ ព័ត៌មាន​លម្អិតអំពី​ការ​ទូទាត់ប្រាក់ សារ ឬព័ត៌មានរសើបផ្សេងទៀត។"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"ចាប់ផ្តើមថត"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"ចាប់ផ្តើម​ថត​ឬ?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"នៅពេលអ្នក​កំពុងថត, Android មានសិទ្ធិចូលប្រើអ្វីៗដែលអាចមើលឃើញនៅលើ​អេក្រង់របស់អ្នក ឬចាក់នៅលើឧបករណ៍របស់អ្នក។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះអ្វីៗដូចជា ពាក្យសម្ងាត់ ព័ត៌មានលម្អិតអំពីការទូទាត់ប្រាក់ សារ រូបថត ព្រមទាំងសំឡេង និងវីដេអូ។"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"នៅពេលអ្នក​កំពុងថតកម្មវិធី, Android មានសិទ្ធិចូលប្រើអ្វីៗដែលបង្ហាញ ឬចាក់នៅលើកម្មវិធីនោះ។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះអ្វីៗដូចជា ពាក្យសម្ងាត់ ព័ត៌មានលម្អិតអំពីការទូទាត់ប្រាក់ សារ រូបថត ព្រមទាំងសំឡេង និងវីដេអូ។"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"ចាប់ផ្តើមថត"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"ថត​សំឡេង"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"សំឡេង​ឧបករណ៍"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"សំឡេង​ពី​ឧបករណ៍​របស់អ្នក​ដូចជា តន្ត្រី ការហៅទូរសព្ទ និងសំឡេងរោទ៍​ជាដើម"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"មីក្រូហ្វូន"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"មីក្រូហ្វូន និង​សំឡេង​ឧបករណ៍"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"ចាប់ផ្ដើម"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"ចាប់ផ្ដើម"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"កំពុងថត​អេក្រង់"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"កំពុងថត​អេក្រង់ និងសំឡេង"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"បង្ហាញ​ការប៉ះ​នៅលើ​អេក្រង់"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"ចែករំលែក"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"បានរក្សាទុក​ការថតវីដេអូអេក្រង់"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"ចុចដើម្បីមើល"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"មានបញ្ហា​ក្នុងការ​លុបការថត​សកម្មភាព​អេក្រង់"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"មានបញ្ហាក្នុងការរក្សាទុក​ការថតវីដេអូអេក្រង់"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"មានបញ្ហា​ក្នុងការ​ចាប់ផ្ដើម​ថត​អេក្រង់"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"កំពុងមើលពេញអេក្រង់"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"ដើម្បីចាកចេញ សូមអូសពីលើចុះក្រោម។"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"យល់ហើយ"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"ថយក្រោយ"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"គេហ​ទំព័រ"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"ម៉ឺនុយ"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"បានផ្ទៀងផ្ទាត់​មុខ"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"បានបញ្ជាក់"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"ចុច \"បញ្ជាក់\" ដើម្បីបញ្ចប់"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"បានដោះសោ​ដោយប្រើមុខ។ សូមចុចរូបដោះសោ ដើម្បីបន្ត។"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"បានដោះសោដោយប្រើមុខ"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"បានដោះសោដោយប្រើមុខ។ សូមចុច ដើម្បីបន្ត។"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"បានស្គាល់មុខ។ សូមចុច ដើម្បីបន្ត។"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"បានស្គាល់មុខ។ សូមចុចរូបដោះសោ ដើម្បីបន្ត។"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"បាន​ផ្ទៀងផ្ទាត់"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"បោះបង់ការផ្ទៀងផ្ទាត់"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ប្រើកូដ PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ប្រើ​លំនាំ"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"ប្រើពាក្យសម្ងាត់"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"ប្រសិនបើអ្នក​បញ្ចូលលំនាំមិនត្រឹមត្រូវ នៅពេលព្យាយាមបញ្ចូល​លើកក្រោយ កម្រងព័ត៌មាន​ការងាររបស់អ្នក និងទិន្នន័យរបស់កម្រងព័ត៌មាននេះនឹងត្រូវ​បានលុប។"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"ប្រសិនបើអ្នក​បញ្ចូលកូដ PIN មិនត្រឹមត្រូវ នៅពេលព្យាយាមបញ្ចូល​លើកក្រោយ កម្រងព័ត៌មានការងាររបស់អ្នក និងទិន្នន័យរបស់កម្រងព័ត៌មាននេះ​នឹងត្រូវបានលុប។"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"ប្រសិនបើអ្នក​បញ្ចូលពាក្យសម្ងាត់មិន​ត្រឹមត្រូវ នៅពេលព្យាយាមបញ្ចូល​លើកក្រោយ កម្រងព័ត៌មាន​ការងាររបស់អ្នក និងទិន្នន័យ​របស់កម្រងព័ត៌មាននេះនឹងត្រូវបានលុប។"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"រៀបចំ"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"កុំទាន់"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"តម្រូវឱ្យ​កែលម្អ​សុវត្ថិភាព និងប្រតិបត្តិការ"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"រៀបចំការដោះសោដោយប្រើស្នាមម្រាមដៃម្ដងទៀត"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"ការដោះសោ​ដោយស្កេន​ស្នាមម្រាមដៃ"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"រៀបចំការដោះសោ​ដោយស្កេន​ស្នាមម្រាមដៃ"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"ដើម្បីរៀបចំការដោះសោដោយប្រើស្នាមម្រាមដៃម្ដងទៀត គំរូ និងរូបភាពស្នាមម្រាមដៃបច្ចុប្បន្នរបស់អ្នកនឹងត្រូវបានលុប។\n\nបន្ទាប់ពីលុបគំរូនិងរូបភាពស្នាមម្រាមដៃទាំងនោះ អ្នកនឹងត្រូវរៀបចំការដោះសោដោយប្រើស្នាមម្រាមដៃម្ដងទៀត ដើម្បីដោះសោទូរសព្ទរបស់អ្នក ឬផ្ទៀងផ្ទាត់ថាជាអ្នក។"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"ដើម្បីរៀបចំការដោះសោដោយប្រើស្នាមម្រាមដៃម្ដងទៀត គំរូ និងរូបភាពស្នាមម្រាមដៃបច្ចុប្បន្នរបស់អ្នកនឹងត្រូវបានលុប។\n\nបន្ទាប់ពីលុបគំរូនិងរូបភាពស្នាមម្រាមដៃទាំងនោះ អ្នកនឹងត្រូវរៀបចំការដោះសោដោយប្រើស្នាមម្រាមដៃម្ដងទៀត ដើម្បីដោះសោទូរសព្ទរបស់អ្នក ឬផ្ទៀងផ្ទាត់ថាជាអ្នក។"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"មិនអាចរៀបចំការដោះសោដោយប្រើស្នាមម្រាមដៃបានទេ។ សូមចូលទៅកាន់​ការកំណត់​ ដើម្បីព្យាយាមម្ដងទៀត។"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"រៀបចំ​ការដោះសោតាមទម្រង់មុខ​ម្ដងទៀត"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"ការដោះ​សោ​ដោយស្កេន​មុខ"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"រៀបចំ​ការដោះសោ​ដោយស្កេនមុខ"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"ដើម្បីរៀបចំ​ដោះសោតាមទម្រង់មុខ​ម្ដងទៀត គំរូមុខបច្ចុប្បន្ន​របស់អ្នក​នឹងត្រូវបានលុប។\n\nអ្នកនឹងត្រូវ​រៀបចំមុខងារនេះ​ម្ដងទៀត ដើម្បីប្រើមុខរបស់អ្នក​សម្រាប់ដោះសោទូរសព្ទរបស់អ្នក។"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"មិនអាច​រៀបចំ​ការដោះសោតាមទម្រង់មុខបានទេ។ សូមចូលទៅកាន់​ការកំណត់​ ដើម្បីព្យាយាមម្ដងទៀត។"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"ប៉ះ​ឧបករណ៍​ចាប់ស្នាម​ម្រាមដៃ"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"សូមចុចរូបដោះសោ ដើម្បីបន្ត"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"មិនអាចសម្គាល់មុខបានទេ។ សូមប្រើស្នាមម្រាមដៃជំនួសវិញ។"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"សំឡេង"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"កាស"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"បញ្ចូល"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"ឧបករណ៍​ជំនួយការ​ស្ដាប់"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ឧបករណ៍ជំនួយការស្ដាប់"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"កំពុង​បើក..."</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"បង្វិល​ស្វ័យ​ប្រវត្តិ"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"បង្វិលអេក្រង់ស្វ័យប្រវត្តិ"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"បានដោះសោដោយប្រើមុខ"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"បានស្គាល់មុខ"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"អូសឡើងលើ ដើម្បី​ព្យាយាម​ម្ដងទៀត"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"អូសឡើងលើ ដើម្បីសាកល្បងប្រើការដោះ​សោ​ដោយស្កេន​មុខម្ដងទៀត"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"ដោះសោ ដើម្បីប្រើ NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"ឧបករណ៍​នេះគឺជា​កម្មសិទ្ធិរបស់​ស្ថាប័ន​អ្នក"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"ឧបករណ៍នេះ​គឺជា​កម្មសិទ្ធិ​របស់ <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"យកអ្នកប្រើចេញ?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"កម្មវិធី និងទិន្នន័យទាំងអស់របស់អ្នកប្រើនេះនឹងត្រូវបានលុប។"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"ដកចេញ"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> នឹងមានសិទ្ធិ​ចូលប្រើ​ព័ត៌មាន​ទាំងអស់​ដែលអាច​មើលឃើញ​នៅលើ​អេក្រង់​របស់អ្នក ឬដែលចាក់​ពីឧបករណ៍​របស់អ្នក នៅពេល​កំពុង​ថត ឬភ្ជាប់។ ព័ត៌មាន​នេះមាន​ដូចជា ពាក្យសម្ងាត់ ព័ត៌មាន​លម្អិត​អំពីការទូទាត់​ប្រាក់ រូបថត សារ និង​សំឡេង​ដែល​អ្នកចាក់​ជាដើម។"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"សេវាកម្មដែល​ផ្ដល់​មុខងារ​នេះ​នឹងមាន​សិទ្ធិ​ចូលប្រើ​ព័ត៌មាន​ទាំងអស់​ដែល​អាច​មើលឃើញ​នៅលើ​អេក្រង់​របស់អ្នក ឬ​ដែលចាក់​ពីឧបករណ៍​របស់អ្នក នៅពេល​កំពុង​ថត ឬភ្ជាប់។ ព័ត៌មាន​នេះមាន​ដូចជា ពាក្យសម្ងាត់ ព័ត៌មាន​លម្អិត​អំពីការទូទាត់​ប្រាក់ រូបថត សារ និង​សំឡេង​ដែល​អ្នកចាក់​ជាដើម។"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"ចាប់ផ្ដើម​ថត ឬភ្ជាប់​មែនទេ?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"ចាប់ផ្ដើម​ថត ឬភ្ជាប់​ដោយប្រើ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ឬ?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"អនុញ្ញាតឱ្យ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ចែករំលែក ឬថត?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"អេក្រង់ទាំងមូល"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"កម្មវិធីតែមួយ"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"នៅពេលអ្នកកំពុងចែករំលែក ថត ឬបញ្ជូន <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> មានសិទ្ធិចូលប្រើប្រាស់អ្វីៗដែលបង្ហាញឱ្យឃើញនៅលើអេក្រង់របស់អ្នក ឬលេងនៅលើឧបករណ៍របស់អ្នក។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះពាក្យសម្ងាត់ ព័ត៌មាន​លម្អិតអំពី​ការ​ទូទាត់ប្រាក់ សារ ឬព័ត៌មានរសើបផ្សេងទៀត។"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"នៅពេលអ្នកកំពុងចែករំលែក ថត ឬបញ្ជូនកម្មវិធី <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> មានសិទ្ធិចូលប្រើប្រាស់អ្វីៗដែលបង្ហាញ ឬលេងនៅលើកម្មវិធីនោះ។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះពាក្យសម្ងាត់ ព័ត៌មាន​លម្អិតអំពី​ការ​ទូទាត់ប្រាក់ សារ ឬព័ត៌មានរសើបផ្សេងទៀត។"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"បន្ត"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"ចែករំលែក ឬថតកម្មវិធី"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"អនុញ្ញាតកម្មវិធីនេះឱ្យចែករំលែក ឬថតឬ?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"នៅពេលអ្នក​កំពុងចែករំលែក ថត ឬបញ្ជូន កម្មវិធីនេះ​មានសិទ្ធិចូលប្រើប្រាស់អ្វីៗ​ដែលបង្ហាញឱ្យឃើញនៅលើ​អេក្រង់របស់អ្នក ឬលេងនៅលើឧបករណ៍របស់អ្នក។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះពាក្យសម្ងាត់ ព័ត៌មាន​លម្អិតអំពី​ការ​ទូទាត់ប្រាក់ សារ ឬព័ត៌មានរសើបផ្សេងទៀត។"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"នៅពេលអ្នក​កំពុងចែករំលែក ថត ឬបញ្ជូន​កម្មវិធី កម្មវិធីនេះ​មានសិទ្ធិចូលប្រើប្រាស់អ្វីៗ​ដែលបង្ហាញ ឬលេងនៅលើ​កម្មវិធីនោះ។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះ​ពាក្យសម្ងាត់ ព័ត៌មានលម្អិតអំពីការទូទាត់ប្រាក់ សារ ឬព័ត៌មានរសើប​ផ្សេងទៀត។"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> នឹងមានសិទ្ធិ​ចូលប្រើ​ព័ត៌មាន​ទាំងអស់​ដែលអាច​មើលឃើញ​នៅលើ​អេក្រង់​របស់អ្នក ឬចាក់​ពីឧបករណ៍​របស់អ្នក នៅពេល​កំពុង​ថត ឬភ្ជាប់។ ព័ត៌មាន​នេះមាន​ដូចជា ពាក្យសម្ងាត់ ព័ត៌មាន​លម្អិត​អំពីការទូទាត់​ប្រាក់ រូបថត សារ និង​សំឡេង​ដែល​អ្នកចាក់​ជាដើម។"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"ចាប់ផ្ដើម​ថត ឬភ្ជាប់​មែនទេ?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"សេវាកម្មដែលផ្ដល់មុខងារនេះ​នឹងមានសិទ្ធិ​ចូលប្រើ​ព័ត៌មាន​ទាំងអស់​ដែលអាច​មើលឃើញ​នៅលើ​អេក្រង់​របស់អ្នក ឬចាក់​ពីឧបករណ៍​របស់អ្នក នៅពេល​កំពុង​ថត ឬភ្ជាប់។ ព័ត៌មាន​នេះមាន​ដូចជា ពាក្យសម្ងាត់ ព័ត៌មាន​លម្អិត​អំពីការទូទាត់​ប្រាក់ រូបថត សារ និង​សំឡេង​ដែល​អ្នកចាក់​ជាដើម។"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"អេក្រង់ទាំងមូល"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"កម្មវិធីតែមួយ"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"ចែករំលែក ឬថតកម្មវិធី"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"ចាប់ផ្ដើម​ថត ឬភ្ជាប់​ដោយប្រើ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ឬ?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"នៅពេលអ្នកកំពុងចែករំលែក ថត ឬភ្ជាប់, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> មានសិទ្ធិចូលប្រើអ្វីៗដែលអាចមើលឃើញនៅលើអេក្រង់របស់អ្នក ឬចាក់នៅលើឧបករណ៍របស់អ្នក។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះអ្វីៗដូចជា ពាក្យសម្ងាត់ ព័ត៌មានលម្អិតអំពីការទូទាត់ប្រាក់ សារ រូបថត ព្រមទាំងសំឡេង និងវីដេអូ។"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"នៅពេលអ្នកកំពុងចែករំលែក ថត ឬភ្ជាប់កម្មវិធី, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> មានសិទ្ធិចូលប្រើអ្វីៗដែលបង្ហាញ ឬចាក់នៅលើកម្មវិធីនោះ។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះអ្វីៗដូចជា ពាក្យសម្ងាត់ ព័ត៌មានលម្អិតអំពីការទូទាត់ប្រាក់ សារ រូបថត ព្រមទាំងសំឡេង និងវីដេអូ។"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"ចាប់ផ្ដើម"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"ចាប់ផ្តើមភ្ជាប់ឬ?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"នៅពេលអ្នក​កំពុងភ្ជាប់, Android មានសិទ្ធិចូលប្រើអ្វីៗដែលអាចមើលឃើញនៅលើ​អេក្រង់របស់អ្នក ឬចាក់នៅលើឧបករណ៍របស់អ្នក។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះអ្វីៗដូចជា ពាក្យសម្ងាត់ ព័ត៌មានលម្អិតអំពីការទូទាត់ប្រាក់ សារ រូបថត ព្រមទាំងសំឡេង និងវីដេអូ។"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"នៅពេលអ្នក​កំពុងភ្ជាប់កម្មវិធី, Android មានសិទ្ធិចូលប្រើអ្វីៗដែលបង្ហាញ ឬចាក់នៅលើកម្មវិធីនោះ។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះអ្វីៗដូចជា ពាក្យសម្ងាត់ ព័ត៌មានលម្អិតអំពីការទូទាត់ប្រាក់ សារ រូបថត ព្រមទាំងសំឡេង និងវីដេអូ។"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"ចាប់ផ្តើមភ្ជាប់"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"ចាប់ផ្ដើម​ចែករំលែកឬ?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"នៅពេលអ្នកកំពុងចែករំលែក ថត ឬភ្ជាប់, Android មានសិទ្ធិចូលប្រើអ្វីៗដែលអាចមើលឃើញនៅលើអេក្រង់របស់អ្នក ឬចាក់នៅលើឧបករណ៍របស់អ្នក។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះអ្វីៗដូចជា ពាក្យសម្ងាត់ ព័ត៌មានលម្អិតអំពីការទូទាត់ប្រាក់ សារ រូបថត ព្រមទាំងសំឡេង និងវីដេអូ។"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"នៅពេលអ្នកកំពុងចែករំលែក ថត ឬភ្ជាប់កម្មវិធី, Android មានសិទ្ធិចូលប្រើអ្វីៗដែលបង្ហាញ ឬចាក់នៅលើកម្មវិធីនោះ។ ដូច្នេះ សូមប្រុងប្រយ័ត្នចំពោះអ្វីៗដូចជា ពាក្យសម្ងាត់ ព័ត៌មានលម្អិតអំពីការទូទាត់ប្រាក់ សារ រូបថត ព្រមទាំងសំឡេង និងវីដេអូ។"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"ចាប់ផ្ដើម"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"ការចែករំលែក​ផ្អាក នៅពេលដែល​អ្នកប្ដូរ​កម្មវិធី"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"ចែករំលែក​កម្មវិធីនេះ​ជំនួសវិញ"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"ប្ដូរទៅវិញ"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"ការប្ដូរ​កម្មវិធី"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"បានទប់ស្កាត់ដោយអ្នកគ្រប់គ្រង​ផ្នែកព័ត៌មានវិទ្យា​របស់អ្នក"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"ការថតអេក្រង់ត្រូវបានបិទ​ដោយគោលការណ៍ឧបករណ៍"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"សម្អាត​ទាំងអស់"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"បាន​ដំឡើង​អាជ្ញាធរវិញ្ញាបនបត្រ​នៅលើ​ឧបករណ៍​នេះ។ ចរាចរណ៍​បណ្តាញដែលមានសុវត្ថិភាព​របស់អ្នក​អាច​ត្រូវបាន​តាមដាន ឬ​កែសម្រួល។"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"អ្នក​គ្រប់គ្រង​របស់អ្នក​បាន​បើក​ការ​ធ្វើ​កំណត់ហេតុ​បណ្តាញ​ ដែល​នឹង​តាមដាន​ចរាចរណ៍​នៅលើ​ឧបករណ៍​របស់អ្នក។"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"អ្នកគ្រប់គ្រង​របស់អ្នក​បានបើក​ការធ្វើ​កំណត់ហេតុ​បណ្តាញ ដែល​តាមដាន​ចរាចរណ៍​នៅក្នុងកម្រងព័ត៌មាន​ការងាររបស់អ្នក ប៉ុន្តែមិនតាមដាន​នៅក្នុងកម្រងព័ត៌មានផ្ទាល់ខ្លួន​របស់អ្នកឡើយ។"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"ឧបករណ៍នេះត្រូវបានភ្ជាប់អ៊ីនធឺណិតតាមរយៈ <xliff:g id="VPN_APP">%1$s</xliff:g>។ អ្នកគ្រប់គ្រង​ផ្នែកព័ត៌មានវិទ្យារបស់អ្នកអាចមើលឃើញសកម្មភាពបណ្ដាញរបស់អ្នក រួមទាំងអ៊ីមែល និងទិន្នន័យរុករកផងដែរ។"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"ឧបករណ៍នេះត្រូវបានភ្ជាប់អ៊ីនធឺណិតតាមរយៈ <xliff:g id="VPN_APP">%1$s</xliff:g>។ ក្រុមហ៊ុន​ផ្តល់សេវា VPN អាចមើលឃើញសកម្មភាពបណ្ដាញរបស់អ្នក រួមទាំងអ៊ីមែល និងទិន្នន័យរុករកផងដែរ។"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"ឧបករណ៍នេះត្រូវបានភ្ជាប់អ៊ីនធឺណិតតាមរយៈ <xliff:g id="VPN_APP">%1$s</xliff:g>។ អ្នកគ្រប់គ្រង​ផ្នែកព័ត៌មានវិទ្យារបស់អ្នកអាចមើលឃើញសកម្មភាពបណ្ដាញរបស់អ្នក រួមទាំងអ៊ីមែល និងទិន្នន័យរុករកផងដែរ។"</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"ឧបករណ៍នេះត្រូវបានភ្ជាប់អ៊ីនធឺណិតតាមរយៈ <xliff:g id="VPN_APP_0">%1$s</xliff:g> និង <xliff:g id="VPN_APP_1">%2$s</xliff:g>។ អ្នកគ្រប់គ្រង​ផ្នែកព័ត៌មានវិទ្យារបស់អ្នកអាចមើលឃើញសកម្មភាពបណ្ដាញរបស់អ្នក រួមទាំងអ៊ីមែល និងទិន្នន័យរុករកផងដែរ។"</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"កម្មវិធី​ការងាររបស់អ្នកត្រូវបានភ្ជាប់អ៊ីនធឺណិតតាមរយៈ <xliff:g id="VPN_APP">%1$s</xliff:g>។ អ្នកគ្រប់គ្រង​ផ្នែកព័ត៌មានវិទ្យា និងក្រុមហ៊ុន​ផ្តល់សេវា VPN របស់អ្នកអាចមើលឃើញសកម្មភាពបណ្ដាញរបស់អ្នកនៅក្នុងកម្មវិធី​ការងារ រួមទាំងអ៊ីមែល និងទិន្នន័យរុករកផងដែរ។"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"កម្មវិធី​ផ្ទាល់ខ្លួនរបស់អ្នកត្រូវបានភ្ជាប់អ៊ីនធឺណិតតាមរយៈ <xliff:g id="VPN_APP">%1$s</xliff:g>។ ក្រុមហ៊ុន​ផ្តល់សេវា VPN របស់អ្នកអាចមើលឃើញសកម្មភាពបណ្ដាញរបស់អ្នក រួមទាំងអ៊ីមែល និងទិន្នន័យរុករកផងដែរ។"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"បិទ"</string>
     <string name="sound_settings" msgid="8874581353127418308">"សំឡេង និងការញ័រ"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ការកំណត់"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"បានបន្ថយទៅកម្រិតសំឡេង​ដែលកាន់តែមានសុវត្ថិភាព"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"កម្រិតសំឡេងខ្ពស់​ក្នុងរយៈពេលយូរជាងកម្រិត​ដែលបានណែនាំ"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"បានបន្ថយកម្រិតសំឡេងមកកម្រិតដែលកាន់តែមានសុវត្ថិភាព"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"កម្រិតសំឡេងកាសមានកម្រិតខ្ពស់យូរជាងរយៈពេលដែលបានណែនាំ"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"កម្រិតសំឡេងកាសបានលើសដែនកំណត់សុវត្ថិភាពសម្រាប់សប្ដាហ៍នេះ"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"បន្តស្ដាប់"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"បន្ថយ​កម្រិតសំឡេង"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"កម្មវិធី​ត្រូវបានខ្ទាស់"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"វា​នឹង​នៅតែ​បង្ហាញ រហូត​ទាល់​តែ​អ្នក​ដក​ការដៅ។ សូម​សង្កត់​ប៊ូតុង​ថយ​ក្រោយ និង​ប៊ូតុង​ទិដ្ឋភាពរួម​ឲ្យ​ជាប់ ដើម្បី​ដក​ការ​ដៅ។"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"វា​នឹង​នៅតែ​បង្ហាញ រហូត​ទាល់​តែ​អ្នក​ដក​ការដៅ។ សូម​ចុចប៊ូតុង​ថយក្រោយ និងប៊ូតុង​ទំព័រដើម​ឱ្យ​ជាប់ ដើម្បី​ដក​ការ​ដៅ។"</string>
@@ -622,7 +652,7 @@
     <string name="keyboard_shortcut_group_system_switch_input" msgid="952555530383268166">"ប្ដូរប្លង់ក្ដារចុច"</string>
     <string name="keyboard_shortcut_clear_text" msgid="4679927133259287577">"សម្អាតអក្សរ"</string>
     <string name="keyboard_shortcut_search_list_title" msgid="1156178106617830429">"ផ្លូវកាត់"</string>
-    <string name="keyboard_shortcut_search_list_hint" msgid="5982623262974326746">"ផ្លូវកាត់ម៉ាស៊ីនស្វែងរក"</string>
+    <string name="keyboard_shortcut_search_list_hint" msgid="5982623262974326746">"ស្វែងរកផ្លូវកាត់"</string>
     <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"រកផ្លូវកាត់មិនឃើញទេ"</string>
     <string name="keyboard_shortcut_search_category_system" msgid="1151182120757052669">"ប្រព័ន្ធ"</string>
     <string name="keyboard_shortcut_search_category_input" msgid="5440558509904296233">"បញ្ចូល"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"ម៉ឺនុយ​ថាមពល"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"ទំព័រ <xliff:g id="ID_1">%1$d</xliff:g> នៃ <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"អេក្រង់​ចាក់សោ"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"ទូរសព្ទ​បាន​បិទដោយសារ​វា​ឡើងកម្តៅ"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"ឥឡូវនេះ ទូរសព្ទ​របស់អ្នក​កំពុងដំណើរការ​ជាធម្មតា។\nសូមចុច​ដើម្បីទទួលបាន​ព័ត៌មានបន្ថែម"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"ទូរសព្ទ​របស់អ្នក​ក្តៅពេក ដូច្នេះ​វាបាន​បិទ​ដើម្បី​បន្ថយ​កម្តៅ។ ឥឡូវនេះ ​ទូរសព្ទ​របស់អ្នក​កំពុង​ដំណើរការ​ធម្មតា។\n\nទូរសព្ទ​របស់អ្នក​អាចនឹង​ឡើង​កម្តៅ​ខ្លាំងជ្រុល ប្រសិន​បើអ្នក៖\n	• ប្រើប្រាស់​កម្មវិធី​ដែល​ប្រើប្រាស់ទិន្នន័យច្រើនក្នុងរយៈពេលខ្លី (ដូចជាហ្គេម វីដេអូ ឬកម្មវិធីរុករក)\n	• ទាញយក ឬ​បង្ហោះ​ឯកសារដែលមានទំហំធំ\n	• ប្រើប្រាស់​ទូរសព្ទ​របស់អ្នក​នៅកន្លែង​មានសីតុណ្ហភាព​ខ្ពស់"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"មើលជំហាន​ថែទាំ"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"ទូរសព្ទ​នេះ​កំពុង​កើន​កម្តៅ"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"មុខងារ​មួយចំនួន​នឹងមិនអាច​ប្រើបានពេញលេញ​នោះទេ ខណៈពេល​ដែលទូរសព្ទ​កំពុងបញ្ចុះកម្ដៅ។\nសូមចុច​ដើម្បីទទួលបាន​ព័ត៌មានបន្ថែម"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"ទូរសព្ទ​របស់អ្នក​នឹង​ព្យាយាម​បញ្ចុះ​កម្តៅ​ដោយ​ស្វ័យប្រវត្តិ។ អ្នក​នៅតែ​អាច​ប្រើ​ទូរសព្ទ​របស់អ្នក​បាន​ដដែល​ ប៉ុន្តែ​វា​នឹង​ដំណើរ​ការ​យឺត​ជាង​មុន។\n\nបន្ទាប់​ពី​ទូរសព្ទ​របស់អ្នក​ត្រជាក់​ជាង​មុន​ហើយ វា​នឹង​ដំណើរការ​ដូច​ធម្មតា។"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"មើលជំហាន​ថែទាំ"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"ដកឧបករណ៍របស់អ្នក"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"ឧបករណ៍របស់អ្នកកំពុងឡើងកម្ដៅនៅជិតរន្ធសាកថ្ម។ ប្រសិនបើឧបករណ៍នេះត្រូវបានភ្ជាប់ទៅឆ្នាំង​សាក ឬគ្រឿងបរិក្ខារ USB សូមដកវា និងមានការប្រុងប្រយ័ត្ន ដោយសារខ្សែក៏អាចក្ដៅផងដែរ។"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ពង្រីក​ពេញអេក្រង់"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ពង្រីក​ផ្នែកនៃ​អេក្រង់"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"បើកការកំណត់​ការពង្រីក"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"បិទការកំណត់ការពង្រីក"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"អូសជ្រុងដើម្បីប្ដូរទំហំ"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"អនុញ្ញាត​ការរំកិលបញ្ឆិត"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"ប្ដូរ​ទំហំ"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ដកចេញ​ពី​សំណព្វ"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"ផ្លាស់ទី​ទៅតាំងទី <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"ការគ្រប់គ្រង"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"ជ្រើសរើស​ផ្ទាំងគ្រប់គ្រងឧបករណ៍ ដើម្បីចូលប្រើរហ័ស"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"ចុច​ឱ្យ​ជាប់ រួចអូស​ដើម្បី​រៀបចំ​ផ្ទាំងគ្រប់គ្រង​ឡើងវិញ"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"បាន​ដកផ្ទាំងគ្រប់គ្រងទាំងអស់ហើយ"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"មិនបាន​រក្សាទុក​ការផ្លាស់ប្ដូរទេ"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"សាកល្បងប្រើ​កូដ PIN ផ្សេងទៀត"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"បញ្ជាក់​ការផ្លាស់ប្ដូរ​សម្រាប់ <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"អូសដើម្បី​មើលច្រើនទៀត"</string>
+    <string name="retry_face" msgid="416380073082560186">"សាកល្បងការផ្ទៀងផ្ទាត់មុខម្តងទៀត"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"កំពុងផ្ទុក​ការណែនាំ"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"មេឌៀ"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"លាក់ផ្ទាំង​គ្រប់គ្រង​មេឌៀនេះសម្រាប់ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"ការកំណត់"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ច្រៀងដោយ <xliff:g id="ARTIST_NAME">%2$s</xliff:g> កំពុងចាក់ពី <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> នៃ <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> កំពុង​ដំណើរការ"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"ចាក់"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"ផ្អាក"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"ចម្រៀងមុន"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"ឧបករណ៍បំពងសំឡេង និងផ្ទាំងអេក្រង់"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"ឧបករណ៍​ដែលបានណែនាំ"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"បញ្ឈប់វគ្គដែលអ្នក​បានចែករំលែក ដើម្បីផ្លាស់ទីមេឌៀ​ទៅឧបករណ៍​ផ្សេងទៀត"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"បញ្ឈប់"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"របៀបដែលការផ្សាយដំណើរការ"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"ការ​ផ្សាយ"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"មនុស្សនៅជិត​អ្នកដែលមាន​ឧបករណ៍ប៊្លូធូស​ត្រូវគ្នា​អាចស្តាប់​មេឌៀ​ដែលអ្នកកំពុងផ្សាយបាន"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"មិនអាច​រក្សាទុក​បានទេ។ សូមព្យាយាមម្ដងទៀត។"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"មិនអាច​រក្សាទុក​បានទេ។"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"ប្រើយ៉ាងហោចណាស់ 4 តួអក្សរ"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"ប្រើតិចជាង 16 តួអក្សរ"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"ប្រើតិចជាង <xliff:g id="LENGTH">%1$d</xliff:g> តួអក្សរ"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"លេខ​កំណែបង្កើត"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"បានចម្លងលេខ​កំណែបង្កើតទៅឃ្លីបបត។"</string>
     <string name="basic_status" msgid="2315371112182658176">"បើកការសន្ទនា"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"មានបញ្ហាក្នុង​ការអាន​ឧបករណ៍រង្វាស់កម្រិតថ្មរបស់អ្នក"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"ចុចដើម្បីទទួលបាន​ព័ត៌មានបន្ថែម"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"មិនបាន​កំណត់​ម៉ោងរោទ៍​ទេ"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"បញ្ចូលព័ត៌មានផ្ទៀងផ្ទាត់សម្រាប់ការចាក់សោអេក្រង់"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"ឧបករណ៍​ចាប់ស្នាមម្រាមដៃ"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"ផ្ទៀងផ្ទាត់"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"បញ្ចូល​ឧបករណ៍"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Google Assistant កំពុងស្តាប់"</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="note_task_button_label" msgid="8718616095800343136">"ការកត់ត្រា​"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"ការកត់ត្រា"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"ការកត់ត្រា, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"ស្វែងយល់បន្ថែម"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"ស្វែងយល់​បន្ថែម​តាមរយៈ <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"បើក <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• កម្មវិធីត្រូវបានរៀបចំ"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• កាតយ៉ាងតិចមួយត្រូវបានបញ្ចូលទៅក្នុង Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• ដំឡើងកម្មវិធីកាមេរ៉ា"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• កម្មវិធីត្រូវបានរៀបចំ"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• ឧបករណ៍យ៉ាងតិចមួយអាចប្រើបាន"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"ដើម្បីបញ្ចូល​កម្មវិធី Wallet ជាផ្លូវកាត់ សូមប្រាកដថា​កម្មវិធីត្រូវបានដំឡើង"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"ដើម្បីបញ្ចូល​កម្មវិធី Wallet ជាផ្លូវកាត់ សូមប្រាកដថា​បានបញ្ចូលកាត​យ៉ាងហោចណាស់មួយ"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"ដើម្បីបញ្ចូលកម្មវិធី​ស្កេនកូដ QR ជាផ្លូវកាត់ សូមប្រាកដថា​កម្មវិធីកាមេរ៉ាត្រូវបានដំឡើង"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"ដើម្បីបញ្ចូល​កម្មវិធី Home ជាផ្លូវកាត់ សូមប្រាកដថា​កម្មវិធីត្រូវបានដំឡើង"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• ឧបករណ៍យ៉ាងតិចមួយអាចប្រើបាន"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"ជ្រើសរើសកម្មវិធីកំណត់ចំណាំលំនាំដើម ដើម្បីប្រើផ្លូវកាត់សម្រាប់ការកត់ចំណាំ"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"ជ្រើសរើសកម្មវិធី"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"ចុចឱ្យជាប់លើផ្លូវកាត់"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"បោះបង់"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"ប្ដូរអេក្រង់ឥឡូវនេះ"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"ភ្ជាប់ប៊ិករបស់អ្នកជាមួយឆ្នាំងសាក"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"ថ្មប៊ិកនៅសល់តិច"</string>
     <string name="video_camera" msgid="7654002575156149298">"កាមេរ៉ា​វីដេអូ"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"មិនអាចហៅទូរសព្ទពីកម្រងព័ត៌មាននេះបានទេ"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"គោលការណ៍ការងាររបស់អ្នកអនុញ្ញាតឱ្យអ្នកធ្វើការហៅទូរសព្ទបានតែពីកម្រងព័ត៌មានការងារប៉ុណ្ណោះ"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"មិនអាច​ហៅទូរសព្ទ​ពីកម្មវិធី​ផ្ទាល់ខ្លួន​បានទេ"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"ស្ថាប័ន​របស់អ្នក​អនុញ្ញាត​ឱ្យអ្នកធ្វើការហៅទូរសព្ទ​ពីកម្មវិធីការងារ​តែប៉ុណ្ណោះ"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"ប្ដូរ​ទៅ​កម្រង​ព័ត៌មាន​ការងារ"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"បិទ"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"ដំឡើងកម្មវិធីទូរសព្ទសម្រាប់ការងារ"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"បោះបង់"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"ប្ដូរអេក្រង់ចាក់សោ​តាមបំណង"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"ដោះសោ ដើម្បីប្ដូរអេក្រង់ចាក់សោតាមបំណង"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"មិនមាន Wi-Fi ទេ"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"មុខងារ​អាទិភាពត្រូវបានបើក"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"ភាពប្រុងប្រៀប​របស់ Google Assistant ត្រូវបានបើក"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"កំណត់កម្មវិធីកំណត់ចំណាំលំនាំដើមនៅក្នុងការកំណត់"</string>
+    <string name="install_app" msgid="5066668100199613936">"ដំឡើង​កម្មវិធី"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"មីក្រូហ្វូន និងកាមេរ៉ា"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"ការប្រើប្រាស់កម្មវិធីថ្មីៗនេះ"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"មើលការចូលប្រើនាពេលថ្មីៗនេះ"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"រួចរាល់"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"ពង្រីក និង​បង្ហាញ​ជម្រើស​នានា"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"បង្រួម"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"បិទកម្មវិធីនេះ"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> ត្រូវ​បាន​បិទ"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"គ្រប់គ្រង​សេវាកម្ម"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"គ្រប់គ្រង​សិទ្ធិចូលប្រើ"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"កំពុងប្រើដោយការហៅទូរសព្ទ"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"បានប្រើនាពេលថ្មីៗនេះនៅក្នុងការហៅទូរសព្ទ"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"កំពុងប្រើដោយ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"បានប្រើនាពេលថ្មីៗនេះដោយ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"កំពុងប្រើដោយ <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"បានប្រើនាពេលថ្មីៗនេះដោយ <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"កំពុងប្រើដោយ <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"បានប្រើនាពេលថ្មីៗនេះដោយ <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-km/strings_tv.xml b/packages/SystemUI/res/values-km/strings_tv.xml
deleted file mode 100644
index 1be9d48..0000000
--- a/packages/SystemUI/res/values-km/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN ត្រូវបានភ្ជាប់"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN ត្រូវបានផ្ដាច់"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"តាម​រយៈ <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"ការ​ជូនដំណឹង"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"គ្មាន​ការជូនដំណឹងទេ"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"មីក្រូហ្វូនកំពុងថត"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"កាមេរ៉ាកំពុងថត"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"កាមេរ៉ា និងមីក្រូហ្វូនកំពុងថត"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"មីក្រូហ្វូនបានឈប់ថត"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"កាមេរ៉ាបានឈប់ថត"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"កាមេរ៉ា និងមីក្រូហ្វូនបានឈប់ថត"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"មុខងារថតវីដេអូអេក្រង់​បាន​ចាប់ផ្ដើម"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"មុខងារថតវីដេអូអេក្រង់​​បាន​បញ្ឈប់"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index b0193f0..0a2bb64 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"ಈ ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಅನ್ನು <xliff:g id="APPNAME">%1$s</xliff:g> ಪತ್ತೆಹಚ್ಚಿದೆ."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> ಹಾಗೂ ತೆರೆದಿರುವ ಇತರ ಆ್ಯಪ್‌ಗಳು ಈ ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಅನ್ನು ಪತ್ತೆಹಚ್ಚಿವೆ."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"ಟಿಪ್ಪಣಿಗೆ ಸೇರಿಸಿ"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡರ್"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡರ್"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಆಗುತ್ತಿದೆ"</string>
-    <string name="screenrecord_channel_description" msgid="4147077128486138351">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಸೆಶನ್‌ಗಾಗಿ ಚಾಲ್ತಿಯಲ್ಲಿರುವ ಅಧಿಸೂಚನೆ"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭಿಸಬೇಕೆ?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"ರೆಕಾರ್ಡಿಂಗ್ ಸಮಯದಲ್ಲಿ, ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ಗೋಚರಿಸುವ ಅಥವಾ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪ್ಲೇ ಮಾಡಲಾದ ಸೂಕ್ಷ್ಮ ಮಾಹಿತಿಯನ್ನು Android ಸಿಸ್ಟಂ ಕ್ಯಾಪ್ಚರ್ ಮಾಡಬಹುದು. ಇದು ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ಮಾಹಿತಿ, ಫೋಟೋಗಳು, ಸಂದೇಶಗಳು ಮತ್ತು ಆಡಿಯೋವನ್ನು ಒಳಗೊಂಡಿದೆ."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"ಸಂಪೂರ್ಣ ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡ್ ಮಾಡಿ"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"ಒಂದೇ ಆ್ಯಪ್ ಅನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡಿ"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"ನೀವು ರೆಕಾರ್ಡ್ ಮಾಡುತ್ತಿರುವಾಗ, ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಮೇಲೆ ಕಾಣಿಸುವ ಅಥವಾ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪ್ಲೇ ಆಗುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ Android ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಹಾಗಾಗಿ, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು ಅಥವಾ ಇತರ ಸೂಕ್ಷ್ಮ ಮಾಹಿತಿಯ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"ನೀವು ಆ್ಯಪ್ ಅನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡುತ್ತಿರುವಾಗ, ಆ ಆ್ಯಪ್‌ನಲ್ಲಿ ತೋರಿಸಲಾಗುವ ಅಥವಾ ಪ್ಲೇ ಆಗುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ Android ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಹಾಗಾಗಿ, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು ಅಥವಾ ಇತರ ಸೂಕ್ಷ್ಮ ಮಾಹಿತಿಯ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭಿಸಿ"</string>
+    <string name="screenrecord_channel_description" msgid="4147077128486138351">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಸೆಶನ್‌ಗಾಗಿ ಚಾಲ್ತಿಯಲ್ಲಿರುವ ನೋಟಿಫಿಕೇಶನ್"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭಿಸಬೇಕೇ?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"ನೀವು ರೆಕಾರ್ಡಿಂಗ್ ಮಾಡುತ್ತಿರುವಾಗ, ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಮೇಲೆ ಕಾಣಿಸುವ ಅಥವಾ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪ್ಲೇ ಮಾಡುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ Android ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಆದ್ದರಿಂದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು, ಫೋಟೋಗಳು ಹಾಗೂ ಆಡಿಯೊ ಮತ್ತು ವೀಡಿಯೊದಂತಹ ವಿಷಯಗಳ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"ನೀವು ಆ್ಯಪ್ ಅನ್ನು ರೆಕಾರ್ಡಿಂಗ್ ಮಾಡುತ್ತಿರುವಾಗ, ಆ ಆ್ಯಪ್‌ನಲ್ಲಿ ತೋರಿಸುವ ಅಥವಾ ಪ್ಲೇ ಮಾಡುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ Android ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಆದ್ದರಿಂದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು, ಫೋಟೋಗಳು ಹಾಗೂ ಆಡಿಯೊ ಮತ್ತು ವೀಡಿಯೊದಂತಹ ವಿಷಯಗಳ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭಿಸಿ"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"ಆಡಿಯೋ ರೆಕಾರ್ಡ್‌ ಮಾಡಿ"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"ಸಾಧನದ ಆಡಿಯೋ"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"ನಿಮ್ಮ ಸಾಧನದ ಧ್ವನಿ ಉದಾ: ಸಂಗೀತ, ಕರೆಗಳು ಮತ್ತು ರಿಂಗ್‌ಟೋನ್‌ಗಳು"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"ಮೈಕ್ರೋಫೋನ್"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"ಸಾಧನ ಆಡಿಯೋ ಮತ್ತು ಮೈಕ್ರೊಫೋನ್"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"ಪ್ರಾರಂಭಿಸಿ"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"ಪ್ರಾರಂಭಿಸಿ"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"ಸ್ಕ್ರೀನ್ ಮತ್ತು ಆಡಿಯೋ ರೆಕಾರ್ಡಿಂಗ್"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"ಸ್ಪರ್ಶಗಳನ್ನು ಸ್ಕ್ರೀನ್ ಮೇಲೆ ತೋರಿಸಿ"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"ಹಂಚಿಕೊಳ್ಳಿ"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಉಳಿಸಲಾಗಿದೆ"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"ವೀಕ್ಷಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಅಳಿಸುವಾಗ ದೋಷ ಕಂಡುಬಂದಿದೆ"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಸೇವ್‌ ಮಾಡುವಾಗ ದೋಷ ಎದುರಾಗಿದೆ"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭಿಸುವಾಗ ದೋಷ ಕಂಡುಬಂದಿದೆ"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"ಪೂರ್ಣ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ವೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"ನಿರ್ಗಮಿಸಲು, ಮೇಲಿನಿಂದ ಕೆಳಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"ಅರ್ಥವಾಯಿತು"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"ಹಿಂದೆ"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"ಮುಖಪುಟ"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"ಮೆನು"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"ಮುಖವನ್ನು ದೃಢೀಕರಿಸಲಾಗಿದೆ"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"ದೃಢೀಕರಿಸಲಾಗಿದೆ"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"ಪೂರ್ಣಗೊಳಿಸಲು ದೃಢೀಕರಿಸಿ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ಮುಖವನ್ನು ಬಳಸಿ ಅನ್‌ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದುವರಿಯಲು ಅನ್‌ಲಾಕ್ ಐಕಾನ್ ಅನ್ನು ಒತ್ತಿ."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"ಮುಖದ ಮೂಲಕ ಅನ್‌ಲಾಕ್ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ಮುಖವನ್ನು ಬಳಸಿ ಅನ್‌ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದುವರಿಯಲು ಒತ್ತಿ."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ಮುಖ ಗುರುತಿಸಲಾಗಿದೆ. ಮುಂದುವರಿಯಲು ಒತ್ತಿ."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ಮುಖ ಗುರುತಿಸಲಾಗಿದೆ. ಮುಂದುವರಿಯಲು ಅನ್‌ಲಾಕ್ ಐಕಾನ್ ಅನ್ನು ಒತ್ತಿ."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ದೃಢೀಕರಿಸಲಾಗಿದೆ"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"ದೃಢೀಕರಣವನ್ನು ರದ್ದುಗೊಳಿಸಿ"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ಪಿನ್ ಬಳಸಿ"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ಪ್ಯಾಟರ್ನ್ ಬಳಸಿ"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"ಪಾಸ್‌ವರ್ಡ್ ಬಳಸಿ"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"ಮುಂದಿನ ಪ್ರಯತ್ನದಲ್ಲಿ ನೀವು ತಪ್ಪಾದ ಪ್ಯಾಟರ್ನ್ ನಮೂದಿಸಿದರೆ, ನಿಮ್ಮ ಉದ್ಯೋಗದ ಪ್ರೊಫೈಲ್ ಮತ್ತು ಡೇಟಾವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"ಮುಂದಿನ ಪ್ರಯತ್ನದಲ್ಲಿ ನೀವು ತಪ್ಪಾದ ಪಿನ್ ನಮೂದಿಸಿದರೆ, ನಿಮ್ಮ ಉದ್ಯೋಗದ ಪ್ರೊಫೈಲ್ ಮತ್ತು ಅದರ ಡೇಟಾವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"ಮುಂದಿನ ಪ್ರಯತ್ನದಲ್ಲಿ ನೀವು ತಪ್ಪಾದ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿದರೆ, ನಿಮ್ಮ ಉದ್ಯೋಗದ ಪ್ರೊಫೈಲ್ ಮತ್ತು ಅದರ ಡೇಟಾವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"ಸೆಟಪ್ ಮಾಡಿ"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"ಈಗ ಬೇಡ"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"ಇದು ಭದ್ರತೆ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸಲು ಅಗತ್ಯವಿದೆ"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಮತ್ತೊಮ್ಮೆ ಸೆಟಪ್ ಮಾಡಿ"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್‌ಲಾಕ್"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡಿ"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಮತ್ತೊಮ್ಮೆ ಸೆಟಪ್ ಮಾಡಲು, ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಚಿತ್ರಗಳು ಮತ್ತು ಮಾಡೆಲ್‌ಗಳನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ.\n\nಅವುಗಳನ್ನು ಅಳಿಸಿದ ನಂತರ, ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಲು ಅಥವಾ ಅದು ನೀವೇ ಎಂದು ದೃಢೀಕರಿಸುವುದಕ್ಕೆ ನಿಮ್ಮ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್ನು ಬಳಸಲು, ನೀವು ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಮತ್ತೊಮ್ಮೆ ಸೆಟಪ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಮತ್ತೊಮ್ಮೆ ಸೆಟಪ್ ಮಾಡಲು, ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಚಿತ್ರಗಳು ಮತ್ತು ಮಾಡೆಲ್ ಅನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ.\n\nಅವುಗಳನ್ನು ಅಳಿಸಿದ ನಂತರ, ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಲು ಅಥವಾ ಅದು ನೀವೇ ಎಂದು ದೃಢೀಕರಿಸುವುದಕ್ಕೆ ನಿಮ್ಮ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್ನು ಬಳಸಲು, ನೀವು ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಮತ್ತೊಮ್ಮೆ ಸೆಟಪ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಲು, ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಹೋಗಿ."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"ಫೇಸ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಮತ್ತೊಮ್ಮೆ ಸೆಟಪ್ ಮಾಡಿ"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"ಫೇಸ್ ಅನ್‌ಲಾಕ್"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"ಫೇಸ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡಿ"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"ಫೇಸ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಮತ್ತೊಮ್ಮೆ ಸೆಟಪ್ ಮಾಡಲು, ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಫೇಸ್ ಮಾಡೆಲ್ ಅನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ.\n\nನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡುವುದಕ್ಕೆ ನಿಮ್ಮ ಫೇಸ್ ಅನ್ನು ಬಳಸಲು ನೀವು ಈ ಫೀಚರ್ ಅನ್ನು ಮತ್ತೊಮ್ಮೆ ಸೆಟಪ್ ಮಾಡುವ ಅಗತ್ಯವಿದೆ."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"ಫೇಸ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಲು, ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಹೋಗಿ."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್‌‌ ಅನ್ನು ಸ್ಪರ್ಶಿಸಿ"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"ಮುಂದುವರಿಯಲು ಅನ್‌ಲಾಕ್ ಐಕಾನ್ ಅನ್ನು ಒತ್ತಿರಿ"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"ಮುಖ ಗುರುತಿಸಲಾಗುತ್ತಿಲ್ಲ ಬದಲಿಗೆ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಬಳಸಿ."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -203,7 +219,7 @@
     <string name="accessibility_desc_close" msgid="8293708213442107755">"ಮುಚ್ಚು"</string>
     <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ಸಂಪೂರ್ಣ ನಿಶ್ಯಬ್ಧ"</string>
     <string name="accessibility_quick_settings_dnd_alarms_on" msgid="3375848309132140014">"ಅಲಾರಮ್‌ಗಳು ಮಾತ್ರ"</string>
-    <string name="accessibility_quick_settings_dnd" msgid="2415967452264206047">"ಅಡಚಣೆ ಮಾಡಬೇಡ."</string>
+    <string name="accessibility_quick_settings_dnd" msgid="2415967452264206047">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="8250942386687551283">"ಬ್ಲೂಟೂತ್."</string>
     <string name="accessibility_quick_settings_bluetooth_on" msgid="3819082137684078013">"ಬ್ಲೂಟೂತ್ ಆನ್ ಆಗಿದೆ."</string>
     <string name="accessibility_quick_settings_alarm" msgid="558094529584082090">"<xliff:g id="TIME">%s</xliff:g> ಗಂಟೆಗೆ ಅಲಾರಮ್ ಹೊಂದಿಸಲಾಗಿದೆ."</string>
@@ -219,20 +235,20 @@
     <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>
-    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{ಇನ್ನೂ # ಅಧಿಸೂಚನೆ ಒಳಗಿದೆ.}one{ಇನ್ನೂ # ಅಧಿಸೂಚನೆಗಳು ಒಳಗಿವೆ.}other{ಇನ್ನೂ # ಅಧಿಸೂಚನೆಗಳು ಒಳಗಿವೆ.}}"</string>
+    <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>
     <string name="start_dreams" msgid="9131802557946276718">"ಸ್ಕ್ರೀನ್ ಸೇವರ್"</string>
     <string name="ethernet_label" msgid="2203544727007463351">"ಇಥರ್ನೆಟ್"</string>
-    <string name="quick_settings_dnd_label" msgid="7728690179108024338">"ಅಡಚಣೆ ಮಾಡಬೇಡ"</string>
+    <string name="quick_settings_dnd_label" msgid="7728690179108024338">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ"</string>
     <string name="quick_settings_bluetooth_label" msgid="7018763367142041481">"ಬ್ಲೂಟೂತ್‌"</string>
     <string name="quick_settings_bluetooth_detail_empty_text" msgid="5760239584390514322">"ಯಾವುದೇ ಜೋಡಿಸಲಾದ ಸಾಧನಗಳು ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> ಬ್ಯಾಟರಿ"</string>
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ಆಡಿಯೋ"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ಹೆಡ್‌ಸೆಟ್"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ಇನ್‌ಪುಟ್"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"ಶ್ರವಣ ಸಾಧನಗಳು"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ಶ್ರವಣ ಸಾಧನಗಳು"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ಆನ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ಸ್ವಯಂ-ತಿರುಗುವಿಕೆ"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ಪರದೆಯನ್ನು ಸ್ವಯಂ-ತಿರುಗಿಸಿ"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"ಮುಖದ ಮೂಲಕ ಅನ್‌ಲಾಕ್ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"ಮುಖ ಗುರುತಿಸಲಾಗಿದೆ"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಲು ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"ಫೇಸ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಪುನಃ ಪ್ರಯತ್ನಿಸಲು ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC ಬಳಸಲು ಅನ್‌ಲಾಕ್ ಮಾಡಿ"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"ಈ ಸಾಧನವು ನಿಮ್ಮ ಸಂಸ್ಥೆಗೆ ಸೇರಿದೆ"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"ಈ ಸಾಧನವು <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> ಗೆ ಸೇರಿದೆ"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕುವುದೇ?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"ಈ ಬಳಕೆದಾರರ ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಅಳಿಸಲಾಗುವುದು."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"ತೆಗೆದುಹಾಕಿ"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"ರೆಕಾರ್ಡ್ ಮಾಡುವಾಗ ಅಥವಾ ಬಿತ್ತರಿಸುವಾಗ ಸ್ಕ್ರೀನ್‌ ಮೇಲೆ ಕಾಣಿಸುವ ಸಕಲ ಮಾಹಿತಿಗೂ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ಪ್ರವೇಶ ಹೊಂದಿರುತ್ತದೆ. ಇದು ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಫೋಟೋಗಳು, ಸಂದೇಶಗಳು ಮತ್ತು ಆಡಿಯೋ ಪ್ಲೇಬ್ಯಾಕ್‌ನಂತಹ ಮಾಹಿತಿಯನ್ನು ಕೂಡ ಒಳಗೊಂಡಿರುತ್ತದೆ."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"ಈ ವೈಶಿಷ್ಟ್ಯವು ಒದಗಿಸುವ ಸೇವೆಗಳು, ಸ್ಕ್ರೀನ್ ಮೇಲೆ ಗೋಚರಿಸುವ ಅಥವಾ ರೆಕಾರ್ಡಿಂಗ್ ಅಥವಾ ಬಿತ್ತರಿಸುವಾಗ ಸಾಧನದಲ್ಲಿ ಪ್ಲೇ ಆಗುವ ಎಲ್ಲಾ ಮಾಹಿತಿಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿರುತ್ತವೆ. ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಫೋಟೋಗಳು, ಸಂದೇಶಗಳು ಮತ್ತು ಆಡಿಯೋ ಪ್ಲೇಬ್ಯಾಕ್‌ನಂತಹ ಮಾಹಿತಿಯನ್ನು ಇದು ಒಳಗೊಂಡಿದೆ."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"ರೆಕಾರ್ಡಿಂಗ್ ಅಥವಾ ಬಿತ್ತರಿಸುವಿಕೆಯನ್ನು ಪ್ರಾರಂಭಿಸಬೇಕೆ?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ಮೂಲಕ ರೆಕಾರ್ಡಿಂಗ್, ಬಿತ್ತರಿಸುವುದನ್ನು ಪ್ರಾರಂಭಿಸುವುದೇ?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"ಹಂಚಿಕೊಳ್ಳಲು ಅಥವಾ ರೆಕಾರ್ಡ್ ಮಾಡಲು <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ಅನ್ನು ಅನುಮತಿಸಬೇಕೆ?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"ಸಂಪೂರ್ಣ ಸ್ಕ್ರೀನ್"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"ಒಂದೇ ಆ್ಯಪ್"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"ನೀವು ಹಂಚಿಕೊಳ್ಳುತ್ತಿರುವಾಗ, ರೆಕಾರ್ಡ್ ಮಾಡುತ್ತಿರುವಾಗ ಅಥವಾ ಬಿತ್ತರಿಸುತ್ತಿರುವಾಗ, ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಮೇಲೆ ಕಾಣಿಸುವ ಅಥವಾ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪ್ಲೇ ಆಗುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಹಾಗಾಗಿ, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು ಅಥವಾ ಇತರ ಸೂಕ್ಷ್ಮ ಮಾಹಿತಿಯ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"ನೀವು ಆ್ಯಪ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳುತ್ತಿರುವಾಗ, ರೆಕಾರ್ಡ್ ಮಾಡುತ್ತಿರುವಾಗ ಅಥವಾ ಬಿತ್ತರಿಸುತ್ತಿರುವಾಗ, ಆ ಆ್ಯಪ್‌ನಲ್ಲಿ ತೋರಿಸಲಾಗುವ ಅಥವಾ ಪ್ಲೇ ಆಗುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಹಾಗಾಗಿ, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು ಅಥವಾ ಇತರ ಸೂಕ್ಷ್ಮ ಮಾಹಿತಿಯ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"ಮುಂದುವರಿಸಿ"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"ಆ್ಯಪ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಿ ಅಥವಾ ರೆಕಾರ್ಡ್ ಮಾಡಿ"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"ಹಂಚಿಕೊಳ್ಳಲು ಅಥವಾ ರೆಕಾರ್ಡ್ ಮಾಡಲು ಈ ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸುವುದೇ?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"ನೀವು ಹಂಚಿಕೊಳ್ಳುತ್ತಿರುವಾಗ, ರೆಕಾರ್ಡ್ ಮಾಡುತ್ತಿರುವಾಗ ಅಥವಾ ಬಿತ್ತರಿಸುತ್ತಿರುವಾಗ, ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಮೇಲೆ ಕಾಣಿಸುವ ಅಥವಾ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪ್ಲೇ ಆಗುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ ಈ ಆ್ಯಪ್ ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಹಾಗಾಗಿ, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು ಅಥವಾ ಇತರ ಸೂಕ್ಷ್ಮ ಮಾಹಿತಿಯ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"ನೀವು ಆ್ಯಪ್ ಒಂದನ್ನು ಹಂಚಿಕೊಳ್ಳುತ್ತಿರುವಾಗ, ರೆಕಾರ್ಡ್ ಮಾಡುತ್ತಿರುವಾಗ ಅಥವಾ ಬಿತ್ತರಿಸುತ್ತಿರುವಾಗ, ಆ ಆ್ಯಪ್‌ನಲ್ಲಿ ತೋರಿಸಲಾಗುವ ಅಥವಾ ಪ್ಲೇ ಆಗುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಈ ಆ್ಯಪ್ ಹೊಂದಿರುತ್ತದೆ. ಹಾಗಾಗಿ, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು ಅಥವಾ ಇತರ ಸೂಕ್ಷ್ಮ ಮಾಹಿತಿಯ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"ರೆಕಾರ್ಡಿಂಗ್ ಅಥವಾ ಕ್ಯಾಸ್ಟ್ ಮಾಡುವಾಗ ಸ್ಕ್ರೀನ್‌ ಮೇಲೆ ಕಾಣಿಸುವ ಎಲ್ಲಾ ಮಾಹಿತಿಗೂ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ಆ್ಯಕ್ಸೆಸ್ ಹೊಂದಿರುತ್ತದೆ. ಇದು ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಫೋಟೋಗಳು, ಸಂದೇಶಗಳು ಮತ್ತು ನೀವು ಪ್ಲೇ ಮಾಡುವ ಆಡಿಯೊದಂತಹ ಮಾಹಿತಿಯನ್ನೂ ಒಳಗೊಂಡಿರುತ್ತದೆ."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"ರೆಕಾರ್ಡಿಂಗ್ ಅಥವಾ ಕ್ಯಾಸ್ಟ್ ಮಾಡುವುದನ್ನು ಪ್ರಾರಂಭಿಸಬೇಕೇ?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"ಈ ಕಾರ್ಯವನ್ನು ಒದಗಿಸುವ ಸೇವೆಗಳು, ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಮೇಲೆ ಗೋಚರಿಸುವ ಅಥವಾ ರೆಕಾರ್ಡಿಂಗ್ ಮಾಡುವಾಗ ಅಥವಾ ಕ್ಯಾಸ್ಟ್ ಮಾಡುವಾಗ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪ್ಲೇ ಮಾಡುವ ಎಲ್ಲಾ ಮಾಹಿತಿಗಳಿಗೆ ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೊಂದಿರುತ್ತವೆ. ಇದು ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಫೋಟೋಗಳು, ಸಂದೇಶಗಳು ಮತ್ತು ನೀವು ಪ್ಲೇ ಮಾಡುವ ಆಡಿಯೊದಂತಹ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"ಸಂಪೂರ್ಣ ಸ್ಕ್ರೀನ್"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"ಒಂದೇ ಆ್ಯಪ್"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"ಆ್ಯಪ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಿ ಅಥವಾ ರೆಕಾರ್ಡ್ ಮಾಡಿ"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ಮೂಲಕ ರೆಕಾರ್ಡಿಂಗ್, ಕ್ಯಾಸ್ಟ್ ಮಾಡುವುದನ್ನು ಪ್ರಾರಂಭಿಸಬೇಕೇ?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"ನೀವು ಹಂಚಿಕೊಳ್ಳುತ್ತಿರುವಾಗ, ರೆಕಾರ್ಡಿಂಗ್ ಮಾಡುತ್ತಿರುವಾಗ ಅಥವಾ ಕ್ಯಾಸ್ಟ್ ಮಾಡುತ್ತಿರುವಾಗ, ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಮೇಲೆ ಕಾಣಿಸುವ ಅಥವಾ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪ್ಲೇ ಮಾಡುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಆದ್ದರಿಂದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು, ಫೋಟೋಗಳು ಹಾಗೂ ಆಡಿಯೊ ಮತ್ತು ವೀಡಿಯೊದಂತಹ ವಿಷಯಗಳ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"ನೀವು ಆ್ಯಪ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳುತ್ತಿರುವಾಗ, ರೆಕಾರ್ಡಿಂಗ್ ಮಾಡುತ್ತಿರುವಾಗ ಅಥವಾ ಕ್ಯಾಸ್ಟ್ ಮಾಡುತ್ತಿರುವಾಗ, ಆ ಆ್ಯಪ್‌ನಲ್ಲಿ ತೋರಿಸುವ ಅಥವಾ ಪ್ಲೇ ಮಾಡುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಆದ್ದರಿಂದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು, ಫೋಟೋಗಳು ಹಾಗೂ ಆಡಿಯೊ ಮತ್ತು ವೀಡಿಯೊದಂತಹ ವಿಷಯಗಳ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"ಪ್ರಾರಂಭಿಸಿ"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"ಕ್ಯಾಸ್ಟ್ ಮಾಡಲು ಪ್ರಾರಂಭಿಸಬೇಕೇ?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"ನೀವು ಕ್ಯಾಸ್ಟ್ ಮಾಡುವಾಗ, ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಮೇಲೆ ಕಾಣಿಸುವ ಅಥವಾ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪ್ಲೇ ಮಾಡುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ Android ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಆದ್ದರಿಂದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು, ಫೋಟೋಗಳು ಹಾಗೂ ಆಡಿಯೊ ಮತ್ತು ವೀಡಿಯೊದಂತಹ ವಿಷಯಗಳ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"ನೀವು ಆ್ಯಪ್ ಅನ್ನು ಕ್ಯಾಸ್ಟ್ ಮಾಡುತ್ತಿರುವಾಗ, ಆ ಆ್ಯಪ್‌ನಲ್ಲಿ ತೋರಿಸುವ ಅಥವಾ ಪ್ಲೇ ಮಾಡುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ Android ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಆದ್ದರಿಂದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು, ಫೋಟೋಗಳು ಹಾಗೂ ಆಡಿಯೊ ಮತ್ತು ವೀಡಿಯೊದಂತಹ ವಿಷಯಗಳ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"ಕ್ಯಾಸ್ಟ್ ಮಾಡಲು ಪ್ರಾರಂಭಿಸಿ"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"ಹಂಚಿಕೊಳ್ಳಲು ಪ್ರಾರಂಭಿಸಬೇಕೇ?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"ನೀವು ಹಂಚಿಕೊಳ್ಳುತ್ತಿರುವಾಗ, ರೆಕಾರ್ಡಿಂಗ್ ಮಾಡುತ್ತಿರುವಾಗ ಅಥವಾ ಕ್ಯಾಸ್ಟ್ ಮಾಡುತ್ತಿರುವಾಗ, ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಮೇಲೆ ಕಾಣಿಸುವ ಅಥವಾ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪ್ಲೇ ಮಾಡುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ Android ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಆದ್ದರಿಂದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು, ಫೋಟೋಗಳು ಹಾಗೂ ಆಡಿಯೊ ಮತ್ತು ವೀಡಿಯೊದಂತಹ ವಿಷಯಗಳ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"ನೀವು ಆ್ಯಪ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳುತ್ತಿರುವಾಗ, ರೆಕಾರ್ಡಿಂಗ್ ಮಾಡುತ್ತಿರುವಾಗ ಅಥವಾ ಕ್ಯಾಸ್ಟ್ ಮಾಡುತ್ತಿರುವಾಗ, ಆ ಆ್ಯಪ್‌ನಲ್ಲಿ ತೋರಿಸುವ ಅಥವಾ ಪ್ಲೇ ಮಾಡುವ ಯಾವುದೇ ವಿಷಯಕ್ಕೆ Android ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಆದ್ದರಿಂದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಪಾವತಿ ವಿವರಗಳು, ಸಂದೇಶಗಳು, ಫೋಟೋಗಳು ಹಾಗೂ ಆಡಿಯೊ ಮತ್ತು ವೀಡಿಯೊದಂತಹ ವಿಷಯಗಳ ಕುರಿತು ಜಾಗರೂಕರಾಗಿರಿ."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"ಪ್ರಾರಂಭಿಸಿ"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"ನೀವು ಆ್ಯಪ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಿದಾಗ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗುತ್ತದೆ"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"ಬದಲಿಗೆ ಈ ಆ್ಯಪ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಿ"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"ಮರಳಿ ಬದಲಿಸಿ"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"ಆ್ಯಪ್ ಸ್ವಿಚ್"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರು ನಿರ್ಬಂಧಿಸಿದ್ದಾರೆ"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"ಸಾಧನ ನೀತಿಯಿಂದ ಸ್ಕ್ರೀನ್ ಕ್ಯಾಪ್ಚರಿಂಗ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸಿ"</string>
@@ -436,15 +462,16 @@
     <string name="monitoring_subtitle_ca_certificate" msgid="8588092029755175800">"CA ಪ್ರಮಾಣಪತ್ರಗಳು"</string>
     <string name="monitoring_button_view_policies" msgid="3869724835853502410">"ಕಾರ್ಯನೀತಿಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
     <string name="monitoring_button_view_controls" msgid="8316440345340701117">"ನಿಯಂತ್ರಣಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
-    <string name="monitoring_description_named_management" msgid="505833016545056036">"ಈ ಸಾಧನವು <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ಗೆ ಸೇರಿದೆ.\n\nಸೆಟ್ಟಿಂಗ್‌ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಪ್ರವೇಶ, ಆ್ಯಪ್‌ಗಳು, ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳದ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
+    <string name="monitoring_description_named_management" msgid="505833016545056036">"ಈ ಸಾಧನವು <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ಗೆ ಸೇರಿದೆ.\n\nಸೆಟ್ಟಿಂಗ್‌ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಆ್ಯಕ್ಸೆಸ್, ಆ್ಯಪ್‌ಗಳು, ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳದ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
     <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> ಗೆ ಈ ಸಾಧನದ ಜೊತೆಗೆ ಸಂಯೋಜಿತವಾಗಿರುವ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಲು, ಆ್ಯಪ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ಈ ಸಾಧನಗಳ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.\n\nನಿಮ್ಮ ಬಳಿ ಪ್ರಶ್ನೆಗಳಿದ್ದರೆ, <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g> ಅನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
-    <string name="monitoring_description_management" msgid="4308879039175729014">"ಈ ಸಾಧನವು ನಿಮ್ಮ ಸಂಸ್ಥೆಗೆ ಸೇರಿದೆ.\n\nಸೆಟ್ಟಿಂಗ್‌ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಪ್ರವೇಶ, ಆ್ಯಪ್‌ಗಳು, ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳದ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
+    <string name="monitoring_description_management" msgid="4308879039175729014">"ಈ ಸಾಧನವು ನಿಮ್ಮ ಸಂಸ್ಥೆಗೆ ಸೇರಿದೆ.\n\nಸೆಟ್ಟಿಂಗ್‌ಗಳು, ಕಾರ್ಪೊರೇಟ್ ಆ್ಯಕ್ಸೆಸ್, ಆ್ಯಪ್‌ಗಳು, ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳದ ಮಾಹಿತಿಯನ್ನು ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಮತ್ತು ನಿರ್ವಹಿಸಬಹುದು.\n\nಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
     <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ಈ ಸಾಧನದಲ್ಲಿ ಪ್ರಮಾಣಪತ್ರ ಅಂಗೀಕಾರವನ್ನು ಸ್ಥಾಪಿಸಿದೆ. ನಿಮ್ಮ ಸುರಕ್ಷಿತ ನೆಟ್‌ವರ್ಕ್ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಅಥವಾ ಮಾರ್ಪಡಿಸಬಹುದು."</string>
     <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ನಿಮ್ಮ ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ನಲ್ಲಿ ಪ್ರಮಾಣಪತ್ರ ಅಂಗೀಕಾರವನ್ನು ಸ್ಥಾಪಿಸಿದೆ. ನಿಮ್ಮ ಸುರಕ್ಷಿತ ನೆಟ್‌ವರ್ಕ್ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಅಥವಾ ಮಾರ್ಪಡಿಸಬಹುದು."</string>
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"ಈ ಸಾಧನದಲ್ಲಿ ಪ್ರಮಾಣಪತ್ರ ಅಂಗೀಕಾರವನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿದೆ. ನಿಮ್ಮ ಸುರಕ್ಷಿತ ನೆಟ್‌ವರ್ಕ್ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು ಅಥವಾ ಮಾರ್ಪಡಿಸಬಹುದು."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನೆಟ್‌ವರ್ಕ್ ಲಾಗಿಂಗ್ ಆನ್ ಮಾಡಿದ್ದಾರೆ. ಇದು ನಿಮ್ಮ ಸಾಧನದ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುತ್ತದೆ."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನೆಟ್‌ವರ್ಕ್‌ ಲಾಗಿಂಗ್ ಆನ್ ಮಾಡಿದ್ದಾರೆ, ಅದು ನಿಮ್ಮ ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ ನಲ್ಲಿ ಇರುವ ಟ್ರಾಫಿಕ್ ಮೇಲೆ ನಿಗಾ ಇರಿಸುತ್ತದೆ ಆದರೆ ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಪ್ರೊಫೈಲ್‌ನಲ್ಲಿ ಇರುವ ಟ್ರಾಫಿಕ್ ಮೇಲೆ ಅಲ್ಲ."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"ಈ ಸಾಧನವನ್ನು <xliff:g id="VPN_APP">%1$s</xliff:g> ಮೂಲಕ ಇಂಟರ್ನೆಟ್‌ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಇಮೇಲ್‌ಗಳು ಮತ್ತು ಬ್ರೌಸಿಂಗ್ ಡೇಟಾ ಸೇರಿದಂತೆ, ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆ ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರಿಗೆ ಕಾಣಿಸುತ್ತದೆ."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"ಈ ಸಾಧನವನ್ನು <xliff:g id="VPN_APP">%1$s</xliff:g> ಮೂಲಕ ಇಂಟರ್ನೆಟ್‌ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಇಮೇಲ್‌ಗಳು ಮತ್ತು ಬ್ರೌಸಿಂಗ್ ಡೇಟಾ ಸೇರಿದಂತೆ, ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆಯು VPN ಪೂರೈಕೆದಾರರಿಗೆ ಕಾಣಿಸುತ್ತದೆ."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"ಈ ಸಾಧನವನ್ನು <xliff:g id="VPN_APP">%1$s</xliff:g> ಮೂಲಕ ಇಂಟರ್ನೆಟ್‌ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಇಮೇಲ್‌ಗಳು ಮತ್ತು ಬ್ರೌಸಿಂಗ್ ಡೇಟಾ ಸೇರಿದಂತೆ, ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆ ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರಿಗೆ ಕಾಣಿಸುತ್ತದೆ."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"ಈ ಸಾಧನವನ್ನು <xliff:g id="VPN_APP_0">%1$s</xliff:g> ಮತ್ತು <xliff:g id="VPN_APP_1">%2$s</xliff:g> ಮೂಲಕ ಇಂಟರ್ನೆಟ್‌ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಇಮೇಲ್‌ಗಳು ಮತ್ತು ಬ್ರೌಸಿಂಗ್ ಡೇಟಾ ಸೇರಿದಂತೆ, ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆ ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರಿಗೆ ಕಾಣಿಸುತ್ತದೆ."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"ನಿಮ್ಮ ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್‌ಗಳನ್ನು <xliff:g id="VPN_APP">%1$s</xliff:g> ಮೂಲಕ ಇಂಟರ್ನೆಟ್‌ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಇಮೇಲ್‌ಗಳು ಮತ್ತು ಬ್ರೌಸಿಂಗ್ ಡೇಟಾ ಸೇರಿದಂತೆ, ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್‌ಗಳಲ್ಲಿನ ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆ ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರು ಮತ್ತು VPN ಪೂರೈಕೆದಾರರಿಗೆ ಕಾಣಿಸುತ್ತದೆ."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಆ್ಯಪ್‌ಗಳನ್ನು <xliff:g id="VPN_APP">%1$s</xliff:g> ಮೂಲಕ ಇಂಟರ್ನೆಟ್‌ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಇಮೇಲ್‌ಗಳು ಮತ್ತು ಬ್ರೌಸಿಂಗ್ ಡೇಟಾ ಸೇರಿದಂತೆ, ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆ ನಿಮ್ಮ VPN ಪೂರೈಕೆದಾರರಿಗೆ ಕಾಣಿಸುತ್ತದೆ."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
     <string name="sound_settings" msgid="8874581353127418308">"ಧ್ವನಿ &amp; ವೈಬ್ರೇಷನ್"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ಸುರಕ್ಷಿತ ವಾಲ್ಯೂಮ್‌ಗೆ ಕಡಿಮೆ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"ಶಿಫಾರಸು ಮಾಡಿದ ಸಮಯಕ್ಕಿಂತ ಹೆಚ್ಚು ಸಮಯ ವಾಲ್ಯೂಮ್ ಹೆಚ್ಚಾಗಿರುತ್ತದೆ"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"ವಾಲ್ಯೂಮ್ ಅನ್ನು ಸುರಕ್ಷಿತ ಮಟ್ಟಕ್ಕೆ ತಗ್ಗಿಸಲಾಗಿದೆ"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"ಹೆಡ್‌ಫೋನ್‌ನ ವಾಲ್ಯೂಮ್‌ ಶಿಫಾರಸು ಮಾಡಿದ್ದಕ್ಕಿಂತಲೂ ಹೆಚ್ಚಿನ ಸಮಯದವರೆಗೆ ಅಧಿಕವಾಗಿದೆ"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"ಹೆಡ್‌ಫೋನ್‌ನ ವಾಲ್ಯೂಮ್ ಈ ವಾರದ‌ ಮಟ್ಟಿಗೆ ಸುರಕ್ಷಿತ ಮಿತಿಯನ್ನು ಮೀರಿದೆ"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"ಆಲಿಸುತ್ತಿರಿ"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"ವಾಲ್ಯೂಮ್ ತಗ್ಗಿಸಿ"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"ಆ್ಯಪ್ ಅನ್ನು ಪಿನ್ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"ನೀವು ಅನ್‌ಪಿನ್ ಮಾಡುವವರೆಗೆ ಅದನ್ನು ವೀಕ್ಷಣೆಯಲ್ಲಿಡುತ್ತದೆ. ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ ಹಾಗೂ ಅನ್‌ಪಿನ್ ಮಾಡಲು ಅವಲೋಕಿಸಿ."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"ನೀವು ಅನ್‌ಪಿನ್ ಮಾಡುವವರೆಗೆ ಅದನ್ನು ವೀಕ್ಷಣೆಯಲ್ಲಿಡುತ್ತದೆ. ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ ಹಾಗೂ ಅನ್‌ಪಿನ್ ಮಾಡಲು ಮುಖಪುಟಕ್ಕೆ ಹಿಂತಿರುಗಿ."</string>
@@ -484,7 +514,7 @@
     <string name="stream_ring" msgid="7550670036738697526">"ರಿಂಗ್"</string>
     <string name="stream_music" msgid="2188224742361847580">"ಮಾಧ್ಯಮ"</string>
     <string name="stream_alarm" msgid="16058075093011694">"ಅಲಾರಮ್"</string>
-    <string name="stream_notification" msgid="7930294049046243939">"ಅಧಿಸೂಚನೆ"</string>
+    <string name="stream_notification" msgid="7930294049046243939">"ನೋಟಿಫಿಕೇಶನ್"</string>
     <string name="stream_bluetooth_sco" msgid="6234562365528664331">"ಬ್ಲೂಟೂತ್‌"</string>
     <string name="stream_dtmf" msgid="7322536356554673067">"ಡ್ಯುಯಲ್‌ ಬಹು ಟೋನ್ ಆವರ್ತನೆ"</string>
     <string name="stream_accessibility" msgid="3873610336741987152">"ಆ್ಯಕ್ಸೆಸಿಬಿಲಿಟಿ"</string>
@@ -533,12 +563,12 @@
     <string name="tuner_toast" msgid="3812684836514766951">"ಅಭಿನಂದನೆಗಳು! ಸಿಸ್ಟಂ UI ಟ್ಯೂನರ್ ಅನ್ನು ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಸೇರಿಸಲಾಗಿದೆ"</string>
     <string name="remove_from_settings" msgid="633775561782209994">"ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಂದ ತೆಗೆದುಹಾಕಿ"</string>
     <string name="remove_from_settings_prompt" msgid="551565437265615426">"ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಂದ ಸಿಸ್ಟಂ UI ಟ್ಯೂನರ್ ತೆಗೆದುಹಾಕುವುದೇ ಮತ್ತು ಅದರ ಎಲ್ಲಾ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬಳಸುವುದನ್ನು ನಿಲ್ಲಿಸುವುದೇ?"</string>
-    <string name="enable_bluetooth_title" msgid="866883307336662596">"ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡುವುದೇ?"</string>
+    <string name="enable_bluetooth_title" msgid="866883307336662596">"ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡಬೇಕೆ?"</string>
     <string name="enable_bluetooth_message" msgid="6740938333772779717">"ನಿಮ್ಮ ಕೀಬೋರ್ಡ್ ಅನ್ನು ಟ್ಯಾಬ್ಲೆಟ್‌ಗೆ ಸಂಪರ್ಕಿಸಲು, ನೀವು ಮೊದಲು ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ."</string>
     <string name="enable_bluetooth_confirmation_ok" msgid="2866408183324184876">"ಆನ್‌ ಮಾಡಿ"</string>
-    <string name="tuner_full_importance_settings" msgid="1388025816553459059">"ಪವರ್ ಅಧಿಸೂಚನೆ ನಿಯಂತ್ರಣಗಳು"</string>
+    <string name="tuner_full_importance_settings" msgid="1388025816553459059">"ಪವರ್ ನೋಟಿಫಿಕೇಶನ್ ನಿಯಂತ್ರಣಗಳು"</string>
     <string name="rotation_lock_camera_rotation_on" msgid="789434807790534274">"ಆನ್ ಆಗಿದೆ - ಮುಖ-ಆಧಾರಿತ"</string>
-    <string name="power_notification_controls_description" msgid="1334963837572708952">"ಪವರ್ ಅಧಿಸೂಚನೆ ನಿಯಂತ್ರಣಗಳ ಮೂಲಕ, ನೀವು ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಅಧಿಸೂಚನೆಗಳನ್ನು 0 ರಿಂದ 5 ರವರೆಗಿನ ಹಂತಗಳ ಪ್ರಾಮುಖ್ಯತೆಯನ್ನು ಹೊಂದಿಸಬಹುದು. \n\n"<b>"ಹಂತ 5"</b>" \n- ಮೇಲಿನ ಅಧಿಸೂಚನೆ ಪಟ್ಟಿಯನ್ನು ತೋರಿಸಿ \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ಅನುಮತಿಸಿ \n- ಯಾವಾಗಲು ಇಣುಕು ನೋಟ \n\n"<b>"ಹಂತ 4"</b>" \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ತಡೆಯಿರಿ \n- ಯಾವಾಗಲು ಇಣುಕು ನೋಟ\n\n"<b>"ಹಂತ 3"</b>" \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ತಡೆಯಿರಿ \n- ಎಂದಿಗೂ ಇಣುಕು ನೋಟ ಬೇಡ \n\n"<b>"ಹಂತ 2"</b>" \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ತಡೆಯಿರಿ \n- ಎಂದಿಗೂ ಇಣುಕು ನೋಟ ಬೇಡ \n- ಶಬ್ದ ಮತ್ತು ವೈಬ್ರೇಷನ್ ಎಂದಿಗೂ ಮಾಡಬೇಡಿ \n\n"<b>"ಹಂತ 1"</b>" \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ತಡೆಯಿರಿ \n- ಎಂದಿಗೂ ಇಣುಕು ನೋಟ ಬೇಡ \n- ಶಬ್ದ ಮತ್ತು ವೈಬ್ರೇಷನ್ ಎಂದಿಗೂ ಮಾಡಬೇಡಿ \n- ಸ್ಥಿತಿ ಪಟ್ಟಿ ಮತ್ತು ಲಾಕ್ ಪರದೆಯಿಂದ ಮರೆಮಾಡಿ \n- ಕೆಳಗಿನ ಅಧಿಸೂಚನೆ ಪಟ್ಟಿಯನ್ನು ತೋರಿಸಿ \n\n"<b>"ಹಂತ 0"</b>" \n- ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ ಎಲ್ಲಾ ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ"</string>
+    <string name="power_notification_controls_description" msgid="1334963837572708952">"ಪವರ್ ನೋಟಿಫಿಕೇಶನ್ ನಿಯಂತ್ರಣಗಳ ಮೂಲಕ, ನೀವು ಆ್ಯಪ್‍ಗಳ ನೋಟಿಫಿಕೇಶನ್‍ಗಳನ್ನು 0 ರಿಂದ 5 ರವರೆಗಿನ ಹಂತಗಳ ಪ್ರಾಮುಖ್ಯತೆಯನ್ನು ಹೊಂದಿಸಬಹುದು. \n\n"<b>"ಹಂತ 5"</b>" \n- ಮೇಲಿನ ನೋಟಿಫಿಕೇಶನ್ ಪಟ್ಟಿಯನ್ನು ತೋರಿಸಿ \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ಅನುಮತಿಸಿ \n- ಯಾವಾಗಲು ಇಣುಕು ನೋಟ \n\n"<b>"ಹಂತ 4"</b>" \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ತಡೆಯಿರಿ \n- ಯಾವಾಗಲು ಇಣುಕು ನೋಟ\n\n"<b>"ಹಂತ 3"</b>" \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ತಡೆಯಿರಿ \n- ಎಂದಿಗೂ ಇಣುಕು ನೋಟ ಬೇಡ \n\n"<b>"ಹಂತ 2"</b>" \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ತಡೆಯಿರಿ \n- ಎಂದಿಗೂ ಇಣುಕು ನೋಟ ಬೇಡ \n- ಶಬ್ದ ಮತ್ತು ವೈಬ್ರೇಷನ್ ಎಂದಿಗೂ ಮಾಡಬೇಡಿ \n\n"<b>"ಹಂತ 1"</b>" \n- ಪೂರ್ಣ ಪರದೆ ಅಡಚಣೆಯನ್ನು ತಡೆಯಿರಿ \n- ಎಂದಿಗೂ ಇಣುಕು ನೋಟ ಬೇಡ \n- ಶಬ್ದ ಮತ್ತು ವೈಬ್ರೇಷನ್ ಎಂದಿಗೂ ಮಾಡಬೇಡಿ \n- ಸ್ಥಿತಿ ಪಟ್ಟಿ ಮತ್ತು ಲಾಕ್ ಪರದೆಯಿಂದ ಮರೆಮಾಡಿ \n- ಕೆಳಗಿನ ನೋಟಿಫಿಕೇಶನ್ ಪಟ್ಟಿಯನ್ನು ತೋರಿಸಿ \n\n"<b>"ಹಂತ 0"</b>" \n- ಆ್ಯಪ್‍ನಿಂದ ಎಲ್ಲಾ ನೋಟಿಫಿಕೇಶನ್‍ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ"</string>
     <string name="inline_done_button" msgid="6043094985588909584">"ಪೂರ್ಣಗೊಂಡಿದೆ"</string>
     <string name="inline_ok_button" msgid="603075490581280343">"ಅನ್ವಯಿಸಿ"</string>
     <string name="inline_turn_off_notifications" msgid="8543989584403106071">"ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಫ್ ಮಾಡಿ"</string>
@@ -571,15 +601,15 @@
     <string name="feedback_promoted" msgid="2125562787759780807">"ಈ ಅಧಿಸೂಚನೆಯು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿಮ್ಮ ಶೇಡ್‌ನಲ್ಲಿ &lt;b&gt;ಉನ್ನತ ಸ್ಥಾನವನ್ನು ಹೊಂದಿದೆ&lt;/b&gt;."</string>
     <string name="feedback_demoted" msgid="951884763467110604">"ಈ ಅಧಿಸೂಚನೆಯು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿಮ್ಮ ಶೇಡ್‌ನಲ್ಲಿ &lt;b&gt;ಕಡಿಮೆ ಸ್ಥಾನವನ್ನು ಹೊಂದಿದೆ&lt;/b&gt;."</string>
     <string name="feedback_prompt" msgid="3656728972307896379">"ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಡೆವಲಪರ್‌ಗೆ ತಿಳಿಸಿ. ಇದು ಸರಿಯಾಗಿತ್ತೇ?"</string>
-    <string name="notification_channel_controls_opened_accessibility" msgid="6111817750774381094">"<xliff:g id="APP_NAME">%1$s</xliff:g> ನ ಅಧಿಸೂಚನೆ ನಿಯಂತ್ರಣಗಳನ್ನು ತೆರೆಯಲಾಗಿದೆ"</string>
-    <string name="notification_channel_controls_closed_accessibility" msgid="1561909368876911701">"<xliff:g id="APP_NAME">%1$s</xliff:g> ನ ಅಧಿಸೂಚನೆ ನಿಯಂತ್ರಣಗಳನ್ನು ಮುಚ್ಚಲಾಗಿದೆ"</string>
+    <string name="notification_channel_controls_opened_accessibility" msgid="6111817750774381094">"<xliff:g id="APP_NAME">%1$s</xliff:g> ನ ನೋಟಿಫಿಕೇಶನ್ ನಿಯಂತ್ರಣಗಳನ್ನು ತೆರೆಯಲಾಗಿದೆ"</string>
+    <string name="notification_channel_controls_closed_accessibility" msgid="1561909368876911701">"<xliff:g id="APP_NAME">%1$s</xliff:g> ನ ನೋಟಿಫಿಕೇಶನ್ ನಿಯಂತ್ರಣಗಳನ್ನು ಮುಚ್ಚಲಾಗಿದೆ"</string>
     <string name="notification_more_settings" msgid="4936228656989201793">"ಹೆಚ್ಚಿನ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
     <string name="notification_app_settings" msgid="8963648463858039377">"ಕಸ್ಟಮೈಜ್‌ ಮಾಡಿ"</string>
     <string name="notification_conversation_bubble" msgid="2242180995373949022">"ಬಬಲ್ ತೋರಿಸಿ"</string>
     <string name="notification_conversation_unbubble" msgid="6908427185031099868">"ಬಬಲ್ಸ್‌ ಅನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
     <string name="notification_menu_accessibility" msgid="8984166825879886773">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="MENU_DESCRIPTION">%2$s</xliff:g>"</string>
-    <string name="notification_menu_gear_description" msgid="6429668976593634862">"ಅಧಿಸೂಚನೆ ನಿಯಂತ್ರಣಗಳು"</string>
-    <string name="notification_menu_snooze_description" msgid="4740133348901973244">"ಅಧಿಸೂಚನೆ ಸ್ನೂಜ್ ಆಯ್ಕೆಗಳು"</string>
+    <string name="notification_menu_gear_description" msgid="6429668976593634862">"ನೋಟಿಫಿಕೇಶನ್ ನಿಯಂತ್ರಣಗಳು"</string>
+    <string name="notification_menu_snooze_description" msgid="4740133348901973244">"ನೋಟಿಫಿಕೇಶನ್ ಸ್ನೂಜ್ ಆಯ್ಕೆಗಳು"</string>
     <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>
@@ -626,11 +656,11 @@
     <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"ಯಾವುದೇ ಶಾರ್ಟ್‌ಕಟ್‌ಗಳಿಲ್ಲ"</string>
     <string name="keyboard_shortcut_search_category_system" msgid="1151182120757052669">"ಸಿಸ್ಟಂ"</string>
     <string name="keyboard_shortcut_search_category_input" msgid="5440558509904296233">"ಇನ್‌ಪುಟ್"</string>
-    <string name="keyboard_shortcut_search_category_open_apps" msgid="1450959949739257562">"ಆ್ಯಪ್ಸ್ ತೆರೆ"</string>
+    <string name="keyboard_shortcut_search_category_open_apps" msgid="1450959949739257562">"ಆ್ಯಪ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
     <string name="keyboard_shortcut_search_category_current_app" msgid="2011953559133734491">"ಪ್ರಸ್ತುತ ಆ್ಯಪ್"</string>
     <string name="group_system_access_notification_shade" msgid="7116898151485382275">"ಅಧಿಸೂಚನೆಯ ಪರದೆಯನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಿ"</string>
     <string name="group_system_full_screenshot" msgid="7389040853798023211">"ಪೂರ್ಣ ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ತೆಗೆದುಕೊಳ್ಳಿ"</string>
-    <string name="group_system_access_system_app_shortcuts" msgid="4421497579210445641">"ಸಿಸ್ಟಂ / ಅಪ್ಲಿಕೇಶನ್ ಶಾರ್ಟ್‌ಕಟ್‌ಗಳ ಆ್ಯಕ್ಸೆಸ್ ಪಟ್ಟಿ"</string>
+    <string name="group_system_access_system_app_shortcuts" msgid="4421497579210445641">"ಸಿಸ್ಟಂ / ಆ್ಯಪ್‌ ಶಾರ್ಟ್‌ಕಟ್‌ಗಳ ಪಟ್ಟಿ ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಿ"</string>
     <string name="group_system_go_back" msgid="8838454003680364227">"ಹಿಂದೆ: ಹಿಂದಿನ ಸ್ಥಿತಿಗೆ ಹಿಂತಿರುಗಿ (ಹಿಂತಿರುಗುವ ಬಟನ್)"</string>
     <string name="group_system_access_home_screen" msgid="1857344316928441909">"ಹೋಮ್ ಸ್ಕ್ರೀನ್ ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಿ"</string>
     <string name="group_system_overview_open_apps" msgid="6897128761003265350">"ತೆರೆದ ಆ್ಯಪ್‌ಗಳ ಅವಲೋಕನ"</string>
@@ -662,7 +692,7 @@
     <string name="keyboard_shortcut_group_applications_calendar" msgid="4229602992120154157">"Calendar"</string>
     <string name="keyboard_shortcut_group_applications_calculator" msgid="6316043911946540137">"ಕ್ಯಾಲ್ಕ್ಯುಲೇಟರ್"</string>
     <string name="keyboard_shortcut_group_applications_maps" msgid="7312554713993114342">"Maps"</string>
-    <string name="volume_and_do_not_disturb" msgid="502044092739382832">"ಅಡಚಣೆ ಮಾಡಬೇಡ"</string>
+    <string name="volume_and_do_not_disturb" msgid="502044092739382832">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ"</string>
     <string name="volume_dnd_silent" msgid="4154597281458298093">"ವಾಲ್ಯೂಮ್ ಬಟನ್‌ಗಳ ಶಾರ್ಟ್‌ಕಟ್‌"</string>
     <string name="battery" msgid="769686279459897127">"ಬ್ಯಾಟರಿ"</string>
     <string name="headset" msgid="4485892374984466437">"ಹೆಡ್‌ಸೆಟ್"</string>
@@ -727,7 +757,7 @@
     <string name="accessibility_qs_edit_tile_added" msgid="9067146040380836334">"ಟೈಲ್ ಸೇರಿಸಲಾಗಿದೆ"</string>
     <string name="accessibility_qs_edit_tile_removed" msgid="1175925632436612036">"ಟೈಲ್ ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string>
     <string name="accessibility_desc_quick_settings_edit" msgid="741658939453595297">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್‍ಗಳ ಎಡಿಟರ್."</string>
-    <string name="accessibility_desc_notification_icon" msgid="7331265967584178674">"<xliff:g id="ID_1">%1$s</xliff:g> ಅಧಿಸೂಚನೆ: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
+    <string name="accessibility_desc_notification_icon" msgid="7331265967584178674">"<xliff:g id="ID_1">%1$s</xliff:g> ನೋಟಿಫಿಕೇಶನ್: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_settings" msgid="7098489591715844713">"ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ."</string>
     <string name="accessibility_quick_settings_expand" msgid="2609275052412521467">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ."</string>
     <string name="accessibility_quick_settings_collapse" msgid="4674876336725041982">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಮುಚ್ಚಿ."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"ಪವರ್ ಮೆನು"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g> ರಲ್ಲಿ <xliff:g id="ID_1">%1$d</xliff:g> ಪುಟ"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"ಲಾಕ್ ಪರದೆ"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"ಫೋನ್ ಬಿಸಿಯಾಗಿದ್ದರಿಂದ ಆಫ್ ಆಗಿದೆ"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"ನಿಮ್ಮ ಫೋನ್ ಈಗ ಎಂದಿನಂತೆ ರನ್ ಆಗುತ್ತಿದೆ.\nಇನ್ನಷ್ಟು ಮಾಹಿತಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"ನಿಮ್ಮ ಫೋನ್ ತುಂಬಾ ಬಿಸಿಯಾಗಿತ್ತು, ತಣ್ಣಗಾಗಲು ಅದು ತಾನಾಗಿ ಆಫ್ ಆಗಿದೆ. ಈಗ ನಿಮ್ಮ ಫೋನ್ ಎಂದಿನಂತೆ ಕೆಲಸ ಮಾಡುತ್ತಿದೆ.\n\nನಿಮ್ಮ ಫೋನ್ ಬಿಸಿಯಾಗಲು ಕಾರಣಗಳು:\n	• ಹೆಚ್ಚು ಸಂಪನ್ಮೂಲ ಉಪಯೋಗಿಸುವ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಬಳಕೆ (ಉದಾ, ಗೇಮಿಂಗ್, ವೀಡಿಯೊ/ನ್ಯಾವಿಗೇಶನ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು)\n	• ದೊಡ್ಡ ಫೈಲ್‌ಗಳ ಡೌನ್‌ಲೋಡ್ ಅಥವಾ ಅಪ್‌ಲೋಡ್\n	• ಅಧಿಕ ಉಷ್ಣಾಂಶದಲ್ಲಿ ಫೋನಿನ ಬಳಕೆ"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"ಕಾಳಜಿಯ ಹಂತಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"ಫೋನ್ ಬಿಸಿಯಾಗುತ್ತಿದೆ"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"ಫೋನ್ ತಣ್ಣಗಾಗುವವರೆಗೂ ಕೆಲವು ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಸೀಮಿತಗೊಳಿಸಲಾಗುತ್ತದೆ\nಇನ್ನಷ್ಟು ಮಾಹಿತಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"ನಿಮ್ಮ ಫೋನ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತಣ್ಣಗಾಗಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ. ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೀವು ಈಗಲೂ ಬಳಸಬಹುದಾಗಿರುತ್ತದೆ, ಆದರೆ ಇದು ನಿಧಾನವಾಗಿರಬಹುದು.\n\nಒಮ್ಮೆ ನಿಮ್ಮ ಫೋನ್ ತಣ್ಣಗಾದ ನಂತರ ಇದು ಸಾಮಾನ್ಯ ರೀತಿಯಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"ಕಾಳಜಿಯ ಹಂತಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"ನಿಮ್ಮ ಸಾಧನವನ್ನು ಅನ್‌ಪ್ಲಗ್ ಮಾಡಿ"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"ಚಾರ್ಜಿಂಗ್ ಪೋರ್ಟ್ ಸಮೀಪದಲ್ಲಿ ನಿಮ್ಮ ಸಾಧನವು ಬಿಸಿಯಾಗುತ್ತಿದೆ. ಅದನ್ನು ಚಾರ್ಜರ್ ಅಥವಾ USB ಪರಿಕರಕ್ಕೆ ಕನೆಕ್ಟ್ ಮಾಡಿದ್ದರೆ, ಅದನ್ನು ಅನ್‌ಪ್ಲಗ್ ಮಾಡಿ ಹಾಗೂ ಕೇಬಲ್ ಕೂಡ ಬಿಸಿಯಾಗಿರಬಹುದು ಆದ್ದರಿಂದ ಎಚ್ಚರಿಕೆ ವಹಿಸಿ."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ಪೂರ್ಣ ಸ್ಕ್ರೀನ್‌ ಅನ್ನು ಹಿಗ್ಗಿಸಿ"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ಸ್ಕ್ರೀನ್‌ನ ಅರ್ಧಭಾಗವನ್ನು ಝೂಮ್ ಮಾಡಿ"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"ಹಿಗ್ಗಿಸುವಿಕೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"ಮ್ಯಾಗ್ನಿಫಿಕೇಶನ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಮುಚ್ಚಿರಿ"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"ಮರುಗಾತ್ರಗೊಳಿಸಲು ಮೂಲೆಯನ್ನು ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"ಡಯಾಗನಲ್ ಸ್ಕ್ರೋಲಿಂಗ್ ಅನ್ನು ಅನುಮತಿಸಿ"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"ಮರುಗಾತ್ರಗೊಳಿಸಿ"</string>
@@ -850,7 +875,7 @@
     <string name="accessibility_magnification_bottom_handle" msgid="6531646968813821258">"ಕೆಳಗಿನ ಹ್ಯಾಂಡಲ್"</string>
     <string name="accessibility_magnification_settings_panel_description" msgid="8174187340747846953">"ಹಿಗ್ಗಿಸುವಿಕೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
     <string name="accessibility_magnifier_size" msgid="3038755600030422334">"ಮ್ಯಾಗ್ನಿಫೈರ್ ಗಾತ್ರ"</string>
-    <string name="accessibility_magnification_zoom" msgid="4222088982642063979">"Zoom"</string>
+    <string name="accessibility_magnification_zoom" msgid="4222088982642063979">"ಝೂಮ್‌"</string>
     <string name="accessibility_magnification_medium" msgid="6994632616884562625">"ಮಧ್ಯಮ"</string>
     <string name="accessibility_magnification_small" msgid="8144502090651099970">"ಚಿಕ್ಕದು"</string>
     <string name="accessibility_magnification_large" msgid="6602944330021308774">"ದೊಡ್ಡದು"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ಮೆಚ್ಚಿನದಲ್ಲದ್ದು"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"ಸ್ಥಾನ <xliff:g id="NUMBER">%d</xliff:g> ಕ್ಕೆ ಸರಿಸಿ"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"ನಿಯಂತ್ರಣಗಳು"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"ತ್ವರಿತವಾಗಿ ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಸಾಧನ ನಿಯಂತ್ರಣಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"ನಿಯಂತ್ರಣಗಳನ್ನು ಮರುಹೊಂದಿಸಲು ಹೋಲ್ಡ್ ಮಾಡಿ ಮತ್ತು ಡ್ರ್ಯಾಗ್‌ ಮಾಡಿ"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"ಎಲ್ಲಾ ನಿಯಂತ್ರಣಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಿಲ್ಲ"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"ಇತರ ಆ್ಯಪ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"ಮರುಹೊಂದಿಸಿ"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"ಕಂಟ್ರೋಲ್‌ಗಳನ್ನು ಸೇರಿಸಿ"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"ನಿಯಂತ್ರಣಗಳನ್ನು ಸೇರಿಸಿ"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"ಎಡಿಟ್ ಮಾಡುವಿಕೆಗೆ ಹಿಂತಿರುಗಿ"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"ನಿಯಂತ್ರಣಗಳನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಆ್ಯಪ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಬದಲಾಗಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು <xliff:g id="APP">%s</xliff:g> ಆ್ಯಪ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ."</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"ಹೊಂದಾಣಿಕೆಯ ನಿಯಂತ್ರಣಗಳು ಲಭ್ಯವಿಲ್ಲ"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"ಮತ್ತೊಂದು ಪಿನ್ ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> ಸಾಧನಕ್ಕಾಗಿ ಬದಲಾವಣೆಯನ್ನು ದೃಢೀಕರಿಸಿ"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"ಇನ್ನಷ್ಟು ನೋಡಲು ಸ್ವೈಪ್ ಮಾಡಿ"</string>
+    <string name="retry_face" msgid="416380073082560186">"ಮುಖದ ದೃಢೀಕರಣವನ್ನು ಮರುಪ್ರಯತ್ನಿಸಿ"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"ಶಿಫಾರಸುಗಳು ಲೋಡ್ ಆಗುತ್ತಿವೆ"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"ಮಾಧ್ಯಮ"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಗಾಗಿ ಈ ಮಾಧ್ಯಮ ಕಂಟ್ರೋಲ್‌ಗಳನ್ನು ಮರೆಮಾಡಬೇಕೆ?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> ಅವರ <xliff:g id="SONG_NAME">%1$s</xliff:g> ಹಾಡನ್ನು <xliff:g id="APP_LABEL">%3$s</xliff:g> ನಲ್ಲಿ ಪ್ಲೇ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g> ರಲ್ಲಿ <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> ರನ್ ಆಗುತ್ತಿದೆ"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"ಪ್ಲೇ ಮಾಡಿ"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"ವಿರಾಮಗೊಳಿಸಿ"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"ಹಿಂದಿನ ಟ್ರ್ಯಾಕ್"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"ಸ್ಪೀಕರ್‌ಗಳು ಮತ್ತು ಡಿಸ್‌ಪ್ಲೇಗಳು"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"ಸೂಚಿಸಿದ ಸಾಧನಗಳು"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"ಮೀಡಿಯಾವನ್ನು ಮತ್ತೊಂದು ಸಾಧನಕ್ಕೆ ಸರಿಸಲು ನಿಮ್ಮ ಹಂಚಿಕೊಂಡ ಸೆಶನ್ ಅನ್ನು ನಿಲ್ಲಿಸಿ"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"ನಿಲ್ಲಿಸಿ"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"ಪ್ರಸಾರವು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"ಪ್ರಸಾರ"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"ಹೊಂದಾಣಿಕೆಯಾಗುವ ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳನ್ನು ಹೊಂದಿರುವ ಸಮೀಪದಲ್ಲಿರುವ ಜನರು ನೀವು ಪ್ರಸಾರ ಮಾಡುತ್ತಿರುವ ಮಾಧ್ಯಮವನ್ನು ಆಲಿಸಬಹುದು"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"ಉಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"ಉಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"ಕನಿಷ್ಠ 4 ಅಕ್ಷರಗಳನ್ನು ಬಳಸಿ"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"16 ಕ್ಕಿಂತ ಕಡಿಮೆ ಅಕ್ಷರಗಳನ್ನು ಬಳಸಿ"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g> ಕ್ಕಿಂತ ಕಡಿಮೆ ಅಕ್ಷರಗಳನ್ನು ಬಳಸಿ"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"ಬಿಲ್ಡ್ ಸಂಖ್ಯೆ"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"ಬಿಲ್ಡ್ ಸಂಖ್ಯೆಯನ್ನು ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ನಲ್ಲಿ ನಕಲಿಸಲಾಗಿದೆ."</string>
     <string name="basic_status" msgid="2315371112182658176">"ಸಂಭಾಷಣೆಯನ್ನು ತೆರೆಯಿರಿ"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"ನಿಮ್ಮ ಬ್ಯಾಟರಿ ಮೀಟರ್ ಓದುವಾಗ ಸಮಸ್ಯೆ ಎದುರಾಗಿದೆ"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"ಇನ್ನಷ್ಟು ಮಾಹಿತಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"ಅಲಾರಾಂ ಸೆಟ್ ಆಗಿಲ್ಲ"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ಸ್ಕ್ರೀನ್ ಲಾಕ್ ನಮೂದಿಸಿ"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"ದೃಢೀಕರಿಸಿ"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"ಸಾಧನವನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
@@ -1083,9 +1112,10 @@
     <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_assistant_attention_indicator" msgid="4712565923771372690">"ಅಸಿಸ್ಟೆಂಟ್ ಆಲಿಸುತ್ತಿದೆ"</string>
-    <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# ಅಧಿಸೂಚನೆ}one{# ಅಧಿಸೂಚನೆಗಳು}other{# ಅಧಿಸೂಚನೆಗಳು}}"</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="note_task_button_label" msgid="8718616095800343136">"ಟಿಪ್ಪಣಿಗಳನ್ನು ಬರೆದುಕೊಳ್ಳುವುದು"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"ಟಿಪ್ಪಣಿ ಮಾಡಿಕೊಳ್ಳುವಿಕೆ"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"ಟಿಪ್ಪಣಿ ಮಾಡಿಕೊಳ್ಳುವಿಕೆ, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"<xliff:g id="URL">%s</xliff:g> ನಲ್ಲಿ ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> ಅನ್ನು ತೆರೆಯಿರಿ"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• ಆ್ಯಪ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• ವಾಲೆಟ್‌ಗೆ ಕನಿಷ್ಠ ಒಂದು ಕಾರ್ಡ್ ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• ಕ್ಯಾಮರಾ ಆ್ಯಪ್ ಒಂದನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• ಆ್ಯಪ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• ಕನಿಷ್ಠ ಒಂದು ಸಾಧನ ಲಭ್ಯವಿದೆ"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"ವಾಲೆಟ್ ಆ್ಯಪ್ ಅನ್ನು ಶಾರ್ಟ್‌ಕಟ್ ಆಗಿ ಸೇರಿಸಲು, ಆ್ಯಪ್ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲಾಗಿದೆಯೇ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"ವಾಲೆಟ್ ಆ್ಯಪ್ ಅನ್ನು ಶಾರ್ಟ್‌ಕಟ್ ಆಗಿ ಸೇರಿಸಲು, ಕನಿಷ್ಠ ಒಂದು ಕಾರ್ಡ್ ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆಯೇ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR ಕೋಡ್ ಸ್ಕ್ಯಾನರ್ ಅನ್ನು ಶಾರ್ಟ್‌ಕಟ್ ಆಗಿ ಸೇರಿಸಲು, ಕ್ಯಾಮರಾ ಆ್ಯಪ್ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲಾಗಿದೆಯೇ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home ಆ್ಯಪ್ ಅನ್ನು ಶಾರ್ಟ್‌ಕಟ್ ಆಗಿ ಸೇರಿಸಲು, ಆ್ಯಪ್ ಇನ್‌ಸ್ಟಾಲ್ ಆಗಿದೆಯೇ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• ಕನಿಷ್ಠ ಒಂದು ಸಾಧನ ಲಭ್ಯವಿದೆ"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"ನೋಟ್ಸ್ ಮಾಡಿಕೊಳ್ಳುವಿಕೆ ಶಾರ್ಟ್‌ಕಟ್ ಅನ್ನು ಬಳಸಲು ಡೀಫಾಲ್ಟ್ ಟಿಪ್ಪಣಿಗಳ ಆ್ಯಪ್ ಆಯ್ಕೆಮಾಡಿ"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"ಆ್ಯಪ್‌ ಆಯ್ಕೆಮಾಡಿ"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"ಸ್ಪರ್ಶಿಸಿ ಹೋಲ್ಡ್ ಮಾಡಿ ಶಾರ್ಟ್‌ಕಟ್"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"ರದ್ದುಗೊಳಿಸಿ"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"ಈಗ ಸ್ಕ್ರೀನ್‌ಗಳನ್ನು ಬದಲಿಸಿ"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"ನಿಮ್ಮ ಸ್ಟೈಲಸ್ ಅನ್ನು ಚಾರ್ಜರ್‌ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಿ"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"ಸ್ಟೈಲಸ್ ಬ್ಯಾಟರಿ ಕಡಿಮೆಯಿದೆ"</string>
     <string name="video_camera" msgid="7654002575156149298">"ವೀಡಿಯೊ ಕ್ಯಾಮರಾ"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"ಈ ಪ್ರೊಫೈಲ್‌ನಿಂದ ಕರೆ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"ನಿಮ್ಮ ಕೆಲಸದ ನೀತಿಯು ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ನಿಂದ ಮಾತ್ರ ಫೋನ್ ಕರೆಗಳನ್ನು ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"ವೈಯಕ್ತಿಕ ಆ್ಯಪ್‌ನಿಂದ ಕರೆ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್‌ಗಳಿಂದ ಮಾತ್ರ ಕರೆಗಳನ್ನು ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ಗೆ ಬದಲಿಸಿ"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"ಮುಚ್ಚಿರಿ"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"ಕೆಲಸದ ಫೋನ್ ಆ್ಯಪ್ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"ರದ್ದುಗೊಳಿಸಿ"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"ಲಾಕ್ ಸ್ಕ್ರೀನ್ ಕಸ್ಟಮೈಸ್ ಮಾಡಿ"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"ಲಾಕ್ ಸ್ಕ್ರೀನ್ ಅನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಲು ಅನ್‌ಲಾಕ್ ಮಾಡಿ"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"ವೈ-ಫೈ ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"ಕ್ಯಾಮರಾವನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೊಫೋನ್‌ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"ಮೈಕ್ರೋಫೋನ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ಆದ್ಯತೆಯ ಮೋಡ್‌ ಆನ್‌ ಆಗಿದೆ"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant ನಿಮ್ಮ ಮಾತನ್ನು ಆಲಿಸುತ್ತಿದೆ"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಡೀಫಾಲ್ಟ್ ಟಿಪ್ಪಣಿಗಳ ಆ್ಯಪ್ ಅನ್ನು ಸೆಟ್ ಮಾಡಿ"</string>
+    <string name="install_app" msgid="5066668100199613936">"ಆ್ಯಪ್ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"ಮೈಕ್ರೊಫೋನ್ ಮತ್ತು ಕ್ಯಾಮರಾ"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"ಇತ್ತೀಚಿನ ಆ್ಯಪ್ ಬಳಕೆ"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"ಇತ್ತೀಚಿನ ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ನೋಡಿ"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"ಮುಗಿದಿದೆ"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"ಆಯ್ಕೆಗಳನ್ನು ವಿಸ್ತೃತಗೊಳಿಸಿ ಮತ್ತು ತೋರಿಸಿ"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"ಕುಗ್ಗಿಸಿ"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"ಈ ಆ್ಯಪ್‌ ಅನ್ನು ಮುಚ್ಚಿ"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> ಮುಚ್ಚಲಾಗಿದೆ"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"ಸೇವೆಯನ್ನು ನಿರ್ವಹಿಸಿ"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ನಿರ್ವಹಿಸಿ"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"ಫೋನ್ ಕರೆ ಮೂಲಕ ಬಳಕೆಯಲ್ಲಿದೆ"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"ಫೋನ್ ಕರೆಯಲ್ಲಿ ಇತ್ತೀಚಿಗೆ ಬಳಸಲಾಗಿದೆ"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> ನಿಂದ ಬಳಕೆಯಲ್ಲಿದೆ"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"ಇತ್ತೀಚೆಗೆ <xliff:g id="APP_NAME">%1$s</xliff:g> ಇದನ್ನು ಬಳಸಿದೆ"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> ನಿಂದ ಬಳಕೆಯಲ್ಲಿದೆ (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"ಇತ್ತೀಚೆಗೆ <xliff:g id="APP_NAME">%1$s</xliff:g> ಇದನ್ನು ಬಳಸಿದೆ (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> ನಿಂದ ಬಳಕೆಯಲ್ಲಿದೆ (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"ಇತ್ತೀಚೆಗೆ <xliff:g id="APP_NAME">%1$s</xliff:g> ಇದನ್ನು ಬಳಸಿದೆ (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-kn/strings_tv.xml b/packages/SystemUI/res/values-kn/strings_tv.xml
deleted file mode 100644
index cfcc896..0000000
--- a/packages/SystemUI/res/values-kn/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN ಕನೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN ಕನೆಕ್ಷನ್ ಕಡಿತಗೊಂಡಿದೆ"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> ಮೂಲಕ"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"ಅಧಿಸೂಚನೆಗಳು"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"ಯಾವುದೇ ಅಧಿಸೂಚನೆಗಳಿಲ್ಲ"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"ಮೈಕ್ರೊಫೋನ್ ರೆಕಾರ್ಡಿಂಗ್ ಆಗುತ್ತಿದೆ"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"ಕ್ಯಾಮರಾ ರೆಕಾರ್ಡಿಂಗ್ ಆಗುತ್ತಿದೆ"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೊಫೋನ್ ರೆಕಾರ್ಡಿಂಗ್ ಆಗುತ್ತಿವೆ"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"ಮೈಕ್ರೊಫೋನ್ ರೆಕಾರ್ಡಿಂಗ್ ನಿಲ್ಲಿಸಿದೆ"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"ಕ್ಯಾಮರಾ ರೆಕಾರ್ಡಿಂಗ್ ನಿಲ್ಲಿಸಲಾಗಿದೆ"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೊಫೋನ್ ರೆಕಾರ್ಡಿಂಗ್ ನಿಲ್ಲಿಸಿವೆ"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭವಾಗಿದೆ"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"ಸ್ಕ್ರೀನ್ ರೆಕಾರ್ಡಿಂಗ್ ನಿಲ್ಲಿಸಲಾಗಿದೆ"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 32e27ee..d267fed 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB 사용"</string>
     <string name="learn_more" msgid="4690632085667273811">"자세히 알아보기"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"스크린샷"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"잠금 해제 연장 사용 중지됨"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"잠금 해제 유지 사용 중지됨"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"이미지 보냄"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"캡쳐화면 저장 중..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"직장 프로필에 스크린샷 저장 중…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g>에서 이 스크린샷을 감지했습니다."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> 및 기타 공개 앱에서 이 스크린샷을 감지했습니다."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"메모에 추가"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"화면 녹화"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"화면 녹화"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"화면 녹화 처리 중"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"화면 녹화 세션에 관한 지속적인 알림"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"녹화를 시작하시겠습니까?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Android 시스템이 녹화 중에 화면에 표시되거나 기기에서 재생되는 민감한 정보를 캡처할 수 있습니다. 여기에는 비밀번호, 결제 정보, 사진, 메시지 및 오디오가 포함됩니다."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"전체 화면 녹화"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"단일 앱 녹화"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"녹화할 때 Android에서 화면에 표시되거나 기기에서 재생되는 모든 항목에 액세스할 수 있습니다. 따라서 비밀번호, 결제 세부정보, 메시지 등 민감한 정보가 노출되지 않도록 주의하세요."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"앱을 녹화할 때 Android에서 해당 앱에서 표시되거나 재생되는 모든 항목에 액세스할 수 있으므로 비밀번호, 결제 세부정보, 메시지 등 민감한 정보가 노출되지 않도록 주의하세요."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"녹화 시작"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"녹화를 시작하시겠습니까?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"녹화 중에는 Android가 화면에 표시되거나 기기에서 재생되는 모든 항목에 액세스할 수 있습니다. 따라서 비밀번호, 결제 세부정보, 메시지, 사진, 오디오 및 동영상 등이 노출되지 않도록 주의하세요."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"앱을 녹화할 때 Android가 해당 앱에 표시되거나 재생되는 모든 항목에 액세스할 수 있으므로 비밀번호, 결제 세부정보, 메시지, 사진, 오디오 및 동영상 등이 노출되지 않도록 주의하세요."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"녹화 시작"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"오디오 녹음"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"기기 오디오"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"음악, 통화, 벨소리와 같이 기기에서 나는 소리"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"마이크"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"기기 오디오 및 마이크"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"시작"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"시작"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"화면 녹화 중"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"화면 및 오디오 녹화/녹음 중"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"화면에 터치 표시"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"공유"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"화면 녹화 저장됨"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"탭하여 보기"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"화면 녹화는 삭제하는 중에 오류가 발생했습니다."</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"화면 녹화 저장 중에 오류가 발생했습니다."</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"화면 녹화 시작 중 오류 발생"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"전체 화면 모드"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"종료하려면 위에서 아래로 스와이프합니다."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"확인"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"뒤로"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"홈"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"메뉴"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"얼굴이 인증되었습니다."</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"확인함"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"완료하려면 확인을 탭하세요."</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"얼굴 인식으로 잠금 해제되었습니다. 계속하려면 잠금 해제 아이콘을 누르세요."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"얼굴 인식으로 잠금 해제되었습니다."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"얼굴 인식으로 잠금 해제되었습니다. 계속하려면 누르세요."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"얼굴이 인식되었습니다. 계속하려면 누르세요."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"얼굴이 인식되었습니다. 계속하려면 아이콘을 누르세요."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"인증됨"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"인증 취소"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN 사용"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"패턴 사용"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"비밀번호 사용"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"다음번 시도에서 잘못된 패턴을 입력하면 직장 프로필 및 관련 데이터가 삭제됩니다."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"다음번 시도에서 잘못된 PIN을 입력하면 직장 프로필 및 관련 데이터가 삭제됩니다."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"다음번 시도에서 잘못된 비밀번호를 입력하면 직장 프로필 및 관련 데이터가 삭제됩니다."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"설정"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"나중에"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"이는 보안 및 성능 향상을 위해 필요합니다."</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"지문 잠금 해제 다시 설정"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"지문 잠금 해제"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"지문 잠금 해제 설정"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"지문 잠금 해제를 다시 설정하기 위해 현재 지문 이미지와 모델이 삭제됩니다.\n\n삭제된 후 지문을 사용하여 휴대전화 잠금을 해제하거나 본인을 확인하려면 지문 잠금 해제를 다시 설정해야 합니다."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"지문 잠금 해제를 다시 설정하기 위해 현재 지문 이미지와 모델이 삭제됩니다.\n\n삭제된 후 지문을 사용하여 휴대전화 잠금을 해제하거나 본인을 확인하려면 지문 잠금 해제를 다시 설정해야 합니다."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"지문 잠금 해제를 설정할 수 없습니다. 설정으로 이동하여 다시 시도해 보세요."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"얼굴 인식 잠금 해제 다시 설정"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"얼굴 인식 잠금 해제"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"얼굴 인식 잠금 해제 설정하기"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"얼굴 인식 잠금 해제를 다시 설정하기 위해 현재 얼굴 모델이 삭제됩니다.\n\n얼굴을 사용하여 휴대전화 잠금을 해제하려면 이 기능을 다시 설정해야 합니다."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"얼굴 인식 잠금 해제를 설정할 수 없습니다. 설정으로 이동하여 다시 시도해 보세요."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"지문 센서를 터치하세요."</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"계속하려면 잠금 해제 아이콘을 누르세요."</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"얼굴을 인식할 수 없습니다. 대신 지문을 사용하세요."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"오디오"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"헤드셋"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"입력"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"보청기"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"보청기"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"켜는 중..."</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"자동 회전"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"화면 자동 회전"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"얼굴 인식으로 잠금 해제되었습니다."</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"얼굴이 인식되었습니다."</string>
     <string name="keyguard_retry" msgid="886802522584053523">"위로 스와이프하여 다시 시도해 주세요"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"얼굴 인식 잠금 해제를 다시 시도하려면 위로 스와이프하세요."</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"잠금 해제하여 NFC 사용"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"내 조직에 속한 기기입니다."</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>에 속한 기기입니다."</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"사용자를 삭제할까요?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"이 사용자의 모든 앱과 데이터가 삭제됩니다."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"삭제"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>이 녹화 또는 전송 중에 화면에 표시되거나 기기에서 재생되는 모든 정보에 액세스할 수 있습니다. 여기에는 비밀번호, 결제 세부정보, 사진, 메시지, 재생하는 오디오 같은 정보가 포함됩니다."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"이 기능을 제공하는 서비스는 녹화 또는 전송 중에 화면에 표시되거나 기기에서 재생되는 모든 정보에 액세스할 수 있습니다. 여기에는 비밀번호, 결제 세부정보, 사진, 메시지, 재생하는 오디오 같은 정보가 포함됩니다."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"녹화 또는 전송을 시작하시겠습니까?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>으로 녹화 또는 전송을 시작하시겠습니까?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>에서 공유 또는 녹화하도록 허용할까요?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"전체 화면"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"단일 앱"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"공유하거나 녹화하거나 전송할 때 <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 앱에서 화면에 표시되거나 기기에서 재생되는 모든 항목에 액세스할 수 있습니다. 따라서 비밀번호, 결제 세부정보, 메시지 등 민감한 정보가 노출되지 않도록 주의하세요."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"앱을 공유하거나 녹화하거나 전송할 때는 <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>에서 해당 앱에 표시되거나 앱에서 재생되는 모든 항목에 액세스할 수 있으므로 비밀번호, 결제 세부정보, 메시지 등 민감한 정보가 노출되지 않도록 주의하세요."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"계속"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"앱 공유 또는 녹화"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"앱에서 공유하거나 기록하도록 허용하시겠습니까?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"공유하거나 녹화하거나 전송할 때 이 앱에서 화면에 표시되거나 기기에서 재생되는 모든 항목에 액세스할 수 있습니다. 따라서 비밀번호, 결제 세부정보, 메시지 등 민감한 정보가 노출되지 않도록 주의하세요."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"앱을 공유하거나 녹화하거나 전송할 때는 이 앱에서 해당 앱에 표시되거나 재생되는 모든 항목에 액세스할 수 있으므로 비밀번호, 결제 세부정보, 메시지 등 민감한 정보가 노출되지 않도록 주의하세요."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 앱이 녹화 또는 전송 중에 화면에 표시되거나 기기에서 재생되는 모든 정보에 액세스할 수 있습니다. 여기에는 비밀번호, 결제 세부정보, 사진, 메시지, 사용자가 재생하는 오디오 등의 정보가 포함됩니다."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"녹화 또는 전송을 시작하시겠습니까?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"이 기능을 제공하는 서비스는 녹화 또는 전송 중에 화면에 표시되거나 기기에서 재생되는 모든 정보에 액세스할 수 있습니다. 여기에는 비밀번호, 결제 세부정보, 사진, 메시지, 사용자가 재생하는 오디오 등의 정보가 포함됩니다."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"전체 화면"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"단일 앱"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"앱 공유 또는 녹화"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 앱으로 녹화 또는 전송을 시작하시겠습니까?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"공유, 녹화 또는 전송 중에 <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 앱이 화면에 표시되거나 기기에서 재생되는 모든 항목에 액세스할 수 있습니다. 따라서 비밀번호, 결제 세부정보, 메시지, 사진, 오디오 및 동영상 등이 노출되지 않도록 주의하세요."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"앱을 공유, 녹화 또는 전송할 때는 <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 앱이 해당 앱에 표시되거나 재생되는 모든 항목에 액세스할 수 있으므로 비밀번호, 결제 세부정보, 메시지, 사진, 오디오 및 동영상 등이 노출되지 않도록 주의하세요."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"시작"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"전송을 시작하시겠습니까?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"전송 중에는 Android가 화면에 표시되거나 기기에서 재생되는 모든 항목에 액세스할 수 있습니다. 따라서 비밀번호, 결제 세부정보, 메시지, 사진, 오디오 및 동영상 등이 노출되지 않도록 주의하세요."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"앱을 전송할 때 Android가 해당 앱에 표시되거나 재생되는 모든 항목에 액세스할 수 있으므로 비밀번호, 결제 세부정보, 메시지, 사진, 오디오 및 동영상 등이 노출되지 않도록 주의하세요."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"전송 시작하기"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"공유를 시작하시겠습니까?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"공유, 녹화 또는 전송 중에 Android가 화면에 표시되거나 기기에서 재생되는 모든 항목에 액세스할 수 있습니다. 따라서 비밀번호, 결제 세부정보, 메시지, 사진, 오디오 및 동영상 등이 노출되지 않도록 주의하세요."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"앱을 공유, 녹화 또는 전송할 때는 Android가 해당 앱에 표시되거나 재생되는 모든 항목에 액세스할 수 있으므로 비밀번호, 결제 세부정보, 메시지, 사진, 오디오 및 동영상 등이 노출되지 않도록 주의하세요."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"시작"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"앱을 전환할 때 공유를 일시중지합니다."</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"대신 이 앱 공유"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"다시 전환"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"앱 전환"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"IT 관리자에 의해 차단됨"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"기기 정책에 의해 화면 캡처가 사용 중지되었습니다."</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"모두 지우기"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"이 기기에는 인증기관이 설치되어 있습니다. 보안 네트워크 트래픽을 모니터링 또는 수정할 수 있습니다."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"관리자가 기기에서 발생하는 트래픽을 모니터링하는 네트워크 로깅을 사용 설정했습니다."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"관리자가 직장 프로필에서 발생하는 트래픽을 모니터링하는 네트워크 로깅을 사용 설정했습니다. 하지만 개인 프로필은 모니터링되지 않습니다."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"이 기기는 <xliff:g id="VPN_APP">%1$s</xliff:g> 앱을 통해 인터넷에 연결됩니다. IT 관리자가 이메일, 인터넷 사용 기록 등 내 네트워크 활동을 볼 수 있습니다."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"이 기기가 <xliff:g id="VPN_APP">%1$s</xliff:g>을(를) 통해 인터넷에 연결됩니다. VPN 제공업체가 이메일, 인터넷 사용 기록 등 내 네트워크 활동을 볼 수 있습니다."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"이 기기는 <xliff:g id="VPN_APP">%1$s</xliff:g> 앱을 통해 인터넷에 연결됩니다. IT 관리자가 이메일, 인터넷 사용 기록 등 내 네트워크 활동을 볼 수 있습니다."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"이 기기는 <xliff:g id="VPN_APP_0">%1$s</xliff:g> 및 <xliff:g id="VPN_APP_1">%2$s</xliff:g> 앱을 통해 인터넷에 연결됩니다. IT 관리자가 이메일, 인터넷 사용 기록 등 내 네트워크 활동을 볼 수 있습니다."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"직장 앱은 <xliff:g id="VPN_APP">%1$s</xliff:g> 앱을 통해 인터넷에 연결됩니다. IT 관리자와 VPN 제공업체가 이메일, 인터넷 사용 기록 등 직장 앱에서 이루어진 내 네트워크 활동을 볼 수 있습니다."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"개인 앱은 <xliff:g id="VPN_APP">%1$s</xliff:g> 앱을 통해 인터넷에 연결됩니다. VPN 제공업체가 이메일, 인터넷 사용 기록 등 내 네트워크 활동을 볼 수 있습니다."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"사용 중지"</string>
     <string name="sound_settings" msgid="8874581353127418308">"소리 및 진동"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"설정"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"청력 보호를 위해 적정 볼륨으로 낮춤"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"볼륨이 권장 시간보다 긴 시간 동안 높은 상태였습니다"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"볼륨을 안전한 수준으로 낮춤"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"헤드폰 볼륨이 권장 시간보다 오랫동안 높은 상태였습니다."</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"헤드폰 볼륨이 이번 주 안전 한도를 초과했습니다."</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"볼륨 유지하기"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"볼륨 낮추기"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"앱 고정됨"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"고정 해제할 때까지 계속 표시됩니다. 고정 해제하려면 뒤로 및 최근 사용을 길게 터치하세요."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"고정 해제할 때까지 계속 표시됩니다. 고정 해제하려면 뒤로 및 홈을 길게 터치하세요."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"전원 메뉴"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g>페이지 중 <xliff:g id="ID_1">%1$d</xliff:g>페이지"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"잠금 화면"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"발열로 인해 휴대전화 전원이 종료됨"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"이제 휴대전화가 정상적으로 작동합니다.\n자세히 알아보려면 탭하세요."</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"휴대전화가 과열되어 온도를 낮추기 위해 전원이 종료되었습니다. 지금은 휴대전화가 정상적으로 실행 중입니다.\n\n휴대전화가 과열되는 이유는 다음과 같습니다.\n	• 리소스를 많이 사용하는 앱 사용(예: 게임, 동영상 또는 내비게이션 앱)\n	• 대용량 파일을 다운로드 또는 업로드\n	• 온도가 높은 곳에서 휴대폰 사용"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"해결 방법 확인하기"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"휴대전화 온도가 높음"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"휴대전화 온도를 낮추는 동안 일부 기능이 제한됩니다.\n자세히 알아보려면 탭하세요."</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"휴대전화 온도를 자동으로 낮추려고 시도합니다. 휴대전화를 계속 사용할 수는 있지만 작동이 느려질 수도 있습니다.\n\n휴대전화 온도가 낮아지면 정상적으로 작동됩니다."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"해결 방법 확인하기"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"기기 분리하기"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"기기의 충전 포트 주변 온도가 상승하고 있습니다. 충전기나 USB 액세서리가 연결된 상태라면 분리하세요. 이때 케이블도 뜨거울 수 있으므로 주의하시기 바랍니다."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"전체 화면 확대"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"화면 일부 확대"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"확대 설정 열기"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"확대 설정 닫기"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"모서리를 드래그하여 크기 조절"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"대각선 스크롤 허용"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"크기 조절"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"즐겨찾기에서 삭제"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"다음 위치로 이동: <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"제어"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
-    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"길게 누르고 드래그하여 컨트롤 재정렬"</string>
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"빠르게 액세스하려면 기기 제어를 선택하세요"</string>
+    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"길게 누른 다음 드래그하여 컨트롤 재정렬"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"모든 컨트롤 삭제됨"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"변경사항이 저장되지 않음"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"다른 앱 보기"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"다시 정렬"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"제어 기능 추가"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"컨트롤 추가"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"수정 모드로 돌아가기"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"컨트롤을 로드할 수 없습니다. <xliff:g id="APP">%s</xliff:g> 앱에서 설정이 변경되지 않았는지 확인하세요."</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"호환 컨트롤을 사용할 수 없습니다."</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"다른 PIN으로 다시 시도"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> 변경 확인"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"자세히 보려면 스와이프하세요."</string>
+    <string name="retry_face" msgid="416380073082560186">"얼굴 인증 다시 시도"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"추천 제어 기능 로드 중"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"미디어"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g>에 대한 미디어 컨트롤을 숨길까요?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g>의 미디어 컨트롤을 숨길까요?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"현재 미디어 세션은 숨길 수 없습니다."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"숨기기"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"다시 시작"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"설정"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g>에서 <xliff:g id="ARTIST_NAME">%2$s</xliff:g>의 <xliff:g id="SONG_NAME">%1$s</xliff:g> 재생 중"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> 실행 중"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"재생"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"일시중지"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"이전 트랙"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"스피커 및 디스플레이"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"추천 기기"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"미디어를 다른 기기로 이동하려면 공유 세션을 중지하세요."</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"중지"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"브로드캐스팅 작동 원리"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"브로드캐스트"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"호환되는 블루투스 기기를 가진 근처의 사용자가 내가 브로드캐스트 중인 미디어를 수신 대기할 수 있습니다."</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"저장할 수 없습니다. 다시 시도해 주세요."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"저장할 수 없습니다."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"4자 이상 입력하세요."</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"16자 미만이어야 합니다."</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g>자 미만이어야 합니다."</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"빌드 번호"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"빌드 번호가 클립보드에 복사되었습니다."</string>
     <string name="basic_status" msgid="2315371112182658176">"대화 열기"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"배터리 수준을 읽는 중에 문제가 발생함"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"탭하여 자세한 정보를 확인하세요."</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"설정된 알람 없음"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"화면 잠금 입력"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"지문 센서"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"인증"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"기기 입력"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"어시스턴트가 대기 중입니다."</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="note_task_button_label" msgid="8718616095800343136">"메모"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"메모"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"메모, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"자세히 알아보기"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"<xliff:g id="URL">%s</xliff:g>에서 자세히 알아보세요."</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> 열기"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• 앱이 설정되어 있습니다."</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• 1개 이상의 카드가 월렛에 추가되어 있습니다."</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• 카메라 앱이 설치되어 있습니다."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• 앱이 설정되어 있습니다."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• 1대 이상의 기기를 사용할 수 있습니다."</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"월렛 앱을 바로가기로 추가하려면 앱이 설치되어 있는지 확인하세요."</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"월렛 앱을 바로가기로 추가하려면 하나 이상의 카드가 추가되어 있는지 확인하세요."</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR 코드 스캐너를 바로가기로 추가하려면 카메라 앱이 설치되어 있는지 확인하세요."</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home 앱을 바로가기로 추가하려면 앱이 설치되어 있는지 확인하세요."</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• 1대 이상의 기기를 사용할 수 있습니다."</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"메모 바로가기를 사용하려면 기본 메모 앱을 선택합니다."</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"앱 선택"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"바로가기를 길게 터치하세요."</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"취소"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"지금 화면 전환"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"스타일러스를 충전기에 연결하세요"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"스타일러스 배터리 부족"</string>
     <string name="video_camera" msgid="7654002575156149298">"비디오 카메라"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"이 프로필에서 전화를 걸 수 없음"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"직장 정책이 직장 프로필에서만 전화를 걸도록 허용합니다."</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"개인 앱에서 통화를 걸 수 없습니다"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"귀하의 조직에서 직장 앱을 사용한 통화만 허용했습니다."</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"직장 프로필로 전환"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"닫기"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"직장 전화 앱 설치"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"취소"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"잠금 화면 맞춤 설정"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"잠금 화면 맞춤설정을 위해 잠금 해제"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi를 사용할 수 없음"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"카메라 차단됨"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"카메라 및 마이크 차단됨"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"마이크 차단됨"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"우선순위 모드 설정됨"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"어시스턴트가 대기 중임"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"설정에서 기본 메모 앱 설정"</string>
+    <string name="install_app" msgid="5066668100199613936">"앱 설치"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"마이크 및 카메라"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"최근 앱 사용"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"최근 액세스 보기"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"완료"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"펼치기 및 옵션 보기"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"접기"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"이 앱 종료"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> 종료됨"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"서비스 관리"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"액세스 권한 관리"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"전화 통화에서 사용 중"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"최근 전화 통화에서 사용됨"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 사용 중"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"최근 <xliff:g id="APP_NAME">%1$s</xliff:g>에서 사용됨"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 사용 중(<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"최근 <xliff:g id="APP_NAME">%1$s</xliff:g>에서 사용됨(<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 사용 중(<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"최근 <xliff:g id="APP_NAME">%1$s</xliff:g>에서 사용됨(<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ko/strings_tv.xml b/packages/SystemUI/res/values-ko/strings_tv.xml
deleted file mode 100644
index 2412ae8..0000000
--- a/packages/SystemUI/res/values-ko/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN에 연결됨"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN 연결이 해제됨"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g>에 연결됨"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"알림"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"알림 없음"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"마이크 녹음 중"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"카메라 녹화 중"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"카메라 녹화 및 마이크 녹음 중"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"마이크 녹음 중단됨"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"카메라 녹화 중단됨"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"카메라 녹화 및 마이크 녹음 중단됨"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"화면 녹화가 시작되었습니다."</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"화면 녹화가 중지되었습니다."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index 6b78db8..768e8a5 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -19,7 +19,7 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="4811759950673118541">"Тутум UI"</string>
+    <string name="app_label" msgid="4811759950673118541">"Система UI"</string>
     <string name="battery_low_title" msgid="5319680173344341779">"Батареяны үнөмдөгүч режими күйгүзүлсүнбү?"</string>
     <string name="battery_low_description" msgid="3282977755476423966">"Батареянын деңгээли: <xliff:g id="PERCENTAGE">%s</xliff:g>. Батареяны үнөмдөгүч режиминде караңгы тема күйгүзүлүп, фондогу процесстер чектелип, билдирмелер көрүнбөй калат."</string>
     <string name="battery_low_intro" msgid="5148725009653088790">"Батареяны үнөмдөгүч режиминде караңгы тема күйгүзүлүп, фондогу процесстер чектелип, билдирмелер көрүнбөй калат."</string>
@@ -53,8 +53,8 @@
     <string name="usb_debugging_allow" msgid="1722643858015321328">"Ооба"</string>
     <string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"USB мүчүлүштүктөрүн оңдоого уруксат жок"</string>
     <string name="usb_debugging_secondary_user_message" msgid="1888835696965417845">"Учурда ушул түзмөккө кирип турган колдонуучу USB аркылуу мүчүлүштүктөрдү оңдоо функциясын күйгүзө албайт. Бул функцияны пайдалануу үчүн админге которулуңуз."</string>
-    <string name="hdmi_cec_set_menu_language_title" msgid="1259765420091503742">"Тутум тилин <xliff:g id="LANGUAGE">%1$s</xliff:g> тилине өзгөртөсүзбү?"</string>
-    <string name="hdmi_cec_set_menu_language_description" msgid="8176716678074126619">"Тутум тилин өзгөртүү сурамы башка түзмөктөн жөнөтүлдү"</string>
+    <string name="hdmi_cec_set_menu_language_title" msgid="1259765420091503742">"Система тилин <xliff:g id="LANGUAGE">%1$s</xliff:g> тилине өзгөртөсүзбү?"</string>
+    <string name="hdmi_cec_set_menu_language_description" msgid="8176716678074126619">"Система тилин өзгөртүү сурамы башка түзмөктөн жөнөтүлдү"</string>
     <string name="hdmi_cec_set_menu_language_accept" msgid="2513689457281009578">"Тилди өзгөртүү"</string>
     <string name="hdmi_cec_set_menu_language_decline" msgid="7650721096558646011">"Учурдагы тилди калтыруу"</string>
     <string name="wifi_debugging_title" msgid="7300007687492186076">"Ушул тармакта мүчүлүштүктөрдү Wi-Fi аркылуу аныктоого уруксат бересизби?"</string>
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB’ни иштетүү"</string>
     <string name="learn_more" msgid="4690632085667273811">"Кененирээк"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Скриншот"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"\"Кулпуну ачуу\" функциясы өчүрүлдү"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Кулпуланбаган режим өчүрүлдү"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"сүрөт жөнөттү"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Скриншот сакталууда..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Скриншот жумуш профилине сакталууда…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> ушул скриншотту аныктады."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> жана ачылып турган башка колдонмолор ушул скриншотту аныктады."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Кыска жазууга кошуу"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"экрандан видео жаздырып алуу"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Экрандан видео жаздырып алуу"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Экрандан жаздырылып алынган видео иштетилүүдө"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Экранды жаздыруу сеансы боюнча учурдагы билдирме"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Жаздырып баштайсызбы?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Сырсөздөр, төлөм маалыматы, сүрөттөр, билдирүүлөр жана аудиофайлдар сыяктуу экраныңызда көрүнүп турган жана түзмөктө ойноп жаткан бардык купуя маалымат жазылып калат."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Бүтүндөй экранды жаздыруу"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Жалгыз колдонмону жаздыруу"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Жаздырып жатканыңызда Android экраныңызда көрүнүп жана түзмөктө ойнотулуп жаткан нерселерге мүмкүнчүлүк алат. Андыктан сырсөздөрдү, төлөм маалыматын, билдирүүлөрдү жана башка купуя маалыматты көрсөтүп албаңыз."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Жаздырып жатканыңызда Android ал колдонмодо көрүнүп жана ойнотулуп жаткан нерселерге мүмкүнчүлүк алат. Андыктан сырсөздөрдү, төлөм маалыматын, билдирүүлөрдү жана башка купуя маалыматты көрсөтүп албаңыз."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Жаздырып баштоо"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Жаздырып баштайсызбы?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Жаздырып жатканыңызда Android экраныңызда көрүнүп жана түзмөктө ойнотулуп жаткан нерселерди көрө алат. Андыктан сырсөздөрдү, төлөмдүн чоо-жайын, билдирүүлөрдү, сүрөттөрдү, аудио жана видеону көрсөтүп албаңыз."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Колдонмону жаздырып жатканда Android ал колдонмодо көрсөтүлүп жана ойнотулуп жаткан нерселерди көрө алат. Андыктан сырсөздөрдү, төлөмдүн чоо-жайын, билдирүүлөрдү, сүрөттөрдү, аудио жана видеону көрсөтүп албаңыз."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Жаздырып баштоо"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Аудио жаздыруу"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Түзмөктөгү аудиолор"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Музыка, чалуулар жана шыңгырлар сыяктуу түзмөгүңүздөгү добуштар"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Микрофон"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Түзмөктөгү аудиолор жана микрофон"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Баштадык"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Баштоо"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Экран жаздырылууда"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Экран жана аудио жаздырылууда"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Экранды басууларды көрсөтүү"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Бөлүшүү"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Экрандан жаздырылган нерсе сакталды"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Көрүү үчүн таптаңыз"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Экранды жаздырууну өчүрүүдө ката кетти"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Экран тартылган жок"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Экранды жаздырууну баштоодо ката кетти"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Толук экран режимин көрүү"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Чыгуу үчүн экранды ылдый сүрүп коюңуз."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Түшүндүм"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Артка"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Үйгө"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Меню"</string>
@@ -136,7 +136,7 @@
     <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="cancel" msgid="1089011503403416730">"Жок"</string>
+    <string name="cancel" msgid="1089011503403416730">"Баш тартуу"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Ырастоо"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Кайталоо"</string>
     <string name="biometric_dialog_empty_space_description" msgid="3330555462071453396">"Аныктыгын текшерүүнү жокко чыгаруу үчүн таптаңыз"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Жүздүн аныктыгы текшерилди"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Ырасталды"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Бүтүрүү үчүн \"Ырастоо\" баскычын басыңыз"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Кулпуну жүзүңүз менен ачтыңыз. Улантуу үчүн кулпусун ачуу сүрөтчөсүн басыңыз."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Түзмөгүңүздү жүзүңүз менен ачтыңыз"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Кулпуну жүзүңүз менен ачтыңыз. Улантуу үчүн басыңыз."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Жүз таанылды. Улантуу үчүн басыңыз."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Жүз таанылды. Улантуу үчүн кулпусун ачуу сүрөтчөсүн басыңыз."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Аныктыгы текшерилди"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Аныктыгын текшерүүнү жокко чыгаруу"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN кодду колдонуу"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Графикалык ачкычты колдонуу"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Сырсөз колдонуу"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Эгер графикалык ачкычты дагы бир жолу туура эмес киргизсеңиз, жумуш профилиңиз жана андагы маалыматтын баары өчөт."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Эгер PIN кодду дагы бир жолу туура эмес киргизсеңиз, жумуш профилиңиз жана андагы маалыматтын баары өчөт."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Эгер сырсөздү дагы бир жолу туура эмес киргизсеңиз, жумуш профилиңиз жана андагы маалыматтын баары өчөт."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Орнотуу"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Азыр эмес"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Бул коопсуздукту жана майнаптуулукту жогорулатуу үчүн талап кылынат"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Манжа изи менен ачуу функциясын кайра жөндөө"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Манжа изи менен ачуу"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Кулпуланган түзмөктү манжа изи менен ачуу"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Манжа изи менен ачуу функциясын тууралоо үчүн учурдагы манжа изи сүрөттөрү менен үлгүлөр өчүрүлөт.\n\nАлар өчүрүлгөндөн кийин, манжа изиңизди колдонуп телефонуңуздун кулпусун ачуу же өзүңүздү ырастоо үчүн Манжа изи менен ачуу функциясын кайра жөндөшүңүз керек."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Манжа изи менен ачуу функциясын тууралоо үчүн учурдагы манжа изи сүрөттөрү менен үлгүсү өчүрүлөт.\n\nАлар өчүрүлгөндөн кийин, манжа изиңизди колдонуп телефонуңуздун кулпусун ачуу же өзүңүздү ырастоо үчүн Манжа изи менен ачуу функциясын кайра жөндөшүңүз керек."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Манжа изи менен ачуу функциясы жөндөлгөн жок. Параметрлерге өтүп, кайталап көрүңүз."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Жүзүнөн таанып ачуу функциясын кайра коюңуз"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Жүзүнөн таанып ачуу"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Жүзүнөн таанып ачууну коюу"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Жүзүнөн таанып ачуу функциясын кошуу үчүн жүзүңүздүн учурдагы үлгүсү өчүрүлөт.\n\nТелефонуңуздун кулпусун жүзүңүз аркылуу ачуу үчүн бул функцияны кайра жөндөшүңүз керек болот."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Жүзүнөн таанып ачуу функциясы кошулган жок. Параметрлерге өтүп, кайталап көрүңүз."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Манжа изинин сенсорун басыңыз"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Улантуу үчүн кулпусун ачуу сүрөтчөсүн басыңыз"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Жүз таанылбай жатат. Манжа изин колдонуңуз."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Аудио"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Гарнитура"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Киргизүү"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Угуу аппараттары"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Угуу аппараттары"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Күйгүзүлүүдө…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Авто буруу"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Экранды авто буруу"</string>
@@ -257,7 +273,7 @@
     <string name="quick_settings_cast_no_wifi" msgid="6980194769795014875">"Wi-Fi туташкан жок"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"Жарыктыгы"</string>
     <string name="quick_settings_inversion_label" msgid="3501527749494755688">"Түстөрдү инверсиялоо"</string>
-    <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Түсүн тууралоо"</string>
+    <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Түстөрдү тууралоо"</string>
     <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"Арип өлчөмү"</string>
     <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Колдонуучуларды тескөө"</string>
     <string name="quick_settings_done" msgid="2163641301648855793">"Бүттү"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Түзмөгүңүздү жүзүңүз менен ачтыңыз"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Жүз таанылды"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Кайталоо үчүн экранды өйдө сүрүңүз"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Жүзүнөн таанып ачууну кайрадан колдонуу үчүн жогору сүрүңүз"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC колдонуу үчүн түзмөктүн кулпусун ачыңыз"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Бул түзмөк уюмуңузга таандык"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Бул түзмөк төмөнкүгө таандык: <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -379,23 +396,32 @@
     <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Жаңы колдонуучуну кошсоңуз, конок режими жабылып, учурдагы конок сеансындагы бардык колдонмолор жана башка нерселер өчүп калат."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Дагы колдонуучу кошууга болбойт"</string>
     <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_title" msgid="9124124694835811874">"Колдонуучуну өчүрөсүзбү?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Бул колдонуучунун бардык колдонмолору жана маалыматтары өчүрүлөт."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Өчүрүү"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Жаздырып же тышкы экранга чыгарып жатканда, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> колдонмосу экраныңыздагы бардык маалыматты же түзмөктө ойнолуп жаткан бардык нерселерди (сырсөздөрдү, төлөмдүн чоо-жайын, сүрөттөрдү, билдирүүлөрдү жана угуп жаткан аудиофайлдарды) көрө алат."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Жаздырып же тышкы экранга чыгарып жатканда, бул колдонмо экраныңыздагы бардык маалыматты же түзмөктө ойнолуп жаткан бардык нерселерди (сырсөздөрдү, төлөмдүн чоо-жайын, сүрөттөрдү, билдирүүлөрдү жана угуп жаткан аудиофайлдарды) көрө алат."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Жаздырып же тышкы экранга чыгарып баштайсызбы?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> колдонмосу аркылуу жаздырып же тышкы экранга чыгарып баштайсызбы?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> колдонмосуна экранды бөлүшүүгө же андан видео тартууга уруксат бересизби?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Бүтүндөй экран"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Жалгыз колдонмо"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Экранды көрсөтүп, тышка чыгарып же андан видео тартып жатканда, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> түзмөктүн экранындагы нерселердин баарын көрө алат. Андыктан сырсөздөр, төлөм маалыматы, билдирүүлөр сыяктуу купуя маалыматты киргизүүдө же көрүүдө этият болуңуз."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Экранды көрсөтүп, тышка чыгарып же андан видео тартып жатканда, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> түзмөктүн экранындагы нерселердин баарын көрө алат. Андыктан сырсөздөр, төлөм маалыматы, билдирүүлөр сыяктуу купуя маалыматты киргизүүдө же көрүүдө этият болуңуз."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Улантуу"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Колдонмону бөлүшүү же жаздыруу"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Бул колдонмого бөлүшүп же жаздырууга уруксат бересизби?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Экранды көрсөтүп, тышка чыгарып же андан видео тартып жатканда, бул колдонмо түзмөктүн экранындагы нерселердин баарын көрө алат. Андыктан сырсөздөр, төлөм маалыматы, билдирүүлөр сыяктуу купуя маалыматты киргизүүдө же көрүүдө этият болуңуз."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Экранды көрсөтүп, тышка чыгарып же андан видео тартып жатканда, бул колдонмо түзмөктүн экранындагы нерселердин баарын көрө алат. Андыктан сырсөздөр, төлөм маалыматы, билдирүүлөр сыяктуу купуя маалыматты киргизүүдө же көрүүдө этият болуңуз."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Жаздырып же тышкы экранга чыгарып жатканда <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> колдонмосу экраныңыздагы бардык маалыматты же түзмөктө ойнотулуп жаткан нерселерди көрө алат. Буга сырсөздөр, төлөмдүн чоо-жайы, сүрөттөр, билдирүүлөр жана ойнотулган аудио кирет."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Жаздырып же тышкы экранга чыгарып баштайсызбы?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Жаздырып же тышкы экранга чыгарып жатканда кызмат көрсөтүүчү экраныңыздагы бардык маалыматты же түзмөктө ойнотулуп жаткан нерселерди көрө алат. Буга сырсөздөр, төлөмдүн чоо-жайы, сүрөттөр, билдирүүлөр жана ойнотулган аудио кирет."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Бүтүндөй экран"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Жалгыз колдонмо"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Колдонмону бөлүшүү же жаздыруу"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> колдонмосу аркылуу жаздырып же тышкы экранга чыгарып баштайсызбы?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Бөлүшүп, жаздырып же тышкы экранга чыгарып жатканда <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> колдонмосу экраныңыздагы бардык маалыматты же түзмөктө ойнотулуп жаткан нерселерди көрө алат. Андыктан сырсөздөрдү, төлөмдүн чоо-жайын, билдирүүлөрдү, сүрөттөрдү, аудио жана видеону көрсөтүп албаңыз."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Колдонмону бөлүшүп, жаздырып же тышкы экранга чыгарганда <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> колдонмосу ал колдонмодо көрсөтүлүп жана ойнотулуп жаткан нерселерди көрө алат. Андыктан сырсөздөрдү, төлөмдүн чоо-жайын, билдирүүлөрдү, сүрөттөрдү, аудио жана видеону көрсөтүп албаңыз."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Баштоо"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Тышкы экранга чыгаруу башталсынбы?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Тышкы экранга чыгарганда Android экраныңызда көрүнүп жана түзмөктө ойнотулуп жаткан нерселерди көрө алат. Андыктан сырсөздөрдү, төлөмдүн чоо-жайын, билдирүүлөрдү, сүрөттөрдү, аудио жана видеону көрсөтүп албаңыз."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Колдонмону тышкы экранга чыгарганда Android ал колдонмодо көрсөтүлүп жана ойнотулуп жаткан нерселерди көрө алат. Андыктан сырсөздөрдү, төлөмдүн чоо-жайын, билдирүүлөрдү, сүрөттөрдү, аудио жана видеону көрсөтүп албаңыз."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Тышкы экранга чыгарып баштоо"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Бөлүшүү башталсынбы?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Бөлүшүп, жаздырып же тышкы экранга чыгарып жатканда Android экраныңыздагы бардык маалыматты же түзмөктө ойнотулуп жаткан нерселерди көрө алат. Андыктан сырсөздөрдү, төлөмдүн чоо-жайын, билдирүүлөрдү, сүрөттөрдү, аудио жана видеону көрсөтүп албаңыз."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Колдонмону бөлүшүп, жаздырып же тышкы экранга чыгарганда Android ал колдонмодо көрсөтүлүп жана ойнотулуп жаткан нерселерди көрө алат. Андыктан сырсөздөрдү, төлөмдүн чоо-жайын, билдирүүлөрдү, сүрөттөрдү, аудио жана видеону көрсөтүп албаңыз."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Баштоо"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Колдонмо которулганда бөлүшүү тындырылат"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Анын ордуна бул колдонмону бөлүшүү"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Кайра которулуу"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Колдонмону которуу"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"IT администраторуңуз бөгөттөп койгон"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Түзмөк саясаты экрандагыны тартып алууну өчүрүп койгон"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Баарын тазалап салуу"</string>
@@ -436,15 +462,16 @@
     <string name="monitoring_subtitle_ca_certificate" msgid="8588092029755175800">"Тастыктоочу борбордун тастыктамасы"</string>
     <string name="monitoring_button_view_policies" msgid="3869724835853502410">"Саясаттарды карап көрүү"</string>
     <string name="monitoring_button_view_controls" msgid="8316440345340701117">"Башкаруу элементтерин көрүү"</string>
-    <string name="monitoring_description_named_management" msgid="505833016545056036">"Бул түзмөк <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> уюмуна таандык.\n\nАдминистраторуңуз бул түзмөктөгү жөндөөлөрдү, корпоративдик ресурстарды пайдалануу мүмкүнчүлүгүн берген параметрлерди жана колдонмолорду, түзмөгүңүзгө байланыштуу маалыматтарды (мисалы, түзмөгүңүздүн жайгашкан жери сыяктуу) көзөмөлдөп башкара алат.\n\nТолугураак маалымат алуу үчүн IT администраторуңузга кайрылыңыз."</string>
+    <string name="monitoring_description_named_management" msgid="505833016545056036">"Бул түзмөк <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> уюмуна таандык.\n\nАдминистраторуңуз бул түзмөктөгү параметрлерди, корпоративдик ресурстарды пайдалануу мүмкүнчүлүгүн берген параметрлерди жана колдонмолорду, түзмөгүңүзгө байланыштуу маалыматтарды (мисалы, түзмөгүңүздүн жайгашкан жери сыяктуу) көзөмөлдөп башкара алат.\n\nТолугураак маалымат алуу үчүн IT администраторуңузга кайрылыңыз."</string>
     <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> бул түзмөк менен байланышкан маалыматты көрүп, колдонмолорду башкарып, анын параметрлерин өзгөртө алат.\n\nЭгер суроолоруңуз болсо, <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g> уюмуна кайрылыңыз."</string>
-    <string name="monitoring_description_management" msgid="4308879039175729014">"Бул түзмөк уюмуңузга таандык.\n\nАдминистраторуңуз бул түзмөктөгү жөндөөлөрдү, корпоративдик ресурстарды пайдалануу мүмкүнчүлүгүн берген параметрлерди жана колдонмолорду, түзмөгүңүзгө байланыштуу маалыматтарды (мисалы, түзмөгүңүздүн жайгашкан жери сыяктуу) көзөмөлдөп башкара алат.\n\nТолугураак маалымат алуу үчүн IT администраторуңузга кайрылыңыз."</string>
+    <string name="monitoring_description_management" msgid="4308879039175729014">"Бул түзмөк уюмуңузга таандык.\n\nАдминистраторуңуз бул түзмөктөгү параметрлерди, корпоративдик ресурстарды пайдалануу мүмкүнчүлүгүн берген параметрлерди жана колдонмолорду, түзмөгүңүзгө байланыштуу маалыматтарды (мисалы, түзмөгүңүздүн жайгашкан жери сыяктуу) көзөмөлдөп башкара алат.\n\nТолугураак маалымат алуу үчүн IT администраторуңузга кайрылыңыз."</string>
     <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"Ишканаңыз бул түзмөккө тастыктоочу борборду орнотту. Коопсуз тармагыңыздын трафиги көзөмөлдөнүп же өзгөртүлүшү мүмкүн."</string>
     <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"Ишканаңыз жумуш профилиңизге тастыктоочу борборду орнотту. Коопсуз тармагыңыздын трафиги көзөмөлдөнүп же өзгөртүлүшү мүмкүн."</string>
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Бул түзмөктө тастыктоочу борбор орнотулган. Коопсуз тармагыңыздын трафиги көзөмөлдөнүп же өзгөртүлүшү мүмкүн."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Администраторуңуз түзмөгүңүздөгү трафикти көзөмөлдөөчү тармактын таржымалын каттоо функциясын иштетти."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Администраторуңуз жумуш профилиңиздеги трафикке көз салуу үчүн, тармактын таржымалын иштетип койду (жеке профилиңизден маалымат алынбайт)."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Бул түзмөк Интернетке <xliff:g id="VPN_APP">%1$s</xliff:g> аркылуу туташып турат. Тармактагы аракеттериңиз, ошондой эле электрондук почтадагы жана серепчидеги нерселериңиз IT администраторуңузга көрүнүп турат."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Бул түзмөк Интернетке <xliff:g id="VPN_APP">%1$s</xliff:g> аркылуу туташып турат. Тармактагы аракеттериңиз, анын ичинде электрондук каттар жана серептөө дайындары VPN камсыздоочусуна көрүнөт."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Бул түзмөк Интернетке <xliff:g id="VPN_APP">%1$s</xliff:g> аркылуу туташып турат. Тармактагы аракеттериңиз, ошондой эле электрондук каттар жана серептөө дайындары IT администраторуңузга көрүнөт."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Бул түзмөк Интернетке <xliff:g id="VPN_APP_0">%1$s</xliff:g> жана <xliff:g id="VPN_APP_1">%2$s</xliff:g> аркылуу туташып турат. Тармактагы аракеттериңиз, ошондой эле электрондук почтадагы жана серепчидеги нерселериңиз IT администраторуңузга көрүнүп турат."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Жумуш колдонмолоруңуз Интернетке <xliff:g id="VPN_APP">%1$s</xliff:g> аркылуу туташып турушат. Тармакта жумуш колдонмолору аркылуу жасаган аракеттериңиз, ошондой эле электрондук почтадагы жана серепчидеги нерселериңиз IT администраторуңузга жана VPN провайдерине көрүнөт."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Жеке колдонмолоруңуз Интернетке <xliff:g id="VPN_APP">%1$s</xliff:g> аркылуу туташып турушат. Тармактагы аракеттериңиз, ошондой эле электрондук почтадагы жана серепчидеги нерселериңиз VPN провайдерине көрүнүп турат."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"өчүрүү"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Үн жана дирилдөө"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Параметрлер"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Коопсуз үн көлөмүнө төмөндөтүлдү"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Үн көлөмү сунушталгандан узагыраак убакыт жогору болду"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Үндүн катуулугу коопсуз деңгээлге чейин акырындатылды"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Гарнитуранын үнүн катуу чыгарып, сунушталган убакыттан узагыраак угуп жатасыз"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Гарнитуранын үнүнүн катуулугу бул аптада коопсуз деңгээлден жогору болду"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Уга берем"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Үнүн акырындатуу"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Колдонмо кадалды"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Ал бошотулмайынча көрүнө берет. Бошотуу үчүн \"Артка\" жана \"Назар\" баскычтарын басып, кармап туруңуз."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ал бошотулмайынча көрүнө берет. Бошотуу үчүн, \"Артка\" жана \"Башкы бет\" баскычтарын басып, кармап туруңуз."</string>
@@ -480,7 +510,7 @@
     <string name="screen_pinning_start" msgid="7483998671383371313">"Колдонмо кадалды"</string>
     <string name="screen_pinning_exit" msgid="4553787518387346893">"Кадалган колдонмо бошотулду"</string>
     <string name="stream_voice_call" msgid="7468348170702375660">"Чалуу"</string>
-    <string name="stream_system" msgid="7663148785370565134">"Тутум"</string>
+    <string name="stream_system" msgid="7663148785370565134">"Система"</string>
     <string name="stream_ring" msgid="7550670036738697526">"Шыңгыратуу"</string>
     <string name="stream_music" msgid="2188224742361847580">"Мультимедия"</string>
     <string name="stream_alarm" msgid="16058075093011694">"Ойготкуч"</string>
@@ -530,9 +560,9 @@
     <string name="tuner_warning" msgid="1861736288458481650">"System UI Tuner Android колдонуучу интерфейсин жөнгө салып жана ыңгайлаштыруунун кошумча ыкмаларын сунуштайт. Бул сынамык функциялар кийинки чыгарылыштарда өзгөрүлүп, бузулуп же жоголуп кетиши мүмкүн. Абайлап колдонуңуз."</string>
     <string name="tuner_persistent_warning" msgid="230466285569307806">"Бул сынамык функциялар кийинки чыгарылыштарда өзгөрүлүп, бузулуп же жоголуп кетиши мүмкүн. Абайлап колдонуңуз."</string>
     <string name="got_it" msgid="477119182261892069">"Түшүндүм"</string>
-    <string name="tuner_toast" msgid="3812684836514766951">"Куттуктайбыз! Жөндөөлөргө System UI Tuner кошулду"</string>
-    <string name="remove_from_settings" msgid="633775561782209994">"Жөндөөлөрдөн алып салуу"</string>
-    <string name="remove_from_settings_prompt" msgid="551565437265615426">"System UI Tuner Жөндөөлөрдөн өчүрүлүп, анын бардык функциялары токтотулсунбу?"</string>
+    <string name="tuner_toast" msgid="3812684836514766951">"Куттуктайбыз! Параметрлерге System UI Tuner кошулду"</string>
+    <string name="remove_from_settings" msgid="633775561782209994">"Параметрлерден алып салуу"</string>
+    <string name="remove_from_settings_prompt" msgid="551565437265615426">"System UI Tuner Параметрлерден өчүрүлүп, анын бардык функциялары токтотулсунбу?"</string>
     <string name="enable_bluetooth_title" msgid="866883307336662596">"Bluetooth күйгүзүлсүнбү?"</string>
     <string name="enable_bluetooth_message" msgid="6740938333772779717">"Баскычтобуңузду планшетиңизге туташтыруу үчүн, адегенде Bluetooth\'ту күйгүзүшүңүз керек."</string>
     <string name="enable_bluetooth_confirmation_ok" msgid="2866408183324184876">"Күйгүзүү"</string>
@@ -549,7 +579,7 @@
     <string name="notification_conversation_summary_low" msgid="1734433426085468009">"Үнү чыкпайт же дирилдебейт жана сүйлөшүүлөр тизмесинин ылдый жагында көрүнөт"</string>
     <string name="notification_channel_summary_default" msgid="777294388712200605">"Түзмөктүн параметрлерине жараша шыңгырап же дирилдеши мүмкүн"</string>
     <string name="notification_channel_summary_default_with_bubbles" msgid="3482483084451555344">"Түзмөктүн параметрлерине жараша шыңгырап же дирилдеши мүмкүн. <xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосундагы сүйлөшүүлөр демейки шартта калкып чыкма билдирмелер болуп көрүнөт."</string>
-    <string name="notification_channel_summary_automatic" msgid="5813109268050235275">"Билдирменин үнүн чыгартууну же басууну тутумга тапшырыңыз"</string>
+    <string name="notification_channel_summary_automatic" msgid="5813109268050235275">"Билдирменин үнүн чыгартууну же басууну системага тапшырыңыз"</string>
     <string name="notification_channel_summary_automatic_alerted" msgid="954166812246932240">"&lt;b&gt;Абалы:&lt;/b&gt; Демейкиге өзгөрдү"</string>
     <string name="notification_channel_summary_automatic_silenced" msgid="7403004439649872047">"&lt;b&gt;Абалы:&lt;/b&gt; Үнсүз абалга төмөндөдү"</string>
     <string name="notification_channel_summary_automatic_promoted" msgid="1301710305149590426">"&lt;b&gt;Абалы:&lt;/b&gt; Жогорулады"</string>
@@ -613,7 +643,7 @@
     <string name="keyboard_key_num_lock" msgid="7209960042043090548">"Num Lock"</string>
     <string name="keyboard_key_numpad_template" msgid="7316338238459991821">"Numpad <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="notif_inline_reply_remove_attachment_description" msgid="7954075334095405429">"Тиркемени алып салуу"</string>
-    <string name="keyboard_shortcut_group_system" msgid="1583416273777875970">"Тутум"</string>
+    <string name="keyboard_shortcut_group_system" msgid="1583416273777875970">"Система"</string>
     <string name="keyboard_shortcut_group_system_home" msgid="7465138628692109907">"Башкы бет"</string>
     <string name="keyboard_shortcut_group_system_recents" msgid="8628108256824616927">"Акыркылар"</string>
     <string name="keyboard_shortcut_group_system_back" msgid="1055709713218453863">"Артка"</string>
@@ -624,7 +654,7 @@
     <string name="keyboard_shortcut_search_list_title" msgid="1156178106617830429">"Ыкчам баскычтар"</string>
     <string name="keyboard_shortcut_search_list_hint" msgid="5982623262974326746">"Ыкчам баскычтарды издөө"</string>
     <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"Ыкчам баскычтар жок"</string>
-    <string name="keyboard_shortcut_search_category_system" msgid="1151182120757052669">"Тутум"</string>
+    <string name="keyboard_shortcut_search_category_system" msgid="1151182120757052669">"Система"</string>
     <string name="keyboard_shortcut_search_category_input" msgid="5440558509904296233">"Киргизүү"</string>
     <string name="keyboard_shortcut_search_category_open_apps" msgid="1450959949739257562">"Ачык колдон-лор"</string>
     <string name="keyboard_shortcut_search_category_current_app" msgid="2011953559133734491">"Учурдагы кол-мо"</string>
@@ -638,11 +668,11 @@
     <string name="group_system_cycle_back" msgid="5163464503638229131">"Соңку колдонмолорду көрүү (тескери тартипте)"</string>
     <string name="group_system_access_all_apps_search" msgid="488070738028991753">"Бардык колдонмолордун тизмесин ачуу жана издөө (Издөө/Жүргүзгүч)"</string>
     <string name="group_system_hide_reshow_taskbar" msgid="3809304065624351131">"Тапшырмалар тактасын жашыруу жана көрсөтүү"</string>
-    <string name="group_system_access_system_settings" msgid="7961639365383008053">"Тутум параметрлерине кирүү"</string>
+    <string name="group_system_access_system_settings" msgid="7961639365383008053">"Система параметрлерине кирүү"</string>
     <string name="group_system_access_google_assistant" msgid="1186152943161483864">"Google Жардамчыны иштетүү"</string>
     <string name="group_system_lock_screen" msgid="7391191300363416543">"Экранды кулпулоо"</string>
     <string name="group_system_quick_memo" msgid="2914234890158583919">"Ыкчам кыска жазууну түзүү"</string>
-    <string name="keyboard_shortcut_group_system_multitasking" msgid="1065232949510862593">"Тутумдун бир нече тапшырма аткаруусу"</string>
+    <string name="keyboard_shortcut_group_system_multitasking" msgid="1065232949510862593">"Системанын бир нече тапшырма аткаруусу"</string>
     <string name="system_multitasking_rhs" msgid="6593269428880305699">"Оң жакта жайгашкан учурдагы колдонмо менен экранды бөлүүнү иштетүү"</string>
     <string name="system_multitasking_lhs" msgid="8839380725557952846">"Сол жакта жайгашкан учурдагы колдонмо менен экранды бөлүүнү иштетүү"</string>
     <string name="system_multitasking_full_screen" msgid="1962084334200006297">"Экранды бөлүү режиминен толук экранга которулуу"</string>
@@ -666,7 +696,7 @@
     <string name="volume_dnd_silent" msgid="4154597281458298093">"Үндү көзөмөлдөөчү баскычтардын кыска жолдору"</string>
     <string name="battery" msgid="769686279459897127">"Батарея"</string>
     <string name="headset" msgid="4485892374984466437">"Гарнитура"</string>
-    <string name="accessibility_long_click_tile" msgid="210472753156768705">"Жөндөөлөрдү ачуу"</string>
+    <string name="accessibility_long_click_tile" msgid="210472753156768705">"Параметрлерди ачуу"</string>
     <string name="accessibility_status_bar_headphones" msgid="1304082414912647414">"Гарнитуралар туташкан"</string>
     <string name="accessibility_status_bar_headset" msgid="2699275863720926104">"Гарнитура туташты"</string>
     <string name="data_saver" msgid="3484013368530820763">"Трафикти үнөмдөө"</string>
@@ -728,24 +758,18 @@
     <string name="accessibility_qs_edit_tile_removed" msgid="1175925632436612036">"Карта өчүрүлдү"</string>
     <string name="accessibility_desc_quick_settings_edit" msgid="741658939453595297">"Ыкчам параметрлер түзөткүчү."</string>
     <string name="accessibility_desc_notification_icon" msgid="7331265967584178674">"<xliff:g id="ID_1">%1$s</xliff:g> эскертмеси: <xliff:g id="ID_2">%2$s</xliff:g>"</string>
-    <string name="accessibility_quick_settings_settings" msgid="7098489591715844713">"Жөндөөлөрдү ачуу."</string>
-    <string name="accessibility_quick_settings_expand" msgid="2609275052412521467">"Ыкчам жөндөөлөрдү ачуу."</string>
-    <string name="accessibility_quick_settings_collapse" msgid="4674876336725041982">"Ыкчам жөндөөлөрдү жабуу."</string>
+    <string name="accessibility_quick_settings_settings" msgid="7098489591715844713">"Параметрлерди ачуу."</string>
+    <string name="accessibility_quick_settings_expand" msgid="2609275052412521467">"Ыкчам параметрлерди ачуу."</string>
+    <string name="accessibility_quick_settings_collapse" msgid="4674876336725041982">"Ыкчам параметрлерди жабуу."</string>
     <string name="accessibility_quick_settings_user" msgid="505821942882668619">"<xliff:g id="ID_1">%s</xliff:g> аккаунту менен кирди"</string>
     <string name="accessibility_quick_settings_choose_user_action" msgid="4554388498186576087">"колдонуучуну тандоо"</string>
     <string name="data_connection_no_internet" msgid="691058178914184544">"Интернет жок"</string>
     <string name="accessibility_quick_settings_open_settings" msgid="536838345505030893">"<xliff:g id="ID_1">%s</xliff:g> параметрлерин ачуу."</string>
-    <string name="accessibility_quick_settings_edit" msgid="1523745183383815910">"Жөндөөлөрдүн иретин өзгөртүү."</string>
+    <string name="accessibility_quick_settings_edit" msgid="1523745183383815910">"Параметрлердин иретин өзгөртүү."</string>
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Кубат баскычынын менюсу"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g> ичинен <xliff:g id="ID_1">%1$d</xliff:g>-бет"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Кулпуланган экран"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Телефон ысыгандыктан өчүрүлдү"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Телефонуңуз кадимкидей иштеп жатат.\nКеңири маалымат алуу үчүн таптап коюңуз"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Телефонуңуз өтө ысып кеткендиктен, аны муздатуу үчүн өчүрүлдү. Эми телефонуңуз кадимкидей иштеп жатат.\n\nТелефонуңуз төмөнкү шарттарда ысып кетиши мүмкүн:\n	• Ашыкча ресурс короткон колдонмолорду (оюндар, видео же чабыттоо колдонмолору) пайдалансаңыз \n	• Ири көлөмдөгү файлдарды жүктөп алсаңыз же берсеңиз\n	• Телефонуңузду жогорку температураларда пайдалансаңыз"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Тейлөө кадамдарын көрүңүз"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Телефонуңуз ысып баратат"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Телефон сууганча айрым элементтердин иши чектелген.\nКеңири маалымат алуу үчүн таптап коюңуз"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Телефонуңуз автоматтык түрдө сууйт. Аны колдоно берсеңиз болот, бирок ал жайыраак иштеп калат.\n\nТелефонуңуз суугандан кийин адаттагыдай эле иштеп баштайт."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Тейлөө кадамдарын көрүңүз"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Түзмөктү сууруп коюңуз"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Түзмөгүңүздүн кубаттоо порту жылып баратат. Эгер түзмөгүңүз кубаттагычка же USB кабелине туташып турса, аны сууруп коюңуз. Абайлаңыз, кабель да жылуу болушу мүмкүн."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Толук экранда ачуу"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Экрандын бир бөлүгүн чоңойтуу"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Чоңойтуу параметрлерин ачуу"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Чоңойтуу параметрлерин жабуу"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Өлчөмүн өзгөртүү үчүн бурчун сүйрөңүз"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Диагональ боюнча сыдырууга уруксат берүү"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Өлчөмүн өзгөртүү"</string>
@@ -858,7 +883,7 @@
     <string name="accessibility_magnification_done" msgid="263349129937348512">"Бүттү"</string>
     <string name="accessibility_magnifier_edit" msgid="1522877239671820636">"Түзөтүү"</string>
     <string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"Чоңойткуч терезесинин параметрлери"</string>
-    <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Атайын мүмкүнчүлүктөрдү ачуу үчүн басыңыз. Бул баскычты Жөндөөлөрдөн өзгөртүңүз.\n\n"<annotation id="link">"Жөндөөлөрдү көрүү"</annotation></string>
+    <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Атайын мүмкүнчүлүктөрдү ачуу үчүн басыңыз. Бул баскычты Параметрлерден өзгөртүңүз.\n\n"<annotation id="link">"Параметрлерди көрүү"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Баскычты убактылуу жашыра туруу үчүн экрандын четине жылдырыңыз"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Кайтаруу"</string>
     <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> ыкчам баскычы өчүрүлдү"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"сүйүктүүлөрдөн чыгаруу"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>-позицияга жылдыруу"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Башкаруу элементтери"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Тез кирүү үчүн түзмөктү башкаруу элементтерин тандаңыз"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Башкаруу элементтеринин иретин өзгөртүү үчүн кармап туруп, сүйрөңүз"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Бардык башкаруу элементтери өчүрүлдү"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Өзгөртүүлөр сакталган жок"</string>
@@ -903,7 +927,7 @@
     <string name="controls_dialog_message" msgid="342066938390663844">"<xliff:g id="APP">%s</xliff:g> сунуштайт"</string>
     <string name="controls_tile_locked" msgid="731547768182831938">"Түзмөк кулпуланды"</string>
     <string name="controls_settings_show_controls_dialog_title" msgid="3357852503553809554">"Түзмөктөрдү кулпуланган экрандан көрүп, көзөмөлдөйсүзбү?"</string>
-    <string name="controls_settings_show_controls_dialog_message" msgid="7666211700524587969">"Тышкы түзмөктөрүңүздү көзөмөлдөө каражаттарын кулпу экранына кошо аласыз.\n\nТүзмөгүңүздүн колдонмосу айрым түзмөктөрдү телефонуңуздун же планшетиңиздин кулпусун ачпастан көзөмөлдөөгө уруксат бериши мүмкүн.\n\nКаалаган убакта Жөндөөлөрдөн өзгөртүүлөрдү жасай аласыз."</string>
+    <string name="controls_settings_show_controls_dialog_message" msgid="7666211700524587969">"Тышкы түзмөктөрүңүздү көзөмөлдөө каражаттарын кулпу экранына кошо аласыз.\n\nТүзмөгүңүздүн колдонмосу айрым түзмөктөрдү телефонуңуздун же планшетиңиздин кулпусун ачпастан көзөмөлдөөгө уруксат бериши мүмкүн.\n\nКаалаган убакта Параметрлерден өзгөртүүлөрдү жасай аласыз."</string>
     <string name="controls_settings_trivial_controls_dialog_title" msgid="7593188157655036677">"Түзмөктөрдү кулпуланган экрандан көзөмөлдөйсүзбү?"</string>
     <string name="controls_settings_trivial_controls_dialog_message" msgid="397178734990952575">"Айрым түзмөктөрдү телефонуңуздун же планшетиңиздин кулпусун ачпастан көзөмөлдөй аласыз. Кайсы түзмөктөрдү ушул жол менен көзөмөлдөөгө болорун түзмөгүңүздүн колдонмосу аныктайт."</string>
     <string name="controls_settings_dialog_neutral_button" msgid="4514446354793124140">"Жок, рахмат"</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Башка PIN кодду колдонуңүз"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> түзмөгү үчүн өзгөртүүнү ырастаңыз"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Дагы көрүү үчүн экранды сүрүп коюңуз"</string>
+    <string name="retry_face" msgid="416380073082560186">"Жүздүн аныктыгын кайрадан текшерүү"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Сунуштар жүктөлүүдө"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Медиа"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосунда ушул нерсени жашырасызбы?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> \'да ушул медиа башкарууну жашырасызбы?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"Учурдагы медиа сеансын жашыруу мүмкүн эмес."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Жашыруу"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Улантуу"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Параметрлер"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ыры (аткаруучу: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>) <xliff:g id="APP_LABEL">%3$s</xliff:g> колдонмосунан ойнотулуп жатат"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g> ичинен <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> иштеп жатат"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Ойнотуу"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Тындыруу"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Мурунку трек"</string>
@@ -969,10 +995,12 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Динамиктер жана дисплейлер"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Сунушталган түзмөктөр"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Медиафайлдарды башка түзмөккө жылдыруу үчүн жалпы сеансыңызды токтотуңуз"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Токтотуу"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Кабарлоо кантип иштейт"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Кабарлоо"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Шайкеш Bluetooth түзмөктөрү болгон жакын жердеги кишилер кабарлап жаткан медиаңызды уга алышат"</string>
-    <string name="media_output_broadcasting_message" msgid="4150299923404886073">"Кабарыңызды угуу үчүн жакын жердеги кишилер шайкеш Bluetooth түзмөктөрү менен QR кодун скандап же кабарлоонун аталышын жана сырсөзүн колдоно алышат"</string>
+    <string name="media_output_broadcasting_message" msgid="4150299923404886073">"Кабарыңызды угуу үчүн жакын жердеги кишилер шайкеш Bluetooth түзмөктөрү менен QR кодду скандап же кабарлоонун аталышын жана сырсөзүн колдоно алышат"</string>
     <string name="media_output_broadcast_name" msgid="8786127091542624618">"Кабарлоонун аталышы"</string>
     <string name="media_output_broadcast_code" msgid="870795639644728542">"Сырсөз"</string>
     <string name="media_output_broadcast_dialog_save" msgid="7910865591430010198">"Сактоо"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Сакталган жок. Кайталап көрүңүз."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Сакталган жок."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Кеминде 4 символдон турушу керек"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"16 символдон ашпашы керек"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g> символдон ашпашы керек"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Курама номери"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Курама номери алмашуу буферине көчүрүлдү."</string>
     <string name="basic_status" msgid="2315371112182658176">"Ачык сүйлөшүү"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Батареяңыздын кубаты аныкталбай жатат"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Кеңири маалымат алуу үчүн таптап коюңуз"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Ойготкуч коюлган жок"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"экран кулпусун киргизүү"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Манжа изинин сенсору"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"аныктыгын текшерүү"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"түзмөккө кирүү"</string>
@@ -1048,7 +1077,7 @@
     <string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"Башка тармактарга которулуу үчүн Ethernet кабелин ажыратыңыз"</string>
     <string name="wifi_scan_notify_message" msgid="3753839537448621794">"Түзмөктүн иштешин жакшыртуу үчүн колдонмолор менен кызматтар Wi‑Fi өчүп турса да зымсыз тармактарды издей беришет. Издебесин десеңиз, Wi-Fi тармактарын издөө дегенди өчүрүп коюңуз. "<annotation id="link">"Өзгөртүү"</annotation></string>
     <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Учак режимин өчүрүү"</string>
-    <string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> төмөнкү ыкчам баскычты Ыкчам жөндөөлөргө кошкону жатат"</string>
+    <string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> төмөнкү ыкчам баскычты Ыкчам параметрлерге кошкону жатат"</string>
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Ыкчам баскыч кошуу"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Ыкчам баскыч кошулбасын"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Колдонуучуну тандоо"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Жардамчы угуп жатат"</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="note_task_button_label" msgid="8718616095800343136">"Эскертме жазуу"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Эскертме жазуу"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Эскертме жазуу (<xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Кеңири маалымат"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Кеңири маалымат: <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> ачуу"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Колдонмо туураланды"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Капчыкка кеминде бир карта кошулду"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Камера колдонмосун орнотуу"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Колдонмо туураланды"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Кеминде бир түзмөк жеткиликтүү"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Капчык колдонмосун ыкчам баскыч катары кошуу үчүн колдонмону орнотуу керек"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Капчык колдонмосун ыкчам баскыч катары кошуу үчүн кеминде бир картаны кошуу керек"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR кодунун сканерин ыкчам баскыч катары кошуу үчүн камера колдонмосун орнотуу керек"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home колдонмосун ыкчам баскыч катары кошуу үчүн колдонмону орнотуу керек"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Кеминде бир түзмөк жеткиликтүү"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Эскертме жазуу ыкчам баскычын колдонуу үчүн демейки эскертме жазуу колдонмосун тандаңыз"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Колдонмо тандоо"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Ыкчам баскычты басып туруңуз"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Токтотуу"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Экрандарды азыр которуштуруу"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Стилусту кубаттаңыз"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Стилустун батареясы отурайын деп калды"</string>
     <string name="video_camera" msgid="7654002575156149298">"Видео камера"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Бул профилден чала албайсыз"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Жумуш саясатыңызга ылайык, жумуш профилинен гана чалууларды аткара аласыз"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Жеке колдонмодон чалуу мүмкүн эмес"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Уюмуңуз жумуш колдонмолорунан гана чалууга уруксат берет"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Жумуш профилине которулуу"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Жабуу"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Жумуш үчүн телефон колдонмосун орнотуу"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Жокко чыгаруу"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Кулпу экранын тууралоо"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Кулпуланган экранды тууралоо үчүн кулпусун ачыңыз"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi жеткиликтүү эмес"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камера бөгөттөлдү"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камера менен микрофон бөгөттөлдү"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Микрофон бөгөттөлдү"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Маанилүү сүйлөшүүлөр режими күйүк"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Жардамчы иштетилди"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Параметрлерден демейки кыска жазуулар колдонмосун тууралаңыз"</string>
+    <string name="install_app" msgid="5066668100199613936">"Колдонмону орнотуу"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Микрофон жана камера"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Жакында колдонмолордо иштетилген"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Акыркы пайдалануусун көрүү"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Бүттү"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Параметрлерди жайып көрсөтүү"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Жыйыштыруу"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Бул колдонмону жабуу"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> жабылды"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Кызматты тескөө"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Кирүү мүмкүнчүлүгүн тескөө"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Телефон чалууда колдонулуп жатат"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Акыркы жолу телефон чалууда колдонулду"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосунда иштетилип жатат"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Акыркы жолу <xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосунда иштетилди"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосунда иштетилип жатат (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Акыркы жолу <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) колдонмосунда иштетилди"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосунда иштетилип жатат (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Акыркы жолу <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) колдонмосунда иштетилди"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ky/strings_tv.xml b/packages/SystemUI/res/values-ky/strings_tv.xml
deleted file mode 100644
index 7ad134a..0000000
--- a/packages/SystemUI/res/values-ky/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN туташтырылды"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN ажыратылды"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> аркылуу"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Билдирмелер"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Билдирме жок"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Микрофон жаздырууда"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Камера жаздырууда"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Камера менен микрофон жаздырууда"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Микрофон жаздырууну токтотту"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Камера жаздырууну токтотту"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Камера менен микрофон жаздырууну токтотту"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Экрандан видео жаздырылып башталды"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Экрандан видео жаздыруу токтотулду"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-land-television/dimens.xml b/packages/SystemUI/res/values-land-television/dimens.xml
index 8fc4612..52f591f 100644
--- a/packages/SystemUI/res/values-land-television/dimens.xml
+++ b/packages/SystemUI/res/values-land-television/dimens.xml
@@ -13,7 +13,7 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
+<!-- TODO(b/289498394) move this to the TvSystemUI target -->
 <resources>
   <!-- Height of volume bar -->
   <dimen name="volume_dialog_panel_height">190dp</dimen>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index 5b01705..e8b4003 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"ເປີດໃຊ້ USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"ສຶກສາເພີ່ມເຕີມ"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ພາບໜ້າຈໍ"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"ຂະຫຍາຍການປົດລັອກຖືກປິດການນຳໃຊ້ແລ້ວ"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"ຄຸນສົມບັດການປົດລັອກດົນຂຶ້ນຖືກປິດການນຳໃຊ້ແລ້ວ"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ສົ່ງຮູບແລ້ວ"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"ກຳລັງບັນທຶກພາບໜ້າຈໍ..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"ກຳລັງບັນທຶກຮູບໜ້າຈໍໃສ່ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> ກວດພົບຮູບໜ້າຈໍນີ້."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> ແລະ ແອັບອື່ນໆທີ່ເປີດຢູ່ກວດພົບຮູບໜ້າຈໍນີ້."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"ເພີ່ມໃສ່ບັນທຶກ"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"ໂປຣແກຣມບັນທຶກໜ້າຈໍ"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"ໂປຣແກຣມບັນທຶກໜ້າຈໍ"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"ກຳລັງປະມວນຜົນການບັນທຶກໜ້າຈໍ"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"ການແຈ້ງເຕືອນສຳລັບເຊດຊັນການບັນທຶກໜ້າຈໍໃດໜຶ່ງ"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"ເລີ່ມການບັນທຶກບໍ?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"ໃນລະຫວ່າງການບັນທຶກ, ລະບົບ Android ຈະສາມາດບັນທຶກຂໍ້ມູນທີ່ລະອຽດອ່ອນໃດກໍຕາມທີ່ສະແດງຢູ່ໜ້າຈໍຂອງທ່ານ ຫຼື ຫຼິ້ນຢູ່ອຸປະກອນທ່ານ. ນີ້ຮວມເຖິງລະຫັດຜ່ານ, ຂໍ້ມູນການຈ່າຍເງິນ, ຮູບ, ຂໍ້ຄວາມ ແລະ ສຽງນຳ."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"ບັນທຶກໝົດໜ້າຈໍ"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"ບັນທຶກແອັບດຽວ"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"ໃນຂະນະທີ່ທ່ານກຳລັງບັນທຶກ, Android ຈະມີສິດເຂົ້າເຖິງສິ່ງທີ່ເບິ່ງໃຫ້ຢູ່ໜ້າຈໍຂອງທ່ານ ຫຼື ຫຼິ້ນຢູ່ອຸປະກອນຂອງທ່ານ. ດັ່ງນັ້ນໃຫ້ລະມັດລະວັງເລື່ອງລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ ຫຼື ຂໍ້ມູນທີ່ລະອຽດອ່ອນອື່ນໆ."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"ໃນຂະນະທີ່ທ່ານກຳລັງບັນທຶກແອັບ, Android ຈະມີສິດເຂົ້າເຖິງສິ່ງທີ່ສະແດງ ຫຼື ຫຼິ້ນຢູ່ໃນແອັບນັ້ນ. ດັ່ງນັ້ນໃຫ້ລະມັດລະວັງກ່ຽວກັບລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ ຫຼື ຂໍ້ມູນທີ່ລະອຽດອ່ອນອື່ນໆ."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"ເລີ່ມການບັນທຶກ"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"ເລີ່ມການບັນທຶກບໍ?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"ໃນຂະນະທີ່ທ່ານກຳລັງບັນທຶກ, Android ຈະມີສິດເຂົ້າເຖິງທຸກສິ່ງທີ່ປາກົດຢູ່ໜ້າຈໍຂອງທ່ານ ຫຼື ຫຼິ້ນຢູ່ອຸປະກອນຂອງທ່ານ. ດັ່ງນັ້ນ, ໃຫ້ລະມັດລະວັງສິ່ງຕ່າງໆ ເຊັ່ນ: ລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ, ຮູບພາບ ພ້ອມທັງສຽງ ແລະ ວິດີໂອ."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"ໃນຂະນະທີ່ທ່ານກຳລັງບັນທຶກແອັບ, Android ຈະມີສິດເຂົ້າເຖິງທຸກສິ່ງທີ່ສະແດງ ຫຼື ຫຼິ້ນຢູ່ແອັບດັ່ງກ່າວ. ດັ່ງນັ້ນ, ໃຫ້ລະມັດລະວັງສິ່ງຕ່າງໆ ເຊັ່ນ: ລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ, ຮູບພາບ ພ້ອມທັງສຽງ ແລະ ວິດີໂອ."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"ເລີ່ມການບັນທຶກ"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"ບັນທຶກສຽງ"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"ສຽງອຸປະກອນ"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"ສຽງຈາກອຸປະກອນຂອງທ່ານ ເຊັ່ນ: ສຽງເພງ, ສຽງລົມໂທລະສັບ ແລະ ສຽງຣິງໂທນ"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"ໄມໂຄຣໂຟນ"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"ສຽງ ແລະ ໄມໂຄຣໂຟນອຸປະກອນ"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"ເລີ່ມຕົ້ນ"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"ເລີ່ມ"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"ກຳລັງບັນທຶກໜ້າຈໍ"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"ກຳລັງບັນທຶກໜ້າຈໍ ແລະ ສຽງ"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"ສະແດງການສຳຜັດຢູ່ໜ້າຈໍ"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"ແບ່ງປັນ"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"ຈັດເກັບການບັນທຶກໜ້າຈໍແລ້ວ"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"ແຕະເພື່ອເບິ່ງ"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"ເກີດຄວາມຜິດພາດໃນການລຶບການບັນທຶກໜ້າຈໍ"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"ເກີດຂໍ້ຜິດພາດໃນການບັນທຶກໜ້າຈໍ"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"ເກີດຄວາມຜິດພາດໃນການບັນທຶກໜ້າຈໍ"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"ກຳລັງ​ເບິ່ງ​ເຕັມ​​ຈໍ"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"ເພື່ອອອກ, ໃຫ້ປັດລົງຈາກເທິງສຸດ."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"ເຂົ້າໃຈແລ້ວ"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"ກັບຄືນ"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"ໜ້າທຳອິດ"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"ເມນູ"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"ພິສູດຢືນຢັນໃບໜ້າແລ້ວ"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"ຢືນຢັນແລ້ວ"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"ແຕະຢືນຢັນເພື່ອສຳເລັດ"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ປົດລັອກດ້ວຍໜ້າແລ້ວ. ກົດໄອຄອນປົດລັອກເພື່ອສືບຕໍ່."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"ປົດລັອກດ້ວຍໃບໜ້າແລ້ວ"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ປົດລັອກດ້ວຍໜ້າແລ້ວ. ກົດເພື່ອສືບຕໍ່."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ຈຳແນກໜ້າໄດ້ແລ້ວ. ກົດເພື່ອສືບຕໍ່."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ຈຳແນກໜ້າໄດ້ແລ້ວ. ກົດໄອຄອນປົດລັອກເພື່ອສືບຕໍ່."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ຮັບຮອງຄວາມຖືກຕ້ອງແລ້ວ"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"ຍົກເລີກການພິສູດຢືນຢັນ"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ໃຊ້ PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ໃຊ້ຮູບແບບ"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"ໃຊ້ລະຫັດຜ່ານ"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"ຫາກທ່ານໃສ່ຣູບແບບຜິດໃນຄວາມພະຍາຍາມເທື່ອຕໍ່ໄປ, ໂປຣໄຟລ໌ບ່ອນເຣັດວຽກຂອງທ່ານ ແລະ ຂໍ້ມູນຂອງມັນຈະຖືກລຶບອອກ."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"ຫາກທ່ານໃສ່ລະຫັດ PIN ຜິດໃນຄວາມພະຍາຍາມເທື່ອຕໍ່ໄປ, ໂປຣໄຟລ໌ບ່ອນເຣັດວຽກຂອງທ່ານ ແລະ ຂໍ້ມູນຂອງມັນຈະຖືກລຶບອອກ."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"ຫາກທ່ານໃສ່ລະຫັດຜິດໃນຄວາມພະຍາຍາມເທື່ອຕໍ່ໄປ, ໂປຣໄຟລ໌ບ່ອນເຣັດວຽກຂອງທ່ານ ແລະ ຂໍ້ມູນຂອງມັນຈະຖືກລຶບອອກ."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"ຕັ້ງຄ່າ"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"ບໍ່ຟ້າວເທື່ອ"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"ການດຳເນີນການນີ້ຈຳເປັນໃນການປັບປຸງຄວາມປອດໄພ ແລະ ປະສິດທິພາບ"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"ຕັ້ງຄ່າການປົດລັອກດ້ວຍລາຍນິ້ວມືຄືນໃໝ່"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"ປົດລັອກດ້ວຍລາຍນິ້ວມື"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"ຕັ້ງຄ່າການປົດລັອກດ້ວຍລາຍນິ້ວມື"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"ເພື່ອຕັ້ງຄ່າການປົດລັອກດ້ວຍລາຍນິ້ວມືຄືນໃໝ່, ຮູບ ແລະ ໂມເດວລາຍນິ້ວມືປັດຈຸບັນຂອງທ່ານຈະຖືກລຶບອອກ.\n\nຫຼັງຈາກຖືກລຶບອອກແລ້ວ, ທ່ານຈະຕ້ອງຕັ້ງຄ່າການປົດລັອກດ້ວຍລາຍນິ້ວມືຄືນໃໝ່ເພື່ອໃຊ້ລາຍນິ້ວມືຂອງທ່ານໃນການປົດລັອກໂທລະສັບຂອງທ່ານ ຫຼື ຢັ້ງຢືນວ່າແມ່ນທ່ານ."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"ເພື່ອຕັ້ງຄ່າການປົດລັອກດ້ວຍລາຍນິ້ວມືຄືນໃໝ່, ຮູບ ແລະ ໂມເດວລາຍນິ້ວມືປັດຈຸບັນຂອງທ່ານຈະຖືກລຶບອອກ.\n\nຫຼັງຈາກຖືກລຶບອອກແລ້ວ, ທ່ານຈະຕ້ອງຕັ້ງຄ່າການປົດລັອກດ້ວຍລາຍນິ້ວມືຄືນໃໝ່ເພື່ອໃຊ້ລາຍນິ້ວມືຂອງທ່ານໃນການປົດລັອກໂທລະສັບຂອງທ່ານ ຫຼື ຢັ້ງຢືນວ່າແມ່ນທ່ານ."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"ບໍ່ສາມາດຕັ້ງຄ່າການປົດລັອກດ້ວຍລາຍນິ້ວມືໄດ້. ກະລຸນາເຂົ້າໄປການຕັ້ງຄ່າເພື່ອລອງໃໝ່."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"ຕັ້ງຄ່າການປົດລັອກດ້ວຍໜ້າຄືນໃໝ່"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"ປົດລັອກດ້ວຍໜ້າ"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"ຕັ້ງຄ່າການປົດລັອກດ້ວຍໜ້າ"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"ເພື່ອຕັ້ງຄ່າການປົດລັອກດ້ວຍໜ້າຄືນໃໝ່, ຮູບແບບໃບໜ້າປັດຈຸບັນຂອງທ່ານຈະຖືກລຶບອອກ.\n\nທ່ານຈະຕ້ອງຕັ້ງຄ່າຄຸນສົມບັດນີ້ຄືນໃໝ່ເພື່ອໃຊ້ໃບໜ້າຂອງທ່ານໃນການປົດລັອກໂທລະສັບຂອງທ່ານ."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"ບໍ່ສາມາດຕັ້ງຄ່າການປົດລັອກດ້ວຍໜ້າໄດ້. ກະລຸນາເຂົ້າໄປການຕັ້ງຄ່າເພື່ອລອງໃໝ່."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"ແຕະໃສ່ເຊັນເຊີລາຍນິ້ວມື"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"ກົດໄອຄອນປົດລັອກເພື່ອສືບຕໍ່"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"ບໍ່ສາມາດຈຳແນກໜ້າໄດ້. ກະລຸນາໃຊ້ລາຍນິ້ວມືແທນ."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ສຽງ"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ຊຸດຫູຟັງ"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ການປ້ອນຂໍ້ມູນ"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"ເຄື່ອງຊ່ວຍຟັງ"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ເຄື່ອງຊ່ວຍຟັງ"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ກຳລັງເປີດ..."</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ໝຸນ​ອັດ​ຕະ​ໂນ​ມັດ"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ໝຸນໜ້າຈໍອັດຕະໂນມັດ"</string>
@@ -303,11 +319,11 @@
     <string name="quick_settings_contrast_standard" msgid="2538227821968061832">"ມາດຕະຖານ"</string>
     <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"ປານກາງ"</string>
     <string name="quick_settings_contrast_high" msgid="656049259587494499">"ສູງ"</string>
-    <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ຍົກເລີກການບລັອກໄມໂຄຣໂຟນອຸປະກອນບໍ?"</string>
-    <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ຍົກເລີກການບລັອກກ້ອງຖ່າຍຮູບອຸ​ປະ​ກອນບໍ?"</string>
+    <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ປົດບລັອກໄມໂຄຣໂຟນອຸປະກອນບໍ?"</string>
+    <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ປົດບລັອກກ້ອງຖ່າຍຮູບອຸ​ປະ​ກອນບໍ?"</string>
     <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ຍົກເລີກການບລັອກກ້ອງຖ່າຍຮູບ ຫຼື ໄມໂຄຣໂຟນອຸ​ປະ​ກອນບໍ?"</string>
-    <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"ນີ້ຈະຍົກເລີກການບລັອກການເຂົ້າເຖິງແອັບ ແລະ ບໍລິການທັງໝົດທີ່ອະນຸຍາດໃຫ້ໃຊ້ໄມໂຄຣໂຟນຂອງທ່ານ."</string>
-    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"ນີ້ຈະຍົກເລີກການບລັອກການເຂົ້າເຖິງແອັບ ແລະ ບໍລິການທັງໝົດທີ່ອະນຸຍາດໃຫ້ໃຊ້ກ້ອງຖ່າຍຮູບຂອງທ່ານ."</string>
+    <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"ນີ້ຈະປົດບລັອກການເຂົ້າເຖິງແອັບ ແລະ ບໍລິການທັງໝົດທີ່ອະນຸຍາດໃຫ້ໃຊ້ໄມໂຄຣໂຟນຂອງທ່ານ."</string>
+    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"ນີ້ຈະປົດບລັອກການເຂົ້າເຖິງແອັບ ແລະ ບໍລິການທັງໝົດທີ່ອະນຸຍາດໃຫ້ໃຊ້ກ້ອງຖ່າຍຮູບຂອງທ່ານ."</string>
     <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"ນີ້ຈະປົດບລັອກການເຂົ້າເຖິງແອັບ ແລະ ບໍລິການທັງໝົດທີ່ອະນຸຍາດໃຫ້ໃຊ້ກ້ອງຖ່າຍຮູບ ຫຼື ໄມໂຄຣໂຟນຂອງທ່ານ."</string>
     <string name="sensor_privacy_start_use_mic_blocked_dialog_title" msgid="2640140287496469689">"ໄມໂຄຣໂຟນຖືກບລັອກໄວ້"</string>
     <string name="sensor_privacy_start_use_camera_blocked_dialog_title" msgid="7398084286822440384">"ກ້ອງຖືກບລັອກໄວ້"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"ປົດລັອກດ້ວຍໃບໜ້າແລ້ວ"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"ຈຳແນກໜ້າໄດ້ແລ້ວ"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"ປັດຂຶ້ນເພື່ອລອງໃໝ່"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"ປັດຂຶ້ນເພື່ອລອງປົດລັອກດ້ວຍໜ້າອີກຄັ້ງ"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"ປົດລັອກເພື່ອໃຊ້ NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"ອຸປະກອນນີ້ເປັນຂອງອົງການທ່ານ"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"ອຸ​ປະ​ກອນ​ນີ້​ເປັນ​ຂອງ <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"ລຶບຜູ້ໃຊ້ອອກບໍ?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"ທຸກ​ແອັບ ແລະ ຂໍ້​ມູນ​ຂອງ​ຜູ້​ໃຊ້​ນີ້​ຈະ​ຖືກ​ລຶບ."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"ເອົາ​ອອກ"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ຈະມີສິດເຂົ້າເຖິງຂໍ້ມູນທັງໝົດທີ່ປາກົດຢູ່ໜ້າຈໍຂອງທ່ານ ຫຼື ຫຼິ້ນຈາກອຸປະກອນຂອງທ່ານໃນເວລາບັນທຶກ ຫຼື ສົ່ງສັນຍານໜ້າຈໍ. ນີ້ຮວມເຖິງຂໍ້ມູນຕ່າງໆ ເຊັ່ນ: ລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຮູບ, ຂໍ້ຄວາມ ແລະ ສຽງທີ່ທ່ານຫຼິ້ນ."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"ບໍລິການທີ່ສະໜອງຄວາມສາມາດນີ້ຈະມີສິດເຂົ້າເຖິງຂໍ້ມູນທັງໝົດທີ່ປາກົດຢູ່ໜ້າຈໍຂອງທ່ານ ຫຼື ຫຼິ້ນຈາກອຸປະກອນຂອງທ່ານໃນເວລາບັນທຶກ ຫຼື ສົ່ງສັນຍານໜ້າຈໍ. ນີ້ຮວມເຖິງຂໍ້ມູນຕ່າງໆ ເຊັ່ນ: ລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຮູບ, ຂໍ້ຄວາມ ແລະ ສຽງທີ່ທ່ານຫຼິ້ນ."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"ເລີ່ມການບັນທຶກ ຫຼື ການສົ່ງສັນຍານໜ້າຈໍບໍ?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"ເລີ່ມການບັນທຶກ ຫຼື ການສົ່ງສັນຍານໜ້າຈໍກັບ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ບໍ?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"ອະນຸຍາດໃຫ້ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ແບ່ງປັນ ຫຼື ບັນທຶກບໍ?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"ທົງໝົດໜ້າຈໍ"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"ແອັບດຽວ"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"ເມື່ອທ່ານກຳລັງແບ່ງປັນ, ບັນທຶກ ຫຼື ສົ່ງສັນຍານ, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ມີສິດເຂົ້າເຖິງສິ່ງທີ່ເຫັນໄດ້ໃນໜ້າຈໍຂອງທ່ານ ຫຼື ຫຼິ້ນຢູ່ອຸປະກອນຂອງທ່ານ. ດັ່ງນັ້ນໃຫ້ລະມັດລະວັງເລື່ອງລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ ຫຼື ຂໍ້ມູນທີ່ລະອຽດອ່ອນອື່ນໆ."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"ໃນຕອນທີ່ທ່ານກຳລັງແບ່ງປັນ, ບັນທຶກ ຫຼື ສົ່ງສັນຍານແອັບ, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ມີສິດເຂົ້າເຖິງສິ່ງທີ່ສະແດງ ຫຼື ຫຼິ້ນຢູ່ໃນແອັບນັ້ນ. ດັ່ງນັ້ນໃຫ້ລະມັດລະວັງກ່ຽວກັບລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ ຫຼື ຂໍ້ມູນທີ່ລະອຽດອ່ອນອື່ນໆ."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"ສືບຕໍ່"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"ແບ່ງປັນ ຫຼື ບັນທຶກແອັບ"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"ອະນຸຍາດໃຫ້ແອັບນີ້ແບ່ງປັນ ຫຼື ບັນທຶກບໍ?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"ເມື່ອທ່ານກຳລັງແບ່ງປັນ, ບັນທຶກ ຫຼື ສົ່ງສັນຍານ, ແອັບນີ້ຈະມີສິດເຂົ້າເຖິງສິ່ງທີ່ເຫັນໄດ້ໃນໜ້າຈໍຂອງທ່ານ ຫຼື ຫຼິ້ນຢູ່ອຸປະກອນຂອງທ່ານ. ດັ່ງນັ້ນໃຫ້ລະມັດລະວັງເລື່ອງລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ ຫຼື ຂໍ້ມູນທີ່ລະອຽດອ່ອນອື່ນໆ."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"ໃນຕອນທີ່ທ່ານກຳລັງແບ່ງປັນ, ບັນທຶກ ຫຼື ສົ່ງສັນຍານແອັບ, ແອັບນີ້ຈະມີສິດເຂົ້າເຖິງສິ່ງທີ່ສະແດງ ຫຼື ຫຼິ້ນຢູ່ໃນແອັບນັ້ນ. ດັ່ງນັ້ນໃຫ້ລະມັດລະວັງກ່ຽວກັບລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ ຫຼື ຂໍ້ມູນທີ່ລະອຽດອ່ອນອື່ນໆ."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ຈະມີສິດເຂົ້າເຖິງຂໍ້ມູນທັງໝົດທີ່ປາກົດຢູ່ໜ້າຈໍຂອງທ່ານ ຫຼື ຫຼິ້ນຈາກອຸປະກອນຂອງທ່ານໃນຂະນະທີ່ບັນທຶກ ຫຼື ສົ່ງສັນຍານ. ເຊິ່ງຈະຮວມທັງຂໍ້ມູນຕ່າງໆ ເຊັ່ນ: ລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຮູບພາບ, ຂໍ້ຄວາມ ແລະ ສຽງທີ່ທ່ານຫຼິ້ນ."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"ເລີ່ມການບັນທຶກ ຫຼື ການສົ່ງສັນຍານບໍ?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"ບໍລິການທີ່ມີຟັງຊັນນີ້ຈະມີສິດເຂົ້າເຖິງຂໍ້ມູນທັງໝົດທີ່ປາກົດຢູ່ໜ້າຈໍຂອງທ່ານ ຫຼື ຫຼິ້ນຈາກອຸປະກອນຂອງທ່ານໃນຂະນະທີ່ບັນທຶກ ຫຼື ສົ່ງສັນຍານ. ເຊິ່ງຈະຮວມທັງຂໍ້ມູນຕ່າງໆ ເຊັ່ນ: ລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຮູບພາບ, ຂໍ້ຄວາມ ແລະ ສຽງທີ່ທ່ານຫຼິ້ນ."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"ທັງໝົດໜ້າຈໍ"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"ແອັບດຽວ"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"ແບ່ງປັນ ຫຼື ບັນທຶກແອັບ"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"ເລີ່ມການບັນທຶກ ຫຼື ການສົ່ງສັນຍານດ້ວຍ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ເລີຍບໍ?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"ເມື່ອທ່ານກຳລັງແບ່ງປັນ, ບັນທຶກ ຫຼື ສົ່ງສັນຍານ, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ຈະມີສິດເຂົ້າເຖິງທຸກສິ່ງທີ່ປາກົດຢູ່ໜ້າຈໍຂອງທ່ານ ຫຼື ຫຼິ້ນຢູ່ອຸປະກອນຂອງທ່ານ. ດັ່ງນັ້ນ, ໃຫ້ລະມັດລະວັງສິ່ງຕ່າງໆ ເຊັ່ນ: ລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ, ຮູບພາບ ພ້ອມທັງສຽງ ແລະ ວິດີໂອ."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"ເມື່ອທ່ານກຳລັງແບ່ງປັນ, ບັນທຶກ ຫຼື ສົ່ງສັນຍານແອັບ, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ຈະມີສິດເຂົ້າເຖິງທຸກສິ່ງທີ່ສະແດງ ຫຼື ຫຼິ້ນຢູ່ແອັບດັ່ງກ່າວ. ດັ່ງນັ້ນ, ໃຫ້ລະມັດລະວັງສິ່ງຕ່າງໆ ເຊັ່ນ: ລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ, ຮູບພາບ ພ້ອມທັງສຽງ ແລະ ວິດີໂອ."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"ເລີ່ມ"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"ເລີ່ມການສົ່ງສັນຍານບໍ?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"ເມື່ອທ່ານກຳລັງສົ່ງສັນຍານ, Android ຈະມີສິດເຂົ້າເຖິງທຸກສິ່ງທີ່ປາກົດຢູ່ໜ້າຈໍຂອງທ່ານ ຫຼື ຫຼິ້ນຢູ່ອຸປະກອນຂອງທ່ານ. ດັ່ງນັ້ນ, ໃຫ້ລະມັດລະວັງສິ່ງຕ່າງໆ ເຊັ່ນ: ລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ, ຮູບພາບ ພ້ອມທັງສຽງ ແລະ ວິດີໂອ."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"ເມື່ອທ່ານກຳລັງສົ່ງສັນຍານແອັບ, Android ຈະມີສິດເຂົ້າເຖິງທຸກສິ່ງທີ່ສະແດງ ຫຼື ຫຼິ້ນຢູ່ແອັບດັ່ງກ່າວ. ດັ່ງນັ້ນ, ໃຫ້ລະມັດລະວັງສິ່ງຕ່າງໆ ເຊັ່ນ: ລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ, ຮູບພາບ ພ້ອມທັງສຽງ ແລະ ວິດີໂອ."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"ເລີ່ມການສົ່ງສັນຍານ"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"ເລີ່ມການແບ່ງປັນບໍ?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"ເມື່ອທ່ານກຳລັງແບ່ງປັນ, ບັນທຶກ ຫຼື ສົ່ງສັນຍານ, Android ຈະມີສິດເຂົ້າເຖິງທຸກສິ່ງທີ່ປາກົດຢູ່ໜ້າຈໍຂອງທ່ານ ຫຼື ຫຼິ້ນຢູ່ອຸປະກອນຂອງທ່ານ. ດັ່ງນັ້ນ, ໃຫ້ລະມັດລະວັງສິ່ງຕ່າງໆ ເຊັ່ນ: ລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ, ຮູບພາບ ພ້ອມທັງສຽງ ແລະ ວິດີໂອ."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"ເມື່ອທ່ານກຳລັງແບ່ງປັນ, ບັນທຶກ ຫຼື ສົ່ງສັນຍານແອັບ, Android ຈະມີສິດເຂົ້າເຖິງທຸກສິ່ງທີ່ສະແດງ ຫຼື ຫຼິ້ນຢູ່ແອັບດັ່ງກ່າວ. ດັ່ງນັ້ນ, ໃຫ້ລະມັດລະວັງສິ່ງຕ່າງໆ ເຊັ່ນ: ລະຫັດຜ່ານ, ລາຍລະອຽດການຈ່າຍເງິນ, ຂໍ້ຄວາມ, ຮູບພາບ ພ້ອມທັງສຽງ ແລະ ວິດີໂອ."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"ເລີ່ມ"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"ການແບ່ງປັນຈະຢຸດຊົ່ວຄາວເມື່ອທ່ານປ່ຽນແອັບ"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"ແບ່ງປັນແອັບນີ້ແທນ"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"ປ່ຽນກັບຄືນ"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"ປ່ຽນແອັບ"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"ຖືກບລັອກໄວ້ໂດຍຜູ້ເບິ່ງແຍງລະບົບໄອທີຂອງທ່ານ"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"ການຖ່າຍຮູບໜ້າຈໍຖືກປິດການນຳໃຊ້ໄວ້ໂດຍນະໂຍບາຍອຸປະກອນ"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"ລຶບລ້າງທັງໝົດ"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"ມີອຳນາດໃບຮັບຮອງຕິດຕັ້ງຢູ່ໃນອຸປະກອນນີ້. ທຣາບຟິກເຄືອຂ່າຍທີ່ເຂົ້າລະຫັດໄວ້ຂອງທ່ານອາດຖືກຕິດຕາມ ຫຼື ແກ້ໄຂໄດ້."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"ຜູ້ເບິ່ງແຍງຂອງທ່ານໄດ້ເປີດໃຊ້ການບັນທຶກເຄືອຂ່າຍໄວ້, ເຊິ່ງຈະຕິດຕາມທຣາບຟິກໃນອຸປະກອນຂອງທ່ານ."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"ຜູ້ເບິ່ງແຍງຂອງທ່ານໄດ້ເປີດໃຊ້ການບັນທຶກເຄືອຂ່າຍໄວ້, ເຊິ່ງຈະຕິດຕາມທຣາບຟິກໃນໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານ ແຕ່ຈະບໍ່ຕິດຕາມໃນໂປຣໄຟລ໌ສ່ວນຕົວຂອງທ່ານ."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"ອຸປະກອນນີ້ເຊື່ອມຕໍ່ອິນເຕີເນັດຜ່ານ <xliff:g id="VPN_APP">%1$s</xliff:g>. ການເຄື່ອນໄຫວເຄືອຂ່າຍຂອງທ່ານ, ຮວມທັງອີເມວ ແລະ ຂໍ້ມູນການນຳໃຊ້, ແມ່ນສະແດງໃຫ້ຜູ້ເບິ່ງແຍງໄອທີເຫັນໄດ້."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"ອຸປະກອນນີ້ເຊື່ອມຕໍ່ອິນເຕີເນັດຜ່ານ <xliff:g id="VPN_APP">%1$s</xliff:g>. ຜູ້ໃຫ້ບໍລິການ VPN ສາມາດເບິ່ງການເຄື່ອນໄຫວເຄືອຂ່າຍຂອງທ່ານ, ຮວມທັງອີເມວ ແລະ ຂໍ້ມູນການທ່ອງເວັບໄດ້."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"ອຸປະກອນນີ້ເຊື່ອມຕໍ່ອິນເຕີເນັດຜ່ານ <xliff:g id="VPN_APP">%1$s</xliff:g>. ຜູ້ເບິ່ງແຍງໄອທີຂອງທ່ານສາມາດເບິ່ງການເຄື່ອນໄຫວເຄືອຂ່າຍຂອງທ່ານ, ຮວມທັງອີເມວ ແລະ ຂໍ້ມູນການທ່ອງເວັບໄດ້."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"ອຸປະກອນນີ້ເຊື່ອມຕໍ່ອິນເຕີເນັດຜ່ານ <xliff:g id="VPN_APP_0">%1$s</xliff:g> ແລະ <xliff:g id="VPN_APP_1">%2$s</xliff:g>. ການເຄື່ອນໄຫວເຄືອຂ່າຍຂອງທ່ານ, ຮວມທັງອີເມວ ແລະ ຂໍ້ມູນການນຳໃຊ້, ແມ່ນສະແດງໃຫ້ຜູ້ເບິ່ງແຍງໄອທີເຫັນໄດ້."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"ແອັບບ່ອນເຮັດວຽກຂອງທ່ານເຊື່ອມຕໍ່ອິນເຕີເນັດຜ່ານ <xliff:g id="VPN_APP">%1$s</xliff:g>. ການເຄື່ອນໄຫວເຄືອຂ່າຍຂອງທ່ານໃນແອັບບ່ອນເຮັດວຽກ, ຮວມທັງອີເມວ ແລະ ຂໍ້ມູນການນຳໃຊ້, ແມ່ນສະແດງໃຫ້ຜູ້ເບິ່ງແຍງໄອທີ ແລະ ຜູ້ໃຫ້ບໍລິການ VPN ຂອງທ່ານເຫັນໄດ້."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"ແອັບສ່ວນຕົວຂອງທ່ານເຊື່ອມຕໍ່ອິນເຕີເນັດຜ່ານ <xliff:g id="VPN_APP">%1$s</xliff:g>. ການເຄື່ອນໄຫວເຄືອຂ່າຍຂອງທ່ານ, ຮວມທັງອີເມວ ແລະ ຂໍ້ມູນການນຳໃຊ້, ແມ່ນສະແດງໃຫ້ຜູ້ໃຫ້ບໍລິການ VPN ຂອງທ່ານເຫັນໄດ້."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"ປິດນຳໃຊ້"</string>
     <string name="sound_settings" msgid="8874581353127418308">"ສຽງ ແລະ ການສັ່ນເຕືອນ"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ການຕັ້ງຄ່າ"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ໄດ້ຫຼຸດລົງຫາລະດັບສຽງທີ່ປອດໄພຍິ່ງຂຶ້ນ"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"ລະດັບສຽງສູງເປັນເວລາດົນກວ່າທີ່ແນະນໍາໃຫ້"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"ຫຼຸດລະດັບສຽງໃຫ້ຢູ່ໃນລະດັບທີ່ປອດໄພຂຶ້ນແລ້ວ"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"ຫູຟັງຢູ່ໃນລະດັບສຽງທີ່ດັງເປັນໄລຍະເວລາດົນກວ່າທີ່ແນະນຳ"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"ລະດັບສຽງຂອງຫູຟັງໄດ້ເກີນຂີດຈຳກັດທີ່ປອດໄພສຳລັບອາທິດນີ້"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"ສືບຕໍ່ຟັງ"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"ຫຼຸດລະດັບສຽງ"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"ແອັບຖືກປັກໝຸດແລ້ວ"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"ນີ້ຈະສະແດງມັນໃນໜ້າຈໍຈົນກວ່າທ່ານຈະເຊົາປັກມຸດ. ໃຫ້ແຕະປຸ່ມກັບຄືນ ແລະ ປຸ່ມພາບຮວມຄ້າງໄວ້ເພື່ອຍົກເລີກການປັກມຸດ."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"ນີ້ຈະສະແດງມັນໃນໜ້າຈໍຈົນກວ່າທ່ານຈະເຊົາປັກໝຸດ. ໃຫ້ແຕະປຸ່ມກັບຄືນ ແລະ ປຸ່ມພາບຮວມຄ້າງໄວ້ເພື່ອຍົກເລີກການປັກໝຸດ."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"ເມນູເປີດປິດ"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_1">%1$d</xliff:g> ຈາກທັງໝົດ <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"ໜ້າຈໍລັອກ"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"ປິດໂທລະສັບເນື່ອງຈາກຮ້ອນເກີນໄປ"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"ໂທລະສັບຂອງທ່ານຕອນນີ້ເຮັດວຽກປົກກະຕິແລ້ວ.\nແຕະເພື່ອເບິ່ງຂໍ້ມູນເພີ່ມເຕີມ"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"ໂທລະສັບຂອງທ່ານຮ້ອນເກີນໄປ, ດັ່ງນັ້ນມັນຈຶ່ງຖືກປິດໄວ້ເພື່ອໃຫ້ເຢັນກ່ອນ. ໂທລະສັບຂອງທ່ານຕອນນີ້ເຮັດວຽກປົກກະຕິແລ້ວ.\n\nໂທລະສັບຂອງທ່ານອາດຮ້ອນຫາກວ່າທ່ານ:\n	• ໃຊ້ແອັບທີ່ກິນຊັບພະຍາກອນຫຼາຍ (ເຊັ່ນ: ເກມ, ວິດີໂອ ຫຼື ແອັບການນຳທາງ)\n	• ດາວໂຫລດ ຫຼື ອັບໂຫລດຮູບພາບຂະໜາດໃຫຍ່\n	• ໃຊ້ໂທລະສັບຂອງທ່ານໃນບ່ອນທີ່ມີອຸນຫະພູມສູງ"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"ເບິ່ງຂັ້ນຕອນການເບິ່ງແຍງ"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"ໂທລະສັບກຳລັງຮ້ອນຂຶ້ນ"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"ຄຸນສົມບັດບາງຢ່າງຖືກຈຳກັດໄວ້ໃນເວລາຫຼຸດອຸນຫະພູມຂອງໂທລະສັບ.\nແຕະເພື່ອເບິ່ງຂໍ້ມູນເພີ່ມເຕີມ"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"ໂທລະສັບຂອງທ່ານຈະພະຍາຍາມລົດອຸນຫະພູມລົງ. ທ່ານຍັງຄົງສາມາດໃຊ້ໂທລະສັບຂອງທ່ານໄດ້ຢູ່, ແຕ່ມັນຈະເຮັດວຽກຊ້າລົງ.\n\nເມື່ອໂທລະສັບຂອງທ່ານບໍ່ຮ້ອນຫຼາຍແລ້ວ, ມັນຈະກັບມາເຮັດວຽກຕາມປົກກະຕິ."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"ເບິ່ງຂັ້ນຕອນການເບິ່ງແຍງ"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"ຖອດອຸປະກອນຂອງທ່ານອອກ"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"ອຸປະກອນຂອງທ່ານຈະອຸ່ນຂຶ້ນເມື່ອຢູ່ໃກ້ຊ່ອງສາກໄຟ. ຫາກມັນເຊື່ອມຕໍ່ຫາສາຍສາກ ຫຼື ອຸປະກອນເສີມ USB ໃດໜຶ່ງຢູ່, ໃຫ້ຖອດມັນອອກ ແລະ ລະວັງເນື່ອງຈາກສາຍກໍອາດຈະອຸ່ນເຊັ່ນກັນ."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ຂະຫຍາຍເຕັມຈໍ"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ຂະຫຍາຍບາງສ່ວນຂອງໜ້າຈໍ"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"ເປີດການຕັ້ງຄ່າການຂະຫຍາຍ"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"ປິດການຕັ້ງຄ່າການຂະຫຍາຍ"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"ລາກຢູ່ມຸມເພື່ອປັບຂະໜາດ"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"ອະນຸຍາດໃຫ້ເລື່ອນທາງຂວາງ"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"ປ່ຽນຂະໜາດ"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ຍົກເລີກລາຍການທີ່ມັກ"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"ຍ້າຍໄປຕຳແໜ່ງ <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"ການຄວບຄຸມ"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"ເລືອກການຄວບຄຸມອຸປະກອນເພື່ອເຂົ້າເຖິງໄດ້ຢ່າງວ່ອງໄວ"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"ກົດຄ້າງໄວ້ເພື່ອຈັດຮຽງການຄວບຄຸມຄືນໃໝ່"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"ລຶບການຄວບຄຸມທັງໝົດອອກແລ້ວ"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ບໍ່ໄດ້ບັນທຶກການປ່ຽນແປງໄວ້"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"ລອງໃຊ້ PIN ອື່ນ"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"ຢືນຢັນການປ່ຽນແປງສຳລັບ <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"ປັດເພື່ອເບິ່ງເພີ່ມເຕີມ"</string>
+    <string name="retry_face" msgid="416380073082560186">"ລອງການພິສູດຢືນຢັນດ້ວຍໃບໜ້າຄືນໃໝ່"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"ກຳລັງໂຫຼດຄຳແນະນຳ"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"ມີເດຍ"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"ເຊື່ອງຕົວຄວບຄຸມມີເດຍນີ້ສຳລັບ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"ການຕັ້ງຄ່າ"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ໂດຍ <xliff:g id="ARTIST_NAME">%2$s</xliff:g> ກຳລັງຫຼິ້ນຈາກ <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> ຈາກ <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> ກຳລັງເຮັດວຽກຢູ່"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"ຫຼິ້ນ"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"ຢຸດຊົ່ວຄາວ"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"ເພງກ່ອນໜ້າ"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"ລຳໂພງ ແລະ ຈໍສະແດງຜົນ"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"ອຸປະກອນທີ່ແນະນຳ"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"ຢຸດເຊດຊັນທີ່ແບ່ງປັນຂອງທ່ານເພື່ອຍ້າຍມີເດຍໄປຫາອຸປະກອນອື່ນ"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"ຢຸດ"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"ການອອກອາກາດເຮັດວຽກແນວໃດ"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"ອອກອາກາດ"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"ຄົນທີ່ຢູ່ໃກ້ທ່ານທີ່ມີອຸປະກອນ Bluetooth ທີ່ເຂົ້າກັນໄດ້ຈະສາມາດຟັງມີເດຍທີ່ທ່ານກຳລັງອອກອາກາດຢູ່ໄດ້"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"ບໍ່ສາມາດບັນທຶກໄດ້. ກະລຸນາລອງໃໝ່."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"ບໍ່ສາມາດບັນທຶກໄດ້."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"ໃຊ້ຢ່າງໜ້ອຍ 4 ຕົວອັກສອນ"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"ໃຊ້ໜ້ອຍກວ່າ 16 ຕົວອັກສອນ"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"ໃຊ້ໜ້ອຍກວ່າ <xliff:g id="LENGTH">%1$d</xliff:g> ຕົວອັກສອນ"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"ໝາຍເລກສ້າງ"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"ສຳເນົາໝາຍເລກສ້າງໄປໃສ່ຄລິບບອດແລ້ວ."</string>
     <string name="basic_status" msgid="2315371112182658176">"ເປີດການສົນທະນາ"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"ເກີດບັນຫາໃນການອ່ານຕົວວັດແທກແບັດເຕີຣີຂອງທ່ານ"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"ແຕະເພື່ອເບິ່ງຂໍ້ມູນເພີ່ມເຕີມ"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"ບໍ່ໄດ້ຕັ້ງໂມງປຸກ"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ໃສ່ຂໍ້ມູນການລັອກໜ້າຈໍ"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"ເຊັນ​ເຊີລາຍນິ້ວ​ມື"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"ພິສູດຢືນຢັນ"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"ເຂົ້າອຸປະກອນ"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"ຜູ້ຊ່ວຍກຳລັງຟັງ"</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="note_task_button_label" msgid="8718616095800343136">"ການຈົດບັນທຶກ"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"ການຈົດບັນທຶກ"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"ການຈົດບັນທຶກ <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"ສຶກສາເພີ່ມເຕີມ"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"ສຶກສາເພີ່ມເຕີມຢູ່ <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"ເປີດ <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• ແອັບໄດ້ຮັບການຕັ້ງຄ່າແລ້ວ"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• ມີການເພີ່ມຢ່າງໜ້ອຍ 1 ບັດໃສ່ໃນ Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• ຕິດຕັ້ງແອັບກ້ອງຖ່າຍຮູບ"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• ແອັບໄດ້ຮັບການຕັ້ງຄ່າແລ້ວ"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• ມີຢ່າງໜ້ອຍ 1 ອຸປະກອນພ້ອມໃຫ້ນຳໃຊ້"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"ເພື່ອເພີ່ມແອັບ Wallet ເປັນທາງລັດ, ກະລຸນາກວດສອບໃຫ້ແນ່ໃຈວ່າໄດ້ຕິດຕັ້ງແອັບແລ້ວ"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"ເພື່ອເພີ່ມແອັ Wallet ເປັນທາງລັດ, ກະລຸນາກວດສອບໃຫ້ແນ່ໃຈວ່າໄດ້ເພີ່ມຢ່າງໜ້ອຍ 1 ບັດແລ້ວ"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"ເພື່ອເພີ່ມຕົວສະແກນລະຫັດ QR ເປັນທາງລັດ, ກະລຸນາກວດສອບໃຫ້ແນ່ໃຈວ່າໄດ້ຕິດຕັ້ງແອັບກ້ອງຖ່າຍຮູບແລ້ວ"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"ເພື່ອເພີ່ມແອັບ Home ເປັນທາງລັດ, ກະລຸນາກວດສອບໃຫ້ແນ່ໃຈວ່າໄດ້ຕິດຕັ້ງແອັບແລ້ວ"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• ມີຢ່າງໜ້ອຍ 1 ອຸປະກອນພ້ອມໃຫ້ນຳໃຊ້"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"ເລືອກແອັບບັນທຶກເລີ່ມຕົ້ນເພື່ອໃຊ້ທາງລັດການຈົດບັນທຶກ"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"ເລືອກແອັບ"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"ແຕະທາງລັດຄ້າງໄວ້"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"ຍົກເລີກ"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"ສະຫຼັບໜ້າຈໍດຽວນີ້"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"ເຊື່ອມຕໍ່ປາກກາຂອງທ່ານກັບສາຍສາກ"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"ແບັດເຕີຣີປາກກາເຫຼືອໜ້ອຍ"</string>
     <string name="video_camera" msgid="7654002575156149298">"ກ້ອງວິ​ດີ​ໂອ"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"ບໍ່ສາມາດໂທຈາກໂປຣໄຟລ໌ນີ້ໄດ້"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"ນະໂຍບາຍບ່ອນເຮັດວຽກຂອງທ່ານອະນຸຍາດໃຫ້ທ່ານໂທລະສັບໄດ້ຈາກໂປຣໄຟລ໌ບ່ອນເຮັດວຽກເທົ່ານັ້ນ"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"ບໍ່ສາມາດໂທຈາກແອັບສ່ວນຕົວໄດ້"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"ອົງການຈັດຕັ້ງຂອງທ່ານອະນຸຍາດໃຫ້ທ່ານໂທຈາກແອັບບ່ອນເຮັດວຽກເທົ່ານັ້ນ"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"ສະຫຼັບໄປໃຊ້ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"ປິດ"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"ຕິດຕັ້ງແອັບໂທລະສັບບ່ອນເຮັດວຽກ"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"ຍົກເລີກ"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"ປັບແຕ່ງໜ້າຈໍລັອກ"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"ປົດລັອກເພື່ອປັບແຕ່ງໜ້າຈໍລັອກ"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi ບໍ່ພ້ອມໃຫ້ນຳໃຊ້"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"ກ້ອງຖ່າຍຮູບຖືກບລັອກຢູ່"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"ກ້ອງຖ່າຍຮູບ ແລະ ໄມໂຄຣໂຟນຖືກບລັອກຢູ່"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"ໄມໂຄຣໂຟນຖືກບລັອກຢູ່"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ໂໝດຄວາມສຳຄັນເປີດຢູ່"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"ການເອີ້ນໃຊ້ຜູ້ຊ່ວຍເປີດຢູ່"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"ຕັ້ງຄ່າແອັບຈົດບັນທຶກເລີ່ມຕົ້ນໃນການຕັ້ງຄ່າ"</string>
+    <string name="install_app" msgid="5066668100199613936">"ຕິດຕັ້ງແອັບ"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"ໄມໂຄຣໂຟນ ແລະ ກ້ອງຖ່າຍຮູບ"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"ການໃຊ້ແອັບຫຼ້າສຸດ"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"ເບິ່ງສິດເຂົ້າເຖິງຫຼ້າສຸດ"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"ແລ້ວໆ"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"ຂະຫຍາຍ ແລະ ສະແດງຕົວເລືອກ"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"ຫຍໍ້ລົງ"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"ປິດແອັບນີ້"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"ປິດ <xliff:g id="APP_NAME">%1$s</xliff:g> ແລ້ວ"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"ຈັດການບໍລິການ"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"ຈັດການສິດເຂົ້າເຖິງ"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"ໃຊ້ຢູ່ໂດຍການໂທ"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"ໃຊ້ຫຼ້າສຸດໃນການໂທ"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"ໃຊ້ຢູ່ໂດຍ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"ໃຊ້ຫຼ້າສຸດໂດຍ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"ໃຊ້ຢູ່ໂດຍ <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"ໃຊ້ຫຼ້າສຸດໂດຍ <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"ໃຊ້ຢູ່ໂດຍ <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"ໃຊ້ຫຼ້າສຸດໂດຍ <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-lo/strings_tv.xml b/packages/SystemUI/res/values-lo/strings_tv.xml
deleted file mode 100644
index 759931d..0000000
--- a/packages/SystemUI/res/values-lo/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"ເຊື່ອມຕໍ່ VPN ແລ້ວ"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"ຕັດການເຊື່ອມຕໍ່ VPN ແລ້ວ"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"ຜ່ານ <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"ການແຈ້ງເຕືອນ"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"ບໍ່ມີການແຈ້ງເຕືອນ"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"ໄມໂຄຣໂຟນກຳລັງບັນທຶກ"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"ກ້ອງຖ່າຍຮູບກຳລັງບັນທຶກ"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"ກ້ອງຖ່າຍຮູບ ແລະ ໄມໂຄຣໂຟນກຳລັງບັນທຶກ"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"ໄມໂຄຣໂຟນຢຸດການບັນທຶກແລ້ວ"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"ກ້ອງຖ່າຍຮູບຢຸດການບັນທຶກແລ້ວ"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"ກ້ອງຖ່າຍຮູບ ແລະ ໄມໂຄຣໂຟນຢຸດການບັນທຶກແລ້ວ"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"ເລີ່ມການບັນທຶກໜ້າຈໍແລ້ວ"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"ຢຸດການບັນທຶກໜ້າຈໍແລ້ວ"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index c0de813..2426533 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"„<xliff:g id="APPNAME">%1$s</xliff:g>“ aptiko šią ekrano kopiją."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"„<xliff:g id="APPNAME">%1$s</xliff:g>“ ir kitos atidarytos programos aptiko šią ekrano kopiją."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Pridėti prie užrašo"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Ekrano vaizdo įrašytuvas"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Ekrano vaizdo įrašytuvas"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Apdorojam. ekrano vaizdo įraš."</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Šiuo metu rodomas ekrano įrašymo sesijos pranešimas"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Pradėti įrašymą?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Įrašant „Android“ sistema gali fiksuoti bet kokią neskelbtiną informaciją, rodomą ekrane ar leidžiamą įrenginyje. Tai apima slaptažodžius, išsamią mokėjimo informaciją, nuotraukas, pranešimus ir garso įrašus."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Įrašyti visą ekraną"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Įrašyti vieną programą"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Kai įrašote, „Android“ gali pasiekti viską, kas rodoma ekrane ar leidžiama įrenginyje. Todėl būkite atsargūs su slaptažodžiais, išsamia mokėjimo metodo informacija, pranešimais ar kita neskelbtina informacija."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Kai įrašote programą „Android“ gali pasiekti viską, kas rodoma ar leidžiama programoje. Todėl būkite atsargūs su slaptažodžiais, išsamia mokėjimo metodo informacija, pranešimais ar kita neskelbtina informacija."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Pradėti įrašymą"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Pradėti įrašymą?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Kai įrašote, „Android“ gali pasiekti viską, kas rodoma ekrane ar leidžiama įrenginyje. Todėl būkite atsargūs naudodami slaptažodžius, išsamią mokėjimo metodo informaciją, pranešimus, nuotraukas ir garso bei vaizdo įrašus."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Kai įrašote programą, „Android“ gali pasiekti viską, kas rodoma ar leidžiama toje programoje. Todėl būkite atsargūs naudodami slaptažodžius, išsamią mokėjimo metodo informaciją, pranešimus, nuotraukas ir garso bei vaizdo įrašus."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Pradėti įrašymą"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Įrašyti garsą"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Įrenginio garsas"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Garsas iš jūsų įrenginio, pvz., muzika, skambučiai ir skambėjimo tonai"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofonas"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Įrenginio garsas ir mikrofonas"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Pradėti"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Pradėti"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Įrašomas ekrano vaizdas"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Įrašomas ekrano vaizdas ir garsas"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Rodyti lietimus ekrane"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Bendrinti"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Ekrano vaizdo įrašas išsaugotas"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Palieskite, kad peržiūrėtumėte"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Ištrinant ekrano įrašą įvyko klaida"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Išsaugant ekrano įrašą įvyko klaida"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Pradedant ekrano vaizdo įrašymą iškilo problema"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Peržiūrima viso ekrano režimu"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Jei norite išeiti, perbraukite žemyn iš viršaus."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Supratau"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Atgal"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Pagrindinis"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Meniu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Veidas autentifikuotas"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Patvirtinta"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Paliesk. „Patvirtinti“, kad užbaigtumėte"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Atrakinta pagal veidą. Pasp. atrak. pikt., kad tęstumėte."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Atrakinta pagal veidą"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Atrakinta pagal veidą. Paspauskite, jei norite tęsti."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Veidas atpažintas. Paspauskite, jei norite tęsti."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Veidas atpažintas. Tęskite paspaudę atrakinimo piktogramą."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentifikuota"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Atšaukti autentifikavimą"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Naudoti PIN kodą"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Naudoti atrakinimo piešinį"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Naudoti slaptažodį"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Jei kitu bandymu nupiešite netinkamą atrakinimo piešinį, darbo profilis ir jo duomenys bus ištrinti."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Jei kitu bandymu įvesite netinkamą PIN kodą, darbo profilis ir jo duomenys bus ištrinti."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Jei kitu bandymu įvesite netinkamą slaptažodį, darbo profilis ir jo duomenys bus ištrinti."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Nustatyti"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Ne dabar"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Tai reikalinga, kad būtų galima tobulinti saugą ir našumą"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Atrakinimo piršto atspaudu nustatymas dar kartą"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Atrakinimas piršto atspaudu"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Atrakinimo piršto atspaudu nustatymas"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Norint dar kartą nustatyti atrakinimą piršto atspaudu, dabartiniai piršto atspaudo vaizdai ir modeliai bus ištrinti.\n\nKai jie bus ištrinti, turėsite dar kartą nustatyti atrakinimą piršto atspaudu, kad galėtumėte piršto atspaudu atrakinti telefoną ar patvirtinti savo tapatybę."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Norint dar kartą nustatyti atrakinimą piršto atspaudu, dabartiniai piršto atspaudo vaizdai ir modelis bus ištrinti.\n\nKai jie bus ištrinti, turėsite dar kartą nustatyti atrakinimą piršto atspaudu, kad galėtumėte piršto atspaudu atrakinti telefoną ar patvirtinti savo tapatybę."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Nepavyko nustatyti atrakinimo piršto atspaudu. Eikite į skiltį „Nustatymai“ ir bandykite dar kartą."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Atrakinimo pagal veidą nustatymas iš naujo"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Atrakinimas pagal veidą"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Atrakinimo pagal veidą nustatymas"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Norint dar kartą nustatyti atrakinimą pagal veidą, dabartinis veido modelis bus ištrintas.\n\nTurite dar kartą nustatyti šią funkciją, kad galėtumėte atrakinti telefoną pagal veidą."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Nepavyko nustatyti atrakinimo pagal veidą. Eikite į skiltį „Nustatymai“ ir bandykite dar kartą."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Palieskite piršto antspaudo jutiklį"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Tęskite paspaudę atrakinimo piktogramą"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Veidas neatpažintas. Naudokite kontrolinį kodą."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Garsas"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Virtualiosios realybės įrenginys"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Įvestis"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Klausos aparatai"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Klausos aparatai"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Įjungiama…"</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Atrakinta pagal veidą"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Veidas atpažintas"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Jei norite bandyti dar kartą, perbraukite aukštyn"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Perbr. aukštyn, kad dar k. paband. naud. atraki. pagal veidą"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Norėdami naudoti NFC, atrakinkite"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Šis įrenginys priklauso jūsų organizacijai"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Šis įrenginys priklauso „<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>“"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> galės pasiekti visą informaciją, matomą ekrane ir leidžiamą iš įrenginio įrašant ar perduodant turinį. Tai apima įvairią informaciją, pvz., slaptažodžius, išsamią mokėjimo informaciją, nuotraukas, pranešimus ir leidžiamus garso įrašus."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Šią funkciją teikianti paslauga galės pasiekti visą informaciją, matomą ekrane ir leidžiamą iš įrenginio įrašant ar perduodant turinį. Tai apima įvairią informaciją, pvz., slaptažodžius, išsamią mokėjimo informaciją, nuotraukas, pranešimus ir leidžiamus garso įrašus."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Pradėti įrašyti ar perduoti turinį?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Pradėti įrašyti ar perduoti turinį naudojant „<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>“?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Leisti „<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>“ bendrinti ar įrašyti?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Visas ekranas"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Viena programa"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Kai bendrinate, įrašote ar perduodate turinį, „<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>“ gali pasiekti viską, kas rodoma ekrane ar leidžiama įrenginyje. Todėl būkite atsargūs su slaptažodžiais, išsamia mokėjimo metodo informacija, pranešimais ar kita neskelbtina informacija."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Kai bendrinate, įrašote ar perduodate turinį, „<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>“ gali pasiekti viską, kas rodoma ar leidžiama programoje. Todėl būkite atsargūs su slaptažodžiais, išsamia mokėjimo metodo informacija, pranešimais ar kita neskelbtina informacija."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Tęsti"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Programos bendrinimas ar įrašymas"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Leisti šiai programai bendrinti arba įrašyti?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Kai bendrinate, įrašote ar perduodate turinį, ši programa gali pasiekti viską, kas rodoma ekrane ar leidžiama įrenginyje. Todėl būkite atsargūs su slaptažodžiais, išsamia mokėjimo metodo informacija, pranešimais ar kita neskelbtina informacija."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Kai bendrinate, įrašote ar perduodate turinį, ši programa gali pasiekti viską, kas rodoma ar leidžiama programoje. Todėl būkite atsargūs su slaptažodžiais, išsamia mokėjimo metodo informacija, pranešimais ar kita neskelbtina informacija."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> galės pasiekti visą informaciją, matomą ekrane ir leidžiamą iš įrenginio įrašant ar perduodant turinį. Tai apima įvairią informaciją, pvz., slaptažodžius, išsamią mokėjimo informaciją, nuotraukas, pranešimus ir leidžiamus garso įrašus."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Pradėti įrašyti ar perduoti turinį?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Šią funkciją teikianti paslauga galės pasiekti visą informaciją, matomą ekrane ir leidžiamą iš įrenginio įrašant ar perduodant turinį. Tai apima įvairią informaciją, pvz., slaptažodžius, išsamią mokėjimo informaciją, nuotraukas, pranešimus ir leidžiamus garso įrašus."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Visas ekranas"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Viena programa"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Programos bendrinimas ar įrašymas"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Pradėti įrašyti ar perduoti turinį naudojant „<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>“?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Kai bendrinate, įrašote ar perduodate turinį, „<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>“ gali pasiekti viską, kas rodoma ekrane ar leidžiama įrenginyje. Todėl būkite atsargūs naudodami slaptažodžius, išsamią mokėjimo metodo informaciją, pranešimus, nuotraukas ir garso bei vaizdo įrašus."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Kai bendrinate, įrašote ar perduodate programą, „<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>“ gali pasiekti viską, kas rodoma ar leidžiama programoje. Todėl būkite atsargūs naudodami slaptažodžius, išsamią mokėjimo metodo informaciją, pranešimus, nuotraukas ir garso bei vaizdo įrašus."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Pradėti"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Pradėti perdavimą?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Kai perduodate turinį, „Android“ gali pasiekti viską, kas rodoma ekrane ar leidžiama įrenginyje. Todėl būkite atsargūs naudodami slaptažodžius, išsamią mokėjimo metodo informaciją, pranešimus, nuotraukas ir garso bei vaizdo įrašus."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Kai perduodate programą, „Android“ gali pasiekti viską, kas rodoma ar leidžiama toje programoje. Todėl būkite atsargūs naudodami slaptažodžius, išsamią mokėjimo metodo informaciją, pranešimus, nuotraukas ir garso bei vaizdo įrašus."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Pradėti perdavimą"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Pradėti bendrinti?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Kai bendrinate, įrašote ar perduodate turinį, „Android“ gali pasiekti viską, kas rodoma ekrane ar leidžiama įrenginyje. Todėl būkite atsargūs naudodami slaptažodžius, išsamią mokėjimo metodo informaciją, pranešimus, nuotraukas ir garso bei vaizdo įrašus."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Kai bendrinate, įrašote ar perduodate programą, „Android“ gali pasiekti viską, kas rodoma ar leidžiama programoje. Todėl būkite atsargūs naudodami slaptažodžius, išsamią mokėjimo metodo informaciją, pranešimus, nuotraukas ir garso bei vaizdo įrašus."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Pradėti"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Bendrinimas pristabdomas, kai perjungiate programas"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Bendrinti šią programą"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Perjungti atgal"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Programų jungiklis"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Užblokavo jūsų IT administratorius"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Ekrano fiksavimo funkcija išjungta vadovaujantis įrenginio politika"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Viską išvalyti"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Šiame įrenginyje įdiegtas sertifikato įgaliojimas. Jūsų saugaus tinklo srautas gali būti stebimas arba keičiamas."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Administratorius įjungė tinklo duomenų įrašymą į žurnalą. Įjungus šią funkciją stebimas srautas jūsų įrenginyje."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Administratorius įjungė tinklo duomenų įrašymą į žurnalą. Įjungus šią funkciją stebimas srautas jūsų darbo, bet ne asmeniniame profilyje."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Šis įrenginys prijungtas prie interneto naudojant „<xliff:g id="VPN_APP">%1$s</xliff:g>“. Jūsų tinklo veikla, įskaitant el. laiškus ir naršymo duomenis, matoma jūsų IT administratoriui."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Šis įrenginys prijungtas prie interneto naudojant „<xliff:g id="VPN_APP">%1$s</xliff:g>“. Jūsų tinklo veikla, įskaitant el. laiškus ir naršymo duomenis, matoma VPN teikėjui."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Šis įrenginys prijungtas prie interneto naudojant „<xliff:g id="VPN_APP">%1$s</xliff:g>“. Jūsų tinklo veikla, įskaitant el. laiškus ir naršymo duomenis, matoma jūsų IT administratoriui."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Šis įrenginys prijungtas prie interneto naudojant „<xliff:g id="VPN_APP_0">%1$s</xliff:g>“ ir „<xliff:g id="VPN_APP_1">%2$s</xliff:g>“. Jūsų tinklo veikla, įskaitant el. laiškus ir naršymo duomenis, matoma jūsų IT administratoriui."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Jūsų darbo programos prijungtos prie interneto naudojant „<xliff:g id="VPN_APP">%1$s</xliff:g>“. Jūsų tinklo veikla darbo programose, įskaitant el. laiškus ir naršymo duomenis, matoma jūsų IT administratoriui ir VPN teikėjui."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Jūsų asmeninės programos prijungtos prie interneto naudojant „<xliff:g id="VPN_APP">%1$s</xliff:g>“. Jūsų tinklo veikla, įskaitant el. laiškus ir naršymo duomenis, matoma jūsų VPN teikėjui."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"išjungti"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Garsas ir vibravimas"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Nustatymai"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Sumažinta iki saugesnio garsumo"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Garsumas buvo aukštas ilgiau, nei rekomenduojama"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Garsumas sumažintas iki saugesnio lygio"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Ausinių garsumo lygis buvo aukštas ilgiau, nei rekomenduojama"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Ausinių garsumo lygis viršijo šios savaitės saugaus garsumo lygio apribojimą"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Toliau klausytis"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Sumažinti garsumą"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Programa prisegta"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Tai bus rodoma, kol atsegsite. Palieskite ir palaikykite „Atgal“ ir „Apžvalga“, kad atsegtumėte."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Tai bus rodoma, kol atsegsite. Palieskite ir palaikykite „Atgal“ ir „Pagrindinis ekranas“, kad atsegtumėte."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Įjungimo meniu"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_1">%1$d</xliff:g> psl. iš <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Užrakinimo ekranas"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telefonas išjungt., nes įkaito"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Telefonas dabar veikia normaliai.\nPalietę gausite daugiau informacijos"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefonas per daug įkaito, todėl buvo išj., kad atvėstų. Dabar telefonas veikia įprastai.\n\nTelefonas gali per daug įkaisti, jei:\n	• esate įjungę daug išteklių naudoj. progr. (pvz., žaidimų, vaizdo įr. arba navig. progr.);\n	• atsis. arba įkeliate didelius failus;\n	• telefoną naudojate aukštoje temper."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Žr. priežiūros veiksmus"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefonas kaista"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Kai kurios funkcijos gali neveikti, kol telefonas vėsta.\nPalietę gausite daugiau informacijos"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Telefonas automatiškai bandys atvėsti. Telefoną vis tiek galėsite naudoti, tačiau jis gali veikti lėčiau.\n\nKai telefonas atvės, jis veiks įprastai."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Žr. priežiūros veiksmus"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Atjunkite įrenginį"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Įrenginys kaista šalia įkrovimo prievado. Jei jis prijungtas prie kroviklio ar USB priedo, atjunkite jį ir patikrinkite, nes laidas taip pat gali būti įkaitęs."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Viso ekrano didinimas"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Didinti ekrano dalį"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Atidaryti didinimo nustatymus"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Uždaryti didinimo nustatymus"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Norėdami keisti dydį, vilkite kampą"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Slinkimo įstrižai leidimas"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Pakeisti dydį"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"pašalinti iš mėgstamiausių"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Perkelti į <xliff:g id="NUMBER">%d</xliff:g> padėtį"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Valdikliai"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Pasirinkite sparčiosios prieigos įrenginio valdiklius"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Norėdami pertvarkyti valdiklius, vilkite laikydami nuspaudę"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Visi valdikliai pašalinti"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Pakeitimai neišsaugoti"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Išbandykite kitą PIN kodą"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Patvirtinti <xliff:g id="DEVICE">%s</xliff:g> pakeitimą"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Perbraukite, kad peržiūrėtumėte daugiau"</string>
+    <string name="retry_face" msgid="416380073082560186">"Bandyti iš naujo autentifikuoti veidą"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Įkeliamos rekomendacijos"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Medija"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Slėpti šį programos „<xliff:g id="APP_NAME">%1$s</xliff:g>“ medijos valdiklį?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Nustatymai"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> – „<xliff:g id="SONG_NAME">%1$s</xliff:g>“ leidžiama iš „<xliff:g id="APP_LABEL">%3$s</xliff:g>“"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> iš <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ vykdoma"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Paleisti"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pristabdyti"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Ankstesnis takelis"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Garsiakalbiai ir ekranai"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Siūlomi įrenginiai"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Sustabdyti bendrinamą seansą norint perkelti mediją į kitą įrenginį"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Sustabdyti"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Kaip veikia transliacija"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Transliacija"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Netoliese esantys žmonės, turintys suderinamus „Bluetooth“ įrenginius, gali klausyti jūsų transliuojamos medijos"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Nepavyko išsaugoti. Bandykite dar kartą."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Nepavyko išsaugoti."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Naudokite bent 4 simbolius"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Naudokite daugiausia 16 simbolių"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Naudokite daugiausia <xliff:g id="LENGTH">%1$d</xliff:g> simb."</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Versijos numeris"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Versijos numeris nukopijuotas į iškarpinę."</string>
     <string name="basic_status" msgid="2315371112182658176">"Atidaryti pokalbį"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Nuskaitant akumuliatoriaus skaitiklį iškilo problema"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Palieskite, kad sužinotumėte daugiau informacijos"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Nenustatyta signalų"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"įvesti ekrano užraktą"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Kontrolinio kodo jutiklis"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"nustatytumėte tapatybę"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"pasiektumėte įrenginį"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Padėjėjas klausosi"</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="note_task_button_label" msgid="8718616095800343136">"Užrašų kūrimas"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Užrašų kūrimas"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Užrašų kūrimas, „<xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Sužinokite daugiau"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Sužinokite daugiau adresu <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Atidaryti „<xliff:g id="APPNAME">%1$s</xliff:g>“"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Programa nustatyta"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Prie „Wallet“ pridėta bent viena kortelė"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Įdiekite Fotoaparato programą"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Programa nustatyta"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Pasiekiamas bent vienas įrenginys"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Jei norite pridėti programą „Wallet“ kaip šaukinį, įsitikinkite, kad programa įdiegta"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Jei norite pridėti programą „Wallet“ kaip šaukinį, įsitikinkite, kad pridėta bent viena kortelė"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Jei norite pridėti QR kodų skaitytuvą kaip šaukinį, įsitikinkite, kad fotoaparato programa įdiegta"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Jei norite pridėti programą „Home“ kaip šaukinį, įsitikinkite, kad programa įdiegta"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Pasiekiamas bent vienas įrenginys"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Pasirinkite numatytąją užrašų programą, kuriai norite naudoti užrašų kūrimo šaukinį"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Pasirinkite programą"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Paliesk. ir palaik. spart. klav."</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Atšaukti"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Perjungti ekranus dabar"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Prijunkite rašiklį prie kroviklio"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Senka rašiklio akumuliatorius"</string>
     <string name="video_camera" msgid="7654002575156149298">"Vaizdo kamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Negalima skambinti iš šio profilio"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Pagal jūsų darbo politiką galite skambinti telefonu tik iš darbo profilio"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Nepavyko skambinti iš asmeninės programos"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Jūsų organizacija leidžia skambinti tik iš darbo programų"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Perjungti į darbo profilį"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Uždaryti"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Įdiegti darbo telefono programą"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Atšaukti"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Užrakinimo ekrano tinkinimas"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Atrakinę tinkinkite užrakinimo ekraną"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"„Wi-Fi“ ryšys nepasiekiamas"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Fotoaparatas užblokuotas"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Fotoaparatas ir mikrofonas užblokuoti"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofonas užblokuotas"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioriteto režimas įjungtas"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Padėjėjas klauso"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Nustatykite numatytąją užrašų programą Nustatymuose"</string>
+    <string name="install_app" msgid="5066668100199613936">"Įdiegti programą"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofonas ir fotoaparatas"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Pastarasis programos naudojimas"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Žr. pastarąją prieigą"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Atlikta"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Išskleisti ir rodyti parinktis"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Sutraukti"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Uždaryti šią programą"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ uždaryta"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Tvarkyti paslaugą"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Tvarkyti prieigą"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Naudotojo telefono skambučio programa"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Neseniai naudojo telefono skambučio programa"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Naudoja <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Neseniai naudojo „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Naudoja <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Neseniai naudojo „<xliff:g id="APP_NAME">%1$s</xliff:g>“ (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Naudoja <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Neseniai naudojo „<xliff:g id="APP_NAME">%1$s</xliff:g>“ (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-lt/strings_tv.xml b/packages/SystemUI/res/values-lt/strings_tv.xml
deleted file mode 100644
index 93c77f5..0000000
--- a/packages/SystemUI/res/values-lt/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN prijungtas"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN atjungtas"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Per „<xliff:g id="VPN_APP">%1$s</xliff:g>“"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Pranešimai"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Nėra jokių pranešimų"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofonas įrašo"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera įrašo"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera ir mikrofonas įrašo"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofonas nebeįrašo"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kamera nebeįrašo"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kamera ir mikrofonas nebeįrašo"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Ekrano vaizdo įrašymas pradėtas"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Ekrano vaizdo įrašymas sustabdytas"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 3ec0e20..9bda2b8 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> konstatēja, ka tika veikts ekrānuzņēmums."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> un citas atvērtas lietotnes konstatēja, ka tika veikts ekrānuzņēmums."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Pievienot piezīmei"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Ekrāna ierakstītājs"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Ekrāna ierakstītājs"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Ekrāna ieraksta apstrāde"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Aktīvs paziņojums par ekrāna ierakstīšanas sesiju"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Vai sākt ierakstīšanu?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Ierakstīšanas laikā Android sistēmā var tikt tverta jebkura sensitīvā informācija, kas ir redzama jūsu ekrānā vai tiek atskaņota jūsu ierīcē. Šī informācija ir paroles, maksājumu informācija, fotoattēli, ziņojumi un audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Ierakstīt visu ekrānu"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Ierakstīt vienu lietotni"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Ierakstīšanas laikā Android var piekļūt visam, kas tiek rādīts jūsu ekrānā vai atskaņots jūsu ierīcē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem un citu sensitīvu informāciju."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Lietotnes ierakstīšanas laikā Android var piekļūt visam, kas tiek rādīts vai atskaņots attiecīgajā lietotnē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem un citu sensitīvu informāciju."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Sākt ierakstīšanu"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Vai sākt ierakstīšanu?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Ierakstīšanas laikā Android var piekļūt visam, kas tiek rādīts jūsu ekrānā vai atskaņots jūsu ierīcē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem, fotoattēliem un audio un video saturu."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Lietotnes ierakstīšanas laikā Android var piekļūt visam, kas tiek rādīts vai atskaņots attiecīgajā lietotnē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem, fotoattēliem un audio un video saturu."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Sāk ierakstīšanu"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Ierakstīt audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Ierīces audio"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Skaņa no jūsu ierīces, piemēram, mūzika, sarunas un zvana signāli"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofons"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Ierīces audio un mikrofons"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Sākt"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Sākt"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Notiek ekrāna satura ierakstīšana."</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Notiek ekrāna satura un audio ierakstīšana."</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Rādīt pieskārienus pie ekrāna"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Kopīgot"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Ekrāna ieraksts ir saglabāts"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Pieskarieties, lai skatītu"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Dzēšot ekrāna ierakstu, radās kļūda."</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Saglabājot ekrāna ierakstu, radās kļūda."</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Sākot ierakstīt ekrāna saturu, radās kļūda."</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Skatīšanās pilnekrāna režīmā"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Lai izietu, no augšdaļas velciet lejup."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Labi"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Atpakaļ"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Sākums"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Izvēlne"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Seja autentificēta"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Apstiprināts"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Lai pabeigtu, pieskarieties Apstiprināt"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Atbloķēta ar seju. Turpināt: nospiediet atbloķēšanas ikonu."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Ierīce atbloķēta ar seju"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Ierīce atbloķēta ar seju. Nospiediet, lai turpinātu."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Seja atpazīta. Nospiediet, lai turpinātu."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Seja atpazīta. Lai turpinātu, nospiediet atbloķēšanas ikonu."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentifikācija veikta"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Atcelt autentificēšanu"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Izmantot PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Izmantot kombināciju"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Izmantot paroli"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Ja nākamajā mēģinājumā ievadīsiet nepareizu kombināciju, jūsu darba profils un ar to saistītie dati tiks dzēsti."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Ja nākamajā mēģinājumā ievadīsiet nepareizu PIN, jūsu darba profils un ar to saistītie dati tiks dzēsti."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Ja nākamajā mēģinājumā ievadīsiet nepareizu paroli, jūsu darba profils un ar to saistītie dati tiks dzēsti."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Iestatīt"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Ne tagad"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Tas ir nepieciešams drošības un veiktspējas uzlabošanai"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Vēlreiz iestatiet autorizāciju ar pirksta nospiedumu"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Autorizācija ar pirksta nospiedumu"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Autorizācijas ar pirksta nospiedumu iestatīšana"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Lai vēlreiz iestatītu autorizāciju ar pirksta nospiedumu, pašreizējie pirkstu nospiedumu attēli un modeļi tiks izdzēsti.\n\nKad tie būs izdzēsti, jums būs vēlreiz jāiestata autorizācija ar pirksta nospiedumu, lai varētu izmantot pirksta nospiedumu tālruņa atbloķēšanai vai identitātes verifikācijai."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Lai vēlreiz iestatītu autorizāciju ar pirksta nospiedumu, pašreizējie pirkstu nospiedumu attēli un modelis tiks izdzēsts.\n\nKad tie būs izdzēsti, jums būs vēlreiz jāiestata autorizācija ar pirksta nospiedumu, lai varētu izmantot pirksta nospiedumu tālruņa atbloķēšanai vai identitātes verifikācijai."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Nevarēja iestatīt autorizāciju ar pirksta nospiedumu. Atveriet iestatījumus, lai mēģinātu vēlreiz."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Vēlreiz iestatiet autorizāciju pēc sejas"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Autorizācija pēc sejas"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Autorizācijas pēc sejas iestatīšana"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Lai vēlreiz iestatītu autorizāciju pēc sejas, jūsu pašreizējais sejas modelis tiks izdzēsts.\n\nJums būs vēlreiz jāiestata šī funkcija, lai varētu atbloķēt tālruni, izmantojot seju."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Nevarēja iestatīt autorizāciju pēc sejas. Atveriet iestatījumus, lai mēģinātu vēlreiz."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Pieskarieties pirksta nospieduma sensoram"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Lai turpinātu, nospiediet atbloķēšanas ikonu."</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Nevar atpazīt seju. Lietojiet pirksta nospiedumu."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Austiņas"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Ievade"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Dzirdes aparāti"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Dzirdes aparāti"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Notiek ieslēgšana…"</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Ierīce atbloķēta pēc sejas"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Seja atpazīta"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Velciet augšup, lai mēģinātu vēlreiz"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Velciet augšup, lai atkal izmēģinātu autorizāciju pēc sejas."</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Atbloķējiet ierīci, lai izmantotu NFC."</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Šī ierīce pieder jūsu organizācijai."</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Šī ierīce pieder organizācijai <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>."</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> iegūs piekļuvi visai informācijai, kas ierakstīšanas vai apraides laikā tiks rādīta jūsu ekrānā vai atskaņota jūsu ierīcē. Atļauja attiecas uz tādu informāciju kā paroles, maksājumu informācija, fotoattēli, ziņojumi un jūsu atskaņotais audio saturs."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Pakalpojums, kas nodrošina šo funkciju, iegūs piekļuvi visai informācijai, kas ierakstīšanas vai apraides laikā tiks rādīta jūsu ekrānā vai atskaņota jūsu ierīcē. Atļauja attiecas uz tādu informāciju kā paroles, maksājumu informācija, fotoattēli, ziņojumi un jūsu atskaņotais audio saturs."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Vai vēlaties sākt ierakstīšanu/apraidi?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Vai vēlaties sākt ierakstīšanu vai apraidi, izmantojot lietotni <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Vai atļaujat lietotnei <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> veikt kopīgošanu vai ierakstīšanu?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Viss ekrāns"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Viena lietotne"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Kopīgošanas, ierakstīšanas vai apraides laikā <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> var piekļūt visam, kas tiek rādīts jūsu ekrānā vai atskaņots jūsu ierīcē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem un citu sensitīvu informāciju."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Lietotnes kopīgošanas, ierakstīšanas vai apraides laikā <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> var piekļūt visam, kas tiek rādīts vai atskaņots attiecīgajā lietotnē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem un citu sensitīvu informāciju."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Turpināt"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Lietotnes kopīgošana vai ierakstīšana"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Vai atļaut šai lietotnei kopīgot vai ierakstīt?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Kopīgošanas, ierakstīšanas vai apraides laikā šī lietotne var piekļūt visam, kas tiek rādīts jūsu ekrānā vai atskaņots jūsu ierīcē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem un citu sensitīvu informāciju."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Kopīgošanas, ierakstīšanas vai apraides laikā lietotne var piekļūt visam, kas tiek rādīts vai atskaņots attiecīgajā lietotnē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem un citu sensitīvu informāciju."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> iegūs piekļuvi visai informācijai, kas ierakstīšanas vai apraides laikā tiks rādīta jūsu ekrānā vai atskaņota jūsu ierīcē. Atļauja attiecas uz tādu informāciju kā paroles, maksājumu informācija, fotoattēli, ziņojumi un jūsu atskaņotais audio saturs."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Vai vēlaties sākt ierakstīšanu vai apraidi?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Pakalpojums, kas nodrošina šo funkciju, iegūs piekļuvi visai informācijai, kas ierakstīšanas vai apraides laikā tiks rādīta jūsu ekrānā vai atskaņota jūsu ierīcē. Atļauja attiecas uz tādu informāciju kā paroles, maksājumu informācija, fotoattēli, ziņojumi un jūsu atskaņotais audio saturs."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Viss ekrāns"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Viena lietotne"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Lietotnes kopīgošana vai ierakstīšana"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Vai vēlaties sākt ierakstīšanu vai apraidi, izmantojot lietotni <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Kopīgošanas, ierakstīšanas vai apraides laikā <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> var piekļūt visam, kas tiek rādīts jūsu ekrānā vai atskaņots jūsu ierīcē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem, fotoattēliem un audio un video saturu."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Lietotnes kopīgošanas, ierakstīšanas vai apraides laikā <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> var piekļūt visam, kas tiek rādīts vai atskaņots attiecīgajā lietotnē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem, fotoattēliem un audio un video saturu."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Sākt"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Vai sākt apraidi?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Apraides laikā Android var piekļūt visam, kas tiek rādīts jūsu ekrānā vai atskaņots jūsu ierīcē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem, fotoattēliem un audio un video saturu."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Lietotnes apraides laikā Android var piekļūt visam, kas tiek rādīts vai atskaņots attiecīgajā lietotnē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem, fotoattēliem un audio un video saturu."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Sākt apraidi"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Vai sākt kopīgošanu?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Kopīgošanas, ierakstīšanas vai apraides laikā Android var piekļūt visam, kas tiek rādīts jūsu ekrānā vai atskaņots jūsu ierīcē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem, fotoattēliem un audio un video saturu."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Lietotnes kopīgošanas, ierakstīšanas vai apraides laikā Android var piekļūt visam, kas tiek rādīts vai atskaņots attiecīgajā lietotnē. Tāpēc piesardzīgi apejieties ar parolēm, maksājumu informāciju, ziņojumiem, fotoattēliem un audio un video saturu."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Sākt"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Pārslēdzot lietotnes, tiek pārtraukta kopīgošana."</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Tā vietā kopīgot šo lietotni"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Pārslēgties uz iepriekšējo"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Lietotņu pārslēgšana"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Bloķējis jūsu IT administrators"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Ierīces politika ir atspējojusi ekrānuzņēmumu izveidi"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Dzēst visu"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Šajā ierīcē ir instalēts sertifikāts. Drošā tīkla datplūsma var tikt uzraudzīta."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Administrators ieslēdza tīkla reģistrēšanu, kuru izmanto, lai pārraudzītu datplūsmu jūsu ierīcē."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Administrators ir ieslēdzis tīkla reģistrēšanu, kuru izmanto, lai pārraudzītu datplūsmu jūsu darba profilā, bet ne personīgajā profilā."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Šajā ierīcē ir izveidots savienojums ar internetu, izmantojot lietotni <xliff:g id="VPN_APP">%1$s</xliff:g>. IT administratoram ir redzamas jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumi un pārlūkošanas dati."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Šajā ierīcē ir izveidots savienojums ar internetu, izmantojot lietotni <xliff:g id="VPN_APP">%1$s</xliff:g>. VPN nodrošinātājam ir redzamas jūsu tīkla darbības, tostarp e-pasta ziņojumi un pārlūkošanas dati."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Šajā ierīcē ir izveidots savienojums ar internetu, izmantojot lietotni <xliff:g id="VPN_APP">%1$s</xliff:g>. IT administratoram ir redzamas jūsu tīkla darbības, tostarp e-pasta ziņojumi un pārlūkošanas dati."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Šajā ierīcē ir izveidots savienojums ar internetu, izmantojot lietotnes <xliff:g id="VPN_APP_0">%1$s</xliff:g> un <xliff:g id="VPN_APP_1">%2$s</xliff:g>. IT administratoram ir redzamas jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumi un pārlūkošanas dati."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Jūsu darba lietotnēs ir izveidots savienojums ar internetu, izmantojot lietotni <xliff:g id="VPN_APP">%1$s</xliff:g>. IT administratoram un VPN nodrošinātājam ir redzamas jūsu tīklā veiktās darbības darba lietotnēs, tostarp e-pasta ziņojumi un pārlūkošanas dati."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Jūsu personīgajās lietotnēs ir izveidots savienojums ar internetu, izmantojot lietotni <xliff:g id="VPN_APP">%1$s</xliff:g>. VPN nodrošinātājam ir redzamas jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumi un pārlūkošanas dati."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"atspējot"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Skaņa un vibrācija"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Iestatījumi"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Skaļums samazināts līdz drošākam"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Skaļums ir bijis liels ilgāk, nekā ieteicams."</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Skaļums samazināts līdz drošākam līmenim"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Austiņu skaļums ir bijis liels ilgāk, nekā ieteicams."</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Austiņu skaļums ir pārsniedzis šīs nedēļas drošo ierobežojumu."</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Turpināt klausīties"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Samazināt skaļumu"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Lietotne ir piesprausta"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Šādi tas būs redzams līdz brīdim, kad to atspraudīsiet. Lai atspraustu, pieskarieties pogām Atpakaļ un Pārskats un turiet tās."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Šādi tas būs redzams līdz brīdim, kad to atspraudīsiet. Lai atspraustu, pieskarieties pogām “Atpakaļ” un “Sākums” un turiet tās."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Barošanas izvēlne"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_1">%1$d</xliff:g>. lpp. no <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Bloķēšanas ekrāns"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Tālrunis izslēgts karstuma dēļ"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Tagad jūsu tālrunis darbojas normāli.\nPieskarieties, lai uzzinātu vairāk."</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Jūsu tālrunis bija pārkarsis un tika izslēgts. Tagad tas darbojas normāli.\n\nTālrunis var sakarst, ja:\n	• tiek izmantotas lietotnes, kas patērē daudz enerģijas (piem., spēles, video lietotnes vai navigācija);\n	• tiek lejupielādēti/augšupielādēti lieli faili;\n	• tālrunis tiek lietots augstā temperatūrā."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Skatīt apkopes norādījumus"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Tālrunis kļūst silts"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Dažas funkcijas ir ierobežotas, kamēr notiek tālruņa atdzišana.\nPieskarieties, lai uzzinātu vairāk."</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Jūsu tālrunis automātiski mēģinās atdzist. Jūs joprojām varat izmantot tālruni, taču tas, iespējams, darbosies lēnāk.\n\nTiklīdz tālrunis būs atdzisis, tas darbosies normāli."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Skatīt apkopes norādījumus"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Atvienojiet savu ierīci"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Jūsu ierīce uzkarst, atrodoties uzlādes pieslēgvietas tuvumā. Ja ierīce ir pievienota lādētājam vai USB piederumam, uzmanīgi atvienojiet to, jo arī vads var būt uzkarsis."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Palielināt visu ekrānu"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Palielināt ekrāna daļu"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Atvērt palielinājuma iestatījumus"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Aizvērt palielinājuma iestatījumus"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Velciet stūri, lai mainītu izmērus"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Atļaut ritināšanu pa diagonāli"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Mainīt lielumu"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"noņemtu no izlases"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Pārvietot uz <xliff:g id="NUMBER">%d</xliff:g>. pozīciju"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Vadīklas"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Izvēlieties ierīces vadīklas, kam ātri piekļūt"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Lai pārkārtotu vadīklas, turiet un velciet tās"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Visas vadīklas ir noņemtas"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Izmaiņas nav saglabātas."</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Izmēģiniet citu PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Izmaiņu apstiprināšana ierīcei <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Velciet, lai skatītu citus vienumus"</string>
+    <string name="retry_face" msgid="416380073082560186">"Atkārtoti mēģināt autentificēt seju"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Notiek ieteikumu ielāde"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Multivide"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Vai paslēpt šo lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> multivides vadīklu?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Iestatījumi"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Tiek atskaņots fails “<xliff:g id="SONG_NAME">%1$s</xliff:g>” (izpildītājs: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>) no lietotnes <xliff:g id="APP_LABEL">%3$s</xliff:g>."</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> no <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"Lietotne <xliff:g id="APP_NAME">%1$s</xliff:g> darbojas"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Atskaņot"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Apturēt"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Iepriekšējais ieraksts"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Skaļruņi un displeji"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Ieteiktās ierīces"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Pārtrauciet savu kopīgoto sesiju, lai pārvietotu multivides saturu uz citu ierīci."</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Pārtraukt"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Kā darbojas apraide"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Apraide"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Tuvumā esošās personas ar saderīgām Bluetooth ierīcēm var klausīties jūsu apraidīto multivides saturu."</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Nevar saglabāt. Mēģiniet vēlreiz."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Nevar saglabāt."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Izmantojiet vismaz 4 rakstzīmes"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Izmantojiet mazāk nekā 16 rakstzīmes"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Izmantojiet mazāk nekā <xliff:g id="LENGTH">%1$d</xliff:g> rakstzīmes."</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Versijas numurs"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Versijas numurs ir kopēts starpliktuvē."</string>
     <string name="basic_status" msgid="2315371112182658176">"Atvērt sarunu"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Nevar iegūt informāciju par akumulatora uzlādes līmeni."</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Pieskarieties, lai iegūtu plašāku informāciju."</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Nav iestatīts signāls"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ievadīt ekrāna bloķēšanas informāciju"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Pirksta nospieduma sensors"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"veiktu autentificēšanu"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"izmantotu ierīci"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Asistents klausās"</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="note_task_button_label" msgid="8718616095800343136">"Piezīmju pierakstīšana"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Piezīmju pierakstīšana"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Piezīmju pierakstīšana, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Uzzināt vairāk"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Uzziniet vairāk vietnē <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Atvērt lietotni <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Lietotne ir iestatīta."</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Makam ir pievienota vismaz viena karte."</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Ir instalēta kameras lietotne."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Lietotne ir iestatīta."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Ir pieejama vismaz viena ierīce."</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Lai varētu pievienot lietotni Maks kā saīsni, lietotnei ir jābūt instalētai."</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Lai varētu pievienot lietotni Maks kā saīsni, ir jābūt pievienotai vismaz vienai kartei."</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Lai varētu pievienot lietotni Kvadrātkoda skeneris kā saīsni, ir jābūt instalētai kameras lietotnei."</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Lai varētu pievienot lietotni Home kā saīsni, lietotnei ir jābūt instalētai."</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Ir pieejama vismaz viena ierīce."</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Atlasiet noklusējuma piezīmju lietotni, lai izmantotu piezīmju pierakstīšanas saīsni."</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Atlasīt lietotni"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Pieskarieties saīsnei un turiet."</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Atcelt"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Mainīt ekrānus tagad"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Pievienojiet skārienekrāna pildspalvu lādētājam"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Zems skārienekrāna pildspalvas akumulatora līmenis"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Nevar zvanīt no šī profila"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Saskaņā ar jūsu darba politiku tālruņa zvanus drīkst veikt tikai no darba profila"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Nevar zvanīt no personīgās lietotnes"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Jūsu organizācija ļauj jums veikt zvanus tikai no darba lietotnēm."</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Pārslēgties uz darba profilu"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Aizvērt"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instalēt darba lietotni Tālrunis"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Atcelt"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Pielāgot bloķēšanas ekrānu"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Bloķēšanas ekrāna pielāgošana pēc atbloķēšanas"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi nav pieejams"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera ir bloķēta"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kameras un mikrofona lietošana ir bloķēta"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofons ir bloķēts"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioritātes režīms ir ieslēgts"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Asistents klausās"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Iestatījumos iestatiet noklusējuma piezīmju lietotni."</string>
+    <string name="install_app" msgid="5066668100199613936">"Instalēt lietotni"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofons un kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Nesen izmantoja lietotnes"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Skatīt neseno piekļuvi"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Gatavs"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Izvērst un rādīt opcijas"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Sakļaut"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Aizvērt šo lietotni"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Lietotne <xliff:g id="APP_NAME">%1$s</xliff:g> ir aizvērta."</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Pārvaldīt pakalpojumu"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Pārvaldīt piekļuvi"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"To izmanto tālruņa zvanā"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Nesen to izmantoja tālruņa zvanā"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"To izmanto lietotne <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Nesen to izmantoja lietotne <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"To izmanto lietotne <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Nesen to izmantoja lietotne <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"To izmanto lietotne <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Nesen to izmantoja lietotne <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-lv/strings_tv.xml b/packages/SystemUI/res/values-lv/strings_tv.xml
deleted file mode 100644
index da64f32..0000000
--- a/packages/SystemUI/res/values-lv/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"Savienojums ar VPN ir izveidots."</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"Savienojums ar VPN ir pārtraukts."</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Izmantojot: <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Paziņojumi"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Nav paziņojumu"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Notiek ierakstīšana ar mikrofonu"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Notiek ierakstīšana ar kameru"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Notiek ierakstīšana ar kameru un mikrofonu"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Ierakstīšana ar mikrofonu apturēta"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Ierakstīšana ar kameru apturēta"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Ierakstīšana ar kameru un mikrofonu apturēta"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Ekrāna ierakstīšana ir sākta."</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Ekrāna ierakstīšana ir apturēta."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index 09cd589..9b8b04c 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> ја откри оваа слика од екранот."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> и други отворени апликации ја открија оваа слика од екранот."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Додај во белешка"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Снимач на екран"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Снимач на екран"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Се обработува снимка од екран"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Тековно известување за сесија за снимање на екранот"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Да се започне со снимање?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"При снимањето, системот Android може да ги сними сите чувствителни податоци што се видливи на вашиот екран или пуштени на уредот. Ова вклучува лозинки, податоци за плаќање, фотографии, пораки и аудио."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Снимај го целиот екран"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Снимај една апликација"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Додека снимате, Android има пристап до сѐ што е видливо на вашиот екран или пуштено на вашиот уред. Затоа, бидете внимателни со лозинки, детали за плаќање, пораки или други чувствителни податоци."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Додека снимате апликација, Android има пристап до сѐ што се прикажува или пушта на таа апликација. Затоа, бидете внимателни со лозинки, детали за плаќање, пораки или други чувствителни податоци."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Започни со снимање"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Да се започне со снимање?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Додека снимате, Android има пристап до сѐ што е видливо на вашиот екран или пуштено на вашиот уред. Затоа, бидете внимателни со работи како лозинки, детали за плаќање, пораки, фотографии и аудио и видео."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Додека снимате апликација, Android има пристап до сѐ што се прикажува или пушта на таа апликација. Затоа, бидете внимателни со лозинки, детали за плаќање, пораки фотографии и аудио и видео."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Започни со снимање"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Снимај аудио"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Аудио од уредот"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Звук од вашиот уред, како на пр., музика, повици и мелодии"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Микрофон"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Аудио од уредот и микрофонот"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Започни"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Започни"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Се снима екранот"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Се снима екранот и аудиото"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Прикажувај допири на екранот"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Сподели"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Снимката од екранот е зачувана"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Допрете за прегледување"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Грешка при бришењето на снимката од екранот"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Грешка при зачувувањето на снимката од екранот"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Грешка при почетокот на снимањето на екранот"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Се прикажува на цел екран"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"За да излезете, повлечете одозгора надолу."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Сфатив"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Назад"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Почетна страница"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Мени"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Лицето е проверено"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Потврдено"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Допрете „Потврди“ за да се заврши"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Отклучено со лик. Притиснете ја иконата за отклучување за да продолжите."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Отклучено со лик"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Отклучено со лик. Притиснете за да продолжите."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Лицето е препознаено. Притиснете за да продолжите."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Лицето е препознаено. Притиснете ја иконата за отклучување за да продолжите."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Проверена"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Откажување автентикација"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Користи PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Користи шема"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Користи лозинка"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Ако внесете погрешна шема при следниот обид, работниот профил и неговите податоци ќе се избришат."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Ако внесете погрешен PIN при следниот обид, работниот профил и неговите податоци ќе се избришат."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Ако внесете погрешна лозинка при следниот обид, работниот профил и неговите податоци ќе се избришат."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Постави"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Не сега"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Ова е потребно за да се подобрат сигурноста и изведбата"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Поставете „Отклучување со отпечаток“ повторно"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Отклучување со отпечаток"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Поставете „Отклучување со отпечаток“"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"За да поставите „Отклучување со отпечаток“ повторно, вашите сегашни слики и модели на отпечаток ќе се избришат.\n\nОткако ќе се избришат, ќе треба повторно да поставите „Отклучување со отпечаток“ за да го користите отпечатокот за отклучување на телефонот или потврда дека сте вие."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"За да поставите „Отклучување со отпечаток“ повторно, вашите сегашните слики и модели на отпечаток ќе бидат избришат.\n\nОткако ќе се избришат, ќе треба повторно да поставите „Отклучување со отпечаток“ за да го користите отпечатокот за да го отклучите телефонот или да потврдите дека сте вие."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Не можеше да се постави „Отклучување со отпечаток“. Отворете „Поставки“ за да се обидете повторно."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Поставете „Отклучување со лик“ повторно"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Отклучување со лик"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Поставување „Отклучување со лик“"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"За да може одново да поставите „Отклучување со лик“, вашиот сегашен модел на лик ќе се избрише.\n\nЗа да го користите ликот за отклучување на телефонот, ќе треба повторно да ја поставите функцијава."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Не можеше да се постави „Отклучување со лик“. Отворете „Поставки“ за да се обидете повторно."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Допрете го сензорот за отпечатоци"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Притиснете ја иконата за отклучување за да продолжите"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Не се препознава ликот. Користете отпечаток."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -198,7 +214,7 @@
     <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Панел за известување"</string>
     <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Брзи поставки."</string>
     <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"„Брзи поставки“ и „Панел со известувања“."</string>
-    <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Заклучи екран."</string>
+    <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Заклучен екран."</string>
     <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Работен заклучен екран"</string>
     <string name="accessibility_desc_close" msgid="8293708213442107755">"Затвори"</string>
     <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"целосна тишина"</string>
@@ -223,7 +239,7 @@
     <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>
-    <string name="start_dreams" msgid="9131802557946276718">"Заштитник на екран"</string>
+    <string name="start_dreams" msgid="9131802557946276718">"Штедач на екран"</string>
     <string name="ethernet_label" msgid="2203544727007463351">"Етернет"</string>
     <string name="quick_settings_dnd_label" msgid="7728690179108024338">"Не вознемирувај"</string>
     <string name="quick_settings_bluetooth_label" msgid="7018763367142041481">"Bluetooth"</string>
@@ -232,12 +248,12 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Аудио"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Слушалки"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Влез"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Слушни помагала"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слушни помагала"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Се вклучува…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автоматско ротирање"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоматско ротирање на екранот"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Локација"</string>
-    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Заштитник на екран"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Штедач на екран"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Пристап до камерата"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Пристап до микрофонот"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Дозволен"</string>
@@ -338,9 +354,9 @@
     <string name="zen_silence_introduction" msgid="6117517737057344014">"Ова ги блокира СИТЕ звуци и вибрации, вклучувајќи ги и оние од алармите, музиката, видеата и игрите."</string>
     <string name="notification_tap_again" msgid="4477318164947497249">"Допрете повторно за да се отвори"</string>
     <string name="tap_again" msgid="1315420114387908655">"Допрете повторно"</string>
-    <string name="keyguard_unlock" msgid="8031975796351361601">"Повлечете за да отворите"</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_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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Отклучено со лице"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Лицето е препознаено"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Повлечете нагоре за да се обидете повторно"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Повлечете нагоре за повторен обид со „Отклучување со лик“."</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Отклучете за да користите NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Уредов е во сопственост на организацијата"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Уредов е во сопственост на <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"Да се отстрани корисникот?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Сите апликации и податоци од овој корисник ќе се избришат."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Отстрани"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ќе има пристап до сите податоци што се видливи на екранот или пуштени од вашиот уред додека се снима или емитува. Ова вклучува податоци како лозинките, деталите за плаќање, фотографиите, пораките и аудиото што го пуштате."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Услугата што ја обезбедува функцијава ќе има пристап до сите податоци што се видливи на екранот или пуштени од вашиот уред додека се снима или емитува. Ова вклучува податоци како лозинките, деталите за плаќање, фотографиите, пораките и аудиото што го пуштате."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Да почне снимање или емитување?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Да почне снимање или емитување со <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Да ѝ се дозволи на <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> да споделува или снима?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Цел екран"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Една апликација"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Кога споделувате, снимате или емитувате, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> има пристап до сѐ што е видливо на вашиот екран или пуштено на вашиот уред. Затоа, бидете внимателни со лозинки, детали за плаќање, пораки или други чувствителни податоци."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Кога споделувате, снимате или емитувате апликација, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> има пристап до сѐ што се прикажува или пушта на таа апликација. Затоа, бидете внимателни со лозинки, детали за плаќање, пораки или други чувствителни податоци."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Продолжи"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Споделете или снимете апликација"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Да се дозволи апликацијава да споделува или снима?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Кога споделувате, снимате или емитувате, апликацијава има пристап до сѐ што е видливо на вашиот екран или пуштено на вашиот уред. Затоа, бидете внимателни со лозинки, детали за плаќање, пораки или други чувствителни податоци."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Кога споделувате, снимате или емитувате апликација, апликацијава има пристап до сѐ што се прикажува или пушта на таа апликација. Затоа, бидете внимателни со лозинки, детали за плаќање, пораки или други чувствителни податоци."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ќе има пристап до сите податоци што се видливи на екранот или пуштени од вашиот уред додека се снима или емитува. Ова опфаќа податоци како лозинките, деталите за плаќање, фотографиите, пораките и аудиото што го пуштате."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Да почне снимање или емитување?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Услугата што ја обезбедува функцијава ќе има пристап до сите податоци што се видливи на екранот или пуштени од вашиот уред додека се снима или емитува. Ова вклучува податоци како лозинките, деталите за плаќање, фотографиите, пораките и аудиото што го пуштате."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Цел екран"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Една апликација"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Споделување или снимање апликација"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Да почне снимање или емитување со <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Кога споделувате, снимате или емитувате, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> има пристап до сѐ што е видливо на вашиот екран или пуштено на вашиот уред. Затоа, бидете внимателни со работи како лозинки, детали за плаќање, пораки, фотографии и аудио и видео."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Кога споделувате, снимате или емитувате апликација, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> има пристап до сѐ што се прикажува или пушта на таа апликација. Затоа, бидете внимателни со работи како лозинки, детали за плаќање, пораки, фотографии и аудио и видео."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Започни"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Да се започне со емитување?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Кога емитувате, Android има пристап до сѐ што е видливо на вашиот екран или пуштено на вашиот уред. Затоа, бидете внимателни со работи како лозинки, детали за плаќање, пораки, фотографии и аудио и видео."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Додека емитувате апликација, Android има пристап до сѐ што се прикажува или пушта на таа апликација. Затоа, бидете внимателни со лозинки, детали за плаќање, пораки фотографии и аудио и видео."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Започни со емитување"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Да се започне со споделување?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Кога споделувате, снимате или емитувате, Android има пристап до сѐ што е видливо на вашиот екран или пуштено на вашиот уред. Затоа, бидете внимателни со работи како лозинки, детали за плаќање, пораки, фотографии и аудио и видео."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Кога споделувате, снимате или емитувате апликација, Android има пристап до сѐ што се прикажува или пушта на таа апликација. Затоа, бидете внимателни со работи како лозинки, детали за плаќање, пораки, фотографии и аудио и видео."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Започни"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Споделувањето се паузира кога се префрлате на друга апликација"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Наместо тоа, споделете ја апликацијава"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Враќање"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Префрлање на друга апликација"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Блокирано од IT-администраторот"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Снимањето на екранот е оневозможено со правила на уредот"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Избриши сѐ"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"На уредов е инсталиран авторитет за сертификат. Вашиот безбеден мрежен сообраќај можно е да се следи или изменува."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Вашиот администратор вклучил евиденција на мрежата, што подразбира следење на сообраќајот на вашиот уред."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Вашиот администратор вклучил мрежна евиденција, што подразбира следење на сообраќајот во работниот, но не и во личниот профил."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Уредов е поврзан на интернет преку <xliff:g id="VPN_APP">%1$s</xliff:g>. Вашата мрежна активност во работните апликации, вклучително е-пораките и податоците од прелистување, е видлива за вашиот IT-администратор."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Уредов е поврзан на интернет преку <xliff:g id="VPN_APP">%1$s</xliff:g>. Вашата мрежна активност (заедно со е-пораките и податоците од прелистувањето) е видлива за VPN-операторот."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Уредов е поврзан на интернет преку <xliff:g id="VPN_APP">%1$s</xliff:g>. Вашата мрежна активност во работните апликации, заедно со е-пораките и податоците од прелистување, е видлива за вашиот IT-администратор."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Уредот е поврзан на интернет преку <xliff:g id="VPN_APP_0">%1$s</xliff:g> и <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Вашата мрежна активност, вклучително е-пораките и податоците од прелистување, е видлива за IT-администраторот."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Вашите работни апликации се поврзани на интернет преку <xliff:g id="VPN_APP">%1$s</xliff:g>. Вашата мрежна активност во работните апликации, вклучително е-пораките и податоците од прелистување, е видлива за вашиот IT-администратор и давател на услуги за VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Вашите лични апликации се поврзани на интернет преку <xliff:g id="VPN_APP">%1$s</xliff:g>. Вашата мрежна активност во работните апликации, вклучително е-пораките и податоците од прелистување, е видлива за вашиот давател на услуги за VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"оневозможи"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Звук и вибрации"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Поставки"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Намалено на побезбедна јачина на звук"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Јачината на звукот е висока подолго од препорачаното"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Звукот е намален на побезбедна вредност"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Јачината на звукот е висока подолго од препорачаното"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Јачината на звукот на слушалките го надмина безбедното ограничување за седмицава"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Продолжете со слушање"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Намалете го звукот"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Апликацијата е закачена"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Ќе се гледа сѐ додека не го откачите. Допрете и држете „Назад“ и „Краток преглед“ за откачување."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ќе се гледа сѐ додека не го откачите. Допрете и задржете „Назад“ и „Почетен екран“ за откачување."</string>
@@ -538,7 +568,7 @@
     <string name="enable_bluetooth_confirmation_ok" msgid="2866408183324184876">"Вклучи"</string>
     <string name="tuner_full_importance_settings" msgid="1388025816553459059">"Контроли за известувањата за напојување"</string>
     <string name="rotation_lock_camera_rotation_on" msgid="789434807790534274">"Вклучено - според лице"</string>
-    <string name="power_notification_controls_description" msgid="1334963837572708952">"Со контролите за известувањата за напојување, може да поставите ниво на важност од 0 до 5 за известувањата на која било апликација. \n\n"<b>"Ниво 5"</b>" \n- Прикажувај на врвот на списокот со известувања \n- Дозволи прекин во цел екран \n- Секогаш користи појавување \n\n"<b>"Ниво 4"</b>" \n- Спречи прекин во цел екран \n- Секогаш користи појавување \n\n"<b>"Ниво 3"</b>" \n- Спречи прекин во цел екран \n- Без појавување \n\n"<b>"Ниво 2"</b>" \n- Спречи прекин во цел екран \n- Без појавување \n- Без звук и вибрации \n\n"<b>"Ниво 1"</b>" \n- Спречи прекин во цел екран \n- Без појавување \n- Без звук и вибрации \n- Сокриј од заклучен екран и статусна лента \n- Прикажувај на дното на списокот со известувања \n\n"<b>"Ниво 0"</b>" \n- Блокирај ги сите известувања од апликацијата"</string>
+    <string name="power_notification_controls_description" msgid="1334963837572708952">"Со контролите за известувањата за напојување, може да поставите ниво на важност од 0 до 5 за известувањата на која било апликација. \n\n"<b>"Ниво 5"</b>" \n- Прикажувај на врвот на списокот со известувања \n- Дозволи прекин во цел екран \n- Секогаш користи појавување \n\n"<b>"Ниво 4"</b>" \n- Спречи прекин во цел екран \n- Секогаш користи појавување \n\n"<b>"Ниво 3"</b>" \n- Спречи прекин во цел екран \n- Без појавување \n\n"<b>"Ниво 2"</b>" \n- Спречи прекин во цел екран \n- Без појавување \n- Без звук и вибрации \n\n"<b>"Ниво 1"</b>" \n- Спречи прекин во цел екран \n- Без појавување \n- Без звук и вибрации \n- Скриј од заклучен екран и статусна лента \n- Прикажувај на дното на списокот со известувања \n\n"<b>"Ниво 0"</b>" \n- Блокирај ги сите известувања од апликацијата"</string>
     <string name="inline_done_button" msgid="6043094985588909584">"Готово"</string>
     <string name="inline_ok_button" msgid="603075490581280343">"Примени"</string>
     <string name="inline_turn_off_notifications" msgid="8543989584403106071">"Исклучи известувања"</string>
@@ -630,14 +660,14 @@
     <string name="keyboard_shortcut_search_category_current_app" msgid="2011953559133734491">"Тековна аплик."</string>
     <string name="group_system_access_notification_shade" msgid="7116898151485382275">"Пристапете до панелот со известувања"</string>
     <string name="group_system_full_screenshot" msgid="7389040853798023211">"Снимете целосна слика од екранот"</string>
-    <string name="group_system_access_system_app_shortcuts" msgid="4421497579210445641">"Пристапете до список на системот / кратенки за апликациите"</string>
+    <string name="group_system_access_system_app_shortcuts" msgid="4421497579210445641">"Пристапете до список на кратенки за системот и апликациите"</string>
     <string name="group_system_go_back" msgid="8838454003680364227">"Назад: вратете се во претходната состојба (копче за назад)"</string>
     <string name="group_system_access_home_screen" msgid="1857344316928441909">"Пристапете до почетниот екран"</string>
     <string name="group_system_overview_open_apps" msgid="6897128761003265350">"Преглед на отворените апликации"</string>
     <string name="group_system_cycle_forward" msgid="9202444850838205990">"Прелистувајте ги неодамнешните апликации (напред)"</string>
     <string name="group_system_cycle_back" msgid="5163464503638229131">"Прелистувајте ги неодамнешните апликации (назад)"</string>
     <string name="group_system_access_all_apps_search" msgid="488070738028991753">"Отв. список со сите аплик. и пребарувајте (т.е. Пребарување/Стартер)"</string>
-    <string name="group_system_hide_reshow_taskbar" msgid="3809304065624351131">"Сокриј и (повторно) прикажи ја лентата со задачи"</string>
+    <string name="group_system_hide_reshow_taskbar" msgid="3809304065624351131">"Скриј и (повторно) прикажи ја лентата со задачи"</string>
     <string name="group_system_access_system_settings" msgid="7961639365383008053">"Пристапете до поставките на системот"</string>
     <string name="group_system_access_google_assistant" msgid="1186152943161483864">"Пристапете до „Помошник на Google“"</string>
     <string name="group_system_lock_screen" msgid="7391191300363416543">"Заклучен екран"</string>
@@ -731,7 +761,7 @@
     <string name="accessibility_quick_settings_settings" msgid="7098489591715844713">"Отворете ги поставките."</string>
     <string name="accessibility_quick_settings_expand" msgid="2609275052412521467">"Отворете ги брзите поставки."</string>
     <string name="accessibility_quick_settings_collapse" msgid="4674876336725041982">"Затворете ги брзите поставки."</string>
-    <string name="accessibility_quick_settings_user" msgid="505821942882668619">"Најавени сте како <xliff:g id="ID_1">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_user" msgid="505821942882668619">"Најавени сте како: <xliff:g id="ID_1">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_choose_user_action" msgid="4554388498186576087">"изберете корисник"</string>
     <string name="data_connection_no_internet" msgid="691058178914184544">"Нема интернет"</string>
     <string name="accessibility_quick_settings_open_settings" msgid="536838345505030893">"Отворете ги поставките на <xliff:g id="ID_1">%s</xliff:g>."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Мени на копчето за вклучување"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Страница <xliff:g id="ID_1">%1$d</xliff:g> од <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Заклучен екран"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Телефонот се исклучи поради загреаност"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Сега телефонот работи нормално.\nДопрете за повеќе информации"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Телефонот беше премногу загреан, така што се исклучи за да се олади. Сега работи нормално.\n\nТелефонот може премногу да се загрее ако:\n	• користите апликации што работат со многу ресурси (како што се, на пример, апликациите за видеа, навигација или игри)\n	• преземате или поставувате големи датотеки\n	•го користите телефонот на високи температури"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Прикажи ги чекорите за грижа за уредот"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Телефонот се загрева"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Некои функции се ограничени додека телефонот се лади.\nДопрете за повеќе информации"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Телефонот автоматски ќе се обиде да се олади. Вие сепак ќе може да го користите, но тој може да работи побавно.\n\nОткако ќе се олади, ќе работи нормално."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Прикажи ги чекорите за грижа за уредот"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Исклучете го уредот од кабел"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Вашиот уред се загрева во близина на портата за полнење. Ако е поврзан со полнач или USB-додаток, исклучете го од него и внимавајте бидејќи кабелот може да е топол."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Зголемете го целиот екран"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Зголемувајте дел од екранот"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Отвори поставки за зголемување"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Затворете ги поставките за зголемување"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Повлечете на аголот за да ја промените големината"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Дозволете дијагонално лизгање"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Промени големина"</string>
@@ -861,13 +886,13 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Допрете за функциите за пристапност. Приспособете или заменете го копчево во „Поставки“.\n\n"<annotation id="link">"Прикажи поставки"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Преместете го копчето до работ за да го сокриете привремено"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Врати"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Отстранета е кратенката за <xliff:g id="FEATURE_NAME">%s</xliff:g>"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Кратенката за „<xliff:g id="FEATURE_NAME">%s</xliff:g>“ е отстранета"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{Отстранета е # кратенка}one{Отстранети се # кратенка}other{Отстранети се # кратенки}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Премести горе лево"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Премести горе десно"</string>
     <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Премести долу лево"</string>
     <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Премести долу десно"</string>
-    <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Премести до работ и сокриј"</string>
+    <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Премести до работ и скриј"</string>
     <string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Премести над работ и прикажи"</string>
     <string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Отстрани"</string>
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"вклучување/исклучување"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"означите како неомилена"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Преместете на позиција <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Контроли"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Изберете контроли за уредите до кои ќе имате брз пристап"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Задржете и влечете за да ги преуредите контролите"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Сите контроли се отстранети"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Промените не се зачувани"</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Обидете се со друг PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Потврдете ја промената за <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Повлечете за да видите повеќе"</string>
+    <string name="retry_face" msgid="416380073082560186">"Обидете се повторно со автентикација на лик"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Се вчитуваат препораки"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Аудиовизуелни содржини"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"Да се сокријат контролите за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
-    <string name="controls_media_active_session" msgid="3146882316024153337">"Аудиовизуелнава сесија не може да се сокрие."</string>
-    <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Сокриј"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"Да се скријат контролите за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="controls_media_active_session" msgid="3146882316024153337">"Аудиовизуелнава сесија не може да се скрие."</string>
+    <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Скриј"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Продолжи"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Поставки"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> од <xliff:g id="ARTIST_NAME">%2$s</xliff:g> е пуштено на <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> од <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> работи"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Пушти"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Пауза"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Претходна песна"</string>
@@ -947,7 +973,7 @@
     <string name="controls_error_removed" msgid="6675638069846014366">"Не е најдено"</string>
     <string name="controls_error_removed_title" msgid="1207794911208047818">"Контролата не е достапна"</string>
     <string name="controls_error_removed_message" msgid="2885911717034750542">"Не може да се пристапи до <xliff:g id="DEVICE">%1$s</xliff:g>. Проверете ја апликацијата <xliff:g id="APPLICATION">%2$s</xliff:g> за да се уверите дека контролата е сѐ уште достапна и дека поставките за апликацијата не се сменети."</string>
-    <string name="controls_open_app" msgid="483650971094300141">"Отвори апликација"</string>
+    <string name="controls_open_app" msgid="483650971094300141">"Отворете ја апликацијата"</string>
     <string name="controls_error_generic" msgid="352500456918362905">"Не може да се вчита статусот"</string>
     <string name="controls_error_failed" msgid="960228639198558525">"Грешка, обидете се повторно"</string>
     <string name="controls_menu_add" msgid="4447246119229920050">"Додајте контроли"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Звучници и екрани"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Предложени уреди"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Сопрете ја споделената сесија за да ги преместите аудиовизуелните содржини на друг уред"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Сопри"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Како функционира емитувањето"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Емитување"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Луѓето во ваша близина со компатибилни уреди со Bluetooth може да ги слушаат аудиозаписите што ги емитувате"</string>
@@ -981,12 +1009,12 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Не може да се зачува. Обидете се повторно."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Не може да се зачува."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Употребете најмалку 4 знаци"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Употребете помалку од 16 знаци"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Употребете помалку од <xliff:g id="LENGTH">%1$d</xliff:g> знаци"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Број на верзија"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Бројот на верзијата е копиран во привремената меморија."</string>
     <string name="basic_status" msgid="2315371112182658176">"Започни разговор"</string>
     <string name="select_conversation_title" msgid="6716364118095089519">"Виџети за разговор"</string>
-    <string name="select_conversation_text" msgid="3376048251434956013">"Допрете на разговор за да го додадете на вашиот почетен екран"</string>
+    <string name="select_conversation_text" msgid="3376048251434956013">"Допрете разговор за да го додадете на почетниот екран"</string>
     <string name="no_conversations_text" msgid="5354115541282395015">"Вашите неодамнешни разговори ќе се прикажуваат тука"</string>
     <string name="priority_conversations" msgid="3967482288896653039">"Приоритетни разговори"</string>
     <string name="recent_conversations" msgid="8531874684782574622">"Неодамнешни разговори"</string>
@@ -1009,7 +1037,7 @@
     <string name="audio_status" msgid="4237055636967709208">"Слушам"</string>
     <string name="game_status" msgid="1340694320630973259">"Играње игра"</string>
     <string name="empty_user_name" msgid="3389155775773578300">"Пријатели"</string>
-    <string name="empty_status" msgid="5938893404951307749">"Разговарај вечерва!"</string>
+    <string name="empty_status" msgid="5938893404951307749">"Ајде да разговараме!"</string>
     <string name="status_before_loading" msgid="1500477307859631381">"Содржините ќе се прикажат наскоро"</string>
     <string name="missed_call" msgid="4228016077700161689">"Пропуштен повик"</string>
     <string name="messages_count_overflow_indicator" msgid="7850934067082006043">"<xliff:g id="NUMBER">%d</xliff:g>+"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Проблем при читањето на мерачот на батеријата"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Допрете за повеќе информации"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Не е поставен аларм"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"внесете PIN/шема/лозинка"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Сензор за отпечатоци"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"автентицирате"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"внесете уред"</string>
@@ -1039,7 +1068,7 @@
     <string name="non_carrier_network_unavailable" msgid="770049357024492372">"Нема други достапни мрежи"</string>
     <string name="all_network_unavailable" msgid="4112774339909373349">"Нема достапни мрежи"</string>
     <string name="turn_on_wifi" msgid="1308379840799281023">"Wi-Fi"</string>
-    <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Допрете на мрежа за да се поврзете"</string>
+    <string name="tap_a_network_to_connect" msgid="1565073330852369558">"Допрете мрежа за да се поврзете"</string>
     <string name="unlock_to_view_networks" msgid="5072880496312015676">"Отклучете за да се прикажат мрежите"</string>
     <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"Се пребаруваат мрежи…"</string>
     <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Не успеа да се поврзе на мрежата"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"„Помошникот“ слуша"</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="note_task_button_label" msgid="8718616095800343136">"Фаќање белешки"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Фаќање белешки"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Фаќање белешки, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1097,15 +1127,17 @@
     <string name="log_access_confirmation_title" msgid="4843557604739943395">"Да се дозволи <xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> да пристапува до сите дневници за евиденција на уредот?"</string>
     <string name="log_access_confirmation_allow" msgid="752147861593202968">"Дозволи еднократен пристап"</string>
     <string name="log_access_confirmation_deny" msgid="2389461495803585795">"Не дозволувај"</string>
-    <string name="log_access_confirmation_body" msgid="6883031912003112634">"Дневниците за евиденција на уредот снимаат што се случува на вашиот уред. Апликациите може да ги користат овие дневници за евиденција за да наоѓаат и поправаат проблеми.\n\nНекои дневници за евиденција може да содржат чувствителни податоци, па затоа дозволете им пристап до сите дневници за евиденција на уредот само на апликациите во кои имате доверба. \n\nАко не ѝ дозволите на апликацијава да пристапува до сите дневници за евиденција на уредот, таа сепак ќе може да пристапува до сопствените дневници за евиденција. Производителот на вашиот уред можеби сепак ќе може да пристапува до некои дневници за евиденција или податоци на уредот."</string>
+    <string name="log_access_confirmation_body" msgid="6883031912003112634">"Дневниците за евиденција на уредот снимаат што се случува на вашиот уред. Апликациите може да ги користат овие дневници за евиденција за да наоѓаат и решаваат проблеми.\n\nНекои дневници за евиденција може да содржат чувствителни податоци, па затоа дозволете им пристап до сите дневници за евиденција на уредот само на апликациите во кои имате доверба. \n\nАко не ѝ дозволите на апликацијава да пристапува до сите дневници за евиденција на уредот, таа сепак ќе може да пристапува до сопствените дневници за евиденција. Производителот на вашиот уред можеби и понатаму ќе може да пристапува до некои дневници за евиденција или податоци на уредот."</string>
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Дознајте повеќе"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Дознајте повеќе на <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Отворете ја <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• апликацијата е поставена"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• најмалку една картичка е додадена во Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• инсталирана е апликација за камера"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• апликацијата е поставена"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• достапен е најмалку еден уред"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"За да ја додадете апликацијата Wallet како кратенка, апликацијата мора да е инсталирана"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"За да ја додадете апликацијата Wallet како кратенка, мора да имате додадено најмалку една картичка"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"За да го додадете скенерот на QR-кодови како кратенка, погрижете се дека имате инсталирано апликација за камера"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"За да ја додадете апликацијата Home како кратенка, апликацијата мора да е инсталирана"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• достапен е најмалку еден уред"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Изберете стандардна апликација за белешки за да ја користите кратенката за фаќање белешки"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Изберете апликација"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Допрете и задржете ја кратенката"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Откажи"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Променете го екранот сега"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Поврзете го пенкалото со полнач"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Слаба батерија на пенкало"</string>
     <string name="video_camera" msgid="7654002575156149298">"Видеокамера"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Не можете да се јавите од профилов"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Вашето работно правило ви дозволува да упатувате повици само од работниот профил"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Не може да повикувате од лична апликација"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Вашата организација ви дозволува да упатувате повици само од работни апликации"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Префрли се на работен профил"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Затвори"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Инсталирајте работна апликација на телефон"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Откажи"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Приспособете го заклучениот екран"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Отклучување за приспособување на заклучениот екран"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi не е достапно"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камерата е блокирана"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камерата и микрофонот се блокирани"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Микрофонот е блокиран"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Приоритетниот режим е вклучен"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Вниманието на „Помошникот“ е вклучено"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Поставете стандардна апликација за белешки во „Поставки“"</string>
+    <string name="install_app" msgid="5066668100199613936">"Инсталирајте ја апликацијата"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Микрофон и камера"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Неодамнешно користење на апликација"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Видете го скорешниот пристап"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Готово"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Проширување и прикажување на опциите"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Собирање"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Затвори ја апликацијава"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Апликацијата <xliff:g id="APP_NAME">%1$s</xliff:g> е затворена"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Управувајте со услугата"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Управувајте со пристапот"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Се користи од телефонски повик"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Неодамна користено во телефонски повик"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Се користи од <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Неодамна користено од <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Се користи од <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Неодамна користено од <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Се користи од <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Неодамна користено од <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-mk/strings_tv.xml b/packages/SystemUI/res/values-mk/strings_tv.xml
deleted file mode 100644
index 529d19d..0000000
--- a/packages/SystemUI/res/values-mk/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN е поврзана"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN е исклучена"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Преку <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Известувања"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Нема известувања"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Микрофонот снима"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Камерата снима"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Камерата и микрофонот снимаат"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Микрофонот прекина со снимање"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Камерата прекина со снимање"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Камерата и микрофонот прекинаа со снимање"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Снимањето екран започна"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Снимањето екран сопре"</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 4c302ff..0a42d7c 100644
--- a/packages/SystemUI/res/values-mk/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-mk/tiles_states_strings.xml
@@ -87,9 +87,9 @@
     <item msgid="2075645297847971154">"Вклучено"</item>
   </string-array>
   <string-array name="tile_states_color_correction">
-    <item msgid="2840507878437297682">"Недостапна"</item>
+    <item msgid="2840507878437297682">"Недостапно"</item>
     <item msgid="1909756493418256167">"Исклучено"</item>
-    <item msgid="4531508423703413340">"Вклучена"</item>
+    <item msgid="4531508423703413340">"Вклучено"</item>
   </string-array>
   <string-array name="tile_states_inversion">
     <item msgid="3638187931191394628">"Недостапно"</item>
@@ -157,9 +157,9 @@
     <item msgid="6866424167599381915">"Вклучено"</item>
   </string-array>
   <string-array name="tile_states_qr_code_scanner">
-    <item msgid="7435143266149257618">"Недостапен"</item>
-    <item msgid="3301403109049256043">"Исклучен"</item>
-    <item msgid="8878684975184010135">"Вклучен"</item>
+    <item msgid="7435143266149257618">"Недостапно"</item>
+    <item msgid="3301403109049256043">"Исклучено"</item>
+    <item msgid="8878684975184010135">"Вклучено"</item>
   </string-array>
   <string-array name="tile_states_alarm">
     <item msgid="4936533380177298776">"Недостапно"</item>
@@ -167,9 +167,9 @@
     <item msgid="7809470840976856149">"Вклучено"</item>
   </string-array>
   <string-array name="tile_states_onehanded">
-    <item msgid="8189342855739930015">"Недостапен"</item>
-    <item msgid="146088982397753810">"Исклучен"</item>
-    <item msgid="460891964396502657">"Вклучен"</item>
+    <item msgid="8189342855739930015">"Недостапно"</item>
+    <item msgid="146088982397753810">"Исклучено"</item>
+    <item msgid="460891964396502657">"Вклучено"</item>
   </string-array>
   <string-array name="tile_states_dream">
     <item msgid="6184819793571079513">"Недостапно"</item>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index aa61976..b7a03d8 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB പ്രവർത്തനക്ഷമമാക്കുക"</string>
     <string name="learn_more" msgid="4690632085667273811">"കൂടുതലറിയുക"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"സ്ക്രീൻഷോട്ട്"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock പ്രവർത്തനരഹിതമാക്കി"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"എക്സ്റ്റൻഡ് അൺലോക്ക് പ്രവർത്തനരഹിതമാക്കി"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ചിത്രം അയച്ചു"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"സ്‌ക്രീൻഷോട്ട് സംരക്ഷിക്കുന്നു..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"ഔദ്യോഗിക പ്രൊഫൈലിലേക്ക് സ്ക്രീൻഷോട്ട് സംരക്ഷിക്കുന്നു…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> ഈ സ്ക്രീൻഷോട്ട് തിരിച്ചറിഞ്ഞു."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> എന്ന ആപ്പും തുറന്നിരിക്കുന്ന മറ്റ് ആപ്പും ഈ സ്ക്രീൻഷോട്ട് തിരിച്ചറിഞ്ഞു."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"കുറിപ്പിലേക്ക് ചേർക്കുക"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"സ്ക്രീൻ റെക്കോർഡർ"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"സ്ക്രീൻ റെക്കോർഡർ"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"സ്ക്രീൻ റെക്കോർഡിംഗ് പ്രോസസുചെയ്യുന്നു"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"ഒരു സ്ക്രീൻ റെക്കോർഡിംഗ് സെഷനായി നിലവിലുള്ള അറിയിപ്പ്"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"റെക്കോർഡിംഗ് ആരംഭിക്കണോ?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"റെക്കോർഡ് ചെയ്യുമ്പോൾ, നിങ്ങളുടെ സ്‌ക്രീനിൽ ദൃശ്യമാകുന്നതോ ഉപകരണത്തിൽ പ്ലേ ചെയ്യുന്നതോ ആയ ഏത് തന്ത്രപ്രധാന വിവരങ്ങളും Android സിസ്റ്റത്തിന് പകർത്താനാവും. പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിവരം, ഫോട്ടോകൾ, സന്ദേശങ്ങൾ, ഓഡിയോ എന്നിവ ഇതിൽ ഉൾപ്പെടുന്നു."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"പൂർണ സ്ക്രീൻ റെക്കോർഡ് ചെയ്യൂ"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"ഒറ്റ ആപ്പ് റെക്കോർഡ് ചെയ്യുക"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"റെക്കോർഡ് ചെയ്യുമ്പോൾ, Android-ന് സ്ക്രീനിൽ ദൃശ്യമാകുന്നതോ ഉപകരണത്തിൽ പ്ലേ ചെയ്യുന്നതോ ആയ ഏത് കാര്യത്തിലേക്കും ആക്സസ് ഉണ്ട്. അതിനാൽ, പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ അല്ലെങ്കിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട മറ്റു വിവരങ്ങൾ എന്നിവ നൽകുമ്പോൾ സൂക്ഷിക്കുക."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"ഒരു ആപ്പ് റെക്കോർഡ് ചെയ്യുമ്പോൾ, Android-ന് ആ ആപ്പിൽ കാണിക്കുന്നതോ പ്ലേ ചെയ്യുന്നതോ ആയ എല്ലാത്തിലേക്കും ആക്സസ് ഉണ്ട്. അതിനാൽ, പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ അല്ലെങ്കിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട മറ്റു വിവരങ്ങൾ എന്നിവ നൽകുമ്പോൾ സൂക്ഷിക്കുക."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"റെക്കോർഡിംഗ് ആരംഭിക്കുക"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"റെക്കോർഡ് ചെയ്യൽ ആരംഭിക്കണോ?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"റെക്കോർഡ് ചെയ്യുമ്പോൾ, Android-ന് സ്ക്രീനിൽ ദൃശ്യമാകുന്നതോ ഉപകരണത്തിൽ പ്ലേ ചെയ്യുന്നതോ ആയ ഏത് കാര്യത്തിലേക്കും ആക്സസ് ഉണ്ട്. അതിനാൽ പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ, ഓഡിയോ, വീഡിയോ എന്നിവ പോലുള്ള കാര്യങ്ങൾ നൽകുമ്പോൾ സൂക്ഷിക്കുക."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"നിങ്ങൾ ഒരു ആപ്പ് റെക്കോർഡ് ചെയ്യുമ്പോൾ, Android-ന് ആ ആപ്പിൽ കാണിക്കുന്നതോ പ്ലേ ചെയ്യുന്നതോ ആയ എല്ലാത്തിലേക്കും ആക്സസ് ഉണ്ട്. അതിനാൽ പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ, ഓഡിയോ, വീഡിയോ എന്നിവ പോലുള്ള കാര്യങ്ങൾ നൽകുമ്പോൾ സൂക്ഷിക്കുക."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"റെക്കോർഡ് ചെയ്യൽ ആരംഭിക്കുക"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"ഓഡിയോ റെക്കോർഡ് ചെയ്യുക"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"ഉപകരണത്തിന്റെ ഓഡിയോ"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"സംഗീതം, കോളുകൾ, റിംഗ്‌ടോണുകൾ എന്നിവപോലെ നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്നുള്ള ശബ്ദം"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"മൈക്രോഫോൺ"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"ഉപകരണത്തിന്റെ ഓഡിയോയും മൈക്രോഫോണും"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"ആരംഭിക്കുക"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"ആരംഭിക്കുക"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"സ്ക്രീൻ റെക്കോർഡ് ചെയ്യുന്നു"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"സ്ക്രീനും ഓഡിയോയും റെക്കോർഡ് ചെയ്യുന്നു"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"സ്‌ക്രീനിൽ തൊടുന്ന ഭാഗങ്ങൾ കാണിക്കുക"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"പങ്കിടുക"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"സ്ക്രീൻ റെക്കോർഡിംഗ് സംരക്ഷിച്ചു"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"കാണാൻ ടാപ്പ് ചെയ്യുക"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"സ്ക്രീൻ റെക്കോർഡിംഗ് ഇല്ലാതാക്കുന്നതിൽ പിശക്"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"സ്ക്രീൻ റെക്കോർഡിംഗ് സംരക്ഷിക്കുന്നതിൽ പിശക്"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"സ്ക്രീൻ റെക്കോർഡിംഗ് ആരംഭിക്കുന്നതിൽ പിശക്"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"പൂർണ്ണ സ്‌ക്രീനിൽ കാണുന്നു"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"പുറത്തുകടക്കാൻ, മുകളിൽ നിന്ന് താഴോട്ട് സ്വൈപ്പ് ചെയ്യുക."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"മനസ്സിലായി"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"മടങ്ങുക"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"ഹോം"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"മെനു"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"മുഖം പരിശോധിച്ചുറപ്പിച്ചു"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"സ്ഥിരീകരിച്ചു"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"പൂർത്തിയാക്കാൻ സ്ഥിരീകരിക്കുക ടാപ്പ് ചെയ്യൂ"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"മുഖം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്‌തു. തുടരാൻ അൺലോക്ക് ഐക്കൺ അമർത്തുക."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"മുഖം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്‌തു"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"മുഖം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്‌തു. തുടരാൻ അമർത്തുക."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"മുഖം തിരിച്ചറിഞ്ഞു. തുടരാൻ അമർത്തുക."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"മുഖം തിരിച്ചറിഞ്ഞു. തുടരാൻ അൺലോക്ക് ഐക്കൺ അമർത്തുക."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"പരിശോധിച്ചുറപ്പിച്ചു"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"പരിശോധിച്ചുറപ്പിക്കൽ റദ്ദാക്കുക"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"പിൻ ഉപയോഗിക്കുക"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"പാറ്റേൺ ഉപയോഗിക്കുക"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"പാസ്‌വേഡ് ഉപയോഗിക്കുക"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"അടുത്ത തവണയും നിങ്ങൾ തെറ്റായ പാറ്റേൺ നൽകിയാൽ, നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈലും അതിന്റെ ഡാറ്റയും ഇല്ലാതാക്കപ്പെടും."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"അടുത്ത തവണയും നിങ്ങൾ തെറ്റായ പിൻ നൽകിയാൽ, നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈലും അതിന്റെ ഡാറ്റയും ഇല്ലാതാക്കപ്പെടും."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"അടുത്ത തവണയും നിങ്ങൾ തെറ്റായ പാസ്‌വേഡ് നൽകിയാൽ, നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈലും അതിന്റെ ഡാറ്റയും ഇല്ലാതാക്കപ്പെടും."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"സജ്ജീകരിക്കുക"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"ഇപ്പോൾ വേണ്ട"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"സുരക്ഷയും പ്രകടനവും മെച്ചപ്പെടുത്താൻ ഇത് ആവശ്യമാണ്"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"ഫിംഗർപ്രിന്റ് അൺലോക്ക് വീണ്ടും സജ്ജീകരിക്കുക"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"ഫിംഗർപ്രിന്റ് അൺലോക്ക്"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"ഫിംഗർപ്രിന്റ് അൺലോക്ക് സജ്ജീകരിക്കുക"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"ഫിംഗർപ്രിന്റ് അൺലോക്ക് വീണ്ടും സജ്ജീകരിക്കാൻ, നിങ്ങളുടെ നിലവിലുള്ള ഫിംഗർപ്രിന്റ് ചിത്രങ്ങളും മോഡലുകളും ഇല്ലാതാക്കും.\n\nഅവ ഇല്ലാതാക്കിയ ശേഷം, ഫോൺ അൺലോക്ക് ചെയ്യാനോ ഇത് നിങ്ങൾ തന്നെയാണെന്ന് പരിശോധിച്ചുറപ്പിക്കാനോ ഫിംഗർപ്രിന്റ് ഉപയോഗിക്കുന്നതിന്, ഫിംഗർപ്രിന്റ് അൺലോക്ക് വീണ്ടും സജ്ജീകരിക്കേണ്ടതുണ്ട്."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"ഫിംഗർപ്രിന്റ് അൺലോക്ക് വീണ്ടും സജ്ജീകരിക്കാൻ, നിങ്ങളുടെ നിലവിലുള്ള ഫിംഗർപ്രിന്റ് ചിത്രങ്ങളും മോഡലും ഇല്ലാതാക്കും.\n\nഅവ ഇല്ലാതാക്കിയ ശേഷം, ഫോൺ അൺലോക്ക് ചെയ്യാനോ ഇത് നിങ്ങൾ തന്നെയാണെന്ന് പരിശോധിച്ചുറപ്പിക്കാനോ ഫിംഗർപ്രിന്റ് ഉപയോഗിക്കുന്നതിന്, ഫിംഗർപ്രിന്റ് അൺലോക്ക് വീണ്ടും സജ്ജീകരിക്കേണ്ടതുണ്ട്."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"ഫിംഗർപ്രിന്റ് അൺലോക്ക് സജ്ജീകരിക്കാനായില്ല. വീണ്ടും ശ്രമിക്കാൻ ക്രമീകരണത്തിലേക്ക് പോകുക."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"ഫെയ്‌സ് അൺലോക്ക് വീണ്ടും സജ്ജീകരിക്കുക"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"ഫെയ്‌സ് അൺലോക്ക്"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"ഫെയ്‌സ് അൺലോക്ക് സജ്ജീകരിക്കുക"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"ഫെയ്‌സ് അൺലോക്ക് വീണ്ടും സജ്ജീകരിക്കാൻ, നിങ്ങളുടെ നിലവിലുള്ള മുഖ മോഡൽ ഇല്ലാതാക്കും.\n\nഫോൺ അൺലോക്ക് ചെയ്യാൻ നിങ്ങളുടെ മുഖം ഉപയോഗിക്കുന്നതിന് ഈ ഫീച്ചർ വീണ്ടും സജ്ജീകരിക്കേണ്ടതുണ്ട്."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"ഫെയ്‌സ് അൺലോക്ക് സജ്ജീകരിക്കാനായില്ല. വീണ്ടും ശ്രമിക്കാൻ ക്രമീകരണത്തിലേക്ക് പോകുക."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"ഫിംഗർപ്രിന്റ് സെൻസർ സ്‌പർശിക്കുക"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"തുടരാൻ അൺലോക്ക് ഐക്കൺ അമർത്തുക"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"മുഖം തിരിച്ചറിയാനായില്ല. പകരം ഫിംഗർപ്രിന്റ് ഉപയോഗിക്കൂ."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ഓഡിയോ"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ഹെഡ്‌സെറ്റ്"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ഇൻപുട്ട്"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"ശ്രവണ സഹായികൾ"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ശ്രവണ സഹായികൾ"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ഓണാക്കുന്നു…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"സ്‌ക്രീൻ സ്വയമേവ തിരിയൽ"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"സ്‌ക്രീൻ സ്വയമേവ തിരിക്കുക"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"മുഖം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്‌തു"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"മുഖം തിരിച്ചറിഞ്ഞു"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"വീണ്ടും ശ്രമിക്കാൻ മുകളിലേക്ക് സ്വൈപ്പ് ചെയ്യുക"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"വീണ്ടും ഫെയ്സ്അൺലോക്ക് പരീക്ഷിക്കാൻ മുകളിലേക്ക് സ്വൈപ്പുചെയ്യൂ"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC ഉപയോഗിക്കാൻ അൺലോക്ക് ചെയ്യുക"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"ഈ ഉപകരണം നിങ്ങളുടെ സ്ഥാപനത്തിന്റേതാണ്"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"ഈ ഉപകരണം <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> എന്ന സ്ഥാപനത്തിന്റേതാണ്"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"ഉപയോക്താവിനെ ഇല്ലാതാക്കണോ?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"ഈ ഉപയോക്താവിന്റെ എല്ലാ ആപ്സും ഡാറ്റയും ഇല്ലാതാക്കും."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"നീക്കംചെയ്യുക"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"റെക്കോർഡ് ചെയ്യുമ്പോഴോ കാസ്‌റ്റ് ചെയ്യുമ്പോഴോ നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്ന് പ്ലേ ചെയ്യുന്നതോ നിങ്ങളുടെ സ്‌ക്രീനിൽ ദൃശ്യമാകുന്നതോ ആയ എല്ലാ വിവരങ്ങളിലേക്കും <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-ന് ആക്‌സസ് ഉണ്ടായിരിക്കും. നിങ്ങൾ പ്ലേ ചെയ്യുന്ന ഒഡിയോ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, പാസ്‌വേഡുകൾ എന്നിവ പോലുള്ള വിവരങ്ങൾ ഇതിൽ ഉൾപ്പെടുന്നു."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"റെക്കോർഡ് ചെയ്യുമ്പോഴോ കാസ്‌റ്റ് ചെയ്യുമ്പോഴോ നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്ന് പ്ലേ ചെയ്യുന്നതോ നിങ്ങളുടെ സ്‌ക്രീനിൽ ദൃശ്യമാകുന്നതോ ആയ എല്ലാ വിവരങ്ങളിലേക്കും ഈ ഫംഗ്‌ഷൻ ലഭ്യമാക്കുന്ന സേവനത്തിന് ആക്‌സസ് ഉണ്ടായിരിക്കും. നിങ്ങൾ പ്ലേ ചെയ്യുന്ന ഓഡിയോ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, പാസ്‌വേഡുകൾ എന്നിവ പോലുള്ള വിവരങ്ങൾ ഇതിൽ ഉൾപ്പെടുന്നു."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"റെക്കോർഡ് ചെയ്യൽ അല്ലെങ്കിൽ കാസ്റ്റ് ചെയ്യൽ ആരംഭിക്കണോ?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ഉപയോഗിച്ച് റെക്കോർഡ് ചെയ്യൽ അല്ലെങ്കിൽ കാസ്‌റ്റ് ചെയ്യൽ ആരംഭിക്കണോ?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"പങ്കിടാനോ റെക്കോർഡ് ചെയ്യാനോ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> എന്നതിനെ അനുവദിക്കണോ?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"മുഴുവൻ സ്‌ക്രീൻ"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"ഒറ്റ ആപ്പ്"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"പങ്കിടുമ്പോൾ, റെക്കോർഡ് ചെയ്യുമ്പോൾ അല്ലെങ്കിൽ കാസ്റ്റ് ചെയ്യുമ്പോൾ, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> എന്നതിന് നിങ്ങളുടെ സ്ക്രീനിൽ ദൃശ്യമാകുന്നതോ ഉപകരണത്തിൽ പ്ലേ ചെയ്യുന്നതോ ആയ ഏത് കാര്യത്തിലേക്കും ആക്സസ് ഉണ്ട്. അതിനാൽ, പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ അല്ലെങ്കിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട മറ്റു വിവരങ്ങൾ എന്നിവ നൽകുമ്പോൾ സൂക്ഷിക്കുക."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"ഒരു ആപ്പ് പങ്കിടുമ്പോൾ, റെക്കോർഡ് ചെയ്യുമ്പോൾ അല്ലെങ്കിൽ കാസ്റ്റ് ചെയ്യുമ്പോൾ, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> എന്നതിന് ആപ്പിൽ കാണിക്കുന്ന അല്ലെങ്കിൽ പ്ലേ ചെയ്യുന്ന എല്ലാത്തിലേക്കും ആക്സസ് ഉണ്ട്. അതിനാൽ, പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ അല്ലെങ്കിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട മറ്റു വിവരങ്ങൾ എന്നിവ നൽകുമ്പോൾ സൂക്ഷിക്കുക."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"തുടരുക"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"ഒരു ആപ്പ് പങ്കിടുക അല്ലെങ്കിൽ റെക്കോർഡ് ചെയ്യുക"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"പങ്കിടാനോ റെക്കോർഡ് ചെയ്യാനോ ഈ ആപ്പിനെ അനുവദിക്കണോ?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"പങ്കിടുമ്പോൾ, റെക്കോർഡ് ചെയ്യുമ്പോൾ അല്ലെങ്കിൽ കാസ്റ്റ് ചെയ്യുമ്പോൾ, ഈ ആപ്പിന് നിങ്ങളുടെ സ്ക്രീനിൽ ദൃശ്യമാകുന്നതോ ഉപകരണത്തിൽ പ്ലേ ചെയ്യുന്നതോ ആയ ഏത് കാര്യത്തിലേക്കും ആക്സസ് ഉണ്ട്. അതിനാൽ, പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ അല്ലെങ്കിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട മറ്റു വിവരങ്ങൾ എന്നിവ നൽകുമ്പോൾ സൂക്ഷിക്കുക."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"ഒരു ആപ്പ് പങ്കിടുമ്പോൾ, റെക്കോർഡ് ചെയ്യുമ്പോൾ അല്ലെങ്കിൽ കാസ്റ്റ് ചെയ്യുമ്പോൾ, ഈ ആപ്പിന് ആപ്പിൽ കാണിക്കുന്ന അല്ലെങ്കിൽ പ്ലേ ചെയ്യുന്ന എല്ലാത്തിലേക്കും ആക്സസ് ഉണ്ട്. അതിനാൽ, പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ അല്ലെങ്കിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട മറ്റു വിവരങ്ങൾ എന്നിവ നൽകുമ്പോൾ സൂക്ഷിക്കുക."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"റെക്കോർഡ് ചെയ്യുമ്പോഴോ കാസ്‌റ്റ് ചെയ്യുമ്പോഴോ നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്ന് പ്ലേ ചെയ്യുന്നതോ നിങ്ങളുടെ സ്‌ക്രീനിൽ ദൃശ്യമാകുന്നതോ ആയ എല്ലാ വിവരങ്ങളിലേക്കും <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> എന്നതിന് ആക്‌സസ് ഉണ്ടായിരിക്കും. നിങ്ങൾ പ്ലേ ചെയ്യുന്ന ഓഡിയോ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, പാസ്‌വേഡുകൾ എന്നിവ പോലുള്ള വിവരങ്ങൾ ഇതിൽ ഉൾപ്പെടുന്നു."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"റെക്കോർഡ് ചെയ്യൽ അല്ലെങ്കിൽ കാസ്റ്റ് ചെയ്യൽ ആരംഭിക്കണോ?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"റെക്കോർഡ് ചെയ്യുമ്പോഴോ കാസ്‌റ്റ് ചെയ്യുമ്പോഴോ നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്ന് പ്ലേ ചെയ്യുന്നതോ നിങ്ങളുടെ സ്‌ക്രീനിൽ ദൃശ്യമാകുന്നതോ ആയ എല്ലാ വിവരങ്ങളിലേക്കും ഈ ഫംഗ്‌ഷൻ ലഭ്യമാക്കുന്ന സേവനത്തിന് ആക്‌സസ് ഉണ്ടായിരിക്കും. നിങ്ങൾ പ്ലേ ചെയ്യുന്ന ഓഡിയോ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, പാസ്‌വേഡുകൾ എന്നിവ പോലുള്ള വിവരങ്ങൾ ഇതിൽ ഉൾപ്പെടുന്നു."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"മുഴുവൻ സ്‌ക്രീൻ"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"ഒറ്റ ആപ്പ്"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"ഒരു ആപ്പ് പങ്കിടുക അല്ലെങ്കിൽ റെക്കോർഡ് ചെയ്യുക"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ഉപയോഗിച്ച് റെക്കോർഡ് ചെയ്യൽ അല്ലെങ്കിൽ കാസ്‌റ്റ് ചെയ്യൽ ആരംഭിക്കണോ?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"പങ്കിടുമ്പോൾ, റെക്കോർഡ് ചെയ്യുമ്പോൾ അല്ലെങ്കിൽ കാസ്റ്റ് ചെയ്യുമ്പോൾ, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> എന്നതിന് നിങ്ങളുടെ സ്ക്രീനിൽ ദൃശ്യമാകുന്നതോ ഉപകരണത്തിൽ പ്ലേ ചെയ്യുന്നതോ ആയ ഏത് കാര്യത്തിലേക്കും ആക്സസ് ഉണ്ട്. അതിനാൽ പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ, ഓഡിയോ, വീഡിയോ എന്നിവ പോലുള്ള കാര്യങ്ങൾ നൽകുമ്പോൾ സൂക്ഷിക്കുക."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"ഒരു ആപ്പ് പങ്കിടുമ്പോൾ, റെക്കോർഡ് ചെയ്യുമ്പോൾ അല്ലെങ്കിൽ കാസ്റ്റ് ചെയ്യുമ്പോൾ, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> എന്നതിന് ആ ആപ്പിൽ കാണിക്കുന്ന അല്ലെങ്കിൽ പ്ലേ ചെയ്യുന്ന എല്ലാത്തിലേക്കും ആക്സസ് ഉണ്ട്. അതിനാൽ പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ, ഓഡിയോ, വീഡിയോ എന്നിവ പോലുള്ള കാര്യങ്ങൾ നൽകുമ്പോൾ സൂക്ഷിക്കുക."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"ആരംഭിക്കുക"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"കാസ്റ്റ് ചെയ്യാൻ ആരംഭിക്കണോ?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"നിങ്ങൾ കാസ്റ്റ് ചെയ്യുമ്പോൾ, Android-ന് സ്ക്രീനിൽ ദൃശ്യമാകുന്നതോ ഉപകരണത്തിൽ പ്ലേ ചെയ്യുന്നതോ ആയ ഏത് കാര്യത്തിലേക്കും ആക്സസ് ഉണ്ട്. അതിനാൽ പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ, ഓഡിയോ, വീഡിയോ എന്നിവ പോലുള്ള കാര്യങ്ങൾ നൽകുമ്പോൾ സൂക്ഷിക്കുക."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"നിങ്ങൾ ഒരു ആപ്പ് കാസ്റ്റ് ചെയ്യുമ്പോൾ, Android-ന് ആ ആപ്പിൽ കാണിക്കുന്നതോ പ്ലേ ചെയ്യുന്നതോ ആയ എല്ലാത്തിലേക്കും ആക്സസ് ഉണ്ട്. അതിനാൽ പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ, ഓഡിയോ, വീഡിയോ എന്നിവ പോലുള്ള കാര്യങ്ങൾ നൽകുമ്പോൾ സൂക്ഷിക്കുക."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"കാസ്റ്റ് ചെയ്യാൻ ആരംഭിക്കുക"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"പങ്കിടൽ ആരംഭിക്കണോ?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"പങ്കിടുമ്പോൾ, റെക്കോർഡ് ചെയ്യുമ്പോൾ അല്ലെങ്കിൽ കാസ്റ്റ് ചെയ്യുമ്പോൾ, Android-ന് നിങ്ങളുടെ സ്ക്രീനിൽ ദൃശ്യമാകുന്നതോ ഉപകരണത്തിൽ പ്ലേ ചെയ്യുന്നതോ ആയ ഏത് കാര്യത്തിലേക്കും ആക്സസ് ഉണ്ട്. അതിനാൽ പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ, ഓഡിയോ, വീഡിയോ എന്നിവ പോലുള്ള കാര്യങ്ങൾ നൽകുമ്പോൾ സൂക്ഷിക്കുക."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"ഒരു ആപ്പ് പങ്കിടുമ്പോൾ, റെക്കോർഡ് ചെയ്യുമ്പോൾ അല്ലെങ്കിൽ കാസ്റ്റ് ചെയ്യുമ്പോൾ, Android-ന് ആ ആപ്പിൽ കാണിക്കുന്ന അല്ലെങ്കിൽ പ്ലേ ചെയ്യുന്ന എല്ലാത്തിലേക്കും ആക്സസ് ഉണ്ട്. അതിനാൽ പാസ്‍വേഡുകൾ, പേയ്‌മെന്റ് വിശദാംശങ്ങൾ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ, ഓഡിയോ, വീഡിയോ എന്നിവ പോലുള്ള കാര്യങ്ങൾ നൽകുമ്പോൾ സൂക്ഷിക്കുക."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"ആരംഭിക്കുക"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"നിങ്ങൾ ആപ്പുകൾ മാറുമ്പോൾ പങ്കിടൽ താൽക്കാലികമായി നിർത്തും"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"പകരം ഈ ആപ്പ് പങ്കിടുക"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"മടങ്ങുക"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"ആപ്പ് മാറുക"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"നിങ്ങളുടെ ഐടി അഡ്‌മിൻ ബ്ലോക്ക് ചെയ്‌തു"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"ഉപകരണ നയം, സ്ക്രീൻ ക്യാപ്‌ചർ ചെയ്യൽ പ്രവർത്തനരഹിതമാക്കി"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"എല്ലാം മായ്‌ക്കുക"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"നിങ്ങളുടെ ഉപകരണത്തിൽ ഒരു സർട്ടിഫിക്കറ്റ് അതോറിറ്റി ഇൻസ്റ്റാൾ ചെയ്തിരിക്കുന്നു. നിങ്ങളുടെ സുരക്ഷിത നെറ്റ്‌വർക്ക് ട്രാഫിക്ക് നിരീക്ഷിക്കപ്പെടുകയോ പരിഷ്കരിക്കപ്പെടുയോ ചെയ്തേക്കാം."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"നിങ്ങളുടെ അഡ്‌മിൻ, നെറ്റ്‌വർക്ക് ലോഗിംഗ് ഓണാക്കിയിട്ടുണ്ട്, ഇതിന് നിങ്ങളുടെ ഉപകരണത്തിലെ ട്രാഫിക്ക് നിരീക്ഷിക്കാൻ കഴിയും."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"നിങ്ങളുടെ അഡ്‌മിൻ നെറ്റ്‌വർക്ക് ലോഗിംഗ് ഓണാക്കി, ഇത് നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈലിലെ ട്രാഫിക് നിരീക്ഷിക്കുന്നു എന്നാൽ വ്യക്തിപരമായ പ്രൊഫൈലിലെ ട്രാഫിക് നിരീക്ഷിക്കുന്നില്ല."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"ഈ ഉപകരണം <xliff:g id="VPN_APP">%1$s</xliff:g> വഴി ഇന്റർനെറ്റിലേക്ക് കണക്‌റ്റ് ചെയ്‌തിരിക്കുന്നു. ഇമെയിലുകളും ബ്രൗസിംഗ് ഡാറ്റയും ഉൾപ്പെടെയുള്ള നിങ്ങളുടെ നെറ്റ്‌വർക്ക് ആക്‌റ്റിവിറ്റി നിങ്ങളുടെ ഐടി അഡ്‌മിന് ദൃശ്യമാകും."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"ഈ ഉപകരണം <xliff:g id="VPN_APP">%1$s</xliff:g> വഴി ഇന്റർനെറ്റിലേക്ക് കണക്‌റ്റ് ചെയ്‌തിരിക്കുന്നു. ഇമെയിലുകളും ബ്രൗസിംഗ് ഡാറ്റയും ഉൾപ്പെടെയുള്ള നിങ്ങളുടെ നെറ്റ്‌വർക്ക് ആക്‌റ്റിവിറ്റി VPN ദാതാവിന് ദൃശ്യമാകും."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"ഈ ഉപകരണം <xliff:g id="VPN_APP">%1$s</xliff:g> വഴി ഇന്റർനെറ്റിലേക്ക് കണക്‌റ്റ് ചെയ്‌തിരിക്കുന്നു. ഇമെയിലുകളും ബ്രൗസിംഗ് ഡാറ്റയും ഉൾപ്പെടെയുള്ള നിങ്ങളുടെ നെറ്റ്‌വർക്ക് ആക്‌റ്റിവിറ്റി നിങ്ങളുടെ ഐടി അഡ്‌മിന് ദൃശ്യമാകും."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"ഈ ഉപകരണം <xliff:g id="VPN_APP_0">%1$s</xliff:g>, <xliff:g id="VPN_APP_1">%2$s</xliff:g> എന്നിവയിലൂടെ ഇന്റർനെറ്റിലേക്ക് കണക്‌റ്റ് ചെയ്‌തിരിക്കുന്നു. ഇമെയിലുകളും ബ്രൗസിംഗ് ഡാറ്റയും ഉൾപ്പെടെയുള്ള നിങ്ങളുടെ നെറ്റ്‌വർക്ക് ആക്‌റ്റിവിറ്റി നിങ്ങളുടെ ഐടി അഡ്‌മിന് ദൃശ്യമാകും."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"നിങ്ങളുടെ ഔദ്യോഗിക ആപ്പുകൾ <xliff:g id="VPN_APP">%1$s</xliff:g> വഴി ഇന്റർനെറ്റിലേക്ക് കണക്‌റ്റ് ചെയ്‌തിരിക്കുന്നു. ഇമെയിലുകളും ബ്രൗസിംഗ് ഡാറ്റയും ഉൾപ്പെടെയുള്ള, ഔദ്യോഗിക ആപ്പുകളിലെ നിങ്ങളുടെ നെറ്റ്‌വർക്ക് ആക്‌റ്റിവിറ്റി നിങ്ങളുടെ ഐടി അഡ്‌മിനും VPN ദാതാവിനും ദൃശ്യമാകും."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"നിങ്ങളുടെ വ്യക്തിപര ആപ്പുകൾ <xliff:g id="VPN_APP">%1$s</xliff:g> വഴി ഇന്റർനെറ്റിലേക്ക് കണക്‌റ്റ് ചെയ്‌തിരിക്കുന്നു. ഇമെയിലുകളും ബ്രൗസിംഗ് ഡാറ്റയും ഉൾപ്പെടെയുള്ള നിങ്ങളുടെ നെറ്റ്‌വർക്ക് ആക്‌റ്റിവിറ്റി നിങ്ങളുടെ VPN ദാതാവിന് ദൃശ്യമാകും."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"പ്രവർത്തനരഹിതമാക്കുക"</string>
     <string name="sound_settings" msgid="8874581353127418308">"ശബ്‌ദവും വൈബ്രേഷനും"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ക്രമീകരണം"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"കൂടുതൽ സുരക്ഷിതമായ നിലയിലേക്ക് വോളിയം കുറച്ചു"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"നിർദ്ദേശിച്ചതിനേക്കാൾ കൂടുതൽ സമയം വോളിയം ഉയർന്ന നിലയിലായിരുന്നു"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"സുരക്ഷിതമായ തലത്തിലേക്ക് വോളിയം കുറച്ചു"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"നിർദ്ദേശിച്ചിരിക്കുന്നതിനേക്കാൾ കൂടുതൽ സമയം ഹെഡ്‌ഫോണിന്റെ വോളിയം ഉയർന്ന നിലയിലായിരുന്നു"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"ഹെഡ്‌ഫോണിന്റെ വോളിയം ഈ ആഴ്‌ചത്തെ സുരക്ഷിത പരിധി കവിഞ്ഞു"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"കേൾക്കുന്നത് തുടരുക"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"വോളിയം കുറയ്‌ക്കുക"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"ആപ്പ് പിൻ ചെയ്തു"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"നിങ്ങൾ അൺപിൻ ചെയ്യുന്നതുവരെ ഇത് കാണുന്ന വിധത്തിൽ നിലനിർത്തും. അൺപിൻ ചെയ്യാൻ \'തിരികെ\', \'ചുരുക്കവിവരണം\' എന്നിവ സ്‌പർശിച്ച് പിടിക്കുക."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"നിങ്ങൾ അൺപിൻ ചെയ്യുന്നതുവരെ ഇത് കാണുന്ന വിധത്തിൽ നിലനിർത്തും. അൺപിൻ ചെയ്യാൻ \'തിരികെ പോവുക\', \'ഹോം\' ബട്ടണുകൾ സ്‌പർശിച്ച് പിടിക്കുക."</string>
@@ -622,7 +652,7 @@
     <string name="keyboard_shortcut_group_system_switch_input" msgid="952555530383268166">"കീബോർഡ് ലേഔട്ട് മാറുക"</string>
     <string name="keyboard_shortcut_clear_text" msgid="4679927133259287577">"ടെക്‌സ്റ്റ് മായ്‌ക്കുക"</string>
     <string name="keyboard_shortcut_search_list_title" msgid="1156178106617830429">"കുറുക്കുവഴികൾ"</string>
-    <string name="keyboard_shortcut_search_list_hint" msgid="5982623262974326746">"Search കുറുക്കുവഴികൾ"</string>
+    <string name="keyboard_shortcut_search_list_hint" msgid="5982623262974326746">"കുറുക്കുവഴികൾ തിരയുക"</string>
     <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"കുറുക്കുവഴി കണ്ടെത്തിയില്ല"</string>
     <string name="keyboard_shortcut_search_category_system" msgid="1151182120757052669">"സിസ്റ്റം"</string>
     <string name="keyboard_shortcut_search_category_input" msgid="5440558509904296233">"ഇൻപുട്ട്"</string>
@@ -640,7 +670,7 @@
     <string name="group_system_hide_reshow_taskbar" msgid="3809304065624351131">"ടാസ്‌ക്ബാർ മറയ്ക്കുക, (വീണ്ടും) കാണിക്കുക"</string>
     <string name="group_system_access_system_settings" msgid="7961639365383008053">"സിസ്റ്റം ക്രമീകരണം ആക്സസ് ചെയ്യുക"</string>
     <string name="group_system_access_google_assistant" msgid="1186152943161483864">"Google Assistant ആക്സസ് ചെയ്യുക"</string>
-    <string name="group_system_lock_screen" msgid="7391191300363416543">"സ്‌ക്രീൻ ലോക്ക് ചെയ്യുക"</string>
+    <string name="group_system_lock_screen" msgid="7391191300363416543">"ലോക്ക് സ്‌ക്രീൻ"</string>
     <string name="group_system_quick_memo" msgid="2914234890158583919">"അതിവേഗ മെമോ തയ്യാറാക്കുന്നതിന് നോട്ട്‌സ് ആപ്പ് തുറക്കുക"</string>
     <string name="keyboard_shortcut_group_system_multitasking" msgid="1065232949510862593">"സിസ്റ്റം മൾട്ടിടാസ്‌കിംഗ്"</string>
     <string name="system_multitasking_rhs" msgid="6593269428880305699">"നിലവിലെ ആപ്പ് വലതുവശത്ത് വരുന്ന രീതിയിൽ സ്ക്രീൻ വിഭജന മോഡിൽ കടക്കുക"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"പവർ മെനു"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"പേജ് <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"ലോക്ക് സ്‌ക്രീൻ"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"ചൂട് കൂടിയതിനാൽ ഫോൺ ഓഫാക്കി"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"നിങ്ങളുടെ ഫോൺ ഇപ്പോൾ സാധാരണ ഗതിയിൽ പ്രവർത്തിക്കുന്നു.\nകൂടുതൽ വിവരങ്ങൾക്ക് ടാപ്പ് ചെയ്യുക"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"ഫോൺ ചൂടായിരിക്കുന്നതിനാൽ തണുക്കാൻ ഓഫാക്കിയിരിക്കുന്നു. ഫോൺ ഇപ്പോൾ സാധാരണഗതിയിൽ പ്രവർത്തിക്കുന്നു.\n\nഫോണിന് ചൂട് കൂടാൻ കാരണം:\n	• ഗെയിമിംഗ്, വീഡിയോ അല്ലെങ്കിൽ നാവിഗേഷൻ തുടങ്ങിയ റിസോഴ്സ്-ഇന്റൻസീവായ ആപ്പുകൾ ഉപയോഗിക്കുന്നത്\n	• വലിയ ഫയലുകൾ അപ്‌ലോഡോ ഡൗൺലോഡോ ചെയ്യുന്നത്\n	• ഉയർന്ന താപനിലയിൽ ഫോൺ ഉപയോഗിക്കുന്നത്"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"പരിപാലന നിർദ്ദേശങ്ങൾ കാണുക"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"ഫോൺ ചൂടായിക്കൊണ്ടിരിക്കുന്നു"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"ഫോൺ തണുത്തുകൊണ്ടിരിക്കുമ്പോൾ ചില ഫീച്ചറുകൾ പരിമിതപ്പെടുത്തപ്പെടും.\nകൂടുതൽ വിവരങ്ങൾക്ക് ടാപ്പ് ചെയ്യുക"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"നിങ്ങളുടെ ഫോൺ സ്വയമേവ തണുക്കാൻ ശ്രമിക്കും. നിങ്ങൾക്ക് അപ്പോഴും ഫോൺ ഉപയോഗിക്കാമെങ്കിലും പ്രവർത്തനം മന്ദഗതിയിലായിരിക്കും.\n\nതണുത്തുകഴിഞ്ഞാൽ, ഫോൺ സാധാരണ ഗതിയിൽ പ്രവർത്തിക്കും."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"പരിപാലന നിർദ്ദേശങ്ങൾ കാണുക"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"ഉപകരണം അൺപ്ലഗ് ചെയ്യുക"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"ചാർജിംഗ് പോർട്ടിന് സമീപം നിങ്ങളുടെ ഉപകരണം ചൂടാകുന്നുണ്ട്. ഇത് ചാർജറിലേക്കോ USB ആക്‌സസറിയിലേക്കോ കണക്‌റ്റ് ചെയ്‌തിട്ടുണ്ടെങ്കിൽ അൺപ്ലഗ് ചെയ്യുക, കേബിളും ചൂടായിരിക്കാമെന്നതിനാൽ ശ്രദ്ധിക്കണം."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"സ്ക്രീൻ പൂർണ്ണമായും മാഗ്നിഫൈ ചെയ്യുക"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"സ്‌ക്രീനിന്റെ ഭാഗം മാഗ്നിഫൈ ചെയ്യുക"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"മാഗ്നിഫിക്കേഷൻ ക്രമീകരണം തുറക്കുക"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"മാഗ്നിഫിക്കേഷൻ ക്രമീകരണം അടയ്‌ക്കുക"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"വലുപ്പം മാറ്റാൻ മൂല വലിച്ചിടുക"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"ഡയഗണൽ സ്‌ക്രോളിംഗ് അനുവദിക്കുക"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"വലുപ്പം മാറ്റുക"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"പ്രിയപ്പെട്ടതല്ലാതാക്കുക"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>-ാം സ്ഥാനത്തേയ്ക്ക് നീക്കുക"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"നിയന്ത്രണങ്ങൾ"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"വേഗത്തിൽ ആക്സസ് ചെയ്യാൻ ഉപകരണ നിയന്ത്രണങ്ങൾ തിരഞ്ഞെടുക്കുക"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"നിയന്ത്രണങ്ങൾ പുനഃക്രമീകരിക്കാൻ അമർത്തിപ്പിടിച്ച് വലിച്ചിടുക"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"എല്ലാ നിയന്ത്രണങ്ങളും നീക്കം ചെയ്തു"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"മാറ്റങ്ങൾ സംരക്ഷിച്ചിട്ടില്ല"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"മറ്റൊരു പിൻ പരീക്ഷിക്കുക"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> എന്നതിനുള്ള മാറ്റം സ്ഥിരീകരിക്കുക"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"കൂടുതൽ കാണാൻ സ്വൈപ്പ് ചെയ്യുക"</string>
+    <string name="retry_face" msgid="416380073082560186">"മുഖം പരിശോധിച്ചുറപ്പിക്കാൻ വീണ്ടും ശ്രമിക്കുക"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"നിർദ്ദേശങ്ങൾ ലോഡ് ചെയ്യുന്നു"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"മീഡിയ"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിനുള്ള ഈ മീഡിയാ കൺട്രോൾ മറയ്ക്കണോ?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"ക്രമീകരണം"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> എന്ന ആർട്ടിസ്റ്റിന്റെ <xliff:g id="SONG_NAME">%1$s</xliff:g> എന്ന ഗാനം <xliff:g id="APP_LABEL">%3$s</xliff:g> ആപ്പിൽ പ്ലേ ചെയ്യുന്നു"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>-ൽ <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> റൺ ചെയ്യുന്നു"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"പ്ലേ ചെയ്യുക"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"താൽക്കാലികമായി നിർത്തുക"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"മുമ്പത്തെ ട്രാക്ക്"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"സ്‌പീക്കറുകളും ഡിസ്പ്ലേകളും"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"നിർദ്ദേശിച്ച ഉപകരണങ്ങൾ"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"മീഡിയയെ മറ്റൊരു ഉപകരണത്തിലേക്ക് നീക്കുന്നതിന് നിങ്ങളുടെ പങ്കിട്ട സെഷൻ നിർത്തുക"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"നിർത്തുക"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"ബ്രോഡ്‌കാസ്‌റ്റ് എങ്ങനെയാണ് പ്രവർത്തിക്കുന്നത്"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"ബ്രോഡ്‌കാസ്റ്റ്"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"അനുയോജ്യമായ Bluetooth ഉപകരണങ്ങളോടെ സമീപമുള്ള ആളുകൾക്ക് നിങ്ങൾ ബ്രോഡ്‌കാസ്‌റ്റ് ചെയ്യുന്ന മീഡിയ കേൾക്കാനാകും"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"സംരക്ഷിക്കാൻ കഴിയില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"സംരക്ഷിക്കാൻ കഴിയില്ല."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"കുറഞ്ഞത് 4 പ്രതീകങ്ങളെങ്കിലും ഉപയോഗിക്കുക"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"16-ൽ കുറവ് പ്രതീകങ്ങൾ ഉപയോഗിക്കുക"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g>-ൽ കുറവ് പ്രതീകങ്ങൾ ഉപയോഗിക്കുക"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"ബിൽഡ് നമ്പർ"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"ക്ലിപ്പ്ബോർഡിലേക്ക് ബിൽഡ് നമ്പർ പകർത്തി."</string>
     <string name="basic_status" msgid="2315371112182658176">"സംഭാഷണം തുറക്കുക"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"നിങ്ങളുടെ ബാറ്ററി മീറ്റർ വായിക്കുന്നതിൽ പ്രശ്‌നമുണ്ട്"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"കൂടുതൽ വിവരങ്ങൾക്ക് ടാപ്പ് ചെയ്യുക"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"അലാറം സജ്ജീകരിച്ചിട്ടില്ല"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"സ്‌ക്രീൻ ലോക്ക് നൽകുക"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"ഫിംഗർപ്രിന്റ് സെൻസർ"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"പരിശോധിച്ചുറപ്പിക്കുക"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"ഉപകരണം നൽകുക"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant കേൾക്കുന്നു"</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="note_task_button_label" msgid="8718616095800343136">"കുറിപ്പ് രേഖപ്പെടുത്തൽ"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"കുറിപ്പ് രേഖപ്പെടുത്തൽ"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"കുറിപ്പ് രേഖപ്പെടുത്തൽ, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"കൂടുതലറിയുക"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"<xliff:g id="URL">%s</xliff:g> എന്നതിൽ കൂടുതലറിയുക"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> തുറക്കുക"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• ആപ്പ് സജ്ജീകരിച്ചിട്ടുണ്ട്"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Wallet-ലേക്ക് ഒരു കാർഡെങ്കിലും ചേർത്തിട്ടുണ്ട്"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• ഒരു ക്യാമറാ ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ട്"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• ആപ്പ് സജ്ജീകരിച്ചിട്ടുണ്ട്"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• ഒരു ഉപകരണമെങ്കിലും ലഭ്യമാണ്"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"കുറുക്കുവഴിയായി Wallet ആപ്പ് ചേർക്കാൻ, ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"കുറുക്കുവഴിയായി Wallet ആപ്പ് ചേർക്കാൻ, ഒരു കാർഡെങ്കിലും ചേർത്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"കുറുക്കുവഴിയായി QR കോഡ് സ്‌കാനർ ചേർക്കാൻ, ക്യാമറാ ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"കുറുക്കുവഴിയായി Home ആപ്പ് ചേർക്കാൻ, ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• ഒരു ഉപകരണമെങ്കിലും ലഭ്യമാണ്"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"കുറിപ്പ് രേഖപ്പെടുത്തൽ കുറുക്കുവഴി ഉപയോഗിക്കുന്നതിന് ഒരു ഡിഫോൾട്ട് കുറിപ്പ് ആപ്പ് തിരഞ്ഞെടുക്കുക"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"ആപ്പ് തിരഞ്ഞെടുക്കുക"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"സ്പർശിച്ച് പിടിക്കുക കുറുക്കുവഴി"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"റദ്ദാക്കുക"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"ഇപ്പോൾ സ്ക്രീനുകൾ മാറുക"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"നിങ്ങളുടെ സ്റ്റൈലസ് ചാർജറുമായി കണക്റ്റ് ചെയ്യുക"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"സ്റ്റൈലസിന്റെ ബാറ്ററി ചാർജ് കുറവാണ്"</string>
     <string name="video_camera" msgid="7654002575156149298">"വീഡിയോ ക്യാമറ"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"ഈ പ്രൊഫൈലിൽ നിന്ന് കോൾ ചെയ്യാനാകില്ല"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"ഔദ്യോഗിക പ്രൊഫൈലിൽ നിന്ന് മാത്രം ഫോൺ കോളുകൾ ചെയ്യാനാണ് നിങ്ങളുടെ ഔദ്യോഗിക നയം അനുവദിക്കുന്നത്"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"വ്യക്തിപര ആപ്പിൽ നിന്ന് കോൾ ചെയ്യാനാകില്ല"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"സ്ഥാപനം ഔദ്യോഗിക ആപ്പുകളിൽ നിന്ന് കോളുകൾ ചെയ്യാൻ മാത്രമേ നിങ്ങളെ അനുവദിക്കുന്നുള്ളൂ"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"ഔദ്യോഗിക പ്രൊഫൈലിലേക്ക് മാറുക"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"അടയ്ക്കുക"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"ഔദ്യോഗിക ഫോൺ ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്യുക"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"റദ്ദാക്കുക"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"ലോക്ക് സ്‌ക്രീൻ ഇഷ്ടാനുസൃതമാക്കൂ"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"ലോക്ക് സ്ക്രീൻ ഇഷ്ടാനുസൃതമാക്കാൻ അൺലോക്ക് ചെയ്യുക"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"വൈഫൈ ലഭ്യമല്ല"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"മുൻഗണനാ മോഡ് ഓണാണ്"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant സജീവമാണ്"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"ക്രമീകരണത്തിൽ കുറിപ്പുകൾക്കുള്ള ഡിഫോൾട്ട് ആപ്പ് സജ്ജീകരിക്കുക"</string>
+    <string name="install_app" msgid="5066668100199613936">"ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്യൂ"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"മൈക്രോഫോണും ക്യാമറയും"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"അടുത്തിടെയുള്ള ആപ്പ് ഉപയോഗം"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"അടുത്തിടെയുള്ള ആക്‌സസ് കാണുക"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"പൂർത്തിയായി"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"വികസിപ്പിച്ച് ഓപ്ഷനുകൾ കാണിക്കുക"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"ചുരുക്കുക"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"ഈ ആപ്പ് അടയ്ക്കുക"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> അടച്ചു"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"സേവനം മാനേജ് ചെയ്യുക"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"ആക്‌സസ് മാനേജ് ചെയ്യുക"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"ഫോൺ കോളിൽ ഉപയോഗിക്കുന്നു"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"ഫോൺ കോളിൽ അടുത്തിടെ ഉപയോഗിച്ചു"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> ഉപയോഗിക്കുന്നു"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"<xliff:g id="APP_NAME">%1$s</xliff:g> അടുത്തിടെ ഉപയോഗിച്ചു"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ഉപയോഗിക്കുന്നു"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) അടുത്തിടെ ഉപയോഗിച്ചു"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ഉപയോഗിക്കുന്നു"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) അടുത്തിടെ ഉപയോഗിച്ചു"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ml/strings_tv.xml b/packages/SystemUI/res/values-ml/strings_tv.xml
deleted file mode 100644
index 2faccb8..0000000
--- a/packages/SystemUI/res/values-ml/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN കണക്റ്റ് ചെയ്‌തു"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN വിച്ഛേദിച്ചു"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> വഴി"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"അറിയിപ്പുകൾ"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"അറിയിപ്പുകൾ ഒന്നുമില്ല"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"മൈക്രോഫോൺ റെക്കോർഡ് ചെയ്യുകയാണ്"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"ക്യാമറ റെക്കോർഡ് ചെയ്യുകയാണ്"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"ക്യാമറയും മൈക്രോഫോണും റെക്കോർഡ് ചെയ്യുകയാണ്"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"മൈക്രോഫോൺ റെക്കോർഡ് ചെയ്യുന്നത് നിർത്തി"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"ക്യാമറ റെക്കോർഡ് ചെയ്യുന്നത് നിർത്തി"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"ക്യാമറയും മൈക്രോഫോണും റെക്കോർഡ് ചെയ്യുന്നത് നിർത്തി"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"സ്ക്രീൻ റെക്കോർഡിംഗ് ആരംഭിച്ചു"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"സ്‌ക്രീൻ റെക്കോർഡിംഗ് നിർത്തി"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 7d0d8a2..7a2ca61 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB-г идэвхжүүлэх"</string>
     <string name="learn_more" msgid="4690632085667273811">"Нэмэлт мэдээлэл авах"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Дэлгэцийн зураг дарах"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock-г идэвхгүй болгосон"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Түгжээгүй байлгахыг идэвхгүй болгосон"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"зураг илгээсэн"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Дэлгэцийн агшинг хадгалж байна…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Дэлгэцийн агшныг ажлын профайлд хадгалж байна…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> энэ дэлгэцийн агшныг илрүүлсэн."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> болон бусад нээлттэй апп энэ дэлгэцийн агшныг илрүүлсэн."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Тэмдэглэлд нэмэх"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Дэлгэцийн үйлдэл бичигч"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Дэлгэцийн үйлдэл бичигч"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Дэлгэц бичлэг боловсруулж байна"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Дэлгэц бичих горимын үргэлжилж буй мэдэгдэл"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Бичлэгийг эхлүүлэх үү?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Бичих үед Андройд систем нь таны дэлгэц дээр харагдах эсвэл төхөөрөмж дээрээ тоглуулсан аливаа эмзэг мэдээллийг авах боломжтой. Үүнд нууц үг, төлбөрийн мэдээлэл, зураг, мессеж болон аудио багтана."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Бүтэн дэлгэцийг бичих"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Нэг аппыг бичих"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Таныг бичиж байх үед Android нь таны дэлгэц дээр харагдаж буй эсвэл төхөөрөмж дээр тоглуулж буй аливаа зүйлд хандах эрхтэй. Тиймээс нууц үг, төлбөрийн дэлгэрэнгүй, мессеж эсвэл бусад эмзэг мэдээлэлд болгоомжтой хандаарай."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Таныг апп бичиж байх үед Android нь тухайн апп дээр харуулж эсвэл тоглуулж буй аливаа зүйлд хандах эрхтэй."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Бичиж эхлэх"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Бичиж эхлэх үү?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Таныг бичиж байх үед Android нь таны дэлгэцэд харуулсан эсвэл төхөөрөмжид тоглуулсан аливаа зүйлд хандах эрхтэй. Тиймээс нууц үг, төлбөрийн дэлгэрэнгүй, мессеж, зураг, аудио болон видео зэрэг зүйлд болгоомжтой хандаарай."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Таныг апп бичиж байх үед Android тухайн аппад харуулсан эсвэл тоглуулсан аливаа зүйлд хандах эрхтэй. Тиймээс нууц үг, төлбөрийн дэлгэрэнгүй, мессеж, зураг, аудио, видео зэрэг зүйлд болгоомжтой хандаарай."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Бичиж эхлэх"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Аудио бичих"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Төхөөрөмжийн аудио"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Хөгжим, дуудлага болон хонхны ая зэрэг таны төхөөрөмжийн дуу"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Микрофон"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Төхөөрөмжийн аудио болон микрофон"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Эхлүүлэх"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Эхлүүлэх"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Дэлгэцийг бичиж байна"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Дэлгэц болон аудиог бичиж байна"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Дэлгэц дээр мэдрэгчийг харуулах"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Хуваалцах"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Дэлгэцийн бичлэгийг хадгалсан"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Харахын тулд товшино уу"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Дэлгэцийн бичлэгийг устгахад алдаа гарлаа"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Дэлгэцийн бичлэгийг хадгалахад алдаа гарлаа"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Дэлгэцийн бичлэгийг эхлүүлэхэд алдаа гарлаа"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Бүтэн дэлгэцээр үзэж байна"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Гарах бол дээрээс доош шударна уу."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Ойлголоо"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Буцах"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Гэрийн"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Цэс"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Царайг баталгаажууллаа"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Баталгаажсан"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Дуусгахын тулд баталгаажуулахыг товших"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Царайгаар түгжээг тайлсан. Үргэлжлүүлэхийн тулд түгжээг тайлах дүрс тэмдэг дээр дараарай."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Царайгаар түгжээг тайлсан"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Царайгаар түгжээг тайлсан. Үргэлжлүүлэхийн тулд дарна уу."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Царайг таньсан. Үргэлжлүүлэхийн тулд дарна уу."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Царайг таньсан. Үргэлжлүүлэх бол түгжээг тайлах дүрсийг дар."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Баталгаажуулагдсан"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Баталгаажуулалтыг цуцлах"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ПИН ашиглах"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Хээ ашиглах"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Нууц үг ашиглах"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Та дараагийн оролдлогоор буруу хээ оруулбал таны ажлын профайлыг өгөгдөлтэй нь цуг устгах болно."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Та дараагийн оролдлогоор буруу ПИН оруулбал таны ажлын профайлыг өгөгдөлтэй нь цуг устгах болно."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Та дараагийн оролдлогоор буруу нууц үг оруулбал таны ажлын профайлыг өгөгдөлтэй нь цуг устгах болно."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Тохируулах"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Одоо биш"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Энэ нь аюулгүй байдал болон гүйцэтгэлийг сайжруулахад шаардлагатай"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Хурууны хээгээр түгжээ тайлахыг дахин тохируулна уу"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Хурууны хээгээр түгжээ тайлах"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Хурууны хээгээр түгжээ тайлахыг тохируулах"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Хурууны хээгээр түгжээ тайлахыг дахин тохируулахын тулд таны одоогийн хурууны хээний зураг болон загваруудыг устгана.\n\nТэдгээрийг устгасны дараа та хурууны хээгээ утасныхаа түгжээг тайлах эсвэл өөрийгөө мөн болохыг баталгаажуулахад ашиглахын тулд Хурууны хээгээр түгжээ тайлахыг дахин тохируулах шаардлагатай."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Хурууны хээгээр түгжээ тайлахыг дахин тохируулахын тулд таны одоогийн хурууны хээний зургууд болон загварыг устгана.\n\nТэдгээрийг устгасны дараа та хурууны хээгээ утасныхаа түгжээг тайлах эсвэл өөрийгөө мөн болохыг баталгаажуулахад ашиглахын тулд Хурууны хээгээр түгжээ тайлахыг дахин тохируулах шаардлагатай."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Хурууны хээгээр түгжээ тайлахыг тохируулж чадсангүй. Дахин оролдохын тулд Тохиргоо руу очно уу."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Царайгаар түгжээ тайлахыг дахин тохируулна уу"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Царайгаар түгжээ тайлах"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Царайгаар түгжээ тайлахыг тохируулна уу"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Царайгаар түгжээ тайлахыг дахин тохируулахын тулд таны одоогийн нүүрний загварыг устгана.\n\nТа царайгаа утасныхаа түгжээг тайлахад ашиглахын тулд энэ онцлогийг дахин тохируулах шаардлагатай."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Царайгаар түгжээ тайлахыг тохируулж чадсангүй. Дахин оролдохын тулд Тохиргоо руу очно уу."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Хурууны хээ мэдрэгчид хүрэх"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Үргэлжлүүлэхийн тулд түгжээг тайлах дүрс тэмдгийг дарна уу"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Царай таних боломжгүй. Оронд нь хурууны хээ ашигла"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Аудио"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Чихэвч"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Оролт"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Сонсголын төхөөрөмж"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Сонсголын төхөөрөмж"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Асааж байна…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автоматаар эргэх"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Дэлгэцийг автоматаар эргүүлэх"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Царайгаар түгжээг тайлсан"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Царайг таньсан"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Дахин оролдохын тулд дээш шударна уу"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Царайгаар түгжээ тайлахыг дахин оролдохын тулд дээш шудар"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC-г ашиглахын тулд түгжээг тайлна уу"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Энэ төхөөрөмж танай байгууллагад харьяалагддаг"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Энэ төхөөрөмж <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>-д харьяалагддаг"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"Хэрэглэгчийг устгах уу?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Энэ хэрэглэгчийн бүх апп болон мэдээлэл устах болно."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Арилгах"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> нь бичлэг хийх эсвэл дамжуулах үед таны дэлгэц дээр харагдах эсвэл таны төхөөрөмжөөс тоглуулах бүх мэдээлэлд хандах боломжтой байна. Үүнд нууц үг, төлбөрийн дэлгэрэнгүй, зураг болон таны тоглуулдаг аудио зэрэг мэдээлэл багтана."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Энэ функцийг ажиллуулж байгаа үйлчилгээ нь бичлэг хийх эсвэл дамжуулах үед таны дэлгэц дээр харагдах эсвэл таны төхөөрөмжөөс тоглуулах бүх мэдээлэлд хандах боломжтой байна. Үүнд нууц үг, төлбөрийн дэлгэрэнгүй, зураг болон таны тоглуулдаг аудио зэрэг мэдээлэл багтана."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Бичлэг хийх эсвэл дамжуулахыг эхлүүлэх үү?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-тай бичлэг хийж эсвэл дамжуулж эхлэх үү?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-д хуваалцах эсвэл бичихийг зөвшөөрөх үү?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Бүтэн дэлгэц"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Нэг апп"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Таныг хуваалцаж, бичиж эсвэл дамжуулж байх үед <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> нь таны дэлгэц дээр харагдаж буй аливаа зүйл эсвэл төхөөрөмж дээр тань тоглуулж буй зүйлд хандах эрхтэй. Тиймээс нууц үг, төлбөрийн дэлгэрэнгүй, мессеж эсвэл бусад эмзэг мэдээлэлд болгоомжтой хандаарай."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Таныг хуваалцаж, бичиж эсвэл дамжуулж байх үед <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> нь тухайн апп дээр харуулсан эсвэл тоглуулсан аливаа зүйлд хандах эрхтэй. Тиймээс нууц үг, төлбөрийн дэлгэрэнгүй, мессеж эсвэл бусад эмзэг мэдээлэлд болгоомжтой хандаарай."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Үргэлжлүүлэх"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Хуваалцах эсвэл бичих апп"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Энэ аппад хуваалцах эсвэл бичихийг зөвшөөрөх үү?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Таныг хуваалцаж, бичиж эсвэл дамжуулж байх үед энэ апп нь таны дэлгэц дээр харагдаж буй аливаа зүйл эсвэл төхөөрөмж дээр тань тоглуулж буй зүйлд хандах эрхтэй. Тиймээс нууц үг, төлбөрийн дэлгэрэнгүй, мессеж эсвэл бусад эмзэг мэдээлэлд болгоомжтой хандаарай."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Таныг хуваалцаж, бичиж эсвэл дамжуулж байх үед энэ апп нь тухайн апп дээр харуулж эсвэл тоглуулж буй аливаа зүйлд хандах эрхтэй. Тиймээс нууц үг, төлбөрийн дэлгэрэнгүй, мессеж эсвэл бусад эмзэг мэдээлэлд болгоомжтой хандаарай."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> нь бичлэг хийх эсвэл дамжуулах үед таны дэлгэцэд харуулсан эсвэл таны төхөөрөмжөөс тоглуулсан бүх мэдээлэлд хандах эрхтэй байна. Үүнд нууц үг, төлбөрийн дэлгэрэнгүй, зураг, мессеж болон таны тоглуулдаг аудио зэрэг мэдээлэл багтана."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Бичлэг хийж эсвэл дамжуулж эхлэх үү?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Энэ функцийг олгож буй үйлчилгээ нь бичлэг хийж эсвэл дамжуулж байх үед таны дэлгэцэд харуулсан эсвэл төхөөрөмжөөс тань тоглуулсан бүх мэдээлэлд хандах эрхтэй. Үүнд нууц үг, төлбөрийн дэлгэрэнгүй, мессеж, зураг болон таны тоглуулдаг аудио зэрэг мэдээлэл багтана."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Бүтэн дэлгэц"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Нэг апп"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Апп хуваалцах эсвэл бичих"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>-р бичлэг хийж эсвэл дамжуулж эхлэх үү?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Таныг хуваалцаж, бичиж эсвэл дамжуулж байх үед <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> нь таны дэлгэцэд харагдаж буй зүйл эсвэл төхөөрөмжид тань тоглуулсан аливаа зүйлд хандах эрхтэй. Тиймээс нууц үг, төлбөрийн мэдээлэл, мессеж, зураг, аудио болон видео зэрэг зүйлд болгоомжтой хандаарай."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Таныг хуваалцаж, бичлэг хийж эсвэл апп дамжуулж байх үед <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> нь тухайн аппад харуулсан эсвэл тоглуулсан аливаа зүйлд хандах эрхтэй. Тиймээс нууц үг, төлбөрийн дэлгэрэнгүй, мессеж, зураг, аудио болон видео зэрэг бусад зүйлд болгоомжтой хандаарай."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Эхлүүлэх"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Дамжуулж эхлэх үү?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Таныг дамжуулж байх үед Android таны дэлгэцэд харагдаж буй эсвэл төхөөрөмжид тань тоглуулсан аливаа зүйлд хандах эрхтэй. Тиймээс нууц үг, төлбөрийн мэдээлэл, мессеж, зураг, аудио болон видео зэрэг зүйлд болгоомжтой хандаарай."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Таныг апп дамжуулж байх үед Android тухайн аппад харуулсан эсвэл тоглуулсан аливаа зүйлд хандах эрхтэй. Тиймээс нууц үг, төлбөрийн мэдээлэл, мессеж, зураг, аудио болон видео зэрэг зүйлд болгоомжтой хандаарай."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Дамжуулж эхлэх"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Хуваалцаж эхлэх үү?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Таныг хуваалцаж, бичлэг хийж эсвэл дамжуулж байх үед Android таны дэлгэцэд харуулсан эсвэл төхөөрөмжид тань тоглуулсан аливаа зүйлд хандах эрхтэй. Тиймээс нууц үг, төлбөрийн дэлгэрэнгүй, мессеж, зураг, аудио болон видео зэрэг зүйлд болгоомжтой хандаарай."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Таныг хуваалцаж, бичлэг хийж эсвэл дамжуулж байх үед Android тухайн аппад харуулсан эсвэл тоглуулсан аливаа зүйлд хандах эрхтэй. Тиймээс нууц үг, төлбөрийн дэлгэрэнгүй, мессеж, зураг, аудио болон видео зэрэг бусад зүйлд болгоомжтой хандаарай."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Эхлүүлэх"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Таныг аппууд сэлгэх үед хуваалцахыг түр зогсооно"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Оронд нь энэ аппыг хуваалцах"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Буцаж сэлгэх"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Апп сэлгэх"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Таны IT админ блоклосон"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Төхөөрөмжийн бодлогоор дэлгэцийн зураг авахыг идэвхгүй болгосон"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Бүгдийг арилгах"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Сертификатын зөвшөөрлийг энэ төхөөрөмжид суулгасан байна. Таны аюулгүй сүлжээний ачааллыг өөрчлөх эсвэл хянах боломжтой."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Таны админ төхөөрөмжийн ачааллыг хянадаг сүлжээний логийг асаасан байна."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Таны админ ажлын профайлын тань ачааллыг хянадаг сүлжээний логийг асаасан бөгөөд энэ нь хувийн профайлын ачааллыг хянахгүй."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Энэ төхөөрөмж <xliff:g id="VPN_APP">%1$s</xliff:g>-р интернэтэд холбогдсон байна. Таны имэйл болон интернэтээр үзсэн өгөгдөл зэрэг сүлжээний үйл ажиллагаа таны IT админд харагдана."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Энэ төхөөрөмж <xliff:g id="VPN_APP">%1$s</xliff:g>-р интернэтэд холбогдсон байна. Таны имэйл болон интернэтээр үзсэн өгөгдөл зэрэг сүлжээний үйл ажиллагаа VPN-н үйлчилгээ үзүүлэгчид харагдана."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Энэ төхөөрөмж <xliff:g id="VPN_APP">%1$s</xliff:g>-р интернэтэд холбогдсон байна. Таны имэйл болон интернэтээр үзсэн өгөгдөл зэрэг сүлжээний үйл ажиллагаа таны IT админд харагдана."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Энэ төхөөрөмж <xliff:g id="VPN_APP_0">%1$s</xliff:g> болон <xliff:g id="VPN_APP_1">%2$s</xliff:g>-р интернэтэд холбогдсон байна. Таны имэйл болон интернэтээр үзсэн өгөгдөл зэрэг сүлжээний үйл ажиллагаа таны IT админд харагдана."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Таны ажлын аппууд <xliff:g id="VPN_APP">%1$s</xliff:g>-р интернэтэд холбогдсон байна. Таны имэйл болон интернэтээр үзсэн өгөгдөл зэрэг ажлын аппууд дахь сүлжээний үйл ажиллагаа таны IT админ болон VPN-н үйлчилгээ үзүүлэгчид харагдана."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Таны хувийн аппууд <xliff:g id="VPN_APP">%1$s</xliff:g>-р интернэтэд холбогдсон байна. Таны имэйл болон интернэтээр үзсэн өгөгдөл зэрэг сүлжээний үйл ажиллагаа таны VPN-н үйлчилгээ үзүүлэгчид харагдана."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"идэвхгүй болгох"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Дуу, чичиргээ"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Тохиргоо"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Аюулгүй дууны түвшин рүү багасгасан"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Дууны түвшин санал болгосноос удаан хугацааны туршид өндөр байсан"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Дууны түвшнийг илүү аюулгүй түвшин рүү багасгасан"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Чихэвчийн дууны түвшин санал болгосноос удаан хугацааны туршид өндөр байсан"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Чихэвчийн дууны түвшин энэ долоо хоногийн аюулгүй хязгаараас хэтэрсэн"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Сонссоор байх"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Дууны түвшнийг багасгах"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Аппыг бэхэлсэн"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Таныг тогтоосныг болиулах хүртэл үүнийг харуулна. Тогтоосныг болиулахын тулд Буцах, Тоймыг дараад хүлээнэ үү."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Таныг тогтоосныг болиулах хүртэл үүнийг харуулсан хэвээр байна. Тогтоосныг болиулахын тулд Буцах, Нүүр хуудас товчлуурыг дараад хүлээнэ үү."</string>
@@ -640,7 +670,7 @@
     <string name="group_system_hide_reshow_taskbar" msgid="3809304065624351131">"Ажлын хэсгийг нуух болон (дахин) харуулах"</string>
     <string name="group_system_access_system_settings" msgid="7961639365383008053">"Системийн тохиргоонд хандах"</string>
     <string name="group_system_access_google_assistant" msgid="1186152943161483864">"Google Туслахад хандах"</string>
-    <string name="group_system_lock_screen" msgid="7391191300363416543">"Түгжигдсэн дэлгэц"</string>
+    <string name="group_system_lock_screen" msgid="7391191300363416543">"Түгжээтэй дэлгэц"</string>
     <string name="group_system_quick_memo" msgid="2914234890158583919">"Шуурхай тэмдэглэхийн тулд Notes аппыг харуулах"</string>
     <string name="keyboard_shortcut_group_system_multitasking" msgid="1065232949510862593">"Систем олон ажил зэрэг хийх"</string>
     <string name="system_multitasking_rhs" msgid="6593269428880305699">"Одоогийн аппаар баруун гар талд Дэлгэц хуваахад орох"</string>
@@ -738,14 +768,8 @@
     <string name="accessibility_quick_settings_edit" msgid="1523745183383815910">"Тохиргооны дарааллыг өөрчилнө үү."</string>
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Асаах/унтраах цэс"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g>-н <xliff:g id="ID_1">%1$d</xliff:g>-р хуудас"</string>
-    <string name="tuner_lock_screen" msgid="2267383813241144544">"Түгжигдсэн дэлгэц"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Халснаас үүдэн утас унтарсан"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Таны утас одоо хэвийн ажиллаж байна.\nДэлгэрэнгүй мэдээлэл авах бол товшино уу"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Таны утас хэт халсан тул хөргөхөөр унтраасан болно. Таны утас одоо хэвийн ажиллаж байна.\n\nХэрэв та дараахыг хийвэл таны утас хэт халж болзошгүй:\n	• Их хэмжээний нөөц хэрэглээний апп (тоглоом, видео эсвэл шилжилтийн апп зэрэг)\n	• Багтаамж ихтэй файл татах, байршуулах\n	• Утсаа өндөр температурт ашиглах"</string>
+    <string name="tuner_lock_screen" msgid="2267383813241144544">"Түгжээтэй дэлгэц"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Хянамж болгоомжийн алхмыг харах"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Утас халж эхэлж байна"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Утсыг хөрөх үед зарим онцлогийг хязгаарлана.\nДэлгэрэнгүй мэдээлэл авах бол товшино уу"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Таны утас автоматаар хөрөх болно. Та утсаа ашиглаж болох хэдий ч удаан ажиллаж болзошгүй.\n\nТаны утас хөрсний дараагаар хэвийн ажиллана."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Хянамж болгоомжийн алхмыг харах"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Төхөөрөмжөө салгана уу"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Таны төхөөрөмж цэнэглэх портын ойролцоо халж байна. Хэрэв төхөөрөмжийг цэнэглэгч эсвэл USB дагалдах хэрэгсэлд холбосон бол төхөөрөмжийг салгаж, кабель нь халуун байж болзошгүй тул болгоомжтой байгаарай."</string>
@@ -839,8 +863,9 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Бүтэн дэлгэцийг томруулах"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Дэлгэцийн нэг хэсгийг томруулах"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Томруулах тохиргоог нээх"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Томруулах тохиргоог хаах"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Хэмжээг өөрчлөхийн тулд булангаас чирнэ үү"</string>
-    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Хөндлөн гүйлгэхийг зөвшөөрнө үү"</string>
+    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Хөндлөн гүйлгэхийг зөвшөөрөх"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Хэмжээг өөрчлөх"</string>
     <string name="accessibility_change_magnification_type" msgid="666000085077432421">"Томруулах төрлийг өөрчлөх"</string>
     <string name="accessibility_magnification_end_resizing" msgid="4881690585800302628">"Хэмжээг өөрчилж дуусгах"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"дургүй гэж тэмдэглэх"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>-р байрлал руу зөөх"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Хяналт"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Шуурхай хандахын тулд төхөөрөмжийн хяналтыг сонгоно уу"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Хяналтуудыг дахин засварлахын тулд дараад чирнэ үү"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Бүх хяналтыг хассан"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Өөрчлөлтийг хадгалаагүй"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Бусад аппыг харах"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Дахин эмхлэх"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Тохиргоо нэмэх"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Хяналт нэмэх"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Засах руу буцах"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"Хяналтыг ачаалж чадсангүй. Аппын тохиргоог өөрчлөөгүй эсэхийг нягтлахын тулд <xliff:g id="APP">%s</xliff:g> аппыг шалгана уу."</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"Тохирох хяналт байхгүй"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Өөр ПИН ашиглах"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g>-н өөрчлөлтийг баталгаажуулна уу"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Илүү ихийг харахын тулд шударна уу"</string>
+    <string name="retry_face" msgid="416380073082560186">"Царай баталгаажуулалтыг дахин оролдох"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Зөвлөмжүүдийг ачаалж байна"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Медиа"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Энэ медиа хяналтыг <xliff:g id="APP_NAME">%1$s</xliff:g>-д нуух уу?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Тохиргоо"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> дээр тоглуулж буй <xliff:g id="ARTIST_NAME">%2$s</xliff:g>-н <xliff:g id="SONG_NAME">%1$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>-н <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> ажиллаж байна"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Тоглуулах"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Түр зогсоох"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Өмнөх бичлэг"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Чанга яригч ба дэлгэц"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Санал болгосон төхөөрөмжүүд"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Өөр төхөөрөмж рүү медиа зөөхийн тулд хуваалцсан харилцан үйлдлээ зогсооно уу"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Зогсоох"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Нэвтрүүлэлт хэрхэн ажилладаг вэ?"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Нэвтрүүлэлт"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Тохиромжтой Bluetooth төхөөрөмжүүдтэй таны ойролцоох хүмүүс таны нэвтрүүлж буй медиаг сонсох боломжтой"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Хадгалах боломжгүй. Дахин оролдоно уу."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Хадгалах боломжгүй."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Дор хаяж 4 тэмдэгт ашиглана уу."</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"16-аас цөөн тэмдэгт ашиглана уу"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g>-с цөөн тэмдэгт ашиглана уу"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Хийцийн дугаар"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Хийцийн дугаарыг түр санах ойд хуулсан."</string>
     <string name="basic_status" msgid="2315371112182658176">"Харилцан яриаг нээх"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Таны батарей хэмжигчийг уншихад асуудал гарлаа"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Нэмэлт мэдээлэл авахын тулд товшино уу"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Сэрүүлэг тавиагүй"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"дэлгэцийн түгжээ оруулах"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Хурууны хээ мэдрэгч"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"баталгаажуулах"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"төхөөрөмж оруулах"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Туслах сонсож байна"</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="note_task_button_label" msgid="8718616095800343136">"Тэмдэглэл хөтлөх"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Тэмдэглэл хөтлөх"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Тэмдэглэл хөтлөх, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Нэмэлт мэдээлэл авах"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"<xliff:g id="URL">%s</xliff:g>-с нэмэлт мэдээлэл авна уу"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g>-г нээх"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Аппыг тохируулсан"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Дор хаяж нэг картыг Wallet-д нэмсэн"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Камер аппыг суулгах"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Аппыг тохируулсан"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Дор хаяж нэг төхөөрөмж боломжтой"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Wallet аппыг товчлолоор нэмэхийн тулд уг аппыг суулгасан эсэхийг шалгана уу"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Wallet аппыг товчлолоор нэмэхийн тулд дор хаяж нэг карт нэмсэн эсэхийг шалгана уу"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR код сканнерыг товчлолоор нэмэхийн тулд камерын аппыг суулгасан эсэхийг шалгана уу"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home аппыг товчлолоор нэмэхийн тулд уг аппыг суулгасан эсэхийг шалгана уу"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Дор хаяж нэг төхөөрөмж боломжтой"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Тэмдэглэл хөтлөх товчлолыг ашиглахын тулд тэмдэглэлийн өгөгдмөл аппыг сонгоно уу"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Апп сонгох"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Товчлолд хүрээд удаан дарна уу"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Цуцлах"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Одоо дэлгэцүүдийг сэлгэх"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Мэдрэгч үзгээ цэнэглэгчтэй холбоорой"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Мэдрэгч үзэгний батарей бага байна"</string>
     <string name="video_camera" msgid="7654002575156149298">"Видео камер"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Энэ профайлаас залгах боломжгүй"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Таны ажлын бодлого танд зөвхөн ажлын профайлаас утасны дуудлага хийхийг зөвшөөрдөг"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Хувийн аппаас залгах боломжгүй"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Танай байгууллага танд зөвхөн ажлын аппуудаас дуудлага хийхийг зөвшөөрдөг"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Ажлын профайл руу сэлгэх"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Хаах"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Ажлын гар утасны апп суулгах"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Цуцлах"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Түгжигдсэн дэлгэцийг өөрчлөх"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Түгжээтэй дэлгэцийг өөрчлөхийн тулд түгжээг тайлна уу"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi боломжгүй байна"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камерыг блоклосон"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камер болон микрофоныг блоклосон"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Микрофоныг блоклосон"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Чухал горим асаалттай байна"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Туслах анхаарлаа хандуулж байна"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Тохиргоонд тэмдэглэлийн өгөгдмөл апп тохируулна уу"</string>
+    <string name="install_app" msgid="5066668100199613936">"Аппыг суулгах"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Микрофон болон камер"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Аппын саяхны ашиглалт"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Саяхны хандалтыг харах"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Болсон"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Сонголтыг дэлгэж, харуулах"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Хураах"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Энэ аппыг хаах"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g>-г хаасан"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Үйлчилгээг удирдах"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Хандалтыг удирдах"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Утасны дуудлага ашиглаж байна"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Саяхан утасны дуудлагад ашигласан"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> ашиглаж байна"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Саяхан <xliff:g id="APP_NAME">%1$s</xliff:g> ашигласан"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ашиглаж байна"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Саяхан <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ашигласан"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ашиглаж байна"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Саяхан <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ашигласан"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-mn/strings_tv.xml b/packages/SystemUI/res/values-mn/strings_tv.xml
deleted file mode 100644
index c9b667c..0000000
--- a/packages/SystemUI/res/values-mn/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN холбогдсон"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN салсан"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g>-р"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Мэдэгдэл"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Мэдэгдэл байхгүй байна"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Микрофон бичиж байна"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Камер бичиж байна"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Камер болон микрофон бичиж байна"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Микрофон бичихээ зогсоосон"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Камер бичихээ зогсоосон"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Камер болон микрофон бичихээ зогсоосон"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Дэлгэцийн бичлэгийг эхлүүлсэн"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Дэлгэцийн бичлэгийг зогсоосон"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 4135188..ccbc209 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> ने हा स्क्रीनशॉट डिटेक्ट केला."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> आणि उघडलेल्या इतर अ‍ॅप्सनी हा स्क्रीनशॉट डिटेक्ट केला."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"टीप जोडा"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"स्क्रीन रेकॉर्डर"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"स्क्रीन रेकॉर्डर"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"स्क्रीन रेकॉर्डिंग प्रोसेस सुरू"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"स्क्रीन रेकॉर्ड सत्रासाठी सुरू असलेली सूचना"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"रेकॉर्डिंग सुरू करायचे आहे का?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"रेकॉर्डिंग करताना, Android सिस्टीम तुमच्या स्क्रीनवर दिसणारी किंवा तुमच्या डिव्हाइसवर प्ले केलेली कोणतीही संवेदनशील माहिती कॅप्चर करू शकते. यात पासवर्ड, पेमेंट माहिती, फोटो, मेसेज आणि ऑडिओचा समावेश आहे."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"संपूर्ण स्क्रीन रेकॉर्ड करा"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"एकच अ‍ॅप रेकॉर्ड करा"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"तुम्ही रेकॉर्ड करत असताना, Android ला तुमच्या स्क्रीनवर दाखवलेल्या किंवा डिव्हाइसवर प्ले केलेल्या कोणत्याही गोष्टीचा अ‍ॅक्सेस असतो. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज किंवा इतर संवेदनशील माहिती काळजीपूर्वक वापरा."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"तुम्ही अ‍ॅप रेकॉर्ड करत असताना, Android ला त्या अ‍ॅपवर दाखवलेल्या किंवा प्ले केलेल्या कोणत्याही गोष्टीचा अ‍ॅक्सेस असतो. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज किंवा इतर संवेदनशील माहिती काळजीपूर्वक वापरा."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"रेकॉर्डिंग सुरू करा"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"रेकॉर्डिंग सुरू करायचे आहे का?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"तुम्ही रेकॉर्ड करत असताना, Android ला तुमच्या स्क्रीनवर दाखवलेल्या किंवा डिव्हाइसवर प्ले केलेल्या कोणत्याही गोष्टीचा अ‍ॅक्सेस असतो. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज, फोटो आणि ऑडिओ व व्हिडिओ यांसारख्या गोष्टींबाबत सावधगिरी बाळगा."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"तुम्ही एखादे ॲप रेकॉर्ड करत असताना, Android ला त्या ॲपवर दाखवलेल्या किंवा प्ले केलेल्या कोणत्याही गोष्टीचा ॲक्सेस असतो. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज, फोटो आणि ऑडिओ व व्हिडिओ यांसारख्या गोष्टींबाबत सावधगिरी बाळगा."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"रेकॉर्डिंग सुरू करा"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"ऑडिओ रेकॉर्ड करा"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"डिव्हाइस ऑडिओ"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"तुमच्या डिव्हाइसवरील आवाज, जसे की संगीत, कॉल आणि रिंगटोन"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"मायक्रोफोन"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"डिव्हाइस ऑडिओ आणि मायक्रोफोन"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"सुरू"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"सुरुवात करा"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"स्क्रीन रेकॉर्ड करत आहे"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"स्क्रीन आणि ऑडिओ रेकॉर्ड करत आहे"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"स्क्रीनवर टच दाखवा"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"शेअर करा"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"स्क्रीन रेकॉर्डिंग सेव्ह केली"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"पाहण्यासाठी टॅप करा"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"स्क्रीन रेकॉर्डिंग हटवताना एरर आली"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"स्क्रीन रेकॉर्डिंग सेव्ह करताना एरर आली"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"स्क्रीन रेकॉर्डिंग सुरू करताना एरर आली"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"पूर्ण स्क्रीन पाहत आहात"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"बाहेर पडण्यासाठी, वरून खाली स्वाइप करा."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"समजले"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"मागे"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"होम"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"मेनू"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"चेहरा ऑथेंटिकेशन केलेला आहे"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"निश्चित केले"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"पूर्ण करण्यासाठी खात्री करा वर टॅप करा"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"चेहऱ्याने अनलॉक केले. सुरू ठेवण्यासाठी अनलॉक करा आयकन प्रेस करा."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"चेहऱ्याने अनलॉक केले आहे"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"चेहऱ्याने अनलॉक केले आहे. पुढे सुरू ठेवण्यासाठी प्रेस करा."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"चेहरा ओळखला आहे. पुढे सुरू ठेवण्यासाठी प्रेस करा."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"चेहरा ओळखला आहे. पुढे सुरू ठेवण्यासाठी अनलॉक करा आयकन प्रेस करा."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ऑथेंटिकेशन केलेले"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"ऑथेंटिकेशन रद्द करा"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"पिन वापरा"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"पॅटर्न वापरा"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"पासवर्ड वापरा"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"तुम्‍ही पुढील प्रयत्‍नात चुकीचा पॅटर्न एंटर केल्यास, तुमची कार्य प्रोफाइल आणि तिचा डेटा हटवला जाईल."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"तुम्‍ही पुढील प्रयत्‍नात चुकीचा पिन एंटर केल्यास, तुमची कार्य प्रोफाइल आणि तिचा डेटा हटवला जाईल."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"तुम्‍ही पुढील प्रयत्‍नात चुकीचा पासवर्ड एंटर केल्यास, तुमची कार्य प्रोफाइल आणि तिचा डेटा हटवला जाईल."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"सेट करा"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"आता नको"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"सुरक्षितता आणि परफॉर्मन्समध्ये सुधारणा करण्यासाठी हे आवश्यक आहे"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"फिंगरप्रिंट अनलॉक पुन्हा सेट करा"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"फिंगरप्रिंट अनलॉक"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"फिंगरप्रिंट अनलॉक सेट करा"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"फिंगरप्रिंट अनलॉक पुन्हा सेट करण्यासाठी, तुमच्या सद्य फिंगरप्रिंट इमेज आणि मॉडेल या गोष्टी हटवल्या जातील.\n\nत्या हटवल्यानंतर, तुमचा फोन अनलॉक करण्यासाठी किंवा ते तुम्ही आहात याची पडताळणी करण्यासाठी तुमचे फिंगरप्रिंट वापरण्याकरिता तुम्हाला पुन्हा फिंगरप्रिंट अनलॉक सेट करणे आवश्यक आहे."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"फिंगरप्रिंट अनलॉक पुन्हा सेट करण्यासाठी, तुमच्या सद्य फिंगरप्रिंट इमेज आणि मॉडेल या गोष्टी हटवल्या जातील.\n\nत्या हटवल्यानंतर, तुमचा फोन अनलॉक करण्यासाठी किंवा ते तुम्ही आहात याची पडताळणी करण्यासाठी तुमचे फिंगरप्रिंट वापरण्याकरिता तुम्हाला पुन्हा फिंगरप्रिंट अनलॉक सेट करणे आवश्यक आहे."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"फिंगरप्रिंट अनलॉक सेट करता आले नाही. सेटिंग्ज वर जा आणि पुन्हा प्रयत्न करा."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"फेस अनलॉक पुन्हा सेट करा"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"फेस अनलॉक"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"फेस अनलॉक सेट करा"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"फेस अनलॉक पुन्हा सेट करण्यासाठी, तुमचे सध्याचे फेस मॉडेल हटवले जाईल.\n\nतुमचा फोन अनलॉक करण्यासाठी तुमचा चेहरा वापरण्याकरिता तुम्हाला हे वैशिष्ट्य पुन्हा सेट करावे लागेल."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"फेस अनलॉक सेट करता आले नाही. सेटिंग्ज वर जा आणि पुन्हा प्रयत्न करा."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"फिंगरप्रिंट सेन्सरला स्पर्श करा"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"पुढे सुरू ठेवण्यासाठी, अनलॉक करा चा आयकन प्रेस करा"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"चेहरा ओळखू शकत नाही. त्याऐवजी फिंगरप्रिंट वापरा."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ऑडिओ"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"हेडसेट"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"इनपुट"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"श्रवणयंत्रे"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"श्रवणयंत्रे"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"सुरू करत आहे…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ऑटो-रोटेट"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ऑटो-रोटेट स्क्रीन"</string>
@@ -250,7 +266,7 @@
     <string name="quick_settings_networks_unavailable" msgid="1167847013337940082">"नेटवर्क उपलब्ध नाहीत"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="483130889414601732">"वाय-फाय नेटवर्क उपलब्‍ध नाहीत"</string>
     <string name="quick_settings_wifi_secondary_label_transient" msgid="7501659015509357887">"सुरू करत आहे…"</string>
-    <string name="quick_settings_cast_title" msgid="2279220930629235211">"स्क्रीन कास्ट करा"</string>
+    <string name="quick_settings_cast_title" msgid="2279220930629235211">"स्क्रीन कास्ट"</string>
     <string name="quick_settings_casting" msgid="1435880708719268055">"कास्ट करत आहे"</string>
     <string name="quick_settings_cast_device_default_name" msgid="6988469571141331700">"निनावी डिव्हाइस"</string>
     <string name="quick_settings_cast_detail_empty_text" msgid="2846282280014617785">"कोणतेही डिव्हाइसेस उपलब्ध नाहीत"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"चेहऱ्याने अनलॉक केले आहे"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"चेहरा ओळखला आहे"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"पुन्हा प्रयत्न करण्यासाठी वर स्‍वाइप करा"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"फेस अनलॉक पुन्हा वापरून पाहण्यासाठी वर स्‍वाइप करा"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC वापरण्यासाठी स्क्रीन अनलॉक करा"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"हे डिव्हाइस तुमच्या संस्थेचे आहे"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"हे डिव्हाइस <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> चे आहे"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"वापरकर्त्यास काढायचे?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"या वापरकर्त्याचे सर्व अ‍ॅप्स आणि डेटा काढून टाकला जाईल."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"काढा"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"तुमच्या स्क्रीनवर दृश्यमान असलेल्या किंवा रेकॉर्ड किंवा कास्ट करताना तुमच्या डिव्हाइसमधून प्ले केलेल्या सर्व माहितीचा अ‍ॅक्सेस <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ला असेल. यामध्ये पासवर्ड, पेमेंट तपशील, फोटो, मेसेज आणि तुम्ही प्ले केलेला ऑडिओ यासारख्या माहितीचा समावेश असतो."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"हे कार्य पुरवणाऱ्या सेवेस तुमच्या स्क्रीनवर दृश्यमान असलेल्या किंवा रेकॉर्ड किंवा कास्ट करताना तुमच्या डिव्हाइसमधून प्ले केलेल्या सर्व माहितीचा अ‍ॅक्सेस असेल. यामध्ये पासवर्ड, पेमेंट तपशील, फोटो, मेसेज आणि तुम्ही प्ले केलेला ऑडिओ यासारख्या माहितीचा समावेश असतो."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"रेकॉर्ड करणे किंवा कास्ट करणे सुरू करायचे का ?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ने रेकॉर्ड करणे किंवा कास्ट करणे सुरू करायचे का?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ला शेअर किंवा रेकॉर्ड करण्याची अनुमती द्यायची आहे का?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"संपूर्ण स्क्रीन"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"एक अ‍ॅप"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"तुम्ही शेअर, रेकॉर्ड किंवा कास्ट करत असताना, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ला तुमच्या स्क्रीनवर दाखवलेल्या किंवा डिव्हाइसवर प्ले केलेल्या कोणत्याही गोष्टीचा अ‍ॅक्सेस असतो. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज किंवा इतर संवेदनशील माहिती काळजीपूर्वक वापरा."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"तुम्ही अ‍ॅप शेअर, रेकॉर्ड किंवा कास्ट करत असताना, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ला त्या अ‍ॅपवर दाखवलेल्या किंवा प्ले केलेल्या कोणत्याही गोष्टीचा अ‍ॅक्सेस असतो. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज किंवा इतर संवेदनशील माहिती काळजीपूर्वक वापरा."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"पुढे सुरू ठेवा"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"अ‍ॅप शेअर किंवा रेकॉर्ड करा"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"या अ‍ॅपला शेअर किंवा रेकॉर्ड करण्याची अनुमती द्यायची आहे का?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"तुम्ही शेअर, रेकॉर्ड किंवा कास्ट करत असता, तेव्हा या अ‍ॅपला तुमच्या स्क्रीनवर दाखवलेल्या अथवा डिव्हाइसवर प्ले केलेल्या कोणत्याही गोष्टीचा अ‍ॅक्सेस असतो. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज किंवा इतर संवेदनशील माहिती काळजीपूर्वक वापरा."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"तुम्ही अ‍ॅप शेअर, रेकॉर्ड किंवा कास्ट करत असताना, या अ‍ॅपला त्या अ‍ॅपवर दाखवलेल्या किंवा प्ले केलेल्या कोणत्याही गोष्टीचा अ‍ॅक्सेस असतो. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज अथवा इतर संवेदनशील माहिती काळजीपूर्वक वापरा."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"रेकॉर्ड किंवा कास्ट करत असताना, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ला तुमच्या स्क्रीनवर दाखवलेल्या अथवा तुमच्या डिव्हाइसवर प्ले केलेल्या सर्व माहितीचा अ‍ॅक्सेस असेल. यामध्ये पासवर्ड, पेमेंट तपशील, फोटो, मेसेज आणि तुम्ही प्ले करत असलेला ऑडिओ यासारख्या माहितीचा समावेश आहे."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"रेकॉर्ड किंवा कास्ट करणे सुरू करायचे आहे का ?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"रेकॉर्ड किंवा कास्ट करत असताना, हे कार्य पुरवणाऱ्या सेवेला तुमच्या स्क्रीनवर दाखवलेल्या किंवा डिव्हाइसवर प्ले केलेल्या सर्व माहितीचा अ‍ॅक्सेस असेल. यामध्ये पासवर्ड, पेमेंट तपशील, फोटो, मेसेज आणि तुम्ही प्ले करत असलेला ऑडिओ यासारख्या माहितीचा समावेश आहे."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"संपूर्ण स्क्रीन"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"एक अ‍ॅप"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"अ‍ॅप शेअर किंवा रेकॉर्ड करा"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> वापरून रेकॉर्ड किंवा कास्ट करणे सुरू करायचे आहे का?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"तुम्ही शेअर, रेकॉर्ड किंवा कास्ट करत असताना, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ला तुमच्या स्क्रीनवर दाखवलेल्या किंवा डिव्हाइसवर प्ले केलेल्या कोणत्याही गोष्टीचा अ‍ॅक्सेस असतो. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज, फोटो आणि ऑडिओ व व्हिडिओ यांसारख्या गोष्टींबाबत सावधगिरी बाळगा."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"तुम्ही एखादे अ‍ॅप शेअर, रेकॉर्ड किंवा कास्ट करत असताना, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ला त्या अ‍ॅपवर दाखवलेल्या किंवा प्ले केलेल्या कोणत्याही गोष्टीचा अ‍ॅक्सेस असतो. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज, फोटो आणि ऑडिओ व व्हिडिओ यांसारख्या गोष्टींबाबत सावधगिरी बाळगा."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"सुरुवात करा"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"कास्ट करणे सुरू करायचे आहे का?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"तुम्ही कास्ट करत असताना, Android ला तुमच्या स्क्रीनवर दाखवलेल्या किंवा डिव्हाइसवर प्ले केलेल्या कोणत्याही गोष्टीचा अ‍ॅक्सेस असतो. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज, फोटो आणि ऑडिओ व व्हिडिओ यांसारख्या गोष्टींबाबत सावधगिरी बाळगा."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"तुम्ही एखादे अ‍ॅप कास्ट करत असताना, Android ला त्या अ‍ॅपवर दाखवलेल्या किंवा प्ले केलेल्या कोणत्याही गोष्टीचा अ‍ॅक्सेस असतो. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज, फोटो आणि ऑडिओ व व्हिडिओ यांसारख्या गोष्टींबाबत सावधगिरी बाळगा."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"कास्ट करणे सुरू करा"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"शेअर करणे सुरू करायचे आहे का?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"तुम्ही शेअर, रेकॉर्ड किंवा कास्ट करत असताना, Android ला तुमच्या स्क्रीनवर दाखवलेल्या किंवा डिव्हाइसवर प्ले केलेल्या कोणत्याही गोष्टीचा अ‍ॅक्सेस असतो. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज, फोटो आणि ऑडिओ व व्हिडिओ यांसारख्या गोष्टींबाबत सावधगिरी बाळगा."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"तुम्ही एखादे अ‍ॅप शेअर, रेकॉर्ड किंवा कास्ट करत असताना, Android ला त्या अ‍ॅपवर दाखवलेल्या किंवा प्ले केलेल्या कोणत्याही गोष्टीचा अ‍ॅक्सेस असतो. त्यामुळे पासवर्ड, पेमेंट तपशील, मेसेज, फोटो आणि ऑडिओ व व्हिडिओ यांसारख्या गोष्टींबाबत सावधगिरी बाळगा."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"सुरुवात करा"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"तुम्ही ॲप्स स्विच करता, तेव्हा शेअरिंग थांबते"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"त्याऐवजी हे अ‍ॅप शेअर करा"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"परत स्विच करा"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"अ‍ॅप स्विच"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"तुमच्या आयटी ॲडमिनने ब्लॉक केले आहे"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"डिव्हाइस धोरणाने स्‍क्रीन कॅप्‍चर करणे बंद केले आहे"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"सर्व साफ करा"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"या डिव्हाइसवर प्रमाणपत्र अधिकार इंस्टॉल केला आहे. आपल्या सुरक्षित नेटवर्क रहदारीचे परीक्षण केले जाऊ शकते किंवा ती सुधारली जाऊ शकते."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"आपल्या प्रशासकाने नेटवर्क लॉगिंग सुरू केले आहे, जे आपल्या डिव्हाइसवरील रहदारीचे परीक्षण करते."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"तुमच्या ॲडमिनने नेटवर्क लॉग इन सुरू केले आहे, जे तुमच्या कार्य प्रोफाइलमधील रहदारीचे निरीक्षण करत असले तरी तुमच्या वैयक्तिक प्रोफाइलमधील रहदारीचे निरीक्षण करत नाही."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"हे डिव्हाइस <xliff:g id="VPN_APP">%1$s</xliff:g> द्वारे इंटरनेटशी कनेक्ट केलेले आहे. ईमेल आणि ब्राउझिंग डेटासोबतच, तुमची नेटवर्क अ‍ॅक्टिव्हिटी तुमच्या आयटी ॲडमिनला दृश्यमान आहे."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"हे डिव्हाइस <xliff:g id="VPN_APP">%1$s</xliff:g> द्वारे इंटरनेटशी कनेक्ट केलेले आहे. ईमेल आणि ब्राउझिंग डेटाच्या समावेशासह, तुमची नेटवर्क अ‍ॅक्टिव्हिटी तुमच्या VPN पुरवठादाराला दिसते."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"हे डिव्हाइस <xliff:g id="VPN_APP">%1$s</xliff:g> द्वारे इंटरनेटशी कनेक्ट केलेले आहे. ईमेल आणि ब्राउझिंग डेटाच्या समावेशासह, तुमची नेटवर्क अ‍ॅक्टिव्हिटी तुमच्या आयटी ॲडमिनला दिसते."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"हे डिव्हाइस <xliff:g id="VPN_APP_0">%1$s</xliff:g> आणि <xliff:g id="VPN_APP_1">%2$s</xliff:g> यांद्वारे इंटरनेटशी कनेक्ट केलेले आहे. ईमेल आणि ब्राउझिंग डेटासोबतच, तुमची नेटवर्क अ‍ॅक्टिव्हिटी तुमच्या आयटी ॲडमिनला दृश्यमान आहे."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"तुमची कार्य ॲप्स <xliff:g id="VPN_APP">%1$s</xliff:g> द्वारे इंटरनेटशी कनेक्ट केलेली आहेत. ईमेल आणि ब्राउझिंग डेटासोबतच, तुमच्या कार्य ॲप्समधील नेटवर्क अ‍ॅक्टिव्हिटी तुमच्या आयटी ॲडमिन आणि VPN पुरवठादाराला दृश्यमान आहे."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"तुमची वैयक्तिक ॲप्स <xliff:g id="VPN_APP">%1$s</xliff:g> द्वारे इंटरनेटशी कनेक्ट केलेली आहेत. ईमेल आणि ब्राउझिंग डेटासोबतच, तुमची नेटवर्क अ‍ॅक्टिव्हिटी तुमच्या VPN पुरवठादाराला दृश्यमान आहे."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"बंद करा"</string>
     <string name="sound_settings" msgid="8874581353127418308">"आवाज आणि व्हायब्रेशन"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"सेटिंग्ज"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"सुरक्षित आवाजापर्यंत कमी केले"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"आवाजाची पातळी शिफारस केलेल्या वेळेपेक्षा जास्त वेळ उच्च आहे"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"व्हॉल्यूम सुरक्षित पातळीपर्यंत कमी केला"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"व्हॉल्यूम हा शिफारस केलेल्या वेळेपेक्षा जास्त वेळ उच्च आहे"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"हेडफोनच्या व्हॉल्यूमने या आठवड्यासाठीची सुरक्षिततेची मर्यादा ओलांडली आहे"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"ऐकत रहा"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"व्हॉल्यूम कमी करा"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"ॲप पिन केले आहे"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"तुम्ही अनपिन करेर्यंत हे यास दृश्यामध्ये ठेवते. अनपिन करण्‍यासाठी परत आणि विहंगावलोकनास स्पर्श करा आणि धरून ठेवा."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"तुम्ही अनपिन करेर्यंत हे त्याला दृश्यामध्ये ठेवते. अनपिन करण्‍यासाठी मागे आणि होम वर स्पर्श करा आणि धरून ठेवा."</string>
@@ -699,8 +729,8 @@
     <string name="right_keycode" msgid="2480715509844798438">"उजवा कीकोड"</string>
     <string name="left_icon" msgid="5036278531966897006">"डावे आयकन"</string>
     <string name="right_icon" msgid="1103955040645237425">"उजवे आयकन"</string>
-    <string name="drag_to_add_tiles" msgid="8933270127508303672">"टाइल जोडण्यासाठी धरून ठेवा आणि ड्रॅग करा"</string>
-    <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"टाइलची पुनर्रचना करण्यासाठी धरून ठेवा आणि ड्रॅग करा"</string>
+    <string name="drag_to_add_tiles" msgid="8933270127508303672">"टाइल जोडण्यासाठी धरून ठेवून ड्रॅग करा"</string>
+    <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"टाइलची पुनर्रचना करण्यासाठी धरून ठेवून ड्रॅग करा"</string>
     <string name="drag_to_remove_tiles" msgid="4682194717573850385">"काढण्यासाठी येथे ड्रॅग करा"</string>
     <string name="drag_to_remove_disabled" msgid="933046987838658850">"तुम्हाला किमान <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> टाइलची गरज आहे"</string>
     <string name="qs_edit" msgid="5583565172803472437">"संपादित करा"</string>
@@ -737,15 +767,9 @@
     <string name="accessibility_quick_settings_open_settings" msgid="536838345505030893">"<xliff:g id="ID_1">%s</xliff:g> सेटिंग्ज उघडा."</string>
     <string name="accessibility_quick_settings_edit" msgid="1523745183383815910">"सेटिंग्जचा क्रम संपादित करा."</string>
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"पॉवर मेनू"</string>
-    <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"पृष्ठ <xliff:g id="ID_2">%2$d</xliff:g> पैकी <xliff:g id="ID_1">%1$d</xliff:g>"</string>
+    <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g> पैकी <xliff:g id="ID_1">%1$d</xliff:g> पेज"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"लॉक स्‍क्रीन"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"तापल्‍यामुळे फोन बंद झाला"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"तुमचा फोन आता नेहमीप्रमाणे काम करत आहे.\nअधिक माहितीसाठी टॅप करा"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"तुमचा फोन खूप तापलाय, म्हणून तो थंड होण्यासाठी बंद झाला आहे. तुमचा फोन आता व्‍यवस्थित सुरू आहे.\n\nतुम्ही असे केल्यास तुमचा फोन खूप तापेल:\n	•संसाधन केंद्रित अ‍ॅप वापरणे (गेमिंग, व्हिडिओ किंवा नेव्हिगेशन अ‍ॅप यासारखे)\n	•मोठ्या फाइल डाउनलोड किंवा अपलोड करणे\n	•उच्च तापमानामध्ये तुमचा फोन वापरणे"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"काय काळजी घ्यावी ते पहा"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"फोन ऊष्ण होत आहे"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"फोन थंड होईपर्यंत काही वैशिष्ट्ये मर्यादित केली.\nअधिक माहितीसाठी टॅप करा"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"तुमचा फोन स्वयंचलितपणे थंड होईल. तुम्ही अद्यापही तुमचा फोन वापरू शकता परंतु तो कदाचित धीमेपणे कार्य करेल.\n\nतुमचा फोन एकदा थंड झाला की, तो सामान्यपणे कार्य करेल."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"काय काळजी घ्यावी ते पहा"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"तुमचे डिव्हाइस अनप्लग करा"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"तुमचे डिव्हाइस हे चार्जिंग पोर्टच्या जवळ गरम होत आहे. हे चार्जर किंवा USB अ‍ॅक्सेसरी यांच्याशी कनेक्ट केलेले असल्यास, ते अनप्लग करा आणि काळजी घ्या कारण केबलदेखील गरम असू शकते."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"फुल स्क्रीन मॅग्निफाय करा"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"स्क्रीनचा काही भाग मॅग्निफाय करा"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"मॅग्निफिकेशन सेटिंग्ज उघडा"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"मॅग्निफिकेशन सेटिंग्ज बंद करा"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"आकार बदलण्यासाठी कोपरा ड्रॅग करा"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"तिरपे स्क्रोल करण्याची अनुमती द्या"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"आकार बदला"</string>
@@ -885,9 +910,8 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"नावडते"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> स्थानावर हलवा"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"नियंत्रणे"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
-    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"नियंत्रणांची पुनर्रचना करण्यासाठी धरून ठेवा आणि ड्रॅग करा"</string>
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"झटपट अ‍ॅक्सेस करण्यासाठी डिव्हाइस नियंत्रणे निवडा"</string>
+    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"नियंत्रणांची पुनर्रचना करण्यासाठी धरून ठेवून ड्रॅग करा"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"सर्व नियंत्रणे काढून टाकली आहेत"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"बदल सेव्ह केले गेले नाहीत"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"इतर अ‍ॅप्स पहा"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"दुसरा पिन वापरून पहा"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> च्या बदलांची निश्चिती करा"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"अधिक पाहण्यासाठी स्वाइप करा"</string>
+    <string name="retry_face" msgid="416380073082560186">"फेस ऑथेंटिकेट करण्याचा पुन्हा प्रयत्न करा"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"शिफारशी लोड करत आहे"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"मीडिया"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> साठी हा मीडिया नियंत्रक लपवायचा आहे का?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"सेटिंग्ज"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> मध्ये <xliff:g id="ARTIST_NAME">%2$s</xliff:g> चे <xliff:g id="SONG_NAME">%1$s</xliff:g> प्ले होत आहे"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g> पैकी <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> रन होत आहे"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"प्ले करा"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"थांबवा"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"मागील गाणे"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"स्पीकर आणि डिस्प्ले"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"सुचवलेली डिव्हाइस"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"मीडिया दुसऱ्या डिव्हाइसवर शेअर करण्यासाठी तुमचे शेअर केलेले सेशन थांबवा"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"थांबवा"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"ब्रॉडकास्टिंग कसे काम करते"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"ब्रॉडकास्ट करा"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"कंपॅटिबल ब्लूटूथ डिव्‍हाइस असलेले तुमच्या जवळपासचे लोक हे तुम्ही ब्रॉडकास्ट करत असलेला मीडिया ऐकू शकतात"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"सेव्ह करू शकत नाही. पुन्हा प्रयत्न करा."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"सेव्ह करू शकत नाही."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"किमान चार वर्ण वापरा"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"१६ पेक्षा कमी वर्ण वापरा"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g> वर्णांपेक्षा कमी वर्ण वापरा"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"बिल्ड नंबर"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"बिल्ड नंबर क्लिपबोर्डवर कॉपी केला."</string>
     <string name="basic_status" msgid="2315371112182658176">"संभाषण उघडा"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"तुमचे बॅटरी मीटर वाचताना समस्या आली"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"अधिक माहितीसाठी टॅप करा"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"अलार्म सेट केला नाही"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"स्क्रीन लॉक एंटर करा"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"फिंगरप्रिंट सेन्सर"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"ऑथेंटिकेट करा"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"डिव्हाइस एंटर करा"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant ऐकत आहे"</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="note_task_button_label" msgid="8718616095800343136">"नोटटेकिंग"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"नोंद घेणे"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"नोंद घेणे, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"अधिक जाणून घ्या"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"<xliff:g id="URL">%s</xliff:g> येथे अधिक जाणून घ्या"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> उघडा"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• अ‍ॅप सेट करणे"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Wallet मध्ये किमान एक कार्ड जोडणे"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• कॅमेरा अ‍ॅप इंस्टॉल करणे"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• अ‍ॅप सेट करणे"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• किमान एक डिव्हाइस उपलब्ध करणे"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Wallet ॲप शॉर्टकट म्हणून जोडण्यासाठी ॲप इंस्टॉल केले असल्याची खात्री करा"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Wallet ॲप शॉर्टकट म्हणून जोडण्यासाठी किमान एक कार्ड जोडले असल्याची खात्री करा"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR कोड स्कॅनर शॉर्टकट म्हणून जोडण्यासाठी कॅमेरा ॲप इंस्टॉल केले असल्याची खात्री करा"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home अ‍ॅप शॉर्टकट म्हणून जोडण्यासाठी ॲप इंस्टॉल केले असल्याची खात्री करा"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• किमान एक डिव्हाइस उपलब्ध करणे"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"टिपा घेण्यासंबंधित शॉर्टकट वापरण्याकरिता टिपांसाठीचे डीफॉल्ट अ‍ॅप निवडा"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"अ‍ॅप निवडा"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"स्पर्श करा आणि धरून ठेवा शॉर्टकट"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"रद्द करा"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"आता स्क्रीन स्विच करा"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"तुमचे स्टायलस चार्जरशी कनेक्ट करा"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"स्टायलस बॅटरी कमी आहे"</string>
     <string name="video_camera" msgid="7654002575156149298">"व्हिडिओ कॅमेरा"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"या प्रोफाइलवरून कॉल करू शकत नाही"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"तुमचे कामाशी संबंधित धोरण तुम्हाला फक्त कार्य प्रोफाइलवरून फोन कॉल करन्याची अनुमती देते"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"वैयक्तिक ॲपवरून कॉल करू शकत नाही"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"तुमची संस्था तुम्हाला फक्त work app वरून कॉल करण्याची अनुमती देते"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"कार्य प्रोफाइलवर स्विच करा"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"बंद करा"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"कामाशी संबंधित फोन अ‍ॅप इंस्टॉल करा"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"रद्द करा"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"कस्टमाइझ लॉक स्‍क्रीन"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"लॉक स्‍क्रीन कस्टमाइझ करण्यासाठी अनलॉक करा"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"वाय-फाय उपलब्ध नाही"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"कॅमेरा ब्लॉक केला"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"कॅमेरा आणि मायक्रोफोन ब्लॉक केले आहेत"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"मायक्रोफोन ब्लॉक केला"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"प्राधान्य मोड सुरू आहे"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant चे लक्ष हे आता अ‍ॅक्टिव्ह आहे"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"सेटिंग्ज मध्ये डीफॉल्ट टिपा अ‍ॅप सेट करा"</string>
+    <string name="install_app" msgid="5066668100199613936">"अ‍ॅप इंस्टॉल करा"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"मायक्रोफोन आणि कॅमेरा"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"अलीकडील अ‍ॅप वापर"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"अलीकडील अ‍ॅक्सेस पहा"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"पूर्ण झाले"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"विस्तार करून पर्याय दाखवा"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"कोलॅप्स करा"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"हे ॲप बंद करा"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> बंद केले आहे"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"सेवा व्यवस्थापित करा"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"ॲक्सेस व्यवस्थापित करा"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"फोन कॉलवर वापरले जात आहे"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"अलीकडे फोन कॉलमध्ये वापरले गेले"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> द्वारे वापरले जात आहे"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"अलीकडे <xliff:g id="APP_NAME">%1$s</xliff:g> ने वापरले"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) द्वारे वापरले जात आहे"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"अलीकडे <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ने वापरले"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) द्वारे वापरले जात आहे"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"अलीकडे <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ने वापरले"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-mr/strings_tv.xml b/packages/SystemUI/res/values-mr/strings_tv.xml
deleted file mode 100644
index 74d60cd..0000000
--- a/packages/SystemUI/res/values-mr/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN कनेक्‍ट केले"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN डिस्कनेक्ट केले"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> द्वारे"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"सूचना"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"सूचना नाहीत"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"मायक्रोफोन रेकॉर्ड करत आहे"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"कॅमेरा रेकॉर्ड करत आहे"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"कॅमेरा आणि मायक्रोफोन रेकॉर्ड करत आहेत"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"मायक्रोफोनने रेकॉर्ड करणे थांबवले"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"कॅमेराने रेकॉर्ड करणे थांबवले"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"कॅमेरा आणि मायक्रोफोनने रेकॉर्ड करणे थांबवले"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"स्क्रीन रेकॉर्डिंग सुरू झाले आहे"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"स्क्रीन रेकॉर्डिंग थांबले आहे"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index dd0a896..586c96e 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Dayakan USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Ketahui lebih lanjut"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Tangkapan skrin"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Lanjutkan Buka Kunci dilumpuhkan"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Buka Kunci Berterusan dilumpuhkan"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"menghantar imej"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Menyimpan tangkapan skrin..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Menyimpan tangkapan skrin ke profil kerja…"</string>
@@ -83,7 +83,7 @@
     <string name="screenshot_edit_label" msgid="8754981973544133050">"Edit"</string>
     <string name="screenshot_edit_description" msgid="3333092254706788906">"Edit tangkapan skrin"</string>
     <string name="screenshot_share_description" msgid="2861628935812656612">"Kongsi tangkapan skrin"</string>
-    <string name="screenshot_scroll_label" msgid="2930198809899329367">"Tangkap lebih banyak"</string>
+    <string name="screenshot_scroll_label" msgid="2930198809899329367">"Tangkap imej lagi"</string>
     <string name="screenshot_dismiss_description" msgid="4702341245899508786">"Ketepikan tangkapan skrin"</string>
     <string name="screenshot_dismiss_work_profile" msgid="3101530842987697045">"Ketepikan mesej profil kerja"</string>
     <string name="screenshot_preview_description" msgid="7606510140714080474">"Pratonton tangkapan skrin"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> telah mengesan tangkapan skrin ini."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> dan apl lain yang dibuka telah mengesan tangkapan skrin ini."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Tambahkan pada nota"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Perakam Skrin"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Perakam Skrin"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Memproses rakaman skrin"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Pemberitahuan breterusan untuk sesi rakaman skrin"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Mula Merakam?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Semasa merakam, Sistem Android dapat menangkap mana-mana maklumat sensitif yang kelihatan pada skrin anda atau yang dimainkan pada peranti anda. Ini termasuklah kata laluan, maklumat pembayaran, foto, mesej dan audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Rakam seluruh skrin"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Rakam satu apl"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Apabila anda merakam, Android mempunyai akses kepada apa-apa yang boleh dilihat pada skrin anda atau dimainkan pada peranti anda. Jadi berhati-hati dengan kata laluan, butiran pembayaran, mesej atau maklumat sensitif lain."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Apabila anda merakam apl, Android mempunyai akses kepada apa-apa yang dipaparkan atau dimainkan pada apl tersebut. Jadi berhati-hati dengan kata laluan, butiran pembayaran, mesej atau maklumat sensitif lain."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Mulakan rakaman"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Mulakan Rakaman?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Apabila anda membuat rakaman, Android boleh mengakses apa-apa sahaja yang boleh dilihat pada skrin anda atau dimainkan pada peranti anda. Oleh hal yang demikian, berhati-hati dengan perkara seperti kata laluan, butiran pembayaran, mesej, foto dan audio serta video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Semasa anda merakam apl, Android boleh mengakses apa-apa sahaja yang ditunjukan atau dimainkan pada apl itu. Oleh hal yang demikian, berhati-hati dengan perkara seperti kata laluan, butiran pembayaran, mesej, foto dan audio serta video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Mulakan rakaman"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Rakam audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Audio peranti"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Bunyi daripada peranti anda, seperti muzik, panggilan dan nada dering"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Audio dan mikrofon peranti"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Mula"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Mula"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Merakam skrin"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Merakam skrin dan audio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Tunjukkan sentuhan pada skrin"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Kongsi"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Rakaman skrin disimpan"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Ketik untuk lihat"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Ralat semasa memadamkan rakaman skrin"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Ralat semasa menyimpan rakaman skrin"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Ralat semasa memulakan rakaman skrin"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Melihat skrin penuh"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Untuk keluar, leret ke bawah dari bahagian atas."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"OK"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Kembali"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Rumah"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Wajah disahkan"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Disahkan"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Ketik Sahkan untuk menyelesaikan"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Dibuka kunci dengan wajah. Tekan ikon buka kunci untuk teruskan."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Dibuka kunci dengan wajah"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Dibuka kunci dengan wajah. Tekan untuk meneruskan."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Wajah dicam. Tekan untuk meneruskan."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Wajah dicam. Tekan ikon buka kunci untuk meneruskan."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Disahkan"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Batalkan Pengesahan"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Gunakan PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Gunakan corak"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Gunakan kata laluan"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Jika anda memasukkan corak yang salah pada percubaan seterusnya, profil kerja anda dan data profil itu akan dipadamkan."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Jika anda memasukkan PIN yang salah pada percubaan seterusnya, profil kerja anda dan data profil itu akan dipadamkan."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Jika anda memasukkan kata laluan yang salah pada percubaan seterusnya, profil kerja anda dan data profil itu akan dipadamkan."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Sediakan"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Bukan sekarang"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Tindakan ini diperlukan untuk meningkatkan keselamatan dan prestasi"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Sediakan Buka Kunci Cap Jari sekali lagi"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Buka Kunci Cap Jari"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Sediakan Buka Kunci Cap Jari"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Untuk menyediakan Buka Kunci Cap Jari sekali lagi, imej dan model cap jari semasa anda akan dipadamkan.\n\nSelepas imej dan model cap jari tersebut dipadamkan, anda perlu menyediakan Buka Kunci Cap Jari sekali lagi untuk menggunakan cap jari anda untuk membuka kunci telefon anda atau mengesahkan identiti anda."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Untuk menyediakan Buka Kunci Cap Jari sekali lagi, imej dan model cap jari semasa anda akan dipadamkan.\n\nSelepas imej dan model cap jari tersebut dipadamkan, anda perlu menyediakan Buka Kunci Cap Jari sekali lagi untuk menggunakan cap jari anda untuk membuka kunci telefon anda atau mengesahkan identiti anda."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Tidak dapat menyediakan buka kunci cap jari. Akses Tetapan untuk mencuba lagi."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Sediakan semula Buka Kunci Wajah"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Buka Kunci Wajah"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Sediakan Buka Kunci Wajah"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Untuk menyediakan Buka Kunci Wajah sekali lagi, model wajah semasa anda akan dipadamkan.\n\nAnda perlu menyediakan ciri ini sekali lagi untuk menggunakan wajah anda untuk membuka kunci telefon anda."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Tidak dapat menyediakan buka kunci wajah. Akses Tetapan untuk mencuba lagi."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Sentuh penderia cap jari"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Tekan ikon buka kunci untuk meneruskan proses"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Tidak mengenali wajah. Gunakan cap jari."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Set Kepala"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Alat Bantu Dengar"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Alat bantu pendengaran"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Menghidupkan…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autoputar"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Autoputar skrin"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Dibuka kunci dengan wajah"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Wajah dicam"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Leret ke atas untuk mencuba lagi"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Leret ke atas untuk mencuba Buka Kunci Wajah sekali lagi"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Buka kunci untuk menggunakan NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Peranti ini milik organisasi anda"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Peranti ini milik <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> akan mempunyai akses kepada semua maklumat yang kelihatan pada skrin anda atau yang dimainkan daripada peranti anda semasa merakam atau membuat penghantaran. Ini termasuklah maklumat seperti kata laluan, butiran pembayaran, foto, mesej dan audio yang anda mainkan."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Perkhidmatan yang menyediakan fungsi ini akan mempunyai akses kepada semua maklumat yang kelihatan pada skrin anda atau dimainkan daripada peranti anda semasa merakam atau membuat penghantaran. Ini termasuklah maklumat seperti kata laluan, butiran pembayaran, foto, mesej dan audio yang anda mainkan."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Mulakan rakaman atau penghantaran?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Mulakan rakaman atau penghantaran dengan <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Benarkan <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> berkongsi atau merakam?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Seluruh skrin"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Satu apl"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Apabila anda berkongsi, merakam atau menghantar, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> mempunyai akses kepada apa-apa yang boleh dilihat pada skrin anda atau dimainkan pada peranti anda. Jadi berhati-hati dengan kata laluan, butiran pembayaran, mesej atau maklumat sensitif lain."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Apabila anda berkongsi, merakam atau menghantar apl, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> mempunyai akses kepada apa-apa yang dipaparkan atau dimainkan pada apl tersebut. Jadi berhati-hati dengan kata laluan, butiran pembayaran, mesej atau maklumat sensitif lain."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Teruskan"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Kongsi atau rakam apl"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Benarkan apl ini berkongsi atau merakam?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Apabila anda berkongsi, merakam atau menghantar, apl ini mempunyai akses kepada apa-apa yang boleh dilihat pada skrin anda atau dimainkan pada peranti anda. Jadi berhati-hati dengan kata laluan, butiran pembayaran, mesej atau maklumat sensitif lain."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Apabila anda berkongsi, merakam atau menghantar apl, apl ini mempunyai akses kepada apa-apa yang dipaparkan atau dimainkan pada apl tersebut. Jadi berhati-hati dengan kata laluan, butiran pembayaran, mesej atau maklumat sensitif lain."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> akan dapat mengakses semua maklumat yang kelihatan pada skrin anda atau yang dimainkan daripada peranti anda semasa merakam atau membuat penghantaran. Maklumat ini termasuk kata laluan, butiran pembayaran, foto, mesej dan audio yang anda mainkan."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Mulakan rakaman atau penghantaran?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Perkhidmatan yang menyediakan fungsi ini boleh mengakses semua maklumat yang boleh dilihat pada skrin anda atau dimainkan daripada peranti anda semasa membuat rakaman atau penghantaran. Maklumat ini termasuk kata laluan, butiran pembayaran, foto, mesej dan audio yang anda mainkan."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Seluruh skrin"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Satu apl"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Kongsi atau rakam apl"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Mulakan rakaman atau penghantaran dengan <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Apabila anda membuat perkongsian, rakaman atau penghantaran, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> boleh mengakses apa-apa sahaja yang boleh dilihat pada skrin anda atau dimainkan pada peranti anda. Oleh hal yang demikian, berhati-hati dengan perkara seperti kata laluan, butiran pembayaran, mesej, foto dan audio serta video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Apabila anda berkongsi, merakam atau menghantar apl, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> boleh mengakses apa-apa sahaja yang ditunjukan atau dimainkan pada apl tersebut. Oleh hal yang demikian, berhati-hati dengan perkara seperti kata laluan, butiran pembayaran, mesej, foto dan audio serta video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Mula"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Mulakan penghantaran?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Apabila anda membuat penghantaran, Android boleh mengakses apa-apa sahaja yang boleh dilihat pada skrin anda atau dimainkan pada peranti anda. Oleh hal yang demikian, berhati-hati dengan perkara seperti kata laluan, butiran pembayaran, mesej, foto dan audio serta video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Apabila anda menghantar apl, Android boleh mengakses apa-apa sahaja yang ditunjukan atau dimainkan pada apl itu. Oleh hal yang demikian, berhati-hati dengan perkara seperti kata laluan, butiran pembayaran, mesej, foto dan audio serta video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Mulakan penghantaran"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Mulakan perkongsian?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Apabila anda membuat perkongsian, rakaman atau penghantaran, Android boleh mengakses apa-apa sahaja yang boleh dilihat pada skrin anda atau dimainkan pada peranti anda. Oleh hal yang demikian, berhati-hati dengan perkara seperti kata laluan, butiran pembayaran, mesej, foto dan audio serta video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Apabila anda berkongsi, merakam atau menghantar apl, Android boleh mengakses apa-apa sahaja yang ditunjukan atau dimainkan pada apl tersebut. Oleh hal yang demikian, berhati-hati dengan perkara seperti kata laluan, butiran pembayaran, mesej, foto dan audio serta video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Mula"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Perkongsian dijeda apabila anda menukar apl"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Sebaliknya kongsi apl ini"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Tukar kembali"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Tukar apl"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Disekat oleh pentadbir IT anda"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Tangkapan skrin dilumpuhkan oleh dasar peranti"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Kosongkan semua"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Sijil kuasa dipasang pada peranti ini. Trafik rangkaian selamat anda mungkin dipantau atau diubah suai."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Pentadbir anda telah menghidupkan pengelogan rangkaian yang memantau trafik pada peranti anda."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Pentadbir anda telah menghidupkan pengelogan rangkaian yang memantau trafik dalam profil kerja anda tetapi bukan dalam profil peribadi anda."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Peranti ini disambungkan kepada Internet melalui <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktiviti rangkaian anda, termasuk e-mel dan data semakan imbas boleh dilihat oleh pentadbir IT anda."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Peranti ini disambungkan kepada Internet melalui <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktiviti rangkaian anda, termasuk e-mel dan data semakan imbas boleh dilihat oleh penyedia VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Peranti ini disambungkan kepada Internet melalui <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktiviti rangkaian anda, termasuk e-mel dan data semakan imbas boleh dilihat oleh pentadbir IT anda."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Peranti ini disambungkan kepada Internet melalui <xliff:g id="VPN_APP_0">%1$s</xliff:g> dan <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Aktiviti rangkaian anda, termasuk e-mel dan data semakan imbas boleh dilihat oleh pentadbir IT anda."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Apl kerja anda disambungkan kepada Internet melalui <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktiviti rangkaian anda dalam apl kerja, termasuk e-mel dan data semakan imbas boleh dilihat oleh pentadbir IT dan pembekal VPN anda."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Apl peribadi anda disambungkan kepada Internet melalui <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktiviti rangkaian anda, termasuk e-mel dan data semakan imbas boleh dilihat oleh pembekal VPN anda."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"lumpuhkan"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Bunyi &amp; getaran"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Tetapan"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Dikurangkan kepada kelantangan yang lebih selamat"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Kelantangan tinggi melebihi tempoh yang disyorkan"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Kelantangan dikurangkan kepada tahap yang lebih selamat"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Kelantangan fon kepala tinggi melebihi tempoh yang disyorkan"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Kelantangan fon kepala anda telah melebihi had selamat untuk minggu ini"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Teruskan mendengar"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Kurangkan kelantangan"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Apl telah disemat"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Tindakan ini memastikan skrin kelihatan sehingga anda menyahsemat. Sentuh &amp; tahan Kembali dan Ikhtisar untuk menyahsemat."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Tindakan ini memastikan skrin kelihatan sehingga anda menyahsemat. Sentuh &amp; tahan Kembali dan Skrin Utama untuk menyahsemat."</string>
@@ -622,7 +652,7 @@
     <string name="keyboard_shortcut_group_system_switch_input" msgid="952555530383268166">"Tukar reka letak papan kekunci"</string>
     <string name="keyboard_shortcut_clear_text" msgid="4679927133259287577">"Kosongkan teks"</string>
     <string name="keyboard_shortcut_search_list_title" msgid="1156178106617830429">"Pintasan"</string>
-    <string name="keyboard_shortcut_search_list_hint" msgid="5982623262974326746">"Pintasan carian"</string>
+    <string name="keyboard_shortcut_search_list_hint" msgid="5982623262974326746">"Cari pintasan"</string>
     <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"Tiada pintasan ditemukan"</string>
     <string name="keyboard_shortcut_search_category_system" msgid="1151182120757052669">"Sistem"</string>
     <string name="keyboard_shortcut_search_category_input" msgid="5440558509904296233">"Input"</string>
@@ -631,9 +661,9 @@
     <string name="group_system_access_notification_shade" msgid="7116898151485382275">"Akses bidai pemberitahuan"</string>
     <string name="group_system_full_screenshot" msgid="7389040853798023211">"Ambil tangkapan skrin penuh"</string>
     <string name="group_system_access_system_app_shortcuts" msgid="4421497579210445641">"Akses senarai pintasan sistem / apl"</string>
-    <string name="group_system_go_back" msgid="8838454003680364227">"Kembali: pergi semula kepada keadaan sebelumnya (butang kembali)"</string>
+    <string name="group_system_go_back" msgid="8838454003680364227">"Kembali: kembali kepada keadaan sebelumnya (butang kembali)"</string>
     <string name="group_system_access_home_screen" msgid="1857344316928441909">"Akses skrin utama"</string>
-    <string name="group_system_overview_open_apps" msgid="6897128761003265350">"Gambaran keseluruhan apl yang terbuka"</string>
+    <string name="group_system_overview_open_apps" msgid="6897128761003265350">"Gambaran keseluruhan apl yang dibuka"</string>
     <string name="group_system_cycle_forward" msgid="9202444850838205990">"Mengitar apl terbaharu (hadapan)"</string>
     <string name="group_system_cycle_back" msgid="5163464503638229131">"Mengitar apl terbaharu (belakang)"</string>
     <string name="group_system_access_all_apps_search" msgid="488070738028991753">"Akses senarai semua apl dan cari (iaitu Carian/Pelancar)"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menu kuasa"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Halaman <xliff:g id="ID_1">%1$d</xliff:g> daripada <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Kunci skrin"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telefon dimatikan kerana panas"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Telefon anda kini berjalan seperti biasa.\nKetik untuk mendapatkan maklumat lanjut"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefon anda terlalu panas, jadi telefon itu telah dimatikan untuk menyejuk. Sekarang, telefon anda berjalan seperti biasa.\n\nTelefon anda mungkin menjadi terlalu panas jika anda:\n	• Menggunakan apl intensif sumber (seperti permainan, video atau apl navigasi)\n	• Memuat turun atau memuat naik fail besar\n	• Menggunakan telefon anda dalam suhu tinggi"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Lihat langkah penjagaan"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefon semakin panas"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Sesetengah ciri adalah terhad semasa telefon menyejuk.\nKetik untuk mendapatkan maklumat lanjut"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Telefon anda akan cuba menyejuk secara automatik. Anda masih dapat menggunakan telefon itu tetapi telefon tersebut mungkin berjalan lebih perlahan.\n\nSetelah telefon anda sejuk, telefon itu akan berjalan seperti biasa."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Lihat langkah penjagaan"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Cabut palam peranti anda"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Peranti anda menjadi panas berdekatan port pengecasan. Jika peranti anda disambungkan ke pengecas atau aksesori USB, cabut palam peranti dan berhati-hati kerana kabel juga mungkin panas."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Besarkan skrin penuh"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Besarkan sebahagian skrin"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Buka tetapan pembesaran"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Tutup tetapan pembesaran"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Seret sudut untuk mengubah saiz"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Benarkan penatalan pepenjuru"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Ubah saiz"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"nyahgemari"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Alih ke kedudukan <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Kawalan"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Pilih kawalan peranti untuk pengaksesan pantas"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Tahan &amp; seret untuk mengatur semula kawalan"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Semua kawalan dialih keluar"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Perubahan tidak disimpan"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Cuba PIN lain"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Sahkan perubahan untuk <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Leret untuk melihat selanjutnya"</string>
+    <string name="retry_face" msgid="416380073082560186">"Cuba semula pengesahan wajah"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Memuatkan cadangan"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Sembunyikan kawalan media ini untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Tetapan"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> oleh <xliff:g id="ARTIST_NAME">%2$s</xliff:g> dimainkan daripada <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> daripada <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> sedang dijalankan"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Main"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Jeda"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Lagu sebelumnya"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Pembesar Suara &amp; Paparan"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Peranti yang Dicadangkan"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Hentikan sesi dikongsi anda untuk mengalihkan media kepada peranti yang lain"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Berhenti"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Cara siaran berfungsi"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Siarkan"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Orang berdekatan anda dengan peranti Bluetooth yang serasi boleh mendengar media yang sedang anda siarkan"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Tidak dapat disimpan. Cuba lagi."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Tidak dapat disimpan."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Gunakan sekurang-kurangnya 4 aksara"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Gunakan kurang daripada 16 aksara"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Gunakan kurang daripada <xliff:g id="LENGTH">%1$d</xliff:g> aksara"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Nombor binaan"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Nombor binaan disalin ke papan keratan."</string>
     <string name="basic_status" msgid="2315371112182658176">"Buka perbualan"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Masalah membaca meter bateri anda"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Ketik untuk mendapatkan maklumat lanjut"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Tiada penggera"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"masukkan kunci skrin"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Penderia cap jari"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"sahkan"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"akses peranti"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Pembantu sedang mendengar"</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="note_task_button_label" msgid="8718616095800343136">"Pengambilan nota"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Pengambilan nota"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Pengambilan nota, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Ketahui lebih lanjut"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Ketahui lebih lanjut di <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Buka <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Apl disediakan"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Sekurang-kurangnya satu kad telah ditambahkan pada Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Pasang apl kamera"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Apl disediakan"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Sekurang-kurangnya satu peranti tersedia"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Untuk menambahkan apl Wallet sebagai pintasan, pastikan apl telah dipasang"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Untuk menambahkan apl Wallet sebagai pintasan, pastikan sekurang-kurangnya satu kad telah ditambahkan"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Untuk menambahkan pengimbas kod QR sebagai pintasan, pastikan apl kamera telah dipasang"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Untuk menambahkan apl Home sebagai pintasan, pastikan apl telah dipasang"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Sekurang-kurangnya satu peranti tersedia"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Pilih apl nota lalai untuk menggunakan pintasan pengambilan nota"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Pilih apl"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Pintasan sentuh &amp; tahan"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Batal"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Tukar skrin sekarang"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Sambungkan stilus anda kepada pengecas"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Bateri stilus lemah"</string>
     <string name="video_camera" msgid="7654002575156149298">"Kamera video"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Tidak dapat membuat panggilan daripada profil ini"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Dasar kerja anda membenarkan anda membuat panggilan telefon hanya daripada profil kerja"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Tidak boleh membuat panggilan daripada apl peribadi"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Organisasi anda hanya membenarkan anda membuat panggilan daripada apl kerja"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Tukar kepada profil kerja"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Tutup"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Pasang apl telefon kerja"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Batal"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Sesuaikan skrin kunci"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Buka kunci untuk menyesuaikan skrin kunci"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi tidak tersedia"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera disekat"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera dan mikrofon disekat"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon disekat"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Mod keutamaan dihidupkan"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Perhatian pembantu dihidupkan"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Tetapkan apl nota lalai dalam Tetapan"</string>
+    <string name="install_app" msgid="5066668100199613936">"Pasang apl"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon &amp; Kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Penggunaan apl terbaharu"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Lihat akses terbaharu"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Selesai"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Kembangkan dan tunjukkan pilihan"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Kuncupkan"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Tutup apl ini"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> ditutup"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Urus perkhidmatan"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Urus akses"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Digunakan oleh panggilan telefon"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Digunakan baru-baru ini dalam panggilan telefon"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Digunakan oleh <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Digunakan baru-baru ini oleh <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Digunakan oleh <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Digunakan baru-baru ini oleh <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Digunakan oleh <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Digunakan baru-baru ini oleh <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ms/strings_tv.xml b/packages/SystemUI/res/values-ms/strings_tv.xml
deleted file mode 100644
index 08b9de0..0000000
--- a/packages/SystemUI/res/values-ms/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN telah disambungkan"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN diputuskan sambungan"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Melalui <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Pemberitahuan"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Tiada Pemberitahuan"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofon sedang merakam"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera sedang merakam"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera dan Mikrofon sedang merakam"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofon berhenti merakam"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kamera berhenti merakam"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kamera dan Mikrofon berhenti merakam"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Rakaman skrin dimulakan"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Rakaman skrin dihentikan"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index 925fb98..aa5853f 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB ကို ဖွင့်ရန်"</string>
     <string name="learn_more" msgid="4690632085667273811">"ပိုမိုလေ့လာရန်"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ဖန်သားပြင်ဓာတ်ပုံ"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"‘တိုးချဲ့ဖွင့်ခြင်း’ ပိတ်ထားသည်"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"‘လော့ခ်ဖွင့်ချိန်တိုးခြင်း’ ပိတ်ထားသည်"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ပုံပို့ထားသည်"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"ဖန်သားပြင်ဓါတ်ပုံရိုက်ခြင်းအား သိမ်းဆည်းပါမည်"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"အလုပ်ပရိုဖိုင်တွင် ဖန်သားပြင်ဓာတ်ပုံ သိမ်းနေသည်…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> က ဤဖန်သားပြင်ဓာတ်ပုံကို တွေ့ရှိသည်။"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> နှင့် အခြားဖွင့်ထားသော အက်ပ်များက ဤဖန်သားပြင်ဓာတ်ပုံကို တွေ့ရှိသည်။"</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"မှတ်စုတွင် ထည့်ရန်"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"ဖန်သားပြင် ရိုက်ကူးမှု"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"ဖန်သားပြင်ရိုက်ကူးစက်"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"စကရင်ရိုက်ကူးမှု အပြီးသတ်နေသည်"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"ဖန်သားပြင် ရိုက်ကူးသည့် စက်ရှင်အတွက် ဆက်တိုက်လာနေသော အကြောင်းကြားချက်"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"စတင် ရိုက်ကူးမလား။"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"ရိုက်ကူးနေစဉ်အတွင်း Android စနစ်သည် သင့်ဖန်သားပြင်ပေါ်တွင် မြင်နိုင်သော (သို့) သင့်စက်ပစ္စည်းတွင် ဖွင့်ထားသော အရေးကြီးသည့် အချက်အလက်များကို ရိုက်ယူနိုင်သည်။ ၎င်းတွင် စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ ဓာတ်ပုံ၊ မက်ဆေ့ဂျ်နှင့် အသံများ ပါဝင်သည်။"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"ဖန်သားပြင်တစ်ခုလုံးရိုက်ကူးရန်"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"အက်ပ်တစ်ခုတွင် ရိုက်ကူးရန်"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"ရိုက်ကူးနေစဉ် Android သည် သင့်ဖန်သားပြင်ရှိ မြင်နိုင်သည့် (သို့) သင့်စက်တွင် ဖွင့်ထားသည့် အရာအားလုံးကို တွေ့နိုင်သည်။ ထို့ကြောင့် စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ် (သို့) အခြားအရေးကြီးအချက်အလက်များနှင့်ပတ်သက်၍ ဂရုစိုက်ပါ။"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"အက်ပ်တစ်ခုကို ရိုက်ကူးနေစဉ် Android သည် ၎င်းအက်ပ်တွင် ပြထားသည့် (သို့) ဖွင့်ထားသည့် အရာအားလုံးကို တွေ့နိုင်သည်။ ထို့ကြောင့် စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ် (သို့) အခြားအရေးကြီးအချက်အလက်များနှင့်ပတ်သက်၍ ဂရုစိုက်ပါ။"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"စတင်ရိုက်ကူးရန်"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"စတင် ရိုက်သံဖမ်းမလား။"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"ရုပ်သံဖမ်းနေစဉ် Android သည် သင့်ဖန်သားပြင်တွင် မြင်နိုင်သည့် (သို့) သင့်စက်တွင် ဖွင့်ထားသည့် အရာအားလုံးကို တွေ့နိုင်သည်။ စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ်၊ ဓာတ်ပုံ၊ အသံနှင့် ဗီဒီယိုကဲ့သို့ အရာများကို ဂရုစိုက်ပါ။"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"အက်ပ်တစ်ခုကို ရုပ်သံဖမ်းနေစဉ် Android သည် ယင်းအက်ပ်တွင် ပြထားသည့် (သို့) ဖွင့်ထားသည့် အရာအားလုံးကို တွေ့နိုင်သည်။ ထို့ကြောင့် စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ်၊ ဓာတ်ပုံ၊ အသံနှင့် ဗီဒီယိုကဲ့သို့ အရာများကို ဂရုစိုက်ပါ။"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"ရုပ်သံ စဖမ်းရန်"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"အသံဖမ်းရန်"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"စက်ပစ္စည်းအသံ"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"သီချင်း၊ ဖုန်းခေါ်ဆိုမှုနှင့် ဖုန်းမြည်သံကဲ့သို့ သင့်စက်ပစ္စည်းမှ အသံ"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"မိုက်ခရိုဖုန်း"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"စက်ပစ္စည်းအသံနှင့် မိုက်ခရိုဖုန်း"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"စတင်ရန်"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"စတင်ရန်"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"ဖန်သားပြင်ကို ရိုက်ကူးနေသည်"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"အသံနှင့် ဖန်သားပြင်ကို ရိုက်ကူးနေသည်"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"ဖန်သားပြင်ပေါ်တွင် ထိချက်များ ပြရန်"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"မျှဝေရန်"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"စကရင်ရိုက်ကူးမှု သိမ်းပြီးပြီ"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"ကြည့်ရှုရန် တို့ပါ"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"ဖန်သားပြင် ရိုက်ကူးမှု ဖျက်ရာတွင် အမှားအယွင်းရှိနေသည်"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"ဖန်သားပြင်ရိုက်ကူးမှုကို သိမ်းရာတွင် အမှားရှိသည်"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"ဖန်သားပြင် ရိုက်ကူးမှု စတင်ရာတွင် အမှားအယွင်းရှိနေသည်"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"ဖန်သားပြင်အပြည့် ကြည့်နေသည်"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"ထွက်ရန် အပေါ်မှ အောက်သို့ ပွတ်ဆွဲပါ။"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"နားလည်ပြီ"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"နောက်သို့"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"ပင်မစာမျက်နှာ"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"မီနူး"</string>
@@ -137,7 +137,7 @@
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"မျက်နှာ စကင်ဖတ်နေသည်"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"ပို့ရန်"</string>
     <string name="cancel" msgid="1089011503403416730">"မလုပ်တော့"</string>
-    <string name="biometric_dialog_confirm" msgid="2005978443007344895">"အတည်ပြုပါ"</string>
+    <string name="biometric_dialog_confirm" msgid="2005978443007344895">"အတည်ပြုရန်"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"ထပ်စမ်းကြည့်ရန်"</string>
     <string name="biometric_dialog_empty_space_description" msgid="3330555462071453396">"အထောက်အထားစိစစ်ခြင်းကို ပယ်ဖျက်ရန် တို့ပါ"</string>
     <string name="biometric_dialog_face_icon_description_idle" msgid="4351777022315116816">"ထပ်စမ်းကြည့်ပါ"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"မျက်နှာ အထောက်အထားစိစစ်ပြီးပြီ"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"အတည်ပြုပြီးပြီ"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"အပြီးသတ်ရန်အတွက် \'အတည်ပြုရန်\' ကို တို့ပါ"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"မျက်နှာပြ လော့ခ်ဖွင့်ထားသည်။ လော့ခ်ဖွင့်သင်္ကေတနှိပ်၍ ရှေ့ဆက်ပါ။"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"မျက်နှာဖြင့် ဖွင့်ထားသည်"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"မျက်နှာဖြင့် ဖွင့်ထားသည်။ ရှေ့ဆက်ရန် နှိပ်ပါ။"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"မျက်နှာ မှတ်မိသည်။ ရှေ့ဆက်ရန် နှိပ်ပါ။"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"မျက်နှာ မှတ်မိသည်။ ရှေ့ဆက်ရန် လော့ခ်ဖွင့်သင်္ကေတကို နှိပ်ပါ။"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"အထောက်အထားစိစစ်ပြီးပြီ"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"အထောက်အထားစိစစ်ခြင်းကို ပယ်ဖျက်ရန်"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ပင်နံပါတ်သုံးရန်"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ပုံစံကို သုံးရန်"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"စကားဝှက် သုံးရန်"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"မှားယွင်းသည့် ပုံစံကို နောက်တစ်ကြိမ်ထည့်သွင်းပါက သင်၏အလုပ်ပရိုဖိုင်နှင့် ၎င်း၏ ဒေတာများကို ဖျက်လိုက်ပါမည်။"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"မှားယွင်းသည့် ပင်နံပါတ်ကို နောက်တစ်ကြိမ်ထည့်သွင်းပါက သင်၏အလုပ်ပရိုဖိုင်နှင့် ၎င်း၏ဒေတာများကို ဖျက်လိုက်ပါမည်။"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"မှားယွင်းသည့် စကားဝှက်ကို နောက်တစ်ကြိမ်ထည့်သွင်းပါက သင်၏အလုပ်ပရိုဖိုင်နှင့် ၎င်း၏ ဒေတာများကို ဖျက်လိုက်ပါမည်။"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"စနစ်ထည့်သွင်းရန်"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"ယခုမလုပ်ပါ"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"လုံခြုံရေးနှင့် စွမ်းဆောင်ရည် ပိုမိုကောင်းမွန်စေရန် ၎င်းကိုလိုအပ်သည်"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"‘လက်ဗွေသုံး လော့ခ်ဖွင့်ခြင်း’ ကို စနစ်ပြန်ထည့်သွင်းပါ"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"လက်ဗွေသုံး လော့ခ်ဖွင့်ခြင်း"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"‘လက်ဗွေသုံး လော့ခ်ဖွင့်ခြင်း’ ကို စနစ်ထည့်သွင်းပါ"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"‘လက်ဗွေသုံး လော့ခ်ဖွင့်ခြင်း’ ကို စနစ်ပြန်ထည့်ရန် သင့်လက်ရှိ လက်ဗွေပုံနှင့် မော်ဒယ်များကို ဖျက်လိုက်ပါမည်။\n\n၎င်းတို့ကို ဖျက်ပြီးသည့်အခါ သင့်လက်ဗွေဖြင့် ဖုန်းလော့ခ်ဖွင့်ရန် (သို့) သင်ဖြစ်ကြောင်း အတည်ပြုရန်အတွက် ‘လက်ဗွေသုံး လော့ခ်ဖွင့်ခြင်း’ ကို စနစ်ပြန်ထည့်ရမည်။"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"လက်ဗွေသုံး လော့ခ်ဖွင့်ခြင်း’ ကို စနစ်ပြန်ထည့်ရန် သင့်လက်ရှိ လက်ဗွေပုံနှင့် မော်ဒယ်တို့ကို ဖျက်လိုက်ပါမည်။\n\n၎င်းတို့ကို ဖျက်ပြီးသည့်အခါ သင့်လက်ဗွေဖြင့် ဖုန်းလော့ခ်ဖွင့်ရန် (သို့) သင်ဖြစ်ကြောင်း အတည်ပြုရန်အတွက် ‘လက်ဗွေသုံး လော့ခ်ဖွင့်ခြင်း’ ကို စနစ်ပြန်ထည့်ရမည်။"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"လက်ဗွေသုံး လော့ခ်ဖွင့်ခြင်းကို ထည့်သွင်း၍မရပါ။ ဆက်တင်များသို့ သွားပြီး ထပ်စမ်းကြည့်ပါ။"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"‘မျက်နှာပြ လော့ခ်ဖွင့်ခြင်း’ ကို စနစ်ပြန်ထည့်သွင်းပါ"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"မျက်နှာပြ လော့ခ်ဖွင့်ခြင်း"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"‘မျက်နှာပြ လော့ခ်ဖွင့်ခြင်း’ ကို စနစ်ထည့်သွင်းပါ"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"‘မျက်နှာပြ လော့ခ်ဖွင့်ခြင်း’ ကို စနစ်ပြန်ထည့်ရန် သင်၏ လက်ရှိ မျက်နှာနမူနာကို ဖျက်လိုက်ပါမည်။\n\nဖုန်းလော့ခ်ဖွင့်ရန်အတွက် သင့်မျက်နှာသုံးရန် ဤတူးလ်ကို စနစ်ပြန်ထည့်ရမည်။"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"မျက်နှာပြ လော့ခ်ဖွင့်ခြင်းကို စနစ်ထည့်သွင်း၍မရပါ။ ဆက်တင်များသို့သွားပြီး ထပ်စမ်းကြည့်ပါ။"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"လက်ဗွေအာရုံခံကိရိယာကို တို့ပါ"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"ရှေ့ဆက်ရန် လော့ခ်ဖွင့်သင်္ကေတကို နှိပ်ပါ"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"မျက်နှာကို မမှတ်မိပါ။ လက်ဗွေကို အစားထိုးသုံးပါ။"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -223,7 +239,7 @@
     <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>
-    <string name="start_dreams" msgid="9131802557946276718">"စခရင်နားချိန်"</string>
+    <string name="start_dreams" msgid="9131802557946276718">"စခရင်နားချိန်ပုံ"</string>
     <string name="ethernet_label" msgid="2203544727007463351">"အီသာနက်"</string>
     <string name="quick_settings_dnd_label" msgid="7728690179108024338">"မနှောင့်ယှက်ရ"</string>
     <string name="quick_settings_bluetooth_label" msgid="7018763367142041481">"ဘလူးတုသ်"</string>
@@ -232,12 +248,12 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"အသံ"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"မိုက်ခွက်ပါနားကြပ်"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"အဝင်"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"နားကြားကိရိယာ"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"နားကြားကိရိယာ"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ဖွင့်နေသည်…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"အော်တို-လည်"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"မျက်နှာပြင်အား အလိုအလျောက်လှည့်ခြင်း"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"တည်နေရာ"</string>
-    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"စကရင်နားချိန်"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"စခရင်နားချိန်ပုံ"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"ကင်မရာသုံးခွင့်"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"မိုက်သုံးခွင့်"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"ရနိုင်သည်"</string>
@@ -295,7 +311,7 @@
     <string name="quick_settings_nfc_label" msgid="1054317416221168085">"NFC"</string>
     <string name="quick_settings_nfc_off" msgid="3465000058515424663">"NFC ကို ပိတ်ထားသည်"</string>
     <string name="quick_settings_nfc_on" msgid="1004976611203202230">"NFC ကို ဖွင့်ထားသည်"</string>
-    <string name="quick_settings_screen_record_label" msgid="8650355346742003694">"စကရင် ရိုက်ကူးရန်"</string>
+    <string name="quick_settings_screen_record_label" msgid="8650355346742003694">"စခရင် ရိုက်ကူးရန်"</string>
     <string name="quick_settings_screen_record_start" msgid="1574725369331638985">"စတင်ရန်"</string>
     <string name="quick_settings_screen_record_stop" msgid="8087348522976412119">"ရပ်ရန်"</string>
     <string name="quick_settings_onehanded_label" msgid="2416537930246274991">"လက်တစ်ဖက်သုံးမုဒ်"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"မျက်နှာဖြင့် ဖွင့်လိုက်သည်"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"မျက်နှာ မှတ်မိသည်"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"ထပ်စမ်းကြည့်ရန် အပေါ်သို့ပွတ်ဆွဲပါ"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"‘မျက်နှာပြ လော့ခ်ဖွင့်ခြင်း’ ထပ်စမ်းရန် အပေါ်သို့ပွတ်ဆွဲပါ"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC ကို အသုံးပြုရန် လော့ခ်ဖွင့်ပါ"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"ဤစက်ကို သင့်အဖွဲ့အစည်းက ပိုင်ဆိုင်သည်"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"ဤစက်ကို <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> က ပိုင်ဆိုင်သည်"</string>
@@ -382,22 +399,31 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"သုံးစွဲသူကိုဖယ်ရှားမည်လား?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"ဤအသုံးပြုသူ၏ ဒေတာနှင့် အပ်ဖ်များအားလုံး ဖျက်လိုက်ပါမည်"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"ဖယ်ရှားရန်"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> သည် အသံဖမ်းနေစဉ် (သို့) ကာစ်လုပ်နေစဉ် သင့်ဖန်သားပြင်တွင် မြင်ရသော (သို့) သင့်စက်တွင် ဖွင့်ထားသော အချက်အလက်မှန်သမျှကို သုံးနိုင်နိုင်ပါမည်။ ၎င်းတွင် စကားဝှက်များ၊ ငွေပေးချေမှုအသေးစိတ်များ၊ ဓာတ်ပုံများ၊ မက်ဆေ့ဂျ်များနှင့် သင်ဖွင့်သည့်အသံကဲ့သို့သော အချက်အလက်များ ပါဝင်သည်။"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"ဤဝန်ဆောင်မှုသည် ရိုက်ကူးဖမ်းယူနေစဉ် (သို့) ကာစ်လုပ်နေစဉ်အတွင်း သင့်ဖန်သားပြင်တွင် မြင်ရသော (သို့) သင့်စက်တွင် ဖွင့်ထားသော အချက်အလက်အားလုံးကို ကြည့်နိုင်ပါမည်။ ၎င်းတွင် စကားဝှက်များ၊ ငွေပေးချေမှုအသေးစိတ်များ၊ ဓာတ်ပုံများ၊ မက်ဆေ့ဂျ်များနှင့် သင်ဖွင့်သည့်အသံကဲ့သို့သော အချက်အလက်များ ပါဝင်သည်။"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"ရိုက်ကူးဖမ်းယူခြင်း (သို့) ကာစ်လုပ်ခြင်း စတင်မလား။"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> နှင့် ဖမ်းယူခြင်း သို့မဟုတ် ကာစ်လုပ်ခြင်း စတင်မလား။"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"မျှဝေရန် (သို့) ရိုက်ကူးရန် <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ကို ခွင့်ပြုမလား။"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"ဖန်သားပြင်တစ်ခုလုံး"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"အက်ပ်တစ်ခုတွင်"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"မျှဝေ၊ ရိုက်ကူး (သို့) ကာစ်လုပ်သည့်အခါ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> သည် သင့်ဖန်သားပြင်ရှိ မြင်နိုင်သည့် (သို့) သင့်စက်တွင် ဖွင့်ထားသည့် အရာအားလုံးကို တွေ့နိုင်သည်။ ထို့ကြောင့် စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ် (သို့) အခြားအရေးကြီးအချက်အလက်များနှင့်ပတ်သက်၍ ဂရုစိုက်ပါ။"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"အက်ပ်ဖြင့် မျှဝေ၊ ရိုက်ကူး (သို့) ကာစ်လုပ်သည့်အခါ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> သည် ၎င်းအက်ပ်တွင် ပြထားသည့် (သို့) ဖွင့်ထားသည့် အရာအားလုံးကို တွေ့နိုင်သည်။ ထို့ကြောင့် စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ် (သို့) အခြားအရေးကြီးအချက်အလက်များနှင့်ပတ်သက်၍ ဂရုစိုက်ပါ။"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"ရှေ့ဆက်ရန်"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"အက်ပ် မျှဝေခြင်း (သို့) ရိုက်ကူးခြင်း"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"ဤအက်ပ်ကို မျှဝေ (သို့) ရိုက်ကူး ခွင့်ပြုမလား။"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"မျှဝေ၊ ရိုက်ကူး (သို့) ကာစ်လုပ်သည့်အခါ ဤအက်ပ်သည် သင့်ဖန်သားပြင်ရှိ မြင်နိုင်သည့် (သို့) သင့်စက်တွင် ဖွင့်ထားသည့် အရာအားလုံးကို တွေ့နိုင်သည်။ ထို့ကြောင့် စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ် (သို့) အခြားသတိထားရမည့် အချက်အလက်များနှင့် ပတ်သက်၍ သတိပြုပါ။"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"အက်ပ်ဖြင့် မျှဝေ၊ ရိုက်ကူး (သို့) ကာစ်လုပ်သည့်အခါ ဤအက်ပ်သည် ၎င်းတွင် ပြထားသည့် (သို့) ဖွင့်ထားသည့် အရာအားလုံးကို တွေ့နိုင်သည်။ ထို့ကြောင့် စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ် (သို့) အခြားသတိထားရမည့် အချက်အလက်များနှင့်ပတ်သက်၍ သတိပြုပါ။"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> သည် ရုပ်သံဖမ်းနေစဉ် (သို့) ကာစ်လုပ်နေစဉ် သင့်မျက်နှာပြင်တွင် မြင်ရသော (သို့) သင့်စက်တွင် ဖွင့်ထားသော အချက်အလက်မှန်သမျှကို သုံးနိုင်ပါမည်။ ၎င်းတွင် စကားဝှက်များ၊ ငွေပေးချေမှုအသေးစိတ်များ၊ ဓာတ်ပုံများ၊ မက်ဆေ့ဂျ်များနှင့် သင်ဖွင့်သည့်အသံကဲ့သို့သော အချက်အလက်များ ပါဝင်သည်။"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"ရုပ်သံဖမ်းခြင်း (သို့) ကာစ်လုပ်ခြင်း စမလား။"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"ဤလုပ်ဆောင်ချက်ကို ပေးအပ်သည့် ဝန်ဆောင်မှုသည် ရုပ်သံဖမ်းနေစဉ် (သို့) ကာစ်လုပ်နေစဉ် သင့်မျက်နှာပြင်တွင် မြင်ရသော (သို့) သင့်စက်တွင် ဖွင့်ထားသော အချက်အလက်မှန်သမျှကို သုံးနိုင်ပါမည်။ ၎င်းတွင် စကားဝှက်များ၊ ငွေပေးချေမှုအသေးစိတ်များ၊ ဓာတ်ပုံများ၊ မက်ဆေ့ဂျ်များနှင့် သင်ဖွင့်သည့်အသံကဲ့သို့သော အချက်အလက်များ ပါဝင်သည်။"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"ဖန်သားပြင်တစ်ခုလုံး"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"အက်ပ်တစ်ခုတွင်"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"အက်ပ် မျှဝေခြင်း (သို့) ရိုက်ကူးခြင်း"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> နှင့် ရုပ်သံဖမ်းခြင်း သို့မဟုတ် ကာစ်လုပ်ခြင်း စတင်မလား။"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"မျှဝေ၊ ရုပ်သံဖမ်း (သို့) ကာစ်လုပ်သည့်အခါ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> သည် သင့်ဖန်သားပြင်ရှိ မြင်နိုင်သည့် (သို့) သင့်စက်တွင် ဖွင့်ထားသည့် အရာအားလုံးကို တွေ့နိုင်သည်။ စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ်၊ ဓာတ်ပုံ၊ အသံနှင့် ဗီဒီယိုကဲ့သို့ အရာများကို ဂရုစိုက်ပါ။"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"အက်ပ်တစ်ခုဖြင့် မျှဝေ၊ ရုပ်သံဖမ်း (သို့) ကာစ်လုပ်သည့်အခါ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> သည် ယင်းအက်ပ်တွင် ပြထားသည့် (သို့) ဖွင့်ထားသည့် အရာအားလုံးကို တွေ့နိုင်သည်။ ထို့ကြောင့် စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ်၊ ဓာတ်ပုံ၊ အသံနှင့် ဗီဒီယိုကဲ့သို့အရာများကို ဂရုစိုက်ပါ။"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"စတင်ရန်"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"ကာစ်လုပ်ခြင်း စမလား။"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"ကာစ်လုပ်သည့်အခါ Android သည် သင့်ဖန်သားပြင်ရှိ မြင်နိုင်သည့် (သို့) သင့်စက်တွင် ဖွင့်ထားသည့် အရာအားလုံးကို တွေ့နိုင်သည်။ စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ်၊ ဓာတ်ပုံ၊ အသံနှင့် ဗီဒီယိုကဲ့သို့ အရာများကို ဂရုစိုက်ပါ။"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"အက်ပ်တစ်ခုကို ကာစ်လုပ်သည့်အခါ Android သည် ယင်းအက်ပ်တွင် ပြထားသည့် (သို့) ဖွင့်ထားသည့် အရာအားလုံးကို တွေ့နိုင်သည်။ ထို့ကြောင့် စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ်၊ ဓာတ်ပုံ၊ အသံနှင့် ဗီဒီယိုကဲ့သို့ အရာများကို ဂရုစိုက်ပါ။"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"ကာစ်လုပ်ခြင်း စရန်"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"စတင်မျှဝေမလား။"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"မျှဝေ၊ ရုပ်သံဖမ်း (သို့) ကာစ်လုပ်သည့်အခါ Android သည် သင့်ဖန်သားပြင်တွင် မြင်နိုင်သည့် (သို့) သင့်စက်တွင် ဖွင့်ထားသည့် အရာအားလုံးကို တွေ့နိုင်သည်။ စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ်၊ ဓာတ်ပုံ၊ အသံနှင့် ဗီဒီယိုကဲ့သို့ အရာများကို ဂရုစိုက်ပါ။"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"အက်ပ်တစ်ခုဖြင့် မျှဝေ၊ ရုပ်သံဖမ်း (သို့) ကာစ်လုပ်သည့်အခါ Android သည် ယင်းအက်ပ်တွင် ပြထားသည့် (သို့) ဖွင့်ထားသည့် အရာအားလုံးကို တွေ့နိုင်သည်။ ထို့ကြောင့် စကားဝှက်၊ ငွေပေးချေမှု အချက်အလက်၊ မက်ဆေ့ဂျ်၊ ဓာတ်ပုံ၊ အသံနှင့် ဗီဒီယိုကဲ့သို့အရာများကို ဂရုစိုက်ပါ။"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"စတင်ရန်"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"အက်ပ်ပြောင်းချိန်တွင် မျှဝေခြင်းကို ခဏရပ်သည်"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"၎င်းအစား ဤအက်ပ်ကို မျှဝေရန်"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"ပြန်ပြောင်းရန်"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"အက်ပ်ပြောင်းစနစ်"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"သင်၏ IT စီမံခန့်ခွဲသူက ပိတ်ထားသည်"</string>
-    <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"ကိရိယာဆိုင်ရာ မူဝါဒက ဖန်သားပြင်ပုံဖမ်းခြင်းကို ပိတ်ထားသည်"</string>
+    <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"ကိရိယာ မူဝါဒက ဖန်သားပြင်ပုံဖမ်းခြင်းကို ပိတ်ထားသည်"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"အားလုံးရှင်းရန်"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"စီမံရန်"</string>
     <string name="manage_notifications_history_text" msgid="57055985396576230">"မှတ်တမ်း"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"ဤစက်ပစ္စည်းတွင် စီမံခန့်ခွဲမှုဆိုင်ရာ အသိအမှတ်ပြုလက်မှတ်ကို ထည့်သွင်းထားပါသည်။ လုံခြုံမှုရှိသော ကွန်ရက်ဒေတာစီးဆင်းမှုကို စောင့်ကြည့်ခြင်း သို့မဟုတ် ပြုပြင်ခြင်းများ ပြုလုပ်နိုင်ပါသည်။"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"စက်ပစ္စည်းပေါ်ရှိ ဒေတာစီးဆင်းမှုများကို စောင့်ကြည့်နိုင်သည့်  ကွန်ရက်မှတ်တမ်းတင်ခြင်းစနစ်ကို သင်၏ စီမံခန့်ခွဲသူက ဖွင့်ထားပါသည်။"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"သင်၏စီမံခန့်ခွဲသူက ကွန်ရက်မှတ်တမ်းတင်ခြင်းကို ဖွင့်လိုက်သည်။ ၎င်းသည် သင့်အလုပ်ပရိုဖိုင်ရှိ ဒေတာစီးဆင်းမှုကို စောင့်ကြည့်သော်လည်း ကိုယ်ပိုင်ပရိုဖိုင်တွင် မစောင့်ကြည့်ပါ။"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"ဤစက်သည် <xliff:g id="VPN_APP">%1$s</xliff:g> မှတစ်ဆင့် အင်တာနက်ချိတ်ထားသည်။ အီးမေးလ်များနှင့် ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာများ အပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်များကို IT စီမံခန့်ခွဲသူက မြင်ရသည်။"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"ဤစက်ပစ္စည်းကို <xliff:g id="VPN_APP">%1$s</xliff:g> မှတစ်ဆင့် အင်တာနက်ချိတ်ထားသည်။ အီးမေးလ်နှင့် ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာအပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်များကို VPN ဝန်ဆောင်မှုပေးသူက မြင်ရသည်။"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"ဤစက်ပစ္စည်းကို <xliff:g id="VPN_APP">%1$s</xliff:g> မှတစ်ဆင့် အင်တာနက်ချိတ်ထားသည်။ အီးမေးလ်နှင့် ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာအပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်များကို IT စီမံခန့်ခွဲသူက မြင်ရသည်။"</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"ဤစက်သည် <xliff:g id="VPN_APP_0">%1$s</xliff:g> နှင့် <xliff:g id="VPN_APP_1">%2$s</xliff:g> မှတစ်ဆင့် အင်တာနက်ချိတ်ထားသည်။ အီးမေးလ်များနှင့် ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာများ အပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်များကို IT စီမံခန့်ခွဲသူက မြင်ရသည်။"</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"သင့်အလုပ်အက်ပ်များကို <xliff:g id="VPN_APP">%1$s</xliff:g> မှတစ်ဆင့် အင်တာနက်ချိတ်ထားသည်။ အီးမေးလ်များနှင့် ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာများ အပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်များကို IT စီမံခန့်ခွဲသူနှင့် VPN ပံ့ပိုးသူက မြင်ရသည်။"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"သင့်ကိုယ်ရေးသုံးအက်ပ်များကို <xliff:g id="VPN_APP">%1$s</xliff:g> မှတစ်ဆင့် အင်တာနက်ချိတ်ထားသည်။ အီးမေးလ်များနှင့် ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာများ အပါအဝင် သင့်ကွန်ရက်လုပ်ဆောင်ချက်များကို VPN ပံ့ပိုးသူက မြင်ရသည်။"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"ပိတ်ရန်"</string>
     <string name="sound_settings" msgid="8874581353127418308">"အသံနှင့် တုန်ခါမှု"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ဆက်တင်များ"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ပိုအန္တရာယ်ကင်းသော အသံသို့ လျှော့ထားသည်"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"အသံကို အကြံပြုထားသည်ထက် ပိုကြာမြင့်စွာ ချဲ့ထားသည်"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"အသံကို ဘေးကင်းသည့်အဆင့်သို့ တိုးထားသည်"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"နားကြပ်အသံအား အကြံပြုထားသည်ထက် ပိုကြာရှည်စွာ ချဲ့ထားသည်"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"နားကြပ်အသံသည် ဤအပတ်အတွက် ဘေးကင်းသည့်ကန့်သတ်ချက်ထက် ကျော်သွားပါပြီ"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"ဆက်နားဆင်ရန်"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"အသံတိုးရန်"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"အက်ပ်ကို ပင်ထိုးထားသည်"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"သင်ပင်မဖြုတ်မခြင်း ၎င်းကို ပြသထားပါမည်။ ပင်ဖြုတ်ရန် Back နှင့် Overview ကို ထိ၍ဖိထားပါ။"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"သင်က ပင်မဖြုတ်မခြင်း ၎င်းကို ပြသထားပါမည်။ ပင်ဖြုတ်ရန် \'နောက်သို့\' နှင့် \'ပင်မ\' ခလုတ်တို့ကို တို့၍ဖိထားပါ။"</string>
@@ -703,7 +733,7 @@
     <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"အကွက်ငယ်များ ပြန်စီစဉ်ရန် ဖိပြီးဆွဲပါ"</string>
     <string name="drag_to_remove_tiles" msgid="4682194717573850385">"ဖယ်ရှားရန် ဤနေရာသို့ဖိဆွဲပါ"</string>
     <string name="drag_to_remove_disabled" msgid="933046987838658850">"အနည်းဆုံး <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> ကွက် ရှိရမည်"</string>
-    <string name="qs_edit" msgid="5583565172803472437">"တည်းဖြတ်ပါ"</string>
+    <string name="qs_edit" msgid="5583565172803472437">"တည်းဖြတ်ရန်"</string>
     <string name="tuner_time" msgid="2450785840990529997">"အချိန်"</string>
   <string-array name="clock_options">
     <item msgid="3986445361435142273">"နာရီ၊ မိနစ်နှင့် စက္ကန့်ကိုပြပါ"</item>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"ပါဝါမီနူး"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"စာမျက်နှာ <xliff:g id="ID_2">%2$d</xliff:g> အနက်မှ စာမျက်နှာ <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"လော့ခ်ချထားချိန် မျက်နှာပြင်"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"အပူရှိန်ကြောင့်ဖုန်းပိတ်ထားသည်"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"သင့်ဖုန်းသည် ယခု ပုံမှန်အလုပ်လုပ်နေပါပြီ။\nနောက်ထပ်အချက်အလက်များအတွက် တို့ပါ"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"သင့်ဖုန်းအလွန်ပူနေသည့်အတွက် အေးသွားစေရန် ပိတ်ထားပါသည်။ ယခုပုံမှန် အလုပ်လုပ်ပါပြီ။\n\nအောက်ပါတို့ကိုသုံးလျှင် ပူလာပါမည်-\n	• အရင်းအမြစ်များသောအက်ပ်ကို သုံးခြင်း (ဥပမာ ဂိမ်းကစားခြင်း၊ ဗီဒီယိုကြည့်ခြင်း (သို့) လမ်းညွှန်အက်ပ်)\n	• ကြီးမားသောဖိုင်များ ဒေါင်းလုဒ် (သို့) အပ်လုဒ်လုပ်ခြင်း\n	• အပူရှိန်မြင့်သောနေရာတွင် သုံးခြင်း"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"ဂရုပြုစရာ အဆင့်များ ကြည့်ရန်"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"ဖုန်း ပူနွေးလာပါပြီ"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"ဖုန်းကို အေးအောင်ပြုလုပ်နေစဉ်တွင် အချို့ဝန်ဆောင်မှုများကို ကန့်သတ်ထားပါသည်။\nနောက်ထပ်အချက်အလက်များအတွက် တို့ပါ"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"သင့်ဖုန်းသည် အလိုအလျောက် ပြန်အေးသွားပါလိမ့်မည်။ ဖုန်းကို အသုံးပြုနိုင်ပါသေးသည် သို့သော် ပိုနှေးနိုင်ပါသည်။\n\nသင့်ဖုန်း အေးသွားသည်နှင့် ပုံမှန်အတိုင်း ပြန်အလုပ်လုပ်ပါလိမ့်မည်။"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"ဂရုပြုစရာ အဆင့်များ ကြည့်ရန်"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"သင့်စက်ကို ပလတ်ဖြုတ်ပါ"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"သင့်စက်သည် အားသွင်းပို့တ်အနီးတွင် ပူနွေးလာသည်။ ၎င်းကို အားသွင်းကိရိယာ (သို့) USB ဆက်စပ်ပစ္စည်းနှင့် ချိတ်ဆက်ထားပါက ပလတ်ဖြုတ်ပါ။ ကြိုးကလည်း ပူနွေးနေနိုင်သဖြင့် ဂရုပြုပါ။"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ဖန်သားပြင်အပြည့် ချဲ့သည်"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ဖန်သားပြင် တစ်စိတ်တစ်ပိုင်းကို ချဲ့ပါ"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"ချဲ့ခြင်း ဆက်တင်များ ဖွင့်ရန်"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"ချဲ့ခြင်း ဆက်တင်များ ပိတ်ရန်"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"အရွယ်အစားပြန်ပြုပြင်ရန် ထောင့်စွန်းကို ဖိဆွဲပါ"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"ထောင့်ဖြတ် လှိမ့်ခွင့်ပြုရန်"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"အရွယ်အစားပြန်ပြုပြင်ရန်"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"အကြိုက်ဆုံးမှ ဖယ်ရှားရန်"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"အနေအထား <xliff:g id="NUMBER">%d</xliff:g> သို့ ရွှေ့ရန်"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"ထိန်းချုပ်မှုများ"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"အမြန်သုံးရန် စက်ထိန်းစနစ်များ ရွေးချယ်ပါ"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"ထိန်းချုပ်မှုများ ပြန်စီစဉ်ရန် ဖိပြီးဆွဲပါ"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"ထိန်းချုပ်မှုအားလုံး ဖယ်ရှားလိုက်သည်"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"အပြောင်းအလဲများကို သိမ်းမထားပါ"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"အခြားအက်ပ်များကိုကြည့်ပါ"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"ပြန်စီရန်"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"သတ်မှတ်ချက်များ ထည့်ရန်"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"ထိန်းချုပ်မှုများ ထည့်ရန်"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"တည်းဖြတ်ခြင်းသို့ ပြန်သွားရန်"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"ထိန်းချုပ်မှုများကို ဖွင့်၍မရပါ။ အက်ပ်ဆက်တင်များ ပြောင်းမထားကြောင်း သေချာစေရန် <xliff:g id="APP">%s</xliff:g> အက်ပ်ကို စစ်ဆေးပါ။"</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"ကိုက်ညီသော ထိန်းချုပ်မှုများကို မရရှိနိုင်ပါ"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"နောက်ပင်နံပါတ်တစ်ခု စမ်းကြည့်ရန်"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> အတွက် အပြောင်းအလဲကို အတည်ပြုပါ"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"ပိုကြည့်ရန် ပွတ်ဆွဲပါ"</string>
+    <string name="retry_face" msgid="416380073082560186">"မျက်နှာ အထောက်အထားစိစစ်ခြင်းကို ထပ်စမ်းရန်"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"အကြံပြုချက်များ ဖွင့်နေသည်"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"မီဒီယာ"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> အတွက် ဤမီဒီယာထိန်းချုပ်မှု ဖျောက်ထားမလား။"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"ဆက်တင်များ"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> ၏ <xliff:g id="SONG_NAME">%1$s</xliff:g> ကို <xliff:g id="APP_LABEL">%3$s</xliff:g> တွင် ဖွင့်ထားသည်"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g> အနက် <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> လုပ်ဆောင်နေသည်"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"ဖွင့်ရန်"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"ခဏရပ်ရန်"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"ယခင် တစ်ပုဒ်"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"စပီကာနှင့် ဖန်သားပြင်များ"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"အကြံပြုထားသော စက်ပစ္စည်းများ"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"အခြားစက်သို့ မီဒီယာရွှေ့ပြောင်းရန် သင်၏မျှဝေထားသောစက်ရှင်ကို ရပ်ပါ"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"ရပ်ရန်"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"ထုတ်လွှင့်မှုဆောင်ရွက်ပုံ"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"ထုတ်လွှင့်ခြင်း"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"အနီးရှိတွဲသုံးနိုင်သော ဘလူးတုသ်သုံးစက် အသုံးပြုသူများက သင်ထုတ်လွှင့်နေသော မီဒီယာကို နားဆင်နိုင်သည်"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"သိမ်း၍မရပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"သိမ်း၍မရပါ။"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"အနည်းဆုံး အက္ခရာ ၄ လုံး သုံးရန်"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"အက္ခရာ ၁၆ လုံးအောက် သုံးရန်"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"အက္ခရာ <xliff:g id="LENGTH">%1$d</xliff:g> လုံးအောက် သုံးရန်"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"တည်ဆောက်မှုနံပါတ်"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"တည်ဆောက်မှုနံပါတ်ကို ကလစ်ဘုတ်သို့ မိတ္တူကူးပြီးပါပြီ။"</string>
     <string name="basic_status" msgid="2315371112182658176">"စကားဝိုင်းကို ဖွင့်ရန်"</string>
@@ -994,7 +1022,7 @@
     <string name="one_week_timestamp" msgid="4925600765473875590">"ပြီးခဲ့သော 1 ပတ်"</string>
     <string name="two_weeks_timestamp" msgid="9111801081871962155">"ပြီးခဲ့သော 2 ပတ်"</string>
     <string name="over_one_week_timestamp" msgid="3770560704420807142">"ပြီးခဲ့သော 1 ပတ်ကျော်"</string>
-    <string name="over_two_weeks_timestamp" msgid="6300507859007874050">"ပြီးခဲ့သော 2 ပတ်ကျော်"</string>
+    <string name="over_two_weeks_timestamp" msgid="6300507859007874050">"ပြီးခဲ့သော ၂ ပတ်ကျော်က"</string>
     <string name="birthday_status" msgid="2596961629465396761">"မွေးနေ့"</string>
     <string name="birthday_status_content_description" msgid="682836371128282925">"<xliff:g id="NAME">%1$s</xliff:g> ၏ မွေးနေ့ ဖြစ်ပါသည်"</string>
     <string name="upcoming_birthday_status" msgid="2005452239256870351">"မကြာမီလာမည့် မွေးနေ့"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"သင်၏ ဘက်ထရီမီတာကို ဖတ်ရာတွင် ပြဿနာရှိနေသည်"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"နောက်ထပ်အချက်အလက်များအတွက် တို့ပါ"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"နှိုးစက်ပေးမထားပါ"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ဖန်သားပြင်လော့ခ် ထည့်ရန်"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"လက်ဗွေ အာရုံခံကိရိယာ"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"အထောက်အထားစိစစ်ရန်"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"စက်ပစ္စည်းသို့ ဝင်ရန်"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant နားထောင်နေသည်"</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="note_task_button_label" msgid="8718616095800343136">"မှတ်စုလိုက်ခြင်း"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"မှတ်စုလိုက်ခြင်း"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"မှတ်စုလိုက်ခြင်း၊ <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"ပိုမိုလေ့လာရန်"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"<xliff:g id="URL">%s</xliff:g> တွင် ပိုမိုလေ့လာရန်"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> ဖွင့်ရန်"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• အက်ပ်ကို စနစ်ထည့်သွင်းထားရမည်"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Wallet တွင် အနည်းဆုံးကတ်တစ်ခု ထည့်ထားရမည်"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• ကင်မရာအက်ပ် ထည့်သွင်းထားရမည်"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• အက်ပ်ကို စနစ်ထည့်သွင်းထားရမည်"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• အနည်းဆုံး စက်တစ်ခုသုံးနိုင်ရမည်"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Wallet အက်ပ်ကို ဖြတ်လမ်းလင့်ခ်အဖြစ်ထည့်ရန် ၎င်းအားထည့်သွင်းထားကြောင်း သေချာပါစေ"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Wallet အက်ပ်ကို ဖြတ်လမ်းလင့်ခ်အဖြစ်ထည့်ရန် အနည်းဆုံး ကတ်တစ်ခုထည့်ထားကြောင်း သေချာပါစေ"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR ကုဒ် စကင်ဖတ်စနစ်ကို ဖြတ်လမ်းလင့်ခ်အဖြစ်ထည့်ရန် ကင်မရာအက်ပ်အားထည့်သွင်းထားကြောင်း သေချာပါစေ"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home အက်ပ်ကို ဖြတ်လမ်းလင့်ခ်အဖြစ်ထည့်ရန် ၎င်းအားထည့်သွင်းထားကြောင်း သေချာပါစေ"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• အနည်းဆုံး စက်တစ်ခုသုံးနိုင်ရမည်"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"မှတ်စုရေးသည့် ဖြတ်လမ်းလင့်ခ်သုံးရန်အတွက် မူရင်းမှတ်စုများအက်ပ် ရွေးရန်"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"အက်ပ်ရွေးရန်"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"ဖြတ်လမ်းလင့်ခ်ကို ထိပြီးဖိထားပါ"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"မလုပ်တော့"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"စခရင်များ ယခုပြောင်းရန်"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"စတိုင်လပ်စ်ကို အားသွင်းကိရိယာနှင့် ချိတ်ဆက်ခြင်း"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"စတိုင်လပ်စ် ဘက်ထရီ အားနည်းနေသည်"</string>
     <string name="video_camera" msgid="7654002575156149298">"ဗီဒီယိုကင်မရာ"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"ဤပရိုဖိုင်မှ ခေါ်ဆို၍ မရပါ"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"သင့်အလုပ်မူဝါဒသည် သင့်အား အလုပ်ပရိုဖိုင်မှသာ ဖုန်းခေါ်ဆိုခွင့် ပြုသည်"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"ကိုယ်ရေးသုံးအက်ပ်မှ ဖုန်းဆက်၍မရပါ"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"သင့်အဖွဲ့အစည်းသည် သင့်အား အလုပ်သုံးအက်ပ်များမှသာ ဖုန်းဆက်ခွင့်ပြုသည်"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"အလုပ်ပရိုဖိုင်သို့ ပြောင်းရန်"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"ပိတ်ရန်"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"အလုပ်သုံး ဖုန်းအက်ပ် ထည့်သွင်းရန်"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"မလုပ်တော့"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"လော့ခ်မျက်နှာပြင်စိတ်ကြိုက်လုပ်ရန်"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"လော့ခ်မျက်နှာပြင် စိတ်ကြိုက်လုပ်ရန် ဖွင့်ပါ"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi မရနိုင်ပါ"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"ကင်မရာကို ပိတ်ထားသည်"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"ကင်မရာနှင့် မိုက်ခရိုဖုန်းကို ပိတ်ထားသည်"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"မိုက်ခရိုဖုန်းကို ပိတ်ထားသည်"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ဦးစားပေးမုဒ် ဖွင့်ထားသည်"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant နားထောင်နေသည်"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"ဆက်တင်များတွင် မူရင်းမှတ်စုများအက်ပ် သတ်မှတ်ပါ"</string>
+    <string name="install_app" msgid="5066668100199613936">"အက်ပ် ထည့်သွင်းရန်"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"မိုက်ခရိုဖုန်းနှင့် ကင်မရာ"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"လတ်တလော အက်ပ်အသုံးပြုမှု"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"လတ်တလောအသုံးပြုမှုကို ကြည့်ရန်"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"ပြီးပြီ"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"ရွေးစရာများကို ချဲ့ပြပါ"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"လျှော့ပြပါ"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"ဤအက်ပ်ကို ပိတ်ရန်"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> ကို ပိတ်ထားသည်"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"ဝန်ဆောင်မှုကို စီမံရန်"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"သုံးခွင့် စီမံရန်"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"ဖုန်းခေါ်ဆိုမှုက သုံးနေသည်"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"ဖုန်းခေါ်ဆိုမှုတွင် လတ်တလောသုံးထားသည်"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> က သုံးနေသည်"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"<xliff:g id="APP_NAME">%1$s</xliff:g> က လတ်တလောသုံးထားသည်"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) က သုံးနေသည်"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) က လတ်တလောသုံးထားသည်"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) က သုံးနေသည်"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) က လတ်တလောသုံးထားသည်"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-my/strings_tv.xml b/packages/SystemUI/res/values-my/strings_tv.xml
deleted file mode 100644
index 0ac3950..0000000
--- a/packages/SystemUI/res/values-my/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN ချိတ်ဆက်ထားသည်"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN ချိတ်ဆက်မှုမရှိပါ"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> မှတစ်ဆင့်"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"အကြောင်းကြားချက်များ"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"အကြောင်းကြားချက်များ မရှိပါ"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"မိုက်ခရိုဖုန်း မှတ်တမ်းတင်နေသည်"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"ကင်မရာ မှတ်တမ်းတင်နေသည်"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"ကင်မရာနှင့် မိုက်ခရိုဖုန်းက မှတ်တမ်းတင်နေသည်"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"မိုက်ခရိုဖုန်း မှတ်တမ်းတင်ခြင်းကို ရပ်ထားသည်"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"ကင်မရာ မှတ်တမ်းတင်ခြင်းကို ရပ်ထားသည်"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"ကင်မရာနှင့် မိုက်ခရိုဖုန်းက မှတ်တမ်းတင်ခြင်းကို ရပ်ထားသည်"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"မျက်နှာပြင် ရိုက်ကူးမှု စတင်လိုက်ပါပြီ"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"မျက်နှာပြင် ရိုက်ကူးမှုကို ရပ်လိုက်ပါပြီ"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 72bb06a..90025c6 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Slå på USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Finn ut mer"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Skjermdump"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock er slått av"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Hold ulåst er slått av"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"har sendt et bilde"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Lagrer skjermdumpen …"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Lagrer skjermdumpen i jobbprofilen …"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> har registrert denne skjermdumpen."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> og andre åpne apper har registrert denne skjermdumpen."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Legg til i notat"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Skjermopptaker"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Skjermopptak"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Behandler skjermopptaket"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Vedvarende varsel for et skjermopptak"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Vil du starte et opptak?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Under opptak kan Android-systemet registrere all sensitiv informasjon som er synlig på skjermen eller spilles av på enheten. Dette inkluderer passord, betalingsinformasjon, bilder, meldinger og lyd."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Ta opp hele skjermen"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Ta opp én app"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Når du tar opp noe, har Android tilgang til alt som vises på skjermen eller spilles av på enheten. Derfor bør du være forsiktig med passord, betalingsopplysninger, meldinger og annen sensitiv informasjon."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Når du tar opp en app, har Android tilgang til alt som vises eller spilles av i appen. Derfor bør du være forsiktig med passord, betalingsopplysninger, meldinger og annen sensitiv informasjon."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Start opptaket"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Vil du begynne å ta opp?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Når du tar opp noe, har Android tilgang til alt som vises på skjermen eller spilles av på enheten. Derfor bør du være forsiktig med for eksempel passord, betalingsopplysninger, meldinger, bilder, lyd og video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Når du tar opp en app, har Android tilgang til alt som vises eller spilles av i den aktuelle appen. Derfor bør du være forsiktig med for eksempel passord, betalingsopplysninger, meldinger, bilder, lyd og video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Begynn å ta opp"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Spill inn lyd"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Enhetslyd"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Lyd fra enheten, f.eks. musikk, samtaler og ringelyder"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Enhetslyd og mikrofon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Start"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Begynn"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Tar opp skjermen"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Tar opp skjermen og lyd"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Vis trykk på skjermen"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Del"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Skjermopptaket er lagret"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Trykk for å se"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Feil ved sletting av skjermopptaket"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Feil ved lagring av skjermopptaket"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Feil ved start av skjermopptaket"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Visning i fullskjerm"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Sveip ned fra toppen for å avslutte."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Greit"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Tilbake"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Startside"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Meny"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Ansiktet er autentisert"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Bekreftet"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Trykk på Bekreft for å fullføre"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Låst opp med ansiktet. Trykk på lås opp-ikonet for å fortsette"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Låst opp med ansiktet"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Låst opp med ansiktet. Trykk for å fortsette."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Ansiktet er gjenkjent. Trykk for å fortsette."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Ansiktet er gjenkjent. Trykk på lås opp-ikon for å fortsette"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentisert"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Avbryt autentisering"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Bruk PIN-kode"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Bruk mønster"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Bruk passord"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Hvis du oppgir feil mønster på neste forsøk, slettes jobbprofilen din og tilknyttede data."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Hvis du skriver inn feil PIN-kode på neste forsøk, slettes jobbprofilen din og tilknyttede data."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Hvis du skriver inn feil passord på neste forsøk, slettes jobbprofilen din og tilknyttede data."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Konfigurer"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Ikke nå"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Dette er nødvendig for å forbedre sikkerheten og ytelsen"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Konfigurer opplåsingen med fingeravtrykk på nytt"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Opplåsing med fingeravtrykk"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Konfigurer opplåsingen med fingeravtrykk"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"For å konfigurere opplåsingen med fingeravtrykk på nytt slettes de nåværende bildene og modellene av fingeravtrykket ditt.\n\nNår de er slettet, må du konfigurere opplåsingen med fingeravtrykk på nytt for å bruke fingeravtrykket til å låse opp telefonen eller bekrefte at du er deg."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"For å konfigurere opplåsingen med fingeravtrykk på nytt slettes de nåværende bildene og den nåværende modellen av fingeravtrykket ditt.\n\nNår de er slettet, må du konfigurere opplåsingen med fingeravtrykk på nytt for å bruke fingeravtrykket til å låse opp telefonen eller bekrefte at du er deg."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Kunne ikke konfigurere opplåsingen med fingeravtrykk. Gå til innstillingene for å prøve på nytt."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Konfigurer ansiktslåsen på nytt"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Ansiktslås"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Konfigurer ansiktslåsen"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"For å konfigurere ansiktslåsen på nytt slettes den nåværende ansiktsmodellen din.\n\nDu må konfigurere denne funksjonen på nytt for å låse opp telefonen med ansiktet."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Kunne ikke konfigurere ansiktslåsen. Gå til innstillingene for å prøve på nytt."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Trykk på fingeravtrykkssensoren"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Trykk på lås opp-ikonet for å fortsette"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Ansiktet gjenkjennes ikke. Bruk fingeravtrykk."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Lyd"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Hodetelefoner"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Innenhet"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Høreapparater"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Høreapparater"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Slår på …"</string>
     <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>
@@ -306,9 +322,9 @@
     <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vil du oppheve blokkeringen av enhetsmikrofonen?"</string>
     <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vil du oppheve blokkeringen av enhetskameraet?"</string>
     <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vil du oppheve blokkeringen av enhetskameraet og -mikrofonen?"</string>
-    <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"Dette opphever blokkeringen av tilgang for alle apper og tjenester som har tillatelse til å bruke mikrofonen."</string>
-    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"Dette opphever blokkeringen av tilgang for alle apper og tjenester som har tillatelse til å bruke kameraet."</string>
-    <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"Dette opphever blokkeringen av tilgang for alle apper og tjenester som har tillatelse til å bruke kameraet eller mikrofonen."</string>
+    <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"Dette gjenoppretter tilgangen for alle apper og tjenester som har tillatelse til å bruke mikrofonen."</string>
+    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"Dette gjenoppretter tilgangen for alle apper og tjenester som har tillatelse til å bruke kameraet."</string>
+    <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"Dette gjenoppretter tilgangen for alle apper og tjenester som har tillatelse til å bruke kameraet eller mikrofonen."</string>
     <string name="sensor_privacy_start_use_mic_blocked_dialog_title" msgid="2640140287496469689">"Mikrofonen er blokkert"</string>
     <string name="sensor_privacy_start_use_camera_blocked_dialog_title" msgid="7398084286822440384">"Kameraet er blokkert"</string>
     <string name="sensor_privacy_start_use_mic_camera_blocked_dialog_title" msgid="195236134743281973">"Mikrofonen og kameraet er blokkert"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Låst opp med ansiktet"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Ansiktet er gjenkjent"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Sveip opp for å prøve igjen"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Sveip opp for å prøve ansiktslåsen igjen"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Lås opp for å bruke NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Denne enheten tilhører organisasjonen din"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Denne enheten tilhører <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> får tilgang til all informasjon som er synlig på skjermen din, eller som spilles av fra enheten når du tar opp eller caster. Dette inkluderer informasjon som passord, betalingsopplysninger, bilder, meldinger og lyd du spiller av."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Tjenesten som leverer denne funksjonen, får tilgang til all informasjon som er synlig på skjermen din, eller som spilles av fra enheten når du tar opp eller caster. Dette inkluderer informasjon som passord, betalingsopplysninger, bilder, meldinger og lyd du spiller av."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Vil du starte opptak eller casting?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Vil du starte opptak eller casting med <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Vil du gi <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tillatelse til å dele eller ta opp?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Hele skjermen"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Én app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Når du deler, tar opp eller caster noe, har <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tilgang til alt som vises på skjermen eller spilles av på enheten. Derfor bør du være forsiktig med passord, betalingsopplysninger, meldinger og annen sensitiv informasjon."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Når du deler, tar opp eller caster en app, har <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tilgang til alt som vises eller spilles av i den aktuelle appen. Derfor bør du være forsiktig med passord, betalingsopplysninger, meldinger og annen sensitiv informasjon."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Fortsett"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Del eller ta opp en app"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Vil du tillate at denne appen deler eller tar opp?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Når du deler, tar opp eller caster noe, har denne appen tilgang til alt som vises på skjermen eller spilles av på enheten. Derfor bør du være forsiktig med passord, betalingsopplysninger, meldinger og annen sensitiv informasjon."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Når du deler, tar opp eller caster en app, har denne appen tilgang til alt som vises eller spilles av i den aktuelle appen. Derfor bør du være forsiktig med passord, betalingsopplysninger, meldinger og annen sensitiv informasjon."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> får tilgang til all informasjon som vises på skjermen eller spilles av fra enheten når du tar opp eller caster noe. Dette inkluderer informasjon som passord, betalingsopplysninger, bilder, meldinger og lyd du spiller av."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Vil du begynne å ta opp eller caste?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Tjenesten som leverer denne funksjonen, får tilgang til all informasjon som vises på skjermen eller spilles av fra enheten mens du tar opp eller caster noe. Dette inkluderer informasjon som passord, betalingsopplysninger, bilder, meldinger og lyd du spiller av."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Hele skjermen"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Én app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Del eller ta opp en app"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Vil du begynne å ta opp eller caste med <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Når du deler, tar opp eller caster noe, har <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tilgang til alt som vises på skjermen eller spilles av på enheten. Derfor bør du være forsiktig med for eksempel passord, betalingsopplysninger, meldinger, bilder, lyd og video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Når du deler, tar opp eller caster en app, har <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tilgang til alt som vises eller spilles av i den aktuelle appen. Derfor bør du være forsiktig med for eksempel passord, betalingsopplysninger, meldinger, bilder, lyd og video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Begynn"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Vil du begynne å caste?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Når du caster, har Android tilgang til alt som vises på skjermen eller spilles av på enheten. Derfor bør du være forsiktig med for eksempel passord, betalingsopplysninger, meldinger, bilder, lyd og video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Når du caster en app, har Android tilgang til alt som vises eller spilles av i den aktuelle appen. Derfor bør du være forsiktig med for eksempel passord, betalingsopplysninger, meldinger, bilder, lyd og video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Begynn å caste"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Vil du begynne å dele?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Når du deler, tar opp eller caster noe, har Android tilgang til alt som vises på skjermen eller spilles av på enheten. Derfor bør du være forsiktig med for eksempel passord, betalingsopplysninger, meldinger, bilder, lyd og video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Når du deler, tar opp eller caster en app, har Android tilgang til alt som vises eller spilles av i den aktuelle appen. Derfor bør du være forsiktig med for eksempel passord, betalingsopplysninger, meldinger, bilder, lyd og video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Begynn"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Delingen settes på pause når du bytter app"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Del denne appen i stedet"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Bytt tilbake"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Appbytte"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blokkert av IT-administratoren"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Skjermdumper er deaktivert av enhetsinnstillingene"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Fjern alt"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"En sertifiseringsinstans er installert på denne enheten. Den sikre nettverkstrafikken din kan overvåkes eller endres."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Administratoren din har slått på loggføring av nettverk, som overvåker trafikken på enheten din."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Administratoren din har slått på loggføring av nettverk, som overvåker trafikken i jobbprofilen din, men ikke i den personlige profilen din."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Denne enheten er koblet til internett via <xliff:g id="VPN_APP">%1$s</xliff:g>. Nettverksaktiviteten din, inkludert e-poster og nettlesingsdata, er synlig for IT-administratoren din."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Denne enheten er koblet til internett via <xliff:g id="VPN_APP">%1$s</xliff:g>. Nettverksaktiviteten din, inkludert e-poster og nettlesingsdata, er synlig for VPN-leverandøren."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Denne enheten er koblet til internett via <xliff:g id="VPN_APP">%1$s</xliff:g>. Nettverksaktiviteten din, inkludert e-poster og nettlesingsdata, er synlig for IT-administratoren din."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Denne enheten er koblet til internett via <xliff:g id="VPN_APP_0">%1$s</xliff:g> og <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Nettverksaktiviteten din, inkludert e-poster og nettlesingsdata, er synlig for IT-administratoren din."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Jobbappene dine er koblet til internett via <xliff:g id="VPN_APP">%1$s</xliff:g>. Nettverksaktiviteten din i jobbapper, inkludert e-poster og nettlesingsdata, er synlige for IT-administratoren og VPN-leverandøren din."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"De personlige appene dine er koblet til internett via <xliff:g id="VPN_APP">%1$s</xliff:g>. Nettverksaktiviteten din, inkludert e-poster og nettlesingsdata, er synlig for VPN-leverandøren din."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"deaktiver"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Lyd og vibrering"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Innstillinger"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Redusert til et tryggere volum"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Volumet har vært høyt lengre enn anbefalt"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Senk volumet til et tryggere nivå"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Volumet på hodetelefonene har vært høyt lenger enn anbefalt"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Volumet på hodetelefonene har overskredet sikkerhetsgrensen for denne uken"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Fortsett å lytte"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Senk volumet"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Appen er festet"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Gjør at den vises til du løsner den. Trykk og hold inne Tilbake og Oversikt for å løsne den."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Gjør at den vises til du løsner den. Trykk og hold inne Tilbake og Startside for å løsne den."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Av/på-meny"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Side <xliff:g id="ID_1">%1$d</xliff:g> av <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Låseskjerm"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telefon ble slått av pga varme"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Telefonen kjører nå som normalt.\nTrykk for å se mer informasjon"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefonen din var for varm, så den ble slått av for å kjøles ned. Telefonen din kjører nå som normalt.\n\nTelefonen kan blir for varm hvis du:\n	• bruker ressurskrevende apper (for eksempel spill-, video- eller navigeringsapper)\n	• laster store filer opp eller ned\n	• bruker telefonen ved høy temperatur"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Se vedlikeholdstrinnene"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefonen begynner å bli varm"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Enkelte funksjoner er begrenset mens telefonen kjøles ned.\nTrykk for å se mer informasjon"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Telefonen din kommer til å prøve å kjøle seg ned automatisk. Du kan fremdeles bruke telefonen, men den kjører muligens saktere.\n\nTelefonen kommer til å kjøre som normalt, når den har kjølt seg ned."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Se vedlikeholdstrinnene"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Koble fra enheten"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Enheten begynner å bli varm nær ladeporten. Hvis den er koblet til en lader eller et USB-tilbehør, må du koble den fra. Vær forsiktig da kabelen også kan være varm."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Forstørr hele skjermen"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Forstørr en del av skjermen"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Åpne innstillinger for forstørring"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Lukk forstørringsinnstillingene"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Dra hjørnet for å endre størrelse"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Tillat diagonal rulling"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Endre størrelse"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"fjerne som favoritt"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Flytt til posisjon <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroller"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Velg enhetskontroller du vil ha rask tilgang til"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Hold og dra for å flytte kontroller"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Alle kontroller er fjernet"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Endringene er ikke lagret"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Prøv en annen PIN-kode"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Bekreft endringen for <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Sveip for å se flere"</string>
+    <string name="retry_face" msgid="416380073082560186">"Prøv ansiktsautentisering på nytt"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Laster inn anbefalinger"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Medier"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Vil du skjule denne mediekontrollen for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Innstillinger"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> av <xliff:g id="ARTIST_NAME">%2$s</xliff:g> spilles av fra <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> av <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> kjører"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Spill av"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pause"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Forrige spor"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Høyttalere og skjermer"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Foreslåtte enheter"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Stopp den delte økten for å flytte medieinnholdet til en annen enhet"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Stopp"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Slik fungerer kringkasting"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Kringkasting"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Folk i nærheten med kompatible Bluetooth-enheter kan lytte til mediene du kringkaster"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Kan ikke lagre. Prøv på nytt."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Kan ikke lagre."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Bruk minst 4 tegn"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Bruk færre enn 16 tegn"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Bruk færre enn <xliff:g id="LENGTH">%1$d</xliff:g> tegn"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Delversjonsnummer"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Delversjonsnummeret er kopiert til utklippstavlen."</string>
     <string name="basic_status" msgid="2315371112182658176">"Åpen samtale"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Kunne ikke lese batterimåleren"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Trykk for å få mer informasjon"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Ingen alarm angitt"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"legg inn skjermlåsen"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Fingeravtrykkssensor"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autentiser"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"åpne enheten"</string>
@@ -1046,7 +1075,7 @@
     <string name="wifi_wont_autoconnect_for_now" msgid="5782282612749867762">"Wifi kobles ikke til automatisk inntil videre"</string>
     <string name="see_all_networks" msgid="3773666844913168122">"Se alle"</string>
     <string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"For å bytte nettverk, koble fra Ethernet"</string>
-    <string name="wifi_scan_notify_message" msgid="3753839537448621794">"For å forbedre brukeropplevelsen på enheten kan apper og tjenester søke etter wifi-nettverk når som helst – også når Wifi er slått av. Du kan endre dette i innstillingene for wifi-skanning. "<annotation id="link">"Endre"</annotation></string>
+    <string name="wifi_scan_notify_message" msgid="3753839537448621794">"For å forbedre brukeropplevelsen på enheten kan apper og tjenester søke etter wifi-nettverk når som helst – også når wifi er slått av. Du kan endre dette i innstillingene for wifi-skanning. "<annotation id="link">"Endre"</annotation></string>
     <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Slå av flymodus"</string>
     <string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> vil legge til denne brikken i Hurtiginnstillinger"</string>
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Legg til brikke"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistenten lytter"</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="note_task_button_label" msgid="8718616095800343136">"Notatskriving"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Notatskriving"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Notatskriving, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1097,15 +1127,17 @@
     <string name="log_access_confirmation_title" msgid="4843557604739943395">"Vil du gi <xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> tilgang til alle enhetslogger?"</string>
     <string name="log_access_confirmation_allow" msgid="752147861593202968">"Gi éngangstilgang"</string>
     <string name="log_access_confirmation_deny" msgid="2389461495803585795">"Ikke tillat"</string>
-    <string name="log_access_confirmation_body" msgid="6883031912003112634">"Enhetslogger registrerer det som skjer på enheten din. Apper kan bruke disse loggene til å finne og løse problemer.\n\nNoen logger kan inneholde sensitiv informasjon, så du bør bare gi tilgang til alle enhetslogger til apper du stoler på. \n\nHvis du ikke gir denne appen tilgang til alle enhetslogger, har den fortsatt tilgang til sine egne logger. Enhetsprodusenten kan fortsatt ha tilgang til visse logger eller noe informasjon på enheten din."</string>
+    <string name="log_access_confirmation_body" msgid="6883031912003112634">"Enhetslogger registrerer det som skjer på enheten din. Apper kan bruke disse loggene til å finne og løse problemer.\n\nNoen logger kan inneholde sensitiv informasjon, så du bør bare gi apper du stoler på, tilgang til alle enhetslogger. \n\nHvis du ikke gir denne appen tilgang til alle enhetslogger, har den fortsatt tilgang til sine egne logger. Enhetsprodusenten kan fortsatt ha tilgang til visse logger eller noe informasjon på enheten din."</string>
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Finn ut mer"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Finn ut mer på <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Åpne <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• appen er konfigurert"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• minst ett kort er lagt til i Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• en kameraapp er installert"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• appen er konfigurert"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• minst én enhet er tilgjengelig"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"For å legge til Wallet-appen som snarvei, sørg for at appen er installert"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"For å legge til Wallet-appen som snarvei, sørg for at minst ett kort er lagt til"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"For å legge til QR-kodeskanneren som snarvei, sørg for at du har en kameraapp installert"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"For å legge til Home-appen som snarvei, sørg for at appen er installert"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• minst én enhet er tilgjengelig"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Velg en standard notatapp du vil bruke med notatsnarveien"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Velg app"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Trykk på og hold inne snarveien"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Avbryt"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Bytt skjerm nå"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Koble pekepennen til en lader"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Det er lite batteri i pekepennen"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Kan ikke ringe fra denne profilen"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Som følge av jobbreglene dine kan du bare starte telefonanrop fra jobbprofilen."</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Kan ikke ringe fra personlige apper"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Organisasjonen din tillater bare at du ringer fra jobbapper"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Bytt til jobbprofilen"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Lukk"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Installer en jobbapp på telefonen"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Avbryt"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Tilpass låseskjermen"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Du må låse opp enheten for å tilpasse låseskjermen"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wifi er ikke tilgjengelig"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kameraet er blokkert"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kameraet og mikrofonen er blokkert"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofonen er blokkert"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioriteringsmodus er på"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistentoppmerksomhet er på"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Du kan velge en standardapp for notater i Innstillinger"</string>
+    <string name="install_app" msgid="5066668100199613936">"Installer appen"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon og kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Nylig appbruk"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Se nylig tilgang"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Ferdig"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Vis alternativer"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Skjul"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Lukk denne appen"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> er lukket"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Administrer tjenesten"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Administrer tilgang"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"I bruk av telefonanrop"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Nylig brukt i telefonanrop"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"I bruk av <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Nylig brukt av <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"I bruk av <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Nylig brukt av <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"I bruk av <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Nylig brukt av <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-nb/strings_tv.xml b/packages/SystemUI/res/values-nb/strings_tv.xml
deleted file mode 100644
index 5848f58..0000000
--- a/packages/SystemUI/res/values-nb/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN er tilkoblet"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN er frakoblet"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Via <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Varsler"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Ingen varsler"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofonen tar opp"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kameraet tar opp"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kameraet og mikrofonen tar opp"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofonen stoppet opptaket"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kameraet stoppet opptaket"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kameraet og mikrofonen stoppet opptaket"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Skjermopptaket er startet"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Skjermopptaket er stoppet"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index eb5d3db..dd15313 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB सक्षम पार्नुहोस्"</string>
     <string name="learn_more" msgid="4690632085667273811">"थप जान्नुहोस्"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"स्क्रिनसट"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock अफ गरिएको छ"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"एक्स्टेन्ड अनलक अफ गरिएको छ"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"कुनै छवि पठाइयो"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"स्क्रिनसट बचत गर्दै…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"कार्य प्रोफाइलमा स्क्रिनसट सेभ गरिँदै छ…"</string>
@@ -79,7 +79,7 @@
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"स्क्रिनसट फेरि लिएर हेर्नुहोस्"</string>
     <string name="screenshot_failed_to_save_text" msgid="7232739948999195960">"स्क्रिनसट सुरक्षित गर्न सकिएन"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"उक्त एप वा तपाईंको संगठनले स्क्रिनसटहरू लिन दिँदैन"</string>
-    <string name="screenshot_blocked_by_admin" msgid="5486757604822795797">"तपाईंको सूचना प्रविधि व्यवस्थापकले स्क्रिनसट लिने सुविधा ब्लक गर्नुभएको छ"</string>
+    <string name="screenshot_blocked_by_admin" msgid="5486757604822795797">"तपाईंको IT एड्मिनले स्क्रिनसट लिने सुविधा ब्लक गर्नुभएको छ"</string>
     <string name="screenshot_edit_label" msgid="8754981973544133050">"सम्पादन गर्नुहोस्"</string>
     <string name="screenshot_edit_description" msgid="3333092254706788906">"स्क्रिनसट सम्पादन गर्नुहोस्"</string>
     <string name="screenshot_share_description" msgid="2861628935812656612">"स्क्रिनसट सेयर गर्नुहोस्"</string>
@@ -95,23 +95,20 @@
     <string name="screenshot_default_files_app_name" msgid="8721579578575161912">"Files"</string>
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> ले यो स्क्रिनसट भेट्टाएको छ।"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> र खुला रहेका अन्य एपहरूले यो स्क्रिनसट भेट्टाएका छन्।"</string>
-    <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"नोट एपमा सेभ गर्नुहोस्"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"स्क्रिन रेकर्डर"</string>
+    <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"नोटमा सेभ गर्नुहोस्"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"स्क्रिन रेकर्डर"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"स्क्रिन रेकर्डिङको प्रक्रिया अघि बढाइँदै"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"कुनै स्क्रिन रेकर्ड गर्ने सत्रका लागि चलिरहेको सूचना"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"रेकर्ड गर्न थाल्ने हो?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"रेकर्ड गर्दा, Android सिस्टमले तपाईंको स्क्रिनमा देखिने वा तपाईंको डिभाइसमा प्ले गरिने सबै संवेदनशील जानकारी रेकर्ड गर्न सक्छ। यो जानकारीमा पासवर्ड, भुक्तानीसम्बन्धी जानकारी, फोटो, सन्देश र अडियो समावेश हुन्छ।"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"पूरै स्क्रिन रेकर्ड गर्नुहोस्"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"एउटा एप मात्र रेकर्ड गर्नुहोस्"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"तपाईंले रेकर्ड गर्दा Android ले तपाईंको स्क्रिनमा देखिने वा डिभाइसमा प्ले गरिएका सबै कुरा खिच्न सक्छ। त्यसैले रेकर्ड गर्दा पासवर्ड, भुक्तानीको विवरण, म्यासेज वा अन्य संवेदनशील जानकारी सुरक्षित राख्नुहोला।"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"तपाईंले रेकर्ड गर्दा Android ले तपाईंको स्क्रिनमा देखिने वा डिभाइसमा प्ले गरिएका सबै कुरा खिच्न सक्छ। त्यसैले रेकर्ड गर्दा पासवर्ड, भुक्तानीको विवरण, म्यासेज वा अन्य संवेदनशील जानकारी सुरक्षित राख्नुहोला।"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"रेकर्ड गर्न थाल्नुहोस्"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"रेकर्ड गर्न थाल्ने हो?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"तपाईंले रेकर्ड गर्दै गर्दा Android ले तपाईंको स्क्रिनमा देखिने वा डिभाइसमा प्ले गरिने सबै कुरा हेर्न तथा प्रयोग गर्न सक्छ। त्यसैले पासवर्ड, भुक्तानीसम्बन्धी विवरण, म्यासेज, फोटो र अडियो तथा भिडियो जस्ता कुरा हेर्दा वा प्ले गर्दा सावधानी अपनाउनुहोला।"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"तपाईंले कुनै एप रेकर्ड गर्दै गर्दा Android ले उक्त एपमा देखाइने वा प्ले गरिने सबै कुरा हेर्न तथा प्रयोग गर्न सक्छ। त्यसैले पासवर्ड, भुक्तानीसम्बन्धी विवरण, म्यासेज, फोटो र अडियो तथा भिडियो जस्ता कुरा हेर्दा वा प्ले गर्दा सावधानी अपनाउनुहोला।"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"रेकर्ड गर्न थाल्नुहोस्"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"अडियो रेकर्ड गरियोस्"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"डिभाइसको अडियो"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"तपाईंको डिभाइसका सङ्गीत, कल र रिङटोन जस्ता साउन्ड"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"माइक्रोफोन"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"डिभाइस र माइक्रोफोनको अडियो"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"सुरु गर्नुहोस्"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"सुरु गर्नुहोस्"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"स्क्रिन रेकर्ड गरिँदै छ"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"स्क्रिन र अडियो रेकर्ड गरिँदै छ"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"स्पर्श गरिएका स्थानहरू देखाइयोस्"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"सेयर गर्नुहोस्"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"स्क्रिन रेकर्डिङ सेभ गरियो"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"हेर्नका लागि ट्याप गर्नुहोस्"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"स्क्रिनको रेकर्डिङ मेट्ने क्रममा त्रुटि"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"स्क्रिन रेकर्डिङ सेभ गर्ने क्रममा त्रुटि भयो"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"स्क्रिन रेकर्ड गर्न थाल्ने क्रममा त्रुटि भयो"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"फुल स्क्रिन हेरिँदै छ"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"बाहिरिन सिरानबाट तलतिर स्वाइप गर्नुहोस्।"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"बुझेँ"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"पछाडि"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"गृह"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"मेनु"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"अनुहार प्रमाणीकरण गरियो"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"पुष्टि भयो"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"पूरा गर्नका लागि पुष्टि गर्नुहोस् नामक विकल्पमा ट्याप गर्नुहोस्"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"अनुहार प्रयोग गरी अनलक गरियो। जारी राख्न अनलक आइकनमा थिच्नुहोस्।"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"अनुहार प्रयोग गरी अनलक गरियो"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"अनुहार प्रयोग गरी अनलक गरियो। जारी राख्न थिच्नुहोस्।"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"अनुहार पहिचान गरियो। जारी राख्न थिच्नुहोस्।"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"अनुहार पहिचान गरियो। जारी राख्न अनलक आइकनमा थिच्नुहोस्।"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"प्रमाणीकरण गरियो"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"प्रमाणीकरण रद्द गर्नुहोस्"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN प्रयोग गर्नुहोस्"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ढाँचा प्रयोग गर्नुहोस्"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"पासवर्ड प्रयोग गर्नुहोस्"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"तपाईंले अर्को पटक पनि गलत ढाँचा प्रविष्टि गर्नुभयो भने यो कार्य प्रोफाइल र त्यहाँको डेटा मेटाइने छ।"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"तपाईंले अर्को पटक पनि गलत PIN प्रविष्टि गर्नुभयो भने तपाईंको कार्य प्रोफाइल र त्यहाँको डेटा मेटाइने छ।"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"तपाईंले अर्को पटक पनि गलत पासवर्ड प्रविष्टि गर्नुभयो भने तपाईंको कार्य प्रोफाइल र त्यहाँको डेटा मेटाइने छ।"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"सेटअप गर्नुहोस्"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"अहिले होइन"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"सुरक्षाको गुणस्तर तथा पर्फर्मेन्स सुधार गर्न यो अनुमति दिनु पर्ने हुन्छ"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"फिंगरप्रिन्ट अनलक फेरि सेटअप गर्नुहोस्"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"फिंगरप्रिन्ट अनलक"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"फिंगरप्रिन्ट अनलक सेटअप गर्नुहोस्"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"फिंगरप्रिन्ट अनलक फेरि सेटअप गर्न तपाईंका हालका फिंगरप्रिन्टका फोटो तथा मोडेलहरू मेटाइने छन्।\n\nती फोटो तथा मोडेलहरू मेटाइएपछि तपाईंले आफ्नो फिंगरप्रिन्ट प्रयोग गरेर फोन अनलक गर्न वा आफ्नो पहिचान पुष्टि गर्न फिंगरप्रिन्ट अनलक फेरि सेटअप गर्नु पर्ने हुन्छ।"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"फिंगरप्रिन्ट अनलक फेरि सेटअप गर्न तपाईंका हालका फिंगरप्रिन्टका फोटो तथा मोडेल मेटाइने छन्।\n\nती फोटो तथा मोडेलहरू मेटाइएपछि तपाईंले आफ्नो फिंगरप्रिन्ट प्रयोग गरेर फोन अनलक गर्न वा आफ्नो पहिचान पुष्टि गर्न फिंगरप्रिन्ट अनलक फेरि सेटअप गर्नु पर्ने हुन्छ।"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"फिंगरप्रिन्ट अनलक सेटअप गर्न सकिएन। फेरि प्रयास गर्न सेटिङमा जानुहोस्।"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"फेस अनलक फेरि सेटअप गर्नुहोस्"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"फेस अनलक"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"फेस अनलक सेटअप गर्नुहोस्"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"फेस अनलक फेरि सेटअप गर्न तपाईंको हालको फेस मोडेल मेटाइने छ।\n\nतपाईं आफ्नो अनुहार प्रयोग गरेर फोन अनलक गर्न चाहनुहुन्छ भने तपाईंले यो सुविधा फेरि सेटअप गर्नु पर्ने हुन्छ।"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"फेस अनलक सेटअप गर्न सकिएन। फेरि प्रयास गर्न सेटिङमा जानुहोस्।"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"फिंगरप्रिन्ट सेन्सरमा छुनुहोस्‌"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"जारी राख्न अनलक आइकनमा थिच्नुहोस्"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"अनुहार पहिचान गर्न सकिएन। बरु फिंगरप्रिन्ट प्रयोग गर्नुहोस्।"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"अडियो"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"हेडसेट"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"इनपुट"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"श्रवण यन्त्रहरू"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"श्रवण यन्त्रहरू"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"सक्रिय गर्दै…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"अटो रोटेट"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"स्क्रिन स्वतःघुम्ने"</string>
@@ -264,7 +280,7 @@
     <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"बन्द गर्नुहोस्"</string>
     <string name="quick_settings_connected" msgid="3873605509184830379">"जोडिएको"</string>
     <string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"यन्त्र जडान भयो, ब्याट्रीको चार्ज स्तर <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
-    <string name="quick_settings_connecting" msgid="2381969772953268809">"जडान हुँदै..."</string>
+    <string name="quick_settings_connecting" msgid="2381969772953268809">"कनेक्ट गरिँदै छ..."</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"अनुहार प्रयोग गरी अनलक गरियो"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"अनुहार पहिचान गरियो"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"फेरि प्रयास गर्न माथितिर स्वाइप गर्नुहोस्"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"फेस अनलक फेरि प्रयोग गरी हेर्न माथितिर स्वाइप गर्नुहोस्"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC प्रयोग गर्न स्क्रिन अनलक गर्नुहोस्"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"यो डिभाइस तपाईंको सङ्गठनको स्वामित्वमा छ"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"यो डिभाइस <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> को स्वामित्वमा छ"</string>
@@ -382,25 +399,34 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"प्रयोगकर्ता हटाउन चाहनुहुन्छ?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"यस प्रयोगकर्ताको सबै एपहरू तथा डेटा हटाइने छ।"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"हटाउनुहोस्"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ले तपाईंको स्क्रिनमा देख्न सकिने सबै जानकारी अथवा रेकर्ड वा cast गर्दा तपाईंको यन्त्रबाट प्ले गरिएका कुरामाथि पहुँच राख्न सक्ने छ। यसअन्तर्गत पासवर्ड, भुक्तानीका विवरण, फोटो, सन्देश र तपाईंले प्ले गर्ने अडियो जस्ता जानकारी समावेश हुन्छन्।"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"यो कार्य गर्ने सेवाले तपाईंको स्क्रिनमा देख्न सकिने सबै जानकारी अथवा रेकर्ड वा कास्ट गर्दा तपाईंको डिभाइसबाट प्ले गरिएका कुरा हेर्न तथा प्रयोग गर्न सक्छ। यसले हेर्न तथा प्रयोग गर्न सक्ने कुरामा पासवर्ड, भुक्तानीका विवरण, फोटो, सन्देश र तपाईंले प्ले गर्ने अडियो कुराहरू समावेश हुन सक्छन्।"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"रेकर्ड गर्न वा cast गर्न थाल्ने हो?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> मार्फत रेकर्ड गर्न वा cast गर्न थाल्ने हो?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> लाई सेयर गर्न वा रेकर्ड गर्न दिने हो?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"सबै स्क्रिन"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"एकल एप"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"तपाईंले सेयर गर्दा, रेकर्ड गर्दा वा कास्ट गर्दा <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ले तपाईंको स्क्रिनमा देखिने वा डिभाइसमा प्ले गरिएका सबै कुरा खिच्न सक्छ। त्यसैले सेयर, रेकर्ड वा कास्ट गर्दा  पासवर्ड, भुक्तानीको विवरण, म्यासेज वा अन्य संवेदनशील जानकारी सुरक्षित राख्नुहोला।"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"तपाईंले सेयर गर्दा, रेकर्ड गर्दा वा कास्ट गर्दा <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ले तपाईंको स्क्रिनमा देखिने वा डिभाइसमा प्ले गरिएका सबै कुरा खिच्न सक्छ। त्यसैले पासवर्ड, भुक्तानीको विवरण, म्यासेज वा अन्य संवेदनशील जानकारी सुरक्षित राख्नुहोला।"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"जारी राख्नुहोस्"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"सेयर वा रेकर्ड गर्नका लागि एप चयन गर्नुहोस्"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"यो एपलाई सेयर गर्न वा रेकर्ड गर्न दिने हो?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"यो एपले तपाईंले सेयर गर्दा, रेकर्ड गर्दा वा कास्ट गर्दा तपाईंको स्क्रिनमा देखिने वा डिभाइसमा प्ले गरिएका सबै कुरा खिच्न सक्छ। त्यसैले रेकर्ड गर्दा पासवर्ड, भुक्तानीको विवरण, म्यासेज वा अन्य संवेदनशील जानकारी सुरक्षित राख्नुहोला।"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"तपाईंले सेयर गर्दा, रेकर्ड गर्दा वा कास्ट गर्दा यो एपले तपाईंको स्क्रिनमा देखिने वा डिभाइसमा प्ले गरिएका सबै कुरा खिच्न सक्छ। त्यसैले पासवर्ड, भुक्तानीको विवरण, म्यासेज वा अन्य संवेदनशील जानकारी सुरक्षित राख्नुहोला।"</string>
-    <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"तपाईंका सूचना प्रविधि व्यवस्थापकले ब्लक गर्नुभएको छ"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ले रेकर्ड वा कास्ट गर्दै गर्दा तपाईंको स्क्रिनमा देखिने सबै जानकारी अथवा तपाईंको डिभाइसबाट प्ले गरिने सबै सामग्री हेर्न तथा प्रयोग गर्न सक्छ। यसअन्तर्गत पासवर्ड, भुक्तानीसम्बन्धी विवरण, फोटो, म्यासेज र तपाईंले प्ले गर्ने अडियो जस्ता कुराहरू समावेश हुन्छन्।"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"रेकर्ड वा कास्ट गर्न थाल्ने हो?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"यो फङ्सन प्रदान गर्ने सेवाले रेकर्ड वा कास्ट गर्दै गर्दा तपाईंको स्क्रिनमा देखिने सबै जानकारी अथवा तपाईंको डिभाइसबाट प्ले गरिने सबै सामग्री हेर्न तथा प्रयोग गर्न सक्छ। यसअन्तर्गत पासवर्ड, भुक्तानीसम्बन्धी विवरण, फोटो, म्यासेज र तपाईंले प्ले गर्ने अडियो जस्ता कुराहरू समावेश हुन्छन्।"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"पूरा स्क्रिन"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"एकल एप"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"कुनै एप सेयर वा रेकर्ड गर्नुहोस्"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> मार्फत रेकर्ड गर्न वा कास्ट गर्न थाल्ने हो?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"तपाईंले सेयर गर्दा, रेकर्ड गर्दा वा कास्ट गर्दा <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ले तपाईंको स्क्रिनमा देखिने वा डिभाइसमा प्ले गरिने सबै कुरा हेर्न तथा प्रयोग गर्न सक्छ। त्यसैले पासवर्ड, भुक्तानीसम्बन्धी विवरण, म्यासेज, फोटो र अडियो तथा भिडियो जस्ता कुरा हेर्दा वा प्ले गर्दा सावधानी अपनाउनुहोला।"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"तपाईंले कुनै एप सेयर गर्दा, रेकर्ड गर्दा वा कास्ट गर्दा <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ले उक्त एपमा देखाइने वा प्ले गरिने सबै कुरा हेर्न तथा प्रयोग गर्न सक्छ। त्यसैले पासवर्ड, भुक्तानीसम्बन्धी विवरण, म्यासेज, फोटो र अडियो तथा भिडियो जस्ता कुरा हेर्दा वा प्ले गर्दा सावधानी अपनाउनुहोला।"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"सुरु गर्नुहोस्"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"कास्ट गर्न थाल्ने हो?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"तपाईंले कास्ट गर्दा Android ले तपाईंको स्क्रिनमा देखिने वा डिभाइसमा प्ले गरिने सबै कुरा हेर्न तथा प्रयोग गर्न सक्छ। त्यसैले पासवर्ड, भुक्तानीसम्बन्धी विवरण, म्यासेज, फोटो र अडियो तथा भिडियो जस्ता कुरा हेर्दा वा प्ले गर्दा सावधानी अपनाउनुहोला।"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"तपाईंले कुनै एप कास्ट गर्दा Android ले उक्त एपमा देखाइने वा प्ले गरिने सबै कुरा हेर्न तथा प्रयोग गर्न सक्छ। त्यसैले पासवर्ड, भुक्तानीसम्बन्धी विवरण, म्यासेज, फोटो र अडियो तथा भिडियो जस्ता कुरा हेर्दा वा प्ले गर्दा सावधानी अपनाउनुहोला।"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"कास्ट गर्न थाल्नुहोस्"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"सेयर गर्न थाल्ने हो?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"तपाईंले सेयर गर्दा, रेकर्ड गर्दा वा कास्ट गर्दा Android ले तपाईंको स्क्रिनमा देखिने वा डिभाइसमा प्ले गरिने सबै कुरा हेर्न तथा प्रयोग गर्न सक्छ। त्यसैले पासवर्ड, भुक्तानीसम्बन्धी विवरण, म्यासेज, फोटो र अडियो तथा भिडियो जस्ता कुरा हेर्दा वा प्ले गर्दा सावधानी अपनाउनुहोला।"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"तपाईंले कुनै एप सेयर गर्दा, रेकर्ड गर्दा वा कास्ट गर्दा Android ले उक्त एपमा देखाइने वा प्ले गरिने सबै कुरा हेर्न तथा प्रयोग गर्न सक्छ। त्यसैले पासवर्ड, भुक्तानीसम्बन्धी विवरण, म्यासेज, फोटो र अडियो तथा भिडियो जस्ता कुरा हेर्दा वा प्ले गर्दा सावधानी अपनाउनुहोला।"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"सुरु गर्नुहोस्"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"तपाईंले एपहरू बदल्दा सेयर गर्ने प्रक्रिया पज हुन्छ"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"यसको साटो यो एप सेयर गर्नुहोस्"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"पछाडि जानुहोस्"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"एप बदल्नुहोस्"</string>
+    <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"तपाईंका IT एड्मिनले ब्लक गर्नुभएको छ"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"डिभाइसको नीतिका कारण स्क्रिन क्याप्चर गर्ने सुविधा अफ गरिएको छ"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"सबै हटाउनुहोस्"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"व्यवस्थित गर्नुहोस्"</string>
-    <string name="manage_notifications_history_text" msgid="57055985396576230">"इतिहास"</string>
+    <string name="manage_notifications_history_text" msgid="57055985396576230">"हिस्ट्री"</string>
     <string name="notification_section_header_incoming" msgid="850925217908095197">"नयाँ"</string>
     <string name="notification_section_header_gentle" msgid="6804099527336337197">"साइलेन्ट"</string>
     <string name="notification_section_header_alerting" msgid="5581175033680477651">"सूचनाहरू"</string>
@@ -444,9 +470,10 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"यस डिभाइसमा एउटा प्रमाणपत्र सम्बन्धी अख्तियार सुविधा स्थापना गरिएको छ। तपाईंको सुरक्षित नेटवर्कको ट्राफिकको अनुगमन वा परिमार्जन हुनसक्छ।"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"तपाईंका प्रशासकले तपाईंको डिभाइसमा ट्राफिकको अनुगमन गर्ने नेटवर्क लग गर्ने प्रक्रियालाई सक्रिय गर्नुभएको छ।"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"तपाईंका एड्मिनले \'नेटवर्क लगिङ\' सुविधा अन गर्नुभएको छ। यो सुविधाले तपाईंको कार्य प्रोफाइलको ट्राफिक अनुगमन गर्छ तर व्यक्तिगत प्रोफाइलको ट्राफिक भने अनुगमन गर्दैन।"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"यो डिभाइस <xliff:g id="VPN_APP">%1$s</xliff:g> मार्फत इन्टरनेटमा कनेक्ट गरिएको छ। तपाईंको सूचना प्रविधि व्यवस्थापक तपाईंको इमेल र ब्राउजिङ डेटासहित नेटवर्कसम्बन्धी क्रियाकलाप हेर्न सक्छन्।"</string>
-    <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"तपाईंको डिभाइस <xliff:g id="VPN_APP_0">%1$s</xliff:g> र <xliff:g id="VPN_APP_1">%2$s</xliff:g> मार्फत इन्टरनेटमा कनेक्ट गरिएको छ। तपाईंको सूचना प्रविधि व्यवस्थापक तपाईंको इमेल र ब्राउजिङ डेटासहित नेटवर्कसम्बन्धी क्रियाकलाप हेर्न सक्छन्।"</string>
-    <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"तपाईंका कामसम्बन्धी एपहरू <xliff:g id="VPN_APP">%1$s</xliff:g> मार्फत इन्टरनेटमा कनेक्ट गरिएका छन्। तपाईंको सूचना प्रविधि व्यवस्थापक र VPN प्रदायक कामसम्बन्धी एपहरूमा भएका तपाईंका इमेल र ब्राउजिङ डेटासहित नेटवर्कसम्बन्धी क्रियाकलाप हेर्न सक्छन्।"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"यो डिभाइस <xliff:g id="VPN_APP">%1$s</xliff:g> मार्फत इन्टरनेटमा कनेक्ट गरिएको छ। तपाईंको VPN प्रदायकले इमेल र ब्राउजिङ डेटालगायतका नेटवर्कसम्बन्धी गतिविधि हेर्न सक्छ।"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"यो डिभाइस <xliff:g id="VPN_APP">%1$s</xliff:g> मार्फत इन्टरनेटमा कनेक्ट गरिएको छ। तपाईंका IT एड्मिन इमेल र ब्राउजिङ डेटालगायतका नेटवर्कसम्बन्धी गतिविधि हेर्न सक्नुहुन्छ।"</string>
+    <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"तपाईंको डिभाइस <xliff:g id="VPN_APP_0">%1$s</xliff:g> र <xliff:g id="VPN_APP_1">%2$s</xliff:g> मार्फत इन्टरनेटमा कनेक्ट गरिएको छ। तपाईंका IT एड्मिन तपाईंका इमेल र ब्राउजिङ डेटासहित नेटवर्कसम्बन्धी क्रियाकलाप हेर्न सक्छन्।"</string>
+    <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"तपाईंका कामसम्बन्धी एपहरू <xliff:g id="VPN_APP">%1$s</xliff:g> मार्फत इन्टरनेटमा कनेक्ट गरिएका छन्। तपाईंको IT एड्मिन र VPN प्रदायक कामसम्बन्धी एपहरूमा भएका तपाईंका इमेल र ब्राउजिङ डेटासहित नेटवर्कसम्बन्धी क्रियाकलाप हेर्न सक्छन्।"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"तपाईंका व्यक्तिगत एपहरू <xliff:g id="VPN_APP">%1$s</xliff:g> मार्फत इन्टरनेटमा कनेक्ट गरिएका छन्। तपाईंको VPN प्रदायक तपाईंको इमेल र ब्राउजिङ डेटासहित नेटवर्कसम्बन्धी क्रियाकलाप हेर्न सक्छन्।"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="8292589617720435430">" "</string>
     <string name="monitoring_description_vpn_settings" msgid="5264167033247632071">"VPN सम्बन्धी सेटिङहरू खोल्नुहोस्"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"असक्षम पार्नुहोस्"</string>
     <string name="sound_settings" msgid="8874581353127418308">"साउन्ड तथा भाइब्रेसन"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"सेटिङ"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"तपाईं आरामदायी तरिकाले अडियो सुन्न सक्नुहोस् भन्नाका लागि भोल्युम घटाइएको छ"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"सिफारिस गरिएको समयभन्दा बढी समयदेखि भोल्युमको स्तर उच्च छ"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"भोल्युम घटाएर सुरक्षित स्तरमा पुर्‍याइएको छ"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"हेडफोनको भोल्युम सिफारिस गरिएको समयभन्दा लामो समयदेखि उच्च छ"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"यो हप्ता हेडफोनको भोल्युमले सुरक्षित स्तरको सीमा नाघेको छ"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"सुनिराख्नुहोस्"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"भोल्युम घटाउनुहोस्"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"एप पिन गरिएको छ"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"तपाईंले अनपिन नगरेसम्म यसले त्यसलाई दृश्यमा कायम राख्छ। अनपिन गर्न पछाडि र परिदृश्य बटनलाई टच एण्ड होल्ड गर्नुहोस्।"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"तपाईंले अनपिन नगरेसम्म यसले त्यसलाई दृश्यमा कायम राख्छ। अनपिन गर्न पछाडि र गृह नामक बटनहरूलाई टच एण्ड होल्ड गर्नुहोस्।"</string>
@@ -655,7 +685,7 @@
     <string name="keyboard_shortcut_group_applications" msgid="7386239431100651266">"एपहरू"</string>
     <string name="keyboard_shortcut_group_applications_assist" msgid="771606231466098742">"सहायता"</string>
     <string name="keyboard_shortcut_group_applications_browser" msgid="7328131901589876868">"ब्राउजर (डिफल्ट ब्राउजर: Chrome)"</string>
-    <string name="keyboard_shortcut_group_applications_contacts" msgid="2807268086386201060">"सम्पर्कहरू"</string>
+    <string name="keyboard_shortcut_group_applications_contacts" msgid="2807268086386201060">"कन्ट्याक्टहरू"</string>
     <string name="keyboard_shortcut_group_applications_email" msgid="7480359963463803511">"इमेल (डिफल्ट एप: Gmail)"</string>
     <string name="keyboard_shortcut_group_applications_sms" msgid="6912633831752843566">"SMS"</string>
     <string name="keyboard_shortcut_group_applications_music" msgid="9032078456666204025">"सङ्गीत"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"पावर मेनु"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g> मध्ये पृष्ठ <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"लक स्क्रिन"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"फोन अति नै तातिएकाले चिसिन बन्द भयो"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"तपाईंको फोन अहिले सामान्य रूपमा चलिरहेको छ।\nथप जानकारीका लागि ट्याप गर्नुहोस्"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"तपाईंको फोन अति नै तातिएकाले चिसिन बन्द भयो। तपाईंको फोन अब सामान्य ढंगले चल्दै छ।\n\nतपाईंले निम्न कुराहरू गर्नुभयो भने तपाईंको फोन अत्यन्त तातो हुनसक्छ:\n	• धेरै संसाधन खपत गर्ने एपहरूको प्रयोग (जस्तै गेमिङ, भिडियो वा नेभिगेसन एपहरू)\n	• ठूला फाइलहरूको डाउनलोड वा अपलोड\n	• उच्च तापक्रममा फोनको प्रयोग"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"डिभाइसको हेरचाह गर्ने तरिका हेर्नुहोस्"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"फोन तातो भइरहेको छ"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"फोन नचिस्सिँदासम्म केही सुविधाहरू उपलब्ध हुने छैनन्।\nथप जानकारीका लागि ट्याप गर्नुहोस्"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"तपाईंको फोन स्वतः चिसो हुने प्रयास गर्ने छ। तपाईं अझै पनि आफ्नो फोनको प्रयोग गर्न सक्नुहुन्छ तर त्यो अझ ढिलो चल्न सक्छ।\n\nचिसो भएपछि तपाईंको फोन सामान्य गतिमा चल्नेछ।"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"डिभाइसको हेरचाह गर्ने तरिका हेर्नुहोस्"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"डिभाइस बिजुलीको स्रोतबाट निकाल्नुहोस्"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"तपाईंको डिभाइसको चार्जिङ पोर्टतिरको भाग तातीरहेको छ। तपाईंको डिभाइस चार्जर वा USB एक्सेसरीमा जोडिएको गरिएको छ भने त्यसलाई निकाल्नुहोस्। यसका साथै सो केबल तातो हुन सक्ने भएकाले ख्याल गर्नुहोला।"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"पूरै स्क्रिन जुम इन गर्नुहोस्"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"स्क्रिनको केही भाग म्याग्निफाइ गर्नुहोस्"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"जुम इनसम्बन्धी सेटिङ खोल्नुहोस्"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"जुम इन गर्ने सुविधाको सेटिङ बन्द गर्नुहोस्"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"आकार बदल्न कुनाबाट ड्र्याग गर्नुहोस्"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"डायगोनल तरिकाले स्क्रोल गर्ने अनुमति दिनुहोस्"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"आकार बदल्नुहोस्"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"मन पर्ने कुराहरूको सूचीमा नराख्नुहोस्"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>ले निर्देश गर्ने ठाउँमा सार्नुहोस्"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"नियन्त्रणहरू"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"द्रुत रूपमा एक्सेस गर्न डिभाइस नियन्त्रण गर्ने विजेटहरू छनौट गर्नुहोस्"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"कन्ट्रोललाई होल्ड एण्ड ड्र्याग गरी कन्ट्रोलको क्रम मिलाउनुहोस्"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"सबै कन्ट्रोल हटाइए"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"परिवर्तनहरू सुरक्षित गरिएका छैनन्"</string>
@@ -911,10 +935,11 @@
     <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN मा अक्षर वा चिन्हहरू समाविष्ट हुन्छन्"</string>
     <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g> पुष्टि गर्नुहोस्"</string>
     <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN मिलेन"</string>
-    <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="controls_pin_instructions" msgid="6363309783822475238">"PIN हाल्नुहोस्"</string>
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"अर्को PIN प्रयोग गरी हेर्नु…"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> का हकमा गरिएको परिवर्तन पुष्टि गर्नुहोस्"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"थप हेर्न स्वाइप गर्नुहोस्"</string>
+    <string name="retry_face" msgid="416380073082560186">"फेरि अनुहारमार्फत प्रमाणीकरण गरी हेर्नुहोस्"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"सिफारिसहरू लोड गर्दै"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"मिडिया"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> का हकमा यो मिडिया कन्ट्रोल लुकाउने हो?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"सेटिङ"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> को <xliff:g id="SONG_NAME">%1$s</xliff:g> बोलको गीत <xliff:g id="APP_LABEL">%3$s</xliff:g> मा बज्दै छ"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g> मध्ये <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> चलिरहेको छ"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"प्ले गर्नुहोस्"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"पज गर्नुहोस्"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"अघिल्लो ट्रयाक"</string>
@@ -933,12 +959,12 @@
     <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"<xliff:g id="APP_LABEL">%1$s</xliff:g> खोल्नुहोस्"</string>
     <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> को <xliff:g id="SONG_NAME">%1$s</xliff:g> बोलको गीत <xliff:g id="APP_LABEL">%3$s</xliff:g> मा बजाउनुहोस्"</string>
     <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="SONG_NAME">%1$s</xliff:g> बोलको गीत <xliff:g id="APP_LABEL">%2$s</xliff:g> मा बजाउनुहोस्"</string>
-    <string name="controls_media_smartspace_rec_header" msgid="5053461390357112834">"तपाईंको लागि सिफारिस गरिएका"</string>
+    <string name="controls_media_smartspace_rec_header" msgid="5053461390357112834">"तपाईंका लागि सिफारिस गरिएका"</string>
     <string name="media_transfer_undo" msgid="1895606387620728736">"अन्डू गर्नुहोस्"</string>
     <string name="media_move_closer_to_start_cast" msgid="2673104707465013176">"<xliff:g id="DEVICENAME">%1$s</xliff:g> मा प्ले गर्न आफ्नो डिभाइस नजिकै लैजानुहोस्"</string>
     <string name="media_move_closer_to_end_cast" msgid="7302555909119374738">"यो डिभाइसमा प्ले गर्न <xliff:g id="DEVICENAME">%1$s</xliff:g> को अझ नजिक जानुहोस्"</string>
     <string name="media_transfer_playing_different_device" msgid="7186806382609785610">"<xliff:g id="DEVICENAME">%1$s</xliff:g> मा प्ले गरिँदै छ"</string>
-    <string name="media_transfer_failed" msgid="7955354964610603723">"केही चिज गडबड भयो। फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="media_transfer_failed" msgid="7955354964610603723">"कुनै समस्या आयो। फेरि प्रयास गर्नुहोस्।"</string>
     <string name="media_transfer_loading" msgid="5544017127027152422">"लोड हुँदै छ"</string>
     <string name="media_ttt_default_device_type" msgid="4457646436153370169">"ट्याब्लेट"</string>
     <string name="media_transfer_receiver_content_description_unknown_app" msgid="7381771464846263667">"तपाईंको मिडिया कास्ट गरिँदै छ"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"स्पिकर तथा डिस्प्लेहरू"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"सिफारिस गरिएका डिभाइसहरू"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"मिडिया अर्को डिभाइसमा सार्नका लागि तपाईंले सेयर गरेको सत्र अन्त्य गर्नुहोस्"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"रोक्नुहोस्"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"प्रसारण गर्ने सुविधाले कसरी काम गर्छ"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"प्रसारण"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"कम्प्याटिबल ब्लुटुथ डिभाइस भएका नजिकैका मान्छेहरू तपाईंले प्रसारण गरिरहनुभएको मिडिया सुन्न सक्छन्"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"सेभ गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"सेभ गर्न सकिएन।"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"कम्तीमा ४ वटा वर्ण प्रयोग गर्नुहोस्"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"१६ वटाभन्दा कम वर्ण प्रयोग गर्नुहोस्"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g> वटा भन्दा कम वर्ण प्रयोग गर्नुहोस्"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"बिल्ड नम्बर"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"बिल्ड नम्बर कपी गरी क्लिपबोर्डमा सारियो।"</string>
     <string name="basic_status" msgid="2315371112182658176">"वार्तालाप खोल्नुहोस्"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"डिभाइसको ब्याट्रीको मिटर रिडिङ क्रममा समस्या भयो"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"थप जानकारी प्राप्त गर्न ट्याप गर्नुहोस्"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"अलार्म राखिएको छैन"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"स्क्रिन लक हाल्नुहोस्"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"फिंगरप्रिन्ट सेन्सर"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"प्रमाणित गर्नुहोस्"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"डिभाइस हाल्नुहोस्"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"सहायकले सुनिरहेको छ"</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="note_task_button_label" msgid="8718616095800343136">"टिपोट गर्ने कार्य"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"नोट लेख्ने कार्य"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"नोट लेख्ने कार्य, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"थप जान्नुहोस्"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"<xliff:g id="URL">%s</xliff:g> मा गई थप जान्नुहोस्"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> खोल्नुहोस्"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• एप सेटअप गरिएको छ"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Wallet मा कम्तीमा एउटा कार्ड हालिएको छ"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• क्यामेरा एप इन्स्टल गरिएको छ"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• एप सेटअप गरिएको छ"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• कम्तीमा एउटा डिभाइस उपलब्ध छ"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"सर्टकटका रूपमा Wallet एप हाल्न उक्त एप इन्स्टल गरिएको छ भन्ने कुरा सुनिश्चित गर्नुहोस्"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"सर्टकटका रूपमा Wallet एप हाल्न कम्तीमा एउटा कार्ड हालिएको छ भन्ने कुरा सुनिश्चित गर्नुहोस्"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"सर्टकटका रूपमा QR कोड स्क्यानर हाल्न क्यामेरा एप इन्स्टल गरिएको छ भन्ने कुरा सुनिश्चित गर्नुहोस्"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home एपलाई सर्टकटका रूपमा हाल्न उक्त एप इन्स्टल गरिएको छ भन्ने कुरा सुनिश्चित गर्नुहोस्"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• कम्तीमा एउटा डिभाइस उपलब्ध छ"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"नोट बनाउनेसम्बन्धी सर्टकट प्रयोग गर्न नोट बनाउने डिफल्ट एप चयन गर्नुहोस्"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"एप चयन गर्नुहोस्"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"सर्टकट थिचिराख्नुहोस्"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"रद्द गर्नुहोस्"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"अहिले नै स्क्रिन बदल्नुहोस्"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"आफ्नो स्टाइलस चार्जरमा कनेक्ट गर्नुहोस्"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"स्टाइलसको ब्याट्री लो छ"</string>
     <string name="video_camera" msgid="7654002575156149298">"भिडियो क्यामेरा"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"यो प्रोफाइलबाट कल गर्न सकिँदैन"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"तपाईंको कामसम्बन्धी नीतिअनुसार कार्य प्रोफाइलबाट मात्र फोन कल गर्न सकिन्छ"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"व्यक्तिगत एपमार्फत कल गर्न मिल्दैन"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"तपाईंको सङ्गठनले तपाईंलाई कामसम्बन्धी एपहरूमार्फत मात्र कल गर्ने अनुमति दिएको छ"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"कार्य प्रोफाइल प्रयोग गर्नुहोस्"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"बन्द गर्नुहोस्"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"कामसम्बन्धी फोन एप इन्स्टल गर्नुहोस्"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"रद्द गर्नुहोस्"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"लक स्क्रिन कस्टमाइज गर्नुहोस्"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"लक स्क्रिन कस्टमाइज गर्न अनलक गर्नुहोस्"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi उपलब्ध छैन"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"क्यामेरा ब्लक गरिएको छ"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"क्यामेरा र माइक्रोफोन ब्लक गरिएको छ"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"माइक्रोफोन ब्लक गरिएको छ"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"प्राथमिकता मोड अन छ"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"सहायकले सुनिरहेको छ"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"सेटिङमा गई नोट बनाउने डिफल्ट एप तोक्नुहोस्"</string>
+    <string name="install_app" msgid="5066668100199613936">"एप इन्स्टल गर्नुहोस्"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"माइक्रोफोन तथा क्यामेरा"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"एपको हालसालैको प्रयोग"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"हालसालै एक्सेस गर्ने एप हेर्नुहोस्"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"पूरा भयो"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"एक्स्पान्ड गरियोस् र विकल्पहरू देखाइयोस्"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"कोल्याप्स गर्नुहोस्"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"यो एप बन्द गर्नुहोस्"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> बन्द गरिएको छ"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"सेवा व्यवस्थित गर्नुहोस्"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"अनुमतिहरू व्यवस्थित गर्नुहोस्"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"फोन कलमा प्रयोग भइरहेको छ"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"फोन कलमा हालसालै प्रयोग गरिएको"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> ले प्रयोग गरिरहेको छ"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"<xliff:g id="APP_NAME">%1$s</xliff:g> ले हालसालै प्रयोग गरेको"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ले प्रयोग गरिरहेको छ"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ले हालसालै प्रयोग गरेको"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ले प्रयोग गरिरहेको छ"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ले हालसालै प्रयोग गरेको"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ne/strings_tv.xml b/packages/SystemUI/res/values-ne/strings_tv.xml
deleted file mode 100644
index ffc315b..0000000
--- a/packages/SystemUI/res/values-ne/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN कनेक्ट गरिएको छ"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN डिस्कनेक्ट गरिएको छ"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> मार्फत"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"सूचनाहरू"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"कुनै पनि सूचना छैन"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"माइक्रोफोनले रेकर्ड गर्दै छ"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"क्यामेराले रेकर्ड गर्दै छ"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"क्यामेरा र माइक्रोफोनले रेकर्ड गर्दै छन्"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"माइक्रोफोनले रेकर्ड गर्न छाड्यो"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"क्यामेराले रेकर्ड गर्न छाड्यो"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"क्यामेरा र माइक्रोफोनले रेकर्ड गर्न छाडे"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"स्क्रिन रेकर्ड गर्न थालियो"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"स्क्रिन रेकर्ड गर्न छाडियो"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 9589804..1b657c9 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> heeft dit screenshot waargenomen."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> en andere geopende apps hebben dit screenshot waargenomen."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Toevoegen aan notitie"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Schermopname"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Schermopname"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Schermopname verwerken"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Doorlopende melding voor een schermopname-sessie"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Opname starten?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Tijdens de opname kan het Android-systeem gevoelige informatie opnemen die zichtbaar is op je scherm of wordt afgespeeld op je apparaat, waaronder wachtwoorden, betalingsgegevens, foto\'s, berichten en audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Volledig scherm opnemen"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Eén app opnemen"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Als je opneemt, heeft Android toegang tot alles dat zichtbaar is op je scherm of wordt afgespeeld op je apparaat. Wees daarom voorzichtig met wachtwoorden, betalingsgegevens, berichten en andere gevoelige informatie."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Als je een app opneemt, heeft Android toegang tot alles dat wordt getoond of afgespeeld in die app. Wees daarom voorzichtig met wachtwoorden, betalingsgegevens, berichten en andere gevoelige informatie."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Opname starten"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Opname starten?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Als je opneemt, heeft Android toegang tot alles dat zichtbaar is op je scherm of wordt afgespeeld op je apparaat. Wees daarom voorzichtig met bijvoorbeeld wachtwoorden, betalingsgegevens, berichten, foto\'s, en audio en video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Als je een app opneemt, heeft Android toegang tot alles dat wordt getoond of afgespeeld in die app. Wees daarom voorzichtig met bijvoorbeeld wachtwoorden, betalingsgegevens, berichten, foto\'s, en audio en video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Opname starten"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Audio opnemen"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Audio van apparaat"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Geluid van je apparaat, zoals muziek, gesprekken en ringtones"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Microfoon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Audio van apparaat en microfoon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Starten"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Starten"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Scherm opnemen"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Scherm en audio opnemen"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Tikken op het scherm tonen"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Delen"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Schermopname opgeslagen"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Tik om te bekijken"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Fout bij verwijderen van schermopname"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Fout bij opslaan van schermopname"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Fout bij starten van schermopname"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Volledig scherm wordt getoond"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Swipe omlaag vanaf de bovenkant van het scherm om af te sluiten."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"OK"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Terug"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Startscherm"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Gezicht geverifieerd"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Bevestigd"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tik op Bevestigen om te voltooien"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Ontgrendeld via gezicht. Druk op het ontgrendelicoon."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Ontgrendeld via gezicht"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Ontgrendeld via gezicht. Druk om door te gaan."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Gezicht herkend. Druk om door te gaan."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Gezicht herkend. Druk op het ontgrendelicoon."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Geverifieerd"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Verificatie annuleren"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Pincode gebruiken"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Patroon gebruiken"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Wachtwoord gebruiken"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Als je bij de volgende poging een onjuist patroon opgeeft, worden je werkprofiel en de bijbehorende gegevens verwijderd."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Als je bij de volgende poging een onjuiste pincode opgeeft, worden je werkprofiel en de bijbehorende gegevens verwijderd."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Als je bij de volgende poging een onjuist wachtwoord opgeeft, worden je werkprofiel en de bijbehorende gegevens verwijderd."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Instellen"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Niet nu"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Dit is vereist om de beveiliging en prestaties te verbeteren"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Ontgrendelen met vingerafdruk weer instellen"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Ontgrendelen met vingerafdruk"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Ontgrendelen met vingerafdruk instellen"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Als je Ontgrendelen met vingerafdruk weer wilt instellen, worden je huidige vingerafdrukfoto\'s en -modellen verwijderd.\n\nNadat ze zijn verwijderd, moet je Ontgrendelen met vingerafdruk opnieuw instellen om je vingerafdruk te gebruiken voor telefoonontgrendeling of om te laten verifiëren dat jij het bent."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Als je Ontgrendelen met vingerafdruk weer wilt instellen, worden je huidige vingerafdrukfoto\'s en -model verwijderd.\n\nNadat ze zijn verwijderd, moet je Ontgrendelen met vingerafdruk opnieuw instellen om je vingerafdruk te gebruiken voor telefoonontgrendeling of om te laten verifiëren dat jij het bent."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Kan Ontgrendelen met vingerafdruk niet instellen. Ga naar Instellingen om het opnieuw te proberen."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Ontgrendelen via gezicht weer instellen"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Ontgrendelen via gezichtsherkenning"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Ontgrendelen via gezichtsherkenning instellen"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Als je Ontgrendelen via gezichtsherkenning weer wilt instellen, wordt je huidige gezichtsmodel verwijderd.\n\nJe moet deze functie opnieuw instellen om je gezicht te gebruiken voor telefoonontgrendeling."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Kan ontgrendelen via gezichtsherkenning niet instellen. Ga naar Instellingen om het opnieuw te proberen."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Raak de vingerafdruksensor aan"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Druk op het ontgrendelicoon om door te gaan"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Gezicht niet herkend. Gebruik je vingerafdruk."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Invoer"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Hoortoestellen"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hoortoestellen"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aanzetten…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatisch draaien"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Scherm automatisch draaien"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Ontgrendeld via gezicht"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Gezicht herkend"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Swipe omhoog om het opnieuw te proberen"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Swipe omhoog om Ontgrendelen via gezichtsherkenning opnieuw te proberen"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Ontgrendel het apparaat om NFC te gebruiken"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Dit apparaat is eigendom van je organisatie"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Dit apparaat is eigendom van <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> krijgt toegang tot alle informatie die zichtbaar is op je scherm of die wordt afgespeeld vanaf je apparaat tijdens het opnemen of casten. Dit omvat informatie zoals wachtwoorden, betalingsgegevens, foto\'s, berichten en audio die je afspeelt."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"De service die deze functie levert, krijgt tijdens het opnemen of casten toegang tot alle informatie die op je scherm te zien is of op je apparaat wordt afgespeeld. Dit omvat informatie zoals wachtwoorden, betalingsgegevens, foto\'s, berichten en audio die je afspeelt."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Beginnen met opnemen of casten?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Beginnen met opnemen of casten met <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Toestaan dat <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> deelt of opneemt?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Volledig scherm"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Eén app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Als je deelt, opneemt of cast, heeft <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> toegang tot alles dat zichtbaar is op je scherm of wordt afgespeeld op je apparaat. Wees daarom voorzichtig met wachtwoorden, betalingsgegevens, berichten en andere gevoelige informatie."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Als je deelt, opneemt of cast, heeft <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> toegang tot alles dat wordt getoond of afgespeeld in die app. Wees daarom voorzichtig met wachtwoorden, betalingsgegevens, berichten en andere gevoelige informatie."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Doorgaan"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"App delen of opnemen"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Deze app toestaan om te delen of op te nemen?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Als je deelt, opneemt of cast, heeft deze app toegang tot alles dat zichtbaar is op je scherm of wordt afgespeeld op je apparaat. Wees daarom voorzichtig met wachtwoorden, betalingsgegevens, berichten en andere gevoelige informatie."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Als je deelt, opneemt of cast, heeft deze app toegang tot alles dat wordt getoond of afgespeeld in die app. Wees daarom voorzichtig met wachtwoorden, betalingsgegevens, berichten en andere gevoelige informatie."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> krijgt toegang tot alle informatie die zichtbaar is op je scherm of die wordt afgespeeld vanaf je apparaat tijdens het opnemen of casten. Dit omvat informatie zoals wachtwoorden, betalingsgegevens, foto\'s, berichten en audio die je afspeelt."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Opnemen of casten starten?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"De service die deze functie levert, krijgt tijdens het opnemen of casten toegang tot alle informatie die zichtbaar is op je scherm of wordt afgespeeld op je apparaat. Dit omvat informatie zoals wachtwoorden, betalingsgegevens, foto\'s, berichten en audio die je afspeelt."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Volledig scherm"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Eén app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"App delen of opnemen"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Opnemen of casten starten met <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Als je deelt, opneemt of cast, heeft <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> toegang tot alles dat zichtbaar is op je scherm of wordt afgespeeld op je apparaat. Wees daarom voorzichtig met bijvoorbeeld wachtwoorden, betalingsgegevens, berichten, foto\'s, en audio en video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Als je deelt, opneemt of cast, heeft <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> toegang tot alles dat wordt getoond of afgespeeld in die app. Wees daarom voorzichtig met bijvoorbeeld wachtwoorden, betalingsgegevens, berichten, foto\'s, en audio en video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Starten"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Casten starten?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Als je cast, heeft Android toegang tot alles dat zichtbaar is op je scherm of wordt afgespeeld op je apparaat. Wees daarom voorzichtig met bijvoorbeeld wachtwoorden, betalingsgegevens, berichten, foto\'s, en audio en video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Als je een app cast, heeft Android toegang tot alles dat zichtbaar is op je scherm of wordt afgespeeld op je apparaat. Wees daarom voorzichtig met bijvoorbeeld wachtwoorden, betalingsgegevens, berichten, foto\'s, en audio en video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Casten starten"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Delen starten?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Als je deelt, opneemt of cast, heeft Android toegang tot alles dat zichtbaar is op je scherm of wordt afgespeeld op je apparaat. Wees daarom voorzichtig met bijvoorbeeld wachtwoorden, betalingsgegevens, berichten, foto\'s, en audio en video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Als je deelt, opneemt of cast, heeft Android toegang tot alles dat wordt getoond of afgespeeld in die app. Wees daarom voorzichtig met bijvoorbeeld wachtwoorden, betalingsgegevens, berichten, foto\'s, en audio en video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Starten"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Delen wordt onderbroken als je schakelt tussen apps"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"In plaats daarvan deze app delen"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Terugschakelen"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"App schakelen"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Geblokkeerd door je IT-beheerder"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Schermopname staat uit vanwege apparaatbeleid"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Alles wissen"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Er is een certificeringsinstantie geïnstalleerd op dit apparaat. Je beveiligde netwerkverkeer kan worden bijgehouden of aangepast."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Je beheerder heeft de netwerkregistratie aangezet, waarmee het verkeer op je apparaat wordt gecontroleerd."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Je beheerder heeft netwerkregistratie aangezet. Hiermee wordt verkeer in je werkprofiel bijgehouden, maar niet in je persoonlijke profiel."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Dit apparaat heeft verbinding met internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Je netwerkactiviteit, waaronder e-mails en browsegegevens, is zichtbaar voor je IT-beheerder."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Dit apparaat is verbonden met internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Je VPN-provider kan je netwerkactiviteit zien, zoals e-mails en browsegegevens."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Dit apparaat heeft verbinding met internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Je netwerkactiviteit, waaronder e-mails en browsegegevens, is zichtbaar voor je IT-beheerder."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Dit apparaat heeft verbinding met internet via <xliff:g id="VPN_APP_0">%1$s</xliff:g> en <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Je netwerkactiviteit, waaronder e-mails en browsegegevens, is zichtbaar voor je IT-beheerder."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Je werk-apps hebben verbinding met internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Je netwerkactiviteit in werk-apps, waaronder e-mails en browsegegevens, is zichtbaar voor je IT-beheerder en VPN-provider."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Je persoonlijke apps hebben verbinding met internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Je netwerkactiviteit, waaronder e-mails en browsegegevens, is zichtbaar voor je VPN-provider."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"uitzetten"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Geluid en trillen"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Instellingen"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Verlaagd naar veiliger volume"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Het volume is langer dan de aanbevolen tijd hoog geweest"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volume verlaagd naar een veiliger niveau"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Het hoofdtelefoonvolume is langer dan de aanbevolen tijd hoog geweest"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Het hoofdtelefoonvolume overschrijdt de veiligheidslimiet voor deze week"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Blijven luisteren"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Volume omlaag"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"App is vastgezet"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Het scherm blijft zichtbaar totdat je het losmaakt. Tik op Terug en Overzicht en houd deze vast om het scherm los te maken."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Het scherm blijft zichtbaar totdat je het losmaakt. Tik op Terug en Home en houd deze vast om het scherm los te maken."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Aan/uit-menu"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Pagina <xliff:g id="ID_1">%1$d</xliff:g> van <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Vergrendelscherm"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telefoon uitgezet wegens hitte"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Je telefoon functioneert nu weer zoals gebruikelijk.\nTik voor meer informatie"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Je telefoon was te warm en is uitgezet om af te koelen. Je telefoon presteert nu weer zoals gebruikelijk.\n\nJe telefoon kan warm worden als je:\n	• bronintensieve apps gebruikt (zoals game-, video-, of navigatie-apps),\n	• grote bestanden up- of downloadt,\n	• je telefoon gebruikt bij hoge temperaturen."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Onderhoudsstappen bekijken"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"De telefoon wordt warm"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Bepaalde functies zijn beperkt terwijl de telefoon afkoelt.\nTik voor meer informatie"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Je telefoon probeert automatisch af te koelen. Je kunt je telefoon nog steeds gebruiken, maar deze kan langzamer werken.\n\nZodra de telefoon is afgekoeld, werkt deze weer normaal."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Onderhoudsstappen bekijken"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Je apparaat loskoppelen"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Je apparaat wordt warm in de buurt van de oplaadpoort. Als het apparaat is aangesloten op een oplader of USB-poort, koppel je het los. Wees voorzichtig: de kabel kan warm zijn."</string>
@@ -793,7 +817,7 @@
     <string name="mobile_data_disable_message" msgid="8604966027899770415">"Je hebt dan geen toegang meer tot data of internet via <xliff:g id="CARRIER">%s</xliff:g>. Internet is alleen nog beschikbaar via wifi."</string>
     <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"je provider"</string>
     <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"Terugschakelen naar <xliff:g id="CARRIER">%s</xliff:g>?"</string>
-    <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Mobiele data worden niet automatisch overgezet op basis van beschikbaarheid"</string>
+    <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"Mobiele data wordt niet automatisch omgeschakeld op basis van beschikbaarheid"</string>
     <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"Nee, bedankt"</string>
     <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"Ja, overschakelen"</string>
     <string name="touch_filtered_warning" msgid="8119511393338714836">"Aangezien een app een rechtenverzoek afdekt, kan Instellingen je reactie niet verifiëren."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Volledig scherm vergroten"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Deel van het scherm vergroten"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Instellingen voor vergroting openen"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Instellingen voor vergroting sluiten"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Sleep een hoek om het formaat te wijzigen"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Diagonaal scrollen toestaan"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Formaat aanpassen"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"als favoriet verwijderen"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Verplaatsen naar positie <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Bedieningselementen"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Kies apparaatbediening voor snelle toegang"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Houd vast en sleep om de bedieningselementen opnieuw in te delen"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Alle bedieningselementen verwijderd"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Wijzigingen zijn niet opgeslagen"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Andere pincode proberen"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Bevestig de wijziging voor <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Swipe om meer te zien"</string>
+    <string name="retry_face" msgid="416380073082560186">"Gezichtsherkenning opnieuw proberen"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Aanbevelingen laden"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Deze mediabediening verbergen voor <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Instellingen"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> van <xliff:g id="ARTIST_NAME">%2$s</xliff:g> wordt afgespeeld via <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> van <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> is actief"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Afspelen"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pauzeren"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Vorige track"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Speakers en schermen"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Voorgestelde apparaten"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Stop je gedeelde sessie om media naar een ander apparaat te verplaatsen"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Stoppen"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Hoe uitzenden werkt"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Uitzending"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Mensen bij jou in de buurt met geschikte bluetooth-apparaten kunnen luisteren naar de media die je uitzendt"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Kan niet opslaan. Probeer het opnieuw."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Kan niet opslaan."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Gebruik minstens 4 tekens"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Gebruik minder dan 16 tekens"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Gebruik minder dan <xliff:g id="LENGTH">%1$d</xliff:g> tekens"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Buildnummer"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Buildnummer naar klembord gekopieerd."</string>
     <string name="basic_status" msgid="2315371112182658176">"Gesprek openen"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Probleem bij het lezen van je batterijmeter"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Tik hier voor meer informatie"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Geen wekker gezet"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"schermvergrendeling invoeren"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Vingerafdruksensor"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"verifiëren"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"apparaat opgeven"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"De Assistent luistert"</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="note_task_button_label" msgid="8718616095800343136">"Aantekeningen maken"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Aantekeningen maken"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Aantekeningen maken, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Meer informatie"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Ga voor meer informatie naar <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> openen"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• De app is ingesteld"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Er is ten minste één kaart aan Wallet toegevoegd"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Er moet een camera-app zijn geïnstalleerd"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• De app is ingesteld"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Er is ten minste één apparaat beschikbaar"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Als je de Wallet-app wilt toevoegen als sneltoets, zorg je dat de app is geïnstalleerd"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Als je de Wallet-app wilt toevoegen als sneltoets, zorg je dat er minstens één kaart is toegevoegd"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Als je de QR-codescanner wilt toevoegen als sneltoets, zorg je dat er een camera-app is geïnstalleerd"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Als je de Home-app wilt toevoegen als sneltoets, zorg je dat de app is geïnstalleerd"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Er is minstens één apparaat beschikbaar"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Selecteer een standaard notitie-app om de sneltoets voor notities maken te gebruiken"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"App selecteren"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Houd de sneltoets ingedrukt"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Annuleren"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Wissel nu van scherm"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Verbind je stylus met een oplader"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Batterij van stylus bijna leeg"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videocamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Je kunt niet bellen vanuit dit profiel"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Op basis van je werkbeleid kun je alleen bellen vanuit het werkprofiel"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Kan niet bellen vanuit een app voor persoonlijke doeleinden"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Je organisatie staat je alleen toe om te bellen vanuit werk-apps"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Overschakelen naar werkprofiel"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Sluiten"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Installeer een telefoon-app voor werk"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Annuleren"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Vergrendelscherm aanpassen"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Ontgrendelen om het vergrendelscherm aan te passen"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wifi niet beschikbaar"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Camera geblokkeerd"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Camera en microfoon geblokkeerd"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microfoon geblokkeerd"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioriteitsmodus aan"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistent-aandacht aan"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Standaard notitie-app instellen in Instellingen"</string>
+    <string name="install_app" msgid="5066668100199613936">"App installeren"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Microfoon en camera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Recent app-gebruik"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Recente toegang bekijken"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Klaar"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Uitvouwen en opties tonen"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Samenvouwen"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Deze app sluiten"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> gesloten"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Service beheren"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Toegang beheren"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Gebruikt door telefoongesprek"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Recent gebruikt in telefoongesprek"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Gebruikt door <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Recent gebruikt door <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Gebruikt door <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Recent gebruikt door <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Gebruikt door <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Recent gebruikt door <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-nl/strings_tv.xml b/packages/SystemUI/res/values-nl/strings_tv.xml
deleted file mode 100644
index e018d97..0000000
--- a/packages/SystemUI/res/values-nl/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"Verbinding met VPN"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"Geen verbinding met VPN"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Via <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Meldingen"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Geen meldingen"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Microfoon neemt op"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Camera neemt op"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Camera en microfoon nemen op"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Microfoon neemt niet meer op"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Camera neemt niet meer op"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Camera en microfoon nemen niet meer op"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Schermopname gestart"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Schermopname gestopt"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index f298fd3..3da07a8 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB ସକ୍ଷମ କରନ୍ତୁ"</string>
     <string name="learn_more" msgid="4690632085667273811">"ଅଧିକ ଜାଣନ୍ତୁ"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ସ୍କ୍ରିନ୍‌ସଟ୍ ନିଅନ୍ତୁ"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlockକୁ ଅକ୍ଷମ କରାଯାଇଛି"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"ଏକ୍ସଟେଣ୍ଡ ଅନଲକକୁ ଅକ୍ଷମ କରାଯାଇଛି"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ଏକ ଛବି ପଠାଯାଇଛି"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"ସ୍କ୍ରୀନଶଟ୍‍ ସେଭ୍‍ କରାଯାଉଛି…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"ୱାର୍କ ପ୍ରୋଫାଇଲରେ ସ୍କ୍ରିନସଟ ସେଭ କରାଯାଉଛି…"</string>
@@ -83,7 +83,7 @@
     <string name="screenshot_edit_label" msgid="8754981973544133050">"ଏଡିଟ କରନ୍ତୁ"</string>
     <string name="screenshot_edit_description" msgid="3333092254706788906">"ସ୍କ୍ରିନସଟ୍ ଏଡିଟ କରନ୍ତୁ"</string>
     <string name="screenshot_share_description" msgid="2861628935812656612">"ସ୍କ୍ରିନସଟ ସେୟାର କରନ୍ତୁ"</string>
-    <string name="screenshot_scroll_label" msgid="2930198809899329367">"ଅଧିକ କ୍ୟାପଚର୍ କରନ୍ତୁ"</string>
+    <string name="screenshot_scroll_label" msgid="2930198809899329367">"ଅଧିକ କେପଚର କରନ୍ତୁ"</string>
     <string name="screenshot_dismiss_description" msgid="4702341245899508786">"ସ୍କ୍ରିନସଟ୍ ଖାରଜ କରନ୍ତୁ"</string>
     <string name="screenshot_dismiss_work_profile" msgid="3101530842987697045">"ୱାର୍କ ପ୍ରୋଫାଇଲ ମେସେଜକୁ ଖାରଜ କରନ୍ତୁ"</string>
     <string name="screenshot_preview_description" msgid="7606510140714080474">"ସ୍କ୍ରିନସଟର ପ୍ରିଭ୍ୟୁ"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> ଏହି ସ୍କ୍ରିନସଟକୁ ଚିହ୍ନଟ କରିଛି।"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> ଏବଂ ଅନ୍ୟ ଓପନ ଆପ୍ସ ଏହି ସ୍କ୍ରିନସଟକୁ ଚିହ୍ନଟ କରିଛି।"</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"ନୋଟରେ ଯୋଗ କରନ୍ତୁ"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"ସ୍କ୍ରିନ୍ ରେକର୍ଡର୍"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"ସ୍କ୍ରିନ ରେକର୍ଡର"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"ସ୍କ୍ରିନ ରେକର୍ଡିଂର ପ୍ରକ୍ରିୟାକରଣ"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"ଏକ ସ୍କ୍ରି‍ନ୍‍ ରେକର୍ଡ୍‍ ସେସନ୍‍ ପାଇଁ ଚାଲୁଥିବା ବିଜ୍ଞପ୍ତି"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"ରେକର୍ଡିଂ ଆରମ୍ଭ କରିବେ?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"ରେକର୍ଡିଂ ସମୟରେ, Android ସିଷ୍ଟମ୍ ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଦେଖାଯାଉଥିବା ବା ଆପଣଙ୍କ ଡିଭାଇସରେ ଚାଲୁଥିବା ଯେ କୌଣସି ସମ୍ବେଦନଶୀଳ ସୂଚନାକୁ କ୍ୟାପଚର୍ କରିପାରିବ। ଏଥିରେ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ସୂଚନା, ଫଟୋ, ମେସେଜ ଏବଂ ଅଡିଓ ଅନ୍ତର୍ଭୁକ୍ତ।"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"ସମ୍ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ ରେକର୍ଡ କର"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"ଏକ ସିଙ୍ଗଲ ଆପ ରେକର୍ଡ କରନ୍ତୁ"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"ଆପଣ ରେକର୍ଡିଂ କରିବା ବେଳେ, ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ଆପଣଙ୍କ ଡିଭାଇସରେ ପ୍ଲେ ହେଉଥିବା ସବୁକିଛିକୁ Androidର ଆକ୍ସେସ ଅଛି। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ କିମ୍ବା ଅନ୍ୟ ସମ୍ବେଦନଶୀଳ ସୂଚନା ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"ଆପଣ ଏକ ଆପ ରେକର୍ଡିଂ କରିବା ବେଳେ, ସେହି ଆପରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ପ୍ଲେ ହେଉଥିବା ସବୁକିଛିକୁ Androidର ଆକ୍ସେସ ଅଛି। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ କିମ୍ବା ଅନ୍ୟ ସମ୍ବେଦନଶୀଳ ସୂଚନା ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"ରେକର୍ଡିଂ ଆରମ୍ଭ କରନ୍ତୁ"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"ରେକର୍ଡିଂ ଆରମ୍ଭ କରିବେ?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"ଆପଣ ରେକର୍ଡ କରିବା ସମୟରେ, ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ଆପଣଙ୍କ ଡିଭାଇସରେ ପ୍ଲେ ହେଉଥିବା ସବୁକିଛିକୁ Androidର ଆକ୍ସେସ ଅଛି। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ, ଫଟୋ ଏବଂ ଅଡିଓ ଓ ଭିଡିଓ ପରି ବିଷୟଗୁଡ଼ିକ ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"ଆପଣ ଏକ ଆପ ରେକର୍ଡ କରିବା ସମୟରେ, ସେହି ଆପରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ପ୍ଲେ ହେଉଥିବା ସବୁକିଛିକୁ Androidର ଆକ୍ସେସ ଅଛି। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ, ଫଟୋ ଏବଂ ଅଡିଓ ଓ ଭିଡିଓ ପରି ବିଷୟଗୁଡ଼ିକ ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"ରେକର୍ଡିଂ ଆରମ୍ଭ କରନ୍ତୁ"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"ଅଡିଓ ରେକର୍ଡ କରନ୍ତୁ"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"ଡିଭାଇସ୍ ଅଡିଓ"</string>
-    <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"ଆପଣଙ୍କ ଡିଭାଇସରୁ ସାଉଣ୍ଡ, ଯେପରିକି ସଙ୍ଗୀତ, କଲ୍ ଏବଂ ରିଂଟୋନଗୁଡ଼ିକ"</string>
+    <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"ମ୍ୟୁଜିକ, କଲ ଏବଂ ରିଂଟୋନଗୁଡ଼ିକ ପରି ଆପଣଙ୍କ ଡିଭାଇସରୁ ସାଉଣ୍ଡ"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"ମାଇକ୍ରୋଫୋନ"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"ଡିଭାଇସ୍ ଅଡିଓ ଏବଂ ମାଇକ୍ରୋଫୋନ୍"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"ଆରମ୍ଭ କରନ୍ତୁ"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"ଆରମ୍ଭ କରନ୍ତୁ"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"ସ୍କ୍ରିନ୍ ରେକର୍ଡ କରାଯାଉଛି"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"ସ୍କ୍ରିନ୍ ଏବଂ ଅଡିଓ ରେକର୍ଡ କରାଯାଉଛି"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"ସ୍କ୍ରିନରେ ସ୍ପର୍ଶଗୁଡ଼ିକ ଦେଖାନ୍ତୁ"</string>
@@ -119,15 +116,18 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"ସେୟାର୍‍ କରନ୍ତୁ"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"ସ୍କ୍ରିନ୍ ରେକର୍ଡିଂ ସେଭ୍ କରାଯାଇଛି"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"ଦେଖିବାକୁ ଟାପ୍ କରନ୍ତୁ"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"ସ୍କ୍ରିନ୍‍ ରେକର୍ଡିଂ ଡିଲିଟ୍‍ କରିବାରେ ତ୍ରୁଟି"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"ସ୍କ୍ରିନ ରେକର୍ଡିଂ ସେଭ କରିବାରେ ତ୍ରୁଟି"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"ସ୍କ୍ରିନ୍ ରେକର୍ଡିଂ ଆରମ୍ଭ କରିବାରେ ତ୍ରୁଟି"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନରେ ଦେଖିବା"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"ବାହାରି ଯିବା ପାଇଁ, ଶୀର୍ଷରୁ ତଳକୁ ସ୍ୱାଇପ କରନ୍ତୁ।"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"ବୁଝିଗଲି"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"ଫେରନ୍ତୁ"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"ହୋମ"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"ମେନୁ"</string>
     <string name="accessibility_accessibility_button" msgid="4089042473497107709">"ଆକ୍ସେସିବିଲିଟୀ"</string>
     <string name="accessibility_rotate_button" msgid="1238584767612362586">"ସ୍କ୍ରୀନ୍‌କୁ ଘୁରାନ୍ତୁ"</string>
     <string name="accessibility_recent" msgid="901641734769533575">"ଓଭରଭିଉ"</string>
-    <string name="accessibility_camera_button" msgid="2938898391716647247">"କ୍ୟାମେରା"</string>
+    <string name="accessibility_camera_button" msgid="2938898391716647247">"କେମେରା"</string>
     <string name="accessibility_phone_button" msgid="4256353121703100427">"ଫୋନ"</string>
     <string name="accessibility_voice_assist_button" msgid="6497706615649754510">"ଭଏସ୍‌ ସହାୟକ"</string>
     <string name="accessibility_wallet_button" msgid="1458258783460555507">"ୱାଲେଟ୍"</string>
@@ -137,7 +137,7 @@
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"ଫେସ୍ ସ୍କାନିଙ୍ଗ କରାଯାଉଛି"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"ପଠାନ୍ତୁ"</string>
     <string name="cancel" msgid="1089011503403416730">"ବାତିଲ କରନ୍ତୁ"</string>
-    <string name="biometric_dialog_confirm" msgid="2005978443007344895">"ନିଶ୍ଚିତ କରନ୍ତୁ"</string>
+    <string name="biometric_dialog_confirm" msgid="2005978443007344895">"ସୁନିଶ୍ଚିତ କରନ୍ତୁ"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ"</string>
     <string name="biometric_dialog_empty_space_description" msgid="3330555462071453396">"ପ୍ରାମାଣିକତା ବାତିଲ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ"</string>
     <string name="biometric_dialog_face_icon_description_idle" msgid="4351777022315116816">"ଦୟାକରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"ମୁହଁ ପ୍ରାମାଣିକତା ହୋଇଛି"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"ସୁନିଶ୍ଚିତ କରାଯାଇଛି"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"ସମ୍ପୂର୍ଣ୍ଣ କରିବାକୁ ସୁନିଶ୍ଚିତ କରନ୍ତୁରେ ଟାପ୍ କରନ୍ତୁ"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ଫେସ ମାଧ୍ୟମରେ ଅନଲକ କରାଯାଇଛି। ଜାରି ରଖିବାକୁ ଅନଲକ ଆଇକନ ଦବାନ୍ତୁ।"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"ଫେସ ମାଧ୍ୟମରେ ଅନଲକ କରାଯାଇଛି"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ଫେସ ମାଧ୍ୟମରେ ଅନଲକ କରାଯାଇଛି। ଜାରି ରଖିବାକୁ ଦବାନ୍ତୁ।"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ଫେସ ଚିହ୍ନଟ କରାଯାଇଛି। ଜାରି ରଖିବାକୁ ଦବାନ୍ତୁ।"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ଫେସ ଚିହ୍ନଟ କରାଯାଇଛି। ଜାରି ରଖିବାକୁ ଅନଲକ ଆଇକନ ଦବାନ୍ତୁ।"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ପ୍ରାମାଣିକତା ହୋଇଛି"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"ପ୍ରମାଣୀକରଣକୁ ବାତିଲ କରନ୍ତୁ"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN ବ୍ୟବହାର କରନ୍ତୁ"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ପାଟର୍ନ ବ୍ୟବହାର କରନ୍ତୁ"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"ପାସ୍‌ୱାର୍ଡ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"ଆପଣ ପରବର୍ତ୍ତୀ ପ୍ରଚେଷ୍ଟାରେ ଏକ ଭୁଲ ପାଟର୍ନ ପ୍ରବେଶ କଲେ, ଆପଣଙ୍କ ୱାର୍କ ପ୍ରୋଫାଇଲ୍ ଏବଂ ଏହାର ଡାଟାକୁ ଡିଲିଟ୍ କରିଦିଆଯିବ।"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"ଆପଣ ପରବର୍ତ୍ତୀ ପ୍ରଚେଷ୍ଟାରେ ଏକ ଭୁଲ PIN ଲେଖିଲେ, ଆପଣଙ୍କ ୱାର୍କ ପ୍ରୋଫାଇଲ୍ ଏବଂ ଏହାର ଡାଟାକୁ ଡିଲିଟ୍ କରିଦିଆଯିବ।"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"ଆପଣ ପରବର୍ତ୍ତୀ ପ୍ରଚେଷ୍ଟାରେ ଏକ ଭୁଲ ପାସୱାର୍ଡ ଲେଖିଲେ, ଆପଣଙ୍କ ୱାର୍କ ପ୍ରୋଫାଇଲ୍ ଓ ଏହାର ଡାଟାକୁ ଡିଲିଟ୍ କରିଦିଆଯିବ।"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"ସେଟ ଅପ କରନ୍ତୁ"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"ବର୍ତ୍ତମାନ ନୁହେଁ"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"ସୁରକ୍ଷା ଓ ପରଫରମାନ୍ସକୁ ଉନ୍ନତ କରିବା ପାଇଁ ଏହା ଆବଶ୍ୟକ"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ଅନଲକ ପୁଣି ସେଟ ଅପ କରନ୍ତୁ"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ଅନଲକ"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ଅନଲକ ସେଟ ଅପ କରନ୍ତୁ"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ଅନଲକ ପୁଣି ସେଟ ଅପ କରିବାକୁ ଆପଣଙ୍କ ବର୍ତ୍ତମାନର ଟିପଚିହ୍ନ ଇମେଜ ଏବଂ ମଡେଲଗୁଡ଼ିକ ଡିଲିଟ ହୋଇଯିବ।\n\nସେଗୁଡ଼ିକ ଡିଲିଟ ହୋଇଯିବା ପରେ, ଆପଣଙ୍କ ଫୋନକୁ ଅନଲକ କରିବା କିମ୍ବା ଏହା ଆପଣ ଅଟନ୍ତି ବୋଲି ଯାଞ୍ଚ କରିବାକୁ ଆପଣଙ୍କ ଟିପଚିହ୍ନ ବ୍ୟବହାର କରିବା ପାଇଁ ଆପଣଙ୍କୁ ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ଅନଲକ ପୁଣି ସେଟ ଅପ କରିବାକୁ ହେବ।"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ଅନଲକ ପୁଣି ସେଟ ଅପ କରିବାକୁ ଆପଣଙ୍କ ବର୍ତ୍ତମାନର ଟିପଚିହ୍ନ ଇମେଜ ଏବଂ ମଡେଲ ଡିଲିଟ ହୋଇଯିବ।\n\nସେଗୁଡ଼ିକ ଡିଲିଟ ହୋଇଯିବା ପରେ, ଆପଣଙ୍କ ଫୋନକୁ ଅନଲକ କରିବା କିମ୍ବା ଏହା ଆପଣ ଅଟନ୍ତି ବୋଲି ଯାଞ୍ଚ କରିବାକୁ ଆପଣଙ୍କ ଟିପଚିହ୍ନ ବ୍ୟବହାର କରିବା ପାଇଁ ଆପଣଙ୍କୁ ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ଅନଲକ ପୁଣି ସେଟ ଅପ କରିବାକୁ ହେବ।"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ଅନଲକ ସେଟ ଅପ କରାଯାଇପାରିଲା ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରିବା ପାଇଁ ସେଟିଂସକୁ ଯାଆନ୍ତୁ।"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"ଫେସ ଅନଲକ ପୁଣି ସେଟ ଅପ କରନ୍ତୁ"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"ଫେସ ଅନଲକ"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"ଫେସ ଅନଲକ ସେଟ ଅପ କରନ୍ତୁ"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"ଫେସ ଅନଲକ ପୁଣି ସେଟ ଅପ କରିବାକୁ ଆପଣଙ୍କ ବର୍ତ୍ତମାନର ଫେସ ମଡେଲ ଡିଲିଟ ହୋଇଯିବ।\n\nଆପଣଙ୍କ ଫୋନକୁ ଅନଲକ କରିବା ପାଇଁ ଆପଣଙ୍କ ଫେସ ବ୍ୟବହାର କରିବାକୁ ଆପଣଙ୍କୁ ଏହି ଫିଚର ପୁଣି ସେଟ ଅପ କରିବାକୁ ହେବ।"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"ଫେସ ଅନଲକ ସେଟ ଅପ କରାଯାଇପାରିଲା ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରିବା ପାଇଁ ସେଟିଂସକୁ ଯାଆନ୍ତୁ।"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"ଟିପଚିହ୍ନ ସେନସର୍‌କୁ ଛୁଅଁନ୍ତୁ"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"ଜାରି ରଖିବାକୁ ଅନଲକ ଆଇକନ ଦବାନ୍ତୁ"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"ଫେସ୍ ଚିହ୍ନଟ କରିହେବ ନାହିଁ। ଟିପଚିହ୍ନ ବ୍ୟବହାର କରନ୍ତୁ।"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -182,7 +198,7 @@
     <string name="accessibility_not_connected" msgid="4061305616351042142">"କନେକ୍ଟ ହୋଇନାହିଁ।"</string>
     <string name="data_connection_roaming" msgid="375650836665414797">"ରୋମିଙ୍ଗ"</string>
     <string name="cell_data_off" msgid="4886198950247099526">"ବନ୍ଦ ଅଛି"</string>
-    <string name="accessibility_airplane_mode" msgid="1899529214045998505">"ଏରୋପ୍ଲେନ୍‍ ମୋଡ୍‌।"</string>
+    <string name="accessibility_airplane_mode" msgid="1899529214045998505">"ଏୟାରପ୍ଲେନ ମୋଡ।"</string>
     <string name="accessibility_vpn_on" msgid="8037549696057288731">"VPN ଅନ୍‍।"</string>
     <string name="accessibility_battery_level" msgid="5143715405241138822">"ବ୍ୟାଟେରୀ <xliff:g id="NUMBER">%d</xliff:g> ଶତକଡ଼ା।"</string>
     <string name="accessibility_battery_level_with_estimate" msgid="6548654589315074529">"ବେଟେରୀ <xliff:g id="PERCENTAGE">%1$d</xliff:g> ଶତକଡ଼ା, <xliff:g id="TIME">%2$s</xliff:g>"</string>
@@ -198,7 +214,7 @@
     <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ବିଜ୍ଞପ୍ତି ଶେଡ୍‍।"</string>
     <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"କ୍ୱିକ୍ ସେଟିଂସ୍।"</string>
     <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"କୁଇକ ସେଟିଂସ ଏବଂ ବିଜ୍ଞପ୍ତି ସେଡ।"</string>
-    <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ଲକ୍‌ ସ୍କ୍ରୀନ୍‌।"</string>
+    <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ଲକ ସ୍କ୍ରିନ।"</string>
     <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ୱର୍କ ଲକ୍‍ ସ୍କ୍ରୀନ୍‍"</string>
     <string name="accessibility_desc_close" msgid="8293708213442107755">"ବନ୍ଦ କରନ୍ତୁ"</string>
     <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ସମ୍ପୂର୍ଣ୍ଣ ନୀରବତା"</string>
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ଅଡିଓ"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ହେଡସେଟ୍‍"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ଇନପୁଟ୍"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"ଶ୍ରବଣ ଯନ୍ତ୍ର"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ଶ୍ରବଣ ଯନ୍ତ୍ର"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ଅନ୍ ହେଉଛି…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ଅଟୋ-ରୋଟେଟ୍"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ଅଟୋ-ରୋଟେଟ ସ୍କ୍ରିନ"</string>
@@ -243,9 +259,9 @@
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"ଉପଲବ୍ଧ"</string>
     <string name="quick_settings_camera_mic_blocked" msgid="4710884905006788281">"ବ୍ଲକ୍ କରାଯାଇଛି"</string>
     <string name="quick_settings_media_device_label" msgid="8034019242363789941">"ମିଡିଆ ଡିଭାଇସ୍‌"</string>
-    <string name="quick_settings_user_title" msgid="8673045967216204537">"ଉପଯୋଗକର୍ତ୍ତା‌"</string>
+    <string name="quick_settings_user_title" msgid="8673045967216204537">"ୟୁଜର"</string>
     <string name="quick_settings_wifi_label" msgid="2879507532983487244">"ୱାଇ-ଫାଇ"</string>
-    <string name="quick_settings_internet_label" msgid="6603068555872455463">"ଇଣ୍ଟରନେଟ୍"</string>
+    <string name="quick_settings_internet_label" msgid="6603068555872455463">"ଇଣ୍ଟରନେଟ"</string>
     <string name="quick_settings_networks_available" msgid="1875138606855420438">"ନେଟୱାର୍କଗୁଡ଼ିକ ଉପଲବ୍ଧ"</string>
     <string name="quick_settings_networks_unavailable" msgid="1167847013337940082">"ନେଟୱାର୍କ ଉପଲବ୍ଧ ନାହିଁ"</string>
     <string name="quick_settings_wifi_detail_empty_text" msgid="483130889414601732">"କୌଣସି ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କ ଉପଲବ୍ଧ ନାହିଁ"</string>
@@ -256,7 +272,7 @@
     <string name="quick_settings_cast_detail_empty_text" msgid="2846282280014617785">"କୌଣସି ଡିଭାଇସ୍ ଉପଲବ୍ଧ ନାହିଁ"</string>
     <string name="quick_settings_cast_no_wifi" msgid="6980194769795014875">"ୱାଇ-ଫାଇ ସଂଯୋଜିତ ହୋଇନାହିଁ"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"ଉଜ୍ଜ୍ୱଳତା"</string>
-    <string name="quick_settings_inversion_label" msgid="3501527749494755688">"ରଙ୍ଗ ଇନଭାର୍ସନ"</string>
+    <string name="quick_settings_inversion_label" msgid="3501527749494755688">"କଲର ଇନଭର୍ସନ"</string>
     <string name="quick_settings_color_correction_label" msgid="5636617913560474664">"ରଙ୍ଗ ସଂଶୋଧନ"</string>
     <string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"ଫଣ୍ଟର ଆକାର"</string>
     <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"ୟୁଜରମାନଙ୍କୁ ପରିଚାଳନା କରନ୍ତୁ"</string>
@@ -269,7 +285,7 @@
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ଚାଲୁ ହେଉଛି…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"ଡାଟା ସେଭର୍‌ ଅନ୍‌ ଅଛି"</string>
     <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{#ଟି ଡିଭାଇସ}other{#ଟି ଡିଭାଇସ}}"</string>
-    <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"ଫ୍ଲାସ୍‍ଲାଇଟ୍"</string>
+    <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"ଫ୍ଲାସଲାଇଟ"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"କ୍ୟାମେରା ବ୍ୟବହାରରେ ଅଛି"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"ମୋବାଇଲ୍‌ ଡାଟା"</string>
     <string name="quick_settings_cellular_detail_data_usage" msgid="6105969068871138427">"ଡାଟାର ବ୍ୟବହାର"</string>
@@ -284,8 +300,8 @@
     <string name="quick_settings_night_secondary_label_until_sunrise" msgid="4063448287758262485">"ସୂର୍ଯ୍ୟୋଦୟ ପର୍ଯ୍ୟନ୍ତ"</string>
     <string name="quick_settings_night_secondary_label_on_at" msgid="3584738542293528235">"<xliff:g id="TIME">%s</xliff:g>ରେ ଅନ୍ ହେବ"</string>
     <string name="quick_settings_secondary_label_until" msgid="1883981263191927372">"<xliff:g id="TIME">%s</xliff:g> ପର୍ଯ୍ୟନ୍ତ"</string>
-    <string name="quick_settings_ui_mode_night_label" msgid="1398928270610780470">"ଗାଢ଼ା ଥିମ୍"</string>
-    <string name="quick_settings_dark_mode_secondary_label_battery_saver" msgid="4990712734503013251">"ବ୍ୟାଟେରୀ ସେଭର୍"</string>
+    <string name="quick_settings_ui_mode_night_label" msgid="1398928270610780470">"ଗାଢ଼ା ଥିମ"</string>
+    <string name="quick_settings_dark_mode_secondary_label_battery_saver" msgid="4990712734503013251">"ବେଟେରୀ ସେଭର"</string>
     <string name="quick_settings_dark_mode_secondary_label_on_at_sunset" msgid="6017379738102015710">"ସନ୍ଧ୍ୟାରେ ଚାଲୁ ହେବ"</string>
     <string name="quick_settings_dark_mode_secondary_label_until_sunrise" msgid="4404885070316716472">"ସକାଳ ପର୍ଯ୍ୟନ୍ତ"</string>
     <string name="quick_settings_dark_mode_secondary_label_on_at" msgid="5128758823486361279">"<xliff:g id="TIME">%s</xliff:g>ରେ ଚାଲୁ ହେବ"</string>
@@ -304,10 +320,10 @@
     <string name="quick_settings_contrast_medium" msgid="5158352575583902566">"ମଧ୍ୟମ"</string>
     <string name="quick_settings_contrast_high" msgid="656049259587494499">"ଅଧିକ"</string>
     <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ଡିଭାଇସର ମାଇକ୍ରୋଫୋନକୁ ଅନବ୍ଲକ କରିବେ?"</string>
-    <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ଡିଭାଇସର କ୍ୟାମେରାକୁ ଅନବ୍ଲକ କରିବେ?"</string>
+    <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ଡିଭାଇସର କେମେରାକୁ ଅନବ୍ଲକ କରିବେ?"</string>
     <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ଡିଭାଇସର କ୍ୟାମେରା ଏବଂ ମାଇକ୍ରୋଫୋନକୁ ଅନବ୍ଲକ୍ କରିବେ?"</string>
     <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"ଆପଣଙ୍କ ମାଇକ୍ରୋଫୋନକୁ ବ୍ୟବହାର କରିବା ପାଇଁ ଅନୁମତି ଦିଆଯାଇଥିବା ସମସ୍ତ ଆପ୍ସ ଓ ସେବାଗୁଡ଼ିକ ପାଇଁ ଏହା ଆକ୍ସେସକୁ ଅନବ୍ଲକ କରେ।"</string>
-    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"ଆପଣଙ୍କ କ୍ୟାମେରାକୁ ବ୍ୟବହାର କରିବା ପାଇଁ ଅନୁମତି ଦିଆଯାଇଥିବା ସମସ୍ତ ଆପ୍ସ ଓ ସେବାଗୁଡ଼ିକ ପାଇଁ ଏହା ଆକ୍ସେସକୁ ଅନବ୍ଲକ କରେ।"</string>
+    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"ଆପଣଙ୍କ କେମେରାକୁ ବ୍ୟବହାର କରିବା ପାଇଁ ଅନୁମତି ଦିଆଯାଇଥିବା ସମସ୍ତ ଆପ୍ସ ଓ ସେବା ପାଇଁ ଏହା ଆକ୍ସେସକୁ ଅନବ୍ଲକ କରେ।"</string>
     <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"ଆପଣଙ୍କ କ୍ୟାମେରା କିମ୍ବା ମାଇକ୍ରୋଫୋନକୁ ବ୍ୟବହାର କରିବା ପାଇଁ ଅନୁମତି ଦିଆଯାଇଥିବା ସମସ୍ତ ଆପ୍ ଓ ସେବା ପାଇଁ ଏହା ଆକ୍ସେସକୁ ଅନବ୍ଲକ୍ କରେ।"</string>
     <string name="sensor_privacy_start_use_mic_blocked_dialog_title" msgid="2640140287496469689">"ମାଇକ୍ରୋଫୋନକୁ ବ୍ଲକ କରାଯାଇଛି"</string>
     <string name="sensor_privacy_start_use_camera_blocked_dialog_title" msgid="7398084286822440384">"କ୍ୟାମେରାକୁ ବ୍ଲକ କରାଯାଇଛି"</string>
@@ -338,7 +354,7 @@
     <string name="zen_silence_introduction" msgid="6117517737057344014">"ଆଲାର୍ମ, ମ୍ୟୁଜିକ୍‍, ଭିଡିଓ ଓ ଗେମ୍ସ ସମେତ ଏହାଦ୍ୱାରା ସମସ୍ତ ସାଉଣ୍ଡ ଓ ଭାଇବ୍ରେଶନ୍‍ ଅବରୋଧ ହୁଏ।"</string>
     <string name="notification_tap_again" msgid="4477318164947497249">"ଖୋଲିବା ପାଇଁ ପୁଣି ଟାପ୍‍ କରନ୍ତୁ"</string>
     <string name="tap_again" msgid="1315420114387908655">"ପୁଣି ଟାପ୍ କରନ୍ତୁ"</string>
-    <string name="keyguard_unlock" msgid="8031975796351361601">"ଖୋଲିବା ପାଇଁ ଉପରକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ"</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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"ଫେସ ମାଧ୍ୟମରେ ଅନଲକ କରାଯାଇଛି"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"ଫେସ ଚିହ୍ନଟ କରାଯାଇଛି"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"ପୁଣି ଚେଷ୍ଟା କରିବା ପାଇଁ ଉପରକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"ପୁଣି ଫେସ ଅନଲକ ବ୍ୟବହାର କରି ଦେଖିବା ପାଇଁ ଉପରକୁ ସ୍ୱାଇପ କରନ୍ତୁ"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC ବ୍ୟବହାର କରିବାକୁ ଅନଲକ୍ କରନ୍ତୁ"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"ଏହି ଡିଭାଇସଟି ଆପଣଙ୍କ ସଂସ୍ଥାର ଅଟେ"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"ଏହି ଡିଭାଇସଟି <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>ର ଅଟେ"</string>
@@ -382,23 +399,32 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"ୟୁଜରଙ୍କୁ ବାହାର କରିବେ?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"ଏହି ୟୁଜରଙ୍କ ସମସ୍ତ ଆପ୍‍ ଓ ଡାଟା ଡିଲିଟ୍‍ ହେବ।"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"କାଢ଼ି ଦିଅନ୍ତୁ"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ରେ ସମସ୍ତ ସୂଚନାକୁ ଆକ୍ସେସ୍ ରହିବ ଯାହା ଆପଣଙ୍କର ସ୍କ୍ରିନ୍‌ରେ ଦେଖାଯିବ ବା ରେକର୍ଡିଂ ବା କାଷ୍ଟିଂ ବେଳେ ଆପଣଙ୍କର ଡିଭାଇସ୍ ଠାରୁ ଚାଲିବ। ପାସ୍‌ୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ଫଟୋ, ମେସେଜ୍ ଏବଂ ଆପଣ ଚଲାଉଥିବା ଅଡିଓ ପରି ସୂଚନା ଅନ୍ତର୍ଭୁକ୍ତ ଅଛି।"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"ରେକର୍ଡିଂ ବା କାଷ୍ଟିଂ ବେଳେ ଆପଣଙ୍କର ଡିଭାଇସରେ ଦେଖାଯାଉଥିବା ବା ଆପଣଙ୍କ ଡିଭାଇସରୁ ପ୍ଲେ କରାଯାଉଥିବା ସବୁ ସୂଚନାକୁ ଏହି ଫଙ୍କସନ୍ ପ୍ରଦାନ କରୁଥିବା ସେବାର ଆକ୍ସେସ୍ ରହିବ। ପାସ୍‌ୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ଫଟୋ, ମେସେଜ୍ ଏବଂ ଆପଣ ଚଲାଉଥିବା ଅଡିଓ ପରି ସୂଚନା ଏଥିରେ ଅନ୍ତର୍ଭୁକ୍ତ ଅଛି।"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"ରେକର୍ଡିଂ ବା କାଷ୍ଟିଂ ଆରମ୍ଭ କରିବେ?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ସହ ରେକର୍ଡିଂ ବା କାଷ୍ଟିଂ ଆରମ୍ଭ କରିବେ?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"ସେୟାର କିମ୍ବା ରେକର୍ଡ କରିବା ପାଇଁ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>କୁ ଅନୁମତି ଦେବେ?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"ସମ୍ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"ଏକ ସିଙ୍ଗଲ ଆପ"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"ଆପଣ ସେୟାର, ରେକର୍ଡ କିମ୍ବା କାଷ୍ଟ କରିବା ସମୟରେ, ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ଆପଣଙ୍କ ଡିଭାଇସରେ ପ୍ଲେ ହେଉଥିବା ସବୁକିଛିକୁ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ର ଆକ୍ସେସ ଅଛି। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ କିମ୍ବା ଅନ୍ୟ ସମ୍ବେଦନଶୀଳ ସୂଚନା ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"ଆପଣ ସେୟାର, ରେକର୍ଡ କିମ୍ବା କାଷ୍ଟ କରିବା ସମୟରେ, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ଆପରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ପ୍ଲେ ହେଉଥିବା ସବୁକିଛିକୁ ସେହି ଆପର ଆକ୍ସେସ ଅଛି। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ କିମ୍ବା ଅନ୍ୟ ସମ୍ବେଦନଶୀଳ ସୂଚନା ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"ଜାରି ରଖନ୍ତୁ"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"ଏକ ଆପକୁ ସେୟାର କିମ୍ବା ରେକର୍ଡ କରନ୍ତୁ"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"ସେୟାର କିମ୍ବା ରେକର୍ଡ କରିବା ପାଇଁ ଏହି ଆପକୁ ଅନୁମତି ଦେବେ?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"ଆପଣ ସେୟାର, ରେକର୍ଡ ବା କାଷ୍ଟ କରିବା ସମୟରେ, ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ଆପଣଙ୍କ ଡିଭାଇସରେ ପ୍ଲେ ହେଉଥିବା ସବୁକିଛିକୁ ଏହି ଆପର ଆକ୍ସେସ ଅଛି। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ କିମ୍ବା ଅନ୍ୟ ସମ୍ବେଦନଶୀଳ ସୂଚନା ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"ଆପଣ ସେୟାର, ରେକର୍ଡ ବା କାଷ୍ଟ କରିବା ସମୟରେ, ସେହି ଆପରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ପ୍ଲେ ହେଉଥିବା ସବୁକିଛିକୁ ଏହି ଆପର ଆକ୍ସେସ ଅଛି। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ କିମ୍ବା ଅନ୍ୟ ସମ୍ବେଦନଶୀଳ ସୂଚନା ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"ରେକର୍ଡ ବା କାଷ୍ଟ କରିବା ସମୟରେ ଆପଣଙ୍କ ଡିଭାଇସରୁ ପ୍ଲେ ହେଉଥିବା କିମ୍ବା ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଦେଖାଯାଉଥିବା ସମସ୍ତ ସୂଚନାକୁ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ର ଆକ୍ସେସ ରହିବ। ଏଥିରେ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ଫଟୋ, ମେସେଜ ଏବଂ ଆପଣ ପ୍ଲେ କରୁଥିବା ଅଡିଓ ପରି ସୂଚନା ଅନ୍ତର୍ଭୁକ୍ତ ଅଛି।"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"ରେକର୍ଡିଂ ବା କାଷ୍ଟିଂ ଆରମ୍ଭ କରିବେ?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"ରେକର୍ଡ ବା କାଷ୍ଟ କରିବା ସମୟରେ ଆପଣଙ୍କ ଡିଭାଇସରୁ ପ୍ଲେ ହେଉଥିବା କିମ୍ବା ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଦେଖାଯାଉଥିବା ସମସ୍ତ ସୂଚନାକୁ ଏହି ଫଙ୍କସନ ପ୍ରଦାନ କରୁଥିବା ସେବାର ଆକ୍ସେସ ରହିବ। ଏଥିରେ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ଫଟୋ, ମେସେଜ ଏବଂ ଆପଣ ପ୍ଲେ କରୁଥିବା ଅଡିଓ ପରି ସୂଚନା ଅନ୍ତର୍ଭୁକ୍ତ ଅଛି।"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"ସମ୍ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"ଏକ ସିଙ୍ଗଲ ଆପ"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"ଏକ ଆପକୁ ସେୟାର କିମ୍ବା ରେକର୍ଡ କରନ୍ତୁ"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ସହ ରେକର୍ଡିଂ ବା କାଷ୍ଟିଂ ଆରମ୍ଭ କରିବେ?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"ଆପଣ ସେୟାର, ରେକର୍ଡ କିମ୍ବା କାଷ୍ଟ କରିବା ସମୟରେ, ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ଆପଣଙ୍କ ଡିଭାଇସରେ ପ୍ଲେ ହେଉଥିବା ସବୁକିଛିକୁ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ର ଆକ୍ସେସ ଅଛି। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ, ଫଟୋ ଏବଂ ଅଡିଓ ଓ ଭିଡିଓ ପରି ବିଷୟଗୁଡ଼ିକ ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"ଆପଣ ଏକ ଆପ ସେୟାର, ରେକର୍ଡ କିମ୍ବା କାଷ୍ଟ କରିବା ସମୟରେ, ସେହି ଆପରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ପ୍ଲେ ହେଉଥିବା ସବୁକିଛିକୁ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ର ଆକ୍ସେସ ଅଛି। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ, ଫଟୋ ଏବଂ ଅଡିଓ ଓ ଭିଡିଓ ପରି ବିଷୟଗୁଡ଼ିକ ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"ଆରମ୍ଭ କରନ୍ତୁ"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"କାଷ୍ଟିଂ ଆରମ୍ଭ କରିବେ?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"ଆପଣ କାଷ୍ଟ କରିବା ସମୟରେ, ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ଆପଣଙ୍କ ଡିଭାଇସରେ ପ୍ଲେ ହେଉଥିବା ସବୁକିଛିକୁ Androidର ଆକ୍ସେସ ଅଛି। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ, ଫଟୋ ଏବଂ ଅଡିଓ ଓ ଭିଡିଓ ପରି ବିଷୟଗୁଡ଼ିକ ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"ଆପଣ ଏକ ଆପ କାଷ୍ଟ କରିବା ସମୟରେ, ସେହି ଆପରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ପ୍ଲେ ହେଉଥିବା ସବୁକିଛିକୁ Androidର ଆକ୍ସେସ ଅଛି। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ, ଫଟୋ ଏବଂ ଅଡିଓ ଓ ଭିଡିଓ ପରି ବିଷୟଗୁଡ଼ିକ ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"କାଷ୍ଟିଂ ଆରମ୍ଭ କରନ୍ତୁ"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"ସେୟାରିଂ ଆରମ୍ଭ କରିବେ?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"ଆପଣ ସେୟାର, ରେକର୍ଡ କିମ୍ବା କାଷ୍ଟ କରିବା ସମୟରେ, ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ଆପଣଙ୍କ ଡିଭାଇସରେ ପ୍ଲେ ହେଉଥିବା ସବୁକିଛିକୁ Androidର ଆକ୍ସେସ ଅଛି। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ, ଫଟୋ ଏବଂ ଅଡିଓ ଓ ଭିଡିଓ ପରି ବିଷୟଗୁଡ଼ିକ ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"ଆପଣ ଏକ ଆପ ସେୟାର, ରେକର୍ଡ କିମ୍ବା କାଷ୍ଟ କରିବା ସମୟରେ, ସେହି ଆପରେ ଦେଖାଯାଉଥିବା କିମ୍ବା ପ୍ଲେ ହେଉଥିବା ସବୁକିଛିକୁ Androidର ଆକ୍ସେସ ଅଛି। ତେଣୁ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ମେସେଜ, ଫଟୋ ଏବଂ ଅଡିଓ ଓ ଭିଡିଓ ପରି ବିଷୟଗୁଡ଼ିକ ପ୍ରତି ସତର୍କ ରୁହନ୍ତୁ।"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"ଆରମ୍ଭ କରନ୍ତୁ"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"ଆପଣ ଆପ୍ସ ସୁଇଚ କଲେ ସେୟାରିଂ ବିରତ ହୁଏ"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"ଏହା ପରିବର୍ତ୍ତେ ଏହି ଆପ ସେୟାର କରନ୍ତୁ"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"ପୁଣି ସୁଇଚ କରନ୍ତୁ"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"ଆପ ସୁଇଚ"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"ଆପଣଙ୍କ IT ଆଡମିନଙ୍କ ଦ୍ୱାରା ବ୍ଲକ କରାଯାଇଛି"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"ଡିଭାଇସ ନୀତି ଦ୍ୱାରା ସ୍କ୍ରିନ କେପଚରିଂକୁ ଅକ୍ଷମ କରାଯାଇଛି"</string>
-    <string name="clear_all_notifications_text" msgid="348312370303046130">"ସମସ୍ତ ଖାଲି କରନ୍ତୁ"</string>
+    <string name="clear_all_notifications_text" msgid="348312370303046130">"ସବୁ ଖାଲି କରନ୍ତୁ"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"ପରିଚାଳନା କରନ୍ତୁ"</string>
     <string name="manage_notifications_history_text" msgid="57055985396576230">"ଇତିହାସ"</string>
     <string name="notification_section_header_incoming" msgid="850925217908095197">"ନୂଆ"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"ଏହି ଡିଭାଇସରେ ଏକ ସର୍ଟିଫିକେଟ୍‍ ଅଥରିଟି ଇନଷ୍ଟଲ୍‍ କରାଯାଇଛି। ଆପଣଙ୍କ ସୁରକ୍ଷିତ ନେଟୱର୍କ ଟ୍ରାଫିକ୍‍ ନୀରିକ୍ଷଣ କିମ୍ବା ସଂଶୋଧନ କରାଯାଇ ପାରେ।"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"ଆପଣଙ୍କ ଆଡମିନ୍‍ ନେଟୱର୍କ ଲଗଇନ୍‍ କରିବା ଅନ୍‍ କରିଛନ୍ତି, ଯାହା ଆପଣଙ୍କ ଡିଭାଇସରେ ଟ୍ରାଫିକ୍‍ ନୀରିକ୍ଷଣ କରେ।"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"ଆପଣଙ୍କ ଆଡମିନ୍ ନେଟୱାର୍କ ଲଗିଂ ଚାଲୁ କରିଛନ୍ତି, ଯାହା ଆପଣଙ୍କ ୱାର୍କ ପ୍ରୋଫାଇଲରେ ଟ୍ରାଫିକ୍ ନିରୀକ୍ଷଣ କରେ କିନ୍ତୁ ଆପଣଙ୍କ ବ୍ୟକ୍ତିଗତ ପ୍ରୋଫାଇଲରେ ନୁହେଁ।"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"ଆପଣଙ୍କ ଡିଭାଇସ <xliff:g id="VPN_APP">%1$s</xliff:g> ମାଧ୍ୟମରେ ଇଣ୍ଟରନେଟ ସହ କନେକ୍ଟ ଅଛି। ଇମେଲ ଏବଂ ବ୍ରାଉଜିଂ ଡାଟା ସମେତ, ଆପଣଙ୍କ ନେଟୱାର୍କ କାର୍ଯ୍ୟକଳାପ ଆପଣଙ୍କର IT ଆଡମିନଙ୍କୁ ଦୃଶ୍ୟମାନ ହୋଇଥାଏ।"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"ଏହି ଡିଭାଇସ <xliff:g id="VPN_APP">%1$s</xliff:g> ମାଧ୍ୟମରେ ଇଣ୍ଟରନେଟ ସହ କନେକ୍ଟ ହୋଇଛି। ଇମେଲ ଏବଂ ବ୍ରାଉଜିଂ ଡାଟା ସମେତ, ଆପଣଙ୍କ ନେଟୱାର୍କ କାର୍ଯ୍ୟକଳାପ VPN ପ୍ରଦାନକାରୀଙ୍କୁ ଦେଖାଯାଉଛି।"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"ଏହି ଡିଭାଇସ <xliff:g id="VPN_APP">%1$s</xliff:g> ମାଧ୍ୟମରେ ଇଣ୍ଟରନେଟ ସହ କନେକ୍ଟ ଅଛି। ଇମେଲ ଏବଂ ବ୍ରାଉଜିଂ ଡାଟା ସମେତ, ଆପଣଙ୍କ ନେଟୱାର୍କ କାର୍ଯ୍ୟକଳାପ ଆପଣଙ୍କର IT ଆଡମିନଙ୍କୁ ଦୃଶ୍ୟମାନ ହୋଇଥାଏ।"</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"ଏହି ଡିଭାଇସ <xliff:g id="VPN_APP_0">%1$s</xliff:g> ଏବଂ <xliff:g id="VPN_APP_1">%2$s</xliff:g> ମାଧ୍ୟମରେ ଇଣ୍ଟରନେଟ ସହ କନେକ୍ଟ ଅଛି। ଇମେଲ ଏବଂ ବ୍ରାଉଜିଂ ଡାଟା ସମେତ, ଆପଣଙ୍କ ନେଟୱାର୍କ କାର୍ଯ୍ୟକଳାପ ଆପଣଙ୍କର IT ଆଡମିନଙ୍କୁ ଦୃଶ୍ୟମାନ ହୋଇଥାଏ।"</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"ଆପଣଙ୍କ ୱାର୍କ ଆପ୍ସ <xliff:g id="VPN_APP">%1$s</xliff:g> ମାଧ୍ୟମରେ ଇଣ୍ଟରନେଟ ସହ କନେକ୍ଟ ଅଛି। ଇମେଲ ଏବଂ ବ୍ରାଉଜିଂ ଡାଟା ସମେତ, ୱାର୍କ ଆପ୍ସରେ ଆପଣଙ୍କ ନେଟୱାର୍କ କାର୍ଯ୍ୟକଳାପ ଆପଣଙ୍କର IT ଆଡମିନ ଏବଂ VPN ପ୍ରଦାନକାରୀଙ୍କୁ ଦୃଶ୍ୟମାନ ହୋଇଥାଏ।"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"ଆପଣଙ୍କ ବ୍ୟକ୍ତିଗତ ଆପ୍ସ <xliff:g id="VPN_APP">%1$s</xliff:g> ମାଧ୍ୟମରେ ଇଣ୍ଟରନେଟ ସହ କନେକ୍ଟ ଅଛି। ଇମେଲ ଏବଂ ବ୍ରାଉଜିଂ ଡାଟା ସମେତ, ଆପଣଙ୍କ ନେଟୱାର୍କ କାର୍ଯ୍ୟକଳାପ ଆପଣଙ୍କର VPN ପ୍ରଦାନକାରୀଙ୍କୁ ଦୃଶ୍ୟମାନ ହୋଇଥାଏ।"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"ଅକ୍ଷମ କରନ୍ତୁ"</string>
     <string name="sound_settings" msgid="8874581353127418308">"ସାଉଣ୍ଡ ଓ ଭାଇବ୍ରେସନ"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ସେଟିଂସ"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ଭଲ୍ୟୁମକୁ ସୁରକ୍ଷିତ ସ୍ତରକୁ କମ କରାଯାଇଛି"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"ସୁପାରିଶ କରାଯାଇଥିବାଠାରୁ ଅଧିକ ସମୟ ପାଇଁ ଭଲ୍ୟୁମକୁ ଉଚ୍ଚ ସ୍ତରରେ ରଖାଯାଇଛି"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"ଭଲ୍ୟୁମକୁ ସୁରକ୍ଷିତ ଲେଭେଲକୁ କମ କରାଯାଇଛି"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"ସୁପାରିଶ କରାଯାଇଥିବା ଅପେକ୍ଷା ଅଧିକ ସମୟ ପାଇଁ ହେଡଫୋନର ଭଲ୍ୟୁମ ଅଧିକ ଅଛି"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"ଏହି ସପ୍ତାହ ପାଇଁ ହେଡଫୋନର ଭଲ୍ୟୁମ ସୁରକ୍ଷିତ ସୀମାକୁ ଅତିକ୍ରମ କରିଛି"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"ଶୁଣିବା ଜାରି ରଖନ୍ତୁ"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"ଭଲ୍ୟୁମ କମାନ୍ତୁ"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"ଆପକୁ ପିନ୍ କରାଯାଇଛି"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"ଆପଣ ଅନପିନ୍‍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ଏହା ଦେଖାଉଥିବ। ଅନପିନ୍‍ କରିବାକୁ ସ୍ପର୍ଶ କରି ଧରିରଖନ୍ତୁ ଓ ଦେଖନ୍ତୁ।"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"ଆପଣ ଅନପିନ୍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ଏହା ଦେଖାଉଥିବ। ଅନପିନ୍ କରିବା ପାଇଁ ହୋମ ଓ ବ୍ୟାକ ବଟନକୁ ଦବାଇ ଧରନ୍ତୁ।"</string>
@@ -490,14 +520,14 @@
     <string name="stream_accessibility" msgid="3873610336741987152">"ଆକ୍ସେସିବିଲିଟୀ"</string>
     <string name="volume_ringer_status_normal" msgid="1339039682222461143">"ରିଙ୍ଗ"</string>
     <string name="volume_ringer_status_vibrate" msgid="6970078708957857825">"ଭାଇବ୍ରେଟ୍‌"</string>
-    <string name="volume_ringer_status_silent" msgid="3691324657849880883">"ମ୍ୟୁଟ୍"</string>
+    <string name="volume_ringer_status_silent" msgid="3691324657849880883">"ମ୍ୟୁଟ"</string>
     <string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s। ଅନମ୍ୟୁଟ୍‍ କରିବା ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ।"</string>
     <string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s। ଭାଇବ୍ରେଟ୍‍ ସେଟ୍‍ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ। ଆକ୍ସେସିବିଲିଟୀ ସର୍ଭିସ୍‌ ମ୍ୟୁଟ୍‍ କରାଯାଇପାରେ।"</string>
     <string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s। ମ୍ୟୁଟ୍‍ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ। ଆକ୍ସେସିବିଲିଟୀ ସର୍ଭିସ୍‌ ମ୍ୟୁଟ୍‍ କରାଯାଇପାରେ।"</string>
     <string name="volume_stream_content_description_vibrate_a11y" msgid="2742330052979397471">"%1$s। ଭାଇବ୍ରେଟରେ ସେଟ୍‍ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ।"</string>
     <string name="volume_stream_content_description_mute_a11y" msgid="5743548478357238156">"%1$s। ମ୍ୟୁଟ୍‍ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ।"</string>
     <string name="volume_ringer_change" msgid="3574969197796055532">"ରିଙ୍ଗର୍ ମୋଡ୍ ବଦଳାଇବାକୁ ଟାପ୍ କରନ୍ତୁ"</string>
-    <string name="volume_ringer_hint_mute" msgid="4263821214125126614">"ମ୍ୟୁଟ୍"</string>
+    <string name="volume_ringer_hint_mute" msgid="4263821214125126614">"ମ୍ୟୁଟ"</string>
     <string name="volume_ringer_hint_unmute" msgid="6119086890306456976">"ଅନ୍‍-ମ୍ୟୁଟ୍ କରନ୍ତୁ"</string>
     <string name="volume_ringer_hint_vibrate" msgid="6211609047099337509">"ଭାଇବ୍ରେଟ୍"</string>
     <string name="volume_dialog_title" msgid="6502703403483577940">"%s ଭଲ୍ୟୁମ୍ ନିୟନ୍ତ୍ରଣ"</string>
@@ -508,7 +538,7 @@
     <string name="enable_demo_mode" msgid="3180345364745966431">"ଡେମୋ ମୋଡ୍ ସକ୍ଷମ କରନ୍ତୁ"</string>
     <string name="show_demo_mode" msgid="3677956462273059726">"ଡେମୋ ମୋଡ୍‍ ଦେଖାନ୍ତୁ"</string>
     <string name="status_bar_ethernet" msgid="5690979758988647484">"ଇଥରନେଟ୍‌"</string>
-    <string name="status_bar_alarm" msgid="87160847643623352">"ଆଲାର୍ମ"</string>
+    <string name="status_bar_alarm" msgid="87160847643623352">"ଆଲାରାମ"</string>
     <string name="wallet_title" msgid="5369767670735827105">"ୱାଲେଟ୍"</string>
     <string name="wallet_empty_state_label" msgid="7776761245237530394">"ଆପଣଙ୍କ ଫୋନ୍ ମାଧ୍ୟମରେ ଆହୁରି ଶୀଘ୍ର, ଅଧିକ ସୁରକ୍ଷିତ କ୍ରୟ କରିବା ପାଇଁ ସେଟ୍ ଅପ୍ କରନ୍ତୁ"</string>
     <string name="wallet_app_button_label" msgid="7123784239111190992">"ସବୁ ଦେଖାନ୍ତୁ"</string>
@@ -520,7 +550,7 @@
     <string name="qr_code_scanner_title" msgid="1938155688725760702">"QR କୋଡ ସ୍କାନର"</string>
     <string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"ଅପଡେଟ ହେଉଛି"</string>
     <string name="status_bar_work" msgid="5238641949837091056">"ୱର୍କ ପ୍ରୋଫାଇଲ୍‌"</string>
-    <string name="status_bar_airplane" msgid="4848702508684541009">"ଏରୋପ୍ଲେନ୍‍ ମୋଡ୍"</string>
+    <string name="status_bar_airplane" msgid="4848702508684541009">"ଏୟାରପ୍ଲେନ ମୋଡ"</string>
     <string name="zen_alarm_warning" msgid="7844303238486849503">"<xliff:g id="WHEN">%1$s</xliff:g>ବେଳେ ଆପଣ ନିଜର ପରବର୍ତ୍ତୀ ଆଲାର୍ମ ଶୁଣିପାରିବେ ନାହିଁ"</string>
     <string name="alarm_template" msgid="2234991538018805736">"<xliff:g id="WHEN">%1$s</xliff:g> ହେଲେ"</string>
     <string name="alarm_template_far" msgid="3561752195856839456">"<xliff:g id="WHEN">%1$s</xliff:g> ବେଳେ"</string>
@@ -606,7 +636,7 @@
     <string name="keyboard_key_media_fast_forward" msgid="3572444327046911822">"ଫାଷ୍ଟ ଫର୍‌ୱାର୍ଡ"</string>
     <string name="keyboard_key_page_up" msgid="173914303254199845">"ଉପର ପୃଷ୍ଠା"</string>
     <string name="keyboard_key_page_down" msgid="9035902490071829731">"ତଳ ପୃଷ୍ଠା"</string>
-    <string name="keyboard_key_forward_del" msgid="5325501825762733459">"ଡିଲିଟ୍‌ କରନ୍ତୁ"</string>
+    <string name="keyboard_key_forward_del" msgid="5325501825762733459">"ଡିଲିଟ କରନ୍ତୁ"</string>
     <string name="keyboard_key_move_home" msgid="3496502501803911971">"ହୋମ"</string>
     <string name="keyboard_key_move_end" msgid="99190401463834854">"ସମାପ୍ତ"</string>
     <string name="keyboard_key_insert" msgid="4621692715704410493">"ଇନ୍‌ସର୍ଟ"</string>
@@ -691,7 +721,7 @@
     <item msgid="7453955063378349599">"ବାମକୁ-ଆଉଜେଇବା"</item>
     <item msgid="5874146774389433072">"ଡାହାଣକୁ-ଆଉଜେଇବା"</item>
   </string-array>
-    <string name="save" msgid="3392754183673848006">"ସେଭ୍‌ କରନ୍ତୁ"</string>
+    <string name="save" msgid="3392754183673848006">"ସେଭ କରନ୍ତୁ"</string>
     <string name="reset" msgid="8715144064608810383">"ରିସେଟ୍ କରନ୍ତୁ"</string>
     <string name="clipboard" msgid="8517342737534284617">"କ୍ଲିପ୍‌ବୋର୍ଡ"</string>
     <string name="accessibility_key" msgid="3471162841552818281">"କଷ୍ଟମ୍‍ ନାଭିଗେଶନ୍ ବଟନ୍‍"</string>
@@ -738,14 +768,8 @@
     <string name="accessibility_quick_settings_edit" msgid="1523745183383815910">"ସେଟିଂସର କ୍ରମ ଏଡିଟ କରନ୍ତୁ।"</string>
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"ପାୱାର ମେନୁ"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"ପୃଷ୍ଠା <xliff:g id="ID_1">%1$d</xliff:g> ମୋଟ <xliff:g id="ID_2">%2$d</xliff:g>"</string>
-    <string name="tuner_lock_screen" msgid="2267383813241144544">"ଲକ୍‌ ସ୍କ୍ରୀନ୍‌"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"ଗରମ ହେତୁ ଫୋନ୍‍ ଅଫ୍‍ କରିଦିଆଗଲା"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"ଆପଣଙ୍କ ଫୋନ୍ ବର୍ତ୍ତମାନ ସାମାନ୍ୟ ରୂପେ ଚାଲୁଛି।\nଅଧିକ ସୂଚନା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"ଆପଣଙ୍କ ଫୋନ୍‍ ବହୁତ ଗରମ ଥିଲା, ତେଣୁ ଏହାକୁ ଥଣ୍ଡା କରାଯିବାକୁ ଅଫ୍‍ କରିଦିଆଗଲା। ଆପଣଙ୍କ ଫୋନ୍‍ ବର୍ତ୍ତମାନ ସାମାନ୍ୟ ଅବସ୍ଥାରେ ଚାଲୁଛି।\n\nଆପଣଙ୍କ ଫୋନ୍‍ ଅଧିକ ଗରମ ହୋଇଯାଇପାରେ ଯଦି ଆପଣ:\n	• ରିସୋର୍ସ-ଇଣ୍ଟେନସିଭ୍‍ ଆପ୍‍ (ଯେପରିକି ଗେମିଙ୍ଗ, ଭିଡିଓ, କିମ୍ବା ନେଭିଗେସନ୍‍ ଆପ୍‍) ବ୍ୟବହାର କରନ୍ତି\n	• ବଡ ଫାଇଲ୍‍ ଡାଉନଲୋଡ କିମ୍ବା ଅପଲୋଡ୍‍ କରନ୍ତି\n	• ଅଧିକ ତାପମାତ୍ରାରେ ଆପଣଙ୍କ ଫୋନ୍‍ ବ୍ୟବହାର କରନ୍ତି"</string>
+    <string name="tuner_lock_screen" msgid="2267383813241144544">"ଲକ ସ୍କ୍ରିନ"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"ଯତ୍ନ ନେବା ପାଇଁ ଷ୍ଟେପଗୁଡ଼ିକ ଦେଖନ୍ତୁ"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"ଫୋନ୍‍ ଗରମ ହୋଇଯାଉଛି"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"ଫୋନ୍ ଥଣ୍ଡା ହେବା ସମୟରେ କିଛି ଫିଚର୍ ଠିକ ଭାବେ କାମ କରିନଥାଏ।\nଅଧିକ ସୂଚନା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"ଆପଣଙ୍କ ଫୋନ୍‍ ସ୍ୱଚାଳିତ ଭାବେ ଥଣ୍ଡା ହେବାକୁ ଚେଷ୍ଟା କରିବ। ଆପଣ ତଥାପି ନିଜ ଫୋନ୍‍ ବ୍ୟବହାର କରିପାରିବେ, କିନ୍ତୁ ଏହା ଧୀରେ ଚାଲିପାରେ।\n\nଆପଣଙ୍କ ଫୋନ୍‍ ଥଣ୍ଡା ହୋଇଯିବାପରେ, ଏହା ସାମାନ୍ୟ ଭାବେ ଚାଲିବ।"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"ଯତ୍ନ ନେବା ପାଇଁ ଷ୍ଟେପଗୁଡ଼ିକ ଦେଖନ୍ତୁ"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"ଆପଣଙ୍କ ଡିଭାଇସକୁ ଅନପ୍ଲଗ କରନ୍ତୁ"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"ଚାର୍ଜିଂ ପୋର୍ଟ ନିକଟରେ ଆପଣଙ୍କ ଡିଭାଇସ ଗରମ ହୋଇଯାଉଛି। ଯଦି ଏହା ଏକ ଚାର୍ଜର କିମ୍ବା USB ଆକସେସୋରୀ ସହ କନେକ୍ଟ କରାଯାଇଥାଏ ତେବେ ଏହାକୁ ଅନପ୍ଲଗ କରନ୍ତୁ ଏବଂ ଧ୍ୟାନ ରଖନ୍ତୁ କାରଣ କେବୁଲ ମଧ୍ୟ ଗରମ ହୋଇପାରେ।"</string>
@@ -818,7 +842,7 @@
     <string name="ongoing_privacy_dialog_attribution_text" msgid="4738795925380373994">"(<xliff:g id="APPLICATION_NAME_S_">%s</xliff:g> ମାଧ୍ୟମରେ)"</string>
     <string name="ongoing_privacy_dialog_attribution_label" msgid="3385241594101496292">"(<xliff:g id="ATTRIBUTION_LABEL">%s</xliff:g>)"</string>
     <string name="ongoing_privacy_dialog_attribution_proxy_label" msgid="1111829599659403249">"(<xliff:g id="ATTRIBUTION_LABEL">%1$s</xliff:g> • <xliff:g id="PROXY_LABEL">%2$s</xliff:g>)"</string>
-    <string name="privacy_type_camera" msgid="7974051382167078332">"କ୍ୟାମେରା"</string>
+    <string name="privacy_type_camera" msgid="7974051382167078332">"Camera"</string>
     <string name="privacy_type_location" msgid="7991481648444066703">"ଲୋକେସନ"</string>
     <string name="privacy_type_microphone" msgid="9136763906797732428">"ମାଇକ୍ରୋଫୋନ"</string>
     <string name="privacy_type_media_projection" msgid="8136723828804251547">"ସ୍କ୍ରିନ ରେକର୍ଡିଂ"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ସମ୍ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନକୁ ମ୍ୟାଗ୍ନିଫାଏ କରନ୍ତୁ"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ସ୍କ୍ରିନର ଅଂଶ ମାଗ୍ନିଫାଏ କରନ୍ତୁ"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"ମାଗ୍ନିଫିକେସନ ସେଟିଂସ ଖୋଲନ୍ତୁ"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"ମେଗ୍ନିଫିକେସନ ସେଟିଂସକୁ ବନ୍ଦ କରନ୍ତୁ"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"ରିସାଇଜ କରିବା ପାଇଁ କୋଣକୁ ଡ୍ରାଗ କରନ୍ତୁ"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"ଡାଏଗୋନାଲ ସ୍କ୍ରୋଲିଂକୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"ରିସାଇଜ କରନ୍ତୁ"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ନାପସନ୍ଦ କରନ୍ତୁ"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> ସ୍ଥିତିକୁ ମୁଭ୍ କରନ୍ତୁ"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"ଶୀଘ୍ର ଆକ୍ସେସ କରିବା ପାଇଁ ଡିଭାଇସ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ବାଛନ୍ତୁ"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ପୁଣି ବ୍ୟବସ୍ଥିତ କରିବାକୁ ସେଗୁଡ଼ିକୁ ଡ୍ରାଗ କରି ଧରି ରଖନ୍ତୁ"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"ସମସ୍ତ ନିୟନ୍ତ୍ରଣ କାଢ଼ି ଦିଆଯାଇଛି"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ପରିବର୍ତ୍ତନଗୁଡ଼ିକ ସେଭ୍ କରାଯାଇନାହିଁ"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"ଅନ୍ୟ ଏକ PIN ଚେଷ୍ଟା କରି ଦେଖନ୍ତୁ"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> ପାଇଁ ପରିବର୍ତ୍ତନ ସୁନିଶ୍ଚିତ କରନ୍ତୁ"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"ଅଧିକ ଦେଖିବାକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ"</string>
+    <string name="retry_face" msgid="416380073082560186">"ଫେସ ପ୍ରମାଣୀକରଣ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"ସୁପାରିଶଗୁଡ଼ିକ ଲୋଡ୍ କରାଯାଉଛି"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"ମିଡିଆ"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପାଇଁ ଏହି ମିଡିଆ ନିୟନ୍ତ୍ରଣକୁ ଲୁଚାଇବେ?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"ସେଟିଂସ୍"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g>ରୁ <xliff:g id="ARTIST_NAME">%2$s</xliff:g>ଙ୍କ <xliff:g id="SONG_NAME">%1$s</xliff:g> ଚାଲୁଛି"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>ରୁ <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> ଚାଲୁଛି"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"ଚଲାନ୍ତୁ"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"ବିରତ କରନ୍ତୁ"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"ପୂର୍ବବର୍ତ୍ତୀ ଟ୍ରାକ"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"ସ୍ପିକର ଏବଂ ଡିସପ୍ଲେଗୁଡ଼ିକ"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"ପ୍ରସ୍ତାବିତ ଡିଭାଇସଗୁଡ଼ିକ"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"ଅନ୍ୟ ଏକ ଡିଭାଇସକୁ ମିଡିଆ ମୁଭ କରିବା ପାଇଁ ଆପଣଙ୍କ ସେୟାର କରାଯାଇଥିବା ସେସନକୁ ବନ୍ଦ କରନ୍ତୁ"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"ବନ୍ଦ କରନ୍ତୁ"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"ବ୍ରଡକାଷ୍ଟିଂ କିପରି କାମ କରେ"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"ବ୍ରଡକାଷ୍ଟ"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"ଆପଣଙ୍କ ଆଖପାଖର କମ୍ପାଟିବଲ ବ୍ଲୁଟୁଥ ଡିଭାଇସ ଥିବା ଲୋକମାନେ ଆପଣ ବ୍ରଡକାଷ୍ଟ କରୁଥିବା ମିଡିଆ ଶୁଣିପାରିବେ"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"ସେଭ କରାଯାଇପାରିଲା ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"ସେଭ କରାଯାଇପାରିଲା ନାହିଁ।"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"ଅତିକମରେ 4ଟି କେରେକ୍ଟର ବ୍ୟବହାର କରନ୍ତୁ"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"16ଟିରୁ କମ କେରେକ୍ଟର ବ୍ୟବହାର କରନ୍ତୁ"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g>ଟିରୁ କମ କେରେକ୍ଟର ବ୍ୟବହାର କରନ୍ତୁ"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"ବିଲ୍ଡ ନମ୍ୱର"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"କ୍ଲିପବୋର୍ଡକୁ କପି କରାଯାଇଥିବା ବିଲ୍ଡ ନମ୍ୱର।"</string>
     <string name="basic_status" msgid="2315371112182658176">"ବାର୍ତ୍ତାଳାପ ଖୋଲନ୍ତୁ"</string>
@@ -1009,11 +1037,11 @@
     <string name="audio_status" msgid="4237055636967709208">"ଶୁଣୁଛି"</string>
     <string name="game_status" msgid="1340694320630973259">"ଚାଲୁଛି"</string>
     <string name="empty_user_name" msgid="3389155775773578300">"ସାଙ୍ଗମାନେ"</string>
-    <string name="empty_status" msgid="5938893404951307749">"ରାତିରେ ଚାଟ୍ କରିବା!"</string>
+    <string name="empty_status" msgid="5938893404951307749">"ଆଜି ରାତି ଚାଟ କରିବା!"</string>
     <string name="status_before_loading" msgid="1500477307859631381">"ବିଷୟବସ୍ତୁ ଶୀଘ୍ର ଦେଖାଯିବ"</string>
     <string name="missed_call" msgid="4228016077700161689">"ମିସ୍ଡ କଲ୍"</string>
     <string name="messages_count_overflow_indicator" msgid="7850934067082006043">"<xliff:g id="NUMBER">%d</xliff:g>+"</string>
-    <string name="people_tile_description" msgid="8154966188085545556">"ବର୍ତ୍ତମାନର ମେସେଜ୍, ମିସ୍ଡ କଲ୍ ଏବଂ ସ୍ଥିତି ଅପଡେଟଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ"</string>
+    <string name="people_tile_description" msgid="8154966188085545556">"ବର୍ତ୍ତମାନର ମେସେଜ, ମିସ୍ଡ କଲ ଏବଂ ସ୍ଥିତି ଅପଡେଟଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ"</string>
     <string name="people_tile_title" msgid="6589377493334871272">"ବାର୍ତ୍ତାଳାପ"</string>
     <string name="paused_by_dnd" msgid="7856941866433556428">"\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଦ୍ୱାରା ବିରତ କରାଯାଇଛି"</string>
     <string name="new_notification_text_content_description" msgid="2915029960094389291">"<xliff:g id="NAME">%1$s</xliff:g> ଏକ ମେସେଜ୍ ପଠାଇଛନ୍ତି: <xliff:g id="NOTIFICATION">%2$s</xliff:g>"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"ଆପଣଙ୍କ ବ୍ୟାଟେରୀ ମିଟର୍ ପଢ଼ିବାରେ ସମସ୍ୟା ହେଉଛି"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"ଅଧିକ ସୂଚନା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"ଆଲାରାମ ସେଟ ହୋଇନାହିଁ"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ସ୍କ୍ରିନ ଲକ ଲେଖନ୍ତୁ"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"ଟିପଚିହ୍ନ ସେନ୍ସର୍"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"ପ୍ରମାଣୀକରଣ କରନ୍ତୁ"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"ଡିଭାଇସ୍ ବିଷୟରେ ସୂଚନା ଲେଖନ୍ତୁ"</string>
@@ -1034,7 +1063,7 @@
     <string name="mobile_data_connection_active" msgid="944490013299018227">"ସଂଯୋଗ କରାଯାଇଛି"</string>
     <string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"ଅସ୍ଥାୟୀ ରୂପେ କନେକ୍ଟ କରାଯାଇଛି"</string>
     <string name="mobile_data_poor_connection" msgid="819617772268371434">"ଦୁର୍ବଳ କନେକ୍ସନ"</string>
-    <string name="mobile_data_off_summary" msgid="3663995422004150567">"ମୋବାଇଲ ଡାଟା ସ୍ୱତଃ-ସଂଯୋଗ ହେବ ନାହିଁ"</string>
+    <string name="mobile_data_off_summary" msgid="3663995422004150567">"ମୋବାଇଲ ଡାଟା ସ୍ୱତଃ-କନେକ୍ଟ ହେବ ନାହିଁ"</string>
     <string name="mobile_data_no_connection" msgid="1713872434869947377">"ସଂଯୋଗ ନାହିଁ"</string>
     <string name="non_carrier_network_unavailable" msgid="770049357024492372">"ଅନ୍ୟ କୌଣସି ନେଟୱାର୍କ ଉପଲବ୍ଧ ନାହିଁ"</string>
     <string name="all_network_unavailable" msgid="4112774339909373349">"କୌଣସି ନେଟୱାର୍କ ଉପଲବ୍ଧ ନାହିଁ"</string>
@@ -1051,7 +1080,7 @@
     <string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> କ୍ୱିକ୍ ସେଟିଂସରେ ନିମ୍ନୋକ୍ତ ଟାଇଲ୍ ଯୋଗ କରିବାକୁ ଚାହେଁ"</string>
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"ଟାଇଲ୍ ଯୋଗ କରନ୍ତୁ"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"ଟାଇଲ୍ ଯୋଗ କର ନାହିଁ"</string>
-    <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"ଉପଯୋଗକର୍ତ୍ତା ଚୟନ କର"</string>
+    <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"ୟୁଜର ଚୟନ କରନ୍ତୁ"</string>
     <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>
@@ -1074,7 +1103,7 @@
     <string name="clipboard_image_preview" msgid="2156475174343538128">"ଇମେଜ ପ୍ରିଭ୍ୟୁ"</string>
     <string name="clipboard_edit" msgid="4500155216174011640">"ଏଡିଟ କରନ୍ତୁ"</string>
     <string name="add" msgid="81036585205287996">"ଯୋଗ କରନ୍ତୁ"</string>
-    <string name="manage_users" msgid="1823875311934643849">"ଉପଯୋଗକର୍ତ୍ତାମାନଙ୍କୁ ପରିଚାଳନା କରନ୍ତୁ"</string>
+    <string name="manage_users" msgid="1823875311934643849">"ୟୁଜରମାନଙ୍କୁ ପରିଚାଳନା କରନ୍ତୁ"</string>
     <string name="drag_split_not_supported" msgid="7173481676120546121">"ଏହି ବିଜ୍ଞପ୍ତି ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନକୁ ଟାଣିବାକୁ ସମର୍ଥନ କରେ ନାହିଁ"</string>
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"ୱାଇ-ଫାଇ ଉପଲବ୍ଧ ନାହିଁ"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"ପ୍ରାଥମିକତା ମୋଡ"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant ଶୁଣୁଛି"</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="note_task_button_label" msgid="8718616095800343136">"ନୋଟଟେକିଂ"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"ନୋଟ-ଟେକିଂ"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"ନୋଟ-ଟେକିଂ, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"ଅଧିକ ଜାଣନ୍ତୁ"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"<xliff:g id="URL">%s</xliff:g>ରେ ଅଧିକ ଜାଣନ୍ତୁ"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> ଖୋଲନ୍ତୁ"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• ଆପ ସେଟ ଅପ କରାଯାଇଥିବା"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Walletରେ ଅତିକମରେ ଗୋଟିଏ କାର୍ଡ ଯୋଗ କରାଯାଇଥିବା"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• ଏକ କେମେରା ଆପ ଇନଷ୍ଟଲ କରିବା"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• ଆପ ସେଟ ଅପ କରାଯାଇଛି"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• ଅତିକମରେ ଗୋଟିଏ ଡିଭାଇସ ଉପଲବ୍ଧ ଅଛି"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"ଏକ ସର୍ଟକଟ ଭାବେ Wallet ଆପ ଯୋଗ କରିବା ପାଇଁ ଏହି ଆପ ଇନଷ୍ଟଲ କରାଯାଇଥିବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"ଏକ ସର୍ଟକଟ ଭାବେ Wallet ଆପ ଯୋଗ କରିବାକୁ ଅତିକମରେ ଗୋଟିଏ ଆପ ଯୋଗ କରାଯାଇଥିବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"ଏକ ସର୍ଟକଟ ଭାବେ QR କୋଡ ସ୍କାନର ଯୋଗ କରିବାକୁ ଏକ କେମେରା ଆପ ଇନଷ୍ଟଲ କରାଯାଇଥିବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"ଏକ ସର୍ଟକଟ ଭାବେ Home ଆପ ଯୋଗ କରିବା ପାଇଁ ଏହି ଆପ ଇନଷ୍ଟଲ କରାଯାଇଥିବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• ଅତିକମରେ ଗୋଟିଏ ଡିଭାଇସ ଉପଲବ୍ଧ ଅଛି"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"ନୋଟଟେକିଂ ସର୍ଟକଟ ବ୍ୟବହାର କରିବାକୁ ଏକ ଡିଫଲ୍ଟ ନୋଟ୍ସ ଆପ୍ସ ଚୟନ କରନ୍ତୁ"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"ଆପ ଚୟନ କରନ୍ତୁ"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"ସର୍ଟକଟକୁ ସ୍ପର୍ଶ କରି ଧରି ରଖନ୍ତୁ"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"ବାତିଲ କରନ୍ତୁ"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"ବର୍ତ୍ତମାନ ସ୍କ୍ରିନ ସ୍ୱିଚ କରନ୍ତୁ"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"ଏକ ଚାର୍ଜର ସହ ଆପଣଙ୍କ ଷ୍ଟାଇଲସକୁ କନେକ୍ଟ କରନ୍ତୁ"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"ଷ୍ଟାଇଲସ ବେଟେରୀର ଚାର୍ଜ କମ ଅଛି"</string>
     <string name="video_camera" msgid="7654002575156149298">"ଭିଡିଓ କେମେରା"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"ଏହି ପ୍ରୋଫାଇଲରୁ କଲ କରାଯାଇପାରିବ ନାହିଁ"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"ଆପଣଙ୍କ ୱାର୍କ ନୀତି ଆପଣଙ୍କୁ କେବଳ ୱାର୍କ ପ୍ରୋଫାଇଲରୁ ଫୋନ କଲ କରିବାକୁ ଅନୁମତି ଦିଏ"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"ଏକ ବ୍ୟକ୍ତିଗତ ଆପରୁ କଲ କରିପାରିବେ ନାହିଁ"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"ଆପଣଙ୍କ ସଂସ୍ଥା ଆପଣଙ୍କୁ କେବଳ ୱାର୍କ ଆପ୍ସରୁ କଲ କରିବାକୁ ଅନୁମତି ଦିଏ"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"ୱାର୍କ ପ୍ରୋଫାଇଲକୁ ସ୍ୱିଚ କରନ୍ତୁ"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"ବନ୍ଦ କରନ୍ତୁ"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"ଏକ ୱାର୍କ ଫୋନ ଆପ ଇନଷ୍ଟଲ କରନ୍ତୁ"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"ବାତିଲ କରନ୍ତୁ"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"ଲକ ସ୍କ୍ରିନକୁ କଷ୍ଟମାଇଜ କରନ୍ତୁ"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"ଲକ ସ୍କ୍ରିନକୁ କଷ୍ଟମାଇଜ କରିବା ପାଇଁ ଅନଲକ କରନ୍ତୁ"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"ୱାଇ-ଫାଇ ଉପଲବ୍ଧ ନାହିଁ"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"କେମେରାକୁ ବ୍ଲକ କରାଯାଇଛି"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"କେମେରା ଏବଂ ମାଇକ୍ରୋଫୋନକୁ ବ୍ଲକ କରାଯାଇଛି"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"ମାଇକ୍ରୋଫୋନକୁ ବ୍ଲକ କରାଯାଇଛି"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ପ୍ରାୟୋରିଟି ମୋଡ ଚାଲୁ ଅଛି"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant ଆଟେନସନ ଚାଲୁ ଅଛି"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"ସେଟିଂସରେ ଡିଫଲ୍ଟ ନୋଟ୍ସ ଆପ ସେଟ କରନ୍ତୁ"</string>
+    <string name="install_app" msgid="5066668100199613936">"ଆପ ଇନଷ୍ଟଲ କରନ୍ତୁ"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"ମାଇକ୍ରୋଫୋନ ଏବଂ କେମେରା"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"ବର୍ତ୍ତମାନର ଆପ ବ୍ୟବହାର"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"ବର୍ତ୍ତମାନର ଆକ୍ସେସ ଦେଖନ୍ତୁ"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"ହୋଇଗଲା"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"ବିସ୍ତାର କରି ବିକଳ୍ପଗୁଡ଼ିକ ଦେଖାନ୍ତୁ"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"ସଙ୍କୁଚିତ କରନ୍ତୁ"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"ଏହି ଆପକୁ ବନ୍ଦ କରନ୍ତୁ"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g>ଟି ବନ୍ଦ ହୋଇଯାଇଛି"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"ସେବା ପରିଚାଳନା କରନ୍ତୁ"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"ଆକ୍ସେସକୁ ପରିଚାଳନା କରନ୍ତୁ"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"ଫୋନ କଲରେ ବ୍ୟବହାର କରାଯାଉଛି"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"ଏବେ ଫୋନ କଲରେ ବ୍ୟବହାର କରାଯାଇଛି"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> ଦ୍ୱାରା ବ୍ୟବହାର କରାଯାଉଛି"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"ଏବେ <xliff:g id="APP_NAME">%1$s</xliff:g> ଦ୍ୱାରା ବ୍ୟବହାର କରାଯାଉଛି"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> ଦ୍ୱାରା ବ୍ୟବହାର କରାଯାଉଛି (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"ଏବେ <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ଦ୍ୱାରା ବ୍ୟବହାର କରାଯାଉଛି"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> ଦ୍ୱାରା ବ୍ୟବହାର କରାଯାଉଛି (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"ଏବେ <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ଦ୍ୱାରା ବ୍ୟବହାର କରାଯାଉଛି"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-or/strings_tv.xml b/packages/SystemUI/res/values-or/strings_tv.xml
deleted file mode 100644
index 178bd4b..0000000
--- a/packages/SystemUI/res/values-or/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN ସଂଯୋଗ କରାଯାଇଛି"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN ବିଚ୍ଛିନ୍ନ କରାଯାଇଛି"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> ମାଧ୍ୟମରେ"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"କୌଣସି ବିଜ୍ଞପ୍ତି ନାହିଁ"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"ମାଇକ୍ରୋଫୋନ୍ ରେକର୍ଡିଂ କରୁଛି"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"କ୍ୟାମେରା ରେକର୍ଡିଂ କରୁଛି"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"କ୍ୟାମେରା ଏବଂ ମାଇକ୍ରୋଫୋନ୍ ରେକର୍ଡିଂ କରୁଛି"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"ମାଇକ୍ରୋଫୋନ୍ ରେକର୍ଡିଂ ବନ୍ଦ କରିଛି"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"କ୍ୟାମେରା ରେକର୍ଡିଂ ବନ୍ଦ କରିଛି"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"କ୍ୟାମେରା ଏବଂ ମାଇକ୍ରୋଫୋନ୍ ରେକର୍ଡିଂ ବନ୍ଦ କରିଛି"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"ସ୍କ୍ରିନ ରେକର୍ଡିଂ ଆରମ୍ଭ କରାଯାଇଛି"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"ସ୍କ୍ରିନ ରେକର୍ଡିଂ ବନ୍ଦ କରାଯାଇଛି"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index 50e829f..b8a92c2 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB ਚਾਲੂ ਕਰੋ"</string>
     <string name="learn_more" msgid="4690632085667273811">"ਹੋਰ ਜਾਣੋ"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ਸਕ੍ਰੀਨਸ਼ਾਟ"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock ਨੂੰ ਬੰਦ ਕੀਤਾ ਗਿਆ"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"ਐਕਸਟੈਂਡ ਅਣਲਾਕ ਨੂੰ ਬੰਦ ਕੀਤਾ ਗਿਆ"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ਚਿੱਤਰ ਭੇਜਿਆ ਗਿਆ"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ \'ਤੇ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> ਨੂੰ ਇਸ ਸਕ੍ਰੀਨਸ਼ਾਟ ਦਾ ਪਤਾ ਲੱਗਿਆ ਹੈ।"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> ਅਤੇ ਹੋਰ ਖੁੱਲ੍ਹੀਆਂ ਐਪਾਂ ਨੂੰ ਇਸ ਸਕ੍ਰੀਨਸ਼ਾਟ ਦਾ ਪਤਾ ਲੱਗਿਆ ਹੈ।"</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"ਨੋਟ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਰ"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਰ"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਜਾਰੀ ਹੈ"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"ਕਿਸੇ ਸਕ੍ਰੀਨ ਰਿਕਾਰਡ ਸੈਸ਼ਨ ਲਈ ਚੱਲ ਰਹੀ ਸੂਚਨਾ"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"ਕੀ ਰਿਕਾਰਡਿੰਗ ਸ਼ੁਰੂ ਕਰਨੀ ਹੈ?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"ਰਿਕਾਰਡਿੰਗ ਕਰਨ ਵੇਲੇ, Android ਸਿਸਟਮ ਕੋਈ ਵੀ ਅਜਿਹੀ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਣਕਾਰੀ ਕੈਪਚਰ ਕਰ ਸਕਦਾ ਹੈ ਜੋ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਖਣਯੋਗ ਹੈ ਜਾਂ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚਲਾਈ ਜਾਂਦੀ ਹੈ। ਇਸ ਵਿੱਚ ਪਾਸਵਰਡ, ਭੁਗਤਾਨ ਵੇਰਵੇ, ਫ਼ੋਟੋਆਂ, ਸੁਨੇਹੇ ਅਤੇ ਆਡੀਓ ਸ਼ਾਮਲ ਹਨ।"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"ਪੂਰੀ ਸਕ੍ਰੀਨ ਨੂੰ ਰਿਕਾਰਡ ਕਰੋ"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"ਇਕਹਿਰੀ ਐਪ ਨੂੰ ਰਿਕਾਰਡ ਕਰੋ"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਰਿਕਾਰਡਿੰਗ ਕਰਨ ਵੇਲੇ, Android ਕੋਲ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਸਦੀ ਜਾਂ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚਲਾਈ ਗਈ ਹਰੇਕ ਚੀਜ਼ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ ਜਾਂ ਹੋਰ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਣਕਾਰੀ ਸੰਬੰਧੀ ਸਾਵਧਾਨ ਰਹੋ।"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਰਿਕਾਰਡਿੰਗ ਕਰਨ ਵੇਲੇ, Android ਕੋਲ ਉਸ ਐਪ \'ਤੇ ਦਿਖਾਈ ਗਈ ਜਾਂ ਚਲਾਈ ਗਈ ਹਰੇਕ ਚੀਜ਼ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ ਜਾਂ ਹੋਰ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਣਕਾਰੀ ਸੰਬੰਧੀ ਸਾਵਧਾਨ ਰਹੋ।"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"ਰਿਕਾਰਡਿੰਗ ਸ਼ੁਰੂ ਕਰੋ"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"ਕੀ ਰਿਕਾਰਡਿੰਗ ਸ਼ੁਰੂ ਕਰਨੀ ਹੈ?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਰਿਕਾਰਡਿੰਗ ਕਰਨ ਵੇਲੇ, Android ਕੋਲ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਸਣ ਵਾਲੀ ਜਾਂ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚਲਾਈ ਜਾਣ ਵਾਲੀ ਹਰੇਕ ਚੀਜ਼ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ, ਫ਼ੋਟੋਆਂ ਅਤੇ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ ਵਰਗੀਆਂ ਚੀਜ਼ਾਂ ਸੰਬੰਧੀ ਸਾਵਧਾਨ ਰਹੋ।"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਰਿਕਾਰਡਿੰਗ ਕਰਨ \'ਤੇ, Android ਕੋਲ ਉਸ ਐਪ \'ਤੇ ਦਿਖਾਈ ਗਈ ਜਾਂ ਚਲਾਈ ਗਈ ਹਰੇਕ ਚੀਜ਼ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ, ਫ਼ੋਟੋਆਂ ਅਤੇ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ ਵਰਗੀਆਂ ਚੀਜ਼ਾਂ ਸੰਬੰਧੀ ਸਾਵਧਾਨ ਰਹੋ।"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"ਰਿਕਾਰਡਿੰਗ ਸ਼ੁਰੂ ਕਰੋ"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"ਆਡੀਓ ਰਿਕਾਰਡ ਕਰੋ"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"ਡੀਵਾਈਸ ਆਡੀਓ"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦੀ ਧੁਨੀ, ਜਿਵੇਂ ਕਿ ਸੰਗੀਤ, ਕਾਲਾਂ ਅਤੇ ਰਿੰਗਟੋਨਾਂ"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"ਮਾਈਕ੍ਰੋਫ਼ੋਨ"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"ਡੀਵਾਈਸ ਆਡੀਓ ਅਤੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"ਸ਼ੁਰੂ ਕਰੋ"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"ਸ਼ੁਰੂ ਕਰੋ"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"ਸਕ੍ਰੀਨ ਨੂੰ ਰਿਕਾਰਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"ਸਕ੍ਰੀਨ ਅਤੇ ਆਡੀਓ ਨੂੰ ਰਿਕਾਰਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"ਸਕ੍ਰੀਨ \'ਤੇ ਸਪਰਸ਼ਾਂ ਨੂੰ ਦਿਖਾਓ"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"ਸਾਂਝਾ ਕਰੋ"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਰੱਖਿਅਤ ਕੀਤੀ ਗਈ"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"ਦੇਖਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਨੂੰ ਮਿਟਾਉਣ ਦੌਰਾਨ ਗੜਬੜ ਹੋਈ"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਨੂੰ ਰੱਖਿਅਤ ਕਰਨ ਵੇਲੇ ਗੜਬੜ ਹੋ ਗਈ"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਵੇਲੇ ਗੜਬੜ ਹੋਈ"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"ਪੂਰੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦੇਖਿਆ ਜਾ ਰਿਹਾ ਹੈ"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"ਬਾਹਰ ਜਾਣ ਲਈ, ਉਪਰੋਂ ਹੇਠਾਂ ਵੱਲ ਸਵਾਈਪ ਕਰੋ।"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"ਸਮਝ ਲਿਆ"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"ਪਿੱਛੇ"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"ਘਰ"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"ਮੀਨੂ"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"ਚਿਹਰਾ ਪ੍ਰਮਾਣੀਕਿਰਤ ਹੋਇਆ"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"ਪੁਸ਼ਟੀ ਕੀਤੀ ਗਈ"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"ਪੂਰਾ ਕਰਨ ਲਈ ਪੁਸ਼ਟੀ ਕਰੋ \'ਤੇ ਟੈਪ ਕਰੋ"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ਚਿਹਰੇ ਰਾਹੀਂ ਅਣਲਾਕ ਕੀਤਾ ਗਿਆ। ਜਾਰੀ ਰੱਖਣ ਲਈ \'ਅਣਲਾਕ ਕਰੋ\' ਪ੍ਰਤੀਕ ਨੂੰ ਦਬਾਓ।"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"ਚਿਹਰੇ ਰਾਹੀਂ ਅਣਲਾਕ ਕੀਤਾ ਗਿਆ"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ਚਿਹਰੇ ਰਾਹੀਂ ਅਣਲਾਕ ਕੀਤਾ ਗਿਆ। ਜਾਰੀ ਰੱਖਣ ਲਈ ਦਬਾਓ।"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ਚਿਹਰੇ ਦੀ ਪਛਾਣ ਹੋਈ। ਜਾਰੀ ਰੱਖਣ ਲਈ ਦਬਾਓ।"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ਚਿਹਰੇ ਦੀ ਪਛਾਣ ਹੋਈ। ਜਾਰੀ ਰੱਖਣ ਲਈ \'ਅਣਲਾਕ ਕਰੋ\' ਪ੍ਰਤੀਕ ਨੂੰ ਦਬਾਓ।"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ਪ੍ਰਮਾਣਿਤ ਹੋਇਆ"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"ਪ੍ਰਮਾਣੀਕਰਨ ਰੱਦ ਕਰੋ"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ਪਿੰਨ ਵਰਤੋ"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ਪੈਟਰਨ ਵਰਤੋ"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"ਪਾਸਵਰਡ ਵਰਤੋ"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"ਜੇ ਤੁਸੀਂ ਅਗਲੀ ਕੋਸ਼ਿਸ਼ ਵਿੱਚ ਕੋਈ ਗਲਤ ਪੈਟਰਨ ਦਾਖਲ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡਾ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਅਤੇ ਇਸ ਦਾ ਡਾਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"ਜੇ ਤੁਸੀਂ ਅਗਲੀ ਕੋਸ਼ਿਸ਼ ਵਿੱਚ ਕੋਈ ਗਲਤ ਪਿੰਨ ਦਾਖਲ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡਾ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਅਤੇ ਇਸ ਦਾ ਡਾਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"ਜੇ ਤੁਸੀਂ ਅਗਲੀ ਕੋਸ਼ਿਸ਼ ਵਿੱਚ ਕੋਈ ਗਲਤ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡਾ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਅਤੇ ਇਸ ਦਾ ਡਾਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"ਸੈੱਟਅੱਪ ਕਰੋ"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"ਹੁਣੇ ਨਹੀਂ"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"ਸੁਰੱਖਿਆ ਅਤੇ ਕਾਰਗੁਜ਼ਾਰੀ ਵਿੱਚ ਸੁਧਾਰ ਕਰਨ ਲਈ ਇਹ ਲੋੜੀਂਦਾ ਹੈ"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਅਣਲਾਕ ਦਾ ਦੁਬਾਰਾ ਸੈੱਟਅੱਪ ਕਰੋ"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਅਣਲਾਕ"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਅਣਲਾਕ ਦਾ ਸੈੱਟਅੱਪ ਕਰੋ"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਅਣਲਾਕ ਦਾ ਦੁਬਾਰਾ ਸੈੱਟਅੱਪ ਕਰਨ ਲਈ, ਤੁਹਾਡੇ ਮੌਜੂਦਾ ਫਿੰਗਰਪ੍ਰਿੰਟ ਚਿੱਤਰਾਂ ਅਤੇ ਮਾਡਲਾਂ ਨੂੰ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।\n\nਉਨ੍ਹਾਂ ਨੂੰ ਮਿਟਾਉਣ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਨੂੰ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਵਰਤੋਂ ਕਰ ਕੇ ਅਣਲਾਕ ਕਰਨ ਅਤੇ ਆਪਣੀ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਫਿੰਗਰਪ੍ਰਿੰਟ ਅਣਲਾਕ ਦਾ ਦੁਬਾਰਾ ਸੈੱਟਅੱਪ ਕਰਨ ਦੀ ਲੋੜ ਪਵੇਗੀ।"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਅਣਲਾਕ ਦਾ ਦੁਬਾਰਾ ਸੈੱਟਅੱਪ ਕਰਨ ਲਈ, ਤੁਹਾਡੇ ਮੌਜੂਦਾ ਫਿੰਗਰਪ੍ਰਿੰਟ ਚਿੱਤਰਾਂ ਅਤੇ ਮਾਡਲ ਨੂੰ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।\n\nਉਨ੍ਹਾਂ ਨੂੰ ਮਿਟਾਉਣ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਨੂੰ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਵਰਤੋਂ ਕਰ ਕੇ ਅਣਲਾਕ ਕਰਨ ਅਤੇ ਆਪਣੀ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਫਿੰਗਰਪ੍ਰਿੰਟ ਅਣਲਾਕ ਦਾ ਦੁਬਾਰਾ ਸੈੱਟਅੱਪ ਕਰਨ ਦੀ ਲੋੜ ਪਵੇਗੀ।"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਅਣਲਾਕ ਦਾ ਸੈੱਟਅੱਪ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਸੈਟਿੰਗਾਂ \'ਤੇ ਜਾਓ।"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"ਫ਼ੇਸ ਅਣਲਾਕ ਦਾ ਦੁਬਾਰਾ ਸੈੱਟਅੱਪ ਕਰੋ"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"ਫ਼ੇਸ ਅਣਲਾਕ"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"ਫ਼ੇਸ ਅਣਲਾਕ ਦਾ ਸੈੱਟਅੱਪ ਕਰੋ"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"ਫ਼ੇਸ ਅਣਲਾਕ ਦਾ ਦੁਬਾਰਾ ਸੈੱਟਅੱਪ ਕਰਨ ਲਈ, ਤੁਹਾਡੇ ਮੌਜੂਦਾ ਚਿਹਰੇ ਦੇ ਮਾਡਲ ਨੂੰ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ।\n\nਤੁਹਾਨੂੰ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ ਆਪਣੇ ਚਿਹਰੇ ਦੀ ਵਰਤੋਂ ਕਰਨ ਵਾਸਤੇ ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਦਾ ਦੁਬਾਰਾ ਸੈੱਟਅੱਪ ਕਰਨ ਦੀ ਲੋੜ ਪਵੇਗੀ।"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"ਫ਼ੇਸ ਅਣਲਾਕ ਦਾ ਸੈੱਟਅੱਪ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਸੈਟਿੰਗਾਂ \'ਤੇ ਜਾਓ।"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਨੂੰ ਸਪੱਰਸ਼ ਕਰੋ"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"ਜਾਰੀ ਰੱਖਣ ਲਈ \'ਅਣਲਾਕ ਕਰੋ\' ਪ੍ਰਤੀਕ ਨੂੰ ਦਬਾਓ"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"ਚਿਹਰਾ ਨਹੀਂ ਪਛਾਣ ਸਕਦੇ। ਇਸਦੀ ਬਜਾਏ ਫਿੰਗਰਪ੍ਰਿੰਟ ਵਰਤੋ।"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ਆਡੀਓ"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ਹੈੱਡਸੈੱਟ"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ਇਨਪੁੱਟ"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"ਸੁਣਨ ਦੇ ਸਾਧਨ"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ਸੁਣਨ ਦੇ ਸਾਧਨ"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ਸਵੈ-ਘੁਮਾਓ"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ਸਕ੍ਰੀਨ ਨੂੰ ਆਪਣੇ ਆਪ ਘੁੰਮਾਓ"</string>
@@ -264,7 +280,7 @@
     <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ਬੰਦ ਕਰੋ"</string>
     <string name="quick_settings_connected" msgid="3873605509184830379">"ਕਨੈਕਟ ਕੀਤਾ"</string>
     <string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"ਕਨੈਕਟ ਕੀਤੀ ਗਈ, ਬੈਟਰੀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
-    <string name="quick_settings_connecting" msgid="2381969772953268809">"ਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ..."</string>
+    <string name="quick_settings_connecting" msgid="2381969772953268809">"ਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"ਚਿਹਰੇ ਰਾਹੀਂ ਅਣਲਾਕ ਕੀਤਾ ਗਿਆ"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"ਚਿਹਰੇ ਦੀ ਪਛਾਣ ਹੋਈ"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਉੱਤੇ ਵੱਲ ਸਵਾਈਪ ਕਰੋ"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"ਫ਼ੇਸ ਅਣਲਾਕ ਨੂੰ ਦੁਬਾਰਾ ਵਰਤ ਕੇ ਦੇਖਣ ਲਈ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰੋ"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC ਵਰਤਣ ਲਈ ਅਣਲਾਕ ਕਰੋ"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"ਇਹ ਡੀਵਾਈਸ ਤੁਹਾਡੀ ਸੰਸਥਾ ਨਾਲ ਸੰਬੰਧਿਤ ਹੈ"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"ਇਹ ਡੀਵਾਈਸ <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> ਨਾਲ ਸੰਬੰਧਿਤ ਹੈ"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"ਕੀ ਵਰਤੋਂਕਾਰ ਹਟਾਉਣਾ ਹੈ?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"ਇਸ ਉਪਭੋਗਤਾ ਦੇ ਸਾਰੇ ਐਪਸ ਅਤੇ  ਡਾਟਾ  ਮਿਟਾ ਦਿੱਤਾ ਜਾਏਗਾ।"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"ਹਟਾਓ"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਕੋਲ ਬਾਕੀ ਸਾਰੀ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ ਹੋਵੇਗੀ ਜੋ ਕਿ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਖਣਯੋਗ ਹੈ ਜਾਂ ਰਿਕਾਰਡਿੰਗ ਜਾਂ ਕਾਸਟ ਕਰਨ ਵੇਲੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚਲਾਈ ਜਾਂਦੀ ਹੈ। ਇਸ ਵਿੱਚ ਪਾਸਵਰਡ, ਭੁਗਤਾਨ ਵੇਰਵੇ, ਫ਼ੋਟੋਆਂ, ਸੁਨੇਹੇ ਅਤੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਚਲਾਏ ਆਡੀਓ ਦੀ ਜਾਣਕਾਰੀ ਸ਼ਾਮਲ ਹੁੰਦੀ ਹੈ।"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"ਇਹ ਫੰਕਸ਼ਨ ਮੁਹੱਈਆ ਕਰਵਾਉਣ ਵਾਲੀ ਸੇਵਾ ਕੋਲ, ਰਿਕਾਰਡ ਜਾਂ ਕਾਸਟ ਕਰਨ ਵੇਲੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਦਿਖਣਯੋਗ ਜਾਂ ਚਲਾਈ ਜਾਣ ਵਾਲੀ ਸਾਰੀ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ ਹੋਵੇਗੀ ਜੋ। ਇਸ ਵਿੱਚ ਪਾਸਵਰਡ, ਭੁਗਤਾਨ ਵੇਰਵੇ, ਫ਼ੋਟੋਆਂ, ਸੁਨੇਹੇ ਅਤੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਚਲਾਈ ਆਡੀਓ ਦੀ ਜਾਣਕਾਰੀ ਸ਼ਾਮਲ ਹੁੰਦੀ ਹੈ।"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"ਕੀ ਰਿਕਾਰਡ ਜਾਂ ਕਾਸਟ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰਨਾ ਹੈ?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਨਾਲ ਰਿਕਾਰਡਿੰਗ ਜਾਂ ਕਾਸਟ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰਨਾ ਹੈ?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"ਕੀ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਜਾਂ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"ਪੂਰੀ ਸਕ੍ਰੀਨ"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"ਇਕਹਿਰੀ ਐਪ"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਾਂਝਾ ਕਰਨ, ਰਿਕਾਰਡ ਕਰਨ, ਜਾਂ ਕਾਸਟ ਕਰਨ \'ਤੇ, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਕੋਲ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਸਦੀ ਜਾਂ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚਲਾਈ ਗਈ ਹਰੇਕ ਚੀਜ਼ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ ਜਾਂ ਹੋਰ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਣਕਾਰੀ ਸੰਬੰਧੀ ਸਾਵਧਾਨ ਰਹੋ।"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਾਂਝਾ ਕਰਨ, ਰਿਕਾਰਡ ਕਰਨ, ਜਾਂ ਕਾਸਟ ਕਰਨ \'ਤੇ, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਕੋਲ ਉਸ ਐਪ \'ਤੇ ਦਿਖਾਈ ਗਈ ਜਾਂ ਚਲਾਈ ਗਈ ਹਰੇਕ ਚੀਜ਼ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ ਜਾਂ ਹੋਰ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਣਕਾਰੀ ਸੰਬੰਧੀ ਸਾਵਧਾਨ ਰਹੋ।"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"ਜਾਰੀ ਰੱਖੋ"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"ਐਪ ਨੂੰ ਸਾਂਝਾ ਕਰੋ ਜਾਂ ਰਿਕਾਰਡ ਕਰੋ"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"ਕੀ ਇਸ ਐਪ ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਜਾਂ ਰਿਕਾਰਡ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਾਂਝਾ ਕਰਨ, ਰਿਕਾਰਡ ਕਰਨ, ਜਾਂ ਕਾਸਟ ਕਰਨ \'ਤੇ, ਇਸ ਐਪ ਕੋਲ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਸਦੀ ਜਾਂ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚਲਾਈ ਗਈ ਹਰੇਕ ਚੀਜ਼ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ ਜਾਂ ਹੋਰ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਣਕਾਰੀ ਸੰਬੰਧੀ ਸਾਵਧਾਨ ਰਹੋ।"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਾਂਝਾ ਕਰਨ, ਰਿਕਾਰਡ ਕਰਨ, ਜਾਂ ਕਾਸਟ ਕਰਨ \'ਤੇ, ਇਸ ਐਪ ਕੋਲ ਉਸ ਐਪ \'ਤੇ ਦਿਖਾਈ ਗਈ ਜਾਂ ਚਲਾਈ ਗਈ ਹਰੇਕ ਚੀਜ਼ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ ਜਾਂ ਹੋਰ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਣਕਾਰੀ ਸੰਬੰਧੀ ਸਾਵਧਾਨ ਰਹੋ।"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਕੋਲ ਬਾਕੀ ਸਾਰੀ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ ਹੋਵੇਗੀ ਜੋ ਕਿ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਖਣਯੋਗ ਹੈ ਜਾਂ ਰਿਕਾਰਡਿੰਗ ਜਾਂ ਕਾਸਟ ਕਰਨ ਵੇਲੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚਲਾਈ ਜਾਂਦੀ ਹੈ। ਇਸ ਵਿੱਚ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਫ਼ੋਟੋਆਂ, ਸੁਨੇਹਿਆਂ ਅਤੇ ਤੁਹਾਡੇ ਚਲਾਈ ਜਾਣ ਵਾਲੀ ਆਡੀਓ ਦੀ ਜਾਣਕਾਰੀ ਸ਼ਾਮਲ ਹੈ।"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"ਕੀ ਰਿਕਾਰਡਿੰਗ ਜਾਂ ਕਾਸਟ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰਨਾ ਹੈ?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"ਇਸ ਫੰਕਸ਼ਨ ਦੇ ਸੇਵਾ ਪ੍ਰਦਾਨਕ ਕੋਲ ਬਾਕੀ ਸਾਰੀ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ ਹੋਵੇਗੀ ਜੋ ਕਿ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਖਣਯੋਗ ਹੁੰਦੀ ਹੈ ਜਾਂ ਰਿਕਾਰਡਿੰਗ ਜਾਂ ਕਾਸਟ ਕਰਨ ਵੇਲੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚਲਾਈ ਜਾਂਦੀ ਹੈ। ਇਸ ਵਿੱਚ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਫ਼ੋਟੋਆਂ, ਸੁਨੇਹਿਆਂ ਅਤੇ ਤੁਹਾਡੇ ਚਲਾਈ ਜਾਣ ਵਾਲੀ ਆਡੀਓ ਦੀ ਜਾਣਕਾਰੀ ਸ਼ਾਮਲ ਹੈ।"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"ਪੂਰੀ ਸਕ੍ਰੀਨ"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"ਇਕਹਿਰੀ ਐਪ"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"ਐਪ ਨੂੰ ਸਾਂਝਾ ਕਰੋ ਜਾਂ ਰਿਕਾਰਡ ਕਰੋ"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"ਕੀ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਨਾਲ ਰਿਕਾਰਡਿੰਗ ਜਾਂ ਕਾਸਟ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰਨਾ ਹੈ?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਾਂਝਾ ਕਰਨ, ਰਿਕਾਰਡਿੰਗ ਜਾਂ ਕਾਸਟ ਕਰਨ \'ਤੇ, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਕੋਲ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਖਣ ਵਾਲੀ ਜਾਂ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚਲਾਈ ਜਾਣ ਵਾਲੀ ਹਰੇਕ ਚੀਜ਼ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ, ਫ਼ੋਟੋਆਂ ਅਤੇ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ ਵਰਗੀਆਂ ਚੀਜ਼ਾਂ ਵਾਸਤੇ ਸਾਵਧਾਨ ਰਹੋ।"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਾਂਝਾ ਕਰਨ, ਰਿਕਾਰਡ ਕਰਨ, ਜਾਂ ਕਾਸਟ ਕਰਨ \'ਤੇ, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਕੋਲ ਉਸ ਐਪ \'ਤੇ ਦਿਖਾਈ ਗਈ ਜਾਂ ਚਲਾਈ ਗਈ ਹਰੇਕ ਚੀਜ਼ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ, ਫ਼ੋਟੋਆਂ ਅਤੇ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ ਵਰਗੀਆਂ ਚੀਜ਼ਾਂ ਸੰਬੰਧੀ ਸਾਵਧਾਨ ਰਹੋ।"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"ਸ਼ੁਰੂ ਕਰੋ"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"ਕੀ ਕਾਸਟ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰਨਾ ਹੈ?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਕਾਸਟ ਕਰਨ \'ਤੇ, Android ਕੋਲ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਸਣ ਵਾਲੀ ਜਾਂ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚਲਾਈ ਜਾਣ ਵਾਲੀ ਹਰੇਕ ਚੀਜ਼ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ, ਫ਼ੋਟੋਆਂ ਅਤੇ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ ਵਰਗੀਆਂ ਚੀਜ਼ਾਂ ਵਾਸਤੇ ਸਾਵਧਾਨ ਰਹੋ।"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਕਾਸਟ ਕਰਨ \'ਤੇ, Android ਕੋਲ ਉਸ ਐਪ \'ਤੇ ਦਿਖਾਈ ਗਈ ਜਾਂ ਚਲਾਈ ਗਈ ਹਰੇਕ ਚੀਜ਼ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ, ਫ਼ੋਟੋਆਂ ਅਤੇ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ ਵਰਗੀਆਂ ਚੀਜ਼ਾਂ ਸੰਬੰਧੀ ਸਾਵਧਾਨ ਰਹੋ।"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"ਕਾਸਟ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰੋ"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"ਕੀ ਸਾਂਝਾਕਰਨ ਸ਼ੁਰੂ ਕਰਨਾ ਹੈ?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਾਂਝਾ ਕਰਨ, ਰਿਕਾਰਡ ਕਰਨ, ਜਾਂ ਕਾਸਟ ਕਰਨ \'ਤੇ, Android ਕੋਲ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਸਦੀ ਜਾਂ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਚਲਾਈ ਗਈ ਹਰੇਕ ਚੀਜ਼ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ, ਫ਼ੋਟੋਆਂ ਅਤੇ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ ਵਰਗੀਆਂ ਚੀਜ਼ਾਂ ਵਾਸਤੇ ਸਾਵਧਾਨ ਰਹੋ।"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਾਂਝਾ ਕਰਨ, ਰਿਕਾਰਡ ਕਰਨ, ਜਾਂ ਕਾਸਟ ਕਰਨ \'ਤੇ, Android ਕੋਲ ਉਸ ਐਪ \'ਤੇ ਦਿਖਾਈ ਗਈ ਜਾਂ ਚਲਾਈ ਗਈ ਹਰੇਕ ਚੀਜ਼ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ। ਇਸ ਲਈ ਪਾਸਵਰਡਾਂ, ਭੁਗਤਾਨ ਵੇਰਵਿਆਂ, ਸੁਨੇਹਿਆਂ, ਫ਼ੋਟੋਆਂ ਅਤੇ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ ਵਰਗੀਆਂ ਚੀਜ਼ਾਂ ਸੰਬੰਧੀ ਸਾਵਧਾਨ ਰਹੋ।"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"ਸ਼ੁਰੂ ਕਰੋ"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"ਐਪਾਂ ਸਵਿੱਚ ਕਰਨ \'ਤੇ ਸਾਂਝਾਕਰਨ ਰੁਕ ਜਾਂਦਾ ਹੈ"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"ਇਸਦੀ ਬਜਾਏ ਇਹ ਐਪ ਸਾਂਝੀ ਕਰੋ"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"ਵਾਪਸ ਸਵਿੱਚ ਕਰੋ"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"ਐਪ ਸਵਿੱਚ ਕਰੋ"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"ਤੁਹਾਡੇ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਬਲਾਕ ਕੀਤਾ ਗਿਆ"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"ਡੀਵਾਈਸ ਨੀਤੀ ਦੇ ਕਾਰਨ ਸਕ੍ਰੀਨ ਕੈਪਚਰ ਕਰਨਾ ਬੰਦ ਹੈ"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"ਸਭ ਕਲੀਅਰ ਕਰੋ"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"ਇੱਕ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਅਥਾਰਟੀ ਇਸ ਡੀਵਾਈਸ \'ਤੇ ਸਥਾਪਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਤੁਹਾਡੇ ਸੁਰੱਖਿਅਤ ਨੈੱਟਵਰਕ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ ਜਾਂ ਉਸਨੂੰ ਸੋਧਿਆ ਜਾ ਸਕਦਾ ਹੈ।"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਨੈੱਟਵਰਕ ਲੌਗਿੰਗ ਨੂੰ ਚਾਲੂ ਕੀਤਾ ਹੋਇਆ ਹੈ, ਜੋ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕਰਦਾ ਹੈ।"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਨੈੱਟਵਰਕ ਲੌਗ-ਇਨ ਨੂੰ ਚਾਲੂ ਕੀਤਾ ਹੋਇਆ ਹੈ, ਜੋ ਤੁਹਾਡੇ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਵਿੱਚ ਟਰੈਫ਼ਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕਰਦਾ ਹੈ ਪਰ ਤੁਹਾਡੀ ਨਿੱਜੀ ਪ੍ਰੋਫਾਈਲ ਵਿੱਚ ਨਹੀਂ।"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"ਇਹ ਡੀਵਾਈਸ <xliff:g id="VPN_APP">%1$s</xliff:g> ਰਾਹੀਂ ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਹੈ। ਈਮੇਲਾਂ ਅਤੇ ਬ੍ਰਾਊਜ਼ਿੰਗ ਡਾਟੇ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਤੁਹਾਡੇ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਦਿਸਦੀ ਹੈ।"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"ਇਹ ਡੀਵਾਈਸ <xliff:g id="VPN_APP">%1$s</xliff:g> ਰਾਹੀਂ ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਹੈ। ਈਮੇਲਾਂ ਅਤੇ ਬ੍ਰਾਊਜ਼ਿੰਗ ਡਾਟੇ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ VPN ਪ੍ਰਦਾਨਕ ਨੂੰ ਦਿਸਦੀ ਹੈ।"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"ਇਹ ਡੀਵਾਈਸ <xliff:g id="VPN_APP">%1$s</xliff:g> ਰਾਹੀਂ ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਹੈ। ਈਮੇਲਾਂ ਅਤੇ ਬ੍ਰਾਊਜ਼ਿੰਗ ਡਾਟੇ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਤੁਹਾਡੇ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਦਿਸਦੀ ਹੈ।"</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"ਇਹ ਡੀਵਾਈਸ <xliff:g id="VPN_APP_0">%1$s</xliff:g> ਅਤੇ <xliff:g id="VPN_APP_1">%2$s</xliff:g> ਰਾਹੀਂ ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਹੈ। ਈਮੇਲਾਂ ਅਤੇ ਬ੍ਰਾਊਜ਼ਿੰਗ ਡਾਟੇ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਤੁਹਾਡੇ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਦਿਸਦੀ ਹੈ।"</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"ਤੁਹਾਡੀਆਂ ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ <xliff:g id="VPN_APP">%1$s</xliff:g> ਰਾਹੀਂ ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਹਨ। ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਵਿੱਚ ਈਮੇਲਾਂ ਅਤੇ ਬ੍ਰਾਊਜ਼ਿੰਗ ਡਾਟੇ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਤੁਹਾਡੇ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਅਤੇ VPN ਪ੍ਰਦਾਨਕ ਨੂੰ ਦਿਸਦੀ ਹੈ।"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"ਤੁਹਾਡੀਆਂ ਨਿੱਜੀ ਐਪਾਂ <xliff:g id="VPN_APP">%1$s</xliff:g> ਰਾਹੀਂ ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਹਨ। ਈਮੇਲਾਂ ਅਤੇ ਬ੍ਰਾਊਜ਼ਿੰਗ ਡਾਟੇ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਤੁਹਾਡੇ VPN ਪ੍ਰਦਾਨਕ ਨੂੰ ਦਿਸਦੀ ਹੈ।"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"ਬੰਦ ਕਰੋ"</string>
     <string name="sound_settings" msgid="8874581353127418308">"ਧੁਨੀ ਅਤੇ ਥਰਥਰਾਹਟ"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ਸੈਟਿੰਗਾਂ"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ਸੁਰੱਖਿਅਤ ਸੀਮਾ ਤੱਕ ਅਵਾਜ਼ ਨੂੰ ਘਟਾਇਆ ਗਿਆ"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"ਅਵਾਜ਼ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੇ ਸਮੇਂ ਤੋਂ ਲੰਮੇ ਸਮੇਂ ਤੱਕ ਉੱਚੀ ਰਹੀ ਹੈ"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"ਅਵਾਜ਼ ਨੂੰ ਜ਼ਿਆਦਾ ਸੁਰੱਖਿਅਤ ਪੱਧਰ ਤੱਕ ਘੱਟ ਕੀਤਾ ਗਿਆ"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"ਹੈੱਡਫ਼ੋਨ ਦੀ ਅਵਾਜ਼ ਸਿਫ਼ਾਰਸ਼ੀ ਪੱਧਰ ਨਾਲੋਂ ਜ਼ਿਆਦਾ ਲੰਬੇ ਸਮੇਂ ਤੱਕ ਉੱਚੀ ਰਹੀ"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"ਹੈੱਡਫ਼ੋਨ ਦੀ ਅਵਾਜ਼ ਇਸ ਹਫ਼ਤੇ ਦੀ ਸੁਰੱਖਿਅਤ ਸੀਮਾ ਨੂੰ ਪਾਰ ਕਰ ਗਈ"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"ਸੁਣਦੇ ਰਹੋ"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"ਅਵਾਜ਼ ਘਟਾਓ"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"ਐਪ ਨੂੰ ਪਿੰਨ ਕੀਤਾ ਗਿਆ ਹੈ"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"ਇਹ ਇਸ ਨੂੰ ਤਦ ਤੱਕ ਦ੍ਰਿਸ਼ ਵਿੱਚ ਰੱਖਦਾ ਹੈ ਜਦ ਤੱਕ ਤੁਸੀਂ ਅਨਪਿੰਨ ਨਹੀਂ ਕਰਦੇ। ਅਨਪਿੰਨ ਕਰਨ ਲਈ \'ਪਿੱਛੇ\' ਅਤੇ \'ਰੂਪ-ਰੇਖਾ\' ਨੂੰ ਸਪੱਰਸ਼ ਕਰੋ ਅਤੇ ਦਬਾ ਕੇ ਰੱਖੋ।"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਅਨਪਿੰਨ ਕੀਤੇ ਜਾਣ ਤੱਕ ਇਸਨੂੰ ਦਿਖਾਇਆ ਜਾਂਦਾ ਹੈ। ਅਨਪਿੰਨ ਕਰਨ ਲਈ \'ਪਿੱਛੇ\' ਅਤੇ \'ਹੋਮ\' ਨੂੰ ਸਪਰਸ਼ ਕਰਕੇ ਰੱਖੋ।"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"ਪਾਵਰ ਮੀਨੂ"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g> ਦਾ <xliff:g id="ID_1">%1$d</xliff:g> ਪੰਨਾ"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">" ਲਾਕ  ਸਕ੍ਰੀਨ"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"ਗਰਮ ਹੋਣ ਕਾਰਨ ਫ਼ੋਨ ਬੰਦ ਹੋ ਗਿਆ"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਹੁਣ ਸਹੀ ਚੱਲ ਰਿਹਾ ਹੈ।\nਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ ਟੈਪ ਕਰੋ"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">\n"ਤੁਹਾਡਾ ਫ਼ੋਨ ਬਹੁਤ ਗਰਮ ਸੀ, ਇਸ ਲਈ ਇਹ ਠੰਡਾ ਹੋਣ ਵਾਸਤੇ ਬੰਦ ਹੋ ਗਿਆ ਸੀ। ਤੁਹਾਡਾ ਫ਼ੋਨ ਹੁਣ ਸਹੀ ਚੱਲ ਰਿਹਾ ਹੈ।\n\nਤੁਹਾਡਾ ਫ਼ੋਨ ਬਹੁਤ ਗਰਮ ਹੋ ਸਕਦਾ ਹੈ ਜੇ:\n	• ਤੁਸੀਂ ਸਰੋਤਾਂ ਦੀ ਵੱਧ ਵਰਤੋਂ ਵਾਲੀਆਂ ਐਪਾਂ (ਜਿਵੇਂ ਗੇਮਿੰਗ, ਵੀਡੀਓ, ਜਾਂ ਦਿਸ਼ਾ-ਨਿਰਦੇਸ਼ ਐਪਾਂ) ਵਰਤਦੇ ਹੋ 	• ਵੱਡੀਆਂ ਫ਼ਾਈਲਾਂ ਡਾਊਨਲੋਡ ਜਾਂ ਅੱਪਲੋਡ ਕਰਦੇ ਹੋ\n	• ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਉੱਚ ਤਾਪਮਾਨਾਂ ਵਿੱਚ ਵਰਤਦੇ ਹੋ"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"ਦੇਖਭਾਲ ਦੇ ਪੜਾਅ ਦੇਖੋ"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"ਫ਼ੋਨ ਗਰਮ ਹੋ ਰਿਹਾ ਹੈ"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"ਫ਼ੋਨ ਦੇ ਠੰਡਾ ਹੋਣ ਦੇ ਦੌਰਾਨ ਕੁਝ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਸੀਮਤ ਹੁੰਦੀਆਂ ਹਨ।\nਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ ਟੈਪ ਕਰੋ"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਸਵੈਚਲਿਤ ਰੂਪ ਵਿੱਚ ਠੰਡਾ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੇਗਾ। ਤੁਸੀਂ ਹਾਲੇ ਵੀ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਵਰਤ ਸਕਦੇ ਹੋ, ਪਰੰਤੂ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਇਹ ਵਧੇਰੇ ਹੌਲੀ ਚੱਲੇ।\n\nਇੱਕ ਵਾਰ ਠੰਡਾ ਹੋਣ ਤੋਂ ਬਾਅਦ ਤੁਹਾਡਾ ਫ਼ੋਨ ਸਧਾਰਨ ਤੌਰ \'ਤੇ ਚੱਲੇਗਾ।"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"ਦੇਖਭਾਲ ਦੇ ਪੜਾਅ ਦੇਖੋ"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"ਆਪਣਾ ਡੀਵਾਈਸ ਅਣਪਲੱਗ ਕਰੋ"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਚਾਰਜਿੰਗ ਪੋਰਟ ਦੇ ਨੇੜੇ ਗਰਮ ਹੋ ਰਿਹਾ ਹੈ। ਜੇ ਇਹ ਕਿਸੇ ਚਾਰਜਰ ਜਾਂ USB ਐਕਸੈਸਰੀ ਨਾਲ ਕਨੈਕਟ ਹੈ, ਤਾਂ ਇਸਨੂੰ ਅਣਪਲੱਗ ਕਰੋ ਅਤੇ ਸਾਵਧਾਨ ਰਹੋ, ਕਿਉਂਕਿ ਕੇਬਲ ਵੀ ਗਰਮ ਹੋ ਸਕਦੀ ਹੈ।"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ਪੂਰੀ ਸਕ੍ਰੀਨ ਨੂੰ ਵੱਡਦਰਸ਼ੀ ਕਰੋ"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ਸਕ੍ਰੀਨ ਦੇ ਹਿੱਸੇ ਨੂੰ ਵੱਡਾ ਕਰੋ"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"ਵੱਡਦਰਸ਼ੀਕਰਨ ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"ਵੱਡਦਰਸ਼ੀਕਰਨ ਸੈਟਿੰਗਾਂ ਬੰਦ ਕਰੋ"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"ਆਕਾਰ ਬਦਲਣ ਲਈ ਕੋਨਾ ਘਸੀਟੋ"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"ਟੇਡੀ ਦਿਸ਼ਾ ਵਿੱਚ ਸਕ੍ਰੋਲ ਕਰਨ ਦਿਓ"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"ਆਕਾਰ ਬਦਲੋ"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ਮਨਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> ਸਥਾਨ \'ਤੇ ਲਿਜਾਓ"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"ਕੰਟਰੋਲ"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"ਤੇਜ਼ੀ ਨਾਲ ਪਹੁੰਚ ਕਰਨ ਲਈ ਡੀਵਾਈਸ ਕੰਟਰੋਲਾਂ ਨੂੰ ਚੁਣੋ"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"ਕੰਟਰੋਲਾਂ ਨੂੰ ਮੁੜ-ਵਿਵਸਥਿਤ ਕਰਨ ਲਈ ਫੜ੍ਹ ਕੇ ਘਸੀਟੋ"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"ਸਾਰੇ ਕੰਟਰੋਲ ਹਟਾਏ ਗਏ"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ਤਬਦੀਲੀਆਂ ਨੂੰ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਗਿਆ"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"ਕੋਈ ਹੋਰ ਪਿੰਨ ਵਰਤ ਕੇ ਦੇਖੋ"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> ਲਈ ਤਬਦੀਲੀ ਦੀ ਤਸਦੀਕ ਕਰੋ"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"ਹੋਰ ਦੇਖਣ ਲਈ ਸਵਾਈਪ ਕਰੋ"</string>
+    <string name="retry_face" msgid="416380073082560186">"ਚਿਹਰਾ ਪ੍ਰਮਾਣੀਕਰਨ ਦੀ ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"ਸਿਫ਼ਾਰਸ਼ਾਂ ਲੋਡ ਹੋ ਰਹੀਆਂ ਹਨ"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"ਮੀਡੀਆ"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਲਈ ਇਹ ਮੀਡੀਆ ਕੰਟਰੋਲ ਲੁਕਾਉਣਾ ਹੈ?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"ਸੈਟਿੰਗਾਂ"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> ਤੋਂ <xliff:g id="ARTIST_NAME">%2$s</xliff:g> ਦਾ <xliff:g id="SONG_NAME">%1$s</xliff:g> ਚੱਲ ਰਿਹਾ ਹੈ"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g> ਵਿੱਚੋਂ <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਚੱਲ ਰਿਹਾ ਹੈ"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"ਚਲਾਓ"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"ਰੋਕੋ"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"ਪਿਛਲਾ ਟਰੈਕ"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"ਸਪੀਕਰ ਅਤੇ ਡਿਸਪਲੇਆਂ"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"ਸੁਝਾਏ ਗਏ ਡੀਵਾਈਸ"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"ਮੀਡੀਆ ਨੂੰ ਕਿਸੇ ਹੋਰ ਡੀਵਾਈਸ \'ਤੇ ਲਿਜਾਉਣ ਲਈ ਆਪਣੇ ਸਾਂਝੇ ਕੀਤੇ ਸੈਸ਼ਨ ਨੂੰ ਬੰਦ ਕਰੋ"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"ਬੰਦ ਕਰੋ"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"ਪ੍ਰਸਾਰਨ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"ਪ੍ਰਸਾਰਨ"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"ਅਨੁਰੂਪ ਬਲੂਟੁੱਥ ਡੀਵਾਈਸਾਂ ਨਾਲ ਨਜ਼ਦੀਕੀ ਲੋਕ ਤੁਹਾਡੇ ਵੱਲੋਂ ਪ੍ਰਸਾਰਨ ਕੀਤੇ ਜਾ ਰਹੇ ਮੀਡੀਆ ਨੂੰ ਸੁਣ ਸਕਦੇ ਹਨ"</string>
@@ -981,12 +1009,12 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"ਘੱਟੋ-ਘੱਟ 4 ਅੱਖਰ-ਚਿੰਨ੍ਹ ਵਰਤੋ"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"16 ਤੋਂ ਘੱਟ ਅੱਖਰ-ਚਿੰਨ੍ਹ ਵਰਤੋ"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g> ਤੋਂ ਘੱਟ ਅੱਖਰ-ਚਿੰਨ੍ਹ ਵਰਤੋ"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"ਬਿਲਡ ਨੰਬਰ"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"ਬਿਲਡ ਨੰਬਰ ਨੂੰ ਕਲਿੱਪਬੋਰਡ \'ਤੇ ਕਾਪੀ ਕੀਤਾ ਗਿਆ।"</string>
     <string name="basic_status" msgid="2315371112182658176">"ਗੱਲਬਾਤ ਖੋਲ੍ਹੋ"</string>
     <string name="select_conversation_title" msgid="6716364118095089519">"ਗੱਲਬਾਤ ਵਿਜੇਟ"</string>
-    <string name="select_conversation_text" msgid="3376048251434956013">"ਆਪਣੀ ਹੋਮ ਸਕ੍ਰੀਨ \'ਤੇ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਕੋਈ ਗੱਲਬਾਤ ਚੁਣੋ"</string>
+    <string name="select_conversation_text" msgid="3376048251434956013">"ਆਪਣੀ ਹੋਮ ਸਕ੍ਰੀਨ \'ਤੇ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਕਿਸੇ ਗੱਲਬਾਤ \'ਤੇ ਟੈਪ ਕਰੋ"</string>
     <string name="no_conversations_text" msgid="5354115541282395015">"ਤੁਹਾਡੀਆਂ ਹਾਲੀਆ ਗੱਲਾਂਬਾਤਾਂ ਇੱਥੇ ਦਿਸਣਗੀਆਂ"</string>
     <string name="priority_conversations" msgid="3967482288896653039">"ਤਰਜੀਹੀ ਗੱਲਾਂਬਾਤਾਂ"</string>
     <string name="recent_conversations" msgid="8531874684782574622">"ਹਾਲੀਆ ਗੱਲਾਂਬਾਤਾਂ"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"ਤੁਹਾਡੇ ਬੈਟਰੀ ਮੀਟਰ ਨੂੰ ਪੜ੍ਹਨ ਵਿੱਚ ਸਮੱਸਿਆ ਹੋ ਰਹੀ ਹੈ"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ ਟੈਪ ਕਰੋ"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"ਕੋਈ ਅਲਾਰਮ ਸੈੱਟ ਨਹੀਂ"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ਸਕ੍ਰੀਨ ਲਾਕ ਦਾਖਲ ਕਰੋ"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"ਪ੍ਰਮਾਣਿਤ ਕਰੋ"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"ਡੀਵਾਈਸ ਵਿੱਚ ਦਾਖਲ ਹੋਵੋ"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant ਸੁਣ ਰਹੀ ਹੈ"</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="note_task_button_label" msgid="8718616095800343136">"ਨੋਟ ਬਣਾਉਣਾ"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"ਨੋਟ ਬਣਾਉਣਾ"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"ਨੋਟ ਬਣਾਉਣਾ, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"ਹੋਰ ਜਾਣੋ"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"<xliff:g id="URL">%s</xliff:g> \'ਤੇ ਹੋਰ ਜਾਣੋ"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> ਖੋਲ੍ਹੋ"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• ਐਪ ਦਾ ਸੈੱਟਅੱਪ ਹੋ ਗਿਆ ਹੈ"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• ਘੱਟੋ-ਘੱਟ ਇੱਕ ਕਾਰਡ ਨੂੰ Wallet ਵਿੱਚ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ ਹੈ"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• ਕੈਮਰਾ ਐਪ ਸਥਾਪਤ ਕਰੋ"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• ਐਪ ਦਾ ਸੈੱਟਅੱਪ ਹੋ ਗਿਆ ਹੈ"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• ਘੱਟੋ-ਘੱਟ ਇੱਕ ਡੀਵਾਈਸ ਉਪਲਬਧ ਹੈ"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Wallet ਐਪ ਨੂੰ ਸ਼ਾਰਟਕੱਟ ਵਜੋਂ ਸ਼ਾਮਲ ਕਰਨ ਲਈ, ਪੱਕਾ ਕਰੋ ਕਿ ਐਪ ਸਥਾਪਤ ਹੈ"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Wallet ਐਪ ਨੂੰ ਸ਼ਾਰਟਕੱਟ ਵਜੋਂ ਸ਼ਾਮਲ ਕਰਨ ਲਈ, ਪੱਕਾ ਕਰੋ ਕਿ ਘੱਟੋ-ਘੱਟ ਇੱਕ ਕਾਰਡ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ ਹੈ"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR ਕੋਡ ਸਕੈਨਰ ਨੂੰ ਸ਼ਾਰਟਕੱਟ ਵਜੋਂ ਸ਼ਾਮਲ ਕਰਨ ਲਈ, ਪੱਕਾ ਕਰੋ ਕਿ ਕੈਮਰਾ ਐਪ ਸਥਾਪਤ ਹੈ"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home ਐਪ ਨੂੰ ਸ਼ਾਰਟਕੱਟ ਵਜੋਂ ਸ਼ਾਮਲ ਕਰਨ ਲਈ, ਪੱਕਾ ਕਰੋ ਕਿ ਐਪ ਸਥਾਪਤ ਹੈ"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• ਘੱਟੋ-ਘੱਟ ਇੱਕ ਡੀਵਾਈਸ ਉਪਲਬਧ ਹੈ"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"ਨੋਟ ਬਣਾਉਣ ਵਾਲੇ ਸ਼ਾਰਟਕੱਟ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਨੋਟ ਐਪ ਚੁਣੋ"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"ਐਪ ਚੁਣੋ"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"ਸ਼ਾਰਟਕੱਟ ਨੂੰ ਸਪਰਸ਼ ਕਰ ਕੇ ਰੱਖੋ"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"ਰੱਦ ਕਰੋ"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"ਹੁਣ ਸਕ੍ਰੀਨਾਂ ਨੂੰ ਸਵਿੱਚ ਕਰੋ"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"ਆਪਣੇ ਸਟਾਈਲਸ ਨੂੰ ਚਾਰਜਰ ਨਾਲ ਕਨੈਕਟ ਕਰੋ"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"ਸਟਾਈਲਸ ਦੀ ਬੈਟਰੀ ਘੱਟ ਹੈ"</string>
     <string name="video_camera" msgid="7654002575156149298">"ਵੀਡੀਓ ਕੈਮਰਾ"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"ਇਸ ਪ੍ਰੋਫਾਈਲ ਤੋਂ ਕਾਲ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"ਤੁਹਾਡੀ ਕਾਰਜ ਨੀਤੀ ਤੁਹਾਨੂੰ ਸਿਰਫ਼ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਤੋਂ ਹੀ ਫ਼ੋਨ ਕਾਲਾਂ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"ਕਿਸੇ ਨਿੱਜੀ ਐਪ ਤੋਂ ਕਾਲ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"ਤੁਹਾਡੀ ਸੰਸਥਾ ਤੁਹਾਨੂੰ ਸਿਰਫ਼ ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਤੋਂ ਕਾਲਾਂ ਕਰਨ ਦਿੰਦੀ ਹੈ"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ \'ਤੇ ਜਾਓ"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"ਬੰਦ ਕਰੋ"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"ਕੰਮ ਸੰਬੰਧੀ ਫ਼ੋਨ ਐਪ ਸਥਾਪਤ ਕਰੋ"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"ਰੱਦ ਕਰੋ"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"ਲਾਕ ਸਕ੍ਰੀਨ ਨੂੰ ਵਿਉਂਤਬੱਧ ਕਰੋ"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"ਲਾਕ ਸਕ੍ਰੀਨ ਨੂੰ ਵਿਉਂਤਬੱਧ ਕਰਨ ਲਈ ਅਣਲਾਕ ਕਰੋ"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"ਵਾਈ-ਫਾਈ ਉਪਲਬਧ ਨਹੀਂ"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"ਕੈਮਰਾ ਬਲਾਕ ਕੀਤਾ ਗਿਆ"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"ਕੈਮਰਾ ਅਤੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਬਲਾਕ ਕੀਤੇ ਗਏ"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਬਲਾਕ ਕੀਤਾ ਗਿਆ"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ਤਰਜੀਹ ਮੋਡ ਚਾਲੂ ਹੈ"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant ਧਿਆਨ ਸੁਵਿਧਾ ਨੂੰ ਚਾਲੂ ਹੈ"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜਾ ਕੇ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਨੋਟ ਐਪ ਨੂੰ ਸੈੱਟ ਕਰੋ"</string>
+    <string name="install_app" msgid="5066668100199613936">"ਐਪ ਸਥਾਪਤ ਕਰੋ"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਅਤੇ ਕੈਮਰਾ"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"ਹਾਲ ਹੀ ਵਿੱਚ ਵਰਤੀ ਗਈ ਐਪ"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"ਹਾਲੀਆ ਪਹੁੰਚ ਦੇਖੋ"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"ਹੋ ਗਿਆ"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ ਵਿਕਲਪ ਦਿਖਾਓ"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"ਸਮੇਟੋ"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"ਇਸ ਐਪ ਨੂੰ ਬੰਦ ਕਰੋ"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਬੰਦ ਹੋ ਗਈ"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"ਸੇਵਾ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"ਪਹੁੰਚ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"ਫ਼ੋਨ ਕਾਲ ਵੱਲੋਂ ਵਰਤੋਂ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"ਹਾਲ ਹੀ ਵਿੱਚ ਫ਼ੋਨ ਕਾਲ ਵਿੱਚ ਵਰਤਿਆ ਗਿਆ"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਵੱਲੋਂ ਵਰਤੋਂ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"ਹਾਲ ਹੀ ਵਿੱਚ <xliff:g id="APP_NAME">%1$s</xliff:g> ਵੱਲੋਂ ਵਰਤਿਆ ਗਿਆ"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ਵੱਲੋਂ ਵਰਤੋਂ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"ਹਾਲ ਹੀ ਵਿੱਚ <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ਵੱਲੋਂ ਵਰਤਿਆ ਗਿਆ"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ਵੱਲੋਂ ਵਰਤੋਂ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"ਹਾਲ ਹੀ ਵਿੱਚ <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ਵੱਲੋਂ ਵਰਤਿਆ ਗਿਆ"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pa/strings_tv.xml b/packages/SystemUI/res/values-pa/strings_tv.xml
deleted file mode 100644
index 4939a73..0000000
--- a/packages/SystemUI/res/values-pa/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN ਕਨੈਕਟ ਹੈ"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN ਡਿਸਕਨੈਕਟ ਹੈ"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> ਰਾਹੀਂ"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"ਸੂਚਨਾਵਾਂ"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"ਕੋਈ ਸੂਚਨਾ ਨਹੀਂ"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਰਿਕਾਰਡ ਕਰ ਰਿਹਾ ਹੈ"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"ਕੈਮਰਾ ਰਿਕਾਰਡ ਕਰ ਰਿਹਾ ਹੈ"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"ਕੈਮਰਾ ਅਤੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਰਿਕਾਰਡ ਕਰ ਰਹੇ ਹਨ"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਨੇ ਰਿਕਾਰਡ ਕਰਨਾ ਬੰਦ ਕਰ ਦਿੱਤਾ ਹੈ"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"ਕੈਮਰੇ ਨੇ ਰਿਕਾਰਡ ਕਰਨਾ ਬੰਦ ਕਰ ਦਿੱਤਾ ਹੈ"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"ਕੈਮਰੇ ਅਤੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਨੇ ਰਿਕਾਰਡ ਕਰਨਾ ਬੰਦ ਕਰ ਦਿੱਤਾ ਹੈ"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਸ਼ੁਰੂ ਹੋਈ"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"ਸਕ੍ਰੀਨ ਰਿਕਾਰਡਿੰਗ ਬੰਦ ਹੋਈ"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 499925a..8c0a78e 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Włącz USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Więcej informacji"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Zrzut ekranu"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Wyłączono Extend Unlock"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Wyłączono rozszerzone odblokowanie"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"wysłano obraz"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Zapisywanie zrzutu ekranu..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Zapisuję zrzut ekranu w profilu służbowym…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"Aplikacja <xliff:g id="APPNAME">%1$s</xliff:g> wykryła ten zrzut ekranu."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"Aplikacja <xliff:g id="APPNAME">%1$s</xliff:g> i inne aplikacje wykryły ten zrzut ekranu."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Dodaj do notatek"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Nagrywanie ekranu"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Nagrywanie ekranu"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Przetwarzam nagrywanie ekranu"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Stałe powiadomienie o sesji rejestrowania zawartości ekranu"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Rozpocząć nagrywanie?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Podczas nagrywania system Android może rejestrować wszelkie informacje poufne wyświetlane na ekranie lub odtwarzane na urządzeniu. Dotyczy to m.in. haseł, szczegółów płatności, zdjęć, wiadomości i odtwarzanych dźwięków."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Nagrywaj cały ekran"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Nagrywaj pojedynczą aplikację"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Podczas nagrywania Android ma dostęp do wszystkiego, co jest widoczne na ekranie lub odtwarzane na urządzeniu. Zachowaj ostrożność w przypadku haseł, danych do płatności, wiadomości i innych informacji poufnych."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Podczas nagrywania treści z aplikacji Android ma dostęp do wszystkiego, co jest w niej wyświetlane lub odtwarzane. Zachowaj ostrożność w przypadku haseł, danych do płatności, wiadomości i innych informacji poufnych."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Zacznij nagrywać"</string>
-    <string name="screenrecord_audio_label" msgid="6183558856175159629">"Nagraj dźwięk"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Rozpocząć nagrywanie?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Podczas nagrywania Android ma dostęp do wszystkiego, co jest widoczne na ekranie lub odtwarzane na urządzeniu. Dlatego zachowaj ostrożność w zakresie haseł, danych do płatności, wiadomości, zdjęć, audio i filmów."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Podczas nagrywania treści z aplikacji Android ma dostęp do wszystkiego, co jest w niej wyświetlane lub odtwarzane. Dlatego zachowaj ostrożność w zakresie haseł, danych do płatności, wiadomości, zdjęć, audio i filmów."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Zacznij nagrywać"</string>
+    <string name="screenrecord_audio_label" msgid="6183558856175159629">"Nagrywaj dźwięk"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Dźwięki z urządzenia"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Dźwięki odtwarzane na urządzeniu, na przykład muzyka, połączenia i dzwonki"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Mikrofon i dźwięki z urządzenia"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Rozpocznij"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Rozpocznij"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Rejestruję zawartość ekranu"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Rejestruje zawartość ekranu i dźwięki odtwarzane na urządzeniu"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Pokazuj dotknięcia ekranu"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Udostępnij"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Zapisano nagranie zawartości ekranu"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Kliknij, aby wyświetlić"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Błąd podczas usuwania nagrania zawartości ekranu"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Podczas zapisywania nagrania ekranu wystąpił błąd"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Błąd podczas rozpoczynania rejestracji zawartości ekranu"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Włączony pełny ekran"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Aby wyjść, przesuń palcem z góry na dół."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"OK"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Wróć"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Ekran główny"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Twarz rozpoznana"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Potwierdzono"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Aby zakończyć, kliknij Potwierdź"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Odblokowano skanem twarzy. Aby kontynuować, kliknij ikonę odblokowywania."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Odblokowano skanem twarzy"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Odblokowano rozpoznawaniem twarzy. Kliknij, aby kontynuować."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Twarz rozpoznana. Kliknij, aby kontynuować."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Twarz rozpoznana. Aby kontynuować, kliknij ikonę odblokowywania."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Uwierzytelniono"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Anuluj uwierzytelnianie"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Użyj kodu PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Użyj wzoru"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Użyj hasła"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Jeśli następnym razem podasz nieprawidłowy wzór, profil służbowy oraz powiązane z nim dane zostaną usunięte."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Jeśli następnym razem podasz nieprawidłowy kod PIN, profil służbowy oraz powiązane z nim dane zostaną usunięte."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Jeśli następnym razem podasz nieprawidłowe hasło, profil służbowy oraz powiązane z nim dane zostaną usunięte."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Skonfiguruj"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Nie teraz"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Jest to wymagane dla podniesienia poziomu bezpieczeństwa i wydajności"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Skonfiguruj ponownie odblokowywanie odciskiem palca"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Odblokowywanie odciskiem palca"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Skonfiguruj odblokowywanie odciskiem palca"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Bieżące obrazy i modele odcisku palca zostaną usunięte, aby można było ponownie skonfigurować odblokowywanie odciskiem palca.\n\nAby odblokowywać telefon i potwierdzać tożsamość odciskiem palca, musisz ponownie skonfigurować odblokowywanie odciskiem palca."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Bieżące obrazy i modele odcisku palca zostaną usunięte, aby można było ponownie skonfigurować odblokowywanie odciskiem palca.\n\nPo ich usunięciu musisz ponownie skonfigurować odblokowywanie odciskiem palca, aby odblokowywać telefon i potwierdzać tożsamość odciskiem palca."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Nie udało się skonfigurować odblokowywania odciskiem palca. Przejdź do ustawień, aby spróbować jeszcze raz."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Skonfiguruj ponownie rozpoznawanie twarzy"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Rozpoznawanie twarzy"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Skonfiguruj rozpoznawanie twarzy"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Bieżący model twarzy zostanie usunięty, aby można było ponownie skonfigurować rozpoznawanie twarzy.\n\nAby odblokowywać telefon skanem twarzy, musisz ponownie skonfigurować tę funkcję."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Nie udało się skonfigurować rozpoznawania twarzy. Przejdź do ustawień, aby spróbować jeszcze raz."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Dotknij czytnika linii papilarnych"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Aby kontynuować, kliknij ikonę odblokowywania"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Nie rozpoznaję twarzy. Użyj odcisku palca."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Dźwięk"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Zestaw słuchawkowy"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Wejście"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Aparaty słuchowe"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparaty słuchowe"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Włączam…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autoobracanie"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Autoobracanie ekranu"</string>
@@ -338,7 +354,7 @@
     <string name="zen_silence_introduction" msgid="6117517737057344014">"To zablokuje WSZYSTKIE dźwięki i wibracje – w tym alarmy, muzykę, filmy i gry."</string>
     <string name="notification_tap_again" msgid="4477318164947497249">"Kliknij ponownie, by otworzyć"</string>
     <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" msgid="8031975796351361601">"Aby otworzyć, przesuń w górę"</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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Odblokowano skanem twarzy"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Twarz rozpoznana"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Przesuń w górę, by spróbować ponownie"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Przesuń w górę, aby ponownie użyć rozpoznawania twarzy"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Odblokuj, by użyć komunikacji NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"To urządzenie należy do Twojej organizacji"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Właściciel tego urządzenia: <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Podczas nagrywania i przesyłania aplikacja <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> będzie mieć dostęp do wszystkich informacji widocznych na ekranie lub odtwarzanych na urządzeniu. Dotyczy to m.in. haseł, szczegółów płatności, zdjęć, wiadomości i odtwarzanych dźwięków."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Podczas nagrywania i przesyłania usługa udostępniająca tę funkcję będzie miała dostęp do wszystkich informacji widocznych na ekranie lub odtwarzanych na urządzeniu. Dotyczy to m.in. haseł, szczegółów płatności, zdjęć, wiadomości i odtwarzanych dźwięków."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Rozpocząć nagrywanie lub przesyłanie?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Rozpocząć nagrywanie lub przesyłanie za pomocą aplikacji <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Zezwolić aplikacji <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> na udostępnianie lub nagrywanie?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Cały ekran"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Pojedyncza aplikacja"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Podczas udostępniania, nagrywania lub przesyłania treści aplikacja <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ma dostęp do wszystkiego, co jest widoczne na ekranie lub odtwarzane na urządzeniu. Zachowaj ostrożność w przypadku haseł, danych do płatności, wiadomości i innych informacji poufnych."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Podczas udostępniania, nagrywania lub przesyłania treści aplikacja <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ma dostęp do wszystkiego, co jest w niej wyświetlane lub odtwarzane. Zachowaj ostrożność w przypadku haseł, danych do płatności, wiadomości i innych informacji poufnych."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Dalej"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Udostępnianie i nagrywanie aplikacji"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Zezwolić tej aplikacji na udostępnianie lub nagrywanie?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Podczas udostępniania, nagrywania lub przesyłania treści ta aplikacja ma dostęp do wszystkiego, co jest widoczne na ekranie lub odtwarzane na urządzeniu. Zachowaj ostrożność w przypadku haseł, danych do płatności, wiadomości i innych informacji poufnych."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Podczas udostępniania, nagrywania lub przesyłania treści ta aplikacja ma dostęp do wszystkiego, co jest w niej wyświetlane lub odtwarzane. Zachowaj ostrożność w przypadku haseł, danych do płatności, wiadomości i innych informacji poufnych."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Podczas nagrywania i przesyłania aplikacja <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> będzie mieć dostęp do wszystkich informacji widocznych na ekranie lub odtwarzanych na urządzeniu. Dotyczy to m.in. haseł, szczegółów płatności, zdjęć, wiadomości i odtwarzanych dźwięków."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Rozpocząć nagrywanie lub przesyłanie?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Podczas nagrywania i przesyłania usługa udostępniająca tę funkcję będzie miała dostęp do wszystkich informacji widocznych na ekranie lub odtwarzanych na urządzeniu. Dotyczy to m.in. haseł, szczegółów płatności, zdjęć, wiadomości i odtwarzanych dźwięków."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Cały ekran"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Pojedyncza aplikacja"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Udostępnianie i nagrywanie aplikacji"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Rozpocząć nagrywanie lub przesyłanie za pomocą aplikacji <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Podczas udostępniania, nagrywania lub przesyłania treści aplikacja <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ma dostęp do wszystkiego, co jest widoczne na ekranie lub odtwarzane na urządzeniu. Dlatego zachowaj ostrożność w zakresie haseł, danych do płatności, wiadomości, zdjęć, audio i filmów."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Podczas udostępniania, nagrywania lub przesyłania treści aplikacja <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ma dostęp do wszystkiego, co jest w niej wyświetlane lub odtwarzane. Dlatego zachowaj ostrożność w zakresie haseł, danych do płatności, wiadomości, zdjęć, audio i filmów."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Rozpocznij"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Rozpocząć przesyłanie?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Podczas przesyłania, Android ma dostęp do wszystkiego, co jest widoczne na ekranie lub odtwarzane na urządzeniu. Dlatego zachowaj ostrożność w zakresie haseł, danych do płatności, wiadomości, zdjęć, audio i filmów."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Podczas przesyłania treści z aplikacji Android ma dostęp do wszystkiego, co jest w niej wyświetlane lub odtwarzane. Dlatego zachowaj ostrożność w zakresie haseł, danych do płatności, wiadomości, zdjęć, audio i filmów."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Rozpocznij przesyłanie"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Rozpocząć udostępnianie?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Podczas udostępniania, nagrywania lub przesyłania treści Android ma dostęp do wszystkiego, co jest widoczne na ekranie lub odtwarzane na urządzeniu. Dlatego zachowaj ostrożność w zakresie haseł, danych do płatności, wiadomości, zdjęć, audio i filmów."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Podczas udostępniania, nagrywania lub przesyłania treści Android ma dostęp do wszystkiego, co jest w niej wyświetlane lub odtwarzane. Dlatego zachowaj ostrożność w zakresie haseł, danych do płatności, wiadomości, zdjęć, audio i filmów."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Rozpocznij"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Udostępnianie zostanie wstrzymane, gdy przełączysz aplikacje"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Udostępnij tę aplikację"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Wróć"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Przełączanie aplikacji"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Zablokowane przez administratora IT"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Zrzuty ekranu są wyłączone zgodnie z zasadami dotyczącymi urządzeń"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Usuń wszystkie"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Urząd certyfikacji zainstalowany na tym urządzeniu. Twój zabezpieczony ruch w sieci może być monitorowany i zmieniany."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Administrator włączył rejestrowanie sieciowe, które pozwala monitorować ruch na Twoim urządzeniu."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Administrator włączył rejestrowanie sieciowe, które pozwala monitorować ruch na Twoim profilu służbowym, ale nie na profilu osobistym."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"To urządzenie jest połączone z internetem za pomocą aplikacji <xliff:g id="VPN_APP">%1$s</xliff:g>. Twoja aktywność w sieci, w tym poczta e-mail i dane przeglądania, są widoczne dla administratora IT."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"To urządzenie jest połączone z internetem za pomocą aplikacji <xliff:g id="VPN_APP">%1$s</xliff:g>. Twoja aktywność w sieci, w tym poczta e-mail i dane przeglądania, są widoczne dla dostawcy VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"To urządzenie jest połączone z internetem za pomocą aplikacji <xliff:g id="VPN_APP">%1$s</xliff:g>. Twoja aktywność w sieci, w tym poczta e-mail i dane przeglądania, są widoczne dla administratora IT."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"To urządzenie jest połączone z internetem za pomocą aplikacji <xliff:g id="VPN_APP_0">%1$s</xliff:g> i <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Twoja aktywność w sieci, w tym poczta e-mail i dane przeglądania, są widoczne dla administratora IT."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Twoje aplikacje służbowe są połączone z internetem za pomocą aplikacji <xliff:g id="VPN_APP">%1$s</xliff:g>. Twoja aktywność w sieci w aplikacjach służbowych, w tym poczta e-mail i dane przeglądania, są widoczne dla administratora IT i firmy świadczącej usługi VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Twoje aplikacje osobiste są połączone z internetem za pomocą aplikacji <xliff:g id="VPN_APP">%1$s</xliff:g>. Twoja aktywność w sieci, w tym poczta e-mail i dane przeglądania, są widoczne dla firmy świadczącej usługi VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"wyłącz"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Dźwięk i wibracje"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Ustawienia"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Obniżono głośność do bezpieczniejszego poziomu"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Głośność była zbyt duża przez czas dłuższy niż zalecany"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Głośność obniżona do bezpieczniejszego poziomu"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Głośność na słuchawkach jest zbyt duża przez czas dłuższy niż zalecany"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Głośność na słuchawkach przekroczyła limit bezpieczeństwa na ten tydzień"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Słuchaj dalej"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Zmniejsz głośność"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Aplikacja jest przypięta"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Ekran będzie widoczny, dopóki go nie odepniesz. Aby to zrobić, kliknij i przytrzymaj Wstecz oraz Przegląd."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ekran będzie widoczny, dopóki go nie odepniesz. Aby to zrobić, naciśnij i przytrzymaj Wstecz oraz Ekran główny."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menu zasilania"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Strona <xliff:g id="ID_1">%1$d</xliff:g> z <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Ekran blokady"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telefon wyłączony: przegrzanie"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Telefon działa teraz normalnie\nKliknij, by dowiedzieć się więcej"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefon był zbyt gorący i wyłączył się, by obniżyć temperaturę. Urządzenie działa teraz normalnie.\n\nTelefon może się przegrzać, gdy:\n	• Używasz aplikacji zużywających dużo zasobów (np. gier, nawigacji czy odtwarzaczy filmów)\n	• Pobierasz lub przesyłasz duże pliki\n	• Używasz telefonu w wysokiej temperaturze"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Zobacz instrukcję postępowania"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefon się nagrzewa"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Podczas obniżania temperatury telefonu niektóre funkcje są ograniczone\nKliknij, by dowiedzieć się więcej"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Telefon automatycznie podejmie próbę obniżenia temperatury. Możesz go wciąż używać, ale telefon może działać wolniej.\n\nGdy temperatura się obniży, telefon będzie działał normalnie."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Zobacz instrukcję postępowania"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Odłącz urządzenie"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Urządzenie za bardzo się nagrzewa w okolicy gniazda ładowania. Jeśli jest podłączone do ładowarki albo akcesorium USB, odłącz je. Uważaj, bo kabel również może być nagrzany."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Powiększanie pełnego ekranu"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Powiększ część ekranu"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Otwórz ustawienia powiększenia"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Zamknij ustawienia powiększenia"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Przeciągnij róg, aby zmienić rozmiar"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Zezwalaj na przewijanie poprzeczne"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Zmień rozmiar"</string>
@@ -849,7 +874,7 @@
     <string name="accessibility_magnification_right_handle" msgid="9055988237319397605">"Prawy uchwyt"</string>
     <string name="accessibility_magnification_bottom_handle" msgid="6531646968813821258">"Dolny uchwyt"</string>
     <string name="accessibility_magnification_settings_panel_description" msgid="8174187340747846953">"Ustawienia powiększenia"</string>
-    <string name="accessibility_magnifier_size" msgid="3038755600030422334">"Rozmiar powiększania"</string>
+    <string name="accessibility_magnifier_size" msgid="3038755600030422334">"Rozmiar powiększenia"</string>
     <string name="accessibility_magnification_zoom" msgid="4222088982642063979">"Powiększenie"</string>
     <string name="accessibility_magnification_medium" msgid="6994632616884562625">"Średni"</string>
     <string name="accessibility_magnification_small" msgid="8144502090651099970">"Mały"</string>
@@ -885,10 +910,9 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"usunąć z ulubionych"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Przenieś w położenie <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Elementy sterujące"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
-    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Przytrzymaj i przeciągnij, aby przestawić elementy sterujące"</string>
-    <string name="controls_favorite_removed" msgid="5276978408529217272">"Usunięto wszystkie elementy sterujące"</string>
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Wybierz elementy sterowania urządzeniem, do których chcesz mieć szybki dostęp"</string>
+    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Przytrzymaj i przeciągnij elementy sterujące, aby je przestawić"</string>
+    <string name="controls_favorite_removed" msgid="5276978408529217272">"Wszystkie elementy sterujące zostały usunięte"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Zmiany nie zostały zapisane"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Wyświetl pozostałe aplikacje"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Zmień kolejność"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Wpisz inny kod PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Potwierdź zmianę dotyczącą urządzenia <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Przesuń palcem, by zobaczyć więcej"</string>
+    <string name="retry_face" msgid="416380073082560186">"Ponów uwierzytelnianie twarzą"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Wczytuję rekomendacje"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Multimedia"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Ukryć sterowanie multimediami w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Ustawienia"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Aplikacja <xliff:g id="APP_LABEL">%3$s</xliff:g> odtwarza utwór <xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>)"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> z <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> jest uruchomiona"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Odtwórz"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Wstrzymaj"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Poprzedni utwór"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Głośniki i wyświetlacze"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Proponowane urządzenia"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Zatrzymaj udostępnianie sesji, aby przenieść multimedia na inne urządzenie"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Zatrzymaj"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Jak działa transmitowanie"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Transmisja"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Osoby w pobliżu ze zgodnymi urządzeniami Bluetooth mogą słuchać transmitowanych przez Ciebie multimediów"</string>
@@ -981,11 +1009,11 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Nie można zapisać. Spróbuj ponownie."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Nie można zapisać."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Wpisz co najmniej 4 znaki"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Wpisz mniej niż 16 znaków"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Wpisz mniej znaków niż <xliff:g id="LENGTH">%1$d</xliff:g>"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Numer kompilacji"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Numer kompilacji został skopiowany do schowka."</string>
     <string name="basic_status" msgid="2315371112182658176">"Otwarta rozmowa"</string>
-    <string name="select_conversation_title" msgid="6716364118095089519">"Widżety Rozmowa"</string>
+    <string name="select_conversation_title" msgid="6716364118095089519">"Widżety rozmów"</string>
     <string name="select_conversation_text" msgid="3376048251434956013">"Kliknij rozmowę, aby dodać ją do ekranu głównego"</string>
     <string name="no_conversations_text" msgid="5354115541282395015">"Tutaj będą pojawiać się Twoje ostatnie rozmowy"</string>
     <string name="priority_conversations" msgid="3967482288896653039">"Rozmowy priorytetowe"</string>
@@ -1009,11 +1037,11 @@
     <string name="audio_status" msgid="4237055636967709208">"Słucham"</string>
     <string name="game_status" msgid="1340694320630973259">"Odtwarzam"</string>
     <string name="empty_user_name" msgid="3389155775773578300">"Znajomi"</string>
-    <string name="empty_status" msgid="5938893404951307749">"Porozmawiajmy!"</string>
+    <string name="empty_status" msgid="5938893404951307749">"Porozmawiajmy"</string>
     <string name="status_before_loading" msgid="1500477307859631381">"Treść wkrótce będzie widoczna"</string>
     <string name="missed_call" msgid="4228016077700161689">"Nieodebrane połączenie"</string>
     <string name="messages_count_overflow_indicator" msgid="7850934067082006043">"+ <xliff:g id="NUMBER">%d</xliff:g>"</string>
-    <string name="people_tile_description" msgid="8154966188085545556">"Zobacz ostatnie wiadomości, nieodebrane połączenia i stany"</string>
+    <string name="people_tile_description" msgid="8154966188085545556">"Zobacz ostatnie wiadomości, nieodebrane połączenia i aktualizacje statusów"</string>
     <string name="people_tile_title" msgid="6589377493334871272">"Rozmowa"</string>
     <string name="paused_by_dnd" msgid="7856941866433556428">"Wstrzymane przez tryb Nie przeszkadzać"</string>
     <string name="new_notification_text_content_description" msgid="2915029960094389291">"<xliff:g id="NAME">%1$s</xliff:g> wysyła wiadomość: <xliff:g id="NOTIFICATION">%2$s</xliff:g>"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problem z odczytaniem pomiaru wykorzystania baterii"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Kliknij, aby uzyskać więcej informacji"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Nie ustawiono alarmu"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"Wprowadź blokadę ekranu"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Czytnik linii papilarnych"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"uwierzytelnij"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"otwórz urządzenie"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Asystent słucha"</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="note_task_button_label" msgid="8718616095800343136">"Notatki"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Notatki"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Notatki, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1097,15 +1127,17 @@
     <string name="log_access_confirmation_title" msgid="4843557604739943395">"Zezwolić aplikacji <xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> na dostęp do wszystkich dzienników urządzenia?"</string>
     <string name="log_access_confirmation_allow" msgid="752147861593202968">"Zezwól na jednorazowy dostęp"</string>
     <string name="log_access_confirmation_deny" msgid="2389461495803585795">"Nie zezwalaj"</string>
-    <string name="log_access_confirmation_body" msgid="6883031912003112634">"Dzienniki urządzenia zapisują, co dzieje się na urządzeniu. Aplikacje mogą ich używać do wykrywania i rozwiązywania problemów.\n\nNiektóre dzienniki mogą zawierać poufne dane, dlatego na dostęp do wszystkich dzienników zezwalaj tylko aplikacjom, którym ufasz. \n\nNawet jeśli nie zezwolisz tej aplikacji na dostęp do wszystkich dzienników na urządzeniu, będzie mogła korzystać z własnych. Producent urządzenia nadal będzie mógł używać niektórych dzienników na urządzeniu."</string>
+    <string name="log_access_confirmation_body" msgid="6883031912003112634">"Dzienniki urządzenia zapisują, co dzieje się na urządzeniu. Aplikacje mogą ich używać do wykrywania i rozwiązywania problemów.\n\nNiektóre dzienniki mogą zawierać poufne dane, dlatego na dostęp do wszystkich dzienników zezwalaj tylko aplikacjom, którym ufasz. \n\nNawet jeśli nie zezwolisz tej aplikacji na dostęp do wszystkich dzienników na urządzeniu, będzie mogła korzystać z własnych. Producent urządzenia nadal będzie mógł używać niektórych dzienników lub informacji na urządzeniu."</string>
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Więcej informacji"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Więcej informacji: <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Otwórz: <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Aplikacja została skonfigurowana."</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Do Portfela została dodana co najmniej 1 karta."</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Zainstalowano aplikację aparatu."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Aplikacja została skonfigurowana."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Dostępne jest co najmniej 1 urządzenie."</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Aby dodać aplikację Portfel jako skrót, upewnij się, że jest zainstalowana"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Aby dodać aplikację Portfel jako skrót, upewnij się, że została dodana co najmniej 1 karta"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Aby dodać Skaner kodów QR jako skrót, upewnij się, że jest zainstalowana aplikacja aparatu"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Aby dodać aplikację Home jako skrót, upewnij się, że jest zainstalowana"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Dostępne jest co najmniej 1 urządzenie."</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Wybierz domyślną aplikację do obsługi notatek, której skrótu będziesz używać do funkcji notowania"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Wybierz aplikację"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Skrót – naciśnij i przytrzymaj"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Anuluj"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Przełącz ekrany teraz"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Podłącz rysik do ładowarki"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Słaba bateria w rysiku"</string>
     <string name="video_camera" msgid="7654002575156149298">"Kamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Nie można nawiązać połączenia z tego profilu"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Zasady obowiązujące w firmie zezwalają na nawiązywanie połączeń telefonicznych tylko w profilu służbowym"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Nie można nawiązać połączenia z aplikacji osobistej"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Twoja organizacja zezwala na nawiązywanie połączeń tylko z aplikacji służbowych"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Przełącz na profil służbowy"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Zamknij"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Zainstaluj służbową aplikację telefonu"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Anuluj"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Dostosuj ekran blokady"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Odblokuj, aby dostosować ekran blokady"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Sieć Wi-Fi jest niedostępna"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera jest zablokowana"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera i mikrofon są zablokowane"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon jest zablokowany"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Tryb priorytetowy jest włączony"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Asystent jest aktywny"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Ustaw domyślną aplikację do obsługi notatek w Ustawieniach"</string>
+    <string name="install_app" msgid="5066668100199613936">"Zainstaluj aplikację"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon i Aparat"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Aplikacje korzystające w ostatnim czasie"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Zobacz ostatni dostęp"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Gotowe"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Rozwiń i pokaż opcje"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Zwiń"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Zamknij tę aplikację"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Zamknięto aplikację <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Zarządzaj usługą"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Zarządzaj dostępem"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Używany podczas rozmowy telefonicznej"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Ostatnio używany podczas rozmowy telefonicznej"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Używany przez aplikację <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Ostatnio używany przez aplikację <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Używany przez aplikację <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Ostatnio używany przez aplikację <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Używany przez aplikację <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Ostatnio używany przez aplikację <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pl/strings_tv.xml b/packages/SystemUI/res/values-pl/strings_tv.xml
deleted file mode 100644
index 98db830..0000000
--- a/packages/SystemUI/res/values-pl/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"Połączono z VPN"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"Rozłączono z VPN"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Przez: <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Powiadomienia"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Brak powiadomień"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofon rejestruje"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Aparat rejestruje"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Aparat i mikrofon rejestrują"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofon przestał rejestrować"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Aparat przestał rejestrować"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Aparat i mikrofon przestały rejestrować"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Rozpoczęto nagrywanie ekranu"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Zatrzymano nagrywanie ekranu"</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 fb0bb70..ea6ad58 100644
--- a/packages/SystemUI/res/values-pl/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pl/tiles_states_strings.xml
@@ -108,8 +108,8 @@
   </string-array>
   <string-array name="tile_states_work">
     <item msgid="389523503690414094">"Niedostępny"</item>
-    <item msgid="8045580926543311193">"Wyłączony"</item>
-    <item msgid="4913460972266982499">"Włączony"</item>
+    <item msgid="8045580926543311193">"Wyłączono"</item>
+    <item msgid="4913460972266982499">"Włączono"</item>
   </string-array>
   <string-array name="tile_states_cast">
     <item msgid="6032026038702435350">"Niedostępny"</item>
@@ -134,7 +134,7 @@
   <string-array name="tile_states_reduce_brightness">
     <item msgid="1839836132729571766">"Niedostępny"</item>
     <item msgid="4572245614982283078">"Wyłączone"</item>
-    <item msgid="6536448410252185664">"Włączony"</item>
+    <item msgid="6536448410252185664">"Włączone"</item>
   </string-array>
   <string-array name="tile_states_cameratoggle">
     <item msgid="6680671247180519913">"Niedostępny"</item>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 2469f2e..bf976f7 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Ativar USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Saiba mais"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Capturar tela"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock desativado"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Desbloqueio extra desativado"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"enviou uma imagem"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Salvando captura de tela..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Salvando captura de tela no perfil de trabalho…"</string>
@@ -95,23 +95,20 @@
     <string name="screenshot_default_files_app_name" msgid="8721579578575161912">"Files"</string>
     <string name="screenshot_detected_template" msgid="7940376642921719915">"O app <xliff:g id="APPNAME">%1$s</xliff:g> detectou essa captura de tela."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> e outros apps abertos detectaram essa captura de tela."</string>
-    <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Adicionar às notas"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Gravador de tela"</string>
+    <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Incluir anotação"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Gravador de tela"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Processando gravação de tela"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notificação contínua para uma sessão de gravação de tela"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Iniciar gravação?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Durante a gravação, o sistema Android pode capturar informações confidenciais visíveis na tela ou tocadas no dispositivo. Isso inclui senhas, informações de pagamento, fotos, mensagens e áudio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Gravar a tela inteira"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Gravar um app"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Enquanto você grava, o Android tem acesso a todas as informações visíveis na tela ou reproduzidas no dispositivo. Tenha cuidado com senhas, detalhes de pagamento, mensagens ou outras informações sensíveis."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Enquanto você grava um app, o Android tem acesso a todas as informações visíveis ou reproduzidas no app. Tenha cuidado com senhas, detalhes de pagamento, mensagens ou outras informações sensíveis."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Iniciar gravação"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Iniciar gravação?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Enquanto você grava, o Android tem acesso a todas as informações na tela ou reproduzidas no dispositivo. Portanto, tenha cuidado com senhas, detalhes de pagamento, mensagens, fotos, áudios e vídeos."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Enquanto você grava um app, o Android tem acesso a todas as informações visíveis ou reproduzidas nele. Tenha cuidado com senhas, detalhes de pagamento, mensagens fotos, áudios e vídeos."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Iniciar gravação"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Gravar áudio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Áudio do dispositivo"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Sons do dispositivo, como música, chamadas e toques"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Microfone"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Áudio e microfone do dispositivo"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Iniciar"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Início"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Gravando tela"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Gravando tela e áudio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Mostrar toques na tela"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Compartilhar"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Gravação de tela salva"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Toque para ver"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Erro ao excluir a gravação de tela"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Erro ao salvar a gravação da tela"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Erro ao iniciar a gravação de tela"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Visualização em tela cheia"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Para sair, deslize de cima para baixo."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Entendi"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Voltar"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Página inicial"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Rosto autenticado"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmada"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Toque em \"Confirmar\" para concluir"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Desbloqueado pelo rosto. Pressione o ícone de desbloqueio para continuar."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Desbloqueado pelo rosto"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Desbloqueado pelo rosto. Pressione para continuar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Rosto reconhecido. Pressione para continuar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Rosto reconhecido. Pressione o ícone para continuar."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenticado"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Cancelar autenticação"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Usar PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Usar padrão"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Usar senha"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Se você informar um padrão incorreto na próxima tentativa, seu perfil de trabalho e os dados dele serão excluídos."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Se você informar um PIN incorreto na próxima tentativa, seu perfil de trabalho e os dados dele serão excluídos."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Se você informar uma senha incorreta na próxima tentativa, seu perfil de trabalho e os dados dele serão excluídos."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Configurar"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Agora não"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Ação necessária para melhorar a segurança e o desempenho"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Configurar o Desbloqueio por impressão digital de novo"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Desbloqueio por impressão digital"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Configurar o Desbloqueio por impressão digital"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Os modelos e as imagens atuais serão excluídos para reconfigurar o Desbloqueio por impressão digital.\n\nDepois disso, você vai precisar configurar esse recurso de novo para desbloquear o smartphone com o dedo ou confirmar sua identidade."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"O modelo e as imagens atuais serão excluídos para reconfigurar o Desbloqueio por impressão digital.\n\nDepois disso, você vai precisar configurar esse recurso de novo para desbloquear o smartphone com o dedo ou confirmar sua identidade."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Não foi possível configurar o Desbloqueio por impressão digital. Acesse as Configurações e tente de novo."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Configurar o Desbloqueio facial de novo"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Desbloqueio facial"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Configurar o Desbloqueio facial"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"O modelo de rosto atual será excluído para reconfigurar o Desbloqueio facial.\n\nVocê vai precisar configurar esse recurso de novo para desbloquear o smartphone com o rosto."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Não foi possível configurar o Desbloqueio facial. Acesse as Configurações e tente de novo."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Toque no sensor de impressão digital"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Pressione o ícone de desbloqueio para continuar"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Não foi possível reconhecer o rosto Use a impressão digital."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Áudio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Fone de ouvido"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Aparelhos auditivos"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparelhos auditivos"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Ativando…"</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Desbloqueado pelo rosto"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Rosto reconhecido"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Deslize para cima para tentar novamente"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Deslize para cima para usar o Desbloqueio facial e novo"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Desbloqueie para usar a NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Este dispositivo pertence à sua organização"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Este dispositivo pertence à organização <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -364,7 +381,7 @@
     <string name="interruption_level_alarms_twoline" msgid="2045067991335708767">"Somente\nalarmes"</string>
     <string name="keyguard_indication_charging_time_wireless" msgid="577856646141738675">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregando sem fio • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
     <string name="keyguard_indication_charging_time" msgid="6492711711891071502">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregando • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
-    <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga rápida • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+    <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregamento rápido • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
     <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga lenta • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
     <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregando • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Trocar usuário"</string>
@@ -382,23 +399,32 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"O app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> terá acesso a todas as informações visíveis na tela ou tocadas no dispositivo, como gravação ou transmissão. Isso inclui informações como senhas, detalhes de pagamento, fotos, mensagens e o áudio que você tocar."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"O serviço que oferece essa função terá acesso a todas as informações visíveis na tela ou reproduzidas durante uma gravação ou transmissão. Isso inclui senhas, detalhes de pagamento, fotos, mensagens e áudio."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Iniciar gravação ou transmissão?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Iniciar gravação ou transmissão com o app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Permitir que o <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> compartilhe ou grave a tela?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Tela cheia"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Um único app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Quando você compartilha, grava ou transmite a tela, o <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tem acesso a todas as informações visíveis na tela ou reproduzidas no dispositivo. Tenha cuidado com senhas, detalhes de pagamento, mensagens ou outras informações sensíveis."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Quando você compartilha, grava ou transmite um app, o <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tem acesso a todas as informações visíveis na tela ou reproduzidas no dispositivo. Tenha cuidado com senhas, detalhes de pagamento, mensagens ou outras informações sensíveis."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continuar"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Compartilhar ou gravar um app"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Permitir que este app compartilhe ou grave a tela?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Quando você compartilha, grava ou transmite a tela, este app tem acesso a todas as informações visíveis nela ou reproduzidas no dispositivo. Tenha cuidado com senhas, detalhes de pagamento, mensagens e outras informações sensíveis."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Quando você compartilha, grava ou transmite a tela, este app tem acesso a todas as informações visíveis nela ou reproduzidas no dispositivo. Tenha cuidado com senhas, detalhes de pagamento, mensagens e outras informações sensíveis."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"O app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> terá acesso a todas as informações na tela ou reproduzidas no dispositivo, como gravações ou transmissões. Isso inclui informações como senhas, detalhes de pagamento, fotos, mensagens e áudios que você tocar."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Iniciar gravação ou transmissão?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"O serviço que oferece essa função terá acesso a todas as informações visíveis na tela ou reproduzidas durante uma gravação ou transmissão. Isso inclui senhas, detalhes de pagamento, fotos, mensagens e áudios."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Tela cheia"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Um único app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Compartilhar ou gravar um app"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Iniciar gravação ou transmissão com o app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Quando você compartilha, grava ou transmite a tela, o <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tem acesso a todas as informações visíveis nela ou reproduzidas no dispositivo. Portanto, tenha cuidado com senhas, detalhes de pagamento, mensagens, fotos, áudios e vídeos."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Quando você compartilha, grava ou transmite um app, o <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tem acesso a todas as informações visíveis ou reproduzidas no dispositivo. Tenha cuidado com senhas, detalhes de pagamento, mensagens, fotos, áudios e vídeos."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Início"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Começar a transmissão?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Quando você transmite a tela, o Android tem acesso a todas as informações visíveis nela ou reproduzidas no dispositivo. Portanto, tenha cuidado com senhas, detalhes de pagamento, mensagens, fotos, áudios e vídeos."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Quando você transmite um app, o Android tem acesso a todas as informações visíveis ou reproduzidas nele. Tenha cuidado com senhas, detalhes de pagamento, mensagens fotos, áudios e vídeos."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Começar a transmissão"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Começar a compartilhar?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Quando você compartilha, grava ou transmite a tela, o Android tem acesso a todas as informações visíveis nela ou reproduzidas no dispositivo. Portanto, tenha cuidado com senhas, detalhes de pagamento, mensagens, fotos, áudios e vídeos."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Quando você compartilha, grava ou transmite um app, o Android tem acesso a todas as informações visíveis ou reproduzidas nele. Tenha cuidado com senhas, detalhes de pagamento, mensagens, fotos, áudios e vídeos."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Início"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"O compartilhamento é pausado na troca de apps"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Compartilhar este app"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Voltar"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Troca de app"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Ação bloqueada pelo administrador de TI"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"A captura de tela foi desativada pela política do dispositivo"</string>
-    <string name="clear_all_notifications_text" msgid="348312370303046130">"Limpar tudo"</string>
+    <string name="clear_all_notifications_text" msgid="348312370303046130">"Remover tudo"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Gerenciar"</string>
     <string name="manage_notifications_history_text" msgid="57055985396576230">"Histórico"</string>
     <string name="notification_section_header_incoming" msgid="850925217908095197">"Novas"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Uma autoridade de certificação foi instalada neste dispositivo. É possível monitorar ou modificar seu tráfego de rede seguro."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"O administrador ativou o registro de rede, que monitora o tráfego no seu dispositivo."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"O administrador ativou o registro de rede, que monitora o tráfego no seu perfil de trabalho, mas não no perfil pessoal."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Este dispositivo está conectado à Internet usando o <xliff:g id="VPN_APP">%1$s</xliff:g>. Suas atividades de rede, incluindo e-mails e dados de navegação, estão visíveis para o administrador de TI."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Este dispositivo está conectado à Internet usando o <xliff:g id="VPN_APP">%1$s</xliff:g>. Suas atividades de rede, incluindo e-mails e dados de navegação, estão visíveis para o provedor de VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Este dispositivo está conectado à Internet usando o <xliff:g id="VPN_APP">%1$s</xliff:g>. Suas atividades de rede, incluindo e-mails e dados de navegação, estão visíveis para o administrador de TI."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Seu dispositivo está conectado à Internet usando o <xliff:g id="VPN_APP_0">%1$s</xliff:g> e <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Suas atividades de rede, incluindo e-mails e dados de navegação, estão visíveis para o administrador de TI."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Seus apps de trabalho estão conectados à Internet usando o <xliff:g id="VPN_APP">%1$s</xliff:g>. Suas atividades de rede em apps de trabalho, incluindo e-mails e dados de navegação, estão visíveis para o administrador de TI e o provedor de VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Seus apps pessoais estão conectados à Internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. As atividades de rede, incluindo e-mails e dados de navegação, estão visíveis para o provedor de VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"desativar"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Som e vibração"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Configurações"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Volume diminuído para um nível mais seguro"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"O volume ficou alto por mais tempo do que o recomendado"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volume diminuído para um nível mais seguro"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"O volume do fones de ouvido está alto há mais tempo que o recomendado"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"O volume dos fones de ouvido excedeu o limite de segurança para esta semana"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Continuar ouvindo"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Diminuir o volume"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"O app está fixado"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Ela é mantida à vista até que seja liberada. Toque em Voltar e em Visão geral e mantenha essas opções pressionadas para liberar."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ela é mantida à vista até que seja liberada. Toque em Voltar e em Início e mantenha essas opções pressionadas para liberar."</string>
@@ -490,7 +520,7 @@
     <string name="stream_accessibility" msgid="3873610336741987152">"Acessibilidade"</string>
     <string name="volume_ringer_status_normal" msgid="1339039682222461143">"Tocar"</string>
     <string name="volume_ringer_status_vibrate" msgid="6970078708957857825">"Vibrar"</string>
-    <string name="volume_ringer_status_silent" msgid="3691324657849880883">"Ignorar"</string>
+    <string name="volume_ringer_status_silent" msgid="3691324657849880883">"Desativar som"</string>
     <string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Toque para ativar o som."</string>
     <string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Toque para configurar para vibrar. É possível que os serviços de acessibilidade sejam silenciados."</string>
     <string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Toque para silenciar. É possível que os serviços de acessibilidade sejam silenciados."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menu liga/desliga"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Página <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Tela de bloqueio"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"O smartphone foi desligado devido ao aquecimento"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"O smartphone está funcionando normalmente agora.\nToque para saber mais"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"O smartphone estava muito quente e foi desligado para resfriar. Agora, ele está sendo executado normalmente.\n\nO smartphone pode ficar quente demais se você:\n	• usar apps que consomem muitos recursos (como apps de jogos, vídeos ou navegação);\n	• fizer o download ou upload de arquivos grandes;\n	• usar o smartphone em temperaturas altas."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Ver etapas de cuidado"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"O smartphone está esquentando"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Alguns recursos ficam limitados enquanto o smartphone é resfriado.\nToque para saber mais"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Seu smartphone tentará se resfriar automaticamente. Você ainda poderá usá-lo, mas talvez ele fique mais lento.\n\nQuando o smartphone estiver resfriado, ele voltará ao normal."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Ver etapas de cuidado"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Desconecte seu dispositivo"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Seu dispositivo está ficando quente perto da porta de carregamento. Desconecte qualquer carregador ou acessório USB que esteja conectado, mas tome cuidado, porque o cabo também pode estar quente."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ampliar toda a tela"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ampliar parte da tela"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Abrir as configurações de ampliação"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Fechar configurações de ampliação"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Arraste o canto para redimensionar"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Permitir rolagem diagonal"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Redimensionar"</string>
@@ -885,9 +910,8 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"remover dos favoritos"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Mover para a posição <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
-    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Toque no controle, mantenha-o pressionado e arraste para reorganizar as posições."</string>
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Escolha os controles do dispositivo para o acesso rápido"</string>
+    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Toque e pressione, depois arraste para reorganizar as posições."</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Todos os controles foram removidos"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"As mudanças não foram salvas"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Ver outros apps"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Tente usar outro PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Confirme a mudança para <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Deslize para ver mais"</string>
+    <string name="retry_face" msgid="416380073082560186">"Refazer autenticação facial"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Carregando recomendações"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Mídia"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Ocultar este controle de mídia para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Configurações"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Tocando <xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> no app <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> está em execução"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Iniciar"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausar"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Faixa anterior"</string>
@@ -968,7 +994,9 @@
     <string name="media_output_dialog_accessibility_seekbar" msgid="5332843993805568978">"Volume"</string>
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Alto-falantes e telas"</string>
-    <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Dispositivos sugeridos"</string>
+    <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Opções de dispositivos"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Interrompa sua sessão compartilhada para transferir mídia a outro dispositivo"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Parar"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Como funciona a transmissão"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Transmitir"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"As pessoas próximas a você com dispositivos Bluetooth compatíveis podem ouvir a mídia que você está transmitindo"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Falha ao salvar. Tente de novo."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Falha ao salvar."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Use pelo menos 4 caracteres"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Use menos de 16 caracteres"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Use menos de <xliff:g id="LENGTH">%1$d</xliff:g> caracteres"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Número da versão"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Número da versão copiado para a área de transferência."</string>
     <string name="basic_status" msgid="2315371112182658176">"Conversa aberta"</string>
@@ -1009,7 +1037,7 @@
     <string name="audio_status" msgid="4237055636967709208">"Ouvindo"</string>
     <string name="game_status" msgid="1340694320630973259">"Jogando"</string>
     <string name="empty_user_name" msgid="3389155775773578300">"Amigos"</string>
-    <string name="empty_status" msgid="5938893404951307749">"Vamos conversar hoje à noite."</string>
+    <string name="empty_status" msgid="5938893404951307749">"Nos falamos à noite."</string>
     <string name="status_before_loading" msgid="1500477307859631381">"O conteúdo será exibido em breve"</string>
     <string name="missed_call" msgid="4228016077700161689">"Ligação perdida"</string>
     <string name="messages_count_overflow_indicator" msgid="7850934067082006043">"<xliff:g id="NUMBER">%d</xliff:g>+"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problema para ler seu medidor de bateria"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Toque para mais informações"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Nenhum alarme definido"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"inserir bloqueio de tela"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Sensor de impressão digital"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autenticar"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"acessar o dispositivo"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"O Google Assistente está ouvindo"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificação}one{# notificação}many{# notificações}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="note_task_button_label" msgid="8718616095800343136">"Anotações"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Anotações"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Anotações, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Saiba mais"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Saiba mais em <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• O app está disponível"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Pelo menos um cartão foi adicionado à Carteira"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Um app de câmera está instalado"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• O app está disponível"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Pelo menos um dispositivo está disponível"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Para adicionar o app Carteira como um atalho, verifique se ele está instalado"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Para adicionar o app Carteira como um atalho, verifique se pelo menos um cartão foi adicionado"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Para adicionar o leitor de código QR como um atalho, verifique se algum app de câmera está instalado"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Para adicionar o app Home como um atalho, verifique se ele está instalado"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Pelo menos um dispositivo está disponível"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Selecione um app de notas padrão para usar o atalho de anotações"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Selecionar app"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Toque e pressione o atalho"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Cancelar"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Trocar de tela agora"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Conecte sua stylus a um carregador"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Bateria da stylus fraca"</string>
     <string name="video_camera" msgid="7654002575156149298">"Filmadora"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Não é possível fazer uma ligação por este perfil"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Sua política de trabalho só permite fazer ligações pelo perfil de trabalho"</string>
-    <string name="call_from_work_profile_action" msgid="2937701298133010724">"Alternar para o perfil de trabalho"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Fechar"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Não é possível fazer ligações de um app pessoal"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Sua organização só permite fazer ligações usando apps de trabalho"</string>
+    <string name="call_from_work_profile_action" msgid="2937701298133010724">"Mudar para o perfil de trabalho"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instalar um app de telefone no perfil de trabalho"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Cancelar"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizar a tela de bloqueio"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Desbloqueie para personalizar a tela de bloqueio"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi indisponível"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Modo de prioridade ativado"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Atenção do Assistente ativada"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Defina o app de notas padrão nas Configurações"</string>
+    <string name="install_app" msgid="5066668100199613936">"Instalar o app"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Microfone e câmera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Uso recente do app"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Consultar acessos recentes"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Concluído"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Abrir e mostrar opções"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Fechar"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Fechar este app"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"App <xliff:g id="APP_NAME">%1$s</xliff:g> fechado"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Gerenciar serviço"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Gerenciar o acesso"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Em uso pela ligação telefônica"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Usado recentemente em uma ligação telefônica"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Em uso pelo app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Usado recentemente pelo app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Em uso pelo app <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Usado recentemente pelo app <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Em uso pelo app <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Usado recentemente pelo app <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings_tv.xml b/packages/SystemUI/res/values-pt-rBR/strings_tv.xml
deleted file mode 100644
index 6c5ff0c..0000000
--- a/packages/SystemUI/res/values-pt-rBR/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"A VPN está conectada"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"A VPN está desconectada"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Via <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notificações"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Nenhuma notificação"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"O microfone está gravando"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"A câmera está gravando"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"A câmera e o microfone estão gravando"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"O microfone parou de gravar"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"A câmera parou de gravar"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"A câmera e o microfone pararam de gravar"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Gravação de tela iniciada"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Gravação de tela interrompida"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 07378b9..9974df1 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -39,9 +39,9 @@
     <string name="usb_audio_device_prompt_warn" msgid="2504972133361130335">"Esta app não recebeu autorização de gravação, mas pode capturar áudio através deste dispositivo USB. A utilização da app <xliff:g id="APPLICATION">%1$s</xliff:g> neste dispositivo pode impedir a audição de chamadas, notificações e alarmes."</string>
     <string name="usb_audio_device_prompt" msgid="7944987408206252949">"A utilização da app <xliff:g id="APPLICATION">%1$s</xliff:g> neste dispositivo pode impedir a audição de chamadas, notificações e alarmes."</string>
     <string name="usb_accessory_permission_prompt" msgid="717963550388312123">"Permitir que a app <xliff:g id="APPLICATION">%1$s</xliff:g> aceda ao acessório <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
-    <string name="usb_device_confirm_prompt" msgid="4091711472439910809">"Pretende abrir a app <xliff:g id="APPLICATION">%1$s</xliff:g> para controlar o acessório <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
-    <string name="usb_device_confirm_prompt_warn" msgid="990208659736311769">"Pretende abrir a app <xliff:g id="APPLICATION">%1$s</xliff:g> para controlar o acessório <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nEsta app não recebeu autorização de gravação, mas pode capturar áudio através deste dispositivo USB."</string>
-    <string name="usb_accessory_confirm_prompt" msgid="5728408382798643421">"Pretende abrir a app <xliff:g id="APPLICATION">%1$s</xliff:g> para controlar o acessório <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
+    <string name="usb_device_confirm_prompt" msgid="4091711472439910809">"Quer abrir a app <xliff:g id="APPLICATION">%1$s</xliff:g> para controlar o acessório <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
+    <string name="usb_device_confirm_prompt_warn" msgid="990208659736311769">"Quer abrir a app <xliff:g id="APPLICATION">%1$s</xliff:g> para controlar o acessório <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nEsta app não recebeu autorização de gravação, mas pode capturar áudio através deste dispositivo USB."</string>
+    <string name="usb_accessory_confirm_prompt" msgid="5728408382798643421">"Quer abrir a app <xliff:g id="APPLICATION">%1$s</xliff:g> para controlar o acessório <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
     <string name="usb_accessory_uri_prompt" msgid="6756649383432542382">"Nenhuma das aplicações instaladas funciona com o acessório USB. Saiba mais acerca do acessório em <xliff:g id="URL">%1$s</xliff:g>"</string>
     <string name="title_usb_accessory" msgid="1236358027511638648">"Acessório USB"</string>
     <string name="label_view" msgid="6815442985276363364">"Ver"</string>
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Ativar USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Saiba mais"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Captura de ecrã"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Desbloqueio prolongado desativado"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Desbloqueio extra desativado"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"enviou uma imagem"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"A guardar captura de ecrã..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"A guardar captura de ecrã no perfil de trabalho…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"A app <xliff:g id="APPNAME">%1$s</xliff:g> detetou esta captura de ecrã."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"A app <xliff:g id="APPNAME">%1$s</xliff:g> e outras apps abertas detetaram esta captura de ecrã."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Adicionar a uma nota"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Gravador de ecrã"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Gravador de ecrã"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"A processar a gravação de ecrã"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notificação persistente de uma sessão de gravação de ecrã"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Iniciar a gravação?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Enquanto estiver a gravar, o sistema Android pode capturar quaisquer informações confidenciais que estejam visíveis no ecrã ou que sejam reproduzidas no dispositivo. Isto inclui palavras-passe, informações de pagamento, fotos, mensagens e áudio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Gravar o ecrã inteiro"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Gravar só uma app"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Enquanto está a gravar, o Android tem acesso a tudo o que está visível no seu ecrã ou é reproduzido no seu dispositivo. Por isso, tenha cuidado com palavras-passe, detalhes de pagamento, mensagens ou outras informações confidenciais."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Enquanto está a gravar uma app, o Android tem acesso a tudo o que é apresentado ou reproduzido nessa app. Por isso, tenha cuidado com palavras-passe, detalhes de pagamento, mensagens ou outras informações confidenciais."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Começar gravação"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Iniciar a gravação?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Enquanto está a gravar, o Android tem acesso a tudo o que está visível no seu ecrã ou é reproduzido no seu dispositivo. Por isso, tenha cuidado com, por exemplo, palavras-passe, detalhes de pagamento, mensagens, fotos, áudio e vídeo."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Enquanto está a gravar uma app, o Android tem acesso a tudo o que é apresentado ou reproduzido nessa app. Por isso, tenha cuidado com, por exemplo, palavras-passe, detalhes de pagamento, mensagens, fotos, áudio e vídeo."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Começar gravação"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Gravar áudio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Áudio do dispositivo"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"O som do dispositivo, como música, chamadas e toques."</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Microfone"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Microfone e áudio do dispositivo"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Iniciar"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Iniciar"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"A gravar o ecrã…"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"A gravar o ecrã e o áudio…"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Mostrar toques no ecrã"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Partilhar"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Gravação de ecrã guardada."</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Toque para ver"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Erro ao eliminar a gravação de ecrã."</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Erro ao guardar a gravação de ecrã"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Ocorreu um erro ao iniciar a gravação do ecrã."</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Visualização de ecrã inteiro"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Para sair, deslize rapidamente para baixo a partir da parte superior."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"OK"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Anterior"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Página inicial"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Rosto autenticado"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmado"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Toque em Confirmar para concluir."</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Desbloqueio com a face. Prima o ícone de desb. p/ continuar."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Desbloqueado com o rosto"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Desbloqueado com o rosto. Prima para continuar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Rosto reconhecido. Prima para continuar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Rosto reconhecido. Prima ícone de desbloqueio para continuar"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenticado"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Cancelar autenticação"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Usar PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Usar padrão"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Usar palavra-passe"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Se introduzir um padrão incorreto na tentativa seguinte, o seu perfil de trabalho e os respetivos dados serão eliminados."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Se introduzir um PIN incorreto na tentativa seguinte, o seu perfil de trabalho e os respetivos dados serão eliminados."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Se introduzir uma palavra-passe incorreta na tentativa seguinte, o seu perfil de trabalho e os respetivos dados serão eliminados."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Configurar"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Agora não"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Isto é necessário para melhorar a segurança e o desempenho"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Configure o Desbloqueio por impressão digital novamente"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Desbloqueio por impressão digital"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Configure o Desbloqueio por impressão digital"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Para configurar o Desbloqueio por impressão digital novamente, os seus modelos e imagens de impressões digitais atuais vão ser eliminados.\n\nApós a eliminação, vai ter de configurar novamente o Desbloqueio por impressão digital para desbloquear o telemóvel ou validar a sua identidade com a impressão digital."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Para configurar o Desbloqueio por impressão digital novamente, o seu modelo e imagens de impressões digitais atuais vão ser eliminados.\n\nApós a eliminação, vai ter de configurar novamente o Desbloqueio por impressão digital para desbloquear o telemóvel ou validar a sua identidade com a impressão digital."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Não foi possível configurar o Desbloqueio por impressão digital. Aceda às Definições para tentar novamente."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Configure o Desbloqueio facial novamente"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Desbloqueio facial"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Configure o Desbloqueio facial"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Para configurar o Desbloqueio facial novamente, o seu modelo de rosto atual vai ser eliminado.\n\nVai ter de configurar novamente esta funcionalidade para desbloquear o telemóvel com o rosto."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Não foi possível configurar o Desbloqueio facial. Aceda às Definições para tentar novamente."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Toque no sensor de impressões digitais."</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Prima o ícone de desbloqueio para continuar"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Impos. reconh. rosto. Utilize a impressão digital."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Áudio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Ausc. c/ mic. integ."</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Aparelhos auditivos"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparelhos auditivos"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"A ativar..."</string>
     <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>
@@ -305,7 +321,7 @@
     <string name="quick_settings_contrast_high" msgid="656049259587494499">"Alto"</string>
     <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Desbloquear o microfone do dispositivo?"</string>
     <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Desbloquear a câmara do dispositivo?"</string>
-    <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Pretende desbloquear a câmara e o microfone?"</string>
+    <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Quer desbloquear a câmara e o microfone?"</string>
     <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"Isto desbloqueia o acesso a todas as apps e serviços com autorização para utilizar o seu microfone."</string>
     <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"Isto desbloqueia o acesso a todas as apps e serviços com autorização para utilizar a sua câmara."</string>
     <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"Isto desbloqueia o acesso a todas as apps e serviços com autorização para utilizar a sua câmara ou microfone."</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Desbloqueado com o rosto"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Rosto reconhecido"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Deslize rapidamente para cima para tentar novamente."</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Deslize para cima para tentar o Desbloqueio facial novamente"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Desbloquear para utilizar o NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Este dispositivo pertence à sua entidade."</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Este dispositivo pertence à entidade <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>."</string>
@@ -371,7 +388,7 @@
     <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu pendente"</string>
     <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Todas as apps e dados desta sessão serão eliminados."</string>
     <string name="guest_wipe_session_title" msgid="7147965814683990944">"Bem-vindo de volta, convidado!"</string>
-    <string name="guest_wipe_session_message" msgid="3393823610257065457">"Pretende continuar a sessão?"</string>
+    <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 convidado"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"A app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> terá acesso a todas as informações que estiverem visíveis no ecrã ou que forem reproduzidas a partir do dispositivo durante a gravação ou transmissão. Isto inclui informações como palavras-passe, detalhes de pagamentos, fotos, mensagens e áudio reproduzido."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"O serviço que fornece esta função terá acesso a todas as informações que estiverem visíveis no ecrã ou que forem reproduzidas a partir do dispositivo durante a gravação ou transmissão. Isto inclui informações como palavras-passe, detalhes de pagamentos, fotos, mensagens e áudio reproduzido."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Começar a gravar ou a transmitir?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Começar a gravar ou a transmitir com a app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Permitir que a app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> partilhe ou grave?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Ecrã inteiro"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Só uma app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Quando está a partilhar, gravar ou transmitir, a app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tem acesso a tudo o que está visível no seu ecrã ou é reproduzido no seu dispositivo. Por isso, tenha cuidado com palavras-passe, detalhes de pagamento, mensagens ou outras informações confidenciais."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Quando está a partilhar, gravar ou transmitir uma app, a app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tem acesso a tudo o que é apresentado ou reproduzido nessa app. Por isso, tenha cuidado com palavras-passe, detalhes de pagamento, mensagens ou outras informações confidenciais."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continuar"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Partilhe ou grave uma app"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Permitir que esta app partilhe ou grave?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Quando está a partilhar, gravar ou transmitir, esta app tem acesso a tudo o que está visível no seu ecrã ou é reproduzido no seu dispositivo. Por isso, tenha cuidado com palavras-passe, detalhes de pagamento, mensagens ou outras informações confidenciais."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Quando está a partilhar, gravar ou transmitir uma app, esta app tem acesso a tudo o que é apresentado ou reproduzido nessa app. Por isso, tenha cuidado com palavras-passe, detalhes de pagamento, mensagens ou outras informações confidenciais."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"A app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> vai ter acesso a todas as informações que estiverem visíveis no ecrã ou que forem reproduzidas a partir do dispositivo durante a gravação ou a transmissão. Isto inclui informações como palavras-passe, detalhes de pagamentos, fotos, mensagens e áudio reproduzido."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Começar a gravar ou a transmitir?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"O serviço que fornece esta função vai ter acesso a todas as informações que estiverem visíveis no ecrã ou que forem reproduzidas a partir do dispositivo durante a gravação ou a transmissão. Isto inclui informações como palavras-passe, detalhes de pagamentos, fotos, mensagens e áudio reproduzido."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Ecrã inteiro"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Só uma app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Partilhe ou grave uma app"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Começar a gravar ou a transmitir com a app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Quando está a partilhar, gravar ou transmitir, a app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tem acesso a tudo o que está visível no seu ecrã ou é reproduzido no seu dispositivo. Por isso, tenha cuidado com, por exemplo, palavras-passe, detalhes de pagamento, mensagens, fotos, áudio e vídeo."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Quando está a partilhar, gravar ou transmitir uma app, a app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tem acesso a tudo o que é apresentado ou reproduzido nessa app. Por isso, tenha cuidado com, por exemplo, palavras-passe, detalhes de pagamento, mensagens, fotos, áudio e vídeo."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Iniciar"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Começar a transmitir?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Quando está a transmitir conteúdo, o Android tem acesso a tudo o que está visível no seu ecrã ou é reproduzido no seu dispositivo. Por isso, tenha cuidado com, por exemplo, palavras-passe, detalhes de pagamento, mensagens, fotos, áudio e vídeo."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Quando está a transmitir uma app, o Android tem acesso a tudo o que é apresentado ou reproduzido nessa app. Por isso, tenha cuidado com, por exemplo, palavras-passe, detalhes de pagamento, mensagens, fotos, áudio e vídeo."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Começar a transmitir"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Começar a partilhar?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Quando está a partilhar, gravar ou transmitir conteúdo, o Android tem acesso a tudo o que está visível no seu ecrã ou é reproduzido no seu dispositivo. Por isso, tenha cuidado com, por exemplo, palavras-passe, detalhes de pagamento, mensagens, fotos, áudio e vídeo."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Quando está a partilhar, gravar ou transmitir uma app, o Android tem acesso a tudo o que é apresentado ou reproduzido nessa app. Por isso, tenha cuidado com, por exemplo, palavras-passe, detalhes de pagamento, mensagens, fotos, áudio e vídeo."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Iniciar"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"A partilha é pausada quando muda de app"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Partilhar antes esta app"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Voltar"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Mudança de app"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Bloqueado pelo administrador de TI"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"A captura de ecrã está desativada pela política do dispositivo"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Limpar tudo"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Está instalada uma autoridade de certificação neste dispositivo. O tráfego da sua rede segura pode ser monitorizado ou alterado."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"O gestor ativou os registos de rede, que monitorizam o tráfego no seu dispositivo."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"O seu administrador ativou os registos de rede, que monitorizam o tráfego no seu perfil de trabalho, mas não no seu perfil pessoal."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Este dispositivo está ligado à Internet através da app <xliff:g id="VPN_APP">%1$s</xliff:g>. A sua atividade de rede, incluindo dados de navegação e emails, está visível para o seu administrador de TI."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Este dispositivo está ligado à Internet através da app <xliff:g id="VPN_APP">%1$s</xliff:g>. A atividade da sua rede, incluindo dados de navegação e emails, está visível para o seu fornecedor de VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Este dispositivo está ligado à Internet através da app <xliff:g id="VPN_APP">%1$s</xliff:g>. A atividade da sua rede, incluindo dados de navegação e emails, está visível para o seu administrador de TI."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Este dispositivo está ligado à Internet através das apps <xliff:g id="VPN_APP_0">%1$s</xliff:g> e <xliff:g id="VPN_APP_1">%2$s</xliff:g>. A sua atividade de rede, incluindo dados de navegação e emails, está visível para o seu administrador de TI."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"As suas apps de trabalho estão ligadas à Internet através da app <xliff:g id="VPN_APP">%1$s</xliff:g>. A sua atividade de rede em apps de trabalho, incluindo dados de navegação e emails, está visível para o seu administrador de TI e fornecedor de VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"As suas apps pessoais estão ligadas à Internet através da app <xliff:g id="VPN_APP">%1$s</xliff:g>. A sua atividade de rede, incluindo dados de navegação e emails, está visível para o seu fornecedor de VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"desativar"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Som e vibração"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Definições"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Volume reduzido para um nível mais seguro"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"O volume está elevado há mais tempo que o recomendado"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volume reduzido para um nível mais seguro"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"O volume dos auscultadores está elevado há mais tempo do que o recomendado"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"O volume dos auscultadores excedeu o limite seguro para esta semana"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Continuar a ouvir"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Baixar volume"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"A app está fixada"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Esta opção mantém o item visível até o soltar. Toque sem soltar em Anterior e em Vista geral para soltar."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Esta opção mantém o item visível até o soltar. Toque sem soltar em Anterior e em Página inicial para soltar."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menu ligar/desligar"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Página <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Ecrã de bloqueio"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telem. deslig. devido ao calor"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"O seu telemóvel já está a funcionar normalmente.\nToque para obter mais informações."</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"O telemóvel estava muito quente, por isso desligou-se para arrefecer. Agora funciona normalmente.\n\nO telemóvel pode sobreaquecer se:\n	• Usar aplicações que utilizam mais recursos (jogos, vídeo ou aplicações de navegação)\n	• Transferir ou carregar ficheiros grandes\n	• Usar em altas temperaturas"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Veja os passos de manutenção"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"O telemóvel está a aquecer"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Algumas funcionalidades são limitadas enquanto o telemóvel arrefece.\nToque para obter mais informações."</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"O telemóvel tenta arrefecer automaticamente. Pode continuar a utilizá-lo, mas este poderá funcionar mais lentamente.\n\nAssim que o telemóvel tiver arrefecido, funcionará normalmente."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Veja os passos de manutenção"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Desligue o dispositivo"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"O dispositivo está a ficar quente perto da porta de carregamento. Se estiver ligado a um carregador ou um acessório USB, desligue-o e tenha cuidado, uma vez que o cabo também pode estar quente."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ampliar o ecrã inteiro"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ampliar parte do ecrã"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Abrir definições de ampliação"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Fechar definições de ampliação"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Arrastar o canto para redimensionar"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Permitir deslocamento da página na diagonal"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Redimensionar"</string>
@@ -849,7 +874,7 @@
     <string name="accessibility_magnification_right_handle" msgid="9055988237319397605">"Indicador direito"</string>
     <string name="accessibility_magnification_bottom_handle" msgid="6531646968813821258">"Indicador inferior"</string>
     <string name="accessibility_magnification_settings_panel_description" msgid="8174187340747846953">"Definições de ampliação"</string>
-    <string name="accessibility_magnifier_size" msgid="3038755600030422334">"Tipo de lupa"</string>
+    <string name="accessibility_magnifier_size" msgid="3038755600030422334">"Tamanho da lupa"</string>
     <string name="accessibility_magnification_zoom" msgid="4222088982642063979">"Zoom"</string>
     <string name="accessibility_magnification_medium" msgid="6994632616884562625">"Médio"</string>
     <string name="accessibility_magnification_small" msgid="8144502090651099970">"Pequeno"</string>
@@ -885,10 +910,9 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"remover dos favoritos"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Mover para a posição <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Controlos"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
-    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Toque sem soltar e arraste para reorganizar os controlos."</string>
-    <string name="controls_favorite_removed" msgid="5276978408529217272">"Todos os controlos foram removidos."</string>
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Escolha os controlos de dispositivos para aceder rapidamente"</string>
+    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Toque sem soltar e arraste para reorganizar os controlos"</string>
+    <string name="controls_favorite_removed" msgid="5276978408529217272">"Todos os controlos foram removidos"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Alterações não guardadas."</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Ver outras apps"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Reorganizar"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Experimente outro PIN."</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Confirme a alteração para <xliff:g id="DEVICE">%s</xliff:g>."</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Deslize rapidamente para ver mais."</string>
+    <string name="retry_face" msgid="416380073082560186">"Tentar novamente autenticação facial"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"A carregar recomendações…"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Multimédia"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Ocultar controlo de multimédia para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Definições"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> em reprodução a partir da app <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> em execução"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Reproduzir"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausar"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Faixa anterior"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Altifalantes e ecrãs"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Dispositivos sugeridos"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Pare a sua sessão partilhada para mover conteúdos multimédia para outro dispositivo"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Parar"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Como funciona a transmissão"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Transmissão"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"As pessoas próximas de si com dispositivos Bluetooth compatíveis podem ouvir o conteúdo multimédia que está a transmitir"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Não é possível guardar. Tente novamente."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Não é possível guardar."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Use, pelo menos, 4 carateres"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Use menos de 16 carateres"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Use menos de <xliff:g id="LENGTH">%1$d</xliff:g> carateres"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Número da compilação"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Número da compilação copiado para a área de transferência."</string>
     <string name="basic_status" msgid="2315371112182658176">"Abrir conversa"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Ocorreu um problema ao ler o medidor da bateria"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Toque para obter mais informações"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Nenhum alarme defin."</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"introduzir bloqueio de ecrã"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Sensor de impressões digitais"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autenticar"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"entrar no dispositivo"</string>
@@ -1044,11 +1073,11 @@
     <string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"A procurar redes…"</string>
     <string name="wifi_failed_connect_message" msgid="4161863112079000071">"Não foi possível estabelecer ligação à rede"</string>
     <string name="wifi_wont_autoconnect_for_now" msgid="5782282612749867762">"Por agora, o Wi-Fi não irá estabelecer lig. automaticamente"</string>
-    <string name="see_all_networks" msgid="3773666844913168122">"Veja tudo"</string>
+    <string name="see_all_networks" msgid="3773666844913168122">"Ver tudo"</string>
     <string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"Para mudar de rede, desligue a Ethernet"</string>
     <string name="wifi_scan_notify_message" msgid="3753839537448621794">"Para melhorar a experiência do dispositivo, as apps e os serviços podem continuar a procurar redes Wi-Fi em qualquer altura, mesmo quando o Wi-Fi está desativado. Pode alterar esta opção nas definições de procura de Wi-Fi. "<annotation id="link">"Alterar"</annotation></string>
     <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Desativar o modo de avião"</string>
-    <string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"A app <xliff:g id="APPNAME">%1$s</xliff:g> pretende adicionar o seguinte mosaico às Definições rápidas"</string>
+    <string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"A app <xliff:g id="APPNAME">%1$s</xliff:g> quer adicionar o seguinte mosaico às Definições rápidas"</string>
     <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>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"O Assistente está a ouvir"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificação}many{# notificações}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="note_task_button_label" msgid="8718616095800343136">"Tomar notas"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Tomar notas"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Tomar notas, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Saiba mais"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Saiba mais em <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• A app está configurada"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Foi adicionado, pelo menos, um cartão à Carteira"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Instale uma app de câmara"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• A app está configurada"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Está disponível, pelo menos, um dispositivo"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Para adicionar a app Carteira como um atalho, certifique-se de que a app está instalada"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Para adicionar a app Carteira como um atalho, certifique-se de que foi adicionado, pelo menos, um cartão"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Para adicionar o Leitor de códigos QR como um atalho, certifique-se de que está instalada uma app de câmara"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Para adicionar a app Home como um atalho, certifique-se de que a app está instalada"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Está disponível, pelo menos, um dispositivo"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Selecione uma app de notas predefinida para usar o atalho de anotação"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Selecionar app"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Toque sem soltar no atalho"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Cancelar"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Mudar de ecrã agora"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Ligue a caneta stylus a um carregador"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Bateria da caneta stylus fraca"</string>
     <string name="video_camera" msgid="7654002575156149298">"Câmara de vídeo"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Não é possível ligar a partir deste perfil"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"A sua Política de Trabalho só lhe permite fazer chamadas telefónicas a partir do perfil de trabalho"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Não é possível ligar a partir de uma app pessoal"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"A sua organização só lhe permite fazer chamadas a partir de apps de trabalho"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Mudar para perfil de trabalho"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Fechar"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instalar app telefone de trabalho"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Cancelar"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizar o ecrã de bloqueio"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Desbloqueie para personalizar o ecrã de bloqueio"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi indisponível"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Câmara bloqueada"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Câmara e microfone bloqueados"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microfone bloqueado"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Modo Prioridade ativado"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Atenção do Assistente ativada"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Predefina a app de notas nas Definições"</string>
+    <string name="install_app" msgid="5066668100199613936">"Instalar app"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Microfone e câmara"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Utilização recente da app"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Ver acesso recente"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Concluir"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Expandir e mostrar opções"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Reduzir"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Fechar esta app"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"App <xliff:g id="APP_NAME">%1$s</xliff:g> fechada"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Gerir serviço"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Gerir acesso"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Em utilização por uma chamada telefónica"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Usado recentemente numa chamada telefónica"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Em utilização pela app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Usado recentemente pela app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Em utilização pela app <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Usado recentemente pela app <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Em utilização pela app <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Usado recentemente pela app <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings_tv.xml b/packages/SystemUI/res/values-pt-rPT/strings_tv.xml
deleted file mode 100644
index c3e6c43..0000000
--- a/packages/SystemUI/res/values-pt-rPT/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"A VPN está ligada"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"A VPN está desligada"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Através de <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notificações"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Sem notificações"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"O microfone está a gravar"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"A câmara está a gravar"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"A câmara e o microfone estão a gravar"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"O microfone parou a gravação"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"A câmara parou a gravação"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"A câmara e o microfone pararam a gravação"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Gravação de ecrã iniciada"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Gravação de ecrã parada"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 2469f2e..bf976f7 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Ativar USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Saiba mais"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Capturar tela"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock desativado"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Desbloqueio extra desativado"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"enviou uma imagem"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Salvando captura de tela..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Salvando captura de tela no perfil de trabalho…"</string>
@@ -95,23 +95,20 @@
     <string name="screenshot_default_files_app_name" msgid="8721579578575161912">"Files"</string>
     <string name="screenshot_detected_template" msgid="7940376642921719915">"O app <xliff:g id="APPNAME">%1$s</xliff:g> detectou essa captura de tela."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> e outros apps abertos detectaram essa captura de tela."</string>
-    <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Adicionar às notas"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Gravador de tela"</string>
+    <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Incluir anotação"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Gravador de tela"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Processando gravação de tela"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notificação contínua para uma sessão de gravação de tela"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Iniciar gravação?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Durante a gravação, o sistema Android pode capturar informações confidenciais visíveis na tela ou tocadas no dispositivo. Isso inclui senhas, informações de pagamento, fotos, mensagens e áudio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Gravar a tela inteira"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Gravar um app"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Enquanto você grava, o Android tem acesso a todas as informações visíveis na tela ou reproduzidas no dispositivo. Tenha cuidado com senhas, detalhes de pagamento, mensagens ou outras informações sensíveis."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Enquanto você grava um app, o Android tem acesso a todas as informações visíveis ou reproduzidas no app. Tenha cuidado com senhas, detalhes de pagamento, mensagens ou outras informações sensíveis."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Iniciar gravação"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Iniciar gravação?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Enquanto você grava, o Android tem acesso a todas as informações na tela ou reproduzidas no dispositivo. Portanto, tenha cuidado com senhas, detalhes de pagamento, mensagens, fotos, áudios e vídeos."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Enquanto você grava um app, o Android tem acesso a todas as informações visíveis ou reproduzidas nele. Tenha cuidado com senhas, detalhes de pagamento, mensagens fotos, áudios e vídeos."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Iniciar gravação"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Gravar áudio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Áudio do dispositivo"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Sons do dispositivo, como música, chamadas e toques"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Microfone"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Áudio e microfone do dispositivo"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Iniciar"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Início"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Gravando tela"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Gravando tela e áudio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Mostrar toques na tela"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Compartilhar"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Gravação de tela salva"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Toque para ver"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Erro ao excluir a gravação de tela"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Erro ao salvar a gravação da tela"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Erro ao iniciar a gravação de tela"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Visualização em tela cheia"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Para sair, deslize de cima para baixo."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Entendi"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Voltar"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Página inicial"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Rosto autenticado"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmada"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Toque em \"Confirmar\" para concluir"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Desbloqueado pelo rosto. Pressione o ícone de desbloqueio para continuar."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Desbloqueado pelo rosto"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Desbloqueado pelo rosto. Pressione para continuar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Rosto reconhecido. Pressione para continuar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Rosto reconhecido. Pressione o ícone para continuar."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autenticado"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Cancelar autenticação"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Usar PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Usar padrão"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Usar senha"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Se você informar um padrão incorreto na próxima tentativa, seu perfil de trabalho e os dados dele serão excluídos."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Se você informar um PIN incorreto na próxima tentativa, seu perfil de trabalho e os dados dele serão excluídos."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Se você informar uma senha incorreta na próxima tentativa, seu perfil de trabalho e os dados dele serão excluídos."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Configurar"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Agora não"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Ação necessária para melhorar a segurança e o desempenho"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Configurar o Desbloqueio por impressão digital de novo"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Desbloqueio por impressão digital"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Configurar o Desbloqueio por impressão digital"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Os modelos e as imagens atuais serão excluídos para reconfigurar o Desbloqueio por impressão digital.\n\nDepois disso, você vai precisar configurar esse recurso de novo para desbloquear o smartphone com o dedo ou confirmar sua identidade."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"O modelo e as imagens atuais serão excluídos para reconfigurar o Desbloqueio por impressão digital.\n\nDepois disso, você vai precisar configurar esse recurso de novo para desbloquear o smartphone com o dedo ou confirmar sua identidade."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Não foi possível configurar o Desbloqueio por impressão digital. Acesse as Configurações e tente de novo."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Configurar o Desbloqueio facial de novo"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Desbloqueio facial"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Configurar o Desbloqueio facial"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"O modelo de rosto atual será excluído para reconfigurar o Desbloqueio facial.\n\nVocê vai precisar configurar esse recurso de novo para desbloquear o smartphone com o rosto."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Não foi possível configurar o Desbloqueio facial. Acesse as Configurações e tente de novo."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Toque no sensor de impressão digital"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Pressione o ícone de desbloqueio para continuar"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Não foi possível reconhecer o rosto Use a impressão digital."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Áudio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Fone de ouvido"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Aparelhos auditivos"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparelhos auditivos"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Ativando…"</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Desbloqueado pelo rosto"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Rosto reconhecido"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Deslize para cima para tentar novamente"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Deslize para cima para usar o Desbloqueio facial e novo"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Desbloqueie para usar a NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Este dispositivo pertence à sua organização"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Este dispositivo pertence à organização <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -364,7 +381,7 @@
     <string name="interruption_level_alarms_twoline" msgid="2045067991335708767">"Somente\nalarmes"</string>
     <string name="keyguard_indication_charging_time_wireless" msgid="577856646141738675">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregando sem fio • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
     <string name="keyguard_indication_charging_time" msgid="6492711711891071502">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregando • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
-    <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga rápida • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+    <string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregamento rápido • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
     <string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga lenta • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
     <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregando • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Trocar usuário"</string>
@@ -382,23 +399,32 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"O app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> terá acesso a todas as informações visíveis na tela ou tocadas no dispositivo, como gravação ou transmissão. Isso inclui informações como senhas, detalhes de pagamento, fotos, mensagens e o áudio que você tocar."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"O serviço que oferece essa função terá acesso a todas as informações visíveis na tela ou reproduzidas durante uma gravação ou transmissão. Isso inclui senhas, detalhes de pagamento, fotos, mensagens e áudio."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Iniciar gravação ou transmissão?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Iniciar gravação ou transmissão com o app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Permitir que o <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> compartilhe ou grave a tela?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Tela cheia"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Um único app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Quando você compartilha, grava ou transmite a tela, o <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tem acesso a todas as informações visíveis na tela ou reproduzidas no dispositivo. Tenha cuidado com senhas, detalhes de pagamento, mensagens ou outras informações sensíveis."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Quando você compartilha, grava ou transmite um app, o <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tem acesso a todas as informações visíveis na tela ou reproduzidas no dispositivo. Tenha cuidado com senhas, detalhes de pagamento, mensagens ou outras informações sensíveis."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continuar"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Compartilhar ou gravar um app"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Permitir que este app compartilhe ou grave a tela?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Quando você compartilha, grava ou transmite a tela, este app tem acesso a todas as informações visíveis nela ou reproduzidas no dispositivo. Tenha cuidado com senhas, detalhes de pagamento, mensagens e outras informações sensíveis."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Quando você compartilha, grava ou transmite a tela, este app tem acesso a todas as informações visíveis nela ou reproduzidas no dispositivo. Tenha cuidado com senhas, detalhes de pagamento, mensagens e outras informações sensíveis."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"O app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> terá acesso a todas as informações na tela ou reproduzidas no dispositivo, como gravações ou transmissões. Isso inclui informações como senhas, detalhes de pagamento, fotos, mensagens e áudios que você tocar."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Iniciar gravação ou transmissão?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"O serviço que oferece essa função terá acesso a todas as informações visíveis na tela ou reproduzidas durante uma gravação ou transmissão. Isso inclui senhas, detalhes de pagamento, fotos, mensagens e áudios."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Tela cheia"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Um único app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Compartilhar ou gravar um app"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Iniciar gravação ou transmissão com o app <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Quando você compartilha, grava ou transmite a tela, o <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tem acesso a todas as informações visíveis nela ou reproduzidas no dispositivo. Portanto, tenha cuidado com senhas, detalhes de pagamento, mensagens, fotos, áudios e vídeos."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Quando você compartilha, grava ou transmite um app, o <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> tem acesso a todas as informações visíveis ou reproduzidas no dispositivo. Tenha cuidado com senhas, detalhes de pagamento, mensagens, fotos, áudios e vídeos."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Início"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Começar a transmissão?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Quando você transmite a tela, o Android tem acesso a todas as informações visíveis nela ou reproduzidas no dispositivo. Portanto, tenha cuidado com senhas, detalhes de pagamento, mensagens, fotos, áudios e vídeos."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Quando você transmite um app, o Android tem acesso a todas as informações visíveis ou reproduzidas nele. Tenha cuidado com senhas, detalhes de pagamento, mensagens fotos, áudios e vídeos."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Começar a transmissão"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Começar a compartilhar?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Quando você compartilha, grava ou transmite a tela, o Android tem acesso a todas as informações visíveis nela ou reproduzidas no dispositivo. Portanto, tenha cuidado com senhas, detalhes de pagamento, mensagens, fotos, áudios e vídeos."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Quando você compartilha, grava ou transmite um app, o Android tem acesso a todas as informações visíveis ou reproduzidas nele. Tenha cuidado com senhas, detalhes de pagamento, mensagens, fotos, áudios e vídeos."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Início"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"O compartilhamento é pausado na troca de apps"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Compartilhar este app"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Voltar"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Troca de app"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Ação bloqueada pelo administrador de TI"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"A captura de tela foi desativada pela política do dispositivo"</string>
-    <string name="clear_all_notifications_text" msgid="348312370303046130">"Limpar tudo"</string>
+    <string name="clear_all_notifications_text" msgid="348312370303046130">"Remover tudo"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Gerenciar"</string>
     <string name="manage_notifications_history_text" msgid="57055985396576230">"Histórico"</string>
     <string name="notification_section_header_incoming" msgid="850925217908095197">"Novas"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Uma autoridade de certificação foi instalada neste dispositivo. É possível monitorar ou modificar seu tráfego de rede seguro."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"O administrador ativou o registro de rede, que monitora o tráfego no seu dispositivo."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"O administrador ativou o registro de rede, que monitora o tráfego no seu perfil de trabalho, mas não no perfil pessoal."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Este dispositivo está conectado à Internet usando o <xliff:g id="VPN_APP">%1$s</xliff:g>. Suas atividades de rede, incluindo e-mails e dados de navegação, estão visíveis para o administrador de TI."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Este dispositivo está conectado à Internet usando o <xliff:g id="VPN_APP">%1$s</xliff:g>. Suas atividades de rede, incluindo e-mails e dados de navegação, estão visíveis para o provedor de VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Este dispositivo está conectado à Internet usando o <xliff:g id="VPN_APP">%1$s</xliff:g>. Suas atividades de rede, incluindo e-mails e dados de navegação, estão visíveis para o administrador de TI."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Seu dispositivo está conectado à Internet usando o <xliff:g id="VPN_APP_0">%1$s</xliff:g> e <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Suas atividades de rede, incluindo e-mails e dados de navegação, estão visíveis para o administrador de TI."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Seus apps de trabalho estão conectados à Internet usando o <xliff:g id="VPN_APP">%1$s</xliff:g>. Suas atividades de rede em apps de trabalho, incluindo e-mails e dados de navegação, estão visíveis para o administrador de TI e o provedor de VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Seus apps pessoais estão conectados à Internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. As atividades de rede, incluindo e-mails e dados de navegação, estão visíveis para o provedor de VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"desativar"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Som e vibração"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Configurações"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Volume diminuído para um nível mais seguro"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"O volume ficou alto por mais tempo do que o recomendado"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volume diminuído para um nível mais seguro"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"O volume do fones de ouvido está alto há mais tempo que o recomendado"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"O volume dos fones de ouvido excedeu o limite de segurança para esta semana"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Continuar ouvindo"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Diminuir o volume"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"O app está fixado"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Ela é mantida à vista até que seja liberada. Toque em Voltar e em Visão geral e mantenha essas opções pressionadas para liberar."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ela é mantida à vista até que seja liberada. Toque em Voltar e em Início e mantenha essas opções pressionadas para liberar."</string>
@@ -490,7 +520,7 @@
     <string name="stream_accessibility" msgid="3873610336741987152">"Acessibilidade"</string>
     <string name="volume_ringer_status_normal" msgid="1339039682222461143">"Tocar"</string>
     <string name="volume_ringer_status_vibrate" msgid="6970078708957857825">"Vibrar"</string>
-    <string name="volume_ringer_status_silent" msgid="3691324657849880883">"Ignorar"</string>
+    <string name="volume_ringer_status_silent" msgid="3691324657849880883">"Desativar som"</string>
     <string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Toque para ativar o som."</string>
     <string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Toque para configurar para vibrar. É possível que os serviços de acessibilidade sejam silenciados."</string>
     <string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Toque para silenciar. É possível que os serviços de acessibilidade sejam silenciados."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menu liga/desliga"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Página <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Tela de bloqueio"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"O smartphone foi desligado devido ao aquecimento"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"O smartphone está funcionando normalmente agora.\nToque para saber mais"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"O smartphone estava muito quente e foi desligado para resfriar. Agora, ele está sendo executado normalmente.\n\nO smartphone pode ficar quente demais se você:\n	• usar apps que consomem muitos recursos (como apps de jogos, vídeos ou navegação);\n	• fizer o download ou upload de arquivos grandes;\n	• usar o smartphone em temperaturas altas."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Ver etapas de cuidado"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"O smartphone está esquentando"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Alguns recursos ficam limitados enquanto o smartphone é resfriado.\nToque para saber mais"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Seu smartphone tentará se resfriar automaticamente. Você ainda poderá usá-lo, mas talvez ele fique mais lento.\n\nQuando o smartphone estiver resfriado, ele voltará ao normal."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Ver etapas de cuidado"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Desconecte seu dispositivo"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Seu dispositivo está ficando quente perto da porta de carregamento. Desconecte qualquer carregador ou acessório USB que esteja conectado, mas tome cuidado, porque o cabo também pode estar quente."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ampliar toda a tela"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ampliar parte da tela"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Abrir as configurações de ampliação"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Fechar configurações de ampliação"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Arraste o canto para redimensionar"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Permitir rolagem diagonal"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Redimensionar"</string>
@@ -885,9 +910,8 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"remover dos favoritos"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Mover para a posição <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Controles"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
-    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Toque no controle, mantenha-o pressionado e arraste para reorganizar as posições."</string>
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Escolha os controles do dispositivo para o acesso rápido"</string>
+    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Toque e pressione, depois arraste para reorganizar as posições."</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Todos os controles foram removidos"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"As mudanças não foram salvas"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Ver outros apps"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Tente usar outro PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Confirme a mudança para <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Deslize para ver mais"</string>
+    <string name="retry_face" msgid="416380073082560186">"Refazer autenticação facial"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Carregando recomendações"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Mídia"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Ocultar este controle de mídia para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Configurações"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Tocando <xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> no app <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> está em execução"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Iniciar"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausar"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Faixa anterior"</string>
@@ -968,7 +994,9 @@
     <string name="media_output_dialog_accessibility_seekbar" msgid="5332843993805568978">"Volume"</string>
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Alto-falantes e telas"</string>
-    <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Dispositivos sugeridos"</string>
+    <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Opções de dispositivos"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Interrompa sua sessão compartilhada para transferir mídia a outro dispositivo"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Parar"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Como funciona a transmissão"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Transmitir"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"As pessoas próximas a você com dispositivos Bluetooth compatíveis podem ouvir a mídia que você está transmitindo"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Falha ao salvar. Tente de novo."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Falha ao salvar."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Use pelo menos 4 caracteres"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Use menos de 16 caracteres"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Use menos de <xliff:g id="LENGTH">%1$d</xliff:g> caracteres"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Número da versão"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Número da versão copiado para a área de transferência."</string>
     <string name="basic_status" msgid="2315371112182658176">"Conversa aberta"</string>
@@ -1009,7 +1037,7 @@
     <string name="audio_status" msgid="4237055636967709208">"Ouvindo"</string>
     <string name="game_status" msgid="1340694320630973259">"Jogando"</string>
     <string name="empty_user_name" msgid="3389155775773578300">"Amigos"</string>
-    <string name="empty_status" msgid="5938893404951307749">"Vamos conversar hoje à noite."</string>
+    <string name="empty_status" msgid="5938893404951307749">"Nos falamos à noite."</string>
     <string name="status_before_loading" msgid="1500477307859631381">"O conteúdo será exibido em breve"</string>
     <string name="missed_call" msgid="4228016077700161689">"Ligação perdida"</string>
     <string name="messages_count_overflow_indicator" msgid="7850934067082006043">"<xliff:g id="NUMBER">%d</xliff:g>+"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problema para ler seu medidor de bateria"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Toque para mais informações"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Nenhum alarme definido"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"inserir bloqueio de tela"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Sensor de impressão digital"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autenticar"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"acessar o dispositivo"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"O Google Assistente está ouvindo"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificação}one{# notificação}many{# notificações}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="note_task_button_label" msgid="8718616095800343136">"Anotações"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Anotações"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Anotações, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Saiba mais"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Saiba mais em <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Abrir <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• O app está disponível"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Pelo menos um cartão foi adicionado à Carteira"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Um app de câmera está instalado"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• O app está disponível"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Pelo menos um dispositivo está disponível"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Para adicionar o app Carteira como um atalho, verifique se ele está instalado"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Para adicionar o app Carteira como um atalho, verifique se pelo menos um cartão foi adicionado"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Para adicionar o leitor de código QR como um atalho, verifique se algum app de câmera está instalado"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Para adicionar o app Home como um atalho, verifique se ele está instalado"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Pelo menos um dispositivo está disponível"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Selecione um app de notas padrão para usar o atalho de anotações"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Selecionar app"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Toque e pressione o atalho"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Cancelar"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Trocar de tela agora"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Conecte sua stylus a um carregador"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Bateria da stylus fraca"</string>
     <string name="video_camera" msgid="7654002575156149298">"Filmadora"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Não é possível fazer uma ligação por este perfil"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Sua política de trabalho só permite fazer ligações pelo perfil de trabalho"</string>
-    <string name="call_from_work_profile_action" msgid="2937701298133010724">"Alternar para o perfil de trabalho"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Fechar"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Não é possível fazer ligações de um app pessoal"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Sua organização só permite fazer ligações usando apps de trabalho"</string>
+    <string name="call_from_work_profile_action" msgid="2937701298133010724">"Mudar para o perfil de trabalho"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instalar um app de telefone no perfil de trabalho"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Cancelar"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizar a tela de bloqueio"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Desbloqueie para personalizar a tela de bloqueio"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi indisponível"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Modo de prioridade ativado"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Atenção do Assistente ativada"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Defina o app de notas padrão nas Configurações"</string>
+    <string name="install_app" msgid="5066668100199613936">"Instalar o app"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Microfone e câmera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Uso recente do app"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Consultar acessos recentes"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Concluído"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Abrir e mostrar opções"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Fechar"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Fechar este app"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"App <xliff:g id="APP_NAME">%1$s</xliff:g> fechado"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Gerenciar serviço"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Gerenciar o acesso"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Em uso pela ligação telefônica"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Usado recentemente em uma ligação telefônica"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Em uso pelo app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Usado recentemente pelo app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Em uso pelo app <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Usado recentemente pelo app <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Em uso pelo app <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Usado recentemente pelo app <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pt/strings_tv.xml b/packages/SystemUI/res/values-pt/strings_tv.xml
deleted file mode 100644
index 6c5ff0c..0000000
--- a/packages/SystemUI/res/values-pt/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"A VPN está conectada"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"A VPN está desconectada"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Via <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notificações"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Nenhuma notificação"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"O microfone está gravando"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"A câmera está gravando"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"A câmera e o microfone estão gravando"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"O microfone parou de gravar"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"A câmera parou de gravar"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"A câmera e o microfone pararam de gravar"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Gravação de tela iniciada"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Gravação de tela interrompida"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 6d73152..1ed3a37 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Activează USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Mai multe"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Captură de ecran"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Funcția Extend Unlock este dezactivată"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Funcția Prelungirea deblocării este dezactivată"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"a trimis o imagine"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Se salvează captura de ecran..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Se salvează captura în profilul de serviciu…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> a detectat această captură de ecran."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> și alte aplicații deschise au detectat această captură de ecran."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Adaugă în notă"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Recorder pentru ecran"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Recorder pentru ecran"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Se procesează înregistrarea"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Notificare în curs pentru o sesiune de înregistrare a ecranului"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Începi înregistrarea?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"În timpul înregistrării, sistemul Android poate captura informațiile sensibile vizibile pe ecran sau redate pe dispozitiv. Aici sunt incluse parole, informații de plată, fotografii, mesaje și conținut audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Înregistrează tot ecranul"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Înregistrează doar o aplicație"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Când înregistrezi, Android are acces la orice este vizibil pe ecran sau se redă pe dispozitiv. Ai grijă cu parolele, detaliile de plată, mesajele sau alte informații sensibile."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Când înregistrezi o aplicație, Android are acces la orice se afișează sau se redă în aplicație. Ai grijă cu parolele, detaliile de plată, mesajele sau alte informații sensibile."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Începe înregistrarea"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Începi înregistrarea?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Când înregistrezi, Android are acces la orice este vizibil pe ecran sau se redă pe dispozitiv. Prin urmare, ai grijă cu parolele, detaliile de plată, mesajele, fotografiile și conținutul audio și video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Când înregistrezi o aplicație, Android are acces la orice se afișează sau se redă în aplicație. Prin urmare, ai grijă cu parolele, detaliile de plată, mesajele, fotografiile și conținutul audio și video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Începe înregistrarea"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Înregistrează audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Conținutul audio de la dispozitiv"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Sunetul de la dispozitiv, precum muzică, apeluri și tonuri de sonerie"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Microfon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Conținutul audio de la dispozitiv și microfon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Începe"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Începe"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Se înregistrează ecranul"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Se înregistrează ecranul și conținutul audio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Afișează atingerile de pe ecran"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Trimite"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Înregistrarea ecranului a fost salvată"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Atinge pentru a afișa"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Eroare la ștergerea înregistrării ecranului"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Eroare la salvarea înregistrării ecranului"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Eroare la începerea înregistrării ecranului"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Vizualizare pe ecran complet"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Pentru a ieși, glisează de sus în jos."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"OK"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Înapoi"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Ecranul de pornire"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Meniu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Chip autentificat"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Confirmat"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Atinge Confirm pentru a finaliza"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Deblocat facial. Apasă pictograma Deblocare ca să continui."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"S-a deblocat folosind fața"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"S-a deblocat cu ajutorul feței. Apasă pentru a continua."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Chipul a fost recunoscut. Apasă pentru a continua."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Chip recunoscut. Apasă pictograma Deblocare ca să continui."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentificat"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Anulează autentificarea"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Folosește PIN-ul"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Folosește modelul"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Folosește parola"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Dacă la următoarea încercare introduci un model incorect, profilul de serviciu și datele sale vor fi șterse."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Dacă la următoarea încercare introduci un cod PIN incorect, profilul de serviciu și datele sale vor fi șterse."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Dacă la următoarea încercare introduci o parolă incorectă, profilul de serviciu și datele sale vor fi șterse."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Configurează"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Nu acum"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Obligatoriu pentru a îmbunătăți securitatea și performanța"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Configurează din nou Deblocarea cu amprenta"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Deblocarea cu amprenta"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Configurează Deblocarea cu amprenta"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Ca să configurezi din nou Deblocarea cu amprenta, imaginile și modelele actuale de amprente se vor șterge.\n\nDupă aceasta, va trebui să configurezi din nou Deblocarea cu amprenta ca să-ți folosești amprenta pentru a-ți debloca telefonul sau pentru a-ți configura identitatea."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Ca să configurezi din nou Deblocarea cu amprenta, imaginile și modelul actual de amprente se vor șterge.\n\nDupă aceasta, va trebui să configurezi din nou Deblocarea cu amprenta ca să-ți folosești amprenta pentru a-ți debloca telefonul sau pentru a-ți configura identitatea."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Nu s-a putut configura deblocarea cu amprenta. Accesează Setările pentru a încerca din nou."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Reconfigurează Deblocarea facială"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Deblocare facială"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Configurează Deblocarea facială"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Ca să configurezi din nou Deblocarea facială, modelul facial actual se va șterge.\n\nVa trebui să configurezi din nou funcția ca să-ți deblochezi telefonul cu fața."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Nu s-a putut configura deblocarea facială. Accesează Setările pentru a încerca din nou."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Atinge senzorul de amprente"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Apasă pe pictograma de deblocare pentru a continua"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Chipul nu a fost recunoscut. Folosește amprenta."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -223,7 +239,7 @@
     <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>
-    <string name="start_dreams" msgid="9131802557946276718">"Economizor de ecran"</string>
+    <string name="start_dreams" msgid="9131802557946276718">"Screensaver"</string>
     <string name="ethernet_label" msgid="2203544727007463351">"Ethernet"</string>
     <string name="quick_settings_dnd_label" msgid="7728690179108024338">"Nu deranja"</string>
     <string name="quick_settings_bluetooth_label" msgid="7018763367142041481">"Bluetooth"</string>
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Căști"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Intrare"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Aparate auditive"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparate auditive"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Se activează..."</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"S-a deblocat folosind fața"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Chipul a fost recunoscut"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Glisează pentru a încerca din nou"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Glisează în sus ca să încerci din nou Deblocarea facială"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Deblochează pentru a folosi NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Dispozitivul aparține organizației tale"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Acest dispozitiv aparține organizației <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"Excluzi 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">"Elimină"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> va avea acces la toate informațiile vizibile pe ecran sau redate pe dispozitiv în timp ce înregistrezi sau proiectezi. Între aceste informații se numără parole, detalii de plată, fotografii, mesaje și conținutul audio pe care îl redai."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Serviciul care oferă această funcție va avea acces la toate informațiile vizibile pe ecran sau redate pe dispozitiv în timp ce înregistrezi sau proiectezi. Între aceste informații se numără parole, detalii de plată, fotografii, mesaje și conținutul audio pe care îl redai."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Începi să înregistrezi sau să proiectezi?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Începi să înregistrezi sau să proiectezi cu <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> poate permite accesul sau înregistra?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Tot ecranul"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"O singură aplicație"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Când permiți accesul, înregistrezi sau proiectezi, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> are acces la orice este vizibil pe ecran sau se redă pe dispozitiv. Ai grijă cu parolele, detaliile de plată, mesajele sau alte informații sensibile."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Când permiți accesul, înregistrezi sau proiectezi o aplicație, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> are acces la orice se afișează pe ecran sau se redă în aplicație. Ai grijă cu parolele, detaliile de plată, mesajele sau alte informații sensibile."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Continuă"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Permite accesul la o aplicație sau înregistreaz-o"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Permiți trimiterea sau înregistrarea din aplicație?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Când permiți accesul, înregistrezi sau proiectezi, aplicația are acces la orice este vizibil pe ecran sau se redă pe dispozitiv. Ai grijă cu parolele, detaliile de plată, mesajele sau alte informații sensibile."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Când permiți accesul, înregistrezi sau proiectezi o aplicație, aceasta are acces la orice se afișează pe ecran sau se redă în aplicație. Ai grijă cu parolele, detaliile de plată, mesajele sau alte informații sensibile."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> va avea acces la toate informațiile vizibile pe ecran sau redate pe dispozitiv în timp ce înregistrezi sau proiectezi. Între aceste informații se numără parole, detalii de plată, fotografii, mesaje și conținutul audio pe care îl redai."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Începi să înregistrezi sau să proiectezi?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Serviciul care oferă această funcție va avea acces la toate informațiile vizibile pe ecran sau redate pe dispozitiv în timp ce înregistrezi sau proiectezi. Între aceste informații se numără parole, detalii de plată, fotografii, mesaje și conținutul audio pe care îl redai."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Tot ecranul"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"O singură aplicație"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Distribuie o aplicație sau înregistreaz-o"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Începi să înregistrezi sau să proiectezi cu <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Când permiți accesul, înregistrezi sau proiectezi, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> are acces la orice este vizibil pe ecran sau se redă pe dispozitiv. Prin urmare, ai grijă cu parolele, detaliile de plată, mesajele, fotografiile și conținutul audio și video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Când permiți accesul, înregistrezi sau proiectezi o aplicație, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> are acces la orice se afișează pe ecran sau se redă în aplicație. Prin urmare, ai grijă cu informații cum ar fi parolele, detaliile de plată, mesajele, fotografiile și conținutul audio și video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Începe"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Începi să proiectezi?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Când proiectezi, Android are acces la orice este vizibil pe ecran sau se redă pe dispozitiv. Prin urmare, ai grijă cu parolele, detaliile de plată, mesajele, fotografiile și conținutul audio și video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Când proiectezi o aplicație, Android are acces la orice se afișează sau se redă în aplicație. Prin urmare, ai grijă cu parolele, detaliile de plată, mesajele, fotografiile și conținutul audio și video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Începe să proiectezi conținut"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Începi să permiți accesul?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Când permiți accesul, înregistrezi sau proiectezi, Android are acces la orice este vizibil pe ecran sau se redă pe dispozitiv. Prin urmare, ai grijă cu parolele, detaliile de plată, mesajele, fotografiile și conținutul audio și video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Când permiți accesul, înregistrezi sau proiectezi o aplicație, Android are acces la orice se afișează pe ecran sau se redă în aplicație. Prin urmare, ai grijă cu informații cum ar fi parolele, detaliile de plată, mesajele, fotografiile și conținutul audio și video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Începe"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Trimiterea se oprește când comuți între aplicații"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Trimite această aplicație"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Revino"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Comutator pentru aplicații"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blocată de administratorul IT"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Capturile de ecran sunt dezactivate de politica privind dispozitivele"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Șterge toate notificările"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Pe acest dispozitiv este instalat un certificat CA. Traficul de rețea securizat poate fi monitorizat sau modificat."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Administratorul tău a activat înregistrarea în jurnal pentru rețea, funcție care monitorizează traficul de pe dispozitivul tău."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Administratorul a activat înregistrarea în jurnal pentru rețea, funcție care monitorizează traficul în profilul de serviciu, dar nu și în profilul personal."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Acest dispozitiv este conectat la internet prin aplicația <xliff:g id="VPN_APP">%1$s</xliff:g>. Activitatea în rețea, inclusiv e-mailurile și datele de navigare, sunt vizibile pentru administratorul IT."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Acest dispozitiv este conectat la internet prin aplicația <xliff:g id="VPN_APP">%1$s</xliff:g>. Activitatea în rețea, inclusiv e-mailurile și datele de navigare, sunt vizibile pentru furnizorul de servicii VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Acest dispozitiv este conectat la internet prin aplicația <xliff:g id="VPN_APP">%1$s</xliff:g>. Activitatea în rețea, inclusiv e-mailurile și datele de navigare, sunt vizibile pentru administratorul IT."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Acest dispozitiv este conectat la internet prin aplicațiile <xliff:g id="VPN_APP_0">%1$s</xliff:g> și <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Activitatea în rețea, inclusiv e-mailurile și datele de navigare, sunt vizibile pentru administratorul IT."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Aplicațiile pentru lucru sunt conectate la internet prin <xliff:g id="VPN_APP">%1$s</xliff:g>. Activitatea în rețea cu aplicațiile pentru lucru, inclusiv e-mailurile și datele de navigare, sunt vizibile pentru administratorul IT și pentru furnizorul de servicii VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Aplicațiile personale sunt conectate la internet prin <xliff:g id="VPN_APP">%1$s</xliff:g>. Activitatea în rețea, inclusiv e-mailurile și datele de navigare, sunt vizibile pentru furnizorul de servicii VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"dezactivează"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Sunete și vibrații"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Setări"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Redus la un volum mai sigur"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Volumul a fost ridicat mai mult timp decât este recomandat"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volumul a fost redus la un nivel mai sigur"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Volumul căștilor a fost ridicat mai mult timp decât este recomandat"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Volumul căștilor a depășit limita de siguranță pentru săptămâna aceasta"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Ascultă în continuare"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Redu volumul"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Aplicația este fixată"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Astfel rămâne afișat până anulezi fixarea. Atinge lung opțiunile Înapoi și Recente pentru a anula fixarea."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Astfel rămâne afișat până anulezi fixarea. Atinge lung opțiunile Înapoi și Acasă pentru a anula fixarea."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Meniul de pornire"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Pagina <xliff:g id="ID_1">%1$d</xliff:g> din <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Ecran de blocare"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telefonul s-a oprit din cauza încălzirii"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Acum telefonul funcționează normal.\nAtinge pentru mai multe informații"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefonul se încălzise prea mult și s-a oprit pentru a se răci. Acum telefonul funcționează normal.\n\nTelefonul s-ar putea încălzi prea mult dacă:\n	• folosești aplicații care consumă multe resurse (de ex., jocuri, aplicații video/de navigare);\n	• descarci/încarci fișiere mari;\n	• folosești telefonul la temperaturi ridicate."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Vezi pașii pentru îngrijire"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefonul se încălzește"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Anumite funcții sunt limitate în timp ce telefonul se răcește.\nAtinge pentru mai multe informații."</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Telefonul va încerca automat să se răcească. Îl poți folosi în continuare, dar e posibil să funcționeze mai lent.\n\nDupă ce se răcește, telefonul va funcționa normal."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Vezi pașii pentru îngrijire"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Deconectează dispozitivul"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Dispozitivul se încălzește lângă portul de încărcare. Dacă este conectat la un încărcător sau accesoriu USB, deconectează-l și ai grijă, deoarece și cablul poate fi cald."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Mărește tot ecranul"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Mărește o parte a ecranului"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Deschide setările pentru mărire"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Închide setările de mărire"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Trage de colț pentru a redimensiona"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Permite derularea pe diagonală"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Redimensionează"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"anulează marcarea ca preferată"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Mută pe poziția <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Comenzi"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Alege comenzile dispozitivelor de accesat rapid"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Ține apăsat și trage pentru a rearanja comenzile"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Au fost șterse toate comenzile"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Modificările nu au fost salvate"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Încearcă alt cod PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Confirmă schimbarea pentru <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Glisează pentru a vedea mai multe"</string>
+    <string name="retry_face" msgid="416380073082560186">"Încearcă din nou autentificarea facială"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Se încarcă recomandările"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Ascunzi comanda media pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Setări"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> de la <xliff:g id="ARTIST_NAME">%2$s</xliff:g> se redă în <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> din <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> rulează"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Redă"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Întrerupe"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Melodia anterioară"</string>
@@ -967,8 +993,10 @@
     <string name="media_output_dialog_accessibility_title" msgid="4681741064190167888">"Dispozitive disponibile pentru ieșire audio."</string>
     <string name="media_output_dialog_accessibility_seekbar" msgid="5332843993805568978">"Volum"</string>
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
-    <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Difuzoare și afișaje"</string>
+    <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Difuzoare și ecrane"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Dispozitive sugerate"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Oprește sesiunea comună ca să muți elementul media pe alt dispozitiv"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Oprește"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Cum funcționează transmisia"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Transmite"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Persoanele din apropiere cu dispozitive Bluetooth compatibile pot asculta conținutul pe care îl transmiți"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Nu se poate salva. Încearcă din nou."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Nu se poate salva."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Folosește minimum 4 caractere."</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Folosește maximum 16 caractere"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Folosește maximum <xliff:g id="LENGTH">%1$d</xliff:g> caractere"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Numărul versiunii"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Numărul versiunii s-a copiat în clipboard."</string>
     <string name="basic_status" msgid="2315371112182658176">"Deschide conversația"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problemă la citirea măsurării bateriei"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Atinge pentru mai multe informații"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Nicio alarmă setată"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"intră în blocarea ecranului"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Senzor de amprentă"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autentifică-te"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"Accesează dispozitivul"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Asistentul ascultă"</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="note_task_button_label" msgid="8718616095800343136">"Notetaking"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Luare de notițe"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Luare de notițe, <xliff:g id="NOTE_TAKING_APP">%1$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">"Oprești transmisia <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Dacă transmiți <xliff:g id="SWITCHAPP">%1$s</xliff:g> sau schimbi ieșirea, transmisia actuală se va opri"</string>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Află mai multe"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Află mai multe la <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Deschide <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Aplicația este configurată"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Cel puțin un card a fost adăugat în Portofel"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Instalează o aplicație pentru camera foto"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Aplicația este configurată"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Este disponibil cel puțin un dispozitiv"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Pentru a adăuga aplicația Portofel drept comandă rapidă, asigură-te că aplicația este instalată"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Pentru a adăuga aplicația Portofel drept comandă rapidă, asigură-te că ai adăugat cel puțin un card"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Pentru a adăuga Scanner de coduri QR drept comandă rapidă, asigură-te că este instalată o aplicație pentru camera foto"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Pentru a adăuga aplicația Home drept comandă rapidă, asigură-te că aplicația este instalată"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Este disponibil cel puțin un dispozitiv"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Selectează o aplicație prestabilită pentru note ca să folosești comanda rapidă de luat note"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Selectează aplicația"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Atinge lung comanda rapidă"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Anulează"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Schimbă ecranul acum"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Conectează-ți creionul la un încărcător"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Nivelul bateriei creionului este scăzut"</string>
     <string name="video_camera" msgid="7654002575156149298">"Cameră video"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Nu poți iniția apeluri din acest profil"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Politica privind activitatea îți permite să efectuezi apeluri telefonice numai din profilul de serviciu"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Nu poți iniția apeluri dintr-o aplicație personală"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Organizația îți permite să inițiezi apeluri numai din aplicațiile pentru lucru"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Comută la profilul de serviciu"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Închide"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instalează o aplicație de lucru pentru telefon"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Anulează"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizează ecranul de blocare"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Deblochează pentru a personaliza ecranul de blocare"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Conexiune Wi-Fi indisponibilă"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Camera foto a fost blocată"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Camera foto și microfonul sunt blocate"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Microfonul a fost blocat"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Modul Cu prioritate este activat"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Asistentul este atent"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Setează aplicația prestabilită de note din Setări"</string>
+    <string name="install_app" msgid="5066668100199613936">"Instalează aplicația"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Microfon și cameră"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Folosit recent de aplicații"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Vezi accesarea recentă"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Gata"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Extinde și afișează opțiunile"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Restrânge"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Închide aplicația"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> a fost închisă"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Gestionează serviciul"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Gestionează accesul"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Folosit de un apel telefonic"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Folosit recent într-un apel telefonic"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Folosit de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Folosit recent de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Folosit de <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Folosit recent de <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Folosit de <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Folosit recent de <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ro/strings_tv.xml b/packages/SystemUI/res/values-ro/strings_tv.xml
deleted file mode 100644
index 991eef6..0000000
--- a/packages/SystemUI/res/values-ro/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN este conectat"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN este deconectat"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Prin <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Notificări"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Nicio notificare"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Microfonul înregistrează"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Camera foto înregistrează"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Camera foto și microfonul înregistrează"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Microfonul nu mai înregistrează"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Camera foto a oprit înregistrarea"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Camera foto și microfonul nu mai înregistrează"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Înregistrarea ecranului a început"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Înregistrarea ecranului s-a oprit"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 25807f2..400db7b 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Включить USB-порт"</string>
     <string name="learn_more" msgid="4690632085667273811">"Подробнее"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Скриншот"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Функция \"Отложить блокировку\" отключена"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Отложенная блокировка отключена"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"отправлено изображение"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Сохранение..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Сохранение скриншота в рабочем профиле…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"Приложение \"<xliff:g id="APPNAME">%1$s</xliff:g>\" обнаружило создание скриншота."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"Приложение \"<xliff:g id="APPNAME">%1$s</xliff:g>\" и другие запущенные продукты обнаружили создание скриншота."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Добавить в заметку"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Запись видео с экрана"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Запись видео с экрана"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Обработка записи с экрана…"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Текущее уведомление для записи видео с экрана"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Начать запись?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"В записи может появиться конфиденциальная информация, которая видна на экране или воспроизводится на устройстве, например пароли, сведения о платежах, фотографии, сообщения и аудиозаписи."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Записывать весь экран"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Записывать окно приложения"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Когда вы записываете видео с экрана, Android получает доступ ко всему, что видно и воспроизводится на экране устройства. Помните об этом, если соберетесь вводить или просматривать пароли, платежные данные, сообщения и другую конфиденциальную информацию."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Когда вы записываете видео с окна приложения, Android получает доступ ко всему, что видно и воспроизводится в приложении. Помните об этом, если соберетесь вводить или просматривать пароли, платежные данные, сообщения и другую конфиденциальную информацию."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Начать запись"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Начать запись?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Когда вы записываете видео с экрана, Android получает доступ ко всему, что видно или воспроизводится на устройстве. Поэтому будьте осторожны с паролями, сведениями о способах оплаты, сообщениями, фотографиями, аудио- и видеозаписями."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Когда вы записываете экран приложения, система Android получает доступ ко всему, что видно или воспроизводится в нем. Поэтому будьте осторожны с паролями, сведениями о способах оплаты, сообщениями, фотографиями, аудио- и видеозаписями."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Начать запись"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Записывать аудио"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Звук с устройства"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Звук с вашего устройства, например музыка, звонки и рингтоны"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Микрофон"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Звук с устройства и микрофон"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Начать"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Начать"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Идет запись видео с экрана"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Идет запись видео с экрана и звука"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Показывать прикосновения к экрану"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Поделиться"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Видео с экрана сохранено"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Нажмите, чтобы посмотреть."</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Не удалось удалить запись видео с экрана"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Не удалось сохранить запись видео с экрана."</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Не удалось начать запись видео с экрана."</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Полноэкранный режим"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Чтобы выйти, проведите по экрану сверху вниз."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"ОК"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Назад"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Главный экран"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Меню"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Лицо распознано"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Подтверждено"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Нажмите \"Подтвердить\""</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Сканирование выполнено. Нажмите на значок разблокировки."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Разблокировано сканированием лица"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Разблокировано сканированием лица. Нажмите, чтобы продолжить."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Лицо распознано. Нажмите, чтобы продолжить."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Лицо распознано. Нажмите на значок разблокировки."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Аутентификация выполнена"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Отмена распознавания лица"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN-код"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Использовать графический ключ"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Использовать пароль"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Если вы неправильно введете графический ключ ещё раз, ваш рабочий профиль и его данные будут удалены."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Если вы неправильно введете PIN-код ещё раз, ваш рабочий профиль и его данные будут удалены."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Если вы неправильно введете пароль ещё раз, ваш рабочий профиль и его данные будут удалены."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Настроить"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Не сейчас"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Это необходимо для повышения безопасности и производительности."</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Настройте разблокировку по отпечатку пальца заново"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Разблокировка по отпечатку пальца"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Настройка разблокировки по отпечатку пальца"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Для повторной настройки разблокировки по отпечатку пальца существующие изображения и модели отпечатков будут удалены с устройства.\n\nЧтобы разблокировать телефон по отпечатку пальца, вам потребуется настроить эту функцию заново."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Для повторной настройки разблокировки по отпечатку пальца существующие изображения и модель отпечатков будут удалены с устройства.\n\nЧтобы разблокировать телефон по отпечатку пальца, вам потребуется настроить эту функцию заново."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Не удается настроить разблокировку по отпечатку пальца. Перейдите в настройки и повторите попытку."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Настройте фейсконтроль заново"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Фейсконтроль"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Настройка фейсконтроля"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Для повторной настройки фейсконтроля существующая модель лица будет удалена с устройства.\n\nЧтобы разблокировать телефон с помощью фейсконтроля, вам потребуется настроить эту функцию заново."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Не удалось настроить фейсконтроль. Перейдите в настройки и повторите попытку."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Прикоснитесь к сканеру отпечатков пальцев."</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Нажмите на значок разблокировки."</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Не удалось распознать лицо. Используйте отпечаток."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Аудиоустройство"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Гарнитура"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Устройство ввода"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Слуховые аппараты"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слуховые аппараты"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Включение…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автоповорот"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоповорот экрана"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Разблокировано сканированием лица"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Лицо распознано"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Чтобы повторить попытку, проведите вверх"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Проведите вверх, чтобы повторить распознавание лица."</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Чтобы использовать NFC, разблокируйте устройство."</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Это устройство принадлежит вашей организации"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Этим устройством владеет организация \"<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>\""</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"Удалить аккаунт?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Все приложения и данные этого пользователя будут удалены."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Удалить"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Во время записи или трансляции у приложения \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" будет доступ ко всей информации, которая видна на экране или воспроизводится с устройства, в том числе к паролям, сведениям о платежах, фотографиям, сообщениям и прослушиваемым аудиозаписям."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Во время записи или трансляции у сервиса, предоставляющего эту функцию, будет доступ ко всей информации, которая видна на экране или воспроизводится на устройстве, включая пароли, сведения о платежах, фотографии, сообщения и звуки."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Начать запись или трансляцию?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Начать запись или трансляцию через приложение \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\"?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Разрешить приложению \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" демонстрировать экран или записывать видео с него?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Весь экран"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Отдельное приложение"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Когда вы демонстрируете, транслируете экран или записываете видео с него, приложение \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" получает доступ ко всему, что видно и воспроизводится на экране устройства. Помните об этом, если соберетесь вводить или просматривать пароли, платежные данные, сообщения и другую конфиденциальную информацию."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Когда вы демонстрируете, транслируете экран или записываете видео с него, приложение \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" получает доступ ко всему, что видно и воспроизводится на экране устройства. Помните об этом, если соберетесь вводить или просматривать пароли, платежные данные, сообщения и другую конфиденциальную информацию."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Далее"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Демонстрация экрана или запись видео с него"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Разрешить приложению демонстрировать экран или записывать видео с него?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Когда вы демонстрируете, транслируете экран или записываете видео с него, это приложение получает доступ ко всему, что видно и воспроизводится на экране устройства. Помните об этом, если соберетесь вводить или просматривать пароли, платежные данные, сообщения и другую конфиденциальную информацию."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Когда вы демонстрируете, транслируете экран или записываете видео с него, это приложение получает доступ ко всему, что видно и воспроизводится на экране устройства. Помните об этом, если соберетесь вводить или просматривать пароли, платежные данные, сообщения и другую конфиденциальную информацию."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Во время записи или трансляции у приложения \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" будет доступ ко всему, что видно или воспроизводится на устройстве, в том числе к паролям, сведениям о способах оплаты, фотографиям, сообщениям и аудио."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Начать запись или трансляцию?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Во время записи или трансляции у сервиса, предоставляющего эту функцию, будет доступ ко всему, что видно или воспроизводится на устройстве, включая пароли, сведения о способах оплаты, фотографии, сообщения и аудио."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Весь экран"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Отдельное приложение"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Демонстрация или запись экрана приложения"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Начать запись или трансляцию через приложение \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\"?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Когда вы демонстрируете, транслируете экран или записываете видео с него, приложение \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" получает доступ ко всему, что видно или воспроизводится на устройстве. Поэтому будьте осторожны с паролями, сведениями о способах оплаты, сообщениями, фотографиями, аудио- и видеозаписями."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Когда вы демонстрируете, записываете или транслируете экран приложения, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> получает доступ ко всему, что видно или воспроизводится в этом приложении. Будьте осторожны с паролями, сведениями о способах оплаты, сообщениями, фотографиями, аудио- и видеозаписями."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Начать"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Начать трансляцию?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Во время трансляции система Android получает доступ ко всему, что видно или воспроизводится на устройстве. Поэтому будьте осторожны с паролями, сведениями о способах оплаты, сообщениями, фотографиями, аудио- и видеозаписями."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Когда вы транслируете экран приложения, система Android получает доступ ко всему, что видно или воспроизводится в нем. Поэтому будьте осторожны с паролями, сведениями о способах оплаты, сообщениями, фотографиями, аудио- и видеозаписями."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Начать трансляцию"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Начать показ?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Когда вы демонстрируете, транслируете экран или записываете видео с него, система Android получает доступ ко всему, что видно или воспроизводится на устройстве. Поэтому будьте осторожны с паролями, сведениями о способах оплаты, сообщениями, фотографиями, аудио- и видеозаписями."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Когда вы демонстрируете, записываете или транслируете экран приложения, система Android получает доступ ко всему, что видно или воспроизводится в нем. Поэтому будьте осторожны с паролями, сведениями о способах оплаты, сообщениями, фотографиями, аудио- и видеозаписями."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Начать"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Общий доступ прерывается при переключении приложений"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Открыть доступ к этому приложению"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Переключиться обратно"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Переключение приложений"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Заблокировано вашим администратором"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Запись экрана отключена в соответствии с правилами для устройства."</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Очистить все"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"На устройстве установлен сертификат ЦС. Ваш защищенный сетевой трафик могут отслеживать и изменять."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Администратор включил ведение сетевого журнала, чтобы отслеживать трафик на вашем устройстве."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Администратор включил ведение сетевого журнала, чтобы отслеживать трафик в вашем рабочем профиле (информация из личного профиля не собирается)."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Это устройство подключено к интернету через сервис \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". Ваши действия в сети, включая данные о работе с электронной почтой и в браузере, видны вашему системному администратору."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Это устройство подключено к интернету через сервис \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". Ваши действия в сети, включая электронные письма и контент в браузере, видны поставщику услуг VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Это устройство подключено к интернету через сервис \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". Ваши действия в сети, включая данные о работе с электронной почтой и в браузере, видны вашему системному администратору."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Это устройство подключено к интернету через сервисы \"<xliff:g id="VPN_APP_0">%1$s</xliff:g>\" и \"<xliff:g id="VPN_APP_1">%2$s</xliff:g>\". Ваши действия в сети, включая данные о работе с электронной почтой и в браузере, видны вашему системному администратору."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Рабочие приложения подключены к интернету через сервис \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". Ваши сетевые действия в этих приложениях, включая данные о работе с электронной почтой и в браузере, видны вашему системному администратору и поставщику услуг VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Личные приложения подключены к интернету через сервис \"<xliff:g id="VPN_APP">%1$s</xliff:g>\". Ваши действия в сети, включая данные о работе с электронной почтой и в браузере, видны вашему поставщику услуг VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"отключить"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Звук и вибрация"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Открыть настройки"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Громкость уменьшена до безопасного уровня"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Громкость была высокой дольше рекомендованного периода."</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Громкость уменьшена до безопасного уровня"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Вы используете наушники при высоком уровне громкости дольше, чем рекомендуется."</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Превышен безопасный лимит громкости наушников на этой неделе."</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Слушать дальше"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Убавить звук"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Приложение закреплено"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Приложение останется активным, пока вы не отмените блокировку, нажав и удерживая кнопки \"Назад\" и \"Обзор\"."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Приложение останется активным, пока вы не отмените блокировку, нажав и удерживая кнопки \"Назад\" и \"Главный экран\"."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Меню кнопки питания"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Страница <xliff:g id="ID_1">%1$d</xliff:g> из <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Заблокированный экран"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Телефон выключился из-за перегрева"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Сейчас телефон работает нормально.\nНажмите, чтобы получить дополнительную информацию"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Ваш телефон выключился из-за перегрева. Сейчас он работает нормально.\n\nВозможные причины перегрева телефона:\n	• использование ресурсоемких игр и приложений, связанных с видео или навигацией);\n	• скачивание или загрузка больших файлов;\n	• высокая температура окружающей среды."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Подробнее о действиях при перегреве…"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Телефон нагревается"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Пока телефон не остынет, некоторые функции могут быть недоступны.\nНажмите, чтобы получить дополнительную информацию"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Ваш телефон остынет автоматически.\n\nОбратите внимание, что до тех пор он может работать медленнее, чем обычно."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Подробнее о действиях при перегреве…"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Отключите устройство"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Устройство нагревается в районе зарядного порта. Если оно подключено к зарядному или USB-устройству, отключите его. Будьте осторожны: кабель тоже мог нагреться."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Увеличение всего экрана"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Увеличить часть экрана"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Открыть настройки увеличения"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Закрыть настройки увеличения"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Потяните за угол, чтобы изменить размер"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Разрешить прокручивать по диагонали"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Изменить размер"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Нажмите, чтобы открыть спец. возможности. Настройте или замените эту кнопку в настройках.\n\n"<annotation id="link">"Настройки"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Чтобы временно скрыть кнопку, переместите ее к краю экрана"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Отменить"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g>: сочетание клавиш удалено"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g>: сочетание клавиш удалено."</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# сочетание клавиш удалено}one{# сочетание клавиш удалено}few{# сочетания клавиш удалено}many{# сочетаний клавиш удалено}other{# сочетания клавиш удалено}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Перенести в левый верхний угол"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Перенести в правый верхний угол"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"удалить из избранного"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Переместить на позицию <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Элементы управления"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Выберите виджеты управления устройствами для быстрого доступа."</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Чтобы изменить порядок виджетов, перетащите их."</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Все виджеты управления удалены."</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Изменения не сохранены."</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Показать другие приложения"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Изменить порядок"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Добавить элементы управления"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Добавить виджеты"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Назад к редактированию"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"Не удалось загрузить список виджетов для управления устройствами. Проверьте, не изменились ли настройки приложения \"<xliff:g id="APP">%s</xliff:g>\"."</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"Управление недоступно."</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Введите другой PIN-код"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Подтвердите изменения для устройства \"<xliff:g id="DEVICE">%s</xliff:g>\""</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Проведите по экрану, чтобы увидеть больше"</string>
+    <string name="retry_face" msgid="416380073082560186">"Повторить распознавание лица"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Загрузка рекомендаций…"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Медиа"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Скрыть этот элемент в приложении \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Настройки"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Воспроизводится медиафайл \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\" (исполнитель: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>) из приложения \"<xliff:g id="APP_LABEL">%3$s</xliff:g>\"."</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> из <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запущено"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Воспроизвести"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Приостановить"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Предыдущий трек"</string>
@@ -960,7 +986,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Выбрано устройств: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(нет подключения)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Не удается переключиться. Нажмите, чтобы повторить попытку."</string>
-    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Подключите устройство"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Подключить устройство"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Чтобы начать трансляцию сеанса, откройте приложение"</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Неизвестное приложение"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Остановить трансляцию"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Колонки и дисплеи"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Рекомендуемые устройства"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Чтобы перенести медиафайлы на другое устройство, закройте доступ."</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Закрыть"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Как работают трансляции"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Трансляция"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Находящиеся рядом с вами люди с совместимыми устройствами Bluetooth могут слушать медиафайлы, которые вы транслируете."</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Не удалось сохранить. Повторите попытку."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Не удалось сохранить."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Минимальное количество символов – 4"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Максимальное количество символов – 16"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Максимальное количество символов – <xliff:g id="LENGTH">%1$d</xliff:g>."</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Номер сборки"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Номер сборки скопирован в буфер обмена."</string>
     <string name="basic_status" msgid="2315371112182658176">"Открытый чат"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Не удалось узнать уровень заряда батареи"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Нажмите, чтобы узнать больше."</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Нет будильников"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"разблокировать экран"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Сканер отпечатков пальцев"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"выполнить аутентификацию"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"указать устройство"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Ассистент вас слушает"</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="note_task_button_label" msgid="8718616095800343136">"Создание заметок"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Создание заметок"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"<xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Подробнее"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Подробнее: <xliff:g id="URL">%s</xliff:g>."</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Открыть \"<xliff:g id="APPNAME">%1$s</xliff:g>\""</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Приложение установлено."</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• В Кошельке есть хотя бы одна карта."</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Установлено приложение камеры."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Приложение установлено."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Доступно хотя бы одно устройство."</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Вы можете добавить ярлык приложения \"Кошелек\", только если оно установлено."</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Вы можете добавить ярлык приложения \"Кошелек\", только если добавлена хотя бы одна карта."</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Вы можете добавить ярлык сканера QR-кодов, только если установлено приложение камеры."</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Вы можете добавить ярлык приложения Home, только если оно установлено."</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Доступно хотя бы одно устройство."</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Выберите стандартное приложение для заметок, которое будет открываться при нажатии на ярлык."</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Выбрать приложение"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Нажмите и удерживайте ярлык"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Отмена"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Переключиться на другой экран"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Поставьте стилус на зарядку."</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Низкий заряд батареи стилуса"</string>
     <string name="video_camera" msgid="7654002575156149298">"Видеокамера"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Невозможно совершить звонок из этого профиля"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Согласно правилам вашей организации вы можете совершать телефонные звонки только из рабочего профиля."</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Нельзя звонить из личного приложения"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"В вашей организации разрешено звонить только из рабочих приложений."</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Перейти в рабочий профиль"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Закрыть"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Установить рабочее приложение для звонков"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Отмена"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Настройки заблок. экрана"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Разблокируйте устройство, чтобы настроить заблокированный экран"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Функция Wi-Fi недоступна"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камера заблокирована"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камера и микрофон заблокированы"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Микрофон заблокирован"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Режим \"Только важные\" включен"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Ассистент готов слушать"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Задайте стандартное приложение для заметок в настройках."</string>
+    <string name="install_app" msgid="5066668100199613936">"Установить приложение"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Микрофон и камера"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Недавно использовались приложениями"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Посмотреть недавний доступ"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Готово"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Развернуть и показать параметры"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Свернуть"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Закрыть это приложение"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" закрыто."</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Настроить сервис"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Настроить доступ"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Сейчас используется для телефонного звонка"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Недавно использовалось во время телефонного звонка"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Сейчас используется приложением \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Недавно использовалось приложением \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Сейчас используется приложением \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Недавно использовалось приложением \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Сейчас используется приложением \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Недавно использовалось приложением \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ru/strings_tv.xml b/packages/SystemUI/res/values-ru/strings_tv.xml
deleted file mode 100644
index e23558c..0000000
--- a/packages/SystemUI/res/values-ru/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN-подключение установлено"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN-подключение отключено"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Через приложение <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Уведомления"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Уведомлений нет."</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Выполняется запись с микрофона"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Выполняется запись с камеры"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Выполняется запись с камеры и микрофона"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Запись с микрофона остановлена"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Запись с камеры остановлена"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Запись с камеры и микрофона остановлена"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Запись видео с экрана началась."</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Запись видео с экрана остановлена."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index a4e340c..37a14f9 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> මෙම තිර රුව අනාවරණය කර ගෙන ඇත."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> සහ අනෙකුත් විවෘත යෙදුම් මෙම තිර රුව අනාවරණය කර ගෙන ඇත."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"සටහනට එක් කරන්න"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"තිර රෙකෝඩරය"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"තිර රෙකෝඩරය"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"තිර පටිගත කිරීම සකසමින්"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"තිර පටිගත කිරීමේ සැසියක් සඳහා කෙරෙන දැනුම් දීම"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"පටිගත කිරීම ආරම්භ කරන්නද?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"පටිගත කරන අතරතුර, Android පද්ධතියට ඔබේ තිරයේ පෙනෙන හෝ ඔබේ උපාංගයේ වාදනය කරන ඕනෑම සංවේදී තොරතුරක් ග්‍රහණය කර ගැනීමට හැකිය. මෙයට මුරපද, ගෙවීම් තොරතුරු, ඡායාරූප, පණිවිඩ සහ ඕඩියෝ ඇතුළත් වේ."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"සම්පූර්ණ තිරය පටිගත කරන්න"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"තනි යෙදුමක් පටිගත කරන්න"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"ඔබ පටිගත කරන අතරේ, Android හට ඔබේ තිරයේ පෙනෙන හෝ ඔබේ උපාංගයේ වාදනය වන ඕනෑම දෙයකට ප්‍රවේශය ඇත. එබැවින් මුරපද, ගෙවීම් විස්තර, පණිවිඩ හෝ වෙනත් සංවේදී තොරතුරු සමග ප්‍රවේශම් වන්න."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"ඔබ යෙදුමක් පටිගත කරන අතරේ, Android හට එම යෙදුමේ පෙන්වන හෝ වාදනය කරන ඕනෑම දෙයකට ප්‍රවේශය ඇත. එබැවින් මුරපද, ගෙවීම් විස්තර, පණිවිඩ හෝ වෙනත් සංවේදී තොරතුරු සමග ප්‍රවේශම් වන්න."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"පටිගත කිරීම අරඹන්න"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"පටිගත කිරීම ආරම්භ කරන්න ද?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"ඔබ පටිගත කරන අතරේ, Android හට ඔබේ තිරයේ පෙනෙන හෝ ඔබේ උපාංගයේ වාදනය වන ඕනෑම දෙයකට ප්‍රවේශය ඇත. ඒ නිසා මුරපද, ගෙවීම් විස්තර, පණිවුඩ, ඡායාරූප, සහ ශ්‍රව්‍ය සහ දෘශ්‍ය වැනි දේවල් පිළිබඳ ප්‍රවේශම් වන්න."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"ඔබ යෙදුමක් පටිගත කරන අතරතුර, Android හට එම යෙදුමේ පෙන්වන හෝ වාදනය කරන ඕනෑම දෙයකට ප්‍රවේශය ඇත. ඒ නිසා මුරපද, ගෙවීම් විස්තර, පණිවුඩ, ඡායාරූප, සහ ශ්‍රව්‍ය සහ දෘශ්‍ය වැනි දේවල් පිළිබඳ ප්‍රවේශම් වන්න."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"පටිගත කිරීම අරඹන්න"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"ඕඩියෝ පටිගත කරන්න"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"උපාංග ඕඩියෝ"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"සංගීතය, ඇමතුම් සහ නාද රිද්ම වැනි ඔබේ උපාංගය වෙතින් ශබ්ද"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"මයික්‍රෆෝනය"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"උපාංග ඕඩියෝ සහ මයික්‍රෆෝනය"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"ආරම්භ කරන්න"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"අරඹන්න"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"තිරය පටිගත කරමින්"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"තිරය සහ ඕඩියෝ පටිගත කරමින්"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"තිරය මත ස්පර්ශ පෙන්වන්න"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"බෙදා ගන්න"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"තිර පටිගත කිරීම සුරකින ලදී"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"බැලීමට තට්ටු කරන්න"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"තිර පටිගත කිරීම මැකීමේ දෝෂයකි"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"තිර පටිගත කිරීම සුරැකීමේ දෝෂයකි"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"තිර පටිගත කිරීම ආරම්භ කිරීමේ දෝෂයකි"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"මුළු තිරය බලමින්"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"ඉවත් වීමට, ඉහළ සිට පහළට ස්වයිප් කරන්න"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"තේරුණා"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"ආපසු"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"මුල් පිටුව"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"මෙනුව"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"මුහුණ සත්‍යාපන කළා"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"තහවුරු කළා"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"සම්පූර්ණ කිරීමට තහවුරු කරන්න තට්ටු කර."</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"මුහුණ මගින් අගුලු හරින ලදි. දිගටම කරගෙන යාමට අගුලු හැරීමේ නිරූපකය ඔබන්න."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"මුහුණ මගින් අගුළු හරින ලදි"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"මුහුණ මගින් අගුලු හරින ලදි. ඉදිරියට යාමට ඔබන්න."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"මුහුණ හඳුනා ගන්නා ලදි. ඉදිරියට යාමට ඔබන්න."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"මුහුණ හඳුනා ගන්නා ලදි. ඉදිරියට යාමට අගුලු හැරීමේ නිරූපකය ඔබන්න."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"සත්‍යාපනය විය"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"සත්‍යාපනය අවලංගු කරන්න"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN භාවිත කරන්න"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"රටාව භාවිත කරන්න"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"මුරපදය භාවිත කරන්න"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"ඔබ ඊළඟ උත්සාහයේදී වැරදි රටාවක් ඇතුළු කළහොත්, ඔබේ කාර්යාල පැතිකඩ සහ එහි දත්ත මකනු ඇත."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"ඔබ ඊළඟ උත්සාහයේදී වැරදි PIN එකක් ඇතුළු කළහොත්, ඔබේ කාර්යාල පැතිකඩ සහ එහි දත්ත මකනු ඇත."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"ඔබ ඊළඟ උත්සාහයේදී වැරදි මුරපදයක් ඇතුළු කළහොත්, ඔබේ කාර්යාල පැතිකඩ සහ එහි දත්ත මකනු ඇත."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"පිහිටුවන්න"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"දැන් නොවේ"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"ආරක්ෂාව සහ කාර්ය සාධනය වැඩි දියුණු කිරීම සඳහා මෙය අවශ්‍ය වේ"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"ඇඟිලි සලකුණු අගුළු හැරීම නැවත පිහිටුවන්න"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"ඇඟිලි සලකුණු අගුළු හැරීම"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"ඇඟිලි සලකුණු අගුළු හැරීම පිහිටුවන්න"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"නැවත ඇඟිලි සලකුණු අගුළු හැරීම පිහිටුවීම සඳහා, ඔබේ වත්මන් ඇඟිලි සලකුණු රූප සහ ආකෘති මකනු ඇත.\n\nඒවා මකා දැමීමෙන් පසුව, ඔබේ දුරකථනය අගුළු හැරීමට හෝ එය ඔබ බව සත්‍යාපනය කිරීමට ඔබේ ඇඟිලි සලකුණ භාවිතා කිරීම සඳහා ඔබට නැවත ඇඟිලි සලකුණු අගුළු හැරීම පිහිටුවීමට අවශ්‍ය වනු ඇත."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"ඇඟිලි සලකුණු අගුළු හැරීම නැවත පිහිටුවීම සඳහා, ඔබේ වත්මන් ඇඟිලි සලකුණු රූප සහ ආකෘතිය මකනු ඇත.\n\nඒවා මකා දැමීමෙන් පසුව, ඔබේ දුරකථනය අගුළු හැරීමට හෝ එය ඔබ බව සත්‍යාපනය කිරීමට ඔබේ ඇඟිලි සලකුණ භාවිතා කිරීම සඳහා ඔබට නැවත ඇඟිලි සලකුණු අගුළු හැරීම පිහිටුවීමට අවශ්‍ය වනු ඇත."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"ඇඟිලි සලකුණු අගුළු හැරීම පිහිටුවිය නොහැකි විය. නැවත උත්සාහ කිරීමට සැකසීම් වෙත යන්න."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"මුහුණෙන් අගුළු හැරීම නැවත පිහිටුවන්න"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"මුහුණෙන් අගුළු හැරීම"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"මුහුණෙන් අගුළු හැරීම පිහිටුවන්න"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"මුහුණෙන් අගුළු හැරීම නැවත පිහිටුවීම සඳහා, ඔබේ වත්මන් මුහුණු ආකෘතිය මකනු ඇත.\n\nඔබේ දුරකථනය අගුළු හැරීමට ඔබේ මුහුණ භාවිතා කිරීමට ඔබට මෙම විශේෂාංගය නැවත පිහිටුවීමට අවශ්‍ය වනු ඇත."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"මුහුණෙන් අගුළු හැරීම පිහිටුවිය නොහැකි විය. නැවත උත්සාහ කිරීමට සැකසීම් වෙත යන්න."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"ඇඟිලි සලකුණු සංවේදකය ස්පර්ශ කරන්න"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"ඉදිරියට යාමට අගුළු ඇරීමේ නිරූපකය ඔබන්න"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"මුහුණ හැඳිනිය නොහැක. ඒ වෙනුවට ඇඟිලි සලකුණ භාවිත ක."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ශ්‍රව්‍ය"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"හෙඩ්සෙටය"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ආදානය"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"ශ්‍රවණාධාරක"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ශ්‍රවණාධාරක"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ක්‍රියාත්මක කරමින්…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ස්වයංක්‍රීය කරකැවීම"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ස්වයංක්‍රීයව-භ්‍රමණය වන තිරය"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"මුහුණ මගින් අගුලු හරින ලදි"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"මුහුණ හඳුනා ගන්නා ලදි"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"නැවත උත්සාහ කිරීමට ඉහළට ස්වයිප් කරන්න"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"මුහුණෙන් අගුළු හැරීම නැවත උත්සාහ කිරීමට ඉහළට ස්වයිප් කරන්න"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC භාවිත කිරීමට අගුලු හරින්න"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"මෙම උපාංගය ඔබේ සංවිධානයට අයිතිය"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"මෙම උපාංගය <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> සංවිධානයට අයිතිය"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"පරිශීලකයා ඉවත් කරන්නද?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"මෙම පරිශීලකයාගේ සියලු යෙදුම් සහ දත්ත මකනු ඇත."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"ඉවත් කරන්න"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>ට පටිගත කරන හෝ විකාශ කරන අතරතුර ඔබේ තිරයේ දිස් වන හෝ ඔබේ උපාංගයෙන් වාදනය කරන සියලු තොරතුරු වෙත ප්‍රවේශ ලැබෙනු ඇත. මෙහි මුරපද, ගෙවීම් විස්තර, ඡායාරූප, පණිවිඩ සහ ඔබ වාදනය කරන ඕඩියෝ යනාදි තොරතුරු ඇතුළත් වේ."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"මෙම ශ්‍රිතය සපයන සේවාවට පටිගත කරන හෝ විකාශ කරන අතරතුර ඔබේ තිරයේ දිස් වන හෝ ඔබේ උපාංගයෙන් වාදනය කරන සියලු තොරතුරු වෙත ප්‍රවේශය ලැබෙනු ඇත. මෙහි මුරපද, ගෙවීම් විස්තර, ඡායාරූප, පණිවිඩ සහ ඔබ වාදනය කරන ඕඩියෝ යනාදි තොරතුරු ඇතුළත් වේ."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"පටිගත කිරීම හෝ විකාශය කිරීම ආරම්භ කරන්නද?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> සමග පටිගත කිරීම හෝ විකාශය කිරීම ආරම්භ කරන්නද?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> හට බෙදා ගැනීමට හෝ පටිගත කිරීමට ඉඩ දෙන්න ද?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"සම්පූර්ණ තිරය"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"තනි යෙදුමක්"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"ඔබ බෙදා ගන්නා විට, පටිගත කරන විට, හෝ විකාශනය කරන විට, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> හට ඔබේ තිරයේ පෙනෙන හෝ ඔබේ උපාංගයේ වාදනය වන ඕනෑම දෙයකට ප්‍රවේශය ඇත. එබැවින් මුරපද, ගෙවීම් විස්තර, පණිවිඩ හෝ වෙනත් සංවේදී තොරතුරු සමග ප්‍රවේශම් වන්න."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"ඔබ යෙදුමක් බෙදා ගන්නා විට, පටිගත කරන විට හෝ විකාශය කරන විට, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> හට එම යෙදුමේ පෙන්වන හෝ වාදනය කරන ඕනෑම දෙයකට ප්‍රවේශය ඇත. එබැවින් මුරපද, ගෙවීම් විස්තර, පණිවිඩ හෝ වෙනත් සංවේදී තොරතුරු සමග ප්‍රවේශම් වන්න."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"ඉදිරියට යන්න"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"යෙදුමක් බෙදා ගන්න හෝ පටිගත කරන්න"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"මෙම යෙදුම බෙදා ගැනීමට හෝ පටිගත කිරීමට ඉඩ දෙන්න ද?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"ඔබ බෙදා ගන්නා විට, පටිගත කරන විට, හෝ විකාශය කරන විට, හට ඔබේ තිරයේ පෙනෙන හෝ ඔබේ උපාංගයේ වාදනය වන ඕනෑම දෙයකට ප්‍රවේශය ඇත. එබැවින් මුරපද, ගෙවීම් විස්තර, පණිවිඩ හෝ වෙනත් සංවේදී තොරතුරු සමග ප්‍රවේශම් වන්න."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"ඔබ යෙදුමක් බෙදා ගන්නා විට, පටිගත කරන විට හෝ විකාශය කරන විට, හට එම යෙදුමේ පෙන්වන හෝ වාදනය කරන ඕනෑම දෙයකට ප්‍රවේශය ඇත. එබැවින් මුරපද, ගෙවීම් විස්තර, පණිවිඩ හෝ වෙනත් සංවේදී තොරතුරු සමග ප්‍රවේශම් වන්න."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> හට ඔබේ තිරයේ පෙනෙන හෝ පටිගත කිරීමේ දී හෝ විකාශනය කිරීමේ දී ඔබේ උපාංගයේ වාදනය වන සියලු තොරතුරු වෙත ප්‍රවේශය ඇත. මෙයට මුරපද, ගෙවීම් විස්තර, ඡායාරූප, පණිවුඩ, සහ ඔබ වාදනය කරන ශ්‍රව්‍ය වැනි තොරතුරු ඇතුළත් වේ."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"පටිගත කිරීම හෝ විකාශය කිරීම ආරම්භ කරන්න ද?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"මෙම කාර්යය සපයන සේවාවට තිරයේ පෙනෙන හෝ පටිගත කිරීමේ දී හෝ විකාශනය කිරීමේ දී ඔබේ උපාංගයේ වාදනය වන සියලු තොරතුරු වෙත ප්‍රවේශය ඇත. මෙයට මුරපද, ගෙවීම් විස්තර, ඡායාරූප, පණිවුඩ, සහ ඔබ වාදනය කරන ශ්‍රව්‍ය වැනි තොරතුරු ඇතුළත් වේ."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"සම්පූර්ණ තිරය"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"තනි යෙදුමක්"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"යෙදුමක් බෙදා ගන්න හෝ පටිගත කරන්න"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> සමග පටිගත කිරීම හෝ විකාශය කිරීම ආරම්භ කරන්න ද?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"ඔබ බෙදා ගන්නා විට, පටිගත කරන විට, හෝ විකාශනය කරන විට, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> හට ඔබේ තිරයේ පෙනෙන හෝ ඔබේ උපාංගයේ වාදනය වන ඕනෑම දෙයකට ප්‍රවේශය ඇත. ඒ නිසා මුරපද, ගෙවීම් විස්තර, පණිවුඩ, ඡායාරූප, සහ ශ්‍රව්‍ය සහ දෘශ්‍ය වැනි දේවල් පිළිබඳ ප්‍රවේශම් වන්න."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"ඔබ යෙදුමක් බෙදා ගන්නා විට, පටිගත කරන විට හෝ විකාශය කරන විට, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> හට එම යෙදුමේ පෙන්වන හෝ වාදනය කරන ඕනෑම දෙයකට ප්‍රවේශය ඇත. ඒ නිසා මුරපද, ගෙවීම් විස්තර, පණිවුඩ, ඡායාරූප, සහ ශ්‍රව්‍ය සහ දෘශ්‍ය වැනි දේවල් පිළිබඳ ප්‍රවේශම් වන්න."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"අරඹන්න"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"විකාශය ආරම්භ කරන්න ද?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"ඔබ විකාශය කරන විට, Android හට ඔබේ තිරයේ පෙනෙන හෝ ඔබේ උපාංගයේ වාදනය වන ඕනෑම දෙයකට ප්‍රවේශය ඇත. ඒ නිසා මුරපද, ගෙවීම් විස්තර, පණිවුඩ, ඡායාරූප, සහ ශ්‍රව්‍ය සහ දෘශ්‍ය වැනි දේවල් පිළිබඳ ප්‍රවේශම් වන්න."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"ඔබ යෙදුමක් විකාශය කරන විට, Android හට එම යෙදුමේ පෙන්වන හෝ වාදනය කරන ඕනෑම දෙයකට ප්‍රවේශය ඇත. ඒ නිසා මුරපද, ගෙවීම් විස්තර, පණිවුඩ, ඡායාරූප, සහ ශ්‍රව්‍ය සහ දෘශ්‍ය වැනි දේවල් පිළිබඳ ප්‍රවේශම් වන්න."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"විකාශය ආරම්භ කරන්න"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"බෙදා ගැනීම ආරම්භ කරන්න ද?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"ඔබ බෙදා ගන්නා විට, පටිගත කරන විට, හෝ විකාශය කරන විට, Android හට ඔබේ තිරයේ පෙනෙන හෝ ඔබේ උපාංගයේ වාදනය වන ඕනෑම දෙයකට ප්‍රවේශය ඇත. ඒ නිසා මුරපද, ගෙවීම් විස්තර, පණිවුඩ, ඡායාරූප, සහ ශ්‍රව්‍ය සහ දෘශ්‍ය වැනි දේවල් පිළිබඳ ප්‍රවේශම් වන්න."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"ඔබ යෙදුමක් බෙදා ගන්නා විට, පටිගත කරන විට හෝ විකාශය කරන විට, Android හට එම යෙදුමේ පෙන්වන හෝ වාදනය කරන ඕනෑම දෙයකට ප්‍රවේශය ඇත. ඒ නිසා මුරපද, ගෙවීම් විස්තර, පණිවුඩ, ඡායාරූප, සහ ශ්‍රව්‍ය සහ දෘශ්‍ය වැනි දේවල් පිළිබඳ ප්‍රවේශම් වන්න."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"අරඹන්න"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"ඔබ යෙදුම් මාරු කරන විට බෙදා ගැනීම විරාම වේ"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"ඒ වෙනුවට මෙම යෙදුම බෙදා ගන්න"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"ආපසු මාරු වන්න"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"යෙදුම් මාරුව"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"ඔබේ IT පරිපාලක විසින් අවහිර කර ඇත"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"උපාංග ප්‍රතිපත්තිය මගින් තිර ග්‍රහණය කිරීම අබල කර ඇත"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"සියල්ල හිස් කරන්න"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"මෙම උපාංගය තුළ සහතික අධිකාරියක් ස්ථාපනය කර තිබේ. ඔබගේ ආරක්ෂක ජාල තදබදය නිරීක්ෂණය හෝ වෙනස් කිරීමට පුළුවනි."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"ඔබගේ පරිපාලක ඔබගේ උපාංගය මත තදබදය නිරීක්ෂණය කරන ජාල ලොග් කිරීම ක්‍රියාත්මක කර ඇත."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"ඔබගේ පරිපාලක ඔබගේ පුද්ගලික පැතිකඩෙහි නොව කාර්යාල පැතිකඩෙහි තදබදය නිරීක්ෂණය කරන, ජාල පිරීම ක්‍රියාත්මක කර ඇත."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"මෙම උපාංගය <xliff:g id="VPN_APP">%1$s</xliff:g> හරහා අන්තර්ජාලයට සම්බන්ධ කර ඇත. ඉ-තැපැල් සහ බ්‍රවුස් කිරීමේ දත්ත ඇතුළුව, ඔබගේ ජාල ක්‍රියාකාරකම්, ඔබගේ IT පරිපාලකට දෘශ්‍යමාන වේ."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"මෙම උපාංගය <xliff:g id="VPN_APP">%1$s</xliff:g> හරහා අන්තර්ජාලයට සම්බන්ධ කර ඇත. ඉ-තැපැල් සහ බ්‍රවුස් කිරීමේ දත්ත ඇතුළුව, ඔබේ ජාල ක්‍රියාකාරකම්, VPN සැපයුම්කරුට දෘශ්‍යමාන වේ."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"මෙම උපාංගය <xliff:g id="VPN_APP">%1$s</xliff:g> හරහා අන්තර්ජාලයට සම්බන්ධ කර ඇත. ඉ-තැපැල් සහ බ්‍රවුස් කිරීමේ දත්ත ඇතුළුව, ඔබේ ජාල ක්‍රියාකාරකම්, ඔබේ IT පරිපාලකට දෘශ්‍යමාන වේ."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"මෙම උපාංගය <xliff:g id="VPN_APP_0">%1$s</xliff:g> සහ <xliff:g id="VPN_APP_1">%2$s</xliff:g> හරහා අන්තර්ජාලයට සම්බන්ධ කර ඇත. ඉ-තැපැල් සහ බ්‍රවුස් කිරීමේ දත්ත ඇතුළුව, ඔබගේ ජාල ක්‍රියාකාරකම්, ඔබගේ IT පරිපාලකට දෘශ්‍යමාන වේ."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"ඔබගේ කාර්යාල යෙදුම් <xliff:g id="VPN_APP">%1$s</xliff:g> හරහා අන්තර්ජාලයට සම්බන්ධ කර ඇත. ඉ-තැපැල් සහ බ්‍රවුස් කිරීමේ දත්ත ඇතුළුව, කාර්යාල යෙදුම්වල ඔබගේ ජාල ක්‍රියාකාරකම්, ඔබගේ IT පරිපාලක සහ VPN සැපයුම්කරුට දෘශ්‍යමාන වේ."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"ඔබගේ පුද්ගලික යෙදුම් <xliff:g id="VPN_APP">%1$s</xliff:g> හරහා අන්තර්ජාලයට සම්බන්ධ කර ඇත. ඉ-තැපැල් සහ බ්‍රවුස් කිරීමේ දත්ත ඇතුළුව, ඔබගේ ජාල ක්‍රියාකාරකම්, ඔබගේ VPN සැපයුම්කරුට දෘශ්‍යමාන වේ."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"අබල කරන්න"</string>
     <string name="sound_settings" msgid="8874581353127418308">"ශබ්ද සහ කම්පනය"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"සැකසීම්"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"සුරක්ෂිත පරිමාවකට අඩු කරන ලදි"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"නිර්දේශිත ප්‍රමාණයට වඩා වැඩි කාලයක් පරිමාව ඉහළ මට්ටමක පවතී"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"හඬ පරිමාව සුරක්ෂිත මට්ටමට අඩු කරන ලදි"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"නිර්දේශිත ප්‍රමාණයට වඩා වැඩි කාලයක් හෙඩ්ෆෝන් හඬ පරිමාව ඉහළ මට්ටමක පවතී"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"හෙඩ්ෆෝන් හඬ පරිමාව මෙම සතිය සඳහා සුරක්ෂිත සීමාව ඉක්මවා ඇත"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"දිගටම සවන් දෙන්න"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"හඬ පරිමාව අඩු කරන්න"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"යෙදුම අමුණා ඇත"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"මෙය ඔබ ගලවන තෙක් එය දසුන තුළ තබයි. ගැලවීමට දළ විශ්ලේෂණය ස්පර්ශ කර ආපසු අල්ලාගෙන සිටින්න."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"මෙය ඔබ ගලවන තෙක් එය දසුන තුළ තබයි. ගැලවීමට මුල් පිටුව ස්පර්ශ කර අල්ලාගෙන සිටින්න."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"බල මෙනුව"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g> න් <xliff:g id="ID_1">%1$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"අගුලු තිරය"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"දුරකථනය රත් වීම නිසා ක්‍රියාවිරහිත කරන ලදී"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"ඔබගේ දුරකථනය දැන් සාමාන්‍ය ලෙස ධාවනය වේ.\nතව තතු සඳහා තට්ටු කරන්න"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"ඔබේ දුරකථනය ඉතාම උණුසුම්ය, එම නිසා එය සිසිල් වීමට ක්‍රියාවිරහිත කරන ලදී. ධැන් ඔබේ දුරකථනය සාමාන්‍ය පරිදි ධාවනය වේ.\n\nඔබ පහත දේවල් සිදු කළහොත් ඔබේ දුරකථනය ඉතාම උණුසුම් විය හැකිය:\n	• සම්පත්-දැඩි සත්කාරක යෙදුම් භාවිතය (ක්‍රීඩා, වීඩියෝ, හෝ සංචලන යෙදුම් යනාදී)\n	• විශාල ගොනු බාගැනීම හෝ උඩුගත කිරීම\n	• ඔබේ දුරකථනය අධික උෂ්ණත්වයේදී භාවිත කිරීම"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"රැකවරණ පියවර බලන්න"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"දුරකථනය උණුසුම් වෙමින්"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"දුරකථනය සිසිල් වන අතරතුර සමහර විශේෂාංග සීමිත විය හැකිය.\nතව තතු සඳහා තට්ටු කරන්න"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"ඔබගේ දුරකථනය ස්වයංක්‍රියව සිසිල් වීමට උත්සාහ කරනු ඇත. ඔබට තවම ඔබේ දුරකථනය භාවිත කළ හැකිය, නමුත් එය සෙමින් ධාවනය විය හැකිය.\n\nඔබේ දුරකථනය සිසිල් වූ පසු, එය සාමාන්‍ය ලෙස ධාවනය වනු ඇත."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"රැකවරණ පියවර බලන්න"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"ඔබේ උපාංගය ගලවන්න"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"ඔබේ උපාංගය ආරෝපණ කවුළුව අවට උණුසුම් වෙමින් පවතී. එය චාජරයකට හෝ USB උපාංගයකට සම්බන්ධ කර ඇත්නම්, එය ගලවා, කේබලය උණුසුම් විය හැකි බැවින් ප්‍රවේශම් වන්න."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"පූර්ණ තිරය විශාලනය කරන්න"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"තිරයේ කොටසක් විශාලනය කරන්න"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"විශාලන සැකසීම් විවෘත කරන්න"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"විශාලන සැකසීම් වසන්න"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"ප්‍රමාණය වෙනස් කිරීමට කොන අදින්න"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"විකර්ණ අනුචලනයට ඉඩ දෙන්න"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"ප්‍රතිප්‍රමාණය කරන්න"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ප්‍රියතම වෙතින් ඉවත් කරන්න"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"ස්ථාන <xliff:g id="NUMBER">%d</xliff:g> වෙත ගෙන යන්න"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"පාලන"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"ඉක්මනින් ප්‍රවේශ වීම සඳහා උපාංග පාලන තෝරා ගන්න"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"පාලන නැවත පිළියෙළ කිරීමට අල්ලාගෙන සිට අදින්න"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"සියලු පාලන ඉවත් කර ඇත"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"වෙනස් කිරීම් නොසුරැකිණි"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"තවත් PIN එකක් උත්සාහ කරන්න"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> සඳහා වෙනස තහවුරු කරන්න"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"තව බැලීමට ස්වයිප් කරන්න"</string>
+    <string name="retry_face" msgid="416380073082560186">"මුහුණු සත්‍යාපනය නැවත උත්සාහ කරන්න"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"නිර්දේශ පූරණය කරමින්"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"මාධ්‍ය"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> සඳහා මෙම මාධ්‍ය පාලනය වසන්නද?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"සැකසීම්"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g>ගේ <xliff:g id="SONG_NAME">%1$s</xliff:g> ගීතය <xliff:g id="APP_LABEL">%3$s</xliff:g> වෙතින් ධාවනය වෙමින් පවතී"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>කින් <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> ධාවනය වේ"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"වාදනය කරන්න"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"විරාම ගන්වන්න"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"පෙර ඛණ්ඩය"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"ස්පීකර් සහ සංදර්ශක"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"යෝජිත උපාංග"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"මාධ්‍ය වෙනත් උපාංගයකට ගෙන යාමට ඔබේ බෙදා ගත් සැසිය නවත්වන්න"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"නවත්වන්න"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"විකාශනය ක්‍රියා කරන ආකාරය"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"විකාශනය"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"ගැළපෙන බ්ලූටූත් උපාංග සහිත ඔබ අවට සිටින පුද්ගලයින්ට ඔබ විකාශනය කරන මාධ්‍යයට සවන් දිය හැකිය"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"සුරැකිය නොහැකිය. නැවත උත්සාහ කරන්න."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"සුරැකිය නොහැකිය."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"අවම වශයෙන් අනුලකුණු 4ක් භාවිතා කරන්න"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"අනුලකුණු 16කට වඩා අඩුවෙන් භාවිතා කරන්න"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"අනුලකුණු <xliff:g id="LENGTH">%1$d</xliff:g>කට වඩා අඩුවෙන් භාවිතා කරන්න"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"නිමැවුම් අංකය"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"නිමැවුම් අංකය පසුරු පුවරුවට පිටපත් කරන ලදි."</string>
     <string name="basic_status" msgid="2315371112182658176">"සංවාදය විවෘත කරන්න"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"ඔබගේ බැටරි මනුව කියවීමේ දෝෂයකි"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"තවත් තොරතුරු සඳහා තට්ටු කරන්න"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"එලාම සකසා නැත"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"තිර අගුල ඇතුළු කරන්න"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"ඇඟිලි සලකුණු සංවේදකය"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"සත්‍යාපනය කරන්න"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"උපාංගය ඇතුළු කරන්න"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"සහයක සවන් දෙයි"</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="note_task_button_label" msgid="8718616095800343136">"සටහන් කර ගැනීම"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"සටහන් කර ගැනීම"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"සටහන් කර ගැනීම, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"තව දැන ගන්න"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"<xliff:g id="URL">%s</xliff:g> තුළින් තව දැන ගන්න"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> විවෘත කරන්න"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• යෙදුම සකසා ඇත"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Wallet වෙත අවම වශයෙන් එක කාඩ්පතක් එක් කර ඇත"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• කැමරා යෙදුමක් ස්ථාපන කරන්න"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• යෙදුම සකසා ඇත"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• අවම වශයෙන් එක උපාංගයක් ලැබේ"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"කෙටිමඟක් ලෙස Wallet යෙදුම එක් කිරීම සඳහා, යෙදුම ස්ථාපනය කර ඇති බවට වග බලා ගන්න"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"කෙටිමඟක් ලෙස Wallet යෙදුම එක් කිරීම සඳහා, අවම වශයෙන් එක් කාඩ්පතක් එක් කර ඇති බවට වග බලා ගන්න"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"කෙටිමඟක් ලෙස QR කේත ස්කෑනරය එක් කිරීම සඳහා, කැමරා යෙදුමක් ස්ථාපනය කර ඇති බවට වග බලා ගන්න"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home යෙදුම කෙටිමඟක් ලෙස එක් කිරීම සඳහා, යෙදුම ස්ථාපනය කර ඇති බව සහතික කර ගන්න"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• අවම වශයෙන් එක උපාංගයක් ලැබේ"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"සටහන් ගැනීමේ කෙටිමඟ භාවිතා කිරීමට පෙරනිමි සටහන් යෙදුමක් තෝරන්න"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"යෙදුම තෝරන්න"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"ස්පර්ශ කර අල්ලා සිටීමේ කෙටිමඟ"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"අවලංගු කරන්න"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"දැන් තිර මාරු කරන්න"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"ඔබේ පන්හිඳ චාජරයකට සම්බන්ධ කරන්න"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"පන්හිඳ බැටරිය අඩුයි"</string>
     <string name="video_camera" msgid="7654002575156149298">"වීඩියෝ කැමරාව"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"මෙම පැතිකඩෙන් ඇමතීමට නොහැක"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"ඔබේ වැඩ ප්‍රතිපත්තිය ඔබට කාර්යාල පැතිකඩෙන් පමණක් දුරකථන ඇමතුම් ලබා ගැනීමට ඉඩ සලසයි"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"පෞද්ගලික යෙදුමකින් ඇමතිය නොහැක"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"ඔබේ සංවිධානය ඔබට කාර්යාල යෙදුම්වලින් ඇමතුම් කිරීමට පමණක් ඉඩ දෙයි"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"කාර්යාල පැතිකඩ වෙත මාරු වන්න"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"වසන්න"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"කාර්යාල දුරකථන යෙදුමක් ස්ථාපනය කරන්න"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"අවලංගු කරන්න"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"අගුළු තිරය අභිරුචිකරණය කරන්න"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"අගුළු තිරය අභිරුචිකරණය කිරීමට අගුළු හරින්න"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi ලද නොහැක"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"කැමරාව අවහිරයි"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"කැමරාව සහ මයික්‍රොෆෝනය අවහිරයි"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"මයික්‍රොෆෝනය අවහිරයි"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ප්‍රමුඛතා මාදිලිය සක්‍රීයයි"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"සහයක අවධානය යොමු කරයි"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"සැකසීම් තුළ පෙරනිමි සටහන් යෙදුම සකසන්න"</string>
+    <string name="install_app" msgid="5066668100199613936">"යෙදුම ස්ථාපනය කරන්න"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"මයික්‍රොෆෝනය සහ කැමරාව"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"මෑත යෙදුම් භාවිතය"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"මෑත ප්‍රවේශය බලන්න"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"නිමයි"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"දිග හැර විකල්ප පෙන්වන්න"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"හකුළන්න"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"මෙම යෙදුම වසන්න"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> වසන ලදි"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"සේවය කළමනා කරන්න"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"ප්‍රවේශ කළමනා කරන්න"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"දුරකථන ඇමතුමේ භාවිත වේ"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"දුරකථන ඇමතුමේ මෑතකදී භාවිත කරන ලදි"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> භාවිත කරයි"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"<xliff:g id="APP_NAME">%1$s</xliff:g> විසින් මෑතකදී භාවිත කරන ලදි"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> භාවිත කරයි (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"<xliff:g id="APP_NAME">%1$s</xliff:g> විසින් මෑතකදී භාවිත කරන ලදි (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> භාවිත කරයි (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"<xliff:g id="APP_NAME">%1$s</xliff:g> විසින් මෑතකදී භාවිත කරන ලදි (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-si/strings_tv.xml b/packages/SystemUI/res/values-si/strings_tv.xml
deleted file mode 100644
index 1eaa24a..0000000
--- a/packages/SystemUI/res/values-si/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN සම්බන්ධිතයි"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN විසන්ධි කර ඇත"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> හරහා"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"දැනුම්දීම්"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"දැනුම්දීම් නැත"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"මයික්‍රෆෝනය පටිගත කරයි"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"කැමරාව පටිගත කරයි"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"කැමරාව සහ මයික්‍රෆෝනය පටිගත කරයි"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"මයික්‍රෆෝනය පටිගත කිරීම නැවැත්වීය"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"කැමරාව පටිගත කිරීම නැවැත්වීය"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"කැමරාව සහ මයික්‍රෆෝනය පටිගත කිරීම නැවැත්වීය"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"තිර පටිගත කිරීම ආරම්භ විය"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"තිර පටිගත කිරීම නතර විය"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index d59c6ae..baa9b4f 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Povoliť USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Ďalšie informácie"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Snímka obrazovky"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Predĺžené odomknutie je vypnuté"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Rozšírené odomknutie je vypnuté"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"odoslal(a) obrázok"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Prebieha ukladanie snímky obrazovky..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Ukladá sa snímka obrazovky do pracovného profilu…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"Aplikácia <xliff:g id="APPNAME">%1$s</xliff:g> zaznamenala túto snímku obrazovky."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> a ďalšie otvorené aplikácie zaznamenali túto snímku obrazovky."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Pridať do poznámky"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Rekordér obrazovky"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Rekordér obrazovky"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Spracúva sa záznam obrazovky"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Zobrazuje sa upozornenie týkajúce sa relácie záznamu obrazovky"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Chcete spustiť nahrávanie?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Počas nahrávania zaznamená systém Android všetky citlivé údaje, ktoré sa zobrazia na obrazovke alebo prehrajú v zariadení. Zahrnuje to heslá, platobné údaje, fotky, správy a zvuky."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Nahrávať celú obrazovku"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Nahrávať jednu aplikáciu"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Počas nahrávania bude mať Android prístup k všetkému na obrazovke, prípadne k obsahu, ktorý sa bude v zariadení prehrávať. Preto venujte zvýšenú pozornosť heslám, platobným údajom, správam a ďalším citlivým údajom."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Počas nahrávania aplikácie bude mať Android prístup k všetkému obsahu, ktorý sa v nej bude zobrazovať alebo prehrávať. Preto venujte zvýšenú pozornosť heslám, platobným údajom, správam a ďalším citlivým údajom."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Spustiť nahrávanie"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Chcete spustiť nahrávanie?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Počas nahrávania bude mať Android prístup k všetkému, čo sa zobrazuje na obrazovke alebo prehráva v zariadení. Preto zvýšte pozornosť v prípade položiek, ako sú heslá, platobné údaje, správy, fotky a zvuk či video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Počas nahrávania v aplikácii bude mať Android prístup k všetkému, čo sa v danej aplikácii zobrazuje alebo prehráva. Preto zvýšte pozornosť v prípade položiek, ako sú heslá, platobné údaje, správy, fotky a zvuk či video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Spustiť nahrávanie"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Nahrávať zvuk"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Zvuk zariadenia"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Zvuk zo zariadenia, napríklad hudba, hovory a tóny zvonenia"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofón"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Zvuk a mikrofón zariadenia"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Spustiť"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Začať"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Nahráva sa obrazovka"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Nahráva sa obrazovka a zvuk"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Zobrazovať klepnutia na obrazovku"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Zdieľať"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Nahrávka bola uložená"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Zobrazte klepnutím"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Pri odstraňovaní záznamu obrazovky sa vyskytla chyba"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Pri ukladaní nahrávky obrazovky sa vyskytla chyba"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Pri spustení nahrávania obrazovky sa vyskytla chyba"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Zobrazenie na celú obrazovku"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Ukončíte potiahnutím zhora nadol."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Dobre"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Späť"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Plocha"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Tvár bola overená"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Potvrdené"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Overenie dokončíte klepnutím na Potvrdiť"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Odomknuté tvárou. Pokračujte klepnutím na ikonu odomknutia"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Odomknuté tvárou"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Odomknuté tvárou. Pokračujte stlačením."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Tvár bola rozpoznaná. Pokračujte stlačením."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Tvár bola rozpoznaná. Pokračujte stlačením ikony odomknutia"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Overené"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Zrušiť overenie"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Použiť PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Použiť vzor"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Použiť heslo"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Ak pri ďalšom pokuse zadáte nesprávny vzor, váš pracovný profil a jeho dáta budú odstránené."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Ak pri ďalšom pokuse zadáte nesprávny PIN, váš pracovný profil a jeho dáta budú odstránené."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Ak pri ďalšom pokuse zadáte nesprávne heslo, váš pracovný profil a jeho dáta budú odstránené."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Nastaviť"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Teraz nie"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Vyžaduje sa na zlepšenie zabezpečenia a výkonu"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Znova nastavte odomknutie odtlačkom prsta"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Odomknutie odtlačkom prsta"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Nastavenie odomknutia odtlačkom prsta"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Odomknutie odtlačkom prsta môžete znova nastaviť, ale aktuálne obrázky a modely odtlačku prsta budú odstránené.\n\nPo ich odstránení budete musieť znova nastaviť odomknutie odtlačkom prsta, inak nebudete môcť odtlačkom prsta odomykať telefón ani overovať svoju totožnosť."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Odomknutie odtlačkom prsta môžete znova nastaviť, ale aktuálne obrázky a model odtlačku prsta budú odstránené.\n\nPo ich odstránení budete musieť znova nastaviť odomknutie odtlačkom prsta, inak nebudete môcť odtlačkom prsta odomykať telefón ani overovať svoju totožnosť."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Odomknutie odtlačkom prsta sa nepodarilo nastaviť. Prejdite do Nastavení a skúste to znova."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Znova nastavte odomknutie tvárou"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Odomknutie tvárou"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Nastavenie odomknutia tvárou"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Odomknutie tvárou môžete znova nastaviť, ale aktuálny model tváre bude odstránený.\n\nAk chcete telefón odomykať tvárou, budete musieť túto funkciu znova nastaviť."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Odomknutie tvárou sa nepodarilo nastaviť. Prejdite do Nastavení a skúste to znova."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Dotknite sa senzora odtlačkov prstov"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Pokračujte stlačením ikony odomknutia"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Tvár sa nedá rozpoznať. Použite odtlačok prsta."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Zvuk"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Náhlavná súprava"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Vstup"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Načúvadlá"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Načúvadlá"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Zapína sa…"</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Odomknuté tvárou"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Tvár bola rozpoznaná"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Potiahnutím nahor to skúste znova"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Potiahnite nahor a zopakujte odomknutie tvárou"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Ak chcete použiť NFC, odomknite"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Toto zariadenie patrí vašej organizácii"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Toto zariadení patrí organizácii <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -379,30 +396,39 @@
     <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>
     <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_title" msgid="9124124694835811874">"Odobrať 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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Povolenie <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> bude mať prístup k všetkým informáciám zobrazovaným na obrazovke alebo prehrávaným v zariadení počas nahrávania či prenosu. Patria medzi ne informácie, akými sú napríklad heslá, platobné podrobnosti, fotky, správy a prehrávaný zvuk."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Služba poskytujúca túto funkciu bude mať prístup k všetkým informáciám zobrazovaným na obrazovke alebo prehrávaným v zariadení počas nahrávania či prenosu. Patria medzi ne informácie, akými sú napríklad heslá, platobné podrobnosti, fotky, správy a prehrávaný zvuk."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Chcete začať nahrávanie alebo prenos?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Chcete spustiť nahrávanie alebo prenos s aktivovaným povolením <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Chcete povoliť aplikácii <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> zdieľanie alebo nahrávanie?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Celá obrazovka"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Jedna aplikácia"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Počas zdieľania, nahrávania alebo prenosu bude mať <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> prístup k všetkému na obrazovke, prípadne k obsahu, ktorý sa bude v zariadení prehrávať. Preto venujte zvýšenú pozornosť heslám, platobným údajom, správam a ďalším citlivým údajom."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Keď zdieľate, nahrávate alebo prenášate nejakú aplikáciu, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> má prístup k všetkému obsahu, ktorý sa v aplikácii zobrazuje alebo prehráva. Dajte preto pozor na heslá, platobné údaje, osobné správy a iné citlivé údaje."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Pokračovať"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Vyberte aplikáciu, ktorú chcete zdieľať alebo nahrávať"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Chcete povoliť tejto aplikácii zdieľať alebo nahrávať?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Počas zdieľania, nahrávania alebo prenosu bude mať táto aplikácia prístup k všetkému na obrazovke, prípadne k obsahu, ktorý sa bude v zariadení prehrávať. Venujte preto zvýšenú pozornosť heslám, platobným údajom, správam a ďalším citlivým údajom."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Počas zdieľania, nahrávania alebo prenosu bude mať táto aplikácia prístup k všetkému obsahu, ktorý sa v nej bude zobrazovať alebo prehrávať. Venujte preto zvýšenú pozornosť heslám, platobným údajom, správam či ďalším citlivým údajom."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> bude mať prístup k všetkým informáciám zobrazovaným na obrazovke alebo prehrávaným v zariadení počas nahrávania či prenosu. Patria medzi ne informácie, ako sú heslá, platobné údaje, fotky, správy a prehrávaný zvuk."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Chcete spustiť nahrávanie alebo prenos?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Služba poskytujúca túto funkciu bude mať prístup k všetkým informáciám zobrazovaným na obrazovke alebo prehrávaným v zariadení počas nahrávania či prenosu. Patria medzi ne informácie, ako sú heslá, platobné údaje, fotky, správy a prehrávaný zvuk."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Celá obrazovka"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Jedna aplikácia"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Vyberte aplikáciu, ktorú chcete zdieľať alebo nahrávať"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Chcete spustiť nahrávanie alebo prenos s aktivovaným povolením <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Počas zdieľania, nahrávania alebo prenosu bude mať <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> prístup k všetkému, čo sa zobrazuje na obrazovke alebo prehráva v zariadení. Preto zvýšte pozornosť v prípade položiek, ako sú heslá, platobné údaje, správy, fotky a zvuk či video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Počas zdieľania, nahrávania alebo prenosu v aplikácii bude mať <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> prístup k všetkému, čo sa v danej aplikácii zobrazuje alebo prehráva. Preto zvýšte pozornosť v prípade položiek, ako sú heslá, platobné údaje, správy, fotky a zvuk či video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Začať"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Chcete spustiť prenos?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Počas prenosu bude mať Android prístup k všetkému, čo sa zobrazuje na obrazovke alebo prehráva v zariadení. Preto zvýšte pozornosť v prípade položiek, ako sú heslá, platobné údaje, správy, fotky a zvuk či video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Počas prenosu v aplikácii bude mať Android prístup k všetkému, čo sa v danej aplikácii zobrazuje alebo prehráva. Preto zvýšte pozornosť v prípade položiek, ako sú heslá, platobné údaje, správy, fotky a zvuk či video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Spustiť prenos"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Chcete spustiť zdieľanie?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Počas zdieľania, nahrávania alebo prenosu bude mať Android prístup k všetkému, čo sa zobrazuje na obrazovke alebo prehráva v zariadení. Preto zvýšte pozornosť v prípade položiek, ako sú heslá, platobné údaje, správy, fotky a zvuk či video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Počas zdieľania, nahrávania alebo prenosu v aplikácii bude mať Android prístup k všetkému zobrazovanému alebo prehrávaného obsahu v danej aplikácii. Preto zvýšte pozornosť v prípade položiek, ako sú heslá, platobné údaje, správy, fotky a zvuk či video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Začať"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Zdieľanie sa pozastaví, keď prepnete aplikácie"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Zdieľať radšej túto aplikáciu"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Prepnúť späť"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Prepnutie aplikácie"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blokované vaším správcom IT"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Snímanie obrazovky je zakázané pravidlami pre zariadenie"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Vymazať všetko"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"Spravovať"</string>
     <string name="manage_notifications_history_text" msgid="57055985396576230">"História"</string>
     <string name="notification_section_header_incoming" msgid="850925217908095197">"Nové"</string>
-    <string name="notification_section_header_gentle" msgid="6804099527336337197">"Ticho"</string>
+    <string name="notification_section_header_gentle" msgid="6804099527336337197">"Tichý"</string>
     <string name="notification_section_header_alerting" msgid="5581175033680477651">"Upozornenia"</string>
     <string name="notification_section_header_conversations" msgid="821834744538345661">"Konverzácie"</string>
     <string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"Vymazať všetky tiché upozornenia"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"V tomto zariadení je nainštalovaná certifikačná autorita. Zabezpečená sieťová premávka môže byť sledovaná či upravená."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Správca aktivoval zapisovanie do denníka siete, ktoré sleduje premávku na vašom zariadení."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Správca aktivoval zapisovanie do denníka siete, ktoré sleduje premávku vo vašom pracovnom profile, ale nie osobnom."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Toto zariadenie je k internetu pripojené prostredníctvom aplikácie <xliff:g id="VPN_APP">%1$s</xliff:g>. Vašu aktivitu v sieti vrátane e‑mailov a dát prehliadania vidí váš správca IT."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Toto zariadenie je pripojené na internet prostredníctvom aplikácie <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša sieťová aktivita, ako sú e‑maily a dáta prehliadania, je viditeľná pre poskytovateľa siete VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Toto zariadenie je k internetu pripojené prostredníctvom aplikácie <xliff:g id="VPN_APP">%1$s</xliff:g>. Vašu aktivitu v sieti vrátane e‑mailov a dát prehliadania vidí váš správca IT."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Toto zariadenie je k internetu pripojené prostredníctvom aplikácií <xliff:g id="VPN_APP_0">%1$s</xliff:g> a <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Vašu aktivitu v sieti vrátane e‑mailov a dát prehliadania vidí váš správca IT."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Vaše pracovné aplikácie sú k internetu pripojené prostredníctvom aplikácie <xliff:g id="VPN_APP">%1$s</xliff:g>. Vašu aktivitu v sieti v pracovných aplikáciách vrátane e‑mailov a dát prehliadania vidí váš správca IT a poskytovateľ siete VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Vaše osobné aplikácie sú k internetu pripojené prostredníctvom aplikácie <xliff:g id="VPN_APP">%1$s</xliff:g>. Vašu aktivitu v sieti vrátane e‑mailov a dát prehliadania vidí váš poskytovateľ siete VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"zakázať"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Zvuk a vibrácie"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Nastavenia"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Znížené na bezpečnú hlasitosť"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Hlasitosť bola vysoká dlhšie, ako sa odporúča"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Hlasitosť bola znížená na bezpečnejšiu úroveň"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Hlasitosť slúchadiel bola vysoká dlhšie, ako sa odporúča"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Hlasitosť slúchadiel prekročila bezpečný limit pre tento týždeň"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Pokračovať v počúvaní"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Znížiť hlasitosť"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Aplikácia je pripnutá"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Obsah bude pripnutý v zobrazení, dokým ho neuvoľníte. Uvoľníte ho stlačením a podržaním tlačidiel Späť a Prehľad."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Obsah bude pripnutý v zobrazení, dokým ho neuvoľníte. Uvoľníte ho pridržaním tlačidiel Späť a Domov."</string>
@@ -634,8 +664,8 @@
     <string name="group_system_go_back" msgid="8838454003680364227">"Späť: prechod na predchádzajúci stav (tlačidlo Späť)"</string>
     <string name="group_system_access_home_screen" msgid="1857344316928441909">"Prístup k ploche"</string>
     <string name="group_system_overview_open_apps" msgid="6897128761003265350">"Prehľad otvorených aplikácií"</string>
-    <string name="group_system_cycle_forward" msgid="9202444850838205990">"Cyklické prechádzanie po nedávnych aplikáciách (dopredu)"</string>
-    <string name="group_system_cycle_back" msgid="5163464503638229131">"Cyklické prechádzanie po nedávnych aplikáciách (dozadu)"</string>
+    <string name="group_system_cycle_forward" msgid="9202444850838205990">"Cyklické prechádzanie nedávnymi aplikáciami (dopredu)"</string>
+    <string name="group_system_cycle_back" msgid="5163464503638229131">"Cyklické prechádzanie nedávnymi aplikáciami (dozadu)"</string>
     <string name="group_system_access_all_apps_search" msgid="488070738028991753">"Zoznam prístupov všet. aplik. a vyhľad. (teda Vyhľadávanie a Launcher)"</string>
     <string name="group_system_hide_reshow_taskbar" msgid="3809304065624351131">"Skrytie a opätovné zobrazenie panela úloh"</string>
     <string name="group_system_access_system_settings" msgid="7961639365383008053">"Prístup k nastaveniam systému"</string>
@@ -700,7 +730,7 @@
     <string name="left_icon" msgid="5036278531966897006">"Ľavá ikona"</string>
     <string name="right_icon" msgid="1103955040645237425">"Pravá ikona"</string>
     <string name="drag_to_add_tiles" msgid="8933270127508303672">"Pridržaním a presunutím pridáte karty"</string>
-    <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Dlaždice môžete usporiadať pridržaním a presunutím"</string>
+    <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Karty môžete usporiadať pridržaním a presunutím"</string>
     <string name="drag_to_remove_tiles" msgid="4682194717573850385">"Presunutím sem odstránite"</string>
     <string name="drag_to_remove_disabled" msgid="933046987838658850">"Minimálny počet vyžadovaných dlaždíc: <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g>"</string>
     <string name="qs_edit" msgid="5583565172803472437">"Upraviť"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Ponuka vypínača"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Strana <xliff:g id="ID_1">%1$d</xliff:g> z <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Uzamknutá obrazovka"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telefón sa vypol z dôvodu prehriatia"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Teraz telefón funguje ako obvykle.\nViac sa dozviete po klepnutí."</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefón bol príliš horúci, preto sa vypol, aby vychladol. Teraz funguje ako obvykle.\n\nTelefón sa môže príliš zahriať v týchto prípadoch:\n	• používanie náročných aplikácií (napr. hier, videí alebo navigácie);\n	• sťahovanie alebo nahrávanie veľkých súborov;\n	• používanie telefónu pri vysokých teplotách."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Zobraziť opatrenia"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Teplota telefónu stúpa"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Niektoré funkcie budú obmedzené, dokým neklesne teplota telefónu.\nViac sa dozviete po klepnutí."</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Váš telefón sa automaticky pokúsi schladiť. Môžete ho naďalej používať, ale môže fungovať pomalšie.\n\nPo poklese teploty bude telefón fungovať ako normálne."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Zobraziť opatrenia"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Odpojte zariadenie"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Zariadenie sa zahrieva pri nabíjacom porte. Ak je pripojené k nabíjačke alebo príslušenstvu USB, odpojte ho a dajte pozor, lebo môže byť horúci aj kábel."</string>
@@ -775,7 +799,7 @@
     <string name="instant_apps_title" msgid="8942706782103036910">"Aplikácia <xliff:g id="APP">%1$s</xliff:g> je spustená"</string>
     <string name="instant_apps_message" msgid="6112428971833011754">"Aplikácia bola otvorená bez inštalácie."</string>
     <string name="instant_apps_message_with_help" msgid="1816952263531203932">"Aplikácia bola otvorená bez inštalácie. Klepnutím zobrazíte ďalšie informácie."</string>
-    <string name="app_info" msgid="5153758994129963243">"Aplikácia"</string>
+    <string name="app_info" msgid="5153758994129963243">"O aplikácii"</string>
     <string name="go_to_web" msgid="636673528981366511">"Otvoriť prehliadač"</string>
     <string name="mobile_data" msgid="4564407557775397216">"Mobilné dáta"</string>
     <string name="mobile_data_text_format" msgid="6806501540022589786">"<xliff:g id="ID_1">%1$s</xliff:g> – <xliff:g id="ID_2">%2$s</xliff:g>"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Zväčšenie celej obrazovky"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Zväčšiť časť obrazovky"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Otvoriť nastavenia zväčšenia"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Zavrieť nastavenia zväčšenia"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Veľkosť zmeníte presunutím rohu"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Povoliť diagonálne posúvanie"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Zmeniť veľkosť"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"odstránite z obľúbených"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Presunúť na pozíciu <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Ovládacie prvky"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Vyberte ovládanie zariadení, ku ktorému chcete mať rýchly prístup"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Polohu každého ovládača môžete zmeniť jeho pridržaním a presunutím"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Všetky ovládače boli odstránené"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Zmeny neboli uložené"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Zobraziť ďalšie aplikácie"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Usporiadať"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Pridať ovládanie"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Pridať ovládače"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Späť k úpravám"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"Ovládacie prvky sa nepodarilo načítať. V aplikácii <xliff:g id="APP">%s</xliff:g> skontrolujte, či sa nezmenili nastavenia."</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"Kompatibilné ovládacie prvky nie sú k dispozícii"</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Skúste iný PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Potvrdenie zmeny zariadenia <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Potiahnutím zobrazíte ďalšie položky"</string>
+    <string name="retry_face" msgid="416380073082560186">"Znova skúsiť overenie tvárou"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Načítavajú sa odporúčania"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Médiá"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"Chcete tento ovládač médií pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> skryť?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"Chcete tento ovládač médií pre <xliff:g id="APP_NAME">%1$s</xliff:g> skryť?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"Aktuálna relácia média sa nedá skryť."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Skryť"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Pokračovať"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Nastavenia"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> od interpreta <xliff:g id="ARTIST_NAME">%2$s</xliff:g> sa prehráva z aplikácie <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> z <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"Aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> je spustená"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Prehrať"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pozastaviť"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Predchádzajúca skladba"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Reproduktory a obrazovky"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Navrhované zariadenia"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Ak chcete preniesť médiá do iného zariadenia, ukončite zdieľanú reláciu"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Ukončiť"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Ako vysielanie funguje"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Vysielanie"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Ľudia v okolí s kompatibilnými zariadeniami s rozhraním Bluetooth si môžu vypočuť médiá, ktoré vysielate"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Nedá sa uložiť. Skúste to znova."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Nedá sa uložiť."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Použite aspoň štyri znaky"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Použite menej než 16 znakov"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Použite menej znakov než <xliff:g id="LENGTH">%1$d</xliff:g>"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Číslo zostavy"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Číslo zostavy bolo skopírované do schránky."</string>
     <string name="basic_status" msgid="2315371112182658176">"Otvorená konverzácia"</string>
@@ -1009,7 +1037,7 @@
     <string name="audio_status" msgid="4237055636967709208">"Počúvam"</string>
     <string name="game_status" msgid="1340694320630973259">"Hrám hru"</string>
     <string name="empty_user_name" msgid="3389155775773578300">"Priatelia"</string>
-    <string name="empty_status" msgid="5938893404951307749">"Poďme sa rozprávať."</string>
+    <string name="empty_status" msgid="5938893404951307749">"Poďme večer četovať."</string>
     <string name="status_before_loading" msgid="1500477307859631381">"Obsah sa čoskoro zobrazí"</string>
     <string name="missed_call" msgid="4228016077700161689">"Zmeškaný hovor"</string>
     <string name="messages_count_overflow_indicator" msgid="7850934067082006043">"<xliff:g id="NUMBER">%d</xliff:g>+"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Pri čítaní meradla batérie sa vyskytol problém"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Klepnutím si zobrazíte ďalšie informácie"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Žiadny budík"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"zadať zámku obrazovky"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Senzor odtlačkov prstov"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"overte"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"vstúpte do zariadenia"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Asistent počúva"</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="note_task_button_label" msgid="8718616095800343136">"Zapisovanie poznámok"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Zapisovanie poznámok"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Zapisovanie poznámok, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Ďalšie informácie"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Viac sa dozviete na <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Otvoriť <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Aplikácia je nastavená"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Do Peňaženky bola pridaná minimálne jedna karta"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Nainštalujte si aplikáciu kamery"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Aplikácia je nastavená"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• K dispozícii je minimálne jedno zariadenie"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Ak chcete pridať aplikáciu Peňaženka ako odkaz, uistite sa, že je nainštalovaná"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Ak chcete pridať aplikáciu Peňaženka ako odkaz, uistite sa, že bola pridaná aspoň jedna karta"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Ak chcete pridať skener QR kódov ako odkaz, uistite, že je nainštalovaná aplikácia fotoaparátu"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Ak chcete pridať aplikáciu Home ako odkaz, uistite sa, že je nainštalovaná"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• K dispozícii je minimálne jedno zariadenie"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Ak chcete používať odkaz na písanie poznámok, vyberte predvolenú aplikáciu na písanie poznámok"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Výber aplikácie"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Pridržte skratku"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Zrušiť"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Prepnite obrazovky"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Pripojte dotykové pero k nabíjačke"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Stav batérie dotykového pera je nízky"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Z tohto profilu nemôžete volať"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Pracovné pravidlá vám umožňujú telefonovať iba v pracovnom profile"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Nemôžete volať z osobnej aplikácie"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Vaša organizácia vám povoľuje volať iba z pracovných aplikácií"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Prepnúť na pracovný profil"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Zavrieť"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Inštalovať pracovnú telefónnu aplikáciu"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Zrušiť"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Prispôsobiť uzamknutú obrazovku"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Ak chcete prispôsobiť uzamknutú obrazovku, odomknite ju"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi‑Fi nie je k dispozícii"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Režim priority je zapnutý"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Pozornosť Asistenta je zapnutá"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Nastavte predvolenú aplikáciu na poznámky v Nastaveniach"</string>
+    <string name="install_app" msgid="5066668100199613936">"Inštalovať aplikáciu"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofón a kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Nedávne využitie aplikácie"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Zobraziť nedávny prístup"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Hotovo"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Rozbaliť a zobraziť možnosti"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Zbaliť"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Zavrieť túto aplikáciu"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> je zatvorená"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Spravovať službu"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Spravovať prístup"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Využíva telefonický hovor"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Nedávno využil telefonický hovor"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Využíva <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Nedávno využila aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Využíva <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Nedávno využila aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Využíva <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Nedávno využila aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sk/strings_tv.xml b/packages/SystemUI/res/values-sk/strings_tv.xml
deleted file mode 100644
index a7479aa..0000000
--- a/packages/SystemUI/res/values-sk/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"Sieť VPN je pripojená"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"Sieť VPN je odpojená"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Cez: <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Upozornenia"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Žiadne upozornenia"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofón nahráva"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera nahráva"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera a mikrofón nahrávajú"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofón prestal nahrávať"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kamera prestala nahrávať"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kamera a mikrofón prestali nahrávať"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Nahrávanie obrazovky bolo spustené"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Nahrávanie obrazovky bolo zastavené"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index b600337ce..3608293 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Omogoči USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Več o tem"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Posnetek zaslona"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Podaljšanje časa odklenjenosti je onemogočeno"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Razširjeno odklepanje je onemogočeno"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"je poslal(-a) sliko"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Shranjevanje posnetka zaslona ..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Shranjevanje posnetka zaslona v delovni profil …"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"Aplikacija <xliff:g id="APPNAME">%1$s</xliff:g> je zaznala ta posnetek zaslona."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> in druge odprte aplikacije so zaznale ta posnetek zaslona."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Dodaj v zapisek"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Snemalnik zaslona"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Snemalnik zaslona"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Obdelava videoposnetka zaslona"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Nenehno obveščanje o seji snemanja zaslona"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Želite začeti snemati?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Med snemanjem lahko sistem Android zajame morebitne občutljive podatke, ki so prikazani na zaslonu ali se predvajajo v napravi. To vključuje gesla, podatke za plačilo, fotografije, sporočila in zvok."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Snemanje celotnega zaslona"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Snemanje posamezne aplikacije"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Med snemanjem ima Android dostop do vsega, kar je prikazano na zaslonu ali se predvaja v napravi. Zato bodite previdni z gesli, podatki za plačilo, sporočili ali drugimi občutljivimi podatki."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Med snemanjem aplikacije ima Android dostop do vsega, kar je prikazano ali predvajano v tej aplikaciji, zato bodite previdni z gesli, podatki za plačilo, sporočili ali drugimi občutljivimi podatki."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Začni snemanje"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Želite začeti snemati?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Med snemanjem ima Android dostop do vsega, kar je prikazano na zaslonu ali se predvaja v napravi. Zato bodite previdni z gesli, podatki za plačilo, sporočili, fotografijami ter z zvokom in videom."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Med snemanjem aplikacije ima Android dostop do vsega, kar je prikazano ali predvajano v tej aplikaciji, zato bodite previdni z gesli, podatki za plačilo, sporočili, fotografijami ter z zvokom in videom."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Začni snemanje"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Snemanje zvoka"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Zvok v napravi"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Zvoki v napravi, kot so glasba, klici in toni zvonjenja."</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Zvok v napravi in mikrofon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Začni"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Začni"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Snemanje zaslona"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Snemanje zaslona in zvoka"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Prikaz dotikov na zaslonu"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Deli"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Snemanje zaslona je shranjeno"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Dotaknite se za ogled."</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Napaka pri brisanju videoposnetka zaslona"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Napaka pri shranjevanju posnetka zaslona"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Napaka pri začenjanju snemanja zaslona"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Vklopljen je celozaslonski način."</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Zaprete ga tako, da z vrha s prstom povlečete navzdol."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Razumem"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Nazaj"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Začetni zaslon"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Meni"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Pristnost obraza je potrjena"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Potrjeno"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Za dokončanje se dotaknite »Potrdite«"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Odklenjeno z obrazom. Za nadaljevanje pritisnite ikono za odklepanje."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Odklenjeno z obrazom"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Odklenjeno z obrazom. Pritisnite za nadaljevanje."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Obraz je prepoznan. Pritisnite za nadaljevanje."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Obraz je prepoznan. Za nadaljevanje pritisnite ikono za odklepanje."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Preverjena pristnost"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Prekliči preverjanje pristnosti"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Uporabi kodo PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Uporabi vzorec"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Uporabi geslo"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Če pri naslednjem poskusu vnesete napačen vzorec, bodo delovni profil in podatki v njem izbrisani."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Če pri naslednjem poskusu vnesete napačno kodo PIN, bodo delovni profil in podatki v njem izbrisani."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Če pri naslednjem poskusu vnesete napačno geslo, bodo delovni profil in podatki v njem izbrisani."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Nastavi"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Ne zdaj"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"To je potrebno, če želite izboljšati varnost in učinkovitost delovanja."</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Vnovična nastavitev odklepanja s prstnim odtisom"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Odklepanje s prstnim odtisom"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Nastavitev odklepanja s prstnim odtisom"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Če želite znova nastaviti odklepanje s prstnim odtisom, bodo trenutne slike in modeli prstnih odtisov izbrisani.\n\nPo izbrisu boste morali znova nastaviti odklepanje s prstnim odtisom, da boste telefon lahko odklenili s prstnim odtisom ali potrdili svojo identiteto."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Če želite znova nastaviti odklepanje s prstnim odtisom, bodo trenutne slike in model prstnih odtisov izbrisani.\n\nPo izbrisu boste morali znova nastaviti odklepanje s prstnim odtisom, da boste telefon lahko odklenili s prstnim odtisom ali potrdili svojo identiteto."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Odklepanja s prstnim odtisom ni bilo mogoče nastaviti. Odprite nastavitve in poskusite znova."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Vnovična nastavitev odklepanja z obrazom"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Odklepanje z obrazom"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Nastavitev odklepanja z obrazom"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Če želite znova nastaviti odklepanje z obrazom, bo trenutni model obraza izbrisan.\n\nZa odklepanje telefona z obrazom boste morali znova nastaviti to funkcijo."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Odklepanja z obrazom ni bilo mogoče nastaviti. Odprite nastavitve in poskusite znova."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Dotaknite se tipala prstnih odtisov"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Za nadaljevanje pritisnite ikono za odklepanje"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Obraza ni mogoče prepoznati. Uporabite prstni odtis."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Zvok"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Slušalke z mikrofonom"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Vhodna naprava"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Slušni pripomočki"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Slušni aparati"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Vklapljanje …"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Samodejno sukanje"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Samodejno sukanje zaslona"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Odklenjeno z obrazom"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Obraz je prepoznan"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Povlecite navzgor za vnovičen poskus"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Povlecite navzgor za vnovičen poskus odklepanja z obrazom"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Odklenite napravo, če želite uporabljati NFC."</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Ta naprava pripada vaši organizaciji"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Ta naprava pripada organizaciji <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> bo imela dostop do vseh podatkov, ki so med snemanjem ali predvajanjem prikazani na vašem zaslonu ali se predvajajo iz vaše naprave. To vključuje podatke, kot so gesla, podrobnosti o plačilu, fotografije, sporočila in zvok, ki ga predvajate."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Storitev, ki zagotavlja to funkcijo, bo imela dostop do vseh podatkov, ki so med snemanjem ali predvajanjem prikazani na vašem zaslonu ali se predvajajo iz vaše naprave. To vključuje podatke, kot so gesla, podrobnosti o plačilu, fotografije, sporočila in zvok, ki ga predvajate."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Želite začeti snemati ali predvajati?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Želite začeti snemati ali predvajati z aplikacijo <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Ali aplikaciji <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> dovolite deljenje ali snemanje?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Celoten zaslon"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Posamezna aplikacija"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Pri deljenju, snemanju ali predvajanju ima aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> dostop do vsega, kar je prikazano na zaslonu ali se predvaja v napravi. Zato bodite previdni z gesli, podatki za plačilo, sporočili ali drugimi občutljivimi podatki."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Pri deljenju, snemanju ali predvajanju aplikacije ima <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> dostop do vsega, kar je prikazano ali predvajano v tej aplikaciji, zato bodite previdni z gesli, podatki za plačilo, sporočili ali drugimi občutljivimi podatki."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Naprej"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Deljenje ali snemanje aplikacije"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Ali tej aplikaciji dovolite deljenje ali snemanje?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Pri deljenju, snemanju ali predvajanju ima ta aplikacija dostop do vsega, kar je prikazano na zaslonu ali se predvaja v napravi. Zato bodite previdni z gesli, podatki za plačilo, sporočili ali drugimi občutljivimi podatki."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Pri deljenju, snemanju ali predvajanju aplikacije ima ta aplikacija dostop do vsega, kar je prikazano ali predvajano v tisti aplikaciji, zato bodite previdni z gesli, podatki za plačilo, sporočili ali drugimi občutljivimi podatki."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> bo imela dostop do vseh podatkov, ki so med snemanjem ali predvajanjem prikazani na vašem zaslonu ali se predvajajo iz vaše naprave. To vključuje podatke, kot so gesla, podrobnosti o plačilu, fotografije, sporočila in zvok, ki ga predvajate."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Želite začeti snemati ali predvajati?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Storitev, ki zagotavlja to funkcijo, bo imela dostop do vseh podatkov, ki so med snemanjem ali predvajanjem prikazani na vašem zaslonu ali se predvajajo iz vaše naprave. To vključuje podatke, kot so gesla, podrobnosti o plačilu, fotografije, sporočila in zvok, ki ga predvajate."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Celoten zaslon"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Posamezna aplikacija"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Deljenje ali snemanje aplikacije"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Želite začeti snemati ali predvajati z aplikacijo <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Pri deljenju, snemanju ali predvajanju ima aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> dostop do vsega, kar je prikazano na zaslonu ali se predvaja v napravi. Zato bodite previdni z gesli, podatki za plačilo, sporočili, fotografijami ter z zvokom in videom."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Pri deljenju, snemanju ali predvajanju aplikacije ima aplikacija <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> dostop do vsega, kar je prikazano ali predvajano v tej aplikaciji, zato bodite previdni z gesli, podatki za plačilo, sporočili, fotografijami ter z zvokom in videom."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Začni"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Želite začeti predvajati?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Pri predvajanju ima Android dostop do vsega, kar je prikazano na zaslonu ali se predvaja v napravi. Zato bodite previdni z gesli, podatki za plačilo, sporočili, fotografijami ter z zvokom in videom."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Pri predvajanju aplikacije ima Android dostop do vsega, kar je prikazano ali predvajano v tej aplikaciji, zato bodite previdni z gesli, podatki za plačilo, sporočili, fotografijami ter z zvokom in videom."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Začni predvajanje"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Želite začeti deliti?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Pri deljenju, snemanju ali predvajanju ima Android dostop do vsega, kar je prikazano na zaslonu ali se predvaja v napravi. Zato bodite previdni z gesli, podatki za plačilo, sporočili, fotografijami ter z zvokom in videom."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Pri deljenju, snemanju ali predvajanju aplikacije ima Android dostop do vsega, kar je prikazano ali predvajano v tej aplikaciji, zato bodite previdni z gesli, podatki za plačilo, sporočili, fotografijami ter z zvokom in videom."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Začni"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Deljenje se začasno zaustavi ob preklopu aplikacije"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Delite to aplikacijo"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Preklopite nazaj"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Preklop aplikacije"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blokiral skrbnik za IT"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Zajemanje zaslonske slike je onemogočil pravilnik za naprave."</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Izbriši vse"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"V tej napravi je nameščen overitelj potrdil. Varni omrežni promet se lahko nadzira ali spreminja."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Skrbnik je vklopil beleženje omrežnega prometa, ki nadzira promet v napravi."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Skrbnik je vklopil beleženje omrežnega prometa, ki nadzoruje samo promet v delovnem profilu, tistega v osebnem profilu pa ne."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Ta naprava je povezana z internetom prek omrežja <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša omrežna dejavnost, vključno z e-pošto in podatki brskanja, je vidna skrbniku za IT."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Ta naprava je povezana z internetom prek omrežja <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša omrežna dejavnost, vključno z e-pošto in podatki brskanja, je vidna ponudniku omrežja VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Ta naprava je povezana z internetom prek omrežja <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša omrežna dejavnost, vključno z e-pošto in podatki brskanja, je vidna skrbniku za IT."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Ta naprava je povezana z internetom prek omrežij <xliff:g id="VPN_APP_0">%1$s</xliff:g> in <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Vaša omrežna dejavnost, vključno z e-pošto in podatki brskanja, je vidna skrbniku za IT."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Vaše delovne aplikacije so povezane z internetom prek omrežja <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša omrežna dejavnost v delovnih aplikacijah, vključno z e-pošto in podatki brskanja, je vidna skrbniku za IT in ponudniku omrežja VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Vaše osebne aplikacije so povezane z internetom prek omrežja <xliff:g id="VPN_APP">%1$s</xliff:g>. Vaša omrežna dejavnost, vključno z e-pošto in podatki brskanja, je vidna ponudniku omrežja VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"onemogoči"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Zvok in vibriranje"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Nastavitve"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Glasnost znižana na varnejšo raven"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Glasnost je bila visoka dalj časa, kot je priporočeno."</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Glasnost je bila zmanjšana na varnejšo raven"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Glasnost v slušalkah je bila visoka dalj časa, kot je priporočeno."</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Visoka glasnost v slušalkah je presegla varno omejitev za ta teden"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Ne prekini poslušanja"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Zmanjšaj glasnost"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Aplikacija je pripeta"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"S tem ostane vidna, dokler je ne odpnete. Če jo želite odpeti, hkrati pridržite gumba za nazaj in pregled."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"S tem ostane vidna, dokler je ne odpnete. Če jo želite odpeti, hkrati pridržite gumba za nazaj in za začetni zaslon."</string>
@@ -625,7 +655,7 @@
     <string name="keyboard_shortcut_search_list_hint" msgid="5982623262974326746">"Iskanje bližnjic"</string>
     <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"Ni najdenih bližnjic."</string>
     <string name="keyboard_shortcut_search_category_system" msgid="1151182120757052669">"Sistem"</string>
-    <string name="keyboard_shortcut_search_category_input" msgid="5440558509904296233">"Vrsta vnosa"</string>
+    <string name="keyboard_shortcut_search_category_input" msgid="5440558509904296233">"Vnos"</string>
     <string name="keyboard_shortcut_search_category_open_apps" msgid="1450959949739257562">"Odprte aplikacije"</string>
     <string name="keyboard_shortcut_search_category_current_app" msgid="2011953559133734491">"Trenutna aplikacija"</string>
     <string name="group_system_access_notification_shade" msgid="7116898151485382275">"Dostop do zaslona z obvestili"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Meni za vklop/izklop"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_1">%1$d</xliff:g>. stran od <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Zaklenjen zaslon"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Tel. izklopljen zaradi vročine"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Telefon zdaj deluje normalno.\nDotaknite se za več informacij"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefon je bil prevroč, zato se je izklopil, da se ohladi. Zdaj normalno deluje.\n\nTelefon lahko postane prevroč ob:\n	• uporabi aplikacij, ki intenzivno porabljajo sredstva (npr. za igranje iger, videoposnetke ali navigacijo)\n	• prenosu ali nalaganju velikih datotek\n	• uporabi telefona pri visokih temp."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Oglejte si navodila za ukrepanje"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefon se segreva"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Nekatere funkcije bodo med ohlajanjem telefona omejene.\nDotaknite se za več informacij"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Telefon se bo samodejno poskusil ohladiti. Še naprej ga lahko uporabljate, vendar bo morda deloval počasneje.\n\nKo se telefon ohladi, bo zopet deloval kot običajno."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Oglejte si navodila za ukrepanje"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Odklopite napravo"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Naprava se segreva pri vratih za polnjenje. Če je priključena na polnilnik ali dodatek USB, ga odklopite in bodite tem previdni, saj je tudi kabel lahko topel."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Povečanje celotnega zaslona"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Povečava dela zaslona"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Odpri nastavitve povečave"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Zapri nastavitve povečave"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Povlecite vogal, da spremenite velikost."</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Dovoli diagonalno pomikanje"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Spremeni velikost"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"odstranitev iz priljubljenih"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Premakni na položaj <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrolniki"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Izberite kontrolnike naprav, do katerih želite hitro dostopati."</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Držite in povlecite, da prerazporedite kontrolnike."</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Vsi kontrolniki so bili odstranjeni."</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Spremembe niso shranjene"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Prikaz drugih aplikacij"</string>
-    <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Razvrščanje"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Dodajte kontrolnike"</string>
+    <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Razvrsti"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Dodaj kontrolnike"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Nazaj na urejanje"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"Kontrolnikov ni bilo mogoče naložiti. Preverite aplikacijo <xliff:g id="APP">%s</xliff:g> in se prepričajte, da se njene nastavitve niso spremenile."</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"Združljivi kontrolniki niso na voljo"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Poskusite z drugo kodo PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Potrdite spremembo za napravo <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Če si želite ogledati več, povlecite"</string>
+    <string name="retry_face" msgid="416380073082560186">"Vnovični poskus preverjanja pristnosti z obrazom"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Nalaganje priporočil"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Predstavnost"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Želite skriti ta nadzor predstavnosti za <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Nastavitve"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Skladba <xliff:g id="SONG_NAME">%1$s</xliff:g> izvajalca <xliff:g id="ARTIST_NAME">%2$s</xliff:g> se predvaja iz aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>."</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> od <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> se izvaja"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Predvajaj"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Začasno zaustavi"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Prejšnja skladba"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Zvočniki in zasloni"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Predlagane naprave"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Ustavi deljeno sejo za premik predstavnosti v drugo napravo."</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Ustavi"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Kako deluje oddajanje"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Oddajanje"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Osebe v bližini z združljivo napravo Bluetooth lahko poslušajo predstavnost, ki jo oddajate."</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Ni mogoče shraniti. Poskusite znova."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Ni mogoče shraniti."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Uporabite vsaj 4 znake."</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Uporabite manj kot 16 znakov."</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Uporabite manj kot <xliff:g id="LENGTH">%1$d</xliff:g> znakov."</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Delovna različica"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Delovna različica je bila kopirana v odložišče."</string>
     <string name="basic_status" msgid="2315371112182658176">"Odprt pogovor"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Težava z branjem indikatorja stanja napolnjenosti baterije"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Dotaknite se za več informacij"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Ni nastavljenih alarmov"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"odklenite zaslon"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Tipalo prstnih odtisov"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"preverjanje pristnosti"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"vstop v napravo"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Pomočnik posluša."</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="note_task_button_label" msgid="8718616095800343136">"Ustvarjanje zapiskov"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Ustvarjanje zapiskov"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Ustvarjanje zapiskov, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Več o tem"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Več informacij je na voljo na strani <xliff:g id="URL">%s</xliff:g>."</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Odpri aplikacijo <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Aplikacija mora biti nastavljena."</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Vsaj ena kartica mora biti dodana v Denarnico."</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Namestite fotografsko aplikacijo."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Aplikacija mora biti nastavljena."</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Na voljo mora biti vsaj ena naprava."</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Če želite aplikacijo Denarnica dodati kot bližnjico, poskrbite, da je aplikacija nameščena."</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Če želite aplikacijo Denarnica dodati kot bližnjico, poskrbite, da je dodana vsaj ena kartica."</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Če želite optični bralnik kod QR dodati kot bližnjico, poskrbite, da je nameščena fotografska aplikacija."</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Če želite aplikacijo Home dodati kot bližnjico, poskrbite, da je aplikacija nameščena."</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Na voljo mora biti vsaj ena naprava."</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Izberite privzeto aplikacijo za zapiske, ki jo želite povezati z bližnjico do ustvarjanja zapiskov."</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Izbira aplikacije"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Pridržite bližnjico"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Prekliči"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Preklopi zaslona zdaj"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Povežite pisalo s polnilnikom."</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Skoraj prazna baterija pisala"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Ni mogoče klicati iz tega profila"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Službeni pravilnik dovoljuje opravljanje telefonskih klicev le iz delovnega profila."</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Ni mogoče klicati iz osebne aplikacije."</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Organizacija vam omogoča klicanje samo iz delovnih aplikacij."</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Preklopi na delovni profil"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Zapri"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Namestite delovno aplikacijo za telefon"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Prekliči"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Prilagajanje zaklenjenega zaslona"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Odklenite za prilagajanje zaklenjenega zaslona"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi ni na voljo."</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prednostni način je vklopljen."</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Zaznavanje pomočnika je vklopljeno."</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Nastavite privzeto aplikacijo za zapiske v nastavitvah."</string>
+    <string name="install_app" msgid="5066668100199613936">"Namesti aplikacijo"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon in fotoaparat"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Nedavna uporaba v aplikacijah"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Ogled nedavnih dostopov"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Končano"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Razširi in pokaži možnosti"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Strni"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Zapri to aplikacijo"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je zaprta"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Upravljanje storitve"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Upravljanje dostopa"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Uporablja se v telefonskem klicu"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Nedavno uporabljeno v telefonskem klicu"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Uporablja aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Nedavno uporabljala aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Uporablja aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Nedavno uporabljala aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Uporablja aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Nedavno uporabljala aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sl/strings_tv.xml b/packages/SystemUI/res/values-sl/strings_tv.xml
deleted file mode 100644
index 765b590..0000000
--- a/packages/SystemUI/res/values-sl/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"Povezava z omrežjem VPN je vzpostavljena"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"Povezava z omrežjem VPN je prekinjena"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Prek storitve <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Obvestila"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Ni obvestil"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Snemanje z mikrofonom"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Snemanje s fotoaparatom"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Snemanje s fotoaparatom in mikrofonom"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Ustavljeno snemanje z mikrofonom"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Ustavljeno snemanje s fotoaparatom"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Ustavljeno snemanje s fotoaparatom in mikrofonom"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Snemanje zaslona se je začelo."</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Snemanje zaslona je ustavljeno."</string>
-</resources>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index ea380a0..6e1edff 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Aktivizo USB-në"</string>
     <string name="learn_more" msgid="4690632085667273811">"Mëso më shumë"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Pamja e ekranit"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"\"Shkyçja e zgjeruar\" u çaktivizua"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"\"Shkyçja e zgjatur\" u çaktivizua"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"dërgoi një imazh"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Po ruan pamjen e ekranit…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Pamja e ekranit po ruhet te profili i punës…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> zbuloi këtë pamje ekrani."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> dhe aplikacionet e tjera të hapura zbuluan këtë pamje ekrani."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Shto te shënimi"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Regjistruesi i ekranit"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Regjistruesi i ekranit"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Regjistrimi i ekranit po përpunohet"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Njoftim i vazhdueshëm për një seancë regjistrimi të ekranit"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Të niset regjistrimi?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Gjatë regjistrimit, sistemi Android mund të regjistrojë çdo informacion delikat që është i dukshëm në ekranin tënd ose që luhet në pajisje. Kjo përfshin fjalëkalimet, informacionin e pagesave, fotografitë, mesazhet dhe audion."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Regjistro të gjithë ekranin"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Regjistro vetëm një aplikacion"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Gjatë regjistrimit, Android ka qasje te çdo gjë e dukshme në ekranin tënd ose që po luhet në pajisjen tënde. Prandaj ki kujdes me fjalëkalimet, detajet e pagesës, mesazhet ose informacione të tjera të ndjeshme."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Gjatë regjistrimit të një aplikacioni, Android ka qasje te çdo gjë e dukshme ose që po luhet në atë aplikacion. Prandaj, ki kujdes me fjalëkalimet, detajet e pagesës, mesazhet ose informacione të tjera të ndjeshme."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Nis regjistrimin"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Të niset regjistrimi?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Kur ti regjistron, Android ka qasje te çdo gjë e dukshme në ekranin tënd ose që po luhet në pajisjen tënde. Prandaj, ki kujdes me gjërat si fjalëkalimet, detajet e pagesave, mesazhet, fotografitë, si dhe audion dhe videon."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Kur ti regjistron një aplikacion, Android ka qasje te çdo gjë e dukshme ose që po luhet në atë aplikacion. Prandaj, ki kujdes me gjërat si fjalëkalimet, detajet e pagesës, mesazhet, fotografitë, si dhe audion dhe videon."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Nis regjistrimin"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Regjistro audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Audioja e pajisjes"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Tingulli nga pajisja, si muzika, telefonatat dhe tonet e ziles"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofoni"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Audioja e pajisjes dhe mikrofoni"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Nis"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Nis"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Po regjistron ekranin"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Po regjistron ekranin dhe audion"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Shfaq prekjet në ekran"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Ndaj"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Regjistrimi i ekranit u ruajt"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Trokit për të parë"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Gabim gjatë fshirjes së regjistrimit të ekranit"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Gabim gjatë ruajtjes së regjistrimit të ekranit"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Gabim gjatë nisjes së regjistrimit të ekranit"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Po shikon ekranin e plotë"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Për të dalë, rrëshqit shpejt poshtë."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"E kuptova"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Prapa"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Faqja bazë"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menyja"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Fytyra u vërtetua"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Konfirmuar"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Trokit \"Konfirmo\" për ta përfunduar"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"U shkyç me fytyrë. Shtyp ikonën e shkyçjes për të vazhduar."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"U shkyç me fytyrë"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"U shkyç me fytyrë. Shtyp për të vazhduar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Fytyra u njoh. Shtyp për të vazhduar."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Fytyra u njoh. Shtyp ikonën e shkyçjes për të vazhduar."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"U vërtetua"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Anulo vërtetimin"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Përdor kodin PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Përdor motivin"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Përdor fjalëkalimin"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Nëse fut një motiv të pasaktë në tentativën tjetër, profili yt i punës dhe të dhënat e tij do të fshihen."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Nëse fut një kod PIN të pasaktë në tentativën tjetër, profili yt i punës dhe të dhënat e tij do të fshihen."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Nëse fut një fjalëkalim të pasaktë në tentativën tjetër, profili yt i punës dhe të dhënat e tij do të fshihen."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Konfiguro"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Jo tani"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Kjo kërkohet për të përmirësuar sigurinë dhe cilësinë e funksionimit"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Konfiguro përsëri \"Shkyçjen me gjurmën e gishtit\""</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Shkyçja me gjurmën e gishtit"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Konfiguro \"Shkyçjen me gjurmën e gishtit\""</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Për të konfiguruar përsëri \"Shkyçjen me gjurmën e gishtit\", imazhet dhe modelet e tua aktuale të gjurmëve të gishtave do të fshihen.\n\nPasi të fshihen, do të duhet të konfigurosh përsëri \"Shkyçjen me gjurmën e gishtit\" për të përdorur gjurmën e gishtit për të shkyçur telefonin ose për të verifikuar që je ti."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Për të konfiguruar përsëri \"Shkyçjen me gjurmën e gishtit\", modeli dhe imazhet aktuale të gjurmëve të gishtave do të fshihen.\n\nPasi të fshihen, do të duhet të konfigurosh përsëri \"Shkyçjen me gjurmën e gishtit\" për të përdorur gjurmën e gishtit për të shkyçur telefonin ose për të verifikuar që je ti."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Shkyçja me gjurmën e gishtit nuk mund të konfigurohej. Shko te \"Cilësimet\" për të provuar përsëri."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Konfiguro \"Shkyçjen me fytyrë\" përsëri"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Shkyçja me fytyrë"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Konfiguro \"Shkyçjen me fytyrë\""</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Për të konfiguruar përsëri \"Shkyçjen me fytyrë\", modeli yt aktual i fytyrës do të fshihet.\n\nDo të duhet ta konfigurosh përsëri këtë veçori që të përdorësh fytyrën tënde për të shkyçur telefonin."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Shkyçja me fytyrë nuk mund të konfigurohej. Shko te \"Cilësimet\" për të provuar përsëri."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Prek sensorin e gjurmës së gishtit"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Shtyp ikonën e shkyçjes për të vazhduar"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Nuk mund ta dallojë fytyrën. Përdor më mirë gjurmën e gishtit."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Kufje me mikrofon"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Hyrja"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Aparatet e dëgjimit"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparatet e dëgjimit"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Po aktivizohet…"</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"U shkyç me fytyrë"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Fytyra u njoh"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Rrëshqit lart për të provuar përsëri"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Rrëshqit shpejt lart dhe provo sërish \"Shkyçjen me fytyrë\""</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Shkyçe për të përdorur NFC-në"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Kjo pajisje i përket organizatës sate"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Kjo pajisje i përket <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> do të ketë qasje te të gjitha informacionet që janë të dukshme në ekran ose që luhen nga pajisja jote gjatë regjistrimit ose transmetimit. Kjo përfshin informacione, si p.sh.: fjalëkalimet, detajet e pagesave, fotografitë, mesazhet dhe audion që luan ti."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Shërbimi që e ofron këtë funksion do të ketë qasje te të gjitha informacionet që janë të dukshme në ekran ose që luhen nga pajisja jote gjatë regjistrimit ose transmetimit. Kjo përfshin informacione, si p.sh.: fjalëkalimet, detajet e pagesave, fotografitë, mesazhet dhe audion që luan ti."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Do të fillosh regjistrimin ose transmetimin?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Fillo regjistrimin ose transmetimin me <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Të lejohet <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> të shpërndajë ose regjistrojë?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Të gjithë ekranin"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Vetëm një aplikacion"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Gjatë shpërndarjes, regjistrimit ose transmetimit, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ka qasje te çdo gjë e dukshme në ekranin tënd ose që po luhet në pajisjen tënde. Prandaj ki kujdes me fjalëkalimet, detajet e pagesës, mesazhet ose informacione të tjera të ndjeshme."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Gjatë shpërndarjes, regjistrimit ose transmetimit të një aplikacioni, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ka qasje te çdo gjë e dukshme në ekranin tënd ose që po luhet në atë aplikacion. Prandaj, ki kujdes me fjalëkalimet, detajet e pagesës, mesazhet ose informacione të tjera të ndjeshme."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Vazhdo"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Shpërndaj ose regjistro një aplikacion"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Të lejohet që ky aplikacion të shpërndajë ose të regjistrojë?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Gjatë shpërndarjes, regjistrimit ose transmetimit, ky aplikacion ka qasje te çdo gjë e dukshme në ekranin tënd ose që po luhet në pajisjen tënde. Prandaj ki kujdes me fjalëkalimet, detajet e pagesës, mesazhet ose informacionet e tjera të ndjeshme."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Gjatë shpërndarjes, regjistrimit ose transmetimit, ky aplikacioni ka qasje te çdo gjë e dukshme në ekranin tënd ose që po luhet në atë aplikacion. Prandaj, ki kujdes me fjalëkalimet, detajet e pagesës, mesazhet ose informacionet e tjera të ndjeshme."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> do të ketë qasje te të gjitha informacionet që janë të dukshme në ekran ose që luhen nga pajisja jote gjatë regjistrimit ose transmetimit. Kjo përfshin informacione, si p.sh.: fjalëkalimet, detajet e pagesave, fotografitë, mesazhet, si dhe audion që luan ti."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Të niset regjistrimi ose transmetimi?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Shërbimi që e ofron këtë funksion do të ketë qasje te të gjitha informacionet që janë të dukshme në ekran ose që luhen nga pajisja jote gjatë regjistrimit ose transmetimit. Kjo përfshin informacione, si p.sh.: fjalëkalimet, detajet e pagesave, fotografitë, mesazhet, si dhe audion që luan ti."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Të gjithë ekranin"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Vetëm një aplikacion"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Ndaj ose regjistro një aplikacion"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Të niset regjistrimi ose transmetimi me <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Kur ti ndan, regjistron ose transmeton, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ka qasje te çdo gjë e dukshme në ekranin tënd ose që po luhet në pajisjen tënde. Prandaj, ki kujdes me gjërat si fjalëkalimet, detajet e pagesave, mesazhet, fotografitë, si dhe audion dhe videon."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Kur ti ndan, regjistron ose transmeton një aplikacion, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ka qasje te çdo gjë e dukshme në ekranin tënd ose që po luhet në atë aplikacion. Prandaj, ki kujdes me gjërat si fjalëkalimet, detajet e pagesave, mesazhet, fotografitë, si dhe audion dhe videon."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Nis"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Të niset transmetimi?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Kur ti transmeton, Android ka qasje te çdo gjë e dukshme në ekranin tënd ose që po luhet në pajisjen tënde. Prandaj, ki kujdes me gjërat si fjalëkalimet, detajet e pagesave, mesazhet, fotografitë, si dhe audion dhe videon."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Kur ti transmeton një aplikacion, Android ka qasje te çdo gjë e dukshme ose që po luhet në atë aplikacion. Prandaj, ki kujdes me gjërat si fjalëkalimet, detajet e pagesës, mesazhet, fotografitë, si dhe audion dhe videon."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Nis transmetimin"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Të niset ndarja?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Kur ti ndan, regjistron ose transmeton, Android ka qasje te çdo gjë e dukshme në ekranin tënd ose që po luhet në pajisjen tënde. Prandaj, ki kujdes me gjërat si fjalëkalimet, detajet e pagesave, mesazhet, fotografitë, si dhe audion dhe videon."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Kur ti ndan, regjistron ose transmeton një aplikacion, Android ka qasje te çdo gjë e dukshme në ekranin tënd ose që po luhet në atë aplikacion. Prandaj, ki kujdes me gjërat si fjalëkalimet, detajet e pagesave, mesazhet, fotografitë, si dhe audion dhe videon."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Nis"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Ndarja vendoset në pauzë kur ndërron aplikacionet"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Ndaj më mirë këtë aplikacion"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Kthehu përsëri"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Ndërrimi i aplikacionit"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"U bllokua nga administratori yt i teknologjisë së informacionit"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Regjistrimi i ekranit është çaktivizuar nga politika e pajisjes."</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Pastroji të gjitha"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Në këtë pajisje është instaluar një autoritet certifikate. Trafiku i rrjetit tënd të sigurt mund të monitorohet ose modifikohet."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Administratori ka aktivizuar regjistrimin e rrjetit, i cili monitoron trafikun në pajisjen tënde."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Administratori yt ka aktivizuar regjistrimin e rrjetit, i cili monitoron trafikun në profilin tënd të punës, por jo në profilin tënd personal."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Kjo pajisje është e lidhur me internetin nëpërmjet <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktiviteti yt në rrjet, duke përfshirë email-et e dhe të dhënat e shfletimit, është i dukshëm për administratorin tënd të teknologjisë së informacionit."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Kjo pajisje është e lidhur me internetin nëpërmjet <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktiviteti yt në rrjet, duke përfshirë email-et dhe të dhënat e shfletimit, është i dukshëm për ofruesin e VPN-së."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Kjo pajisje është e lidhur me internetin nëpërmjet <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktiviteti yt në rrjet, duke përfshirë email-et e dhe të dhënat e shfletimit, është i dukshëm për administratorin tënd të teknologjisë së informacionit."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Kjo pajisje është e lidhur me internetin nëpërmjet <xliff:g id="VPN_APP_0">%1$s</xliff:g> dhe <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Aktiviteti yt në rrjet, duke përfshirë email-et e dhe të dhënat e shfletimit, është i dukshëm për administratorin tënd të teknologjisë së informacionit."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Aplikacionet e tua të punës janë të lidhura me internetin nëpërmjet <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktiviteti yt në rrjet në aplikacionet e punës, duke përfshirë email-et dhe të dhënat e shfletimit, është i dukshëm për administratorin e teknologjisë së informacionit dhe ofruesin e VPN-së."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Aplikacionet e tua personale janë të lidhura me internetin nëpërmjet <xliff:g id="VPN_APP">%1$s</xliff:g>. Aktiviteti yt në rrjet, duke përfshirë email-et e dhe të dhënat e shfletimit, është i dukshëm për ofruesin tënd të VPN-së."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"çaktivizo"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Tingulli dhe dridhjet"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Cilësimet"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Ulur në një volum më të sigurt"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Volumi ka qenë i lartë për një kohë më të gjatë nga sa rekomandohet"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volumi është ulur në një nivel më të sigurt"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Volumi i kufjeve ka qenë i lartë për një kohë më të gjatë nga sa rekomandohet"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Volumi i kufjeve ka tejkaluar kufirin e sigurisë për këtë javë"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Vazhdo të dëgjosh"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Ul volumin"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Aplikacioni është i gozhduar"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Kjo e ruan në pamje deri sa ta heqësh nga gozhdimi. Prek dhe mbaj të shtypur \"Prapa\" dhe \"Përmbledhje\" për ta hequr nga gozhdimi."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Kjo e ruan në pamje deri sa ta heqësh nga gozhdimi. Prek dhe mbaj të shtypur \"Prapa\" dhe \"Kreu\" për ta hequr nga gozhdimi."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menyja e energjisë"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Faqja <xliff:g id="ID_1">%1$d</xliff:g> nga <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Ekrani i kyçjes"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telefoni u fik për shkak të nxehtësisë"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Telefoni tani punon normalisht.\nTrokit për më shumë informacione"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefoni yt ishte tepër i nxehtë, prandaj u fik për t\'u ftohur. Telefoni tani punon normalisht.\n\nTelefoni mund të nxehet së tepërmi nëse ti:\n	• Përdor aplikacione intensive për burimet (siç janë aplikacionet e lojërave, videove apo aplikacionet e navigimit)\n	• Shkarkon ose ngarkon skedarë të mëdhenj\n	• E përdor telefonin në temperatura të larta"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Shiko hapat për kujdesin"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefoni po bëhet i ngrohtë"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Disa veçori janë të kufizuara kur telefoni është duke u ftohur.\nTrokit për më shumë informacione"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Telefoni yt do të përpiqet automatikisht që të ftohet. Mund ta përdorësh përsëri telefonin, por ai mund të punojë më ngadalë.\n\nPasi telefoni të jetë ftohur, ai do të punojë si normalisht."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Shiko hapat për kujdesin"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Shkëpute pajisjen"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Pajisja jote po nxehet pranë portës së karikimit. Nëse është lidhur me një karikues ose një aksesor USB, shkëpute dhe trego kujdes pasi kablloja mund të jetë e nxehtë po ashtu."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Zmadho ekranin e plotë"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Zmadho një pjesë të ekranit"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Hap cilësimet e zmadhimit"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Mbyll cilësimet e zmadhimit"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Zvarrit këndin për të ndryshuar përmasat"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Lejo lëvizjen diagonale"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Ndrysho përmasat"</string>
@@ -885,9 +910,8 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ta heqësh nga të preferuarat"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Zhvendose te pozicioni <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontrollet"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
-    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mbaje të shtypur dhe zvarrit për të risistemuar kontrollet"</string>
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Zgjidh kontrollet e pajisjes për të pasur qasje me shpejtësi"</string>
+    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Mbaje shtypur dhe zvarrit për të riorganizuar kontrollet"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Të gjitha kontrollet u hoqën"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Ndryshimet nuk u ruajtën"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Shiko aplikacionet e tjera"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Provo një kod tjetër PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Konfirmo ndryshimin për <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Rrëshqit shpejt për të shikuar më shumë"</string>
+    <string name="retry_face" msgid="416380073082560186">"Riprovo vërtetimin me fytyrë"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Po ngarkon rekomandimet"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Të fshihet kontrolluesi i medias për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Cilësimet"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> nga <xliff:g id="ARTIST_NAME">%2$s</xliff:g> po luhet nga <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> nga <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> po ekzekutohet"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Luaj"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Vendos në pauzë"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Pjesa muzikore e mëparshme"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Altoparlantët dhe ekranet"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Pajisjet e sugjeruara"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Ndalo sesionin e ndarë për ta zhvendosur median në një pajisje tjetër"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Ndalo"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Si funksionon transmetimi"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Transmetimi"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Personat në afërsi me ty me pajisje të përputhshme me Bluetooth mund të dëgjojnë median që ti po transmeton"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Nuk mund të ruhet. Provo përsëri."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Nuk mund të ruhet."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Përdor të paktën 4 karaktere"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Përdor më pak se 16 karaktere"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Përdor më pak se <xliff:g id="LENGTH">%1$d</xliff:g> karaktere"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Numri i ndërtimit"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Numri i ndërtimit u kopjua te kujtesa e fragmenteve"</string>
     <string name="basic_status" msgid="2315371112182658176">"Hap bisedën"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Problem me leximin e matësit të baterisë"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Trokit për më shumë informacione"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Nuk është caktuar asnjë alarm"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"hyr te kyçja e ekranit"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Sensori i gjurmës së gishtit"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"për ta vërtetuar"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"për të hyrë në pajisje"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"\"Asistenti\" po dëgjon"</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="note_task_button_label" msgid="8718616095800343136">"Mbajtja e shënimeve"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Mbajtja e shënimeve"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Mbajtja e shënimeve, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Mëso më shumë"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Mëso më shumë në <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Hap \"<xliff:g id="APPNAME">%1$s</xliff:g>\""</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Aplikacioni është konfiguruar"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Të paktën një kartë të jetë shtuar në \"Portofol\""</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Të instalosh një aplikacion të kamerës"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Aplikacioni është konfiguruar"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Ofrohet të paktën një pajisje"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Për të shtuar aplikacionin \"Portofoli\" si një shkurtore, sigurohu që aplikacioni të jetë i instaluar"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Për të shtuar aplikacionin \"Portofoli\" si një shkurtore, sigurohu që të jetë shtuar të paktën një kartë"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Për të shtuar skanerin e kodeve QR si një shkurtore, sigurohu që aplikacioni i kamerës të jetë i instaluar"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Për të shtuar aplikacionin Home si një shkurtore, sigurohu që aplikacioni të jetë i instaluar"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Ofrohet të paktën një pajisje"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Zgjidh një aplikacion të parazgjedhur shënimesh për të përdorur shkurtoren e mbajtjes së shënimeve"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Zgjidh aplikacionin"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Prek dhe mbaj shtypur shkurtoren"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Anulo"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Ndërro ekranet tani"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Lidhe stilolapsin me një karikues"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Bateria e stilolapsit në nivel të ulët"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Nuk mund të telefonosh nga ky profil"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Politika jote e punës të lejon të bësh telefonata vetëm nga profili i punës"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Nuk mund të telefonohet nga një aplikacion personal"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Organizata jote të lejon që të telefonosh vetëm nga aplikacionet e punës"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Kalo te profili i punës"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Mbyll"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Instalo një aplikacion të telefonit të punës"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Anulo"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Personalizo ekranin e kyçjes"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Shkyçe për të personalizuar ekranin e kyçjes"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi nuk ofrohet"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera u bllokua"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera dhe mikrofoni u bllokuan"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofoni u bllokua"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Modaliteti i përparësisë aktiv"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Vëmendja e \"Asistentit\" aktive"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Cakto aplikacionin e parazgjedhur të shënimeve te \"Cilësimet\""</string>
+    <string name="install_app" msgid="5066668100199613936">"Instalo aplikacionin"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofoni dhe kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Përdorimi i fundit i aplikacionit"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Shiko qasjen e fundit"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"U krye"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Zgjero dhe shfaq opsionet"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Palos"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Mbylle këtë aplikacion"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> u mbyll"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Menaxho shërbimin"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Menaxho qasjen"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Në përdorim nga telefonata"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Përdorur së fundi në telefonatë"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Në përdorim nga <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Përdorur së fundi nga <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Në përdorim nga <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Përdorur së fundi nga <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Në përdorim nga <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Përdorur së fundi nga <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sq/strings_tv.xml b/packages/SystemUI/res/values-sq/strings_tv.xml
deleted file mode 100644
index 12b42b8..0000000
--- a/packages/SystemUI/res/values-sq/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN-ja është e lidhur"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN-ja është shkëputur"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Nëpërmjet <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Njoftimet"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Asnjë njoftim"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"\"Mikrofoni\" po regjistron"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"\"Kamera\" po regjistron"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"\"Kamera\" dhe \"Mikrofoni\" po regjistrojnë"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"\"Mikrofoni\" ndaloi së regjistruari"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"\"Kamera\" ndaloi së regjistruari"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"\"Kamera\" dhe \"Mikrofoni\" ndaluan së regjistruari"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Regjistrimi i ekranit filloi"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Regjistrimi i ekranit ndaloi"</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 45f63bf..b8e1355 100644
--- a/packages/SystemUI/res/values-sq/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sq/tiles_states_strings.xml
@@ -48,7 +48,7 @@
   </string-array>
   <string-array name="tile_states_battery">
     <item msgid="6311253873330062961">"Nuk ofrohet"</item>
-    <item msgid="7838121007534579872">"Joaktiv"</item>
+    <item msgid="7838121007534579872">"Joaktive"</item>
     <item msgid="1578872232501319194">"Aktiv"</item>
   </string-array>
   <string-array name="tile_states_dnd">
@@ -59,7 +59,7 @@
   <string-array name="tile_states_flashlight">
     <item msgid="3465257127433353857">"Nuk ofrohet"</item>
     <item msgid="5044688398303285224">"Joaktiv"</item>
-    <item msgid="8527389108867454098">"Aktiv"</item>
+    <item msgid="8527389108867454098">"Aktive"</item>
   </string-array>
   <string-array name="tile_states_rotation">
     <item msgid="4578491772376121579">"Nuk ofrohet"</item>
@@ -88,13 +88,13 @@
   </string-array>
   <string-array name="tile_states_color_correction">
     <item msgid="2840507878437297682">"Nuk ofrohet"</item>
-    <item msgid="1909756493418256167">"Joaktiv"</item>
-    <item msgid="4531508423703413340">"Aktiv"</item>
+    <item msgid="1909756493418256167">"Joaktive"</item>
+    <item msgid="4531508423703413340">"Aktive"</item>
   </string-array>
   <string-array name="tile_states_inversion">
     <item msgid="3638187931191394628">"Nuk ofrohet"</item>
-    <item msgid="9103697205127645916">"Joaktiv"</item>
-    <item msgid="8067744885820618230">"Aktiv"</item>
+    <item msgid="9103697205127645916">"Joaktive"</item>
+    <item msgid="8067744885820618230">"Aktive"</item>
   </string-array>
   <string-array name="tile_states_saver">
     <item msgid="39714521631367660">"Nuk ofrohet"</item>
@@ -108,7 +108,7 @@
   </string-array>
   <string-array name="tile_states_work">
     <item msgid="389523503690414094">"Nuk ofrohet"</item>
-    <item msgid="8045580926543311193">"Joaktiv"</item>
+    <item msgid="8045580926543311193">"Joaktive"</item>
     <item msgid="4913460972266982499">"Aktiv"</item>
   </string-array>
   <string-array name="tile_states_cast">
@@ -123,13 +123,13 @@
   </string-array>
   <string-array name="tile_states_screenrecord">
     <item msgid="1085836626613341403">"Nuk ofrohet"</item>
-    <item msgid="8259411607272330225">"Joaktiv"</item>
+    <item msgid="8259411607272330225">"Joaktive"</item>
     <item msgid="578444932039713369">"Aktiv"</item>
   </string-array>
   <string-array name="tile_states_reverse">
     <item msgid="3574611556622963971">"Nuk ofrohet"</item>
-    <item msgid="8707481475312432575">"Joaktiv"</item>
-    <item msgid="8031106212477483874">"Aktiv"</item>
+    <item msgid="8707481475312432575">"Joaktive"</item>
+    <item msgid="8031106212477483874">"Aktive"</item>
   </string-array>
   <string-array name="tile_states_reduce_brightness">
     <item msgid="1839836132729571766">"Nuk ofrohet"</item>
@@ -144,7 +144,7 @@
   <string-array name="tile_states_mictoggle">
     <item msgid="6895831614067195493">"Nuk ofrohet"</item>
     <item msgid="3296179158646568218">"Joaktiv"</item>
-    <item msgid="8998632451221157987">"Aktiv"</item>
+    <item msgid="8998632451221157987">"Aktive"</item>
   </string-array>
   <string-array name="tile_states_controls">
     <item msgid="8199009425335668294">"Nuk ofrohet"</item>
@@ -158,13 +158,13 @@
   </string-array>
   <string-array name="tile_states_qr_code_scanner">
     <item msgid="7435143266149257618">"Nuk ofrohet"</item>
-    <item msgid="3301403109049256043">"Joaktiv"</item>
-    <item msgid="8878684975184010135">"Aktiv"</item>
+    <item msgid="3301403109049256043">"Joaktive"</item>
+    <item msgid="8878684975184010135">"Aktive"</item>
   </string-array>
   <string-array name="tile_states_alarm">
     <item msgid="4936533380177298776">"Nuk ofrohet"</item>
     <item msgid="2710157085538036590">"Joaktiv"</item>
-    <item msgid="7809470840976856149">"Aktiv"</item>
+    <item msgid="7809470840976856149">"Aktive"</item>
   </string-array>
   <string-array name="tile_states_onehanded">
     <item msgid="8189342855739930015">"Nuk ofrohet"</item>
@@ -173,12 +173,12 @@
   </string-array>
   <string-array name="tile_states_dream">
     <item msgid="6184819793571079513">"Nuk ofrohet"</item>
-    <item msgid="8014986104355098744">"Joaktiv"</item>
-    <item msgid="5966994759929723339">"Aktiv"</item>
+    <item msgid="8014986104355098744">"Joaktive"</item>
+    <item msgid="5966994759929723339">"Aktive"</item>
   </string-array>
   <string-array name="tile_states_font_scaling">
     <item msgid="3173069902082305985">"Nuk ofrohet"</item>
-    <item msgid="2478289035899842865">"Joaktiv"</item>
-    <item msgid="5137565285664080143">"Aktiv"</item>
+    <item msgid="2478289035899842865">"Joaktive"</item>
+    <item msgid="5137565285664080143">"Aktive"</item>
   </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 14dddd68..0a73cf5 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"Апликација <xliff:g id="APPNAME">%1$s</xliff:g> је открила овај снимак екрана."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> и друге отворене апликације су откриле овај снимак екрана."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Додај у белешку"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Снимач екрана"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Снимач екрана"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Обрађујемо видео снимка екрана"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Обавештење о сесији снимања екрана је активно"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Желите да започнете снимање?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Током снимања Android систем може да сними осетљиве информације које су видљиве на екрану или које се пуштају на уређају. То обухвата лозинке, информације о плаћању, слике, поруке и звук."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Снимај цео екран"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Снимај једну апликацију"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Android има приступ комплетном садржају који је видљив на екрану или се пушта на уређају док снимате. Будите пажљиви са лозинкама, информацијама о плаћању, порукама или другим осетљивим информацијама."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Када снимате апликацију, Android има приступ комплетном садржају који је видљив или се пушта у тој апликацији. Будите пажљиви са лозинкама, информацијама о плаћању, порукама или другим осетљивим информацијама."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Започни снимање"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Желите да започнете снимање?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Android има приступ комплетном садржају који је видљив на екрану или се пушта на уређају док снимате. Зато будите пажљиви са лозинкама, информацијама о плаћању, порукама, сликама и аудио и видео снимцима."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Када снимате апликацију, Android има приступ комплетном садржају који је видљив или се пушта у тој апликацији. Зато будите пажљиви са лозинкама, информацијама о плаћању, порукама, сликама и аудио и видео снимцима."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Започни снимање"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Снимај звук"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Звук уређаја"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Звук са уређаја, на пример, музика, позиви и мелодије звона"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Микрофон"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Звук уређаја и микрофон"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Покрени"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Покрени"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Снима се екран"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Снимају се екран и звук"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Приказуј додире на екрану"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Дели"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Снимак екрана је сачуван"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Додирните да бисте прегледали"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Дошло је до проблема при брисању снимка екрана"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Грешка при чувању снимка екрана"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Грешка при покретању снимања екрана"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Приказује се цео екран"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Да бисте изашли, превуците надоле одозго."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Важи"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Назад"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Почетна"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Мени"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Лице је потврђено"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Потврђено"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Додирните Потврди да бисте завршили"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Откључано је лицем. Притисните икону откључавања за наставак"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Откључано је лицем"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Откључано је лицем. Притисните да бисте наставили."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Лице је препознато. Притисните да бисте наставили."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Лице препознато. Притисните икону откључавања за наставак."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Идентитет је потврђен"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Откажите потврду идентитета"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Користите PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Користите шаблон"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Користите лозинку"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Ако унесете нетачан шаблон при следећем покушају, избрисаћемо пословни профил и његове податке."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Ако унесете нетачан PIN при следећем покушају, избрисаћемо пословни профил и његове податке."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Ако унесете нетачну лозинку при следећем покушају, избрисаћемо пословни профил и његове податке."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Подеси"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Не сада"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Ово је неопходно за побољшање безбедности и перформанси"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Поново подесите откључавање отиском прста"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Откључавање отиском прста"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Подесите откључавање отиском прста"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Да бисте поново подесили откључавање отиском прста, актуелне слике и модели отиска прста биће избрисани.\n\nПосле брисања, морате поново да подесите откључавање отиском прста да бисте користили отисак за откључавање телефона или верификовали да сте то ви."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Да бисте поново подесили откључавање отиском прста, актуелне слике и модел отиска прста биће избрисани.\n\nПосле брисања, морате поново да подесите откључавање отиском прста да бисте користили отисак за откључавање телефона или верификовали да сте то ви."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Подешавање откључавања отиском прста није успело. Идите у Подешавања да бисте пробали поново."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Поново подесите откључавање лицем"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Откључавање лицем"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Подесите откључавање лицем"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Да бисте поново подесили откључавање лицем, актуелни модел лица се брише.\n\nМораћете поново да подесите ову функцију да бисте користили лице за откључавање телефона."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Подешавање откључавања лицем није успело. Идите у Подешавања да бисте пробали поново."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Додирните сензор за отисак прста"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Притисните икону откључавања за наставак"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Лице није препознато. Користите отисак прста."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -198,7 +214,7 @@
     <string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Прозор са обавештењима."</string>
     <string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Брза подешавања."</string>
     <string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Брза подешавања и трака са обавештењима."</string>
-    <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Закључан екран."</string>
+    <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Закључан екран"</string>
     <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Закључан екран за посао"</string>
     <string name="accessibility_desc_close" msgid="8293708213442107755">"Затвори"</string>
     <string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"потпуна тишина"</string>
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Аудио"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Слушалице"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Унос"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Слушни апарати"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слушни апарати"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Укључује се..."</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Аутоматска ротација"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Аутоматско ротирање екрана"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Откључано је лицем"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Лице је препознато"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Превуците нагоре да бисте пробали поново"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Превуците нагоре да бисте поново пробали откључавање лицем"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Откључајте да бисте користили NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Овај уређај припада организацији"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Овај уређај припада организацији <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"Желите ли да уклоните корисника?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Све апликације и подаци овог корисника ће бити избрисани."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Уклони"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ће имати приступ свим информацијама које се приказују на екрану или репродукују са уређаја током снимања или пребацивања. То обухвата информације попут лозинки, информација о плаћању, слика, порука и звука који пуштате."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Услуга која пружа ову функцију ће имати приступ свим информацијама које се приказују на екрану или репродукују са уређаја током снимања или пребацивања. То обухвата информације попут лозинки, информација о плаћању, слика, порука и звука који пуштате."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Желите да почнете снимање или пребацивање?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Желите да почнете снимање или пребацивање помоћу апликације <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Желите да дозволите дељење и снимање за <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Цео екран"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Једна апликација"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Када делите, снимате или пребацујете, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> има приступ комплетном садржају који је видљив на екрану или се пушта на уређају. Будите пажљиви са лозинкама, информацијама о плаћању, порукама или другим осетљивим информацијама."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Када делите, снимате или пребацујете апликацију, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> има приступ комплетном садржају који је видљив или се пушта у тој апликацији. Будите пажљиви са лозинкама, информацијама о плаћању, порукама или другим осетљивим информацијама."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Настави"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Делите или снимите апликацију"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Желите да дозволите овој апликацији да дели или снима?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Када делите, снимате или пребацујете, ова апликација има приступ комплетном садржају који је видљив на екрану или се пушта на уређају. Будите пажљиви са лозинкама, информацијама о плаћању, порукама или другим осетљивим информацијама."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Када делите, снимате или пребацујете апликацију, ова апликација има приступ комплетном садржају који је видљив или се пушта у тој апликацији. Будите пажљиви са лозинкама, информацијама о плаћању, порукама или другим осетљивим информацијама."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ће имати приступ свим информацијама које се приказују на екрану или репродукују са уређаја током снимања или пребацивања. То обухвата информације попут лозинки, информација о плаћању, слика, порука и звука који пуштате."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Желите да почнете снимање или пребацивање?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Услуга која пружа ову функцију ће имати приступ свим информацијама које се приказују на екрану или репродукују са уређаја током снимања или пребацивања. То обухвата информације попут лозинки, информација о плаћању, слика, порука и звука који пуштате."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Цео екран"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Једна апликација"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Делите или снимите апликацију"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Желите да почнете снимање или пребацивање помоћу апликације <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Када делите, снимате или пребацујете, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> има приступ комплетном садржају који је видљив на екрану или се пушта на уређају. Зато будите пажљиви са лозинкама, информацијама о плаћању, порукама, сликама и аудио и видео снимцима."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Када делите, снимате или пребацујете апликацију, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> има приступ комплетном садржају који је видљив или се пушта у тој апликацији. Зато будите пажљиви са лозинкама, информацијама о плаћању, порукама, сликама и аудио и видео снимцима."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Покрени"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Желите да започнете пребацивање?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Када пребацујете, Android има приступ комплетном садржају који је видљив на екрану или се пушта на уређају. Зато будите пажљиви са лозинкама, информацијама о плаћању, порукама, сликама и аудио и видео снимцима."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Када пребацујете апликацију, Android има приступ комплетном садржају који је видљив или се пушта у тој апликацији. Зато будите пажљиви са лозинкама, информацијама о плаћању, порукама, сликама и аудио и видео снимцима."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Започни пребацивање"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Желите да почнете да делите?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Када делите, снимате или пребацујете, Android има приступ комплетном садржају који је видљив на екрану или се пушта на уређају. Зато будите пажљиви са лозинкама, информацијама о плаћању, порукама, сликама и аудио и видео снимцима."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Када делите, снимате или пребацујете апликацију, Android има приступ комплетном садржају који је видљив или се пушта у тој апликацији. Зато будите пажљиви са лозинкама, информацијама о плаћању, порукама, сликама и аудио и видео снимцима."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Покрени"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Дељење се зауставља када мењате апликације"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Дели ову апликацију"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Врати"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Промена апликације"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Блокира ИТ администратор"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Снимање екрана је онемогућено смерницама за уређај"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Обриши све"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"На овом уређају је инсталиран ауторитет за издавање сертификата. Безбедни мрежни саобраћај може да се прати или мења."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Администратор је укључио евидентирање мреже, које прати саобраћај на уређају."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Администратор је укључио евидентирање мреже, које прати саобраћај на пословном профилу, али не и на личном профилу."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Овај уређај је повезан на интернет преко: <xliff:g id="VPN_APP">%1$s</xliff:g>. Ваша активност на мрежи, укључујући имејлове и податке прегледања, видљива је ИТ администратору."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Овај уређај је повезан на интернет преко: <xliff:g id="VPN_APP">%1$s</xliff:g>. Ваша активност на мрежи, укључујући имејлове и податке прегледања, видљива је добављачу VPN-а."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Овај уређај је повезан на интернет преко: <xliff:g id="VPN_APP">%1$s</xliff:g>. Ваша активност на мрежи, укључујући имејлове и податке прегледања, видљива је ИТ администратору."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Овај уређај је повезан на интернет преко: <xliff:g id="VPN_APP_0">%1$s</xliff:g> и <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Ваша активност на мрежи, укључујући имејлове и податке прегледања, видљива је ИТ администратору."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Ваше пословне апликације су повезане на интернет преко: <xliff:g id="VPN_APP">%1$s</xliff:g>. Ваша активност на мрежи у пословним апликацијама, укључујући имејлове и податке прегледања, видљива је ИТ администратору и добављачу VPN-а."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Ваше личне апликације су повезане на интернет преко: <xliff:g id="VPN_APP">%1$s</xliff:g>. Ваша активност на мрежи, укључујући имејлове и податке прегледања, видљива је добављачу VPN-а."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"онемогућите"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Звук и вибрирање"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Подешавања"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Звук је смањен на безбедну јачину"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Звук је био гласан дуже него што се препоручује"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Звук је смањен на безбедну јачину"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Звук у слушалицама је био гласан дуже него што се препоручује"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Јачина звука у слушалицама је премашила безбедносно ограничење за ову недељу"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Наставите да слушате"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Смањите јачину звука"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Апликација је закачена"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"На овај начин се ово стално приказује док га не откачите. Додирните и задржите Назад и Преглед да бисте га откачили."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"На овај начин се ово стално приказује док га не откачите. Додирните и задржите Назад и Почетна да бисте га откачили."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Мени дугмета за укључивање"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_1">%1$d</xliff:g>. страна од <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Закључан екран"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Телефон се искључио због топлоте"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Телефон сада нормално ради.\nДодирните за више информација"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Телефон је био преврућ, па се искључио да се охлади. Сада ради нормално.\n\nТелефон може превише да се угреје ако:\n	• Користите апликације које захтевају пуно ресурса (нпр. видео игре, видео или апликације за навигацију)\n	• Преузимате/отпремате велике датотеке\n	• Користите телефон на високој температури"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Погледајте упозорења"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Телефон се загрејао"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Неке функције су ограничене док се телефон не охлади.\nДодирните за више информација"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Телефон ће аутоматски покушати да се охлади. И даље ћете моћи да користите телефон, али ће спорије реаговати.\n\nКада се телефон охлади, нормално ће радити."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Погледајте упозорења"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Искључите уређај"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Уређај се загрева у близини порта за пуњење. Ако је повезан са пуњачем или USB опремом, искључите је и будите пажљиви јер и кабл може да буде врућ."</string>
@@ -764,7 +788,7 @@
     <string name="tuner_right" msgid="8247571132790812149">"Стрелица удесно"</string>
     <string name="tuner_menu" msgid="363690665924769420">"Мени"</string>
     <string name="tuner_app" msgid="6949280415826686972">"Апликација <xliff:g id="APP">%1$s</xliff:g>"</string>
-    <string name="notification_channel_alerts" msgid="3385787053375150046">"Обавештења"</string>
+    <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_instant" msgid="7556135423486752680">"Инстант апликације"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Увећајте цео екран"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Увећајте део екрана"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Отвори подешавања увећања"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Затвори подешавања увећања"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Превуците угао да бисте променили величину"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Дозволи дијагонално скроловање"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Промени величину"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Додирните за функције приступачности. Прилагодите или замените ово дугме у Подешавањима.\n\n"<annotation id="link">"Подешавања"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Померите дугме до ивице да бисте га привремено сакрили"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Опозови"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Пречица функције<xliff:g id="FEATURE_NAME">%s</xliff:g> је уклоњена"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Пречица функције <xliff:g id="FEATURE_NAME">%s</xliff:g> је уклоњена"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# пречица је уклоњена}one{# пречица је уклоњена}few{# пречице су уклоњене}other{# пречица је уклоњено}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Премести горе лево"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Премести горе десно"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"уклонили из омиљених"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Преместите на <xliff:g id="NUMBER">%d</xliff:g>. позицију"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Контроле"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Одаберите контроле уређаја за брз приступ"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Задржите и превуците да бисте променили распоред контрола"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Све контроле су уклоњене"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Промене нису сачуване"</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Пробајте други PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Потврдите промену за: <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Превуците да бисте видели још"</string>
+    <string name="retry_face" msgid="416380073082560186">"Пробајте поново потврду идентитета помоћу лица"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Учитавају се препоруке"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Медији"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"Желите ли да сакријете ову контролу за медије за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"Желите да сакријете ову контролу за медије за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"Актуелна сесија медија не може да буде сакривена."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Сакриј"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Настави"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Подешавања"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> извођача <xliff:g id="ARTIST_NAME">%2$s</xliff:g> се пушта из апликације <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> од <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"Апликација <xliff:g id="APP_NAME">%1$s</xliff:g> је покренута"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Пусти"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Паузирај"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Претходна песма"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Звучници и екрани"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Предложени уређаји"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Зауставите дељену сесију да бисте преместили медијски садржај на други уређај"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Заустави"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Како функционише емитовање"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Емитовање"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Људи у близини са компатибилним Bluetooth уређајима могу да слушају медијски садржај који емитујете"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Чување није успело. Пробајте поново."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Чување није успело."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Користите бар 4 знака"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Користите мање од 16 знакова"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Користите мањи број знакова од <xliff:g id="LENGTH">%1$d</xliff:g>"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Број верзије"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Број верзије је копиран у привремену меморију."</string>
     <string name="basic_status" msgid="2315371112182658176">"Отворите конверзацију"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Проблем са очитавањем мерача батерије"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Додирните за више информација"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Није подешен"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"унесите закључавање екрана"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Сензор за отисак прста"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"потврдите идентитет"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"унесите уређај"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Помоћник слуша"</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="note_task_button_label" msgid="8718616095800343136">"Прављење бележака"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Прављење бележака"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Прављење бележака, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Сазнајте више"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Сазнајте више на <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Отворите: <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• да је апликација подешена"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• да је у Новчаник додата барем једна картица"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• да сте инсталирали апликацију за камеру"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• да је апликација подешена"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• да је доступан барем један уређај"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Да бисте додали апликацију Новчаник као пречицу, уверите се да је апликација инсталирана"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Да бисте додали апликацију Новчаник као пречицу, уверите се да је додата бар једна картица"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Да бисте додали Скенер QR кода као пречицу, уверите се да је апликација за камеру инсталирана"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Да бисте додали апликацију Home као пречицу, уверите се да је апликација инсталирана"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Доступан је бар један уређај"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Изаберите подразумевану апликацију за белешке да бисте користили пречицу за прављење белешки"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Изабери апликацију"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Додирните и задржите пречицу"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Откажи"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Замени екране"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Повежите писаљку са пуњачем"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Низак ниво батерије писаљке"</string>
     <string name="video_camera" msgid="7654002575156149298">"Видео камера"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Не можете да упућујете позиве са овог профила"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Смернице за посао вам омогућавају да телефонирате само са пословног профила"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Не можете да упућујете позиве из личне апликације"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Ваша организација дозвољава позивање само из пословних апликација"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Пређи на пословни профил"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Затвори"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Инсталирајте пословну апликацију за телефон"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Откажи"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Прилагоди закључани екран"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Откључајте да бисте прилагодили закључани екран"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"WiFi није доступан"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камера је блокирана"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камера и микрофон су блокирани"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Микрофон је блокиран"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Приоритетни режим је укључен"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Помоћник је у активном стању"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Подесите подразумевану апликацију за белешке у Подешавањима"</string>
+    <string name="install_app" msgid="5066668100199613936">"Инсталирај апликацију"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Микрофон и камера"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Недавно користила апликација"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Прикажи недавни приступ"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Готово"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Прошири и прикажи опције"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Скупи"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Затвори ову апликацију"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Затворено: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Управљај услугом"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Управљај приступом"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Користи телефонски позив"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Недавно коришћено у телефонском позиву"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Користи <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Недавно користила апликација <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Користи <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Недавно користила апликација <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Користи <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Недавно користила апликација <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sr/strings_tv.xml b/packages/SystemUI/res/values-sr/strings_tv.xml
deleted file mode 100644
index 85c38ca..0000000
--- a/packages/SystemUI/res/values-sr/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN је повезан"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"Веза са VPN-ом је прекинута"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Преко: <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Обавештења"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Нема обавештења"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Микрофон снима"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Камера снима"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Камера и микрофон снимају"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Снимање микрофоном је заустављено"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Снимање камером је заустављено"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Снимање камером и микрофоном је заустављено"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Снимање екрана је започето"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Снимање екрана је заустављено"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 5149bbf..9329e19 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Aktivera USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Läs mer"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Skärmbild"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock har inaktiverats"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Håll olåst har inaktiverats"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"har skickat en bild"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Skärmbilden sparas ..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Sparar skärmbild i jobbprofilen …"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> identifierade skärmbilden."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> och andra öppna appar identifierade skärmbilden."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Lägg till i anteckning"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Skärminspelare"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Skärminspelare"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Behandlar skärminspelning"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Avisering om att skärminspelning pågår"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Vill du starta inspelningen?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"När du spelar in kan Android-systemet registrera alla känsliga uppgifter som visas på skärmen eller spelas upp på enheten. Detta omfattar lösenord, betalningsuppgifter, foton, meddelanden och ljud."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Spela in hela skärmen"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Spela in en enda app"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"När du spelar in har Android åtkomst till allt som visas på skärmen eller spelas upp på enheten. Så var försiktig med lösenord, betalningsuppgifter, meddelanden och andra känsliga uppgifter."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"När du spelar in en app har Android åtkomst till allt som visas eller spelas upp i appen. Så var försiktig med lösenord, betalningsuppgifter, meddelanden och andra känsliga uppgifter."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Börja spela in"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Vill du starta inspelningen?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"När du spelar in har Android åtkomst till allt som visas på skärmen eller spelas upp på enheten. Var försiktig med sådant som lösenord, betalningsuppgifter, meddelanden, foton och ljud och video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"När du spelar in en app har Android åtkomst till allt som visas eller spelas upp i appen. Var försiktig med sådant som lösenord, betalningsuppgifter, meddelanden, foton och ljud och video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Börja spela in"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Spela in ljud"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Ljud på enheten"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Ljud från enheten, till exempel musik, samtal och ringsignaler"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Ljud på enheten och från mikrofonen"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Starta"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Börja"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Skärminspelning pågår"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Skärm- och ljudinspelning pågår"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Visa tryck på skärmen"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Dela"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Skärminspelning sparad"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Tryck för att visa"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Det gick inte att radera skärminspelningen"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Det gick inte att spara skärminspelningen"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Det gick inte att starta skärminspelningen"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Visar på fullskärm"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Svep nedåt från skärmens överkant för att avsluta."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"OK"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Tillbaka"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Startsida"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Meny"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Ansiktet har autentiserats"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Bekräftat"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Slutför genom att trycka på Bekräfta"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Upplåst med ansiktslås. Tryck på ikonen lås upp för att fortsätta."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Upplåst med ansiktslås"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Upplåst med ansiktslås. Tryck för att fortsätta."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Ansiktet har identifierats. Tryck för att fortsätta."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Ansiktet har identifierats. Tryck på ikonen lås upp."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Autentiserad"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Avbryt autentiseringen"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Använd pinkod"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Använd mönster"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Använd lösenord"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Jobbprofilen och dess data raderas om du ritar fel mönster vid nästa försök."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Jobbprofilen och dess data raderas om du anger fel pinkod vid nästa försök."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Din jobbprofil och dess data raderas om du anger fel lösenord vid nästa försök."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Konfigurera"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Inte nu"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Detta krävs för att förbättra säkerhet och prestanda"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Konfigurera fingeravtryckslås igen"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Fingeravtryckslås"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Konfigurera fingeravtryckslås"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Dina nuvarande fingeravtrycksbilder och fingeravtrycksmodeller raderas när du konfigurerar fingeravtryckslås igen.\n\nNär de har raderats måste du konfigurera fingeravtryckslås igen för att kunna låsa upp telefonen och verifiera din identitet med ditt fingeravtryck."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Din nuvarande fingeravtrycksmodell och dina nuvarande fingeravtrycksbilder raderas när du konfigurerar fingeravtryckslås igen.\n\nNär de har raderats måste du konfigurera fingeravtryckslås igen för att kunna låsa upp telefonen och verifiera din identitet med ditt fingeravtryck."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Det gick inte att konfigurera fingeravtryckslås. Öppna inställningarna och försök igen."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Konfigurera ansiktslås på nytt"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Ansiktslås"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Konfigurera ansiktslås"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Din nuvarande ansiktsmodell raderas när du konfigurerar ansiktslås igen.\n\nDu måste konfigurera den här funktionen igen för att kunna låsa upp telefonen med ditt ansikte."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Det gick inte att konfigurera ansiktslåset. Öppna inställningarna och försök igen."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Tryck på fingeravtryckssensorn"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Tryck på ikonen lås upp för att fortsätta"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Ansiktet kändes inte igen. Använd fingeravtryck."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Ljud"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Ingång"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Hörapparater"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hörapparater"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aktiverar …"</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Upplåst med ansiktslås"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Ansiktet har identifierats"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Svep uppåt om du vill försöka igen"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Svep uppåt för att försöka använda ansiktslåset igen"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Lås upp om du vill använda NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Den här enheten tillhör organisationen"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Den här enheten tillhör <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> får åtkomst till all information som visas på skärmen eller spelas upp från enheten när du spelar in eller castar. Detta omfattar uppgifter som lösenord, betalningsinformation, foton, meddelanden och ljud som du spelar upp."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Den tjänst som tillhandahåller funktionen får åtkomst till all information som visas på skärmen eller spelas upp från enheten när du spelar in eller castar. Detta omfattar uppgifter som lösenord, betalningsinformation, foton, meddelanden och ljud som du spelar upp."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Vill du börja spela in eller casta?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Vill du börja spela in eller casta med <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Vill du tillåta att <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> delar eller spelar in?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Hela skärmen"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"En enda app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"När du delar, spelar in eller castar har <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> åtkomst till allt som visas på skärmen eller spelas upp på enheten. Så var försiktig med lösenord, betalningsuppgifter, meddelanden och andra känsliga uppgifter."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"När du delar, spelar in eller castar en app har <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> åtkomst till allt som visas eller spelas upp i appen. Så var försiktig med lösenord, betalningsuppgifter, meddelanden och andra känsliga uppgifter."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Fortsätt"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Dela eller spela in en app"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Vill du tillåta att den här appen delar eller spelar in?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"När du delar, spelar in eller castar har den här appen åtkomst till allt som visas på skärmen eller spelas upp på enheten. Så var försiktig med lösenord, betalningsuppgifter, meddelanden och andra känsliga uppgifter."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"När du delar, spelar in eller castar en app har den här appen åtkomst till allt som visas eller spelas upp i appen. Så var försiktig med lösenord, betalningsuppgifter, meddelanden och andra känsliga uppgifter."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> får åtkomst till all information som visas på skärmen eller spelas upp från enheten när du spelar in eller castar. Detta omfattar till exempel lösenord, betalningsuppgifter, foton, meddelanden och ljud som du spelar upp."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Vill du börja spela in eller casta?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Den tjänst som tillhandahåller funktionen får åtkomst till all information som visas på skärmen eller spelas upp från enheten när du spelar in eller castar. Detta omfattar till exempel lösenord, betalningsuppgifter, foton, meddelanden och ljud som du spelar upp."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Hela skärmen"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"En enda app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Dela eller spela in en app"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Vill du börja spela in eller casta med <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"När du delar, spelar in eller castar har <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> åtkomst till allt som visas på skärmen eller spelas upp på enheten. Var försiktig med sådant som lösenord, betalningsuppgifter, meddelanden, foton och ljud och video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"När du delar, spelar in eller castar en app har <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> åtkomst till allt som visas eller spelas upp i appen. Var försiktig med sådant som lösenord, betalningsuppgifter, meddelanden, foton och ljud och video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Börja"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Vill du börja casta?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"När du castar har Android åtkomst till allt som visas på skärmen eller spelas upp på enheten. Var försiktig med sådant som lösenord, betalningsuppgifter, meddelanden, foton och ljud och video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"När du castar en app har Android åtkomst till allt som visas eller spelas upp i appen. Var försiktig med sådant som lösenord, betalningsuppgifter, meddelanden, foton och ljud och video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Börja casta"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Vill du börja dela?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"När du delar, spelar in eller castar har Android åtkomst till allt som visas på skärmen eller spelas upp på enheten. Var försiktig med sådant som lösenord, betalningsuppgifter, meddelanden, foton och ljud och video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"När du delar, spelar in eller castar en app har Android åtkomst till allt som visas eller spelas upp i appen. Var försiktig med sådant som lösenord, betalningsuppgifter, meddelanden, foton och ljud och video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Börja"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Delningen pausas när du byter appar"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Dela den här appen i stället"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Byt tillbaka"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Appbyte"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Blockeras av IT-administratören"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Skärminspelning är inaktiverat av enhetspolicyn"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Rensa alla"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"En certifikatutfärdare är installerad på enheten. Din säkra nätverkstrafik kan övervakas och ändras."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Administratören har aktiverat nätverksloggning som övervakar trafik på enheten."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Administratören har aktiverat nätverksloggning som övervakar trafik i jobbprofilen men inte den privata profilen."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Den här enheten är ansluten till internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Din nätverksaktivitet, till exempel e-post och webbinformation, är synlig för IT-administratören."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Den här enheten är ansluten till internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Din nätverksaktivitet, till exempel e-post och webbinformation, är synlig för VPN-leverantören."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Den här enheten är ansluten till internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Din nätverksaktivitet, till exempel e-post och webbinformation, är synlig för IT-administratören."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Den här enheten är ansluten till internet via <xliff:g id="VPN_APP_0">%1$s</xliff:g> och <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Din nätverksaktivitet, till exempel e-post och webbinformation, är synlig för IT-administratören."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Dina jobbappar är anslutna till internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Din nätverksaktivitet i jobbappar, till exempel e-post och webbinformation, är synlig för IT-administratören och VPN-leverantören."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Dina privata appar är anslutna till internet via <xliff:g id="VPN_APP">%1$s</xliff:g>. Din nätverksaktivitet, till exempel e-post och webbinformation, är synlig för VPN-leverantören."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"inaktivera"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Ljud och vibration"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Inställningar"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Sänkte till säkrare volym"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Volymen har varit hög längre än vad som rekommenderas"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Volymen har sänkts till en säkrare nivå"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Volymen i hörlurarna har varit hög längre än vad som rekommenderas"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Volymen i hörlurarna har överskridit den säkra gränsen för veckan"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Fortsätt lyssna"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Sänk volymen"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Appen har fästs"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Skärmen visas tills du lossar den. Tryck länge på Tillbaka och Översikt om du vill lossa skärmen."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Skärmen visas tills du lossar den. Tryck länge på Tillbaka och Startsida om du vill lossa skärmen."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Startmeny"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Sida <xliff:g id="ID_1">%1$d</xliff:g> av <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Låsskärm"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Mobilen stängdes av pga. värme"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Telefonen fungerar nu som vanligt.\nTryck för mer information"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Mobilen var för varm och stängdes av för att kylas ned. Den fungerar nu som vanligt.\n\nMobilen kan bli för varm om du\n	• använder resurskrävande appar (till exempel spel-, video- eller navigeringsappar)\n	• laddar ned eller laddar upp stora filer\n	• använder mobilen vid höga temperaturer."</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Visa alla skötselråd"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Mobilen börjar bli varm"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Vissa funktioner är begränsade medan telefonen svalnar.\nTryck för mer information"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Mobilen försöker svalna automatiskt. Du kan fortfarande använda mobilen, men den kan vara långsammare än vanligt.\n\nMobilen fungerar som vanligt när den har svalnat."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Visa alla skötselråd"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Koppla ur enheten"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Enheten börjar bli varm vid laddningsporten. Om den är ansluten till en laddare eller ett USB-tillbehör kopplar du ur den. Var försiktigt eftersom kabeln också kan vara varm."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Förstora hela skärmen"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Förstora en del av skärmen"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Öppna inställningarna för förstoring"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Stäng inställningarna för förstoring"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Dra i hörnet för att ändra storlek"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Tillåt diagonal scrollning"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Ändra storlek"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Tryck för att öppna tillgänglighetsfunktioner. Anpassa/ersätt knappen i Inställningar.\n\n"<annotation id="link">"Inställningar"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Flytta knappen till kanten för att dölja den tillfälligt"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Ångra"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> genväg har tagits bort"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Genväg till <xliff:g id="FEATURE_NAME">%s</xliff:g> har tagits bort"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# genväg har tagits bort}other{# genvägar har tagits bort}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Flytta högst upp till vänster"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Flytta högst upp till höger"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ta bort från favoriter"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Flytta till position <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroller"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Välj enhetsstyrning för snabbåtkomst"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Ändra ordning på kontrollerna genom att trycka och dra"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Alla kontroller har tagits bort"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Ändringarna har inte sparats"</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Testa en annan pinkod"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Bekräfta ändring av <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Svep om du vill se mer"</string>
+    <string name="retry_face" msgid="416380073082560186">"Försök med ansiktsautentisering igen"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Rekommendationer läses in"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"Vill du dölja detta uppspelningsreglage för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"Vill du dölja denna mediastyrning för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"Den aktuella mediesessionen kan inte döljas."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Dölj"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Återuppta"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Inställningar"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> med <xliff:g id="ARTIST_NAME">%2$s</xliff:g> spelas upp från <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> av <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> körs"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Spela upp"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausa"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Föregående spår"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> %%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Högtalare och skärmar"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Förslag på enheter"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Stoppa din delade session för att flytta media till en annan enhet"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Stoppa"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Så fungerar utsändning"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Utsändning"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Personer i närheten med kompatibla Bluetooth-enheter kan lyssna på medieinnehåll som du sänder ut"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Det gick inte att spara. Försök igen."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Det gick inte att spara."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Använd minst 4 tecken"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Använd färre än 16 tecken"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Använd färre än <xliff:g id="LENGTH">%1$d</xliff:g> tecken"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Versionsnummer"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Versionsnumret har kopierats till urklipp."</string>
     <string name="basic_status" msgid="2315371112182658176">"Öppen konversation"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Batteriindikatorn visas inte"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Tryck för mer information"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Inget inställt alarm"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ange skärmlåset"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Fingeravtryckssensor"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autentisera"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"ange enhet"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistenten lyssnar"</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="note_task_button_label" msgid="8718616095800343136">"Anteckningar"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Anteckna"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Anteckna med <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Läs mer"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Läs mer på <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Öppna <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• appen har konfigurerats"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• minst ett kort har lagts till i Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• installera en kameraapp"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• appen har konfigurerats"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• minst en enhet är tillgänglig"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Se till att Wallet-appen är installerad om du vill lägga till den som genväg"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Se till att minst ett kort har lagts till om du vill lägga till Wallet-appen som genväg"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Se till att en kameraapp är installerad om du vill lägga till QR-skannern som genväg"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Se till att Home-appen är installerad om du vill lägga till den som genväg"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• minst en enhet är tillgänglig"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Välj en standardapp för anteckningar om du vill använda genvägen för anteckningar"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Välj app"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Tryck länge på genvägen"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Avbryt"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Byt skärm nu"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Anslut e-pennan till en laddare"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"E-pennans batterinivå är låg"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Det går inte att ringa från den här profilen"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Jobbprincipen tillåter endast att du ringer telefonsamtal från jobbprofilen"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Det går inte att ringa samtal med en privat app"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Organisationen tillåter endast att du ringer samtal med jobbappar"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Byt till jobbprofilen"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Stäng"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Installera en jobbapp"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Avbryt"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Anpassa låsskärmen"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Lås upp för att anpassa låsskärmen"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wifi är inte tillgängligt"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kameran är blockerad"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kameran och mikrofonen är blockerade"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofonen är blockerad"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Prioritetsläge är aktiverat"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistenten är aktiverad"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Ställ in en standardapp för anteckningar i inställningarna"</string>
+    <string name="install_app" msgid="5066668100199613936">"Installera appen"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon och kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Senaste appanvändning"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Se senaste åtkomst"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Klar"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Utöka och visa alternativ"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Komprimera"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Stäng den här appen"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> stängdes"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Hantera tjänst"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Hantera åtkomst"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Används av telefonsamtal"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Användes nyligen i telefonsamtal"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Används av <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Användes nyligen av <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Används av <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Användes nyligen av <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Används av <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Användes nyligen av <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sv/strings_tv.xml b/packages/SystemUI/res/values-sv/strings_tv.xml
deleted file mode 100644
index 6830436..0000000
--- a/packages/SystemUI/res/values-sv/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN är anslutet"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN är frånkopplat"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"via <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Aviseringar"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Inga aviseringar"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofonen spelar in"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kameran spelar in"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kameran och mikrofonen spelar in"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofonen slutade spela in"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kameran slutade spela in"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kameran och mikrofonen slutade spelade in"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Skärminspelningen har startats"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Skärminspelningen har stoppats"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index eb32d9b..7c0df30 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Washa kipengele cha USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Pata maelezo zaidi"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Picha ya skrini"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Kipengele cha Kuongeza muda wa Kutofunga Skrini kimezimwa"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Kiongeza Muda wa Kutofunga Skrini kimezimwa"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"imetuma picha"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Inahifadhi picha ya skrini..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Inahifadhi picha ya skrini kwenye wasifu wa kazini…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> imetambua picha hii ya skrini."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> na zingine zinazotumika zimetambua picha hii ya skrini."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Ongeza kwenye dokezo"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Kinasa Skrini"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Kinasa Skrini"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Inachakata rekodi ya skrini"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Arifa inayoendelea ya kipindi cha kurekodi skrini"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Ungependa kuanza kurekodi?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Wakati wa kurekodi, Mfumo wa Android unaweza kunasa maelezo yoyote nyeti yanayoonekana kwenye skrini au yanayochezwa kwenye kifaa chako. Hii ni pamoja na manenosiri, maelezo ya malipo, picha, ujumbe na sauti."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Rekodi skrini nzima"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Rekodi programu moja"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Unaporekodi, Android inaweza kufikia kitu chochote kitakachoonekana kwenye skrini yako au kuchezwa kwenye kifaa chako. Hivyo kuwa mwangalifu na manenosiri, maelezo ya malipo, ujumbe au maelezo mengine nyeti."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Unaporekodi programu, Android inaweza kufikia kitu chochote kitakachoonekana au kuchezwa kwenye programu hiyo. Hivyo kuwa mwangalifu na manenosiri, maelezo ya malipo, ujumbe au maelezo mengine nyeti."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Anza kurekodi"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Ungependa kuanza kurekodi?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Unaporekodi, Android inaweza kufikia kitu chochote kitakachoonekana kwenye skrini yako au kuchezwa kwenye kifaa chako. Kwa hivyo kuwa mwangalifu na vitu kama vile manenosiri, maelezo ya malipo, ujumbe, picha na sauti na video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Unaporekodi programu, Android inaweza kufikia kitu chochote kitakachoonekana au kuchezwa kwenye programu hiyo. Kwa hivyo kuwa mwangalifu na vitu kama vile manenosiri, maelezo ya malipo, ujumbe, picha na sauti na video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Anza kurekodi"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Rekodi sauti"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Sauti ya kifaa"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Sauti kutoka kwenye kifaa chako, kama vile muziki, simu na milio ya simu"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Maikrofoni"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Maikrofoni na sauti ya kifaa"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Anza"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Anza"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Inarekodi skrini"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Inarekodi skrini na sauti"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Onyesha sehemu za kugusa kwenye skrini"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Shiriki"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Imehifadhi rekodi ya skrini"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Gusa ili uangalie"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Hitilafu imetokea wakati wa kufuta rekodi ya skrini"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Hitilafu imetokea wakati wa kuhifadhi rekodi ya skrini"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Hitilafu imetokea wakati wa kuanza kurekodi skrini"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Unatazama kwenye skrini nzima"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Ili uondoke, telezesha kidole kutoka juu hadi chini."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Nimeelewa"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Nyuma"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Nyumbani"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menyu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Uso umethibitishwa"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Imethibitishwa"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Gusa Thibitisha ili ukamilishe"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Imefunguliwa kwa kutumia uso wako. Bonyeza aikoni ya kufungua ili uendelee."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Inafunguliwa kwa kutumia uso"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Imefunguliwa kwa kutumia uso wako. Bonyeza ili uendelee."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Uso umetambuliwa. Bonyeza ili uendelee."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Uso umetambuliwa. Bonyeza aikoni ya kufungua ili uendelee."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Umethibitishwa"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Ghairi Uthibitishaji"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Tumia PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Tumia mchoro"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Tumia nenosiri"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Ukiweka mchoro usio sahihi utakapojaribu tena, wasifu wako wa kazini utafutwa pamoja na data yake."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Ukiweka PIN isiyo sahihi utakapojaribu tena, wasifu wako wa kazini utafutwa pamoja na data yake."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Ukiweka nenosiri lisilo sahihi utakapojaribu tena, wasifu wako wa kazini utafutwa pamoja na data yake."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Weka mipangilio ya"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Labda baadaye"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Hii inahitajika ili kuboresha usalama na utendaji"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Weka upya mipangilio ya Kufungua kwa Alama ya Kidole"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Kufungua kwa Alama ya Kidole"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Weka mipangilio ya Kufungua kwa Alama ya Kidole"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Ili uweke tena mipangilio ya Kufungua kwa Alama ya Kidole, miundo na picha za alama ya kidole zinazotumika kwa sasa zitafutwa.\n\nBaada ya kufutwa, utahitaji kuweka upya mipangilio ya Kufungua kwa Alama ya Kidole ili uweze kutumia alama ya kidole chako kufungua simu yako au kuthibitisha utambulisho wako."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Ili uweke tena mipangilio ya Kufungua kwa Alama ya Kidole, muundo na picha za alama ya kidole zinazotumika kwa sasa zitafutwa.\n\nBaada ya kufutwa, utahitaji kuweka upya mipangilio ya Kufungua kwa Alama ya Kidole ili uweze kutumia alama ya kidole chako kufungua simu yako au kuthibitisha utambulisho wako."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Imeshindwa kuweka mipangilio ya kufungua kwa alama ya kidole. Nenda kwenye Mipangilio ili ujaribu tena."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Weka tena mipangilio ya Kufungua kwa Uso"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Kufungua kwa Uso"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Weka mipangilio ya kipengele cha Kufungua kwa Uso"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Ili uweke tena mipangilio ya Kufungua kwa Uso, muundo wa uso wako unaotumika kwa sasa utafutwa.\n\nUtahitaji kuweka upya mipangilio ya kipengele hiki ili uweze kutumia uso wako kufungua simu yako."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Imeshindwa kuweka mipangilio ya kufungua kwa uso. Nenda kwenye Mipangilio ili ujaribu tena."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Gusa kitambua alama ya kidole"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Bonyeza aikoni ya kufungua ili uendelee"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Imeshindwa kutambua uso. Tumia alama ya kidole."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Sauti"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Vifaa vya sauti"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Vifaa vya kuingiza sauti"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Visaidizi vya Kusikia"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Visaidizi vya kusikia"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Inawasha..."</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Zungusha kiotomatiki"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Skrini ijizungushe kiotomatiki"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Imefunguliwa kwa kutumia uso"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Uso umetambuliwa"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Telezesha kidole juu ili ujaribu tena"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Telezesha kidole juu ili ujaribu Kufungua kwa Uso tena"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Fungua ili utumie NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Kifaa hiki kinamilikiwa na shirika lako"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Kifaa hiki kinamilikiwa na <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> itaweza kufikia maelezo yote yanayoonekana kwenye skrini yako au yanayochezwa kwenye kifaa chako wakati wa kurekodi au kutuma. Hii ni pamoja na maelezo kama vile manenosiri, maelezo ya malipo, picha, ujumbe na sauti unayocheza."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Huduma inayotoa utendaji huu itaweza kufikia maelezo yote yanayoonekana kwenye skrini yako au yanayochezwa kwenye kifaa chako wakati wa kurekodi au kutuma. Hii ni pamoja na maelezo kama vile manenosiri, maelezo ya malipo, picha, ujumbe na sauti unayocheza."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Ungependa kuanza kurekodi au kutuma?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Ungependa kuanza kurekodi au kutuma ukitumia <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Ungependa kuruhusu programu ya <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ishiriki au kurekodi?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Skrini nzima"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Programu moja"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Unapotuma, kurekodi au kushiriki, programu ya <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> inaweza kufikia kitu chochote kitakachoonekana kwenye skrini yako au kuchezwa kwenye kifaa chako. Hivyo kuwa mwangalifu na manenosiri, maelezo ya malipo, ujumbe au maelezo mengine nyeti."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Unapotuma, kurekodi au kushiriki programu, programu ya <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> inaweza kufikia kitu chochote kitakachoonekana au kuchezwa kwenye programu hiyo. Hivyo kuwa mwangalifu na manenosiri, maelezo ya malipo, ujumbe au maelezo mengine nyeti."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Endelea"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Shiriki au rekodi programu"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Ungependa kuruhusu programu hii ishiriki au irekodi?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Unapotuma, kurekodi au kushiriki, programu hii inaweza kufikia kitu chochote kitakachoonekana kwenye skrini yako au kuchezwa kwenye kifaa chako. Hivyo kuwa mwangalifu na manenosiri, maelezo ya malipo, ujumbe au maelezo mengine nyeti."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Unapotuma, kurekodi au kushiriki programu, programu hii inaweza kufikia kitu chochote kitakachoonekana au kuchezwa kwenye programu hiyo. Hivyo kuwa mwangalifu na manenosiri, maelezo ya malipo, ujumbe au maelezo mengine nyeti."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> itaweza kufikia maelezo yote yanayoonekana kwenye skrini yako au yanayochezwa kwenye kifaa chako wakati wa kurekodi au kutuma. Hii ni pamoja na maelezo kama vile manenosiri, maelezo ya malipo, picha, ujumbe na sauti unayocheza."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Ungependa kuanza kurekodi au kutuma?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Huduma inayotoa utendaji huu itaweza kufikia maelezo yote yanayoonekana kwenye skrini yako au yanayochezwa kwenye kifaa chako wakati wa kurekodi au kutuma. Hii ni pamoja na maelezo kama vile manenosiri, maelezo ya malipo, picha, ujumbe na sauti unayocheza."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Skrini nzima"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Programu moja"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Shiriki au rekodi programu"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Ungependa kuanza kurekodi au kutuma ukitumia <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Unaposhiriki, kurekodi au kutuma, programu ya <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> inaweza kufikia kitu chochote kitakachoonekana kwenye skrini yako au kuchezwa kwenye kifaa chako. Kwa hivyo kuwa mwangalifu na vitu kama vile manenosiri, maelezo ya malipo, ujumbe, picha na sauti na video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Unaposhiriki, kurekodi au kutuma programu, programu, programu ya <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> inaweza kufikia kitu chochote kitakachoonekana au kuchezwa kwenye programu hiyo. Kwa hivyo kuwa mwangalifu na vitu kama vile manenosiri, maelezo ya malipo, ujumbe, picha na sauti na video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Anza"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Ungependa kuanza kutuma?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Unapotuma, Android inaweza kufikia kitu chochote kitakachoonekana kwenye skrini yako au kuchezwa kwenye kifaa chako. Kwa hivyo kuwa mwangalifu na vitu kama vile manenosiri, maelezo ya malipo, ujumbe, picha na sauti na video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Unapotuma programu, Android inaweza kufikia kitu chochote kitakachoonekana au kuchezwa kwenye programu hiyo. Kwa hivyo kuwa mwangalifu na vitu kama vile manenosiri, maelezo ya malipo, ujumbe, picha na sauti na video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Anza kutuma"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Ungependa kuanza kushiriki?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Unaposhiriki, kurekodi au kutuma, Android inaweza kufikia kitu chochote kitakachoonekana kwenye skrini yako au kuchezwa kwenye kifaa chako. Kwa hivyo kuwa mwangalifu na vitu kama vile manenosiri, maelezo ya malipo, ujumbe, picha na sauti na video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Unaposhiriki, kurekodi au kutuma programu, Android inaweza kufikia kitu chochote kitakachoonekana au kuchezwa kwenye programu hiyo. Kwa hivyo kuwa mwangalifu na vitu kama vile manenosiri, maelezo ya malipo, ujumbe, picha na sauti na video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Anza"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Itasitisha kushiriki unapobadilisha programu"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Shiriki programu hii badala yake"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Rejea"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Kubadilisha programu"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Umezuiwa na msimamizi wako wa TEHAMA"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Mchakato wa kurekodi skrini umezimwa na sera ya kifaa"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Futa zote"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Mamlaka ya cheti imesakinishwa kwenye kifaa hiki. Huenda shughuli kwenye mtandao wako salama zikafuatiliwa au kubadilishwa."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Msimamizi wako amewasha kumbukumbu ya kuingia mtandaoni, ambayo hufuatilia shughuli kwenye kifaa chako."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Msimamizi wako amewasha kumbukumbu ya kuingia mtandaoni ambayo hufuatilia shughuli kwenye wasifu wako wa kazini ila si kwenye wasifu wako wa binafsi."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Kifaa hiki kimeunganishwa kwenye intaneti kupitia <xliff:g id="VPN_APP">%1$s</xliff:g>. Shughuli zako za mtandaoni kwenye programu za kazini, ikijumuisha barua pepe na data ya kuvinjari, zinaonekana kwa msimamizi wako wa TEHAMA na mtoa huduma wa VPN."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Kifaa hiki kimeunganishwa kwenye intaneti kupitia <xliff:g id="VPN_APP">%1$s</xliff:g>. Shughuli zako za mtandaoni, ikiwa ni pamoja na barua pepe na data ya kuvinjari, zinaonekana kwa mtoa huduma za VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Kifaa hiki kimeunganishwa kwenye intaneti kupitia <xliff:g id="VPN_APP">%1$s</xliff:g>. Shughuli zako za mtandaoni, ikiwa ni pamoja na barua pepe na data ya kuvinjari, zinaonekana kwa msimamizi wako wa TEHAMA."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Kifaa hiki kimeunganishwa kwenye intaneti kupitia <xliff:g id="VPN_APP_0">%1$s</xliff:g> na <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Shughuli zako za mtandaoni kwenye programu za kazini, ikijumuisha barua pepe na data ya kuvinjari, zinaonekana kwa msimamizi wako wa TEHAMA na mtoa huduma wa VPN."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Programu zako za kazini zimeunganishwa kwenye intaneti kupitia <xliff:g id="VPN_APP">%1$s</xliff:g>. Shughuli zako za mtandaoni kwenye programu za kazini, ikijumuisha barua pepe na data ya kuvinjari, zinaonekana kwa msimamizi wako TEHAMA na mtoa huduma wa VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Programu zako binafsi zimeunganishwa kwenye intaneti kupitia <xliff:g id="VPN_APP">%1$s</xliff:g>. Shughuli zako za mtandaoni kwenye programu za kazini, ikijumuisha barua pepe na data ya kuvinjari, zinaonekana kwa mtoa huduma wako wa VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"zima"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Sauti na mtetemo"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Mipangilio"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Sauti imepunguzwa kuwa kiwango salama"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Sauti imekuwa juu kwa muda mrefu kuliko inavyopendekezwa"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Kiwango cha sauti kimepunguzwa hadi kiwango salama"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Kiwango cha sauti ya vipokea sauti vya kichwani kimekuwa juu kwa muda mrefu kuliko inavyopendekezwa"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Kiwango cha sauti ya vipokea sauti vya kichwani kimezidi kikomo cha kiwango salama kwa wiki hii"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Endelea kusikiliza"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Punguza kiwango cha sauti"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Programu imebandikwa"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Hali hii huifanya ionekane hadi utakapoibandua. Gusa na ushikilie kipengele cha Nyuma na Muhtasari ili ubandue."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Hali hii huifanya ionekane hadi utakapoibandua. Gusa na ushikilie kitufe cha kurudisha Nyuma na cha Mwanzo kwa pamoja ili ubandue."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Menyu ya kuzima/kuwasha"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Ukurasa wa <xliff:g id="ID_1">%1$d</xliff:g> kati ya <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Skrini iliyofungwa"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Simu ilizima kutokana na joto"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Simu yako sasa inafanya kazi ipasavyo.\nGusa ili upate maelezo zaidi"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Simu yako ilikuwa moto sana, kwa hivyo ilijizima ili ipoe. Simu yako sasa inafanya kazi ipasavyo.\n\nSimu yako inaweza kuwa moto sana ikiwa:\n	• Unatumia programu zinazotumia vipengee vingi (kama vile michezo ya video, video au programu za uelekezaji)\n	• Unapakua au upakie faili kubwa\n	• Unatumia simu yako katika maeneo yenye halijoto ya juu"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Angalia hatua za utunzaji"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Joto la simu linaongezeka"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Baadhi ya vipengele havitatumika kwenye simu wakati inapoa.\nGusa ili upate maelezo zaidi"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Simu yako itajaribu kupoa kiotomatiki. Bado unaweza kutumia simu yako, lakini huenda ikafanya kazi polepole. \n\nPindi simu yako itakapopoa, itaendelea kufanya kazi kama kawaida."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Angalia hatua za utunzaji"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Chomoa kifaa chako"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Kifaa chako kinapata joto karibu na mlango wa kuchaji. Ikiwa kimeunganishwa kwenye chaja au kifuasi cha USB, kichomoe na uwe makini kwani kebo inaweza kuwa imepata joto."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Kuza skrini nzima"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Kuza sehemu ya skrini"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Fungua mipangilio ya ukuzaji"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Funga mipangilio ya ukuzaji"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Buruta kona ili ubadilishe ukubwa"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Ruhusu usogezaji wa kimshazari"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Badilisha ukubwa"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ondoa kwenye vipendwa"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Sogeza kwenye nafasi ya <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Vidhibiti"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Chagua vidhibiti vya kifaa ambavyo ungependa kufikia haraka"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Shikilia na uburute ili upange vidhibiti upya"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Umeondoa vidhibiti vyote"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Mabadiliko hayajahifadhiwa"</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Jaribu PIN nyingine"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Thibitisha mabadiliko kwenye <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Telezesha kidole ili uone zaidi"</string>
+    <string name="retry_face" msgid="416380073082560186">"Jaribu uthibitishaji kutumia uso"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Inapakia mapendekezo"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Maudhui"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"Ungependa kuficha kidhibiti hiki kwa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"Ungependa kuficha kidhibiti hiki kwenye <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"Kipindi cha sasa cha maudhui hakiwezi kufichwa."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Ficha"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Endelea"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Mipangilio"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ulioimbwa na <xliff:g id="ARTIST_NAME">%2$s</xliff:g> unacheza katika <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> kati ya <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> inatumika"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Cheza"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Simamisha"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Wimbo uliotangulia"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Spika na Skrini"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Vifaa Vilivyopendekezwa"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Simamisha kipindi unachoshiriki ili uhamishie maudhui kwenye kifaa kingine"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Simamisha"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Jinsi utangazaji unavyofanya kazi"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Tangaza"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Watu walio karibu nawe wenye vifaa oanifu vya Bluetooth wanaweza kusikiliza maudhui unayoyatangaza"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Imeshindwa kuhifadhi. Jaribu tena."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Imeshindwa kuhifadhi."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Tumia angalau herufi 4"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Tumia herufi chini ya 16"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Hupaswi kuzidi herufi <xliff:g id="LENGTH">%1$d</xliff:g>"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Nambari ya muundo"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Nambari ya muundo imewekwa kwenye ubao wa kunakili."</string>
     <string name="basic_status" msgid="2315371112182658176">"Fungua mazungumzo"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Tatizo la kusoma mita ya betri yako"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Gusa ili upate maelezo zaidi"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Hujaweka kengele"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"weka kifunga skrini"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Kitambua alama ya kidole"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"thibitisha"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"weka kifaa"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Programu ya Mratibu inasikiliza"</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="note_task_button_label" msgid="8718616095800343136">"Kuandika vidokezo"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Kuandika madokezo"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Kuandika madokezo, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Pata maelezo zaidi"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Pata maelezo zaidi katika <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Fungua <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Programu hii imewekewa mipangilio"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Angalau kadi moja imewekwa kwenye Pochi"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Sakinisha programu ya kamera"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Programu hii imewekewa mipangilio"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Angalau kifaa kimoja kinapatikana"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Ili uweke programu ya Pochi kuwa njia ya mkato, hakikisha umesakinisha programu hiyo"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Ili uweke programu ya Pochi kuwa njia ya mkato, hakikisha umeweka angalau kadi moja"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Ili uweke kichanganuzi cha msimbo wa QR kuwa njia ya mkato, hakikisha umesakinisha programu ya kamera"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Ili uweke programu ya Google Home kuwa njia ya mkato, hakikisha umesakinisha programu hiyo"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Angalau kifaa kimoja kinapatikana"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Chagua programu chaguomsingi ya madokezo ili utumie njia ya mkato ya kuandika madokezo"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Chagua programu"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Gusa na ushikilie njia ya mkato"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Ghairi"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Badilisha skrini sasa"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Unganisha stylus yako kwenye chaja"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Chaji ya betri ya Stylus imepungua"</string>
     <string name="video_camera" msgid="7654002575156149298">"Kamera ya kuchukulia video"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Huwezi kupiga simu kutoka kwenye wasifu huu"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Sera ya mahali pako pa kazi inakuruhusu upige simu kutoka kwenye wasifu wa kazini pekee"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Huwezi kupiga simu kwa kutumia programu ya binafsi"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Shirika lako linakuruhusu upige simu ukitumia programu za kazini pekee"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Tumia wasifu wa kazini"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Funga"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Sakinisha programu ya simu ya kazini"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Ghairi"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Wekea mapendeleo skrini iliyofungwa"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Fungua ili uweke mapendeleo ya skrini iliyofungwa"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi haipatikani"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera imezuiwa"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera na maikrofoni zimezuiwa"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Maikrofoni imezuiwa"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Hali ya kipaumbele imewashwa"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Programu ya Mratibu imewashwa"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Teua programu chaguomsingi ya madokezo katika Mipangilio"</string>
+    <string name="install_app" msgid="5066668100199613936">"Sakinisha programu"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Maikrofoni na Kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Matumizi ya programu hivi majuzi"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Angalia ufikiaji wa majuzi"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Nimemaliza"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Chaguo za kupanua na kuonyesha"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Kunja"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Funga programu hii"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> imefungwa"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Dhibiti huduma"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Dhibiti idhini ya kufikia"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Inatumiwa na simu"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Ilitumiwa hivi majuzi na simu"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Inatumiwa na <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Ilitumiwa hivi majuzi na <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Inatumiwa na <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Ilitumiwa hivi majuzi na <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Inatumiwa na <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Ilitumiwa hivi majuzi na <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sw/strings_tv.xml b/packages/SystemUI/res/values-sw/strings_tv.xml
deleted file mode 100644
index f3e2ca2..0000000
--- a/packages/SystemUI/res/values-sw/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN imeunganishwa"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN imeondolewa"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Kupitia <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Arifa"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Hakuna Arifa"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Maikrofoni inarekodi"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera inarekodi"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera na Maikrofoni zinarekodi"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Maikrofoni imeacha kurekodi"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kamera imeacha kurekodi"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kamera na Maikrofoni zimeacha kurekodi"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Imeanza kurekodi skrini"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Imeacha kurekodi skrini"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index 583ec25..4c6816b 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USBயை இயக்கு"</string>
     <string name="learn_more" msgid="4690632085667273811">"மேலும் அறிக"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ஸ்கிரீன்ஷாட்"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"நீண்டநேர அன்லாக் அம்சம் முடக்கப்பட்டது"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"அன்லாக் நீட்டிப்பு அம்சம் முடக்கப்பட்டது"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"படம் அனுப்பப்பட்டது"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"ஸ்க்ரீன் ஷாட்டைச் சேமிக்கிறது…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"பணிக் கணக்கில் ஸ்கிரீன்ஷாட் சேமிக்கப்படுகிறது…"</string>
@@ -83,7 +83,7 @@
     <string name="screenshot_edit_label" msgid="8754981973544133050">"திருத்து"</string>
     <string name="screenshot_edit_description" msgid="3333092254706788906">"ஸ்கிரீன்ஷாட்டைத் திருத்தும்"</string>
     <string name="screenshot_share_description" msgid="2861628935812656612">"ஸ்கிரீன்ஷாட்டைப் பகிர்"</string>
-    <string name="screenshot_scroll_label" msgid="2930198809899329367">"கூடுதலாகப் படமெடு"</string>
+    <string name="screenshot_scroll_label" msgid="2930198809899329367">"கூடுதலாக படமெடு"</string>
     <string name="screenshot_dismiss_description" msgid="4702341245899508786">"ஸ்கிரீன்ஷாட்டை நிராகரிக்கும்"</string>
     <string name="screenshot_dismiss_work_profile" msgid="3101530842987697045">"பணிக் கணக்கு மெசேஜை மூடும்"</string>
     <string name="screenshot_preview_description" msgid="7606510140714080474">"ஸ்கிரீன்ஷாட்டின் மாதிரிக்காட்சி"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"இந்த ஸ்கிரீன்ஷாட்டை <xliff:g id="APPNAME">%1$s</xliff:g> கண்டறிந்துள்ளது."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"இந்த ஸ்கிரீன்ஷாட்டை <xliff:g id="APPNAME">%1$s</xliff:g> மற்றும் திறந்திருக்கும் பிற ஆப்ஸ் கண்டறிந்துள்ளன."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"குறிப்பில் சேர்"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"ஸ்கிரீன் ரெக்கார்டர்"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"ஸ்கிரீன் ரெக்கார்டர்"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"ஸ்க்ரீன் ரெக்கார்டிங் செயலாக்கப்படுகிறது"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"திரை ரெக்கார்டிங் அமர்விற்கான தொடர் அறிவிப்பு"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"ரெக்கார்டிங்கைத் தொடங்கவா?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"ரெக்கார்டு செய்யும்போது, உங்கள் திரையில் தோன்றக்கூடிய அல்லது சாதனத்தில் பிளே ஆகக்கூடிய பாதுகாக்கப்பட வேண்டிய தகவலை Android சிஸ்டம் படமெடுக்க முடியும். கடவுச்சொற்கள், பேமெண்ட் தகவல், படங்கள், மெசேஜ்கள், ஆடியோ ஆகியவை இதில் அடங்கும்."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"முழு திரையை ரெக்கார்டு செய்தல்"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"ஓர் ஆப்ஸை ரெக்கார்டு செய்தல்"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"நீங்கள் ரெக்கார்டு செய்யும்போது அந்தச் சாதனத்தில் காட்டப்படும் அல்லது பிளே செய்யப்படும் அனைத்தையும் Android அணுக முடியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், பிற பாதுகாக்கப்பட வேண்டிய தகவல்கள் ஆகியவை குறித்து கவனத்துடன் இருங்கள்."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"ஓர் ஆப்ஸை நீங்கள் ரெக்கார்டு செய்யும்போது அந்த ஆப்ஸில் காட்டப்படும் அல்லது பிளே செய்யப்படும் அனைத்தையும் Android அணுக முடியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், பிற பாதுகாக்கப்பட வேண்டிய தகவல்கள் ஆகியவை குறித்து கவனத்துடன் இருங்கள்."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"ரெக்கார்டிங்கைத் தொடங்கு"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"ரெக்கார்டு செய்யத் தொடங்கவா?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"நீங்கள் ரெக்கார்டு செய்யும்போது உங்கள் திரையில் காட்டப்படுகின்ற அல்லது சாதனத்தில் பிளே செய்யப்படுகின்ற அனைத்தையும் Android அணுக முடியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், படங்கள், ஆடியோ, வீடியோ போன்றவை குறித்துக் கவனத்துடன் இருங்கள்."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"ஓர் ஆப்ஸை நீங்கள் ரெக்கார்டு செய்யும்போது அந்த ஆப்ஸில் காட்டப்படுகின்ற அல்லது பிளே செய்யப்படுகின்ற அனைத்தையும் Android அணுக முடியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், படங்கள், ஆடியோ, வீடியோ போன்றவை குறித்துக் கவனத்துடன் இருங்கள்."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"ரெக்கார்டு செய்யத் தொடங்கு"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"ஆடியோவை ரெக்கார்டு செய்"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"சாதன ஆடியோ"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"இசை, அழைப்புகள், ரிங்டோன்கள் போன்ற உங்கள் சாதனத்திலிருந்து வரும் ஒலி"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"மைக்ரோஃபோன்"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"சாதன ஆடியோ மற்றும் மைக்ரோஃபோன்"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"தொடங்கு"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"தொடங்கு"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"ஸ்கிரீன் ரெக்கார்ட் செய்யப்படுகிறது"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"ஸ்கிரீன் மற்றும் ஆடியோ ரெக்கார்ட் செய்யப்படுகிறது"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"திரையில் உள்ள தொடுதல்களைக் காட்டு"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"பகிர்"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"ஸ்கிரீன் ரெக்கார்டிங் சேமிக்கப்பட்டது"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"பார்க்கத் தட்டவும்"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"திரை ரெக்கார்டிங்கை நீக்குவதில் பிழை"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"ஸ்கிரீன் ரெக்கார்டிங்கைச் சேமிப்பதில் பிழை ஏற்பட்டது"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"ஸ்கிரீன் ரெக்கார்டிங்கைத் தொடங்குவதில் பிழை"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"முழுத் திரையில் காட்டுகிறது"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"வெளியேற, மேலிருந்து கீழே ஸ்வைப் செய்யவும்."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"சரி"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"பின்செல்"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"முகப்பு"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"மெனு"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"முகம் அங்கீகரிக்கப்பட்டது"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"உறுதிப்படுத்தப்பட்டது"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"முடிக்க \'உறுதிப்படுத்துக\' என்பதை தட்டவும்"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"முகம் மூலம் அன்லாக் செய்யப்பட்டது. தொடர, அன்லாக் ஐகானை அழுத்துக."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"முகத்தால் அன்லாக் செய்யப்பட்டது"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"முகம் மூலம் அன்லாக் செய்யப்பட்டது. தொடர அழுத்தவும்."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"முகம் அங்கீகரிக்கப்பட்டது. தொடர அழுத்தவும்."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"முகம் அங்கீகரிக்கப்பட்டது. தொடர அன்லாக் ஐகானை அழுத்தவும்."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"அங்கீகரிக்கப்பட்டது"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"அங்கீகரிப்பை ரத்துசெய்"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"பின்னைப் பயன்படுத்து"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"பேட்டர்னைப் பயன்படுத்து"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"கடவுச்சொல்லைப் பயன்படுத்து"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"அடுத்த முறை தவறான பேட்டர்னை வரைந்தால் உங்கள் பணிக் கணக்கும் அதன் தரவும் நீக்கப்படும்."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"அடுத்த முறை தவறான பின்னை உள்ளிட்டால் உங்கள் பணிக் கணக்கும் அதன் தரவும் நீக்கப்படும்."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"அடுத்த முறை தவறான கடவுச்சொல்லை உள்ளிட்டால் உங்கள் பணிக் கணக்கும் அதன் தரவும் நீக்கப்படும்."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"அமை"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"இப்போது வேண்டாம்"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"பாதுகாப்பையும் செயல்திறனையும் மேம்படுத்த இது தேவை"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"கைரேகை அன்லாக் அம்சத்தை மீண்டும் அமையுங்கள்"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"கைரேகை அன்லாக்"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"கைரேகை அன்லாக் அம்சத்தை அமையுங்கள்"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"\'கைரேகை அன்லாக்\' அம்சத்தை மீண்டும் அமைக்க, உங்களுடைய தற்போதைய கைரேகைப் படங்களும் மாடல்களும் நீக்கப்படும்.\n\nஅவை நீக்கப்பட்ட பிறகு, உங்கள் கைரேகையைப் பயன்படுத்தி மொபைலைத் திறக்கவோ நீங்கள்தான் என்பதை உறுதிப்படுத்தவோ \'கைரேகை அன்லாக்\' அம்சத்தை மீண்டும் அமைக்க வேண்டும்."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"\'கைரேகை அன்லாக்\' அம்சத்தை மீண்டும் அமைக்க, உங்களுடைய தற்போதைய கைரேகைப் படங்களும் மாடலும் நீக்கப்படும்.\n\nஅவை நீக்கப்பட்ட பிறகு, உங்கள் கைரேகையைப் பயன்படுத்தி மொபைலைத் திறக்கவோ நீங்கள்தான் என்பதை உறுதிப்படுத்தவோ \'கைரேகை அன்லாக்\' அம்சத்தை மீண்டும் அமைக்க வேண்டும்."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"\'கைரேகை அன்லாக்\' அம்சத்தை அமைக்க முடியவில்லை. அமைப்புகளுக்குச் சென்று மீண்டும் முயலவும்."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"\'முகம் காட்டித் திறத்தல்\' அம்சத்தை மீண்டும் அமையுங்கள்"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"முகம் காட்டித் திறத்தல்"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"\'முகம் காட்டித் திறத்தல்\' அம்சத்தை அமையுங்கள்"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"\'முகம் காட்டித் திறத்தல்\' அம்சத்தை மீண்டும் அமைக்க, உங்களுடைய தற்போதைய முகத் தோற்றப் பதிவு நீக்கப்படும்.\n\nஉங்கள் முகத்தைப் பயன்படுத்தி மொபைலைத் திறக்க இந்த அம்சத்தை மீண்டும் அமைக்க வேண்டும்."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"\'முகம் காட்டித் திறத்தல்\' அம்சத்தை அமைக்க முடியவில்லை. அமைப்புகளுக்குச் சென்று மீண்டும் முயலவும்."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"கைரேகை சென்சாரைத் தொடவும்"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"தொடர, அன்லாக் ஐகானை அழுத்துங்கள்"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"முகத்தை அடையாளம் காண முடியவில்லை. கைரேகையைப் பயன்படுத்தவும்."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ஆடியோ"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ஹெட்செட்"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"உள்ளீடு"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"செவித்துணை கருவிகள்"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"செவித்துணைக் கருவி"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ஆன் செய்கிறது…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"தானாகச் சுழற்று"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"திரையைத் தானாகச் சுழற்று"</string>
@@ -306,9 +322,9 @@
     <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"சாதனத்தின் மைக்ரோஃபோனுக்கான தடுப்பை நீக்கவா?"</string>
     <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"சாதனத்தின் கேமராவுக்கான தடுப்பை நீக்கவா?"</string>
     <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"சாதனத்தின் கேமராவுக்கும் மைக்ரோஃபோனுக்குமான தடுப்பை நீக்கவா?"</string>
-    <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"உங்கள் மைக்ரோஃபோனைப் பயன்படுத்த அனுமதிக்கப்பட்டுள்ள அனைத்து ஆப்ஸ் மற்றும் சேவைகளை அணுகுவதற்கான தடுப்பை இது நீக்கும்."</string>
-    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"உங்கள் கேமராவைப் பயன்படுத்த அனுமதிக்கப்பட்டுள்ள அனைத்து ஆப்ஸ் மற்றும் சேவைகளை அணுகுவதற்கான தடுப்பை இது நீக்கும்."</string>
-    <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"உங்கள் கேமராவையோ மைக்ரோஃபோனையோ பயன்படுத்த அனுமதிக்கப்பட்டுள்ள அனைத்து ஆப்ஸ் மற்றும் சேவைகளை அணுகுவதற்கான தடுப்பை இது நீக்கும்."</string>
+    <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"உங்கள் மைக்ரோஃபோனைப் பயன்படுத்த அனுமதிக்கப்பட்டுள்ள அனைத்து ஆப்ஸ் மற்றும் சேவைகளுக்கும் தடுப்பை இது நீக்கும்."</string>
+    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"உங்கள் கேமராவைப் பயன்படுத்த அனுமதிக்கப்பட்டுள்ள அனைத்து ஆப்ஸ் மற்றும் சேவைகளுக்கும் தடுப்பை இது நீக்கும்."</string>
+    <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"உங்கள் கேமராவையோ மைக்ரோஃபோனையோ பயன்படுத்த அனுமதிக்கப்பட்டுள்ள அனைத்து ஆப்ஸ் மற்றும் சேவைகளுக்கும் தடுப்பை இது நீக்கும்."</string>
     <string name="sensor_privacy_start_use_mic_blocked_dialog_title" msgid="2640140287496469689">"மைக்ரோஃபோன் அணுகல் முடக்கப்பட்டுள்ளது"</string>
     <string name="sensor_privacy_start_use_camera_blocked_dialog_title" msgid="7398084286822440384">"கேமரா அணுகல் முடக்கப்பட்டுள்ளது"</string>
     <string name="sensor_privacy_start_use_mic_camera_blocked_dialog_title" msgid="195236134743281973">"மைக்ரோஃபோன் &amp; கேமரா அணுகல் முடக்கப்பட்டுள்ளது"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"முகத்தால் அன்லாக் செய்யப்பட்டது"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"முகம் அங்கீகரிக்கப்பட்டது"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"மீண்டும் முயல மேல்நோக்கி ஸ்வைப் செய்யவும்"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"முகம் காட்டித் திறத்தலை மீண்டும் முயல மேலே ஸ்வைப் செய்யவும்"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFCயைப் பயன்படுத்த அன்லாக் செய்யவும்"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"இந்த சாதனம் உங்கள் நிறுவனத்துக்கு சொந்தமானது"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"இந்த சாதனம் <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> நிறுவனத்துக்கு சொந்தமானது"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"பயனரை அகற்றவா?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"இந்தப் பயனரின் எல்லா பயன்பாடுகளும் தரவும் நீக்கப்படும்."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"அகற்று"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> உங்கள் திரையில் தெரியும் தகவல்கள், ரெக்கார்டு செய்யும்போதோ அனுப்பும்போதோ உங்கள் சாதனத்திலிருந்து பிளே ஆகும் அனைத்து தகவல்கள் ஆகியவற்றுக்கான அணுகலைக் கொண்டிருக்கும். கடவுச்சொற்கள், பேமெண்ட் தொடர்பான தகவல்கள், படங்கள், மெசேஜ்கள், நீங்கள் பிளே செய்யும் ஆடியோ போன்ற அனைத்துத் தகவல்களும் இதில் அடங்கும்."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"இந்தச் செயல்பாட்டை வழங்கும் சேவையானது உங்கள் திரையில் தெரியும் தகவல்கள், ரெக்கார்டு செய்யும்போதோ அனுப்பும்போதோ உங்கள் சாதனத்திலிருந்து பிளே ஆகும் அனைத்துத் தகவல்கள் ஆகியவற்றுக்கான அணுகலைக் கொண்டிருக்கும். கடவுச்சொற்கள், பேமெண்ட் தொடர்பான தகவல்கள், படங்கள், மெசேஜ்கள், நீங்கள் பிளே செய்யும் ஆடியோ போன்ற அனைத்துத் தகவல்களும் இதில் அடங்கும்."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"ரெக்கார்டிங் செய்யவோ அனுப்புவோ தொடங்கவா?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> மூலம் ரெக்கார்டிங் செய்யவோ அனுப்புவதற்கோ தொடங்கிவீட்டீர்களா?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"பகிர அல்லது ரெக்கார்டு செய்ய <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ஆப்ஸை அனுமதிக்கலாமா?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"திரை முழுவதும்"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"ஓர் ஆப்ஸ்"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"நீங்கள் பகிரும்போதோ ரெக்கார்டு செய்யும்போதோ அலைபரப்பும்போதோ உங்கள் சாதனத்தில் காட்டப்படும் அல்லது பிளே செய்யப்படும் அனைத்தையும் <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ஆப்ஸால் அணுக முடியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், பிற பாதுகாக்கப்பட வேண்டிய தகவல்கள் ஆகியவை குறித்து கவனத்துடன் இருங்கள்."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"ஓர் ஆப்ஸை நீங்கள் பகிரும்போதோ ரெக்கார்டு செய்யும்போதோ அலைபரப்பும்போதோ அந்த ஆப்ஸில் காட்டப்படும் அல்லது பிளே செய்யப்படும் அனைத்தையும் <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ஆப்ஸால் அணுக முடியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், பிற பாதுகாக்கப்பட வேண்டிய தகவல்கள் ஆகியவை குறித்து கவனத்துடன் இருங்கள்."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"தொடர்க"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"ஆப்ஸைப் பகிர்தல் அல்லது ரெக்கார்டு செய்தல்"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"பகிர்வதற்கோ ரெக்கார்டு செய்வதற்கோ இந்த ஆப்ஸை அனுமதிக்கவா?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"நீங்கள் பகிரும்போதோ ரெக்கார்டு செய்யும்போதோ அலைபரப்பும்போதோ திரையில் காட்டப்படும்/சாதனத்தில் பிளே செய்யப்படும் அனைத்தையும் இந்த ஆப்ஸால் அணுக முடியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள் அல்லது பாதுகாக்கப்பட வேண்டிய பிற தகவல்கள் குறித்துக் கவனமாக இருங்கள்."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"ஓர் ஆப்ஸை நீங்கள் பகிரும்போதோ ரெக்கார்டு செய்யும்போதோ அலைபரப்பும்போதோ அதில் காட்டப்படும்/பிளே செய்யப்படும் அனைத்தையும் இந்த ஆப்ஸால் அணுக முடியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள் அல்லது பாதுகாக்கப்பட வேண்டிய பிற தகவல்கள் குறித்துக் கவனமாக இருங்கள்."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"ரெக்கார்டு செய்யும்போதோ அலைபரப்பும்போதோ உங்கள் திரையில் காட்டப்படுகின்ற அல்லது உங்கள் சாதனத்திலிருந்து பிளே செய்யப்படுகின்ற அனைத்துத் தகவல்களுக்குமான அணுகலை <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ஆப்ஸ் கொண்டிருக்கும். கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், படங்கள், மெசேஜ்கள், நீங்கள் பிளே செய்யும் ஆடியோ போன்றவை இதிலடங்கும்."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"ரெக்கார்டு செய்ய அல்லது அலைபரப்பத் தொடங்கவா?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"ரெக்கார்டு செய்யும்போதோ அலைபரப்பும்போதோ உங்கள் திரையில் காட்டப்படுகின்ற அல்லது சாதனத்திலிருந்து பிளே செய்யப்படுகின்ற அனைத்துத் தகவல்களையும் இந்தச் செயல்பாட்டை வழங்கும் சேவையால் அணுக முடியும். கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், படங்கள், மெசேஜ்கள், நீங்கள் பிளே செய்யும் ஆடியோ போன்றவை இதிலடங்கும்."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"முழுத்திரையையும்"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"ஓர் ஆப்ஸ்"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"ஆப்ஸைப் பகிர்தல் அல்லது ரெக்கார்டு செய்தல்"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ஆப்ஸ் மூலம் ரெக்கார்டு செய்ய அல்லது அலைபரப்பத் தொடங்கவா?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"நீங்கள் பகிரும்போதோ ரெக்கார்டு செய்யும்போதோ அலைபரப்பும்போதோ உங்கள் திரையில் காட்டப்படுகின்ற அல்லது சாதனத்தில் பிளே செய்யப்படுகின்ற அனைத்தையும் <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ஆப்ஸால் அணுக முடியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், படங்கள், ஆடியோ, வீடியோ போன்றவை குறித்துக் கவனத்துடன் இருங்கள்."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"நீங்கள் ஓர் ஆப்ஸைப் பகிரும்போதோ ரெக்கார்டு செய்யும்போதோ அலைபரப்பும்போதோ அந்த ஆப்ஸில் காட்டப்படுகின்ற அல்லது பிளே செய்யப்படுகின்ற அனைத்தையும் <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ஆப்ஸால் அணுக முடியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், படங்கள், ஆடியோ, வீடியோ போன்றவை குறித்துக் கவனத்துடன் இருங்கள்."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"தொடங்கு"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"அலைபரப்பைத் தொடங்கவா?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"நீங்கள் அலைபரப்பும்போது உங்கள் திரையில் காட்டப்படுகின்ற அல்லது சாதனத்தில் பிளே செய்யப்படுகின்ற அனைத்தையும் Android அணுக முடியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், படங்கள், ஆடியோ, வீடியோ போன்றவை குறித்துக் கவனத்துடன் இருங்கள்."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"ஓர் ஆப்ஸை நீங்கள் அலைபரப்பும்போது அந்த ஆப்ஸில் காட்டப்படுகின்ற அல்லது பிளே செய்யப்படுகின்ற அனைத்தையும் Android அணுக முடியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், படங்கள், ஆடியோ, வீடியோ போன்றவை குறித்துக் கவனத்துடன் இருங்கள்."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"அலைபரப்பைத் தொடங்கு"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"பகிர்தலைத் தொடங்கவா?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"நீங்கள் பகிரும்போதோ ரெக்கார்டு செய்யும்போதோ அலைபரப்பும்போதோ உங்கள் திரையில் காட்டப்படுகின்ற அல்லது சாதனத்தில் பிளே செய்யப்படுகின்ற அனைத்தையும் Android அணுக முடியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், படங்கள், ஆடியோ, வீடியோ போன்றவை குறித்துக் கவனத்துடன் இருங்கள்."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"நீங்கள் ஓர் ஆப்ஸைப் பகிரும்போதோ ரெக்கார்டு செய்யும்போதோ அலைபரப்பும்போதோ அந்த ஆப்ஸில் காட்டப்படுகின்ற அல்லது பிளே செய்யப்படுகின்ற அனைத்தையும் Android அணுக முடியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், படங்கள், ஆடியோ, வீடியோ போன்றவை குறித்துக் கவனத்துடன் இருங்கள்."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"தொடங்கு"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"பகிர்தல் ஆப்ஸிற்கு இடையே மாறும்போது இடைநிறுத்தப்படும்"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"அதற்குப் பதிலாக இந்த ஆப்ஸைப் பகிர்"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"முந்தையதற்கு மாறு"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"ஆப்ஸிற்கு இடையே மாறுதல்"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"உங்கள் IT நிர்வாகி தடுத்துள்ளார்"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"\'திரையைப் படமெடுத்தல்\' சாதனக் கொள்கையின்படி முடக்கப்பட்டுள்ளது"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"எல்லாவற்றையும் அழி"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"இந்தச் சாதனத்தில் சான்றிதழ் அங்கீகாரம் நிறுவப்பட்டுள்ளது. உங்களின் பாதுகாப்பான நெட்வொர்க் ட்ராஃபிக் கண்காணிக்கப்படலாம் அல்லது மாற்றப்படலாம்."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"உங்கள் நிர்வாகி, நெட்வொர்க் பதிவெடுத்தலை இயக்கியுள்ளார். இது சாதனத்தில் ட்ராஃபிக்கைக் கண்காணிக்கும்."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"உங்கள் நிர்வாகி \'நெட்வொர்க் பதிவெடுத்தலை\' இயக்கியுள்ளார், இது உங்கள் பணிக் கணக்கில் டிராஃபிக்கைக் கண்காணிக்கும். ஆனால் தனிப்பட்ட கணக்கில் கண்காணிக்காது."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"இந்தச் சாதனம் <xliff:g id="VPN_APP">%1$s</xliff:g> மூலம் இணையத்துடன் இணைக்கப்பட்டுள்ளது. உங்களின் நெட்வொர்க் செயல்பாட்டை (மின்னஞ்சல்கள், உலாவிய தரவு உட்பட) உங்கள் IT நிர்வாகியால் பார்க்க முடியும்."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"இந்தச் சாதனம் <xliff:g id="VPN_APP">%1$s</xliff:g> மூலம் இணையத்துடன் இணைக்கப்பட்டுள்ளது. உங்களின் நெட்வொர்க் செயல்பாட்டை (மின்னஞ்சல்கள், உலாவிய தரவு உட்பட) VPN வழங்குநரால் பார்க்க முடியும்."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"இந்தச் சாதனம் <xliff:g id="VPN_APP">%1$s</xliff:g> மூலம் இணையத்துடன் இணைக்கப்பட்டுள்ளது. உங்களின் நெட்வொர்க் செயல்பாட்டை (மின்னஞ்சல்கள், உலாவிய தரவு உட்பட) உங்கள் IT நிர்வாகியால் பார்க்க முடியும்."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"இந்தச் சாதனம் <xliff:g id="VPN_APP_0">%1$s</xliff:g>, <xliff:g id="VPN_APP_1">%2$s</xliff:g> ஆகியவை மூலம் இணையத்துடன் இணைக்கப்பட்டுள்ளது. உங்களின் நெட்வொர்க் செயல்பாட்டை (மின்னஞ்சல்கள், உலாவிய தரவு உட்பட) உங்கள் IT நிர்வாகியால் பார்க்க முடியும்."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"உங்கள் பணி ஆப்ஸ் <xliff:g id="VPN_APP">%1$s</xliff:g> மூலம் இணையத்துடன் இணைக்கப்பட்டுள்ளது. பணி ஆப்ஸில் உங்களின் நெட்வொர்க் செயல்பாட்டை (மின்னஞ்சல்கள், உலாவிய தரவு உட்பட) உங்கள் IT நிர்வாகியாலும் VPN வழங்குநராலும் பார்க்க முடியும்."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"உங்கள் தனிப்பட்ட ஆப்ஸ் <xliff:g id="VPN_APP">%1$s</xliff:g> மூலம் இணையத்துடன் இணைக்கப்பட்டுள்ளது. உங்களின் நெட்வொர்க் செயல்பாட்டை (மின்னஞ்சல்கள், உலாவிய தரவு உட்பட) உங்கள் VPN வழங்குநரால் பார்க்க முடியும்."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"முடக்கும்"</string>
     <string name="sound_settings" msgid="8874581353127418308">"ஒலி &amp; அதிர்வு"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"அமைப்புகள்"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"பாதுகாப்பான ஒலியளவிற்குக் குறைக்கப்பட்டது"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"பரிந்துரைக்கப்பட்டதை விட ஒலியளவு அதிகமாக உள்ளது"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"பாதுகாப்பான நிலைக்கு ஒலியளவு குறைக்கப்பட்டது"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"ஹெட்ஃபோன் ஒலியளவு பரிந்துரைக்கப்பட்டதைவிட அதிகளவில் நீண்ட நேரமாக உள்ளது"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"இந்த வாரம் ஹெட்ஃபோன் ஒலியளவு பாதுகாப்பு வரம்பைக் கடந்துவிட்டது"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"இவ்வாறே இருக்கட்டும்"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"ஒலியளவைக் குறை"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"ஆப்ஸ் பின் செய்யப்பட்டது"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"பொருத்தியதை அகற்றும் வரை இதைக் காட்சியில் வைக்கும். அகற்ற, முந்தையது மற்றும் மேலோட்டப் பார்வையைத் தொட்டுப் பிடிக்கவும்."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"இதற்கான பின்னை அகற்றும் வரை, இந்தப் பயன்முறை செயல்பாட்டிலேயே இருக்கும். அகற்றுவதற்கு, முந்தையது மற்றும் முகப்பு பட்டன்களைத் தொட்டுப் பிடிக்கவும்."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"பவர் மெனு"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"பக்கம் <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"லாக் ஸ்கிரீன்"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"வெப்பத்தினால் ஃபோன் ஆஃப் செய்யப்பட்டது"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"இப்போது உங்கள் மொபைல் இயல்புநிலையில் இயங்குகிறது.\nமேலும் தகவலுக்கு தட்டவும்"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"உங்கள் ஃபோன் அதிகமாகச் சூடானதால், அதன் சூட்டைக் குறைக்க, ஆஃப் செய்யப்பட்டது. இப்போது உங்கள் ஃபோன் இயல்புநிலையில் இயங்குகிறது.\n\nபின்வருவனவற்றைச் செய்தால், ஃபோன் சூடாகலாம்:\n	• அதிகளவு தரவைப் பயன்படுத்தும் ஆப்ஸை (எ.கா: கேமிங், வீடியோ (அ) வழிகாட்டுதல் ஆப்ஸ்) பயன்படுத்துவது\n	• பெரிய ஃபைல்களைப் பதிவிறக்குவது/பதிவேற்றுவது\n	• அதிக வெப்பநிலையில் ஃபோனைப் பயன்படுத்துவது"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"மேலும் விவரங்களுக்கு இதைப் பார்க்கவும்"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"மொபைல் சூடாகிறது"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"மொபைலின் வெப்ப அளவு குறையும் வரை சில அம்சங்களைப் பயன்படுத்த முடியாது.\nமேலும் தகவலுக்கு தட்டவும்"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"உங்கள் மொபைலின் வெப்ப அளவு தானாகவே குறையும். தொடர்ந்து நீங்கள் மொபைலைப் பயன்படுத்தலாம், ஆனால் அதன் வேகம் குறைவாக இருக்கக்கூடும்.\n\nமொபைலின் வெப்ப அளவு குறைந்தவுடன், அது இயல்பு நிலையில் இயங்கும்."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"மேலும் விவரங்களுக்கு இதைப் பார்க்கவும்"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"சாதன இணைப்பைத் துண்டித்தல்"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"சார்ஜிங் போர்ட்டிற்கு அருகே உங்கள் சாதனம் சூடாகிறது. சார்ஜருடனோ USB உபகரணத்துடனோ சாதனம் இணைக்கப்பட்டிருந்தால் அதன் இணைப்பைத் துண்டிக்கவும். கேபிளும் சூடாக இருக்கக்கூடும் என்பதால் கவனத்துடன் கையாளவும்."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"முழுத்திரையைப் பெரிதாக்கும்"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"திரையின் ஒரு பகுதியைப் பெரிதாக்கும்"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"பெரிதாக்கல் அமைப்புகளைத் திற"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"பெரிதாக்கல் அமைப்புகளை மூடுக"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"அளவை மாற்ற மூலையை இழுக்கவும்"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"குறுக்கே ஸ்க்ரோல் செய்வதை அனுமதி"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"அளவை மாற்று"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"பிடித்தவற்றிலிருந்து நீக்க இருமுறை தட்டவும்"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>ம் நிலைக்கு நகர்த்து"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"கட்டுப்பாடுகள்"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"விரைவாக அணுக சாதனக் கட்டுப்பாடுகளைத் தேர்ந்தெடுங்கள்"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"கட்டுப்பாடுகளை மறுவரிசைப்படுத்த அவற்றைப் பிடித்து இழுக்கவும்"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"கட்டுப்பாடுகள் அனைத்தும் அகற்றப்பட்டன"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"மாற்றங்கள் சேமிக்கப்படவில்லை"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"வேறு பின்னைப் பயன்படுத்தவும்"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> ஐ மாற்றுவதை உறுதிப்படுத்தவும்"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"மேலும் பார்க்க ஸ்வைப் செய்யவும்"</string>
+    <string name="retry_face" msgid="416380073082560186">"முக அங்கீகரிப்பை மீண்டும் முயலலாம்"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"பரிந்துரைகளை ஏற்றுகிறது"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"மீடியா"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸுக்கான இந்த மீடியா கட்டுப்பாடுகளை மறைக்கவா?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"அமைப்புகள்"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> இன் <xliff:g id="SONG_NAME">%1$s</xliff:g> பாடல் <xliff:g id="APP_LABEL">%3$s</xliff:g> ஆப்ஸில் பிளேயாகிறது"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> / <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> இயங்கிக் கொண்டிருக்கிறது"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"பிளே செய்"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"இடைநிறுத்து"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"முந்தைய டிராக்"</string>
@@ -951,7 +977,7 @@
     <string name="controls_error_generic" msgid="352500456918362905">"நிலையைக் காட்ட முடியவில்லை"</string>
     <string name="controls_error_failed" msgid="960228639198558525">"பிழை, மீண்டும் முயலவும்"</string>
     <string name="controls_menu_add" msgid="4447246119229920050">"கட்டுப்பாடுகளைச் சேர்த்தல்"</string>
-    <string name="controls_menu_edit" msgid="890623986951347062">"கட்டுப்பாடுகளை மாற்றுதல்"</string>
+    <string name="controls_menu_edit" msgid="890623986951347062">"கட்டுப்பாடுகளை மாற்றுக"</string>
     <string name="controls_menu_add_another_app" msgid="8661172304650786705">"ஆப்ஸைச் சேர்"</string>
     <string name="controls_menu_remove" msgid="3006525275966023468">"ஆப்ஸை அகற்று"</string>
     <string name="media_output_dialog_add_output" msgid="5642703238877329518">"அவுட்புட்களைச் சேர்த்தல்"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"ஸ்பீக்கர்கள் &amp; டிஸ்ப்ளேக்கள்"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"பரிந்துரைக்கப்படும் சாதனங்கள்"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"மீடியாவை வேறொரு சாதனத்திற்கு மாற்ற \'பகிரப்படும் அமர்வை\' நிறுத்தவும்"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"நிறுத்து"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"பிராட்காஸ்ட் எவ்வாறு செயல்படுகிறது?"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"பிராட்காஸ்ட்"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"நீங்கள் பிராட்காஸ்ட் செய்யும் மீடியாவை அருகிலுள்ளவர்கள் இணக்கமான புளூடூத் சாதனங்கள் மூலம் கேட்கலாம்"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"சேமிக்க முடியவில்லை. மீண்டும் முயலவும்."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"சேமிக்க முடியவில்லை."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"குறைந்தது 4 எழுத்துகளைப் பயன்படுத்துங்கள்"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"16 எழுத்துகளுக்குக் குறைவாகப் பயன்படுத்துங்கள்"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g> எழுத்துகளுக்குக் குறைவாகப் பயன்படுத்துங்கள்"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"பதிப்பு எண்"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"பதிப்பு எண் கிளிப்போர்டுக்கு நகலெடுக்கப்பட்டது."</string>
     <string name="basic_status" msgid="2315371112182658176">"திறந்தநிலை உரையாடல்"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"பேட்டரி அளவை அறிவதில் சிக்கல்"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"மேலும் தகவல்களுக்கு தட்டவும்"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"அலாரம் எதுவுமில்லை"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"திரைப் பூட்டை உள்ளிடலாம்"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"கைரேகை சென்சார்"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"அங்கீகரி"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"சாதனத்தைத் திற"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant கேட்டுக்கொண்டிருக்கிறது"</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="note_task_button_label" msgid="8718616095800343136">"குறிப்பெடுத்தல்"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"குறிப்பெடுத்தல்"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"குறிப்பெடுத்தல், <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"மேலும் அறிக"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"மேலும் அறிக: <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> ஆப்ஸைத் திற"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• இந்த ஆப்ஸ் அமைக்கப்பட்டிருக்க வேண்டும்"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Walletடில் குறைந்தபட்சம் ஒரு கார்டாவது சேர்க்கப்பட்டிருக்க வேண்டும்"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• கேமரா ஆப்ஸ் நிறுவப்பட்டிருக்க வேண்டும்"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• இந்த ஆப்ஸ் அமைக்கப்பட்டிருக்க வேண்டும்"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• குறைந்தபட்சம் ஒரு சாதனமாவது கிடைக்க வேண்டும்"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Wallet ஆப்ஸை ஷார்ட்கட்டாகச் சேர்க்க, அந்த ஆப்ஸ் நிறுவப்பட்டுள்ளதை உறுதிசெய்துகொள்ளவும்"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Wallet ஆப்ஸை ஷார்ட்கட்டாகச் சேர்க்க, அதில் குறைந்தது ஒரு கார்டாவது சேர்க்கப்பட்டுள்ளதை உறுதிசெய்துகொள்ளவும்"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR குறியீடு ஸ்கேனரை ஷார்ட்கட்டாகச் சேர்க்க, கேமரா ஆப்ஸ் நிறுவப்பட்டுள்ளதை உறுதிசெய்துகொள்ளவும்"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home ஆப்ஸை ஷார்ட்கட்டாகச் சேர்க்க, அந்த ஆப்ஸ் நிறுவப்பட்டுள்ளதை உறுதிசெய்துகொள்ளவும்"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• குறைந்தபட்சம் ஒரு சாதனமாவது இருக்கிறது"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"குறிப்பெடுத்தல் ஷார்ட்கட்டைப் பயன்படுத்த, குறிப்பெடுப்பதற்கான இயல்புநிலை ஆப்ஸைத் தேர்ந்தெடுக்கவும்"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"ஆப்ஸைத் தேர்ந்தெடு"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"ஷார்ட்கட்டை தொட்டுப் பிடிக்கவும்"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"ரத்துசெய்"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"இப்போது திரைகளை மாற்றவா?"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"உங்கள் ஸ்டைலஸைச் சார்ஜருடன் இணையுங்கள்"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"ஸ்டைலஸின் பேட்டரி குறைவாக உள்ளது"</string>
     <string name="video_camera" msgid="7654002575156149298">"வீடியோ கேமரா"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"இந்தக் கணக்கிலிருந்து அழைக்க முடியாது"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"உங்கள் பணிக் கொள்கையின்படி நீங்கள் பணிக் கணக்கில் இருந்து மட்டுமே ஃபோன் அழைப்புகளைச் செய்ய முடியும்"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"தனிப்பட்ட ஆப்ஸில் இருந்து அழைக்க முடியாது"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"உங்கள் நிறுவனம் பணி ஆப்ஸில் இருந்து மட்டுமே அழைக்க உங்களை அனுமதிக்கிறது"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"பணிக் கணக்கிற்கு மாறு"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"மூடுக"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"பணி மொபைல் ஆப்ஸை நிறுவு"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"ரத்துசெய்"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"பூட்டுத் திரையை பிரத்தியேகமாக்கு"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"பூட்டுத் திரையைப் பிரத்தியேகப்படுத்த அன்லாக் செய்யுங்கள்"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"வைஃபை கிடைக்கவில்லை"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"கேமரா தடுக்கப்பட்டுள்ளது"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"கேமராவும் மைக்ரோஃபோனும் தடுக்கப்பட்டுள்ளன"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"மைக்ரோஃபோன் தடுக்கப்பட்டுள்ளது"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"முன்னுரிமைப் பயன்முறை இயக்கத்தில் உள்ளது"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"அசிஸ்டண்ட்டின் கவனம் இயக்கத்தில் உள்ளது"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"குறிப்பு எடுப்பதற்கான இயல்புநிலை ஆப்ஸை அமைப்புகளில் அமையுங்கள்"</string>
+    <string name="install_app" msgid="5066668100199613936">"ஆப்ஸை நிறுவுங்கள்"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"மைக்ரோஃபோனும் கேமராவும்"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"சமீபத்திய ஆப்ஸ் பயன்பாடு"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"சமீபத்திய அணுகலைக் காட்டு"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"முடிந்தது"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"விருப்பங்களை விரிவாக்கிக் காட்டும்"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"சுருக்கும்"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"இந்த ஆப்ஸை மூடு"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> மூடப்பட்டது"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"சேவையை நிர்வகியுங்கள்"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"அணுகலை நிர்வகியுங்கள்"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"மொபைல் அழைப்பால் பயன்படுத்தப்படுகிறது"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"மொபைல் அழைப்பால் சமீபத்தில் பயன்படுத்தப்பட்டது"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸால் பயன்படுத்தப்படுகிறது"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸால் சமீபத்தில் பயன்படுத்தப்பட்டது"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ஆப்ஸால் பயன்படுத்தப்படுகிறது"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ஆப்ஸால் சமீபத்தில் பயன்படுத்தப்பட்டது"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ஆப்ஸால் பயன்படுத்தப்படுகிறது"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ஆப்ஸால் சமீபத்தில் பயன்படுத்தப்பட்டது"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ta/strings_tv.xml b/packages/SystemUI/res/values-ta/strings_tv.xml
deleted file mode 100644
index 3e0baf6..0000000
--- a/packages/SystemUI/res/values-ta/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN இணைக்கப்பட்டது"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN துண்டிக்கப்பட்டது"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> வழியாக"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"அறிவிப்புகள்"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"அறிவிப்புகள் எதுவுமில்லை"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"மைக்ரோஃபோன் ரெக்கார்டு செய்கிறது"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"கேமரா ரெக்கார்டு செய்கிறது"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"கேமராவும் மைக்ரோஃபோனும் ரெக்கார்டு செய்கின்றன"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"மைக்ரோஃபோன் ரெக்கார்டு செய்வதை நிறுத்திவிட்டது"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"கேமரா ரெக்கார்டு செய்வதை நிறுத்திவிட்டது"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"கேமராவும் மைக்ரோஃபோனும் ரெக்கார்டு செய்வதை நிறுத்திவிட்டன"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"ஸ்கிரீன் ரெக்கார்டிங் தொடங்கியது"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"ஸ்கிரீன் ரெக்கார்டிங் நிறுத்தப்பட்டது"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index 8ada2ee..f501d32 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -69,14 +69,14 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USBని ప్రారంభించండి"</string>
     <string name="learn_more" msgid="4690632085667273811">"మరింత తెలుసుకోండి"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"స్క్రీన్‌షాట్"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"అన్‌లాక్‌ను పొడిగించడం డిజేబుల్ చేయబడింది"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"ఎక్స్‌టెండ్ అన్‌లాక్ డిజేబుల్ చేయబడింది"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ఇమేజ్‌ను పంపారు"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"స్క్రీన్‌షాట్‌ను సేవ్ చేస్తోంది…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"స్క్రీన్‌షాట్‌ను వర్క్ ప్రొఫైల్‌కు సేవ్ చేస్తోంది…"</string>
     <string name="screenshot_saved_title" msgid="8893267638659083153">"స్క్రీన్‌షాట్ సేవ్ చేయబడింది"</string>
     <string name="screenshot_failed_title" msgid="3259148215671936891">"స్క్రీన్‌షాట్‌ని సేవ్ చేయడం సాధ్యం కాలేదు"</string>
     <string name="screenshot_failed_to_save_user_locked_text" msgid="6156607948256936920">"స్క్రీన్‌షాట్ సేవ్ అవ్వకముందే పరికరం అన్‌లాక్ చేయబడాలి"</string>
-    <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"స్క్రీన్‌షాట్ తీయడానికి మళ్లీ ప్రయత్నించండి"</string>
+    <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"స్క్రీన్‌షాట్ తీయడానికి మళ్లీ ట్రై చేయండి"</string>
     <string name="screenshot_failed_to_save_text" msgid="7232739948999195960">"స్క్రీన్‌షాట్‌ను సేవ్ చేయడం సాధ్యపడలేదు"</string>
     <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"స్క్రీన్‌షాట్‌లు తీయడానికి యాప్ లేదా మీ సంస్థ అనుమతించలేదు"</string>
     <string name="screenshot_blocked_by_admin" msgid="5486757604822795797">"స్క్రీన్‌షాట్‌లు తీయడాన్ని మీ IT అడ్మిన్ బ్లాక్ చేశారు"</string>
@@ -96,31 +96,31 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g>, ఈ స్క్రీన్‌షాట్‌ను గుర్తించింది."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g>, ఇతర ఓపెన్ యాప్‌లు ఈ స్క్రీన్‌షాట్‌ను గుర్తించాయి."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"గమనికకు జోడించండి"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"స్క్రీన్ రికార్డర్"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"స్క్రీన్ రికార్డర్"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"స్క్రీన్ రికార్డింగ్ అవుతోంది"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"స్క్రీన్ రికార్డ్ సెషన్ కోసం ఆన్‌గోయింగ్ నోటిఫికేషన్"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"రికార్డింగ్‌ను ప్రారంభించాలా?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"రికార్డ్ చేస్తున్నప్పుడు, Android సిస్టమ్ మీ స్క్రీన్‌పై ప్రదర్శించబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన ఏ సున్నితమైన సమాచారాన్నయినా క్యాప్చర్ చేయగలదు. ఈ సమాచారంలో పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, ఫోటోలు, మెసేజ్‌లు, ఆడియో కూడా ఉంటాయి."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"ఫుల్ స్క్రీన్ రికార్డ్ చేయండి"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"సింగిల్ యాప్ రికార్డ్ చేయండి"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"మీరు రికార్డ్ చేసేటప్పుడు, మీ స్క్రీన్‌పై కనిపించే దేనికైనా లేదా మీ పరికరంలో ప్లే అయిన దేనికైనా Androidకు యాక్సెస్ ఉంటుంది. కాబట్టి, పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, మెసేజ్‌లు, లేదా ఏదైనా ఇతర సున్నితమైన సమాచారం పట్ల జాగ్రత్త వహించండి."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"మీరు యాప్‌ను రికార్డ్ చేసేటప్పుడు, ఆ యాప్‌లో చూపబడిన దేనికైనా లేదా ప్లే అయిన దేనికైనా Androidకు యాక్సెస్ ఉంటుంది. కాబట్టి, పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, మెసేజ్‌లు, లేదా ఏదైనా ఇతర సున్నితమైన సమాచారం పట్ల జాగ్రత్త వహించండి."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"రికార్డింగ్‌ను ప్రారంభించండి"</string>
-    <string name="screenrecord_audio_label" msgid="6183558856175159629">"ఆడియోను రికార్డ్ చేయి"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"రికార్డింగ్‌ను ప్రారంభించాలా?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"మీరు రికార్డ్ చేసేటప్పుడు, మీ స్క్రీన్‌పై కనిపించే దేనికైనా లేదా మీ పరికరంలో ప్లే అయిన దేనికైనా Androidకు యాక్సెస్ ఉంటుంది. కాబట్టి పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, మెసేజ్‌లు, ఫోటోలు, ఆడియో, ఇంకా వీడియో వంటి విషయాల్లో జాగ్రత్త వహించండి."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"మీరు ఏదైనా యాప్‌ను రికార్డ్ చేసేటప్పుడు, ఆ యాప్‌లో చూపబడిన దేనికైనా లేదా ప్లే అయిన దేనికైనా Androidకు యాక్సెస్ ఉంటుంది. కాబట్టి పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, మెసేజ్‌లు, ఫోటోలు, ఆడియో, ఇంకా వీడియో వంటి విషయాల్లో జాగ్రత్త వహించండి."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"రికార్డింగ్‌ను ప్రారంభించండి"</string>
+    <string name="screenrecord_audio_label" msgid="6183558856175159629">"ఆడియోను రికార్డ్ చేయండి"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"పరికరం ఆడియో"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"మీ పరికరం నుండి వచ్చే మ్యూజిక్, కాల్స్‌, రింగ్‌టోన్‌ల వంటి ధ్వనులు"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"మైక్రోఫోన్"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"పరికరం ఆడియో, మైక్రోఫోన్"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"ప్రారంభించండి"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"ప్రారంభించండి"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"స్క్రీన్ రికార్డింగ్ చేయబడుతోంది"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"స్క్రీన్, ఆడియో రికార్డింగ్ చేయబడుతున్నాయి"</string>
-    <string name="screenrecord_taps_label" msgid="1595690528298857649">"స్క్రీన్‌పై తాకే స్థానాలను చూపు"</string>
+    <string name="screenrecord_taps_label" msgid="1595690528298857649">"స్క్రీన్‌పై తాకే స్థానాలను చూపండి"</string>
     <string name="screenrecord_stop_label" msgid="72699670052087989">"ఆపివేయి"</string>
     <string name="screenrecord_share_label" msgid="5025590804030086930">"షేర్ చేయి"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"స్క్రీన్ రికార్డింగ్ సేవ్ చేయబడింది"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"చూడటానికి ట్యాప్ చేయండి"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"స్క్రీన్ రికార్డింగ్‌ని తొలగిస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"స్క్రీన్ రికార్డింగ్‌ను సేవ్ చేయడంలో ఎర్రర్ ఏర్పడింది"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"స్క్రీన్ రికార్డింగ్ ప్రారంభించడంలో ఎర్రర్ ఏర్పడింది"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"ఫుల్ స్క్రీన్‌లో చూస్తున్నారు"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"నిష్క్రమించడానికి, పై నుండి కిందికి స్వైప్ చేయండి."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"సరే"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"వెనుకకు"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"హోమ్"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"మెనూ"</string>
@@ -135,29 +135,30 @@
     <string name="accessibility_unlock_button" msgid="3613812140816244310">"అన్‌లాక్ చేయబడింది"</string>
     <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="accessibility_send_smart_reply" msgid="8885032190442015141">"పంపండి"</string>
     <string name="cancel" msgid="1089011503403416730">"రద్దు చేయండి"</string>
-    <string name="biometric_dialog_confirm" msgid="2005978443007344895">"నిర్ధారించు"</string>
-    <string name="biometric_dialog_try_again" msgid="8575345628117768844">"మళ్లీ ప్రయత్నించు"</string>
+    <string name="biometric_dialog_confirm" msgid="2005978443007344895">"నిర్ధారించండి"</string>
+    <string name="biometric_dialog_try_again" msgid="8575345628117768844">"మళ్లీ ట్రై చేయండి"</string>
     <string name="biometric_dialog_empty_space_description" msgid="3330555462071453396">"ప్రామాణీకరణను రద్దు చేయడానికి నొక్కండి"</string>
     <string name="biometric_dialog_face_icon_description_idle" msgid="4351777022315116816">"దయచేసి మళ్ళీ ప్రయత్నించండి"</string>
     <string name="biometric_dialog_face_icon_description_authenticating" msgid="3401633342366146535">"మీ ముఖాన్ని క్యాప్చర్ చేస్తోంది"</string>
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"ముఖం ప్రామాణీకరించబడింది"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"నిర్ధారించబడింది"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"పూర్తి చేయడానికి \"నిర్ధారించు\" నొక్కండి"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ముఖం ద్వారా అన్‌లాక్ చేయబడింది. కొనసాగించడానికి అన్‌లాక్ చిహ్నాన్ని నొక్కండి."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"ముఖం ద్వారా అన్‌లాక్ చేయబడింది"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ముఖం ద్వారా అన్‌లాక్ చేయబడింది. కొనసాగించడానికి నొక్కండి."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"ముఖం గుర్తించబడింది. కొనసాగించడానికి నొక్కండి."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"ముఖం గుర్తించబడింది. కొనసాగడానికి అన్‌లాక్ చిహ్నం నొక్కండి."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ప్రామాణీకరించబడింది"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"ప్రామాణీకరణను రద్దు చేయండి"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"పిన్‌ను ఉపయోగించండి"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ఆకృతిని ఉపయోగించండి"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"పాస్‌వర్డ్‌ను ఉపయోగించండి"</string>
-    <string name="biometric_dialog_wrong_pin" msgid="1878539073972762803">"పిన్ తప్పు"</string>
+    <string name="biometric_dialog_wrong_pin" msgid="1878539073972762803">"PIN తప్పు"</string>
     <string name="biometric_dialog_wrong_pattern" msgid="8954812279840889029">"ఆకృతి తప్పు"</string>
     <string name="biometric_dialog_wrong_password" msgid="69477929306843790">"పాస్‌వర్డ్ తప్పు"</string>
-    <string name="biometric_dialog_credential_too_many_attempts" msgid="3083141271737748716">"చాలా ఎక్కువ తప్పు ప్రయత్నాలు చేశారు.\n<xliff:g id="NUMBER">%d</xliff:g> సెకన్ల తర్వాత మళ్లీ ప్రయత్నించండి."</string>
-    <string name="biometric_dialog_credential_attempts_before_wipe" msgid="6751859711975516999">"మళ్లీ ప్రయత్నించండి. <xliff:g id="MAX_ATTEMPTS">%2$d</xliff:g>లో <xliff:g id="ATTEMPTS_0">%1$d</xliff:g> ప్రయత్నం చేశారు."</string>
+    <string name="biometric_dialog_credential_too_many_attempts" msgid="3083141271737748716">"చాలా ఎక్కువ తప్పు ప్రయత్నాలు చేశారు.\n<xliff:g id="NUMBER">%d</xliff:g> సెకన్ల తర్వాత మళ్లీ ట్రై చేయండి."</string>
+    <string name="biometric_dialog_credential_attempts_before_wipe" msgid="6751859711975516999">"మళ్లీ ట్రై చేయండి. <xliff:g id="MAX_ATTEMPTS">%2$d</xliff:g>లో <xliff:g id="ATTEMPTS_0">%1$d</xliff:g> ప్రయత్నం చేశారు."</string>
     <string name="biometric_dialog_last_attempt_before_wipe_dialog_title" msgid="2874250099278693477">"మీ డేటా తొలగించబడుతుంది"</string>
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_device" msgid="6562299244825817598">"మీరు ఒకవేళ తర్వాతి ప్రయత్నంలో తప్పు ఆకృతిని ఎంటర్ చేస్తే, ఈ పరికరం యొక్క డేటా తొలగించబడుతుంది."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_device" msgid="9151756675698215723">"మీరు ఒకవేళ తర్వాతి ప్రయత్నంలో తప్పు పిన్‌ను ఎంటర్ చేస్తే, ఈ పరికరం యొక్క డేటా తొలగించబడుతుంది."</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"మీరు ఒకవేళ తర్వాతి ప్రయత్నంలో తప్పు ఆకృతిని ఎంటర్ చేస్తే, మీ కార్యాలయ ప్రొఫైల్, అలాగే దాని డేటా తొలగించబడతాయి."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"మీరు ఒకవేళ తర్వాతి ప్రయత్నంలో తప్పు పిన్‌ను ఎంటర్ చేస్తే, మీ కార్యాలయ ప్రొఫైల్, అలాగే దాని డేటా తొలగించబడతాయి."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"మీరు ఒకవేళ తర్వాతి ప్రయత్నంలో తప్పు పాస్‌వర్డ్‌ను ఎంటర్ చేస్తే, మీ కార్యాలయ ప్రొఫైల్, అలాగే దాని డేటా తొలగించబడతాయి."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"సెటప్ చేయండి"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"ఇప్పుడు కాదు"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"సెక్యూరిటీని, పనితీరును మెరుగుపరచడానికి దీనిని సెటప్ చేయడం అవసరం"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"వేలిముద్ర అన్‌లాక్‌ను మళ్లీ సెటప్ చేయండి"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"వేలిముద్ర అన్‌లాక్"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"వేలిముద్ర అన్‌లాక్‌ను సెటప్ చేయండి"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"వేలిముద్ర అన్‌లాక్‌ను మళ్లీ సెటప్ చేయడానికి, మీ ప్రస్తుత వేలిముద్ర ఇమేజ్‌లను, మోడల్స్‌ను తొలగించడం జరుగుతుంది.\n\nవాటిని తొలగించిన తర్వాత, మీ ఫోన్‌ను అన్‌లాక్ చేయడానికి లేదా అది మీరేనని వెరిఫై చేసేందుకు మీ వేలిముద్రను ఉపయోగించడానికి మీరు ఫింగర్‌ప్రింట్ అన్‌లాక్‌ను మళ్లీ సెటప్ చేయాల్సి ఉంటుంది."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"ఫింగర్‌ప్రింట్ అన్‌లాక్‌ను మళ్లీ సెటప్ చేయడానికి, మీ ప్రస్తుత వేలిముద్ర ఇమేజ్‌లను, మోడల్‌ను తొలగించడం జరుగుతుంది.\n\nవాటిని తొలగించిన తర్వాత, మీ ఫోన్‌ను అన్‌లాక్ చేయడానికి లేదా అది మీరేనని వెరిఫై చేసేందుకు మీ వేలిముద్రను ఉపయోగించడానికి మీరు ఫింగర్‌ప్రింట్ అన్‌లాక్‌ను మళ్లీ సెటప్ చేయాల్సి ఉంటుంది."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"వేలిముద్ర అన్‌లాక్‌ను సెటప్ చేయడం సాధ్యపడలేదు. సెట్టింగ్‌లకు వెళ్లి, ఆపై మళ్లీ ట్రై చేయండి."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"ఫేస్ అన్‌లాక్‌ను మళ్లీ సెటప్ చేయండి"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"ఫేస్ అన్‌లాక్"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"ఫేస్ అన్‌లాక్‌ను సెటప్ చేయండి"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"ఫేస్ అన్‌లాక్‌ను మళ్లీ సెటప్ చేయడానికి, మీ ప్రస్తుత ఫేస్ మోడల్‌ను తొలగించడం జరుగుతుంది.\n\nమీ ఫోన్‌ను అన్‌లాక్ చేసేందుకు మీ ముఖాన్ని ఉపయోగించడానికి మీరు ఈ ఫీచర్‌ను మళ్లీ సెటప్ చేయాల్సి ఉంటుంది."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"ఫేస్ అన్‌లాక్‌ను సెటప్ చేయడం సాధ్యపడలేదు. సెట్టింగ్‌లకు వెళ్లి, ఆపై మళ్లీ ట్రై చేయండి."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"వేలిముద్ర సెన్సార్‌ను తాకండి"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"కొనసాగించడానికి అన్‌లాక్ చిహ్నాన్ని నొక్కండి"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"ముఖం గుర్తించలేము. బదులుగా వేలిముద్ర ఉపయోగించండి."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ఆడియో"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"హెడ్‌సెట్"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ఇన్‌పుట్"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"వినికిడి పరికరాలు"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"వినికిడి పరికరాలు"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ఆన్ చేస్తోంది…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ఆటో-రొటేట్‌"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"స్క్రీన్ ఆటో-రొటేట్‌"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"ముఖం ద్వారా అన్‌లాక్ చేయబడింది"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"ముఖం గుర్తించబడింది"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"మళ్ళీ ప్రయత్నించడానికి పైకి స్వైప్ చేయండి"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"ఫేస్ అన్‌లాక్‌ను మళ్లీ ట్రై చేయడానికి పైకి స్వైప్ చేయండి"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFCని ఉపయోగించడానికి అన్‌లాక్ చేయండి"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"ఈ పరికరం మీ సంస్థకు చెందినది"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"ఈ పరికరం <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>కు చెందినది"</string>
@@ -378,24 +395,33 @@
     <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>
-    <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_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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"రికార్డ్ చేస్తున్నప్పుడు లేదా ప్రసారం చేస్తున్నప్పుడు, మీ స్క్రీన్‌పై ప్రదర్శించబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన సమాచారం మొత్తాన్ని, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> యాక్సెస్ చేయగలుగుతుంది. ఈ సమాచారంలో, పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, ఫోటోలు, మెసేజ్‌లు, మీరు ప్లే చేసే ఆడియో వంటివి ఉంటాయి."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"రికార్డ్ చేస్తున్నప్పుడు లేదా ప్రసారం చేస్తున్నప్పుడు మీ స్క్రీన్‌పై ప్రదర్శించబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన సమాచారం మొత్తాన్ని, ఈ ఫంక్షన్‌ను అందిస్తున్న సర్వీస్ యాక్సెస్ చేయగలదు. ఈ సమాచారంలో, పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, ఫోటోలు,  మెసేజ్‌లు, మీరు ప్లే చేసే ఆడియో వంటివి ఉంటాయి."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"రికార్డ్ చేయడం లేదా ప్రసారం చేయడం ప్రారంభించాలా?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>తో రికార్డ్ చేయడం లేదా ప్రసారం చేయడం ప్రారంభించాలా?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"షేర్ చేయడానికి లేదా రికార్డ్ చేయడానికి <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‌ను అనుమతించాలా?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"ఫుల్-స్క్రీన్"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"సింగిల్ యాప్"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"మీరు షేర్ చేస్తున్నప్పుడు, రికార్డ్ చేస్తున్నప్పుడు, లేదా ప్రసారం చేస్తున్నప్పుడు, మీ స్క్రీన్‌పై కనిపించే దేనికైనా లేదా మీ పరికరంలో ప్లే అయిన దేనికైనా <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‌కు యాక్సెస్ ఉంటుంది. కాబట్టి, పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, మెసేజ్‌లు, లేదా ఏదైనా ఇతర సున్నితమైన సమాచారం పట్ల జాగ్రత్త వహించండి."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"మీరు ఏదైనా యాప్‌ను షేర్ చేస్తున్నప్పుడు, రికార్డ్ చేస్తున్నప్పుడు, లేదా ప్రసారం చేస్తున్నప్పుడు, ఆ యాప్‌లో చూపబడిన దేనికైనా లేదా ప్లే అయిన దేనికైనా <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‌కు యాక్సెస్ ఉంటుంది. కాబట్టి, పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, మెసేజ్‌లు, లేదా ఏదైనా ఇతర సున్నితమైన సమాచారం పట్ల జాగ్రత్త వహించండి."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"కొనసాగించండి"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"యాప్‌ను షేర్ చేయండి లేదా రికార్డ్ చేయండి"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"షేర్ చేయడానికి లేదా రికార్డ్ చేయడానికి ఈ యాప్‌ను అనుమతించాలా?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"మీరు షేర్ చేస్తున్నప్పుడు, రికార్డ్ చేస్తున్నప్పుడు, లేదా ప్రసారం చేస్తున్నప్పుడు, ఈ యాప్ మీ స్క్రీన్‌పై కనిపించే దేనికైనా లేదా మీ పరికరంలో ప్లే అయిన దేనికైనా యాక్సెస్‌ను కలిగి ఉంటుంది. కాబట్టి, పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, మెసేజ్‌లు, లేదా ఏదైనా ఇతర సున్నితమైన సమాచారం పట్ల జాగ్రత్త వహించండి."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"మీరు ఏదైనా యాప్‌ను షేర్ చేస్తున్నప్పుడు, రికార్డ్ చేస్తున్నప్పుడు, లేదా ప్రసారం చేస్తున్నప్పుడు, ఆ యాప్‌లో చూపబడిన దేనికైనా లేదా ప్లే అయిన దేనికైనా ఈ యాప్ యాక్సెస్‌ను కలిగి ఉంటుంది. కాబట్టి, పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, మెసేజ్‌లు, లేదా ఏదైనా ఇతర సున్నితమైన సమాచారం పట్ల జాగ్రత్త వహించండి."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"రికార్డ్ చేస్తున్నప్పుడు లేదా ప్రసారం చేస్తున్నప్పుడు, మీ స్క్రీన్‌పై కనిపించే సమాచారం లేదా మీ పరికరం నుండి ప్లే చేయబడిన ఏదైనా మీడియాకు సంబంధించిన సమాచారం మొత్తాన్ని, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> యాక్సెస్ చేయగలుగుతుంది. ఈ సమాచారంలో, పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, ఫోటోలు, మెసేజ్‌లు, మీరు ప్లే చేసే ఆడియో వంటివి ఉంటాయి."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"రికార్డ్ చేయడం లేదా ప్రసారం చేయడం ప్రారంభించాలా?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"రికార్డ్ చేస్తున్నప్పుడు లేదా ప్రసారం చేస్తున్నప్పుడు మీ స్క్రీన్‌పై చూపబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన సమాచారం మొత్తాన్ని, ఈ ఫంక్షన్‌ను అందిస్తున్న సర్వీస్ యాక్సెస్ చేయగలదు. ఈ సమాచారంలో, పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, ఫోటోలు, మెసేజ్‌లు, మీరు ప్లే చేసే ఆడియో వంటివి ఉంటాయి."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"ఫుల్-స్క్రీన్"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"సింగిల్ యాప్"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"యాప్‌ను షేర్ చేయండి లేదా రికార్డ్ చేయండి"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‌తో రికార్డ్ చేయడం లేదా ప్రసారం చేయడం ప్రారంభించాలా?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"మీరు షేర్ చేస్తున్నప్పుడు, రికార్డ్ చేస్తున్నప్పుడు, లేదా ప్రసారం చేస్తున్నప్పుడు, మీ స్క్రీన్‌పై కనిపించే దేనికైనా లేదా మీ పరికరంలో ప్లే అయిన దేనికైనా <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‌కు యాక్సెస్ ఉంటుంది. కాబట్టి పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, మెసేజ్‌లు, ఫోటోలు, ఆడియో, ఇంకా వీడియో వంటి విషయాల్లో జాగ్రత్త వహించండి."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"మీరు ఏదైనా యాప్‌ను షేర్ చేస్తున్నప్పుడు, రికార్డ్ చేస్తున్నప్పుడు, లేదా ప్రసారం చేస్తున్నప్పుడు, ఆ యాప్‌లో చూపబడిన దేనికైనా లేదా ప్లే అయిన దేనికైనా <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‌కు యాక్సెస్ ఉంటుంది. కాబట్టి పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, మెసేజ్‌లు, ఫోటోలు, ఆడియో, ఇంకా వీడియో వంటి విషయాల్లో జాగ్రత్త వహించండి."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"ప్రారంభించండి"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"ప్రసారాన్ని ప్రారంభించాలా?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"మీరు ప్రసారం చేసేటప్పుడు, మీ స్క్రీన్‌పై కనిపించే దేనికైనా లేదా మీ పరికరంలో ప్లే అయిన దేనికైనా Androidకు యాక్సెస్ ఉంటుంది. కాబట్టి పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, మెసేజ్‌లు, ఫోటోలు, ఆడియో, ఇంకా వీడియో వంటి విషయాల్లో జాగ్రత్త వహించండి."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"మీరు ఏదైనా యాప్‌ను ప్రసారం చేసేటప్పుడు, ఆ యాప్‌లో చూపబడిన దేనికైనా లేదా ప్లే అయిన దేనికైనా Androidకు యాక్సెస్ ఉంటుంది. కాబట్టి పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, మెసేజ్‌లు, ఫోటోలు, ఆడియో, ఇంకా వీడియో వంటి విషయాల్లో జాగ్రత్త వహించండి."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"ప్రసారాన్ని ప్రారంభించండి"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"షేర్ చేయడాన్ని ప్రారంభించాలా?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"మీరు షేర్ చేస్తున్నప్పుడు, రికార్డ్ చేస్తున్నప్పుడు, లేదా ప్రసారం చేస్తున్నప్పుడు, మీ స్క్రీన్‌పై కనిపించే దేనికైనా లేదా మీ పరికరంలో ప్లే అయిన దేనికైనా Androidకు యాక్సెస్ ఉంటుంది. కాబట్టి పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, మెసేజ్‌లు, ఫోటోలు, ఆడియో, ఇంకా వీడియో వంటి విషయాల్లో జాగ్రత్త వహించండి."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"మీరు ఏదైనా యాప్‌ను షేర్ చేస్తున్నప్పుడు, రికార్డ్ చేస్తున్నప్పుడు, లేదా ప్రసారం చేస్తున్నప్పుడు, ఆ యాప్‌లో చూపబడిన దేనికైనా లేదా ప్లే అయిన దేనికైనా Androidకు యాక్సెస్ ఉంటుంది. కాబట్టి పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, మెసేజ్‌లు, ఫోటోలు, ఆడియో, ఇంకా వీడియో వంటి విషయాల్లో జాగ్రత్త వహించండి."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"ప్రారంభించండి"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"మీరు యాప్‌లను మార్చినప్పుడు షేరింగ్ పాజ్ చేయబడుతుంది"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"బదులుగా ఈ యాప్‌ను షేర్ చేయండి"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"మునుపటి దానికి స్విచ్ అవ్వండి"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"యాప్ స్విచ్"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"మీ IT అడ్మిన్ ద్వారా బ్లాక్ చేయబడింది"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"పరికర పాలసీ ద్వారా స్క్రీన్ క్యాప్చర్ చేయడం డిజేబుల్ చేయబడింది"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"అన్నీ క్లియర్ చేయండి"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"ఈ పరికరంలో ప్రమాణపత్ర అధికారం ఇన్‌స్టాల్ చేయబడింది. మీ సురక్షిత నెట్‌వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్‌ని పర్యవేక్షించగల నెట్‌వర్క్ లాగింగ్‌ని ఆన్ చేశారు."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"మీ అడ్మిన్ నెట్‌వర్క్ లాగింగ్‌ను ఆన్ చేశారు, ఇది మీ వర్క్ ప్రొఫైల్‌లోని ట్రాఫిక్‌ను పర్యవేక్షిస్తుంది కానీ మీ వ్యక్తిగత ప్రొఫైల్‌లో కాదు."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"ఈ పరికరం <xliff:g id="VPN_APP">%1$s</xliff:g> ద్వారా ఇంటర్నెట్‌కు కనెక్ట్ చేయబడింది. ఈమెయిళ్లు, బ్రౌజింగ్ డేటాతో సహా మీ నెట్‌వర్క్ యాక్టివిటీ మీ IT అడ్మిన్‌కు కనిపిస్తుంది."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"ఈ పరికరం <xliff:g id="VPN_APP">%1$s</xliff:g> ద్వారా ఇంటర్నెట్‌కు కనెక్ట్ చేయబడింది. ఈమెయిళ్లు, బ్రౌజింగ్ డేటాతో సహా మీ నెట్‌వర్క్ యాక్టివిటీ VPN ప్రొవైడర్‌కు కనిపిస్తుంది."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"ఈ పరికరం <xliff:g id="VPN_APP">%1$s</xliff:g> ద్వారా ఇంటర్నెట్‌కు కనెక్ట్ చేయబడింది. ఈమెయిళ్లు, బ్రౌజింగ్ డేటాతో సహా మీ నెట్‌వర్క్ యాక్టివిటీ మీ IT అడ్మిన్‌కు కనిపిస్తుంది."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"ఈ పరికరం <xliff:g id="VPN_APP_0">%1$s</xliff:g>, <xliff:g id="VPN_APP_1">%2$s</xliff:g> ద్వారా ఇంటర్నెట్‌కు కనెక్ట్ చేయబడింది. ఈమెయిళ్లు, బ్రౌజింగ్ డేటాతో సహా మీ నెట్‌వర్క్ యాక్టివిటీ మీ IT అడ్మిన్‌కు కనిపిస్తుంది."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"మీ వర్క్ యాప్‌లు <xliff:g id="VPN_APP">%1$s</xliff:g> ద్వారా ఇంటర్నెట్‌కు కనెక్ట్ చేయబడ్డాయి. ఈమెయిళ్లు, బ్రౌజింగ్ డేటాతో సహా వర్క్ యాప్‌లలో మీ నెట్‌వర్క్ యాక్టివిటీ మీ IT అడ్మిన్‌కు, VPN ప్రొవైడర్‌కు కనిపిస్తుంది."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"మీ వ్యక్తిగత యాప్‌లు <xliff:g id="VPN_APP">%1$s</xliff:g> ద్వారా ఇంటర్నెట్‌కు కనెక్ట్ చేయబడ్డాయి. ఈమెయిళ్లు, బ్రౌజింగ్ డేటాతో సహా మీ నెట్‌వర్క్ యాక్టివిటీ మీ VPN ప్రొవైడర్‌కు కనిపిస్తుంది."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"నిలిపివేయండి"</string>
     <string name="sound_settings" msgid="8874581353127418308">"సౌండ్ &amp; వైబ్రేషన్"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"సెట్టింగ్‌లు"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"సురక్షితమైన వాల్యూమ్‌కు తగ్గించబడింది"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"సిఫార్సు చేసిన దానికంటే ఎక్కువ కాలం వాల్యూమ్ ఎక్కువగా ఉంది"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"వాల్యూమ్‌ను సురక్షిత స్థాయికి తగ్గించడం జరిగింది"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"హెడ్‌ఫోన్ వాల్యూమ్, సిఫార్సు చేసిన సమయం కంటే ఎక్కువసేపు అధిక వాల్యూమ్‌లో ఉంది"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"హెడ్‌ఫోన్ వాల్యూమ్ ఈ వారం సురక్షిత పరిమితిని మించిపోయింది"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"వింటూ ఉండండి"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"వాల్యూమ్‌ను తగ్గించండి"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"యాప్ పిన్ చేయబడి ఉంది"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"దీని వలన మీరు అన్‌పిన్ చేసే వరకు ఇది వీక్షణలో ఉంచబడుతుంది. అన్‌పిన్ చేయడానికి వెనుకకు మరియు స్థూలదృష్టి తాకి &amp; అలాగే పట్టుకోండి."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"దీని వలన మీరు అన్‌పిన్ చేసే వరకు ఇది వీక్షణలో ఉంచబడుతుంది. అన్‌పిన్ చేయడానికి వెనుకకు మరియు హోమ్‌ని తాకి &amp; అలాగే పట్టుకోండి."</string>
@@ -545,7 +575,7 @@
     <string name="notification_silence_title" msgid="8608090968400832335">"నిశ్శబ్దం"</string>
     <string name="notification_alert_title" msgid="3656229781017543655">"ఆటోమేటిక్ సెట్టింగ్"</string>
     <string name="notification_automatic_title" msgid="3745465364578762652">"ఆటోమేటిక్"</string>
-    <string name="notification_channel_summary_low" msgid="4860617986908931158">"శబ్దం లేదా వైబ్రేషన్‌లు ఏవీ లేవు"</string>
+    <string name="notification_channel_summary_low" msgid="4860617986908931158">"సౌండ్ లేదా వైబ్రేషన్‌లు ఏవీ ఉండవు"</string>
     <string name="notification_conversation_summary_low" msgid="1734433426085468009">"శబ్దం లేదా వైబ్రేషన్ లేదు, సంభాషణ విభాగం దిగువన కనిపిస్తుంది"</string>
     <string name="notification_channel_summary_default" msgid="777294388712200605">"పరికర సెట్టింగ్‌ల ఆధారంగా రింగ్ లేదా వైబ్రేట్ కావచ్చు"</string>
     <string name="notification_channel_summary_default_with_bubbles" msgid="3482483084451555344">"పరికర సెట్టింగ్‌ల ఆధారంగా రింగ్ లేదా వైబ్రేట్ కావచ్చు. <xliff:g id="APP_NAME">%1$s</xliff:g> నుండి సంభాషణలు ఆటోమేటిక్‌గా బబుల్‌లో కనిపిస్తాయి."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"పవర్ మెనూ"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g>లో <xliff:g id="ID_1">%1$d</xliff:g>వ పేజీ"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"లాక్ స్క్రీన్"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"వేడెక్కినందుకు ఫోన్ ఆఫ్ చేయబడింది"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"మీ ఫోన్ ఇప్పుడు సాధారణంగా పని చేస్తోంది.\nమరింత సమాచారం కోసం ట్యాప్ చేయండి"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"మీ ఫోన్ చాలా వేడిగా ఉంది, కనుక చల్లబర్చడానికి ఆఫ్ చేయబడింది. మీ ఫోన్ ఇప్పుడు సాధారణంగా పని చేస్తుంది.\n\nమీరు ఇలా చేస్తే మీ ఫోన్ చాలా వేడెక్కవచ్చు:\n	• వనరు-ఆధారిత యాప్‌లు (గేమింగ్, వీడియో లేదా నావిగేషన్ వంటి యాప్‌లు) ఉపయోగించడం\n	• పెద్ద ఫైళ్లను డౌన్‌లోడ్ లేదా అప్‌లోడ్ చేయడం\n	• అధిక ఉష్ణోగ్రతలలో మీ ఫోన్‌ని ఉపయోగించడం"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"తీసుకోవాల్సిన జాగ్రత్తలు ఏమిటో చూడండి"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"ఫోన్ వేడెక్కుతోంది"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"ఫోన్‌ను చల్లబరిచే క్రమంలో కొన్ని ఫీచర్లు పరిమితం చేయబడ్డాయి.\nమరింత సమాచారం కోసం ట్యాప్ చేయండి"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"మీ ఫోన్ ఆటోమేటిక్‌గా చల్లబడటానికి ప్రయత్నిస్తుంది. మీరు ఇప్పటికీ మీ ఫోన్‌ను ఉపయోగించవచ్చు, కానీ దాని పనితీరు నెమ్మదిగా ఉండవచ్చు.\n\nమీ ఫోన్ చల్లబడిన తర్వాత, అది సాధారణ రీతిలో పని చేస్తుంది."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"తీసుకోవాల్సిన జాగ్రత్తలు ఏమిటో చూడండి"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"మీ పరికరాన్ని అన్‌ప్లగ్ చేయండి"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"ఛార్జింగ్ పోర్ట్ దగ్గర ఉంచినప్పుడు మీ పరికరం వేడెక్కుతోంది. ఇది ఛార్జర్ లేదా USB యాక్సెసరీకి కనెక్ట్ చేసి ఉంటే, దాన్ని అన్‌ప్లగ్ చేసి, కేబుల్ వేడెక్కే అవకాశం కూడా ఉన్నందున జాగ్రత్త వహించండి."</string>
@@ -839,8 +863,9 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ఫుల్ స్క్రీన్‌ను మ్యాగ్నిఫై చేయండి"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"స్క్రీన్‌లో భాగాన్ని మ్యాగ్నిఫై చేయండి"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"మ్యాగ్నిఫికేషన్ సెట్టింగ్‌లను తెరవండి"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"మాగ్నిఫికేషన్ సెట్టింగ్‌లను మూసివేయండి"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"సైజ్ మార్చడానికి మూలను లాగండి"</string>
-    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"వికర్ణ స్క్రోలింగ్‌ను అనుమతించండి"</string>
+    <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"డయాగనల్ స్క్రోలింగ్‌ను అనుమతించండి"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"సైజ్ మార్చండి"</string>
     <string name="accessibility_change_magnification_type" msgid="666000085077432421">"మ్యాగ్నిఫికేషన్ రకాన్ని మార్చండి"</string>
     <string name="accessibility_magnification_end_resizing" msgid="4881690585800302628">"సైజ్‌ను మార్చడం ముగించండి"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"ఇష్టమైనదిగా పెట్టిన గుర్తును తీసివేయండి"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g> పొజిషన్‌కు తరలించండి"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"నియంత్రణలు"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"వేగంగా యాక్సెస్ చేయడానికి డివైజ్ కంట్రోల్స్‌ను ఎంచుకోండి"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"కంట్రోల్స్ క్రమం మార్చడానికి దేన్నయినా పట్టుకుని, లాగి వదలండి"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"అన్ని కంట్రోల్స్ తీసివేయబడ్డాయి"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"మార్పులు సేవ్ చేయబడలేదు"</string>
@@ -910,20 +934,22 @@
     <string name="controls_settings_dialog_positive_button" msgid="436070672551674863">"అవును"</string>
     <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"పిన్ అక్షరాలను లేదా చిహ్నాలను కలిగి ఉంది"</string>
     <string name="controls_pin_verify" msgid="3452778292918877662">"<xliff:g id="DEVICE">%s</xliff:g>ను వెరిఫై చేయండి"</string>
-    <string name="controls_pin_wrong" msgid="6162694056042164211">"పిన్ తప్పు"</string>
+    <string name="controls_pin_wrong" msgid="6162694056042164211">"PIN తప్పు"</string>
     <string name="controls_pin_instructions" msgid="6363309783822475238">"పిన్‌ని ఎంటర్ చేయండి"</string>
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"మరొక పిన్‌ని ప్రయత్నించండి"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g>కి సంబంధించి మార్పును నిర్ధారించండి"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"మరిన్నింటిని చూడటం కోసం స్వైప్ చేయండి"</string>
+    <string name="retry_face" msgid="416380073082560186">"ముఖ ప్రామాణీకరణను ట్రై చేయండి"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"సిఫార్సులు లోడ్ అవుతున్నాయి"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"మీడియా"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసమై ఏర్పరిచిన ఈ మీడియా కంట్రోల్‌ను దాచాలా?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> కోసం ఈ మీడియా కంట్రోల్‌ను దాచి ఉంచాలా?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"ప్రస్తుత మీడియా సెషన్‌ను దాచడం సాధ్యం కాదు."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"దాచండి"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"కొనసాగించండి"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"సెట్టింగ్‌లు"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> పాడిన <xliff:g id="SONG_NAME">%1$s</xliff:g> <xliff:g id="APP_LABEL">%3$s</xliff:g> నుండి ప్లే అవుతోంది"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>లో <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> రన్ అవుతోంది"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"ప్లే చేయండి"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"పాజ్ చేయండి"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"మునుపటి ట్రాక్"</string>
@@ -949,7 +975,7 @@
     <string name="controls_error_removed_message" msgid="2885911717034750542">"<xliff:g id="DEVICE">%1$s</xliff:g>ను యాక్సెస్ చేయడం సాధ్యపడలేదు. <xliff:g id="APPLICATION">%2$s</xliff:g> యాప్‌ను చెక్ చేసి, కంట్రోల్ ఇప్పటికీ అందుబాటులో ఉందని, యాప్ సెట్టింగ్‌లు మారలేదని నిర్ధారించుకోండి."</string>
     <string name="controls_open_app" msgid="483650971094300141">"యాప్‌‌ను తెరవండి"</string>
     <string name="controls_error_generic" msgid="352500456918362905">"స్టేటస్ లోడ్ చేయడం సాధ్యపడలేదు"</string>
-    <string name="controls_error_failed" msgid="960228639198558525">"ఎర్రర్, మళ్లీ ప్రయత్నించండి"</string>
+    <string name="controls_error_failed" msgid="960228639198558525">"ఎర్రర్, మళ్లీ ట్రై చేయండి"</string>
     <string name="controls_menu_add" msgid="4447246119229920050">"కంట్రోల్స్‌ను జోడించండి"</string>
     <string name="controls_menu_edit" msgid="890623986951347062">"కంట్రోల్స్‌ను ఎడిట్ చేయండి"</string>
     <string name="controls_menu_add_another_app" msgid="8661172304650786705">"యాప్‌ను జోడించండి"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"స్పీకర్‌లు &amp; డిస్‌ప్లేలు"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"సూచించబడిన పరికరాలు"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"మీడియాను మరొక పరికరానికి తరలించడానికి మీ షేర్ చేసిన సెషన్‌ను ఆపండి"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"ఆపండి"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"ప్రసారం కావడం అనేది ఎలా పని చేస్తుంది"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"ప్రసారం"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"మీకు సమీపంలో ఉన్న వ్యక్తులు అనుకూలత ఉన్న బ్లూటూత్ పరికరాలతో మీరు ప్రసారం చేస్తున్న మీడియాను వినగలరు"</string>
@@ -981,12 +1009,12 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"సేవ్ చేయడం సాధ్యపడదు. మళ్లీ ట్రై చేయండి."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"సేవ్ చేయడం సాధ్యపడదు."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"కనీసం 4 అక్షరాలను ఉపయోగించండి"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"16 కంటే తక్కువ అక్షరాలను ఉపయోగించండి"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g> కంటే తక్కువ అక్షరాలను ఉపయోగించండి"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"బిల్డ్ నంబర్"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"బిల్డ్ నంబర్, క్లిప్‌బోర్డ్‌కు కాపీ చేయబడింది."</string>
     <string name="basic_status" msgid="2315371112182658176">"సంభాషణను తెరవండి"</string>
     <string name="select_conversation_title" msgid="6716364118095089519">"సంభాషణ విడ్జెట్‌లు"</string>
-    <string name="select_conversation_text" msgid="3376048251434956013">"దీనిని మీ మొదటి స్క్రీన్‌కు జోడించడానికి సంభాషణను ట్యాప్ చేయండి"</string>
+    <string name="select_conversation_text" msgid="3376048251434956013">"ఏదైనా సంభాషణను మీ మొదటి స్క్రీన్‌కు జోడించడానికి దానిని ట్యాప్ చేయండి"</string>
     <string name="no_conversations_text" msgid="5354115541282395015">"మీ ఇటీవలి సంభాషణలు ఇక్కడ కనిపిస్తాయి"</string>
     <string name="priority_conversations" msgid="3967482288896653039">"ప్రాధాన్య సంభాషణలు"</string>
     <string name="recent_conversations" msgid="8531874684782574622">"ఇటీవలి సంభాషణలు"</string>
@@ -994,7 +1022,7 @@
     <string name="one_week_timestamp" msgid="4925600765473875590">"1 వారం క్రితం"</string>
     <string name="two_weeks_timestamp" msgid="9111801081871962155">"2 వారాల క్రితం"</string>
     <string name="over_one_week_timestamp" msgid="3770560704420807142">"1 వారం క్రితం పైగా"</string>
-    <string name="over_two_weeks_timestamp" msgid="6300507859007874050">"2 వారాల క్రితం పైగా"</string>
+    <string name="over_two_weeks_timestamp" msgid="6300507859007874050">"2 వారాల కంటే ముందు"</string>
     <string name="birthday_status" msgid="2596961629465396761">"పుట్టినరోజు"</string>
     <string name="birthday_status_content_description" msgid="682836371128282925">"ఈ రోజు <xliff:g id="NAME">%1$s</xliff:g> పుట్టిన రోజు"</string>
     <string name="upcoming_birthday_status" msgid="2005452239256870351">"పుట్టినరోజు వస్తోంది"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"మీ బ్యాటరీ మీటర్‌ను చదవడంలో సమస్య"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"మరింత సమాచారం కోసం ట్యాప్ చేయండి"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"అలారం సెట్ చేయలేదు"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"స్క్రీన్ లాక్‌ను ఎంటర్ చేయండి"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"వేలిముద్ర సెన్సార్"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"ప్రామాణీకరించండి"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"పరికరాన్ని ఎంటర్ చేయండి"</string>
@@ -1046,7 +1075,7 @@
     <string name="wifi_wont_autoconnect_for_now" msgid="5782282612749867762">"ప్రస్తుతానికి Wi-Fi ఆటోమేటిక్‌గా కనెక్ట్ అవ్వదు"</string>
     <string name="see_all_networks" msgid="3773666844913168122">"అన్నీ చూడండి"</string>
     <string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"నెట్‌వర్క్‌లను మార్చడానికి, ఈథర్‌నెట్‌ను డిస్‌కనెక్ట్ చేయండి"</string>
-    <string name="wifi_scan_notify_message" msgid="3753839537448621794">"పరికర అనుభవాన్ని మెరుగుపరచడానికి, Wi‑Fi ఆఫ్‌లో ఉన్నప్పుడు కూడా, ఏ సమయంలో అయినా ఇప్పటికీ Wi‑Fi నెట్‌వర్క్‌ల కోసం యాప్‌లు, సర్వీస్‌లు స్కాన్ చేయగలవు. మీరు దీనిని Wi‑Fi స్కానింగ్ సెట్టింగ్‌లలో మార్చవచ్చు. "<annotation id="link">"మార్చండి"</annotation></string>
+    <string name="wifi_scan_notify_message" msgid="3753839537448621794">"పరికర అనుభవాన్ని మెరుగుపరచడానికి, ఇప్పటికీ, యాప్‌లు, సర్వీస్‌లు ఏ సమయంలో అయినా Wi‑Fi నెట్‌వర్క్‌ల కోసం స్కాన్ చేయగలవు. Wi‑Fi ఆఫ్‌లో ఉన్నప్పుడు కూడా ఇలా చేయగలవు. "<annotation id="link">"మార్చండి"</annotation></string>
     <string name="turn_off_airplane_mode" msgid="8425587763226548579">"విమానం మోడ్‌ను ఆఫ్ చేయండి"</string>
     <string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"కింది టైల్‌ను క్విక్ సెట్టింగ్‌లకు జోడించడానికి <xliff:g id="APPNAME">%1$s</xliff:g> అనుమతి కోరుతోంది"</string>
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"టైల్‌ను జోడించండి"</string>
@@ -1055,7 +1084,7 @@
     <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# యాప్ యాక్టివ్‌గా ఉంది}other{# యాప్‌లు యాక్టివ్‌గా ఉన్నాయి}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"కొత్త సమాచారం"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"యాక్టివ్‌గా ఉన్న యాప్‌లు"</string>
-    <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"మీరు వాటిని ఉపయోగించనప్పటికీ, ఈ యాప్‌లు యాక్టివ్‌గా ఉంటాయి, రన్ అవుతాయి. ఇది వాటి ఫంక్షనాలిటీని మెరుగుపరుస్తుంది, అయితే ఇది బ్యాటరీ జీవితకాలాన్ని కూడా ప్రభావితం చేయవచ్చు."</string>
+    <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"మీరు ఈ యాప్‌లను ఉపయోగించపోయినా కూడా అవి యాక్టివ్‌గా ఉండి, రన్ అవుతూ ఉంటాయి. దీని వల్ల వాటి ఫంక్షనాలిటీ మెరుగవుతుంది. అయితే ఇది బ్యాటరీ లైఫ్‌ను కూడా ప్రభావితం చేయవచ్చు."</string>
     <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"ఆపివేయండి"</string>
     <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"ఆపివేయబడింది"</string>
     <string name="clipboard_edit_text_done" msgid="4551887727694022409">"పూర్తయింది"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant వింటోంది"</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="note_task_button_label" msgid="8718616095800343136">"నోట్‌టేకింగ్"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"నోట్-టేకింగ్"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"నోట్-టేకింగ్, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"మరింత తెలుసుకోండి"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"<xliff:g id="URL">%s</xliff:g>‌లో మరింత తెలుసుకోండి"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g>‌ను తెరవండి"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• యాప్ సెటప్ చేయబడి ఉందని"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Walletకు కనీసం ఒక కార్డ్ అయినా జోడించబడి ఉందని"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• కెమెరా యాప్ ఇన్‌స్టాల్ చేసి ఉందని"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• యాప్ సెటప్ చేయబడి ఉందని"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• కనీసం ఒక పరికరమైనా అందుబాటులో ఉందని"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Wallet యాప్‌ను షార్ట్‌కట్‌గా జోడించడానికి, యాప్ ఇన్‌స్టాల్ చేయబడిందని నిర్ధారించుకోండి"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Wallet యాప్‌ను షార్ట్‌కట్‌గా జోడించడానికి, కనీసం ఒక కార్డ్ జోడించబడిందని నిర్ధారించుకోండి"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR కోడ్ స్కానర్‌ను షార్ట్‌కట్‌గా జోడించడానికి, కెమెరా యాప్ ఇన్‌స్టాల్ చేయబడిందని నిర్ధారించుకోండి"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home యాప్‌ను షార్ట్‌కట్‌గా జోడించడానికి, యాప్ ఇన్‌స్టాల్ చేయబడిందని నిర్ధారించుకోండి"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• కనీసం ఒక పరికరమైనా అందుబాటులో ఉందని"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"నోట్‌టేకింగ్ షార్ట్‌కట్‌ను ఉపయోగించడానికి ఆటోమేటిక్ సెట్టింగ్ నోట్స్ యాప్‌ను ఎంచుకోండి"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"యాప్‌ను ఎంచుకోండి"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"షార్ట్‌కట్‌ను తాకి, నొక్కి ఉంచు"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"రద్దు చేయండి"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"ఇప్పుడే స్క్రీన్‌లను మార్చండి"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"మీ స్టైలస్‌ను ఛార్జర్‌కి కనెక్ట్ చేయండి"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"తక్కువ స్టైలస్ బ్యాటరీ"</string>
     <string name="video_camera" msgid="7654002575156149298">"వీడియో కెమెరా"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"ఈ ప్రొఫైల్ నుండి కాల్ చేయడం సాధ్యపడలేదు"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"మీ వర్క్ పాలసీ, మిమ్మల్ని వర్క్ ప్రొఫైల్ నుండి మాత్రమే ఫోన్ కాల్స్ చేయడానికి అనుమతిస్తుంది"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"వ్యక్తిగత యాప్ నుండి కాల్ చేయడం సాధ్యం కాదు"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"మీ సంస్థ, వర్క్ యాప్‌ల నుండి మాత్రమే కాల్స్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"వర్క్ ప్రొఫైల్‌కు మారండి"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"మూసివేయండి"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"ఆఫీస్ ఫోన్ యాప్‌ను ఇన్‌స్టాల్ చేయండి"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"రద్దు చేయండి"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"లాక్ స్క్రీన్‌ను అనుకూలీకరించండి"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"లాక్ స్క్రీన్‌ను అనుకూలంగా మార్చుకోవడానికి అన్‌లాక్ చేయండి"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi అందుబాటులో లేదు"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ప్రయారిటీ మోడ్ ఆన్‌లో ఉంది"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistant అటెన్షన్ ఆన్‌లో ఉంది"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"సెట్టింగ్‌లలో ఆటోమేటిక్‌గా ఉండేలా ఒక నోట్స్ యాప్‌ను సెట్ చేసుకోండి"</string>
+    <string name="install_app" msgid="5066668100199613936">"యాప్‌ను ఇన్‌స్టాల్ చేయండి"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"మైక్రోఫోన్ &amp; కెమెరా"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"ఇటీవలి యాప్ వినియోగం"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"ఇటీవలి యాక్సెస్‌ను చూడండి"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"పూర్తయింది"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"ఆప్షన్‌లను విస్తరించి, చూడండి"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"కుదించండి"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"ఈ యాప్‌ను మూసివేయండి"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> మూసివేయబడింది"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"సర్వీస్‌ను మేనేజ్ చేయండి"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"యాక్సెస్‌ను మేనేజ్ చేయండి"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"ఫోన్ కాల్ ద్వారా వినియోగంలో ఉంది"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"ఇటీవల ఫోన్ కాల్‌లో వినియోగించబడింది"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> ద్వారా వినియోగంలో ఉంది"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"<xliff:g id="APP_NAME">%1$s</xliff:g> ద్వారా ఇటీవల వినియోగించబడింది"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ద్వారా వినియోగంలో ఉంది"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ద్వారా ఇటీవల వినియోగించబడింది"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ద్వారా వినియోగంలో ఉంది"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ద్వారా ఇటీవల ఉపయోగించబడింది"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-te/strings_tv.xml b/packages/SystemUI/res/values-te/strings_tv.xml
deleted file mode 100644
index 2131064..0000000
--- a/packages/SystemUI/res/values-te/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN కనెక్ట్ అయింది"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN డిస్‌కనెక్ట్ అయింది"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> ద్వారా"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"నోటిఫికేషన్‌లు"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"నోటిఫికేషన్‌లు లేవు"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"మైక్రోఫోన్ రికార్డింగ్ చేస్తోంది"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"కెమెరా రికార్డింగ్ చేస్తోంది"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"కెమెరా, మైక్రోఫోన్‌లు రికార్డింగ్ చేస్తున్నాయి"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"మైక్రోఫోన్ రికార్డింగ్ చేయడం ఆపివేసింది"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"రికార్డింగ్ చేయడాన్ని కెమెరా ఆపివేసింది"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"కెమెరా, మైక్రోఫోన్‌లు రికార్డింగ్ చేయడం ఆపివేశాయి"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"స్క్రీన్ రికార్డింగ్ ప్రారంభమైంది"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"స్క్రీన్ రికార్డింగ్ ఆపివేయబడింది"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-television/colors.xml b/packages/SystemUI/res/values-television/colors.xml
deleted file mode 100644
index 3e9e182..0000000
--- a/packages/SystemUI/res/values-television/colors.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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.
- */
--->
-<resources>
-    <color name="volume_dialog_background_color">#E61F232B</color>
-    <color name="volume_dialog_background_color_above_blur">#C71F232B</color>
-
-    <color name="bottom_sheet_icon_color">#D2E3FC</color>
-
-    <color name="bottom_sheet_title_color">#E8F0FE</color>
-    <color name="bottom_sheet_body_color">#D2E3FC</color>
-
-    <color name="bottom_sheet_background_color">#1F232C</color>
-    <color name="bottom_sheet_background_color_with_blur">#AA1A2734</color>
-
-    <color name="bottom_sheet_button_background_color_focused">#E8F0FE</color>
-    <color name="bottom_sheet_button_background_color_unfocused">#0FE8EAED</color>
-
-    <color name="bottom_sheet_button_text_color_focused">#DB202124</color>
-    <color name="bottom_sheet_button_text_color_unfocused">#B5E8EAED</color>
-
-    <color name="privacy_mic_cam_chip">#5BB974</color> <!-- g400 -->
-    <color name="privacy_media_projection_chip">#C9CCD0</color>
-    <color name="privacy_icon_tint">#30302A</color>
-    <color name="privacy_chip_dot_bg_tint">#66000000</color>
-    <color name="cast_connected_fill">#FF0000</color>
-</resources>
diff --git a/packages/SystemUI/res/values-television/config.xml b/packages/SystemUI/res/values-television/config.xml
deleted file mode 100644
index 2ace86f..0000000
--- a/packages/SystemUI/res/values-television/config.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2019, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
-     for different hardware and product builds. -->
-<resources>
-    <!-- Svelte specific logic, see RecentsConfiguration.SVELTE_* constants. -->
-    <integer name="recents_svelte_level">3</integer>
-
-    <!-- Show a separate icon for low and high volume on the volume dialog -->
-    <bool name="config_showLowMediaVolumeIcon">true</bool>
-
-    <!-- Change the volume row tint when it is inactive, i.e. when it is being dismissed -->
-    <bool name="config_changeVolumeRowTintWhenInactive">false</bool>
-
-    <!-- The duraction of the show animation for the volume dialog in milliseconds -->
-    <integer name="config_dialogShowAnimationDurationMs">600</integer>
-
-    <!-- The duraction of the hide animation for the volume dialog in milliseconds -->
-    <integer name="config_dialogHideAnimationDurationMs">400</integer>
-
-    <!-- Whether to use window background blur for the volume dialog. -->
-    <bool name="config_volumeDialogUseBackgroundBlur">true</bool>
-
-    <!-- Whether to tint the icon of the sensor hardware privacy toggle unblock dialog.
-        Set to false if using a custom icon. -->
-    <bool name="config_unblockHwSensorIconEnableTint">true</bool>
-
-    <!-- Configuration to set Learn more in device logs as URL link -->
-    <bool name="log_access_confirmation_learn_more_as_link">false</bool>
-</resources>
diff --git a/packages/SystemUI/res/values-television/dimens.xml b/packages/SystemUI/res/values-television/dimens.xml
deleted file mode 100644
index ee615d9..0000000
--- a/packages/SystemUI/res/values-television/dimens.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?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
-  -->
-<resources>
-    <!-- Opacity at which the background for the shutdown UI will be drawn. -->
-    <item name="shutdown_scrim_behind_alpha" format="float" type="dimen">1.0</item>
-
-    <dimen name="bottom_sheet_padding_horizontal">32dp</dimen>
-    <dimen name="bottom_sheet_padding_vertical">24dp</dimen>
-
-    <dimen name="bottom_sheet_icon_size">42dp</dimen>
-    <dimen name="bottom_sheet_icon_margin">8dp</dimen>
-    <dimen name="bottom_sheet_title_margin_bottom">18dp</dimen>
-    <dimen name="bottom_sheet_details_margin_bottom">8dp</dimen>
-
-    <dimen name="bottom_sheet_actions_width">296dp</dimen>
-    <dimen name="bottom_sheet_actions_spacing">12dp</dimen>
-    <item name="bottom_sheet_button_selection_scaled" format="float" type="dimen">1.1</item>
-    <dimen name="bottom_sheet_button_width">232dp</dimen>
-    <dimen name="bottom_sheet_button_padding_horizontal">20dp</dimen>
-    <dimen name="bottom_sheet_button_padding_vertical">16dp</dimen>
-
-    <dimen name="bottom_sheet_corner_radius">24dp</dimen>
-    <dimen name="bottom_sheet_button_corner_radius">10dp</dimen>
-
-    <dimen name="bottom_sheet_min_height">208dp</dimen>
-    <dimen name="bottom_sheet_margin">24dp</dimen>
-    <dimen name="bottom_sheet_background_blur_radius">37dp</dimen>
-
-    <dimen name="privacy_chips_max_width">110dp</dimen>
-    <dimen name="privacy_chips_bar_padding">9dp</dimen>
-    <dimen name="privacy_chip_margin">3dp</dimen>
-    <dimen name="privacy_chip_icon_margin_in_between">4dp</dimen>
-    <dimen name="privacy_chip_padding_horizontal">5dp</dimen>
-    <dimen name="privacy_chip_icon_size">12dp</dimen>
-    <dimen name="privacy_chip_collapsed_icon_size">10dp</dimen>
-    <dimen name="privacy_chip_height">24dp</dimen>
-    <dimen name="privacy_chip_radius">12dp</dimen>
-
-    <dimen name="privacy_chip_dot_size">8dp</dimen>
-    <dimen name="privacy_chip_dot_radius">4dp</dimen>
-
-    <dimen name="privacy_chip_dot_bg_width">24dp</dimen>
-    <dimen name="privacy_chip_dot_bg_height">18dp</dimen>
-    <dimen name="privacy_chip_dot_bg_radius">9dp</dimen>
-
-    <dimen name="unblock_hw_sensor_icon_width">@dimen/bottom_sheet_icon_size</dimen>
-    <dimen name="unblock_hw_sensor_icon_height">@dimen/bottom_sheet_icon_size</dimen>
-
-</resources>
diff --git a/packages/SystemUI/res/values-television/integers.xml b/packages/SystemUI/res/values-television/integers.xml
deleted file mode 100644
index 02f5d0d..0000000
--- a/packages/SystemUI/res/values-television/integers.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?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
-  -->
-<resources>
-    <!-- The position of the volume dialog on the screen.
-         See com.android.systemui.volume.VolumeDialogImpl.
-         Value 81 corresponds to BOTTOM|CENTER_HORIZONTAL.
-         Value 21 corresponds to RIGHT|CENTER_VERTICAL.
-         Value 8388629 corresponds to END|CENTER_VERTICAL -->
-    <integer name="volume_dialog_gravity">8388629</integer>
-
-    <integer name="privacy_chip_animation_millis">300</integer>
-</resources>
diff --git a/packages/SystemUI/res/values-television/styles.xml b/packages/SystemUI/res/values-television/styles.xml
index c517845..4a4fac2 100644
--- a/packages/SystemUI/res/values-television/styles.xml
+++ b/packages/SystemUI/res/values-television/styles.xml
@@ -14,15 +14,9 @@
      limitations under the License.
 -->
 
+<!-- TODO(b/289498394) move this to the TvSystemUI target -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
-    <style name="Theme.SystemUI.Dialog" parent="@android:style/Theme.DeviceDefault.Dialog" />
-    <style name="Theme.SystemUI.Dialog.Alert" parent="@*android:style/Theme.DeviceDefault.Dialog.Alert" />
-
-    <style name="Animation.ShutdownUi">
-        <item name="android:windowEnterAnimation">@null</item>
-        <item name="android:windowExitAnimation">@null</item>
-    </style>
 
     <style name="volume_dialog_theme" parent="Theme.SystemUI">
         <item name="android:colorAccent">@color/tv_volume_dialog_accent</item>
@@ -30,43 +24,4 @@
         <item name="android:dialogCornerRadius">@dimen/volume_dialog_panel_width_half</item>
     </style>
 
-    <style name="PrivacyChip">
-        <item name="android:colorError">@color/cast_connected_fill</item>
-    </style>
-
-    <style name="BottomSheet" parent="Theme.Leanback">
-        <item name="android:windowIsFloating">true</item>
-        <item name="android:windowActivityTransitions">true</item>
-        <item name="android:windowNoTitle">true</item>
-        <item name="android:windowIsTranslucent">true</item>
-        <item name="android:backgroundDimAmount">0.2</item>
-    </style>
-
-    <style name="BottomSheet.TitleText">
-        <item name="android:textSize">28sp</item>
-        <item name="android:textColor">@color/bottom_sheet_title_color</item>
-    </style>
-
-    <style name="BottomSheet.BodyText">
-        <item name="android:textSize">16sp</item>
-        <item name="android:textColor">@color/bottom_sheet_body_color</item>
-    </style>
-
-    <style name="BottomSheet.ActionItem">
-        <item name="android:layout_width">@dimen/bottom_sheet_button_width</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:gravity">left|center_vertical</item>
-        <item name="android:textSize">16sp</item>
-        <item name="android:textColor">@color/bottom_sheet_button_text_color</item>
-        <item name="android:background">@drawable/bottom_sheet_button_background</item>
-        <item name="android:paddingHorizontal">@dimen/bottom_sheet_button_padding_horizontal</item>
-        <item name="android:paddingVertical">@dimen/bottom_sheet_button_padding_vertical</item>
-        <item name="android:stateListAnimator">@anim/tv_bottom_sheet_button_state_list_animator</item>
-    </style>
-
-    <!-- The style for log access consent button -->
-    <style name="LogAccessDialogTheme" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
-        <item name="permissionGrantButtonTopStyle">?android:buttonBarButtonStyle</item>
-        <item name="permissionGrantButtonBottomStyle">?android:buttonBarButtonStyle</item>
-    </style>
 </resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index ce35c40..7c524d9 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"เปิดใช้ USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"ดูข้อมูลเพิ่มเติม"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"ภาพหน้าจอ"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"ปิดใช้ฟีเจอร์ขยายเวลาปลดล็อกอยู่"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"ปิดใช้ฟีเจอร์ปลดล็อกต่อเนื่องอยู่"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ส่งรูปภาพ"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"กำลังบันทึกภาพหน้าจอ..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"กำลังบันทึกภาพหน้าจอไปยังโปรไฟล์งาน…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> ตรวจพบภาพหน้าจอนี้"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> และแอปอื่นๆ ที่เปิดอยู่ตรวจพบภาพหน้าจอนี้"</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"เพิ่มลงในโน้ต"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"โปรแกรมบันทึกหน้าจอ"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"โปรแกรมบันทึกหน้าจอ"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"กำลังประมวลผลการอัดหน้าจอ"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"การแจ้งเตือนต่อเนื่องสำหรับเซสชันการบันทึกหน้าจอ"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"เริ่มบันทึกเลยไหม"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"ขณะบันทึก ระบบ Android อาจบันทึกข้อมูลที่ละเอียดอ่อนซึ่งปรากฏบนหน้าจอหรือเล่นในอุปกรณ์ได้ ซึ่งรวมถึงรหัสผ่าน ข้อมูลการชำระเงิน รูปภาพ ข้อความ และเสียง"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"บันทึกทั้งหน้าจอ"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"บันทึกแอปเดียว"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"ขณะกำลังบันทึก Android จะมีสิทธิ์เข้าถึงทุกสิ่งที่ปรากฏบนหน้าจอหรือเล่นอยู่ในอุปกรณ์ ดังนั้นโปรดระวังเกี่ยวกับรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ หรือข้อมูลที่ละเอียดอ่อนอื่นๆ"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"ขณะกำลังบันทึกแอป Android จะมีสิทธิ์เข้าถึงทุกสิ่งที่แสดงหรือเล่นอยู่ในแอปดังกล่าว ดังนั้นโปรดระวังเกี่ยวกับรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ หรือข้อมูลที่ละเอียดอ่อนอื่นๆ"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"เริ่มบันทึก"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"เริ่มบันทึกเลยไหม"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"ขณะกำลังบันทึก Android จะมีสิทธิ์เข้าถึงทุกสิ่งที่ปรากฏบนหน้าจอหรือเล่นอยู่ในอุปกรณ์ ดังนั้นโปรดระวังสิ่งต่างๆ อย่างเช่นรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ รูปภาพ รวมถึงเสียงและวิดีโอ"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"ขณะกำลังบันทึกแอป Android จะมีสิทธิ์เข้าถึงทุกสิ่งที่แสดงหรือเล่นอยู่ในแอปดังกล่าว ดังนั้นโปรดระวังสิ่งต่างๆ อย่างเช่นรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ รูปภาพ รวมถึงเสียงและวิดีโอ"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"เริ่มบันทึก"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"บันทึกเสียง"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"เสียงจากอุปกรณ์"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"เสียงจากอุปกรณ์ เช่น เพลง การโทร และเสียงเรียกเข้า"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"ไมโครโฟน"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"เสียงจากอุปกรณ์และไมโครโฟน"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"เริ่ม"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"เริ่ม"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"กำลังบันทึกหน้าจอ"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"กำลังบันทึกหน้าจอและเสียง"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"แสดงการแตะบนหน้าจอ"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"แชร์"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"บันทึกการบันทึกหน้าจอแล้ว"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"แตะเพื่อดู"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"เกิดข้อผิดพลาดในการลบการบันทึกหน้าจอ"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"เกิดข้อผิดพลาดในการบันทึกหน้าจอ"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"เกิดข้อผิดพลาดขณะเริ่มบันทึกหน้าจอ"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"กำลังดูแบบเต็มหน้าจอ"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"หากต้องการออก ให้ปัดลงจากด้านบน"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"รับทราบ"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"กลับ"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"หน้าแรก"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"เมนู"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"ตรวจสอบสิทธิ์ใบหน้าแล้ว"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"ยืนยันแล้ว"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"แตะยืนยันเพื่อดำเนินการให้เสร็จสมบูรณ์"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"ปลดล็อกด้วยใบหน้าแล้ว กดไอคอนปลดล็อกเพื่อดำเนินการต่อ"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"ปลดล็อกด้วยใบหน้าแล้ว"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"ปลดล็อกด้วยใบหน้าแล้ว กดเพื่อดำเนินการต่อ"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"จดจำใบหน้าได้ กดเพื่อดำเนินการต่อ"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"จดจำใบหน้าได้ กดไอคอนปลดล็อกเพื่อดำเนินการต่อ"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"ตรวจสอบสิทธิ์แล้ว"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"ยกเลิกการตรวจสอบสิทธิ์"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"ใช้ PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"ใช้รูปแบบ"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"ใช้รหัสผ่าน"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"หากคุณป้อนรูปแบบไม่ถูกต้องในความพยายามครั้งถัดไป ระบบจะลบโปรไฟล์งานและข้อมูลในโปรไฟล์"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"หากคุณป้อน PIN ไม่ถูกต้องในความพยายามครั้งถัดไป ระบบจะลบโปรไฟล์งานและข้อมูลในโปรไฟล์"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"หากคุณป้อนรหัสผ่านไม่ถูกต้องในความพยายามครั้งถัดไป ระบบจะลบโปรไฟล์งานและข้อมูลในโปรไฟล์"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"ตั้งค่า"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"ไว้ทีหลัง"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"จำเป็นต้องดำเนินการนี้เพื่อปรับปรุงความปลอดภัยและประสิทธิภาพ"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"ตั้งค่าการปลดล็อกด้วยลายนิ้วมืออีกครั้ง"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"ปลดล็อกด้วยลายนิ้วมือ"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"ตั้งค่าการปลดล็อกด้วยลายนิ้วมือ"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"ระบบจะลบรูปภาพและรูปแบบลายนิ้วมือปัจจุบันเพื่อตั้งค่าการปลดล็อกด้วยลายนิ้วมืออีกครั้ง\n\nหลังจากลบแล้ว คุณจะต้องตั้งค่าการปลดล็อกด้วยลายนิ้วมือใหม่เพื่อใช้ลายนิ้วมือในการปลดล็อกโทรศัพท์หรือยืนยันตัวตน"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"ระบบจะลบรูปภาพและรูปแบบลายนิ้วมือปัจจุบันเพื่อตั้งค่าการปลดล็อกด้วยลายนิ้วมืออีกครั้ง\n\nหลังจากลบแล้ว คุณจะต้องตั้งค่าการปลดล็อกด้วยลายนิ้วมือใหม่เพื่อใช้ลายนิ้วมือในการปลดล็อกโทรศัพท์หรือยืนยันตัวตน"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"ตั้งค่าการปลดล็อกด้วยลายนิ้วมือไม่ได้ ไปที่การตั้งค่าเพื่อลองอีกครั้ง"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"ตั้งค่าการปลดล็อกด้วยใบหน้าอีกครั้ง"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"ปลดล็อกด้วยใบหน้า"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"ตั้งค่าการปลดล็อกด้วยใบหน้า"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"ระบบจะลบรูปแบบใบหน้าปัจจุบันเพื่อตั้งค่าการปลดล็อกด้วยใบหน้าอีกครั้ง\n\nคุณจะต้องตั้งค่าฟีเจอร์นี้ใหม่เพื่อใช้ใบหน้าในการปลดล็อกโทรศัพท์"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"ตั้งค่าการปลดล็อกด้วยใบหน้าไม่ได้ ไปที่การตั้งค่าเพื่อลองอีกครั้ง"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"แตะเซ็นเซอร์ลายนิ้วมือ"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"กดไอคอนปลดล็อกเพื่อดำเนินการต่อ"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"ไม่รู้จักใบหน้า ใช้ลายนิ้วมือแทน"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"เสียง"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ชุดหูฟัง"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"อินพุต"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"เครื่องช่วยฟัง"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"เครื่องช่วยฟัง"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"กำลังเปิด..."</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"หมุนอัตโนมัติ"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"หมุนหน้าจออัตโนมัติ"</string>
@@ -338,7 +354,7 @@
     <string name="zen_silence_introduction" msgid="6117517737057344014">"การใช้โหมดนี้จะบล็อกเสียงและการสั่นทั้งหมด ซึ่งรวมถึงเสียงปลุก เพลง วิดีโอ และเกม"</string>
     <string name="notification_tap_again" msgid="4477318164947497249">"แตะอีกครั้งเพื่อเปิด"</string>
     <string name="tap_again" msgid="1315420114387908655">"แตะอีกครั้ง"</string>
-    <string name="keyguard_unlock" msgid="8031975796351361601">"เลื่อนขึ้นเพื่อเปิด"</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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"ปลดล็อกด้วยใบหน้าแล้ว"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"จดจำใบหน้าได้"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"เลื่อนขึ้นเพื่อลองอีกครั้ง"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"ปัดขึ้นเพื่อลองปลดล็อกด้วยใบหน้าอีกครั้ง"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"ปลดล็อกเพื่อใช้ NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"องค์กรของคุณเป็นเจ้าของอุปกรณ์นี้"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"<xliff:g id="ORGANIZATION_NAME">%s</xliff:g> เป็นเจ้าของอุปกรณ์นี้"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"นำผู้ใช้ออกใช่ไหม"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"แอปและข้อมูลทั้งหมดของผู้ใช้นี้จะถูกลบ"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"นำออก"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> จะมีสิทธิ์เข้าถึงข้อมูลทั้งหมดที่ปรากฏบนหน้าจอหรือเปิดจากอุปกรณ์ของคุณขณะบันทึกหรือแคสต์ ซึ่งรวมถึงข้อมูลอย่างเช่นรหัสผ่าน รายละเอียดการชำระเงิน รูปภาพ ข้อความ และเสียงที่คุณเล่น"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"บริการที่มีฟังก์ชันนี้จะมีสิทธิ์เข้าถึงข้อมูลทั้งหมดที่ปรากฏบนหน้าจอหรือเปิดจากอุปกรณ์ของคุณขณะบันทึกหรือแคสต์ ซึ่งรวมถึงข้อมูลอย่างเช่นรหัสผ่าน รายละเอียดการชำระเงิน รูปภาพ ข้อความ และเสียงที่คุณเล่น"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"เริ่มบันทึกหรือแคสต์ใช่ไหม"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"เริ่มบันทึกหรือแคสต์ด้วย <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> เลยไหม"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"อนุญาตให้ \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" แชร์หรือบันทึกไหม"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"ทั้งหน้าจอ"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"แอปเดียว"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"เมื่อกำลังแชร์ บันทึก หรือแคสต์ \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" จะมีสิทธิ์เข้าถึงทุกสิ่งที่ปรากฏบนหน้าจอหรือเล่นอยู่ในอุปกรณ์ ดังนั้นโปรดระวังเกี่ยวกับรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ หรือข้อมูลที่ละเอียดอ่อนอื่นๆ"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"เมื่อกำลังแชร์ บันทึก หรือแคสต์แอป \"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>\" จะมีสิทธิ์เข้าถึงทุกสิ่งที่แสดงหรือเล่นอยู่ในแอปดังกล่าว ดังนั้นโปรดระวังเกี่ยวกับรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ หรือข้อมูลที่ละเอียดอ่อนอื่นๆ"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"ต่อไป"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"แชร์หรือบันทึกแอป"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"อนุญาตให้แอปนี้แชร์หรือบันทึกไหม"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"เมื่อกำลังแชร์ บันทึก หรือแคสต์ แอปนี้จะมีสิทธิ์เข้าถึงทุกสิ่งที่ปรากฏบนหน้าจอหรือเล่นอยู่ในอุปกรณ์ ดังนั้นโปรดระวังเกี่ยวกับรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ หรือข้อมูลที่ละเอียดอ่อนอื่นๆ"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"เมื่อกำลังแชร์ บันทึก หรือแคสต์แอป แอปนี้จะมีสิทธิ์เข้าถึงทุกสิ่งที่แสดงหรือเล่นอยู่ในแอปดังกล่าว ดังนั้นโปรดระวังเกี่ยวกับรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ หรือข้อมูลที่ละเอียดอ่อนอื่นๆ"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> จะมีสิทธิ์เข้าถึงข้อมูลทั้งหมดที่ปรากฏบนหน้าจอหรือเปิดจากอุปกรณ์ของคุณขณะบันทึกหรือแคสต์ ซึ่งรวมถึงข้อมูลอย่างเช่นรหัสผ่าน รายละเอียดการชำระเงิน รูปภาพ ข้อความ และเสียงที่คุณเล่น"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"เริ่มบันทึกหรือแคสต์เลยไหม"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"บริการที่มีฟังก์ชันนี้จะมีสิทธิ์เข้าถึงข้อมูลทั้งหมดที่ปรากฏบนหน้าจอหรือเปิดจากอุปกรณ์ของคุณขณะบันทึกหรือแคสต์ ซึ่งรวมถึงข้อมูลอย่างเช่นรหัสผ่าน รายละเอียดการชำระเงิน รูปภาพ ข้อความ และเสียงที่คุณเล่น"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"ทั้งหน้าจอ"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"แอปเดียว"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"แชร์หรือบันทึกแอป"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"เริ่มบันทึกหรือแคสต์ด้วย <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> เลยไหม"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"เมื่อกำลังแชร์ บันทึก หรือแคสต์ <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> จะมีสิทธิ์เข้าถึงทุกสิ่งที่ปรากฏบนหน้าจอหรือเล่นอยู่ในอุปกรณ์ ดังนั้นโปรดระวังสิ่งต่างๆ อย่างเช่นรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ รูปภาพ รวมถึงเสียงและวิดีโอ"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"เมื่อกำลังแชร์ บันทึก หรือแคสต์แอป <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> จะมีสิทธิ์เข้าถึงทุกสิ่งที่แสดงหรือเล่นอยู่ในแอปดังกล่าว ดังนั้นโปรดระวังสิ่งต่างๆ อย่างเช่นรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ รูปภาพ รวมถึงเสียงและวิดีโอ"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"เริ่ม"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"เริ่มแคสต์เลยไหม"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"เมื่อกำลังแคสต์ Android จะมีสิทธิ์เข้าถึงทุกสิ่งที่ปรากฏบนหน้าจอหรือเล่นอยู่ในอุปกรณ์ ดังนั้นโปรดระวังสิ่งต่างๆ อย่างเช่นรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ รูปภาพ รวมถึงเสียงและวิดีโอ"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"เมื่อกำลังแคสต์แอป Android จะมีสิทธิ์เข้าถึงทุกสิ่งที่แสดงหรือเล่นอยู่ในแอปดังกล่าว ดังนั้นโปรดระวังสิ่งต่างๆ อย่างเช่นรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ รูปภาพ รวมถึงเสียงและวิดีโอ"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"เริ่มแคสต์"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"เริ่มแชร์เลยไหม"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"เมื่อกำลังแชร์ บันทึก หรือแคสต์ Android จะมีสิทธิ์เข้าถึงทุกสิ่งที่ปรากฏบนหน้าจอหรือเล่นอยู่ในอุปกรณ์ ดังนั้นโปรดระวังสิ่งต่างๆ อย่างเช่นรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ รูปภาพ รวมถึงเสียงและวิดีโอ"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"เมื่อกำลังแชร์ บันทึก หรือแคสต์แอป Android จะมีสิทธิ์เข้าถึงทุกสิ่งที่แสดงหรือเล่นอยู่ในแอปดังกล่าว ดังนั้นโปรดระวังสิ่งต่างๆ อย่างเช่นรหัสผ่าน รายละเอียดการชำระเงิน ข้อความ รูปภาพ รวมถึงเสียงและวิดีโอ"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"เริ่ม"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"การแชร์จะหยุดชั่วคราวเมื่อสลับแอป"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"แชร์แอปนี้แทน"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"เปลี่ยนกลับ"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"เปลี่ยนแอป"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"ผู้ดูแลระบบไอทีบล็อกไว้"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"การจับภาพหน้าจอปิดใช้โดยนโยบายด้านอุปกรณ์"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"ล้างทั้งหมด"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"มีการติดตั้งผู้ออกใบรับรองในอุปกรณ์นี้ อาจมีการตรวจสอบหรือแก้ไขการจราจรของข้อมูลในเครือข่ายที่ปลอดภัยของคุณ"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"ผู้ดูแลระบบได้เปิดการบันทึกกิจกรรมของเครือข่าย ซึ่งจะตรวจสอบการรับส่งข้อมูลในอุปกรณ์ของคุณ"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"ผู้ดูแลระบบได้เปิดการบันทึกกิจกรรมของเครือข่าย ซึ่งจะตรวจสอบการรับส่งข้อมูลในโปรไฟล์งานแต่ไม่ตรวจสอบในโปรไฟล์ส่วนตัวของคุณ"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"อุปกรณ์นี้เชื่อมต่ออินเทอร์เน็ตผ่าน<xliff:g id="VPN_APP">%1$s</xliff:g> ผู้ดูแลระบบไอทีสามารถดูกิจกรรมที่คุณทำในเครือข่ายรวมถึงอีเมลและข้อมูลการท่องเว็บได้"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"อุปกรณ์นี้เชื่อมต่ออินเทอร์เน็ตผ่าน<xliff:g id="VPN_APP">%1$s</xliff:g> ผู้ให้บริการ VPN สามารถดูกิจกรรมที่คุณทำในเครือข่ายซึ่งรวมถึงอีเมลและข้อมูลการท่องเว็บได้"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"อุปกรณ์นี้เชื่อมต่ออินเทอร์เน็ตผ่าน<xliff:g id="VPN_APP">%1$s</xliff:g> ผู้ดูแลระบบไอทีสามารถดูกิจกรรมที่คุณทำในเครือข่ายรวมถึงอีเมลและข้อมูลการท่องเว็บได้"</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"อุปกรณ์นี้เชื่อมต่ออินเทอร์เน็ตผ่าน <xliff:g id="VPN_APP_0">%1$s</xliff:g> และ <xliff:g id="VPN_APP_1">%2$s</xliff:g> ผู้ดูแลระบบไอทีสามารถดูกิจกรรมที่คุณทำในเครือข่าย ซึ่งรวมถึงอีเมลและข้อมูลการท่องเว็บได้"</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"แอปงานเชื่อมต่ออินเทอร์เน็ตผ่าน <xliff:g id="VPN_APP">%1$s</xliff:g> ผู้ดูแลระบบไอทีและผู้ให้บริการ VPN สามารถดูกิจกรรมที่คุณทำในเครือข่ายในแอปงานได้ ซึ่งรวมถึงอีเมลและข้อมูลการท่องเว็บ"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"แอปส่วนตัวเชื่อมต่ออินเทอร์เน็ตผ่าน<xliff:g id="VPN_APP">%1$s</xliff:g> ผู้ให้บริการ VPN สามารถดูกิจกรรมที่คุณทำในเครือข่ายซึ่งรวมถึงอีเมลและข้อมูลการท่องเว็บได้"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"ปิดใช้"</string>
     <string name="sound_settings" msgid="8874581353127418308">"เสียงและการสั่น"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"การตั้งค่า"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"ลดเสียงลงไประดับที่ปลอดภัยขึ้นแล้ว"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"เสียงอยู่ในระดับที่ดังเป็นระยะเวลานานกว่าที่แนะนำ"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"ลดเสียงให้อยู่ในระดับที่ปลอดภัยยิ่งขึ้น"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"เสียงของหูฟังอยู่ในระดับที่ดังเป็นระยะเวลานานกว่าที่แนะนำ"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"เสียงของหูฟังอยู่ในระดับที่ดังเกินขีดจำกัดความปลอดภัยสำหรับสัปดาห์นี้"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"ฟังต่อ"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"ลดเสียงลง"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"ปักหมุดแอปอยู่"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"การดำเนินการนี้จะแสดงหน้าจอนี้ไว้เสมอจนกว่าคุณจะเลิกปักหมุด แตะ \"กลับ\" และ \"ภาพรวม\" ค้างไว้เพื่อเลิกปักหมุด"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"การดำเนินการนี้จะแสดงหน้าจอนี้ไว้เสมอจนกว่าคุณจะเลิกปักหมุด แตะ \"กลับ\" และ \"หน้าแรก\" ค้างไว้เพื่อเลิกปักหมุด"</string>
@@ -621,9 +651,9 @@
     <string name="keyboard_shortcut_group_system_shortcuts_helper" msgid="4856808328618265589">"แป้นพิมพ์ลัด"</string>
     <string name="keyboard_shortcut_group_system_switch_input" msgid="952555530383268166">"สลับรูปแบบแป้นพิมพ์"</string>
     <string name="keyboard_shortcut_clear_text" msgid="4679927133259287577">"ล้างข้อความ"</string>
-    <string name="keyboard_shortcut_search_list_title" msgid="1156178106617830429">"ทางลัด"</string>
-    <string name="keyboard_shortcut_search_list_hint" msgid="5982623262974326746">"ค้นหาทางลัด"</string>
-    <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"ไม่พบทางลัด"</string>
+    <string name="keyboard_shortcut_search_list_title" msgid="1156178106617830429">"แป้นพิมพ์ลัด"</string>
+    <string name="keyboard_shortcut_search_list_hint" msgid="5982623262974326746">"ค้นหาแป้นพิมพ์ลัด"</string>
+    <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"ไม่พบแป้นพิมพ์ลัด"</string>
     <string name="keyboard_shortcut_search_category_system" msgid="1151182120757052669">"ระบบ"</string>
     <string name="keyboard_shortcut_search_category_input" msgid="5440558509904296233">"อินพุต"</string>
     <string name="keyboard_shortcut_search_category_open_apps" msgid="1450959949739257562">"แอปที่เปิดอยู่"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"เมนูเปิด/ปิด"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"หน้า <xliff:g id="ID_1">%1$d</xliff:g> จาก <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"หน้าจอล็อก"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"โทรศัพท์ปิดไปเพราะร้อนมาก"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"ขณะนี้โทรศัพท์ทำงานเป็นปกติ\nแตะเพื่อดูข้อมูลเพิ่มเติม"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"โทรศัพท์ร้อนเกินไปจึงปิดเครื่องเพื่อให้เย็นลง ขณะนี้โทรศัพท์ทำงานเป็นปกติ\n\nโทรศัพท์อาจร้อนเกินไปหากคุณ\n	• ใช้แอปที่ใช้ทรัพยากรมาก (เช่น เกม วิดีโอ หรือแอปการนำทาง)\n	• ดาวน์โหลดหรืออัปโหลดไฟล์ขนาดใหญ่\n	• ใช้โทรศัพท์ในอุณหภูมิที่สูง"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"ดูขั้นตอนในการดูแลรักษา"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"โทรศัพท์เริ่มเครื่องร้อน"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"ฟีเจอร์บางอย่างจะใช้งานได้จำกัดขณะโทรศัพท์เย็นลง\nแตะเพื่อดูข้อมูลเพิ่มเติม"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"โทรศัพท์จะพยายามลดอุณหภูมิลงโดยอัตโนมัติ คุณยังสามารถใช้โทรศัพท์ได้ แต่โทรศัพท์อาจทำงานช้าลง\n\nโทรศัพท์จะทำงานตามปกติเมื่อเย็นลงแล้ว"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"ดูขั้นตอนในการดูแลรักษา"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"ถอดปลั๊กอุปกรณ์"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"บริเวณพอร์ตชาร์จของอุปกรณ์เริ่มจะร้อนแล้ว หากมีที่ชาร์จหรืออุปกรณ์เสริม USB เสียบอยู่ ให้ถอดออกอย่างระมัดระวังเพราะสายเส้นนั้นก็อาจจะร้อนด้วยเช่นกัน"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"ขยายเป็นเต็มหน้าจอ"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"ขยายบางส่วนของหน้าจอ"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"เปิดการตั้งค่าการขยาย"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"ปิดการตั้งค่าการขยาย"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"ลากที่มุมเพื่อปรับขนาด"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"อนุญาตการเลื่อนแบบทแยงมุม"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"ปรับขนาด"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"แตะเพื่อเปิดฟีเจอร์การช่วยเหลือพิเศษ ปรับแต่งหรือแทนที่ปุ่มนี้ในการตั้งค่า\n\n"<annotation id="link">"ดูการตั้งค่า"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"ย้ายปุ่มไปที่ขอบเพื่อซ่อนชั่วคราว"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"เลิกทำ"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"นำทางลัด<xliff:g id="FEATURE_NAME">%s</xliff:g>ออกแล้ว"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"นำทางลัด <xliff:g id="FEATURE_NAME">%s</xliff:g> ออกแล้ว"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{นำทางลัด # รายการออกแล้ว}other{นำทางลัด # รายการออกแล้ว}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ย้ายไปด้านซ้ายบน"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ย้ายไปด้านขวาบน"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"นำออกจากรายการโปรด"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"ย้ายไปที่ตำแหน่ง <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"การควบคุม"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
-    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"แตะตัวควบคุมค้างไว้แล้วลากเพื่อจัดเรียงใหม่"</string>
-    <string name="controls_favorite_removed" msgid="5276978408529217272">"นำตัวควบคุมทั้งหมดออกแล้ว"</string>
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"เลือกระบบควบคุมอุปกรณ์ที่ต้องการให้เข้าถึงได้อย่างรวดเร็ว"</string>
+    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"แตะระบบควบคุมค้างไว้แล้วลากเพื่อจัดเรียงใหม่"</string>
+    <string name="controls_favorite_removed" msgid="5276978408529217272">"นำระบบควบคุมทั้งหมดออกแล้ว"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"ยังไม่ได้บันทึกการเปลี่ยนแปลง"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"ดูแอปอื่นๆ"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"จัดเรียงใหม่"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"เพิ่มตัวควบคุม"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"เพิ่มระบบควบคุม"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"กลับไปที่การแก้ไข"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"โหลดตัวควบคุมไม่ได้ ตรวจสอบแอป <xliff:g id="APP">%s</xliff:g> ให้แน่ใจว่าการตั้งค่าของแอปไม่เปลี่ยนแปลง"</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"ตัวควบคุมที่เข้ากันได้ไม่พร้อมใช้งาน"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"ลองใช้ PIN อื่น"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"ยืนยันการเปลี่ยนแปลงสำหรับ<xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"เลื่อนเพื่อดูเพิ่มเติม"</string>
+    <string name="retry_face" msgid="416380073082560186">"ลองตรวจสอบสิทธิ์ด้วยใบหน้าอีกครั้ง"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"กำลังโหลดคำแนะนำ"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"สื่อ"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"ซ่อนตัวควบคุมสื่อนี้สำหรับ <xliff:g id="APP_NAME">%1$s</xliff:g> ไหม"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"การตั้งค่า"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"กำลังเปิดเพลง <xliff:g id="SONG_NAME">%1$s</xliff:g> ของ <xliff:g id="ARTIST_NAME">%2$s</xliff:g> จาก <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> จาก <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> กำลังทำงาน"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"เล่น"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"หยุดชั่วคราว"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"แทร็กก่อนหน้า"</string>
@@ -951,7 +977,7 @@
     <string name="controls_error_generic" msgid="352500456918362905">"โหลดสถานะไม่ได้"</string>
     <string name="controls_error_failed" msgid="960228639198558525">"พบข้อผิดพลาด โปรดลองอีกครั้ง"</string>
     <string name="controls_menu_add" msgid="4447246119229920050">"เพิ่มตัวควบคุม"</string>
-    <string name="controls_menu_edit" msgid="890623986951347062">"แก้ไขตัวควบคุม"</string>
+    <string name="controls_menu_edit" msgid="890623986951347062">"แก้ไขระบบควบคุม"</string>
     <string name="controls_menu_add_another_app" msgid="8661172304650786705">"เพิ่มแอป"</string>
     <string name="controls_menu_remove" msgid="3006525275966023468">"นำแอปออก"</string>
     <string name="media_output_dialog_add_output" msgid="5642703238877329518">"เพิ่มเอาต์พุต"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"ลำโพงและจอแสดงผล"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"อุปกรณ์ที่แนะนำ"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"หยุดเซสชันที่แชร์อยู่เพื่อย้ายสื่อไปยังอุปกรณ์อื่น"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"หยุด"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"วิธีการทำงานของการออกอากาศ"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"ประกาศ"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"ผู้ที่อยู่ใกล้คุณและมีอุปกรณ์บลูทูธที่รองรับสามารถรับฟังสื่อที่คุณกำลังออกอากาศได้"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"บันทึกไม่ได้ โปรดลองอีกครั้ง"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"บันทึกไม่ได้"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"ใช้อักขระอย่างน้อย 4 ตัว"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"ใช้อักขระไม่เกิน 16 ตัว"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"ใช้อักขระไม่เกิน <xliff:g id="LENGTH">%1$d</xliff:g> ตัว"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"หมายเลขบิลด์"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"คัดลอกหมายเลขบิลด์ไปยังคลิปบอร์ดแล้ว"</string>
     <string name="basic_status" msgid="2315371112182658176">"เปิดการสนทนา"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"พบปัญหาในการอ่านเครื่องวัดแบตเตอรี่"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"แตะดูข้อมูลเพิ่มเติม"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"ไม่มีการตั้งปลุก"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ป้อนข้อมูลการล็อกหน้าจอ"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"เซ็นเซอร์ลายนิ้วมือ"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"ตรวจสอบสิทธิ์"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"เข้าถึงอุปกรณ์"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistant กำลังฟังอยู่"</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="note_task_button_label" msgid="8718616095800343136">"การจดบันทึก"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"การจดบันทึก"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"การจดบันทึก <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"ดูข้อมูลเพิ่มเติม"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"ดูข้อมูลเพิ่มเติมที่ <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"เปิด <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• แอปได้รับการตั้งค่าแล้ว"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• มีการเพิ่มบัตรลงใน Wallet อย่างน้อย 1 รายการ"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• ติดตั้งแอปกล้อง"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• แอปได้รับการตั้งค่าแล้ว"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• มีอุปกรณ์พร้อมใช้งานอย่างน้อย 1 รายการ"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"หากต้องการเพิ่มแอป Wallet เป็นทางลัด โปรดตรวจสอบว่าได้ติดตั้งแอปแล้ว"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"หากต้องการเพิ่มแอป Wallet เป็นทางลัด โปรดตรวจสอบว่าได้เพิ่มบัตรอย่างน้อย 1 ใบแล้ว"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"หากต้องการเพิ่มเครื่องมือสแกนคิวอาร์โค้ดเป็นทางลัด โปรดตรวจสอบว่าได้ติดตั้งแอปกล้องแล้ว"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"หากต้องการเพิ่มแอป Home เป็นทางลัด โปรดตรวจสอบว่าได้ติดตั้งแอปแล้ว"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• มีอุปกรณ์พร้อมใช้งานอย่างน้อย 1 รายการ"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"เลือกแอปโน้ตเริ่มต้นเพื่อใช้ทางลัดการจดบันทึก"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"เลือกแอป"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"แตะแป้นพิมพ์ลัดค้างไว้"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"ยกเลิก"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"สลับหน้าจอเลย"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"เชื่อมต่อสไตลัสกับที่ชาร์จ"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"แบตเตอรี่สไตลัสเหลือน้อย"</string>
     <string name="video_camera" msgid="7654002575156149298">"กล้องวิดีโอ"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"โทรจากโปรไฟล์นี้ไม่ได้"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"นโยบายการทำงานอนุญาตให้คุณโทรออกได้จากโปรไฟล์งานเท่านั้น"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"โทรออกจากแอปส่วนตัวไม่ได้"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"องค์กรอนุญาตให้คุณโทรออกได้จากแอปงานเท่านั้น"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"สลับไปใช้โปรไฟล์งาน"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"ปิด"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"ติดตั้งแอปโทรศัพท์ในโปรไฟล์งาน"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"ยกเลิก"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"ปรับแต่งหน้าจอล็อก"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"ปลดล็อกเพื่อปรับแต่งหน้าจอล็อก"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi ไม่พร้อมใช้งาน"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"กล้องถูกบล็อกอยู่"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"กล้องและไมโครโฟนถูกบล็อกอยู่"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"ไมโครโฟนถูกบล็อกอยู่"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"โหมดลำดับความสำคัญเปิดอยู่"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"การเรียกใช้งาน Assistant เปิดอยู่"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"กำหนดแอปการจดบันทึกเริ่มต้นในการตั้งค่า"</string>
+    <string name="install_app" msgid="5066668100199613936">"ติดตั้งแอป"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"ไมโครโฟนและกล้อง"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"การใช้แอปครั้งล่าสุด"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"ดูการเข้าถึงล่าสุด"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"เสร็จสิ้น"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"ขยายและแสดงตัวเลือก"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"ยุบ"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"ปิดแอปนี้"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> ปิดแล้ว"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"จัดการบริการ"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"จัดการการเข้าถึง"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"ใช้อยู่โดยการโทร"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"ใช้ล่าสุดโดยการโทร"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"ใช้อยู่โดย <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"ใช้ล่าสุดโดย <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"ใช้อยู่โดย <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"ใช้ล่าสุดโดย <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"ใช้อยู่โดย <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"ใช้ล่าสุดโดย <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-th/strings_tv.xml b/packages/SystemUI/res/values-th/strings_tv.xml
deleted file mode 100644
index 1df2612..0000000
--- a/packages/SystemUI/res/values-th/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"เชื่อมต่อ VPN แล้ว"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"ยกเลิกการเชื่อมต่อ VPN แล้ว"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"ผ่าน <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"การแจ้งเตือน"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"ไม่มีการแจ้งเตือน"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"ไมโครโฟนกำลังบันทึก"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"กล้องกำลังบันทึก"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"กล้องและไมโครโฟนกำลังบันทึก"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"ไมโครโฟนหยุดบันทึกแล้ว"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"กล้องหยุดบันทึกแล้ว"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"กล้องและไมโครโฟนหยุดบันทึกแล้ว"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"เริ่มบันทึกหน้าจอแล้ว"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"หยุดการบันทึกหน้าจอแล้ว"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 527a2f6..fc2d8cf 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"Na-detect ng <xliff:g id="APPNAME">%1$s</xliff:g> ang screenshot. na ito"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"Na-detect ng <xliff:g id="APPNAME">%1$s</xliff:g> at ng iba pang bukas na app ang screenshot na ito."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Idagdag sa tala"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Recorder ng Screen"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Recorder ng Screen"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Pinoproseso screen recording"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Kasalukuyang notification para sa session ng pag-record ng screen"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Simulang Mag-record?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Habang nagre-record, puwedeng ma-capture ng Android System ang anumang sensitibong impormasyong nakikita sa iyong screen o nagpe-play sa device mo. Kasama dito ang mga password, impormasyon sa pagbabayad, mga larawan, mensahe, at audio."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"I-record ang buong screen"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Mag-record ng isang app"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Habang nagre-record ka, may access ang Android sa kahit anong nakikita sa iyong screen o pine-play sa device mo. Kaya mag-ingat sa mga password, detalye ng pagbabayad, mensahe, o iba pang sensitibong impormasyon."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Habang nagre-record ka ng app, may access ang Android sa kahit anong ipinapakita o pine-play sa app na iyon. Kaya mag-ingat sa mga password, detalye ng pagbabayad, mensahe, o iba pang sensitibong impormasyon."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Simulang mag-record"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Simulan ang Pag-record?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Habang nagre-record ka, may access ang Android sa kahit anong nakikita sa iyong screen o pine-play sa device mo. Kaya mag-ingat sa mga bagay-bagay tulad ng mga password, detalye ng pagbabayad, mensahe, larawan, at audio at video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Habang nagre-record ka ng app, may access ang Android sa kahit anong ipinapakita o pine-play sa app na iyon. Kaya mag-ingat sa mga bagay-bagay tulad ng mga password, detalye ng pagbabayad, mensahe, larawan, at audio at video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Simulang mag-record"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Mag-record ng audio"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Audio ng device"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Tunog mula sa iyong device, gaya ng musika, mga tawag, at ringtone"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikropono"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Audio at mikropono ng device"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Simulan"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Simulan"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Nire-record ang screen"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Nire-record ang screen at audio"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Ipakita ang mga pagpindot sa screen"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Ibahagi"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Na-save ang pag-record ng screen"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"I-tap para tingnan"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Error sa pag-delete sa pag-record ng screen"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Nagka-error sa pag-save ng recording ng screen"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Nagkaroon ng error sa pagsisimula ng pag-record ng screen"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Nanonood sa full screen"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Para lumabas, mag-swipe mula sa itaas pababa."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"OK"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Bumalik"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Home"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Na-authenticate ang mukha"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Nakumpirma"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"I-tap ang Kumpirmahin para kumpletuhin"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Na-unlock gamit ang mukha. Pindutin ang icon ng unlock para magpatuloy."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Na-unlock gamit ang mukha"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Na-unlock gamit ang mukha. Pindutin para magpatuloy."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Nakilala ang mukha. Pindutin para magpatuloy."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Nakilala ang mukha. Pindutin ang unlock para magpatuloy."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Na-authenticate"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Kanselahin ang Pag-authenticate"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Gumamit ng PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Gumamit ng pattern"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Gumamit ng password"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Kung maling pattern ang mailalagay mo sa susunod na pagsubok, made-delete ang iyong profile sa trabaho at ang data nito."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Kung maling PIN ang mailalagay mo sa susunod na pagsubok, made-delete ang iyong profile sa trabaho at ang data nito."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Kung maling password ang mailalagay mo sa susunod na pagsubok, made-delete ang iyong profile sa trabaho at ang data nito."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"I-set up"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Huwag muna"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Kinakailangan ito para mapahusay ang seguridad at performance"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"I-set up ulit ang Pag-unlock Gamit ang Fingerprint"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Pag-unlock Gamit ang Fingerprint"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"I-set up ang Pag-unlock Gamit ang Fingerprint"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Para ma-set up ulit ang Pag-unlock Gamit ang Fingerprint, made-delete ang mga kasalukuyang larawan at modelo ng iyong fingerprint.\n\nPagkatapos ma-delete ang mga ito, kakailanganin mong i-set up ulit ang Pag-unlock Gamit ang Fingerprint para magamit ang iyong fingerprint para i-unlock ang telepono mo o i-verify na ikaw ito."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Para ma-set up ulit ang Pag-unlock Gamit ang Fingerprint, made-delete ang mga kasalukuyang larawan at modelo ng iyong fingerprint.\n\nPagkatapos ma-delete ang mga ito, kakailanganin mong i-set up ulit ang Pag-unlock Gamit ang Fingerprint para magamit ang iyong fingerprint para i-unlock ang telepono mo o i-verify na ikaw ito."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Hindi na-set up ang pag-unlock gamit ang fingerprint. Pumunta sa Mga Setting para subukan ulit."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"I-set up ulit ang Pag-unlock Gamit ang Mukha"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Pag-unlock Gamit ang Mukha"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"I-set up ang Pag-unlock Gamit ang Mukha"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Para ma-set up ulit ang Pag-unlock Gamit ang Mukha, made-delete ang iyong kasalukuyang face model.\n\nKakailanganin mong i-set up ulit ang feature na ito para magamit ang iyong mukha para i-unlock ang telepono mo."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Hindi na-set up ang pag-unlock gamit ang mukha. Pumunta sa Mga Setting para subukan ulit."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Pindutin ang fingerprint sensor"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Pindutin ang icon ng pag-unlock para magpatuloy"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Hindi makilala ang mukha. Gumamit ng fingerprint."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Mga Hearing Aid"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Mga hearing aid"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Ino-on…"</string>
     <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>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Na-unlock gamit ang mukha"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Nakilala ang mukha"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Mag-swipe pataas para subukan ulit"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Mag-swipe up para ulitin ang Pag-unlock Gamit ang Mukha"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"I-unlock para magamit ang NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Pagmamay-ari ng iyong organisasyon ang device na ito"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Pagmamay-ari ng <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> ang device na ito"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Magkakaroon ng access ang <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sa lahat ng impormasyong nakikita sa iyong screen o pine-play mula sa device mo habang nagre-record o nagka-cast. Kasama rito ang impormasyong tulad ng mga password, detalye ng pagbabayad, larawan, mensahe, at audio na pine-play mo."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Ang serbisyong nagbibigay ng function na ito ay magkakaroon ng access sa lahat ng impormasyong nakikita sa iyong screen o pine-play mula sa device mo habang nagre-record o nagka-cast. Kasama rito ang impormasyong tulad ng mga password, detalye ng pagbabayad, larawan, mensahe, at audio na pine-play mo."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Magsimulang mag-record o mag-cast?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Simulang mag-record o mag-cast gamit ang <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Payagan ang <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> na magbahagi o mag-record?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Buong screen"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Isang app"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Kapag nagbabahagi, nagre-record, o nagka-cast ka, may access ang <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sa kahit anong nakikita sa iyong screen o pine-play sa device mo. Kaya mag-ingat sa mga password, detalye ng pagbabayad, mensahe, o iba pang sensitibong impormasyon."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Kapag nagbabahagi, nagre-record, o nagka-cast ka ng app, may access ang <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sa kahit anong ipinapakita o pine-play sa app na iyon. Kaya mag-ingat sa mga password, detalye ng pagbabayad, mensahe, o iba pang impormasyon."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Magpatuloy"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Ibahagi o i-record ang isang app"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Payagan ang app na ito na magbahagi o mag-record?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Kapag nagbabahagi, nagre-record, o nagka-cast ka, may access ang app na ito sa kahit anong nakikita sa iyong screen o pine-play sa device mo. Kaya mag-ingat sa mga password, detalye ng pagbabayad, mensahe, o iba pang sensitibong impormasyon."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Kapag nagbabahagi, nagre-record, o nagka-cast ka ng app, may access ang app na ito sa kahit anong ipinapakita o pine-play sa app na iyon. Kaya mag-ingat sa mga password, detalye ng pagbabayad, mensahe, o iba pang impormasyon."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Magkakaroon ng access ang <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sa lahat ng impormasyong nakikita sa iyong screen o pine-play mula sa device mo habang nagre-record o nagka-cast. Kasama rito ang impormasyong tulad ng mga password, detalye ng pagbabayad, larawan, mensahe, at audio na pine-play mo."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Magsimulang mag-record o mag-cast?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Ang serbisyong nagbibigay ng function na ito ay magkakaroon ng access sa lahat ng impormasyong nakikita sa iyong screen o pine-play mula sa device mo habang nagre-record o nagka-cast. Kasama rito ang impormasyong tulad ng mga password, detalye ng pagbabayad, larawan, mensahe, at audio na pine-play mo."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Buong screen"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Isang app"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Ibahagi o i-record ang isang app"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Simulang mag-record o mag-cast gamit ang <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Kapag nagbabahagi, nagre-record, o nagka-cast ka, may access ang <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sa kahit anong nakikita sa iyong screen o pine-play sa device mo. Kaya mag-ingat sa mga bagay-bagay tulad ng mga password, detalye ng pagbabayad, mensahe, larawan, at audio at video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Kapag nagbabahagi, nagre-record, o nagka-cast ka ng app, may access ang <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sa kahit anong ipinapakita o pine-play sa app na iyon. Kaya mag-ingat sa mga bagay-bagay tulad ng mga password, detalye ng pagbabayad, mensahe, larawan, at audio at video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Simulan"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Simulan ang pag-cast?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Kapag nagka-cast ka, may access ang Android sa kahit anong nakikita sa iyong screen o pine-play sa device mo. Kaya mag-ingat sa mga bagay-bagay tulad ng mga password, detalye ng pagbabayad, mensahe, larawan, at audio at video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Kapag nagka-cast ka ng app, may access ang Android sa kahit anong ipinapakita o pine-play sa app na iyon. Kaya mag-ingat sa mga bagay-bagay tulad ng mga password, detalye ng pagbabayad, mensahe, larawan, at audio at video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Simulan ang pag-cast"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Simulan ang pagbabahagi?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Kapag nagbabahagi, nagre-record, o nagka-cast ka, may access ang Android sa kahit anong nakikita sa iyong screen o pine-play sa device mo. Kaya mag-ingat sa mga bagay-bagay tulad ng mga password, detalye ng pagbabayad, mensahe, larawan, at audio at video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Kapag nagbabahagi, nagre-record, o nagka-cast ka ng app, may access ang Android sa kahit anong ipinapakita o pine-play sa app na iyon. Kaya mag-ingat sa mga bagay-bagay tulad ng mga password, detalye ng pagbabayad, mensahe, larawan, at audio at video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Simulan"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Magpo-pause ang pagbabahagi kapag lumipat ka ng app"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Ibahagi na lang ang app na ito"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Bumalik sa dati"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Lumipat ng app"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Na-block ng iyong IT admin"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Naka-disable ang pag-screen capture ayon sa patakaran ng device"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"I-clear lahat"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"May naka-install sa device na ito na isang awtoridad sa certificate. Maaaring subaybayan o baguhin ang iyong ligtas na trapiko sa network."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Na-on ng iyong admin ang pag-log sa network, na sumusubaybay sa trapiko sa device mo."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Na-on ng iyong admin ang pag-log sa network, na sumusubaybay sa trapiko sa profile mo sa trabaho pero hindi sa iyong personal na profile."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Nakakonekta ang device na ito sa internet sa pamamagitan ng <xliff:g id="VPN_APP">%1$s</xliff:g>. Nakikita ng iyong IT admin ang aktibidad ng network, kasama ang mga email at data mula sa pag-browse."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Nakakonekta ang device na ito sa internet sa pamamagitan ng <xliff:g id="VPN_APP">%1$s</xliff:g>. Nakikita ng VPN provider ang iyong aktibidad ng network, kasama ang mga email at data mula sa pagba-browse."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Nakakonekta ang device na ito sa internet sa pamamagitan ng <xliff:g id="VPN_APP">%1$s</xliff:g>. Nakikita ng iyong IT admin ang aktibidad ng network mo, kasama ang mga email at data mula sa pagba-browse."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Nakakonekta ang device na ito sa internet sa pamamagitan ng <xliff:g id="VPN_APP_0">%1$s</xliff:g> at <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Nakikita ng iyong IT admin ang aktibidad ng network, kasama ang mga email at data mula sa pag-browse."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Nakakonekta sa internet ang iyong mga app para sa trabaho sa pamamagitan ng <xliff:g id="VPN_APP">%1$s</xliff:g>. Nakikita ng iyong IT admin at VPN provider ang aktibidad ng network sa app para sa trabaho, kasama ang mga email at data mula sa pag-browse."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Nakakonekta ang iyong mga personal na app sa internet sa pamamagitan ng <xliff:g id="VPN_APP">%1$s</xliff:g>. Nakikita ng iyong VPN provider ang aktibidad ng network, kasama ang mga email at data mula sa pag-browse."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"i-disable"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Tunog at pag-vibrate"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Mga Setting"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Hininaan sa mas ligtas na volume"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Naging malakas ang volume nang mas matagal sa inirerekomenda"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Ibinaba sa mas ligtas na level ang volume"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Naging malakas ang volume ng headphones nang mas matagal sa inirerekomenda"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Lampas na sa ligtas na limitasyon para sa linggong ito ang volume ng headphone"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Magpatuloy sa pakikinig"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Hinaan"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Naka-pin ang app"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Pinapanatili nitong nakikita ito hanggang sa mag-unpin ka. Pindutin nang matagal ang Bumalik at Overview upang mag-unpin."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Pinapanatili nitong nakikita ito hanggang sa mag-unpin ka. Pindutin nang matagal ang Bumalik at Home upang mag-unpin."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Power menu"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Page <xliff:g id="ID_1">%1$d</xliff:g> ng <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Lock screen"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Na-off ang telepono dahil sa init"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Maayos na ngayong gumagana ang iyong telepono.\nMag-tap para sa higit pang impormasyon"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Napakainit ng telepono, kaya nag-off ito para lumamig. Maayos na itong gumagana.\n\nMaaaring lubos na uminit ang telepono kapag:\n	• Gumamit ka ng resource-intensive na app (gaya ng app para sa gaming, video, o navigation)\n	• Nag-download o nag-upload ka ng malaking file\n • Ginamit mo ito sa mainit na lugar"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Tingnan ang mga hakbang sa pangangalaga"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Umiinit ang telepono"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Limitado ang ilang feature habang nagku-cool down ang telepono.\nMag-tap para sa higit pang impormasyon"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Awtomatikong susubukan ng iyong telepono na mag-cool down. Magagamit mo pa rin ang iyong telepono, ngunit maaaring mas mabagal ang paggana nito.\n\nKapag nakapag-cool down na ang iyong telepono, gagana na ito nang normal."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Tingnan ang mga hakbang sa pangangalaga"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Bunutin sa saksakan ang device"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Umiinit ang iyong device malapit sa charging port. Kung nakakonekta ito sa charger o USB accessory, bunutin ito sa saksakan, at mag-ingat dahil posibleng mainit din ang cable."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"I-magnify ang buong screen"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"I-magnify ang isang bahagi ng screen"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Buksan ang mga setting ng pag-magnify"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Isara ang mga setting ng pag-magnify"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"I-drag ang sulok para i-resize"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Payagan ang diagonal na pag-scroll"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"I-resize"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"alisin sa paborito"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Ilipat sa posisyong <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Mga Kontrol"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Pumili ng mga kontrol ng device para mabilisang mag-access"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"I-hold at i-drag para baguhin ang pagkakaayos ng mga kontrol"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Inalis ang lahat ng kontrol"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Hindi na-save ang mga pagbabago"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Sumubok ng ibang PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Kumpirmahin ang pagbabago para sa <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Mag-swipe para tumingin ng higit pa"</string>
+    <string name="retry_face" msgid="416380073082560186">"Subukan ulit ang pag-authenticate ng mukha"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Nilo-load ang rekomendasyon"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"itago ang kontrol sa media na ito para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Mga Setting"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Nagpe-play ang <xliff:g id="SONG_NAME">%1$s</xliff:g> ni/ng <xliff:g id="ARTIST_NAME">%2$s</xliff:g> mula sa <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> sa <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"Tumatakbo ang <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"I-play"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"I-pause"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Nakaraang track"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Mga Speaker at Display"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Mga Iminumungkahing Device"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Ihinto ang iyong nakabahaging session para maglipat ng media sa ibang device"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Ihinto"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Paano gumagana ang pag-broadcast"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Broadcast"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Makakapakinig ang mga taong malapit sa iyo na may mga compatible na Bluetooth device sa media na bino-broadcast mo"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Hindi ma-save. Subukan ulit."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Hindi ma-save."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Gumamit ng hindi bababa sa 4 na character"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Gumamit ng mas kaunti sa 16 na character"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Gumamit ng mas kaunti sa <xliff:g id="LENGTH">%1$d</xliff:g> (na) character"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Numero ng build"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Nakopya sa clipboard ang numero ng build."</string>
     <string name="basic_status" msgid="2315371112182658176">"Buksan ang pag-uusap"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Nagkaproblema sa pagbabasa ng iyong battery meter"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"I-tap para sa higit pang impormasyon"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Walang alarm"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ilagay ang lock ng screen"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Sensor para sa fingerprint"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"i-authenticate"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"ilagay ang device"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Nakikinig ang Assistant"</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="note_task_button_label" msgid="8718616095800343136">"Pagtatala"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Pagtatala"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Pagtatala, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Matuto pa"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Matuto pa sa <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Buksan ang <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Na-set up ang app"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• May kahit isang card na idinagdag sa Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Mag-install ng camera app"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Na-set up ang app"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• May kahit isang device na available"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Para maidagdag ang Wallet app bilang shortcut, siguraduhing naka-install ang app"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Para maidagdag ang Wallet app bilang shortcut, siguraduhing may naidagdag na kahit isang card man lang"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Para maidagdag ang scanner ng QR code bilang shortcut, siguraduhing may naka-install na camera app"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Para maidagdag ang Home app bilang shortcut, siguraduhing naka-install ang app"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• May kahit isang device na available"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Pumili ng default na app ng mga tala para magamit ang shortcut sa paggawa ng tala"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Pumili ng app"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Pindutin nang matagal: shortcut"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Kanselahin"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Lumipat na ng screen"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Ikonekta sa charger ang iyong stylus"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Paubos na ang baterya ng stylus"</string>
     <string name="video_camera" msgid="7654002575156149298">"Video camera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Hindi puwedeng tumawag mula sa profile na ito"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Pinapayagan ka ng iyong patakaran sa trabaho na tumawag lang mula sa profile sa trabaho"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Hindi puwedeng tumawag mula sa personal na app"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Pinapayagan ka lang ng iyong organisasyon na tumawag mula sa mga app para sa trabaho"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Lumipat sa profile sa trabaho"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Isara"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Mag-install ng phone app para sa trabaho"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Kanselahin"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"I-customize ang lock screen"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"I-unlock para i-customize ang lock screen"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Hindi available ang Wi-Fi"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Naka-block ang camera"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Naka-block ang camera at mikropono"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Naka-block ang mikropono"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Naka-on ang Priority mode"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Naka-on ang atensyon ng Assistant"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Magtakda ng default na app sa pagtatala sa Mga Setting"</string>
+    <string name="install_app" msgid="5066668100199613936">"I-install ang app"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikropono at Camera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Kamakailang paggamit ng app"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Tingnan ang kamakailang access"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Tapos na"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"I-expand at ipakita ang mga opsyon"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"I-collapse"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Isara ang app na ito"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Sinara ang <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Pamahalaan ang serbisyo"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Pamahalaan ang access"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Ginagamit ng tawag sa telepono"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Kamakailang ginamit sa tawag sa telepono"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Ginagamit ng <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Kamakailang ginamit ng <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Ginagamit ng <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Kamakailang ginamit ng <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Ginagamit ng <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Kamakailang ginamit ng <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-tl/strings_tv.xml b/packages/SystemUI/res/values-tl/strings_tv.xml
deleted file mode 100644
index 890ccd4..0000000
--- a/packages/SystemUI/res/values-tl/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"Nakakonekta ang VPN"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"Nakadiskonekta ang VPN"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Sa pamamagitan ng <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Mga Notification"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Walang Notification"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Nagre-record ang Mikropono"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Nagre-record ang Camera"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Nagre-record ang Camera at Mikropono"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Huminto sa pag-record ang Mikropono"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Huminto sa pag-record ang Camera"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Huminto sa pag-record ang Camera at Mikropono"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Sinimulan ang pag-record ng screen"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Itinigil ang pag-record ng screen"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index cb50462..803acae 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB\'yi etkinleştir"</string>
     <string name="learn_more" msgid="4690632085667273811">"Daha fazla bilgi"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Ekran görüntüsü"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock devre dışı"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Artırılmış Kilit Açma devre dışı"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"bir resim gönderildi"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Ekran görüntüsü kaydediliyor..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Ekran görüntüsü iş profiline kaydediliyor…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> bu ekran görüntüsünü algıladı."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> ve diğer açık uygulamalar bu ekran görüntüsünü algıladı."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Nota ekle"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Ekran Kaydedicisi"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Ekran Kaydedicisi"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Ekran kaydı işleniyor"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ekran kaydı oturumu için devam eden bildirim"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Kayıt başlatılsın mı?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Kayıt sırasında Android Sistemi, ekranınızda görünen veya cihazınızda oynatılan hassas bilgileri yakalayabilir. Buna şifreler, ödeme bilgileri, fotoğraflar, mesajlar ve sesler dahildir."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Tüm ekranı kaydedin"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Tek bir uygulamayı kaydedin"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Kayıt özelliğini kullandığınızda Android, ekranınızda görünen veya cihazınızda oynatılan her şeye erişebilir. Dolayısıyla şifreler, ödeme ayrıntıları, mesajlar veya diğer hassas bilgiler konusunda dikkatli olun."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Bir uygulamayı kaydetme özelliğini kullandığınızda Android, söz konusu uygulamada gösterilen veya oynatılan her şeye erişebilir. Dolayısıyla şifreler, ödeme ayrıntıları, mesajlar veya diğer hassas bilgiler konusunda dikkatli olun."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Kaydı başlat"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Kayıt başlatılsın mı?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Kayıt özelliğini kullandığınızda Android, ekranınızda gösterilen veya cihazınızda oynatılan her şeye erişebilir. Bu nedenle şifre, ödeme ayrıntıları, mesaj, fotoğraf, ses ve video gibi öğeler konusunda dikkatli olun."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Bir uygulamayı kaydettiğinizde Android, söz konusu uygulamada gösterilen veya oynatılan her şeye erişebilir. Bu nedenle şifre, ödeme ayrıntıları, mesaj, fotoğraf, ses ve video gibi öğeler konusunda dikkatli olun."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Kaydı başlat"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Ses kaydet"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Cihaz sesi"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Müzik, aramalar, zil sesleri gibi cihazınızdan sesler"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Cihaz sesi ve mikrofonu"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Başlat"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Başlat"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Ekran kaydediliyor"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Ekran ve ses kaydediliyor"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Ekrana dokunmaları göster"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Paylaş"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Ekran kaydı kaydedildi"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Görüntülemek için dokunun"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Ekran kaydı silinirken hata oluştu"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Ekran kaydı saklanırken hata oluştu"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Ekran kaydı başlatılırken hata oluştu"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Tam ekran olarak görüntüleme"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Çıkmak için yukarıdan aşağıya doğru hızlıca kaydırın."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Anladım"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Geri"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Ana sayfa"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menü"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Yüz kimliği doğrulandı"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Onaylandı"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tamamlamak için Onayla\'ya dokunun"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Kilit, yüzünüzle açıldı. Kilit açma simgesine basın."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Cihazın kilidini yüzünüzle açtınız"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Cihazın kilidini yüzünüzle açtınız. Devam etmek için basın."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Yüzünüz tanındı. Devam etmek için basın."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Yüzünüz tanındı. Kilit açma simgesine basın."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Kimliği Doğrulandı"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Kimlik doğrulamayı iptal et"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN kullan"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Deseni kullan"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Şifre kullan"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Bir sonraki denemenizde yanlış desen girerseniz iş profiliniz ve verileri silinir."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Bir sonraki denemenizde yanlış PIN girerseniz iş profiliniz ve verileri silinir."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Bir sonraki denemenizde yanlış şifre girerseniz iş profiliniz ve verileri silinir."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Yapılandır"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Şimdi değil"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Bu, güvenliğin ve performansın artması için gereklidir"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Parmak İzi Kilidi\'ni tekrar kurun"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Parmak İzi Kilidi"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Parmak İzi Kilidi\'ni kurun"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Parmak İzi Kilidi\'ni tekrar kurmak için mevcut parmak izi görüntüleriniz ve modelleriniz silinir.\n\nBunlar silindikten sonra, parmak izinizi kullanarak telefonunuzun kilidini açmak veya kimliğinizi doğrulamak için Parmak İzi Kilidi\'ni tekrar kurmanız gerekir."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Parmak İzi Kilidi\'ni tekrar kurmak için mevcut parmak izi görüntüleriniz ve modelleriniz silinir.\n\nBunlar silindikten sonra, parmak izinizi kullanarak telefonunuzun kilidini açmak veya kimliğinizi doğrulamak için Parmak İzi Kilidi\'ni tekrar kurmanız gerekir."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Parmak izi kilidi kurulamadı. Tekrar denemek için Ayarlar\'a gidin."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Yüz Tanıma Kilidi\'ni tekrar kurun"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Yüz Tanıma Kilidi"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Yüz Tanıma Kilidi\'ni kurun"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Yüz Tanıma Kilidi\'ni tekrar kurmak için mevcut yüz modeliniz silinir.\n\nYüzünüzü kullanarak telefonunuzun kilidini açmak için bu özelliği yeniden kurmanız gerekir."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Yüz tanıma kilidi kurulamadı. Tekrar denemek için Ayarlar\'a gidin."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Parmak izi sensörüne dokunun"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Devam etmek için kilit açma simgesine basın"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Yüz tanınamadı. Bunun yerine parmak izi kullanın."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Ses"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Mikrofonlu kulaklık"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Giriş"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"İşitme Cihazları"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"İşitme cihazları"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Açılıyor…"</string>
     <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>
@@ -269,7 +285,7 @@
     <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>
     <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_label" msgid="4904634272006284185">"El feneri"</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>
     <string name="quick_settings_cellular_detail_data_usage" msgid="6105969068871138427">"Veri kullanımı"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Cihazın kilidini yüzünüzle açtınız"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Yüzünüz tanındı"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Tekrar denemek için yukarı kaydırın"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Yüz Tanıma Kilidi\'ni tekrar denemek için yukarı kaydırın"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC\'yi kullanmak için kilidi açın"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Bu cihaz, kuruluşunuza ait"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Bu cihaz <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> adlı kuruluşa ait"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>, ekranınızda görünen veya kayıt ya da yayın sırasında cihazınızdan oynatılan tüm bilgilere erişecektir. Bu bilgiler arasında şifreler, ödeme detayları, fotoğraflar, mesajlar ve çaldığınız sesler gibi bilgiler yer alır."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Bu işlevi sağlayan hizmet, ekranınızda görünen veya kayıt ya da yayın sırasında cihazınızdan oynatılan tüm bilgilere erişecektir. Bu bilgiler arasında şifreler, ödeme detayları, fotoğraflar, mesajlar ve çaldığınız sesler gibi bilgiler yer alır."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Kayıt veya yayınlama başlatılsın mı?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ile kayıt veya yayınlama başlatılsın mı?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> uygulamasının paylaşmasına veya kaydetmesine izin verilsin mi?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Tüm ekran"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Tek bir uygulama"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Paylaşım, kayıt ve yayınlama özelliklerini kullandığınızda <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>, ekranınızda görünen veya cihazınızda oynatılan her şeye erişebilir. Dolayısıyla şifreler, ödeme ayrıntıları, mesajlar veya diğer hassas bilgiler konusunda dikkatli olun."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Bir uygulamayı paylaşma, kaydetme ve yayınlama özelliklerini kullandığınızda <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>, söz konusu uygulamada gösterilen veya oynatılan her şeye erişebilir. Dolayısıyla şifreler, ödeme ayrıntıları, mesajlar veya diğer hassas bilgiler konusunda dikkatli olun."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Devam"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Uygulamayı paylaşın veya kaydedin"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Bu uygulamanın paylaşım ve kayıt yapmasına izin verilsin mi?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Paylaşım, kayıt ve yayınlama özelliklerini kullandığınızda, ekranınızda görünen veya cihazınızda oynatılan her şeye erişebilir. Dolayısıyla şifreler, ödeme ayrıntıları, mesajlar veya diğer hassas bilgiler konusunda dikkatli olun."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Bir uygulamayı paylaşma, kaydetme ve yayınlama özelliklerini kullandığınızda , söz konusu uygulamada gösterilen veya oynatılan her şeye erişebilir. Dolayısıyla şifreler, ödeme ayrıntıları, mesajlar veya diğer hassas bilgiler konusunda dikkatli olun."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>, ekranınızda görünen veya kayıt ya da yayın sırasında cihazınızdan oynatılan tüm bilgilere erişecektir. Bu bilgiler arasında şifreler, ödeme detayları, fotoğraflar, mesajlar ve çaldığınız sesler gibi bilgiler yer alır."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Kaydetme veya yayınlama başlatılsın mı?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Bu işlevi sağlayan hizmet, ekranınızda görünen veya kayıt ya da yayın sırasında cihazınızdan oynatılan tüm bilgilere erişecektir. Bu bilgiler arasında şifreler, ödeme detayları, fotoğraflar, mesajlar ve çaldığınız sesler gibi bilgiler yer alır."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Tüm ekran"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Tek bir uygulama"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Uygulamayı paylaşın veya kaydedin"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ile kayıt veya yayınlama başlatılsın mı?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Paylaşma, kaydetme ve yayınlama özelliklerini kullandığınızda <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>, ekranınızda görünen veya cihazınızda oynatılan her şeye erişebilir. Bu nedenle şifre, ödeme ayrıntıları, mesaj, fotoğraf, ses ve video gibi öğeler konusunda dikkatli olun."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Bir uygulamayı paylaştığınızda, kaydettiğinizde veya yayınladığınızda <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>, söz konusu uygulamada gösterilen veya oynatılan her şeye erişebilir. Bu nedenle şifre, ödeme ayrıntıları, mesaj, fotoğraf, ses ve video gibi öğeler konusunda dikkatli olun."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Başlat"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Yayın başlatılsın mı?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Yayınlama özelliğini kullandığınızda Android, ekranınızda görünen veya cihazınızda oynatılan her şeye erişebilir. Bu nedenle şifre, ödeme ayrıntıları, mesaj, fotoğraf, ses ve video gibi öğeler konusunda dikkatli olun."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Bir uygulamayı yayınladığınızda Android, söz konusu uygulamada gösterilen veya oynatılan her şeye erişebilir. Bu nedenle şifre, ödeme ayrıntıları, mesaj, fotoğraf, ses ve video gibi öğeler konusunda dikkatli olun."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Yayını başlat"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Paylaşma başlatılsın mı?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Paylaşma, kaydetme veya yayınlama özelliğini kullandığınızda Android, ekranınızda gösterilen veya cihazınızda oynatılan her şeye erişebilir. Bu nedenle şifre, ödeme ayrıntıları, mesaj, fotoğraf, ses ve video gibi öğeler konusunda dikkatli olun."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Bir uygulamayı paylaştığınızda, kaydettiğinizde veya yayınladığınızda Android, söz konusu uygulamada gösterilen veya oynatılan her şeye erişebilir. Bu nedenle şifre, ödeme ayrıntıları, mesaj, fotoğraf, ses ve video gibi öğeler konusunda dikkatli olun."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Başlat"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Uygulama değiştirdiğinizde paylaşım duraklatılır"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Bunun yerine bu uygulamayı paylaşın"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Geri dön"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Uygulama değiştirme"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"BT yöneticiniz tarafından engellendi"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Ekran görüntüsü alma, cihaz politikası tarafından devre dışı bırakıldı"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Tümünü temizle"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Bu cihazda bir sertifika yetkilisi yüklü. Güvenli ağ trafiğiniz izlenebilir veya değiştirilebilir."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Yöneticiniz,cihazınızdaki trafiği izleyen ağ günlük kaydını açtı."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Yöneticiniz, iş profilinizdeki trafiği izleyen ancak kişisel profilinizdeki trafiği izlemeyen ağ günlük kaydını açtı."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Bu cihaz internete <xliff:g id="VPN_APP">%1$s</xliff:g> üzerinden bağlı. E-postalar ve tarama verileri dahil olmak üzere ağ etkinliğiniz, BT yöneticinize görünür."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Bu cihaz internete <xliff:g id="VPN_APP">%1$s</xliff:g> üzerinden bağlı. VPN sağlayıcınız; e-postalar ve tarama verileri de dahil olmak üzere ağ etkinliğinizi görebilir."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Bu cihaz internete <xliff:g id="VPN_APP">%1$s</xliff:g> üzerinden bağlı. E-postalar ve tarama verileri dahil olmak üzere ağ etkinliğiniz, BT yöneticinize görünür."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Bu cihaz internete <xliff:g id="VPN_APP_0">%1$s</xliff:g> ve <xliff:g id="VPN_APP_1">%2$s</xliff:g> üzerinden bağlı. E-postalar ve tarama verileri dahil olmak üzere ağ etkinliğiniz, BT yöneticinize görünür."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"İş uygulamalarınız internete <xliff:g id="VPN_APP">%1$s</xliff:g> üzerinden bağlı. E-postalar ve tarama verileri dahil olmak üzere iş uygulamalarındaki ağ etkinliğiniz, BT yöneticinize ve VPN sağlayıcınıza görünür."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Kişisel uygulamalarınız internete <xliff:g id="VPN_APP">%1$s</xliff:g> üzerinden bağlı. E-postalar ve tarama verileri dahil olmak üzere ağ etkinliğiniz, VPN sağlayıcınıza görünür."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"devre dışı bırak"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Ses ve titreşim"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Ayarlar"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Ses, sağlık açısından daha güvenli bir seviyeye düşürüldü"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Ses, önerilenden daha uzun süredir yüksek seviyede"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Ses düzeyi daha güvenli bir düzeye indirildi"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Ses, önerilenden daha uzun süredir yüksek düzeydeydi"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Bu hafta kulaklığın ses düzeyi güvenli sınırı aştı"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Dinlemeye devam"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Sesi kıs"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Uygulama sabitlendi"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Bu işlem, siz sabitlemeyi kaldırana kadar ekranı görünür durumda tutar. Sabitlemeyi kaldırmak için Geri\'ye ve Genel Bakış\'a dokunup basılı tutun."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Bu işlem, siz sabitlemeyi kaldırana kadar ekranı görünür durumda tutar. Sabitlemeyi kaldırmak için Geri\'ye ve Ana sayfaya dokunup basılı tutun."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Güç menüsü"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Sayfa <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Kilit ekranı"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Telefon ısındığından kapatıldı"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Telefonunuz şu anda normal bir şekilde çalışıyor.\nDaha fazla bilgi için dokunun"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefonunuz çok ısındığından soğuması için kapatıldı ve şu anda normal bir şekilde çalışıyor.\n\nTelefon şu koşullarda çok ısınabilir:\n	• Yoğun kaynak gerektiren uygulamalar (oyun, video veya gezinme uygulamaları gibi) kullanma\n	• Büyük dosyalar indirme veya yükleme\n	• Telefonu sıcak yerlerde kullanma"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Bakımla ilgili adımlara bakın"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefon ısınıyor"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Telefon soğurken bazı özellikler sınırlı olarak kullanılabilir.\nDaha fazla bilgi için dokunun"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Telefonunuz otomatik olarak soğumaya çalışacak. Bu sırada telefonunuzu kullanmaya devam edebilirsiniz ancak uygulamalar daha yavaş çalışabilir.\n\nTelefonunuz soğuduktan sonra normal şekilde çalışacaktır."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Bakımla ilgili adımlara bakın"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Cihazınızın fişini çekin"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Cihazınız, şarj yuvasının yakınındayken ısınıyor. Şarj cihazına veya USB aksesuarına bağlıysa cihazı çıkarın. Ayrıca, kablo sıcak olabileceği için dikkatli olun."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Tam ekran büyütme"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ekranın bir parçasını büyütün"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Büyütme ayarlarını aç"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Büyütme ayarlarını kapat"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Yeniden boyutlandırmak için köşeyi sürükleyin"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Çapraz kaydırmaya izin ver"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Yeniden boyutlandır"</string>
@@ -850,7 +875,7 @@
     <string name="accessibility_magnification_bottom_handle" msgid="6531646968813821258">"Alt tutma yeri"</string>
     <string name="accessibility_magnification_settings_panel_description" msgid="8174187340747846953">"Büyütme ayarları"</string>
     <string name="accessibility_magnifier_size" msgid="3038755600030422334">"Büyüteç boyutu"</string>
-    <string name="accessibility_magnification_zoom" msgid="4222088982642063979">"Zoom"</string>
+    <string name="accessibility_magnification_zoom" msgid="4222088982642063979">"Yakınlaştır"</string>
     <string name="accessibility_magnification_medium" msgid="6994632616884562625">"Orta"</string>
     <string name="accessibility_magnification_small" msgid="8144502090651099970">"Küçük"</string>
     <string name="accessibility_magnification_large" msgid="6602944330021308774">"Büyük"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"favorilerden kaldırın"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>. konuma taşı"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Kontroller"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Hızlı şekilde erişmek için cihaz denetimlerini seçin"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Denetimleri yeniden düzenlemek için basılı tutup sürükleyin"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Tüm denetimler kaldırıldı"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Değişiklikler kaydedilmedi"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Tüm uygulamaları göster"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Yeniden düzenle"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Kontrol ekle"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"Denetim ekle"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"Düzenlemeye dön"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"Kontroller yüklenemedi. Uygulama ayarlarının değişmediğinden emin olmak için <xliff:g id="APP">%s</xliff:g> uygulamasını kontrol edin."</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"Uyumlu kontrol bulunamadı"</string>
@@ -903,7 +927,7 @@
     <string name="controls_dialog_message" msgid="342066938390663844">"<xliff:g id="APP">%s</xliff:g> tarafından önerildi"</string>
     <string name="controls_tile_locked" msgid="731547768182831938">"Cihaz kilitlendi"</string>
     <string name="controls_settings_show_controls_dialog_title" msgid="3357852503553809554">"Cihazlar kilit ekranında gösterilip buradan kontrol edilsin mi?"</string>
-    <string name="controls_settings_show_controls_dialog_message" msgid="7666211700524587969">"Kilit ekranına harici cihazlarınız için kontroller ekleyebilirsiniz.\n\nCihaz uygulamanız, bazı cihazları telefonunuzun veya tabletinizin kilidini açmadan kontrol etmenize izin verebilir.\n\nAyarlar\'da istediğiniz zaman değişiklik yapabilirsiniz."</string>
+    <string name="controls_settings_show_controls_dialog_message" msgid="7666211700524587969">"Kilit ekranına harici cihazlarınız için denetimler ekleyebilirsiniz.\n\nCihaz uygulamanız, bazı cihazları telefonunuzun veya tabletinizin kilidini açmadan denetlemenize izin verebilir.\n\nAyarlar\'da istediğiniz zaman değişiklik yapabilirsiniz."</string>
     <string name="controls_settings_trivial_controls_dialog_title" msgid="7593188157655036677">"Cihazlar kilit ekranından kontrol edilsin mi?"</string>
     <string name="controls_settings_trivial_controls_dialog_message" msgid="397178734990952575">"Bazı cihazları telefonunuzun veya tabletinizin kilidini açmadan kontrol edebilirsiniz.Hangi cihazların bu şekilde kontrol edilebileceğini cihaz uygulamanız belirler."</string>
     <string name="controls_settings_dialog_neutral_button" msgid="4514446354793124140">"Hayır, teşekkürler"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Başka bir PIN deneyin"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> için değişikliği onaylayın"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Diğer öğeleri görmek için hızlıca kaydırın"</string>
+    <string name="retry_face" msgid="416380073082560186">"Yüzle kimlik doğrulamayı yeniden deneyin"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Öneriler yükleniyor"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Medya"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> için bu medya kontrolü gizlensin mi?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Ayarlar"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> uygulamasından <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, <xliff:g id="SONG_NAME">%1$s</xliff:g> şarkısı çalıyor"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> çalışıyor"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Çal"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Duraklat"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Önceki parça"</string>
@@ -953,7 +979,7 @@
     <string name="controls_menu_add" msgid="4447246119229920050">"Denetim ekle"</string>
     <string name="controls_menu_edit" msgid="890623986951347062">"Denetimleri düzenle"</string>
     <string name="controls_menu_add_another_app" msgid="8661172304650786705">"Uygulama ekle"</string>
-    <string name="controls_menu_remove" msgid="3006525275966023468">"Uygulamayı kaldır"</string>
+    <string name="controls_menu_remove" msgid="3006525275966023468">"Uygulama kaldır"</string>
     <string name="media_output_dialog_add_output" msgid="5642703238877329518">"Çıkışlar ekleyin"</string>
     <string name="media_output_dialog_group" msgid="5571251347877452212">"Grup"</string>
     <string name="media_output_dialog_single_device" msgid="3102758980643351058">"1 cihaz seçildi"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"%%<xliff:g id="PERCENTAGE">%1$d</xliff:g>"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Hoparlörler ve Ekranlar"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Önerilen Cihazlar"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Medyayı başka bir cihaza taşımak için paylaşılan oturumunuzu durdurun"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Durdur"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Yayınlamanın işleyiş şekli"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Anons"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Yakınınızda ve uyumlu Bluetooth cihazları olan kişiler yayınladığınız medya içeriğini dinleyebilir"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Kaydedilemiyor. Tekrar deneyin."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Kaydedilemiyor."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"En az 4 karakter kullanın."</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"En fazla 16 karakter kullanın"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"En fazla <xliff:g id="LENGTH">%1$d</xliff:g> karakter kullanın"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Derleme numarası"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Derleme numarası panoya kopyalandı."</string>
     <string name="basic_status" msgid="2315371112182658176">"Görüşmeyi aç"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Pil ölçeriniz okunurken sorun oluştu"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Daha fazla bilgi için dokunun"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Alarm yok"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ekran kilidini gir"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Parmak izi sensörü"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"kimlik doğrulaması yapın"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"cihaz girin"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Asistan dinliyor"</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="note_task_button_label" msgid="8718616095800343136">"Not alma"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Not alma"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Not alma, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Daha fazla bilgi"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Daha fazla bilgiyi <xliff:g id="URL">%s</xliff:g> sayfasında bulabilirsiniz"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> uygulamasını aç"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Uygulama kurulmuş olmalıdır"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Cüzdan\'a en az bir kart eklenmelidir"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Kamera uygulaması yüklenmelidir"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Uygulama kurulmuş olmalıdır"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• En az bir cihaz mevcut olmalıdır"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Cüzdan uygulamasını kısayol olarak eklemek için uygulamanın yüklü olduğundan emin olun"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Cüzdan uygulamasını kısayol olarak eklemek için en az bir kart eklendiğinden emin olun"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR kodu tarayıcıyı kısayol olarak eklemek için bir kamera uygulamasının yüklü olduğundan emin olun"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home uygulamasını kısayol olarak eklemek için uygulamanın yüklü olduğundan emin olun"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• En az bir cihaz mevcut olmalıdır"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Not alma kısayolunu kullanmak için varsayılan bir notlar uygulaması seçin"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Uygulama seçin"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Kısayola dokunup basılı tutun"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"İptal"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Ekranı şimdi değiştirin"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Ekran kaleminizi bir şarj cihazına bağlayın"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Ekran kaleminin pil seviyesi düşük"</string>
     <string name="video_camera" msgid="7654002575156149298">"Video kamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Bu profilden telefon araması yapılamıyor"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"İşletme politikanız yalnızca iş profilinden telefon araması yapmanıza izin veriyor"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Kişisel bir uygulamadan arama yapılamaz"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Kuruluşunuz yalnızca iş uygulamalarından telefon etmenize izin veriyor"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"İş profiline geç"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Kapat"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"İş telefonu uygulaması yükle"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"İptal"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Kilit ekranını özelleştir"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Kilit ekranını özelleştirmek için kilidi açın"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Kablosuz bağlantı kullanılamıyor"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera engellendi"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera ve mikrofon engellendi"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon engellendi"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Öncelik modu etkin"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Asistan dinliyor"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Ayarlar\'ı kullanarak varsayılan notlar ayarlayın"</string>
+    <string name="install_app" msgid="5066668100199613936">"Uygulamayı yükle"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon ve Kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Son uygulama kullanımı"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Son erişimi göster"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Bitti"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Seçenekleri genişletip göster"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Daralt"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Bu uygulamayı kapat"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> kapalı"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Hizmeti yönet"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Erişimi yönet"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Telefon aramasında kullanılıyor"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Yakın zamanda telefon aramasında kullanıldı"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> tarafından kullanılıyor"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"En son <xliff:g id="APP_NAME">%1$s</xliff:g> tarafından kullanıldı"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) tarafından kullanılıyor"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"En son <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) tarafından kullanıldı"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) tarafından kullanılıyor"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"En son <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) tarafından kullanıldı"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-tr/strings_tv.xml b/packages/SystemUI/res/values-tr/strings_tv.xml
deleted file mode 100644
index f981aa2..0000000
--- a/packages/SystemUI/res/values-tr/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN bağlandı"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN bağlantısı kesildi"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> üzerinden"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Bildirimler"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Bildirim Yok"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofon kaydediyor"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera kaydediyor"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera ve Mikrofon kaydediyor"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofon kaydı durdu"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kamera kaydı durdu"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kamera ve Mikrofon kaydı durdu"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Ekran kaydı başladı"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Ekran kaydı durduruldu"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index d236f50..668fb59 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Увімкнути USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Докладніше"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Знімок екрана"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock вимкнено"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Відкладене блокування вимкнено"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"надіслане зображення"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Збереження знімка екрана..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Зберігання знімка екрана в робочому профілі…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"Додаток <xliff:g id="APPNAME">%1$s</xliff:g> виявив цей знімок екрана."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> та інші відкриті додатки виявили цей знімок екрана."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Додати до примітки"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Запис відео з екрана"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Запис відео з екрана"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Обробка записування екрана"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Сповіщення про сеанс запису екрана"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Почати запис?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Під час запису система Android може фіксувати будь-яку конфіденційну інформацію, яка з\'являється на екрані або відтворюється на пристрої, зокрема паролі, платіжну інформацію, фотографії, повідомлення та звуки."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Записувати весь екран"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Записувати окремий додаток"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Коли ви записуєте вміст екрана, ОС Android отримує доступ до всього, що відображається на ньому або відтворюється на пристрої. Тому будьте уважні з паролями, повідомленнями, платіжною й іншою конфіденційною інформацією."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Коли ви записуєте додаток, ОС Android отримує доступ до всього, що відображається або відтворюється в цьому додатку. Тому будьте уважні з паролями, повідомленнями, платіжною й іншою конфіденційною інформацією."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Почати запис"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Почати записування?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Коли ви записуєте вміст екрана, ОС Android отримує доступ до всього, що відображається на ньому або відтворюється на пристрої. Тому будьте уважні з паролями, повідомленнями, фотографіями, аудіо, відео, платіжною інформацією тощо."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Коли ви записуєте додаток, ОС Android отримує доступ до всього, що відображається або відтворюється в ньому. Тому будьте уважні з паролями, повідомленнями, фотографіями, аудіо, відео, платіжною інформацією тощо."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Почати записування"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Записувати звук"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Звук із пристрою"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Звук із пристрою, зокрема музика, виклики та сигнали дзвінка"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Мікрофон"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Звук із пристрою та мікрофона"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Почати"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Почати"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Запис екрана"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Запис екрана та звуку"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Показувати дотики до екрана"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Поділитися"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Запис екрана збережено"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Натисніть, щоб переглянути"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Не вдалося видалити запис екрана"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Не вдалося зберегти запис відео з екрана"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Не вдалося почати запис екрана"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Перегляд на весь екран"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Щоб вийти, проведіть пальцем униз від верху екрана."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"OK"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Назад"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Головна"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Меню"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Обличчя автентифіковано"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Підтверджено"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Щоб завершити, натисніть \"Підтвердити\""</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Розблоковано (фейсконтроль). Натисніть значок розблокування."</string>
-    <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Розблоковано (фейсконтроль). Натисніть, щоб продовжити."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Розблоковано (фейс-контроль)"</string>
+    <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Розблоковано (фейс-контроль). Натисніть, щоб продовжити."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Обличчя розпізнано. Натисніть, щоб продовжити."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Обличчя розпізнано. Натисніть значок розблокування."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Автентифіковано"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Скасувати автентифікацію"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Ввести PIN-код"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Намалювати ключ"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Ввести пароль"</string>
@@ -168,13 +169,28 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Якщо наступного разу ви введете неправильний ключ, ваш робочий профіль і його дані буде видалено."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Якщо наступного разу ви введете неправильний PIN-код, ваш робочий профіль і його дані буде видалено."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Якщо наступного разу ви введете неправильний пароль, ваш робочий профіль і його дані буде видалено."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Налаштувати"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Не зараз"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Це потрібно, щоб покращити захист і продуктивність"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Налаштуйте розблокування відбитком пальця повторно"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Розблокування відбитком пальця"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Налаштуйте розблокування відбитком пальця"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Щоб знову налаштувати розблокування відбитком пальця, наявні зображення і моделі відбитків пальців буде видалено.\n\nПісля цього вам доведеться налаштувати цю функцію знову, щоб розблоковувати телефон відбитком пальця."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Щоб знову налаштувати розблокування відбитком пальця, наявні зображення і модель відбитків пальців буде видалено.\n\nПісля цього вам доведеться налаштувати цю функцію знову, щоб розблоковувати телефон відбитком пальця."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Не вдалося налаштувати розблокування відбитком пальця. Перейдіть у налаштування, щоб повторити спробу."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Налаштуйте фейс-контроль повторно"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Фейс-контроль"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Налаштуйте фейс-контроль"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Щоб знову налаштувати фейс-контроль, наявну модель обличчя буде видалено.\n\nЩоб розблоковувати телефон за допомогою фейс-контролю, вам доведеться налаштувати цю функцію знову."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Не вдалося налаштувати фейс-контроль. Перейдіть у налаштування, щоб повторити спробу."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Торкніться сканера відбитків пальців"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Щоб продовжити, натисніть значок розблокування"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Обличчя не розпізнано. Скористайтеся відбитком пальця."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
     <string name="keyguard_face_failed" msgid="9044619102286917151">"Обличчя не розпізнано"</string>
     <string name="keyguard_suggest_fingerprint" msgid="8742015961962702960">"Скористайтеся відбитком"</string>
-    <string name="keyguard_face_unlock_unavailable" msgid="1581949044193418736">"Фейсконтроль недоступний"</string>
+    <string name="keyguard_face_unlock_unavailable" msgid="1581949044193418736">"Фейс-контроль недоступний"</string>
     <string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth під’єднано."</string>
     <string name="accessibility_battery_unknown" msgid="1807789554617976440">"Відсоток заряду акумулятора невідомий."</string>
     <string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Підключено до <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Аудіопристрій"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Гарнітура"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Джерело сигналу"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Слухові апарати"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слухові апарати"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Увімкнення…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автообертання"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоматично обертати екран"</string>
@@ -340,14 +356,15 @@
     <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_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>
     <string name="keyguard_face_successful_unlock_press_alt_3" msgid="7219030481255573962">"Обличчя розпізнано. Натисніть значок розблокування."</string>
-    <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Розблоковано (фейсконтроль)"</string>
+    <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Розблоковано (фейс-контроль)"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Обличчя розпізнано"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Проведіть пальцем угору, щоб повторити спробу"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Для повторного фейс-контролю проведіть пальцем угору"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Розблокуйте екран, щоб скористатись NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Цей пристрій належить вашій організації"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Цей пристрій належить організації \"<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>\""</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"Видалити користувача?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Усі додатки й дані цього користувача буде видалено."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Видалити"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"Додаток <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> матиме доступ до всієї інформації, яка з\'являється на екрані або відтворюється на пристрої під час запису чи трансляції, зокрема до паролів, інформації про платежі, фотографій, повідомлень і аудіофайлів."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Сервіс, що надає цю функцію, матиме доступ до всієї інформації, яка з\'являється на екрані або відтворюється на пристрої під час запису чи трансляції, зокрема до паролів, інформації про платежі, фотографій, повідомлень і аудіофайлів."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Почати запис або трансляцію?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Почати запис або трансляцію за допомогою додатка <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Дозволити додатку <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> показувати або записувати?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Увесь екран"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Окремий додаток"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Коли ви показуєте, записуєте або транслюєте екран, додаток <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> отримує доступ до всього, що відображається на екрані чи відтворюється на пристрої. Тому будьте уважні з паролями, повідомленнями, платіжною й іншою конфіденційною інформацією."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Коли ви показуєте, записуєте або транслюєте додаток, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> отримує доступ до всього, що відображається або відтворюється в цьому додатку. Тому будьте уважні з паролями, повідомленнями, платіжною й іншою конфіденційною інформацією."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Продовжити"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Показувати або записувати додаток"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Дозволити цьому додатку показувати або записувати екран?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Коли ви показуєте, записуєте або транслюєте екран, цей додаток отримує доступ до всього, що відображається на екрані чи відтворюється на пристрої. Тому будьте уважні з паролями, повідомленнями, платіжною й іншою конфіденційною інформацією."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Коли ви показуєте, записуєте або транслюєте додаток, доступ до всього, що відображається або відтворюється в ньому, отримує цей додаток. Тому будьте уважні з паролями, повідомленнями, платіжною й іншою конфіденційною інформацією."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"Додаток <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> матиме доступ до всієї інформації, яка з’являється на екрані або відтворюється на пристрої під час запису чи трансляції. Це, зокрема, паролі, платіжна інформація, фотографії, повідомлення і аудіофайли."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Почати запис або трансляцію?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Сервіс, що надає цю функцію, матиме доступ до всієї інформації, яка з’являється на екрані або відтворюється на пристрої під час запису чи трансляції, зокрема до паролів, платіжної інформації, фотографій, повідомлень і аудіофайлів."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Увесь екран"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Окремий додаток"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Показувати або записувати додаток"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Почати запис або трансляцію за допомогою додатка <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Коли ви показуєте, записуєте або транслюєте екран, додаток <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> отримує доступ до всього, що відображається на екрані чи відтворюється на пристрої. Тому будьте уважні з паролями, повідомленнями, фотографіями, аудіо, відео, платіжною інформацією тощо."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Коли ви показуєте, записуєте або транслюєте додаток, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> отримує доступ до всього, що відображається або відтворюється в цьому додатку. Тому будьте уважні з паролями, повідомленнями, фотографіями, аудіо, відео, платіжною інформацією тощо."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Почати"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Почати трансляцію?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Під час трансляції ОС Android отримує доступ до всього, що відображається на екрані чи відтворюється на пристрої. Тому будьте уважні з паролями, повідомленнями, фотографіями, аудіо, відео, платіжною інформацією тощо."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Коли ви транслюєте додаток, ОС Android отримує доступ до всього, що відображається або відтворюється в ньому. Тому будьте уважні з паролями, повідомленнями, фотографіями, аудіо, відео, платіжною інформацією тощо."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Почати трансляцію"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Почати показ?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Коли ви показуєте, записуєте або транслюєте екран, ОС Android отримує доступ до всього, що відображається на ньому чи відтворюється на пристрої. Тому будьте уважні з паролями, повідомленнями, фотографіями, аудіо, відео, платіжною інформацією тощо."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Коли ви показуєте, записуєте або транслюєте додаток, ОС Android отримує доступ до всього, що відображається або відтворюється в ньому. Тому будьте уважні з паролями, повідомленнями, фотографіями, аудіо, відео, платіжною інформацією тощо."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Почати"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Спільний доступ до додатка призупиняється, коли ви переходите в інший додаток"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Поділитися цим додатком"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Повернутися"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Перехід між додатками"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Заблоковано адміністратором"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Запис екрана вимкнено згідно з правилами для пристрою"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Очистити все"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"На цьому пристрої встановлено центр сертифікації. Захищений мережевий трафік може відстежуватися або змінюватися."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Ваш адміністратор увімкнув журнал мережі, щоб відстежувати трафік на вашому пристрої."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Ваш адміністратор увімкнув журнал мережі, щоб відстежувати трафік вашого робочого профілю (не особистого)."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Цей пристрій підключено до Інтернету через <xliff:g id="VPN_APP">%1$s</xliff:g>. Системний адміністратор бачить ваші дії в мережі, зокрема електронні листи й дані веб-перегляду."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Цей пристрій підключено до Інтернету через додаток <xliff:g id="VPN_APP">%1$s</xliff:g>. Постачальник VPN бачить ваші дії в мережі, зокрема електронні листи й дані веб-перегляду."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Цей пристрій підключено до Інтернету через додаток <xliff:g id="VPN_APP">%1$s</xliff:g>. Системний адміністратор бачить ваші дії в мережі, зокрема електронні листи й дані веб-перегляду."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Цей пристрій підключено до Інтернету через <xliff:g id="VPN_APP_0">%1$s</xliff:g> і <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Системний адміністратор бачить ваші дії в мережі, зокрема електронні листи й дані веб-перегляду."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Ваші робочі додатки підключено до Інтернету через <xliff:g id="VPN_APP">%1$s</xliff:g>. Системний адміністратор і постачальник послуг VPN бачать ваші дії в мережі в робочих додатках, зокрема електронні листи й дані веб-перегляду."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Ваші особисті додатки підключено до Інтернету через <xliff:g id="VPN_APP">%1$s</xliff:g>. Постачальник послуг VPN бачить ваші дії в мережі, зокрема електронні листи й дані веб-перегляду."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"вимкнути"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Звук і вібрація"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Налаштування"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Гучність знижено до безпечнішого рівня"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Аудіо відтворювалося з високою гучністю довше, ніж рекомендується"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Гучність знижено до безпечнішого рівня"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Аудіо в навушниках відтворювалося з високою гучністю довше, ніж рекомендується"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Гучність навушників перевищила безпечний рівень, допустимий протягом тижня"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Слухати далі"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Зменшити гучність"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Додаток закріплено"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Ви постійно бачитимете екран, доки не відкріпите його. Щоб відкріпити екран, натисніть і втримуйте кнопки \"Назад\" та \"Огляд\"."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ви бачитимете цей екран, доки не відкріпите його. Для цього натисніть і утримуйте кнопки \"Назад\" та \"Головний екран\"."</string>
@@ -490,7 +520,7 @@
     <string name="stream_accessibility" msgid="3873610336741987152">"Доступність"</string>
     <string name="volume_ringer_status_normal" msgid="1339039682222461143">"Дзвінок"</string>
     <string name="volume_ringer_status_vibrate" msgid="6970078708957857825">"Вібросигнал"</string>
-    <string name="volume_ringer_status_silent" msgid="3691324657849880883">"без звуку"</string>
+    <string name="volume_ringer_status_silent" msgid="3691324657849880883">"Без звуку"</string>
     <string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Торкніться, щоб увімкнути звук."</string>
     <string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Торкніться, щоб налаштувати вібросигнал. Спеціальні можливості може бути вимкнено."</string>
     <string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Торкніться, щоб вимкнути звук. Спеціальні можливості може бути вимкнено."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Меню кнопки живлення"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Сторінка <xliff:g id="ID_1">%1$d</xliff:g> з <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Заблокований екран"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Телефон перегрівся й вимкнувся"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Зараз телефон працює як зазвичай.\nНатисніть, щоб дізнатися більше"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Телефон перегрівся, тому вимкнувся, щоб охолонути. Зараз він працює, як зазвичай.\n\nТелефон перегрівається, якщо ви:\n	• використовуєте ресурсомісткі додатки (ігри, відео, навігація)\n	• завантажуєте великі файли на телефон або з нього\n	• використовуєте телефон за високої температури"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Переглянути запобіжні заходи"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Телефон нагрівається"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Під час охолодження деякі функції обмежуються.\nНатисніть, щоб дізнатися більше"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Ваш телефон охолоджуватиметься автоматично. Ви можете далі користуватися телефоном, але він може працювати повільніше.\n\nКоли телефон охолоне, він працюватиме належним чином."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Переглянути запобіжні заходи"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Від’єднайте пристрій"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Пристрій нагрівається біля зарядного порту. Якщо він під’єднаний до зарядного пристрою або USB-аксесуара, від’єднайте його, однак будьте обережні, оскільки кабель також може бути гарячий."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Збільшення всього екрана"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Збільшити частину екрана"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Відкрити налаштування збільшення"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Закрити налаштування збільшення"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Потягніть кут, щоб змінити розмір"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Дозволити прокручування по діагоналі"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Змінити розмір"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Торкніться, щоб відкрити функції доступності. Змінити або замінити цю кнопку можна в Налаштуваннях.\n\n"<annotation id="link">"Налаштування"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Щоб тимчасово сховати кнопку, перемістіть її на край екрана"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Відмінити"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Ярлик функції \"<xliff:g id="FEATURE_NAME">%s</xliff:g>\" вилучено"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g>: швидкий запуск вилучено"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# ярлик вилучено}one{# ярлик вилучено}few{# ярлики вилучено}many{# ярликів вилучено}other{# ярлика вилучено}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Перемістити ліворуч угору"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Перемістити праворуч угору"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"видалити з вибраного"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Перемістити на позицію <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Елементи керування"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Виберіть, які елементи керування пристроєм будуть доступні у швидких налаштуваннях"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Щоб змінити порядок елементів керування, перетягуйте їх"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Усі елементи керування вилучено"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Зміни не збережено"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Спробуйте інший PIN-код"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g>: підтвердьте зміну"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Гортайте, щоб переглянути інші"</string>
+    <string name="retry_face" msgid="416380073082560186">"Повторити автентифікацію за обличчям"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Завантаження рекомендацій"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Медіа"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Приховати цей елемент керування для <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Налаштування"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Пісня \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\", яку виконує <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, грає в додатку <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> з <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> працює"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Відтворити"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Призупинити"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Попередня композиція"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Колонки й екрани"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Пропоновані пристрої"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Зупиніть сеанс спільного доступу, щоб перенести медіаконтент на інший пристрій"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Зупинити"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Як працює трансляція"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Трансляція"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Люди поблизу, які мають сумісні пристрої з Bluetooth, можуть слухати медіаконтент, який ви транслюєте."</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Не вдалося зберегти. Повторіть спробу."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Не вдалося зберегти."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Введіть принаймні 4 символи"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Введіть менше ніж 16 символів"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Кількість символів має бути менше ніж <xliff:g id="LENGTH">%1$d</xliff:g>"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Номер складання"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Номер складання скопійовано в буфер обміну."</string>
     <string name="basic_status" msgid="2315371112182658176">"Відкрита розмова"</string>
@@ -1009,7 +1037,7 @@
     <string name="audio_status" msgid="4237055636967709208">"Слухаю аудіо"</string>
     <string name="game_status" msgid="1340694320630973259">"Граю в гру"</string>
     <string name="empty_user_name" msgid="3389155775773578300">"Друзі"</string>
-    <string name="empty_status" msgid="5938893404951307749">"Поспілкуймося!"</string>
+    <string name="empty_status" msgid="5938893404951307749">"Поспілкуймося"</string>
     <string name="status_before_loading" msgid="1500477307859631381">"Незабаром тут з\'явиться контент"</string>
     <string name="missed_call" msgid="4228016077700161689">"Пропущений виклик"</string>
     <string name="messages_count_overflow_indicator" msgid="7850934067082006043">"<xliff:g id="NUMBER">%d</xliff:g>+"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Не вдалось отримати дані про рівень заряду акумулятора"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Натисніть, щоб дізнатися більше"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Немає будильників"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"показати способи розблокування екрана"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Сканер відбитків пальців"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"пройти автентифікацію"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"відкрити пристрій"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Асистент слухає"</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="note_task_button_label" msgid="8718616095800343136">"Створення нотаток"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Створення нотаток"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Створення нотаток, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Докладніше"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Докладніше: <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Відкрити <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Додаток налаштовано"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Принаймні одну картку додано в Гаманець"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Встановлено додаток для камери"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Додаток налаштовано"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Принаймні один пристрій доступний"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Щоб додати ярлик для запуску додатка Google Гаманець, переконайтеся, що додаток установлено"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Щоб додати ярлик для запуску додатка Google Гаманець, переконайтеся, що він містить дані принаймні однієї картки"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Щоб додати ярлик для запуску сканера QR-коду, переконайтеся, що встановлено додаток для камери"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Щоб додати ярлик для запуску додатка Google Home, переконайтеся, що додаток установлено"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Принаймні один пристрій доступний"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Виберіть стандартний додаток для нотаток, щоб створювати їх за допомогою ярлика"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Вибрати додаток"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Натисніть і утримуйте ярлик"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Скасувати"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Використовувати інший екран"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Підключіть стилус до зарядного пристрою"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Низький заряд акумулятора стилуса"</string>
     <string name="video_camera" msgid="7654002575156149298">"Відеокамера"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Неможливо телефонувати з цього профілю"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Відповідно до правил організації ви можете телефонувати лише з робочого профілю"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Не можна телефонувати з особистого додатка"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Ваша організація дозволяє телефонувати лише з робочих додатків"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Перейти в робочий профіль"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Закрити"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Установити робочий додаток Телефон"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Скасувати"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Налаштувати заблокований екран"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Розблокуйте, щоб налаштувати заблокований екран"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Мережа Wi-Fi недоступна"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Камеру заблоковано"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Камеру й мікрофон заблоковано"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Мікрофон заблоковано"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Режим пріоритету ввімкнено"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Асистента активовано"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Призначте стандартний додаток для нотаток у налаштуваннях"</string>
+    <string name="install_app" msgid="5066668100199613936">"Установити додаток"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Мікрофон і камера"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Нещодавнє використання додатками"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Переглянути нещодавній доступ"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Готово"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Розгорнути й показати опції"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Згорнути"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Закрити цей додаток"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> закрито"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Керувати сервісом"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Керувати доступом"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Використовується (телефонний дзвінок)"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Нещодавно використано (телефонний дзвінок)"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Використовується (<xliff:g id="APP_NAME">%1$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Нещодавно використано (<xliff:g id="APP_NAME">%1$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Використовується (<xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Нещодавно використано (<xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Використовується (<xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Нещодавно використано (<xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-uk/strings_tv.xml b/packages/SystemUI/res/values-uk/strings_tv.xml
deleted file mode 100644
index 8b96aac..0000000
--- a/packages/SystemUI/res/values-uk/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"Мережу VPN під\'єднано"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"Мережу VPN від\'єднано"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Через <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Сповіщення"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Немає сповіщень"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Мікрофон записує"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Камера записує"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Камера й мікрофон записують"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Мікрофон припинив запис"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Камера припинила запис"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Камера й мікрофон припинили запис"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Запис відео з екрана розпочато"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Запис відео з екрана зупинено"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index 92a7652..33d11d9 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"‏USB پورٹ فعال کریں"</string>
     <string name="learn_more" msgid="4690632085667273811">"مزید جانیں"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"اسکرین شاٹ"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"اَن لاک کی توسیع کو غیر فعال کیا گیا"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"اَن لاک کا دورانیہ بڑھائیں کو غیر فعال کیا گیا"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"ایک تصویر بھیجی"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"اسکرین شاٹ محفوظ ہو رہا ہے…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"اسکرین شاٹ دفتری پروفائل میں محفوظ کیا جا رہا ہے…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"‫<xliff:g id="APPNAME">%1$s</xliff:g> نے اس اسکرین شاٹ کا پتا لگایا۔"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"‫<xliff:g id="APPNAME">%1$s</xliff:g> اور دیگر کھلی ایپس نے اس اسکرین شاٹ کا پتا لگایا۔"</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"نوٹ میں شامل کریں"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"اسکرین ریکارڈر"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"اسکرین ریکارڈر"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"سکرین ریکارڈنگ پروسیس ہورہی ہے"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"اسکرین ریکارڈ سیشن کیلئے جاری اطلاع"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"ریکارڈنگ شروع کریں؟"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"‏ریکارڈ کرنے کے دوران، Android سسٹم آپ کی اسکرین پر نظر آنے والی یا آپ کے آلہ پر چلنے والی کسی بھی حساس معلومات کو کیپچر کر سکتا ہے۔ اس میں پاس ورڈز، ادائیگی کی معلومات، تصاویر، پیغامات اور آڈیو شامل ہیں۔"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"پوری اسکرین کو ریکارڈ کریں"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"واحد ایپ کو ریکارڈ کریں"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"‏جب آپ ریکارڈنگ کر رہے ہوتے ہیں تو Android کو آپ کی اسکرین پر دکھائی دینے والی یا آپ کے آلے پر چلائی گئی ہر چیز تک رسائی حاصل ہوتی ہے۔ اس لیے پاس ورڈز، ادائیگی کی تفصیلات، پیغامات، یا دیگر حساس معلومات کے سلسلے میں محتاط رہیں۔"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"‏جب آپ کسی ایپ کو ریکارڈ کر رہے ہوتے ہیں تو Android کو اس ایپ پر دکھائی گئی یا چلائی گئی ہر چیز تک رسائی حاصل ہوتی ہے۔ اس لیے پاس ورڈز، ادائیگی کی تفصیلات، پیغامات یا دیگر حساس معلومات کے سلسلے میں محتاط رہیں۔"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"ریکارڈنگ شروع کریں"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"ریکارڈنگ شروع کریں؟"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"‏جب آپ ریکارڈنگ کر رہے ہوتے ہیں تو Android کو آپ کی اسکرین پر دکھائی دینے والی یا آپ کے آلے پر چلائی گئی ہر چیز تک رسائی حاصل ہوتی ہے۔ لہذا، پاس ورڈز، ادائیگی کی تفصیلات، پیغامات، تصاویر، ساتھ ہی آڈیو اور ویڈیو جیسی چیزوں کے سلسلے میں محتاط رہیں۔"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"‏جب آپ کسی ایپ کو ریکارڈ کر رہے ہوتے ہیں تو Android کو اس ایپ پر دکھائی گئی یا چلائی گئی ہر چیز تک رسائی حاصل ہوتی ہے۔ لہذا، پاس ورڈز، ادائیگی کی تفصیلات، پیغامات، تصاویر، ساتھ ہی آڈیو اور ویڈیو جیسی چیزوں کے سلسلے میں محتاط رہیں۔"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"ریکارڈنگ شروع کریں"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"آڈیو ریکارڈ کریں"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"آلہ کا آڈیو"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"آپ کے آلے سے آواز، جیسے موسیقی، کالز اور رِنگ ٹونز"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"مائیکروفون"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"آلہ کا آڈیو اور مائیکروفون"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"شروع کریں"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"شروع کریں"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"ریکارڈنگ اسکرین"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"اسکرین اور آڈیو کی ریکارڈنگ ہو رہی ہے"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"اسکرین پر کئے گئے ٹچز دکھائیں"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"اشتراک کریں"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"اسکرین ریکارڈنگ محفوظ ہو گئی"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"دیکھنے کے لیے تھپتھپائیں"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"اسکرین ریکارڈنگ کو حذف کرنے میں خرابی"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"اسکرین ریکارڈنگ محفوظ کرنے میں خرابی"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"اسکرین ریکارڈنگ شروع کرنے میں خرابی"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"فُل اسکرین میں دیکھ رہے ہیں"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"باہر نکلنے کیلئے اوپر سے نیچے کی طرف سوائپ کریں۔"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"سمجھ آ گئی"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"واپس جائیں"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"ہوم"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"مینیو"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"چہرے کی تصدیق ہو گئی"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"تصدیق شدہ"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"مکمل کرنے کیلئے \'تصدیق کریں\' تھپتھپائیں"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"چہرے سے انلاک کیا گیا۔ جاری رکھنے کیلئے انلاک آئیکن دبائیں۔"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"چہرے سے غیر مقفل کیا گیا"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"چہرے سے انلاک کیا گیا۔ جاری رکھنے کے لیے دبائیں۔"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"چہرے کی شناخت ہو گئی۔ جاری رکھنے کے لیے دبائیں۔"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"چہرے کی شناخت ہو گئی۔ جاری رکھنے کیلئے انلاک آئیکن دبائیں۔"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"تصدیق کردہ"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"تصدیق کو منسوخ کریں"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"‏PIN استعمال کریں"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"پیٹرن کا استعمال کریں"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"پاس ورڈ استعمال کریں"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"اگر آپ نے اگلی کوشش میں غلط پیٹرن درج کیا تو آپ کی دفتری پروفائل اور اس کا ڈیٹا حذف کر دیا جائے گا۔"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"‏اگر آپ نے اگلی کوشش میں غلط PIN درج کیا تو آپ کی دفتری پروفائل اور اس کا ڈیٹا حذف کر دیا جائے گا۔"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"اگر آپ نے اگلی کوشش میں غلط پاس ورڈ درج کیا تو آپ کی دفتری پروفائل اور اس کا ڈیٹا حذف کر دیا جائے گا۔"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"سیٹ اپ کریں"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"ابھی نہیں"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"سیکیورٹی اور کارکردگی کو بہتر بنانے کیلئے یہ درکار ہے"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"فنگر پرنٹ اَن لاک کو دوبارہ سیٹ اپ کریں"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"فنگر پرنٹ اَن لاک"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"فنگر پرنٹ اَن لاک کو سیٹ اپ کریں"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"فنگر پرنٹ اَن لاک دوبارہ سیٹ اپ کرنے کیلئے، آپ کے فنگر پرنٹ کی موجودہ تصاویر اور ماڈلز حذف ہو جائیں گے۔\n\nان کے حذف ہونے کے بعد، آپ کو اپنے فون کو اَن لاک کرنے کی خاطر اپنے فنگر پرنٹ کا استعمال کرنے یا یہ توثیق کرنے کیلئے کہ یہ آپ ہی ہیں، فنگر پرنٹ اَن لاک دوبارہ سیٹ اپ کرنا ہوگا۔"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"فنگر پرنٹ اَن لاک دوبارہ سیٹ اپ کرنے کیلئے، آپ کے فنگر پرنٹ کی موجودہ تصاویر اور ماڈل حذف ہو جائیں گے۔\n\nان کے حذف ہونے کے بعد، آپ کو اپنے فون کو اَن لاک کرنے کی خاطر اپنے فنگر پرنٹ کا استعمال کرنے یا یہ توثیق کرنے کیلئے کہ یہ آپ ہی ہیں، فنگر پرنٹ اَن لاک دوبارہ سیٹ اپ کرنا ہوگا۔"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"فنگر پرنٹ اَن لاک کو سیٹ اپ نہیں کیا جا سکا۔ دوبارہ کوشش کرنے کیلئے ترتیبات پر جائیں۔"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"فیس اَن لاک کو دوبارہ سیٹ اپ کریں"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"فیس اَن لاک"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"فیس اَن لاک سیٹ اپ کریں"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"فیس اَن لاک دوبارہ سیٹ اپ کرنے کیلئے، آپ کے چہرے کا موجودہ ماڈل حذف ہو جائے گا۔\n\nاپنے فون کو اَن لاک کرنے کی خاطر اپنے چہرے کا استعمال کرنے کیلئے، آپ کو اس خصوصیت کو دوبارہ سیٹ اپ کرنا ہوگا۔"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"فیس اَن لاک کو سیٹ اپ نہیں کیا جا سکا۔ دوبارہ کوشش کرنے کیلئے ترتیبات پر جائیں۔"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"فنگر پرنٹ سینسر پر ٹچ کریں"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"جاری رکھنے کیلئے غیر مقفل کرنے کا آئیکن دبائیں"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"چہرے کی شناخت نہیں ہو سکی۔ اس کے بجائے فنگر پرنٹ استعمال کریں۔"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"آڈیو"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ہیڈ سیٹ"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ان پٹ"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"سماعتی آلات"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"سماعتی آلات"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"آن ہو رہا ہے…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"خود کار طور پر گھمائیں"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"اسکرین کو خود کار طور پر گھمائیں"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"چہرے سے غیر مقفل کیا گیا"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"چہرے کی شناخت ہو گئی"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"دوبارہ کوشش کرنے کے لیے اوپر سوائپ کريں"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"فیس اَنلاک کو دوبارہ آزمانے کے لیے اوپر کی طرف سوائپ کریں"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"‏NFC استعمال کرنے کیلئے غیر مقفل کریں"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"یہ آلہ آپ کی تنظیم کا ہے"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"یہ آلہ <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> کا ہے"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"صارف کو ہٹائیں؟"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"اس صارف کی سبھی ایپس اور ڈیٹا حذف کر دیا جائے گا۔"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"ہٹائیں"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> کو ان تمام معلومات تک رسائی حاصل ہوگی جو آپ کی اسکرین پر مرئی ہے یا ریکارڈنگ یا کاسٹنگ کے دوران آپ کے آلے سے چلائے گئے ہوں۔ اس میں پاس ورڈز، ادائیگی کی تفصیلات، تصاویر، پیغامات، اور آپ کے ذریعے چلائی جانے والی آڈیو جیسی معلومات شامل ہے۔"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"یہ فنکشن فراہم کرنے والی سروس کو اس تمام معلومات تک رسائی حاصل ہوگی جو آپ کی اسکرین پر نظر آتی ہے یا ریکارڈنگ یا کاسٹنگ کے دوران آپ کے آلے سے چلائی جاتی ہے۔ اس میں پاس ورڈز، ادائیگی کی تفصیلات، تصاویر، پیغامات اور وہ آڈیو جو آپ چلاتے ہیں جیسی معلومات شامل ہے۔"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"ریکارڈنگ یا کاسٹنگ شروع کریں؟"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> کے ذریعے ریکارڈنگ یا کاسٹنگ شروع کریں؟"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> کو اشتراک یا ریکارڈ کرنے کی اجازت دیں؟"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"پوری اسکرین"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"واحد ایپ"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"جب آپ اشتراک، ریکارڈنگ یا کاسٹ کر رہے ہوتے ہیں تو <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> کو آپ کی اسکرین پر دکھائی دینے والی یا آپ کے آلے پر چلائی گئی ہر چیز تک رسائی حاصل ہوتی ہے۔ اس لیے پاس ورڈز، ادائیگی کی تفصیلات، پیغامات، یا دیگر حساس معلومات کے سلسلے میں محتاط رہیں۔"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"جب آپ اشتراک، ریکارڈنگ یا کاسٹ کر رہے ہوتے ہیں تو <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> کو آپ کی اسکرین پر دکھائی گئی یا آپ کے آلے پر چلائی گئی ہر چیز تک رسائی حاصل ہوتی ہے۔ اس لیے پاس ورڈز، ادائیگی کی تفصیلات، پیغامات، یا دیگر حساس معلومات کے سلسلے میں محتاط رہیں۔"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"جاری رکھیں"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"ایپ کا اشتراک یا ریکارڈ کریں"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"اس ایپ کو اشتراک یا ریکارڈ کرنے کی اجازت دیں؟"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"جب آپ اشتراک، ریکارڈنگ یا کاسٹ کر رہے ہوتے ہیں تو اس ایپ کو آپ کی اسکرین پر دکھائی دینے والی یا آپ کے آلے پر چلنے والی ہر چیز تک رسائی حاصل ہوتی ہے۔ اس لیے پاس ورڈز، ادائیگی کی تفصیلات، پیغامات، یا دیگر حساس معلومات کے سلسلے میں محتاط رہیں۔"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"جب آپ اشتراک، ریکارڈنگ یا کاسٹ کر رہے ہوتے ہیں تو اس ایپ کو آپ کی اسکرین پر دکھائی گئی یا آپ کے آلے پر چلائی گئی ہر چیز تک رسائی حاصل ہوتی ہے۔ اس لیے پاس ورڈز، ادائیگی کی تفصیلات، پیغامات، یا دیگر حساس معلومات کے سلسلے میں محتاط رہیں۔"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> کو اس تمام معلومات تک رسائی حاصل ہوگی جو آپ کی اسکرین پر نظر آتی ہے یا ریکارڈنگ یا کاسٹنگ کے دوران آپ کے آلے سے چلائی گئی ہے۔ اس میں پاس ورڈز، ادائیگی کی تفصیلات، تصاویر، پیغامات، اور آپ کے ذریعے چلائی جانے والی آڈیو جیسی معلومات شامل ہے۔"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"ریکارڈنگ یا کاسٹنگ شروع کریں؟"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"اس فنکشن فراہم کرنے والی سروس کو اس تمام معلومات تک رسائی حاصل ہوگی جو آپ کی اسکرین پر نظر آتی ہے یا ریکارڈنگ یا کاسٹنگ کے دوران آپ کے آلے سے چلائی گئی ہے۔ اس میں پاس ورڈز، ادائیگی کی تفصیلات، تصاویر، پیغامات اور آپ کے ذریعے چلائی جانے والی آڈیو جیسی معلومات شامل ہے۔"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"پوری اسکرین"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"واحد ایپ"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"ایپ کا اشتراک کرنا یا ریکارڈ کرنا"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> کا استعمال کر کے ریکارڈنگ یا کاسٹنگ شروع کریں؟"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"جب آپ اشتراک، ریکارڈنگ یا کاسٹ کر رہے ہوتے ہیں تو <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> کو آپ کی اسکرین پر دکھائی دینے والی یا آپ کے آلے پر چلائی گئی ہر چیز تک رسائی حاصل ہوتی ہے۔ لہذا، پاس ورڈز، ادائیگی کی تفصیلات، پیغامات، تصاویر، ساتھ ہی آڈیو اور ویڈیو جیسی چیزوں کے سلسلے میں محتاط رہیں۔"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"جب آپ اشتراک، ریکارڈنگ یا کسی ایپ کو کاسٹ کر رہے ہوتے ہیں تو <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> کو اس ایپ پر دکھائی گئی یا چلائی گئی ہر چیز تک رسائی حاصل ہوتی ہے۔ لہذا، پاس ورڈز، ادائیگی کی تفصیلات، پیغامات، تصاویر، ساتھ ہی آڈیو اور ویڈیو جیسی چیزوں کے سلسلے میں محتاط رہیں۔"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"شروع کریں"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"کاسٹ کرنا شروع کریں؟"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"‏جب آپ کاسٹ کر رہے ہوتے ہیں، تو Android کو آپ کی اسکرین پر دکھائی دینے والی یا آپ کے آلے پر چلائی گئی ہر چیز تک رسائی حاصل ہوتی ہے۔ لہذا، پاس ورڈز، ادائیگی کی تفصیلات، پیغامات، تصاویر، ساتھ ہی آڈیو اور ویڈیو جیسی چیزوں کے سلسلے میں محتاط رہیں۔"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"‏جب آپ کسی ایپ کو کاسٹ کر رہے ہوتے ہیں تو Android کو اس ایپ پر دکھائی گئی یا چلائی گئی ہر چیز تک رسائی حاصل ہوتی ہے۔ لہذا، پاس ورڈز، ادائیگی کی تفصیلات، پیغامات، تصاویر، ساتھ ہی آڈیو اور ویڈیو جیسی چیزوں کے سلسلے میں محتاط رہیں۔"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"کاسٹ کرنا شروع کریں"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"اشتراک کرنا شروع کریں؟"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"‏جب آپ اشتراک، ریکارڈنگ یا کاسٹ کر رہے ہوتے ہیں تو Android کو آپ کی اسکرین پر دکھائی دینے والی یا آپ کے آلے پر چلائی گئی ہر چیز تک رسائی حاصل ہوتی ہے۔ لہذا، پاس ورڈز، ادائیگی کی تفصیلات، پیغامات، تصاویر، ساتھ ہی آڈیو اور ویڈیو جیسی چیزوں کے سلسلے میں محتاط رہیں۔"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"‏جب آپ اشتراک، ریکارڈنگ یا کسی ایپ کو کاسٹ کر رہے ہوتے ہیں تو Android کو اس ایپ پر دکھائی گئی یا چلائی گئی ہر چیز تک رسائی حاصل ہوتی ہے۔ لہذا، پاس ورڈز، ادائیگی کی تفصیلات، پیغامات، تصاویر، ساتھ ہی آڈیو اور ویڈیو جیسی چیزوں کے سلسلے میں محتاط رہیں۔"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"شروع کریں"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"آپ کے ایپس سوئچ کرنے پر اشتراک موقوف ہو جاتا ہے"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"اس کے بجائے اس ایپ کا اشتراک کریں"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"واپس سوئچ کریں"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"ایپ سوئچ کرنے کی سہولت"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"‏آپ کے IT منتظم نے مسدود کر دیا"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"اسکرین کو کیپچر کرنا آلہ کی پالیسی کے ذریعے غیر فعال ہے"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"سبھی کو صاف کریں"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"ایک سرٹیفکیٹ کی اتھارٹی اس آلہ پر انسٹال ہے۔ آپ کا محفوظ نیٹ ورک ٹریفک مانیٹر ہو سکتا ہے یا اس میں ترمیم کی جا سکتی ہے۔"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"آپ کے منتظم نے نیٹ ورک لاگنگ کو آن کر دیا ہے، جو آپ کے آلے پر ٹریفک مانیٹر کرتی ہے۔"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"آپ کے منتظم نے نیٹ ورک لاگنگ آن کر دی ہے، جو آپ کے ذاتی پروفائل پر نہیں بلکہ دفتری پروفائل پر ٹریفک کو مانیٹر کرتی ہے۔"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"‏یہ آلہ <xliff:g id="VPN_APP">%1$s</xliff:g> کے ذریعے انٹرنیٹ سے منسلک ہے۔ آپ کا IT منتظم ای میلز اور براؤزر ڈیٹا سمیت آپ کے نیٹ ورک کی سرگرمی دیکھ سکتا ہے۔"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"‏یہ آلہ <xliff:g id="VPN_APP">%1$s</xliff:g> کے ذریعے انٹرنیٹ سے منسلک ہے۔ VPN فراہم کنندہ کو ای میلز اور براؤزر ڈیٹا سمیت آپ کے نیٹ ورک کی سرگرمی دکھائی دیتی ہے۔"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"‏یہ آلہ <xliff:g id="VPN_APP">%1$s</xliff:g> کے ذریعے انٹرنیٹ سے منسلک ہے۔ آپ کے IT منتظم کو ای میلز اور براؤزر ڈیٹا سمیت آپ کے نیٹ ورک کی سرگرمی دکھائی دیتی ہے۔"</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"‏یہ آلہ <xliff:g id="VPN_APP_0">%1$s</xliff:g> اور <xliff:g id="VPN_APP_1">%2$s</xliff:g> کے ذریعے انٹرنیٹ سے منسلک ہے۔ آپ کا IT منتظم ای میلز اور براؤزر ڈیٹا سمیت آپ کے نیٹ ورک کی سرگرمی دیکھ سکتا ہے۔"</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"‏آپ کی ورک ایپس <xliff:g id="VPN_APP">%1$s</xliff:g> کے ذریعے انٹرنیٹ سے منسلک ہیں۔ آپ کے IT منتظم اور VPN فراہم کنندہ ای میلز اور براؤزر ڈیٹا سمیت ورک ایپس میں آپ کے نیٹ ورک کی سرگرمی دیکھ سکتے ہیں۔"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"‏آپ کی ذاتی ایپس <xliff:g id="VPN_APP">%1$s</xliff:g> کے ذریعے انٹرنیٹ سے منسلک ہیں۔ آپ کا VPN فراہم کنندہ ای میلز اور براؤزر ڈیٹا سمیت آپ کے نیٹ ورک کی سرگرمی دیکھ سکتا ہے۔"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"غیر فعال کریں"</string>
     <string name="sound_settings" msgid="8874581353127418308">"آواز اور وائبریشن"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"ترتیبات"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"محفوظ والیوم تک کم کر دیا گیا"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"والیوم تجویز کردہ مدت سے زیادہ بلند رہا ہے"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"والیوم کو محفوظ سطح تک کم کر دیا گیا"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"ہیڈ فون کا والیوم تجویز کردہ وقت سے زیادہ دیر تک بلند رہا ہے"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"ہیڈ فون والیوم اس ہفتے محفوظ حد سے تجاوز کر گیا ہے"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"سنتے رہیں"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"والیوم کم کریں"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"ایپ کو پن کر دیا گیا ہے"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"اس سے یہ اس وقت تک منظر میں رہتی ہے جب تک آپ اس سے پن ہٹا نہیں دیتے۔ پن ہٹانے کیلئے پیچھے اور مجموعی جائزہ کے بٹنز کو ٹچ کریں اور دبائے رکھیں۔"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"اس سے یہ اس وقت تک منظر میں رہتی ہے جب تک آپ اس سے پن نہیں ہٹا دیتے۔ پن ہٹانے کیلئے \"پیچھے\" اور \"ہوم\" بٹنز کو ٹچ کریں اور دبائے رکھیں۔"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"پاور مینیو"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"صفحہ <xliff:g id="ID_1">%1$d</xliff:g> از <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"مقفل اسکرین"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"حرارت کی وجہ سے فون آف ہو گیا"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"آپ کا فون اب حسب معمول چل رہا ہے۔\nمزید معلومات کیلئے تھپتھپائیں"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"آپ کا فون کافی گرم ہو گيا تھا، اس لئے سرد ہونے کیلئے یہ آف ہو گیا۔ اب آپ کا فون حسب معمول کام کر رہا ہے۔\n\nمندرجہ ذیل چیزیں کرنے پر آپ کا فون کافی گرم ہو سکتا ہے:\n	• ماخذ کا زیادہ استعمال کرنے والی ایپس (جیسے کہ گیمنگ، ویڈیو، یا نیویگیشن ایپس) کا استعمال کرنا\n	• بڑی فائلز ڈاؤن لوڈ یا اپ لوڈ کرنا\n	• اعلی درجہ حرارت میں فون کا استعمال کرنا"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"نگہداشت کے اقدامات ملاحظہ کریں"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"فون گرم ہو رہا ہے"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"فون کے ٹھنڈے ہو جانے تک کچھ خصوصیات محدود ہیں۔\nمزید معلومات کیلئے تھپتھپائیں"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"آپ کا فون خودکار طور پر ٹھنڈا ہونے کی کوشش کرے گا۔ آپ ابھی بھی اپنا فون استعمال کر سکتے ہیں، مگر ہو سکتا ہے یہ سست چلے۔\n\nایک بار آپ کا فون ٹھنڈا ہوجائے تو یہ معمول کے مطابق چلے گا۔"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"نگہداشت کے اقدامات ملاحظہ کریں"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"اپنے آلہ کو ان پلگ کریں"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"‏آپ کا آلہ چارجنگ پورٹ کے قریب گرم ہو رہا ہے۔ اگر یہ چارجر یا USB لوازمات سے منسلک ہے تو اسے ان پلگ کریں اور خیال رکھیں کہ کیبل بھی گرم ہو سکتی ہے۔"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"فُل اسکرین کو بڑا کریں"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"اسکرین کا حصہ بڑا کریں"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"میگنیفکیشن کی ترتیبات کھولیں"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"میگنیفکیشن کی ترتیبات بند کریں"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"سائز تبدیل کرنے کے لیے کونے کو گھسیٹیں"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"وتری سکرولنگ کی اجازت دیں"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"سائز تبدیل کریں"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"پسندیدگی ختم کریں"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"پوزیشن <xliff:g id="NUMBER">%d</xliff:g> میں منتقل کریں"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"کنٹرولز"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"فوری طور پر رسائی حاصل کرنے کیلئے آلے کے کنٹرولز منتخب کریں"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"کنٹرولز کو دوبارہ ترتیب دینے کے ليے پکڑیں اور گھسیٹیں"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"سبھی کنٹرولز ہٹا دیے گئے"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"تبدیلیاں محفوظ نہیں ہوئیں"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"‏‫کوئی دوسرا PIN آزمائیں"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> کی تبدیلی کی توثیق کریں"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"مزید دیکھنے کیلئے سوائپ کریں"</string>
+    <string name="retry_face" msgid="416380073082560186">"چہرے سے تصدیق کی دوبارہ کوشش کریں"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"تجاویز لوڈ ہو رہی ہیں"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"میڈیا"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"‫<xliff:g id="APP_NAME">%1$s</xliff:g> کے لیے اس میڈیا کنٹرول کو چھپائیں؟"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"ترتیبات"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> سے <xliff:g id="ARTIST_NAME">%2$s</xliff:g> کا <xliff:g id="SONG_NAME">%1$s</xliff:g> چل رہا ہے"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> از <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"‫<xliff:g id="APP_NAME">%1$s</xliff:g> چل رہی ہے"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"چلائیں"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"روکیں"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"پچھلا ٹریک"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"%%<xliff:g id="PERCENTAGE">%1$d</xliff:g>"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"اسپیکرز اور ڈسپلیز"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"تجویز کردہ آلات"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"میڈیا کو دوسرے آلے پر منتقل کرنے کے لیے اپنا مشترکہ سیشن بند کریں"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"بند کریں"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"براڈکاسٹنگ کیسے کام کرتا ہے"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"براڈکاسٹ"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"موافق بلوٹوتھ آلات کے ساتھ آپ کے قریبی لوگ آپ کے نشر کردہ میڈیا کو سن سکتے ہیں"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"محفوظ نہیں کیا جا سکا۔ پھر کوشش کریں۔"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"محفوظ نہیں کیا جا سکا۔"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"کم از کم 4 حروف استعمال کریں"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"16 حروف سے کم استعمال کریں"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"<xliff:g id="LENGTH">%1$d</xliff:g> حروف سے کم استعمال کریں"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"بلڈ نمبر"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"بلڈ نمبر کلپ بورڈ میں کاپی ہو گیا۔"</string>
     <string name="basic_status" msgid="2315371112182658176">"گفتگو کھولیں"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"آپ کے بیٹری میٹر کو پڑھنے میں دشواری"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"مزید معلومات کے لیے تھپتھپائیں"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"کوئی الارم سیٹ نہیں ہے"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"اسکرین لاک درج کریں"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"فنگر پرنٹ سینسر"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"تصدیق کریں"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"آلہ درج کریں"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"اسسٹنٹ سن رہی ہے"</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="note_task_button_label" msgid="8718616095800343136">"نوٹ لینا"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"نوٹ لکھنا"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"نوٹ لکھنا، <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"مزید جانیں"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"مزید جاننے کیلئے <xliff:g id="URL">%s</xliff:g> ملاحظہ کریں"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"<xliff:g id="APPNAME">%1$s</xliff:g> کھولیں"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• ایپ سیٹ اپ ہو گئی ہے"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• والٹ میں کم از کم ایک کارڈ شامل کیا گیا ہے"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• کیمرا ایپ انسٹال کریں"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• ایپ سیٹ اپ ہو گئی ہے"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• کم از کم ایک آلہ دستیاب ہے"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"والٹ ایپ کو شارٹ کٹ کے طور پر شامل کرنے کے لیے، یقینی بنائیں کہ ایپ انسٹال ہے"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"والٹ ایپ کو شارٹ کٹ کے طور پر شامل کرنے کے لیے، یقینی بنائیں کہ کم از کم ایک کارڈ شامل کیا گیا ہے"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"‏QR کوڈ اسکینر کو شارٹ کٹ کے طور پر شامل کرنے کے لیے، یقینی بنائیں کہ کیمرا ایپ انسٹال ہے"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"ہوم ایپ کو شارٹ کٹ کے طور پر شامل کرنے کے لیے، یقینی بنائیں کہ ایپ انسٹال ہے"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• کم از کم ایک آلہ دستیاب ہے"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"نوٹ لینے والے شارٹ کٹ کا استعمال کرنے کے لیے ڈیفالٹ نوٹس ایپ منتخب کریں"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"ایپ منتخب کریں"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"شارٹ کٹ ٹچ کریں اور دبائے رکھیں"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"منسوخ کریں"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"اب اسکرینز سوئچ کریں"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"اپنے اسٹائلس کو چارجر منسلک کریں"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"اسٹائلس بیٹری کم ہے"</string>
     <string name="video_camera" msgid="7654002575156149298">"ویڈیو کیمرا"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"اس پروفائل سے کال نہیں کر سکتے"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"آپ کے کام سے متعلق پالیسی آپ کو صرف دفتری پروفائل سے فون کالز کرنے کی اجازت دیتی ہے"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"ذاتی ایپ سے کال نہیں کر سکتے"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"آپ کی تنظیم آپ کو صرف ورک ایپس سے کالز کرنے کی اجازت دیتی ہے"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"دفتری پروفائل پر سوئچ کریں"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"بند کریں"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"ورک فون ایپ انسٹال کریں"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"منسوخ کریں"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"مقفل اسکرین کو حسب ضرورت بنائیں"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"مقفل اسکرین کو حسب ضرورت بنانے کے لیے غیر مقفل کریں"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"‏Wi-Fi دستیاب نہیں ہے"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"کیمرا مسدود ہے"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"کیمرا اور مائیکروفون مسدود ہے"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"مائیکروفون مسدود ہے"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"ترجیحی موڈ آن ہے"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"اسسٹنٹ کی توجہ آن ہے"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"ترتیبات میں ڈیفالٹ نوٹس ایپ سیٹ کریں"</string>
+    <string name="install_app" msgid="5066668100199613936">"ایپ انسٹال کریں"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"مائیکروفون اور کیمرا"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"حالیہ ایپ کا استعمال"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"حالیہ رسائی دیکھیں"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"ہو گیا"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"اختیارات کو پھیلا کر دکھائیں"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"سکیڑیں"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"اس ایپ کو بند کریں"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> کو بند کر دیا گیا"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"سروس کا نظم کریں"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"رسائی کا نظم کریں"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"فون کال کے زیر استعمال"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"فون کال میں حال ہی میں استعمال کیا گیا"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے زیر استعمال"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"<xliff:g id="APP_NAME">%1$s</xliff:g> کے ذریعے حال ہی میں استعمال کیا گیا"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) کے زیر استعمال"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) کے ذریعے حال ہی میں استعمال کیا گیا"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) کے زیر استعمال"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) کے ذریعے حال ہی میں استعمال کیا گیا"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ur/strings_tv.xml b/packages/SystemUI/res/values-ur/strings_tv.xml
deleted file mode 100644
index ed186ac..0000000
--- a/packages/SystemUI/res/values-ur/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"‏VPN منسلک ہے"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"‏VPN غیر منسلک ہے"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"بذریعہ <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"اطلاعات"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"کوئی اطلاع نہیں ہے"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"مائیکروفون ریکارڈ کر رہا ہے"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"کیمرا ریکارڈ کر رہا ہے"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"کیمرا اور مائیکروفون ریکارڈ کر رہا ہے"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"مائیکروفون نے ریکارڈ کرنا بند کر دیا"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"کیمرے نے ریکارڈ کرنا بند کر دیا"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"کیمرے اور مائیکروفون نے ریکارڈ کرنا بند کر دیا"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"اسکرین ریکارڈنگ شروع ہو گئی"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"اسکرین ریکارڈنگ بند کر دی گئی"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index 3d148e4..65f5653 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"USB xususiyatini yoqish"</string>
     <string name="learn_more" msgid="4690632085667273811">"Batafsil"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Skrinshot"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Kengaytirilgan ochish yoniq emas"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Extend Unlock yoniq emas"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"rasm yuborildi"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Skrinshot saqlanmoqda…"</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Skrinshot ish profiliga saqlanmoqda…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> skrinshot olinganini aniqladi."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> va boshqa ochiq ilovalar skrinshot olinganini aniqladi."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Qaydga qoʻshish"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Ekrandan yozib olish"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Ekranni yozib olish"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Ekran yozib olinmoqda"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Ekrandan yozib olish seansi uchun joriy bildirishnoma"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Yozib olish boshlansinmi?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Yozib olishda Android tizimi ekraningizda koʻringan yoki qurilmangizda ijro etilgan maxfiy axborotni ham yozib olishi mumkin. Bunga parollar, toʻlovga oid axborot, suratlar, xabarlar va audio kiradi."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Butun ekranni yozib olish"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Bitta ilovani yozib olish"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Yozib olish vaqtida Android ekranda chiqadigan yoki qurilmada ijro qilinadigan kontentni koʻra oladi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar yoki boshqa maxfiy axborot chiqmasligi uchun ehtiyot boʻling."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Yozib olish vaqtida Android ekranda chiqadigan yoki qurilmada ijro qilinadigan kontentni koʻra oladi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar yoki boshqa maxfiy axborot chiqmasligi uchun ehtiyot boʻling."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Yozib olish"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Yozib olish boshlansinmi?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Yozib olish vaqtida Android ekranda chiqadigan yoki qurilmada ijro qilinadigan kontentni koʻra oladi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar, suratlar, audio va video chiqmasligi uchun ehtiyot boʻling."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Ilovani yozib olayotganingizda Android ekranda chiqadigan yoki qurilmada ijro qilinadigan kontentni koʻra oladi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar, suratlar, audio va video chiqmasligi uchun ehtiyot boʻling."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Yozib olish"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Audio yozib olish"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Qurilmadagi audio"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Qurilmangizdagi musiqa, chaqiruvlar va ringtonlar kabi ovozlar"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Mikrofon"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Qurilmadagi audio va mikrofon"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Boshlash"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Boshlash"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Ekran yozib olinmoqda"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Ekran va audioni yozib olish"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Ekranga sensorlarni chiqarish"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Ulashish"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Ekran lavhasi saqlandi"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Koʻrish uchun bosing"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Ekrandan yozib olingan vi olib tashlanmadi"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Ekran yozuvi saqlanmadi"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Ekranni yozib olish boshlanmadi"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Butun ekran rejimi"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Chiqish uchun tepadan pastga torting."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"OK"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Orqaga"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Uyga"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menyu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Yuzingiz aniqlandi"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Tasdiqlangan"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Tasdiqlash uchun tegining"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Yuz orqali ochilgan. Davom etish uchun ochish belgisini bosing."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Yuz bilan ochildi"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Yuz orqali ochildi. Davom etish uchun bosing."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Yuz aniqlandi. Davom etish uchun bosing."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Yuz aniqlandi. Davom etish uchun ochish belgisini bosing."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Tasdiqlandi"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Autentifikatsiyani bekor qilish"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"PIN kod kiritish"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Grafik kalitdan foydalanish"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Paroldan foydalanish"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Agar grafik kalitni xato kiritsangiz, ish profili va undagi maʼlumotlar oʻchirib tashlanadi."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Agar PIN kodni xato kiritsangiz, ish profili va undagi maʼlumotlar oʻchirib tashlanadi."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Agar parolni xato kiritsangiz, ish profili va undagi maʼlumotlar oʻchirib tashlanadi."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Sozlash"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Hozir emas"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Xavfsizlik va unumdorlikni oshirish uchun bu talab qilinadi"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Barmoq izi bilan ochish funksiyasini qayta sozlang"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Barmoq izi bilan ochish"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Barmoq izi bilan ochishni sozlang"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Barmoq izi bilan ochish funksiyasini qayta sozlash uchun joriy barmoq izi rasmlari va modellari oʻchirib tashlanadi.\n\nUlar oʻchirilgandan keyin, barmoq izi orqali telefonni qulfdan chiqarish yoki shaxsni tasdiqlash uchun Barmoq izi bilan ochish funksiyasini qayta sozlashingiz kerak."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Barmoq izi bilan ochish funksiyasini qayta sozlash uchun joriy barmoq izi rasmlari va modeli oʻchirib tashlanadi.\n\nUlar oʻchirilgandan keyin, barmoq izi orqali telefonni qulfdan chiqarish yoki shaxsni tasdiqlash uchun Barmoq izi bilan ochish funksiyasini qayta sozlashingiz kerak."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Barmoq izi bilan ochish sozlanmadi. Sozlamalarni ochib, qaytadan urining."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Yuz bilan ochishni qayta sozlash"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Yuz bilan ochish"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Yuz bilan ochishni sozlash"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Yuz bilan ochish funksiyasini qayta sozlash uchun joriy yuz modelingiz oʻchirib tashlanadi.\n\nTelefonni qulfdan chiqarish maqsadida yuzingizdan foydalanish uchun bu funksiyani qayta sozlashingiz kerak."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Yuz bilan ochish sozlanmadimi. Sozlamalarni ochib, qaytadan urining."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Barmoq izi skaneriga tegining"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Davom etish uchun qulfni ochish belgisini bosing"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Bu yuz notanish. Barmoq izi orqali urining."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Garnitura"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Kirish"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Eshitish apparatlari"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Eshitish moslamalari"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Yoqilmoqda…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Avto-burilish"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Ekranning avtomatik burilishi"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Yuz bilan ochildi"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Yuz aniqlandi"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Qayta urinish uchun tepaga suring"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Tepaga suring va yana Yuz bilan oching"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"NFC ishlatish uchun qurilma qulfini oching"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Bu qurilma tashkilotingizga tegishli"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Bu qurilma <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> tashkilotiga tegishli"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ekranda chiqqan yoki yozib olish va translatsiya vaqtida ijro etilgan barcha axborotlarga ruxsat oladi. Bu axborotlar parollar, toʻlov tafsilotlari, rasmlar, xabarlar va ijro etilgan audiolardan iborat boʻlishi mumkin."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Bu funksiyani taʼminlovchi xizmat ekranda chiqqan yoki yozib olish va translatsiya vaqtida ijro etilgan barcha axborotlarga ruxsat oladi. Bu axborotlar parollar, toʻlov tafsilotlari, rasmlar, xabarlar va ijro etilgan audiolardan iborat boʻlishi mumkin."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Yozib olish yoki translatsiya boshlansinmi?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> orqali yozib olish yoki translatsiya boshlansinmi?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ilovasida ulashish yoki yozib olish uchun ruxsat berilsinmi?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Butun ekran"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Bitta ilova"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Ulashish, yozib olish va translatsiya qilish vaqtida <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ilovasi ekranda chiqadigan yoki qurilmada ijro qilinadigan kontentni koʻra oladi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar yoki boshqa maxfiy axborot chiqmasligi uchun ehtiyot boʻling."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Ulashish, yozib olish va translatsiya qilish vaqtida <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ilovasi ekranda chiqadigan yoki qurilmada ijro qilinadigan kontentni koʻra oladi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar yoki boshqa maxfiy axborot chiqmasligi uchun ehtiyot boʻling."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Davom etish"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Ilovada ulashish yoki yozib olish"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Bu ilovaga ulashish yoki yozib olish uchun ruxsat berilsinmi?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Ulashish, yozib olish va translatsiya qilish vaqtida bu ilova ekranda chiqadigan yoki qurilmada ijro qilinadigan kontentni koʻra oladi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar yoki boshqa maxfiy axborot chiqmasligi uchun ehtiyot boʻling."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Ulashish, yozib olish va translatsiya qilish vaqtida bu ilova ekranda chiqadigan yoki qurilmada ijro qilinadigan kontentni koʻra oladi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar yoki boshqa maxfiy axborot chiqmasligi uchun ehtiyot boʻling."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ekranda chiqqan yoki yozib olish va translatsiya vaqtida ijro etilgan barcha axborotlarga ruxsat oladi. Bu axborotlar parollar, toʻlov tafsilotlari, rasmlar, xabarlar va ijro etilgan audiolardan iborat boʻlishi mumkin."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Yozib olish yoki translatsiya boshlansinmi?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Bu funksiyani taʼminlovchi xizmat ekranda chiqqan yoki yozib olish va translatsiya vaqtida ijro etilgan barcha axborotlarga ruxsat oladi. Bu axborotlar parollar, toʻlov tafsilotlari, rasmlar, xabarlar va ijro etilgan audiolardan iborat boʻlishi mumkin."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Butun ekran"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Bitta ilova"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Ilovada ulashish yoki yozib olish"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> orqali yozib olish yoki translatsiya boshlansinmi?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Ulashish, yozib olish va translatsiya qilish vaqtida <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ilovasi ekranda chiqadigan yoki qurilmada ijro qilinadigan kontentni koʻra oladi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar, suratlar, audio va video chiqmasligi uchun ehtiyot boʻling."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Ulashish, yozib olish va translatsiya qilish vaqtida <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ilovasi ekranda chiqadigan yoki qurilmada ijro qilinadigan kontentni koʻra oladi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar, suratlar, audio va video chiqmasligi uchun ehtiyot boʻling."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Boshlash"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Translatsiya boshlansinmi?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Translatsiya qilayotganingizda Android ekranda chiqadigan yoki qurilmada ijro qilinadigan kontentni koʻra oladi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar, suratlar, audio va video chiqmasligi uchun ehtiyot boʻling."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Translatsiya qilayotganingizda Android ekranda chiqadigan yoki qurilmada ijro qilinadigan kontentni koʻra oladi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar, suratlar, audio va video chiqmasligi uchun ehtiyot boʻling."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Translatsiyani boshlang"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Ulashuv boshlansinmi?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Ulashish, yozib olish va translatsiya qilish vaqtida Android ekranda chiqadigan yoki qurilmada ijro qilinadigan kontentni koʻra oladi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar, suratlar, audio va video chiqmasligi uchun ehtiyot boʻling."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Ilovani ulashish, yozib olish yoki translatsiya qilayotganingizda Android ekranda chiqadigan yoki qurilmada ijro qilinadigan kontentni koʻra oladi. Shu sababli parollar, toʻlov tafsilotlari, xabarlar, suratlar, audio va video chiqmasligi uchun ehtiyot boʻling."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Boshlash"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Ilovalarni almashtirsangiz, ulashuv toʻxtatiladi"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Bu ilovani ulashish"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Ortga qaytarish"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Ilovani almashtirish"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"AT administratoringiz tomonidan bloklangan"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Ekranni tasvirga olish qurilmadan foydalanish tartibi tomonidan faolsizlantirilgan"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Hammasini tozalash"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Qurilmada CA sertifikati o‘rnatilgan. U himoyalangan tarmoq trafigini nazorat qilishi va o‘zgartirishi mumkin."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Administrator qurilmangizdagi trafikni nazorat qiluvchi tarmoq jurnalini yuritishni faollashtirgan."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Administrator ish profilingizdagi trafikni nazorat qiluvchi tarmoq jurnalini yuritishni faollashtirgan (shaxsiy profildan maʼlumotlar olinmaydi)."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Bu qurilma Internetga <xliff:g id="VPN_APP">%1$s</xliff:g> orqali ulangan. Emaillar va brauzer tarixi kabi tarmoqdagi xatti-harakatlaringiz AT administratoriga koʻrinadi."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Bu qurilma internetga <xliff:g id="VPN_APP">%1$s</xliff:g> orqali ulangan. Emaillar va brauzer tarixi kabi tarmoq harakatlaringiz VPN provayderiga koʻrinadi."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Bu qurilma Internetga <xliff:g id="VPN_APP">%1$s</xliff:g> orqali ulangan. Emaillar va brauzer tarixi kabi tarmoqdagi xatti-harakatlaringiz AT administratoriga koʻrinadi."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Bu qurilma internet <xliff:g id="VPN_APP_0">%1$s</xliff:g> va <xliff:g id="VPN_APP_1">%2$s</xliff:g> orqali ulangan. Emaillar va brauzer tarixi kabi tarmoq harakatlaringiz AT administratoriga koʻrinadi."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Ishga oid ilovalar internetga <xliff:g id="VPN_APP">%1$s</xliff:g> orqali ulangan. Ishga oid ilovalarda emaillar va brauzer tarixi kabi tarmoq harakatlaringiz AT administratori va VPN provayderiga koʻrinadi."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Shaxsiy ilovalaringiz Internetga <xliff:g id="VPN_APP">%1$s</xliff:g> orqali ulangan. Emaillar va brauzer tarixi kabi tarmoqdagi xatti-harakatlaringiz VPN provayderiga koʻrinadi."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"faolsizlantirish"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Tovush va tebranish"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Sozlamalar"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Tovush balandligi xavfsiz darajaga tushirildi"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Tovush tavsiya qilinganidan koʻra uzoqroq vaqt baland boʻldi"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Tovush xavfsiz darajaga pasaytirildi"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Quloqlik tavsiya etilganidan uzoqroq vaqt baland tovushda ishladi"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Quloqlik tovushi bu hafta xavfsiz balandlik limitidan oshib ketdi"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Davom etish"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Pasaytirish"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Ilova mahkamlandi"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Ekran yechilmaguncha u o‘zgarmas holatda qoladi. Uni yechish uchun “Orqaga” va “Umumiy ma’lumot” tugmalarini bosib turing."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ekran yechib olinmagunicha u mahkamlangan holatda qoladi. Uni yechish uchun Orqaga va Asosiy tugmalarni birga bosib turing."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Quvvat menyusi"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_1">%1$d</xliff:g>-sahifa, jami: <xliff:g id="ID_2">%2$d</xliff:g> ta sahifa"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Ekran qulfi"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Qizigani uchun o‘chirildi"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Endi telefoningiz normal holatda ishlayapti.\nBatafsil axborot uchun bosing"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Telefon qizib ketganligi sababli sovitish uchun o‘chirib qo‘yilgan. Endi telefoningiz normal holatda ishlayapti.\n\nTelefon bu hollarda qizib ketishi mumkin:\n	• Resurstalab ilovalar ishlatilganda (masalan, o‘yin, video yoki navigatsiya ilovalari)\n	• Katta faylni yuklab olishda yoki yuklashda\n	• Telefondan yuqori haroratda foydalanganda"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Batafsil axborot"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Telefon qizib ketdi"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Telefon sovib qolganda ayrim funksiyalari ishlamasligi mumkin.\nBatafsil axborot uchun bosing"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Telefon avtomatik ravishda o‘zini sovitadi. Telefoningizdan foydalanishda davom etishingiz mumkin, lekin u sekinroq ishlashi mumkin.\n\nTelefon sovishi bilan normal holatda ishlashni boshlaydi."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Batafsil axborot"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Qurilmani uzing"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Qurilmangiz quvvatlash porti yaqinida qizib ketmoqda. Agar quvvatlagich yoki USB aksessuarga ulangan boʻlsa, kabel qizib ketmasidan uni darhol uzing."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Ekranni toʻliq kattalashtirish"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Ekran qismini kattalashtirish"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Kattalashtirish sozlamalarini ochish"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Kattalashtirish sozlamalarini yopish"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Oʻlchamini oʻzgartirish uchun burchakni torting"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Diagonal aylantirishga ruxsat berish"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Oʻlchamini oʻzgartirish"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"saralanganlardan olib tashlash"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"<xliff:g id="NUMBER">%d</xliff:g>-joyga olish"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Boshqaruv elementlari"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Tezkor kirish uchun qurilma boshqaruvini tanlang"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Boshqaruv elementlarini qayta tartiblash uchun ushlab torting"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Barcha boshqaruv elementlari olib tashlandi"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Oʻzgarishlar saqlanmadi"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Boshqa PIN kod ishlating"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"<xliff:g id="DEVICE">%s</xliff:g> uchun oʻzgarishlarni tasdiqlang"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Batafsil axborot olish uchun suring"</string>
+    <string name="retry_face" msgid="416380073082560186">"Yuz autentifikatsiyasi uchun qayta urining"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Tavsiyalar yuklanmoqda"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Media"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun media boshqaruvi berkitilsinmi?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Sozlamalar"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> ilovasida ijro etilmoqda: <xliff:g id="SONG_NAME">%1$s</xliff:g> – <xliff:g id="ARTIST_NAME">%2$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> / <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> ishlamoqda"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Ijro"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Pauza"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Avvalgi trek"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Karnaylar va displeylar"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Taklif qilingan qurilmalar"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Mediani boshqa qurilmaga koʻchirish uchun umumiy seansingizni toʻxtating"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Toʻxtatish"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Translatsiya qanday ishlaydi"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Translatsiya"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Atrofingizdagi mos Bluetooth qurilmasiga ega foydalanuvchilar siz translatsiya qilayotgan mediani tinglay olishadi"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Saqlanmadi. Qayta urining."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Saqlanmadi."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Parolga kamida 4 ta belgi kiriting."</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Kiritiladigan belgilar 16 tadan oshmasin"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Kiritiladigan belgilar <xliff:g id="LENGTH">%1$d</xliff:g> tadan oshmasin"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Nashr raqami"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Nashr raqami vaqtinchalik xotiraga nusxalandi."</string>
     <string name="basic_status" msgid="2315371112182658176">"Suhbatni ochish"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Batareya quvvati aniqlanmadi"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Batafsil axborot olish uchun bosing"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Signal sozlanmagan"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"ekran qulfini kiriting"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Barmoq izi skaneri"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"autentifikatsiya"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"qurilmani ochish"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Assistent tinglamoqda"</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="note_task_button_label" msgid="8718616095800343136">"Eslatma yozish"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Qayd olish"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"<xliff:g id="NOTE_TAKING_APP">%1$s</xliff:g>: qayd olish"</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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Batafsil"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Batafsil: <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Ochish: <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Ilova sozlangan"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Kamida bitta kartochka Wallet xizmatiga qoʻshilgan"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Kamera ilovasini oʻrnating"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Ilova sozlangan"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Kamida bitta qurilma mavjud"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Wallet ilovasini yorliq sifatida qoʻshish uchun ilova oʻrnatilganiga ishonch hosil qiling"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Wallet ilovasini yorliq sifatida qoʻshish uchun kamida bitta karta kiritilganiga ishonch hosil qiling"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"QR kod skanerini yorliq sifatida qoʻshish uchun kamera ilovasi oʻrnatilganiga ishonch hosil qiling"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Home ilovasini yorliq sifatida qoʻshish uchun ilova oʻrnatilganiga ishonch hosil qiling"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Kamida bitta qurilma mavjud"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Qayd yozish yorligʻidan foydalanish uchun birlamchi qayd ilovasini tanlang"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Ilovani tanlang"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Bosib turish yorligʻi"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Bekor qilish"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Ekranlarni hozir almashtirish"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Stilusni quvvat manbaiga ulang"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Stilus batareyasi kam"</string>
     <string name="video_camera" msgid="7654002575156149298">"Videokamera"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Bu profildan chaqiruv qilish imkonsiz"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Ishga oid siyosatingiz faqat ish profilidan telefon chaqiruvlarini amalga oshirish imkonini beradi"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Shaxsiy ilova orqali chaqiruv imkonsiz"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Tashkilotingiz faqat ishga oid ilovalar orqali chaqiruvga ruxsat beradi"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Ish profiliga almashish"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Yopish"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Ishga oid telefon ilovasini oʻrnatish"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Bekor qilish"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Ekran qulfini moslash"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Ekran qulfini sozlash uchun qulfni oching"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Wi-Fi mavjud emas"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Kamera bloklangan"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Kamera va mikrofon bloklangan"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Mikrofon bloklangan"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Imtiyozli rejim yoniq"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Assistent diqqati yoniq"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Standart qaydlar ilovasini Sozlamalar orqali tanlang"</string>
+    <string name="install_app" msgid="5066668100199613936">"Ilovani oʻrnatish"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Mikrofon va kamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Ilovadan oxirgi foydalanish"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Oxirgi ruxsatni koʻrish"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Tayyor"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Parametrlarni ochish"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Yopish"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Bu ilovani yopish"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"Yopildi: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Xizmatni boshqarish"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Ruxsatni boshqarish"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Telefon chaqiruvi ishlatgan"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Yaqinda telefon chaqiruvi ishlatgan"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> ishlatmoqda"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Yaqinda <xliff:g id="APP_NAME">%1$s</xliff:g> ishlatgan"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ishlatmoqda"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Yaqinda <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) ishlatgan"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ishlatmoqda"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Yaqinda <xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) ishlatgan"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-uz/strings_tv.xml b/packages/SystemUI/res/values-uz/strings_tv.xml
deleted file mode 100644
index c34ee4f..0000000
--- a/packages/SystemUI/res/values-uz/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN ulandi"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN uzildi"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"<xliff:g id="VPN_APP">%1$s</xliff:g> orqali"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Bildirishnomalar"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Bildirishnomalar yoʻq"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Mikrofon yozib olmoqda"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Kamera yozib olmoqda"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Kamera va mikrofon yozib olmoqda"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Mikrofon yozib olishni toʻxtatdi"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Kamera yozib olishni toʻxtatdi"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Kamera va mikrofon yozib olishni toʻxtatdi"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Ekrandan yozib olish boshlandi"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Ekrandan yozib olish toʻxtatildi"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index f9a23ed..8be1dd5 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"Bật USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"Tìm hiểu thêm"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"Chụp ảnh màn hình"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Đã tắt tính năng Luôn mở khoá"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"Đã tắt tính năng Kéo dài trạng thái mở khoá"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"đã gửi hình ảnh"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"Đang lưu ảnh chụp màn hình..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"Đang lưu ảnh chụp màn hình vào hồ sơ công việc…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> đã phát hiện thấy ảnh chụp màn hình này."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> và các ứng dụng đang mở khác đã phát hiện thấy ảnh chụp màn hình này."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Thêm vào ghi chú"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Trình ghi màn hình"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Trình ghi màn hình"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Đang xử lý video ghi màn hình"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Thông báo đang diễn ra về phiên ghi màn hình"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Bắt đầu ghi?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Trong khi ghi, Hệ thống Android có thể ghi lại mọi thông tin nhạy cảm xuất hiện trên màn hình hoặc phát trên thiết bị của bạn. Những thông tin này bao gồm mật khẩu, thông tin thanh toán, ảnh, thông báo và âm thanh."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Ghi toàn màn hình"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Ghi một ứng dụng"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Khi bạn ghi, Android sẽ có quyền truy cập vào mọi nội dung xuất hiện trên màn hình hoặc phát trên thiết bị của bạn. Vì vậy, hãy thận trọng để không làm lộ mật khẩu, thông tin thanh toán, tin nhắn hoặc thông tin nhạy cảm khác."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Khi bạn ghi một ứng dụng, Android sẽ có quyền truy cập vào mọi nội dung xuất hiện hoặc phát trên thiết bị đó. Vì vậy, hãy thận trọng để không làm lộ mật khẩu, thông tin thanh toán, tin nhắn hoặc thông tin nhạy cảm khác."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Bắt đầu ghi"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Bắt đầu ghi?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Khi bạn ghi, Android sẽ có quyền truy cập vào mọi nội dung xuất hiện trên màn hình hoặc phát trên thiết bị của bạn. Vì vậy, hãy thận trọng để không làm lộ thông tin như mật khẩu, thông tin thanh toán, tin nhắn, ảnh, âm thanh và video."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Khi bạn ghi một ứng dụng, Android sẽ có quyền truy cập vào mọi nội dung xuất hiện hoặc phát trên ứng dụng đó. Vì vậy, hãy thận trọng để không làm lộ thông tin như mật khẩu, thông tin thanh toán, tin nhắn, ảnh, âm thanh và video."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Bắt đầu ghi"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Ghi âm"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Âm thanh trên thiết bị"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Âm thanh trên thiết bị, chẳng hạn như nhạc, cuộc gọi và nhạc chuông"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Micrô"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Âm thanh trên thiết bị và micrô"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Bắt đầu"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Bắt đầu"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Đang ghi màn hình"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Đang ghi màn hình và âm thanh"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Hiện vị trí của các thao tác chạm trên màn hình"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Chia sẻ"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Đã lưu bản ghi màn hình"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Nhấn để xem"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Lỗi khi xóa bản ghi màn hình"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Có lỗi xảy ra khi lưu video ghi màn hình"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Lỗi khi bắt đầu ghi màn hình"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Xem toàn màn hình"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Để thoát, hãy vuốt từ trên cùng xuống dưới."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Tôi hiểu"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Quay lại"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Trang chủ"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Menu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Đã xác thực khuôn mặt"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Ðã xác nhận"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Nhấn vào Xác nhận để hoàn tất"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Đã mở khoá bằng khuôn mặt. Nhấn vào biểu tượng mở khoá để tiếp tục."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Đã mở khoá bằng khuôn mặt"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Đã mở khoá bằng khuôn mặt. Hãy nhấn để tiếp tục."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Đã nhận diện khuôn mặt. Hãy nhấn để tiếp tục."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Đã nhận diện khuôn mặt. Nhấn biểu tượng mở khoá để tiếp tục."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Đã xác thực"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Huỷ quy trình xác thực"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Dùng mã PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Dùng hình mở khóa"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Dùng mật khẩu"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Nếu bạn nhập hình mở khóa không chính xác vào lần thử tiếp theo, thì hồ sơ công việc của bạn và dữ liệu của hồ sơ công việc sẽ bị xóa."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Nếu bạn nhập mã PIN không chính xác vào lần thử tiếp theo, thì hồ sơ công việc của bạn và dữ liệu của hồ sơ công việc sẽ bị xóa."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Nếu bạn nhập mật khẩu không chính xác vào lần thử tiếp theo, thì hồ sơ công việc của bạn và dữ liệu của hồ sơ công việc sẽ bị xóa."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Thiết lập"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Để sau"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Đây là thao tác bắt buộc giúp cải thiện hiệu suất và độ bảo mật của thiết bị"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Thiết lập lại tính năng Mở khoá bằng vân tay"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Mở khoá bằng vân tay"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Thiết lập tính năng Mở khoá bằng vân tay"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Để bạn có thể thiết lập lại tính năng Mở khoá bằng vân tay, hệ thống sẽ xoá các hình ảnh và mẫu vân tay bạn đang dùng.\n\nSau khi chúng bị xoá, bạn sẽ cần thiết lập lại tính năng Mở khoá bằng vân tay để mở khoá điện thoại hoặc để xác minh danh tính của mình bằng vân tay."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Để bạn có thể thiết lập lại tính năng Mở khoá bằng vân tay, hệ thống sẽ xoá các hình ảnh và mẫu vân tay bạn đang dùng.\n\nSau khi chúng bị xoá, bạn sẽ cần thiết lập lại tính năng Mở khoá bằng vân tay để mở khoá điện thoại hoặc để xác minh danh tính của mình bằng vân tay."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Không thiết lập được tính năng Mở khoá bằng vân tay. Hãy chuyển đến phần Cài đặt để thử lại."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Thiết lập lại tính năng Mở khoá bằng khuôn mặt"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Mở khoá bằng khuôn mặt"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Thiết lập tính năng Mở khoá bằng khuôn mặt"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Để thiết lập lại tính năng Mở khoá bằng khuôn mặt, hệ thống sẽ xoá mẫu khuôn mặt bạn đang dùng.\n\nBạn sẽ cần thiết lập lại tính năng này để mở khoá điện thoại bằng khuôn mặt."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Không thiết lập được tính năng Mở khoá bằng khuôn mặt. Hãy chuyển đến phần Cài đặt để thử lại."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Chạm vào cảm biến vân tay"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Nhấn vào biểu tượng mở khoá để tiếp tục"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Không thể nhận dạng khuôn mặt. Hãy dùng vân tay."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,14 +248,14 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Âm thanh"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Tai nghe"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Thiết bị đầu vào"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Thiết bị trợ thính"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Thiết bị trợ thính"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Đang bật…"</string>
     <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_mic_label" msgid="8392773746295266375">"Quyền truy cập micrô"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Được phép"</string>
     <string name="quick_settings_camera_mic_blocked" msgid="4710884905006788281">"Bị chặn"</string>
     <string name="quick_settings_media_device_label" msgid="8034019242363789941">"Thiết bị phương tiện"</string>
@@ -306,8 +322,8 @@
     <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Bỏ chặn micrô của thiết bị?"</string>
     <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Bỏ chặn máy ảnh của thiết bị?"</string>
     <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Bỏ chặn máy ảnh và micrô của thiết bị?"</string>
-    <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"Thao tác này sẽ bỏ chặn quyền truy cập cho mọi ứng dụng và dịch vụ được phép sử dụng micrô của bạn."</string>
-    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"Thao tác này sẽ bỏ chặn quyền truy cập cho mọi ứng dụng và dịch vụ được phép sử dụng máy ảnh của bạn."</string>
+    <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"Sau khi được bỏ chặn, mọi ứng dụng và dịch vụ có quyền sẽ có thể sử dụng micrô của bạn."</string>
+    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"Sau khi được bỏ chặn, mọi ứng dụng và dịch vụ có quyền sẽ có thể sử dụng máy ảnh của bạn."</string>
     <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"Thao tác này sẽ bỏ chặn quyền truy cập cho mọi ứng dụng và dịch vụ được phép sử dụng máy ảnh hoặc micrô của bạn."</string>
     <string name="sensor_privacy_start_use_mic_blocked_dialog_title" msgid="2640140287496469689">"Micrô bị chặn"</string>
     <string name="sensor_privacy_start_use_camera_blocked_dialog_title" msgid="7398084286822440384">"Máy ảnh bị chặn"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Đã mở khoá bằng khuôn mặt."</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Đã nhận diện khuôn mặt."</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Vuốt lên để thử lại"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Vuốt lên để thử dùng lại tính năng Mở khoá bằng khuôn mặt"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Mở khóa để sử dụng NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Thiết bị này thuộc về tổ chức của bạn"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Thiết bị này thuộc về <xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sẽ có quyền truy cập vào tất cả các thông tin hiển thị trên màn hình của bạn hoặc phát trên thiết bị của bạn trong khi ghi âm/ghi hình hoặc truyền, bao gồm cả thông tin như mật khẩu, chi tiết thanh toán, ảnh, tin nhắn và âm thanh mà bạn phát."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Dịch vụ cung cấp chức năng này có quyền truy cập vào tất cả các thông tin hiển thị trên màn hình của bạn hoặc phát trên thiết bị của bạn trong khi ghi âm/ghi hình hoặc truyền, bao gồm cả thông tin như mật khẩu, chi tiết thanh toán, ảnh, tin nhắn và âm thanh mà bạn phát."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Bắt đầu ghi âm/ghi hình hoặc truyền?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Bắt đầu ghi âm/ghi hình hoặc truyền bằng <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Cho phép <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> chia sẻ hoặc ghi?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Toàn màn hình"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"Một ứng dụng"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Khi bạn chia sẻ, ghi hoặc truyền, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sẽ có quyền truy cập vào mọi nội dung xuất hiện trên màn hình hoặc phát trên thiết bị của bạn. Vì vậy, hãy thận trọng để không làm lộ mật khẩu, thông tin thanh toán, tin nhắn hoặc thông tin nhạy cảm khác."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Khi bạn chia sẻ, ghi hoặc truyền ứng dụng, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sẽ có quyền truy cập vào mọi nội dung xuất hiện hoặc phát trên ứng dụng đó. Vì vậy, hãy thận trọng để không làm lộ mật khẩu, thông tin thanh toán, tin nhắn hoặc thông tin nhạy cảm khác."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Tiếp tục"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Chia sẻ hoặc ghi ứng dụng"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Cho phép ứng dụng này chia sẻ hoặc ghi?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Khi bạn chia sẻ, ghi hoặc truyền, ứng dụng này sẽ truy cập được vào mọi nội dung xuất hiện trên màn hình hoặc phát trên thiết bị của bạn. Vì vậy, hãy để ý đến mật khẩu, thông tin thanh toán, tin nhắn hoặc thông tin nhạy cảm khác."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Khi bạn chia sẻ, ghi hoặc truyền ứng dụng, ứng dụng này sẽ truy cập được vào mọi nội dung xuất hiện hoặc phát trên ứng dụng đó. Vì vậy, hãy để ý đến mật khẩu, thông tin thanh toán, tin nhắn hoặc thông tin nhạy cảm khác."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sẽ có quyền truy cập vào tất cả thông tin xuất hiện trên màn hình của bạn hoặc phát trên thiết bị của bạn trong khi ghi âm/ghi hình hoặc truyền, bao gồm cả thông tin như mật khẩu, thông tin thanh toán, ảnh, tin nhắn và âm thanh mà bạn phát."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Bắt đầu ghi hoặc truyền?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Dịch vụ cung cấp chức năng này có quyền truy cập vào tất cả thông tin xuất hiện trên màn hình của bạn hoặc phát trên thiết bị của bạn trong khi ghi hoặc truyền, bao gồm cả thông tin như mật khẩu, thông tin thanh toán, ảnh, tin nhắn và âm thanh mà bạn phát."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Toàn màn hình"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"Một ứng dụng"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Chia sẻ hoặc ghi màn hình ứng dụng"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Bắt đầu ghi hoặc truyền bằng <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Khi bạn chia sẻ, ghi hoặc truyền, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sẽ có quyền truy cập vào mọi nội dung xuất hiện trên màn hình hoặc phát trên thiết bị của bạn. Vì vậy, hãy thận trọng để không làm lộ thông tin như mật khẩu, thông tin thanh toán, tin nhắn, ảnh, âm thanh và video."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Khi bạn chia sẻ, ghi hoặc truyền ứng dụng, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> sẽ có quyền truy cập vào mọi nội dung xuất hiện hoặc phát trên ứng dụng đó. Vì vậy, hãy thận trọng để không làm lộ các thông tin như mật khẩu, thông tin thanh toán, tin nhắn, ảnh, âm thanh và video."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Bắt đầu"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Bắt đầu truyền?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Khi bạn truyền, Android sẽ có quyền truy cập vào mọi nội dung xuất hiện trên màn hình hoặc phát trên thiết bị của bạn. Vì vậy, hãy thận trọng để không làm lộ thông tin như mật khẩu, thông tin thanh toán, tin nhắn, ảnh, âm thanh và video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Khi bạn truyền một ứng dụng, Android sẽ có quyền truy cập vào mọi nội dung xuất hiện hoặc phát trên ứng dụng đó. Vì vậy, hãy thận trọng để không làm lộ các thông tin như mật khẩu, thông tin thanh toán, tin nhắn, ảnh, âm thanh và video."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Bắt đầu truyền"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Bắt đầu chia sẻ?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Khi bạn chia sẻ, ghi hoặc truyền, Android sẽ có quyền truy cập vào mọi nội dung xuất hiện trên màn hình hoặc phát trên thiết bị của bạn. Vì vậy, hãy thận trọng để không làm lộ thông tin như mật khẩu, thông tin thanh toán, tin nhắn, ảnh, âm thanh và video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Khi bạn chia sẻ, ghi hoặc truyền ứng dụng, Android sẽ có quyền truy cập vào mọi nội dung xuất hiện hoặc phát trên ứng dụng đó. Vì vậy, hãy thận trọng để không làm lộ các thông tin như mật khẩu, thông tin thanh toán, tin nhắn, ảnh, âm thanh và video."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Bắt đầu"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Quá trình chia sẻ sẽ tạm dừng khi bạn chuyển đổi ứng dụng"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Chia sẻ ứng dụng này"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Chuyển trở lại"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Chuyển đổi ứng dụng"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Bị quản trị viên CNTT chặn"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Tính năng chụp ảnh màn hình đã bị tắt theo chính sách thiết bị"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Xóa tất cả"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Một tổ chức phát hành chứng chỉ được cài đặt trên thiết bị này. Lưu lượng truy cập mạng bảo mật của bạn có thể được giám sát hoặc sửa đổi."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Quản trị viên của bạn đã bật tính năng ghi nhật ký mạng. Tính năng này giám sát lưu lượng truy cập trên thiết bị của bạn."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Quản trị viên của bạn đã bật tính năng ghi nhật ký mạng. Tính năng này giám sát lưu lượng truy cập trong hồ sơ công việc chứ không giám sát lưu lượng truy cập trong hồ sơ cá nhân của bạn."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Thiết bị này được kết nối với Internet thông qua <xliff:g id="VPN_APP">%1$s</xliff:g>. Hoạt động mạng bao gồm email và dữ liệu duyệt web sẽ được hiển thị cho quản trị viên CNTT."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Thiết bị này kết nối với Internet thông qua <xliff:g id="VPN_APP">%1$s</xliff:g>. Nhà cung cấp VPN có thể nhìn thấy hoạt động của bạn trên mạng, bao gồm cả email và dữ liệu duyệt web."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Thiết bị này kết nối với Internet thông qua <xliff:g id="VPN_APP">%1$s</xliff:g>. Quản trị viên CNTT của bạn có thể nhìn thấy hoạt động của bạn trên mạng, bao gồm cả email và dữ liệu duyệt web."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Thiết bị này được kết nối với Internet thông qua <xliff:g id="VPN_APP_0">%1$s</xliff:g> và <xliff:g id="VPN_APP_1">%2$s</xliff:g>. Hoạt động mạng bao gồm email và dữ liệu duyệt web sẽ được hiển thị cho quản trị viên CNTT."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Ứng dụng công việc của bạn được kết nối với Internet thông qua <xliff:g id="VPN_APP">%1$s</xliff:g>. Hoạt động mạng trong các ứng dụng công việc, bao gồm cả email và dữ liệu duyệt web, sẽ được hiển thị cho quản trị viên CNTT và nhà cung cấp VPN của bạn."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Ứng dụng cá nhân được kết nối với Internet thông qua <xliff:g id="VPN_APP">%1$s</xliff:g>. Hoạt động mạng của bạn, bao gồm email và dữ liệu duyệt web, được hiển thị cho nhà cung cấp VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"tắt"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Âm thanh và chế độ rung"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Cài đặt"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Đã giảm âm lượng xuống mức an toàn hơn"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Âm lượng ở mức cao trong khoảng thời gian lâu hơn khuyến nghị"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Âm lượng đã giảm xuống mức an toàn hơn"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Bạn đã dùng tai nghe ở mức âm lượng cao lâu hơn khoảng thời gian khuyến nghị, điều này có thể gây tổn hại đến thính giác của bạn"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Âm lượng tai nghe đã vượt quá giới hạn an toàn của tuần này"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Tiếp tục nghe"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Giảm âm lượng"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"Đã ghim ứng dụng"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Ứng dụng này sẽ ở cố định trên màn hình cho đến khi bạn bỏ ghim. Hãy chạm và giữ Quay lại và Tổng quan để bỏ ghim."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Ứng dụng này sẽ ở cố định trên màn hình cho đến khi bạn bỏ ghim. Hãy chạm và giữ nút Quay lại và nút Màn hình chính để bỏ ghim."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Trình đơn nguồn"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Trang <xliff:g id="ID_1">%1$d</xliff:g> / <xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Màn hình khóa"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Điện thoại đã tắt do nhiệt"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Điện thoại của bạn đang chạy bình thường.\nHãy nhấn để biết thêm thông tin"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Do quá nóng nên điện thoại đã tắt để hạ nhiệt. Hiện điện thoại của bạn đang chạy bình thường.\n\nĐiện thoại có thể bị quá nóng nếu bạn:\n	• Dùng các ứng dụng tốn nhiều tài nguyên (như ứng dụng trò chơi, video hoặc điều hướng)\n	• Tải xuống hoặc tải lên tệp có dung lượng lớn\n	• Dùng điện thoại ở nhiệt độ cao"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Xem các bước chăm sóc"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Điện thoại đang nóng lên"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Một số tính năng bị hạn chế trong khi điện thoại nguội dần.\nHãy nhấn để biết thêm thông tin"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Điện thoại của bạn sẽ tự động nguội dần. Bạn vẫn có thể sử dụng điện thoại, nhưng điện thoại có thể chạy chậm hơn. \n\nSau khi đã nguội, điện thoại sẽ chạy bình thường."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Xem các bước chăm sóc"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Rút thiết bị ra"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Phần gần cổng sạc của thiết bị đang nóng lên. Nếu thiết bị kết nối với bộ sạc hoặc phụ kiện USB, hãy rút ra một cách thận trọng vì cáp có thể cũng đang nóng."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Phóng to toàn màn hình"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Phóng to một phần màn hình"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Mở chế độ cài đặt phóng to"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Đóng bảng cài đặt tính năng phóng to"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Kéo góc để thay đổi kích thước"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Cho phép cuộn chéo"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Đổi kích thước"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"Nhấn để mở bộ tính năng hỗ trợ tiếp cận. Tuỳ chỉnh/thay thế nút này trong phần Cài đặt.\n\n"<annotation id="link">"Xem chế độ cài đặt"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"Di chuyển nút sang cạnh để ẩn nút tạm thời"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"Huỷ"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Đã xoá lối tắt <xliff:g id="FEATURE_NAME">%s</xliff:g>"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Đã xoá phím tắt dành cho <xliff:g id="FEATURE_NAME">%s</xliff:g>"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{Đã xoá # lối tắt}other{Đã xoá # lối tắt}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Chuyển lên trên cùng bên trái"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Chuyển lên trên cùng bên phải"</string>
@@ -885,10 +910,9 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"bỏ yêu thích"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Di chuyển tới vị trí số <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Các tùy chọn điều khiển"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
-    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Giữ và kéo để sắp xếp lại các tùy chọn điều khiển"</string>
-    <string name="controls_favorite_removed" msgid="5276978408529217272">"Đã xóa tất cả tùy chọn điều khiển"</string>
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Chọn các chế độ điều khiển thiết bị để truy cập nhanh"</string>
+    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Giữ và kéo để sắp xếp lại các chế độ điều khiển"</string>
+    <string name="controls_favorite_removed" msgid="5276978408529217272">"Đã xóa tất cả chế độ điều khiển"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Chưa lưu các thay đổi"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"Xem ứng dụng khác"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"Sắp xếp lại"</string>
@@ -915,15 +939,17 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Thử một mã PIN khác"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Xác nhận thay đổi <xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Vuốt để xem thêm"</string>
+    <string name="retry_face" msgid="416380073082560186">"Thử xác thực lại khuôn mặt"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Đang tải các đề xuất"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Nội dung nghe nhìn"</string>
-    <string name="controls_media_close_session" msgid="4780485355795635052">"Ẩn chế độ điều khiển nội dung nghe nhìn này cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="controls_media_close_session" msgid="4780485355795635052">"Ẩn tính năng điều khiển này cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
     <string name="controls_media_active_session" msgid="3146882316024153337">"Không thể ẩn phiên phát nội dung nghe nhìn hiện tại."</string>
     <string name="controls_media_dismiss_button" msgid="4485675693008031646">"Ẩn"</string>
     <string name="controls_media_resume" msgid="1933520684481586053">"Tiếp tục"</string>
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Cài đặt"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Đang phát <xliff:g id="SONG_NAME">%1$s</xliff:g> của <xliff:g id="ARTIST_NAME">%2$s</xliff:g> trên <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> đang chạy"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Phát"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Tạm dừng"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Bản nhạc trước"</string>
@@ -950,7 +976,7 @@
     <string name="controls_open_app" msgid="483650971094300141">"Mở ứng dụng"</string>
     <string name="controls_error_generic" msgid="352500456918362905">"Không tải được trạng thái"</string>
     <string name="controls_error_failed" msgid="960228639198558525">"Lỗi, hãy thử lại"</string>
-    <string name="controls_menu_add" msgid="4447246119229920050">"Thêm các tùy chọn điều khiển"</string>
+    <string name="controls_menu_add" msgid="4447246119229920050">"Thêm tuỳ chọn điều khiển"</string>
     <string name="controls_menu_edit" msgid="890623986951347062">"Chỉnh sửa chế độ điều khiển"</string>
     <string name="controls_menu_add_another_app" msgid="8661172304650786705">"Thêm ứng dụng"</string>
     <string name="controls_menu_remove" msgid="3006525275966023468">"Xoá ứng dụng"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Loa và màn hình"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Thiết bị được đề xuất"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Dừng phiên chia sẻ của bạn để chuyển nội dung nghe nhìn sang thiết bị khác"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Dừng"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Cách tính năng truyền hoạt động"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Truyền"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Những người ở gần có thiết bị Bluetooth tương thích có thể nghe nội dung nghe nhìn bạn đang truyền"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Không lưu được. Hãy thử lại."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Không lưu được."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Sử dụng ít nhất 4 ký tự"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Sử dụng ít hơn 16 ký tự"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Hãy dùng ít hơn <xliff:g id="LENGTH">%1$d</xliff:g> ký tự"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Số bản dựng"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Đã sao chép số bản dựng vào bảng nhớ tạm."</string>
     <string name="basic_status" msgid="2315371112182658176">"Mở cuộc trò chuyện"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Đã xảy ra vấn đề khi đọc dung lượng pin của bạn"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Nhấn để biết thêm thông tin"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Chưa đặt chuông báo"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"nhập phương thức mở khoá màn hình"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Cảm biến vân tay"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"xác thực"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"truy cập thiết bị"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Trợ lý đang nghe bạn nói"</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="note_task_button_label" msgid="8718616095800343136">"Ghi chú"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Ghi chú"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Ghi chú, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Tìm hiểu thêm"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Tìm hiểu thêm tại <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Mở <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• Ứng dụng được thiết lập"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Thêm ít nhất một thẻ vào Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Cài đặt một ứng dụng máy ảnh"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• Ứng dụng được thiết lập"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Có ít nhất một thiết bị đang hoạt động"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Để tạo lối tắt cho ứng dụng Wallet, hãy đảm bảo bạn đã cài đặt ứng dụng đó"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Để tạo lối tắt cho ứng dụng Wallet, hãy đảm bảo bạn đã thêm ít nhất một thẻ"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Để tạo lối tắt cho Trình quét mã QR, hãy đảm bảo rằng bạn đã cài đặt một ứng dụng máy ảnh"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Để tạo lối tắt cho ứng dụng Home, hãy đảm bảo bạn đã cài đặt ứng dụng đó"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Có ít nhất một thiết bị đang hoạt động"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Chọn một ứng dụng ghi chú mặc định để dùng lối tắt ghi chú"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Chọn ứng dụng"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Chạm và giữ phím tắt"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Huỷ"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Chuyển đổi màn hình ngay"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Hãy kết nối bút cảm ứng với bộ sạc"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Bút cảm ứng bị yếu pin"</string>
     <string name="video_camera" msgid="7654002575156149298">"Máy quay video"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Không thể gọi điện từ hồ sơ này"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Chính sách của nơi làm việc chỉ cho phép bạn gọi điện thoại từ hồ sơ công việc"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Không thể gọi điện bằng ứng dụng cá nhân"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Tổ chức của bạn chỉ cho phép bạn gọi điện bằng ứng dụng công việc"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Chuyển sang hồ sơ công việc"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Đóng"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Cài đặt ứng dụng điện thoại cho công việc"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Huỷ"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Tuỳ chỉnh màn hình khoá"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Mở khoá để tuỳ chỉnh màn hình khoá"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"Không có Wi-Fi"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Máy ảnh bị chặn"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Máy ảnh và micrô bị chặn"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Micrô bị chặn"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Chế độ ưu tiên đang bật"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Trợ lý đang bật"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Đặt ứng dụng ghi chú mặc định trong phần Cài đặt"</string>
+    <string name="install_app" msgid="5066668100199613936">"Cài đặt ứng dụng"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Micrô và máy ảnh"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Hoạt động sử dụng gần đây của ứng dụng"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Xem hoạt động truy cập gần đây"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Xong"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Mở rộng và hiện các lựa chọn"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Thu gọn"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Đóng ứng dụng này"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> đã đóng"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Quản lý dịch vụ"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Quản lý quyền truy cập"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Đang được dùng trong cuộc gọi điện thoại"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Đã dùng gần đây trong cuộc gọi điện thoại"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> đang dùng"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"<xliff:g id="APP_NAME">%1$s</xliff:g> đã dùng gần đây"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) đang dùng"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) đã dùng gần đây"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) đang dùng"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) đã dùng gần đây"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-vi/strings_tv.xml b/packages/SystemUI/res/values-vi/strings_tv.xml
deleted file mode 100644
index b140fc0..0000000
--- a/packages/SystemUI/res/values-vi/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN đã được kết nối"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN đã bị ngắt kết nối"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Thông qua <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Thông báo"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Không có thông báo"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Micrô đang ghi"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Máy ảnh đang ghi"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Máy ảnh và micrô đang ghi"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Micrô đã dừng ghi"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Máy ảnh đã dừng ghi"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Máy ảnh và micrô đã dừng ghi"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Đã bắt đầu ghi màn hình"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Đã dừng ghi màn hình"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 5110027..299ebf9 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -69,7 +69,7 @@
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"启用 USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"了解详情"</string>
     <string name="global_action_screenshot" msgid="2760267567509131654">"屏幕截图"</string>
-    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"已停用 Extend Unlock"</string>
+    <string name="global_action_smart_lock_disabled" msgid="6286551337177954859">"已停用延长解锁"</string>
     <string name="remote_input_image_insertion_text" msgid="4850791636452521123">"发送了一张图片"</string>
     <string name="screenshot_saving_title" msgid="2298349784913287333">"正在保存屏幕截图..."</string>
     <string name="screenshot_saving_work_profile_title" msgid="5332829607308450880">"正在将屏幕截图保存到工作资料…"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> 检测到此屏幕截图。"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> 及其他打开的应用检测到此屏幕截图。"</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"添加到备注中"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"屏幕录制器"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"屏幕录制器"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"正在处理屏幕录制视频"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"持续显示屏幕录制会话通知"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"要开始录制吗?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"在录制内容时,Android 系统可以捕捉到您屏幕上显示或设备中播放的敏感信息,其中包括密码、付款信息、照片、消息和音频。"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"录制整个屏幕"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"录制单个应用"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"在您进行录制时,Android 可以访问您的屏幕显示或设备播放的所有内容。因此,请注意保护密码、付款信息、消息或其他敏感信息。"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"在您录制某个应用时,Android 可以访问此应用显示或播放的所有内容。因此,请注意保护密码、付款信息、消息或其他敏感信息。"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"开始录制"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"要开始录制吗?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"在录制内容时,Android 可以访问屏幕上显示或设备中播放的所有内容。因此,请务必小心操作,谨防密码、付款信息、消息、照片、音频和视频等内容遭到泄露。"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"在录制某个应用时,Android 可以访问此应用显示或播放的所有内容。因此,请务必小心操作,谨防密码、付款信息、消息、照片、音频和视频等内容遭到泄露。"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"开始录制"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"录制音频"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"设备音频"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"设备发出的声音,例如音乐、通话和铃声"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"麦克风"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"设备音频和麦克风"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"开始"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"开始"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"正在录制屏幕"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"正在录制屏幕和音频"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"显示触屏位置"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"分享"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"已保存屏幕录制内容"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"点按即可查看"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"删除屏幕录制内容时出错"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"保存屏幕录制内容时出错"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"启动屏幕录制时出错"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"目前处于全屏模式"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"要退出,请从顶部向下滑动。"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"知道了"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"返回"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"主屏幕"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"菜单"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"面孔身份验证成功"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"已确认"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"点按“确认”即可完成"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"已通过面孔识别解锁。按下解锁图标即可继续。"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"已用面孔解锁"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"已通过面孔识别解锁。点按即可继续。"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"识别出面孔。点按即可继续。"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"识别出面孔。按下解锁图标即可继续。"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"已经过身份验证"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"取消身份验证"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"使用 PIN 码"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"使用图案"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"使用密码"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"如果您下次绘制的解锁图案仍然有误,您的工作资料及其相关数据将会被删除。"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"如果您下次输入的 PIN 码仍然有误,您的工作资料及其相关数据将会被删除。"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"如果您下次输入的密码仍然有误,您的工作资料及其相关数据将会被删除。"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"设置"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"以后再说"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"这是提高安全性和性能的必要步骤"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"重新设置“指纹解锁”功能"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"指纹解锁"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"设置“指纹解锁”功能"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"如需重新设置“指纹解锁”功能,系统将删除当前所用的指纹图像和模型。\n\n删除后,您需要重新设置“指纹解锁”功能,才能使用指纹解锁手机或验证身份。"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"如需重新设置“指纹解锁”功能,系统将删除当前所用的指纹图像和模型。\n\n删除后,您需要重新设置“指纹解锁”功能,才能使用指纹解锁手机或验证身份。"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"无法设置“指纹解锁”功能。请前往“设置”重试。"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"重新设置“人脸解锁”功能"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"人脸解锁"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"设置“人脸解锁”功能"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"如需重新设置“人脸解锁”功能,系统将删除当前所用的脸部模型。\n\n您需要重新设置此功能,才能通过刷脸来解锁手机。"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"无法设置“人脸解锁”功能。请前往“设置”重试。"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"请触摸指纹传感器"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"按下解锁图标即可继续"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"无法识别人脸。请改用指纹。"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,9 +248,9 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"音频"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"耳机"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"输入"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"助听器"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"助听器"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"正在开启…"</string>
-    <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"自动旋转屏幕"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"自动屏幕旋转"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"自动旋转屏幕"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"位置信息"</string>
     <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"屏保"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"已用面孔解锁"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"已识别出面孔"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"向上滑动即可重试"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"向上滑动即可再次尝试人脸解锁"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"需要解锁才能使用 NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"此设备归贵单位所有"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"此设备归<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>所有"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"是否移除用户?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"此用户的所有应用和数据均将被删除。"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"移除"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"在录制或投放内容时,<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>将可获取您屏幕上显示或设备中播放的所有信息,其中包括密码、付款明细、照片、消息以及您播放的音频等信息。"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"在录制或投放内容时,提供此功能的服务将可获取您屏幕上显示或设备中播放的所有信息,其中包括密码、付款明细、照片、消息以及您播放的音频等信息。"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"要开始录制或投放内容吗?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"要开始使用<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>录制或投放内容吗?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"允许 <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 分享或录制吗?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"整个屏幕"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"单个应用"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"当您进行分享、录制或投屏时,<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 可以访问您的屏幕上显示的或设备上播放的所有内容。因此,请注意保护密码、付款信息、消息或其他敏感信息。"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"当您对一款应用进行分享、录制或投屏时,<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 可以访问该应用中显示或播放的所有内容。因此,请注意保护密码、付款信息、消息或其他敏感信息。"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"继续"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"分享或录制应用"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"是否允许此应用进行分享或录制?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"在您进行分享、录制或投屏时,此应用可以访问您的屏幕显示或设备播放的所有内容。因此,请注意保护密码、付款信息、消息或其他敏感信息。"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"在您进行分享、录制或投屏时,此应用可以访问通过此应用显示或播放的所有内容。因此,请注意保护密码、付款信息、消息或其他敏感信息。"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"在录制或投放内容时,<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>将可访问屏幕上显示或设备中播放的所有信息,其中包括密码、付款信息、照片、消息及播放的音频等信息。"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"要开始录制或投放内容吗?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"在录制或投放内容时,提供此功能的服务将可访问屏幕上显示或设备中播放的所有信息,其中包括密码、付款信息、照片、消息及播放的音频等信息。"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"整个屏幕"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"单个应用"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"分享或录制应用"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"要开始使用<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>录制或投放吗?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"在分享、录制或投放内容时,<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>可以访问屏幕上显示或设备中播放的所有内容。因此,请务必小心操作,谨防密码、付款信息、消息、照片、音频和视频等内容遭到泄露。"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"在分享、录制或投放内容时,<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>可以访问通过此应用显示或播放的所有内容。因此,请务必小心操作,谨防密码、付款信息、消息、照片、音频和视频等内容遭到泄露。"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"开始"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"开始投放?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"在投放内容时,Android 可以访问屏幕上显示或设备中播放的所有内容。因此,请务必小心操作,谨防密码、付款信息、消息、照片、音频和视频等内容遭到泄露。"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"在投放某个应用时,Android 可以访问此应用显示或播放的所有内容。因此,请务必小心操作,谨防密码、付款信息、消息、照片、音频和视频等内容遭到泄露。"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"开始投放"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"开始分享?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"在分享内容时,Android 可以访问屏幕上显示或设备中播放的所有内容。因此,请务必小心操作,谨防密码、付款信息、消息、照片、音频和视频等内容遭到泄露。"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"在分享、录制或投放内容时,Android 可以访问通过此应用显示或播放的所有内容。因此,请务必小心操作,谨防密码、付款信息、消息、照片、音频和视频等内容遭到泄露。"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"开始"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"切换应用后,分享会暂停"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"改为分享此应用"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"切换回去"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"应用切换"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"已被 IT 管理员禁止"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"设备政策已停用屏幕截图功能"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"全部清除"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"此设备上已安装证书授权中心。您的安全网络流量可能会受到监控或修改。"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"您的管理员已开启网络日志记录功能(该功能会监控您设备上的流量)。"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"您的管理员已开启网络日志记录功能,该功能会监控您的工作资料的流量,但不会监控您个人资料的流量。"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"此设备已通过“<xliff:g id="VPN_APP">%1$s</xliff:g>”连接到互联网。您的 IT 管理员可以查看您的网络活动,包括电子邮件和浏览数据。"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"此设备通过“<xliff:g id="VPN_APP">%1$s</xliff:g>”连接到互联网。VPN 提供方可以查看您的网络活动,包括电子邮件和浏览数据。"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"此设备已通过“<xliff:g id="VPN_APP">%1$s</xliff:g>”连接到互联网。IT 管理员可以查看您的网络活动,包括电子邮件和浏览数据。"</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"此设备已通过“<xliff:g id="VPN_APP_0">%1$s</xliff:g>”和“<xliff:g id="VPN_APP_1">%2$s</xliff:g>”连接到互联网。您的 IT 管理员可以查看您的网络活动,包括电子邮件和浏览数据。"</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"您的工作应用已通过“<xliff:g id="VPN_APP">%1$s</xliff:g>”连接到互联网。您的 IT 管理员和 VPN 提供商可以查看工作应用的网络活动,包括电子邮件和浏览数据。"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"您的个人应用已通过“<xliff:g id="VPN_APP">%1$s</xliff:g>”连接到互联网。您的 VPN 提供商可以查看您的网络活动,包括电子邮件和浏览数据。"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"停用"</string>
     <string name="sound_settings" msgid="8874581353127418308">"声音和振动"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"设置"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"已降低至较安全的音量"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"音量保持较高的时间超过了建议时长"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"音量已降到更安全的水平"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"耳机音量保持较高的时间超过了建议时长"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"耳机音量已超出这周的安全上限"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"继续聆听"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"调低音量"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"应用已固定"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"这将会固定显示此屏幕,直到您取消固定为止。触摸并按住“返回”和“概览”即可取消固定屏幕。"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"这将会固定显示此屏幕,直到您取消固定为止。触摸并按住“返回”和“主屏幕”即可取消固定屏幕。"</string>
@@ -626,14 +656,14 @@
     <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"未找到任何快捷键"</string>
     <string name="keyboard_shortcut_search_category_system" msgid="1151182120757052669">"系统"</string>
     <string name="keyboard_shortcut_search_category_input" msgid="5440558509904296233">"输入"</string>
-    <string name="keyboard_shortcut_search_category_open_apps" msgid="1450959949739257562">"打开的应用"</string>
+    <string name="keyboard_shortcut_search_category_open_apps" msgid="1450959949739257562">"已开应用"</string>
     <string name="keyboard_shortcut_search_category_current_app" msgid="2011953559133734491">"当前应用"</string>
     <string name="group_system_access_notification_shade" msgid="7116898151485382275">"访问通知栏"</string>
     <string name="group_system_full_screenshot" msgid="7389040853798023211">"截取全屏"</string>
     <string name="group_system_access_system_app_shortcuts" msgid="4421497579210445641">"访问系统/应用快捷方式的列表"</string>
     <string name="group_system_go_back" msgid="8838454003680364227">"返回:返回到上一个状态(返回按钮)"</string>
     <string name="group_system_access_home_screen" msgid="1857344316928441909">"访问主屏幕"</string>
-    <string name="group_system_overview_open_apps" msgid="6897128761003265350">"已打开应用的概览"</string>
+    <string name="group_system_overview_open_apps" msgid="6897128761003265350">"已开应用概览"</string>
     <string name="group_system_cycle_forward" msgid="9202444850838205990">"循环浏览近期使用的应用(向前)"</string>
     <string name="group_system_cycle_back" msgid="5163464503638229131">"循环浏览近期使用的应用(向后)"</string>
     <string name="group_system_access_all_apps_search" msgid="488070738028991753">"访问所有应用的列表并搜索所需应用(即搜索/启动器)"</string>
@@ -700,7 +730,7 @@
     <string name="left_icon" msgid="5036278531966897006">"向左图标"</string>
     <string name="right_icon" msgid="1103955040645237425">"向右图标"</string>
     <string name="drag_to_add_tiles" msgid="8933270127508303672">"按住并拖动即可添加功能块"</string>
-    <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"按住并拖动即可重新排列功能块"</string>
+    <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"按住并拖动即可重新排列图块"</string>
     <string name="drag_to_remove_tiles" msgid="4682194717573850385">"拖动到此处即可移除"</string>
     <string name="drag_to_remove_disabled" msgid="933046987838658850">"您至少需要 <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> 个卡片"</string>
     <string name="qs_edit" msgid="5583565172803472437">"编辑"</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"电源菜单"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"第 <xliff:g id="ID_1">%1$d</xliff:g> 页,共 <xliff:g id="ID_2">%2$d</xliff:g> 页"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"锁定屏幕"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"手机因严重发热而自动关机"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"现在,您的手机已恢复正常运行。\n点按即可了解详情"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"由于发热严重,因此您的手机执行了自动关机以降温。现在,您的手机已恢复正常运行。\n\n以下情况可能会导致您的手机严重发热:\n • 使用占用大量资源的应用(例如游戏、视频或导航应用)\n • 下载或上传大型文件\n • 在高温环境下使用手机"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"查看处理步骤"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"手机温度上升中"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"手机降温时,部分功能的使用会受限制。\n点按即可了解详情"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"您的手机将自动尝试降温。您依然可以使用您的手机,但是手机运行速度可能会更慢。\n\n手机降温后,就会恢复正常的运行速度。"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"查看处理步骤"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"拔出设备"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"设备的充电接口附近在发热。如果该设备已连接到充电器或 USB 配件,请立即拔掉,并注意充电线也可能会发热。"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"放大整个屏幕"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"放大部分屏幕"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"打开放大功能设置"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"关闭放大设置"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"拖动一角即可调整大小"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"允许沿对角线滚动"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"调整大小"</string>
@@ -861,7 +886,7 @@
     <string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"点按即可打开无障碍功能。您可在“设置”中自定义或更换此按钮。\n\n"<annotation id="link">"查看设置"</annotation></string>
     <string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"将按钮移到边缘,即可暂时将其隐藏"</string>
     <string name="accessibility_floating_button_undo" msgid="511112888715708241">"撤消"</string>
-    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"已移除快捷方式 <xliff:g id="FEATURE_NAME">%s</xliff:g>"</string>
+    <string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"已移除“<xliff:g id="FEATURE_NAME">%s</xliff:g>”快捷方式"</string>
     <string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{已移除 # 个快捷方式}other{已移除 # 个快捷方式}}"</string>
     <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"移至左上角"</string>
     <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"移至右上角"</string>
@@ -885,15 +910,14 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"取消收藏"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"移至位置 <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"控制"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
-    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"按住并拖动即可重新排列控制器"</string>
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"选择要快速访问的设备控制器"</string>
+    <string name="controls_favorite_rearrange" msgid="5616952398043063519">"按住并拖动即可重新排列控件"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"已移除所有控制器"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"未保存更改"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"查看其他应用"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"重新排列"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"添加控件"</string>
-    <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"返回以继续修改"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"添加控制器"</string>
+    <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"返回修改"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"无法加载控件。请查看<xliff:g id="APP">%s</xliff:g>应用,确保应用设置没有更改。"</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"找不到兼容的控件"</string>
     <string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"其他"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"试试其他 PIN 码"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"确认<xliff:g id="DEVICE">%s</xliff:g>的更改"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"滑动可查看更多结构"</string>
+    <string name="retry_face" msgid="416380073082560186">"重试人脸识别身份验证"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"正在加载推荐内容"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"媒体"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"要针对“<xliff:g id="APP_NAME">%1$s</xliff:g>”隐藏此媒体控件吗?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"设置"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"正在通过<xliff:g id="APP_LABEL">%3$s</xliff:g>播放<xliff:g id="ARTIST_NAME">%2$s</xliff:g>的《<xliff:g id="SONG_NAME">%1$s</xliff:g>》"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> / <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”正在运行"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"播放"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"暂停"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"上一首"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"音箱和显示屏"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"建议的设备"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"停止共享的会话,即可将媒体移到其他设备"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"停止"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"广播的运作方式"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"广播"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"附近使用兼容蓝牙设备的用户可以收听您广播的媒体内容"</string>
@@ -981,9 +1009,9 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"无法保存,请重试。"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"无法保存。"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"必须至少 4 个字符"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"必须少于 16 个字符"</string>
-    <string name="build_number_clip_data_label" msgid="3623176728412560914">"版本号"</string>
-    <string name="build_number_copy_toast" msgid="877720921605503046">"已将版本号复制到剪贴板。"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"必须少于 <xliff:g id="LENGTH">%1$d</xliff:g> 个字符"</string>
+    <string name="build_number_clip_data_label" msgid="3623176728412560914">"Build 号"</string>
+    <string name="build_number_copy_toast" msgid="877720921605503046">"已将 Build 号复制到剪贴板。"</string>
     <string name="basic_status" msgid="2315371112182658176">"开放式对话"</string>
     <string name="select_conversation_title" msgid="6716364118095089519">"对话微件"</string>
     <string name="select_conversation_text" msgid="3376048251434956013">"点按对话即可将其添加到主屏幕"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"读取电池计量器时出现问题"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"点按即可了解详情"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"未设置闹钟"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"输入屏幕解锁信息"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"指纹传感器"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"身份验证"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"进入设备"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Google 助理正在聆听"</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="note_task_button_label" msgid="8718616095800343136">"记录"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"记事"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"记事,<xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"了解详情"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"如需了解详情,请前往 <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"打开<xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• 应用已设置完毕"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• 至少已将一张银行卡添加到钱包"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• 安装相机应用"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• 应用已设置完毕"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• 至少有一台设备可用"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"若要将 Google 钱包应用添加为快捷方式,请确保已安装该应用"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"若要将 Google 钱包应用添加为快捷方式,请确保至少已添加一张银行卡"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"若要将二维码扫描器添加为快捷方式,请确保已安装相机应用"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"若要将 Home 应用添加为快捷方式,请确保已安装该应用"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• 至少有一台设备可用"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"选择默认记事应用即可使用记事快捷方式"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"选择应用"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"轻触并按住快捷方式"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"取消"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"立即切换屏幕"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"请将触控笔连接充电器"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"触控笔电池电量低"</string>
     <string name="video_camera" msgid="7654002575156149298">"摄像机"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"无法通过这份资料拨打电话"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"根据您的工作政策,您只能通过工作资料拨打电话"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"无法通过个人应用拨打电话"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"贵组织仅允许您通过工作应用拨打电话"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"切换到工作资料"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"关闭"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"安装工作电话应用"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"取消"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"自定义锁屏状态"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"解锁以自定义锁定屏幕"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"没有 WLAN 连接"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"已禁用摄像头"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"已禁用摄像头和麦克风"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"已禁用麦克风"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"已开启优先模式"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"已开启 Google 助理感知功能"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"在设置中设置默认记事应用"</string>
+    <string name="install_app" msgid="5066668100199613936">"安装应用"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"麦克风和摄像头"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"近期应用对手机传感器的使用情况"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"查看近期使用情况"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"完成"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"展开并显示选项"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"收起"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"关闭此应用"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”已关闭"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"管理服务"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"管理访问权限"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"正用于通话"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"最近在通话中使用过"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”正在使用"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”最近使用过"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”正在使用(<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”最近使用过(<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”正在使用(<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”最近使用过(<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings_tv.xml b/packages/SystemUI/res/values-zh-rCN/strings_tv.xml
deleted file mode 100644
index ad4d94b0..0000000
--- a/packages/SystemUI/res/values-zh-rCN/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN 已连接"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN 已断开连接"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"通过“<xliff:g id="VPN_APP">%1$s</xliff:g>”"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"通知"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"没有通知"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"麦克风正在录制"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"相机正在录制"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"相机和麦克风正在录制"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"麦克风已停止录制"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"相机已停止录制"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"相机和麦克风已停止录制"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"已开始录制屏幕"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"已停止录制屏幕"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index 82f81f6..fb40f32 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -36,8 +36,8 @@
     <string name="usb_device_permission_prompt_warn" msgid="2309129784984063656">"要允許「<xliff:g id="APPLICATION">%1$s</xliff:g>」存取「<xliff:g id="USB_DEVICE">%2$s</xliff:g>」嗎?\n此應用程式尚未獲授予錄音權限,但可透過此 USB 裝置記錄音訊。"</string>
     <string name="usb_audio_device_permission_prompt_title" msgid="4221351137250093451">"要允許「<xliff:g id="APPLICATION">%1$s</xliff:g>」存取「<xliff:g id="USB_DEVICE">%2$s</xliff:g>」嗎?"</string>
     <string name="usb_audio_device_confirm_prompt_title" msgid="8828406516732985696">"要開啟「<xliff:g id="APPLICATION">%1$s</xliff:g>」處理「<xliff:g id="USB_DEVICE">%2$s</xliff:g>」嗎?"</string>
-    <string name="usb_audio_device_prompt_warn" msgid="2504972133361130335">"此應用程式尚未獲授予錄音權限,但可透過此 USB 裝置記錄音訊。如將「<xliff:g id="APPLICATION">%1$s</xliff:g>」與此裝置配合使用,您可能無法聽見來電、通知及鬧鐘的音效。"</string>
-    <string name="usb_audio_device_prompt" msgid="7944987408206252949">"如將「<xliff:g id="APPLICATION">%1$s</xliff:g>」與此裝置配合使用,您可能無法聽見來電、通知及鬧鐘的音效。"</string>
+    <string name="usb_audio_device_prompt_warn" msgid="2504972133361130335">"此應用程式尚未獲授予錄音權限,但可透過此 USB 裝置記錄音訊。如將「<xliff:g id="APPLICATION">%1$s</xliff:g>」與此裝置配合使用,你可能無法聽見來電、通知及鬧鐘的音效。"</string>
+    <string name="usb_audio_device_prompt" msgid="7944987408206252949">"如將「<xliff:g id="APPLICATION">%1$s</xliff:g>」與此裝置配合使用,你可能無法聽見來電、通知及鬧鐘的音效。"</string>
     <string name="usb_accessory_permission_prompt" msgid="717963550388312123">"要允許「<xliff:g id="APPLICATION">%1$s</xliff:g>」存取「<xliff:g id="USB_ACCESSORY">%2$s</xliff:g>」嗎?"</string>
     <string name="usb_device_confirm_prompt" msgid="4091711472439910809">"要開啟「<xliff:g id="APPLICATION">%1$s</xliff:g>」處理「<xliff:g id="USB_DEVICE">%2$s</xliff:g>」嗎?"</string>
     <string name="usb_device_confirm_prompt_warn" msgid="990208659736311769">"要開啟「<xliff:g id="APPLICATION">%1$s</xliff:g>」應用程式來控制「<xliff:g id="USB_DEVICE">%2$s</xliff:g>」嗎?\n此應用程式尚未獲授予錄音權限,但可透過此 USB 裝置記錄音訊。"</string>
@@ -64,7 +64,7 @@
     <string name="wifi_debugging_secondary_user_title" msgid="2493201475880517725">"不允許無線偵錯功能"</string>
     <string name="wifi_debugging_secondary_user_message" msgid="9085779370142222881">"目前登入此裝置的使用者無法啟用無線偵錯功能。如要使用此功能,請切換至管理員使用者。"</string>
     <string name="usb_contaminant_title" msgid="894052515034594113">"已停用 USB 連接埠"</string>
-    <string name="usb_contaminant_message" msgid="7730476585174719805">"為了保護您的裝置免受液體或碎片損害,USB 連接埠已停用,因此不會偵測到任何配件。\n\nUSB 連接埠可安全使用時,您會收到通知。"</string>
+    <string name="usb_contaminant_message" msgid="7730476585174719805">"為了保護你的裝置免受液體或碎片損害,USB 連接埠已停用,因此不會偵測到任何配件。\n\nUSB 連接埠可安全使用時,你會收到通知。"</string>
     <string name="usb_port_enabled" msgid="531823867664717018">"已啟用 USB 連接埠以偵測充電器和配件"</string>
     <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"啟用 USB"</string>
     <string name="learn_more" msgid="4690632085667273811">"瞭解詳情"</string>
@@ -78,8 +78,8 @@
     <string name="screenshot_failed_to_save_user_locked_text" msgid="6156607948256936920">"必須先解鎖裝置,才能儲存螢幕截圖"</string>
     <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"請再嘗試拍攝螢幕擷取畫面"</string>
     <string name="screenshot_failed_to_save_text" msgid="7232739948999195960">"無法儲存螢幕截圖"</string>
-    <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"應用程式或您的機構不允許擷取螢幕畫面"</string>
-    <string name="screenshot_blocked_by_admin" msgid="5486757604822795797">"您的 IT 管理員已禁止擷取螢幕截圖"</string>
+    <string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"應用程式或你的機構不允許擷取螢幕畫面"</string>
+    <string name="screenshot_blocked_by_admin" msgid="5486757604822795797">"你的 IT 管理員已禁止擷取螢幕截圖"</string>
     <string name="screenshot_edit_label" msgid="8754981973544133050">"編輯"</string>
     <string name="screenshot_edit_description" msgid="3333092254706788906">"編輯螢幕截圖"</string>
     <string name="screenshot_share_description" msgid="2861628935812656612">"分享螢幕截圖"</string>
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"<xliff:g id="APPNAME">%1$s</xliff:g> 偵測到此螢幕截圖。"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"<xliff:g id="APPNAME">%1$s</xliff:g> 和其他開啟的應用程式偵測到此螢幕截圖。"</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"新增至筆記"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"螢幕畫面錄影工具"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"螢幕錄影機"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"正在處理螢幕錄影內容"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"持續顯示錄影畫面工作階段通知"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"要開始錄製嗎?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"錄影時,Android 系統可擷取螢幕上顯示或裝置播放的任何敏感資料,包括密碼、付款資料、相片、訊息和音訊。"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"錄製整個螢幕畫面"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"錄製一個應用程式"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"進行錄製時,Android 可存取顯示在螢幕畫面上或在裝置上播放的所有內容。因此請謹慎處理密碼、付款資料、訊息或其他敏感資料。"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"錄製應用程式時,Android 可存取在該應用程式中顯示或播放的所有內容。因此請謹慎處理密碼、付款資料、訊息或其他敏感資料。"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"開始錄製"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"要開始錄影嗎?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"當你錄影時,Android 可存取顯示在螢幕畫面上或在裝置上播放的所有內容。因此,請謹慎處理密碼、付款資料、訊息、相片、音訊和影片等。"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"當你錄影應用程式時,Android 可存取在該應用程式中顯示或播放的所有內容。因此,請謹慎處理密碼、付款資料、訊息、相片、音訊和影片等。"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"開始錄影"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"錄音"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"裝置音訊"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"裝置播放的音效,例如音樂、通話和鈴聲"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"麥克風"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"裝置音訊和麥克風"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"開始"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"開始"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"正在錄影螢幕畫面"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"正在錄製螢幕畫面和音訊"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"顯示輕觸螢幕的位置"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"分享"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"已儲存螢幕錄影內容"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"輕按即可查看"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"刪除錄影畫面時發生錯誤"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"儲存螢幕錄影時發生錯誤"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"開始錄影畫面時發生錯誤"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"以全螢幕檢視"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"如要退出,請從螢幕頂部向下滑動。"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"知道了"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"返回"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"首頁"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"選單"</string>
@@ -141,15 +141,16 @@
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"請再試一次"</string>
     <string name="biometric_dialog_empty_space_description" msgid="3330555462071453396">"輕按即可取消驗證"</string>
     <string name="biometric_dialog_face_icon_description_idle" msgid="4351777022315116816">"請再試一次"</string>
-    <string name="biometric_dialog_face_icon_description_authenticating" msgid="3401633342366146535">"正在尋找您的面孔"</string>
+    <string name="biometric_dialog_face_icon_description_authenticating" msgid="3401633342366146535">"正在尋找你的面孔"</string>
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"面孔已經驗證"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"已確認"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"輕按 [確定] 以完成"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"已使用面孔解鎖。按解鎖圖示即可繼續。"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"已使用面孔解鎖"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"已使用面孔解鎖。按下即可繼續操作。"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"已識別面孔。按下即可繼續操作。"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"已識別面孔。按解鎖圖示即可繼續。"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"驗證咗"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"取消驗證"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"使用 PIN"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"使用圖案"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"使用密碼"</string>
@@ -157,18 +158,33 @@
     <string name="biometric_dialog_wrong_pattern" msgid="8954812279840889029">"圖案錯誤"</string>
     <string name="biometric_dialog_wrong_password" msgid="69477929306843790">"密碼錯誤"</string>
     <string name="biometric_dialog_credential_too_many_attempts" msgid="3083141271737748716">"輸入錯誤的次數太多,\n請於 <xliff:g id="NUMBER">%d</xliff:g> 秒後再試。"</string>
-    <string name="biometric_dialog_credential_attempts_before_wipe" msgid="6751859711975516999">"請再試一次。您已嘗試 <xliff:g id="ATTEMPTS_0">%1$d</xliff:g> 次,最多可試 <xliff:g id="MAX_ATTEMPTS">%2$d</xliff:g> 次。"</string>
-    <string name="biometric_dialog_last_attempt_before_wipe_dialog_title" msgid="2874250099278693477">"您的資料將會刪除"</string>
-    <string name="biometric_dialog_last_pattern_attempt_before_wipe_device" msgid="6562299244825817598">"如果您下次畫出錯誤的上鎖圖案,系統將會刪除此裝置上的資料。"</string>
-    <string name="biometric_dialog_last_pin_attempt_before_wipe_device" msgid="9151756675698215723">"如果您下次輸入錯誤的 PIN,系統將會刪除此裝置上的資料。"</string>
-    <string name="biometric_dialog_last_password_attempt_before_wipe_device" msgid="2363778585575998317">"如果您下次輸入錯誤的密碼,系統將會刪除此裝置上的資料。"</string>
-    <string name="biometric_dialog_last_pattern_attempt_before_wipe_user" msgid="8400180746043407270">"如果您下次畫出錯誤的上鎖圖案,系統將會刪除此使用者。"</string>
-    <string name="biometric_dialog_last_pin_attempt_before_wipe_user" msgid="4159878829962411168">"如果您下次輸入錯誤的 PIN,系統將會刪除此使用者。"</string>
-    <string name="biometric_dialog_last_password_attempt_before_wipe_user" msgid="4695682515465063885">"如果您下次輸入錯誤的密碼,系統將會刪除此使用者。"</string>
-    <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"如果您下次畫出錯誤的上鎖圖案,系統將會刪除工作設定檔和相關資料。"</string>
-    <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"如果您下次輸入錯誤的 PIN,系統將會刪除工作設定檔和相關資料。"</string>
-    <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"如果您下次輸入錯誤的密碼,系統將會刪除工作設定檔和相關資料。"</string>
+    <string name="biometric_dialog_credential_attempts_before_wipe" msgid="6751859711975516999">"請再試一次。你已嘗試 <xliff:g id="ATTEMPTS_0">%1$d</xliff:g> 次,最多可試 <xliff:g id="MAX_ATTEMPTS">%2$d</xliff:g> 次。"</string>
+    <string name="biometric_dialog_last_attempt_before_wipe_dialog_title" msgid="2874250099278693477">"你的資料將會刪除"</string>
+    <string name="biometric_dialog_last_pattern_attempt_before_wipe_device" msgid="6562299244825817598">"如果你下次畫出錯誤的上鎖圖案,系統將會刪除此裝置上的資料。"</string>
+    <string name="biometric_dialog_last_pin_attempt_before_wipe_device" msgid="9151756675698215723">"如果你下次輸入錯誤的 PIN,系統將會刪除此裝置上的資料。"</string>
+    <string name="biometric_dialog_last_password_attempt_before_wipe_device" msgid="2363778585575998317">"如果你下次輸入錯誤的密碼,系統將會刪除此裝置上的資料。"</string>
+    <string name="biometric_dialog_last_pattern_attempt_before_wipe_user" msgid="8400180746043407270">"如果你下次畫出錯誤的上鎖圖案,系統將會刪除此使用者。"</string>
+    <string name="biometric_dialog_last_pin_attempt_before_wipe_user" msgid="4159878829962411168">"如果你下次輸入錯誤的 PIN,系統將會刪除此使用者。"</string>
+    <string name="biometric_dialog_last_password_attempt_before_wipe_user" msgid="4695682515465063885">"如果你下次輸入錯誤的密碼,系統將會刪除此使用者。"</string>
+    <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"如果你下次畫出錯誤的上鎖圖案,系統將會刪除工作設定檔和相關資料。"</string>
+    <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"如果你下次輸入錯誤的 PIN,系統將會刪除工作設定檔和相關資料。"</string>
+    <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"如果你下次輸入錯誤的密碼,系統將會刪除工作設定檔和相關資料。"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"設定"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"暫時不要"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"為提升安全性和效能,你必須設定此功能"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"重新設定「指紋解鎖」功能"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"指紋解鎖"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"設定「指紋解鎖」功能"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"如要重新設定「指紋解鎖」功能,必須刪除目前的指紋圖片和模型。\n\n刪除後,你必須重新設定「指紋解鎖」功能,才能使用指紋解鎖手機或驗證身分。"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"如要重新設定「指紋解鎖」功能,必須刪除目前的指紋圖片和模型。\n\n刪除後,你必須重新設定「指紋解鎖」功能,才能使用指紋解鎖手機或驗證身分。"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"無法設定「指紋解鎖」功能,請前往「設定」再試一次。"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"重新設定「面孔解鎖」功能"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"面孔解鎖"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"設定「面孔解鎖」功能"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"如要重新設定「面孔解鎖」功能,必須刪除目前的面部模型。\n\n你必須重新設定此功能,才能使用用面孔解鎖手機。"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"無法設定「面孔解鎖」功能,請前往「設定」再試一次。"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"請輕觸指紋感應器"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"按解鎖圖示即可繼續"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"無法辨識面孔,請改用指紋完成驗證。"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -213,7 +229,7 @@
     <string name="accessibility_brightness" msgid="5391187016177823721">"顯示光暗度"</string>
     <string name="data_usage_disabled_dialog_mobile_title" msgid="2286843518689837719">"已暫停使用流動數據"</string>
     <string name="data_usage_disabled_dialog_title" msgid="9131615296036724838">"已暫停使用數據"</string>
-    <string name="data_usage_disabled_dialog" msgid="7933201635215099780">"您的數據用量已達到所設定的上限,因此系統已停用流動數據連線。\n\n如果您恢復使用流動數據連線,可能需要支付數據用量費用。"</string>
+    <string name="data_usage_disabled_dialog" msgid="7933201635215099780">"你的數據用量已達到所設定的上限,因此系統已停用流動數據連線。\n\n如果你恢復使用流動數據連線,可能需要支付數據用量費用。"</string>
     <string name="data_usage_disabled_dialog_enable" msgid="2796648546086408937">"恢復"</string>
     <string name="accessibility_location_active" msgid="2845747916764660369">"位置要求啟動中"</string>
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"已啟用「感應器關閉」"</string>
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"音訊"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"耳機"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"輸入"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"助聽器"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"助聽器"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"正在開啟…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"自動旋轉"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"自動旋轉螢幕"</string>
@@ -306,9 +322,9 @@
     <string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"要解除封鎖裝置麥克風嗎?"</string>
     <string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"要解除封鎖裝置相機嗎?"</string>
     <string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"要解除封鎖裝置相機和麥克風嗎?"</string>
-    <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"解除封鎖後,凡有存取權的應用程式和服務都可使用您的麥克風。"</string>
-    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"解除封鎖後,凡有存取權的應用程式和服務都可使用您的相機。"</string>
-    <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"解除封鎖後,凡有存取權的應用程式和服務都可使用您的相機或麥克風。"</string>
+    <string name="sensor_privacy_start_use_mic_dialog_content" msgid="1624701280680913717">"解除封鎖後,凡有存取權的應用程式和服務都可使用你的麥克風。"</string>
+    <string name="sensor_privacy_start_use_camera_dialog_content" msgid="4704948062372435963">"解除封鎖後,凡有存取權的應用程式和服務都可使用你的相機。"</string>
+    <string name="sensor_privacy_start_use_mic_camera_dialog_content" msgid="3577642558418404919">"解除封鎖後,凡有存取權的應用程式和服務都可使用你的相機或麥克風。"</string>
     <string name="sensor_privacy_start_use_mic_blocked_dialog_title" msgid="2640140287496469689">"已封鎖麥克風"</string>
     <string name="sensor_privacy_start_use_camera_blocked_dialog_title" msgid="7398084286822440384">"已封鎖相機"</string>
     <string name="sensor_privacy_start_use_mic_camera_blocked_dialog_title" msgid="195236134743281973">"已封鎖麥克風和相機"</string>
@@ -321,8 +337,8 @@
     <string name="sensor_privacy_mic_turned_on_dialog_title" msgid="6348853159838376513">"麥克風已開啟"</string>
     <string name="sensor_privacy_mic_turned_off_dialog_title" msgid="5760464281790732849">"麥克風已關閉"</string>
     <string name="sensor_privacy_mic_unblocked_dialog_content" msgid="4889961886199270224">"已為所有應用程式和服務啟用麥克風。"</string>
-    <string name="sensor_privacy_mic_blocked_no_exception_dialog_content" msgid="5864898470772965394">"已停用所有應用程式和服務的麥克風存取權。您可以在 [設定] &gt; [私隱] &gt; [麥克風] 啟用麥克風存取權。"</string>
-    <string name="sensor_privacy_mic_blocked_with_exception_dialog_content" msgid="810289713700437896">"已停用所有應用程式和服務的麥克風存取權。您可以在 [設定] &gt; [私隱] &gt; [麥克風] 更改設定。"</string>
+    <string name="sensor_privacy_mic_blocked_no_exception_dialog_content" msgid="5864898470772965394">"已停用所有應用程式和服務的麥克風存取權。你可以在 [設定] &gt; [私隱] &gt; [麥克風] 啟用麥克風存取權。"</string>
+    <string name="sensor_privacy_mic_blocked_with_exception_dialog_content" msgid="810289713700437896">"已停用所有應用程式和服務的麥克風存取權。你可以在 [設定] &gt; [私隱] &gt; [麥克風] 更改設定。"</string>
     <string name="sensor_privacy_camera_turned_on_dialog_title" msgid="8039095295100075952">"相機已開啟"</string>
     <string name="sensor_privacy_camera_turned_off_dialog_title" msgid="1936603903120742696">"相機已關閉"</string>
     <string name="sensor_privacy_camera_unblocked_dialog_content" msgid="7847190103011782278">"已為所有應用程式和服務啟用相機。"</string>
@@ -331,10 +347,10 @@
     <string name="sensor_privacy_dialog_open_settings" msgid="5635865896053011859">"開啟「設定」"</string>
     <string name="media_seamless_other_device" msgid="4654849800789196737">"其他裝置"</string>
     <string name="quick_step_accessibility_toggle_overview" msgid="7908949976727578403">"切換概覽"</string>
-    <string name="zen_priority_introduction" msgid="3159291973383796646">"您不會受到聲音和震動騷擾 (鬧鐘、提醒、活動和您指定的來電者鈴聲除外)。當您選擇播放音樂、影片和遊戲等,仍可以聽到該內容的聲音。"</string>
-    <string name="zen_alarms_introduction" msgid="3987266042682300470">"您不會受到聲音和震動騷擾 (鬧鐘除外)。當您選擇播放音樂、影片和遊戲等,仍可以聽到該內容的聲音。"</string>
+    <string name="zen_priority_introduction" msgid="3159291973383796646">"你不會受到聲音和震動騷擾 (鬧鐘、提醒、活動和你指定的來電者鈴聲除外)。當你選擇播放音樂、影片和遊戲等,仍可以聽到該內容的聲音。"</string>
+    <string name="zen_alarms_introduction" msgid="3987266042682300470">"你不會受到聲音和震動騷擾 (鬧鐘除外)。當你選擇播放音樂、影片和遊戲等,仍可以聽到該內容的聲音。"</string>
     <string name="zen_priority_customize_button" msgid="4119213187257195047">"自訂"</string>
-    <string name="zen_silence_introduction_voice" msgid="853573681302712348">"這會封鎖所有聲音和震動 (包括鬧鐘、音樂、影片及遊戲),但您仍可以撥打電話。"</string>
+    <string name="zen_silence_introduction_voice" msgid="853573681302712348">"這會封鎖所有聲音和震動 (包括鬧鐘、音樂、影片及遊戲),但你仍可以撥打電話。"</string>
     <string name="zen_silence_introduction" msgid="6117517737057344014">"這會封鎖所有聲音和震動,包括鬧鐘、音樂、影片和遊戲。"</string>
     <string name="notification_tap_again" msgid="4477318164947497249">"再次輕按即可開啟"</string>
     <string name="tap_again" msgid="1315420114387908655">"再次輕按"</string>
@@ -348,8 +364,9 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"已使用面孔解鎖"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"已識別面孔"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"請向上滑動以再試一次"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"向上掃即可重試面孔解鎖"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"解鎖方可使用 NFC"</string>
-    <string name="do_disclosure_generic" msgid="4896482821974707167">"此裝置屬於您的機構"</string>
+    <string name="do_disclosure_generic" msgid="4896482821974707167">"此裝置屬於你的機構"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"此裝置屬於「<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>」"</string>
     <string name="do_financed_disclosure_with_name" msgid="6723004643314467864">"此裝置由 <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> 提供"</string>
     <string name="phone_hint" msgid="6682125338461375925">"從圖示滑動即可使用手機功能"</string>
@@ -370,33 +387,42 @@
     <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"切換使用者"</string>
     <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"下拉式選單"</string>
     <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"這個工作階段中的所有應用程式和資料都會被刪除。"</string>
-    <string name="guest_wipe_session_title" msgid="7147965814683990944">"訪客您好,歡迎回來!"</string>
-    <string name="guest_wipe_session_message" msgid="3393823610257065457">"您要繼續您的工作階段嗎?"</string>
+    <string name="guest_wipe_session_title" msgid="7147965814683990944">"訪客你好,歡迎回來!"</string>
+    <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="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>
-    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{只可建立一位使用者。}other{您可以加入多達 # 位使用者。}}"</string>
+    <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"在錄影或投放時,「<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>」可以存取螢幕顯示或裝置播放的任何資料,當中包括密碼、付款詳情、相片、訊息和播放的語音等。"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"在錄影或投放時,此功能的服務供應商可以存取螢幕顯示或裝置播放的任何資料,當中包括密碼、付款詳情、相片、訊息和播放的語音等。"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"要開始錄影或投放嗎?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"要使用「<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>」開始錄影或投放嗎?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"允許 <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 分享或錄製嗎?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"整個螢幕畫面"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"一個應用程式"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"當您分享、錄製或投放應用程式時,<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 可存取在螢幕畫面上顯示或在裝置上播放的所有內容。因此請小心保管密碼、付款資料、訊息或其他敏感資料。"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"進行分享、錄製或投放時,<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 可存取顯示在螢幕畫面上或在裝置上播放的所有內容。因此請謹慎處理密碼、付款資料、訊息或其他敏感資料。"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"繼續"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"分享或錄製應用程式"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"要允許此應用程式分享或錄製內容嗎?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"進行分享、錄製或投放時,此應用程式可存取顯示在螢幕畫面上或在裝置上播放的所有內容。因此請謹慎處理密碼、付款資料、訊息或其他敏感資料。"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"進行分享、錄製或投放時,此應用程式可存取顯示在螢幕畫面上或在該應用程式上播放的所有內容。因此請謹慎處理密碼、付款資料、訊息或其他敏感資料。"</string>
-    <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"已被您的 IT 管理員封鎖"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"當你錄影或投放內容時,「<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>」將可存取畫面上顯示的任何資料或裝置播放的任何內容,包括密碼、付款資料、相片、訊息和播放的音訊等。"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"要開始錄影或投放嗎?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"在錄影或投放時,此功能的服務供應商可存取螢幕顯示或裝置播放的任何資料,當中包括密碼、付款資料、相片、訊息和播放的語音等資料。"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"整個螢幕畫面"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"單一應用程式"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"分享或錄影應用程式"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"要使用「<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>」錄影或投放嗎?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"當你分享、錄影或投放時,「<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>」可存取顯示在螢幕畫面上或在裝置上播放的所有內容。因此,請謹慎處理密碼、付款資料、訊息、相片、音訊和影片等。"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"當你分享、錄影或投放應用程式時,「<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>」可存取顯示在該應用程式中顯示或播放的所有內容。因此,請謹慎處理密碼、付款資料、訊息、相片、音訊和影片等。"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"開始"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"要開始投放嗎?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"當你投放時,Android 可存取顯示在螢幕畫面上或在裝置上播放的所有內容。因此,請謹慎處理密碼、付款資料、訊息、相片、音訊和影片等。"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"當你投放應用程式時,Android 可存取在該應用程式中顯示或播放的所有內容。因此,請謹慎處理密碼、付款資料、訊息、相片、音訊和影片等。"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"開始投放"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"要開始分享嗎?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"當你分享、錄影或投放時,Android 可存取顯示在螢幕畫面上或在裝置上播放的所有內容。因此,請謹慎處理密碼、付款資料、訊息、相片、音訊和影片等。"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"當你分享、錄影或投放應用程式時,Android 可存取顯示在該應用程式中顯示或播放的所有內容。因此,請謹慎處理密碼、付款資料、訊息、相片、音訊和影片等。"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"開始"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"切換應用程式時,系統會暫停分享"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"改為分享此應用程式"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"切換回先前的應用程式"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"切換應用程式"</string>
+    <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"已被你的 IT 管理員封鎖"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"螢幕截圖功能因裝置政策而停用"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"全部清除"</string>
     <string name="manage_notifications_text" msgid="6885645344647733116">"管理"</string>
@@ -411,23 +437,23 @@
     <string name="empty_shade_text" msgid="8935967157319717412">"沒有通知"</string>
     <string name="no_unseen_notif_text" msgid="395512586119868682">"沒有新通知"</string>
     <string name="unlock_to_see_notif_text" msgid="7439033907167561227">"解鎖即可查看舊通知"</string>
-    <string name="quick_settings_disclosure_parental_controls" msgid="2114102871438223600">"此裝置由您的家長管理"</string>
-    <string name="quick_settings_disclosure_management_monitoring" msgid="8231336875820702180">"您的機構擁有此裝置,並可能會監察網絡流量"</string>
+    <string name="quick_settings_disclosure_parental_controls" msgid="2114102871438223600">"此裝置由你的家長管理"</string>
+    <string name="quick_settings_disclosure_management_monitoring" msgid="8231336875820702180">"你的機構擁有此裝置,並可能會監察網絡流量"</string>
     <string name="quick_settings_disclosure_named_management_monitoring" msgid="2831423806103479812">"「<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>」擁有此裝置,並可能會監察網絡流量"</string>
     <string name="quick_settings_financed_disclosure_named_management" msgid="2307703784594859524">"此裝置由 <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> 提供"</string>
-    <string name="quick_settings_disclosure_management_named_vpn" msgid="4137564460025113168">"此裝置屬於您的機構,並已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連接至互聯網"</string>
+    <string name="quick_settings_disclosure_management_named_vpn" msgid="4137564460025113168">"此裝置屬於你的機構,並已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連接至互聯網"</string>
     <string name="quick_settings_disclosure_named_management_named_vpn" msgid="2169227918166358741">"此裝置由「<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>」所有,並透過「<xliff:g id="VPN_APP">%2$s</xliff:g>」連接至互聯網"</string>
-    <string name="quick_settings_disclosure_management" msgid="5515296598440684962">"此裝置屬於您的機構"</string>
+    <string name="quick_settings_disclosure_management" msgid="5515296598440684962">"此裝置屬於你的機構"</string>
     <string name="quick_settings_disclosure_named_management" msgid="3476472755775165827">"此裝置屬於「<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>」"</string>
-    <string name="quick_settings_disclosure_management_vpns" msgid="929181757984262902">"此裝置屬於您的機構,並已透過 VPN 連接至互聯網"</string>
+    <string name="quick_settings_disclosure_management_vpns" msgid="929181757984262902">"此裝置屬於你的機構,並已透過 VPN 連接至互聯網"</string>
     <string name="quick_settings_disclosure_named_management_vpns" msgid="3312645578322079185">"此裝置屬於「<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>」,並已透過 VPN 連接至互聯網"</string>
-    <string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"您的機構可能監控您工作設定檔上的網絡流量"</string>
-    <string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>可能會監控您工作設定檔上的網絡流量"</string>
+    <string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"你的機構可能監控你工作設定檔上的網絡流量"</string>
+    <string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>可能會監控你工作設定檔上的網絡流量"</string>
     <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"IT 管理員可以查看工作設定檔的網絡活動"</string>
     <string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"網絡可能會受到監控"</string>
     <string name="quick_settings_disclosure_vpns" msgid="3586175303518266301">"此裝置已透過 VPN 連接至互聯網"</string>
-    <string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="153393105176944100">"您的工作應用程式已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連接至互聯網"</string>
-    <string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="451254750289172191">"您的個人應用程式已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連接至互聯網"</string>
+    <string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="153393105176944100">"你的工作應用程式已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連接至互聯網"</string>
+    <string name="quick_settings_disclosure_personal_profile_named_vpn" msgid="451254750289172191">"你的個人應用程式已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連接至互聯網"</string>
     <string name="quick_settings_disclosure_named_vpn" msgid="6191822916936028208">"此裝置已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連接至互聯網"</string>
     <string name="monitoring_title_financed_device" msgid="3659962357973919387">"此裝置由 <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> 提供"</string>
     <string name="monitoring_title_device_owned" msgid="7029691083837606324">"裝置管理"</string>
@@ -436,21 +462,22 @@
     <string name="monitoring_subtitle_ca_certificate" msgid="8588092029755175800">"CA 憑證"</string>
     <string name="monitoring_button_view_policies" msgid="3869724835853502410">"查看政策"</string>
     <string name="monitoring_button_view_controls" msgid="8316440345340701117">"查看控制項"</string>
-    <string name="monitoring_description_named_management" msgid="505833016545056036">"此裝置屬於 <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>。\n\n您的 IT 管理員可監察及管理與裝置相關聯的設定、公司存取權、應用程式和資料,以及裝置的位置資料。\n\n如要瞭解詳情,請與您的 IT 管理員聯絡。"</string>
+    <string name="monitoring_description_named_management" msgid="505833016545056036">"此裝置屬於 <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>。\n\n你的 IT 管理員可監察及管理與裝置相關聯的設定、公司存取權、應用程式和資料,以及裝置的位置資料。\n\n如要瞭解詳情,請與你的 IT 管理員聯絡。"</string>
     <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g> 或可存取此裝置的相關資料、管理應用程式並變更裝置設定。\n\n如有疑問,請聯絡 <xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g>。"</string>
-    <string name="monitoring_description_management" msgid="4308879039175729014">"此裝置屬於您的機構。\n\n您的 IT 管理員可監察及管理與裝置相關聯的設定、公司存取權、應用程式和資料,以及裝置的位置資料。\n\n如要瞭解詳情,請與您的 IT 管理員聯絡。"</string>
-    <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"您的機構已在此裝置中安裝憑證授權單位。您的安全網絡流量可能會受監控或修改。"</string>
-    <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"您的機構已在您的工作設定檔中安裝憑證授權單位。您的安全網絡流量可能會受監控或修改。"</string>
-    <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"此裝置已安裝憑證授權單位。您的安全網絡流量可能會受監控或修改。"</string>
-    <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"您的管理員已開啟網絡記錄功能,以監控您裝置上的流量。"</string>
-    <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"您的管理員已開啟網絡記錄功能,可監控您工作設定檔 (而非個人設定檔) 的流量。"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"此裝置已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連接至互聯網。IT 管理員可以看到您的網絡活動,包括電郵和瀏覽資料。"</string>
-    <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"此裝置已透過「<xliff:g id="VPN_APP_0">%1$s</xliff:g>」和「<xliff:g id="VPN_APP_1">%2$s</xliff:g>」連接至互聯網。IT 管理員可以看到您的網絡活動,包括電郵和瀏覽資料。"</string>
-    <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"您的工作應用程式已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連接至互聯網。IT 管理員和 VPN 供應商可以看到您在工作應用程式的網絡活動,包括電郵和瀏覽資料。"</string>
-    <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"您的個人應用程式已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連接至互聯網。您的 VPN 供應商可以看到您的網絡活動,包括電郵和瀏覽資料。"</string>
+    <string name="monitoring_description_management" msgid="4308879039175729014">"此裝置屬於你的機構。\n\n你的 IT 管理員可監察及管理與裝置相關聯的設定、公司存取權、應用程式和資料,以及裝置的位置資料。\n\n如要瞭解詳情,請與你的 IT 管理員聯絡。"</string>
+    <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"你的機構已在此裝置中安裝憑證授權單位。你的安全網絡流量可能會受監控或修改。"</string>
+    <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"你的機構已在你的工作設定檔中安裝憑證授權單位。你的安全網絡流量可能會受監控或修改。"</string>
+    <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"此裝置已安裝憑證授權單位。你的安全網絡流量可能會受監控或修改。"</string>
+    <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"你的管理員已開啟網絡記錄功能,以監控你裝置上的流量。"</string>
+    <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"你的管理員已開啟網絡記錄功能,可監控你工作設定檔 (而非個人設定檔) 的流量。"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"此裝置目前透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連接至互聯網。你的 VPN 供應商可以看到你的網絡活動,包括電郵和瀏覽資料。"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"此裝置已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連接至互聯網。IT 管理員可以看到你的網絡活動,包括電郵和瀏覽資料。"</string>
+    <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"此裝置已透過「<xliff:g id="VPN_APP_0">%1$s</xliff:g>」和「<xliff:g id="VPN_APP_1">%2$s</xliff:g>」連接至互聯網。IT 管理員可以看到你的網絡活動,包括電郵和瀏覽資料。"</string>
+    <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"你的工作應用程式已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連接至互聯網。IT 管理員和 VPN 供應商可以看到你在工作應用程式的網絡活動,包括電郵和瀏覽資料。"</string>
+    <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"你的個人應用程式已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連接至互聯網。你的 VPN 供應商可以看到你的網絡活動,包括電郵和瀏覽資料。"</string>
     <string name="monitoring_description_vpn_settings_separator" msgid="8292589617720435430">" "</string>
     <string name="monitoring_description_vpn_settings" msgid="5264167033247632071">"開啟 VPN 設定"</string>
-    <string name="monitoring_description_parental_controls" msgid="8184693528917051626">"此裝置由您的家長管理。家長可以查看及管理裝置上的資料,例如您使用的應用程式、位置和裝置使用時間。"</string>
+    <string name="monitoring_description_parental_controls" msgid="8184693528917051626">"此裝置由你的家長管理。家長可以查看及管理裝置上的資料,例如你使用的應用程式、位置和裝置使用時間。"</string>
     <string name="legacy_vpn_name" msgid="4174223520162559145">"VPN"</string>
     <string name="keyguard_indication_trust_unlocked" msgid="7395154975733744547">"由信任的代理保持解鎖狀態"</string>
     <string name="zen_mode_and_condition" msgid="5043165189511223718">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>。<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
@@ -462,14 +489,17 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"停用"</string>
     <string name="sound_settings" msgid="8874581353127418308">"音效和震動"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"設定"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"已調低至較安全的音量"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"使用高音量已超過建議的時間"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"音量已降至較安全的水平"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"以高音量使用耳機的時間已超過建議範圍"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"耳機音量已超過本週安全限制"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"繼續聆聽"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"降低音量"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"已固定應用程式"</string>
-    <string name="screen_pinning_description" msgid="8699395373875667743">"應用程式將會固定在螢幕上顯示,直至您取消固定為止。按住「返回」和「概覽」按鈕即可取消固定。"</string>
-    <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"應用程式將會固定在螢幕上顯示,直至您取消固定為止。按住「返回」按鈕和主按鈕即可取消固定。"</string>
-    <string name="screen_pinning_description_gestural" msgid="7246323931831232068">"應用程式將會固定在螢幕上顯示,直至您取消固定為止。向上滑動後按住即可取消固定。"</string>
-    <string name="screen_pinning_description_accessible" msgid="7386449191953535332">"應用程式將會固定在螢幕上顯示,直至您取消固定為止。按住「概覽」按鈕即可取消固定。"</string>
-    <string name="screen_pinning_description_recents_invisible_accessible" msgid="2857071808674481986">"應用程式將會固定在螢幕上顯示,直至您取消固定為止。按住主按鈕即可取消固定。"</string>
+    <string name="screen_pinning_description" msgid="8699395373875667743">"應用程式將會固定在螢幕上顯示,直至你取消固定為止。按住「返回」和「概覽」按鈕即可取消固定。"</string>
+    <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"應用程式將會固定在螢幕上顯示,直至你取消固定為止。按住「返回」按鈕和主按鈕即可取消固定。"</string>
+    <string name="screen_pinning_description_gestural" msgid="7246323931831232068">"應用程式將會固定在螢幕上顯示,直至你取消固定為止。向上滑動後按住即可取消固定。"</string>
+    <string name="screen_pinning_description_accessible" msgid="7386449191953535332">"應用程式將會固定在螢幕上顯示,直至你取消固定為止。按住「概覽」按鈕即可取消固定。"</string>
+    <string name="screen_pinning_description_recents_invisible_accessible" msgid="2857071808674481986">"應用程式將會固定在螢幕上顯示,直至你取消固定為止。按住主按鈕即可取消固定。"</string>
     <string name="screen_pinning_exposes_personal_data" msgid="8189852022981524789">"應用程式可能會存取個人資料 (例如通訊錄和電郵內容)。"</string>
     <string name="screen_pinning_can_open_other_apps" msgid="7529756813231421455">"固定的應用程式可開啟其他應用程式。"</string>
     <string name="screen_pinning_toast" msgid="8177286912533744328">"如要取消固定此應用程式,請按住「返回」按鈕和「概覽」按鈕"</string>
@@ -521,16 +551,16 @@
     <string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"正在更新"</string>
     <string name="status_bar_work" msgid="5238641949837091056">"工作設定檔"</string>
     <string name="status_bar_airplane" msgid="4848702508684541009">"飛行模式"</string>
-    <string name="zen_alarm_warning" msgid="7844303238486849503">"您不會<xliff:g id="WHEN">%1$s</xliff:g>聽到鬧鐘"</string>
+    <string name="zen_alarm_warning" msgid="7844303238486849503">"你不會<xliff:g id="WHEN">%1$s</xliff:g>聽到鬧鐘"</string>
     <string name="alarm_template" msgid="2234991538018805736">"在 <xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="alarm_template_far" msgid="3561752195856839456">"在<xliff:g id="WHEN">%1$s</xliff:g>"</string>
     <string name="accessibility_status_bar_hotspot" msgid="2888479317489131669">"熱點"</string>
     <string name="accessibility_managed_profile" msgid="4703836746209377356">"工作設定檔"</string>
     <string name="tuner_warning_title" msgid="7721976098452135267">"這只是測試版本,並不包含完整功能"</string>
-    <string name="tuner_warning" msgid="1861736288458481650">"使用者介面調諧器讓您以更多方法修改和自訂 Android 使用者介面。但請小心,這些實驗功能可能會在日後發佈時更改、分拆或消失。"</string>
+    <string name="tuner_warning" msgid="1861736288458481650">"使用者介面調諧器讓你以更多方法修改和自訂 Android 使用者介面。但請小心,這些實驗功能可能會在日後發佈時更改、分拆或消失。"</string>
     <string name="tuner_persistent_warning" msgid="230466285569307806">"請小心,這些實驗功能可能會在日後發佈時更改、分拆或消失。"</string>
     <string name="got_it" msgid="477119182261892069">"知道了"</string>
-    <string name="tuner_toast" msgid="3812684836514766951">"恭喜您!系統使用者介面調諧器已新增至「設定」中"</string>
+    <string name="tuner_toast" msgid="3812684836514766951">"恭喜你!系統使用者介面調諧器已新增至「設定」中"</string>
     <string name="remove_from_settings" msgid="633775561782209994">"從「設定」移除"</string>
     <string name="remove_from_settings_prompt" msgid="551565437265615426">"要從「設定」移除系統使用者介面調諧器,並停止其所有功能嗎?"</string>
     <string name="enable_bluetooth_title" msgid="866883307336662596">"要開啟藍牙嗎?"</string>
@@ -538,7 +568,7 @@
     <string name="enable_bluetooth_confirmation_ok" msgid="2866408183324184876">"開啟"</string>
     <string name="tuner_full_importance_settings" msgid="1388025816553459059">"通知控制項"</string>
     <string name="rotation_lock_camera_rotation_on" msgid="789434807790534274">"已開啟 - 根據面孔偵測"</string>
-    <string name="power_notification_controls_description" msgid="1334963837572708952">"通知控制項讓您設定應用程式通知的重要性 (0 至 5 級)。\n\n"<b>"第 5 級"</b>" \n- 在通知清單頂部顯示 \n- 允許全螢幕騷擾 \n- 一律顯示通知 \n\n"<b>"第 4 級"</b>" \n- 阻止全螢幕騷擾 \n- 一律顯示通知 \n\n"<b>"第 3 級"</b>" \n- 阻止全螢幕騷擾 \n- 永不顯示通知 \n\n"<b>"第 2 級"</b>" \n- 阻止全螢幕騷擾 \n- 永不顯示通知 \n- 永不發出聲響和震動 \n\n"<b>"第 1 級"</b>" \n- 阻止全螢幕騷擾 \n- 永不顯示通知 \n- 永不發出聲響和震動 \n- 從上鎖畫面和狀態列中隱藏 \n- 在通知清單底部顯示 \n\n"<b>"第 0 級"</b>" \n- 封鎖所有應用程式通知"</string>
+    <string name="power_notification_controls_description" msgid="1334963837572708952">"通知控制項讓你設定應用程式通知的重要性 (0 至 5 級)。\n\n"<b>"第 5 級"</b>" \n- 在通知清單頂部顯示 \n- 允許全螢幕騷擾 \n- 一律顯示通知 \n\n"<b>"第 4 級"</b>" \n- 阻止全螢幕騷擾 \n- 一律顯示通知 \n\n"<b>"第 3 級"</b>" \n- 阻止全螢幕騷擾 \n- 永不顯示通知 \n\n"<b>"第 2 級"</b>" \n- 阻止全螢幕騷擾 \n- 永不顯示通知 \n- 永不發出聲響和震動 \n\n"<b>"第 1 級"</b>" \n- 阻止全螢幕騷擾 \n- 永不顯示通知 \n- 永不發出聲響和震動 \n- 從上鎖畫面和狀態列中隱藏 \n- 在通知清單底部顯示 \n\n"<b>"第 0 級"</b>" \n- 封鎖所有應用程式通知"</string>
     <string name="inline_done_button" msgid="6043094985588909584">"完成"</string>
     <string name="inline_ok_button" msgid="603075490581280343">"套用"</string>
     <string name="inline_turn_off_notifications" msgid="8543989584403106071">"關閉通知"</string>
@@ -570,7 +600,7 @@
     <string name="feedback_silenced" msgid="9116540317466126457">"系統已自動將此通知的重要性&lt;b&gt;降低為靜音&lt;/b&gt;。"</string>
     <string name="feedback_promoted" msgid="2125562787759780807">"系統已自動&lt;b&gt;提高&lt;/b&gt;此通知在通知欄中的次序。"</string>
     <string name="feedback_demoted" msgid="951884763467110604">"系統已自動&lt;b&gt;調低&lt;/b&gt;此通知在通知欄中的次序。"</string>
-    <string name="feedback_prompt" msgid="3656728972307896379">"與開發人員分享您的意見。是否正確?"</string>
+    <string name="feedback_prompt" msgid="3656728972307896379">"與開發人員分享你的意見。是否正確?"</string>
     <string name="notification_channel_controls_opened_accessibility" msgid="6111817750774381094">"開咗「<xliff:g id="APP_NAME">%1$s</xliff:g>」嘅通知控制項"</string>
     <string name="notification_channel_controls_closed_accessibility" msgid="1561909368876911701">"閂咗「<xliff:g id="APP_NAME">%1$s</xliff:g>」嘅通知控制項"</string>
     <string name="notification_more_settings" msgid="4936228656989201793">"更多設定"</string>
@@ -626,7 +656,7 @@
     <string name="keyboard_shortcut_search_list_no_result" msgid="6819302191660875501">"找不到快速鍵"</string>
     <string name="keyboard_shortcut_search_category_system" msgid="1151182120757052669">"系統"</string>
     <string name="keyboard_shortcut_search_category_input" msgid="5440558509904296233">"輸入"</string>
-    <string name="keyboard_shortcut_search_category_open_apps" msgid="1450959949739257562">"已開啟的應用程式"</string>
+    <string name="keyboard_shortcut_search_category_open_apps" msgid="1450959949739257562">"已開應用程式"</string>
     <string name="keyboard_shortcut_search_category_current_app" msgid="2011953559133734491">"目前的應用程式"</string>
     <string name="group_system_access_notification_shade" msgid="7116898151485382275">"存取通知欄"</string>
     <string name="group_system_full_screenshot" msgid="7389040853798023211">"擷取全螢幕截圖"</string>
@@ -702,7 +732,7 @@
     <string name="drag_to_add_tiles" msgid="8933270127508303672">"按住並拖曳即可新增圖塊"</string>
     <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"按住並拖曳即可重新排列圖塊"</string>
     <string name="drag_to_remove_tiles" msgid="4682194717573850385">"拖曳這裡即可移除"</string>
-    <string name="drag_to_remove_disabled" msgid="933046987838658850">"您需要有至少 <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> 個資訊方塊"</string>
+    <string name="drag_to_remove_disabled" msgid="933046987838658850">"你需要有至少 <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> 個資訊方塊"</string>
     <string name="qs_edit" msgid="5583565172803472437">"編輯"</string>
     <string name="tuner_time" msgid="2450785840990529997">"時間"</string>
   <string-array name="clock_options">
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"電源選單"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"第 <xliff:g id="ID_1">%1$d</xliff:g> 頁 (共 <xliff:g id="ID_2">%2$d</xliff:g> 頁)"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"螢幕鎖定"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"手機因過熱而關上"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"您的手機現已正常運作。\n輕按即可瞭解詳情"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"您的手機之前因過熱而關上降溫。手機現已正常運作。\n\n以下情況可能會導致手機過熱:\n	• 使用耗用大量資源的應用程式 (例如遊戲、影片或導航應用程式)\n	• 下載或上載大型檔案\n	• 在高溫環境下使用手機"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"查看保養步驟"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"手機溫度正在上升"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"手機降溫時,部分功能會受限制。\n輕按即可瞭解詳情"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"手機會自動嘗試降溫。您仍可以使用手機,但手機的運作速度可能較慢。\n\n手機降溫後便會恢復正常。"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"查看保養步驟"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"拔除裝置"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"充電埠附近的裝置溫度正在上升。如裝置正連接充電器或 USB 配件,請拔除裝置並小心安全,因為電線的溫度可能也偏高。"</string>
@@ -790,13 +814,13 @@
     <string name="running_foreground_services_title" msgid="5137313173431186685">"正在背景中執行的應用程式"</string>
     <string name="running_foreground_services_msg" msgid="3009459259222695385">"輕按即可查看電池和數據用量詳情"</string>
     <string name="mobile_data_disable_title" msgid="5366476131671617790">"要關閉流動數據嗎?"</string>
-    <string name="mobile_data_disable_message" msgid="8604966027899770415">"您無法透過「<xliff:g id="CARRIER">%s</xliff:g>」使用流動數據或互聯網。如要使用互聯網,您必須連接 Wi-Fi。"</string>
-    <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"您的流動網絡供應商"</string>
+    <string name="mobile_data_disable_message" msgid="8604966027899770415">"你無法透過「<xliff:g id="CARRIER">%s</xliff:g>」使用流動數據或互聯網。如要使用互聯網,你必須連接 Wi-Fi。"</string>
+    <string name="mobile_data_disable_message_default_carrier" msgid="6496033312431658238">"你的流動網絡供應商"</string>
     <string name="auto_data_switch_disable_title" msgid="5146527155665190652">"要切換回「<xliff:g id="CARRIER">%s</xliff:g>」嗎?"</string>
     <string name="auto_data_switch_disable_message" msgid="5885533647399535852">"流動數據不會根據可用性自動切換"</string>
     <string name="auto_data_switch_dialog_negative_button" msgid="2370876875999891444">"不用了,謝謝"</string>
     <string name="auto_data_switch_dialog_positive_button" msgid="8531782041263087564">"是,請切換"</string>
-    <string name="touch_filtered_warning" msgid="8119511393338714836">"由於某個應用程式已阻擋權限要求畫面,因此「設定」應用程式無法驗證您的回應。"</string>
+    <string name="touch_filtered_warning" msgid="8119511393338714836">"由於某個應用程式已阻擋權限要求畫面,因此「設定」應用程式無法驗證你的回應。"</string>
     <string name="slice_permission_title" msgid="3262615140094151017">"要允許「<xliff:g id="APP_0">%1$s</xliff:g>」顯示「<xliff:g id="APP_2">%2$s</xliff:g>」的快訊嗎?"</string>
     <string name="slice_permission_text_1" msgid="6675965177075443714">"- 可以讀取「<xliff:g id="APP">%1$s</xliff:g>」中的資料"</string>
     <string name="slice_permission_text_2" msgid="6758906940360746983">"- 可以在「<xliff:g id="APP">%1$s</xliff:g>」內執行操作"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"放大成個畫面"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"放大部分螢幕畫面"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"開啟放大設定"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"關閉放大設定"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"拖曳角落即可調整大小"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"允許斜角捲動"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"調整大小"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"取消收藏"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"移至位置 <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"控制項"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"選擇要快速存取的裝置控制功能"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"按住並拖曳便可重新排列控制項"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"已移除所有控制項"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"未儲存變更"</string>
@@ -903,9 +927,9 @@
     <string name="controls_dialog_message" msgid="342066938390663844">"由「<xliff:g id="APP">%s</xliff:g>」提供的建議"</string>
     <string name="controls_tile_locked" msgid="731547768182831938">"裝置已上鎖"</string>
     <string name="controls_settings_show_controls_dialog_title" msgid="3357852503553809554">"要從上鎖畫面查看及控制裝置嗎?"</string>
-    <string name="controls_settings_show_controls_dialog_message" msgid="7666211700524587969">"您可以在上鎖畫面新增外部裝置的控制項。\n\n裝置應用程式可能會讓您在不解鎖手機或平板電腦的情況下控制部分裝置。\n\n您可隨時在「設定」中作出變更。"</string>
+    <string name="controls_settings_show_controls_dialog_message" msgid="7666211700524587969">"你可以在上鎖畫面新增外部裝置的控制項。\n\n裝置應用程式可能會讓你在不解鎖手機或平板電腦的情況下控制部分裝置。\n\n你可隨時在「設定」中作出變更。"</string>
     <string name="controls_settings_trivial_controls_dialog_title" msgid="7593188157655036677">"要在上鎖畫面控制裝置嗎?"</string>
-    <string name="controls_settings_trivial_controls_dialog_message" msgid="397178734990952575">"您可以在不解鎖手機或平板電腦的情況下控制部分裝置。裝置應用程式決定哪些裝置可透過此方式控制。"</string>
+    <string name="controls_settings_trivial_controls_dialog_message" msgid="397178734990952575">"你可以在不解鎖手機或平板電腦的情況下控制部分裝置。裝置應用程式決定哪些裝置可透過此方式控制。"</string>
     <string name="controls_settings_dialog_neutral_button" msgid="4514446354793124140">"不用了,謝謝"</string>
     <string name="controls_settings_dialog_positive_button" msgid="436070672551674863">"是"</string>
     <string name="controls_pin_use_alphanumeric" msgid="8478371861023048414">"PIN 含有字母或符號"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"嘗試其他 PIN"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"確認<xliff:g id="DEVICE">%s</xliff:g>變更"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"滑動以查看更多"</string>
+    <string name="retry_face" msgid="416380073082560186">"重新進行面孔驗證"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"正在載入建議"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"媒體"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"要隱藏此「<xliff:g id="APP_NAME">%1$s</xliff:g>」媒體控制嗎?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"設定"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"正在透過 <xliff:g id="APP_LABEL">%3$s</xliff:g> 播放 <xliff:g id="ARTIST_NAME">%2$s</xliff:g> 的《<xliff:g id="SONG_NAME">%1$s</xliff:g>》"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」執行中"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"播放"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"暫停"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"上一首曲目"</string>
@@ -933,7 +959,7 @@
     <string name="controls_media_smartspace_rec_description" msgid="4136242327044070732">"開啟 <xliff:g id="APP_LABEL">%1$s</xliff:g>"</string>
     <string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"在 <xliff:g id="APP_LABEL">%3$s</xliff:g> 播放 <xliff:g id="ARTIST_NAME">%2$s</xliff:g> 的《<xliff:g id="SONG_NAME">%1$s</xliff:g>》"</string>
     <string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"在 <xliff:g id="APP_LABEL">%2$s</xliff:g> 播放《<xliff:g id="SONG_NAME">%1$s</xliff:g>》"</string>
-    <string name="controls_media_smartspace_rec_header" msgid="5053461390357112834">"為您推薦"</string>
+    <string name="controls_media_smartspace_rec_header" msgid="5053461390357112834">"為你推薦"</string>
     <string name="media_transfer_undo" msgid="1895606387620728736">"復原"</string>
     <string name="media_move_closer_to_start_cast" msgid="2673104707465013176">"如要在「<xliff:g id="DEVICENAME">%1$s</xliff:g>」上播放,請靠近一點"</string>
     <string name="media_move_closer_to_end_cast" msgid="7302555909119374738">"如要在這部裝置播放,請靠近「<xliff:g id="DEVICENAME">%1$s</xliff:g>」一點"</string>
@@ -969,10 +995,12 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"喇叭和螢幕"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"建議的裝置"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"停止共享工作階段以移動媒體至其他裝置"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"停止"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"廣播運作方式"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"廣播"</string>
-    <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"附近有兼容藍牙裝置的人可收聽您正在廣播的媒體內容"</string>
-    <string name="media_output_broadcasting_message" msgid="4150299923404886073">"如附近有兼容藍牙裝置的人,只要掃瞄您的 QR 碼或使用您的廣播名稱和密碼,便可收聽您的廣播內容"</string>
+    <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"附近有兼容藍牙裝置的人可收聽你正在廣播的媒體內容"</string>
+    <string name="media_output_broadcasting_message" msgid="4150299923404886073">"如附近有兼容藍牙裝置的人,只要掃瞄你的 QR 碼或使用你的廣播名稱和密碼,便可收聽你的廣播內容"</string>
     <string name="media_output_broadcast_name" msgid="8786127091542624618">"廣播名稱"</string>
     <string name="media_output_broadcast_code" msgid="870795639644728542">"密碼"</string>
     <string name="media_output_broadcast_dialog_save" msgid="7910865591430010198">"儲存"</string>
@@ -981,13 +1009,13 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"無法儲存,請再試一次。"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"無法儲存。"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"請至少使用 4 個字元"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"請使用少於 16 個字元"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"請使用少於 <xliff:g id="LENGTH">%1$d</xliff:g> 個字元"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"版本號碼"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"版本號碼已複製到剪貼簿。"</string>
     <string name="basic_status" msgid="2315371112182658176">"開啟對話"</string>
     <string name="select_conversation_title" msgid="6716364118095089519">"對話小工具"</string>
     <string name="select_conversation_text" msgid="3376048251434956013">"輕按對話即可新增至主畫面"</string>
-    <string name="no_conversations_text" msgid="5354115541282395015">"您最近的對話會在這裡顯示"</string>
+    <string name="no_conversations_text" msgid="5354115541282395015">"你最近的對話會在這裡顯示"</string>
     <string name="priority_conversations" msgid="3967482288896653039">"優先對話"</string>
     <string name="recent_conversations" msgid="8531874684782574622">"最近的對話"</string>
     <string name="days_timestamp" msgid="5821854736213214331">"<xliff:g id="DURATION">%1$s</xliff:g> 天前"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"讀取電池計量器時發生問題"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"輕按即可瞭解詳情"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"未設定鬧鐘"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"輸入螢幕鎖定憑證"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"指紋感應器"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"驗證"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"進入裝置"</string>
@@ -1046,7 +1075,7 @@
     <string name="wifi_wont_autoconnect_for_now" msgid="5782282612749867762">"目前系統不會自動連線至 Wi-Fi"</string>
     <string name="see_all_networks" msgid="3773666844913168122">"顯示全部"</string>
     <string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"如要切換網絡,請中斷以太網連線"</string>
-    <string name="wifi_scan_notify_message" msgid="3753839537448621794">"為改善裝置的使用體驗,應用程式和服務仍可隨時掃瞄 Wi-Fi 網絡 (即使 Wi-Fi 已關閉)。您可在 Wi-Fi 掃瞄設定中變更此設定。"<annotation id="link">"變更"</annotation></string>
+    <string name="wifi_scan_notify_message" msgid="3753839537448621794">"為改善裝置的使用體驗,應用程式和服務仍可隨時掃瞄 Wi-Fi 網絡 (即使 Wi-Fi 已關閉)。你可在 Wi-Fi 掃瞄設定中變更此設定。"<annotation id="link">"變更"</annotation></string>
     <string name="turn_off_airplane_mode" msgid="8425587763226548579">"關閉飛行模式"</string>
     <string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"「<xliff:g id="APPNAME">%1$s</xliff:g>」想在「快速設定」選單新增以下圖塊"</string>
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"新增圖塊"</string>
@@ -1055,7 +1084,7 @@
     <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{已啟用 # 個應用程式}other{已啟用 # 個應用程式}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"新資料"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"使用中的應用程式"</string>
-    <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"這些應用程式已啟用並執行 (即使您沒有使用)。這會提升應用程式的功能,但也可影響電池壽命。"</string>
+    <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"這些應用程式已啟用並執行 (即使你沒有使用)。這會提升應用程式的功能,但也可影響電池壽命。"</string>
     <string name="fgs_manager_app_item_stop_button_label" msgid="7188317969020801156">"停止"</string>
     <string name="fgs_manager_app_item_stop_button_stopped_label" msgid="6950382004441263922">"已停止"</string>
     <string name="clipboard_edit_text_done" msgid="4551887727694022409">"完成"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"「Google 助理」正在聆聽"</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="note_task_button_label" msgid="8718616095800343136">"做筆記"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"做筆記"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"做筆記,<xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"瞭解詳情"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"詳情請瀏覽 <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"開啟「<xliff:g id="APPNAME">%1$s</xliff:g>」"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• 應用程式已完成設定"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• 已新增至少一張卡至「錢包」"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• 安裝相機應用程式"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• 應用程式已完成設定"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• 至少一部裝置可用"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"如要將「錢包」應用程式新增為捷徑,請確認已安裝該應用程式"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"如要將「錢包」應用程式新增為捷徑,請確認已新增至少一張付款卡"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"如要將 QR 碼掃瞄器新增為捷徑,請確認已安裝相機應用程式"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"如要將 Home 應用程式新增為捷徑,請確認已安裝該應用程式"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• 至少一部裝置可用"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"選取預設的筆記應用程式,即可使用筆記捷徑"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"選取應用程式"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"輕觸並按住快速鍵"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"取消"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"立即切換螢幕"</string>
@@ -1119,17 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"將觸控筆連接充電器"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"觸控筆電量不足"</string>
     <string name="video_camera" msgid="7654002575156149298">"攝影機"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"無法透過此設定檔撥打電話"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"您的公司政策只允許透過工作設定檔撥打電話"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"無法透過個人應用程式打電話"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"你的機構只允許你透過工作應用程式打電話"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"切換至工作設定檔"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"關閉"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"安裝工作電話應用程式"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"取消"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"自訂上鎖畫面"</string>
-    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"解鎖後即可自訂螢幕鎖定畫面"</string>
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"解鎖後即可自訂上鎖畫面"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"無法連線至 Wi-Fi"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"已封鎖相機"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"已封鎖相機和麥克風"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"已封鎖麥克風"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"優先模式已開啟"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"「Google 助理」感應功能已開啟"</string>
-    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"在「設定」中指定預設記事應用程式"</string>
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"在「設定」中指定預設筆記應用程式"</string>
+    <string name="install_app" msgid="5066668100199613936">"安裝應用程式"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"麥克風和相機"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"近期應用程式使用情況"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"查看近期存取記錄"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"完成"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"展開並顯示選項"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"收合"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"關閉此應用程式"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"<xliff:g id="APP_NAME">%1$s</xliff:g> 已關閉"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"管理服務"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"管理存取權"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"手機通話正在使用"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"手機通話最近使用過此權限"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"<xliff:g id="APP_NAME">%1$s</xliff:g> 正在使用"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」最近使用過此權限"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"<xliff:g id="APP_NAME">%1$s</xliff:g> 正在使用 (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」最近使用過此權限 (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"<xliff:g id="APP_NAME">%1$s</xliff:g> 正在使用 (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」最近使用過此權限 (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings_tv.xml b/packages/SystemUI/res/values-zh-rHK/strings_tv.xml
deleted file mode 100644
index 88ec5e0..0000000
--- a/packages/SystemUI/res/values-zh-rHK/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN 已連線"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN 已中斷連線"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"透過 <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"通知"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"沒有通知"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"麥克風正在錄音"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"相機正在錄影"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"相機和麥克風正在錄影及錄音"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"麥克風已停止錄音"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"相機已停止錄影"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"相機和麥克風已停止錄影及錄音"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"已開始錄製螢幕畫面"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"已停止錄製螢幕畫面"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 1652a1c..4750b5b 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -95,23 +95,20 @@
     <string name="screenshot_default_files_app_name" msgid="8721579578575161912">"檔案"</string>
     <string name="screenshot_detected_template" msgid="7940376642921719915">"「<xliff:g id="APPNAME">%1$s</xliff:g>」偵測到這張螢幕截圖。"</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"「<xliff:g id="APPNAME">%1$s</xliff:g>」和其他開啟的應用程式偵測到這張螢幕截圖。"</string>
-    <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"新增至記事"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"螢幕錄影器"</string>
+    <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"新增至記事本"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"螢幕錄影器"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"處理螢幕錄影內容"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"持續顯示螢幕畫面錄製工作階段通知"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"要開始錄製嗎?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"錄製螢幕畫面時,Android 系統可擷取螢幕上顯示或裝置播放的任何機密資訊,包括密碼、付款資訊、相片、訊息和音訊。"</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"錄製整個螢幕畫面"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"錄製單一應用程式"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"進行錄製時,Android 可以存取顯示在螢幕畫面上或在裝置上播放的所有內容。因此請謹慎處理密碼、付款資料、訊息或其他機密資訊。"</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"錄製應用程式時,Android 可以存取在該應用程式中顯示或播放的所有內容。因此請謹慎處理密碼、付款資料、訊息或其他機密資訊。"</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"開始錄製"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"要開始錄製嗎?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"當你錄製內容時,Android 可存取畫面上顯示的任何資訊或裝置播放的任何內容。因此,請謹慎處理密碼、付款資料、訊息、相片和影音內容等資訊。"</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"當你錄製應用程式內容時,Android 可存取應用程式中顯示的任何資訊或播放的任何內容。因此,請謹慎處理密碼、付款資料、訊息、相片和影音內容等資訊。"</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"開始錄影"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"錄音"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"裝置音訊"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"裝置所播放的音效,例如音樂、通話和鈴聲等等"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"麥克風"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"裝置音訊和麥克風"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"開始"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"開始"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"正在錄製螢幕畫面"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"錄製螢幕畫面和音訊"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"顯示輕觸螢幕的位置"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"分享"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"已儲存螢幕錄影檔"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"輕觸即可查看"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"刪除螢幕畫面錄製內容時發生錯誤"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"儲存螢幕錄影內容時發生錯誤"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"開始錄製螢幕畫面時發生錯誤"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"以全螢幕檢視"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"如要退出,請從螢幕頂端向下滑動。"</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"我知道了"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"返回"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"主畫面"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"選單"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"臉孔驗證成功"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"確認完畢"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"輕觸 [確認] 完成驗證設定"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"裝置已透過人臉解鎖,按下「解鎖」圖示即可繼續操作。"</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"裝置已透過你的臉解鎖"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"裝置已透過你的臉解鎖,按下即可繼續操作。"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"臉孔辨識完成,按下即可繼續操作。"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"臉孔辨識完成,按下「解鎖」圖示即可繼續操作。"</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"已通過驗證"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"取消驗證"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"使用 PIN 碼"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"使用解鎖圖案"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"使用密碼"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"如果下次輸入的解鎖圖案仍不正確,系統將刪除你的工作資料夾和相關資料。"</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"如果下次輸入的 PIN 碼仍不正確,系統將刪除你的工作資料夾和相關資料。"</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"如果下次輸入的密碼仍不正確,系統將刪除你的工作資料夾和相關資料。"</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"設定"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"暫時不要"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"為了安全和效能起見,這是必要步驟"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"重新設定指紋解鎖"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"指紋解鎖"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"設定指紋解鎖"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"如要重新設定指紋解鎖功能,必須刪除目前的指紋圖像及模型。\n\n刪除後,你必須重新設定指紋解鎖功能,才能使用自己的指紋解鎖手機或驗證身分。"</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"如要重新設定指紋解鎖功能,必須刪除目前的指紋圖像及模型。\n\n刪除後,你必須重新設定指紋解鎖功能,才能使用自己的指紋解鎖手機或驗證身分。"</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"無法設定指紋解鎖,請前往「設定」再試一次。"</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"重新設定人臉解鎖"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"人臉解鎖"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"設定人臉解鎖"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"如要重新設定人臉解鎖功能,必須刪除目前的臉部模型。\n\n你必須重新設定這項功能,才能使用自己的臉孔解鎖手機。"</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"無法設定人臉解鎖功能,請前往「設定」再試一次。"</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"請輕觸指紋感應器"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"按下「解鎖」圖示即可繼續操作"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"無法辨識臉孔,請改用指紋完成驗證。"</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"音訊"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"耳機"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"輸入"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"助聽器"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"助聽器"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"開啟中…"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"自動旋轉"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"自動旋轉螢幕"</string>
@@ -348,8 +364,9 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"裝置已透過你的臉解鎖"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"臉孔辨識完成"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"向上滑動即可重試"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"向上滑動即可再次執行人臉解鎖功能"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"如要使用 NFC,請先解鎖"</string>
-    <string name="do_disclosure_generic" msgid="4896482821974707167">"這部裝置的擁有者為貴機構"</string>
+    <string name="do_disclosure_generic" msgid="4896482821974707167">"此裝置屬於貴機構"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"這部裝置的擁有者為「<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>」"</string>
     <string name="do_financed_disclosure_with_name" msgid="6723004643314467864">"這是「<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>」提供的裝置"</string>
     <string name="phone_hint" msgid="6682125338461375925">"滑動手機圖示即可啟用"</string>
@@ -382,20 +399,29 @@
     <string name="user_remove_user_title" msgid="9124124694835811874">"要移除使用者嗎?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"系統將刪除這個使用者的所有應用程式和資料。"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"移除"</string>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"在錄製或投放內容時,<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>可存取畫面上顯示的任何資訊或裝置播放的任何內容,包括密碼、付款詳情、相片、訊息和你播放的音訊。"</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"在錄製或投放內容時,提供這項功能的服務可存取畫面上顯示的任何資訊或裝置播放的任何內容,包括密碼、付款詳情、相片、訊息和你播放的音訊。"</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"要開始錄製或投放內容嗎?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"要使用「<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>」開始錄製或投放內容嗎?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"允許 <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 分享或錄製?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"整個螢幕畫面"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"單一應用程式"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"分享、錄製或投放時,<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 可以存取顯示在螢幕畫面上或在裝置上播放的所有內容。因此請謹慎處理密碼、付款資料、訊息或其他機密資訊。"</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"分享、錄製或投放應用程式時,<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> 可以存取在應用程式中顯示或播放的所有內容。因此請謹慎處理密碼、付款資料、訊息或其他機密資訊。"</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"繼續"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"分享或錄製應用程式"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"要允許這個應用程式分享或錄製嗎?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"進行分享、錄製或投放時,這個應用程式可以存取螢幕畫面上所顯示或裝置上所播放的所有內容。因此請謹慎處理密碼、付款資料、訊息或其他機密資訊。"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"進行分享、錄製或投放應用程式時,這個應用程式可以存取在其中顯示或播放的所有內容。因此請謹慎處理密碼、付款資料、訊息或其他機密資訊。"</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"錄製或投放內容時,「<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>」將可存取畫面上顯示的任何資訊或裝置播放的任何內容,包括密碼、付款資料、相片、訊息和你播放的音訊等資訊。"</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"要開始錄製或投放內容嗎?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"當你錄製或投放內容時,提供這項功能的服務將可存取畫面上顯示的任何資訊或裝置播放的任何內容,包括密碼、付款資料、相片、訊息和你播放的音訊等資訊。"</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"整個螢幕畫面"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"單一應用程式"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"分享或錄製應用程式"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"要開始使用「<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>」錄製或投放內容嗎?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"當你分享、錄製或投放內容時,「<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>」可存取畫面上顯示的任何資訊或裝置播放的任何內容。因此,請謹慎處理密碼、付款資料、訊息、相片和影音內容等資訊。"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"當你分享、錄製或投放應用程式內容時,「<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>」可存取應用程式中顯示的任何資訊或播放的任何內容。因此,請謹慎處理密碼、付款資料、訊息、相片和影音內容等資訊。"</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"開始"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"要開始投放嗎?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"當你投放內容時,Android 可存取畫面上顯示的任何資訊或裝置播放的任何內容。因此,請謹慎處理密碼、付款資料、訊息、相片和影音內容等資訊。"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"當你投放應用程式內容時,Android 可存取應用程式中顯示的任何資訊或播放的任何內容。因此,請謹慎處理密碼、付款資料、訊息、相片和影音內容等資訊。"</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"開始投放"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"要開始分享嗎?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"當你分享、錄製或投放內容時,Android 將可存取畫面上顯示的任何資訊或裝置播放的任何內容。因此,請謹慎處理密碼、付款資料、訊息、相片和影音內容等資訊。"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"當你分享、錄製或投放內容時,Android 可存取應用程式中顯示的任何資訊或播放的任何內容。因此,請謹慎處理密碼、付款資料、訊息、相片和影音內容等資訊。"</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"開始"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"切換應用程式時暫停分享"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"改為分享這個應用程式"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"切回"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"應用程式切換"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"IT 管理員已封鎖這項操作"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"根據裝置政策規定,螢幕畫面擷取功能已停用"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"全部清除"</string>
@@ -417,7 +443,7 @@
     <string name="quick_settings_financed_disclosure_named_management" msgid="2307703784594859524">"這是「<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>」提供的裝置"</string>
     <string name="quick_settings_disclosure_management_named_vpn" msgid="4137564460025113168">"這部裝置的擁有者為貴機構,並已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連線到網際網路"</string>
     <string name="quick_settings_disclosure_named_management_named_vpn" msgid="2169227918166358741">"這部裝置的擁有者為「<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>」,並已透過「<xliff:g id="VPN_APP">%2$s</xliff:g>」連線到網際網路"</string>
-    <string name="quick_settings_disclosure_management" msgid="5515296598440684962">"這部裝置的擁有者為貴機構"</string>
+    <string name="quick_settings_disclosure_management" msgid="5515296598440684962">"此裝置屬於貴機構"</string>
     <string name="quick_settings_disclosure_named_management" msgid="3476472755775165827">"這部裝置的擁有者為「<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>」"</string>
     <string name="quick_settings_disclosure_management_vpns" msgid="929181757984262902">"這部裝置的擁有者為貴機構,並已透過 VPN 連線到網際網路"</string>
     <string name="quick_settings_disclosure_named_management_vpns" msgid="3312645578322079185">"這部裝置的擁有者為「<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>」,並已透過 VPN 連線到網際網路"</string>
@@ -438,13 +464,14 @@
     <string name="monitoring_button_view_controls" msgid="8316440345340701117">"查看監護功能相關資訊"</string>
     <string name="monitoring_description_named_management" msgid="505833016545056036">"這部裝置的擁有者為「<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>」。\n\n你的 IT 管理員可以監控及管理與裝置相關聯的設定、公司系統權限、應用程式和資料,以及裝置的位置資訊。\n\n如要瞭解詳情,請與你的 IT 管理員聯絡。"</string>
     <string name="monitoring_financed_description_named_management" msgid="6108439201399938668">"「<xliff:g id="ORGANIZATION_NAME_0">%1$s</xliff:g>」或許可以存取這部裝置的相關資料、管理應用程式及變更裝置設定。\n\n如有任何疑問,請與「<xliff:g id="ORGANIZATION_NAME_1">%2$s</xliff:g>」聯絡。"</string>
-    <string name="monitoring_description_management" msgid="4308879039175729014">"這部裝置的擁有者為貴機構。\n\n你的 IT 管理員可以監控及管理與裝置相關聯的設定、公司系統權限、應用程式和資料,以及裝置的位置資訊。\n\n如要瞭解詳情,請與你的 IT 管理員聯絡。"</string>
+    <string name="monitoring_description_management" msgid="4308879039175729014">"此裝置屬於貴機構。\n\n你的 IT 管理員可以監控及管理與裝置相關聯的設定、公司系統權限、應用程式和資料,以及裝置的位置資訊。\n\n如要瞭解詳情,請與你的 IT 管理員聯絡。"</string>
     <string name="monitoring_description_management_ca_certificate" msgid="7785013130658110130">"貴機構已為這個裝置安裝憑證授權單位憑證。你的安全網路流量可能會受到監控或修改。"</string>
     <string name="monitoring_description_managed_profile_ca_certificate" msgid="7904323416598435647">"貴機構已為你的工作資料夾安裝憑證授權單位憑證。你的安全網路流量可能會受到監控或修改。"</string>
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"這個裝置已安裝憑證授權單位憑證。你的安全網路流量可能會受到監控或修改。"</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"你的管理員已啟用網路記錄功能,可監控你裝置的流量。"</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"你的管理員已啟用網路記錄功能,可監控你的工作資料夾流量,但不會監控個人資料夾的流量。"</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"這部裝置已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連線到網際網路。請注意,IT 管理員可以看見你的網路活動,包括電子郵件和瀏覽資料。"</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"這部裝置目前透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連線到網際網路。請注意,VPN 供應商可以看見你的網路活動,包括電子郵件和瀏覽資料。"</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"這部裝置已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連線到網際網路。請注意,IT 管理員可以看見你的網路活動,包括電子郵件和瀏覽資料。"</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"這部裝置已透過「<xliff:g id="VPN_APP_0">%1$s</xliff:g>」和「<xliff:g id="VPN_APP_1">%2$s</xliff:g>」連線到網際網路。請注意,IT 管理員可以看見你的網路活動,包括電子郵件和瀏覽資料。"</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"你的工作應用程式已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連線到網際網路。請注意,IT 管理員和 VPN 供應商可以看見你在工作應用程式中的網路活動,包括電子郵件和瀏覽資料。"</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"你的個人應用程式已透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」連線到網際網路。請注意,VPN 供應商可以看見你的網路活動,包括電子郵件和瀏覽資料。"</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"停用"</string>
     <string name="sound_settings" msgid="8874581353127418308">"音效與震動"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"設定"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"已調低至較安全的音量"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"已超過建議的高音量時間"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"音量已調低至安全範圍"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"耳罩式耳機以高音量播放已超過建議時間"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"耳罩式耳機的音量已超過本週的安全限制"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"繼續聆聽"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"調低音量"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"應用程式已固定"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"這會讓目前的螢幕畫面保持顯示狀態,直到取消固定為止。按住 [返回] 按鈕和 [總覽] 按鈕即可取消固定。"</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"這會讓應用程式顯示在螢幕上,直到取消固定為止。按住 [返回] 按鈕和主畫面按鈕即可取消固定。"</string>
@@ -663,7 +693,7 @@
     <string name="keyboard_shortcut_group_applications_calculator" msgid="6316043911946540137">"計算機"</string>
     <string name="keyboard_shortcut_group_applications_maps" msgid="7312554713993114342">"地圖"</string>
     <string name="volume_and_do_not_disturb" msgid="502044092739382832">"零打擾"</string>
-    <string name="volume_dnd_silent" msgid="4154597281458298093">"音量按鈕快速鍵"</string>
+    <string name="volume_dnd_silent" msgid="4154597281458298093">"音量鍵快速鍵"</string>
     <string name="battery" msgid="769686279459897127">"電池"</string>
     <string name="headset" msgid="4485892374984466437">"耳機"</string>
     <string name="accessibility_long_click_tile" msgid="210472753156768705">"開啟設定"</string>
@@ -739,19 +769,13 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"電源鍵選單"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"第 <xliff:g id="ID_1">%1$d</xliff:g> 頁,共 <xliff:g id="ID_2">%2$d</xliff:g> 頁"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"鎖定畫面"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"手機先前過熱,因此關閉電源"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"手機現在已恢復正常運作。\n輕觸即可瞭解詳情"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"手機先前的溫度過高,因此關閉了電源以進行降溫。手機現在已恢復正常運作。\n\n以下情況可能會導致你的手機溫度過高:\n	• 使用需要密集處理資料的應用程式 (例如遊戲、影片或導航應用程式)\n	• 下載或上傳大型檔案\n	• 在高溫環境下使用手機"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"查看處理步驟"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"手機變熱"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"手機降溫時,某些功能會受限。\n輕觸即可瞭解詳情"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"手機會自動嘗試降溫。你仍可繼續使用手機,但是手機的運作速度可能會較慢。\n\n手機降溫完畢後,就會恢復正常的運作速度。"</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"查看處理步驟"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"拔除裝置"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"裝置的充電埠附近越來越熱。如果裝置已連接充電器或 USB 配件,請立即拔除。此外,電線也可能會變熱,請特別留意。"</string>
     <string name="high_temp_alarm_help_care_steps" msgid="5017002218341329566">"查看處理步驟"</string>
-    <string name="lockscreen_shortcut_left" msgid="1238765178956067599">"向左快速鍵"</string>
-    <string name="lockscreen_shortcut_right" msgid="4138414674531853719">"向右快速鍵"</string>
+    <string name="lockscreen_shortcut_left" msgid="1238765178956067599">"左側捷徑"</string>
+    <string name="lockscreen_shortcut_right" msgid="4138414674531853719">"右側捷徑"</string>
     <string name="lockscreen_unlock_left" msgid="1417801334370269374">"向左快速鍵可一併解鎖裝置"</string>
     <string name="lockscreen_unlock_right" msgid="4658008735541075346">"向右快速鍵可一併解鎖裝置"</string>
     <string name="lockscreen_none" msgid="4710862479308909198">"無"</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"放大整個螢幕畫面"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"放大局部螢幕畫面"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"開啟放大功能設定"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"關閉放大設定"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"拖曳角落即可調整大小"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"允許沿對角線捲動"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"調整大小"</string>
@@ -885,14 +910,13 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"從收藏中移除"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"移到位置 <xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"控制項"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"選擇要快速存取的裝置控制功能"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"按住並拖曳即可重新排列控制項"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"所有控制項都已移除"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"未儲存變更"</string>
     <string name="controls_favorite_see_other_apps" msgid="7709087332255283460">"查看其他應用程式"</string>
     <string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"重新排列"</string>
-    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"新增控制選項"</string>
+    <string name="controls_favorite_add_controls" msgid="1221420435546694004">"新增控制項"</string>
     <string name="controls_favorite_back_to_editing" msgid="184125114090062713">"繼續編輯"</string>
     <string name="controls_favorite_load_error" msgid="5126216176144877419">"無法載入控制項。請查看「<xliff:g id="APP">%s</xliff:g>」應用程式,確認應用程式設定沒有任何異動。"</string>
     <string name="controls_favorite_load_none" msgid="7687593026725357775">"找不到相容的控制項"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"試試其他 PIN 碼"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"確認「<xliff:g id="DEVICE">%s</xliff:g>」的變更"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"滑動即可查看其他結構"</string>
+    <string name="retry_face" msgid="416380073082560186">"再次進行臉部驗證"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"正在載入建議控制項"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"媒體"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"要隱藏「<xliff:g id="APP_NAME">%1$s</xliff:g>」的媒體控制選項嗎?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"設定"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"系統正透過「<xliff:g id="APP_LABEL">%3$s</xliff:g>」播放<xliff:g id="ARTIST_NAME">%2$s</xliff:g>的〈<xliff:g id="SONG_NAME">%1$s</xliff:g>〉"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>,共 <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」執行中"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"播放"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"暫停"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"上一首"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"喇叭和螢幕"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"建議的裝置"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"停止共用的工作階段,即可將媒體移至其他裝置"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"停止"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"廣播功能的運作方式"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"廣播"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"如果附近的人有相容的藍牙裝置,就可以聽到你正在廣播的媒體內容"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"無法儲存,請再試一次。"</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"無法儲存。"</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"至少要有 4 個半形字元"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"不得超過 16 個半形字元"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"不得超過 <xliff:g id="LENGTH">%1$d</xliff:g> 個半形字元"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"版本號碼"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"已將版本號碼複製到剪貼簿。"</string>
     <string name="basic_status" msgid="2315371112182658176">"開放式對話"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"讀取電池計量器時發生問題"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"輕觸即可瞭解詳情"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"未設定鬧鐘"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"輸入螢幕鎖定憑證"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"指紋感應器"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"驗證"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"進入裝置"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"Google 助理正在聆聽"</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="note_task_button_label" msgid="8718616095800343136">"做筆記"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"做筆記"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"做筆記,<xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"瞭解詳情"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"如要瞭解詳情,請前往 <xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"開啟「<xliff:g id="APPNAME">%1$s</xliff:g>」"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• 完成應用程式設定"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• 錢包中至少要有一張卡片"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• 安裝相機應用程式"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• 完成應用程式設定"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• 至少要有一部可用裝置"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"如要將錢包應用程式新增為捷徑,請確認已安裝該應用程式"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"如要將錢包應用程式新增為捷徑,請確認已新增至少一張卡片"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"如要將 QR code 掃描器新增為捷徑,請確認已安裝相機應用程式"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"如要將 Google Home 應用程式新增為捷徑,請確認已安裝該應用程式"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• 至少要有一部可用裝置"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"選取預設的記事應用程式,即可使用筆記捷徑"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"選取應用程式"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"按住快速鍵"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"取消"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"立即切換螢幕"</string>
@@ -1119,10 +1151,11 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"將觸控筆接上充電器"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"觸控筆電力不足"</string>
     <string name="video_camera" msgid="7654002575156149298">"攝影機"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"無法透過這個資料夾撥打電話"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"貴公司政策僅允許透過工作資料夾撥打電話"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"無法透過個人應用程式撥號"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"貴機構僅允許透過工作應用程式撥打電話"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"切換至工作資料夾"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"關閉"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"安裝工作用電話應用程式"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"取消"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"自訂螢幕鎖定畫面"</string>
     <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"解鎖後即可自訂螢幕鎖定畫面"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"無法連上 Wi-Fi"</string>
@@ -1132,4 +1165,23 @@
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"優先模式已開啟"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Google 助理感知功能已開啟"</string>
     <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"在「設定」中指定預設記事應用程式"</string>
+    <string name="install_app" msgid="5066668100199613936">"安裝應用程式"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"麥克風和相機"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"最近曾使用感應器的應用程式"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"查看近期存取記錄"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"完成"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"展開並顯示選項"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"收合"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"關閉這個應用程式"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」已關閉"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"管理服務"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"管理存取權"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"正用於手機通話"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"最近曾用於手機通話"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"正由「<xliff:g id="APP_NAME">%1$s</xliff:g>」使用"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」最近用過這項權限"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"正由「<xliff:g id="APP_NAME">%1$s</xliff:g>」使用 (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」最近用過這項權限 (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"正由「<xliff:g id="APP_NAME">%1$s</xliff:g>」使用 (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」最近用過這項權限 (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings_tv.xml b/packages/SystemUI/res/values-zh-rTW/strings_tv.xml
deleted file mode 100644
index b6b1b1e..0000000
--- a/packages/SystemUI/res/values-zh-rTW/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"VPN 已連線"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"VPN 連線已中斷"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"透過「<xliff:g id="VPN_APP">%1$s</xliff:g>」"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"通知"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"沒有通知"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"麥克風正在錄音"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"相機正在錄影"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"相機和麥克風正在錄影及錄音"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"麥克風已停止錄音"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"相機已停止錄影"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"相機和麥克風已停止錄影及錄音"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"已開始錄製螢幕畫面"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"已停止錄製螢幕畫面"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index aa6f168..e22d1d7 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -96,22 +96,19 @@
     <string name="screenshot_detected_template" msgid="7940376642921719915">"I-<xliff:g id="APPNAME">%1$s</xliff:g> ithole lesi sithombe-skrini."</string>
     <string name="screenshot_detected_multiple_template" msgid="7644827792093819241">"I-<xliff:g id="APPNAME">%1$s</xliff:g> namanye ama-app avuliwe athole lesi sithombe-skrini."</string>
     <string name="app_clips_save_add_to_note" msgid="3460200751278069445">"Engeza kunothi"</string>
-    <string name="screenrecord_name" msgid="2596401223859996572">"Irekhoda yesikrini"</string>
+    <string name="screenrecord_title" msgid="4257171601439507792">"Okokuqopha iskrini"</string>
     <string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Icubungula okokuqopha iskrini"</string>
     <string name="screenrecord_channel_description" msgid="4147077128486138351">"Isaziso esiqhubekayo seseshini yokurekhoda isikrini"</string>
-    <string name="screenrecord_start_label" msgid="1750350278888217473">"Qala ukurekhoda?"</string>
-    <string name="screenrecord_description" msgid="1123231719680353736">"Ngenkathi irekhoda, Isistimu ye-Android ingathatha noma iluphi ulwazi olubucayi olubonakal kusikrini sakho noma oludlalwa kudivayisi yakho. Lokhu kufaka phakathi amaphasiwedi, ulwazi lokukhokha, izithombe, imilayezo, nomsindo."</string>
-    <string name="screenrecord_option_entire_screen" msgid="1732437834603426934">"Rekhoda sonke isikrini"</string>
-    <string name="screenrecord_option_single_app" msgid="5954863081500035825">"Rekhoda i-app eyodwa"</string>
-    <string name="screenrecord_warning_entire_screen" msgid="8141407178104195610">"Ngenkathi urekhoda, i-Android inokufinyelela kunoma yini ebonakalayo esikrinini sakho noma edlalwa kudivayisi yakho. Ngakho-ke qaphela amagama ayimfihlo, imininingwane yokukhokha, imiyalezo, noma olunye ulwazi olubucayi."</string>
-    <string name="screenrecord_warning_single_app" msgid="7760723997065948283">"Ngenkathi urekhoda i-app, i-Android inokufinyelela kunoma yini eboniswayo noma edlalwayo kuleyo app. Ngakho-ke qaphela amagama ayimfihlo, imininingwane yokukhokha, imiyalezo, noma olunye ulwazi olubucayi."</string>
-    <string name="screenrecord_start_recording" msgid="348286842544768740">"Qala ukurekhoda"</string>
+    <string name="screenrecord_permission_dialog_title" msgid="303380743267672953">"Qala Ukurekhoda?"</string>
+    <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="4152602778470789965">"Ngenkathi urekhoda, i-Android inokufinyelela kunoma yini ebonakalayo esikrinini sakho noma edlalwa kudivayisi yakho. Ngakho-ke qaphela ngezinto ezifana namaphasiwedi, imininingwane yokukhokha, imilayezo, izithombe, nomsindo nevidiyo."</string>
+    <string name="screenrecord_permission_dialog_warning_single_app" msgid="6818309727772146138">"Ngenkathi urekhoda i-app, i-Android inokufinyelela kunoma yini eboniswayo noma edlalwa kuleyo app. Ngakho-ke qaphela ngezinto ezifana namaphasiwedi, imininingwane yenkokhelo, imilayezo, izithombe, nomsindo nevidiyo."</string>
+    <string name="screenrecord_permission_dialog_continue" msgid="5811122652514424967">"Qala ukurekhoda"</string>
     <string name="screenrecord_audio_label" msgid="6183558856175159629">"Rekhoda umsindo"</string>
     <string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Umsindo wedivayisi"</string>
     <string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Umsindo ophuma kudivayisi yakho, njengomculo, amakholi, namathoni okukhala"</string>
     <string name="screenrecord_mic_label" msgid="2111264835791332350">"Imakrofoni"</string>
     <string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Umsindo wedivayisi nemakrofoni"</string>
-    <string name="screenrecord_start" msgid="330991441575775004">"Qala"</string>
+    <string name="screenrecord_continue" msgid="4055347133700593164">"Qala"</string>
     <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Irekhoda isikrini"</string>
     <string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Irekhoda isikrini nomsindo"</string>
     <string name="screenrecord_taps_label" msgid="1595690528298857649">"Bonisa ukuthintwa kusikrini"</string>
@@ -119,8 +116,11 @@
     <string name="screenrecord_share_label" msgid="5025590804030086930">"Yabelana"</string>
     <string name="screenrecord_save_title" msgid="1886652605520893850">"Okokuqopha iskrini kulondoloziwe"</string>
     <string name="screenrecord_save_text" msgid="3008973099800840163">"Thepha ukuze ubuke"</string>
-    <string name="screenrecord_delete_error" msgid="2870506119743013588">"Iphutha lokususa ukurekhoda isikrini"</string>
+    <string name="screenrecord_save_error" msgid="5862648532560118815">"Iphutha lokulondoloza okokuqopha iskrini"</string>
     <string name="screenrecord_start_error" msgid="2200660692479682368">"Iphutha lokuqala ukurekhoda isikrini"</string>
+    <string name="immersive_cling_title" msgid="8372056499315585941">"Ukubuka isikrini esigcwele"</string>
+    <string name="immersive_cling_description" msgid="6913958856085185775">"Ukuze uphume, swayiphela phansi kusuka phezulu."</string>
+    <string name="immersive_cling_positive" msgid="3076681691468978568">"Ngiyezwa"</string>
     <string name="accessibility_back" msgid="6530104400086152611">"Emuva"</string>
     <string name="accessibility_home" msgid="5430449841237966217">"Ekhaya"</string>
     <string name="accessibility_menu" msgid="2701163794470513040">"Imenyu"</string>
@@ -145,11 +145,12 @@
     <string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"Ubuso bufakazelwe ubuqiniso"</string>
     <string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"Kuqinisekisiwe"</string>
     <string name="biometric_dialog_tap_confirm" msgid="9166350738859143358">"Thepha okuthi Qinisekisa ukuze uqedele"</string>
-    <string name="biometric_dialog_tap_confirm_with_face" msgid="1092050545851021991">"Ivulwe ngobuso. Cindezela isithonjana sokuvula ukuze uqhubeke."</string>
+    <string name="biometric_dialog_tap_confirm_with_face" msgid="2378151312221818694">"Vula ngobuso"</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_1" msgid="439152621640507113">"Vula ngobuso. Cindezela ukuze uqhubeke."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_2" msgid="8586608186457385108">"Ubuso buyaziwa. Cindezela ukuze uqhubeke."</string>
     <string name="biometric_dialog_tap_confirm_with_face_alt_3" msgid="2192670471930606539">"Ubuso buyaziwa. Cindezela isithonjana sokuvula ukuze uqhubeke."</string>
     <string name="biometric_dialog_authenticated" msgid="7337147327545272484">"Kugunyaziwe"</string>
+    <string name="biometric_dialog_cancel_authentication" msgid="981316588773442637">"Khansela Ukuqinisekisa"</string>
     <string name="biometric_dialog_use_pin" msgid="8385294115283000709">"Sebenzisa iphinikhodi"</string>
     <string name="biometric_dialog_use_pattern" msgid="2315593393167211194">"Sebenzisa iphethini"</string>
     <string name="biometric_dialog_use_password" msgid="3445033859393474779">"Sebenzisa iphasiwedi"</string>
@@ -168,7 +169,22 @@
     <string name="biometric_dialog_last_pattern_attempt_before_wipe_profile" msgid="6045224069529284686">"Uma ufaka iphethini engalungile kumzamo olandelayo, iphrofayela yakho yomsebenzi nedatha yayo izosuswa."</string>
     <string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"Uma ufaka iphinikhodi engalungile kumzamo olandelayo, iphrofayela yakho yomsebenzi nedatha yayo izosuswa."</string>
     <string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"Uma ufake iphasiwedi engalungile kumzamo olandelayo, iphrofayela yakho yomsebenzi nedatha yayo izosuswa."</string>
+    <string name="biometric_re_enroll_dialog_confirm" msgid="3049858021857801836">"Setha"</string>
+    <string name="biometric_re_enroll_dialog_cancel" msgid="93760939407091417">"Hhayi manje"</string>
+    <string name="biometric_re_enroll_notification_content" msgid="8685925877186288180">"Lokhu kuyadingeka ukuze kuthuthukiswe ukuvikeleka nokusebenza"</string>
+    <string name="fingerprint_re_enroll_notification_title" msgid="4539432429683916604">"Setha Ukuvula ngesigxivizo somunwe futhi"</string>
+    <string name="fingerprint_re_enroll_notification_name" msgid="630798657797645704">"Ukuvula Ngesigxivizo Somunwe"</string>
+    <string name="fingerprint_re_enroll_dialog_title" msgid="3526033128113925780">"Setha Ukuvula Ngesigxivizo Somunwe"</string>
+    <string name="fingerprint_re_enroll_dialog_content" msgid="4866561176695984879">"Ukuze usethe Ukuvula ngesigxivizo somunwe futhi, izithombe zakho zamanje zesigxivizo somunwe namamodeli azosuswa.\n\nNgemva kokuthi sezisusiwe, uzodinga ukuphinda usethe Ukuvula Ngesigxivizo Somunwe ukuze usebenzise isigxivizo somunwe ukuze uvule ifoni yakho noma uqinisekise ukuthi nguwe."</string>
+    <string name="fingerprint_re_enroll_dialog_content_singular" msgid="3083663339787381218">"Ukuze usethe Ukuvula ngesigxivizo somunwe futhi, izithombe zakho zamanje zesigxivizo somunwe kanye nemodeli kuzosuswa.\n\nNgemva kokuthi sezisusiwe, uzodinga ukuphinda usethe Ukuvula ngesigxivizo somunwe ukuze usebenzise isigxivizo somunwe ukuze uvule ifoni yakho noma uqinisekise ukuthi nguwe."</string>
+    <string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Ayikwazanga ukusetha ukuvula ngesigxivizo somunwe. Iya kumasethingi ukuze uzame futhi."</string>
+    <string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Setha Ukuvula ngobuso futhi"</string>
+    <string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Ukuvula ngobuso"</string>
+    <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Setha Ukuvula ngobuso"</string>
+    <string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Ukuze usethe Ukuvula ngobuso futhi, imodeli yakho yobuso yamanje izosulwa.\n\nUzodinga ukuphinda usethe lesi sakhi ukuze usebenzise ubuso bakho ukuze uvule ifoni yakho."</string>
+    <string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Ayikwazanga ukusetha ukuvula ngobuso. Iya Kumasethingi ukuze uzame futhi."</string>
     <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Thinta inzwa yesigxivizo zeminwe"</string>
+    <string name="fingerprint_dialog_authenticated_confirmation" msgid="1603899612957562862">"Cindezela isithonjana sokuvula ukuze uqhubeke"</string>
     <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Ayibazi ubuso. Sebenzisa izigxivizo zeminwe kunalokho."</string>
     <!-- no translation found for keyguard_face_failed_use_fp (7140293906176164263) -->
     <skip />
@@ -232,7 +248,7 @@
     <string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Umsindo"</string>
     <string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Ihedisethi"</string>
     <string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Okokufaka"</string>
-    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="3003338571871392293">"Izinsiza zokuzwa"</string>
+    <string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Imishini yendlebe"</string>
     <string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Iyavula..."</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Ukuphenduka okuzenzakalelayo"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Phendula iskrini ngokuzenzakalela"</string>
@@ -348,6 +364,7 @@
     <string name="keyguard_face_successful_unlock" msgid="4203999851465708287">"Vula ngobuso"</string>
     <string name="keyguard_face_successful_unlock_alt1" msgid="5853906076353839628">"Ubuso buyaziwa"</string>
     <string name="keyguard_retry" msgid="886802522584053523">"Swayiphela phezulu ukuze uzame futhi"</string>
+    <string name="accesssibility_keyguard_retry" msgid="8880238862712870676">"Swayiphela phezulu ukuze uzame Ukuvula ngobuso futhi"</string>
     <string name="require_unlock_for_nfc" msgid="1305686454823018831">"Vula ukuze usebenzise i-NFC"</string>
     <string name="do_disclosure_generic" msgid="4896482821974707167">"Le divayisi eyenhlangano yakho"</string>
     <string name="do_disclosure_with_name" msgid="2091641464065004091">"Le divayisi ngeye-<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
@@ -369,7 +386,7 @@
     <string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Iyashaja • Izogcwala ngo-<xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
     <string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Shintsha umsebenzisi"</string>
     <string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"imenyu yokudonsela phansi"</string>
-    <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Zonke izinhlelo zokusebenza nedatha kulesi sikhathi zizosuswa."</string>
+    <string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Wonke ama-app nedatha kulesi sikhathi azosuswa."</string>
     <string name="guest_wipe_session_title" msgid="7147965814683990944">"Siyakwamukela futhi, sivakashi!"</string>
     <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>
@@ -382,20 +399,29 @@
     <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>
-    <string name="media_projection_dialog_text" msgid="1755705274910034772">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> izithola ukufinyelela kulo lonke ulwazi olubonakalayo esikrinini sakho noma idlalwe kusuka kudivayisi yakho ngenkathi urekhoda noma usakaza. Lokhu kubandakanya ulwazi olufana namaphasiwedi, imininingwane yenkokhelo, izithombe, imilayezo, nomsindo owudlalayo."</string>
-    <string name="media_projection_dialog_service_text" msgid="958000992162214611">"Isevisi enikezela ngalo msebenzi izothola ukufinyelela kulo lonke ulwazi olubonakalayo esikrinini sakho noma oludlalwa kusuka kudivayisi yakho ngenkathi urekhoda noma usakaza. Lokhu kubandakanya ulwazi olufana namaphasiwedi, imininingwane yenkokhelo, izithombe, imilayezo, nomsindo owudlalayo."</string>
-    <string name="media_projection_dialog_service_title" msgid="2888507074107884040">"Qala ukurekhoda noma ukusakaza?"</string>
     <string name="media_projection_dialog_title" msgid="3316063622495360646">"Qala ukurekhoda noma ukusakaza nge-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
-    <string name="media_projection_permission_dialog_title" msgid="7130975432309482596">"Vumela i-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> yabelane noma irekhode?"</string>
-    <string name="media_projection_permission_dialog_option_entire_screen" msgid="392086473225692983">"Sonke isikrini"</string>
-    <string name="media_projection_permission_dialog_option_single_app" msgid="1591110238124910521">"I-app eyodwa"</string>
-    <string name="media_projection_permission_dialog_warning_entire_screen" msgid="3989078820637452717">"Uma wabelana, urekhoda, noma usakaza, i-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> inokufinyelela kunoma yini ebonakalayo kusikrini sakho noma edlalwa kudivayisi yakho. Ngakho-ke qaphela amagama ayimfihlo, imininingwane yokukhokha, imiyalezo, noma olunye ulwazi olubucayi."</string>
-    <string name="media_projection_permission_dialog_warning_single_app" msgid="1659532781536753059">"Uma wabelana, urekhoda, noma usakaza i-app, i-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> inokufinyelela kunoma yini eboniswayo noma edlalwayo kuleyo app. Ngakho-ke qaphela amagama ayimfihlo, imininingwane yokukhokha, imiyalezo, noma olunye ulwazi olubucayi."</string>
-    <string name="media_projection_permission_dialog_continue" msgid="1827799658916736006">"Qhubeka"</string>
-    <string name="media_projection_permission_app_selector_title" msgid="894251621057480704">"Yabelana noma rekhoda i-app"</string>
-    <string name="media_projection_permission_dialog_system_service_title" msgid="6827129613741303726">"Vumela le-app ukwabelana noma ukurekhoda?"</string>
-    <string name="media_projection_permission_dialog_system_service_warning_entire_screen" msgid="8801616203805837575">"Uma wabelana, urekhoda, noma usakaza, le-app inokufinyelela kunoma yini ebonakalayo kusikrini sakho noma edlalwa kudivayisi yakho. Ngakho-ke qaphela amagama ayimfihlo, imininingwane yokukhokha, imiyalezo, noma olunye ulwazi olubucayi."</string>
-    <string name="media_projection_permission_dialog_system_service_warning_single_app" msgid="543310680568419338">"Uma wabelana, urekhoda, noma usakaza i-app, le-app inokufinyelela kunoma yini eboniswayo noma edlalwayo kuleyo app. Ngakho-ke qaphela amagama ayimfihlo, imininingwane yokukhokha, imiyalezo, noma olunye ulwazi olubucayi."</string>
+    <string name="media_projection_dialog_warning" msgid="1303664408388363598">"I-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> izothola ukufinyelela kulo lonke ulwazi olubonakalayo esikrinini sakho noma idlalwe kusuka kudivayisi yakho ngenkathi urekhoda noma usakaza. Lokhu kubandakanya ulwazi olufana namaphasiwedi, imininingwane yenkokhelo, izithombe, imilayezo, nomsindo owudlalayo."</string>
+    <string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Qala ukurekhoda noma ukusakaza?"</string>
+    <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Isevisi enikezela ngalo msebenzi izothola ukufinyelela kulo lonke ulwazi olubonakalayo esikrinini sakho noma oludlalwa kusuka kudivayisi yakho ngenkathi urekhoda noma usakaza. Lokhu kubandakanya ulwazi olufana namaphasiwedi, imininingwane yenkokhelo, izithombe, imilayezo, nomsindo owudlalayo."</string>
+    <string name="screen_share_permission_dialog_option_entire_screen" msgid="3131200488455089620">"Sonke isikrini"</string>
+    <string name="screen_share_permission_dialog_option_single_app" msgid="4350961814397220929">"I-app eyodwa"</string>
+    <string name="screen_share_permission_app_selector_title" msgid="1404878013670347899">"Yabelana noma rekhoda i-app"</string>
+    <string name="media_projection_entry_app_permission_dialog_title" msgid="9155535851866407199">"Qala ukurekhoda noma ukusakaza nge-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="8736391633234144237">"Uma wabelana, urekhoda, noma usakaza, i-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> inokufinyelela kunoma yini ebonakalayo kusikrini sakho noma edlalwa kudivayisi yakho. Ngakho-ke qaphela ngezinto ezifana namaphasiwedi, imininingwane yokukhokha, imilayezo, izithombe, nomsindo nevidiyo."</string>
+    <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="5211695779082563959">"Uma wabelana, ukurekhoda, noma ukusakaza ku-app, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> inokufinyelela kunoma yini eboniswayo noma edlalwa kuleyo app. Ngakho-ke qaphela ngezinto ezfana namaphasiwedi, imininingwane yokukhokha, imilayezo, izithombe, nomsindo nevidiyo."</string>
+    <string name="media_projection_entry_app_permission_dialog_continue" msgid="295463518195075840">"Qala"</string>
+    <string name="media_projection_entry_cast_permission_dialog_title" msgid="8860150223172993547">"Qala ukusakaza?"</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="1986212276016817231">"Uma usakaza, i-Android inokufinyelela kunoma yini ebonakalayo kusikrini sakho noma edlalwa kudivayisi yakho. Ngakho-ke qaphela ngezinto ezifana namaphasiwedi, imininingwane yokukhokha, imilayezo, izithombe, nomsindo nevidiyo."</string>
+    <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="9900961380294292">"Uma usakaza i-app, i-Android inokufinyelela kunoma yini eboniswayo noma edlalwa kuleyo app. Ngakho-ke qaphela ngezinto ezifana namaphasiwedi, imininingwane yenkokhelo, imilayezo, izithombe, nomsindo nevidiyo."</string>
+    <string name="media_projection_entry_cast_permission_dialog_continue" msgid="7209890669948870042">"Qala ukusakaza"</string>
+    <string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"Qala ukwabelana?"</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"Uma wabelana, ukurekhoda, noma ukusakaza, i-Android inokufinyelela kunoma yini ebonakala esikrinini sakho noma okudlalwayo kudivayisi yakho. Ngakho-ke qaphela ngezinto ezifana namaphasiwedi, imininingwane yokukhokha, imilayezo, izithombe, nomsindo nevidiyo."</string>
+    <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"Uma wabelana, ukurekhoda, noma ukusakaza ku-app, i-Android inokufinyelela kunoma yini eboniswayo noma edlalwa kuleyo app. Ngakho-ke qaphela ngezinto ezfana namaphasiwedi, imininingwane yokukhokha, imilayezo, izithombe, nomsindo nevidiyo."</string>
+    <string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"Qala"</string>
+    <string name="media_projection_task_switcher_text" msgid="590885489897412359">"Ukwabelana kuyaphumula uma ushintsha ama-app"</string>
+    <string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Yabelana ngale-app esikhundleni salokho"</string>
+    <string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Shintshela emuva"</string>
+    <string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Ukushintsha i-app"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Kuvinjelwe ngumlawuli wakho we-IT"</string>
     <string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Ukuthwebula isikrini kukhutshazwe yinqubomgomo yedivayisi"</string>
     <string name="clear_all_notifications_text" msgid="348312370303046130">"Sula konke"</string>
@@ -444,7 +470,8 @@
     <string name="monitoring_description_ca_certificate" msgid="448923057059097497">"Ukugunyaza kwesitifiketi kufakwe kule divayisi. Ithrafikhi yenethiwekhi yakho evikelekile ingaqashelwa noma ilungiswe."</string>
     <string name="monitoring_description_management_network_logging" msgid="216983105036994771">"Umlawuli wakho uvule ukungena kwedivayisi yakho, okuqapha ithrafikhi kudivayisi yakho."</string>
     <string name="monitoring_description_managed_profile_network_logging" msgid="6932303843097006037">"Umlawuli wakho uvule ukungena kwenethiwekhi, okuhlola ithrafikhi kudivayisi yakho yephrofayela yomsebenzi kodwa hhayi kuphrofayela yakho yomuntu siqu."</string>
-    <string name="monitoring_description_named_vpn" msgid="7502657784155456414">"Le divayisi ixhunywe ku-inthanethi nge-<xliff:g id="VPN_APP">%1$s</xliff:g>. Umsebenzi wakho wenethiwekhi, ohlanganisa ama-imeyili nedatha yokubhrawuza, ubonakala kumphathi wakho we-IT."</string>
+    <string name="monitoring_description_named_vpn" msgid="8220190039787149671">"Le divayisi ixhunywe ku-inthanethi nge-<xliff:g id="VPN_APP">%1$s</xliff:g>. Umsebenzi wakho wenethiwekhi, okuhlanganisa ama-imeyili nedatha yokubhrawuza, ubonakala kumhlinzeki we-VPN."</string>
+    <string name="monitoring_description_managed_device_named_vpn" msgid="7693648349547785255">"Le divayisi ixhunywe ku-inthanethi nge-<xliff:g id="VPN_APP">%1$s</xliff:g>. Umsebenzi wakho wenethiwekhi, ohlanganisa ama-imeyili nedatha yokubhrawuza, ubonakala kumphathi wakho we-IT."</string>
     <string name="monitoring_description_two_named_vpns" msgid="6726394451199620634">"Le divayisi ixhunywe ku-inthanethi nge-<xliff:g id="VPN_APP_0">%1$s</xliff:g> nange-<xliff:g id="VPN_APP_1">%2$s</xliff:g>. Umsebenzi wakho wenethiwekhi, ohlanganisa ama-imeyili nedatha yokubhrawuza, ubonakala kumphathi wakho we-IT."</string>
     <string name="monitoring_description_managed_profile_named_vpn" msgid="7254359257263069766">"Ama-app akho okusebenza axhunywe ku-inthanethi nge-<xliff:g id="VPN_APP">%1$s</xliff:g>. Umsebenzi wakho wenethiwekhi kuma-app womsebenzi, okuhlanganisa ama-imeyili nedatha yokubhrawuza, ubonakala kumphathi wakho we-IT nomhlinzeki we-VPN."</string>
     <string name="monitoring_description_personal_profile_named_vpn" msgid="5083909710727365452">"Ama-app akho womuntu siqu axhunywe ku-inthanethi nge-<xliff:g id="VPN_APP">%1$s</xliff:g>. Umsebenzi wakho wenethiwekhi, okuhlanganisa ama-imeyili nedatha yokubhrawuza, ubonakala kumhlinzeki wakho we-VPN."</string>
@@ -462,8 +489,11 @@
     <string name="volume_odi_captions_hint_disable" msgid="2518846326748183407">"khubaza"</string>
     <string name="sound_settings" msgid="8874581353127418308">"Umsindo nokudlidliza"</string>
     <string name="volume_panel_dialog_settings_button" msgid="2513228491513390310">"Amasethingi"</string>
-    <string name="csd_lowered_title" product="default" msgid="1786173629015030856">"Yehliselwe kuvolumu ephephile"</string>
-    <string name="csd_system_lowered_text" product="default" msgid="2001603282316829500">"Ivolumu beyiphezulu isikhathi eside kunokunconyiwe"</string>
+    <string name="csd_lowered_title" product="default" msgid="2464112924151691129">"Ivolumu yehliselwe kuleveli ephephile"</string>
+    <string name="csd_system_lowered_text" product="default" msgid="1250251883692996888">"Ivolumu yama-headphone beyiphezulu isikhathi eside kunokunconyiwe"</string>
+    <string name="csd_500_system_lowered_text" product="default" msgid="7414943302186884124">"Ivolumu yama-headphone ibe phezulu kunokunconyiwe, okungalimaza ukuzwa kwakho"</string>
+    <string name="csd_button_keep_listening" product="default" msgid="4093794049149286784">"Qhubeka nokulalela"</string>
+    <string name="csd_button_lower_volume" product="default" msgid="5347210412376264579">"Yehlisa ivolomu"</string>
     <string name="screen_pinning_title" msgid="9058007390337841305">"I-app iphiniwe"</string>
     <string name="screen_pinning_description" msgid="8699395373875667743">"Lokhu kuyigcina ibukeka uze ususe ukuphina. Thinta uphinde ubambe okuthi Emuva Nokubuka konke ukuze ususe ukuphina."</string>
     <string name="screen_pinning_description_recents_invisible" msgid="4564466648700390037">"Lokhu kuyigcina ibonakala uze uyisuse. Thinta uphinde ubambe okuthi Emuva nokuthi Ekhaya ukuze ususe ukuphina."</string>
@@ -739,13 +769,7 @@
     <string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"Imenyu yamandla"</string>
     <string name="accessibility_quick_settings_page" msgid="7506322631645550961">"Ikhasi <xliff:g id="ID_1">%1$d</xliff:g> kwangu-<xliff:g id="ID_2">%2$d</xliff:g>"</string>
     <string name="tuner_lock_screen" msgid="2267383813241144544">"Khiya isikrini"</string>
-    <string name="thermal_shutdown_title" msgid="2702966892682930264">"Ifoni ivaliwe ngenxa yokushisa"</string>
-    <string name="thermal_shutdown_message" msgid="6142269839066172984">"Ifoni yakho manje isebenza ngokuvamile.\nThepha ukuze uthole ulwazi olungeziwe"</string>
-    <string name="thermal_shutdown_dialog_message" msgid="6745684238183492031">"Ifoni yakho ibishisa kakhulu, ngakho-ke yacisha ukuze iphole. Ifoni yakho manje isebenza ngokuvamile.\n\nIfoni yakho ingashisa kakhulu uma:\n	• Usebenzisa izinhlelo zokusebenza ezinkulu (njegegeyimu, ividiyo, noma izinhlelo zokusebenza zokuzula)\n	• Landa noma layisha amafayela amakhulu\n	• Sebenzisa ifoni yakho kumathempelesha aphezulu"</string>
     <string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"Bona izinyathelo zokunakekelwa"</string>
-    <string name="high_temp_title" msgid="2218333576838496100">"Ifoni iyafudumala"</string>
-    <string name="high_temp_notif_message" msgid="1277346543068257549">"Ezinye izici zikhawulelwe ngenkathi ifoni iphola.\nThepha mayelana nolwazi olwengeziwe"</string>
-    <string name="high_temp_dialog_message" msgid="3793606072661253968">"Ifoni yakho izozama ngokuzenzakalela ukuphola. Ungasasebenzisa ifoni yakho, kodwa ingasebenza ngokungasheshi.\n\nUma ifoni yakho isipholile, izosebenza ngokuvamile."</string>
     <string name="high_temp_dialog_help_text" msgid="7380171287943345858">"Bona izinyathelo zokunakekelwa"</string>
     <string name="high_temp_alarm_title" msgid="8654754369605452169">"Khipha idivayisi yakho"</string>
     <string name="high_temp_alarm_notify_message" msgid="3917622943609118956">"Idivayisi yakho iqala ukufudumala eduze kwembobo yokushaja. Uma ixhunywe kushaja noma insiza ye-USB, yikhiphe, futhi uqaphele njengoba ikhebuli ingase ifudumale."</string>
@@ -839,6 +863,7 @@
     <string name="magnification_mode_switch_state_full_screen" msgid="5229653514979530561">"Khulisa isikrini esigcwele"</string>
     <string name="magnification_mode_switch_state_window" msgid="8597100249594076965">"Khulisa ingxenye eyesikrini"</string>
     <string name="magnification_open_settings_click_label" msgid="6151849212725923363">"Vula amasethingi okukhuliswa"</string>
+    <string name="magnification_close_settings_click_label" msgid="4642477260651704517">"Vala amasethingi okukhuliswa"</string>
     <string name="magnification_drag_corner_to_resize" msgid="1249766311052418130">"Hudula ikhona ukuze usayize kabusha"</string>
     <string name="accessibility_allow_diagonal_scrolling" msgid="3258050349191496398">"Vumela ukuskrola oku-diagonal"</string>
     <string name="accessibility_resize" msgid="5733759136600611551">"Shintsha usayizi"</string>
@@ -885,8 +910,7 @@
     <string name="accessibility_control_change_unfavorite" msgid="6997408061750740327">"susa ubuntandokazi"</string>
     <string name="accessibility_control_move" msgid="8980344493796647792">"Hambisa ukuze ubeke ku-<xliff:g id="NUMBER">%d</xliff:g>"</string>
     <string name="controls_favorite_default_title" msgid="967742178688938137">"Izilawuli"</string>
-    <!-- no translation found for controls_favorite_subtitle (5818709315630850796) -->
-    <skip />
+    <string name="controls_favorite_subtitle" msgid="5818709315630850796">"Khetha izilawuli zedivayisi ukuze ufinyelele ngokushesha"</string>
     <string name="controls_favorite_rearrange" msgid="5616952398043063519">"Bamba futhi uhudule ukuze uphinde ulungise izilawuli"</string>
     <string name="controls_favorite_removed" msgid="5276978408529217272">"Zonke izilawuli zisusiwe"</string>
     <string name="controls_favorite_toast_no_changes" msgid="7094494210840877931">"Izinguquko azilondolozwanga"</string>
@@ -915,6 +939,7 @@
     <string name="controls_pin_instructions_retry" msgid="1566667581012131046">"Zama enye Iphinikhodi"</string>
     <string name="controls_confirmation_message" msgid="7744104992609594859">"Qinisekisa ushintsho lwe-<xliff:g id="DEVICE">%s</xliff:g>"</string>
     <string name="controls_structure_tooltip" msgid="4355922222944447867">"Swayipha ukuze ubone okuningi"</string>
+    <string name="retry_face" msgid="416380073082560186">"Zama futhi ukufakazela ubuqiniso bobuso"</string>
     <string name="controls_seeding_in_progress" msgid="3033855341410264148">"Ilayisha izincomo"</string>
     <string name="controls_media_title" msgid="1746947284862928133">"Imidiya"</string>
     <string name="controls_media_close_session" msgid="4780485355795635052">"Fihlela i-<xliff:g id="APP_NAME">%1$s</xliff:g> lesi silawuli semidiya?"</string>
@@ -924,6 +949,7 @@
     <string name="controls_media_settings_button" msgid="5815790345117172504">"Izilungiselelo"</string>
     <string name="controls_media_playing_item_description" msgid="4531853311504359098">"I-<xliff:g id="SONG_NAME">%1$s</xliff:g> ka-<xliff:g id="ARTIST_NAME">%2$s</xliff:g> idlala kusuka ku-<xliff:g id="APP_LABEL">%3$s</xliff:g>"</string>
     <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> ku-<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string>
+    <string name="controls_media_empty_title" msgid="8296102892421573325">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> iyasebenza"</string>
     <string name="controls_media_button_play" msgid="2705068099607410633">"Dlala"</string>
     <string name="controls_media_button_pause" msgid="8614887780950376258">"Misa"</string>
     <string name="controls_media_button_prev" msgid="8126822360056482970">"Ithrekhi yangaphambilini"</string>
@@ -969,6 +995,8 @@
     <string name="media_output_dialog_volume_percentage" msgid="1613984910585111798">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>%%"</string>
     <string name="media_output_group_title_speakers_and_displays" msgid="7169712332365659820">"Izipikha Neziboniso"</string>
     <string name="media_output_group_title_suggested_device" msgid="4157186235837903826">"Amadivayisi Aphakanyisiwe"</string>
+    <string name="media_output_end_session_dialog_summary" msgid="5954520685989877347">"Misa iseshini yakho eyabiwe ukuze uhambise imidiya kwenye idivayisi"</string>
+    <string name="media_output_end_session_dialog_stop" msgid="208189434474624412">"Misa"</string>
     <string name="media_output_first_broadcast_title" msgid="6292237789860753022">"Indlela ukusakaza okusebenza ngayo"</string>
     <string name="media_output_broadcast" msgid="3555580945878071543">"Sakaza"</string>
     <string name="media_output_first_notify_broadcast_message" msgid="6353857724136398494">"Abantu abaseduze nawe abanamadivayisi e-Bluetooth ahambisanayo bangalalela imidiya oyisakazayo"</string>
@@ -981,7 +1009,7 @@
     <string name="media_output_broadcast_update_error" msgid="1420868236079122521">"Ayikwazi ukulondoloza. Zama futhi."</string>
     <string name="media_output_broadcast_last_update_error" msgid="5484328807296895491">"Ayikwazi ukulondoloza."</string>
     <string name="media_output_broadcast_code_hint_no_less_than_min" msgid="4663836092607696185">"Sebenzisa okungenani izinhlamvu ezi-4"</string>
-    <string name="media_output_broadcast_code_hint_no_more_than_max" msgid="9181869364856175638">"Sebenzisa isinhlamvu ezimbalwa kuneziyi-16"</string>
+    <string name="media_output_broadcast_edit_hint_no_more_than_max" msgid="3923625800037673922">"Sebenzisa isinhlamvu ezimbalwa kuneziyi-<xliff:g id="LENGTH">%1$d</xliff:g>"</string>
     <string name="build_number_clip_data_label" msgid="3623176728412560914">"Yakha inombolo"</string>
     <string name="build_number_copy_toast" msgid="877720921605503046">"Yakha inombolo ekopishelwe kubhodi yokunamathisela."</string>
     <string name="basic_status" msgid="2315371112182658176">"Vula ingxoxo"</string>
@@ -1023,6 +1051,7 @@
     <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Kube khona inkinga ngokufunda imitha yakho yebhethri"</string>
     <string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Thepha ukuze uthole olunye ulwazi"</string>
     <string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Akukho alamu esethiwe"</string>
+    <string name="accessibility_bouncer" msgid="5896923685673320070">"faka ukukhiya isikrini"</string>
     <string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Inzwa yesigxivizo somunwe"</string>
     <string name="accessibility_authenticate_hint" msgid="798914151813205721">"gunyaza"</string>
     <string name="accessibility_enter_hint" msgid="2617864063504824834">"faka idivayisi"</string>
@@ -1085,7 +1114,8 @@
     <string name="dream_overlay_status_bar_assistant_attention_indicator" msgid="4712565923771372690">"I-Assistant ilalele"</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="note_task_button_label" msgid="8718616095800343136">"Ukuthatha amanothi"</string>
+    <string name="note_task_button_label" msgid="230135078402003532">"Ukuthatha amanothi"</string>
+    <string name="note_task_shortcut_long_label" msgid="7729325091147319409">"Ukuthatha amanothi, <xliff:g id="NOTE_TAKING_APP">%1$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>
@@ -1101,11 +1131,13 @@
     <string name="log_access_confirmation_learn_more" msgid="3134565480986328004">"Funda kabanzi"</string>
     <string name="log_access_confirmation_learn_more_at" msgid="5635666259505215905">"Funda kabanzi ku-<xliff:g id="URL">%s</xliff:g>"</string>
     <string name="keyguard_affordance_enablement_dialog_action_template" msgid="8164857863036314664">"Vula i-<xliff:g id="APPNAME">%1$s</xliff:g>"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_1" msgid="8439655049139819278">"• I-app isethiwe"</string>
-    <string name="keyguard_affordance_enablement_dialog_wallet_instruction_2" msgid="4321089250629477835">"• Okungenani ikhadi elilodwa lengeziwe ku-Wallet"</string>
-    <string name="keyguard_affordance_enablement_dialog_qr_scanner_instruction" msgid="5355839079232119791">"• Faka i-app yekhamera"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_1" msgid="8438311171750568633">"• I-app isethiwe"</string>
-    <string name="keyguard_affordance_enablement_dialog_home_instruction_2" msgid="8308525385889021652">"• Okungenani idivayisi eyodwa iyatholakala"</string>
+    <string name="wallet_quick_affordance_unavailable_install_the_app" msgid="7298552910007208368">"Ukuze ungeze i-app ye-Wallet njengesinqamuleli, qinisekisa ukuthi i-app ifakiwe"</string>
+    <string name="wallet_quick_affordance_unavailable_configure_the_app" msgid="4387433357429873258">"Ukuze ungeze i-app ye-Wallet njengesinqamuleli, qinisekisa ukuthi okungenani ikhadi elilodwa lingeziwe"</string>
+    <string name="qr_scanner_quick_affordance_unavailable_explanation" msgid="3049582306241150946">"Ukuze ungeze Iskena sekhodi ye-QR njengesinqamuleli, qinisekisa ukuthi i-app yekhamera ifakiwe"</string>
+    <string name="home_quick_affordance_unavailable_install_the_app" msgid="6187820778998446168">"Ukuze ungeze i-App yasekhaya njengesinqamuleli, qinisekisa ukuthi i-app ifakiwe"</string>
+    <string name="home_quick_affordance_unavailable_configure_the_app" msgid="7953595390775156839">"• Okungenani idivayisi eyodwa iyatholakala"</string>
+    <string name="notes_app_quick_affordance_unavailable_explanation" msgid="4796955161600178530">"Khetha i-app yamanothi azenzakalelayo ukuze usebenzise isinqamuleli sokubhala amanothi"</string>
+    <string name="keyguard_affordance_enablement_dialog_notes_app_action" msgid="6821710209675089470">"Khetha i-app"</string>
     <string name="keyguard_affordance_press_too_short" msgid="8145437175134998864">"Thinta futhi ubambe isinqamuleli"</string>
     <string name="rear_display_bottom_sheet_cancel" msgid="3461468855493357248">"Khansela"</string>
     <string name="rear_display_bottom_sheet_confirm" msgid="1507591562761552899">"Shintsha izikrini manje"</string>
@@ -1119,19 +1151,37 @@
     <string name="stylus_battery_low_subtitle" msgid="3583843128908823273">"Xhuma i-stylus yakho kushaja"</string>
     <string name="stylus_battery_low" msgid="7134370101603167096">"Ibhethri le-stylus liphansi"</string>
     <string name="video_camera" msgid="7654002575156149298">"Ikhamera yevidiyo"</string>
-    <string name="call_from_work_profile_title" msgid="6991157106804289643">"Ayikwazi ukufonela le phrofayela"</string>
-    <string name="call_from_work_profile_text" msgid="3458704745640229638">"Inqubomgomo yakho yomsebenzi ikuvumela ukuthi wenze amakholi wefoni kuphela ngephrofayela yomsebenzi"</string>
+    <string name="call_from_work_profile_title" msgid="5418253516453177114">"Ayikwazi ukuthumela umlayezo ukusuka ku-app yomuntu siqu"</string>
+    <string name="call_from_work_profile_text" msgid="2856337395968118274">"Inhlangano yakho ikuvumela kuphela ukuthi wenze amakholi ngama-app asemsebenzini"</string>
     <string name="call_from_work_profile_action" msgid="2937701298133010724">"Shintshela kuphrofayela yomsebenzi"</string>
-    <string name="call_from_work_profile_close" msgid="7927067108901068098">"Vala"</string>
+    <string name="install_dialer_on_work_profile_action" msgid="2014659711597862506">"Faka i-app yefoni yasemsebenzini"</string>
+    <string name="call_from_work_profile_close" msgid="5830072964434474143">"Khansela"</string>
     <string name="lock_screen_settings" msgid="6152703934761402399">"Yenza ngokwezifiso ukukhiya isikrini"</string>
-    <!-- no translation found for keyguard_unlock_to_customize_ls (2068542308086253819) -->
-    <skip />
+    <string name="keyguard_unlock_to_customize_ls" msgid="2068542308086253819">"Vula ukuze wenze ukuvala isikrini ngendlela oyifisayo"</string>
     <string name="wifi_unavailable_dream_overlay_content_description" msgid="2024166212194640100">"I-Wi-Fi ayitholakali"</string>
     <string name="camera_blocked_dream_overlay_content_description" msgid="4074759493559418130">"Ikhamera ivinjiwe"</string>
     <string name="camera_and_microphone_blocked_dream_overlay_content_description" msgid="7891078093416249764">"Ikhamera nemakrofoni zivinjiwe"</string>
     <string name="microphone_blocked_dream_overlay_content_description" msgid="5466897982130007033">"Imakrofoni ivinjiwe"</string>
     <string name="priority_mode_dream_overlay_content_description" msgid="6044561000253314632">"Imodi ebalulekile ivuliwe"</string>
     <string name="assistant_attention_content_description" msgid="6830215897604642875">"Ukunaka kwe-Assistant kuvuliwe"</string>
-    <!-- no translation found for set_default_notes_app_toast_content (2812374329662610753) -->
-    <skip />
+    <string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Setha i-app yamanothi azenzakalelayo Kumsethingi"</string>
+    <string name="install_app" msgid="5066668100199613936">"Faka i-app"</string>
+    <string name="privacy_dialog_title" msgid="7839968133469098311">"Imakrofoni Nekhamera"</string>
+    <string name="privacy_dialog_summary" msgid="2458769652125995409">"Ukusetshenziswa kwakamuva kwe-app"</string>
+    <string name="privacy_dialog_more_button" msgid="7610604080293562345">"Bona ukufinyelela kwakamuva"</string>
+    <string name="privacy_dialog_done_button" msgid="4504330708531434263">"Kwenziwe"</string>
+    <string name="privacy_dialog_expand_action" msgid="9129262348628331377">"Nweba futhi ubonise izinketho"</string>
+    <string name="privacy_dialog_collapse_action" msgid="277419962019466347">"Goqa"</string>
+    <string name="privacy_dialog_close_app_button" msgid="8006250171305878606">"Vala le-app"</string>
+    <string name="privacy_dialog_close_app_message" msgid="1316408652526310985">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ivaliwe"</string>
+    <string name="privacy_dialog_manage_service" msgid="8320590856621823604">"Phatha isevisi"</string>
+    <string name="privacy_dialog_manage_permissions" msgid="2543451567190470413">"Phatha ukufinyelela"</string>
+    <string name="privacy_dialog_active_call_usage" msgid="7858746847946397562">"Isetshenziswa ngekholi yefoni"</string>
+    <string name="privacy_dialog_recent_call_usage" msgid="1214810644978167344">"Kusetshenziswe kamuva kwikholi yefoni"</string>
+    <string name="privacy_dialog_active_app_usage" msgid="631997836335929880">"Isetshenziswa yi-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_recent_app_usage" msgid="4883417856848222450">"Kusetshenziswe kamuva yi-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+    <string name="privacy_dialog_active_app_usage_1" msgid="9047570143069220911">"Isetshenziswa yi-<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_1" msgid="2551340497722370109">"Kusetshenziswe kamuva yi-<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>)"</string>
+    <string name="privacy_dialog_active_app_usage_2" msgid="2770926061339921767">"Isetshenziswa yi-<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
+    <string name="privacy_dialog_recent_app_usage_2" msgid="2874689735085367167">"Kusetshenziswe kamuva yi-<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zu/strings_tv.xml b/packages/SystemUI/res/values-zu/strings_tv.xml
deleted file mode 100644
index 59fcb8d..0000000
--- a/packages/SystemUI/res/values-zu/strings_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="notification_vpn_connected" msgid="3891023882833274730">"I-VPN ixhunyiwe"</string>
-    <string name="notification_vpn_disconnected" msgid="7150747626448044843">"I-VPN inqanyuliwe"</string>
-    <string name="notification_disclosure_vpn_text" msgid="3873532735584866236">"Nge-<xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
-    <string name="tv_notification_panel_title" msgid="5311050946506276154">"Izaziso"</string>
-    <string name="tv_notification_panel_no_notifications" msgid="9115191912267270678">"Azikho Izaziso"</string>
-    <string name="mic_recording_announcement" msgid="7587123608060316575">"Imakrofoni iyarekhoda"</string>
-    <string name="camera_recording_announcement" msgid="7240177719403759112">"Ikhamera iyarekhoda"</string>
-    <string name="mic_and_camera_recording_announcement" msgid="8599231390508812667">"Ikhamera nemakrofoni kuyarekhoda"</string>
-    <string name="mic_stopped_recording_announcement" msgid="7301537004900721242">"Imakrofoni iyekile ukurekhoda"</string>
-    <string name="camera_stopped_recording_announcement" msgid="8540496432367032801">"Ikhamera iyeke ukurekhoda"</string>
-    <string name="mic_camera_stopped_recording_announcement" msgid="8708524579599977412">"Ikhemera nemakrofoni kuyekile ukurekhoda"</string>
-    <string name="screen_recording_announcement" msgid="2996750593472241520">"Ukurekhoda isikrini kuqalile"</string>
-    <string name="screen_stopped_recording_announcement" msgid="979749439036681416">"Ukurekhoda isikrini kumisiwe"</string>
-</resources>
diff --git a/packages/SystemUI/res/values/colors_tv.xml b/packages/SystemUI/res/values/colors_tv.xml
index 51b57bd..2bab3cb 100644
--- a/packages/SystemUI/res/values/colors_tv.xml
+++ b/packages/SystemUI/res/values/colors_tv.xml
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 -->
+<!-- TODO(b/289498394) move this to the TvSystemUI target -->
 <resources>
     <color name="recents_tv_card_background_color">#FF263238</color>
     <color name="recents_tv_card_title_text_color">#CCEEEEEE</color>
@@ -32,8 +33,4 @@
     <color name="tv_volume_dialog_seek_bar_background">#A03C4043</color>
     <color name="tv_volume_dialog_seek_bar_fill">#FFF8F9FA</color>
     <color name="tv_volume_dialog_accent">#FFDADCE0</color>
-
-    <color name="tv_notification_default_background_color">#383838</color>
-    <color name="tv_notification_blur_background_color">#a0383838</color>
-    <color name="tv_notification_text_color">#FFFFFF</color>
 </resources>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index b6ef594..12b3ec3 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -366,10 +366,16 @@
 
     <!-- Whether or not notifications that can be expanded will always be in their expanded state.
          This value only affects notifications that are not a group of notifications from the same
-         applications. If this value is false, then only the first notification will be expanded;
-         the other notifications need to be manually expanded by the user. -->
+         applications. If this value is false, then only the first notification will be expanded
+         when config_autoExpandFirstNotification is true; the other notifications need to be
+         manually expanded by the user. -->
     <bool name="config_alwaysExpandNonGroupedNotifications">false</bool>
 
+    <!-- Whether or not the first expandable notification will be expanded automatically by the
+         system. This value only affects notifications that are not a group of notifications from
+         the same applications and when config_alwaysExpandNonGroupedNotifications is false. -->
+    <bool name="config_autoExpandFirstNotification">true</bool>
+
     <!-- Whether or not an expandable notification can be manually expanded or collapsed by the
          user. Grouped notifications are still expandable even if this value is false. -->
     <bool name="config_enableNonGroupedNotificationExpand">true</bool>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index a056445..572a7fe7 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1207,7 +1207,6 @@
     <dimen name="magnification_window_drag_corner_stroke">3dp</dimen>
     <!-- The extra padding to show the whole outer border -->
     <dimen name="magnifier_drag_handle_padding">3dp</dimen>
-    <dimen name="magnification_max_frame_size">300dp</dimen>
     <!-- Magnification settings panel -->
     <dimen name="magnification_setting_view_margin">24dp</dimen>
     <dimen name="magnification_setting_text_size">18sp</dimen>
diff --git a/packages/SystemUI/res/values/dimens_tv.xml b/packages/SystemUI/res/values/dimens_tv.xml
deleted file mode 100644
index 3dbd990..0000000
--- a/packages/SystemUI/res/values/dimens_tv.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?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.
-  -->
-<resources>
-    <dimen name="tv_notification_panel_width">360dp</dimen>
-    <dimen name="tv_notification_blur_radius">31dp</dimen>
-</resources>
diff --git a/packages/SystemUI/res/values/strings_tv.xml b/packages/SystemUI/res/values/strings_tv.xml
deleted file mode 100644
index 8e372e4..0000000
--- a/packages/SystemUI/res/values/strings_tv.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/**
- * 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.
- */
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Title and subtitle for AudioRecordingIndicator -->
-
-    <string name="notification_vpn_connected">VPN is connected</string>
-    <string name="notification_vpn_disconnected">VPN is disconnected</string>
-    <!-- Disclosure text in the connected notification that indicates that the device is connected to a VPN. The placeholder is the VPN name. [CHAR LIMIT=40] -->
-    <string name="notification_disclosure_vpn_text">Via <xliff:g id="vpn_app" example="Foo VPN App">%1$s</xliff:g></string>
-
-    <string name="tv_notification_panel_title">Notifications</string>
-    <string name="tv_notification_panel_no_notifications">No Notifications</string>
-
-    <string name="mic_recording_announcement">Microphone is recording</string>
-    <string name="camera_recording_announcement">Camera is recording</string>
-    <string name="mic_and_camera_recording_announcement">Camera and Microphone are recording</string>
-    <string name="mic_stopped_recording_announcement">Microphone stopped recording</string>
-    <string name="camera_stopped_recording_announcement">Camera stopped recording</string>
-    <string name="mic_camera_stopped_recording_announcement">Camera and Microphone stopped recording</string>
-    <string name="screen_recording_announcement">Screen recording started</string>
-    <string name="screen_stopped_recording_announcement">Screen recording stopped</string>
-
-</resources>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index d520670..10340c6 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -451,6 +451,11 @@
 
     <style name="Theme.SystemUI.Dialog.Alert" parent="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert" />
 
+    <style name="Theme.SystemUI.Dialog.Alert.SensorPrivacy" parent="Theme.SystemUI.Dialog.Alert">
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowContentOverlay">@null</item>
+    </style>
+
     <style name="Theme.SystemUI.Dialog.GlobalActions" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar.Fullscreen">
         <item name="android:colorError">@*android:color/error_color_material_dark</item>
         <item name="android:windowIsFloating">true</item>
diff --git a/packages/SystemUI/res/values/styles_tv.xml b/packages/SystemUI/res/values/styles_tv.xml
deleted file mode 100644
index 3e09026..0000000
--- a/packages/SystemUI/res/values/styles_tv.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/**
- * 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.
- */
--->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android">
-    <style name="PipTheme" parent="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
-        <item name="android:windowBackground">@android:color/transparent</item>
-        <item name="android:backgroundDimEnabled">false</item>
-        <item name="android:windowDisablePreview">true</item>
-     </style>
-
-    <style name="TvSidePanelTheme">
-        <item name="android:windowIsTranslucent">true</item>
-        <item name="android:windowBackground">@android:color/transparent</item>
-        <item name="android:backgroundDimEnabled">false</item>
-        <item name="android:windowNoTitle">true</item>
-        <item name="android:windowContentOverlay">@null</item>
-        <item name="android:windowIsFloating">true</item>
-    </style>
-</resources>
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
index ef7ba2c..3d48f3c 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
@@ -211,8 +211,8 @@
         mSmallClockFrame = mView.findViewById(R.id.lockscreen_clock_view);
         mLargeClockFrame = mView.findViewById(R.id.lockscreen_clock_view_large);
 
-        mDumpManager.unregisterDumpable(getClass().toString()); // unregister previous clocks
-        mDumpManager.registerDumpable(getClass().toString(), this);
+        mDumpManager.unregisterDumpable(getClass().getSimpleName()); // unregister previous clocks
+        mDumpManager.registerDumpable(getClass().getSimpleName(), this);
 
         if (mFeatureFlags.isEnabled(LOCKSCREEN_WALLPAPER_DREAM_ENABLED)) {
             mStatusArea = mView.findViewById(R.id.keyguard_status_area);
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java
index 1f6b09b..5dbd014 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java
@@ -265,7 +265,8 @@
     private boolean hasMultipleEnabledIMEsOrSubtypes(InputMethodManager imm,
             final boolean shouldIncludeAuxiliarySubtypes) {
         final List<InputMethodInfo> enabledImis =
-                imm.getEnabledInputMethodListAsUser(KeyguardUpdateMonitor.getCurrentUser());
+                imm.getEnabledInputMethodListAsUser(
+                        UserHandle.of(KeyguardUpdateMonitor.getCurrentUser()));
 
         // Number of the filtered IMEs
         int filteredImisCount = 0;
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
index 6dd3540..9e83cc1 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
@@ -77,6 +77,7 @@
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.flags.Flags;
 import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
+import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
 import com.android.systemui.log.SessionTracker;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.FalsingManager;
@@ -127,6 +128,7 @@
     private final KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor;
     private final BouncerMessageInteractor mBouncerMessageInteractor;
     private int mTranslationY;
+    private final KeyguardTransitionInteractor mKeyguardTransitionInteractor;
     // Whether the volume keys should be handled by keyguard. If true, then
     // they will be handled here for specific media types such as music, otherwise
     // the audio service will bring up the volume dialog.
@@ -300,6 +302,10 @@
                     mViewMediatorCallback.keyguardDone(fromPrimaryAuth, targetUserId);
                 }
             }
+
+            if (mFeatureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                mKeyguardTransitionInteractor.startDismissKeyguardTransition();
+            }
         }
 
         @Override
@@ -425,7 +431,8 @@
             Provider<JavaAdapter> javaAdapter,
             UserInteractor userInteractor,
             FaceAuthAccessibilityDelegate faceAuthAccessibilityDelegate,
-            Provider<SceneInteractor> sceneInteractor
+            Provider<SceneInteractor> sceneInteractor,
+            KeyguardTransitionInteractor keyguardTransitionInteractor
     ) {
         super(view);
         view.setAccessibilityDelegate(faceAuthAccessibilityDelegate);
@@ -456,6 +463,7 @@
         mUserInteractor = userInteractor;
         mSceneInteractor = sceneInteractor;
         mJavaAdapter = javaAdapter;
+        mKeyguardTransitionInteractor = keyguardTransitionInteractor;
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 5b9b53e..853a62a 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -2385,7 +2385,7 @@
         mLockPatternUtils = lockPatternUtils;
         mAuthController = authController;
         mSecureSettings = secureSettings;
-        dumpManager.registerDumpable(getClass().getName(), this);
+        dumpManager.registerDumpable(this);
         mSensorPrivacyManager = sensorPrivacyManager;
         mActiveUnlockConfig = activeUnlockConfiguration;
         mLogger = logger;
diff --git a/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt b/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt
index c26e546..2dfb370 100644
--- a/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt
+++ b/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt
@@ -687,7 +687,7 @@
                     "userId: $int1 " +
                     "old: $bool1, " +
                     "new: $bool2 " +
-                    "context: $context"
+                    "context: $str1"
             }
         )
     }
diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java
index 04acd0b..b01e136 100644
--- a/packages/SystemUI/src/com/android/systemui/Dependency.java
+++ b/packages/SystemUI/src/com/android/systemui/Dependency.java
@@ -49,7 +49,6 @@
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.fragments.FragmentService;
-import com.android.systemui.hdmi.HdmiCecSetMenuLanguageHelper;
 import com.android.systemui.keyguard.ScreenLifecycle;
 import com.android.systemui.keyguard.WakefulnessLifecycle;
 import com.android.systemui.media.dialog.MediaOutputDialogFactory;
@@ -242,7 +241,6 @@
     @Inject Lazy<LocationController> mLocationController;
     @Inject Lazy<RotationLockController> mRotationLockController;
     @Inject Lazy<ZenModeController> mZenModeController;
-    @Inject Lazy<HdmiCecSetMenuLanguageHelper> mHdmiCecSetMenuLanguageHelper;
     @Inject Lazy<HotspotController> mHotspotController;
     @Inject Lazy<CastController> mCastController;
     @Inject Lazy<FlashlightController> mFlashlightController;
diff --git a/packages/SystemUI/src/com/android/systemui/LatencyTester.java b/packages/SystemUI/src/com/android/systemui/LatencyTester.java
index 39d9714..6ea0fc3 100644
--- a/packages/SystemUI/src/com/android/systemui/LatencyTester.java
+++ b/packages/SystemUI/src/com/android/systemui/LatencyTester.java
@@ -80,7 +80,7 @@
 
     @Override
     public void start() {
-        registerForBroadcasts(mEnabled);
+        updateEnabled();
     }
 
     private void fakeWakeAndUnlock(BiometricSourceType type) {
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
index e8458e7..38298cf 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
@@ -254,15 +254,15 @@
         }
 
         for (i = 0; i < mServices.length; i++) {
-            CoreStartable service = mServices[i];
+            final CoreStartable service = mServices[i];
             if (mBootCompleteCache.isBootComplete()) {
                 notifyBootCompleted(service);
             }
 
             if (service.isDumpCritical()) {
-                dumpManager.registerCriticalDumpable(service.getClass().getName(), service);
+                dumpManager.registerCriticalDumpable(service);
             } else {
-                dumpManager.registerNormalDumpable(service.getClass().getName(), service);
+                dumpManager.registerNormalDumpable(service);
             }
         }
         mSysUIComponent.getInitController().executePostInitTasks();
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/AccessibilityLogger.kt b/packages/SystemUI/src/com/android/systemui/accessibility/AccessibilityLogger.kt
index 7b91596..9e3a778 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/AccessibilityLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/AccessibilityLogger.kt
@@ -16,8 +16,11 @@
 
 package com.android.systemui.accessibility
 
+import com.android.internal.annotations.GuardedBy
 import com.android.internal.logging.UiEvent
 import com.android.internal.logging.UiEventLogger
+import com.android.internal.logging.UiEventLogger.UiEventEnum
+import com.android.systemui.util.time.SystemClock
 import javax.inject.Inject
 
 /**
@@ -25,16 +28,60 @@
  *
  * See go/uievent
  */
-class AccessibilityLogger @Inject constructor(private val uiEventLogger: UiEventLogger) {
+class AccessibilityLogger
+@Inject
+constructor(private val uiEventLogger: UiEventLogger, private val clock: SystemClock) {
+
+    @GuardedBy("clock") private var lastTimeThrottledMs: Long = 0
+    @GuardedBy("clock") private var lastEventThrottled: UiEventEnum? = null
+
+    /**
+     * Logs the event, but any additional calls within the given delay window are ignored. The
+     * window resets every time a new event is received. i.e. it will only log one time until you
+     * wait at least [delayBeforeLoggingMs] before sending the next event.
+     *
+     * <p>Additionally, if a different type of event is passed in, the delay window for the previous
+     * one is forgotten. e.g. if you send two types of events interlaced all within the delay
+     * window, e.g. A->B->A within 1000ms, all three will be logged.
+     */
+    @JvmOverloads fun logThrottled(event: UiEventEnum, delayBeforeLoggingMs: Int = 2000) {
+        synchronized(clock) {
+            val currentTimeMs = clock.elapsedRealtime()
+            val shouldThrottle =
+                event == lastEventThrottled &&
+                    currentTimeMs - lastTimeThrottledMs < delayBeforeLoggingMs
+            lastEventThrottled = event
+            lastTimeThrottledMs = currentTimeMs
+            if (shouldThrottle) {
+                return
+            }
+        }
+        log(event)
+    }
+
     /** Logs the given event */
-    fun log(event: UiEventLogger.UiEventEnum) {
+    fun log(event: UiEventEnum) {
         uiEventLogger.log(event)
     }
 
+    /**
+     * Logs the given event with an integer rank/position value.
+     *
+     * @param event the event to log
+     * @param position the rank or position value that the user interacted with in the UI
+     */
+    fun logWithPosition(event: UiEventEnum, position: Int) {
+        uiEventLogger.logWithPosition(event, /* uid= */ 0, /* packageName= */ null, position)
+    }
+
     /** Events regarding interaction with the magnifier settings panel */
     enum class MagnificationSettingsEvent constructor(private val id: Int) :
-        UiEventLogger.UiEventEnum {
-        @UiEvent(doc = "Magnification settings panel opened.")
+        UiEventEnum {
+        @UiEvent(
+            doc =
+                "Magnification settings panel opened. The selection rank is from which " +
+                    "magnifier mode it was opened (fullscreen or window)"
+        )
         MAGNIFICATION_SETTINGS_PANEL_OPENED(1381),
 
         @UiEvent(doc = "Magnification settings panel closed")
@@ -46,7 +93,14 @@
         @UiEvent(doc = "Magnification settings panel edit size save button clicked")
         MAGNIFICATION_SETTINGS_SIZE_EDITING_DEACTIVATED(1384),
 
-        @UiEvent(doc = "Magnification settings panel window size selected")
+        @UiEvent(doc = "Magnification settings panel zoom slider changed")
+        MAGNIFICATION_SETTINGS_ZOOM_SLIDER_CHANGED(1385),
+
+        @UiEvent(
+            doc =
+                "Magnification settings panel window size selected. The selection rank is " +
+                    "which size was selected."
+        )
         MAGNIFICATION_SETTINGS_WINDOW_SIZE_SELECTED(1386);
 
         override fun getId(): Int = this.id
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/TEST_MAPPING b/packages/SystemUI/src/com/android/systemui/accessibility/TEST_MAPPING
new file mode 100644
index 0000000..055fad1
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/TEST_MAPPING
@@ -0,0 +1,12 @@
+{
+  "presubmit-large": [
+    {
+      "name": "SystemUITests",
+      "options": [
+        {
+          "include-filter": "com.android.systemui.accessibility"
+        }
+      ]
+    }
+  ]
+}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java
index baabd95..69041d3 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnification.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.accessibility;
 
+import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN;
 import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;
 import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY;
 
@@ -368,7 +369,10 @@
         @Override
         public void onSetMagnifierSize(int displayId, int index) {
             mHandler.post(() -> onSetMagnifierSizeInternal(displayId, index));
-            mA11yLogger.log(MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_WINDOW_SIZE_SELECTED);
+            mA11yLogger.logWithPosition(
+                    MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_WINDOW_SIZE_SELECTED,
+                    index
+            );
         }
 
         @Override
@@ -390,6 +394,9 @@
                 mWindowMagnificationConnectionImpl.onPerformScaleAction(
                         displayId, scale, updatePersistence);
             }
+            mA11yLogger.logThrottled(
+                    MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_ZOOM_SLIDER_CHANGED
+            );
         }
 
         @Override
@@ -400,9 +407,6 @@
         @Override
         public void onSettingsPanelVisibilityChanged(int displayId, boolean shown) {
             mHandler.post(() -> onSettingsPanelVisibilityChangedInternal(displayId, shown));
-            mA11yLogger.log(shown
-                    ? MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_PANEL_OPENED
-                    : MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_PANEL_CLOSED);
         }
     };
 
@@ -456,8 +460,22 @@
     private void onSettingsPanelVisibilityChangedInternal(int displayId, boolean shown) {
         final WindowMagnificationController windowMagnificationController =
                 mMagnificationControllerSupplier.get(displayId);
-        if (windowMagnificationController != null && windowMagnificationController.isActivated()) {
-            windowMagnificationController.updateDragHandleResourcesIfNeeded(shown);
+        if (windowMagnificationController != null) {
+            boolean isWindowMagnifierActivated = windowMagnificationController.isActivated();
+            if (isWindowMagnifierActivated) {
+                windowMagnificationController.updateDragHandleResourcesIfNeeded(shown);
+            }
+
+            if (shown) {
+                mA11yLogger.logWithPosition(
+                        MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_PANEL_OPENED,
+                        isWindowMagnifierActivated
+                                ? ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW
+                                : ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN
+                );
+            } else {
+                mA11yLogger.log(MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_PANEL_CLOSED);
+            }
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
index 602f817..4a31f3d 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
@@ -124,7 +124,7 @@
     private float mScale;
 
     /**
-     * MagnificationFrame represents the bound of {@link #mMirrorSurface} and is constrained
+     * MagnificationFrame represents the bound of {@link #mMirrorSurfaceView} and is constrained
      * by the {@link #mMagnificationFrameBoundary}.
      * We use MagnificationFrame to calculate the position of {@link #mMirrorView}.
      * We combine MagnificationFrame with {@link #mMagnificationFrameOffsetX} and
@@ -225,6 +225,8 @@
     private boolean mAllowDiagonalScrolling = false;
     private boolean mEditSizeEnable = false;
     private boolean mSettingsPanelVisibility = false;
+    @VisibleForTesting
+    WindowMagnificationSizePrefs mWindowMagnificationSizePrefs;
 
     @Nullable
     private final MirrorWindowControl mMirrorWindowControl;
@@ -249,6 +251,7 @@
         mWindowMagnifierCallback = callback;
         mSysUiState = sysUiState;
         mConfiguration = new Configuration(context.getResources().getConfiguration());
+        mWindowMagnificationSizePrefs = new WindowMagnificationSizePrefs(mContext);
 
         final Display display = mContext.getDisplay();
         mDisplayId = mContext.getDisplayId();
@@ -262,6 +265,9 @@
                 Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
                 mResources.getInteger(R.integer.magnification_default_scale),
                 UserHandle.USER_CURRENT);
+        mAllowDiagonalScrolling = secureSettings.getIntForUser(
+                Settings.Secure.ACCESSIBILITY_ALLOW_DIAGONAL_SCROLLING, 1,
+                UserHandle.USER_CURRENT) == 1;
 
         setupMagnificationSizeScaleOptions();
 
@@ -269,8 +275,8 @@
                 com.android.internal.R.integer.config_shortAnimTime);
         updateDimensions();
 
-        final Size windowSize = getDefaultWindowSizeWithWindowBounds(mWindowBounds);
-        setMagnificationFrame(windowSize.getWidth(), windowSize.getHeight(),
+        final Size windowFrameSize = restoreMagnificationWindowFrameSizeIfPossible();
+        setMagnificationFrame(windowFrameSize.getWidth(), windowFrameSize.getHeight(),
                 mWindowBounds.width() / 2, mWindowBounds.height() / 2);
         computeBounceAnimationScale();
 
@@ -378,12 +384,16 @@
         if (!mMagnificationSizeScaleOptions.contains(index)) {
             return;
         }
-        final float scale = mMagnificationSizeScaleOptions.get(index, 1.0f);
-        final int initSize = Math.min(mWindowBounds.width(), mWindowBounds.height()) / 3;
-        int size = (int) (initSize * scale);
+        int size = getMagnificationWindowSizeFromIndex(index);
         setWindowSize(size, size);
     }
 
+    int getMagnificationWindowSizeFromIndex(@MagnificationSize int index) {
+        final float scale = mMagnificationSizeScaleOptions.get(index, 1.0f);
+        int initSize = Math.min(mWindowBounds.width(), mWindowBounds.height()) / 3;
+        return (int) (initSize * scale) - (int) (initSize * scale) % 2;
+    }
+
     void setEditMagnifierSizeMode(boolean enable) {
         mEditSizeEnable = enable;
         applyResourcesValues();
@@ -392,6 +402,12 @@
             updateDimensions();
             applyTapExcludeRegion();
         }
+
+        if (!enable) {
+            // Keep the magnifier size when exiting edit mode
+            mWindowMagnificationSizePrefs.saveSizeForCurrentDensity(
+                    new Size(mMagnificationFrame.width(), mMagnificationFrame.height()));
+        }
     }
 
     void setDiagonalScrolling(boolean enable) {
@@ -516,12 +532,12 @@
             return false;
         }
         mWindowBounds.set(currentWindowBounds);
-        final Size windowSize = getDefaultWindowSizeWithWindowBounds(mWindowBounds);
+        final Size windowFrameSize = restoreMagnificationWindowFrameSizeIfPossible();
         final float newCenterX = (getCenterX()) * mWindowBounds.width() / oldWindowBounds.width();
         final float newCenterY = (getCenterY()) * mWindowBounds.height() / oldWindowBounds.height();
 
-        setMagnificationFrame(windowSize.getWidth(), windowSize.getHeight(), (int) newCenterX,
-                (int) newCenterY);
+        setMagnificationFrame(windowFrameSize.getWidth(), windowFrameSize.getHeight(),
+                (int) newCenterX, (int) newCenterY);
         calculateMagnificationFrameBoundary();
         return true;
     }
@@ -735,6 +751,8 @@
     }
 
     private void setMagnificationFrame(int width, int height, int centerX, int centerY) {
+        mWindowMagnificationSizePrefs.saveSizeForCurrentDensity(new Size(width, height));
+
         // Sets the initial frame area for the mirror and place it to the given center on the
         // display.
         final int initX = centerX - width / 2;
@@ -742,12 +760,18 @@
         mMagnificationFrame.set(initX, initY, initX + width, initY + height);
     }
 
-    private Size getDefaultWindowSizeWithWindowBounds(Rect windowBounds) {
-        int initSize = Math.min(windowBounds.width(), windowBounds.height()) / 2;
-        initSize = Math.min(mResources.getDimensionPixelSize(R.dimen.magnification_max_frame_size),
-                initSize);
-        initSize += 2 * mMirrorSurfaceMargin;
-        return new Size(initSize, initSize);
+    private Size restoreMagnificationWindowFrameSizeIfPossible() {
+        if (!mWindowMagnificationSizePrefs.isPreferenceSavedForCurrentDensity()) {
+            return getDefaultMagnificationWindowFrameSize();
+        }
+
+        return mWindowMagnificationSizePrefs.getSizeForCurrentDensity();
+    }
+
+    private Size getDefaultMagnificationWindowFrameSize() {
+        final int defaultSize = getMagnificationWindowSizeFromIndex(MagnificationSize.MEDIUM)
+                - 2 * mMirrorSurfaceMargin;
+        return new Size(defaultSize, defaultSize);
     }
 
     /**
@@ -1225,6 +1249,12 @@
         return isActivated() ? mMagnificationFrame.exactCenterY() : Float.NaN;
     }
 
+
+    @VisibleForTesting
+    boolean isDiagonalScrollingEnabled() {
+        return mAllowDiagonalScrolling;
+    }
+
     private CharSequence formatStateDescription(float scale) {
         // Cache the locale-appropriate NumberFormat.  Configuration locale is guaranteed
         // non-null, so the first time this is called we will always get the appropriate
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java
index 6ec5320..7c11311 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSettings.java
@@ -101,7 +101,9 @@
     private Button mEditButton;
     private ImageButton mFullScreenButton;
     private int mLastSelectedButtonIndex = MagnificationSize.NONE;
+
     private boolean mAllowDiagonalScrolling = false;
+
     /**
      * Amount by which magnification scale changes compared to seekbar in settings.
      * magnitude = 10 means, for every 1 scale increase, 10 progress increase in seekbar.
@@ -141,7 +143,7 @@
         mSecureSettings = secureSettings;
 
         mAllowDiagonalScrolling = mSecureSettings.getIntForUser(
-                Settings.Secure.ACCESSIBILITY_ALLOW_DIAGONAL_SCROLLING, 0,
+                Settings.Secure.ACCESSIBILITY_ALLOW_DIAGONAL_SCROLLING, 1,
                 UserHandle.USER_CURRENT) == 1;
 
         mParams = createLayoutParams(context);
@@ -368,7 +370,7 @@
     private void showSettingPanel(boolean resetPosition) {
         if (!mIsVisible) {
             updateUIControlsIfNeeded();
-            setScaleSeekbar(mScale);
+            setScaleSeekbar(getMagnificationScale());
             if (resetPosition) {
                 mDraggableWindowBounds.set(getDraggableWindowBounds());
                 mParams.x = mDraggableWindowBounds.right;
@@ -420,6 +422,11 @@
                 UserHandle.USER_CURRENT);
     }
 
+    @VisibleForTesting
+    boolean isDiagonalScrollingEnabled() {
+        return mAllowDiagonalScrolling;
+    }
+
     /**
      * Only called from outside to notify the controlling magnifier scale changed
      *
@@ -433,6 +440,10 @@
         }
     }
 
+    private float getMagnificationScale() {
+        return mScale;
+    }
+
     private void updateUIControlsIfNeeded() {
         int capability = getMagnificationCapability();
         int selectedButtonIndex = mLastSelectedButtonIndex;
@@ -628,7 +639,7 @@
 
     private void toggleDiagonalScrolling() {
         boolean enabled = mSecureSettings.getIntForUser(
-                Settings.Secure.ACCESSIBILITY_ALLOW_DIAGONAL_SCROLLING, 0,
+                Settings.Secure.ACCESSIBILITY_ALLOW_DIAGONAL_SCROLLING, 1,
                 UserHandle.USER_CURRENT) == 1;
         setDiagonalScrolling(!enabled);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSizePrefs.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSizePrefs.java
new file mode 100644
index 0000000..4d7ad264
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationSizePrefs.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.accessibility;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.util.Size;
+
+/**
+ * Class to handle SharedPreference for window magnification size.
+ */
+public final class WindowMagnificationSizePrefs {
+
+    private static final String WINDOW_MAGNIFICATION_PREFERENCES =
+            "window_magnification_preferences";
+    Context mContext;
+    SharedPreferences mWindowMagnificationSizePreferences;
+
+    public WindowMagnificationSizePrefs(Context context) {
+        mContext = context;
+        mWindowMagnificationSizePreferences = mContext
+                .getSharedPreferences(WINDOW_MAGNIFICATION_PREFERENCES, Context.MODE_PRIVATE);
+    }
+
+    /**
+     * Uses smallest screen width DP as the key for preference.
+     */
+    private String getKey() {
+        return String.valueOf(
+                mContext.getResources().getConfiguration().smallestScreenWidthDp);
+    }
+
+    /**
+     * Saves the window frame size for current screen density.
+     */
+    public void saveSizeForCurrentDensity(Size size) {
+        mWindowMagnificationSizePreferences.edit()
+                .putString(getKey(), size.toString()).apply();
+    }
+
+    /**
+     * Check if there is a preference saved for current screen density.
+     *
+     * @return true if there is a preference saved for current screen density, false if it is unset.
+     */
+    public boolean isPreferenceSavedForCurrentDensity() {
+        return mWindowMagnificationSizePreferences.contains(getKey());
+    }
+
+    /**
+     * Gets the size preference for current screen density.
+     */
+    public Size getSizeForCurrentDensity() {
+        return Size.parseSize(mWindowMagnificationSizePreferences.getString(getKey(), null));
+    }
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/aconfig/AConfigModule.kt b/packages/SystemUI/src/com/android/systemui/aconfig/AConfigModule.kt
new file mode 100644
index 0000000..251a699
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/aconfig/AConfigModule.kt
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.aconfig
+
+import com.android.systemui.dagger.SysUISingleton
+import dagger.Module
+import dagger.Provides
+
+@Module
+abstract class AConfigModule {
+    @Module
+    companion object {
+        @Provides
+        @SysUISingleton
+        fun providesImpl(): FeatureFlags {
+            return FeatureFlagsImpl()
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/aconfig/systemui.aconfig b/packages/SystemUI/src/com/android/systemui/aconfig/systemui.aconfig
new file mode 100644
index 0000000..2d6e257
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/aconfig/systemui.aconfig
@@ -0,0 +1,8 @@
+package: "com.android.systemui.aconfig"
+
+flag {
+    name: "example_flag"
+    namespace: "systemui"
+    description: "An Example Flag"
+    bug: "292511372"
+}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java
index c2b9102..dc874d8 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java
@@ -21,8 +21,6 @@
 import static com.android.systemui.biometrics.BiometricNotificationBroadcastReceiver.ACTION_SHOW_FACE_REENROLL_DIALOG;
 import static com.android.systemui.biometrics.BiometricNotificationBroadcastReceiver.ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG;
 
-import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.app.Notification;
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
@@ -31,10 +29,8 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.hardware.biometrics.BiometricFaceConstants;
+import android.hardware.biometrics.BiometricFingerprintConstants;
 import android.hardware.biometrics.BiometricSourceType;
-import android.hardware.biometrics.BiometricStateListener;
-import android.hardware.face.FaceManager;
-import android.hardware.fingerprint.FingerprintManager;
 import android.os.Handler;
 import android.os.UserHandle;
 import android.provider.Settings;
@@ -47,8 +43,6 @@
 import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
 
-import java.util.Optional;
-
 import javax.inject.Inject;
 
 /**
@@ -72,9 +66,6 @@
     private final Handler mHandler;
     private final NotificationManager mNotificationManager;
     private final BiometricNotificationBroadcastReceiver mBroadcastReceiver;
-    private final FingerprintReEnrollNotification mFingerprintReEnrollNotification;
-    private final FingerprintManager mFingerprintManager;
-    private final FaceManager mFaceManager;
     private NotificationChannel mNotificationChannel;
     private boolean mFaceNotificationQueued;
     private boolean mFingerprintNotificationQueued;
@@ -111,53 +102,26 @@
                         Settings.Secure.putIntForUser(mContext.getContentResolver(),
                                 Settings.Secure.FACE_UNLOCK_RE_ENROLL, REENROLL_REQUIRED,
                                 UserHandle.USER_CURRENT);
-                    }
-                }
-
-                @Override
-                public void onBiometricHelp(int msgId, String helpString,
-                        BiometricSourceType biometricSourceType) {
-                    if (biometricSourceType == BiometricSourceType.FINGERPRINT
-                            && mFingerprintReEnrollNotification.isFingerprintReEnrollRequired(
-                                    msgId)) {
+                    } else if (msgId == BiometricFingerprintConstants.BIOMETRIC_ERROR_RE_ENROLL
+                            && biometricSourceType == BiometricSourceType.FINGERPRINT) {
                         mFingerprintReenrollRequired = true;
                     }
                 }
             };
 
-    private final BiometricStateListener mFaceStateListener = new BiometricStateListener() {
-        @Override
-        public void onEnrollmentsChanged(int userId, int sensorId, boolean hasEnrollments) {
-            mNotificationManager.cancelAsUser(TAG, FACE_NOTIFICATION_ID, UserHandle.CURRENT);
-        }
-    };
-
-    private final BiometricStateListener mFingerprintStateListener = new BiometricStateListener() {
-        @Override
-        public void onEnrollmentsChanged(int userId, int sensorId, boolean hasEnrollments) {
-            mNotificationManager.cancelAsUser(TAG, FINGERPRINT_NOTIFICATION_ID, UserHandle.CURRENT);
-        }
-    };
 
     @Inject
-    public BiometricNotificationService(@NonNull Context context,
-            @NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
-            @NonNull KeyguardStateController keyguardStateController,
-            @NonNull Handler handler, @NonNull NotificationManager notificationManager,
-            @NonNull BiometricNotificationBroadcastReceiver biometricNotificationBroadcastReceiver,
-            @NonNull Optional<FingerprintReEnrollNotification> fingerprintReEnrollNotification,
-            @Nullable FingerprintManager fingerprintManager,
-            @Nullable FaceManager faceManager) {
+    public BiometricNotificationService(Context context,
+            KeyguardUpdateMonitor keyguardUpdateMonitor,
+            KeyguardStateController keyguardStateController,
+            Handler handler, NotificationManager notificationManager,
+            BiometricNotificationBroadcastReceiver biometricNotificationBroadcastReceiver) {
         mContext = context;
         mKeyguardUpdateMonitor = keyguardUpdateMonitor;
         mKeyguardStateController = keyguardStateController;
         mHandler = handler;
         mNotificationManager = notificationManager;
         mBroadcastReceiver = biometricNotificationBroadcastReceiver;
-        mFingerprintReEnrollNotification = fingerprintReEnrollNotification.orElse(
-                new FingerprintReEnrollNotificationImpl());
-        mFingerprintManager = fingerprintManager;
-        mFaceManager = faceManager;
     }
 
     @Override
@@ -171,19 +135,12 @@
         intentFilter.addAction(ACTION_SHOW_FACE_REENROLL_DIALOG);
         mContext.registerReceiver(mBroadcastReceiver, intentFilter,
                 Context.RECEIVER_EXPORTED_UNAUDITED);
-        if (mFingerprintManager != null) {
-            mFingerprintManager.registerBiometricStateListener(mFingerprintStateListener);
-        }
-        if (mFaceManager != null) {
-            mFaceManager.registerBiometricStateListener(mFaceStateListener);
-        }
         Settings.Secure.putIntForUser(mContext.getContentResolver(),
                 Settings.Secure.FACE_UNLOCK_RE_ENROLL, REENROLL_NOT_REQUIRED,
                 UserHandle.USER_CURRENT);
     }
 
     private void queueFaceReenrollNotification() {
-        Log.d(TAG, "Face re-enroll notification queued.");
         mFaceNotificationQueued = true;
         final String title = mContext.getString(R.string.face_re_enroll_notification_title);
         final String content = mContext.getString(
@@ -196,7 +153,6 @@
     }
 
     private void queueFingerprintReenrollNotification() {
-        Log.d(TAG, "Fingerprint re-enroll notification queued.");
         mFingerprintNotificationQueued = true;
         final String title = mContext.getString(R.string.fingerprint_re_enroll_notification_title);
         final String content = mContext.getString(
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintReEnrollNotification.java b/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintReEnrollNotification.java
deleted file mode 100644
index ca94e99..0000000
--- a/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintReEnrollNotification.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.biometrics;
-
-/**
- * Checks if the fingerprint HAL has sent a re-enrollment request.
- */
-public interface FingerprintReEnrollNotification {
-    /** Returns true if msgId corresponds to FINGERPRINT_ACQUIRED_RE_ENROLL. */
-    boolean isFingerprintReEnrollRequired(int msgId);
-}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintReEnrollNotificationImpl.java b/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintReEnrollNotificationImpl.java
deleted file mode 100644
index 1f86bc6..0000000
--- a/packages/SystemUI/src/com/android/systemui/biometrics/FingerprintReEnrollNotificationImpl.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.biometrics;
-
-import android.hardware.biometrics.BiometricFingerprintConstants;
-
-/**
- * Checks if the fingerprint HAL has sent a re-enrollment request.
- */
-public class FingerprintReEnrollNotificationImpl implements FingerprintReEnrollNotification{
-    @Override
-    public boolean isFingerprintReEnrollRequired(int msgId) {
-        return msgId == BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_RE_ENROLL;
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/CredentialPasswordView.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/CredentialPasswordView.kt
index a3f34ce..eca0ada 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/CredentialPasswordView.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/CredentialPasswordView.kt
@@ -53,7 +53,6 @@
         subtitleView = requireViewById(R.id.subtitle)
         descriptionView = requireViewById(R.id.description)
         iconView = requireViewById(R.id.icon)
-        subtitleView = requireViewById(R.id.subtitle)
         passwordField = requireViewById(R.id.lockPassword)
         credentialHeader = requireViewById(R.id.auth_credential_header)
         credentialInput = requireViewById(R.id.auth_credential_input)
diff --git a/packages/SystemUI/src/com/android/systemui/broadcast/BroadcastDispatcher.kt b/packages/SystemUI/src/com/android/systemui/broadcast/BroadcastDispatcher.kt
index a0a892d..183a3cc 100644
--- a/packages/SystemUI/src/com/android/systemui/broadcast/BroadcastDispatcher.kt
+++ b/packages/SystemUI/src/com/android/systemui/broadcast/BroadcastDispatcher.kt
@@ -87,7 +87,7 @@
     private val receiversByUser = SparseArray<UserBroadcastDispatcher>(20)
 
     fun initialize() {
-        dumpManager.registerDumpable(javaClass.name, this)
+        dumpManager.registerDumpable(this)
     }
 
     /**
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 e8c97bf..7db5968 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
@@ -227,7 +227,7 @@
     }
 
     init {
-        dumpManager.registerDumpable(javaClass.name, this)
+        dumpManager.registerDumpable(this)
         resetFavorites()
         userChanging = false
         context.registerReceiver(
diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/PackageUpdateMonitor.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/PackageUpdateMonitor.kt
index 1973b62..840225e 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/PackageUpdateMonitor.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/PackageUpdateMonitor.kt
@@ -52,7 +52,7 @@
     /** Start monitoring for package updates. No-op if already monitoring. */
     fun startMonitoring() {
         if (monitoring.compareAndSet(/* expected */ false, /* new */ true)) {
-            register(context, user, false, bgHandler)
+            register(context, user, bgHandler)
         }
     }
 
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 b0491ce..3cdf9ab 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
@@ -166,7 +166,7 @@
         get() = !hidden
 
     init {
-        dumpManager.registerDumpable(javaClass.name, this)
+        dumpManager.registerDumpable(this)
     }
 
     private fun createCallback(
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java b/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java
index 8d5a2dd..32e40c9 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java
@@ -20,7 +20,6 @@
 
 import com.android.systemui.ForegroundServicesDialog;
 import com.android.systemui.contrast.ContrastDialogActivity;
-import com.android.systemui.hdmi.HdmiCecSetMenuLanguageActivity;
 import com.android.systemui.keyguard.WorkLockActivity;
 import com.android.systemui.people.PeopleSpaceActivity;
 import com.android.systemui.people.widget.LaunchConversationActivity;
@@ -28,10 +27,7 @@
 import com.android.systemui.screenshot.appclips.AppClipsActivity;
 import com.android.systemui.screenshot.appclips.AppClipsTrampolineActivity;
 import com.android.systemui.sensorprivacy.SensorUseStartedActivity;
-import com.android.systemui.sensorprivacy.television.TvSensorPrivacyChangedActivity;
-import com.android.systemui.sensorprivacy.television.TvUnblockSensorActivity;
 import com.android.systemui.settings.brightness.BrightnessDialog;
-import com.android.systemui.statusbar.tv.notifications.TvNotificationPanelActivity;
 import com.android.systemui.telephony.ui.activity.SwitchToManagedProfileForCallActivity;
 import com.android.systemui.tuner.TunerActivity;
 import com.android.systemui.usb.UsbAccessoryUriActivity;
@@ -118,12 +114,6 @@
     @ClassKey(CreateUserActivity.class)
     public abstract Activity bindCreateUserActivity(CreateUserActivity activity);
 
-    /** Inject into TvNotificationPanelActivity. */
-    @Binds
-    @IntoMap
-    @ClassKey(TvNotificationPanelActivity.class)
-    public abstract Activity bindTvNotificationPanelActivity(TvNotificationPanelActivity activity);
-
     /** Inject into PeopleSpaceActivity. */
     @Binds
     @IntoMap
@@ -160,25 +150,7 @@
     @ClassKey(SensorUseStartedActivity.class)
     public abstract Activity bindSensorUseStartedActivity(SensorUseStartedActivity activity);
 
-    /** Inject into TvUnblockSensorActivity. */
-    @Binds
-    @IntoMap
-    @ClassKey(TvUnblockSensorActivity.class)
-    public abstract Activity bindTvUnblockSensorActivity(TvUnblockSensorActivity activity);
 
-    /** Inject into HdmiCecSetMenuLanguageActivity. */
-    @Binds
-    @IntoMap
-    @ClassKey(HdmiCecSetMenuLanguageActivity.class)
-    public abstract Activity bindHdmiCecSetMenuLanguageActivity(
-            HdmiCecSetMenuLanguageActivity activity);
-
-    /** Inject into TvSensorPrivacyChangedActivity. */
-    @Binds
-    @IntoMap
-    @ClassKey(TvSensorPrivacyChangedActivity.class)
-    public abstract Activity bindTvSensorPrivacyChangedActivity(
-            TvSensorPrivacyChangedActivity activity);
 
     /** Inject into SwitchToManagedProfileForCallActivity. */
     @Binds
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
index 0dcba50..c9517c2 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
@@ -646,6 +646,7 @@
 
     @Provides
     @Singleton
+    @Nullable
     static SmartspaceManager provideSmartspaceManager(Context context) {
         return context.getSystemService(SmartspaceManager.class);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
index f73a602..970d00b 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
@@ -29,12 +29,12 @@
 import com.android.systemui.BootCompleteCacheImpl;
 import com.android.systemui.accessibility.AccessibilityModule;
 import com.android.systemui.accessibility.data.repository.AccessibilityRepositoryModule;
+import com.android.systemui.aconfig.AConfigModule;
 import com.android.systemui.appops.dagger.AppOpsModule;
 import com.android.systemui.assist.AssistModule;
 import com.android.systemui.authentication.AuthenticationModule;
 import com.android.systemui.biometrics.AlternateUdfpsTouchProvider;
 import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider;
-import com.android.systemui.biometrics.FingerprintReEnrollNotification;
 import com.android.systemui.biometrics.UdfpsDisplayModeProvider;
 import com.android.systemui.biometrics.dagger.BiometricsModule;
 import com.android.systemui.biometrics.dagger.UdfpsModule;
@@ -157,6 +157,7 @@
 @Module(includes = {
             AccessibilityModule.class,
             AccessibilityRepositoryModule.class,
+            AConfigModule.class,
             AppOpsModule.class,
             AssistModule.class,
             AuthenticationModule.class,
@@ -300,9 +301,6 @@
     @BindsOptionalOf
     abstract SystemStatusAnimationScheduler optionalSystemStatusAnimationScheduler();
 
-    @BindsOptionalOf
-    abstract FingerprintReEnrollNotification optionalFingerprintReEnrollNotification();
-
     @SysUISingleton
     @Binds
     abstract SystemClock bindSystemClock(SystemClockImpl systemClock);
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/WMComponent.java b/packages/SystemUI/src/com/android/systemui/dagger/WMComponent.java
index d70c57f..dfec771 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/WMComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/WMComponent.java
@@ -21,11 +21,9 @@
 import androidx.annotation.Nullable;
 
 import com.android.systemui.SystemUIInitializer;
-import com.android.systemui.tv.TvWMComponent;
 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.dagger.TvWMShellModule;
 import com.android.wm.shell.dagger.WMShellModule;
 import com.android.wm.shell.dagger.WMSingleton;
 import com.android.wm.shell.desktopmode.DesktopMode;
@@ -52,7 +50,7 @@
  * provided by its particular device/form-factor SystemUI implementation.
  *
  * ie. {@link WMComponent} includes {@link WMShellModule}
- *     and {@link TvWMComponent} includes {@link TvWMShellModule}
+ * and {@code TvWMComponent} includes {@link com.android.wm.shell.dagger.TvWMShellModule}
  */
 @WMSingleton
 @Subcomponent(modules = {WMShellModule.class})
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/smartspace/DreamSmartspaceController.kt b/packages/SystemUI/src/com/android/systemui/dreams/smartspace/DreamSmartspaceController.kt
index 4b297a3..ca4ef0d 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/smartspace/DreamSmartspaceController.kt
+++ b/packages/SystemUI/src/com/android/systemui/dreams/smartspace/DreamSmartspaceController.kt
@@ -50,7 +50,7 @@
 @SysUISingleton
 class DreamSmartspaceController @Inject constructor(
     private val context: Context,
-    private val smartspaceManager: SmartspaceManager,
+    private val smartspaceManager: SmartspaceManager?,
     private val execution: Execution,
     @Main private val uiExecutor: Executor,
     private val smartspaceViewComponentFactory: SmartspaceViewComponent.Factory,
@@ -184,6 +184,9 @@
     }
 
     private fun connectSession() {
+        if (smartspaceManager == null) {
+            return
+        }
         if (plugin == null && weatherPlugin == null) {
             return
         }
diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
index 0e2e0c5..14563b7 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
+++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt
@@ -285,6 +285,19 @@
                 teamfood = true
             )
 
+    /**
+     * TODO(b/278086361): Tracking bug
+     * Complete rewrite of the interactions between System UI and Window Manager involving keyguard
+     * state. When enabled, calls to ActivityTaskManagerService from System UI will exclusively
+     * occur from [WmLockscreenVisibilityManager] rather than the legacy KeyguardViewMediator.
+     *
+     * This flag is under development; some types of unlock may not animate properly if you enable
+     * it.
+     */
+    @JvmField
+    val KEYGUARD_WM_STATE_REFACTOR: UnreleasedFlag =
+            unreleasedFlag("keyguard_wm_state_refactor")
+
     /** Stop running face auth when the display state changes to OFF. */
     // TODO(b/294221702): Tracking bug.
     @JvmField val STOP_FACE_AUTH_ON_DISPLAY_OFF = resourceBooleanFlag(
@@ -721,7 +734,7 @@
     // TODO(b/285059790) : Tracking Bug
     @JvmField
     val LOCKSCREEN_WALLPAPER_DREAM_ENABLED =
-        unreleasedFlag(name = "enable_lockscreen_wallpaper_dream")
+        unreleasedFlag(name = "enable_lockscreen_wallpaper_dream", teamfood = true)
 
     // TODO(b/283084712): Tracking Bug
     @JvmField val IMPROVED_HUN_ANIMATIONS = unreleasedFlag("improved_hun_animations")
diff --git a/packages/SystemUI/src/com/android/systemui/hdmi/HdmiCecSetMenuLanguageActivity.java b/packages/SystemUI/src/com/android/systemui/hdmi/HdmiCecSetMenuLanguageActivity.java
deleted file mode 100644
index b304c3c..0000000
--- a/packages/SystemUI/src/com/android/systemui/hdmi/HdmiCecSetMenuLanguageActivity.java
+++ /dev/null
@@ -1,98 +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.hdmi;
-
-import android.hardware.hdmi.HdmiControlManager;
-import android.os.Bundle;
-import android.view.View;
-import android.view.WindowManager;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.systemui.R;
-import com.android.systemui.tv.TvBottomSheetActivity;
-
-import javax.inject.Inject;
-
-/**
- * Confirmation dialog shown when Set Menu Language CEC message was received.
- */
-public class HdmiCecSetMenuLanguageActivity extends TvBottomSheetActivity
-        implements View.OnClickListener {
-    private static final String TAG = HdmiCecSetMenuLanguageActivity.class.getSimpleName();
-
-    private final HdmiCecSetMenuLanguageHelper mHdmiCecSetMenuLanguageHelper;
-
-    @Inject
-    public HdmiCecSetMenuLanguageActivity(
-            HdmiCecSetMenuLanguageHelper hdmiCecSetMenuLanguageHelper) {
-        mHdmiCecSetMenuLanguageHelper = hdmiCecSetMenuLanguageHelper;
-    }
-
-    @Override
-    public final void onCreate(Bundle b) {
-        super.onCreate(b);
-        getWindow().addPrivateFlags(
-                WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
-        String languageTag = getIntent().getStringExtra(HdmiControlManager.EXTRA_LOCALE);
-        mHdmiCecSetMenuLanguageHelper.setLocale(languageTag);
-        if (mHdmiCecSetMenuLanguageHelper.isLocaleDenylisted()) {
-            finish();
-        }
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        CharSequence title = getString(R.string.hdmi_cec_set_menu_language_title,
-                mHdmiCecSetMenuLanguageHelper.getLocale().getDisplayLanguage());
-        CharSequence text = getString(R.string.hdmi_cec_set_menu_language_description);
-        initUI(title, text);
-    }
-
-    @Override
-    public void onClick(View v) {
-        if (v.getId() == R.id.bottom_sheet_positive_button) {
-            mHdmiCecSetMenuLanguageHelper.acceptLocale();
-        } else {
-            mHdmiCecSetMenuLanguageHelper.declineLocale();
-        }
-        finish();
-    }
-
-    void initUI(CharSequence title, CharSequence text) {
-        TextView titleTextView = findViewById(R.id.bottom_sheet_title);
-        TextView contentTextView = findViewById(R.id.bottom_sheet_body);
-        ImageView icon = findViewById(R.id.bottom_sheet_icon);
-        ImageView secondIcon = findViewById(R.id.bottom_sheet_second_icon);
-        Button okButton = findViewById(R.id.bottom_sheet_positive_button);
-        Button cancelButton = findViewById(R.id.bottom_sheet_negative_button);
-
-        titleTextView.setText(title);
-        contentTextView.setText(text);
-        icon.setImageResource(com.android.internal.R.drawable.ic_settings_language);
-        secondIcon.setVisibility(View.GONE);
-
-        okButton.setText(R.string.hdmi_cec_set_menu_language_accept);
-        okButton.setOnClickListener(this);
-
-        cancelButton.setText(R.string.hdmi_cec_set_menu_language_decline);
-        cancelButton.setOnClickListener(this);
-        cancelButton.requestFocus();
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/hdmi/HdmiCecSetMenuLanguageHelper.java b/packages/SystemUI/src/com/android/systemui/hdmi/HdmiCecSetMenuLanguageHelper.java
deleted file mode 100644
index 1f61647..0000000
--- a/packages/SystemUI/src/com/android/systemui/hdmi/HdmiCecSetMenuLanguageHelper.java
+++ /dev/null
@@ -1,98 +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.hdmi;
-
-import android.os.UserHandle;
-import android.provider.Settings;
-
-import com.android.internal.app.LocalePicker;
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.dagger.qualifiers.Background;
-import com.android.systemui.util.settings.SecureSettings;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Locale;
-import java.util.concurrent.Executor;
-
-import javax.inject.Inject;
-
-/**
- * Helper class to separate model and view for system language change initiated by HDMI CEC.
- */
-@SysUISingleton
-public class HdmiCecSetMenuLanguageHelper {
-    private static final String TAG = HdmiCecSetMenuLanguageHelper.class.getSimpleName();
-    private static final String SEPARATOR = ",";
-
-    private final Executor mBackgroundExecutor;
-    private final SecureSettings mSecureSettings;
-
-    private Locale mLocale;
-    private HashSet<String> mDenylist;
-
-    @Inject
-    public HdmiCecSetMenuLanguageHelper(@Background Executor executor,
-            SecureSettings secureSettings) {
-        mBackgroundExecutor = executor;
-        mSecureSettings = secureSettings;
-        String denylist = mSecureSettings.getStringForUser(
-                Settings.Secure.HDMI_CEC_SET_MENU_LANGUAGE_DENYLIST, UserHandle.USER_CURRENT);
-        mDenylist = new HashSet<>(denylist == null
-                ? Collections.EMPTY_SET
-                : Arrays.asList(denylist.split(SEPARATOR)));
-    }
-
-    /**
-     * Set internal locale based on given language tag.
-     */
-    public void setLocale(String languageTag) {
-        mLocale = Locale.forLanguageTag(languageTag);
-    }
-
-    /**
-     * Returns the locale from {@code <Set Menu Language>} CEC message.
-     */
-    public Locale getLocale() {
-        return mLocale;
-    }
-
-    /**
-     * Returns whether the locale from {@code <Set Menu Language>} CEC message was already
-     * denylisted.
-     */
-    public boolean isLocaleDenylisted() {
-        return mDenylist.contains(mLocale.toLanguageTag());
-    }
-
-    /**
-     * Accepts the new locale and updates system language.
-     */
-    public void acceptLocale() {
-        mBackgroundExecutor.execute(() -> LocalePicker.updateLocale(mLocale));
-    }
-
-    /**
-     * Declines the locale and puts it on the denylist.
-     */
-    public void declineLocale() {
-        mDenylist.add(mLocale.toLanguageTag());
-        mSecureSettings.putStringForUser(Settings.Secure.HDMI_CEC_SET_MENU_LANGUAGE_DENYLIST,
-                String.join(SEPARATOR, mDenylist), UserHandle.USER_CURRENT);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardLifecyclesDispatcher.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardLifecyclesDispatcher.java
index 67c85bd..2560fa7 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardLifecyclesDispatcher.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardLifecyclesDispatcher.java
@@ -37,15 +37,15 @@
  */
 @SysUISingleton
 public class KeyguardLifecyclesDispatcher {
-    static final int SCREEN_TURNING_ON = 0;
-    static final int SCREEN_TURNED_ON = 1;
-    static final int SCREEN_TURNING_OFF = 2;
-    static final int SCREEN_TURNED_OFF = 3;
+    public static final int SCREEN_TURNING_ON = 0;
+    public static final int SCREEN_TURNED_ON = 1;
+    public static final int SCREEN_TURNING_OFF = 2;
+    public static final int SCREEN_TURNED_OFF = 3;
 
-    static final int STARTED_WAKING_UP = 4;
-    static final int FINISHED_WAKING_UP = 5;
-    static final int STARTED_GOING_TO_SLEEP = 6;
-    static final int FINISHED_GOING_TO_SLEEP = 7;
+    public static final int STARTED_WAKING_UP = 4;
+    public static final int FINISHED_WAKING_UP = 5;
+    public static final int STARTED_GOING_TO_SLEEP = 6;
+    public static final int FINISHED_GOING_TO_SLEEP = 7;
 
     @IntDef({
             SCREEN_TURNING_ON,
@@ -85,7 +85,7 @@
         mHandler = new KeyguardLifecycleHandler(mainLooper, screenLifecycle, wakefulnessLifecycle);
     }
 
-    void dispatch(@KeyguardLifecycleMessageType int what) {
+    protected void dispatch(@KeyguardLifecycleMessageType int what) {
         mHandler.obtainMessage(what).sendToTarget();
     }
 
@@ -94,7 +94,7 @@
      * @param pmReason Reason this message was triggered - this should be a value from either
      * {@link PowerManager.WakeReason} or {@link PowerManager.GoToSleepReason}.
      */
-    void dispatch(@KeyguardLifecycleMessageType int what, int pmReason) {
+    protected void dispatch(@KeyguardLifecycleMessageType int what, int pmReason) {
         final Message message = mHandler.obtainMessage(what);
         message.arg1 = pmReason;
         message.sendToTarget();
@@ -104,7 +104,7 @@
      * @param what Message to send.
      * @param object Object to send with the message
      */
-    void dispatch(@KeyguardLifecycleMessageType int what, Object object) {
+    protected void dispatch(@KeyguardLifecycleMessageType int what, Object object) {
         mHandler.obtainMessage(what, object).sendToTarget();
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
index e6053fb..9d2771e 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
@@ -73,6 +73,14 @@
 import com.android.internal.policy.IKeyguardStateCallback;
 import com.android.keyguard.mediator.ScreenOnCoordinator;
 import com.android.systemui.SystemUIApplication;
+import com.android.systemui.dagger.qualifiers.Application;
+import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.flags.Flags;
+import com.android.systemui.keyguard.ui.binder.KeyguardSurfaceBehindParamsApplier;
+import com.android.systemui.keyguard.ui.binder.KeyguardSurfaceBehindViewBinder;
+import com.android.systemui.keyguard.ui.binder.WindowManagerLockscreenVisibilityViewBinder;
+import com.android.systemui.keyguard.ui.viewmodel.KeyguardSurfaceBehindViewModel;
+import com.android.systemui.keyguard.ui.viewmodel.WindowManagerLockscreenVisibilityViewModel;
 import com.android.systemui.settings.DisplayTracker;
 import com.android.wm.shell.transition.ShellTransitions;
 import com.android.wm.shell.transition.Transitions;
@@ -85,10 +93,13 @@
 
 import javax.inject.Inject;
 
+import kotlinx.coroutines.CoroutineScope;
+
 public class KeyguardService extends Service {
     static final String TAG = "KeyguardService";
     static final String PERMISSION = android.Manifest.permission.CONTROL_KEYGUARD;
 
+    private final FeatureFlags mFlags;
     private final KeyguardViewMediator mKeyguardViewMediator;
     private final KeyguardLifecyclesDispatcher mKeyguardLifecyclesDispatcher;
     private final ScreenOnCoordinator mScreenOnCoordinator;
@@ -291,13 +302,33 @@
                            KeyguardLifecyclesDispatcher keyguardLifecyclesDispatcher,
                            ScreenOnCoordinator screenOnCoordinator,
                            ShellTransitions shellTransitions,
-                           DisplayTracker displayTracker) {
+                           DisplayTracker displayTracker,
+                           WindowManagerLockscreenVisibilityViewModel
+                                   wmLockscreenVisibilityViewModel,
+                           WindowManagerLockscreenVisibilityManager wmLockscreenVisibilityManager,
+                           KeyguardSurfaceBehindViewModel keyguardSurfaceBehindViewModel,
+                           KeyguardSurfaceBehindParamsApplier keyguardSurfaceBehindAnimator,
+                           @Application CoroutineScope scope,
+                           FeatureFlags featureFlags) {
         super();
         mKeyguardViewMediator = keyguardViewMediator;
         mKeyguardLifecyclesDispatcher = keyguardLifecyclesDispatcher;
         mScreenOnCoordinator = screenOnCoordinator;
         mShellTransitions = shellTransitions;
         mDisplayTracker = displayTracker;
+        mFlags = featureFlags;
+
+        if (mFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+            WindowManagerLockscreenVisibilityViewBinder.bind(
+                    wmLockscreenVisibilityViewModel,
+                    wmLockscreenVisibilityManager,
+                    scope);
+
+            KeyguardSurfaceBehindViewBinder.bind(
+                    keyguardSurfaceBehindViewModel,
+                    keyguardSurfaceBehindAnimator,
+                    scope);
+        }
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt
index 9a09df4..ff74050 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt
@@ -403,7 +403,9 @@
      * the device.
      */
     fun canPerformInWindowLauncherAnimations(): Boolean {
-        return isNexusLauncherUnderneath() &&
+        // TODO(b/278086361): Refactor in-window animations.
+        return !featureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR) &&
+                isNexusLauncherUnderneath() &&
                 // If the launcher is underneath, but we're about to launch an activity, don't do
                 // the animations since they won't be visible.
                 !notificationShadeWindowController.isLaunchingActivity &&
@@ -847,54 +849,57 @@
         }
 
         surfaceBehindRemoteAnimationTargets?.forEach { surfaceBehindRemoteAnimationTarget ->
-            val surfaceHeight: Int = surfaceBehindRemoteAnimationTarget.screenSpaceBounds.height()
+            if (!featureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                val surfaceHeight: Int =
+                        surfaceBehindRemoteAnimationTarget.screenSpaceBounds.height()
 
-            var scaleFactor = (SURFACE_BEHIND_START_SCALE_FACTOR +
-                    (1f - SURFACE_BEHIND_START_SCALE_FACTOR) *
-                    MathUtils.clamp(amount, 0f, 1f))
+                var scaleFactor = (SURFACE_BEHIND_START_SCALE_FACTOR +
+                        (1f - SURFACE_BEHIND_START_SCALE_FACTOR) *
+                        MathUtils.clamp(amount, 0f, 1f))
 
-            // If we're dismissing via swipe to the Launcher, we'll play in-window scale animations,
-            // so don't also scale the window.
-            if (keyguardStateController.isDismissingFromSwipe &&
-                    willUnlockWithInWindowLauncherAnimations) {
-                scaleFactor = 1f
-            }
-
-            // Translate up from the bottom.
-            surfaceBehindMatrix.setTranslate(
-                    surfaceBehindRemoteAnimationTarget.screenSpaceBounds.left.toFloat(),
-                    surfaceBehindRemoteAnimationTarget.screenSpaceBounds.top.toFloat() +
-                            surfaceHeight * SURFACE_BEHIND_START_TRANSLATION_Y * (1f - amount)
-            )
-
-            // Scale up from a point at the center-bottom of the surface.
-            surfaceBehindMatrix.postScale(
-                    scaleFactor,
-                    scaleFactor,
-                    keyguardViewController.viewRootImpl.width / 2f,
-                    surfaceHeight * SURFACE_BEHIND_SCALE_PIVOT_Y
-            )
-
-            // 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()
+                // If we're dismissing via swipe to the Launcher, we'll play in-window scale
+                // animations, so don't also scale the window.
+                if (keyguardStateController.isDismissingFromSwipe &&
+                        willUnlockWithInWindowLauncherAnimations) {
+                    scaleFactor = 1f
                 }
-            } else {
-                applyParamsToSurface(
-                        SyncRtSurfaceTransactionApplier.SurfaceParams.Builder(
-                            surfaceBehindRemoteAnimationTarget.leash)
-                            .withMatrix(surfaceBehindMatrix)
-                            .withCornerRadius(roundedCornerRadius)
-                            .withAlpha(animationAlpha)
-                            .build()
+
+                // Translate up from the bottom.
+                surfaceBehindMatrix.setTranslate(
+                        surfaceBehindRemoteAnimationTarget.screenSpaceBounds.left.toFloat(),
+                        surfaceBehindRemoteAnimationTarget.screenSpaceBounds.top.toFloat() +
+                                surfaceHeight * SURFACE_BEHIND_START_TRANSLATION_Y * (1f - amount)
                 )
+
+                // Scale up from a point at the center-bottom of the surface.
+                surfaceBehindMatrix.postScale(
+                        scaleFactor,
+                        scaleFactor,
+                        keyguardViewController.viewRootImpl.width / 2f,
+                        surfaceHeight * SURFACE_BEHIND_SCALE_PIVOT_Y
+                )
+
+                // 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()
+                    )
+                }
             }
         }
 
@@ -983,10 +988,12 @@
         if (keyguardStateController.isShowing) {
             // Hide the keyguard, with no fade out since we animated it away during the unlock.
 
-            keyguardViewController.hide(
-                surfaceBehindRemoteAnimationStartTime,
-                0 /* fadeOutDuration */
-            )
+            if (!featureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                keyguardViewController.hide(
+                        surfaceBehindRemoteAnimationStartTime,
+                        0 /* fadeOutDuration */
+                )
+            }
         } else {
             Log.i(TAG, "#hideKeyguardViewAfterRemoteAnimation called when keyguard view is not " +
                     "showing. Ignoring...")
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index d2047d9..fd15853 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -44,9 +44,9 @@
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ValueAnimator;
-import android.app.ActivityTaskManager;
 import android.app.AlarmManager;
 import android.app.BroadcastOptions;
+import android.app.IActivityTaskManager;
 import android.app.PendingIntent;
 import android.app.StatusBarManager;
 import android.app.WallpaperManager;
@@ -171,8 +171,6 @@
 import com.android.systemui.wallpapers.data.repository.WallpaperRepository;
 import com.android.wm.shell.keyguard.KeyguardTransitions;
 
-import dagger.Lazy;
-
 import java.io.PrintWriter;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -182,6 +180,7 @@
 import java.util.concurrent.Executor;
 import java.util.function.Consumer;
 
+import dagger.Lazy;
 import kotlinx.coroutines.CoroutineDispatcher;
 
 /**
@@ -1035,12 +1034,19 @@
                 IRemoteAnimationFinishedCallback finishedCallback) {
             Trace.beginSection("mExitAnimationRunner.onAnimationStart#startKeyguardExitAnimation");
             startKeyguardExitAnimation(transit, apps, wallpapers, nonApps, finishedCallback);
+            if (mFeatureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                mWmLockscreenVisibilityManager.get().onKeyguardGoingAwayRemoteAnimationStart(
+                        transit, apps, wallpapers, nonApps, finishedCallback);
+            }
             Trace.endSection();
         }
 
         @Override // Binder interface
         public void onAnimationCancelled() {
             cancelKeyguardExitAnimation();
+            if (mFeatureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                mWmLockscreenVisibilityManager.get().onKeyguardGoingAwayRemoteAnimationCancelled();
+            }
         }
     };
 
@@ -1106,7 +1112,7 @@
 
                         mOccludeByDreamAnimator = ValueAnimator.ofFloat(0f, 1f);
                         mOccludeByDreamAnimator.setDuration(mDreamOpenAnimationDuration);
-                        mOccludeByDreamAnimator.setInterpolator(Interpolators.LINEAR);
+                        //mOccludeByDreamAnimator.setInterpolator(Interpolators.LINEAR);
                         mOccludeByDreamAnimator.addUpdateListener(
                                 animation -> {
                                     SyncRtSurfaceTransactionApplier.SurfaceParams.Builder
@@ -1326,6 +1332,7 @@
 
     private Lazy<ActivityLaunchAnimator> mActivityLaunchAnimator;
     private Lazy<ScrimController> mScrimControllerLazy;
+    private IActivityTaskManager mActivityTaskManagerService;
 
     private FeatureFlags mFeatureFlags;
     private final UiEventLogger mUiEventLogger;
@@ -1335,6 +1342,8 @@
             mDreamingToLockscreenTransitionViewModel;
     private RemoteAnimationTarget mRemoteAnimationTarget;
 
+    private Lazy<WindowManagerLockscreenVisibilityManager> mWmLockscreenVisibilityManager;
+
     /**
      * Injected constructor. See {@link KeyguardModule}.
      */
@@ -1371,13 +1380,15 @@
             Lazy<NotificationShadeWindowController> notificationShadeWindowControllerLazy,
             Lazy<ActivityLaunchAnimator> activityLaunchAnimator,
             Lazy<ScrimController> scrimControllerLazy,
+            IActivityTaskManager activityTaskManagerService,
             FeatureFlags featureFlags,
             SecureSettings secureSettings,
             SystemSettings systemSettings,
             SystemClock systemClock,
             @Main CoroutineDispatcher mainDispatcher,
             Lazy<DreamingToLockscreenTransitionViewModel> dreamingToLockscreenTransitionViewModel,
-            SystemPropertiesHelper systemPropertiesHelper) {
+            SystemPropertiesHelper systemPropertiesHelper,
+            Lazy<WindowManagerLockscreenVisibilityManager> wmLockscreenVisibilityManager) {
         mContext = context;
         mUserTracker = userTracker;
         mFalsingCollector = falsingCollector;
@@ -1399,7 +1410,7 @@
                 ServiceManager.getService(Context.STATUS_BAR_SERVICE));
         mKeyguardDisplayManager = keyguardDisplayManager;
         mShadeController = shadeControllerLazy;
-        dumpManager.registerDumpable(getClass().getName(), this);
+        dumpManager.registerDumpable(this);
         mDeviceConfig = deviceConfig;
         mScreenOnCoordinator = screenOnCoordinator;
         mKeyguardTransitions = keyguardTransitions;
@@ -1432,6 +1443,7 @@
 
         mActivityLaunchAnimator = activityLaunchAnimator;
         mScrimControllerLazy = scrimControllerLazy;
+        mActivityTaskManagerService = activityTaskManagerService;
 
         mPowerButtonY = context.getResources().getDimensionPixelSize(
                 R.dimen.physical_power_button_center_screen_location_y);
@@ -1443,8 +1455,9 @@
         mUiEventLogger = uiEventLogger;
         mSessionTracker = sessionTracker;
 
-        mMainDispatcher = mainDispatcher;
         mDreamingToLockscreenTransitionViewModel = dreamingToLockscreenTransitionViewModel;
+        mWmLockscreenVisibilityManager = wmLockscreenVisibilityManager;
+        mMainDispatcher = mainDispatcher;
     }
 
     public void userActivity() {
@@ -2032,12 +2045,17 @@
     }
 
     /**
-     * Is the keyguard currently showing and not being force hidden?
+     * Is the keyguard currently showing, and not occluded (no activity is drawing over the
+     * lockscreen).
      */
     public boolean isShowingAndNotOccluded() {
         return mShowing && !mOccluded;
     }
 
+    public boolean isShowing() {
+        return mShowing;
+    }
+
     public boolean isOccludeAnimationPlaying() {
         return mOccludeAnimationPlaying;
     }
@@ -2677,8 +2695,14 @@
             if (DEBUG) {
                 Log.d(TAG, "updateActivityLockScreenState(" + showing + ", " + aodShowing + ")");
             }
+
+            if (mFeatureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                // Handled in WmLockscreenVisibilityManager if flag is enabled.
+                return;
+            }
+
             try {
-                ActivityTaskManager.getService().setLockScreenShown(showing, aodShowing);
+                mActivityTaskManagerService.setLockScreenShown(showing, aodShowing);
             } catch (RemoteException e) {
             }
         });
@@ -2716,7 +2740,11 @@
             }
             mHiding = false;
 
-            mKeyguardViewControllerLazy.get().show(options);
+            if (!mFeatureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                // Handled directly in StatusBarKeyguardViewManager if enabled.
+                mKeyguardViewControllerLazy.get().show(options);
+            }
+
             resetKeyguardDonePendingLocked();
             mHideAnimationRun = false;
             adjustStatusBarLocked();
@@ -2787,19 +2815,22 @@
             mUpdateMonitor.setKeyguardGoingAway(true);
             mKeyguardViewControllerLazy.get().setKeyguardGoingAwayState(true);
 
-            // Don't actually hide the Keyguard at the moment, wait for window
-            // manager until it tells us it's safe to do so with
-            // startKeyguardExitAnimation.
-            // Posting to mUiOffloadThread to ensure that calls to ActivityTaskManager will be in
-            // order.
-            final int keyguardFlag = flags;
-            mUiBgExecutor.execute(() -> {
-                try {
-                    ActivityTaskManager.getService().keyguardGoingAway(keyguardFlag);
-                } catch (RemoteException e) {
-                    Log.e(TAG, "Error while calling WindowManager", e);
-                }
-            });
+            // Handled in WmLockscreenVisibilityManager if flag is enabled.
+            if (!mFeatureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                    // Don't actually hide the Keyguard at the moment, wait for window manager 
+                    // until it tells us it's safe to do so with startKeyguardExitAnimation.
+		    // Posting to mUiOffloadThread to ensure that calls to ActivityTaskManager 
+		    // will be in order.
+		    final int keyguardFlag = flags;
+		    mUiBgExecutor.execute(() -> {
+		        try {
+		            mActivityTaskManagerService.keyguardGoingAway(keyguardFlag);
+		        } catch (RemoteException e) {
+		            Log.e(TAG, "Error while calling WindowManager", e);
+		        }
+		    });
+            }
+
             Trace.endSection();
         }
     };
@@ -2872,8 +2903,6 @@
         synchronized (KeyguardViewMediator.this) {
             if (DEBUG) Log.d(TAG, "handleHide");
 
-            mHiding = true;
-
             // If waking and unlocking, waking from dream has been set properly.
             if (!mWakeAndUnlocking) {
                 setUnlockAndWakeFromDream(mStatusBarStateController.isDreaming()
@@ -2884,15 +2913,15 @@
                 if (mUnlockingAndWakingFromDream) {
                     Log.d(TAG, "hiding keyguard before waking from dream");
                 }
+                mHiding = true;
                 mKeyguardGoingAwayRunnable.run();
             } else {
-                // TODO(bc-unlock): Fill parameters
-                mNotificationShadeWindowControllerLazy.get().batchApplyWindowLayoutParams(() -> {
-                    handleStartKeyguardExitAnimation(
-                            mSystemClock.uptimeMillis() + mHideAnimation.getStartOffset(),
-                            mHideAnimation.getDuration(), null /* apps */, null /* wallpapers */,
-                            null /* nonApps */, null /* finishedCallback */);
-                });
+                Log.d(TAG, "Hiding keyguard while occluded. Just hide the keyguard view and exit.");
+
+                mKeyguardViewControllerLazy.get().hide(
+                        mSystemClock.uptimeMillis() + mHideAnimation.getStartOffset(),
+                        mHideAnimation.getDuration());
+                onKeyguardExitFinished();
             }
         }
         Trace.endSection();
@@ -2913,7 +2942,10 @@
             if (!mHiding
                     && !mSurfaceBehindRemoteAnimationRequested
                     && !mKeyguardStateController.isFlingingToDismissKeyguardDuringSwipeGesture()) {
-                if (finishedCallback != null) {
+                // If the flag is enabled, remote animation state is handled in
+                // WmLockscreenVisibilityManager.
+                if (finishedCallback != null
+                        && !mFeatureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
                     // There will not execute animation, send a finish callback to ensure the remote
                     // animation won't hang there.
                     try {
@@ -2939,10 +2971,12 @@
                         new IRemoteAnimationFinishedCallback() {
                             @Override
                             public void onAnimationFinished() throws RemoteException {
-                                try {
-                                    finishedCallback.onAnimationFinished();
-                                } catch (RemoteException e) {
-                                    Slog.w(TAG, "Failed to call onAnimationFinished", e);
+                                if (!mFeatureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                                    try {
+                                        finishedCallback.onAnimationFinished();
+                                    } catch (RemoteException e) {
+                                        Slog.w(TAG, "Failed to call onAnimationFinished", e);
+                                    }
                                 }
                                 onKeyguardExitFinished();
                                 mKeyguardViewControllerLazy.get().hide(0 /* startTime */,
@@ -2969,7 +3003,11 @@
             // it will dismiss the panel in that case.
             } else if (!mStatusBarStateController.leaveOpenOnKeyguardHide()
                     && apps != null && apps.length > 0) {
-                mSurfaceBehindRemoteAnimationFinishedCallback = finishedCallback;
+                if (!mFeatureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                    // Handled in WmLockscreenVisibilityManager. Other logic in this class will
+                    // short circuit when this is null.
+                    mSurfaceBehindRemoteAnimationFinishedCallback = finishedCallback;
+                }
                 mSurfaceBehindRemoteAnimationRunning = true;
 
                 mInteractionJankMonitor.begin(
@@ -2989,7 +3027,10 @@
                         createInteractionJankMonitorConf(
                                 CUJ_LOCKSCREEN_UNLOCK_ANIMATION, "RemoteAnimationDisabled"));
 
-                mKeyguardViewControllerLazy.get().hide(startTime, fadeoutDuration);
+                if (!mFeatureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                    // Handled directly in StatusBarKeyguardViewManager if enabled.
+                    mKeyguardViewControllerLazy.get().hide(startTime, fadeoutDuration);
+                }
 
                 // TODO(bc-animation): When remote animation is enabled for keyguard exit animation,
                 // apps, wallpapers and finishedCallback are set to non-null. nonApps is not yet
@@ -3003,13 +3044,17 @@
                     }
                     if (apps == null || apps.length == 0) {
                         Slog.e(TAG, "Keyguard exit without a corresponding app to show.");
+
                         try {
-                            finishedCallback.onAnimationFinished();
+                            if (!mFeatureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                                finishedCallback.onAnimationFinished();
+                            }
                         } catch (RemoteException e) {
                             Slog.e(TAG, "RemoteException");
                         } finally {
                             mInteractionJankMonitor.end(CUJ_LOCKSCREEN_UNLOCK_ANIMATION);
                         }
+
                         return;
                     }
 
@@ -3033,7 +3078,9 @@
                         @Override
                         public void onAnimationEnd(Animator animation) {
                             try {
-                                finishedCallback.onAnimationFinished();
+                                if (!mFeatureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                                    finishedCallback.onAnimationFinished();
+                                }
                             } catch (RemoteException e) {
                                 Slog.e(TAG, "RemoteException");
                             } finally {
@@ -3044,7 +3091,9 @@
                         @Override
                         public void onAnimationCancel(Animator animation) {
                             try {
-                                finishedCallback.onAnimationFinished();
+                                if (!mFeatureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                                    finishedCallback.onAnimationFinished();
+                                }
                             } catch (RemoteException e) {
                                 Slog.e(TAG, "RemoteException");
                             } finally {
@@ -3193,7 +3242,11 @@
                 flags |= KEYGUARD_GOING_AWAY_FLAG_TO_LAUNCHER_CLEAR_SNAPSHOT;
             }
 
-            ActivityTaskManager.getService().keyguardGoingAway(flags);
+            if (!mFeatureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                // Handled in WmLockscreenVisibilityManager.
+                mActivityTaskManagerService.keyguardGoingAway(flags);
+            }
+
             mKeyguardStateController.notifyKeyguardGoingAway(true);
         } catch (RemoteException e) {
             mSurfaceBehindRemoteAnimationRequested = false;
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WindowManagerLockscreenVisibilityManager.kt b/packages/SystemUI/src/com/android/systemui/keyguard/WindowManagerLockscreenVisibilityManager.kt
new file mode 100644
index 0000000..75677f2
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/WindowManagerLockscreenVisibilityManager.kt
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard
+
+import android.app.IActivityTaskManager
+import android.util.Log
+import android.view.IRemoteAnimationFinishedCallback
+import android.view.RemoteAnimationTarget
+import android.view.WindowManager
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.keyguard.ui.binder.KeyguardSurfaceBehindParamsApplier
+import com.android.systemui.statusbar.policy.KeyguardStateController
+import java.util.concurrent.Executor
+import javax.inject.Inject
+
+/**
+ * Manages lockscreen and AOD visibility state via the [IActivityTaskManager], and keeps track of
+ * remote animations related to changes in lockscreen visibility.
+ */
+@SysUISingleton
+class WindowManagerLockscreenVisibilityManager
+@Inject
+constructor(
+    @Main private val executor: Executor,
+    private val activityTaskManagerService: IActivityTaskManager,
+    private val keyguardStateController: KeyguardStateController,
+    private val keyguardSurfaceBehindAnimator: KeyguardSurfaceBehindParamsApplier,
+) {
+
+    /**
+     * Whether the lockscreen is showing, which we pass to [IActivityTaskManager.setLockScreenShown]
+     * in order to show the lockscreen and hide the surface behind the keyguard (or the inverse).
+     */
+    private var isLockscreenShowing = true
+
+    /**
+     * Whether AOD is showing, which we pass to [IActivityTaskManager.setLockScreenShown] in order
+     * to show AOD when the lockscreen is visible.
+     */
+    private var isAodVisible = false
+
+    /**
+     * Whether the keyguard is currently "going away", which we triggered via a call to
+     * [IActivityTaskManager.keyguardGoingAway]. When we tell WM that the keyguard is going away,
+     * the app/launcher surface behind the keyguard is made visible, and WM calls
+     * [onKeyguardGoingAwayRemoteAnimationStart] with a RemoteAnimationTarget so that we can animate
+     * it.
+     *
+     * Going away does not inherently result in [isLockscreenShowing] being set to false; we need to
+     * do that ourselves once we are done animating the surface.
+     *
+     * THIS IS THE ONLY PLACE 'GOING AWAY' TERMINOLOGY SHOULD BE USED. 'Going away' is a WM concept
+     * and we have gotten into trouble using it to mean various different things in the past. Unlock
+     * animations may still be visible when the keyguard is NOT 'going away', for example, when we
+     * play in-window animations, we set the surface to alpha=1f and end the animation immediately.
+     * The remainder of the animation occurs in-window, so while you might expect that the keyguard
+     * is still 'going away' because unlock animations are playing, it's actually not.
+     *
+     * If you want to know if the keyguard is 'going away', you probably want to check if we have
+     * STARTED but not FINISHED a transition to GONE.
+     *
+     * The going away animation will run until:
+     * - We manually call [endKeyguardGoingAwayAnimation] after we're done animating.
+     * - We call [setLockscreenShown] = true, which cancels the going away animation.
+     * - WM calls [onKeyguardGoingAwayRemoteAnimationCancelled] for another reason (such as the 10
+     *   second timeout).
+     */
+    private var isKeyguardGoingAway = false
+        private set(value) {
+            // TODO(b/278086361): Extricate the keyguard state controller.
+            keyguardStateController.notifyKeyguardGoingAway(value)
+            field = value
+        }
+
+    /** Callback provided by WM to call once we're done with the going away animation. */
+    private var goingAwayRemoteAnimationFinishedCallback: IRemoteAnimationFinishedCallback? = null
+
+    /**
+     * Set the visibility of the surface behind the keyguard, making the appropriate calls to Window
+     * Manager to effect the change.
+     */
+    fun setSurfaceBehindVisibility(visible: Boolean) {
+        if (isKeyguardGoingAway == visible) {
+            Log.d(TAG, "WmLockscreenVisibilityManager#setVisibility -> already visible=$visible")
+            return
+        }
+
+        // The surface behind is always visible if the lockscreen is not showing, so we're already
+        // visible.
+        if (visible && !isLockscreenShowing) {
+            Log.d(TAG, "#setVisibility -> already visible since the lockscreen isn't showing")
+            return
+        }
+
+        if (visible) {
+            // Make the surface visible behind the keyguard by calling keyguardGoingAway. The
+            // lockscreen is still showing as well, allowing us to animate unlocked.
+            Log.d(TAG, "ActivityTaskManagerService#keyguardGoingAway()")
+            activityTaskManagerService.keyguardGoingAway(0)
+            isKeyguardGoingAway = true
+        } else {
+            // Hide the surface by setting the lockscreen showing.
+            setLockscreenShown(true)
+        }
+    }
+
+    fun setAodVisible(aodVisible: Boolean) {
+        setWmLockscreenState(aodVisible = aodVisible)
+    }
+
+    /** Sets the visibility of the lockscreen. */
+    fun setLockscreenShown(lockscreenShown: Boolean) {
+        setWmLockscreenState(lockscreenShowing = lockscreenShown)
+    }
+
+    fun onKeyguardGoingAwayRemoteAnimationStart(
+        @WindowManager.TransitionOldType transit: Int,
+        apps: Array<RemoteAnimationTarget>,
+        wallpapers: Array<RemoteAnimationTarget>,
+        nonApps: Array<RemoteAnimationTarget>,
+        finishedCallback: IRemoteAnimationFinishedCallback
+    ) {
+        goingAwayRemoteAnimationFinishedCallback = finishedCallback
+        keyguardSurfaceBehindAnimator.applyParamsToSurface(apps[0])
+    }
+
+    fun onKeyguardGoingAwayRemoteAnimationCancelled() {
+        // If WM cancelled the animation, we need to end immediately even if we're still using the
+        // animation.
+        endKeyguardGoingAwayAnimation()
+    }
+
+    /**
+     * Whether the going away remote animation target is in-use, which means we're animating it or
+     * intend to animate it.
+     *
+     * Some unlock animations (such as the translation spring animation) are non-deterministic and
+     * might end after the transition to GONE ends. In that case, we want to keep the remote
+     * animation running until the spring ends.
+     */
+    fun setUsingGoingAwayRemoteAnimation(usingTarget: Boolean) {
+        if (!usingTarget) {
+            endKeyguardGoingAwayAnimation()
+        }
+    }
+
+    private fun setWmLockscreenState(
+        lockscreenShowing: Boolean = this.isLockscreenShowing,
+        aodVisible: Boolean = this.isAodVisible
+    ) {
+        Log.d(
+            TAG,
+            "#setWmLockscreenState(" +
+                "isLockscreenShowing=$lockscreenShowing, " +
+                "aodVisible=$aodVisible)."
+        )
+
+        if (this.isLockscreenShowing == lockscreenShowing && this.isAodVisible == aodVisible) {
+            return
+        }
+
+        activityTaskManagerService.setLockScreenShown(lockscreenShowing, aodVisible)
+        this.isLockscreenShowing = lockscreenShowing
+        this.isAodVisible = aodVisible
+    }
+
+    private fun endKeyguardGoingAwayAnimation() {
+        if (!isKeyguardGoingAway) {
+            Log.d(
+                TAG,
+                "#endKeyguardGoingAwayAnimation() called when isKeyguardGoingAway=false. " +
+                    "Short-circuiting."
+            )
+            return
+        }
+
+        executor.execute {
+            Log.d(TAG, "Finishing remote animation.")
+            goingAwayRemoteAnimationFinishedCallback?.onAnimationFinished()
+            goingAwayRemoteAnimationFinishedCallback = null
+
+            isKeyguardGoingAway = false
+
+            keyguardSurfaceBehindAnimator.notifySurfaceReleased()
+        }
+    }
+
+    companion object {
+        private val TAG = this::class.java.simpleName
+    }
+}
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 4205ed2..9a44230 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.keyguard.dagger;
 
+import android.app.IActivityTaskManager;
 import android.app.trust.TrustManager;
 import android.content.Context;
 import android.os.PowerManager;
@@ -46,6 +47,7 @@
 import com.android.systemui.keyguard.DismissCallbackRegistry;
 import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
 import com.android.systemui.keyguard.KeyguardViewMediator;
+import com.android.systemui.keyguard.WindowManagerLockscreenVisibilityManager;
 import com.android.systemui.keyguard.data.quickaffordance.KeyguardDataQuickAffordanceModule;
 import com.android.systemui.keyguard.data.repository.KeyguardFaceAuthModule;
 import com.android.systemui.keyguard.data.repository.KeyguardRepositoryModule;
@@ -73,12 +75,11 @@
 import com.android.systemui.wallpapers.data.repository.WallpaperRepository;
 import com.android.wm.shell.keyguard.KeyguardTransitions;
 
+import java.util.concurrent.Executor;
+
 import dagger.Lazy;
 import dagger.Module;
 import dagger.Provides;
-
-import java.util.concurrent.Executor;
-
 import kotlinx.coroutines.CoroutineDispatcher;
 
 /**
@@ -138,13 +139,15 @@
             Lazy<NotificationShadeWindowController> notificationShadeWindowController,
             Lazy<ActivityLaunchAnimator> activityLaunchAnimator,
             Lazy<ScrimController> scrimControllerLazy,
+            IActivityTaskManager activityTaskManagerService,
             FeatureFlags featureFlags,
             SecureSettings secureSettings,
             SystemSettings systemSettings,
             SystemClock systemClock,
             @Main CoroutineDispatcher mainDispatcher,
             Lazy<DreamingToLockscreenTransitionViewModel> dreamingToLockscreenTransitionViewModel,
-            SystemPropertiesHelper systemPropertiesHelper) {
+            SystemPropertiesHelper systemPropertiesHelper,
+            Lazy<WindowManagerLockscreenVisibilityManager> wmLockscreenVisibilityManager) {
         return new KeyguardViewMediator(
                 context,
                 uiEventLogger,
@@ -180,13 +183,15 @@
                 notificationShadeWindowController,
                 activityLaunchAnimator,
                 scrimControllerLazy,
+                activityTaskManagerService,
                 featureFlags,
                 secureSettings,
                 systemSettings,
                 systemClock,
                 mainDispatcher,
                 dreamingToLockscreenTransitionViewModel,
-                systemPropertiesHelper);
+                systemPropertiesHelper,
+                wmLockscreenVisibilityManager);
     }
 
     /** */
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt
index 30f8f3e..12c309c5 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepository.kt
@@ -46,6 +46,7 @@
 import com.android.systemui.keyguard.shared.model.FaceDetectionStatus
 import com.android.systemui.keyguard.shared.model.FailedFaceAuthenticationStatus
 import com.android.systemui.keyguard.shared.model.HelpFaceAuthenticationStatus
+import com.android.systemui.keyguard.shared.model.KeyguardState
 import com.android.systemui.keyguard.shared.model.SuccessFaceAuthenticationStatus
 import com.android.systemui.keyguard.shared.model.TransitionState
 import com.android.systemui.log.FaceAuthenticationLogger
@@ -160,7 +161,7 @@
     @FaceDetectTableLog private val faceDetectLog: TableLogBuffer,
     @FaceAuthTableLog private val faceAuthLog: TableLogBuffer,
     private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
-    featureFlags: FeatureFlags,
+    private val featureFlags: FeatureFlags,
     facePropertyRepository: FacePropertyRepository,
     dumpManager: DumpManager,
 ) : DeviceEntryFaceAuthRepository, Dumpable {
@@ -286,8 +287,12 @@
         // starts going to sleep.
         merge(
                 keyguardRepository.wakefulness.map { it.isStartingToSleepOrAsleep() },
-                keyguardRepository.isKeyguardGoingAway,
-                userRepository.userSwitchingInProgress
+                if (featureFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+                    keyguardTransitionInteractor.isInTransitionToState(KeyguardState.GONE)
+                } else {
+                    keyguardRepository.isKeyguardGoingAway
+                },
+                userRepository.userSwitchingInProgress,
             )
             .onEach { anyOfThemIsTrue ->
                 if (anyOfThemIsTrue) {
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
index e35c369..42cd3a5 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt
@@ -99,7 +99,16 @@
     /** Is an activity showing over the keyguard? */
     val isKeyguardOccluded: Flow<Boolean>
 
-    /** Observable for the signal that keyguard is about to go away. */
+    /**
+     * Observable for the signal that keyguard is about to go away.
+     *
+     * TODO(b/278086361): Remove once KEYGUARD_WM_STATE_REFACTOR flag is removed.
+     */
+    @Deprecated(
+        "Use KeyguardTransitionInteractor flows instead. The closest match for 'going " +
+            "away' is isInTransitionToState(GONE), but consider using more specific flows " +
+            "whenever possible."
+    )
     val isKeyguardGoingAway: Flow<Boolean>
 
     /** Is the always-on display available to be used? */
@@ -365,10 +374,11 @@
 
                 awaitClose { keyguardStateController.removeCallback(callback) }
             }
+            .distinctUntilChanged()
             .stateIn(
-                scope = scope,
-                started = SharingStarted.WhileSubscribed(),
-                initialValue = keyguardStateController.isUnlocked,
+                scope,
+                SharingStarted.Eagerly,
+                initialValue = false,
             )
 
     override val isKeyguardGoingAway: Flow<Boolean> = conflatedCallbackFlow {
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
index 246ee33..2f80106 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryModule.kt
@@ -32,6 +32,11 @@
     @Binds fun keyguardRepository(impl: KeyguardRepositoryImpl): KeyguardRepository
 
     @Binds
+    fun keyguardSurfaceBehindRepository(
+        impl: KeyguardSurfaceBehindRepositoryImpl
+    ): KeyguardSurfaceBehindRepository
+
+    @Binds
     fun keyguardTransitionRepository(
         impl: KeyguardTransitionRepositoryImpl
     ): KeyguardTransitionRepository
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardSurfaceBehindRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardSurfaceBehindRepository.kt
new file mode 100644
index 0000000..014b7fa
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardSurfaceBehindRepository.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.data.repository
+
+import com.android.systemui.dagger.SysUISingleton
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
+
+/**
+ * State related to SysUI's handling of the surface behind the keyguard (typically an app or the
+ * launcher). We manipulate this surface during unlock animations.
+ */
+interface KeyguardSurfaceBehindRepository {
+
+    /** Whether we're running animations on the surface. */
+    val isAnimatingSurface: Flow<Boolean>
+
+    /** Set whether we're running animations on the surface. */
+    fun setAnimatingSurface(animating: Boolean)
+}
+
+@SysUISingleton
+class KeyguardSurfaceBehindRepositoryImpl @Inject constructor() : KeyguardSurfaceBehindRepository {
+    private val _isAnimatingSurface = MutableStateFlow(false)
+    override val isAnimatingSurface = _isAnimatingSurface.asStateFlow()
+
+    override fun setAnimatingSurface(animating: Boolean) {
+        _isAnimatingSurface.value = animating
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt
index 8f0b91b..271bc38 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt
@@ -17,7 +17,6 @@
 package com.android.systemui.keyguard.domain.interactor
 
 import android.animation.ValueAnimator
-import com.android.app.animation.Interpolators
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dagger.qualifiers.Application
 import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
@@ -26,6 +25,7 @@
 import com.android.systemui.util.kotlin.Utils.Companion.toQuad
 import com.android.systemui.util.kotlin.Utils.Companion.toQuint
 import com.android.systemui.util.kotlin.sample
+import com.android.wm.shell.animation.Interpolators
 import javax.inject.Inject
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.delay
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt
index 6b28b27..aa771fd 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt
@@ -20,8 +20,11 @@
 import com.android.app.animation.Interpolators
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
 import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
 import com.android.systemui.keyguard.shared.model.KeyguardState
+import com.android.systemui.keyguard.shared.model.KeyguardSurfaceBehindModel
 import com.android.systemui.keyguard.shared.model.StatusBarState.KEYGUARD
 import com.android.systemui.keyguard.shared.model.TransitionInfo
 import com.android.systemui.keyguard.shared.model.TransitionState
@@ -34,7 +37,11 @@
 import javax.inject.Inject
 import kotlin.time.Duration.Companion.milliseconds
 import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.onStart
 import kotlinx.coroutines.launch
 
 @SysUISingleton
@@ -45,6 +52,7 @@
     override val transitionInteractor: KeyguardTransitionInteractor,
     @Application private val scope: CoroutineScope,
     private val keyguardInteractor: KeyguardInteractor,
+    private val flags: FeatureFlags,
     private val shadeRepository: ShadeRepository,
 ) :
     TransitionInteractor(
@@ -53,6 +61,7 @@
 
     override fun start() {
         listenForLockscreenToGone()
+        listenForLockscreenToGoneDragging()
         listenForLockscreenToOccluded()
         listenForLockscreenToCamera()
         listenForLockscreenToAodOrDozing()
@@ -62,6 +71,63 @@
         listenForLockscreenToAlternateBouncer()
     }
 
+    /**
+     * Whether we want the surface behind the keyguard visible for the transition from LOCKSCREEN,
+     * or null if we don't care and should just use a reasonable default.
+     *
+     * [KeyguardSurfaceBehindInteractor] will switch to this flow whenever a transition from
+     * LOCKSCREEN is running.
+     */
+    val surfaceBehindVisibility: Flow<Boolean?> =
+        transitionInteractor.startedKeyguardTransitionStep
+            .map { startedStep ->
+                if (startedStep.to != KeyguardState.GONE) {
+                    // LOCKSCREEN to anything but GONE does not require any special surface
+                    // visibility handling.
+                    return@map null
+                }
+
+                true // TODO(b/278086361): Implement continuous swipe to unlock.
+            }
+            .onStart {
+                // Default to null ("don't care, use a reasonable default").
+                emit(null)
+            }
+            .distinctUntilChanged()
+
+    /**
+     * The surface behind view params to use for the transition from LOCKSCREEN, or null if we don't
+     * care and should use a reasonable default.
+     */
+    val surfaceBehindModel: Flow<KeyguardSurfaceBehindModel?> =
+        combine(
+                transitionInteractor.startedKeyguardTransitionStep,
+                transitionInteractor.transitionStepsFromState(KeyguardState.LOCKSCREEN)
+            ) { startedStep, fromLockscreenStep ->
+                if (startedStep.to != KeyguardState.GONE) {
+                    // Only LOCKSCREEN -> GONE has specific surface params (for the unlock
+                    // animation).
+                    return@combine null
+                } else if (fromLockscreenStep.value > 0.5f) {
+                    // Start the animation once we're 50% transitioned to GONE.
+                    KeyguardSurfaceBehindModel(
+                        animateFromAlpha = 0f,
+                        alpha = 1f,
+                        animateFromTranslationY = 500f,
+                        translationY = 0f
+                    )
+                } else {
+                    KeyguardSurfaceBehindModel(
+                        alpha = 0f,
+                    )
+                }
+            }
+            .onStart {
+                // Default to null ("don't care, use a reasonable default").
+                emit(null)
+            }
+            .distinctUntilChanged()
+
     private fun listenForLockscreenToDreaming() {
         val invalidFromStates = setOf(KeyguardState.AOD, KeyguardState.DOZING)
         scope.launch {
@@ -169,7 +235,8 @@
                             }
 
                             // If canceled, just put the state back
-                            // TODO: This logic should happen in FromPrimaryBouncerInteractor.
+                            // TODO(b/278086361): This logic should happen in
+                            //  FromPrimaryBouncerInteractor.
                             if (nextState == TransitionState.CANCELED) {
                                 transitionRepository.startTransition(
                                     TransitionInfo(
@@ -201,7 +268,32 @@
         }
     }
 
+    fun dismissKeyguard() {
+        startTransitionTo(KeyguardState.GONE)
+    }
+
     private fun listenForLockscreenToGone() {
+        if (flags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+            return
+        }
+
+        scope.launch {
+            keyguardInteractor.isKeyguardGoingAway
+                .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair)
+                .collect { pair ->
+                    val (isKeyguardGoingAway, lastStartedStep) = pair
+                    if (isKeyguardGoingAway && lastStartedStep.to == KeyguardState.LOCKSCREEN) {
+                        startTransitionTo(KeyguardState.GONE)
+                    }
+                }
+        }
+    }
+
+    private fun listenForLockscreenToGoneDragging() {
+        if (flags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+            return
+        }
+
         scope.launch {
             keyguardInteractor.isKeyguardGoingAway
                 .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair)
@@ -291,7 +383,7 @@
     }
 
     companion object {
-        private val DEFAULT_DURATION = 500.milliseconds
+        private val DEFAULT_DURATION = 400.milliseconds
         val TO_DREAMING_DURATION = 933.milliseconds
         val TO_OCCLUDED_DURATION = 450.milliseconds
     }
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt
index 9142d1f..c9f32da 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt
@@ -17,23 +17,28 @@
 package com.android.systemui.keyguard.domain.interactor
 
 import android.animation.ValueAnimator
-import com.android.app.animation.Interpolators
 import com.android.keyguard.KeyguardSecurityModel
-import com.android.keyguard.KeyguardSecurityModel.SecurityMode.Password
 import com.android.keyguard.KeyguardUpdateMonitor
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
 import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
 import com.android.systemui.keyguard.shared.model.KeyguardState
+import com.android.systemui.keyguard.shared.model.KeyguardSurfaceBehindModel
 import com.android.systemui.keyguard.shared.model.WakefulnessState
 import com.android.systemui.util.kotlin.Utils.Companion.toQuad
 import com.android.systemui.util.kotlin.Utils.Companion.toQuint
 import com.android.systemui.util.kotlin.Utils.Companion.toTriple
 import com.android.systemui.util.kotlin.sample
+import com.android.wm.shell.animation.Interpolators
 import javax.inject.Inject
 import kotlin.time.Duration.Companion.milliseconds
 import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.onStart
 import kotlinx.coroutines.launch
 
 @SysUISingleton
@@ -44,6 +49,7 @@
     override val transitionInteractor: KeyguardTransitionInteractor,
     @Application private val scope: CoroutineScope,
     private val keyguardInteractor: KeyguardInteractor,
+    private val flags: FeatureFlags,
     private val keyguardSecurityModel: KeyguardSecurityModel,
 ) :
     TransitionInteractor(
@@ -57,6 +63,57 @@
         listenForPrimaryBouncerToDreamingLockscreenHosted()
     }
 
+    val surfaceBehindVisibility: Flow<Boolean?> =
+        combine(
+                transitionInteractor.startedKeyguardTransitionStep,
+                transitionInteractor.transitionStepsFromState(KeyguardState.PRIMARY_BOUNCER)
+            ) { startedStep, fromBouncerStep ->
+                if (startedStep.to != KeyguardState.GONE) {
+                    return@combine null
+                }
+
+                fromBouncerStep.value > 0.5f
+            }
+            .onStart {
+                // Default to null ("don't care, use a reasonable default").
+                emit(null)
+            }
+            .distinctUntilChanged()
+
+    val surfaceBehindModel: Flow<KeyguardSurfaceBehindModel?> =
+        combine(
+                transitionInteractor.startedKeyguardTransitionStep,
+                transitionInteractor.transitionStepsFromState(KeyguardState.PRIMARY_BOUNCER)
+            ) { startedStep, fromBouncerStep ->
+                if (startedStep.to != KeyguardState.GONE) {
+                    // BOUNCER to anything but GONE does not require any special surface
+                    // visibility handling.
+                    return@combine null
+                }
+
+                if (fromBouncerStep.value > 0.5f) {
+                    KeyguardSurfaceBehindModel(
+                        animateFromAlpha = 0f,
+                        alpha = 1f,
+                        animateFromTranslationY = 500f,
+                        translationY = 0f,
+                    )
+                } else {
+                    KeyguardSurfaceBehindModel(
+                        alpha = 0f,
+                    )
+                }
+            }
+            .onStart {
+                // Default to null ("don't care, use a reasonable default").
+                emit(null)
+            }
+            .distinctUntilChanged()
+
+    fun dismissPrimaryBouncer() {
+        startTransitionTo(KeyguardState.GONE)
+    }
+
     private fun listenForPrimaryBouncerToLockscreenOrOccluded() {
         scope.launch {
             keyguardInteractor.primaryBouncerShowing
@@ -124,28 +181,34 @@
     private fun listenForPrimaryBouncerToDreamingLockscreenHosted() {
         scope.launch {
             keyguardInteractor.primaryBouncerShowing
-                .sample(
-                    combine(
-                        keyguardInteractor.isActiveDreamLockscreenHosted,
-                        transitionInteractor.startedKeyguardTransitionStep,
-                        ::Pair
-                    ),
-                    ::toTriple
-                )
-                .collect {
-                    (isBouncerShowing, isActiveDreamLockscreenHosted, lastStartedTransitionStep) ->
-                    if (
-                        !isBouncerShowing &&
-                            isActiveDreamLockscreenHosted &&
-                            lastStartedTransitionStep.to == KeyguardState.PRIMARY_BOUNCER
-                    ) {
-                        startTransitionTo(KeyguardState.DREAMING_LOCKSCREEN_HOSTED)
+                    .sample(
+                            combine(
+                                    keyguardInteractor.isActiveDreamLockscreenHosted,
+                                    transitionInteractor.startedKeyguardTransitionStep,
+                                    ::Pair
+                            ),
+                            ::toTriple
+                    )
+                    .collect { (isBouncerShowing, isActiveDreamLockscreenHosted, lastStartedTransitionStep) ->
+                        if (
+                                !isBouncerShowing &&
+                                isActiveDreamLockscreenHosted &&
+                                lastStartedTransitionStep.to == KeyguardState.PRIMARY_BOUNCER
+                        ) {
+                            startTransitionTo(KeyguardState.DREAMING_LOCKSCREEN_HOSTED)
+                        }
                     }
-                }
         }
     }
 
     private fun listenForPrimaryBouncerToGone() {
+        if (flags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+            // This is handled in KeyguardSecurityContainerController and
+            // StatusBarKeyguardViewManager, which calls the transition interactor to kick off a
+            // transition vs. listening to legacy state flags.
+            return
+        }
+
         scope.launch {
             keyguardInteractor.isKeyguardGoingAway
                 .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair)
@@ -160,7 +223,7 @@
                             )
                         // IME for password requires a slightly faster animation
                         val duration =
-                            if (securityMode == Password) {
+                            if (securityMode == KeyguardSecurityModel.SecurityMode.Password) {
                                 TO_GONE_SHORT_DURATION
                             } else {
                                 TO_GONE_DURATION
@@ -188,7 +251,7 @@
 
     companion object {
         private val DEFAULT_DURATION = 300.milliseconds
-        val TO_GONE_DURATION = 250.milliseconds
+        val TO_GONE_DURATION = 500.milliseconds
         val TO_GONE_SHORT_DURATION = 200.milliseconds
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
index 53d3c07..562c4db 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
@@ -34,12 +34,12 @@
 import com.android.systemui.keyguard.shared.model.DozeStateModel.Companion.isDozeOff
 import com.android.systemui.keyguard.shared.model.DozeTransitionModel
 import com.android.systemui.keyguard.shared.model.KeyguardRootViewVisibilityState
+import com.android.systemui.keyguard.shared.model.KeyguardState
 import com.android.systemui.keyguard.shared.model.ScreenModel
 import com.android.systemui.keyguard.shared.model.StatusBarState
 import com.android.systemui.keyguard.shared.model.WakefulnessModel
 import com.android.systemui.statusbar.CommandQueue
 import com.android.systemui.util.kotlin.sample
-import javax.inject.Inject
 import kotlinx.coroutines.channels.awaitClose
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.flow.Flow
@@ -53,6 +53,7 @@
 import kotlinx.coroutines.flow.flowOf
 import kotlinx.coroutines.flow.merge
 import kotlinx.coroutines.flow.onStart
+import javax.inject.Inject
 
 /**
  * Encapsulates business-logic related to the keyguard but not to a more specific part within it.
@@ -264,7 +265,26 @@
         repository.setAnimateDozingTransitions(animate)
     }
 
+    fun isKeyguardDismissable(): Boolean {
+        return repository.isKeyguardUnlocked.value
+    }
+
     companion object {
         private const val TAG = "KeyguardInteractor"
+
+        fun isKeyguardVisibleInState(state: KeyguardState): Boolean {
+            return when (state) {
+                KeyguardState.OFF -> true
+                KeyguardState.DOZING -> true
+                KeyguardState.DREAMING -> true
+                KeyguardState.AOD -> true
+                KeyguardState.ALTERNATE_BOUNCER -> true
+                KeyguardState.PRIMARY_BOUNCER -> true
+                KeyguardState.LOCKSCREEN -> true
+                KeyguardState.GONE -> false
+                KeyguardState.OCCLUDED -> true
+                KeyguardState.DREAMING_LOCKSCREEN_HOSTED -> false
+            }
+        }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractor.kt
new file mode 100644
index 0000000..bf04f8f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractor.kt
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.domain.interactor
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.keyguard.data.repository.KeyguardSurfaceBehindRepository
+import com.android.systemui.keyguard.shared.model.KeyguardState
+import com.android.systemui.keyguard.shared.model.KeyguardSurfaceBehindModel
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.flatMapLatest
+import kotlinx.coroutines.flow.flowOf
+import kotlinx.coroutines.flow.map
+import javax.inject.Inject
+
+@SysUISingleton
+class KeyguardSurfaceBehindInteractor
+@Inject
+constructor(
+    private val repository: KeyguardSurfaceBehindRepository,
+    private val fromLockscreenInteractor: FromLockscreenTransitionInteractor,
+    private val fromPrimaryBouncerInteractor: FromPrimaryBouncerTransitionInteractor,
+    transitionInteractor: KeyguardTransitionInteractor,
+) {
+
+    @OptIn(ExperimentalCoroutinesApi::class)
+    val viewParams: Flow<KeyguardSurfaceBehindModel> =
+        transitionInteractor.isInTransitionToAnyState
+            .flatMapLatest { isInTransition ->
+                if (!isInTransition) {
+                    defaultParams
+                } else {
+                    combine(
+                        transitionSpecificViewParams,
+                        defaultParams,
+                    ) { transitionParams, defaultParams ->
+                        transitionParams ?: defaultParams
+                    }
+                }
+            }
+
+    val isAnimatingSurface = repository.isAnimatingSurface
+
+    private val defaultParams =
+        transitionInteractor.finishedKeyguardState.map { state ->
+            KeyguardSurfaceBehindModel(
+                alpha =
+                    if (WindowManagerLockscreenVisibilityInteractor.isSurfaceVisible(state)) 1f
+                    else 0f
+            )
+        }
+
+    /**
+     * View params provided by the transition interactor for the most recently STARTED transition.
+     * This is used to run transition-specific animations on the surface.
+     *
+     * If null, there are no transition-specific view params needed for this transition and we will
+     * use a reasonable default.
+     */
+    @OptIn(ExperimentalCoroutinesApi::class)
+    private val transitionSpecificViewParams: Flow<KeyguardSurfaceBehindModel?> =
+        transitionInteractor.startedKeyguardTransitionStep.flatMapLatest { startedStep ->
+            when (startedStep.from) {
+                KeyguardState.LOCKSCREEN -> fromLockscreenInteractor.surfaceBehindModel
+                KeyguardState.PRIMARY_BOUNCER -> fromPrimaryBouncerInteractor.surfaceBehindModel
+                // Return null for other states, where no transition specific params are needed.
+                else -> flowOf(null)
+            }
+        }
+
+    fun setAnimatingSurface(animating: Boolean) {
+        repository.setAnimatingSurface(animating)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt
index 8c4c7ae..9382618 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt
@@ -17,17 +17,20 @@
 
 package com.android.systemui.keyguard.domain.interactor
 
+import android.util.Log
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dagger.qualifiers.Application
 import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
 import com.android.systemui.keyguard.shared.model.KeyguardState
 import com.android.systemui.keyguard.shared.model.KeyguardState.ALTERNATE_BOUNCER
 import com.android.systemui.keyguard.shared.model.KeyguardState.AOD
+import com.android.systemui.keyguard.shared.model.KeyguardState.DOZING
 import com.android.systemui.keyguard.shared.model.KeyguardState.DREAMING
 import com.android.systemui.keyguard.shared.model.KeyguardState.DREAMING_LOCKSCREEN_HOSTED
 import com.android.systemui.keyguard.shared.model.KeyguardState.GONE
 import com.android.systemui.keyguard.shared.model.KeyguardState.LOCKSCREEN
 import com.android.systemui.keyguard.shared.model.KeyguardState.OCCLUDED
+import com.android.systemui.keyguard.shared.model.KeyguardState.OFF
 import com.android.systemui.keyguard.shared.model.KeyguardState.PRIMARY_BOUNCER
 import com.android.systemui.keyguard.shared.model.TransitionState
 import com.android.systemui.keyguard.shared.model.TransitionStep
@@ -36,6 +39,7 @@
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.SharingStarted
 import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.combine
 import kotlinx.coroutines.flow.filter
 import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.flow.merge
@@ -46,8 +50,12 @@
 class KeyguardTransitionInteractor
 @Inject
 constructor(
-    private val repository: KeyguardTransitionRepository,
     @Application val scope: CoroutineScope,
+    private val repository: KeyguardTransitionRepository,
+    private val keyguardInteractor: dagger.Lazy<KeyguardInteractor>,
+    private val fromLockscreenTransitionInteractor: dagger.Lazy<FromLockscreenTransitionInteractor>,
+    private val fromPrimaryBouncerTransitionInteractor:
+        dagger.Lazy<FromPrimaryBouncerTransitionInteractor>,
 ) {
     private val TAG = this::class.simpleName
 
@@ -128,12 +136,11 @@
         repository.transition(PRIMARY_BOUNCER, GONE)
 
     /** OFF->LOCKSCREEN transition information. */
-    val offToLockscreenTransition: Flow<TransitionStep> =
-        repository.transition(KeyguardState.OFF, LOCKSCREEN)
+    val offToLockscreenTransition: Flow<TransitionStep> = repository.transition(OFF, LOCKSCREEN)
 
     /** DOZING->LOCKSCREEN transition information. */
     val dozingToLockscreenTransition: Flow<TransitionStep> =
-        repository.transition(KeyguardState.DOZING, LOCKSCREEN)
+        repository.transition(DOZING, LOCKSCREEN)
 
     /**
      * AOD<->LOCKSCREEN transition information, mapped to dozeAmount range of AOD (1f) <->
@@ -157,17 +164,30 @@
     val finishedKeyguardTransitionStep: Flow<TransitionStep> =
         repository.transitions.filter { step -> step.transitionState == TransitionState.FINISHED }
 
-    /** The destination state of the last started transition */
+    /** The destination state of the last started transition. */
     val startedKeyguardState: StateFlow<KeyguardState> =
         startedKeyguardTransitionStep
             .map { step -> step.to }
-            .stateIn(scope, SharingStarted.Eagerly, KeyguardState.OFF)
+            .stateIn(scope, SharingStarted.Eagerly, OFF)
 
     /** The last completed [KeyguardState] transition */
     val finishedKeyguardState: StateFlow<KeyguardState> =
         finishedKeyguardTransitionStep
             .map { step -> step.to }
             .stateIn(scope, SharingStarted.Eagerly, LOCKSCREEN)
+
+    /**
+     * Whether we're currently in a transition to a new [KeyguardState] and haven't yet completed
+     * it.
+     */
+    val isInTransitionToAnyState =
+            combine(
+                    startedKeyguardTransitionStep,
+                    finishedKeyguardState,
+            ) { startedStep, finishedState ->
+                startedStep.to != finishedState
+            }
+
     /**
      * The amount of transition into or out of the given [KeyguardState].
      *
@@ -187,4 +207,41 @@
                 }
             }
     }
+
+    fun transitionStepsFromState(fromState: KeyguardState): Flow<TransitionStep> {
+        return repository.transitions.filter { step -> step.from == fromState }
+    }
+
+    fun transitionStepsToState(toState: KeyguardState): Flow<TransitionStep> {
+        return repository.transitions.filter { step -> step.to == toState }
+    }
+
+    /**
+     * Called to start a transition that will ultimately dismiss the keyguard from the current
+     * state.
+     */
+    fun startDismissKeyguardTransition() {
+        when (startedKeyguardState.value) {
+            LOCKSCREEN -> fromLockscreenTransitionInteractor.get().dismissKeyguard()
+            PRIMARY_BOUNCER -> fromPrimaryBouncerTransitionInteractor.get().dismissPrimaryBouncer()
+            else ->
+                Log.e(
+                    "KeyguardTransitionInteractor",
+                    "We don't know how to dismiss keyguard from state " +
+                        "${startedKeyguardState.value}"
+                )
+        }
+    }
+
+    /** Whether we're in a transition to the given [KeyguardState], but haven't yet completed it. */
+    fun isInTransitionToState(
+            state: KeyguardState,
+    ): Flow<Boolean> {
+        return combine(
+                startedKeyguardTransitionStep,
+                finishedKeyguardState,
+        ) { startedStep, finishedState ->
+            startedStep.to == state && finishedState != state
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractor.kt
new file mode 100644
index 0000000..96bfdc6
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractor.kt
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.domain.interactor
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.keyguard.shared.model.BiometricUnlockModel
+import com.android.systemui.keyguard.shared.model.KeyguardState
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.flatMapLatest
+import kotlinx.coroutines.flow.flowOf
+import kotlinx.coroutines.flow.map
+import javax.inject.Inject
+
+@SysUISingleton
+class WindowManagerLockscreenVisibilityInteractor
+@Inject
+constructor(
+    keyguardInteractor: KeyguardInteractor,
+    transitionInteractor: KeyguardTransitionInteractor,
+    surfaceBehindInteractor: KeyguardSurfaceBehindInteractor,
+    fromLockscreenInteractor: FromLockscreenTransitionInteractor,
+    fromBouncerInteractor: FromPrimaryBouncerTransitionInteractor,
+) {
+    private val defaultSurfaceBehindVisibility =
+        transitionInteractor.finishedKeyguardState.map(::isSurfaceVisible)
+
+    /**
+     * Surface visibility provided by the From*TransitionInteractor responsible for the currently
+     * RUNNING transition, or null if the current transition does not require special surface
+     * visibility handling.
+     *
+     * An example of transition-specific visibility is swipe to unlock, where the surface should
+     * only be visible after swiping 20% of the way up the screen, and should become invisible again
+     * if the user swipes back down.
+     */
+    @OptIn(ExperimentalCoroutinesApi::class)
+    private val transitionSpecificSurfaceBehindVisibility: Flow<Boolean?> =
+        transitionInteractor.startedKeyguardTransitionStep
+            .flatMapLatest { startedStep ->
+                when (startedStep.from) {
+                    KeyguardState.LOCKSCREEN -> {
+                        fromLockscreenInteractor.surfaceBehindVisibility
+                    }
+                    KeyguardState.PRIMARY_BOUNCER -> {
+                        fromBouncerInteractor.surfaceBehindVisibility
+                    }
+                    else -> flowOf(null)
+                }
+            }
+            .distinctUntilChanged()
+
+    /**
+     * Surface visibility, which is either determined by the default visibility in the FINISHED
+     * KeyguardState, or the transition-specific visibility used during certain RUNNING transitions.
+     */
+    @OptIn(ExperimentalCoroutinesApi::class)
+    val surfaceBehindVisibility: Flow<Boolean> =
+        transitionInteractor
+                .isInTransitionToAnyState
+            .flatMapLatest { isInTransition ->
+                if (!isInTransition) {
+                    defaultSurfaceBehindVisibility
+                } else {
+                    combine(
+                        transitionSpecificSurfaceBehindVisibility,
+                        defaultSurfaceBehindVisibility,
+                    ) { transitionVisibility, defaultVisibility ->
+                        // Defer to the transition-specific visibility since we're RUNNING a
+                        // transition, but fall back to the default visibility if the current
+                        // transition's interactor did not specify a visibility.
+                        transitionVisibility ?: defaultVisibility
+                    }
+                }
+            }
+            .distinctUntilChanged()
+
+    /**
+     * Whether we're animating, or intend to animate, the surface behind the keyguard via remote
+     * animation. This is used to keep the RemoteAnimationTarget alive until we're done using it.
+     */
+    val usingKeyguardGoingAwayAnimation: Flow<Boolean> =
+        combine(
+                transitionInteractor.isInTransitionToState(KeyguardState.GONE),
+                transitionInteractor.finishedKeyguardState,
+                surfaceBehindInteractor.isAnimatingSurface
+            ) { isInTransitionToGone, finishedState, isAnimatingSurface ->
+                // We may still be animating the surface after the keyguard is fully GONE, since
+                // some animations (like the translation spring) are not tied directly to the
+                // transition step amount.
+                isInTransitionToGone || (finishedState == KeyguardState.GONE && isAnimatingSurface)
+            }
+            .distinctUntilChanged()
+
+    /**
+     * Whether the lockscreen is visible, from the Window Manager (WM) perspective.
+     *
+     * Note: This may briefly be true even if the lockscreen UI has animated out (alpha = 0f), as we
+     * only inform WM once we're done with the keyguard and we're fully GONE. Don't use this if you
+     * want to know if the AOD/clock/notifs/etc. are visible.
+     */
+    val lockscreenVisibility: Flow<Boolean> =
+        combine(
+                transitionInteractor.startedKeyguardTransitionStep,
+                transitionInteractor.finishedKeyguardState,
+            ) { startedStep, finishedState ->
+                // If we finished the transition, use the finished state. If we're running a
+                // transition, use the state we're transitioning FROM. This can be different from
+                // the last finished state if a transition is interrupted. For example, if we were
+                // transitioning from GONE to AOD and then started AOD -> LOCKSCREEN mid-transition,
+                // we want to immediately use the visibility for AOD (lockscreenVisibility=true)
+                // even though the lastFinishedState is still GONE (lockscreenVisibility=false).
+                if (finishedState == startedStep.to) finishedState else startedStep.from
+            }
+            .map(::isLockscreenVisible)
+            .distinctUntilChanged()
+
+    /**
+     * Whether always-on-display (AOD) is visible when the lockscreen is visible, from window
+     * manager's perspective.
+     *
+     * Note: This may be true even if AOD is not user-visible, such as when the light sensor
+     * indicates the device is in the user's pocket. Don't use this if you want to know if the AOD
+     * clock/smartspace/notif icons are visible.
+     */
+    val aodVisibility: Flow<Boolean> =
+        combine(
+                keyguardInteractor.isDozing,
+                keyguardInteractor.biometricUnlockState,
+            ) { isDozing, biometricUnlockState ->
+                // AOD is visible if we're dozing, unless we are wake and unlocking (where we go
+                // directly from AOD to unlocked while dozing).
+                isDozing && !BiometricUnlockModel.isWakeAndUnlock(biometricUnlockState)
+            }
+            .distinctUntilChanged()
+
+    companion object {
+        fun isSurfaceVisible(state: KeyguardState): Boolean {
+            return !isLockscreenVisible(state)
+        }
+
+        fun isLockscreenVisible(state: KeyguardState): Boolean {
+            return state != KeyguardState.GONE
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardSurfaceBehindModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardSurfaceBehindModel.kt
new file mode 100644
index 0000000..7fb5cfd
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardSurfaceBehindModel.kt
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.shared.model
+
+/**
+ * Models the appearance of the surface behind the keyguard, and (optionally) how it should be
+ * animating.
+ *
+ * This is intended to be an atomic, high-level description of the surface's appearance and related
+ * animations, which we can derive from the STARTED/FINISHED transition states rather than the
+ * individual TransitionSteps.
+ *
+ * For example, if we're transitioning from LOCKSCREEN to GONE, that means we should be
+ * animatingFromAlpha 0f -> 1f and animatingFromTranslationY 500f -> 0f.
+ * KeyguardSurfaceBehindAnimator can decide how best to implement this, depending on previously
+ * running animations, spring momentum, and other state.
+ */
+data class KeyguardSurfaceBehindModel(
+    val alpha: Float = 1f,
+
+    /**
+     * If provided, animate from this value to [alpha] unless an animation is already running, in
+     * which case we'll animate from the current value to [alpha].
+     */
+    val animateFromAlpha: Float = alpha,
+    val translationY: Float = 0f,
+
+    /**
+     * If provided, animate from this value to [translationY] unless an animation is already
+     * running, in which case we'll animate from the current value to [translationY].
+     */
+    val animateFromTranslationY: Float = translationY,
+) {
+    fun willAnimateAlpha(): Boolean {
+        return animateFromAlpha != alpha
+    }
+
+    fun willAnimateTranslationY(): Boolean {
+        return animateFromTranslationY != translationY
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardSurfaceBehindParamsApplier.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardSurfaceBehindParamsApplier.kt
new file mode 100644
index 0000000..a5b00e0
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardSurfaceBehindParamsApplier.kt
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.ui.binder
+
+import android.animation.Animator
+import android.animation.AnimatorListenerAdapter
+import android.animation.ValueAnimator
+import android.graphics.Matrix
+import android.util.Log
+import android.view.RemoteAnimationTarget
+import android.view.SurfaceControl
+import android.view.SyncRtSurfaceTransactionApplier
+import android.view.View
+import androidx.dynamicanimation.animation.FloatValueHolder
+import androidx.dynamicanimation.animation.SpringAnimation
+import androidx.dynamicanimation.animation.SpringForce
+import com.android.keyguard.KeyguardViewController
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.keyguard.TAG
+import com.android.systemui.keyguard.domain.interactor.KeyguardSurfaceBehindInteractor
+import com.android.systemui.keyguard.shared.model.KeyguardSurfaceBehindModel
+import com.android.wm.shell.animation.Interpolators
+import java.util.concurrent.Executor
+import javax.inject.Inject
+
+/**
+ * Applies [KeyguardSurfaceBehindViewParams] to a RemoteAnimationTarget, starting and managing
+ * animations as needed.
+ */
+@SysUISingleton
+class KeyguardSurfaceBehindParamsApplier
+@Inject
+constructor(
+    @Main private val executor: Executor,
+    private val keyguardViewController: KeyguardViewController,
+    private val interactor: KeyguardSurfaceBehindInteractor,
+) {
+    private var surfaceBehind: RemoteAnimationTarget? = null
+    private val surfaceTransactionApplier: SyncRtSurfaceTransactionApplier
+        get() = SyncRtSurfaceTransactionApplier(keyguardViewController.viewRootImpl.view)
+
+    private val matrix = Matrix()
+    private val tmpFloat = FloatArray(9)
+
+    private var animatedTranslationY = FloatValueHolder()
+    private val translateYSpring =
+        SpringAnimation(animatedTranslationY).apply {
+            spring =
+                SpringForce().apply {
+                    stiffness = 200f
+                    dampingRatio = 1f
+                }
+            addUpdateListener { _, _, _ -> applyToSurfaceBehind() }
+            addEndListener { _, _, _, _ -> 
+                try {
+                    updateIsAnimatingSurface()
+                } catch (e: NullPointerException) {
+                    // TODO(b/291645410): Remove when we can isolate DynamicAnimations.
+                    e.printStackTrace()
+                }
+            }
+        }
+
+    private var animatedAlpha = 0f
+    private var alphaAnimator =
+        ValueAnimator.ofFloat(0f, 1f).apply {
+            duration = 500
+            interpolator = Interpolators.ALPHA_IN
+            addUpdateListener {
+                animatedAlpha = it.animatedValue as Float
+                applyToSurfaceBehind()
+            }
+            addListener(
+                object : AnimatorListenerAdapter() {
+                    override fun onAnimationEnd(animation: Animator?) {
+                        updateIsAnimatingSurface()
+                    }
+                }
+            )
+        }
+
+    /**
+     * ViewParams to apply to the surface provided to [applyParamsToSurface]. If the surface is null
+     * these will be applied once someone gives us a surface via [applyParamsToSurface].
+     */
+    var viewParams: KeyguardSurfaceBehindModel = KeyguardSurfaceBehindModel()
+        set(newParams) {
+            field = newParams
+            startOrUpdateAnimators()
+            applyToSurfaceBehind()
+        }
+
+    /**
+     * Provides us with a surface to animate. We'll apply the [viewParams] to this surface and start
+     * any necessary animations.
+     */
+    fun applyParamsToSurface(surface: RemoteAnimationTarget) {
+        this.surfaceBehind = surface
+        startOrUpdateAnimators()
+    }
+
+    /**
+     * Notifies us that the [RemoteAnimationTarget] has been released, one way or another.
+     * Attempting to animate a released target will cause a crash.
+     *
+     * This can be called either because we finished animating the surface naturally, or by WM
+     * because external factors cancelled the remote animation (timeout, re-lock, etc). If it's the
+     * latter, cancel any outstanding animations we have.
+     */
+    fun notifySurfaceReleased() {
+        surfaceBehind = null
+
+        if (alphaAnimator.isRunning) {
+            alphaAnimator.cancel()
+        }
+
+        if (translateYSpring.isRunning) {
+            translateYSpring.cancel()
+        }
+    }
+
+    private fun startOrUpdateAnimators() {
+        if (surfaceBehind == null) {
+            return
+        }
+
+        if (viewParams.willAnimateAlpha()) {
+            var fromAlpha = viewParams.animateFromAlpha
+
+            if (alphaAnimator.isRunning) {
+                alphaAnimator.cancel()
+                fromAlpha = animatedAlpha
+            }
+
+            alphaAnimator.setFloatValues(fromAlpha, viewParams.alpha)
+            alphaAnimator.start()
+        }
+
+        if (viewParams.willAnimateTranslationY()) {
+            if (!translateYSpring.isRunning) {
+                // If the spring isn't running yet, set the start value. Otherwise, respect the
+                // current position.
+                animatedTranslationY.value = viewParams.animateFromTranslationY
+            }
+
+            translateYSpring.animateToFinalPosition(viewParams.translationY)
+        }
+
+        updateIsAnimatingSurface()
+    }
+
+    private fun updateIsAnimatingSurface() {
+        interactor.setAnimatingSurface(translateYSpring.isRunning || alphaAnimator.isRunning)
+    }
+
+    private fun applyToSurfaceBehind() {
+        surfaceBehind?.leash?.let { sc ->
+            executor.execute {
+                if (surfaceBehind == null) {
+                    Log.d(
+                        TAG,
+                        "Attempting to modify params of surface that isn't " +
+                            "animating. Ignoring."
+                    )
+                    matrix.set(Matrix.IDENTITY_MATRIX)
+                    return@execute
+                }
+
+                val translationY =
+                    if (translateYSpring.isRunning) animatedTranslationY.value
+                    else viewParams.translationY
+
+                val alpha =
+                    if (alphaAnimator.isRunning) {
+                        animatedAlpha
+                    } else {
+                        viewParams.alpha
+                    }
+
+                if (
+                    keyguardViewController.viewRootImpl.view?.visibility != View.VISIBLE &&
+                        sc.isValid
+                ) {
+                    with(SurfaceControl.Transaction()) {
+                        setMatrix(
+                            sc,
+                            matrix.apply { setTranslate(/* dx= */ 0f, translationY) },
+                            tmpFloat
+                        )
+                        setAlpha(sc, alpha)
+                        apply()
+                    }
+                } else {
+                    surfaceTransactionApplier.scheduleApply(
+                        SyncRtSurfaceTransactionApplier.SurfaceParams.Builder(sc)
+                            .withMatrix(matrix.apply { setTranslate(/* dx= */ 0f, translationY) })
+                            .withAlpha(alpha)
+                            .build()
+                    )
+                }
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardSurfaceBehindViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardSurfaceBehindViewBinder.kt
new file mode 100644
index 0000000..599f69f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardSurfaceBehindViewBinder.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.ui.binder
+
+import com.android.systemui.keyguard.WindowManagerLockscreenVisibilityManager
+import com.android.systemui.keyguard.ui.viewmodel.KeyguardSurfaceBehindViewModel
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * Binds the [WindowManagerLockscreenVisibilityManager] "view", which manages the visibility of the
+ * surface behind the keyguard.
+ */
+object KeyguardSurfaceBehindViewBinder {
+    @JvmStatic
+    fun bind(
+        viewModel: KeyguardSurfaceBehindViewModel,
+        applier: KeyguardSurfaceBehindParamsApplier,
+        scope: CoroutineScope
+    ) {
+        scope.launch { viewModel.surfaceBehindViewParams.collect { applier.viewParams = it } }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/WindowManagerLockscreenVisibilityViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/WindowManagerLockscreenVisibilityViewBinder.kt
new file mode 100644
index 0000000..fc0c78a
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/WindowManagerLockscreenVisibilityViewBinder.kt
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.ui.binder
+
+import com.android.systemui.keyguard.WindowManagerLockscreenVisibilityManager
+import com.android.systemui.keyguard.ui.viewmodel.WindowManagerLockscreenVisibilityViewModel
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+
+/**
+ * Binds the [WindowManagerLockscreenVisibilityManager] "view", which manages the visibility of the
+ * surface behind the keyguard.
+ */
+object WindowManagerLockscreenVisibilityViewBinder {
+    @JvmStatic
+    fun bind(
+        viewModel: WindowManagerLockscreenVisibilityViewModel,
+        lockscreenVisibilityManager: WindowManagerLockscreenVisibilityManager,
+        scope: CoroutineScope
+    ) {
+        scope.launch {
+            viewModel.surfaceBehindVisibility.collect {
+                lockscreenVisibilityManager.setSurfaceBehindVisibility(it)
+            }
+        }
+
+        scope.launch {
+            viewModel.lockscreenVisibility.collect {
+                lockscreenVisibilityManager.setLockscreenShown(it)
+            }
+        }
+
+        scope.launch {
+            viewModel.aodVisibility.collect { lockscreenVisibilityManager.setAodVisible(it) }
+        }
+
+        scope.launch {
+            viewModel.surfaceBehindAnimating.collect {
+                lockscreenVisibilityManager.setUsingGoingAwayRemoteAnimation(it)
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/preview/KeyguardPreviewRenderer.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/preview/KeyguardPreviewRenderer.kt
index ec97949..cf96458 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/preview/KeyguardPreviewRenderer.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/preview/KeyguardPreviewRenderer.kt
@@ -132,17 +132,17 @@
         if (featureFlags.isEnabled(Flags.MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA)) {
             keyguardRootViewModel.enablePreviewMode(
                 initiallySelectedSlotId =
-                    bundle.getString(
-                        KeyguardPreviewConstants.KEY_INITIALLY_SELECTED_SLOT_ID,
-                    ),
+                bundle.getString(
+                    KeyguardPreviewConstants.KEY_INITIALLY_SELECTED_SLOT_ID,
+                ),
                 shouldHighlightSelectedAffordance = shouldHighlightSelectedAffordance,
             )
         } else {
             bottomAreaViewModel.enablePreviewMode(
                 initiallySelectedSlotId =
-                    bundle.getString(
-                        KeyguardPreviewConstants.KEY_INITIALLY_SELECTED_SLOT_ID,
-                    ),
+                bundle.getString(
+                    KeyguardPreviewConstants.KEY_INITIALLY_SELECTED_SLOT_ID,
+                ),
                 shouldHighlightSelectedAffordance = shouldHighlightSelectedAffordance,
             )
         }
@@ -314,7 +314,7 @@
                     false,
                 ) as KeyguardBottomAreaView
         bottomAreaView.init(
-            viewModel = bottomAreaViewModel,
+                viewModel = bottomAreaViewModel,
         )
         parentView.addView(
             bottomAreaView,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSurfaceBehindViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSurfaceBehindViewModel.kt
new file mode 100644
index 0000000..4f52962
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSurfaceBehindViewModel.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.ui.viewmodel
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.keyguard.domain.interactor.KeyguardSurfaceBehindInteractor
+import javax.inject.Inject
+
+@SysUISingleton
+class KeyguardSurfaceBehindViewModel
+@Inject
+constructor(interactor: KeyguardSurfaceBehindInteractor) {
+    val surfaceBehindViewParams = interactor.viewParams
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/WindowManagerLockscreenVisibilityViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/WindowManagerLockscreenVisibilityViewModel.kt
new file mode 100644
index 0000000..f797640
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/WindowManagerLockscreenVisibilityViewModel.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.ui.viewmodel
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.keyguard.domain.interactor.WindowManagerLockscreenVisibilityInteractor
+import javax.inject.Inject
+
+@SysUISingleton
+class WindowManagerLockscreenVisibilityViewModel
+@Inject
+constructor(interactor: WindowManagerLockscreenVisibilityInteractor) {
+    val surfaceBehindVisibility = interactor.surfaceBehindVisibility
+    val surfaceBehindAnimating = interactor.usingKeyguardGoingAwayAnimation
+    val lockscreenVisibility = interactor.lockscreenVisibility
+    val aodVisibility = interactor.aodVisibility
+}
diff --git a/packages/SystemUI/src/com/android/systemui/logcat/LogAccessDialogActivity.java b/packages/SystemUI/src/com/android/systemui/logcat/LogAccessDialogActivity.java
index 81de607..2cfe5a7 100644
--- a/packages/SystemUI/src/com/android/systemui/logcat/LogAccessDialogActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/logcat/LogAccessDialogActivity.java
@@ -41,6 +41,7 @@
 import android.widget.Button;
 import android.widget.TextView;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.app.ILogAccessDialogCallback;
 import com.android.systemui.R;
 
@@ -69,7 +70,8 @@
 
     private AlertDialog.Builder mAlertDialog;
     private AlertDialog mAlert;
-    private View mAlertView;
+    @VisibleForTesting
+    protected View mAlertView;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -115,7 +117,10 @@
         mAlertDialog = new AlertDialog.Builder(this, themeId);
         mAlertDialog.setView(mAlertView);
         mAlertDialog.setOnCancelListener(dialog -> declineLogAccess());
-        mAlertDialog.setOnDismissListener(dialog -> finish());
+        mAlertDialog.setOnDismissListener(dialog -> {
+            mAlert = null;
+            finish();
+        });
 
         // show Alert
         mAlert = mAlertDialog.create();
@@ -127,12 +132,11 @@
     }
 
     @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        if (!isChangingConfigurations() && mAlert != null && mAlert.isShowing()) {
-            mAlert.dismiss();
+    protected void onStop() {
+        super.onStop();
+        if (!isChangingConfigurations() && mAlert != null) {
+            mAlert.cancel();
         }
-        mAlert = null;
     }
 
     private boolean readIntentInfo(Intent intent) {
@@ -170,7 +174,6 @@
                 case MSG_DISMISS_DIALOG:
                     if (mAlert != null) {
                         mAlert.dismiss();
-                        mAlert = null;
                         declineLogAccess();
                     }
                     break;
@@ -181,7 +184,7 @@
         }
     };
 
-    private String getTitleString(Context context, String callingPackage, int uid)
+    protected String getTitleString(Context context, String callingPackage, int uid)
             throws NameNotFoundException {
         PackageManager pm = context.getPackageManager();
 
@@ -238,13 +241,13 @@
         try {
             if (view.getId() == R.id.log_access_dialog_allow_button) {
                 mCallback.approveAccessForClient(mUid, mPackageName);
-                finish();
             } else if (view.getId() == R.id.log_access_dialog_deny_button) {
                 declineLogAccess();
-                finish();
             }
-        } catch (RemoteException e) {
-            finish();
+        } catch (RemoteException ignored) {
+            // Do nothing.
+        } finally {
+            mAlert.dismiss();
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/media/OWNERS b/packages/SystemUI/src/com/android/systemui/media/OWNERS
index 69ea57b..b2d00df 100644
--- a/packages/SystemUI/src/com/android/systemui/media/OWNERS
+++ b/packages/SystemUI/src/com/android/systemui/media/OWNERS
@@ -1 +1,5 @@
 per-file MediaProjectionPermissionActivity.java = michaelwr@google.com
+
+# Haptics team also works on Ringtone
+per-file NotificationPlayer.java = file:/services/core/java/com/android/server/vibrator/OWNERS
+per-file RingtonePlayer.java = file:/services/core/java/com/android/server/vibrator/OWNERS
diff --git a/packages/SystemUI/src/com/android/systemui/media/RingtonePlayer.java b/packages/SystemUI/src/com/android/systemui/media/RingtonePlayer.java
index 05e04a1..68202d5 100644
--- a/packages/SystemUI/src/com/android/systemui/media/RingtonePlayer.java
+++ b/packages/SystemUI/src/com/android/systemui/media/RingtonePlayer.java
@@ -16,6 +16,9 @@
 
 package com.android.systemui.media;
 
+import static java.util.Objects.requireNonNull;
+
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -34,6 +37,7 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
+import android.os.VibrationEffect;
 import android.provider.MediaStore;
 import android.util.Log;
 
@@ -53,7 +57,7 @@
 @SysUISingleton
 public class RingtonePlayer implements CoreStartable {
     private static final String TAG = "RingtonePlayer";
-    private static final boolean LOGD = false;
+    private static final boolean LOGD = true;
     private final Context mContext;
 
     // TODO: support Uri switching under same IBinder
@@ -86,11 +90,11 @@
      */
     private class Client implements IBinder.DeathRecipient {
         private final IBinder mToken;
-        private final Ringtone mRingtone;
+        private Ringtone mRingtone;
 
-        Client(IBinder token, Ringtone ringtone) {
-            mToken = token;
-            mRingtone = ringtone;
+        Client(@NonNull IBinder token, @NonNull Ringtone ringtone) {
+            mToken = requireNonNull(token);
+            mRingtone = requireNonNull(ringtone);
         }
 
         @Override
@@ -107,14 +111,22 @@
         @Override
         public void play(IBinder token, Uri uri, AudioAttributes aa, float volume, boolean looping)
                 throws RemoteException {
-            playWithVolumeShaping(token, uri, aa, volume, looping, null);
+            if (Ringtone.useRingtoneV2()) {
+                playRemoteRingtone(token, uri, aa, true, Ringtone.MEDIA_SOUND,
+                        null, volume, looping, /* hapticGenerator= */ false,
+                        null);
+            } else {
+                playWithVolumeShaping(token, uri, aa, volume, looping, null);
+            }
         }
+
         @Override
-        public void playWithVolumeShaping(IBinder token, Uri uri, AudioAttributes aa, float volume,
+        public void playWithVolumeShaping(
+                IBinder token, Uri uri, AudioAttributes aa, float volume,
                 boolean looping, @Nullable VolumeShaper.Configuration volumeShaperConfig)
                 throws RemoteException {
             if (LOGD) {
-                Log.d(TAG, "play(token=" + token + ", uri=" + uri + ", uid="
+                Log.d(TAG, "playWithVolumeShaping(token=" + token + ", uri=" + uri + ", uid="
                         + Binder.getCallingUid() + ")");
             }
             Client client;
@@ -126,10 +138,9 @@
             // waste the build.
             if (client == null) {
                 final UserHandle user = Binder.getCallingUserHandle();
-                Ringtone ringtone = new Ringtone(getContextForUser(user), false);
-                ringtone.setAudioAttributesField(aa);
-                ringtone.setUri(uri, volumeShaperConfig);
-                ringtone.createLocalMediaPlayer();
+                Ringtone ringtone = Ringtone.createV1WithCustomAudioAttributes(
+                        getContextForUser(user), aa, uri, volumeShaperConfig,
+                        /* allowRemote= */ false);
                 synchronized (mClients) {
                     client = mClients.get(token);
                     if (client == null) {
@@ -150,6 +161,54 @@
         }
 
         @Override
+        public void playRemoteRingtone(IBinder token, Uri uri, AudioAttributes aa,
+                boolean useExactAudioAttributes,
+                @Ringtone.RingtoneMedia int enabledMedia, @Nullable VibrationEffect vibrationEffect,
+                float volume,
+                boolean looping, boolean isHapticGeneratorEnabled,
+                @Nullable VolumeShaper.Configuration volumeShaperConfig)
+                throws RemoteException {
+            if (LOGD) {
+                Log.d(TAG, "playRemoteRingtone(token=" + token + ", uri=" + uri + ", uid="
+                        + Binder.getCallingUid() + ")");
+            }
+
+            // Don't hold the lock while constructing the ringtone, since it can be slow. The caller
+            // shouldn't call play on the same ringtone from 2 threads, so this shouldn't race and
+            // waste the build.
+            Client client;
+            synchronized (mClients) {
+                client = mClients.get(token);
+            }
+            if (client == null) {
+                final UserHandle user = Binder.getCallingUserHandle();
+                Ringtone ringtone = new Ringtone.Builder(getContextForUser(user), enabledMedia, aa)
+                        .setLocalOnly()
+                        .setUri(uri)
+                        .setLooping(looping)
+                        .setInitialSoundVolume(volume)
+                        .setUseExactAudioAttributes(useExactAudioAttributes)
+                        .setEnableHapticGenerator(isHapticGeneratorEnabled)
+                        .setVibrationEffect(vibrationEffect)
+                        .setVolumeShaperConfig(volumeShaperConfig)
+                        .build();
+                if (ringtone == null) {
+                    return;
+                }
+                synchronized (mClients) {
+                    client = mClients.get(token);
+                    if (client == null) {
+                        client = new Client(token, ringtone);
+                        token.linkToDeath(client, 0);
+                        mClients.put(token, client);
+                    }
+                }
+            }
+            // Ensure the client is initialized outside the all-clients lock, as it can be slow.
+            client.mRingtone.play();
+        }
+
+        @Override
         public void stop(IBinder token) {
             if (LOGD) Log.d(TAG, "stop(token=" + token + ")");
             Client client;
@@ -175,10 +234,10 @@
                 return false;
             }
         }
-
         @Override
         public void setPlaybackProperties(IBinder token, float volume, boolean looping,
-                boolean hapticGeneratorEnabled) {
+                                          boolean hapticGeneratorEnabled) {
+            // RingtoneV1-exclusive path.
             Client client;
             synchronized (mClients) {
                 client = mClients.get(token);
@@ -192,6 +251,39 @@
         }
 
         @Override
+        public void setHapticGeneratorEnabled(IBinder token, boolean hapticGeneratorEnabled) {
+            Client client;
+            synchronized (mClients) {
+                client = mClients.get(token);
+            }
+            if (client != null) {
+                client.mRingtone.setHapticGeneratorEnabled(hapticGeneratorEnabled);
+            }
+        }
+
+        @Override
+        public void setLooping(IBinder token, boolean looping) {
+            Client client;
+            synchronized (mClients) {
+                client = mClients.get(token);
+            }
+            if (client != null) {
+                client.mRingtone.setLooping(looping);
+            }
+        }
+
+        @Override
+        public void setVolume(IBinder token, float volume) {
+            Client client;
+            synchronized (mClients) {
+                client = mClients.get(token);
+            }
+            if (client != null) {
+                client.mRingtone.setVolume(volume);
+            }
+        }
+
+        @Override
         public void playAsync(Uri uri, UserHandle user, boolean looping, AudioAttributes aa) {
             if (LOGD) Log.d(TAG, "playAsync(uri=" + uri + ", user=" + user + ")");
             if (Binder.getCallingUid() != Process.SYSTEM_UID) {
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/LocalMediaManagerFactory.kt b/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/LocalMediaManagerFactory.kt
index ff763d8..785a1e8 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/LocalMediaManagerFactory.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/LocalMediaManagerFactory.kt
@@ -31,8 +31,7 @@
 ) {
     /** Creates a [LocalMediaManager] for the given package. */
     fun create(packageName: String): LocalMediaManager {
-        return InfoMediaManager(context, packageName, null, localBluetoothManager).run {
-            LocalMediaManager(context, localBluetoothManager, this, packageName)
-        }
+        return InfoMediaManager.createInstance(context, packageName, null, localBluetoothManager)
+            .run { LocalMediaManager(context, localBluetoothManager, this, packageName) }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDataManager.kt b/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDataManager.kt
index 576eb9e..55dcd88 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDataManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDataManager.kt
@@ -184,7 +184,7 @@
     private val tunerService: TunerService,
     private val mediaFlags: MediaFlags,
     private val logger: MediaUiEventLogger,
-    private val smartspaceManager: SmartspaceManager,
+    private val smartspaceManager: SmartspaceManager?,
     private val keyguardUpdateMonitor: KeyguardUpdateMonitor,
 ) : Dumpable, BcSmartspaceDataPlugin.SmartspaceTargetListener {
 
@@ -260,7 +260,7 @@
         tunerService: TunerService,
         mediaFlags: MediaFlags,
         logger: MediaUiEventLogger,
-        smartspaceManager: SmartspaceManager,
+        smartspaceManager: SmartspaceManager?,
         keyguardUpdateMonitor: KeyguardUpdateMonitor,
     ) : this(
         context,
@@ -347,7 +347,7 @@
         // Register for Smartspace data updates.
         smartspaceMediaDataProvider.registerListener(this)
         smartspaceSession =
-            smartspaceManager.createSmartspaceSession(
+            smartspaceManager?.createSmartspaceSession(
                 SmartspaceConfig.Builder(context, SMARTSPACE_UI_SURFACE_LABEL).build()
             )
         smartspaceSession?.let {
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDeviceManager.kt b/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDeviceManager.kt
index 0a5f857..c90a3c1 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDeviceManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/pipeline/MediaDeviceManager.kt
@@ -71,7 +71,7 @@
     private val entries: MutableMap<String, Entry> = mutableMapOf()
 
     init {
-        dumpManager.registerDumpable(javaClass.name, this)
+        dumpManager.registerDumpable(this)
     }
 
     /** Add a listener for changes to the media route (ie. device). */
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 b431bab..d281f50 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
@@ -193,7 +193,7 @@
         mKeyGuardManager = keyGuardManager;
         mFeatureFlags = featureFlags;
         mUserTracker = userTracker;
-        InfoMediaManager imm = new InfoMediaManager(mContext, packageName, null, lbm);
+        InfoMediaManager imm = InfoMediaManager.createInstance(mContext, packageName, null, lbm);
         mLocalMediaManager = new LocalMediaManager(mContext, lbm, imm, packageName);
         mMetricLogger = new MediaOutputMetricLogger(mContext, mPackageName);
         mDialogLaunchAnimator = dialogLaunchAnimator;
@@ -824,18 +824,12 @@
     }
 
     List<RoutingSessionInfo> getActiveRemoteMediaDevices() {
-        final List<RoutingSessionInfo> sessionInfos = new ArrayList<>();
-        for (RoutingSessionInfo info : mLocalMediaManager.getActiveMediaSession()) {
-            if (!info.isSystemSession()) {
-                sessionInfos.add(info);
-            }
-        }
-        return sessionInfos;
+        return new ArrayList<>(mLocalMediaManager.getRemoteRoutingSessions());
     }
 
     void adjustVolume(MediaDevice device, int volume) {
         ThreadUtils.postOnBackgroundThread(() -> {
-            device.requestSetVolume(volume);
+            mLocalMediaManager.adjustDeviceVolume(device, volume);
         });
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/privacy/television/PrivacyChipDrawable.java b/packages/SystemUI/src/com/android/systemui/privacy/television/PrivacyChipDrawable.java
deleted file mode 100644
index 08911d4..0000000
--- a/packages/SystemUI/src/com/android/systemui/privacy/television/PrivacyChipDrawable.java
+++ /dev/null
@@ -1,236 +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.privacy.television;
-
-import android.animation.Animator;
-import android.animation.AnimatorInflater;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.ColorFilter;
-import android.graphics.Paint;
-import android.graphics.Path;
-import android.graphics.PixelFormat;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.drawable.Drawable;
-import android.util.Log;
-import android.util.MathUtils;
-import android.view.Gravity;
-
-import androidx.annotation.Keep;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.android.systemui.R;
-
-/**
- * Drawable that can go from being the background of the privacy icons to a small dot.
- * The icons are not included.
- */
-public class PrivacyChipDrawable extends Drawable {
-    private static final String TAG = PrivacyChipDrawable.class.getSimpleName();
-    private static final boolean DEBUG = false;
-
-    private final Paint mChipPaint;
-    private final Paint mBgPaint;
-    private final Rect mTmpRect = new Rect();
-    private final Rect mBgRect = new Rect();
-    private final RectF mTmpRectF = new RectF();
-    private final Path mPath = new Path();
-    private final Animator mCollapse;
-    private final Animator mExpand;
-    private final int mLayoutDirection;
-    private final int mBgWidth;
-    private final int mBgHeight;
-    private final int mBgRadius;
-    private final int mDotSize;
-    private final float mExpandedChipRadius;
-    private final float mCollapsedChipRadius;
-
-    private final boolean mCollapseToDot;
-
-    private boolean mIsExpanded = true;
-    private float mCollapseProgress = 0f;
-
-    public PrivacyChipDrawable(Context context, int chipColorRes, boolean collapseToDot) {
-        mCollapseToDot = collapseToDot;
-
-        mChipPaint = new Paint();
-        mChipPaint.setStyle(Paint.Style.FILL);
-        mChipPaint.setColor(context.getColor(chipColorRes));
-        mChipPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
-
-        mBgPaint = new Paint();
-        mBgPaint.setStyle(Paint.Style.FILL);
-        mBgPaint.setColor(context.getColor(R.color.privacy_chip_dot_bg_tint));
-        mBgPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
-
-        Resources res = context.getResources();
-        mLayoutDirection = res.getConfiguration().getLayoutDirection();
-        mBgWidth = res.getDimensionPixelSize(R.dimen.privacy_chip_dot_bg_width);
-        mBgHeight = res.getDimensionPixelSize(R.dimen.privacy_chip_dot_bg_height);
-        mBgRadius = res.getDimensionPixelSize(R.dimen.privacy_chip_dot_bg_radius);
-        mDotSize = res.getDimensionPixelSize(R.dimen.privacy_chip_dot_size);
-
-        mExpandedChipRadius = res.getDimensionPixelSize(R.dimen.privacy_chip_radius);
-        mCollapsedChipRadius = res.getDimensionPixelSize(R.dimen.privacy_chip_dot_radius);
-
-        mExpand = AnimatorInflater.loadAnimator(context, R.anim.tv_privacy_chip_expand);
-        mExpand.setTarget(this);
-        mCollapse = AnimatorInflater.loadAnimator(context, R.anim.tv_privacy_chip_collapse);
-        mCollapse.setTarget(this);
-    }
-
-    /**
-     * @return how far the chip is currently collapsed.
-     * @see #setCollapseProgress(float)
-     */
-    @Keep
-    public float getCollapseProgress() {
-        return mCollapseProgress;
-    }
-
-    /**
-     * Sets the collapsing progress of the chip to its collapsed state.
-     * @param pct How far the chip is collapsed, in the range 0-1.
-     *            0=fully expanded, 1=fully collapsed.
-     */
-    @Keep
-    public void setCollapseProgress(float pct) {
-        mCollapseProgress = pct;
-        invalidateSelf();
-    }
-
-    @Override
-    public void draw(@NonNull Canvas canvas) {
-        if (mCollapseProgress > 0f) {
-            // draw background
-            getBackgroundBounds(mBgRect);
-            mTmpRectF.set(mBgRect);
-            canvas.drawRoundRect(mTmpRectF, mBgRadius, mBgRadius, mBgPaint);
-        }
-
-        getForegroundBounds(mTmpRectF);
-        float radius = MathUtils.lerp(
-                mExpandedChipRadius,
-                mCollapseToDot ? mCollapsedChipRadius : mBgRadius,
-                mCollapseProgress);
-
-        canvas.drawRoundRect(mTmpRectF, radius, radius, mChipPaint);
-    }
-
-    private void getBackgroundBounds(Rect out) {
-        Rect bounds = getBounds();
-        Gravity.apply(Gravity.END, mBgWidth, mBgHeight, bounds, out, mLayoutDirection);
-    }
-
-    private void getCollapsedForegroundBounds(Rect out) {
-        Rect bounds = getBounds();
-        getBackgroundBounds(mBgRect);
-        if (mCollapseToDot) {
-            Gravity.apply(Gravity.CENTER, mDotSize, mDotSize, mBgRect, out);
-        } else {
-            out.set(bounds.left, mBgRect.top, bounds.right, mBgRect.bottom);
-        }
-    }
-
-    private void getForegroundBounds(RectF out) {
-        Rect bounds = getBounds();
-        getCollapsedForegroundBounds(mTmpRect);
-        lerpRect(bounds, mTmpRect, mCollapseProgress, out);
-    }
-
-    private void lerpRect(Rect start, Rect stop, float amount, RectF out) {
-        float left = MathUtils.lerp(start.left, stop.left, amount);
-        float top = MathUtils.lerp(start.top, stop.top, amount);
-        float right = MathUtils.lerp(start.right, stop.right, amount);
-        float bottom = MathUtils.lerp(start.bottom, stop.bottom, amount);
-        out.set(left, top, right, bottom);
-    }
-
-    /**
-     * Clips the given canvas to this chip's foreground shape.
-     * @param canvas Canvas to clip.
-     */
-    public void clipToForeground(Canvas canvas) {
-        getForegroundBounds(mTmpRectF);
-        float radius = MathUtils.lerp(
-                mExpandedChipRadius,
-                mCollapseToDot ? mCollapsedChipRadius : mBgRadius,
-                mCollapseProgress);
-
-        mPath.reset();
-        mPath.addRoundRect(mTmpRectF, radius, radius, Path.Direction.CW);
-        canvas.clipPath(mPath);
-    }
-
-    @Override
-    protected void onBoundsChange(@NonNull Rect bounds) {
-        super.onBoundsChange(bounds);
-        invalidateSelf();
-    }
-
-    @Override
-    public void setAlpha(int alpha) {
-        mChipPaint.setAlpha(alpha);
-        mBgPaint.setAlpha(alpha);
-    }
-
-    /**
-     * Transitions to a full chip.
-     *
-     * @param animate Whether to animate the change to a full chip, or expand instantly.
-     */
-    public void expand(boolean animate) {
-        if (DEBUG) Log.d(TAG, "expanding");
-        if (mIsExpanded) {
-            return;
-        }
-        mIsExpanded = true;
-        if (animate) {
-            mCollapse.cancel();
-            mExpand.start();
-        } else {
-            mCollapseProgress = 0f;
-            invalidateSelf();
-        }
-    }
-
-    /**
-     * Starts the animation to a dot.
-     */
-    public void collapse() {
-        if (DEBUG) Log.d(TAG, "collapsing");
-        if (!mIsExpanded) {
-            return;
-        }
-        mIsExpanded = false;
-        mExpand.cancel();
-        mCollapse.start();
-    }
-
-    @Override
-    public void setColorFilter(@Nullable ColorFilter colorFilter) {
-        // no-op
-    }
-
-    @Override
-    public int getOpacity() {
-        return PixelFormat.TRANSLUCENT;
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/privacy/television/PrivacyItemsChip.java b/packages/SystemUI/src/com/android/systemui/privacy/television/PrivacyItemsChip.java
deleted file mode 100644
index 158a591..0000000
--- a/packages/SystemUI/src/com/android/systemui/privacy/television/PrivacyItemsChip.java
+++ /dev/null
@@ -1,247 +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.privacy.television;
-
-import android.annotation.ColorRes;
-import android.annotation.IntDef;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.drawable.Drawable;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-
-import androidx.annotation.NonNull;
-
-import com.android.systemui.R;
-import com.android.systemui.privacy.PrivacyType;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-/**
- * View that shows indicator icons for privacy items.
- */
-public class PrivacyItemsChip extends FrameLayout {
-    private static final String TAG = "PrivacyItemsChip";
-    private static final boolean DEBUG = false;
-
-    /**
-     * Configuration for a PrivacyItemsChip's appearance.
-     */
-    public static class ChipConfig {
-        public final List<PrivacyType> privacyTypes;
-        @ColorRes
-        public final int colorRes;
-        public final boolean collapseToDot;
-
-        /**
-         * @param privacyTypes Privacy types to show icons for, in order.
-         * @param colorRes Color resource for the chip's foreground color.
-         * @param collapseToDot Whether to collapse the chip in to a dot,
-         *                      or just collapse it into a smaller chip with icons still visible.
-         */
-        public ChipConfig(@NonNull List<PrivacyType> privacyTypes, int colorRes,
-                boolean collapseToDot) {
-            this.privacyTypes = privacyTypes;
-            this.colorRes = colorRes;
-            this.collapseToDot = collapseToDot;
-        }
-    }
-
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef(prefix = {"STATE_"}, value = {
-            STATE_NOT_SHOWN,
-            STATE_EXPANDED,
-            STATE_COLLAPSED,
-    })
-    public @interface State {
-    }
-
-    private static final int STATE_NOT_SHOWN = 0;
-    private static final int STATE_EXPANDED = 1;
-    private static final int STATE_COLLAPSED = 2;
-
-    private final ChipConfig mConfig;
-    private final int mIconSize;
-    private final int mCollapsedIconSize;
-    private final int mIconMarginHorizontal;
-    private final PrivacyChipDrawable mChipBackgroundDrawable;
-    private final List<ImageView> mIcons = new ArrayList<>();
-
-    @State
-    private int mState = STATE_NOT_SHOWN;
-
-    public PrivacyItemsChip(@NonNull Context context, @NonNull ChipConfig config) {
-        super(context);
-        mConfig = config;
-        setVisibility(View.GONE);
-
-        Resources res = context.getResources();
-        mIconSize = res.getDimensionPixelSize(R.dimen.privacy_chip_icon_size);
-        mCollapsedIconSize = res.getDimensionPixelSize(R.dimen.privacy_chip_collapsed_icon_size);
-        mIconMarginHorizontal =
-                res.getDimensionPixelSize(R.dimen.privacy_chip_icon_margin_in_between);
-
-        LayoutInflater.from(context).inflate(R.layout.tv_ongoing_privacy_chip, this);
-        LinearLayout iconsContainer = findViewById(R.id.icons_container);
-
-        mChipBackgroundDrawable = new PrivacyChipDrawable(
-                context, config.colorRes, config.collapseToDot);
-        mChipBackgroundDrawable.setCallback(new Drawable.Callback() {
-            @Override
-            public void invalidateDrawable(@NonNull Drawable who) {
-                invalidate();
-            }
-
-            @Override
-            public void scheduleDrawable(@NonNull Drawable who, @NonNull Runnable what, long when) {
-            }
-
-            @Override
-            public void unscheduleDrawable(@NonNull Drawable who, @NonNull Runnable what) {
-            }
-        });
-
-        setBackground(mChipBackgroundDrawable);
-
-        for (PrivacyType type : config.privacyTypes) {
-            ImageView typeIconView = new ImageView(context);
-            Drawable icon = type.getIcon(context);
-            icon.mutate().setTint(context.getColor(R.color.privacy_icon_tint));
-
-            typeIconView.setImageDrawable(icon);
-            typeIconView.setScaleType(ImageView.ScaleType.FIT_CENTER);
-            mIcons.add(typeIconView);
-            iconsContainer.addView(typeIconView, mIconSize, mIconSize);
-            LinearLayout.LayoutParams lp =
-                    (LinearLayout.LayoutParams) typeIconView.getLayoutParams();
-            lp.leftMargin = mIconMarginHorizontal;
-            lp.rightMargin = mIconMarginHorizontal;
-            typeIconView.setVisibility(View.GONE);
-        }
-    }
-
-    /**
-     * Sets the active privacy types, and expands the chip if there are active items and the chip is
-     * currently collapsed, or hides the chip if there are no active items.
-     *
-     * @param types The set of active privacy types. Only types configured in {@link ChipConfig}
-     *              are shown.
-     */
-    public void expandForTypes(Set<PrivacyType> types) {
-        if (DEBUG) Log.d(TAG, "expandForTypes, state=" + stateToString(mState));
-
-        boolean hasActiveTypes = false;
-
-        for (int i = 0; i < mConfig.privacyTypes.size(); i++) {
-            PrivacyType type = mConfig.privacyTypes.get(i);
-            ImageView icon = mIcons.get(i);
-            boolean isTypeActive = types.contains(type);
-            hasActiveTypes = hasActiveTypes || isTypeActive;
-
-            icon.setVisibility(isTypeActive ? View.VISIBLE : View.GONE);
-
-            // Set icon size to expanded size
-            ViewGroup.LayoutParams lp = icon.getLayoutParams();
-            lp.width = mIconSize;
-            lp.height = mIconSize;
-            icon.requestLayout();
-        }
-
-        if (hasActiveTypes) {
-            if (DEBUG) Log.d(TAG, "Chip has active types, expanding");
-            if (mState == STATE_NOT_SHOWN) {
-                mChipBackgroundDrawable.expand(/* animate= */ false);
-            } else if (mState == STATE_COLLAPSED) {
-                mChipBackgroundDrawable.expand(/* animate= */ true);
-            }
-            setVisibility(View.VISIBLE);
-            setState(STATE_EXPANDED);
-        } else {
-            if (DEBUG) Log.d(TAG, "Chip has no active types, hiding");
-            setVisibility(View.GONE);
-            setState(STATE_NOT_SHOWN);
-        }
-    }
-
-    /**
-     * Collapses this chip if currently expanded.
-     */
-    public void collapse() {
-        if (DEBUG) Log.d(TAG, "collapse");
-
-        if (mState != STATE_EXPANDED) {
-            return;
-        }
-        setState(STATE_COLLAPSED);
-
-        for (ImageView icon : mIcons) {
-            if (mConfig.collapseToDot) {
-                icon.setVisibility(View.GONE);
-            } else {
-                ViewGroup.LayoutParams lp = icon.getLayoutParams();
-                lp.width = mCollapsedIconSize;
-                lp.height = mCollapsedIconSize;
-                icon.requestLayout();
-            }
-        }
-
-        mChipBackgroundDrawable.collapse();
-    }
-
-    public boolean isExpanded() {
-        return mState == STATE_EXPANDED;
-    }
-
-    private void setState(@State int state) {
-        if (mState != state) {
-            if (DEBUG) Log.d(TAG, "State changed: " + stateToString(state));
-            mState = state;
-        }
-    }
-
-    @Override
-    protected void dispatchDraw(Canvas canvas) {
-        mChipBackgroundDrawable.clipToForeground(canvas);
-        super.dispatchDraw(canvas);
-    }
-
-    /**
-     * Used in debug logs.
-     */
-    private static String stateToString(@State int state) {
-        switch (state) {
-            case STATE_NOT_SHOWN:
-                return "NOT_SHOWN";
-            case STATE_EXPANDED:
-                return "EXPANDED";
-            case STATE_COLLAPSED:
-                return "COLLAPSED";
-            default:
-                return "INVALID";
-        }
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/privacy/television/TvPrivacyChipsController.java b/packages/SystemUI/src/com/android/systemui/privacy/television/TvPrivacyChipsController.java
deleted file mode 100644
index 1c47799..0000000
--- a/packages/SystemUI/src/com/android/systemui/privacy/television/TvPrivacyChipsController.java
+++ /dev/null
@@ -1,511 +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.privacy.television;
-
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.annotation.UiThread;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.PixelFormat;
-import android.graphics.Rect;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.RemoteException;
-import android.transition.AutoTransition;
-import android.transition.ChangeBounds;
-import android.transition.Fade;
-import android.transition.Transition;
-import android.transition.TransitionManager;
-import android.transition.TransitionSet;
-import android.util.ArraySet;
-import android.util.Log;
-import android.view.ContextThemeWrapper;
-import android.view.Gravity;
-import android.view.IWindowManager;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
-import android.view.WindowManager;
-import android.view.animation.AnimationUtils;
-import android.view.animation.Interpolator;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-
-import com.android.systemui.CoreStartable;
-import com.android.systemui.R;
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.privacy.PrivacyItem;
-import com.android.systemui.privacy.PrivacyItemController;
-import com.android.systemui.privacy.PrivacyType;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-
-import javax.inject.Inject;
-
-/**
- * A SystemUI component responsible for notifying the user whenever an application is
- * recording audio, camera, the screen, or accessing the location.
- */
-@SysUISingleton
-public class TvPrivacyChipsController 
-        implements CoreStartable, PrivacyItemController.Callback {
-    private static final String TAG = "TvPrivacyChipsController";
-    private static final boolean DEBUG = false;
-
-    // This title is used in CameraMicIndicatorsPermissionTest and
-    // RecognitionServiceMicIndicatorTest.
-    private static final String LAYOUT_PARAMS_TITLE = "MicrophoneCaptureIndicator";
-
-    // Chips configuration. We're not showing a location indicator on TV.
-    static final List<PrivacyItemsChip.ChipConfig> CHIPS = Arrays.asList(
-            new PrivacyItemsChip.ChipConfig(
-                    Collections.singletonList(PrivacyType.TYPE_MEDIA_PROJECTION),
-                    R.color.privacy_media_projection_chip,
-                    /* collapseToDot= */ false),
-            new PrivacyItemsChip.ChipConfig(
-                    Arrays.asList(PrivacyType.TYPE_CAMERA, PrivacyType.TYPE_MICROPHONE),
-                    R.color.privacy_mic_cam_chip,
-                    /* collapseToDot= */ true)
-    );
-
-    // Avoid multiple messages after rapid changes such as starting/stopping both camera and mic.
-    private static final int ACCESSIBILITY_ANNOUNCEMENT_DELAY_MS = 500;
-
-    /**
-     * Time to collect privacy item updates before applying them.
-     * Since MediaProjection and AppOps come from different data sources,
-     * PrivacyItem updates when screen & audio recording ends do not come at the same time.
-     * Without this, if eg. MediaProjection ends first, you'd see the microphone chip expand and
-     * almost immediately fade out as it is expanding. With this, the two chips disappear together.
-     */
-    private static final int PRIVACY_ITEM_DEBOUNCE_TIMEOUT_MS = 200;
-
-    // How long chips stay expanded after an update.
-    private static final int EXPANDED_DURATION_MS = 4000;
-
-    private final Context mContext;
-    private final Handler mUiThreadHandler = new Handler(Looper.getMainLooper());
-    private final Runnable mCollapseRunnable = this::collapseChips;
-    private final Runnable mUpdatePrivacyItemsRunnable = this::updateChipsAndAnnounce;
-    private final Runnable mAccessibilityRunnable = this::makeAccessibilityAnnouncement;
-
-    private final PrivacyItemController mPrivacyItemController;
-    private final IWindowManager mIWindowManager;
-    private final Rect[] mBounds = new Rect[4];
-    private final TransitionSet mTransition;
-    private final TransitionSet mCollapseTransition;
-    private boolean mIsRtl;
-
-    @Nullable
-    private ViewGroup mChipsContainer;
-    @Nullable
-    private List<PrivacyItemsChip> mChips;
-    @NonNull
-    private List<PrivacyItem> mPrivacyItems = Collections.emptyList();
-    @NonNull
-    private final List<PrivacyItem> mItemsBeforeLastAnnouncement = new ArrayList<>();
-
-    @Inject
-    public TvPrivacyChipsController(Context context, PrivacyItemController privacyItemController,
-            IWindowManager iWindowManager) {
-        mContext = context;
-        if (DEBUG) Log.d(TAG, "TvPrivacyChipsController running");
-        mPrivacyItemController = privacyItemController;
-        mIWindowManager = iWindowManager;
-
-        Resources res = mContext.getResources();
-        mIsRtl = res.getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
-        updateStaticPrivacyIndicatorBounds();
-
-        Interpolator collapseInterpolator = AnimationUtils.loadInterpolator(context,
-                R.interpolator.tv_privacy_chip_collapse_interpolator);
-        Interpolator expandInterpolator = AnimationUtils.loadInterpolator(context,
-                R.interpolator.tv_privacy_chip_expand_interpolator);
-
-        TransitionSet chipFadeTransition = new TransitionSet()
-                .addTransition(new Fade(Fade.IN))
-                .addTransition(new Fade(Fade.OUT));
-        chipFadeTransition.setOrdering(TransitionSet.ORDERING_TOGETHER);
-        chipFadeTransition.excludeTarget(ImageView.class, true);
-
-        Transition chipBoundsExpandTransition = new ChangeBounds();
-        chipBoundsExpandTransition.excludeTarget(ImageView.class, true);
-        chipBoundsExpandTransition.setInterpolator(expandInterpolator);
-
-        Transition chipBoundsCollapseTransition = new ChangeBounds();
-        chipBoundsCollapseTransition.excludeTarget(ImageView.class, true);
-        chipBoundsCollapseTransition.setInterpolator(collapseInterpolator);
-
-        TransitionSet iconCollapseTransition = new AutoTransition();
-        iconCollapseTransition.setOrdering(TransitionSet.ORDERING_TOGETHER);
-        iconCollapseTransition.addTarget(ImageView.class);
-        iconCollapseTransition.setInterpolator(collapseInterpolator);
-
-        TransitionSet iconExpandTransition = new AutoTransition();
-        iconExpandTransition.setOrdering(TransitionSet.ORDERING_TOGETHER);
-        iconExpandTransition.addTarget(ImageView.class);
-        iconExpandTransition.setInterpolator(expandInterpolator);
-
-        mTransition = new TransitionSet()
-                .addTransition(chipFadeTransition)
-                .addTransition(chipBoundsExpandTransition)
-                .addTransition(iconExpandTransition)
-                .setOrdering(TransitionSet.ORDERING_TOGETHER)
-                .setDuration(res.getInteger(R.integer.privacy_chip_animation_millis));
-
-        mCollapseTransition = new TransitionSet()
-                .addTransition(chipFadeTransition)
-                .addTransition(chipBoundsCollapseTransition)
-                .addTransition(iconCollapseTransition)
-                .setOrdering(TransitionSet.ORDERING_TOGETHER)
-                .setDuration(res.getInteger(R.integer.privacy_chip_animation_millis));
-
-        Transition.TransitionListener transitionListener = new Transition.TransitionListener() {
-            @Override
-            public void onTransitionStart(Transition transition) {
-                if (DEBUG) Log.v(TAG, "onTransitionStart");
-            }
-
-            @Override
-            public void onTransitionEnd(Transition transition) {
-                if (DEBUG) Log.v(TAG, "onTransitionEnd");
-                if (mChips != null) {
-                    boolean hasVisibleChip = false;
-                    boolean hasExpandedChip = false;
-                    for (PrivacyItemsChip chip : mChips) {
-                        hasVisibleChip = hasVisibleChip || chip.getVisibility() == View.VISIBLE;
-                        hasExpandedChip = hasExpandedChip || chip.isExpanded();
-                    }
-
-                    if (!hasVisibleChip) {
-                        if (DEBUG) Log.d(TAG, "No chips visible anymore");
-                        removeIndicatorView();
-                    } else if (hasExpandedChip) {
-                        if (DEBUG) Log.d(TAG, "Has expanded chips");
-                        collapseLater();
-                    }
-                }
-            }
-
-            @Override
-            public void onTransitionCancel(Transition transition) {
-            }
-
-            @Override
-            public void onTransitionPause(Transition transition) {
-            }
-
-            @Override
-            public void onTransitionResume(Transition transition) {
-            }
-        };
-
-        mTransition.addListener(transitionListener);
-        mCollapseTransition.addListener(transitionListener);
-    }
-
-    @Override
-    public void onConfigurationChanged(Configuration config) {
-        boolean updatedRtl = config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
-        if (mIsRtl == updatedRtl) {
-            return;
-        }
-        mIsRtl = updatedRtl;
-
-        // Update privacy chip location.
-        if (mChipsContainer != null) {
-            removeIndicatorView();
-            createAndShowIndicator();
-        }
-        updateStaticPrivacyIndicatorBounds();
-    }
-
-    @Override
-    public void start() {
-        mPrivacyItemController.addCallback(this);
-    }
-
-    @UiThread
-    @Override
-    public void onPrivacyItemsChanged(List<PrivacyItem> privacyItems) {
-        if (DEBUG) Log.d(TAG, "onPrivacyItemsChanged");
-
-        List<PrivacyItem> filteredPrivacyItems = new ArrayList<>(privacyItems);
-        if (filteredPrivacyItems.removeIf(
-                privacyItem -> !isPrivacyTypeShown(privacyItem.getPrivacyType()))) {
-            if (DEBUG) Log.v(TAG, "Removed privacy items we don't show");
-        }
-
-        // Do they have the same elements? (order doesn't matter)
-        if (privacyItems.size() == mPrivacyItems.size() && mPrivacyItems.containsAll(
-                privacyItems)) {
-            if (DEBUG) Log.d(TAG, "No change to relevant privacy items");
-            return;
-        }
-
-        mPrivacyItems = privacyItems;
-
-        if (!mUiThreadHandler.hasCallbacks(mUpdatePrivacyItemsRunnable)) {
-            mUiThreadHandler.postDelayed(mUpdatePrivacyItemsRunnable,
-                    PRIVACY_ITEM_DEBOUNCE_TIMEOUT_MS);
-        }
-    }
-
-    private boolean isPrivacyTypeShown(@NonNull PrivacyType type) {
-        for (PrivacyItemsChip.ChipConfig chip : CHIPS) {
-            if (chip.privacyTypes.contains(type)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @UiThread
-    private void updateChipsAndAnnounce() {
-        updateChips();
-        postAccessibilityAnnouncement();
-    }
-
-    private void updateStaticPrivacyIndicatorBounds() {
-        Resources res = mContext.getResources();
-        int mMaxExpandedWidth = res.getDimensionPixelSize(R.dimen.privacy_chips_max_width);
-        int mMaxExpandedHeight = res.getDimensionPixelSize(R.dimen.privacy_chip_height);
-        int mChipMarginTotal = 2 * res.getDimensionPixelSize(R.dimen.privacy_chip_margin);
-
-        final WindowManager windowManager = mContext.getSystemService(WindowManager.class);
-        Rect screenBounds = windowManager.getCurrentWindowMetrics().getBounds();
-        mBounds[0] = new Rect(
-                mIsRtl ? screenBounds.left
-                        : screenBounds.right - mMaxExpandedWidth,
-                screenBounds.top,
-                mIsRtl ? screenBounds.left + mMaxExpandedWidth
-                        : screenBounds.right,
-                screenBounds.top + mChipMarginTotal + mMaxExpandedHeight
-        );
-
-        if (DEBUG) Log.v(TAG, "privacy indicator bounds: " + mBounds[0].toShortString());
-
-        try {
-            mIWindowManager.updateStaticPrivacyIndicatorBounds(mContext.getDisplayId(), mBounds);
-        } catch (RemoteException e) {
-            Log.w(TAG, "could not update privacy indicator bounds");
-        }
-    }
-
-    @UiThread
-    private void updateChips() {
-        if (DEBUG) Log.d(TAG, "updateChips: " + mPrivacyItems.size() + " privacy items");
-
-        if (mChipsContainer == null) {
-            if (!mPrivacyItems.isEmpty()) {
-                createAndShowIndicator();
-            }
-            return;
-        }
-
-        Set<PrivacyType> activePrivacyTypes = new ArraySet<>();
-        mPrivacyItems.forEach(item -> activePrivacyTypes.add(item.getPrivacyType()));
-
-        TransitionManager.beginDelayedTransition(mChipsContainer, mTransition);
-        mChips.forEach(chip -> chip.expandForTypes(activePrivacyTypes));
-    }
-
-    /**
-     * Collapse the chip {@link #EXPANDED_DURATION_MS} from now.
-     */
-    private void collapseLater() {
-        mUiThreadHandler.removeCallbacks(mCollapseRunnable);
-        if (DEBUG) Log.d(TAG, "Chips will collapse in " + EXPANDED_DURATION_MS + "ms");
-        mUiThreadHandler.postDelayed(mCollapseRunnable, EXPANDED_DURATION_MS);
-    }
-
-    private void collapseChips() {
-        if (DEBUG) Log.d(TAG, "collapseChips");
-        if (mChipsContainer == null) {
-            return;
-        }
-
-        TransitionManager.beginDelayedTransition(mChipsContainer, mCollapseTransition);
-        for (PrivacyItemsChip chip : mChips) {
-            chip.collapse();
-        }
-    }
-
-    @UiThread
-    private void createAndShowIndicator() {
-        if (DEBUG) Log.i(TAG, "Creating privacy indicators");
-
-        Context privacyChipContext = new ContextThemeWrapper(mContext, R.style.PrivacyChip);
-        mChips = new ArrayList<>();
-        mChipsContainer = (ViewGroup) LayoutInflater.from(privacyChipContext)
-                .inflate(R.layout.tv_privacy_chip_container, null);
-
-        int chipMargins = privacyChipContext.getResources()
-                .getDimensionPixelSize(R.dimen.privacy_chip_margin);
-        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
-        lp.setMarginStart(chipMargins);
-        lp.setMarginEnd(chipMargins);
-
-        for (PrivacyItemsChip.ChipConfig chipConfig : CHIPS) {
-            PrivacyItemsChip chip = new PrivacyItemsChip(privacyChipContext, chipConfig);
-            mChipsContainer.addView(chip, lp);
-            mChips.add(chip);
-        }
-
-        final WindowManager windowManager = mContext.getSystemService(WindowManager.class);
-        windowManager.addView(mChipsContainer, getWindowLayoutParams());
-
-        final ViewGroup container = mChipsContainer;
-        mChipsContainer.getViewTreeObserver()
-                .addOnGlobalLayoutListener(
-                        new ViewTreeObserver.OnGlobalLayoutListener() {
-                            @Override
-                            public void onGlobalLayout() {
-                                if (DEBUG) Log.v(TAG, "Chips container laid out");
-                                container.getViewTreeObserver().removeOnGlobalLayoutListener(this);
-                                updateChips();
-                            }
-                        });
-    }
-
-    private WindowManager.LayoutParams getWindowLayoutParams() {
-        final WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
-                WRAP_CONTENT,
-                WRAP_CONTENT,
-                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
-                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
-                PixelFormat.TRANSLUCENT);
-        layoutParams.gravity = Gravity.TOP | (mIsRtl ? Gravity.LEFT : Gravity.RIGHT);
-        layoutParams.setTitle(LAYOUT_PARAMS_TITLE);
-        layoutParams.packageName = mContext.getPackageName();
-        return layoutParams;
-    }
-
-    @UiThread
-    private void removeIndicatorView() {
-        if (DEBUG) Log.d(TAG, "removeIndicatorView");
-        mUiThreadHandler.removeCallbacks(mCollapseRunnable);
-
-        final WindowManager windowManager = mContext.getSystemService(WindowManager.class);
-        if (windowManager != null && mChipsContainer != null) {
-            windowManager.removeView(mChipsContainer);
-        }
-
-        mChipsContainer = null;
-        mChips = null;
-    }
-
-    /**
-     * Schedules the accessibility announcement to be made after {@link
-     * #ACCESSIBILITY_ANNOUNCEMENT_DELAY_MS} (if possible). This is so that only one announcement is
-     * made instead of two separate ones if both the camera and the mic are started/stopped.
-     */
-    @UiThread
-    private void postAccessibilityAnnouncement() {
-        mUiThreadHandler.removeCallbacks(mAccessibilityRunnable);
-
-        if (mPrivacyItems.size() == 0) {
-            // Announce immediately since announcement cannot be made once the chip is gone.
-            makeAccessibilityAnnouncement();
-        } else {
-            mUiThreadHandler.postDelayed(mAccessibilityRunnable,
-                    ACCESSIBILITY_ANNOUNCEMENT_DELAY_MS);
-        }
-    }
-
-    private void makeAccessibilityAnnouncement() {
-        if (mChipsContainer == null) {
-            return;
-        }
-
-        boolean cameraWasRecording = listContainsPrivacyType(mItemsBeforeLastAnnouncement,
-                PrivacyType.TYPE_CAMERA);
-        boolean cameraIsRecording = listContainsPrivacyType(mPrivacyItems,
-                PrivacyType.TYPE_CAMERA);
-        boolean micWasRecording = listContainsPrivacyType(mItemsBeforeLastAnnouncement,
-                PrivacyType.TYPE_MICROPHONE);
-        boolean micIsRecording = listContainsPrivacyType(mPrivacyItems,
-                PrivacyType.TYPE_MICROPHONE);
-
-        boolean screenWasRecording = listContainsPrivacyType(mItemsBeforeLastAnnouncement,
-                PrivacyType.TYPE_MEDIA_PROJECTION);
-        boolean screenIsRecording = listContainsPrivacyType(mPrivacyItems,
-                PrivacyType.TYPE_MEDIA_PROJECTION);
-
-        int announcement = 0;
-        if (!cameraWasRecording && cameraIsRecording && !micWasRecording && micIsRecording) {
-            // Both started
-            announcement = R.string.mic_and_camera_recording_announcement;
-        } else if (cameraWasRecording && !cameraIsRecording && micWasRecording && !micIsRecording) {
-            // Both stopped
-            announcement = R.string.mic_camera_stopped_recording_announcement;
-        } else {
-            // Did the camera start or stop?
-            if (cameraWasRecording && !cameraIsRecording) {
-                announcement = R.string.camera_stopped_recording_announcement;
-            } else if (!cameraWasRecording && cameraIsRecording) {
-                announcement = R.string.camera_recording_announcement;
-            }
-
-            // Announce camera changes now since we might need a second announcement about the mic.
-            if (announcement != 0) {
-                mChipsContainer.announceForAccessibility(mContext.getString(announcement));
-                announcement = 0;
-            }
-
-            // Did the mic start or stop?
-            if (micWasRecording && !micIsRecording) {
-                announcement = R.string.mic_stopped_recording_announcement;
-            } else if (!micWasRecording && micIsRecording) {
-                announcement = R.string.mic_recording_announcement;
-            }
-        }
-
-        if (announcement != 0) {
-            mChipsContainer.announceForAccessibility(mContext.getString(announcement));
-        }
-
-        if (!screenWasRecording && screenIsRecording) {
-            mChipsContainer.announceForAccessibility(
-                    mContext.getString(R.string.screen_recording_announcement));
-        } else if (screenWasRecording && !screenIsRecording) {
-            mChipsContainer.announceForAccessibility(
-                    mContext.getString(R.string.screen_stopped_recording_announcement));
-        }
-
-        mItemsBeforeLastAnnouncement.clear();
-        mItemsBeforeLastAnnouncement.addAll(mPrivacyItems);
-    }
-
-    private boolean listContainsPrivacyType(List<PrivacyItem> list, PrivacyType privacyType) {
-        for (PrivacyItem item : list) {
-            if (item.getPrivacyType() == privacyType) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
index ddb395b..d801faa 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
@@ -245,7 +245,7 @@
         mQSContainerImplController = qsFragmentComponent.getQSContainerImplController();
         mQSContainerImplController.init();
         mContainer = mQSContainerImplController.getView();
-        mDumpManager.registerDumpable(mContainer.getClass().getName(), mContainer);
+        mDumpManager.registerDumpable(mContainer.getClass().getSimpleName(), mContainer);
 
         mQSAnimator = qsFragmentComponent.getQSAnimator();
         mQSSquishinessController = qsFragmentComponent.getQSSquishinessController();
@@ -319,7 +319,7 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        mDumpManager.registerDumpable(getClass().getName(), this);
+        mDumpManager.registerDumpable(getClass().getSimpleName(), this);
     }
 
     @Override
@@ -334,9 +334,9 @@
         }
         mScrollListener = null;
         if (mContainer != null) {
-            mDumpManager.unregisterDumpable(mContainer.getClass().getName());
+            mDumpManager.unregisterDumpable(mContainer.getClass().getSimpleName());
         }
-        mDumpManager.unregisterDumpable(getClass().getName());
+        mDumpManager.unregisterDumpable(getClass().getSimpleName());
         mListeningAndVisibilityLifecycleOwner.destroy();
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
index 469ddd8..21da596 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
@@ -53,7 +53,8 @@
 
     public static final String TILE_SPEC = "work";
 
-    private final Icon mIcon = ResourceIcon.get(R.drawable.stat_sys_managed_profile_status);
+    private final Icon mIcon = ResourceIcon.get(
+            com.android.internal.R.drawable.stat_sys_managed_profile_status);
 
     private final ManagedProfileController mProfileController;
 
diff --git a/packages/SystemUI/src/com/android/systemui/scene/ui/view/WindowRootView.kt b/packages/SystemUI/src/com/android/systemui/scene/ui/view/WindowRootView.kt
index 4afe679..c9a73e6 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/ui/view/WindowRootView.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/ui/view/WindowRootView.kt
@@ -12,16 +12,7 @@
 import com.android.systemui.R
 import com.android.systemui.compose.ComposeFacade
 
-/**
- * A view that can serve as the root of the main SysUI window (but might not, see below for more
- * information regarding this confusing comment).
- *
- * Naturally, only one view may ever be at the root of a view hierarchy tree. Under certain
- * conditions, the view hierarchy tree in the scene-containing window view may actually have one
- * [WindowRootView] acting as the true root view and another [WindowRootView] which doesn't and is,
- * instead, a child of the true root view. To discern which one is which, please use the [isRoot]
- * method.
- */
+/** A view that can serve as the root of the main SysUI window. */
 open class WindowRootView(
     context: Context,
     attrs: AttributeSet?,
diff --git a/packages/SystemUI/src/com/android/systemui/sensorprivacy/SensorUseStartedActivity.kt b/packages/SystemUI/src/com/android/systemui/sensorprivacy/SensorUseStartedActivity.kt
index d33d113..2f0fc51 100644
--- a/packages/SystemUI/src/com/android/systemui/sensorprivacy/SensorUseStartedActivity.kt
+++ b/packages/SystemUI/src/com/android/systemui/sensorprivacy/SensorUseStartedActivity.kt
@@ -228,6 +228,8 @@
     }
 
     override fun onDismiss(dialog: DialogInterface?) {
-        finish()
+        if (!isChangingConfigurations) {
+            finish()
+        }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/sensorprivacy/television/TvSensorPrivacyChangedActivity.java b/packages/SystemUI/src/com/android/systemui/sensorprivacy/television/TvSensorPrivacyChangedActivity.java
deleted file mode 100644
index 731b177..0000000
--- a/packages/SystemUI/src/com/android/systemui/sensorprivacy/television/TvSensorPrivacyChangedActivity.java
+++ /dev/null
@@ -1,233 +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.sensorprivacy.television;
-
-import static android.hardware.SensorPrivacyManager.Sensors.CAMERA;
-import static android.hardware.SensorPrivacyManager.Sensors.MICROPHONE;
-
-import android.annotation.DimenRes;
-import android.content.res.ColorStateList;
-import android.content.res.Resources;
-import android.graphics.drawable.Animatable;
-import android.graphics.drawable.Drawable;
-import android.hardware.SensorPrivacyManager;
-import android.os.Bundle;
-import android.provider.Settings;
-import android.util.Log;
-import android.view.View;
-import android.view.WindowManager;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.systemui.R;
-import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
-import com.android.systemui.tv.TvBottomSheetActivity;
-import com.android.systemui.util.settings.GlobalSettings;
-
-import javax.inject.Inject;
-
-/**
- * Bottom sheet that is shown when the camera/mic sensors privacy state changed
- * by the global software toggle or physical privacy switch.
- */
-public class TvSensorPrivacyChangedActivity extends TvBottomSheetActivity {
-
-    private static final String TAG = TvSensorPrivacyChangedActivity.class.getSimpleName();
-
-    private static final int ALL_SENSORS = Integer.MAX_VALUE;
-
-    private int mSensor = -1;
-    private int mToggleType = -1;
-
-    private final GlobalSettings mGlobalSettings;
-    private final IndividualSensorPrivacyController mSensorPrivacyController;
-    private IndividualSensorPrivacyController.Callback mSensorPrivacyCallback;
-    private TextView mTitle;
-    private TextView mContent;
-    private ImageView mIcon;
-    private ImageView mSecondIcon;
-    private Button mPositiveButton;
-    private Button mCancelButton;
-
-    @Inject
-    public TvSensorPrivacyChangedActivity(
-            IndividualSensorPrivacyController individualSensorPrivacyController,
-            GlobalSettings globalSettings) {
-        mSensorPrivacyController = individualSensorPrivacyController;
-        mGlobalSettings = globalSettings;
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        getWindow().addSystemFlags(
-                WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
-
-        boolean allSensors = getIntent().getBooleanExtra(SensorPrivacyManager.EXTRA_ALL_SENSORS,
-                false);
-        if (allSensors) {
-            mSensor = ALL_SENSORS;
-        } else {
-            mSensor = getIntent().getIntExtra(SensorPrivacyManager.EXTRA_SENSOR, -1);
-        }
-
-        mToggleType = getIntent().getIntExtra(SensorPrivacyManager.EXTRA_TOGGLE_TYPE, -1);
-
-        if (mSensor == -1 || mToggleType == -1) {
-            Log.v(TAG, "Invalid extras");
-            finish();
-            return;
-        }
-
-        // Do not show for software toggles
-        if (mToggleType == SensorPrivacyManager.TOGGLE_TYPE_SOFTWARE) {
-            finish();
-            return;
-        }
-
-        mSensorPrivacyCallback = (sensor, blocked) -> {
-            updateUI();
-        };
-
-        initUI();
-    }
-
-    private void initUI() {
-        mTitle = findViewById(R.id.bottom_sheet_title);
-        mContent = findViewById(R.id.bottom_sheet_body);
-        mIcon = findViewById(R.id.bottom_sheet_icon);
-        // mic icon if both icons are shown
-        mSecondIcon = findViewById(R.id.bottom_sheet_second_icon);
-        mPositiveButton = findViewById(R.id.bottom_sheet_positive_button);
-        mCancelButton = findViewById(R.id.bottom_sheet_negative_button);
-
-        mCancelButton.setText(android.R.string.cancel);
-        mCancelButton.setOnClickListener(v -> finish());
-
-        updateUI();
-    }
-
-    private void updateUI() {
-        final Resources resources = getResources();
-        setIconTint(resources.getBoolean(R.bool.config_unblockHwSensorIconEnableTint));
-        setIconSize(R.dimen.unblock_hw_sensor_icon_width, R.dimen.unblock_hw_sensor_icon_height);
-
-        switch (mSensor) {
-            case CAMERA:
-                updateUiForCameraUpdate(
-                        mSensorPrivacyController.isSensorBlockedByHardwareToggle(CAMERA));
-                break;
-            case MICROPHONE:
-            default:
-                updateUiForMicUpdate(
-                        mSensorPrivacyController.isSensorBlockedByHardwareToggle(MICROPHONE));
-                break;
-        }
-
-        // Start animation if drawable is animated
-        Drawable iconDrawable = mIcon.getDrawable();
-        if (iconDrawable instanceof Animatable) {
-            ((Animatable) iconDrawable).start();
-        }
-
-        mPositiveButton.setVisibility(View.GONE);
-        mCancelButton.setText(android.R.string.ok);
-    }
-
-    private void updateUiForMicUpdate(boolean blocked) {
-        if (blocked) {
-            mTitle.setText(R.string.sensor_privacy_mic_turned_off_dialog_title);
-            if (isExplicitUserInteractionAudioBypassAllowed()) {
-                mContent.setText(R.string.sensor_privacy_mic_blocked_with_exception_dialog_content);
-            } else {
-                mContent.setText(R.string.sensor_privacy_mic_blocked_no_exception_dialog_content);
-            }
-            mIcon.setImageResource(R.drawable.unblock_hw_sensor_microphone);
-            mSecondIcon.setVisibility(View.GONE);
-        } else {
-            mTitle.setText(R.string.sensor_privacy_mic_turned_on_dialog_title);
-            mContent.setText(R.string.sensor_privacy_mic_unblocked_dialog_content);
-            mIcon.setImageResource(com.android.internal.R.drawable.ic_mic_allowed);
-            mSecondIcon.setVisibility(View.GONE);
-        }
-    }
-
-    private void updateUiForCameraUpdate(boolean blocked) {
-        if (blocked) {
-            mTitle.setText(R.string.sensor_privacy_camera_turned_off_dialog_title);
-            mContent.setText(R.string.sensor_privacy_camera_blocked_dialog_content);
-            mIcon.setImageResource(R.drawable.unblock_hw_sensor_camera);
-            mSecondIcon.setVisibility(View.GONE);
-        } else {
-            mTitle.setText(R.string.sensor_privacy_camera_turned_on_dialog_title);
-            mContent.setText(R.string.sensor_privacy_camera_unblocked_dialog_content);
-            mIcon.setImageResource(com.android.internal.R.drawable.ic_camera_allowed);
-            mSecondIcon.setVisibility(View.GONE);
-        }
-    }
-
-    private void setIconTint(boolean enableTint) {
-        final Resources resources = getResources();
-
-        if (enableTint) {
-            final ColorStateList iconTint = resources.getColorStateList(
-                    R.color.bottom_sheet_icon_color, getTheme());
-            mIcon.setImageTintList(iconTint);
-            mSecondIcon.setImageTintList(iconTint);
-        } else {
-            mIcon.setImageTintList(null);
-            mSecondIcon.setImageTintList(null);
-        }
-
-        mIcon.invalidate();
-        mSecondIcon.invalidate();
-    }
-
-    private void setIconSize(@DimenRes int widthRes, @DimenRes int heightRes) {
-        final Resources resources = getResources();
-        final int iconWidth = resources.getDimensionPixelSize(widthRes);
-        final int iconHeight = resources.getDimensionPixelSize(heightRes);
-
-        mIcon.getLayoutParams().width = iconWidth;
-        mIcon.getLayoutParams().height = iconHeight;
-        mIcon.invalidate();
-
-        mSecondIcon.getLayoutParams().width = iconWidth;
-        mSecondIcon.getLayoutParams().height = iconHeight;
-        mSecondIcon.invalidate();
-    }
-
-    private boolean isExplicitUserInteractionAudioBypassAllowed() {
-        return mGlobalSettings.getInt(
-                Settings.Global.RECEIVE_EXPLICIT_USER_INTERACTION_AUDIO_ENABLED, 1) == 1;
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        updateUI();
-        mSensorPrivacyController.addCallback(mSensorPrivacyCallback);
-    }
-
-    @Override
-    public void onPause() {
-        mSensorPrivacyController.removeCallback(mSensorPrivacyCallback);
-        super.onPause();
-    }
-
-}
diff --git a/packages/SystemUI/src/com/android/systemui/sensorprivacy/television/TvUnblockSensorActivity.java b/packages/SystemUI/src/com/android/systemui/sensorprivacy/television/TvUnblockSensorActivity.java
deleted file mode 100644
index 1b9657f..0000000
--- a/packages/SystemUI/src/com/android/systemui/sensorprivacy/television/TvUnblockSensorActivity.java
+++ /dev/null
@@ -1,342 +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.sensorprivacy.television;
-
-import static android.content.pm.PackageManager.MATCH_SYSTEM_ONLY;
-import static android.hardware.SensorPrivacyManager.Sensors.CAMERA;
-import static android.hardware.SensorPrivacyManager.Sensors.MICROPHONE;
-import static android.hardware.SensorPrivacyManager.Sources.OTHER;
-
-import android.annotation.DimenRes;
-import android.app.AppOpsManager;
-import android.app.role.RoleManager;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.content.res.ColorStateList;
-import android.content.res.Resources;
-import android.graphics.drawable.Animatable;
-import android.graphics.drawable.Drawable;
-import android.hardware.SensorPrivacyManager;
-import android.os.Bundle;
-import android.os.UserHandle;
-import android.util.Log;
-import android.view.View;
-import android.view.WindowManager;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.android.systemui.R;
-import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
-import com.android.systemui.tv.TvBottomSheetActivity;
-
-import java.util.List;
-
-import javax.inject.Inject;
-
-/**
- * Bottom sheet that is shown when the camera/mic sensors are blocked by the global software toggle
- * or physical privacy switch.
- */
-public class TvUnblockSensorActivity extends TvBottomSheetActivity {
-
-    private static final String TAG = TvUnblockSensorActivity.class.getSimpleName();
-    private static final String ACTION_MANAGE_CAMERA_PRIVACY =
-            "android.settings.MANAGE_CAMERA_PRIVACY";
-    private static final String ACTION_MANAGE_MICROPHONE_PRIVACY =
-            "android.settings.MANAGE_MICROPHONE_PRIVACY";
-
-    private static final int ALL_SENSORS = Integer.MAX_VALUE;
-
-    private int mSensor = -1;
-
-    private final AppOpsManager mAppOpsManager;
-    private final RoleManager mRoleManager;
-    private final IndividualSensorPrivacyController mSensorPrivacyController;
-    private IndividualSensorPrivacyController.Callback mSensorPrivacyCallback;
-    private TextView mTitle;
-    private TextView mContent;
-    private ImageView mIcon;
-    private ImageView mSecondIcon;
-    private Button mPositiveButton;
-    private Button mCancelButton;
-
-    @Inject
-    public TvUnblockSensorActivity(
-            IndividualSensorPrivacyController individualSensorPrivacyController,
-            AppOpsManager appOpsManager, RoleManager roleManager) {
-        mSensorPrivacyController = individualSensorPrivacyController;
-        mAppOpsManager = appOpsManager;
-        mRoleManager = roleManager;
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        getWindow().addSystemFlags(
-                WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
-
-        boolean allSensors = getIntent().getBooleanExtra(SensorPrivacyManager.EXTRA_ALL_SENSORS,
-                false);
-        if (allSensors) {
-            mSensor = ALL_SENSORS;
-        } else {
-            mSensor = getIntent().getIntExtra(SensorPrivacyManager.EXTRA_SENSOR, -1);
-        }
-
-        if (mSensor == -1) {
-            Log.v(TAG, "Invalid extras");
-            finish();
-            return;
-        }
-
-        mSensorPrivacyCallback = (sensor, blocked) -> {
-            if (mSensor == ALL_SENSORS && !mSensorPrivacyController.isSensorBlocked(CAMERA)
-                    && !mSensorPrivacyController.isSensorBlocked(MICROPHONE)) {
-                showToastAndFinish();
-            } else if (this.mSensor == sensor && !blocked) {
-                showToastAndFinish();
-            } else {
-                updateUI();
-            }
-        };
-
-        initUI();
-    }
-
-    private void showToastAndFinish() {
-        final int toastMsgResId;
-        switch(mSensor) {
-            case MICROPHONE:
-                toastMsgResId = R.string.sensor_privacy_mic_unblocked_toast_content;
-                break;
-            case CAMERA:
-                toastMsgResId = R.string.sensor_privacy_camera_unblocked_toast_content;
-                break;
-            case ALL_SENSORS:
-            default:
-                toastMsgResId = R.string.sensor_privacy_mic_camera_unblocked_toast_content;
-                break;
-        }
-        showToastAndFinish(toastMsgResId);
-    }
-
-    private void showToastAndFinish(int toastMsgResId) {
-        Toast.makeText(this, toastMsgResId, Toast.LENGTH_SHORT).show();
-        finish();
-    }
-
-    private boolean isBlockedByHardwareToggle() {
-        if (mSensor == ALL_SENSORS) {
-            return mSensorPrivacyController.isSensorBlockedByHardwareToggle(CAMERA)
-                    || mSensorPrivacyController.isSensorBlockedByHardwareToggle(MICROPHONE);
-        } else {
-            return mSensorPrivacyController.isSensorBlockedByHardwareToggle(mSensor);
-        }
-    }
-
-    private void initUI() {
-        mTitle = findViewById(R.id.bottom_sheet_title);
-        mContent = findViewById(R.id.bottom_sheet_body);
-        mIcon = findViewById(R.id.bottom_sheet_icon);
-        // mic icon if both icons are shown
-        mSecondIcon = findViewById(R.id.bottom_sheet_second_icon);
-        mPositiveButton = findViewById(R.id.bottom_sheet_positive_button);
-        mCancelButton = findViewById(R.id.bottom_sheet_negative_button);
-
-        mCancelButton.setText(android.R.string.cancel);
-        mCancelButton.setOnClickListener(v -> finish());
-
-        updateUI();
-    }
-
-    private void updateUI() {
-        if (isHTTAccessDisabled()) {
-            updateUiForHTT();
-        } else if (isBlockedByHardwareToggle()) {
-            updateUiForHardwareToggle();
-        } else {
-            updateUiForSoftwareToggle();
-        }
-    }
-
-    private void updateUiForHardwareToggle() {
-        final Resources resources = getResources();
-
-        boolean micBlocked = (mSensor == MICROPHONE || mSensor == ALL_SENSORS)
-                && mSensorPrivacyController.isSensorBlockedByHardwareToggle(MICROPHONE);
-        boolean cameraBlocked = (mSensor == CAMERA || mSensor == ALL_SENSORS)
-                && mSensorPrivacyController.isSensorBlockedByHardwareToggle(CAMERA);
-
-        setIconTint(resources.getBoolean(R.bool.config_unblockHwSensorIconEnableTint));
-        setIconSize(R.dimen.unblock_hw_sensor_icon_width, R.dimen.unblock_hw_sensor_icon_height);
-
-        if (micBlocked && cameraBlocked) {
-            mTitle.setText(R.string.sensor_privacy_start_use_mic_camera_blocked_dialog_title);
-            mContent.setText(
-                    R.string.sensor_privacy_start_use_mic_camera_blocked_dialog_content);
-            mIcon.setImageResource(R.drawable.unblock_hw_sensor_all);
-
-            Drawable secondIconDrawable = resources.getDrawable(
-                    R.drawable.unblock_hw_sensor_all_second, getTheme());
-            if (secondIconDrawable == null) {
-                mSecondIcon.setVisibility(View.GONE);
-            } else {
-                mSecondIcon.setImageDrawable(secondIconDrawable);
-            }
-        } else if (cameraBlocked) {
-            mTitle.setText(R.string.sensor_privacy_start_use_camera_blocked_dialog_title);
-            mContent.setText(R.string.sensor_privacy_start_use_camera_blocked_dialog_content);
-            mIcon.setImageResource(R.drawable.unblock_hw_sensor_camera);
-            mSecondIcon.setVisibility(View.GONE);
-        } else if (micBlocked) {
-            mTitle.setText(R.string.sensor_privacy_start_use_mic_blocked_dialog_title);
-            mContent.setText(R.string.sensor_privacy_start_use_mic_blocked_dialog_content);
-            mIcon.setImageResource(R.drawable.unblock_hw_sensor_microphone);
-            mSecondIcon.setVisibility(View.GONE);
-        }
-
-        // Start animation if drawable is animated
-        Drawable iconDrawable = mIcon.getDrawable();
-        if (iconDrawable instanceof Animatable) {
-            ((Animatable) iconDrawable).start();
-        }
-
-        mPositiveButton.setVisibility(View.GONE);
-        mCancelButton.setText(android.R.string.ok);
-    }
-
-    private void updateUiForSoftwareToggle() {
-        setIconTint(true);
-        setIconSize(R.dimen.bottom_sheet_icon_size, R.dimen.bottom_sheet_icon_size);
-
-        switch (mSensor) {
-            case MICROPHONE:
-                mTitle.setText(R.string.sensor_privacy_start_use_mic_blocked_dialog_title);
-                mContent.setText(R.string.sensor_privacy_start_use_mic_dialog_content);
-                mIcon.setImageResource(com.android.internal.R.drawable.perm_group_microphone);
-                mSecondIcon.setVisibility(View.GONE);
-                break;
-            case CAMERA:
-                mTitle.setText(R.string.sensor_privacy_start_use_camera_blocked_dialog_title);
-                mContent.setText(R.string.sensor_privacy_start_use_camera_dialog_content);
-                mIcon.setImageResource(com.android.internal.R.drawable.perm_group_camera);
-                mSecondIcon.setVisibility(View.GONE);
-                break;
-            case ALL_SENSORS:
-            default:
-                mTitle.setText(R.string.sensor_privacy_start_use_mic_camera_blocked_dialog_title);
-                mContent.setText(R.string.sensor_privacy_start_use_mic_camera_dialog_content);
-                mIcon.setImageResource(com.android.internal.R.drawable.perm_group_camera);
-                mSecondIcon.setImageResource(
-                        com.android.internal.R.drawable.perm_group_microphone);
-                break;
-        }
-
-        mPositiveButton.setText(
-                com.android.internal.R.string.sensor_privacy_start_use_dialog_turn_on_button);
-        mPositiveButton.setOnClickListener(v -> {
-            if (mSensor == ALL_SENSORS) {
-                mSensorPrivacyController.setSensorBlocked(OTHER, CAMERA, false);
-                mSensorPrivacyController.setSensorBlocked(OTHER, MICROPHONE, false);
-            } else {
-                mSensorPrivacyController.setSensorBlocked(OTHER, mSensor, false);
-            }
-        });
-    }
-
-    private void updateUiForHTT() {
-        setIconTint(true);
-        setIconSize(R.dimen.bottom_sheet_icon_size, R.dimen.bottom_sheet_icon_size);
-
-        mTitle.setText(R.string.sensor_privacy_start_use_mic_blocked_dialog_title);
-        mContent.setText(R.string.sensor_privacy_htt_blocked_dialog_content);
-        mIcon.setImageResource(com.android.internal.R.drawable.perm_group_microphone);
-        mSecondIcon.setVisibility(View.GONE);
-
-        mPositiveButton.setText(R.string.sensor_privacy_dialog_open_settings);
-        mPositiveButton.setOnClickListener(v -> {
-            Intent openPrivacySettings = new Intent(ACTION_MANAGE_MICROPHONE_PRIVACY);
-            ActivityInfo activityInfo = openPrivacySettings.resolveActivityInfo(getPackageManager(),
-                    MATCH_SYSTEM_ONLY);
-            if (activityInfo == null) {
-                showToastAndFinish(com.android.internal.R.string.noApplications);
-            } else {
-                startActivity(openPrivacySettings);
-                finish();
-            }
-        });
-    }
-
-    private void setIconTint(boolean enableTint) {
-        final Resources resources = getResources();
-
-        if (enableTint) {
-            final ColorStateList iconTint = resources.getColorStateList(
-                    R.color.bottom_sheet_icon_color, getTheme());
-            mIcon.setImageTintList(iconTint);
-            mSecondIcon.setImageTintList(iconTint);
-        } else {
-            mIcon.setImageTintList(null);
-            mSecondIcon.setImageTintList(null);
-        }
-
-        mIcon.invalidate();
-        mSecondIcon.invalidate();
-    }
-
-    private void setIconSize(@DimenRes int widthRes, @DimenRes int heightRes) {
-        final Resources resources = getResources();
-        final int iconWidth = resources.getDimensionPixelSize(widthRes);
-        final int iconHeight = resources.getDimensionPixelSize(heightRes);
-
-        mIcon.getLayoutParams().width = iconWidth;
-        mIcon.getLayoutParams().height = iconHeight;
-        mIcon.invalidate();
-
-        mSecondIcon.getLayoutParams().width = iconWidth;
-        mSecondIcon.getLayoutParams().height = iconHeight;
-        mSecondIcon.invalidate();
-    }
-
-    private boolean isHTTAccessDisabled() {
-        String pkg = getIntent().getStringExtra(Intent.EXTRA_PACKAGE_NAME);
-        List<String> assistantPkgs = mRoleManager.getRoleHolders(RoleManager.ROLE_ASSISTANT);
-        if (!assistantPkgs.contains(pkg)) {
-            return false;
-        }
-
-        return (mAppOpsManager.checkOpNoThrow(
-                AppOpsManager.OP_RECEIVE_EXPLICIT_USER_INTERACTION_AUDIO, UserHandle.myUserId(),
-                pkg) != AppOpsManager.MODE_ALLOWED);
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        updateUI();
-        mSensorPrivacyController.addCallback(mSensorPrivacyCallback);
-    }
-
-    @Override
-    public void onPause() {
-        mSensorPrivacyController.removeCallback(mSensorPrivacyCallback);
-        super.onPause();
-    }
-
-}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
index d2b62eb..6f726a2 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
@@ -154,7 +154,7 @@
         mKeyguardBypassController = keyguardBypassController;
         mColorExtractor = colorExtractor;
         mScreenOffAnimationController = screenOffAnimationController;
-        dumpManager.registerDumpable(getClass().getName(), this);
+        dumpManager.registerDumpable(this);
         mAuthController = authController;
         mLastKeyguardRotationAllowed = mKeyguardStateController.isKeyguardScreenRotationAllowed();
         mLockScreenDisplayTimeout = context.getResources()
diff --git a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
index baac57c..e85024e 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
@@ -1011,6 +1011,7 @@
                 && mPanelViewControllerLazy.get().mAnimateBack) {
             mPanelViewControllerLazy.get().adjustBackAnimationScale(adjustedExpansionFraction);
         }
+        mShadeExpansionStateManager.onQsExpansionFractionChanged(qsExpansionFraction);
         mMediaHierarchyManager.setQsExpansion(qsExpansionFraction);
         int qsPanelBottomY = calculateBottomPosition(qsExpansionFraction);
         mScrimController.setQsPosition(qsExpansionFraction, qsPanelBottomY);
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt
index 2db47ae..0554c58 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt
@@ -38,6 +38,8 @@
     private val expansionListeners = CopyOnWriteArrayList<ShadeExpansionListener>()
     private val fullExpansionListeners = CopyOnWriteArrayList<ShadeFullExpansionListener>()
     private val qsExpansionListeners = CopyOnWriteArrayList<ShadeQsExpansionListener>()
+    private val qsExpansionFractionListeners =
+        CopyOnWriteArrayList<ShadeQsExpansionFractionListener>()
     private val stateListeners = CopyOnWriteArrayList<ShadeStateListener>()
     private val shadeStateEventsListeners = CopyOnWriteArrayList<ShadeStateEventsListener>()
 
@@ -45,6 +47,7 @@
     @FloatRange(from = 0.0, to = 1.0) private var fraction: Float = 0f
     private var expanded: Boolean = false
     private var qsExpanded: Boolean = false
+    private var qsExpansionFraction = 0f
     private var tracking: Boolean = false
     private var dragDownPxAmount: Float = 0f
 
@@ -82,6 +85,15 @@
         qsExpansionListeners.remove(listener)
     }
 
+    fun addQsExpansionFractionListener(listener: ShadeQsExpansionFractionListener) {
+        qsExpansionFractionListeners.add(listener)
+        listener.onQsExpansionFractionChanged(qsExpansionFraction)
+    }
+
+    fun removeQsExpansionFractionListener(listener: ShadeQsExpansionFractionListener) {
+        qsExpansionFractionListeners.remove(listener)
+    }
+
     /** Adds a listener that will be notified when the panel state has changed. */
     fun addStateListener(listener: ShadeStateListener) {
         stateListeners.add(listener)
@@ -175,6 +187,15 @@
         qsExpansionListeners.forEach { it.onQsExpansionChanged(qsExpanded) }
     }
 
+    fun onQsExpansionFractionChanged(qsExpansionFraction: Float) {
+        this.qsExpansionFraction = qsExpansionFraction
+
+        debugLog("qsExpansionFraction=$qsExpansionFraction")
+        qsExpansionFractionListeners.forEach {
+            it.onQsExpansionFractionChanged(qsExpansionFraction)
+        }
+    }
+
     fun onShadeExpansionFullyChanged(isExpanded: Boolean) {
         this.expanded = isExpanded
 
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeModule.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeModule.kt
index 6a332dd..89aaaaf 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeModule.kt
@@ -17,6 +17,7 @@
 package com.android.systemui.shade
 
 import com.android.systemui.dagger.SysUISingleton
+
 import dagger.Binds
 import dagger.Module
 
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeQsExpansionFractionListener.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeQsExpansionFractionListener.kt
new file mode 100644
index 0000000..c787f49
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeQsExpansionFractionListener.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.shade
+
+/** A listener interface to be notified of expansion events for the quick settings panel. */
+fun interface ShadeQsExpansionFractionListener {
+    /** Invoked whenever the quick settings expansion fraction changes */
+    fun onQsExpansionFractionChanged(qsExpansionFraction: Float)
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java
index 77d98d2..faffb3e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java
@@ -105,7 +105,7 @@
 
         alertEntry.mEntry.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED);
         if (alert) {
-            alertEntry.updateEntry(true /* updatePostTime */);
+            alertEntry.updateEntry(true /* updatePostTime */, "updateNotification");
         }
     }
 
@@ -273,15 +273,15 @@
             mRemoveAlertRunnable = removeAlertRunnable;
 
             mPostTime = calculatePostTime();
-            updateEntry(true /* updatePostTime */);
+            updateEntry(true /* updatePostTime */, "setEntry");
         }
 
         /**
          * Updates an entry's removal time.
          * @param updatePostTime whether or not to refresh the post time
          */
-        public void updateEntry(boolean updatePostTime) {
-            mLogger.logUpdateEntry(mEntry, updatePostTime);
+        public void updateEntry(boolean updatePostTime, @Nullable String reason) {
+            mLogger.logUpdateEntry(mEntry, updatePostTime, reason);
 
             final long now = mClock.currentTimeMillis();
             mEarliestRemovaltime = now + mMinimumDisplayTime;
@@ -289,7 +289,7 @@
             if (updatePostTime) {
                 mPostTime = Math.max(mPostTime, now);
             }
-            removeAutoRemovalCallbacks();
+            removeAutoRemovalCallbacks("updateEntry (will be rescheduled)");
 
             if (!isSticky()) {
                 final long finishTime = calculateFinishTime();
@@ -329,16 +329,17 @@
         }
 
         public void reset() {
+            removeAutoRemovalCallbacks("reset()");
             mEntry = null;
-            removeAutoRemovalCallbacks();
             mRemoveAlertRunnable = null;
         }
 
         /**
          * Clear any pending removal runnables.
          */
-        public void removeAutoRemovalCallbacks() {
+        public void removeAutoRemovalCallbacks(@Nullable String reason) {
             if (mRemoveAlertRunnable != null) {
+                mLogger.logAutoRemoveCanceled(mEntry, reason);
                 mHandler.removeCallbacks(mRemoveAlertRunnable);
             }
         }
@@ -348,7 +349,7 @@
          */
         public void removeAsSoonAsPossible() {
             if (mRemoveAlertRunnable != null) {
-                removeAutoRemovalCallbacks();
+                removeAutoRemovalCallbacks("removeAsSoonAsPossible (will be rescheduled)");
 
                 final long timeLeft = mEarliestRemovaltime - mClock.currentTimeMillis();
                 mHandler.postDelayed(mRemoveAlertRunnable, timeLeft);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt
index 39d213d..a0cbdf3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt
@@ -48,7 +48,7 @@
     private var earlyWakeupEnabled = false
 
     init {
-        dumpManager.registerDumpable(javaClass.name, this)
+        dumpManager.registerDumpable(this)
     }
 
     /**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java
index a3fd82e9..ae3d41e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java
@@ -440,10 +440,15 @@
                 mContext.getString(R.string.keyboard_shortcut_group_system_back),
                 KeyEvent.KEYCODE_DEL,
                 KeyEvent.META_META_ON));
-        systemGroup.addItem(new KeyboardShortcutInfo(
-                mContext.getString(R.string.keyboard_shortcut_group_system_recents),
-                KeyEvent.KEYCODE_TAB,
-                KeyEvent.META_ALT_ON));
+
+        // Some devices (like TV) don't have recents
+        if (mContext.getResources().getBoolean(com.android.internal.R.bool.config_hasRecents)) {
+            systemGroup.addItem(new KeyboardShortcutInfo(
+                    mContext.getString(R.string.keyboard_shortcut_group_system_recents),
+                    KeyEvent.KEYCODE_TAB,
+                    KeyEvent.META_ALT_ON));
+        }
+
         systemGroup.addItem(new KeyboardShortcutInfo(
                 mContext.getString(
                         R.string.keyboard_shortcut_group_system_notifications),
@@ -683,8 +688,10 @@
                 ViewGroup shortcutItemsContainer = (ViewGroup) shortcutView
                         .findViewById(R.id.keyboard_shortcuts_item_container);
                 final int shortcutKeysSize = shortcutKeys.size();
+                final List<String> humanReadableShortcuts = new ArrayList<>();
                 for (int k = 0; k < shortcutKeysSize; k++) {
                     StringDrawableContainer shortcutRepresentation = shortcutKeys.get(k);
+                    humanReadableShortcuts.add(shortcutRepresentation.mString);
                     if (shortcutRepresentation.mDrawable != null) {
                         ImageView shortcutKeyIconView = (ImageView) inflater.inflate(
                                 R.layout.keyboard_shortcuts_key_icon_view, shortcutItemsContainer,
@@ -714,6 +721,11 @@
                         shortcutItemsContainer.addView(shortcutKeyTextView);
                     }
                 }
+                CharSequence contentDescription = info.getLabel();
+                if (!humanReadableShortcuts.isEmpty()) {
+                    contentDescription += ": " + String.join(", ", humanReadableShortcuts);
+                }
+                shortcutView.setContentDescription(contentDescription);
                 shortcutContainer.addView(shortcutView);
             }
             keyboardShortcutsLayout.addView(shortcutContainer);
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 903d485..efd7d2e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt
@@ -78,7 +78,7 @@
 constructor(
         private val context: Context,
         private val featureFlags: FeatureFlags,
-        private val smartspaceManager: SmartspaceManager,
+        private val smartspaceManager: SmartspaceManager?,
         private val activityStarter: ActivityStarter,
         private val falsingManager: FalsingManager,
         private val systemClock: SystemClock,
@@ -387,6 +387,7 @@
     }
 
     private fun connectSession() {
+        if (smartspaceManager == null) return
         if (datePlugin == null && weatherPlugin == null && plugin == null) return
         if (session != null || smartspaceViews.isEmpty()) {
             return
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 1494574..93a34af 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
@@ -48,6 +48,14 @@
     private val mAlwaysExpandNonGroupedNotification =
         context.resources.getBoolean(R.bool.config_alwaysExpandNonGroupedNotifications)
 
+    /**
+     * `true` if the first non-group expandable notification should be expanded automatically
+     * when possible. If `false`, then the first non-group expandable notification should not
+     * be expanded.
+     */
+    private val mAutoExpandFirstNotification =
+            context.resources.getBoolean(R.bool.config_autoExpandFirstNotification)
+
     override fun attach(pipeline: NotifPipeline) {
         pipeline.addOnBeforeRenderListListener(::onBeforeRenderList)
         pipeline.addOnAfterRenderEntryListener(::onAfterRenderEntry)
@@ -61,8 +69,10 @@
 
     private fun onAfterRenderEntry(entry: NotificationEntry, controller: NotifRowController) {
         // If mAlwaysExpandNonGroupedNotification is false, then only expand the
-        // very first notification and if it's not a child of grouped notifications.
-        controller.setSystemExpanded(mAlwaysExpandNonGroupedNotification || entry == entryToExpand)
+        // very first notification if it's not a child of grouped notifications and when
+        // mAutoExpandFirstNotification is true.
+        controller.setSystemExpanded(mAlwaysExpandNonGroupedNotification ||
+                (mAutoExpandFirstNotification && entry == entryToExpand))
         // Show/hide the feedback icon
         controller.setFeedbackIcon(mAssistantFeedbackController.getFeedbackIcon(entry))
         // Show the "alerted" bell icon
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 adff681..f6ccaa8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
@@ -317,7 +317,7 @@
         mSystemClock = systemClock;
         mFeatureFlags = featureFlags;
 
-        dumpManager.registerDumpable(getClass().getName(), this);
+        dumpManager.registerDumpable(this);
     }
 
     public void setKeyguardViewController(KeyguardViewController keyguardViewController) {
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 632f241..127569d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
@@ -634,7 +634,7 @@
 
     private final ActivityIntentHelper mActivityIntentHelper;
 
-    private final NotificationStackScrollLayoutController mStackScrollerController;
+    public final NotificationStackScrollLayoutController mStackScrollerController;
 
     private final ColorExtractor.OnColorsChangedListener mOnColorsChangedListener =
             (extractor, which) -> updateTheme();
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 1a84dde..4f0cd80 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java
@@ -263,9 +263,9 @@
         if (headsUpEntry != null && headsUpEntry.remoteInputActive != remoteInputActive) {
             headsUpEntry.remoteInputActive = remoteInputActive;
             if (remoteInputActive) {
-                headsUpEntry.removeAutoRemovalCallbacks();
+                headsUpEntry.removeAutoRemovalCallbacks("setRemoteInputActive(true)");
             } else {
-                headsUpEntry.updateEntry(false /* updatePostTime */);
+                headsUpEntry.updateEntry(false /* updatePostTime */, "setRemoteInputActive(false)");
             }
         }
     }
@@ -446,8 +446,8 @@
         }
 
         @Override
-        public void updateEntry(boolean updatePostTime) {
-            super.updateEntry(updatePostTime);
+        public void updateEntry(boolean updatePostTime, String reason) {
+            super.updateEntry(updatePostTime, reason);
 
             if (mEntriesToRemoveAfterExpand.contains(mEntry)) {
                 mEntriesToRemoveAfterExpand.remove(mEntry);
@@ -465,9 +465,9 @@
 
             this.expanded = expanded;
             if (expanded) {
-                removeAutoRemovalCallbacks();
+                removeAutoRemovalCallbacks("setExpanded(true)");
             } else {
-                updateEntry(false /* updatePostTime */);
+                updateEntry(false /* updatePostTime */, "setExpanded(false)");
             }
         }
 
@@ -478,9 +478,9 @@
 
             mGutsShownPinned = gutsShownPinned;
             if (gutsShownPinned) {
-                removeAutoRemovalCallbacks();
+                removeAutoRemovalCallbacks("setGutsShownPinned(true)");
             } else {
-                updateEntry(false /* updatePostTime */);
+                updateEntry(false /* updatePostTime */, "setGutsShownPinned(false)");
             }
         }
 
@@ -494,7 +494,7 @@
         private void extendPulse() {
             if (!extended) {
                 extended = true;
-                updateEntry(false);
+                updateEntry(false, "extendPulse()");
             }
         }
 
@@ -544,7 +544,7 @@
                 // Let's make sure all huns we got while dozing time out within the normal timeout
                 // duration. Otherwise they could get stuck for a very long time
                 for (AlertEntry entry : mAlertEntries.values()) {
-                    entry.updateEntry(true /* updatePostTime */);
+                    entry.updateEntry(true /* updatePostTime */, "onDozingChanged(false)");
                 }
             }
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt
index 74ab47f..bde5c32 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardLiftController.kt
@@ -62,7 +62,7 @@
     }
 
     private fun init() {
-        dumpManager.registerDumpable(javaClass.name, this)
+        dumpManager.registerDumpable(this)
         statusBarStateController.addCallback(statusBarStateListener)
         keyguardUpdateMonitor.registerCallback(keyguardUpdateMonitorCallback)
         updateListeningState()
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
index 6dbf707..79151fd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -163,7 +163,7 @@
     private boolean mMuteVisible;
     private boolean mCurrentUserSetup;
 
-    private boolean mManagedProfileIconVisible = false;
+    private boolean mProfileIconVisible = false;
 
     private BluetoothController mBluetooth;
     private AlarmManager.AlarmClockInfo mNextAlarm;
@@ -259,7 +259,9 @@
         filter.addAction(TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED);
         filter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
         filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
-        filter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED);
+        filter.addAction(Intent.ACTION_PROFILE_REMOVED);
+        filter.addAction(Intent.ACTION_PROFILE_ACCESSIBLE);
+        filter.addAction(Intent.ACTION_PROFILE_INACCESSIBLE);
         mBroadcastDispatcher.registerReceiverWithHandler(mIntentReceiver, filter, mHandler);
         Observer<Integer> observer = ringer -> mHandler.post(this::updateVolumeZen);
 
@@ -306,8 +308,8 @@
                 mResources.getString(R.string.accessibility_status_bar_hotspot));
         mIconController.setIconVisibility(mSlotHotspot, mHotspot.isHotspotEnabled());
 
-        // managed profile
-        updateManagedProfile();
+        // profile
+        updateProfileIcon();
 
         // data saver
         mIconController.setIcon(mSlotDataSaver, R.drawable.stat_sys_data_saver,
@@ -536,34 +538,34 @@
         }
     }
 
-    private void updateManagedProfile() {
+    private void updateProfileIcon() {
         // getLastResumedActivityUserId needs to acquire the AM lock, which may be contended in
         // some cases. Since it doesn't really matter here whether it's updated in this frame
         // or in the next one, we call this method from our UI offload thread.
         mUiBgExecutor.execute(() -> {
-            final int userId;
             try {
-                userId = ActivityTaskManager.getService().getLastResumedActivityUserId();
-                boolean isManagedProfile = mUserManager.isManagedProfile(userId);
+                final int userId = ActivityTaskManager.getService().getLastResumedActivityUserId();
+                final int iconResId = mUserManager.getUserStatusBarIconResId(userId);
+                // TODO(b/170249807, b/230779281): Handle non-managed-profile String
                 String accessibilityString = getManagedProfileAccessibilityString();
                 mMainExecutor.execute(() -> {
                     final boolean showIcon;
-                    if (isManagedProfile && (!mKeyguardStateController.isShowing()
+                    if (iconResId != Resources.ID_NULL && (!mKeyguardStateController.isShowing()
                             || mKeyguardStateController.isOccluded())) {
                         showIcon = true;
                         mIconController.setIcon(mSlotManagedProfile,
-                                R.drawable.stat_sys_managed_profile_status,
+                                iconResId,
                                 accessibilityString);
                     } else {
                         showIcon = false;
                     }
-                    if (mManagedProfileIconVisible != showIcon) {
+                    if (mProfileIconVisible != showIcon) {
                         mIconController.setIconVisibility(mSlotManagedProfile, showIcon);
-                        mManagedProfileIconVisible = showIcon;
+                        mProfileIconVisible = showIcon;
                     }
                 });
             } catch (RemoteException e) {
-                Log.w(TAG, "updateManagedProfile: ", e);
+                Log.w(TAG, "updateProfileIcon: ", e);
             }
         });
     }
@@ -579,7 +581,7 @@
                 public void onUserChanged(int newUser, Context userContext) {
                     mHandler.post(() -> {
                         updateAlarm();
-                        updateManagedProfile();
+                        updateProfileIcon();
                         onUserSetupChanged();
                     });
                 }
@@ -622,20 +624,20 @@
     public void appTransitionStarting(int displayId, long startTime, long duration,
             boolean forced) {
         if (mDisplayId == displayId) {
-            updateManagedProfile();
+            updateProfileIcon();
         }
     }
 
     @Override
     public void appTransitionFinished(int displayId) {
         if (mDisplayId == displayId) {
-            updateManagedProfile();
+            updateProfileIcon();
         }
     }
 
     @Override
     public void onKeyguardShowingChanged() {
-        updateManagedProfile();
+        updateProfileIcon();
     }
 
     @Override
@@ -758,8 +760,10 @@
                     break;
                 case Intent.ACTION_MANAGED_PROFILE_AVAILABLE:
                 case Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE:
-                case Intent.ACTION_MANAGED_PROFILE_REMOVED:
-                    updateManagedProfile();
+                case Intent.ACTION_PROFILE_REMOVED:
+                case Intent.ACTION_PROFILE_ACCESSIBLE:
+                case Intent.ACTION_PROFILE_INACCESSIBLE:
+                    updateProfileIcon();
                     break;
                 case AudioManager.ACTION_HEADSET_PLUG:
                     updateHeadsetPlug(intent);
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 5c1dfbe..ea57eb4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -22,6 +22,8 @@
 import static com.android.systemui.plugins.ActivityStarter.OnDismissAction;
 import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK;
 import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK_PULSING;
+import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow;
+import static com.android.systemui.util.kotlin.JavaAdapterKt.combineFlows;
 
 import android.content.Context;
 import android.content.res.ColorStateList;
@@ -60,10 +62,14 @@
 import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor;
 import com.android.systemui.bouncer.ui.BouncerView;
 import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.dock.DockManager;
 import com.android.systemui.dreams.DreamOverlayStateController;
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.flags.Flags;
+import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor;
+import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
+import com.android.systemui.keyguard.domain.interactor.WindowManagerLockscreenVisibilityInteractor;
 import com.android.systemui.navigationbar.NavigationBarView;
 import com.android.systemui.navigationbar.NavigationModeController;
 import com.android.systemui.navigationbar.TaskbarDelegate;
@@ -86,8 +92,6 @@
 import com.android.systemui.unfold.FoldAodAnimationController;
 import com.android.systemui.unfold.SysUIUnfoldComponent;
 
-import dagger.Lazy;
-
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -97,6 +101,9 @@
 
 import javax.inject.Inject;
 
+import dagger.Lazy;
+import kotlinx.coroutines.CoroutineDispatcher;
+
 /**
  * Manages creating, showing, hiding and resetting the keyguard within the status bar. Calls back
  * via {@link ViewMediatorCallback} to poke the wake lock and report that the keyguard is done,
@@ -281,6 +288,9 @@
     private int mLastBiometricMode;
     private boolean mLastScreenOffAnimationPlaying;
     private float mQsExpansion;
+
+    private FeatureFlags mFlags;
+
     final Set<KeyguardViewManagerCallback> mCallbacks = new HashSet<>();
     private boolean mIsBackAnimationEnabled;
     private final boolean mUdfpsNewTouchDetectionEnabled;
@@ -326,6 +336,7 @@
             }
         }
     };
+    private Lazy<WindowManagerLockscreenVisibilityInteractor> mWmLockscreenVisibilityInteractor;
 
     @Inject
     public StatusBarKeyguardViewManager(
@@ -352,7 +363,10 @@
             BouncerView primaryBouncerView,
             AlternateBouncerInteractor alternateBouncerInteractor,
             UdfpsOverlayInteractor udfpsOverlayInteractor,
-            ActivityStarter activityStarter
+            ActivityStarter activityStarter,
+            KeyguardTransitionInteractor keyguardTransitionInteractor,
+            @Main CoroutineDispatcher mainDispatcher,
+            Lazy<WindowManagerLockscreenVisibilityInteractor> wmLockscreenVisibilityInteractor
     ) {
         mContext = context;
         mViewMediatorCallback = callback;
@@ -370,6 +384,7 @@
         mShadeController = shadeController;
         mLatencyTracker = latencyTracker;
         mKeyguardSecurityModel = keyguardSecurityModel;
+        mFlags = featureFlags;
         mPrimaryBouncerCallbackInteractor = primaryBouncerCallbackInteractor;
         mPrimaryBouncerInteractor = primaryBouncerInteractor;
         mPrimaryBouncerView = primaryBouncerView;
@@ -381,8 +396,14 @@
         mUdfpsNewTouchDetectionEnabled = featureFlags.isEnabled(Flags.UDFPS_NEW_TOUCH_DETECTION);
         mUdfpsOverlayInteractor = udfpsOverlayInteractor;
         mActivityStarter = activityStarter;
+        mKeyguardTransitionInteractor = keyguardTransitionInteractor;
+        mMainDispatcher = mainDispatcher;
+        mWmLockscreenVisibilityInteractor = wmLockscreenVisibilityInteractor;
     }
 
+    KeyguardTransitionInteractor mKeyguardTransitionInteractor;
+    CoroutineDispatcher mMainDispatcher;
+
     @Override
     public void registerCentralSurfaces(CentralSurfaces centralSurfaces,
             ShadeViewController shadeViewController,
@@ -429,6 +450,14 @@
         }
     }
 
+    private KeyguardStateController.Callback mKeyguardStateControllerCallback =
+            new KeyguardStateController.Callback() {
+                @Override
+                public void onUnlockedChanged() {
+                    updateAlternateBouncerShowing(mAlternateBouncerInteractor.maybeHide());
+                }
+            };
+
     private void registerListeners() {
         mKeyguardUpdateManager.registerCallback(mUpdateMonitorCallback);
         mStatusBarStateController.addCallback(this);
@@ -442,6 +471,32 @@
             mDockManager.addListener(mDockEventListener);
             mIsDocked = mDockManager.isDocked();
         }
+        mKeyguardStateController.addCallback(mKeyguardStateControllerCallback);
+
+        if (mFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+            mShadeViewController.postToView(() ->
+                    collectFlow(
+                        getViewRootImpl().getView(),
+                        combineFlows(
+                                mKeyguardTransitionInteractor.getFinishedKeyguardState(),
+                                mWmLockscreenVisibilityInteractor.get()
+                                        .getUsingKeyguardGoingAwayAnimation(),
+                                (finishedState, animating) ->
+                                        KeyguardInteractor.Companion.isKeyguardVisibleInState(
+                                                finishedState)
+                                                || animating),
+                        this::consumeShowStatusBarKeyguardView));
+        }
+    }
+
+    private void consumeShowStatusBarKeyguardView(boolean show) {
+        if (show != mLastShowing) {
+            if (show) {
+                show(null);
+            } else {
+                hide(0, 0);
+            }
+        }
     }
 
     /** Register a callback, to be invoked by the Predictive Back system. */
@@ -1313,6 +1368,10 @@
             hideAlternateBouncer(false);
             executeAfterKeyguardGoneAction();
         }
+
+        if (mFlags.isEnabled(Flags.KEYGUARD_WM_STATE_REFACTOR)) {
+            mKeyguardTransitionInteractor.startDismissKeyguardTransition();
+        }
     }
 
     /** Display security message to relevant KeyguardMessageArea. */
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 92a7854..d472c35 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java
@@ -343,7 +343,7 @@
             HeadsUpEntry entry = getHeadsUpEntry(key);
             setEntryPinned(entry, false /* isPinned */);
             // maybe it got un sticky
-            entry.updateEntry(false /* updatePostTime */);
+            entry.updateEntry(false /* updatePostTime */, "unpinAll");
 
             // when the user unpinned all of HUNs by moving one HUN, all of HUNs should not stay
             // on the screen.
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 175473f..ef07eed 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManagerLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManagerLogger.kt
@@ -66,6 +66,15 @@
         })
     }
 
+    fun logAutoRemoveCanceled(entry: NotificationEntry, reason: String?) {
+        buffer.log(TAG, INFO, {
+            str1 = entry.logKey
+            str2 = reason ?: "unknown"
+        }, {
+            "cancel auto remove of $str1 reason: $str2"
+        })
+    }
+
     fun logRemoveNotification(key: String, releaseImmediately: Boolean) {
         buffer.log(TAG, INFO, {
             str1 = logKey(key)
@@ -89,16 +98,17 @@
             bool1 = alert
             bool2 = hasEntry
         }, {
-            "update notification $str1 alert: $bool1 hasEntry: $bool2"
+            "update notification $str1 alert: $bool1 hasEntry: $bool2 reason: $str2"
         })
     }
 
-    fun logUpdateEntry(entry: NotificationEntry, updatePostTime: Boolean) {
+    fun logUpdateEntry(entry: NotificationEntry, updatePostTime: Boolean, reason: String?) {
         buffer.log(TAG, INFO, {
             str1 = entry.logKey
             bool1 = updatePostTime
+            str2 = reason ?: "unknown"
         }, {
-            "update entry $str1 updatePostTime: $bool1"
+            "update entry $str1 updatePostTime: $bool1 reason: $str2"
         })
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateView.kt
index ae9d9ee..cd1dcd5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateView.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateView.kt
@@ -64,7 +64,7 @@
     override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
         val availableWidth = MeasureSpec.getSize(widthMeasureSpec) - paddingStart - paddingEnd
         if (MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.UNSPECIFIED && !freezeSwitching) {
-            onMeasureListener?.onMeasureAction(availableWidth)
+            onMeasureListener?.onMeasureAction(availableWidth, widthMeasureSpec)
         }
         super.onMeasure(widthMeasureSpec, heightMeasureSpec)
     }
@@ -74,6 +74,6 @@
     }
 
     interface OnMeasureListener {
-        fun onMeasureAction(availableWidth: Int)
+        fun onMeasureAction(availableWidth: Int, widthMeasureSpec: Int)
     }
 }
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateViewController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateViewController.kt
index f040d0a..4a31b86 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateViewController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateViewController.kt
@@ -28,9 +28,11 @@
 import android.os.UserHandle
 import android.text.TextUtils
 import android.util.Log
+import android.view.View.MeasureSpec
 import androidx.annotation.VisibleForTesting
 import com.android.systemui.Dependency
 import com.android.systemui.broadcast.BroadcastDispatcher
+import com.android.systemui.shade.ShadeExpansionStateManager
 import com.android.systemui.util.ViewController
 import com.android.systemui.util.time.SystemClock
 import java.text.FieldPosition
@@ -80,6 +82,7 @@
 class VariableDateViewController(
     private val systemClock: SystemClock,
     private val broadcastDispatcher: BroadcastDispatcher,
+    private val shadeExpansionStateManager: ShadeExpansionStateManager,
     private val timeTickHandler: Handler,
     view: VariableDateView
 ) : ViewController<VariableDateView>(view) {
@@ -94,6 +97,7 @@
                 post(::updateClock)
             }
         }
+    private var isQsExpanded = false
     private var lastWidth = Integer.MAX_VALUE
     private var lastText = ""
     private var currentTime = Date()
@@ -131,7 +135,11 @@
     }
 
     private val onMeasureListener = object : VariableDateView.OnMeasureListener {
-        override fun onMeasureAction(availableWidth: Int) {
+        override fun onMeasureAction(availableWidth: Int, widthMeasureSpec: Int) {
+            if (!isQsExpanded && MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.AT_MOST) {
+                // ignore measured width from AT_MOST passes when in QQS (b/289489856)
+                return
+            }
             if (availableWidth != lastWidth) {
                 // maybeChangeFormat will post if the pattern needs to change.
                 maybeChangeFormat(availableWidth)
@@ -140,6 +148,15 @@
         }
     }
 
+    private fun onQsExpansionFractionChanged(qsExpansionFraction: Float) {
+        val newIsQsExpanded = qsExpansionFraction > 0.5
+        if (newIsQsExpanded != isQsExpanded) {
+            isQsExpanded = newIsQsExpanded
+            // manually trigger a measure pass midway through the transition from QS to QQS
+            post { mView.measure(0, 0) }
+        }
+    }
+
     override fun onViewAttached() {
         val filter = IntentFilter().apply {
             addAction(Intent.ACTION_TIME_TICK)
@@ -151,6 +168,7 @@
         broadcastDispatcher.registerReceiver(intentReceiver, filter,
                 HandlerExecutor(timeTickHandler), UserHandle.SYSTEM)
 
+        shadeExpansionStateManager.addQsExpansionFractionListener(::onQsExpansionFractionChanged)
         post(::updateClock)
         mView.onAttach(onMeasureListener)
     }
@@ -158,6 +176,7 @@
     override fun onViewDetached() {
         dateFormat = null
         mView.onAttach(null)
+        shadeExpansionStateManager.removeQsExpansionFractionListener(::onQsExpansionFractionChanged)
         broadcastDispatcher.unregisterReceiver(intentReceiver)
     }
 
@@ -211,12 +230,14 @@
     class Factory @Inject constructor(
         private val systemClock: SystemClock,
         private val broadcastDispatcher: BroadcastDispatcher,
+        private val shadeExpansionStateManager: ShadeExpansionStateManager,
         @Named(Dependency.TIME_TICK_HANDLER_NAME) private val handler: Handler
     ) {
         fun create(view: VariableDateView): VariableDateViewController {
             return VariableDateViewController(
                     systemClock,
                     broadcastDispatcher,
+                    shadeExpansionStateManager,
                     handler,
                     view
             )
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/OWNERS b/packages/SystemUI/src/com/android/systemui/statusbar/tv/OWNERS
deleted file mode 100644
index a601e9b..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/OWNERS
+++ /dev/null
@@ -1,8 +0,0 @@
-# Android TV Core Framework
-rgl@google.com
-valiiftime@google.com
-galinap@google.com
-patrikf@google.com
-robhor@google.com
-sergeynv@google.com
-
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
deleted file mode 100644
index b1b8341..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
+++ /dev/null
@@ -1,81 +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.tv;
-
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-
-import com.android.internal.statusbar.IStatusBarService;
-import com.android.systemui.CoreStartable;
-import com.android.systemui.assist.AssistManager;
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.statusbar.CommandQueue;
-
-import javax.inject.Inject;
-
-import dagger.Lazy;
-
-/**
- * Status bar implementation for "large screen" products that mostly present no on-screen nav.
- * Serves as a collection of UI components, rather than showing its own UI.
- */
-@SysUISingleton
-public class TvStatusBar implements CoreStartable, CommandQueue.Callbacks {
-
-    private static final String ACTION_SHOW_PIP_MENU =
-            "com.android.wm.shell.pip.tv.notification.action.SHOW_PIP_MENU";
-    private static final String SYSTEMUI_PERMISSION = "com.android.systemui.permission.SELF";
-
-    private final Context mContext;
-    private final CommandQueue mCommandQueue;
-    private final Lazy<AssistManager> mAssistManagerLazy;
-
-    @Inject
-    public TvStatusBar(Context context, CommandQueue commandQueue,
-            Lazy<AssistManager> assistManagerLazy) {
-        mContext = context;
-        mCommandQueue = commandQueue;
-        mAssistManagerLazy = assistManagerLazy;
-    }
-
-    @Override
-    public void start() {
-        final IStatusBarService barService = IStatusBarService.Stub.asInterface(
-                ServiceManager.getService(Context.STATUS_BAR_SERVICE));
-        mCommandQueue.addCallback(this);
-        try {
-            barService.registerStatusBar(mCommandQueue);
-        } catch (RemoteException ex) {
-            // If the system process isn't there we're doomed anyway.
-        }
-    }
-
-    @Override
-    public void startAssist(Bundle args) {
-        mAssistManagerLazy.get().startAssist(args);
-    }
-
-    @Override
-    public void showPictureInPictureMenu() {
-        mContext.sendBroadcast(
-                new Intent(ACTION_SHOW_PIP_MENU).setPackage(mContext.getPackageName()),
-                SYSTEMUI_PERMISSION);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/VpnStatusObserver.kt b/packages/SystemUI/src/com/android/systemui/statusbar/tv/VpnStatusObserver.kt
deleted file mode 100644
index b938c90..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/VpnStatusObserver.kt
+++ /dev/null
@@ -1,140 +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.
- */
-
-@file:JvmName("VpnStatusObserver")
-
-package com.android.systemui.statusbar.tv
-
-import android.app.Notification
-import android.app.NotificationChannel
-import android.app.NotificationManager
-import android.content.Context
-import com.android.internal.messages.nano.SystemMessageProto
-import com.android.internal.net.VpnConfig
-import com.android.systemui.CoreStartable
-import com.android.systemui.R
-import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.statusbar.policy.SecurityController
-import javax.inject.Inject
-
-/**
- * Observes if a vpn connection is active and displays a notification to the user
- */
-@SysUISingleton
-class VpnStatusObserver @Inject constructor(
-    private val context: Context,
-    private val securityController: SecurityController
-) : CoreStartable,
-        SecurityController.SecurityControllerCallback {
-
-    private var vpnConnected = false
-    private val notificationManager = NotificationManager.from(context)
-    private val notificationChannel = createNotificationChannel()
-    private val vpnConnectedNotificationBuilder = createVpnConnectedNotificationBuilder()
-    private val vpnDisconnectedNotification = createVpnDisconnectedNotification()
-
-    private val vpnIconId: Int
-        get() = if (securityController.isVpnBranded) {
-            R.drawable.stat_sys_branded_vpn
-        } else {
-            R.drawable.stat_sys_vpn_ic
-        }
-
-    private val vpnName: String?
-        get() = securityController.primaryVpnName ?: securityController.workProfileVpnName
-
-    override fun start() {
-        // register callback to vpn state changes
-        securityController.addCallback(this)
-    }
-
-    override fun onStateChanged() {
-        securityController.isVpnEnabled.let { newVpnConnected ->
-            if (vpnConnected != newVpnConnected) {
-                if (newVpnConnected) {
-                    notifyVpnConnected()
-                } else {
-                    notifyVpnDisconnected()
-                }
-                vpnConnected = newVpnConnected
-            }
-        }
-    }
-
-    private fun notifyVpnConnected() = notificationManager.notify(
-            NOTIFICATION_TAG,
-            SystemMessageProto.SystemMessage.NOTE_VPN_STATUS,
-            createVpnConnectedNotification()
-    )
-
-    private fun notifyVpnDisconnected() = notificationManager.run {
-        // remove existing connected notification
-        cancel(NOTIFICATION_TAG, SystemMessageProto.SystemMessage.NOTE_VPN_STATUS)
-        // show the disconnected notification only for a short while
-        notify(NOTIFICATION_TAG, SystemMessageProto.SystemMessage.NOTE_VPN_DISCONNECTED,
-                vpnDisconnectedNotification)
-    }
-
-    private fun createNotificationChannel() =
-            NotificationChannel(
-                    NOTIFICATION_CHANNEL_TV_VPN,
-                    NOTIFICATION_CHANNEL_TV_VPN,
-                    NotificationManager.IMPORTANCE_HIGH
-            ).also {
-                notificationManager.createNotificationChannel(it)
-            }
-
-    private fun createVpnConnectedNotification() =
-            vpnConnectedNotificationBuilder
-                    .apply {
-                        vpnName?.let {
-                            setContentText(
-                                    context.getString(
-                                            R.string.notification_disclosure_vpn_text, it
-                                    )
-                            )
-                        }
-                    }
-                    .build()
-
-    private fun createVpnConnectedNotificationBuilder() =
-            Notification.Builder(context, NOTIFICATION_CHANNEL_TV_VPN)
-                    .setSmallIcon(vpnIconId)
-                    .setVisibility(Notification.VISIBILITY_PUBLIC)
-                    .setCategory(Notification.CATEGORY_SYSTEM)
-                    .extend(Notification.TvExtender())
-                    .setOngoing(true)
-                    .setContentTitle(context.getString(R.string.notification_vpn_connected))
-                    .setContentIntent(VpnConfig.getIntentForStatusPanel(context))
-
-    private fun createVpnDisconnectedNotification() =
-            Notification.Builder(context, NOTIFICATION_CHANNEL_TV_VPN)
-                    .setSmallIcon(vpnIconId)
-                    .setVisibility(Notification.VISIBILITY_PUBLIC)
-                    .setCategory(Notification.CATEGORY_SYSTEM)
-                    .extend(Notification.TvExtender())
-                    .setTimeoutAfter(VPN_DISCONNECTED_NOTIFICATION_TIMEOUT_MS)
-                    .setContentTitle(context.getString(R.string.notification_vpn_disconnected))
-                    .build()
-
-    companion object {
-        const val NOTIFICATION_CHANNEL_TV_VPN = "VPN Status"
-        val NOTIFICATION_TAG: String = VpnStatusObserver::class.java.simpleName
-
-        private const val TAG = "TvVpnNotification"
-        private const val VPN_DISCONNECTED_NOTIFICATION_TIMEOUT_MS = 5_000L
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/notifications/TvNotificationAdapter.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/notifications/TvNotificationAdapter.java
deleted file mode 100644
index fd7c30f..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/notifications/TvNotificationAdapter.java
+++ /dev/null
@@ -1,116 +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.tv.notifications;
-
-import android.app.BroadcastOptions;
-import android.app.Notification;
-import android.app.PendingIntent;
-import android.service.notification.StatusBarNotification;
-import android.util.Log;
-import android.util.SparseArray;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.android.systemui.R;
-
-/**
- * Adapter for the VerticalGridView of the TvNotificationsPanelView.
- */
-public class TvNotificationAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
-    private static final String TAG = "TvNotificationAdapter";
-    private SparseArray<StatusBarNotification> mNotifications;
-
-    public TvNotificationAdapter() {
-        setHasStableIds(true);
-    }
-
-    @NonNull
-    @Override
-    public TvNotificationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
-        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.tv_notification_item,
-                parent, false);
-        return new TvNotificationViewHolder(view);
-    }
-
-    @Override
-    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
-        if (mNotifications == null) {
-            Log.e(TAG, "Could not bind view holder because the notification is missing");
-            return;
-        }
-
-        TvNotificationViewHolder holder = (TvNotificationViewHolder) viewHolder;
-        Notification notification = mNotifications.valueAt(position).getNotification();
-        holder.mTitle.setText(notification.extras.getString(Notification.EXTRA_TITLE));
-        holder.mDetails.setText(notification.extras.getString(Notification.EXTRA_TEXT));
-        holder.mPendingIntent = notification.contentIntent;
-    }
-
-    @Override
-    public int getItemCount() {
-        return mNotifications == null ? 0 : mNotifications.size();
-    }
-
-    @Override
-    public long getItemId(int position) {
-        // the item id is the notification id
-        return mNotifications.keyAt(position);
-    }
-
-    /**
-     * Updates the notifications and calls notifyDataSetChanged().
-     */
-    public void setNotifications(SparseArray<StatusBarNotification> notifications) {
-        this.mNotifications = notifications;
-        notifyDataSetChanged();
-    }
-
-    private static class TvNotificationViewHolder extends RecyclerView.ViewHolder implements
-            View.OnClickListener {
-        final TextView mTitle;
-        final TextView mDetails;
-        PendingIntent mPendingIntent;
-
-        protected TvNotificationViewHolder(View itemView) {
-            super(itemView);
-            mTitle = itemView.findViewById(R.id.tv_notification_title);
-            mDetails = itemView.findViewById(R.id.tv_notification_details);
-            itemView.setOnClickListener(this);
-        }
-
-        @Override
-        public void onClick(View v) {
-            try {
-                if (mPendingIntent != null) {
-                    BroadcastOptions options = BroadcastOptions.makeBasic();
-                    options.setInteractive(true);
-                    options.setPendingIntentBackgroundActivityStartMode(
-                            BroadcastOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED);
-                    mPendingIntent.send(options.toBundle());
-                }
-            } catch (PendingIntent.CanceledException e) {
-                Log.d(TAG, "Pending intent canceled for : " + mPendingIntent);
-            }
-        }
-    }
-
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/notifications/TvNotificationHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/notifications/TvNotificationHandler.java
deleted file mode 100644
index b92725b..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/notifications/TvNotificationHandler.java
+++ /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.systemui.statusbar.tv.notifications;
-
-import android.annotation.Nullable;
-import android.app.Notification;
-import android.service.notification.NotificationListenerService;
-import android.service.notification.StatusBarNotification;
-import android.util.Log;
-import android.util.SparseArray;
-
-import com.android.systemui.CoreStartable;
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.statusbar.NotificationListener;
-
-import javax.inject.Inject;
-
-/**
- * Keeps track of the notifications on TV.
- */
-@SysUISingleton
-public class TvNotificationHandler implements CoreStartable,
-        NotificationListener.NotificationHandler {
-    private static final String TAG = "TvNotificationHandler";
-    private final NotificationListener mNotificationListener;
-    private final SparseArray<StatusBarNotification> mNotifications = new SparseArray<>();
-    @Nullable
-    private Listener mUpdateListener;
-
-    @Inject
-    public TvNotificationHandler(NotificationListener notificationListener) {
-        mNotificationListener = notificationListener;
-    }
-
-    public SparseArray<StatusBarNotification> getCurrentNotifications() {
-        return mNotifications;
-    }
-
-    public void setTvNotificationListener(Listener listener) {
-        mUpdateListener = listener;
-    }
-
-    @Override
-    public void start() {
-        mNotificationListener.addNotificationHandler(this);
-        mNotificationListener.registerAsSystemService();
-    }
-
-    @Override
-    public void onNotificationPosted(StatusBarNotification sbn,
-            NotificationListenerService.RankingMap rankingMap) {
-        if (!new Notification.TvExtender(sbn.getNotification()).isAvailableOnTv()) {
-            Log.v(TAG, "Notification not added because it isn't relevant for tv");
-            return;
-        }
-
-        mNotifications.put(sbn.getId(), sbn);
-        if (mUpdateListener != null) {
-            mUpdateListener.notificationsUpdated(mNotifications);
-        }
-        Log.d(TAG, "Notification added");
-    }
-
-    @Override
-    public void onNotificationRemoved(StatusBarNotification sbn,
-            NotificationListenerService.RankingMap rankingMap) {
-
-        if (mNotifications.contains(sbn.getId())) {
-            mNotifications.remove(sbn.getId());
-            Log.d(TAG, "Notification removed");
-
-            if (mUpdateListener != null) {
-                mUpdateListener.notificationsUpdated(mNotifications);
-            }
-        }
-    }
-
-    @Override
-    public void onNotificationRemoved(StatusBarNotification sbn,
-            NotificationListenerService.RankingMap rankingMap, int reason) {
-        onNotificationRemoved(sbn, rankingMap);
-    }
-
-    @Override
-    public void onNotificationRankingUpdate(NotificationListenerService.RankingMap rankingMap) {
-        // noop
-    }
-
-    @Override
-    public void onNotificationsInitialized() {
-        // noop
-    }
-
-    /**
-     * Get notified when the notifications are updated.
-     */
-    interface Listener {
-        void notificationsUpdated(SparseArray<StatusBarNotification> sbns);
-    }
-
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/notifications/TvNotificationPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/notifications/TvNotificationPanel.java
deleted file mode 100644
index dbbd0b8..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/notifications/TvNotificationPanel.java
+++ /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.systemui.statusbar.tv.notifications;
-
-import android.Manifest;
-import android.app.NotificationManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.os.UserHandle;
-import android.util.Log;
-
-import com.android.systemui.CoreStartable;
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.statusbar.CommandQueue;
-
-import javax.inject.Inject;
-
-/**
- * Offers control methods for the notification panel handler on TV devices.
- */
-@SysUISingleton
-public class TvNotificationPanel implements CoreStartable, CommandQueue.Callbacks {
-    private static final String TAG = "TvNotificationPanel";
-    private final Context mContext;
-    private final CommandQueue mCommandQueue;
-    private final String mNotificationHandlerPackage;
-
-    @Inject
-    public TvNotificationPanel(Context context, CommandQueue commandQueue) {
-        mContext = context;
-        mCommandQueue = commandQueue;
-        mNotificationHandlerPackage = mContext.getResources().getString(
-                com.android.internal.R.string.config_notificationHandlerPackage);
-    }
-
-    @Override
-    public void start() {
-        mCommandQueue.addCallback(this);
-    }
-
-    @Override
-    public void togglePanel() {
-        if (!mNotificationHandlerPackage.isEmpty()) {
-            startNotificationHandlerActivity(
-                    new Intent(NotificationManager.ACTION_TOGGLE_NOTIFICATION_HANDLER_PANEL));
-        } else {
-            openInternalNotificationPanel(
-                    NotificationManager.ACTION_TOGGLE_NOTIFICATION_HANDLER_PANEL);
-        }
-    }
-
-    @Override
-    public void animateExpandNotificationsPanel() {
-        if (!mNotificationHandlerPackage.isEmpty()) {
-            startNotificationHandlerActivity(
-                    new Intent(NotificationManager.ACTION_OPEN_NOTIFICATION_HANDLER_PANEL));
-        } else {
-            openInternalNotificationPanel(
-                    NotificationManager.ACTION_OPEN_NOTIFICATION_HANDLER_PANEL);
-        }
-    }
-
-    @Override
-    public void animateCollapsePanels(int flags, boolean force) {
-        if (!mNotificationHandlerPackage.isEmpty()
-                && (flags & CommandQueue.FLAG_EXCLUDE_NOTIFICATION_PANEL) == 0) {
-            Intent closeNotificationIntent = new Intent(
-                    NotificationManager.ACTION_CLOSE_NOTIFICATION_HANDLER_PANEL);
-            closeNotificationIntent.setPackage(mNotificationHandlerPackage);
-            mContext.sendBroadcastAsUser(closeNotificationIntent, UserHandle.CURRENT);
-        } else {
-            openInternalNotificationPanel(
-                    NotificationManager.ACTION_CLOSE_NOTIFICATION_HANDLER_PANEL);
-        }
-    }
-
-    private void openInternalNotificationPanel(String action) {
-        Intent intent = new Intent(mContext, TvNotificationPanelActivity.class);
-        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
-        intent.setAction(action);
-        mContext.startActivityAsUser(intent, UserHandle.SYSTEM);
-    }
-
-    /**
-     * Starts the activity intent if all of the following are true
-     * <ul>
-     * <li> the notification handler package is a system component </li>
-     * <li> the provided intent is handled by the notification handler package </li>
-     * <li> the notification handler requests the
-     * {@link android.Manifest.permission#STATUS_BAR_SERVICE} permission for the given intent</li>
-     * </ul>
-     *
-     * @param intent The intent for starting the desired activity
-     */
-    private void startNotificationHandlerActivity(Intent intent) {
-        intent.setPackage(mNotificationHandlerPackage);
-        PackageManager pm = mContext.getPackageManager();
-        ResolveInfo ri = pm.resolveActivity(intent, PackageManager.MATCH_SYSTEM_ONLY);
-        if (ri != null && ri.activityInfo != null) {
-            if (ri.activityInfo.permission != null && ri.activityInfo.permission.equals(
-                    Manifest.permission.STATUS_BAR_SERVICE)) {
-                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
-                mContext.startActivityAsUser(intent, UserHandle.CURRENT);
-            } else {
-                Log.e(TAG,
-                        "Not launching notification handler activity: Notification handler does "
-                                + "not require the STATUS_BAR_SERVICE permission for intent "
-                                + intent.getAction());
-            }
-        } else {
-            Log.e(TAG,
-                    "Not launching notification handler activity: Could not resolve activityInfo "
-                            + "for intent "
-                            + intent.getAction());
-        }
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/notifications/TvNotificationPanelActivity.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/notifications/TvNotificationPanelActivity.java
deleted file mode 100644
index b325b10..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/notifications/TvNotificationPanelActivity.java
+++ /dev/null
@@ -1,142 +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.tv.notifications;
-
-import android.annotation.NonNull;
-import android.app.Activity;
-import android.app.NotificationManager;
-import android.content.Intent;
-import android.graphics.drawable.ColorDrawable;
-import android.os.Bundle;
-import android.service.notification.StatusBarNotification;
-import android.util.SparseArray;
-import android.view.Gravity;
-import android.view.View;
-
-import androidx.leanback.widget.VerticalGridView;
-
-import com.android.systemui.R;
-
-import java.util.function.Consumer;
-
-import javax.inject.Inject;
-
-/**
- * This Activity shows a notification panel for tv. It is used if no other app (e.g. a launcher) can
- * be found to show the notifications.
- */
-public class TvNotificationPanelActivity extends Activity implements
-        TvNotificationHandler.Listener {
-    private final TvNotificationHandler mTvNotificationHandler;
-    private TvNotificationAdapter mTvNotificationAdapter;
-    private VerticalGridView mNotificationListView;
-    private View mNotificationPlaceholder;
-    private boolean mPanelAlreadyOpen = false;
-    private final Consumer<Boolean> mBlurConsumer = this::enableBlur;
-
-    @Inject
-    public TvNotificationPanelActivity(TvNotificationHandler tvNotificationHandler) {
-        super();
-        mTvNotificationHandler = tvNotificationHandler;
-    }
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        if (maybeClosePanel(getIntent())) {
-            return;
-        }
-        mPanelAlreadyOpen = true;
-
-        setContentView(R.layout.tv_notification_panel);
-
-        mNotificationPlaceholder = findViewById(R.id.no_tv_notifications);
-        mTvNotificationAdapter = new TvNotificationAdapter();
-
-        mNotificationListView = findViewById(R.id.notifications_list);
-        mNotificationListView.setAdapter(mTvNotificationAdapter);
-        mNotificationListView.setColumnWidth(R.dimen.tv_notification_panel_width);
-
-        mTvNotificationHandler.setTvNotificationListener(this);
-        notificationsUpdated(mTvNotificationHandler.getCurrentNotifications());
-    }
-
-    @Override
-    public void notificationsUpdated(@NonNull SparseArray<StatusBarNotification> notificationList) {
-        mTvNotificationAdapter.setNotifications(notificationList);
-
-        boolean noNotifications = notificationList.size() == 0;
-        mNotificationListView.setVisibility(noNotifications ? View.GONE : View.VISIBLE);
-        mNotificationPlaceholder.setVisibility(noNotifications ? View.VISIBLE : View.GONE);
-    }
-
-    @Override
-    public void onNewIntent(Intent intent) {
-        super.onNewIntent(intent);
-        maybeClosePanel(intent);
-    }
-
-    /**
-     * Handles intents from onCreate and onNewIntent.
-     *
-     * @return true if the panel is being closed, false if it is being opened
-     */
-    private boolean maybeClosePanel(Intent intent) {
-        if (NotificationManager.ACTION_CLOSE_NOTIFICATION_HANDLER_PANEL.equals(intent.getAction())
-                || (mPanelAlreadyOpen
-                && NotificationManager.ACTION_TOGGLE_NOTIFICATION_HANDLER_PANEL.equals(
-                intent.getAction()))) {
-            finish();
-            return true;
-        }
-        return false;
-    }
-
-    @Override
-    public void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        getWindow().setGravity(Gravity.END);
-        getWindowManager().addCrossWindowBlurEnabledListener(mBlurConsumer);
-    }
-
-    private void enableBlur(boolean enabled) {
-        if (enabled) {
-            int blurRadius = getResources().getDimensionPixelSize(
-                    R.dimen.tv_notification_blur_radius);
-            getWindow().setBackgroundDrawable(
-                    new ColorDrawable(getColor(R.color.tv_notification_blur_background_color)));
-            getWindow().setBackgroundBlurRadius(blurRadius);
-        } else {
-            getWindow().setBackgroundDrawable(
-                    new ColorDrawable(getColor(R.color.tv_notification_default_background_color)));
-            getWindow().setBackgroundBlurRadius(0);
-        }
-    }
-
-    @Override
-    public void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        getWindowManager().removeCrossWindowBlurEnabledListener(mBlurConsumer);
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        mTvNotificationHandler.setTvNotificationListener(null);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/tv/TVSystemUICoreStartableModule.kt b/packages/SystemUI/src/com/android/systemui/tv/TVSystemUICoreStartableModule.kt
deleted file mode 100644
index 573fbf7..0000000
--- a/packages/SystemUI/src/com/android/systemui/tv/TVSystemUICoreStartableModule.kt
+++ /dev/null
@@ -1,171 +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.tv
-
-import com.android.systemui.CoreStartable
-import com.android.systemui.SliceBroadcastRelayHandler
-import com.android.systemui.accessibility.WindowMagnification
-import com.android.systemui.dagger.qualifiers.PerUser
-import com.android.systemui.globalactions.GlobalActionsComponent
-import com.android.systemui.keyboard.KeyboardUI
-import com.android.systemui.media.RingtonePlayer
-import com.android.systemui.media.systemsounds.HomeSoundEffectController
-import com.android.systemui.power.PowerUI
-import com.android.systemui.privacy.television.TvPrivacyChipsController
-import com.android.systemui.shortcut.ShortcutKeyDispatcher
-import com.android.systemui.statusbar.notification.InstantAppNotifier
-import com.android.systemui.statusbar.tv.TvStatusBar
-import com.android.systemui.statusbar.tv.VpnStatusObserver
-import com.android.systemui.statusbar.tv.notifications.TvNotificationHandler
-import com.android.systemui.statusbar.tv.notifications.TvNotificationPanel
-import com.android.systemui.theme.ThemeOverlayController
-import com.android.systemui.toast.ToastUI
-import com.android.systemui.usb.StorageNotification
-import com.android.systemui.util.NotificationChannels
-import com.android.systemui.volume.VolumeUI
-import com.android.systemui.wmshell.WMShell
-import dagger.Binds
-import dagger.Module
-import dagger.multibindings.ClassKey
-import dagger.multibindings.IntoMap
-
-/**
- * Collection of {@link CoreStartable}s that should be run on TV.
- */
-@Module
-abstract class TVSystemUICoreStartableModule {
-    /** Inject into GlobalActionsComponent.  */
-    @Binds
-    @IntoMap
-    @ClassKey(GlobalActionsComponent::class)
-    abstract fun bindGlobalActionsComponent(sysui: GlobalActionsComponent): CoreStartable
-
-    /** Inject into HomeSoundEffectController.  */
-    @Binds
-    @IntoMap
-    @ClassKey(HomeSoundEffectController::class)
-    abstract fun bindHomeSoundEffectController(sysui: HomeSoundEffectController): CoreStartable
-
-    /** Inject into InstantAppNotifier.  */
-    @Binds
-    @IntoMap
-    @ClassKey(InstantAppNotifier::class)
-    abstract fun bindInstantAppNotifier(sysui: InstantAppNotifier): CoreStartable
-
-    /** Inject into KeyboardUI.  */
-    @Binds
-    @IntoMap
-    @ClassKey(KeyboardUI::class)
-    abstract fun bindKeyboardUI(sysui: KeyboardUI): CoreStartable
-
-    /** Inject into NotificationChannels.  */
-    @Binds
-    @IntoMap
-    @ClassKey(NotificationChannels::class)
-    @PerUser
-    abstract fun bindNotificationChannels(sysui: NotificationChannels): CoreStartable
-
-    /** Inject into PowerUI.  */
-    @Binds
-    @IntoMap
-    @ClassKey(PowerUI::class)
-    abstract fun bindPowerUI(sysui: PowerUI): CoreStartable
-
-    /** Inject into RingtonePlayer.  */
-    @Binds
-    @IntoMap
-    @ClassKey(RingtonePlayer::class)
-    abstract fun bind(sysui: RingtonePlayer): CoreStartable
-
-    /** Inject into ShortcutKeyDispatcher.  */
-    @Binds
-    @IntoMap
-    @ClassKey(ShortcutKeyDispatcher::class)
-    abstract fun bindShortcutKeyDispatcher(sysui: ShortcutKeyDispatcher): CoreStartable
-
-    /** Inject into SliceBroadcastRelayHandler.  */
-    @Binds
-    @IntoMap
-    @ClassKey(SliceBroadcastRelayHandler::class)
-    abstract fun bindSliceBroadcastRelayHandler(sysui: SliceBroadcastRelayHandler): CoreStartable
-
-    /** Inject into StorageNotification.  */
-    @Binds
-    @IntoMap
-    @ClassKey(StorageNotification::class)
-    abstract fun bindStorageNotification(sysui: StorageNotification): CoreStartable
-
-    /** Inject into ThemeOverlayController.  */
-    @Binds
-    @IntoMap
-    @ClassKey(ThemeOverlayController::class)
-    abstract fun bindThemeOverlayController(sysui: ThemeOverlayController): CoreStartable
-
-    /** Inject into ToastUI.  */
-    @Binds
-    @IntoMap
-    @ClassKey(ToastUI::class)
-    abstract fun bindToastUI(service: ToastUI): CoreStartable
-
-    /** Inject into TvNotificationHandler.  */
-    @Binds
-    @IntoMap
-    @ClassKey(TvNotificationHandler::class)
-    abstract fun bindTvNotificationHandler(sysui: TvNotificationHandler): CoreStartable
-
-    /** Inject into TvNotificationPanel.  */
-    @Binds
-    @IntoMap
-    @ClassKey(TvNotificationPanel::class)
-    abstract fun bindTvNotificationPanel(sysui: TvNotificationPanel): CoreStartable
-
-    /** Inject into TvPrivacyChipsController.  */
-    @Binds
-    @IntoMap
-    @ClassKey(TvPrivacyChipsController::class)
-    abstract fun bindTvPrivacyChipsController(sysui: TvPrivacyChipsController): CoreStartable
-
-    /** Inject into TvStatusBar.  */
-    @Binds
-    @IntoMap
-    @ClassKey(TvStatusBar::class)
-    abstract fun bindTvStatusBar(sysui: TvStatusBar): CoreStartable
-
-    /** Inject into VolumeUI.  */
-    @Binds
-    @IntoMap
-    @ClassKey(VolumeUI::class)
-    abstract fun bindVolumeUI(sysui: VolumeUI): CoreStartable
-
-    /** Inject into VpnStatusObserver.  */
-    @Binds
-    @IntoMap
-    @ClassKey(VpnStatusObserver::class)
-    abstract fun bindVpnStatusObserver(sysui: VpnStatusObserver): CoreStartable
-
-    /** Inject into WindowMagnification.  */
-    @Binds
-    @IntoMap
-    @ClassKey(WindowMagnification::class)
-    abstract fun bindWindowMagnification(sysui: WindowMagnification): CoreStartable
-
-    /** Inject into WMShell.  */
-    @Binds
-    @IntoMap
-    @ClassKey(WMShell::class)
-    abstract fun bindWMShell(sysui: WMShell): CoreStartable
-}
diff --git a/packages/SystemUI/src/com/android/systemui/tv/TvBottomSheetActivity.java b/packages/SystemUI/src/com/android/systemui/tv/TvBottomSheetActivity.java
deleted file mode 100644
index 90f2434..0000000
--- a/packages/SystemUI/src/com/android/systemui/tv/TvBottomSheetActivity.java
+++ /dev/null
@@ -1,107 +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.tv;
-
-import android.app.Activity;
-import android.graphics.PixelFormat;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.util.DisplayMetrics;
-import android.util.Log;
-import android.view.Gravity;
-import android.view.View;
-import android.view.WindowManager;
-
-import com.android.systemui.R;
-
-import java.util.Collections;
-import java.util.function.Consumer;
-
-/**
- * Generic bottom sheet with up to two icons in the beginning and two buttons.
- */
-public abstract class TvBottomSheetActivity extends Activity {
-
-    private static final String TAG = TvBottomSheetActivity.class.getSimpleName();
-    private Drawable mBackgroundWithBlur;
-    private Drawable mBackgroundWithoutBlur;
-
-    private final Consumer<Boolean> mBlurConsumer = this::onBlurChanged;
-
-    private void onBlurChanged(boolean enabled) {
-        Log.v(TAG, "blur enabled: " + enabled);
-        getWindow().setBackgroundDrawable(enabled ? mBackgroundWithBlur : mBackgroundWithoutBlur);
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.tv_bottom_sheet);
-
-        overridePendingTransition(R.anim.tv_bottom_sheet_enter, 0);
-
-        mBackgroundWithBlur = getResources()
-                .getDrawable(R.drawable.bottom_sheet_background_with_blur);
-        mBackgroundWithoutBlur = getResources().getDrawable(R.drawable.bottom_sheet_background);
-
-        DisplayMetrics metrics = getResources().getDisplayMetrics();
-        int screenWidth = metrics.widthPixels;
-        int screenHeight = metrics.heightPixels;
-        int marginPx = getResources().getDimensionPixelSize(R.dimen.bottom_sheet_margin);
-
-        WindowManager.LayoutParams windowParams = getWindow().getAttributes();
-        windowParams.width = screenWidth - marginPx * 2;
-        windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
-        windowParams.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
-        windowParams.horizontalMargin = 0f;
-        windowParams.verticalMargin = (float) marginPx / screenHeight;
-        windowParams.format = PixelFormat.TRANSPARENT;
-        windowParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG;
-        windowParams.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
-        windowParams.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
-        getWindow().setAttributes(windowParams);
-        getWindow().setElevation(getWindow().getElevation() + 5);
-        getWindow().setBackgroundBlurRadius(getResources().getDimensionPixelSize(
-                R.dimen.bottom_sheet_background_blur_radius));
-
-        final View rootView = findViewById(R.id.bottom_sheet);
-        rootView.addOnLayoutChangeListener((view, l, t, r, b, oldL, oldT, oldR, oldB) -> {
-            rootView.setUnrestrictedPreferKeepClearRects(
-                    Collections.singletonList(new Rect(0, 0, r - l, b - t)));
-        });
-    }
-
-    @Override
-    public void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        getWindowManager().addCrossWindowBlurEnabledListener(mBlurConsumer);
-    }
-
-    @Override
-    public void onDetachedFromWindow() {
-        getWindowManager().removeCrossWindowBlurEnabledListener(mBlurConsumer);
-        super.onDetachedFromWindow();
-    }
-
-    @Override
-    public void finish() {
-        super.finish();
-        overridePendingTransition(0, R.anim.tv_bottom_sheet_exit);
-    }
-
-}
diff --git a/packages/SystemUI/src/com/android/systemui/tv/TvGlobalRootComponent.java b/packages/SystemUI/src/com/android/systemui/tv/TvGlobalRootComponent.java
deleted file mode 100644
index 117cba7..0000000
--- a/packages/SystemUI/src/com/android/systemui/tv/TvGlobalRootComponent.java
+++ /dev/null
@@ -1,45 +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 com.android.systemui.dagger.GlobalModule;
-import com.android.systemui.dagger.GlobalRootComponent;
-
-import javax.inject.Singleton;
-
-import dagger.Component;
-
-/**
- * Root component for Dagger injection.
- */
-@Singleton
-@Component(modules = {GlobalModule.class})
-public interface TvGlobalRootComponent extends GlobalRootComponent {
-    /**
-     * Component Builder interface. This allows to bind Context instance in the component
-     */
-    @Component.Builder
-    interface Builder extends GlobalRootComponent.Builder {
-        TvGlobalRootComponent build();
-    }
-
-    @Override
-    TvWMComponent.Builder getWMComponentBuilder();
-
-    @Override
-    TvSysUIComponent.Builder getSysUIComponent();
-}
diff --git a/packages/SystemUI/src/com/android/systemui/tv/TvSysUIComponent.java b/packages/SystemUI/src/com/android/systemui/tv/TvSysUIComponent.java
deleted file mode 100644
index 82589d3..0000000
--- a/packages/SystemUI/src/com/android/systemui/tv/TvSysUIComponent.java
+++ /dev/null
@@ -1,61 +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 com.android.systemui.dagger.DefaultComponentBinder;
-import com.android.systemui.dagger.DependencyProvider;
-import com.android.systemui.dagger.SysUIComponent;
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.dagger.SystemUIModule;
-import com.android.systemui.globalactions.ShutdownUiModule;
-import com.android.systemui.keyguard.dagger.KeyguardModule;
-import com.android.systemui.recents.RecentsModule;
-import com.android.systemui.statusbar.dagger.CentralSurfacesDependenciesModule;
-import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
-import com.android.systemui.statusbar.notification.row.NotificationRowModule;
-import com.android.systemui.wallpapers.dagger.NoopWallpaperModule;
-
-import dagger.Subcomponent;
-
-/**
- * Dagger Subcomponent for Core SysUI.
- */
-@SysUISingleton
-@Subcomponent(modules = {
-        CentralSurfacesDependenciesModule.class,
-        DefaultComponentBinder.class,
-        DependencyProvider.class,
-        KeyguardModule.class,
-        NoopWallpaperModule.class,
-        NotificationRowModule.class,
-        NotificationsModule.class,
-        RecentsModule.class,
-        ShutdownUiModule.class,
-        SystemUIModule.class,
-        TvSystemUIBinder.class,
-        TVSystemUICoreStartableModule.class,
-        TvSystemUIModule.class})
-public interface TvSysUIComponent extends SysUIComponent {
-
-    /**
-     * Builder for a SysUIComponent.
-     */
-    @Subcomponent.Builder
-    interface Builder extends SysUIComponent.Builder {
-        TvSysUIComponent build();
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIBinder.java b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIBinder.java
deleted file mode 100644
index 23f37ec..0000000
--- a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIBinder.java
+++ /dev/null
@@ -1,28 +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 com.android.systemui.dagger.GlobalRootComponent;
-
-import dagger.Binds;
-import dagger.Module;
-
-@Module
-interface TvSystemUIBinder {
-    @Binds
-    GlobalRootComponent bindGlobalRootComponent(TvGlobalRootComponent globalRootComponent);
-}
diff --git a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIInitializer.java b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIInitializer.java
deleted file mode 100644
index fabbb2c..0000000
--- a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIInitializer.java
+++ /dev/null
@@ -1,37 +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.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
deleted file mode 100644
index 95e1e43..0000000
--- a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java
+++ /dev/null
@@ -1,219 +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 static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
-import static com.android.systemui.Dependency.LEAK_REPORT_EMAIL_NAME;
-
-import android.content.Context;
-import android.hardware.SensorPrivacyManager;
-import android.os.Handler;
-
-import com.android.internal.logging.UiEventLogger;
-import com.android.keyguard.KeyguardViewController;
-import com.android.systemui.dagger.ReferenceSystemUIModule;
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.dagger.qualifiers.Main;
-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.dagger.PowerModule;
-import com.android.systemui.privacy.MediaProjectionPrivacyItemMonitor;
-import com.android.systemui.privacy.PrivacyItemMonitor;
-import com.android.systemui.qs.dagger.QSModule;
-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.settings.dagger.MultiUserUtilsModule;
-import com.android.systemui.shade.NotificationShadeWindowControllerImpl;
-import com.android.systemui.shade.ShadeEmptyImplModule;
-import com.android.systemui.shade.ShadeExpansionStateManager;
-import com.android.systemui.statusbar.CommandQueue;
-import com.android.systemui.statusbar.NotificationListener;
-import com.android.systemui.statusbar.NotificationLockscreenUserManager;
-import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl;
-import com.android.systemui.statusbar.NotificationShadeWindowController;
-import com.android.systemui.statusbar.events.StatusBarEventsModule;
-import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider;
-import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager;
-import com.android.systemui.statusbar.phone.DozeServiceHost;
-import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
-import com.android.systemui.statusbar.phone.KeyguardBypassController;
-import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
-import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
-import com.android.systemui.statusbar.policy.AospPolicyModule;
-import com.android.systemui.statusbar.policy.ConfigurationController;
-import com.android.systemui.statusbar.policy.DeviceProvisionedController;
-import com.android.systemui.statusbar.policy.DeviceProvisionedControllerImpl;
-import com.android.systemui.statusbar.policy.HeadsUpManager;
-import com.android.systemui.statusbar.policy.HeadsUpManagerLogger;
-import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
-import com.android.systemui.statusbar.policy.IndividualSensorPrivacyControllerImpl;
-import com.android.systemui.statusbar.policy.SensorPrivacyController;
-import com.android.systemui.statusbar.policy.SensorPrivacyControllerImpl;
-import com.android.systemui.statusbar.tv.notifications.TvNotificationHandler;
-import com.android.systemui.volume.dagger.VolumeModule;
-
-import dagger.Binds;
-import dagger.Module;
-import dagger.Provides;
-import dagger.multibindings.IntoSet;
-
-import javax.inject.Named;
-
-/**
- * A TV specific version of {@link ReferenceSystemUIModule}.
- *
- * Code here should be specific to the TV variant of SystemUI and will not be included in other
- * variants of SystemUI.
- */
-@Module(
-        includes = {
-                AospPolicyModule.class,
-                GestureModule.class,
-                MultiUserUtilsModule.class,
-                PowerModule.class,
-                QSModule.class,
-                ReferenceScreenshotModule.class,
-                ShadeEmptyImplModule.class,
-                StatusBarEventsModule.class,
-                VolumeModule.class,
-        }
-)
-public abstract class TvSystemUIModule {
-
-    @SysUISingleton
-    @Provides
-    @Named(LEAK_REPORT_EMAIL_NAME)
-    static String provideLeakReportEmail() {
-        return "";
-    }
-
-    @Binds
-    abstract NotificationLockscreenUserManager bindNotificationLockscreenUserManager(
-            NotificationLockscreenUserManagerImpl notificationLockscreenUserManager);
-
-    @Provides
-    @SysUISingleton
-    static SensorPrivacyController provideSensorPrivacyController(
-            SensorPrivacyManager sensorPrivacyManager) {
-        SensorPrivacyController spC = new SensorPrivacyControllerImpl(sensorPrivacyManager);
-        spC.init();
-        return spC;
-    }
-
-    @Provides
-    @SysUISingleton
-    static IndividualSensorPrivacyController provideIndividualSensorPrivacyController(
-            SensorPrivacyManager sensorPrivacyManager) {
-        IndividualSensorPrivacyController spC = new IndividualSensorPrivacyControllerImpl(
-                sensorPrivacyManager);
-        spC.init();
-        return spC;
-    }
-
-    @Binds
-    @SysUISingleton
-    abstract QSFactory bindQSFactory(QSFactoryImpl qsFactoryImpl);
-
-    @Binds
-    abstract DockManager bindDockManager(DockManagerImpl dockManager);
-
-    @SysUISingleton
-    @Provides
-    @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME)
-    static boolean provideAllowNotificationLongPress() {
-        return true;
-    }
-
-    @SysUISingleton
-    @Provides
-    static HeadsUpManagerPhone provideHeadsUpManagerPhone(
-            Context context,
-            HeadsUpManagerLogger headsUpManagerLogger,
-            StatusBarStateController statusBarStateController,
-            KeyguardBypassController bypassController,
-            GroupMembershipManager groupManager,
-            VisualStabilityProvider visualStabilityProvider,
-            ConfigurationController configurationController,
-            @Main Handler handler,
-            AccessibilityManagerWrapper accessibilityManagerWrapper,
-            UiEventLogger uiEventLogger,
-            ShadeExpansionStateManager shadeExpansionStateManager) {
-        return new HeadsUpManagerPhone(
-                context,
-                headsUpManagerLogger,
-                statusBarStateController,
-                bypassController,
-                groupManager,
-                visualStabilityProvider,
-                configurationController,
-                handler,
-                accessibilityManagerWrapper,
-                uiEventLogger,
-                shadeExpansionStateManager
-        );
-    }
-
-    @Binds
-    abstract HeadsUpManager bindHeadsUpManagerPhone(HeadsUpManagerPhone headsUpManagerPhone);
-
-    @Provides
-    @SysUISingleton
-    static Recents provideRecents(Context context, RecentsImplementation recentsImplementation,
-            CommandQueue commandQueue) {
-        return new Recents(context, recentsImplementation, commandQueue);
-    }
-
-    @SysUISingleton
-    @Provides
-    static DeviceProvisionedController providesDeviceProvisionedController(
-            DeviceProvisionedControllerImpl deviceProvisionedController) {
-        deviceProvisionedController.init();
-        return deviceProvisionedController;
-    }
-
-    @Binds
-    abstract KeyguardViewController bindKeyguardViewController(
-            StatusBarKeyguardViewManager statusBarKeyguardViewManager);
-
-    @Binds
-    abstract NotificationShadeWindowController bindNotificationShadeController(
-            NotificationShadeWindowControllerImpl notificationShadeWindowController);
-
-    @Binds
-    abstract DozeHost provideDozeHost(DozeServiceHost dozeServiceHost);
-
-    @Provides
-    @SysUISingleton
-    static TvNotificationHandler provideTvNotificationHandler(
-            NotificationListener notificationListener) {
-        return new TvNotificationHandler(notificationListener);
-    }
-
-    /**
-     * Binds {@link MediaProjectionPrivacyItemMonitor} into the set of {@link PrivacyItemMonitor}.
-     */
-    @Binds
-    @IntoSet
-    abstract PrivacyItemMonitor bindMediaProjectionPrivacyItemMonitor(
-            MediaProjectionPrivacyItemMonitor mediaProjectionPrivacyItemMonitor);
-}
diff --git a/packages/SystemUI/src/com/android/systemui/tv/TvWMComponent.java b/packages/SystemUI/src/com/android/systemui/tv/TvWMComponent.java
deleted file mode 100644
index 8370615..0000000
--- a/packages/SystemUI/src/com/android/systemui/tv/TvWMComponent.java
+++ /dev/null
@@ -1,40 +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 com.android.systemui.dagger.WMComponent;
-import com.android.wm.shell.dagger.WMSingleton;
-import com.android.wm.shell.dagger.TvWMShellModule;
-
-import dagger.Subcomponent;
-
-
-/**
- * Dagger Subcomponent for WindowManager.
- */
-@WMSingleton
-@Subcomponent(modules = {TvWMShellModule.class})
-public interface TvWMComponent extends WMComponent {
-
-    /**
-     * Builder for a SysUIComponent.
-     */
-    @Subcomponent.Builder
-    interface Builder extends WMComponent.Builder {
-        TvWMComponent build();
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/usb/tv/TvUsbConfirmActivity.java b/packages/SystemUI/src/com/android/systemui/usb/tv/TvUsbConfirmActivity.java
deleted file mode 100644
index b03bedc..0000000
--- a/packages/SystemUI/src/com/android/systemui/usb/tv/TvUsbConfirmActivity.java
+++ /dev/null
@@ -1,53 +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.usb.tv;
-
-import com.android.systemui.R;
-
-/**
- * Dialog shown to confirm the package to start when a USB device or accessory is attached and there
- * is only one package that claims to handle this USB device or accessory.
- */
-public class TvUsbConfirmActivity extends TvUsbDialogActivity {
-    private static final String TAG = TvUsbConfirmActivity.class.getSimpleName();
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        final int strId;
-        if (mDialogHelper.isUsbDevice()) {
-            boolean useRecordWarning = mDialogHelper.deviceHasAudioCapture()
-                    && !mDialogHelper.packageHasAudioRecordingPermission();
-            strId = useRecordWarning
-                    ? R.string.usb_device_confirm_prompt_warn
-                    : R.string.usb_device_confirm_prompt;
-        } else {
-            // UsbAccessory case
-            strId = R.string.usb_accessory_confirm_prompt;
-        }
-        CharSequence text = getString(strId, mDialogHelper.getAppName(),
-                mDialogHelper.getDeviceDescription());
-        initUI(mDialogHelper.getAppName(), text);
-    }
-
-    @Override
-    void onConfirm() {
-        mDialogHelper.grantUidAccessPermission();
-        mDialogHelper.confirmDialogStartActivity();
-        finish();
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/usb/tv/TvUsbDialogActivity.java b/packages/SystemUI/src/com/android/systemui/usb/tv/TvUsbDialogActivity.java
deleted file mode 100644
index 1c003ea..0000000
--- a/packages/SystemUI/src/com/android/systemui/usb/tv/TvUsbDialogActivity.java
+++ /dev/null
@@ -1,95 +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.usb.tv;
-
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-import android.view.WindowManager;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.systemui.R;
-import com.android.systemui.tv.TvBottomSheetActivity;
-import com.android.systemui.usb.UsbDialogHelper;
-
-abstract class TvUsbDialogActivity extends TvBottomSheetActivity implements View.OnClickListener {
-    private static final String TAG = TvUsbDialogActivity.class.getSimpleName();
-    UsbDialogHelper mDialogHelper;
-
-    @Override
-    public final void onCreate(Bundle b) {
-        super.onCreate(b);
-        getWindow().addPrivateFlags(
-                WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
-        try {
-            mDialogHelper = new UsbDialogHelper(getApplicationContext(), getIntent());
-        } catch (IllegalStateException e) {
-            Log.e(TAG, "unable to initialize", e);
-            finish();
-        }
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        mDialogHelper.registerUsbDisconnectedReceiver(this);
-    }
-
-    @Override
-    protected void onPause() {
-        if (mDialogHelper != null) {
-            mDialogHelper.unregisterUsbDisconnectedReceiver(this);
-        }
-        super.onPause();
-    }
-
-    @Override
-    public void onClick(View v) {
-        if (v.getId() == R.id.bottom_sheet_positive_button) {
-            onConfirm();
-        } else {
-            finish();
-        }
-    }
-
-    /**
-     * Called when the ok button is clicked.
-     */
-    abstract void onConfirm();
-
-    void initUI(CharSequence title, CharSequence text) {
-        TextView titleTextView = findViewById(R.id.bottom_sheet_title);
-        TextView contentTextView = findViewById(R.id.bottom_sheet_body);
-        ImageView icon = findViewById(R.id.bottom_sheet_icon);
-        ImageView secondIcon = findViewById(R.id.bottom_sheet_second_icon);
-        Button okButton = findViewById(R.id.bottom_sheet_positive_button);
-        Button cancelButton = findViewById(R.id.bottom_sheet_negative_button);
-
-        titleTextView.setText(title);
-        contentTextView.setText(text);
-        icon.setImageResource(com.android.internal.R.drawable.ic_usb_48dp);
-        secondIcon.setVisibility(View.GONE);
-        okButton.setText(android.R.string.ok);
-        okButton.setOnClickListener(this);
-
-        cancelButton.setText(android.R.string.cancel);
-        cancelButton.setOnClickListener(this);
-        cancelButton.requestFocus();
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/usb/tv/TvUsbPermissionActivity.java b/packages/SystemUI/src/com/android/systemui/usb/tv/TvUsbPermissionActivity.java
deleted file mode 100644
index 7b415b7..0000000
--- a/packages/SystemUI/src/com/android/systemui/usb/tv/TvUsbPermissionActivity.java
+++ /dev/null
@@ -1,62 +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.usb.tv;
-
-import com.android.systemui.R;
-
-/**
- * Dialog shown when a package requests access to a USB device or accessory on TVs.
- */
-public class TvUsbPermissionActivity extends TvUsbDialogActivity {
-    private static final String TAG = TvUsbPermissionActivity.class.getSimpleName();
-
-    private boolean mPermissionGranted = false;
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        final int strId;
-        if (mDialogHelper.isUsbDevice()) {
-            boolean useRecordWarning = mDialogHelper.deviceHasAudioCapture()
-                    && !mDialogHelper.packageHasAudioRecordingPermission();
-            strId = useRecordWarning
-                    ? R.string.usb_device_permission_prompt_warn
-                    : R.string.usb_device_permission_prompt;
-        } else {
-            // UsbAccessory case
-            strId = R.string.usb_accessory_permission_prompt;
-        }
-        CharSequence text = getString(strId, mDialogHelper.getAppName(),
-                mDialogHelper.getDeviceDescription());
-        initUI(mDialogHelper.getAppName(), text);
-    }
-
-    @Override
-    protected void onPause() {
-        if (isFinishing()) {
-            mDialogHelper.sendPermissionDialogResponse(mPermissionGranted);
-        }
-        super.onPause();
-    }
-
-    @Override
-    void onConfirm() {
-        mDialogHelper.grantUidAccessPermission();
-        mPermissionGranted = true;
-        finish();
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/util/kotlin/JavaAdapter.kt b/packages/SystemUI/src/com/android/systemui/util/kotlin/JavaAdapter.kt
index 12d7b4d..0d0a646 100644
--- a/packages/SystemUI/src/com/android/systemui/util/kotlin/JavaAdapter.kt
+++ b/packages/SystemUI/src/com/android/systemui/util/kotlin/JavaAdapter.kt
@@ -29,7 +29,7 @@
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.flow.combine
 import kotlinx.coroutines.launch
 
 /** A class allowing Java classes to collect on Kotlin flows. */
@@ -75,3 +75,7 @@
         repeatOnLifecycle(state) { flow.collect { consumer.accept(it) } }
     }
 }
+
+fun <A, B, R> combineFlows(flow1: Flow<A>, flow2: Flow<B>, bifunction: (A, B) -> R): Flow<R> {
+    return combine(flow1, flow2, bifunction)
+}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java
index d39a53d..53f4837 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java
@@ -44,6 +44,7 @@
 import android.media.session.MediaSession.Token;
 import android.net.Uri;
 import android.os.Handler;
+import android.os.HandlerExecutor;
 import android.os.Looper;
 import android.os.Message;
 import android.os.RemoteException;
@@ -57,6 +58,7 @@
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.CaptioningManager;
 
+import androidx.annotation.NonNull;
 import androidx.lifecycle.Observer;
 
 import com.android.internal.annotations.GuardedBy;
@@ -65,6 +67,7 @@
 import com.android.systemui.R;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.keyguard.WakefulnessLifecycle;
 import com.android.systemui.plugins.VolumeDialogController;
@@ -131,7 +134,7 @@
     private final Receiver mReceiver = new Receiver();
     private final RingerModeObservers mRingerModeObservers;
     private final MediaSessions mMediaSessions;
-    private final CaptioningManager mCaptioningManager;
+    private CaptioningManager mCaptioningManager;
     private final KeyguardManager mKeyguardManager;
     private final ActivityManager mActivityManager;
     private final UserTracker mUserTracker;
@@ -179,11 +182,11 @@
             AccessibilityManager accessibilityManager,
             PackageManager packageManager,
             WakefulnessLifecycle wakefulnessLifecycle,
-            CaptioningManager captioningManager,
             KeyguardManager keyguardManager,
             ActivityManager activityManager,
             UserTracker userTracker,
-            DumpManager dumpManager
+            DumpManager dumpManager,
+            @Main Handler mainHandler
     ) {
         mContext = context.getApplicationContext();
         mPackageManager = packageManager;
@@ -209,10 +212,12 @@
         mVibrator = vibrator;
         mHasVibrator = mVibrator.hasVibrator();
         mAudioService = iAudioService;
-        mCaptioningManager = captioningManager;
         mKeyguardManager = keyguardManager;
         mActivityManager = activityManager;
         mUserTracker = userTracker;
+        mUserTracker.addCallback(mUserChangedCallback, new HandlerExecutor(mainHandler));
+        createCaptioningManagerServiceByUserContext(mUserTracker.getUserContext());
+
         dumpManager.registerDumpable("VolumeDialogControllerImpl", this);
 
         boolean accessibilityVolumeStreamActive = accessibilityManager
@@ -316,6 +321,25 @@
         mWorker.sendEmptyMessage(W.GET_STATE);
     }
 
+    /**
+     * We met issues about the wrong state of System Caption in multi-user mode.
+     * It happened in the usage of CaptioningManager Service from SysUI process
+     * that is a global system process of User 0.
+     * Therefore, we have to add callback on UserTracker that allows us to get the Context of
+     * active User and then get the corresponding CaptioningManager Service for further usages.
+     */
+    private final UserTracker.Callback mUserChangedCallback =
+            new UserTracker.Callback() {
+                @Override
+                public void onUserChanged(int newUser, @NonNull Context userContext) {
+                    createCaptioningManagerServiceByUserContext(userContext);
+                }
+            };
+
+    private void createCaptioningManagerServiceByUserContext(@NonNull Context userContext) {
+        mCaptioningManager = userContext.getSystemService(CaptioningManager.class);
+    }
+
     public boolean areCaptionsEnabled() {
         return mCaptioningManager.isSystemAudioCaptioningEnabled();
     }
@@ -719,7 +743,7 @@
          * This method will never be called if the CSD (Computed Sound Dose) feature is
          * not enabled. See com.android.android.server.audio.SoundDoseHelper for the state of
          * the feature.
-         * @param warning the type of warning to display, values are one of
+         * @param csdWarning the type of warning to display, values are one of
          *        {@link android.media.AudioManager#CSD_WARNING_DOSE_REACHED_1X},
          *        {@link android.media.AudioManager#CSD_WARNING_DOSE_REPEATED_5X},
          *        {@link android.media.AudioManager#CSD_WARNING_MOMENTARY_EXPOSURE},
diff --git a/packages/SystemUI/tests/AndroidManifest.xml b/packages/SystemUI/tests/AndroidManifest.xml
index 12da17f..03fde9f 100644
--- a/packages/SystemUI/tests/AndroidManifest.xml
+++ b/packages/SystemUI/tests/AndroidManifest.xml
@@ -192,6 +192,12 @@
             android:excludeFromRecents="true" />
 
         <activity
+            android:name="com.android.systemui.logcat.LogAccessDialogActivityTest$DialogTestable"
+            android:exported="false"
+            android:permission="com.android.systemui.permission.SELF"
+            android:excludeFromRecents="true" />
+
+        <activity
             android:name="com.android.systemui.notetask.LaunchNotesRoleSettingsTrampolineActivity"
             android:exported="false"
             android:permission="com.android.systemui.permission.SELF"
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt
index 9ba21da..1a98c12 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt
@@ -46,6 +46,8 @@
 import com.android.systemui.classifier.FalsingCollector
 import com.android.systemui.flags.FakeFeatureFlags
 import com.android.systemui.flags.Flags
+import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
+import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractorFactory
 import com.android.systemui.log.SessionTracker
 import com.android.systemui.plugins.ActivityStarter.OnDismissAction
 import com.android.systemui.plugins.FalsingManager
@@ -144,6 +146,7 @@
     private lateinit var testableResources: TestableResources
     private lateinit var sceneTestUtils: SceneTestUtils
     private lateinit var sceneInteractor: SceneInteractor
+    private lateinit var keyguardTransitionInteractor: KeyguardTransitionInteractor
     private lateinit var sceneTransitionStateFlow: MutableStateFlow<ObservableTransitionState>
 
     private lateinit var underTest: KeyguardSecurityContainerController
@@ -182,6 +185,7 @@
         featureFlags.set(Flags.REVAMPED_BOUNCER_MESSAGES, true)
         featureFlags.set(Flags.SCENE_CONTAINER, false)
         featureFlags.set(Flags.BOUNCER_USER_SWITCHER, false)
+        featureFlags.set(Flags.KEYGUARD_WM_STATE_REFACTOR, false)
 
         keyguardPasswordViewController =
             KeyguardPasswordViewController(
@@ -204,6 +208,9 @@
         whenever(userInteractor.getSelectedUserId()).thenReturn(TARGET_USER_ID)
         sceneTestUtils = SceneTestUtils(this)
         sceneInteractor = sceneTestUtils.sceneInteractor()
+        keyguardTransitionInteractor =
+            KeyguardTransitionInteractorFactory.create(sceneTestUtils.testScope.backgroundScope)
+                .keyguardTransitionInteractor
         sceneTransitionStateFlow =
             MutableStateFlow(ObservableTransitionState.Idle(SceneKey.Lockscreen))
         sceneInteractor.setTransitionState(sceneTransitionStateFlow)
@@ -236,9 +243,9 @@
                 { JavaAdapter(sceneTestUtils.testScope.backgroundScope) },
                 userInteractor,
                 faceAuthAccessibilityDelegate,
-            ) {
-                sceneInteractor
-            }
+                { sceneInteractor },
+                keyguardTransitionInteractor
+            )
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerBaseTest.java
index 956e0b81..b18137c 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/LockIconViewControllerBaseTest.java
@@ -49,7 +49,7 @@
 import com.android.systemui.flags.FakeFeatureFlags;
 import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository;
 import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory;
-import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
+import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractorFactory;
 import com.android.systemui.plugins.FalsingManager;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.statusbar.StatusBarState;
@@ -164,8 +164,9 @@
                 mVibrator,
                 mAuthRippleController,
                 mResources,
-                new KeyguardTransitionInteractor(mTransitionRepository,
-                        TestScopeProvider.getTestScope().getBackgroundScope()),
+                KeyguardTransitionInteractorFactory.create(
+                        TestScopeProvider.getTestScope().getBackgroundScope(),
+                                mTransitionRepository).getKeyguardTransitionInteractor(),
                 KeyguardInteractorFactory.create(mFeatureFlags).getKeyguardInteractor(),
                 mFeatureFlags,
                 mPrimaryBouncerInteractor
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/TestScopeProvider.kt b/packages/SystemUI/tests/src/com/android/keyguard/TestScopeProvider.kt
index 073c7fe..6c35734 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/TestScopeProvider.kt
+++ b/packages/SystemUI/tests/src/com/android/keyguard/TestScopeProvider.kt
@@ -13,11 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License
  */
-
 package com.android.keyguard
-
 import kotlinx.coroutines.test.TestScope
-
 class TestScopeProvider {
     companion object {
         @JvmStatic fun getTestScope() = TestScope()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityLoggerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityLoggerTest.kt
new file mode 100644
index 0000000..deacac3
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityLoggerTest.kt
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.accessibility
+
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.internal.logging.UiEventLogger
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.accessibility.AccessibilityLogger.MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_PANEL_CLOSED
+import com.android.systemui.accessibility.AccessibilityLogger.MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_PANEL_OPENED
+import com.android.systemui.util.time.FakeSystemClock
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.eq
+import org.mockito.Mock
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+import org.mockito.junit.MockitoJUnit
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class AccessibilityLoggerTest : SysuiTestCase() {
+    @JvmField @Rule val mockito = MockitoJUnit.rule()
+
+    private val fakeClock = FakeSystemClock()
+    @Mock private lateinit var fakeLogger: UiEventLogger
+
+    private lateinit var a11yLogger: AccessibilityLogger
+
+    @Before
+    fun setup() {
+        a11yLogger = AccessibilityLogger(fakeLogger, fakeClock)
+    }
+
+    @Test
+    fun logThrottled_onceWithinWindow() {
+        a11yLogger.logThrottled(MAGNIFICATION_SETTINGS_PANEL_OPENED, 1000)
+        a11yLogger.logThrottled(MAGNIFICATION_SETTINGS_PANEL_OPENED, 1000)
+        a11yLogger.logThrottled(MAGNIFICATION_SETTINGS_PANEL_OPENED, 1000)
+        fakeClock.advanceTime(100L)
+        a11yLogger.logThrottled(MAGNIFICATION_SETTINGS_PANEL_OPENED, 1000)
+        fakeClock.advanceTime(900L)
+        a11yLogger.logThrottled(MAGNIFICATION_SETTINGS_PANEL_OPENED, 1000)
+        fakeClock.advanceTime(1100L)
+        a11yLogger.logThrottled(MAGNIFICATION_SETTINGS_PANEL_OPENED, 1000)
+
+        verify(fakeLogger, times(2)).log(eq(MAGNIFICATION_SETTINGS_PANEL_OPENED))
+    }
+
+    @Test
+    fun logThrottled_interlacedLogsAllWithinWindow() {
+        a11yLogger.logThrottled(MAGNIFICATION_SETTINGS_PANEL_OPENED, 1000)
+        a11yLogger.logThrottled(MAGNIFICATION_SETTINGS_PANEL_CLOSED, 1000)
+        fakeClock.advanceTime(100L)
+        a11yLogger.logThrottled(MAGNIFICATION_SETTINGS_PANEL_CLOSED, 1000)
+        fakeClock.advanceTime(200L)
+        a11yLogger.logThrottled(MAGNIFICATION_SETTINGS_PANEL_OPENED, 1000)
+        fakeClock.advanceTime(1100L)
+        a11yLogger.logThrottled(MAGNIFICATION_SETTINGS_PANEL_OPENED, 1000)
+
+        verify(fakeLogger, times(3)).log(eq(MAGNIFICATION_SETTINGS_PANEL_OPENED))
+        verify(fakeLogger).log(eq(MAGNIFICATION_SETTINGS_PANEL_CLOSED))
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/TEST_MAPPING b/packages/SystemUI/tests/src/com/android/systemui/accessibility/TEST_MAPPING
new file mode 100644
index 0000000..d3ab4ad
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+  "imports": [
+    {
+      "path": "packages/SystemUI/src/com/android/systemui/accessibility/TEST_MAPPING"
+    }
+  ]
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java
index 1ea4460..09d0eeb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationAnimationControllerTest.java
@@ -72,7 +72,7 @@
     private static final float DEFAULT_SCALE = 4.0f;
     private static final float DEFAULT_CENTER_X = 400.0f;
     private static final float DEFAULT_CENTER_Y = 500.0f;
-    // The duration and period can't be too short, otherwise the ValueAnimator and
+    // The duration and period couldn't too short, otherwise the ValueAnimator and
     //    Instrumentation.runOnMainSync won't work in expectation. (b/288926821)
     private static final long ANIMATION_DURATION_MS = 600;
     private static final long WAIT_FULL_ANIMATION_PERIOD = 1000;
@@ -512,10 +512,11 @@
         assertNotNull(mirrorView);
         mirrorView.getBoundsOnScreen(mirrorViewBound);
 
-        assertEquals(mirrorViewBound.exactCenterX() - windowBounds.exactCenterX(),
-                Math.round(offsetRatio * mirrorViewBound.width() / 2), 0.1f);
-        assertEquals(mirrorViewBound.exactCenterY() - windowBounds.exactCenterY(),
-                Math.round(offsetRatio * mirrorViewBound.height() / 2), 0.1f);
+        assertEquals((int) (offsetRatio * mirrorViewBound.width() / 2),
+                (int) (mirrorViewBound.exactCenterX() - windowBounds.exactCenterX()));
+        assertEquals((int) (offsetRatio * mirrorViewBound.height() / 2),
+                (int) (mirrorViewBound.exactCenterY() - windowBounds.exactCenterY()));
+
     }
 
     @Test
@@ -749,7 +750,7 @@
     }
 
     @Test
-    public void moveWindowMagnifier_enabled_vertical_only_expectedValue() {
+    public void moveWindowMagnifierWithYXRatioLargerThanBase_enabled_movedOnlyVertically() {
         enableWindowMagnificationWithoutAnimation();
 
         // should move vertically since offsetY/offsetX > HORIZONTAL_LOCK_BASE
@@ -765,7 +766,7 @@
     }
 
     @Test
-    public void moveWindowMagnifier_enabled_horinzontal_only_expectedValue() {
+    public void moveWindowMagnifierWithYXRatioLessThanBase_enabled_movedOnlyHorizontally() {
         enableWindowMagnificationWithoutAnimation();
 
         // should move vertically since offsetY/offsetX <= HORIZONTAL_LOCK_BASE
@@ -781,7 +782,7 @@
     }
 
     @Test
-    public void moveWindowMagnifier_enabled_setDiagonalEnabled_expectedValues() {
+    public void moveWindowMagnifier_magnifierEnabledAndDiagonalEnabled_movedDiagonally() {
         enableWindowMagnificationWithoutAnimation();
 
         final float offsetX = 50.0f;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
index 56f8160..a48fa5d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java
@@ -66,10 +66,12 @@
 import android.os.Handler;
 import android.os.RemoteException;
 import android.os.SystemClock;
+import android.provider.Settings;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 import android.testing.TestableResources;
 import android.text.TextUtils;
+import android.util.Size;
 import android.view.Display;
 import android.view.IWindowSession;
 import android.view.MotionEvent;
@@ -99,6 +101,7 @@
 import org.junit.After;
 import org.junit.Assume;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
@@ -224,6 +227,14 @@
     }
 
     @Test
+    public void initWindowMagnificationController_checkAllowDiagonalScrollingWithSecureSettings() {
+        verify(mSecureSettings).getIntForUser(
+                eq(Settings.Secure.ACCESSIBILITY_ALLOW_DIAGONAL_SCROLLING),
+                /* def */ eq(1), /* userHandle= */ anyInt());
+        assertTrue(mWindowMagnificationController.isDiagonalScrollingEnabled());
+    }
+
+    @Test
     public void enableWindowMagnification_showControlAndNotifyBoundsChanged() {
         mInstrumentation.runOnMainSync(() -> {
             mWindowMagnificationController.enableWindowMagnificationInternal(Float.NaN, Float.NaN,
@@ -304,10 +315,10 @@
         assertFalse(rects.isEmpty());
     }
 
+    @Ignore("The default window size should be constrained after fixing b/288056772")
     @Test
     public void enableWindowMagnification_LargeScreen_windowSizeIsConstrained() {
-        final int screenSize = mContext.getResources().getDimensionPixelSize(
-                R.dimen.magnification_max_frame_size) * 10;
+        final int screenSize = mWindowManager.getCurrentWindowMetrics().getBounds().width() * 10;
         mWindowManager.setWindowBounds(new Rect(0, 0, screenSize, screenSize));
 
         mInstrumentation.runOnMainSync(() -> {
@@ -534,17 +545,22 @@
     }
 
     @Test
-    public void onScreenSizeChanged_enabledAtTheCenterOfScreen_keepSameWindowSizeRatio() {
+    public void onScreenSizeAndDensityChanged_enabledAtTheCenterOfScreen_keepSameWindowSizeRatio() {
         // The default position is at the center of the screen.
         final float expectedRatio = 0.5f;
-        final Rect testWindowBounds = new Rect(
-                mWindowManager.getCurrentWindowMetrics().getBounds());
-        testWindowBounds.set(testWindowBounds.left, testWindowBounds.top,
-                testWindowBounds.right + 100, testWindowBounds.bottom + 100);
+
         mInstrumentation.runOnMainSync(() -> {
             mWindowMagnificationController.enableWindowMagnificationInternal(Float.NaN, Float.NaN,
                     Float.NaN);
         });
+
+        // Screen size and density change
+        mContext.getResources().getConfiguration().smallestScreenWidthDp =
+                mContext.getResources().getConfiguration().smallestScreenWidthDp * 2;
+        final Rect testWindowBounds = new Rect(
+                mWindowManager.getCurrentWindowMetrics().getBounds());
+        testWindowBounds.set(testWindowBounds.left, testWindowBounds.top,
+                testWindowBounds.right + 100, testWindowBounds.bottom + 100);
         mWindowManager.setWindowBounds(testWindowBounds);
 
         mInstrumentation.runOnMainSync(() -> {
@@ -559,26 +575,49 @@
                 mWindowMagnificationController.getCenterY() / testWindowBounds.height(),
                 0);
     }
+
     @Test
-    public void screenSizeIsChangedToLarge_enabled_windowSizeIsConstrained() {
+    public void onScreenChangedToSavedDensity_enabled_restoreSavedMagnifierWindow() {
+        mContext.getResources().getConfiguration().smallestScreenWidthDp =
+                mContext.getResources().getConfiguration().smallestScreenWidthDp * 2;
+        int windowFrameSize = mResources.getDimensionPixelSize(
+                com.android.internal.R.dimen.accessibility_window_magnifier_min_size);
+        mWindowMagnificationController.mWindowMagnificationSizePrefs.saveSizeForCurrentDensity(
+                new Size(windowFrameSize, windowFrameSize));
+
         mInstrumentation.runOnMainSync(() -> {
             mWindowMagnificationController.enableWindowMagnificationInternal(Float.NaN, Float.NaN,
                     Float.NaN);
         });
-        final int screenSize = mContext.getResources().getDimensionPixelSize(
-                R.dimen.magnification_max_frame_size) * 10;
+
+        WindowManager.LayoutParams params = mWindowManager.getLayoutParamsFromAttachedView();
+        assertTrue(params.width == windowFrameSize);
+        assertTrue(params.height == windowFrameSize);
+    }
+
+    @Test
+    public void screenSizeIsChangedToLarge_enabled_defaultWindowSize() {
+        mInstrumentation.runOnMainSync(() -> {
+            mWindowMagnificationController.enableWindowMagnificationInternal(Float.NaN, Float.NaN,
+                    Float.NaN);
+        });
+        final int screenSize = mWindowManager.getCurrentWindowMetrics().getBounds().width() * 10;
+        // Screen size and density change
+        mContext.getResources().getConfiguration().smallestScreenWidthDp =
+                mContext.getResources().getConfiguration().smallestScreenWidthDp * 2;
         mWindowManager.setWindowBounds(new Rect(0, 0, screenSize, screenSize));
 
         mInstrumentation.runOnMainSync(() -> {
             mWindowMagnificationController.onConfigurationChanged(ActivityInfo.CONFIG_SCREEN_SIZE);
         });
 
-        final int halfScreenSize = screenSize / 2;
+        final int defaultWindowSize =
+                mWindowMagnificationController.getMagnificationWindowSizeFromIndex(
+                        WindowMagnificationSettings.MagnificationSize.MEDIUM);
         WindowManager.LayoutParams params = mWindowManager.getLayoutParamsFromAttachedView();
-        // The frame size should be the half of smaller value of window height/width unless it
-        //exceed the max frame size.
-        assertTrue(params.width < halfScreenSize);
-        assertTrue(params.height < halfScreenSize);
+
+        assertTrue(params.width == defaultWindowSize);
+        assertTrue(params.height == defaultWindowSize);
     }
 
     @Test
@@ -766,7 +805,7 @@
 
         final View mirrorView = mWindowManager.getAttachedView();
 
-        final long timeout = SystemClock.uptimeMillis() + 1000;
+        final long timeout = SystemClock.uptimeMillis() + 5000;
         final AtomicDouble maxScaleX = new AtomicDouble();
         final Runnable onAnimationFrame = new Runnable() {
             @Override
@@ -1127,6 +1166,11 @@
         mWindowManager.setWindowInsets(testInsets);
     }
 
+    private int updateMirrorSurfaceMarginDimension() {
+        return mContext.getResources().getDimensionPixelSize(
+                R.dimen.magnification_mirror_surface_margin);
+    }
+
     @Surface.Rotation
     private int simulateRotateTheDevice() {
         final Display display = Mockito.spy(mContext.getDisplay());
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java
index eddb8d1..91c4748 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSettingsTest.java
@@ -26,10 +26,12 @@
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertNotNull;
 
+import static org.mockito.AdditionalAnswers.returnsSecondArg;
 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.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
@@ -109,6 +111,11 @@
         mContext.addMockSystemService(Context.WINDOW_SERVICE, mWindowManager);
         mContext.addMockSystemService(Context.ACCESSIBILITY_SERVICE, mAccessibilityManager);
 
+        when(mSecureSettings.getIntForUser(anyString(), anyInt(), anyInt())).then(
+                returnsSecondArg());
+        when(mSecureSettings.getFloatForUser(anyString(), anyFloat(), anyInt())).then(
+                returnsSecondArg());
+
         mWindowMagnificationSettings = new WindowMagnificationSettings(mContext,
                 mWindowMagnificationSettingsCallback, mSfVsyncFrameProvider,
                 mSecureSettings);
@@ -128,6 +135,14 @@
     }
 
     @Test
+    public void initSettingPanel_checkAllowDiagonalScrollingWithSecureSettings() {
+        verify(mSecureSettings).getIntForUser(
+                eq(Settings.Secure.ACCESSIBILITY_ALLOW_DIAGONAL_SCROLLING),
+                /* def */ eq(1), /* userHandle= */ anyInt());
+        assertThat(mWindowMagnificationSettings.isDiagonalScrollingEnabled()).isTrue();
+    }
+
+    @Test
     public void showSettingPanel_hasAccessibilityWindowTitle() {
         setupMagnificationCapabilityAndMode(
                 /* capability= */ ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW,
@@ -273,7 +288,12 @@
         // Perform click
         diagonalScrollingSwitch.performClick();
 
-        verify(mWindowMagnificationSettingsCallback).onSetDiagonalScrolling(!currentCheckedState);
+        final boolean isAllowed = !currentCheckedState;
+        verify(mSecureSettings).putIntForUser(
+                eq(Settings.Secure.ACCESSIBILITY_ALLOW_DIAGONAL_SCROLLING),
+                /* value= */ eq(isAllowed ? 1 : 0),
+                /* userHandle= */ anyInt());
+        verify(mWindowMagnificationSettingsCallback).onSetDiagonalScrolling(isAllowed);
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSizePrefsTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSizePrefsTest.java
new file mode 100644
index 0000000..04b0d70
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationSizePrefsTest.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.test.suitebuilder.annotation.SmallTest;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.util.Size;
+
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper
+public class WindowMagnificationSizePrefsTest extends SysuiTestCase {
+
+    WindowMagnificationSizePrefs mWindowMagnificationSizePrefs =
+            new WindowMagnificationSizePrefs(mContext);
+
+    @Test
+    public void saveSizeForCurrentDensity_getExpectedSize() {
+        Size testSize = new Size(500, 500);
+        mWindowMagnificationSizePrefs.saveSizeForCurrentDensity(testSize);
+
+        assertThat(mWindowMagnificationSizePrefs.getSizeForCurrentDensity())
+                .isEqualTo(testSize);
+    }
+
+    @Test
+    public void saveSizeForCurrentDensity_containsPreferenceForCurrentDensity() {
+        Size testSize = new Size(500, 500);
+        mWindowMagnificationSizePrefs.saveSizeForCurrentDensity(testSize);
+
+        assertThat(mWindowMagnificationSizePrefs.isPreferenceSavedForCurrentDensity())
+                .isTrue();
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java
index d75781a..d7b6602 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationTest.java
@@ -117,6 +117,8 @@
             return null;
         }).when(mMagnificationSettingsController).closeMagnificationSettings();
 
+        when(mWindowMagnificationController.isActivated()).thenReturn(true);
+
         mCommandQueue = new CommandQueue(getContext(), mDisplayTracker);
         mWindowMagnification = new WindowMagnification(getContext(),
                 getContext().getMainThreadHandler(), mCommandQueue, mModeSwitchesController,
@@ -201,8 +203,10 @@
         waitForIdleSync();
 
         verify(mMagnificationSettingsController).toggleSettingsPanelVisibility();
-        verify(mA11yLogger).log(
-                eq(MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_PANEL_OPENED));
+        verify(mA11yLogger).logWithPosition(
+                eq(MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_PANEL_OPENED),
+                eq(ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW)
+        );
     }
 
     @Test
@@ -213,8 +217,10 @@
         waitForIdleSync();
 
         verify(mWindowMagnificationController).changeMagnificationSize(eq(index));
-        verify(mA11yLogger).log(
-                eq(MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_WINDOW_SIZE_SELECTED));
+        verify(mA11yLogger).logWithPosition(
+                eq(MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_WINDOW_SIZE_SELECTED),
+                eq(index)
+        );
     }
 
     @Test
@@ -257,6 +263,8 @@
 
         verify(mConnectionCallback).onPerformScaleAction(
                 eq(TEST_DISPLAY), eq(scale), eq(updatePersistence));
+        verify(mA11yLogger).logThrottled(
+                eq(MagnificationSettingsEvent.MAGNIFICATION_SETTINGS_ZOOM_SLIDER_CHANGED));
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricNotificationServiceTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricNotificationServiceTest.java
index 60c6e1e..b0d0063 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricNotificationServiceTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/BiometricNotificationServiceTest.java
@@ -30,12 +30,9 @@
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.hardware.biometrics.BiometricFaceConstants;
+import android.hardware.biometrics.BiometricFingerprintConstants;
 import android.hardware.biometrics.BiometricSourceType;
-import android.hardware.biometrics.BiometricStateListener;
-import android.hardware.face.FaceManager;
-import android.hardware.fingerprint.FingerprintManager;
 import android.os.Handler;
-import android.os.UserHandle;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 
@@ -55,8 +52,6 @@
 import org.mockito.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
 
-import java.util.Optional;
-
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper(setAsMainLooper = true)
@@ -70,82 +65,51 @@
     KeyguardStateController mKeyguardStateController;
     @Mock
     NotificationManager mNotificationManager;
-    @Mock
-    Optional<FingerprintReEnrollNotification> mFingerprintReEnrollNotificationOptional;
-    @Mock
-    FingerprintReEnrollNotification mFingerprintReEnrollNotification;
-    @Mock
-    FingerprintManager mFingerprintManager;
-    @Mock
-    FaceManager mFaceManager;
 
     private static final String TAG = "BiometricNotificationService";
     private static final int FACE_NOTIFICATION_ID = 1;
     private static final int FINGERPRINT_NOTIFICATION_ID = 2;
     private static final long SHOW_NOTIFICATION_DELAY_MS = 5_000L; // 5 seconds
-    private static final int FINGERPRINT_ACQUIRED_RE_ENROLL = 0;
 
     private final ArgumentCaptor<Notification> mNotificationArgumentCaptor =
             ArgumentCaptor.forClass(Notification.class);
-    private BiometricNotificationService mBiometricNotificationService;
     private TestableLooper mLooper;
     private KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback;
     private KeyguardStateController.Callback mKeyguardStateControllerCallback;
-    private BiometricStateListener mFaceStateListener;
-    private BiometricStateListener mFingerprintStateListener;
+    private BiometricNotificationService mBiometricNotificationService;
 
     @Before
     public void setUp() {
-        when(mFingerprintReEnrollNotificationOptional.orElse(any()))
-                .thenReturn(mFingerprintReEnrollNotification);
-        when(mFingerprintReEnrollNotification.isFingerprintReEnrollRequired(
-                FINGERPRINT_ACQUIRED_RE_ENROLL)).thenReturn(true);
-
         mLooper = TestableLooper.get(this);
         Handler handler = new Handler(mLooper.getLooper());
         BiometricNotificationDialogFactory dialogFactory = new BiometricNotificationDialogFactory();
         BiometricNotificationBroadcastReceiver broadcastReceiver =
                 new BiometricNotificationBroadcastReceiver(mContext, dialogFactory);
-        mBiometricNotificationService =
-                new BiometricNotificationService(mContext,
-                        mKeyguardUpdateMonitor, mKeyguardStateController, handler,
-                        mNotificationManager,
-                        broadcastReceiver,
-                        mFingerprintReEnrollNotificationOptional,
-                        mFingerprintManager,
-                        mFaceManager);
+        mBiometricNotificationService = new BiometricNotificationService(mContext,
+                mKeyguardUpdateMonitor, mKeyguardStateController, handler,
+                mNotificationManager, broadcastReceiver);
         mBiometricNotificationService.start();
 
         ArgumentCaptor<KeyguardUpdateMonitorCallback> updateMonitorCallbackArgumentCaptor =
                 ArgumentCaptor.forClass(KeyguardUpdateMonitorCallback.class);
         ArgumentCaptor<KeyguardStateController.Callback> stateControllerCallbackArgumentCaptor =
                 ArgumentCaptor.forClass(KeyguardStateController.Callback.class);
-        ArgumentCaptor<BiometricStateListener> faceStateListenerArgumentCaptor =
-                ArgumentCaptor.forClass(BiometricStateListener.class);
-        ArgumentCaptor<BiometricStateListener> fingerprintStateListenerArgumentCaptor =
-                ArgumentCaptor.forClass(BiometricStateListener.class);
 
         verify(mKeyguardUpdateMonitor).registerCallback(
                 updateMonitorCallbackArgumentCaptor.capture());
         verify(mKeyguardStateController).addCallback(
                 stateControllerCallbackArgumentCaptor.capture());
-        verify(mFaceManager).registerBiometricStateListener(
-                faceStateListenerArgumentCaptor.capture());
-        verify(mFingerprintManager).registerBiometricStateListener(
-                fingerprintStateListenerArgumentCaptor.capture());
 
-        mFaceStateListener = faceStateListenerArgumentCaptor.getValue();
-        mFingerprintStateListener = fingerprintStateListenerArgumentCaptor.getValue();
         mKeyguardUpdateMonitorCallback = updateMonitorCallbackArgumentCaptor.getValue();
         mKeyguardStateControllerCallback = stateControllerCallbackArgumentCaptor.getValue();
     }
 
     @Test
-    public void testShowFingerprintReEnrollNotification_onAcquiredReEnroll() {
+    public void testShowFingerprintReEnrollNotification() {
         when(mKeyguardStateController.isShowing()).thenReturn(false);
 
-        mKeyguardUpdateMonitorCallback.onBiometricHelp(
-                FINGERPRINT_ACQUIRED_RE_ENROLL,
+        mKeyguardUpdateMonitorCallback.onBiometricError(
+                BiometricFingerprintConstants.BIOMETRIC_ERROR_RE_ENROLL,
                 "Testing Fingerprint Re-enrollment" /* errString */,
                 BiometricSourceType.FINGERPRINT
         );
@@ -163,7 +127,7 @@
                 .isEqualTo(ACTION_SHOW_FINGERPRINT_REENROLL_DIALOG);
     }
     @Test
-    public void testShowFaceReEnrollNotification_onErrorReEnroll() {
+    public void testShowFaceReEnrollNotification() {
         when(mKeyguardStateController.isShowing()).thenReturn(false);
 
         mKeyguardUpdateMonitorCallback.onBiometricError(
@@ -186,54 +150,6 @@
     }
 
     @Test
-    public void testCancelReEnrollmentNotification_onFaceEnrollmentStateChange() {
-        when(mKeyguardStateController.isShowing()).thenReturn(false);
-
-        mKeyguardUpdateMonitorCallback.onBiometricError(
-                BiometricFaceConstants.BIOMETRIC_ERROR_RE_ENROLL,
-                "Testing Face Re-enrollment" /* errString */,
-                BiometricSourceType.FACE
-        );
-        mKeyguardStateControllerCallback.onKeyguardShowingChanged();
-
-        mLooper.moveTimeForward(SHOW_NOTIFICATION_DELAY_MS);
-        mLooper.processAllMessages();
-
-        verify(mNotificationManager).notifyAsUser(eq(TAG), eq(FACE_NOTIFICATION_ID),
-                mNotificationArgumentCaptor.capture(), any());
-
-        mFaceStateListener.onEnrollmentsChanged(0 /* userId */, 0 /* sensorId */,
-                false /* hasEnrollments */);
-
-        verify(mNotificationManager).cancelAsUser(eq(TAG), eq(FACE_NOTIFICATION_ID),
-                eq(UserHandle.CURRENT));
-    }
-
-    @Test
-    public void testCancelReEnrollmentNotification_onFingerprintEnrollmentStateChange() {
-        when(mKeyguardStateController.isShowing()).thenReturn(false);
-
-        mKeyguardUpdateMonitorCallback.onBiometricHelp(
-                FINGERPRINT_ACQUIRED_RE_ENROLL,
-                "Testing Fingerprint Re-enrollment" /* errString */,
-                BiometricSourceType.FINGERPRINT
-        );
-        mKeyguardStateControllerCallback.onKeyguardShowingChanged();
-
-        mLooper.moveTimeForward(SHOW_NOTIFICATION_DELAY_MS);
-        mLooper.processAllMessages();
-
-        verify(mNotificationManager).notifyAsUser(eq(TAG), eq(FINGERPRINT_NOTIFICATION_ID),
-                mNotificationArgumentCaptor.capture(), any());
-
-        mFingerprintStateListener.onEnrollmentsChanged(0 /* userId */, 0 /* sensorId */,
-                false /* hasEnrollments */);
-
-        verify(mNotificationManager).cancelAsUser(eq(TAG), eq(FINGERPRINT_NOTIFICATION_ID),
-                eq(UserHandle.CURRENT));
-    }
-
-    @Test
     public void testResetFaceUnlockReEnroll_onStart() {
         when(mKeyguardStateController.isShowing()).thenReturn(false);
 
@@ -252,5 +168,4 @@
         verify(mNotificationManager, never()).notifyAsUser(eq(TAG), eq(FACE_NOTIFICATION_ID),
                 mNotificationArgumentCaptor.capture(), any());
     }
-
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/AuthBiometricFingerprintViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/AuthBiometricFingerprintViewModelTest.kt
index 0c210e5..785f1be 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/AuthBiometricFingerprintViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/AuthBiometricFingerprintViewModelTest.kt
@@ -48,6 +48,7 @@
     fun iconUpdates_onConfigurationChanged() {
         testScope.runTest {
             runCurrent()
+
             val testConfig = Configuration()
             val folded = INNER_SCREEN_SMALLEST_SCREEN_WIDTH_THRESHOLD_DP - 1
             val unfolded = INNER_SCREEN_SMALLEST_SCREEN_WIDTH_THRESHOLD_DP + 1
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/PackageUpdateMonitorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/PackageUpdateMonitorTest.kt
index 6954710..9260f63 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/PackageUpdateMonitorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/PackageUpdateMonitorTest.kt
@@ -17,6 +17,7 @@
 package com.android.systemui.controls.controller
 
 import android.content.Context
+import android.content.pm.PackageManager
 import android.os.Handler
 import android.os.UserHandle
 import android.testing.AndroidTestingRunner
@@ -34,6 +35,7 @@
 import org.mockito.Mockito.times
 import org.mockito.Mockito.verify
 import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.`when` as whenever
 import org.mockito.MockitoAnnotations
 
 @SmallTest
@@ -42,12 +44,14 @@
 
     @Mock private lateinit var context: Context
     @Mock private lateinit var bgHandler: Handler
+    @Mock private lateinit var packageManager: PackageManager
 
     private lateinit var underTest: PackageUpdateMonitor
 
     @Before
     fun setup() {
         MockitoAnnotations.initMocks(this)
+        whenever(context.packageManager).thenReturn(packageManager)
     }
 
     @Test
@@ -58,9 +62,16 @@
         // There are two receivers registered
         verify(context, times(2))
             .registerReceiverAsUser(any(), eq(USER), any(), eq(null), eq(bgHandler))
+        verify(packageManager).registerPackageMonitorCallback(any(), eq(USER.getIdentifier()))
+        // context will be used to get PackageManager, the test should clear invocations
+        // for next startMonitoring() assertion
+        clearInvocations(context)
 
         underTest.startMonitoring()
+        // No more interactions for registerReceiverAsUser
         verifyNoMoreInteractions(context)
+        // No more interactions for registerPackageMonitorCallback
+        verifyNoMoreInteractions(packageManager)
     }
 
     @Test
@@ -69,12 +80,20 @@
 
         underTest.startMonitoring()
         clearInvocations(context)
+        clearInvocations(packageManager)
 
         underTest.stopMonitoring()
         verify(context).unregisterReceiver(any())
+        verify(packageManager).unregisterPackageMonitorCallback(any())
+        // context will be used to get PackageManager, the test should clear invocations
+        // for next stopMonitoring() assertion
+        clearInvocations(context)
 
         underTest.stopMonitoring()
+        // No more interactions for unregisterReceiver
         verifyNoMoreInteractions(context)
+        // No more interactions for unregisterPackageMonitorCallback
+        verifyNoMoreInteractions(packageManager)
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/hdmi/HdmiCecSetMenuLanguageHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/hdmi/HdmiCecSetMenuLanguageHelperTest.java
deleted file mode 100644
index eb998cc..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/hdmi/HdmiCecSetMenuLanguageHelperTest.java
+++ /dev/null
@@ -1,109 +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.hdmi;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.os.UserHandle;
-import android.provider.Settings;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.testing.AndroidTestingRunner;
-
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.util.settings.SecureSettings;
-
-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;
-import java.util.concurrent.Executor;
-
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-public class HdmiCecSetMenuLanguageHelperTest extends SysuiTestCase {
-
-    private HdmiCecSetMenuLanguageHelper mHdmiCecSetMenuLanguageHelper;
-
-    @Mock
-    private Executor mExecutor;
-
-    @Mock
-    private SecureSettings mSecureSettings;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        when(mSecureSettings.getStringForUser(
-                Settings.Secure.HDMI_CEC_SET_MENU_LANGUAGE_DENYLIST,
-                UserHandle.USER_CURRENT)).thenReturn(null);
-        mHdmiCecSetMenuLanguageHelper =
-                new HdmiCecSetMenuLanguageHelper(mExecutor, mSecureSettings);
-    }
-
-    @Test
-    public void testSetGetLocale() {
-        mHdmiCecSetMenuLanguageHelper.setLocale("en");
-        assertThat(mHdmiCecSetMenuLanguageHelper.getLocale()).isEqualTo(Locale.ENGLISH);
-    }
-
-    @Test
-    public void testIsLocaleDenylisted_EmptyByDefault() {
-        mHdmiCecSetMenuLanguageHelper.setLocale("en");
-        assertThat(mHdmiCecSetMenuLanguageHelper.isLocaleDenylisted()).isEqualTo(false);
-    }
-
-    @Test
-    public void testIsLocaleDenylisted_AcceptLanguage() {
-        mHdmiCecSetMenuLanguageHelper.setLocale("de");
-        mHdmiCecSetMenuLanguageHelper.acceptLocale();
-        assertThat(mHdmiCecSetMenuLanguageHelper.isLocaleDenylisted()).isEqualTo(false);
-        verify(mExecutor).execute(any());
-    }
-
-    @Test
-    public void testIsLocaleDenylisted_DeclineLanguage() {
-        mHdmiCecSetMenuLanguageHelper.setLocale("de");
-        mHdmiCecSetMenuLanguageHelper.declineLocale();
-        assertThat(mHdmiCecSetMenuLanguageHelper.isLocaleDenylisted()).isEqualTo(true);
-        verify(mSecureSettings).putStringForUser(
-                Settings.Secure.HDMI_CEC_SET_MENU_LANGUAGE_DENYLIST, "de",
-                UserHandle.USER_CURRENT);
-    }
-
-    @Test
-    public void testIsLocaleDenylisted_DeclineTwoLanguages() {
-        mHdmiCecSetMenuLanguageHelper.setLocale("de");
-        mHdmiCecSetMenuLanguageHelper.declineLocale();
-        assertThat(mHdmiCecSetMenuLanguageHelper.isLocaleDenylisted()).isEqualTo(true);
-        verify(mSecureSettings).putStringForUser(
-                Settings.Secure.HDMI_CEC_SET_MENU_LANGUAGE_DENYLIST, "de",
-                UserHandle.USER_CURRENT);
-        mHdmiCecSetMenuLanguageHelper.setLocale("pl");
-        mHdmiCecSetMenuLanguageHelper.declineLocale();
-        assertThat(mHdmiCecSetMenuLanguageHelper.isLocaleDenylisted()).isEqualTo(true);
-        verify(mSecureSettings).putStringForUser(
-                Settings.Secure.HDMI_CEC_SET_MENU_LANGUAGE_DENYLIST, "de,pl",
-                UserHandle.USER_CURRENT);
-    }
-}
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 8ae9989..4a79a21 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
@@ -33,27 +33,34 @@
 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.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.inOrder;
 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.when;
 
 import android.app.AlarmManager;
 import android.app.IActivityManager;
+import android.app.IActivityTaskManager;
 import android.app.PendingIntent;
 import android.app.admin.DevicePolicyManager;
 import android.app.trust.TrustManager;
 import android.content.Context;
 import android.os.PowerManager;
 import android.os.PowerManager.WakeLock;
+import android.os.RemoteException;
 import android.telephony.TelephonyManager;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
@@ -124,6 +131,7 @@
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
+import org.mockito.InOrder;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
@@ -171,6 +179,7 @@
     private @Mock DreamOverlayStateController mDreamOverlayStateController;
     private @Mock ActivityLaunchAnimator mActivityLaunchAnimator;
     private @Mock ScrimController mScrimController;
+    private @Mock IActivityTaskManager mActivityTaskManagerService;
     private @Mock SysuiColorExtractor mColorExtractor;
     private @Mock AuthController mAuthController;
     private @Mock ShadeExpansionStateManager mShadeExpansionStateManager;
@@ -193,6 +202,9 @@
     private FakeSystemClock mSystemClock;
     private final FakeWallpaperRepository mWallpaperRepository = new FakeWallpaperRepository();
 
+    /** Most recent value passed to {@link KeyguardStateController#notifyKeyguardGoingAway}. */
+    private boolean mKeyguardGoingAway = false;
+
     private @Mock CoroutineDispatcher mDispatcher;
     private @Mock DreamingToLockscreenTransitionViewModel mDreamingToLockscreenTransitionViewModel;
     private @Mock SystemPropertiesHelper mSystemPropertiesHelper;
@@ -224,10 +236,18 @@
                 mScreenOffAnimationController, mAuthController, mShadeExpansionStateManager,
                 mShadeWindowLogger);
         mFeatureFlags = new FakeFeatureFlags();
-
+        mFeatureFlags.set(Flags.KEYGUARD_WM_STATE_REFACTOR, false);
 
         DejankUtils.setImmediate(true);
 
+        // Keep track of what we told KeyguardStateController about whether we're going away or
+        // not.
+        mKeyguardGoingAway = false;
+        doAnswer(invocation -> {
+            mKeyguardGoingAway = invocation.getArgument(0);
+            return null;
+        }).when(mKeyguardStateController).notifyKeyguardGoingAway(anyBoolean());
+
         createAndStartViewMediator();
         mInitialUserId = KeyguardUpdateMonitor.getCurrentUser();
     }
@@ -237,6 +257,27 @@
         KeyguardUpdateMonitor.setCurrentUser(mInitialUserId);
     }
 
+    /**
+     * After each test, verify that System UI's going away/showing state matches the most recent
+     * calls we made to ATMS.
+     *
+     * This will help us catch showing and going away state mismatch issues.
+     */
+    @After
+    public void assertATMSAndKeyguardViewMediatorStatesMatch() {
+        try {
+            if (mKeyguardGoingAway) {
+                assertATMSKeyguardGoingAway();
+            } else {
+                assertATMSLockScreenShowing(mViewMediator.isShowing());
+            }
+
+        } catch (Exception e) {
+            // Just so we don't have to add the exception signature to every test.
+            fail();
+        }
+    }
+
     @Test
     @TestableLooper.RunWithLooper(setAsMainLooper = true)
     public void onLockdown_showKeyguard_evenIfKeyguardIsNotEnabledExternally() {
@@ -304,7 +345,7 @@
 
     @Test
     public void testRegisterDumpable() {
-        verify(mDumpManager).registerDumpable(KeyguardViewMediator.class.getName(), mViewMediator);
+        verify(mDumpManager).registerDumpable(mViewMediator);
         verify(mStatusBarKeyguardViewManager, never()).setKeyguardGoingAwayState(anyBoolean());
     }
 
@@ -647,38 +688,6 @@
         verify(mKeyguardUnlockAnimationController).notifyFinishedKeyguardExitAnimation(false);
     }
 
-    /**
-     * Configures mocks appropriately, then starts the keyguard exit animation.
-     */
-    private void startMockKeyguardExitAnimation() {
-        mViewMediator.onSystemReady();
-        TestableLooper.get(this).processAllMessages();
-
-        mViewMediator.setShowingLocked(true);
-
-        RemoteAnimationTarget[] apps = new RemoteAnimationTarget[]{
-                mock(RemoteAnimationTarget.class)
-        };
-        RemoteAnimationTarget[] wallpapers = new RemoteAnimationTarget[]{
-                mock(RemoteAnimationTarget.class)
-        };
-        IRemoteAnimationFinishedCallback callback = mock(IRemoteAnimationFinishedCallback.class);
-
-        when(mKeyguardStateController.isKeyguardGoingAway()).thenReturn(true);
-        mViewMediator.startKeyguardExitAnimation(TRANSIT_OLD_KEYGUARD_GOING_AWAY, apps, wallpapers,
-                null, callback);
-        TestableLooper.get(this).processAllMessages();
-    }
-
-    /**
-     * Configures mocks appropriately, then cancels the keyguard exit animation.
-     */
-    private void cancelMockKeyguardExitAnimation() {
-        when(mKeyguardStateController.isKeyguardGoingAway()).thenReturn(false);
-        mViewMediator.cancelKeyguardExitAnimation();
-        TestableLooper.get(this).processAllMessages();
-    }
-
     @Test
     @TestableLooper.RunWithLooper(setAsMainLooper = true)
     public void testKeyguardDelayedOnGoingToSleep_ifScreenOffAnimationWillPlayButIsntPlayingYet() {
@@ -848,6 +857,107 @@
 
     @Test
     @TestableLooper.RunWithLooper(setAsMainLooper = true)
+    public void testStartKeyguardExitAnimation_thenCancelImmediately_doesNotResetAndUpdatesWM() {
+        startMockKeyguardExitAnimation();
+        cancelMockKeyguardExitAnimation();
+
+        // This will trigger doKeyguardLocked and we can verify that we ask ATMS to show the
+        // keyguard explicitly, even though we're already showing, because we cancelled immediately.
+        mViewMediator.onSystemReady();
+        reset(mActivityTaskManagerService);
+        processAllMessagesAndBgExecutorMessages();
+
+        verify(mStatusBarKeyguardViewManager, never()).reset(anyBoolean());
+        assertATMSAndKeyguardViewMediatorStatesMatch();
+    }
+
+    /**
+     * Interactions with the ActivityTaskManagerService and others are posted to an executor that
+     * doesn't use the testable looper. Use this method to ensure those are run as well.
+     */
+    private void processAllMessagesAndBgExecutorMessages() {
+        TestableLooper.get(this).processAllMessages();
+        mUiBgExecutor.runAllReady();
+    }
+
+    /**
+     * Configures mocks appropriately, then starts the keyguard exit animation.
+     */
+    private void startMockKeyguardExitAnimation() {
+        mViewMediator.onSystemReady();
+        processAllMessagesAndBgExecutorMessages();
+
+        mViewMediator.setShowingLocked(true);
+
+        RemoteAnimationTarget[] apps = new RemoteAnimationTarget[]{
+                mock(RemoteAnimationTarget.class)
+        };
+        RemoteAnimationTarget[] wallpapers = new RemoteAnimationTarget[]{
+                mock(RemoteAnimationTarget.class)
+        };
+        IRemoteAnimationFinishedCallback callback = mock(IRemoteAnimationFinishedCallback.class);
+
+        when(mKeyguardStateController.isKeyguardGoingAway()).thenReturn(true);
+        mViewMediator.startKeyguardExitAnimation(TRANSIT_OLD_KEYGUARD_GOING_AWAY, apps, wallpapers,
+                null, callback);
+        processAllMessagesAndBgExecutorMessages();
+    }
+
+    /**
+     * Configures mocks appropriately, then cancels the keyguard exit animation.
+     */
+    private void cancelMockKeyguardExitAnimation() {
+        when(mKeyguardStateController.isKeyguardGoingAway()).thenReturn(false);
+        mViewMediator.cancelKeyguardExitAnimation();
+        processAllMessagesAndBgExecutorMessages();
+    }
+    /**
+     * Asserts the last value passed to ATMS#setLockScreenShown. This should be confirmed alongside
+     * {@link KeyguardViewMediator#isShowingAndNotOccluded()} to verify that state is not mismatched
+     * between SysUI and WM.
+     */
+    private void assertATMSLockScreenShowing(boolean showing)
+            throws RemoteException {
+        // ATMS is called via bgExecutor, so make sure to run all of those calls first.
+        processAllMessagesAndBgExecutorMessages();
+
+        final InOrder orderedSetLockScreenShownCalls = inOrder(mActivityTaskManagerService);
+        final ArgumentCaptor<Boolean> showingCaptor = ArgumentCaptor.forClass(Boolean.class);
+        orderedSetLockScreenShownCalls
+                .verify(mActivityTaskManagerService, atLeastOnce())
+                .setLockScreenShown(showingCaptor.capture(), anyBoolean());
+
+        // The captor will have the most recent setLockScreenShown call's value.
+        assertEquals(showing, showingCaptor.getValue());
+
+        // We're now just after the last setLockScreenShown call. If we expect the lockscreen to be
+        // showing, ensure that we didn't subsequently ask for it to go away.
+        if (showing) {
+            orderedSetLockScreenShownCalls.verify(mActivityTaskManagerService, never())
+                    .keyguardGoingAway(anyInt());
+        }
+    }
+
+    /**
+     * Asserts that we eventually called ATMS#keyguardGoingAway and did not subsequently call
+     * ATMS#setLockScreenShown(true) which would cancel the going away.
+     */
+    private void assertATMSKeyguardGoingAway() throws RemoteException {
+        // ATMS is called via bgExecutor, so make sure to run all of those calls first.
+        processAllMessagesAndBgExecutorMessages();
+
+        final InOrder orderedGoingAwayCalls = inOrder(mActivityTaskManagerService);
+        orderedGoingAwayCalls.verify(mActivityTaskManagerService, atLeastOnce())
+                .keyguardGoingAway(anyInt());
+
+        // Advance the inOrder to just past the last goingAway call. Let's make sure we didn't
+        // re-show the lockscreen, which would cancel going away.
+        orderedGoingAwayCalls.verify(mActivityTaskManagerService, never())
+                .setLockScreenShown(eq(true), anyBoolean());
+    }
+
+    @Test
+    @TestableLooper.RunWithLooper(setAsMainLooper = true)
     public void testNotStartingKeyguardWhenFlagIsDisabled() {
         mViewMediator.setShowingLocked(false);
         when(mKeyguardStateController.isShowing()).thenReturn(false);
@@ -951,13 +1061,15 @@
                 () -> mNotificationShadeWindowController,
                 () -> mActivityLaunchAnimator,
                 () -> mScrimController,
+                mActivityTaskManagerService,
                 mFeatureFlags,
                 mSecureSettings,
                 mSystemSettings,
                 mSystemClock,
                 mDispatcher,
                 () -> mDreamingToLockscreenTransitionViewModel,
-                mSystemPropertiesHelper);
+                mSystemPropertiesHelper,
+                () -> mock(WindowManagerLockscreenVisibilityManager.class));
         mViewMediator.start();
 
         mViewMediator.registerCentralSurfaces(mCentralSurfaces, null, null, null, null, null);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
index 85ee0e4..04ebbf6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
@@ -52,6 +52,7 @@
 import com.android.systemui.dump.logcatLogBuffer
 import com.android.systemui.flags.FakeFeatureFlags
 import com.android.systemui.flags.Flags.FACE_AUTH_REFACTOR
+import com.android.systemui.flags.Flags.KEYGUARD_WM_STATE_REFACTOR
 import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
 import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory
 import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractorFactory
@@ -168,7 +169,11 @@
         biometricSettingsRepository = FakeBiometricSettingsRepository()
         deviceEntryFingerprintAuthRepository = FakeDeviceEntryFingerprintAuthRepository()
         trustRepository = FakeTrustRepository()
-        featureFlags = FakeFeatureFlags().apply { set(FACE_AUTH_REFACTOR, true) }
+        featureFlags =
+            FakeFeatureFlags().apply {
+                set(FACE_AUTH_REFACTOR, true)
+                set(KEYGUARD_WM_STATE_REFACTOR, false)
+            }
         val withDeps =
             KeyguardInteractorFactory.create(
                 featureFlags = featureFlags,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt
index 5e3376a..5ead16b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt
@@ -63,6 +63,7 @@
 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.MockitoAnnotations
 
@@ -193,7 +194,7 @@
             assertThat(underTest.isKeyguardShowing()).isFalse()
 
             val captor = argumentCaptor<KeyguardStateController.Callback>()
-            verify(keyguardStateController).addCallback(captor.capture())
+            verify(keyguardStateController, atLeastOnce()).addCallback(captor.capture())
 
             whenever(keyguardStateController.isShowing).thenReturn(true)
             captor.value.onKeyguardShowingChanged()
@@ -255,7 +256,7 @@
             assertThat(latest).isFalse()
 
             val captor = argumentCaptor<KeyguardStateController.Callback>()
-            verify(keyguardStateController).addCallback(captor.capture())
+            verify(keyguardStateController, atLeastOnce()).addCallback(captor.capture())
 
             whenever(keyguardStateController.isOccluded).thenReturn(true)
             captor.value.onKeyguardShowingChanged()
@@ -280,7 +281,7 @@
             assertThat(isKeyguardUnlocked).isFalse()
 
             val captor = argumentCaptor<KeyguardStateController.Callback>()
-            verify(keyguardStateController).addCallback(captor.capture())
+            verify(keyguardStateController, atLeastOnce()).addCallback(captor.capture())
 
             whenever(keyguardStateController.isUnlocked).thenReturn(true)
             captor.value.onUnlockedChanged()
@@ -454,7 +455,7 @@
             assertThat(latest).isFalse()
 
             val captor = argumentCaptor<KeyguardStateController.Callback>()
-            verify(keyguardStateController).addCallback(captor.capture())
+            verify(keyguardStateController, atLeastOnce()).addCallback(captor.capture())
 
             whenever(keyguardStateController.isKeyguardGoingAway).thenReturn(true)
             captor.value.onKeyguardGoingAwayChanged()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardSurfaceBehindRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardSurfaceBehindRepositoryImplTest.kt
new file mode 100644
index 0000000..bed959f
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardSurfaceBehindRepositoryImplTest.kt
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.data.repository
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.coroutines.collectValues
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class KeyguardSurfaceBehindRepositoryImplTest : SysuiTestCase() {
+    private val testScope = TestScope()
+
+    private lateinit var underTest: KeyguardSurfaceBehindRepositoryImpl
+
+    @Before
+    fun setUp() {
+        underTest = KeyguardSurfaceBehindRepositoryImpl()
+    }
+
+    @Test
+    fun testSetAnimatingSurface() {
+        testScope.runTest {
+            val values by collectValues(underTest.isAnimatingSurface)
+
+            runCurrent()
+            underTest.setAnimatingSurface(true)
+            runCurrent()
+            underTest.setAnimatingSurface(false)
+            runCurrent()
+
+            // Default (first) value should be false.
+            assertThat(values).isEqualTo(listOf(false, true, false))
+        }
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractorTest.kt
new file mode 100644
index 0000000..e2bf2f8
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractorTest.kt
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.domain.interactor
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.coroutines.collectValues
+import com.android.systemui.flags.FakeFeatureFlags
+import com.android.systemui.keyguard.shared.model.KeyguardState
+import com.android.systemui.keyguard.shared.model.TransitionState
+import com.android.systemui.keyguard.shared.model.TransitionStep
+import com.android.systemui.shade.data.repository.FakeShadeRepository
+import dagger.Lazy
+import junit.framework.Assert.assertEquals
+import junit.framework.Assert.assertTrue
+import junit.framework.Assert.fail
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class FromLockscreenTransitionInteractorTest : KeyguardTransitionInteractorTestCase() {
+    private lateinit var underTest: FromLockscreenTransitionInteractor
+
+    // Override the fromLockscreenTransitionInteractor provider from the superclass so our underTest
+    // interactor is provided to any classes that need it.
+    override var fromLockscreenTransitionInteractorLazy: Lazy<FromLockscreenTransitionInteractor>? =
+        Lazy {
+            underTest
+        }
+
+    @Before
+    override fun setUp() {
+        super.setUp()
+
+        underTest =
+            FromLockscreenTransitionInteractor(
+                transitionRepository = super.transitionRepository,
+                transitionInteractor = super.transitionInteractor,
+                scope = super.testScope.backgroundScope,
+                keyguardInteractor = super.keyguardInteractor,
+                flags = FakeFeatureFlags(),
+                shadeRepository = FakeShadeRepository(),
+            )
+    }
+
+    @Test
+    fun testSurfaceBehindVisibility_nonNullOnlyForRelevantTransitions() =
+        testScope.runTest {
+            val values by collectValues(underTest.surfaceBehindVisibility)
+            runCurrent()
+
+            // Transition-specific surface visibility should be null ("don't care") initially.
+            assertEquals(
+                listOf(
+                    null,
+                ),
+                values
+            )
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.LOCKSCREEN,
+                    to = KeyguardState.AOD,
+                )
+            )
+
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    null, // LOCKSCREEN -> AOD does not have any specific surface visibility.
+                ),
+                values
+            )
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.LOCKSCREEN,
+                    to = KeyguardState.GONE,
+                )
+            )
+
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    null,
+                    true, // Surface is made visible immediately during LOCKSCREEN -> GONE
+                ),
+                values
+            )
+        }
+
+    @Test
+    fun testSurfaceBehindModel() =
+        testScope.runTest {
+            val values by collectValues(underTest.surfaceBehindModel)
+            runCurrent()
+
+            assertEquals(
+                values,
+                listOf(
+                    null, // We should start null ("don't care").
+                )
+            )
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.LOCKSCREEN,
+                    to = KeyguardState.AOD,
+                )
+            )
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    null, // LOCKSCREEN -> AOD does not have specific view params.
+                ),
+                values
+            )
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.LOCKSCREEN,
+                    to = KeyguardState.GONE,
+                )
+            )
+            runCurrent()
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.RUNNING,
+                    from = KeyguardState.LOCKSCREEN,
+                    to = KeyguardState.GONE,
+                    value = 0.01f,
+                )
+            )
+            runCurrent()
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.RUNNING,
+                    from = KeyguardState.LOCKSCREEN,
+                    to = KeyguardState.GONE,
+                    value = 0.99f,
+                )
+            )
+            runCurrent()
+
+            assertEquals(3, values.size)
+            val model1percent = values[1]
+            val model99percent = values[2]
+
+            try {
+                // We should initially have an alpha of 0f when unlocking, so the surface is not
+                // visible
+                // while lockscreen UI animates out.
+                assertEquals(0f, model1percent!!.alpha)
+
+                // By the end it should probably be visible.
+                assertTrue(model99percent!!.alpha > 0f)
+            } catch (e: NullPointerException) {
+                fail("surfaceBehindModel was unexpectedly null.")
+            }
+        }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorTest.kt
new file mode 100644
index 0000000..85bc374
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorTest.kt
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.domain.interactor
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.coroutines.collectValues
+import com.android.systemui.flags.FakeFeatureFlags
+import com.android.systemui.keyguard.shared.model.KeyguardState
+import com.android.systemui.keyguard.shared.model.TransitionState
+import com.android.systemui.keyguard.shared.model.TransitionStep
+import com.android.systemui.util.mockito.mock
+import dagger.Lazy
+import junit.framework.Assert.assertEquals
+import junit.framework.Assert.assertTrue
+import junit.framework.Assert.fail
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class FromPrimaryBouncerTransitionInteractorTest : KeyguardTransitionInteractorTestCase() {
+    private lateinit var underTest: FromPrimaryBouncerTransitionInteractor
+
+    // Override the fromPrimaryBouncerTransitionInteractor provider from the superclass so our
+    // underTest interactor is provided to any classes that need it.
+    override var fromPrimaryBouncerTransitionInteractorLazy:
+        Lazy<FromPrimaryBouncerTransitionInteractor>? =
+        Lazy {
+            underTest
+        }
+
+    @Before
+    override fun setUp() {
+        super.setUp()
+
+        underTest =
+            FromPrimaryBouncerTransitionInteractor(
+                transitionRepository = super.transitionRepository,
+                transitionInteractor = super.transitionInteractor,
+                scope = super.testScope.backgroundScope,
+                keyguardInteractor = super.keyguardInteractor,
+                flags = FakeFeatureFlags(),
+                keyguardSecurityModel = mock(),
+            )
+    }
+
+    @Test
+    fun testSurfaceBehindVisibility() =
+        testScope.runTest {
+            val values by collectValues(underTest.surfaceBehindVisibility)
+            runCurrent()
+
+            // Transition-specific surface visibility should be null ("don't care") initially.
+            assertEquals(
+                listOf(
+                    null,
+                ),
+                values
+            )
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.PRIMARY_BOUNCER,
+                    to = KeyguardState.LOCKSCREEN,
+                )
+            )
+
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    null, // PRIMARY_BOUNCER -> LOCKSCREEN does not have any specific visibility.
+                ),
+                values
+            )
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.PRIMARY_BOUNCER,
+                    to = KeyguardState.GONE,
+                )
+            )
+
+            runCurrent()
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.RUNNING,
+                    from = KeyguardState.PRIMARY_BOUNCER,
+                    to = KeyguardState.GONE,
+                    value = 0.01f,
+                )
+            )
+
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    null,
+                    false, // Surface is only made visible once the bouncer UI animates out.
+                ),
+                values
+            )
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.PRIMARY_BOUNCER,
+                    to = KeyguardState.GONE,
+                    value = 0.99f,
+                )
+            )
+
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    null,
+                    false,
+                    true, // Surface should eventually be visible.
+                ),
+                values
+            )
+        }
+
+    @Test
+    fun testSurfaceBehindModel() =
+        testScope.runTest {
+            val values by collectValues(underTest.surfaceBehindModel)
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.PRIMARY_BOUNCER,
+                    to = KeyguardState.LOCKSCREEN,
+                )
+            )
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    null, // PRIMARY_BOUNCER -> LOCKSCREEN does not have specific view params.
+                ),
+                values
+            )
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.PRIMARY_BOUNCER,
+                    to = KeyguardState.GONE,
+                )
+            )
+            runCurrent()
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.RUNNING,
+                    from = KeyguardState.PRIMARY_BOUNCER,
+                    to = KeyguardState.GONE,
+                    value = 0.01f,
+                )
+            )
+            runCurrent()
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.RUNNING,
+                    from = KeyguardState.PRIMARY_BOUNCER,
+                    to = KeyguardState.GONE,
+                    value = 0.99f,
+                )
+            )
+            runCurrent()
+
+            assertEquals(3, values.size)
+            val model1percent = values[1]
+            val model99percent = values[2]
+
+            try {
+                // We should initially have an alpha of 0f when unlocking, so the surface is not
+                // visible
+                // while lockscreen UI animates out.
+                assertEquals(0f, model1percent!!.alpha)
+
+                // By the end it should probably be visible.
+                assertTrue(model99percent!!.alpha > 0f)
+            } catch (e: NullPointerException) {
+                fail("surfaceBehindModel was unexpectedly null.")
+            }
+        }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorParameterizedTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorParameterizedTest.kt
index 3858cfd..fe474fa 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorParameterizedTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorParameterizedTest.kt
@@ -20,6 +20,7 @@
 import android.app.admin.DevicePolicyManager
 import android.content.Intent
 import android.os.UserHandle
+import androidx.test.filters.FlakyTest
 import androidx.test.filters.SmallTest
 import com.android.internal.widget.LockPatternUtils
 import com.android.systemui.SysuiTestCase
@@ -74,6 +75,10 @@
 import org.mockito.MockitoAnnotations
 
 @OptIn(ExperimentalCoroutinesApi::class)
+@FlakyTest(
+    bugId = 292574995,
+    detail = "on certain architectures all permutations with startActivity=true is causing failures"
+)
 @SmallTest
 @RunWith(Parameterized::class)
 class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractorTest.kt
new file mode 100644
index 0000000..fdcc66b
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractorTest.kt
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.domain.interactor
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.RoboPilotTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.coroutines.collectValues
+import com.android.systemui.keyguard.data.repository.FakeKeyguardSurfaceBehindRepository
+import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
+import com.android.systemui.keyguard.shared.model.KeyguardState
+import com.android.systemui.keyguard.shared.model.KeyguardSurfaceBehindModel
+import com.android.systemui.keyguard.shared.model.TransitionState
+import com.android.systemui.keyguard.shared.model.TransitionStep
+import com.android.systemui.util.mockito.whenever
+import junit.framework.Assert.assertEquals
+import junit.framework.Assert.assertTrue
+import kotlinx.coroutines.flow.flowOf
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.MockitoAnnotations.initMocks
+
+@SmallTest
+@RoboPilotTest
+@RunWith(AndroidJUnit4::class)
+@kotlinx.coroutines.ExperimentalCoroutinesApi
+class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
+
+    private lateinit var underTest: KeyguardSurfaceBehindInteractor
+    private lateinit var repository: FakeKeyguardSurfaceBehindRepository
+
+    @Mock
+    private lateinit var fromLockscreenTransitionInteractor: FromLockscreenTransitionInteractor
+    @Mock
+    private lateinit var fromPrimaryBouncerTransitionInteractor:
+        FromPrimaryBouncerTransitionInteractor
+
+    private val lockscreenSurfaceBehindModel = KeyguardSurfaceBehindModel(alpha = 0.33f)
+    private val primaryBouncerSurfaceBehindModel = KeyguardSurfaceBehindModel(alpha = 0.66f)
+
+    private val testScope = TestScope()
+
+    private lateinit var transitionRepository: FakeKeyguardTransitionRepository
+    private lateinit var transitionInteractor: KeyguardTransitionInteractor
+
+    @Before
+    fun setUp() {
+        initMocks(this)
+
+        whenever(fromLockscreenTransitionInteractor.surfaceBehindModel)
+            .thenReturn(flowOf(lockscreenSurfaceBehindModel))
+        whenever(fromPrimaryBouncerTransitionInteractor.surfaceBehindModel)
+            .thenReturn(flowOf(primaryBouncerSurfaceBehindModel))
+
+        transitionRepository = FakeKeyguardTransitionRepository()
+
+        transitionInteractor =
+            KeyguardTransitionInteractorFactory.create(
+                    scope = testScope.backgroundScope,
+                    repository = transitionRepository,
+                )
+                .keyguardTransitionInteractor
+
+        repository = FakeKeyguardSurfaceBehindRepository()
+        underTest =
+            KeyguardSurfaceBehindInteractor(
+                repository = repository,
+                fromLockscreenInteractor = fromLockscreenTransitionInteractor,
+                fromPrimaryBouncerInteractor = fromPrimaryBouncerTransitionInteractor,
+                transitionInteractor = transitionInteractor,
+            )
+    }
+
+    @Test
+    fun viewParamsSwitchToCorrectFlow() =
+        testScope.runTest {
+            val values by collectValues(underTest.viewParams)
+
+            // Start on the LOCKSCREEN.
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.AOD,
+                    to = KeyguardState.LOCKSCREEN,
+                )
+            )
+
+            runCurrent()
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.FINISHED,
+                    from = KeyguardState.AOD,
+                    to = KeyguardState.LOCKSCREEN,
+                )
+            )
+
+            runCurrent()
+
+            // We're on LOCKSCREEN; we should be using the default params.
+            assertEquals(1, values.size)
+            assertTrue(values[0].alpha == 0f)
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.LOCKSCREEN,
+                    to = KeyguardState.GONE,
+                )
+            )
+
+            runCurrent()
+
+            // We're going from LOCKSCREEN -> GONE, we should be using the lockscreen interactor's
+            // surface behind model.
+            assertEquals(2, values.size)
+            assertEquals(values[1], lockscreenSurfaceBehindModel)
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.PRIMARY_BOUNCER,
+                    to = KeyguardState.GONE,
+                )
+            )
+
+            runCurrent()
+
+            // We're going from PRIMARY_BOUNCER -> GONE, we should be using the bouncer interactor's
+            // surface behind model.
+            assertEquals(3, values.size)
+            assertEquals(values[2], primaryBouncerSurfaceBehindModel)
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.FINISHED,
+                    from = KeyguardState.PRIMARY_BOUNCER,
+                    to = KeyguardState.GONE,
+                )
+            )
+
+            runCurrent()
+
+            // Once PRIMARY_BOUNCER -> GONE finishes, we should be using default params, which is
+            // alpha=1f when we're GONE.
+            assertEquals(4, values.size)
+            assertEquals(1f, values[3].alpha)
+        }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTestCase.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTestCase.kt
new file mode 100644
index 0000000..8db19ae
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTestCase.kt
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.domain.interactor
+
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
+import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
+import com.android.systemui.util.mockito.mock
+import dagger.Lazy
+import kotlinx.coroutines.test.StandardTestDispatcher
+import kotlinx.coroutines.test.TestScope
+
+open class KeyguardTransitionInteractorTestCase : SysuiTestCase() {
+    val testDispatcher = StandardTestDispatcher()
+    val testScope = TestScope(testDispatcher)
+
+    lateinit var keyguardRepository: FakeKeyguardRepository
+    lateinit var transitionRepository: FakeKeyguardTransitionRepository
+
+    lateinit var keyguardInteractor: KeyguardInteractor
+    lateinit var transitionInteractor: KeyguardTransitionInteractor
+
+    /**
+     * Replace these lazy providers with non-null ones if you want test dependencies to use a real
+     * instance of the interactor for the test.
+     */
+    open var fromLockscreenTransitionInteractorLazy: Lazy<FromLockscreenTransitionInteractor>? =
+        null
+    open var fromPrimaryBouncerTransitionInteractorLazy:
+        Lazy<FromPrimaryBouncerTransitionInteractor>? =
+        null
+
+    open fun setUp() {
+        keyguardRepository = FakeKeyguardRepository()
+        transitionRepository = FakeKeyguardTransitionRepository()
+
+        keyguardInteractor =
+            KeyguardInteractorFactory.create(repository = keyguardRepository).keyguardInteractor
+
+        transitionInteractor =
+            KeyguardTransitionInteractorFactory.create(
+                    repository = transitionRepository,
+                    keyguardInteractor = keyguardInteractor,
+                    scope = testScope.backgroundScope,
+                    fromLockscreenTransitionInteractor = fromLockscreenTransitionInteractorLazy
+                            ?: Lazy { mock() },
+                    fromPrimaryBouncerTransitionInteractor =
+                        fromPrimaryBouncerTransitionInteractorLazy ?: Lazy { mock() },
+                )
+                .also {
+                    fromLockscreenTransitionInteractorLazy = it.fromLockscreenTransitionInteractor
+                    fromPrimaryBouncerTransitionInteractorLazy =
+                        it.fromPrimaryBouncerTransitionInteractor
+                }
+                .keyguardTransitionInteractor
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
index aa6bd4e..4b221a0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
@@ -104,12 +104,21 @@
 
         whenever(keyguardSecurityModel.getSecurityMode(anyInt())).thenReturn(PIN)
 
-        featureFlags = FakeFeatureFlags().apply { set(Flags.FACE_AUTH_REFACTOR, true) }
+        featureFlags =
+            FakeFeatureFlags().apply {
+                set(Flags.FACE_AUTH_REFACTOR, true)
+                set(Flags.KEYGUARD_WM_STATE_REFACTOR, false)
+            }
 
         transitionInteractor =
             KeyguardTransitionInteractorFactory.create(
                     scope = testScope,
                     repository = transitionRepository,
+                    keyguardInteractor = createKeyguardInteractor(),
+                    fromLockscreenTransitionInteractor = { fromLockscreenTransitionInteractor },
+                    fromPrimaryBouncerTransitionInteractor = {
+                        fromPrimaryBouncerTransitionInteractor
+                    },
                 )
                 .keyguardTransitionInteractor
 
@@ -119,6 +128,7 @@
                     keyguardInteractor = createKeyguardInteractor(),
                     transitionRepository = transitionRepository,
                     transitionInteractor = transitionInteractor,
+                    flags = featureFlags,
                     shadeRepository = shadeRepository,
                 )
                 .apply { start() }
@@ -129,6 +139,7 @@
                     keyguardInteractor = createKeyguardInteractor(),
                     transitionRepository = transitionRepository,
                     transitionInteractor = transitionInteractor,
+                    flags = featureFlags,
                     keyguardSecurityModel = keyguardSecurityModel,
                 )
                 .apply { start() }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractorTest.kt
new file mode 100644
index 0000000..73ecae5
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractorTest.kt
@@ -0,0 +1,412 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.domain.interactor
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.RoboPilotTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.coroutines.collectValues
+import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
+import com.android.systemui.keyguard.shared.model.KeyguardState
+import com.android.systemui.keyguard.shared.model.TransitionState
+import com.android.systemui.keyguard.shared.model.TransitionStep
+import com.android.systemui.util.mockito.whenever
+import junit.framework.Assert.assertEquals
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.MockitoAnnotations.initMocks
+
+@SmallTest
+@RoboPilotTest
+@RunWith(AndroidJUnit4::class)
+@kotlinx.coroutines.ExperimentalCoroutinesApi
+class WindowManagerLockscreenVisibilityInteractorTest : SysuiTestCase() {
+
+    private lateinit var underTest: WindowManagerLockscreenVisibilityInteractor
+
+    @Mock private lateinit var surfaceBehindInteractor: KeyguardSurfaceBehindInteractor
+    @Mock
+    private lateinit var fromLockscreenTransitionInteractor: FromLockscreenTransitionInteractor
+    @Mock
+    private lateinit var fromPrimaryBouncerTransitionInteractor:
+        FromPrimaryBouncerTransitionInteractor
+
+    private val lockscreenSurfaceVisibilityFlow = MutableStateFlow<Boolean?>(false)
+    private val primaryBouncerSurfaceVisibilityFlow = MutableStateFlow<Boolean?>(false)
+    private val surfaceBehindIsAnimatingFlow = MutableStateFlow(false)
+
+    private val testScope = TestScope()
+
+    private lateinit var keyguardInteractor: KeyguardInteractor
+    private lateinit var transitionRepository: FakeKeyguardTransitionRepository
+    private lateinit var transitionInteractor: KeyguardTransitionInteractor
+
+    @Before
+    fun setUp() {
+        initMocks(this)
+
+        whenever(fromLockscreenTransitionInteractor.surfaceBehindVisibility)
+            .thenReturn(lockscreenSurfaceVisibilityFlow)
+        whenever(fromPrimaryBouncerTransitionInteractor.surfaceBehindVisibility)
+            .thenReturn(primaryBouncerSurfaceVisibilityFlow)
+        whenever(surfaceBehindInteractor.isAnimatingSurface)
+            .thenReturn(surfaceBehindIsAnimatingFlow)
+
+        transitionRepository = FakeKeyguardTransitionRepository()
+
+        transitionInteractor =
+            KeyguardTransitionInteractorFactory.create(
+                    scope = testScope.backgroundScope,
+                    repository = transitionRepository,
+                )
+                .also { keyguardInteractor = it.keyguardInteractor }
+                .keyguardTransitionInteractor
+
+        underTest =
+            WindowManagerLockscreenVisibilityInteractor(
+                keyguardInteractor = keyguardInteractor,
+                transitionInteractor = transitionInteractor,
+                surfaceBehindInteractor = surfaceBehindInteractor,
+                fromLockscreenTransitionInteractor,
+                fromPrimaryBouncerTransitionInteractor,
+            )
+    }
+
+    @Test
+    fun surfaceBehindVisibility_switchesToCorrectFlow() =
+        testScope.runTest {
+            val values by collectValues(underTest.surfaceBehindVisibility)
+
+            // Start on LOCKSCREEN.
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.AOD,
+                    to = KeyguardState.LOCKSCREEN,
+                )
+            )
+
+            runCurrent()
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.FINISHED,
+                    from = KeyguardState.AOD,
+                    to = KeyguardState.LOCKSCREEN,
+                )
+            )
+
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    false, // We should start with the surface invisible on LOCKSCREEN.
+                ),
+                values
+            )
+
+            val lockscreenSpecificSurfaceVisibility = true
+            lockscreenSurfaceVisibilityFlow.emit(lockscreenSpecificSurfaceVisibility)
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.LOCKSCREEN,
+                    to = KeyguardState.GONE,
+                )
+            )
+
+            runCurrent()
+
+            // We started a transition from LOCKSCREEN, we should be using the value emitted by the
+            // lockscreenSurfaceVisibilityFlow.
+            assertEquals(
+                listOf(
+                    false,
+                    lockscreenSpecificSurfaceVisibility,
+                ),
+                values
+            )
+
+            // Go back to LOCKSCREEN, since we won't emit 'true' twice in a row.
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.GONE,
+                    to = KeyguardState.LOCKSCREEN,
+                )
+            )
+            runCurrent()
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.FINISHED,
+                    from = KeyguardState.GONE,
+                    to = KeyguardState.LOCKSCREEN,
+                )
+            )
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    false,
+                    lockscreenSpecificSurfaceVisibility,
+                    false, // FINISHED (LOCKSCREEN)
+                ),
+                values
+            )
+
+            val bouncerSpecificVisibility = true
+            primaryBouncerSurfaceVisibilityFlow.emit(bouncerSpecificVisibility)
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.PRIMARY_BOUNCER,
+                    to = KeyguardState.GONE,
+                )
+            )
+
+            runCurrent()
+
+            // We started a transition from PRIMARY_BOUNCER, we should be using the value emitted by
+            // the
+            // primaryBouncerSurfaceVisibilityFlow.
+            assertEquals(
+                listOf(
+                    false,
+                    lockscreenSpecificSurfaceVisibility,
+                    false,
+                    bouncerSpecificVisibility,
+                ),
+                values
+            )
+        }
+
+    @Test
+    fun testUsingGoingAwayAnimation_duringTransitionToGone() =
+        testScope.runTest {
+            val values by collectValues(underTest.usingKeyguardGoingAwayAnimation)
+
+            // Start on LOCKSCREEN.
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.AOD,
+                    to = KeyguardState.LOCKSCREEN,
+                )
+            )
+            runCurrent()
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.FINISHED,
+                    from = KeyguardState.AOD,
+                    to = KeyguardState.LOCKSCREEN,
+                )
+            )
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    false, // Not using the animation when we're just sitting on LOCKSCREEN.
+                ),
+                values
+            )
+
+            surfaceBehindIsAnimatingFlow.emit(true)
+            runCurrent()
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.FINISHED,
+                    from = KeyguardState.LOCKSCREEN,
+                    to = KeyguardState.GONE,
+                )
+            )
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    false,
+                    true, // Still true when we're FINISHED -> GONE, since we're still animating.
+                ),
+                values
+            )
+
+            surfaceBehindIsAnimatingFlow.emit(false)
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    false,
+                    true,
+                    false, // False once the animation ends.
+                ),
+                values
+            )
+        }
+
+    @Test
+    fun testNotUsingGoingAwayAnimation_evenWhenAnimating_ifStateIsNotGone() =
+        testScope.runTest {
+            val values by collectValues(underTest.usingKeyguardGoingAwayAnimation)
+
+            // Start on LOCKSCREEN.
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.AOD,
+                    to = KeyguardState.LOCKSCREEN,
+                )
+            )
+            runCurrent()
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.FINISHED,
+                    from = KeyguardState.AOD,
+                    to = KeyguardState.LOCKSCREEN,
+                )
+            )
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    false, // Not using the animation when we're just sitting on LOCKSCREEN.
+                ),
+                values
+            )
+
+            surfaceBehindIsAnimatingFlow.emit(true)
+            runCurrent()
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.LOCKSCREEN,
+                    to = KeyguardState.GONE,
+                )
+            )
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    false,
+                    true, // We're happily animating while transitioning to gone.
+                ),
+                values
+            )
+
+            // Oh no, we're still surfaceBehindAnimating=true, but no longer transitioning to GONE.
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.LOCKSCREEN,
+                    to = KeyguardState.AOD,
+                )
+            )
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    false,
+                    true,
+                    false, // Despite the animator still running, this should be false.
+                ),
+                values
+            )
+
+            surfaceBehindIsAnimatingFlow.emit(false)
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    false,
+                    true,
+                    false, // The animator ending should have no effect.
+                ),
+                values
+            )
+        }
+
+    @Test
+    fun lockscreenVisibility_visibleWhenGone() =
+        testScope.runTest {
+            val values by collectValues(underTest.lockscreenVisibility)
+
+            // Start on LOCKSCREEN.
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.AOD,
+                    to = KeyguardState.LOCKSCREEN,
+                )
+            )
+            runCurrent()
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.FINISHED,
+                    from = KeyguardState.AOD,
+                    to = KeyguardState.LOCKSCREEN,
+                )
+            )
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    true, // Unsurprisingly, we should start with the lockscreen visible on
+                    // LOCKSCREEN.
+                ),
+                values
+            )
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.STARTED,
+                    from = KeyguardState.LOCKSCREEN,
+                    to = KeyguardState.GONE,
+                )
+            )
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    true, // Lockscreen remains visible while we're transitioning to GONE.
+                ),
+                values
+            )
+
+            transitionRepository.sendTransitionStep(
+                TransitionStep(
+                    transitionState = TransitionState.FINISHED,
+                    from = KeyguardState.LOCKSCREEN,
+                    to = KeyguardState.GONE,
+                )
+            )
+            runCurrent()
+
+            assertEquals(
+                listOf(
+                    true,
+                    false, // Once we're fully GONE, the lockscreen should not be visible.
+                ),
+                values
+            )
+        }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/KeyguardSurfaceBehindParamsApplierTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/KeyguardSurfaceBehindParamsApplierTest.kt
new file mode 100644
index 0000000..a22f603
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/KeyguardSurfaceBehindParamsApplierTest.kt
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.ui.binder
+
+import android.testing.TestableLooper.RunWithLooper
+import android.view.RemoteAnimationTarget
+import androidx.test.filters.SmallTest
+import com.android.keyguard.KeyguardViewController
+import com.android.systemui.RoboPilotTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.animation.AnimatorTestRule
+import com.android.systemui.keyguard.domain.interactor.KeyguardSurfaceBehindInteractor
+import com.android.systemui.keyguard.shared.model.KeyguardSurfaceBehindModel
+import com.android.systemui.util.concurrency.FakeExecutor
+import com.android.systemui.util.mockito.whenever
+import com.android.systemui.util.time.FakeSystemClock
+import junit.framework.Assert.assertFalse
+import junit.framework.Assert.assertNull
+import junit.framework.Assert.assertTrue
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.mockito.Mock
+import org.mockito.Mockito.anyBoolean
+import org.mockito.Mockito.doAnswer
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RoboPilotTest
+@RunWithLooper(setAsMainLooper = true)
+@kotlinx.coroutines.ExperimentalCoroutinesApi
+class KeyguardSurfaceBehindParamsApplierTest : SysuiTestCase() {
+    @get:Rule val animatorTestRule = AnimatorTestRule()
+
+    private lateinit var underTest: KeyguardSurfaceBehindParamsApplier
+    private lateinit var executor: FakeExecutor
+
+    @Mock private lateinit var keyguardViewController: KeyguardViewController
+
+    @Mock private lateinit var interactor: KeyguardSurfaceBehindInteractor
+
+    @Mock private lateinit var remoteAnimationTarget: RemoteAnimationTarget
+
+    private var isAnimatingSurface: Boolean? = null
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        executor = FakeExecutor(FakeSystemClock())
+        underTest =
+            KeyguardSurfaceBehindParamsApplier(
+                executor = executor,
+                keyguardViewController = keyguardViewController,
+                interactor = interactor,
+            )
+
+        doAnswer {
+                (it.arguments[0] as Boolean).let { animating -> isAnimatingSurface = animating }
+            }
+            .whenever(interactor)
+            .setAnimatingSurface(anyBoolean())
+    }
+
+    @After
+    fun tearDown() {
+        animatorTestRule.advanceTimeBy(1000.toLong())
+    }
+
+    @Test
+    fun testNotAnimating_setParamsWithNoAnimation() {
+        underTest.viewParams =
+            KeyguardSurfaceBehindModel(
+                alpha = 0.3f,
+                translationY = 300f,
+            )
+
+        // A surface has not yet been provided, so we shouldn't have set animating to false OR true
+        // just yet.
+        assertNull(isAnimatingSurface)
+
+        underTest.applyParamsToSurface(remoteAnimationTarget)
+
+        // We should now explicitly not be animating the surface.
+        assertFalse(checkNotNull(isAnimatingSurface))
+    }
+
+    @Test
+    fun testAnimating_paramsThenSurfaceProvided() {
+        underTest.viewParams =
+            KeyguardSurfaceBehindModel(
+                animateFromAlpha = 0f,
+                alpha = 0.3f,
+                animateFromTranslationY = 0f,
+                translationY = 300f,
+            )
+
+        // A surface has not yet been provided, so we shouldn't have set animating to false OR true
+        // just yet.
+        assertNull(isAnimatingSurface)
+
+        underTest.applyParamsToSurface(remoteAnimationTarget)
+
+        // We should now be animating the surface.
+        assertTrue(checkNotNull(isAnimatingSurface))
+    }
+
+    @Test
+    fun testAnimating_surfaceThenParamsProvided() {
+        underTest.applyParamsToSurface(remoteAnimationTarget)
+
+        // The default params (which do not animate) should have been applied, so we're explicitly
+        // NOT animating yet.
+        assertFalse(checkNotNull(isAnimatingSurface))
+
+        underTest.viewParams =
+            KeyguardSurfaceBehindModel(
+                animateFromAlpha = 0f,
+                alpha = 0.3f,
+                animateFromTranslationY = 0f,
+                translationY = 300f,
+            )
+
+        // We should now be animating the surface.
+        assertTrue(checkNotNull(isAnimatingSurface))
+    }
+
+    @Test
+    fun testAnimating_thenReleased_animatingIsFalse() {
+        underTest.viewParams =
+            KeyguardSurfaceBehindModel(
+                animateFromAlpha = 0f,
+                alpha = 0.3f,
+                animateFromTranslationY = 0f,
+                translationY = 300f,
+            )
+        underTest.applyParamsToSurface(remoteAnimationTarget)
+
+        assertTrue(checkNotNull(isAnimatingSurface))
+
+        underTest.notifySurfaceReleased()
+
+        // Releasing the surface should immediately cancel animators.
+        assertFalse(checkNotNull(isAnimatingSurface))
+    }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/WindowManagerLockscreenVisibilityManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/WindowManagerLockscreenVisibilityManagerTest.kt
new file mode 100644
index 0000000..623c877
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/WindowManagerLockscreenVisibilityManagerTest.kt
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.ui.binder
+
+import android.app.IActivityTaskManager
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.RoboPilotTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.keyguard.WindowManagerLockscreenVisibilityManager
+import com.android.systemui.statusbar.policy.KeyguardStateController
+import com.android.systemui.util.concurrency.FakeExecutor
+import com.android.systemui.util.time.FakeSystemClock
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.anyInt
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RoboPilotTest
+@RunWith(AndroidJUnit4::class)
+@kotlinx.coroutines.ExperimentalCoroutinesApi
+class WindowManagerLockscreenVisibilityManagerTest : SysuiTestCase() {
+    private lateinit var underTest: WindowManagerLockscreenVisibilityManager
+    private lateinit var executor: FakeExecutor
+
+    @Mock private lateinit var activityTaskManagerService: IActivityTaskManager
+
+    @Mock private lateinit var keyguardStateController: KeyguardStateController
+
+    @Mock private lateinit var keyguardSurfaceBehindAnimator: KeyguardSurfaceBehindParamsApplier
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        executor = FakeExecutor(FakeSystemClock())
+
+        underTest =
+            WindowManagerLockscreenVisibilityManager(
+                executor = executor,
+                activityTaskManagerService = activityTaskManagerService,
+                keyguardStateController = keyguardStateController,
+                keyguardSurfaceBehindAnimator = keyguardSurfaceBehindAnimator,
+            )
+    }
+
+    @Test
+    fun testLockscreenVisible_andAodVisible() {
+        underTest.setLockscreenShown(true)
+        underTest.setAodVisible(true)
+
+        verify(activityTaskManagerService).setLockScreenShown(true, true)
+        verifyNoMoreInteractions(activityTaskManagerService)
+    }
+
+    @Test
+    fun testGoingAway_whenLockscreenVisible_thenSurfaceMadeVisible() {
+        underTest.setLockscreenShown(true)
+        underTest.setAodVisible(true)
+
+        verify(activityTaskManagerService).setLockScreenShown(true, true)
+        verifyNoMoreInteractions(activityTaskManagerService)
+
+        underTest.setSurfaceBehindVisibility(true)
+
+        verify(activityTaskManagerService).keyguardGoingAway(anyInt())
+        verifyNoMoreInteractions(activityTaskManagerService)
+    }
+
+    @Test
+    fun testSurfaceVisible_whenLockscreenNotShowing_doesNotTriggerGoingAway() {
+        underTest.setLockscreenShown(false)
+        underTest.setAodVisible(false)
+
+        verify(activityTaskManagerService).setLockScreenShown(false, false)
+        verifyNoMoreInteractions(activityTaskManagerService)
+
+        underTest.setSurfaceBehindVisibility(true)
+
+        verifyNoMoreInteractions(activityTaskManagerService)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/DreamingToLockscreenTransitionViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/DreamingToLockscreenTransitionViewModelTest.kt
index c67f535..bfc6f31 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/DreamingToLockscreenTransitionViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/DreamingToLockscreenTransitionViewModelTest.kt
@@ -21,9 +21,7 @@
 import com.android.systemui.RoboPilotTest
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
-import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
 import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractorFactory
-import com.android.systemui.keyguard.shared.model.KeyguardState
 import com.android.systemui.keyguard.shared.model.KeyguardState.AOD
 import com.android.systemui.keyguard.shared.model.KeyguardState.DOZING
 import com.android.systemui.keyguard.shared.model.KeyguardState.DREAMING
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsFingerprintViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsFingerprintViewModelTest.kt
index 80ab418..0ad14d0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsFingerprintViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsFingerprintViewModelTest.kt
@@ -31,7 +31,7 @@
 import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
 import com.android.systemui.keyguard.domain.interactor.BurnInInteractor
 import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory
-import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
+import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractorFactory
 import com.android.systemui.keyguard.domain.interactor.UdfpsKeyguardInteractor
 import com.android.systemui.shade.data.repository.FakeShadeRepository
 import com.android.systemui.statusbar.phone.SystemUIDialogManager
@@ -83,16 +83,21 @@
         bouncerRepository = FakeKeyguardBouncerRepository()
         transitionRepository = FakeKeyguardTransitionRepository()
         shadeRepository = FakeShadeRepository()
-        val transitionInteractor =
-            KeyguardTransitionInteractor(
-                transitionRepository,
-                testScope.backgroundScope,
-            )
         val keyguardInteractor =
             KeyguardInteractorFactory.create(
+                    repository = keyguardRepository,
                     featureFlags = featureFlags,
                 )
                 .keyguardInteractor
+
+        val transitionInteractor =
+            KeyguardTransitionInteractorFactory.create(
+                    scope = testScope.backgroundScope,
+                    repository = transitionRepository,
+                    keyguardInteractor = keyguardInteractor,
+                )
+                .keyguardTransitionInteractor
+
         underTest =
             FingerprintViewModel(
                 context,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsLockscreenViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsLockscreenViewModelTest.kt
index 0456824..edcaa1d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsLockscreenViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/UdfpsLockscreenViewModelTest.kt
@@ -30,7 +30,7 @@
 import com.android.systemui.keyguard.domain.interactor.BurnInInteractor
 import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
 import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory
-import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
+import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractorFactory
 import com.android.systemui.keyguard.domain.interactor.UdfpsKeyguardInteractor
 import com.android.systemui.keyguard.shared.model.KeyguardState
 import com.android.systemui.keyguard.shared.model.StatusBarState
@@ -98,15 +98,20 @@
                 bouncerRepository = it.bouncerRepository
             }
 
+        val transitionInteractor =
+            KeyguardTransitionInteractorFactory.create(
+                    scope = testScope.backgroundScope,
+                    repository = transitionRepository,
+                    keyguardInteractor = keyguardInteractor,
+                )
+                .keyguardTransitionInteractor
+
         underTest =
             UdfpsLockscreenViewModel(
                 context,
                 lockscreenColorResId,
                 alternateBouncerResId,
-                KeyguardTransitionInteractor(
-                    transitionRepository,
-                    testScope.backgroundScope,
-                ),
+                transitionInteractor,
                 UdfpsKeyguardInteractor(
                     configRepository,
                     BurnInInteractor(
diff --git a/packages/SystemUI/tests/src/com/android/systemui/logcat/LogAccessDialogActivityTest.java b/packages/SystemUI/tests/src/com/android/systemui/logcat/LogAccessDialogActivityTest.java
new file mode 100644
index 0000000..1d7d5df
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/logcat/LogAccessDialogActivityTest.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.logcat;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.view.View;
+
+import androidx.test.core.app.ActivityScenario;
+import androidx.test.ext.junit.rules.ActivityScenarioRule;
+import androidx.test.filters.LargeTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import com.android.internal.app.ILogAccessDialogCallback;
+import com.android.systemui.R;
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+@LargeTest
+public class LogAccessDialogActivityTest extends SysuiTestCase {
+
+    public static final String EXTRA_CALLBACK = "EXTRA_CALLBACK";
+    private final DialogCallbackTestable mDialogCallback = new DialogCallbackTestable();
+    @Rule
+    public ActivityScenarioRule<DialogTestable> mActivityScenarioRule =
+            new ActivityScenarioRule<>(getIntent());
+
+    static final class DialogCallbackTestable extends ILogAccessDialogCallback.Stub {
+
+        int mNumOfApprove = 0;
+        int mNumOfDecline = 0;
+        CountDownLatch mCountDownLatch = new CountDownLatch(1);
+
+        @Override
+        public void approveAccessForClient(int i, String s) {
+            mNumOfApprove++;
+            mCountDownLatch.countDown();
+        }
+
+        @Override
+        public void declineAccessForClient(int i, String s) {
+            mNumOfDecline++;
+            mCountDownLatch.countDown();
+        }
+    }
+
+    @Before
+    public void setUp() {
+        mDialogCallback.mNumOfDecline = 0;
+        mDialogCallback.mNumOfApprove = 0;
+        mDialogCallback.mCountDownLatch = new CountDownLatch(1);
+    }
+
+    private Intent getIntent() {
+        Context context = InstrumentationRegistry.getInstrumentation().getContext();
+        final Intent intent = new Intent(context, DialogTestable.class);
+
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+        intent.putExtra(Intent.EXTRA_PACKAGE_NAME, "packageName");
+        intent.putExtra(Intent.EXTRA_UID, 1);
+
+        intent.putExtra(EXTRA_CALLBACK, mDialogCallback.asBinder());
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+        return intent;
+    }
+
+    @Test
+    public void test_dialogDisappear_withoutClick_autoDeclined() throws InterruptedException {
+        ActivityScenario<DialogTestable> activityScenario = mActivityScenarioRule.getScenario();
+        activityScenario.onActivity(Activity::finish);
+
+        assertTrue(mDialogCallback.mCountDownLatch.await(2, TimeUnit.SECONDS));
+        assertEquals(mDialogCallback.mNumOfDecline, 1);
+        assertEquals(mDialogCallback.mNumOfApprove, 0);
+
+    }
+
+    @Test
+    public void test_clickAllow() throws InterruptedException {
+        ActivityScenario<DialogTestable> activityScenario = mActivityScenarioRule.getScenario();
+
+        activityScenario.onActivity(activity -> {
+            View allowButton =
+                    activity.mAlertView.findViewById(R.id.log_access_dialog_allow_button);
+            assertNotNull(allowButton);
+            allowButton.performClick();
+        });
+
+        assertTrue(mDialogCallback.mCountDownLatch.await(10, TimeUnit.SECONDS));
+        assertEquals(mDialogCallback.mNumOfDecline, 0);
+        assertEquals(mDialogCallback.mNumOfApprove, 1);
+    }
+
+    @Test
+    public void test_clickDeny() throws InterruptedException {
+        ActivityScenario<DialogTestable> activityScenario = mActivityScenarioRule.getScenario();
+
+        activityScenario.onActivity(activity -> {
+            View denyButton =
+                    activity.mAlertView.findViewById(R.id.log_access_dialog_deny_button);
+            assertNotNull(denyButton);
+            denyButton.performClick();
+        });
+
+        assertTrue(mDialogCallback.mCountDownLatch.await(10, TimeUnit.SECONDS));
+        assertEquals(mDialogCallback.mNumOfDecline, 1);
+        assertEquals(mDialogCallback.mNumOfApprove, 0);
+    }
+
+    public static class DialogTestable extends LogAccessDialogActivity {
+
+        @Override
+        protected String getTitleString(Context context, String callingPackage, int uid) {
+            return "DialogTitle";
+        }
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/OWNERS b/packages/SystemUI/tests/src/com/android/systemui/media/OWNERS
new file mode 100644
index 0000000..142862d
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/OWNERS
@@ -0,0 +1,2 @@
+# Haptics team also works on Ringtones (RingtonePlayer/NotificationPlayer)
+file:/services/core/java/com/android/server/vibrator/OWNERS
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaCarouselControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaCarouselControllerTest.kt
index 5b8272b0..ae0a334 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaCarouselControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/MediaCarouselControllerTest.kt
@@ -30,6 +30,7 @@
 import com.android.internal.logging.InstanceId
 import com.android.keyguard.KeyguardUpdateMonitor
 import com.android.keyguard.KeyguardUpdateMonitorCallback
+import com.android.keyguard.TestScopeProvider
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.classifier.FalsingCollector
@@ -37,6 +38,7 @@
 import com.android.systemui.dump.DumpManager
 import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
 import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
+import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractorFactory
 import com.android.systemui.keyguard.shared.model.KeyguardState
 import com.android.systemui.keyguard.shared.model.TransitionState
 import com.android.systemui.keyguard.shared.model.TransitionStep
@@ -66,7 +68,6 @@
 import junit.framework.Assert.assertFalse
 import junit.framework.Assert.assertTrue
 import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.test.TestScope
 import kotlinx.coroutines.test.UnconfinedTestDispatcher
 import kotlinx.coroutines.test.runTest
 import org.junit.Before
@@ -152,7 +153,11 @@
                 debugLogger,
                 mediaFlags,
                 keyguardUpdateMonitor,
-                KeyguardTransitionInteractor(transitionRepository, TestScope().backgroundScope),
+                KeyguardTransitionInteractorFactory.create(
+                        scope = TestScopeProvider.getTestScope().backgroundScope,
+                        repository = transitionRepository,
+                    )
+                    .keyguardTransitionInteractor,
                 globalSettings
             )
         verify(configurationController).addCallback(capture(configListener))
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 a59ea20..1931580 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
@@ -98,8 +98,6 @@
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper(setAsMainLooper = true)
 public class MediaOutputControllerTest extends SysuiTestCase {
-
-    private static final String TEST_PACKAGE_NAME = "com.test.package.name";
     private static final String TEST_DEVICE_1_ID = "test_device_1_id";
     private static final String TEST_DEVICE_2_ID = "test_device_2_id";
     private static final String TEST_DEVICE_3_ID = "test_device_3_id";
@@ -167,6 +165,7 @@
     final Notification mNotification = mock(Notification.class);
 
     private Context mSpyContext;
+    private String mPackageName = null;
     private MediaOutputController mMediaOutputController;
     private LocalMediaManager mLocalMediaManager;
     private List<MediaController> mMediaControllers = new ArrayList<>();
@@ -177,12 +176,14 @@
 
     @Before
     public void setUp() {
+        mPackageName = mContext.getPackageName();
+
         MockitoAnnotations.initMocks(this);
         mContext.setMockPackageManager(mPackageManager);
         mSpyContext = spy(mContext);
         final UserHandle userHandle = mock(UserHandle.class);
         when(mUserTracker.getUserHandle()).thenReturn(userHandle);
-        when(mSessionMediaController.getPackageName()).thenReturn(TEST_PACKAGE_NAME);
+        when(mSessionMediaController.getPackageName()).thenReturn(mPackageName);
         when(mSessionMediaController.getPlaybackState()).thenReturn(mPlaybackState);
         mMediaControllers.add(mSessionMediaController);
         when(mMediaSessionManager.getActiveSessionsForUser(any(),
@@ -193,7 +194,7 @@
         when(mLocalBluetoothManager.getCachedDeviceManager()).thenReturn(
                 mCachedBluetoothDeviceManager);
 
-        mMediaOutputController = new MediaOutputController(mSpyContext, TEST_PACKAGE_NAME,
+        mMediaOutputController = new MediaOutputController(mSpyContext, mPackageName,
                 mMediaSessionManager, mLocalBluetoothManager, mStarter,
                 mNotifCollection, mDialogLaunchAnimator,
                 mNearbyMediaDevicesManager, mAudioManager, mPowerExemptionManager,
@@ -231,7 +232,7 @@
         when(mNotifCollection.getAllNotifs()).thenReturn(entryList);
         when(entry.getSbn()).thenReturn(sbn);
         when(sbn.getNotification()).thenReturn(mNotification);
-        when(sbn.getPackageName()).thenReturn(TEST_PACKAGE_NAME);
+        when(sbn.getPackageName()).thenReturn(mPackageName);
         mNotification.extras = bundle;
         when(bundle.getParcelable(Notification.EXTRA_MEDIA_SESSION,
                 MediaSession.Token.class)).thenReturn(token);
@@ -339,8 +340,8 @@
     public void tryToLaunchMediaApplication_intentNotNull_startActivity() {
         when(mDialogLaunchAnimator.createActivityLaunchController(any(View.class))).thenReturn(
                 mController);
-        Intent intent = new Intent(TEST_PACKAGE_NAME);
-        doReturn(intent).when(mPackageManager).getLaunchIntentForPackage(TEST_PACKAGE_NAME);
+        Intent intent = new Intent(mPackageName);
+        doReturn(intent).when(mPackageManager).getLaunchIntentForPackage(mPackageName);
         mMediaOutputController.start(mCallback);
 
         mMediaOutputController.tryToLaunchMediaApplication(mDialogLaunchView);
@@ -355,7 +356,7 @@
                 mController);
         mMediaOutputController.start(mCallback);
         when(mLocalMediaManager.getLinkedItemComponentName()).thenReturn(
-                new ComponentName(TEST_PACKAGE_NAME, ""));
+                new ComponentName(mPackageName, ""));
 
         mMediaOutputController.tryToLaunchInAppRoutingIntent(TEST_DEVICE_1_ID, mDialogLaunchView);
 
@@ -782,33 +783,20 @@
     }
 
     @Test
-    public void getActiveRemoteMediaDevice_isSystemSession_returnSession() {
+    public void getActiveRemoteMediaDevices() {
         when(mRemoteSessionInfo.getId()).thenReturn(TEST_SESSION_ID);
         when(mRemoteSessionInfo.getName()).thenReturn(TEST_SESSION_NAME);
         when(mRemoteSessionInfo.getVolumeMax()).thenReturn(100);
         when(mRemoteSessionInfo.getVolume()).thenReturn(10);
         when(mRemoteSessionInfo.isSystemSession()).thenReturn(false);
         mRoutingSessionInfos.add(mRemoteSessionInfo);
-        when(mLocalMediaManager.getActiveMediaSession()).thenReturn(mRoutingSessionInfos);
+        when(mLocalMediaManager.getRemoteRoutingSessions()).thenReturn(mRoutingSessionInfos);
 
         assertThat(mMediaOutputController.getActiveRemoteMediaDevices()).containsExactly(
                 mRemoteSessionInfo);
     }
 
     @Test
-    public void getActiveRemoteMediaDevice_notSystemSession_returnEmpty() {
-        when(mRemoteSessionInfo.getId()).thenReturn(TEST_SESSION_ID);
-        when(mRemoteSessionInfo.getName()).thenReturn(TEST_SESSION_NAME);
-        when(mRemoteSessionInfo.getVolumeMax()).thenReturn(100);
-        when(mRemoteSessionInfo.getVolume()).thenReturn(10);
-        when(mRemoteSessionInfo.isSystemSession()).thenReturn(true);
-        mRoutingSessionInfos.add(mRemoteSessionInfo);
-        when(mLocalMediaManager.getActiveMediaSession()).thenReturn(mRoutingSessionInfos);
-
-        assertThat(mMediaOutputController.getActiveRemoteMediaDevices()).isEmpty();
-    }
-
-    @Test
     public void getGroupMediaDevices_differentDeviceOrder_showingSameOrder() {
         final MediaDevice selectedMediaDevice1 = mock(MediaDevice.class);
         final MediaDevice selectedMediaDevice2 = mock(MediaDevice.class);
@@ -904,7 +892,7 @@
         when(mNotifCollection.getAllNotifs()).thenReturn(entryList);
         when(entry.getSbn()).thenReturn(sbn);
         when(sbn.getNotification()).thenReturn(notification);
-        when(sbn.getPackageName()).thenReturn(TEST_PACKAGE_NAME);
+        when(sbn.getPackageName()).thenReturn(mPackageName);
         when(notification.isMediaNotification()).thenReturn(true);
         when(notification.getLargeIcon()).thenReturn(null);
 
@@ -923,7 +911,7 @@
         when(mNotifCollection.getAllNotifs()).thenReturn(entryList);
         when(entry.getSbn()).thenReturn(sbn);
         when(sbn.getNotification()).thenReturn(notification);
-        when(sbn.getPackageName()).thenReturn(TEST_PACKAGE_NAME);
+        when(sbn.getPackageName()).thenReturn(mPackageName);
         when(notification.isMediaNotification()).thenReturn(true);
         when(notification.getLargeIcon()).thenReturn(icon);
 
@@ -942,7 +930,7 @@
         when(mNotifCollection.getAllNotifs()).thenReturn(entryList);
         when(entry.getSbn()).thenReturn(sbn);
         when(sbn.getNotification()).thenReturn(notification);
-        when(sbn.getPackageName()).thenReturn(TEST_PACKAGE_NAME);
+        when(sbn.getPackageName()).thenReturn(mPackageName);
         when(notification.isMediaNotification()).thenReturn(false);
         when(notification.getLargeIcon()).thenReturn(icon);
 
@@ -960,7 +948,7 @@
         when(mNotifCollection.getAllNotifs()).thenReturn(entryList);
         when(entry.getSbn()).thenReturn(sbn);
         when(sbn.getNotification()).thenReturn(notification);
-        when(sbn.getPackageName()).thenReturn(TEST_PACKAGE_NAME);
+        when(sbn.getPackageName()).thenReturn(mPackageName);
         when(notification.isMediaNotification()).thenReturn(true);
         when(notification.getSmallIcon()).thenReturn(null);
 
@@ -979,7 +967,7 @@
         when(mNotifCollection.getAllNotifs()).thenReturn(entryList);
         when(entry.getSbn()).thenReturn(sbn);
         when(sbn.getNotification()).thenReturn(notification);
-        when(sbn.getPackageName()).thenReturn(TEST_PACKAGE_NAME);
+        when(sbn.getPackageName()).thenReturn(mPackageName);
         when(notification.isMediaNotification()).thenReturn(true);
         when(notification.getSmallIcon()).thenReturn(icon);
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java
index 5b30687..3e20511 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogControllerTest.java
@@ -31,6 +31,7 @@
 
 import android.animation.Animator;
 import android.content.Intent;
+import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.PixelFormat;
 import android.graphics.drawable.Drawable;
@@ -90,6 +91,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 @SmallTest
@@ -182,6 +184,8 @@
     private List<WifiEntry> mAccessPoints = new ArrayList<>();
     private List<WifiEntry> mWifiEntries = new ArrayList<>();
 
+    private Configuration mConfig;
+
     @Before
     public void setUp() {
         mStaticMockSession = mockitoSession()
@@ -226,11 +230,17 @@
         mInternetDialogController.mActivityStarter = mActivityStarter;
         mInternetDialogController.mWifiIconInjector = mWifiIconInjector;
         mFlags.set(Flags.QS_SECONDARY_DATA_SUB_INFO, false);
+
+        mConfig = new Configuration(mContext.getResources().getConfiguration());
+        Configuration c2 = new Configuration(mConfig);
+        c2.setLocale(Locale.US);
+        mContext.getResources().updateConfiguration(c2, null);
     }
 
     @After
     public void tearDown() {
         mStaticMockSession.finishMocking();
+        mContext.getResources().updateConfiguration(mConfig, null);
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingControllerTest.java
index 2698131bd..6e6833d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingControllerTest.java
@@ -17,10 +17,8 @@
 package com.android.systemui.screenrecord;
 
 import static com.google.common.truth.Truth.assertThat;
-
 import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertTrue;
-
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.verify;
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 8cf005d..1240f26 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java
@@ -68,6 +68,7 @@
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 
+import androidx.test.filters.FlakyTest;
 import androidx.test.filters.SmallTest;
 
 import com.android.keyguard.TrustGrantFlags;
@@ -149,6 +150,7 @@
                 .isEqualTo(mContext.getColor(R.color.misalignment_text_color));
     }
 
+    @FlakyTest(bugId = 279944472)
     @Test
     public void onAlignmentStateChanged_whileDozing_showsSlowChargingIndication() {
         mInstrumentation.runOnMainSync(() -> {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FeedbackInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FeedbackInfoTest.java
index 6d687a6..cf1d2ca 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FeedbackInfoTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/FeedbackInfoTest.java
@@ -41,6 +41,7 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.content.res.Configuration;
 import android.graphics.drawable.Drawable;
 import android.os.UserHandle;
 import android.service.notification.StatusBarNotification;
@@ -60,12 +61,15 @@
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
 
+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)
 @UiThreadTest
@@ -87,6 +91,8 @@
     @Mock
     private NotificationGutsManager mNotificationGutsManager;
 
+    private Configuration mConfig;
+
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
@@ -111,7 +117,15 @@
 
         mSbn = new StatusBarNotification(TEST_PACKAGE_NAME, TEST_PACKAGE_NAME, 0, null, TEST_UID, 0,
                 new Notification(), UserHandle.CURRENT, null, 0);
+        mConfig = new Configuration(mContext.getResources().getConfiguration());
+        Configuration c2 = new Configuration(mConfig);
+        c2.setLocale(Locale.US);
+        mContext.getResources().updateConfiguration(c2, null);
+    }
 
+    @After
+    public void tearDown() {
+        mContext.getResources().updateConfiguration(mConfig, null);
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt
index 52f642d..9795b9d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt
@@ -194,31 +194,27 @@
 
     @Test
     fun testAppTransitionFinished_doesNotShowManagedProfileIcon() {
-        whenever(userManager.isManagedProfile(anyInt())).thenReturn(false)
+        whenever(userManager.getUserStatusBarIconResId(anyInt())).thenReturn(0 /* ID_NULL */)
         whenever(keyguardStateController.isShowing).thenReturn(false)
-
         statusBarPolicy.appTransitionFinished(0)
         // The above call posts to bgExecutor and then back to mainExecutor
         executor.advanceClockToLast()
         executor.runAllReady()
         executor.advanceClockToLast()
         executor.runAllReady()
-
         verify(iconController, never()).setIconVisibility(MANAGED_PROFILE_SLOT, true)
     }
 
     @Test
     fun testAppTransitionFinished_showsManagedProfileIcon() {
-        whenever(userManager.isManagedProfile(anyInt())).thenReturn(true)
+        whenever(userManager.getUserStatusBarIconResId(anyInt())).thenReturn(100)
         whenever(keyguardStateController.isShowing).thenReturn(false)
-
         statusBarPolicy.appTransitionFinished(0)
         // The above call posts to bgExecutor and then back to mainExecutor
         executor.advanceClockToLast()
         executor.runAllReady()
         executor.advanceClockToLast()
         executor.runAllReady()
-
         verify(iconController).setIconVisibility(MANAGED_PROFILE_SLOT, 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 ed9cf3f..0da7360 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
@@ -35,6 +35,8 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import static kotlinx.coroutines.test.TestCoroutineDispatchersKt.StandardTestDispatcher;
+
 import android.service.trust.TrustAgentService;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
@@ -73,6 +75,8 @@
 import com.android.systemui.dreams.DreamOverlayStateController;
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.flags.Flags;
+import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
+import com.android.systemui.keyguard.domain.interactor.WindowManagerLockscreenVisibilityInteractor;
 import com.android.systemui.navigationbar.NavigationModeController;
 import com.android.systemui.navigationbar.TaskbarDelegate;
 import com.android.systemui.plugins.ActivityStarter;
@@ -201,7 +205,10 @@
                         mBouncerView,
                         mAlternateBouncerInteractor,
                         mUdfpsOverlayInteractor,
-                        mActivityStarter) {
+                        mActivityStarter,
+                        mock(KeyguardTransitionInteractor.class),
+                        StandardTestDispatcher(null, null),
+                        () -> mock(WindowManagerLockscreenVisibilityInteractor.class)) {
                     @Override
                     public ViewRootImpl getViewRootImpl() {
                         return mViewRootImpl;
@@ -701,7 +708,10 @@
                         mBouncerView,
                         mAlternateBouncerInteractor,
                         mUdfpsOverlayInteractor,
-                        mActivityStarter) {
+                        mActivityStarter,
+                        mock(KeyguardTransitionInteractor.class),
+                        StandardTestDispatcher(null, null),
+                        () -> mock(WindowManagerLockscreenVisibilityInteractor.class)) {
                     @Override
                     public ViewRootImpl getViewRootImpl() {
                         return mViewRootImpl;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/VariableDateViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/VariableDateViewControllerTest.kt
index 871a48c..b698e70 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/VariableDateViewControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/VariableDateViewControllerTest.kt
@@ -19,9 +19,11 @@
 import android.os.Handler
 import android.testing.AndroidTestingRunner
 import android.testing.TestableLooper
+import android.view.View
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.broadcast.BroadcastDispatcher
+import com.android.systemui.shade.ShadeExpansionStateManager
 import com.android.systemui.util.mockito.any
 import com.android.systemui.util.mockito.capture
 import com.android.systemui.util.time.FakeSystemClock
@@ -59,6 +61,7 @@
 
     private var lastText: String? = null
 
+    private lateinit var shadeExpansionStateManager: ShadeExpansionStateManager
     private lateinit var systemClock: FakeSystemClock
     private lateinit var testableLooper: TestableLooper
     private lateinit var testableHandler: Handler
@@ -76,6 +79,8 @@
         systemClock = FakeSystemClock()
         systemClock.setCurrentTimeMillis(TIME_STAMP)
 
+        shadeExpansionStateManager = ShadeExpansionStateManager()
+
         `when`(view.longerPattern).thenReturn(LONG_PATTERN)
         `when`(view.shorterPattern).thenReturn(SHORT_PATTERN)
         `when`(view.handler).thenReturn(testableHandler)
@@ -99,6 +104,7 @@
         controller = VariableDateViewController(
                 systemClock,
                 broadcastDispatcher,
+                shadeExpansionStateManager,
                 testableHandler,
                 view
         )
@@ -121,7 +127,7 @@
 
     @Test
     fun testLotsOfSpaceUseLongText() {
-        onMeasureListenerCaptor.value.onMeasureAction(10000)
+        onMeasureListenerCaptor.value.onMeasureAction(10000, View.MeasureSpec.EXACTLY)
 
         testableLooper.processAllMessages()
         assertThat(lastText).isEqualTo(longText)
@@ -129,7 +135,7 @@
 
     @Test
     fun testSmallSpaceUseEmpty() {
-        onMeasureListenerCaptor.value.onMeasureAction(1)
+        onMeasureListenerCaptor.value.onMeasureAction(1, View.MeasureSpec.EXACTLY)
         testableLooper.processAllMessages()
 
         assertThat(lastText).isEmpty()
@@ -139,7 +145,7 @@
     fun testSpaceInBetweenUseShortText() {
         val average = ((getTextLength(longText) + getTextLength(shortText)) / 2).toInt()
 
-        onMeasureListenerCaptor.value.onMeasureAction(average)
+        onMeasureListenerCaptor.value.onMeasureAction(average, View.MeasureSpec.EXACTLY)
         testableLooper.processAllMessages()
 
         assertThat(lastText).isEqualTo(shortText)
@@ -147,10 +153,10 @@
 
     @Test
     fun testSwitchBackToLonger() {
-        onMeasureListenerCaptor.value.onMeasureAction(1)
+        onMeasureListenerCaptor.value.onMeasureAction(1, View.MeasureSpec.EXACTLY)
         testableLooper.processAllMessages()
 
-        onMeasureListenerCaptor.value.onMeasureAction(10000)
+        onMeasureListenerCaptor.value.onMeasureAction(10000, View.MeasureSpec.EXACTLY)
         testableLooper.processAllMessages()
 
         assertThat(lastText).isEqualTo(longText)
@@ -161,11 +167,41 @@
         `when`(view.freezeSwitching).thenReturn(true)
 
         val average = ((getTextLength(longText) + getTextLength(shortText)) / 2).toInt()
-        onMeasureListenerCaptor.value.onMeasureAction(average)
+        onMeasureListenerCaptor.value.onMeasureAction(average, View.MeasureSpec.EXACTLY)
         testableLooper.processAllMessages()
         assertThat(lastText).isEqualTo(longText)
 
-        onMeasureListenerCaptor.value.onMeasureAction(1)
+        onMeasureListenerCaptor.value.onMeasureAction(1, View.MeasureSpec.EXACTLY)
+        testableLooper.processAllMessages()
+        assertThat(lastText).isEqualTo(longText)
+    }
+
+    @Test
+    fun testQsExpansionTrue_ignoreAtMostMeasureRequests() {
+        shadeExpansionStateManager.onQsExpansionFractionChanged(0f)
+
+        onMeasureListenerCaptor.value.onMeasureAction(
+                getTextLength(shortText).toInt(),
+                View.MeasureSpec.EXACTLY
+            )
+        testableLooper.processAllMessages()
+
+        onMeasureListenerCaptor.value.onMeasureAction(10000, View.MeasureSpec.AT_MOST)
+        testableLooper.processAllMessages()
+        assertThat(lastText).isEqualTo(shortText)
+    }
+
+    @Test
+    fun testQsExpansionFalse_acceptAtMostMeasureRequests() {
+        shadeExpansionStateManager.onQsExpansionFractionChanged(1f)
+
+        onMeasureListenerCaptor.value.onMeasureAction(
+                getTextLength(shortText).toInt(),
+                View.MeasureSpec.EXACTLY
+        )
+        testableLooper.processAllMessages()
+
+        onMeasureListenerCaptor.value.onMeasureAction(10000, View.MeasureSpec.AT_MOST)
         testableLooper.processAllMessages()
         assertThat(lastText).isEqualTo(longText)
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java
index 0663004..462fd0a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java
@@ -40,7 +40,6 @@
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 import android.view.accessibility.AccessibilityManager;
-import android.view.accessibility.CaptioningManager;
 
 import androidx.test.filters.SmallTest;
 
@@ -64,6 +63,8 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import java.util.concurrent.Executor;
+
 @RunWith(AndroidTestingRunner.class)
 @SmallTest
 @TestableLooper.RunWithLooper
@@ -96,8 +97,6 @@
     @Mock
     private WakefulnessLifecycle mWakefullnessLifcycle;
     @Mock
-    private CaptioningManager mCaptioningManager;
-    @Mock
     private KeyguardManager mKeyguardManager;
     @Mock
     private ActivityManager mActivityManager;
@@ -105,6 +104,8 @@
     private UserTracker mUserTracker;
     @Mock
     private DumpManager mDumpManager;
+    @Mock
+    private Handler mHandler;
 
 
     @Before
@@ -117,6 +118,7 @@
         when(mRingerModeLiveData.getValue()).thenReturn(-1);
         when(mRingerModeInternalLiveData.getValue()).thenReturn(-1);
         when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser());
+        when(mUserTracker.getUserContext()).thenReturn(mContext);
         // Enable group volume adjustments
         mContext.getOrCreateTestableResources().addOverride(
                 com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions,
@@ -127,8 +129,8 @@
         mVolumeController = new TestableVolumeDialogControllerImpl(mContext,
                 mBroadcastDispatcher, mRingerModeTracker, mThreadFactory, mAudioManager,
                 mNotificationManager, mVibrator, mIAudioService, mAccessibilityManager,
-                mPackageManager, mWakefullnessLifcycle, mCaptioningManager, mKeyguardManager,
-                mActivityManager, mUserTracker, mDumpManager, mCallback);
+                mPackageManager, mWakefullnessLifcycle, mKeyguardManager,
+                mActivityManager, mUserTracker, mDumpManager, mHandler, mCallback);
         mVolumeController.setEnableDialogs(true, true);
     }
 
@@ -219,6 +221,11 @@
         verify(mRingerModeInternalLiveData).observeForever(any());
     }
 
+    @Test
+    public void testAddCallbackWithUserTracker() {
+        verify(mUserTracker).addCallback(any(UserTracker.Callback.class), any(Executor.class));
+    }
+
     static class TestableVolumeDialogControllerImpl extends VolumeDialogControllerImpl {
         private final WakefulnessLifecycle.Observer mWakefullessLifecycleObserver;
 
@@ -234,16 +241,16 @@
                 AccessibilityManager accessibilityManager,
                 PackageManager packageManager,
                 WakefulnessLifecycle wakefulnessLifecycle,
-                CaptioningManager captioningManager,
                 KeyguardManager keyguardManager,
                 ActivityManager activityManager,
                 UserTracker userTracker,
                 DumpManager dumpManager,
+                Handler mainHandler,
                 C callback) {
             super(context, broadcastDispatcher, ringerModeTracker, theadFactory, audioManager,
                     notificationManager, optionalVibrator, iAudioService, accessibilityManager,
-                    packageManager, wakefulnessLifecycle, captioningManager, keyguardManager,
-                    activityManager, userTracker, dumpManager);
+                    packageManager, wakefulnessLifecycle, keyguardManager,
+                    activityManager, userTracker, dumpManager, mainHandler);
             mCallbacks = callback;
 
             ArgumentCaptor<WakefulnessLifecycle.Observer> observerCaptor =
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardSurfaceBehindRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardSurfaceBehindRepository.kt
new file mode 100644
index 0000000..823f29a
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardSurfaceBehindRepository.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.data.repository
+
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
+
+class FakeKeyguardSurfaceBehindRepository : KeyguardSurfaceBehindRepository {
+    private val _isAnimatingSurface = MutableStateFlow(false)
+    override val isAnimatingSurface = _isAnimatingSurface.asStateFlow()
+
+    override fun setAnimatingSurface(animating: Boolean) {
+        _isAnimatingSurface.value = animating
+    }
+}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorFactory.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorFactory.kt
index 312ade5..23faaf3 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorFactory.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorFactory.kt
@@ -18,6 +18,8 @@
 
 import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
 import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
+import com.android.systemui.util.mockito.mock
+import dagger.Lazy
 import kotlinx.coroutines.CoroutineScope
 
 /**
@@ -30,18 +32,36 @@
     fun create(
         scope: CoroutineScope,
         repository: KeyguardTransitionRepository = FakeKeyguardTransitionRepository(),
+        keyguardInteractor: KeyguardInteractor =
+            KeyguardInteractorFactory.create().keyguardInteractor,
+        fromLockscreenTransitionInteractor: Lazy<FromLockscreenTransitionInteractor> = Lazy {
+            mock<FromLockscreenTransitionInteractor>()
+        },
+        fromPrimaryBouncerTransitionInteractor: Lazy<FromPrimaryBouncerTransitionInteractor> =
+            Lazy {
+                mock<FromPrimaryBouncerTransitionInteractor>()
+            },
     ): WithDependencies {
         return WithDependencies(
             repository = repository,
+            keyguardInteractor = keyguardInteractor,
+            fromLockscreenTransitionInteractor = fromLockscreenTransitionInteractor,
+            fromPrimaryBouncerTransitionInteractor = fromPrimaryBouncerTransitionInteractor,
             KeyguardTransitionInteractor(
                 scope = scope,
                 repository = repository,
+                keyguardInteractor = { keyguardInteractor },
+                fromLockscreenTransitionInteractor = fromLockscreenTransitionInteractor,
+                fromPrimaryBouncerTransitionInteractor = fromPrimaryBouncerTransitionInteractor,
             )
         )
     }
 
     data class WithDependencies(
         val repository: KeyguardTransitionRepository,
+        val keyguardInteractor: KeyguardInteractor,
+        val fromLockscreenTransitionInteractor: Lazy<FromLockscreenTransitionInteractor>,
+        val fromPrimaryBouncerTransitionInteractor: Lazy<FromPrimaryBouncerTransitionInteractor>,
         val keyguardTransitionInteractor: KeyguardTransitionInteractor,
     )
 }
diff --git a/packages/VpnDialogs/res/values-pt-rPT/strings.xml b/packages/VpnDialogs/res/values-pt-rPT/strings.xml
index 95f7c1a..c1be1d1 100644
--- a/packages/VpnDialogs/res/values-pt-rPT/strings.xml
+++ b/packages/VpnDialogs/res/values-pt-rPT/strings.xml
@@ -17,8 +17,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="prompt" msgid="3183836924226407828">"Pedido de ligação"</string>
-    <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> pretende configurar uma ligação VPN que lhe permita monitorizar o tráfego de rede. Aceite apenas se confiar na fonte. &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt; aparece na parte superior do seu ecrã quando a VPN está ativa."</string>
-    <string name="warning" product="tv" msgid="5188957997628124947">"A app <xliff:g id="APP">%s</xliff:g> pretende configurar uma ligação VPN que lhe permita monitorizar o tráfego de rede. Aceite apenas se confiar na origem. &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt; aparece no ecrã quando a VPN está ativa."</string>
+    <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> quer configurar uma ligação VPN que lhe permita monitorizar o tráfego de rede. Aceite apenas se confiar na fonte. &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt; aparece na parte superior do seu ecrã quando a VPN está ativa."</string>
+    <string name="warning" product="tv" msgid="5188957997628124947">"A app <xliff:g id="APP">%s</xliff:g> quer configurar uma ligação VPN que lhe permita monitorizar o tráfego de rede. Aceite apenas se confiar na origem. &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt; aparece no ecrã quando a VPN está ativa."</string>
     <string name="legacy_title" msgid="192936250066580964">"A VPN está ligada"</string>
     <string name="session" msgid="6470628549473641030">"Sessão"</string>
     <string name="duration" msgid="3584782459928719435">"Duração:"</string>
diff --git a/packages/VpnDialogs/res/values-zh-rHK/strings.xml b/packages/VpnDialogs/res/values-zh-rHK/strings.xml
index f3abf3c..f4d06e2 100644
--- a/packages/VpnDialogs/res/values-zh-rHK/strings.xml
+++ b/packages/VpnDialogs/res/values-zh-rHK/strings.xml
@@ -17,8 +17,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="prompt" msgid="3183836924226407828">"連線要求"</string>
-    <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> 要求設定 VPN 連線以監控網絡流量。除非您信任要求來源,否則請勿隨意接受要求。&lt;br /&gt; &lt;br /&gt;VPN 啟用時,畫面頂端會顯示 &lt;img src=vpn_icon /&gt;。"</string>
-    <string name="warning" product="tv" msgid="5188957997628124947">"「<xliff:g id="APP">%s</xliff:g>」要求設定 VPN 連線以監控網絡流量。除非您信任要求來源,否則請勿隨意接受要求。VPN 啟用時,畫面會顯示 &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt;。"</string>
+    <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> 要求設定 VPN 連線以監控網絡流量。除非你信任要求來源,否則請勿隨意接受要求。&lt;br /&gt; &lt;br /&gt;VPN 啟用時,畫面頂端會顯示 &lt;img src=vpn_icon /&gt;。"</string>
+    <string name="warning" product="tv" msgid="5188957997628124947">"「<xliff:g id="APP">%s</xliff:g>」要求設定 VPN 連線以監控網絡流量。除非你信任要求來源,否則請勿隨意接受要求。VPN 啟用時,畫面會顯示 &lt;br /&gt; &lt;br /&gt; &lt;img src=vpn_icon /&gt;。"</string>
     <string name="legacy_title" msgid="192936250066580964">"VPN 已連線"</string>
     <string name="session" msgid="6470628549473641030">"時段:"</string>
     <string name="duration" msgid="3584782459928719435">"持續時間︰"</string>
@@ -26,8 +26,8 @@
     <string name="data_received" msgid="4062776929376067820">"已接收:"</string>
     <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> 位元組 / <xliff:g id="NUMBER_1">%2$s</xliff:g> 封包"</string>
     <string name="always_on_disconnected_title" msgid="1906740176262776166">"無法連線至保持開啟的 VPN"</string>
-    <string name="always_on_disconnected_message" msgid="555634519845992917">"<xliff:g id="VPN_APP_0">%1$s</xliff:g> 已設定為隨時保持連線,但目前無法連線。在重新連線至 <xliff:g id="VPN_APP_1">%1$s</xliff:g> 前,您的手機將會使用公共網絡。"</string>
-    <string name="always_on_disconnected_message_lockdown" msgid="4232225539869452120">"<xliff:g id="VPN_APP">%1$s</xliff:g> 已設定為隨時保持連線,但目前無法連線。在重新連線至 VPN 前,您將無法連線至網絡。"</string>
+    <string name="always_on_disconnected_message" msgid="555634519845992917">"<xliff:g id="VPN_APP_0">%1$s</xliff:g> 已設定為隨時保持連線,但目前無法連線。在重新連線至 <xliff:g id="VPN_APP_1">%1$s</xliff:g> 前,你的手機將會使用公共網絡。"</string>
+    <string name="always_on_disconnected_message_lockdown" msgid="4232225539869452120">"<xliff:g id="VPN_APP">%1$s</xliff:g> 已設定為隨時保持連線,但目前無法連線。在重新連線至 VPN 前,你將無法連線至網絡。"</string>
     <string name="always_on_disconnected_message_separator" msgid="3310614409322581371">" "</string>
     <string name="always_on_disconnected_message_settings_link" msgid="6172280302829992412">"變更 VPN 設定"</string>
     <string name="configure" msgid="4905518375574791375">"設定"</string>
diff --git a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-am/strings.xml b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-am/strings.xml
index 648e1d4..b437b69 100644
--- a/packages/overlays/AvoidAppsInCutoutOverlay/res/values-am/strings.xml
+++ b/packages/overlays/AvoidAppsInCutoutOverlay/res/values-am/strings.xml
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"ከተቆረጠው አከባቢ በታች የመተግበሪያዎች ምስልን ስራ"</string>
+    <string name="display_cutout_emulation_overlay" msgid="3814493834951357513">"ከተቆረጠው አከባቢ በታች የመተግበሪያዎች ምስልን ሥራ"</string>
 </resources>
diff --git a/packages/overlays/NoCutoutOverlay/res/values-mk/strings.xml b/packages/overlays/NoCutoutOverlay/res/values-mk/strings.xml
index 505c205..0c821f2 100644
--- a/packages/overlays/NoCutoutOverlay/res/values-mk/strings.xml
+++ b/packages/overlays/NoCutoutOverlay/res/values-mk/strings.xml
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="display_cutout_emulation_overlay" msgid="9031691255599853162">"Сокриј"</string>
+    <string name="display_cutout_emulation_overlay" msgid="9031691255599853162">"Скриј"</string>
 </resources>
diff --git a/rs/jni/Android.bp b/rs/jni/Android.bp
index 8a6897c..f732c21 100644
--- a/rs/jni/Android.bp
+++ b/rs/jni/Android.bp
@@ -22,6 +22,7 @@
 cc_library_shared {
     name: "librs_jni",
 
+    cpp_std: "gnu++2b",
     srcs: ["android_renderscript_RenderScript.cpp"],
 
     shared_libs: [
diff --git a/services/accessibility/TEST_MAPPING b/services/accessibility/TEST_MAPPING
index 2b8fee3..299d33f 100644
--- a/services/accessibility/TEST_MAPPING
+++ b/services/accessibility/TEST_MAPPING
@@ -4,9 +4,6 @@
       "name": "CtsAccessibilityServiceTestCases",
       "options": [
         {
-          "include-annotation": "android.platform.test.annotations.Presubmit"
-        },
-        {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
         }
       ]
@@ -15,9 +12,6 @@
       "name": "CtsAccessibilityTestCases",
       "options": [
         {
-          "include-annotation": "android.platform.test.annotations.Presubmit"
-        },
-        {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
         }
       ]
@@ -26,9 +20,6 @@
       "name": "CtsUiAutomationTestCases",
       "options": [
         {
-          "include-annotation": "android.platform.test.annotations.Presubmit"
-        },
-        {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
         }
       ]
@@ -48,20 +39,15 @@
       "name": "FrameworksCoreTests",
       "options": [
         {
-          "include-filter": "com.android.internal.accessibility"
+          "include-filter": "android.accessibilityservice"
         },
         {
-          "exclude-annotation": "androidx.test.filters.FlakyTest"
-        }
-      ]
-    },
-    {
-      "name": "FrameworksCoreTests",
-      "options": [
-        {
           "include-filter": "android.view.accessibility"
         },
         {
+          "include-filter": "com.android.internal.accessibility"
+        },
+        {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
         }
       ]
@@ -92,15 +78,13 @@
       "name": "FrameworksCoreTests",
       "options": [
         {
-          "include-filter": "com.android.internal.accessibility"
-        }
-      ]
-    },
-    {
-      "name": "FrameworksCoreTests",
-      "options": [
+          "include-filter": "android.accessibilityservice"
+        },
         {
           "include-filter": "android.view.accessibility"
+        },
+        {
+          "include-filter": "com.android.internal.accessibility"
         }
       ]
     }
diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
index e89e33f..05b6eb4 100644
--- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
+++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
@@ -319,7 +319,11 @@
 
         void unbindImeLocked(AbstractAccessibilityServiceConnection connection);
 
-        void attachAccessibilityOverlayToDisplay(int displayId, SurfaceControl sc);
+        void attachAccessibilityOverlayToDisplay(
+                int interactionId,
+                int displayId,
+                SurfaceControl sc,
+                IAccessibilityInteractionConnectionCallback callback);
 
     }
 
@@ -451,7 +455,12 @@
         if (svcConnTracingEnabled()) {
             logTraceSvcConn("setOnKeyEventResult", "handled=" + handled + ";sequence=" + sequence);
         }
-        mSystemSupport.getKeyEventDispatcher().setOnKeyEventResult(this, handled, sequence);
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSystemSupport.getKeyEventDispatcher().setOnKeyEventResult(this, handled, sequence);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
     @Override
@@ -478,6 +487,10 @@
         if (svcConnTracingEnabled()) {
             logTraceSvcConn("setServiceInfo", "info=" + info);
         }
+        if (!info.isWithinParcelableSize()) {
+            throw new IllegalStateException(
+                    "Cannot update service info: size is larger than safe parcelable limits.");
+        }
         final long identity = Binder.clearCallingIdentity();
         try {
             synchronized (mLock) {
@@ -543,24 +556,30 @@
             if (!mSecurityPolicy.checkAccessibilityAccess(this)) {
                 return null;
             }
-            final AccessibilityWindowInfo.WindowListSparseArray allWindows =
-                    new AccessibilityWindowInfo.WindowListSparseArray();
-            final ArrayList<Integer> displayList = mA11yWindowManager.getDisplayListLocked(
-                    mDisplayTypes);
-            final int displayListCounts = displayList.size();
-            if (displayListCounts > 0) {
-                for (int i = 0; i < displayListCounts; i++) {
-                    final int displayId = displayList.get(i);
-                    ensureWindowsAvailableTimedLocked(displayId);
 
-                    final List<AccessibilityWindowInfo> windowList = getWindowsByDisplayLocked(
-                            displayId);
-                    if (windowList != null) {
-                        allWindows.put(displayId, windowList);
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                final AccessibilityWindowInfo.WindowListSparseArray allWindows =
+                        new AccessibilityWindowInfo.WindowListSparseArray();
+                final ArrayList<Integer> displayList = mA11yWindowManager.getDisplayListLocked(
+                        mDisplayTypes);
+                final int displayListCounts = displayList.size();
+                if (displayListCounts > 0) {
+                    for (int i = 0; i < displayListCounts; i++) {
+                        final int displayId = displayList.get(i);
+                        ensureWindowsAvailableTimedLocked(displayId);
+
+                        final List<AccessibilityWindowInfo> windowList = getWindowsByDisplayLocked(
+                                displayId);
+                        if (windowList != null) {
+                            allWindows.put(displayId, windowList);
+                        }
                     }
                 }
+                return allWindows;
+            } finally {
+                Binder.restoreCallingIdentity(identity);
             }
-            return allWindows;
         }
     }
 
@@ -592,14 +611,19 @@
             if (!mSecurityPolicy.checkAccessibilityAccess(this)) {
                 return null;
             }
-            AccessibilityWindowInfo window =
-                    mA11yWindowManager.findA11yWindowInfoByIdLocked(windowId);
-            if (window != null) {
-                AccessibilityWindowInfo windowClone = AccessibilityWindowInfo.obtain(window);
-                windowClone.setConnectionId(mId);
-                return windowClone;
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                AccessibilityWindowInfo window =
+                        mA11yWindowManager.findA11yWindowInfoByIdLocked(windowId);
+                if (window != null) {
+                    AccessibilityWindowInfo windowClone = AccessibilityWindowInfo.obtain(window);
+                    windowClone.setConnectionId(mId);
+                    return windowClone;
+                }
+                return null;
+            } finally {
+                Binder.restoreCallingIdentity(identity);
             }
-            return null;
         }
     }
 
@@ -1042,7 +1066,12 @@
                 return false;
             }
         }
-        return mSystemActionPerformer.performSystemAction(action);
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            return mSystemActionPerformer.performSystemAction(action);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
     @Override
@@ -1055,7 +1084,12 @@
                 return Collections.emptyList();
             }
         }
-        return mSystemActionPerformer.getSystemActions();
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            return mSystemActionPerformer.getSystemActions();
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
     @Override
@@ -1066,12 +1100,17 @@
         if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
             return false;
         }
-        if (isCapturingFingerprintGestures()) {
-            FingerprintGestureDispatcher dispatcher =
-                    mSystemSupport.getFingerprintGestureDispatcher();
-            return (dispatcher != null) && dispatcher.isFingerprintGestureDetectionAvailable();
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            if (isCapturingFingerprintGestures()) {
+                FingerprintGestureDispatcher dispatcher =
+                        mSystemSupport.getFingerprintGestureDispatcher();
+                return (dispatcher != null) && dispatcher.isFingerprintGestureDetectionAvailable();
+            }
+            return false;
+        } finally {
+            Binder.restoreCallingIdentity(identity);
         }
-        return false;
     }
 
     @Nullable
@@ -1281,7 +1320,12 @@
             logTraceSvcConn("setMagnificationCallbackEnabled",
                     "displayId=" + displayId + ";enabled=" + enabled);
         }
-        mInvocationHandler.setMagnificationCallbackEnabled(displayId, enabled);
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mInvocationHandler.setMagnificationCallbackEnabled(displayId, enabled);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
     public boolean isMagnificationCallbackEnabled(int displayId) {
@@ -1293,7 +1337,12 @@
         if (svcConnTracingEnabled()) {
             logTraceSvcConn("setSoftKeyboardCallbackEnabled", "enabled=" + enabled);
         }
-        mInvocationHandler.setSoftKeyboardCallbackEnabled(enabled);
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mInvocationHandler.setSoftKeyboardCallbackEnabled(enabled);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
     @Override
@@ -1330,15 +1379,20 @@
             return;
         }
 
-        RemoteAccessibilityConnection connection = mA11yWindowManager.getConnectionLocked(
-                mSystemSupport.getCurrentUserIdLocked(),
-                resolveAccessibilityWindowIdLocked(accessibilityWindowId));
-        if (connection == null) {
-            callback.sendTakeScreenshotOfWindowError(
-                    AccessibilityService.ERROR_TAKE_SCREENSHOT_INVALID_WINDOW, interactionId);
-            return;
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            RemoteAccessibilityConnection connection = mA11yWindowManager.getConnectionLocked(
+                    mSystemSupport.getCurrentUserIdLocked(),
+                    resolveAccessibilityWindowIdLocked(accessibilityWindowId));
+            if (connection == null) {
+                callback.sendTakeScreenshotOfWindowError(
+                        AccessibilityService.ERROR_TAKE_SCREENSHOT_INVALID_WINDOW, interactionId);
+                return;
+            }
+            connection.getRemote().takeScreenshotOfWindow(interactionId, listener, callback);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
         }
-        connection.getRemote().takeScreenshotOfWindow(interactionId, listener, callback);
     }
 
     @Override
@@ -1527,7 +1581,12 @@
             logTraceSvcConn("getOverlayWindowToken", "displayId=" + displayId);
         }
         synchronized (mLock) {
-            return mOverlayWindowTokens.get(displayId);
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                return mOverlayWindowTokens.get(displayId);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
         }
     }
 
@@ -1543,7 +1602,12 @@
             logTraceSvcConn("getWindowIdForLeashToken", "token=" + token);
         }
         synchronized (mLock) {
-            return mA11yWindowManager.getWindowIdLocked(token);
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                return mA11yWindowManager.getWindowIdLocked(token);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
         }
     }
 
@@ -2390,7 +2454,12 @@
             logTraceSvcConn("setGestureDetectionPassthroughRegion",
                     "displayId=" + displayId + ";region=" + region);
         }
-        mSystemSupport.setGestureDetectionPassthroughRegion(displayId, region);
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSystemSupport.setGestureDetectionPassthroughRegion(displayId, region);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
     @Override
@@ -2399,7 +2468,12 @@
             logTraceSvcConn("setTouchExplorationPassthroughRegion",
                     "displayId=" + displayId + ";region=" + region);
         }
-        mSystemSupport.setTouchExplorationPassthroughRegion(displayId, region);
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSystemSupport.setTouchExplorationPassthroughRegion(displayId, region);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
     @Override
@@ -2428,13 +2502,20 @@
     @Override
     public void logTrace(long timestamp, String where, long loggingTypes, String callingParams,
             int processId, long threadId, int callingUid, Bundle callingStack) {
-        if (mTrace.isA11yTracingEnabledForTypes(loggingTypes)) {
-            ArrayList<StackTraceElement> list =
-                    (ArrayList<StackTraceElement>) callingStack.getSerializable(CALL_STACK, java.util.ArrayList.class);
-            HashSet<String> ignoreList =
-                    (HashSet<String>) callingStack.getSerializable(IGNORE_CALL_STACK, java.util.HashSet.class);
-            mTrace.logTrace(timestamp, where, loggingTypes, callingParams, processId, threadId,
-                    callingUid, list.toArray(new StackTraceElement[list.size()]), ignoreList);
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            if (mTrace.isA11yTracingEnabledForTypes(loggingTypes)) {
+                ArrayList<StackTraceElement> list =
+                        (ArrayList<StackTraceElement>) callingStack.getSerializable(CALL_STACK,
+                                java.util.ArrayList.class);
+                HashSet<String> ignoreList =
+                        (HashSet<String>) callingStack.getSerializable(IGNORE_CALL_STACK,
+                                java.util.HashSet.class);
+                mTrace.logTrace(timestamp, where, loggingTypes, callingParams, processId, threadId,
+                        callingUid, list.toArray(new StackTraceElement[list.size()]), ignoreList);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(identity);
         }
     }
 
@@ -2473,9 +2554,15 @@
         mTrace.logTrace(TRACE_WM + "." + methodName, FLAGS_WINDOW_MANAGER_INTERNAL, params);
     }
 
+    @Override
     public void setServiceDetectsGesturesEnabled(int displayId, boolean mode) {
-        mServiceDetectsGestures.put(displayId, mode);
-        mSystemSupport.setServiceDetectsGesturesEnabled(displayId, mode);
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mServiceDetectsGestures.put(displayId, mode);
+            mSystemSupport.setServiceDetectsGesturesEnabled(displayId, mode);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
     public boolean isServiceDetectsGesturesEnabled(int displayId) {
@@ -2485,29 +2572,60 @@
         return false;
     }
 
+    @Override
     public void requestTouchExploration(int displayId) {
-        mSystemSupport.requestTouchExploration(displayId);
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSystemSupport.requestTouchExploration(displayId);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
+    @Override
     public void requestDragging(int displayId, int pointerId) {
-        mSystemSupport.requestDragging(displayId, pointerId);
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSystemSupport.requestDragging(displayId, pointerId);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
+    @Override
     public void requestDelegating(int displayId) {
-        mSystemSupport.requestDelegating(displayId);
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSystemSupport.requestDelegating(displayId);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
+    @Override
     public void onDoubleTap(int displayId) {
-        mSystemSupport.onDoubleTap(displayId);
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSystemSupport.onDoubleTap(displayId);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
+    @Override
     public void onDoubleTapAndHold(int displayId) {
-        mSystemSupport.onDoubleTapAndHold(displayId);
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSystemSupport.onDoubleTapAndHold(displayId);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
     /**
      * Sets the scaling factor for animations.
      */
+    @Override
     public void setAnimationScale(float scale) {
         final long identity = Binder.clearCallingIdentity();
         try {
@@ -2540,26 +2658,49 @@
     }
 
     @Override
-    public void attachAccessibilityOverlayToDisplay(int displayId, SurfaceControl sc) {
-        mSystemSupport.attachAccessibilityOverlayToDisplay(displayId, sc);
+    public void attachAccessibilityOverlayToDisplay(
+            int interactionId,
+            int displayId,
+            SurfaceControl sc,
+            IAccessibilityInteractionConnectionCallback callback) {
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSystemSupport.attachAccessibilityOverlayToDisplay(
+                    interactionId, displayId, sc, callback);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
     @Override
-    public void attachAccessibilityOverlayToWindow(int accessibilityWindowId, SurfaceControl sc)
+    public void attachAccessibilityOverlayToWindow(
+            int interactionId,
+            int accessibilityWindowId,
+            SurfaceControl sc,
+            IAccessibilityInteractionConnectionCallback callback)
             throws RemoteException {
-        SurfaceControl.Transaction t = new SurfaceControl.Transaction();
-        t.setTrustedOverlay(sc, true).apply();
-        t.close();
-        synchronized (mLock) {
-            RemoteAccessibilityConnection connection =
-                    mA11yWindowManager.getConnectionLocked(
-                            mSystemSupport.getCurrentUserIdLocked(),
-                            resolveAccessibilityWindowIdLocked(accessibilityWindowId));
-            if (connection == null) {
-                Slog.e(LOG_TAG, "unable to get remote accessibility connection.");
-                return;
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+            t.setTrustedOverlay(sc, true).apply();
+            t.close();
+            synchronized (mLock) {
+                RemoteAccessibilityConnection connection =
+                        mA11yWindowManager.getConnectionLocked(
+                                mSystemSupport.getCurrentUserIdLocked(),
+                                resolveAccessibilityWindowIdLocked(accessibilityWindowId));
+                if (connection == null) {
+                    callback.sendAttachOverlayResult(
+                            AccessibilityService.OVERLAY_RESULT_INVALID, interactionId);
+                    return;
+                }
+                connection
+                        .getRemote()
+                        .attachAccessibilityOverlayToWindow(sc, interactionId, callback);
             }
-            connection.getRemote().attachAccessibilityOverlayToWindow(sc);
+
+        } finally {
+            Binder.restoreCallingIdentity(identity);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java
index 8e7d277..f3a540b 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java
@@ -40,6 +40,7 @@
 import com.android.server.LocalServices;
 import com.android.server.accessibility.gestures.TouchExplorer;
 import com.android.server.accessibility.magnification.FullScreenMagnificationGestureHandler;
+import com.android.server.accessibility.magnification.FullScreenMagnificationVibrationHelper;
 import com.android.server.accessibility.magnification.MagnificationGestureHandler;
 import com.android.server.accessibility.magnification.WindowMagnificationGestureHandler;
 import com.android.server.accessibility.magnification.WindowMagnificationPromptController;
@@ -654,11 +655,14 @@
         } else {
             final Context uiContext = displayContext.createWindowContext(
                     TYPE_MAGNIFICATION_OVERLAY, null /* options */);
+            FullScreenMagnificationVibrationHelper fullScreenMagnificationVibrationHelper =
+                    new FullScreenMagnificationVibrationHelper(uiContext);
             magnificationGestureHandler = new FullScreenMagnificationGestureHandler(uiContext,
                     mAms.getMagnificationController().getFullScreenMagnificationController(),
                     mAms.getTraceManager(),
                     mAms.getMagnificationController(), detectControlGestures, triggerable,
-                    new WindowMagnificationPromptController(displayContext, mUserId), displayId);
+                    new WindowMagnificationPromptController(displayContext, mUserId), displayId,
+                    fullScreenMagnificationVibrationHelper);
         }
         return magnificationGestureHandler;
     }
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index fdb28ba..cbf4cce 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -74,6 +74,7 @@
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManagerInternal;
+import android.content.pm.ParceledListSlice;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
 import android.database.ContentObserver;
@@ -130,6 +131,7 @@
 import android.view.accessibility.AccessibilityWindowAttributes;
 import android.view.accessibility.AccessibilityWindowInfo;
 import android.view.accessibility.IAccessibilityInteractionConnection;
+import android.view.accessibility.IAccessibilityInteractionConnectionCallback;
 import android.view.accessibility.IAccessibilityManager;
 import android.view.accessibility.IAccessibilityManagerClient;
 import android.view.accessibility.IWindowMagnificationConnection;
@@ -686,6 +688,37 @@
         }
     }
 
+    private void onPackageRemovedLocked(String packageName) {
+        final AccessibilityUserState userState = getCurrentUserState();
+        final Predicate<ComponentName> filter =
+                component -> component != null && component.getPackageName().equals(
+                        packageName);
+        userState.mBindingServices.removeIf(filter);
+        userState.mCrashedServices.removeIf(filter);
+        final Iterator<ComponentName> it = userState.mEnabledServices.iterator();
+        boolean anyServiceRemoved = false;
+        while (it.hasNext()) {
+            final ComponentName comp = it.next();
+            final String compPkg = comp.getPackageName();
+            if (compPkg.equals(packageName)) {
+                it.remove();
+                userState.mTouchExplorationGrantedServices.remove(comp);
+                anyServiceRemoved = true;
+            }
+        }
+        if (anyServiceRemoved) {
+            // Update the enabled services setting.
+            persistComponentNamesToSettingLocked(
+                    Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
+                    userState.mEnabledServices, mCurrentUserId);
+            // Update the touch exploration granted services setting.
+            persistComponentNamesToSettingLocked(
+                    Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
+                    userState.mTouchExplorationGrantedServices, mCurrentUserId);
+            onUserStateChangedLocked(userState);
+        }
+    }
+
     private void registerBroadcastReceivers() {
         PackageMonitor monitor = new PackageMonitor() {
             @Override
@@ -758,34 +791,7 @@
                     if (userId != mCurrentUserId) {
                         return;
                     }
-                    final AccessibilityUserState userState = getUserStateLocked(userId);
-                    final Predicate<ComponentName> filter =
-                            component -> component != null && component.getPackageName().equals(
-                                    packageName);
-                    userState.mBindingServices.removeIf(filter);
-                    userState.mCrashedServices.removeIf(filter);
-                    final Iterator<ComponentName> it = userState.mEnabledServices.iterator();
-                    boolean anyServiceRemoved = false;
-                    while (it.hasNext()) {
-                        final ComponentName comp = it.next();
-                        final String compPkg = comp.getPackageName();
-                        if (compPkg.equals(packageName)) {
-                            it.remove();
-                            userState.mTouchExplorationGrantedServices.remove(comp);
-                            anyServiceRemoved = true;
-                        }
-                    }
-                    if (anyServiceRemoved) {
-                        // Update the enabled services setting.
-                        persistComponentNamesToSettingLocked(
-                                Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
-                                userState.mEnabledServices, userId);
-                        // Update the touch exploration granted services setting.
-                        persistComponentNamesToSettingLocked(
-                                Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
-                                userState.mTouchExplorationGrantedServices, userId);
-                        onUserStateChangedLocked(userState);
-                    }
+                    onPackageRemovedLocked(packageName);
                 }
             }
 
@@ -848,6 +854,16 @@
                         }
                     }
                 }
+
+                @Override
+                public void onPackageRemoved(String packageName, int uid) {
+                    final int userId = UserHandle.getUserId(uid);
+                    synchronized (mLock) {
+                        if (userId == mCurrentUserId) {
+                            onPackageRemovedLocked(packageName);
+                        }
+                    }
+                }
             });
         }
 
@@ -944,7 +960,13 @@
         final ComponentName menuToMigrate =
                 AccessibilityUtils.getAccessibilityMenuComponentToMigrate(mPackageManager, userId);
         if (menuToMigrate != null) {
-            mPackageManager.setComponentEnabledSetting(
+            // PackageManager#setComponentEnabledSetting disables the component for only the user
+            // linked to PackageManager's context, but mPackageManager is linked to the system user,
+            // so grab a new PackageManager for the current user to support secondary users.
+            final PackageManager userPackageManager =
+                    mContext.createContextAsUser(UserHandle.of(userId), /* flags = */ 0)
+                            .getPackageManager();
+            userPackageManager.setComponentEnabledSetting(
                     menuToMigrate,
                     PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                     PackageManager.DONT_KILL_APP);
@@ -1230,7 +1252,8 @@
     }
 
     @Override
-    public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(int userId) {
+    public ParceledListSlice<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(
+            int userId) {
         if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_MANAGER)) {
             mTraceManager.logTrace(LOG_TAG + ".getInstalledAccessibilityServiceList",
                     FLAGS_ACCESSIBILITY_MANAGER, "userId=" + userId);
@@ -1242,8 +1265,9 @@
             final int deviceId = mProxyManager.getFirstDeviceIdForUidLocked(
                     Binder.getCallingUid());
             if (mProxyManager.isProxyedDeviceId(deviceId)) {
-                return mProxyManager.getInstalledAndEnabledServiceInfosLocked(
-                        AccessibilityServiceInfo.FEEDBACK_ALL_MASK, deviceId);
+                return new ParceledListSlice<>(
+                        mProxyManager.getInstalledAndEnabledServiceInfosLocked(
+                                AccessibilityServiceInfo.FEEDBACK_ALL_MASK, deviceId));
             }
             // We treat calls from a profile as if made by its parent as profiles
             // share the accessibility state of the parent. The call below
@@ -1255,7 +1279,7 @@
         }
 
         if (Binder.getCallingPid() == OWN_PROCESS_ID) {
-            return serviceInfos;
+            return new ParceledListSlice<>(serviceInfos);
         }
         final PackageManagerInternal pm = LocalServices.getService(
                 PackageManagerInternal.class);
@@ -1267,7 +1291,7 @@
                 serviceInfos.remove(i);
             }
         }
-        return serviceInfos;
+        return new ParceledListSlice<>(serviceInfos);
     }
 
     @Override
@@ -1831,6 +1855,9 @@
             // find out a way to detect the device finished the OTA and switch the user.
             migrateAccessibilityButtonSettingsIfNecessaryLocked(userState, null,
                     /* restoreFromSdkInt = */0);
+            // Package components are disabled per user, so secondary users also need their migrated
+            // Accessibility Menu component disabled.
+            disableAccessibilityMenuToMigrateIfNeeded();
 
             if (announceNewUser) {
                 // Schedule announcement of the current user if needed.
@@ -1919,7 +1946,7 @@
 
     private int getClientStateLocked(AccessibilityUserState userState) {
         return userState.getClientStateLocked(
-            mUiAutomationManager.isUiAutomationRunningLocked(),
+            mUiAutomationManager.canIntrospect(),
             mTraceManager.getTraceStateForAccessibilityManagerClientState());
     }
 
@@ -2869,7 +2896,7 @@
     }
 
     private void updateAccessibilityEnabledSettingLocked(AccessibilityUserState userState) {
-        final boolean isA11yEnabled = mUiAutomationManager.isUiAutomationRunningLocked()
+        final boolean isA11yEnabled = mUiAutomationManager.canIntrospect()
                 || userState.isHandlingAccessibilityEventsLocked();
         final long identity = Binder.clearCallingIdentity();
         try {
@@ -5317,16 +5344,27 @@
     }
 
     @Override
-    public void attachAccessibilityOverlayToDisplay(int displayId, SurfaceControl sc) {
+    public void attachAccessibilityOverlayToDisplay(
+            int interactionId,
+            int displayId,
+            SurfaceControl sc,
+            IAccessibilityInteractionConnectionCallback callback) {
         mMainHandler.sendMessage(
                 obtainMessage(
                         AccessibilityManagerService::attachAccessibilityOverlayToDisplayInternal,
                         this,
+                        interactionId,
                         displayId,
-                        sc));
+                        sc,
+                        callback));
     }
 
-    void attachAccessibilityOverlayToDisplayInternal(int displayId, SurfaceControl sc) {
+    void attachAccessibilityOverlayToDisplayInternal(
+            int interactionId,
+            int displayId,
+            SurfaceControl sc,
+            IAccessibilityInteractionConnectionCallback callback) {
+        int result;
         if (!mA11yOverlayLayers.contains(displayId)) {
             mA11yOverlayLayers.put(displayId, mWindowManagerService.getA11yOverlayLayer(displayId));
         }
@@ -5334,10 +5372,19 @@
         if (parent == null) {
             Slog.e(LOG_TAG, "Unable to get accessibility overlay SurfaceControl.");
             mA11yOverlayLayers.remove(displayId);
-            return;
+            result = AccessibilityService.OVERLAY_RESULT_INVALID;
+        } else {
+            SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+            t.reparent(sc, parent).setTrustedOverlay(sc, true).apply();
+            t.close();
+            result = AccessibilityService.OVERLAY_RESULT_SUCCESS;
         }
-        SurfaceControl.Transaction t = new SurfaceControl.Transaction();
-        t.reparent(sc, parent).setTrustedOverlay(sc, true).apply();
-        t.close();
+        // Send the result back to the service.
+        try {
+            callback.sendAttachOverlayResult(result, interactionId);
+        } catch (RemoteException re) {
+            Slog.e(LOG_TAG, "Exception while attaching overlay.", re);
+            // the other side will time out
+        }
     }
 }
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java
index 91fe035..9e70073 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java
@@ -158,10 +158,11 @@
                     mSystemSupport.persistComponentNamesToSettingLocked(
                             Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
                             userState.getEnabledServicesLocked(), userState.mUserId);
+
+                    mSystemSupport.onClientChangeLocked(false);
                 } finally {
                     Binder.restoreCallingIdentity(identity);
                 }
-                mSystemSupport.onClientChangeLocked(false);
             }
         }
     }
@@ -285,7 +286,13 @@
             }
             final AccessibilityUserState userState = mUserStateWeakReference.get();
             if (userState == null) return false;
-            return userState.setSoftKeyboardModeLocked(showMode, mComponentName);
+
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                return userState.setSoftKeyboardModeLocked(showMode, mComponentName);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
         }
     }
 
@@ -295,7 +302,12 @@
             logTraceSvcConn("getSoftKeyboardShowMode", "");
         }
         final AccessibilityUserState userState = mUserStateWeakReference.get();
-        return (userState != null) ? userState.getSoftKeyboardShowModeLocked() : 0;
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            return (userState != null) ? userState.getSoftKeyboardShowModeLocked() : 0;
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
     @Override
@@ -363,8 +375,14 @@
             if (!hasRightsToCurrentUserLocked()) {
                 return false;
             }
-            AccessibilityUserState userState = mUserStateWeakReference.get();
-            return (userState != null) && isAccessibilityButtonAvailableLocked(userState);
+
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                AccessibilityUserState userState = mUserStateWeakReference.get();
+                return (userState != null) && isAccessibilityButtonAvailableLocked(userState);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
         }
     }
 
@@ -456,26 +474,32 @@
     public void dispatchGesture(int sequence, ParceledListSlice gestureSteps, int displayId) {
         synchronized (mLock) {
             if (mServiceInterface != null && mSecurityPolicy.canPerformGestures(this)) {
-                MotionEventInjector motionEventInjector =
-                        mSystemSupport.getMotionEventInjectorForDisplayLocked(displayId);
-                if (wmTracingEnabled()) {
-                    logTraceWM("isTouchOrFaketouchDevice", "");
-                }
-                if (motionEventInjector != null
-                        && mWindowManagerService.isTouchOrFaketouchDevice()) {
-                    motionEventInjector.injectEvents(
-                            gestureSteps.getList(), mServiceInterface, sequence, displayId);
-                } else {
-                    try {
-                        if (svcClientTracingEnabled()) {
-                            logTraceSvcClient("onPerformGestureResult", sequence + ", false");
-                        }
-                        mServiceInterface.onPerformGestureResult(sequence, false);
-                    } catch (RemoteException re) {
-                        Slog.e(LOG_TAG, "Error sending motion event injection failure to "
-                                + mServiceInterface, re);
+                final long identity = Binder.clearCallingIdentity();
+                try {
+                    MotionEventInjector motionEventInjector =
+                            mSystemSupport.getMotionEventInjectorForDisplayLocked(displayId);
+                    if (wmTracingEnabled()) {
+                        logTraceWM("isTouchOrFaketouchDevice", "");
                     }
+                    if (motionEventInjector != null
+                            && mWindowManagerService.isTouchOrFaketouchDevice()) {
+                        motionEventInjector.injectEvents(
+                                gestureSteps.getList(), mServiceInterface, sequence, displayId);
+                    } else {
+                        try {
+                            if (svcClientTracingEnabled()) {
+                                logTraceSvcClient("onPerformGestureResult", sequence + ", false");
+                            }
+                            mServiceInterface.onPerformGestureResult(sequence, false);
+                        } catch (RemoteException re) {
+                            Slog.e(LOG_TAG, "Error sending motion event injection failure to "
+                                    + mServiceInterface, re);
+                        }
+                    }
+                } finally {
+                    Binder.restoreCallingIdentity(identity);
                 }
+
             }
         }
     }
@@ -501,10 +525,15 @@
                 return;
             }
 
-            // Sets the appearance data in the A11yUserState.
-            userState.setFocusAppearanceLocked(strokeWidth, color);
-            // Updates the appearance data in the A11yManager.
-            mSystemSupport.onClientChangeLocked(false);
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                // Sets the appearance data in the A11yUserState.
+                userState.setFocusAppearanceLocked(strokeWidth, color);
+                // Updates the appearance data in the A11yManager.
+                mSystemSupport.onClientChangeLocked(false);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
         }
     }
 
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java
index 3b169f8..ab6cc71 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java
@@ -410,9 +410,10 @@
         return mBoundServices;
     }
 
-    int getClientStateLocked(boolean isUiAutomationRunning, int traceClientState) {
+    int getClientStateLocked(boolean uiAutomationCanIntrospect,
+            int traceClientState) {
         int clientState = 0;
-        final boolean a11yEnabled = isUiAutomationRunning
+        final boolean a11yEnabled = uiAutomationCanIntrospect
                 || isHandlingAccessibilityEventsLocked();
         if (a11yEnabled) {
             clientState |= AccessibilityManager.STATE_FLAG_ACCESSIBILITY_ENABLED;
diff --git a/services/accessibility/java/com/android/server/accessibility/ActionReplacingCallback.java b/services/accessibility/java/com/android/server/accessibility/ActionReplacingCallback.java
index c08b6ab..a525e7c 100644
--- a/services/accessibility/java/com/android/server/accessibility/ActionReplacingCallback.java
+++ b/services/accessibility/java/com/android/server/accessibility/ActionReplacingCallback.java
@@ -16,6 +16,7 @@
 
 package com.android.server.accessibility;
 
+import android.accessibilityservice.AccessibilityService;
 import android.os.Binder;
 import android.os.RemoteException;
 import android.util.Slog;
@@ -281,4 +282,11 @@
             info.setDismissable(mNodeWithReplacementActions.isDismissable());
         }
     }
+
+    @Override
+    public void sendAttachOverlayResult(
+            @AccessibilityService.AttachOverlayResult int result, int interactionId)
+            throws RemoteException {
+        mServiceCallback.sendAttachOverlayResult(result, interactionId);
+    }
 }
diff --git a/services/accessibility/java/com/android/server/accessibility/ProxyManager.java b/services/accessibility/java/com/android/server/accessibility/ProxyManager.java
index 70882c6..119f575 100644
--- a/services/accessibility/java/com/android/server/accessibility/ProxyManager.java
+++ b/services/accessibility/java/com/android/server/accessibility/ProxyManager.java
@@ -379,8 +379,8 @@
      */
     public int getStateLocked(int deviceId) {
         int clientState = 0;
-        final boolean automationRunning = mUiAutomationManager.isUiAutomationRunningLocked();
-        if (automationRunning) {
+        final boolean uiAutomationCanIntrospect = mUiAutomationManager.canIntrospect();
+        if (uiAutomationCanIntrospect) {
             clientState |= AccessibilityManager.STATE_FLAG_ACCESSIBILITY_ENABLED;
         }
         for (int i = 0; i < mProxyA11yServiceConnections.size(); i++) {
diff --git a/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java b/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java
index 2f3e4c0..208acdf 100644
--- a/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java
+++ b/services/accessibility/java/com/android/server/accessibility/UiAutomationManager.java
@@ -175,6 +175,10 @@
         return ((mUiAutomationFlags & UiAutomation.FLAG_DONT_USE_ACCESSIBILITY) == 0);
     }
 
+    boolean canIntrospect() {
+        return mUiAutomationService != null;
+    }
+
     boolean isTouchExplorationEnabledLocked() {
         return (mUiAutomationService != null)
                 && mUiAutomationService.mRequestTouchExplorationMode;
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java
index ba3d434..805f6e3 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationController.java
@@ -143,6 +143,8 @@
         private int mIdOfLastServiceToMagnify = INVALID_SERVICE_ID;
         private boolean mMagnificationActivated = false;
 
+        private boolean mZoomedOutFromService = false;
+
         @GuardedBy("mLock") @Nullable private MagnificationThumbnail mMagnificationThumbnail;
 
         DisplayMagnification(int displayId) {
@@ -247,6 +249,31 @@
         }
 
         @GuardedBy("mLock")
+        boolean isAtEdge() {
+            return isAtLeftEdge() || isAtRightEdge() || isAtTopEdge() || isAtBottomEdge();
+        }
+
+        @GuardedBy("mLock")
+        boolean isAtLeftEdge() {
+            return getOffsetX() == getMaxOffsetXLocked();
+        }
+
+        @GuardedBy("mLock")
+        boolean isAtRightEdge() {
+            return getOffsetX() == getMinOffsetXLocked();
+        }
+
+        @GuardedBy("mLock")
+        boolean isAtTopEdge() {
+            return getOffsetY() == getMaxOffsetYLocked();
+        }
+
+        @GuardedBy("mLock")
+        boolean isAtBottomEdge() {
+            return getOffsetY() == getMinOffsetYLocked();
+        }
+
+        @GuardedBy("mLock")
         float getCenterX() {
             return (mMagnificationBounds.width() / 2.0f
                     + mMagnificationBounds.left - getOffsetX()) / getScale();
@@ -521,6 +548,24 @@
             return changed;
         }
 
+        /**
+         * Directly Zooms out the scale to 1f with animating the transition. This method is
+         * triggered only by service automatically, such as when user context changed.
+         */
+        void zoomOutFromService() {
+            setScaleAndCenter(1.0f, Float.NaN, Float.NaN,
+                    transformToStubCallback(true),
+                    AccessibilityManagerService.MAGNIFICATION_GESTURE_HANDLER_ID);
+            mZoomedOutFromService = true;
+        }
+
+        /**
+         * Whether the zooming out is triggered by {@link #zoomOutFromService}.
+         */
+        boolean isZoomedOutFromService() {
+            return mZoomedOutFromService;
+        }
+
         @GuardedBy("mLock")
         boolean reset(boolean animate) {
             return reset(transformToStubCallback(animate));
@@ -595,6 +640,8 @@
                             mIdOfLastServiceToMagnify);
                 });
             }
+            // the zoom scale would be changed so we reset the flag
+            mZoomedOutFromService = false;
             return changed;
         }
 
@@ -951,9 +998,7 @@
             }
 
             if (isAlwaysOnMagnificationEnabled()) {
-                setScaleAndCenter(displayId, 1.0f, Float.NaN, Float.NaN,
-                        true,
-                        AccessibilityManagerService.MAGNIFICATION_GESTURE_HANDLER_ID);
+                zoomOutFromService(displayId);
             } else {
                 reset(displayId, true);
             }
@@ -1118,6 +1163,87 @@
     }
 
     /**
+     * Returns whether the user is at one of the edges (left, right, top, bottom)
+     * of the magnification viewport
+     *
+     * @param displayId
+     * @return if user is at the edge of the view
+     */
+    public boolean isAtEdge(int displayId) {
+        synchronized (mLock) {
+            final DisplayMagnification display = mDisplays.get(displayId);
+            if (display == null) {
+                return false;
+            }
+            return display.isAtEdge();
+        }
+    }
+
+    /**
+     * Returns whether the user is at the left edge of the viewport
+     *
+     * @param displayId
+     * @return if user is at left edge of view
+     */
+    public boolean isAtLeftEdge(int displayId) {
+        synchronized (mLock) {
+            final DisplayMagnification display = mDisplays.get(displayId);
+            if (display == null) {
+                return false;
+            }
+            return display.isAtLeftEdge();
+        }
+    }
+
+    /**
+     * Returns whether the user is at the right edge of the viewport
+     *
+     * @param displayId
+     * @return if user is at right edge of view
+     */
+    public boolean isAtRightEdge(int displayId) {
+        synchronized (mLock) {
+            final DisplayMagnification display = mDisplays.get(displayId);
+            if (display == null) {
+                return false;
+            }
+            return display.isAtRightEdge();
+        }
+    }
+
+    /**
+     * Returns whether the user is at the top edge of the viewport
+     *
+     * @param displayId
+     * @return if user is at top edge of view
+     */
+    public boolean isAtTopEdge(int displayId) {
+        synchronized (mLock) {
+            final DisplayMagnification display = mDisplays.get(displayId);
+            if (display == null) {
+                return false;
+            }
+            return display.isAtTopEdge();
+        }
+    }
+
+    /**
+     * Returns whether the user is at the bottom edge of the viewport
+     *
+     * @param displayId
+     * @return if user is at bottom edge of view
+     */
+    public boolean isAtBottomEdge(int displayId) {
+        synchronized (mLock) {
+            final DisplayMagnification display = mDisplays.get(displayId);
+            if (display == null) {
+                return false;
+            }
+            return display.isAtBottomEdge();
+        }
+    }
+
+    /**
      * Returns the Y offset of the magnification viewport. If an animation
      * is in progress, this reflects the end state of the animation.
      *
@@ -1354,6 +1480,37 @@
     }
 
     /**
+     * Directly Zooms out the scale to 1f with animating the transition. This method is
+     * triggered only by service automatically, such as when user context changed.
+     *
+     * @param displayId The logical display id.
+     */
+    private void zoomOutFromService(int displayId) {
+        synchronized (mLock) {
+            final DisplayMagnification display = mDisplays.get(displayId);
+            if (display == null || !display.isActivated()) {
+                return;
+            }
+            display.zoomOutFromService();
+        }
+    }
+
+    /**
+     * Whether the magnification is zoomed out by {@link #zoomOutFromService(int)}.
+     *
+     * @param displayId The logical display id.
+     */
+    public boolean isZoomedOutFromService(int displayId) {
+        synchronized (mLock) {
+            final DisplayMagnification display = mDisplays.get(displayId);
+            if (display == null || !display.isActivated()) {
+                return false;
+            }
+            return display.isZoomedOutFromService();
+        }
+    }
+
+    /**
      * Resets all displays' magnification if last magnifying service is disabled.
      *
      * @param connectionId
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 038847e..c0967db 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java
@@ -33,6 +33,7 @@
 import static java.util.Arrays.copyOfRange;
 
 import android.accessibilityservice.MagnificationConfig;
+import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.UiContext;
@@ -41,6 +42,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.graphics.PointF;
+import android.graphics.Rect;
 import android.graphics.Region;
 import android.os.Handler;
 import android.os.Looper;
@@ -137,6 +139,7 @@
     @VisibleForTesting final DetectingState mDetectingState;
     @VisibleForTesting final PanningScalingState mPanningScalingState;
     @VisibleForTesting final ViewportDraggingState mViewportDraggingState;
+    @VisibleForTesting final SinglePanningState mSinglePanningState;
 
     private final ScreenStateReceiver mScreenStateReceiver;
     private final WindowMagnificationPromptController mPromptController;
@@ -147,6 +150,20 @@
     private PointerCoords[] mTempPointerCoords;
     private PointerProperties[] mTempPointerProperties;
 
+    @VisibleForTesting static final int OVERSCROLL_NONE = 0;
+    @VisibleForTesting static final int OVERSCROLL_LEFT_EDGE = 1;
+    @VisibleForTesting static final int OVERSCROLL_RIGHT_EDGE = 2;
+    @VisibleForTesting static final int OVERSCROLL_VERTICAL_EDGE = 3;
+
+    @IntDef({
+        OVERSCROLL_NONE,
+        OVERSCROLL_LEFT_EDGE,
+        OVERSCROLL_RIGHT_EDGE,
+        OVERSCROLL_VERTICAL_EDGE
+    })
+    public @interface OverscrollState {}
+
+    @VisibleForTesting boolean mIsSinglePanningEnabled;
     public FullScreenMagnificationGestureHandler(@UiContext Context context,
             FullScreenMagnificationController fullScreenMagnificationController,
             AccessibilityTraceManager trace,
@@ -154,7 +171,8 @@
             boolean detectTripleTap,
             boolean detectShortcutTrigger,
             @NonNull WindowMagnificationPromptController promptController,
-            int displayId) {
+            int displayId,
+            FullScreenMagnificationVibrationHelper fullScreenMagnificationVibrationHelper) {
         super(displayId, detectTripleTap, detectShortcutTrigger, trace, callback);
         if (DEBUG_ALL) {
             Log.i(mLogTag,
@@ -202,6 +220,11 @@
         mDetectingState = new DetectingState(context);
         mViewportDraggingState = new ViewportDraggingState();
         mPanningScalingState = new PanningScalingState(context);
+        mSinglePanningState = new SinglePanningState(context,
+                fullScreenMagnificationVibrationHelper);
+        setSinglePanningEnabled(
+                context.getResources()
+                        .getBoolean(R.bool.config_enable_a11y_magnification_single_panning));
 
         if (mDetectShortcutTrigger) {
             mScreenStateReceiver = new ScreenStateReceiver(context, this);
@@ -213,6 +236,11 @@
         transitionTo(mDetectingState);
     }
 
+    @VisibleForTesting
+    void setSinglePanningEnabled(boolean isEnabled) {
+        mIsSinglePanningEnabled = isEnabled;
+    }
+
     @Override
     void onMotionEventInternal(MotionEvent event, MotionEvent rawEvent, int policyFlags) {
         handleEventWith(mCurrentState, event, rawEvent, policyFlags);
@@ -223,6 +251,7 @@
         // To keep InputEventConsistencyVerifiers within GestureDetectors happy
         mPanningScalingState.mScrollGestureDetector.onTouchEvent(event);
         mPanningScalingState.mScaleGestureDetector.onTouchEvent(event);
+        mSinglePanningState.mScrollGestureDetector.onTouchEvent(event);
 
         try {
             stateHandler.onMotionEvent(event, rawEvent, policyFlags);
@@ -669,7 +698,6 @@
 
         @Override
         public void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags) {
-
             // Ensures that the state at the end of delegation is consistent with the last delegated
             // UP/DOWN event in queue: still delegating if pointer is down, detecting otherwise
             switch (event.getActionMasked()) {
@@ -726,6 +754,8 @@
 
         @VisibleForTesting Handler mHandler = new Handler(Looper.getMainLooper(), this);
 
+        private PointF mFirstPointerDownLocation = new PointF(Float.NaN, Float.NaN);
+
         DetectingState(Context context) {
             mLongTapMinDelay = ViewConfiguration.getLongPressTimeout();
             mMultiTapMaxDelay = ViewConfiguration.getDoubleTapTimeout()
@@ -765,10 +795,11 @@
             cacheDelayedMotionEvent(event, rawEvent, policyFlags);
             switch (event.getActionMasked()) {
                 case MotionEvent.ACTION_DOWN: {
-
                     mLastDetectingDownEventTime = event.getDownTime();
                     mHandler.removeMessages(MESSAGE_TRANSITION_TO_DELEGATING_STATE);
 
+                    mFirstPointerDownLocation.set(event.getX(), event.getY());
+
                     if (!mFullScreenMagnificationController.magnificationRegionContains(
                             mDisplayId, event.getX(), event.getY())) {
 
@@ -800,7 +831,7 @@
                 break;
                 case ACTION_POINTER_DOWN: {
                     if (isActivated() && event.getPointerCount() == 2) {
-                        storeSecondPointerDownLocation(event);
+                        storePointerDownLocation(mSecondPointerDownLocation, event);
                         mHandler.sendEmptyMessageDelayed(MESSAGE_TRANSITION_TO_PANNINGSCALING_STATE,
                                 ViewConfiguration.getTapTimeout());
                     } else {
@@ -815,7 +846,6 @@
                 case ACTION_MOVE: {
                     if (isFingerDown()
                             && distance(mLastDown, /* move */ event) > mSwipeMinDistance) {
-
                         // Swipe detected - transition immediately
 
                         // For convenience, viewport dragging takes precedence
@@ -826,10 +856,18 @@
                         } else if (isActivated() && event.getPointerCount() == 2) {
                             //Primary pointer is swiping, so transit to PanningScalingState
                             transitToPanningScalingStateAndClear();
+                        } else if (mIsSinglePanningEnabled
+                                && isActivated()
+                                && event.getPointerCount() == 1) {
+                            if (overscrollState(event, mFirstPointerDownLocation)
+                                    == OVERSCROLL_VERTICAL_EDGE) {
+                                transitionToDelegatingStateAndClear();
+                            }
+                            transitToSinglePanningStateAndClear();
                         } else {
                             transitionToDelegatingStateAndClear();
                         }
-                    } else if (isActivated() && secondPointerDownValid()
+                    } else if (isActivated() && pointerDownValid(mSecondPointerDownLocation)
                             && distanceClosestPointerToPoint(
                             mSecondPointerDownLocation, /* move */ event) > mSwipeMinDistance) {
                         //Second pointer is swiping, so transit to PanningScalingState
@@ -843,11 +881,9 @@
 
                     if (!mFullScreenMagnificationController.magnificationRegionContains(
                             mDisplayId, event.getX(), event.getY())) {
-
                         transitionToDelegatingStateAndClear();
 
                     } else if (isMultiTapTriggered(3 /* taps */)) {
-
                         onTripleTap(/* up */ event);
 
                     } else if (
@@ -856,7 +892,6 @@
                             //TODO long tap should never happen here
                             && ((timeBetween(mLastDown, mLastUp) >= mLongTapMinDelay)
                                     || (distance(mLastDown, mLastUp) >= mSwipeMinDistance))) {
-
                         transitionToDelegatingStateAndClear();
 
                     }
@@ -865,14 +900,14 @@
             }
         }
 
-        private void storeSecondPointerDownLocation(MotionEvent event) {
+        private void storePointerDownLocation(PointF pointerDownLocation, MotionEvent event) {
             final int index = event.getActionIndex();
-            mSecondPointerDownLocation.set(event.getX(index), event.getY(index));
+            pointerDownLocation.set(event.getX(index), event.getY(index));
         }
 
-        private boolean secondPointerDownValid() {
-            return !(Float.isNaN(mSecondPointerDownLocation.x) && Float.isNaN(
-                    mSecondPointerDownLocation.y));
+        private boolean pointerDownValid(PointF pointerDownLocation) {
+            return !(Float.isNaN(pointerDownLocation.x) && Float.isNaN(
+                    pointerDownLocation.y));
         }
 
         private void transitToPanningScalingStateAndClear() {
@@ -880,6 +915,11 @@
             clear();
         }
 
+        private void transitToSinglePanningStateAndClear() {
+            transitionTo(mSinglePanningState);
+            clear();
+        }
+
         public boolean isMultiTapTriggered(int numTaps) {
 
             // Shortcut acts as the 2 initial taps
@@ -947,6 +987,7 @@
             setShortcutTriggered(false);
             removePendingDelayedMessages();
             clearDelayedMotionEvents();
+            mFirstPointerDownLocation.set(Float.NaN, Float.NaN);
             mSecondPointerDownLocation.set(Float.NaN, Float.NaN);
         }
 
@@ -1061,7 +1102,7 @@
 
             mViewportDraggingState.prepareForZoomInTemporary(shortcutTriggered);
 
-            zoomInTemporary(down.getX(), down.getY());
+            zoomInTemporary(down.getX(), down.getY(), shortcutTriggered);
 
             transitionTo(mViewportDraggingState);
         }
@@ -1118,19 +1159,27 @@
         }
     }
 
-    private void zoomInTemporary(float centerX, float centerY) {
+    private void zoomInTemporary(float centerX, float centerY, boolean shortcutTriggered) {
         final float currentScale = mFullScreenMagnificationController.getScale(mDisplayId);
         final float persistedScale = MathUtils.constrain(
                 mFullScreenMagnificationController.getPersistedScale(mDisplayId),
                 MIN_SCALE, MAX_SCALE);
 
         final boolean isActivated = mFullScreenMagnificationController.isActivated(mDisplayId);
-        final float scale = isActivated ? (currentScale + 1.0f) : persistedScale;
+        final boolean isShortcutTriggered = shortcutTriggered;
+        final boolean isZoomedOutFromService =
+                mFullScreenMagnificationController.isZoomedOutFromService(mDisplayId);
+
+        boolean zoomInWithPersistedScale =
+                !isActivated || isShortcutTriggered || isZoomedOutFromService;
+        final float scale = zoomInWithPersistedScale ?  persistedScale : (currentScale + 1.0f);
         zoomToScale(scale, centerX, centerY);
     }
 
     private void zoomOn(float centerX, float centerY) {
-        if (DEBUG_DETECTING) Slog.i(mLogTag, "zoomOn(" + centerX + ", " + centerY + ")");
+        if (DEBUG_DETECTING) {
+            Slog.i(mLogTag, "zoomOn(" + centerX + ", " + centerY + ")");
+        }
 
         final float scale = MathUtils.constrain(
                 mFullScreenMagnificationController.getPersistedScale(mDisplayId),
@@ -1147,7 +1196,9 @@
     }
 
     private void zoomOff() {
-        if (DEBUG_DETECTING) Slog.i(mLogTag, "zoomOff()");
+        if (DEBUG_DETECTING) {
+            Slog.i(mLogTag, "zoomOff()");
+        }
         mFullScreenMagnificationController.reset(mDisplayId, /* animate */ true);
     }
 
@@ -1165,15 +1216,39 @@
                 + ", mDelegatingState=" + mDelegatingState
                 + ", mMagnifiedInteractionState=" + mPanningScalingState
                 + ", mViewportDraggingState=" + mViewportDraggingState
+                + ", mSinglePanningState=" + mSinglePanningState
                 + ", mDetectTripleTap=" + mDetectTripleTap
                 + ", mDetectShortcutTrigger=" + mDetectShortcutTrigger
                 + ", mCurrentState=" + State.nameOf(mCurrentState)
                 + ", mPreviousState=" + State.nameOf(mPreviousState)
                 + ", mMagnificationController=" + mFullScreenMagnificationController
                 + ", mDisplayId=" + mDisplayId
+                + ", mIsSinglePanningEnabled=" + mIsSinglePanningEnabled
                 + '}';
     }
 
+    private int overscrollState(MotionEvent event, PointF firstPointerDownLocation) {
+        if (!pointerValid(firstPointerDownLocation)) {
+            return OVERSCROLL_NONE;
+        }
+        float dX = event.getX() - firstPointerDownLocation.x;
+        float dY = event.getY() - firstPointerDownLocation.y;
+        if (mFullScreenMagnificationController.isAtLeftEdge(mDisplayId) && dX > 0) {
+            return OVERSCROLL_LEFT_EDGE;
+        } else if (mFullScreenMagnificationController.isAtRightEdge(mDisplayId) && dX < 0) {
+            return OVERSCROLL_RIGHT_EDGE;
+        } else if (mFullScreenMagnificationController.isAtTopEdge(mDisplayId) && dY > 0
+                || mFullScreenMagnificationController.isAtBottomEdge(mDisplayId) && dY < 0) {
+            return OVERSCROLL_VERTICAL_EDGE;
+        }
+        return OVERSCROLL_NONE;
+    }
+
+    private boolean pointerValid(PointF pointerDownLocation) {
+        return !(Float.isNaN(pointerDownLocation.x) && Float.isNaN(pointerDownLocation.y));
+    }
+
+
     private static final class MotionEventInfo {
 
         private static final int MAX_POOL_SIZE = 10;
@@ -1285,8 +1360,232 @@
      * Indicates an error with a gesture handler or state.
      */
     private static class GestureException extends Exception {
+
         GestureException(String message) {
             super(message);
         }
     }
+
+    final class SinglePanningState extends SimpleOnGestureListener implements State {
+
+
+        private final GestureDetector mScrollGestureDetector;
+        private MotionEventInfo mEvent;
+        private final FullScreenMagnificationVibrationHelper
+                mFullScreenMagnificationVibrationHelper;
+
+        @VisibleForTesting int mOverscrollState;
+
+        // mPivotEdge is the point on the edge of the screen when the magnified view hits the edge
+        // This point sets the center of magnified view when warp/scale effect is triggered
+        private final PointF mPivotEdge;
+
+        // mReachedEdgeCoord is the user's pointer location on the screen when the magnified view
+        // has hit the edge
+        private final PointF mReachedEdgeCoord;
+        // mEdgeCooldown value will be set to true when user hits the edge and will be set to false
+        // once the user moves x distance away from the edge. This is so that vibrating haptic
+        // doesn't get triggered by slight movements
+        private boolean mEdgeCooldown;
+
+        SinglePanningState(
+                Context context,
+                FullScreenMagnificationVibrationHelper fullScreenMagnificationVibrationHelper) {
+            mScrollGestureDetector = new GestureDetector(context, this, Handler.getMain());
+            mFullScreenMagnificationVibrationHelper = fullScreenMagnificationVibrationHelper;
+            mOverscrollState = OVERSCROLL_NONE;
+            mPivotEdge = new PointF(Float.NaN, Float.NaN);
+            mReachedEdgeCoord = new PointF(Float.NaN, Float.NaN);
+            mEdgeCooldown = false;
+        }
+
+        @Override
+        public void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags) {
+            int action = event.getActionMasked();
+            switch (action) {
+                case ACTION_UP:
+                case ACTION_CANCEL:
+                    if (mOverscrollState == OVERSCROLL_LEFT_EDGE
+                            || mOverscrollState == OVERSCROLL_RIGHT_EDGE) {
+                        mFullScreenMagnificationController.setScaleAndCenter(
+                                mDisplayId,
+                                mFullScreenMagnificationController.getPersistedScale(mDisplayId),
+                                mPivotEdge.x,
+                                mPivotEdge.y,
+                                true,
+                                AccessibilityManagerService.MAGNIFICATION_GESTURE_HANDLER_ID);
+                    }
+                    clear();
+                    transitionTo(mDetectingState);
+                    break;
+            }
+        }
+
+        @Override
+        public boolean onScroll(
+                MotionEvent first, MotionEvent second, float distanceX, float distanceY) {
+            if (mCurrentState != mSinglePanningState) {
+                return true;
+            }
+            mFullScreenMagnificationController.offsetMagnifiedRegion(
+                    mDisplayId,
+                    distanceX,
+                    distanceY,
+                    AccessibilityManagerService.MAGNIFICATION_GESTURE_HANDLER_ID);
+            if (DEBUG_PANNING_SCALING) {
+                Slog.i(
+                        mLogTag,
+                        "SinglePanningState Panned content by scrollX: "
+                                + distanceX
+                                + " scrollY: "
+                                + distanceY
+                                + " isAtEdge: "
+                                + mFullScreenMagnificationController.isAtEdge(mDisplayId));
+            }
+            if (mFullScreenMagnificationController.isAtEdge(mDisplayId)) {
+                playEdgeVibration(second);
+                setPivotEdge();
+            }
+            if (mOverscrollState == OVERSCROLL_NONE) {
+                mOverscrollState = overscrollState(second, new PointF(first.getX(), first.getY()));
+            } else if (mOverscrollState == OVERSCROLL_VERTICAL_EDGE) {
+                clear();
+                transitionTo(mDelegatingState);
+            } else {
+                boolean reset = warpEffectReset(second);
+                if (reset) {
+                    mFullScreenMagnificationController.reset(mDisplayId, /* animate */ true);
+                    clear();
+                    transitionTo(mDetectingState);
+                }
+            }
+            return /* event consumed: */ true;
+        }
+
+        private void vibrateIfNeeded() {
+            if ((mFullScreenMagnificationController.isAtLeftEdge(mDisplayId)
+                    || mFullScreenMagnificationController.isAtRightEdge(mDisplayId))) {
+                mFullScreenMagnificationVibrationHelper.vibrateIfSettingEnabled();
+            }
+        }
+
+
+
+        @Override
+        public String toString() {
+            return "SinglePanningState{"
+                    + "isEdgeOfView="
+                    + mFullScreenMagnificationController.isAtEdge(mDisplayId)
+                    + "overscrollStatus="
+                    + mOverscrollState
+                    + "}";
+        }
+
+        private void playEdgeVibration(MotionEvent event) {
+            if (mOverscrollState == OVERSCROLL_NONE) {
+                vibrateIfNeeded(event);
+            }
+        }
+
+        private void setPivotEdge() {
+            if (!pointerValid(mPivotEdge)) {
+                Rect bounds = new Rect();
+                mFullScreenMagnificationController.getMagnificationBounds(mDisplayId, bounds);
+                if (mOverscrollState == OVERSCROLL_LEFT_EDGE) {
+                    mPivotEdge.set(
+                            bounds.left,
+                            mFullScreenMagnificationController.getCenterY(mDisplayId));
+                } else if (mOverscrollState == OVERSCROLL_RIGHT_EDGE) {
+                    mPivotEdge.set(
+                            bounds.right,
+                            mFullScreenMagnificationController.getCenterY(mDisplayId));
+                }
+            }
+        }
+
+        private boolean warpEffectReset(MotionEvent second) {
+            float scale = calculateOverscrollScale(second);
+            if (scale < 0) return false;
+            mFullScreenMagnificationController.setScaleAndCenter(
+                    /* displayId= */ mDisplayId,
+                    /* scale= */ scale,
+                    /* centerX= */ mPivotEdge.x,
+                    /* centerY= */ mPivotEdge.y,
+                    /* animate= */ true,
+                    /* id= */ AccessibilityManagerService.MAGNIFICATION_GESTURE_HANDLER_ID);
+            if (scale == 1.0f) {
+                return true;
+            }
+            return false;
+        }
+
+        private float calculateOverscrollScale(MotionEvent second) {
+            // if at left and overshootDistX is negative or if at right and overshootDistX is
+            // positive then user is not in overscroll state anymore overscroll state. Reset
+            // overscroll values by clearing
+            float overshootDistX = second.getX() - mReachedEdgeCoord.x;
+            if ((mOverscrollState == OVERSCROLL_LEFT_EDGE && overshootDistX < 0)
+                    || (mOverscrollState == OVERSCROLL_RIGHT_EDGE && overshootDistX > 0)) {
+                clear();
+                return -1.0f;
+            }
+            float overshootDistY = second.getY() - mReachedEdgeCoord.y;
+            float overshootDist = (float) (Math.hypot(abs(overshootDistX), abs(overshootDistY)));
+            Rect bounds = new Rect();
+            mFullScreenMagnificationController.getMagnificationBounds(mDisplayId, bounds);
+            float overShootFraction = overshootDist / (float) bounds.width();
+            float minDist = 0.05f * bounds.width();
+            if (mEdgeCooldown && (overshootDist > minDist)) {
+                mEdgeCooldown = false;
+            }
+            float scale = (1 - overShootFraction) * getSensitivityScale();
+            scale =
+                    MathUtils.constrain(
+                            /* amount= */ scale,
+                            /* low= */ 1.0f,
+                            /* high= */ mFullScreenMagnificationController.getPersistedScale(
+                                    mDisplayId));
+            return scale;
+        }
+
+        private float getSensitivityScale() {
+            float magnificationScale =
+                    mFullScreenMagnificationController.getPersistedScale(mDisplayId);
+            float sensitivityFactor = 0.0f;
+            if (magnificationScale < 1.7f) {
+                sensitivityFactor = 1.0f;
+            } else if (magnificationScale < 2.0f) {
+                sensitivityFactor = 1.0f;
+            } else if (magnificationScale < 2.2f) {
+                sensitivityFactor = 0.95f;
+            } else if (magnificationScale < 2.5f) {
+                sensitivityFactor = 1.1f;
+            } else if (magnificationScale < 2.7f) {
+                sensitivityFactor = 1.3f;
+            } else if (magnificationScale < 3.0f) {
+                sensitivityFactor = 1.0f;
+            } else {
+                sensitivityFactor = 1.0f;
+            }
+            return magnificationScale * sensitivityFactor;
+        }
+
+        private void vibrateIfNeeded(MotionEvent event) {
+            if ((mFullScreenMagnificationController.isAtLeftEdge(mDisplayId)
+                            || mFullScreenMagnificationController.isAtRightEdge(mDisplayId))
+                    && !mEdgeCooldown) {
+                mFullScreenMagnificationVibrationHelper.vibrateIfSettingEnabled();
+                mReachedEdgeCoord.set(event.getX(), event.getY());
+                mEdgeCooldown = true;
+            }
+        }
+
+        @Override
+        public void clear() {
+            mOverscrollState = OVERSCROLL_NONE;
+            mPivotEdge.set(Float.NaN, Float.NaN);
+            mReachedEdgeCoord.set(Float.NaN, Float.NaN);
+            mEdgeCooldown = false;
+        }
+    }
 }
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationVibrationHelper.java b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationVibrationHelper.java
new file mode 100644
index 0000000..37a2eb5
--- /dev/null
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationVibrationHelper.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.accessibility.magnification;
+
+import android.annotation.Nullable;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.os.UserHandle;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.provider.Settings;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+/**
+ * Class to encapsulate all the logic to fire a vibration when user reaches the screen's left or
+ * right edge, when it's in magnification mode.
+ */
+public class FullScreenMagnificationVibrationHelper {
+    private static final long VIBRATION_DURATION_MS = 10L;
+    private static final int VIBRATION_AMPLITUDE = VibrationEffect.MAX_AMPLITUDE / 2;
+
+    @Nullable
+    private final Vibrator mVibrator;
+    private final ContentResolver mContentResolver;
+    private final VibrationEffect mVibrationEffect = VibrationEffect.get(
+            VibrationEffect.EFFECT_CLICK);
+    @VisibleForTesting
+    VibrationEffectSupportedProvider mIsVibrationEffectSupportedProvider;
+
+    public FullScreenMagnificationVibrationHelper(Context context) {
+        mContentResolver = context.getContentResolver();
+        mVibrator = context.getSystemService(Vibrator.class);
+        mIsVibrationEffectSupportedProvider =
+                () -> mVibrator != null && mVibrator.areAllEffectsSupported(
+                        VibrationEffect.EFFECT_CLICK) == Vibrator.VIBRATION_EFFECT_SUPPORT_YES;
+    }
+
+
+    void vibrateIfSettingEnabled() {
+        if (mVibrator != null && mVibrator.hasVibrator() && isEdgeHapticSettingEnabled()) {
+            if (mIsVibrationEffectSupportedProvider.isVibrationEffectSupported()) {
+                mVibrator.vibrate(mVibrationEffect);
+            } else {
+                mVibrator.vibrate(VibrationEffect.createOneShot(VIBRATION_DURATION_MS,
+                        VIBRATION_AMPLITUDE));
+            }
+        }
+    }
+
+    private boolean isEdgeHapticSettingEnabled() {
+        return Settings.Secure.getIntForUser(
+                mContentResolver,
+                Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_EDGE_HAPTIC_ENABLED,
+                0, UserHandle.USER_CURRENT)
+                == 1;
+    }
+
+    @VisibleForTesting
+    interface VibrationEffectSupportedProvider {
+        boolean isVibrationEffectSupported();
+    }
+}
+
diff --git a/services/accessibility/lint-baseline.xml b/services/accessibility/lint-baseline.xml
new file mode 100644
index 0000000..6bec8cf
--- /dev/null
+++ b/services/accessibility/lint-baseline.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.1.0-dev" type="baseline" client="" dependencies="true" name="" variant="all" version="8.1.0-dev">
+
+    <issue
+        id="SimpleManualPermissionEnforcement"
+        message="IAccessibilityManager permission check should be converted to @EnforcePermission annotation"
+        errorLine1="        mContext.enforceCallingOrSelfPermission("
+        errorLine2="        ^">
+        <location
+            file="frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java"
+            line="3992"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="SimpleManualPermissionEnforcement"
+        message="IAccessibilityManager permission check should be converted to @EnforcePermission annotation"
+        errorLine1="        mContext.enforceCallingOrSelfPermission("
+        errorLine2="        ^">
+        <location
+            file="frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java"
+            line="4007"
+            column="9"/>
+    </issue>
+
+</issues>
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index 2d60716..819f8a1 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -158,7 +158,6 @@
     private static final String TAG = "AppWidgetServiceImpl";
 
     private static final boolean DEBUG = false;
-    static final boolean DEBUG_PROVIDER_INFO_CACHE = true;
 
     private static final String OLD_KEYGUARD_HOST_PACKAGE = "android";
     private static final String NEW_KEYGUARD_HOST_PACKAGE = "com.android.keyguard";
@@ -255,7 +254,6 @@
 
     private boolean mSafeMode;
     private int mMaxWidgetBitmapMemory;
-    private boolean mIsProviderInfoPersisted;
     private boolean mIsCombinedBroadcastEnabled;
 
     // Mark widget lifecycle broadcasts as 'interactive'
@@ -281,14 +279,8 @@
         mCallbackHandler = new CallbackHandler(serviceThread.getLooper());
         mBackupRestoreController = new BackupRestoreController();
         mSecurityPolicy = new SecurityPolicy();
-        mIsProviderInfoPersisted = !ActivityManager.isLowRamDeviceStatic()
-                && DeviceConfig.getBoolean(NAMESPACE_SYSTEMUI,
-                SystemUiDeviceConfigFlags.PERSISTS_WIDGET_PROVIDER_INFO, true);
         mIsCombinedBroadcastEnabled = DeviceConfig.getBoolean(NAMESPACE_SYSTEMUI,
             SystemUiDeviceConfigFlags.COMBINED_BROADCAST_ENABLED, true);
-        if (DEBUG_PROVIDER_INFO_CACHE && !mIsProviderInfoPersisted) {
-            Slog.d(TAG, "App widget provider info will not be persisted on this device");
-        }
 
         BroadcastOptions opts = BroadcastOptions.makeBasic();
         opts.setBackgroundActivityStartsAllowed(false);
@@ -2528,21 +2520,7 @@
         }
     }
 
-    private static void serializeProvider(
-            @NonNull final TypedXmlSerializer out, @NonNull final Provider p) throws IOException {
-        Objects.requireNonNull(out);
-        Objects.requireNonNull(p);
-        serializeProviderInner(out, p, false /* persistsProviderInfo */);
-    }
-
-    private static void serializeProviderWithProviderInfo(
-            @NonNull final TypedXmlSerializer out, @NonNull final Provider p) throws IOException {
-        Objects.requireNonNull(out);
-        Objects.requireNonNull(p);
-        serializeProviderInner(out, p, true /* persistsProviderInfo */);
-    }
-
-    private static void serializeProviderInner(@NonNull final TypedXmlSerializer out,
+    private static void serializeProvider(@NonNull final TypedXmlSerializer out,
             @NonNull final Provider p, final boolean persistsProviderInfo) throws IOException {
         Objects.requireNonNull(out);
         Objects.requireNonNull(p);
@@ -2553,9 +2531,6 @@
         if (!TextUtils.isEmpty(p.infoTag)) {
             out.attribute(null, "info_tag", p.infoTag);
         }
-        if (DEBUG_PROVIDER_INFO_CACHE && persistsProviderInfo && !p.mInfoParsed) {
-            Slog.d(TAG, "Provider info from " + p.id.componentName + " won't be persisted.");
-        }
         if (persistsProviderInfo && p.mInfoParsed) {
             AppWidgetXmlUtil.writeAppWidgetProviderInfoLocked(out, p.info);
         }
@@ -3172,11 +3147,7 @@
                 if (provider.getUserId() != userId) {
                     continue;
                 }
-                if (mIsProviderInfoPersisted) {
-                    serializeProviderWithProviderInfo(out, provider);
-                } else if (provider.shouldBePersisted()) {
-                    serializeProvider(out, provider);
-                }
+                serializeProvider(out, provider, true /* persistsProviderInfo */);
             }
 
             N = mHosts.size();
@@ -3274,10 +3245,10 @@
                             provider.zombie = true;
                             provider.id = providerId;
                             mProviders.add(provider);
-                        } else if (mIsProviderInfoPersisted) {
+                        } else {
                             final AppWidgetProviderInfo info =
                                     AppWidgetXmlUtil.readAppWidgetProviderInfoLocked(parser);
-                            if (DEBUG_PROVIDER_INFO_CACHE && info == null) {
+                            if (DEBUG && info == null) {
                                 Slog.d(TAG, "Unable to load widget provider info from xml for "
                                         + providerId.componentName);
                             }
@@ -4601,7 +4572,7 @@
                                 && (provider.isInPackageForUser(backedupPackage, userId)
                                 || provider.hostedByPackageForUser(backedupPackage, userId))) {
                             provider.tag = index;
-                            serializeProvider(out, provider);
+                            serializeProvider(out, provider, false /* persistsProviderInfo*/);
                             index++;
                         }
                     }
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java
index 7d8bb51..69b738a 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetXmlUtil.java
@@ -22,7 +22,6 @@
 import android.content.ComponentName;
 import android.os.Build;
 import android.text.TextUtils;
-import android.util.Slog;
 
 import com.android.modules.utils.TypedXmlPullParser;
 import com.android.modules.utils.TypedXmlSerializer;
@@ -84,8 +83,6 @@
         }
         if (info.label != null) {
             out.attribute(null, ATTR_LABEL, info.label);
-        } else if (AppWidgetServiceImpl.DEBUG_PROVIDER_INFO_CACHE) {
-            Slog.e(TAG, "Label is empty in " + info.provider);
         }
         out.attributeInt(null, ATTR_ICON, info.icon);
         out.attributeInt(null, ATTR_PREVIEW_IMAGE, info.previewImage);
diff --git a/services/art-profile b/services/art-profile
index 95ed8e3..c548723 100644
--- a/services/art-profile
+++ b/services/art-profile
@@ -15,52 +15,66 @@
 #
 HSPLandroid/content/pm/PackageManagerInternal;-><init>()V
 HSPLandroid/content/pm/PackageManagerInternal;->filterAppAccess(Ljava/lang/String;II)Z+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HPLandroid/hardware/audio/common/V2_0/AudioOffloadInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HPLandroid/hardware/biometrics/face/AuthenticationFrame;->readFromParcel(Landroid/os/Parcel;)V
+HPLandroid/hardware/biometrics/face/BaseFrame;-><init>()V
+HPLandroid/hardware/biometrics/face/BaseFrame;->readFromParcel(Landroid/os/Parcel;)V
+HPLandroid/hardware/biometrics/face/ISessionCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/hardware/health/DiskStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/health/DiskStats;+]Landroid/hardware/health/DiskStats;Landroid/hardware/health/DiskStats;
-HSPLandroid/hardware/health/DiskStats$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/hardware/health/DiskStats$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/hardware/health/DiskStats$1;Landroid/hardware/health/DiskStats$1;
 HSPLandroid/hardware/health/DiskStats$1;->newArray(I)[Landroid/hardware/health/DiskStats;
-HSPLandroid/hardware/health/DiskStats$1;->newArray(I)[Ljava/lang/Object;
+HSPLandroid/hardware/health/DiskStats$1;->newArray(I)[Ljava/lang/Object;+]Landroid/hardware/health/DiskStats$1;Landroid/hardware/health/DiskStats$1;
 HSPLandroid/hardware/health/DiskStats;-><init>()V
 HSPLandroid/hardware/health/DiskStats;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/hardware/health/HealthInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/health/HealthInfo;+]Landroid/hardware/health/HealthInfo;Landroid/hardware/health/HealthInfo;
-HSPLandroid/hardware/health/HealthInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/hardware/health/HealthInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/hardware/health/HealthInfo$1;Landroid/hardware/health/HealthInfo$1;
 HSPLandroid/hardware/health/HealthInfo;-><init>()V
 HSPLandroid/hardware/health/HealthInfo;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 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/hardware/health/IHealth$Stub$Proxy;Landroid/hardware/health/IHealth$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
-HPLandroid/hardware/health/IHealth$Stub$Proxy;->getChargeCounterUah()I
-HPLandroid/hardware/health/IHealth$Stub$Proxy;->getChargeStatus()I
-HPLandroid/hardware/health/IHealth$Stub$Proxy;->getEnergyCounterNwh()J
+HPLandroid/hardware/health/IHealth$Stub$Proxy;->getChargeCounterUah()I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/hardware/health/IHealth$Stub$Proxy;Landroid/hardware/health/IHealth$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/hardware/health/IHealth$Stub$Proxy;->getChargeStatus()I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/hardware/health/IHealth$Stub$Proxy;Landroid/hardware/health/IHealth$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HPLandroid/hardware/health/IHealth$Stub$Proxy;->getCurrentAverageMicroamps()I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/hardware/health/IHealth$Stub$Proxy;Landroid/hardware/health/IHealth$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HPLandroid/hardware/health/IHealth$Stub$Proxy;->getEnergyCounterNwh()J+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/hardware/health/IHealth$Stub$Proxy;Landroid/hardware/health/IHealth$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HPLandroid/hardware/health/IHealth$Stub$Proxy;->getHealthInfo()Landroid/hardware/health/HealthInfo;
 HSPLandroid/hardware/health/IHealthInfoCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/hardware/health/IHealthInfoCallback;Lcom/android/server/health/HealthRegCallbackAidl$HalInfoCallback;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/hardware/health/StorageInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/health/StorageInfo;+]Landroid/hardware/health/StorageInfo;Landroid/hardware/health/StorageInfo;
-HSPLandroid/hardware/health/StorageInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/hardware/health/StorageInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/hardware/health/StorageInfo$1;Landroid/hardware/health/StorageInfo$1;
 HSPLandroid/hardware/health/StorageInfo$1;->newArray(I)[Landroid/hardware/health/StorageInfo;
-HSPLandroid/hardware/health/StorageInfo$1;->newArray(I)[Ljava/lang/Object;
+HSPLandroid/hardware/health/StorageInfo$1;->newArray(I)[Ljava/lang/Object;+]Landroid/hardware/health/StorageInfo$1;Landroid/hardware/health/StorageInfo$1;
 HSPLandroid/hardware/health/StorageInfo;-><init>()V
 HSPLandroid/hardware/health/StorageInfo;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/hardware/light/HwLight$1;-><init>()V
 HSPLandroid/hardware/light/HwLight;-><clinit>()V
 HSPLandroid/hardware/light/HwLight;-><init>()V
 HSPLandroid/hardware/light/ILights;-><clinit>()V
+HSPLandroid/hardware/power/stats/EnergyConsumerAttribution$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/power/stats/EnergyConsumerAttribution;+]Landroid/hardware/power/stats/EnergyConsumerAttribution;Landroid/hardware/power/stats/EnergyConsumerAttribution;
 HSPLandroid/hardware/power/stats/EnergyConsumerAttribution$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/hardware/power/stats/EnergyConsumerAttribution$1;Landroid/hardware/power/stats/EnergyConsumerAttribution$1;
 HSPLandroid/hardware/power/stats/EnergyConsumerAttribution;-><init>()V
 HSPLandroid/hardware/power/stats/EnergyConsumerAttribution;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/hardware/power/stats/EnergyConsumerResult;-><init>()V
+HSPLandroid/hardware/power/stats/EnergyConsumerResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/power/stats/EnergyConsumerResult;
 HSPLandroid/hardware/power/stats/EnergyConsumerResult;->readFromParcel(Landroid/os/Parcel;)V
+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;
 HPLandroid/hardware/power/stats/EnergyMeasurement;-><init>()V
 HPLandroid/hardware/power/stats/EnergyMeasurement;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/hardware/power/stats/IPowerStats$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/hardware/power/stats/IPowerStats$Stub$Proxy;->getEnergyConsumed([I)[Landroid/hardware/power/stats/EnergyConsumerResult;
+HPLandroid/hardware/power/stats/IPowerStats$Stub$Proxy;->getStateResidency([I)[Landroid/hardware/power/stats/StateResidencyResult;
 HPLandroid/hardware/power/stats/IPowerStats$Stub$Proxy;->readEnergyMeter([I)[Landroid/hardware/power/stats/EnergyMeasurement;
 HSPLandroid/hardware/power/stats/IPowerStats$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/power/stats/IPowerStats;
 HSPLandroid/hardware/power/stats/IPowerStats;-><clinit>()V
 HPLandroid/hardware/power/stats/StateResidency$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/power/stats/StateResidency;
 HPLandroid/hardware/power/stats/StateResidency$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/hardware/power/stats/StateResidency$1;Landroid/hardware/power/stats/StateResidency$1;
+HPLandroid/hardware/power/stats/StateResidency$1;->newArray(I)[Landroid/hardware/power/stats/StateResidency;
+HPLandroid/hardware/power/stats/StateResidency$1;->newArray(I)[Ljava/lang/Object;+]Landroid/hardware/power/stats/StateResidency$1;Landroid/hardware/power/stats/StateResidency$1;
 HPLandroid/hardware/power/stats/StateResidency;-><init>()V
 HPLandroid/hardware/power/stats/StateResidency;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 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;
 HPLandroid/hardware/power/stats/StateResidencyResult;-><init>()V
 HPLandroid/hardware/power/stats/StateResidencyResult;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$RecognitionConfig;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+HPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHwCallback$RecognitionEvent;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
 HSPLandroid/hardware/usb/PortStatus;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/net/ConnectivityModuleConnector$DependenciesImpl;-><init>()V
 HSPLandroid/net/ConnectivityModuleConnector$DependenciesImpl;-><init>(Landroid/net/ConnectivityModuleConnector$DependenciesImpl-IA;)V
@@ -70,15 +84,13 @@
 HSPLandroid/net/ConnectivityModuleConnector;->getInstance()Landroid/net/ConnectivityModuleConnector;
 HPLandroid/net/INetd$Stub$Proxy;->bandwidthRemoveInterfaceQuota(Ljava/lang/String;)V
 HPLandroid/net/INetd$Stub$Proxy;->bandwidthSetInterfaceQuota(Ljava/lang/String;J)V
-HSPLandroid/net/INetdUnsolicitedEventListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+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/net/NetworkManagementService$NetdUnsolicitedEventListener;
 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/os/BatteryStatsInternal;-><init>()V
 HSPLandroid/power/PowerStatsInternal;-><init>()V
 HSPLandroid/sysprop/SurfaceFlingerProperties;->enable_frame_rate_override()Ljava/util/Optional;
 HSPLandroid/sysprop/SurfaceFlingerProperties;->tryParseBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
-HPLcom/android/internal/art/ArtStatsLog;->write(IJIIIJIIJIIIII)V
 HSPLcom/android/internal/util/jobs/ArrayUtils;->contains([II)Z
-HPLcom/android/internal/util/jobs/CollectionUtils;->size(Ljava/util/Collection;)I+]Ljava/util/Collection;Ljava/util/ArrayList;
 HPLcom/android/internal/util/jobs/FastXmlSerializer;->append(C)V+]Lcom/android/internal/util/jobs/FastXmlSerializer;Lcom/android/internal/util/jobs/FastXmlSerializer;
 HPLcom/android/internal/util/jobs/FastXmlSerializer;->append(Ljava/lang/String;)V+]Lcom/android/internal/util/jobs/FastXmlSerializer;Lcom/android/internal/util/jobs/FastXmlSerializer;
 HPLcom/android/internal/util/jobs/FastXmlSerializer;->append(Ljava/lang/String;II)V+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/internal/util/jobs/FastXmlSerializer;Lcom/android/internal/util/jobs/FastXmlSerializer;
@@ -87,7 +99,7 @@
 HPLcom/android/internal/util/jobs/FastXmlSerializer;->endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;+]Lcom/android/internal/util/jobs/FastXmlSerializer;Lcom/android/internal/util/jobs/FastXmlSerializer;
 HPLcom/android/internal/util/jobs/FastXmlSerializer;->escapeAndAppendString(Ljava/lang/String;)V+]Lcom/android/internal/util/jobs/FastXmlSerializer;Lcom/android/internal/util/jobs/FastXmlSerializer;
 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;->add()I
+HPLcom/android/internal/util/jobs/RingBufferIndices;->add()I
 HSPLcom/android/internal/util/jobs/StatLogger;->getTime()J
 HSPLcom/android/internal/util/jobs/StatLogger;->logDurationStat(IJ)J+]Lcom/android/internal/util/jobs/StatLogger;Lcom/android/internal/util/jobs/StatLogger;
 HSPLcom/android/modules/utils/build/SdkLevel;->isAtLeastT()Z
@@ -97,23 +109,30 @@
 HSPLcom/android/modules/utils/build/UnboundedSdkLevel;->isAtLeastInternal(Ljava/lang/String;)Z
 HSPLcom/android/modules/utils/build/UnboundedSdkLevel;->isCodename(Ljava/lang/String;)Z
 HSPLcom/android/modules/utils/build/UnboundedSdkLevel;->removeFingerprint(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/AccessibilityManagerInternal;->get()Lcom/android/server/AccessibilityManagerInternal;
 HSPLcom/android/server/AnimationThread;-><init>()V
 HSPLcom/android/server/AnimationThread;->ensureThreadLocked()V
 HSPLcom/android/server/AnimationThread;->get()Lcom/android/server/AnimationThread;
 HSPLcom/android/server/AnimationThread;->getHandler()Landroid/os/Handler;
 HPLcom/android/server/AnyMotionDetector$1;->onSensorChanged(Landroid/hardware/SensorEvent;)V
-HSPLcom/android/server/AppStateTrackerImpl$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/AppStateTrackerImpl$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/AppStateTrackerImpl$Listener;->onUidActiveStateChanged(Lcom/android/server/AppStateTrackerImpl;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;->handleUidCached(IZ)V+]Lcom/android/server/AppStateTrackerImpl$Listener;Lcom/android/server/job/controllers/BackgroundJobsController$1;,Lcom/android/server/AppStateTrackerImpl$1;
 HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->notifyTempExemptionListChanged()V
+HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->notifyUidActiveStateChanged(I)V
 HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->removeUid(IZ)V
 HPLcom/android/server/AppStateTrackerImpl$StandbyTracker;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
+HSPLcom/android/server/AppStateTrackerImpl;->-$$Nest$fgetmHandler(Lcom/android/server/AppStateTrackerImpl;)Lcom/android/server/AppStateTrackerImpl$MyHandler;
 HSPLcom/android/server/AppStateTrackerImpl;->-$$Nest$fgetmLock(Lcom/android/server/AppStateTrackerImpl;)Ljava/lang/Object;
 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;
+HSPLcom/android/server/AppStateTrackerImpl;->addUidToArray(Landroid/util/SparseBooleanArray;I)Z
 HPLcom/android/server/AppStateTrackerImpl;->areAlarmsRestrictedByBatterySaver(ILjava/lang/String;)Z+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;]Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;
 HSPLcom/android/server/AppStateTrackerImpl;->areJobsRestricted(ILjava/lang/String;Z)Z+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;]Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
 HSPLcom/android/server/AppStateTrackerImpl;->cloneListeners()[Lcom/android/server/AppStateTrackerImpl$Listener;
-HSPLcom/android/server/AppStateTrackerImpl;->findForcedAppStandbyUidPackageIndexLocked(ILjava/lang/String;)I+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+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;->isAnyAppIdUnexempt([I[I)Z
 HSPLcom/android/server/AppStateTrackerImpl;->isAppBackgroundRestricted(ILjava/lang/String;)Z
 HSPLcom/android/server/AppStateTrackerImpl;->isRunAnyInBackgroundAppOpsAllowed(ILjava/lang/String;)Z+]Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl;
@@ -121,24 +140,29 @@
 HSPLcom/android/server/AppStateTrackerImpl;->isUidActive(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HPLcom/android/server/AppStateTrackerImpl;->isUidActiveSynced(I)Z
 HPLcom/android/server/AppStateTrackerImpl;->isUidPowerSaveUserExempt(I)Z
+HSPLcom/android/server/AppStateTrackerImpl;->removeUidFromArray(Landroid/util/SparseBooleanArray;IZ)Z
 HSPLcom/android/server/AppStateTrackerImpl;->setPowerSaveExemptionListAppIds([I[I[I)V
 HSPLcom/android/server/AppStateTrackerImpl;->updateForceAllAppStandbyState()V
 HSPLcom/android/server/BatteryService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/BatteryService;Landroid/content/Intent;)V
+HPLcom/android/server/BatteryService$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/BatteryService$$ExternalSyntheticLambda3;->update(Landroid/hardware/health/HealthInfo;)V
-HPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;->getProperty(ILandroid/os/BatteryProperty;)I+]Lcom/android/server/health/HealthServiceWrapper;Lcom/android/server/health/HealthServiceWrapperAidl;
+HSPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;->getProperty(ILandroid/os/BatteryProperty;)I+]Lcom/android/server/health/HealthServiceWrapper;Lcom/android/server/health/HealthServiceWrapperAidl;]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/server/BatteryService$Led;->updateLightsLocked()V
 HSPLcom/android/server/BatteryService$LocalService;->getBatteryHealth()I
 HSPLcom/android/server/BatteryService$LocalService;->getBatteryLevel()I
 HSPLcom/android/server/BatteryService$LocalService;->getBatteryLevelLow()Z
+HSPLcom/android/server/BatteryService$LocalService;->getPlugType()I
 HSPLcom/android/server/BatteryService;->$r8$lambda$6jjJgn5KcldjJelOt5uQgeylfgM(Lcom/android/server/BatteryService;Landroid/hardware/health/HealthInfo;)V
 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;->getIconLocked(I)I
 HSPLcom/android/server/BatteryService;->isPoweredLocked(I)Z
+HPLcom/android/server/BatteryService;->lambda$sendBatteryChangedIntentLocked$0(Landroid/content/Intent;)V
 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;->sendBatteryChangedIntentLocked()V
 HSPLcom/android/server/BatteryService;->sendBatteryLevelChangedIntentLocked()V
+HPLcom/android/server/BatteryService;->sendEnqueuedBatteryLevelChangedEvents()V
 HSPLcom/android/server/BatteryService;->shouldSendBatteryLowLocked()Z
 HSPLcom/android/server/BatteryService;->shouldShutdownLocked()Z
 HSPLcom/android/server/BatteryService;->shutdownIfNoPowerLocked()V
@@ -150,50 +174,43 @@
 HSPLcom/android/server/BinderCallsStatsService$AuthorizedWorkSourceProvider;->getCallingUid()I
 HSPLcom/android/server/BinderCallsStatsService$AuthorizedWorkSourceProvider;->resolveWorkSourceUid(I)I+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/BinderCallsStatsService$AuthorizedWorkSourceProvider;Lcom/android/server/BinderCallsStatsService$AuthorizedWorkSourceProvider;
 HPLcom/android/server/BinderCallsStatsService$LifeCycle$1;->noteCallStats(IJLjava/util/Collection;)V+]Landroid/os/BatteryStatsInternal;Lcom/android/server/am/BatteryStatsService$LocalService;
+HSPLcom/android/server/BootReceiver;->writeTimestamps(Ljava/util/HashMap;)V
 HSPLcom/android/server/BundleUtils;->isEmpty(Landroid/os/Bundle;)Z
-HSPLcom/android/server/CachedDeviceStateService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-HSPLcom/android/server/DeviceIdleController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/CachedDeviceStateService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/DeviceIdleController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/DeviceIdleController$BinderService;->isPowerSaveWhitelistApp(Ljava/lang/String;)Z
 HPLcom/android/server/DeviceIdleController$LocalService;->getNotificationAllowlistDuration()J
-HSPLcom/android/server/DeviceIdleController$LocalService;->getPowerSaveTempWhitelistAppIds()[I
+HSPLcom/android/server/DeviceIdleController$LocalService;->getTempAllowListType(II)I
 HPLcom/android/server/DeviceIdleController$LocalService;->isAppOnWhitelist(I)Z
-HSPLcom/android/server/DeviceIdleController$MyHandler;->handleMessage(Landroid/os/Message;)V
-HSPLcom/android/server/DeviceIdleController;->addPowerSaveTempWhitelistAppDirectInternal(IIJIZILjava/lang/String;)V
+HPLcom/android/server/DeviceIdleController$LocalService;->setAlarmsActive(Z)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/os/PowerManagerInternal;Lcom/android/server/power/PowerManagerService$LocalService;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/DeviceIdleController;Lcom/android/server/DeviceIdleController;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/DeviceIdleInternal$StationaryListener;Lcom/android/server/location/provider/StationaryThrottlingLocationProvider;
+HSPLcom/android/server/DeviceIdleController;->addPowerSaveTempWhitelistAppDirectInternal(IIJIZILjava/lang/String;)V+]Landroid/os/Handler;Lcom/android/server/DeviceIdleController$MyHandler;]Landroid/os/Message;Landroid/os/Message;]Lcom/android/server/net/NetworkPolicyManagerInternal;Lcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/DeviceIdleController;Lcom/android/server/DeviceIdleController;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
+HPLcom/android/server/DeviceIdleController;->becomeInactiveIfAppropriateLocked()V
 HPLcom/android/server/DeviceIdleController;->checkTempAppWhitelistTimeout(I)V
-HSPLcom/android/server/DeviceIdleController;->exitMaintenanceEarlyIfNeededLocked()V
+HPLcom/android/server/DeviceIdleController;->exitMaintenanceEarlyIfNeededLocked()V
 HPLcom/android/server/DeviceIdleController;->isAppOnWhitelistInternal(I)Z
+HPLcom/android/server/DeviceIdleController;->isPowerSaveWhitelistAppInternal(Ljava/lang/String;)Z
 HPLcom/android/server/DeviceIdleController;->onAppRemovedFromTempWhitelistLocked(ILjava/lang/String;)V
 HSPLcom/android/server/DeviceIdleController;->passWhiteListsToForceAppStandbyTrackerLocked()V
 HSPLcom/android/server/DeviceIdleController;->postTempActiveTimeoutMessage(IJ)V
 HSPLcom/android/server/DeviceIdleController;->reportTempWhitelistChangedLocked(IZ)V
 HPLcom/android/server/DeviceIdleController;->setAlarmsActive(Z)V
-HSPLcom/android/server/DeviceIdleController;->updateChargingLocked(Z)V
+HPLcom/android/server/DeviceIdleController;->updateChargingLocked(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;
-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;->reportCachedValues(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/DisplayThread;-><init>()V
 HSPLcom/android/server/DisplayThread;->ensureThreadLocked()V
 HSPLcom/android/server/DisplayThread;->get()Lcom/android/server/DisplayThread;
 HSPLcom/android/server/DisplayThread;->getHandler()Landroid/os/Handler;
-HSPLcom/android/server/DropBoxManagerService$1$1;->run()V
-HPLcom/android/server/DropBoxManagerService$2;->getNextEntryWithAttribution(Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;)Landroid/os/DropBoxManager$Entry;
-HPLcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;->createBroadcastOptions(Landroid/content/Intent;)Landroid/os/Bundle;
-HSPLcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;->createIntent(Ljava/lang/String;J)Landroid/content/Intent;
-HSPLcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;->handleMessage(Landroid/os/Message;)V
-HSPLcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;->maybeDeferBroadcast(Ljava/lang/String;J)V
+HPLcom/android/server/DropBoxManagerService$1$1;->run()V
 HSPLcom/android/server/DropBoxManagerService$EntryFile;-><init>(J)V
 HSPLcom/android/server/DropBoxManagerService$EntryFile;-><init>(Ljava/io/File;I)V
 HSPLcom/android/server/DropBoxManagerService$EntryFile;-><init>(Ljava/io/File;Ljava/io/File;Ljava/lang/String;JII)V
 HSPLcom/android/server/DropBoxManagerService$EntryFile;->compareTo(Lcom/android/server/DropBoxManagerService$EntryFile;)I+]Ljava/lang/Object;Lcom/android/server/DropBoxManagerService$EntryFile;
 HSPLcom/android/server/DropBoxManagerService$EntryFile;->compareTo(Ljava/lang/Object;)I+]Lcom/android/server/DropBoxManagerService$EntryFile;Lcom/android/server/DropBoxManagerService$EntryFile;
-HSPLcom/android/server/DropBoxManagerService$EntryFile;->deleteFile(Ljava/io/File;)V
 HSPLcom/android/server/DropBoxManagerService$EntryFile;->getExtension()Ljava/lang/String;
 HSPLcom/android/server/DropBoxManagerService$EntryFile;->getFile(Ljava/io/File;)Ljava/io/File;
 HSPLcom/android/server/DropBoxManagerService$EntryFile;->getFilename()Ljava/lang/String;
-HSPLcom/android/server/DropBoxManagerService$EntryFile;->hasFile()Z
-HSPLcom/android/server/DropBoxManagerService$SimpleEntrySource;-><init>(Ljava/io/InputStream;JZ)V
-HSPLcom/android/server/DropBoxManagerService$SimpleEntrySource;->writeTo(Ljava/io/FileDescriptor;)V
 HSPLcom/android/server/DropBoxManagerService;->addEntry(Ljava/lang/String;Lcom/android/server/DropBoxManagerInternal$EntrySource;I)V
-HSPLcom/android/server/DropBoxManagerService;->addEntry(Ljava/lang/String;Ljava/io/InputStream;JI)V
 HPLcom/android/server/DropBoxManagerService;->checkPermission(ILjava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/DropBoxManagerService;->createEntry(Ljava/io/File;Ljava/lang/String;I)J
 HSPLcom/android/server/DropBoxManagerService;->enrollEntry(Lcom/android/server/DropBoxManagerService$EntryFile;)V
@@ -201,8 +218,10 @@
 HSPLcom/android/server/DropBoxManagerService;->init()V
 HSPLcom/android/server/DropBoxManagerService;->isTagEnabled(Ljava/lang/String;)Z
 HSPLcom/android/server/DropBoxManagerService;->trimToFit()J
-HSPLcom/android/server/EventLogTags;->writeNotificationCancelAll(IILjava/lang/String;IIIILjava/lang/String;)V
-HSPLcom/android/server/EventLogTags;->writeNotificationEnqueue(IILjava/lang/String;ILjava/lang/String;ILjava/lang/String;I)V
+HPLcom/android/server/EventLogTags;->writeBatterySavingStats(IIIJIIJII)V
+HPLcom/android/server/EventLogTags;->writeNotificationCancelAll(IILjava/lang/String;IIIILjava/lang/String;)V
+HPLcom/android/server/EventLogTags;->writeNotificationCanceled(Ljava/lang/String;IIIIIILjava/lang/String;)V
+HPLcom/android/server/EventLogTags;->writeNotificationEnqueue(IILjava/lang/String;ILjava/lang/String;ILjava/lang/String;I)V
 HPLcom/android/server/EventLogTags;->writeNotificationVisibility(Ljava/lang/String;IIIII)V
 HSPLcom/android/server/EventLogTags;->writePmCriticalInfo(Ljava/lang/String;)V
 HSPLcom/android/server/EventLogTags;->writeRescueNote(IIJ)V
@@ -225,28 +244,30 @@
 HSPLcom/android/server/IntentResolver;->copyInto(Landroid/util/ArraySet;Landroid/util/ArraySet;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/IntentResolver;megamorphic_types
 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;->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;
 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;->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
 HSPLcom/android/server/IntentResolver;->queryIntent(Lcom/android/server/pm/snapshot/PackageDataSnapshot;Landroid/content/Intent;Ljava/lang/String;ZIJ)Ljava/util/List;+]Ljava/lang/String;Ljava/lang/String;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/IntentResolver;megamorphic_types]Landroid/content/Intent;Landroid/content/Intent;
 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;Landroid/util/MapCollections$ArrayIterator;,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;->register_intent_filter(Ljava/lang/Object;Ljava/util/Iterator;Landroid/util/ArrayMap;Ljava/lang/String;)I+]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;]Lcom/android/server/IntentResolver;megamorphic_types
 HSPLcom/android/server/IntentResolver;->removeFilter(Ljava/lang/Object;)V
 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;
 HSPLcom/android/server/IntentResolver;->sortResults(Ljava/util/List;)V
-HSPLcom/android/server/IntentResolver;->unregister_intent_filter(Ljava/lang/Object;Ljava/util/Iterator;Landroid/util/ArrayMap;Ljava/lang/String;)I+]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/ArrayList$Itr;]Lcom/android/server/IntentResolver;megamorphic_types
-HSPLcom/android/server/IntentResolver;->unregister_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;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/IntentResolver;megamorphic_types
+HSPLcom/android/server/IntentResolver;->unregister_intent_filter(Ljava/lang/Object;Ljava/util/Iterator;Landroid/util/ArrayMap;Ljava/lang/String;)I+]Lcom/android/server/IntentResolver;megamorphic_types
+HSPLcom/android/server/IntentResolver;->unregister_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;]Lcom/android/server/IntentResolver;megamorphic_types
 HSPLcom/android/server/IoThread;-><init>()V
 HSPLcom/android/server/IoThread;->ensureThreadLocked()V
 HSPLcom/android/server/IoThread;->get()Lcom/android/server/IoThread;
 HSPLcom/android/server/IoThread;->getHandler()Landroid/os/Handler;
 HSPLcom/android/server/LocalManagerRegistry;-><clinit>()V
 HSPLcom/android/server/LocalManagerRegistry;->addManager(Ljava/lang/Class;Ljava/lang/Object;)V
+HSPLcom/android/server/LocalManagerRegistry;->getManager(Ljava/lang/Class;)Ljava/lang/Object;+]Ljava/util/Map;Landroid/util/ArrayMap;
+HSPLcom/android/server/LocalManagerRegistry;->getManagerOrThrow(Ljava/lang/Class;)Ljava/lang/Object;
 HSPLcom/android/server/LockGuard$LockInfo;-><init>()V
 HSPLcom/android/server/LockGuard$LockInfo;-><init>(Lcom/android/server/LockGuard$LockInfo-IA;)V
 HSPLcom/android/server/LockGuard;-><clinit>()V
@@ -257,15 +278,16 @@
 HSPLcom/android/server/LockGuard;->installNewLock(I)Ljava/lang/Object;
 HSPLcom/android/server/LockGuard;->installNewLock(IZ)Ljava/lang/Object;
 HSPLcom/android/server/LockGuard;->lockToString(I)Ljava/lang/String;
-HSPLcom/android/server/NetworkScoreService;->enforceSystemOrHasScoreNetworks()V
-HSPLcom/android/server/NetworkScoreService;->getActiveScorerPackage()Ljava/lang/String;
+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;
+HPLcom/android/server/NetworkScoreService;->requestScores([Landroid/net/NetworkKey;)Z
 HSPLcom/android/server/NetworkScorerAppManager$SettingsFacade;->getInt(Landroid/content/Context;Ljava/lang/String;I)I
 HSPLcom/android/server/NetworkScorerAppManager$SettingsFacade;->getString(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/NetworkScorerAppManager;->getActiveScorer()Landroid/net/NetworkScorerAppData;
-HSPLcom/android/server/NetworkScorerAppManager;->getAllValidScorers()Ljava/util/List;
-HSPLcom/android/server/NetworkScorerAppManager;->getNetworkRecommendationsEnabledSetting()I
-HSPLcom/android/server/NetworkScorerAppManager;->getNetworkRecommendationsPackage()Ljava/lang/String;
-HSPLcom/android/server/NetworkScorerAppManager;->getScorer(Ljava/lang/String;)Landroid/net/NetworkScorerAppData;
+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;
+HSPLcom/android/server/NetworkScorerAppManager;->getNetworkRecommendationsEnabledSetting()I+]Lcom/android/server/NetworkScorerAppManager$SettingsFacade;Lcom/android/server/NetworkScorerAppManager$SettingsFacade;
+HSPLcom/android/server/NetworkScorerAppManager;->getNetworkRecommendationsPackage()Ljava/lang/String;+]Lcom/android/server/NetworkScorerAppManager$SettingsFacade;Lcom/android/server/NetworkScorerAppManager$SettingsFacade;
+HSPLcom/android/server/NetworkScorerAppManager;->getScorer(Ljava/lang/String;)Landroid/net/NetworkScorerAppData;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/NetworkScorerAppManager;Lcom/android/server/NetworkScorerAppManager;
 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
@@ -284,33 +306,33 @@
 HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->getName()Ljava/lang/String;
 HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->toString(I)Ljava/lang/String;
 HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->updateHealthCheckStateLocked()I
+HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->writeLocked(Lcom/android/modules/utils/TypedXmlSerializer;)V
 HSPLcom/android/server/PackageWatchdog$ObserverInternal;-><init>(Ljava/lang/String;Ljava/util/List;)V
 HSPLcom/android/server/PackageWatchdog$ObserverInternal;->getMonitoredPackage(Ljava/lang/String;)Lcom/android/server/PackageWatchdog$MonitoredPackage;
 HSPLcom/android/server/PackageWatchdog$ObserverInternal;->putMonitoredPackage(Lcom/android/server/PackageWatchdog$MonitoredPackage;)V
 HSPLcom/android/server/PackageWatchdog$ObserverInternal;->read(Lcom/android/modules/utils/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(Lcom/android/modules/utils/TypedXmlSerializer;)Z
 HSPLcom/android/server/PackageWatchdog;->-$$Nest$fgetmSystemClock(Lcom/android/server/PackageWatchdog;)Lcom/android/server/PackageWatchdog$SystemClock;
 HSPLcom/android/server/PackageWatchdog;-><clinit>()V
 HSPLcom/android/server/PackageWatchdog;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/PackageWatchdog;-><init>(Landroid/content/Context;Landroid/util/AtomicFile;Landroid/os/Handler;Landroid/os/Handler;Lcom/android/server/ExplicitHealthCheckController;Landroid/net/ConnectivityModuleConnector;Lcom/android/server/PackageWatchdog$SystemClock;)V
 HSPLcom/android/server/PackageWatchdog;->getInstance(Landroid/content/Context;)Lcom/android/server/PackageWatchdog;
-HSPLcom/android/server/PackageWatchdog;->getNextStateSyncMillisLocked()J
-HSPLcom/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;
+HPLcom/android/server/PackageWatchdog;->getPackagesPendingHealthChecksLocked()Ljava/util/Set;
 HSPLcom/android/server/PackageWatchdog;->loadFromFile()V
 HSPLcom/android/server/PackageWatchdog;->newMonitoredPackage(Ljava/lang/String;JJZLandroid/util/LongArrayQueue;)Lcom/android/server/PackageWatchdog$MonitoredPackage;
 HSPLcom/android/server/PackageWatchdog;->noteBoot()V
-HSPLcom/android/server/PackageWatchdog;->onSupportedPackages(Ljava/util/List;)V
+HPLcom/android/server/PackageWatchdog;->onSupportedPackages(Ljava/util/List;)V
 HSPLcom/android/server/PackageWatchdog;->parseLongArrayQueue(Ljava/lang/String;)Landroid/util/LongArrayQueue;
 HSPLcom/android/server/PackageWatchdog;->parseMonitoredPackage(Lcom/android/modules/utils/TypedXmlPullParser;)Lcom/android/server/PackageWatchdog$MonitoredPackage;
 HSPLcom/android/server/PackageWatchdog;->registerHealthObserver(Lcom/android/server/PackageWatchdog$PackageHealthObserver;)V
-HSPLcom/android/server/PackageWatchdog;->syncRequests()V
+HPLcom/android/server/PackageWatchdog;->syncRequests()V
 HSPLcom/android/server/PackageWatchdog;->syncState(Ljava/lang/String;)V
-HSPLcom/android/server/PersistentDataBlockService;->computeDigestLocked([B)[B+]Ljava/io/DataInputStream;Ljava/io/DataInputStream;]Ljava/security/MessageDigest;Ljava/security/MessageDigest$Delegate;
 HSPLcom/android/server/PinnerService$3$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/PinnerService$3;->onUidActive(I)V
-HSPLcom/android/server/PinnerService;->pinFileRanges(Ljava/lang/String;ILcom/android/server/PinnerService$PinRangeSource;)Lcom/android/server/PinnerService$PinnedFile;
-HSPLcom/android/server/PinnerService;->updateActiveState(IZ)V
+HSPLcom/android/server/PinnerService$3;->onUidGone(IZ)V
+HSPLcom/android/server/PinnerService;->handleUidGone(I)V
+HSPLcom/android/server/PinnerService;->updateActiveState(IZ)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/RescueParty$RescuePartyObserver;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/RescueParty$RescuePartyObserver;->getInstance(Landroid/content/Context;)Lcom/android/server/RescueParty$RescuePartyObserver;
 HSPLcom/android/server/RescueParty$RescuePartyObserver;->getName()Ljava/lang/String;
@@ -322,28 +344,28 @@
 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;->hasLegacyExternalStorage(I)Z
+HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->hasLegacyExternalStorage(I)Z+]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->isExternalStorageService(I)Z
 HSPLcom/android/server/StorageManagerService$WatchedLockedUsers;->contains(I)Z
 HSPLcom/android/server/StorageManagerService;->-$$Nest$fgetmMediaStoreAuthorityAppId(Lcom/android/server/StorageManagerService;)I
 HSPLcom/android/server/StorageManagerService;->-$$Nest$mgetMountModeInternal(Lcom/android/server/StorageManagerService;ILjava/lang/String;)I
 HSPLcom/android/server/StorageManagerService;->-$$Nest$sfgetLOCAL_LOGV()Z
+HSPLcom/android/server/StorageManagerService;->adjustAllocateFlags(IILjava/lang/String;)I
 HPLcom/android/server/StorageManagerService;->allocateBytes(Ljava/lang/String;JILjava/lang/String;)V
-HPLcom/android/server/StorageManagerService;->getAllocatableBytes(Ljava/lang/String;ILjava/lang/String;)J
+HSPLcom/android/server/StorageManagerService;->getAllocatableBytes(Ljava/lang/String;ILjava/lang/String;)J
 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;
-HSPLcom/android/server/StorageManagerService;->getVolumeList(ILjava/lang/String;I)[Landroid/os/storage/StorageVolume;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]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;]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;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]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/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/os/storage/VolumeRecord;Landroid/os/storage/VolumeRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/StorageManagerService;->getVolumes(I)[Landroid/os/storage/VolumeInfo;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 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;
-HPLcom/android/server/StorageManagerService;->monitor()V
-HSPLcom/android/server/StorageManagerService;->snapshotAndMonitorLegacyStorageAppOp(Landroid/os/UserHandle;)V
-HSPLcom/android/server/StorageManagerService;->updateLegacyStorageApps(Ljava/lang/String;IZ)V
+HPLcom/android/server/StorageManagerService;->monitor()V+]Landroid/os/IVold;Landroid/os/IVold$Stub$Proxy;
+HPLcom/android/server/StorageManagerService;->snapshotAndMonitorLegacyStorageAppOp(Landroid/os/UserHandle;)V
+HPLcom/android/server/StorageManagerService;->updateLegacyStorageApps(Ljava/lang/String;IZ)V
 HSPLcom/android/server/SystemConfig$PermissionEntry;-><init>(Ljava/lang/String;Z)V
 HSPLcom/android/server/SystemConfig$SharedLibraryEntry;-><init>(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/SystemConfig$SharedLibraryEntry;-><init>(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V
 HSPLcom/android/server/SystemConfig$SharedLibraryEntry;-><init>(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Z)V
-HSPLcom/android/server/SystemConfig;->-$$Nest$smisAtLeastSdkLevel(Ljava/lang/String;)Z
 HSPLcom/android/server/SystemConfig;-><clinit>()V
 HSPLcom/android/server/SystemConfig;-><init>()V
 HSPLcom/android/server/SystemConfig;->addFeature(Ljava/lang/String;I)V
@@ -360,14 +382,12 @@
 HSPLcom/android/server/SystemConfig;->getInstance()Lcom/android/server/SystemConfig;
 HSPLcom/android/server/SystemConfig;->getLinkedApps()Landroid/util/ArraySet;
 HSPLcom/android/server/SystemConfig;->getNamedActors()Ljava/util/Map;
-HSPLcom/android/server/SystemConfig;->getOverlayConfigSignaturePackage()Ljava/lang/String;
 HSPLcom/android/server/SystemConfig;->getPermissionAllowlist()Lcom/android/server/pm/permission/PermissionAllowlist;
 HSPLcom/android/server/SystemConfig;->getPermissions()Landroid/util/ArrayMap;
 HSPLcom/android/server/SystemConfig;->getSharedLibraries()Landroid/util/ArrayMap;
 HSPLcom/android/server/SystemConfig;->getSplitPermissions()Ljava/util/ArrayList;
 HSPLcom/android/server/SystemConfig;->getSystemAppUpdateOwnerPackageName(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/SystemConfig;->getSystemPermissions()Landroid/util/SparseArray;
-HSPLcom/android/server/SystemConfig;->isAtLeastSdkLevel(Ljava/lang/String;)Z
 HSPLcom/android/server/SystemConfig;->isErofsSupported()Z
 HSPLcom/android/server/SystemConfig;->isKernelVersionAtLeast(II)Z
 HSPLcom/android/server/SystemConfig;->isSystemProcess()Z
@@ -434,45 +454,46 @@
 HSPLcom/android/server/SystemTimeZone;-><clinit>()V
 HSPLcom/android/server/SystemTimeZone;->initializeTimeZoneSettingsIfRequired()V
 HSPLcom/android/server/SystemTimeZone;->isValidTimeZoneId(Ljava/lang/String;)Z
-HSPLcom/android/server/SystemUpdateManagerService;->loadSystemUpdateInfoLocked()Landroid/os/Bundle;
 HPLcom/android/server/TelephonyRegistry$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/TelephonyRegistry;Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;)V
+HPLcom/android/server/TelephonyRegistry$$ExternalSyntheticLambda0;->getOrThrow()Ljava/lang/Object;
 HPLcom/android/server/TelephonyRegistry$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/TelephonyRegistry;Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;)V
 HPLcom/android/server/TelephonyRegistry$$ExternalSyntheticLambda2;->getOrThrow()Ljava/lang/Object;
 HPLcom/android/server/TelephonyRegistry$Record;->matchTelephonyCallbackEvent(I)Z+]Ljava/util/Set;Ljava/util/HashSet;
-HSPLcom/android/server/TelephonyRegistry;->add(Landroid/os/IBinder;IIZ)Lcom/android/server/TelephonyRegistry$Record;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub;,Landroid/telephony/PhoneStateListener$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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/TelephonyRegistry$ConfigurationProvider;Lcom/android/server/TelephonyRegistry$ConfigurationProvider;
 HSPLcom/android/server/TelephonyRegistry;->addOnSubscriptionsChangedListener(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)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;
 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
-HSPLcom/android/server/TelephonyRegistry;->checkNotifyPermission()Z
-HPLcom/android/server/TelephonyRegistry;->createServiceStateIntent(Landroid/telephony/ServiceState;IIZ)Landroid/content/Intent;
-HPLcom/android/server/TelephonyRegistry;->fillInSignalStrengthNotifierBundle(Landroid/telephony/SignalStrength;Landroid/os/Bundle;)V
-HPLcom/android/server/TelephonyRegistry;->getLocationSanitizedConfigs(Ljava/util/List;)Ljava/util/List;
+HPLcom/android/server/TelephonyRegistry;->checkNotifyPermission()Z
+HPLcom/android/server/TelephonyRegistry;->createServiceStateBroadcastOptions(IILjava/lang/String;)Landroid/app/BroadcastOptions;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;
+HPLcom/android/server/TelephonyRegistry;->createServiceStateIntent(Landroid/telephony/ServiceState;IIZ)Landroid/content/Intent;+]Landroid/telephony/ServiceState;Landroid/telephony/ServiceState;]Landroid/content/Intent;Landroid/content/Intent;
+HPLcom/android/server/TelephonyRegistry;->fillInSignalStrengthNotifierBundle(Landroid/telephony/SignalStrength;Landroid/os/Bundle;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/telephony/SignalStrength;Landroid/telephony/SignalStrength;
+HPLcom/android/server/TelephonyRegistry;->getLocationSanitizedConfigs(Ljava/util/List;)Ljava/util/List;+]Landroid/telephony/PhysicalChannelConfig;Landroid/telephony/PhysicalChannelConfig;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/TelephonyRegistry;->getPhoneIdFromSubId(I)I
 HSPLcom/android/server/TelephonyRegistry;->getTelephonyManager()Landroid/telephony/TelephonyManager;
-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;->handleRemoveListLocked()V+]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/TelephonyRegistry;->idMatch(Lcom/android/server/TelephonyRegistry$Record;II)Z
 HSPLcom/android/server/TelephonyRegistry;->isPhoneStatePermissionRequired(Ljava/util/Set;Ljava/lang/String;Landroid/os/UserHandle;)Z
+HSPLcom/android/server/TelephonyRegistry;->isPrecisePhoneStatePermissionRequired(Ljava/util/Set;)Z+]Ljava/util/Set;Ljava/util/HashSet;
 HSPLcom/android/server/TelephonyRegistry;->isPrivilegedPhoneStatePermissionRequired(Ljava/util/Set;)Z
 HPLcom/android/server/TelephonyRegistry;->lambda$checkCoarseLocationAccess$3(Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;)Ljava/lang/Boolean;
 HPLcom/android/server/TelephonyRegistry;->lambda$checkFineLocationAccess$2(Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;)Ljava/lang/Boolean;
 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
-HPLcom/android/server/TelephonyRegistry;->notifyBarringInfoChanged(IILandroid/telephony/BarringInfo;)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;]Landroid/telephony/BarringInfo;Landroid/telephony/BarringInfo;
-HPLcom/android/server/TelephonyRegistry;->notifyCellInfoForSubscriber(ILjava/util/List;)V+]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/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;
-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;
-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;
-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;
-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;->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;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/telephony/ServiceState;Landroid/telephony/ServiceState;]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;->remove(Landroid/os/IBinder;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub;,Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+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;
+HPLcom/android/server/TelephonyRegistry;->notifyCellInfoForSubscriber(ILjava/util/List;)V+]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+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;
+HPLcom/android/server/TelephonyRegistry;->notifyDataConnectionForSubscriber(IILandroid/telephony/PreciseDataConnectionState;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/Map;Landroid/util/ArrayMap;]Landroid/util/LocalLog;Landroid/util/LocalLog;]Landroid/telephony/data/ApnSetting;Landroid/telephony/data/ApnSetting;]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;
+HPLcom/android/server/TelephonyRegistry;->notifyDisplayInfoChanged(IILandroid/telephony/TelephonyDisplayInfo;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]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;]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;]Landroid/telephony/TelephonyManager;Landroid/telephony/TelephonyManager;
+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;
+HPLcom/android/server/TelephonyRegistry;->notifyPhysicalChannelConfigForSubscriber(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;
+HPLcom/android/server/TelephonyRegistry;->notifyServiceStateForPhoneId(IILandroid/telephony/ServiceState;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]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;]Landroid/util/LocalLog;Landroid/util/LocalLog;
+HPLcom/android/server/TelephonyRegistry;->notifySignalStrengthForPhoneId(IILandroid/telephony/SignalStrength;)V+]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/TelephonyRegistry;->remove(Landroid/os/IBinder;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 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/ThreadPriorityBooster$1;-><init>(Lcom/android/server/ThreadPriorityBooster;)V
@@ -483,15 +504,15 @@
 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;
-HSPLcom/android/server/UiModeManagerService$13;->getCurrentModeType()I
-HSPLcom/android/server/UiModeManagerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/UiModeManagerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/UiModeManagerService;->-$$Nest$fgetmLock(Lcom/android/server/UiModeManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/UiModeManagerService;->applyConfigurationExternallyLocked()V
 HSPLcom/android/server/UiModeManagerService;->getContrastLocked()F
-HSPLcom/android/server/UiModeManagerService;->sendConfigurationAndStartDreamOrDockAppLocked(Ljava/lang/String;)V
+HPLcom/android/server/UiModeManagerService;->sendConfigurationAndStartDreamOrDockAppLocked(Ljava/lang/String;)V
+HSPLcom/android/server/UiModeManagerService;->unregisterTimeChangeEvent()V
 HSPLcom/android/server/UiModeManagerService;->updateComputedNightModeLocked(Z)V
 HSPLcom/android/server/UiModeManagerService;->updateConfigurationLocked()V
-HSPLcom/android/server/UiModeManagerService;->updateLocked(II)V
+HPLcom/android/server/UiModeManagerService;->updateLocked(II)V
 HSPLcom/android/server/UiThread;-><init>()V
 HSPLcom/android/server/UiThread;->ensureThreadLocked()V
 HSPLcom/android/server/UiThread;->get()Lcom/android/server/UiThread;
@@ -499,12 +520,10 @@
 HSPLcom/android/server/UiThread;->run()V
 HPLcom/android/server/VcnManagementService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/VcnManagementService;Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;)V
 HPLcom/android/server/VcnManagementService$$ExternalSyntheticLambda1;->getOrThrow()Ljava/lang/Object;
-HPLcom/android/server/VcnManagementService$TrackingNetworkCallback;->getNonTestTransportTypes(Landroid/net/NetworkCapabilities;)Ljava/util/Set;
-HPLcom/android/server/VcnManagementService$TrackingNetworkCallback;->hasSameTransportsAndCapabilities(Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;)Z+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Lcom/android/server/VcnManagementService$TrackingNetworkCallback;Lcom/android/server/VcnManagementService$TrackingNetworkCallback;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
-HPLcom/android/server/VcnManagementService$TrackingNetworkCallback;->requiresRestartForImmutableCapabilityChanges(Landroid/net/NetworkCapabilities;)Z+]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Lcom/android/server/VcnManagementService$TrackingNetworkCallback;Lcom/android/server/VcnManagementService$TrackingNetworkCallback;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;
-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;
-HPLcom/android/server/VcnManagementService;->getUnderlyingNetworkPolicy(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;
+HPLcom/android/server/VcnManagementService$TrackingNetworkCallback;->requiresRestartForImmutableCapabilityChanges(Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;)Z+]Landroid/net/LinkProperties;Landroid/net/LinkProperties;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Ljava/util/Map;Landroid/util/ArrayMap;
+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/Set;Landroid/util/ArraySet;
+HPLcom/android/server/VcnManagementService;->getUnderlyingNetworkPolicy(Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;)Landroid/net/vcn/VcnUnderlyingNetworkPolicy;+]Landroid/content/Context;Landroid/app/ContextImpl;
+HPLcom/android/server/VcnManagementService;->lambda$getUnderlyingNetworkPolicy$8(Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;)Landroid/net/vcn/VcnUnderlyingNetworkPolicy;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/net/NetworkCapabilities$Builder;Landroid/net/NetworkCapabilities$Builder;]Lcom/android/server/VcnManagementService;Lcom/android/server/VcnManagementService;]Ljava/util/Map;Landroid/util/ArrayMap;
 HSPLcom/android/server/Watchdog$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/Watchdog;)V
 HSPLcom/android/server/Watchdog$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/Watchdog$BinderThreadMonitor;-><init>()V
@@ -535,18 +554,34 @@
 HSPLcom/android/server/Watchdog;->pauseWatchingCurrentThread(Ljava/lang/String;)V
 HSPLcom/android/server/Watchdog;->run()V
 HSPLcom/android/server/Watchdog;->start()V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$Client;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/view/accessibility/IAccessibilityManagerClient;ILcom/android/server/accessibility/AccessibilityUserState;I)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->addClient(Landroid/view/accessibility/IAccessibilityManagerClient;I)J
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->computeRelevantEventTypesLocked(Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)I
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getCurrentUserIdLocked()I
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getCurrentUserStateLocked()Lcom/android/server/accessibility/AccessibilityUserState;
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->getEnabledAccessibilityServiceList(II)Ljava/util/List;
-HSPLcom/android/server/accessibility/AccessibilityManagerService;->getUserStateLocked(I)Lcom/android/server/accessibility/AccessibilityUserState;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getFocusColor()I
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getFocusStrokeWidth()I
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getRecommendedTimeoutMillis()J
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getUserStateLocked(I)Lcom/android/server/accessibility/AccessibilityUserState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleCreateImeSession(Landroid/util/ArraySet;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleStartInput(Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;Landroid/view/inputmethod/EditorInfo;Z)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->startInput(Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;Landroid/view/inputmethod/EditorInfo;Z)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;
 HSPLcom/android/server/accessibility/AccessibilityTraceManager;->isA11yTracingEnabledForTypes(J)Z
-HSPLcom/android/server/accessibility/FlashNotificationsController$4;->onDisplayChanged(I)V
+HPLcom/android/server/accessibility/FlashNotificationsController$4;->onDisplayChanged(I)V
+HSPLcom/android/server/accessibility/ProxyManager;->getFirstDeviceIdForUidLocked(I)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/companion/virtual/VirtualDeviceManagerInternal;Lcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;]Lcom/android/server/accessibility/ProxyManager;Lcom/android/server/accessibility/ProxyManager;]Ljava/util/Set;Landroid/util/ArraySet;
+HSPLcom/android/server/accessibility/ProxyManager;->getFirstProxyForDeviceIdLocked(I)Lcom/android/server/accessibility/ProxyAccessibilityServiceConnection;
+HSPLcom/android/server/accessibility/ProxyManager;->getLocalVdm()Lcom/android/server/companion/virtual/VirtualDeviceManagerInternal;
+HSPLcom/android/server/accessibility/ProxyManager;->isProxyedDeviceId(I)Z+]Lcom/android/server/accessibility/ProxyManager;Lcom/android/server/accessibility/ProxyManager;
+HSPLcom/android/server/accessibility/UiAutomationManager;->suppressingAccessibilityServicesLocked()Z
 HPLcom/android/server/accounts/AccountManagerService$8;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;ZLandroid/os/Bundle;Landroid/accounts/Account;Ljava/lang/String;ZZLjava/lang/String;IZ[BLcom/android/server/accounts/AccountManagerService$UserAccounts;)V
 HPLcom/android/server/accounts/AccountManagerService$8;->onResult(Landroid/os/Bundle;)V
+HPLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;->hasAccountAccess(Landroid/accounts/Account;I)Z
 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;->checkAccount()V+]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
 HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->sendResult()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
@@ -555,59 +590,63 @@
 HPLcom/android/server/accounts/AccountManagerService$Session;->cancelTimeout()V
 HPLcom/android/server/accounts/AccountManagerService$Session;->checkKeyIntentParceledCorrectly(Landroid/os/Bundle;)Z
 HPLcom/android/server/accounts/AccountManagerService$Session;->close()V
+HPLcom/android/server/accounts/AccountManagerService$Session;->getResponseAndClose()Landroid/accounts/IAccountManagerResponse;
 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;->unbind()V
 HPLcom/android/server/accounts/AccountManagerService$UserAccounts;->-$$Nest$fgetauthTokenCache(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
 HPLcom/android/server/accounts/AccountManagerService$UserAccounts;->-$$Nest$fgetuserDataCache(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
 HSPLcom/android/server/accounts/AccountManagerService$UserAccounts;->-$$Nest$fgetuserId(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)I
 HSPLcom/android/server/accounts/AccountManagerService$UserAccounts;->-$$Nest$fgetvisibilityCache(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
 HPLcom/android/server/accounts/AccountManagerService;->accountExistsCache(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Z+]Ljava/util/HashMap;Ljava/util/LinkedHashMap;
-HPLcom/android/server/accounts/AccountManagerService;->calculatePackageSignatureDigest(Ljava/lang/String;)[B
-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
-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;->filterAccounts(Lcom/android/server/accounts/AccountManagerService$UserAccounts;[Landroid/accounts/Account;ILjava/lang/String;Z)[Landroid/accounts/Account;+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/Map;Ljava/util/LinkedHashMap;]Ljava/util/Set;Ljava/util/LinkedHashMap$LinkedKeySet;
+HPLcom/android/server/accounts/AccountManagerService;->accountTypeManagesContacts(Ljava/lang/String;I)Z+]Lcom/android/server/accounts/IAccountAuthenticatorCache;Lcom/android/server/accounts/AccountAuthenticatorCache;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
+HPLcom/android/server/accounts/AccountManagerService;->calculatePackageSignatureDigest(Ljava/lang/String;I)[B+]Landroid/content/pm/Signature;Landroid/content/pm/Signature;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/accounts/AccountManagerService;->checkPackageSignature(Ljava/lang/String;II)I+]Lcom/android/server/accounts/IAccountAuthenticatorCache;Lcom/android/server/accounts/AccountAuthenticatorCache;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/accounts/AccountManagerService;->filterAccounts(Lcom/android/server/accounts/AccountManagerService$UserAccounts;[Landroid/accounts/Account;ILjava/lang/String;Z)[Landroid/accounts/Account;+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/Map;Ljava/util/LinkedHashMap;
 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;
-HPLcom/android/server/accounts/AccountManagerService;->getAccountVisibilityFromCache(Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)I
-HPLcom/android/server/accounts/AccountManagerService;->getAccounts(ILjava/lang/String;)[Landroid/accounts/Account;
+HSPLcom/android/server/accounts/AccountManagerService;->getAccountVisibilityFromCache(Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)I
+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;
 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;
-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;->getAccountsByTypeForPackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
+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;
+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;
 HPLcom/android/server/accounts/AccountManagerService;->getAuthToken(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Ljava/lang/String;ZZLandroid/os/Bundle;)V
-HPLcom/android/server/accounts/AccountManagerService;->getAuthenticatorTypesInternal(II)[Landroid/accounts/AuthenticatorDescription;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Lcom/android/server/accounts/IAccountAuthenticatorCache;Lcom/android/server/accounts/AccountAuthenticatorCache;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
-HPLcom/android/server/accounts/AccountManagerService;->getPackageNameForUid(I)Ljava/lang/String;
-HPLcom/android/server/accounts/AccountManagerService;->getPackagesAndVisibilityForAccountLocked(Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;+]Ljava/util/Map;Ljava/util/HashMap;
+HPLcom/android/server/accounts/AccountManagerService;->getAuthenticatorTypesInternal(II)[Landroid/accounts/AuthenticatorDescription;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Lcom/android/server/accounts/IAccountAuthenticatorCache;Lcom/android/server/accounts/AccountAuthenticatorCache;]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/accounts/AccountManagerService;->getPackageNameForUid(I)Ljava/lang/String;+]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/accounts/AccountManagerService;->getPackagesAndVisibilityForAccountLocked(Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;+]Ljava/util/Map;Ljava/util/HashMap;
 HPLcom/android/server/accounts/AccountManagerService;->getPassword(Landroid/accounts/Account;)Ljava/lang/String;
 HPLcom/android/server/accounts/AccountManagerService;->getSigninRequiredNotificationId(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Lcom/android/server/accounts/AccountManagerService$NotificationId;
-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;->getTypesForCaller(IIZ)Ljava/util/List;+]Lcom/android/server/accounts/IAccountAuthenticatorCache;Lcom/android/server/accounts/AccountAuthenticatorCache;]Ljava/util/List;Ljava/util/ArrayList;]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;
 HSPLcom/android/server/accounts/AccountManagerService;->getUserAccounts(I)Lcom/android/server/accounts/AccountManagerService$UserAccounts;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
 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;
 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;
 HSPLcom/android/server/accounts/AccountManagerService;->getUserManager()Landroid/os/UserManager;
-HPLcom/android/server/accounts/AccountManagerService;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;I)Z
-HPLcom/android/server/accounts/AccountManagerService;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/UserHandle;)Z
+HSPLcom/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;
+HSPLcom/android/server/accounts/AccountManagerService;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/UserHandle;)Z
+HPLcom/android/server/accounts/AccountManagerService;->hasFeatures(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;[Ljava/lang/String;ILjava/lang/String;)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;
 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;
-HPLcom/android/server/accounts/AccountManagerService;->isPreOApplication(Ljava/lang/String;)Z
-HPLcom/android/server/accounts/AccountManagerService;->isPrivileged(I)Z
-HPLcom/android/server/accounts/AccountManagerService;->isProfileOwner(I)Z
+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;
+HSPLcom/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;
+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;->logGetAuthTokenMetrics(Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/accounts/AccountManagerService;->onAccountAccessed(Ljava/lang/String;)V+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Landroid/accounts/Account;Landroid/accounts/Account;]Landroid/content/Context;Landroid/app/ContextImpl;
 HPLcom/android/server/accounts/AccountManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HPLcom/android/server/accounts/AccountManagerService;->peekAuthToken(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/server/accounts/AccountManagerService;->permissionIsGranted(Landroid/accounts/Account;Ljava/lang/String;II)Z
-HPLcom/android/server/accounts/AccountManagerService;->readAuthTokenInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;
+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;
+HSPLcom/android/server/accounts/AccountManagerService;->permissionIsGranted(Landroid/accounts/Account;Ljava/lang/String;II)Z+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
+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;->readPasswordInternal(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;+]Ljava/util/Map;Ljava/util/HashMap;]Lcom/android/server/accounts/AccountsDb;Lcom/android/server/accounts/AccountsDb;
-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;
+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
+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;
 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;->setAuthToken(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/accounts/AccountManagerService;->setUserData(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
@@ -635,50 +674,46 @@
 HPLcom/android/server/accounts/TokenCache$TokenLruCache;->evict(Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/accounts/TokenCache$TokenLruCache;->putToken(Lcom/android/server/accounts/TokenCache$Key;Lcom/android/server/accounts/TokenCache$Value;)V
 HPLcom/android/server/accounts/TokenCache;->get(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;[B)Lcom/android/server/accounts/TokenCache$Value;
+HSPLcom/android/server/alarm/Alarm$Snapshot;-><init>(Lcom/android/server/alarm/Alarm;)V
+HSPLcom/android/server/alarm/Alarm;->-$$Nest$fgetmPolicyWhenElapsed(Lcom/android/server/alarm/Alarm;)[J
 HSPLcom/android/server/alarm/Alarm;-><init>(IJJJJLandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;Landroid/os/WorkSource;ILandroid/app/AlarmManager$AlarmClockInfo;ILjava/lang/String;Landroid/os/Bundle;I)V+]Landroid/app/PendingIntent;Landroid/app/PendingIntent;
 HSPLcom/android/server/alarm/Alarm;->getMaxWhenElapsed()J
 HSPLcom/android/server/alarm/Alarm;->getWhenElapsed()J
 HSPLcom/android/server/alarm/Alarm;->makeTag(Landroid/app/PendingIntent;Ljava/lang/String;I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/PendingIntent;Landroid/app/PendingIntent;
-HSPLcom/android/server/alarm/Alarm;->matches(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)Z+]Landroid/app/IAlarmListener;Landroid/app/IAlarmListener$Stub$Proxy;,Landroid/app/AlarmManager$ListenerWrapper;,Lcom/android/server/alarm/AlarmManagerService$3;]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Ljava/lang/Object;Landroid/os/BinderProxy;,Landroid/app/AlarmManager$ListenerWrapper;,Lcom/android/server/alarm/AlarmManagerService$3;
+HSPLcom/android/server/alarm/Alarm;->matches(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)Z+]Landroid/app/IAlarmListener;Lcom/android/server/alarm/AlarmManagerService$3;]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Ljava/lang/Object;Landroid/os/BinderProxy;,Lcom/android/server/alarm/AlarmManagerService$3;
 HSPLcom/android/server/alarm/Alarm;->setPolicyElapsed(IJ)Z+]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;
 HSPLcom/android/server/alarm/Alarm;->updateWhenElapsed()Z
 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
 HPLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda7;->updateAlarmDelivery(Lcom/android/server/alarm/Alarm;)Z
-HPLcom/android/server/alarm/AlarmManagerService$3;->doAlarm(Landroid/app/IAlarmCompleteListener;)V
-HPLcom/android/server/alarm/AlarmManagerService$3;->lambda$doAlarm$0(Landroid/app/IAlarmCompleteListener;)V
-HPLcom/android/server/alarm/AlarmManagerService$5;->canScheduleExactAlarms(Ljava/lang/String;)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;
-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
-HSPLcom/android/server/alarm/AlarmManagerService$9;->$r8$lambda$j_oNKBugo6y1lLmtBFNKLkU8PQk(Lcom/android/server/alarm/AlarmManagerService$9;ILcom/android/server/alarm/Alarm;)Z
-HSPLcom/android/server/alarm/AlarmManagerService$9;->lambda$updateAlarmsForUid$1(ILcom/android/server/alarm/Alarm;)Z
-HSPLcom/android/server/alarm/AlarmManagerService$9;->updateAlarmsForUid(I)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;
+HPLcom/android/server/alarm/AlarmManagerService$AlarmHandler$$ExternalSyntheticLambda0;-><init>(I)V
+HPLcom/android/server/alarm/AlarmManagerService$AlarmHandler$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/alarm/AlarmManagerService$AlarmHandler;->$r8$lambda$xx2NxLZqj4WvQJDlnTNtg5psLkE(ILcom/android/server/alarm/Alarm;)Z
+HPLcom/android/server/alarm/AlarmManagerService$AlarmHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Ljava/lang/Integer;Ljava/lang/Integer;]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;
+HPLcom/android/server/alarm/AlarmManagerService$AlarmHandler;->lambda$handleMessage$0(ILcom/android/server/alarm/Alarm;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/alarm/AlarmManagerService$AlarmThread;->run()V
+HPLcom/android/server/alarm/AlarmManagerService$AppStandbyTracker;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
 HPLcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;->getTotalWakeupsInWindow(Ljava/lang/String;I)I
 HPLcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;->recordAlarmForPackage(Ljava/lang/String;IJ)V
 HSPLcom/android/server/alarm/AlarmManagerService$ClockReceiver;->scheduleTimeTickEvent()V
+HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->$r8$lambda$cikguhAlOAKqPwS5Rpko4GMuaCE(Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;Lcom/android/server/alarm/Alarm;ZZLcom/android/server/alarm/Alarm;)Z
 HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->alarmComplete(Landroid/os/IBinder;)V
-HPLcom/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;->onSendFinished(Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V+]Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;
-HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->removeLocked(Landroid/app/PendingIntent;Landroid/content/Intent;)Lcom/android/server/alarm/AlarmManagerService$InFlight;+]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->deliverLocked(Lcom/android/server/alarm/Alarm;J)V
+HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->onSendFinished(Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->removeLocked(Landroid/app/PendingIntent;Landroid/content/Intent;)Lcom/android/server/alarm/AlarmManagerService$InFlight;
 HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->removeLocked(Landroid/os/IBinder;)Lcom/android/server/alarm/AlarmManagerService$InFlight;
-HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->updateStatsLocked(Lcom/android/server/alarm/AlarmManagerService$InFlight;)V+]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
-HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->updateTrackingLocked(Lcom/android/server/alarm/AlarmManagerService$InFlight;)V+]Landroid/os/Handler;Lcom/android/server/alarm/AlarmManagerService$AlarmHandler;]Landroid/os/Message;Landroid/os/Message;]Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
-HPLcom/android/server/alarm/AlarmManagerService$InFlight;-><init>(Lcom/android/server/alarm/AlarmManagerService;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/util/ArrayMap;Landroid/util/ArrayMap;
+HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->updateStatsLocked(Lcom/android/server/alarm/AlarmManagerService$InFlight;)V
+HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->updateTrackingLocked(Lcom/android/server/alarm/AlarmManagerService$InFlight;)V
+HPLcom/android/server/alarm/AlarmManagerService$InFlight;-><init>(Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/Alarm;J)V
+HPLcom/android/server/alarm/AlarmManagerService$InFlight;->isBroadcast()Z
 HSPLcom/android/server/alarm/AlarmManagerService$Injector;->getCallingUid()I
 HSPLcom/android/server/alarm/AlarmManagerService$Injector;->getCurrentTimeMillis()J
 HSPLcom/android/server/alarm/AlarmManagerService$Injector;->getElapsedRealtimeMillis()J
 HSPLcom/android/server/alarm/AlarmManagerService$Injector;->isAlarmDriverPresent()Z
 HSPLcom/android/server/alarm/AlarmManagerService$Injector;->setAlarm(IJ)V
-HSPLcom/android/server/alarm/AlarmManagerService$Injector;->waitForAlarm()I
 HPLcom/android/server/alarm/AlarmManagerService$LocalService;->remove(Landroid/app/PendingIntent;)V
 HSPLcom/android/server/alarm/AlarmManagerService$LocalService;->shouldGetBucketElevation(Ljava/lang/String;I)Z+]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
 HSPLcom/android/server/alarm/AlarmManagerService$RemovedAlarm;-><init>(Lcom/android/server/alarm/Alarm;IJJ)V
-HSPLcom/android/server/alarm/AlarmManagerService;->$r8$lambda$ZIYHDpAE-ArJ9HUknNJnUs6dMk8(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;Lcom/android/server/alarm/Alarm;)Z
-HPLcom/android/server/alarm/AlarmManagerService;->$r8$lambda$zMO4Eg7ln2zwH8qUNa-Oj5nFEDQ(Lcom/android/server/alarm/AlarmManagerService;Landroid/util/ArraySet;Lcom/android/server/alarm/Alarm;)Z
 HSPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$fgetmActivityManagerInternal(Lcom/android/server/alarm/AlarmManagerService;)Landroid/app/ActivityManagerInternal;
 HPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$fgetmAppStateTracker(Lcom/android/server/alarm/AlarmManagerService;)Lcom/android/server/AppStateTrackerImpl;
 HSPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$fgetmInjector(Lcom/android/server/alarm/AlarmManagerService;)Lcom/android/server/alarm/AlarmManagerService$Injector;
@@ -687,143 +722,148 @@
 HSPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$smset(JIJJ)I
 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$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
-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;
+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;
 HPLcom/android/server/alarm/AlarmManagerService;->calculateDeliveryPriorities(Ljava/util/ArrayList;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/alarm/AlarmManagerService;->checkAllowNonWakeupDelayLocked(J)Z
 HSPLcom/android/server/alarm/AlarmManagerService;->clampPositive(J)J
 HSPLcom/android/server/alarm/AlarmManagerService;->convertToElapsed(JI)J+]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;
-HSPLcom/android/server/alarm/AlarmManagerService;->decrementAlarmCount(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HPLcom/android/server/alarm/AlarmManagerService;->deliverAlarmsLocked(Ljava/util/ArrayList;J)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
-HPLcom/android/server/alarm/AlarmManagerService;->getAlarmAttributionUid(Lcom/android/server/alarm/Alarm;)I+]Landroid/os/WorkSource;Landroid/os/WorkSource;
+HSPLcom/android/server/alarm/AlarmManagerService;->decrementAlarmCount(II)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HPLcom/android/server/alarm/AlarmManagerService;->deliverAlarmsLocked(Ljava/util/ArrayList;J)V
+HPLcom/android/server/alarm/AlarmManagerService;->getAlarmAttributionUid(Lcom/android/server/alarm/Alarm;)I
+HSPLcom/android/server/alarm/AlarmManagerService;->getMinimumAllowedWindow(JJ)J
 HPLcom/android/server/alarm/AlarmManagerService;->getQuotaForBucketLocked(I)I
-HPLcom/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;
-HSPLcom/android/server/alarm/AlarmManagerService;->hasScheduleExactAlarmInternal(Ljava/lang/String;I)Z+]Lcom/android/internal/util/jobs/StatLogger;Lcom/android/internal/util/jobs/StatLogger;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
+HPLcom/android/server/alarm/AlarmManagerService;->getStatsLocked(ILjava/lang/String;)Lcom/android/server/alarm/AlarmManagerService$BroadcastStats;
+HSPLcom/android/server/alarm/AlarmManagerService;->hasScheduleExactAlarmInternal(Ljava/lang/String;I)Z+]Lcom/android/internal/util/jobs/StatLogger;Lcom/android/internal/util/jobs/StatLogger;]Lcom/android/server/SystemService;Lcom/android/server/alarm/AlarmManagerService;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
 HSPLcom/android/server/alarm/AlarmManagerService;->hasUseExactAlarmInternal(Ljava/lang/String;I)Z+]Lcom/android/server/SystemService;Lcom/android/server/alarm/AlarmManagerService;
 HSPLcom/android/server/alarm/AlarmManagerService;->increment(Landroid/util/SparseIntArray;I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HSPLcom/android/server/alarm/AlarmManagerService;->incrementAlarmCount(I)V
-HPLcom/android/server/alarm/AlarmManagerService;->isBackgroundRestricted(Lcom/android/server/alarm/Alarm;)Z+]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl;
+HPLcom/android/server/alarm/AlarmManagerService;->isBackgroundRestricted(Lcom/android/server/alarm/Alarm;)Z
 HSPLcom/android/server/alarm/AlarmManagerService;->isExactAlarmChangeEnabled(Ljava/lang/String;I)Z
 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
+HSPLcom/android/server/alarm/AlarmManagerService;->isExemptFromExactAlarmPermissionNoLock(I)Z+]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;
 HSPLcom/android/server/alarm/AlarmManagerService;->isRtc(I)Z
 HSPLcom/android/server/alarm/AlarmManagerService;->isUseExactAlarmEnabled(Ljava/lang/String;I)Z
-HSPLcom/android/server/alarm/AlarmManagerService;->lambda$removeLocked$16(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;Lcom/android/server/alarm/Alarm;)Z+]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;
-HPLcom/android/server/alarm/AlarmManagerService;->lambda$reorderAlarmsBasedOnStandbyBuckets$4(Landroid/util/ArraySet;Lcom/android/server/alarm/Alarm;)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
-HPLcom/android/server/alarm/AlarmManagerService;->logAlarmBatchDelivered(IILandroid/util/SparseIntArray;Landroid/util/SparseIntArray;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HPLcom/android/server/alarm/AlarmManagerService;->logAlarmBatchDelivered(IILandroid/util/SparseIntArray;Landroid/util/SparseIntArray;)V
 HSPLcom/android/server/alarm/AlarmManagerService;->maxTriggerTime(JJJ)J
-HSPLcom/android/server/alarm/AlarmManagerService;->maybeUnregisterTareListenerLocked(Lcom/android/server/alarm/Alarm;)V
+HSPLcom/android/server/alarm/AlarmManagerService;->maybeUnregisterTareListenerLocked(Lcom/android/server/alarm/Alarm;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/tare/EconomyManagerInternal;Lcom/android/server/tare/InternalResourceService$LocalService;]Lcom/android/server/alarm/AlarmStore;Lcom/android/server/alarm/LazyAlarmStore;
 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$$ExternalSyntheticLambda18;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/alarm/AlarmManagerService;->removeAlarmsInternalLocked(Ljava/util/function/Predicate;I)V+]Landroid/app/IAlarmListener;Lcom/android/server/alarm/AlarmManagerService$3;]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Landroid/os/IBinder;Landroid/os/BinderProxy;,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$$ExternalSyntheticLambda24;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda10;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda0;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda6;,Lcom/android/server/alarm/AlarmManagerService$AlarmHandler$$ExternalSyntheticLambda0;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda18;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
 HSPLcom/android/server/alarm/AlarmManagerService;->removeLocked(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;I)V+]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
-HPLcom/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;->reorderAlarmsBasedOnStandbyBuckets(Landroid/util/ArraySet;)Z
 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;
-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
+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;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;,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;
+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;
-HPLcom/android/server/alarm/AlarmManagerService;->setWakelockWorkSource(Landroid/os/WorkSource;ILjava/lang/String;Z)V+]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;
-HPLcom/android/server/alarm/AlarmManagerService;->triggerAlarmsLocked(Ljava/util/ArrayList;J)I+]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;]Lcom/android/server/alarm/AlarmStore;Lcom/android/server/alarm/LazyAlarmStore;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
-HSPLcom/android/server/alarm/AlarmManagerService;->updateNextAlarmClockLocked()V+]Ljava/lang/Object;Landroid/app/AlarmManager$AlarmClockInfo;]Landroid/util/SparseArray;Landroid/util/SparseArray;]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;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/app/AlarmManager$AlarmClockInfo;Landroid/app/AlarmManager$AlarmClockInfo;
+HPLcom/android/server/alarm/AlarmManagerService;->setWakelockWorkSource(Landroid/os/WorkSource;ILjava/lang/String;Z)V
+HPLcom/android/server/alarm/AlarmManagerService;->triggerAlarmsLocked(Ljava/util/ArrayList;J)I+]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;]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;
+HSPLcom/android/server/alarm/AlarmManagerService;->updateNextAlarmClockLocked()V+]Ljava/lang/Object;Landroid/app/AlarmManager$AlarmClockInfo;]Landroid/util/SparseArray;Landroid/util/SparseArray;]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;]Landroid/app/AlarmManager$AlarmClockInfo;Landroid/app/AlarmManager$AlarmClockInfo;
 HSPLcom/android/server/alarm/LazyAlarmStore$$ExternalSyntheticLambda0;->applyAsLong(Ljava/lang/Object;)J+]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;
 HSPLcom/android/server/alarm/LazyAlarmStore;->add(Lcom/android/server/alarm/Alarm;)V
-HPLcom/android/server/alarm/LazyAlarmStore;->addAll(Ljava/util/ArrayList;)V
 HSPLcom/android/server/alarm/LazyAlarmStore;->getNextDeliveryTime()J+]Lcom/android/internal/util/jobs/StatLogger;Lcom/android/internal/util/jobs/StatLogger;]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/alarm/LazyAlarmStore;->getNextWakeupDeliveryTime()J+]Lcom/android/internal/util/jobs/StatLogger;Lcom/android/internal/util/jobs/StatLogger;]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/alarm/LazyAlarmStore;->remove(Ljava/util/function/Predicate;)Ljava/util/ArrayList;+]Ljava/util/function/Predicate;Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda24;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda10;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda0;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda18;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Runnable;Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda3;
+HSPLcom/android/server/alarm/LazyAlarmStore;->remove(Ljava/util/function/Predicate;)Ljava/util/ArrayList;+]Ljava/util/function/Predicate;Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda10;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda0;,Lcom/android/server/alarm/AlarmManagerService$AlarmHandler$$ExternalSyntheticLambda0;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda18;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda24;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Runnable;Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda3;
 HPLcom/android/server/alarm/LazyAlarmStore;->removePendingAlarms(J)Ljava/util/ArrayList;+]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;]Lcom/android/server/alarm/LazyAlarmStore;Lcom/android/server/alarm/LazyAlarmStore;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/alarm/LazyAlarmStore;->size()I
-HSPLcom/android/server/alarm/LazyAlarmStore;->updateAlarmDeliveries(Lcom/android/server/alarm/AlarmStore$AlarmDeliveryCalculator;)Z+]Lcom/android/server/alarm/AlarmStore$AlarmDeliveryCalculator;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/alarm/LazyAlarmStore;->updateAlarmDeliveries(Lcom/android/server/alarm/AlarmStore$AlarmDeliveryCalculator;)Z+]Lcom/android/server/alarm/AlarmStore$AlarmDeliveryCalculator;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/alarm/MetricsHelper;->pushAlarmScheduled(Lcom/android/server/alarm/Alarm;I)V
-HPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda3;-><init>(I)V
-HPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/am/ActiveServices;IZ)V
-HPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/am/ActiveServices;ILandroid/util/ArraySet;)V
 HSPLcom/android/server/am/ActiveServices$1;-><init>(Lcom/android/server/am/ActiveServices;)V
 HSPLcom/android/server/am/ActiveServices$5;-><init>(Lcom/android/server/am/ActiveServices;)V
+HPLcom/android/server/am/ActiveServices$AppOpCallback$1;->onOpNoted(IILjava/lang/String;Ljava/lang/String;II)V
+HPLcom/android/server/am/ActiveServices$AppOpCallback;->incrementOpCountIfNeeded(III)V+]Lcom/android/server/am/ActiveServices$AppOpCallback;Lcom/android/server/am/ActiveServices$AppOpCallback;
 HSPLcom/android/server/am/ActiveServices$ServiceLookupResult;-><init>(Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ServiceRecord;Landroid/content/ComponentName;)V
 HSPLcom/android/server/am/ActiveServices$ServiceMap;->ensureNotStartingBackgroundLocked(Lcom/android/server/am/ServiceRecord;)V+]Landroid/os/Handler;Lcom/android/server/am/ActiveServices$ServiceMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/am/ActiveServices$ServiceMap;->rescheduleDelayedStartsLocked()V
 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
 HSPLcom/android/server/am/ActiveServices$ServiceRestarter;->setService(Lcom/android/server/am/ServiceRecord;)V
+HPLcom/android/server/am/ActiveServices;->$r8$lambda$nA13JuOT7IBGjMOMihYdCnuLm2o(ILcom/android/server/am/ProcessRecord;)Ljava/lang/Integer;
 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
-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
-HSPLcom/android/server/am/ActiveServices;->bindServiceLocked(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;JLjava/lang/String;ZILjava/lang/String;Landroid/app/IApplicationThread;Ljava/lang/String;I)I+]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;]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;
-HSPLcom/android/server/am/ActiveServices;->bringDownServiceIfNeededLocked(Lcom/android/server/am/ServiceRecord;ZZZLjava/lang/String;)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+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/server/am/ForegroundServiceTypeLoggerModule;Lcom/android/server/am/ForegroundServiceTypeLoggerModule;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]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;]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;]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;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;
-HSPLcom/android/server/am/ActiveServices;->bringUpServiceInnerLocked(Lcom/android/server/am/ServiceRecord;IZZZZZ)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]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;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;
-HSPLcom/android/server/am/ActiveServices;->bringUpServiceLocked(Lcom/android/server/am/ServiceRecord;IZZZZZ)Ljava/lang/String;+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+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;->attachApplicationLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)Z+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]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;JLjava/lang/String;ZILjava/lang/String;Landroid/app/IApplicationThread;Ljava/lang/String;I)I+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]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;]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;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/wm/ActivityServiceConnectionsHolder;Lcom/android/server/wm/ActivityServiceConnectionsHolder;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HPLcom/android/server/am/ActiveServices;->bringDownServiceIfNeededLocked(Lcom/android/server/am/ServiceRecord;ZZZLjava/lang/String;)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+]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/ForegroundServiceTypeLoggerModule;Lcom/android/server/am/ForegroundServiceTypeLoggerModule;]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;]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;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Landroid/app/IApplicationThread;Landroid/app/ActivityThread$ApplicationThread;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;
+HSPLcom/android/server/am/ActiveServices;->bringUpServiceInnerLocked(Lcom/android/server/am/ServiceRecord;IZZZZZ)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]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;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]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;->bringUpServiceLocked(Lcom/android/server/am/ServiceRecord;IZZZZZ)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 HSPLcom/android/server/am/ActiveServices;->bumpServiceExecutingLocked(Lcom/android/server/am/ServiceRecord;ZLjava/lang/String;I)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;
 HPLcom/android/server/am/ActiveServices;->canBindingClientStartFgsLocked(I)Ljava/lang/String;
 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;
-HSPLcom/android/server/am/ActiveServices;->deferServiceBringupIfFrozenLocked(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;IIZZILandroid/app/BackgroundStartPrivileges;ZLandroid/app/IServiceConnection;)Z+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]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;->deferServiceBringupIfFrozenLocked(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;IZZILandroid/app/BackgroundStartPrivileges;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;
 HSPLcom/android/server/am/ActiveServices;->dropFgsNotificationStateLocked(Lcom/android/server/am/ServiceRecord;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;
-HPLcom/android/server/am/ActiveServices;->findServiceLocked(Landroid/content/ComponentName;Landroid/os/IBinder;I)Lcom/android/server/am/ServiceRecord;
+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;
 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;->generateAdditionalSeInfoFromService(Landroid/content/Intent;)Ljava/lang/String;+]Landroid/content/Intent;Landroid/content/Intent;
 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;
-HSPLcom/android/server/am/ActiveServices;->getCallingProcessNameLocked(IILjava/lang/String;)Ljava/lang/String;+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;
 HSPLcom/android/server/am/ActiveServices;->getHostingRecordTriggerType(Lcom/android/server/am/ServiceRecord;)Ljava/lang/String;
 HSPLcom/android/server/am/ActiveServices;->getProcessNameForService(Landroid/content/pm/ServiceInfo;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;ZZ)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 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;
+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;
 HSPLcom/android/server/am/ActiveServices;->getShortProcessNameForStats(ILjava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HSPLcom/android/server/am/ActiveServices;->getShortServiceNameForStats(Lcom/android/server/am/ServiceRecord;)Ljava/lang/String;+]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HSPLcom/android/server/am/ActiveServices;->hasForegroundServiceNotificationLocked(Ljava/lang/String;ILjava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/app/Notification;Landroid/app/Notification;
+HPLcom/android/server/am/ActiveServices;->isBgFgsRestrictionEnabled(Lcom/android/server/am/ServiceRecord;)Z
 HSPLcom/android/server/am/ActiveServices;->isServiceNeededLocked(Lcom/android/server/am/ServiceRecord;ZZ)Z+]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;
-HSPLcom/android/server/am/ActiveServices;->killServicesLocked(Lcom/android/server/am/ProcessRecord;Z)V
-HPLcom/android/server/am/ActiveServices;->lambda$canBindingClientStartFgsLocked$5(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$6(IZLcom/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;->killServicesLocked(Lcom/android/server/am/ProcessRecord;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]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$canBindingClientStartFgsLocked$6(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$7(IZLcom/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$4(ILcom/android/server/am/ProcessRecord;)Ljava/lang/Integer;
 HPLcom/android/server/am/ActiveServices;->logFGSStateChangeLocked(Lcom/android/server/am/ServiceRecord;IIII)V
+HSPLcom/android/server/am/ActiveServices;->logFgsApiBeginLocked(III)V
+HPLcom/android/server/am/ActiveServices;->logFgsApiEndLocked(III)V
 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;
-HPLcom/android/server/am/ActiveServices;->maybeStopShortFgsTimeoutLocked(Lcom/android/server/am/ServiceRecord;)V+]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;
+HPLcom/android/server/am/ActiveServices;->maybeStopShortFgsTimeoutLocked(Lcom/android/server/am/ServiceRecord;)V+]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 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;
-HPLcom/android/server/am/ActiveServices;->performScheduleRestartLocked(Lcom/android/server/am/ServiceRecord;Ljava/lang/String;Ljava/lang/String;J)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;->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/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]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;
-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;]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/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;->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/ActiveServices;Lcom/android/server/am/ActiveServices;]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;
+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;
+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/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/ActivityThread$ApplicationThread;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+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;]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/ActivityThread$ApplicationThread;
+HSPLcom/android/server/am/ActiveServices;->requestServiceBindingLocked(Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/IntentBindRecord;ZZ)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]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/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+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/ActiveServices;->resetFgsRestrictionLocked(Lcom/android/server/am/ServiceRecord;)V
+HSPLcom/android/server/am/ActiveServices;->resetFgsRestrictionLocked(Lcom/android/server/am/ServiceRecord;)V+]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;
 HSPLcom/android/server/am/ActiveServices;->retrieveServiceLocked(Landroid/content/Intent;Ljava/lang/String;ZILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIZZZZLandroid/app/ForegroundServiceDelegationOptions;Z)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;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]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;->scheduleServiceRestartLocked(Lcom/android/server/am/ServiceRecord;Z)Z
+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;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;
-HSPLcom/android/server/am/ActiveServices;->serviceDoneExecutingLocked(Lcom/android/server/am/ServiceRecord;IIIZ)V+]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;->serviceDoneExecutingLocked(Lcom/android/server/am/ServiceRecord;ZZZ)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]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;->setFgsRestrictionLocked(Ljava/lang/String;IILandroid/content/Intent;Lcom/android/server/am/ServiceRecord;ILandroid/app/BackgroundStartPrivileges;Z)V+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
+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/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ServiceRecord$StartItem;Lcom/android/server/am/ServiceRecord$StartItem;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;
+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;
+HSPLcom/android/server/am/ActiveServices;->serviceDoneExecutingLocked(Lcom/android/server/am/ServiceRecord;ZZZI)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]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/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;
 HPLcom/android/server/am/ActiveServices;->setServiceForegroundInnerLocked(Lcom/android/server/am/ServiceRecord;ILandroid/app/Notification;II)V
-HSPLcom/android/server/am/ActiveServices;->shouldAllowFgsStartForegroundNoBindingCheckLocked(IIILjava/lang/String;Lcom/android/server/am/ServiceRecord;Landroid/app/BackgroundStartPrivileges;)I+]Landroid/app/BackgroundStartPrivileges;Landroid/app/BackgroundStartPrivileges;]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;]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;Landroid/app/BackgroundStartPrivileges;)I+]Landroid/app/BackgroundStartPrivileges;Landroid/app/BackgroundStartPrivileges;]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;Landroid/app/BackgroundStartPrivileges;Z)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;Landroid/app/BackgroundStartPrivileges;Z)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/BackgroundStartPrivileges;Landroid/app/BackgroundStartPrivileges;]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;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/ActiveServices;->shouldAllowFgsWhileInUsePermissionLocked(Ljava/lang/String;IILcom/android/server/am/ProcessRecord;Landroid/app/BackgroundStartPrivileges;)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/BackgroundStartPrivileges;Landroid/app/BackgroundStartPrivileges;]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;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActiveServices;->shouldShowFgsNotificationLocked(Lcom/android/server/am/ServiceRecord;)Z
-HSPLcom/android/server/am/ActiveServices;->startServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IIZLjava/lang/String;Ljava/lang/String;ILandroid/app/BackgroundStartPrivileges;)Landroid/content/ComponentName;
-HSPLcom/android/server/am/ActiveServices;->startServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IIZLjava/lang/String;Ljava/lang/String;ILandroid/app/BackgroundStartPrivileges;ZILjava/lang/String;Ljava/lang/String;)Landroid/content/ComponentName;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]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;->signalForegroundServiceObserversLocked(Lcom/android/server/am/ServiceRecord;)V+]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
+HSPLcom/android/server/am/ActiveServices;->startServiceInnerLocked(Lcom/android/server/am/ActiveServices$ServiceMap;Landroid/content/Intent;Lcom/android/server/am/ServiceRecord;ZZILjava/lang/String;IZLjava/lang/String;)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/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/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]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;IILjava/lang/String;IZZLandroid/app/BackgroundStartPrivileges;Ljava/lang/String;)Landroid/content/ComponentName;+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Landroid/app/BackgroundStartPrivileges;Landroid/app/BackgroundStartPrivileges;]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;
+HPLcom/android/server/am/ActiveServices;->startServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IIZLjava/lang/String;Ljava/lang/String;ILandroid/app/BackgroundStartPrivileges;)Landroid/content/ComponentName;
+HSPLcom/android/server/am/ActiveServices;->startServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IIZLjava/lang/String;Ljava/lang/String;ILandroid/app/BackgroundStartPrivileges;ZILjava/lang/String;Ljava/lang/String;)Landroid/content/ComponentName;+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]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/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
 HSPLcom/android/server/am/ActiveServices;->startServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IIZLjava/lang/String;Ljava/lang/String;IZILjava/lang/String;Ljava/lang/String;)Landroid/content/ComponentName;+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
-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;
-HSPLcom/android/server/am/ActiveServices;->stopServiceAndUpdateAllowlistManagerLocked(Lcom/android/server/am/ServiceRecord;)V+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
+HPLcom/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;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 HPLcom/android/server/am/ActiveServices;->stopServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IZILjava/lang/String;Ljava/lang/String;)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/ServiceRecord$StartItem;Lcom/android/server/am/ServiceRecord$StartItem;]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;
+HSPLcom/android/server/am/ActiveServices;->traceInstant(Ljava/lang/String;Lcom/android/server/am/ServiceRecord;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HPLcom/android/server/am/ActiveServices;->unbindFinishedLocked(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent;Z)V
-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/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]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+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]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;->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;->updateForegroundApps(Lcom/android/server/am/ActiveServices$ServiceMap;)V
 HSPLcom/android/server/am/ActiveServices;->updateNumForegroundServicesLocked()V+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;
 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
+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;->validateForegroundServiceType(Lcom/android/server/am/ServiceRecord;III)Landroid/util/Pair;
 HPLcom/android/server/am/ActiveServices;->verifyPackage(Ljava/lang/String;I)Z
+HPLcom/android/server/am/ActiveServices;->withinFgsDeferRateLimit(Lcom/android/server/am/ServiceRecord;J)Z
 HSPLcom/android/server/am/ActiveUids;-><init>(Lcom/android/server/am/ActivityManagerService;Z)V
 HSPLcom/android/server/am/ActiveUids;->clear()V
 HSPLcom/android/server/am/ActiveUids;->get(I)Lcom/android/server/am/UidRecord;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
@@ -839,28 +879,24 @@
 HSPLcom/android/server/am/ActivityManagerConstants;-><init>(Landroid/content/Context;Lcom/android/server/am/ActivityManagerService;Landroid/os/Handler;)V
 HSPLcom/android/server/am/ActivityManagerConstants;->computeEmptyProcessLimit(I)I
 HSPLcom/android/server/am/ActivityManagerProcLock;-><init>()V
-HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda23;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda26;-><init>(Lcom/android/server/am/ActivityManagerService;)V
-HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda26;->run()V
-HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda7;-><init>([ILjava/lang/String;)V
-HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda7;-><init>([ILjava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda9;-><init>(ZIZI[Ljava/util/List;)V
 HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;)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$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;ZLandroid/os/DropBoxManager;)V
 HSPLcom/android/server/am/ActivityManagerService$16;->run()V
 HSPLcom/android/server/am/ActivityManagerService$1;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService$2;-><init>(Lcom/android/server/am/ActivityManagerService;)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(Lcom/android/server/am/BroadcastFilter;Ljava/util/List;)Z+]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;
 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;
+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;
 HSPLcom/android/server/am/ActivityManagerService$3;->newResult(Lcom/android/server/pm/Computer;Ljava/lang/Object;IIJ)Ljava/lang/Object;+]Lcom/android/server/am/ActivityManagerService$3;Lcom/android/server/am/ActivityManagerService$3;
 HSPLcom/android/server/am/ActivityManagerService$AppDeathRecipient;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;ILandroid/app/IApplicationThread;)V
@@ -885,40 +921,42 @@
 HSPLcom/android/server/am/ActivityManagerService$Lifecycle;->onStart()V
 HSPLcom/android/server/am/ActivityManagerService$Lifecycle;->startService(Lcom/android/server/SystemServiceManager;Lcom/android/server/wm/ActivityTaskManagerService;)Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService$LocalService;-><init>(Lcom/android/server/am/ActivityManagerService;)V
-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;
+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;->broadcastIntent(Landroid/content/Intent;Landroid/content/IIntentReceiver;[Ljava/lang/String;ZI[ILjava/util/function/BiFunction;Landroid/os/Bundle;)I
 HPLcom/android/server/am/ActivityManagerService$LocalService;->broadcastIntentInPackage(Ljava/lang/String;Ljava/lang/String;IIILandroid/content/Intent;Ljava/lang/String;Landroid/app/IApplicationThread;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;Ljava/lang/String;Landroid/os/Bundle;ZZILandroid/app/BackgroundStartPrivileges;[I)I+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->checkContentProviderAccess(Ljava/lang/String;I)Ljava/lang/String;+]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->deletePendingTopUid(IJ)V
 HPLcom/android/server/am/ActivityManagerService$LocalService;->enforceBroadcastOptionsPermissions(Landroid/os/Bundle;I)V+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/server/am/ActivityManagerService$LocalService;->getCurrentUserId()I
-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;
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->getCurrentUserId()I+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
+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;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HPLcom/android/server/am/ActivityManagerService$LocalService;->getPackageNameByPid(I)Ljava/lang/String;
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->getRestrictionLevel(I)I+]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;
 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;->isAppBad(Ljava/lang/String;I)Z
+HPLcom/android/server/am/ActivityManagerService$LocalService;->isAppBad(Ljava/lang/String;I)Z
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->isAppStartModeDisabled(ILjava/lang/String;)Z+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActivityManagerService$LocalService;->isAssociatedCompanionApp(II)Z+]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->isBgAutoRestrictedBucketFeatureFlagEnabled()Z+]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;
-HSPLcom/android/server/am/ActivityManagerService$LocalService;->isDeviceOwner(I)Z
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->isBooted()Z
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->isBooting()Z
+HPLcom/android/server/am/ActivityManagerService$LocalService;->isDeviceOwner(I)Z
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->isPendingTopUid(I)Z+]Lcom/android/server/am/PendingStartActivityUids;Lcom/android/server/am/PendingStartActivityUids;
-HSPLcom/android/server/am/ActivityManagerService$LocalService;->isProfileOwner(I)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/am/ActivityManagerService$LocalService;->isProfileOwner(I)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/am/ActivityManagerService$LocalService;->isTempAllowlistedForFgsWhileInUse(I)Z+]Lcom/android/server/am/FgsTempAllowList;Lcom/android/server/am/FgsTempAllowList;
 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;->noteAlarmFinish(Landroid/app/PendingIntent;Landroid/os/WorkSource;ILjava/lang/String;)V
-HPLcom/android/server/am/ActivityManagerService$LocalService;->noteAlarmStart(Landroid/app/PendingIntent;Landroid/os/WorkSource;ILjava/lang/String;)V
-HSPLcom/android/server/am/ActivityManagerService$LocalService;->notifyNetworkPolicyRulesUpdated(IJ)V
+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
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->onUidBlockedReasonsChanged(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HPLcom/android/server/am/ActivityManagerService$LocalService;->scheduleAppGcs()V
 HPLcom/android/server/am/ActivityManagerService$LocalService;->setPendingIntentAllowBgActivityStarts(Landroid/content/IIntentSender;Landroid/os/IBinder;I)V+]Lcom/android/server/am/PendingIntentRecord;Lcom/android/server/am/PendingIntentRecord;
 HPLcom/android/server/am/ActivityManagerService$LocalService;->setPendingIntentAllowlistDuration(Landroid/content/IIntentSender;Landroid/os/IBinder;JIILjava/lang/String;)V+]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;
-HPLcom/android/server/am/ActivityManagerService$LocalService;->startServiceInPackage(ILandroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;ILandroid/app/BackgroundStartPrivileges;)Landroid/content/ComponentName;
-HSPLcom/android/server/am/ActivityManagerService$LocalService;->updateDeviceIdleTempAllowlist([IIZJIILjava/lang/String;I)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->shouldWaitForNetworkRulesUpdate(I)Z
+HPLcom/android/server/am/ActivityManagerService$LocalService;->startServiceInPackage(ILandroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;ILandroid/app/BackgroundStartPrivileges;)Landroid/content/ComponentName;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->updateDeviceIdleTempAllowlist([IIZJIILjava/lang/String;I)V+]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$MainHandler$$ExternalSyntheticLambda1;-><init>(Landroid/os/Message;)V
 HSPLcom/android/server/am/ActivityManagerService$MainHandler$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/am/ActivityManagerService$MainHandler$$ExternalSyntheticLambda2;-><init>(Landroid/os/Message;)V
@@ -926,27 +964,29 @@
 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;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Landroid/app/IUiAutomationConnection;Landroid/app/IUiAutomationConnection$Stub$Proxy;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;
+HSPLcom/android/server/am/ActivityManagerService$MainHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Thread;Lcom/android/server/am/ActivityManagerService$MainHandler$1;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Ljava/lang/Long;Ljava/lang/Long;]Lcom/android/server/am/AppProfiler$CachedAppsWatermarkData;Lcom/android/server/am/AppProfiler$CachedAppsWatermarkData;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/AnrHelper;Lcom/android/server/am/AnrHelper;
 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;
 HSPLcom/android/server/am/ActivityManagerService$PendingTempAllowlist;-><init>(IJILjava/lang/String;II)V
+HPLcom/android/server/am/ActivityManagerService$PermissionController;->getPackagesForUid(I)[Ljava/lang/String;
 HSPLcom/android/server/am/ActivityManagerService$PidMap;-><init>()V
-HSPLcom/android/server/am/ActivityManagerService$PidMap;->doAddInternal(ILcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActivityManagerService$PidMap;->doRemoveInternal(ILcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/ActivityManagerService$PidMap;->get(I)Lcom/android/server/am/ProcessRecord;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/am/ActivityManagerService$PidMap;->valueAt(I)Lcom/android/server/am/ProcessRecord;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/am/ActivityManagerService$StickyBroadcast;-><init>()V
+HSPLcom/android/server/am/ActivityManagerService$StickyBroadcast;->create(Landroid/content/Intent;ZII)Lcom/android/server/am/ActivityManagerService$StickyBroadcast;
 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/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;
-HPLcom/android/server/am/ActivityManagerService;->$r8$lambda$ABvbX_MElMEP9OLzjljGqE9fCYo(ZIZI[Ljava/util/List;Lcom/android/server/am/ProcessRecord;)V
-HSPLcom/android/server/am/ActivityManagerService;->$r8$lambda$KmTxpbmZ4113m_7iq4o-nJjpAK0(Lcom/android/server/am/ActivityManagerService;)V
-HSPLcom/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$UiHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/am/UidObserverController;Lcom/android/server/am/UidObserverController;]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;
+HPLcom/android/server/am/ActivityManagerService;->$r8$lambda$88DAuNh7cKCKaHJTBvZhIl7n2MQ(ZIZI[Ljava/util/List;Lcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/ActivityManagerService;->$r8$lambda$OPoiAXorN-km2DU3z2z1P5jr_aA(Lcom/android/server/am/ActivityManagerService;)V
+HPLcom/android/server/am/ActivityManagerService;->$r8$lambda$mLSgj0_-2qvr-t2-xE8C-lAuaIg([ILjava/lang/String;Lcom/android/server/am/ProcessRecord;)V
 HPLcom/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$fgetmDeviceOwnerUid(Lcom/android/server/am/ActivityManagerService;)I
 HPLcom/android/server/am/ActivityManagerService;->-$$Nest$fgetmFgsWhileInUseTempAllowList(Lcom/android/server/am/ActivityManagerService;)Lcom/android/server/am/FgsTempAllowList;
 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;
+HPLcom/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;
-HSPLcom/android/server/am/ActivityManagerService;->-$$Nest$misAppBad(Lcom/android/server/am/ActivityManagerService;Ljava/lang/String;I)Z
+HPLcom/android/server/am/ActivityManagerService;->-$$Nest$misAppBad(Lcom/android/server/am/ActivityManagerService;Ljava/lang/String;I)Z
 HSPLcom/android/server/am/ActivityManagerService;->-$$Nest$mstart(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService;-><clinit>()V
 HSPLcom/android/server/am/ActivityManagerService;-><init>(Landroid/content/Context;Lcom/android/server/wm/ActivityTaskManagerService;)V
@@ -965,36 +1005,41 @@
 HSPLcom/android/server/am/ActivityManagerService;->boostPriorityForProcLockedSection()V+]Lcom/android/server/ThreadPriorityBooster;Lcom/android/server/ThreadPriorityBooster;
 HPLcom/android/server/am/ActivityManagerService;->broadcastIntentInPackage(Ljava/lang/String;Ljava/lang/String;IIILandroid/content/Intent;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;Ljava/lang/String;Landroid/os/Bundle;ZZILandroid/app/BackgroundStartPrivileges;[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;Lcom/android/server/am/ProcessRecord;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/os/Bundle;ZZIIIIILandroid/app/BackgroundStartPrivileges;[ILjava/util/function/BiFunction;)I+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/ActivityManagerService;->broadcastIntentLockedTraced(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/app/BroadcastOptions;ZZIIIIILandroid/app/BackgroundStartPrivileges;[ILjava/util/function/BiFunction;)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/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;]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;]Landroid/content/IIntentReceiver;megamorphic_types]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/BroadcastQueueModernImpl;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
+HSPLcom/android/server/am/ActivityManagerService;->broadcastIntentLockedTraced(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/app/BroadcastOptions;ZZIIIIILandroid/app/BackgroundStartPrivileges;[ILjava/util/function/BiFunction;)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/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;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]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;]Landroid/content/IIntentReceiver;megamorphic_types]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/BroadcastQueueModernImpl;]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;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;
 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;->broadcastQueueForFlags(I)Lcom/android/server/am/BroadcastQueue;
+HPLcom/android/server/am/ActivityManagerService;->broadcastQueueForFlags(I)Lcom/android/server/am/BroadcastQueue;
 HSPLcom/android/server/am/ActivityManagerService;->broadcastQueueForFlags(ILjava/lang/Object;)Lcom/android/server/am/BroadcastQueue;
 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;
 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/util/List;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]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
 HSPLcom/android/server/am/ActivityManagerService;->checkPermission(Ljava/lang/String;II)I
+HSPLcom/android/server/am/ActivityManagerService;->checkTime(JLjava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/am/ActivityManagerService;->checkUriPermission(Landroid/net/Uri;IIIILandroid/os/IBinder;)I+]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;]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;->cleanUpApplicationRecordLocked(Lcom/android/server/am/ProcessRecord;IZZIZZ)Z
-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;->cleanUpApplicationRecordLocked(Lcom/android/server/am/ProcessRecord;IZZIZZ)Z+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Lcom/android/server/am/PhantomProcessList;Lcom/android/server/am/PhantomProcessList;]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;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueueModernImpl;]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;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
+HSPLcom/android/server/am/ActivityManagerService;->clearProcessForegroundLocked(Lcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/ActivityManagerService;->collectReceiverComponents(Landroid/content/Intent;Ljava/lang/String;I[I[I)Ljava/util/List;+]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/ArrayList;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
+HSPLcom/android/server/am/ActivityManagerService;->compatibilityInfoForPackage(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/CompatibilityInfo;
 HSPLcom/android/server/am/ActivityManagerService;->enforceAllowedToStartOrBindServiceIfSdkSandbox(Landroid/content/Intent;)V
 HSPLcom/android/server/am/ActivityManagerService;->enforceBroadcastOptionPermissionsInternal(Landroid/app/BroadcastOptions;I)V+]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->enforceBroadcastOptionPermissionsInternal(Landroid/os/Bundle;I)V+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/ActivityManagerService;->enforceNotIsolatedCaller(Ljava/lang/String;)V
-HSPLcom/android/server/am/ActivityManagerService;->enforceNotIsolatedOrSdkSandboxCaller(Ljava/lang/String;)V+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/ActivityManagerService;->enforceDumpPermissionForPackage(Ljava/lang/String;IILjava/lang/String;)I
+HSPLcom/android/server/am/ActivityManagerService;->enforceNotIsolatedCaller(Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/ActivityManagerService;->enforceNotIsolatedOrSdkSandboxCaller(Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->enqueueOomAdjTargetLocked(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;
 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
-HSPLcom/android/server/am/ActivityManagerService;->filterNonExportedComponents(Landroid/content/Intent;IILjava/util/List;Lcom/android/server/compat/PlatformCompat;Ljava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/ComponentInfo;Landroid/content/pm/ActivityInfo;
+HSPLcom/android/server/am/ActivityManagerService;->filterNonExportedComponents(Landroid/content/Intent;IILjava/util/List;Lcom/android/server/compat/PlatformCompat;Ljava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/ComponentInfo;Landroid/content/pm/ActivityInfo;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;
 HSPLcom/android/server/am/ActivityManagerService;->finishAttachApplication(J)V
-HSPLcom/android/server/am/ActivityManagerService;->finishAttachApplicationInner(JII)V
-HSPLcom/android/server/am/ActivityManagerService;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/os/Bundle;Landroid/os/Bundle;
+HSPLcom/android/server/am/ActivityManagerService;->finishAttachApplicationInner(JII)V+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/am/HostingRecord;Lcom/android/server/am/HostingRecord;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]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;->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/BroadcastQueueModernImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/am/ActivityManagerService;->forceStopPackageLocked(Ljava/lang/String;IZZZZZILjava/lang/String;I)Z
 HSPLcom/android/server/am/ActivityManagerService;->getAppInfoForUser(Landroid/content/pm/ApplicationInfo;I)Landroid/content/pm/ApplicationInfo;+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;
 HPLcom/android/server/am/ActivityManagerService;->getAppOpsManager()Landroid/app/AppOpsManager;
-HSPLcom/android/server/am/ActivityManagerService;->getAppStartModeLOSP(ILjava/lang/String;IIZZZ)I+]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;
+HSPLcom/android/server/am/ActivityManagerService;->getAppStartModeLOSP(ILjava/lang/String;IIZZZ)I+]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]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;->getBackgroundLaunchBroadcasts()Landroid/util/ArraySet;
 HSPLcom/android/server/am/ActivityManagerService;->getCommonServicesLocked(Z)Landroid/util/ArrayMap;
 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;
@@ -1002,27 +1047,30 @@
 HSPLcom/android/server/am/ActivityManagerService;->getHistoricalProcessExitReasons(Ljava/lang/String;III)Landroid/content/pm/ParceledListSlice;
 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;
 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;
+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;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
 HSPLcom/android/server/am/ActivityManagerService;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
-HSPLcom/android/server/am/ActivityManagerService;->getMemoryTrimLevel()I
+HPLcom/android/server/am/ActivityManagerService;->getMemoryTrimLevel()I
 HSPLcom/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;
-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;
+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;
 HPLcom/android/server/am/ActivityManagerService;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;
 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;->getProcessesInErrorState()Ljava/util/List;+]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;->getRecordForAppLOSP(Landroid/app/IApplicationThread;)Lcom/android/server/am/ProcessRecord;+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
-HSPLcom/android/server/am/ActivityManagerService;->getRecordForAppLOSP(Landroid/os/IBinder;)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;->getRealProcessStateLocked(Lcom/android/server/am/ProcessRecord;I)I+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ActivityManagerService;->getRecordForAppLOSP(Landroid/app/IApplicationThread;)Lcom/android/server/am/ProcessRecord;+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/app/IApplicationThread;Landroid/app/ActivityThread$ApplicationThread;
+HSPLcom/android/server/am/ActivityManagerService;->getRecordForAppLOSP(Landroid/os/IBinder;)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/internal/app/ProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/IApplicationThread;Landroid/app/ActivityThread$ApplicationThread;
+HSPLcom/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;
 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;
 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;
 HSPLcom/android/server/am/ActivityManagerService;->getUidProcessCapabilityLocked(I)I+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
+HSPLcom/android/server/am/ActivityManagerService;->getUidProcessState(ILjava/lang/String;)I
 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+]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/am/ActivityManagerService;->handleAppDiedLocked(Lcom/android/server/am/ProcessRecord;IZZZ)V
 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
@@ -1033,37 +1081,45 @@
 HPLcom/android/server/am/ActivityManagerService;->idleUids()V
 HSPLcom/android/server/am/ActivityManagerService;->initPowerManagement()V
 HSPLcom/android/server/am/ActivityManagerService;->isAllowlistedForFgsStartLOSP(I)Lcom/android/server/am/ActivityManagerService$FgsTempAllowListItem;+]Lcom/android/server/am/FgsTempAllowList;Lcom/android/server/am/FgsTempAllowList;
-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;->isAppBad(Ljava/lang/String;I)Z+]Lcom/android/server/am/AppErrors;Lcom/android/server/am/AppErrors;
+HSPLcom/android/server/am/ActivityManagerService;->isAppFreezerExemptInstPkg()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;->isCameraActiveForUid(I)Z+]Landroid/util/IntArray;Landroid/util/IntArray;
+HPLcom/android/server/am/ActivityManagerService;->isCameraActiveForUid(I)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;->isOnDeviceIdleAllowlistLOSP(IZ)Z
 HSPLcom/android/server/am/ActivityManagerService;->isReceivingBroadcastLocked(Lcom/android/server/am/ProcessRecord;[I)Z
 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;->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
-HPLcom/android/server/am/ActivityManagerService;->lambda$checkExcessivePowerUsage$22(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;
-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$getProcessesInErrorState$13(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;
-HSPLcom/android/server/am/ActivityManagerService;->lambda$scheduleUpdateBinderHeavyHitterWatcherConfig$35()V
+HPLcom/android/server/am/ActivityManagerService;->lambda$checkExcessivePowerUsage$21(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;
+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;
+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;
+HSPLcom/android/server/am/ActivityManagerService;->lambda$scheduleUpdateBinderHeavyHitterWatcherConfig$34()V
+HPLcom/android/server/am/ActivityManagerService;->logFgsApiBegin(III)V
+HPLcom/android/server/am/ActivityManagerService;->logFgsApiEnd(III)V
 HSPLcom/android/server/am/ActivityManagerService;->logStrictModeViolationToDropBox(Lcom/android/server/am/ProcessRecord;Landroid/os/StrictMode$ViolationInfo;)V
-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;
+HPLcom/android/server/am/ActivityManagerService;->noteAlarmFinish(Landroid/content/IIntentSender;Landroid/os/WorkSource;ILjava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->noteAlarmStart(Landroid/content/IIntentSender;Landroid/os/WorkSource;ILjava/lang/String;)V
 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
 HSPLcom/android/server/am/ActivityManagerService;->notifyBroadcastFinishedLocked(Lcom/android/server/am/BroadcastRecord;)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/os/Message;Landroid/os/Message;
 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;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/server/am/ActivityManagerService;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V
+HSPLcom/android/server/am/ActivityManagerService;->onProcessFreezableChangedLocked(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueueModernImpl;
+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/ActivityThread$ApplicationThread;
+HPLcom/android/server/am/ActivityManagerService;->onWakefulnessChanged(I)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;
 HSPLcom/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;->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/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/HashMap;Ljava/util/HashMap;]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;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/lang/String;Ljava/lang/String;]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/BroadcastQueueModernImpl;]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;Landroid/util/MapCollections$ArrayIterator;]Lcom/android/server/IntentResolver;Lcom/android/server/am/ActivityManagerService$3;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
+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;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/HashMap;Ljava/util/HashMap;]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/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;]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueueModernImpl;]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;]Lcom/android/server/IntentResolver;Lcom/android/server/am/ActivityManagerService$3;]Landroid/app/IApplicationThread;Landroid/app/ActivityThread$ApplicationThread;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/am/ActivityManagerService;->registerStrictModeCallback(Landroid/os/IBinder;)V
 HPLcom/android/server/am/ActivityManagerService;->removeContentProvider(Landroid/os/IBinder;Z)V+]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;
+HSPLcom/android/server/am/ActivityManagerService;->removeOomAdjTargetLocked(Lcom/android/server/am/ProcessRecord;Z)V
 HSPLcom/android/server/am/ActivityManagerService;->removePidLocked(ILcom/android/server/am/ProcessRecord;)Z
-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;
+HPLcom/android/server/am/ActivityManagerService;->removeReceiverLocked(Lcom/android/server/am/ReceiverList;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/ArrayList;Lcom/android/server/am/ReceiverList;]Lcom/android/server/IntentResolver;Lcom/android/server/am/ActivityManagerService$3;
+HSPLcom/android/server/am/ActivityManagerService;->reportGlobalUsageEvent(I)V
+HPLcom/android/server/am/ActivityManagerService;->reportUidFrozenStateChanged([I[I)V+]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
 HSPLcom/android/server/am/ActivityManagerService;->reportUidInfoMessageLocked(Ljava/lang/String;Ljava/lang/String;I)V
 HSPLcom/android/server/am/ActivityManagerService;->resetPriorityAfterLockedSection()V+]Lcom/android/server/ThreadPriorityBooster;Lcom/android/server/ThreadPriorityBooster;
 HSPLcom/android/server/am/ActivityManagerService;->resetPriorityAfterProcLockedSection()V+]Lcom/android/server/ThreadPriorityBooster;Lcom/android/server/ThreadPriorityBooster;
@@ -1071,6 +1127,7 @@
 HSPLcom/android/server/am/ActivityManagerService;->scheduleUpdateBinderHeavyHitterWatcherConfig()V
 HPLcom/android/server/am/ActivityManagerService;->sendIntentSender(Landroid/app/IApplicationThread;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;
 HSPLcom/android/server/am/ActivityManagerService;->serviceDoneExecuting(Landroid/os/IBinder;III)V+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
+HPLcom/android/server/am/ActivityManagerService;->setActivityLocusContext(Landroid/content/ComponentName;Landroid/content/LocusId;Landroid/os/IBinder;)V
 HSPLcom/android/server/am/ActivityManagerService;->setAppIdTempAllowlistStateLSP(IZ)V
 HPLcom/android/server/am/ActivityManagerService;->setHasTopUi(Z)V
 HSPLcom/android/server/am/ActivityManagerService;->setInstaller(Lcom/android/server/pm/Installer;)V
@@ -1080,20 +1137,24 @@
 HSPLcom/android/server/am/ActivityManagerService;->shouldIgnoreDeliveryGroupPolicy(Ljava/lang/String;)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/am/ActivityManagerService;->start()V
 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;->startProcessLocked(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;ZILcom/android/server/am/HostingRecord;IZZ)Lcom/android/server/am/ProcessRecord;
 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/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;IZILjava/lang/String;Ljava/lang/String;)Landroid/content/ComponentName;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]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;->stopAssociationLocked(ILjava/lang/String;IJLandroid/content/ComponentName;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->stopAssociationLocked(ILjava/lang/String;IJLandroid/content/ComponentName;Ljava/lang/String;)V
 HPLcom/android/server/am/ActivityManagerService;->stopService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IZILjava/lang/String;Ljava/lang/String;)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]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+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
-HSPLcom/android/server/am/ActivityManagerService;->tempAllowlistUidLocked(IJILjava/lang/String;II)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;
-HSPLcom/android/server/am/ActivityManagerService;->trimApplicationsLocked(ZI)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;->trimApplications(ZI)V
+HPLcom/android/server/am/ActivityManagerService;->trimApplicationsLocked(ZI)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;
 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
 HSPLcom/android/server/am/ActivityManagerService;->unbindService(Landroid/app/IServiceConnection;)Z+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 HPLcom/android/server/am/ActivityManagerService;->unregisterReceiver(Landroid/content/IIntentReceiver;)V
-HSPLcom/android/server/am/ActivityManagerService;->updateActivityUsageStats(Landroid/content/ComponentName;IILandroid/os/IBinder;Landroid/content/ComponentName;Landroid/app/assist/ActivityId;)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;
+HPLcom/android/server/am/ActivityManagerService;->updateActivityUsageStats(Landroid/content/ComponentName;IILandroid/os/IBinder;Landroid/content/ComponentName;Landroid/app/assist/ActivityId;)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;
+HPLcom/android/server/am/ActivityManagerService;->updateBatteryStats(Landroid/content/ComponentName;IIZ)V
+HSPLcom/android/server/am/ActivityManagerService;->updateCpuStats()V
 HSPLcom/android/server/am/ActivityManagerService;->updateLruProcessLocked(Lcom/android/server/am/ProcessRecord;ZLcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
 HSPLcom/android/server/am/ActivityManagerService;->updateOomAdjLocked(I)V
 HSPLcom/android/server/am/ActivityManagerService;->updateOomAdjLocked(Lcom/android/server/am/ProcessRecord;I)Z+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;
@@ -1102,22 +1163,26 @@
 HSPLcom/android/server/am/ActivityManagerService;->validateAssociationAllowedLocked(Ljava/lang/String;ILjava/lang/String;I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ActivityManagerService$PackageAssociationInfo;Lcom/android/server/am/ActivityManagerService$PackageAssociationInfo;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->validateServiceInstanceName(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/server/am/ActivityManagerService;->verifyBroadcastLocked(Landroid/content/Intent;)Landroid/content/Intent;+]Landroid/content/Intent;Landroid/content/Intent;
-HSPLcom/android/server/am/AnrHelper$$ExternalSyntheticLambda0;-><init>()V
+HSPLcom/android/server/am/AnrHelper$$ExternalSyntheticLambda1;-><init>()V
+HSPLcom/android/server/am/AnrHelper$$ExternalSyntheticLambda2;-><init>()V
 HSPLcom/android/server/am/AnrHelper;-><clinit>()V
 HSPLcom/android/server/am/AnrHelper;-><init>(Lcom/android/server/am/ActivityManagerService;)V
-HSPLcom/android/server/am/AnrHelper;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/util/concurrent/ExecutorService;)V
+HSPLcom/android/server/am/AnrHelper;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/util/concurrent/ExecutorService;Ljava/util/concurrent/ExecutorService;)V
+HSPLcom/android/server/am/AnrHelper;->makeExpiringThreadPoolWithSize(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ThreadPoolExecutor;
 HSPLcom/android/server/am/AppBatteryExemptionTracker$AppBatteryExemptionPolicy;-><init>(Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/AppBatteryExemptionTracker;)V
-HPLcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;->add(Ljava/util/LinkedList;Ljava/util/LinkedList;)Ljava/util/LinkedList;+]Lcom/android/server/am/AppBatteryTracker$BatteryUsage;Lcom/android/server/am/AppBatteryTracker$BatteryUsage;]Lcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;]Ljava/util/Iterator;Ljava/util/LinkedList$ListItr;
+HPLcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;->add(Ljava/util/LinkedList;Ljava/util/LinkedList;)Ljava/util/LinkedList;+]Lcom/android/server/am/AppBatteryTracker$BatteryUsage;Lcom/android/server/am/AppBatteryTracker$BatteryUsage;]Lcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;
 HPLcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;->getBatteryUsageSince(JJI)Landroid/util/Pair;+]Lcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;Lcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;
-HPLcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;->getBatteryUsageSince(JJLjava/util/LinkedList;)Landroid/util/Pair;+]Lcom/android/server/am/AppBatteryTracker$BatteryUsage;Lcom/android/server/am/AppBatteryTracker$BatteryUsage;]Lcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;]Ljava/util/Iterator;Ljava/util/LinkedList$ListItr;
+HPLcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;->getBatteryUsageSince(JJLjava/util/LinkedList;)Landroid/util/Pair;+]Lcom/android/server/am/AppBatteryTracker$BatteryUsage;Lcom/android/server/am/AppBatteryTracker$BatteryUsage;]Lcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;
+HPLcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;->getBatteryUsage(JJ)Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;
 HSPLcom/android/server/am/AppBatteryExemptionTracker;-><init>(Landroid/content/Context;Lcom/android/server/am/AppRestrictionController;)V
 HSPLcom/android/server/am/AppBatteryExemptionTracker;-><init>(Landroid/content/Context;Lcom/android/server/am/AppRestrictionController;Ljava/lang/reflect/Constructor;Ljava/lang/Object;)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;
+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/BaseAppStatePolicy;Lcom/android/server/am/AppBatteryExemptionTracker$AppBatteryExemptionPolicy;]Lcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;Lcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;]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;
 HPLcom/android/server/am/AppBatteryExemptionTracker;->onStateChange(ILjava/lang/String;ZJI)V
 HSPLcom/android/server/am/AppBatteryTracker$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/AppBatteryTracker;)V
 HSPLcom/android/server/am/AppBatteryTracker$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/am/AppBatteryTracker;)V
 HSPLcom/android/server/am/AppBatteryTracker$AppBatteryPolicy;-><init>(Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/AppBatteryTracker;)V
 HPLcom/android/server/am/AppBatteryTracker$AppBatteryPolicy;->calcPercentage(I[D[D)[D+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/am/AppBatteryTracker$AppBatteryPolicy;->getCurrentDrainThresholdIndex(IJJ)I
 HSPLcom/android/server/am/AppBatteryTracker$AppBatteryPolicy;->getFloatArray(Landroid/content/res/TypedArray;)[F
 HPLcom/android/server/am/AppBatteryTracker$AppBatteryPolicy;->handleUidBatteryUsage(ILcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/am/AppBatteryTracker$BatteryUsage;Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/AppBatteryTracker$AppBatteryPolicy;Lcom/android/server/am/AppBatteryTracker$AppBatteryPolicy;]Lcom/android/server/am/BaseAppStatePolicy;Lcom/android/server/am/AppBatteryTracker$AppBatteryPolicy;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;
 HPLcom/android/server/am/AppBatteryTracker$AppBatteryPolicy;->hasLocation(IJJ)Z
@@ -1131,7 +1196,6 @@
 HPLcom/android/server/am/AppBatteryTracker$BatteryUsage;->add(Lcom/android/server/am/AppBatteryTracker$BatteryUsage;)Lcom/android/server/am/AppBatteryTracker$BatteryUsage;
 HPLcom/android/server/am/AppBatteryTracker$BatteryUsage;->calcPercentage(ILcom/android/server/am/AppBatteryTracker$AppBatteryPolicy;)Lcom/android/server/am/AppBatteryTracker$BatteryUsage;+]Lcom/android/server/am/AppBatteryTracker$AppBatteryPolicy;Lcom/android/server/am/AppBatteryTracker$AppBatteryPolicy;
 HPLcom/android/server/am/AppBatteryTracker$BatteryUsage;->getConsumedPowerNoThrow(Landroid/os/UidBatteryConsumer;Landroid/os/BatteryConsumer$Dimensions;)D+]Landroid/os/UidBatteryConsumer;Landroid/os/UidBatteryConsumer;
-HPLcom/android/server/am/AppBatteryTracker$BatteryUsage;->getPercentage()[D
 HPLcom/android/server/am/AppBatteryTracker$BatteryUsage;->scale(D)Lcom/android/server/am/AppBatteryTracker$BatteryUsage;
 HPLcom/android/server/am/AppBatteryTracker$BatteryUsage;->scaleInternal(D)Lcom/android/server/am/AppBatteryTracker$BatteryUsage;
 HPLcom/android/server/am/AppBatteryTracker$BatteryUsage;->setToInternal(Lcom/android/server/am/AppBatteryTracker$BatteryUsage;)Lcom/android/server/am/AppBatteryTracker$BatteryUsage;
@@ -1148,7 +1212,7 @@
 HPLcom/android/server/am/AppBatteryTracker;->getUidBatteryUsage(I)Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;
 HPLcom/android/server/am/AppBatteryTracker;->updateBatteryUsageStatsIfNecessary(JZ)Z
 HPLcom/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;]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;
-HPLcom/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;]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;
+HPLcom/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;]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;
 HSPLcom/android/server/am/AppBindRecord;-><init>(Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/IntentBindRecord;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/AppBindServiceEventsTracker$AppBindServiceEventsPolicy;-><init>(Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/AppBindServiceEventsTracker;)V
 HSPLcom/android/server/am/AppBindServiceEventsTracker;-><init>(Landroid/content/Context;Lcom/android/server/am/AppRestrictionController;)V
@@ -1161,23 +1225,25 @@
 HSPLcom/android/server/am/AppErrors;-><init>(Landroid/content/Context;Lcom/android/server/am/ActivityManagerService;Lcom/android/server/PackageWatchdog;)V
 HSPLcom/android/server/am/AppErrors;->isBadProcess(Ljava/lang/String;I)Z+]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;
 HSPLcom/android/server/am/AppErrors;->resetProcessCrashTime(Ljava/lang/String;I)V
-HSPLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda17;-><init>(Lcom/android/server/am/AppExitInfoTracker;ILjava/util/ArrayList;ILjava/lang/Integer;Ljava/lang/Integer;)V
-HSPLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda17;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-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;
-HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->getExitInfoLocked(IILjava/util/ArrayList;)V+]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda16;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->addInfoLocked(Landroid/util/SparseArray;Landroid/app/ApplicationExitInfo;)V+]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;]Ljava/io/File;Ljava/io/File;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->forEachRecordLocked(Ljava/util/function/BiFunction;)V
+HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->getInfosLocked(Landroid/util/SparseArray;IILjava/util/ArrayList;)V+]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->toListLocked(Ljava/util/List;I)Ljava/util/List;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->writeToProto(Landroid/util/proto/ProtoOutputStream;J)V+]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoExternalSource;-><init>(Lcom/android/server/am/AppExitInfoTracker;Ljava/lang/String;Ljava/lang/Integer;)V
 HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoExternalSource;->addLocked(IILjava/lang/Object;)V
-HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoExternalSource;->remove(II)Landroid/util/Pair;
+HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoExternalSource;->onProcDied(IILjava/lang/Integer;)V
+HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoExternalSource;->remove(II)Landroid/util/Pair;+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/am/AppExitInfoTracker;Lcom/android/server/am/AppExitInfoTracker;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/Long;Ljava/lang/Long;]Lcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;Lcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;
 HSPLcom/android/server/am/AppExitInfoTracker$AppTraceRetriever;-><init>(Lcom/android/server/am/AppExitInfoTracker;)V
 HSPLcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;-><init>(Lcom/android/server/am/AppExitInfoTracker;)V
-HSPLcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;->getUidByIsolatedUid(I)Ljava/lang/Integer;
 HSPLcom/android/server/am/AppExitInfoTracker$KillHandler;-><init>(Lcom/android/server/am/AppExitInfoTracker;Landroid/os/Looper;)V
-HSPLcom/android/server/am/AppExitInfoTracker$KillHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/am/AppExitInfoTracker$KillHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/am/AppExitInfoTracker$AppExitInfoExternalSource;Lcom/android/server/am/AppExitInfoTracker$AppExitInfoExternalSource;]Lcom/android/server/am/AppExitInfoTracker;Lcom/android/server/am/AppExitInfoTracker;
 HSPLcom/android/server/am/AppExitInfoTracker;->$r8$lambda$UtMvJLhwSuQXUjtgYvwdkr3qiHU(Lcom/android/server/am/AppExitInfoTracker;ILjava/util/ArrayList;ILjava/lang/Integer;Ljava/lang/Integer;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;
 HSPLcom/android/server/am/AppExitInfoTracker;-><clinit>()V
 HSPLcom/android/server/am/AppExitInfoTracker;-><init>()V
-HSPLcom/android/server/am/AppExitInfoTracker;->forEachPackageLocked(Ljava/util/function/BiFunction;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/BiFunction;Lcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda17;,Lcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda2;,Lcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda12;,Lcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda14;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;
+HSPLcom/android/server/am/AppExitInfoTracker;->forEachPackageLocked(Ljava/util/function/BiFunction;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/BiFunction;Lcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda2;,Lcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda16;,Lcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda12;,Lcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda14;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;
 HSPLcom/android/server/am/AppExitInfoTracker;->getExitInfo(Ljava/lang/String;IIILjava/util/ArrayList;)V+]Lcom/android/server/am/AppExitInfoTracker;Lcom/android/server/am/AppExitInfoTracker;]Lcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;Lcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/AppExitInfoTracker;->handleNoteProcessDiedLocked(Landroid/app/ApplicationExitInfo;)V
 HSPLcom/android/server/am/AppExitInfoTracker;->init(Lcom/android/server/am/ActivityManagerService;)V
@@ -1185,16 +1251,21 @@
 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;->obtainRawRecord(Lcom/android/server/am/ProcessRecord;J)Landroid/app/ApplicationExitInfo;
 HSPLcom/android/server/am/AppExitInfoTracker;->performLogToStatsdLocked(Landroid/app/ApplicationExitInfo;)V
+HPLcom/android/server/am/AppExitInfoTracker;->scheduleNoteAppKill(Lcom/android/server/am/ProcessRecord;IILjava/lang/String;)V
 HSPLcom/android/server/am/AppExitInfoTracker;->scheduleNoteProcessDied(Lcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/AppExitInfoTracker;->updateExistingExitInfoRecordLocked(Landroid/app/ApplicationExitInfo;Ljava/lang/Integer;Ljava/lang/Integer;)V
+HSPLcom/android/server/am/AppExitInfoTracker;->updateExitInfoIfNecessaryLocked(IILjava/lang/Integer;Ljava/lang/Integer;)Z
 HSPLcom/android/server/am/AppFGSTracker$1;-><init>(Lcom/android/server/am/AppFGSTracker;)V
 HSPLcom/android/server/am/AppFGSTracker$AppFGSPolicy;-><init>(Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/AppFGSTracker;)V
 HSPLcom/android/server/am/AppFGSTracker$MyHandler;-><init>(Lcom/android/server/am/AppFGSTracker;)V
-HSPLcom/android/server/am/AppFGSTracker$MyHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/am/AppFGSTracker$MyHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/am/AppFGSTracker$NotificationListener;-><init>(Lcom/android/server/am/AppFGSTracker;)V
-HSPLcom/android/server/am/AppFGSTracker$NotificationListener;->onNotificationPosted(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)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;
+HPLcom/android/server/am/AppFGSTracker$NotificationListener;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;I)V
 HSPLcom/android/server/am/AppFGSTracker;-><init>(Landroid/content/Context;Lcom/android/server/am/AppRestrictionController;)V
 HSPLcom/android/server/am/AppFGSTracker;-><init>(Landroid/content/Context;Lcom/android/server/am/AppRestrictionController;Ljava/lang/reflect/Constructor;Ljava/lang/Object;)V
-HSPLcom/android/server/am/AppFGSTracker;->hasForegroundServices(Ljava/lang/String;I)Z+]Lcom/android/server/am/AppFGSTracker$PackageDurations;Lcom/android/server/am/AppFGSTracker$PackageDurations;]Lcom/android/server/am/UidProcessMap;Lcom/android/server/am/UidProcessMap;
+HSPLcom/android/server/am/AppFGSTracker;->hasForegroundServices(Ljava/lang/String;I)Z
+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
 HSPLcom/android/server/am/AppMediaSessionTracker$AppMediaSessionPolicy;-><init>(Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/AppMediaSessionTracker;)V
 HSPLcom/android/server/am/AppMediaSessionTracker;-><init>(Landroid/content/Context;Lcom/android/server/am/AppRestrictionController;)V
@@ -1207,58 +1278,54 @@
 HSPLcom/android/server/am/AppPermissionTracker$MyHandler;-><init>(Lcom/android/server/am/AppPermissionTracker;)V
 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;->hashCode()I
+HPLcom/android/server/am/AppPermissionTracker$UidGrantedPermissionState;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
 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;
 HSPLcom/android/server/am/AppPermissionTracker;-><init>(Landroid/content/Context;Lcom/android/server/am/AppRestrictionController;)V
 HSPLcom/android/server/am/AppPermissionTracker;-><init>(Landroid/content/Context;Lcom/android/server/am/AppRestrictionController;Ljava/lang/reflect/Constructor;Ljava/lang/Object;)V
-HPLcom/android/server/am/AppPermissionTracker;->handleOpChanged(IILjava/lang/String;)V
-HPLcom/android/server/am/AppPermissionTracker;->handlePermissionsChangedLocked(I[Lcom/android/server/am/AppPermissionTracker$UidGrantedPermissionState;)V
+HPLcom/android/server/am/AppPermissionTracker;->handleOpChanged(IILjava/lang/String;)V+]Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker$Injector;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/am/AppPermissionTracker;Lcom/android/server/am/AppPermissionTracker;]Lcom/android/server/am/AppPermissionTracker$AppPermissionPolicy;Lcom/android/server/am/AppPermissionTracker$AppPermissionPolicy;
+HPLcom/android/server/am/AppPermissionTracker;->handlePermissionsChangedLocked(I[Lcom/android/server/am/AppPermissionTracker$UidGrantedPermissionState;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/BaseAppStateTracker;Lcom/android/server/am/AppPermissionTracker;]Lcom/android/server/am/AppPermissionTracker$UidGrantedPermissionState;Lcom/android/server/am/AppPermissionTracker$UidGrantedPermissionState;
 HPLcom/android/server/am/AppPermissionTracker;->handlePermissionsInit()V
-HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/AppProfiler;ZI[I[III)V
-HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/AppProfiler;ZI)V
-HSPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda5;->needed(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
-HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/am/ProcessRecord;JJJIJLcom/android/server/am/ProcessProfileRecord;)V
-HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda0;-><init>()V
+HSPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/am/ProcessRecord;JJJIJLcom/android/server/am/ProcessProfileRecord;)V
+HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/am/AppProfiler$1;-><init>(Lcom/android/server/am/AppProfiler;)V
 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$CachedAppsWatermarkData;-><init>(Lcom/android/server/am/AppProfiler;)V
+HPLcom/android/server/am/AppProfiler$CachedAppsWatermarkData;->lambda$updateCachedAppsSnapshot$0(JLcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;
+HSPLcom/android/server/am/AppProfiler$CachedAppsWatermarkData;->updateCachedAppsHighWatermarkIfNecessaryLocked(IJ)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/os/Message;Landroid/os/Message;
+HPLcom/android/server/am/AppProfiler$CachedAppsWatermarkData;->updateCachedAppsSnapshot(J)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/internal/util/MemInfoReader;Lcom/android/internal/util/MemInfoReader;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
 HSPLcom/android/server/am/AppProfiler$ProcessCpuThread;-><init>(Lcom/android/server/am/AppProfiler;Ljava/lang/String;)V
 HSPLcom/android/server/am/AppProfiler$ProcessCpuThread;->run()V
 HSPLcom/android/server/am/AppProfiler$ProfileData;-><init>(Lcom/android/server/am/AppProfiler;)V
 HSPLcom/android/server/am/AppProfiler$ProfileData;-><init>(Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler$ProfileData-IA;)V
-HPLcom/android/server/am/AppProfiler;->$r8$lambda$9Y8vPpAwcstY0x5l19PDFkrCBag(Lcom/android/server/am/AppProfiler;ZI[I[IIILcom/android/server/am/ProcessRecord;)V
-HPLcom/android/server/am/AppProfiler;->$r8$lambda$ZMxvBCdmKztKY09XkWvwH3CpFsk(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
-HSPLcom/android/server/am/AppProfiler;->$r8$lambda$mFGS87lR-BQ7RxkoPyaBVT0IBMk(Lcom/android/server/am/AppProfiler;ZILcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/AppProfiler;->$r8$lambda$wOLGg9BWai5G5VB0Hiikm4E91KE(Lcom/android/server/am/ProcessRecord;)V
 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;
+HPLcom/android/server/am/AppProfiler;->-$$Nest$mcollectPssInBackground(Lcom/android/server/am/AppProfiler;)V+]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;
 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;->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/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]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;->getCpuDelayTimeForPid(I)J+]Lcom/android/internal/os/ProcessCpuTracker;Lcom/android/internal/os/ProcessCpuTracker;
-HSPLcom/android/server/am/AppProfiler;->getLastMemoryLevelLocked()I
+HSPLcom/android/server/am/AppProfiler;->getCpuDelayTimeForPid(I)J
+HPLcom/android/server/am/AppProfiler;->getLastMemoryLevelLocked()I
 HPLcom/android/server/am/AppProfiler;->isLastMemoryLevelNormal()Z
-HPLcom/android/server/am/AppProfiler;->lambda$collectPssInBackground$0(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;
-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;]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;
+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
+HSPLcom/android/server/am/AppProfiler;->lambda$updateLowMemStateLSP$3(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/AppProfiler;->onActivityManagerInternalAdded()V
+HSPLcom/android/server/am/AppProfiler;->onAppDiedLocked(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/AppProfiler;->onCleanupApplicationRecordLocked(Lcom/android/server/am/ProcessRecord;)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;
-HSPLcom/android/server/am/AppProfiler;->requestPssAllProcsLPr(JZZ)V
-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;
+HPLcom/android/server/am/AppProfiler;->recordPssSampleLPf(Lcom/android/server/am/ProcessProfileRecord;IJJJJIJJ)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;
 HSPLcom/android/server/am/AppProfiler;->scheduleAppGcsLPf()V
-HSPLcom/android/server/am/AppProfiler;->scheduleTrimMemoryLSP(Lcom/android/server/am/ProcessRecord;ILjava/lang/String;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]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/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HSPLcom/android/server/am/AppProfiler;->setupProfilerInfoLocked(Landroid/app/IApplicationThread;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ActiveInstrumentation;)Landroid/app/ProfilerInfo;
-HSPLcom/android/server/am/AppProfiler;->trimMemoryUiHiddenIfNecessaryLSP(Lcom/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/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HSPLcom/android/server/am/AppProfiler;->updateCpuStats()V
 HSPLcom/android/server/am/AppProfiler;->updateCpuStatsNow()V+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Lcom/android/internal/os/ProcessCpuTracker;Lcom/android/internal/os/ProcessCpuTracker;]Lcom/android/server/am/PhantomProcessList;Lcom/android/server/am/PhantomProcessList;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
-HSPLcom/android/server/am/AppProfiler;->updateLowMemStateLSP(III)Z+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]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/LowMemDetector;Lcom/android/server/am/LowMemDetector;]Landroid/os/Handler;Lcom/android/server/am/AppProfiler$BgHandler;]Landroid/os/Message;Landroid/os/Message;
+HSPLcom/android/server/am/AppProfiler;->updateLowMemStateLSP(IIIJ)Z+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/server/am/AppProfiler$CachedAppsWatermarkData;Lcom/android/server/am/AppProfiler$CachedAppsWatermarkData;]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/LowMemDetector;Lcom/android/server/am/LowMemDetector;
 HSPLcom/android/server/am/AppProfiler;->updateNextPssTimeLPf(ILcom/android/server/am/ProcessProfileRecord;JZ)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/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HSPLcom/android/server/am/AppRestrictionController$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/AppRestrictionController;)V
 HSPLcom/android/server/am/AppRestrictionController$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
@@ -1267,17 +1334,20 @@
 HSPLcom/android/server/am/AppRestrictionController$3;-><init>(Lcom/android/server/am/AppRestrictionController;)V
 HSPLcom/android/server/am/AppRestrictionController$4;-><init>(Lcom/android/server/am/AppRestrictionController;)V
 HSPLcom/android/server/am/AppRestrictionController$5;-><init>(Lcom/android/server/am/AppRestrictionController;)V
+HSPLcom/android/server/am/AppRestrictionController$5;->onUidStateChanged(IIJI)V
 HSPLcom/android/server/am/AppRestrictionController$BgHandler;-><init>(Landroid/os/Looper;Lcom/android/server/am/AppRestrictionController$Injector;)V
-HSPLcom/android/server/am/AppRestrictionController$BgHandler;->handleMessage(Landroid/os/Message;)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;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;
+HSPLcom/android/server/am/AppRestrictionController$BgHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;]Lcom/android/server/am/AppRestrictionController$RestrictionSettings;Lcom/android/server/am/AppRestrictionController$RestrictionSettings;
 HSPLcom/android/server/am/AppRestrictionController$ConstantsObserver;-><init>(Lcom/android/server/am/AppRestrictionController;Landroid/os/Handler;Landroid/content/Context;)V
 HSPLcom/android/server/am/AppRestrictionController$Injector;-><init>(Landroid/content/Context;)V
-HSPLcom/android/server/am/AppRestrictionController$Injector;->getActivityManagerInternal()Landroid/app/ActivityManagerInternal;
+HPLcom/android/server/am/AppRestrictionController$Injector;->getActivityManagerInternal()Landroid/app/ActivityManagerInternal;
+HPLcom/android/server/am/AppRestrictionController$Injector;->getActivityManagerService()Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/AppRestrictionController$Injector;->getAppBatteryExemptionTracker()Lcom/android/server/am/AppBatteryExemptionTracker;
 HSPLcom/android/server/am/AppRestrictionController$Injector;->getAppFGSTracker()Lcom/android/server/am/AppFGSTracker;
 HPLcom/android/server/am/AppRestrictionController$Injector;->getAppOpsManager()Landroid/app/AppOpsManager;
-HSPLcom/android/server/am/AppRestrictionController$Injector;->getAppRestrictionController()Lcom/android/server/am/AppRestrictionController;
 HSPLcom/android/server/am/AppRestrictionController$Injector;->getAppStandbyInternal()Lcom/android/server/usage/AppStandbyInternal;
 HSPLcom/android/server/am/AppRestrictionController$Injector;->getContext()Landroid/content/Context;
 HSPLcom/android/server/am/AppRestrictionController$Injector;->getNotificationManager()Landroid/app/NotificationManager;
+HSPLcom/android/server/am/AppRestrictionController$Injector;->getPackageManager()Landroid/content/pm/PackageManager;
 HSPLcom/android/server/am/AppRestrictionController$Injector;->getPackageManagerInternal()Landroid/content/pm/PackageManagerInternal;
 HSPLcom/android/server/am/AppRestrictionController$Injector;->getUserManagerInternal()Lcom/android/server/pm/UserManagerInternal;
 HSPLcom/android/server/am/AppRestrictionController$Injector;->initAppStateTrackers(Lcom/android/server/am/AppRestrictionController;)V
@@ -1290,11 +1360,13 @@
 HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->forEachPackageInUidLocked(ILcom/android/internal/util/function/TriConsumer;)V
 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
 HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->getRestrictionSettingsLocked(ILjava/lang/String;)Lcom/android/server/am/AppRestrictionController$RestrictionSettings$PkgSettings;
+HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->loadOneFromXml(Lcom/android/modules/utils/TypedXmlPullParser;J[JZ)V
+HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->toXmlByteArray(I)[B
 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
 HSPLcom/android/server/am/AppRestrictionController;->-$$Nest$fgetmAppStateTrackers(Lcom/android/server/am/AppRestrictionController;)Ljava/util/ArrayList;
-HSPLcom/android/server/am/AppRestrictionController;->-$$Nest$fgetmBgHandler(Lcom/android/server/am/AppRestrictionController;)Lcom/android/server/am/AppRestrictionController$BgHandler;
 HSPLcom/android/server/am/AppRestrictionController;->-$$Nest$fgetmInjector(Lcom/android/server/am/AppRestrictionController;)Lcom/android/server/am/AppRestrictionController$Injector;
 HSPLcom/android/server/am/AppRestrictionController;->-$$Nest$fgetmLock(Lcom/android/server/am/AppRestrictionController;)Ljava/lang/Object;
 HSPLcom/android/server/am/AppRestrictionController;->-$$Nest$fgetmSettingsLock(Lcom/android/server/am/AppRestrictionController;)Ljava/lang/Object;
@@ -1307,28 +1379,30 @@
 HSPLcom/android/server/am/AppRestrictionController;->getBackgroundRestrictionExemptionReason(I)I+]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;
 HSPLcom/android/server/am/AppRestrictionController;->getLock()Ljava/lang/Object;
 HSPLcom/android/server/am/AppRestrictionController;->getPotentialSystemExemptionReason(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;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;
-HPLcom/android/server/am/AppRestrictionController;->getPotentialSystemExemptionReason(ILjava/lang/String;)I+]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;]Ljava/util/Set;Ljava/util/Collections$EmptySet;
+HPLcom/android/server/am/AppRestrictionController;->getPotentialSystemExemptionReason(ILjava/lang/String;)I+]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/am/AppRestrictionController;->getPotentialUserAllowedExemptionReason(ILjava/lang/String;)I+]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;
 HSPLcom/android/server/am/AppRestrictionController;->getRestrictionLevel(I)I+]Lcom/android/server/am/AppRestrictionController$RestrictionSettings;Lcom/android/server/am/AppRestrictionController$RestrictionSettings;
 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;->handleUidActive(I)V
 HSPLcom/android/server/am/AppRestrictionController;->handleUidInactive(IZ)V
 HSPLcom/android/server/am/AppRestrictionController;->handleUidProcStateChanged(II)V+]Lcom/android/server/am/BaseAppStateTracker;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/AppRestrictionController;->hasForegroundServices(Ljava/lang/String;I)Z
 HSPLcom/android/server/am/AppRestrictionController;->isBgAutoRestrictedBucketFeatureFlagEnabled()Z
-HPLcom/android/server/am/AppRestrictionController;->isCarrierApp(Ljava/lang/String;)Z
+HPLcom/android/server/am/AppRestrictionController;->isCarrierApp(Ljava/lang/String;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/am/AppRestrictionController;->isExemptedFromSysConfig(Ljava/lang/String;)Z
 HPLcom/android/server/am/AppRestrictionController;->isOnDeviceIdleAllowlist(I)Z
-HSPLcom/android/server/am/AppRestrictionController;->isOnSystemDeviceIdleAllowlist(I)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/am/AppRestrictionController;->isOnSystemDeviceIdleAllowlist(I)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/am/AppRestrictionController;->isRoleHeldByUid(Ljava/lang/String;I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/am/AppRestrictionController;->isSystemModule(Ljava/lang/String;)Z+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Ljava/io/File;Ljava/io/File;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HPLcom/android/server/am/AppRestrictionController;->isSystemModule(Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Ljava/io/File;Ljava/io/File;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HSPLcom/android/server/am/AppRestrictionController;->lambda$handleUidActive$9(ILcom/android/server/usage/AppStandbyInternal;ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V
 HSPLcom/android/server/am/AppRestrictionController;->refreshAppRestrictionLevelForUser(III)V
-HPLcom/android/server/am/BaseAppStateDurations;->addEvent(ZLcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;I)V
-HPLcom/android/server/am/BaseAppStateDurations;->trimEvents(JLjava/util/LinkedList;)V
+HPLcom/android/server/am/BaseAppStateDurations;->trimEvents(JLjava/util/LinkedList;)V+]Lcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;Lcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;,Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;]Ljava/util/LinkedList;Ljava/util/LinkedList;
 HSPLcom/android/server/am/BaseAppStateDurationsTracker;-><init>(Landroid/content/Context;Lcom/android/server/am/AppRestrictionController;Ljava/lang/reflect/Constructor;Ljava/lang/Object;)V
 HSPLcom/android/server/am/BaseAppStateDurationsTracker;->onUidProcStateChanged(II)V+]Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker$Injector;]Lcom/android/server/am/BaseAppStateDurationsTracker$SimplePackageDurations;Lcom/android/server/am/BaseAppStateDurationsTracker$UidStateDurations;]Lcom/android/server/am/BaseAppStateEventsTracker;Lcom/android/server/am/AppMediaSessionTracker;,Lcom/android/server/am/AppFGSTracker;,Lcom/android/server/am/AppBatteryExemptionTracker;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/UidProcessMap;Lcom/android/server/am/UidProcessMap;
 HPLcom/android/server/am/BaseAppStateEvents;->getEarliest(J)J+]Lcom/android/server/am/BaseAppStateEvents$MaxTrackingDurationConfig;megamorphic_types
+HPLcom/android/server/am/BaseAppStateEvents;->getTotalEvents(JI)I
 HSPLcom/android/server/am/BaseAppStateEventsTracker$BaseAppStateEventsPolicy;-><init>(Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateEventsTracker;Ljava/lang/String;ZLjava/lang/String;J)V
 HSPLcom/android/server/am/BaseAppStateEventsTracker$BaseAppStateEventsPolicy;->getMaxTrackingDuration()J
 HSPLcom/android/server/am/BaseAppStateEventsTracker;-><init>(Landroid/content/Context;Lcom/android/server/am/AppRestrictionController;Ljava/lang/reflect/Constructor;Ljava/lang/Object;)V
@@ -1336,9 +1410,10 @@
 HSPLcom/android/server/am/BaseAppStatePolicy;-><init>(Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker;Ljava/lang/String;Z)V
 HSPLcom/android/server/am/BaseAppStatePolicy;->isEnabled()Z
 HSPLcom/android/server/am/BaseAppStatePolicy;->shouldExemptUid(I)I+]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;
+HPLcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;->getTimestamp()J
 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
-HPLcom/android/server/am/BaseAppStateTimeSlotEvents;->getTotalEventsSince(JJI)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/am/BaseAppStateTimeSlotEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;]Ljava/util/Iterator;Ljava/util/LinkedList$DescendingIterator;
+HPLcom/android/server/am/BaseAppStateTimeSlotEvents;->getTotalEventsSince(JJI)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/am/BaseAppStateTimeSlotEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;
 HPLcom/android/server/am/BaseAppStateTimeSlotEvents;->trimEvents(JI)V+]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/am/BaseAppStateTimeSlotEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;
 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
 HPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker$BaseAppStateTimeSlotEventsPolicy;->getNumOfEventsThreshold()I
@@ -1352,57 +1427,74 @@
 HSPLcom/android/server/am/BaseAppStateTracker$Injector;->getPolicy()Lcom/android/server/am/BaseAppStatePolicy;
 HSPLcom/android/server/am/BaseAppStateTracker$Injector;->setPolicy(Lcom/android/server/am/BaseAppStatePolicy;)V
 HSPLcom/android/server/am/BaseAppStateTracker;-><init>(Landroid/content/Context;Lcom/android/server/am/AppRestrictionController;Ljava/lang/reflect/Constructor;Ljava/lang/Object;)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IIJJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda0;->run()V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda100;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda100;->run()V
+HPLcom/android/server/am/BaseAppStateTracker;->notifyListenersOnStateChange(ILjava/lang/String;ZJI)V
+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;ILjava/lang/String;Ljava/lang/String;JJ)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$$ExternalSyntheticLambda102;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda102;->run()V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/am/BatteryStatsService;IILjava/lang/String;Ljava/lang/String;IZJJ)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda12;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda14;-><init>(Lcom/android/server/am/BatteryStatsService;IJJJ)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda14;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda17;-><init>(Lcom/android/server/am/BatteryStatsService;IZIIJJ)V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda17;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda19;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ZJJ)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda23;-><init>(Lcom/android/server/am/BatteryStatsService;ZIJJ)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda25;-><init>(Ljava/util/concurrent/CountDownLatch;)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda30;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda31;-><init>(Lcom/android/server/am/BatteryStatsService;IILjava/lang/String;Ljava/lang/String;IJJ)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda31;->run()V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda36;-><init>(Lcom/android/server/am/BatteryStatsService;II)V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda37;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/telephony/SignalStrength;JJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda39;-><init>(Lcom/android/server/am/BatteryStatsService;IIJJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda39;->run()V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda41;-><init>(Lcom/android/server/am/BatteryStatsService;IIJJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda41;->run()V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda45;-><init>(Lcom/android/server/am/BatteryStatsService;IIJJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda45;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda32;-><init>(Lcom/android/server/am/BatteryStatsService;IJ[I)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda32;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda37;-><init>(Lcom/android/server/am/BatteryStatsService;II)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda38;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/telephony/SignalStrength;JJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda40;-><init>(Lcom/android/server/am/BatteryStatsService;IIJJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda40;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda42;-><init>(Lcom/android/server/am/BatteryStatsService;IIJJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda42;->run()V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda46;-><init>(Lcom/android/server/am/BatteryStatsService;IIJJ)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda46;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda47;-><init>(Lcom/android/server/am/BatteryStatsService;IIJJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda47;->run()V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/am/BatteryStatsService;IJJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda50;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda53;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZJJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda53;->run()V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda54;-><init>(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$$ExternalSyntheticLambda54;->run()V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda56;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;JJ)V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda56;->run()V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda58;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;Landroid/os/WorkSource;IJJ)V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda58;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda51;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda51;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda54;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZJJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda54;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda55;-><init>(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$$ExternalSyntheticLambda55;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda57;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;JJ)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda57;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda59;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;Landroid/os/WorkSource;IJJ)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda59;->run()V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/am/BatteryStatsService;IIIIIIIIJJJJ)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda5;->run()V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda60;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;Landroid/os/WorkSource;IJJ)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda60;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ZJJ)V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda60;->run()V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda65;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;IJJ)V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda66;-><init>(Lcom/android/server/am/BatteryStatsService;IJJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda6;->run()V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda75;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IJJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda75;->run()V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda92;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;IJJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda92;->run()V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda95;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda95;->run()V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda96;-><init>(Lcom/android/server/am/BatteryStatsService;)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda61;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;Landroid/os/WorkSource;IJJ)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda61;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda64;-><init>(Lcom/android/server/am/BatteryStatsService;IJIJJ)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda64;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda66;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;IJJ)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda67;-><init>(Lcom/android/server/am/BatteryStatsService;IJJ)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda6;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda74;-><init>(Lcom/android/server/am/BatteryStatsService;IJJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda76;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IJJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda76;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda8;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda93;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;IJJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda93;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda96;-><init>(Lcom/android/server/am/BatteryStatsService;IIIIIIIIJJJJ)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda96;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda97;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda97;->run()V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda99;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
-HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda99;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda98;-><init>(Lcom/android/server/am/BatteryStatsService;)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda98;->run()V
 HSPLcom/android/server/am/BatteryStatsService$1;-><init>(Lcom/android/server/am/BatteryStatsService;)V
 HSPLcom/android/server/am/BatteryStatsService$2;-><init>(Lcom/android/server/am/BatteryStatsService;)V
 HSPLcom/android/server/am/BatteryStatsService$3;-><init>(Lcom/android/server/am/BatteryStatsService;)V
@@ -1411,34 +1503,68 @@
 HSPLcom/android/server/am/BatteryStatsService$LocalService;-><init>(Lcom/android/server/am/BatteryStatsService;)V
 HSPLcom/android/server/am/BatteryStatsService$LocalService;-><init>(Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService$LocalService-IA;)V
 HPLcom/android/server/am/BatteryStatsService$LocalService;->noteBinderCallStats(IJLjava/util/Collection;)V+]Landroid/os/Handler;Landroid/os/Handler;
-HPLcom/android/server/am/BatteryStatsService$LocalService;->noteCpuWakingActivity(IJ[I)V
-HPLcom/android/server/am/BatteryStatsService$LocalService;->noteCpuWakingNetworkPacket(Landroid/net/Network;JI)V
+HPLcom/android/server/am/BatteryStatsService$LocalService;->noteCpuWakingNetworkPacket(Landroid/net/Network;JI)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/am/BatteryStatsService$LocalService;Lcom/android/server/am/BatteryStatsService$LocalService;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 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;
+HSPLcom/android/server/am/BatteryStatsService$WakeupReasonThread;->waitWakeup()Ljava/lang/String;+]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$1MT5O3S-UuQWq896_fJMF88Sqqg(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$6uA9iVe9dISk4E5A5f0plh5A5Uo(Lcom/android/server/am/BatteryStatsService;IIJJ)V
+HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$8-hICQ8Rk4FNbRgsVv-48761U20(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$JXLPnF4Sies0MmG_p9jXK40KDxQ(Lcom/android/server/am/BatteryStatsService;IIJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$NgdaN5I3Y7K2Vj31c1isYVmmnSo(Lcom/android/server/am/BatteryStatsService;IILjava/lang/String;Ljava/lang/String;IZJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$P5MVtrRidYvOKQ04qVj16tnKGgs(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$bU8KoVfpTtqAPZV31_3AO0K1KM0(Lcom/android/server/am/BatteryStatsService;)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$h-0HNs1h7zWNL2CSNPmu4k3UsbU(Lcom/android/server/am/BatteryStatsService;IILjava/lang/String;Ljava/lang/String;IJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$jq1QetBW3jqzTPvqOmu2f9ocS-U(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$y9D2BibJciKyLz0z0TLv8aYpc0w(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
 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;
 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
 HPLcom/android/server/am/BatteryStatsService;->awaitCompletion()V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/util/concurrent/CountDownLatch;Ljava/util/concurrent/CountDownLatch;
+HSPLcom/android/server/am/BatteryStatsService;->create(Landroid/content/Context;Ljava/io/File;Landroid/os/Handler;Lcom/android/server/power/stats/BatteryStatsImpl$BatteryCallback;)Lcom/android/server/am/BatteryStatsService;
 HSPLcom/android/server/am/BatteryStatsService;->fillLowPowerStats(Lcom/android/internal/os/RpmStats;)V+]Lcom/android/internal/os/RpmStats$PowerStateSubsystem;Lcom/android/internal/os/RpmStats$PowerStateSubsystem;]Lcom/android/internal/os/RpmStats;Lcom/android/internal/os/RpmStats;]Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;]Landroid/power/PowerStatsInternal;Lcom/android/server/powerstats/PowerStatsService$LocalService;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLcom/android/server/am/BatteryStatsService;->fillRailDataStats(Lcom/android/internal/os/RailStats;)V
 HSPLcom/android/server/am/BatteryStatsService;->getActiveStatistics()Lcom/android/server/power/stats/BatteryStatsImpl;
 HPLcom/android/server/am/BatteryStatsService;->getHealthStatsForUidLocked(I)Landroid/os/health/HealthStatsParceler;
 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;
 HSPLcom/android/server/am/BatteryStatsService;->initPowerManagement()V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteAlarmStart$21(Ljava/lang/String;Landroid/os/WorkSource;IJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteEvent$14(ILjava/lang/String;IJJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteJobFinish$18(Ljava/lang/String;IIJJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteJobStart$17(Ljava/lang/String;IJJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$notePhoneState$49(IJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteProcessStart$9(Ljava/lang/String;IJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteServiceStartLaunch$105(ILjava/lang/String;Ljava/lang/String;JJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteServiceStartRunning$103(ILjava/lang/String;Ljava/lang/String;JJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteServiceStopLaunch$106(ILjava/lang/String;Ljava/lang/String;JJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteServiceStopRunning$104(ILjava/lang/String;Ljava/lang/String;JJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteStartSensor$32(IIJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteStartWakelock$23(IILjava/lang/String;Ljava/lang/String;IZJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteStartWakelockFromSource$25(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteStopSensor$33(IIJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteStopWakelock$24(IILjava/lang/String;Ljava/lang/String;IJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteStopWakelockFromSource$27(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteUidProcessState$13(IIJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/wakeups/CpuWakeupStats;Lcom/android/server/power/stats/wakeups/CpuWakeupStats;
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteUserActivity$40(IIJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteWakupAlarm$20(Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;JJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteWifiRadioPowerState$64(IJIJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$scheduleWriteToDisk$3()V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$setBatteryState$96(IIIIIIIIJJJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryExternalStatsWorker;Lcom/android/server/power/stats/BatteryExternalStatsWorker;
+HSPLcom/android/server/am/BatteryStatsService;->lambda$setBatteryState$97(IIIIIIIIJJJJ)V+]Lcom/android/server/power/stats/BatteryExternalStatsWorker;Lcom/android/server/power/stats/BatteryExternalStatsWorker;
 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;]Landroid/content/Context;Landroid/app/ContextImpl;
-HPLcom/android/server/am/BatteryStatsService;->noteAlarmStart(Ljava/lang/String;Landroid/os/WorkSource;I)V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/content/Context;Landroid/app/ContextImpl;
+HPLcom/android/server/am/BatteryStatsService;->noteAlarmFinish(Ljava/lang/String;Landroid/os/WorkSource;I)V
+HPLcom/android/server/am/BatteryStatsService;->noteAlarmStart(Ljava/lang/String;Landroid/os/WorkSource;I)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
 HPLcom/android/server/am/BatteryStatsService;->noteChangeWakelockFromSource(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;ILandroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZ)V+]Landroid/os/Handler;Landroid/os/Handler;
+HSPLcom/android/server/am/BatteryStatsService;->noteCpuWakingActivity(IJ[I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteEvent(ILjava/lang/String;I)V
-HSPLcom/android/server/am/BatteryStatsService;->noteJobFinish(Ljava/lang/String;II)V
-HSPLcom/android/server/am/BatteryStatsService;->noteJobStart(Ljava/lang/String;I)V
+HPLcom/android/server/am/BatteryStatsService;->noteJobFinish(Ljava/lang/String;II)V+]Landroid/os/Handler;Landroid/os/Handler;
+HPLcom/android/server/am/BatteryStatsService;->noteJobStart(Ljava/lang/String;I)V+]Landroid/os/Handler;Landroid/os/Handler;
 HPLcom/android/server/am/BatteryStatsService;->notePhoneDataConnectionState(IZII)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;
 HPLcom/android/server/am/BatteryStatsService;->notePhoneState(I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteProcessDied(II)V
 HSPLcom/android/server/am/BatteryStatsService;->noteProcessFinish(Ljava/lang/String;I)V
@@ -1446,15 +1572,18 @@
 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;
-HSPLcom/android/server/am/BatteryStatsService;->noteServiceStartRunning(ILjava/lang/String;Ljava/lang/String;)V
-HSPLcom/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;
+HPLcom/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
 HSPLcom/android/server/am/BatteryStatsService;->noteStartSensor(II)V
 HSPLcom/android/server/am/BatteryStatsService;->noteStartWakelock(IILjava/lang/String;Ljava/lang/String;IZ)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/am/BatteryStatsService;->noteStartWakelockFromSource(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZ)V+]Landroid/os/Handler;Landroid/os/Handler;
+HPLcom/android/server/am/BatteryStatsService;->noteStopAudio(I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteStopSensor(II)V
 HSPLcom/android/server/am/BatteryStatsService;->noteStopWakelock(IILjava/lang/String;Ljava/lang/String;I)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/am/BatteryStatsService;->noteStopWakelockFromSource(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;I)V+]Landroid/os/Handler;Landroid/os/Handler;
+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;
 HPLcom/android/server/am/BatteryStatsService;->noteVibratorOff(I)V
@@ -1466,7 +1595,7 @@
 HSPLcom/android/server/am/BatteryStatsService;->publish()V
 HSPLcom/android/server/am/BatteryStatsService;->scheduleWriteToDisk()V
 HSPLcom/android/server/am/BatteryStatsService;->setBatteryState(IIIIIIIIJ)V+]Landroid/os/Handler;Landroid/os/Handler;
-HSPLcom/android/server/am/BatteryStatsService;->updateBatteryStatsOnActivityUsage(Ljava/lang/String;Ljava/lang/String;IIZ)V
+HPLcom/android/server/am/BatteryStatsService;->updateBatteryStatsOnActivityUsage(Ljava/lang/String;Ljava/lang/String;IIZ)V
 HSPLcom/android/server/am/BroadcastConstants;-><clinit>()V
 HSPLcom/android/server/am/BroadcastConstants;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/am/BroadcastConstants;->getDeviceConfigBoolean(Ljava/lang/String;Z)Z
@@ -1483,13 +1612,15 @@
 HSPLcom/android/server/am/BroadcastHistory;->onBroadcastFinishedLocked(Lcom/android/server/am/BroadcastRecord;)V+]Lcom/android/server/am/BroadcastHistory;Lcom/android/server/am/BroadcastHistory;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/BroadcastHistory;->ringAdvance(III)I
 HSPLcom/android/server/am/BroadcastLoopers;->addMyLooper()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Looper;Landroid/os/Looper;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/am/BroadcastProcessQueue$$ExternalSyntheticLambda0;->test(Lcom/android/server/am/BroadcastRecord;I)Z
 HSPLcom/android/server/am/BroadcastProcessQueue;-><init>(Lcom/android/server/am/BroadcastConstants;Ljava/lang/String;I)V
-HSPLcom/android/server/am/BroadcastProcessQueue;->blockedOnOrderedDispatch(Lcom/android/server/am/BroadcastRecord;I)Z+]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
-HSPLcom/android/server/am/BroadcastProcessQueue;->checkHealthLocked()V+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
-HSPLcom/android/server/am/BroadcastProcessQueue;->enqueueOrReplaceBroadcast(Lcom/android/server/am/BroadcastRecord;IZ)Lcom/android/server/am/BroadcastRecord;+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
+HSPLcom/android/server/am/BroadcastProcessQueue;->assertHealthLocked()V
+HSPLcom/android/server/am/BroadcastProcessQueue;->assertHealthLocked(Ljava/util/ArrayDeque;)V+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
+HSPLcom/android/server/am/BroadcastProcessQueue;->enqueueOrReplaceBroadcast(Lcom/android/server/am/BroadcastRecord;ILcom/android/server/am/BroadcastProcessQueue$BroadcastConsumer;)Lcom/android/server/am/BroadcastRecord;+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Lcom/android/server/am/BroadcastProcessQueue$BroadcastConsumer;Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda10;
 HSPLcom/android/server/am/BroadcastProcessQueue;->forEachMatchingBroadcast(Lcom/android/server/am/BroadcastProcessQueue$BroadcastPredicate;Lcom/android/server/am/BroadcastProcessQueue$BroadcastConsumer;Z)Z+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
-HSPLcom/android/server/am/BroadcastProcessQueue;->forEachMatchingBroadcastInQueue(Ljava/util/ArrayDeque;Lcom/android/server/am/BroadcastProcessQueue$BroadcastPredicate;Lcom/android/server/am/BroadcastProcessQueue$BroadcastConsumer;Z)Z+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/am/BroadcastProcessQueue$BroadcastPredicate;megamorphic_types]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Lcom/android/server/am/BroadcastProcessQueue$BroadcastConsumer;megamorphic_types]Ljava/util/Iterator;Ljava/util/ArrayDeque$DeqIterator;
+HSPLcom/android/server/am/BroadcastProcessQueue;->forEachMatchingBroadcastInQueue(Ljava/util/ArrayDeque;Lcom/android/server/am/BroadcastProcessQueue$BroadcastPredicate;Lcom/android/server/am/BroadcastProcessQueue$BroadcastConsumer;Z)Z+]Lcom/android/server/am/BroadcastProcessQueue$BroadcastPredicate;megamorphic_types]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Lcom/android/server/am/BroadcastProcessQueue$BroadcastConsumer;Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda9;,Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda10;,Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda11;,Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda8;
 HSPLcom/android/server/am/BroadcastProcessQueue;->getActive()Lcom/android/server/am/BroadcastRecord;
+HSPLcom/android/server/am/BroadcastProcessQueue;->getActiveAssumedDeliveryCountSinceIdle()I
 HSPLcom/android/server/am/BroadcastProcessQueue;->getActiveCountSinceIdle()I
 HSPLcom/android/server/am/BroadcastProcessQueue;->getActiveIndex()I
 HSPLcom/android/server/am/BroadcastProcessQueue;->getActiveViaColdStart()Z
@@ -1497,140 +1628,154 @@
 HPLcom/android/server/am/BroadcastProcessQueue;->getPreferredSchedulingGroupLocked()I
 HSPLcom/android/server/am/BroadcastProcessQueue;->getQueueForBroadcast(Lcom/android/server/am/BroadcastRecord;)Ljava/util/ArrayDeque;+]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
 HSPLcom/android/server/am/BroadcastProcessQueue;->getRunnableAt()J+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
-HSPLcom/android/server/am/BroadcastProcessQueue;->hasDeferredBroadcasts()Z
 HSPLcom/android/server/am/BroadcastProcessQueue;->insertIntoRunnableList(Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;)Lcom/android/server/am/BroadcastProcessQueue;+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
 HSPLcom/android/server/am/BroadcastProcessQueue;->invalidateRunnableAt()V
 HSPLcom/android/server/am/BroadcastProcessQueue;->isActive()Z
-HSPLcom/android/server/am/BroadcastProcessQueue;->isDeferredUntilActive()Z+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
 HSPLcom/android/server/am/BroadcastProcessQueue;->isEmpty()Z+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
+HSPLcom/android/server/am/BroadcastProcessQueue;->isPendingManifest()Z
+HSPLcom/android/server/am/BroadcastProcessQueue;->isPendingOrdered()Z
+HSPLcom/android/server/am/BroadcastProcessQueue;->isPendingResultTo()Z
 HPLcom/android/server/am/BroadcastProcessQueue;->isPendingUrgent()Z
 HSPLcom/android/server/am/BroadcastProcessQueue;->isProcessWarm()Z+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/BroadcastProcessQueue;->isQueueEmpty(Ljava/util/ArrayDeque;)Z+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
 HSPLcom/android/server/am/BroadcastProcessQueue;->isRunnable()Z+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
+HPLcom/android/server/am/BroadcastProcessQueue;->lambda$updateDeferredStates$0(Lcom/android/server/am/BroadcastRecord;I)Z
 HSPLcom/android/server/am/BroadcastProcessQueue;->makeActiveIdle()V
-HSPLcom/android/server/am/BroadcastProcessQueue;->makeActiveNextPending()V+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;
-HSPLcom/android/server/am/BroadcastProcessQueue;->onBroadcastDequeued(Lcom/android/server/am/BroadcastRecord;IZ)V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
-HSPLcom/android/server/am/BroadcastProcessQueue;->onBroadcastEnqueued(Lcom/android/server/am/BroadcastRecord;IZ)V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
+HSPLcom/android/server/am/BroadcastProcessQueue;->makeActiveNextPending()V+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;
+HSPLcom/android/server/am/BroadcastProcessQueue;->onBroadcastDequeued(Lcom/android/server/am/BroadcastRecord;I)V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
+HSPLcom/android/server/am/BroadcastProcessQueue;->onBroadcastEnqueued(Lcom/android/server/am/BroadcastRecord;I)V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
 HSPLcom/android/server/am/BroadcastProcessQueue;->peekNextBroadcast()Lcom/android/internal/os/SomeArgs;+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
 HPLcom/android/server/am/BroadcastProcessQueue;->peekNextBroadcastRecord()Lcom/android/server/am/BroadcastRecord;
 HSPLcom/android/server/am/BroadcastProcessQueue;->queueForNextBroadcast()Ljava/util/ArrayDeque;+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
-HSPLcom/android/server/am/BroadcastProcessQueue;->queueForNextBroadcast(Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;II)Ljava/util/ArrayDeque;+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
+HSPLcom/android/server/am/BroadcastProcessQueue;->queueForNextBroadcast(Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;II)Ljava/util/ArrayDeque;+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
 HSPLcom/android/server/am/BroadcastProcessQueue;->removeFromRunnableList(Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;)Lcom/android/server/am/BroadcastProcessQueue;
 HSPLcom/android/server/am/BroadcastProcessQueue;->removeNextBroadcast()Lcom/android/internal/os/SomeArgs;+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
-HSPLcom/android/server/am/BroadcastProcessQueue;->replaceBroadcastInQueue(Ljava/util/ArrayDeque;Lcom/android/server/am/BroadcastRecord;IZ)Lcom/android/server/am/BroadcastRecord;+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Ljava/util/Iterator;Ljava/util/ArrayDeque$DescendingIterator;]Landroid/content/Intent;Landroid/content/Intent;
-HSPLcom/android/server/am/BroadcastProcessQueue;->setProcess(Lcom/android/server/am/ProcessRecord;)V
-HSPLcom/android/server/am/BroadcastProcessQueue;->setProcessCached(Z)V
-HSPLcom/android/server/am/BroadcastProcessQueue;->toShortString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/BroadcastProcessQueue;->replaceBroadcastInQueue(Ljava/util/ArrayDeque;Lcom/android/server/am/BroadcastRecord;I)Lcom/android/server/am/BroadcastRecord;+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/BroadcastProcessQueue;->setProcessAndUidState(Lcom/android/server/am/ProcessRecord;ZZ)Z+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/BroadcastProcessQueue;->setProcessFreezable(Z)Z
+HSPLcom/android/server/am/BroadcastProcessQueue;->setProcessInstrumented(Z)Z
+HSPLcom/android/server/am/BroadcastProcessQueue;->setProcessPersistent(Z)Z
+HSPLcom/android/server/am/BroadcastProcessQueue;->setUidForeground(Z)Z
+HSPLcom/android/server/am/BroadcastProcessQueue;->toShortString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/BroadcastProcessQueue;->traceActiveBegin()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
-HSPLcom/android/server/am/BroadcastProcessQueue;->traceProcessEnd()V
+HSPLcom/android/server/am/BroadcastProcessQueue;->traceProcessEnd()V+]Ljava/lang/Object;Lcom/android/server/am/BroadcastProcessQueue;
 HSPLcom/android/server/am/BroadcastProcessQueue;->traceProcessRunningBegin()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
 HSPLcom/android/server/am/BroadcastProcessQueue;->traceProcessStartingBegin()V
-HSPLcom/android/server/am/BroadcastProcessQueue;->updateRunnableAt()V+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
+HSPLcom/android/server/am/BroadcastProcessQueue;->updateDeferredStates(Lcom/android/server/am/BroadcastProcessQueue$BroadcastConsumer;Lcom/android/server/am/BroadcastProcessQueue$BroadcastConsumer;)V+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
+HSPLcom/android/server/am/BroadcastProcessQueue;->updateRunnableAt()V+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]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;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Handler;Ljava/lang/String;Lcom/android/server/am/BroadcastSkipPolicy;Lcom/android/server/am/BroadcastHistory;)V
-HSPLcom/android/server/am/BroadcastQueue;->checkState(ZLjava/lang/String;)V
 HSPLcom/android/server/am/BroadcastQueue;->traceBegin(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/server/am/BroadcastQueue;->traceEnd(I)V
-HSPLcom/android/server/am/BroadcastQueueImpl;->logBootCompletedBroadcastCompletionLatencyIfPossible(Lcom/android/server/am/BroadcastRecord;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/List;Ljava/util/ImmutableCollections$ListN;,Ljava/util/ArrayList;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Landroid/content/Intent;Landroid/content/Intent;
-HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/am/BroadcastRecord;)V
-HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda10;->test(Lcom/android/server/am/BroadcastRecord;I)Z
-HPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda11;->test(Lcom/android/server/am/BroadcastRecord;I)Z
-HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda12;-><init>()V
-HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda12;->test(Lcom/android/server/am/BroadcastRecord;I)Z
-HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda13;-><init>()V
-HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda13;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/am/BroadcastQueueImpl;->logBootCompletedBroadcastCompletionLatencyIfPossible(Lcom/android/server/am/BroadcastRecord;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/am/BroadcastQueueModernImpl;)V
+HPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda10;->accept(Lcom/android/server/am/BroadcastRecord;I)V
+HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/am/BroadcastQueueModernImpl;)V
+HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda13;-><init>(Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastRecord;Landroid/util/ArrayMap;)V
+HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda13;->test(Lcom/android/server/am/BroadcastRecord;I)Z
 HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda14;-><init>()V
-HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/am/BroadcastQueueModernImpl;)V
-HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda4;->handleMessage(Landroid/os/Message;)Z
-HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/am/BroadcastQueueModernImpl;)V
-HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/am/BroadcastQueueModernImpl;)V
+HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda14;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda15;-><init>()V
 HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/am/BroadcastQueueModernImpl;)V
+HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda7;->handleMessage(Landroid/os/Message;)Z
 HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/am/BroadcastQueueModernImpl;)V
-HSPLcom/android/server/am/BroadcastQueueModernImpl$1;->onUidCachedChanged(IZ)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
+HSPLcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/am/BroadcastQueueModernImpl;)V
+HSPLcom/android/server/am/BroadcastQueueModernImpl$1;->onUidStateChanged(IIJI)V
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->$r8$lambda$EZvetGiyPFSQ7Dv6AGCYMZgLrJo(Lcom/android/server/am/BroadcastQueueModernImpl;Landroid/os/Message;)Z
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->$r8$lambda$G_qP0xmHnkCDzU9_PjnY7TDhKRc(Lcom/android/server/am/BroadcastRecord;I)Z
-HPLcom/android/server/am/BroadcastQueueModernImpl;->$r8$lambda$LTzBq4CYxTsxliYLN0uEcWYSKa4(Lcom/android/server/am/BroadcastRecord;I)Z
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->$r8$lambda$sOkKSJZa2fqx1n46F5zDc65jitc(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;I)Z
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->$r8$lambda$zdwSfU_eDEKSYPCZ2H3wl2wiTFA(Lcom/android/server/am/BroadcastProcessQueue;)Z
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->-$$Nest$fgetmProcessQueues(Lcom/android/server/am/BroadcastQueueModernImpl;)Landroid/util/SparseArray;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->-$$Nest$menqueueUpdateRunningList(Lcom/android/server/am/BroadcastQueueModernImpl;)V
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->-$$Nest$mupdateQueueDeferred(Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastProcessQueue;)V
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->-$$Nest$mupdateRunnableList(Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastProcessQueue;)V
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->$r8$lambda$mgBV84k4hOVghCdcW5dojqX24q8(Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastRecord;Landroid/util/ArrayMap;Lcom/android/server/am/BroadcastRecord;I)Z
 HSPLcom/android/server/am/BroadcastQueueModernImpl;-><clinit>()V
 HSPLcom/android/server/am/BroadcastQueueModernImpl;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Handler;Lcom/android/server/am/BroadcastConstants;Lcom/android/server/am/BroadcastConstants;)V
 HSPLcom/android/server/am/BroadcastQueueModernImpl;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Handler;Lcom/android/server/am/BroadcastConstants;Lcom/android/server/am/BroadcastConstants;Lcom/android/server/am/BroadcastSkipPolicy;Lcom/android/server/am/BroadcastHistory;)V
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->applyDeliveryGroupPolicy(Lcom/android/server/am/BroadcastRecord;)V+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->applyDeliveryGroupPolicy(Lcom/android/server/am/BroadcastRecord;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->assertHealthLocked()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->checkAndRemoveWaitingFor()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->checkHealthLocked()V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->dispatchReceivers(Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastRecord;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Handler;Landroid/os/Handler;]Landroid/app/BackgroundStartPrivileges;Landroid/app/BackgroundStartPrivileges;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]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/SameProcessApplicationThread;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->enqueueBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)V+]Lcom/android/server/am/BroadcastSkipPolicy;Lcom/android/server/am/BroadcastSkipPolicy;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Ljava/util/List;Ljava/util/ImmutableCollections$ListN;,Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastHistory;Lcom/android/server/am/BroadcastHistory;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->checkPendingColdStartValidity()V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->demoteFromRunningLocked(Lcom/android/server/am/BroadcastProcessQueue;)V+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->dispatchReceivers(Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastRecord;I)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Handler;Landroid/os/Handler;]Landroid/app/BackgroundStartPrivileges;Landroid/app/BackgroundStartPrivileges;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]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;]Landroid/app/IApplicationThread;Lcom/android/server/am/SameProcessApplicationThread;]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->enqueueBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/BroadcastSkipPolicy;Lcom/android/server/am/BroadcastSkipPolicy;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/BroadcastHistory;Lcom/android/server/am/BroadcastHistory;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->enqueueUpdateRunningList()V+]Landroid/os/Handler;Landroid/os/Handler;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->finishReceiverActiveLocked(Lcom/android/server/am/BroadcastProcessQueue;ILjava/lang/String;)Z+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->finishReceiverLocked(Lcom/android/server/am/ProcessRecord;ILjava/lang/String;Landroid/os/Bundle;ZZ)Z+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->forEachMatchingBroadcast(Ljava/util/function/Predicate;Lcom/android/server/am/BroadcastProcessQueue$BroadcastPredicate;Lcom/android/server/am/BroadcastProcessQueue$BroadcastConsumer;Z)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Ljava/util/function/Predicate;Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda15;,Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda13;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->finishReceiverActiveLocked(Lcom/android/server/am/BroadcastProcessQueue;ILjava/lang/String;)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/BroadcastQueueModernImpl;->finishReceiverLocked(Lcom/android/server/am/ProcessRecord;ILjava/lang/String;Landroid/os/Bundle;ZZ)Z+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->forEachMatchingBroadcast(Ljava/util/function/Predicate;Lcom/android/server/am/BroadcastProcessQueue$BroadcastPredicate;Lcom/android/server/am/BroadcastProcessQueue$BroadcastConsumer;Z)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Ljava/util/function/Predicate;Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda16;,Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda14;,Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda19;
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->getDeliveryState(Lcom/android/server/am/BroadcastRecord;I)I+]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->getOrCreateProcessQueue(Ljava/lang/String;I)Lcom/android/server/am/BroadcastProcessQueue;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->getPreferredSchedulingGroupLocked(Lcom/android/server/am/ProcessRecord;)I
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->getOrCreateProcessQueue(Ljava/lang/String;I)Lcom/android/server/am/BroadcastProcessQueue;+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->getPreferredSchedulingGroupLocked(Lcom/android/server/am/ProcessRecord;)I+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->getProcessQueue(Lcom/android/server/am/ProcessRecord;)Lcom/android/server/am/BroadcastProcessQueue;+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->getProcessQueue(Ljava/lang/String;I)Lcom/android/server/am/BroadcastProcessQueue;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->getRecordsLookupCache()Landroid/util/ArrayMap;
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->getRunningIndexOf(Lcom/android/server/am/BroadcastProcessQueue;)I
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->getRunningSize()I
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->isAssumedDelivered(Lcom/android/server/am/BroadcastRecord;I)Z+]Ljava/util/List;Ljava/util/ArrayList;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->lambda$applyDeliveryGroupPolicy$3(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;I)Z+]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->lambda$new$0(Landroid/os/Message;)Z+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-HPLcom/android/server/am/BroadcastQueueModernImpl;->lambda$new$11(Lcom/android/server/am/BroadcastRecord;I)V+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Ljava/util/List;Ljava/util/ArrayList;
-HPLcom/android/server/am/BroadcastQueueModernImpl;->lambda$updateQueueDeferred$14(Lcom/android/server/am/BroadcastRecord;I)Z+]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->lambda$updateQueueDeferred$15(Lcom/android/server/am/BroadcastRecord;I)Z+]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->maybeSkipReceiver(Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastRecord;I)Z
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->notifyFinishBroadcast(Lcom/android/server/am/BroadcastRecord;)V+]Ljava/util/List;Ljava/util/ImmutableCollections$ListN;,Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastHistory;Lcom/android/server/am/BroadcastHistory;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->getRunningUrgentCount()I+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->isProcessFreezable(Lcom/android/server/am/ProcessRecord;)Z+]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->lambda$applyDeliveryGroupPolicy$3(Lcom/android/server/am/BroadcastRecord;Landroid/util/ArrayMap;Lcom/android/server/am/BroadcastRecord;I)Z+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->lambda$new$0(Landroid/os/Message;)Z+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
+HPLcom/android/server/am/BroadcastQueueModernImpl;->lambda$new$12(Lcom/android/server/am/BroadcastRecord;I)V
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->logBroadcastDeliveryEventReported(Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;ILjava/lang/Object;)V+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->notifyFinishBroadcast(Lcom/android/server/am/BroadcastRecord;)V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastHistory;Lcom/android/server/am/BroadcastHistory;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->notifyFinishReceiver(Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;ILjava/lang/Object;)V
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->notifyScheduleReceiver(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;Landroid/content/pm/ResolveInfo;)V+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->notifyScheduleRegisteredReceiver(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastFilter;)V
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->notifyStartedRunning(Lcom/android/server/am/BroadcastProcessQueue;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->notifyScheduleRegisteredReceiver(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastFilter;)V+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->notifyStartedRunning(Lcom/android/server/am/BroadcastProcessQueue;)V+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->notifyStoppedRunning(Lcom/android/server/am/BroadcastProcessQueue;)V
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->onApplicationAttachedLocked(Lcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->onApplicationCleanupLocked(Lcom/android/server/am/ProcessRecord;)V
-HPLcom/android/server/am/BroadcastQueueModernImpl;->removeProcessQueue(Ljava/lang/String;I)Lcom/android/server/am/BroadcastProcessQueue;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->onProcessFreezableChangedLocked(Lcom/android/server/am/ProcessRecord;)V+]Landroid/os/Handler;Landroid/os/Handler;,Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/os/Message;Landroid/os/Message;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->promoteToRunningLocked(Lcom/android/server/am/BroadcastProcessQueue;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->refreshProcessQueueLocked(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->refreshProcessQueuesLocked(I)V
+HPLcom/android/server/am/BroadcastQueueModernImpl;->removeProcessQueue(Ljava/lang/String;I)Lcom/android/server/am/BroadcastProcessQueue;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->reportUsageStatsBroadcastDispatched(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;)V+]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/Intent;Landroid/content/Intent;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->scheduleReceiverColdLocked(Lcom/android/server/am/BroadcastProcessQueue;)V
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->scheduleReceiverWarmLocked(Lcom/android/server/am/BroadcastProcessQueue;)V+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->scheduleResultTo(Lcom/android/server/am/BroadcastRecord;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]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/SameProcessApplicationThread;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->setDeliveryState(Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;ILjava/lang/Object;ILjava/lang/String;)V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->shouldContinueScheduling(Lcom/android/server/am/BroadcastProcessQueue;)Z
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->scheduleReceiverColdLocked(Lcom/android/server/am/BroadcastProcessQueue;)Z
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->scheduleReceiverWarmLocked(Lcom/android/server/am/BroadcastProcessQueue;)Z+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->scheduleResultTo(Lcom/android/server/am/BroadcastRecord;)V+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/IApplicationThread;Lcom/android/server/am/SameProcessApplicationThread;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->setDeliveryState(Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;ILjava/lang/Object;ILjava/lang/String;)V+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->setQueueProcess(Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/ProcessRecord;)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->shouldRetire(Lcom/android/server/am/BroadcastProcessQueue;)Z+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->shouldSkipReceiver(Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastRecord;I)Ljava/lang/String;+]Lcom/android/server/am/BroadcastSkipPolicy;Lcom/android/server/am/BroadcastSkipPolicy;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->skipAndCancelReplacedBroadcasts(Landroid/util/ArraySet;)V
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->updateQueueDeferred(Lcom/android/server/am/BroadcastProcessQueue;)V+]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->skipAndCancelReplacedBroadcasts(Landroid/util/ArraySet;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Lcom/android/server/am/BroadcastProcessQueue$BroadcastConsumer;Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda9;
 HSPLcom/android/server/am/BroadcastQueueModernImpl;->updateRunnableList(Lcom/android/server/am/BroadcastProcessQueue;)V+]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;
-HSPLcom/android/server/am/BroadcastQueueModernImpl;->updateRunningListLocked()V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-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;Lcom/android/server/am/ProcessRecord;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;ZZZILandroid/app/BackgroundStartPrivileges;ZLjava/util/function/BiFunction;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->updateRunningListLocked()V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/BroadcastQueueModernImpl;->updateWarmProcess(Lcom/android/server/am/BroadcastProcessQueue;)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/am/BroadcastQueueModernImpl;Lcom/android/server/am/BroadcastQueueModernImpl;]Lcom/android/server/am/BroadcastProcessQueue;Lcom/android/server/am/BroadcastProcessQueue;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+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;Lcom/android/server/am/ProcessRecord;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;ZZZIILandroid/app/BackgroundStartPrivileges;ZLjava/util/function/BiFunction;I)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Landroid/content/Intent;Landroid/content/Intent;
+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;Lcom/android/server/am/ProcessRecord;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;ZZZILandroid/app/BackgroundStartPrivileges;ZLjava/util/function/BiFunction;I)V
 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;->applySingletonPolicy(Lcom/android/server/am/ActivityManagerService;)V+]Ljava/util/List;Ljava/util/ImmutableCollections$ListN;,Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/BroadcastRecord;->calculateBlockedUntilTerminalCount(Ljava/util/List;Z)[I+]Ljava/util/List;Ljava/util/ImmutableCollections$ListN;,Ljava/util/ArrayList;
-HSPLcom/android/server/am/BroadcastRecord;->getDeliveryGroupMatchingFilter(Lcom/android/server/am/BroadcastRecord;)Landroid/content/IntentFilter;
-HSPLcom/android/server/am/BroadcastRecord;->getDeliveryGroupMatchingKey(Lcom/android/server/am/BroadcastRecord;)Ljava/lang/String;+]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;
+HSPLcom/android/server/am/BroadcastRecord;->applySingletonPolicy(Lcom/android/server/am/ActivityManagerService;)V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/BroadcastRecord;->calculateBlockedUntilBeyondCount(Ljava/util/List;Z)[I+]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/am/BroadcastRecord;->calculateDeferUntilActive(ILandroid/app/BroadcastOptions;Landroid/content/IIntentReceiver;ZZ)Z+]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;
+HSPLcom/android/server/am/BroadcastRecord;->calculateTypeForLogging()I+]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
+HSPLcom/android/server/am/BroadcastRecord;->calculateUrgent(Landroid/content/Intent;Landroid/app/BroadcastOptions;)Z+]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Landroid/content/Intent;Landroid/content/Intent;
+HPLcom/android/server/am/BroadcastRecord;->containsReceiver(Ljava/lang/Object;)Z+]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/am/BroadcastRecord;->getDeliveryGroupMatchingFilter(Lcom/android/server/am/BroadcastRecord;)Landroid/content/IntentFilter;+]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;
+HSPLcom/android/server/am/BroadcastRecord;->getDeliveryGroupMatchingKeyFragment(Lcom/android/server/am/BroadcastRecord;)Ljava/lang/String;+]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;
+HSPLcom/android/server/am/BroadcastRecord;->getDeliveryGroupMatchingNamespaceFragment(Lcom/android/server/am/BroadcastRecord;)Ljava/lang/String;+]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;
+HSPLcom/android/server/am/BroadcastRecord;->getDeliveryGroupPolicy()I+]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;
 HSPLcom/android/server/am/BroadcastRecord;->getDeliveryState(I)I
-HSPLcom/android/server/am/BroadcastRecord;->getReceiverIntent(Ljava/lang/Object;)Landroid/content/Intent;+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Landroid/content/Intent;Landroid/content/Intent;]Ljava/util/function/BiFunction;Lcom/android/server/om/OverlayManagerService$$ExternalSyntheticLambda4;,Lcom/android/server/pm/SuspendPackageHelper$$ExternalSyntheticLambda2;
-HSPLcom/android/server/am/BroadcastRecord;->getReceiverPriority(Ljava/lang/Object;)I
+HSPLcom/android/server/am/BroadcastRecord;->getReceiverIntent(Ljava/lang/Object;)Landroid/content/Intent;+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Landroid/content/Intent;Landroid/content/Intent;]Ljava/util/function/BiFunction;Lcom/android/server/pm/SuspendPackageHelper$$ExternalSyntheticLambda3;,Lcom/android/server/om/OverlayManagerService$$ExternalSyntheticLambda4;,Lcom/android/server/pm/DistractingPackageHelper$$ExternalSyntheticLambda3;
+HSPLcom/android/server/am/BroadcastRecord;->getReceiverPriority(Ljava/lang/Object;)I+]Landroid/content/IntentFilter;Lcom/android/server/am/BroadcastFilter;
 HSPLcom/android/server/am/BroadcastRecord;->getReceiverProcessName(Ljava/lang/Object;)Ljava/lang/String;
 HSPLcom/android/server/am/BroadcastRecord;->getReceiverUid(Ljava/lang/Object;)I
+HSPLcom/android/server/am/BroadcastRecord;->isAssumedDelivered(I)Z+]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/am/BroadcastRecord;->isBlocked(I)Z
 HSPLcom/android/server/am/BroadcastRecord;->isCallerInstrumented(Lcom/android/server/am/ProcessRecord;I)Z+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-HSPLcom/android/server/am/BroadcastRecord;->isDeferUntilActive()Z
 HSPLcom/android/server/am/BroadcastRecord;->isDeliveryStateTerminal(I)Z
 HSPLcom/android/server/am/BroadcastRecord;->isForeground()Z+]Landroid/content/Intent;Landroid/content/Intent;
-HSPLcom/android/server/am/BroadcastRecord;->isNoAbort()Z
+HSPLcom/android/server/am/BroadcastRecord;->isMatchingKeyNull(Lcom/android/server/am/BroadcastRecord;)Z
+HPLcom/android/server/am/BroadcastRecord;->isNoAbort()Z
 HSPLcom/android/server/am/BroadcastRecord;->isOffload()Z
 HSPLcom/android/server/am/BroadcastRecord;->isPrioritized([IZ)Z
 HSPLcom/android/server/am/BroadcastRecord;->isReceiverEquals(Ljava/lang/Object;Ljava/lang/Object;)Z
 HSPLcom/android/server/am/BroadcastRecord;->isReplacePending()Z
-HSPLcom/android/server/am/BroadcastRecord;->isUrgent()Z+]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
-HSPLcom/android/server/am/BroadcastRecord;->matchesDeliveryGroup(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;)Z+]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Ljava/util/function/Predicate;Landroid/content/IntentFilter$$ExternalSyntheticLambda2;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/BroadcastRecord;->isUrgent()Z
+HSPLcom/android/server/am/BroadcastRecord;->matchesDeliveryGroup(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;)Z+]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/am/BroadcastRecord;->maybeStripForHistory()Lcom/android/server/am/BroadcastRecord;
-HSPLcom/android/server/am/BroadcastRecord;->setDeliveryState(IILjava/lang/String;)V
+HSPLcom/android/server/am/BroadcastRecord;->setDeliveryState(IILjava/lang/String;)Z+]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;
 HSPLcom/android/server/am/BroadcastRecord;->toShortString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/am/BroadcastSkipPolicy;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/BroadcastSkipPolicy;->disallowBackgroundStart(Lcom/android/server/am/BroadcastRecord;)Z+]Landroid/content/Intent;Landroid/content/Intent;
-HPLcom/android/server/am/BroadcastSkipPolicy;->noteOpForManifestReceiverInner(ILcom/android/server/am/BroadcastRecord;Landroid/content/pm/ResolveInfo;Landroid/content/ComponentName;Ljava/lang/String;)Z
+HPLcom/android/server/am/BroadcastSkipPolicy;->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/BroadcastSkipPolicy;->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/BroadcastSkipPolicy;->shouldSkipMessage(Lcom/android/server/am/BroadcastRecord;Landroid/content/pm/ResolveInfo;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/am/BroadcastSkipPolicy;Lcom/android/server/am/BroadcastSkipPolicy;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/firewall/IntentFirewall;Lcom/android/server/firewall/IntentFirewall;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/BroadcastSkipPolicy;->shouldSkipMessage(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastFilter;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/BroadcastSkipPolicy;Lcom/android/server/am/BroadcastSkipPolicy;]Lcom/android/server/firewall/IntentFirewall;Lcom/android/server/firewall/IntentFirewall;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueueModernImpl;
+HSPLcom/android/server/am/BroadcastSkipPolicy;->shouldSkipMessage(Lcom/android/server/am/BroadcastRecord;Landroid/content/pm/ResolveInfo;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/am/BroadcastSkipPolicy;Lcom/android/server/am/BroadcastSkipPolicy;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/firewall/IntentFirewall;Lcom/android/server/firewall/IntentFirewall;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
+HSPLcom/android/server/am/BroadcastSkipPolicy;->shouldSkipMessage(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastFilter;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/BroadcastSkipPolicy;Lcom/android/server/am/BroadcastSkipPolicy;]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/BroadcastQueueModernImpl;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/BroadcastSkipPolicy;->shouldSkipMessage(Lcom/android/server/am/BroadcastRecord;Ljava/lang/Object;)Ljava/lang/String;+]Lcom/android/server/am/BroadcastSkipPolicy;Lcom/android/server/am/BroadcastSkipPolicy;
 HPLcom/android/server/am/BroadcastStats;->addBackgroundCheckViolation(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/BroadcastStats;->addBroadcast(Ljava/lang/String;Ljava/lang/String;IIJ)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
@@ -1655,7 +1800,6 @@
 HSPLcom/android/server/am/CachedAppOptimizer$2;-><init>(Lcom/android/server/am/CachedAppOptimizer;)V
 HSPLcom/android/server/am/CachedAppOptimizer$3;-><init>(Lcom/android/server/am/CachedAppOptimizer;)V
 HSPLcom/android/server/am/CachedAppOptimizer$4;-><init>(Lcom/android/server/am/CachedAppOptimizer;)V
-HPLcom/android/server/am/CachedAppOptimizer$AggregatedCompactionStats;->addMemStats(JJJJJ)V
 HSPLcom/android/server/am/CachedAppOptimizer$CancelCompactReason;->$values()[Lcom/android/server/am/CachedAppOptimizer$CancelCompactReason;
 HSPLcom/android/server/am/CachedAppOptimizer$CancelCompactReason;-><clinit>()V
 HSPLcom/android/server/am/CachedAppOptimizer$CancelCompactReason;-><init>(Ljava/lang/String;I)V
@@ -1668,42 +1812,44 @@
 HSPLcom/android/server/am/CachedAppOptimizer$DefaultProcessDependencies;-><init>()V
 HSPLcom/android/server/am/CachedAppOptimizer$DefaultProcessDependencies;-><init>(Lcom/android/server/am/CachedAppOptimizer$DefaultProcessDependencies-IA;)V
 HPLcom/android/server/am/CachedAppOptimizer$DefaultProcessDependencies;->getRss(I)[J
-HPLcom/android/server/am/CachedAppOptimizer$FreezeHandler;->freezeProcess(Lcom/android/server/am/ProcessRecord;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Random;Ljava/util/Random;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/CachedAppOptimizer$FreezeHandler;Lcom/android/server/am/CachedAppOptimizer$FreezeHandler;
-HPLcom/android/server/am/CachedAppOptimizer$FreezeHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/internal/os/ProcLocksReader;Lcom/android/internal/os/ProcLocksReader;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/CachedAppOptimizer$FreezeHandler;Lcom/android/server/am/CachedAppOptimizer$FreezeHandler;
-HPLcom/android/server/am/CachedAppOptimizer$FreezeHandler;->reportUnfreeze(IILjava/lang/String;I)V+]Ljava/util/Random;Ljava/util/Random;]Lcom/android/server/am/CachedAppOptimizer$FreezeHandler;Lcom/android/server/am/CachedAppOptimizer$FreezeHandler;
-HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Lcom/android/server/am/CachedAppOptimizer$AggregatedCompactionStats;Lcom/android/server/am/CachedAppOptimizer$AggregatedProcessCompactionStats;,Lcom/android/server/am/CachedAppOptimizer$AggregatedSourceCompactionStats;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/LinkedHashMap;Lcom/android/server/am/CachedAppOptimizer$3;]Lcom/android/server/am/CachedAppOptimizer$ProcessDependencies;Lcom/android/server/am/CachedAppOptimizer$DefaultProcessDependencies;]Ljava/util/LinkedList;Lcom/android/server/am/CachedAppOptimizer$4;]Lcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;Lcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;]Ljava/lang/Enum;Lcom/android/server/am/CachedAppOptimizer$CompactProfile;,Lcom/android/server/am/CachedAppOptimizer$CompactSource;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/CachedAppOptimizer$SingleCompactionStats;Lcom/android/server/am/CachedAppOptimizer$SingleCompactionStats;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->shouldOomAdjThrottleCompaction(Lcom/android/server/am/ProcessRecord;)Z+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;
-HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->shouldRssThrottleCompaction(Lcom/android/server/am/CachedAppOptimizer$CompactProfile;ILjava/lang/String;[J)Z+]Ljava/util/LinkedHashMap;Lcom/android/server/am/CachedAppOptimizer$3;]Lcom/android/server/am/CachedAppOptimizer$SingleCompactionStats;Lcom/android/server/am/CachedAppOptimizer$SingleCompactionStats;
-HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->shouldTimeThrottleCompaction(Lcom/android/server/am/ProcessRecord;JLcom/android/server/am/CachedAppOptimizer$CompactProfile;Lcom/android/server/am/CachedAppOptimizer$CompactSource;)Z+]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;
+HPLcom/android/server/am/CachedAppOptimizer$FreezeHandler;->freezeProcess(Lcom/android/server/am/ProcessRecord;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Random;Ljava/util/Random;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]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/CachedAppOptimizer$FreezeHandler;Lcom/android/server/am/CachedAppOptimizer$FreezeHandler;
+HPLcom/android/server/am/CachedAppOptimizer$FreezeHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Lcom/android/internal/os/ProcLocksReader;Lcom/android/internal/os/ProcLocksReader;]Landroid/os/Handler;Lcom/android/server/am/CachedAppOptimizer$FreezeHandler;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/CachedAppOptimizer$FreezeHandler;Lcom/android/server/am/CachedAppOptimizer$FreezeHandler;
+HPLcom/android/server/am/CachedAppOptimizer$FreezeHandler;->reportUnfreeze(IILjava/lang/String;I)V
+HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->shouldOomAdjThrottleCompaction(Lcom/android/server/am/ProcessRecord;)Z
+HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->shouldRssThrottleCompaction(Lcom/android/server/am/CachedAppOptimizer$CompactProfile;ILjava/lang/String;[J)Z
+HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->shouldThrottleMiscCompaction(Lcom/android/server/am/ProcessRecord;I)Z
+HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->shouldTimeThrottleCompaction(Lcom/android/server/am/ProcessRecord;JLcom/android/server/am/CachedAppOptimizer$CompactProfile;Lcom/android/server/am/CachedAppOptimizer$CompactSource;)Z
 HSPLcom/android/server/am/CachedAppOptimizer$SettingsContentObserver;-><init>(Lcom/android/server/am/CachedAppOptimizer;)V
-HPLcom/android/server/am/CachedAppOptimizer$SingleCompactionStats;-><init>([JLcom/android/server/am/CachedAppOptimizer$CompactSource;Ljava/lang/String;JJJJJIIII)V
 HSPLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fgetmAm(Lcom/android/server/am/CachedAppOptimizer;)Lcom/android/server/am/ActivityManagerService;
-HPLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fgetmPendingCompactionProcesses(Lcom/android/server/am/CachedAppOptimizer;)Ljava/util/ArrayList;
 HPLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fgetmProcLock(Lcom/android/server/am/CachedAppOptimizer;)Lcom/android/server/am/ActivityManagerGlobalLock;
-HPLcom/android/server/am/CachedAppOptimizer;->-$$Nest$mgetPerProcessAggregatedCompactStat(Lcom/android/server/am/CachedAppOptimizer;Ljava/lang/String;)Lcom/android/server/am/CachedAppOptimizer$AggregatedProcessCompactionStats;+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;
-HPLcom/android/server/am/CachedAppOptimizer;->-$$Nest$mgetPerSourceAggregatedCompactStat(Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer$CompactSource;)Lcom/android/server/am/CachedAppOptimizer$AggregatedSourceCompactionStats;+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;
+HPLcom/android/server/am/CachedAppOptimizer;->-$$Nest$smtraceAppFreeze(Ljava/lang/String;II)V
 HSPLcom/android/server/am/CachedAppOptimizer;-><clinit>()V
 HSPLcom/android/server/am/CachedAppOptimizer;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/CachedAppOptimizer;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/CachedAppOptimizer$PropertyChangedCallbackForTest;Lcom/android/server/am/CachedAppOptimizer$ProcessDependencies;)V
-HPLcom/android/server/am/CachedAppOptimizer;->cancelCompactionForProcess(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/CachedAppOptimizer$CancelCompactReason;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Ljava/util/EnumMap;Ljava/util/EnumMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/am/CachedAppOptimizer;->compactApp(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/CachedAppOptimizer$CompactProfile;Lcom/android/server/am/CachedAppOptimizer$CompactSource;Z)Z+]Landroid/os/Handler;Lcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Ljava/lang/Enum;Lcom/android/server/am/CachedAppOptimizer$CompactProfile;]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;->cancelCompactionForProcess(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/CachedAppOptimizer$CancelCompactReason;)V+]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Ljava/util/EnumMap;Ljava/util/EnumMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Integer;Ljava/lang/Integer;
+HPLcom/android/server/am/CachedAppOptimizer;->compactApp(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/CachedAppOptimizer$CompactProfile;Lcom/android/server/am/CachedAppOptimizer$CompactSource;Z)Z
+HPLcom/android/server/am/CachedAppOptimizer;->freezeAppAsyncInternalLSP(Lcom/android/server/am/ProcessRecord;JZ)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Landroid/os/Handler;Lcom/android/server/am/CachedAppOptimizer$FreezeHandler;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HPLcom/android/server/am/CachedAppOptimizer;->freezeAppAsyncLSP(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/CachedAppOptimizer;->freezeAppAsyncLSP(Lcom/android/server/am/ProcessRecord;J)V
 HSPLcom/android/server/am/CachedAppOptimizer;->freezerExemptInstPkg()Z
-HPLcom/android/server/am/CachedAppOptimizer;->getPerProcessAggregatedCompactStat(Ljava/lang/String;)Lcom/android/server/am/CachedAppOptimizer$AggregatedProcessCompactionStats;+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;
 HPLcom/android/server/am/CachedAppOptimizer;->getPerSourceAggregatedCompactStat(Lcom/android/server/am/CachedAppOptimizer$CompactSource;)Lcom/android/server/am/CachedAppOptimizer$AggregatedSourceCompactionStats;+]Ljava/util/EnumMap;Ljava/util/EnumMap;
-HPLcom/android/server/am/CachedAppOptimizer;->meetsCompactionRequirements(Lcom/android/server/am/ProcessRecord;)Z
+HSPLcom/android/server/am/CachedAppOptimizer;->getUnfreezeReasonCodeFromOomAdjReason(I)I
 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;
-HPLcom/android/server/am/CachedAppOptimizer;->shouldCompactBFGS(Lcom/android/server/am/ProcessRecord;J)Z
-HPLcom/android/server/am/CachedAppOptimizer;->traceAppFreeze(Ljava/lang/String;IZ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLcom/android/server/am/CachedAppOptimizer;->unfreezeAppInternalLSP(Lcom/android/server/am/ProcessRecord;I)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;->onOomAdjustChanged(IILcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/CachedAppOptimizer;->onProcessFrozen(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/CachedAppOptimizer;->postUidFrozenMessage(IZ)V
+HSPLcom/android/server/am/CachedAppOptimizer;->reportProcessFreezableChangedLocked(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/CachedAppOptimizer;->traceAppFreeze(Ljava/lang/String;II)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/CachedAppOptimizer;->unfreezeAppInternalLSP(Lcom/android/server/am/ProcessRecord;IZ)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]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/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/CachedAppOptimizer;->unfreezeAppLSP(Lcom/android/server/am/ProcessRecord;I)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;
-HSPLcom/android/server/am/CachedAppOptimizer;->unfreezeTemporarily(Lcom/android/server/am/ProcessRecord;I)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;
+HPLcom/android/server/am/CachedAppOptimizer;->unfreezeProcess(II)V
+HPLcom/android/server/am/CachedAppOptimizer;->unfreezeTemporarily(Lcom/android/server/am/ProcessRecord;I)V
+HPLcom/android/server/am/CachedAppOptimizer;->unfreezeTemporarily(Lcom/android/server/am/ProcessRecord;IJ)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;
+HPLcom/android/server/am/CachedAppOptimizer;->updateEarliestFreezableTime(Lcom/android/server/am/ProcessRecord;J)J+]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;
 HSPLcom/android/server/am/CachedAppOptimizer;->useCompaction()Z
 HSPLcom/android/server/am/CachedAppOptimizer;->useFreezer()Z
-HSPLcom/android/server/am/ComponentAliasResolver$$ExternalSyntheticLambda1;-><init>(Landroid/content/pm/ResolveInfo;)V
-HSPLcom/android/server/am/ComponentAliasResolver$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/am/ComponentAliasResolver;)V
-HSPLcom/android/server/am/ComponentAliasResolver$$ExternalSyntheticLambda3;-><init>(Landroid/content/Intent;Ljava/lang/String;III)V
+HSPLcom/android/server/am/ComponentAliasResolver$$ExternalSyntheticLambda2;-><init>(Landroid/content/Intent;Ljava/lang/String;III)V
 HSPLcom/android/server/am/ComponentAliasResolver$1;-><init>(Lcom/android/server/am/ComponentAliasResolver;)V
 HSPLcom/android/server/am/ComponentAliasResolver$Resolution;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/am/ComponentAliasResolver$Resolution;->getAlias()Ljava/lang/Object;+]Lcom/android/server/am/ComponentAliasResolver$Resolution;Lcom/android/server/am/ComponentAliasResolver$Resolution;
@@ -1716,7 +1862,8 @@
 HSPLcom/android/server/am/ConnectionRecord;-><init>(Lcom/android/server/am/AppBindRecord;Lcom/android/server/wm/ActivityServiceConnectionsHolder;Landroid/app/IServiceConnection;JILandroid/app/PendingIntent;ILjava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;)V
 HSPLcom/android/server/am/ConnectionRecord;->getFlags()J
 HSPLcom/android/server/am/ConnectionRecord;->hasFlag(I)Z
-HPLcom/android/server/am/ConnectionRecord;->notHasFlag(I)Z+]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;
+HSPLcom/android/server/am/ConnectionRecord;->hasFlag(J)Z
+HSPLcom/android/server/am/ConnectionRecord;->notHasFlag(I)Z+]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;
 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;
 HSPLcom/android/server/am/ConnectionRecord;->trackProcState(II)V+]Lcom/android/internal/app/procstats/AssociationState$SourceState;Lcom/android/internal/app/procstats/AssociationState$SourceState;
@@ -1725,7 +1872,7 @@
 HPLcom/android/server/am/ContentProviderConnection;->decrementCount(Z)I
 HPLcom/android/server/am/ContentProviderConnection;->incrementCount(Z)I
 HSPLcom/android/server/am/ContentProviderConnection;->initializeCount(Z)V
-HSPLcom/android/server/am/ContentProviderConnection;->startAssociationIfNeeded()V
+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;
 HPLcom/android/server/am/ContentProviderConnection;->stopAssociation()V
 HPLcom/android/server/am/ContentProviderConnection;->totalRefCount()I
 HSPLcom/android/server/am/ContentProviderConnection;->trackProcState(II)V+]Lcom/android/internal/app/procstats/AssociationState$SourceState;Lcom/android/internal/app/procstats/AssociationState$SourceState;
@@ -1736,44 +1883,41 @@
 HSPLcom/android/server/am/ContentProviderHelper;->$r8$lambda$AjAJBEPhein8DBXKJLOREmPp-Vg(Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ProcessRecord;Landroid/content/pm/ProviderInfo;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/am/ContentProviderHelper;-><clinit>()V
 HSPLcom/android/server/am/ContentProviderHelper;-><init>(Lcom/android/server/am/ActivityManagerService;Z)V
+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;]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;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 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;->checkTime(JLjava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/ContentProviderHelper;->cleanupAppInLaunchingProvidersLocked(Lcom/android/server/am/ProcessRecord;Z)Z
 HPLcom/android/server/am/ContentProviderHelper;->decProviderCountLocked(Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderRecord;Landroid/os/IBinder;ZZZ)Z+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderConnection;
-HSPLcom/android/server/am/ContentProviderHelper;->enforceContentProviderRestrictionsForSdkSandbox(Landroid/content/pm/ProviderInfo;)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;->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/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;
-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/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Landroid/content/pm/UserProperties;Landroid/content/pm/UserProperties;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]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;
-HPLcom/android/server/am/ContentProviderHelper;->getMimeTypeFilterAsync(Landroid/net/Uri;ILandroid/os/RemoteCallback;)V+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]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
+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/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Landroid/content/pm/UserProperties;Landroid/content/pm/UserProperties;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]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/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
+HPLcom/android/server/am/ContentProviderHelper;->getMimeTypeFilterAsync(Landroid/net/Uri;ILandroid/os/RemoteCallback;)V+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Landroid/content/AttributionSource$Builder;Landroid/content/AttributionSource$Builder;]Landroid/os/RemoteCallback;Landroid/os/RemoteCallback;]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/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;]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;
-HSPLcom/android/server/am/ContentProviderHelper;->isProcessAliveLocked(Lcom/android/server/am/ProcessRecord;)Z
+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;
 HSPLcom/android/server/am/ContentProviderHelper;->lambda$checkContentProviderAssociation$4(Lcom/android/server/am/ProcessRecord;Landroid/content/pm/ProviderInfo;Ljava/lang/String;)Ljava/lang/String;
 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;
 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/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/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 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;
-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/ContentProviderRecord;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/pm/ProviderInfo;Landroid/content/pm/ApplicationInfo;Landroid/content/ComponentName;Z)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/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Ljava/lang/String;Ljava/lang/String;]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/ActivityThread$ApplicationThread;
+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;
 HSPLcom/android/server/am/ContentProviderRecord;->canRunHere(Lcom/android/server/am/ProcessRecord;)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;]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;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/ContentProviderRecord;->onProviderPublishStatusLocked(Z)V+]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IApplicationThread;Landroid/app/ActivityThread$ApplicationThread;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 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;
 HSPLcom/android/server/am/CoreSettingsObserver;->getCoreSettingsLocked()Landroid/os/Bundle;
-HPLcom/android/server/am/DataConnectionStats$PhoneStateListenerExecutor;->execute(Ljava/lang/Runnable;)V
-HPLcom/android/server/am/DataConnectionStats$PhoneStateListenerImpl;->onServiceStateChanged(Landroid/telephony/ServiceState;)V
+HPLcom/android/server/am/DataConnectionStats$PhoneStateListenerExecutor;->execute(Ljava/lang/Runnable;)V+]Landroid/os/Handler;Landroid/os/Handler;
 HPLcom/android/server/am/DataConnectionStats;->notePhoneDataConnectionState()V
 HSPLcom/android/server/am/DropboxRateLimiter$DefaultClock;-><init>()V
 HSPLcom/android/server/am/DropboxRateLimiter$DefaultClock;-><init>(Lcom/android/server/am/DropboxRateLimiter$DefaultClock-IA;)V
-HSPLcom/android/server/am/DropboxRateLimiter$RateLimitResult;-><init>(Lcom/android/server/am/DropboxRateLimiter;ZI)V
-HSPLcom/android/server/am/DropboxRateLimiter$RateLimitResult;->createHeader()Ljava/lang/String;
 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;->shouldRateLimit(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/am/DropboxRateLimiter$RateLimitResult;
 HSPLcom/android/server/am/ErrorDialogController;-><init>(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ErrorDialogController;->clearAllErrorDialogs()V
@@ -1785,29 +1929,34 @@
 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;->removeUid(I)V
+HSPLcom/android/server/am/ForegroundServiceTypeLoggerModule$FgsApiRecord;-><init>(IILjava/lang/String;IJ)V
 HSPLcom/android/server/am/ForegroundServiceTypeLoggerModule;-><init>()V
+HSPLcom/android/server/am/ForegroundServiceTypeLoggerModule;->hasValidActiveFgs(II)Z
+HSPLcom/android/server/am/ForegroundServiceTypeLoggerModule;->logForegroundServiceApiEventBegin(IIILjava/lang/String;)J
+HPLcom/android/server/am/ForegroundServiceTypeLoggerModule;->logForegroundServiceApiEventEnd(III)J
 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/server/power/stats/BatteryStatsImpl$StopwatchTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
 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;->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/server/power/stats/BatteryStatsImpl$Uid$Wakelock;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats$ControllerActivityCounter;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;]Landroid/os/BatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;]Landroid/os/BatteryStats$LongCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;,Lcom/android/server/power/stats/BatteryStatsImpl$1;,Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;]Landroid/os/BatteryStats$Uid$Sensor;Lcom/android/server/power/stats/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+]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/server/power/stats/BatteryStatsImpl$Uid$Wakelock;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats$ControllerActivityCounter;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;]Landroid/os/BatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/BatteryStats$LongCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;,Lcom/android/server/power/stats/BatteryStatsImpl$1;,Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;]Landroid/os/BatteryStats$Uid$Sensor;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Sensor;
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V+]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/server/am/HostingRecord;->getDefiningProcessName()Ljava/lang/String;
 HSPLcom/android/server/am/HostingRecord;->getDefiningUid()I
 HSPLcom/android/server/am/HostingRecord;->getHostingTypeIdStatsd(Ljava/lang/String;)I
+HSPLcom/android/server/am/HostingRecord;->getName()Ljava/lang/String;
+HSPLcom/android/server/am/HostingRecord;->getTriggerTypeForStatsd(Ljava/lang/String;)I
 HSPLcom/android/server/am/InstrumentationReporter;-><init>()V
 HSPLcom/android/server/am/IntentBindRecord;-><init>(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent$FilterComparison;)V
+HPLcom/android/server/am/LmkdConnection$1;->onFileDescriptorEvents(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;->exchange(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Z+]Lcom/android/server/am/LmkdConnection;Lcom/android/server/am/LmkdConnection;
+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+]Lcom/android/server/am/LmkdConnection;Lcom/android/server/am/LmkdConnection;
 HSPLcom/android/server/am/LmkdConnection;->isConnected()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;II)V
+HPLcom/android/server/am/LmkdConnection;->read(Ljava/nio/ByteBuffer;)I
+HSPLcom/android/server/am/LmkdConnection;->write(Ljava/nio/ByteBuffer;)Z
 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
 HSPLcom/android/server/am/LowMemDetector$LowMemThread;->run()V
-HSPLcom/android/server/am/LowMemDetector;->-$$Nest$fgetmPressureStateLock(Lcom/android/server/am/LowMemDetector;)Ljava/lang/Object;
-HSPLcom/android/server/am/LowMemDetector;->-$$Nest$fputmPressureState(Lcom/android/server/am/LowMemDetector;I)V
 HSPLcom/android/server/am/LowMemDetector;->-$$Nest$mwaitForPressure(Lcom/android/server/am/LowMemDetector;)I
 HSPLcom/android/server/am/LowMemDetector;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/LowMemDetector;->getMemFactor()I
@@ -1837,47 +1986,47 @@
 HPLcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;->onOtherActivity()V+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;
 HPLcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;->onPausedActivity()V
 HPLcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;->onStoppingActivity(Z)V
+HPLcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;->onVisibleActivity()V
 HSPLcom/android/server/am/OomAdjuster;->$r8$lambda$G9qaeCQ1bE6cG3uK32c_XCnZvYk(Landroid/os/Message;)Z
-HSPLcom/android/server/am/OomAdjuster;->$r8$lambda$UbcpruvRTpdtq55GSm9MjprdC4o(Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/ProcessRecord;)V
 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;ZJJI)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;
+HSPLcom/android/server/am/OomAdjuster;->applyOomAdjLSP(Lcom/android/server/am/ProcessRecord;ZJJI)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/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;]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;]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;]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/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;]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;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]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/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;->createAdjusterThread()Lcom/android/server/ServiceThread;
-HSPLcom/android/server/am/OomAdjuster;->enqueueOomAdjTargetLocked(Lcom/android/server/am/ProcessRecord;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/am/OomAdjuster;->enqueueOomAdjTargetLocked(Lcom/android/server/am/ProcessRecord;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;
 HSPLcom/android/server/am/OomAdjuster;->getBfslCapabilityFromClient(Lcom/android/server/am/ProcessRecord;)I+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;
 HSPLcom/android/server/am/OomAdjuster;->getDefaultCapability(Lcom/android/server/am/ProcessRecord;I)I+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-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;
+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/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
 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;
 HSPLcom/android/server/am/OomAdjuster;->oomAdjReasonToString(I)Ljava/lang/String;
-HSPLcom/android/server/am/OomAdjuster;->performUpdateOomAdjLSP(I)V
+HSPLcom/android/server/am/OomAdjuster;->performUpdateOomAdjLSP(I)V+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/OomAdjuster;->performUpdateOomAdjLSP(Lcom/android/server/am/ProcessRecord;I)Z+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Landroid/util/ArraySet;Landroid/util/ArraySet;]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/OomAdjProfiler;Lcom/android/server/am/OomAdjProfiler;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/OomAdjuster;->performUpdateOomAdjLSP(Lcom/android/server/am/ProcessRecord;ILcom/android/server/am/ProcessRecord;JI)Z+]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Landroid/util/ArraySet;Landroid/util/ArraySet;]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;
-HSPLcom/android/server/am/OomAdjuster;->performUpdateOomAdjPendingTargetsLocked(I)V+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/OomAdjProfiler;Lcom/android/server/am/OomAdjProfiler;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/OomAdjuster;->performUpdateOomAdjPendingTargetsLocked(I)V+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/OomAdjProfiler;Lcom/android/server/am/OomAdjProfiler;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/OomAdjuster;->removeOomAdjTargetLocked(Lcom/android/server/am/ProcessRecord;Z)V
 HSPLcom/android/server/am/OomAdjuster;->setAppIdTempAllowlistStateLSP(IZ)V+]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;
 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;->unfreezeTemporarily(Lcom/android/server/am/ProcessRecord;I)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/OomAdjuster;->updateAndTrimProcessLSP(JJJLcom/android/server/am/ActiveUids;I)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/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;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/OomAdjuster;->updateAppFreezeStateLSP(Lcom/android/server/am/ProcessRecord;I)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;
-HSPLcom/android/server/am/OomAdjuster;->updateOomAdjInnerLSP(ILcom/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/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]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(I)V
+HSPLcom/android/server/am/OomAdjuster;->updateOomAdjInnerLSP(ILcom/android/server/am/ProcessRecord;Ljava/util/ArrayList;Lcom/android/server/am/ActiveUids;ZZ)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]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;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]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;->updateOomAdjLSP(I)V+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;
 HSPLcom/android/server/am/OomAdjuster;->updateOomAdjLSP(Lcom/android/server/am/ProcessRecord;I)Z+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;
-HSPLcom/android/server/am/OomAdjuster;->updateOomAdjLocked(I)V
+HSPLcom/android/server/am/OomAdjuster;->updateOomAdjLocked(I)V+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;
 HSPLcom/android/server/am/OomAdjuster;->updateOomAdjLocked(Lcom/android/server/am/ProcessRecord;I)Z+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;
 HSPLcom/android/server/am/OomAdjuster;->updateOomAdjPendingTargetsLocked(I)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+]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/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/PackageList;-><init>(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/PackageList;->containsKey(Ljava/lang/Object;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HSPLcom/android/server/am/PackageList;->forEachPackage(Ljava/util/function/BiConsumer;)V
+HSPLcom/android/server/am/PackageList;->forEachPackage(Ljava/util/function/BiConsumer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/BiConsumer;Lcom/android/server/am/ProcessProfileRecord$$ExternalSyntheticLambda0;
 HSPLcom/android/server/am/PackageList;->forEachPackageProcessStats(Ljava/util/function/Consumer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Consumer;megamorphic_types
 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;
@@ -1887,73 +2036,65 @@
 HSPLcom/android/server/am/PendingIntentController;-><init>(Landroid/os/Looper;Lcom/android/server/am/UserController;Lcom/android/server/am/ActivityManagerConstants;)V
 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;
-HSPLcom/android/server/am/PendingIntentController;->decrementUidStatLocked(Lcom/android/server/am/PendingIntentRecord;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
-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;
-HSPLcom/android/server/am/PendingIntentController;->incrementUidStatLocked(Lcom/android/server/am/PendingIntentRecord;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
-HPLcom/android/server/am/PendingIntentController;->makeIntentSenderCanceled(Lcom/android/server/am/PendingIntentRecord;)V+]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;->decrementUidStatLocked(Lcom/android/server/am/PendingIntentRecord;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+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;]Landroid/app/ActivityOptions;Landroid/app/ActivityOptions;
+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
+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;
 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;
 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$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$TempAllowListDuration;-><init>(JIILjava/lang/String;)V
 HSPLcom/android/server/am/PendingIntentRecord;-><init>(Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentRecord$Key;I)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;->getBackgroundStartPrivilegesForActivitySender(Landroid/util/ArraySet;Landroid/os/IBinder;Landroid/os/Bundle;I)Landroid/app/BackgroundStartPrivileges;+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
-HPLcom/android/server/am/PendingIntentRecord;->registerCancelListenerLocked(Lcom/android/internal/os/IResultReceiver;)V
-HPLcom/android/server/am/PendingIntentRecord;->sendInner(Landroid/app/IApplicationThread;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/content/IIntentReceiver;Landroid/app/PendingIntent$FinishedDispatcher;,Landroid/content/IIntentReceiver$Stub$Proxy;]Landroid/app/ActivityOptions;Landroid/app/ActivityOptions;]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/am/PendingIntentRecord;Lcom/android/server/am/PendingIntentRecord;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/wm/SafeActivityOptions;Lcom/android/server/wm/SafeActivityOptions;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;
+HPLcom/android/server/am/PendingIntentRecord;->registerCancelListenerLocked(Lcom/android/internal/os/IResultReceiver;)V+]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
+HPLcom/android/server/am/PendingIntentRecord;->sendInner(Landroid/app/IApplicationThread;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;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/app/ActivityOptions;Landroid/app/ActivityOptions;]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]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;]Lcom/android/server/am/PendingIntentRecord;Lcom/android/server/am/PendingIntentRecord;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;
 HPLcom/android/server/am/PendingIntentRecord;->sendWithResult(Landroid/app/IApplicationThread;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
+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;->unregisterCancelListenerLocked(Lcom/android/internal/os/IResultReceiver;)V
+HPLcom/android/server/am/PendingIntentRecord;->unregisterCancelListenerLocked(Lcom/android/internal/os/IResultReceiver;)V+]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
 HSPLcom/android/server/am/PendingStartActivityUids;-><init>()V
-HSPLcom/android/server/am/PendingStartActivityUids;->add(II)Z
+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;
 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
-HSPLcom/android/server/am/PendingTempAllowlists;->indexOfKey(I)I
-HSPLcom/android/server/am/PendingTempAllowlists;->put(ILcom/android/server/am/ActivityManagerService$PendingTempAllowlist;)V
-HSPLcom/android/server/am/PendingTempAllowlists;->size()I
+HSPLcom/android/server/am/PendingTempAllowlists;->indexOfKey(I)I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/am/PendingTempAllowlists;->put(ILcom/android/server/am/ActivityManagerService$PendingTempAllowlist;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/am/PendingTempAllowlists;->size()I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/am/PendingTempAllowlists;->valueAt(I)Lcom/android/server/am/ActivityManagerService$PendingTempAllowlist;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/am/PhantomProcessList$Injector;-><init>()V
 HSPLcom/android/server/am/PhantomProcessList;-><clinit>()V
 HSPLcom/android/server/am/PhantomProcessList;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 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;
+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$$ExternalSyntheticLambda34;]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;
-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;->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;->isAppProcess(I)Z+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;
 HPLcom/android/server/am/PhantomProcessList;->lookForPhantomProcessesLocked()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;
 HPLcom/android/server/am/PhantomProcessList;->lookForPhantomProcessesLocked(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/PhantomProcessList;Lcom/android/server/am/PhantomProcessList;]Ljava/io/InputStream;Ljava/io/FileInputStream;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/PhantomProcessList$Injector;Lcom/android/server/am/PhantomProcessList$Injector;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/PhantomProcessList;->onAppDied(I)V
 HSPLcom/android/server/am/PhantomProcessList;->probeCgroupVersion()V
 HPLcom/android/server/am/PhantomProcessList;->updateProcessCpuStatesLocked(Lcom/android/internal/os/ProcessCpuTracker;)V+]Lcom/android/internal/os/ProcessCpuTracker;Lcom/android/internal/os/ProcessCpuTracker;]Lcom/android/server/am/PhantomProcessList;Lcom/android/server/am/PhantomProcessList;]Lcom/android/server/am/PhantomProcessRecord;Lcom/android/server/am/PhantomProcessRecord;
-HPLcom/android/server/am/PhantomProcessRecord;->updateAdjLocked()V
 HSPLcom/android/server/am/PlatformCompatCache$CacheItem;->fetchLocked(Landroid/content/pm/ApplicationInfo;I)Z
-HSPLcom/android/server/am/PlatformCompatCache$CacheItem;->invalidate(Landroid/content/pm/ApplicationInfo;)V
+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
 HSPLcom/android/server/am/PlatformCompatCache;->getInstance()Lcom/android/server/am/PlatformCompatCache;
-HSPLcom/android/server/am/PlatformCompatCache;->invalidate(Landroid/content/pm/ApplicationInfo;)V
+HSPLcom/android/server/am/PlatformCompatCache;->invalidate(Landroid/content/pm/ApplicationInfo;)V+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Lcom/android/server/am/PlatformCompatCache$CacheItem;Lcom/android/server/am/PlatformCompatCache$CacheItem;
 HSPLcom/android/server/am/PlatformCompatCache;->isChangeEnabled(JLandroid/content/pm/ApplicationInfo;Z)Z
 HSPLcom/android/server/am/ProcessCachedOptimizerRecord;-><init>(Lcom/android/server/am/ProcessRecord;)V
-HPLcom/android/server/am/ProcessCachedOptimizerRecord;->getLastCompactProfile()Lcom/android/server/am/CachedAppOptimizer$CompactProfile;
-HPLcom/android/server/am/ProcessCachedOptimizerRecord;->getLastCompactTime()J
-HPLcom/android/server/am/ProcessCachedOptimizerRecord;->getReqCompactProfile()Lcom/android/server/am/CachedAppOptimizer$CompactProfile;
-HPLcom/android/server/am/ProcessCachedOptimizerRecord;->getReqCompactSource()Lcom/android/server/am/CachedAppOptimizer$CompactSource;
-HPLcom/android/server/am/ProcessCachedOptimizerRecord;->hasPendingCompact()Z
-HSPLcom/android/server/am/ProcessCachedOptimizerRecord;->init(J)V
-HPLcom/android/server/am/ProcessCachedOptimizerRecord;->isForceCompact()Z
+HPLcom/android/server/am/ProcessCachedOptimizerRecord;->getEarliestFreezableTime()J
 HSPLcom/android/server/am/ProcessCachedOptimizerRecord;->isFreezeExempt()Z
+HSPLcom/android/server/am/ProcessCachedOptimizerRecord;->isFreezeSticky()Z
 HSPLcom/android/server/am/ProcessCachedOptimizerRecord;->isFrozen()Z
 HSPLcom/android/server/am/ProcessCachedOptimizerRecord;->isPendingFreeze()Z
-HPLcom/android/server/am/ProcessCachedOptimizerRecord;->setForceCompact(Z)V
+HPLcom/android/server/am/ProcessCachedOptimizerRecord;->setEarliestFreezableTime(J)V
 HSPLcom/android/server/am/ProcessCachedOptimizerRecord;->setFreezerOverride(Z)V
-HPLcom/android/server/am/ProcessCachedOptimizerRecord;->setHasPendingCompact(Z)V
 HSPLcom/android/server/am/ProcessCachedOptimizerRecord;->setLastOomAdjChangeReason(I)V
-HPLcom/android/server/am/ProcessCachedOptimizerRecord;->setPendingFreeze(Z)V
-HPLcom/android/server/am/ProcessCachedOptimizerRecord;->setReqCompactProfile(Lcom/android/server/am/CachedAppOptimizer$CompactProfile;)V
-HPLcom/android/server/am/ProcessCachedOptimizerRecord;->setReqCompactSource(Lcom/android/server/am/CachedAppOptimizer$CompactSource;)V
 HSPLcom/android/server/am/ProcessCachedOptimizerRecord;->shouldNotFreeze()Z
 HPLcom/android/server/am/ProcessCachedOptimizerRecord;->skipPSSCollectionBecauseFrozen()Z
 HSPLcom/android/server/am/ProcessErrorStateRecord;-><init>(Lcom/android/server/am/ProcessRecord;)V
@@ -1982,40 +2123,43 @@
 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
-HSPLcom/android/server/am/ProcessList;->buildOomTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIZ)Ljava/lang/String;
+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;
 HSPLcom/android/server/am/ProcessList;->computeGidsForProcess(II[IZ)[I+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/ProcessList;->computeNextPssTime(ILcom/android/server/am/ProcessList$ProcStateMemTracker;ZZJ)J
 HSPLcom/android/server/am/ProcessList;->createSystemServerSocketForZygote()Landroid/net/LocalSocket;
+HSPLcom/android/server/am/ProcessList;->dispatchProcessDied(II)V+]Landroid/app/IProcessObserver;Lcom/android/server/app/GameServiceProviderInstanceImpl$5;,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;,Lcom/android/server/media/projection/MediaProjectionManagerService$1;,Lcom/android/server/am/AppFGSTracker$1;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
 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;
 HSPLcom/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;
-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;
+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/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+]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;
-HSPLcom/android/server/am/ProcessList;->getIsolatedProcessesLocked(I)Ljava/util/List;
-HSPLcom/android/server/am/ProcessList;->getLRURecordForAppLOSP(Landroid/os/IBinder;)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;
+HPLcom/android/server/am/ProcessList;->getBlockStateForUid(Lcom/android/server/am/UidRecord;)I
+HSPLcom/android/server/am/ProcessList;->getLRURecordForAppLOSP(Landroid/os/IBinder;)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/ActivityThread$ApplicationThread;
 HSPLcom/android/server/am/ProcessList;->getLruProcessesLOSP()Ljava/util/ArrayList;
-HSPLcom/android/server/am/ProcessList;->getLruSizeLOSP()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/ProcessList;->getLruSizeLOSP()I
 HSPLcom/android/server/am/ProcessList;->getMemLevel(I)J
 HSPLcom/android/server/am/ProcessList;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
 HSPLcom/android/server/am/ProcessList;->getNextProcStateSeq()J
 HSPLcom/android/server/am/ProcessList;->getNumForegroundServices()Landroid/util/Pair;+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/ProcessList;->getPackageAppDataInfoMap(Landroid/content/pm/PackageManagerInternal;[Ljava/lang/String;I)Ljava/util/Map;+]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/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Ljava/util/Map;Landroid/util/ArrayMap;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/am/ProcessList;->getProcessRecordLocked(Ljava/lang/String;I)Lcom/android/server/am/ProcessRecord;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/app/ProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;
-HPLcom/android/server/am/ProcessList;->getRunningAppProcessesLOSP(ZIZII)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]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;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityServiceConnectionsHolder;Lcom/android/server/wm/ActivityServiceConnectionsHolder;
+HSPLcom/android/server/am/ProcessList;->getRunningAppProcessesLOSP(ZIZII)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]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;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityServiceConnectionsHolder;Lcom/android/server/wm/ActivityServiceConnectionsHolder;
 HSPLcom/android/server/am/ProcessList;->getSdkSandboxProcessesForAppLocked(I)Ljava/util/List;
 HSPLcom/android/server/am/ProcessList;->getUidProcStateLOSP(I)I+]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;
 HSPLcom/android/server/am/ProcessList;->getUidProcessCapabilityLOSP(I)I+]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;
 HSPLcom/android/server/am/ProcessList;->getUidRecordLOSP(I)Lcom/android/server/am/UidRecord;+]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;
+HSPLcom/android/server/am/ProcessList;->handleProcessStart(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V
 HSPLcom/android/server/am/ProcessList;->handleProcessStartedLocked(Lcom/android/server/am/ProcessRecord;IZJZ)Z
+HSPLcom/android/server/am/ProcessList;->handleProcessStartedLocked(Lcom/android/server/am/ProcessRecord;Landroid/os/Process$ProcessStartResult;J)Z
+HSPLcom/android/server/am/ProcessList;->hasAppStorage(Landroid/content/pm/PackageManagerInternal;Ljava/lang/String;)Z
 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;->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;
 HSPLcom/android/server/am/ProcessList;->init(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActiveUids;Lcom/android/server/compat/PlatformCompat;)V
 HSPLcom/android/server/am/ProcessList;->isProcStartValidLocked(Lcom/android/server/am/ProcessRecord;J)Ljava/lang/String;
 HSPLcom/android/server/am/ProcessList;->killAppIfBgRestrictedAndCachedIdleLocked(Lcom/android/server/am/ProcessRecord;J)J
-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/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;->lambda$handleProcessStart$1(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V
+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/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;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/am/ProcessList;->killProcessGroup(II)V
 HSPLcom/android/server/am/ProcessList;->makeOomAdjString(IZ)Ljava/lang/String;
 HSPLcom/android/server/am/ProcessList;->makeProcStateString(I)Ljava/lang/String;
 HSPLcom/android/server/am/ProcessList;->minTimeFromStateChange(Z)J
@@ -2025,13 +2169,12 @@
 HSPLcom/android/server/am/ProcessList;->procStatesDifferForMem(II)Z
 HSPLcom/android/server/am/ProcessList;->remove(I)V
 HSPLcom/android/server/am/ProcessList;->removeLruProcessLocked(Lcom/android/server/am/ProcessRecord;)V
-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;
+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
-HPLcom/android/server/am/ProcessList;->searchEachLruProcessesLOSP(ZLjava/util/function/Function;)Ljava/lang/Object;+]Ljava/util/function/Function;Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda5;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda4;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda3;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/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;
-HSPLcom/android/server/am/ProcessList;->setOomAdj(III)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-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;
+HPLcom/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$$ExternalSyntheticLambda7;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda3;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda5;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda1;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda8;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/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/ActivityThread$ApplicationThread;
+HSPLcom/android/server/am/ProcessList;->setOomAdj(III)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+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/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/os/AppZygote;Landroid/os/AppZygote;]Ljava/util/Set;Landroid/util/ArraySet;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 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
 HSPLcom/android/server/am/ProcessList;->startProcessLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/HostingRecord;IZZLjava/lang/String;)Z
 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;
@@ -2040,40 +2183,44 @@
 HSPLcom/android/server/am/ProcessList;->updateLruProcessLSP(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;ZZ)V+]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]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;
 HSPLcom/android/server/am/ProcessList;->updateLruProcessLocked(Lcom/android/server/am/ProcessRecord;ZLcom/android/server/am/ProcessRecord;)V+]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;
 HSPLcom/android/server/am/ProcessList;->updateOomLevels(IIZ)V
+HSPLcom/android/server/am/ProcessList;->updateSeInfo(Lcom/android/server/am/ProcessRecord;)Ljava/lang/String;
 HSPLcom/android/server/am/ProcessList;->writeLmkd(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Z+]Lcom/android/server/am/LmkdConnection;Lcom/android/server/am/LmkdConnection;
 HSPLcom/android/server/am/ProcessProfileRecord$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/ProcessProfileRecord;Lcom/android/internal/app/procstats/ProcessState;Lcom/android/server/am/ProcessStatsService;Lcom/android/internal/app/procstats/ProcessState;)V
 HSPLcom/android/server/am/ProcessProfileRecord$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/am/ProcessProfileRecord$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/am/ProcessProfileRecord;->$r8$lambda$xUCjiGetTE-l4dsbCYL8xng3dcY(Lcom/android/server/am/ProcessProfileRecord;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
 HSPLcom/android/server/am/ProcessProfileRecord;-><init>(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ProcessProfileRecord;->abortNextPssTime()V
+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;->addPss(JJJZIJ)V
 HSPLcom/android/server/am/ProcessProfileRecord;->clearHostingComponentType(I)V+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HPLcom/android/server/am/ProcessProfileRecord;->commitNextPssTime(Lcom/android/server/am/ProcessList$ProcStateMemTracker;)V
 HSPLcom/android/server/am/ProcessProfileRecord;->getBaseProcessTracker()Lcom/android/internal/app/procstats/ProcessState;
-HPLcom/android/server/am/ProcessProfileRecord;->getCurrentHostingComponentTypes()I
-HPLcom/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;
 HSPLcom/android/server/am/ProcessProfileRecord;->getLastPssTime()J
 HSPLcom/android/server/am/ProcessProfileRecord;->getLastStateTime()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
 HPLcom/android/server/am/ProcessProfileRecord;->getSetProcState()I
 HPLcom/android/server/am/ProcessProfileRecord;->getThread()Landroid/app/IApplicationThread;
 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$0(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
+HSPLcom/android/server/am/ProcessProfileRecord;->lambda$onProcessInactive$1(Lcom/android/internal/app/procstats/ProcessState;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
 HSPLcom/android/server/am/ProcessProfileRecord;->onProcessActive(Landroid/app/IApplicationThread;Lcom/android/server/am/ProcessStatsService;)V
 HSPLcom/android/server/am/ProcessProfileRecord;->onProcessInactive(Lcom/android/server/am/ProcessStatsService;)V
 HSPLcom/android/server/am/ProcessProfileRecord;->setBaseProcessTracker(Lcom/android/internal/app/procstats/ProcessState;)V
-HSPLcom/android/server/am/ProcessProfileRecord;->setPendingUiClean(Z)V
+HPLcom/android/server/am/ProcessProfileRecord;->setPendingUiClean(Z)V
 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;
-HSPLcom/android/server/am/ProcessProfileRecord;->setTrimMemoryLevel(I)V
+HPLcom/android/server/am/ProcessProfileRecord;->setPssProcState(I)V
+HPLcom/android/server/am/ProcessProfileRecord;->setPssStatType(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;
 HSPLcom/android/server/am/ProcessProviderRecord;->ensureProviderCapacity(I)V
 HSPLcom/android/server/am/ProcessProviderRecord;->getProvider(Ljava/lang/String;)Lcom/android/server/am/ContentProviderRecord;
 HSPLcom/android/server/am/ProcessProviderRecord;->getProviderAt(I)Lcom/android/server/am/ContentProviderRecord;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
@@ -2093,15 +2240,19 @@
 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
 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;
 HSPLcom/android/server/am/ProcessRecord;->getActiveInstrumentation()Lcom/android/server/am/ActiveInstrumentation;
-HSPLcom/android/server/am/ProcessRecord;->getCpuDelayTime()J
+HSPLcom/android/server/am/ProcessRecord;->getCpuDelayTime()J+]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;
 HSPLcom/android/server/am/ProcessRecord;->getHostingRecord()Lcom/android/server/am/HostingRecord;
 HSPLcom/android/server/am/ProcessRecord;->getLastActivityTime()J
-HSPLcom/android/server/am/ProcessRecord;->getLruSeq()I
+HPLcom/android/server/am/ProcessRecord;->getLruSeq()I
 HSPLcom/android/server/am/ProcessRecord;->getOnewayThread()Landroid/app/IApplicationThread;
 HSPLcom/android/server/am/ProcessRecord;->getPackageList()[Ljava/lang/String;
 HSPLcom/android/server/am/ProcessRecord;->getPid()I
 HSPLcom/android/server/am/ProcessRecord;->getPkgDeps()Landroid/util/ArraySet;
 HSPLcom/android/server/am/ProcessRecord;->getPkgList()Lcom/android/server/am/PackageList;
+HSPLcom/android/server/am/ProcessRecord;->getSeInfo()Ljava/lang/String;
+HSPLcom/android/server/am/ProcessRecord;->getSetAdj()I
+HSPLcom/android/server/am/ProcessRecord;->getSetProcState()I
+HSPLcom/android/server/am/ProcessRecord;->getStartElapsedTime()J
 HSPLcom/android/server/am/ProcessRecord;->getStartSeq()J
 HSPLcom/android/server/am/ProcessRecord;->getStartTime()J
 HSPLcom/android/server/am/ProcessRecord;->getStartUid()I
@@ -2111,7 +2262,6 @@
 HSPLcom/android/server/am/ProcessRecord;->getWindowProcessController()Lcom/android/server/wm/WindowProcessController;
 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;
-HSPLcom/android/server/am/ProcessRecord;->isCached()Z
 HSPLcom/android/server/am/ProcessRecord;->isDebuggable()Z
 HSPLcom/android/server/am/ProcessRecord;->isInFullBackup()Z
 HSPLcom/android/server/am/ProcessRecord;->isKilled()Z
@@ -2120,6 +2270,7 @@
 HSPLcom/android/server/am/ProcessRecord;->isPersistent()Z
 HSPLcom/android/server/am/ProcessRecord;->isRemoved()Z
 HPLcom/android/server/am/ProcessRecord;->killLocked(Ljava/lang/String;Ljava/lang/String;IIZZ)V
+HSPLcom/android/server/am/ProcessRecord;->killProcessGroupIfNecessaryLocked(Z)V
 HSPLcom/android/server/am/ProcessRecord;->makeActive(Landroid/app/IApplicationThread;Lcom/android/server/am/ProcessStatsService;)V
 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
@@ -2128,28 +2279,29 @@
 HSPLcom/android/server/am/ProcessRecord;->setBackgroundStartPrivileges(Landroid/os/Binder;Landroid/app/BackgroundStartPrivileges;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/am/ProcessRecord;->setDebugging(Z)V
 HSPLcom/android/server/am/ProcessRecord;->setKilled(Z)V
+HSPLcom/android/server/am/ProcessRecord;->setKilledByAm(Z)V
 HSPLcom/android/server/am/ProcessRecord;->setLastActivityTime(J)V
 HSPLcom/android/server/am/ProcessRecord;->setLruSeq(I)V
-HSPLcom/android/server/am/ProcessRecord;->setPendingUiClean(Z)V+]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
-HSPLcom/android/server/am/ProcessRecord;->setPid(I)V
-HSPLcom/android/server/am/ProcessRecord;->setRenderThreadTid(I)V
+HPLcom/android/server/am/ProcessRecord;->setPendingUiClean(Z)V+]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
+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;
 HSPLcom/android/server/am/ProcessRecord;->setRequiredAbi(Ljava/lang/String;)V
-HSPLcom/android/server/am/ProcessRecord;->setRunningRemoteAnimation(Z)V
+HPLcom/android/server/am/ProcessRecord;->setRunningRemoteAnimation(Z)V
 HSPLcom/android/server/am/ProcessRecord;->setStartParams(ILcom/android/server/am/HostingRecord;Ljava/lang/String;JJ)V
 HSPLcom/android/server/am/ProcessRecord;->setUidRecord(Lcom/android/server/am/UidRecord;)V
-HSPLcom/android/server/am/ProcessRecord;->setUsingWrapper(Z)V
+HSPLcom/android/server/am/ProcessRecord;->setUsingWrapper(Z)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
+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/StringBuilder;)V
 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
-HSPLcom/android/server/am/ProcessRecord;->updateProcessInfo(ZZZ)V
+HSPLcom/android/server/am/ProcessRecord;->unlinkDeathRecipient()V+]Landroid/os/IBinder;Landroid/os/BinderProxy;
+HPLcom/android/server/am/ProcessRecord;->updateProcessInfo(ZZZ)V
 HSPLcom/android/server/am/ProcessServiceRecord;-><init>(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ProcessServiceRecord;->addBoundClientUid(ILjava/lang/String;J)V
 HSPLcom/android/server/am/ProcessServiceRecord;->addBoundClientUidsOfNewService(Lcom/android/server/am/ServiceRecord;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]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;
 HSPLcom/android/server/am/ProcessServiceRecord;->addConnection(Lcom/android/server/am/ConnectionRecord;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HPLcom/android/server/am/ProcessServiceRecord;->areAllShortForegroundServicesProcstateTimedOut(J)Z+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;
+HPLcom/android/server/am/ProcessServiceRecord;->areAllShortForegroundServicesProcstateTimedOut(J)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ServiceRecord$ShortFgsInfo;Lcom/android/server/am/ServiceRecord$ShortFgsInfo;
 HSPLcom/android/server/am/ProcessServiceRecord;->areForegroundServiceTypesSame(IZ)Z
 HSPLcom/android/server/am/ProcessServiceRecord;->clearBoundClientUids()V
-HSPLcom/android/server/am/ProcessServiceRecord;->getConnectionAt(I)Lcom/android/server/am/ConnectionRecord;+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/am/ProcessServiceRecord;->getConnectionAt(I)Lcom/android/server/am/ConnectionRecord;+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/am/ProcessServiceRecord;->getConnectionGroup()I
 HSPLcom/android/server/am/ProcessServiceRecord;->getExecutingServiceAt(I)Lcom/android/server/am/ServiceRecord;
 HSPLcom/android/server/am/ProcessServiceRecord;->getForegroundServiceTypes()I
@@ -2164,15 +2316,17 @@
 HSPLcom/android/server/am/ProcessServiceRecord;->numberOfConnections()I+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/am/ProcessServiceRecord;->numberOfExecutingServices()I+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/am/ProcessServiceRecord;->numberOfRunningServices()I+]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HSPLcom/android/server/am/ProcessServiceRecord;->removeConnection(Lcom/android/server/am/ConnectionRecord;)V
+HSPLcom/android/server/am/ProcessServiceRecord;->onCleanupApplicationRecordLocked()V
+HPLcom/android/server/am/ProcessServiceRecord;->removeConnection(Lcom/android/server/am/ConnectionRecord;)V
 HSPLcom/android/server/am/ProcessServiceRecord;->setExecServicesFg(Z)V
 HSPLcom/android/server/am/ProcessServiceRecord;->setHasClientActivities(Z)V
 HSPLcom/android/server/am/ProcessServiceRecord;->setHasReportedForegroundServices(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/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
 HSPLcom/android/server/am/ProcessServiceRecord;->stopExecutingService(Lcom/android/server/am/ServiceRecord;)V
-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;
+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;->updateBoundClientUids()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/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]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;
 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;-><init>(Lcom/android/server/am/ProcessRecord;)V
@@ -2196,6 +2350,7 @@
 HSPLcom/android/server/am/ProcessStateRecord;->getCurRawAdj()I
 HSPLcom/android/server/am/ProcessStateRecord;->getCurrentSchedulingGroup()I
 HSPLcom/android/server/am/ProcessStateRecord;->getFgInteractionTime()J
+HSPLcom/android/server/am/ProcessStateRecord;->getForcingToImportant()Ljava/lang/Object;
 HSPLcom/android/server/am/ProcessStateRecord;->getInteractionEventTime()J
 HSPLcom/android/server/am/ProcessStateRecord;->getLastStateTime()J
 HSPLcom/android/server/am/ProcessStateRecord;->getMaxAdj()I
@@ -2212,40 +2367,39 @@
 HSPLcom/android/server/am/ProcessStateRecord;->hasReportedInteraction()Z
 HSPLcom/android/server/am/ProcessStateRecord;->isCached()Z
 HSPLcom/android/server/am/ProcessStateRecord;->isCurBoundByNonBgRestrictedApp()Z
-HSPLcom/android/server/am/ProcessStateRecord;->isReachable()Z
-HSPLcom/android/server/am/ProcessStateRecord;->isRunningRemoteAnimation()Z
+HPLcom/android/server/am/ProcessStateRecord;->isReachable()Z
 HSPLcom/android/server/am/ProcessStateRecord;->isSetBoundByNonBgRestrictedApp()Z
 HSPLcom/android/server/am/ProcessStateRecord;->isSystemNoUi()Z
-HSPLcom/android/server/am/ProcessStateRecord;->onCleanupApplicationRecordLSP()V
+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;->setAdjType(Ljava/lang/String;)V
+HSPLcom/android/server/am/ProcessStateRecord;->setAdjTypeCode(I)V
 HSPLcom/android/server/am/ProcessStateRecord;->setCached(Z)V
 HSPLcom/android/server/am/ProcessStateRecord;->setCompletedAdjSeq(I)V
 HSPLcom/android/server/am/ProcessStateRecord;->setContainsCycle(Z)V
 HSPLcom/android/server/am/ProcessStateRecord;->setCurAdj(I)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/ProcessStateRecord;->setCurBoundByNonBgRestrictedApp(Z)V
-HSPLcom/android/server/am/ProcessStateRecord;->setCurCapability(I)V
 HSPLcom/android/server/am/ProcessStateRecord;->setCurProcState(I)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/ProcessStateRecord;->setCurRawAdj(I)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/ProcessStateRecord;->setCurRawProcState(I)V
 HSPLcom/android/server/am/ProcessStateRecord;->setCurrentSchedulingGroup(I)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/ProcessStateRecord;->setEmpty(Z)V
 HSPLcom/android/server/am/ProcessStateRecord;->setFgInteractionTime(J)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/ProcessStateRecord;->setHasForegroundActivities(Z)V
 HSPLcom/android/server/am/ProcessStateRecord;->setHasStartedServices(Z)V+]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HSPLcom/android/server/am/ProcessStateRecord;->setInteractionEventTime(J)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/ProcessStateRecord;->setNoKillOnBgRestrictedAndIdle(Z)V
 HSPLcom/android/server/am/ProcessStateRecord;->setProcStateChanged(Z)V
-HSPLcom/android/server/am/ProcessStateRecord;->setReachable(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/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-HSPLcom/android/server/am/ProcessStateRecord;->setRunningRemoteAnimation(Z)V
+HSPLcom/android/server/am/ProcessStateRecord;->setReportedProcState(I)V
+HPLcom/android/server/am/ProcessStateRecord;->setRunningRemoteAnimation(Z)V
 HSPLcom/android/server/am/ProcessStateRecord;->setSetAdj(I)V
 HSPLcom/android/server/am/ProcessStateRecord;->setSetCached(Z)V
 HSPLcom/android/server/am/ProcessStateRecord;->setSetCapability(I)V
 HSPLcom/android/server/am/ProcessStateRecord;->setSetNoKillOnBgRestrictedAndIdle(Z)V
 HSPLcom/android/server/am/ProcessStateRecord;->setSetProcState(I)V
-HSPLcom/android/server/am/ProcessStateRecord;->setSetSchedGroup(I)V
 HSPLcom/android/server/am/ProcessStateRecord;->setVerifiedAdj(I)V
-HSPLcom/android/server/am/ProcessStateRecord;->setWhenUnimportant(J)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HPLcom/android/server/am/ProcessStateRecord;->setWhenUnimportant(J)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/ProcessStateRecord;->shouldNotKillOnBgRestrictedAndIdle()Z
 HSPLcom/android/server/am/ProcessStateRecord;->updateLastInvisibleTime(Z)V
 HSPLcom/android/server/am/ProcessStatsService$1;-><init>(Lcom/android/server/am/ProcessStatsService;)V
@@ -2255,8 +2409,7 @@
 HSPLcom/android/server/am/ProcessStatsService;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/io/File;)V
 HSPLcom/android/server/am/ProcessStatsService;->getMemFactorLocked()I
 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;
-HSPLcom/android/server/am/ProcessStatsService;->isMemFactorLowered()Z
+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;
 HSPLcom/android/server/am/ProcessStatsService;->publish()V
 HSPLcom/android/server/am/ProcessStatsService;->setMemFactorLocked(IZJ)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;
 HSPLcom/android/server/am/ProcessStatsService;->shouldWriteNowLocked(J)Z
@@ -2264,15 +2417,15 @@
 HSPLcom/android/server/am/ProcessStatsService;->updateProcessStateHolderLocked(Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;Ljava/lang/String;IJLjava/lang/String;)V
 HSPLcom/android/server/am/ProcessStatsService;->updateTrackingAssociationsLocked(IJ)V
 HSPLcom/android/server/am/ProviderMap;-><init>(Lcom/android/server/am/ActivityManagerService;)V
-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;
+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;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Set;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ProviderMap;->getProviderByClass(Landroid/content/ComponentName;I)Lcom/android/server/am/ContentProviderRecord;+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;
 HSPLcom/android/server/am/ProviderMap;->getProviderByName(Ljava/lang/String;I)Lcom/android/server/am/ContentProviderRecord;+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;
 HSPLcom/android/server/am/ProviderMap;->getProvidersByClass(I)Ljava/util/HashMap;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/am/ProviderMap;->getProvidersByName(I)Ljava/util/HashMap;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 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
-HPLcom/android/server/am/ProviderMap;->removeProviderByName(Ljava/lang/String;I)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;
+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;
 HSPLcom/android/server/am/ReceiverList;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;IIILandroid/content/IIntentReceiver;)V
 HSPLcom/android/server/am/ReceiverList;->containsFilter(Landroid/content/IntentFilter;)Z+]Ljava/util/ArrayList;Lcom/android/server/am/ReceiverList;
 HSPLcom/android/server/am/ReceiverList;->hashCode()I
@@ -2282,53 +2435,65 @@
 HSPLcom/android/server/am/SameProcessApplicationThread;->lambda$scheduleRegisteredReceiver$1(Landroid/content/IIntentReceiver;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIIILjava/lang/String;)V+]Landroid/app/IApplicationThread;Landroid/app/ActivityThread$ApplicationThread;
 HSPLcom/android/server/am/SameProcessApplicationThread;->scheduleRegisteredReceiver(Landroid/content/IIntentReceiver;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZZIIILjava/lang/String;)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/am/ServiceRecord$1;-><init>(Lcom/android/server/am/ServiceRecord;Ljava/lang/String;I)V
-HSPLcom/android/server/am/ServiceRecord$1;->run()V+]Lcom/android/server/notification/NotificationManagerInternal;Lcom/android/server/notification/NotificationManagerService$11;
+HSPLcom/android/server/am/ServiceRecord$1;->run()V+]Lcom/android/server/notification/NotificationManagerInternal;Lcom/android/server/notification/NotificationManagerService$12;
 HPLcom/android/server/am/ServiceRecord$2;->run()V
+HPLcom/android/server/am/ServiceRecord$ShortFgsInfo;->getProcStateDemoteTime()J
+HSPLcom/android/server/am/ServiceRecord$StartItem;-><init>(Lcom/android/server/am/ServiceRecord;ZILandroid/content/Intent;Lcom/android/server/uri/NeededUriGrants;ILjava/lang/String;Ljava/lang/String;I)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;Z)V+]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/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]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;
 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;->clearShortFgsInfo()V
-HSPLcom/android/server/am/ServiceRecord;->findDeliveredStart(IZZ)Lcom/android/server/am/ServiceRecord$StartItem;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/am/ServiceRecord;->findDeliveredStart(IZZ)Lcom/android/server/am/ServiceRecord$StartItem;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/ServiceRecord;->getBackgroundStartPrivilegesWithExclusiveToken()Landroid/app/BackgroundStartPrivileges;
 HSPLcom/android/server/am/ServiceRecord;->getComponentName()Landroid/content/ComponentName;
 HSPLcom/android/server/am/ServiceRecord;->getConnections()Landroid/util/ArrayMap;
-HSPLcom/android/server/am/ServiceRecord;->getLastStartId()I
+HPLcom/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;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/ServiceRecord;->isShortFgs()Z
 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;
-HSPLcom/android/server/am/ServiceRecord;->removeConnection(Landroid/os/IBinder;)V
+HPLcom/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/ProcessRecord;)Lcom/android/server/am/AppBindRecord;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-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;]Landroid/app/BackgroundStartPrivileges;Landroid/app/BackgroundStartPrivileges;]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;
-HPLcom/android/server/am/ServiceRecord;->toString()Ljava/lang/String;
+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;]Landroid/app/BackgroundStartPrivileges;Landroid/app/BackgroundStartPrivileges;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]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/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;
+HPLcom/android/server/am/ServiceRecord;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/ServiceRecord;->updateAllowUiJobScheduling(Z)V
 HSPLcom/android/server/am/ServiceRecord;->updateFgsHasNotificationPermission()V
-HSPLcom/android/server/am/ServiceRecord;->updateKeepWarmLocked()V+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+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;
+HSPLcom/android/server/am/ServiceRecord;->updateProcessStateOnRequest()V+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/TraceErrorLogger;-><init>()V
 HSPLcom/android/server/am/UidObserverController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/UidObserverController;)V
 HSPLcom/android/server/am/UidObserverController$$ExternalSyntheticLambda0;->run()V+]Lcom/android/server/am/UidObserverController;Lcom/android/server/am/UidObserverController;
-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$fgetmWhich(Lcom/android/server/am/UidObserverController$UidObserverRegistration;)I
+HSPLcom/android/server/am/UidObserverController$UidObserverRegistration;->isWatchingUid(I)Z
 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;
-HSPLcom/android/server/am/UidObserverController;->dispatchUidsChangedForObserver(Landroid/app/IUidObserver;Lcom/android/server/am/UidObserverController$UidObserverRegistration;I)V+]Landroid/app/IUidObserver;megamorphic_types]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
-HSPLcom/android/server/am/UidObserverController;->enqueueUidChange(Lcom/android/server/am/UidObserverController$ChangeRecord;IIIJIZ)I+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$UiHandler;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/UidObserverController;->dispatchUidsChangedForObserver(Landroid/app/IUidObserver;Lcom/android/server/am/UidObserverController$UidObserverRegistration;I)V+]Landroid/app/IUidObserver;megamorphic_types]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/am/UidObserverController$UidObserverRegistration;Lcom/android/server/am/UidObserverController$UidObserverRegistration;
+HSPLcom/android/server/am/UidObserverController;->enqueueUidChange(Lcom/android/server/am/UidObserverController$ChangeRecord;IIIIJIZ)I+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$UiHandler;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/UidObserverController;->getOrCreateChangeRecordLocked()Lcom/android/server/am/UidObserverController$ChangeRecord;
 HSPLcom/android/server/am/UidProcessMap;-><init>()V
 HSPLcom/android/server/am/UidProcessMap;->get(ILjava/lang/String;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/am/UidProcessMap;->getMap()Landroid/util/SparseArray;
 HSPLcom/android/server/am/UidRecord;-><init>(ILcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/UidRecord;->addProcess(Lcom/android/server/am/ProcessRecord;)V
-HSPLcom/android/server/am/UidRecord;->forEachProcess(Ljava/util/function/Consumer;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/function/Consumer;Lcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda0;,Lcom/android/server/am/ProcessList$$ExternalSyntheticLambda0;
+HPLcom/android/server/am/UidRecord;->areAllProcessesFrozen(Lcom/android/server/am/ProcessRecord;)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;
+HSPLcom/android/server/am/UidRecord;->forEachProcess(Ljava/util/function/Consumer;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/function/Consumer;Lcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda0;,Lcom/android/server/am/ProcessList$$ExternalSyntheticLambda0;,Lcom/android/server/am/ActiveUids$$ExternalSyntheticLambda0;,Lcom/android/server/am/ActivityManagerService$GetBackgroundStartPrivilegesFunctor;
 HSPLcom/android/server/am/UidRecord;->getCurCapability()I
 HSPLcom/android/server/am/UidRecord;->getCurProcState()I
 HPLcom/android/server/am/UidRecord;->getLastBackgroundTime()J
+HSPLcom/android/server/am/UidRecord;->getMinProcAdj()I+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/UidRecord;->getNumOfProcs()I+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/am/UidRecord;->getProcAdjChanged()Z
 HSPLcom/android/server/am/UidRecord;->getSetCapability()I
 HSPLcom/android/server/am/UidRecord;->getSetProcState()I
 HSPLcom/android/server/am/UidRecord;->getUid()I
 HSPLcom/android/server/am/UidRecord;->isCurAllowListed()Z
 HSPLcom/android/server/am/UidRecord;->isEphemeral()Z
+HSPLcom/android/server/am/UidRecord;->isFrozen()Z
 HSPLcom/android/server/am/UidRecord;->isIdle()Z
 HSPLcom/android/server/am/UidRecord;->isSetAllowListed()Z
 HSPLcom/android/server/am/UidRecord;->isSetIdle()Z
@@ -2338,9 +2503,8 @@
 HSPLcom/android/server/am/UidRecord;->setEphemeral(Z)V
 HSPLcom/android/server/am/UidRecord;->setLastReportedChange(I)V
 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;
+HPLcom/android/server/am/UidRecord;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/am/UidRecord;->updateHasInternetPermission()V
 HSPLcom/android/server/am/UserController$1;-><init>(Lcom/android/server/am/UserController;)V
 HSPLcom/android/server/am/UserController$Injector;-><init>(Lcom/android/server/am/ActivityManagerService;)V
@@ -2367,84 +2531,58 @@
 HSPLcom/android/server/am/UserController;->isSameProfileGroup(II)Z+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HSPLcom/android/server/am/UserController;->isUserOrItsParentRunning(I)Z+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HSPLcom/android/server/am/UserController;->isUserRunning(II)Z+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
-HSPLcom/android/server/am/UserController;->unsafeConvertIncomingUser(I)I
+HSPLcom/android/server/am/UserController;->unsafeConvertIncomingUser(I)I+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
 HSPLcom/android/server/am/UserController;->updateStartedUserArrayLU()V
 HSPLcom/android/server/am/UserState;-><init>(Landroid/os/UserHandle;)V
 HSPLcom/android/server/app/GameManagerService$LocalService;->getResolutionScalingFactor(Ljava/lang/String;I)F
 HSPLcom/android/server/app/GameManagerService$MyUidObserver$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/app/GameManagerService$MyUidObserver;I)V
 HSPLcom/android/server/app/GameManagerService$MyUidObserver$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
-HSPLcom/android/server/app/GameManagerService$MyUidObserver;->disableGameMode(I)V+]Ljava/util/Set;Ljava/util/HashSet;]Landroid/os/PowerManagerInternal;Lcom/android/server/power/PowerManagerService$LocalService;
-HSPLcom/android/server/app/GameManagerService$MyUidObserver;->onUidStateChanged(IIJI)V+]Lcom/android/server/app/GameManagerService$MyUidObserver;Lcom/android/server/app/GameManagerService$MyUidObserver;]Ljava/util/stream/Stream;Ljava/util/stream/ReferencePipeline$Head;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/os/PowerManagerInternal;Lcom/android/server/power/PowerManagerService$LocalService;]Ljava/util/Set;Ljava/util/HashSet;
-HSPLcom/android/server/app/GameManagerService;->-$$Nest$fgetmContext(Lcom/android/server/app/GameManagerService;)Landroid/content/Context;
+HSPLcom/android/server/app/GameManagerService$MyUidObserver;->disableGameMode(I)V+]Landroid/os/PowerManagerInternal;Lcom/android/server/power/PowerManagerService$LocalService;]Ljava/util/Set;Ljava/util/HashSet;
+HSPLcom/android/server/app/GameManagerService$MyUidObserver;->onUidStateChanged(IIJI)V+]Landroid/os/PowerManagerInternal;Lcom/android/server/power/PowerManagerService$LocalService;]Lcom/android/server/app/GameManagerService$MyUidObserver;Lcom/android/server/app/GameManagerService$MyUidObserver;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/Set;Ljava/util/HashSet;
 HSPLcom/android/server/app/GameManagerService;->-$$Nest$fgetmForegroundGameUids(Lcom/android/server/app/GameManagerService;)Ljava/util/Set;
 HSPLcom/android/server/app/GameManagerService;->-$$Nest$fgetmUidObserverLock(Lcom/android/server/app/GameManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/app/GameManagerService;->getConfig(Ljava/lang/String;I)Lcom/android/server/app/GameManagerService$GamePackageConfiguration;
 HSPLcom/android/server/app/GameManagerService;->getGameMode(Ljava/lang/String;I)I
 HSPLcom/android/server/app/GameManagerService;->getGameModeFromSettingsUnchecked(Ljava/lang/String;I)I
-HSPLcom/android/server/app/GameManagerService;->isPackageGame(Ljava/lang/String;I)Z
-HSPLcom/android/server/app/GameManagerSettings;->getConfigOverride(Ljava/lang/String;)Lcom/android/server/app/GameManagerService$GamePackageConfiguration;
-HSPLcom/android/server/app/GameManagerSettings;->getGameModeLocked(Ljava/lang/String;)I
+HSPLcom/android/server/app/GameManagerService;->isPackageGame(Ljava/lang/String;I)Z+]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HPLcom/android/server/app/GameManagerSettings;->getConfigOverride(Ljava/lang/String;)Lcom/android/server/app/GameManagerService$GamePackageConfiguration;
+HPLcom/android/server/app/GameManagerSettings;->getGameModeLocked(Ljava/lang/String;)I
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$5;->onProcessDied(II)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->gameSessionExistsForPackageNameLocked(Ljava/lang/String;)Z
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->onForegroundActivitiesChangedLocked(I)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->onProcessDiedLocked(I)V
 HPLcom/android/server/apphibernation/AppHibernationService$$ExternalSyntheticLambda5;->onUsageEvent(ILandroid/app/usage/UsageEvents$Event;)V
+HPLcom/android/server/apphibernation/AppHibernationService$AppHibernationServiceStub;->isHibernatingGlobally(Ljava/lang/String;)Z
 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;->$r8$lambda$QXUXfdRnDBbVwvfC0BZWvzD84Hc(Lcom/android/server/apphibernation/AppHibernationService;ILandroid/app/usage/UsageEvents$Event;)V
 HSPLcom/android/server/apphibernation/AppHibernationService;->checkUserStatesExist(ILjava/lang/String;Z)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/UserManager;Landroid/os/UserManager;
 HSPLcom/android/server/apphibernation/AppHibernationService;->handleIncomingUser(ILjava/lang/String;)I+]Landroid/app/IActivityManager;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/apphibernation/AppHibernationService;->isAppHibernationEnabled()Z
+HPLcom/android/server/apphibernation/AppHibernationService;->isAppHibernationEnabled()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;
-HSPLcom/android/server/apphibernation/AppHibernationService;->isHibernatingGlobally(Ljava/lang/String;)Z
+HPLcom/android/server/apphibernation/AppHibernationService;->isHibernatingGlobally(Ljava/lang/String;)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;
 HPLcom/android/server/apphibernation/AppHibernationService;->setHibernatingForUser(Ljava/lang/String;IZ)V+]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;->setHibernatingGlobally(Ljava/lang/String;Z)V+]Lcom/android/server/SystemService;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;
-HSPLcom/android/server/appop/AppOpsCheckingServiceImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/appop/AppOpsCheckingServiceImpl;Lcom/android/server/appop/AppOpsCheckingServiceImpl;
 HSPLcom/android/server/appop/AppOpsCheckingServiceImpl$1;-><init>(Lcom/android/server/appop/AppOpsCheckingServiceImpl;)V
 HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;-><init>(Ljava/io/File;Ljava/lang/Object;Landroid/os/Handler;Landroid/content/Context;Landroid/util/SparseArray;)V
 HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->clearAllModes()V
-HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->evalForegroundOps(Landroid/util/SparseIntArray;Landroid/util/SparseBooleanArray;)Landroid/util/SparseBooleanArray;+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/appop/AppOpsCheckingServiceImpl;Lcom/android/server/appop/AppOpsCheckingServiceImpl;
-HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->evalForegroundPackageOps(Ljava/lang/String;Landroid/util/SparseBooleanArray;I)Landroid/util/SparseBooleanArray;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/appop/AppOpsCheckingServiceImpl;Lcom/android/server/appop/AppOpsCheckingServiceImpl;
-HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->evalForegroundUidOps(ILandroid/util/SparseBooleanArray;)Landroid/util/SparseBooleanArray;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/appop/AppOpsCheckingServiceImpl;Lcom/android/server/appop/AppOpsCheckingServiceImpl;
-HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->evalForegroundWatchers(ILandroid/util/SparseBooleanArray;)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/appop/OnOpModeChangedListener;Lcom/android/server/appop/AppOpsService$ModeCallback;
-HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->getOpModeChangedListeners(I)Landroid/util/ArraySet;
 HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->getPackageMode(Ljava/lang/String;II)I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->getUidMode(II)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->notifyOpChanged(Lcom/android/server/appop/OnOpModeChangedListener;IILjava/lang/String;)V+]Lcom/android/server/appop/AppOpsCheckingServiceImpl;Lcom/android/server/appop/AppOpsCheckingServiceImpl;]Lcom/android/server/appop/OnOpModeChangedListener;Lcom/android/server/appop/AppOpsService$ModeCallback;
-HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->notifyOpChangedForAllPkgsInUid(IIZLcom/android/server/appop/OnOpModeChangedListener;)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/server/appop/OnOpModeChangedListener;Lcom/android/server/appop/AppOpsService$ModeCallback;
-HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->readOp(Lcom/android/modules/utils/TypedXmlPullParser;ILjava/lang/String;)V
-HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->readPackage(Lcom/android/modules/utils/TypedXmlPullParser;I)V
 HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->readState()V
-HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->readUidOps(Lcom/android/modules/utils/TypedXmlPullParser;)V
-HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->readUser(Lcom/android/modules/utils/TypedXmlPullParser;)V
-HPLcom/android/server/appop/AppOpsCheckingServiceImpl;->removeListener(Lcom/android/server/appop/OnOpModeChangedListener;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->setUidMode(III)Z
-HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->startWatchingOpModeChanged(Lcom/android/server/appop/OnOpModeChangedListener;I)V
-HSPLcom/android/server/appop/AppOpsCheckingServiceImpl;->startWatchingPackageModeChanged(Lcom/android/server/appop/OnOpModeChangedListener;Ljava/lang/String;)V
-HPLcom/android/server/appop/AppOpsCheckingServiceImpl;->writeState()V+]Landroid/util/AtomicFile;Landroid/util/AtomicFile;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/appop/AppOpsCheckingServiceImpl;->writeState()V+]Landroid/util/AtomicFile;Landroid/util/AtomicFile;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;-><init>(Lcom/android/server/appop/AppOpsCheckingServiceInterface;)V
 HSPLcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;->clearAllModes()V
-HSPLcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;->evalForegroundPackageOps(Ljava/lang/String;Landroid/util/SparseBooleanArray;I)Landroid/util/SparseBooleanArray;+]Lcom/android/server/appop/AppOpsCheckingServiceInterface;Lcom/android/server/appop/AppOpsCheckingServiceImpl;
-HSPLcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;->evalForegroundUidOps(ILandroid/util/SparseBooleanArray;)Landroid/util/SparseBooleanArray;+]Lcom/android/server/appop/AppOpsCheckingServiceInterface;Lcom/android/server/appop/AppOpsCheckingServiceImpl;
 HSPLcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;->getPackageMode(Ljava/lang/String;II)I+]Lcom/android/server/appop/AppOpsCheckingServiceInterface;Lcom/android/server/appop/AppOpsCheckingServiceImpl;
 HSPLcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;->getUidMode(II)I+]Lcom/android/server/appop/AppOpsCheckingServiceInterface;Lcom/android/server/appop/AppOpsCheckingServiceImpl;
-HSPLcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;->notifyOpChangedForAllPkgsInUid(IIZLcom/android/server/appop/OnOpModeChangedListener;)V
 HSPLcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;->readState()V
-HSPLcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;->startWatchingOpModeChanged(Lcom/android/server/appop/OnOpModeChangedListener;I)V
-HSPLcom/android/server/appop/AppOpsRestrictionsImpl;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/appop/AppOpsCheckingServiceInterface;)V
+HSPLcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;->setUidMode(III)Z
 HSPLcom/android/server/appop/AppOpsRestrictionsImpl;->getUserRestriction(Ljava/lang/Object;II)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/appop/AppOpsRestrictionsImpl;->getUserRestriction(Ljava/lang/Object;IILjava/lang/String;Ljava/lang/String;Z)Z+]Lcom/android/server/appop/AppOpsRestrictionsImpl;Lcom/android/server/appop/AppOpsRestrictionsImpl;]Landroid/os/PackageTagsList;Landroid/os/PackageTagsList;
-HSPLcom/android/server/appop/AppOpsRestrictionsImpl;->hasUserRestrictions(Ljava/lang/Object;)Z
-HSPLcom/android/server/appop/AppOpsRestrictionsImpl;->putUserRestriction(Ljava/lang/Object;IIZ)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/appop/AppOpsRestrictionsImpl;->putUserRestrictionExclusions(Ljava/lang/Object;ILandroid/os/PackageTagsList;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HSPLcom/android/server/appop/AppOpsRestrictionsImpl;->resolveUserId(I)[I+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/UserManager;Landroid/os/UserManager;
-HSPLcom/android/server/appop/AppOpsRestrictionsImpl;->setUserRestriction(Ljava/lang/Object;IIZLandroid/os/PackageTagsList;)Z+]Lcom/android/server/appop/AppOpsRestrictionsImpl;Lcom/android/server/appop/AppOpsRestrictionsImpl;
-HPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda0;->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
 HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda10;->execute(Ljava/lang/Runnable;)V
 HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda11;->onUidStateChanged(IIZ)V
-HPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda14;-><init>(Landroid/app/AsyncNotedAppOp;[ZILjava/lang/String;ILjava/lang/String;)V
-HPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda14;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda16;->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;
-HSPLcom/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$1;-><init>(Lcom/android/server/appop/AppOpsService;)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$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
 HSPLcom/android/server/appop/AppOpsService$AppOpsManagerLocalImpl;-><init>(Lcom/android/server/appop/AppOpsService;)V
@@ -2453,9 +2591,11 @@
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda11;->apply(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;+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda13;-><init>(Lcom/android/server/appop/AppOpsService;)V
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;
-HPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda15;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda15;-><init>(Lcom/android/server/appop/AppOpsService;)V
+HPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda15;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/Integer;Ljava/lang/Integer;
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/appop/AppOpsService;)V
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda3;->apply(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/Integer;Ljava/lang/Integer;]Ljava/lang/Boolean;Ljava/lang/Boolean;
+HPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda5;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/appop/AppOpsService;)V
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda9;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;->$r8$lambda$-zO2p3wazaltMFolMcvKOcU7eN4(Lcom/android/server/appop/AppOpsService;IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Z)Landroid/app/SyncNotedAppOp;
@@ -2463,56 +2603,54 @@
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;->$r8$lambda$fx57Sum-uA3sXo7NCFwrI3iq4WM(Lcom/android/server/appop/AppOpsService;IILjava/lang/String;Ljava/lang/String;Z)I
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;->$r8$lambda$naHwKJkY2ZO4TzzaHmddSx750qU(Lcom/android/server/appop/AppOpsService;Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;)V
 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
+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;->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;
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;->noteOperation(IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Z)Landroid/app/SyncNotedAppOp;+]Landroid/app/AppOpsManagerInternal$CheckOpsDelegate;Lcom/android/server/policy/AppOpsPolicy;
+HPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;->noteProxyOperation(ILandroid/content/AttributionSource;ZLjava/lang/String;ZZ)Landroid/app/SyncNotedAppOp;
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;->startOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;ZZLjava/lang/String;ZII)Landroid/app/SyncNotedAppOp;+]Landroid/app/AppOpsManagerInternal$CheckOpsDelegate;Lcom/android/server/policy/AppOpsPolicy;
-HSPLcom/android/server/appop/AppOpsService$ClientUserRestrictionState;->destroy()V+]Landroid/os/IBinder;Landroid/os/Binder;,Lcom/android/server/location/LocationManagerService;
 HSPLcom/android/server/appop/AppOpsService$ClientUserRestrictionState;->hasRestriction(ILjava/lang/String;Ljava/lang/String;IZ)Z
-HSPLcom/android/server/appop/AppOpsService$ClientUserRestrictionState;->isDefault()Z+]Lcom/android/server/appop/AppOpsRestrictions;Lcom/android/server/appop/AppOpsRestrictionsImpl;
-HSPLcom/android/server/appop/AppOpsService$ClientUserRestrictionState;->setRestriction(IZLandroid/os/PackageTagsList;I)Z+]Lcom/android/server/appop/AppOpsRestrictions;Lcom/android/server/appop/AppOpsRestrictionsImpl;
 HSPLcom/android/server/appop/AppOpsService$Constants;-><init>(Lcom/android/server/appop/AppOpsService;Landroid/os/Handler;)V
 HSPLcom/android/server/appop/AppOpsService$Constants;->updateConstants()V
 HSPLcom/android/server/appop/AppOpsService$ModeCallback;-><init>(Lcom/android/server/appop/AppOpsService;Lcom/android/internal/app/IAppOpsCallback;IIIII)V
 HSPLcom/android/server/appop/AppOpsService$Op;->-$$Nest$mgetOrCreateAttribution(Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;Ljava/lang/String;)Lcom/android/server/appop/AttributedOp;+]Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;
 HSPLcom/android/server/appop/AppOpsService$Op;-><init>(Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService$UidState;Ljava/lang/String;II)V
 HSPLcom/android/server/appop/AppOpsService$Op;->createEntryLocked()Landroid/app/AppOpsManager$OpEntry;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/AttributedOp;
-HSPLcom/android/server/appop/AppOpsService$Op;->getMode()I+]Lcom/android/server/appop/AppOpsCheckingServiceInterface;Lcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;,Lcom/android/server/appop/AppOpsCheckingServiceImpl;
+HSPLcom/android/server/appop/AppOpsService$Op;->getMode()I+]Lcom/android/server/appop/AppOpsCheckingServiceInterface;Lcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;
 HSPLcom/android/server/appop/AppOpsService$Op;->getOrCreateAttribution(Lcom/android/server/appop/AppOpsService$Op;Ljava/lang/String;)Lcom/android/server/appop/AttributedOp;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/appop/AppOpsService$Op;->isRunning()Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/AttributedOp;
 HSPLcom/android/server/appop/AppOpsService$Ops;-><init>(Ljava/lang/String;Lcom/android/server/appop/AppOpsService$UidState;)V
 HSPLcom/android/server/appop/AppOpsService$PackageVerificationResult;-><init>(Landroid/app/AppOpsManager$RestrictionBypass;Z)V
 HSPLcom/android/server/appop/AppOpsService$UidState;-><init>(Lcom/android/server/appop/AppOpsService;I)V
-HSPLcom/android/server/appop/AppOpsService$UidState;->evalForegroundOps()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/appop/AppOpsCheckingServiceInterface;Lcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;
 HSPLcom/android/server/appop/AppOpsService$UidState;->evalMode(II)I+]Lcom/android/server/appop/AppOpsUidStateTracker;Lcom/android/server/appop/AppOpsUidStateTrackerImpl;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService$UidState;->getState()I+]Lcom/android/server/appop/AppOpsUidStateTracker;Lcom/android/server/appop/AppOpsUidStateTrackerImpl;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
-HSPLcom/android/server/appop/AppOpsService$UidState;->getUidMode(I)I+]Lcom/android/server/appop/AppOpsCheckingServiceInterface;Lcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;,Lcom/android/server/appop/AppOpsCheckingServiceImpl;
+HSPLcom/android/server/appop/AppOpsService$UidState;->getUidMode(I)I+]Lcom/android/server/appop/AppOpsCheckingServiceInterface;Lcom/android/server/appop/AppOpsCheckingServiceTracingDecorator;
+HSPLcom/android/server/appop/AppOpsService$UidState;->setUidMode(II)Z
 HSPLcom/android/server/appop/AppOpsService;->$r8$lambda$B35HWhxq84_9VPbEs_mKK8hPKXU(Lcom/android/server/appop/AppOpsService;Ljava/lang/Runnable;)V
 HSPLcom/android/server/appop/AppOpsService;->$r8$lambda$Of7cei3-vLHF_EaHPQfoMrpPMGQ(Lcom/android/server/appop/AppOpsService;IIZ)V
-HPLcom/android/server/appop/AppOpsService;->$r8$lambda$j7JuBmeFuvKV9Ixgv9xHNEaV-DA(Landroid/app/AsyncNotedAppOp;[ZILjava/lang/String;ILjava/lang/String;Lcom/android/internal/app/IAppOpsAsyncNotedCallback;)V
 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;
 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;
 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;
 HSPLcom/android/server/appop/AppOpsService;-><clinit>()V
 HSPLcom/android/server/appop/AppOpsService;-><init>(Ljava/io/File;Ljava/io/File;Landroid/os/Handler;Landroid/content/Context;)V
-HPLcom/android/server/appop/AppOpsService;->checkAudioOperation(IIILjava/lang/String;)I
+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
 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+]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;
-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$8;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
+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$8;]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;
-HSPLcom/android/server/appop/AppOpsService;->enforceManageAppOpsModes(III)V
-HSPLcom/android/server/appop/AppOpsService;->evalAllForegroundOpsLocked()V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/appop/AppOpsService$UidState;Lcom/android/server/appop/AppOpsService$UidState;
+HSPLcom/android/server/appop/AppOpsService;->enforceManageAppOpsModes(III)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/server/appop/AppOpsService;->filterAppAccessUnlocked(Ljava/lang/String;I)Z+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/appop/AppOpsService;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;
 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;]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/AttributedOp;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLcom/android/server/appop/AppOpsService;->getAsyncNotedOpsKey(Ljava/lang/String;I)Landroid/util/Pair;
+HPLcom/android/server/appop/AppOpsService;->getAsyncNotedOpsKey(Ljava/lang/String;I)Landroid/util/Pair;
 HSPLcom/android/server/appop/AppOpsService;->getBypassforPackage(Lcom/android/server/pm/pkg/PackageState;)Landroid/app/AppOpsManager$RestrictionBypass;+]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/appop/AppOpsService;->getOpEntryForResult(Lcom/android/server/appop/AppOpsService$Op;)Landroid/app/AppOpsManager$OpEntry;
 HSPLcom/android/server/appop/AppOpsService;->getOpLocked(IILjava/lang/String;Ljava/lang/String;ZLandroid/app/AppOpsManager$RestrictionBypass;Z)Lcom/android/server/appop/AppOpsService$Op;+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->getOpLocked(Lcom/android/server/appop/AppOpsService$Ops;IIZ)Lcom/android/server/appop/AppOpsService$Op;+]Landroid/util/SparseArray;Lcom/android/server/appop/AppOpsService$Ops;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->getOpsLocked(ILjava/lang/String;Ljava/lang/String;ZLandroid/app/AppOpsManager$RestrictionBypass;Z)Lcom/android/server/appop/AppOpsService$Ops;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
@@ -2520,22 +2658,20 @@
 HSPLcom/android/server/appop/AppOpsService;->getPackagesForOps([I)Ljava/util/List;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->getUidStateLocked(IZ)Lcom/android/server/appop/AppOpsService$UidState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/appop/AppOpsService;->getUidStateTracker()Lcom/android/server/appop/AppOpsUidStateTracker;
-HSPLcom/android/server/appop/AppOpsService;->initializeUserUidStatesLocked(I)V
-HSPLcom/android/server/appop/AppOpsService;->isAttributionInPackage(Lcom/android/server/pm/pkg/AndroidPackage;Ljava/lang/String;)Z+]Lcom/android/server/pm/pkg/component/ParsedAttribution;Lcom/android/server/pm/pkg/component/ParsedAttributionImpl;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HSPLcom/android/server/appop/AppOpsService;->isIncomingPackageValid(Ljava/lang/String;I)Z+]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;->initializePackageUidStateLocked(IILjava/lang/String;)V
+HSPLcom/android/server/appop/AppOpsService;->isAttributionInPackage(Lcom/android/server/pm/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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/appop/AppOpsService;->isIncomingPackageValid(Ljava/lang/String;I)Z+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 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;
-HPLcom/android/server/appop/AppOpsService;->isOperationActive(IILjava/lang/String;)Z
+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;
+HSPLcom/android/server/appop/AppOpsService;->isOperationActive(IILjava/lang/String;)Z
 HSPLcom/android/server/appop/AppOpsService;->isPackageExisted(Ljava/lang/String;)Z+]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;->isSpecialPackage(ILjava/lang/String;)Z
-HPLcom/android/server/appop/AppOpsService;->lambda$collectAsyncNotedOp$3(Landroid/app/AsyncNotedAppOp;[ZILjava/lang/String;ILjava/lang/String;Lcom/android/internal/app/IAppOpsAsyncNotedCallback;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/internal/app/IAppOpsAsyncNotedCallback;Lcom/android/internal/app/IAppOpsAsyncNotedCallback$Stub$Proxy;
-HSPLcom/android/server/appop/AppOpsService;->lambda$getUidStateTracker$0(Ljava/lang/Runnable;)V+]Ljava/lang/Runnable;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
-HSPLcom/android/server/appop/AppOpsService;->lambda$systemReady$1(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/appop/AppOpsService;->lambda$getUidStateTracker$0(Ljava/lang/Runnable;)V
 HSPLcom/android/server/appop/AppOpsService;->noteOperation(IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Z)Landroid/app/SyncNotedAppOp;+]Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;
 HSPLcom/android/server/appop/AppOpsService;->noteOperationImpl(IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Z)Landroid/app/SyncNotedAppOp;+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 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;+]Lcom/android/server/appop/AttributedOp$InProgressStartOpEvent;Lcom/android/server/appop/AttributedOp$InProgressStartOpEvent;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/AttributedOp;]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;->noteProxyOperationImpl(ILandroid/content/AttributionSource;ZLjava/lang/String;ZZ)Landroid/app/SyncNotedAppOp;
-HPLcom/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;
+HPLcom/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;
 HSPLcom/android/server/appop/AppOpsService;->onUidStateChanged(IIZ)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseArray;Lcom/android/server/appop/AppOpsService$Ops;]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/AttributedOp;]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;->publish()V
 HSPLcom/android/server/appop/AppOpsService;->readAttributionOp(Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/server/appop/AppOpsService$Op;Ljava/lang/String;)V
@@ -2544,7 +2680,7 @@
 HSPLcom/android/server/appop/AppOpsService;->readRecentAccesses()V
 HSPLcom/android/server/appop/AppOpsService;->readRecentAccesses(Landroid/util/AtomicFile;)V
 HSPLcom/android/server/appop/AppOpsService;->readUid(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;)V
-HSPLcom/android/server/appop/AppOpsService;->reportRuntimeAppOpAccessMessageAsyncLocked(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/appop/AppOpsService;->reportRuntimeAppOpAccessMessageAsyncLocked(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->resolveUid(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;
 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;
@@ -2552,43 +2688,44 @@
 HSPLcom/android/server/appop/AppOpsService;->scheduleWriteLocked()V
 HSPLcom/android/server/appop/AppOpsService;->setCameraAudioRestriction(I)V
 HSPLcom/android/server/appop/AppOpsService;->setUidMode(IIILcom/android/internal/app/IAppOpsCallback;)V
-HSPLcom/android/server/appop/AppOpsService;->setUserRestrictionNoCheck(IZLandroid/os/IBinder;ILandroid/os/PackageTagsList;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/appop/AppOpsService$ClientUserRestrictionState;Lcom/android/server/appop/AppOpsService$ClientUserRestrictionState;
-HSPLcom/android/server/appop/AppOpsService;->setUserRestrictions(Landroid/os/Bundle;Landroid/os/IBinder;I)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
+HPLcom/android/server/appop/AppOpsService;->shouldIgnoreCallback(III)Z
 HSPLcom/android/server/appop/AppOpsService;->startOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;ZZLjava/lang/String;ZII)Landroid/app/SyncNotedAppOp;+]Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;
 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;+]Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/AttributedOp;]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;->startWatchingModeWithFlags(ILjava/lang/String;ILcom/android/internal/app/IAppOpsCallback;)V
 HSPLcom/android/server/appop/AppOpsService;->startWatchingNoted([ILcom/android/internal/app/IAppOpsNotedCallback;)V
 HSPLcom/android/server/appop/AppOpsService;->startWatchingStarted([ILcom/android/internal/app/IAppOpsStartedCallback;)V
-HSPLcom/android/server/appop/AppOpsService;->switchPackageIfBootTimeOrRarelyUsedLocked(Ljava/lang/String;)V+]Ljava/util/concurrent/ThreadLocalRandom;Ljava/util/concurrent/ThreadLocalRandom;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
+HPLcom/android/server/appop/AppOpsService;->stopWatchingMode(Lcom/android/internal/app/IAppOpsCallback;)V
+HSPLcom/android/server/appop/AppOpsService;->switchPackageIfBootTimeOrRarelyUsedLocked(Ljava/lang/String;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/concurrent/ThreadLocalRandom;Ljava/util/concurrent/ThreadLocalRandom;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->systemReady()V
-HSPLcom/android/server/appop/AppOpsService;->updatePermissionRevokedCompat(III)V
-HSPLcom/android/server/appop/AppOpsService;->updateStartedOpModeForUidLocked(IZI)V
+HPLcom/android/server/appop/AppOpsService;->updatePermissionRevokedCompat(III)V
+HSPLcom/android/server/appop/AppOpsService;->updateStartedOpModeForUidLocked(IZI)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/AttributedOp;]Landroid/util/SparseArray;Landroid/util/SparseArray;,Lcom/android/server/appop/AppOpsService$Ops;
 HSPLcom/android/server/appop/AppOpsService;->updateUidProcState(III)V+]Lcom/android/server/appop/AppOpsUidStateTracker;Lcom/android/server/appop/AppOpsUidStateTrackerImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 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;+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]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;
+HSPLcom/android/server/appop/AppOpsService;->verifyAndGetBypass(ILjava/lang/String;Ljava/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;Z)Lcom/android/server/appop/AppOpsService$PackageVerificationResult;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]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;->verifyIncomingUid(I)V+]Landroid/content/Context;Landroid/app/ContextImpl;
-HPLcom/android/server/appop/AppOpsService;->writeRecentAccesses()V+]Landroid/util/AtomicFile;Landroid/util/AtomicFile;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/appop/HistoricalRegistry;Lcom/android/server/appop/HistoricalRegistry;]Landroid/app/AppOpsManager$PackageOps;Landroid/app/AppOpsManager$PackageOps;]Landroid/app/AppOpsManager$OpEventProxyInfo;Landroid/app/AppOpsManager$OpEventProxyInfo;]Ljava/util/Map;Landroid/util/ArrayMap;]Landroid/app/AppOpsManager$OpEntry;Landroid/app/AppOpsManager$OpEntry;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/app/AppOpsManager$AttributedOpEntry;Landroid/app/AppOpsManager$AttributedOpEntry;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
+HPLcom/android/server/appop/AppOpsService;->writeRecentAccesses()V+]Landroid/util/AtomicFile;Landroid/util/AtomicFile;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/appop/HistoricalRegistry;Lcom/android/server/appop/HistoricalRegistry;]Landroid/app/AppOpsManager$PackageOps;Landroid/app/AppOpsManager$PackageOps;]Landroid/app/AppOpsManager$OpEventProxyInfo;Landroid/app/AppOpsManager$OpEventProxyInfo;]Ljava/util/Map;Landroid/util/ArrayMap;]Landroid/app/AppOpsManager$OpEntry;Landroid/app/AppOpsManager$OpEntry;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/app/AppOpsManager$AttributedOpEntry;Landroid/app/AppOpsManager$AttributedOpEntry;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsUidStateTracker;->processStateToUidState(I)I
 HPLcom/android/server/appop/AppOpsUidStateTrackerImpl$$ExternalSyntheticLambda0;-><init>()V
-HPLcom/android/server/appop/AppOpsUidStateTrackerImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/appop/AppOpsUidStateTrackerImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;
 HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$$ExternalSyntheticLambda1;-><init>()V
 HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$$ExternalSyntheticLambda1;->accept(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;]Lcom/android/server/appop/AppOpsUidStateTracker$UidStateChangedCallback;Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda11;
 HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1$$ExternalSyntheticLambda0;-><init>(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)V
 HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1$$ExternalSyntheticLambda0;->run()V
 HPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1$$ExternalSyntheticLambda1;-><init>(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)V
+HPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1$$ExternalSyntheticLambda1;->run()V
 HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1;->$r8$lambda$sYtON0b6Ta2c2mKtxQGJJ7-b1js(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)V
 HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1;->execute(Ljava/lang/Runnable;)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;
-HPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1;->executeDelayed(Ljava/lang/Runnable;J)V
-HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1;->lambda$execute$0(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)V
+HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1;->executeDelayed(Ljava/lang/Runnable;J)V
+HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$1;->lambda$execute$0(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)V+]Ljava/util/concurrent/Executor;Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda10;
+HPLcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog$$ExternalSyntheticLambda0;-><init>()V
 HPLcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog$$ExternalSyntheticLambda0;->accept(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;]Ljava/lang/Long;Ljava/lang/Long;]Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;
 HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog$$ExternalSyntheticLambda1;-><init>()V
 HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog$$ExternalSyntheticLambda1;->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/Long;Ljava/lang/Long;]Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;
 HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog$$ExternalSyntheticLambda2;-><init>()V
-HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog$$ExternalSyntheticLambda2;->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/appop/AppOpsUidStateTrackerImpl$EventLog;->logCommitUidState(IIIZZ)V
+HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog$$ExternalSyntheticLambda2;->accept(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;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/lang/Long;Ljava/lang/Long;]Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;
+HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;->logCommitUidState(IIIZZ)V+]Lcom/android/server/appop/AppOpsUidStateTrackerImpl$DelayableExecutor;Lcom/android/server/appop/AppOpsUidStateTrackerImpl$1;
 HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;->logCommitUidStateAsync(JIIIZZ)V
 HPLcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;->logEvalForegroundMode(IIIII)V+]Lcom/android/server/appop/AppOpsUidStateTrackerImpl$DelayableExecutor;Lcom/android/server/appop/AppOpsUidStateTrackerImpl$1;
 HPLcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;->logEvalForegroundModeAsync(JIIIII)V
@@ -2601,11 +2738,11 @@
 HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl;->getUidState(I)I+]Lcom/android/server/appop/AppOpsUidStateTrackerImpl;Lcom/android/server/appop/AppOpsUidStateTrackerImpl;
 HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl;->getUidStateLocked(I)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/appop/AppOpsUidStateTrackerImpl;Lcom/android/server/appop/AppOpsUidStateTrackerImpl;
 HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl;->updateUidPendingStateIfNeeded(I)V+]Lcom/android/server/appop/AppOpsUidStateTrackerImpl;Lcom/android/server/appop/AppOpsUidStateTrackerImpl;
-HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl;->updateUidPendingStateIfNeededLocked(I)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;]Lcom/android/server/appop/AppOpsUidStateTrackerImpl;Lcom/android/server/appop/AppOpsUidStateTrackerImpl;
-HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl;->updateUidProcState(III)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/appop/AppOpsUidStateTrackerImpl$DelayableExecutor;Lcom/android/server/appop/AppOpsUidStateTrackerImpl$1;]Lcom/android/server/appop/AppOpsUidStateTrackerImpl;Lcom/android/server/appop/AppOpsUidStateTrackerImpl;]Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;
+HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl;->updateUidPendingStateIfNeededLocked(I)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/appop/AppOpsUidStateTrackerImpl;Lcom/android/server/appop/AppOpsUidStateTrackerImpl;
+HSPLcom/android/server/appop/AppOpsUidStateTrackerImpl;->updateUidProcState(III)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/appop/AppOpsUidStateTrackerImpl$DelayableExecutor;Lcom/android/server/appop/AppOpsUidStateTrackerImpl$1;]Lcom/android/server/appop/AppOpsUidStateTrackerImpl;Lcom/android/server/appop/AppOpsUidStateTrackerImpl;]Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;
 HSPLcom/android/server/appop/AttributedOp$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/appop/AttributedOp$InProgressStartOpEvent;-><init>(JJLandroid/os/IBinder;Ljava/lang/String;Ljava/lang/Runnable;ILandroid/app/AppOpsManager$OpEventProxyInfo;III)V
-HSPLcom/android/server/appop/AttributedOp$InProgressStartOpEvent;->finish()V+]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/os/Binder;
+HSPLcom/android/server/appop/AttributedOp$InProgressStartOpEvent;->finish()V
 HSPLcom/android/server/appop/AttributedOp$InProgressStartOpEvent;->getAttributionChainId()I
 HSPLcom/android/server/appop/AttributedOp$InProgressStartOpEvent;->getAttributionFlags()I
 HSPLcom/android/server/appop/AttributedOp$InProgressStartOpEvent;->getFlags()I
@@ -2613,7 +2750,7 @@
 HSPLcom/android/server/appop/AttributedOp$InProgressStartOpEvent;->getStartElapsedTime()J
 HSPLcom/android/server/appop/AttributedOp$InProgressStartOpEvent;->getStartTime()J
 HSPLcom/android/server/appop/AttributedOp$InProgressStartOpEvent;->getUidState()I
-HSPLcom/android/server/appop/AttributedOp$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/AttributedOp$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/AttributedOp$OpEventProxyInfoPool;
 HSPLcom/android/server/appop/AttributedOp$InProgressStartOpEventPool;-><init>(Lcom/android/server/appop/AttributedOp$OpEventProxyInfoPool;I)V
 HSPLcom/android/server/appop/AttributedOp$InProgressStartOpEventPool;->acquire(JJLandroid/os/IBinder;Ljava/lang/String;Ljava/lang/Runnable;ILjava/lang/String;Ljava/lang/String;IIII)Lcom/android/server/appop/AttributedOp$InProgressStartOpEvent;+]Lcom/android/server/appop/AttributedOp$InProgressStartOpEvent;Lcom/android/server/appop/AttributedOp$InProgressStartOpEvent;]Landroid/util/Pools$SimplePool;Lcom/android/server/appop/AttributedOp$InProgressStartOpEventPool;]Lcom/android/server/appop/AttributedOp$OpEventProxyInfoPool;Lcom/android/server/appop/AttributedOp$OpEventProxyInfoPool;
 HSPLcom/android/server/appop/AttributedOp$OpEventProxyInfoPool;-><init>(I)V
@@ -2624,7 +2761,7 @@
 HPLcom/android/server/appop/AttributedOp;->createAttributedOpEntryLocked()Landroid/app/AppOpsManager$AttributedOpEntry;+]Lcom/android/server/appop/AttributedOp$InProgressStartOpEvent;Lcom/android/server/appop/AttributedOp$InProgressStartOpEvent;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/AttributedOp;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HPLcom/android/server/appop/AttributedOp;->deepClone(Landroid/util/LongSparseArray;)Landroid/util/LongSparseArray;+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLcom/android/server/appop/AttributedOp;->finishOrPause(Landroid/os/IBinder;ZZ)V+]Lcom/android/server/appop/AttributedOp$InProgressStartOpEvent;Lcom/android/server/appop/AttributedOp$InProgressStartOpEvent;]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/AttributedOp$InProgressStartOpEventPool;]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/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;Lcom/android/server/appop/AppOpsService;
-HSPLcom/android/server/appop/AttributedOp;->finished(Landroid/os/IBinder;)V
+HSPLcom/android/server/appop/AttributedOp;->finished(Landroid/os/IBinder;)V+]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/AttributedOp;
 HSPLcom/android/server/appop/AttributedOp;->finished(Landroid/os/IBinder;Z)V+]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/AttributedOp;
 HSPLcom/android/server/appop/AttributedOp;->isPaused()Z
 HSPLcom/android/server/appop/AttributedOp;->isRunning()Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
@@ -2633,25 +2770,27 @@
 HSPLcom/android/server/appop/AttributedOp;->rejected(JII)V+]Landroid/app/AppOpsManager$NoteOpEvent;Landroid/app/AppOpsManager$NoteOpEvent;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLcom/android/server/appop/AttributedOp;->started(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;IIII)V+]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/AttributedOp;
 HSPLcom/android/server/appop/AttributedOp;->started(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;IIZII)V+]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/AttributedOp;
-HSPLcom/android/server/appop/AttributedOp;->startedOrPaused(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;IIZZII)V+]Lcom/android/server/appop/AttributedOp$InProgressStartOpEvent;Lcom/android/server/appop/AttributedOp$InProgressStartOpEvent;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;]Lcom/android/server/appop/AttributedOp$InProgressStartOpEventPool;Lcom/android/server/appop/AttributedOp$InProgressStartOpEventPool;]Lcom/android/server/appop/HistoricalRegistry;Lcom/android/server/appop/HistoricalRegistry;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/AttributedOp;
+HSPLcom/android/server/appop/AttributedOp;->startedOrPaused(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;IIZZII)V+]Lcom/android/server/appop/AttributedOp$InProgressStartOpEvent;Lcom/android/server/appop/AttributedOp$InProgressStartOpEvent;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;]Lcom/android/server/appop/AttributedOp$InProgressStartOpEventPool;Lcom/android/server/appop/AttributedOp$InProgressStartOpEventPool;]Lcom/android/server/appop/AttributedOp;Lcom/android/server/appop/AttributedOp;]Lcom/android/server/appop/HistoricalRegistry;Lcom/android/server/appop/HistoricalRegistry;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AudioRestrictionManager;-><clinit>()V
 HSPLcom/android/server/appop/AudioRestrictionManager;-><init>()V
-HPLcom/android/server/appop/AudioRestrictionManager;->checkAudioOperation(IIILjava/lang/String;)I
-HPLcom/android/server/appop/AudioRestrictionManager;->checkZenModeRestrictionLocked(IIILjava/lang/String;)I
+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;
 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
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOp;->addDiscreteAccess(Ljava/lang/String;IIJJII)V+]Lcom/android/server/appop/DiscreteRegistry$DiscreteOp;Lcom/android/server/appop/DiscreteRegistry$DiscreteOp;]Ljava/util/List;Ljava/util/ArrayList;
-HPLcom/android/server/appop/DiscreteRegistry$DiscreteOp;->deserialize(Lcom/android/modules/utils/TypedXmlPullParser;J)V+]Lcom/android/server/appop/DiscreteRegistry$DiscreteOp;Lcom/android/server/appop/DiscreteRegistry$DiscreteOp;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;
+HPLcom/android/server/appop/DiscreteRegistry$DiscreteOp;->deserialize(Lcom/android/modules/utils/TypedXmlPullParser;J)V+]Lcom/android/server/appop/DiscreteRegistry$DiscreteOp;Lcom/android/server/appop/DiscreteRegistry$DiscreteOp;]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOp;->getOrCreateDiscreteOpEventsList(Ljava/lang/String;)Ljava/util/List;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOp;->lambda$deserialize$0(Lcom/android/server/appop/DiscreteRegistry$DiscreteOpEvent;Lcom/android/server/appop/DiscreteRegistry$DiscreteOpEvent;)I
+HPLcom/android/server/appop/DiscreteRegistry$DiscreteOp;->serialize(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOpEvent;-><init>(Lcom/android/server/appop/DiscreteRegistry;JJIIII)V
-HPLcom/android/server/appop/DiscreteRegistry$DiscreteOpEvent;->serialize(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;
+HPLcom/android/server/appop/DiscreteRegistry$DiscreteOpEvent;->serialize(Lcom/android/modules/utils/TypedXmlSerializer;)V
 HSPLcom/android/server/appop/DiscreteRegistry$DiscreteOps;-><init>(Lcom/android/server/appop/DiscreteRegistry;I)V
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOps;->addDiscreteAccess(IILjava/lang/String;Ljava/lang/String;IIJJII)V+]Lcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;Lcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;]Lcom/android/server/appop/DiscreteRegistry$DiscreteOps;Lcom/android/server/appop/DiscreteRegistry$DiscreteOps;
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOps;->getOrCreateDiscreteUidOps(I)Lcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOps;->writeToStream(Ljava/io/FileOutputStream;)V
 HPLcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;->addDiscreteAccess(ILjava/lang/String;IIJJII)V+]Lcom/android/server/appop/DiscreteRegistry$DiscreteOp;Lcom/android/server/appop/DiscreteRegistry$DiscreteOp;]Lcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;Lcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;
 HPLcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;->getOrCreateDiscreteOp(I)Lcom/android/server/appop/DiscreteRegistry$DiscreteOp;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HPLcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;->serialize(Lcom/android/modules/utils/TypedXmlSerializer;)V
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;->addDiscreteAccess(ILjava/lang/String;Ljava/lang/String;IIJJII)V+]Lcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;Lcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;]Lcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;Lcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;->getOrCreateDiscretePackageOps(Ljava/lang/String;)Lcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;->serialize(Lcom/android/modules/utils/TypedXmlSerializer;)V
@@ -2669,20 +2808,21 @@
 HPLcom/android/server/appop/DiscreteRegistry;->stableListMerge(Ljava/util/List;Ljava/util/List;)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->generateFile(Ljava/io/File;I)Ljava/io/File;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->handlePersistHistoricalOpsRecursiveDLocked(Ljava/io/File;Ljava/io/File;Ljava/util/List;Ljava/util/Set;I)V
-HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalAttributionOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;]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;Lcom/android/modules/utils/TypedXmlPullParser;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->normalizeSnapshotForSlotDuration(Ljava/util/List;J)V
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalAttributionOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]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;Lcom/android/modules/utils/TypedXmlPullParser;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]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;->readHistoricalPackageOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
-HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalUidOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;Lcom/android/modules/utils/TypedXmlPullParser;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
-HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readStateDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Ljava/lang/String;ILcom/android/modules/utils/TypedXmlPullParser;ID)Landroid/app/AppOpsManager$HistoricalOps;+]Landroid/app/AppOpsManager$HistoricalOps;Landroid/app/AppOpsManager$HistoricalOps;]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;
-HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readeHistoricalOpsDLocked(Lcom/android/modules/utils/TypedXmlPullParser;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI[J)Landroid/app/AppOpsManager$HistoricalOps;+]Landroid/app/AppOpsManager$HistoricalOps;Landroid/app/AppOpsManager$HistoricalOps;]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
-HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalAttributionOpsDLocked(Landroid/app/AppOpsManager$AttributedHistoricalOps;Lcom/android/modules/utils/TypedXmlSerializer;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]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;Lcom/android/modules/utils/TypedXmlSerializer;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Landroid/app/AppOpsManager$HistoricalOp;Landroid/app/AppOpsManager$HistoricalOp;]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;Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/app/AppOpsManager$HistoricalOps;Landroid/app/AppOpsManager$HistoricalOps;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalPackageOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalUidOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;Lcom/android/modules/utils/TypedXmlPullParser;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readStateDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Ljava/lang/String;ILcom/android/modules/utils/TypedXmlPullParser;ID)Landroid/app/AppOpsManager$HistoricalOps;+]Landroid/app/AppOpsManager$HistoricalOps;Landroid/app/AppOpsManager$HistoricalOps;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readeHistoricalOpsDLocked(Lcom/android/modules/utils/TypedXmlPullParser;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI[J)Landroid/app/AppOpsManager$HistoricalOps;+]Landroid/app/AppOpsManager$HistoricalOps;Landroid/app/AppOpsManager$HistoricalOps;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalAttributionOpsDLocked(Landroid/app/AppOpsManager$AttributedHistoricalOps;Lcom/android/modules/utils/TypedXmlSerializer;)V+]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;Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/app/AppOpsManager$HistoricalOp;Landroid/app/AppOpsManager$HistoricalOp;]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;Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/app/AppOpsManager$HistoricalOps;Landroid/app/AppOpsManager$HistoricalOps;]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;->writeHistoricalPackageOpsDLocked(Landroid/app/AppOpsManager$HistoricalPackageOps;Lcom/android/modules/utils/TypedXmlSerializer;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Landroid/app/AppOpsManager$HistoricalPackageOps;Landroid/app/AppOpsManager$HistoricalPackageOps;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
-HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalUidOpsDLocked(Landroid/app/AppOpsManager$HistoricalUidOps;Lcom/android/modules/utils/TypedXmlSerializer;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Landroid/app/AppOpsManager$HistoricalUidOps;Landroid/app/AppOpsManager$HistoricalUidOps;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
-HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeStateOnLocked(Landroid/app/AppOpsManager$HistoricalOp;JLcom/android/modules/utils/TypedXmlSerializer;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Landroid/app/AppOpsManager$HistoricalOp;Landroid/app/AppOpsManager$HistoricalOp;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalPackageOpsDLocked(Landroid/app/AppOpsManager$HistoricalPackageOps;Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/app/AppOpsManager$HistoricalPackageOps;Landroid/app/AppOpsManager$HistoricalPackageOps;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalUidOpsDLocked(Landroid/app/AppOpsManager$HistoricalUidOps;Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/app/AppOpsManager$HistoricalUidOps;Landroid/app/AppOpsManager$HistoricalUidOps;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeStateOnLocked(Landroid/app/AppOpsManager$HistoricalOp;JLcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/app/AppOpsManager$HistoricalOp;Landroid/app/AppOpsManager$HistoricalOp;
 HSPLcom/android/server/appop/HistoricalRegistry;-><clinit>()V
 HSPLcom/android/server/appop/HistoricalRegistry;-><init>(Ljava/lang/Object;)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;
@@ -2691,74 +2831,113 @@
 HSPLcom/android/server/appop/HistoricalRegistry;->incrementOpRejected(IILjava/lang/String;Ljava/lang/String;II)V+]Landroid/app/AppOpsManager$HistoricalOps;Landroid/app/AppOpsManager$HistoricalOps;]Lcom/android/server/appop/HistoricalRegistry;Lcom/android/server/appop/HistoricalRegistry;
 HSPLcom/android/server/appop/HistoricalRegistry;->isPersistenceInitializedMLocked()Z
 HSPLcom/android/server/appop/OnOpModeChangedListener;-><init>(IIIII)V
+HSPLcom/android/server/appop/OnOpModeChangedListener;->getCallingUid()I
 HSPLcom/android/server/appop/OnOpModeChangedListener;->getFlags()I
 HSPLcom/android/server/appop/OnOpModeChangedListener;->getWatchedOpCode()I
 HPLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->runForUserLocked(Ljava/lang/String;Landroid/app/prediction/AppPredictionSessionId;Ljava/util/function/Consumer;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$HostId;->equals(Ljava/lang/Object;)Z
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$Provider;->getUserId()I
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;-><init>(ILandroid/content/ComponentName;)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;]Landroid/content/ComponentName;Landroid/content/ComponentName;
-HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->enforceCallFromPackage(Ljava/lang/String;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->enforceCallFromPackage(Ljava/lang/String;)V+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->getEnabledGroupProfileIds(I)[I
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->getGroupParent(I)I
-HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->getProfileParent(I)I
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->getProfileParent(I)I+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isCallerInstantAppLocked()Z
+HSPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isProfileEnabled(I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->-$$Nest$fgetmSecurityPolicy(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Lcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->-$$Nest$fgetmUserManager(Lcom/android/server/appwidget/AppWidgetServiceImpl;)Landroid/os/UserManager;
+HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->ensureGroupStateLoadedLocked(I)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->ensureGroupStateLoadedLocked(IZ)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/IntArray;Landroid/util/IntArray;]Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl;]Lcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;Lcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;
-HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getAppWidgetIds(Landroid/content/ComponentName;)[I
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getAppWidgetIds(Landroid/content/ComponentName;)[I+]Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl;]Lcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;Lcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->getInstalledProvidersForProfile(IILjava/lang/String;)Landroid/content/pm/ParceledListSlice;+]Landroid/appwidget/AppWidgetProviderInfo;Landroid/appwidget/AppWidgetProviderInfo;]Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;]Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl;]Lcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;Lcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getWidgetIds(Ljava/util/ArrayList;)[I
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->isBoundWidgetPackage(Ljava/lang/String;I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HPLcom/android/server/appwidget/AppWidgetServiceImpl;->isProfileWithLockedParent(I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->isProfileWithLockedParent(I)Z+]Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->isUserRunningAndUnlocked(I)Z
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->lookupProviderLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;)Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;+]Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->parseAppWidgetProviderInfo(Landroid/content/Context;Lcom/android/server/appwidget/AppWidgetServiceImpl$ProviderId;Landroid/content/pm/ActivityInfo;Ljava/lang/String;)Landroid/appwidget/AppWidgetProviderInfo;
-HPLcom/android/server/appwidget/AppWidgetServiceImpl;->serializeAppWidget(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;Z)V
-HPLcom/android/server/appwidget/AppWidgetServiceImpl;->serializeProviderInner(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;,Lcom/android/internal/util/ArtBinaryXmlSerializer;]Landroid/content/ComponentName;Landroid/content/ComponentName;
-HPLcom/android/server/appwidget/AppWidgetServiceImpl;->updateProvidersForPackageLocked(Ljava/lang/String;ILjava/util/Set;)Z+]Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;]Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]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;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/lang/Integer;Ljava/lang/Integer;
-HPLcom/android/server/appwidget/AppWidgetXmlUtil;->writeAppWidgetProviderInfoLocked(Lcom/android/modules/utils/TypedXmlSerializer;Landroid/appwidget/AppWidgetProviderInfo;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Landroid/content/ComponentName;Landroid/content/ComponentName;
-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;
-HSPLcom/android/server/audio/AudioService$AudioHandler;->handleMessage(Landroid/os/Message;)V
-HSPLcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-HSPLcom/android/server/audio/AudioService$VolumeGroupState;->getSettingNameForDevice(I)Ljava/lang/String;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->scheduleNotifyUpdateAppWidgetLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;Landroid/widget/RemoteViews;)V
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->serializeAppWidget(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;Z)V+]Landroid/os/Bundle;Landroid/os/Bundle;
+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;->tagProvidersAndHosts()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->updateProvidersForPackageLocked(Ljava/lang/String;ILjava/util/Set;)Z+]Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;]Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]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;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Integer;Ljava/lang/Integer;
+HPLcom/android/server/appwidget/AppWidgetXmlUtil;->writeAppWidgetProviderInfoLocked(Lcom/android/modules/utils/TypedXmlSerializer;Landroid/appwidget/AppWidgetProviderInfo;)V+]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLcom/android/server/audio/AudioDeviceBroker;->preferredCommunicationDevice()Landroid/media/AudioDeviceAttributes;
+HSPLcom/android/server/audio/AudioDeviceBroker;->topCommunicationRouteClient()Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;+]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;
+HSPLcom/android/server/audio/AudioService$AudioHandler;->handleMessage(Landroid/os/Message;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/audio/SpatializerHelper;Lcom/android/server/audio/SpatializerHelper;]Lcom/android/server/audio/SoundDoseHelper;Lcom/android/server/audio/SoundDoseHelper;]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/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Lcom/android/server/audio/AudioSystemAdapter;Lcom/android/server/audio/AudioSystemAdapter;]Lcom/android/server/utils/EventLogger;Lcom/android/server/utils/EventLogger;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/audio/SystemServerAdapter;Lcom/android/server/audio/SystemServerAdapter;]Lcom/android/server/audio/SoundEffectsHelper;Lcom/android/server/audio/SoundEffectsHelper;
+HPLcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/audio/AudioService$VolumeGroupState;->readSettings()V
 HSPLcom/android/server/audio/AudioService$VolumeStreamState$1;->record(Ljava/lang/String;II)V
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->-$$Nest$fgetmIsMuted(Lcom/android/server/audio/AudioService$VolumeStreamState;)Z
-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;
+HSPLcom/android/server/audio/AudioService$VolumeStreamState;->applyDeviceVolume_syncVSS(I)V+]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->getIndex(I)I+]Landroid/util/SparseIntArray;Lcom/android/server/audio/AudioService$VolumeStreamState$1;
+HSPLcom/android/server/audio/AudioService$VolumeStreamState;->getMaxIndex()I
+HSPLcom/android/server/audio/AudioService$VolumeStreamState;->getSettingNameForDevice(I)Ljava/lang/String;
 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;->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;
+HSPLcom/android/server/audio/AudioService$VolumeStreamState;->readSettings()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/utils/EventLogger;Lcom/android/server/utils/EventLogger;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;]Landroid/content/Intent;Landroid/content/Intent;]Ljava/util/Set;Ljava/util/HashSet;
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmSystemServer(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/SystemServerAdapter;
 HSPLcom/android/server/audio/AudioService;->-$$Nest$mgetDeviceSetForStreamDirect(Lcom/android/server/audio/AudioService;I)Ljava/util/Set;
+HPLcom/android/server/audio/AudioService;->adjustStreamVolume(IIILjava/lang/String;Ljava/lang/String;IILjava/lang/String;ZI)V
+HSPLcom/android/server/audio/AudioService;->callingHasAudioSettingsPermission()Z
 HSPLcom/android/server/audio/AudioService;->enforceQueryStateOrModifyRoutingPermission()V
+HSPLcom/android/server/audio/AudioService;->enforceVolumeController(Ljava/lang/String;)V
 HSPLcom/android/server/audio/AudioService;->ensureValidStreamType(I)V
 HSPLcom/android/server/audio/AudioService;->getDeviceForStream(I)I+]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
 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;->getDevicesForAttributes(Landroid/media/AudioAttributes;)Ljava/util/ArrayList;
 HSPLcom/android/server/audio/AudioService;->getDevicesForAttributesInt(Landroid/media/AudioAttributes;Z)Ljava/util/ArrayList;+]Lcom/android/server/audio/AudioSystemAdapter;Lcom/android/server/audio/AudioSystemAdapter;
 HSPLcom/android/server/audio/AudioService;->getStreamMaxVolume(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;->getStreamMinVolume(I)I+]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
-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;->isFixedVolumeDevice(I)Z
-HSPLcom/android/server/audio/AudioService;->isStreamMute(I)Z
-HSPLcom/android/server/audio/AudioService;->selectOneAudioDevice(Ljava/util/Set;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/Iterator;Ljava/util/TreeMap$KeyIterator;]Ljava/util/Set;Ljava/util/TreeSet;
-HSPLcom/android/server/audio/AudioService;->sendMsg(Landroid/os/Handler;IIIILjava/lang/Object;I)V
+HSPLcom/android/server/audio/AudioService;->getStreamMinVolume(I)I+]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;]Landroid/content/Context;Landroid/app/ContextImpl;
+HPLcom/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;->isA2dpAbsoluteVolumeDevice(I)Z
+HSPLcom/android/server/audio/AudioService;->isFixedVolumeDevice(I)Z+]Ljava/util/Set;Ljava/util/HashSet;
+HSPLcom/android/server/audio/AudioService;->isFullVolumeDevice(I)Z+]Ljava/util/Set;Ljava/util/HashSet;
+HSPLcom/android/server/audio/AudioService;->isStreamMute(I)Z+]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
+HSPLcom/android/server/audio/AudioService;->selectOneAudioDevice(Ljava/util/Set;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/Set;Ljava/util/TreeSet;
+HSPLcom/android/server/audio/AudioService;->sendMsg(Landroid/os/Handler;IIIILjava/lang/Object;I)V+]Landroid/os/Handler;Lcom/android/server/audio/AudioService$AudioHandler;
 HSPLcom/android/server/audio/AudioSystemAdapter;->getDevicesForAttributes(Landroid/media/AudioAttributes;Z)Ljava/util/ArrayList;+]Lcom/android/server/audio/AudioSystemAdapter;Lcom/android/server/audio/AudioSystemAdapter;
 HSPLcom/android/server/audio/AudioSystemAdapter;->getDevicesForAttributesImpl(Landroid/media/AudioAttributes;Z)Ljava/util/ArrayList;+]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
+HPLcom/android/server/audio/MediaFocusControl;->abandonAudioFocus(Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Landroid/media/AudioAttributes;Ljava/lang/String;)I
 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
-HPLcom/android/server/audio/PlaybackActivityMonitor;->dispatchPlaybackChange(Z)V+]Ljava/util/concurrent/ConcurrentLinkedQueue;Ljava/util/concurrent/ConcurrentLinkedQueue;]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;Lcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;]Lcom/android/server/audio/PlaybackActivityMonitor;Lcom/android/server/audio/PlaybackActivityMonitor;]Ljava/util/Iterator;Ljava/util/concurrent/ConcurrentLinkedQueue$Itr;
+HSPLcom/android/server/audio/PlaybackActivityMonitor$NewPlayerEvent;-><init>(Landroid/media/AudioPlaybackConfiguration;)V+]Landroid/media/AudioPlaybackConfiguration;Landroid/media/AudioPlaybackConfiguration;
+HPLcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;->dispatchPlaybackConfigChange(Ljava/util/List;Z)V+]Landroid/media/IPlaybackConfigDispatcher;Lcom/android/server/audio/AudioService$4;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HPLcom/android/server/audio/PlaybackActivityMonitor$PlayerEvent;-><init>(III)V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->dispatchPlaybackChange(Z)V+]Ljava/util/concurrent/ConcurrentLinkedQueue;Ljava/util/concurrent/ConcurrentLinkedQueue;]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;Lcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;]Lcom/android/server/audio/PlaybackActivityMonitor;Lcom/android/server/audio/PlaybackActivityMonitor;
 HPLcom/android/server/audio/PlaybackActivityMonitor;->playerEvent(IIII)V
-HPLcom/android/server/audio/PlaybackActivityMonitor;->releasePlayer(II)V
-HSPLcom/android/server/audio/PlaybackActivityMonitor;->trackPlayer(Landroid/media/PlayerBase$PlayerIdCard;)I
+HPLcom/android/server/audio/PlaybackActivityMonitor;->portEvent(IILandroid/os/PersistableBundle;I)V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->releasePlayer(II)V+]Landroid/os/Handler;Lcom/android/server/audio/PlaybackActivityMonitor$1;]Landroid/media/AudioPlaybackConfiguration;Landroid/media/AudioPlaybackConfiguration;]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/audio/FadeOutManager;Lcom/android/server/audio/FadeOutManager;]Lcom/android/server/audio/PlaybackActivityMonitor;Lcom/android/server/audio/PlaybackActivityMonitor;]Lcom/android/server/utils/EventLogger;Lcom/android/server/utils/EventLogger;]Lcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;Lcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/audio/PlaybackActivityMonitor;->trackPlayer(Landroid/media/PlayerBase$PlayerIdCard;)I+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/media/AudioPlaybackConfiguration;Landroid/media/AudioPlaybackConfiguration;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/audio/PlaybackActivityMonitor;Lcom/android/server/audio/PlaybackActivityMonitor;]Lcom/android/server/utils/EventLogger;Lcom/android/server/utils/EventLogger;
 HPLcom/android/server/audio/RecordingActivityMonitor$RecordingEvent;->eventToString()Ljava/lang/String;
+HPLcom/android/server/audio/RecordingActivityMonitor;->createRecordingConfiguration(III[IIZI[Landroid/media/audiofx/AudioEffect$Descriptor;[Landroid/media/audiofx/AudioEffect$Descriptor;)Landroid/media/AudioRecordingConfiguration;
+HSPLcom/android/server/audio/RotationHelper;->enable()V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->onInputMethodFinishInput()V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->onInputMethodStartInput(Landroid/view/autofill/AutofillId;)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->maybeUpdateResponseToImeLocked()V
+HPLcom/android/server/autofill/AutofillManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/autofill/AutofillManagerService$AugmentedAutofillState;->injectAugmentedAutofillInfo(Landroid/content/AutofillOptions;ILjava/lang/String;)V
+HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->getFillEventHistory(Lcom/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+]Lcom/android/server/autofill/AutofillManagerServiceImpl;Lcom/android/server/autofill/AutofillManagerServiceImpl;
+HSPLcom/android/server/autofill/AutofillManagerService$AutofillCompatState;->isCompatibilityModeRequested(Ljava/lang/String;JI)Z
 HSPLcom/android/server/autofill/AutofillManagerService$DisabledInfoCache;->getAppDisabledActivities(ILjava/lang/String;)Landroid/util/ArrayMap;
 HSPLcom/android/server/autofill/AutofillManagerService$DisabledInfoCache;->getAppDisabledExpiration(ILjava/lang/String;)J
 HSPLcom/android/server/autofill/AutofillManagerService$LocalService;->getAutofillOptions(Ljava/lang/String;JI)Landroid/content/AutofillOptions;
 HSPLcom/android/server/autofill/AutofillManagerService$LocalService;->injectDisableAppInfo(Landroid/content/AutofillOptions;ILjava/lang/String;)V
-HPLcom/android/server/autofill/Session;->updateLocked(Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;II)V
+HPLcom/android/server/autofill/AutofillManagerService;->peekServiceForUserWithLocalBinderIdentityLocked(I)Lcom/android/server/autofill/AutofillManagerServiceImpl;+]Lcom/android/server/infra/AbstractMasterSystemService;Lcom/android/server/autofill/AutofillManagerService;
+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
+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/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;]Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistStructure;]Lcom/android/server/autofill/AutofillManagerServiceImpl;Lcom/android/server/autofill/AutofillManagerServiceImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/autofill/Session$AssistDataReceiverImpl;Lcom/android/server/autofill/Session$AssistDataReceiverImpl;
+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
+HPLcom/android/server/autofill/Session;->requestNewFillResponseLocked(Lcom/android/server/autofill/ViewState;II)V
+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;]Landroid/service/autofill/FillResponse;Landroid/service/autofill/FillResponse;]Lcom/android/server/autofill/Session;Lcom/android/server/autofill/Session;]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/AutofillManagerServiceImpl;Lcom/android/server/autofill/AutofillManagerServiceImpl;]Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/autofill/Session;->updateViewStateAndUiOnValueChangedLocked(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Lcom/android/server/autofill/ViewState;I)V
 HPLcom/android/server/backup/BackupManagerConstants;->getFullBackupIntervalMilliseconds()J
 HPLcom/android/server/backup/BackupManagerConstants;->getFullBackupRequireCharging()Z
 HPLcom/android/server/backup/BackupManagerConstants;->getFullBackupRequiredNetworkType()I
+HPLcom/android/server/backup/BackupManagerConstants;->getKeyValueBackupIntervalMilliseconds()J
 HSPLcom/android/server/backup/BackupManagerService;->binderGetCallingUserId()I
 HPLcom/android/server/backup/BackupManagerService;->dataChanged(ILjava/lang/String;)V
 HSPLcom/android/server/backup/BackupManagerService;->dataChanged(Ljava/lang/String;)V
@@ -2767,6 +2946,8 @@
 HPLcom/android/server/backup/BackupManagerService;->getServiceForUserIfCallerHasPermission(ILjava/lang/String;)Lcom/android/server/backup/UserBackupManagerService;
 HSPLcom/android/server/backup/BackupManagerService;->isUserReadyForBackup(I)Z
 HPLcom/android/server/backup/FullBackupJob;->schedule(ILandroid/content/Context;JLcom/android/server/backup/UserBackupManagerService;)V
+HPLcom/android/server/backup/TransportManager;->addUserIdToLogMessage(ILjava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/backup/TransportManager;->getCurrentTransportClient(Ljava/lang/String;)Lcom/android/server/backup/transport/TransportConnection;
 HPLcom/android/server/backup/TransportManager;->getRegisteredTransportEntryLocked(Ljava/lang/String;)Ljava/util/Map$Entry;
 HPLcom/android/server/backup/TransportManager;->updateTransportAttributes(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)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;
@@ -2776,6 +2957,7 @@
 HPLcom/android/server/backup/UserBackupManagerService$BackupWakeLock;->acquire()V
 HPLcom/android/server/backup/UserBackupManagerService$BackupWakeLock;->release()V
 HPLcom/android/server/backup/UserBackupManagerService;->-$$Nest$fgetmFullBackupQueue(Lcom/android/server/backup/UserBackupManagerService;)Ljava/util/ArrayList;
+HPLcom/android/server/backup/UserBackupManagerService;->-$$Nest$mdataChangedImpl(Lcom/android/server/backup/UserBackupManagerService;Ljava/lang/String;Ljava/util/HashSet;)V
 HPLcom/android/server/backup/UserBackupManagerService;->addUserIdToLogMessage(ILjava/lang/String;)Ljava/lang/String;
 HPLcom/android/server/backup/UserBackupManagerService;->beginFullBackup(Lcom/android/server/backup/FullBackupJob;)Z
 HPLcom/android/server/backup/UserBackupManagerService;->bindToAgentSynchronous(Landroid/content/pm/ApplicationInfo;II)Landroid/app/IBackupAgent;
@@ -2789,32 +2971,37 @@
 HPLcom/android/server/backup/UserBackupManagerService;->scheduleNextFullBackupJob(J)V
 HPLcom/android/server/backup/UserBackupManagerService;->updateTransportAttributes(ILandroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)V
 HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/OperationStorage;Lcom/android/server/backup/transport/TransportConnection;Landroid/app/backup/IFullBackupRestoreObserver;[Ljava/lang/String;ZLcom/android/server/backup/FullBackupJob;Ljava/util/concurrent/CountDownLatch;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;Lcom/android/server/backup/internal/OnTaskFinishedListener;ZLcom/android/server/backup/utils/BackupEligibilityRules;)V
-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;]Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;]Ljava/util/concurrent/CountDownLatch;Ljava/util/concurrent/CountDownLatch;]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;]Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;]Ljava/util/concurrent/CountDownLatch;Ljava/util/concurrent/CountDownLatch;]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/fullbackup/PerformFullTransportBackupTask$$ExternalSyntheticLambda0;,Lcom/android/server/backup/UserBackupManagerService$$ExternalSyntheticLambda8;]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/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;
+HPLcom/android/server/backup/internal/LifecycleOperationStorage;->removeOperation(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Set;Ljava/util/HashSet;
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->extractAgentData(Landroid/content/pm/PackageInfo;Landroid/app/IBackupAgent;)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$TransportStatusCallbackPool;-><init>()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;
 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;->getFutureResult(Lcom/android/internal/infra/AndroidFuture;)Ljava/lang/Object;
+HPLcom/android/server/backup/transport/TransportConnection$TransportConnectionMonitor;-><init>(Landroid/content/Context;Lcom/android/server/backup/transport/TransportConnection;)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;->checkStateIntegrityLocked()V
 HPLcom/android/server/backup/transport/TransportConnection;->connect(Ljava/lang/String;)Lcom/android/server/backup/transport/BackupTransportClient;
 HPLcom/android/server/backup/transport/TransportConnection;->connectAsync(Lcom/android/server/backup/transport/TransportConnectionListener;Ljava/lang/String;)V
 HPLcom/android/server/backup/transport/TransportConnection;->log(ILjava/lang/String;)V
-HPLcom/android/server/backup/transport/TransportConnection;->log(ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/backup/transport/TransportConnection;->log(ILjava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/transport/TransportConnection;
 HPLcom/android/server/backup/transport/TransportConnection;->markAsDisposed()V
 HPLcom/android/server/backup/transport/TransportConnection;->notifyListener(Lcom/android/server/backup/transport/TransportConnectionListener;Lcom/android/server/backup/transport/BackupTransportClient;Ljava/lang/String;)V
 HPLcom/android/server/backup/transport/TransportConnection;->notifyListenersAndClearLocked(Lcom/android/server/backup/transport/BackupTransportClient;)V
 HPLcom/android/server/backup/transport/TransportConnection;->onStateTransition(II)V
-HPLcom/android/server/backup/transport/TransportConnection;->saveLogEntry(Ljava/lang/String;)V
+HPLcom/android/server/backup/transport/TransportConnection;->saveLogEntry(Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/List;Ljava/util/LinkedList;
 HPLcom/android/server/backup/transport/TransportConnection;->setStateLocked(ILcom/android/server/backup/transport/BackupTransportClient;)V
+HPLcom/android/server/backup/transport/TransportConnection;->stateToString(I)Ljava/lang/String;
 HPLcom/android/server/backup/transport/TransportConnection;->toString()Ljava/lang/String;
 HPLcom/android/server/backup/transport/TransportConnection;->unbind(Ljava/lang/String;)V
 HPLcom/android/server/backup/transport/TransportConnectionManager;->disposeOfTransportClient(Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;)V
+HPLcom/android/server/backup/transport/TransportConnectionManager;->getRealTransportIntent(Landroid/content/ComponentName;)Landroid/content/Intent;
 HPLcom/android/server/backup/transport/TransportConnectionManager;->getTransportClient(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;)Lcom/android/server/backup/transport/TransportConnection;
 HPLcom/android/server/backup/transport/TransportStats$Stats;->register(J)V
+HPLcom/android/server/backup/transport/TransportStats;->registerConnectionTime(Landroid/content/ComponentName;J)V
 HPLcom/android/server/backup/transport/TransportStatusCallback;->getOperationStatus()I+]Ljava/lang/Object;Lcom/android/server/backup/transport/TransportStatusCallback;
 HPLcom/android/server/backup/transport/TransportUtils;->formatMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/backup/utils/BackupEligibilityRules;-><init>(Landroid/content/pm/PackageManager;Landroid/content/pm/PackageManagerInternal;ILandroid/content/Context;I)V
@@ -2822,61 +3009,113 @@
 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;Ljava/util/HashSet;
 HPLcom/android/server/backup/utils/BackupEligibilityRules;->appIsRunningAndEligibleForBackupWithTransport(Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;)Z
 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;
+HPLcom/android/server/biometrics/AuthService$AuthServiceImpl;->canAuthenticate(Ljava/lang/String;II)I
 HSPLcom/android/server/biometrics/BiometricSensor;->toString()Ljava/lang/String;
 HPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->getAuthenticatorIds(I)[J
-HPLcom/android/server/biometrics/PreAuthInfo;->create(Landroid/app/trust/ITrustManager;Landroid/app/admin/DevicePolicyManager;Lcom/android/server/biometrics/BiometricService$SettingObserver;Ljava/util/List;ILandroid/hardware/biometrics/PromptInfo;Ljava/lang/String;ZLandroid/content/Context;)Lcom/android/server/biometrics/PreAuthInfo;
-HPLcom/android/server/biometrics/log/OperationContextExt;->setFirstSessionId(Lcom/android/server/biometrics/log/BiometricContext;)V
-HPLcom/android/server/biometrics/log/OperationContextExt;->update(Lcom/android/server/biometrics/log/BiometricContext;)Lcom/android/server/biometrics/log/OperationContextExt;
+HPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->getCurrentStrength(I)I
+HPLcom/android/server/biometrics/PreAuthInfo;->getInternalStatus()Landroid/util/Pair;
+HPLcom/android/server/biometrics/Utils;->isDebugEnabled(Landroid/content/Context;I)Z
+HPLcom/android/server/biometrics/Utils;->isKeyguard(Landroid/content/Context;Ljava/lang/String;)Z
+HPLcom/android/server/biometrics/log/ALSProbe;-><init>(Landroid/hardware/SensorManager;Landroid/os/Handler;J)V
+HPLcom/android/server/biometrics/log/ALSProbe;->disableLightSensorLoggingLocked(Z)V
+HPLcom/android/server/biometrics/log/ALSProbe;->enableLightSensorLoggingLocked()V
+HPLcom/android/server/biometrics/log/BiometricContextProvider;->getCurrentRotation()I
+HPLcom/android/server/biometrics/log/BiometricContextProvider;->getKeyguardEntrySessionInfo()Lcom/android/server/biometrics/log/BiometricContextSessionInfo;
+HPLcom/android/server/biometrics/log/BiometricContextProvider;->isDisplayOn()Z
+HPLcom/android/server/biometrics/log/BiometricFrameworkStatsLogger;->acquired(Lcom/android/server/biometrics/log/OperationContextExt;IIIZIII)V
+HPLcom/android/server/biometrics/log/BiometricLogger;->logOnAcquired(Landroid/content/Context;Lcom/android/server/biometrics/log/OperationContextExt;III)V
+HPLcom/android/server/biometrics/log/BiometricLogger;->shouldSkipLogging()Z
+HPLcom/android/server/biometrics/log/OperationContextExt;->setFirstSessionId(Lcom/android/server/biometrics/log/BiometricContext;)V+]Lcom/android/server/biometrics/log/BiometricContextSessionInfo;Lcom/android/server/biometrics/log/BiometricContextSessionInfo;]Lcom/android/server/biometrics/log/BiometricContext;Lcom/android/server/biometrics/log/BiometricContextProvider;
+HPLcom/android/server/biometrics/log/OperationContextExt;->update(Lcom/android/server/biometrics/log/BiometricContext;Z)Lcom/android/server/biometrics/log/OperationContextExt;+]Lcom/android/server/biometrics/log/OperationContextExt;Lcom/android/server/biometrics/log/OperationContextExt;]Lcom/android/server/biometrics/log/BiometricContext;Lcom/android/server/biometrics/log/BiometricContextProvider;
 HPLcom/android/server/biometrics/sensors/AcquisitionClient;->onAcquiredInternal(IIZ)V
+HPLcom/android/server/biometrics/sensors/AuthSessionCoordinator;->authEndedFor(IIIJZ)V
+HPLcom/android/server/biometrics/sensors/AuthSessionCoordinator;->authStartedFor(IIJ)V
+HPLcom/android/server/biometrics/sensors/AuthSessionCoordinator;->endAuthSession()V
+HPLcom/android/server/biometrics/sensors/AuthenticationClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;Landroid/os/IBinder;Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;JZLandroid/hardware/biometrics/AuthenticateOptions;IZLcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;ZLandroid/app/TaskStackListener;Lcom/android/server/biometrics/sensors/LockoutTracker;ZZI)V
 HPLcom/android/server/biometrics/sensors/AuthenticationClient;->onAuthenticated(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;ZLjava/util/ArrayList;)V
+HPLcom/android/server/biometrics/sensors/AuthenticationClient;->start(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
+HPLcom/android/server/biometrics/sensors/BaseClientMonitor;-><init>(Landroid/content/Context;Landroid/os/IBinder;Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;ILjava/lang/String;IILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;)V
 HPLcom/android/server/biometrics/sensors/BaseClientMonitor;->toString()Ljava/lang/String;
 HPLcom/android/server/biometrics/sensors/BiometricScheduler$1;->lambda$onClientFinished$0(Lcom/android/server/biometrics/sensors/BaseClientMonitor;Z)V
+HPLcom/android/server/biometrics/sensors/BiometricScheduler;->getCurrentClient()Lcom/android/server/biometrics/sensors/BaseClientMonitor;
+HPLcom/android/server/biometrics/sensors/BiometricScheduler;->scheduleClientMonitor(Lcom/android/server/biometrics/sensors/BaseClientMonitor;Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 HPLcom/android/server/biometrics/sensors/BiometricScheduler;->startNextOperationIfIdle()V
+HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->doStart(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)Z
+HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->toString()Ljava/lang/String;
 HPLcom/android/server/biometrics/sensors/BiometricServiceRegistry;->getProviderForSensor(I)Lcom/android/server/biometrics/sensors/BiometricServiceProvider;
 HPLcom/android/server/biometrics/sensors/BiometricServiceRegistry;->getSingleProvider()Landroid/util/Pair;
+HPLcom/android/server/biometrics/sensors/HalClientMonitor;->getOperationContext()Lcom/android/server/biometrics/log/OperationContextExt;+]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;
+HPLcom/android/server/biometrics/sensors/SensorList;->contains(I)Z
+HPLcom/android/server/biometrics/sensors/UserAwareBiometricScheduler;->getTag()Ljava/lang/String;
+HPLcom/android/server/biometrics/sensors/UserAwareBiometricScheduler;->startNextOperationIfIdle()V
+HPLcom/android/server/biometrics/sensors/face/aidl/AidlConversionUtils;->toFrameworkBaseFrame(Landroid/hardware/biometrics/face/BaseFrame;)Landroid/hardware/face/FaceDataFrame;
+HPLcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;->onAuthenticationFrame(Landroid/hardware/face/FaceAuthenticationFrame;)V
+HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$1;->authenticate(Landroid/os/IBinder;JLandroid/hardware/fingerprint/IFingerprintServiceReceiver;Landroid/hardware/fingerprint/FingerprintAuthenticateOptions;)J
+HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$1;->hasEnrolledFingerprintsDeprecated(ILjava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$1;->isHardwareDetectedDeprecated(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->canUseFingerprint(Ljava/lang/String;Ljava/lang/String;ZIII)Z
+HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->getEnrolledFingerprintsDeprecated(ILjava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintUserState;->getCopy(Ljava/util/ArrayList;)Ljava/util/ArrayList;
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintUtils;->getInstance(ILjava/lang/String;)Lcom/android/server/biometrics/sensors/fingerprint/FingerprintUtils;
+HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintUtils;->getStateForUser(Landroid/content/Context;I)Lcom/android/server/biometrics/sensors/fingerprint/FingerprintUserState;
+HPLcom/android/server/biometrics/sensors/fingerprint/GestureAvailabilityDispatcher;->markSensorActive(IZ)V
 HPLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->hasHalInstance()Z
-HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda2;-><init>(ILjava/util/concurrent/atomic/AtomicLong;)V
+HPLcom/android/server/blob/BlobMetadata$Leasee;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/server/blob/BlobMetadata;->getAccessor(Landroid/util/ArraySet;Ljava/lang/String;II)Lcom/android/server/blob/BlobMetadata$Accessor;+]Lcom/android/server/blob/BlobMetadata$Accessor;Lcom/android/server/blob/BlobMetadata$Committer;,Lcom/android/server/blob/BlobMetadata$Leasee;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+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;->shouldAttributeToLeasee(IZ)Z+]Lcom/android/server/blob/BlobMetadata;Lcom/android/server/blob/BlobMetadata;
+HPLcom/android/server/blob/BlobMetadata;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V+]Landroid/app/blob/BlobHandle;Landroid/app/blob/BlobHandle;]Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/FastXmlSerializer;]Lcom/android/server/blob/BlobMetadata$Committer;Lcom/android/server/blob/BlobMetadata$Committer;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/blob/BlobMetadata$Leasee;Lcom/android/server/blob/BlobMetadata$Leasee;
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda3;-><init>(IZLjava/util/concurrent/atomic/AtomicLong;)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$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->$r8$lambda$Kg9zqhcDaAJ5lbpIRP5r9mf_LcE(IZLjava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobMetadata;)V
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->augmentStatsForUid(Landroid/content/pm/PackageStats;IZ)V
-HPLcom/android/server/blob/BlobStoreManagerService;->forEachBlobLocked(Ljava/util/function/Consumer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Consumer;Lcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda5;,Lcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda1;,Lcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda3;
-HPLcom/android/server/blob/BlobStoreManagerService;->forEachSessionInUser(Ljava/util/function/Consumer;I)V
-HPLcom/android/server/blob/BlobStoreManagerService;->getUserSessionsLocked(I)Landroid/util/LongSparseArray;
-HPLcom/android/server/companion/AssociationStoreImpl$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V
+HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->lambda$augmentStatsForUid$3(IZLjava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobMetadata;)V+]Lcom/android/server/blob/BlobMetadata;Lcom/android/server/blob/BlobMetadata;]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;
+HPLcom/android/server/blob/BlobStoreManagerService;->forEachBlob(Ljava/util/function/Consumer;)V+]Lcom/android/server/blob/BlobStoreManagerService;Lcom/android/server/blob/BlobStoreManagerService;
+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+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Ljava/util/function/Consumer;Lcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda4;,Lcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda0;,Lcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda12;,Lcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda2;]Lcom/android/server/blob/BlobStoreManagerService;Lcom/android/server/blob/BlobStoreManagerService;
+HPLcom/android/server/blob/BlobStoreManagerService;->getUserSessionsLocked(I)Landroid/util/LongSparseArray;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;-><init>(Ljava/lang/String;ILjava/lang/String;IZIIIZJI)V
+HPLcom/android/server/camera/CameraServiceProxy$EventWriterTask;->logCameraUsageEvent(Lcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;)V
+HPLcom/android/server/camera/CameraServiceProxy;->updateActivityCount(Landroid/hardware/CameraSessionStats;)V
+HSPLcom/android/server/companion/AssociationStoreImpl;->getAssociationsForPackage(ILjava/lang/String;)Ljava/util/List;
+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;
 HPLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->getAllAssociationsForUser(I)Ljava/util/List;
 HPLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->getAssociations(Ljava/lang/String;I)Ljava/util/List;
-HPLcom/android/server/companion/PermissionsUtils;->checkCallerIsSystemOr(ILjava/lang/String;)Z
-HPLcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;->isAppRunningOnAnyVirtualDevice(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/companion/virtual/VirtualDeviceManagerService;->-$$Nest$fgetmVirtualDeviceManagerLock(Lcom/android/server/companion/virtual/VirtualDeviceManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;->getDeviceIdsForUid(I)Landroid/util/ArraySet;+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/companion/virtual/VirtualDeviceImpl;Lcom/android/server/companion/virtual/VirtualDeviceImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;->getPreferredLocaleListForUid(I)Landroid/os/LocaleList;
+HPLcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;->isAppRunningOnAnyVirtualDevice(I)Z
+HSPLcom/android/server/companion/virtual/VirtualDeviceManagerService;->-$$Nest$mgetVirtualDevicesSnapshot(Lcom/android/server/companion/virtual/VirtualDeviceManagerService;)Ljava/util/ArrayList;+]Lcom/android/server/companion/virtual/VirtualDeviceManagerService;Lcom/android/server/companion/virtual/VirtualDeviceManagerService;
+HSPLcom/android/server/companion/virtual/VirtualDeviceManagerService;->getVirtualDevicesSnapshot()Ljava/util/ArrayList;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/compat/CompatChange;-><init>(JLjava/lang/String;IIZZLjava/lang/String;Z)V
 HSPLcom/android/server/compat/CompatChange;-><init>(Lcom/android/server/compat/config/Change;)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
-HPLcom/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;
+HPLcom/android/server/compat/CompatChange;->recheckOverride(Ljava/lang/String;Lcom/android/internal/compat/OverrideAllowedState;Ljava/lang/Long;)Z+]Landroid/app/compat/PackageOverride;Landroid/app/compat/PackageOverride;]Lcom/android/server/compat/CompatChange;Lcom/android/server/compat/CompatChange;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
 HSPLcom/android/server/compat/CompatChange;->willBeEnabled(Ljava/lang/String;)Z
 HSPLcom/android/server/compat/CompatConfig;-><init>(Lcom/android/internal/compat/AndroidBuildClassifier;Landroid/content/Context;)V
 HSPLcom/android/server/compat/CompatConfig;->create(Lcom/android/internal/compat/AndroidBuildClassifier;Landroid/content/Context;)Lcom/android/server/compat/CompatConfig;
-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;->getDisabledChanges(Landroid/content/pm/ApplicationInfo;)[J+]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;
 HSPLcom/android/server/compat/CompatConfig;->initConfigFromLib(Ljava/io/File;)V
 HSPLcom/android/server/compat/CompatConfig;->initOverrides()V
 HSPLcom/android/server/compat/CompatConfig;->initOverrides(Ljava/io/File;Ljava/io/File;)V
 HSPLcom/android/server/compat/CompatConfig;->invalidateCache()V
 HSPLcom/android/server/compat/CompatConfig;->isChangeEnabled(JLandroid/content/pm/ApplicationInfo;)Z+]Lcom/android/server/compat/CompatChange;Lcom/android/server/compat/CompatChange;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
-HPLcom/android/server/compat/CompatConfig;->isLoggingOnly(J)Z
+HPLcom/android/server/compat/CompatConfig;->isLoggingOnly(J)Z+]Lcom/android/internal/compat/CompatibilityChangeInfo;Lcom/android/server/compat/CompatChange;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
 HSPLcom/android/server/compat/CompatConfig;->loadOverrides(Ljava/io/File;)V
 HSPLcom/android/server/compat/CompatConfig;->makeBackupFile(Ljava/io/File;)Ljava/io/File;
 HPLcom/android/server/compat/CompatConfig;->maxTargetSdkForChangeIdOptIn(J)I
 HSPLcom/android/server/compat/CompatConfig;->readConfig(Ljava/io/File;)V
+HPLcom/android/server/compat/CompatConfig;->removePackageOverridesWithoutSaving(Lcom/android/internal/compat/CompatibilityOverridesToRemoveConfig;Ljava/lang/String;)Z
 HSPLcom/android/server/compat/CompatConfig;->willChangeBeEnabled(JLjava/lang/String;)Z
 HSPLcom/android/server/compat/OverrideValidatorImpl;-><init>(Lcom/android/internal/compat/AndroidBuildClassifier;Landroid/content/Context;Lcom/android/server/compat/CompatConfig;)V
 HPLcom/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/PlatformCompat;-><init>(Landroid/content/Context;)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;->isChangeEnabled(JLandroid/content/pm/ApplicationInfo;)Z
+HSPLcom/android/server/compat/PlatformCompat;->getDisabledChanges(Landroid/content/pm/ApplicationInfo;)[J
+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;]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;
@@ -2943,14 +3182,17 @@
 HSPLcom/android/server/compat/overrides/RawOverrideValue;->setMaxVersionCode(J)V
 HSPLcom/android/server/compat/overrides/RawOverrideValue;->setMinVersionCode(J)V
 HSPLcom/android/server/compat/overrides/RawOverrideValue;->setPackageName(Ljava/lang/String;)V
+HSPLcom/android/server/compat/overrides/RawOverrideValue;->write(Lcom/android/server/compat/overrides/XmlWriter;Ljava/lang/String;)V
 HSPLcom/android/server/compat/overrides/XmlParser;->read(Ljava/io/InputStream;)Lcom/android/server/compat/overrides/Overrides;
 HSPLcom/android/server/compat/overrides/XmlParser;->skip(Lorg/xmlpull/v1/XmlPullParser;)V
 HPLcom/android/server/connectivity/IpConnectivityMetrics$Impl;->logEvent(Landroid/net/ConnectivityMetricsEvent;)I
 HPLcom/android/server/connectivity/IpConnectivityMetrics;->append(Landroid/net/ConnectivityMetricsEvent;)I
 HPLcom/android/server/connectivity/IpConnectivityMetrics;->isRateLimited(Landroid/net/ConnectivityMetricsEvent;)Z
 HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->getTemplateMatchingNetworkIdentity(Landroid/net/NetworkCapabilities;)Landroid/net/NetworkIdentity;
-HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->getUserPolicyOpportunisticQuotaBytes()J
+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;
 HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->updateMultipathBudget()V
+HPLcom/android/server/connectivity/MultipathPolicyTracker;->getDefaultDailyMultipathQuotaBytes()J
+HSPLcom/android/server/connectivity/MultipathPolicyTracker;->updateAllMultipathBudgets()V
 HPLcom/android/server/connectivity/NetdEventListenerService$NetworkMetricsSnapshot;->collect(JLandroid/util/SparseArray;)Lcom/android/server/connectivity/NetdEventListenerService$NetworkMetricsSnapshot;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/net/metrics/NetworkMetrics;Landroid/net/metrics/NetworkMetrics;
 HPLcom/android/server/connectivity/NetdEventListenerService$TransportForNetIdNetworkCallback;->getNetworkCapabilities(I)Landroid/net/NetworkCapabilities;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/connectivity/NetdEventListenerService;->addWakeupEvent(Landroid/net/metrics/WakeupEvent;)V
@@ -2958,33 +3200,33 @@
 HPLcom/android/server/connectivity/NetdEventListenerService;->getMetricsForNetwork(JI)Landroid/net/metrics/NetworkMetrics;+]Lcom/android/server/connectivity/NetdEventListenerService;Lcom/android/server/connectivity/NetdEventListenerService;]Lcom/android/server/connectivity/NetdEventListenerService$TransportForNetIdNetworkCallback;Lcom/android/server/connectivity/NetdEventListenerService$TransportForNetIdNetworkCallback;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;
 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;
-HPLcom/android/server/connectivity/NetdEventListenerService;->onTcpSocketStatsEvent([I[I[I[I[I)V
-HPLcom/android/server/connectivity/NetdEventListenerService;->onWakeupEvent(Ljava/lang/String;III[BLjava/lang/String;Ljava/lang/String;IIJ)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
-HSPLcom/android/server/content/ContentService$ObserverCollector$Key;->hashCode()I
+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+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/connectivity/NetdEventListenerService;Lcom/android/server/connectivity/NetdEventListenerService;]Landroid/os/BatteryStatsInternal;Lcom/android/server/am/BatteryStatsService$LocalService;
+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
+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
 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;
+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;
 HSPLcom/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;
-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
+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;
+HPLcom/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
+HPLcom/android/server/content/ContentService$ObserverNode$ObserverEntry;->binderDied()V+]Lcom/android/server/content/ContentService$ObserverNode;Lcom/android/server/content/ContentService$ObserverNode;
 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
-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;->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;
 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;
+HSPLcom/android/server/content/ContentService$ObserverNode;->countUriSegments(Landroid/net/Uri;)I
 HSPLcom/android/server/content/ContentService$ObserverNode;->getUriSegment(Landroid/net/Uri;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;
+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;
 HSPLcom/android/server/content/ContentService;->-$$Nest$sfgetsObserverDeathDispatcher()Lcom/android/internal/os/BinderDeathDispatcher;
-HSPLcom/android/server/content/ContentService;->enforceCrossUserPermission(ILjava/lang/String;)V
-HPLcom/android/server/content/ContentService;->getCache(Ljava/lang/String;Landroid/net/Uri;I)Landroid/os/Bundle;
+HSPLcom/android/server/content/ContentService;->enforceCrossUserPermission(ILjava/lang/String;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
 HPLcom/android/server/content/ContentService;->getIsSyncableAsUser(Landroid/accounts/Account;Ljava/lang/String;I)I
 HPLcom/android/server/content/ContentService;->getMasterSyncAutomaticallyAsUser(I)Z
-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;
+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;
 HPLcom/android/server/content/ContentService;->getSyncAdapterPackageAsUser(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
 HSPLcom/android/server/content/ContentService;->getSyncAdapterPackagesForAuthorityAsUser(Ljava/lang/String;I)[Ljava/lang/String;
 HPLcom/android/server/content/ContentService;->getSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;I)Z
@@ -2993,11 +3235,12 @@
 HSPLcom/android/server/content/ContentService;->getSyncManager()Lcom/android/server/content/SyncManager;
 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
-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;
-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;->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;
+HPLcom/android/server/content/ContentService;->hasAuthorityAccess(Ljava/lang/String;II)Z
+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;
+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;
+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;
 HPLcom/android/server/content/ContentService;->syncAsUser(Landroid/content/SyncRequest;ILjava/lang/String;)V
-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;->unregisterContentObserver(Landroid/database/IContentObserver;)V+]Lcom/android/server/content/ContentService$ObserverNode;Lcom/android/server/content/ContentService$ObserverNode;
 HPLcom/android/server/content/SyncJobService;->callJobFinishedInner(IZLjava/lang/String;)V
 HPLcom/android/server/content/SyncJobService;->jobParametersToString(Landroid/app/job/JobParameters;)Ljava/lang/String;
 HPLcom/android/server/content/SyncJobService;->onStartJob(Landroid/app/job/JobParameters;)Z
@@ -3010,6 +3253,7 @@
 HPLcom/android/server/content/SyncManager$ActiveSyncContext;->bindToSyncAdapter(Landroid/content/ComponentName;I)Z
 HPLcom/android/server/content/SyncManager$ActiveSyncContext;->close()V
 HPLcom/android/server/content/SyncManager$ActiveSyncContext;->onFinished(Landroid/content/SyncResult;)V
+HPLcom/android/server/content/SyncManager$ActiveSyncContext;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)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
 HPLcom/android/server/content/SyncManager$SyncHandler;->dispatchSyncOperation(Lcom/android/server/content/SyncOperation;)Z
@@ -3017,31 +3261,33 @@
 HPLcom/android/server/content/SyncManager$SyncHandler;->handleSyncMessage(Landroid/os/Message;)V
 HPLcom/android/server/content/SyncManager$SyncHandler;->runBoundToAdapterH(Lcom/android/server/content/SyncManager$ActiveSyncContext;Landroid/os/IBinder;)V
 HPLcom/android/server/content/SyncManager$SyncHandler;->runSyncFinishedOrCanceledH(Landroid/content/SyncResult;Lcom/android/server/content/SyncManager$ActiveSyncContext;)V
-HPLcom/android/server/content/SyncManager$SyncHandler;->startSyncH(Lcom/android/server/content/SyncOperation;)V
-HPLcom/android/server/content/SyncManager$SyncHandler;->updateOrAddPeriodicSyncH(Lcom/android/server/content/SyncStorageEngine$EndPoint;JJLandroid/os/Bundle;)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->startSyncH(Lcom/android/server/content/SyncOperation;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/content/SyncManager$SyncHandler;Lcom/android/server/content/SyncManager$SyncHandler;
+HPLcom/android/server/content/SyncManager$SyncHandler;->updateOrAddPeriodicSyncH(Lcom/android/server/content/SyncStorageEngine$EndPoint;JJLandroid/os/Bundle;)V+]Landroid/content/SyncAdaptersCache;Landroid/content/SyncAdaptersCache;]Landroid/content/SyncAdapterType;Landroid/content/SyncAdapterType;]Lcom/android/server/content/SyncStorageEngine$EndPoint;Lcom/android/server/content/SyncStorageEngine$EndPoint;]Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/content/SyncLogger;Lcom/android/server/content/SyncLogger$RotatingFileLogger;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/content/SyncManager$SyncHandler;Lcom/android/server/content/SyncManager$SyncHandler;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;
 HPLcom/android/server/content/SyncManager$SyncTimeTracker;->update()V
 HPLcom/android/server/content/SyncManager;->-$$Nest$fgetmSyncManagerWakeLock(Lcom/android/server/content/SyncManager;)Landroid/os/PowerManager$WakeLock;
-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;->computeSyncable(Landroid/accounts/Account;ILjava/lang/String;Z)I
 HPLcom/android/server/content/SyncManager;->formatDurationHMS(Ljava/lang/StringBuilder;J)Ljava/lang/StringBuilder;
 HPLcom/android/server/content/SyncManager;->getAdapterBindIntent(Landroid/content/Context;Landroid/content/ComponentName;I)Landroid/content/Intent;
-HPLcom/android/server/content/SyncManager;->getAllPendingSyncs()Ljava/util/List;+]Landroid/app/job/JobScheduler;Landroid/app/JobSchedulerImpl;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Ljava/util/List;Ljava/util/ArrayList;
-HPLcom/android/server/content/SyncManager;->getIsSyncable(Landroid/accounts/Account;ILjava/lang/String;)I+]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;
+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;
+HPLcom/android/server/content/SyncManager;->getIsSyncable(Landroid/accounts/Account;ILjava/lang/String;)I
 HPLcom/android/server/content/SyncManager;->getSyncAdapterPackageAsUser(Ljava/lang/String;Ljava/lang/String;II)Ljava/lang/String;
-HSPLcom/android/server/content/SyncManager;->getSyncAdapterPackagesForAuthorityAsUser(Ljava/lang/String;II)[Ljava/lang/String;
+HSPLcom/android/server/content/SyncManager;->getSyncAdapterPackagesForAuthorityAsUser(Ljava/lang/String;II)[Ljava/lang/String;+]Landroid/content/SyncAdaptersCache;Landroid/content/SyncAdaptersCache;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HPLcom/android/server/content/SyncManager;->isContactSharingAllowedForCloneProfile()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;->postMonitorSyncProgressMessage(Lcom/android/server/content/SyncManager$ActiveSyncContext;)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;->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;
 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;
-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;
-HPLcom/android/server/content/SyncManager;->scheduleSyncOperationH(Lcom/android/server/content/SyncOperation;J)V+]Landroid/app/job/JobScheduler;Landroid/app/JobSchedulerImpl;]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;]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;]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Lcom/android/server/content/SyncManagerConstants;Lcom/android/server/content/SyncManagerConstants;
-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;
+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;]Lcom/android/server/content/SyncLogger;Lcom/android/server/content/SyncLogger$RotatingFileLogger;]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/accounts/AccountManagerInternal;Lcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;
+HPLcom/android/server/content/SyncManager;->scheduleSyncOperationH(Lcom/android/server/content/SyncOperation;J)V+]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;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+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;
 HPLcom/android/server/content/SyncManager;->setDelayUntilTime(Lcom/android/server/content/SyncStorageEngine$EndPoint;J)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;
 HPLcom/android/server/content/SyncOperation;->dump(Landroid/content/pm/PackageManager;ZLcom/android/server/content/SyncAdapterStateFetcher;Z)Ljava/lang/String;
-HPLcom/android/server/content/SyncOperation;->extrasToStringBuilder(Landroid/os/Bundle;Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
-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;
+HPLcom/android/server/content/SyncOperation;->extrasToStringBuilder(Landroid/os/Bundle;Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Bundle;Landroid/os/Bundle;
+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;
 HPLcom/android/server/content/SyncOperation;->toEventLog(I)[Ljava/lang/Object;
-HPLcom/android/server/content/SyncOperation;->toJobInfoExtras()Landroid/os/PersistableBundle;
+HPLcom/android/server/content/SyncOperation;->toJobInfoExtras()Landroid/os/PersistableBundle;+]Landroid/os/PersistableBundle;Landroid/os/PersistableBundle;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HPLcom/android/server/content/SyncOperation;->toKey()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/content/SyncOperation;->wakeLockName()Ljava/lang/String;
 HSPLcom/android/server/content/SyncStorageEngine$EndPoint;-><init>(Landroid/accounts/Account;Ljava/lang/String;I)V
@@ -3050,13 +3296,17 @@
 HPLcom/android/server/content/SyncStorageEngine;->addActiveSync(Lcom/android/server/content/SyncManager$ActiveSyncContext;)Landroid/content/SyncInfo;
 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;->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+]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/content/SyncStorageEngine;->getCurrentDayLocked()I
+HPLcom/android/server/content/SyncStorageEngine;->getDelayUntilTime(Lcom/android/server/content/SyncStorageEngine$EndPoint;)J
+HPLcom/android/server/content/SyncStorageEngine;->getIsSyncable(Landroid/accounts/Account;ILjava/lang/String;)I
+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;
-HPLcom/android/server/content/SyncStorageEngine;->getSyncAutomatically(Landroid/accounts/Account;ILjava/lang/String;)Z+]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;
+HPLcom/android/server/content/SyncStorageEngine;->getSyncAutomatically(Landroid/accounts/Account;ILjava/lang/String;)Z
 HPLcom/android/server/content/SyncStorageEngine;->insertStartSyncEvent(Lcom/android/server/content/SyncOperation;J)J
+HPLcom/android/server/content/SyncStorageEngine;->markPending(Lcom/android/server/content/SyncStorageEngine$EndPoint;Z)V
+HPLcom/android/server/content/SyncStorageEngine;->removeActiveSync(Landroid/content/SyncInfo;I)V
 HPLcom/android/server/content/SyncStorageEngine;->reportChange(ILcom/android/server/content/SyncStorageEngine$EndPoint;)V
-HPLcom/android/server/content/SyncStorageEngine;->reportChange(ILjava/lang/String;I)V+]Landroid/content/ISyncStatusObserver;Landroid/content/ISyncStatusObserver$Stub$Proxy;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HPLcom/android/server/content/SyncStorageEngine;->reportChange(ILjava/lang/String;I)V+]Ljava/lang/Long;Ljava/lang/Long;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/content/SyncStorageEngine;->stopSyncEvent(JJLjava/lang/String;JJLjava/lang/String;I)V+]Landroid/content/SyncStatusInfo;Landroid/content/SyncStatusInfo;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Handler;Lcom/android/server/content/SyncStorageEngine$MyHandler;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 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;->writeStatusStatsLocked(Landroid/util/proto/ProtoOutputStream;Landroid/content/SyncStatusInfo$Stats;)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
@@ -3065,16 +3315,41 @@
 HPLcom/android/server/contentcapture/ContentCaptureManagerService$DataShareCallbackDelegate;->accept(Landroid/service/contentcapture/IDataShareReadAdapter;)V
 HPLcom/android/server/contentcapture/ContentCaptureManagerService$DataShareCallbackDelegate;->enforceDataSharingTtl(Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/service/contentcapture/IDataShareReadAdapter;)V
 HPLcom/android/server/contentcapture/ContentCaptureManagerService$DataShareCallbackDelegate;->lambda$accept$0(Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/service/contentcapture/IDataShareReadAdapter;)V
-HSPLcom/android/server/contentcapture/ContentCaptureManagerService$GlobalContentCaptureOptions;->getOptions(ILjava/lang/String;)Landroid/content/ContentCaptureOptions;
+HSPLcom/android/server/contentcapture/ContentCaptureManagerService$GlobalContentCaptureOptions;->getOptions(ILjava/lang/String;)Landroid/content/ContentCaptureOptions;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/infra/GlobalWhitelistState;Lcom/android/server/contentcapture/ContentCaptureManagerService$GlobalContentCaptureOptions;
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;->getOptionsForPackage(ILjava/lang/String;)Landroid/content/ContentCaptureOptions;
-HSPLcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;->notifyActivityEvent(ILandroid/content/ComponentName;ILandroid/app/assist/ActivityId;)V
+HPLcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;->notifyActivityEvent(ILandroid/content/ComponentName;ILandroid/app/assist/ActivityId;)V
 HPLcom/android/server/contentcapture/ContentCaptureMetricsLogger;->writeSessionFlush(ILandroid/content/ComponentName;Landroid/service/contentcapture/FlushMetrics;Landroid/content/ContentCaptureOptions;I)V
 HPLcom/android/server/contentcapture/ContentCapturePerUserService$ContentCaptureServiceRemoteCallback;->setContentCaptureWhitelist(Ljava/util/List;Ljava/util/List;)V
 HPLcom/android/server/contentcapture/ContentCapturePerUserService$ContentCaptureServiceRemoteCallback;->updateContentCaptureOptions(Landroid/util/ArraySet;)V
 HPLcom/android/server/contentcapture/ContentCapturePerUserService$ContentCaptureServiceRemoteCallback;->writeSessionFlush(ILandroid/content/ComponentName;Landroid/service/contentcapture/FlushMetrics;Landroid/content/ContentCaptureOptions;I)V+]Lcom/android/server/infra/AbstractPerUserSystemService;Lcom/android/server/contentcapture/ContentCapturePerUserService;
 HPLcom/android/server/contentcapture/ContentCapturePerUserService;->onActivityEventLocked(Landroid/app/assist/ActivityId;Landroid/content/ComponentName;I)V
 HPLcom/android/server/contentcapture/ContentCapturePerUserService;->startSessionLocked(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/content/pm/ActivityPresentationInfo;IIILcom/android/internal/os/IResultReceiver;)V
+HPLcom/android/server/contentcapture/RemoteContentCaptureService$$ExternalSyntheticLambda5;-><init>(Landroid/service/contentcapture/ActivityEvent;)V
+HPLcom/android/server/contentcapture/RemoteContentCaptureService$$ExternalSyntheticLambda5;->run(Landroid/os/IInterface;)V
 HPLcom/android/server/contentcapture/RemoteContentCaptureService;->onActivityLifecycleEvent(Landroid/service/contentcapture/ActivityEvent;)V
+HSPLcom/android/server/cpu/CpuAvailabilityInfo;-><init>(IJIIJ)V
+HSPLcom/android/server/cpu/CpuInfoReader$CpuInfo;-><init>(IIZJJJJLcom/android/server/cpu/CpuInfoReader$CpuUsageStats;)V
+HSPLcom/android/server/cpu/CpuInfoReader$CpuInfo;->computeNormalizedAvailableCpuFreqKHz()J+]Lcom/android/server/cpu/CpuInfoReader$CpuUsageStats;Lcom/android/server/cpu/CpuInfoReader$CpuUsageStats;
+HSPLcom/android/server/cpu/CpuInfoReader$CpuUsageStats;-><init>(JJJJJJJJJJ)V
+HPLcom/android/server/cpu/CpuInfoReader$CpuUsageStats;->delta(Lcom/android/server/cpu/CpuInfoReader$CpuUsageStats;)Lcom/android/server/cpu/CpuInfoReader$CpuUsageStats;
+HPLcom/android/server/cpu/CpuInfoReader$CpuUsageStats;->diff(JJ)J
+HSPLcom/android/server/cpu/CpuInfoReader$CpuUsageStats;->getTotalTimeMillis()J
+HSPLcom/android/server/cpu/CpuInfoReader;->calculateAvgCpuFreq(Landroid/util/LongSparseLongArray;)J+]Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;
+HPLcom/android/server/cpu/CpuInfoReader;->calculateDeltaTimeInState(Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;)Landroid/util/LongSparseLongArray;+]Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;
+HSPLcom/android/server/cpu/CpuInfoReader;->clockTickStrToMillis(Ljava/lang/String;)J
+HSPLcom/android/server/cpu/CpuInfoReader;->readAvgTimeInStateCpuFrequency(ILjava/io/File;)J
+HSPLcom/android/server/cpu/CpuInfoReader;->readCpuCores(Ljava/io/File;)Landroid/util/IntArray;+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/File;Ljava/io/File;]Landroid/util/IntArray;Landroid/util/IntArray;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/cpu/CpuInfoReader;->readCpuFreqKHz(Ljava/io/File;)J
+HSPLcom/android/server/cpu/CpuInfoReader;->readCpuInfos()Landroid/util/SparseArray;+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/IntArray;Landroid/util/IntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/cpu/CpuInfoReader;Lcom/android/server/cpu/CpuInfoReader;
+HSPLcom/android/server/cpu/CpuInfoReader;->readCumulativeCpuUsageStats()Landroid/util/SparseArray;+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/File;Ljava/io/File;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;
+HSPLcom/android/server/cpu/CpuInfoReader;->readDynamicPolicyInfo()Landroid/util/SparseArray;+]Landroid/util/IntArray;Landroid/util/IntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/cpu/CpuInfoReader;Lcom/android/server/cpu/CpuInfoReader;
+HSPLcom/android/server/cpu/CpuInfoReader;->readLatestCpuUsageStats()Landroid/util/SparseArray;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/cpu/CpuInfoReader;Lcom/android/server/cpu/CpuInfoReader;]Lcom/android/server/cpu/CpuInfoReader$CpuUsageStats;Lcom/android/server/cpu/CpuInfoReader$CpuUsageStats;
+HSPLcom/android/server/cpu/CpuInfoReader;->readTimeInState(Ljava/io/File;)Landroid/util/LongSparseLongArray;+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/File;Ljava/io/File;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;
+HSPLcom/android/server/cpu/CpuMonitorService$CpusetInfo$Snapshot;->appendCpuInfo(Lcom/android/server/cpu/CpuInfoReader$CpuInfo;)V+]Lcom/android/server/cpu/CpuInfoReader$CpuInfo;Lcom/android/server/cpu/CpuInfoReader$CpuInfo;
+HSPLcom/android/server/cpu/CpuMonitorService$CpusetInfo;->appendCpuInfo(JLcom/android/server/cpu/CpuInfoReader$CpuInfo;)V+]Lcom/android/server/cpu/CpuMonitorService$CpusetInfo$Snapshot;Lcom/android/server/cpu/CpuMonitorService$CpusetInfo$Snapshot;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
+HSPLcom/android/server/cpu/CpuMonitorService$CpusetInfo;->getCumulativeAvgAvailabilityPercent(J)I
+HSPLcom/android/server/cpu/CpuMonitorService$CpusetInfo;->populateLatestCpuAvailabilityInfo(JJ)V
+HSPLcom/android/server/cpu/CpuMonitorService;->monitorCpuStats()V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/cpu/CpuMonitorService;Lcom/android/server/cpu/CpuMonitorService;]Lcom/android/server/cpu/CpuMonitorService$CpusetInfo;Lcom/android/server/cpu/CpuMonitorService$CpusetInfo;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/cpu/CpuInfoReader;Lcom/android/server/cpu/CpuInfoReader;
 HSPLcom/android/server/criticalevents/CriticalEventLog$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/criticalevents/CriticalEventLog;)V
 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
@@ -3090,200 +3365,216 @@
 HSPLcom/android/server/criticalevents/CriticalEventLog;->getInstance()Lcom/android/server/criticalevents/CriticalEventLog;
 HSPLcom/android/server/criticalevents/CriticalEventLog;->init()V
 HSPLcom/android/server/criticalevents/CriticalEventLog;->lambda$new$0(Lcom/android/server/criticalevents/CriticalEventLog$ILogLoader;)V
-HSPLcom/android/server/devicepolicy/ActiveAdmin;->filterRestrictions(Landroid/os/Bundle;Ljava/util/function/Predicate;)Landroid/os/Bundle;
-HSPLcom/android/server/devicepolicy/ActiveAdmin;->getEffectiveRestrictions()Landroid/os/Bundle;
 HSPLcom/android/server/devicepolicy/ActiveAdmin;->getParentActiveAdmin()Lcom/android/server/devicepolicy/ActiveAdmin;
-HPLcom/android/server/devicepolicy/ActiveAdmin;->getUid()I
+HPLcom/android/server/devicepolicy/ActiveAdmin;->getUid()I+]Landroid/app/admin/DeviceAdminInfo;Landroid/app/admin/DeviceAdminInfo;
 HSPLcom/android/server/devicepolicy/ActiveAdmin;->getUserHandle()Landroid/os/UserHandle;
-HSPLcom/android/server/devicepolicy/ActiveAdmin;->hasParentActiveAdmin()Z
-HSPLcom/android/server/devicepolicy/ActiveAdmin;->removeDeprecatedRestrictions(Landroid/os/Bundle;)Landroid/os/Bundle;
-HPLcom/android/server/devicepolicy/ActiveAdmin;->writeAttributeValueToXml(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;I)V
-HPLcom/android/server/devicepolicy/ActiveAdmin;->writeAttributeValueToXml(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;J)V
-HPLcom/android/server/devicepolicy/ActiveAdmin;->writeAttributeValueToXml(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;Z)V
-HPLcom/android/server/devicepolicy/ActiveAdmin;->writeAttributeValuesToXml(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;Ljava/lang/String;Ljava/util/Collection;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Ljava/util/Collection;Ljava/util/ArrayList;,Landroid/util/ArraySet;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;,Landroid/util/MapCollections$ArrayIterator;
-HPLcom/android/server/devicepolicy/ActiveAdmin;->writePackagePolicy(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;Landroid/app/admin/PackagePolicy;)V
+HPLcom/android/server/devicepolicy/ActiveAdmin;->writeAttributeValuesToXml(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;Ljava/lang/String;Ljava/util/Collection;)V+]Ljava/util/Collection;Landroid/util/ArraySet;,Ljava/util/ArrayList;
 HPLcom/android/server/devicepolicy/ActiveAdmin;->writeToXml(Lcom/android/modules/utils/TypedXmlSerializer;)V
 HSPLcom/android/server/devicepolicy/CallerIdentity;-><init>(ILjava/lang/String;Landroid/content/ComponentName;)V
 HPLcom/android/server/devicepolicy/CallerIdentity;->getComponentName()Landroid/content/ComponentName;
 HPLcom/android/server/devicepolicy/CallerIdentity;->getPackageName()Ljava/lang/String;
 HSPLcom/android/server/devicepolicy/CallerIdentity;->getUid()I
 HSPLcom/android/server/devicepolicy/CallerIdentity;->getUserId()I
-HPLcom/android/server/devicepolicy/CallerIdentity;->hasAdminComponent()Z
-HSPLcom/android/server/devicepolicy/DeviceManagementResourcesProvider;->getDrawable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/app/admin/ParcelableResource;
-HSPLcom/android/server/devicepolicy/DeviceManagementResourcesProvider;->getDrawableForSourceLocked(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/app/admin/ParcelableResource;
+HSPLcom/android/server/devicepolicy/CallerIdentity;->hasAdminComponent()Z
+HSPLcom/android/server/devicepolicy/DeviceManagementResourcesProvider;->getDrawable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/app/admin/ParcelableResource;+]Ljava/util/Map;Ljava/util/HashMap;]Lcom/android/server/devicepolicy/DeviceManagementResourcesProvider;Lcom/android/server/devicepolicy/DeviceManagementResourcesProvider;
 HSPLcom/android/server/devicepolicy/DeviceManagementResourcesProvider;->getString(Ljava/lang/String;)Landroid/app/admin/ParcelableResource;
-HPLcom/android/server/devicepolicy/DevicePolicyData;->store(Lcom/android/server/devicepolicy/DevicePolicyData;Lcom/android/internal/util/JournaledFile;)Z+]Landroid/app/admin/DeviceAdminInfo;Landroid/app/admin/DeviceAdminInfo;]Lcom/android/internal/util/JournaledFile;Lcom/android/internal/util/JournaledFile;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/ArrayList$Itr;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;]Ljava/util/Set;Landroid/util/ArraySet;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda100;->getOrThrow()Ljava/lang/Object;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda131;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda131;->getOrThrow()Ljava/lang/Object;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda152;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda152;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda155;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;ILandroid/os/Bundle;)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda155;->runOrThrow()V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda156;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda156;->getOrThrow()Ljava/lang/Object;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda165;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda165;->getOrThrow()Ljava/lang/Object;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda169;->getOrThrow()Ljava/lang/Object;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda182;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/util/ArrayList;Ljava/util/function/Predicate;)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda182;->runOrThrow()V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda53;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda53;->getOrThrow()Ljava/lang/Object;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda71;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda71;->getOrThrow()Ljava/lang/Object;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda84;->getOrThrow()Ljava/lang/Object;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyCacheImpl;->isScreenCaptureAllowed(I)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyCacheImpl;->isScreenCaptureAllowedInPolicyEngine(I)Z+]Ljava/util/Set;Ljava/util/HashSet;
+HPLcom/android/server/devicepolicy/DevicePolicyData;->store(Lcom/android/server/devicepolicy/DevicePolicyData;Lcom/android/internal/util/JournaledFile;)Z
+HPLcom/android/server/devicepolicy/DevicePolicyEngine$DevicePoliciesReaderWriter;->writeEnforcingAdminsInner(Lcom/android/modules/utils/TypedXmlSerializer;)V
+HPLcom/android/server/devicepolicy/DevicePolicyEngine$DevicePoliciesReaderWriter;->writeGlobalPoliciesInner(Lcom/android/modules/utils/TypedXmlSerializer;)V
+HPLcom/android/server/devicepolicy/DevicePolicyEngine$DevicePoliciesReaderWriter;->writeLocalPoliciesInner(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/app/admin/PolicyKey;Landroid/app/admin/PackagePolicyKey;,Landroid/app/admin/UserRestrictionPolicyKey;,Landroid/app/admin/NoArgsPolicyKey;]Lcom/android/server/devicepolicy/PolicyState;Lcom/android/server/devicepolicy/PolicyState;]Ljava/util/Map;Ljava/util/HashMap;
+HPLcom/android/server/devicepolicy/DevicePolicyEngine$DevicePoliciesReaderWriter;->writeToFileLocked()V
+HPLcom/android/server/devicepolicy/DevicePolicyEngine;->hasLocalPolicyLocked(Lcom/android/server/devicepolicy/PolicyDefinition;I)Z
+HPLcom/android/server/devicepolicy/DevicePolicyEngine;->lambda$sendPolicyResultToAdmin$2(Landroid/content/Intent;Lcom/android/server/devicepolicy/EnforcingAdmin;Lcom/android/server/devicepolicy/PolicyDefinition;II)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda132;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda136;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda136;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda157;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda157;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda161;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda161;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda171;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda171;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda176;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda55;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda55;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda88;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderClearCallingIdentity()J
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderGetCallingUid()I
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderRestoreCallingIdentity(J)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderWithCleanCallingIdentity(Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->binderWithCleanCallingIdentity(Lcom/android/internal/util/FunctionalUtils$ThrowingSupplier;)Ljava/lang/Object;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getPackageManager()Landroid/content/pm/PackageManager;+]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getPackageManager()Landroid/content/pm/PackageManager;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;->getPackageManagerLocal()Lcom/android/server/pm/PackageManagerLocal;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->getDevicePolicyCache()Landroid/app/admin/DevicePolicyCache;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isActiveDeviceOwner(I)Z
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isActiveProfileOwner(I)Z
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$0aUCYlOH_1ajHi1YJqQ8_3axFts(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/pm/UserInfo;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isActiveDeviceOwner(I)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isActiveProfileOwner(I)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$1f4M5-Id3Saxsn0OiCISPS4rsI0(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Landroid/content/pm/UserInfo;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$7oUvgrEd8uRb7B9HVh47jP5ni6s(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)Landroid/content/ComponentName;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$G8sud3EQzrgjdm0inlOPAde1zOE(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Ljava/lang/Boolean;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$KETGRhucn6qAOjjxifk0kzgSmhQ(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/Integer;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$Le7hNbY19LWAUNLg_5cYLVOM6Uk(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/util/ArrayList;Ljava/util/function/Predicate;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$RdQJ49_PpkD7MJxObb8U4_jewrc(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Lcom/android/server/devicepolicy/DevicePolicyData;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$glN_ZIfJA8ykagA4lfaw4ntbYMA(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/Integer;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$oeF_6eeY1gnuXuqBzMRw5UF9KQU(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Ljava/lang/Integer;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$jArf4A1hwpuybt7wnygi8wO_eOo(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)Landroid/content/ComponentName;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$jy5YPmD2b-pEiZmO3bxMrLfJJew(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Ljava/lang/Integer;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->addCrossProfileIntentFilter(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/IntentFilter;I)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->canManageUsers(Lcom/android/server/devicepolicy/CallerIdentity;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->canManageUsers(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkAdminCanSetRestriction(Lcom/android/server/devicepolicy/CallerIdentity;ZLjava/lang/String;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->ensureLocked()V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminUncheckedLocked(Landroid/content/ComponentName;I)Lcom/android/server/devicepolicy/ActiveAdmin;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdmins(I)Ljava/util/List;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminUncheckedLocked(Landroid/content/ComponentName;I)Lcom/android/server/devicepolicy/ActiveAdmin;+]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;
+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;
 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;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getBindDeviceAdminTargetUsers(Landroid/content/ComponentName;)Ljava/util/List;
 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;
 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;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;
 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;->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;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerOrProfileOwnerOfOrganizationOwnedDeviceLocked()Lcom/android/server/devicepolicy/ActiveAdmin;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDrawable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/app/admin/ParcelableResource;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getKeyguardDisabledFeatures(Landroid/content/ComponentName;IZ)I+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+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;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getEnforcingAdminForCaller(Landroid/content/ComponentName;Ljava/lang/String;)Lcom/android/server/devicepolicy/EnforcingAdmin;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getKeyguardDisabledFeatures(Landroid/content/ComponentName;IZ)I+]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getLockObject()Ljava/lang/Object;+]Lcom/android/internal/util/StatLogger;Lcom/android/internal/util/StatLogger;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMaximumTimeToLock(Landroid/content/ComponentName;IZ)J
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getOrganizationOwnedProfileUserId()I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getOrganizationNameForUser(I)Ljava/lang/CharSequence;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I+]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Ljava/lang/Integer;Ljava/lang/Integer;]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;->getPermissionGrantStateForUser(Ljava/lang/String;Ljava/lang/String;Lcom/android/server/devicepolicy/CallerIdentity;I)I+]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;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPolicyFileDirectory(I)Ljava/io/File;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPermissionGrantStateForUser(Ljava/lang/String;Ljava/lang/String;Lcom/android/server/devicepolicy/CallerIdentity;I)I+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/PackageManagerLocal$UnfilteredSnapshot;Lcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl;]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/pm/PackageManagerLocal;Lcom/android/server/pm/local/PackageManagerLocalImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerAdminLocked(I)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;->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(I)Lcom/android/server/devicepolicy/ActiveAdmin;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerOfOrganizationOwnedDeviceLocked()Lcom/android/server/devicepolicy/ActiveAdmin;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerLocked(I)Lcom/android/server/devicepolicy/ActiveAdmin;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerOfOrganizationOwnedDeviceLocked()Lcom/android/server/devicepolicy/ActiveAdmin;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerOrDeviceOwnerSupervisionComponent(Landroid/os/UserHandle;)Landroid/content/ComponentName;
 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;->getString(Ljava/lang/String;)Landroid/app/admin/ParcelableResource;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getTargetSdk(Ljava/lang/String;I)I
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserData(I)Lcom/android/server/devicepolicy/DevicePolicyData;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserDataUnchecked(I)Lcom/android/server/devicepolicy/DevicePolicyData;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserDataUnchecked(I)Lcom/android/server/devicepolicy/DevicePolicyData;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserInfo(I)Landroid/content/pm/UserInfo;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getWifiSsidPolicy(Ljava/lang/String;)Landroid/app/admin/WifiSsidPolicy;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getWifiSsidPolicy(Ljava/lang/String;)Landroid/app/admin/WifiSsidPolicy;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasCallingOrSelfPermission(Ljava/lang/String;)Z+]Landroid/content/Context;Landroid/app/ContextImpl;
 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;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasFullCrossUsersPermission(Lcom/android/server/devicepolicy/CallerIdentity;I)Z
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isAdminActive(Landroid/content/ComponentName;I)Z
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCallingFromPackage(Ljava/lang/String;I)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;
-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;->isDevicePolicyEngineFlagEnabled()Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasFullCrossUsersPermission(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;->isAdminActive(Landroid/content/ComponentName;I)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCallingFromPackage(Ljava/lang/String;I)Z+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/PackageManagerLocal$UnfilteredSnapshot;Lcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/PackageManagerLocal;Lcom/android/server/pm/local/PackageManagerLocalImpl;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
+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;
+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;
 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;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isHeadlessFlagEnabled()Z
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isManagedProfile(I)Z
+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
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isNotificationListenerServicePermitted(Ljava/lang/String;I)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isPackageSuspended(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]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;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isPermissionCheckFlagEnabled()Z
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileOwner(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isPolicyEngineForFinanceFlagEnabled()Z
+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
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSecondaryLockscreenEnabled(Landroid/os/UserHandle;)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;
 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;->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;]Landroid/content/ComponentName;Landroid/content/ComponentName;]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;->isUidProfileOwnerLocked(I)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUnicornFlagEnabled()Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUninstallBlocked(Ljava/lang/String;)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getActiveAdminsForLockscreenPoliciesLocked$16(Landroid/content/pm/UserInfo;)Z
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getActiveAdminsForUserAndItsManagedProfilesLocked$19(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$$ExternalSyntheticLambda152;,Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda38;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPermissionGrantState$119(Ljava/lang/String;Ljava/lang/String;Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/Integer;+]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;->lambda$getProfileOwnerOfOrganizationOwnedDeviceLocked$77()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$80(I)Ljava/lang/Integer;+]Landroid/os/UserManager;Landroid/os/UserManager;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getUserDataUnchecked$2(I)Lcom/android/server/devicepolicy/DevicePolicyData;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getUserInfo$35(I)Landroid/content/pm/UserInfo;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isCallingFromPackage$154(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;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isProfileOwner$67(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;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getActiveAdminsForUserAndItsManagedProfilesLocked$19(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$$ExternalSyntheticLambda157;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPermissionGrantState$128(Ljava/lang/String;Ljava/lang/String;Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/Integer;+]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;->lambda$getProfileOwnerOfOrganizationOwnedDeviceLocked$80()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;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getProfileParentId$83(I)Ljava/lang/Integer;+]Landroid/os/UserManager;Landroid/os/UserManager;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getString$187(Ljava/lang/String;)Landroid/app/admin/ParcelableResource;
+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$35(I)Landroid/content/pm/UserInfo;+]Landroid/os/UserManager;Landroid/os/UserManager;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isProfileOwner$70(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;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isSeparateProfileChallengeEnabled$21(I)Ljava/lang/Boolean;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$sendChangedNotification$5(Landroid/content/Intent;ILandroid/os/Bundle;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->logUserRestrictionCall(Ljava/lang/String;ZZLcom/android/server/devicepolicy/CallerIdentity;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->makeJournaledFile(ILjava/lang/String;)Lcom/android/internal/util/JournaledFile;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->packageHasActiveAdmins(Ljava/lang/String;I)Z
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->pushUserRestrictions(I)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->saveSettingsLocked(I)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendChangedNotification(I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setBackwardCompatibleUserRestriction(Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/EnforcingAdmin;Ljava/lang/String;ZZ)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setUserRestriction(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;ZZ)V
+HSPLcom/android/server/devicepolicy/EnforcingAdmin;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Ljava/util/Set;ILcom/android/server/devicepolicy/ActiveAdmin;)V
+HSPLcom/android/server/devicepolicy/EnforcingAdmin;->createEnterpriseEnforcingAdmin(Landroid/content/ComponentName;ILcom/android/server/devicepolicy/ActiveAdmin;)Lcom/android/server/devicepolicy/EnforcingAdmin;
+HPLcom/android/server/devicepolicy/EnforcingAdmin;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/server/devicepolicy/EnforcingAdmin;->getAuthorities()Ljava/util/Set;
+HSPLcom/android/server/devicepolicy/EnforcingAdmin;->hashCode()I+]Lcom/android/server/devicepolicy/EnforcingAdmin;Lcom/android/server/devicepolicy/EnforcingAdmin;
+HPLcom/android/server/devicepolicy/EnforcingAdmin;->saveToXml(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Lcom/android/server/devicepolicy/EnforcingAdmin;Lcom/android/server/devicepolicy/EnforcingAdmin;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HSPLcom/android/server/devicepolicy/Owners;->getDeviceOwnerComponent()Landroid/content/ComponentName;
 HSPLcom/android/server/devicepolicy/Owners;->getProfileOwnerComponent(I)Landroid/content/ComponentName;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/devicepolicy/Owners;->hasDeviceOwner()Z
 HSPLcom/android/server/devicepolicy/Owners;->isProfileOwnerOfOrganizationOwnedDevice(I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HPLcom/android/server/devicepolicy/PolicyDefinition;->getPolicyDefinitionForUserRestriction(Ljava/lang/String;)Lcom/android/server/devicepolicy/PolicyDefinition;
+HPLcom/android/server/devicepolicy/PolicyDefinition;->savePolicyValueToXml(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/Object;)V
+HPLcom/android/server/devicepolicy/PolicyState;->saveToXml(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Lcom/android/server/devicepolicy/EnforcingAdmin;Lcom/android/server/devicepolicy/EnforcingAdmin;]Lcom/android/server/devicepolicy/PolicyDefinition;Lcom/android/server/devicepolicy/PolicyDefinition;]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Landroid/app/admin/PolicyValue;Landroid/app/admin/ComponentNamePolicyValue;,Landroid/app/admin/LockTaskPolicy;,Landroid/app/admin/StringSetPolicyValue;,Landroid/app/admin/BooleanPolicyValue;
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$$ExternalSyntheticLambda0;->elapsedTimeMillis()J
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;->getOrCreateDayStats(Ljava/util/Deque;Ljava/time/LocalDate;)Landroid/hardware/display/AmbientBrightnessDayStats;+]Ljava/util/Deque;Ljava/util/ArrayDeque;]Ljava/time/LocalDate;Ljava/time/LocalDate;]Landroid/hardware/display/AmbientBrightnessDayStats;Landroid/hardware/display/AmbientBrightnessDayStats;
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;->getOrCreateUserStats(Ljava/util/Map;I)Ljava/util/Deque;+]Ljava/util/Map;Ljava/util/HashMap;
-HSPLcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;->log(ILjava/time/LocalDate;FF)V
+HSPLcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;->log(ILjava/time/LocalDate;FF)V+]Landroid/hardware/display/AmbientBrightnessDayStats;Landroid/hardware/display/AmbientBrightnessDayStats;]Lcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;Lcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Injector;->elapsedRealtimeMillis()J
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Injector;->getLocalDate()Ljava/time/LocalDate;
+HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Timer;->isRunning()Z
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Timer;->reset()V
-HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Timer;->start()V
-HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Timer;->totalDurationSec()F
+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+]Lcom/android/server/display/AmbientBrightnessStatsTracker$Clock;Lcom/android/server/display/AmbientBrightnessStatsTracker$$ExternalSyntheticLambda0;
+HSPLcom/android/server/display/AmbientBrightnessStatsTracker;->$r8$lambda$OIIV5xqf-PRxPN2e6I0m_5ycuIo(Lcom/android/server/display/AmbientBrightnessStatsTracker;)J
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker;->add(IF)V+]Lcom/android/server/display/AmbientBrightnessStatsTracker$Injector;Lcom/android/server/display/AmbientBrightnessStatsTracker$Injector;]Lcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;Lcom/android/server/display/AmbientBrightnessStatsTracker$AmbientBrightnessStats;]Lcom/android/server/display/AmbientBrightnessStatsTracker$Timer;Lcom/android/server/display/AmbientBrightnessStatsTracker$Timer;
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker;->lambda$new$0()J+]Lcom/android/server/display/AmbientBrightnessStatsTracker$Injector;Lcom/android/server/display/AmbientBrightnessStatsTracker$Injector;
 HPLcom/android/server/display/AutomaticBrightnessController$1;->run()V
 HPLcom/android/server/display/AutomaticBrightnessController$2;->onSensorChanged(Landroid/hardware/SensorEvent;)V+]Lcom/android/server/display/AutomaticBrightnessController$Clock;Lcom/android/server/display/AutomaticBrightnessController$Injector$$ExternalSyntheticLambda0;
-HSPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->getAllLuxValues()[F
-HSPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->getAllTimestamps()[J
+HPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->getAllLuxValues()[F
+HPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->getAllTimestamps()[J
 HPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->getLux(I)F+]Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;
 HPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->getTime(I)J+]Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;
 HPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->offsetOf(I)I
 HPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->prune(J)V
 HPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->push(JF)V
 HPLcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;->size()I
+HPLcom/android/server/display/AutomaticBrightnessController$AutomaticBrightnessHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/display/AutomaticBrightnessController$Injector$$ExternalSyntheticLambda0;->uptimeMillis()J
+HPLcom/android/server/display/AutomaticBrightnessController;->-$$Nest$fgetmClock(Lcom/android/server/display/AutomaticBrightnessController;)Lcom/android/server/display/AutomaticBrightnessController$Clock;
+HPLcom/android/server/display/AutomaticBrightnessController;->-$$Nest$fgetmLightSensorEnabled(Lcom/android/server/display/AutomaticBrightnessController;)Z
 HPLcom/android/server/display/AutomaticBrightnessController;->applyLightSensorMeasurement(JF)V+]Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;
 HPLcom/android/server/display/AutomaticBrightnessController;->calculateAmbientLux(JJ)F+]Lcom/android/server/display/AutomaticBrightnessController;Lcom/android/server/display/AutomaticBrightnessController;]Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;
+HPLcom/android/server/display/AutomaticBrightnessController;->calculateWeight(JJ)F
 HPLcom/android/server/display/AutomaticBrightnessController;->clampScreenBrightness(F)F
 HSPLcom/android/server/display/AutomaticBrightnessController;->configure(ILandroid/hardware/display/BrightnessConfiguration;FZFZIZ)V
+HSPLcom/android/server/display/AutomaticBrightnessController;->convertToAdjustedNits(F)F
 HPLcom/android/server/display/AutomaticBrightnessController;->getAutomaticScreenBrightness(Lcom/android/server/display/brightness/BrightnessEvent;)F
+HPLcom/android/server/display/AutomaticBrightnessController;->getAutomaticScreenBrightnessAdjustment()F
 HPLcom/android/server/display/AutomaticBrightnessController;->handleLightSensorEvent(JF)V+]Lcom/android/server/display/AutomaticBrightnessController;Lcom/android/server/display/AutomaticBrightnessController;]Landroid/os/Handler;Lcom/android/server/display/AutomaticBrightnessController$AutomaticBrightnessHandler;]Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;
 HSPLcom/android/server/display/AutomaticBrightnessController;->hasUserDataPoints()Z
-HSPLcom/android/server/display/AutomaticBrightnessController;->isDefaultConfig()Z
+HPLcom/android/server/display/AutomaticBrightnessController;->isDefaultConfig()Z
 HSPLcom/android/server/display/AutomaticBrightnessController;->isInIdleMode()Z
 HPLcom/android/server/display/AutomaticBrightnessController;->nextAmbientLightBrighteningTransition(J)J+]Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;
 HPLcom/android/server/display/AutomaticBrightnessController;->nextAmbientLightDarkeningTransition(J)J+]Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;
+HPLcom/android/server/display/AutomaticBrightnessController;->setAmbientLux(F)V
+HSPLcom/android/server/display/AutomaticBrightnessController;->setBrightnessConfiguration(Landroid/hardware/display/BrightnessConfiguration;Z)Z
+HSPLcom/android/server/display/AutomaticBrightnessController;->setDisplayPolicy(I)Z
 HSPLcom/android/server/display/AutomaticBrightnessController;->setLightSensorEnabled(Z)Z
+HPLcom/android/server/display/AutomaticBrightnessController;->updateAmbientLux()V+]Lcom/android/server/display/AutomaticBrightnessController;Lcom/android/server/display/AutomaticBrightnessController;]Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;Lcom/android/server/display/AutomaticBrightnessController$AmbientLightRingBuffer;]Lcom/android/server/display/AutomaticBrightnessController$Clock;Lcom/android/server/display/AutomaticBrightnessController$Injector$$ExternalSyntheticLambda0;
 HPLcom/android/server/display/AutomaticBrightnessController;->updateAmbientLux(J)V+]Lcom/android/server/display/AutomaticBrightnessController;Lcom/android/server/display/AutomaticBrightnessController;]Landroid/os/Handler;Lcom/android/server/display/AutomaticBrightnessController$AutomaticBrightnessHandler;
 HSPLcom/android/server/display/AutomaticBrightnessController;->updateAutoBrightness(ZZ)V
 HPLcom/android/server/display/AutomaticBrightnessController;->weightIntegral(J)F
-HSPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->convertToNits(F)F
-HSPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->isDefaultConfig()Z
+HSPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->convertToAdjustedNits(F)F
+HPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->getBrightness(FLjava/lang/String;I)F
+HSPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->isForIdleMode()Z
 HSPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->setBrightnessConfiguration(Landroid/hardware/display/BrightnessConfiguration;)Z
 HSPLcom/android/server/display/BrightnessSetting;->getBrightness()F
-HSPLcom/android/server/display/BrightnessTracker$BrightnessChangeValues;-><init>(FFZZJLjava/lang/String;[F[J)V
-HSPLcom/android/server/display/BrightnessTracker$Receiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/display/BrightnessSetting;->setBrightness(F)V
+HSPLcom/android/server/display/BrightnessThrottler;->getBrightnessCap()F
+HPLcom/android/server/display/BrightnessTracker$BrightnessChangeValues;-><init>(FFZZJLjava/lang/String;[F[J)V
+HPLcom/android/server/display/BrightnessTracker$Receiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/display/BrightnessTracker$SensorListener;->onSensorChanged(Landroid/hardware/SensorEvent;)V
 HSPLcom/android/server/display/BrightnessTracker$TrackerHandler;->handleMessage(Landroid/os/Message;)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;->notifyBrightnessChanged(FZFZZLjava/lang/String;[F[J)V
+HPLcom/android/server/display/BrightnessTracker;->batteryLevelChanged(II)V
+HPLcom/android/server/display/BrightnessTracker;->notifyBrightnessChanged(FZFZZLjava/lang/String;[F[J)V
 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;->setShouldCollectColorSample(Z)V
 HSPLcom/android/server/display/BrightnessUtils;->convertGammaToLinear(F)F
+HPLcom/android/server/display/ColorFade$NaturalSurfaceLayout;->onDisplayTransaction(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/display/ColorFade;->createSurfaceControl(Z)Z
+HPLcom/android/server/display/ColorFade;->draw(F)Z+]Lcom/android/server/display/ColorFade;Lcom/android/server/display/ColorFade;
 HPLcom/android/server/display/ColorFade;->drawFaded(FF)V
-HSPLcom/android/server/display/DensityMapping$$ExternalSyntheticLambda0;-><init>()V
-HSPLcom/android/server/display/DensityMapping$Entry;-><clinit>()V
-HSPLcom/android/server/display/DensityMapping$Entry;-><init>(III)V
-HSPLcom/android/server/display/DensityMapping;-><init>([Lcom/android/server/display/DensityMapping$Entry;)V
-HSPLcom/android/server/display/DensityMapping;->createByOwning([Lcom/android/server/display/DensityMapping$Entry;)Lcom/android/server/display/DensityMapping;
+HPLcom/android/server/display/ColorFade;->initGLShaders(Landroid/content/Context;)Z
+HPLcom/android/server/display/ColorFade;->setScreenshotTextureAndSetViewport(Landroid/window/ScreenCapture$ScreenshotHardwareBuffer;I)Z
 HSPLcom/android/server/display/DensityMapping;->getDensityForResolution(II)I
-HSPLcom/android/server/display/DensityMapping;->verifyDensityMapping([Lcom/android/server/display/DensityMapping$Entry;)V
 HSPLcom/android/server/display/DeviceStateToLayoutMap;-><clinit>()V
 HSPLcom/android/server/display/DeviceStateToLayoutMap;-><init>(Lcom/android/server/display/layout/DisplayIdProducer;)V
 HSPLcom/android/server/display/DeviceStateToLayoutMap;-><init>(Lcom/android/server/display/layout/DisplayIdProducer;Ljava/io/File;)V
@@ -3307,6 +3598,11 @@
 HSPLcom/android/server/display/DisplayAdapter;->registerLocked()V
 HSPLcom/android/server/display/DisplayAdapter;->sendDisplayDeviceEventLocked(Lcom/android/server/display/DisplayDevice;I)V
 HSPLcom/android/server/display/DisplayAdapter;->sendTraversalRequestLocked()V
+HSPLcom/android/server/display/DisplayBrightnessState$Builder;-><init>()V
+HSPLcom/android/server/display/DisplayBrightnessState$Builder;->build()Lcom/android/server/display/DisplayBrightnessState;
+HSPLcom/android/server/display/DisplayBrightnessState$Builder;->getDisplayBrightnessStrategyName()Ljava/lang/String;
+HSPLcom/android/server/display/DisplayBrightnessState;-><init>(Lcom/android/server/display/DisplayBrightnessState$Builder;)V
+HSPLcom/android/server/display/DisplayBrightnessState;->getDisplayBrightnessStrategyName()Ljava/lang/String;
 HSPLcom/android/server/display/DisplayControl;->getPhysicalDisplayIds()[J
 HSPLcom/android/server/display/DisplayControl;->getPhysicalDisplayToken(J)Landroid/os/IBinder;
 HSPLcom/android/server/display/DisplayDevice;-><clinit>()V
@@ -3317,11 +3613,11 @@
 HSPLcom/android/server/display/DisplayDevice;->setLayerStackLocked(Landroid/view/SurfaceControl$Transaction;II)V
 HSPLcom/android/server/display/DisplayDevice;->setProjectionLocked(Landroid/view/SurfaceControl$Transaction;ILandroid/graphics/Rect;Landroid/graphics/Rect;)V
 HSPLcom/android/server/display/DisplayDeviceConfig$1;-><clinit>()V
-HSPLcom/android/server/display/DisplayDeviceConfig$BrightnessThrottlingData$ThrottlingLevel;-><init>(IF)V
-HSPLcom/android/server/display/DisplayDeviceConfig$BrightnessThrottlingData;-><init>(Ljava/util/List;)V
-HSPLcom/android/server/display/DisplayDeviceConfig$BrightnessThrottlingData;->create(Ljava/util/List;)Lcom/android/server/display/DisplayDeviceConfig$BrightnessThrottlingData;
 HSPLcom/android/server/display/DisplayDeviceConfig$HighBrightnessModeData;-><init>()V
 HSPLcom/android/server/display/DisplayDeviceConfig$SensorData;-><init>()V
+HSPLcom/android/server/display/DisplayDeviceConfig$ThermalBrightnessThrottlingData$ThrottlingLevel;-><init>(IF)V
+HSPLcom/android/server/display/DisplayDeviceConfig$ThermalBrightnessThrottlingData;-><init>(Ljava/util/List;)V
+HSPLcom/android/server/display/DisplayDeviceConfig$ThermalBrightnessThrottlingData;->create(Ljava/util/List;)Lcom/android/server/display/DisplayDeviceConfig$ThermalBrightnessThrottlingData;
 HSPLcom/android/server/display/DisplayDeviceConfig;-><clinit>()V
 HSPLcom/android/server/display/DisplayDeviceConfig;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/display/DisplayDeviceConfig;->constrainNitsAndBacklightArrays()V
@@ -3347,16 +3643,13 @@
 HSPLcom/android/server/display/DisplayDeviceConfig;->getDensityMapping()Lcom/android/server/display/DensityMapping;
 HSPLcom/android/server/display/DisplayDeviceConfig;->getFirstExistingFile(Ljava/util/Collection;)Ljava/io/File;
 HSPLcom/android/server/display/DisplayDeviceConfig;->getFloatArray(Landroid/content/res/TypedArray;F)[F
-HSPLcom/android/server/display/DisplayDeviceConfig;->getHighAmbientBrightnessThresholds()[I
-HSPLcom/android/server/display/DisplayDeviceConfig;->getHighDisplayBrightnessThresholds()[I
-HSPLcom/android/server/display/DisplayDeviceConfig;->getLowAmbientBrightnessThresholds()[I
-HSPLcom/android/server/display/DisplayDeviceConfig;->getLowDisplayBrightnessThresholds()[I
 HSPLcom/android/server/display/DisplayDeviceConfig;->getLuxLevels([I)[F
 HSPLcom/android/server/display/DisplayDeviceConfig;->getName()Ljava/lang/String;
-HSPLcom/android/server/display/DisplayDeviceConfig;->getNitsFromBacklight(F)F+]Landroid/util/Spline;Landroid/util/Spline$MonotoneCubicSpline;
+HSPLcom/android/server/display/DisplayDeviceConfig;->getNitsFromBacklight(F)F
 HSPLcom/android/server/display/DisplayDeviceConfig;->getRefreshRange(Ljava/lang/String;)Landroid/view/SurfaceControl$RefreshRateRange;
-HSPLcom/android/server/display/DisplayDeviceConfig;->getRefreshRateThrottlingData(Ljava/lang/String;)Landroid/util/SparseArray;
+HSPLcom/android/server/display/DisplayDeviceConfig;->getThermalRefreshRateThrottlingData(Ljava/lang/String;)Landroid/util/SparseArray;
 HSPLcom/android/server/display/DisplayDeviceConfig;->hasQuirk(Ljava/lang/String;)Z
+HSPLcom/android/server/display/DisplayDeviceConfig;->hasSdrToHdrRatioSpline()Z
 HSPLcom/android/server/display/DisplayDeviceConfig;->initFromFile(Ljava/io/File;)Z
 HSPLcom/android/server/display/DisplayDeviceConfig;->isAllInRange([FFF)Z
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadAmbientBrightnessThresholds(Lcom/android/server/display/config/DisplayConfiguration;)V
@@ -3374,7 +3667,6 @@
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadBrightnessDefaultFromDdcXml(Lcom/android/server/display/config/DisplayConfiguration;)V
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadBrightnessMap(Lcom/android/server/display/config/DisplayConfiguration;)V
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadBrightnessRamps(Lcom/android/server/display/config/DisplayConfiguration;)V
-HSPLcom/android/server/display/DisplayDeviceConfig;->loadBrightnessThrottlingMaps(Lcom/android/server/display/config/ThermalThrottling;)V
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadConfigFromDirectory(Landroid/content/Context;Ljava/io/File;J)Lcom/android/server/display/DisplayDeviceConfig;
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadDefaultConfigurationXml(Landroid/content/Context;)Lcom/android/server/display/config/DisplayConfiguration;
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadDefaultRefreshRate(Lcom/android/server/display/config/RefreshRateConfigs;)V
@@ -3395,11 +3687,12 @@
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadProxSensorFromDdc(Lcom/android/server/display/config/DisplayConfiguration;)V
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadQuirks(Lcom/android/server/display/config/DisplayConfiguration;)V
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadRefreshRateSetting(Lcom/android/server/display/config/DisplayConfiguration;)V
-HSPLcom/android/server/display/DisplayDeviceConfig;->loadRefreshRateThermalThrottlingMap(Lcom/android/server/display/config/ThermalThrottling;)V
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadRefreshRateZoneProfiles(Lcom/android/server/display/config/RefreshRateConfigs;)V
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadScreenOffBrightnessSensorFromDdc(Lcom/android/server/display/config/DisplayConfiguration;)V
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadScreenOffBrightnessSensorValueToLuxFromDdc(Lcom/android/server/display/config/DisplayConfiguration;)V
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadSdrHdrRatioMap(Lcom/android/server/display/config/HighBrightnessMode;)Landroid/util/Spline;
+HSPLcom/android/server/display/DisplayDeviceConfig;->loadThermalBrightnessThrottlingMaps(Lcom/android/server/display/config/ThermalThrottling;)V
+HSPLcom/android/server/display/DisplayDeviceConfig;->loadThermalRefreshRateThrottlingMap(Lcom/android/server/display/config/ThermalThrottling;)V
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadThermalThrottlingConfig(Lcom/android/server/display/config/DisplayConfiguration;)V
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadUsiVersion(Lcom/android/server/display/config/DisplayConfiguration;)V
 HSPLcom/android/server/display/DisplayDeviceConfig;->rawBacklightToNits(IF)F
@@ -3421,7 +3714,7 @@
 HSPLcom/android/server/display/DisplayDeviceRepository;->handleDisplayDeviceChanged(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;->sendChangedEventLocked(Lcom/android/server/display/DisplayDevice;I)V
+HSPLcom/android/server/display/DisplayDeviceRepository;->sendChangedEventLocked(Lcom/android/server/display/DisplayDevice;I)V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/display/DisplayDeviceRepository$Listener;Lcom/android/server/display/LogicalDisplayMapper;
 HSPLcom/android/server/display/DisplayDeviceRepository;->sendEventLocked(Lcom/android/server/display/DisplayDevice;I)V
 HSPLcom/android/server/display/DisplayGroup;-><init>(I)V
 HSPLcom/android/server/display/DisplayGroup;->addDisplayLocked(Lcom/android/server/display/LogicalDisplay;)V
@@ -3433,25 +3726,29 @@
 HSPLcom/android/server/display/DisplayInfoProxy;-><init>(Landroid/view/DisplayInfo;)V
 HSPLcom/android/server/display/DisplayInfoProxy;->get()Landroid/view/DisplayInfo;
 HSPLcom/android/server/display/DisplayInfoProxy;->set(Landroid/view/DisplayInfo;)V
+HSPLcom/android/server/display/DisplayManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/display/DisplayManagerService;Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/display/DisplayManagerService$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/display/DisplayManagerService$1;-><init>(Lcom/android/server/display/DisplayManagerService;)V
 HSPLcom/android/server/display/DisplayManagerService$1;->requestDisplayState(IIFF)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;Lcom/android/server/power/PowerManagerService$1;
 HSPLcom/android/server/display/DisplayManagerService$2;-><init>(Lcom/android/server/display/DisplayManagerService;)V
+HPLcom/android/server/display/DisplayManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/display/DisplayManagerService$BinderService;-><init>(Lcom/android/server/display/DisplayManagerService;)V
 HSPLcom/android/server/display/DisplayManagerService$BinderService;->getBrightness(I)F
-HSPLcom/android/server/display/DisplayManagerService$BinderService;->getBrightnessInfo(I)Landroid/hardware/display/BrightnessInfo;
+HSPLcom/android/server/display/DisplayManagerService$BinderService;->getBrightnessInfo(I)Landroid/hardware/display/BrightnessInfo;+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/display/DisplayPowerControllerInterface;Lcom/android/server/display/DisplayPowerController2;
 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;
 HSPLcom/android/server/display/DisplayManagerService$BinderService;->getOverlaySupport()Landroid/hardware/OverlayProperties;
 HSPLcom/android/server/display/DisplayManagerService$BinderService;->getPreferredWideGamutColorSpaceId()I
+HSPLcom/android/server/display/DisplayManagerService$BinderService;->registerCallbackWithEventMask(Landroid/hardware/display/IDisplayManagerCallback;J)V
 HSPLcom/android/server/display/DisplayManagerService$BrightnessPair;-><init>(Lcom/android/server/display/DisplayManagerService;FF)V
-HSPLcom/android/server/display/DisplayManagerService$CallbackRecord;->notifyDisplayEventAsync(II)Z+]Lcom/android/server/display/DisplayManagerService$CallbackRecord;Lcom/android/server/display/DisplayManagerService$CallbackRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/hardware/display/IDisplayManagerCallback;Landroid/hardware/display/DisplayManagerGlobal$DisplayManagerCallback;,Landroid/hardware/display/IDisplayManagerCallback$Stub$Proxy;
+HSPLcom/android/server/display/DisplayManagerService$CallbackRecord;->notifyDisplayEventAsync(II)Z+]Lcom/android/server/display/DisplayManagerService$CallbackRecord;Lcom/android/server/display/DisplayManagerService$CallbackRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/display/DisplayManagerService$CallbackRecord;->shouldSendEvent(I)Z+]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;
 HSPLcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver;->$r8$lambda$VAymHqdqFXMbxcui3qgtRl7FL4g(Lcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver;Lcom/android/server/display/LogicalDisplay;)V
-HSPLcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver;->lambda$new$0(Lcom/android/server/display/LogicalDisplay;)V
+HSPLcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver;->lambda$new$0(Lcom/android/server/display/LogicalDisplay;)V+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Lcom/android/server/display/mode/DisplayModeDirector$DesiredDisplayModeSpecs;Lcom/android/server/display/mode/DisplayModeDirector$DesiredDisplayModeSpecs;]Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector;
 HSPLcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver;->onDesiredDisplayModeSpecsChanged()V+]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
 HSPLcom/android/server/display/DisplayManagerService$DisplayManagerHandler;-><init>(Lcom/android/server/display/DisplayManagerService;Landroid/os/Looper;)V
-HSPLcom/android/server/display/DisplayManagerService$DisplayManagerHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Lcom/android/server/input/InputManagerInternal;Lcom/android/server/input/InputManagerService$LocalService;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/hardware/display/DisplayViewport;Landroid/hardware/display/DisplayViewport;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/display/DisplayManagerService$DisplayManagerHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Lcom/android/server/input/InputManagerInternal;Lcom/android/server/input/InputManagerService$LocalService;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/hardware/display/DisplayViewport;Landroid/hardware/display/DisplayViewport;
 HSPLcom/android/server/display/DisplayManagerService$Injector;-><init>()V
 HSPLcom/android/server/display/DisplayManagerService$Injector;->getDefaultDisplayDelayTimeout()J
 HSPLcom/android/server/display/DisplayManagerService$Injector;->getLocalDisplayAdapter(Lcom/android/server/display/DisplayManagerService$SyncRoot;Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/display/DisplayAdapter$Listener;)Lcom/android/server/display/LocalDisplayAdapter;
@@ -3459,22 +3756,24 @@
 HSPLcom/android/server/display/DisplayManagerService$LocalService;-><init>(Lcom/android/server/display/DisplayManagerService;)V
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->getDisplayIdToMirror(I)I+]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;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->getDisplayInfo(I)Landroid/view/DisplayInfo;
+HPLcom/android/server/display/DisplayManagerService$LocalService;->getRefreshRateForDisplayAndSensor(ILjava/lang/String;Ljava/lang/String;)Landroid/view/SurfaceControl$RefreshRateRange;
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->getRefreshRateSwitchingType()I+]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->performTraversal(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
-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/DisplayPowerControllerInterface;Lcom/android/server/display/DisplayPowerController;,Lcom/android/server/display/DisplayPowerController2;]Lcom/android/server/display/DisplayGroup;Lcom/android/server/display/DisplayGroup;
-HSPLcom/android/server/display/DisplayManagerService$LocalService;->setDisplayProperties(IZFIFFZZZ)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/DisplayPowerControllerInterface;Lcom/android/server/display/DisplayPowerController2;]Lcom/android/server/display/DisplayGroup;Lcom/android/server/display/DisplayGroup;
+HSPLcom/android/server/display/DisplayManagerService$LocalService;->setDisplayProperties(IZFIFFZZZ)V+]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
 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
 HSPLcom/android/server/display/DisplayManagerService$LogicalDisplayListener;->onLogicalDisplayEventLocked(Lcom/android/server/display/LogicalDisplay;I)V
 HSPLcom/android/server/display/DisplayManagerService$LogicalDisplayListener;->onTraversalRequested()V
 HPLcom/android/server/display/DisplayManagerService$PendingCallback;->addDisplayEvent(II)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/display/DisplayManagerService$PendingCallback;->sendPendingDisplayEvent()V
+HPLcom/android/server/display/DisplayManagerService$PendingCallback;->sendPendingDisplayEvent()V+]Lcom/android/server/display/DisplayManagerService$CallbackRecord;Lcom/android/server/display/DisplayManagerService$CallbackRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/display/DisplayManagerService$SyncRoot;-><init>()V
 HSPLcom/android/server/display/DisplayManagerService$UidImportanceListener;-><init>(Lcom/android/server/display/DisplayManagerService;)V
 HSPLcom/android/server/display/DisplayManagerService$UidImportanceListener;-><init>(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService$UidImportanceListener-IA;)V
 HSPLcom/android/server/display/DisplayManagerService$UidImportanceListener;->onUidImportance(II)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/DisplayManagerService$PendingCallback;Lcom/android/server/display/DisplayManagerService$PendingCallback;
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmContext(Lcom/android/server/display/DisplayManagerService;)Landroid/content/Context;
+HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmDisplayModeDirector(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/mode/DisplayModeDirector;
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmDisplayPowerControllers(Lcom/android/server/display/DisplayManagerService;)Landroid/util/SparseArray;
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmDisplayStates(Lcom/android/server/display/DisplayManagerService;)Landroid/util/SparseIntArray;
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmLogicalDisplayMapper(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/LogicalDisplayMapper;
@@ -3483,15 +3782,14 @@
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$mdeliverDisplayGroupEvent(Lcom/android/server/display/DisplayManagerService;II)V
 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$mhandleLogicalDisplayAddedLocked(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/LogicalDisplay;)V
-HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$mhandleLogicalDisplayChangedLocked(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/LogicalDisplay;)V
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$mregisterDefaultDisplayAdapters(Lcom/android/server/display/DisplayManagerService;)V
+HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$mrequestDisplayStateInternal(Lcom/android/server/display/DisplayManagerService;IIFF)V
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$mscheduleTraversalLocked(Lcom/android/server/display/DisplayManagerService;Z)V
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$msendDisplayGroupEvent(Lcom/android/server/display/DisplayManagerService;II)V
-HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$msetDisplayPropertiesInternal(Lcom/android/server/display/DisplayManagerService;IZFIFFZZZ)V
 HSPLcom/android/server/display/DisplayManagerService;-><clinit>()V
 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
+HSPLcom/android/server/display/DisplayManagerService;->addDisplayPowerControllerLocked(Lcom/android/server/display/LogicalDisplay;)Lcom/android/server/display/DisplayPowerControllerInterface;
 HSPLcom/android/server/display/DisplayManagerService;->clampBrightness(IF)F
 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
@@ -3505,55 +3803,60 @@
 HSPLcom/android/server/display/DisplayManagerService;->getOverlaySupportInternal()Landroid/hardware/OverlayProperties;
 HSPLcom/android/server/display/DisplayManagerService;->getPreferredWideGamutColorSpaceIdInternal()I
 HSPLcom/android/server/display/DisplayManagerService;->getRefreshRateSwitchingTypeInternal()I+]Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector;
-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;
 HSPLcom/android/server/display/DisplayManagerService;->handleLogicalDisplayAddedLocked(Lcom/android/server/display/LogicalDisplay;)V
 HSPLcom/android/server/display/DisplayManagerService;->handleLogicalDisplayChangedLocked(Lcom/android/server/display/LogicalDisplay;)V
+HSPLcom/android/server/display/DisplayManagerService;->isMinimalPostProcessingAllowed()Z
 HSPLcom/android/server/display/DisplayManagerService;->isUidCached(I)Z
-HSPLcom/android/server/display/DisplayManagerService;->lambda$performTraversalLocked$10(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/display/LogicalDisplay;)V
 HSPLcom/android/server/display/DisplayManagerService;->loadStableDisplayValuesLocked()V
 HSPLcom/android/server/display/DisplayManagerService;->notifyDefaultDisplayDeviceUpdated(Lcom/android/server/display/LogicalDisplay;)V
 HSPLcom/android/server/display/DisplayManagerService;->onBootPhase(I)V
 HSPLcom/android/server/display/DisplayManagerService;->onStart()V
-HSPLcom/android/server/display/DisplayManagerService;->performTraversalInternal(Landroid/view/SurfaceControl$Transaction;)V+]Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;Lcom/android/server/display/ColorFade$NaturalSurfaceLayout;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
+HSPLcom/android/server/display/DisplayManagerService;->performTraversalInternal(Landroid/view/SurfaceControl$Transaction;)V+]Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;Lcom/android/server/display/ColorFade$NaturalSurfaceLayout;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
 HSPLcom/android/server/display/DisplayManagerService;->performTraversalLocked(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/display/DisplayManagerService;->populateViewportLocked(IILcom/android/server/display/DisplayDevice;Lcom/android/server/display/DisplayDeviceInfo;)V
 HSPLcom/android/server/display/DisplayManagerService;->recordStableDisplayStatsIfNeededLocked(Lcom/android/server/display/LogicalDisplay;)V
 HSPLcom/android/server/display/DisplayManagerService;->recordTopInsetLocked(Lcom/android/server/display/LogicalDisplay;)V
+HSPLcom/android/server/display/DisplayManagerService;->registerCallbackInternal(Landroid/hardware/display/IDisplayManagerCallback;IIJ)V
 HSPLcom/android/server/display/DisplayManagerService;->registerDefaultDisplayAdapters()V
 HSPLcom/android/server/display/DisplayManagerService;->registerDisplayAdapterLocked(Lcom/android/server/display/DisplayAdapter;)V
 HSPLcom/android/server/display/DisplayManagerService;->requestDisplayStateInternal(IIFF)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]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;]Ljava/lang/Runnable;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
 HSPLcom/android/server/display/DisplayManagerService;->scheduleTraversalLocked(Z)V
 HSPLcom/android/server/display/DisplayManagerService;->sendDisplayEventLocked(Lcom/android/server/display/LogicalDisplay;I)V
 HSPLcom/android/server/display/DisplayManagerService;->sendDisplayGroupEvent(II)V
-HSPLcom/android/server/display/DisplayManagerService;->setDisplayPropertiesInternal(IZFIFFZZZ)V+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Lcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;Lcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
-HSPLcom/android/server/display/DisplayManagerService;->updateDisplayStateLocked(Lcom/android/server/display/DisplayDevice;)Ljava/lang/Runnable;+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]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;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/display/DisplayManagerService;->setDisplayPropertiesInternal(IZFIFFZZZ)V+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Lcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;Lcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/display/DisplayManagerService;->updateDisplayStateLocked(Lcom/android/server/display/DisplayDevice;)Ljava/lang/Runnable;+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]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/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/display/DisplayManagerService;->updateViewportPowerStateLocked(Lcom/android/server/display/LogicalDisplay;)V
-HSPLcom/android/server/display/DisplayPowerController$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/display/DisplayPowerController;Lcom/android/server/display/DisplayDevice;Ljava/lang/String;Lcom/android/server/display/DisplayDeviceConfig;Ljava/lang/String;Landroid/os/IBinder;Lcom/android/server/display/DisplayDeviceInfo;Lcom/android/server/display/HighBrightnessModeMetadata;ZZ)V
-HSPLcom/android/server/display/DisplayPowerController$$ExternalSyntheticLambda2;->run()V
-HSPLcom/android/server/display/DisplayPowerController$6;->run()V
-HSPLcom/android/server/display/DisplayPowerController$DisplayControllerHandler;->handleMessage(Landroid/os/Message;)V
-HSPLcom/android/server/display/DisplayPowerController;->animateScreenBrightness(FFF)V
-HSPLcom/android/server/display/DisplayPowerController;->animateScreenStateChange(IZ)V
-HSPLcom/android/server/display/DisplayPowerController;->clampAbsoluteBrightness(F)F
-HSPLcom/android/server/display/DisplayPowerController;->clampScreenBrightness(F)F
-HSPLcom/android/server/display/DisplayPowerController;->getBrightnessInfo()Landroid/hardware/display/BrightnessInfo;
-HSPLcom/android/server/display/DisplayPowerController;->getScreenBrightnessSetting()F
-HSPLcom/android/server/display/DisplayPowerController;->lambda$onDisplayChanged$1(Lcom/android/server/display/DisplayDevice;Ljava/lang/String;Lcom/android/server/display/DisplayDeviceConfig;Ljava/lang/String;Landroid/os/IBinder;Lcom/android/server/display/DisplayDeviceInfo;Lcom/android/server/display/HighBrightnessModeMetadata;ZZ)V
-HSPLcom/android/server/display/DisplayPowerController;->notifyBrightnessTrackerChanged(FZZ)V
-HSPLcom/android/server/display/DisplayPowerController;->onDisplayChanged(Lcom/android/server/display/HighBrightnessModeMetadata;I)V
-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(FF)Z
-HSPLcom/android/server/display/DisplayPowerController;->sendOnStateChangedWithWakelock()V
-HSPLcom/android/server/display/DisplayPowerController;->sendUpdatePowerStateLocked()V
-HSPLcom/android/server/display/DisplayPowerController;->setScreenState(IZ)Z
-HSPLcom/android/server/display/DisplayPowerController;->updateAutoBrightnessAdjustment()Z
-HSPLcom/android/server/display/DisplayPowerController;->updatePowerState()V
-HSPLcom/android/server/display/DisplayPowerController;->updatePowerStateInternal()V
-HSPLcom/android/server/display/DisplayPowerController;->updateUserSetScreenBrightness()Z
+HSPLcom/android/server/display/DisplayPowerController2$CachedBrightnessInfo;->checkAndSetFloat(Landroid/util/MutableFloat;F)Z
+HSPLcom/android/server/display/DisplayPowerController2$CachedBrightnessInfo;->checkAndSetInt(Landroid/util/MutableInt;I)Z
+HSPLcom/android/server/display/DisplayPowerController2$DisplayControllerHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/display/DisplayPowerController2$Injector$$ExternalSyntheticLambda0;->uptimeMillis()J
+HSPLcom/android/server/display/DisplayPowerController2;->animateScreenBrightness(FFF)V
+HSPLcom/android/server/display/DisplayPowerController2;->animateScreenStateChange(IZ)V
+HSPLcom/android/server/display/DisplayPowerController2;->clampScreenBrightness(F)F+]Lcom/android/server/display/HighBrightnessModeController;Lcom/android/server/display/HighBrightnessModeController;
+HSPLcom/android/server/display/DisplayPowerController2;->getBrightnessInfo()Landroid/hardware/display/BrightnessInfo;
+HSPLcom/android/server/display/DisplayPowerController2;->getScreenBrightnessSetting()F
+HSPLcom/android/server/display/DisplayPowerController2;->logBrightnessEvent(Lcom/android/server/display/brightness/BrightnessEvent;F)V
+HSPLcom/android/server/display/DisplayPowerController2;->onDisplayChanged(Lcom/android/server/display/HighBrightnessModeMetadata;I)V
+HSPLcom/android/server/display/DisplayPowerController2;->postBrightnessChangeRunnable()V
+HSPLcom/android/server/display/DisplayPowerController2;->requestPowerState(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Z)Z+]Lcom/android/server/display/DisplayPowerController2;Lcom/android/server/display/DisplayPowerController2;]Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;]Lcom/android/server/display/DisplayPowerProximityStateController;Lcom/android/server/display/DisplayPowerProximityStateController;
+HSPLcom/android/server/display/DisplayPowerController2;->saveBrightnessInfo(FF)Z
+HSPLcom/android/server/display/DisplayPowerController2;->sendOnStateChangedWithWakelock()V
+HSPLcom/android/server/display/DisplayPowerController2;->sendUpdatePowerState()V
+HSPLcom/android/server/display/DisplayPowerController2;->sendUpdatePowerStateLocked()V
+HSPLcom/android/server/display/DisplayPowerController2;->setScreenState(IZ)Z
+HSPLcom/android/server/display/DisplayPowerController2;->updatePowerState()V
+HSPLcom/android/server/display/DisplayPowerController2;->updatePowerStateInternal()V+]Lcom/android/server/display/WakelockController;Lcom/android/server/display/WakelockController;]Lcom/android/server/display/ScreenOffBrightnessSensorController;Lcom/android/server/display/ScreenOffBrightnessSensorController;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/display/HighBrightnessModeController;Lcom/android/server/display/HighBrightnessModeController;]Lcom/android/server/display/BrightnessThrottler;Lcom/android/server/display/BrightnessThrottler;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/util/RingBuffer;Lcom/android/internal/util/RingBuffer;]Lcom/android/server/display/DisplayPowerState;Lcom/android/server/display/DisplayPowerState;]Lcom/android/server/display/DisplayPowerProximityStateController;Lcom/android/server/display/DisplayPowerProximityStateController;]Lcom/android/server/display/RampAnimator$DualRampAnimator;Lcom/android/server/display/RampAnimator$DualRampAnimator;]Lcom/android/server/display/state/DisplayStateController;Lcom/android/server/display/state/DisplayStateController;]Lcom/android/server/display/AutomaticBrightnessController;Lcom/android/server/display/AutomaticBrightnessController;]Lcom/android/server/display/brightness/DisplayBrightnessController;Lcom/android/server/display/brightness/DisplayBrightnessController;]Lcom/android/server/display/DisplayPowerController2;Lcom/android/server/display/DisplayPowerController2;]Lcom/android/server/display/brightness/BrightnessEvent;Lcom/android/server/display/brightness/BrightnessEvent;]Lcom/android/server/display/DisplayBrightnessState;Lcom/android/server/display/DisplayBrightnessState;]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;]Lcom/android/server/display/DisplayPowerControllerInterface;Lcom/android/server/display/DisplayPowerController2;]Lcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;Lcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;]Lcom/android/server/display/brightness/strategy/AutomaticBrightnessStrategy;Lcom/android/server/display/brightness/strategy/AutomaticBrightnessStrategy;]Lcom/android/server/display/brightness/BrightnessReason;Lcom/android/server/display/brightness/BrightnessReason;
+HSPLcom/android/server/display/DisplayPowerProximityStateController;->setPendingWaitForNegativeProximityLocked(Z)Z
+HSPLcom/android/server/display/DisplayPowerProximityStateController;->setProximitySensorEnabled(Z)V
+HSPLcom/android/server/display/DisplayPowerProximityStateController;->updatePendingProximityRequestsLocked()V
+HSPLcom/android/server/display/DisplayPowerProximityStateController;->updateProximityState(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;I)V
 HSPLcom/android/server/display/DisplayPowerState$2;->setValue(Ljava/lang/Object;F)V
+HSPLcom/android/server/display/DisplayPowerState$3;->setValue(Lcom/android/server/display/DisplayPowerState;F)V
 HSPLcom/android/server/display/DisplayPowerState$3;->setValue(Ljava/lang/Object;F)V
 HSPLcom/android/server/display/DisplayPowerState$4;->run()V+]Lcom/android/server/display/DisplayPowerState$PhotonicModulator;Lcom/android/server/display/DisplayPowerState$PhotonicModulator;
+HPLcom/android/server/display/DisplayPowerState$5;->run()V+]Lcom/android/server/display/ColorFade;Lcom/android/server/display/ColorFade;
 HSPLcom/android/server/display/DisplayPowerState$PhotonicModulator;->run()V
 HSPLcom/android/server/display/DisplayPowerState$PhotonicModulator;->setState(IFF)Z+]Ljava/lang/Object;Ljava/lang/Object;
 HSPLcom/android/server/display/DisplayPowerState;->-$$Nest$fgetmColorFadeLevel(Lcom/android/server/display/DisplayPowerState;)F
@@ -3563,26 +3866,28 @@
 HSPLcom/android/server/display/DisplayPowerState;->-$$Nest$fgetmSdrScreenBrightness(Lcom/android/server/display/DisplayPowerState;)F
 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
+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;->dismissColorFade()V
-HSPLcom/android/server/display/DisplayPowerState;->invokeCleanListenerIfNeeded()V+]Ljava/lang/Runnable;Lcom/android/server/display/DisplayPowerController$$ExternalSyntheticLambda3;
-HSPLcom/android/server/display/DisplayPowerState;->postScreenUpdateThreadSafe()V
+HSPLcom/android/server/display/DisplayPowerState;->invokeCleanListenerIfNeeded()V+]Ljava/lang/Runnable;Lcom/android/server/display/DisplayPowerController2$$ExternalSyntheticLambda0;
+HSPLcom/android/server/display/DisplayPowerState;->postScreenUpdateThreadSafe()V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/display/DisplayPowerState;->scheduleScreenUpdate()V+]Lcom/android/server/display/DisplayPowerState;Lcom/android/server/display/DisplayPowerState;
-HSPLcom/android/server/display/DisplayPowerState;->setColorFadeLevel(F)V
+HSPLcom/android/server/display/DisplayPowerState;->setColorFadeLevel(F)V+]Lcom/android/server/display/DisplayPowerState;Lcom/android/server/display/DisplayPowerState;
 HSPLcom/android/server/display/DisplayPowerState;->setScreenBrightness(F)V
 HSPLcom/android/server/display/DisplayPowerState;->setSdrScreenBrightness(F)V
 HSPLcom/android/server/display/DisplayPowerState;->waitUntilClean(Ljava/lang/Runnable;)Z
 HSPLcom/android/server/display/HighBrightnessModeController;->calculateHighBrightnessMode()I
-HSPLcom/android/server/display/HighBrightnessModeController;->calculateRemainingTime(J)J
+HSPLcom/android/server/display/HighBrightnessModeController;->calculateRemainingTime(J)J+]Lcom/android/server/display/HighBrightnessModeMetadata;Lcom/android/server/display/HighBrightnessModeMetadata;]Lcom/android/server/display/HighBrightnessModeController;Lcom/android/server/display/HighBrightnessModeController;]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/display/HbmEvent;Lcom/android/server/display/HbmEvent;
 HSPLcom/android/server/display/HighBrightnessModeController;->deviceSupportsHbm()Z
 HSPLcom/android/server/display/HighBrightnessModeController;->getCurrentBrightnessMax()F+]Lcom/android/server/display/HighBrightnessModeController;Lcom/android/server/display/HighBrightnessModeController;
-HSPLcom/android/server/display/HighBrightnessModeController;->getHighBrightnessMode()I
+HSPLcom/android/server/display/HighBrightnessModeController;->getCurrentBrightnessMin()F
 HSPLcom/android/server/display/HighBrightnessModeController;->getTransitionPoint()F
 HSPLcom/android/server/display/HighBrightnessModeController;->isCurrentlyAllowed()Z
 HSPLcom/android/server/display/HighBrightnessModeController;->onBrightnessChanged(FFI)V
 HSPLcom/android/server/display/HighBrightnessModeController;->recalculateTimeAllowance()V
 HSPLcom/android/server/display/HighBrightnessModeController;->setAutoBrightnessEnabled(I)V
 HSPLcom/android/server/display/HighBrightnessModeController;->updateHbmMode()V
+HSPLcom/android/server/display/HighBrightnessModeMetadataMapper;-><init>()V
+HSPLcom/android/server/display/HighBrightnessModeMetadataMapper;->getHighBrightnessModeMetadataLocked(Lcom/android/server/display/LogicalDisplay;)Lcom/android/server/display/HighBrightnessModeMetadata;
 HSPLcom/android/server/display/LocalDisplayAdapter$BacklightAdapter;-><init>(Landroid/os/IBinder;ZLcom/android/server/display/LocalDisplayAdapter$SurfaceControlProxy;)V
 HSPLcom/android/server/display/LocalDisplayAdapter$BacklightAdapter;->setBacklight(FFFF)V+]Lcom/android/server/display/LocalDisplayAdapter$SurfaceControlProxy;Lcom/android/server/display/LocalDisplayAdapter$SurfaceControlProxy;
 HSPLcom/android/server/display/LocalDisplayAdapter$BacklightAdapter;->setForceSurfaceControl(Z)V
@@ -3596,10 +3901,12 @@
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;->brightnessToBacklight(F)F+]Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;]Lcom/android/server/display/DisplayDeviceConfig;Lcom/android/server/display/DisplayDeviceConfig;
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;->handleHdrSdrNitsChanged(FF)V+]Lcom/android/server/display/DisplayAdapter;Lcom/android/server/display/LocalDisplayAdapter;
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;->run()V+]Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;
-HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;->setDisplayBrightness(FF)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/display/LocalDisplayAdapter$BacklightAdapter;Lcom/android/server/display/LocalDisplayAdapter$BacklightAdapter;]Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;->setDisplayBrightness(FF)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/display/LocalDisplayAdapter$BacklightAdapter;Lcom/android/server/display/LocalDisplayAdapter$BacklightAdapter;]Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;]Lcom/android/server/display/DisplayDeviceConfig;Lcom/android/server/display/DisplayDeviceConfig;]Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice$1;
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->-$$Nest$fgetmBacklightAdapter(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;)Lcom/android/server/display/LocalDisplayAdapter$BacklightAdapter;
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->-$$Nest$fputmBrightnessState(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;F)V
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->-$$Nest$fputmSdrBrightnessState(Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;F)V
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;-><clinit>()V
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;-><init>(Lcom/android/server/display/LocalDisplayAdapter;Landroid/os/IBinder;JLandroid/view/SurfaceControl$StaticDisplayInfo;Landroid/view/SurfaceControl$DynamicDisplayInfo;Landroid/view/SurfaceControl$DesiredDisplayModeSpecs;Z)V
-HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->applyPendingDisplayDeviceInfoChangesLocked()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;->findMode(IIF)Landroid/view/Display$Mode;
@@ -3637,7 +3944,7 @@
 HSPLcom/android/server/display/LocalDisplayAdapter$SurfaceControlProxy;->getPhysicalDisplayIds()[J
 HSPLcom/android/server/display/LocalDisplayAdapter$SurfaceControlProxy;->getPhysicalDisplayToken(J)Landroid/os/IBinder;
 HSPLcom/android/server/display/LocalDisplayAdapter$SurfaceControlProxy;->getStaticDisplayInfo(J)Landroid/view/SurfaceControl$StaticDisplayInfo;
-HSPLcom/android/server/display/LocalDisplayAdapter$SurfaceControlProxy;->setBootDisplayMode(Landroid/os/IBinder;I)V
+HSPLcom/android/server/display/LocalDisplayAdapter$SurfaceControlProxy;->setDisplayBrightness(Landroid/os/IBinder;FFFF)Z
 HSPLcom/android/server/display/LocalDisplayAdapter;->-$$Nest$fgetmIsBootDisplayModeSupported(Lcom/android/server/display/LocalDisplayAdapter;)Z
 HSPLcom/android/server/display/LocalDisplayAdapter;->-$$Nest$fgetmSurfaceControlProxy(Lcom/android/server/display/LocalDisplayAdapter;)Lcom/android/server/display/LocalDisplayAdapter$SurfaceControlProxy;
 HSPLcom/android/server/display/LocalDisplayAdapter;-><init>(Lcom/android/server/display/DisplayManagerService$SyncRoot;Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/display/DisplayAdapter$Listener;)V
@@ -3654,46 +3961,44 @@
 HSPLcom/android/server/display/LogicalDisplay;->getDisplayInfoLocked()Landroid/view/DisplayInfo;+]Lcom/android/server/display/DisplayInfoProxy;Lcom/android/server/display/DisplayInfoProxy;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;
 HSPLcom/android/server/display/LogicalDisplay;->getFrameRateOverrides()[Landroid/view/DisplayEventReceiver$FrameRateOverride;
 HSPLcom/android/server/display/LogicalDisplay;->getMaskingInsets(Lcom/android/server/display/DisplayDeviceInfo;)Landroid/graphics/Rect;
-HSPLcom/android/server/display/LogicalDisplay;->getNonOverrideDisplayInfoLocked(Landroid/view/DisplayInfo;)V
+HSPLcom/android/server/display/LogicalDisplay;->getNonOverrideDisplayInfoLocked(Landroid/view/DisplayInfo;)V+]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;
 HSPLcom/android/server/display/LogicalDisplay;->getPrimaryDisplayDeviceLocked()Lcom/android/server/display/DisplayDevice;
 HSPLcom/android/server/display/LogicalDisplay;->getRequestedMinimalPostProcessingLocked()Z
 HSPLcom/android/server/display/LogicalDisplay;->hasContentLocked()Z
+HSPLcom/android/server/display/LogicalDisplay;->isDirtyLocked()Z
 HSPLcom/android/server/display/LogicalDisplay;->isEnabledLocked()Z
 HSPLcom/android/server/display/LogicalDisplay;->isValidLocked()Z
-HSPLcom/android/server/display/LogicalDisplay;->needsOwnDisplayGroupLocked()Z
-HSPLcom/android/server/display/LogicalDisplay;->setBrightnessThrottlingDataIdLocked(Ljava/lang/String;)V
 HSPLcom/android/server/display/LogicalDisplay;->setDevicePositionLocked(I)V
 HSPLcom/android/server/display/LogicalDisplay;->setDisplayGroupNameLocked(Ljava/lang/String;)V
 HSPLcom/android/server/display/LogicalDisplay;->setLeadDisplayLocked(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
+HSPLcom/android/server/display/LogicalDisplay;->setThermalBrightnessThrottlingDataIdLocked(Ljava/lang/String;)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;->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;->updateLayoutLimitedRefreshRateLocked(Landroid/view/SurfaceControl$RefreshRateRange;)V
-HSPLcom/android/server/display/LogicalDisplay;->updateLocked(Lcom/android/server/display/DisplayDeviceRepository;)V
-HSPLcom/android/server/display/LogicalDisplay;->updateRefreshRateThermalThrottling(Landroid/util/SparseArray;)V
+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/LogicalDisplay;->updateThermalRefreshRateThrottling(Landroid/util/SparseArray;)V
 HSPLcom/android/server/display/LogicalDisplayMapper$$ExternalSyntheticLambda2;-><init>()V
 HSPLcom/android/server/display/LogicalDisplayMapper$$ExternalSyntheticLambda3;-><init>()V
 HSPLcom/android/server/display/LogicalDisplayMapper$$ExternalSyntheticLambda3;->getId(Z)I
 HSPLcom/android/server/display/LogicalDisplayMapper$LogicalDisplayMapperHandler;-><init>(Lcom/android/server/display/LogicalDisplayMapper;Landroid/os/Looper;)V
 HSPLcom/android/server/display/LogicalDisplayMapper;->$r8$lambda$wD3HaGjP0HgeLvbMHs7yiuKdxHQ(Z)I
 HSPLcom/android/server/display/LogicalDisplayMapper;-><clinit>()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;->assignDisplayGroupIdLocked(ZLjava/lang/String;ZLjava/lang/Integer;)I
-HSPLcom/android/server/display/LogicalDisplayMapper;->assignDisplayGroupLocked(Lcom/android/server/display/LogicalDisplay;)V
+HSPLcom/android/server/display/LogicalDisplayMapper;->assignDisplayGroupLocked(Lcom/android/server/display/LogicalDisplay;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]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;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/DisplayGroup;Lcom/android/server/display/DisplayGroup;
 HSPLcom/android/server/display/LogicalDisplayMapper;->assignLayerStackLocked(I)I
 HSPLcom/android/server/display/LogicalDisplayMapper;->createNewLogicalDisplayLocked(Lcom/android/server/display/DisplayDevice;I)Lcom/android/server/display/LogicalDisplay;
 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$$ExternalSyntheticLambda0;,Lcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver$$ExternalSyntheticLambda0;
-HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayGroupIdFromDisplayIdLocked(I)I
-HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayGroupLocked(I)Lcom/android/server/display/DisplayGroup;
+HSPLcom/android/server/display/LogicalDisplayMapper;->forEachLocked(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/function/Consumer;megamorphic_types
+HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayGroupIdFromDisplayIdLocked(I)I+]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;
+HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayGroupLocked(I)Lcom/android/server/display/DisplayGroup;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 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;->getDisplayLocked(I)Lcom/android/server/display/LogicalDisplay;+]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
 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;
+HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayLocked(Lcom/android/server/display/DisplayDevice;)Lcom/android/server/display/LogicalDisplay;+]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
 HSPLcom/android/server/display/LogicalDisplayMapper;->initializeDefaultDisplayDeviceLocked(Lcom/android/server/display/DisplayDevice;)V
@@ -3702,11 +4007,11 @@
 HSPLcom/android/server/display/LogicalDisplayMapper;->onDisplayDeviceEventLocked(Lcom/android/server/display/DisplayDevice;I)V
 HSPLcom/android/server/display/LogicalDisplayMapper;->onTraversalRequested()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;]Lcom/android/server/display/LogicalDisplayMapper$Listener;Lcom/android/server/display/DisplayManagerService$LogicalDisplayListener;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/display/LogicalDisplayMapper;->sendUpdatesForGroupsLocked(I)V
+HSPLcom/android/server/display/LogicalDisplayMapper;->sendUpdatesForGroupsLocked(I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/LogicalDisplayMapper$Listener;Lcom/android/server/display/DisplayManagerService$LogicalDisplayListener;
 HSPLcom/android/server/display/LogicalDisplayMapper;->setEnabledLocked(Lcom/android/server/display/LogicalDisplay;Z)V
 HSPLcom/android/server/display/LogicalDisplayMapper;->toSparseBooleanArray([I)Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/display/LogicalDisplayMapper;->updateLogicalDisplaysLocked()V
-HSPLcom/android/server/display/LogicalDisplayMapper;->updateLogicalDisplaysLocked(I)V
+HSPLcom/android/server/display/LogicalDisplayMapper;->updateLogicalDisplaysLocked(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;]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/PersistentDataStore$BrightnessConfigurations;-><init>()V
 HSPLcom/android/server/display/PersistentDataStore$BrightnessConfigurations;->loadFromXml(Lcom/android/modules/utils/TypedXmlPullParser;)V
 HSPLcom/android/server/display/PersistentDataStore$BrightnessConfigurations;->saveToXml(Lcom/android/modules/utils/TypedXmlSerializer;)V
@@ -3725,6 +4030,7 @@
 HSPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->getDisplaySize()Landroid/graphics/Point;
 HSPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->loadFromXml(Lcom/android/modules/utils/TypedXmlPullParser;)V
 HSPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->loadIntValue(Lcom/android/modules/utils/TypedXmlPullParser;)I
+HSPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->saveToXml(Lcom/android/modules/utils/TypedXmlSerializer;)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
@@ -3741,7 +4047,9 @@
 HSPLcom/android/server/display/PersistentDataStore;->loadRememberedWifiDisplaysFromXml(Lcom/android/modules/utils/TypedXmlPullParser;)V
 HSPLcom/android/server/display/PersistentDataStore;->saveIfNeeded()V
 HSPLcom/android/server/display/PersistentDataStore;->saveToXml(Lcom/android/modules/utils/TypedXmlSerializer;)V
-HPLcom/android/server/display/RampAnimator$DualRampAnimator$1;->run()V+]Lcom/android/server/display/RampAnimator$Listener;Lcom/android/server/display/DisplayPowerController$4;,Lcom/android/server/display/DisplayPowerController2$4;]Lcom/android/server/display/RampAnimator;Lcom/android/server/display/RampAnimator;]Lcom/android/server/display/RampAnimator$DualRampAnimator;Lcom/android/server/display/RampAnimator$DualRampAnimator;]Landroid/view/Choreographer;Landroid/view/Choreographer;
+HPLcom/android/server/display/RampAnimator$DualRampAnimator$1;->run()V+]Lcom/android/server/display/RampAnimator$Listener;Lcom/android/server/display/DisplayPowerController2$3;]Lcom/android/server/display/RampAnimator;Lcom/android/server/display/RampAnimator;]Lcom/android/server/display/RampAnimator$DualRampAnimator;Lcom/android/server/display/RampAnimator$DualRampAnimator;]Landroid/view/Choreographer;Landroid/view/Choreographer;
+HPLcom/android/server/display/RampAnimator$DualRampAnimator;->-$$Nest$fgetmChoreographer(Lcom/android/server/display/RampAnimator$DualRampAnimator;)Landroid/view/Choreographer;
+HPLcom/android/server/display/RampAnimator$DualRampAnimator;->-$$Nest$fgetmFirst(Lcom/android/server/display/RampAnimator$DualRampAnimator;)Lcom/android/server/display/RampAnimator;
 HPLcom/android/server/display/RampAnimator$DualRampAnimator;->-$$Nest$fgetmSecond(Lcom/android/server/display/RampAnimator$DualRampAnimator;)Lcom/android/server/display/RampAnimator;
 HSPLcom/android/server/display/RampAnimator$DualRampAnimator;->animateTo(FFF)Z
 HSPLcom/android/server/display/RampAnimator$DualRampAnimator;->isAnimating()Z+]Lcom/android/server/display/RampAnimator;Lcom/android/server/display/RampAnimator;
@@ -3750,24 +4058,54 @@
 HPLcom/android/server/display/RampAnimator;->performNextAnimationStep(J)V+]Lcom/android/server/display/RampAnimator;Lcom/android/server/display/RampAnimator;
 HSPLcom/android/server/display/RampAnimator;->setAnimationTarget(FF)Z
 HSPLcom/android/server/display/RampAnimator;->setPropertyValue(F)V+]Landroid/util/FloatProperty;Lcom/android/server/display/DisplayPowerState$3;,Lcom/android/server/display/DisplayPowerState$2;
+HSPLcom/android/server/display/ScreenOffBrightnessSensorController;->setLightSensorEnabled(Z)V
 HSPLcom/android/server/display/VirtualDisplayAdapter$1;-><init>()V
 HSPLcom/android/server/display/VirtualDisplayAdapter;-><init>(Lcom/android/server/display/DisplayManagerService$SyncRoot;Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/display/DisplayAdapter$Listener;)V
 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
 HSPLcom/android/server/display/VirtualDisplayAdapter;->registerLocked()V
+HSPLcom/android/server/display/WakelockController;->acquireStateChangedSuspendBlocker()Z
+HSPLcom/android/server/display/WakelockController;->acquireUnfinishedBusinessSuspendBlocker()Z
+HSPLcom/android/server/display/WakelockController;->lambda$getOnStateChangedRunnable$1()V
+HSPLcom/android/server/display/WakelockController;->releaseUnfinishedBusinessSuspendBlocker()Z
 HSPLcom/android/server/display/brightness/BrightnessEvent;-><init>(Lcom/android/server/display/brightness/BrightnessEvent;)V
 HSPLcom/android/server/display/brightness/BrightnessEvent;->copyFrom(Lcom/android/server/display/brightness/BrightnessEvent;)V
 HSPLcom/android/server/display/brightness/BrightnessEvent;->equalsMainData(Lcom/android/server/display/brightness/BrightnessEvent;)Z
 HSPLcom/android/server/display/brightness/BrightnessEvent;->flagsToString()Ljava/lang/String;
+HSPLcom/android/server/display/brightness/BrightnessEvent;->getFlags()I
+HSPLcom/android/server/display/brightness/BrightnessEvent;->isRbcEnabled()Z
 HSPLcom/android/server/display/brightness/BrightnessEvent;->reset()V
+HSPLcom/android/server/display/brightness/BrightnessEvent;->setFlags(I)V
+HSPLcom/android/server/display/brightness/BrightnessEvent;->setRbcStrength(I)V
 HSPLcom/android/server/display/brightness/BrightnessEvent;->toString(Z)Ljava/lang/String;
 HSPLcom/android/server/display/brightness/BrightnessReason;->equals(Ljava/lang/Object;)Z
-HSPLcom/android/server/display/brightness/BrightnessReason;->set(Lcom/android/server/display/brightness/BrightnessReason;)V
+HSPLcom/android/server/display/brightness/BrightnessReason;->getReason()I
+HSPLcom/android/server/display/brightness/BrightnessReason;->set(Lcom/android/server/display/brightness/BrightnessReason;)V+]Lcom/android/server/display/brightness/BrightnessReason;Lcom/android/server/display/brightness/BrightnessReason;
 HSPLcom/android/server/display/brightness/BrightnessReason;->setModifier(I)V
-HSPLcom/android/server/display/brightness/BrightnessReason;->setReason(I)V
 HSPLcom/android/server/display/brightness/BrightnessReason;->toString(I)Ljava/lang/String;
+HSPLcom/android/server/display/brightness/BrightnessUtils;->clampAbsoluteBrightness(F)F
+HSPLcom/android/server/display/brightness/BrightnessUtils;->constructDisplayBrightnessState(IFFLjava/lang/String;)Lcom/android/server/display/DisplayBrightnessState;
+HSPLcom/android/server/display/brightness/BrightnessUtils;->isValidBrightnessValue(F)Z
+HSPLcom/android/server/display/brightness/DisplayBrightnessController;->convertToAdjustedNits(F)F
+HSPLcom/android/server/display/brightness/DisplayBrightnessController;->getCurrentBrightness()F
+HSPLcom/android/server/display/brightness/DisplayBrightnessController;->getLastUserSetScreenBrightness()F
+HSPLcom/android/server/display/brightness/DisplayBrightnessController;->getScreenBrightnessSetting()F
+HSPLcom/android/server/display/brightness/DisplayBrightnessController;->isAllowAutoBrightnessWhileDozingConfig()Z
+HSPLcom/android/server/display/brightness/DisplayBrightnessController;->updateBrightness(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;I)Lcom/android/server/display/DisplayBrightnessState;
+HSPLcom/android/server/display/brightness/DisplayBrightnessController;->updateUserSetScreenBrightness()Z
+HSPLcom/android/server/display/brightness/DisplayBrightnessStrategySelector;->isAllowAutoBrightnessWhileDozingConfig()Z
+HSPLcom/android/server/display/brightness/DisplayBrightnessStrategySelector;->selectStrategy(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;I)Lcom/android/server/display/brightness/strategy/DisplayBrightnessStrategy;
+HSPLcom/android/server/display/brightness/strategy/AutomaticBrightnessStrategy;->accommodateUserBrightnessChanges(ZFILandroid/hardware/display/BrightnessConfiguration;I)V
+HPLcom/android/server/display/brightness/strategy/AutomaticBrightnessStrategy;->adjustAutomaticBrightnessStateIfValid(F)V
+HPLcom/android/server/display/brightness/strategy/AutomaticBrightnessStrategy;->getAutomaticScreenBrightness(Lcom/android/server/display/brightness/BrightnessEvent;)F
+HSPLcom/android/server/display/brightness/strategy/AutomaticBrightnessStrategy;->processPendingAutoBrightnessAdjustments()Z
+HSPLcom/android/server/display/brightness/strategy/AutomaticBrightnessStrategy;->shouldUseAutoBrightness()Z
+HSPLcom/android/server/display/brightness/strategy/AutomaticBrightnessStrategy;->updateTemporaryAutoBrightnessAdjustments()F
 HSPLcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;->getReduceBrightColorsStrength()I
 HPLcom/android/server/display/color/ColorDisplayService$ColorMatrixEvaluator;->evaluate(F[F[F)[F
 HPLcom/android/server/display/color/ColorDisplayService$TintValueAnimator;->updateMinMaxComponents()V+]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
+HPLcom/android/server/display/color/DisplayTransformManager;->setColorMatrix(I[F)V
+HSPLcom/android/server/display/color/ReduceBrightColorsTintController;->getStrength()I
 HSPLcom/android/server/display/config/BrightnessThresholds;-><init>()V
 HSPLcom/android/server/display/config/BrightnessThresholds;->getBrightnessThresholdPoints()Lcom/android/server/display/config/ThresholdPoints;
 HSPLcom/android/server/display/config/BrightnessThresholds;->getMinimum()Ljava/math/BigDecimal;
@@ -3783,17 +4121,6 @@
 HSPLcom/android/server/display/config/BrightnessThrottlingPoint;->read(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/display/config/BrightnessThrottlingPoint;
 HSPLcom/android/server/display/config/BrightnessThrottlingPoint;->setBrightness(Ljava/math/BigDecimal;)V
 HSPLcom/android/server/display/config/BrightnessThrottlingPoint;->setThermalStatus(Lcom/android/server/display/config/ThermalStatus;)V
-HSPLcom/android/server/display/config/Density;-><init>()V
-HSPLcom/android/server/display/config/Density;->getDensity()Ljava/math/BigInteger;
-HSPLcom/android/server/display/config/Density;->getHeight()Ljava/math/BigInteger;
-HSPLcom/android/server/display/config/Density;->getWidth()Ljava/math/BigInteger;
-HSPLcom/android/server/display/config/Density;->read(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/display/config/Density;
-HSPLcom/android/server/display/config/Density;->setDensity(Ljava/math/BigInteger;)V
-HSPLcom/android/server/display/config/Density;->setHeight(Ljava/math/BigInteger;)V
-HSPLcom/android/server/display/config/Density;->setWidth(Ljava/math/BigInteger;)V
-HSPLcom/android/server/display/config/DensityMapping;-><init>()V
-HSPLcom/android/server/display/config/DensityMapping;->getDensity()Ljava/util/List;
-HSPLcom/android/server/display/config/DensityMapping;->read(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/display/config/DensityMapping;
 HSPLcom/android/server/display/config/DisplayConfiguration;-><init>()V
 HSPLcom/android/server/display/config/DisplayConfiguration;->getAmbientBrightnessChangeThresholds()Lcom/android/server/display/config/Thresholds;
 HSPLcom/android/server/display/config/DisplayConfiguration;->getAmbientBrightnessChangeThresholdsIdle()Lcom/android/server/display/config/Thresholds;
@@ -3825,7 +4152,6 @@
 HSPLcom/android/server/display/config/DisplayConfiguration;->setAmbientBrightnessChangeThresholds(Lcom/android/server/display/config/Thresholds;)V
 HSPLcom/android/server/display/config/DisplayConfiguration;->setAmbientLightHorizonLong(Ljava/math/BigInteger;)V
 HSPLcom/android/server/display/config/DisplayConfiguration;->setAmbientLightHorizonShort(Ljava/math/BigInteger;)V
-HSPLcom/android/server/display/config/DisplayConfiguration;->setDensityMapping(Lcom/android/server/display/config/DensityMapping;)V
 HSPLcom/android/server/display/config/DisplayConfiguration;->setHighBrightnessMode(Lcom/android/server/display/config/HighBrightnessMode;)V
 HSPLcom/android/server/display/config/DisplayConfiguration;->setScreenBrightnessMap(Lcom/android/server/display/config/NitsMap;)V
 HSPLcom/android/server/display/config/DisplayConfiguration;->setScreenBrightnessRampFastDecrease(Ljava/math/BigDecimal;)V
@@ -3851,7 +4177,6 @@
 HSPLcom/android/server/display/config/HighBrightnessMode;->getMinimumLux_all()Ljava/math/BigDecimal;
 HSPLcom/android/server/display/config/HighBrightnessMode;->getRefreshRate_all()Lcom/android/server/display/config/RefreshRateRange;
 HSPLcom/android/server/display/config/HighBrightnessMode;->getSdrHdrRatioMap_all()Lcom/android/server/display/config/SdrHdrRatioMap;
-HSPLcom/android/server/display/config/HighBrightnessMode;->getThermalStatusLimit_all()Lcom/android/server/display/config/ThermalStatus;
 HSPLcom/android/server/display/config/HighBrightnessMode;->getTiming_all()Lcom/android/server/display/config/HbmTiming;
 HSPLcom/android/server/display/config/HighBrightnessMode;->getTransitionPoint_all()Ljava/math/BigDecimal;
 HSPLcom/android/server/display/config/HighBrightnessMode;->read(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/display/config/HighBrightnessMode;
@@ -3860,7 +4185,6 @@
 HSPLcom/android/server/display/config/HighBrightnessMode;->setMinimumHdrPercentOfScreen_all(Ljava/math/BigDecimal;)V
 HSPLcom/android/server/display/config/HighBrightnessMode;->setMinimumLux_all(Ljava/math/BigDecimal;)V
 HSPLcom/android/server/display/config/HighBrightnessMode;->setSdrHdrRatioMap_all(Lcom/android/server/display/config/SdrHdrRatioMap;)V
-HSPLcom/android/server/display/config/HighBrightnessMode;->setThermalStatusLimit_all(Lcom/android/server/display/config/ThermalStatus;)V
 HSPLcom/android/server/display/config/HighBrightnessMode;->setTiming_all(Lcom/android/server/display/config/HbmTiming;)V
 HSPLcom/android/server/display/config/HighBrightnessMode;->setTransitionPoint_all(Ljava/math/BigDecimal;)V
 HSPLcom/android/server/display/config/IntegerArray;-><init>()V
@@ -3909,39 +4233,38 @@
 HSPLcom/android/server/display/config/XmlParser;->read(Ljava/io/InputStream;)Lcom/android/server/display/config/DisplayConfiguration;
 HSPLcom/android/server/display/config/XmlParser;->readText(Lorg/xmlpull/v1/XmlPullParser;)Ljava/lang/String;
 HSPLcom/android/server/display/layout/Layout$Display;->getAddress()Landroid/view/DisplayAddress;
-HSPLcom/android/server/display/layout/Layout$Display;->getBrightnessThrottlingMapId()Ljava/lang/String;
 HSPLcom/android/server/display/layout/Layout$Display;->getDisplayGroupName()Ljava/lang/String;
 HSPLcom/android/server/display/layout/Layout$Display;->getLeadDisplayId()I
 HSPLcom/android/server/display/layout/Layout$Display;->getLogicalDisplayId()I
 HSPLcom/android/server/display/layout/Layout$Display;->getPosition()I
 HSPLcom/android/server/display/layout/Layout$Display;->getRefreshRateThermalThrottlingMapId()Ljava/lang/String;
 HSPLcom/android/server/display/layout/Layout$Display;->getRefreshRateZoneId()Ljava/lang/String;
+HSPLcom/android/server/display/layout/Layout$Display;->getThermalBrightnessThrottlingMapId()Ljava/lang/String;
 HSPLcom/android/server/display/layout/Layout$Display;->isEnabled()Z
 HSPLcom/android/server/display/layout/Layout$Display;->toString()Ljava/lang/String;
 HSPLcom/android/server/display/layout/Layout;-><init>()V
 HSPLcom/android/server/display/layout/Layout;->contains(Landroid/view/DisplayAddress;)Z
+HSPLcom/android/server/display/layout/Layout;->createDefaultDisplayLocked(Landroid/view/DisplayAddress;Lcom/android/server/display/layout/DisplayIdProducer;)V
 HSPLcom/android/server/display/layout/Layout;->getAt(I)Lcom/android/server/display/layout/Layout$Display;
 HSPLcom/android/server/display/layout/Layout;->getById(I)Lcom/android/server/display/layout/Layout$Display;
 HSPLcom/android/server/display/layout/Layout;->size()I
 HSPLcom/android/server/display/layout/Layout;->toString()Ljava/lang/String;
 HSPLcom/android/server/display/mode/DisplayModeDirector$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/display/mode/DisplayModeDirector;)V
+HSPLcom/android/server/display/mode/DisplayModeDirector$$ExternalSyntheticLambda0;->onChanged()V
 HSPLcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;-><init>(Lcom/android/server/display/mode/DisplayModeDirector;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;->findModeByIdLocked(II)Landroid/view/Display$Mode;+]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;->setAppPreferredRefreshRateRangeLocked(IFF)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;->setAppPreferredRefreshRateRangeLocked(IFF)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/mode/VotesStorage;Lcom/android/server/display/mode/VotesStorage;
 HSPLcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;->setAppRequest(IIFF)V+]Lcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;Lcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;
-HSPLcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;->setAppRequestedModeLocked(II)V+]Lcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;Lcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)V
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda0;->call()Ljava/lang/Object;
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/display/DisplayDeviceConfig;)V
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda1;->call()Ljava/lang/Object;
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)V
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda2;->call()Ljava/lang/Object;
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/display/DisplayDeviceConfig;)V
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda3;->call()Ljava/lang/Object;
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)V
+HSPLcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;->setAppRequestedModeLocked(II)V+]Lcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;Lcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/mode/VotesStorage;Lcom/android/server/display/mode/VotesStorage;
+HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)V
+HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda12;->call()Ljava/lang/Object;
+HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda13;-><init>(Lcom/android/server/display/DisplayDeviceConfig;)V
+HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda13;->call()Ljava/lang/Object;
+HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda14;-><init>(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)V
+HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda14;->call()Ljava/lang/Object;
+HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda15;-><init>(Lcom/android/server/display/DisplayDeviceConfig;)V
+HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda15;->call()Ljava/lang/Object;
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda4;->call()Ljava/lang/Object;
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/display/DisplayDeviceConfig;)V
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda5;->call()Ljava/lang/Object;
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda6;->call()Ljava/lang/Object;
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/display/DisplayDeviceConfig;)V
@@ -3949,46 +4272,28 @@
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$LightSensorEventListener$1;-><init>(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;-><init>(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;-><init>(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$LightSensorEventListener-IA;)V
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->isDifferentZone(FF[I)Z
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->onSensorChanged(Landroid/hardware/SensorEvent;)V+]Landroid/os/Handler;Lcom/android/server/display/DisplayManagerService$DisplayManagerHandler;]Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;]Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->processSensorData(J)V+]Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->$r8$lambda$2yxK2_eLtU6nZcHfdKLEFtXRg6s(Lcom/android/server/display/DisplayDeviceConfig;)[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->$r8$lambda$575xw1IB_wKza2lQou_EFHETrZY(Lcom/android/server/display/DisplayDeviceConfig;)[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->$r8$lambda$6gPvcTd8CCWVv0gcH9_jKtYdJSA(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->$r8$lambda$HNonwhHtjCbfumoYkj7IEoQrTNQ(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->$r8$lambda$Nvu8oz03p51p3iJ1ib0EC5X7xWQ(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->$r8$lambda$Rm28q1vYxHd_oCn6bOTdyH1iR-o(Lcom/android/server/display/DisplayDeviceConfig;)[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->$r8$lambda$X8yMLUZsFE5FbbfXrksREwEQipw(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->$r8$lambda$wRhDMk9iQPBvqZxm2ox8M2WhE5Y(Lcom/android/server/display/DisplayDeviceConfig;)[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->-$$Nest$fgetmAmbientFilter(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)Lcom/android/server/display/utils/AmbientFilter;
+HPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->onSensorChanged(Landroid/hardware/SensorEvent;)V+]Landroid/os/Handler;Lcom/android/server/display/DisplayManagerService$DisplayManagerHandler;]Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;]Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;
+HPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$LightSensorEventListener;->processSensorData(J)V+]Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;
+HPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->-$$Nest$fgetmAmbientFilter(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)Lcom/android/server/display/utils/AmbientFilter;
+HPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->-$$Nest$fgetmAmbientLux(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)F
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->-$$Nest$fgetmHandler(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)Landroid/os/Handler;
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->-$$Nest$monBrightnessChangedLocked(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)V
+HPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->-$$Nest$fputmAmbientLux(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;F)V
+HPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->-$$Nest$monBrightnessChangedLocked(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->-$$Nest$mreloadLightSensor(Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;Lcom/android/server/display/DisplayDeviceConfig;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;-><init>(Lcom/android/server/display/mode/DisplayModeDirector;Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/display/mode/DisplayModeDirector$Injector;)V
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->getBrightness(I)I
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->getLightSensor()Landroid/hardware/Sensor;
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->hasValidHighZone()Z
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->hasValidLowZone()Z
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->hasValidThreshold([I)Z
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->isInsideLowZone(IF)Z
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->lambda$loadHighBrightnessThresholds$4()[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->lambda$loadHighBrightnessThresholds$5(Lcom/android/server/display/DisplayDeviceConfig;)[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->lambda$loadHighBrightnessThresholds$6()[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->lambda$loadHighBrightnessThresholds$7(Lcom/android/server/display/DisplayDeviceConfig;)[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->lambda$loadLowBrightnessThresholds$0()[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->lambda$loadLowBrightnessThresholds$1(Lcom/android/server/display/DisplayDeviceConfig;)[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->lambda$loadLowBrightnessThresholds$2()[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->lambda$loadLowBrightnessThresholds$3(Lcom/android/server/display/DisplayDeviceConfig;)[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->loadBrightnessThresholds(Ljava/util/concurrent/Callable;Ljava/util/concurrent/Callable;ILcom/android/server/display/DisplayDeviceConfig;Z)[I
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->loadHighBrightnessThresholds(Lcom/android/server/display/DisplayDeviceConfig;Z)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->loadLowBrightnessThresholds(Lcom/android/server/display/DisplayDeviceConfig;Z)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->loadRefreshRateInHighZone(Lcom/android/server/display/DisplayDeviceConfig;Z)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->loadRefreshRateInLowZone(Lcom/android/server/display/DisplayDeviceConfig;Z)V
-HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->onBrightnessChangedLocked()V+]Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;
+HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->onBrightnessChangedLocked()V+]Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;]Lcom/android/server/display/mode/VotesStorage;Lcom/android/server/display/mode/VotesStorage;
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->onDisplayChanged(I)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->reloadLightSensor(Lcom/android/server/display/DisplayDeviceConfig;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->reloadLightSensorData(Lcom/android/server/display/DisplayDeviceConfig;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->restartObserver()V
+HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->setDefaultDisplayState(I)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->updateBlockingZoneThresholds(Lcom/android/server/display/DisplayDeviceConfig;Z)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->updateDefaultDisplayState()V
 HSPLcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;->updateSensorStatus()V
@@ -3998,77 +4303,79 @@
 HSPLcom/android/server/display/mode/DisplayModeDirector$DesiredDisplayModeSpecs;->equals(Ljava/lang/Object;)Z+]Landroid/view/SurfaceControl$RefreshRateRanges;Landroid/view/SurfaceControl$RefreshRateRanges;
 HSPLcom/android/server/display/mode/DisplayModeDirector$DeviceConfigDisplaySettings;-><init>(Lcom/android/server/display/mode/DisplayModeDirector;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$DeviceConfigDisplaySettings;-><init>(Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector$DeviceConfigDisplaySettings-IA;)V
-HSPLcom/android/server/display/mode/DisplayModeDirector$DeviceConfigDisplaySettings;->getDefaultPeakRefreshRate()Ljava/lang/Float;
-HSPLcom/android/server/display/mode/DisplayModeDirector$DeviceConfigDisplaySettings;->getHighAmbientBrightnessThresholds()[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$DeviceConfigDisplaySettings;->getHighDisplayBrightnessThresholds()[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$DeviceConfigDisplaySettings;->getIntArrayProperty(Ljava/lang/String;)[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$DeviceConfigDisplaySettings;->getLowAmbientBrightnessThresholds()[I
-HSPLcom/android/server/display/mode/DisplayModeDirector$DeviceConfigDisplaySettings;->getLowDisplayBrightnessThresholds()[I
 HSPLcom/android/server/display/mode/DisplayModeDirector$DeviceConfigDisplaySettings;->getRefreshRateInHbmHdr(Lcom/android/server/display/DisplayDeviceConfig;)I
 HSPLcom/android/server/display/mode/DisplayModeDirector$DeviceConfigDisplaySettings;->getRefreshRateInHbmSunlight(Lcom/android/server/display/DisplayDeviceConfig;)I
 HSPLcom/android/server/display/mode/DisplayModeDirector$DisplayModeDirectorHandler;-><init>(Lcom/android/server/display/mode/DisplayModeDirector;Landroid/os/Looper;)V
-HSPLcom/android/server/display/mode/DisplayModeDirector$DisplayModeDirectorHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/display/mode/DisplayModeDirector$DesiredDisplayModeSpecsListener;Lcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver;]Lcom/android/server/display/mode/DisplayModeDirector$SettingsObserver;Lcom/android/server/display/mode/DisplayModeDirector$SettingsObserver;]Lcom/android/server/display/mode/DisplayModeDirector$HbmObserver;Lcom/android/server/display/mode/DisplayModeDirector$HbmObserver;
-HSPLcom/android/server/display/mode/DisplayModeDirector$DisplayObserver;-><init>(Lcom/android/server/display/mode/DisplayModeDirector;Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/display/mode/DisplayModeDirector$BallotBox;)V
+HSPLcom/android/server/display/mode/DisplayModeDirector$DisplayModeDirectorHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/display/mode/DisplayModeDirector$DesiredDisplayModeSpecsListener;Lcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver;]Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver;]Lcom/android/server/display/mode/DisplayModeDirector$SettingsObserver;Lcom/android/server/display/mode/DisplayModeDirector$SettingsObserver;]Lcom/android/server/display/mode/DisplayModeDirector$HbmObserver;Lcom/android/server/display/mode/DisplayModeDirector$HbmObserver;
+HSPLcom/android/server/display/mode/DisplayModeDirector$DisplayObserver;-><init>(Lcom/android/server/display/mode/DisplayModeDirector;Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/display/mode/VotesStorage;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$DisplayObserver;->getDisplayInfo(I)Landroid/view/DisplayInfo;
 HSPLcom/android/server/display/mode/DisplayModeDirector$DisplayObserver;->updateDisplayModes(ILandroid/view/DisplayInfo;)V
-HSPLcom/android/server/display/mode/DisplayModeDirector$HbmObserver;-><init>(Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector$Injector;Lcom/android/server/display/mode/DisplayModeDirector$BallotBox;Landroid/os/Handler;Lcom/android/server/display/mode/DisplayModeDirector$DeviceConfigDisplaySettings;)V
+HSPLcom/android/server/display/mode/DisplayModeDirector$DisplayObserver;->updateLayoutLimitedFrameRate(ILandroid/view/DisplayInfo;)V
+HSPLcom/android/server/display/mode/DisplayModeDirector$HbmObserver;-><init>(Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector$Injector;Lcom/android/server/display/mode/VotesStorage;Landroid/os/Handler;Lcom/android/server/display/mode/DisplayModeDirector$DeviceConfigDisplaySettings;)V
+HPLcom/android/server/display/mode/DisplayModeDirector$HbmObserver;->onDisplayChanged(I)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$HbmObserver;->setupHdrRefreshRates(Lcom/android/server/display/DisplayDeviceConfig;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$RealInjector;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$RealInjector;->getBrightnessInfo(I)Landroid/hardware/display/BrightnessInfo;
 HSPLcom/android/server/display/mode/DisplayModeDirector$RealInjector;->getDeviceConfig()Landroid/provider/DeviceConfigInterface;
+HSPLcom/android/server/display/mode/DisplayModeDirector$RealInjector;->getDisplay(I)Landroid/view/Display;
+HSPLcom/android/server/display/mode/DisplayModeDirector$RealInjector;->getDisplayInfo(ILandroid/view/DisplayInfo;)Z
 HSPLcom/android/server/display/mode/DisplayModeDirector$RealInjector;->getDisplayManager()Landroid/hardware/display/DisplayManager;
 HSPLcom/android/server/display/mode/DisplayModeDirector$RealInjector;->supportsFrameRateOverride()Z
-HSPLcom/android/server/display/mode/DisplayModeDirector$SensorObserver;-><init>(Landroid/content/Context;Lcom/android/server/display/mode/DisplayModeDirector$BallotBox;Lcom/android/server/display/mode/DisplayModeDirector$Injector;)V
+HSPLcom/android/server/display/mode/DisplayModeDirector$SensorObserver;-><init>(Landroid/content/Context;Lcom/android/server/display/mode/VotesStorage;Lcom/android/server/display/mode/DisplayModeDirector$Injector;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$SensorObserver;->onDisplayChanged(I)V
+HPLcom/android/server/display/mode/DisplayModeDirector$SensorObserver;->recalculateVotesLocked()V
 HSPLcom/android/server/display/mode/DisplayModeDirector$SettingsObserver;-><init>(Lcom/android/server/display/mode/DisplayModeDirector;Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$SettingsObserver;->setDefaultPeakRefreshRate(Lcom/android/server/display/DisplayDeviceConfig;Z)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$SettingsObserver;->setRefreshRates(Lcom/android/server/display/DisplayDeviceConfig;Z)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$UdfpsObserver;-><init>(Lcom/android/server/display/mode/DisplayModeDirector;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$UdfpsObserver;-><init>(Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector$UdfpsObserver-IA;)V
-HSPLcom/android/server/display/mode/DisplayModeDirector$Vote;-><init>(IIFFFFZF)V
 HSPLcom/android/server/display/mode/DisplayModeDirector$VoteSummary;-><init>()V+]Lcom/android/server/display/mode/DisplayModeDirector$VoteSummary;Lcom/android/server/display/mode/DisplayModeDirector$VoteSummary;
 HSPLcom/android/server/display/mode/DisplayModeDirector$VoteSummary;->reset()V
-HSPLcom/android/server/display/mode/DisplayModeDirector;->-$$Nest$fgetmDeviceConfig(Lcom/android/server/display/mode/DisplayModeDirector;)Landroid/provider/DeviceConfigInterface;
+HSPLcom/android/server/display/mode/DisplayModeDirector;->$r8$lambda$cYe3aL63AjILsX75WRfBHNMFS1I(Lcom/android/server/display/mode/DisplayModeDirector;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector;->-$$Nest$fgetmDeviceConfigDisplaySettings(Lcom/android/server/display/mode/DisplayModeDirector;)Lcom/android/server/display/mode/DisplayModeDirector$DeviceConfigDisplaySettings;
 HSPLcom/android/server/display/mode/DisplayModeDirector;->-$$Nest$fgetmLock(Lcom/android/server/display/mode/DisplayModeDirector;)Ljava/lang/Object;
 HSPLcom/android/server/display/mode/DisplayModeDirector;->-$$Nest$fgetmSupportedModesByDisplay(Lcom/android/server/display/mode/DisplayModeDirector;)Landroid/util/SparseArray;
-HSPLcom/android/server/display/mode/DisplayModeDirector;->-$$Nest$mupdateVoteLocked(Lcom/android/server/display/mode/DisplayModeDirector;ILcom/android/server/display/mode/DisplayModeDirector$Vote;)V+]Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector;
+HSPLcom/android/server/display/mode/DisplayModeDirector;->-$$Nest$fgetmVotesStorage(Lcom/android/server/display/mode/DisplayModeDirector;)Lcom/android/server/display/mode/VotesStorage;
 HSPLcom/android/server/display/mode/DisplayModeDirector;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/display/mode/DisplayModeDirector$Injector;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector;->defaultDisplayDeviceUpdated(Lcom/android/server/display/DisplayDeviceConfig;)V
+HSPLcom/android/server/display/mode/DisplayModeDirector;->disableModeSwitching(Lcom/android/server/display/mode/DisplayModeDirector$VoteSummary;F)V
 HSPLcom/android/server/display/mode/DisplayModeDirector;->equalsWithinFloatTolerance(FF)Z
 HSPLcom/android/server/display/mode/DisplayModeDirector;->filterModes([Landroid/view/Display$Mode;Lcom/android/server/display/mode/DisplayModeDirector$VoteSummary;)Ljava/util/ArrayList;+]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/display/mode/DisplayModeDirector;->getAppRequestObserver()Lcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;
-HSPLcom/android/server/display/mode/DisplayModeDirector;->getDesiredDisplayModeSpecs(I)Lcom/android/server/display/mode/DisplayModeDirector$DesiredDisplayModeSpecs;+]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/display/mode/DisplayModeDirector;->getDesiredDisplayModeSpecs(I)Lcom/android/server/display/mode/DisplayModeDirector$DesiredDisplayModeSpecs;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/mode/VotesStorage;Lcom/android/server/display/mode/VotesStorage;]Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/display/mode/DisplayModeDirector;->getModeSwitchingType()I
-HSPLcom/android/server/display/mode/DisplayModeDirector;->getOrCreateVotesByDisplay(I)Landroid/util/SparseArray;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/display/mode/DisplayModeDirector;->getVotesLocked(I)Landroid/util/SparseArray;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/display/mode/DisplayModeDirector;->isRenderRateAchievable(FLcom/android/server/display/mode/DisplayModeDirector$VoteSummary;)Z
-HSPLcom/android/server/display/mode/DisplayModeDirector;->lambda$new$0(IILcom/android/server/display/mode/DisplayModeDirector$Vote;)V
 HSPLcom/android/server/display/mode/DisplayModeDirector;->notifyDesiredDisplayModeSpecsChangedLocked()V+]Landroid/os/Handler;Lcom/android/server/display/mode/DisplayModeDirector$DisplayModeDirectorHandler;]Landroid/os/Message;Landroid/os/Message;
-HSPLcom/android/server/display/mode/DisplayModeDirector;->selectBaseMode(Lcom/android/server/display/mode/DisplayModeDirector$VoteSummary;Ljava/util/ArrayList;Landroid/view/Display$Mode;)Landroid/view/Display$Mode;+]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/display/mode/DisplayModeDirector;->selectBaseMode(Lcom/android/server/display/mode/DisplayModeDirector$VoteSummary;Ljava/util/ArrayList;Landroid/view/Display$Mode;)Landroid/view/Display$Mode;+]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector;
 HSPLcom/android/server/display/mode/DisplayModeDirector;->summarizeVotes(Landroid/util/SparseArray;IILcom/android/server/display/mode/DisplayModeDirector$VoteSummary;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/mode/DisplayModeDirector$VoteSummary;Lcom/android/server/display/mode/DisplayModeDirector$VoteSummary;
-HSPLcom/android/server/display/mode/DisplayModeDirector;->updateVoteLocked(IILcom/android/server/display/mode/DisplayModeDirector$Vote;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/mode/DisplayModeDirector;Lcom/android/server/display/mode/DisplayModeDirector;
-HSPLcom/android/server/display/mode/DisplayModeDirector;->updateVoteLocked(ILcom/android/server/display/mode/DisplayModeDirector$Vote;)V
-HSPLcom/android/server/display/mode/SkinThermalStatusObserver;-><init>(Lcom/android/server/display/mode/DisplayModeDirector$Injector;Lcom/android/server/display/mode/DisplayModeDirector$BallotBox;)V
-HSPLcom/android/server/display/mode/SkinThermalStatusObserver;-><init>(Lcom/android/server/display/mode/DisplayModeDirector$Injector;Lcom/android/server/display/mode/DisplayModeDirector$BallotBox;Landroid/os/Handler;)V
-HSPLcom/android/server/display/mode/SkinThermalStatusObserver;->updateRefreshRateThermalThrottling(I)V
-HSPLcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;->antiderivative(F)F
-HSPLcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;->calculateIntegral(FF)F
-HSPLcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;->filter(JLcom/android/server/display/utils/RollingBuffer;)F+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;]Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;
-HSPLcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;->getWeights(JLcom/android/server/display/utils/RollingBuffer;)[F+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;]Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;
-HSPLcom/android/server/display/utils/AmbientFilter;->addValue(JF)Z+]Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;
-HSPLcom/android/server/display/utils/AmbientFilter;->getEstimate(J)F+]Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;
-HSPLcom/android/server/display/utils/AmbientFilter;->truncateOldValues(J)V+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;
-HSPLcom/android/server/display/utils/RollingBuffer;->add(JF)V+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;
+HSPLcom/android/server/display/mode/SkinThermalStatusObserver;-><init>(Lcom/android/server/display/mode/DisplayModeDirector$Injector;Lcom/android/server/display/mode/VotesStorage;)V
+HSPLcom/android/server/display/mode/SkinThermalStatusObserver;-><init>(Lcom/android/server/display/mode/DisplayModeDirector$Injector;Lcom/android/server/display/mode/VotesStorage;Landroid/os/Handler;)V
+HSPLcom/android/server/display/mode/SkinThermalStatusObserver;->updateThermalRefreshRateThrottling(I)V
+HSPLcom/android/server/display/mode/SkinThermalStatusObserver;->updateVoteForDisplay(I)V
+HSPLcom/android/server/display/mode/Vote;-><init>(IIFFFFZF)V
+HSPLcom/android/server/display/mode/VotesStorage;-><init>(Lcom/android/server/display/mode/VotesStorage$Listener;)V
+HSPLcom/android/server/display/mode/VotesStorage;->getVotes(I)Landroid/util/SparseArray;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/display/mode/VotesStorage;->updateGlobalVote(ILcom/android/server/display/mode/Vote;)V+]Lcom/android/server/display/mode/VotesStorage;Lcom/android/server/display/mode/VotesStorage;
+HSPLcom/android/server/display/mode/VotesStorage;->updateVote(IILcom/android/server/display/mode/Vote;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/mode/VotesStorage$Listener;Lcom/android/server/display/mode/DisplayModeDirector$$ExternalSyntheticLambda0;
+HSPLcom/android/server/display/state/DisplayStateController;->updateDisplayState(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;ZZ)I
+HPLcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;->antiderivative(F)F
+HPLcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;->calculateIntegral(FF)F
+HPLcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;->filter(JLcom/android/server/display/utils/RollingBuffer;)F+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;]Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;
+HPLcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;->getWeights(JLcom/android/server/display/utils/RollingBuffer;)[F+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;]Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;
+HPLcom/android/server/display/utils/AmbientFilter;->addValue(JF)Z+]Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;
+HPLcom/android/server/display/utils/AmbientFilter;->getEstimate(J)F+]Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;
+HPLcom/android/server/display/utils/AmbientFilter;->truncateOldValues(J)V+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;
+HPLcom/android/server/display/utils/RollingBuffer;->add(JF)V+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;
 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
-HSPLcom/android/server/display/utils/RollingBuffer;->isEmpty()Z
-HSPLcom/android/server/display/utils/RollingBuffer;->offsetOf(I)I
-HSPLcom/android/server/display/utils/RollingBuffer;->size()I
-HSPLcom/android/server/display/utils/RollingBuffer;->truncate(J)V+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;
-HSPLcom/android/server/display/utils/SensorUtils;->findSensor(Landroid/hardware/SensorManager;Ljava/lang/String;Ljava/lang/String;I)Landroid/hardware/Sensor;
+HPLcom/android/server/display/utils/RollingBuffer;->getTime(I)J+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;
+HPLcom/android/server/display/utils/RollingBuffer;->getValue(I)F+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;
+HPLcom/android/server/display/utils/RollingBuffer;->isEmpty()Z
+HPLcom/android/server/display/utils/RollingBuffer;->offsetOf(I)I
+HPLcom/android/server/display/utils/RollingBuffer;->size()I
+HPLcom/android/server/display/utils/RollingBuffer;->truncate(J)V+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;
+HSPLcom/android/server/display/utils/SensorUtils;->findSensor(Landroid/hardware/SensorManager;Ljava/lang/String;Ljava/lang/String;I)Landroid/hardware/Sensor;+]Landroid/hardware/Sensor;Landroid/hardware/Sensor;]Landroid/hardware/SensorManager;Landroid/hardware/SystemSensorManager;
+HPLcom/android/server/dreams/DreamController$DreamRecord;-><init>(Lcom/android/server/dreams/DreamController;Landroid/os/Binder;Landroid/content/ComponentName;ZZILandroid/os/PowerManager$WakeLock;)V
 HPLcom/android/server/dreams/DreamController;->startDream(Landroid/os/Binder;Landroid/content/ComponentName;ZZILandroid/os/PowerManager$WakeLock;Landroid/content/ComponentName;Ljava/lang/String;)V
 HPLcom/android/server/dreams/DreamController;->stopDreamInstance(ZLjava/lang/String;Lcom/android/server/dreams/DreamController$DreamRecord;)V
 HSPLcom/android/server/dreams/DreamManagerService$LocalService;->isDreaming()Z
@@ -4084,7 +4391,7 @@
 HSPLcom/android/server/firewall/IntentFirewall$FirewallHandler;-><init>(Lcom/android/server/firewall/IntentFirewall;Landroid/os/Looper;)V
 HSPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;-><init>()V
 HSPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;-><init>(Lcom/android/server/firewall/IntentFirewall$FirewallIntentResolver-IA;)V
-HSPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;->queryByComponent(Landroid/content/ComponentName;Ljava/util/List;)V
+HSPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;->queryByComponent(Landroid/content/ComponentName;Ljava/util/List;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;->sortResults(Ljava/util/List;)V
 HSPLcom/android/server/firewall/IntentFirewall$RuleObserver;-><init>(Lcom/android/server/firewall/IntentFirewall;Ljava/io/File;)V
 HSPLcom/android/server/firewall/IntentFirewall;-><clinit>()V
@@ -4124,270 +4431,329 @@
 HSPLcom/android/server/firewall/StringFilter$ValueProvider;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/firewall/StringFilter;-><clinit>()V
 HSPLcom/android/server/graphics/fonts/FontManagerService$Lifecycle$1;->getSerializedSystemFontMap()Landroid/os/SharedMemory;
+HSPLcom/android/server/graphics/fonts/FontManagerService;->getCurrentFontMap()Landroid/os/SharedMemory;
 HSPLcom/android/server/health/HealthRegCallbackAidl$HalInfoCallback;->healthInfoChanged(Landroid/hardware/health/HealthInfo;)V
 HSPLcom/android/server/health/HealthRegCallbackAidl;->-$$Nest$fgetmServiceInfoCallback(Lcom/android/server/health/HealthRegCallbackAidl;)Lcom/android/server/health/HealthInfoCallback;
-HPLcom/android/server/health/HealthServiceWrapperAidl;->getProperty(ILandroid/os/BatteryProperty;)I+]Lcom/android/server/health/HealthServiceWrapperAidl;Lcom/android/server/health/HealthServiceWrapperAidl;
-HPLcom/android/server/health/HealthServiceWrapperAidl;->getPropertyInternal(ILandroid/os/BatteryProperty;)I+]Landroid/hardware/health/IHealth;Landroid/hardware/health/IHealth$Stub$Proxy;]Landroid/os/BatteryProperty;Landroid/os/BatteryProperty;]Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;
+HPLcom/android/server/health/HealthServiceWrapperAidl;->getHealthInfo()Landroid/hardware/health/HealthInfo;
+HSPLcom/android/server/health/HealthServiceWrapperAidl;->getProperty(ILandroid/os/BatteryProperty;)I+]Lcom/android/server/health/HealthServiceWrapperAidl;Lcom/android/server/health/HealthServiceWrapperAidl;
+HSPLcom/android/server/health/HealthServiceWrapperAidl;->getPropertyInternal(ILandroid/os/BatteryProperty;)I+]Landroid/hardware/health/IHealth;Landroid/hardware/health/IHealth$Stub$Proxy;]Landroid/os/BatteryProperty;Landroid/os/BatteryProperty;]Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;
 HSPLcom/android/server/health/HealthServiceWrapperAidl;->traceBegin(Ljava/lang/String;)V
 HSPLcom/android/server/health/HealthServiceWrapperAidl;->traceEnd()V
-HPLcom/android/server/infra/AbstractMasterSystemService$1;->onPackageModified(Ljava/lang/String;)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/selectiontoolbar/SelectionToolbarServiceNameResolver;,Lcom/android/server/infra/SecureSettingsServiceNameResolver;,Lcom/android/server/infra/FrameworkResourcesServiceNameResolver;
 HSPLcom/android/server/infra/AbstractMasterSystemService;->assertCalledByPackageOwner(Ljava/lang/String;)V
 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;->peekServiceForUserLocked(I)Lcom/android/server/infra/AbstractPerUserSystemService;
-HSPLcom/android/server/infra/AbstractMasterSystemService;->peekServiceListForUserLocked(I)Ljava/util/List;
-HPLcom/android/server/infra/AbstractPerUserSystemService;->getServiceComponentName()Landroid/content/ComponentName;+]Landroid/content/pm/ServiceInfo;Landroid/content/pm/ServiceInfo;
+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;
+HPLcom/android/server/infra/AbstractMasterSystemService;->visitServicesLocked(Lcom/android/server/infra/AbstractMasterSystemService$Visitor;)V
+HSPLcom/android/server/infra/AbstractPerUserSystemService;->getServiceComponentName()Landroid/content/ComponentName;+]Landroid/content/pm/ServiceInfo;Landroid/content/pm/ServiceInfo;
 HSPLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->readServiceName(I)Ljava/lang/String;
 HSPLcom/android/server/infra/ServiceNameBaseResolver;->getDefaultServiceNameList(I)[Ljava/lang/String;
 HSPLcom/android/server/infra/ServiceNameBaseResolver;->getServiceNameList(I)[Ljava/lang/String;
 HSPLcom/android/server/infra/ServiceNameBaseResolver;->isTemporary(I)Z
 HSPLcom/android/server/input/InputManagerService$AdditionalDisplayInputProperties;-><init>()V
 HSPLcom/android/server/input/InputManagerService$AdditionalDisplayInputProperties;->reset()V
-HSPLcom/android/server/input/InputManagerService$LocalService;->notifyUserActivity()V
+HPLcom/android/server/input/InputManagerService$LocalService;->notifyUserActivity()V+]Lcom/android/server/input/InputManagerService$KeyboardBacklightControllerInterface;Lcom/android/server/input/KeyboardBacklightController;
+HPLcom/android/server/input/InputManagerService;->-$$Nest$fgetmKeyboardBacklightController(Lcom/android/server/input/InputManagerService;)Lcom/android/server/input/InputManagerService$KeyboardBacklightControllerInterface;
 HSPLcom/android/server/input/InputManagerService;-><clinit>()V
 HSPLcom/android/server/input/InputManagerService;->deliverInputDevicesChanged([Landroid/view/InputDevice;)V+]Landroid/view/InputDevice;Landroid/view/InputDevice;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/input/InputManagerService$InputDevicesChangedListenerRecord;Lcom/android/server/input/InputManagerService$InputDevicesChangedListenerRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/input/InputManagerService;->getExcludedDeviceNames()[Ljava/lang/String;
 HSPLcom/android/server/input/InputManagerService;->getInputDevice(I)Landroid/view/InputDevice;
 HPLcom/android/server/input/InputManagerService;->hasKeys(II[I[Z)Z
+HSPLcom/android/server/input/InputManagerService;->notifyInputDevicesChanged([Landroid/view/InputDevice;)V
 HSPLcom/android/server/input/InputManagerService;->setDisplayViewportsInternal(Ljava/util/List;)V
+HSPLcom/android/server/input/KeyboardBacklightController;->$r8$lambda$9qeM95QcVs1gAs9tKiL6-3hQWHQ(Lcom/android/server/input/KeyboardBacklightController;Landroid/os/Message;)Z
 HSPLcom/android/server/input/KeyboardBacklightController;->handleMessage(Landroid/os/Message;)Z+]Lcom/android/server/input/KeyboardBacklightController;Lcom/android/server/input/KeyboardBacklightController;]Ljava/lang/Boolean;Ljava/lang/Boolean;
-HSPLcom/android/server/input/KeyboardBacklightController;->handleUserActivity()V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/input/KeyboardBacklightController;->notifyUserActivity()V
+HPLcom/android/server/input/KeyboardBacklightController;->handleUserActivity()V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/input/KeyboardBacklightController;->notifyUserActivity()V
+HSPLcom/android/server/input/KeyboardLayoutManager$$ExternalSyntheticLambda4;->visitKeyboardLayout(Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
 HSPLcom/android/server/input/KeyboardLayoutManager;->getLocalesFromLanguageTags(Ljava/lang/String;)Landroid/os/LocaleList;
-HSPLcom/android/server/input/KeyboardLayoutManager;->visitKeyboardLayoutsInPackage(Landroid/content/pm/PackageManager;Landroid/content/pm/ActivityInfo;Ljava/lang/String;ILcom/android/server/input/KeyboardLayoutManager$KeyboardLayoutVisitor;)V
+HSPLcom/android/server/input/KeyboardLayoutManager;->visitKeyboardLayoutsInPackage(Landroid/content/pm/PackageManager;Landroid/content/pm/ActivityInfo;Ljava/lang/String;ILcom/android/server/input/KeyboardLayoutManager$KeyboardLayoutVisitor;)V+]Lcom/android/server/input/KeyboardLayoutManager$KeyboardLayoutVisitor;Lcom/android/server/input/KeyboardLayoutManager$$ExternalSyntheticLambda4;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/inputmethod/AdditionalSubtypeUtils;->loadFromFile(Landroid/util/ArrayMap;Landroid/util/AtomicFile;)V
+HPLcom/android/server/inputmethod/AdditionalSubtypeUtils;->saveToFile(Landroid/util/ArrayMap;Landroid/util/ArrayMap;Landroid/util/AtomicFile;)V
+HSPLcom/android/server/inputmethod/HardwareKeyboardShortcutController;->reset(Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;)V
 HPLcom/android/server/inputmethod/IInputMethodInvoker;->startInput(Landroid/os/IBinder;Lcom/android/internal/inputmethod/IRemoteInputConnection;Landroid/view/inputmethod/EditorInfo;ZILandroid/window/ImeOnBackInvokedDispatcher;)V
 HPLcom/android/server/inputmethod/ImeTrackerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/inputmethod/ImeTrackerService;Landroid/view/inputmethod/ImeTracker$Token;)V
+HPLcom/android/server/inputmethod/ImeTrackerService$History$Entry;->-$$Nest$fputmPhase(Lcom/android/server/inputmethod/ImeTrackerService$History$Entry;I)V
 HPLcom/android/server/inputmethod/ImeTrackerService$History$Entry;-><init>(Ljava/lang/String;IIIII)V
-HPLcom/android/server/inputmethod/ImeTrackerService$History;->getEntry(Landroid/os/IBinder;)Lcom/android/server/inputmethod/ImeTrackerService$History$Entry;
-HPLcom/android/server/inputmethod/ImeTrackerService$History;->setFinished(Landroid/view/inputmethod/ImeTracker$Token;II)V
+HPLcom/android/server/inputmethod/ImeTrackerService$History;->addEntry(Landroid/os/IBinder;Lcom/android/server/inputmethod/ImeTrackerService$History$Entry;)V
+HPLcom/android/server/inputmethod/ImeTrackerService$History;->getEntry(Landroid/os/IBinder;)Lcom/android/server/inputmethod/ImeTrackerService$History$Entry;+]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
+HPLcom/android/server/inputmethod/ImeTrackerService$History;->setFinished(Landroid/view/inputmethod/ImeTracker$Token;II)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Landroid/view/inputmethod/ImeTracker$Token;Landroid/view/inputmethod/ImeTracker$Token;
 HPLcom/android/server/inputmethod/ImeTrackerService;->onProgress(Landroid/os/IBinder;I)V
 HPLcom/android/server/inputmethod/ImeTrackerService;->onRequestHide(Ljava/lang/String;III)Landroid/view/inputmethod/ImeTracker$Token;
+HPLcom/android/server/inputmethod/ImeVisibilityStateComputer$1;->onImeInputTargetVisibilityChanged(Landroid/os/IBinder;ZZ)V
 HPLcom/android/server/inputmethod/ImeVisibilityStateComputer$ImeTargetWindowState;-><init>(IIZZZ)V
+HPLcom/android/server/inputmethod/ImeVisibilityStateComputer;->canHideIme(Landroid/view/inputmethod/ImeTracker$Token;I)Z
+HPLcom/android/server/inputmethod/ImeVisibilityStateComputer;->clearImeShowFlags()V
+HPLcom/android/server/inputmethod/ImeVisibilityStateComputer;->computeImeDisplayId(Lcom/android/server/inputmethod/ImeVisibilityStateComputer$ImeTargetWindowState;I)I
 HPLcom/android/server/inputmethod/ImeVisibilityStateComputer;->computeState(Lcom/android/server/inputmethod/ImeVisibilityStateComputer$ImeTargetWindowState;Z)Lcom/android/server/inputmethod/ImeVisibilityStateComputer$ImeVisibilityResult;
-HPLcom/android/server/inputmethod/ImeVisibilityStateComputer;->getWindowTokenFrom(Landroid/os/IBinder;)Landroid/os/IBinder;+]Lcom/android/server/inputmethod/ImeVisibilityStateComputer$ImeTargetWindowState;Lcom/android/server/inputmethod/ImeVisibilityStateComputer$ImeTargetWindowState;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Ljava/util/Iterator;Ljava/util/WeakHashMap$KeyIterator;]Ljava/util/Set;Ljava/util/WeakHashMap$KeySet;
+HPLcom/android/server/inputmethod/ImeVisibilityStateComputer;->getOrCreateWindowState(Landroid/os/IBinder;)Lcom/android/server/inputmethod/ImeVisibilityStateComputer$ImeTargetWindowState;
+HPLcom/android/server/inputmethod/ImeVisibilityStateComputer;->getWindowStateOrNull(Landroid/os/IBinder;)Lcom/android/server/inputmethod/ImeVisibilityStateComputer$ImeTargetWindowState;
+HPLcom/android/server/inputmethod/ImeVisibilityStateComputer;->getWindowTokenFrom(Landroid/os/IBinder;)Landroid/os/IBinder;+]Lcom/android/server/inputmethod/ImeVisibilityStateComputer$ImeTargetWindowState;Lcom/android/server/inputmethod/ImeVisibilityStateComputer$ImeTargetWindowState;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
 HPLcom/android/server/inputmethod/ImeVisibilityStateComputer;->requestImeVisibility(Landroid/os/IBinder;Z)V
-HSPLcom/android/server/inputmethod/InputMethodManagerInternal;->get()Lcom/android/server/inputmethod/InputMethodManagerInternal;
+HPLcom/android/server/inputmethod/ImeVisibilityStateComputer;->setWindowState(Landroid/os/IBinder;Lcom/android/server/inputmethod/ImeVisibilityStateComputer$ImeTargetWindowState;)V
+HPLcom/android/server/inputmethod/ImeVisibilityStateComputer;->setWindowStateInner(Landroid/os/IBinder;Lcom/android/server/inputmethod/ImeVisibilityStateComputer$ImeTargetWindowState;)V
+HSPLcom/android/server/inputmethod/InputMethodBindingController;->getCurToken()Landroid/os/IBinder;
+HPLcom/android/server/inputmethod/InputMethodManagerInternal;->get()Lcom/android/server/inputmethod/InputMethodManagerInternal;
+HPLcom/android/server/inputmethod/InputMethodManagerService$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Z)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$$ExternalSyntheticLambda7;->runOrThrow()V
+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;Ljava/lang/String;)V
 HPLcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory$Entry;->set(Lcom/android/server/inputmethod/InputMethodManagerService$StartInputInfo;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory;->addEntry(Lcom/android/server/inputmethod/InputMethodManagerService$StartInputInfo;)V
 HPLcom/android/server/inputmethod/InputMethodManagerService$StartInputInfo;-><init>(ILandroid/os/IBinder;ILjava/lang/String;IZIILandroid/os/IBinder;Landroid/view/inputmethod/EditorInfo;II)V
+HSPLcom/android/server/inputmethod/InputMethodManagerService;->addClient(Lcom/android/internal/inputmethod/IInputMethodClient;Lcom/android/internal/inputmethod/IRemoteInputConnection;I)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->attachNewAccessibilityLocked(IZ)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->attachNewInputLocked(IZ)Lcom/android/internal/inputmethod/InputBindResult;
+HSPLcom/android/server/inputmethod/InputMethodManagerService;->buildInputMethodListLocked(Z)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->canCallerAccessInputMethod(Ljava/lang/String;IILcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;)Z
 HPLcom/android/server/inputmethod/InputMethodManagerService;->canInteractWithImeLocked(ILcom/android/internal/inputmethod/IInputMethodClient;Ljava/lang/String;Landroid/view/inputmethod/ImeTracker$Token;)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->createStatsTokenForFocusedClient(ZII)Landroid/view/inputmethod/ImeTracker$Token;
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->filterInputMethodServices(Landroid/util/ArrayMap;Landroid/util/ArrayMap;Ljava/util/ArrayList;Ljava/util/List;Landroid/content/Context;Ljava/util/List;)V
-HSPLcom/android/server/inputmethod/InputMethodManagerService;->getCurTokenLocked()Landroid/os/IBinder;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getCurMethodLocked()Lcom/android/server/inputmethod/IInputMethodInvoker;
+HSPLcom/android/server/inputmethod/InputMethodManagerService;->getCurTokenLocked()Landroid/os/IBinder;+]Lcom/android/server/inputmethod/InputMethodBindingController;Lcom/android/server/inputmethod/InputMethodBindingController;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getEnabledInputMethodListLocked(II)Ljava/util/List;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getInputMethodNavButtonFlagsLocked()I
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getSequenceNumberLocked()I
 HPLcom/android/server/inputmethod/InputMethodManagerService;->hideCurrentInputLocked(Landroid/os/IBinder;Landroid/view/inputmethod/ImeTracker$Token;ILandroid/os/ResultReceiver;I)Z
 HPLcom/android/server/inputmethod/InputMethodManagerService;->hideSoftInput(Lcom/android/internal/inputmethod/IInputMethodClient;Landroid/os/IBinder;Landroid/view/inputmethod/ImeTracker$Token;ILandroid/os/ResultReceiver;I)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->isSelectedMethodBoundLocked()Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->isShowRequestedForCurrentWindow()Z
 HPLcom/android/server/inputmethod/InputMethodManagerService;->lambda$reportPerceptibleAsync$5(Landroid/os/IBinder;Z)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->onShowHideSoftInputRequested(ZLandroid/os/IBinder;ILandroid/view/inputmethod/ImeTracker$Token;)V
+HSPLcom/android/server/inputmethod/InputMethodManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->queryInputMethodServicesInternal(Landroid/content/Context;ILandroid/util/ArrayMap;Landroid/util/ArrayMap;Ljava/util/ArrayList;ILjava/util/List;)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->reportStartInput(Landroid/os/IBinder;Landroid/os/IBinder;)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->requestClientSessionForAccessibilityLocked(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->setEnabledSessionForAccessibilityLocked(Landroid/util/SparseArray;)V
-HPLcom/android/server/inputmethod/InputMethodManagerService;->shouldShowImeSwitcherLocked(I)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->setEnabledSessionLocked(Lcom/android/server/inputmethod/InputMethodManagerService$SessionState;)V
+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;]Lcom/android/server/inputmethod/InputMethodMenuController;Lcom/android/server/inputmethod/InputMethodMenuController;
 HPLcom/android/server/inputmethod/InputMethodManagerService;->startInputOrWindowGainedFocus(ILcom/android/internal/inputmethod/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/inputmethod/IRemoteInputConnection;Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;IILandroid/window/ImeOnBackInvokedDispatcher;)Lcom/android/internal/inputmethod/InputBindResult;
 HPLcom/android/server/inputmethod/InputMethodManagerService;->startInputOrWindowGainedFocusInternalLocked(ILcom/android/internal/inputmethod/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/inputmethod/IRemoteInputConnection;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/inputmethod/IRemoteInputConnection;Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;Landroid/view/inputmethod/EditorInfo;IIILandroid/window/ImeOnBackInvokedDispatcher;)Lcom/android/internal/inputmethod/InputBindResult;
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->unbindCurrentClientLocked(I)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->updateSystemUiLocked(II)V
-HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList;->getSortedInputMethodAndSubtypeList(ZZZ)Ljava/util/List;+]Landroid/view/inputmethod/InputMethodSubtype;Landroid/view/inputmethod/InputMethodSubtype;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;]Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/inputmethod/InputMethodSubtypeSwitchingController$InputMethodAndSubtypeList;->getSortedInputMethodAndSubtypeList(ZZZ)Ljava/util/List;+]Landroid/view/inputmethod/InputMethodSubtype;Landroid/view/inputmethod/InputMethodSubtype;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;]Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;-><init>(Landroid/content/Context;Landroid/util/ArrayMap;IZ)V
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->buildInputMethodsAndSubtypeList(Ljava/lang/String;Landroid/text/TextUtils$SimpleStringSplitter;Landroid/text/TextUtils$SimpleStringSplitter;)Ljava/util/List;+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/TextUtils$SimpleStringSplitter;Landroid/text/TextUtils$SimpleStringSplitter;
-HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->createEnabledInputMethodListLocked(Ljava/util/List;Ljava/util/function/Predicate;)Ljava/util/ArrayList;
+HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->createEnabledInputMethodListLocked(Ljava/util/List;Ljava/util/function/Predicate;)Ljava/util/ArrayList;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Predicate;Lcom/android/server/inputmethod/InputMethodManagerService$$ExternalSyntheticLambda3;,Lcom/android/server/inputmethod/InputMethodManagerService$$ExternalSyntheticLambda8;]Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodInfo;
+HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getCurrentUserId()I
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getEnabledInputMethodListWithFilterLocked(Ljava/util/function/Predicate;)Ljava/util/ArrayList;
-HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getEnabledInputMethodSubtypeListLocked(Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/List;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;]Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/view/inputmethod/InputMethodSubtype;Landroid/view/inputmethod/InputMethodSubtype;
+HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getEnabledInputMethodNames()Ljava/util/List;
+HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getEnabledInputMethodSubtypeListLocked(Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/List;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/view/inputmethod/InputMethodSubtype;Landroid/view/inputmethod/InputMethodSubtype;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;]Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getEnabledInputMethodSubtypeListLocked(Landroid/view/inputmethod/InputMethodInfo;Z)Ljava/util/List;
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getEnabledInputMethodsAndSubtypeListLocked()Ljava/util/List;
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getEnabledInputMethodsStr()Ljava/lang/String;
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getStringForUser(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->initContentWithUserContext(Landroid/content/Context;I)V
+HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->switchCurrentUser(IZ)V
 HSPLcom/android/server/inputmethod/SubtypeUtils;->getImplicitlyApplicableSubtypesLocked(Landroid/content/res/Resources;Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/ArrayList;
-HSPLcom/android/server/inputmethod/SubtypeUtils;->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;
-HSPLcom/android/server/inputmethod/SubtypeUtils;->getSubtypes(Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/ArrayList;
-HSPLcom/android/server/job/JobConcurrencyManager$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/inputmethod/SubtypeUtils;->getSubtypeIdFromHashCode(Landroid/view/inputmethod/InputMethodInfo;I)I+]Landroid/view/inputmethod/InputMethodSubtype;Landroid/view/inputmethod/InputMethodSubtype;]Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodInfo;
+HPLcom/android/server/job/JobConcurrencyManager$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/job/JobConcurrencyManager$$ExternalSyntheticLambda2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLcom/android/server/job/JobConcurrencyManager$AssignmentInfo;->clear()V
-HSPLcom/android/server/job/JobConcurrencyManager$ContextAssignment;->clear()V
-HSPLcom/android/server/job/JobConcurrencyManager$PackageStats;->-$$Nest$madjustRunningCount(Lcom/android/server/job/JobConcurrencyManager$PackageStats;ZZ)V
-HSPLcom/android/server/job/JobConcurrencyManager$PackageStats;->-$$Nest$madjustStagedCount(Lcom/android/server/job/JobConcurrencyManager$PackageStats;ZZ)V
-HSPLcom/android/server/job/JobConcurrencyManager$PackageStats;->-$$Nest$mresetStagedCount(Lcom/android/server/job/JobConcurrencyManager$PackageStats;)V
-HSPLcom/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;
-HSPLcom/android/server/job/JobConcurrencyManager$PackageStats;-><init>()V
-HSPLcom/android/server/job/JobConcurrencyManager$PackageStats;->adjustRunningCount(ZZ)V
-HSPLcom/android/server/job/JobConcurrencyManager$PackageStats;->adjustStagedCount(ZZ)V
-HSPLcom/android/server/job/JobConcurrencyManager$PackageStats;->resetStagedCount()V
-HSPLcom/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$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;
-HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->decrementPendingJobCount(I)V
-HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->getRunningJobCount(I)I
-HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->incrementPendingJobCount(I)V+]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;
+HPLcom/android/server/job/JobConcurrencyManager$AssignmentInfo;->clear()V
+HPLcom/android/server/job/JobConcurrencyManager$ContextAssignment;->clear()V
+HPLcom/android/server/job/JobConcurrencyManager$PackageStats;->-$$Nest$madjustRunningCount(Lcom/android/server/job/JobConcurrencyManager$PackageStats;ZZ)V
+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;
+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;-><init>()V
+HPLcom/android/server/job/JobConcurrencyManager$PackageStats;->adjustRunningCount(ZZ)V
+HPLcom/android/server/job/JobConcurrencyManager$PackageStats;->adjustStagedCount(ZZ)V
+HPLcom/android/server/job/JobConcurrencyManager$PackageStats;->resetStagedCount()V
+HPLcom/android/server/job/JobConcurrencyManager$PackageStats;->setPackage(ILjava/lang/String;)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;
+HPLcom/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;->getRunningJobCount(I)I
+HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->incrementPendingJobCount(I)V
 HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->incrementRunningJobCount(I)V
-HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->maybeAdjustReservations(I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
-HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->onCountDone()V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
-HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->onJobFinished(I)V
-HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->onJobStarted(I)V
-HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->resetCounts()V
-HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->resetStagingCount()V
-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
-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;->$r8$lambda$YXXj2JKIoR5DVmBs4NPyIGYLTXY(Lcom/android/server/job/JobConcurrencyManager$PackageStats;)V
+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;
+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+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->resetCounts()V
+HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->resetStagingCount()V
+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;
+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
+HPLcom/android/server/job/JobConcurrencyManager;->$r8$lambda$YXXj2JKIoR5DVmBs4NPyIGYLTXY(Lcom/android/server/job/JobConcurrencyManager$PackageStats;)V
 HPLcom/android/server/job/JobConcurrencyManager;->$r8$lambda$neqqAqre06aYhSdsY9gZuDkQR8M(Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;)I
 HSPLcom/android/server/job/JobConcurrencyManager;->assignJobsToContextsInternalLocked()V+]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
 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;
-HSPLcom/android/server/job/JobConcurrencyManager;->carryOutAssignmentChangesLocked(Landroid/util/ArraySet;)V+]Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
+HPLcom/android/server/job/JobConcurrencyManager;->carryOutAssignmentChangesLocked(Landroid/util/ArraySet;)V+]Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
 HPLcom/android/server/job/JobConcurrencyManager;->cleanUpAfterAssignmentChangesLocked(Landroid/util/ArraySet;Landroid/util/ArraySet;Ljava/util/List;Ljava/util/List;Lcom/android/server/job/JobConcurrencyManager$AssignmentInfo;Landroid/util/SparseIntArray;)V+]Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]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;]Lcom/android/server/job/JobConcurrencyManager$AssignmentInfo;Lcom/android/server/job/JobConcurrencyManager$AssignmentInfo;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;
-HSPLcom/android/server/job/JobConcurrencyManager;->determineAssignmentsLocked(Landroid/util/ArraySet;Landroid/util/ArraySet;Ljava/util/List;Ljava/util/List;Lcom/android/server/job/JobConcurrencyManager$AssignmentInfo;)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;]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;]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;->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;->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;->determineAssignmentsLocked(Landroid/util/ArraySet;Landroid/util/ArraySet;Ljava/util/List;Ljava/util/List;Lcom/android/server/job/JobConcurrencyManager$AssignmentInfo;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]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;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;
+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;
+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;
 HSPLcom/android/server/job/JobConcurrencyManager;->getRunningJobsLocked()Landroid/util/ArraySet;
 HPLcom/android/server/job/JobConcurrencyManager;->hasImmediacyPrivilegeLocked(Lcom/android/server/job/controllers/JobStatus;Landroid/util/SparseIntArray;)Z+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
 HSPLcom/android/server/job/JobConcurrencyManager;->isJobRunningLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
-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;->isNotificationAssociatedWithAnyUserInitiatedJobs(IILjava/lang/String;)Z
+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;
 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;
-HSPLcom/android/server/job/JobConcurrencyManager;->noteConcurrency()V
-HSPLcom/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;]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;]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;->prepareForAssignmentDeterminationLocked(Landroid/util/ArraySet;Ljava/util/List;Ljava/util/List;Lcom/android/server/job/JobConcurrencyManager$AssignmentInfo;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]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;]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;->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;+]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;]Landroid/os/PowerManager;Landroid/os/PowerManager;]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/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/restrictions/JobRestriction;Lcom/android/server/job/restrictions/ThermalStatusRestriction;
-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;->noteConcurrency(Z)V+]Lcom/android/modules/expresslog/Histogram;Lcom/android/modules/expresslog/Histogram;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;
+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+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]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;]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;]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;->prepareForAssignmentDeterminationLocked(Landroid/util/ArraySet;Ljava/util/List;Ljava/util/List;Lcom/android/server/job/JobConcurrencyManager$AssignmentInfo;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]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;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+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
+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;]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;]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;]Lcom/android/server/job/restrictions/JobRestriction;Lcom/android/server/job/restrictions/ThermalStatusRestriction;
+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+]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;->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/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/JobNotificationCoordinator;->removeNotificationAssociation(Lcom/android/server/job/JobServiceContext;I)V
-HSPLcom/android/server/job/JobPackageTracker$DataSet;->decActive(ILjava/lang/String;JI)V
-HSPLcom/android/server/job/JobPackageTracker$DataSet;->decPending(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
-HSPLcom/android/server/job/JobPackageTracker$DataSet;->incPending(ILjava/lang/String;J)V
-HSPLcom/android/server/job/JobPackageTracker$PackageEntry;->getActiveTime(J)J
-HSPLcom/android/server/job/JobPackageTracker$PackageEntry;->getPendingTime(J)J
-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;
-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
-HSPLcom/android/server/job/JobPackageTracker;->noteConcurrency(II)V
-HSPLcom/android/server/job/JobPackageTracker;->noteInactive(Lcom/android/server/job/controllers/JobStatus;ILjava/lang/String;)V
-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/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/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/JobNotificationCoordinator;->isNotificationAssociatedWithAnyUserInitiatedJobs(IILjava/lang/String;)Z+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;
+HPLcom/android/server/job/JobNotificationCoordinator;->isNotificationChannelAssociatedWithAnyUserInitiatedJobs(Ljava/lang/String;ILjava/lang/String;)Z
+HPLcom/android/server/job/JobNotificationCoordinator;->removeNotificationAssociation(Lcom/android/server/job/JobServiceContext;ILcom/android/server/job/controllers/JobStatus;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+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;->decPending(ILjava/lang/String;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
+HPLcom/android/server/job/JobPackageTracker$DataSet;->incPending(ILjava/lang/String;J)V
+HPLcom/android/server/job/JobPackageTracker$PackageEntry;->getActiveTime(J)J
+HPLcom/android/server/job/JobPackageTracker$PackageEntry;->getPendingTime(J)J
+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;
+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
+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;
 HPLcom/android/server/job/JobSchedulerService$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/job/JobSchedulerService$$ExternalSyntheticLambda3;->getCategory(ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/utils/quota/Category;
 HSPLcom/android/server/job/JobSchedulerService$1;->millis()J
 HSPLcom/android/server/job/JobSchedulerService$2;->millis()J
+HPLcom/android/server/job/JobSchedulerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/job/JobSchedulerService$4;->onUidActive(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;
 HSPLcom/android/server/job/JobSchedulerService$BatteryStateTracker;->isBatteryNotLow()Z
 HSPLcom/android/server/job/JobSchedulerService$BatteryStateTracker;->isCharging()Z
-HSPLcom/android/server/job/JobSchedulerService$JobHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/DeviceIdleJobsController;Lcom/android/server/job/controllers/DeviceIdleJobsController;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Ljava/util/List;Ljava/util/ArrayList;]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;
+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;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
 HPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->canPersistJobs(II)Z
-HPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->cancel(Ljava/lang/String;I)V
-HSPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->enforceValidJobRequest(IILandroid/app/job/JobInfo;)V
+HPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->cancel(Ljava/lang/String;I)V+]Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;
+HSPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->enforceValidJobRequest(IILandroid/app/job/JobInfo;)V+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/SystemService;Lcom/android/server/job/JobSchedulerService;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->enqueue(Ljava/lang/String;Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I
 HPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->getAllPendingJobsInNamespace(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->getPendingJob(Ljava/lang/String;I)Landroid/app/job/JobInfo;
-HSPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->schedule(Ljava/lang/String;Landroid/app/job/JobInfo;)I
+HSPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->schedule(Ljava/lang/String;Landroid/app/job/JobInfo;)I+]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;
 HPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->scheduleAsPackage(Ljava/lang/String;Landroid/app/job/JobInfo;Ljava/lang/String;ILjava/lang/String;)I
-HSPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->validateJob(Landroid/app/job/JobInfo;IILjava/lang/String;Landroid/app/job/JobWorkItem;)I
-HSPLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;->accept(Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;,Ljava/time/Clock$SystemClock;]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;]Lcom/android/server/job/controllers/PrefetchController;Lcom/android/server/job/controllers/PrefetchController;
+HSPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->validateJob(Landroid/app/job/JobInfo;IIILjava/lang/String;Landroid/app/job/JobWorkItem;)I+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Landroid/app/job/JobWorkItem;Landroid/app/job/JobWorkItem;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;
+HSPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->validateNamespace(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
+HSPLcom/android/server/job/JobSchedulerService$LocalService;->isAppConsideredBuggy(ILjava/lang/String;ILjava/lang/String;)Z+]Lcom/android/server/utils/quota/CountQuotaTracker;Lcom/android/server/utils/quota/CountQuotaTracker;
+HPLcom/android/server/job/JobSchedulerService$LocalService;->isNotificationAssociatedWithAnyUserInitiatedJobs(IILjava/lang/String;)Z+]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
+HSPLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;->accept(Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;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;
 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+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
 HSPLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;->reset()V
-HPLcom/android/server/job/JobSchedulerService$ReadyJobQueueFunctor;->accept(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/job/JobSchedulerService$ReadyJobQueueFunctor;->accept(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 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;->$r8$lambda$95k5ieYKaRr8XC3GW_a_cl9oQyE(Lcom/android/server/job/JobSchedulerService;ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/utils/quota/Category;
+HPLcom/android/server/job/JobSchedulerService;->$r8$lambda$IvGMNnGnDHWe3cnEHLCTsy5-BNo(Lcom/android/server/job/JobSchedulerService;I)Z
 HSPLcom/android/server/job/JobSchedulerService;->-$$Nest$fgetmPendingJobQueue(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/PendingJobQueue;
+HSPLcom/android/server/job/JobSchedulerService;->-$$Nest$fgetmQuotaTracker(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/utils/quota/CountQuotaTracker;
 HPLcom/android/server/job/JobSchedulerService;->-$$Nest$mcancelJob(Lcom/android/server/job/JobSchedulerService;ILjava/lang/String;III)Z
-HSPLcom/android/server/job/JobSchedulerService;->-$$Nest$mcheckChangedJobListLocked(Lcom/android/server/job/JobSchedulerService;)V
+HSPLcom/android/server/job/JobSchedulerService;->-$$Nest$mgetPendingJob(Lcom/android/server/job/JobSchedulerService;ILjava/lang/String;I)Landroid/app/job/JobInfo;
 HPLcom/android/server/job/JobSchedulerService;->-$$Nest$mgetPendingJobsInNamespace(Lcom/android/server/job/JobSchedulerService;ILjava/lang/String;)Ljava/util/List;
-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;
+HPLcom/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;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 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(ILjava/lang/String;III)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
-HSPLcom/android/server/job/JobSchedulerService;->checkChangedJobListLocked()V
-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;->checkChangedJobListLocked()V+]Landroid/os/Handler;Lcom/android/server/job/JobSchedulerService$JobHandler;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;
+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;
 HSPLcom/android/server/job/JobSchedulerService;->deriveWorkSource(ILjava/lang/String;)Landroid/os/WorkSource;+]Lcom/android/server/SystemService;Lcom/android/server/job/JobSchedulerService;
-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;
-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;
+HSPLcom/android/server/job/JobSchedulerService;->evaluateControllerStatesLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]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;
+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;->getJobStore()Lcom/android/server/job/JobStore;
-HSPLcom/android/server/job/JobSchedulerService;->getMaxJobExecutionTimeMs(Lcom/android/server/job/controllers/JobStatus;)J+]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/QuotaController;Lcom/android/server/job/controllers/QuotaController;
-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;
-HSPLcom/android/server/job/JobSchedulerService;->getPackagesForUidLocked(I)Landroid/util/ArraySet;
+HPLcom/android/server/job/JobSchedulerService;->getMaxJobExecutionTimeMs(Lcom/android/server/job/controllers/JobStatus;)J+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Lcom/android/server/utils/quota/CountQuotaTracker;Lcom/android/server/utils/quota/CountQuotaTracker;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]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;->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(ILjava/lang/String;I)Landroid/app/job/JobInfo;+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
 HSPLcom/android/server/job/JobSchedulerService;->getPendingJobQueue()Lcom/android/server/job/PendingJobQueue;
 HPLcom/android/server/job/JobSchedulerService;->getPendingJobsInNamespace(ILjava/lang/String;)Ljava/util/List;+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;]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;II)Lcom/android/server/job/controllers/JobStatus;
-HSPLcom/android/server/job/JobSchedulerService;->getRescheduleJobForPeriodic(Lcom/android/server/job/controllers/JobStatus;)Lcom/android/server/job/controllers/JobStatus;
+HPLcom/android/server/job/JobSchedulerService;->getRescheduleJobForFailureLocked(Lcom/android/server/job/controllers/JobStatus;II)Lcom/android/server/job/controllers/JobStatus;+]Ljava/time/Clock;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;
 HSPLcom/android/server/job/JobSchedulerService;->getUidBias(I)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HPLcom/android/server/job/JobSchedulerService;->getUidCapabilities(I)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HPLcom/android/server/job/JobSchedulerService;->getUidProcState(I)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HPLcom/android/server/job/JobSchedulerService;->hasPermission(IILjava/lang/String;)Z
 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;
-HSPLcom/android/server/job/JobSchedulerService;->isComponentUsable(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
+HPLcom/android/server/job/JobSchedulerService;->isComponentUsable(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]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;
+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;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/job/JobSchedulerService;->isUidActive(I)Z
+HSPLcom/android/server/job/JobSchedulerService;->lambda$new$2(ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/utils/quota/Category;
 HSPLcom/android/server/job/JobSchedulerService;->lambda$onBootPhase$4(Lcom/android/server/job/controllers/JobStatus;)V
-HPLcom/android/server/job/JobSchedulerService;->lambda$static$0(ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/utils/quota/Category;
+HPLcom/android/server/job/JobSchedulerService;->maybeProcessBuggyJob(Lcom/android/server/job/controllers/JobStatus;I)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/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/utils/quota/CountQuotaTracker;Lcom/android/server/utils/quota/CountQuotaTracker;
 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;
-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;
+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;->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;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
-HSPLcom/android/server/job/JobSchedulerService;->onJobCompletedLocked(Lcom/android/server/job/controllers/JobStatus;IIZ)V
+HPLcom/android/server/job/JobSchedulerService;->onJobCompletedLocked(Lcom/android/server/job/controllers/JobStatus;IIZ)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/os/Handler;Lcom/android/server/job/JobSchedulerService$JobHandler;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Landroid/os/Message;Landroid/os/Message;]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;->queueReadyJobsForExecutionLocked()V
 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;
 HSPLcom/android/server/job/JobSchedulerService;->resetPendingJobReasonCache(Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;
-HSPLcom/android/server/job/JobSchedulerService;->scheduleAsPackage(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)I
-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;->scheduleAsPackage(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/modules/expresslog/Histogram;Lcom/android/modules/expresslog/Histogram;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]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/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/app/job/JobWorkItem;Landroid/app/job/JobWorkItem;]Lcom/android/server/utils/quota/CountQuotaTracker;Lcom/android/server/utils/quota/CountQuotaTracker;
+HSPLcom/android/server/job/JobSchedulerService;->standbyBucketForPackage(Ljava/lang/String;IJ)I+]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 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/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
-HSPLcom/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;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/StateController;megamorphic_types]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
-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;
-HSPLcom/android/server/job/JobServiceContext$JobCallback;-><init>(Lcom/android/server/job/JobServiceContext;)V
-HSPLcom/android/server/job/JobServiceContext$JobCallback;->acknowledgeStartMessage(IZ)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;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/StateController;megamorphic_types]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
+HSPLcom/android/server/job/JobSchedulerService;->updateUidState(III)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;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HPLcom/android/server/job/JobServiceContext$JobCallback;-><init>(Lcom/android/server/job/JobServiceContext;)V
+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;->completeWork(II)Z
 HPLcom/android/server/job/JobServiceContext$JobCallback;->dequeueWork(I)Landroid/app/job/JobWorkItem;
-HSPLcom/android/server/job/JobServiceContext$JobCallback;->jobFinished(IZ)V
-HSPLcom/android/server/job/JobServiceContext;->applyStoppedReasonLocked(Ljava/lang/String;)V
-HSPLcom/android/server/job/JobServiceContext;->closeAndCleanupJobLocked(ZLjava/lang/String;)V
-HSPLcom/android/server/job/JobServiceContext;->doAcknowledgeStartMessage(Lcom/android/server/job/JobServiceContext$JobCallback;IZ)V
-HSPLcom/android/server/job/JobServiceContext;->doCallback(Lcom/android/server/job/JobServiceContext$JobCallback;ZLjava/lang/String;)V
-HSPLcom/android/server/job/JobServiceContext;->doCallbackLocked(ZLjava/lang/String;)V+]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
+HPLcom/android/server/job/JobServiceContext$JobCallback;->jobFinished(IZ)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;->canGetNetworkInformation(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
+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;]Lcom/android/server/job/JobNotificationCoordinator;Lcom/android/server/job/JobNotificationCoordinator;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]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/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobCompletedListener;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
+HPLcom/android/server/job/JobServiceContext;->doAcknowledgeStartMessage(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;
-HSPLcom/android/server/job/JobServiceContext;->doJobFinished(Lcom/android/server/job/JobServiceContext$JobCallback;IZ)V
-HSPLcom/android/server/job/JobServiceContext;->doServiceBoundLocked()V
-HSPLcom/android/server/job/JobServiceContext;->executeRunnableJob(Lcom/android/server/job/controllers/JobStatus;I)Z
+HPLcom/android/server/job/JobServiceContext;->doJobFinished(Lcom/android/server/job/JobServiceContext$JobCallback;IZ)V
+HPLcom/android/server/job/JobServiceContext;->doServiceBoundLocked()V
+HPLcom/android/server/job/JobServiceContext;->executeRunnableJob(Lcom/android/server/job/controllers/JobStatus;I)Z+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/modules/expresslog/Histogram;Lcom/android/modules/expresslog/Histogram;]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/content/ComponentName;Landroid/content/ComponentName;]Landroid/os/PowerManager;Landroid/os/PowerManager;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
 HPLcom/android/server/job/JobServiceContext;->getExecutionStartTimeElapsed()J
-HPLcom/android/server/job/JobServiceContext;->getId()I
+HPLcom/android/server/job/JobServiceContext;->getId()I+]Ljava/lang/Object;Lcom/android/server/job/JobServiceContext;
 HPLcom/android/server/job/JobServiceContext;->getPreferredUid()I
 HPLcom/android/server/job/JobServiceContext;->getRemainingGuaranteedTimeMs(J)J
-HSPLcom/android/server/job/JobServiceContext;->getRunningJobLocked()Lcom/android/server/job/controllers/JobStatus;
+HPLcom/android/server/job/JobServiceContext;->getRunningJobLocked()Lcom/android/server/job/controllers/JobStatus;
 HPLcom/android/server/job/JobServiceContext;->getRunningJobWorkType()I
-HSPLcom/android/server/job/JobServiceContext;->getStartActionId(Lcom/android/server/job/controllers/JobStatus;)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;
 HPLcom/android/server/job/JobServiceContext;->handleCancelLocked(Ljava/lang/String;)V
-HSPLcom/android/server/job/JobServiceContext;->handleFinishedLocked(ZLjava/lang/String;)V
-HSPLcom/android/server/job/JobServiceContext;->handleServiceBoundLocked()V
-HSPLcom/android/server/job/JobServiceContext;->handleStartedLocked(Z)V
+HPLcom/android/server/job/JobServiceContext;->handleFinishedLocked(ZLjava/lang/String;)V
+HPLcom/android/server/job/JobServiceContext;->handleServiceBoundLocked()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]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;->handleStartedLocked(Z)V+]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;->isWithinExecutionGuaranteeTime()Z+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;
-HSPLcom/android/server/job/JobServiceContext;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-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;->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;->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;
 HPLcom/android/server/job/JobServiceContext;->sendStopMessageLocked(Ljava/lang/String;)V
-HSPLcom/android/server/job/JobServiceContext;->verifyCallerLocked(Lcom/android/server/job/JobServiceContext$JobCallback;)Z
-HPLcom/android/server/job/JobStore$1$CopyConsumer;->accept(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;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;
-HPLcom/android/server/job/JobStore$1$CopyConsumer;->accept(Ljava/lang/Object;)V+]Lcom/android/server/job/JobStore$1$CopyConsumer;Lcom/android/server/job/JobStore$1$CopyConsumer;
-HPLcom/android/server/job/JobStore$1$CopyConsumer;->prepare()V
-HPLcom/android/server/job/JobStore$1;->addAttributesToJobTag(Lorg/xmlpull/v1/XmlSerializer;Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Landroid/content/ComponentName;Landroid/content/ComponentName;
-HPLcom/android/server/job/JobStore$1;->deepCopyBundle(Landroid/os/PersistableBundle;I)Landroid/os/PersistableBundle;+]Landroid/os/PersistableBundle;Landroid/os/PersistableBundle;]Lcom/android/server/job/JobStore$1;Lcom/android/server/job/JobStore$1;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
-HPLcom/android/server/job/JobStore$1;->run()V
-HPLcom/android/server/job/JobStore$1;->writeBundleToXml(Landroid/os/PersistableBundle;Lorg/xmlpull/v1/XmlSerializer;)V
-HPLcom/android/server/job/JobStore$1;->writeConstraintsToXml(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/net/NetworkRequest;Landroid/net/NetworkRequest;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
-HPLcom/android/server/job/JobStore$1;->writeExecutionCriteriaToXml(Lorg/xmlpull/v1/XmlSerializer;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/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;
-HPLcom/android/server/job/JobStore$1;->writeJobWorkItemListToXml(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/util/List;)V
-HPLcom/android/server/job/JobStore$1;->writeJobWorkItemsToXml(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/job/controllers/JobStatus;)V
-HPLcom/android/server/job/JobStore$1;->writeJobsMapImpl(Landroid/util/AtomicFile;Ljava/util/List;)V+]Landroid/util/AtomicFile;Landroid/util/AtomicFile;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobStore$1;Lcom/android/server/job/JobStore$1;]Landroid/util/SystemConfigFileCommitEventLogger;Landroid/util/SystemConfigFileCommitEventLogger;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;
+HPLcom/android/server/job/JobServiceContext;->verifyCallerLocked(Lcom/android/server/job/JobServiceContext$JobCallback;)Z
+HPLcom/android/server/job/JobStore$2$CopyConsumer;->accept(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;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/job/JobStore$2$CopyConsumer;->accept(Ljava/lang/Object;)V+]Lcom/android/server/job/JobStore$2$CopyConsumer;Lcom/android/server/job/JobStore$2$CopyConsumer;
+HPLcom/android/server/job/JobStore$2$CopyConsumer;->prepare()V
+HPLcom/android/server/job/JobStore$2;->addAttributesToJobTag(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HPLcom/android/server/job/JobStore$2;->deepCopyBundle(Landroid/os/PersistableBundle;I)Landroid/os/PersistableBundle;+]Landroid/os/PersistableBundle;Landroid/os/PersistableBundle;]Lcom/android/server/job/JobStore$2;Lcom/android/server/job/JobStore$2;
+HPLcom/android/server/job/JobStore$2;->run()V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Ljava/lang/String;Ljava/lang/String;]Ljava/io/File;Ljava/io/File;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Ljava/lang/Object;Ljava/lang/Object;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/job/JobStore$2;Lcom/android/server/job/JobStore$2;]Lcom/android/server/job/JobStore$JobSet;Lcom/android/server/job/JobStore$JobSet;
+HPLcom/android/server/job/JobStore$2;->writeBundleToXml(Landroid/os/PersistableBundle;Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/server/job/JobStore$2;->writeConstraintsToXml(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/job/controllers/JobStatus;)V+]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;
+HPLcom/android/server/job/JobStore$2;->writeExecutionCriteriaToXml(Lorg/xmlpull/v1/XmlSerializer;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;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
+HPLcom/android/server/job/JobStore$2;->writeJobWorkItemListToXml(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/util/List;)V
+HPLcom/android/server/job/JobStore$2;->writeJobWorkItemsToXml(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/JobStore$2;->writeJobsMapImpl(Landroid/util/AtomicFile;Ljava/util/List;)V+]Landroid/util/AtomicFile;Landroid/util/AtomicFile;]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/JobStore$2;Lcom/android/server/job/JobStore$2;]Landroid/util/SystemConfigFileCommitEventLogger;Landroid/util/SystemConfigFileCommitEventLogger;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;
 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;
 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;
@@ -4396,7 +4762,7 @@
 HSPLcom/android/server/job/JobStore$JobSet;->get(ILjava/lang/String;I)Lcom/android/server/job/controllers/JobStatus;+]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;->getJobsByUid(I)Landroid/util/ArraySet;
 HSPLcom/android/server/job/JobStore$JobSet;->getJobsByUid(ILjava/util/Set;)V
-HSPLcom/android/server/job/JobStore$JobSet;->remove(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;
+HPLcom/android/server/job/JobStore$JobSet;->remove(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$ReadJobMapFromDiskRunnable;->buildConstraintsFromXml(Landroid/app/job/JobInfo$Builder;Lcom/android/modules/utils/TypedXmlPullParser;)V
 HSPLcom/android/server/job/JobStore$ReadJobMapFromDiskRunnable;->restoreJobFromXml(ZLcom/android/modules/utils/TypedXmlPullParser;IJ)Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/JobStore;->-$$Nest$fgetmUseSplitFiles(Lcom/android/server/job/JobStore;)Z
@@ -4404,33 +4770,35 @@
 HSPLcom/android/server/job/JobStore;->add(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/JobStore$JobSet;Lcom/android/server/job/JobStore$JobSet;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
 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
+HSPLcom/android/server/job/JobStore;->countJobsForUid(I)I+]Lcom/android/server/job/JobStore$JobSet;Lcom/android/server/job/JobStore$JobSet;
 HSPLcom/android/server/job/JobStore;->forEachJob(Ljava/util/function/Consumer;)V
 HSPLcom/android/server/job/JobStore;->forEachJobForSourceUid(ILjava/util/function/Consumer;)V+]Lcom/android/server/job/JobStore$JobSet;Lcom/android/server/job/JobStore$JobSet;
 HSPLcom/android/server/job/JobStore;->getJobByUidAndJobId(ILjava/lang/String;I)Lcom/android/server/job/controllers/JobStatus;+]Lcom/android/server/job/JobStore$JobSet;Lcom/android/server/job/JobStore$JobSet;
 HSPLcom/android/server/job/JobStore;->getJobsByUid(I)Landroid/util/ArraySet;
 HPLcom/android/server/job/JobStore;->intArrayToString([I)Ljava/lang/String;+]Ljava/util/StringJoiner;Ljava/util/StringJoiner;
 HSPLcom/android/server/job/JobStore;->isSyncJob(Lcom/android/server/job/controllers/JobStatus;)Z
+HSPLcom/android/server/job/JobStore;->maybeUpdateHighWaterMark()V
 HPLcom/android/server/job/JobStore;->maybeWriteStatusToDiskAsync()V
-HSPLcom/android/server/job/JobStore;->remove(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/JobStore$JobSet;Lcom/android/server/job/JobStore$JobSet;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
+HPLcom/android/server/job/JobStore;->remove(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/JobStore$JobSet;Lcom/android/server/job/JobStore$JobSet;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
 HPLcom/android/server/job/PendingJobQueue$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HPLcom/android/server/job/PendingJobQueue$AppJobQueue$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;->clear()V
-HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->$r8$lambda$9TwzHS0cvBgvyEI_2mJb97eKjRI(Lcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;Lcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;)I
-HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->add(Lcom/android/server/job/controllers/JobStatus;)V
-HSPLcom/android/server/job/PendingJobQueue$AppJobQueue;->addAll(Ljava/util/List;)V+]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Ljava/util/List;Ljava/util/ArrayList;
-HSPLcom/android/server/job/PendingJobQueue$AppJobQueue;->indexOf(Lcom/android/server/job/controllers/JobStatus;)I+]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;->clear()V
+HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->add(Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->addAll(Ljava/util/List;)V+]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->clear()V
+HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->indexOf(Lcom/android/server/job/controllers/JobStatus;)I+]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->lambda$static$0(Lcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;Lcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;)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/PendingJobQueue$AppJobQueue;->next()Lcom/android/server/job/controllers/JobStatus;
+HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->next()Lcom/android/server/job/controllers/JobStatus;+]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->peekNextOverrideState()I+]Ljava/util/List;Ljava/util/ArrayList;
-HSPLcom/android/server/job/PendingJobQueue$AppJobQueue;->peekNextTimestamp()J+]Ljava/util/List;Ljava/util/ArrayList;
-HSPLcom/android/server/job/PendingJobQueue$AppJobQueue;->remove(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/PendingJobQueue$AppJobQueue;Lcom/android/server/job/PendingJobQueue$AppJobQueue;]Lcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;Lcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;
-HSPLcom/android/server/job/PendingJobQueue$AppJobQueue;->resetIterator(J)V
+HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->peekNextTimestamp()J+]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->remove(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/PendingJobQueue$AppJobQueue;Lcom/android/server/job/PendingJobQueue$AppJobQueue;]Lcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;Lcom/android/server/job/PendingJobQueue$AppJobQueue$AdjustedJobStatus;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;
+HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->resetIterator(J)V
+HPLcom/android/server/job/PendingJobQueue$AppJobQueue;->size()I
 HPLcom/android/server/job/PendingJobQueue;->$r8$lambda$JYUAvEfgYpg9-Yn-9bv-8TBxdyw(Lcom/android/server/job/PendingJobQueue$AppJobQueue;Lcom/android/server/job/PendingJobQueue$AppJobQueue;)I
-HPLcom/android/server/job/PendingJobQueue;->add(Lcom/android/server/job/controllers/JobStatus;)V
-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;
+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;
 HSPLcom/android/server/job/PendingJobQueue;->clear()V
-HSPLcom/android/server/job/PendingJobQueue;->contains(Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/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;
 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;
@@ -4446,121 +4814,125 @@
 HSPLcom/android/server/job/controllers/BackgroundJobsController;->updateJobRestrictionsLocked(II)V
 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;
 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;
-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;]Lcom/android/server/job/controllers/StateController;Lcom/android/server/job/controllers/BatteryController;]Lcom/android/server/job/controllers/FlexibilityController;Lcom/android/server/job/controllers/FlexibilityController;]Ljava/lang/Boolean;Ljava/lang/Boolean;]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;
+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;]Lcom/android/server/job/controllers/FlexibilityController;Lcom/android/server/job/controllers/FlexibilityController;]Ljava/lang/Boolean;Ljava/lang/Boolean;]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;]Lcom/android/server/job/controllers/StateController;Lcom/android/server/job/controllers/BatteryController;
 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;
-HSPLcom/android/server/job/controllers/BatteryController;->maybeStopTrackingJobLocked(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;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HSPLcom/android/server/job/controllers/BatteryController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V
-HSPLcom/android/server/job/controllers/ComponentController;->getServiceProcessLocked(Lcom/android/server/job/controllers/JobStatus;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
-HSPLcom/android/server/job/controllers/ComponentController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
+HPLcom/android/server/job/controllers/BatteryController;->maybeStopTrackingJobLocked(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;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+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;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
+HPLcom/android/server/job/controllers/ComponentController;->clearComponentsForPackageLocked(ILjava/lang/String;)V+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLcom/android/server/job/controllers/ComponentController;->getServiceProcessLocked(Lcom/android/server/job/controllers/JobStatus;)Ljava/lang/String;+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLcom/android/server/job/controllers/ComponentController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/ComponentController;Lcom/android/server/job/controllers/ComponentController;
 HSPLcom/android/server/job/controllers/ComponentController;->updateComponentEnabledStateLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/ComponentController;Lcom/android/server/job/controllers/ComponentController;
+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/content/Context;Landroid/app/ContextImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Ljava/util/Set;Landroid/util/ArraySet;
 HPLcom/android/server/job/controllers/ConnectivityController$2;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V
 HPLcom/android/server/job/controllers/ConnectivityController$CcHandler;->handleMessage(Landroid/os/Message;)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;
 HPLcom/android/server/job/controllers/ConnectivityController$UidDefaultNetworkCallback;->onBlockedStatusChanged(Landroid/net/Network;I)V
-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;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/job/controllers/StateController;Lcom/android/server/job/controllers/ConnectivityController;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
+HPLcom/android/server/job/controllers/ConnectivityController;->copyCapabilities(Landroid/net/NetworkRequest;)Landroid/net/NetworkCapabilities$Builder;+]Landroid/net/NetworkRequest;Landroid/net/NetworkRequest;]Landroid/net/NetworkCapabilities$Builder;Landroid/net/NetworkCapabilities$Builder;
+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;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/job/controllers/StateController;Lcom/android/server/job/controllers/ConnectivityController;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 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;->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;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/job/controllers/ConnectivityController;->getUidStats(ILjava/lang/String;Z)Lcom/android/server/job/controllers/ConnectivityController$UidStats;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 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;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
-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;->isMeteredAllowed(Lcom/android/server/job/controllers/JobStatus;Landroid/net/NetworkCapabilities;)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;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/net/NetworkPolicyManager;Landroid/net/NetworkPolicyManager;
+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;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 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;
 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/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/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;
-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;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+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/Set;Landroid/util/ArraySet;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
+HPLcom/android/server/job/controllers/ConnectivityController;->isUsable(Landroid/net/NetworkCapabilities;)Z+]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;
+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/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;
+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;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 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/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;
-HSPLcom/android/server/job/controllers/ConnectivityController;->maybeStopTrackingJobLocked(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;]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;->onUidBiasChangedLocked(III)V
-HPLcom/android/server/job/controllers/ConnectivityController;->postAdjustCallbacks()V
-HPLcom/android/server/job/controllers/ConnectivityController;->postAdjustCallbacks(J)V
-HSPLcom/android/server/job/controllers/ConnectivityController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)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;
+HPLcom/android/server/job/controllers/ConnectivityController;->maybeStopTrackingJobLocked(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;]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;->onUidBiasChangedLocked(III)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
+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;
+HPLcom/android/server/job/controllers/ConnectivityController;->requestStandbyExceptionLocked(Lcom/android/server/job/controllers/JobStatus;)V
 HPLcom/android/server/job/controllers/ConnectivityController;->updateAllTrackedJobsLocked(Z)V
 HSPLcom/android/server/job/controllers/ConnectivityController;->updateConstraintsSatisfied(Lcom/android/server/job/controllers/JobStatus;)Z
-HSPLcom/android/server/job/controllers/ConnectivityController;->updateConstraintsSatisfied(Lcom/android/server/job/controllers/JobStatus;JLandroid/net/Network;Landroid/net/NetworkCapabilities;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/FlexibilityController;Lcom/android/server/job/controllers/FlexibilityController;]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;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;
+HSPLcom/android/server/job/controllers/ConnectivityController;->updateConstraintsSatisfied(Lcom/android/server/job/controllers/JobStatus;JLandroid/net/Network;Landroid/net/NetworkCapabilities;)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;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/job/controllers/ConnectivityController;->updateTrackedJobsLocked(ILandroid/net/Network;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;
 HPLcom/android/server/job/controllers/ConnectivityController;->updateTrackedJobsLocked(Landroid/util/ArraySet;Landroid/net/Network;)Z+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Ljava/lang/Object;Landroid/net/Network;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/controllers/ContentObserverController$JobInstance;-><init>(Lcom/android/server/job/controllers/ContentObserverController;Lcom/android/server/job/controllers/JobStatus;)V
 HPLcom/android/server/job/controllers/ContentObserverController$JobInstance;->detachLocked()V
+HPLcom/android/server/job/controllers/ContentObserverController$JobInstance;->scheduleLocked()V
+HPLcom/android/server/job/controllers/ContentObserverController$ObserverInstance;->onChange(ZLandroid/net/Uri;)V+]Lcom/android/server/job/controllers/ContentObserverController$JobInstance;Lcom/android/server/job/controllers/ContentObserverController$JobInstance;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 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;
-HSPLcom/android/server/job/controllers/ContentObserverController;->maybeStopTrackingJobLocked(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/ContentObserverController$JobInstance;Lcom/android/server/job/controllers/ContentObserverController$JobInstance;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HSPLcom/android/server/job/controllers/ContentObserverController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V
-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;
+HPLcom/android/server/job/controllers/ContentObserverController;->maybeStopTrackingJobLocked(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/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;
+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;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 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
-HSPLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$fgetmAllowInIdleJobs(Lcom/android/server/job/controllers/DeviceIdleJobsController;)Landroid/util/ArraySet;
+HPLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$fgetmAllowInIdleJobs(Lcom/android/server/job/controllers/DeviceIdleJobsController;)Landroid/util/ArraySet;
 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;->isWhitelistedLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 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;
-HSPLcom/android/server/job/controllers/DeviceIdleJobsController;->maybeStopTrackingJobLocked(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;]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;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/job/controllers/DeviceIdleJobsController;->setUidActiveLocked(IZ)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/FlexibilityController$FlexibilityAlarmQueue;->scheduleDropNumConstraintsAlarm(Lcom/android/server/job/controllers/JobStatus;J)V
-HSPLcom/android/server/job/controllers/FlexibilityController$FlexibilityTracker;->add(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;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/job/controllers/FlexibilityController$FlexibilityTracker;->adjustJobsRequiredConstraints(Lcom/android/server/job/controllers/JobStatus;IJ)Z
-HPLcom/android/server/job/controllers/FlexibilityController$FlexibilityTracker;->remove(Lcom/android/server/job/controllers/JobStatus;)V
-HSPLcom/android/server/job/controllers/FlexibilityController;->-$$Nest$fgetmDeadlineProximityLimitMs(Lcom/android/server/job/controllers/FlexibilityController;)J
-HSPLcom/android/server/job/controllers/FlexibilityController;->-$$Nest$sfgetDEBUG()Z
-HSPLcom/android/server/job/controllers/FlexibilityController;->getLifeCycleBeginningElapsedLocked(Lcom/android/server/job/controllers/JobStatus;)J
-HSPLcom/android/server/job/controllers/FlexibilityController;->getLifeCycleEndElapsedLocked(Lcom/android/server/job/controllers/JobStatus;J)J
-HSPLcom/android/server/job/controllers/FlexibilityController;->getNextConstraintDropTimeElapsedLocked(Lcom/android/server/job/controllers/JobStatus;JJ)J
-HSPLcom/android/server/job/controllers/FlexibilityController;->isFlexibilitySatisfiedLocked(Lcom/android/server/job/controllers/JobStatus;)Z
-HSPLcom/android/server/job/controllers/FlexibilityController;->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/FlexibilityController$FlexibilityTracker;Lcom/android/server/job/controllers/FlexibilityController$FlexibilityTracker;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/FlexibilityController$FlexibilityAlarmQueue;Lcom/android/server/job/controllers/FlexibilityController$FlexibilityAlarmQueue;]Lcom/android/server/job/controllers/FlexibilityController;Lcom/android/server/job/controllers/FlexibilityController;
-HSPLcom/android/server/job/controllers/FlexibilityController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/FlexibilityController$FlexibilityTracker;Lcom/android/server/job/controllers/FlexibilityController$FlexibilityTracker;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/utils/AlarmQueue;Lcom/android/server/job/controllers/FlexibilityController$FlexibilityAlarmQueue;
-HSPLcom/android/server/job/controllers/FlexibilityController;->onUidBiasChangedLocked(III)V
+HSPLcom/android/server/job/controllers/FlexibilityController;->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;
+HPLcom/android/server/job/controllers/FlexibilityController;->maybeStopTrackingJobLocked(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;
+HSPLcom/android/server/job/controllers/FlexibilityController;->onUidBiasChangedLocked(III)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/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
 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;
-HSPLcom/android/server/job/controllers/IdleController;->maybeStopTrackingJobLocked(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;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HSPLcom/android/server/job/controllers/JobStatus;-><init>(Landroid/app/job/JobInfo;ILjava/lang/String;IILjava/lang/String;Ljava/lang/String;IIJJJJII)V+]Landroid/net/NetworkRequest;Landroid/net/NetworkRequest;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo$TriggerContentUri;Landroid/app/job/JobInfo$TriggerContentUri;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Landroid/app/job/JobInfo$Builder;Landroid/app/job/JobInfo$Builder;]Landroid/net/NetworkRequest$Builder;Landroid/net/NetworkRequest$Builder;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HPLcom/android/server/job/controllers/IdleController;->maybeStopTrackingJobLocked(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;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/job/controllers/JobStatus;-><init>(Landroid/app/job/JobInfo;ILjava/lang/String;IILjava/lang/String;Ljava/lang/String;IIJJJJJII)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo$TriggerContentUri;Landroid/app/job/JobInfo$TriggerContentUri;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Landroid/net/NetworkRequest$Builder;Landroid/net/NetworkRequest$Builder;]Landroid/app/job/JobInfo$Builder;Landroid/app/job/JobInfo$Builder;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HPLcom/android/server/job/controllers/JobStatus;-><init>(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
-HSPLcom/android/server/job/controllers/JobStatus;-><init>(Lcom/android/server/job/controllers/JobStatus;JJIIJJ)V
+HPLcom/android/server/job/controllers/JobStatus;-><init>(Lcom/android/server/job/controllers/JobStatus;JJIIJJJ)V
 HSPLcom/android/server/job/controllers/JobStatus;->addDynamicConstraints(I)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
-HPLcom/android/server/job/controllers/JobStatus;->adjustNumRequiredFlexibleConstraints(I)V
+HPLcom/android/server/job/controllers/JobStatus;->addInternalFlags(I)V
 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;
-HSPLcom/android/server/job/controllers/JobStatus;->clearPersistedUtcTimes()V
+HPLcom/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
-HSPLcom/android/server/job/controllers/JobStatus;->createFromJobInfo(Landroid/app/job/JobInfo;ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/job/controllers/JobStatus;
+HSPLcom/android/server/job/controllers/JobStatus;->createFromJobInfo(Landroid/app/job/JobInfo;ILjava/lang/String;ILjava/lang/String;Ljava/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;->enqueueWorkLocked(Landroid/app/job/JobWorkItem;)V
+HSPLcom/android/server/job/controllers/JobStatus;->generateLoggingId(Ljava/lang/String;I)J+]Ljava/lang/String;Ljava/lang/String;
+HSPLcom/android/server/job/controllers/JobStatus;->generateNamespaceHash(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/job/controllers/JobStatus;->getBatteryName()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;->getBias()I+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
+HPLcom/android/server/job/controllers/JobStatus;->getCumulativeExecutionTimeMs()J
 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;
+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;]Lcom/android/server/job/JobSchedulerInternal;Lcom/android/server/job/JobSchedulerService$LocalService;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/job/controllers/JobStatus;->getEstimatedNetworkDownloadBytes()J
 HSPLcom/android/server/job/controllers/JobStatus;->getEstimatedNetworkUploadBytes()J
 HSPLcom/android/server/job/controllers/JobStatus;->getFlags()I+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
 HSPLcom/android/server/job/controllers/JobStatus;->getInternalFlags()I
 HSPLcom/android/server/job/controllers/JobStatus;->getJob()Landroid/app/job/JobInfo;
 HSPLcom/android/server/job/controllers/JobStatus;->getJobId()I+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
-HSPLcom/android/server/job/controllers/JobStatus;->getLastFailedRunTime()J
+HPLcom/android/server/job/controllers/JobStatus;->getLastFailedRunTime()J
 HPLcom/android/server/job/controllers/JobStatus;->getLastSuccessfulRunTime()J
 HSPLcom/android/server/job/controllers/JobStatus;->getLatestRunTimeElapsed()J
+HSPLcom/android/server/job/controllers/JobStatus;->getLoggingJobId()J
 HPLcom/android/server/job/controllers/JobStatus;->getMinimumNetworkChunkBytes()J
 HSPLcom/android/server/job/controllers/JobStatus;->getNamespace()Ljava/lang/String;
-HSPLcom/android/server/job/controllers/JobStatus;->getNumDroppedFlexibleConstraints()I
+HSPLcom/android/server/job/controllers/JobStatus;->getNamespaceHash()Ljava/lang/String;
 HPLcom/android/server/job/controllers/JobStatus;->getNumFailures()I
 HSPLcom/android/server/job/controllers/JobStatus;->getNumPreviousAttempts()I
-HSPLcom/android/server/job/controllers/JobStatus;->getNumRequiredFlexibleConstraints()I
 HPLcom/android/server/job/controllers/JobStatus;->getNumSystemStops()I
+HPLcom/android/server/job/controllers/JobStatus;->getPersistedUtcTimes()Landroid/util/Pair;
 HSPLcom/android/server/job/controllers/JobStatus;->getPreferUnmetered()Z
 HSPLcom/android/server/job/controllers/JobStatus;->getServiceComponent()Landroid/content/ComponentName;+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
 HSPLcom/android/server/job/controllers/JobStatus;->getSourcePackageName()Ljava/lang/String;
-HSPLcom/android/server/job/controllers/JobStatus;->getSourceTag()Ljava/lang/String;
+HPLcom/android/server/job/controllers/JobStatus;->getSourceTag()Ljava/lang/String;
 HSPLcom/android/server/job/controllers/JobStatus;->getSourceUid()I
 HSPLcom/android/server/job/controllers/JobStatus;->getSourceUserId()I
 HSPLcom/android/server/job/controllers/JobStatus;->getStandbyBucket()I
-HSPLcom/android/server/job/controllers/JobStatus;->getTag()Ljava/lang/String;
+HPLcom/android/server/job/controllers/JobStatus;->getTag()Ljava/lang/String;
+HSPLcom/android/server/job/controllers/JobStatus;->getTimeoutBlamePackageName()Ljava/lang/String;+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLcom/android/server/job/controllers/JobStatus;->getTimeoutBlameUserId()I+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->getUid()I
 HSPLcom/android/server/job/controllers/JobStatus;->getUserId()I
-HSPLcom/android/server/job/controllers/JobStatus;->getWhenStandbyDeferred()J
+HPLcom/android/server/job/controllers/JobStatus;->getWhenStandbyDeferred()J
+HSPLcom/android/server/job/controllers/JobStatus;->getWorkCount()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 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
@@ -4572,62 +4944,64 @@
 HSPLcom/android/server/job/controllers/JobStatus;->hasPowerConstraint()Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->hasStorageNotLowConstraint()Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->hasTimingDelayConstraint()Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
+HPLcom/android/server/job/controllers/JobStatus;->incrementCumulativeExecutionTime(J)V
 HSPLcom/android/server/job/controllers/JobStatus;->isConstraintSatisfied(I)Z
 HSPLcom/android/server/job/controllers/JobStatus;->isConstraintsSatisfied(I)Z
 HSPLcom/android/server/job/controllers/JobStatus;->isPersisted()Z+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
 HSPLcom/android/server/job/controllers/JobStatus;->isPreparedLocked()Z
-HSPLcom/android/server/job/controllers/JobStatus;->isReady()Z
+HSPLcom/android/server/job/controllers/JobStatus;->isReady()Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->isReady(I)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->isRequestedExpeditedJob()Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
-HSPLcom/android/server/job/controllers/JobStatus;->isUserVisibleJob()Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
-HSPLcom/android/server/job/controllers/JobStatus;->maybeAddForegroundExemption(Ljava/util/function/Predicate;)V
+HPLcom/android/server/job/controllers/JobStatus;->isUserVisibleJob()Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
+HSPLcom/android/server/job/controllers/JobStatus;->maybeAddForegroundExemption(Ljava/util/function/Predicate;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Ljava/util/function/Predicate;Lcom/android/server/job/JobSchedulerService$$ExternalSyntheticLambda0;
+HPLcom/android/server/job/controllers/JobStatus;->maybeLogBucketMismatch()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->prepareLocked()V+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
 HSPLcom/android/server/job/controllers/JobStatus;->readinessStatusWithConstraint(IZ)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->setBackgroundNotRestrictedConstraintSatisfied(JZZ)Z
 HSPLcom/android/server/job/controllers/JobStatus;->setBatteryNotLowConstraintSatisfied(JZ)Z
 HSPLcom/android/server/job/controllers/JobStatus;->setChargingConstraintSatisfied(JZ)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->setConnectivityConstraintSatisfied(JZ)Z
-HSPLcom/android/server/job/controllers/JobStatus;->setConstraintSatisfied(IJZ)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
+HSPLcom/android/server/job/controllers/JobStatus;->setConstraintSatisfied(IJZ)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/job/controllers/JobStatus;->setDeviceNotDozingConstraintSatisfied(JZZ)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->setExpeditedJobQuotaApproved(JZ)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
-HSPLcom/android/server/job/controllers/JobStatus;->setExpeditedJobTareApproved(JZ)Z
-HSPLcom/android/server/job/controllers/JobStatus;->setFlexibilityConstraintSatisfied(JZ)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
+HSPLcom/android/server/job/controllers/JobStatus;->setExpeditedJobTareApproved(JZ)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->setHasAccessToUnmetered(Z)V
 HSPLcom/android/server/job/controllers/JobStatus;->setQuotaConstraintSatisfied(JZ)Z
-HSPLcom/android/server/job/controllers/JobStatus;->setTareWealthConstraintSatisfied(JZ)Z
+HSPLcom/android/server/job/controllers/JobStatus;->setTareWealthConstraintSatisfied(JZ)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->setTrackingController(I)V
 HSPLcom/android/server/job/controllers/JobStatus;->setUidActive(Z)Z
+HSPLcom/android/server/job/controllers/JobStatus;->shouldBlameSourceForTimeout()Z
 HSPLcom/android/server/job/controllers/JobStatus;->shouldTreatAsExpeditedJob()Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->shouldTreatAsUserInitiatedJob()Z+]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;->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;
-HSPLcom/android/server/job/controllers/JobStatus;->unprepareLocked()V+]Ljava/lang/Throwable;Ljava/lang/Throwable;
+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;
+HSPLcom/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;->unprepareLocked()V+]Ljava/lang/Throwable;Ljava/lang/Throwable;
 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/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;
-HSPLcom/android/server/job/controllers/PrefetchController;->maybeStopTrackingJobLocked(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;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/utils/AlarmQueue;Lcom/android/server/job/controllers/PrefetchController$ThresholdAlarmListener;
+HSPLcom/android/server/job/controllers/PrefetchController;->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/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;)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;
 HPLcom/android/server/job/controllers/PrefetchController;->maybeUpdateConstraintForUid(I)V
-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;->onUidStateChanged(IIJI)V
+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;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+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;
 HSPLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;->getStandbyBucketLocked()I
-HSPLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;->getTallyLocked()J
 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;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
 HSPLcom/android/server/job/controllers/QuotaController$TempAllowlistTracker;->onAppAdded(I)V
 HPLcom/android/server/job/controllers/QuotaController$TempAllowlistTracker;->onAppRemoved(I)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;
 HPLcom/android/server/job/controllers/QuotaController$Timer;->cancelCutoff()V
-HPLcom/android/server/job/controllers/QuotaController$Timer;->emitSessionLocked(J)V
+HPLcom/android/server/job/controllers/QuotaController$Timer;->emitSessionLocked(J)V+]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;
 HPLcom/android/server/job/controllers/QuotaController$Timer;->getBgJobCount()I
 HPLcom/android/server/job/controllers/QuotaController$Timer;->getCurrentDuration(J)J
 HPLcom/android/server/job/controllers/QuotaController$Timer;->isActive()Z
-HPLcom/android/server/job/controllers/QuotaController$Timer;->onStateChangedLocked(JZ)V
+HPLcom/android/server/job/controllers/QuotaController$Timer;->onStateChangedLocked(JZ)V+]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/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/controllers/QuotaController$Timer;->scheduleCutoff()V
-HSPLcom/android/server/job/controllers/QuotaController$Timer;->shouldTrackLocked()Z
-HSPLcom/android/server/job/controllers/QuotaController$Timer;->startTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;)V
-HSPLcom/android/server/job/controllers/QuotaController$Timer;->stopTrackingJob(Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/job/controllers/QuotaController$Timer;->shouldTrackLocked()Z+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
+HPLcom/android/server/job/controllers/QuotaController$Timer;->startTrackingJobLocked(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;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/job/controllers/QuotaController$Timer;->stopTrackingJob(Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/controllers/QuotaController$TimingSession;-><init>(JJI)V
 HPLcom/android/server/job/controllers/QuotaController$TimingSession;->getEndTimeElapsed()J
 HPLcom/android/server/job/controllers/QuotaController$TopAppTimer;->isActive()Z
@@ -4638,23 +5012,24 @@
 HSPLcom/android/server/job/controllers/QuotaController$UidConstraintUpdater;->prepare()V
 HSPLcom/android/server/job/controllers/QuotaController$UidConstraintUpdater;->reset()V
 HPLcom/android/server/job/controllers/QuotaController$UsageEventTracker;->onUsageEvent(ILandroid/app/usage/UsageEvents$Event;)V+]Landroid/os/Handler;Lcom/android/server/job/controllers/QuotaController$QcHandler;]Landroid/os/Message;Landroid/os/Message;
-HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmEJPkgTimers(Lcom/android/server/job/controllers/QuotaController;)Landroid/util/SparseArrayMap;
 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;
+HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmPkgTimers(Lcom/android/server/job/controllers/QuotaController;)Landroid/util/SparseArrayMap;
 HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmTopAppGraceCache(Lcom/android/server/job/controllers/QuotaController;)Landroid/util/SparseLongArray;
-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
+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
 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
 HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$sfgetDEBUG()Z
 HPLcom/android/server/job/controllers/QuotaController;->calculateTimeUntilQuotaConsumedLocked(Ljava/util/List;JJZ)J+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Ljava/util/List;Ljava/util/ArrayList;
-HSPLcom/android/server/job/controllers/QuotaController;->getEJDebitsLocked(ILjava/lang/String;)Lcom/android/server/job/controllers/QuotaController$ShrinkableDebits;
-HSPLcom/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;
 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;
-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;
-HSPLcom/android/server/job/controllers/QuotaController;->getRemainingEJExecutionTimeLocked(ILjava/lang/String;)J
-HSPLcom/android/server/job/controllers/QuotaController;->getRemainingExecutionTimeLocked(Lcom/android/server/job/controllers/QuotaController$ExecutionStats;)J
+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;->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;
+HPLcom/android/server/job/controllers/QuotaController;->getRemainingExecutionTimeLocked(Lcom/android/server/job/controllers/QuotaController$ExecutionStats;)J
+HPLcom/android/server/job/controllers/QuotaController;->getTimeUntilEJQuotaConsumedLocked(ILjava/lang/String;)J+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/QuotaController$TimedEvent;Lcom/android/server/job/controllers/QuotaController$TimingSession;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/controllers/QuotaController$ShrinkableDebits;Lcom/android/server/job/controllers/QuotaController$ShrinkableDebits;
 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;->incrementJobCountLocked(ILjava/lang/String;I)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;
 HPLcom/android/server/job/controllers/QuotaController;->incrementTimingSessionCountLocked(ILjava/lang/String;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;
@@ -4667,48 +5042,49 @@
 HSPLcom/android/server/job/controllers/QuotaController;->isWithinQuotaLocked(ILjava/lang/String;I)Z+]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;
 HSPLcom/android/server/job/controllers/QuotaController;->isWithinQuotaLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;
 HPLcom/android/server/job/controllers/QuotaController;->maybeScheduleCleanupAlarmLocked()V
-HSPLcom/android/server/job/controllers/QuotaController;->maybeScheduleStartAlarmLocked(ILjava/lang/String;I)V
+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;]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/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;
-HSPLcom/android/server/job/controllers/QuotaController;->maybeStopTrackingJobLocked(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/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;->maybeStopTrackingJobLocked(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/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;->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;
-HSPLcom/android/server/job/controllers/QuotaController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V
+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;
+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;
 HPLcom/android/server/job/controllers/QuotaController;->saveTimingSession(ILjava/lang/String;Lcom/android/server/job/controllers/QuotaController$TimingSession;ZJ)V
 HSPLcom/android/server/job/controllers/QuotaController;->setConstraintSatisfied(Lcom/android/server/job/controllers/JobStatus;JZZ)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/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;
+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;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;
 HPLcom/android/server/job/controllers/QuotaController;->transactQuotaLocked(ILjava/lang/String;JLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;J)Z
-HSPLcom/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;
+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;]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;
-HPLcom/android/server/job/controllers/QuotaController;->updateStandbyBucket(ILjava/lang/String;I)V
+HPLcom/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/StateController;->evaluateStateLocked(Lcom/android/server/job/controllers/JobStatus;)V
 HSPLcom/android/server/job/controllers/StateController;->onUidBiasChangedLocked(III)V
-HSPLcom/android/server/job/controllers/StateController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V
-HSPLcom/android/server/job/controllers/StateController;->wouldBeReadyWithConstraintLocked(Lcom/android/server/job/controllers/JobStatus;I)Z+]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/controllers/StateController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V
+HSPLcom/android/server/job/controllers/StateController;->wouldBeReadyWithConstraintLocked(Lcom/android/server/job/controllers/JobStatus;I)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/job/controllers/StorageController;->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;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/controllers/StorageController$StorageTracker;Lcom/android/server/job/controllers/StorageController$StorageTracker;
-HSPLcom/android/server/job/controllers/StorageController;->maybeStopTrackingJobLocked(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;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/job/controllers/StorageController;->maybeStopTrackingJobLocked(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;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 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;
 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;
-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;
-HSPLcom/android/server/job/controllers/TareController;->hasEnoughWealthLocked(Lcom/android/server/job/controllers/JobStatus;)Z
+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;->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;
 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;
-HSPLcom/android/server/job/controllers/TareController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;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;]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;->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;]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;]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;]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;->setExpeditedTareApproved(Lcom/android/server/job/controllers/JobStatus;JZ)Z
+HPLcom/android/server/job/controllers/TareController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;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;]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;
+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;]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;]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;->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;
 HSPLcom/android/server/job/controllers/TimeController;->canStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
-HSPLcom/android/server/job/controllers/TimeController;->checkExpiredDeadlinesAndResetAlarm()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;]Ljava/util/ListIterator;Ljava/util/LinkedList$ListItr;]Lcom/android/server/job/controllers/TimeController;Lcom/android/server/job/controllers/TimeController;]Ljava/util/List;Ljava/util/LinkedList;]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;->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;->checkExpiredDeadlinesAndResetAlarm()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;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+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/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/job/controllers/TimeController;->evaluateDeadlineConstraint(Lcom/android/server/job/controllers/JobStatus;J)Z
 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;]Ljava/util/List;Ljava/util/LinkedList;]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
-HSPLcom/android/server/job/controllers/TimeController;->maybeAdjustAlarmTime(J)J
-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/controllers/StateController;Lcom/android/server/job/controllers/TimeController;]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;]Lcom/android/server/job/JobSchedulerService;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
+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/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;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
 HSPLcom/android/server/job/controllers/TimeController;->maybeStopTrackingJobLocked(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/TimeController;Lcom/android/server/job/controllers/TimeController;]Ljava/util/List;Ljava/util/LinkedList;
-HSPLcom/android/server/job/controllers/TimeController;->setDeadlineExpiredAlarmLocked(JLandroid/os/WorkSource;)V
-HSPLcom/android/server/job/controllers/TimeController;->setDelayExpiredAlarmLocked(JLandroid/os/WorkSource;)V
-HSPLcom/android/server/job/controllers/TimeController;->updateAlarmWithListenerLocked(Ljava/lang/String;ILandroid/app/AlarmManager$OnAlarmListener;JLandroid/os/WorkSource;)V
-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;
+HPLcom/android/server/job/controllers/TimeController;->setDeadlineExpiredAlarmLocked(JLandroid/os/WorkSource;)V
+HPLcom/android/server/job/controllers/TimeController;->setDelayExpiredAlarmLocked(JLandroid/os/WorkSource;)V
+HPLcom/android/server/job/controllers/TimeController;->updateAlarmWithListenerLocked(Ljava/lang/String;ILandroid/app/AlarmManager$OnAlarmListener;JLandroid/os/WorkSource;)V
+HPLcom/android/server/job/controllers/idle/DeviceIdlenessTracker;->onReceive(Landroid/content/Context;Landroid/content/Intent;)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/lights/LightsManager;-><init>()V
 HSPLcom/android/server/lights/LightsService$1;-><init>(Lcom/android/server/lights/LightsService;)V
 HSPLcom/android/server/lights/LightsService$LightImpl;-><init>(Lcom/android/server/lights/LightsService;Landroid/content/Context;Landroid/hardware/light/HwLight;)V
@@ -4716,7 +5092,6 @@
 HSPLcom/android/server/lights/LightsService$LightImpl;->setLightLocked(IIIII)V
 HSPLcom/android/server/lights/LightsService$LightImpl;->shouldBeInLowPersistenceMode()Z
 HSPLcom/android/server/lights/LightsService$LightsManagerBinderService;-><init>(Lcom/android/server/lights/LightsService;)V
-HSPLcom/android/server/lights/LightsService$LightsManagerBinderService;-><init>(Lcom/android/server/lights/LightsService;Lcom/android/server/lights/LightsService$LightsManagerBinderService-IA;)V
 HSPLcom/android/server/lights/LightsService$VintfHalCache;-><init>()V
 HSPLcom/android/server/lights/LightsService$VintfHalCache;-><init>(Lcom/android/server/lights/LightsService$VintfHalCache-IA;)V
 HSPLcom/android/server/lights/LightsService$VintfHalCache;->get()Landroid/hardware/light/ILights;
@@ -4728,335 +5103,404 @@
 HSPLcom/android/server/lights/LightsService;->populateAvailableLights(Landroid/content/Context;)V
 HSPLcom/android/server/lights/LightsService;->populateAvailableLightsFromHidl(Landroid/content/Context;)V
 HSPLcom/android/server/lights/LogicalLight;-><init>()V
-HPLcom/android/server/locales/LocaleManagerService;->getApplicationLocalesUnchecked(Ljava/lang/String;I)Landroid/os/LocaleList;
-HSPLcom/android/server/location/LocationManagerService$LocalService;->isProviderEnabledForUser(Ljava/lang/String;I)Z
+HSPLcom/android/server/locales/LocaleManagerService;->getApplicationLocales(Ljava/lang/String;I)Landroid/os/LocaleList;+]Lcom/android/server/locales/LocaleManagerService;Lcom/android/server/locales/LocaleManagerService;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
+HSPLcom/android/server/locales/LocaleManagerService;->getPackageUid(Ljava/lang/String;I)I+]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/locales/LocaleManagerService;->isCallerFromCurrentInputMethod(I)Z
+HSPLcom/android/server/location/LocationManagerService$LocalService;->isProvider(Ljava/lang/String;Landroid/location/util/identity/CallerIdentity;)Z+]Landroid/location/util/identity/CallerIdentity;Landroid/location/util/identity/CallerIdentity;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;
+HSPLcom/android/server/location/LocationManagerService$LocalService;->isProviderEnabledForUser(Ljava/lang/String;I)Z+]Lcom/android/server/location/LocationManagerService;Lcom/android/server/location/LocationManagerService;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;
 HSPLcom/android/server/location/LocationManagerService$SystemInjector;->getSettingsHelper()Lcom/android/server/location/injector/SettingsHelper;
-HSPLcom/android/server/location/LocationManagerService;->getLocationProviderManager(Ljava/lang/String;)Lcom/android/server/location/provider/LocationProviderManager;+]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]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;
+HPLcom/android/server/location/LocationManagerService;->$r8$lambda$cv7OPFVwOC__EoRNTpVWrDWWwT4(Lcom/android/server/location/LocationManagerService;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;II)V
+HPLcom/android/server/location/LocationManagerService;->getLastLocation(Ljava/lang/String;Landroid/location/LastLocationRequest;Ljava/lang/String;Ljava/lang/String;)Landroid/location/Location;+]Lcom/android/server/location/LocationManagerService;Lcom/android/server/location/LocationManagerService;]Landroid/location/util/identity/CallerIdentity;Landroid/location/util/identity/CallerIdentity;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;
+HSPLcom/android/server/location/LocationManagerService;->getLocationProviderManager(Ljava/lang/String;)Lcom/android/server/location/provider/LocationProviderManager;+]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;
 HSPLcom/android/server/location/LocationManagerService;->isLocationEnabledForUser(I)Z+]Lcom/android/server/location/injector/SettingsHelper;Lcom/android/server/location/injector/SystemSettingsHelper;]Lcom/android/server/location/injector/Injector;Lcom/android/server/location/LocationManagerService$SystemInjector;
+HSPLcom/android/server/location/LocationManagerService;->isProviderEnabledForUser(Ljava/lang/String;I)Z+]Lcom/android/server/location/LocationManagerService$LocalService;Lcom/android/server/location/LocationManagerService$LocalService;
+HPLcom/android/server/location/LocationManagerService;->lambda$onSystemReady$5(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;II)V+]Lcom/android/server/location/LocationManagerService;Lcom/android/server/location/LocationManagerService;
+HSPLcom/android/server/location/LocationManagerService;->registerLocationListener(Ljava/lang/String;Landroid/location/LocationRequest;Landroid/location/ILocationListener;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/location/LocationManagerService;->validateLocationRequest(Ljava/lang/String;Landroid/location/LocationRequest;Landroid/location/util/identity/CallerIdentity;)Landroid/location/LocationRequest;
 HSPLcom/android/server/location/contexthub/ConcurrentLinkedEvictingDeque;->add(Ljava/lang/Object;)Z+]Ljava/util/concurrent/ConcurrentLinkedDeque;Lcom/android/server/location/contexthub/ConcurrentLinkedEvictingDeque;
-HPLcom/android/server/location/contexthub/ContextHubClientBroker;->invokeCallback(Lcom/android/server/location/contexthub/ContextHubClientBroker$CallbackConsumer;)V
-HPLcom/android/server/location/contexthub/ContextHubClientBroker;->lambda$acquireWakeLock$11()V
-HPLcom/android/server/location/contexthub/ContextHubClientBroker;->lambda$releaseWakeLock$12()V
-HPLcom/android/server/location/contexthub/ContextHubClientBroker;->releaseWakeLock()V
-HPLcom/android/server/location/contexthub/ContextHubClientBroker;->sendMessageToClient(Landroid/hardware/location/NanoAppMessage;Ljava/util/List;Ljava/util/List;)V
-HPLcom/android/server/location/contexthub/ContextHubClientBroker;->sendMessageToNanoApp(Landroid/hardware/location/NanoAppMessage;)I
-HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->toString()Ljava/lang/String;
-HPLcom/android/server/location/contexthub/ContextHubClientBroker;->updateNanoAppAuthState(JLjava/util/List;ZZ)I
-HPLcom/android/server/location/contexthub/ContextHubClientManager;->onMessageFromNanoApp(ISLandroid/hardware/location/NanoAppMessage;Ljava/util/List;Ljava/util/List;)V
-HPLcom/android/server/location/contexthub/ContextHubEventLogger$ContextHubEventBase;-><init>(JI)V
-HPLcom/android/server/location/contexthub/ContextHubEventLogger$NanoappEventBase;-><init>(JIJZ)V
-HPLcom/android/server/location/contexthub/ContextHubEventLogger$NanoappMessageEvent;-><init>(JILandroid/hardware/location/NanoAppMessage;Z)V
-HPLcom/android/server/location/contexthub/ContextHubEventLogger;->getInstance()Lcom/android/server/location/contexthub/ContextHubEventLogger;
-HPLcom/android/server/location/contexthub/ContextHubEventLogger;->logMessageToNanoapp(ILandroid/hardware/location/NanoAppMessage;Z)V
-HPLcom/android/server/location/contexthub/ContextHubService$ContextHubServiceCallback;->handleNanoappMessage(SLandroid/hardware/location/NanoAppMessage;Ljava/util/List;Ljava/util/List;)V
-HPLcom/android/server/location/contexthub/ContextHubService;->checkHalProxyAndContextHubId(ILandroid/hardware/location/IContextHubTransactionCallback;I)Z
+HSPLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda1;->runOrThrow()V
+HSPLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/location/contexthub/ContextHubClientBroker;)V
+HSPLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda2;->runOrThrow()V
+HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->hasPermissions(Ljava/util/List;)Z+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->lambda$releaseWakeLock$12()V+]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;
+HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->releaseWakeLock()V
+HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->sendMessageToClient(Landroid/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;
+HPLcom/android/server/location/contexthub/ContextHubClientBroker;->sendMessageToNanoApp(Landroid/hardware/location/NanoAppMessage;)I+]Lcom/android/server/location/contexthub/ContextHubEventLogger;Lcom/android/server/location/contexthub/ContextHubEventLogger;]Lcom/android/server/location/contexthub/ContextHubClientBroker;Lcom/android/server/location/contexthub/ContextHubClientBroker;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/hardware/location/ContextHubInfo;Landroid/hardware/location/ContextHubInfo;]Lcom/android/server/location/contexthub/IContextHubWrapper;Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;]Landroid/hardware/location/NanoAppMessage;Landroid/hardware/location/NanoAppMessage;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;
+HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->toString()Ljava/lang/String;+]Lcom/android/server/location/contexthub/ContextHubClientBroker;Lcom/android/server/location/contexthub/ContextHubClientBroker;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/location/contexthub/ContextHubClientBroker$PendingIntentRequest;Lcom/android/server/location/contexthub/ContextHubClientBroker$PendingIntentRequest;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;
+HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->updateNanoAppAuthState(JLjava/util/List;ZZ)I+]Lcom/android/server/location/contexthub/ContextHubClientBroker;Lcom/android/server/location/contexthub/ContextHubClientBroker;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/util/Set;Ljava/util/HashSet;
+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;]Lcom/android/server/location/contexthub/ContextHubEventLogger;Lcom/android/server/location/contexthub/ContextHubEventLogger;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/hardware/location/NanoAppMessage;Landroid/hardware/location/NanoAppMessage;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
+HSPLcom/android/server/location/contexthub/ContextHubEventLogger$ContextHubEventBase;-><init>(JI)V
+HSPLcom/android/server/location/contexthub/ContextHubEventLogger$NanoappEventBase;-><init>(JIJZ)V
+HSPLcom/android/server/location/contexthub/ContextHubEventLogger$NanoappMessageEvent;-><init>(JILandroid/hardware/location/NanoAppMessage;Z)V
+HSPLcom/android/server/location/contexthub/ContextHubEventLogger;->getInstance()Lcom/android/server/location/contexthub/ContextHubEventLogger;
+HSPLcom/android/server/location/contexthub/ContextHubEventLogger;->logMessageFromNanoapp(ILandroid/hardware/location/NanoAppMessage;Z)V+]Lcom/android/server/location/contexthub/ConcurrentLinkedEvictingDeque;Lcom/android/server/location/contexthub/ConcurrentLinkedEvictingDeque;
+HPLcom/android/server/location/contexthub/ContextHubEventLogger;->logMessageToNanoapp(ILandroid/hardware/location/NanoAppMessage;Z)V+]Lcom/android/server/location/contexthub/ConcurrentLinkedEvictingDeque;Lcom/android/server/location/contexthub/ConcurrentLinkedEvictingDeque;
+HSPLcom/android/server/location/contexthub/ContextHubService$ContextHubServiceCallback;->handleNanoappInfo(Ljava/util/List;)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;
 HSPLcom/android/server/location/contexthub/ContextHubService;->getCallingPackageName()Ljava/lang/String;
-HSPLcom/android/server/location/contexthub/ContextHubService;->handleQueryAppsCallback(ILjava/util/List;)V
+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/NanoAppStateManager;Lcom/android/server/location/contexthub/NanoAppStateManager;
 HPLcom/android/server/location/contexthub/ContextHubService;->isValidContextHubId(I)Z
-HPLcom/android/server/location/contexthub/ContextHubService;->queryNanoApps(ILandroid/hardware/location/IContextHubTransactionCallback;)V
+HPLcom/android/server/location/contexthub/ContextHubService;->queryNanoApps(ILandroid/hardware/location/IContextHubTransactionCallback;)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;
 HSPLcom/android/server/location/contexthub/ContextHubServiceTransaction;-><init>(IILjava/lang/String;)V
 HSPLcom/android/server/location/contexthub/ContextHubServiceTransaction;->getTimeout(Ljava/util/concurrent/TimeUnit;)J
-HSPLcom/android/server/location/contexthub/ContextHubServiceTransaction;->toString()Ljava/lang/String;
+HSPLcom/android/server/location/contexthub/ContextHubServiceTransaction;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/location/contexthub/ContextHubServiceUtil;->checkPermissions(Landroid/content/Context;)V
-HPLcom/android/server/location/contexthub/ContextHubServiceUtil;->createAidlContextHubMessage(SLandroid/hardware/location/NanoAppMessage;)Landroid/hardware/contexthub/ContextHubMessage;
-HPLcom/android/server/location/contexthub/ContextHubServiceUtil;->createNanoAppMessage(Landroid/hardware/contexthub/ContextHubMessage;)Landroid/hardware/location/NanoAppMessage;
+HPLcom/android/server/location/contexthub/ContextHubServiceUtil;->createAidlContextHubMessage(SLandroid/hardware/location/NanoAppMessage;)Landroid/hardware/contexthub/ContextHubMessage;+]Landroid/hardware/location/NanoAppMessage;Landroid/hardware/location/NanoAppMessage;
+HSPLcom/android/server/location/contexthub/ContextHubServiceUtil;->createNanoAppMessage(Landroid/hardware/contexthub/ContextHubMessage;)Landroid/hardware/location/NanoAppMessage;
 HSPLcom/android/server/location/contexthub/ContextHubServiceUtil;->createNanoAppStateList([Landroid/hardware/contexthub/NanoappInfo;)Ljava/util/List;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/location/contexthub/ContextHubTransactionManager$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/location/contexthub/ContextHubTransactionManager;Lcom/android/server/location/contexthub/ContextHubServiceTransaction;)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;->onTransact()I
+HSPLcom/android/server/location/contexthub/ContextHubTransactionManager$5;->onTransact()I+]Lcom/android/server/location/contexthub/IContextHubWrapper;Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;
 HSPLcom/android/server/location/contexthub/ContextHubTransactionManager$TransactionRecord;-><init>(Lcom/android/server/location/contexthub/ContextHubTransactionManager;Ljava/lang/String;)V
-HSPLcom/android/server/location/contexthub/ContextHubTransactionManager;->addTransaction(Lcom/android/server/location/contexthub/ContextHubServiceTransaction;)V
-HSPLcom/android/server/location/contexthub/ContextHubTransactionManager;->createQueryTransaction(ILandroid/hardware/location/IContextHubTransactionCallback;Ljava/lang/String;)Lcom/android/server/location/contexthub/ContextHubServiceTransaction;
-HSPLcom/android/server/location/contexthub/ContextHubTransactionManager;->startNextTransaction()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;
+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;
+HSPLcom/android/server/location/contexthub/ContextHubTransactionManager;->removeTransactionAndStartNext()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;
+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;
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback;Ljava/util/List;)V
-HPLcom/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
-HPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback$$ExternalSyntheticLambda2;->run()V
-HPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback;->handleContextHubMessage(Landroid/hardware/contexthub/ContextHubMessage;[Ljava/lang/String;)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
+HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback;->handleContextHubMessage(Landroid/hardware/contexthub/ContextHubMessage;[Ljava/lang/String;)V
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback;->handleNanoappInfo([Landroid/hardware/contexthub/NanoappInfo;)V
-HPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback;->lambda$handleContextHubMessage$1(Landroid/hardware/contexthub/ContextHubMessage;[Ljava/lang/String;)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;->-$$Nest$fgetmHandler(Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;)Landroid/os/Handler;
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->getHub()Landroid/hardware/contexthub/IContextHub;
-HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->queryNanoapps(I)I
-HPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->sendMessageToContextHub(SILandroid/hardware/location/NanoAppMessage;)I
-HSPLcom/android/server/location/contexthub/NanoAppStateManager;->getNanoAppHandle(IJ)I+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/Collection;Ljava/util/HashMap$Values;]Ljava/util/Iterator;Ljava/util/HashMap$ValueIterator;]Landroid/hardware/location/NanoAppInstanceInfo;Landroid/hardware/location/NanoAppInstanceInfo;
+HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->queryNanoapps(I)I+]Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;
+HPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->sendMessageToContextHub(SILandroid/hardware/location/NanoAppMessage;)I+]Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;
+HSPLcom/android/server/location/contexthub/NanoAppStateManager;->getNanoAppHandle(IJ)I+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/hardware/location/NanoAppInstanceInfo;Landroid/hardware/location/NanoAppInstanceInfo;
 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;->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;
+HSPLcom/android/server/location/contexthub/NanoAppStateManager;->updateCache(ILjava/util/List;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]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;]Landroid/hardware/location/NanoAppInstanceInfo;Landroid/hardware/location/NanoAppInstanceInfo;
 HPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->detectCountry(ZZ)Landroid/location/Country;
 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;
 HSPLcom/android/server/location/eventlog/LocalEventLog;->createEntry(ZI)I
+HPLcom/android/server/location/eventlog/LocalEventLog;->getTimeDelta(I)I
 HSPLcom/android/server/location/eventlog/LocalEventLog;->incrementIndex(I)I
 HSPLcom/android/server/location/eventlog/LocalEventLog;->isEmpty()Z
 HPLcom/android/server/location/eventlog/LocalEventLog;->startIndex()I
 HSPLcom/android/server/location/eventlog/LocalEventLog;->wrapIndex(I)I
 HPLcom/android/server/location/eventlog/LocationEventLog$AggregateStats;->markLocationDelivered()V
+HPLcom/android/server/location/eventlog/LocationEventLog$AggregateStats;->updateTotals()V
 HPLcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;->addLog(Ljava/lang/Object;)V+]Lcom/android/server/location/eventlog/LocalEventLog;Lcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;
-HPLcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;->logProviderDeliveredLocations(Ljava/lang/String;ILandroid/location/util/identity/CallerIdentity;)V
+HPLcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;->logProviderDeliveredLocations(Ljava/lang/String;ILandroid/location/util/identity/CallerIdentity;)V+]Lcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;Lcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;
+HPLcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;->logProviderReceivedLocations(Ljava/lang/String;I)V+]Lcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;Lcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;
 HPLcom/android/server/location/eventlog/LocationEventLog$ProviderDeliverLocationEvent;-><init>(Ljava/lang/String;ILandroid/location/util/identity/CallerIdentity;)V
 HSPLcom/android/server/location/eventlog/LocationEventLog$ProviderEvent;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/location/eventlog/LocationEventLog;->getAggregateStats(Ljava/lang/String;Landroid/location/util/identity/CallerIdentity;)Lcom/android/server/location/eventlog/LocationEventLog$AggregateStats;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HPLcom/android/server/location/eventlog/LocationEventLog;->logProviderDeliveredLocations(Ljava/lang/String;ILandroid/location/util/identity/CallerIdentity;)V+]Lcom/android/server/location/eventlog/LocationEventLog;Lcom/android/server/location/eventlog/LocationEventLog;]Lcom/android/server/location/eventlog/LocationEventLog$AggregateStats;Lcom/android/server/location/eventlog/LocationEventLog$AggregateStats;]Lcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;Lcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;
+HPLcom/android/server/location/eventlog/LocationEventLog;->logProviderReceivedLocations(Ljava/lang/String;I)V+]Lcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;Lcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;
 HPLcom/android/server/location/fudger/LocationFudger;->createCoarse(Landroid/location/Location;)Landroid/location/Location;
 HPLcom/android/server/location/gnss/GnssListenerMultiplexer$$ExternalSyntheticLambda9;-><init>(IZ)V
 HPLcom/android/server/location/gnss/GnssListenerMultiplexer$$ExternalSyntheticLambda9;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;->onForegroundChanged(IZ)Z+]Landroid/location/util/identity/CallerIdentity;Landroid/location/util/identity/CallerIdentity;
+HPLcom/android/server/location/gnss/GnssListenerMultiplexer;->$r8$lambda$5cBO4A3p1nQ6a5ehfSezDbkW16c(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;
+HPLcom/android/server/location/gnss/GnssListenerMultiplexer;->onAppForegroundChanged(IZ)V
+HPLcom/android/server/location/gnss/GnssLocationProvider$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/location/gnss/GnssLocationProvider;Landroid/location/GnssStatus;)V
+HPLcom/android/server/location/gnss/GnssLocationProvider$$ExternalSyntheticLambda21;-><init>(Lcom/android/server/location/gnss/GnssLocationProvider;Ljava/lang/Runnable;)V
+HPLcom/android/server/location/gnss/GnssLocationProvider$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/location/gnss/GnssLocationProvider;ZLandroid/location/Location;)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;
 HPLcom/android/server/location/gnss/GnssLocationProvider;->handleReportLocation(ZLandroid/location/Location;)V
-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;->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;]Ljava/util/Set;Ljava/util/HashSet;]Lcom/android/server/location/gnss/GnssMetrics;Lcom/android/server/location/gnss/GnssMetrics;
+HPLcom/android/server/location/gnss/GnssLocationProvider;->onReportSvStatus(Landroid/location/GnssStatus;)V
 HPLcom/android/server/location/gnss/GnssLocationProvider;->postWithWakeLockHeld(Ljava/lang/Runnable;)V
+HPLcom/android/server/location/gnss/GnssMetrics$GnssPowerMetrics;->reportSignalQuality([F)V+]Lcom/android/server/location/gnss/GnssMetrics$GnssPowerMetrics;Lcom/android/server/location/gnss/GnssMetrics$GnssPowerMetrics;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;
 HPLcom/android/server/location/gnss/GnssMetrics$Statistics;->addItem(D)V
+HPLcom/android/server/location/gnss/GnssMetrics;->isL5Sv(F)Z
 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;->logSvStatus(Landroid/location/GnssStatus;)V+]Landroid/location/GnssStatus;Landroid/location/GnssStatus;
+HPLcom/android/server/location/gnss/GnssStatusProvider$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/location/gnss/GnssStatusProvider;Landroid/location/GnssStatus;)V
 HPLcom/android/server/location/gnss/GnssStatusProvider$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/location/gnss/GnssStatusProvider$$ExternalSyntheticLambda4;->operate(Ljava/lang/Object;)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;->onReportSvStatus(Landroid/location/GnssStatus;)V
 HPLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda19;-><init>(Lcom/android/server/location/gnss/hal/GnssNative;I[I[F[F[F[F[F)V
 HPLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda19;->runOrThrow()V
-HPLcom/android/server/location/gnss/hal/GnssNative;->lambda$reportLocation$0(ZLandroid/location/Location;)V
-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$$ExternalSyntheticLambda12;,Lcom/android/server/location/gnss/GnssListenerMultiplexer$$ExternalSyntheticLambda4;
+HPLcom/android/server/location/gnss/hal/GnssNative;->injectLocation(Landroid/location/Location;)V
+HPLcom/android/server/location/gnss/hal/GnssNative;->lambda$reportLocation$0(ZLandroid/location/Location;)V+]Lcom/android/server/location/gnss/hal/GnssNative$LocationCallbacks;Lcom/android/server/location/gnss/GnssLocationProvider;]Landroid/location/Location;Landroid/location/Location;]Lcom/android/server/location/gnss/hal/GnssNative$StatusCallbacks;Lcom/android/server/location/gnss/GnssStatusProvider;
+HPLcom/android/server/location/gnss/hal/GnssNative;->lambda$reportSvStatus$2(I[I[F[F[F[F[F)V+]Lcom/android/server/location/gnss/hal/GnssNative$SvStatusCallbacks;Lcom/android/server/location/gnss/GnssLocationProvider;,Lcom/android/server/location/gnss/GnssStatusProvider;
+HPLcom/android/server/location/gnss/hal/GnssNative;->reportSvStatus(I[I[F[F[F[F[F)V
+HSPLcom/android/server/location/injector/AppForegroundHelper;->notifyAppForeground(IZ)V+]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Lcom/android/server/location/injector/AppForegroundHelper$AppForegroundListener;Lcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda12;,Lcom/android/server/location/gnss/GnssListenerMultiplexer$$ExternalSyntheticLambda4;
+HSPLcom/android/server/location/injector/SystemAppForegroundHelper$$ExternalSyntheticLambda0;->onUidImportance(II)V
 HSPLcom/android/server/location/injector/SystemAppForegroundHelper$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/location/injector/SystemAppForegroundHelper;IZ)V
 HSPLcom/android/server/location/injector/SystemAppForegroundHelper$$ExternalSyntheticLambda1;->run()V
-HSPLcom/android/server/location/injector/SystemAppForegroundHelper;->onAppForegroundChanged(II)V
+HSPLcom/android/server/location/injector/SystemAppForegroundHelper;->onAppForegroundChanged(II)V+]Landroid/os/Handler;Landroid/os/Handler;
 HPLcom/android/server/location/injector/SystemAppOpsHelper;->noteOpNoThrow(ILandroid/location/util/identity/CallerIdentity;)Z+]Landroid/location/util/identity/CallerIdentity;Landroid/location/util/identity/CallerIdentity;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
 HSPLcom/android/server/location/injector/SystemSettingsHelper$IntegerSecureSetting;->getValueForUser(II)I+]Landroid/content/Context;Landroid/app/ContextImpl;
-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;
 HSPLcom/android/server/location/injector/SystemUserInfoHelper;->getActivityManager()Landroid/app/IActivityManager;
-HSPLcom/android/server/location/injector/SystemUserInfoHelper;->getCurrentUserId()I
+HSPLcom/android/server/location/injector/SystemUserInfoHelper;->getCurrentUserId()I+]Lcom/android/server/location/injector/SystemUserInfoHelper;Lcom/android/server/location/LocationManagerService$Lifecycle$LifecycleUserInfoHelper;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
 HSPLcom/android/server/location/injector/SystemUserInfoHelper;->getRunningUserIds()[I+]Lcom/android/server/location/injector/SystemUserInfoHelper;Lcom/android/server/location/LocationManagerService$Lifecycle$LifecycleUserInfoHelper;]Landroid/app/IActivityManager;Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/location/injector/SystemUserInfoHelper;->isVisibleUserId(I)Z+]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;
 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/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;->close()V+]Ljava/util/Map$Entry;Ljava/util/AbstractMap$SimpleImmutableEntry;]Lcom/android/server/location/listeners/ListenerMultiplexer;Lcom/android/server/location/provider/LocationProviderManager;,Lcom/android/server/location/gnss/GnssStatusProvider;,Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/gnss/GnssMeasurementsProvider;]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$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;->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/gnss/GnssStatusProvider$$ExternalSyntheticLambda3;,Lcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda19;,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;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;,Lcom/android/server/location/gnss/GnssMeasurementsProvider$GnssMeasurementListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;
+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$$ExternalSyntheticLambda19;,Lcom/android/server/location/gnss/GnssStatusProvider$$ExternalSyntheticLambda3;]Lcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;Lcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;]Lcom/android/server/location/listeners/ListenerRegistration;megamorphic_types
+HSPLcom/android/server/location/listeners/ListenerMultiplexer;->replaceRegistration(Ljava/lang/Object;Ljava/lang/Object;Lcom/android/server/location/listeners/ListenerRegistration;)V
 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;Lcom/android/server/location/gnss/GnssStatusProvider;,Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;]Lcom/android/server/location/listeners/ListenerRegistration;Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]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
 HPLcom/android/server/location/listeners/ListenerRegistration;->$r8$lambda$2ZBTq2V6H4YAlFacTxHD81N0y0Q(Lcom/android/server/location/listeners/ListenerRegistration;)Ljava/lang/Object;
-HPLcom/android/server/location/listeners/ListenerRegistration;->executeOperation(Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;)V+]Lcom/android/internal/listeners/ListenerExecutor;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;,Lcom/android/server/location/gnss/GnssMeasurementsProvider$GnssMeasurementListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;
+HPLcom/android/server/location/listeners/ListenerRegistration;->executeOperation(Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;)V+]Lcom/android/internal/listeners/ListenerExecutor;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,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$GetCurrentLocationListenerRegistration;
 HPLcom/android/server/location/listeners/ListenerRegistration;->isActive()Z
 HPLcom/android/server/location/listeners/ListenerRegistration;->lambda$executeOperation$0()Ljava/lang/Object;
-HSPLcom/android/server/location/provider/AbstractLocationProvider;->getState()Lcom/android/server/location/provider/AbstractLocationProvider$State;
+HSPLcom/android/server/location/provider/AbstractLocationProvider;->getState()Lcom/android/server/location/provider/AbstractLocationProvider$State;+]Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;
 HPLcom/android/server/location/provider/AbstractLocationProvider;->reportLocation(Landroid/location/LocationResult;)V+]Lcom/android/server/location/provider/AbstractLocationProvider$Listener;Lcom/android/server/location/provider/StationaryThrottlingLocationProvider;,Lcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper;,Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;]Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;
-HSPLcom/android/server/location/provider/DelegateLocationProvider;->waitForInitialization()V
+HPLcom/android/server/location/provider/DelegateLocationProvider;->waitForInitialization()V
 HSPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda12;->onAppForegroundChanged(IZ)V
-HPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda19;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda30;-><init>(IZ)V
 HSPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda30;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/location/provider/LocationProviderManager$ExternalWakeLockReleaser;->sendResult(Landroid/os/Bundle;)V+]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;
 HPLcom/android/server/location/provider/LocationProviderManager$LastLocation;->calculateNextCoarse(Landroid/location/Location;Landroid/location/Location;)Landroid/location/Location;
+HPLcom/android/server/location/provider/LocationProviderManager$LastLocation;->calculateNextFine(Landroid/location/Location;Landroid/location/Location;)Landroid/location/Location;
 HPLcom/android/server/location/provider/LocationProviderManager$LastLocation;->set(Landroid/location/Location;)V
 HPLcom/android/server/location/provider/LocationProviderManager$LastLocation;->setBypass(Landroid/location/Location;)V
-HPLcom/android/server/location/provider/LocationProviderManager$LocationListenerTransport;->deliverOnLocationChanged(Landroid/location/LocationResult;Landroid/os/IRemoteCallback;)V+]Landroid/location/LocationResult;Landroid/location/LocationResult;]Landroid/location/ILocationListener;Landroid/location/ILocationListener$Stub$Proxy;,Landroid/location/LocationManager$LocationListenerTransport;
+HPLcom/android/server/location/provider/LocationProviderManager$LocationListenerTransport;->deliverOnLocationChanged(Landroid/location/LocationResult;Landroid/os/IRemoteCallback;)V+]Landroid/location/LocationResult;Landroid/location/LocationResult;
 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$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(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(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$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;
-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/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;]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$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/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;]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;
 HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->-$$Nest$fputmNumLocationsDelivered(Lcom/android/server/location/provider/LocationProviderManager$LocationRegistration;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$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Lcom/android/server/location/injector/AppOpsHelper;Lcom/android/server/location/injector/SystemAppOpsHelper;]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;
+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;]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;
 HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->getIdentity()Landroid/location/util/identity/CallerIdentity;
 HPLcom/android/server/location/provider/LocationProviderManager$Registration;->getLastDeliveredLocation()Landroid/location/Location;
 HPLcom/android/server/location/provider/LocationProviderManager$Registration;->getPermissionLevel()I
 HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->getRequest()Landroid/location/LocationRequest;
-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/provider/LocationProviderManager$GetCurrentLocationListenerRegistration;]Lcom/android/server/location/eventlog/LocationEventLog;Lcom/android/server/location/eventlog/LocationEventLog;]Lcom/android/server/location/injector/LocationPowerSaveModeHelper;Lcom/android/server/location/injector/SystemLocationPowerSaveModeHelper;]Landroid/location/util/identity/CallerIdentity;Landroid/location/util/identity/CallerIdentity;
+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$GetCurrentLocationListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;]Lcom/android/server/location/eventlog/LocationEventLog;Lcom/android/server/location/eventlog/LocationEventLog;]Lcom/android/server/location/injector/LocationPowerSaveModeHelper;Lcom/android/server/location/injector/SystemLocationPowerSaveModeHelper;]Landroid/location/util/identity/CallerIdentity;Landroid/location/util/identity/CallerIdentity;
+HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->onRegister()V
 HPLcom/android/server/location/provider/LocationProviderManager$Registration;->setLastDeliveredLocation(Landroid/location/Location;)V
 HSPLcom/android/server/location/provider/LocationProviderManager;->$r8$lambda$zsTN8daznMGqhsg_3Arg9AO-KFQ(IZLcom/android/server/location/provider/LocationProviderManager$Registration;)Z
 HSPLcom/android/server/location/provider/LocationProviderManager;->access$000(Lcom/android/server/location/provider/LocationProviderManager;)Ljava/lang/Object;
+HPLcom/android/server/location/provider/LocationProviderManager;->access$100(Lcom/android/server/location/provider/LocationProviderManager;)Ljava/lang/Object;
 HPLcom/android/server/location/provider/LocationProviderManager;->access$200(Lcom/android/server/location/provider/LocationProviderManager;)Ljava/lang/Object;
 HSPLcom/android/server/location/provider/LocationProviderManager;->access$900(Lcom/android/server/location/provider/LocationProviderManager;)Ljava/lang/Object;
+HPLcom/android/server/location/provider/LocationProviderManager;->getLastLocation(Landroid/location/LastLocationRequest;Landroid/location/util/identity/CallerIdentity;I)Landroid/location/Location;+]Lcom/android/server/location/injector/AppOpsHelper;Lcom/android/server/location/injector/SystemAppOpsHelper;]Landroid/location/LastLocationRequest;Landroid/location/LastLocationRequest;]Landroid/location/util/identity/CallerIdentity;Landroid/location/util/identity/CallerIdentity;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;
 HPLcom/android/server/location/provider/LocationProviderManager;->getLastLocationUnsafe(IIZJ)Landroid/location/Location;+]Landroid/location/Location;Landroid/location/Location;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/location/provider/LocationProviderManager$LastLocation;Lcom/android/server/location/provider/LocationProviderManager$LastLocation;]Lcom/android/server/location/injector/UserInfoHelper;Lcom/android/server/location/LocationManagerService$Lifecycle$LifecycleUserInfoHelper;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/LocationProviderManager;
 HSPLcom/android/server/location/provider/LocationProviderManager;->getName()Ljava/lang/String;
+HSPLcom/android/server/location/provider/LocationProviderManager;->isActive(ZLandroid/location/util/identity/CallerIdentity;)Z+]Lcom/android/server/location/injector/SettingsHelper;Lcom/android/server/location/injector/SystemSettingsHelper;]Landroid/location/util/identity/CallerIdentity;Landroid/location/util/identity/CallerIdentity;]Lcom/android/server/location/injector/UserInfoHelper;Lcom/android/server/location/LocationManagerService$Lifecycle$LifecycleUserInfoHelper;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;
 HSPLcom/android/server/location/provider/LocationProviderManager;->isEnabled(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/location/provider/LocationProviderManager;->isVisibleToCaller()Z
 HSPLcom/android/server/location/provider/LocationProviderManager;->lambda$onAppForegroundChanged$10(IZLcom/android/server/location/provider/LocationProviderManager$Registration;)Z
-HPLcom/android/server/location/provider/LocationProviderManager;->lambda$onReportLocation$17(Landroid/location/Location;)Z
+HPLcom/android/server/location/provider/LocationProviderManager;->mergeRegistrations(Ljava/util/Collection;)Landroid/location/provider/ProviderRequest;
 HSPLcom/android/server/location/provider/LocationProviderManager;->onAppForegroundChanged(IZ)V
 HPLcom/android/server/location/provider/LocationProviderManager;->onReportLocation(Landroid/location/LocationResult;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/location/eventlog/LocationEventLog;Lcom/android/server/location/eventlog/LocationEventLog;]Landroid/location/Location;Landroid/location/Location;]Lcom/android/server/location/listeners/ListenerMultiplexer;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;]Landroid/location/LocationResult;Landroid/location/LocationResult;]Lcom/android/server/location/provider/PassiveLocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;
 HPLcom/android/server/location/provider/LocationProviderManager;->setLastLocation(Landroid/location/Location;I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/location/provider/LocationProviderManager$LastLocation;Lcom/android/server/location/provider/LocationProviderManager$LastLocation;]Lcom/android/server/location/injector/UserInfoHelper;Lcom/android/server/location/LocationManagerService$Lifecycle$LifecycleUserInfoHelper;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;
 HPLcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper;->onReportLocation(Landroid/location/LocationResult;)V+]Lcom/android/server/location/provider/AbstractLocationProvider;Lcom/android/server/location/provider/MockableLocationProvider;
-HPLcom/android/server/location/provider/PassiveLocationProviderManager;->updateLocation(Landroid/location/LocationResult;)V
-HPLcom/android/server/location/provider/StationaryThrottlingLocationProvider;->onReportLocation(Landroid/location/LocationResult;)V
-HSPLcom/android/server/location/provider/StationaryThrottlingLocationProvider;->onThrottlingChangedLocked(Z)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;
+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;->onThrottlingChangedLocked(Z)V+]Lcom/android/server/location/provider/AbstractLocationProvider;Lcom/android/server/location/gnss/GnssLocationProvider;,Lcom/android/server/location/provider/proxy/ProxyLocationProvider;]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;]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/location/eventlog/LocationEventLog;Lcom/android/server/location/eventlog/LocationEventLog;
+HPLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;->onReportLocation(Landroid/location/Location;)V
 HSPLcom/android/server/locksettings/LockSettingsService;->checkDatabaseReadPermission(Ljava/lang/String;I)V+]Lcom/android/server/locksettings/LockSettingsService;Lcom/android/server/locksettings/LockSettingsService;
-HSPLcom/android/server/locksettings/LockSettingsService;->checkPasswordHavePermission()V
 HSPLcom/android/server/locksettings/LockSettingsService;->checkPasswordReadPermission()V
-HSPLcom/android/server/locksettings/LockSettingsService;->getCredentialType(I)I
-HSPLcom/android/server/locksettings/LockSettingsService;->getCredentialTypeInternal(I)I
-HSPLcom/android/server/locksettings/LockSettingsService;->getCurrentLskfBasedProtectorId(I)J
-HSPLcom/android/server/locksettings/LockSettingsService;->getLong(Ljava/lang/String;JI)J
 HSPLcom/android/server/locksettings/LockSettingsService;->getSeparateProfileChallengeEnabled(I)Z+]Lcom/android/server/locksettings/LockSettingsService;Lcom/android/server/locksettings/LockSettingsService;
 HSPLcom/android/server/locksettings/LockSettingsService;->getSeparateProfileChallengeEnabledInternal(I)Z+]Lcom/android/server/locksettings/LockSettingsStorage;Lcom/android/server/locksettings/LockSettingsStorage;
-HSPLcom/android/server/locksettings/LockSettingsService;->getString(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/locksettings/LockSettingsService;->getStrongAuthForUser(I)I
 HSPLcom/android/server/locksettings/LockSettingsService;->hasPermission(Ljava/lang/String;)Z+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;->hashCode()I
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;->set(ILjava/lang/String;I)Lcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->contains(ILjava/lang/String;I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;Lcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;
-HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->copyOf([B)[B
-HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->hasFile(Ljava/io/File;)Z
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->hasKeyValue(Ljava/lang/String;I)Z
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->peek(ILjava/lang/String;I)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;Lcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;
-HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->peekFile(Ljava/io/File;)[B
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->peekKeyValue(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->-$$Nest$sfgetDEFAULT()Ljava/lang/Object;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getBoolean(Ljava/lang/String;ZI)Z+]Lcom/android/server/locksettings/LockSettingsStorage;Lcom/android/server/locksettings/LockSettingsStorage;
-HSPLcom/android/server/locksettings/LockSettingsStorage;->getLong(Ljava/lang/String;JI)J
 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;->getSyntheticPasswordDirectoryForUser(I)Ljava/io/File;
-HSPLcom/android/server/locksettings/LockSettingsStorage;->getSyntheticPasswordStateFileForUser(IJLjava/lang/String;)Ljava/io/File;
-HSPLcom/android/server/locksettings/LockSettingsStorage;->readFile(Ljava/io/File;)[B
-HSPLcom/android/server/locksettings/LockSettingsStorage;->readKeyValue(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;+]Lcom/android/server/locksettings/LockSettingsStorage$Cache;Lcom/android/server/locksettings/LockSettingsStorage$Cache;]Landroid/database/Cursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/sqlite/SQLiteOpenHelper;Lcom/android/server/locksettings/LockSettingsStorage$DatabaseHelper;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
-HSPLcom/android/server/locksettings/LockSettingsStorage;->readSyntheticPasswordState(IJLjava/lang/String;)[B
-HSPLcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;-><init>()V
+HSPLcom/android/server/locksettings/LockSettingsStorage;->readKeyValue(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;+]Lcom/android/server/locksettings/LockSettingsStorage$Cache;Lcom/android/server/locksettings/LockSettingsStorage$Cache;]Landroid/database/sqlite/SQLiteOpenHelper;Lcom/android/server/locksettings/LockSettingsStorage$DatabaseHelper;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;->fromBytes([B)Lcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;
-HSPLcom/android/server/locksettings/SyntheticPasswordManager;->getCredentialType(JI)I
-HSPLcom/android/server/locksettings/SyntheticPasswordManager;->loadState(Ljava/lang/String;JI)[B
 HPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->checkRecoverKeyStorePermission()V
+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;
 HPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->registerRecoveryAgent(II)V
 HPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getStatusForAllKeys(I)Ljava/util/Map;
-HPLcom/android/server/media/AudioPlayerStateMonitor$AudioManagerPlaybackListener;->onPlaybackConfigChanged(Ljava/util/List;)V+]Landroid/media/AudioPlaybackConfiguration;Landroid/media/AudioPlaybackConfiguration;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/ArrayList$Itr;]Ljava/util/Set;Landroid/util/ArraySet;]Ljava/lang/Integer;Ljava/lang/Integer;
-HPLcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;->notifyResourceGranted(II)V
-HSPLcom/android/server/media/MediaRoute2ProviderWatcher;->scanPackages()V
+HPLcom/android/server/media/AudioPlayerStateMonitor$AudioManagerPlaybackListener;->onPlaybackConfigChanged(Ljava/util/List;)V+]Landroid/media/AudioPlaybackConfiguration;Landroid/media/AudioPlaybackConfiguration;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Set;Landroid/util/ArraySet;
+HSPLcom/android/server/media/AudioPoliciesBluetoothRouteController;->getAllBluetoothRoutes()Ljava/util/List;+]Landroid/media/MediaRoute2Info;Landroid/media/MediaRoute2Info;]Lcom/android/server/media/AudioPoliciesBluetoothRouteController;Lcom/android/server/media/AudioPoliciesBluetoothRouteController;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Ljava/util/HashMap;
+HSPLcom/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;
+HSPLcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;->notifyResourceGranted(II)V
+HSPLcom/android/server/media/MediaRoute2Provider;->setProviderState(Landroid/media/MediaRoute2ProviderInfo;)V
+HPLcom/android/server/media/MediaRoute2ProviderWatcher;->scanPackages()V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda10;->onUidImportance(II)V
-HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->maybeUpdateDiscoveryPreferenceForUid(I)V+]Landroid/os/Handler;Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;]Ljava/util/stream/Stream;Ljava/util/stream/ReferencePipeline$Head;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onProviderStateChangedOnHandler(Lcom/android/server/media/MediaRoute2Provider;)V
+HPLcom/android/server/media/MediaRouter2ServiceImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->dispatchUpdates(ZZZLandroid/media/MediaRoute2Info;)V
+HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->getManagerRecords()Ljava/util/List;
+HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->getRouterRecords()Ljava/util/List;
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->maybeUpdateDiscoveryPreferenceForUid(I)V
+HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onProviderStateChangedOnHandler(Lcom/android/server/media/MediaRoute2Provider;)V+]Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Set;Ljava/util/HashSet;]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;]Landroid/media/MediaRoute2Info;Landroid/media/MediaRoute2Info;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/media/MediaRoute2ProviderInfo;Landroid/media/MediaRoute2ProviderInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->updateDiscoveryPreferenceOnHandler()V
-HSPLcom/android/server/media/MediaRouter2ServiceImpl;->-$$Nest$fgetmLock(Lcom/android/server/media/MediaRouter2ServiceImpl;)Ljava/lang/Object;
+HPLcom/android/server/media/MediaRouter2ServiceImpl;->getRemoteSessionsLocked(Landroid/media/IMediaRouter2Manager;)Ljava/util/List;+]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;
+HPLcom/android/server/media/MediaRouter2ServiceImpl;->getSystemSessionInfo(Ljava/lang/String;Z)Landroid/media/RoutingSessionInfo;+]Landroid/media/RoutingSessionInfo$Builder;Landroid/media/RoutingSessionInfo$Builder;]Lcom/android/server/media/MediaRoute2Provider;Lcom/android/server/media/SystemMediaRoute2Provider;]Lcom/android/server/media/SystemMediaRoute2Provider;Lcom/android/server/media/SystemMediaRoute2Provider;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/media/MediaRouter2ServiceImpl;Lcom/android/server/media/MediaRouter2ServiceImpl;
 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;
 HPLcom/android/server/media/MediaRouterService$AudioPlayerActiveStateChangedListenerImpl;->onAudioPlayerActiveStateChanged(Landroid/media/AudioPlaybackConfiguration;Z)V
-HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setPlaybackState(Landroid/media/session/PlaybackState;)V
+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;
+HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->getMetadata()Landroid/media/MediaMetadata;
+HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->getPlaybackState()Landroid/media/session/PlaybackState;
+HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->registerCallback(Ljava/lang/String;Landroid/media/session/ISessionControllerCallback;)V
+HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setPlaybackState(Landroid/media/session/PlaybackState;)V+]Landroid/media/session/PlaybackState;Landroid/media/session/PlaybackState;]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;->getControllerHolderIndexForCb(Landroid/media/session/ISessionControllerCallback;)I+]Ljava/lang/Object;Landroid/os/BinderProxy;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
 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;->getVolumeAttributes()Landroid/media/session/MediaController$PlaybackInfo;
-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;->getActiveSessionsLocked(I)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/media/MediaSessionService;Lcom/android/server/media/MediaSessionService;]Lcom/android/server/media/MediaSessionStack;Lcom/android/server/media/MediaSessionStack;
+HPLcom/android/server/media/MediaSessionRecord;->getVolumeAttributes()Landroid/media/session/MediaController$PlaybackInfo;+]Landroid/media/AudioManager;Landroid/media/AudioManager;
+HPLcom/android/server/media/MediaSessionRecord;->toString()Ljava/lang/String;
+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;
+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/MediaSessionService;Lcom/android/server/media/MediaSessionService;]Lcom/android/server/media/MediaSessionStack;Lcom/android/server/media/MediaSessionStack;]Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord;
 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;
-HPLcom/android/server/media/MediaSessionStack;->findMediaButtonSession(I)Lcom/android/server/media/MediaSessionRecordImpl;
-HSPLcom/android/server/media/MediaSessionStack;->getPriorityList(ZI)Ljava/util/List;
-HSPLcom/android/server/media/RemoteDisplayProviderWatcher;->scanPackages()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;
+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;
+HPLcom/android/server/media/RemoteDisplayProviderWatcher;->scanPackages()V
+HPLcom/android/server/media/SystemMediaRoute2Provider;->generateDeviceRouteSelectedSessionInfo(Ljava/lang/String;)Landroid/media/RoutingSessionInfo;
+HPLcom/android/server/media/metrics/MediaMetricsManagerService$BinderService;->inList([Ljava/lang/String;Ljava/util/List;)Z
 HPLcom/android/server/media/metrics/MediaMetricsManagerService$BinderService;->loggingLevel()I
+HPLcom/android/server/media/metrics/MediaMetricsManagerService$BinderService;->reportTrackChangeEvent(Ljava/lang/String;Landroid/media/metrics/TrackChangeEvent;I)V
+HPLcom/android/server/net/NetworkManagementService$$ExternalSyntheticLambda5;->sendCallback(Landroid/net/INetworkManagementEventObserver;)V
 HSPLcom/android/server/net/NetworkManagementService$Dependencies;->getCallingUid()I
 HSPLcom/android/server/net/NetworkManagementService$LocalService;->isNetworkRestrictedForUid(I)Z
 HPLcom/android/server/net/NetworkManagementService$NetdUnsolicitedEventListener$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/net/NetworkManagementService$NetdUnsolicitedEventListener;IZJI)V
 HPLcom/android/server/net/NetworkManagementService$NetdUnsolicitedEventListener$$ExternalSyntheticLambda4;->run()V
+HSPLcom/android/server/net/NetworkManagementService$NetdUnsolicitedEventListener;->onInterfaceAddressUpdated(Ljava/lang/String;Ljava/lang/String;II)V
 HPLcom/android/server/net/NetworkManagementService$NetdUnsolicitedEventListener;->onInterfaceClassActivityChanged(ZIJI)V
+HPLcom/android/server/net/NetworkManagementService$NetdUnsolicitedEventListener;->onQuotaLimitReached(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/net/NetworkManagementService;->-$$Nest$fgetmDaemonHandler(Lcom/android/server/net/NetworkManagementService;)Landroid/os/Handler;
 HSPLcom/android/server/net/NetworkManagementService;->-$$Nest$misNetworkRestrictedInternal(Lcom/android/server/net/NetworkManagementService;I)Z
-HSPLcom/android/server/net/NetworkManagementService;->enforceSystemUid()V
+HSPLcom/android/server/net/NetworkManagementService;->enforceSystemUid()V+]Lcom/android/server/net/NetworkManagementService$Dependencies;Lcom/android/server/net/NetworkManagementService$Dependencies;
 HSPLcom/android/server/net/NetworkManagementService;->getFirewallChainState(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
+HSPLcom/android/server/net/NetworkManagementService;->getFirewallRuleName(II)Ljava/lang/String;
 HSPLcom/android/server/net/NetworkManagementService;->getUidFirewallRulesLR(I)Landroid/util/SparseIntArray;
 HSPLcom/android/server/net/NetworkManagementService;->invokeForAllObservers(Lcom/android/server/net/NetworkManagementService$NetworkManagementEventCallback;)V+]Lcom/android/server/net/NetworkManagementService$NetworkManagementEventCallback;megamorphic_types]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
-HSPLcom/android/server/net/NetworkManagementService;->isNetworkRestrictedInternal(I)Z+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/net/NetworkManagementService;Lcom/android/server/net/NetworkManagementService;
+HSPLcom/android/server/net/NetworkManagementService;->isNetworkRestrictedInternal(I)Z+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/net/NetworkManagementService;Lcom/android/server/net/NetworkManagementService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/net/NetworkManagementService;->removeInterfaceQuota(Ljava/lang/String;)V
-HSPLcom/android/server/net/NetworkManagementService;->setFirewallUidRule(III)V+]Lcom/android/server/net/NetworkManagementService;Lcom/android/server/net/NetworkManagementService;
-HSPLcom/android/server/net/NetworkManagementService;->setFirewallUidRuleLocked(III)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;]Lcom/android/server/net/NetworkManagementService;Lcom/android/server/net/NetworkManagementService;
+HPLcom/android/server/net/NetworkManagementService;->setFirewallUidRule(III)V+]Lcom/android/server/net/NetworkManagementService;Lcom/android/server/net/NetworkManagementService;
+HPLcom/android/server/net/NetworkManagementService;->setFirewallUidRuleLocked(III)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;]Lcom/android/server/net/NetworkManagementService;Lcom/android/server/net/NetworkManagementService;
+HSPLcom/android/server/net/NetworkManagementService;->setFirewallUidRules(I[I[I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;]Lcom/android/server/net/NetworkManagementService;Lcom/android/server/net/NetworkManagementService;
 HPLcom/android/server/net/NetworkManagementService;->setInterfaceQuota(Ljava/lang/String;J)V
 HSPLcom/android/server/net/NetworkManagementService;->setUidCleartextNetworkPolicy(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/net/NetworkManagementService$Dependencies;Lcom/android/server/net/NetworkManagementService$Dependencies;
-HSPLcom/android/server/net/NetworkManagementService;->setUidOnMeteredNetworkList(IZZ)V
+HSPLcom/android/server/net/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/net/NetworkManagementService;->updateFirewallUidRuleLocked(III)Z+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/net/NetworkManagementService;Lcom/android/server/net/NetworkManagementService;
 HSPLcom/android/server/net/NetworkPolicyLogger$Data;->reset()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;->meteredAllowlistChanged(IZ)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;
-HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->tempPowerSaveWlChanged(IZILjava/lang/String;)V
-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;
-HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->uidStateChanged(IIJI)V
-HPLcom/android/server/net/NetworkPolicyLogger;->appIdleWlChanged(IZ)V
-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;
-HSPLcom/android/server/net/NetworkPolicyLogger;->tempPowerSaveWlChanged(IZILjava/lang/String;)V
-HSPLcom/android/server/net/NetworkPolicyLogger;->uidFirewallRuleChanged(III)V+]Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
-HSPLcom/android/server/net/NetworkPolicyLogger;->uidStateChanged(IIJI)V
-HPLcom/android/server/net/NetworkPolicyManagerService$$ExternalSyntheticLambda3;->accept(I)V
-HSPLcom/android/server/net/NetworkPolicyManagerService$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)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;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Landroid/app/usage/NetworkStatsManager;Landroid/app/usage/NetworkStatsManager;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
-HSPLcom/android/server/net/NetworkPolicyManagerService$16;->handleMessage(Landroid/os/Message;)Z
-HSPLcom/android/server/net/NetworkPolicyManagerService$4;->onUidStateChanged(IIJI)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;
+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;->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;->appIdleStateChanged(IZ)V
+HSPLcom/android/server/net/NetworkPolicyLogger;->meteredAllowlistChanged(IZ)V+]Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
+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;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+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;->uidStateChanged(IIJI)V+]Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
+HPLcom/android/server/net/NetworkPolicyManagerService$11;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)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;]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/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Boolean;Ljava/lang/Boolean;
+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$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;
 HPLcom/android/server/net/NetworkPolicyManagerService$Dependencies;->getNetworkTotalBytes(Landroid/net/NetworkTemplate;JJ)J
 HPLcom/android/server/net/NetworkPolicyManagerService$NetPolicyAppIdleStateChangeListener;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
+HPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->getSubscriptionOpportunisticQuota(Landroid/net/Network;I)J
 HSPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->onTempPowerSaveWhitelistChange(IZILjava/lang/String;)V
 HPLcom/android/server/net/NetworkPolicyManagerService$StatsCallback;->onThresholdReached(ILjava/lang/String;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$UidBlockedState;->copyFrom(Lcom/android/server/net/NetworkPolicyManagerService$UidBlockedState;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$UidBlockedState;->deriveUidRules()I
+HSPLcom/android/server/net/NetworkPolicyManagerService$UidBlockedState;->getEffectiveBlockedReasons(II)I
 HSPLcom/android/server/net/NetworkPolicyManagerService$UidBlockedState;->updateEffectiveBlockedReasons()V
 HSPLcom/android/server/net/NetworkPolicyManagerService$UidStateCallbackInfo;->update(IIJI)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->$r8$lambda$zE3QiCOe7K-ecrrwkzsVMp9BAjw(Lcom/android/server/net/NetworkPolicyManagerService;I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmListeners(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/os/RemoteCallbackList;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmUidStateCallbackInfos(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseArray;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mdispatchBlockedReasonChanged(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/INetworkPolicyListener;III)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mdispatchUidRulesChanged(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/INetworkPolicyListener;II)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$sfgetLOGV()Z
-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;
-HSPLcom/android/server/net/NetworkPolicyManagerService;->dispatchUidRulesChanged(Landroid/net/INetworkPolicyListener;II)V+]Landroid/net/INetworkPolicyListener;Landroid/net/INetworkPolicyListener$Stub$Proxy;,Landroid/net/NetworkPolicyManager$NetworkPolicyCallbackProxy;,Lcom/android/server/connectivity/MultipathPolicyTracker$2;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->checkAnyPermissionOf([Ljava/lang/String;)Z
+HSPLcom/android/server/net/NetworkPolicyManagerService;->dispatchBlockedReasonChanged(Landroid/net/INetworkPolicyListener;III)V+]Landroid/net/INetworkPolicyListener;Lcom/android/server/job/controllers/ConnectivityController$3;,Lcom/android/server/connectivity/MultipathPolicyTracker$2;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->dispatchUidRulesChanged(Landroid/net/INetworkPolicyListener;II)V+]Landroid/net/INetworkPolicyListener;Lcom/android/server/job/controllers/ConnectivityController$3;,Lcom/android/server/connectivity/MultipathPolicyTracker$2;
 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;
-HPLcom/android/server/net/NetworkPolicyManagerService;->getNetworkPolicies(Ljava/lang/String;)[Landroid/net/NetworkPolicy;
+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;->getOrCreateUidBlockedStateForUid(Landroid/util/SparseArray;I)Lcom/android/server/net/NetworkPolicyManagerService$UidBlockedState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HPLcom/android/server/net/NetworkPolicyManagerService;->getPrimarySubscriptionPlanLocked(I)Landroid/telephony/SubscriptionPlan;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/net/NetworkPolicyManagerService;->getPrimarySubscriptionPlanLocked(I)Landroid/telephony/SubscriptionPlan;
 HPLcom/android/server/net/NetworkPolicyManagerService;->getRestrictBackgroundStatus(I)I
 HPLcom/android/server/net/NetworkPolicyManagerService;->getRestrictBackgroundStatusInternal(I)I
+HPLcom/android/server/net/NetworkPolicyManagerService;->getSubIdLocked(Landroid/net/Network;)I
 HPLcom/android/server/net/NetworkPolicyManagerService;->getSubscriptionPlan(Landroid/net/NetworkTemplate;)Landroid/telephony/SubscriptionPlan;
+HPLcom/android/server/net/NetworkPolicyManagerService;->getTotalBytes(Landroid/net/NetworkTemplate;JJ)J
 HPLcom/android/server/net/NetworkPolicyManagerService;->getUidPolicy(I)I
 HPLcom/android/server/net/NetworkPolicyManagerService;->handleDeviceIdleModeDisabledUL()V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/os/Message;Landroid/os/Message;]Lcom/android/server/net/NetworkPolicyManagerService$UidBlockedState;Lcom/android/server/net/NetworkPolicyManagerService$UidBlockedState;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
-HSPLcom/android/server/net/NetworkPolicyManagerService;->handleUidChanged(Lcom/android/server/net/NetworkPolicyManagerService$UidStateCallbackInfo;)V
-HSPLcom/android/server/net/NetworkPolicyManagerService;->hasInternetPermissionUL(I)Z
+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;->hasInternetPermissionUL(I)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isAllowlistedFromLowPowerStandbyUL(I)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isRestrictedByAdminUL(I)Z
-HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidForegroundOnRestrictBackgroundUL(I)Z
-HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidForegroundOnRestrictPowerUL(I)Z
+HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidForegroundOnRestrictBackgroundUL(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidForegroundOnRestrictPowerUL(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 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;
-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;->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;->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
+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/pkg/AndroidPackage;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->lambda$handleDeviceIdleModeChangedUL$4(I)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->postBlockedReasonsChangedMsg(III)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->postUidRulesChangedMsg(II)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->removeUidStateUL(I)Z
 HPLcom/android/server/net/NetworkPolicyManagerService;->setAppIdleWhitelist(IZ)V
-HSPLcom/android/server/net/NetworkPolicyManagerService;->setMeteredNetworkAllowlist(IZ)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->setInterfaceQuotasAsync(Ljava/lang/String;JJ)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/net/NetworkManagementService;
 HPLcom/android/server/net/NetworkPolicyManagerService;->setNetworkTemplateEnabledInner(Landroid/net/NetworkTemplate;Z)V
-HSPLcom/android/server/net/NetworkPolicyManagerService;->setUidFirewallRuleUL(III)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->setUidFirewallRuleUL(III)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/net/NetworkPolicyLogger;Lcom/android/server/net/NetworkPolicyLogger;]Landroid/os/INetworkManagementService;Lcom/android/server/net/NetworkManagementService;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateBlockedReasonsForRestrictedModeUL(I)I
 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;]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/telephony/SubscriptionPlan;Landroid/telephony/SubscriptionPlan;]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]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;]Ljava/time/ZonedDateTime;Ljava/time/ZonedDateTime;]Landroid/net/NetworkPolicy;Landroid/net/NetworkPolicy;]Ljava/time/Instant;Ljava/time/Instant;
+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;]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;]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Landroid/os/Message;Landroid/os/Message;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;]Ljava/time/ZonedDateTime;Ljava/time/ZonedDateTime;]Landroid/telephony/SubscriptionPlan;Landroid/telephony/SubscriptionPlan;]Landroid/net/NetworkPolicy;Landroid/net/NetworkPolicy;]Ljava/time/Instant;Ljava/time/Instant;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkStats(IZ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/usage/NetworkStatsManager;Landroid/app/usage/NetworkStatsManager;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateNotificationsNL()V
-HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForAppIdleUL(II)V
-HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForDeviceIdleUL(I)V
-HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForRestrictPowerUL(I)V
-HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForDataUsageRestrictionsULInner(I)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForAppIdleUL(II)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForDeviceIdleUL(I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForRestrictPowerUL(I)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForDataUsageRestrictionsUL(I)V
+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;->updateRulesForPowerRestrictionsUL(I)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForPowerRestrictionsUL(II)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
-HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForPowerRestrictionsUL(IZ)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForPowerRestrictionsUL(IZ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForPowerRestrictionsULInner(IZ)V+]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;->updateRulesForTempWhitelistChangeUL(I)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;
 HPLcom/android/server/net/NetworkPolicyManagerService;->updateSubscriptions()V
-HSPLcom/android/server/net/NetworkPolicyManagerService;->updateUidStateUL(IIJI)Z
-HSPLcom/android/server/net/watchlist/DigestUtils;->getSha256Hash(Ljava/io/InputStream;)[B+]Ljava/io/InputStream;Ljava/io/FileInputStream;]Ljava/security/MessageDigest;Ljava/security/MessageDigest$Delegate;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateUidStateUL(IIJI)Z+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/net/watchlist/DigestUtils;->getSha256Hash(Ljava/io/InputStream;)[B+]Ljava/io/InputStream;Ljava/io/FileInputStream;
 HPLcom/android/server/net/watchlist/NetworkWatchlistService$1;->onConnectEvent(Ljava/lang/String;IJI)V+]Lcom/android/server/net/watchlist/WatchlistLoggingHandler;Lcom/android/server/net/watchlist/WatchlistLoggingHandler;
 HPLcom/android/server/net/watchlist/NetworkWatchlistService$1;->onDnsEvent(IIILjava/lang/String;[Ljava/lang/String;IJI)V+]Lcom/android/server/net/watchlist/WatchlistLoggingHandler;Lcom/android/server/net/watchlist/WatchlistLoggingHandler;
 HPLcom/android/server/net/watchlist/NetworkWatchlistService;->-$$Nest$fgetmIsLoggingEnabled(Lcom/android/server/net/watchlist/NetworkWatchlistService;)Z
+HPLcom/android/server/net/watchlist/PrivacyUtils;->createDpEncodedReportMap(Z[BLjava/util/List;Lcom/android/server/net/watchlist/WatchlistReportDbHelper$AggregatedResult;)Ljava/util/Map;
+HPLcom/android/server/net/watchlist/PrivacyUtils;->createLongitudinalReportingConfig(Ljava/lang/String;)Landroid/privacy/internal/longitudinalreporting/LongitudinalReportingConfig;
 HPLcom/android/server/net/watchlist/WatchlistConfig;->containsDomain(Ljava/lang/String;)Z
 HPLcom/android/server/net/watchlist/WatchlistConfig;->containsIp(Ljava/lang/String;)Z
 HPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->asyncNetworkEvent(Ljava/lang/String;[Ljava/lang/String;I)V+]Landroid/os/Handler;Lcom/android/server/net/watchlist/WatchlistLoggingHandler;]Landroid/os/Message;Landroid/os/Message;]Landroid/os/Bundle;Landroid/os/Bundle;
-HPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->getAllSubDomains(Ljava/lang/String;)[Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/os/Message;Landroid/os/Message;]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/net/watchlist/WatchlistLoggingHandler;Lcom/android/server/net/watchlist/WatchlistLoggingHandler;
 HPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->handleNetworkEvent(Ljava/lang/String;[Ljava/lang/String;IJ)V+]Lcom/android/server/net/watchlist/WatchlistLoggingHandler;Lcom/android/server/net/watchlist/WatchlistLoggingHandler;
+HSPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->lambda$getDigestFromUid$0(ILjava/lang/Integer;)[B
 HPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->searchAllSubDomainsInWatchlist(Ljava/lang/String;)Ljava/lang/String;+]Lcom/android/server/net/watchlist/WatchlistLoggingHandler;Lcom/android/server/net/watchlist/WatchlistLoggingHandler;
 HPLcom/android/server/net/watchlist/WatchlistLoggingHandler;->searchIpInWatchlist([Ljava/lang/String;)Ljava/lang/String;+]Lcom/android/server/net/watchlist/WatchlistLoggingHandler;Lcom/android/server/net/watchlist/WatchlistLoggingHandler;
-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;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/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;->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;
+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$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;
+HPLcom/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;
+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/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;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;
+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/app/ContextImpl;
 HSPLcom/android/server/notification/ConditionProviders;->getConfig()Lcom/android/server/notification/ManagedServices$Config;
-HSPLcom/android/server/notification/CriticalNotificationExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
-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;
-HSPLcom/android/server/notification/GroupHelper;->generatePackageKey(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/notification/ConditionProviders;->getRecordLocked(Landroid/net/Uri;Landroid/content/ComponentName;Z)Lcom/android/server/notification/ConditionProviders$ConditionRecord;
+HPLcom/android/server/notification/CriticalNotificationExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+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;
+HPLcom/android/server/notification/GroupHelper;->generatePackageKey(ILjava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/notification/GroupHelper;->maybeGroup(Landroid/service/notification/StatusBarNotification;Z)V
 HPLcom/android/server/notification/GroupHelper;->maybeUngroup(Landroid/service/notification/StatusBarNotification;ZI)V
-HSPLcom/android/server/notification/GroupHelper;->onNotificationPosted(Landroid/service/notification/StatusBarNotification;Z)V
-HSPLcom/android/server/notification/GroupHelper;->updateOngoingGroupCount(Landroid/service/notification/StatusBarNotification;Z)V
-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/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;
-HSPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->getService()Landroid/os/IInterface;
-HSPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->hashCode()I
-HSPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isEnabledForCurrentProfiles()Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+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;
+HPLcom/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;
+HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->getService()Landroid/os/IInterface;
+HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->hashCode()I
+HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isEnabledForCurrentProfiles()Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 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;
 HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isSameUser(I)Z+]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
 HPLcom/android/server/notification/ManagedServices$UserProfiles;->isCurrentProfile(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
@@ -5064,339 +5508,354 @@
 HPLcom/android/server/notification/ManagedServices;->-$$Nest$fgetmEnabledServicesForCurrentProfiles(Lcom/android/server/notification/ManagedServices;)Landroid/util/ArraySet;
 HPLcom/android/server/notification/ManagedServices;->-$$Nest$fgetmUserProfiles(Lcom/android/server/notification/ManagedServices;)Lcom/android/server/notification/ManagedServices$UserProfiles;
 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;->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;->getServiceFromTokenLocked(Landroid/os/IInterface;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/notification/ManagedServices;->getServices()Ljava/util/List;
-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;
-HSPLcom/android/server/notification/ManagedServices;->isPackageOrComponentAllowed(Ljava/lang/String;I)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;
+HSPLcom/android/server/notification/ManagedServices;->isPackageOrComponentAllowed(Ljava/lang/String;I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/notification/ManagedServices;->isSameUser(Landroid/os/IInterface;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;
-HSPLcom/android/server/notification/ManagedServices;->isServiceTokenValidLocked(Landroid/os/IInterface;)Z+]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
-HSPLcom/android/server/notification/ManagedServices;->writeDefaults(Lcom/android/modules/utils/TypedXmlSerializer;)V
-HSPLcom/android/server/notification/ManagedServices;->writeXml(Lcom/android/modules/utils/TypedXmlSerializer;ZI)V
-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/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;
+HPLcom/android/server/notification/ManagedServices;->isServiceTokenValidLocked(Landroid/os/IInterface;)Z+]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
+HSPLcom/android/server/notification/ManagedServices;->writeDefaults(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLcom/android/server/notification/ManagedServices;->writeXml(Lcom/android/modules/utils/TypedXmlSerializer;ZI)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;,Lcom/android/server/notification/ConditionProviders;,Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
+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;
+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/NotificationChannelLogger;->getLoggingImportance(Landroid/app/NotificationChannel;)I
-HSPLcom/android/server/notification/NotificationChannelLogger;->getLoggingImportance(Landroid/app/NotificationChannel;I)I
+HSPLcom/android/server/notification/NotificationChannelLogger;->getLoggingImportance(Landroid/app/NotificationChannel;I)I+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;
 HSPLcom/android/server/notification/NotificationChannelLoggerImpl;->logNotificationChannel(Lcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;Landroid/app/NotificationChannel;ILjava/lang/String;II)V
 HPLcom/android/server/notification/NotificationComparator;->compare(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationComparator;Lcom/android/server/notification/NotificationComparator;
 HPLcom/android/server/notification/NotificationComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I+]Lcom/android/server/notification/NotificationComparator;Lcom/android/server/notification/NotificationComparator;
 HPLcom/android/server/notification/NotificationComparator;->isCallStyle(Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HPLcom/android/server/notification/NotificationComparator;->isImportantColorized(Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HPLcom/android/server/notification/NotificationComparator;->isImportantMessaging(Lcom/android/server/notification/NotificationRecord;)Z+]Lcom/android/internal/util/NotificationMessagingUtil;Lcom/android/internal/util/NotificationMessagingUtil;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationComparator;->isImportantOngoing(Lcom/android/server/notification/NotificationRecord;)Z+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationComparator;Lcom/android/server/notification/NotificationComparator;
+HPLcom/android/server/notification/NotificationComparator;->isImportantOngoing(Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationComparator;Lcom/android/server/notification/NotificationComparator;
 HPLcom/android/server/notification/NotificationComparator;->isImportantPeople(Lcom/android/server/notification/NotificationRecord;)Z+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationComparator;->isOngoing(Lcom/android/server/notification/NotificationRecord;)Z
 HPLcom/android/server/notification/NotificationComparator;->isSystemMax(Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]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;
-HPLcom/android/server/notification/NotificationManagerService$10;->applyEnqueuedAdjustmentFromAssistant(Landroid/service/notification/INotificationListener;Landroid/service/notification/Adjustment;)V+]Lcom/android/server/notification/NotificationManagerService$10;Lcom/android/server/notification/NotificationManagerService$10;]Landroid/service/notification/Adjustment;Landroid/service/notification/Adjustment;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-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+]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;
-HPLcom/android/server/notification/NotificationManagerService$10;->canNotifyAsPackage(Ljava/lang/String;Ljava/lang/String;I)Z+]Landroid/os/UserHandle;Landroid/os/UserHandle;
-HSPLcom/android/server/notification/NotificationManagerService$10;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V+]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
-HSPLcom/android/server/notification/NotificationManagerService$10;->createNotificationChannels(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
-HSPLcom/android/server/notification/NotificationManagerService$10;->createNotificationChannelsImpl(Ljava/lang/String;ILandroid/content/pm/ParceledListSlice;I)V
-HSPLcom/android/server/notification/NotificationManagerService$10;->deleteNotificationChannel(Ljava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/server/notification/NotificationManagerService$10;->enforceDeletingChannelHasNoFgService(Ljava/lang/String;ILjava/lang/String;)V
-HPLcom/android/server/notification/NotificationManagerService$10;->enforceSystemOrSystemUIOrSamePackage(Ljava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/server/notification/NotificationManagerService$10;->enqueueNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;I)V
-HPLcom/android/server/notification/NotificationManagerService$10;->getActiveNotificationsFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]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;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-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/ArrayList;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
-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;
-HPLcom/android/server/notification/NotificationManagerService$10;->getNotificationChannelGroup(Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannelGroup;
-HPLcom/android/server/notification/NotificationManagerService$10;->getNotificationChannelGroups(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
-HPLcom/android/server/notification/NotificationManagerService$10;->getNotificationChannels(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-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;
-HPLcom/android/server/notification/NotificationManagerService$10;->setNotificationsShownFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;)V
-HSPLcom/android/server/notification/NotificationManagerService$11;->areNotificationsEnabledForPackage(Ljava/lang/String;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
-HSPLcom/android/server/notification/NotificationManagerService$15;->run()V
-HPLcom/android/server/notification/NotificationManagerService$1;->onNotificationVisibilityChanged([Lcom/android/internal/statusbar/NotificationVisibility;[Lcom/android/internal/statusbar/NotificationVisibility;)V
+HSPLcom/android/server/notification/NotificationHistoryManager;->getUserHistoryAndInitializeIfNeededLocked(I)Lcom/android/server/notification/NotificationHistoryDatabase;
+HPLcom/android/server/notification/NotificationHistoryManager;->lambda$addNotification$0(Landroid/app/NotificationHistory$HistoricalNotification;)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;
+HPLcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/notification/NotificationManagerService;Ljava/util/List;Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;Lcom/android/server/notification/NotificationRecordLogger$NotificationReported;)V
+HPLcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda12;->run()V
+HPLcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/notification/NotificationManagerService;ZLandroid/app/Notification;ILjava/lang/String;I)V
+HPLcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda5;->run()V
+HSPLcom/android/server/notification/NotificationManagerService$12;->areNotificationsEnabledForPackage(Ljava/lang/String;I)Z
+HPLcom/android/server/notification/NotificationManagerService$16;->run()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
 HPLcom/android/server/notification/NotificationManagerService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-HSPLcom/android/server/notification/NotificationManagerService$9;->updateAutogroupSummary(ILjava/lang/String;Z)V
-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
-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;]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$EnqueueNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;ILcom/android/server/notification/NotificationRecord;ZJ)V
-HSPLcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;->run()V
+HPLcom/android/server/notification/NotificationManagerService$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/notification/NotificationManagerService$Archive;->record(Landroid/service/notification/StatusBarNotification;I)V
+HPLcom/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
+HPLcom/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;]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$EnqueueNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;ILcom/android/server/notification/NotificationRecord;ZLcom/android/server/notification/NotificationManagerService$PostNotificationTracker;)V
+HPLcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;->enqueueNotification()Z+]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$$ExternalSyntheticLambda10;-><init>(Ljava/util/function/BiConsumer;Landroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Ljava/lang/String;Z)V
 HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->getConfig()Lcom/android/server/notification/ManagedServices$Config;
-HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isAdjustmentAllowed(Ljava/lang/String;)Z
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isAdjustmentAllowed(Ljava/lang/String;)Z+]Ljava/util/Set;Landroid/util/ArraySet;
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isVerboseLogEnabled()Z
-HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantLocked(Landroid/service/notification/StatusBarNotification;IZLjava/util/function/BiConsumer;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantLocked(Landroid/service/notification/StatusBarNotification;IZLjava/util/function/BiConsumer;)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]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;]Lcom/android/server/notification/NotificationManagerService$TrimCache;Lcom/android/server/notification/NotificationManagerService$TrimCache;
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantVisibilityChangedLocked(Lcom/android/server/notification/NotificationRecord;Z)V
-HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onNotificationEnqueuedLocked(Lcom/android/server/notification/NotificationRecord;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]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;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;
-HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onNotificationsSeenLocked(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;]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;]Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]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+]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;
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda0;-><init>(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$$ExternalSyntheticLambda0;->run()V
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda1;->run()V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda2;-><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$$ExternalSyntheticLambda2;->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
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda5;->run()V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->$r8$lambda$gopMPHUla24Uhbx5EV_eVLtMAsk(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;->getConfig()Lcom/android/server/notification/ManagedServices$Config;
-HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getNotificationListenerFilter(Landroid/util/Pair;)Landroid/service/notification/NotificationListenerFilter;
-HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getOnNotificationPostedTrim(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)I
-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;
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelChanged(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
+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
+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;
+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/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]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$NotificationListeners;->lambda$prepareNotifyPostedLocked$2(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
 HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelChanged(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
-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;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-HSPLcom/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;
-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;]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/os/UserHandle;Landroid/os/UserHandle;]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;->notifyRankingUpdateLocked(Ljava/util/List;)V
-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;->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;]Landroid/os/UserHandle;Landroid/os/UserHandle;]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;
-HSPLcom/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$1(Lcom/android/server/notification/NotificationRecord;)V
-HSPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->run()V
-HSPLcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;->requestSort()V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelGroupChanged(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V+]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
+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;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HPLcom/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;
+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;]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;
+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;]Landroid/os/UserHandle;Landroid/os/UserHandle;]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;
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->prepareNotifyPostedLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Z)Ljava/util/List;+]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/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]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$PostNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;Ljava/lang/String;ILcom/android/server/notification/NotificationManagerService$PostNotificationTracker;)V
+HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->lambda$postNotification$0(Landroid/service/notification/StatusBarNotification;)V
+HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->postNotification()Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]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/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;]Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;]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;
+HPLcom/android/server/notification/NotificationManagerService$PostNotificationTracker;-><init>(Landroid/os/PowerManager$WakeLock;)V
+HPLcom/android/server/notification/NotificationManagerService$PostNotificationTracker;->finish()J+]Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;
+HPLcom/android/server/notification/NotificationManagerService$PostNotificationTrackerFactory;->newTracker(Landroid/os/PowerManager$WakeLock;)Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;
 HSPLcom/android/server/notification/NotificationManagerService$SavePolicyFileRunnable;->run()V
-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;->isInLockDownMode(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
-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;->scheduleCancelNotification(Lcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
-HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmAssistants(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
-HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmHandler(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
+HPLcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;-><init>(Landroid/service/notification/StatusBarNotification;)V
+HPLcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;->get()Landroid/service/notification/StatusBarNotification;
+HPLcom/android/server/notification/NotificationManagerService$StrongAuthTracker;->isInLockDownMode(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
+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;
+HPLcom/android/server/notification/NotificationManagerService$WorkerHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/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;->-$$Nest$fgetmAssistants(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
+HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmHandler(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmListeners(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$NotificationListeners;
+HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmNotificationRecordLogger(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationRecordLogger;
 HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmPackageManagerClient(Lcom/android/server/notification/NotificationManagerService;)Landroid/content/pm/PackageManager;
+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;
 HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mcheckCallerIsSameApp(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)V
 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;
-HPLcom/android/server/notification/NotificationManagerService;->applyAdjustment(Lcom/android/server/notification/NotificationRecord;Landroid/service/notification/Adjustment;)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;]Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/ArrayList$Itr;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
+HPLcom/android/server/notification/NotificationManagerService;->acquireWakeLockForPost(Ljava/lang/String;I)Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;+]Lcom/android/server/notification/NotificationManagerService$PostNotificationTrackerFactory;Lcom/android/server/notification/NotificationManagerService$9;
+HPLcom/android/server/notification/NotificationManagerService;->applyAdjustment(Lcom/android/server/notification/NotificationRecord;Landroid/service/notification/Adjustment;)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;]Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
 HSPLcom/android/server/notification/NotificationManagerService;->areNotificationsEnabledForPackageInt(Ljava/lang/String;I)Z+]Lcom/android/server/notification/PermissionHelper;Lcom/android/server/notification/PermissionHelper;
-HSPLcom/android/server/notification/NotificationManagerService;->buzzBeepBlinkLocked(Lcom/android/server/notification/NotificationRecord;)I
-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
-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;
-HSPLcom/android/server/notification/NotificationManagerService;->cancelNotification(IILjava/lang/String;Ljava/lang/String;IIIZIILcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
-HSPLcom/android/server/notification/NotificationManagerService;->cancelNotificationInternal(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;II)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+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/SystemService;Lcom/android/server/notification/NotificationManagerService;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/media/AudioManager;Landroid/media/AudioManager;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HPLcom/android/server/notification/NotificationManagerService;->canBeNonDismissible(Landroid/content/pm/ApplicationInfo;Landroid/app/Notification;)Z+]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HPLcom/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;
+HPLcom/android/server/notification/NotificationManagerService;->cancelNotification(IILjava/lang/String;Ljava/lang/String;IIIZIILcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
+HPLcom/android/server/notification/NotificationManagerService;->cancelNotificationInternal(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;II)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 HPLcom/android/server/notification/NotificationManagerService;->cancelNotificationLocked(Lcom/android/server/notification/NotificationRecord;ZIIIZLjava/lang/String;J)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;->checkCallerIsSystemOrSameApp(Ljava/lang/String;)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
-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;
-HSPLcom/android/server/notification/NotificationManagerService;->checkRemoteViews(Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;)V
-HSPLcom/android/server/notification/NotificationManagerService;->checkRestrictedCategories(Landroid/app/Notification;)V
-HSPLcom/android/server/notification/NotificationManagerService;->clamp(III)I
+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;
+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;->createNotificationChannelGroup(Ljava/lang/String;ILandroid/app/NotificationChannelGroup;ZZ)V
-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;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Lcom/android/server/notification/ShortcutHelper;Lcom/android/server/notification/ShortcutHelper;]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]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$SetN;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/app/ActivityManager;Landroid/app/ActivityManager;]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;]Lcom/android/server/notification/PermissionHelper;Lcom/android/server/notification/PermissionHelper;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-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;
-HSPLcom/android/server/notification/NotificationManagerService;->fixNotification(Landroid/app/Notification;Ljava/lang/String;Ljava/lang/String;IIILandroid/app/ActivityManagerInternal$ServiceNotificationPolicy;)V+]Landroid/permission/PermissionManager;Landroid/permission/PermissionManager;]Lcom/android/internal/config/sysui/SystemUiSystemPropertiesFlags$FlagResolver;Lcom/android/internal/config/sysui/SystemUiSystemPropertiesFlags$DebugResolver;]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;]Landroid/content/AttributionSource$Builder;Landroid/content/AttributionSource$Builder;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/app/Notification$CallStyle;Landroid/app/Notification$CallStyle;
-HSPLcom/android/server/notification/NotificationManagerService;->getGroupInstanceId(Ljava/lang/String;)Lcom/android/internal/logging/InstanceId;
-HSPLcom/android/server/notification/NotificationManagerService;->getHistoryText(Landroid/content/Context;Landroid/app/Notification;)Ljava/lang/String;
+HPLcom/android/server/notification/NotificationManagerService;->disableNotificationEffects(Lcom/android/server/notification/NotificationRecord;)Ljava/lang/String;
+HPLcom/android/server/notification/NotificationManagerService;->enqueueNotificationInternal(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILandroid/app/Notification;IZ)V+]Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;]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;IZLcom/android/server/notification/NotificationManagerService$PostNotificationTracker;)Z+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Lcom/android/server/notification/ShortcutHelper;Lcom/android/server/notification/ShortcutHelper;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]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;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/app/ActivityManager;Landroid/app/ActivityManager;]Lcom/android/server/job/JobSchedulerInternal;Lcom/android/server/job/JobSchedulerService$LocalService;]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;
+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;
+HPLcom/android/server/notification/NotificationManagerService;->fixNotification(Landroid/app/Notification;Ljava/lang/String;Ljava/lang/String;IIILandroid/app/ActivityManagerInternal$ServiceNotificationPolicy;Z)V+]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;]Landroid/content/AttributionSource$Builder;Landroid/content/AttributionSource$Builder;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Landroid/app/Notification$CallStyle;Landroid/app/Notification$CallStyle;
+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;->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;
-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;
-HSPLcom/android/server/notification/NotificationManagerService;->handleGroupedNotificationLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V
+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;
+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;
 HPLcom/android/server/notification/NotificationManagerService;->handleRankingReconsideration(Landroid/os/Message;)V
 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/NotificationRecordExtractorData;Lcom/android/server/notification/NotificationRecordExtractorData;]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;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/notification/NotificationManagerService;->handleSavePolicyFile()V
-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;
-HSPLcom/android/server/notification/NotificationManagerService;->isCallNotification(Ljava/lang/String;I)Z
+HPLcom/android/server/notification/NotificationManagerService;->hasAutoGroupSummaryLocked(Landroid/service/notification/StatusBarNotification;)Z
+HPLcom/android/server/notification/NotificationManagerService;->hasCompanionDevice(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
+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;
+HPLcom/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;->isCallerInstantApp(II)Z
-HSPLcom/android/server/notification/NotificationManagerService;->isCallerSameApp(Ljava/lang/String;II)Z
+HSPLcom/android/server/notification/NotificationManagerService;->isCallerIsSystemOrSystemUi()Z
+HPLcom/android/server/notification/NotificationManagerService;->isCallerSameApp(Ljava/lang/String;II)Z
 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;->isEnterpriseExempted(Landroid/content/pm/ApplicationInfo;)Z
-HSPLcom/android/server/notification/NotificationManagerService;->isInLockDownMode(I)Z+]Lcom/android/server/notification/NotificationManagerService$StrongAuthTracker;Lcom/android/server/notification/NotificationManagerService$StrongAuthTracker;
-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/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HPLcom/android/server/notification/NotificationManagerService;->isCallingUidSystem()Z
+HPLcom/android/server/notification/NotificationManagerService;->isEnterpriseExempted(Landroid/content/pm/ApplicationInfo;)Z+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/app/admin/DevicePolicyManagerInternal;Lcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;
+HPLcom/android/server/notification/NotificationManagerService;->isInLockDownMode(I)Z+]Lcom/android/server/notification/NotificationManagerService$StrongAuthTracker;Lcom/android/server/notification/NotificationManagerService$StrongAuthTracker;
+HPLcom/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/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 HPLcom/android/server/notification/NotificationManagerService;->isNotificationForCurrentUser(Lcom/android/server/notification/NotificationRecord;)Z
-HSPLcom/android/server/notification/NotificationManagerService;->isPackagePausedOrSuspended(Ljava/lang/String;I)Z
-HSPLcom/android/server/notification/NotificationManagerService;->isPackageSuspendedForUser(Ljava/lang/String;I)Z
-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;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HSPLcom/android/server/notification/NotificationManagerService;->isServiceTokenValid(Landroid/os/IInterface;)Z+]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
+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;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HPLcom/android/server/notification/NotificationManagerService;->isServiceTokenValid(Landroid/os/IInterface;)Z+]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
 HSPLcom/android/server/notification/NotificationManagerService;->isUidSystemOrPhone(I)Z
-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
+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;]Landroid/service/notification/NotificationListenerFilter;Landroid/service/notification/NotificationListenerFilter;
+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;
+HPLcom/android/server/notification/NotificationManagerService;->lambda$notifyListenersPostedAndLogLocked$12(Ljava/util/List;Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;Lcom/android/server/notification/NotificationRecordLogger$NotificationReported;)V+]Lcom/android/server/notification/NotificationRecordLogger;Lcom/android/server/notification/NotificationRecordLoggerImpl;]Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/Runnable;Lcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda2;
 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;]Landroid/app/Notification;Landroid/app/Notification;]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;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/notification/NotificationManagerService;->maybeRecordInterruptionLocked(Lcom/android/server/notification/NotificationRecord;)V
-HSPLcom/android/server/notification/NotificationManagerService;->maybeReportForegroundServiceUpdate(Lcom/android/server/notification/NotificationRecord;Z)V
-HPLcom/android/server/notification/NotificationManagerService;->notificationMatchesUserId(Lcom/android/server/notification/NotificationRecord;I)Z+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+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
+HPLcom/android/server/notification/NotificationManagerService;->maybeReportForegroundServiceUpdate(Lcom/android/server/notification/NotificationRecord;Z)V
+HPLcom/android/server/notification/NotificationManagerService;->notifyListenersPostedAndLogLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationManagerService$PostNotificationTracker;Lcom/android/server/notification/NotificationRecordLogger$NotificationReported;)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;
 HPLcom/android/server/notification/NotificationManagerService;->removeFromNotificationListsLocked(Lcom/android/server/notification/NotificationRecord;)Z
-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;->scheduleTimeoutLocked(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationManagerService;->reportForegroundServiceUpdate(ZLandroid/app/Notification;ILjava/lang/String;I)V
+HPLcom/android/server/notification/NotificationManagerService;->resolveNotificationUid(Ljava/lang/String;Ljava/lang/String;II)I+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HPLcom/android/server/notification/NotificationManagerService;->scheduleTimeoutLocked(Lcom/android/server/notification/NotificationRecord;)V
 HPLcom/android/server/notification/NotificationManagerService;->shouldMuteNotificationLocked(Lcom/android/server/notification/NotificationRecord;)Z
-HSPLcom/android/server/notification/NotificationManagerService;->updateAutobundledSummaryFlags(ILjava/lang/String;ZZ)V
 HSPLcom/android/server/notification/NotificationManagerService;->updateLightsLocked()V
-HSPLcom/android/server/notification/NotificationManagerService;->updateUriPermissions(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;I)V
-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;->updateNotificationBubbleFlags(Lcom/android/server/notification/NotificationRecord;Z)V
+HPLcom/android/server/notification/NotificationManagerService;->updateUriPermissions(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;I)V
+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;->writePolicyXml(Ljava/io/OutputStream;ZI)V
-HSPLcom/android/server/notification/NotificationRecord$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/notification/NotificationRecord;-><init>(Landroid/content/Context;Landroid/service/notification/StatusBarNotification;Landroid/app/NotificationChannel;)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
+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;
 HPLcom/android/server/notification/NotificationRecord;->addAdjustment(Landroid/service/notification/Adjustment;)V
-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;
-HSPLcom/android/server/notification/NotificationRecord;->calculateGrantableUris()V
-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;
-HSPLcom/android/server/notification/NotificationRecord;->calculateRankingTimeMs(J)J
-HSPLcom/android/server/notification/NotificationRecord;->calculateSound()Landroid/net/Uri;
-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;
-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
-HSPLcom/android/server/notification/NotificationRecord;->getAuthoritativeRank()I
-HSPLcom/android/server/notification/NotificationRecord;->getChannel()Landroid/app/NotificationChannel;
+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;
+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;
+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
+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;->getAuthoritativeRank()I
+HPLcom/android/server/notification/NotificationRecord;->getChannel()Landroid/app/NotificationChannel;
 HPLcom/android/server/notification/NotificationRecord;->getContactAffinity()F
-HSPLcom/android/server/notification/NotificationRecord;->getCriticality()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;->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
-HSPLcom/android/server/notification/NotificationRecord;->getLogMaker(J)Landroid/metrics/LogMaker;
-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;->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;->getInterruptionMs(J)I
+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
+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;
 HPLcom/android/server/notification/NotificationRecord;->getPackagePriority()I
-HSPLcom/android/server/notification/NotificationRecord;->getPackageVisibilityOverride()I
-HSPLcom/android/server/notification/NotificationRecord;->getPeopleOverride()Ljava/util/ArrayList;
-HSPLcom/android/server/notification/NotificationRecord;->getProposedImportance()I
-HSPLcom/android/server/notification/NotificationRecord;->getRankingScore()F
+HPLcom/android/server/notification/NotificationRecord;->getPackageVisibilityOverride()I
+HPLcom/android/server/notification/NotificationRecord;->getPeopleOverride()Ljava/util/ArrayList;
+HPLcom/android/server/notification/NotificationRecord;->getProposedImportance()I
+HPLcom/android/server/notification/NotificationRecord;->getRankingScore()F
 HPLcom/android/server/notification/NotificationRecord;->getRankingTimeMs()J
-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;
-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;->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;
+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
 HPLcom/android/server/notification/NotificationRecord;->hasSensitiveContent()Z
-HSPLcom/android/server/notification/NotificationRecord;->hasUndecoratedRemoteView()Z
+HPLcom/android/server/notification/NotificationRecord;->hasUndecoratedRemoteView()Z
 HPLcom/android/server/notification/NotificationRecord;->isCategory(Ljava/lang/String;)Z+]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;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/app/Notification;Landroid/app/Notification;
-HSPLcom/android/server/notification/NotificationRecord;->isHidden()Z
-HSPLcom/android/server/notification/NotificationRecord;->isIntercepted()Z
-HSPLcom/android/server/notification/NotificationRecord;->isInterruptive()Z
-HSPLcom/android/server/notification/NotificationRecord;->isPreChannelsNotification()Z
-HSPLcom/android/server/notification/NotificationRecord;->isRecentlyIntrusive()Z
-HSPLcom/android/server/notification/NotificationRecord;->isTextChanged()Z
-HSPLcom/android/server/notification/NotificationRecord;->setAllowBubble(Z)V
+HPLcom/android/server/notification/NotificationRecord;->isConversation()Z+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/app/Notification;Landroid/app/Notification;
+HPLcom/android/server/notification/NotificationRecord;->isHidden()Z
+HPLcom/android/server/notification/NotificationRecord;->isIntercepted()Z
+HPLcom/android/server/notification/NotificationRecord;->isInterruptive()Z
+HPLcom/android/server/notification/NotificationRecord;->isPreChannelsNotification()Z
+HPLcom/android/server/notification/NotificationRecord;->isRecentlyIntrusive()Z
+HPLcom/android/server/notification/NotificationRecord;->isTextChanged()Z
+HPLcom/android/server/notification/NotificationRecord;->setAllowBubble(Z)V
 HPLcom/android/server/notification/NotificationRecord;->setContactAffinity(F)V
-HSPLcom/android/server/notification/NotificationRecord;->setIntercepted(Z)Z
-HSPLcom/android/server/notification/NotificationRecord;->setInterruptive(Z)V
-HSPLcom/android/server/notification/NotificationRecord;->setPackagePriority(I)V
-HSPLcom/android/server/notification/NotificationRecord;->setPackageVisibilityOverride(I)V
-HSPLcom/android/server/notification/NotificationRecord;->setShowBadge(Z)V
-HSPLcom/android/server/notification/NotificationRecord;->setSuppressedVisualEffects(I)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;
+HPLcom/android/server/notification/NotificationRecord;->setPackagePriority(I)V
+HPLcom/android/server/notification/NotificationRecord;->setRecentlyIntrusive(Z)V
+HPLcom/android/server/notification/NotificationRecord;->setShowBadge(Z)V
+HPLcom/android/server/notification/NotificationRecord;->setSuppressedVisualEffects(I)V
 HPLcom/android/server/notification/NotificationRecord;->setVisibility(ZIILcom/android/server/notification/NotificationRecordLogger;)V
-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;->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;
+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;->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;
 HPLcom/android/server/notification/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;IFZIZ)V
-HPLcom/android/server/notification/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/NotificationRecordLogger$NotificationRecordPair;-><init>(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)V
-HSPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getInstanceId()I
-HSPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getNotificationIdHash()I
-HSPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->shouldLogReported(I)Z
-HSPLcom/android/server/notification/NotificationRecordLogger;->getLoggingImportance(Lcom/android/server/notification/NotificationRecord;)I
+HPLcom/android/server/notification/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;
+HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;-><init>(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getChannelIdHash()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;->getStyle()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;
+HPLcom/android/server/notification/NotificationRecordLogger$NotificationReported;-><init>(Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;Lcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;IILcom/android/internal/logging/InstanceId;)V
+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
+HPLcom/android/server/notification/NotificationRecordLogger;->prepareToLogNotificationPosted(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;IILcom/android/internal/logging/InstanceId;)Lcom/android/server/notification/NotificationRecordLogger$NotificationReported;+]Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;
 HPLcom/android/server/notification/NotificationRecordLoggerImpl;->log(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Lcom/android/server/notification/NotificationRecord;)V
-HSPLcom/android/server/notification/NotificationRecordLoggerImpl;->maybeLogNotificationPosted(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;IILcom/android/internal/logging/InstanceId;)V
-HSPLcom/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/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$ImportanceHistogram;->increment(I)V
-HSPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;-><init>()V
-HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->onVisibilityChanged(Z)V
+HPLcom/android/server/notification/NotificationRecordLoggerImpl;->writeNotificationReportedAtom(Lcom/android/server/notification/NotificationRecordLogger$NotificationReported;)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;
+HPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->updateInterarrivalEstimate(J)V
+HPLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;->increment(I)V
+HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;-><init>()V
+HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->onVisibilityChanged(Z)V+]Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;
 HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->updateFrom(Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;)V
-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;
-HSPLcom/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;->registerEnqueuedByApp(Ljava/lang/String;)V+]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;
+HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->updateVisiblyExpandedStats()V
+HPLcom/android/server/notification/NotificationUsageStats;->getAggregatedStatsLocked(Lcom/android/server/notification/NotificationRecord;)[Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
+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;
+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;
+HPLcom/android/server/notification/NotificationUsageStats;->registerEnqueuedByApp(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;
-HSPLcom/android/server/notification/NotificationUsageStats;->registerPostedByApp(Lcom/android/server/notification/NotificationRecord;)V
-HPLcom/android/server/notification/NotificationUsageStats;->registerUpdatedByApp(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)V
-HSPLcom/android/server/notification/NotificationUsageStats;->releaseAggregatedStatsLocked([Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;)V+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
-HPLcom/android/server/notification/PermissionHelper;->getAppsRequestingPermission(I)Ljava/util/Set;+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/Set;Ljava/util/HashSet;]Lcom/android/server/notification/PermissionHelper;Lcom/android/server/notification/PermissionHelper;
-HSPLcom/android/server/notification/PermissionHelper;->hasPermission(I)Z+]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;
-HSPLcom/android/server/notification/PermissionHelper;->isPermissionFixed(Ljava/lang/String;I)Z
-HSPLcom/android/server/notification/PermissionHelper;->isPermissionUserSet(Ljava/lang/String;I)Z
+HPLcom/android/server/notification/NotificationUsageStats;->registerPostedByApp(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;
+HPLcom/android/server/notification/PermissionHelper;->getAppsRequestingPermission(I)Ljava/util/Set;+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Set;Ljava/util/HashSet;]Lcom/android/server/notification/PermissionHelper;Lcom/android/server/notification/PermissionHelper;
+HSPLcom/android/server/notification/PermissionHelper;->hasPermission(I)Z+]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/notification/PermissionHelper;->isPermissionFixed(Ljava/lang/String;I)Z+]Landroid/permission/IPermissionManager;Lcom/android/server/pm/permission/PermissionManagerService;
+HPLcom/android/server/notification/PermissionHelper;->isPermissionUserSet(Ljava/lang/String;I)Z+]Landroid/permission/IPermissionManager;Lcom/android/server/pm/permission/PermissionManagerService;
 HSPLcom/android/server/notification/PreferencesHelper$PackagePreferences;-><init>()V
-HSPLcom/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;
-HSPLcom/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;
-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;->badgingEnabled(Landroid/os/UserHandle;)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/os/UserHandle;Landroid/os/UserHandle;
+HPLcom/android/server/notification/PreferencesHelper;->bubblesEnabled(Landroid/os/UserHandle;)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/os/UserHandle;Landroid/os/UserHandle;
+HPLcom/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
-HSPLcom/android/server/notification/PreferencesHelper;->createNotificationChannel(Ljava/lang/String;ILandroid/app/NotificationChannel;ZZ)Z
-HPLcom/android/server/notification/PreferencesHelper;->createNotificationChannelGroup(Ljava/lang/String;ILandroid/app/NotificationChannelGroup;Z)V
-HSPLcom/android/server/notification/PreferencesHelper;->deleteNotificationChannel(Ljava/lang/String;ILjava/lang/String;)Z
-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;
-HSPLcom/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;->createDefaultChannelIfNeededLocked(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;)Z
+HSPLcom/android/server/notification/PreferencesHelper;->createNotificationChannel(Ljava/lang/String;ILandroid/app/NotificationChannel;ZZIZ)Z
+HPLcom/android/server/notification/PreferencesHelper;->createNotificationChannelGroup(Ljava/lang/String;ILandroid/app/NotificationChannelGroup;ZIZ)V
+HSPLcom/android/server/notification/PreferencesHelper;->deleteNotificationChannel(Ljava/lang/String;ILjava/lang/String;IZ)Z
+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;
+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;->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;
 HPLcom/android/server/notification/PreferencesHelper;->getGroupForChannel(Ljava/lang/String;ILjava/lang/String;)Landroid/app/NotificationChannelGroup;
-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;
 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/Map;Landroid/util/ArrayMap;,Ljava/util/concurrent/ConcurrentHashMap;]Landroid/app/NotificationChannelGroup;Landroid/app/NotificationChannelGroup;]Ljava/util/List;Ljava/util/ArrayList;
 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;
 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;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
 HSPLcom/android/server/notification/PreferencesHelper;->getPackagePreferencesLocked(Ljava/lang/String;I)Lcom/android/server/notification/PreferencesHelper$PackagePreferences;
-HSPLcom/android/server/notification/PreferencesHelper;->hasSentValidMsg(Ljava/lang/String;I)Z
-HSPLcom/android/server/notification/PreferencesHelper;->hasUserDemotedInvalidMsgApp(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;
+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;->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/app/NotificationChannelGroup;Landroid/app/NotificationChannelGroup;
-HSPLcom/android/server/notification/PreferencesHelper;->isInInvalidMsgState(Ljava/lang/String;I)Z
-HSPLcom/android/server/notification/PreferencesHelper;->isMediaNotificationFilteringEnabled()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;->migrateNotificationPermissions(Ljava/util/List;)V
 HSPLcom/android/server/notification/PreferencesHelper;->packagePreferencesKey(Ljava/lang/String;I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HPLcom/android/server/notification/PreferencesHelper;->pullPackagePreferencesStats(Ljava/util/List;Landroid/util/ArrayMap;)V
+HSPLcom/android/server/notification/PreferencesHelper;->readXml(Lcom/android/modules/utils/TypedXmlPullParser;ZI)V
 HSPLcom/android/server/notification/PreferencesHelper;->restoreChannel(Lcom/android/modules/utils/TypedXmlPullParser;ZLcom/android/server/notification/PreferencesHelper$PackagePreferences;)V
-HSPLcom/android/server/notification/PreferencesHelper;->updateConfig()V
-HSPLcom/android/server/notification/PreferencesHelper;->updateFixedImportance(Ljava/util/List;)V
-HPLcom/android/server/notification/PreferencesHelper;->updateNotificationChannel(Ljava/lang/String;ILandroid/app/NotificationChannel;Z)V
-HSPLcom/android/server/notification/PreferencesHelper;->writeXml(Lcom/android/modules/utils/TypedXmlSerializer;ZI)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;,Ljava/util/concurrent/ConcurrentHashMap$ValuesView;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;]Landroid/app/NotificationChannelGroup;Landroid/app/NotificationChannelGroup;]Ljava/util/Iterator;Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;,Landroid/util/MapCollections$ArrayIterator;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;]Lcom/android/server/notification/PermissionHelper;Lcom/android/server/notification/PermissionHelper;
-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/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/PreferencesHelper;->restorePackage(Lcom/android/modules/utils/TypedXmlPullParser;ZILjava/lang/String;ZZ)V
+HSPLcom/android/server/notification/PreferencesHelper;->shouldHaveDefaultChannel(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;)Z
+HPLcom/android/server/notification/PreferencesHelper;->updateNotificationChannel(Ljava/lang/String;ILandroid/app/NotificationChannel;ZIZ)V
+HSPLcom/android/server/notification/PreferencesHelper;->writeXml(Lcom/android/modules/utils/TypedXmlSerializer;ZI)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/concurrent/ConcurrentHashMap;]Landroid/app/NotificationChannelGroup;Landroid/app/NotificationChannelGroup;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Lcom/android/server/notification/PermissionHelper;Lcom/android/server/notification/PermissionHelper;
+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;
+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
+HPLcom/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
 HPLcom/android/server/notification/RateEstimator;->getInterarrivalEstimate(J)D+]Ljava/lang/Long;Ljava/lang/Long;
-HSPLcom/android/server/notification/RateEstimator;->update(J)F+]Lcom/android/server/notification/RateEstimator;Lcom/android/server/notification/RateEstimator;
-HSPLcom/android/server/notification/ShortcutHelper;->getValidShortcutInfo(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ShortcutInfo;
-HSPLcom/android/server/notification/ShortcutHelper;->maybeListenForShortcutChangesForBubbles(Lcom/android/server/notification/NotificationRecord;ZLandroid/os/Handler;)V
-HSPLcom/android/server/notification/SnoozeHelper;->cancel(ILjava/lang/String;Ljava/lang/String;I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]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;
-HSPLcom/android/server/notification/SnoozeHelper;->getSnoozeContextForUnpostedNotification(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/server/notification/SnoozeHelper;->getSnoozeTimeForUnpostedNotification(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/Long;
-HSPLcom/android/server/notification/SnoozeHelper;->getSnoozed(ILjava/lang/String;)Ljava/util/Collection;
-HSPLcom/android/server/notification/SnoozeHelper;->isSnoozed(ILjava/lang/String;Ljava/lang/String;)Z
+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;
+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;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HPLcom/android/server/notification/SnoozeHelper;->cancel(ILjava/lang/String;Ljava/lang/String;I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+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;
+HPLcom/android/server/notification/SnoozeHelper;->getSnoozed(ILjava/lang/String;)Ljava/util/Collection;
+HPLcom/android/server/notification/SnoozeHelper;->isSnoozed(ILjava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/notification/SnoozeHelper;->writeXml(Lcom/android/modules/utils/TypedXmlSerializer;)V
-HPLcom/android/server/notification/ValidateNotificationPeople$LookupResult;->isExpired()Z
-HPLcom/android/server/notification/ValidateNotificationPeople$LookupResult;->isInvalid()Z
 HPLcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;->work()V
 HPLcom/android/server/notification/ValidateNotificationPeople;->getCacheKey(ILjava/lang/String;)Ljava/lang/String;
-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/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/app/Person;Landroid/app/Person;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-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;->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;->validatePeople(Landroid/content/Context;Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Landroid/util/ArraySet;Landroid/util/ArraySet;]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;->validatePeople(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;Ljava/util/List;[FLandroid/util/ArraySet;)Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;+]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;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;
-HSPLcom/android/server/notification/VibratorHelper;-><init>(Landroid/content/Context;)V
-HSPLcom/android/server/notification/VibratorHelper;->createDefaultVibration(Z)Landroid/os/VibrationEffect;
+HPLcom/android/server/notification/ValidateNotificationPeople;->validatePeople(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;Ljava/util/List;[FLandroid/util/ArraySet;)Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;+]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/Set;Landroid/util/ArraySet;
+HSPLcom/android/server/notification/VibratorHelper;-><init>(Landroid/content/Context;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
+HPLcom/android/server/notification/VibratorHelper;->createDefaultVibration(Z)Landroid/os/VibrationEffect;
 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/VisibilityExtractor;->adminAllowsKeyguardFeature(II)Z+]Landroid/app/admin/DevicePolicyManager;Landroid/app/admin/DevicePolicyManager;
-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;
+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/ZenLog;->append(ILjava/lang/String;)V
+HPLcom/android/server/notification/ZenLog;->traceIntercepted(Lcom/android/server/notification/NotificationRecord;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/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;
+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;
 HPLcom/android/server/notification/ZenModeFiltering;->isAlarm(Lcom/android/server/notification/NotificationRecord;)Z
-HPLcom/android/server/notification/ZenModeFiltering;->isCall(Lcom/android/server/notification/NotificationRecord;)Z
+HPLcom/android/server/notification/ZenModeFiltering;->isCall(Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/ZenModeFiltering;Lcom/android/server/notification/ZenModeFiltering;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HPLcom/android/server/notification/ZenModeFiltering;->isDefaultPhoneApp(Ljava/lang/String;)Z+]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HPLcom/android/server/notification/ZenModeFiltering;->isMedia(Lcom/android/server/notification/NotificationRecord;)Z
-HPLcom/android/server/notification/ZenModeFiltering;->isMessage(Lcom/android/server/notification/NotificationRecord;)Z
 HPLcom/android/server/notification/ZenModeFiltering;->isSystem(Lcom/android/server/notification/NotificationRecord;)Z
 HPLcom/android/server/notification/ZenModeFiltering;->maybeLogInterceptDecision(Lcom/android/server/notification/NotificationRecord;ZLjava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HSPLcom/android/server/notification/ZenModeFiltering;->shouldIntercept(ILandroid/app/NotificationManager$Policy;Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]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;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;
-HSPLcom/android/server/notification/ZenModeHelper;->getConsolidatedNotificationPolicy()Landroid/app/NotificationManager$Policy;+]Landroid/app/NotificationManager$Policy;Landroid/app/NotificationManager$Policy;
-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/om/IdmapDaemon$Connection;->close()V
+HPLcom/android/server/notification/ZenModeFiltering;->shouldIntercept(ILandroid/app/NotificationManager$Policy;Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]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/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
+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/om/OverlayActorEnforcer$ActorState;->$values()[Lcom/android/server/om/OverlayActorEnforcer$ActorState;
 HSPLcom/android/server/om/OverlayActorEnforcer$ActorState;-><clinit>()V
 HSPLcom/android/server/om/OverlayActorEnforcer$ActorState;-><init>(Ljava/lang/String;I)V
 HSPLcom/android/server/om/OverlayActorEnforcer;->getPackageNameForActor(Ljava/lang/String;Ljava/util/Map;)Landroid/util/Pair;
+HPLcom/android/server/om/OverlayManagerService$1;->getOverlayInfosForTarget(Ljava/lang/String;I)Ljava/util/List;
 HSPLcom/android/server/om/OverlayManagerService;->updatePackageManagerLocked(Ljava/util/Collection;I)Ljava/util/List;
 HSPLcom/android/server/om/OverlayManagerServiceImpl;->getEnabledOverlayPaths(Ljava/lang/String;IZ)Landroid/content/pm/overlay/OverlayPaths;
 HSPLcom/android/server/om/OverlayManagerServiceImpl;->updateOverlaysForUser(I)Landroid/util/ArraySet;
@@ -5404,16 +5863,18 @@
 HSPLcom/android/server/om/OverlayManagerServiceImpl;->updateState(Landroid/content/om/CriticalOverlayInfo;II)Z
 HSPLcom/android/server/om/OverlayManagerSettings$$ExternalSyntheticLambda10;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/om/OverlayManagerSettings$$ExternalSyntheticLambda12;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/om/OverlayManagerSettings$Serializer;->persistRow(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)V
 HSPLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-$$Nest$fgetmOverlay(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Landroid/content/om/OverlayIdentifier;
 HSPLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-$$Nest$fgetmUserId(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)I
 HSPLcom/android/server/om/OverlayManagerSettings$SettingsItem;->-$$Nest$mgetTargetPackageName(Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Ljava/lang/String;+]Lcom/android/server/om/OverlayManagerSettings$SettingsItem;Lcom/android/server/om/OverlayManagerSettings$SettingsItem;
-HSPLcom/android/server/om/OverlayManagerSettings$SettingsItem;->getOverlayInfo()Landroid/content/om/OverlayInfo;
 HSPLcom/android/server/om/OverlayManagerSettings$SettingsItem;->getTargetPackageName()Ljava/lang/String;
 HSPLcom/android/server/om/OverlayManagerSettings;->$r8$lambda$_xibEZiMKxwy0tEhrHMwoDwr2RU(Ljava/lang/String;Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Z
 HSPLcom/android/server/om/OverlayManagerSettings;->$r8$lambda$tZYn1EZo7S-OcA52BGmajI6pANU(ILcom/android/server/om/OverlayManagerSettings$SettingsItem;)Z
 HSPLcom/android/server/om/OverlayManagerSettings;->lambda$selectWhereTarget$12(Ljava/lang/String;Lcom/android/server/om/OverlayManagerSettings$SettingsItem;)Z
 HSPLcom/android/server/om/OverlayManagerSettings;->lambda$selectWhereUser$10(ILcom/android/server/om/OverlayManagerSettings$SettingsItem;)Z
 HSPLcom/android/server/om/OverlayManagerSettings;->select(Landroid/content/om/OverlayIdentifier;I)I+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/om/OverlayIdentifier;Landroid/content/om/OverlayIdentifier;
+HSPLcom/android/server/om/OverlayManagerSettings;->selectWhereTarget(Ljava/lang/String;I)Ljava/util/List;
+HSPLcom/android/server/om/OverlayManagerSettings;->selectWhereUser(I)Ljava/util/List;
 HSPLcom/android/server/om/OverlayReferenceMapper$1;-><init>(Lcom/android/server/om/OverlayReferenceMapper;)V
 HSPLcom/android/server/om/OverlayReferenceMapper$1;->getActorPkg(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/om/OverlayReferenceMapper$1;->getTargetToOverlayables(Lcom/android/server/pm/pkg/AndroidPackage;)Ljava/util/Map;
@@ -5423,38 +5884,42 @@
 HSPLcom/android/server/om/OverlayReferenceMapper;->addPkg(Lcom/android/server/pm/pkg/AndroidPackage;Ljava/util/Map;)Landroid/util/ArraySet;
 HSPLcom/android/server/om/OverlayReferenceMapper;->addTarget(Lcom/android/server/pm/pkg/AndroidPackage;Ljava/util/Map;Ljava/util/Collection;)V
 HSPLcom/android/server/om/OverlayReferenceMapper;->addTargetToMap(Ljava/lang/String;Ljava/lang/String;Ljava/util/Collection;)V
-HPLcom/android/server/om/OverlayReferenceMapper;->ensureMapBuilt()V
-HPLcom/android/server/om/OverlayReferenceMapper;->isValidActor(Ljava/lang/String;Ljava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;
+HSPLcom/android/server/om/OverlayReferenceMapper;->ensureMapBuilt()V
+HSPLcom/android/server/om/OverlayReferenceMapper;->isValidActor(Ljava/lang/String;Ljava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;
 HSPLcom/android/server/om/OverlayReferenceMapper;->removeOverlay(Ljava/lang/String;Ljava/util/Collection;)V
 HSPLcom/android/server/om/OverlayReferenceMapper;->removeTarget(Ljava/lang/String;Ljava/util/Collection;)V
 HSPLcom/android/server/os/DeviceIdentifiersPolicyService$DeviceIdentifiersPolicy;-><init>(Landroid/content/Context;)V
+HPLcom/android/server/os/DeviceIdentifiersPolicyService$DeviceIdentifiersPolicy;->getSerialForPackage(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/os/DeviceIdentifiersPolicyService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/os/DeviceIdentifiersPolicyService;->onStart()V
 HSPLcom/android/server/os/NativeTombstoneManager$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/os/NativeTombstoneManager;IIILjava/util/ArrayList;ILjava/util/concurrent/CompletableFuture;)V
-HSPLcom/android/server/os/NativeTombstoneManager$TombstoneFile;->parse(Landroid/os/ParcelFileDescriptor;)Ljava/util/Optional;+]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;]Ljava/lang/String;Ljava/lang/String;
+HSPLcom/android/server/os/NativeTombstoneManager$TombstoneFile;->parse(Landroid/os/ParcelFileDescriptor;)Ljava/util/Optional;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;]Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;
 HSPLcom/android/server/os/NativeTombstoneManager;->collectTombstones(Ljava/util/ArrayList;III)V
 HPLcom/android/server/people/data/AbstractProtoDiskReadWriter;->scheduleSave(Ljava/lang/String;Ljava/lang/Object;)V
 HPLcom/android/server/people/data/ConversationInfo$Builder;-><init>(Lcom/android/server/people/data/ConversationInfo;)V
+HPLcom/android/server/people/data/ConversationInfo$Builder;->build()Lcom/android/server/people/data/ConversationInfo;
 HPLcom/android/server/people/data/ConversationInfo;-><init>(Lcom/android/server/people/data/ConversationInfo$Builder;)V
+HPLcom/android/server/people/data/ConversationStore;->getConversationInfosProtoDiskReadWriter()Lcom/android/server/people/data/ConversationStore$ConversationInfosProtoDiskReadWriter;
 HPLcom/android/server/people/data/ConversationStore;->scheduleUpdateConversationsOnDisk()V
 HPLcom/android/server/people/data/ConversationStore;->updateConversationsInMemory(Lcom/android/server/people/data/ConversationInfo;)V
 HPLcom/android/server/people/data/DataManager$NotificationListener$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/people/data/DataManager$NotificationListener;Landroid/service/notification/StatusBarNotification;Ljava/lang/String;)V
-HPLcom/android/server/people/data/DataManager$NotificationListener;->onNotificationPosted(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)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$ShortcutServiceCallback;->lambda$onShortcutsAddedOrUpdated$0(Ljava/lang/String;Landroid/os/UserHandle;Ljava/util/List;)V
 HPLcom/android/server/people/data/DataManager;->addOrUpdateConversationInfo(Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/people/data/DataManager;->getConversationChannel(Landroid/content/pm/ShortcutInfo;Lcom/android/server/people/data/ConversationInfo;Ljava/lang/String;ILjava/lang/String;)Landroid/app/people/ConversationChannel;
-HPLcom/android/server/people/data/DataManager;->getPackage(Ljava/lang/String;I)Lcom/android/server/people/data/PackageData;
-HPLcom/android/server/people/data/DataManager;->getPackageIfConversationExists(Landroid/service/notification/StatusBarNotification;Ljava/util/function/Consumer;)Lcom/android/server/people/data/PackageData;
-HPLcom/android/server/people/data/DataManager;->getUnlockedUserData(I)Lcom/android/server/people/data/UserData;
+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;
+HPLcom/android/server/people/data/DataManager;->getShortcut(Ljava/lang/String;ILjava/lang/String;)Landroid/content/pm/ShortcutInfo;
+HPLcom/android/server/people/data/DataManager;->getStatuses(Lcom/android/server/people/data/ConversationInfo;)Ljava/util/List;
+HPLcom/android/server/people/data/DataManager;->getUnlockedUserData(I)Lcom/android/server/people/data/UserData;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/people/data/UserData;Lcom/android/server/people/data/UserData;
 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;->createTwoMinutesLongTimeSlot(J)Landroid/util/Range;
 HPLcom/android/server/people/data/EventIndex;->diffTimeSlots(IJJ)I
 HPLcom/android/server/people/data/EventIndex;->getDuration(Landroid/util/Range;)J
 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/UsageStatsQueryHelper;->querySince(J)Z
-HPLcom/android/server/people/data/UserData;->getPackageData(Ljava/lang/String;)Lcom/android/server/people/data/PackageData;
+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;]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;
+HPLcom/android/server/people/data/UserData;->getPackageData(Ljava/lang/String;)Lcom/android/server/people/data/PackageData;+]Ljava/util/Map;Landroid/util/ArrayMap;
 HSPLcom/android/server/permission/access/AccessCheckingService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/permission/access/AccessCheckingService;->getSchemePolicy$frameworks__base__services__permission__android_common__services_permission(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/permission/access/SchemePolicy;
 HSPLcom/android/server/permission/access/AccessCheckingService;->onStart()V
@@ -5466,13 +5931,8 @@
 HSPLcom/android/server/permission/access/AccessPolicy$Companion;-><init>(Lcom/android/server/permission/jarjar/kotlin/jvm/internal/DefaultConstructorMarker;)V
 HSPLcom/android/server/permission/access/AccessPolicy;-><clinit>()V
 HSPLcom/android/server/permission/access/AccessPolicy;-><init>()V
-HSPLcom/android/server/permission/access/AccessPolicy;-><init>(Landroid/util/ArrayMap;)V
-HSPLcom/android/server/permission/access/AccessPolicy;->_init_$lambda$1$addPolicy(Landroid/util/ArrayMap;Lcom/android/server/permission/access/SchemePolicy;)Lcom/android/server/permission/access/SchemePolicy;
 HSPLcom/android/server/permission/access/AccessPolicy;->getSchemePolicy(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/permission/access/SchemePolicy;
 HSPLcom/android/server/permission/access/SchemePolicy;-><init>()V
-HSPLcom/android/server/permission/access/appop/AppOpService$Companion;-><init>()V
-HSPLcom/android/server/permission/access/appop/AppOpService$Companion;-><init>(Lcom/android/server/permission/jarjar/kotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/server/permission/access/appop/AppOpService;-><clinit>()V
 HSPLcom/android/server/permission/access/appop/AppOpService;-><init>(Lcom/android/server/permission/access/AccessCheckingService;)V
 HSPLcom/android/server/permission/access/appop/BaseAppOpPersistence$Companion;-><init>()V
 HSPLcom/android/server/permission/access/appop/BaseAppOpPersistence$Companion;-><init>(Lcom/android/server/permission/jarjar/kotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -5486,37 +5946,16 @@
 HSPLcom/android/server/permission/access/appop/PackageAppOpPersistence;-><init>()V
 HSPLcom/android/server/permission/access/appop/PackageAppOpPolicy;-><init>()V
 HSPLcom/android/server/permission/access/appop/PackageAppOpPolicy;->getSubjectScheme()Ljava/lang/String;
-HSPLcom/android/server/permission/access/appop/UidAppOpPersistence$Companion;-><init>()V
-HSPLcom/android/server/permission/access/appop/UidAppOpPersistence$Companion;-><init>(Lcom/android/server/permission/jarjar/kotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/server/permission/access/appop/UidAppOpPersistence;-><clinit>()V
-HSPLcom/android/server/permission/access/appop/UidAppOpPersistence;-><init>()V
-HSPLcom/android/server/permission/access/appop/UidAppOpPolicy;-><init>()V
-HSPLcom/android/server/permission/access/appop/UidAppOpPolicy;->getSubjectScheme()Ljava/lang/String;
-HSPLcom/android/server/permission/access/collection/IndexedListSet;-><init>()V
-HSPLcom/android/server/permission/access/collection/IndexedListSet;-><init>(Ljava/util/ArrayList;)V
 HSPLcom/android/server/permission/access/permission/PermissionService$Companion;-><init>()V
 HSPLcom/android/server/permission/access/permission/PermissionService$Companion;-><init>(Lcom/android/server/permission/jarjar/kotlin/jvm/internal/DefaultConstructorMarker;)V
 HSPLcom/android/server/permission/access/permission/PermissionService;-><clinit>()V
 HSPLcom/android/server/permission/access/permission/PermissionService;-><init>(Lcom/android/server/permission/access/AccessCheckingService;)V
-HSPLcom/android/server/permission/access/permission/UidPermissionPersistence$Companion;-><init>()V
-HSPLcom/android/server/permission/access/permission/UidPermissionPersistence$Companion;-><init>(Lcom/android/server/permission/jarjar/kotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/server/permission/access/permission/UidPermissionPersistence;-><clinit>()V
-HSPLcom/android/server/permission/access/permission/UidPermissionPersistence;-><init>()V
-HSPLcom/android/server/permission/access/permission/UidPermissionPolicy$Companion;-><init>()V
-HSPLcom/android/server/permission/access/permission/UidPermissionPolicy$Companion;-><init>(Lcom/android/server/permission/jarjar/kotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/server/permission/access/permission/UidPermissionPolicy;-><clinit>()V
-HSPLcom/android/server/permission/access/permission/UidPermissionPolicy;-><init>()V
-HSPLcom/android/server/permission/access/permission/UidPermissionPolicy;->getObjectScheme()Ljava/lang/String;
-HSPLcom/android/server/permission/access/permission/UidPermissionPolicy;->getSubjectScheme()Ljava/lang/String;
 HSPLcom/android/server/permission/jarjar/kotlin/collections/ArraysKt___ArraysJvmKt;->asList([Ljava/lang/Object;)Ljava/util/List;
 HSPLcom/android/server/permission/jarjar/kotlin/collections/ArraysUtilJVM;->asList([Ljava/lang/Object;)Ljava/util/List;
 HSPLcom/android/server/permission/jarjar/kotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
 HSPLcom/android/server/permission/jarjar/kotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V
 HSPLcom/android/server/permission/jarjar/kotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V
 HSPLcom/android/server/pm/AbstractStatsBase;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V
-HSPLcom/android/server/pm/AbstractStatsBase;->getFile()Landroid/util/AtomicFile;
-HPLcom/android/server/pm/AbstractStatsBase;->maybeWriteAsync(Ljava/lang/Object;)Z
-HSPLcom/android/server/pm/AbstractStatsBase;->read(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/ApexManager$1;-><init>()V
 HSPLcom/android/server/pm/ApexManager$1;->create()Lcom/android/server/pm/ApexManager;
 HSPLcom/android/server/pm/ApexManager$1;->create()Ljava/lang/Object;
@@ -5526,7 +5965,6 @@
 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;->getAllApexInfos()[Landroid/apex/ApexInfo;
-HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getApexModuleNameForPackageName(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;
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->notifyScanResult(Ljava/util/List;)V
@@ -5542,45 +5980,38 @@
 HSPLcom/android/server/pm/ApexSystemServiceInfo;->compareTo(Ljava/lang/Object;)I
 HSPLcom/android/server/pm/ApexSystemServiceInfo;->getName()Ljava/lang/String;
 HPLcom/android/server/pm/ApkChecksums;->extractHashFromV2V3Signature(Ljava/lang/String;Ljava/lang/String;I)Ljava/util/Map;
-HSPLcom/android/server/pm/ApkChecksums;->getApkChecksum(Ljava/io/File;I)[B+]Ljava/io/FileInputStream;Ljava/io/FileInputStream;]Ljava/io/File;Ljava/io/File;]Ljava/security/MessageDigest;Ljava/security/MessageDigest$Delegate;
+HSPLcom/android/server/pm/ApkChecksums;->getApkChecksum(Ljava/io/File;I)[B+]Ljava/io/FileInputStream;Ljava/io/FileInputStream;]Ljava/io/File;Ljava/io/File;
 HSPLcom/android/server/pm/ApkChecksums;->getChecksums(Ljava/util/List;IILjava/lang/String;[Ljava/security/cert/Certificate;Landroid/content/pm/IOnChecksumsReadyListener;Lcom/android/server/pm/ApkChecksums$Injector;)V
+HSPLcom/android/server/pm/ApkChecksums;->getInstallerChecksums(Ljava/lang/String;Ljava/io/File;ILjava/lang/String;[Ljava/security/cert/Certificate;Ljava/util/Map;Lcom/android/server/pm/ApkChecksums$Injector;)V
 HSPLcom/android/server/pm/ApkChecksums;->processRequiredChecksums(Ljava/util/List;Ljava/util/List;ILandroid/content/pm/IOnChecksumsReadyListener;Lcom/android/server/pm/ApkChecksums$Injector;J)V
 HSPLcom/android/server/pm/AppDataHelper$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/AppDataHelper;Ljava/lang/String;Lcom/android/server/pm/pkg/AndroidPackage;IILandroid/os/CreateAppDataArgs;Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/AppDataHelper$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLcom/android/server/pm/AppDataHelper$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/pm/AppDataHelper;ZLcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/pkg/AndroidPackage;II)V
-HSPLcom/android/server/pm/AppDataHelper$$ExternalSyntheticLambda2;->run()V
 HSPLcom/android/server/pm/AppDataHelper;-><init>(Lcom/android/server/pm/PackageManagerService;)V
-HSPLcom/android/server/pm/AppDataHelper;->assertPackageStorageValid(Lcom/android/server/pm/Computer;Ljava/lang/String;Ljava/lang/String;I)V
-HSPLcom/android/server/pm/AppDataHelper;->clearAppProfilesLIF(Lcom/android/server/pm/pkg/AndroidPackage;)V
-HSPLcom/android/server/pm/AppDataHelper;->lambda$fixAppsDataOnBoot$3(Ljava/util/List;I)V
-HSPLcom/android/server/pm/AppDataHelper;->lambda$prepareAppDataLeaf$2(Ljava/lang/String;Lcom/android/server/pm/pkg/AndroidPackage;IILandroid/os/CreateAppDataArgs;Lcom/android/server/pm/PackageSetting;Ljava/lang/Long;Ljava/lang/Throwable;)V
+HSPLcom/android/server/pm/AppDataHelper;->clearAppDataLeafLIF(Lcom/android/server/pm/pkg/AndroidPackage;II)V
 HSPLcom/android/server/pm/AppDataHelper;->prepareAppDataLeaf(Lcom/android/server/pm/Installer$Batch;Lcom/android/server/pm/pkg/AndroidPackage;III)Ljava/util/concurrent/CompletableFuture;
 HSPLcom/android/server/pm/AppDataHelper;->reconcileAppsDataLI(Ljava/lang/String;IIZZ)Ljava/util/List;
 HSPLcom/android/server/pm/AppDataHelper;->shouldHaveAppStorage(Lcom/android/server/pm/pkg/AndroidPackage;)Z
 HSPLcom/android/server/pm/AppIdSettingMap;-><init>()V
 HSPLcom/android/server/pm/AppIdSettingMap;-><init>(Lcom/android/server/pm/AppIdSettingMap;)V
-HSPLcom/android/server/pm/AppIdSettingMap;->acquireAndRegisterNewAppId(Lcom/android/server/pm/SettingBase;)I
 HSPLcom/android/server/pm/AppIdSettingMap;->getSetting(I)Lcom/android/server/pm/SettingBase;+]Lcom/android/server/utils/WatchedSparseArray;Lcom/android/server/utils/WatchedSparseArray;]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;
 HSPLcom/android/server/pm/AppIdSettingMap;->registerExistingAppId(ILcom/android/server/pm/SettingBase;Ljava/lang/Object;)Z
 HSPLcom/android/server/pm/AppIdSettingMap;->registerObserver(Lcom/android/server/utils/Watcher;)V
 HSPLcom/android/server/pm/AppIdSettingMap;->removeSetting(I)V
 HSPLcom/android/server/pm/AppIdSettingMap;->setFirstAvailableAppId(I)V
-HSPLcom/android/server/pm/AppIdSettingMap;->snapshot()Lcom/android/server/pm/AppIdSettingMap;
 HSPLcom/android/server/pm/AppsFilterBase;-><init>()V
 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;->isForceQueryable(I)Z+]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;
-HPLcom/android/server/pm/AppsFilterBase;->isImplicitlyQueryable(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
-HPLcom/android/server/pm/AppsFilterBase;->isQueryableViaComponent(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
-HPLcom/android/server/pm/AppsFilterBase;->isQueryableViaPackage(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
-HPLcom/android/server/pm/AppsFilterBase;->isQueryableViaUsesLibrary(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
-HPLcom/android/server/pm/AppsFilterBase;->isQueryableViaUsesPermission(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
-HPLcom/android/server/pm/AppsFilterBase;->isRetainedImplicitlyQueryable(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
-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/AppsFilterImpl;,Lcom/android/server/pm/AppsFilterSnapshotImpl;]Lcom/android/server/pm/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;
-HSPLcom/android/server/pm/AppsFilterBase;->shouldFilterApplicationInternal(Lcom/android/server/pm/Computer;ILjava/lang/Object;Lcom/android/server/pm/pkg/PackageStateInternal;I)Z+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/pm/pkg/SharedUserApi;Lcom/android/server/pm/SharedUserSetting;]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/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
+HSPLcom/android/server/pm/AppsFilterBase;->isImplicitlyQueryable(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
+HSPLcom/android/server/pm/AppsFilterBase;->isQueryableViaComponent(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
+HSPLcom/android/server/pm/AppsFilterBase;->isQueryableViaPackage(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
+HSPLcom/android/server/pm/AppsFilterBase;->isQueryableViaUsesLibrary(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
+HSPLcom/android/server/pm/AppsFilterBase;->isQueryableViaUsesPermission(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
+HSPLcom/android/server/pm/AppsFilterBase;->isRetainedImplicitlyQueryable(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
+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/Computer;ILjava/lang/Object;Lcom/android/server/pm/pkg/PackageStateInternal;I)Z+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/pm/pkg/SharedUserApi;Lcom/android/server/pm/SharedUserSetting;]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/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 HPLcom/android/server/pm/AppsFilterBase;->shouldFilterApplicationUsingCache(III)Z+]Lcom/android/server/utils/WatchedSparseBooleanMatrix;Lcom/android/server/utils/WatchedSparseBooleanMatrix;
 HSPLcom/android/server/pm/AppsFilterImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/AppsFilterImpl;)V
 HSPLcom/android/server/pm/AppsFilterImpl$1;-><init>(Lcom/android/server/pm/AppsFilterImpl;Lcom/android/server/pm/AppsFilterSnapshot;Lcom/android/server/utils/Watchable;)V
-HSPLcom/android/server/pm/AppsFilterImpl$1;->createSnapshot()Lcom/android/server/pm/AppsFilterSnapshot;
 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
@@ -5593,68 +6024,52 @@
 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/Computer;Lcom/android/server/pm/pkg/PackageStateInternal;ZZ)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/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Ljava/lang/Object;Ljava/lang/String;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedPermissionImpl;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/pm/pkg/component/ParsedUsesPermission;Lcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/Collections$UnmodifiableCollection$1;
+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/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedPermissionImpl;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Ljava/lang/Object;Ljava/lang/String;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]Lcom/android/server/pm/pkg/component/ParsedUsesPermission;Lcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;]Lcom/android/server/pm/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 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;->isRegisteredObserver(Lcom/android/server/utils/Watcher;)Z
 HSPLcom/android/server/pm/AppsFilterImpl;->isSystemSigned(Landroid/content/pm/SigningDetails;Lcom/android/server/pm/pkg/PackageStateInternal;)Z
 HSPLcom/android/server/pm/AppsFilterImpl;->onChanged()V
-HSPLcom/android/server/pm/AppsFilterImpl;->pkgInstruments(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/AndroidPackage;)Z+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/AppsFilterImpl;->pkgInstruments(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/AndroidPackage;)Z+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/component/ParsedInstrumentation;Lcom/android/server/pm/pkg/component/ParsedInstrumentationImpl;
 HSPLcom/android/server/pm/AppsFilterImpl;->readCacheEnabledSysProp()V
 HSPLcom/android/server/pm/AppsFilterImpl;->registerObserver(Lcom/android/server/utils/Watcher;)V
-HSPLcom/android/server/pm/AppsFilterImpl;->removePackageInternal(Lcom/android/server/pm/Computer;Lcom/android/server/pm/pkg/PackageStateInternal;ZZ)V
+HSPLcom/android/server/pm/AppsFilterImpl;->removePackageInternal(Lcom/android/server/pm/Computer;Lcom/android/server/pm/pkg/PackageStateInternal;ZZ)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedPermissionImpl;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/component/ParsedUsesPermission;Lcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;]Lcom/android/server/pm/AppsFilterImpl;Lcom/android/server/pm/AppsFilterImpl;]Lcom/android/server/pm/pkg/SharedUserApi;Lcom/android/server/pm/SharedUserSetting;]Lcom/android/server/pm/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerLocked;
 HSPLcom/android/server/pm/AppsFilterImpl;->snapshot()Lcom/android/server/pm/AppsFilterSnapshot;
 HPLcom/android/server/pm/AppsFilterImpl;->updateShouldFilterCacheForPackage(Lcom/android/server/pm/Computer;Ljava/lang/String;Lcom/android/server/pm/pkg/PackageStateInternal;Landroid/util/ArrayMap;[Landroid/content/pm/UserInfo;II)V+]Lcom/android/server/pm/AppsFilterImpl;Lcom/android/server/pm/AppsFilterImpl;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;
 HPLcom/android/server/pm/AppsFilterImpl;->updateShouldFilterCacheForUser(Lcom/android/server/pm/Computer;Lcom/android/server/pm/pkg/PackageStateInternal;[Landroid/content/pm/UserInfo;Lcom/android/server/pm/pkg/PackageStateInternal;I)V+]Lcom/android/server/utils/WatchedSparseBooleanMatrix;Lcom/android/server/utils/WatchedSparseBooleanMatrix;]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/AppsFilterLocked;-><init>()V
 HSPLcom/android/server/pm/AppsFilterLocked;->isForceQueryable(I)Z
-HPLcom/android/server/pm/AppsFilterLocked;->isImplicitlyQueryable(II)Z
-HPLcom/android/server/pm/AppsFilterLocked;->isQueryableViaComponent(II)Z
-HPLcom/android/server/pm/AppsFilterLocked;->isQueryableViaPackage(II)Z
-HPLcom/android/server/pm/AppsFilterLocked;->isQueryableViaUsesLibrary(II)Z
-HPLcom/android/server/pm/AppsFilterLocked;->isQueryableViaUsesPermission(II)Z
-HPLcom/android/server/pm/AppsFilterLocked;->isRetainedImplicitlyQueryable(II)Z
+HSPLcom/android/server/pm/AppsFilterLocked;->isImplicitlyQueryable(II)Z
+HSPLcom/android/server/pm/AppsFilterLocked;->isQueryableViaComponent(II)Z
+HSPLcom/android/server/pm/AppsFilterLocked;->isQueryableViaPackage(II)Z
+HSPLcom/android/server/pm/AppsFilterLocked;->isQueryableViaUsesLibrary(II)Z
+HSPLcom/android/server/pm/AppsFilterLocked;->isQueryableViaUsesPermission(II)Z
+HSPLcom/android/server/pm/AppsFilterLocked;->isRetainedImplicitlyQueryable(II)Z
 HSPLcom/android/server/pm/AppsFilterSnapshotImpl;-><init>(Lcom/android/server/pm/AppsFilterImpl;)V
-HPLcom/android/server/pm/AppsFilterUtils$ParallelComputeComponentVisibility;->getVisibleListOfQueryViaComponents(Lcom/android/server/pm/pkg/PackageStateInternal;)Landroid/util/ArraySet;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]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;
+HSPLcom/android/server/pm/AppsFilterUtils$ParallelComputeComponentVisibility;->getVisibleListOfQueryViaComponents(Lcom/android/server/pm/pkg/PackageStateInternal;)Landroid/util/ArraySet;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]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;
 HSPLcom/android/server/pm/AppsFilterUtils;->canQueryAsInstaller(Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/pkg/AndroidPackage;)Z+]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/AppsFilterUtils;->canQueryAsUpdateOwner(Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/pkg/AndroidPackage;)Z+]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HSPLcom/android/server/pm/AppsFilterUtils;->canQueryViaComponents(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/utils/WatchedArraySet;)Z+]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
-HSPLcom/android/server/pm/AppsFilterUtils;->canQueryViaPackage(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/AndroidPackage;)Z+]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HSPLcom/android/server/pm/AppsFilterUtils;->canQueryViaUsesLibrary(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/AndroidPackage;)Z+]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HPLcom/android/server/pm/AppsFilterUtils;->matchesAnyComponents(Landroid/content/Intent;Ljava/util/List;Lcom/android/server/utils/WatchedArraySet;)Z+]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]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;
-HPLcom/android/server/pm/AppsFilterUtils;->matchesAnyFilter(Landroid/content/Intent;Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/utils/WatchedArraySet;)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/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Ljava/util/List;Ljava/util/ArrayList;
-HPLcom/android/server/pm/AppsFilterUtils;->matchesIntentFilter(Landroid/content/Intent;Landroid/content/IntentFilter;Lcom/android/server/utils/WatchedArraySet;)Z+]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/content/Intent;Landroid/content/Intent;
-HPLcom/android/server/pm/AppsFilterUtils;->matchesPackage(Landroid/content/Intent;Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/utils/WatchedArraySet;)Z+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HPLcom/android/server/pm/AppsFilterUtils;->matchesProviders(Ljava/util/Set;Lcom/android/server/pm/pkg/AndroidPackage;)Z
-HSPLcom/android/server/pm/AppsFilterUtils;->requestsQueryAllPackages(Lcom/android/server/pm/pkg/AndroidPackage;)Z+]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HSPLcom/android/server/pm/BackgroundDexOptService$Injector;-><init>(Landroid/content/Context;Lcom/android/server/pm/dex/DexManager;Lcom/android/server/pm/PackageManagerService;)V
-HSPLcom/android/server/pm/BackgroundDexOptService$Injector;->getDexOptHelper()Lcom/android/server/pm/DexOptHelper;
-HSPLcom/android/server/pm/BackgroundDexOptService$Injector;->getDowngradeUnusedAppsThresholdInMillis()J
-HSPLcom/android/server/pm/BackgroundDexOptService$Injector;->getPackageManagerService()Lcom/android/server/pm/PackageManagerService;
-HSPLcom/android/server/pm/BackgroundDexOptService;-><clinit>()V
-HSPLcom/android/server/pm/BackgroundDexOptService;-><init>(Landroid/content/Context;Lcom/android/server/pm/dex/DexManager;Lcom/android/server/pm/PackageManagerService;)V
-HSPLcom/android/server/pm/BackgroundDexOptService;-><init>(Lcom/android/server/pm/BackgroundDexOptService$Injector;)V
-HPLcom/android/server/pm/BackgroundDexOptService;->abortIdleOptimizations(J)I
-HPLcom/android/server/pm/BackgroundDexOptService;->optimizePackage(Ljava/lang/String;ZZ)I
-HPLcom/android/server/pm/BackgroundDexOptService;->optimizePackages(Ljava/util/List;JLandroid/util/ArraySet;Z)I
-HPLcom/android/server/pm/BackgroundDexOptService;->trackPerformDexOpt(Ljava/lang/String;ZLcom/android/internal/util/FunctionalUtils$ThrowingCheckedSupplier;)I
+HSPLcom/android/server/pm/AppsFilterUtils;->canQueryViaComponents(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/utils/WatchedArraySet;)Z+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/AppsFilterUtils;->canQueryViaPackage(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/AndroidPackage;)Z+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/AppsFilterUtils;->canQueryViaUsesLibrary(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/AndroidPackage;)Z+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/AppsFilterUtils;->matchesAnyComponents(Landroid/content/Intent;Ljava/util/List;Lcom/android/server/utils/WatchedArraySet;)Z+]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/AppsFilterUtils;->matchesAnyFilter(Landroid/content/Intent;Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/utils/WatchedArraySet;)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/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/pm/AppsFilterUtils;->matchesIntentFilter(Landroid/content/Intent;Landroid/content/IntentFilter;Lcom/android/server/utils/WatchedArraySet;)Z+]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/pm/AppsFilterUtils;->matchesPackage(Landroid/content/Intent;Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/utils/WatchedArraySet;)Z+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/AppsFilterUtils;->matchesProviders(Ljava/util/Set;Lcom/android/server/pm/pkg/AndroidPackage;)Z+]Lcom/android/server/pm/pkg/component/ParsedProvider;Lcom/android/server/pm/pkg/component/ParsedProviderImpl;]Ljava/util/StringTokenizer;Ljava/util/StringTokenizer;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedProviderImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/AppsFilterUtils;->requestsQueryAllPackages(Lcom/android/server/pm/pkg/AndroidPackage;)Z+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HPLcom/android/server/pm/BackgroundInstallControlService$$ExternalSyntheticLambda0;->onUsageEvent(ILandroid/app/usage/UsageEvents$Event;)V
-HPLcom/android/server/pm/BackgroundInstallControlService;->lambda$new$0(ILandroid/app/usage/UsageEvents$Event;)V
+HPLcom/android/server/pm/BackgroundInstallControlService$EventHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/pm/BackgroundInstallControlService;Lcom/android/server/pm/BackgroundInstallControlService;
+HPLcom/android/server/pm/BackgroundInstallControlService;->handleUsageEvent(Landroid/app/usage/UsageEvents$Event;I)V+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/pm/BackgroundInstallControlService$ForegroundTimeFrame;Lcom/android/server/pm/BackgroundInstallControlService$ForegroundTimeFrame;]Ljava/util/TreeSet;Ljava/util/TreeSet;]Lcom/android/server/pm/BackgroundInstallControlService;Lcom/android/server/pm/BackgroundInstallControlService;
+HPLcom/android/server/pm/BackgroundInstallControlService;->lambda$new$0(ILandroid/app/usage/UsageEvents$Event;)V+]Landroid/os/Handler;Lcom/android/server/pm/BackgroundInstallControlService$EventHandler;]Landroid/os/Message;Landroid/os/Message;
 HSPLcom/android/server/pm/BroadcastHelper;-><clinit>()V
 HSPLcom/android/server/pm/BroadcastHelper;-><init>(Lcom/android/server/pm/PackageManagerServiceInjector;)V
+HSPLcom/android/server/pm/BroadcastHelper;->doSendBroadcast(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/String;Landroid/content/IIntentReceiver;[IZLandroid/util/SparseArray;Ljava/util/function/BiFunction;Landroid/os/Bundle;)V
 HSPLcom/android/server/pm/ChangedPackagesTracker;-><init>()V
-HSPLcom/android/server/pm/CompilerStats$PackageStats;-><init>(Ljava/lang/String;)V
-HSPLcom/android/server/pm/CompilerStats$PackageStats;->getStoredPathFromCodePath(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/server/pm/CompilerStats$PackageStats;->setCompileTime(Ljava/lang/String;J)V
+HSPLcom/android/server/pm/ChangedPackagesTracker;->updateSequenceNumber(Ljava/lang/String;[I)V
 HSPLcom/android/server/pm/CompilerStats;-><init>()V
-HSPLcom/android/server/pm/CompilerStats;->createPackageStats(Ljava/lang/String;)Lcom/android/server/pm/CompilerStats$PackageStats;
-HSPLcom/android/server/pm/CompilerStats;->getOrCreatePackageStats(Ljava/lang/String;)Lcom/android/server/pm/CompilerStats$PackageStats;
-HSPLcom/android/server/pm/CompilerStats;->read()V
-HSPLcom/android/server/pm/CompilerStats;->read(Ljava/io/Reader;)Z
-HSPLcom/android/server/pm/CompilerStats;->readInternal(Ljava/lang/Object;)V
-HSPLcom/android/server/pm/CompilerStats;->readInternal(Ljava/lang/Void;)V
 HSPLcom/android/server/pm/ComputerEngine$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/pm/ComputerEngine$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/pm/ComputerEngine$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/ComputerEngine$Settings;)V
@@ -5666,94 +6081,97 @@
 HSPLcom/android/server/pm/ComputerEngine$Settings;->getCrossProfileIntentResolver(I)Lcom/android/server/pm/CrossProfileIntentResolver;+]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;
 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;
+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;->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;
 HSPLcom/android/server/pm/ComputerEngine$Settings;->isEnabledAndMatch(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/component/ParsedMainComponent;JI)Z+]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/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]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
 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;
-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;->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/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;
 HSPLcom/android/server/pm/ComputerEngine;->areWebInstantAppsDisabled(I)Z+]Lcom/android/server/utils/WatchedSparseBooleanArray;Lcom/android/server/utils/WatchedSparseBooleanArray;
-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;
+HSPLcom/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;
 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;->checkSignatures(Ljava/lang/String;Ljava/lang/String;I)I
-HSPLcom/android/server/pm/ComputerEngine;->checkSignaturesInternal(Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;)I
+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;->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;
-HSPLcom/android/server/pm/ComputerEngine;->enforceCrossUserOrProfilePermission(IIZZLjava/lang/String;)V+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HPLcom/android/server/pm/ComputerEngine;->createForwardingResolveInfoUnchecked(Lcom/android/server/pm/WatchedIntentFilter;II)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/ComputerEngine;->enforceCrossUserOrProfilePermission(IIZZLjava/lang/String;)V+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 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(Ljava/lang/String;IIZ)Z+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
 HSPLcom/android/server/pm/ComputerEngine;->filterIfNotSystemUser(Ljava/util/List;I)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;
-HSPLcom/android/server/pm/ComputerEngine;->filterOnlySystemPackages([Ljava/lang/String;)[Ljava/lang/String;
-HSPLcom/android/server/pm/ComputerEngine;->filterSdkLibPackage(Lcom/android/server/pm/pkg/PackageStateInternal;IIJ)Z+]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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/ComputerEngine;->filterOnlySystemPackages([Ljava/lang/String;)[Ljava/lang/String;+]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;]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/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;]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;->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+]Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;]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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]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/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]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;]Lcom/android/server/pm/permission/LegacyPermissionDataProvider;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;
+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/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/AndroidPackage;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;
 HPLcom/android/server/pm/ComputerEngine;->getActivityInfoCrossProfile(Landroid/content/ComponentName;JI)Landroid/content/pm/ActivityInfo;
 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;->getApplicationEnabledSetting(Ljava/lang/String;I)I
+HSPLcom/android/server/pm/ComputerEngine;->getApplicationEnabledSetting(Ljava/lang/String;I)I+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]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;->getApplicationInfo(Ljava/lang/String;JI)Landroid/content/pm/ApplicationInfo;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->getApplicationInfoInternal(Ljava/lang/String;JII)Landroid/content/pm/ApplicationInfo;+]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;->getApplicationInfoInternalBody(Ljava/lang/String;JII)Landroid/content/pm/ApplicationInfo;+]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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 HPLcom/android/server/pm/ComputerEngine;->getBlockUninstallForUser(Ljava/lang/String;I)Z+]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;->getComponentEnabledSetting(Landroid/content/ComponentName;II)I
-HPLcom/android/server/pm/ComputerEngine;->getComponentEnabledSettingInternal(Landroid/content/ComponentName;II)I
+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;
 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;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/VersionedPackage;Landroid/content/pm/VersionedPackage;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/ComputerEngine;->getDisabledSystemPackage(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageStateInternal;
 HSPLcom/android/server/pm/ComputerEngine;->getInstallSource(Ljava/lang/String;II)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;
-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;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
-HSPLcom/android/server/pm/ComputerEngine;->getInstalledPackages(JI)Landroid/content/pm/ParceledListSlice;
-HSPLcom/android/server/pm/ComputerEngine;->getInstalledPackagesBody(JII)Landroid/content/pm/ParceledListSlice;+]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;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/AndroidPackage;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;
+HSPLcom/android/server/pm/ComputerEngine;->getInstallSourceInfo(Ljava/lang/String;I)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;->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;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+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/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;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/AndroidPackage;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;
 HPLcom/android/server/pm/ComputerEngine;->getInstallerPackageName(Ljava/lang/String;I)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;
 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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 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;
-HSPLcom/android/server/pm/ComputerEngine;->getNameForUid(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;
-HSPLcom/android/server/pm/ComputerEngine;->getPackage(I)Lcom/android/server/pm/pkg/AndroidPackage;+]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/ComputerEngine;->getNameForUid(I)Ljava/lang/String;+]Lcom/android/server/pm/permission/PermissionManagerServiceInternal$HotwordDetectionServiceProvider;Lcom/android/server/voiceinteraction/HotwordDetectionConnection$1$$ExternalSyntheticLambda0;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;]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;
+HSPLcom/android/server/pm/ComputerEngine;->getNamesForUids([I)[Ljava/lang/String;
+HSPLcom/android/server/pm/ComputerEngine;->getNotifyPackagesForReplacedReceived([Ljava/lang/String;)Landroid/util/ArraySet;
+HSPLcom/android/server/pm/ComputerEngine;->getPackage(I)Lcom/android/server/pm/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/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
 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/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;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 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;->getPackageStateForInstalledAndFiltered(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;->getPackageStateFiltered(Ljava/lang/String;II)Lcom/android/server/pm/pkg/PackageStateInternal;+]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;->getPackageStateForInstalledAndFiltered(Ljava/lang/String;II)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;->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;
+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/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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;
+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/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;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/AndroidPackage;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;->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;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
 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/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;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/ComputerEngine;->getProcessesForUid(I)Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/ComputerEngine;->getProviderInfo(Landroid/content/ComponentName;JI)Landroid/content/pm/ProviderInfo;
 HSPLcom/android/server/pm/ComputerEngine;->getReceiverInfo(Landroid/content/ComponentName;JI)Landroid/content/pm/ActivityInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]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/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->getServiceInfo(Landroid/content/ComponentName;JI)Landroid/content/pm/ServiceInfo;+]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;->getServiceInfoBody(Landroid/content/ComponentName;JII)Landroid/content/pm/ServiceInfo;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]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;
+HPLcom/android/server/pm/ComputerEngine;->getSharedLibraries(Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/ComputerEngine;->getSharedLibraryInfo(Ljava/lang/String;J)Landroid/content/pm/SharedLibraryInfo;
 HSPLcom/android/server/pm/ComputerEngine;->getSharedUser(I)Lcom/android/server/pm/pkg/SharedUserApi;
-HSPLcom/android/server/pm/ComputerEngine;->getSharedUserPackages(I)Landroid/util/ArraySet;
 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;
-HPLcom/android/server/pm/ComputerEngine;->getSystemSharedLibraryNames()[Ljava/lang/String;
 HSPLcom/android/server/pm/ComputerEngine;->getTargetSdkVersion(Ljava/lang/String;)I+]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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HSPLcom/android/server/pm/ComputerEngine;->getUidTargetSdkVersion(I)I+]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/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]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/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/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]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/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->getUserInfos()[Landroid/content/pm/UserInfo;
 HSPLcom/android/server/pm/ComputerEngine;->getVersion()I
 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
+HSPLcom/android/server/pm/ComputerEngine;->hasNonNegativePriority(Ljava/util/List;)Z+]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/pm/ComputerEngine;->hasSigningCertificate(Ljava/lang/String;[BI)Z
 HSPLcom/android/server/pm/ComputerEngine;->instantAppInstallerActivity()Landroid/content/pm/ActivityInfo;
 HSPLcom/android/server/pm/ComputerEngine;->isApexPackage(Ljava/lang/String;)Z+]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/ComputerEngine;->isCallerInstallerOfRecord(Lcom/android/server/pm/pkg/AndroidPackage;I)Z
@@ -5763,31 +6181,31 @@
 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/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;,Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;]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/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;
-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;
+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;
 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;
-HSPLcom/android/server/pm/ComputerEngine;->isUidPrivileged(I)Z
 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;]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;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/pm/ComputerEngine;->queryIntentActivitiesInternal(Landroid/content/Intent;Ljava/lang/String;JI)Ljava/util/List;
+HSPLcom/android/server/pm/ComputerEngine;->queryIntentActivitiesInternal(Landroid/content/Intent;Ljava/lang/String;JI)Ljava/util/List;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
+HPLcom/android/server/pm/ComputerEngine;->queryIntentActivitiesInternal(Landroid/content/Intent;Ljava/lang/String;JII)Ljava/util/List;
 HSPLcom/android/server/pm/ComputerEngine;->queryIntentActivitiesInternal(Landroid/content/Intent;Ljava/lang/String;JJIIZZ)Ljava/util/List;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerServiceInjector;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;
-HSPLcom/android/server/pm/ComputerEngine;->queryIntentActivitiesInternalBody(Landroid/content/Intent;Ljava/lang/String;JIIZZLjava/lang/String;Ljava/lang/String;)Lcom/android/server/pm/QueryIntentActivitiesResult;+]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;,Lcom/android/server/pm/resolution/ComponentResolver;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/pm/CrossProfileIntentResolverEngine;Lcom/android/server/pm/CrossProfileIntentResolverEngine;
+HSPLcom/android/server/pm/ComputerEngine;->queryIntentActivitiesInternalBody(Landroid/content/Intent;Ljava/lang/String;JIIZZLjava/lang/String;Ljava/lang/String;)Lcom/android/server/pm/QueryIntentActivitiesResult;+]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;,Lcom/android/server/pm/resolution/ComponentResolver;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/pm/CrossProfileIntentResolverEngine;Lcom/android/server/pm/CrossProfileIntentResolverEngine;
 HSPLcom/android/server/pm/ComputerEngine;->queryIntentServicesInternal(Landroid/content/Intent;Ljava/lang/String;JIIZ)Ljava/util/List;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerServiceInjector;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/pm/ComputerEngine;->queryIntentServicesInternalBody(Landroid/content/Intent;Ljava/lang/String;JIILjava/lang/String;)Ljava/util/List;+]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/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/pm/ComputerEngine;->resolveComponentName()Landroid/content/ComponentName;
 HSPLcom/android/server/pm/ComputerEngine;->resolveContentProvider(Ljava/lang/String;JII)Landroid/content/pm/ProviderInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerServiceInjector;]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;
 HSPLcom/android/server/pm/ComputerEngine;->resolveExternalPackageName(Lcom/android/server/pm/pkg/AndroidPackage;)Ljava/lang/String;+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HSPLcom/android/server/pm/ComputerEngine;->resolveInternalPackageName(Ljava/lang/String;J)Ljava/lang/String;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/ComputerEngine;->resolveInternalPackageName(Ljava/lang/String;J)Ljava/lang/String;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
 HSPLcom/android/server/pm/ComputerEngine;->resolveInternalPackageNameInternalLocked(Ljava/lang/String;JI)Ljava/lang/String;+]Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;]Lcom/android/server/utils/WatchedLongSparseArray;Lcom/android/server/utils/WatchedLongSparseArray;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/SharedLibrariesRead;Lcom/android/server/pm/SharedLibrariesImpl;]Landroid/content/pm/VersionedPackage;Landroid/content/pm/VersionedPackage;
-HSPLcom/android/server/pm/ComputerEngine;->safeMode()Z
+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/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
-HSPLcom/android/server/pm/ComputerEngine;->shouldFilterApplication(Lcom/android/server/pm/pkg/PackageStateInternal;ILandroid/content/ComponentName;IIZ)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;
-HSPLcom/android/server/pm/ComputerEngine;->shouldFilterApplicationIncludingUninstalled(Lcom/android/server/pm/SharedUserSetting;II)Z+]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/pkg/PackageState;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/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;
+HSPLcom/android/server/pm/ComputerEngine;->shouldFilterApplication(Lcom/android/server/pm/pkg/PackageStateInternal;ILandroid/content/ComponentName;IIZ)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;
+HSPLcom/android/server/pm/ComputerEngine;->shouldFilterApplicationIncludingUninstalled(Lcom/android/server/pm/SharedUserSetting;II)Z+]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;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/ComputerEngine;->shouldFilterApplicationIncludingUninstalled(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;->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
@@ -5802,17 +6220,20 @@
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/pm/CrossProfileAppsServiceImpl;ILjava/lang/String;)V
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$$ExternalSyntheticLambda9;->getOrThrow()Ljava/lang/Object;
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getAppOpsManager()Landroid/app/AppOpsManager;
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getCallingUid()I
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getPackageManagerInternal()Landroid/content/pm/PackageManagerInternal;
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getUserManager()Landroid/os/UserManager;
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl$LocalService;->verifyUidHasInteractAcrossProfilePermission(Ljava/lang/String;I)Z
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->canInteractAcrossProfiles(Ljava/lang/String;)Z
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->getTargetUserProfiles(Ljava/lang/String;)Ljava/util/List;
-HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->getTargetUserProfilesUnchecked(Ljava/lang/String;I)Ljava/util/List;+]Lcom/android/server/pm/CrossProfileAppsServiceImpl$Injector;Lcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;
-HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->hasInteractAcrossProfilesPermission(Ljava/lang/String;II)Z+]Lcom/android/server/pm/CrossProfileAppsServiceImpl;Lcom/android/server/pm/CrossProfileAppsServiceImpl;
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->getTargetUserProfilesUnchecked(Ljava/lang/String;I)Ljava/util/List;
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->hasInteractAcrossProfilesPermission(Ljava/lang/String;II)Z
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->haveProfilesGotInteractAcrossProfilesPermission(Ljava/lang/String;Ljava/util/List;)Z
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->isPackageEnabled(Ljava/lang/String;I)Z
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->isPermissionGranted(Ljava/lang/String;I)Z+]Lcom/android/server/pm/CrossProfileAppsServiceImpl$Injector;Lcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;
 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;
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->lambda$isPackageEnabled$4(Ljava/lang/String;II)Ljava/lang/Boolean;+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/CrossProfileAppsServiceImpl$Injector;Lcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;
-HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->verifyCallingPackage(Ljava/lang/String;)V+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/pm/CrossProfileAppsServiceImpl$Injector;Lcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->verifyCallingPackage(Ljava/lang/String;)V
 HPLcom/android/server/pm/CrossProfileDomainInfo;-><init>(Landroid/content/pm/ResolveInfo;II)V
 HSPLcom/android/server/pm/CrossProfileIntentFilter$1;-><init>(Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/utils/Watchable;)V
 HSPLcom/android/server/pm/CrossProfileIntentFilter$1;->createSnapshot()Lcom/android/server/pm/CrossProfileIntentFilter;
@@ -5822,7 +6243,7 @@
 HSPLcom/android/server/pm/CrossProfileIntentFilter;->getStringFromXml(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/pm/CrossProfileIntentFilter;->makeCache()Lcom/android/server/utils/SnapshotCache;
 HSPLcom/android/server/pm/CrossProfileIntentFilter;->snapshot()Lcom/android/server/pm/CrossProfileIntentFilter;
-HSPLcom/android/server/pm/CrossProfileIntentFilter;->writeToXml(Lcom/android/modules/utils/TypedXmlSerializer;)V
+HSPLcom/android/server/pm/CrossProfileIntentFilter;->writeToXml(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/content/IntentFilter;Landroid/content/IntentFilter;
 HSPLcom/android/server/pm/CrossProfileIntentFilterHelper;-><init>(Lcom/android/server/pm/Settings;Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/PackageManagerTracedLock;Lcom/android/server/pm/UserManagerInternal;Landroid/content/Context;)V
 HSPLcom/android/server/pm/CrossProfileIntentFilterHelper;->updateDefaultCrossProfileIntentFilter()V
 HSPLcom/android/server/pm/CrossProfileIntentResolver$1;-><init>(Lcom/android/server/pm/CrossProfileIntentResolver;Lcom/android/server/pm/CrossProfileIntentResolver;Lcom/android/server/utils/Watchable;)V
@@ -5835,22 +6256,23 @@
 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/CrossProfileIntentFilter;)Lcom/android/server/pm/CrossProfileIntentFilter;
+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
 HSPLcom/android/server/pm/CrossProfileIntentResolverEngine;-><init>(Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;Lcom/android/server/pm/DefaultAppProvider;Landroid/content/Context;)V
-HSPLcom/android/server/pm/CrossProfileIntentResolverEngine;->chooseCrossProfileResolver(Lcom/android/server/pm/Computer;IIZJ)Lcom/android/server/pm/CrossProfileResolver;+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/CrossProfileIntentResolverEngine;Lcom/android/server/pm/CrossProfileIntentResolverEngine;
+HPLcom/android/server/pm/CrossProfileIntentResolverEngine;->chooseCrossProfileResolver(Lcom/android/server/pm/Computer;IIZJ)Lcom/android/server/pm/CrossProfileResolver;
 HSPLcom/android/server/pm/CrossProfileIntentResolverEngine;->combineFilterAndCreateQueryActivitiesResponse(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZJIIZLjava/util/List;Ljava/util/List;ZZZLjava/util/function/Function;)Lcom/android/server/pm/QueryIntentActivitiesResult;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/pm/CrossProfileIntentResolverEngine;Lcom/android/server/pm/CrossProfileIntentResolverEngine;
-HPLcom/android/server/pm/CrossProfileIntentResolverEngine;->filterCandidatesWithDomainPreferredActivitiesLPrBody(Lcom/android/server/pm/Computer;Landroid/content/Intent;JLjava/util/List;Ljava/util/List;IZZZLjava/util/function/Function;)Ljava/util/List;
+HPLcom/android/server/pm/CrossProfileIntentResolverEngine;->filterCandidatesWithDomainPreferredActivitiesLPrBody(Lcom/android/server/pm/Computer;Landroid/content/Intent;JLjava/util/List;Ljava/util/List;IZZZLjava/util/function/Function;)Ljava/util/List;+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;Lcom/android/server/pm/verify/domain/DomainVerificationService;]Lcom/android/server/pm/DefaultAppProvider;Lcom/android/server/pm/DefaultAppProvider;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/pm/CrossProfileIntentResolverEngine;Lcom/android/server/pm/CrossProfileIntentResolverEngine;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/pm/CrossProfileIntentResolverEngine;->filterCrossProfileCandidatesWithDomainPreferredActivities(Lcom/android/server/pm/Computer;Landroid/content/Intent;JLandroid/util/SparseArray;IIZ)Ljava/util/List;
-HSPLcom/android/server/pm/CrossProfileIntentResolverEngine;->isNoFilteringPropertyConfiguredForUser(I)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Landroid/content/pm/UserProperties;Landroid/content/pm/UserProperties;
+HPLcom/android/server/pm/CrossProfileIntentResolverEngine;->isNoFilteringPropertyConfiguredForUser(I)Z
 HSPLcom/android/server/pm/CrossProfileIntentResolverEngine;->resolveInfoFromCrossProfileDomainInfo(Ljava/util/List;)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/CrossProfileIntentResolverEngine;->resolveIntent(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;IJLjava/lang/String;ZZLjava/util/function/Function;)Ljava/util/List;+]Lcom/android/server/pm/CrossProfileIntentResolverEngine;Lcom/android/server/pm/CrossProfileIntentResolverEngine;
-HSPLcom/android/server/pm/CrossProfileIntentResolverEngine;->resolveIntentInternal(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;IIJLjava/lang/String;ZZLjava/util/function/Function;Ljava/util/Set;)Ljava/util/List;+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/pm/CrossProfileResolver;Lcom/android/server/pm/DefaultCrossProfileResolver;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/CrossProfileIntentResolverEngine;Lcom/android/server/pm/CrossProfileIntentResolverEngine;]Ljava/util/Set;Ljava/util/HashSet;
-HSPLcom/android/server/pm/CrossProfileIntentResolverEngine;->shouldSkipCurrentProfile(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;I)Z+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;
-HSPLcom/android/server/pm/CrossProfileResolver;-><init>(Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/UserManagerService;)V
-HPLcom/android/server/pm/CrossProfileResolver;->filterIfNotSystemUser(Ljava/util/List;I)Ljava/util/List;+]Ljava/util/List;Ljava/util/Collections$SingletonList;,Ljava/util/ArrayList;
-HSPLcom/android/server/pm/CrossProfileResolver;->isUserEnabled(I)Z
+HSPLcom/android/server/pm/CrossProfileIntentResolverEngine;->resolveIntentInternal(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;IIJLjava/lang/String;ZZLjava/util/function/Function;Ljava/util/Set;)Ljava/util/List;+]Lcom/android/server/pm/CrossProfileResolver;Lcom/android/server/pm/DefaultCrossProfileResolver;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/pm/CrossProfileIntentResolverEngine;Lcom/android/server/pm/CrossProfileIntentResolverEngine;]Landroid/content/Intent;Landroid/content/Intent;]Ljava/util/Set;Ljava/util/HashSet;
+HSPLcom/android/server/pm/CrossProfileIntentResolverEngine;->shouldSkipCurrentProfile(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;I)Z+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;
+HPLcom/android/server/pm/CrossProfileIntentResolverEngine;->shouldUseNoFilteringResolver(II)Z
+HPLcom/android/server/pm/CrossProfileResolver;-><init>(Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/UserManagerService;)V
+HPLcom/android/server/pm/CrossProfileResolver;->filterIfNotSystemUser(Ljava/util/List;I)Ljava/util/List;
+HPLcom/android/server/pm/CrossProfileResolver;->isUserEnabled(I)Z
 HSPLcom/android/server/pm/DataLoaderManagerService$DataLoaderManagerBinderService;-><init>(Lcom/android/server/pm/DataLoaderManagerService;)V
 HSPLcom/android/server/pm/DataLoaderManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/DataLoaderManagerService;->onStart()V
@@ -5866,19 +6288,20 @@
 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;->getDefaultCloneProfileFilters()Ljava/util/List;
+HSPLcom/android/server/pm/DefaultCrossProfileIntentFiltersUtils;->getDefaultCrossProfileTelephonyIntentFilters(Z)Ljava/util/List;
 HSPLcom/android/server/pm/DefaultCrossProfileIntentFiltersUtils;->getDefaultManagedProfileFilters()Ljava/util/List;
-HSPLcom/android/server/pm/DefaultCrossProfileResolver;-><init>(Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;)V
-HSPLcom/android/server/pm/DefaultCrossProfileResolver;->createForwardingResolveInfo(Lcom/android/server/pm/Computer;Lcom/android/server/pm/CrossProfileIntentFilter;Landroid/content/Intent;Ljava/lang/String;JILjava/util/function/Function;)Lcom/android/server/pm/CrossProfileDomainInfo;+]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;]Lcom/android/server/pm/CrossProfileResolver;Lcom/android/server/pm/DefaultCrossProfileResolver;]Ljava/util/function/Function;Lcom/android/server/pm/ComputerEngine$$ExternalSyntheticLambda1;]Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;Lcom/android/server/pm/verify/domain/DomainVerificationService;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;
-HSPLcom/android/server/pm/DefaultCrossProfileResolver;->queryCrossProfileIntents(Lcom/android/server/pm/Computer;Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;JIZLjava/util/function/Function;)Lcom/android/server/pm/CrossProfileDomainInfo;
-HSPLcom/android/server/pm/DefaultCrossProfileResolver;->querySkipCurrentProfileIntents(Lcom/android/server/pm/Computer;Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;JILjava/util/function/Function;)Lcom/android/server/pm/CrossProfileDomainInfo;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/DefaultCrossProfileResolver;Lcom/android/server/pm/DefaultCrossProfileResolver;]Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;
-HSPLcom/android/server/pm/DefaultCrossProfileResolver;->resolveIntent(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;IIJLjava/lang/String;Ljava/util/List;ZLjava/util/function/Function;)Ljava/util/List;+]Lcom/android/server/pm/CrossProfileResolver;Lcom/android/server/pm/DefaultCrossProfileResolver;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/DefaultCrossProfileResolver;Lcom/android/server/pm/DefaultCrossProfileResolver;]Landroid/content/Intent;Landroid/content/Intent;
+HPLcom/android/server/pm/DefaultCrossProfileResolver;-><init>(Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;)V
+HPLcom/android/server/pm/DefaultCrossProfileResolver;->createForwardingResolveInfo(Lcom/android/server/pm/Computer;Lcom/android/server/pm/CrossProfileIntentFilter;Landroid/content/Intent;Ljava/lang/String;JILjava/util/function/Function;)Lcom/android/server/pm/CrossProfileDomainInfo;+]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;]Lcom/android/server/pm/CrossProfileResolver;Lcom/android/server/pm/DefaultCrossProfileResolver;]Ljava/util/function/Function;Lcom/android/server/pm/ComputerEngine$$ExternalSyntheticLambda1;]Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;Lcom/android/server/pm/verify/domain/DomainVerificationService;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;
+HPLcom/android/server/pm/DefaultCrossProfileResolver;->filterResolveInfoWithDomainPreferredActivity(Landroid/content/Intent;Ljava/util/List;JIII)Ljava/util/List;
+HPLcom/android/server/pm/DefaultCrossProfileResolver;->queryCrossProfileIntents(Lcom/android/server/pm/Computer;Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;JIZLjava/util/function/Function;)Lcom/android/server/pm/CrossProfileDomainInfo;
+HPLcom/android/server/pm/DefaultCrossProfileResolver;->querySkipCurrentProfileIntents(Lcom/android/server/pm/Computer;Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;JILjava/util/function/Function;)Lcom/android/server/pm/CrossProfileDomainInfo;
+HPLcom/android/server/pm/DefaultCrossProfileResolver;->resolveIntent(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;IIJLjava/lang/String;Ljava/util/List;ZLjava/util/function/Function;)Ljava/util/List;
 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
+HSPLcom/android/server/pm/DexOptHelper$DexoptDoneHandler;->onDexoptDone(Lcom/android/server/art/model/DexoptResult;)V
+HSPLcom/android/server/pm/DexOptHelper;-><clinit>()V
 HSPLcom/android/server/pm/DexOptHelper;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/DexOptHelper;->getDexUseManagerLocal()Lcom/android/server/art/DexUseManagerLocal;
-HPLcom/android/server/pm/DexOptHelper;->performDexOpt(Lcom/android/server/pm/dex/DexoptOptions;)Z
-HPLcom/android/server/pm/DexOptHelper;->performDexOptInternal(Lcom/android/server/pm/dex/DexoptOptions;)I
-HPLcom/android/server/pm/DexOptHelper;->performDexOptInternalWithDependenciesLI(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/dex/DexoptOptions;)I
 HSPLcom/android/server/pm/DexOptHelper;->useArtService()Z
 HSPLcom/android/server/pm/DistractingPackageHelper;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/BroadcastHelper;Lcom/android/server/pm/SuspendPackageHelper;)V
 HSPLcom/android/server/pm/DomainVerificationConnection;-><init>(Lcom/android/server/pm/PackageManagerService;)V
@@ -5887,31 +6310,36 @@
 HSPLcom/android/server/pm/DomainVerificationConnection;->getCallingUid()I
 HSPLcom/android/server/pm/DomainVerificationConnection;->getCallingUserId()I
 HSPLcom/android/server/pm/DomainVerificationConnection;->scheduleWriteSettings()V
+HPLcom/android/server/pm/DynamicCodeLoggingService;->-$$Nest$fgetmAuditWatchingStopRequested(Lcom/android/server/pm/DynamicCodeLoggingService;)Z
+HSPLcom/android/server/pm/GentleUpdateHelper$$ExternalSyntheticLambda2;->onUidImportance(II)V
 HSPLcom/android/server/pm/GentleUpdateHelper$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/pm/GentleUpdateHelper;Ljava/lang/String;I)V
-HSPLcom/android/server/pm/GentleUpdateHelper;->onUidImportance(II)V
+HSPLcom/android/server/pm/GentleUpdateHelper;->onUidImportance(II)V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
 HSPLcom/android/server/pm/IPackageManagerBase;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
-HSPLcom/android/server/pm/IPackageManagerBase;->checkUidPermission(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;->checkUidPermission(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;,Lcom/android/server/pm/ComputerLocked;
 HSPLcom/android/server/pm/IPackageManagerBase;->getActivityInfo(Landroid/content/ComponentName;JI)Landroid/content/pm/ActivityInfo;+]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;->getApplicationEnabledSetting(Ljava/lang/String;I)I
+HSPLcom/android/server/pm/IPackageManagerBase;->getApplicationEnabledSetting(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;->getApplicationInfo(Ljava/lang/String;JI)Landroid/content/pm/ApplicationInfo;+]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;->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
+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;
+HSPLcom/android/server/pm/IPackageManagerBase;->getInstallSourceInfo(Ljava/lang/String;I)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;->getInstalledPackages(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;->getInstallerPackageName(Ljava/lang/String;)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;->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;->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;
 HSPLcom/android/server/pm/IPackageManagerBase;->getPackageUid(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;->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;
-HSPLcom/android/server/pm/IPackageManagerBase;->getPropertyAsUser(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/PackageManager$Property;
-HSPLcom/android/server/pm/IPackageManagerBase;->getServiceInfo(Landroid/content/ComponentName;JI)Landroid/content/pm/ServiceInfo;
+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;
+HPLcom/android/server/pm/IPackageManagerBase;->getPropertyAsUser(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/PackageManager$Property;
+HSPLcom/android/server/pm/IPackageManagerBase;->getServiceInfo(Landroid/content/ComponentName;JI)Landroid/content/pm/ServiceInfo;+]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;->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;
 HSPLcom/android/server/pm/IPackageManagerBase;->hasSystemFeature(Ljava/lang/String;I)Z+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
 HSPLcom/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;->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;
-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;
+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;->queryContentProviders(Ljava/lang/String;IJLjava/lang/String;)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/IPackageManagerBase;->queryIntentActivities(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;
 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;
+HSPLcom/android/server/pm/IPackageManagerBase;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V
 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;
@@ -5927,7 +6355,6 @@
 HSPLcom/android/server/pm/InitAppsHelper;->$r8$lambda$sXpEtX1s0xWPV7tALzKHmdqkbvU(Lcom/android/internal/util/function/TriConsumer;Landroid/util/ArrayMap;Lcom/android/server/pm/pkg/PackageStateInternal;)V
 HSPLcom/android/server/pm/InitAppsHelper;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/ApexManager;Lcom/android/server/pm/InstallPackageHelper;Ljava/util/List;)V
 HSPLcom/android/server/pm/InitAppsHelper;->fixInstalledAppDirMode()V
-HSPLcom/android/server/pm/InitAppsHelper;->fixSystemPackages([I)V
 HSPLcom/android/server/pm/InitAppsHelper;->getApexScanPartitions()Ljava/util/List;
 HSPLcom/android/server/pm/InitAppsHelper;->getDirsToScanAsSystem()Ljava/util/List;
 HSPLcom/android/server/pm/InitAppsHelper;->getSystemScanPartitions()Ljava/util/List;
@@ -5937,7 +6364,6 @@
 HSPLcom/android/server/pm/InitAppsHelper;->lambda$fixInstalledAppDirMode$2(Ljava/nio/file/Path;)V
 HSPLcom/android/server/pm/InitAppsHelper;->lambda$initSystemApps$0(Lcom/android/internal/util/function/TriConsumer;Landroid/util/ArrayMap;Lcom/android/server/pm/pkg/PackageStateInternal;)V
 HSPLcom/android/server/pm/InitAppsHelper;->lambda$initSystemApps$1(Landroid/util/ArrayMap;Lcom/android/internal/util/function/TriConsumer;)V
-HSPLcom/android/server/pm/InitAppsHelper;->logNonSystemAppScanningTime(J)V
 HSPLcom/android/server/pm/InitAppsHelper;->logSystemAppsScanningTime(J)V
 HSPLcom/android/server/pm/InitAppsHelper;->resolveApexToScanPartition(Lcom/android/server/pm/ApexManager$ActiveApexInfo;)Lcom/android/server/pm/ScanPartition;
 HSPLcom/android/server/pm/InitAppsHelper;->scanApexPackagesTraced(Lcom/android/server/pm/parsing/PackageParser2;)Ljava/util/List;
@@ -5955,19 +6381,15 @@
 HSPLcom/android/server/pm/InstallPackageHelper;->assertPackageIsValid(Lcom/android/server/pm/pkg/AndroidPackage;II)V
 HSPLcom/android/server/pm/InstallPackageHelper;->assertPackageWithSharedUserIdIsPrivileged(Lcom/android/server/pm/pkg/AndroidPackage;)V
 HSPLcom/android/server/pm/InstallPackageHelper;->assertStaticSharedLibraryVersionCodeIsValid(Lcom/android/server/pm/pkg/AndroidPackage;)V
-HSPLcom/android/server/pm/InstallPackageHelper;->checkExistingBetterPackages(Landroid/util/ArrayMap;Ljava/util/List;II)V
-HSPLcom/android/server/pm/InstallPackageHelper;->cleanupDisabledPackageSettings(Ljava/util/List;[II)V
 HSPLcom/android/server/pm/InstallPackageHelper;->commitPackageSettings(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/ReconciledPackage;)V
 HSPLcom/android/server/pm/InstallPackageHelper;->commitReconciledScanResultLocked(Lcom/android/server/pm/ReconciledPackage;[I)Lcom/android/server/pm/pkg/AndroidPackage;
-HSPLcom/android/server/pm/InstallPackageHelper;->disableSystemPackageLPw(Lcom/android/server/pm/pkg/AndroidPackage;)Z
 HSPLcom/android/server/pm/InstallPackageHelper;->getOriginalPackageLocked(Lcom/android/server/pm/pkg/AndroidPackage;Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/InstallPackageHelper;->installPackagesFromDir(Ljava/io/File;IILcom/android/server/pm/parsing/PackageParser2;Ljava/util/concurrent/ExecutorService;Lcom/android/server/pm/ApexManager$ActiveApexInfo;)V
-HSPLcom/android/server/pm/InstallPackageHelper;->installSystemStubPackages(Ljava/util/List;I)V
 HSPLcom/android/server/pm/InstallPackageHelper;->lambda$scanApexPackages$2(Landroid/util/ArrayMap;Lcom/android/server/pm/ParallelPackageParser$ParseResult;Lcom/android/server/pm/ParallelPackageParser$ParseResult;)I
 HSPLcom/android/server/pm/InstallPackageHelper;->maybeClearProfilesForUpgradesLI(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/pkg/AndroidPackage;)V
 HSPLcom/android/server/pm/InstallPackageHelper;->optimisticallyRegisterAppId(Lcom/android/server/pm/InstallRequest;)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;
-HPLcom/android/server/pm/InstallPackageHelper;->preparePackageLI(Lcom/android/server/pm/InstallRequest;)V
+HSPLcom/android/server/pm/InstallPackageHelper;->preparePackageLI(Lcom/android/server/pm/InstallRequest;)V
 HSPLcom/android/server/pm/InstallPackageHelper;->prepareSystemPackageCleanUp(Lcom/android/server/utils/WatchedArrayMap;Ljava/util/List;Landroid/util/ArrayMap;[I)V
 HSPLcom/android/server/pm/InstallPackageHelper;->scanApexPackages([Landroid/apex/ApexInfo;IILcom/android/server/pm/parsing/PackageParser2;Ljava/util/concurrent/ExecutorService;)Ljava/util/List;
 HSPLcom/android/server/pm/InstallPackageHelper;->scanPackageNewLI(Lcom/android/server/pm/parsing/pkg/ParsedPackage;IIJLandroid/os/UserHandle;Ljava/lang/String;)Lcom/android/server/pm/ScanResult;
@@ -5975,7 +6397,6 @@
 HSPLcom/android/server/pm/InstallRequest;-><init>(Lcom/android/server/pm/parsing/pkg/ParsedPackage;IILandroid/os/UserHandle;Lcom/android/server/pm/ScanResult;)V
 HSPLcom/android/server/pm/InstallRequest;->assertScanResultExists()V
 HSPLcom/android/server/pm/InstallRequest;->getApexModuleName()Ljava/lang/String;
-HSPLcom/android/server/pm/InstallRequest;->getChangedAbiCodePath()Ljava/util/List;
 HSPLcom/android/server/pm/InstallRequest;->getDisabledPackageSetting()Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/InstallRequest;->getDynamicSharedLibraryInfos()Ljava/util/List;
 HSPLcom/android/server/pm/InstallRequest;->getInstallSource()Lcom/android/server/pm/InstallSource;
@@ -6011,19 +6432,14 @@
 HSPLcom/android/server/pm/InstallSource;->setUpdateOwnerPackageName(Ljava/lang/String;)Lcom/android/server/pm/InstallSource;
 HSPLcom/android/server/pm/Installer$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/Installer;)V
 HSPLcom/android/server/pm/Installer$Batch;->createAppData(Landroid/os/CreateAppDataArgs;)Ljava/util/concurrent/CompletableFuture;
-HSPLcom/android/server/pm/Installer$Batch;->execute(Lcom/android/server/pm/Installer;)V
 HSPLcom/android/server/pm/Installer;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/Installer;-><init>(Landroid/content/Context;Z)V
-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;->checkLegacyDexoptDisabled()V
-HSPLcom/android/server/pm/Installer;->clearAppProfiles(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/pm/Installer;->connect()V
 HSPLcom/android/server/pm/Installer;->executeDeferredActions()V
 HPLcom/android/server/pm/Installer;->getAppSize(Ljava/lang/String;[Ljava/lang/String;III[J[Ljava/lang/String;Landroid/content/pm/PackageStats;)V
 HSPLcom/android/server/pm/Installer;->invalidateMounts()V
 HSPLcom/android/server/pm/Installer;->onStart()V
-HSPLcom/android/server/pm/Installer;->prepareAppProfile(Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/Installer;->setAppQuota(Ljava/lang/String;IIJ)V+]Landroid/os/IInstalld;Landroid/os/IInstalld$Stub$Proxy;]Lcom/android/server/pm/Installer;Lcom/android/server/pm/Installer;
 HSPLcom/android/server/pm/InstantAppRegistry$1;-><init>(Lcom/android/server/pm/InstantAppRegistry;)V
 HSPLcom/android/server/pm/InstantAppRegistry$2;-><init>(Lcom/android/server/pm/InstantAppRegistry;Lcom/android/server/pm/InstantAppRegistry;Lcom/android/server/utils/Watchable;)V
@@ -6033,53 +6449,50 @@
 HSPLcom/android/server/pm/InstantAppRegistry;->makeCache()Lcom/android/server/utils/SnapshotCache;
 HSPLcom/android/server/pm/InstantAppRegistry;->registerObserver(Lcom/android/server/utils/Watcher;)V
 HSPLcom/android/server/pm/InstantAppRegistry;->snapshot()Lcom/android/server/pm/InstantAppRegistry;
+HPLcom/android/server/pm/InstantAppResolver;->buildRequestInfo(Landroid/content/pm/InstantAppRequest;)Landroid/content/pm/InstantAppRequestInfo;
+HPLcom/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;
 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;
+HPLcom/android/server/pm/InstantAppResolver;->parseDigest(Landroid/content/Intent;)Landroid/content/pm/InstantAppResolveInfo$InstantAppDigest;
 HPLcom/android/server/pm/InstantAppResolver;->sanitizeIntent(Landroid/content/Intent;)Landroid/content/Intent;
+HPLcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller$1;->sendResult(Landroid/os/Bundle;)V
+HPLcom/android/server/pm/InstantAppResolverConnection;->getInstantAppResolveInfoList(Landroid/content/pm/InstantAppRequestInfo;)Ljava/util/List;
 HSPLcom/android/server/pm/InstructionSets;-><clinit>()V
-HSPLcom/android/server/pm/InstructionSets;->getDexCodeInstructionSet(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/server/pm/InstructionSets;->getDexCodeInstructionSets([Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/server/pm/InstructionSets;->getDexCodeInstructionSet(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/pm/InstructionSets;->getPreferredInstructionSet()Ljava/lang/String;
 HSPLcom/android/server/pm/InstructionSets;->getPrimaryInstructionSet(Lcom/android/server/pm/PackageAbiHelper$Abis;)Ljava/lang/String;
 HSPLcom/android/server/pm/KeySetHandle;-><init>(JI)V
-HSPLcom/android/server/pm/KeySetHandle;->getId()J
 HSPLcom/android/server/pm/KeySetHandle;->getRefCountLPr()I
-HSPLcom/android/server/pm/KeySetHandle;->incrRefCountLPw()V
 HSPLcom/android/server/pm/KeySetHandle;->setRefCountLPw(I)V
 HSPLcom/android/server/pm/KeySetManagerService$PublicKeyHandle;-><init>(Lcom/android/server/pm/KeySetManagerService;JILjava/security/PublicKey;)V
 HSPLcom/android/server/pm/KeySetManagerService$PublicKeyHandle;-><init>(Lcom/android/server/pm/KeySetManagerService;JILjava/security/PublicKey;Lcom/android/server/pm/KeySetManagerService$PublicKeyHandle-IA;)V
-HSPLcom/android/server/pm/KeySetManagerService$PublicKeyHandle;->decrRefCountLPw()J
 HSPLcom/android/server/pm/KeySetManagerService$PublicKeyHandle;->getKey()Ljava/security/PublicKey;
 HSPLcom/android/server/pm/KeySetManagerService$PublicKeyHandle;->incrRefCountLPw()V
 HSPLcom/android/server/pm/KeySetManagerService;-><init>(Lcom/android/server/pm/KeySetManagerService;Lcom/android/server/utils/WatchedArrayMap;)V
 HSPLcom/android/server/pm/KeySetManagerService;-><init>(Lcom/android/server/utils/WatchedArrayMap;)V
 HSPLcom/android/server/pm/KeySetManagerService;->addDefinedKeySetsToPackageLPw(Lcom/android/server/pm/PackageSetting;Ljava/util/Map;)V
-HSPLcom/android/server/pm/KeySetManagerService;->addKeySetLPw(Landroid/util/ArraySet;)Lcom/android/server/pm/KeySetHandle;
-HSPLcom/android/server/pm/KeySetManagerService;->addPublicKeyLPw(Ljava/security/PublicKey;)J
 HSPLcom/android/server/pm/KeySetManagerService;->addRefCountsFromSavedPackagesLPw(Landroid/util/ArrayMap;)V
 HSPLcom/android/server/pm/KeySetManagerService;->addScannedPackageLPw(Lcom/android/server/pm/pkg/AndroidPackage;)V
 HSPLcom/android/server/pm/KeySetManagerService;->addSigningKeySetToPackageLPw(Lcom/android/server/pm/PackageSetting;Landroid/util/ArraySet;)V
 HSPLcom/android/server/pm/KeySetManagerService;->addUpgradeKeySetsToPackageLPw(Lcom/android/server/pm/PackageSetting;Ljava/util/Set;)V
 HSPLcom/android/server/pm/KeySetManagerService;->assertScannedPackageValid(Lcom/android/server/pm/pkg/AndroidPackage;)V
-HSPLcom/android/server/pm/KeySetManagerService;->decrementPublicKeyLPw(J)V
-HSPLcom/android/server/pm/KeySetManagerService;->getIdForPublicKeyLPr(Ljava/security/PublicKey;)J
-HSPLcom/android/server/pm/KeySetManagerService;->getIdFromKeyIdsLPr(Ljava/util/Set;)J
 HSPLcom/android/server/pm/KeySetManagerService;->getPublicKeysFromKeySetLPr(J)Landroid/util/ArraySet;
 HSPLcom/android/server/pm/KeySetManagerService;->readKeySetListLPw(Lcom/android/modules/utils/TypedXmlPullParser;)V
 HSPLcom/android/server/pm/KeySetManagerService;->readKeySetsLPw(Lcom/android/modules/utils/TypedXmlPullParser;Landroid/util/ArrayMap;)V
 HSPLcom/android/server/pm/KeySetManagerService;->readKeysLPw(Lcom/android/modules/utils/TypedXmlPullParser;)V
 HSPLcom/android/server/pm/KeySetManagerService;->readPublicKeyLPw(Lcom/android/modules/utils/TypedXmlPullParser;)V
 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;->writeKeySetsLPr(Lcom/android/modules/utils/TypedXmlSerializer;)V
+HSPLcom/android/server/pm/KeySetManagerService;->writeKeySetsLPr(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLcom/android/server/pm/KeySetManagerService;->writePublicKeysLPr(Lcom/android/modules/utils/TypedXmlSerializer;)V
 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;Ljava/lang/String;)V
 HSPLcom/android/server/pm/KnownPackages;->getKnownPackageNames(Lcom/android/server/pm/Computer;II)[Ljava/lang/String;+]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/DefaultAppProvider;Lcom/android/server/pm/DefaultAppProvider;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onPackageChanged(Ljava/lang/String;)V
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$MyPackageMonitor;->onShortcutChangedInner(Ljava/lang/String;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;->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;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->ensureShortcutPermission(IILjava/lang/String;)V
 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;
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getCallingUserId()I
-HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getLauncherActivities(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/content/pm/ParceledListSlice;Landroid/content/pm/ParceledListSlice;]Landroid/os/UserManager;Landroid/os/UserManager;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/app/admin/DevicePolicyManager;Landroid/app/admin/DevicePolicyManager;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/pm/LauncherActivityInfoInternal;Landroid/content/pm/LauncherActivityInfoInternal;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/content/Intent;Landroid/content/Intent;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getLauncherActivities(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/content/pm/ParceledListSlice;Landroid/content/pm/ParceledListSlice;]Landroid/os/UserManager;Landroid/os/UserManager;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/app/admin/DevicePolicyManager;Landroid/app/admin/DevicePolicyManager;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/pm/LauncherActivityInfoInternal;Landroid/content/pm/LauncherActivityInfoInternal;]Landroid/content/Intent;Landroid/content/Intent;
 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
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectBinderCallingPid()I
@@ -6088,13 +6501,17 @@
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectClearCallingIdentity()J
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectHasInteractAcrossUsersFullPermission(II)Z
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectRestoreCallingIdentity(J)V
-HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isManagedProfileAdmin(Landroid/os/UserHandle;Ljava/lang/String;)Z
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isEnabledProfileOf(Landroid/os/UserHandle;Landroid/os/UserHandle;Ljava/lang/String;)Z
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->isManagedProfileAdmin(Landroid/os/UserHandle;Ljava/lang/String;)Z+]Landroid/app/admin/DevicePolicyManager;Landroid/app/admin/DevicePolicyManager;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;
 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;->shouldHideFromSuggestions(Ljava/lang/String;Landroid/os/UserHandle;)Z
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->queryIntentLauncherActivities(Landroid/content/Intent;ILandroid/os/UserHandle;)Ljava/util/List;+]Ljava/util/List;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;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->resolveLauncherActivityInternal(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/UserHandle;)Landroid/content/pm/LauncherActivityInfoInternal;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->shouldHideFromSuggestions(Ljava/lang/String;Landroid/os/UserHandle;)Z+]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;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->shouldShowSyntheticActivity(Landroid/os/UserHandle;Landroid/content/pm/ApplicationInfo;)Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]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;->verifyCallingPackage(Ljava/lang/String;)V
 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/MovePackageHelper$MoveCallbacks;-><init>(Landroid/os/Looper;)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
 HSPLcom/android/server/pm/OtaDexoptService;->moveAbArtifacts(Lcom/android/server/pm/Installer;)V
 HSPLcom/android/server/pm/PackageAbiHelper$Abis;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageAbiHelper$Abis;->applyTo(Lcom/android/server/pm/PackageSetting;)V
@@ -6107,7 +6524,6 @@
 HSPLcom/android/server/pm/PackageAbiHelperImpl;->deriveNativeLibraryPaths(Lcom/android/server/pm/PackageAbiHelper$Abis;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;ZZ)Lcom/android/server/pm/PackageAbiHelper$NativeLibraryPaths;
 HSPLcom/android/server/pm/PackageAbiHelperImpl;->deriveNativeLibraryPaths(Lcom/android/server/pm/pkg/AndroidPackage;ZZLjava/io/File;)Lcom/android/server/pm/PackageAbiHelper$NativeLibraryPaths;
 HSPLcom/android/server/pm/PackageAbiHelperImpl;->derivePackageAbi(Lcom/android/server/pm/pkg/AndroidPackage;ZZLjava/lang/String;Ljava/io/File;)Landroid/util/Pair;
-HSPLcom/android/server/pm/PackageAbiHelperImpl;->getAdjustedAbiForSharedUser(Landroid/util/ArraySet;Lcom/android/server/pm/pkg/AndroidPackage;)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageAbiHelperImpl;->getBundledAppAbi(Lcom/android/server/pm/pkg/AndroidPackage;Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/pm/PackageAbiHelper$Abis;
 HSPLcom/android/server/pm/PackageAbiHelperImpl;->getBundledAppAbis(Lcom/android/server/pm/pkg/AndroidPackage;)Lcom/android/server/pm/PackageAbiHelper$Abis;
 HSPLcom/android/server/pm/PackageAbiHelperImpl;->maybeThrowExceptionForMultiArchCopy(Ljava/lang/String;I)V
@@ -6117,28 +6533,22 @@
 HSPLcom/android/server/pm/PackageDexOptimizer;-><clinit>()V
 HSPLcom/android/server/pm/PackageDexOptimizer;-><init>(Lcom/android/server/pm/Installer;Ljava/lang/Object;Landroid/content/Context;Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageDexOptimizer;-><init>(Lcom/android/server/pm/PackageDexOptimizer$Injector;Lcom/android/server/pm/Installer;Ljava/lang/Object;Landroid/content/Context;Ljava/lang/String;)V
-HPLcom/android/server/pm/PackageDexOptimizer;->acquireWakeLockLI(I)J
-HSPLcom/android/server/pm/PackageDexOptimizer;->canOptimizePackage(Lcom/android/server/pm/pkg/AndroidPackage;)Z
 HPLcom/android/server/pm/PackageDexOptimizer;->dexOptPath(Lcom/android/server/pm/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
-HPLcom/android/server/pm/PackageDexOptimizer;->getDexFlags(ZILandroid/util/SparseArray;ZLjava/lang/String;ZLcom/android/server/pm/dex/DexoptOptions;)I
-HPLcom/android/server/pm/PackageDexOptimizer;->getDexoptNeeded(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZILjava/lang/String;)I
-HPLcom/android/server/pm/PackageDexOptimizer;->performDexOpt(Lcom/android/server/pm/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
 HPLcom/android/server/pm/PackageDexOptimizer;->performDexOptLI(Lcom/android/server/pm/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
-HPLcom/android/server/pm/PackageDexOptimizer;->printDexoptFlags(I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageHandler;-><init>(Landroid/os/Looper;Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageInstallerService$1;-><init>()V
 HSPLcom/android/server/pm/PackageInstallerService;-><clinit>()V
-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;
 HPLcom/android/server/pm/PackageInstallerSession;->doWriteInternal(Ljava/lang/String;JJLandroid/os/ParcelFileDescriptor;)Landroid/os/ParcelFileDescriptor;
-HPLcom/android/server/pm/PackageInstallerSession;->dumpLocked(Lcom/android/internal/util/IndentingPrintWriter;)V
-HPLcom/android/server/pm/PackageInstallerSession;->generateInfoInternal(ZZ)Landroid/content/pm/PackageInstaller$SessionInfo;
-HPLcom/android/server/pm/PackageInstallerSession;->validateApkInstallLocked()Landroid/content/pm/parsing/PackageLite;
+HSPLcom/android/server/pm/PackageInstallerSession;->dumpLocked(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/pm/PackageInstallerSession;->generateInfoInternal(ZZ)Landroid/content/pm/PackageInstaller$SessionInfo;+]Lcom/android/server/pm/PackageInstallerSession;Lcom/android/server/pm/PackageInstallerSession;]Landroid/content/pm/PackageInstaller$SessionParams;Landroid/content/pm/PackageInstaller$SessionParams;]Landroid/content/pm/PackageInstaller$SessionInfo;Landroid/content/pm/PackageInstaller$SessionInfo;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
+HSPLcom/android/server/pm/PackageInstallerSession;->getChildSessionIdsLocked()[I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/pm/PackageInstallerSession;->validateApkInstallLocked()Landroid/content/pm/parsing/PackageLite;
 HSPLcom/android/server/pm/PackageInstallerSession;->write(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/io/File;)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;->getAliases()Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/PackageKeySetData;->getProperSigningKeySet()J
-HSPLcom/android/server/pm/PackageKeySetData;->isUsingUpgradeKeySets()Z
 HSPLcom/android/server/pm/PackageKeySetData;->removeAllDefinedKeySets()V
 HSPLcom/android/server/pm/PackageKeySetData;->removeAllUpgradeKeySets()V
 HSPLcom/android/server/pm/PackageKeySetData;->setAliases(Ljava/util/Map;)V
@@ -6151,29 +6561,28 @@
 HPLcom/android/server/pm/PackageManagerInternalBase;->canAccessInstantApps(II)Z+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HPLcom/android/server/pm/PackageManagerInternalBase;->canQueryPackage(ILjava/lang/String;)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/PackageManagerInternalBase;->filterAppAccess(Ljava/lang/String;IIZ)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;->forEachPackage(Ljava/util/function/Consumer;)V
 HSPLcom/android/server/pm/PackageManagerInternalBase;->forEachPackageState(Ljava/util/function/Consumer;)V
+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/ComputerEngine;
-HSPLcom/android/server/pm/PackageManagerInternalBase;->getDisabledSystemPackage(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageStateInternal;
-HSPLcom/android/server/pm/PackageManagerInternalBase;->getDistractingPackageRestrictions(Ljava/lang/String;I)I
+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;->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;->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;
-HSPLcom/android/server/pm/PackageManagerInternalBase;->getPackage(I)Lcom/android/server/pm/pkg/AndroidPackage;+]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(Ljava/lang/String;)Lcom/android/server/pm/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;->getPackage(I)Lcom/android/server/pm/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/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;->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/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
-HSPLcom/android/server/pm/PackageManagerInternalBase;->getPackageTargetSdkVersion(Ljava/lang/String;)I
+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;
+HPLcom/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;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getProcessesForUid(I)Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getSharedUserApi(I)Lcom/android/server/pm/pkg/SharedUserApi;
-HSPLcom/android/server/pm/PackageManagerInternalBase;->getSharedUserPackages(I)Landroid/util/ArraySet;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getSharedUserPackagesForPackage(Ljava/lang/String;I)[Ljava/lang/String;
 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;
 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;
+HSPLcom/android/server/pm/PackageManagerInternalBase;->isCallerInstallerOfRecord(Lcom/android/server/pm/pkg/AndroidPackage;I)Z
 HSPLcom/android/server/pm/PackageManagerInternalBase;->isInstantApp(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/PackageManagerInternalBase;->isPackageEphemeral(ILjava/lang/String;)Z+]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;->isPackageFrozen(Ljava/lang/String;II)Z
+HSPLcom/android/server/pm/PackageManagerInternalBase;->isPackageFrozen(Ljava/lang/String;II)Z+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HPLcom/android/server/pm/PackageManagerInternalBase;->isPackageStateProtected(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/PackageManagerInternalBase;->isPackageSuspended(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/PackageManagerInternalBase;->isPermissionsReviewRequired(Ljava/lang/String;I)Z+]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
@@ -6185,7 +6594,6 @@
 HSPLcom/android/server/pm/PackageManagerInternalBase;->snapshot()Lcom/android/server/pm/Computer;+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->snapshot()Lcom/android/server/pm/snapshot/PackageDataSnapshot;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda11;-><init>()V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda11;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 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;
@@ -6229,9 +6637,6 @@
 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>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda49;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda51;-><init>(Lcom/android/server/pm/verify/domain/DomainVerificationService;Landroid/os/Handler;Lcom/android/server/pm/PackageManagerTracedLock;)V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda51;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda52;-><init>()V
 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;
@@ -6244,10 +6649,6 @@
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda57;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda57;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda60;-><init>(Lcom/android/server/pm/PackageManagerService;)V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda61;-><init>(Lcom/android/server/pm/PackageManagerService;)V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda64;-><init>(Landroid/content/Context;)V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda65;-><init>()V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda67;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda9;->run()V
 HSPLcom/android/server/pm/PackageManagerService$1;-><init>(Lcom/android/server/pm/PackageManagerService;)V
@@ -6259,24 +6660,24 @@
 HSPLcom/android/server/pm/PackageManagerService$DefaultSystemWrapper;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$DefaultSystemWrapper;-><init>(Lcom/android/server/pm/PackageManagerService$DefaultSystemWrapper-IA;)V
 HSPLcom/android/server/pm/PackageManagerService$DefaultSystemWrapper;->disablePackageCaches()V
-HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->checkPackageStartable(Ljava/lang/String;I)V
+HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->checkPackageStartable(Ljava/lang/String;I)V+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
 HPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->getSystemAvailableFeatures()Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->isProtectedBroadcast(Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->notifyDexLoad(Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;)V
+HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->logAppProcessStartIfNeeded(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->notifyDexLoad(Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;)V+]Lcom/android/server/pm/PackageManagerLocal$FilteredSnapshot;Lcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl;]Lcom/android/server/art/DexUseManagerLocal;Lcom/android/server/art/DexUseManagerLocal;]Lcom/android/server/pm/PackageManagerLocal;Lcom/android/server/pm/local/PackageManagerLocalImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Landroid/os/UserHandle;Landroid/os/UserHandle;]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;->notifyPackageUse(Ljava/lang/String;I)V
+HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->notifyPackagesReplacedReceived([Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->setComponentEnabledSetting(Landroid/content/ComponentName;III)V
-HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->setComponentEnabledSetting(Landroid/content/ComponentName;IIILjava/lang/String;)V+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;-><init>(Lcom/android/server/pm/PackageManagerService;)V
-HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getIncrementalStatesInfo(Ljava/lang/String;II)Landroid/content/pm/IncrementalStatesInfo;
+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;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPermissionManager()Lcom/android/server/pm/permission/PermissionManagerServiceInternal;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getProtectedPackages()Lcom/android/server/pm/ProtectedPackages;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getResolveIntentHelper()Lcom/android/server/pm/ResolveIntentHelper;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getSuspendPackageHelper()Lcom/android/server/pm/SuspendPackageHelper;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->hasSignatureCapability(III)Z
-HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPlatformSigned(Ljava/lang/String;)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;->isSameApp(Ljava/lang/String;II)Z+]Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isSameApp(Ljava/lang/String;JII)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;->notifyPackageUse(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->writePermissionSettings([IZ)V+]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;
 HSPLcom/android/server/pm/PackageManagerService$Snapshot;-><init>(Lcom/android/server/pm/PackageManagerService;I)V
@@ -6286,7 +6687,6 @@
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$4L15KVoRULL8JCrWB2_8RA_pd4E(Landroid/content/Context;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/DefaultAppProvider;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$8VxPcQ4QwE183NQvLiWYRu8h0H8(Landroid/content/Context;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$A9jIin0f1zoD9Pcc_Y-dAgMMVzE(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/BackgroundDexOptService;
-HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$EbaWy0EoYgPF3EAHnptqfpUFo2Q(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$FH_QW3FImo1IhpXAixX5YKWsQTo(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/dex/DynamicCodeLogger;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$GqL8sm0a9g6ECsLoCnqjkeD_AoY(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Landroid/os/incremental/IncrementalManager;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$J3bGyy16WyUHu1eawbMs-EmH-Go(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/permission/LegacyPermissionManagerInternal;
@@ -6300,18 +6700,14 @@
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$lTluq-XjzuNQDfuQ8Q__G61l7ws(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/PackageDexOptimizer;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$mrZItwgsq620jZ75v1Rzj0uBssk(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$pCLNqmjsJp36alC6sG8GNqU_jZk(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/parsing/PackageParser2;
-HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$rRpOlEOGHqOf4x-LidPdv1FePOQ(ILjava/util/function/Consumer;Lcom/android/server/pm/pkg/PackageStateInternal;)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$s0FpS7OMs2DXekbReqg9Fhh0dsk(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/dex/DexManager;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$toRg0dfI9-7agMSSgZ_NxZn9ws4(Landroid/content/Context;Lcom/android/server/pm/Installer;Ljava/lang/Object;Lcom/android/server/pm/PackageManagerTracedLock;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$ums9YrGaf1Q5aY7FKIYPhb39vyw(Landroid/content/Context;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/CrossProfileIntentFilterHelper;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$yTyDl_Ki2ilKmJCBq0xuESmQ62g(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/ApexManager;
 HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmAndroidApplication(Lcom/android/server/pm/PackageManagerService;)Landroid/content/pm/ApplicationInfo;
-HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmFrozenPackagesSnapshot(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/utils/SnapshotCache;
 HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmInstantAppInstallerInfo(Lcom/android/server/pm/PackageManagerService;)Landroid/content/pm/ResolveInfo;
 HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmInstrumentation(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/utils/WatchedArrayMap;
 HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmInstrumentationSnapshot(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/utils/SnapshotCache;
-HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmIsolatedOwnersSnapshot(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/utils/SnapshotCache;
-HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmPackagesSnapshot(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/utils/SnapshotCache;
 HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmResolveActivity(Lcom/android/server/pm/PackageManagerService;)Landroid/content/pm/ActivityInfo;
 HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmResolveIntentHelper(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/ResolveIntentHelper;
 HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmSharedLibraries(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/SharedLibrariesImpl;
@@ -6323,44 +6719,30 @@
 HSPLcom/android/server/pm/PackageManagerService;->addAllPackageProperties(Lcom/android/server/pm/pkg/AndroidPackage;)V
 HPLcom/android/server/pm/PackageManagerService;->addCrossProfileIntentFilter(Lcom/android/server/pm/Computer;Lcom/android/server/pm/WatchedIntentFilter;Ljava/lang/String;III)V
 HSPLcom/android/server/pm/PackageManagerService;->applyUpdatedSystemOverlayPaths()V
-HSPLcom/android/server/pm/PackageManagerService;->checkPackageStartable(Lcom/android/server/pm/Computer;Ljava/lang/String;I)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;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I+]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;
 HSPLcom/android/server/pm/PackageManagerService;->createLiveComputer()Lcom/android/server/pm/ComputerLocked;
-HSPLcom/android/server/pm/PackageManagerService;->ensureSystemPackageName(Lcom/android/server/pm/Computer;Ljava/lang/String;)Ljava/lang/String;
-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$$ExternalSyntheticLambda11;,Lcom/android/server/policy/PermissionPolicyService$$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$$ExternalSyntheticLambda6;
 HSPLcom/android/server/pm/PackageManagerService;->forEachPackageState(Landroid/util/ArrayMap;Ljava/util/function/Consumer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Consumer;megamorphic_types
 HSPLcom/android/server/pm/PackageManagerService;->forEachPackageState(Lcom/android/server/pm/Computer;Ljava/util/function/Consumer;)V
 HSPLcom/android/server/pm/PackageManagerService;->getAppInstallDir()Ljava/io/File;
-HSPLcom/android/server/pm/PackageManagerService;->getCacheDir()Ljava/io/File;
 HSPLcom/android/server/pm/PackageManagerService;->getCoreAndroidApplication()Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/pm/PackageManagerService;->getDefParseFlags()I
 HSPLcom/android/server/pm/PackageManagerService;->getDefaultAppProvider()Lcom/android/server/pm/DefaultAppProvider;
 HSPLcom/android/server/pm/PackageManagerService;->getDexManager()Lcom/android/server/pm/dex/DexManager;
 HSPLcom/android/server/pm/PackageManagerService;->getKnownPackageNamesInternal(Lcom/android/server/pm/Computer;II)[Ljava/lang/String;+]Lcom/android/server/pm/KnownPackages;Lcom/android/server/pm/KnownPackages;
-HSPLcom/android/server/pm/PackageManagerService;->getPackageFromComponentString(I)Ljava/lang/String;
-HSPLcom/android/server/pm/PackageManagerService;->getPackageSettingForMutation(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageManagerService;->getPlatformPackage()Lcom/android/server/pm/pkg/AndroidPackage;
-HSPLcom/android/server/pm/PackageManagerService;->getRequiredButNotReallyRequiredVerifiersLPr(Lcom/android/server/pm/Computer;)[Ljava/lang/String;
-HSPLcom/android/server/pm/PackageManagerService;->getRequiredInstallerLPr(Lcom/android/server/pm/Computer;)Ljava/lang/String;
-HSPLcom/android/server/pm/PackageManagerService;->getRequiredPermissionControllerLPr(Lcom/android/server/pm/Computer;)Ljava/lang/String;
-HSPLcom/android/server/pm/PackageManagerService;->getRequiredUninstallerLPr(Lcom/android/server/pm/Computer;)Ljava/lang/String;
-HSPLcom/android/server/pm/PackageManagerService;->getRetailDemoPackageName()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getSafeMode()Z
 HSPLcom/android/server/pm/PackageManagerService;->getSdkVersion()I
 HSPLcom/android/server/pm/PackageManagerService;->getSettingsVersionForPackage(Lcom/android/server/pm/pkg/AndroidPackage;)Lcom/android/server/pm/Settings$VersionInfo;
-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;
 HSPLcom/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/InstantAppRegistry;Lcom/android/server/pm/InstantAppRegistry;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
+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/AndroidPackage;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;->hasSystemFeature(Ljava/lang/String;I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/PackageManagerService;->invalidatePackageInfoCache()V
 HSPLcom/android/server/pm/PackageManagerService;->isDeviceUpgrading()Z
 HSPLcom/android/server/pm/PackageManagerService;->isExpectingBetter(Ljava/lang/String;)Z
-HSPLcom/android/server/pm/PackageManagerService;->isFirstBoot()Z
 HSPLcom/android/server/pm/PackageManagerService;->isPreNMR1Upgrade()Z
-HSPLcom/android/server/pm/PackageManagerService;->lambda$forEachInstalledPackage$60(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$$ExternalSyntheticLambda5;,Lcom/android/server/policy/role/RoleServicePlatformHelperImpl$$ExternalSyntheticLambda0;,Lcom/android/server/people/data/DataManager$$ExternalSyntheticLambda12;
-HSPLcom/android/server/pm/PackageManagerService;->lambda$getDevicePolicyManagementRoleHolderPackageName$49(I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$10(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$main$11(Landroid/content/Context;Lcom/android/server/pm/Installer;Ljava/lang/Object;Lcom/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$12(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;
@@ -6384,8 +6766,7 @@
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$38(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/SharedLibrariesImpl;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$39(Landroid/content/Context;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/CrossProfileIntentFilterHelper;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$9(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/resolution/ComponentResolver;
-HSPLcom/android/server/pm/PackageManagerService;->lambda$setEnabledOverlayPackages$59(ILandroid/util/ArrayMap;Ljava/util/Set;ILandroid/util/ArrayMap;Lcom/android/server/pm/pkg/mutate/PackageStateMutator;)V
-HSPLcom/android/server/pm/PackageManagerService;->lambda$setPackageStoppedState$58(Ljava/lang/String;I)V
+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
 HSPLcom/android/server/pm/PackageManagerService;->main(Landroid/content/Context;Lcom/android/server/pm/Installer;Lcom/android/server/pm/verify/domain/DomainVerificationService;Z)Lcom/android/server/pm/PackageManagerService;
 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;
 HSPLcom/android/server/pm/PackageManagerService;->onChange(Lcom/android/server/utils/Watchable;)V+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
@@ -6397,8 +6778,8 @@
 HSPLcom/android/server/pm/PackageManagerService;->scheduleWritePackageRestrictions(I)V
 HSPLcom/android/server/pm/PackageManagerService;->scheduleWriteSettings()V
 HSPLcom/android/server/pm/PackageManagerService;->setEnabledOverlayPackages(ILandroid/util/ArrayMap;Ljava/util/Set;Ljava/util/Set;)V
-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
-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/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/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Ljava/util/List;Ljava/util/ImmutableCollections$List12;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]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;->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/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/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]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;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/PackageManagerService;->setPackageStoppedState(Lcom/android/server/pm/Computer;Ljava/lang/String;ZI)V+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]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/pkg/AndroidPackage;Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/PackageManagerService;->snapshotComputer()Lcom/android/server/pm/Computer;+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
@@ -6410,8 +6791,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$$ExternalSyntheticLambda46;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda36;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda39;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda49;
-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$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;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$$ExternalSyntheticLambda36;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda39;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda49;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda46;
 HSPLcom/android/server/pm/PackageManagerServiceInjector;->bootstrap(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageManagerServiceInjector;->getAbiHelper()Lcom/android/server/pm/PackageAbiHelper;
 HSPLcom/android/server/pm/PackageManagerServiceInjector;->getActivityManagerInternal()Landroid/app/ActivityManagerInternal;
@@ -6453,15 +6833,13 @@
 HSPLcom/android/server/pm/PackageManagerServiceUtils$1;-><init>()V
 HSPLcom/android/server/pm/PackageManagerServiceUtils$1;->accept(Ljava/io/File;Ljava/lang/String;)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;]Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]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;]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;]Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;]Landroid/content/pm/ComponentInfo;Landroid/content/pm/ServiceInfo;,Landroid/content/pm/ActivityInfo;
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->canJoinSharedUserId(Ljava/lang/String;Landroid/content/pm/SigningDetails;Lcom/android/server/pm/SharedUserSetting;I)Z
-HSPLcom/android/server/pm/PackageManagerServiceUtils;->checkISA(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->comparePackageSignatures(Lcom/android/server/pm/PackageSetting;[Landroid/content/pm/Signature;)Z
-HSPLcom/android/server/pm/PackageManagerServiceUtils;->compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I+]Landroid/content/pm/Signature;Landroid/content/pm/Signature;
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->compressedFileExists(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->deriveAbiOverride(Ljava/lang/String;)Ljava/lang/String;
-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
+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;
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->getCompressedFiles(Ljava/lang/String;)[Ljava/io/File;
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->getLastModifiedTime(Lcom/android/server/pm/pkg/AndroidPackage;)J
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->getSettingsProblemFile()Ljava/io/File;
@@ -6480,18 +6858,19 @@
 HSPLcom/android/server/pm/PackageSetting$1;-><init>(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Lcom/android/server/utils/Watchable;)V
 HSPLcom/android/server/pm/PackageSetting$1;->createSnapshot()Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;-><init>(Lcom/android/server/pm/PackageSetting;)V
-HSPLcom/android/server/pm/PackageSetting;-><init>(Lcom/android/server/pm/PackageSetting;Z)V
+HSPLcom/android/server/pm/PackageSetting;-><init>(Lcom/android/server/pm/PackageSetting;Z)V+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JIII[Ljava/lang/String;[J[Ljava/lang/String;[JLjava/util/Map;Ljava/util/UUID;)V
-HSPLcom/android/server/pm/PackageSetting;->copyMimeGroups(Ljava/util/Map;)V
-HSPLcom/android/server/pm/PackageSetting;->copyPackageSetting(Lcom/android/server/pm/PackageSetting;Z)V+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/pkg/PackageUserStateImpl;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;
+HSPLcom/android/server/pm/PackageSetting;->copyMimeGroups(Ljava/util/Map;)V+]Ljava/util/Map;Landroid/util/ArrayMap;,Lcom/android/server/pm/Settings$KeySetToValueMap;
+HSPLcom/android/server/pm/PackageSetting;->copyPackageSetting(Lcom/android/server/pm/PackageSetting;Z)V+]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;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;
 HSPLcom/android/server/pm/PackageSetting;->disableComponentLPw(Ljava/lang/String;I)Z
-HSPLcom/android/server/pm/PackageSetting;->enableComponentLPw(Ljava/lang/String;I)Z
+HSPLcom/android/server/pm/PackageSetting;->enableComponentLPw(Ljava/lang/String;I)Z+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]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;->getAndroidPackage()Lcom/android/server/pm/pkg/AndroidPackage;+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->getApexModuleName()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageSetting;->getAppId()I
+HSPLcom/android/server/pm/PackageSetting;->getAppMetadataFilePath()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageSetting;->getCategoryOverride()I
 HSPLcom/android/server/pm/PackageSetting;->getCpuAbiOverride()Ljava/lang/String;
-HSPLcom/android/server/pm/PackageSetting;->getCurrentEnabledStateLPr(Ljava/lang/String;I)I
+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;->getInstallSource()Lcom/android/server/pm/InstallSource;
@@ -6502,6 +6881,7 @@
 HSPLcom/android/server/pm/PackageSetting;->getLastUpdateTime()J
 HSPLcom/android/server/pm/PackageSetting;->getLegacyNativeLibraryPath()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageSetting;->getLegacyPermissionState()Lcom/android/server/pm/permission/LegacyPermissionState;
+HSPLcom/android/server/pm/PackageSetting;->getLoadingCompletedTime()J
 HSPLcom/android/server/pm/PackageSetting;->getLoadingProgress()F
 HSPLcom/android/server/pm/PackageSetting;->getMimeGroups()Ljava/util/Map;
 HSPLcom/android/server/pm/PackageSetting;->getPackageName()Ljava/lang/String;
@@ -6511,14 +6891,14 @@
 HSPLcom/android/server/pm/PackageSetting;->getPkgState()Lcom/android/server/pm/pkg/PackageStateUnserialized;
 HSPLcom/android/server/pm/PackageSetting;->getPrimaryCpuAbi()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageSetting;->getPrimaryCpuAbiLegacy()Ljava/lang/String;
-HSPLcom/android/server/pm/PackageSetting;->getRealName()Ljava/lang/String;
-HSPLcom/android/server/pm/PackageSetting;->getSeInfo()Ljava/lang/String;
+HSPLcom/android/server/pm/PackageSetting;->getSeInfo()Ljava/lang/String;+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;
 HSPLcom/android/server/pm/PackageSetting;->getSecondaryCpuAbi()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageSetting;->getSecondaryCpuAbiLegacy()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageSetting;->getSharedLibraryDependencies()Ljava/util/List;
 HSPLcom/android/server/pm/PackageSetting;->getSharedUserAppId()I
 HSPLcom/android/server/pm/PackageSetting;->getSignatures()Lcom/android/server/pm/PackageSignatures;
 HSPLcom/android/server/pm/PackageSetting;->getSigningDetails()Landroid/content/pm/SigningDetails;
+HPLcom/android/server/pm/PackageSetting;->getStateForUser(Landroid/os/UserHandle;)Lcom/android/server/pm/pkg/PackageUserState;
 HSPLcom/android/server/pm/PackageSetting;->getTransientState()Lcom/android/server/pm/pkg/PackageStateUnserialized;
 HSPLcom/android/server/pm/PackageSetting;->getUserStates()Landroid/util/SparseArray;
 HSPLcom/android/server/pm/PackageSetting;->getUsesLibraryFiles()Ljava/util/List;
@@ -6530,24 +6910,22 @@
 HSPLcom/android/server/pm/PackageSetting;->getVirtualPreload(I)Z
 HSPLcom/android/server/pm/PackageSetting;->getVolumeUuid()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageSetting;->hasSharedUser()Z
+HSPLcom/android/server/pm/PackageSetting;->isApex()Z
 HSPLcom/android/server/pm/PackageSetting;->isForceQueryableOverride()Z
-HSPLcom/android/server/pm/PackageSetting;->isHiddenUntilInstalled()Z
 HSPLcom/android/server/pm/PackageSetting;->isInstallPermissionsFixed()Z
 HSPLcom/android/server/pm/PackageSetting;->isLoading()Z
-HSPLcom/android/server/pm/PackageSetting;->isOem()Z
 HSPLcom/android/server/pm/PackageSetting;->isPrivileged()Z+]Lcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->isProduct()Z
 HSPLcom/android/server/pm/PackageSetting;->isSystem()Z+]Lcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->isSystemExt()Z
-HSPLcom/android/server/pm/PackageSetting;->isUpdateAvailable()Z
 HSPLcom/android/server/pm/PackageSetting;->isUpdatedSystemApp()Z+]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;
 HSPLcom/android/server/pm/PackageSetting;->isVendor()Z+]Lcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->makeCache()Lcom/android/server/utils/SnapshotCache;
-HSPLcom/android/server/pm/PackageSetting;->modifyUserState(I)Lcom/android/server/pm/pkg/PackageUserStateImpl;
-HSPLcom/android/server/pm/PackageSetting;->modifyUserStateComponents(IZZ)Lcom/android/server/pm/pkg/PackageUserStateImpl;
+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;
 HSPLcom/android/server/pm/PackageSetting;->readUserState(I)Lcom/android/server/pm/pkg/PackageUserStateInternal;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/pm/PackageSetting;->setApexModuleName(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setAppId(I)Lcom/android/server/pm/PackageSetting;
+HSPLcom/android/server/pm/PackageSetting;->setAppMetadataFilePath(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setCategoryOverride(I)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setCpuAbiOverride(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setDomainSetId(Ljava/util/UUID;)Lcom/android/server/pm/PackageSetting;
@@ -6556,13 +6934,12 @@
 HSPLcom/android/server/pm/PackageSetting;->setForceQueryableOverride(Z)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setInstallPermissionsFixed(Z)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setInstallSource(Lcom/android/server/pm/InstallSource;)Lcom/android/server/pm/PackageSetting;
-HSPLcom/android/server/pm/PackageSetting;->setInstalled(ZI)V
 HSPLcom/android/server/pm/PackageSetting;->setIsOrphaned(Z)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setLastModifiedTime(J)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setLastUpdateTime(J)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setLegacyNativeLibraryPath(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
+HSPLcom/android/server/pm/PackageSetting;->setLoadingCompletedTime(J)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setLoadingProgress(F)Lcom/android/server/pm/PackageSetting;
-HSPLcom/android/server/pm/PackageSetting;->setLongVersionCode(J)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setPath(Ljava/io/File;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setPkg(Lcom/android/server/pm/pkg/AndroidPackage;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setPkgStateLibraryFiles(Ljava/util/Collection;)Lcom/android/server/pm/PackageSetting;
@@ -6570,9 +6947,9 @@
 HSPLcom/android/server/pm/PackageSetting;->setSecondaryCpuAbi(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setSharedUserAppId(I)V
 HSPLcom/android/server/pm/PackageSetting;->setSigningDetails(Landroid/content/pm/SigningDetails;)Lcom/android/server/pm/PackageSetting;
+HSPLcom/android/server/pm/PackageSetting;->setStopped(ZI)V
 HSPLcom/android/server/pm/PackageSetting;->setUpdateAvailable(Z)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setUpdateOwnerPackage(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
-HSPLcom/android/server/pm/PackageSetting;->setUserState(IJIZZZZILandroid/util/ArrayMap;ZZLjava/lang/String;Landroid/util/ArraySet;Landroid/util/ArraySet;IILjava/lang/String;Ljava/lang/String;J)V
 HSPLcom/android/server/pm/PackageSetting;->setUsesSdkLibraries([Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setUsesSdkLibrariesVersionsMajor([J)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->setUsesStaticLibraries([Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
@@ -6580,21 +6957,15 @@
 HSPLcom/android/server/pm/PackageSetting;->setVolumeUuid(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->snapshot()Lcom/android/server/pm/PackageSetting;+]Lcom/android/server/utils/SnapshotCache;Lcom/android/server/pm/PackageSetting$1;
 HSPLcom/android/server/pm/PackageSetting;->snapshot()Ljava/lang/Object;+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;
-HSPLcom/android/server/pm/PackageSetting;->toString()Ljava/lang/String;
+HSPLcom/android/server/pm/PackageSetting;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/pm/PackageSetting;->updateFrom(Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/PackageSetting;->updateMimeGroups(Ljava/util/Set;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSignatures;-><init>()V
 HSPLcom/android/server/pm/PackageSignatures;->readCertsListXml(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/util/ArrayList;Ljava/util/ArrayList;IZLandroid/content/pm/SigningDetails$Builder;)I
 HSPLcom/android/server/pm/PackageSignatures;->readXml(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/util/ArrayList;)V
-HSPLcom/android/server/pm/PackageSignatures;->writeCertsListXml(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/util/ArrayList;[Landroid/content/pm/Signature;Z)V+]Landroid/content/pm/Signature;Landroid/content/pm/Signature;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/pm/PackageSignatures;->writeXml(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;Ljava/util/ArrayList;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;]Lcom/android/server/pm/PackageSignatures;Lcom/android/server/pm/PackageSignatures;
+HSPLcom/android/server/pm/PackageSignatures;->writeCertsListXml(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/util/ArrayList;[Landroid/content/pm/Signature;Z)V+]Landroid/content/pm/Signature;Landroid/content/pm/Signature;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/pm/PackageSignatures;->writeXml(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;Ljava/util/ArrayList;)V+]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;]Lcom/android/server/pm/PackageSignatures;Lcom/android/server/pm/PackageSignatures;
 HSPLcom/android/server/pm/PackageUsage;-><init>()V
-HSPLcom/android/server/pm/PackageUsage;->parseAsLong(Ljava/lang/String;)J
-HSPLcom/android/server/pm/PackageUsage;->readInternal(Ljava/lang/Object;)V
-HSPLcom/android/server/pm/PackageUsage;->readInternal(Ljava/util/Map;)V
-HSPLcom/android/server/pm/PackageUsage;->readLine(Ljava/io/InputStream;Ljava/lang/StringBuilder;)Ljava/lang/String;
-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
 HSPLcom/android/server/pm/ParallelPackageParser$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/ParallelPackageParser;Ljava/io/File;I)V
 HSPLcom/android/server/pm/ParallelPackageParser$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/pm/ParallelPackageParser$ParseResult;-><init>()V
@@ -6630,16 +7001,17 @@
 HSPLcom/android/server/pm/PreferredActivity;-><init>(Lcom/android/modules/utils/TypedXmlPullParser;)V
 HSPLcom/android/server/pm/PreferredActivity;->makeCache()Lcom/android/server/utils/SnapshotCache;
 HSPLcom/android/server/pm/PreferredActivity;->onReadTag(Ljava/lang/String;Lcom/android/modules/utils/TypedXmlPullParser;)Z
+HSPLcom/android/server/pm/PreferredActivity;->writeToXml(Lcom/android/modules/utils/TypedXmlSerializer;Z)V+]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Lcom/android/server/pm/PreferredComponent;Lcom/android/server/pm/PreferredComponent;
 HSPLcom/android/server/pm/PreferredActivityHelper;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 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
 HSPLcom/android/server/pm/PreferredComponent;-><init>(Lcom/android/server/pm/PreferredComponent$Callbacks;Lcom/android/modules/utils/TypedXmlPullParser;)V
 HSPLcom/android/server/pm/PreferredComponent;->getParseError()Ljava/lang/String;
-HSPLcom/android/server/pm/PreferredComponent;->sameSet([Landroid/content/ComponentName;)Z
-HSPLcom/android/server/pm/PreferredComponent;->writeToXml(Lcom/android/modules/utils/TypedXmlSerializer;Z)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;,Lcom/android/internal/util/ArtBinaryXmlSerializer;
+HSPLcom/android/server/pm/PreferredComponent;->sameSet([Landroid/content/ComponentName;)Z+]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLcom/android/server/pm/PreferredComponent;->writeToXml(Lcom/android/modules/utils/TypedXmlSerializer;Z)V
 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;-><init>()V
 HSPLcom/android/server/pm/PreferredIntentResolver;->getIntentFilter(Lcom/android/server/pm/PreferredActivity;)Landroid/content/IntentFilter;
-HSPLcom/android/server/pm/PreferredIntentResolver;->getIntentFilter(Ljava/lang/Object;)Landroid/content/IntentFilter;
+HSPLcom/android/server/pm/PreferredIntentResolver;->getIntentFilter(Ljava/lang/Object;)Landroid/content/IntentFilter;+]Lcom/android/server/pm/PreferredIntentResolver;Lcom/android/server/pm/PreferredIntentResolver;
 HSPLcom/android/server/pm/PreferredIntentResolver;->makeCache()Lcom/android/server/utils/SnapshotCache;
 HSPLcom/android/server/pm/PreferredIntentResolver;->newArray(I)[Lcom/android/server/pm/PreferredActivity;
 HSPLcom/android/server/pm/PreferredIntentResolver;->newArray(I)[Ljava/lang/Object;
@@ -6650,7 +7022,7 @@
 HSPLcom/android/server/pm/ProtectedPackages;->hasProtectedPackages(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/pm/ProtectedPackages;->isOwnerProtectedPackage(ILjava/lang/String;)Z+]Lcom/android/server/pm/ProtectedPackages;Lcom/android/server/pm/ProtectedPackages;
 HSPLcom/android/server/pm/ProtectedPackages;->isPackageProtectedForUser(ILjava/lang/String;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Set;Landroid/util/ArraySet;
-HSPLcom/android/server/pm/ProtectedPackages;->isPackageStateProtected(ILjava/lang/String;)Z
+HSPLcom/android/server/pm/ProtectedPackages;->isPackageStateProtected(ILjava/lang/String;)Z+]Lcom/android/server/pm/ProtectedPackages;Lcom/android/server/pm/ProtectedPackages;
 HSPLcom/android/server/pm/ProtectedPackages;->isProtectedPackage(ILjava/lang/String;)Z+]Lcom/android/server/pm/ProtectedPackages;Lcom/android/server/pm/ProtectedPackages;
 HSPLcom/android/server/pm/QueryIntentActivitiesResult;-><init>(ZZLjava/util/List;)V
 HSPLcom/android/server/pm/ReconcilePackageUtils;->isCompatSignatureUpdateNeeded(Lcom/android/server/pm/Settings$VersionInfo;)Z
@@ -6662,31 +7034,26 @@
 HSPLcom/android/server/pm/RemovePackageHelper;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/AppDataHelper;)V
 HSPLcom/android/server/pm/ResilientAtomicFile;-><init>(Ljava/io/File;Ljava/io/File;Ljava/io/File;ILjava/lang/String;Lcom/android/server/pm/ResilientAtomicFile$ReadEventLogger;)V
 HSPLcom/android/server/pm/ResilientAtomicFile;->close()V
-HSPLcom/android/server/pm/ResilientAtomicFile;->finalizeOutStream(Ljava/io/FileOutputStream;)V
 HSPLcom/android/server/pm/ResilientAtomicFile;->finishWrite(Ljava/io/FileOutputStream;)V
 HSPLcom/android/server/pm/ResilientAtomicFile;->openRead()Ljava/io/FileInputStream;
 HSPLcom/android/server/pm/ResilientAtomicFile;->startWrite()Ljava/io/FileOutputStream;
 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;Landroid/os/Handler;)V
-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$$ExternalSyntheticLambda60;]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;
+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$$ExternalSyntheticLambda60;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Ljava/util/List;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;->queryIntentReceiversInternal(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JII)Ljava/util/List;
 HSPLcom/android/server/pm/ResolveIntentHelper;->queryIntentReceiversInternal(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JIIZ)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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/pm/ResolveIntentHelper;->resolveIntentInternal(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JJIZI)Landroid/content/pm/ResolveInfo;
 HSPLcom/android/server/pm/ResolveIntentHelper;->resolveIntentInternal(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JJIZIZI)Landroid/content/pm/ResolveInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/ResolveIntentHelper;Lcom/android/server/pm/ResolveIntentHelper;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
-HSPLcom/android/server/pm/ResolveIntentHelper;->resolveServiceInternal(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JII)Landroid/content/pm/ResolveInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/ResolveIntentHelper;->resolveServiceInternal(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JII)Landroid/content/pm/ResolveInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/RestrictionsSet;-><init>()V
 HSPLcom/android/server/pm/RestrictionsSet;->getRestrictions(I)Landroid/os/Bundle;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/pm/RestrictionsSet;->getRestrictionsNonNull(I)Landroid/os/Bundle;
-HSPLcom/android/server/pm/RestrictionsSet;->getUserIds()Landroid/util/IntArray;
 HSPLcom/android/server/pm/RestrictionsSet;->updateRestrictions(ILandroid/os/Bundle;)Z
 HSPLcom/android/server/pm/SELinuxMMAC;-><clinit>()V
-HSPLcom/android/server/pm/SELinuxMMAC;->getSeInfo(Lcom/android/server/pm/pkg/AndroidPackage;ZI)Ljava/lang/String;
 HSPLcom/android/server/pm/SELinuxMMAC;->getSeInfo(Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/SharedUserApi;Lcom/android/server/compat/PlatformCompat;)Ljava/lang/String;
 HSPLcom/android/server/pm/SELinuxMMAC;->getTargetSdkVersionForSeInfo(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/SharedUserApi;Lcom/android/server/compat/PlatformCompat;)I
 HSPLcom/android/server/pm/SELinuxMMAC;->readInstallPolicy()Z
 HSPLcom/android/server/pm/SELinuxMMAC;->readSeinfo(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/pm/SELinuxMMAC;->readSignerOrThrow(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/pm/Policy;
 HSPLcom/android/server/pm/ScanPackageUtils;->adjustScanFlagsWithPackageSetting(ILcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Landroid/os/UserHandle;)I
-HSPLcom/android/server/pm/ScanPackageUtils;->applyAdjustedAbiToSharedUser(Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/parsing/pkg/ParsedPackage;Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/pm/ScanPackageUtils;->applyPolicy(Lcom/android/server/pm/parsing/pkg/ParsedPackage;ILcom/android/server/pm/pkg/AndroidPackage;Z)V
 HSPLcom/android/server/pm/ScanPackageUtils;->assertMinSignatureSchemeIsValid(Lcom/android/server/pm/pkg/AndroidPackage;I)V
 HSPLcom/android/server/pm/ScanPackageUtils;->assertPackageProcesses(Lcom/android/server/pm/pkg/AndroidPackage;Ljava/util/List;Ljava/util/Map;Ljava/lang/String;)V
@@ -6707,8 +7074,8 @@
 HSPLcom/android/server/pm/ScanRequest;-><init>(Lcom/android/server/pm/parsing/pkg/ParsedPackage;Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Ljava/lang/String;IIZLandroid/os/UserHandle;Ljava/lang/String;)V
 HSPLcom/android/server/pm/ScanResult;-><init>(Lcom/android/server/pm/ScanRequest;Lcom/android/server/pm/PackageSetting;Ljava/util/List;ZILandroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;Ljava/util/List;)V
 HSPLcom/android/server/pm/SettingBase;-><init>(II)V
-HSPLcom/android/server/pm/SettingBase;-><init>(Lcom/android/server/pm/SettingBase;)V
-HSPLcom/android/server/pm/SettingBase;->copySettingBase(Lcom/android/server/pm/SettingBase;)V
+HSPLcom/android/server/pm/SettingBase;-><init>(Lcom/android/server/pm/SettingBase;)V+]Lcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;,Lcom/android/server/pm/SharedUserSetting;
+HSPLcom/android/server/pm/SettingBase;->copySettingBase(Lcom/android/server/pm/SettingBase;)V+]Lcom/android/server/pm/permission/LegacyPermissionState;Lcom/android/server/pm/permission/LegacyPermissionState;]Lcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;,Lcom/android/server/pm/SharedUserSetting;
 HSPLcom/android/server/pm/SettingBase;->dispatchChange(Lcom/android/server/utils/Watchable;)V+]Lcom/android/server/utils/Watchable;Lcom/android/server/utils/WatchableImpl;
 HSPLcom/android/server/pm/SettingBase;->getFlags()I
 HSPLcom/android/server/pm/SettingBase;->getLegacyPermissionState()Lcom/android/server/pm/permission/LegacyPermissionState;
@@ -6733,9 +7100,7 @@
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence$PersistenceHandler;-><init>(Lcom/android/server/pm/Settings$RuntimePermissionPersistence;)V
 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;->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;
-HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->lambda$writeStateForUser$0(Ljava/lang/Object;ZLcom/android/server/pm/permission/LegacyPermissionDataProvider;Lcom/android/server/utils/WatchedArrayMap;ILcom/android/server/utils/WatchedArrayMap;Landroid/os/Handler;)V+]Landroid/os/Handler;Lcom/android/server/pm/Settings$RuntimePermissionPersistence$PersistenceHandler;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/os/Message;Landroid/os/Message;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]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/SettingBase;Lcom/android/server/pm/SharedUserSetting;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]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
+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;]Lcom/android/server/pm/permission/LegacyPermissionState$PermissionState;Lcom/android/server/pm/permission/LegacyPermissionState$PermissionState;
 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;->uniformRandom(DD)J
@@ -6752,17 +7117,13 @@
 HSPLcom/android/server/pm/Settings;->checkAndPruneSharedUserLPw(Lcom/android/server/pm/SharedUserSetting;Z)Z
 HSPLcom/android/server/pm/Settings;->createMimeGroups(Ljava/util/Set;)Ljava/util/Map;
 HSPLcom/android/server/pm/Settings;->createNewSetting(Ljava/lang/String;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Ljava/lang/String;Lcom/android/server/pm/SharedUserSetting;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JIILandroid/os/UserHandle;ZZZZLcom/android/server/pm/UserManagerService;[Ljava/lang/String;[J[Ljava/lang/String;[JLjava/util/Set;Ljava/util/UUID;)Lcom/android/server/pm/PackageSetting;
-HSPLcom/android/server/pm/Settings;->disableSystemPackageLPw(Ljava/lang/String;Z)Z
 HSPLcom/android/server/pm/Settings;->dispatchChange(Lcom/android/server/utils/Watchable;)V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchableImpl;
-HPLcom/android/server/pm/Settings;->dumpPackagesLPr(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArraySet;Lcom/android/server/pm/DumpState;Z)V+]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/pm/DumpState;Lcom/android/server/pm/DumpState;]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;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Lcom/android/server/pm/permission/LegacyPermissionDataProvider;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
 HSPLcom/android/server/pm/Settings;->editCrossProfileIntentResolverLPw(I)Lcom/android/server/pm/CrossProfileIntentResolver;
 HSPLcom/android/server/pm/Settings;->editPreferredActivitiesLPw(I)Lcom/android/server/pm/PreferredIntentResolver;
 HSPLcom/android/server/pm/Settings;->findOrCreateVersion(Ljava/lang/String;)Lcom/android/server/pm/Settings$VersionInfo;
-HSPLcom/android/server/pm/Settings;->getAllSharedUsersLPw()Ljava/util/Collection;
 HSPLcom/android/server/pm/Settings;->getAllUsers(Lcom/android/server/pm/UserManagerService;)Ljava/util/List;
 HSPLcom/android/server/pm/Settings;->getApplicationEnabledSettingLPr(Ljava/lang/String;I)I
-HPLcom/android/server/pm/Settings;->getBlockUninstallLPr(ILjava/lang/String;)Z
-HSPLcom/android/server/pm/Settings;->getComponentEnabledSettingLPr(Landroid/content/ComponentName;I)I
+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;
 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;
@@ -6785,7 +7146,6 @@
 HSPLcom/android/server/pm/Settings;->makeCache()Lcom/android/server/utils/SnapshotCache;
 HSPLcom/android/server/pm/Settings;->parseAppId(Lcom/android/modules/utils/TypedXmlPullParser;)I
 HSPLcom/android/server/pm/Settings;->parseSharedUserAppId(Lcom/android/modules/utils/TypedXmlPullParser;)I
-HSPLcom/android/server/pm/Settings;->pruneRenamedPackagesLPw()V
 HSPLcom/android/server/pm/Settings;->pruneSharedUsersLPw()V
 HSPLcom/android/server/pm/Settings;->readBlockUninstallPackagesLPw(Lcom/android/modules/utils/TypedXmlPullParser;I)V
 HSPLcom/android/server/pm/Settings;->readComponentsLPr(Lcom/android/modules/utils/TypedXmlPullParser;)Landroid/util/ArraySet;
@@ -6800,29 +7160,27 @@
 HSPLcom/android/server/pm/Settings;->readSettingsLPw(Lcom/android/server/pm/Computer;Ljava/util/List;Landroid/util/ArrayMap;)Z
 HSPLcom/android/server/pm/Settings;->readSharedUserLPw(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/util/List;)V
 HSPLcom/android/server/pm/Settings;->readUsesStaticLibLPw(Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/server/pm/PackageSetting;)V
-HSPLcom/android/server/pm/Settings;->registerAppIdLPw(Lcom/android/server/pm/PackageSetting;Z)Z
 HSPLcom/android/server/pm/Settings;->registerObserver(Lcom/android/server/utils/Watcher;)V
 HSPLcom/android/server/pm/Settings;->registerObservers()V
 HSPLcom/android/server/pm/Settings;->removeAppIdLPw(I)V
 HSPLcom/android/server/pm/Settings;->removeRenamedPackageLPw(Ljava/lang/String;)V
 HSPLcom/android/server/pm/Settings;->snapshot()Lcom/android/server/pm/Settings;
 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
-HSPLcom/android/server/pm/Settings;->writeCrossProfileIntentFiltersLPr(Lcom/android/modules/utils/TypedXmlSerializer;I)V
+HSPLcom/android/server/pm/Settings;->writeCrossProfileIntentFiltersLPr(Lcom/android/modules/utils/TypedXmlSerializer;I)V+]Lcom/android/server/utils/WatchedSparseArray;Lcom/android/server/utils/WatchedSparseArray;]Lcom/android/server/IntentResolver;Lcom/android/server/pm/CrossProfileIntentResolver;]Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;
 HSPLcom/android/server/pm/Settings;->writeDisabledSysPackageLPr(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/Settings;->writeKernelMappingLPr()V
-HSPLcom/android/server/pm/Settings;->writeKeySetAliasesLPr(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/pm/PackageKeySetData;)V
-HSPLcom/android/server/pm/Settings;->writeLPr(Lcom/android/server/pm/Computer;Z)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;Lcom/android/server/pm/verify/domain/DomainVerificationService;]Lcom/android/server/pm/PackageSignatures;Lcom/android/server/pm/PackageSignatures;]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;]Lcom/android/server/pm/permission/LegacyPermissionSettings;Lcom/android/server/pm/permission/LegacyPermissionSettings;]Lcom/android/server/pm/ResilientAtomicFile;Lcom/android/server/pm/ResilientAtomicFile;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/KeySetManagerService;Lcom/android/server/pm/KeySetManagerService;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
-HSPLcom/android/server/pm/Settings;->writeMimeGroupLPr(Lcom/android/modules/utils/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(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/pm/PackageSetting;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]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;]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;]Ljava/util/UUID;Ljava/util/UUID;
-HSPLcom/android/server/pm/Settings;->writePackageListLPrInternal(I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/IntArray;Landroid/util/IntArray;]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;]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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Ljava/io/BufferedWriter;Ljava/io/BufferedWriter;
-HSPLcom/android/server/pm/Settings;->writePackageRestrictions(IJZ)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;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Lcom/android/server/pm/ResilientAtomicFile;Lcom/android/server/pm/ResilientAtomicFile;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Ljava/io/File;Ljava/io/File;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;
+HSPLcom/android/server/pm/Settings;->writeKeySetAliasesLPr(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/pm/PackageKeySetData;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/PackageKeySetData;Lcom/android/server/pm/PackageKeySetData;
+HSPLcom/android/server/pm/Settings;->writeLPr(Lcom/android/server/pm/Computer;Z)V+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;Lcom/android/server/pm/verify/domain/DomainVerificationService;]Lcom/android/server/pm/PackageSignatures;Lcom/android/server/pm/PackageSignatures;]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;]Lcom/android/server/pm/permission/LegacyPermissionSettings;Lcom/android/server/pm/permission/LegacyPermissionSettings;]Lcom/android/server/pm/ResilientAtomicFile;Lcom/android/server/pm/ResilientAtomicFile;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/KeySetManagerService;Lcom/android/server/pm/KeySetManagerService;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/Settings;->writeMimeGroupLPr(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/util/Map;)V
+HSPLcom/android/server/pm/Settings;->writePackageLPr(Lcom/android/modules/utils/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;]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;]Ljava/util/UUID;Ljava/util/UUID;
+HSPLcom/android/server/pm/Settings;->writePackageListLPrInternal(I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/IntArray;Landroid/util/IntArray;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;]Lcom/android/internal/util/JournaledFile;Lcom/android/internal/util/JournaledFile;]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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/io/BufferedWriter;Ljava/io/BufferedWriter;
+HSPLcom/android/server/pm/Settings;->writePackageRestrictions(IJZ)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;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/pm/ResilientAtomicFile;Lcom/android/server/pm/ResilientAtomicFile;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]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;->writePermissionStateForUserLPr(IZ)V
-HSPLcom/android/server/pm/Settings;->writePreferredActivitiesLPr(Lcom/android/modules/utils/TypedXmlSerializer;IZ)V
+HSPLcom/android/server/pm/Settings;->writePreferredActivitiesLPr(Lcom/android/modules/utils/TypedXmlSerializer;IZ)V+]Lcom/android/server/utils/WatchedSparseArray;Lcom/android/server/utils/WatchedSparseArray;]Lcom/android/server/pm/PreferredActivity;Lcom/android/server/pm/PreferredActivity;]Lcom/android/server/IntentResolver;Lcom/android/server/pm/PreferredIntentResolver;
 HSPLcom/android/server/pm/Settings;->writeSigningKeySetLPr(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/pm/PackageKeySetData;)V
-HSPLcom/android/server/pm/Settings;->writeUpgradeKeySetsLPr(Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/server/pm/PackageKeySetData;)V
 HSPLcom/android/server/pm/Settings;->writeUserRestrictionsLPw(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/Settings;->writeUsesSdkLibLPw(Lcom/android/modules/utils/TypedXmlSerializer;[Ljava/lang/String;[J)V
-HSPLcom/android/server/pm/Settings;->writeUsesStaticLibLPw(Lcom/android/modules/utils/TypedXmlSerializer;[Ljava/lang/String;[J)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;
+HSPLcom/android/server/pm/Settings;->writeUsesStaticLibLPw(Lcom/android/modules/utils/TypedXmlSerializer;[Ljava/lang/String;[J)V
 HSPLcom/android/server/pm/SettingsXml$ReadSectionImpl;-><init>(Lcom/android/modules/utils/TypedXmlPullParser;)V
 HSPLcom/android/server/pm/SettingsXml$ReadSectionImpl;->children()Lcom/android/server/pm/SettingsXml$ChildSection;
 HSPLcom/android/server/pm/SettingsXml$ReadSectionImpl;->getBoolean(Ljava/lang/String;)Z
@@ -6835,17 +7193,15 @@
 HSPLcom/android/server/pm/SettingsXml$ReadSectionImpl;->moveToNext()Z
 HSPLcom/android/server/pm/SettingsXml$ReadSectionImpl;->moveToNext(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/SettingsXml$ReadSectionImpl;->moveToNextInternal(Ljava/lang/String;)Z
-HSPLcom/android/server/pm/SettingsXml$WriteSectionImpl;->attribute(Ljava/lang/String;I)Lcom/android/server/pm/SettingsXml$WriteSection;+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;
-HSPLcom/android/server/pm/SettingsXml$WriteSectionImpl;->attribute(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/pm/SettingsXml$WriteSection;+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;
-HSPLcom/android/server/pm/SettingsXml$WriteSectionImpl;->attribute(Ljava/lang/String;Z)Lcom/android/server/pm/SettingsXml$WriteSection;
-HSPLcom/android/server/pm/SettingsXml$WriteSectionImpl;->close()V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Ljava/util/Stack;Ljava/util/Stack;
+HSPLcom/android/server/pm/SettingsXml$WriteSectionImpl;->attribute(Ljava/lang/String;I)Lcom/android/server/pm/SettingsXml$WriteSection;
+HSPLcom/android/server/pm/SettingsXml$WriteSectionImpl;->attribute(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/pm/SettingsXml$WriteSection;
+HSPLcom/android/server/pm/SettingsXml$WriteSectionImpl;->close()V+]Ljava/util/Stack;Ljava/util/Stack;
 HSPLcom/android/server/pm/SettingsXml$WriteSectionImpl;->finish()V+]Lcom/android/server/pm/SettingsXml$WriteSectionImpl;Lcom/android/server/pm/SettingsXml$WriteSectionImpl;
-HSPLcom/android/server/pm/SettingsXml$WriteSectionImpl;->startSection(Ljava/lang/String;)Lcom/android/server/pm/SettingsXml$WriteSection;+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Ljava/util/Stack;Ljava/util/Stack;
+HSPLcom/android/server/pm/SettingsXml$WriteSectionImpl;->startSection(Ljava/lang/String;)Lcom/android/server/pm/SettingsXml$WriteSection;+]Ljava/util/Stack;Ljava/util/Stack;
 HSPLcom/android/server/pm/SettingsXml;->parser(Lcom/android/modules/utils/TypedXmlPullParser;)Lcom/android/server/pm/SettingsXml$ReadSection;
 HPLcom/android/server/pm/ShareTargetInfo;->saveToXml(Lcom/android/modules/utils/TypedXmlSerializer;)V
 HSPLcom/android/server/pm/SharedLibrariesImpl$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/pm/SharedLibrariesImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLcom/android/server/pm/SharedLibrariesImpl$$ExternalSyntheticLambda1;-><init>()V
 HSPLcom/android/server/pm/SharedLibrariesImpl$1;-><init>(Lcom/android/server/pm/SharedLibrariesImpl;)V
 HSPLcom/android/server/pm/SharedLibrariesImpl$1;->onChange(Lcom/android/server/utils/Watchable;)V
 HSPLcom/android/server/pm/SharedLibrariesImpl$2;-><init>(Lcom/android/server/pm/SharedLibrariesImpl;Lcom/android/server/pm/SharedLibrariesImpl;Lcom/android/server/utils/Watchable;)V
@@ -6873,13 +7229,10 @@
 HSPLcom/android/server/pm/SharedLibrariesImpl;->registerObservers()V
 HSPLcom/android/server/pm/SharedLibrariesImpl;->setDeletePackageHelper(Lcom/android/server/pm/DeletePackageHelper;)V
 HSPLcom/android/server/pm/SharedLibrariesImpl;->snapshot()Lcom/android/server/pm/SharedLibrariesRead;
-HSPLcom/android/server/pm/SharedLibrariesImpl;->updateAllSharedLibrariesLPw(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/PackageSetting;Ljava/util/Map;)Ljava/util/ArrayList;
+HSPLcom/android/server/pm/SharedLibrariesImpl;->updateAllSharedLibrariesLPw(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/PackageSetting;Ljava/util/Map;)Ljava/util/ArrayList;+]Lcom/android/server/pm/SharedLibrariesImpl;Lcom/android/server/pm/SharedLibrariesImpl;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/SharedLibrariesImpl;->updateSharedLibraries(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/PackageSetting;Ljava/util/Map;)V
 HSPLcom/android/server/pm/SharedLibraryUtils;->addSharedLibraryToPackageVersionMap(Ljava/util/Map;Landroid/content/pm/SharedLibraryInfo;)Z
-HPLcom/android/server/pm/SharedLibraryUtils;->findSharedLibraries(Lcom/android/server/pm/pkg/PackageStateInternal;)Ljava/util/List;
 HSPLcom/android/server/pm/SharedLibraryUtils;->getSharedLibraryInfo(Ljava/lang/String;JLjava/util/Map;Ljava/util/Map;)Landroid/content/pm/SharedLibraryInfo;
-HSPLcom/android/server/pm/SharedUidMigration;->applyStrategy(I)Z
-HSPLcom/android/server/pm/SharedUidMigration;->getCurrentStrategy()I
 HSPLcom/android/server/pm/SharedUidMigration;->isDisabled()Z
 HSPLcom/android/server/pm/SharedUserSetting$1;-><init>(Lcom/android/server/pm/SharedUserSetting;)V
 HSPLcom/android/server/pm/SharedUserSetting$1;->onChange(Lcom/android/server/utils/Watchable;)V
@@ -6888,7 +7241,6 @@
 HSPLcom/android/server/pm/SharedUserSetting;-><init>(Ljava/lang/String;II)V
 HSPLcom/android/server/pm/SharedUserSetting;->addPackage(Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/SharedUserSetting;->addProcesses(Ljava/util/Map;)V
-HSPLcom/android/server/pm/SharedUserSetting;->fixSeInfoLocked()V
 HSPLcom/android/server/pm/SharedUserSetting;->getDisabledPackageSettings()Lcom/android/server/utils/WatchedArraySet;
 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;
@@ -6900,8 +7252,6 @@
 HSPLcom/android/server/pm/SharedUserSetting;->makeCache()Lcom/android/server/utils/SnapshotCache;
 HSPLcom/android/server/pm/SharedUserSetting;->registerObservers()V
 HSPLcom/android/server/pm/SharedUserSetting;->snapshot()Lcom/android/server/pm/SharedUserSetting;+]Lcom/android/server/utils/SnapshotCache;Lcom/android/server/pm/SharedUserSetting$2;
-HSPLcom/android/server/pm/SharedUserSetting;->snapshot()Ljava/lang/Object;
-HSPLcom/android/server/pm/SharedUserSetting;->updateProcesses()V
 HPLcom/android/server/pm/ShortcutBitmapSaver;-><init>(Lcom/android/server/pm/ShortcutService;)V
 HPLcom/android/server/pm/ShortcutBitmapSaver;->saveBitmapLocked(Landroid/content/pm/ShortcutInfo;ILandroid/graphics/Bitmap$CompressFormat;I)V
 HPLcom/android/server/pm/ShortcutBitmapSaver;->waitForAllSavesLocked()Z
@@ -6909,36 +7259,43 @@
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda27;-><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$$ExternalSyntheticLambda27;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda34;-><init>(Lcom/android/server/pm/ShortcutPackage;Ljava/util/ArrayList;Lcom/android/server/pm/ShortcutService;[Z)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda34;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda40;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda41;-><init>(Ljava/util/function/Consumer;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda41;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HPLcom/android/server/pm/ShortcutPackage;->$r8$lambda$JcaBN-NJ8IttrR1m_05KvWhTii8(Ljava/util/function/Consumer;Landroid/content/pm/ShortcutInfo;)Ljava/lang/Boolean;
 HPLcom/android/server/pm/ShortcutPackage;->$r8$lambda$ftvQN17DMhcyrDIR2XwS1dEH5ms(Lcom/android/server/pm/ShortcutPackage;Ljava/util/List;Ljava/util/function/Predicate;ILjava/lang/String;Landroid/util/ArraySet;ZLandroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage;-><init>(Lcom/android/server/pm/ShortcutUser;ILjava/lang/String;Lcom/android/server/pm/ShortcutPackageInfo;)V
-HPLcom/android/server/pm/ShortcutPackage;->adjustRanks()V
+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
-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;->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/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;
 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;Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda19;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda3;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda25;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda26;
+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$$ExternalSyntheticLambda34;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda41;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda5;]Ljava/lang/Boolean;Ljava/lang/Boolean;
+HPLcom/android/server/pm/ShortcutPackage;->forceReplaceShortcutInner(Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage;->fromAppSearch()Lcom/android/internal/infra/AndroidFuture;
 HPLcom/android/server/pm/ShortcutPackage;->getShortcutPackageItemFile()Ljava/io/File;
+HPLcom/android/server/pm/ShortcutPackage;->hasNoShortcut()Z
+HPLcom/android/server/pm/ShortcutPackage;->isAppSearchEnabled()Z
 HPLcom/android/server/pm/ShortcutPackage;->lambda$areAllActivitiesStillEnabled$15(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;
 HPLcom/android/server/pm/ShortcutPackage;->lambda$findAll$13(Ljava/util/List;Ljava/util/function/Predicate;ILjava/lang/String;Landroid/util/ArraySet;ZLandroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage;->lambda$forEachShortcut$37(Ljava/util/function/Consumer;Landroid/content/pm/ShortcutInfo;)Ljava/lang/Boolean;+]Ljava/util/function/Consumer;megamorphic_types
+HPLcom/android/server/pm/ShortcutPackage;->lambda$new$25(Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;)I+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;
 HPLcom/android/server/pm/ShortcutPackage;->lambda$saveShortcutsAsync$46(Ljava/util/Collection;Landroid/app/appsearch/AppSearchSession;)V
 HPLcom/android/server/pm/ShortcutPackage;->lambda$sortShortcutsToActivities$22(Landroid/util/ArrayMap;Landroid/content/pm/ShortcutInfo;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/pm/ShortcutPackage;->parseShortcut(Lcom/android/modules/utils/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;->rescanPackageIfNeeded(ZZ)Z
-HPLcom/android/server/pm/ShortcutPackage;->saveShortcut(Lcom/android/modules/utils/TypedXmlSerializer;Landroid/content/pm/ShortcutInfo;ZZ)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Landroid/app/Person;Landroid/app/Person;]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;
+HPLcom/android/server/pm/ShortcutPackage;->saveShortcut(Lcom/android/modules/utils/TypedXmlSerializer;Landroid/content/pm/ShortcutInfo;ZZ)V+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Landroid/app/Person;Landroid/app/Person;]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;
 HPLcom/android/server/pm/ShortcutPackage;->saveShortcut(Ljava/util/Collection;)V
-HPLcom/android/server/pm/ShortcutPackage;->saveToXml(Lcom/android/modules/utils/TypedXmlSerializer;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;,Lcom/android/internal/util/ArtBinaryXmlSerializer;]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;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/pm/ShareTargetInfo;Lcom/android/server/pm/ShareTargetInfo;
+HPLcom/android/server/pm/ShortcutPackage;->saveShortcutsAsync(Ljava/util/Collection;)V
+HPLcom/android/server/pm/ShortcutPackage;->saveToXml(Lcom/android/modules/utils/TypedXmlSerializer;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]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;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/pm/ShareTargetInfo;Lcom/android/server/pm/ShareTargetInfo;
 HPLcom/android/server/pm/ShortcutPackage;->scheduleSaveToAppSearchLocked()V
 HPLcom/android/server/pm/ShortcutPackage;->sortShortcutsToActivities()Landroid/util/ArrayMap;
-HPLcom/android/server/pm/ShortcutPackageInfo;-><init>(JJLjava/util/ArrayList;Z)V
 HPLcom/android/server/pm/ShortcutPackageInfo;->isShadow()Z
 HPLcom/android/server/pm/ShortcutPackageInfo;->saveToXml(Lcom/android/server/pm/ShortcutService;Lcom/android/modules/utils/TypedXmlSerializer;Z)V
 HPLcom/android/server/pm/ShortcutPackageItem;-><init>(Lcom/android/server/pm/ShortcutUser;ILjava/lang/String;Lcom/android/server/pm/ShortcutPackageInfo;)V
@@ -6948,17 +7305,19 @@
 HPLcom/android/server/pm/ShortcutPackageItem;->getPackageUserId()I
 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+]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
 HPLcom/android/server/pm/ShortcutParser;->parseShortcuts(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;ILjava/util/List;)Ljava/util/List;
 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;
 HPLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/pm/ShortcutService;ILjava/util/List;Ljava/lang/String;Landroid/os/UserHandle;Ljava/util/List;)V
 HPLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/pm/ShortcutService;I)V
 HPLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda11;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/pm/ShortcutService$1;->test(Ljava/lang/Object;)Z
 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;->$r8$lambda$nnZhgSAwrPDrCOVREFNw2UzfG0Q(Lcom/android/server/pm/ShortcutService$4;II)V
-HSPLcom/android/server/pm/ShortcutService$4;->lambda$onUidStateChanged$0(II)V
+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;->onUidStateChanged(IIJI)V+]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
-HPLcom/android/server/pm/ShortcutService$LocalService$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/pm/ShortcutService$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HPLcom/android/server/pm/ShortcutService$LocalService$$ExternalSyntheticLambda8;-><init>(JLandroid/util/ArraySet;Landroid/util/ArraySet;Landroid/content/ComponentName;ZZZZZ)V
 HPLcom/android/server/pm/ShortcutService$LocalService$$ExternalSyntheticLambda8;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/pm/ShortcutService$LocalService;->$r8$lambda$t2uvIEYVprIKC98rmIbYcYuwE_I(JLandroid/util/ArraySet;Landroid/util/ArraySet;Landroid/content/ComponentName;ZZZZZLandroid/content/pm/ShortcutInfo;)Z
@@ -6966,33 +7325,43 @@
 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;->getShortcuts(ILjava/lang/String;JLjava/lang/String;Ljava/util/List;Ljava/util/List;Landroid/content/ComponentName;IIII)Ljava/util/List;
 HPLcom/android/server/pm/ShortcutService$LocalService;->getShortcutsInnerLocked(ILjava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;JLandroid/content/ComponentName;IILjava/util/ArrayList;III)V+]Lcom/android/server/pm/ShortcutService$LocalService;Lcom/android/server/pm/ShortcutService$LocalService;]Lcom/android/server/pm/ShortcutPackage;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/server/pm/ShortcutUser;Lcom/android/server/pm/ShortcutUser;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
-HPLcom/android/server/pm/ShortcutService$LocalService;->hasShortcutHostPermission(ILjava/lang/String;II)Z+]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
+HPLcom/android/server/pm/ShortcutService$LocalService;->hasShortcutHostPermission(ILjava/lang/String;II)Z
 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;
+HSPLcom/android/server/pm/ShortcutService;->-$$Nest$fgetmLock(Lcom/android/server/pm/ShortcutService;)Ljava/lang/Object;
 HPLcom/android/server/pm/ShortcutService;->canSeeAnyPinnedShortcut(Ljava/lang/String;III)Z+]Lcom/android/server/pm/ShortcutNonPersistentUser;Lcom/android/server/pm/ShortcutNonPersistentUser;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
+HPLcom/android/server/pm/ShortcutService;->fillInDefaultActivity(Ljava/util/List;)V
 HPLcom/android/server/pm/ShortcutService;->fixUpIncomingShortcutInfo(Landroid/content/pm/ShortcutInfo;ZZ)V
-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;
-HPLcom/android/server/pm/ShortcutService;->getLauncherShortcutsLocked(Ljava/lang/String;II)Lcom/android/server/pm/ShortcutLauncher;
+HPLcom/android/server/pm/ShortcutService;->fixUpShortcutResourceNamesAndValues(Landroid/content/pm/ShortcutInfo;)V
+HPLcom/android/server/pm/ShortcutService;->getDefaultLauncher(I)Ljava/lang/String;
+HPLcom/android/server/pm/ShortcutService;->getLauncherShortcutsLocked(Ljava/lang/String;II)Lcom/android/server/pm/ShortcutLauncher;+]Lcom/android/server/pm/ShortcutUser;Lcom/android/server/pm/ShortcutUser;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
 HPLcom/android/server/pm/ShortcutService;->getMainActivityIntent()Landroid/content/Intent;
-HPLcom/android/server/pm/ShortcutService;->getNonPersistentUserLocked(I)Lcom/android/server/pm/ShortcutNonPersistentUser;
+HPLcom/android/server/pm/ShortcutService;->getPackageShortcutsForPublisherLocked(Ljava/lang/String;I)Lcom/android/server/pm/ShortcutPackage;
 HPLcom/android/server/pm/ShortcutService;->getStatStartTime()J+]Lcom/android/internal/util/StatLogger;Lcom/android/internal/util/StatLogger;
 HPLcom/android/server/pm/ShortcutService;->getUserShortcutsLocked(I)Lcom/android/server/pm/ShortcutUser;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
 HSPLcom/android/server/pm/ShortcutService;->handleOnUidStateChanged(II)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
-HPLcom/android/server/pm/ShortcutService;->hasShortcutHostPermission(Ljava/lang/String;III)Z+]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
+HPLcom/android/server/pm/ShortcutService;->hasShortcutHostPermission(Ljava/lang/String;III)Z
 HPLcom/android/server/pm/ShortcutService;->injectApplicationInfoWithUninstalled(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
+HSPLcom/android/server/pm/ShortcutService;->injectClearCallingIdentity()J
 HPLcom/android/server/pm/ShortcutService;->injectGetPackageUid(Ljava/lang/String;I)I
 HPLcom/android/server/pm/ShortcutService;->injectGetResourcesForApplicationAsUser(Ljava/lang/String;I)Landroid/content/res/Resources;
 HPLcom/android/server/pm/ShortcutService;->injectHasAccessShortcutsPermission(II)Z+]Landroid/content/Context;Landroid/app/ContextImpl;
 HPLcom/android/server/pm/ShortcutService;->injectIsActivityEnabledAndExported(Landroid/content/ComponentName;I)Z
 HPLcom/android/server/pm/ShortcutService;->injectIsMainActivity(Landroid/content/ComponentName;I)Z
 HPLcom/android/server/pm/ShortcutService;->injectPackageInfoWithUninstalled(Ljava/lang/String;IZ)Landroid/content/pm/PackageInfo;
-HSPLcom/android/server/pm/ShortcutService;->injectPostToHandler(Ljava/lang/Runnable;)V
-HPLcom/android/server/pm/ShortcutService;->injectPostToHandlerDebounced(Ljava/lang/Object;Ljava/lang/Runnable;)V
+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+]Landroid/os/Handler;Landroid/os/Handler;
+HSPLcom/android/server/pm/ShortcutService;->injectRestoreCallingIdentity(J)V
+HPLcom/android/server/pm/ShortcutService;->injectUserDataPath(I)Ljava/io/File;
+HPLcom/android/server/pm/ShortcutService;->isEnabled(Landroid/content/pm/ActivityInfo;I)Z
+HPLcom/android/server/pm/ShortcutService;->isInstalled(Landroid/content/pm/ActivityInfo;)Z
 HPLcom/android/server/pm/ShortcutService;->isInstalled(Landroid/content/pm/ApplicationInfo;)Z
 HSPLcom/android/server/pm/ShortcutService;->isProcessStateForeground(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;
+HSPLcom/android/server/pm/ShortcutService;->isUserUnlockedL(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HPLcom/android/server/pm/ShortcutService;->lambda$notifyListenerRunnable$2(ILjava/lang/String;)V
 HPLcom/android/server/pm/ShortcutService;->lambda$notifyShortcutChangeCallbacks$3(ILjava/util/List;Ljava/lang/String;Landroid/os/UserHandle;Ljava/util/List;)V
+HPLcom/android/server/pm/ShortcutService;->lambda$queryActivities$16(ILandroid/content/pm/ResolveInfo;)Z
 HPLcom/android/server/pm/ShortcutService;->logDurationStat(IJ)V+]Lcom/android/internal/util/StatLogger;Lcom/android/internal/util/StatLogger;
+HPLcom/android/server/pm/ShortcutService;->notifyShortcutChangeCallbacks(Ljava/lang/String;ILjava/util/List;Ljava/util/List;)V
 HPLcom/android/server/pm/ShortcutService;->packageShortcutsChanged(Lcom/android/server/pm/ShortcutPackage;Ljava/util/List;Ljava/util/List;)V
 HPLcom/android/server/pm/ShortcutService;->pushDynamicShortcut(Ljava/lang/String;Landroid/content/pm/ShortcutInfo;I)V
 HPLcom/android/server/pm/ShortcutService;->queryActivities(Landroid/content/Intent;IZ)Ljava/util/List;
@@ -7003,12 +7372,15 @@
 HPLcom/android/server/pm/ShortcutService;->throwIfUserLockedL(I)V+]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
 HPLcom/android/server/pm/ShortcutService;->verifyCaller(Ljava/lang/String;I)V
 HPLcom/android/server/pm/ShortcutService;->writeAttr(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;J)V
-HPLcom/android/server/pm/ShortcutService;->writeAttr(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;Ljava/lang/CharSequence;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannableString;
+HPLcom/android/server/pm/ShortcutService;->writeAttr(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;Ljava/lang/CharSequence;)V+]Ljava/lang/CharSequence;Ljava/lang/String;
+HPLcom/android/server/pm/ShortcutService;->writeAttr(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;Z)V
+HPLcom/android/server/pm/ShortcutService;->writeTagExtra(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;Landroid/os/PersistableBundle;)V+]Landroid/os/PersistableBundle;Landroid/os/PersistableBundle;
 HPLcom/android/server/pm/ShortcutUser$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutUser;->detectLocaleChange()V
 HPLcom/android/server/pm/ShortcutUser;->forAllPackages(Ljava/util/function/Consumer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Consumer;megamorphic_types
 HPLcom/android/server/pm/ShortcutUser;->getAppSearch(Landroid/app/appsearch/AppSearchManager$SearchContext;)Lcom/android/internal/infra/AndroidFuture;
 HPLcom/android/server/pm/ShortcutUser;->getLauncherShortcuts(Ljava/lang/String;I)Lcom/android/server/pm/ShortcutLauncher;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/ShortcutPackageItem;Lcom/android/server/pm/ShortcutLauncher;
+HPLcom/android/server/pm/ShortcutUser;->getPackageShortcuts(Ljava/lang/String;)Lcom/android/server/pm/ShortcutPackage;
 HPLcom/android/server/pm/ShortcutUser;->getPackageShortcutsIfExists(Ljava/lang/String;)Lcom/android/server/pm/ShortcutPackage;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/ShortcutPackageItem;Lcom/android/server/pm/ShortcutPackage;
 HPLcom/android/server/pm/ShortcutUser;->rescanPackageIfNeeded(Ljava/lang/String;Z)V
 HSPLcom/android/server/pm/SnapshotStatistics$1;-><init>(Lcom/android/server/pm/SnapshotStatistics;Landroid/os/Looper;)V
@@ -7025,29 +7397,31 @@
 HSPLcom/android/server/pm/SnapshotStatistics;-><init>()V
 HSPLcom/android/server/pm/SnapshotStatistics;->rebuild(JJII)V
 HSPLcom/android/server/pm/SnapshotStatistics;->scheduleTick()V
+HPLcom/android/server/pm/SnapshotStatistics;->shift([Lcom/android/server/pm/SnapshotStatistics$Stats;J)V
 HPLcom/android/server/pm/SnapshotStatistics;->tick()V
 HSPLcom/android/server/pm/StorageEventHelper;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/DeletePackageHelper;Lcom/android/server/pm/RemovePackageHelper;)V
-HSPLcom/android/server/pm/StorageEventHelper;->reconcileApps(Lcom/android/server/pm/Computer;Ljava/lang/String;)V
 HSPLcom/android/server/pm/SuspendPackageHelper;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/BroadcastHelper;Lcom/android/server/pm/ProtectedPackages;)V
 HPLcom/android/server/pm/SuspendPackageHelper;->canSuspendPackageForUser(Lcom/android/server/pm/Computer;[Ljava/lang/String;II)[Z
 HSPLcom/android/server/pm/SuspendPackageHelper;->isPackageSuspended(Lcom/android/server/pm/Computer;Ljava/lang/String;II)Z
 HSPLcom/android/server/pm/UserDataPreparer;-><init>(Lcom/android/server/pm/Installer;Ljava/lang/Object;Landroid/content/Context;)V
+HSPLcom/android/server/pm/UserJourneyLogger;-><init>()V
 HSPLcom/android/server/pm/UserManagerInternal;-><init>()V
-HSPLcom/android/server/pm/UserManagerService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/pm/UserManagerService;Landroid/os/Bundle;I)V
+HSPLcom/android/server/pm/UserManagerService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/pm/UserManagerService;)V
+HSPLcom/android/server/pm/UserManagerService$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/pm/UserManagerService;I)V
 HSPLcom/android/server/pm/UserManagerService$1;-><init>(Lcom/android/server/pm/UserManagerService;)V
 HSPLcom/android/server/pm/UserManagerService$2;-><init>(Lcom/android/server/pm/UserManagerService;)V
 HSPLcom/android/server/pm/UserManagerService$LocalService;-><init>(Lcom/android/server/pm/UserManagerService;)V
 HSPLcom/android/server/pm/UserManagerService$LocalService;-><init>(Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService$LocalService-IA;)V
 HSPLcom/android/server/pm/UserManagerService$LocalService;->exists(I)Z
 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;->getUserProperties(I)Landroid/content/pm/UserProperties;
 HSPLcom/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;
-HPLcom/android/server/pm/UserManagerService$LocalService;->isProfileAccessible(IILjava/lang/String;Z)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;
 HSPLcom/android/server/pm/UserManagerService$LocalService;->isUserRunning(I)Z
-HSPLcom/android/server/pm/UserManagerService$LocalService;->isUserUnlocked(I)Z
+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;
 HSPLcom/android/server/pm/UserManagerService$LocalService;->isUserVisible(I)Z+]Lcom/android/server/pm/UserVisibilityMediator;Lcom/android/server/pm/UserVisibilityMediator;
 HSPLcom/android/server/pm/UserManagerService$MainHandler;-><init>(Lcom/android/server/pm/UserManagerService;)V
@@ -7062,61 +7436,62 @@
 HSPLcom/android/server/pm/UserManagerService;->-$$Nest$fgetmUsers(Lcom/android/server/pm/UserManagerService;)Landroid/util/SparseArray;
 HSPLcom/android/server/pm/UserManagerService;->-$$Nest$fgetmUsersLock(Lcom/android/server/pm/UserManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/UserManagerService;->-$$Nest$mgetEffectiveUserRestrictions(Lcom/android/server/pm/UserManagerService;I)Landroid/os/Bundle;
+HPLcom/android/server/pm/UserManagerService;->-$$Nest$mgetUserInfoLU(Lcom/android/server/pm/UserManagerService;I)Landroid/content/pm/UserInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 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;
 HSPLcom/android/server/pm/UserManagerService;->-$$Nest$mgetUserPropertiesInternal(Lcom/android/server/pm/UserManagerService;I)Landroid/content/pm/UserProperties;
 HSPLcom/android/server/pm/UserManagerService;->-$$Nest$mgetUsersInternal(Lcom/android/server/pm/UserManagerService;ZZZ)Ljava/util/List;
 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;Landroid/util/SparseArray;)V
-HSPLcom/android/server/pm/UserManagerService;->applyUserRestrictionsForAllUsersLR()V
-HSPLcom/android/server/pm/UserManagerService;->applyUserRestrictionsLR(I)V
 HSPLcom/android/server/pm/UserManagerService;->checkCreateUsersPermission(Ljava/lang/String;)V
 HSPLcom/android/server/pm/UserManagerService;->checkManageOrInteractPermissionIfCallerInOtherProfileGroup(ILjava/lang/String;)V+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/UserManagerService;->checkQueryOrCreateUsersPermission(Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/pm/UserManagerService;->checkQueryOrInteractPermissionIfCallerInOtherProfileGroup(ILjava/lang/String;)V+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
-HSPLcom/android/server/pm/UserManagerService;->computeEffectiveUserRestrictionsLR(I)Landroid/os/Bundle;
-HPLcom/android/server/pm/UserManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-HPLcom/android/server/pm/UserManagerService;->dumpUserLocked(Ljava/io/PrintWriter;Lcom/android/server/pm/UserManagerService$UserData;Ljava/lang/StringBuilder;JJ)V
 HSPLcom/android/server/pm/UserManagerService;->emulateSystemUserModeIfNeeded()V
 HSPLcom/android/server/pm/UserManagerService;->exists(I)Z+]Lcom/android/server/pm/UserManagerService$LocalService;Lcom/android/server/pm/UserManagerService$LocalService;
 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;
-HPLcom/android/server/pm/UserManagerService;->getCrossProfileIntentFilterAccessControl(II)I
-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;
+HSPLcom/android/server/pm/UserManagerService;->getEffectiveUserRestrictions(I)Landroid/os/Bundle;+]Lcom/android/server/pm/RestrictionsSet;Lcom/android/server/pm/RestrictionsSet;
 HSPLcom/android/server/pm/UserManagerService;->getInstance()Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/UserManagerService;->getInternalForInjectorOnly()Lcom/android/server/pm/UserManagerInternal;
 HSPLcom/android/server/pm/UserManagerService;->getMainUserIdUnchecked()I
+HSPLcom/android/server/pm/UserManagerService;->getOwnerName()Ljava/lang/String;
 HSPLcom/android/server/pm/UserManagerService;->getProfileIds(ILjava/lang/String;Z)[I+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/IntArray;Landroid/util/IntArray;
 HSPLcom/android/server/pm/UserManagerService;->getProfileIds(IZ)[I+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/UserManagerService;->getProfileIdsLU(ILjava/lang/String;Z)Landroid/util/IntArray;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/IntArray;Landroid/util/IntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
 HSPLcom/android/server/pm/UserManagerService;->getProfileParent(I)Landroid/content/pm/UserInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/UserManagerService;->getProfileParentLU(I)Landroid/content/pm/UserInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
-HSPLcom/android/server/pm/UserManagerService;->getProfileType(I)Ljava/lang/String;
+HSPLcom/android/server/pm/UserManagerService;->getProfileType(I)Ljava/lang/String;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
 HSPLcom/android/server/pm/UserManagerService;->getProfiles(IZ)Ljava/util/List;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/pm/UserManagerService;->getProfilesLU(ILjava/lang/String;ZZ)Ljava/util/List;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/util/IntArray;Landroid/util/IntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/pm/UserManagerService;->getUidForPackage(Ljava/lang/String;)I
+HPLcom/android/server/pm/UserManagerService;->getUidForPackage(Ljava/lang/String;)I+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HPLcom/android/server/pm/UserManagerService;->getUserBadgeNoBackgroundResId(I)I
 HSPLcom/android/server/pm/UserManagerService;->getUserDataLU(I)Lcom/android/server/pm/UserManagerService$UserData;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/pm/UserManagerService;->getUserDataNoChecks(I)Lcom/android/server/pm/UserManagerService$UserData;
-HSPLcom/android/server/pm/UserManagerService;->getUserHandle(I)I
+HSPLcom/android/server/pm/UserManagerService;->getUserFile(I)Lcom/android/server/pm/ResilientAtomicFile;
+HSPLcom/android/server/pm/UserManagerService;->getUserHandle(I)I+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HPLcom/android/server/pm/UserManagerService;->getUserIcon(I)Landroid/os/ParcelFileDescriptor;
 HSPLcom/android/server/pm/UserManagerService;->getUserIds()[I
 HSPLcom/android/server/pm/UserManagerService;->getUserIdsIncludingPreCreated()[I
 HSPLcom/android/server/pm/UserManagerService;->getUserInfo(I)Landroid/content/pm/UserInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
-HSPLcom/android/server/pm/UserManagerService;->getUserInfoLU(I)Landroid/content/pm/UserInfo;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/pm/UserManagerService;->getUserInfoLU(I)Landroid/content/pm/UserInfo;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/pm/UserManagerService;->getUserInfoNoChecks(I)Landroid/content/pm/UserInfo;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/pm/UserManagerService;->getUserListFile()Lcom/android/server/pm/ResilientAtomicFile;
 HSPLcom/android/server/pm/UserManagerService;->getUserPropertiesCopy(I)Landroid/content/pm/UserProperties;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/UserManagerService;->getUserPropertiesInternal(I)Landroid/content/pm/UserProperties;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HPLcom/android/server/pm/UserManagerService;->getUserRestrictionSources(Ljava/lang/String;I)Ljava/util/List;
 HSPLcom/android/server/pm/UserManagerService;->getUserSerialNumber(I)I+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HPLcom/android/server/pm/UserManagerService;->getUserStartRealtime()J+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HPLcom/android/server/pm/UserManagerService;->getUserSwitchability(I)I
-HPLcom/android/server/pm/UserManagerService;->getUserTypeDetailsNoChecks(I)Lcom/android/server/pm/UserTypeDetails;
+HPLcom/android/server/pm/UserManagerService;->getUserTypeDetails(Landroid/content/pm/UserInfo;)Lcom/android/server/pm/UserTypeDetails;
+HPLcom/android/server/pm/UserManagerService;->getUserTypeDetailsNoChecks(I)Lcom/android/server/pm/UserTypeDetails;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HPLcom/android/server/pm/UserManagerService;->getUserUnlockRealtime()J+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/UserManagerService;->getUsers(ZZZ)Ljava/util/List;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/UserManagerService;->getUsersInternal(ZZZ)Ljava/util/List;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/pm/UserManagerService;->hasBadge(I)Z
 HSPLcom/android/server/pm/UserManagerService;->hasCreateUsersPermission()Z
 HSPLcom/android/server/pm/UserManagerService;->hasManageUsersOrPermission(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/UserManagerService;->hasManageUsersPermission()Z
 HSPLcom/android/server/pm/UserManagerService;->hasManageUsersPermission(I)Z
+HSPLcom/android/server/pm/UserManagerService;->hasPermissionGranted(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/UserManagerService;->hasProfile(I)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/pm/UserManagerService;->hasQueryOrCreateUsersPermission()Z
 HSPLcom/android/server/pm/UserManagerService;->hasQueryUsersPermission()Z
@@ -7124,53 +7499,50 @@
 HSPLcom/android/server/pm/UserManagerService;->initDefaultGuestRestrictions()V
 HSPLcom/android/server/pm/UserManagerService;->invalidateOwnerNameIfNecessary(Landroid/content/res/Resources;Z)V
 HSPLcom/android/server/pm/UserManagerService;->isHeadlessSystemUserMode()Z
-HSPLcom/android/server/pm/UserManagerService;->isProfile(I)Z
+HPLcom/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;->isProfileUnchecked(I)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
-HSPLcom/android/server/pm/UserManagerService;->isQuietModeEnabled(I)Z
+HPLcom/android/server/pm/UserManagerService;->isProfileUnchecked(I)Z
+HPLcom/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;
 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
 HSPLcom/android/server/pm/UserManagerService;->isUserRunning(I)Z
+HPLcom/android/server/pm/UserManagerService;->isUserSwitcherEnabled(I)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
+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;
 HPLcom/android/server/pm/UserManagerService;->packageToRestrictionsFileName(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HPLcom/android/server/pm/UserManagerService;->readApplicationRestrictionsLAr(Landroid/util/AtomicFile;)Landroid/os/Bundle;+]Landroid/util/AtomicFile;Landroid/util/AtomicFile;]Ljava/io/File;Ljava/io/File;]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;
+HPLcom/android/server/pm/UserManagerService;->readApplicationRestrictionsLAr(Landroid/util/AtomicFile;)Landroid/os/Bundle;+]Landroid/util/AtomicFile;Landroid/util/AtomicFile;]Ljava/io/File;Ljava/io/File;
 HPLcom/android/server/pm/UserManagerService;->readApplicationRestrictionsLAr(Ljava/lang/String;I)Landroid/os/Bundle;
-HPLcom/android/server/pm/UserManagerService;->readEntry(Landroid/os/Bundle;Ljava/util/ArrayList;Lcom/android/modules/utils/TypedXmlPullParser;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/internal/util/ArtBinaryXmlPullParser;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/pm/UserManagerService;->readEntry(Landroid/os/Bundle;Ljava/util/ArrayList;Lcom/android/modules/utils/TypedXmlPullParser;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/UserManagerService;->readUserLP(I)Lcom/android/server/pm/UserManagerService$UserData;
 HSPLcom/android/server/pm/UserManagerService;->readUserLP(ILjava/io/InputStream;)Lcom/android/server/pm/UserManagerService$UserData;
 HSPLcom/android/server/pm/UserManagerService;->readUserListLP()V
-HSPLcom/android/server/pm/UserManagerService;->setDevicePolicyUserRestrictionsInner(ILandroid/os/Bundle;Lcom/android/server/pm/RestrictionsSet;Z)V
+HPLcom/android/server/pm/UserManagerService;->setApplicationRestrictions(Ljava/lang/String;Landroid/os/Bundle;I)V
 HSPLcom/android/server/pm/UserManagerService;->updateUserIds()V
-HSPLcom/android/server/pm/UserManagerService;->updateUserRestrictionsInternalLR(Landroid/os/Bundle;I)V
 HSPLcom/android/server/pm/UserManagerService;->upgradeIfNecessaryLP()V
 HSPLcom/android/server/pm/UserManagerService;->upgradeIfNecessaryLP(II)V
 HSPLcom/android/server/pm/UserManagerService;->userExists(I)Z
-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;
+HSPLcom/android/server/pm/UserManagerService;->userWithName(Landroid/content/pm/UserInfo;)Landroid/content/pm/UserInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HPLcom/android/server/pm/UserManagerService;->writeBundle(Landroid/os/Bundle;Lcom/android/modules/utils/TypedXmlSerializer;)V
-HPLcom/android/server/pm/UserManagerService;->writeUserLP(Lcom/android/server/pm/UserManagerService$UserData;Ljava/io/OutputStream;)V
 HSPLcom/android/server/pm/UserNeedsBadgingCache;-><init>(Lcom/android/server/pm/UserManagerService;)V
-HSPLcom/android/server/pm/UserNeedsBadgingCache;->get(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
+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
-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;
-HSPLcom/android/server/pm/UserRestrictionsUtils;->isGlobal(ILjava/lang/String;)Z
+HSPLcom/android/server/pm/UserRestrictionsUtils;->areEqual(Landroid/os/Bundle;Landroid/os/Bundle;)Z
+HPLcom/android/server/pm/UserRestrictionsUtils;->canProfileOwnerChange(Ljava/lang/String;Z)Z
+HPLcom/android/server/pm/UserRestrictionsUtils;->isGlobal(ILjava/lang/String;)Z
 HSPLcom/android/server/pm/UserRestrictionsUtils;->isSettingRestrictedForUser(Landroid/content/Context;Ljava/lang/String;ILjava/lang/String;I)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+]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
+HSPLcom/android/server/pm/UserRestrictionsUtils;->merge(Landroid/os/Bundle;Landroid/os/Bundle;)V
 HSPLcom/android/server/pm/UserRestrictionsUtils;->newSetWithUniqueCheck([Ljava/lang/String;)Ljava/util/Set;
 HSPLcom/android/server/pm/UserRestrictionsUtils;->readRestrictions(Lcom/android/modules/utils/TypedXmlPullParser;)Landroid/os/Bundle;
 HSPLcom/android/server/pm/UserRestrictionsUtils;->readRestrictions(Lcom/android/modules/utils/TypedXmlPullParser;Landroid/os/Bundle;)V
-HPLcom/android/server/pm/UserRestrictionsUtils;->writeRestrictions(Lcom/android/modules/utils/TypedXmlSerializer;Landroid/os/Bundle;Ljava/lang/String;)V
 HSPLcom/android/server/pm/UserSystemPackageInstaller;-><clinit>()V
 HSPLcom/android/server/pm/UserSystemPackageInstaller;-><init>(Lcom/android/server/pm/UserManagerService;Landroid/util/ArrayMap;)V
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->determineWhitelistedPackagesForUserTypes(Lcom/android/server/SystemConfig;)Landroid/util/ArrayMap;
-HPLcom/android/server/pm/UserSystemPackageInstaller;->dump(Landroid/util/IndentingPrintWriter;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/IndentingPrintWriter;Landroid/util/IndentingPrintWriter;]Ljava/lang/Long;Ljava/lang/Long;]Lcom/android/server/pm/UserSystemPackageInstaller;Lcom/android/server/pm/UserSystemPackageInstaller;
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->getAndSortKeysFromMap(Landroid/util/ArrayMap;)[Ljava/lang/String;
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->getBaseTypeBitSets()Ljava/util/Map;
-HSPLcom/android/server/pm/UserSystemPackageInstaller;->getPackagesWhitelistWarnings()Ljava/util/List;
 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/UserTypeDetails$Builder;-><init>()V
@@ -7197,10 +7569,7 @@
 HSPLcom/android/server/pm/UserTypeDetails$Builder;->setMaxAllowed(I)Lcom/android/server/pm/UserTypeDetails$Builder;
 HSPLcom/android/server/pm/UserTypeDetails$Builder;->setMaxAllowedPerParent(I)Lcom/android/server/pm/UserTypeDetails$Builder;
 HSPLcom/android/server/pm/UserTypeDetails$Builder;->setName(Ljava/lang/String;)Lcom/android/server/pm/UserTypeDetails$Builder;
-HSPLcom/android/server/pm/UserTypeDetails;-><init>(Ljava/lang/String;ZIIIIIIII[I[I[ILandroid/os/Bundle;Landroid/os/Bundle;Landroid/os/Bundle;Ljava/util/List;Landroid/content/pm/UserProperties;)V
-HSPLcom/android/server/pm/UserTypeDetails;-><init>(Ljava/lang/String;ZIIIIIIII[I[I[ILandroid/os/Bundle;Landroid/os/Bundle;Landroid/os/Bundle;Ljava/util/List;Landroid/content/pm/UserProperties;Lcom/android/server/pm/UserTypeDetails-IA;)V
 HSPLcom/android/server/pm/UserTypeDetails;->addDefaultRestrictionsTo(Landroid/os/Bundle;)V
-HPLcom/android/server/pm/UserTypeDetails;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/pm/UserTypeDetails;->getDefaultUserPropertiesReference()Landroid/content/pm/UserProperties;
 HSPLcom/android/server/pm/UserTypeDetails;->isFull()Z
 HSPLcom/android/server/pm/UserTypeDetails;->isProfile()Z
@@ -7210,8 +7579,8 @@
 HSPLcom/android/server/pm/UserTypeFactory;->getDefaultCloneCrossProfileIntentFilter()Ljava/util/List;
 HSPLcom/android/server/pm/UserTypeFactory;->getDefaultGuestUserRestrictions()Landroid/os/Bundle;
 HSPLcom/android/server/pm/UserTypeFactory;->getDefaultManagedCrossProfileIntentFilter()Ljava/util/List;
-HSPLcom/android/server/pm/UserTypeFactory;->getDefaultManagedProfileRestrictions()Landroid/os/Bundle;
 HSPLcom/android/server/pm/UserTypeFactory;->getDefaultManagedProfileSecureSettings()Landroid/os/Bundle;
+HSPLcom/android/server/pm/UserTypeFactory;->getDefaultNonManagedProfileSecureSettings()Landroid/os/Bundle;
 HSPLcom/android/server/pm/UserTypeFactory;->getDefaultSecondaryUserRestrictions()Landroid/os/Bundle;
 HSPLcom/android/server/pm/UserTypeFactory;->getDefaultTypeFullDemo()Lcom/android/server/pm/UserTypeDetails$Builder;
 HSPLcom/android/server/pm/UserTypeFactory;->getDefaultTypeFullGuest()Lcom/android/server/pm/UserTypeDetails$Builder;
@@ -7249,60 +7618,51 @@
 HSPLcom/android/server/pm/WatchedIntentResolver;->registerObserver(Lcom/android/server/utils/Watcher;)V
 HSPLcom/android/server/pm/dex/ArtManagerService$ArtManagerInternalImpl;-><init>(Lcom/android/server/pm/dex/ArtManagerService;)V
 HSPLcom/android/server/pm/dex/ArtManagerService$ArtManagerInternalImpl;-><init>(Lcom/android/server/pm/dex/ArtManagerService;Lcom/android/server/pm/dex/ArtManagerService$ArtManagerInternalImpl-IA;)V
+HPLcom/android/server/pm/dex/ArtManagerService$ArtManagerInternalImpl;->getPackageOptimizationInfo(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Ljava/lang/String;)Landroid/content/pm/dex/PackageOptimizationInfo;
 HSPLcom/android/server/pm/dex/ArtManagerService;-><clinit>()V
 HSPLcom/android/server/pm/dex/ArtManagerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/Installer;Ljava/lang/Object;)V
-HSPLcom/android/server/pm/dex/ArtManagerService;->clearAppProfiles(Lcom/android/server/pm/pkg/AndroidPackage;)V
 HSPLcom/android/server/pm/dex/ArtManagerService;->getCompilationReasonTronValue(Ljava/lang/String;)I
-HSPLcom/android/server/pm/dex/ArtManagerService;->getPackageProfileNames(Lcom/android/server/pm/pkg/AndroidPackage;)Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/dex/ArtManagerService;->verifyTronLoggingConstants()V
 HSPLcom/android/server/pm/dex/ArtStatsLogUtils$ArtStatsLogger;-><init>()V
-HPLcom/android/server/pm/dex/ArtStatsLogUtils$ArtStatsLogger;->write(JIILjava/lang/String;IJIILjava/lang/String;)V
-HSPLcom/android/server/pm/dex/ArtStatsLogUtils$BackgroundDexoptJobStatsLogger;-><init>()V
-HPLcom/android/server/pm/dex/ArtStatsLogUtils;->getDexBytes(Ljava/lang/String;)J+]Landroid/util/jar/StrictJarFile;Landroid/util/jar/StrictJarFile;]Ljava/util/zip/ZipEntry;Ljava/util/zip/ZipEntry;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Ljava/util/Iterator;Landroid/util/jar/StrictJarFile$EntryIterator;
-HSPLcom/android/server/pm/dex/DexManager$DexSearchResult;->-$$Nest$fgetmOutcome(Lcom/android/server/pm/dex/DexManager$DexSearchResult;)I
 HSPLcom/android/server/pm/dex/DexManager$PackageCodeLocations;-><init>(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
 HSPLcom/android/server/pm/dex/DexManager$PackageCodeLocations;->mergeAppDataDirs(Ljava/lang/String;I)V
-HSPLcom/android/server/pm/dex/DexManager$PackageCodeLocations;->searchDex(Ljava/lang/String;I)I+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;]Ljava/util/Set;Ljava/util/HashSet;
 HSPLcom/android/server/pm/dex/DexManager;-><clinit>()V
 HSPLcom/android/server/pm/dex/DexManager;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageDexOptimizer;Lcom/android/server/pm/Installer;Ljava/lang/Object;Lcom/android/server/pm/dex/DynamicCodeLogger;)V
 HSPLcom/android/server/pm/dex/DexManager;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageDexOptimizer;Lcom/android/server/pm/Installer;Ljava/lang/Object;Lcom/android/server/pm/dex/DynamicCodeLogger;Landroid/content/pm/IPackageManager;)V
-HPLcom/android/server/pm/dex/DexManager;->dexoptSecondaryDex(Lcom/android/server/pm/dex/DexoptOptions;)Z
-HSPLcom/android/server/pm/dex/DexManager;->getDexPackage(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;I)Lcom/android/server/pm/dex/DexManager$DexSearchResult;+]Lcom/android/server/pm/dex/DexManager$PackageCodeLocations;Lcom/android/server/pm/dex/DexManager$PackageCodeLocations;]Ljava/util/Collection;Ljava/util/HashMap$Values;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$ValueIterator;
-HPLcom/android/server/pm/dex/DexManager;->getPackageUseInfoOrDefault(Ljava/lang/String;)Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;
-HSPLcom/android/server/pm/dex/DexManager;->isPlatformPackage(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;->loadInternal(Ljava/util/Map;)V
-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;]Lcom/android/server/pm/dex/DynamicCodeLogger;Lcom/android/server/pm/dex/DynamicCodeLogger;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
-HPLcom/android/server/pm/dex/DexoptOptions;-><init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V
-HPLcom/android/server/pm/dex/DexoptUtils;->encodeClassLoader(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/server/pm/dex/DexoptUtils;->encodeClassLoader(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/server/pm/dex/DexoptUtils;->encodeSharedLibraries(Ljava/util/List;)Ljava/lang/String;
-HPLcom/android/server/pm/dex/DexoptUtils;->getClassLoaderContexts(Lcom/android/server/pm/pkg/AndroidPackage;Ljava/util/List;[Z)[Ljava/lang/String;
 HSPLcom/android/server/pm/dex/DynamicCodeLogger;-><init>(Lcom/android/server/pm/Installer;)V
-HSPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;-><init>(ZILjava/lang/String;Ljava/lang/String;)V
-HPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->merge(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Z)Z
-HPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)V
-HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/pm/dex/PackageDexUsage;-><init>()V
-HPLcom/android/server/pm/dex/PackageDexUsage;->getPackageUseInfo(Ljava/lang/String;)Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;
-HSPLcom/android/server/pm/dex/PackageDexUsage;->record(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;ZLjava/lang/String;Ljava/lang/String;Z)Z
-HPLcom/android/server/pm/dex/PackageDexUsage;->write(Ljava/io/Writer;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;-><clinit>()V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;-><init>()V
 HSPLcom/android/server/pm/dex/ViewCompiler;-><init>(Ljava/lang/Object;Lcom/android/server/pm/Installer;)V
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl$BaseSnapshotImpl;-><init>(Lcom/android/server/pm/snapshot/PackageDataSnapshot;)V
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl$BaseSnapshotImpl;-><init>(Lcom/android/server/pm/snapshot/PackageDataSnapshot;Lcom/android/server/pm/local/PackageManagerLocalImpl$BaseSnapshotImpl-IA;)V
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl$BaseSnapshotImpl;->checkClosed()V
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl$BaseSnapshotImpl;->close()V
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl;-><init>(ILandroid/os/UserHandle;Lcom/android/server/pm/snapshot/PackageDataSnapshot;Lcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl;)V+]Landroid/os/UserHandle;Landroid/os/UserHandle;
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl;-><init>(ILandroid/os/UserHandle;Lcom/android/server/pm/snapshot/PackageDataSnapshot;Lcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl;Lcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl-IA;)V
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl;->checkClosed()V
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl;->close()V
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl;->getPackageState(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageState;+]Lcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl;Lcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl;->getPackageStates()Ljava/util/Map;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl;Lcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl;-><init>(Lcom/android/server/pm/snapshot/PackageDataSnapshot;)V
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl;-><init>(Lcom/android/server/pm/snapshot/PackageDataSnapshot;Lcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl-IA;)V
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl;->close()V
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl;->getPackageStates()Ljava/util/Map;+]Lcom/android/server/pm/local/PackageManagerLocalImpl$BaseSnapshotImpl;Lcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/local/PackageManagerLocalImpl;-><init>(Lcom/android/server/pm/PackageManagerService;)V
-HSPLcom/android/server/pm/parsing/PackageCacher$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl;->withFilteredSnapshot(ILandroid/os/UserHandle;)Lcom/android/server/pm/PackageManagerLocal$FilteredSnapshot;
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl;->withFilteredSnapshot(ILandroid/os/UserHandle;)Lcom/android/server/pm/local/PackageManagerLocalImpl$FilteredSnapshotImpl;
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl;->withUnfilteredSnapshot()Lcom/android/server/pm/PackageManagerLocal$UnfilteredSnapshot;+]Lcom/android/server/pm/local/PackageManagerLocalImpl;Lcom/android/server/pm/local/PackageManagerLocalImpl;
+HSPLcom/android/server/pm/local/PackageManagerLocalImpl;->withUnfilteredSnapshot()Lcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl;+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
 HSPLcom/android/server/pm/parsing/PackageCacher$$ExternalSyntheticLambda0;->accept(Ljava/io/File;Ljava/lang/String;)Z
-HSPLcom/android/server/pm/parsing/PackageCacher;->$r8$lambda$EHUdax2tnuvpowUcJ_gJlWWRagM(Ljava/lang/String;Ljava/io/File;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/parsing/PackageCacher;-><clinit>()V
 HSPLcom/android/server/pm/parsing/PackageCacher;-><init>(Ljava/io/File;)V
 HSPLcom/android/server/pm/parsing/PackageCacher;->cacheResult(Ljava/io/File;ILcom/android/server/pm/parsing/pkg/ParsedPackage;)V
-HSPLcom/android/server/pm/parsing/PackageCacher;->cleanCachedResult(Ljava/io/File;)V
-HSPLcom/android/server/pm/parsing/PackageCacher;->fromCacheEntry([B)Lcom/android/server/pm/parsing/pkg/ParsedPackage;
 HSPLcom/android/server/pm/parsing/PackageCacher;->fromCacheEntryStatic([B)Lcom/android/server/pm/parsing/pkg/ParsedPackage;
 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;->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;-><clinit>()V
@@ -7320,14 +7680,14 @@
 HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generate(Lcom/android/server/pm/pkg/AndroidPackage;[IJJJLjava/util/Set;Ljava/util/Set;Lcom/android/server/pm/pkg/PackageUserStateInternal;ILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/PackageInfo;
 HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateActivityInfo(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/component/ParsedActivity;JLcom/android/server/pm/pkg/PackageUserStateInternal;ILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/ActivityInfo;
 HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateActivityInfo(Lcom/android/server/pm/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;+]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/parsing/PackageInfoUtils;->generateApplicationInfo(Lcom/android/server/pm/pkg/AndroidPackage;JLcom/android/server/pm/pkg/PackageUserStateInternal;ILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/ApplicationInfo;+]Lcom/android/server/pm/pkg/SharedLibraryWrapper;Lcom/android/server/pm/pkg/SharedLibraryWrapper;]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;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateApplicationInfo(Lcom/android/server/pm/pkg/AndroidPackage;JLcom/android/server/pm/pkg/PackageUserStateInternal;ILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/ApplicationInfo;+]Lcom/android/server/pm/pkg/SharedLibraryWrapper;Lcom/android/server/pm/pkg/SharedLibraryWrapper;]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/ArrayList;]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 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;+]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/parsing/PackageInfoUtils;->generateProcessInfo(Ljava/util/Map;J)Landroid/util/ArrayMap;
-HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateProviderInfo(Lcom/android/server/pm/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/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;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateProviderInfo(Lcom/android/server/pm/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/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/ArrayList;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedProviderImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateServiceInfo(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/component/ParsedService;JLcom/android/server/pm/pkg/PackageUserStateInternal;ILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/ServiceInfo;
 HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateServiceInfo(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/component/ParsedService;JLcom/android/server/pm/pkg/PackageUserStateInternal;Landroid/content/pm/ApplicationInfo;ILcom/android/server/pm/pkg/PackageStateInternal;)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/parsing/PackageInfoUtils;->generateWithComponents(Lcom/android/server/pm/pkg/AndroidPackage;[IJJJLjava/util/Set;Ljava/util/Set;Lcom/android/server/pm/pkg/PackageUserStateInternal;ILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/PackageInfo;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedPermissionImpl;,Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Lcom/android/server/pm/pkg/component/ParsedUsesPermission;Lcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl;]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/Set;Landroid/util/ArraySet;,Ljava/util/Collections$EmptySet;]Lcom/android/server/pm/pkg/component/ParsedAttribution;Lcom/android/server/pm/pkg/component/ParsedAttributionImpl;
+HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateWithComponents(Lcom/android/server/pm/pkg/AndroidPackage;[IJJJLjava/util/Set;Ljava/util/Set;Lcom/android/server/pm/pkg/PackageUserStateInternal;ILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/PackageInfo;+]Lcom/android/server/pm/pkg/component/ParsedAttribution;Lcom/android/server/pm/pkg/component/ParsedAttributionImpl;]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedPermissionImpl;]Lcom/android/server/pm/pkg/component/ParsedUsesPermission;Lcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl;]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/pm/parsing/PackageInfoUtils;->getDataDir(Lcom/android/server/pm/pkg/AndroidPackage;I)Ljava/io/File;+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/PackageInfoUtils;->initForUser(Landroid/content/pm/ApplicationInfo;Lcom/android/server/pm/pkg/AndroidPackage;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/parsing/pkg/PackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/PackageInfoUtils;->updateApplicationInfo(Landroid/content/pm/ApplicationInfo;JLcom/android/server/pm/pkg/PackageUserState;)V+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Landroid/content/pm/overlay/OverlayPaths;Landroid/content/pm/overlay/OverlayPaths;]Ljava/util/List;Ljava/util/ArrayList;
@@ -7344,12 +7704,11 @@
 HSPLcom/android/server/pm/parsing/PackageParser2;->$r8$lambda$wJ5RQfmA6u_C5mkZkTAKrvEySIo(Landroid/content/pm/parsing/result/ParseInput$Callback;)Landroid/content/pm/parsing/result/ParseTypeImpl;
 HSPLcom/android/server/pm/parsing/PackageParser2;-><clinit>()V
 HSPLcom/android/server/pm/parsing/PackageParser2;-><init>([Ljava/lang/String;Landroid/util/DisplayMetrics;Ljava/io/File;Lcom/android/server/pm/parsing/PackageParser2$Callback;)V
-HSPLcom/android/server/pm/parsing/PackageParser2;->close()V
 HSPLcom/android/server/pm/parsing/PackageParser2;->lambda$new$0()Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/pm/parsing/PackageParser2;->lambda$new$1(Lcom/android/server/pm/parsing/PackageParser2$Callback;JLjava/lang/String;I)Z
 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/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/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;]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/library/AndroidHidlUpdater;-><init>()V
 HSPLcom/android/server/pm/parsing/library/AndroidHidlUpdater;->updatePackage(Lcom/android/server/pm/parsing/pkg/ParsedPackage;ZZ)V
 HSPLcom/android/server/pm/parsing/library/AndroidNetIpSecIkeUpdater;-><init>()V
@@ -7383,10 +7742,11 @@
 HSPLcom/android/server/pm/parsing/pkg/AndroidPackageUtils;->fillVersionCodes(Lcom/android/server/pm/pkg/AndroidPackage;Landroid/content/pm/PackageInfo;)V
 HSPLcom/android/server/pm/parsing/pkg/AndroidPackageUtils;->generateAppInfoWithoutState(Lcom/android/server/pm/pkg/AndroidPackage;)Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/pm/parsing/pkg/AndroidPackageUtils;->getAllCodePaths(Lcom/android/server/pm/pkg/AndroidPackage;)Ljava/util/List;
+HPLcom/android/server/pm/parsing/pkg/AndroidPackageUtils;->getHiddenApiEnforcementPolicy(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;)I
 HSPLcom/android/server/pm/parsing/pkg/AndroidPackageUtils;->getRawPrimaryCpuAbi(Lcom/android/server/pm/pkg/AndroidPackage;)Ljava/lang/String;
 HSPLcom/android/server/pm/parsing/pkg/AndroidPackageUtils;->getRawSecondaryCpuAbi(Lcom/android/server/pm/pkg/AndroidPackage;)Ljava/lang/String;
 HSPLcom/android/server/pm/parsing/pkg/AndroidPackageUtils;->getRealPackageOrNull(Lcom/android/server/pm/pkg/AndroidPackage;Z)Ljava/lang/String;
-HSPLcom/android/server/pm/parsing/pkg/AndroidPackageUtils;->hasComponentClassName(Lcom/android/server/pm/pkg/AndroidPackage;Ljava/lang/String;)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;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/parsing/pkg/AndroidPackageUtils;->hasComponentClassName(Lcom/android/server/pm/pkg/AndroidPackage;Ljava/lang/String;)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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/pkg/AndroidPackageUtils;->isLibrary(Lcom/android/server/pm/pkg/AndroidPackage;)Z
 HSPLcom/android/server/pm/parsing/pkg/AndroidPackageUtils;->isMatchForSystemOnly(Lcom/android/server/pm/pkg/PackageState;J)Z+]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/parsing/pkg/AndroidPackageUtils;->isOdm(Lcom/android/server/pm/pkg/AndroidPackage;)Z
@@ -7445,8 +7805,6 @@
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->addUsesLibrary(ILjava/lang/String;)Lcom/android/server/pm/parsing/pkg/ParsedPackage;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->addUsesLibrary(Ljava/lang/String;)Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->addUsesLibrary(Ljava/lang/String;)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
-HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->addUsesOptionalLibrary(ILjava/lang/String;)Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->addUsesOptionalLibrary(ILjava/lang/String;)Lcom/android/server/pm/parsing/pkg/ParsedPackage;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->addUsesOptionalLibrary(Ljava/lang/String;)Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->addUsesOptionalLibrary(Ljava/lang/String;)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->addUsesOptionalNativeLibrary(Ljava/lang/String;)Lcom/android/server/pm/parsing/pkg/PackageImpl;
@@ -7459,7 +7817,7 @@
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->asSplit([Ljava/lang/String;[Ljava/lang/String;[ILandroid/util/SparseArray;)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->assignDerivedFields()V
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->assignDerivedFields2()V
-HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->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/Collections$UnmodifiableMap;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
+HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->buildAppClassNamesByProcess()Landroid/util/ArrayMap;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/pkg/component/ParsedProcess;Lcom/android/server/pm/pkg/component/ParsedProcessImpl;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->capPermissionPriorities()Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->capPermissionPriorities()Lcom/android/server/pm/parsing/pkg/ParsedPackage;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->clearAdoptPermissions()Lcom/android/server/pm/parsing/pkg/PackageImpl;
@@ -7482,7 +7840,6 @@
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getClassLoaderName()Ljava/lang/String;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getCompileSdkVersion()I
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getCompileSdkVersionCodeName()Ljava/lang/String;
-HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getImplicitPermissions()Ljava/util/List;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getInstallLocation()I
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getInstrumentations()Ljava/util/List;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getKeySetMapping()Ljava/util/Map;
@@ -7516,7 +7873,6 @@
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getQueriesPackages()Ljava/util/List;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getQueriesProviders()Ljava/util/Set;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getReceivers()Ljava/util/List;
-HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getRequestedPermissions()Ljava/util/List;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getRequiredAccountType()Ljava/lang/String;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getResizeableActivity()Ljava/lang/Boolean;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getRestrictedAccountType()Ljava/lang/String;
@@ -7527,11 +7883,12 @@
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getSharedUserLabelResourceId()I
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getSigningDetails()Landroid/content/pm/SigningDetails;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getSplitCodePaths()[Ljava/lang/String;
-HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getSplitFlags()[I
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getSplitNames()[Ljava/lang/String;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getSplitRevisionCodes()[I
+HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getSplits()Ljava/util/List;+]Lcom/android/server/pm/parsing/pkg/PackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/AndroidPackageSplitImpl;Lcom/android/server/pm/pkg/AndroidPackageSplitImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getStaticSharedLibraryName()Ljava/lang/String;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getStaticSharedLibraryVersion()J
+HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getStorageUuid()Ljava/util/UUID;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getTargetSdkVersion()I
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getTaskAffinity()Ljava/lang/String;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getUiOptions()I
@@ -7545,7 +7902,6 @@
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getUsesSdkLibraries()Ljava/util/List;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getUsesSdkLibrariesVersionsMajor()[J
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getUsesStaticLibraries()Ljava/util/List;
-HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getUsesStaticLibrariesCertDigests()[[Ljava/lang/String;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getUsesStaticLibrariesVersions()[J
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getVersionCode()I
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->getVersionCodeMajor()I
@@ -7557,7 +7913,6 @@
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->hideAsParsed()Lcom/android/server/pm/parsing/pkg/ParsedPackage;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isAllowAudioPlaybackCapture()Z
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isAllowNativeHeapPointerTagging()Z
-HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isAllowUpdateOwnership()Z
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isAnyDensity()Z
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isApex()Z+]Lcom/android/server/pm/parsing/pkg/PackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isAttributionsUserVisible()Z
@@ -7573,7 +7928,7 @@
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isDefaultToDeviceProtectedStorage()Z+]Lcom/android/server/pm/parsing/pkg/PackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isDirectBootAware()Z
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isEnabled()Z+]Lcom/android/server/pm/parsing/pkg/PackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isExternalStorage()Z
+HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isExternalStorage()Z+]Lcom/android/server/pm/parsing/pkg/PackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isExtraLargeScreensSupported()Z
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isExtractNativeLibrariesRequested()Z
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isFactoryTest()Z
@@ -7637,8 +7992,6 @@
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->setAllowAudioPlaybackCapture(Z)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->setAllowNativeHeapPointerTagging(Z)Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->setAllowNativeHeapPointerTagging(Z)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
-HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->setAllowUpdateOwnership(Z)Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->setAllowUpdateOwnership(Z)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->setAnyDensity(I)Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->setAnyDensity(I)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->setApex(Z)Lcom/android/server/pm/parsing/pkg/PackageImpl;
@@ -7906,8 +8259,7 @@
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->setZygotePreloadName(Ljava/lang/String;)Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->setZygotePreloadName(Ljava/lang/String;)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->toAppInfoWithoutState()Landroid/content/pm/ApplicationInfo;+]Lcom/android/server/pm/parsing/pkg/PackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->toAppInfoWithoutStateWithoutFlags()Landroid/content/pm/ApplicationInfo;+]Lcom/android/server/pm/parsing/pkg/PackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Set;Landroid/util/ArraySet;,Ljava/util/Collections$UnmodifiableSet;,Ljava/util/Collections$EmptySet;
-HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->toString()Ljava/lang/String;
+HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->toAppInfoWithoutStateWithoutFlags()Landroid/content/pm/ApplicationInfo;+]Lcom/android/server/pm/parsing/pkg/PackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLcom/android/server/pm/permission/CompatibilityPermissionInfo;-><clinit>()V
 HSPLcom/android/server/pm/permission/CompatibilityPermissionInfo;-><init>(Ljava/lang/String;I)V
@@ -7915,6 +8267,7 @@
 HSPLcom/android/server/pm/permission/CompatibilityPermissionInfo;->getSdkVersion()I
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$2;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;Landroid/os/Looper;)V
+HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;->initFlags()V
 HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;->initGranted()V
 HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->createContextAsUser(Landroid/os/UserHandle;)Landroid/content/Context;
 HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->getPermissionInfo(Ljava/lang/String;)Landroid/content/pm/PermissionInfo;
@@ -7923,10 +8276,10 @@
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper-IA;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;-><clinit>()V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;-><init>(Landroid/content/Context;)V
+HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToSysComponentsAndPrivApps(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;I)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;
 HSPLcom/android/server/pm/permission/DevicePermissionState;-><init>()V
 HSPLcom/android/server/pm/permission/DevicePermissionState;->getOrCreateUserState(I)Lcom/android/server/pm/permission/UserPermissionState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/pm/permission/DevicePermissionState;->getUserIds()[I
 HSPLcom/android/server/pm/permission/DevicePermissionState;->getUserState(I)Lcom/android/server/pm/permission/UserPermissionState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/pm/permission/LegacyPermission;-><init>(Landroid/content/pm/PermissionInfo;II[I)V
 HSPLcom/android/server/pm/permission/LegacyPermission;-><init>(Ljava/lang/String;Ljava/lang/String;I)V
@@ -7934,28 +8287,30 @@
 HSPLcom/android/server/pm/permission/LegacyPermission;->getType()I
 HSPLcom/android/server/pm/permission/LegacyPermission;->read(Ljava/util/Map;Lcom/android/modules/utils/TypedXmlPullParser;)Z
 HSPLcom/android/server/pm/permission/LegacyPermission;->readInt(Lcom/android/modules/utils/TypedXmlPullParser;Ljava/lang/String;Ljava/lang/String;I)I
-HSPLcom/android/server/pm/permission/LegacyPermission;->write(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLcom/android/server/pm/permission/LegacyPermission;->write(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Ljava/lang/CharSequence;Ljava/lang/String;
 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;
+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
+HPLcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/content/Context;Landroid/app/ContextImpl;
 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
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;-><init>(Landroid/content/Context;)V
 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;->create(Landroid/content/Context;)Lcom/android/server/pm/permission/LegacyPermissionManagerInternal;
 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
 HSPLcom/android/server/pm/permission/LegacyPermissionSettings;->getPermissionTrees()Ljava/util/List;
 HSPLcom/android/server/pm/permission/LegacyPermissionSettings;->getPermissions()Ljava/util/List;
 HSPLcom/android/server/pm/permission/LegacyPermissionSettings;->readPermissionTrees(Lcom/android/modules/utils/TypedXmlPullParser;)V
 HSPLcom/android/server/pm/permission/LegacyPermissionSettings;->readPermissions(Landroid/util/ArrayMap;Lcom/android/modules/utils/TypedXmlPullParser;)V
 HSPLcom/android/server/pm/permission/LegacyPermissionSettings;->readPermissions(Lcom/android/modules/utils/TypedXmlPullParser;)V
 HSPLcom/android/server/pm/permission/LegacyPermissionSettings;->replacePermissions(Ljava/util/List;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/permission/LegacyPermission;Lcom/android/server/pm/permission/LegacyPermission;
-HSPLcom/android/server/pm/permission/LegacyPermissionSettings;->writePermissions(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Lcom/android/server/pm/permission/LegacyPermission;Lcom/android/server/pm/permission/LegacyPermission;
+HSPLcom/android/server/pm/permission/LegacyPermissionSettings;->writePermissions(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/permission/LegacyPermission;Lcom/android/server/pm/permission/LegacyPermission;
 HSPLcom/android/server/pm/permission/LegacyPermissionState$PermissionState;-><init>(Lcom/android/server/pm/permission/LegacyPermissionState$PermissionState;)V
 HSPLcom/android/server/pm/permission/LegacyPermissionState$PermissionState;-><init>(Lcom/android/server/pm/permission/LegacyPermissionState$PermissionState;Lcom/android/server/pm/permission/LegacyPermissionState$PermissionState-IA;)V
 HSPLcom/android/server/pm/permission/LegacyPermissionState$PermissionState;-><init>(Ljava/lang/String;ZZI)V
@@ -7981,7 +8336,6 @@
 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(II)Landroid/content/pm/PermissionInfo;
 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;
 HSPLcom/android/server/pm/permission/Permission;->getPermissionInfo()Landroid/content/pm/PermissionInfo;
@@ -7989,37 +8343,24 @@
 HSPLcom/android/server/pm/permission/Permission;->getRawGids()[I
 HSPLcom/android/server/pm/permission/Permission;->getType()I
 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
 HSPLcom/android/server/pm/permission/Permission;->isHardRestricted()Z
-HSPLcom/android/server/pm/permission/Permission;->isIncidentReportApprover()Z
-HSPLcom/android/server/pm/permission/Permission;->isInstaller()Z
 HSPLcom/android/server/pm/permission/Permission;->isInternal()Z
-HSPLcom/android/server/pm/permission/Permission;->isKnownSigner()Z
-HSPLcom/android/server/pm/permission/Permission;->isModule()Z
 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
-HSPLcom/android/server/pm/permission/Permission;->isPre23()Z
 HSPLcom/android/server/pm/permission/Permission;->isPreInstalled()Z
 HSPLcom/android/server/pm/permission/Permission;->isPrivileged()Z
-HSPLcom/android/server/pm/permission/Permission;->isRecents()Z
 HSPLcom/android/server/pm/permission/Permission;->isRetailDemo()Z
-HSPLcom/android/server/pm/permission/Permission;->isRole()Z
 HSPLcom/android/server/pm/permission/Permission;->isRuntime()Z
 HSPLcom/android/server/pm/permission/Permission;->isRuntimeOnly()Z
-HSPLcom/android/server/pm/permission/Permission;->isSetup()Z
 HSPLcom/android/server/pm/permission/Permission;->isSignature()Z
 HSPLcom/android/server/pm/permission/Permission;->isSoftRestricted()Z
-HSPLcom/android/server/pm/permission/Permission;->isSystemTextClassifier()Z
-HSPLcom/android/server/pm/permission/Permission;->isVendorPrivileged()Z
-HSPLcom/android/server/pm/permission/Permission;->isVerifier()Z
 HSPLcom/android/server/pm/permission/Permission;->setGids([IZ)V
 HSPLcom/android/server/pm/permission/PermissionAllowlist;-><init>()V
-HSPLcom/android/server/pm/permission/PermissionAllowlist;->getApexPrivilegedAppAllowlistState(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Boolean;
 HSPLcom/android/server/pm/permission/PermissionAllowlist;->getApexPrivilegedAppAllowlists()Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/permission/PermissionAllowlist;->getPrivilegedAppAllowlist()Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/permission/PermissionAllowlist;->getPrivilegedAppAllowlistState(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Boolean;
@@ -8028,136 +8369,97 @@
 HSPLcom/android/server/pm/permission/PermissionAllowlist;->getSystemExtPrivilegedAppAllowlist()Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/permission/PermissionAllowlist;->getSystemExtPrivilegedAppAllowlistState(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Boolean;
 HSPLcom/android/server/pm/permission/PermissionManagerService$AttributionSourceRegistry;-><init>(Landroid/content/Context;)V
-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;->isRegisteredAttributionSource(Landroid/content/AttributionSource;)Z+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;-><clinit>()V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;-><init>(Landroid/content/Context;)V
-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;
-HSPLcom/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$1$$ExternalSyntheticLambda0;]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;
+HSPLcom/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;
 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/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;
-HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->checkPermission(Ljava/lang/String;Landroid/content/AttributionSourceState;Ljava/lang/String;ZZZI)I
-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;
+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;
+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;
 HPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->finishDataDelivery(Landroid/content/Context;ILandroid/content/AttributionSourceState;Z)V
-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;Landroid/os/IBinder;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;
-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;->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;Landroid/os/IBinder;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;
+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;->resolvePackageName(Landroid/content/Context;Landroid/content/AttributionSource;)Ljava/lang/String;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;-><init>(Lcom/android/server/pm/permission/PermissionManagerService;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl-IA;)V
-HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I
-HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->checkUidPermission(ILjava/lang/String;)I
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getGidsForUid(I)[I
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getGrantedPermissions(Ljava/lang/String;I)Ljava/util/Set;
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getInstalledPermissions(Ljava/lang/String;)Ljava/util/Set;
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->isPermissionsReviewRequired(Ljava/lang/String;I)Z+]Lcom/android/server/pm/permission/PermissionManagerServiceInterface;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->onPackageAdded(Lcom/android/server/pm/pkg/PackageState;ZLcom/android/server/pm/pkg/AndroidPackage;)V
-HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->onStorageVolumeMounted(Ljava/lang/String;Z)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->readLegacyPermissionStateTEMP()V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->readLegacyPermissionsTEMP(Lcom/android/server/pm/permission/LegacyPermissionSettings;)V
 HSPLcom/android/server/pm/permission/PermissionManagerService;->-$$Nest$fgetmPermissionManagerServiceImpl(Lcom/android/server/pm/permission/PermissionManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInterface;
-HSPLcom/android/server/pm/permission/PermissionManagerService;->-$$Nest$mcheckPermission(Lcom/android/server/pm/permission/PermissionManagerService;Ljava/lang/String;Ljava/lang/String;I)I+]Lcom/android/server/pm/permission/PermissionManagerService;Lcom/android/server/pm/permission/PermissionManagerService;
-HSPLcom/android/server/pm/permission/PermissionManagerService;->-$$Nest$mcheckUidPermission(Lcom/android/server/pm/permission/PermissionManagerService;ILjava/lang/String;)I
 HSPLcom/android/server/pm/permission/PermissionManagerService;-><clinit>()V
 HSPLcom/android/server/pm/permission/PermissionManagerService;-><init>(Landroid/content/Context;Landroid/util/ArrayMap;)V
-HSPLcom/android/server/pm/permission/PermissionManagerService;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I+]Lcom/android/server/pm/permission/PermissionManagerServiceInterface;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
-HSPLcom/android/server/pm/permission/PermissionManagerService;->checkUidPermission(ILjava/lang/String;)I+]Lcom/android/server/pm/permission/PermissionManagerServiceInterface;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;
-HSPLcom/android/server/pm/permission/PermissionManagerService;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;I)I+]Lcom/android/server/pm/permission/PermissionManagerServiceInterface;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->getAllowlistedRestrictedPermissions(Ljava/lang/String;II)Ljava/util/List;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->getPermissionInfo(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;+]Lcom/android/server/pm/permission/PermissionManagerServiceInterface;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->getSplitPermissions()Ljava/util/List;
-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;
-HSPLcom/android/server/pm/permission/PermissionManagerService;->updatePermissionFlags(Ljava/lang/String;Ljava/lang/String;IIZI)V+]Lcom/android/server/pm/permission/PermissionManagerServiceInterface;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/pkg/AndroidPackage;ZLjava/lang/String;Ljava/lang/String;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda11;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda13;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;[I)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda5;-><init>()V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;ZLcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/AndroidPackage;ZLjava/util/List;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda8;->run()V
+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;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onPermissionUpdated([IZ)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;-><init>(Landroid/os/Looper;)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
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$30FRqUqDZHr7_Ro1coDB8sLyo8o(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;[ILcom/android/server/pm/pkg/PackageStateInternal;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$FN4LJLKHVfZdQgP34eJ6aMr_O64(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/pkg/AndroidPackage;ZLjava/lang/String;Ljava/lang/String;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;Lcom/android/server/pm/pkg/AndroidPackage;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$_Zb56J6Rubqw8ukZhbXnr-lsbAs(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Ljava/lang/String;I)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$kYrUuEj8gkLF7fhnfMJ66P1Vwec(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;[ILcom/android/server/pm/PackageSetting;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$xcoc5eWbQHMh-pZzBCQ03oT2zrQ(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;ZLcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/AndroidPackage;ZLjava/util/List;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->-$$Nest$fgetmPackageManagerInt(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;)Landroid/content/pm/PackageManagerInternal;
 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/pkg/AndroidPackage;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->addAllPermissionsInternal(Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/pkg/AndroidPackage;)Ljava/util/List;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->canAdoptPermissionsInternal(Ljava/lang/String;Lcom/android/server/pm/pkg/AndroidPackage;)Z
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->canGrantOemPermission(Lcom/android/server/pm/pkg/PackageState;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;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->checkIfLegacyStorageOpsNeedToBeUpdated(Lcom/android/server/pm/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/pkg/AndroidPackage;ZLjava/lang/String;I)I+]Lcom/android/server/pm/pkg/AndroidPackage;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;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->checkPrivilegedPermissionAllowlist(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/permission/Permission;)Z+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/ApexManager;Lcom/android/server/pm/ApexManager$ApexManagerImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->checkSinglePermissionInternalLocked(Lcom/android/server/pm/permission/UidPermissionState;Ljava/lang/String;Z)Z+]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->checkUidPermission(ILjava/lang/String;)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;->checkUidPermissionInternal(Lcom/android/server/pm/pkg/AndroidPackage;ILjava/lang/String;)I+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Ljava/util/Map;Ljava/util/HashMap;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->doNotifyRuntimePermissionStateChanged(Ljava/lang/String;I)V
 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;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->enforceGrantRevokeRuntimePermissionPermissions(Ljava/lang/String;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllPermissionsWithProtection(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;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllUserIds()[I
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllPermissionsWithProtection(I)Ljava/util/List;+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;
+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;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllowlistedRestrictedPermissionsInternal(Lcom/android/server/pm/pkg/AndroidPackage;II)Ljava/util/List;+]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-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/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;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getInstalledPermissions(Ljava/lang/String;)Ljava/util/Set;+]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;]Ljava/util/Set;Landroid/util/ArraySet;
-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;
-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;->getAllowlistedRestrictedPermissionsInternal(Lcom/android/server/pm/pkg/AndroidPackage;II)Ljava/util/List;+]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+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;->getGrantedPermissions(Ljava/lang/String;I)Ljava/util/Set;+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
+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/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;->getInstalledPermissions(Ljava/lang/String;)Ljava/util/Set;+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Ljava/util/Set;Landroid/util/ArraySet;
 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;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getPermissionInfo(Ljava/lang/String;ILjava/lang/String;)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/pkg/AndroidPackage;I)I
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getPrivilegedPermissionAllowlistState(Lcom/android/server/pm/pkg/PackageState;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Boolean;+]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/permission/PermissionAllowlist;Lcom/android/server/pm/permission/PermissionAllowlist;]Lcom/android/server/SystemConfig;Lcom/android/server/SystemConfig;]Lcom/android/server/pm/ApexManager;Lcom/android/server/pm/ApexManager$ApexManagerImpl;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getSourcePackageSetting(Lcom/android/server/pm/permission/Permission;)Lcom/android/server/pm/pkg/PackageStateInternal;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getSourcePackageSetting(Lcom/android/server/pm/permission/Permission;)Lcom/android/server/pm/pkg/PackageStateInternal;+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getSourcePackageSigningDetails(Lcom/android/server/pm/permission/Permission;)Landroid/content/pm/SigningDetails;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getSplitPermissionInfos()Ljava/util/List;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getSplitPermissions()Ljava/util/List;
 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/pkg/AndroidPackage;I)Lcom/android/server/pm/permission/UidPermissionState;+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getUidStateLocked(Lcom/android/server/pm/pkg/PackageStateInternal;I)Lcom/android/server/pm/permission/UidPermissionState;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getVolumeUuidForPackage(Lcom/android/server/pm/pkg/AndroidPackage;)Ljava/lang/String;
+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/pkg/AndroidPackage;)Ljava/lang/String;+]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$onPackageAddedInternal$17(ZLcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/AndroidPackage;ZLjava/util/List;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$readLegacyPermissionStateTEMP$15([ILcom/android/server/pm/pkg/PackageStateInternal;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$updatePermissions$11(Lcom/android/server/pm/pkg/AndroidPackage;ZLjava/lang/String;Ljava/lang/String;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;Lcom/android/server/pm/pkg/AndroidPackage;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$writeLegacyPermissionStateTEMP$16([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;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->notifyRuntimePermissionStateChanged(Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$writeLegacyPermissionStateTEMP$16([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/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/permission/UserPermissionState;Lcom/android/server/pm/permission/UserPermissionState;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Ljava/util/List;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;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->onPackageAdded(Lcom/android/server/pm/pkg/PackageState;ZLcom/android/server/pm/pkg/AndroidPackage;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->onPackageAddedInternal(Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/pkg/AndroidPackage;ZLcom/android/server/pm/pkg/AndroidPackage;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->onStorageVolumeMounted(Ljava/lang/String;Z)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->queryPermissionsByGroup(Ljava/lang/String;I)Ljava/util/List;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;]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/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Ljava/util/List;Ljava/util/ArrayList;]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;->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;->restorePermissionState(Lcom/android/server/pm/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/permission/Permission;Lcom/android/server/pm/permission/Permission;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableRandomAccessList;,Landroid/util/ArraySet;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/permission/PermissionState;Lcom/android/server/pm/permission/PermissionState;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/permission/DevicePermissionState;Lcom/android/server/pm/permission/DevicePermissionState;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/pm/permission/UserPermissionState;Lcom/android/server/pm/permission/UserPermissionState;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;,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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
-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$UnmodifiableRandomAccessList;,Landroid/util/ArraySet;]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;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->revokeRuntimePermissionsIfGroupChangedInternal(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/AndroidPackage;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->revokeStoragePermissionsIfScopeExpandedInternal(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/AndroidPackage;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->revokeSystemAlertWindowIfUpgradedPast23(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/AndroidPackage;)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->restorePermissionState(Lcom/android/server/pm/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/permission/Permission;Lcom/android/server/pm/permission/Permission;]Ljava/util/Collection;Landroid/util/ArraySet;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/permission/PermissionState;Lcom/android/server/pm/permission/PermissionState;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/permission/DevicePermissionState;Lcom/android/server/pm/permission/DevicePermissionState;]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/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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+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;Landroid/util/ArraySet;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->setInitialGrantForNewImplicitPermissionsLocked(Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/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/AndroidPackage;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;->shouldGrantPermissionByProtectionFlags(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/permission/Permission;Landroid/util/ArraySet;)Z+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/ApexManager;Lcom/android/server/pm/ApexManager$ApexManagerImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->shouldGrantPermissionByProtectionFlags(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/permission/Permission;Landroid/util/ArraySet;)Z+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/ApexManager;Lcom/android/server/pm/ApexManager$ApexManagerImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->shouldGrantPermissionBySignature(Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/permission/Permission;)Z+]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->updateAllPermissions(Ljava/lang/String;Z)V
-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;
-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$1;]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$UnmodifiableRandomAccessList;]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;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-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/pkg/AndroidPackage;)Z
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->updatePermissions(Ljava/lang/String;Lcom/android/server/pm/pkg/AndroidPackage;Ljava/lang/String;ILcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->writeLegacyPermissionsTEMP(Lcom/android/server/pm/permission/LegacyPermissionSettings;)V+]Lcom/android/server/pm/permission/LegacyPermissionSettings;Lcom/android/server/pm/permission/LegacyPermissionSettings;]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;
+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/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;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+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;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]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;->writeLegacyPermissionsTEMP(Lcom/android/server/pm/permission/LegacyPermissionSettings;)V+]Lcom/android/server/pm/permission/LegacyPermissionSettings;Lcom/android/server/pm/permission/LegacyPermissionSettings;]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;
 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
@@ -8167,7 +8469,7 @@
 HSPLcom/android/server/pm/permission/PermissionRegistry;->getPermissionTrees()Ljava/util/Collection;
 HSPLcom/android/server/pm/permission/PermissionState;-><init>(Lcom/android/server/pm/permission/Permission;)V
 HSPLcom/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;
@@ -8181,43 +8483,42 @@
 HSPLcom/android/server/pm/permission/UidPermissionState;->getOrCreatePermissionState(Lcom/android/server/pm/permission/Permission;)Lcom/android/server/pm/permission/PermissionState;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;
 HSPLcom/android/server/pm/permission/UidPermissionState;->getPermissionFlags(Ljava/lang/String;)I+]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/UidPermissionState;->getPermissionState(Ljava/lang/String;)Lcom/android/server/pm/permission/PermissionState;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HSPLcom/android/server/pm/permission/UidPermissionState;->getPermissionStates()Ljava/util/List;
 HSPLcom/android/server/pm/permission/UidPermissionState;->grantPermission(Lcom/android/server/pm/permission/Permission;)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;
 HSPLcom/android/server/pm/permission/UidPermissionState;->hasPermissionState(Ljava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/permission/UidPermissionState;->invalidateCache()V
-HSPLcom/android/server/pm/permission/UidPermissionState;->isMissing()Z
 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;
 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;->reset()V
+HSPLcom/android/server/pm/permission/UidPermissionState;->revokePermission(Lcom/android/server/pm/permission/Permission;)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/UidPermissionState;->setMissing(Z)V
-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/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/UserPermissionState;-><init>()V
+HSPLcom/android/server/pm/permission/UserPermissionState;->areInstallPermissionsFixed(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/UserPermissionState;->checkAppId(I)V
 HSPLcom/android/server/pm/permission/UserPermissionState;->getOrCreateUidState(I)Lcom/android/server/pm/permission/UidPermissionState;+]Lcom/android/server/pm/permission/UserPermissionState;Lcom/android/server/pm/permission/UserPermissionState;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/pm/permission/UserPermissionState;->getUidState(I)Lcom/android/server/pm/permission/UidPermissionState;+]Lcom/android/server/pm/permission/UserPermissionState;Lcom/android/server/pm/permission/UserPermissionState;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/pm/permission/UserPermissionState;->setInstallPermissionsFixed(Ljava/lang/String;Z)V
+HSPLcom/android/server/pm/pkg/AndroidPackageSplitImpl;->getPath()Ljava/lang/String;
+HSPLcom/android/server/pm/pkg/AndroidPackageSplitImpl;->isHasCode()Z
+HPLcom/android/server/pm/pkg/PackageStateInternal;->getUserStateOrDefault(I)Lcom/android/server/pm/pkg/PackageUserState;+]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;
 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;-><init>(Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->getApexModuleName()Ljava/lang/String;
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->getLastPackageUsageTimeInMills()[J+]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;
-HPLcom/android/server/pm/pkg/PackageStateUnserialized;->getNonNativeUsesLibraryInfos()Ljava/util/List;
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->getOverrideSeInfo()Ljava/lang/String;
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->getSeInfo()Ljava/lang/String;
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->getUsesLibraryFiles()Ljava/util/List;
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->getUsesLibraryInfos()Ljava/util/List;
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->isHiddenUntilInstalled()Z
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->isUpdatedSystemApp()Z
-HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->lazyInitLastPackageUsageTimeInMills()[J
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->setApexModuleName(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageStateUnserialized;
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->setApkInUpdatedApex(Z)Lcom/android/server/pm/pkg/PackageStateUnserialized;
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->setLastPackageUsageTimeInMills(IJ)Lcom/android/server/pm/pkg/PackageStateUnserialized;
-HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->setOverrideSeInfo(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageStateUnserialized;
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->setSeInfo(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageStateUnserialized;
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->setUpdatedSystemApp(Z)Lcom/android/server/pm/pkg/PackageStateUnserialized;
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->setUsesLibraryFiles(Ljava/util/List;)Lcom/android/server/pm/pkg/PackageStateUnserialized;
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->setUsesLibraryInfos(Ljava/util/List;)Lcom/android/server/pm/pkg/PackageStateUnserialized;
-HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->updateFrom(Lcom/android/server/pm/pkg/PackageStateUnserialized;)V
+HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->updateFrom(Lcom/android/server/pm/pkg/PackageStateUnserialized;)V+]Lcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;]Ljava/util/List;Ljava/util/ArrayList;
 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/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/pkg/PackageUserStateDefault;-><init>()V
@@ -8235,7 +8536,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
 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;
+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;
 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;
@@ -8244,16 +8545,12 @@
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->getEnabledComponentsNoCopy()Lcom/android/server/utils/WatchedArraySet;
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->getEnabledState()I
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->getFirstInstallTimeMillis()J
-HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->getHarmfulAppWarning()Ljava/lang/String;
-HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->getInstallReason()I
-HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->getLastDisableAppCaller()Ljava/lang/String;
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->getOverrideLabelIconForComponent(Landroid/content/ComponentName;)Landroid/util/Pair;
-HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->isComponentDisabled(Ljava/lang/String;)Z
-HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->isComponentEnabled(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->isComponentDisabled(Ljava/lang/String;)Z+]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;
+HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->isComponentEnabled(Ljava/lang/String;)Z+]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->isHidden()Z
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->isInstalled()Z
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->isInstantApp()Z
-HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->isNotLaunched()Z
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->isStopped()Z
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->isSuspended()Z
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->isVirtualPreload()Z
@@ -8264,7 +8561,6 @@
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->setDistractionFlags(I)Lcom/android/server/pm/pkg/PackageUserStateImpl;
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->setEnabledComponents(Landroid/util/ArraySet;)Lcom/android/server/pm/pkg/PackageUserStateImpl;
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->setEnabledState(I)Lcom/android/server/pm/pkg/PackageUserStateImpl;
-HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->setFirstInstallTime(J)Lcom/android/server/pm/pkg/PackageUserStateImpl;
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->setHarmfulAppWarning(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageUserStateImpl;
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->setHidden(Z)Lcom/android/server/pm/pkg/PackageUserStateImpl;
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->setInstallReason(I)Lcom/android/server/pm/pkg/PackageUserStateImpl;
@@ -8298,19 +8594,17 @@
 HSPLcom/android/server/pm/pkg/component/ComponentMutateUtils;->setParsedPermissionGroup(Lcom/android/server/pm/pkg/component/ParsedPermission;Lcom/android/server/pm/pkg/component/ParsedPermissionGroup;)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;
 HSPLcom/android/server/pm/pkg/component/ComponentParseUtils;->isImplicitlyExposedIntent(Lcom/android/server/pm/pkg/component/ParsedIntentInfo;)Z
-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/ParsedServiceImpl;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;
+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/ParsedServiceImpl;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,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
-HSPLcom/android/server/pm/pkg/component/ParsedActivityImpl$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/server/pm/pkg/component/ParsedActivityImpl;
-HSPLcom/android/server/pm/pkg/component/ParsedActivityImpl$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLcom/android/server/pm/pkg/component/ParsedActivityImpl;-><clinit>()V
 HSPLcom/android/server/pm/pkg/component/ParsedActivityImpl;-><init>()V
 HSPLcom/android/server/pm/pkg/component/ParsedActivityImpl;-><init>(Landroid/os/Parcel;)V
@@ -8370,18 +8664,15 @@
 HSPLcom/android/server/pm/pkg/component/ParsedActivityUtils;-><clinit>()V
 HSPLcom/android/server/pm/pkg/component/ParsedActivityUtils;->getActivityConfigChanges(II)I
 HSPLcom/android/server/pm/pkg/component/ParsedActivityUtils;->getActivityResizeMode(Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/TypedArray;I)I
-HSPLcom/android/server/pm/pkg/component/ParsedActivityUtils;->parseActivityAlias(Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ZLjava/lang/String;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;+]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/parsing/ParsingPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Lcom/android/server/pm/pkg/component/ParsedComponentImpl;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Landroid/content/pm/parsing/result/ParseResult;Landroid/content/pm/parsing/result/ParseTypeImpl;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;
-HSPLcom/android/server/pm/pkg/component/ParsedActivityUtils;->parseActivityOrAlias(Lcom/android/server/pm/pkg/component/ParsedActivityImpl;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Ljava/lang/String;Landroid/content/res/XmlResourceParser;Landroid/content/res/Resources;Landroid/content/res/TypedArray;ZZZLandroid/content/pm/parsing/result/ParseInput;III)Landroid/content/pm/parsing/result/ParseResult;+]Lcom/android/server/pm/pkg/component/ParsedActivityImpl;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/content/pm/parsing/result/ParseResult;Landroid/content/pm/parsing/result/ParseTypeImpl;]Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Lcom/android/server/pm/pkg/component/ParsedMainComponentImpl;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/parsing/result/ParseInput;Landroid/content/pm/parsing/result/ParseTypeImpl;]Lcom/android/server/pm/pkg/component/ParsedComponentImpl;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;
+HSPLcom/android/server/pm/pkg/component/ParsedActivityUtils;->parseActivityAlias(Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ZLjava/lang/String;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;+]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/parsing/ParsingPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Lcom/android/server/pm/pkg/component/ParsedComponentImpl;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Landroid/content/pm/parsing/result/ParseResult;Landroid/content/pm/parsing/result/ParseTypeImpl;
+HSPLcom/android/server/pm/pkg/component/ParsedActivityUtils;->parseActivityOrAlias(Lcom/android/server/pm/pkg/component/ParsedActivityImpl;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Ljava/lang/String;Landroid/content/res/XmlResourceParser;Landroid/content/res/Resources;Landroid/content/res/TypedArray;ZZZLandroid/content/pm/parsing/result/ParseInput;III)Landroid/content/pm/parsing/result/ParseResult;+]Lcom/android/server/pm/pkg/component/ParsedActivityImpl;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/content/pm/parsing/result/ParseResult;Landroid/content/pm/parsing/result/ParseTypeImpl;]Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Lcom/android/server/pm/pkg/component/ParsedMainComponentImpl;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/parsing/result/ParseInput;Landroid/content/pm/parsing/result/ParseTypeImpl;]Lcom/android/server/pm/pkg/component/ParsedComponentImpl;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLcom/android/server/pm/pkg/component/ParsedActivityUtils;->parseActivityOrReceiver([Ljava/lang/String;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;IZLjava/lang/String;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/component/ParsedActivityUtils;->parseActivityWindowLayout(Landroid/content/res/Resources;Landroid/util/AttributeSet;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/component/ParsedActivityUtils;->parseIntentFilter(Lcom/android/server/pm/pkg/parsing/ParsingPackage;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;ZZLandroid/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/ParsedActivityUtils;->resolveActivityWindowLayout(Lcom/android/server/pm/pkg/component/ParsedActivity;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/component/ParsedApexSystemServiceImpl$1;-><init>()V
-HSPLcom/android/server/pm/pkg/component/ParsedApexSystemServiceImpl$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/server/pm/pkg/component/ParsedApexSystemServiceImpl;
-HSPLcom/android/server/pm/pkg/component/ParsedApexSystemServiceImpl$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLcom/android/server/pm/pkg/component/ParsedApexSystemServiceImpl;-><clinit>()V
 HSPLcom/android/server/pm/pkg/component/ParsedApexSystemServiceImpl;-><init>()V
-HSPLcom/android/server/pm/pkg/component/ParsedApexSystemServiceImpl;-><init>(Landroid/os/Parcel;)V
 HSPLcom/android/server/pm/pkg/component/ParsedApexSystemServiceImpl;->getInitOrder()I
 HSPLcom/android/server/pm/pkg/component/ParsedApexSystemServiceImpl;->getJarPath()Ljava/lang/String;
 HSPLcom/android/server/pm/pkg/component/ParsedApexSystemServiceImpl;->getMaxSdkVersion()Ljava/lang/String;
@@ -8395,10 +8686,7 @@
 HSPLcom/android/server/pm/pkg/component/ParsedApexSystemServiceImpl;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLcom/android/server/pm/pkg/component/ParsedApexSystemServiceUtils;->parseApexSystemService(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/ParsedAttributionImpl$1;-><init>()V
-HSPLcom/android/server/pm/pkg/component/ParsedAttributionImpl$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/server/pm/pkg/component/ParsedAttributionImpl;
-HSPLcom/android/server/pm/pkg/component/ParsedAttributionImpl$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLcom/android/server/pm/pkg/component/ParsedAttributionImpl;-><clinit>()V
-HSPLcom/android/server/pm/pkg/component/ParsedAttributionImpl;-><init>(Landroid/os/Parcel;)V
 HSPLcom/android/server/pm/pkg/component/ParsedAttributionImpl;-><init>(Ljava/lang/String;ILjava/util/List;)V
 HSPLcom/android/server/pm/pkg/component/ParsedAttributionImpl;->getInheritFrom()Ljava/util/List;
 HSPLcom/android/server/pm/pkg/component/ParsedAttributionImpl;->getTag()Ljava/lang/String;
@@ -8410,7 +8698,7 @@
 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/ParsedInstrumentationImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;
+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;->getDescriptionRes()I
 HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->getFlags()I
 HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->getIcon()I
@@ -8435,12 +8723,9 @@
 HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->writeToParcel(Landroid/os/Parcel;I)V
 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;
-HSPLcom/android/server/pm/pkg/component/ParsedInstrumentationImpl$1;-><init>()V
-HSPLcom/android/server/pm/pkg/component/ParsedInstrumentationImpl;-><clinit>()V
+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;+]Lcom/android/server/pm/pkg/parsing/ParsingPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]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;
 HSPLcom/android/server/pm/pkg/component/ParsedIntentInfoImpl$1;-><init>()V
 HSPLcom/android/server/pm/pkg/component/ParsedIntentInfoImpl$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;
-HSPLcom/android/server/pm/pkg/component/ParsedIntentInfoImpl$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;-><clinit>()V
 HSPLcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;-><init>()V
 HSPLcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;-><init>(Landroid/os/Parcel;)V
@@ -8455,7 +8740,7 @@
 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/util/TypedValue;Landroid/util/TypedValue;]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;
+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;]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
@@ -8477,13 +8762,10 @@
 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/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/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;]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
 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;
@@ -8491,8 +8773,6 @@
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->setRequestRes(I)Lcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionImpl$1;-><init>()V
-HSPLcom/android/server/pm/pkg/component/ParsedPermissionImpl$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/server/pm/pkg/component/ParsedPermissionImpl;
-HSPLcom/android/server/pm/pkg/component/ParsedPermissionImpl$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionImpl;-><clinit>()V
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionImpl;-><init>()V
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionImpl;-><init>(Landroid/os/Parcel;)V
@@ -8519,11 +8799,8 @@
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionUtils;->parsePermissionGroup(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;
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionUtils;->parsePermissionTree(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;
 HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl$1;-><init>()V
-HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/server/pm/pkg/component/ParsedProcessImpl;
-HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl;-><clinit>()V
 HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl;-><init>()V
-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;
 HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl;->getName()Ljava/lang/String;
@@ -8538,8 +8815,6 @@
 HSPLcom/android/server/pm/pkg/component/ParsedProcessUtils;->parseProcess(Ljava/util/Set;[Ljava/lang/String;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ILandroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/component/ParsedProcessUtils;->parseProcesses([Ljava/lang/String;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ILandroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/component/ParsedProviderImpl$1;-><init>()V
-HSPLcom/android/server/pm/pkg/component/ParsedProviderImpl$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/server/pm/pkg/component/ParsedProviderImpl;
-HSPLcom/android/server/pm/pkg/component/ParsedProviderImpl$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLcom/android/server/pm/pkg/component/ParsedProviderImpl;-><clinit>()V
 HSPLcom/android/server/pm/pkg/component/ParsedProviderImpl;-><init>()V
 HSPLcom/android/server/pm/pkg/component/ParsedProviderImpl;-><init>(Landroid/os/Parcel;)V
@@ -8569,8 +8844,6 @@
 HSPLcom/android/server/pm/pkg/component/ParsedProviderUtils;->parseProvider([Ljava/lang/String;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;IZLjava/lang/String;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/component/ParsedProviderUtils;->parseProviderTags(Lcom/android/server/pm/pkg/parsing/ParsingPackage;Ljava/lang/String;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ZLcom/android/server/pm/pkg/component/ParsedProviderImpl;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/component/ParsedServiceImpl$1;-><init>()V
-HSPLcom/android/server/pm/pkg/component/ParsedServiceImpl$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/server/pm/pkg/component/ParsedServiceImpl;
-HSPLcom/android/server/pm/pkg/component/ParsedServiceImpl$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLcom/android/server/pm/pkg/component/ParsedServiceImpl;-><clinit>()V
 HSPLcom/android/server/pm/pkg/component/ParsedServiceImpl;-><init>()V
 HSPLcom/android/server/pm/pkg/component/ParsedServiceImpl;-><init>(Landroid/os/Parcel;)V
@@ -8581,8 +8854,6 @@
 HSPLcom/android/server/pm/pkg/component/ParsedServiceImpl;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLcom/android/server/pm/pkg/component/ParsedServiceUtils;->parseService([Ljava/lang/String;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;IZLjava/lang/String;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl$1;-><init>()V
-HSPLcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl;
-HSPLcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl;-><clinit>()V
 HSPLcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl;-><init>(Landroid/os/Parcel;)V
 HSPLcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl;-><init>(Ljava/lang/String;I)V
@@ -8593,10 +8864,8 @@
 HSPLcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper$UserStateWriteWrapper;-><init>(Lcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper$UserStateWriteWrapper-IA;)V
 HSPLcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper;-><init>()V
 HSPLcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper;-><init>(Lcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper-IA;)V
-HSPLcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper;->userState(I)Lcom/android/server/pm/pkg/mutate/PackageUserStateWrite;
 HSPLcom/android/server/pm/pkg/mutate/PackageStateMutator;-><clinit>()V
 HSPLcom/android/server/pm/pkg/mutate/PackageStateMutator;-><init>(Ljava/util/function/Function;Ljava/util/function/Function;)V
-HSPLcom/android/server/pm/pkg/mutate/PackageStateMutator;->onFinished()V
 HSPLcom/android/server/pm/pkg/mutate/PackageStateMutator;->onPackageStateChanged()V+]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;-><clinit>()V
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;-><init>([Ljava/lang/String;Landroid/util/DisplayMetrics;Ljava/util/List;Lcom/android/server/pm/pkg/parsing/ParsingPackageUtils$Callback;)V
@@ -8613,7 +8882,7 @@
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->getSigningDetails(Landroid/content/pm/parsing/result/ParseInput;Ljava/lang/String;ZI[Ljava/lang/String;Z)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->getSigningDetails(Landroid/content/pm/parsing/result/ParseInput;Ljava/lang/String;ZZLandroid/content/pm/SigningDetails;I)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->hasDomainURLs(Lcom/android/server/pm/pkg/parsing/ParsingPackage;)Z
-HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->hasTooManyComponents(Lcom/android/server/pm/pkg/parsing/ParsingPackage;)Z
+HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->hasTooManyComponents(Lcom/android/server/pm/pkg/parsing/ParsingPackage;)Z+]Lcom/android/server/pm/pkg/parsing/ParsingPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->nonConfigString(IILandroid/content/res/TypedArray;)Ljava/lang/String;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->nonResString(ILandroid/content/res/TypedArray;)Ljava/lang/String;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseAdditionalCertificates(Landroid/content/pm/parsing/result/ParseInput;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/content/pm/parsing/result/ParseResult;
@@ -8625,7 +8894,7 @@
 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;+]Ljava/lang/String;Ljava/lang/String;]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/res/Resources;Landroid/content/res/Resources;]Landroid/content/pm/parsing/result/ParseInput;Landroid/content/pm/parsing/result/ParseTypeImpl;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;]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$3;
+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;+]Ljava/lang/String;Ljava/lang/String;]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/res/Resources;Landroid/content/res/Resources;]Landroid/content/pm/parsing/result/ParseInput;Landroid/content/pm/parsing/result/ParseTypeImpl;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]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$3;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseClusterPackage(Landroid/content/pm/parsing/result/ParseInput;Ljava/io/File;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;->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;
@@ -8653,10 +8922,9 @@
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseUsesFeature(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;->parseUsesLibrary(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;->parseUsesNativeLibrary(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;->parseUsesPermission(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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/pkg/parsing/ParsingPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackageUtils;Lcom/android/server/pm/pkg/parsing/ParsingPackageUtils;]Lcom/android/server/pm/pkg/component/ParsedUsesPermission;Lcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/pm/parsing/result/ParseInput;Landroid/content/pm/parsing/result/ParseTypeImpl;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;
+HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseUsesPermission(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;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/pkg/parsing/ParsingPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackageUtils;Lcom/android/server/pm/pkg/parsing/ParsingPackageUtils;]Lcom/android/server/pm/pkg/component/ParsedUsesPermission;Lcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/res/Resources;Landroid/content/res/Resources;]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/ParsingPackageUtils$Callback;Lcom/android/server/pm/PackageManagerService$3;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseUsesSdk(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;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseUsesStaticLibrary(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;->readKeySetMapping(Landroid/os/Parcel;)Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->resId(ILandroid/content/res/TypedArray;)I
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->setMaxAspectRatio(Lcom/android/server/pm/pkg/parsing/ParsingPackage;)V
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->setMinAspectRatio(Lcom/android/server/pm/pkg/parsing/ParsingPackage;)V
@@ -8665,12 +8933,11 @@
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->writeKeySetMapping(Landroid/os/Parcel;Ljava/util/Map;)V
 HSPLcom/android/server/pm/pkg/parsing/ParsingUtils$StringPairListParceler;-><init>()V
 HSPLcom/android/server/pm/pkg/parsing/ParsingUtils$StringPairListParceler;->parcel(Ljava/util/List;Landroid/os/Parcel;I)V
-HSPLcom/android/server/pm/pkg/parsing/ParsingUtils$StringPairListParceler;->unparcel(Landroid/os/Parcel;)Ljava/util/List;
-HSPLcom/android/server/pm/pkg/parsing/ParsingUtils;->buildClassName(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String;
+HSPLcom/android/server/pm/pkg/parsing/ParsingUtils;->buildClassName(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/CharSequence;Ljava/lang/String;
 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/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/server/pm/resolution/ComponentResolver$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/pm/resolution/ComponentResolver$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/pm/resolution/ComponentResolver$$ExternalSyntheticLambda1;-><init>()V
@@ -8679,7 +8946,7 @@
 HSPLcom/android/server/pm/resolution/ComponentResolver$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/pm/resolution/ComponentResolver$1;-><init>(Lcom/android/server/pm/resolution/ComponentResolver;Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/utils/Watchable;Lcom/android/server/pm/UserNeedsBadgingCache;)V
 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;->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;
@@ -8692,13 +8959,13 @@
 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;
 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$UnmodifiableRandomAccessList;,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;
+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/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;
 HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->sortResults(Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/resolution/ComponentResolver$MimeGroupsAwareIntentResolver;-><init>(Lcom/android/server/pm/UserManagerService;)V
 HSPLcom/android/server/pm/resolution/ComponentResolver$MimeGroupsAwareIntentResolver;->addFilter(Lcom/android/server/pm/snapshot/PackageDataSnapshot;Landroid/util/Pair;)V
 HSPLcom/android/server/pm/resolution/ComponentResolver$MimeGroupsAwareIntentResolver;->applyMimeGroups(Lcom/android/server/pm/Computer;Landroid/util/Pair;)V
-HSPLcom/android/server/pm/resolution/ComponentResolver$MimeGroupsAwareIntentResolver;->isFilterStopped(Lcom/android/server/pm/Computer;Landroid/util/Pair;I)Z+]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/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
-HSPLcom/android/server/pm/resolution/ComponentResolver$MimeGroupsAwareIntentResolver;->isFilterStopped(Lcom/android/server/pm/Computer;Ljava/lang/Object;I)Z+]Lcom/android/server/pm/resolution/ComponentResolver$MimeGroupsAwareIntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ReceiverIntentResolver;,Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;
+HSPLcom/android/server/pm/resolution/ComponentResolver$MimeGroupsAwareIntentResolver;->isFilterStopped(Lcom/android/server/pm/Computer;Landroid/util/Pair;I)Z+]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/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/resolution/ComponentResolver$MimeGroupsAwareIntentResolver;->isFilterStopped(Lcom/android/server/pm/Computer;Ljava/lang/Object;I)Z+]Lcom/android/server/pm/resolution/ComponentResolver$MimeGroupsAwareIntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ReceiverIntentResolver;,Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;,Lcom/android/server/pm/resolution/ComponentResolver$ServiceIntentResolver;
 HSPLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;-><init>(Lcom/android/server/pm/UserManagerService;)V
 HSPLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->addFilter(Lcom/android/server/pm/snapshot/PackageDataSnapshot;Landroid/util/Pair;)V
 HSPLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->addProvider(Lcom/android/server/pm/Computer;Lcom/android/server/pm/pkg/component/ParsedProvider;)V
@@ -8722,7 +8989,7 @@
 HSPLcom/android/server/pm/resolution/ComponentResolver$ServiceIntentResolver;->newResult(Lcom/android/server/pm/Computer;Landroid/util/Pair;IIJ)Landroid/content/pm/ResolveInfo;+]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/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/resolution/ComponentResolver$ServiceIntentResolver;->newResult(Lcom/android/server/pm/Computer;Ljava/lang/Object;IIJ)Ljava/lang/Object;+]Lcom/android/server/pm/resolution/ComponentResolver$ServiceIntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ServiceIntentResolver;
 HSPLcom/android/server/pm/resolution/ComponentResolver$ServiceIntentResolver;->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$ServiceIntentResolver;->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/ParsedServiceImpl;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;,Ljava/util/ArrayList;]Lcom/android/server/pm/resolution/ComponentResolver$ServiceIntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ServiceIntentResolver;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/pm/resolution/ComponentResolver$ServiceIntentResolver;->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/ParsedServiceImpl;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/resolution/ComponentResolver$ServiceIntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ServiceIntentResolver;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/resolution/ComponentResolver$ServiceIntentResolver;->sortResults(Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/resolution/ComponentResolver;->$r8$lambda$q1lJ9rfFnT_oyvfX2vuSgkxXQfE(Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;)I
 HSPLcom/android/server/pm/resolution/ComponentResolver;-><clinit>()V
@@ -8733,9 +9000,7 @@
 HSPLcom/android/server/pm/resolution/ComponentResolver;->addReceiversLocked(Lcom/android/server/pm/Computer;Lcom/android/server/pm/pkg/AndroidPackage;Z)V
 HSPLcom/android/server/pm/resolution/ComponentResolver;->addServicesLocked(Lcom/android/server/pm/Computer;Lcom/android/server/pm/pkg/AndroidPackage;Z)V
 HSPLcom/android/server/pm/resolution/ComponentResolver;->adjustPriority(Lcom/android/server/pm/Computer;Ljava/util/List;Lcom/android/server/pm/pkg/component/ParsedActivity;Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Ljava/lang/String;)V
-HSPLcom/android/server/pm/resolution/ComponentResolver;->assertProvidersNotDefined(Lcom/android/server/pm/pkg/AndroidPackage;)V
 HSPLcom/android/server/pm/resolution/ComponentResolver;->findMatchingActivity(Ljava/util/List;Lcom/android/server/pm/pkg/component/ParsedActivity;)Lcom/android/server/pm/pkg/component/ParsedActivity;
-HSPLcom/android/server/pm/resolution/ComponentResolver;->fixProtectedFilterPriorities(Ljava/lang/String;)V
 HSPLcom/android/server/pm/resolution/ComponentResolver;->getIntentListSubset(Ljava/util/List;Ljava/util/function/Function;Ljava/util/Iterator;)V
 HSPLcom/android/server/pm/resolution/ComponentResolver;->isProtectedAction(Landroid/content/IntentFilter;)Z
 HSPLcom/android/server/pm/resolution/ComponentResolver;->lambda$static$0(Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;)I
@@ -8743,9 +9008,9 @@
 HSPLcom/android/server/pm/resolution/ComponentResolver;->snapshot()Lcom/android/server/pm/resolution/ComponentResolverApi;
 HSPLcom/android/server/pm/resolution/ComponentResolverBase;-><init>(Lcom/android/server/pm/UserManagerService;)V
 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;->getReceiver(Landroid/content/ComponentName;)Lcom/android/server/pm/pkg/component/ParsedActivity;
+HSPLcom/android/server/pm/resolution/ComponentResolverBase;->getReceiver(Landroid/content/ComponentName;)Lcom/android/server/pm/pkg/component/ParsedActivity;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/resolution/ComponentResolverBase;->getService(Landroid/content/ComponentName;)Lcom/android/server/pm/pkg/component/ParsedService;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HSPLcom/android/server/pm/resolution/ComponentResolverBase;->queryActivities(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JI)Ljava/util/List;
+HSPLcom/android/server/pm/resolution/ComponentResolverBase;->queryActivities(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JI)Ljava/util/List;+]Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;
 HSPLcom/android/server/pm/resolution/ComponentResolverBase;->queryActivities(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JLjava/util/List;I)Ljava/util/List;+]Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;
 HSPLcom/android/server/pm/resolution/ComponentResolverBase;->queryProvider(Lcom/android/server/pm/Computer;Ljava/lang/String;JI)Landroid/content/pm/ProviderInfo;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedProviderImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/resolution/ComponentResolverBase;->queryProviders(Lcom/android/server/pm/Computer;Ljava/lang/String;Ljava/lang/String;IJI)Ljava/util/List;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]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;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/parsing/PackageInfoUtils$CachedApplicationInfoGenerator;Lcom/android/server/pm/parsing/PackageInfoUtils$CachedApplicationInfoGenerator;
@@ -8754,8 +9019,7 @@
 HSPLcom/android/server/pm/resolution/ComponentResolverBase;->queryServices(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JI)Ljava/util/List;
 HSPLcom/android/server/pm/resolution/ComponentResolverBase;->queryServices(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JLjava/util/List;I)Ljava/util/List;
 HSPLcom/android/server/pm/resolution/ComponentResolverLocked;-><init>(Lcom/android/server/pm/UserManagerService;)V
-HSPLcom/android/server/pm/resolution/ComponentResolverLocked;->queryActivities(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JI)Ljava/util/List;
-HSPLcom/android/server/pm/resolution/ComponentResolverLocked;->queryReceivers(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JI)Ljava/util/List;
+HSPLcom/android/server/pm/resolution/ComponentResolverLocked;->queryActivities(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JLjava/util/List;I)Ljava/util/List;
 HSPLcom/android/server/pm/split/DefaultSplitAssetLoader;-><init>(Landroid/content/pm/parsing/PackageLite;I)V
 HSPLcom/android/server/pm/split/DefaultSplitAssetLoader;->close()V
 HSPLcom/android/server/pm/split/DefaultSplitAssetLoader;->getBaseApkAssets()Landroid/content/res/ApkAssets;
@@ -8780,7 +9044,7 @@
 HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->collectAllWebDomains(Lcom/android/server/pm/pkg/AndroidPackage;)Landroid/util/ArraySet;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->collectDomains(Lcom/android/server/pm/pkg/AndroidPackage;ZZ)Landroid/util/ArraySet;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->collectDomains(Lcom/android/server/pm/pkg/AndroidPackage;ZZLjava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;
-HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->collectDomainsInternal(Lcom/android/server/pm/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$$ExternalSyntheticLambda2;]Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;,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/AndroidPackage;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/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$$ExternalSyntheticLambda2;]Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Ljava/util/List;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/AndroidPackage;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/pkg/AndroidPackage;ZZLjava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->collectValidAutoVerifyDomains(Lcom/android/server/pm/pkg/AndroidPackage;)Landroid/util/ArraySet;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->isValidHost(Ljava/lang/String;)Z
@@ -8791,27 +9055,22 @@
 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
 HSPLcom/android/server/pm/verify/domain/DomainVerificationLegacySettings$LegacyState;->addUserState(II)V
-HSPLcom/android/server/pm/verify/domain/DomainVerificationLegacySettings$LegacyState;->getUserStates()Landroid/util/SparseIntArray;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationLegacySettings;-><init>()V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationLegacySettings;->add(Ljava/lang/String;II)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationLegacySettings;->getOrCreateStateLocked(Ljava/lang/String;)Lcom/android/server/pm/verify/domain/DomainVerificationLegacySettings$LegacyState;
-HSPLcom/android/server/pm/verify/domain/DomainVerificationLegacySettings;->getUserStates(Ljava/lang/String;)Landroid/util/SparseIntArray;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationLegacySettings;->readSettings(Lcom/android/modules/utils/TypedXmlPullParser;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationLegacySettings;->readUserState(Lcom/android/server/pm/SettingsXml$ReadSection;Lcom/android/server/pm/verify/domain/DomainVerificationLegacySettings$LegacyState;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationLegacySettings;->readUserStates(Lcom/android/server/pm/SettingsXml$ReadSection;)V
-HSPLcom/android/server/pm/verify/domain/DomainVerificationLegacySettings;->remove(Ljava/lang/String;)Landroid/content/pm/IntentFilterVerificationInfo;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationLegacySettings;->writeSettings(Lcom/android/modules/utils/TypedXmlSerializer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/pm/SettingsXml$Serializer;Lcom/android/server/pm/SettingsXml$Serializer;]Lcom/android/server/pm/verify/domain/DomainVerificationLegacySettings$LegacyState;Lcom/android/server/pm/verify/domain/DomainVerificationLegacySettings$LegacyState;]Lcom/android/server/pm/SettingsXml$WriteSection;Lcom/android/server/pm/SettingsXml$WriteSectionImpl;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;-><clinit>()V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationManagerStub;-><init>(Lcom/android/server/pm/verify/domain/DomainVerificationService;)V
 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;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationPersistence;->readDomainStates(Lcom/android/server/pm/SettingsXml$ReadSection;Landroid/util/ArrayMap;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationPersistence;->readFromXml(Lcom/android/modules/utils/TypedXmlPullParser;)Lcom/android/server/pm/verify/domain/DomainVerificationPersistence$ReadResult;
 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;->writePackageStates(Lcom/android/server/pm/SettingsXml$WriteSection;Ljava/util/Collection;ILjava/util/function/Function;)V+]Ljava/util/Collection;Landroid/util/ArraySet;
+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(Lcom/android/modules/utils/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;->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;
@@ -8820,7 +9079,7 @@
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->applyImmutableState(Lcom/android/server/pm/pkg/PackageStateInternal;Landroid/util/ArrayMap;Landroid/util/ArraySet;)Z
 HPLcom/android/server/pm/verify/domain/DomainVerificationService;->approvalLevelForDomain(Lcom/android/server/pm/pkg/PackageStateInternal;Landroid/content/Intent;JI)I
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->generateNewId()Ljava/util/UUID;
-HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->migrateState(Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/pkg/PackageStateInternal;)V
+HPLcom/android/server/pm/verify/domain/DomainVerificationService;->getDomainVerificationInfo(Ljava/lang/String;)Landroid/content/pm/verify/domain/DomainVerificationInfo;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;Lcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;]Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal$Connection;Lcom/android/server/pm/DomainVerificationConnection;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/verify/domain/DomainVerificationCollector;Lcom/android/server/pm/verify/domain/DomainVerificationCollector;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/verify/domain/DomainVerificationEnforcer;Lcom/android/server/pm/verify/domain/DomainVerificationEnforcer;]Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->onStart()V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->readLegacySettings(Lcom/android/modules/utils/TypedXmlPullParser;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->readSettings(Lcom/android/server/pm/Computer;Lcom/android/modules/utils/TypedXmlPullParser;)V
@@ -8829,104 +9088,115 @@
 HSPLcom/android/server/pm/verify/domain/DomainVerificationSettings;-><init>(Lcom/android/server/pm/verify/domain/DomainVerificationCollector;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationSettings;->readSettings(Lcom/android/modules/utils/TypedXmlPullParser;Lcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;Lcom/android/server/pm/Computer;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationSettings;->removePendingState(Ljava/lang/String;)Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;
-HSPLcom/android/server/pm/verify/domain/DomainVerificationSettings;->removeRestoredState(Ljava/lang/String;)Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationShell;-><init>(Lcom/android/server/pm/verify/domain/DomainVerificationShell$Callback;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationUtils$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationUtils;-><clinit>()V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationUtils;->buildMockAppInfo(Lcom/android/server/pm/pkg/AndroidPackage;)Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationUtils;->isChangeEnabled(Lcom/android/server/compat/PlatformCompat;Lcom/android/server/pm/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;
-HSPLcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;-><init>(ILandroid/util/ArraySet;Z)V
-HSPLcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;->getUserId()I
+HPLcom/android/server/pm/verify/domain/DomainVerificationUtils;->isDomainVerificationIntent(Landroid/content/Intent;J)Z
 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;->getBackupSignatureHash()Ljava/lang/String;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->getId()Ljava/util/UUID;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->getPackageName()Ljava/lang/String;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->getStateMap()Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->getUserStates()Landroid/util/SparseArray;
-HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->hashCode()I
-HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->isHasAutoVerifyDomains()Z
-HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->userStatesHashCode()I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+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/DomainVerificationStateMap;-><init>()V
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;->get(Ljava/lang/String;)Ljava/lang/Object;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;->put(Ljava/lang/String;Ljava/util/UUID;Ljava/lang/Object;)V
-HSPLcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;->remove(Ljava/util/UUID;)Ljava/lang/Object;
-HSPLcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;->valueAt(I)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/verify/domain/proxy/DomainVerificationProxyUnavailable;-><init>()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
+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/policy/AppOpsPolicy;Lcom/android/server/policy/AppOpsPolicy;
 HSPLcom/android/server/policy/AppOpsPolicy;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;Lcom/android/internal/util/function/QuintConsumer;)V
 HPLcom/android/server/policy/AppOpsPolicy;->isDatasourceAttributionTag(ILjava/lang/String;Ljava/lang/String;Ljava/util/Map;)Z
 HSPLcom/android/server/policy/AppOpsPolicy;->noteOperation(IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;ZLcom/android/internal/util/function/HeptFunction;)Landroid/app/SyncNotedAppOp;+]Lcom/android/internal/util/function/HeptFunction;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda3;]Lcom/android/server/policy/AppOpsPolicy;Lcom/android/server/policy/AppOpsPolicy;
+HPLcom/android/server/policy/AppOpsPolicy;->noteProxyOperation(ILandroid/content/AttributionSource;ZLjava/lang/String;ZZLcom/android/internal/util/function/HexFunction;)Landroid/app/SyncNotedAppOp;
 HSPLcom/android/server/policy/AppOpsPolicy;->resolveDatasourceOp(IILjava/lang/String;Ljava/lang/String;)I+]Lcom/android/server/policy/AppOpsPolicy;Lcom/android/server/policy/AppOpsPolicy;
 HSPLcom/android/server/policy/AppOpsPolicy;->resolveRecordAudioOp(II)I
+HSPLcom/android/server/policy/AppOpsPolicy;->resolveSandboxedServiceOp(II)I
 HSPLcom/android/server/policy/AppOpsPolicy;->resolveUid(II)I+]Landroid/service/voice/VoiceInteractionManagerInternal$HotwordDetectionServiceIdentity;Landroid/service/voice/VoiceInteractionManagerInternal$HotwordDetectionServiceIdentity;]Landroid/service/voice/VoiceInteractionManagerInternal;Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$LocalService;
 HSPLcom/android/server/policy/AppOpsPolicy;->startOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;ZZLjava/lang/String;ZIILcom/android/internal/util/function/UndecFunction;)Landroid/app/SyncNotedAppOp;+]Lcom/android/internal/util/function/UndecFunction;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda11;]Lcom/android/server/policy/AppOpsPolicy;Lcom/android/server/policy/AppOpsPolicy;
-HSPLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLcom/android/server/policy/PermissionPolicyService$Internal;->isInitialized(I)Z
+HPLcom/android/server/policy/KeyCombinationManager;->interceptKeyLocked(Landroid/view/KeyEvent;Z)Z
+HPLcom/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;->isIntentToPermissionDialog(Landroid/content/Intent;)Z
+HPLcom/android/server/policy/PermissionPolicyService$Internal;->isLauncherIntent(Landroid/content/Intent;)Z
 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;-><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;
-HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->addAppOps(Landroid/content/pm/PackageInfo;Lcom/android/server/pm/pkg/AndroidPackage;Ljava/lang/String;)V
+HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->addAppOps(Landroid/content/pm/PackageInfo;Lcom/android/server/pm/pkg/AndroidPackage;Ljava/lang/String;)V+]Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->addExtraAppOp(Landroid/content/pm/PackageInfo;Lcom/android/server/pm/pkg/AndroidPackage;Landroid/content/pm/PermissionInfo;)V+]Landroid/content/pm/PermissionInfo;Landroid/content/pm/PermissionInfo;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/policy/SoftRestrictedPermissionPolicy;Lcom/android/server/policy/SoftRestrictedPermissionPolicy$3;,Lcom/android/server/policy/SoftRestrictedPermissionPolicy$2;
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->addPackage(Ljava/lang/String;)V+]Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->addPermissionAppOp(Landroid/content/pm/PackageInfo;Lcom/android/server/pm/pkg/AndroidPackage;Landroid/content/pm/PermissionInfo;)V+]Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/pm/PermissionInfo;Landroid/content/pm/PermissionInfo;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->setUidMode(IIILjava/lang/String;)V+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/app/AppOpsManagerInternal;Lcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;
+HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->setUidModeAllowed(IILjava/lang/String;)V
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->shouldGrantAppOp(Landroid/content/pm/PackageInfo;Lcom/android/server/pm/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;->-$$Nest$smgetSwitchOp(Ljava/lang/String;)I
 HSPLcom/android/server/policy/PermissionPolicyService;->getSwitchOp(Ljava/lang/String;)I
-HSPLcom/android/server/policy/PermissionPolicyService;->getUserContext(Landroid/content/Context;Landroid/os/UserHandle;)Landroid/content/Context;
 HSPLcom/android/server/policy/PermissionPolicyService;->isStarted(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 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;]Landroid/app/AppOpsManagerInternal;Lcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;
-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/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+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;
+HPLcom/android/server/policy/PhoneWindowManager;->inKeyguardRestrictedKeyInputMode()Z
 HPLcom/android/server/policy/PhoneWindowManager;->interceptKeyBeforeQueueing(Landroid/view/KeyEvent;I)I
 HSPLcom/android/server/policy/PhoneWindowManager;->isKeyguardHostWindow(Landroid/view/WindowManager$LayoutParams;)Z
-HSPLcom/android/server/policy/PhoneWindowManager;->isKeyguardOccluded()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
 HSPLcom/android/server/policy/PhoneWindowManager;->isKeyguardShowing()Z+]Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;
 HSPLcom/android/server/policy/PhoneWindowManager;->isKeyguardShowingAndNotOccluded()Z+]Lcom/android/server/policy/PhoneWindowManager;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;
 HPLcom/android/server/policy/PhoneWindowManager;->isScreenOn()Z+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
 HSPLcom/android/server/policy/PhoneWindowManager;->keyguardOn()Z+]Lcom/android/server/policy/PhoneWindowManager;Lcom/android/server/policy/PhoneWindowManager;
 HPLcom/android/server/policy/PhoneWindowManager;->okToAnimate(Z)Z
+HPLcom/android/server/policy/PhoneWindowManager;->onDefaultDisplayFocusChangedLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;)V
+HPLcom/android/server/policy/PhoneWindowManager;->performHapticFeedback(ILjava/lang/String;IZLjava/lang/String;)Z
+HPLcom/android/server/policy/PhoneWindowManager;->powerPress(JIZ)V
+HSPLcom/android/server/policy/PhoneWindowManager;->readConfigurationDependentBehaviors()V
+HSPLcom/android/server/policy/PhoneWindowManager;->screenTurningOn(ILcom/android/server/policy/WindowManagerPolicy$ScreenOnListener;)V
 HSPLcom/android/server/policy/PhoneWindowManager;->setAllowLockscreenWhenOn(IZ)V
 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;->userActivity(II)V+]Landroid/os/Handler;Lcom/android/server/policy/PhoneWindowManager$PolicyHandler;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
+HPLcom/android/server/policy/PhoneWindowManager;->userActivity(II)V+]Landroid/os/Handler;Lcom/android/server/policy/PhoneWindowManager$PolicyHandler;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
+HPLcom/android/server/policy/SingleKeyGestureDetector;->interceptKeyDown(Landroid/view/KeyEvent;)V
 HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy$2;-><init>(ZIZZZZZZ)V
+HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy$3;-><init>(ZI)V
 HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy;->forPermission(Landroid/content/Context;Landroid/content/pm/ApplicationInfo;Lcom/android/server/pm/pkg/AndroidPackage;Landroid/os/UserHandle;Ljava/lang/String;)Lcom/android/server/policy/SoftRestrictedPermissionPolicy;+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/os/storage/StorageManagerInternal;Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy;->getMinimumTargetSDK(Landroid/content/Context;Landroid/content/pm/ApplicationInfo;Landroid/os/UserHandle;)I+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy;->hasUidRequestedLegacyExternalStorage(ILandroid/content/Context;)Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HSPLcom/android/server/policy/SoftRestrictedPermissionPolicy;->hasWriteMediaStorageGrantedForUid(ILandroid/content/Context;)Z+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
-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;->getWindowLayerLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;)I
-HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isInputRestricted()Z
+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+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/policy/WindowManagerPolicy$WindowState;Lcom/android/server/wm/WindowState;
+HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isInputRestricted()Z+]Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isOccluded()Z
 HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isSecure(I)Z
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isShowing()Z+]Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;
+HPLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->isInputRestricted()Z
 HPLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->isSecure(I)Z
 HPLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->isShowing()Z
+HPLcom/android/server/policy/keyguard/KeyguardStateMonitor;->isInputRestricted()Z
+HPLcom/android/server/policy/keyguard/KeyguardStateMonitor;->isSecure(I)Z
 HPLcom/android/server/policy/keyguard/KeyguardStateMonitor;->isShowing()Z
-HSPLcom/android/server/policy/role/RoleServicePlatformHelperImpl;->lambda$computePackageStateHash$0(Ljava/io/DataOutputStream;Landroid/content/pm/PackageManagerInternal;ILcom/android/server/pm/pkg/AndroidPackage;)V+]Landroid/content/pm/Signature;Landroid/content/pm/Signature;]Ljava/io/DataOutputStream;Ljava/io/DataOutputStream;]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/policy/role/RoleServicePlatformHelperImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/policy/role/RoleServicePlatformHelperImpl;->lambda$computePackageStateHash$0(Ljava/io/DataOutputStream;Landroid/content/pm/PackageManagerInternal;ILcom/android/server/pm/pkg/AndroidPackage;)V+]Landroid/content/pm/Signature;Landroid/content/pm/Signature;]Ljava/io/DataOutputStream;Ljava/io/DataOutputStream;]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/power/AmbientDisplaySuppressionController;-><init>(Lcom/android/server/power/AmbientDisplaySuppressionController$AmbientDisplaySuppressionChangedCallback;)V
 HSPLcom/android/server/power/AttentionDetector;-><init>(Ljava/lang/Runnable;Ljava/lang/Object;)V
+HSPLcom/android/server/power/AttentionDetector;->cancelCurrentRequestIfAny()V
 HSPLcom/android/server/power/AttentionDetector;->onUserActivity(JI)I
+HSPLcom/android/server/power/AttentionDetector;->resetConsecutiveExtensionCount()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
-HSPLcom/android/server/power/FaceDownDetector$$ExternalSyntheticLambda0;->run()V
-HSPLcom/android/server/power/FaceDownDetector$ExponentialMovingAverage;->-$$Nest$fgetmMovingAverage(Lcom/android/server/power/FaceDownDetector$ExponentialMovingAverage;)F
+HPLcom/android/server/power/FaceDownDetector$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/power/FaceDownDetector$ExponentialMovingAverage;->-$$Nest$fgetmMovingAverage(Lcom/android/server/power/FaceDownDetector$ExponentialMovingAverage;)F
 HSPLcom/android/server/power/FaceDownDetector$ExponentialMovingAverage;-><init>(Lcom/android/server/power/FaceDownDetector;F)V
 HSPLcom/android/server/power/FaceDownDetector$ExponentialMovingAverage;-><init>(Lcom/android/server/power/FaceDownDetector;FF)V
-HSPLcom/android/server/power/FaceDownDetector$ExponentialMovingAverage;->updateMovingAverage(F)V
+HPLcom/android/server/power/FaceDownDetector$ExponentialMovingAverage;->updateMovingAverage(F)V
 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;->$r8$lambda$mPVoTD8uJjpq-Ep0UGvBeIU-7Z4(Lcom/android/server/power/FaceDownDetector;)V
 HSPLcom/android/server/power/FaceDownDetector;-><init>(Ljava/util/function/Consumer;)V
-HSPLcom/android/server/power/FaceDownDetector;->onSensorChanged(Landroid/hardware/SensorEvent;)V+]Ljava/time/Duration;Ljava/time/Duration;]Landroid/hardware/Sensor;Landroid/hardware/Sensor;]Lcom/android/server/power/FaceDownDetector$ExponentialMovingAverage;Lcom/android/server/power/FaceDownDetector$ExponentialMovingAverage;]Lcom/android/server/power/FaceDownDetector;Lcom/android/server/power/FaceDownDetector;
-HSPLcom/android/server/power/FaceDownDetector;->userActivity(I)V
+HPLcom/android/server/power/FaceDownDetector;->lambda$new$0()V
+HPLcom/android/server/power/FaceDownDetector;->onSensorChanged(Landroid/hardware/SensorEvent;)V+]Ljava/time/Duration;Ljava/time/Duration;]Landroid/hardware/Sensor;Landroid/hardware/Sensor;]Lcom/android/server/power/FaceDownDetector$ExponentialMovingAverage;Lcom/android/server/power/FaceDownDetector$ExponentialMovingAverage;]Lcom/android/server/power/FaceDownDetector;Lcom/android/server/power/FaceDownDetector;
+HSPLcom/android/server/power/FaceDownDetector;->updateActiveState()V
+HPLcom/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
@@ -8946,17 +9216,22 @@
 HSPLcom/android/server/power/LowPowerStandbyController;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
 HSPLcom/android/server/power/LowPowerStandbyController;-><init>(Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/power/LowPowerStandbyController$Clock;Lcom/android/server/power/LowPowerStandbyController$DeviceConfigWrapper;Ljava/util/function/Supplier;Ljava/io/File;)V
 HSPLcom/android/server/power/LowPowerStandbyControllerInternal;-><init>()V
-HSPLcom/android/server/power/Notifier$NotifierHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/os/Handler;Lcom/android/server/power/Notifier$NotifierHandler;
-HSPLcom/android/server/power/Notifier;->-$$Nest$mscreenPolicyChanging(Lcom/android/server/power/Notifier;II)V
+HPLcom/android/server/power/Notifier$NotifierHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/os/Handler;Lcom/android/server/power/Notifier$NotifierHandler;
+HPLcom/android/server/power/Notifier;->-$$Nest$mscreenPolicyChanging(Lcom/android/server/power/Notifier;II)V
 HSPLcom/android/server/power/Notifier;->getBatteryStatsWakeLockMonitorType(I)I
-HSPLcom/android/server/power/Notifier;->notifyWakeLockListener(Landroid/os/IWakeLockCallback;Z)V
+HPLcom/android/server/power/Notifier;->handleLateGlobalInteractiveChange()V
+HSPLcom/android/server/power/Notifier;->notifyWakeLockListener(Landroid/os/IWakeLockCallback;Ljava/lang/String;Z)V
+HPLcom/android/server/power/Notifier;->onGlobalWakefulnessChangeStarted(IIJ)V
 HSPLcom/android/server/power/Notifier;->onScreenPolicyUpdate(II)V+]Landroid/os/Handler;Lcom/android/server/power/Notifier$NotifierHandler;]Landroid/os/Message;Landroid/os/Message;
 HSPLcom/android/server/power/Notifier;->onUserActivity(III)V+]Landroid/os/Handler;Lcom/android/server/power/Notifier$NotifierHandler;]Landroid/os/Message;Landroid/os/Message;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;
 HSPLcom/android/server/power/Notifier;->onWakeLockAcquired(ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;Landroid/os/IWakeLockCallback;)V+]Lcom/android/server/power/Notifier;Lcom/android/server/power/Notifier;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;]Lcom/android/server/power/WakeLockLog;Lcom/android/server/power/WakeLockLog;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
-HSPLcom/android/server/power/Notifier;->onWakeLockChanging(ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;Landroid/os/IWakeLockCallback;ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;Landroid/os/IWakeLockCallback;)V+]Lcom/android/server/power/Notifier;Lcom/android/server/power/Notifier;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;
+HPLcom/android/server/power/Notifier;->onWakeLockChanging(ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;Landroid/os/IWakeLockCallback;ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;Landroid/os/IWakeLockCallback;)V+]Lcom/android/server/power/Notifier;Lcom/android/server/power/Notifier;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;
 HSPLcom/android/server/power/Notifier;->onWakeLockReleased(ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;Landroid/os/IWakeLockCallback;)V+]Lcom/android/server/power/Notifier;Lcom/android/server/power/Notifier;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;]Lcom/android/server/power/WakeLockLog;Lcom/android/server/power/WakeLockLog;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
-HSPLcom/android/server/power/Notifier;->screenPolicyChanging(II)V
-HSPLcom/android/server/power/Notifier;->sendUserActivity(II)V+]Lcom/android/server/input/InputManagerInternal;Lcom/android/server/input/InputManagerService$LocalService;]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;->onWakefulnessChangeFinished()V
+HPLcom/android/server/power/Notifier;->screenPolicyChanging(II)V
+HPLcom/android/server/power/Notifier;->sendNextBroadcast()V
+HPLcom/android/server/power/Notifier;->sendUserActivity(II)V+]Lcom/android/server/input/InputManagerInternal;Lcom/android/server/input/InputManagerService$LocalService;]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/PowerGroup;->dozeLocked(JII)Z
 HSPLcom/android/server/power/PowerGroup;->getDesiredScreenPolicyLocked(ZZZZ)I+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;
 HSPLcom/android/server/power/PowerGroup;->getGroupId()I
 HSPLcom/android/server/power/PowerGroup;->getLastUserActivityTimeLocked()J
@@ -8979,27 +9254,31 @@
 HSPLcom/android/server/power/PowerManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/power/PowerManagerService;)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;->onStateChanged()V
+HSPLcom/android/server/power/PowerManagerService$1;->releaseSuspendBlocker(Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService$4;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$BinderService;-><init>(Lcom/android/server/power/PowerManagerService;Landroid/content/Context;)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;
 HSPLcom/android/server/power/PowerManagerService$BinderService;->isDeviceIdleMode()Z+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService$BinderService;->isInteractive()Z
-HSPLcom/android/server/power/PowerManagerService$BinderService;->isLightDeviceIdleMode()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
 HSPLcom/android/server/power/PowerManagerService$BinderService;->releaseWakeLock(Landroid/os/IBinder;I)V+]Landroid/content/Context;Landroid/app/ContextImpl;
-HSPLcom/android/server/power/PowerManagerService$BinderService;->updateWakeLockUids(Landroid/os/IBinder;[I)V
-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
+HPLcom/android/server/power/PowerManagerService$BinderService;->setBatteryDischargePrediction(Landroid/os/ParcelDuration;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;->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$2;
 HSPLcom/android/server/power/PowerManagerService$Constants;-><init>(Lcom/android/server/power/PowerManagerService;Landroid/os/Handler;)V
+HSPLcom/android/server/power/PowerManagerService$Injector$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/power/PowerManagerService$Injector$1;-><init>(Lcom/android/server/power/PowerManagerService$Injector;)V
 HSPLcom/android/server/power/PowerManagerService$Injector$1;->get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/power/PowerManagerService$Injector$2;-><init>(Lcom/android/server/power/PowerManagerService$Injector;)V
 HSPLcom/android/server/power/PowerManagerService$Injector$2;->uptimeMillis()J
+HSPLcom/android/server/power/PowerManagerService$Injector$3;-><init>(Lcom/android/server/power/PowerManagerService$Injector;)V
 HSPLcom/android/server/power/PowerManagerService$Injector;-><init>()V
 HSPLcom/android/server/power/PowerManagerService$Injector;->createAmbientDisplayConfiguration(Landroid/content/Context;)Landroid/hardware/display/AmbientDisplayConfiguration;
 HSPLcom/android/server/power/PowerManagerService$Injector;->createAmbientDisplaySuppressionController(Lcom/android/server/power/AmbientDisplaySuppressionController$AmbientDisplaySuppressionChangedCallback;)Lcom/android/server/power/AmbientDisplaySuppressionController;
-HSPLcom/android/server/power/PowerManagerService$Injector;->createAppOpsManager(Landroid/content/Context;)Landroid/app/AppOpsManager;
 HSPLcom/android/server/power/PowerManagerService$Injector;->createBatterySaverController(Ljava/lang/Object;Landroid/content/Context;Lcom/android/server/power/batterysaver/BatterySaverPolicy;Lcom/android/server/power/batterysaver/BatterySavingStats;)Lcom/android/server/power/batterysaver/BatterySaverController;
 HSPLcom/android/server/power/PowerManagerService$Injector;->createBatterySaverPolicy(Ljava/lang/Object;Landroid/content/Context;Lcom/android/server/power/batterysaver/BatterySavingStats;)Lcom/android/server/power/batterysaver/BatterySaverPolicy;
 HSPLcom/android/server/power/PowerManagerService$Injector;->createBatterySaverStateMachine(Ljava/lang/Object;Landroid/content/Context;Lcom/android/server/power/batterysaver/BatterySaverController;)Lcom/android/server/power/batterysaver/BatterySaverStateMachine;
@@ -9008,12 +9287,15 @@
 HSPLcom/android/server/power/PowerManagerService$Injector;->createInattentiveSleepWarningController()Lcom/android/server/power/InattentiveSleepWarningController;
 HSPLcom/android/server/power/PowerManagerService$Injector;->createLowPowerStandbyController(Landroid/content/Context;Landroid/os/Looper;)Lcom/android/server/power/LowPowerStandbyController;
 HSPLcom/android/server/power/PowerManagerService$Injector;->createNativeWrapper()Lcom/android/server/power/PowerManagerService$NativeWrapper;
+HSPLcom/android/server/power/PowerManagerService$Injector;->createPermissionCheckerWrapper()Lcom/android/server/power/PowerManagerService$PermissionCheckerWrapper;
+HSPLcom/android/server/power/PowerManagerService$Injector;->createPowerPropertiesWrapper()Lcom/android/server/power/PowerManagerService$PowerPropertiesWrapper;
 HSPLcom/android/server/power/PowerManagerService$Injector;->createSuspendBlocker(Lcom/android/server/power/PowerManagerService;Ljava/lang/String;)Lcom/android/server/power/SuspendBlocker;
 HSPLcom/android/server/power/PowerManagerService$Injector;->createSystemPropertiesWrapper()Lcom/android/server/power/SystemPropertiesWrapper;
 HSPLcom/android/server/power/PowerManagerService$Injector;->invalidateIsInteractiveCaches()V
 HSPLcom/android/server/power/PowerManagerService$LocalService;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$LocalService;->getLowPowerState(I)Landroid/os/PowerSaveState;
 HSPLcom/android/server/power/PowerManagerService$LocalService;->registerLowPowerModeObserver(Landroid/os/PowerManagerInternal$LowPowerModeListener;)V
+HSPLcom/android/server/power/PowerManagerService$LocalService;->setDeviceIdleTempWhitelist([I)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
@@ -9024,9 +9306,11 @@
 HSPLcom/android/server/power/PowerManagerService$NativeWrapper;->nativeInit(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$NativeWrapper;->nativeReleaseSuspendBlocker(Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService$NativeWrapper;->nativeSetAutoSuspend(Z)V
+HSPLcom/android/server/power/PowerManagerService$NativeWrapper;->nativeSetPowerBoost(II)V
 HSPLcom/android/server/power/PowerManagerService$NativeWrapper;->nativeSetPowerMode(IZ)Z
 HSPLcom/android/server/power/PowerManagerService$PowerGroupWakefulnessChangeListener;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$PowerGroupWakefulnessChangeListener;-><init>(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$PowerGroupWakefulnessChangeListener-IA;)V
+HPLcom/android/server/power/PowerManagerService$PowerGroupWakefulnessChangeListener;->onWakefulnessChangedLocked(IIJIIILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService$PowerManagerHandlerCallback;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$PowerManagerHandlerCallback;-><init>(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$PowerManagerHandlerCallback-IA;)V
 HSPLcom/android/server/power/PowerManagerService$PowerManagerHandlerCallback;->handleMessage(Landroid/os/Message;)Z+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
@@ -9039,12 +9323,12 @@
 HSPLcom/android/server/power/PowerManagerService$UidState;-><init>(I)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;
 HSPLcom/android/server/power/PowerManagerService$WakeLock;->getPowerGroupId()Ljava/lang/Integer;+]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;
-HSPLcom/android/server/power/PowerManagerService$WakeLock;->hasSameProperties(ILjava/lang/String;Landroid/os/WorkSource;IILandroid/os/IWakeLockCallback;)Z
-HSPLcom/android/server/power/PowerManagerService$WakeLock;->hasSameWorkSource(Landroid/os/WorkSource;)Z
+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;->linkToDeath()V
 HSPLcom/android/server/power/PowerManagerService$WakeLock;->setDisabled(Z)Z
 HSPLcom/android/server/power/PowerManagerService$WakeLock;->unlinkToDeath()V+]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/os/Binder;
-HSPLcom/android/server/power/PowerManagerService$WakeLock;->updateWorkSource(Landroid/os/WorkSource;)V
+HPLcom/android/server/power/PowerManagerService$WakeLock;->updateWorkSource(Landroid/os/WorkSource;)V
 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;
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmContext(Lcom/android/server/power/PowerManagerService;)Landroid/content/Context;
@@ -9052,28 +9336,30 @@
 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$macquireWakeLockInternal(Lcom/android/server/power/PowerManagerService;Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;IILandroid/os/IWakeLockCallback;)V
-HSPLcom/android/server/power/PowerManagerService;->-$$Nest$mhandleSandman(Lcom/android/server/power/PowerManagerService;I)V
-HSPLcom/android/server/power/PowerManagerService;->-$$Nest$misInteractiveInternal(Lcom/android/server/power/PowerManagerService;)Z
+HSPLcom/android/server/power/PowerManagerService;->-$$Nest$mhandleSandman(Lcom/android/server/power/PowerManagerService;I)V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
+HSPLcom/android/server/power/PowerManagerService;->-$$Nest$misGloballyInteractiveInternal(Lcom/android/server/power/PowerManagerService;)Z
 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
 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
-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$msetUserActivityTimeoutOverrideFromWindowManagerInternal(Lcom/android/server/power/PowerManagerService;J)V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
+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$smcopyWorkSource(Landroid/os/WorkSource;)Landroid/os/WorkSource;
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$smnativeAcquireSuspendBlocker(Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$smnativeReleaseSuspendBlocker(Ljava/lang/String;)V
 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/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;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;
 HSPLcom/android/server/power/PowerManagerService;->adjustWakeLockSummary(II)I
-HSPLcom/android/server/power/PowerManagerService;->applyWakeLockFlagsOnAcquireLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V+]Lcom/android/server/power/PowerManagerService$WakeLock;Lcom/android/server/power/PowerManagerService$WakeLock;]Landroid/os/WorkSource;Landroid/os/WorkSource;]Landroid/os/WorkSource$WorkChain;Landroid/os/WorkSource$WorkChain;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
+HSPLcom/android/server/power/PowerManagerService;->applyWakeLockFlagsOnAcquireLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)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$2;
 HSPLcom/android/server/power/PowerManagerService;->applyWakeLockFlagsOnReleaseLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V
 HSPLcom/android/server/power/PowerManagerService;->areAllPowerGroupsReadyLocked()Z+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 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$2;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/power/PowerManagerService;->copyWorkSource(Landroid/os/WorkSource;)Landroid/os/WorkSource;
+HSPLcom/android/server/power/PowerManagerService;->enqueueNotifyLongMsgLocked(J)V
 HSPLcom/android/server/power/PowerManagerService;->findWakeLockIndexLocked(Landroid/os/IBinder;)I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/power/PowerManagerService;->finishWakefulnessChangeIfNeededLocked()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;->getAttentiveTimeoutLocked()J
@@ -9085,18 +9371,18 @@
 HSPLcom/android/server/power/PowerManagerService;->getSleepTimeoutLocked(J)J
 HSPLcom/android/server/power/PowerManagerService;->getWakeLockSummaryFlags(Lcom/android/server/power/PowerManagerService$WakeLock;)I
 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$2;]Landroid/content/Context;Landroid/app/ContextImpl;
-HSPLcom/android/server/power/PowerManagerService;->isAttentiveTimeoutExpired(Lcom/android/server/power/PowerGroup;J)Z
+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;->isGloballyInteractiveInternal()Z
 HSPLcom/android/server/power/PowerManagerService;->isItBedTimeYetLocked(Lcom/android/server/power/PowerGroup;)Z
-HSPLcom/android/server/power/PowerManagerService;->isLightDeviceIdleModeInternal()Z
+HPLcom/android/server/power/PowerManagerService;->isLightDeviceIdleModeInternal()Z
 HSPLcom/android/server/power/PowerManagerService;->isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()Z
 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;->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;
-HSPLcom/android/server/power/PowerManagerService;->notifyWakeLockChangingLocked(Lcom/android/server/power/PowerManagerService$WakeLock;ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;Landroid/os/IWakeLockCallback;)V+]Lcom/android/server/power/Notifier;Lcom/android/server/power/Notifier;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
+HPLcom/android/server/power/PowerManagerService;->notifyWakeLockChangingLocked(Lcom/android/server/power/PowerManagerService$WakeLock;ILjava/lang/String;Ljava/lang/String;IILandroid/os/WorkSource;Ljava/lang/String;Landroid/os/IWakeLockCallback;)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;->notifyWakeLockLongFinishedLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V+]Lcom/android/server/power/Notifier;Lcom/android/server/power/Notifier;
 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
@@ -9111,6 +9397,7 @@
 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;
 HSPLcom/android/server/power/PowerManagerService;->setPowerBoostInternal(II)V+]Lcom/android/server/power/PowerManagerService$NativeWrapper;Lcom/android/server/power/PowerManagerService$NativeWrapper;
+HSPLcom/android/server/power/PowerManagerService;->setPowerModeInternal(IZ)Z
 HSPLcom/android/server/power/PowerManagerService;->setScreenBrightnessOverrideFromWindowManagerInternal(F)V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService;->setUserActivityTimeoutOverrideFromWindowManagerInternal(J)V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService;->setWakeLockDisabledStateLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)Z+]Lcom/android/server/power/PowerManagerService$WakeLock;Lcom/android/server/power/PowerManagerService$WakeLock;
@@ -9133,26 +9420,25 @@
 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
 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;
-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;
+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;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 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$2;
-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;
 HSPLcom/android/server/power/PowerManagerService;->userActivityNoUpdateLocked(Lcom/android/server/power/PowerGroup;JIII)Z+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;]Lcom/android/server/power/Notifier;Lcom/android/server/power/Notifier;]Lcom/android/server/power/AttentionDetector;Lcom/android/server/power/AttentionDetector;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerShellCommand;-><init>(Landroid/content/Context;Lcom/android/server/power/PowerManagerService$BinderService;)V
 HSPLcom/android/server/power/ScreenUndimDetector$InternalClock;-><init>()V
 HSPLcom/android/server/power/ScreenUndimDetector;-><clinit>()V
 HSPLcom/android/server/power/ScreenUndimDetector;-><init>()V
-HSPLcom/android/server/power/ScreenUndimDetector;->recordScreenPolicy(II)V
+HPLcom/android/server/power/ScreenUndimDetector;->recordScreenPolicy(II)V+]Lcom/android/server/power/ScreenUndimDetector;Lcom/android/server/power/ScreenUndimDetector;
+HPLcom/android/server/power/ScreenUndimDetector;->userActivity(I)V
 HSPLcom/android/server/power/ThermalManagerService$1;-><init>(Lcom/android/server/power/ThermalManagerService;)V
-HPLcom/android/server/power/ThermalManagerService$1;->getCurrentCoolingDevices()[Landroid/os/CoolingDevice;
 HPLcom/android/server/power/ThermalManagerService$1;->getCurrentTemperatures()[Landroid/os/Temperature;
 HSPLcom/android/server/power/ThermalManagerService$1;->getCurrentThermalStatus()I
 HSPLcom/android/server/power/ThermalManagerService$TemperatureWatcher;-><init>(Lcom/android/server/power/ThermalManagerService;)V
-HPLcom/android/server/power/ThermalManagerService$ThermalHalAidlWrapper;->getCurrentCoolingDevices(ZI)Ljava/util/List;
-HSPLcom/android/server/power/ThermalManagerService$ThermalHalAidlWrapper;->getCurrentTemperatures(ZI)Ljava/util/List;+]Landroid/hardware/thermal/IThermal;Landroid/hardware/thermal/IThermal$Stub$Proxy;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/power/ThermalManagerService$ThermalHalAidlWrapper;->getCurrentTemperatures(ZI)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;
 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;->notifyEventListenersLocked(Landroid/os/Temperature;)V+]Lcom/android/server/power/ThermalManagerService;Lcom/android/server/power/ThermalManagerService;]Landroid/os/Temperature;Landroid/os/Temperature;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
 HSPLcom/android/server/power/ThermalManagerService;->onBootPhase(I)V
 HSPLcom/android/server/power/ThermalManagerService;->onStart()V
 HPLcom/android/server/power/WakeLockLog$EntryByteTranslator;->fromBytes([BJLcom/android/server/power/WakeLockLog$LogEntry;)Lcom/android/server/power/WakeLockLog$LogEntry;+]Lcom/android/server/power/WakeLockLog$LogEntry;Lcom/android/server/power/WakeLockLog$LogEntry;]Lcom/android/server/power/WakeLockLog$TagDatabase;Lcom/android/server/power/WakeLockLog$TagDatabase;
@@ -9180,15 +9466,15 @@
 HSPLcom/android/server/power/WakeLockLog;->tagNameReducer(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/power/WakeLockLog;->translateFlagsFromPowerManager(I)I
 HSPLcom/android/server/power/batterysaver/BatterySaverController$1;-><init>(Lcom/android/server/power/batterysaver/BatterySaverController;)V
-HSPLcom/android/server/power/batterysaver/BatterySaverController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/power/batterysaver/BatterySaverController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverController$MyHandler;-><init>(Lcom/android/server/power/batterysaver/BatterySaverController;Landroid/os/Looper;)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
 HSPLcom/android/server/power/batterysaver/BatterySaverController;->getAdaptiveEnabledLocked()Z
 HSPLcom/android/server/power/batterysaver/BatterySaverController;->getFullEnabledLocked()Z
-HSPLcom/android/server/power/batterysaver/BatterySaverController;->getPowerManager()Landroid/os/PowerManager;
+HPLcom/android/server/power/batterysaver/BatterySaverController;->getPowerManager()Landroid/os/PowerManager;
 HSPLcom/android/server/power/batterysaver/BatterySaverController;->isEnabled()Z
-HSPLcom/android/server/power/batterysaver/BatterySaverController;->updateBatterySavingStats()V
+HPLcom/android/server/power/batterysaver/BatterySaverController;->updateBatterySavingStats()V
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/power/batterysaver/BatterySaverPolicy;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;-><init>(FZZZZZZZZZZZZZZZII)V
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;->equals(Ljava/lang/Object;)Z
@@ -9206,37 +9492,37 @@
 HSPLcom/android/server/power/batterysaver/BatterySaverStateMachine;-><init>(Ljava/lang/Object;Landroid/content/Context;Lcom/android/server/power/batterysaver/BatterySaverController;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setBatteryStatus(ZIZ)V
 HSPLcom/android/server/power/batterysaver/BatterySavingStats;-><init>(Ljava/lang/Object;)V
-HSPLcom/android/server/power/batterysaver/BatterySavingStats;->endLastStateLocked(JII)V
-HSPLcom/android/server/power/batterysaver/BatterySavingStats;->transitionState(IIII)V
-HSPLcom/android/server/power/batterysaver/BatterySavingStats;->transitionStateLocked(I)V
+HPLcom/android/server/power/batterysaver/BatterySavingStats;->endLastStateLocked(JII)V
+HPLcom/android/server/power/batterysaver/BatterySavingStats;->transitionState(IIII)V
+HPLcom/android/server/power/batterysaver/BatterySavingStats;->transitionStateLocked(I)V
 HSPLcom/android/server/power/hint/HintManagerService$AppHintSession;-><init>(Lcom/android/server/power/hint/HintManagerService;II[ILandroid/os/IBinder;JJ)V
 HPLcom/android/server/power/hint/HintManagerService$AppHintSession;->close()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;
 HSPLcom/android/server/power/hint/HintManagerService$AppHintSession;->sendHint(I)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;
-HSPLcom/android/server/power/hint/HintManagerService$AppHintSession;->updateHintAllowed()Z+]Lcom/android/server/power/hint/HintManagerService$MyUidObserver;Lcom/android/server/power/hint/HintManagerService$MyUidObserver;]Lcom/android/server/power/hint/HintManagerService$AppHintSession;Lcom/android/server/power/hint/HintManagerService$AppHintSession;
-HSPLcom/android/server/power/hint/HintManagerService$AppHintSession;->updateTargetWorkDuration(J)V
+HSPLcom/android/server/power/hint/HintManagerService$AppHintSession;->updateHintAllowed()Z+]Lcom/android/server/power/hint/HintManagerService$AppHintSession;Lcom/android/server/power/hint/HintManagerService$AppHintSession;]Lcom/android/server/power/hint/HintManagerService$MyUidObserver;Lcom/android/server/power/hint/HintManagerService$MyUidObserver;
+HSPLcom/android/server/power/hint/HintManagerService$AppHintSession;->updateTargetWorkDuration(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;
 HSPLcom/android/server/power/hint/HintManagerService$BinderService;-><init>(Lcom/android/server/power/hint/HintManagerService;)V
 HSPLcom/android/server/power/hint/HintManagerService$BinderService;->createHintSession(Landroid/os/IBinder;[IJ)Landroid/os/IHintSession;
 HSPLcom/android/server/power/hint/HintManagerService$Injector;-><init>()V
 HSPLcom/android/server/power/hint/HintManagerService$Injector;->createNativeWrapper()Lcom/android/server/power/hint/HintManagerService$NativeWrapper;
+HSPLcom/android/server/power/hint/HintManagerService$MyUidObserver$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/power/hint/HintManagerService$MyUidObserver;II)V
+HSPLcom/android/server/power/hint/HintManagerService$MyUidObserver$$ExternalSyntheticLambda0;->run()V
+HSPLcom/android/server/power/hint/HintManagerService$MyUidObserver;->$r8$lambda$fdbZUOLAIV_9Kg99wGvHWv5K7Ek(Lcom/android/server/power/hint/HintManagerService$MyUidObserver;II)V
+HSPLcom/android/server/power/hint/HintManagerService$MyUidObserver;-><init>(Lcom/android/server/power/hint/HintManagerService;)V
+HSPLcom/android/server/power/hint/HintManagerService$MyUidObserver;->isUidForeground(I)Z+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/power/hint/HintManagerService$MyUidObserver;->lambda$onUidStateChanged$1(II)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/power/hint/HintManagerService$MyUidObserver;->onUidStateChanged(IIJI)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/power/hint/HintManagerService$NativeWrapper;-><init>()V
 HSPLcom/android/server/power/hint/HintManagerService$NativeWrapper;->halGetHintSessionPreferredRate()J
 HSPLcom/android/server/power/hint/HintManagerService$NativeWrapper;->halInit()V
 HSPLcom/android/server/power/hint/HintManagerService$NativeWrapper;->halReportActualWorkDuration(J[J[J)V
 HSPLcom/android/server/power/hint/HintManagerService$NativeWrapper;->halSendHint(JI)V
-HSPLcom/android/server/power/hint/HintManagerService$MyUidObserver$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/power/hint/HintManagerService$MyUidObserver;II)V
-HSPLcom/android/server/power/hint/HintManagerService$MyUidObserver$$ExternalSyntheticLambda1;->run()V
-HSPLcom/android/server/power/hint/HintManagerService$MyUidObserver;->$r8$lambda$ej6eMAvAGZXPb5YUxpIPNazvUW4(Lcom/android/server/power/hint/HintManagerService$MyUidObserver;II)V
-HSPLcom/android/server/power/hint/HintManagerService$MyUidObserver;-><init>(Lcom/android/server/power/hint/HintManagerService;)V
-HSPLcom/android/server/power/hint/HintManagerService$MyUidObserver;->isUidForeground(I)Z+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/power/hint/HintManagerService$MyUidObserver;->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$MyUidObserver;->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;
 HSPLcom/android/server/power/hint/HintManagerService;->-$$Nest$fgetmNativeWrapper(Lcom/android/server/power/hint/HintManagerService;)Lcom/android/server/power/hint/HintManagerService$NativeWrapper;
 HSPLcom/android/server/power/hint/HintManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/power/hint/HintManagerService;-><init>(Landroid/content/Context;Lcom/android/server/power/hint/HintManagerService$Injector;)V
-HSPLcom/android/server/power/hint/HintManagerService;->checkTidValid(II[I)Z
+HSPLcom/android/server/power/hint/HintManagerService;->checkTidValid(II[I)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
 HSPLcom/android/server/power/hint/HintManagerService;->onBootPhase(I)V
 HSPLcom/android/server/power/hint/HintManagerService;->onStart()V
 HPLcom/android/server/power/stats/AudioPowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Landroid/os/AggregateBatteryConsumer$Builder;Landroid/os/AggregateBatteryConsumer$Builder;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/AudioPowerCalculator;Lcom/android/server/power/stats/AudioPowerCalculator;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
@@ -9247,11 +9533,14 @@
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/power/stats/BatteryExternalStatsWorker;)V
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker$$ExternalSyntheticLambda3;-><init>(Ljava/lang/Runnable;)V
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker$$ExternalSyntheticLambda3;->run()V
+HPLcom/android/server/power/stats/BatteryExternalStatsWorker$$ExternalSyntheticLambda6;->onWifiActivityEnergyInfo(Landroid/os/connectivity/WifiActivityEnergyInfo;)V
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/power/stats/BatteryExternalStatsWorker;I)V
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker$1;-><init>(Lcom/android/server/power/stats/BatteryExternalStatsWorker;)V
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker$1;->run()V
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker$2;-><init>(Lcom/android/server/power/stats/BatteryExternalStatsWorker;)V
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker$2;->run()V
+HSPLcom/android/server/power/stats/BatteryExternalStatsWorker$3;-><init>(Lcom/android/server/power/stats/BatteryExternalStatsWorker;)V
+HPLcom/android/server/power/stats/BatteryExternalStatsWorker$4;->onBluetoothActivityEnergyInfoAvailable(Landroid/bluetooth/BluetoothActivityEnergyInfo;)V
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker$Injector;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker$Injector;->getSystemService(Ljava/lang/Class;)Ljava/lang/Object;
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker;->$r8$lambda$Bt3wgACBtFYeJXR-1zLDPOXzedQ(Ljava/lang/Runnable;)Ljava/lang/Thread;
@@ -9284,15 +9573,21 @@
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker;->getEnergyConsumersLocked(I)Ljava/util/concurrent/CompletableFuture;
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker;->lambda$new$0(Ljava/lang/Runnable;)V
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker;->lambda$new$1(Ljava/lang/Runnable;)Ljava/lang/Thread;
-HSPLcom/android/server/power/stats/BatteryExternalStatsWorker;->lambda$updateExternalStatsLocked$8(Landroid/os/SynchronousResultReceiver;Landroid/os/connectivity/WifiActivityEnergyInfo;)V
+HPLcom/android/server/power/stats/BatteryExternalStatsWorker;->lambda$updateExternalStatsLocked$8(Landroid/os/SynchronousResultReceiver;Landroid/os/connectivity/WifiActivityEnergyInfo;)V
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker;->scheduleCpuSyncDueToWakelockChange(J)Ljava/util/concurrent/Future;+]Lcom/android/server/power/stats/BatteryExternalStatsWorker;Lcom/android/server/power/stats/BatteryExternalStatsWorker;
-HSPLcom/android/server/power/stats/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/power/stats/BatteryExternalStatsWorker;->scheduleDelayedSyncLocked(Ljava/util/concurrent/Future;Ljava/lang/Runnable;J)Ljava/util/concurrent/Future;
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker;->scheduleRunnable(Ljava/lang/Runnable;)V
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker;->scheduleSyncDueToProcessStateChange(IJ)V+]Lcom/android/server/power/stats/BatteryExternalStatsWorker;Lcom/android/server/power/stats/BatteryExternalStatsWorker;
+HSPLcom/android/server/power/stats/BatteryExternalStatsWorker;->scheduleSyncDueToScreenStateChange(IZZI[I)Ljava/util/concurrent/Future;
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker;->scheduleSyncLocked(Ljava/lang/String;I)Ljava/util/concurrent/Future;
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker;->scheduleWrite()Ljava/util/concurrent/Future;
 HSPLcom/android/server/power/stats/BatteryExternalStatsWorker;->updateExternalStatsLocked(Ljava/lang/String;IZZI[IZ)V
+HSPLcom/android/server/power/stats/BatteryStatsImpl$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/power/stats/BatteryStatsImpl;JJIZLandroid/util/SparseLongArray;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$$ExternalSyntheticLambda1;->onUidCpuTime(ILjava/lang/Object;)V
+HSPLcom/android/server/power/stats/BatteryStatsImpl$$ExternalSyntheticLambda2;->onUidCpuTime(ILjava/lang/Object;)V
+HSPLcom/android/server/power/stats/BatteryStatsImpl$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/power/stats/BatteryStatsImpl;)V
+HSPLcom/android/server/power/stats/BatteryStatsImpl$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/power/stats/BatteryStatsImpl;JJZLcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;)V
+HSPLcom/android/server/power/stats/BatteryStatsImpl$$ExternalSyntheticLambda6;->onUidCpuTime(ILjava/lang/Object;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$1;-><init>()V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$2;-><init>(Lcom/android/server/power/stats/BatteryStatsImpl;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$BatchTimer;-><init>(Lcom/android/internal/os/Clock;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;ILcom/android/server/power/stats/BatteryStatsImpl$TimeBase;)V
@@ -9315,9 +9610,7 @@
 HPLcom/android/server/power/stats/BatteryStatsImpl$BluetoothActivityInfoCache;->set(Landroid/bluetooth/BluetoothActivityEnergyInfo;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Constants;-><init>(Lcom/android/server/power/stats/BatteryStatsImpl;Landroid/os/Handler;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;-><init>(Lcom/android/internal/os/Clock;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;I)V
-HPLcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;->getIdleTimeCounter()Landroid/os/BatteryStats$LongCounter;
 HPLcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;->getOrCreateTxTimeCounters()[Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;+]Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;
-HPLcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;->getRxTimeCounter()Landroid/os/BatteryStats$LongCounter;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;->readSummaryFromParcel(Landroid/os/Parcel;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;->readTimeMultiStateCounter(Landroid/os/Parcel;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;)Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;->readTimeMultiStateCounters(Landroid/os/Parcel;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;I)[Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;
@@ -9326,9 +9619,8 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;->writeTimeMultiStateCounter(Landroid/os/Parcel;Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;->writeTimeMultiStateCounters(Landroid/os/Parcel;[Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Counter;-><init>(Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;)V
-HPLcom/android/server/power/stats/BatteryStatsImpl$Counter;->getCountLocked(I)I+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Counter;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
-HSPLcom/android/server/power/stats/BatteryStatsImpl$Counter;->stepAtomic()V+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
+HPLcom/android/server/power/stats/BatteryStatsImpl$Counter;->stepAtomic()V+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Counter;->writeSummaryFromParcelLocked(Landroid/os/Parcel;)V+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;]Landroid/os/Parcel;Landroid/os/Parcel;
 HPLcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;-><init>(Lcom/android/server/power/stats/CpuPowerCalculator;I)V
 HPLcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;->addCpuClusterDurationsMs(Lcom/android/server/power/stats/BatteryStatsImpl$Uid;[J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;Lcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;]Lcom/android/server/power/stats/CpuPowerCalculator;Lcom/android/server/power/stats/CpuPowerCalculator;
@@ -9338,8 +9630,6 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl$DisplayBatteryStats;->readSummaryFromParcel(Landroid/os/Parcel;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$DisplayBatteryStats;->writeSummaryToParcel(Landroid/os/Parcel;J)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$DualTimer;-><init>(Lcom/android/internal/os/Clock;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;ILjava/util/ArrayList;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;)V
-HPLcom/android/server/power/stats/BatteryStatsImpl$DualTimer;->getSubTimer()Landroid/os/BatteryStats$Timer;+]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
-HPLcom/android/server/power/stats/BatteryStatsImpl$DualTimer;->getSubTimer()Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$DualTimer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
 HPLcom/android/server/power/stats/BatteryStatsImpl$DualTimer;->reset(ZJ)Z
 HSPLcom/android/server/power/stats/BatteryStatsImpl$DualTimer;->startRunningLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;
@@ -9367,7 +9657,7 @@
 HPLcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;->getCountLocked(I)J
 HSPLcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;->onTimeStarted(JJJ)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;->onTimeStopped(JJJ)V
-HSPLcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;->reset(ZJ)Z
 HSPLcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;->writeSummaryFromParcelLocked(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounterArray;->-$$Nest$mreadSummaryFromParcelLocked(Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounterArray;Landroid/os/Parcel;)V
@@ -9388,14 +9678,16 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;-><init>(ILcom/android/internal/os/Clock;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;->getFrequencyRangeCount()I
 HSPLcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;->getRxDurationCounter(IZ)Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;
-HSPLcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;->getTxDurationCounter(IIZ)Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;
+HSPLcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;->getTxDurationCounter(IIZ)Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;+]Lcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;->readSummaryFromParcel(Landroid/os/Parcel;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;->writeSummaryToParcel(Landroid/os/Parcel;J)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;-><init>(Lcom/android/internal/os/Clock;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;)V
+HPLcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;->add(JIJ)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;->computeCurrentCountLocked()I
 HSPLcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;->computeRunTimeLocked(JJ)J
 HSPLcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;->endSample(J)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;->getUpdateVersion()I
+HSPLcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;->onTimeStarted(JJJ)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;->setUpdateVersion(I)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;->update(JIJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;-><init>(Lcom/android/internal/os/Clock;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;ILjava/util/ArrayList;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;)V
@@ -9405,6 +9697,7 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;->onTimeStopped(JJJ)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;->refreshTimersLocked(JLjava/util/ArrayList;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;)J+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;->reset(ZJ)Z+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;
 HPLcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;->setMark(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;->setTimeout(J)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;->startRunningLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -9419,7 +9712,7 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl$TimeBase;->isRunning()Z
 HSPLcom/android/server/power/stats/BatteryStatsImpl$TimeBase;->readSummaryFromParcel(Landroid/os/Parcel;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$TimeBase;->remove(Lcom/android/server/power/stats/BatteryStatsImpl$TimeBaseObs;)V+]Ljava/util/Collection;Ljava/util/HashSet;,Ljava/util/ArrayList;
-HSPLcom/android/server/power/stats/BatteryStatsImpl$TimeBase;->setRunning(ZJJ)Z+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBaseObs;megamorphic_types]Ljava/util/Collection;Ljava/util/HashSet;,Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/power/stats/BatteryStatsImpl$TimeBase;->setRunning(ZJJ)Z+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBaseObs;megamorphic_types]Ljava/util/Collection;Ljava/util/HashSet;,Ljava/util/ArrayList;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$TimeBase;->writeSummaryToParcel(Landroid/os/Parcel;JJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;->-$$Nest$mwriteToParcel(Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;Landroid/os/Parcel;)V+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;->-$$Nest$smreadFromParcel(Landroid/os/Parcel;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;IIJ)Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;
@@ -9428,7 +9721,7 @@
 HPLcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;->getCountsLocked([JI)Z+]Lcom/android/internal/os/LongArrayMultiStateCounter;Lcom/android/internal/os/LongArrayMultiStateCounter;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;->getStateCount()I+]Lcom/android/internal/os/LongArrayMultiStateCounter;Lcom/android/internal/os/LongArrayMultiStateCounter;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;->readFromParcel(Landroid/os/Parcel;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;IIJ)Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;
-HSPLcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;->writeToParcel(Landroid/os/Parcel;)V
+HSPLcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;->writeToParcel(Landroid/os/Parcel;)V+]Lcom/android/internal/os/LongArrayMultiStateCounter;Lcom/android/internal/os/LongArrayMultiStateCounter;
 HPLcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;->-$$Nest$mincrement(Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;JJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;->-$$Nest$msetState(Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;IJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;->-$$Nest$mupdate(Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;JJ)J
@@ -9450,6 +9743,7 @@
 HPLcom/android/server/power/stats/BatteryStatsImpl$Timer;->getTimeSinceMarkLocked(J)J+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Timer;->getTotalTimeLocked(JI)J+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;megamorphic_types
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Timer;->onTimeStarted(JJJ)V
+HSPLcom/android/server/power/stats/BatteryStatsImpl$Timer;->onTimeStopped(JJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$BatchTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Timer;->readSummaryFromParcelLocked(Landroid/os/Parcel;)V
 HPLcom/android/server/power/stats/BatteryStatsImpl$Timer;->reset(ZJ)Z+]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Timer;->writeSummaryFromParcelLocked(Landroid/os/Parcel;J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;megamorphic_types]Landroid/os/Parcel;Landroid/os/Parcel;
@@ -9461,22 +9755,17 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$3;->instantiateObject()Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$3;->instantiateObject()Ljava/lang/Object;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;-><init>(Lcom/android/server/power/stats/BatteryStatsImpl;)V
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;->getStartTime(JI)J+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;->getStartTimeToNowLocked(J)J
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;->startLaunchedLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;->startRunningLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
-HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;->stopLaunchedLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
+HPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;->stopLaunchedLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;->stopRunningLocked(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg;-><init>(Lcom/android/server/power/stats/BatteryStatsImpl;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg;->newServiceStatsLocked()Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;
+HPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg;->noteWakeupAlarmLocked(Ljava/lang/String;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;-><init>(Lcom/android/server/power/stats/BatteryStatsImpl;Ljava/lang/String;)V
-HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;->addCpuTimeLocked(II)V
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;->getForegroundTime(I)J
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;->getNumAnrs(I)I
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;->getNumCrashes(I)I
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;->getStarts(I)I
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;->getSystemTime(I)J
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;->getUserTime(I)J
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;->readExcessivePowerFromParcelLocked(Landroid/os/Parcel;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;->writeExcessivePowerToParcelLocked(Landroid/os/Parcel;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid$Sensor;-><init>(Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;I)V
@@ -9492,7 +9781,7 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->-$$Nest$fputmUidEnergyConsumerStats(Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/internal/power/EnergyConsumerStats;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->-$$Nest$fputmWifiRadioApWakeupCount(Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->-$$Nest$mgetCpuActiveTimeCounter(Lcom/android/server/power/stats/BatteryStatsImpl$Uid;)Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;
-HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->-$$Nest$mgetProcStateScreenOffTimeCounter(Lcom/android/server/power/stats/BatteryStatsImpl$Uid;J)Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;
+HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->-$$Nest$mgetProcStateScreenOffTimeCounter(Lcom/android/server/power/stats/BatteryStatsImpl$Uid;J)Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->-$$Nest$mgetProcStateTimeCounter(Lcom/android/server/power/stats/BatteryStatsImpl$Uid;J)Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->-$$Nest$mmarkProcessForegroundTimeUs(Lcom/android/server/power/stats/BatteryStatsImpl$Uid;JZ)J
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;-><clinit>()V
@@ -9511,41 +9800,27 @@
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->detachFromTimeBase()V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->ensureMultiStateCounters(J)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->ensureNetworkActivityLocked()V
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getAggregatedPartialWakelockTimer()Landroid/os/BatteryStats$Timer;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getAggregatedPartialWakelockTimer()Lcom/android/server/power/stats/BatteryStatsImpl$Timer;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getAudioTurnedOnTimer()Landroid/os/BatteryStats$Timer;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getAudioTurnedOnTimer()Lcom/android/server/power/stats/BatteryStatsImpl$Timer;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getBluetoothControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getBluetoothControllerActivity()Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getBluetoothScanTimer()Lcom/android/server/power/stats/BatteryStatsImpl$Timer;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getCameraEnergyConsumptionUC()J
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getCameraTurnedOnTimer()Landroid/os/BatteryStats$Timer;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
+HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getCameraTurnedOnTimer()Landroid/os/BatteryStats$Timer;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getCameraTurnedOnTimer()Lcom/android/server/power/stats/BatteryStatsImpl$Timer;
-HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getCpuActiveTimeCounter()Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;+]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;
+HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getCpuActiveTimeCounter()Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getCpuEnergyConsumptionUC()J
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getCpuFreqTimes(I)[J+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getCpuFreqTimes([JI)Z+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getDeferredJobsCheckinLineLocked(Ljava/lang/StringBuilder;I)V+]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/power/stats/BatteryStatsImpl$Counter;Lcom/android/server/power/stats/BatteryStatsImpl$Counter;
+HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getCpuEnergyConsumptionUC(I)J+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getEnergyConsumptionUC(I)J+]Lcom/android/internal/power/EnergyConsumerStats;Lcom/android/internal/power/EnergyConsumerStats;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getEnergyConsumptionUC(II)J+]Lcom/android/internal/power/EnergyConsumerStats;Lcom/android/internal/power/EnergyConsumerStats;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getFlashlightTurnedOnTimer()Landroid/os/BatteryStats$Timer;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getFlashlightTurnedOnTimer()Lcom/android/server/power/stats/BatteryStatsImpl$Timer;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getForegroundActivityTimer()Landroid/os/BatteryStats$Timer;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getForegroundActivityTimer()Lcom/android/server/power/stats/BatteryStatsImpl$Timer;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getForegroundServiceTimer()Landroid/os/BatteryStats$Timer;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getForegroundServiceTimer()Lcom/android/server/power/stats/BatteryStatsImpl$Timer;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getFullWifiLockTime(JI)J+]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getGnssEnergyConsumptionUC()J
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getJobCompletionStats()Landroid/util/ArrayMap;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getJobStats()Landroid/util/ArrayMap;+]Lcom/android/server/power/stats/BatteryStatsImpl$OverflowArrayMap;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$3;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getMobileRadioActiveCount(I)I+]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getMobileRadioActiveTime(I)J+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
-HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getMobileRadioActiveTimeCounter()Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;+]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;
+HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getMobileRadioActiveTimeCounter()Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getMobileRadioActiveTimeInProcessState(I)J+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getMobileRadioEnergyConsumptionUC()J+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getMobileRadioEnergyConsumptionUC(I)J+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getModemControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getMulticastWakelockStats()Landroid/os/BatteryStats$Timer;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getNetworkActivityBytes(II)J+]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getNetworkActivityPackets(II)J+]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getOrCreateEnergyConsumerStatsIfSupportedLocked()Lcom/android/internal/power/EnergyConsumerStats;
@@ -9555,42 +9830,35 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getProcStateScreenOffTimeCounter(J)Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getProcStateTimeCounter(J)Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getProcessStateTime(IJI)J+]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getProcessStats()Landroid/util/ArrayMap;
-HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getProcessStatsLocked(Ljava/lang/String;)Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;
+HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getProcessStatsLocked(Ljava/lang/String;)Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getProportionalSystemServiceUsage()D
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getScreenOffCpuFreqTimes([JI)Z+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getScreenOnEnergyConsumptionUC()J
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getSensorStats()Landroid/util/SparseArray;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getSensorTimerLocked(IZ)Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getServiceStatsLocked(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getSyncStats()Landroid/util/ArrayMap;+]Lcom/android/server/power/stats/BatteryStatsImpl$OverflowArrayMap;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$2;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getSystemCpuTimeUs(I)J+]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getUid()I
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getUserCpuTimeUs(I)J+]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;
+HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getUid()I
+HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getUserCpuTimeUs(I)J
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getVideoTurnedOnTimer()Landroid/os/BatteryStats$Timer;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getVideoTurnedOnTimer()Lcom/android/server/power/stats/BatteryStatsImpl$Timer;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getWakelockStats()Landroid/util/ArrayMap;+]Lcom/android/server/power/stats/BatteryStatsImpl$OverflowArrayMap;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$1;
+HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getWakelockStats()Landroid/util/ArrayMap;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getWakelockTimerLocked(Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Wakelock;I)Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getWifiControllerActivity()Landroid/os/BatteryStats$ControllerActivityCounter;+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getWifiControllerActivity()Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getWifiRunningTime(JI)J+]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getWifiScanActualTime(J)J+]Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getWifiScanBackgroundCount(I)I+]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getWifiScanBackgroundTime(J)J+]Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DurationTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getWifiScanCount(I)I+]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->getWifiScanTime(JI)J+]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->initUserActivityLocked()V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->isInBackground()Z
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->makeProcessState(ILandroid/os/Parcel;)V
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->markProcessForegroundTimeUs(JZ)J+]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->maybeScheduleExternalStatsSync(II)V+]Lcom/android/server/power/stats/BatteryStatsImpl$ExternalStatsSync;Lcom/android/server/power/stats/BatteryExternalStatsWorker;
-HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteBinderCallStatsLocked(JLjava/util/Collection;)V+]Ljava/util/Collection;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteBinderCallStatsLocked(JLjava/util/Collection;)V+]Ljava/util/Collection;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteNetworkActivityLocked(IJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
-HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteStartJobLocked(Ljava/lang/String;J)V
+HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteStartJobLocked(Ljava/lang/String;J)V
+HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteStartSensor(IJ)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteStartWakeLocked(ILjava/lang/String;IJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$OverflowArrayMap;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$1;
-HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteStopJobLocked(Ljava/lang/String;JI)V
+HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteStopJobLocked(Ljava/lang/String;JI)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$OverflowArrayMap;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$3;
+HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteStopSensor(IJ)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteStopWakeLocked(ILjava/lang/String;IJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$OverflowArrayMap;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$1;
-HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteUserActivityLocked(I)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Counter;Lcom/android/server/power/stats/BatteryStatsImpl$Counter;
+HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->noteUserActivityLocked(I)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Counter;Lcom/android/server/power/stats/BatteryStatsImpl$Counter;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->nullIfAllZeros(Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounterArray;I)[J+]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounterArray;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounterArray;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->readJobCompletionsFromParcelLocked(Landroid/os/Parcel;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->readJobSummaryFromParcelLocked(Ljava/lang/String;Landroid/os/Parcel;)V
@@ -9603,6 +9871,10 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl$Uid;->writeJobCompletionsToParcelLocked(Landroid/os/Parcel;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/server/power/stats/BatteryStatsImpl$UserInfoProvider;-><init>()V
 HSPLcom/android/server/power/stats/BatteryStatsImpl$UserInfoProvider;->exists(I)Z
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->$r8$lambda$1Bfo2B6D-PL881pVpy-z5eaYl24(Lcom/android/server/power/stats/BatteryStatsImpl;JJILjava/lang/Long;)V
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->$r8$lambda$BudZ1A-04iJ7ual-8XJ01--XUQU(Lcom/android/server/power/stats/BatteryStatsImpl;JJIZLandroid/util/SparseLongArray;I[J)V
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->$r8$lambda$TCXsI9Nrd6VVCkujNPMcBRpuyKQ(Lcom/android/server/power/stats/BatteryStatsImpl;)V
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->$r8$lambda$Z22gddLFUYVkt9Spk2hhNd3yItI(Lcom/android/server/power/stats/BatteryStatsImpl;JJZLcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;I[J)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->-$$Nest$fgetmAudioTurnedOnTimers(Lcom/android/server/power/stats/BatteryStatsImpl;)Ljava/util/ArrayList;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->-$$Nest$fgetmBluetoothScanOnTimers(Lcom/android/server/power/stats/BatteryStatsImpl;)Ljava/util/ArrayList;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->-$$Nest$fgetmCameraTurnedOnTimers(Lcom/android/server/power/stats/BatteryStatsImpl;)Ljava/util/ArrayList;
@@ -9617,14 +9889,11 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->-$$Nest$fgetmWifiRunningTimers(Lcom/android/server/power/stats/BatteryStatsImpl;)Ljava/util/ArrayList;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->-$$Nest$fgetmWifiScanTimers(Lcom/android/server/power/stats/BatteryStatsImpl;)Ljava/util/ArrayList;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->-$$Nest$mtrackPerProcStateCpuTimes(Lcom/android/server/power/stats/BatteryStatsImpl;)Z
-HPLcom/android/server/power/stats/BatteryStatsImpl;->-$$Nest$sfgetZERO_LONG_COUNTER()Landroid/os/BatteryStats$LongCounter;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->-$$Nest$smdetachIfNotNull(Lcom/android/server/power/stats/BatteryStatsImpl$TimeBaseObs;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->-$$Nest$smdetachIfNotNull([Lcom/android/server/power/stats/BatteryStatsImpl$TimeBaseObs;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->-$$Nest$smisActiveRadioPowerState(I)Z
 HPLcom/android/server/power/stats/BatteryStatsImpl;->-$$Nest$smresetIfNotNull(Lcom/android/server/power/stats/BatteryStatsImpl$TimeBaseObs;ZJ)Z
 HSPLcom/android/server/power/stats/BatteryStatsImpl;-><clinit>()V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;-><init>(Lcom/android/internal/os/Clock;Ljava/io/File;Landroid/os/Handler;Lcom/android/server/power/stats/BatteryStatsImpl$PlatformIdleStateCallback;Lcom/android/server/power/stats/BatteryStatsImpl$EnergyStatsRetriever;Lcom/android/server/power/stats/BatteryStatsImpl$UserInfoProvider;)V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;-><init>(Ljava/io/File;Landroid/os/Handler;Lcom/android/server/power/stats/BatteryStatsImpl$PlatformIdleStateCallback;Lcom/android/server/power/stats/BatteryStatsImpl$EnergyStatsRetriever;Lcom/android/server/power/stats/BatteryStatsImpl$UserInfoProvider;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->aggregateLastWakeupUptimeLocked(JJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->clearPendingRemovedUidsLocked()V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->computeRealtime(JI)J
@@ -9633,11 +9902,9 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->detachIfNotNull([Lcom/android/server/power/stats/BatteryStatsImpl$TimeBaseObs;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->detachIfNotNull([[Lcom/android/server/power/stats/BatteryStatsImpl$TimeBaseObs;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->fillLowPowerStats()V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->getAvailableUidStatsLocked(I)Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->getAvailableUidStatsLocked(I)Lcom/android/server/power/stats/BatteryStatsImpl$Uid;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->getBatteryConsumerProcessStateNames()[Ljava/lang/String;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->getBatteryUptimeLocked(J)J+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->getCpuFreqCount()I+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->getCpuFreqs()[J+]Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->getDischargeAmountScreenDozeSinceCharge()I
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->getDischargeAmountScreenOffSinceCharge()I
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->getDischargeAmountScreenOnSinceCharge()I
@@ -9654,32 +9921,36 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->getUidStatsLocked(I)Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->getUidStatsLocked(IJJ)Lcom/android/server/power/stats/BatteryStatsImpl$Uid;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->getWakeupReasonTimerLocked(Ljava/lang/String;)Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;
-HPLcom/android/server/power/stats/BatteryStatsImpl;->getWifiBatteryStats()Landroid/os/connectivity/WifiBatteryStats;+]Landroid/os/BatteryStats$LongCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;,Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Landroid/os/BatteryStats$ControllerActivityCounter;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;
 HPLcom/android/server/power/stats/BatteryStatsImpl;->incrementPerRatDataLocked(Landroid/telephony/ModemActivityInfo;J)Lcom/android/server/power/stats/BatteryStatsImpl$RxTxConsumption;+]Lcom/android/server/power/stats/MobileRadioPowerCalculator;Lcom/android/server/power/stats/MobileRadioPowerCalculator;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/telephony/ModemActivityInfo;Landroid/telephony/ModemActivityInfo;]Lcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->informThatAllExternalStatsAreFlushed()V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->init(Lcom/android/internal/os/Clock;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->initDischarge(J)V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->initKernelSingleUidTimeReaderLocked()Z+]Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;]Lcom/android/internal/os/KernelSingleUidTimeReader;Lcom/android/internal/os/KernelSingleUidTimeReader;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->initTimersAndCounters()V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->initTimes(JJ)V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->isActiveRadioPowerState(I)Z
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->isOnBattery()Z
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->isOnBatteryLocked()Z
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->isOnBatteryScreenOffLocked()Z
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->isUsageHistoryEnabled()Z
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->lambda$new$8()V
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->lambda$readKernelUidCpuActiveTimesLocked$4(JJILjava/lang/Long;)V+]Lcom/android/server/power/stats/BatteryStatsImpl$UserInfoProvider;Lcom/android/server/am/BatteryStatsService$3;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/Long;Ljava/lang/Long;
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->lambda$readKernelUidCpuClusterTimesLocked$5(JJZLcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;I[J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$UserInfoProvider;Lcom/android/server/am/BatteryStatsService$3;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounterArray;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounterArray;]Lcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;Lcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->lambda$readKernelUidCpuTimesLocked$2(JJIZLandroid/util/SparseLongArray;I[J)V+]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$UserInfoProvider;Lcom/android/server/am/BatteryStatsService$3;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->mapIsolatedUid(I)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->mapUid(I)I+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->markPartialTimersAsEligible()V
-HPLcom/android/server/power/stats/BatteryStatsImpl;->noteAlarmFinishLocked(Ljava/lang/String;Landroid/os/WorkSource;IJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
+HPLcom/android/server/power/stats/BatteryStatsImpl;->noteAudioOnLocked(IJJ)V
 HPLcom/android/server/power/stats/BatteryStatsImpl;->noteBinderCallStats(IJLjava/util/Collection;JJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
+HPLcom/android/server/power/stats/BatteryStatsImpl;->noteBluetoothScanResultsFromSourceLocked(Landroid/os/WorkSource;IJJ)V
+HPLcom/android/server/power/stats/BatteryStatsImpl;->noteBluetoothScanStartedLocked(Landroid/os/WorkSource$WorkChain;IZJJ)V
 HPLcom/android/server/power/stats/BatteryStatsImpl;->noteChangeWakelockFromSourceLocked(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;ILandroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/WorkSource;Landroid/os/WorkSource;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteEventLocked(ILjava/lang/String;IJJ)V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteJobFinishLocked(Ljava/lang/String;IIJJ)V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteJobStartLocked(Ljava/lang/String;IJJ)V
-HPLcom/android/server/power/stats/BatteryStatsImpl;->noteModemControllerActivity(Landroid/telephony/ModemActivityInfo;JJJLandroid/app/usage/NetworkStatsManager;)V+]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/net/NetworkStats;Landroid/net/NetworkStats;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;]Lcom/android/internal/power/EnergyConsumerStats;Lcom/android/internal/power/EnergyConsumerStats;]Landroid/util/SparseDoubleArray;Landroid/util/SparseDoubleArray;]Landroid/net/NetworkStats$Entry;Landroid/net/NetworkStats$Entry;]Lcom/android/server/power/stats/MobileRadioPowerCalculator;Lcom/android/server/power/stats/MobileRadioPowerCalculator;]Lcom/android/internal/os/RailStats;Lcom/android/internal/os/RailStats;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Landroid/telephony/ModemActivityInfo;Landroid/telephony/ModemActivityInfo;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Ljava/util/Iterator;Landroid/net/NetworkStats$1;]Lcom/android/internal/os/PowerProfile;Lcom/android/internal/os/PowerProfile;
+HPLcom/android/server/power/stats/BatteryStatsImpl;->noteJobFinishLocked(Ljava/lang/String;IIJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Landroid/os/BatteryStats$HistoryEventTracker;Landroid/os/BatteryStats$HistoryEventTracker;
+HPLcom/android/server/power/stats/BatteryStatsImpl;->noteJobStartLocked(Ljava/lang/String;IJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Landroid/os/BatteryStats$HistoryEventTracker;Landroid/os/BatteryStats$HistoryEventTracker;
+HPLcom/android/server/power/stats/BatteryStatsImpl;->noteMobileRadioPowerStateLocked(IJIJJ)Z
+HPLcom/android/server/power/stats/BatteryStatsImpl;->noteModemControllerActivity(Landroid/telephony/ModemActivityInfo;JJJLandroid/app/usage/NetworkStatsManager;)V+]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/net/NetworkStats;Landroid/net/NetworkStats;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;]Landroid/net/NetworkStats$Entry;Landroid/net/NetworkStats$Entry;]Lcom/android/internal/os/RailStats;Lcom/android/internal/os/RailStats;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Landroid/telephony/ModemActivityInfo;Landroid/telephony/ModemActivityInfo;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Lcom/android/internal/os/PowerProfile;Lcom/android/internal/os/PowerProfile;]Lcom/android/internal/power/EnergyConsumerStats;Lcom/android/internal/power/EnergyConsumerStats;]Landroid/util/SparseDoubleArray;Landroid/util/SparseDoubleArray;]Lcom/android/server/power/stats/MobileRadioPowerCalculator;Lcom/android/server/power/stats/MobileRadioPowerCalculator;
 HPLcom/android/server/power/stats/BatteryStatsImpl;->notePhoneDataConnectionStateLocked(IZIIJJ)V
-HPLcom/android/server/power/stats/BatteryStatsImpl;->notePhoneSignalStrengthLocked(ILandroid/util/SparseIntArray;JJ)V
-HPLcom/android/server/power/stats/BatteryStatsImpl;->notePhoneSignalStrengthLocked(Landroid/telephony/SignalStrength;JJ)V
+HPLcom/android/server/power/stats/BatteryStatsImpl;->notePhoneSignalStrengthLocked(ILandroid/util/SparseIntArray;JJ)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;
+HPLcom/android/server/power/stats/BatteryStatsImpl;->notePhoneSignalStrengthLocked(Landroid/telephony/SignalStrength;JJ)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/telephony/SignalStrength;Landroid/telephony/SignalStrength;]Landroid/telephony/CellSignalStrength;Landroid/telephony/CellSignalStrengthLte;,Landroid/telephony/CellSignalStrengthNr;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->notePowerSaveModeLockedInit(ZJJ)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteProcessStartLocked(Ljava/lang/String;IJJ)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteScreenStateLocked(IIJJJ)V
@@ -9690,8 +9961,9 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteStopWakeFromSourceLocked(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/WorkSource;Landroid/os/WorkSource;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/WorkSource$WorkChain;Landroid/os/WorkSource$WorkChain;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteStopWakeLocked(IILandroid/os/WorkSource$WorkChain;Ljava/lang/String;Ljava/lang/String;IJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Landroid/os/WorkSource$WorkChain;Landroid/os/WorkSource$WorkChain;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteUidProcessStateLocked(IIJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteUserActivityLocked(IIJJ)V
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->noteUserActivityLocked(IIJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;
 HPLcom/android/server/power/stats/BatteryStatsImpl;->noteWakupAlarmLocked(Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;JJ)V
+HPLcom/android/server/power/stats/BatteryStatsImpl;->noteWifiRadioApWakeupLocked(JJI)V
 HPLcom/android/server/power/stats/BatteryStatsImpl;->noteWifiRadioPowerState(IJIJJ)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->pullPendingStateUpdatesLocked()V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->readDailyItemTagDetailsLocked(Lcom/android/modules/utils/TypedXmlPullParser;Landroid/os/BatteryStats$DailyItem;ZLjava/lang/String;)V
@@ -9700,16 +9972,17 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->readDailyStatsLocked()V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->readKernelUidCpuActiveTimesLocked(Z)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->readKernelUidCpuClusterTimesLocked(ZLcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;)V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->readKernelUidCpuFreqTimesLocked(Ljava/util/ArrayList;ZZLcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;)V+]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;]Lcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;Lcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;]Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/internal/os/PowerProfile;Lcom/android/internal/os/PowerProfile;
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->readKernelUidCpuFreqTimesLocked(Ljava/util/ArrayList;ZZLcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;)V+]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;Lcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;]Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/internal/os/PowerProfile;Lcom/android/internal/os/PowerProfile;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->readKernelUidCpuTimesLocked(Ljava/util/ArrayList;Landroid/util/SparseLongArray;Z)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->readLocked()V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->readSummaryFromParcel(Landroid/os/Parcel;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Landroid/os/BatteryStats$LevelStepTracker;Landroid/os/BatteryStats$LevelStepTracker;]Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/BatteryStatsImpl$DisplayBatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl$DisplayBatteryStats;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;]Lcom/android/server/power/stats/BatteryStatsImpl$Counter;Lcom/android/server/power/stats/BatteryStatsImpl$Counter;]Lcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$BatchTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Landroid/os/Parcel;Landroid/os/Parcel;]Lcom/android/internal/os/PowerProfile;Lcom/android/internal/os/PowerProfile;]Lcom/android/internal/power/EnergyConsumerStats$Config;Lcom/android/internal/power/EnergyConsumerStats$Config;
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->readSummaryFromParcel(Landroid/os/Parcel;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->recordDailyStatsIfNeededLocked(ZJ)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->recordHistoryEventLocked(JJILjava/lang/String;I)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->reportChangesToStatsLog(III)V
 HPLcom/android/server/power/stats/BatteryStatsImpl;->requestWakelockCpuUpdate()V+]Lcom/android/server/power/stats/BatteryStatsImpl$ExternalStatsSync;Lcom/android/server/power/stats/BatteryExternalStatsWorker;
 HPLcom/android/server/power/stats/BatteryStatsImpl;->resetAllStatsLocked(JJI)V
 HPLcom/android/server/power/stats/BatteryStatsImpl;->resetIfNotNull(Lcom/android/server/power/stats/BatteryStatsImpl$TimeBaseObs;ZJ)Z+]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBaseObs;megamorphic_types
+HPLcom/android/server/power/stats/BatteryStatsImpl;->resetIfNotNull([Lcom/android/server/power/stats/BatteryStatsImpl$TimeBaseObs;ZJ)Z
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->setBatteryResetListener(Lcom/android/server/power/stats/BatteryStatsImpl$BatteryResetListener;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->setBatteryStateLocked(IIIIIIIIJJJJ)V+]Landroid/os/Handler;Lcom/android/server/power/stats/BatteryStatsImpl$MyHandler;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/BatteryStats$LevelStepTracker;Landroid/os/BatteryStats$LevelStepTracker;]Lcom/android/server/power/stats/BatteryStatsImpl$ExternalStatsSync;Lcom/android/server/power/stats/BatteryExternalStatsWorker;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->setBatteryStatsConfig(Lcom/android/server/power/stats/BatteryStatsImpl$BatteryStatsConfig;)V
@@ -9717,114 +9990,89 @@
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->setChargingLocked(Z)Z
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->setDisplayCountLocked(I)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->setExternalStatsSyncLocked(Lcom/android/server/power/stats/BatteryStatsImpl$ExternalStatsSync;)V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->setPowerProfileLocked(Lcom/android/internal/os/PowerProfile;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->setRadioScanningTimeoutLocked(J)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->startTrackingSystemServerCpuTime()V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->trackPerProcStateCpuTimes()Z
-HPLcom/android/server/power/stats/BatteryStatsImpl;->updateAllPhoneStateLocked(IIIJJ)V
-HPLcom/android/server/power/stats/BatteryStatsImpl;->updateBluetoothStateLocked(Landroid/bluetooth/BluetoothActivityEnergyInfo;JJJ)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Landroid/bluetooth/UidTraffic;Landroid/bluetooth/UidTraffic;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/BatteryStatsImpl$BluetoothActivityInfoCache;Lcom/android/server/power/stats/BatteryStatsImpl$BluetoothActivityInfoCache;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Landroid/bluetooth/BluetoothActivityEnergyInfo;Landroid/bluetooth/BluetoothActivityEnergyInfo;]Lcom/android/internal/os/PowerProfile;Lcom/android/internal/os/PowerProfile;]Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;
-HPLcom/android/server/power/stats/BatteryStatsImpl;->updateCameraEnergyConsumerStatsLocked(JJ)V+]Landroid/util/SparseDoubleArray;Landroid/util/SparseDoubleArray;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/power/EnergyConsumerStats;Lcom/android/internal/power/EnergyConsumerStats;
-HPLcom/android/server/power/stats/BatteryStatsImpl;->updateCpuEnergyConsumerStatsLocked([JLcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;]Lcom/android/internal/power/EnergyConsumerStats;Lcom/android/internal/power/EnergyConsumerStats;
+HPLcom/android/server/power/stats/BatteryStatsImpl;->updateAllPhoneStateLocked(IIIJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;
+HPLcom/android/server/power/stats/BatteryStatsImpl;->updateBluetoothStateLocked(Landroid/bluetooth/BluetoothActivityEnergyInfo;JJJ)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/BatteryStatsImpl$BluetoothActivityInfoCache;Lcom/android/server/power/stats/BatteryStatsImpl$BluetoothActivityInfoCache;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Landroid/bluetooth/BluetoothActivityEnergyInfo;Landroid/bluetooth/BluetoothActivityEnergyInfo;]Lcom/android/internal/os/PowerProfile;Lcom/android/internal/os/PowerProfile;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/bluetooth/UidTraffic;Landroid/bluetooth/UidTraffic;
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateClusterSpeedTimes(Landroid/util/SparseLongArray;ZLcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;Lcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/internal/os/KernelCpuSpeedReader;Lcom/android/internal/os/KernelCpuSpeedReader;]Lcom/android/internal/os/PowerProfile;Lcom/android/internal/os/PowerProfile;
+HPLcom/android/server/power/stats/BatteryStatsImpl;->updateCpuEnergyConsumerStatsLocked([JLcom/android/server/power/stats/BatteryStatsImpl$CpuDeltaPowerAccumulator;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/internal/power/EnergyConsumerStats;Lcom/android/internal/power/EnergyConsumerStats;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateCpuTimeLocked(ZZ[J)V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateCpuTimesForAllUids()V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;]Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/internal/os/LongArrayMultiStateCounter;Lcom/android/internal/os/LongArrayMultiStateCounter;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;]Lcom/android/internal/os/KernelSingleUidTimeReader;Lcom/android/internal/os/KernelSingleUidTimeReader;
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateCpuTimesForAllUids()V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/internal/os/LongArrayMultiStateCounter;Lcom/android/internal/os/LongArrayMultiStateCounter;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;]Lcom/android/internal/os/KernelSingleUidTimeReader;Lcom/android/internal/os/KernelSingleUidTimeReader;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateDailyDeadlineLocked()V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateDisplayEnergyConsumerStatsLocked([J[IJ)V+]Landroid/util/SparseDoubleArray;Landroid/util/SparseDoubleArray;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/power/EnergyConsumerStats;Lcom/android/internal/power/EnergyConsumerStats;
+HPLcom/android/server/power/stats/BatteryStatsImpl;->updateGnssEnergyConsumerStatsLocked(JJ)V+]Landroid/util/SparseDoubleArray;Landroid/util/SparseDoubleArray;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/power/EnergyConsumerStats;Lcom/android/internal/power/EnergyConsumerStats;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateKernelMemoryBandwidthLocked(J)V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateKernelWakelocksLocked(J)V+]Lcom/android/server/power/stats/KernelWakelockReader;Lcom/android/server/power/stats/KernelWakelockReader;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/util/HashMap;Ljava/util/HashMap;,Lcom/android/server/power/stats/KernelWakelockStats;]Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateKernelWakelocksLocked(J)V+]Lcom/android/server/power/stats/KernelWakelockReader;Lcom/android/server/power/stats/KernelWakelockReader;]Ljava/util/HashMap;Ljava/util/HashMap;,Lcom/android/server/power/stats/KernelWakelockStats;]Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateNewDischargeScreenLevelLocked(I)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateProcStateCpuTimesLocked(IJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/internal/os/LongArrayMultiStateCounter;Lcom/android/internal/os/LongArrayMultiStateCounter;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;]Lcom/android/internal/os/KernelSingleUidTimeReader;Lcom/android/internal/os/KernelSingleUidTimeReader;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateRailStatsLocked()V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateRpmStatsLocked(J)V+]Ljava/util/Map$Entry;Landroid/util/MapCollections$MapIterator;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Iterator;Landroid/util/MapCollections$MapIterator;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateRpmStatsLocked(J)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;]Ljava/util/Map;Landroid/util/ArrayMap;
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateSystemServerThreadStats()V
 HPLcom/android/server/power/stats/BatteryStatsImpl;->updateSystemServiceCallStats()V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->updateTimeBasesLocked(ZIJJ)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HPLcom/android/server/power/stats/BatteryStatsImpl;->updateWifiState(Landroid/os/connectivity/WifiActivityEnergyInfo;JJJLandroid/app/usage/NetworkStatsManager;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/net/NetworkStats;Landroid/net/NetworkStats;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/net/NetworkStats$Entry;Landroid/net/NetworkStats$Entry;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;]Lcom/android/internal/os/RailStats;Lcom/android/internal/os/RailStats;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Landroid/os/connectivity/WifiActivityEnergyInfo;Landroid/os/connectivity/WifiActivityEnergyInfo;]Ljava/util/Iterator;Landroid/net/NetworkStats$1;]Lcom/android/internal/os/PowerProfile;Lcom/android/internal/os/PowerProfile;
+HPLcom/android/server/power/stats/BatteryStatsImpl;->updateWifiState(Landroid/os/connectivity/WifiActivityEnergyInfo;JJJLandroid/app/usage/NetworkStatsManager;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/net/NetworkStats;Landroid/net/NetworkStats;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/net/NetworkStats$Entry;Landroid/net/NetworkStats$Entry;]Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/internal/os/RailStats;Lcom/android/internal/os/RailStats;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Landroid/os/connectivity/WifiActivityEnergyInfo;Landroid/os/connectivity/WifiActivityEnergyInfo;]Lcom/android/internal/os/PowerProfile;Lcom/android/internal/os/PowerProfile;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->writeAsyncLocked()V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->writeDailyLevelSteps(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;Landroid/os/BatteryStats$LevelStepTracker;Ljava/lang/StringBuilder;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->writeHistoryLocked()V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->writeParcelToFileLocked(Landroid/os/Parcel;Landroid/util/AtomicFile;)V
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->writeStatsLocked()V
-HSPLcom/android/server/power/stats/BatteryStatsImpl;->writeSummaryToParcel(Landroid/os/Parcel;Z)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Lcom/android/server/power/stats/BatteryStatsImpl$Counter;Lcom/android/server/power/stats/BatteryStatsImpl$Counter;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;]Lcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;]Lcom/android/internal/os/Clock;Lcom/android/internal/os/Clock$1;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$BatchTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;,Landroid/util/MapCollections$MapIterator;]Landroid/os/Parcel;Landroid/os/Parcel;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;,Landroid/util/MapCollections$MapIterator;]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/BatteryStats$LevelStepTracker;Landroid/os/BatteryStats$LevelStepTracker;]Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$DisplayBatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl$DisplayBatteryStats;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;,Ljava/util/HashMap$EntrySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$OverflowArrayMap;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$1;,Lcom/android/server/power/stats/BatteryStatsImpl$Uid$3;,Lcom/android/server/power/stats/BatteryStatsImpl$Uid$2;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;
+HSPLcom/android/server/power/stats/BatteryStatsImpl;->writeSummaryToParcel(Landroid/os/Parcel;Z)V+]Lcom/android/server/power/stats/BatteryStatsImpl$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;Lcom/android/server/power/stats/BatteryStatsImpl$TimeBase;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Lcom/android/server/power/stats/BatteryStatsImpl$Counter;Lcom/android/server/power/stats/BatteryStatsImpl$Counter;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Pkg$Serv;]Lcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl$RadioAccessTechnologyBatteryStats;]Lcom/android/internal/os/BatteryStatsHistory;Lcom/android/internal/os/BatteryStatsHistory;]Lcom/android/server/power/stats/BatteryStatsImpl$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$BatchTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;,Lcom/android/server/power/stats/BatteryStatsImpl$SamplingTimer;]Landroid/os/Parcel;Landroid/os/Parcel;]Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/BatteryStats$LevelStepTracker;Landroid/os/BatteryStats$LevelStepTracker;]Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;]Lcom/android/server/power/stats/BatteryStatsImpl$DisplayBatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl$DisplayBatteryStats;]Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;]Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;Lcom/android/server/power/stats/BatteryStatsImpl$TimeInFreqMultiStateCounter;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/server/power/stats/BatteryStatsImpl$OverflowArrayMap;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$1;,Lcom/android/server/power/stats/BatteryStatsImpl$Uid$3;,Lcom/android/server/power/stats/BatteryStatsImpl$Uid$2;
 HSPLcom/android/server/power/stats/BatteryStatsImpl;->writeSyncLocked()V
 HSPLcom/android/server/power/stats/BatteryUsageStatsProvider;-><init>(Landroid/content/Context;Landroid/os/BatteryStats;)V
 HSPLcom/android/server/power/stats/BatteryUsageStatsProvider;-><init>(Landroid/content/Context;Landroid/os/BatteryStats;Lcom/android/server/power/stats/BatteryUsageStatsStore;)V
+HPLcom/android/server/power/stats/BatteryUsageStatsProvider;->getBatteryUsageStats(Ljava/util/List;)Ljava/util/List;
 HPLcom/android/server/power/stats/BatteryUsageStatsProvider;->getCurrentBatteryUsageStats(Landroid/os/BatteryUsageStatsQuery;J)Landroid/os/BatteryUsageStats;+]Lcom/android/server/power/stats/PowerCalculator;megamorphic_types]Landroid/os/BatteryUsageStatsQuery;Landroid/os/BatteryUsageStatsQuery;]Lcom/android/server/power/stats/BatteryStatsImpl;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Lcom/android/server/power/stats/BatteryUsageStatsProvider;Lcom/android/server/power/stats/BatteryUsageStatsProvider;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
-HPLcom/android/server/power/stats/BatteryUsageStatsProvider;->getPowerCalculators()Ljava/util/List;
-HPLcom/android/server/power/stats/BatteryUsageStatsProvider;->getProcessBackgroundTimeMs(Landroid/os/BatteryStats$Uid;J)J
+HPLcom/android/server/power/stats/BatteryUsageStatsProvider;->getProcessBackgroundTimeMs(Landroid/os/BatteryStats$Uid;J)J+]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HPLcom/android/server/power/stats/BatteryUsageStatsProvider;->getProcessForegroundTimeMs(Landroid/os/BatteryStats$Uid;J)J+]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;
-HPLcom/android/server/power/stats/BatteryUsageStatsProvider;->verify(Landroid/os/BatteryUsageStats;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/BatteryUsageStats;Landroid/os/BatteryUsageStats;]Landroid/os/UidBatteryConsumer;Landroid/os/UidBatteryConsumer;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HPLcom/android/server/power/stats/BatteryUsageStatsProvider;->verify(Landroid/os/BatteryUsageStats;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/BatteryUsageStats;Landroid/os/BatteryUsageStats;]Landroid/os/UidBatteryConsumer;Landroid/os/UidBatteryConsumer;
 HSPLcom/android/server/power/stats/BatteryUsageStatsStore$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/power/stats/BatteryUsageStatsStore;)V
 HSPLcom/android/server/power/stats/BatteryUsageStatsStore;-><clinit>()V
 HSPLcom/android/server/power/stats/BatteryUsageStatsStore;-><init>(Landroid/content/Context;Lcom/android/server/power/stats/BatteryStatsImpl;Ljava/io/File;Landroid/os/Handler;)V
 HSPLcom/android/server/power/stats/BatteryUsageStatsStore;-><init>(Landroid/content/Context;Lcom/android/server/power/stats/BatteryStatsImpl;Ljava/io/File;Landroid/os/Handler;J)V
 HPLcom/android/server/power/stats/BluetoothPowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Landroid/os/BatteryUsageStatsQuery;Landroid/os/BatteryUsageStatsQuery;]Landroid/os/AggregateBatteryConsumer$Builder;Landroid/os/AggregateBatteryConsumer$Builder;]Lcom/android/server/power/stats/BluetoothPowerCalculator;Lcom/android/server/power/stats/BluetoothPowerCalculator;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/os/BatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/BluetoothPowerCalculator;->calculateApp(Landroid/os/UidBatteryConsumer$Builder;Lcom/android/server/power/stats/BluetoothPowerCalculator$PowerAndDuration;Landroid/os/BatteryUsageStatsQuery;)V+]Landroid/os/BatteryUsageStatsQuery;Landroid/os/BatteryUsageStatsQuery;]Lcom/android/server/power/stats/BluetoothPowerCalculator;Lcom/android/server/power/stats/BluetoothPowerCalculator;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
-HPLcom/android/server/power/stats/BluetoothPowerCalculator;->calculatePowerAndDuration(Landroid/os/BatteryStats$Uid;IJLandroid/os/BatteryStats$ControllerActivityCounter;ZLcom/android/server/power/stats/BluetoothPowerCalculator$PowerAndDuration;)V+]Landroid/os/BatteryStats$LongCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;,Lcom/android/server/power/stats/BatteryStatsImpl$1;,Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;]Lcom/android/server/power/stats/BluetoothPowerCalculator;Lcom/android/server/power/stats/BluetoothPowerCalculator;]Landroid/os/BatteryStats$ControllerActivityCounter;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;
+HPLcom/android/server/power/stats/BluetoothPowerCalculator;->calculatePowerAndDuration(Landroid/os/BatteryStats$Uid;IJLandroid/os/BatteryStats$ControllerActivityCounter;ZLcom/android/server/power/stats/BluetoothPowerCalculator$PowerAndDuration;)V+]Landroid/os/BatteryStats$LongCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;,Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;,Lcom/android/server/power/stats/BatteryStatsImpl$1;]Lcom/android/server/power/stats/BluetoothPowerCalculator;Lcom/android/server/power/stats/BluetoothPowerCalculator;]Landroid/os/BatteryStats$ControllerActivityCounter;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;
 HPLcom/android/server/power/stats/CameraPowerCalculator;->calculateApp(Landroid/os/UidBatteryConsumer$Builder;Landroid/os/BatteryStats$Uid;JJLandroid/os/BatteryUsageStatsQuery;)V+]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/UsageBasedPowerEstimator;Lcom/android/server/power/stats/UsageBasedPowerEstimator;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
-HSPLcom/android/server/power/stats/CpuPowerCalculator;-><init>(Lcom/android/internal/os/PowerProfile;)V
 HPLcom/android/server/power/stats/CpuPowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Landroid/os/BatteryUsageStatsQuery;Landroid/os/BatteryUsageStatsQuery;]Landroid/os/AggregateBatteryConsumer$Builder;Landroid/os/AggregateBatteryConsumer$Builder;]Lcom/android/server/power/stats/CpuPowerCalculator;Lcom/android/server/power/stats/CpuPowerCalculator;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/os/BatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/CpuPowerCalculator;->calculateApp(Landroid/os/UidBatteryConsumer$Builder;Landroid/os/BatteryStats$Uid;Landroid/os/BatteryUsageStatsQuery;Lcom/android/server/power/stats/CpuPowerCalculator$Result;[Landroid/os/BatteryConsumer$Key;)V+]Landroid/os/BatteryUsageStatsQuery;Landroid/os/BatteryUsageStatsQuery;]Lcom/android/server/power/stats/CpuPowerCalculator;Lcom/android/server/power/stats/CpuPowerCalculator;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/CpuPowerCalculator;->calculateEnergyConsumptionPerProcessState(Landroid/os/UidBatteryConsumer$Builder;Landroid/os/BatteryStats$Uid;[Landroid/os/BatteryConsumer$Key;)V+]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/CpuPowerCalculator;->calculateModeledPowerPerProcessState(Landroid/os/UidBatteryConsumer$Builder;Landroid/os/BatteryStats$Uid;[Landroid/os/BatteryConsumer$Key;Lcom/android/server/power/stats/CpuPowerCalculator$Result;)V+]Lcom/android/server/power/stats/CpuPowerCalculator;Lcom/android/server/power/stats/CpuPowerCalculator;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/UsageBasedPowerEstimator;Lcom/android/server/power/stats/UsageBasedPowerEstimator;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/CpuPowerCalculator;->calculatePerCpuClusterPowerMah(IJ)D
-HPLcom/android/server/power/stats/CpuPowerCalculator;->calculatePerCpuFreqPowerMah(IIJ)D
+HPLcom/android/server/power/stats/CpuPowerCalculator;->calculatePerCpuFreqPowerMah(IIJ)D+]Lcom/android/server/power/stats/UsageBasedPowerEstimator;Lcom/android/server/power/stats/UsageBasedPowerEstimator;
 HPLcom/android/server/power/stats/CpuPowerCalculator;->calculatePowerAndDuration(Landroid/os/BatteryStats$Uid;IJILcom/android/server/power/stats/CpuPowerCalculator$Result;)V+]Landroid/os/BatteryStats$Uid$Proc;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Proc;]Ljava/lang/String;Ljava/lang/String;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/power/stats/CpuPowerCalculator;Lcom/android/server/power/stats/CpuPowerCalculator;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HPLcom/android/server/power/stats/CpuPowerCalculator;->calculateUidModeledPowerMah(Landroid/os/BatteryStats$Uid;J[J[J)D+]Lcom/android/server/power/stats/CpuPowerCalculator;Lcom/android/server/power/stats/CpuPowerCalculator;]Lcom/android/server/power/stats/UsageBasedPowerEstimator;Lcom/android/server/power/stats/UsageBasedPowerEstimator;
-HPLcom/android/server/power/stats/CpuWakeupStats$$ExternalSyntheticLambda0;->run()V
-HSPLcom/android/server/power/stats/CpuWakeupStats$Config;-><clinit>()V
-HSPLcom/android/server/power/stats/CpuWakeupStats$Config;-><init>()V
-HPLcom/android/server/power/stats/CpuWakeupStats$Wakeup;->parseWakeup(Ljava/lang/String;JJ)Lcom/android/server/power/stats/CpuWakeupStats$Wakeup;+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
-HSPLcom/android/server/power/stats/CpuWakeupStats$WakingActivityHistory;-><clinit>()V
-HSPLcom/android/server/power/stats/CpuWakeupStats$WakingActivityHistory;-><init>()V
-HSPLcom/android/server/power/stats/CpuWakeupStats$WakingActivityHistory;-><init>(Lcom/android/server/power/stats/CpuWakeupStats$WakingActivityHistory-IA;)V
-HPLcom/android/server/power/stats/CpuWakeupStats$WakingActivityHistory;->clearAllBefore(J)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/TimeSparseArray;Landroid/util/TimeSparseArray;
-HPLcom/android/server/power/stats/CpuWakeupStats$WakingActivityHistory;->recordActivity(IJ[I)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/TimeSparseArray;Landroid/util/TimeSparseArray;
-HSPLcom/android/server/power/stats/CpuWakeupStats;-><clinit>()V
-HSPLcom/android/server/power/stats/CpuWakeupStats;-><init>(Landroid/content/Context;ILandroid/os/Handler;)V
-HPLcom/android/server/power/stats/CpuWakeupStats;->attemptAttributionFor(Lcom/android/server/power/stats/CpuWakeupStats$Wakeup;)V+]Lcom/android/server/power/stats/CpuWakeupStats;Lcom/android/server/power/stats/CpuWakeupStats;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/power/stats/CpuWakeupStats$WakingActivityHistory;Lcom/android/server/power/stats/CpuWakeupStats$WakingActivityHistory;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/TimeSparseArray;Landroid/util/TimeSparseArray;
-HPLcom/android/server/power/stats/CpuWakeupStats;->attemptAttributionWith(IJ[I)Z
-HPLcom/android/server/power/stats/CpuWakeupStats;->getResponsibleSubsystemsForWakeup(Lcom/android/server/power/stats/CpuWakeupStats$Wakeup;)Landroid/util/SparseBooleanArray;+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/power/stats/IrqDeviceMap;Lcom/android/server/power/stats/IrqDeviceMap;
-HPLcom/android/server/power/stats/CpuWakeupStats;->logWakeupToStatsLog(Lcom/android/server/power/stats/CpuWakeupStats$Wakeup;)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/IntArray;Landroid/util/IntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/TimeSparseArray;Landroid/util/TimeSparseArray;
-HPLcom/android/server/power/stats/CpuWakeupStats;->noteWakeupTimeAndReason(JJLjava/lang/String;)V+]Lcom/android/server/power/stats/CpuWakeupStats;Lcom/android/server/power/stats/CpuWakeupStats;]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/power/stats/CpuWakeupStats$WakingActivityHistory;Lcom/android/server/power/stats/CpuWakeupStats$WakingActivityHistory;]Landroid/util/TimeSparseArray;Landroid/util/TimeSparseArray;
-HPLcom/android/server/power/stats/CpuWakeupStats;->noteWakingActivity(IJ[I)V
 HPLcom/android/server/power/stats/CustomEnergyConsumerPowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Lcom/android/server/power/stats/CustomEnergyConsumerPowerCalculator;Lcom/android/server/power/stats/CustomEnergyConsumerPowerCalculator;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/os/BatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;]Landroid/os/AggregateBatteryConsumer$Builder;Landroid/os/AggregateBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/CustomEnergyConsumerPowerCalculator;->calculateApp(Landroid/os/UidBatteryConsumer$Builder;Landroid/os/BatteryStats$Uid;[D)[D+]Lcom/android/server/power/stats/CustomEnergyConsumerPowerCalculator;Lcom/android/server/power/stats/CustomEnergyConsumerPowerCalculator;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/CustomEnergyConsumerPowerCalculator;->uCtoMah([J)[D
 HSPLcom/android/server/power/stats/EnergyConsumerSnapshot$EnergyConsumerDeltaData;-><init>()V
 HSPLcom/android/server/power/stats/EnergyConsumerSnapshot$EnergyConsumerDeltaData;->isEmpty()Z
 HSPLcom/android/server/power/stats/EnergyConsumerSnapshot;->updateAndGetDelta([Landroid/hardware/power/stats/EnergyConsumerResult;I)Lcom/android/server/power/stats/EnergyConsumerSnapshot$EnergyConsumerDeltaData;
-HSPLcom/android/server/power/stats/EnergyConsumerSnapshot;->updateAndGetDeltaForTypeOther(Landroid/hardware/power/stats/EnergyConsumer;[Landroid/hardware/power/stats/EnergyConsumerAttribution;I)Landroid/util/SparseLongArray;+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/power/stats/EnergyConsumerSnapshot;Lcom/android/server/power/stats/EnergyConsumerSnapshot;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/power/stats/EnergyConsumerSnapshot;->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/power/stats/EnergyConsumerSnapshot;Lcom/android/server/power/stats/EnergyConsumerSnapshot;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/power/stats/FlashlightPowerCalculator;->calculateApp(Landroid/os/UidBatteryConsumer$Builder;Landroid/os/BatteryStats$Uid;JJLandroid/os/BatteryUsageStatsQuery;)V
 HPLcom/android/server/power/stats/GnssPowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Landroid/os/AggregateBatteryConsumer$Builder;Landroid/os/AggregateBatteryConsumer$Builder;]Lcom/android/server/power/stats/GnssPowerCalculator;Lcom/android/server/power/stats/GnssPowerCalculator;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/GnssPowerCalculator;->calculateApp(Landroid/os/UidBatteryConsumer$Builder;Landroid/os/BatteryStats$Uid;IJDJ)D+]Lcom/android/server/power/stats/GnssPowerCalculator;Lcom/android/server/power/stats/GnssPowerCalculator;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/GnssPowerCalculator;->computeDuration(Landroid/os/BatteryStats$Uid;JI)J+]Landroid/os/BatteryStats$Uid$Sensor;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Sensor;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
 HPLcom/android/server/power/stats/GnssPowerCalculator;->computePower(JD)D
-HSPLcom/android/server/power/stats/IrqDeviceMap;-><clinit>()V
-HSPLcom/android/server/power/stats/IrqDeviceMap;-><init>(Landroid/content/res/XmlResourceParser;)V
-HSPLcom/android/server/power/stats/IrqDeviceMap;->getInstance(Landroid/content/Context;I)Lcom/android/server/power/stats/IrqDeviceMap;
-HPLcom/android/server/power/stats/IrqDeviceMap;->getSubsystemsForDevice(Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/power/stats/KernelWakelockReader;-><clinit>()V
 HSPLcom/android/server/power/stats/KernelWakelockReader;-><init>()V
 HSPLcom/android/server/power/stats/KernelWakelockReader;->getWakelockStatsFromSystemSuspend(Lcom/android/server/power/stats/KernelWakelockStats;)Lcom/android/server/power/stats/KernelWakelockStats;
 HSPLcom/android/server/power/stats/KernelWakelockReader;->readKernelWakelockStats(Lcom/android/server/power/stats/KernelWakelockStats;)Lcom/android/server/power/stats/KernelWakelockStats;
-HSPLcom/android/server/power/stats/KernelWakelockReader;->removeOldStats(Lcom/android/server/power/stats/KernelWakelockStats;)Lcom/android/server/power/stats/KernelWakelockStats;+]Ljava/util/HashMap;Lcom/android/server/power/stats/KernelWakelockStats;]Ljava/util/Collection;Ljava/util/HashMap$Values;]Ljava/util/Iterator;Ljava/util/HashMap$ValueIterator;
+HSPLcom/android/server/power/stats/KernelWakelockReader;->removeOldStats(Lcom/android/server/power/stats/KernelWakelockStats;)Lcom/android/server/power/stats/KernelWakelockStats;+]Ljava/util/HashMap;Lcom/android/server/power/stats/KernelWakelockStats;
 HSPLcom/android/server/power/stats/KernelWakelockReader;->updateVersion(Lcom/android/server/power/stats/KernelWakelockStats;)Lcom/android/server/power/stats/KernelWakelockStats;
 HSPLcom/android/server/power/stats/KernelWakelockReader;->updateWakelockStats([Landroid/system/suspend/internal/WakeLockInfo;Lcom/android/server/power/stats/KernelWakelockStats;)Lcom/android/server/power/stats/KernelWakelockStats;+]Ljava/util/HashMap;Lcom/android/server/power/stats/KernelWakelockStats;
 HSPLcom/android/server/power/stats/KernelWakelockReader;->waitForSuspendControlService()Landroid/system/suspend/internal/ISuspendControlServiceInternal;
-HSPLcom/android/server/power/stats/KernelWakelockStats$Entry;-><init>(IJI)V
 HSPLcom/android/server/power/stats/KernelWakelockStats;-><init>()V
-HSPLcom/android/server/power/stats/MobileRadioPowerCalculator;-><init>(Lcom/android/internal/os/PowerProfile;)V
-HPLcom/android/server/power/stats/MobileRadioPowerCalculator;->calcTxStatePowerMah(IIIJ)D
-HPLcom/android/server/power/stats/MobileRadioPowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Lcom/android/server/power/stats/MobileRadioPowerCalculator;Lcom/android/server/power/stats/MobileRadioPowerCalculator;]Landroid/os/AggregateBatteryConsumer$Builder;Landroid/os/AggregateBatteryConsumer$Builder;]Landroid/os/BatteryUsageStatsQuery;Landroid/os/BatteryUsageStatsQuery;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;]Landroid/os/BatteryStats$LongCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;,Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;]Landroid/util/LongArrayQueue;Landroid/util/LongArrayQueue;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/BatteryStats$ControllerActivityCounter;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;
+HPLcom/android/server/power/stats/MobileRadioPowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Lcom/android/server/power/stats/MobileRadioPowerCalculator;Lcom/android/server/power/stats/MobileRadioPowerCalculator;]Landroid/os/BatteryUsageStatsQuery;Landroid/os/BatteryUsageStatsQuery;]Landroid/os/AggregateBatteryConsumer$Builder;Landroid/os/AggregateBatteryConsumer$Builder;]Landroid/os/BatteryStats$LongCounter;Lcom/android/server/power/stats/BatteryStatsImpl$LongSamplingCounter;,Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;,Lcom/android/server/power/stats/BatteryStatsImpl$1;]Landroid/util/LongArrayQueue;Landroid/util/LongArrayQueue;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/BatteryStats$ControllerActivityCounter;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;]Landroid/os/BatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/MobileRadioPowerCalculator;->calculateDuration(Landroid/os/BatteryStats$Uid;I)J+]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HPLcom/android/server/power/stats/PowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Lcom/android/server/power/stats/PowerCalculator;Lcom/android/server/power/stats/FlashlightPowerCalculator;,Lcom/android/server/power/stats/CameraPowerCalculator;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/PowerCalculator;->getPowerModel(JLandroid/os/BatteryUsageStatsQuery;)I+]Landroid/os/BatteryUsageStatsQuery;Landroid/os/BatteryUsageStatsQuery;
 HPLcom/android/server/power/stats/PowerCalculator;->uCtoMah(J)D
 HPLcom/android/server/power/stats/ScreenPowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Landroid/os/AggregateBatteryConsumer$Builder;Landroid/os/AggregateBatteryConsumer$Builder;]Lcom/android/server/power/stats/ScreenPowerCalculator;Lcom/android/server/power/stats/ScreenPowerCalculator;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/os/BatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/ScreenPowerCalculator;->calculateAppUsingEnergyConsumption(Lcom/android/server/power/stats/ScreenPowerCalculator$PowerAndDuration;Landroid/os/BatteryStats$Uid;J)V+]Lcom/android/server/power/stats/ScreenPowerCalculator;Lcom/android/server/power/stats/ScreenPowerCalculator;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
-HPLcom/android/server/power/stats/ScreenPowerCalculator;->getForegroundActivityTotalTimeUs(Landroid/os/BatteryStats$Uid;J)J+]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;
+HPLcom/android/server/power/stats/ScreenPowerCalculator;->getForegroundActivityTotalTimeUs(Landroid/os/BatteryStats$Uid;J)J
 HPLcom/android/server/power/stats/ScreenPowerCalculator;->getProcessForegroundTimeMs(Landroid/os/BatteryStats$Uid;J)J+]Lcom/android/server/power/stats/ScreenPowerCalculator;Lcom/android/server/power/stats/ScreenPowerCalculator;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;
 HPLcom/android/server/power/stats/SensorPowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Landroid/os/AggregateBatteryConsumer$Builder;Landroid/os/AggregateBatteryConsumer$Builder;]Lcom/android/server/power/stats/SensorPowerCalculator;Lcom/android/server/power/stats/SensorPowerCalculator;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
-HPLcom/android/server/power/stats/SensorPowerCalculator;->calculateApp(Landroid/os/UidBatteryConsumer$Builder;Landroid/os/BatteryStats$Uid;J)D
+HPLcom/android/server/power/stats/SensorPowerCalculator;->calculateApp(Landroid/os/UidBatteryConsumer$Builder;Landroid/os/BatteryStats$Uid;J)D+]Lcom/android/server/power/stats/SensorPowerCalculator;Lcom/android/server/power/stats/SensorPowerCalculator;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/SensorPowerCalculator;->calculateDuration(Landroid/os/BatteryStats$Uid;JI)J+]Landroid/os/BatteryStats$Uid$Sensor;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Sensor;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
 HPLcom/android/server/power/stats/SensorPowerCalculator;->calculatePowerMah(Landroid/os/BatteryStats$Uid;JI)D+]Landroid/hardware/Sensor;Landroid/hardware/Sensor;]Landroid/os/BatteryStats$Uid$Sensor;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Sensor;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;
 HSPLcom/android/server/power/stats/SystemServerCpuThreadReader$SystemServiceCpuThreadTimes;-><init>()V
@@ -9835,14 +10083,37 @@
 HPLcom/android/server/power/stats/SystemServicePowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Lcom/android/server/power/stats/SystemServicePowerCalculator;Lcom/android/server/power/stats/SystemServicePowerCalculator;]Landroid/os/AggregateBatteryConsumer$Builder;Landroid/os/AggregateBatteryConsumer$Builder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/UsageBasedPowerEstimator;->calculateDuration(Landroid/os/BatteryStats$Timer;JI)J+]Landroid/os/BatteryStats$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$StopwatchTimer;
 HPLcom/android/server/power/stats/UsageBasedPowerEstimator;->calculatePower(J)D
-HPLcom/android/server/power/stats/UserPowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Landroid/os/BatteryUsageStatsQuery;Landroid/os/BatteryUsageStatsQuery;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;]Landroid/os/UserBatteryConsumer$Builder;Landroid/os/UserBatteryConsumer$Builder;
+HPLcom/android/server/power/stats/UserPowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Landroid/os/BatteryUsageStatsQuery;Landroid/os/BatteryUsageStatsQuery;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/UserBatteryConsumer$Builder;Landroid/os/UserBatteryConsumer$Builder;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/VideoPowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Landroid/os/AggregateBatteryConsumer$Builder;Landroid/os/AggregateBatteryConsumer$Builder;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/VideoPowerCalculator;Lcom/android/server/power/stats/VideoPowerCalculator;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/VideoPowerCalculator;->calculateApp(Landroid/os/UidBatteryConsumer$Builder;Lcom/android/server/power/stats/VideoPowerCalculator$PowerAndDuration;Landroid/os/BatteryStats$Uid;J)V+]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Lcom/android/server/power/stats/UsageBasedPowerEstimator;Lcom/android/server/power/stats/UsageBasedPowerEstimator;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/WakelockPowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Landroid/os/AggregateBatteryConsumer$Builder;Landroid/os/AggregateBatteryConsumer$Builder;]Lcom/android/server/power/stats/WakelockPowerCalculator;Lcom/android/server/power/stats/WakelockPowerCalculator;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
 HPLcom/android/server/power/stats/WakelockPowerCalculator;->calculateApp(Lcom/android/server/power/stats/WakelockPowerCalculator$PowerAndDuration;Landroid/os/BatteryStats$Uid;JI)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BatteryStats$Uid$Wakelock;Lcom/android/server/power/stats/BatteryStatsImpl$Uid$Wakelock;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats$Timer;Lcom/android/server/power/stats/BatteryStatsImpl$DualTimer;]Lcom/android/server/power/stats/UsageBasedPowerEstimator;Lcom/android/server/power/stats/UsageBasedPowerEstimator;
 HPLcom/android/server/power/stats/WifiPowerCalculator;->calcPowerFromControllerDataMah(JJJ)D+]Lcom/android/server/power/stats/UsageBasedPowerEstimator;Lcom/android/server/power/stats/UsageBasedPowerEstimator;
 HPLcom/android/server/power/stats/WifiPowerCalculator;->calculate(Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryStats;JJLandroid/os/BatteryUsageStatsQuery;)V+]Landroid/os/BatteryUsageStatsQuery;Landroid/os/BatteryUsageStatsQuery;]Landroid/os/AggregateBatteryConsumer$Builder;Landroid/os/AggregateBatteryConsumer$Builder;]Lcom/android/server/power/stats/WifiPowerCalculator;Lcom/android/server/power/stats/WifiPowerCalculator;]Landroid/os/BatteryUsageStats$Builder;Landroid/os/BatteryUsageStats$Builder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats;Lcom/android/server/power/stats/BatteryStatsImpl;]Landroid/os/UidBatteryConsumer$Builder;Landroid/os/UidBatteryConsumer$Builder;
-HPLcom/android/server/power/stats/WifiPowerCalculator;->calculateApp(Lcom/android/server/power/stats/WifiPowerCalculator$PowerDurationAndTraffic;Landroid/os/BatteryStats$Uid;IJIZJ)V+]Lcom/android/server/power/stats/WifiPowerCalculator;Lcom/android/server/power/stats/WifiPowerCalculator;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats$LongCounter;Lcom/android/server/power/stats/BatteryStatsImpl$1;,Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;]Landroid/os/BatteryStats$ControllerActivityCounter;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;
+HPLcom/android/server/power/stats/WifiPowerCalculator;->calculateApp(Lcom/android/server/power/stats/WifiPowerCalculator$PowerDurationAndTraffic;Landroid/os/BatteryStats$Uid;IJIZJ)V+]Landroid/os/BatteryStats$LongCounter;Lcom/android/server/power/stats/BatteryStatsImpl$1;,Lcom/android/server/power/stats/BatteryStatsImpl$TimeMultiStateCounter;]Lcom/android/server/power/stats/WifiPowerCalculator;Lcom/android/server/power/stats/WifiPowerCalculator;]Landroid/os/BatteryStats$Uid;Lcom/android/server/power/stats/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats$ControllerActivityCounter;Lcom/android/server/power/stats/BatteryStatsImpl$ControllerActivityCounterImpl;
+HSPLcom/android/server/power/stats/wakeups/CpuWakeupStats$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/power/stats/wakeups/CpuWakeupStats;)V
+HPLcom/android/server/power/stats/wakeups/CpuWakeupStats$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/power/stats/wakeups/CpuWakeupStats;Lcom/android/server/power/stats/wakeups/CpuWakeupStats$Wakeup;)V
+HSPLcom/android/server/power/stats/wakeups/CpuWakeupStats$Config;-><clinit>()V
+HSPLcom/android/server/power/stats/wakeups/CpuWakeupStats$Config;-><init>()V
+HPLcom/android/server/power/stats/wakeups/CpuWakeupStats$Wakeup;-><init>(I[Lcom/android/server/power/stats/wakeups/CpuWakeupStats$Wakeup$IrqDevice;JJLandroid/util/SparseBooleanArray;)V
+HPLcom/android/server/power/stats/wakeups/CpuWakeupStats$Wakeup;->parseWakeup(Ljava/lang/String;JJLcom/android/server/power/stats/wakeups/IrqDeviceMap;)Lcom/android/server/power/stats/wakeups/CpuWakeupStats$Wakeup;+]Lcom/android/server/power/stats/wakeups/IrqDeviceMap;Lcom/android/server/power/stats/wakeups/IrqDeviceMap;]Ljava/lang/String;Ljava/lang/String;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
+HSPLcom/android/server/power/stats/wakeups/CpuWakeupStats$WakingActivityHistory;-><init>(Ljava/util/function/LongSupplier;)V
+HSPLcom/android/server/power/stats/wakeups/CpuWakeupStats$WakingActivityHistory;->recordActivity(IJLandroid/util/SparseIntArray;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/function/LongSupplier;Lcom/android/server/power/stats/wakeups/CpuWakeupStats$$ExternalSyntheticLambda0;
+HPLcom/android/server/power/stats/wakeups/CpuWakeupStats$WakingActivityHistory;->removeBetween(IJJ)Landroid/util/SparseIntArray;+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/power/stats/wakeups/CpuWakeupStats;-><clinit>()V
+HSPLcom/android/server/power/stats/wakeups/CpuWakeupStats;-><init>(Landroid/content/Context;ILandroid/os/Handler;)V
+HPLcom/android/server/power/stats/wakeups/CpuWakeupStats;->attemptAttributionFor(Lcom/android/server/power/stats/wakeups/CpuWakeupStats$Wakeup;)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/stats/wakeups/CpuWakeupStats$WakingActivityHistory;Lcom/android/server/power/stats/wakeups/CpuWakeupStats$WakingActivityHistory;
+HSPLcom/android/server/power/stats/wakeups/CpuWakeupStats;->attemptAttributionWith(IJLandroid/util/SparseIntArray;)Z+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/power/stats/wakeups/CpuWakeupStats;->lambda$new$0()J
+HPLcom/android/server/power/stats/wakeups/CpuWakeupStats;->logWakeupAttribution(Lcom/android/server/power/stats/wakeups/CpuWakeupStats$Wakeup;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/power/stats/wakeups/CpuWakeupStats;->noteUidProcessState(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HPLcom/android/server/power/stats/wakeups/CpuWakeupStats;->noteWakeupTimeAndReason(JJLjava/lang/String;)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/power/stats/wakeups/CpuWakeupStats;Lcom/android/server/power/stats/wakeups/CpuWakeupStats;
+HSPLcom/android/server/power/stats/wakeups/CpuWakeupStats;->noteWakingActivity(IJ[I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/power/stats/wakeups/CpuWakeupStats;Lcom/android/server/power/stats/wakeups/CpuWakeupStats;]Lcom/android/server/power/stats/wakeups/CpuWakeupStats$WakingActivityHistory;Lcom/android/server/power/stats/wakeups/CpuWakeupStats$WakingActivityHistory;
+HPLcom/android/server/power/stats/wakeups/CpuWakeupStats;->stringToKnownSubsystem(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;
+HSPLcom/android/server/power/stats/wakeups/IrqDeviceMap;-><clinit>()V
+HSPLcom/android/server/power/stats/wakeups/IrqDeviceMap;-><init>(Landroid/content/res/XmlResourceParser;)V
+HSPLcom/android/server/power/stats/wakeups/IrqDeviceMap;->getInstance(Landroid/content/Context;I)Lcom/android/server/power/stats/wakeups/IrqDeviceMap;
+HPLcom/android/server/power/stats/wakeups/IrqDeviceMap;->getSubsystemsForDevice(Ljava/lang/String;)Ljava/util/List;
 HPLcom/android/server/powerstats/BatteryTrigger$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HPLcom/android/server/powerstats/PowerStatsDataStorage;->write([B)V
 HSPLcom/android/server/powerstats/PowerStatsHALWrapper$PowerStatsHAL20WrapperImpl;-><init>()V
@@ -9855,14 +10126,12 @@
 HSPLcom/android/server/powerstats/PowerStatsHALWrapper;-><clinit>()V
 HSPLcom/android/server/powerstats/PowerStatsHALWrapper;->getPowerStatsHalImpl()Lcom/android/server/powerstats/PowerStatsHALWrapper$IPowerStatsHALWrapper;
 HPLcom/android/server/powerstats/PowerStatsLogger;->handleMessage(Landroid/os/Message;)V
-HSPLcom/android/server/powerstats/PowerStatsService$BinderService;-><init>(Lcom/android/server/powerstats/PowerStatsService;)V
-HSPLcom/android/server/powerstats/PowerStatsService$BinderService;-><init>(Lcom/android/server/powerstats/PowerStatsService;Lcom/android/server/powerstats/PowerStatsService$BinderService-IA;)V
 HSPLcom/android/server/powerstats/PowerStatsService$Injector;-><init>()V
 HSPLcom/android/server/powerstats/PowerStatsService$Injector;->getPowerStatsHALWrapperImpl()Lcom/android/server/powerstats/PowerStatsHALWrapper$IPowerStatsHALWrapper;
 HSPLcom/android/server/powerstats/PowerStatsService$LocalService;-><init>(Lcom/android/server/powerstats/PowerStatsService;)V
 HSPLcom/android/server/powerstats/PowerStatsService$LocalService;->getEnergyConsumedAsync([I)Ljava/util/concurrent/CompletableFuture;
 HPLcom/android/server/powerstats/PowerStatsService$LocalService;->getStateResidencyAsync([I)Ljava/util/concurrent/CompletableFuture;
-HSPLcom/android/server/powerstats/PowerStatsService;->-$$Nest$mgetLooper(Lcom/android/server/powerstats/PowerStatsService;)Landroid/os/Looper;
+HPLcom/android/server/powerstats/PowerStatsService$LocalService;->readEnergyMeterAsync([I)Ljava/util/concurrent/CompletableFuture;
 HSPLcom/android/server/powerstats/PowerStatsService;-><clinit>()V
 HSPLcom/android/server/powerstats/PowerStatsService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/powerstats/PowerStatsService;-><init>(Landroid/content/Context;Lcom/android/server/powerstats/PowerStatsService$Injector;)V
@@ -9870,8 +10139,10 @@
 HSPLcom/android/server/powerstats/PowerStatsService;->getPowerStatsHal()Lcom/android/server/powerstats/PowerStatsHALWrapper$IPowerStatsHALWrapper;
 HSPLcom/android/server/powerstats/PowerStatsService;->onBootPhase(I)V
 HSPLcom/android/server/powerstats/PowerStatsService;->onStart()V
+HPLcom/android/server/powerstats/ProtoStreamUtils$EnergyConsumerResultUtils;->packProtoMessage([Landroid/hardware/power/stats/EnergyConsumerResult;Landroid/util/proto/ProtoOutputStream;Z)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
 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/StatsPullAtomCallbackImpl;->pullOnDevicePowerMeasurement(ILjava/util/List;)I
+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;
+HPLcom/android/server/powerstats/StatsPullAtomCallbackImpl;->pullOnDevicePowerMeasurement(ILjava/util/List;)I+]Ljava/util/List;Ljava/util/ArrayList;]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/powerstats/StatsPullAtomCallbackImpl;->pullSubsystemSleepState(ILjava/util/List;)I+]Ljava/util/List;Ljava/util/ArrayList;]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/powerstats/TimerTrigger$2;->run()V
 HSPLcom/android/server/recoverysystem/RecoverySystemService$Injector;-><init>(Landroid/content/Context;)V
@@ -9884,7 +10155,8 @@
 HSPLcom/android/server/recoverysystem/RecoverySystemService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/recoverysystem/RecoverySystemService;-><init>(Landroid/content/Context;Lcom/android/server/recoverysystem/RecoverySystemService-IA;)V
 HSPLcom/android/server/recoverysystem/RecoverySystemService;-><init>(Lcom/android/server/recoverysystem/RecoverySystemService$Injector;)V
-HPLcom/android/server/search/Searchables;->updateSearchableList()V
+HPLcom/android/server/search/SearchManagerService$MyPackageMonitor;->updateSearchables()V
+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;
 HSPLcom/android/server/security/FileIntegrityService$1;-><init>(Lcom/android/server/security/FileIntegrityService;)V
 HSPLcom/android/server/security/FileIntegrityService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/security/FileIntegrityService;->collectCertificate([B)V
@@ -9892,14 +10164,17 @@
 HSPLcom/android/server/security/FileIntegrityService;->loadCertificatesFromDirectory(Ljava/nio/file/Path;)V
 HSPLcom/android/server/security/FileIntegrityService;->onStart()V
 HSPLcom/android/server/security/FileIntegrityService;->toCertificate([B)Ljava/security/cert/X509Certificate;
+HPLcom/android/server/security/rkp/RemoteProvisioningRegistration;->getKey(ILandroid/security/rkp/IGetKeyCallback;)V
 HSPLcom/android/server/sensorprivacy/PersistedState$TypeUserSensor;-><init>(III)V
+HSPLcom/android/server/sensorprivacy/PersistedState$TypeUserSensor;->hashCode()I
 HSPLcom/android/server/sensorprivacy/PersistedState;->getState(III)Lcom/android/server/sensorprivacy/SensorState;
 HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyServiceImpl;->enforceObserveSensorPrivacyPermission()V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyServiceImpl;->isToggleSensorPrivacyEnabled(II)Z
+HSPLcom/android/server/sensorprivacy/SensorPrivacyStateControllerImpl;->getStateLocked(III)Lcom/android/server/sensorprivacy/SensorState;
 HSPLcom/android/server/sensorprivacy/SensorState;-><init>(I)V
 HSPLcom/android/server/sensors/SensorService$ProximityListenerDelegate;->onProximityActive(Z)V
 HSPLcom/android/server/servicewatcher/CurrentUserServiceSupplier;->getServiceInfo()Lcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;
-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;->addPath(Ljava/util/List;)V+]Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/slice/DirtyTracker;Lcom/android/server/slice/SliceClientPermissions;
 HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->isPathPrefixMatch([Ljava/lang/String;[Ljava/lang/String;)Z
 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;->hasPermission(Landroid/net/Uri;I)Z
@@ -9914,6 +10189,7 @@
 HPLcom/android/server/slice/SlicePermissionManager$PkgUser;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Lcom/android/server/slice/SlicePermissionManager$PkgUser;,Ljava/lang/Class;
 HPLcom/android/server/slice/SlicePermissionManager$PkgUser;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
 HPLcom/android/server/slice/SlicePermissionManager;->getClient(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Lcom/android/server/slice/SliceClientPermissions;
+HPLcom/android/server/slice/SlicePermissionManager;->grantSliceAccess(Ljava/lang/String;ILjava/lang/String;ILandroid/net/Uri;)V
 HPLcom/android/server/slice/SlicePermissionManager;->hasPermission(Ljava/lang/String;ILandroid/net/Uri;)Z
 HSPLcom/android/server/smartspace/SmartspaceManagerService$SmartspaceManagerStub$$ExternalSyntheticLambda4;-><init>(Landroid/app/smartspace/SmartspaceSessionId;)V
 HSPLcom/android/server/smartspace/SmartspaceManagerService$SmartspaceManagerStub$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
@@ -9922,69 +10198,85 @@
 HSPLcom/android/server/smartspace/SmartspacePerUserService$$ExternalSyntheticLambda0;-><init>(Landroid/app/smartspace/SmartspaceSessionId;)V
 HPLcom/android/server/smartspace/SmartspacePerUserService$$ExternalSyntheticLambda0;->run(Landroid/os/IInterface;)V
 HSPLcom/android/server/smartspace/SmartspacePerUserService;->getRemoteServiceLocked()Lcom/android/server/smartspace/RemoteSmartspaceService;
+HPLcom/android/server/smartspace/SmartspacePerUserService;->notifySmartspaceEventLocked(Landroid/app/smartspace/SmartspaceSessionId;Landroid/app/smartspace/SmartspaceTargetEvent;)V
 HSPLcom/android/server/smartspace/SmartspacePerUserService;->requestSmartspaceUpdateLocked(Landroid/app/smartspace/SmartspaceSessionId;)V
 HSPLcom/android/server/smartspace/SmartspacePerUserService;->resolveService(Landroid/app/smartspace/SmartspaceSessionId;Lcom/android/internal/infra/AbstractRemoteService$AsyncRequest;)Z
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->unloadGenericSoundModel(Ljava/util/UUID;)I
+HPLcom/android/server/soundtrigger/SoundTriggerService$MyAppOpsListener;->onOpChanged(Ljava/lang/String;Ljava/lang/String;)V+]Ljava/util/function/Consumer;Lcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService$SessionImpl$$ExternalSyntheticLambda2;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
+HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$RemoteSoundTriggerDetectionService;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub;Ljava/util/UUID;Landroid/os/Bundle;Landroid/content/ComponentName;Landroid/os/UserHandle;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)V
+HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$RemoteSoundTriggerDetectionService;->bind()V
+HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$RemoteSoundTriggerDetectionService;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$RemoteSoundTriggerDetectionService;->runOrAddOperation(Lcom/android/server/soundtrigger/SoundTriggerService$Operation;)V
 HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub;->loadGenericSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;)I
-HSPLcom/android/server/soundtrigger_middleware/ExternalCaptureStateTracker;->setCaptureState(Z)V
+HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub;->startRecognitionForService(Landroid/os/ParcelUuid;Landroid/os/Bundle;Landroid/content/ComponentName;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
+HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlUuid(Ljava/lang/String;)Landroid/hardware/audio/common/V2_0/Uuid;
+HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->hidl2aidlOffloadInfo(Landroid/hardware/audio/common/V2_0/AudioOffloadInfo;)Landroid/media/audio/common/AudioOffloadInfo;
+HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->hidl2aidlRecognitionEvent(Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHwCallback$RecognitionEvent;)Landroid/media/soundtrigger/RecognitionEvent;
 HPLcom/android/server/soundtrigger_middleware/ObjectPrinter;->print(Ljava/lang/StringBuilder;Ljava/lang/Object;I)V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHalWatchdog$Watchdog;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerHalWatchdog;)V
-HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->appendMessage(Ljava/lang/String;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$SessionEvent;->eventToString()Ljava/lang/String;
 HSPLcom/android/server/soundtrigger_middleware/UptimeTimer;->createTask(Ljava/lang/Runnable;J)Lcom/android/server/soundtrigger_middleware/UptimeTimer$Task;
+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
 HPLcom/android/server/stats/pull/ProcfsMemoryUtil$MemorySnapshot;-><init>()V
 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;
 HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda12;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda22;->onUidCpuTime(ILjava/lang/Object;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda23;->onUidCpuTime(ILjava/lang/Object;)V
 HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda9;->onUidStorageStats(IJJJJJJJJJJ)V
+HPLcom/android/server/stats/pull/StatsPullAtomService$AppOpEntry;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;Ljava/lang/String;Ljava/lang/String;Landroid/app/AppOpsManager$HistoricalOp;I)V
 HPLcom/android/server/stats/pull/StatsPullAtomService$StatsPullAtomCallbackImpl;->onPullAtom(ILjava/util/List;)I
-HPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$BAYJnEfnORxrRs5oNkGdyiczTNE(Landroid/util/SparseArray;Landroid/app/ProcessMemoryState;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$AIW6NrhzOzleV6thcDRGTeFCC6A(Landroid/util/SparseArray;Landroid/app/ProcessMemoryState;)V
 HPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$fiMc7IS9Em_RLm7xoMmDab3c5BU(Ljava/util/List;II[J)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
-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$pullProcessMemorySnapshot$19(Landroid/util/SparseArray;Landroid/app/ProcessMemoryState;)V
-HPLcom/android/server/stats/pull/StatsPullAtomService;->processHistoricalOps(Landroid/app/AppOpsManager$HistoricalOps;II)Ljava/util/List;
-HPLcom/android/server/stats/pull/StatsPullAtomService;->pullCooldownDeviceLocked(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullCpuTimePerUidLocked$12(Ljava/util/List;II[J)V+]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullDiskIOLocked$22(Ljava/util/List;IIJJJJJJJJJJ)V+]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullProcessMemorySnapshot$20(Landroid/util/SparseArray;Landroid/app/ProcessMemoryState;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+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;->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;->pullKernelWakelockLocked(ILjava/util/List;)I+]Lcom/android/server/power/stats/KernelWakelockReader;Lcom/android/server/power/stats/KernelWakelockReader;]Ljava/util/HashMap;Lcom/android/server/power/stats/KernelWakelockStats;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullHealthHalLocked(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullKernelWakelockLocked(ILjava/util/List;)I+]Lcom/android/server/power/stats/KernelWakelockReader;Lcom/android/server/power/stats/KernelWakelockReader;]Ljava/util/HashMap;Lcom/android/server/power/stats/KernelWakelockStats;]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullLooperStatsLocked(ILjava/util/List;)I
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullProcessCpuTimeLocked(ILjava/util/List;)I+]Lcom/android/internal/os/ProcessCpuTracker;Lcom/android/internal/os/ProcessCpuTracker;]Ljava/util/List;Ljava/util/ArrayList;
-HPLcom/android/server/stats/pull/StatsPullAtomService;->pullProcessMemoryHighWaterMarkLocked(ILjava/util/List;)I
-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;
-HPLcom/android/server/stats/pull/StatsPullAtomService;->pullTemperatureLocked(ILjava/util/List;)I+]Landroid/os/IThermalService;Lcom/android/server/power/ThermalManagerService$1;]Lcom/android/server/stats/pull/StatsPullAtomService;Lcom/android/server/stats/pull/StatsPullAtomService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/Temperature;Landroid/os/Temperature;
+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;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullProcessMemorySnapshot(ILjava/util/List;)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullTemperatureLocked(ILjava/util/List;)I
 HPLcom/android/server/stats/pull/StatsPullAtomService;->sampleAppOps(Ljava/util/List;Ljava/util/List;II)I
-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$$ExternalSyntheticLambda2;,Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda4;,Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda3;,Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda5;]Ljava/util/Iterator;Landroid/net/NetworkStats$1;
 HPLcom/android/server/statusbar/StatusBarManagerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;ILandroid/os/IBinder;IIZ)V
 HPLcom/android/server/statusbar/StatusBarManagerService$$ExternalSyntheticLambda1;->run()V
-HSPLcom/android/server/statusbar/StatusBarManagerService$1;->onSystemBarAttributesChanged(II[Lcom/android/internal/view/AppearanceRegion;ZIILjava/lang/String;[Lcom/android/internal/statusbar/LetterboxDetails;)V
-HPLcom/android/server/statusbar/StatusBarManagerService$1;->setTopAppHidesStatusBar(Z)V+]Lcom/android/internal/statusbar/IStatusBar;Lcom/android/internal/statusbar/IStatusBar$Stub$Proxy;
-HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;->setBarAttributes(I[Lcom/android/internal/view/AppearanceRegion;ZIILjava/lang/String;[Lcom/android/internal/statusbar/LetterboxDetails;)V
-HSPLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$fgetmBar(Lcom/android/server/statusbar/StatusBarManagerService;)Lcom/android/internal/statusbar/IStatusBar;
+HPLcom/android/server/statusbar/StatusBarManagerService$1;->onSystemBarAttributesChanged(II[Lcom/android/internal/view/AppearanceRegion;ZIILjava/lang/String;[Lcom/android/internal/statusbar/LetterboxDetails;)V
+HPLcom/android/server/statusbar/StatusBarManagerService$1;->setTopAppHidesStatusBar(Z)V
+HPLcom/android/server/statusbar/StatusBarManagerService$UiState;->setBarAttributes(I[Lcom/android/internal/view/AppearanceRegion;ZIILjava/lang/String;[Lcom/android/internal/statusbar/LetterboxDetails;)V
+HPLcom/android/server/statusbar/StatusBarManagerService$UiState;->setImeWindowState(IIZLandroid/os/IBinder;)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$fgetmBar(Lcom/android/server/statusbar/StatusBarManagerService;)Lcom/android/internal/statusbar/IStatusBar;
 HSPLcom/android/server/statusbar/StatusBarManagerService;->enforceStatusBar()V
 HSPLcom/android/server/statusbar/StatusBarManagerService;->enforceStatusBarService()V
-HSPLcom/android/server/statusbar/StatusBarManagerService;->getUiState(I)Lcom/android/server/statusbar/StatusBarManagerService$UiState;
+HPLcom/android/server/statusbar/StatusBarManagerService;->getUiState(I)Lcom/android/server/statusbar/StatusBarManagerService$UiState;
+HPLcom/android/server/statusbar/StatusBarManagerService;->lambda$setImeWindowStatus$1(ILandroid/os/IBinder;IIZ)V
 HPLcom/android/server/statusbar/StatusBarManagerService;->setImeWindowStatus(ILandroid/os/IBinder;IIZ)V
-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/CacheQuotaHint$Builder;Landroid/app/usage/CacheQuotaHint$Builder;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
+HPLcom/android/server/storage/AppCollector$BackgroundHandler;->handleMessage(Landroid/os/Message;)V
+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;]Landroid/app/usage/CacheQuotaHint$Builder;Landroid/app/usage/CacheQuotaHint$Builder;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
+HSPLcom/android/server/storage/CacheQuotaStrategy;->pushProcessedQuotas(Ljava/util/List;)V+]Lcom/android/server/pm/Installer;Lcom/android/server/pm/Installer;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/app/usage/CacheQuotaHint;Landroid/app/usage/CacheQuotaHint;]Lcom/android/server/storage/CacheQuotaStrategy;Lcom/android/server/storage/CacheQuotaStrategy;
 HSPLcom/android/server/storage/DeviceStorageMonitorService;->checkLow()V
 HSPLcom/android/server/storage/DeviceStorageMonitorService;->updateBroadcasts(Landroid/os/storage/VolumeInfo;III)V
 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/tare/EconomyManagerInternal$ActionBill;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;
+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;]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;
 HSPLcom/android/server/tare/Agent$ActionAffordabilityNote;->hashCode()I+]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;->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;
-HPLcom/android/server/tare/Agent;->scheduleBalanceCheckLocked(ILjava/lang/String;)V
+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/tare/InternalResourceService;Lcom/android/server/tare/InternalResourceService;]Lcom/android/server/utils/AlarmQueue;Lcom/android/server/tare/Agent$BalanceThresholdAlarmQueue;
 HPLcom/android/server/tare/Agent;->unregisterAffordabilityChangeListenerLocked(ILjava/lang/String;Lcom/android/server/tare/EconomyManagerInternal$AffordabilityChangeListener;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;)V
-HSPLcom/android/server/tare/CompleteEconomicPolicy;->getAction(I)Lcom/android/server/tare/EconomicPolicy$Action;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/tare/EconomyManagerInternal$ActionBill;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;
+HSPLcom/android/server/tare/CompleteEconomicPolicy;->getAction(I)Lcom/android/server/tare/EconomicPolicy$Action;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/tare/EconomicPolicy;Lcom/android/server/tare/AlarmManagerEconomicPolicy;,Lcom/android/server/tare/JobSchedulerEconomicPolicy;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/tare/EconomyManagerInternal$ActionBill;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;
 HSPLcom/android/server/tare/EconomyManagerInternal$ActionBill;->getAnticipatedActions()Ljava/util/List;
 HSPLcom/android/server/tare/EconomyManagerInternal$ActionBill;->hashCode()I
-HSPLcom/android/server/tare/InternalResourceService$LocalService;->noteInstantaneousEvent(ILjava/lang/String;ILjava/lang/String;)V
-HSPLcom/android/server/tare/InternalResourceService$LocalService;->noteOngoingEventStarted(ILjava/lang/String;ILjava/lang/String;)V
-HSPLcom/android/server/tare/InternalResourceService$LocalService;->noteOngoingEventStopped(ILjava/lang/String;ILjava/lang/String;)V
+HPLcom/android/server/tare/InternalResourceService$LocalService;->noteInstantaneousEvent(ILjava/lang/String;ILjava/lang/String;)V
+HPLcom/android/server/tare/InternalResourceService$LocalService;->noteOngoingEventStarted(ILjava/lang/String;ILjava/lang/String;)V
+HPLcom/android/server/tare/InternalResourceService$LocalService;->noteOngoingEventStopped(ILjava/lang/String;ILjava/lang/String;)V
 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;->unregisterAffordabilityChangeListener(ILjava/lang/String;Lcom/android/server/tare/EconomyManagerInternal$AffordabilityChangeListener;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;)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;->-$$Nest$fgetmAgent(Lcom/android/server/tare/InternalResourceService;)Lcom/android/server/tare/Agent;
 HSPLcom/android/server/tare/InternalResourceService;->-$$Nest$fgetmEnabledMode(Lcom/android/server/tare/InternalResourceService;)I
 HSPLcom/android/server/tare/InternalResourceService;->-$$Nest$fgetmLock(Lcom/android/server/tare/InternalResourceService;)Ljava/lang/Object;
@@ -9997,29 +10289,31 @@
 HPLcom/android/server/textclassifier/TextClassificationManagerService$UserState;->getServiceStateLocked(Z)Lcom/android/server/textclassifier/TextClassificationManagerService$ServiceState;
 HPLcom/android/server/textclassifier/TextClassificationManagerService;->handleRequest(Landroid/view/textclassifier/SystemTextClassifierMetadata;ZZLcom/android/internal/util/FunctionalUtils$ThrowingConsumer;Ljava/lang/String;Landroid/service/textclassifier/ITextClassifierCallback;)V
 HPLcom/android/server/textclassifier/TextClassificationManagerService;->validateCallingPackage(Ljava/lang/String;)V
+HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getCurrentSpellChecker()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/timedetector/NetworkTimeSuggestion;-><init>(Landroid/app/time/UnixEpochTime;I)V
-HSPLcom/android/server/timedetector/TimeDetectorService;->latestNetworkTime()Landroid/app/time/UnixEpochTime;+]Landroid/util/NtpTrustedTime;Landroid/util/NtpTrustedTime$NtpTrustedTimeImpl;]Landroid/util/NtpTrustedTime$TimeResult;Landroid/util/NtpTrustedTime$TimeResult;]Lcom/android/server/timedetector/NetworkTimeSuggestion;Lcom/android/server/timedetector/NetworkTimeSuggestion;
-HPLcom/android/server/trust/TrustAgentWrapper;->updateDevicePolicyFeatures()Z
-HPLcom/android/server/trust/TrustArchive$Event;-><init>(IILandroid/content/ComponentName;Ljava/lang/String;JIZ)V
-HSPLcom/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;->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;
-HSPLcom/android/server/trust/TrustManagerService$1;->isDeviceSecure(II)Z
-HSPLcom/android/server/trust/TrustManagerService$Receiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-HSPLcom/android/server/trust/TrustManagerService;->-$$Nest$fgetmLockPatternUtils(Lcom/android/server/trust/TrustManagerService;)Lcom/android/internal/widget/LockPatternUtils;
+HSPLcom/android/server/timedetector/TimeDetectorService;->latestNetworkTime()Landroid/app/time/UnixEpochTime;+]Landroid/util/NtpTrustedTime$TimeResult;Landroid/util/NtpTrustedTime$TimeResult;]Lcom/android/server/timedetector/NetworkTimeSuggestion;Lcom/android/server/timedetector/NetworkTimeSuggestion;
+HPLcom/android/server/trust/TrustManagerService$1;->clearAllBiometricRecognized(Landroid/hardware/biometrics/BiometricSourceType;I)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;
+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
+HPLcom/android/server/trust/TrustManagerService$2;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/trust/TrustManagerService;->-$$Nest$fgetmLockPatternUtils(Lcom/android/server/trust/TrustManagerService;)Lcom/android/internal/widget/LockPatternUtils;
 HPLcom/android/server/trust/TrustManagerService;->-$$Nest$fgetmVirtualDeviceManager(Lcom/android/server/trust/TrustManagerService;)Lcom/android/server/companion/virtual/VirtualDeviceManagerInternal;
-HSPLcom/android/server/trust/TrustManagerService;->-$$Nest$mresolveProfileParent(Lcom/android/server/trust/TrustManagerService;I)I
+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;->aggregateIsTrusted(I)Z
 HSPLcom/android/server/trust/TrustManagerService;->isDeviceLockedInner(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/trust/TrustManagerService;->refreshAgentList(I)V
 HSPLcom/android/server/trust/TrustManagerService;->refreshDeviceLockedForUser(II)V
 HSPLcom/android/server/trust/TrustManagerService;->resolveAllowedTrustAgents(Landroid/content/pm/PackageManager;I)Ljava/util/List;
-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;
-HPLcom/android/server/trust/TrustManagerService;->updateDevicePolicyFeatures()V
+HPLcom/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;
 HSPLcom/android/server/tv/TvInputHal;-><clinit>()V
 HSPLcom/android/server/twilight/TwilightService$1;->unregisterListener(Lcom/android/server/twilight/TwilightListener;)V
 HSPLcom/android/server/uri/GrantUri;-><init>(ILandroid/net/Uri;I)V
 HPLcom/android/server/uri/GrantUri;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/server/uri/GrantUri;->hashCode()I
 HPLcom/android/server/uri/GrantUri;->resolve(ILandroid/net/Uri;I)Lcom/android/server/uri/GrantUri;
 HSPLcom/android/server/uri/UriGrantsManagerService$H;-><init>(Lcom/android/server/uri/UriGrantsManagerService;Landroid/os/Looper;)V
 HSPLcom/android/server/uri/UriGrantsManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
@@ -10030,41 +10324,49 @@
 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
 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
+HSPLcom/android/server/uri/UriGrantsManagerService$LocalService;->newUriPermissionOwner(Ljava/lang/String;)Landroid/os/IBinder;
+HSPLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$fgetmLock(Lcom/android/server/uri/UriGrantsManagerService;)Ljava/lang/Object;
 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;
 HSPLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$mstart(Lcom/android/server/uri/UriGrantsManagerService;)V
 HSPLcom/android/server/uri/UriGrantsManagerService;-><init>()V
 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;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;
+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;
 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
-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/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-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/net/Uri;Landroid/net/Uri$HierarchicalUri;
+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/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;
 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;
+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;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 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;
 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;->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;
 HSPLcom/android/server/uri/UriGrantsManagerService;->start()V
 HSPLcom/android/server/uri/UriMetricsHelper;-><clinit>()V
 HSPLcom/android/server/uri/UriMetricsHelper;-><init>(Landroid/content/Context;Lcom/android/server/uri/UriMetricsHelper$PersistentUriGrantsProvider;)V
 HSPLcom/android/server/uri/UriPermission;->updateModeFlags()V
-HPLcom/android/server/uri/UriPermissionOwner;->removeUriPermission(Lcom/android/server/uri/GrantUri;ILjava/lang/String;I)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/uri/UriPermissionOwner;->fromExternalToken(Landroid/os/IBinder;)Lcom/android/server/uri/UriPermissionOwner;+]Lcom/android/server/uri/UriPermissionOwner$ExternalToken;Lcom/android/server/uri/UriPermissionOwner$ExternalToken;
+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;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;
 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;
 HSPLcom/android/server/usage/AppIdleHistory;->getAppUsageHistory(Ljava/lang/String;IJ)Lcom/android/server/usage/AppIdleHistory$AppUsageHistory;+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
-HSPLcom/android/server/usage/AppIdleHistory;->getElapsedTime(J)J
+HPLcom/android/server/usage/AppIdleHistory;->getElapsedTime(J)J
+HPLcom/android/server/usage/AppIdleHistory;->getEstimatedLaunchTime(Ljava/lang/String;IJ)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;
-HSPLcom/android/server/usage/AppIdleHistory;->getUserHistory(I)Landroid/util/ArrayMap;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/usage/AppIdleHistory;->getThresholdIndex(Ljava/lang/String;IJ[J[J)I
+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;
 HSPLcom/android/server/usage/AppIdleHistory;->isIdle(Ljava/lang/String;IJ)Z+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
 HSPLcom/android/server/usage/AppIdleHistory;->readAppIdleTimes(ILandroid/util/ArrayMap;)V
 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;
-HSPLcom/android/server/usage/AppIdleHistory;->setAppStandbyBucket(Ljava/lang/String;IJIIZ)V
-HSPLcom/android/server/usage/AppIdleHistory;->setLastJobRunTime(Ljava/lang/String;IJ)V
-HSPLcom/android/server/usage/AppIdleHistory;->shouldInformListeners(Ljava/lang/String;IJI)Z
-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;
+HPLcom/android/server/usage/AppIdleHistory;->setAppStandbyBucket(Ljava/lang/String;IJIIZ)V+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
+HPLcom/android/server/usage/AppIdleHistory;->setLastJobRunTime(Ljava/lang/String;IJ)V+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
+HPLcom/android/server/usage/AppIdleHistory;->shouldInformListeners(Ljava/lang/String;IJI)Z
+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;]Lcom/android/internal/util/jobs/FastXmlSerializer;Lcom/android/internal/util/jobs/FastXmlSerializer;]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
 HSPLcom/android/server/usage/AppStandbyController$2;->onDisplayChanged(I)V
 HSPLcom/android/server/usage/AppStandbyController$AppStandbyHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/usage/AppStandbyController$ContentProviderUsageRecord;->obtain(Ljava/lang/String;Ljava/lang/String;I)Lcom/android/server/usage/AppStandbyController$ContentProviderUsageRecord;
@@ -10076,38 +10378,48 @@
 HSPLcom/android/server/usage/AppStandbyController$Injector;->isWellbeingPackage(Ljava/lang/String;)Z
 HSPLcom/android/server/usage/AppStandbyController$Injector;->shouldGetExactAlarmBucketElevation(Ljava/lang/String;I)Z
 HSPLcom/android/server/usage/AppStandbyController$Pool;->obtain()Ljava/lang/Object;
-HSPLcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;->obtain(Ljava/lang/String;IIIZ)Lcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;
-HSPLcom/android/server/usage/AppStandbyController;->checkAndUpdateStandbyState(Ljava/lang/String;IIJ)V
-HSPLcom/android/server/usage/AppStandbyController;->checkIdleStates(I)Z
+HSPLcom/android/server/usage/AppStandbyController$Pool;->recycle(Ljava/lang/Object;)V
+HPLcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;->obtain(Ljava/lang/String;IIIZ)Lcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;
+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;
+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;->getAppMinBucket(Ljava/lang/String;II)I+]Lcom/android/server/usage/AppStandbyController;Lcom/android/server/usage/AppStandbyController;]Lcom/android/server/usage/AppStandbyController$Injector;Lcom/android/server/usage/AppStandbyController$Injector;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
 HSPLcom/android/server/usage/AppStandbyController;->getAppStandbyBucket(Ljava/lang/String;IJZ)I+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
+HPLcom/android/server/usage/AppStandbyController;->getBucketForLocked(Ljava/lang/String;IJ)I
 HPLcom/android/server/usage/AppStandbyController;->getCrossProfileTargets(Ljava/lang/String;I)Ljava/util/List;
+HPLcom/android/server/usage/AppStandbyController;->getMinBucketWithValidExpiryTime(Lcom/android/server/usage/AppIdleHistory$AppUsageHistory;IJ)I
 HPLcom/android/server/usage/AppStandbyController;->informListeners(Ljava/lang/String;IIIZ)V
 HSPLcom/android/server/usage/AppStandbyController;->isActiveDeviceAdmin(Ljava/lang/String;I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/usage/AppStandbyController;->isActiveNetworkScorer(Ljava/lang/String;)Z+]Lcom/android/server/usage/AppStandbyController$Injector;Lcom/android/server/usage/AppStandbyController$Injector;
+HSPLcom/android/server/usage/AppStandbyController;->isAdminProtectedPackages(Ljava/lang/String;I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/usage/AppStandbyController;->isAppIdleEnabled()Z
 HSPLcom/android/server/usage/AppStandbyController;->isAppIdleFiltered(Ljava/lang/String;IIJ)Z
+HPLcom/android/server/usage/AppStandbyController;->isAppIdleFiltered(Ljava/lang/String;IJZ)Z
 HSPLcom/android/server/usage/AppStandbyController;->isAppIdleUnfiltered(Ljava/lang/String;IJ)Z+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
 HSPLcom/android/server/usage/AppStandbyController;->isCarrierApp(Ljava/lang/String;)Z
 HSPLcom/android/server/usage/AppStandbyController;->isDeviceProvisioningPackage(Ljava/lang/String;)Z
 HSPLcom/android/server/usage/AppStandbyController;->isHeadlessSystemApp(Ljava/lang/String;)Z
 HSPLcom/android/server/usage/AppStandbyController;->isInParole()Z
-HSPLcom/android/server/usage/AppStandbyController;->maybeInformListeners(Ljava/lang/String;IJIIZ)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;
+HPLcom/android/server/usage/AppStandbyController;->maybeInformListeners(Ljava/lang/String;IJIIZ)V+]Landroid/os/Handler;Lcom/android/server/usage/AppStandbyController$AppStandbyHandler;]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
+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/ArrayList;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/app/usage/UsageEvents$Event;Landroid/app/usage/UsageEvents$Event;
 HSPLcom/android/server/usage/AppStandbyController;->postReportContentProviderUsage(Ljava/lang/String;Ljava/lang/String;I)V
+HPLcom/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
 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;->setAppStandbyBucket(Ljava/lang/String;IIIJZ)V
-HSPLcom/android/server/usage/AppStandbyController;->setLastJobRunTime(Ljava/lang/String;IJ)V
-HPLcom/android/server/usage/AppTimeLimitController;->getAppUsageLimit(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/app/usage/UsageStatsManagerInternal$AppUsageLimitData;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/usage/AppTimeLimitController;Lcom/android/server/usage/AppTimeLimitController;
+HPLcom/android/server/usage/AppStandbyController;->setLastJobRunTime(Ljava/lang/String;IJ)V+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
+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;
 HPLcom/android/server/usage/AppTimeLimitController;->getOrCreateUserDataLocked(I)Lcom/android/server/usage/AppTimeLimitController$UserData;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/usage/AppTimeLimitController;->noteUsageStart(Ljava/lang/String;IJ)V
 HPLcom/android/server/usage/AppTimeLimitController;->noteUsageStop(Ljava/lang/String;I)V
-HSPLcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;->logNotificationEvent(ILjava/lang/String;Landroid/os/UserHandle;J)V
-HSPLcom/android/server/usage/BroadcastResponseStatsLogger;->logNotificationEvent(ILjava/lang/String;Landroid/os/UserHandle;J)V
-HSPLcom/android/server/usage/BroadcastResponseStatsTracker;->getBroadcastEventsLocked(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/util/ArraySet;
-HSPLcom/android/server/usage/BroadcastResponseStatsTracker;->reportNotificationEvent(ILjava/lang/String;Landroid/os/UserHandle;J)V
+HPLcom/android/server/usage/BroadcastEvent;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/usage/BroadcastEvent;->hashCode()I
+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;->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/BroadcastResponseStatsTracker;->getBroadcastEventsLocked(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/util/ArraySet;
+HPLcom/android/server/usage/BroadcastResponseStatsTracker;->recordAndPruneOldBroadcastDispatchTimestamps(Lcom/android/server/usage/BroadcastEvent;)V
+HPLcom/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;
 HPLcom/android/server/usage/IntervalStats;-><init>()V
-HPLcom/android/server/usage/IntervalStats;->addEvent(Landroid/app/usage/UsageEvents$Event;)V
+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;
 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/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;
@@ -10117,52 +10429,61 @@
 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;
 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;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Long;Ljava/lang/Long;
+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;
+HPLcom/android/server/usage/StorageStatsService$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/usage/StorageStatsService$H;->handleMessage(Landroid/os/Message;)V
-HPLcom/android/server/usage/StorageStatsService;->checkStatsPermission(ILjava/lang/String;Z)Ljava/lang/String;
+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+]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;->lambda$queryStatsForUid$2(Landroid/content/pm/PackageStats;IZLcom/android/server/usage/StorageStatsManagerLocal$StorageStatsAugmenter;)V
+HPLcom/android/server/usage/StorageStatsService;->getAppIds(I)[I+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HPLcom/android/server/usage/StorageStatsService;->queryStatsForPackage(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/app/usage/StorageStats;
 HPLcom/android/server/usage/StorageStatsService;->queryStatsForUid(Ljava/lang/String;ILjava/lang/String;)Landroid/app/usage/StorageStats;
+HPLcom/android/server/usage/StorageStatsService;->queryStatsForUser(Ljava/lang/String;ILjava/lang/String;)Landroid/app/usage/StorageStats;+]Lcom/android/server/pm/Installer;Lcom/android/server/pm/Installer;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/usage/StorageStatsService;Lcom/android/server/usage/StorageStatsService;
 HPLcom/android/server/usage/StorageStatsService;->translate(Landroid/content/pm/PackageStats;)Landroid/app/usage/StorageStats;
 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;->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$$ExternalSyntheticLambda1;,Lcom/android/server/usage/UserUsageStatsService$4;]Landroid/util/TimeSparseArray;Landroid/util/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;
+HPLcom/android/server/usage/UsageStatsProto;->writeUsageStats(Landroid/util/proto/ProtoOutputStream;JLcom/android/server/usage/IntervalStats;Landroid/app/usage/UsageStats;)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/usage/UsageStatsProtoV2;->loadConfigStats(Landroid/util/proto/ProtoInputStream;Lcom/android/server/usage/IntervalStats;)V+]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;]Lcom/android/server/usage/IntervalStats;Lcom/android/server/usage/IntervalStats;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
+HPLcom/android/server/usage/UsageStatsProtoV2;->loadCountAndTime(Landroid/util/proto/ProtoInputStream;JLcom/android/server/usage/IntervalStats$EventTracker;)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;->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;
 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/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;
 HPLcom/android/server/usage/UsageStatsProtoV2;->writeEvent(Landroid/util/proto/ProtoOutputStream;JLandroid/app/usage/UsageEvents$Event;)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
 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;
 HPLcom/android/server/usage/UsageStatsProtoV2;->writeUsageStats(Landroid/util/proto/ProtoOutputStream;JLandroid/app/usage/UsageStats;)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
 HPLcom/android/server/usage/UsageStatsService$1;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
 HSPLcom/android/server/usage/UsageStatsService$3;->onUidStateChanged(IIJI)V+]Landroid/os/Handler;Lcom/android/server/usage/UsageStatsService$H;]Landroid/os/Message;Landroid/os/Message;
-HPLcom/android/server/usage/UsageStatsService$BinderService;->getAppStandbyBucket(Ljava/lang/String;Ljava/lang/String;I)I
+HPLcom/android/server/usage/UsageStatsService$BinderService;->getAppStandbyBucket(Ljava/lang/String;Ljava/lang/String;I)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]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;->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;
 HPLcom/android/server/usage/UsageStatsService$BinderService;->isAppInactive(Ljava/lang/String;ILjava/lang/String;)Z
 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;
-HSPLcom/android/server/usage/UsageStatsService$H;->handleMessage(Landroid/os/Message;)V+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;]Landroid/os/Handler;Lcom/android/server/usage/UsageStatsService$H;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/usage/UsageStatsManagerInternal$EstimatedLaunchTimeChangedListener;Lcom/android/server/job/controllers/PrefetchController$1;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;]Ljava/util/concurrent/CopyOnWriteArraySet;Ljava/util/concurrent/CopyOnWriteArraySet;
+HSPLcom/android/server/usage/UsageStatsService$H;->handleMessage(Landroid/os/Message;)V+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;]Landroid/os/Handler;Lcom/android/server/usage/UsageStatsService$H;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/usage/UsageStatsManagerInternal$EstimatedLaunchTimeChangedListener;Lcom/android/server/job/controllers/PrefetchController$1;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService;]Ljava/util/concurrent/CopyOnWriteArraySet;Ljava/util/concurrent/CopyOnWriteArraySet;
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->getAppStandbyBucket(Ljava/lang/String;IJ)I+]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;
+HPLcom/android/server/usage/UsageStatsService$LocalService;->getAppUsageLimit(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/app/usage/UsageStatsManagerInternal$AppUsageLimitData;
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->isAppIdle(Ljava/lang/String;II)Z
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->reportContentProviderUsage(Ljava/lang/String;Ljava/lang/String;I)V
-HSPLcom/android/server/usage/UsageStatsService$LocalService;->reportEvent(Landroid/content/ComponentName;IIILandroid/content/ComponentName;)V
+HPLcom/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
-HSPLcom/android/server/usage/UsageStatsService$LocalService;->reportInterruptiveNotification(Ljava/lang/String;Ljava/lang/String;I)V
-HSPLcom/android/server/usage/UsageStatsService$LocalService;->setLastJobRunTime(Ljava/lang/String;IJ)V
+HPLcom/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;->reportNotificationUpdated(Ljava/lang/String;Landroid/os/UserHandle;J)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;->-$$Nest$fgetmUidToKernelCounter(Lcom/android/server/usage/UsageStatsService;)Landroid/util/SparseIntArray;
 HPLcom/android/server/usage/UsageStatsService;->-$$Nest$misInstantApp(Lcom/android/server/usage/UsageStatsService;Ljava/lang/String;I)Z+]Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService;
 HSPLcom/android/server/usage/UsageStatsService;->-$$Nest$mreportEventOrAddToQueue(Lcom/android/server/usage/UsageStatsService;ILandroid/app/usage/UsageEvents$Event;)V+]Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService;
 HPLcom/android/server/usage/UsageStatsService;->-$$Nest$mshouldObfuscateInstantAppsForCaller(Lcom/android/server/usage/UsageStatsService;II)Z
-HPLcom/android/server/usage/UsageStatsService;->convertToSystemTimeLocked(Landroid/app/usage/UsageEvents$Event;)V
-HPLcom/android/server/usage/UsageStatsService;->dump([Ljava/lang/String;Ljava/io/PrintWriter;)V
+HPLcom/android/server/usage/UsageStatsService;->convertToSystemTimeLocked(Landroid/app/usage/UsageEvents$Event;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/usage/UsageStatsService;->getUserUsageStatsServiceLocked(I)Lcom/android/server/usage/UserUsageStatsService;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/usage/UsageStatsService;->isInstantApp(Ljava/lang/String;I)Z+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-HPLcom/android/server/usage/UsageStatsService;->queryEvents(IJJI)Landroid/app/usage/UsageEvents;+]Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService;]Lcom/android/server/usage/UserUsageStatsService;Lcom/android/server/usage/UserUsageStatsService;]Ljava/util/concurrent/CopyOnWriteArraySet;Ljava/util/concurrent/CopyOnWriteArraySet;
-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/pm/BackgroundInstallControlService$$ExternalSyntheticLambda0;,Lcom/android/server/job/controllers/QuotaController$UsageEventTracker;]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;
+HPLcom/android/server/usage/UsageStatsService;->queryEvents(IJJI)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UsageStatsService;->queryUsageStats(IIJJZ)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService;]Lcom/android/server/usage/UserUsageStatsService;Lcom/android/server/usage/UserUsageStatsService;]Ljava/util/concurrent/CopyOnWriteArraySet;Ljava/util/concurrent/CopyOnWriteArraySet;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HPLcom/android/server/usage/UsageStatsService;->reportEvent(Landroid/app/usage/UsageEvents$Event;I)V+]Landroid/app/usage/UsageStatsManagerInternal$UsageEventListener;megamorphic_types]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;->shouldObfuscateInstantAppsForCaller(II)Z+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/usage/UserBroadcastEvents;->getBroadcastEvents(Ljava/lang/String;)Landroid/util/ArraySet;
@@ -10172,29 +10493,25 @@
 HPLcom/android/server/usage/UserUsageStatsService;->checkAndGetTimeLocked()J+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/usage/UserUsageStatsService;Lcom/android/server/usage/UserUsageStatsService;
 HPLcom/android/server/usage/UserUsageStatsService;->convertToSystemTimeLocked(Landroid/app/usage/UsageEvents$Event;)V
 HPLcom/android/server/usage/UserUsageStatsService;->lambda$queryEarliestEventsForPackage$2(JJLjava/lang/String;ILcom/android/server/usage/IntervalStats;ZLjava/util/List;)Z+]Landroid/app/usage/EventList;Landroid/app/usage/EventList;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/app/usage/UsageEvents$Event;Landroid/app/usage/UsageEvents$Event;
-HPLcom/android/server/usage/UserUsageStatsService;->printEvent(Lcom/android/internal/util/IndentingPrintWriter;Landroid/app/usage/UsageEvents$Event;Z)V
-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;->queryStats(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$$ExternalSyntheticLambda1;,Lcom/android/server/usage/UserUsageStatsService$4;]Lcom/android/server/usage/UsageStatsDatabase;Lcom/android/server/usage/UsageStatsDatabase;
+HPLcom/android/server/usage/UserUsageStatsService;->queryEvents(JJI)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UserUsageStatsService;->queryStats(IJJLcom/android/server/usage/UsageStatsDatabase$StatCombiner;)Ljava/util/List;
 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;
-HSPLcom/android/server/usb/UsbDeviceManager$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/usb/UsbDeviceManager$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->handleMessage(Landroid/os/Message;)V
-HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendMessage(IZ)V
+HPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendMessage(IZ)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateUsbNotification(Z)V
 HSPLcom/android/server/usb/UsbHostManager;-><clinit>()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;
+HSPLcom/android/server/usb/hal/port/RawPortInfo;-><init>(Ljava/lang/String;IIIZIZIZZIZIIZIZ[IIILandroid/hardware/usb/DisplayPortAltModeInfo;)V
 HSPLcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;->notifyPortStatusChange([Landroid/hardware/usb/PortStatus;I)V
-HSPLcom/android/server/utils/AlarmQueue$1;->run()V
-HSPLcom/android/server/utils/AlarmQueue$AlarmPriorityQueue$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;->$r8$lambda$d9iiClPvFwDHjOxNjAC2AhSc94c(Landroid/util/Pair;Landroid/util/Pair;)I
-HSPLcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;->lambda$static$0(Landroid/util/Pair;Landroid/util/Pair;)I+]Ljava/lang/Long;Ljava/lang/Long;
-HSPLcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;->removeKey(Ljava/lang/Object;)Z+]Ljava/lang/Object;Lcom/android/server/job/controllers/JobStatus;,Ljava/lang/String;,Landroid/content/pm/UserPackage;]Ljava/util/PriorityQueue;Lcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;
-HSPLcom/android/server/utils/AlarmQueue$Injector;->getElapsedRealtime()J
-HSPLcom/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/FlexibilityController$FlexibilityAlarmQueue;,Lcom/android/server/usage/UsageStatsService$LaunchTimeAlarmQueue;,Lcom/android/server/job/controllers/QuotaController$InQuotaAlarmQueue;,Lcom/android/server/job/controllers/PrefetchController$ThresholdAlarmListener;]Ljava/util/PriorityQueue;Lcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;
-HSPLcom/android/server/utils/AlarmQueue;->removeAlarmForKey(Ljava/lang/Object;)V+]Lcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;Lcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;]Lcom/android/server/utils/AlarmQueue;Lcom/android/server/job/controllers/FlexibilityController$FlexibilityAlarmQueue;,Lcom/android/server/job/controllers/QuotaController$InQuotaAlarmQueue;,Lcom/android/server/job/controllers/PrefetchController$ThresholdAlarmListener;,Lcom/android/server/usage/UsageStatsService$LaunchTimeAlarmQueue;
-HSPLcom/android/server/utils/AlarmQueue;->setNextAlarmLocked()V
-HSPLcom/android/server/utils/AlarmQueue;->setNextAlarmLocked(J)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/util/PriorityQueue;Lcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;
+HPLcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;->lambda$static$0(Landroid/util/Pair;Landroid/util/Pair;)I+]Ljava/lang/Long;Ljava/lang/Long;
+HSPLcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;->removeKey(Ljava/lang/Object;)Z+]Ljava/lang/Object;Ljava/lang/String;,Landroid/content/pm/UserPackage;]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/usage/UsageStatsService$LaunchTimeAlarmQueue;,Lcom/android/server/job/controllers/QuotaController$InQuotaAlarmQueue;,Lcom/android/server/tare/Agent$BalanceThresholdAlarmQueue;]Ljava/util/PriorityQueue;Lcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;
+HSPLcom/android/server/utils/AlarmQueue;->removeAlarmForKey(Ljava/lang/Object;)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;
+HPLcom/android/server/utils/AlarmQueue;->setNextAlarmLocked(J)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/util/PriorityQueue;Lcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;
 HSPLcom/android/server/utils/EventLogger$Event;-><init>()V
 HSPLcom/android/server/utils/EventLogger$StringEvent;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/server/utils/EventLogger;->enqueue(Lcom/android/server/utils/EventLogger$Event;)V
+HSPLcom/android/server/utils/EventLogger;->enqueue(Lcom/android/server/utils/EventLogger$Event;)V+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
 HSPLcom/android/server/utils/Slogf;-><clinit>()V
 HSPLcom/android/server/utils/Slogf;->getMessage(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
 HSPLcom/android/server/utils/Slogf;->w(Ljava/lang/String;Ljava/lang/String;)I
@@ -10227,7 +10544,7 @@
 HSPLcom/android/server/utils/WatchableImpl;->seal()V
 HSPLcom/android/server/utils/WatchableImpl;->unregisterObserver(Lcom/android/server/utils/Watcher;)V
 HSPLcom/android/server/utils/WatchedArrayList$1;-><init>(Lcom/android/server/utils/WatchedArrayList;)V
-HSPLcom/android/server/utils/WatchedArrayList$1;->onChange(Lcom/android/server/utils/Watchable;)V
+HSPLcom/android/server/utils/WatchedArrayList$1;->onChange(Lcom/android/server/utils/Watchable;)V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedArrayList;
 HSPLcom/android/server/utils/WatchedArrayList;-><init>()V
 HSPLcom/android/server/utils/WatchedArrayList;-><init>(I)V
 HSPLcom/android/server/utils/WatchedArrayList;->add(Ljava/lang/Object;)Z
@@ -10238,13 +10555,12 @@
 HSPLcom/android/server/utils/WatchedArrayList;->registerObserver(Lcom/android/server/utils/Watcher;)V
 HSPLcom/android/server/utils/WatchedArrayList;->set(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/utils/WatchedArrayList;->size()I
-HSPLcom/android/server/utils/WatchedArrayList;->snapshot()Lcom/android/server/utils/WatchedArrayList;
 HSPLcom/android/server/utils/WatchedArrayList;->snapshot(Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;)V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedArrayList;]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/utils/WatchedArrayList;->unregisterChild(Ljava/lang/Object;)V
 HSPLcom/android/server/utils/WatchedArrayList;->unregisterChildIf(Ljava/lang/Object;)V
 HSPLcom/android/server/utils/WatchedArrayList;->untrackedStorage()Ljava/util/ArrayList;
 HSPLcom/android/server/utils/WatchedArrayMap$1;-><init>(Lcom/android/server/utils/WatchedArrayMap;)V
-HSPLcom/android/server/utils/WatchedArrayMap$1;->onChange(Lcom/android/server/utils/Watchable;)V
+HSPLcom/android/server/utils/WatchedArrayMap$1;->onChange(Lcom/android/server/utils/Watchable;)V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedArrayMap;
 HSPLcom/android/server/utils/WatchedArrayMap;-><init>()V
 HSPLcom/android/server/utils/WatchedArrayMap;-><init>(IZ)V
 HSPLcom/android/server/utils/WatchedArrayMap;->clear()V
@@ -10268,7 +10584,7 @@
 HSPLcom/android/server/utils/WatchedArraySet$1;->onChange(Lcom/android/server/utils/Watchable;)V
 HSPLcom/android/server/utils/WatchedArraySet;-><init>()V
 HSPLcom/android/server/utils/WatchedArraySet;-><init>(IZ)V
-HSPLcom/android/server/utils/WatchedArraySet;->add(Ljava/lang/Object;)Z
+HSPLcom/android/server/utils/WatchedArraySet;->add(Ljava/lang/Object;)Z+]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 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;
@@ -10276,11 +10592,11 @@
 HSPLcom/android/server/utils/WatchedArraySet;->onChanged()V
 HSPLcom/android/server/utils/WatchedArraySet;->registerChild(Ljava/lang/Object;)V
 HSPLcom/android/server/utils/WatchedArraySet;->registerObserver(Lcom/android/server/utils/Watcher;)V
-HSPLcom/android/server/utils/WatchedArraySet;->remove(Ljava/lang/Object;)Z
+HSPLcom/android/server/utils/WatchedArraySet;->remove(Ljava/lang/Object;)Z+]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/utils/WatchedArraySet;->size()I
 HSPLcom/android/server/utils/WatchedArraySet;->snapshot(Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;)V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedArraySet;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/utils/WatchedArraySet;->untrackedStorage()Landroid/util/ArraySet;
-HSPLcom/android/server/utils/WatchedArraySet;->valueAt(I)Ljava/lang/Object;
+HSPLcom/android/server/utils/WatchedArraySet;->valueAt(I)Ljava/lang/Object;+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/utils/WatchedLongSparseArray$1;-><init>(Lcom/android/server/utils/WatchedLongSparseArray;)V
 HSPLcom/android/server/utils/WatchedLongSparseArray;-><init>()V
 HSPLcom/android/server/utils/WatchedLongSparseArray;->get(J)Ljava/lang/Object;
@@ -10298,13 +10614,13 @@
 HSPLcom/android/server/utils/WatchedSparseArray;-><init>(I)V
 HSPLcom/android/server/utils/WatchedSparseArray;->delete(I)V
 HSPLcom/android/server/utils/WatchedSparseArray;->get(I)Ljava/lang/Object;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/utils/WatchedSparseArray;->keyAt(I)I
 HSPLcom/android/server/utils/WatchedSparseArray;->onChanged()V
 HSPLcom/android/server/utils/WatchedSparseArray;->put(ILjava/lang/Object;)V
 HSPLcom/android/server/utils/WatchedSparseArray;->registerChild(Ljava/lang/Object;)V
 HSPLcom/android/server/utils/WatchedSparseArray;->registerObserver(Lcom/android/server/utils/Watcher;)V
 HSPLcom/android/server/utils/WatchedSparseArray;->remove(I)V
 HSPLcom/android/server/utils/WatchedSparseArray;->size()I
+HSPLcom/android/server/utils/WatchedSparseArray;->snapshot()Lcom/android/server/utils/WatchedSparseArray;
 HSPLcom/android/server/utils/WatchedSparseArray;->snapshot(Lcom/android/server/utils/WatchedSparseArray;Lcom/android/server/utils/WatchedSparseArray;)V
 HSPLcom/android/server/utils/WatchedSparseArray;->unregisterChildIf(Ljava/lang/Object;)V
 HSPLcom/android/server/utils/WatchedSparseArray;->valueAt(I)Ljava/lang/Object;
@@ -10332,270 +10648,394 @@
 HSPLcom/android/server/utils/WatchedSparseIntArray;->snapshot(Lcom/android/server/utils/WatchedSparseIntArray;Lcom/android/server/utils/WatchedSparseIntArray;)V
 HSPLcom/android/server/utils/WatchedSparseSetArray;-><init>()V
 HSPLcom/android/server/utils/WatchedSparseSetArray;-><init>(Lcom/android/server/utils/WatchedSparseSetArray;)V
-HSPLcom/android/server/utils/WatchedSparseSetArray;->add(ILjava/lang/Object;)Z
-HPLcom/android/server/utils/WatchedSparseSetArray;->contains(ILjava/lang/Object;)Z+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;
-HSPLcom/android/server/utils/WatchedSparseSetArray;->onChanged()V
-HSPLcom/android/server/utils/WatchedSparseSetArray;->snapshot()Ljava/lang/Object;
+HSPLcom/android/server/utils/WatchedSparseSetArray;->add(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;->contains(ILjava/lang/Object;)Z+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;
+HSPLcom/android/server/utils/WatchedSparseSetArray;->onChanged()V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedSparseSetArray;
 HSPLcom/android/server/utils/Watcher;-><init>()V
-HPLcom/android/server/utils/quota/CountQuotaTracker;->getExecutionStatsLocked(ILjava/lang/String;Ljava/lang/String;Z)Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;
-HPLcom/android/server/utils/quota/CountQuotaTracker;->isWithinQuotaLocked(ILjava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/server/utils/quota/Category;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/server/utils/quota/Category;->hashCode()I
+HSPLcom/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;
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->getExecutionStatsLocked(ILjava/lang/String;Ljava/lang/String;Z)Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;+]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;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/utils/quota/Categorizer;Lcom/android/server/job/JobSchedulerService$$ExternalSyntheticLambda3;,Lcom/android/server/utils/quota/Categorizer$$ExternalSyntheticLambda0;]Ljava/lang/Long;Ljava/lang/Long;]Lcom/android/server/utils/quota/CountQuotaTracker;Lcom/android/server/utils/quota/CountQuotaTracker;
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->isUnderCountQuotaLocked(Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;)Z
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->isWithinQuota(ILjava/lang/String;Ljava/lang/String;)Z
+HSPLcom/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;
+HSPLcom/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;
 HPLcom/android/server/utils/quota/CountQuotaTracker;->maybeScheduleCleanupAlarmLocked()V
 HPLcom/android/server/utils/quota/CountQuotaTracker;->noteEvent(ILjava/lang/String;Ljava/lang/String;)Z
-HPLcom/android/server/utils/quota/CountQuotaTracker;->updateExecutionStatsLocked(ILjava/lang/String;Ljava/lang/String;Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;)V
-HPLcom/android/server/utils/quota/QuotaTracker;->isQuotaFreeLocked(ILjava/lang/String;)Z
-HPLcom/android/server/utils/quota/UptcMap;->getOrCreate(ILjava/lang/String;Ljava/lang/String;Ljava/util/function/Function;)Ljava/lang/Object;
+HSPLcom/android/server/utils/quota/CountQuotaTracker;->updateExecutionStatsLocked(ILjava/lang/String;Ljava/lang/String;Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;)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;]Landroid/util/LongArrayQueue;Landroid/util/LongArrayQueue;
+HSPLcom/android/server/utils/quota/QuotaTracker$Injector;->getElapsedRealtime()J
+HSPLcom/android/server/utils/quota/QuotaTracker;->isEnabledLocked()Z
+HSPLcom/android/server/utils/quota/QuotaTracker;->isQuotaFreeLocked(ILjava/lang/String;)Z+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/lang/Boolean;Ljava/lang/Boolean;
+HSPLcom/android/server/utils/quota/QuotaTracker;->isWithinQuota(ILjava/lang/String;Ljava/lang/String;)Z+]Lcom/android/server/utils/quota/QuotaTracker;Lcom/android/server/utils/quota/CountQuotaTracker;
+HSPLcom/android/server/utils/quota/UptcMap;->get(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
+HSPLcom/android/server/utils/quota/UptcMap;->getOrCreate(ILjava/lang/String;Ljava/lang/String;Ljava/util/function/Function;)Ljava/lang/Object;+]Lcom/android/server/utils/quota/UptcMap;Lcom/android/server/utils/quota/UptcMap;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/util/function/Function;Lcom/android/server/utils/quota/CountQuotaTracker$$ExternalSyntheticLambda2;,Lcom/android/server/utils/quota/CountQuotaTracker$$ExternalSyntheticLambda1;
 HPLcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;->getGroupForSubId(I)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
+HPLcom/android/server/vibrator/AbstractVibratorStep;->getVibratorId()I
 HPLcom/android/server/vibrator/AbstractVibratorStep;->nextSteps(JI)Ljava/util/List;
 HPLcom/android/server/vibrator/AbstractVibratorStep;->stopVibrating()V
-HPLcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;->apply(Ljava/util/List;ILandroid/os/VibratorInfo;)I
 HPLcom/android/server/vibrator/CompleteEffectVibratorStep;->play()Ljava/util/List;
 HPLcom/android/server/vibrator/FinishSequentialEffectStep;->play()Ljava/util/List;
 HPLcom/android/server/vibrator/HalVibration;-><init>(Landroid/os/IBinder;Landroid/os/CombinedVibration;Lcom/android/server/vibrator/Vibration$CallerInfo;)V
 HPLcom/android/server/vibrator/HalVibration;->end(Lcom/android/server/vibrator/Vibration$EndInfo;)V
 HPLcom/android/server/vibrator/HalVibration;->getDebugInfo()Lcom/android/server/vibrator/Vibration$DebugInfo;
 HPLcom/android/server/vibrator/HalVibration;->getStatsInfo(J)Lcom/android/server/vibrator/VibrationStats$StatsInfo;
-HPLcom/android/server/vibrator/HalVibration;->transformCombinedEffect(Landroid/os/CombinedVibration;Ljava/util/function/Function;)Landroid/os/CombinedVibration;
-HPLcom/android/server/vibrator/HalVibration;->updateEffects(Ljava/util/function/Function;)V
+HPLcom/android/server/vibrator/InputDeviceDelegate;->vibrateIfAvailable(Lcom/android/server/vibrator/Vibration$CallerInfo;Landroid/os/CombinedVibration;)Z
 HPLcom/android/server/vibrator/PerformPrebakedVibratorStep;->play()Ljava/util/List;
+HPLcom/android/server/vibrator/SetAmplitudeVibratorStep;->play()Ljava/util/List;
 HPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;-><init>(Lcom/android/server/vibrator/StartSequentialEffectStep;Landroid/os/CombinedVibration$Mono;)V
 HPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;->calculateRequiredSyncCapabilities(Landroid/util/SparseArray;)J
+HPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;->effectAt(I)Landroid/os/VibrationEffect$Composed;
 HPLcom/android/server/vibrator/StartSequentialEffectStep;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;Landroid/os/CombinedVibration$Sequential;)V
+HPLcom/android/server/vibrator/StartSequentialEffectStep;->createEffectToVibratorMapping(Landroid/os/CombinedVibration;)Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;
+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
 HPLcom/android/server/vibrator/Step;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;J)V
+HPLcom/android/server/vibrator/Step;->calculateWaitTime()J
+HPLcom/android/server/vibrator/Step;->getVibration()Lcom/android/server/vibrator/HalVibration;+]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;
 HPLcom/android/server/vibrator/Vibration$CallerInfo;-><init>(Landroid/os/VibrationAttributes;IILjava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/vibrator/Vibration$DebugInfo;-><init>(Lcom/android/server/vibrator/Vibration$Status;Lcom/android/server/vibrator/VibrationStats;Landroid/os/CombinedVibration;Landroid/os/CombinedVibration;FLcom/android/server/vibrator/Vibration$CallerInfo;)V
+HPLcom/android/server/vibrator/Vibration$EndInfo;-><init>(Lcom/android/server/vibrator/Vibration$Status;Lcom/android/server/vibrator/Vibration$CallerInfo;)V
 HPLcom/android/server/vibrator/Vibration;-><init>(Landroid/os/IBinder;Lcom/android/server/vibrator/Vibration$CallerInfo;)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;
 HPLcom/android/server/vibrator/VibrationScaler;->scale(Landroid/os/VibrationEffect;I)Landroid/os/VibrationEffect;
 HPLcom/android/server/vibrator/VibrationSettings$MyUidObserver;->isUidForeground(I)Z
 HSPLcom/android/server/vibrator/VibrationSettings$MyUidObserver;->onUidStateChanged(IIJI)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HPLcom/android/server/vibrator/VibrationSettings;->getCurrentIntensity(I)I
+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;->getDefaultIntensity(I)I+]Landroid/os/vibrator/VibrationConfig;Landroid/os/vibrator/VibrationConfig;
+HPLcom/android/server/vibrator/VibrationSettings;->getFallbackEffect(I)Landroid/os/VibrationEffect;
 HPLcom/android/server/vibrator/VibrationSettings;->shouldIgnoreVibration(Lcom/android/server/vibrator/Vibration$CallerInfo;)Lcom/android/server/vibrator/Vibration$Status;
 HPLcom/android/server/vibrator/VibrationStats$StatsInfo;-><init>(IIILcom/android/server/vibrator/Vibration$Status;Lcom/android/server/vibrator/VibrationStats;J)V
 HPLcom/android/server/vibrator/VibrationStats$StatsInfo;->filteredKeys(Landroid/util/SparseBooleanArray;Z)[I+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HPLcom/android/server/vibrator/VibrationStats$StatsInfo;->writeVibrationReported()V
 HPLcom/android/server/vibrator/VibrationStats;-><init>()V
-HPLcom/android/server/vibrator/VibrationStepConductor;-><init>(Lcom/android/server/vibrator/HalVibration;Lcom/android/server/vibrator/VibrationSettings;Lcom/android/server/vibrator/DeviceVibrationEffectAdapter;Landroid/util/SparseArray;Lcom/android/server/vibrator/VibrationThread$VibratorManagerHooks;)V
+HPLcom/android/server/vibrator/VibrationStats;->reportPerformEffect(JLandroid/os/vibrator/PrebakedSegment;)V
+HPLcom/android/server/vibrator/VibrationStats;->reportStarted()V
 HPLcom/android/server/vibrator/VibrationStepConductor;->calculateVibrationEndInfo()Lcom/android/server/vibrator/Vibration$EndInfo;
 HPLcom/android/server/vibrator/VibrationStepConductor;->expectIsVibrationThread(Z)V
-HPLcom/android/server/vibrator/VibrationStepConductor;->hasPendingNotifySignalLocked()Z
+HPLcom/android/server/vibrator/VibrationStepConductor;->getVibration()Lcom/android/server/vibrator/HalVibration;
+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;
+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;
+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;
 HPLcom/android/server/vibrator/VibrationStepConductor;->processVibratorsComplete([I)V
-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;->runNextStep()V+]Lcom/android/server/vibrator/Step;megamorphic_types]Ljava/util/List;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;
 HPLcom/android/server/vibrator/VibrationThread;->clientVibrationCompleteIfNotAlready(Lcom/android/server/vibrator/Vibration$EndInfo;)V
 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;->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;->waitForVibrationRequest()Lcom/android/server/vibrator/VibrationStepConductor;
+HSPLcom/android/server/vibrator/VibratorController;->getVibratorInfo()Landroid/os/VibratorInfo;
 HSPLcom/android/server/vibrator/VibratorController;->notifyListenerOnVibrating(Z)V
 HSPLcom/android/server/vibrator/VibratorController;->off()V
+HPLcom/android/server/vibrator/VibratorController;->on(Landroid/os/vibrator/PrebakedSegment;J)J
 HPLcom/android/server/vibrator/VibratorFrameworkStatsLogger;->writeVibrationReportedAsync(Lcom/android/server/vibrator/VibrationStats$StatsInfo;)V
 HPLcom/android/server/vibrator/VibratorFrameworkStatsLogger;->writeVibrationReportedFromQueue()V
+HPLcom/android/server/vibrator/VibratorManagerService$VibrationCompleteListener;->onComplete(IJ)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$EndInfo;)V
 HPLcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks;->onVibrationThreadReleased(J)V
 HPLcom/android/server/vibrator/VibratorManagerService$VibratorManagerRecords;->record(Lcom/android/server/vibrator/HalVibration;)V
-HPLcom/android/server/vibrator/VibratorManagerService$VibratorManagerRecords;->record(Ljava/util/LinkedList;Lcom/android/server/vibrator/Vibration$DebugInfo;)V
+HPLcom/android/server/vibrator/VibratorManagerService;->cancelVibrate(ILandroid/os/IBinder;)V
 HPLcom/android/server/vibrator/VibratorManagerService;->checkAppOpModeLocked(Lcom/android/server/vibrator/Vibration$CallerInfo;)I
 HPLcom/android/server/vibrator/VibratorManagerService;->endVibrationLocked(Lcom/android/server/vibrator/HalVibration;Lcom/android/server/vibrator/Vibration$EndInfo;Z)V
+HPLcom/android/server/vibrator/VibratorManagerService;->fillVibrationFallbacks(Lcom/android/server/vibrator/HalVibration;Landroid/os/CombinedVibration;)V
 HPLcom/android/server/vibrator/VibratorManagerService;->fillVibrationFallbacks(Lcom/android/server/vibrator/HalVibration;Landroid/os/VibrationEffect;)V
+HPLcom/android/server/vibrator/VibratorManagerService;->finishAppOpModeLocked(Lcom/android/server/vibrator/Vibration$CallerInfo;)V
 HPLcom/android/server/vibrator/VibratorManagerService;->fixupVibrationAttributes(Landroid/os/VibrationAttributes;Landroid/os/CombinedVibration;)Landroid/os/VibrationAttributes;
+HPLcom/android/server/vibrator/VibratorManagerService;->onVibrationComplete(IJ)V
 HPLcom/android/server/vibrator/VibratorManagerService;->reportFinishedVibrationLocked(Lcom/android/server/vibrator/Vibration$EndInfo;)V
+HPLcom/android/server/vibrator/VibratorManagerService;->shouldIgnoreVibrationLocked(Lcom/android/server/vibrator/Vibration$CallerInfo;)Lcom/android/server/vibrator/Vibration$EndInfo;
+HPLcom/android/server/vibrator/VibratorManagerService;->startAppOpModeLocked(Lcom/android/server/vibrator/Vibration$CallerInfo;)I
 HPLcom/android/server/vibrator/VibratorManagerService;->startVibrationLocked(Lcom/android/server/vibrator/HalVibration;)Lcom/android/server/vibrator/Vibration$EndInfo;
 HPLcom/android/server/vibrator/VibratorManagerService;->startVibrationOnThreadLocked(Lcom/android/server/vibrator/VibrationStepConductor;)Lcom/android/server/vibrator/Vibration$EndInfo;
 HPLcom/android/server/vibrator/VibratorManagerService;->vibrateInternal(IILjava/lang/String;Landroid/os/CombinedVibration;Landroid/os/VibrationAttributes;Ljava/lang/String;Landroid/os/IBinder;)Lcom/android/server/vibrator/HalVibration;
-HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;Landroid/os/IBinder;I)V
-HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$$ExternalSyntheticLambda4;->runOrThrow()V
-HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->notifyActivityEventChanged(Landroid/os/IBinder;I)V
-HSPLcom/android/server/wallpaper/WallpaperDataParser;->writeWallpaperAttributes(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;Lcom/android/server/wallpaper/WallpaperData;)V+]Ljava/util/Map$Entry;Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/modules/utils/TypedXmlSerializer;Lcom/android/internal/util/ArtBinaryXmlSerializer;]Landroid/app/WallpaperColors;Landroid/app/WallpaperColors;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/graphics/Color;Landroid/graphics/Color;]Ljava/util/Map;Ljava/util/Collections$UnmodifiableMap;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/wallpaper/WallpaperDisplayHelper;Lcom/android/server/wallpaper/WallpaperDisplayHelper;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/lang/Float;Ljava/lang/Float;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;Landroid/os/IBinder;I)V
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$$ExternalSyntheticLambda5;->runOrThrow()V
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->lambda$notifyActivityEventChanged$2(Landroid/os/IBinder;I)V
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->notifyActivityEventChanged(Landroid/os/IBinder;I)V
+HSPLcom/android/server/wallpaper/WallpaperDataParser;->writeWallpaperAttributes(Lcom/android/modules/utils/TypedXmlSerializer;Ljava/lang/String;Lcom/android/server/wallpaper/WallpaperData;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/app/WallpaperColors;Landroid/app/WallpaperColors;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/graphics/Color;Landroid/graphics/Color;]Lcom/android/server/wallpaper/WallpaperDisplayHelper;Lcom/android/server/wallpaper/WallpaperDisplayHelper;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/lang/Float;Ljava/lang/Float;
+HPLcom/android/server/wallpaper/WallpaperManagerService;->setInAmbientMode(ZJ)V
+HPLcom/android/server/webkit/WebViewUpdateService$BinderService;->grantVisibilityToCaller(Ljava/lang/String;I)V
+HPLcom/android/server/wm/AbsAppSnapshotController;->checkIfReadyToSnapshot(Lcom/android/server/wm/WindowContainer;)Landroid/util/Pair;
 HPLcom/android/server/wm/AbsAppSnapshotController;->createSnapshot(Lcom/android/server/wm/WindowContainer;FILandroid/graphics/Point;Landroid/window/TaskSnapshot$Builder;)Landroid/window/ScreenCapture$ScreenshotHardwareBuffer;
 HPLcom/android/server/wm/AbsAppSnapshotController;->prepareTaskSnapshot(Lcom/android/server/wm/WindowContainer;ILandroid/window/TaskSnapshot$Builder;)Z
+HSPLcom/android/server/wm/AbsAppSnapshotController;->shouldDisableSnapshots()Z
+HPLcom/android/server/wm/AbsAppSnapshotController;->snapshot(Lcom/android/server/wm/WindowContainer;I)Landroid/window/TaskSnapshot;
+HPLcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl$UiChangesForAccessibilityCallbacksDispatcher;->onRectangleOnScreenRequested(ILandroid/graphics/Rect;)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;
+HSPLcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;->getInstance(Lcom/android/server/wm/WindowManagerService;)Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;
 HSPLcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;->isTracingEnabled(J)Z
 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;->onFocusChanged(Lcom/android/server/wm/InputTarget;Lcom/android/server/wm/InputTarget;)V
 HSPLcom/android/server/wm/ActivityClientController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
-HSPLcom/android/server/wm/ActivityClientController;->activityIdle(Landroid/os/IBinder;Landroid/content/res/Configuration;Z)V
+HPLcom/android/server/wm/ActivityClientController;->activityIdle(Landroid/os/IBinder;Landroid/content/res/Configuration;Z)V
+HPLcom/android/server/wm/ActivityClientController;->activityPaused(Landroid/os/IBinder;)V
+HPLcom/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
-HSPLcom/android/server/wm/ActivityClientController;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/server/wm/ActivityClientController;->setTaskDescription(Landroid/os/IBinder;Landroid/app/ActivityManager$TaskDescription;)V
-HSPLcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo$Builder;-><init>(IIIIILandroid/content/Intent;Landroid/content/pm/ResolveInfo;Landroid/content/pm/ActivityInfo;)V
-HSPLcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;-><init>(Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo$Builder;)V
+HPLcom/android/server/wm/ActivityClientController;->activityTopResumedStateLost()V
+HPLcom/android/server/wm/ActivityClientController;->ensureValidPictureInPictureActivityParams(Ljava/lang/String;Landroid/os/IBinder;Landroid/app/PictureInPictureParams;)Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityClientController;->finishActivity(Landroid/os/IBinder;ILandroid/content/Intent;I)Z
+HPLcom/android/server/wm/ActivityClientController;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HPLcom/android/server/wm/ActivityClientController;->setTaskDescription(Landroid/os/IBinder;Landroid/app/ActivityManager$TaskDescription;)V
+HPLcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo$Builder;-><init>(IIIIILandroid/content/Intent;Landroid/content/pm/ResolveInfo;Landroid/content/pm/ActivityInfo;)V
+HPLcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;-><init>(Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo$Builder;)V
 HSPLcom/android/server/wm/ActivityMetricsLaunchObserver;-><init>()V
-HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;-><init>(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;Landroid/app/ActivityOptions;IZZII)V
+HPLcom/android/server/wm/ActivityMetricsLogger$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;JILcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;ZIIZ)V
+HPLcom/android/server/wm/ActivityMetricsLogger$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;-><init>()V
+HPLcom/android/server/wm/ActivityMetricsLogger$PackageCompatStateInfo;-><init>()V
+HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;-><init>(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;Landroid/app/ActivityOptions;IZZIIZ)V
+HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->calculateDelay(J)I
 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;-><clinit>()V
 HSPLcom/android/server/wm/ActivityMetricsLogger;-><init>(Lcom/android/server/wm/ActivityTaskSupervisor;Landroid/os/Looper;)V
-HSPLcom/android/server/wm/ActivityMetricsLogger;->getActiveTransitionInfo(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
-HSPLcom/android/server/wm/ActivityMetricsLogger;->logAppCompatState(Lcom/android/server/wm/ActivityRecord;)V
-HSPLcom/android/server/wm/ActivityMetricsLogger;->logAppCompatStateInternal(Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/ActivityMetricsLogger$PackageCompatStateInfo;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->done(ZLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Ljava/lang/String;J)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;->launchObserverNotifyActivityLaunched(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->logAppCompatState(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->logAppCompatStateInternal(Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/ActivityMetricsLogger$PackageCompatStateInfo;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->logAppDisplayed(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(JILcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;ZII)V
-HSPLcom/android/server/wm/ActivityMetricsLogger;->logWindowState()V
-HSPLcom/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;->notifyTransitionStarting(Landroid/util/ArrayMap;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->logAppTransitionFinished(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Z)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->logWindowState()V
+HPLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityLaunched(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;IZLcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->notifyBeforePackageUnstopped(Ljava/lang/String;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyBindApplication(Landroid/content/pm/ApplicationInfo;)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;)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;
 HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda11;-><init>()V
-HSPLcom/android/server/wm/ActivityRecord$Builder;->build()Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->$r8$lambda$24NZ6fEJj-zAm-R88qcKGhgDi4o(Lcom/android/server/wm/ActivityRecord;Landroid/graphics/Rect;)Landroid/graphics/Rect;
-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
+HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/wm/ActivityRecord;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda12;->get()Ljava/lang/Object;
+HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda26;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/ActivityRecord$AddStartingWindow;->run()V
+HPLcom/android/server/wm/ActivityRecord$Builder;->build()Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->$r8$lambda$LiDF8j7uLwJPCiS92jSHv7lj664(Lcom/android/server/wm/ActivityRecord;Landroid/graphics/Rect;)Landroid/graphics/Rect;
+HPLcom/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
+HPLcom/android/server/wm/ActivityRecord;->activityPaused(Z)V
+HPLcom/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
-HSPLcom/android/server/wm/ActivityRecord;->addStartingWindow(Ljava/lang/String;ILcom/android/server/wm/ActivityRecord;ZZZZZZZ)Z
-HSPLcom/android/server/wm/ActivityRecord;->addToStopping(ZZLjava/lang/String;)V
-HPLcom/android/server/wm/ActivityRecord;->areBoundsLetterboxed()Z
-HSPLcom/android/server/wm/ActivityRecord;->asActivityRecord()Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/ActivityRecord;->attachedToProcess()Z
-HSPLcom/android/server/wm/ActivityRecord;->canAffectSystemUiFlags()Z
-HSPLcom/android/server/wm/ActivityRecord;->canBeTopRunning()Z+]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
-HSPLcom/android/server/wm/ActivityRecord;->canShowWhenLocked()Z+]Lcom/android/server/wm/TaskFragment;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;->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
-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;
-HSPLcom/android/server/wm/ActivityRecord;->checkKeyguardFlagsChanged()V
-HSPLcom/android/server/wm/ActivityRecord;->commitVisibility(ZZZ)V
-HSPLcom/android/server/wm/ActivityRecord;->completeResumeLocked()V
-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;
+HPLcom/android/server/wm/ActivityRecord;->addStartingWindow(Ljava/lang/String;ILcom/android/server/wm/ActivityRecord;ZZZZZZZ)Z
+HPLcom/android/server/wm/ActivityRecord;->addToStopping(ZZLjava/lang/String;)V
+HPLcom/android/server/wm/ActivityRecord;->allDrawnStatesConsidered()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HPLcom/android/server/wm/ActivityRecord;->applyAspectRatio(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;F)Z
+HPLcom/android/server/wm/ActivityRecord;->areBoundsLetterboxed()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->asActivityRecord()Lcom/android/server/wm/ActivityRecord;
+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;->canAffectSystemUiFlags()Z
+HPLcom/android/server/wm/ActivityRecord;->canBeTopRunning()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+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+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+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;
+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;
+HPLcom/android/server/wm/ActivityRecord;->checkKeyguardFlagsChanged()V
+HPLcom/android/server/wm/ActivityRecord;->cleanUp(ZZ)V
+HPLcom/android/server/wm/ActivityRecord;->clearAllDrawn()V
+HPLcom/android/server/wm/ActivityRecord;->commitFinishDrawing(Landroid/view/SurfaceControl$Transaction;)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;
+HPLcom/android/server/wm/ActivityRecord;->completeFinishing(ZLjava/lang/String;)Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->completeResumeLocked()V
+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
+HPLcom/android/server/wm/ActivityRecord;->destroyIfPossible(Ljava/lang/String;)Z
 HPLcom/android/server/wm/ActivityRecord;->destroyImmediately(Ljava/lang/String;)Z
 HPLcom/android/server/wm/ActivityRecord;->destroySurfaces(Z)V
-HSPLcom/android/server/wm/ActivityRecord;->ensureActivityConfiguration(IZZZ)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;->ensureActivityConfiguration(IZZZ)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;
+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;
 HPLcom/android/server/wm/ActivityRecord;->finishIfPossible(ILandroid/content/Intent;Lcom/android/server/uri/NeededUriGrants;Ljava/lang/String;Z)I
-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
+HPLcom/android/server/wm/ActivityRecord;->finishLaunchTickingLocked()V
+HPLcom/android/server/wm/ActivityRecord;->finishSync(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;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
 HPLcom/android/server/wm/ActivityRecord;->forToken(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
-HSPLcom/android/server/wm/ActivityRecord;->forTokenLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
-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
-HSPLcom/android/server/wm/ActivityRecord;->getAppCompatState(Z)I+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/ActivityRecord;->getBounds()Landroid/graphics/Rect;+]Ljava/util/Optional;Ljava/util/Optional;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
-HSPLcom/android/server/wm/ActivityRecord;->getCameraCompatControlState()I
+HPLcom/android/server/wm/ActivityRecord;->forTokenLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;+]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
+HPLcom/android/server/wm/ActivityRecord;->getAppCompatState(Z)I+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->getBounds()Landroid/graphics/Rect;+]Ljava/util/Optional;Ljava/util/Optional;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
+HPLcom/android/server/wm/ActivityRecord;->getCameraCompatControlState()I
 HPLcom/android/server/wm/ActivityRecord;->getCompatDisplayInsets()Lcom/android/server/wm/ActivityRecord$CompatDisplayInsets;+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
-HSPLcom/android/server/wm/ActivityRecord;->getDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
-HSPLcom/android/server/wm/ActivityRecord;->getDisplayId()I
-HSPLcom/android/server/wm/ActivityRecord;->getInputApplicationHandle(Z)Landroid/view/InputApplicationHandle;+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/ActivityRecord;->getLetterboxInnerBounds(Landroid/graphics/Rect;)V
-HSPLcom/android/server/wm/ActivityRecord;->getLocusId()Landroid/content/LocusId;
-HSPLcom/android/server/wm/ActivityRecord;->getMinAspectRatio()F
-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;
-HSPLcom/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;
-HSPLcom/android/server/wm/ActivityRecord;->getOverrideOrientation()I+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
-HSPLcom/android/server/wm/ActivityRecord;->getRequestedConfigurationOrientation(Z)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;->getTask()Lcom/android/server/wm/Task;
-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;
-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;->handleAlreadyVisible()V
-HSPLcom/android/server/wm/ActivityRecord;->handleCompleteDeferredRemoval()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/ActivityRecord;->hasOverlayOverUntrustedModeEmbedded()Z
-HSPLcom/android/server/wm/ActivityRecord;->hasProcess()Z
-HSPLcom/android/server/wm/ActivityRecord;->hasSizeCompatBounds()Z
+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
+HPLcom/android/server/wm/ActivityRecord;->getInputApplicationHandle(Z)Landroid/view/InputApplicationHandle;+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->getLastParentBeforePip()Lcom/android/server/wm/Task;
+HPLcom/android/server/wm/ActivityRecord;->getLetterboxInnerBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/ActivityRecord;->getLocusId()Landroid/content/LocusId;
+HPLcom/android/server/wm/ActivityRecord;->getMaxAspectRatio()F
+HPLcom/android/server/wm/ActivityRecord;->getMinAspectRatio()F
+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;+]Lcom/android/server/wm/TaskFragment;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;->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;->getOrientationForReachability()I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
+HPLcom/android/server/wm/ActivityRecord;->getOverrideOrientation()I+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
+HPLcom/android/server/wm/ActivityRecord;->getRequestedConfigurationOrientation(Z)I+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->getRequestedConfigurationOrientation(ZI)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/RootDisplayArea;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+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;->getTask()Lcom/android/server/wm/Task;
+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;
+HPLcom/android/server/wm/ActivityRecord;->getTopFullscreenOpaqueWindow()Lcom/android/server/wm/WindowState;
+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;->handleAlreadyVisible()V
+HPLcom/android/server/wm/ActivityRecord;->handleCompleteDeferredRemoval()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->hasOverlayOverUntrustedModeEmbedded()Z
+HPLcom/android/server/wm/ActivityRecord;->hasProcess()Z
+HPLcom/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;->hasWallpaperBackgroundForLetterbox()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;]Lcom/android/server/wm/WindowToken;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;->isEligibleForLetterboxEducation()Z+]Lcom/android/server/wm/LetterboxConfiguration;Lcom/android/server/wm/LetterboxConfiguration;
-HSPLcom/android/server/wm/ActivityRecord;->isEmbeddedInUntrustedMode()Z
-HSPLcom/android/server/wm/ActivityRecord;->isFocusable()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+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;]Lcom/android/server/wm/WindowToken;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;->isDisplaySleepingAndSwapping()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
+HPLcom/android/server/wm/ActivityRecord;->isFocusable()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->isFreezingScreen()Z
 HPLcom/android/server/wm/ActivityRecord;->isFullyTransparentBarAllowed(Landroid/graphics/Rect;)Z
-HSPLcom/android/server/wm/ActivityRecord;->isInRootTaskLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/ActivityRecord;->isInTransition()Z
-HSPLcom/android/server/wm/ActivityRecord;->isLetterboxedForFixedOrientationAndAspectRatio()Z
-HSPLcom/android/server/wm/ActivityRecord;->isRelaunching()Z
-HSPLcom/android/server/wm/ActivityRecord;->isReportedDrawn()Z
-HSPLcom/android/server/wm/ActivityRecord;->isResizeable(Z)Z
-HSPLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityRecord$State;)Z
-HSPLcom/android/server/wm/ActivityRecord;->isSyncFinished()Z
-HSPLcom/android/server/wm/ActivityRecord;->isVisible()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;
-HPLcom/android/server/wm/ActivityRecord;->lambda$getBounds$22(Landroid/graphics/Rect;)Landroid/graphics/Rect;
-HSPLcom/android/server/wm/ActivityRecord;->layoutLetterbox(Lcom/android/server/wm/WindowState;)V
-HSPLcom/android/server/wm/ActivityRecord;->makeActiveIfNeeded(Lcom/android/server/wm/ActivityRecord;)Z
-HSPLcom/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;
-HSPLcom/android/server/wm/ActivityRecord;->needsZBoost()Z
-HSPLcom/android/server/wm/ActivityRecord;->occludesParent()Z
-HSPLcom/android/server/wm/ActivityRecord;->occludesParent(Z)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/ActivityRecord;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLcom/android/server/wm/ActivityRecord;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HSPLcom/android/server/wm/ActivityRecord;->onFirstWindowDrawn(Lcom/android/server/wm/WindowState;)V
-HSPLcom/android/server/wm/ActivityRecord;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
+HPLcom/android/server/wm/ActivityRecord;->isInLetterboxAnimation()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;
+HPLcom/android/server/wm/ActivityRecord;->isInTransition()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->isLetterboxedForFixedOrientationAndAspectRatio()Z
+HPLcom/android/server/wm/ActivityRecord;->isNoHistory()Z
+HPLcom/android/server/wm/ActivityRecord;->isProcessRunning()Z
+HPLcom/android/server/wm/ActivityRecord;->isRelaunching()Z
+HPLcom/android/server/wm/ActivityRecord;->isReportedDrawn()Z
+HPLcom/android/server/wm/ActivityRecord;->isResizeable()Z
+HPLcom/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;
+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
+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
+HPLcom/android/server/wm/ActivityRecord;->isSyncFinished(Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/UnknownAppVisibilityController;Lcom/android/server/wm/UnknownAppVisibilityController;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HPLcom/android/server/wm/ActivityRecord;->isTaskOverlay()Z
+HPLcom/android/server/wm/ActivityRecord;->isUid(I)Z
+HPLcom/android/server/wm/ActivityRecord;->isVisible()Z
+HPLcom/android/server/wm/ActivityRecord;->isWaitingForTransitionStart()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/wm/ActivityRecord;->lambda$getBounds$21(Landroid/graphics/Rect;)Landroid/graphics/Rect;
+HPLcom/android/server/wm/ActivityRecord;->layoutLetterbox(Lcom/android/server/wm/WindowState;)V
+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;
+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;->needsZBoost()Z
+HPLcom/android/server/wm/ActivityRecord;->notifyAppResumed()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;
+HPLcom/android/server/wm/ActivityRecord;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/ActivityRecord;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HPLcom/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;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
 HPLcom/android/server/wm/ActivityRecord;->onRemovedFromDisplay()V
-HSPLcom/android/server/wm/ActivityRecord;->onWindowsDrawn()V
+HPLcom/android/server/wm/ActivityRecord;->onWindowsDrawn()V
 HPLcom/android/server/wm/ActivityRecord;->onWindowsVisible()V
+HPLcom/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;->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;
-HSPLcom/android/server/wm/ActivityRecord;->providesOrientation()Z
-HSPLcom/android/server/wm/ActivityRecord;->removeLaunchTickRunnable()V
-HSPLcom/android/server/wm/ActivityRecord;->removeStartingWindow()V
-HSPLcom/android/server/wm/ActivityRecord;->removeStartingWindowAnimation(Z)V
-HSPLcom/android/server/wm/ActivityRecord;->requestUpdateWallpaperIfNeeded()V
-HSPLcom/android/server/wm/ActivityRecord;->resolveAspectRatioRestriction(Landroid/content/res/Configuration;)V
-HSPLcom/android/server/wm/ActivityRecord;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
-HSPLcom/android/server/wm/ActivityRecord;->scheduleTopResumedActivityChanged(Z)Z
-HSPLcom/android/server/wm/ActivityRecord;->setState(Lcom/android/server/wm/ActivityRecord$State;Ljava/lang/String;)V
-HSPLcom/android/server/wm/ActivityRecord;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V
-HSPLcom/android/server/wm/ActivityRecord;->setVisibility(Z)V
-HSPLcom/android/server/wm/ActivityRecord;->setVisibility(ZZ)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;
+HPLcom/android/server/wm/ActivityRecord;->providesMaxBounds()Z
+HPLcom/android/server/wm/ActivityRecord;->providesOrientation()Z
+HPLcom/android/server/wm/ActivityRecord;->removeFromHistory(Ljava/lang/String;)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;->removeStartingWindow()V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->removeStartingWindowAnimation(Z)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/StartingData;Lcom/android/server/wm/SnapshotStartingData;,Lcom/android/server/wm/SplashScreenStartingData;]Lcom/android/server/wm/StartingSurfaceController$StartingSurface;Lcom/android/server/wm/StartingSurfaceController$StartingSurface;
+HPLcom/android/server/wm/ActivityRecord;->removeStopTimeout()V
+HPLcom/android/server/wm/ActivityRecord;->removeTimeouts()V
+HPLcom/android/server/wm/ActivityRecord;->requestUpdateWallpaperIfNeeded()V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HPLcom/android/server/wm/ActivityRecord;->resolveAspectRatioRestriction(Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/ActivityRecord;->resolveFixedOrientationConfiguration(Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/ActivityRecord;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/ActivityRecord;->resumeKeyDispatchingLocked()V
+HPLcom/android/server/wm/ActivityRecord;->schedulePauseTimeout()V
+HPLcom/android/server/wm/ActivityRecord;->scheduleTopResumedActivityChanged(Z)Z
+HPLcom/android/server/wm/ActivityRecord;->setActivityType(ZILandroid/content/Intent;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;)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/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Ljava/lang/Enum;Lcom/android/server/wm/ActivityRecord$State;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/contentcapture/ContentCaptureManagerInternal;Lcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)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
-HSPLcom/android/server/wm/ActivityRecord;->setVisibleRequested(Z)Z
-HSPLcom/android/server/wm/ActivityRecord;->shouldBeResumed(Lcom/android/server/wm/ActivityRecord;)Z
-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
-HSPLcom/android/server/wm/ActivityRecord;->shouldIgnoreOrientationRequests()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/ActivityRecord;->shouldMakeActive(Lcom/android/server/wm/ActivityRecord;)Z
-HSPLcom/android/server/wm/ActivityRecord;->shouldPauseActivity(Lcom/android/server/wm/ActivityRecord;)Z
-HSPLcom/android/server/wm/ActivityRecord;->shouldResumeActivity(Lcom/android/server/wm/ActivityRecord;)Z
-HSPLcom/android/server/wm/ActivityRecord;->shouldStartActivity()Z
-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;->showToCurrentUser()Z+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
-HSPLcom/android/server/wm/ActivityRecord;->stopFreezingScreenLocked(Z)V
-HSPLcom/android/server/wm/ActivityRecord;->stopIfPossible()V
-HSPLcom/android/server/wm/ActivityRecord;->toString()Ljava/lang/String;
+HPLcom/android/server/wm/ActivityRecord;->setVisibleRequested(Z)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/InputTarget;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->shouldBeResumed(Lcom/android/server/wm/ActivityRecord;)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+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]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;->shouldIgnoreOrientationRequests()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+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
+HPLcom/android/server/wm/ActivityRecord;->shouldResumeActivity(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/ActivityRecord;->shouldStartActivity()Z
+HPLcom/android/server/wm/ActivityRecord;->showStartingWindow(Lcom/android/server/wm/ActivityRecord;ZZZZLcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)V
+HPLcom/android/server/wm/ActivityRecord;->showToCurrentUser()Z+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
+HPLcom/android/server/wm/ActivityRecord;->startLaunchTickingLocked()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;
+HPLcom/android/server/wm/ActivityRecord;->stopIfPossible()V
+HPLcom/android/server/wm/ActivityRecord;->supportsPictureInPicture()Z
+HPLcom/android/server/wm/ActivityRecord;->supportsSizeChanges()I+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
+HPLcom/android/server/wm/ActivityRecord;->toString()Ljava/lang/String;
+HPLcom/android/server/wm/ActivityRecord;->transferSplashScreenIfNeeded()Z
+HPLcom/android/server/wm/ActivityRecord;->transferStartingWindowFromHiddenAboveTokenIfNeeded()V
 HPLcom/android/server/wm/ActivityRecord;->updateAllDrawn()V
-HSPLcom/android/server/wm/ActivityRecord;->updateCompatDisplayInsets()V
-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;->updateLetterboxSurface(Lcom/android/server/wm/WindowState;)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;->updateVisibilityIgnoringKeyguard(Z)V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->updateCompatDisplayInsets()V+]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
+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;->updateResolvedBoundsPosition(Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/ActivityRecord;->updateVisibilityIgnoringKeyguard(Z)V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->updateVisibleForServiceConnection()V
-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;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HSPLcom/android/server/wm/ActivityRecordInputSink;-><init>(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)V
+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;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+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;->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;
 HSPLcom/android/server/wm/ActivityStartController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
 HSPLcom/android/server/wm/ActivityStartController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityStarter$Factory;)V
+HPLcom/android/server/wm/ActivityStartController;->startExistingRecents(Landroid/content/Intent;Landroid/app/ActivityOptions;)Z
 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
-HSPLcom/android/server/wm/ActivityStartInterceptor;->getInterceptorInfo(Ljava/lang/Runnable;)Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;
-HSPLcom/android/server/wm/ActivityStartInterceptor;->intercept(Landroid/content/Intent;Landroid/content/pm/ResolveInfo;Landroid/content/pm/ActivityInfo;Ljava/lang/String;Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskFragment;IILandroid/app/ActivityOptions;)Z
+HPLcom/android/server/wm/ActivityStartInterceptor;->getInterceptorInfo(Ljava/lang/Runnable;)Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;
+HPLcom/android/server/wm/ActivityStartInterceptor;->intercept(Landroid/content/Intent;Landroid/content/pm/ResolveInfo;Landroid/content/pm/ActivityInfo;Ljava/lang/String;Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskFragment;IILandroid/app/ActivityOptions;)Z
+HPLcom/android/server/wm/ActivityStartInterceptor;->interceptLockTaskModeViolationPackageIfNeeded()Z
+HPLcom/android/server/wm/ActivityStartInterceptor;->onActivityLaunched(Landroid/app/TaskInfo;Lcom/android/server/wm/ActivityRecord;)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;->setController(Lcom/android/server/wm/ActivityStartController;)V
-HSPLcom/android/server/wm/ActivityStarter$Request;->reset()V
+HPLcom/android/server/wm/ActivityStarter$Request;->reset()V
 HPLcom/android/server/wm/ActivityStarter$Request;->resolveActivity(Lcom/android/server/wm/ActivityTaskSupervisor;)V
-HSPLcom/android/server/wm/ActivityStarter$Request;->set(Lcom/android/server/wm/ActivityStarter$Request;)V
-HSPLcom/android/server/wm/ActivityStarter;->execute()I
-HSPLcom/android/server/wm/ActivityStarter;->executeRequest(Lcom/android/server/wm/ActivityStarter$Request;)I
-HSPLcom/android/server/wm/ActivityStarter;->isAllowedToStart(Lcom/android/server/wm/ActivityRecord;ZLcom/android/server/wm/Task;)I
-HSPLcom/android/server/wm/ActivityStarter;->reset(Z)V
-HSPLcom/android/server/wm/ActivityStarter;->set(Lcom/android/server/wm/ActivityStarter;)V
+HPLcom/android/server/wm/ActivityStarter$Request;->set(Lcom/android/server/wm/ActivityStarter$Request;)V
+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
+HPLcom/android/server/wm/ActivityStarter;->execute()I
+HPLcom/android/server/wm/ActivityStarter;->executeRequest(Lcom/android/server/wm/ActivityStarter$Request;)I
+HPLcom/android/server/wm/ActivityStarter;->getReusableTask()Lcom/android/server/wm/Task;
+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
+HPLcom/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
+HPLcom/android/server/wm/ActivityStarter;->reset(Z)V
+HPLcom/android/server/wm/ActivityStarter;->set(Lcom/android/server/wm/ActivityStarter;)V
 HPLcom/android/server/wm/ActivityStarter;->setInitialState(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskFragment;ILcom/android/server/wm/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;II)V
 HPLcom/android/server/wm/ActivityStarter;->setTargetRootTaskIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
 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;ILandroid/app/ActivityOptions;Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskFragment;ILcom/android/server/uri/NeededUriGrants;I)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;ILandroid/app/ActivityOptions;Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskFragment;ILcom/android/server/uri/NeededUriGrants;I)I
 HSPLcom/android/server/wm/ActivityTaskManagerInternal;-><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
-HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda10;->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$1;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$H;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/os/Looper;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
@@ -10604,6 +11044,7 @@
 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
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->clearHeavyWeightProcessIfEquals(Lcom/android/server/wm/WindowProcessController;)V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->closeSystemDialogs(Ljava/lang/String;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->compatibilityInfoForPackage(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/CompatibilityInfo;
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTaskToShowPermissionDialogOn(Ljava/lang/String;I)I
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTopApp()Lcom/android/server/wm/WindowProcessController;
@@ -10611,18 +11052,21 @@
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->handleAppDied(Lcom/android/server/wm/WindowProcessController;ZLjava/lang/Runnable;)V
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->hasSystemAlertWindowPermission(IILjava/lang/String;)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isCallerRecents(I)Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
-HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isGetTasksAllowed(Ljava/lang/String;II)Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isGetTasksAllowed(Ljava/lang/String;II)Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
 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;->onCleanUpApplicationRecord(Lcom/android/server/wm/WindowProcessController;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onProcessAdded(Lcom/android/server/wm/WindowProcessController;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onProcessMapped(ILcom/android/server/wm/WindowProcessController;)V
-HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onProcessRemoved(Ljava/lang/String;I)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onProcessRemoved(Ljava/lang/String;I)V+]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onProcessUnMapped(I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onUidActive(II)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onUidInactive(I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->preBindApplication(Lcom/android/server/wm/WindowProcessController;)V
-HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->useTopSchedGroupForTopProcess()Z
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->useTopSchedGroupForTopProcess()Z
 HSPLcom/android/server/wm/ActivityTaskManagerService$SleepTokenAcquirerImpl;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Ljava/lang/String;)V
+HPLcom/android/server/wm/ActivityTaskManagerService$SleepTokenAcquirerImpl;->acquire(IZ)V
+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
 HSPLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fgetmRetainPowerModeAndTopProcessState(Lcom/android/server/wm/ActivityTaskManagerService;)Z
@@ -10634,129 +11078,188 @@
 HPLcom/android/server/wm/ActivityTaskManagerService;->checkCanCloseSystemDialogs(IILjava/lang/String;)Z
 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;->continueWindowLayout()V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->compatibilityInfoForPackageLocked(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/CompatibilityInfo;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->continueWindowLayout()V+]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
 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
+HSPLcom/android/server/wm/ActivityTaskManagerService;->deferWindowLayout()V+]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
+HPLcom/android/server/wm/ActivityTaskManagerService;->endLaunchPowerMode(I)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
 HPLcom/android/server/wm/ActivityTaskManagerService;->getAppOpsManager()Landroid/app/AppOpsManager;
-HSPLcom/android/server/wm/ActivityTaskManagerService;->getBackgroundActivityStartCallback()Lcom/android/server/wm/BackgroundActivityStartCallback;
 HPLcom/android/server/wm/ActivityTaskManagerService;->getFocusedRootTaskInfo()Landroid/app/ActivityTaskManager$RootTaskInfo;
-HSPLcom/android/server/wm/ActivityTaskManagerService;->getGlobalConfiguration()Landroid/content/res/Configuration;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getGlobalConfiguration()Landroid/content/res/Configuration;+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/RootWindowContainer;
 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;
 HPLcom/android/server/wm/ActivityTaskManagerService;->getLastResumedActivityUserId()I
 HPLcom/android/server/wm/ActivityTaskManagerService;->getLastStopAppSwitchesTime()J
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getLifecycleManager()Lcom/android/server/wm/ClientLifecycleManager;
-HSPLcom/android/server/wm/ActivityTaskManagerService;->getPackageManagerInternalLocked()Landroid/content/pm/PackageManagerInternal;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getLockTaskController()Lcom/android/server/wm/LockTaskController;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getPermissionPolicyInternal()Lcom/android/server/policy/PermissionPolicyInternal;
-HPLcom/android/server/wm/ActivityTaskManagerService;->getProcessController(Landroid/app/IApplicationThread;)Lcom/android/server/wm/WindowProcessController;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getProcessController(II)Lcom/android/server/wm/WindowProcessController;
+HPLcom/android/server/wm/ActivityTaskManagerService;->getProcessController(Landroid/app/IApplicationThread;)Lcom/android/server/wm/WindowProcessController;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Landroid/app/IApplicationThread;Landroid/app/ActivityThread$ApplicationThread;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getRecentTasks()Lcom/android/server/wm/RecentTasks;
+HPLcom/android/server/wm/ActivityTaskManagerService;->getRecentTasks(III)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getRootTaskInfo(II)Landroid/app/ActivityTaskManager$RootTaskInfo;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getSysUiServiceComponentLocked()Landroid/content/ComponentName;
 HPLcom/android/server/wm/ActivityTaskManagerService;->getTaskBounds(I)Landroid/graphics/Rect;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getTaskChangeNotificationController()Lcom/android/server/wm/TaskChangeNotificationController;
+HPLcom/android/server/wm/ActivityTaskManagerService;->getTaskSnapshot(IZZ)Landroid/window/TaskSnapshot;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getTasks(IZZI)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;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getUserManager()Lcom/android/server/pm/UserManagerService;
 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
+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
+HSPLcom/android/server/wm/ActivityTaskManagerService;->isBooted()Z
+HSPLcom/android/server/wm/ActivityTaskManagerService;->isBooting()Z
 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
 HSPLcom/android/server/wm/ActivityTaskManagerService;->isCrossUserAllowed(II)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->isGetTasksAllowed(Ljava/lang/String;II)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->isSleepingLocked()Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->onActivityManagerInternalAdded()V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->onInitPowerManagement()V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/server/wm/ActivityTaskManagerService;->setLastResumedActivityUncheckLocked(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;)V
-HSPLcom/android/server/wm/ActivityTaskManagerService;->setLockScreenShown(ZZ)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->reportAssistContextExtras(Landroid/os/IBinder;Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;Landroid/net/Uri;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->resumeAppSwitches()V
+HPLcom/android/server/wm/ActivityTaskManagerService;->scheduleAppGcsLocked()V
+HPLcom/android/server/wm/ActivityTaskManagerService;->setLastResumedActivityUncheckLocked(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->setLockScreenShown(ZZ)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->setRecentTasks(Lcom/android/server/wm/RecentTasks;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->start()V
 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
-HSPLcom/android/server/wm/ActivityTaskManagerService;->updateActivityUsageStats(Lcom/android/server/wm/ActivityRecord;I)V
-HSPLcom/android/server/wm/ActivityTaskManagerService;->updateBatteryStats(Lcom/android/server/wm/ActivityRecord;Z)V
-HSPLcom/android/server/wm/ActivityTaskManagerService;->updateGlobalConfigurationLocked(Landroid/content/res/Configuration;ZZI)I
+HPLcom/android/server/wm/ActivityTaskManagerService;->updateActivityUsageStats(Lcom/android/server/wm/ActivityRecord;I)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->updateBatteryStats(Lcom/android/server/wm/ActivityRecord;Z)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->updateCpuStats()V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->updateGlobalConfigurationLocked(Landroid/content/res/Configuration;ZZI)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;]Landroid/os/Handler;Lcom/android/server/wm/ActivityTaskManagerService$H;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/util/SparseArray;Landroid/util/SparseArray;]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;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Lcom/android/internal/policy/AttributeCache;Lcom/android/internal/policy/AttributeCache;]Landroid/os/LocaleList;Landroid/os/LocaleList;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Lcom/android/server/wm/WindowProcessControllerMap;Lcom/android/server/wm/WindowProcessControllerMap;
+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;->updateSleepIfNeededLocked()V
-HSPLcom/android/server/wm/ActivityTaskManagerService;->updateTopApp(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->updateTopApp(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/ActivityTaskSupervisor$ActivityTaskSupervisorHandler;-><init>(Lcom/android/server/wm/ActivityTaskSupervisor;Landroid/os/Looper;)V
 HSPLcom/android/server/wm/ActivityTaskSupervisor$ActivityTaskSupervisorHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/wm/ActivityTaskSupervisor$ActivityTaskSupervisorHandler;->handleMessageInner(Landroid/os/Message;)Z
+HSPLcom/android/server/wm/ActivityTaskSupervisor$OpaqueActivityHelper;-><init>()V
+HPLcom/android/server/wm/ActivityTaskSupervisor$OpaqueActivityHelper;->getVisibleOpaqueActivity(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
+HPLcom/android/server/wm/ActivityTaskSupervisor$OpaqueActivityHelper;->test(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityTaskSupervisor$OpaqueActivityHelper;->test(Ljava/lang/Object;)Z+]Lcom/android/server/wm/ActivityTaskSupervisor$OpaqueActivityHelper;Lcom/android/server/wm/ActivityTaskSupervisor$OpaqueActivityHelper;
 HSPLcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;-><init>()V
-HSPLcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;->accept(Lcom/android/server/wm/ActivityRecord;)V+]Landroid/app/TaskInfo;Landroid/app/ActivityManager$RecentTaskInfo;,Landroid/app/ActivityTaskManager$RootTaskInfo;,Landroid/app/ActivityManager$RunningTaskInfo;
-HSPLcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;->accept(Ljava/lang/Object;)V+]Lcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;Lcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;
+HPLcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;->accept(Lcom/android/server/wm/ActivityRecord;)V+]Landroid/app/TaskInfo;Landroid/app/ActivityManager$RecentTaskInfo;,Landroid/app/ActivityManager$RunningTaskInfo;,Landroid/app/ActivityTaskManager$RootTaskInfo;
+HPLcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;->accept(Ljava/lang/Object;)V+]Lcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;Lcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;
 HSPLcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;->fillAndReturnTop(Lcom/android/server/wm/Task;Landroid/app/TaskInfo;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/ActivityTaskSupervisor;-><clinit>()V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/os/Looper;)V
-HSPLcom/android/server/wm/ActivityTaskSupervisor;->activityIdleInternal(Lcom/android/server/wm/ActivityRecord;ZZLandroid/content/res/Configuration;)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;->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;->checkReadyForSleepLocked(Z)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->beginDeferResume()V
+HPLcom/android/server/wm/ActivityTaskSupervisor;->checkReadyForSleepLocked(Z)V
+HPLcom/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
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->computeProcessActivityStateBatch()V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->endActivityVisibilityUpdate()V+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->endDeferResume()V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->getActivityMetricsLogger()Lcom/android/server/wm/ActivityMetricsLogger;
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->getKeyguardController()Lcom/android/server/wm/KeyguardController;
+HPLcom/android/server/wm/ActivityTaskSupervisor;->handleTopResumedStateReleased(Z)V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->inActivityVisibilityUpdate()Z
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->initPowerManagement()V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->initialize()V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->isRootVisibilityUpdateDeferred()Z
-HSPLcom/android/server/wm/ActivityTaskSupervisor;->onProcessActivityStateChanged(Lcom/android/server/wm/WindowProcessController;Z)V
-HSPLcom/android/server/wm/ActivityTaskSupervisor;->processStoppingAndFinishingActivities(Lcom/android/server/wm/ActivityRecord;ZLjava/lang/String;)V
-HSPLcom/android/server/wm/ActivityTaskSupervisor;->realStartActivityLocked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowProcessController;ZZ)Z
+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;
+HPLcom/android/server/wm/ActivityTaskSupervisor;->processStoppingAndFinishingActivities(Lcom/android/server/wm/ActivityRecord;ZLjava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]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;]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;->removeHistoryRecords(Lcom/android/server/wm/WindowProcessController;)V
-HSPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleProcessStoppingAndFinishingActivitiesIfNeeded()V
+HPLcom/android/server/wm/ActivityTaskSupervisor;->reportResumedActivityLocked(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/ActivityTaskSupervisor;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;IIII)Landroid/content/pm/ResolveInfo;
+HPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleIdle()V
+HPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleIdleTimeout(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleProcessStoppingAndFinishingActivitiesIfNeeded()V
+HPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleTopResumedActivityStateIfNeeded()V
+HPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleTopResumedStateLossTimeout(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityTaskSupervisor;->setLaunchSource(I)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
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->updateTopResumedActivityIfNeeded(Ljava/lang/String;)V
 HPLcom/android/server/wm/AnrController;->onFocusChanged(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/AppSnapshotLoader;->loadTask(IIZ)Landroid/window/TaskSnapshot;
+HPLcom/android/server/wm/AppTaskImpl;->getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo;
+HSPLcom/android/server/wm/AppTransition$$ExternalSyntheticLambda2;-><init>()V
 HSPLcom/android/server/wm/AppTransition$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;Ljava/lang/Object;)Z+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/AppTransition;->isReady()Z
 HSPLcom/android/server/wm/AppTransition;->isRunning()Z
-HSPLcom/android/server/wm/AppTransition;->isTransitionSet()Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/wm/AppWarnings$ConfigHandler;-><init>(Lcom/android/server/wm/AppWarnings;Landroid/os/Looper;)V
+HPLcom/android/server/wm/AppTransition;->isTransitionSet()Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/wm/AppTransition;->loadAnimationAttr(Landroid/view/WindowManager$LayoutParams;II)Landroid/view/animation/Animation;
+HPLcom/android/server/wm/AppTransition;->prepareAppTransition(II)Z
 HSPLcom/android/server/wm/AppWarnings$UiHandler;-><init>(Lcom/android/server/wm/AppWarnings;Landroid/os/Looper;)V
 HSPLcom/android/server/wm/AppWarnings;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/content/Context;Landroid/os/Handler;Landroid/os/Handler;Ljava/io/File;)V
 HSPLcom/android/server/wm/AppWarnings;->readConfigFromFileAmsThread()V
-HSPLcom/android/server/wm/BLASTSyncEngine$SyncGroup$1CommitCallback;->onCommitted()V
+HPLcom/android/server/wm/AppWarnings;->showDeprecatedAbiDialogIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/AppWarnings;->showUnsupportedDisplaySizeDialogIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/BLASTSyncEngine$SyncGroup$1CommitCallback;-><init>(Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;Landroid/util/ArraySet;Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/BLASTSyncEngine$SyncGroup$1CommitCallback;->onCommitted(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/os/Handler;Lcom/android/server/wm/WindowManagerService$H;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/wm/BLASTSyncEngine$SyncGroup;->-$$Nest$mtryFinish(Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;)Z
+HSPLcom/android/server/wm/BLASTSyncEngine$SyncGroup;-><init>(Lcom/android/server/wm/BLASTSyncEngine;Lcom/android/server/wm/BLASTSyncEngine$TransactionReadyListener;ILjava/lang/String;)V
 HSPLcom/android/server/wm/BLASTSyncEngine$SyncGroup;->addToSync(Lcom/android/server/wm/WindowContainer;)V
-HSPLcom/android/server/wm/BLASTSyncEngine$SyncGroup;->finishNow()V
-HSPLcom/android/server/wm/BLASTSyncEngine$SyncGroup;->onSurfacePlacement()V
-HSPLcom/android/server/wm/BLASTSyncEngine$SyncGroup;->setReady(Z)V
-HSPLcom/android/server/wm/BLASTSyncEngine;->getSyncGroup(I)Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;
-HSPLcom/android/server/wm/BLASTSyncEngine;->onSurfacePlacement()V
-HSPLcom/android/server/wm/BackNavigationController$NavigationMonitor;-><init>()V
-HSPLcom/android/server/wm/BackNavigationController$NavigationMonitor;-><init>(Lcom/android/server/wm/BackNavigationController$NavigationMonitor-IA;)V
+HSPLcom/android/server/wm/BLASTSyncEngine$SyncGroup;->finishNow()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/os/Handler;Lcom/android/server/wm/WindowManagerService$H;]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda21;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/BLASTSyncEngine$TransactionReadyListener;Lcom/android/server/wm/Transition;,Lcom/android/server/wm/WindowOrganizerController;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Runnable;Lcom/android/server/wm/TransitionController$$ExternalSyntheticLambda2;
+HSPLcom/android/server/wm/BLASTSyncEngine$SyncGroup;->setReady(Z)Z
+HSPLcom/android/server/wm/BLASTSyncEngine$SyncGroup;->tryFinish()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/BLASTSyncEngine;->getSyncSet(I)Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/BLASTSyncEngine;->onSurfacePlacement()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/BLASTSyncEngine;->prepareSyncSet(Lcom/android/server/wm/BLASTSyncEngine$TransactionReadyListener;Ljava/lang/String;)Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;
+HSPLcom/android/server/wm/BLASTSyncEngine;->setReady(IZ)Z
+HPLcom/android/server/wm/BLASTSyncEngine;->setSyncMethod(II)V
+HSPLcom/android/server/wm/BLASTSyncEngine;->startSyncSet(Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;JZ)V
+HPLcom/android/server/wm/BackNavigationController$AnimationHandler;->-$$Nest$fgetmComposed(Lcom/android/server/wm/BackNavigationController$AnimationHandler;)Z
+HSPLcom/android/server/wm/BackNavigationController$NavigationMonitor;-><init>(Lcom/android/server/wm/BackNavigationController;)V
+HSPLcom/android/server/wm/BackNavigationController$NavigationMonitor;-><init>(Lcom/android/server/wm/BackNavigationController;Lcom/android/server/wm/BackNavigationController$NavigationMonitor-IA;)V
+HPLcom/android/server/wm/BackNavigationController$NavigationMonitor;->atSameDisplay(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/BackNavigationController$NavigationMonitor;->isMonitorAnimationOrTransition()Z
+HPLcom/android/server/wm/BackNavigationController$NavigationMonitor;->isMonitorForRemote()Z
+HPLcom/android/server/wm/BackNavigationController$NavigationMonitor;->onFocusWindowChanged(Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/BackNavigationController;-><clinit>()V
 HSPLcom/android/server/wm/BackNavigationController;-><init>()V
-HSPLcom/android/server/wm/BackNavigationController;->checkAnimationReady(Lcom/android/server/wm/WallpaperController;)V+]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/BackNavigationController;Lcom/android/server/wm/BackNavigationController;
+HSPLcom/android/server/wm/BackNavigationController;->checkAnimationReady(Lcom/android/server/wm/WallpaperController;)V+]Lcom/android/server/wm/BackNavigationController;Lcom/android/server/wm/BackNavigationController;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;
+HPLcom/android/server/wm/BackNavigationController;->isMonitoringTransition()Z
+HPLcom/android/server/wm/BackNavigationController;->isWallpaperVisible(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/BackNavigationController$AnimationHandler;Lcom/android/server/wm/BackNavigationController$AnimationHandler;
+HPLcom/android/server/wm/BackNavigationController;->onBackNavigationDone(Landroid/os/Bundle;I)V
 HPLcom/android/server/wm/BackNavigationController;->startBackNavigation(Landroid/os/RemoteCallback;Landroid/window/BackAnimationAdapter;)Landroid/window/BackNavigationInfo;
 HSPLcom/android/server/wm/BackgroundActivityStartController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskSupervisor;)V
+HPLcom/android/server/wm/BackgroundActivityStartController;->checkBackgroundActivityStart(IILjava/lang/String;IILcom/android/server/wm/WindowProcessController;Lcom/android/server/am/PendingIntentRecord;Landroid/app/BackgroundStartPrivileges;Landroid/content/Intent;Landroid/app/ActivityOptions;)I
 HPLcom/android/server/wm/BackgroundActivityStartController;->logStartAllowedAndReturnCode(IZIILandroid/content/Intent;ILjava/lang/String;)I
 HPLcom/android/server/wm/BackgroundActivityStartController;->logStartAllowedAndReturnCode(IZIILandroid/content/Intent;Ljava/lang/String;)I
+HPLcom/android/server/wm/BackgroundActivityStartController;->logStartAllowedAndReturnCode(IZIILandroid/content/Intent;Ljava/lang/String;Ljava/lang/String;)I
 HPLcom/android/server/wm/BackgroundActivityStartController;->statsLogBalAllowed(IIILandroid/content/Intent;)V
 HSPLcom/android/server/wm/BackgroundLaunchProcessController;-><init>(Ljava/util/function/IntPredicate;Lcom/android/server/wm/BackgroundActivityStartCallback;)V
 HSPLcom/android/server/wm/BackgroundLaunchProcessController;->addBoundClientUid(ILjava/lang/String;J)V+]Landroid/util/IntArray;Landroid/util/IntArray;
 HPLcom/android/server/wm/BackgroundLaunchProcessController;->areBackgroundActivityStartsAllowed(IILjava/lang/String;IZZZJJJ)I+]Lcom/android/server/wm/BackgroundLaunchProcessController;Lcom/android/server/wm/BackgroundLaunchProcessController;
 HSPLcom/android/server/wm/BackgroundLaunchProcessController;->clearBalOptInBoundClientUids()V+]Landroid/util/IntArray;Landroid/util/IntArray;
-HPLcom/android/server/wm/BackgroundLaunchProcessController;->isBackgroundStartAllowedByToken(ILjava/lang/String;Z)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/BackgroundStartPrivileges;Landroid/app/BackgroundStartPrivileges;]Lcom/android/server/wm/BackgroundLaunchProcessController;Lcom/android/server/wm/BackgroundLaunchProcessController;]Lcom/android/server/wm/BackgroundActivityStartCallback;Lcom/android/server/notification/NotificationManagerService$NotificationTrampolineCallback;
+HPLcom/android/server/wm/BackgroundLaunchProcessController;->isBackgroundStartAllowedByToken(ILjava/lang/String;Z)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/BackgroundStartPrivileges;Landroid/app/BackgroundStartPrivileges;]Lcom/android/server/wm/BackgroundLaunchProcessController;Lcom/android/server/wm/BackgroundLaunchProcessController;]Ljava/util/List;Ljava/util/ArrayList;]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$$ExternalSyntheticLambda3;
 HSPLcom/android/server/wm/BackgroundLaunchProcessController;->removeAllowBackgroundStartPrivileges(Landroid/os/Binder;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/wm/ClientLifecycleManager;-><init>()V
-HSPLcom/android/server/wm/ClientLifecycleManager;->scheduleTransaction(Landroid/app/servertransaction/ClientTransaction;)V
+HSPLcom/android/server/wm/ClientLifecycleManager;->scheduleTransaction(Landroid/app/IApplicationThread;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;
 HSPLcom/android/server/wm/CompatModePackages$CompatHandler;-><init>(Lcom/android/server/wm/CompatModePackages;Landroid/os/Looper;)V
 HSPLcom/android/server/wm/CompatModePackages;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Ljava/io/File;Landroid/os/Handler;)V
 HSPLcom/android/server/wm/CompatModePackages;->compatibilityInfoForPackageLocked(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/CompatibilityInfo;
 HSPLcom/android/server/wm/CompatModePackages;->getCompatScale(Ljava/lang/String;I)F
+HSPLcom/android/server/wm/CompatModePackages;->getPackageCompatModeEnabledLocked(Landroid/content/pm/ApplicationInfo;)Z
 HSPLcom/android/server/wm/CompatModePackages;->getPackageFlags(Ljava/lang/String;)I
 HSPLcom/android/server/wm/ConfigurationContainer;-><init>()V
 HSPLcom/android/server/wm/ConfigurationContainer;->getActivityType()I+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLcom/android/server/wm/ConfigurationContainer;->getBounds()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;->getBounds(Landroid/graphics/Rect;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayArea$Dimmable;,Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/ConfigurationContainer;->getBounds(Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/ConfigurationContainer;->getConfiguration()Landroid/content/res/Configuration;
 HSPLcom/android/server/wm/ConfigurationContainer;->getMergedOverrideConfiguration()Landroid/content/res/Configuration;
 HSPLcom/android/server/wm/ConfigurationContainer;->getRequestedOverrideBounds()Landroid/graphics/Rect;
 HSPLcom/android/server/wm/ConfigurationContainer;->getRequestedOverrideConfiguration()Landroid/content/res/Configuration;
-HSPLcom/android/server/wm/ConfigurationContainer;->getResolvedOverrideBounds()Landroid/graphics/Rect;
+HPLcom/android/server/wm/ConfigurationContainer;->getResolvedOverrideBounds()Landroid/graphics/Rect;
 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;
@@ -10765,44 +11268,45 @@
 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;
 HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeDream()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeHome()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeHomeOrRecents()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;
+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/WindowState;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;
 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;
-HSPLcom/android/server/wm/ConfigurationContainer;->isCompatible(II)Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
-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$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;
+HPLcom/android/server/wm/ConfigurationContainer;->isCompatible(II)Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ConfigurationContainer;->onConfigurationChanged(Landroid/content/res/Configuration;)V+]Lcom/android/server/wm/ConfigurationContainerListener;megamorphic_types]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;->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/DisplayContent$2;,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;->updateRequestedOverrideConfiguration(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/DesktopModeLaunchParamsModifier;-><clinit>()V
+HPLcom/android/server/wm/DeviceStateController;->shouldReverseRotationDirectionAroundZAxis(Lcom/android/server/wm/DisplayContent;)Z
+HSPLcom/android/server/wm/Dimmer;->getDimBounds()Landroid/graphics/Rect;
 HSPLcom/android/server/wm/Dimmer;->resetDimStates()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;
-HSPLcom/android/server/wm/DisplayArea$Dimmable$$ExternalSyntheticLambda0;-><init>()V
-HSPLcom/android/server/wm/DisplayArea$Dimmable$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
-HSPLcom/android/server/wm/DisplayArea$Dimmable;->$r8$lambda$HtkkoZkIXcEGrDXi5mCl8NOjNNQ(Lcom/android/server/wm/Task;)Z
-HSPLcom/android/server/wm/DisplayArea$Dimmable;->lambda$prepareSurfaces$0(Lcom/android/server/wm/Task;)Z
-HSPLcom/android/server/wm/DisplayArea$Dimmable;->prepareSurfaces()V+]Lcom/android/server/wm/WindowContainer;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;
+HPLcom/android/server/wm/Dimmer;->updateDims(Landroid/view/SurfaceControl$Transaction;)Z
+HSPLcom/android/server/wm/DisplayArea$Dimmable;->prepareSurfaces()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayArea$Dimmable;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/DisplayArea$Dimmable;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayArea$Dimmable;,Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/Dimmer;Lcom/android/server/wm/Dimmer;
 HSPLcom/android/server/wm/DisplayArea$Tokens$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/DisplayArea$Tokens;->$r8$lambda$9xZItjlr3AN0RF_YAgXoSFo2Kd0(Lcom/android/server/wm/DisplayArea$Tokens;Lcom/android/server/wm/WindowState;)Z
+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;
 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;
 HSPLcom/android/server/wm/DisplayArea$Type;->checkChild(Lcom/android/server/wm/DisplayArea$Type;Lcom/android/server/wm/DisplayArea$Type;)V
+HSPLcom/android/server/wm/DisplayArea$Type;->checkSiblings(Lcom/android/server/wm/DisplayArea$Type;Lcom/android/server/wm/DisplayArea$Type;)V
 HSPLcom/android/server/wm/DisplayArea$Type;->typeOf(Lcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/DisplayArea$Type;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/DisplayArea;->asDisplayArea()Lcom/android/server/wm/DisplayArea;
 HSPLcom/android/server/wm/DisplayArea;->fillsParent()Z
-HSPLcom/android/server/wm/DisplayArea;->findPositionForChildDisplayArea(ILcom/android/server/wm/DisplayArea;)I
-HSPLcom/android/server/wm/DisplayArea;->forAllLeafTasks(Ljava/util/function/Predicate;)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+]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;
+HPLcom/android/server/wm/DisplayArea;->findPositionForChildDisplayArea(ILcom/android/server/wm/DisplayArea;)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayArea$Dimmable;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayArea$Dimmable;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HPLcom/android/server/wm/DisplayArea;->forAllLeafTasks(Ljava/util/function/Predicate;)Z
 HPLcom/android/server/wm/DisplayArea;->forAllRootTasks(Ljava/util/function/Predicate;Z)Z
-HSPLcom/android/server/wm/DisplayArea;->forAllTasks(Ljava/util/function/Predicate;)Z
+HPLcom/android/server/wm/DisplayArea;->forAllTaskDisplayAreas(Ljava/util/function/Consumer;Z)V+]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/TaskDisplayArea;,Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/DisplayArea$Dimmable;
+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;->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;->getIgnoreOrientationRequest(I)Z+]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]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/DisplayArea;megamorphic_types
-HSPLcom/android/server/wm/DisplayArea;->getOrientation(I)I+]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayArea$Dimmable;
+HSPLcom/android/server/wm/DisplayArea;->getOrientation(I)I+]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/DisplayArea$Dimmable;
 HSPLcom/android/server/wm/DisplayArea;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
 HSPLcom/android/server/wm/DisplayArea;->getSurfaceControl()Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/DisplayArea;->getSyncTransaction()Landroid/view/SurfaceControl$Transaction;
@@ -10810,72 +11314,76 @@
 HSPLcom/android/server/wm/DisplayArea;->isOrganized()Z
 HSPLcom/android/server/wm/DisplayArea;->needsZBoost()Z
 HSPLcom/android/server/wm/DisplayArea;->onChildPositionChanged(Lcom/android/server/wm/WindowContainer;)V
-HSPLcom/android/server/wm/DisplayArea;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+HSPLcom/android/server/wm/DisplayArea;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HPLcom/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/DisplayArea;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/DisplayArea$Dimmable;,Lcom/android/server/wm/RootWindowContainer;
+HSPLcom/android/server/wm/DisplayArea;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/DisplayArea;->shouldIgnoreOrientationRequest(I)Z+]Lcom/android/server/wm/DisplayArea;megamorphic_types
+HPLcom/android/server/wm/DisplayArea;->toString()Ljava/lang/String;
 HSPLcom/android/server/wm/DisplayAreaOrganizerController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$Result;->getDefaultTaskDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
 HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda11;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda12;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda13;->apply(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda14;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda15;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda21;->test(Ljava/lang/Object;)Z
-HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda26;-><init>(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/RecentsAnimationController;Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region;[ILandroid/graphics/Region;Landroid/graphics/Region;)V
-HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda26;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda30;-><init>(Lcom/android/server/wm/RecentsAnimationController;Ljava/util/Set;Ljava/util/Set;Landroid/graphics/Matrix;[F)V
-HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda30;->apply(Ljava/lang/Object;)Z
-HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda32;-><init>(Lcom/android/server/wm/ActivityRecord;IZZ)V
+HPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda16;-><init>(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda26;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda32;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda39;-><init>(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/Task;I)V
-HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda39;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda3;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda43;-><init>()V
-HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda43;->apply(Ljava/lang/Object;)Ljava/lang/Object;+]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;
 HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda53;-><init>([I[ILandroid/graphics/Region;)V
+HPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda54;-><init>([I[ILandroid/graphics/Region;)V
+HPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda54;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/DisplayContent$2;->onVisibleRequestedChanged(Z)V
 HSPLcom/android/server/wm/DisplayContent$ApplySurfaceChangesTransactionState;->reset()V
+HPLcom/android/server/wm/DisplayContent$FixedRotationTransitionListener;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
 HSPLcom/android/server/wm/DisplayContent$ImeContainer;->assignLayer(Landroid/view/SurfaceControl$Transaction;I)V
 HPLcom/android/server/wm/DisplayContent$ImeContainer;->assignRelativeLayer(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;IZ)V
 HSPLcom/android/server/wm/DisplayContent$ImeContainer;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
-HSPLcom/android/server/wm/DisplayContent$ImeContainer;->getOrientation(I)I
+HSPLcom/android/server/wm/DisplayContent$ImeContainer;->getOrientation(I)I+]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent$ImeContainer;
 HSPLcom/android/server/wm/DisplayContent$ImeContainer;->setNeedsLayer()V
 HSPLcom/android/server/wm/DisplayContent$ImeContainer;->skipImeWindowsDuringTraversal(Lcom/android/server/wm/DisplayContent;)Z
 HSPLcom/android/server/wm/DisplayContent$ImeContainer;->updateAboveInsetsState(Landroid/view/InsetsState;Landroid/util/SparseArray;Landroid/util/ArraySet;)V
 HPLcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;->notifyInsetsChanged()V
-HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$56qtk_BOQOHFLsUDbVzWPy1BYfs(Lcom/android/server/wm/ActivityRecord;IZZLcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$GCWIzybPRJug0YHCVxhOhM11NMU(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$NJwM1ysKPNyOazqyI2QXlp2I4yA(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->$r8$lambda$TKBCp8w45auOmyOAqYeFE_f1qj4(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/Task;ILcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/DisplayContent;->$r8$lambda$XZoRovS-CKBIJN27JpN9ElSYdzI(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/RecentsAnimationController;Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region;[ILandroid/graphics/Region;Landroid/graphics/Region;Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/DisplayContent;->$r8$lambda$azeay8TNYqiAhV8MI-ze4sXGIYQ(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowState;)Z
-HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$dgiVvQEkmjR3cF72OE9MhIWFdnU(Lcom/android/server/wm/RecentsAnimationController;Ljava/util/Set;Ljava/util/Set;Landroid/graphics/Matrix;[FLcom/android/server/wm/WindowState;)Z
 HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$gM5lepuzHiQPKKhbYz6VHhhI2i0(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$hDxT-xcMlbyz81aqVyA-Ksg4aQ0(Lcom/android/server/wm/ActivityRecord;IZZLcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$kinjvLeyKniX6D7rfo-FG6z0FdE(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/DisplayContent;->$r8$lambda$nEaed4s7DkdMos6bVWDGFXuMxos(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/Task;ILcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$mp3I5evGIkqHsiPP4jzvGcmjaIU(Lcom/android/server/wm/RecentsAnimationController;Ljava/util/Set;Ljava/util/Set;Landroid/graphics/Matrix;[FLcom/android/server/wm/WindowState;)Z
 HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$nIcXEdaICoEEqR5_VclMAJ7QIho(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowState;)V
-HPLcom/android/server/wm/DisplayContent;->$r8$lambda$pE9XFbCW5dqsZNWTiZHCAeO-pJI(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/RecentsAnimationController;Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region;[ILandroid/graphics/Region;Landroid/graphics/Region;Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$tI_6DRgZThThP3Wu52_gp3wGhKs(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/DisplayContent;->-$$Nest$fgetmImeLayeringTarget(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/WindowState;
 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;->adjustForImeIfNeeded()V
+HSPLcom/android/server/wm/DisplayContent;->addWindowToken(Landroid/os/IBinder;Lcom/android/server/wm/WindowToken;)V
+HPLcom/android/server/wm/DisplayContent;->adjustForImeIfNeeded()V
 HSPLcom/android/server/wm/DisplayContent;->amendWindowTapExcludeRegion(Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 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/DisplayRotation;Lcom/android/server/wm/DisplayRotation;]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/WallpaperVisibilityListeners;Lcom/android/server/wm/WallpaperVisibilityListeners;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]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
-HPLcom/android/server/wm/DisplayContent;->assignWindowLayers(Z)V
+HSPLcom/android/server/wm/DisplayContent;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+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;
+HPLcom/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;
 HSPLcom/android/server/wm/DisplayContent;->beginHoldScreenUpdate()V
 HSPLcom/android/server/wm/DisplayContent;->calculateDisplayCutoutForRotation(I)Landroid/view/DisplayCutout;
 HSPLcom/android/server/wm/DisplayContent;->calculateDisplayShapeForRotation(I)Landroid/view/DisplayShape;
 HSPLcom/android/server/wm/DisplayContent;->calculatePrivacyIndicatorBoundsForRotation(I)Landroid/view/PrivacyIndicatorBounds;
 HSPLcom/android/server/wm/DisplayContent;->calculateRoundedCornersForRotation(I)Landroid/view/RoundedCorners;
-HSPLcom/android/server/wm/DisplayContent;->calculateSystemGestureExclusion(Landroid/graphics/Region;Landroid/graphics/Region;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
-HSPLcom/android/server/wm/DisplayContent;->canShowWithInsecureKeyguard()Z
+HPLcom/android/server/wm/DisplayContent;->calculateSystemGestureExclusion(Landroid/graphics/Region;Landroid/graphics/Region;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
+HPLcom/android/server/wm/DisplayContent;->canShowWithInsecureKeyguard()Z
+HPLcom/android/server/wm/DisplayContent;->canUpdateImeTarget()Z
 HSPLcom/android/server/wm/DisplayContent;->clearLayoutNeeded()V
 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;
+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;
+HSPLcom/android/server/wm/DisplayContent;->computeScreenAppConfiguration(Landroid/content/res/Configuration;III)V
 HSPLcom/android/server/wm/DisplayContent;->computeScreenConfiguration(Landroid/content/res/Configuration;)V
-HSPLcom/android/server/wm/DisplayContent;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZZ)V
-HSPLcom/android/server/wm/DisplayContent;->executeAppTransition()V
-HSPLcom/android/server/wm/DisplayContent;->findFocusedWindow()Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/DisplayContent;->findFocusedWindowIfNeeded(I)Lcom/android/server/wm/WindowState;
+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;->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;
 HSPLcom/android/server/wm/DisplayContent;->finishHoldScreenUpdate()V+]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;
 HPLcom/android/server/wm/DisplayContent;->forAllImeWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
 HSPLcom/android/server/wm/DisplayContent;->getAsyncRotationController()Lcom/android/server/wm/AsyncRotationController;
@@ -10885,183 +11393,206 @@
 HSPLcom/android/server/wm/DisplayContent;->getDisplayPolicy()Lcom/android/server/wm/DisplayPolicy;
 HSPLcom/android/server/wm/DisplayContent;->getDisplayRotation()Lcom/android/server/wm/DisplayRotation;
 HSPLcom/android/server/wm/DisplayContent;->getFocusedRootTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/DisplayContent;->getImeHostOrFallback(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/InsetsControlTarget;
 HSPLcom/android/server/wm/DisplayContent;->getImeInputTarget()Lcom/android/server/wm/InputTarget;
 HSPLcom/android/server/wm/DisplayContent;->getImePolicy()I
 HSPLcom/android/server/wm/DisplayContent;->getImeTarget(I)Lcom/android/server/wm/InsetsControlTarget;
-HSPLcom/android/server/wm/DisplayContent;->getInputMethodWindowVisibleHeight()I
+HPLcom/android/server/wm/DisplayContent;->getInputMethodWindowVisibleHeight()I
 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;
-HSPLcom/android/server/wm/DisplayContent;->getKeepClearAreas(Ljava/util/Set;Ljava/util/Set;)V
+HSPLcom/android/server/wm/DisplayContent;->getKeepClearAreas(Ljava/util/Set;Ljava/util/Set;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
 HSPLcom/android/server/wm/DisplayContent;->getMinimalTaskSizeDp()I
-HSPLcom/android/server/wm/DisplayContent;->getOrientation()I
+HSPLcom/android/server/wm/DisplayContent;->getOrientation()I+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->getOrientationRequestingTaskDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
-HSPLcom/android/server/wm/DisplayContent;->getRotation()I
+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;->getRotation()I+]Lcom/android/server/wm/DisplayRotation;Lcom/android/server/wm/DisplayRotation;
+HPLcom/android/server/wm/DisplayContent;->getStableRect(Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/DisplayContent;->getWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/WindowToken;+]Ljava/util/HashMap;Ljava/util/HashMap;
+HPLcom/android/server/wm/DisplayContent;->handleActivitySizeCompatModeIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/DisplayContent;->handleCompleteDeferredRemoval()Z+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HSPLcom/android/server/wm/DisplayContent;->handleTopActivityLaunchingInDifferentOrientation(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Z)Z
+HPLcom/android/server/wm/DisplayContent;->handleTopActivityLaunchingInDifferentOrientation(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Z)Z+]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/WindowToken;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/DisplayContent;->handlesOrientationChangeFromDescendant(I)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;->hasOwnFocus()Z
 HSPLcom/android/server/wm/DisplayContent;->inTransition()Z
 HPLcom/android/server/wm/DisplayContent;->isAodShowing()Z
 HSPLcom/android/server/wm/DisplayContent;->isImeControlledByApp()Z+]Lcom/android/server/wm/InputTarget;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;
+HPLcom/android/server/wm/DisplayContent;->isInputMethodClientFocus(II)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;
-HSPLcom/android/server/wm/DisplayContent;->isKeyguardLocked()Z
+HPLcom/android/server/wm/DisplayContent;->isKeyguardLocked()Z
 HSPLcom/android/server/wm/DisplayContent;->isLayoutNeeded()Z
 HSPLcom/android/server/wm/DisplayContent;->isReady()Z
 HSPLcom/android/server/wm/DisplayContent;->isRemoved()Z
 HSPLcom/android/server/wm/DisplayContent;->isRemoving()Z
+HPLcom/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;
 HSPLcom/android/server/wm/DisplayContent;->isVisibleRequested()Z
-HPLcom/android/server/wm/DisplayContent;->lambda$calculateSystemGestureExclusion$35(Lcom/android/server/wm/RecentsAnimationController;Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region;[ILandroid/graphics/Region;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;
-HSPLcom/android/server/wm/DisplayContent;->lambda$ensureActivitiesVisible$48(Lcom/android/server/wm/ActivityRecord;IZZLcom/android/server/wm/Task;)V
-HSPLcom/android/server/wm/DisplayContent;->lambda$getKeepClearAreas$38(Lcom/android/server/wm/RecentsAnimationController;Ljava/util/Set;Ljava/util/Set;Landroid/graphics/Matrix;[FLcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/DisplayContent;->lambda$calculateSystemGestureExclusion$36(Lcom/android/server/wm/RecentsAnimationController;Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region;[ILandroid/graphics/Region;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;
+HSPLcom/android/server/wm/DisplayContent;->lambda$ensureActivitiesVisible$49(Lcom/android/server/wm/ActivityRecord;IZZLcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/DisplayContent;->lambda$getKeepClearAreas$39(Lcom/android/server/wm/RecentsAnimationController;Ljava/util/Set;Ljava/util/Set;Landroid/graphics/Matrix;[FLcom/android/server/wm/WindowState;)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;->lambda$new$1(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/DisplayContent;->lambda$new$2(Lcom/android/server/wm/WindowState;)V+]Landroid/os/Handler;Lcom/android/server/wm/WindowManagerService$H;
 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
 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/WindowContainer;Lcom/android/server/wm/ActivityRecord;]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/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]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/ConfigurationContainer;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/DisplayContent;->lambda$updateTouchExcludeRegion$19(Lcom/android/server/wm/Task;ILcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/DisplayContent;->logsGestureExclusionRestrictions(Lcom/android/server/wm/WindowState;)Z
-HSPLcom/android/server/wm/DisplayContent;->makeChildSurface(Lcom/android/server/wm/WindowContainer;)Landroid/view/SurfaceControl$Builder;
-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;
+HPLcom/android/server/wm/DisplayContent;->lambda$updateTouchExcludeRegion$20(Lcom/android/server/wm/Task;ILcom/android/server/wm/Task;)V
+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;
+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;->okToAnimate(ZZ)Z
-HSPLcom/android/server/wm/DisplayContent;->okToDisplay(ZZ)Z
+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(ZZ)Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
 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;->onImeInsetsClientVisibilityUpdate()Z
 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;
 HSPLcom/android/server/wm/DisplayContent;->prepareSurfaces()V+]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;
-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;
+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;
+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;
 HPLcom/android/server/wm/DisplayContent;->rotationForActivityInDifferentOrientation(Lcom/android/server/wm/ActivityRecord;)I
+HPLcom/android/server/wm/DisplayContent;->scheduleToastWindowsTimeoutIfNeededLocked(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/DisplayContent;->setDisplayMirroring()Z+]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;
-HSPLcom/android/server/wm/DisplayContent;->setFocusedApp(Lcom/android/server/wm/ActivityRecord;)Z
-HSPLcom/android/server/wm/DisplayContent;->setImeLayeringTargetInner(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->setFocusedApp(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/DisplayContent;->setImeInputTarget(Lcom/android/server/wm/InputTarget;)V
+HSPLcom/android/server/wm/DisplayContent;->setImeLayeringTargetInner(Lcom/android/server/wm/WindowState;)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]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/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent$ImeContainer;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->setLayoutNeeded()V
 HSPLcom/android/server/wm/DisplayContent;->shouldDeferRemoval()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;
+HPLcom/android/server/wm/DisplayContent;->toString()Ljava/lang/String;
 HSPLcom/android/server/wm/DisplayContent;->updateBaseDisplayMetricsIfNeeded()V
 HSPLcom/android/server/wm/DisplayContent;->updateDisplayAndOrientation(Landroid/content/res/Configuration;)Landroid/view/DisplayInfo;
 HSPLcom/android/server/wm/DisplayContent;->updateDisplayFrames(Lcom/android/server/wm/DisplayFrames;III)Z
 HSPLcom/android/server/wm/DisplayContent;->updateDisplayFrames(Z)V
 HSPLcom/android/server/wm/DisplayContent;->updateDisplayInfo()V
 HSPLcom/android/server/wm/DisplayContent;->updateDisplayOverrideConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord;ZLcom/android/server/wm/ActivityTaskManagerService$UpdateConfigurationResult;)Z
-HSPLcom/android/server/wm/DisplayContent;->updateFocusedWindowLocked(IZI)Z
+HSPLcom/android/server/wm/DisplayContent;->updateFocusedWindowLocked(IZI)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]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/TransitionController;Lcom/android/server/wm/TransitionController;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/BackNavigationController;Lcom/android/server/wm/BackNavigationController;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;
 HPLcom/android/server/wm/DisplayContent;->updateImeControlTarget(Z)V
 HPLcom/android/server/wm/DisplayContent;->updateImeInputAndControlTarget(Lcom/android/server/wm/InputTarget;)V
 HSPLcom/android/server/wm/DisplayContent;->updateImeParent()V
 HSPLcom/android/server/wm/DisplayContent;->updateKeepClearAreas()V+]Lcom/android/server/wm/DisplayWindowListenerController;Lcom/android/server/wm/DisplayWindowListenerController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/Set;Landroid/util/ArraySet;
-HSPLcom/android/server/wm/DisplayContent;->updateOrientation()Z
-HSPLcom/android/server/wm/DisplayContent;->updateOrientation(Z)Z
+HSPLcom/android/server/wm/DisplayContent;->updateOrientation()Z+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+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/DisplayRotationReversionController;Lcom/android/server/wm/DisplayRotationReversionController;]Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/DisplayContent;->updateRecording()V
-HSPLcom/android/server/wm/DisplayContent;->updateSystemGestureExclusion()Z+]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/ISystemGestureExclusionListener;Landroid/view/ISystemGestureExclusionListener$Stub$Proxy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
+HSPLcom/android/server/wm/DisplayContent;->updateSystemGestureExclusion()Z+]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
 HSPLcom/android/server/wm/DisplayContent;->updateSystemGestureExclusionLimit()V
 HSPLcom/android/server/wm/DisplayContent;->updateTouchExcludeRegion()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/TaskTapPointerEventListener;Lcom/android/server/wm/TaskTapPointerEventListener;]Landroid/graphics/Region;Landroid/graphics/Region;]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>()V
 HSPLcom/android/server/wm/DisplayFrames;->update(IIILandroid/view/DisplayCutout;Landroid/view/RoundedCorners;Landroid/view/PrivacyIndicatorBounds;Landroid/view/DisplayShape;)Z
-HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda13;-><init>()V
-HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda13;->test(Ljava/lang/Object;)Z
-HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda1;-><init>(II[Lcom/android/internal/view/AppearanceRegion;ZIILjava/lang/String;[Lcom/android/internal/statusbar/LetterboxDetails;)V
-HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda13;-><init>()V
+HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda13;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda1;-><init>(II[Lcom/android/internal/view/AppearanceRegion;ZIILjava/lang/String;[Lcom/android/internal/statusbar/LetterboxDetails;)V
+HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/wm/DisplayPolicy;Ljava/util/function/Consumer;)V
 HPLcom/android/server/wm/DisplayPolicy$1;->onFling(I)V
+HPLcom/android/server/wm/DisplayPolicy$2;->lambda$onAppTransitionStartingLocked$3(JJ)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(JJ)I
 HSPLcom/android/server/wm/DisplayPolicy$DecorInsets$Info;->update(Lcom/android/server/wm/DisplayContent;III)V
-HSPLcom/android/server/wm/DisplayPolicy;->$r8$lambda$GK_0BrS5f8sZfsB8RZP6ZU7GnnI(Lcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/DisplayPolicy;->$r8$lambda$Yp1gPtqUqV8VDvQd-QfYSHzp9PY(Lcom/android/server/wm/WindowState;ILcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/DisplayPolicy;->$r8$lambda$e-_2iotoQUgBQlDNRtcV7F2b2Os(Lcom/android/server/wm/WindowState;IILcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/DisplayPolicy$DecorInsets;->get(III)Lcom/android/server/wm/DisplayPolicy$DecorInsets$Info;
+HPLcom/android/server/wm/DisplayPolicy;->$r8$lambda$-d9K7e_vyaPZNRq2sHwAjsv9yj0(Lcom/android/server/wm/WindowState;IILcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)Ljava/lang/Integer;
+HPLcom/android/server/wm/DisplayPolicy;->$r8$lambda$GK_0BrS5f8sZfsB8RZP6ZU7GnnI(Lcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/DisplayPolicy;->addSystemBarColorApp(Lcom/android/server/wm/WindowState;)V
-HSPLcom/android/server/wm/DisplayPolicy;->adjustWindowParamsLw(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;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]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+]Lcom/android/server/wm/ImeInsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]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/DisplayPolicy;->applyPostLayoutPolicyLw(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)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/WindowState;Lcom/android/server/wm/WindowState;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]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;->applyPostLayoutPolicyLw(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)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/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]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;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/DisplayPolicy;->areSystemBarsForcedConsumedLw()Z
-HSPLcom/android/server/wm/DisplayPolicy;->areSystemBarsForcedShownLw()Z
 HSPLcom/android/server/wm/DisplayPolicy;->beginPostLayoutPolicyLw()V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/wm/DisplayPolicy;->callStatusBarSafely(Ljava/util/function/Consumer;)V
-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;->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;->drawsBarBackground(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-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;
-HSPLcom/android/server/wm/DisplayPolicy;->focusChangedLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayPolicy;->calculateInsetsFrame(Landroid/graphics/Rect;Landroid/graphics/Insets;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HPLcom/android/server/wm/DisplayPolicy;->callStatusBarSafely(Ljava/util/function/Consumer;)V
+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;->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;
+HPLcom/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;->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;->focusChangedLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/DisplayPolicy;->getBarContentFrameForWindow(Lcom/android/server/wm/WindowState;I)Landroid/graphics/Rect;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/DisplayCutout;Landroid/view/DisplayCutout;
 HSPLcom/android/server/wm/DisplayPolicy;->getDisplayId()I+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HSPLcom/android/server/wm/DisplayPolicy;->getInsetsPolicy()Lcom/android/server/wm/InsetsPolicy;
-HSPLcom/android/server/wm/DisplayPolicy;->getNotificationShade()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/DisplayPolicy;->getInsetsPolicy()Lcom/android/server/wm/InsetsPolicy;+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/DisplayPolicy;->getNotificationShade()Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/DisplayPolicy;->getRefreshRatePolicy()Lcom/android/server/wm/RefreshRatePolicy;
-HSPLcom/android/server/wm/DisplayPolicy;->getStatusBar()Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/DisplayPolicy;->getStatusBarManagerInternal()Lcom/android/server/statusbar/StatusBarManagerInternal;
-HSPLcom/android/server/wm/DisplayPolicy;->getTopFullscreenOpaqueWindow()Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/DisplayPolicy;->intersectsAnyInsets(Landroid/graphics/Rect;Landroid/view/InsetsState;I)Z+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
+HPLcom/android/server/wm/DisplayPolicy;->getStatusBar()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/DisplayPolicy;->getStatusBarManagerInternal()Lcom/android/server/statusbar/StatusBarManagerInternal;
+HPLcom/android/server/wm/DisplayPolicy;->getTopFullscreenOpaqueWindow()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/DisplayPolicy;->intersectsAnyInsets(Landroid/graphics/Rect;Landroid/view/InsetsState;I)Z+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
 HSPLcom/android/server/wm/DisplayPolicy;->isAwake()Z
-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;
-HSPLcom/android/server/wm/DisplayPolicy;->isImmersiveMode(Lcom/android/server/wm/WindowState;)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;
+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;->isKeyguardOccluded()Z
 HSPLcom/android/server/wm/DisplayPolicy;->isKeyguardShowing()Z
 HPLcom/android/server/wm/DisplayPolicy;->isLightBarAllowed(Lcom/android/server/wm/WindowState;I)Z
-HSPLcom/android/server/wm/DisplayPolicy;->isOverlappingWithNavBar(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/DisplayPolicy;->isOverlappingWithNavBar(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/DisplayPolicy;->isRemoteInsetsControllerControllingSystemBars()Z
 HSPLcom/android/server/wm/DisplayPolicy;->isScreenOnEarly()Z
+HPLcom/android/server/wm/DisplayPolicy;->isScreenOnFully()Z
 HSPLcom/android/server/wm/DisplayPolicy;->isShowingDreamLw()Z
-HSPLcom/android/server/wm/DisplayPolicy;->isWindowExcludedFromContent(Lcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/DisplayPolicy;->lambda$getFrameProvider$1(Lcom/android/server/wm/WindowState;ILcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Landroid/view/InsetsFrameProvider;Landroid/view/InsetsFrameProvider;
-HPLcom/android/server/wm/DisplayPolicy;->lambda$getImeSourceFrameProvider$3(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/DisplayPolicy;->lambda$getOverrideFrameProvider$2(Lcom/android/server/wm/WindowState;IILcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Landroid/view/InsetsFrameProvider$InsetsSizeOverride;Landroid/view/InsetsFrameProvider$InsetsSizeOverride;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Landroid/view/InsetsFrameProvider;Landroid/view/InsetsFrameProvider;
-HSPLcom/android/server/wm/DisplayPolicy;->lambda$updateSystemBarsLw$8(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;
+HPLcom/android/server/wm/DisplayPolicy;->lambda$getFrameProvider$1(Lcom/android/server/wm/WindowState;IILcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)Ljava/lang/Integer;+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Landroid/view/InsetsFrameProvider$InsetsSizeOverride;Landroid/view/InsetsFrameProvider$InsetsSizeOverride;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/InsetsFrameProvider;Landroid/view/InsetsFrameProvider;
+HPLcom/android/server/wm/DisplayPolicy;->lambda$getImeSourceFrameProvider$2(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)Ljava/lang/Integer;
+HPLcom/android/server/wm/DisplayPolicy;->lambda$updateSystemBarsLw$8(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;
 HSPLcom/android/server/wm/DisplayPolicy;->layoutWindowLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/DisplayFrames;)V+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]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;
 HPLcom/android/server/wm/DisplayPolicy;->navigationBarPosition(I)I
+HSPLcom/android/server/wm/DisplayPolicy;->onDisplayInfoChanged(Landroid/view/DisplayInfo;)V
 HPLcom/android/server/wm/DisplayPolicy;->onUserActivityEventTouch()V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
 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
 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;
-HSPLcom/android/server/wm/DisplayPolicy;->simulateLayoutDisplay(Lcom/android/server/wm/DisplayFrames;)V
-HPLcom/android/server/wm/DisplayPolicy;->topAppHidesSystemBar(I)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/DisplayPolicy;->updateLightNavigationBarLw(ILcom/android/server/wm/WindowState;)I
+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;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;]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;
+HPLcom/android/server/wm/DisplayPolicy;->topAppHidesSystemBar(I)Z+]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;
+HPLcom/android/server/wm/DisplayPolicy;->updateDecorInsetsInfo()Z
+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;]Lcom/android/server/input/InputManagerService;Lcom/android/server/input/InputManagerService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]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/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;
+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/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
 HSPLcom/android/server/wm/DisplayRotation;->getRotation()I
 HSPLcom/android/server/wm/DisplayRotation;->isFixedToUserRotation()Z
 HSPLcom/android/server/wm/DisplayRotation;->isRotatingSeamlessly()Z
+HPLcom/android/server/wm/DisplayRotation;->needSensorRunning()Z
 HPLcom/android/server/wm/DisplayRotation;->rotationForOrientation(II)I
 HSPLcom/android/server/wm/DisplayRotation;->updateOrientation(IZ)Z
 HSPLcom/android/server/wm/DisplayRotation;->updateOrientationListenerLw()V
 HSPLcom/android/server/wm/DisplayRotation;->updateRotationUnchecked(Z)Z
-HPLcom/android/server/wm/DisplayWindowListenerController;->dispatchKeepClearAreasChanged(Lcom/android/server/wm/DisplayContent;Ljava/util/Set;Ljava/util/Set;)V
+HSPLcom/android/server/wm/DisplayRotationCompatPolicy;->isTreatmentEnabledForDisplay()Z
+HPLcom/android/server/wm/DisplayRotationReversionController;->isRotationReversionEnabled()Z
+HSPLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->hasController()Z
 HSPLcom/android/server/wm/DisplayWindowSettings;->getImePolicyLocked(Lcom/android/server/wm/DisplayContent;)I
 HSPLcom/android/server/wm/DragDropController;->dragDropActiveLocked()Z
-HPLcom/android/server/wm/EmbeddedWindowController;->get(Landroid/os/IBinder;)Lcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;
-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;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/EmbeddedWindowController;->get(Landroid/os/IBinder;)Lcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+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/WindowContainer;Lcom/android/server/wm/ActivityRecord;]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/EnsureActivitiesVisibleHelper;->setActivityVisibilityState(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]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/EventLogTags;->writeWmTaskMoved(IIIII)V
+HPLcom/android/server/wm/FadeAnimationController$1;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V
 HSPLcom/android/server/wm/HighRefreshRateDenylist;->isDenylisted(Ljava/lang/String;)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 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;
 HPLcom/android/server/wm/ImeInsetsSourceProvider;->getControl(Lcom/android/server/wm/InsetsControlTarget;)Landroid/view/InsetsSourceControl;
 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;->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;->setServerVisible(Z)V
-HPLcom/android/server/wm/ImeInsetsSourceProvider;->updateClientVisibility(Lcom/android/server/wm/InsetsControlTarget;)Z
+HPLcom/android/server/wm/ImeInsetsSourceProvider;->updateClientVisibility(Lcom/android/server/wm/InsetsControlTarget;)Z+]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;]Lcom/android/server/wm/ImeInsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/ImeInsetsSourceProvider;->updateVisibility()V
 HSPLcom/android/server/wm/ImeTargetVisibilityPolicy;->canComputeImeParent(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/InputTarget;)Z
 HPLcom/android/server/wm/ImeTargetVisibilityPolicy;->shouldComputeImeParentForEmbeddedActivity(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/InputTarget;)Z
-HSPLcom/android/server/wm/ImmersiveModeConfirmation;->getWindowToken()Landroid/os/IBinder;
-HSPLcom/android/server/wm/InputConfigAdapter;->applyMapping(ILjava/util/List;)I+]Ljava/util/List;Ljava/util/ImmutableCollections$ListN;]Ljava/util/Iterator;Ljava/util/ImmutableCollections$ListItr;
+HPLcom/android/server/wm/ImmersiveModeConfirmation;->getWindowToken()Landroid/os/IBinder;
+HSPLcom/android/server/wm/InputConfigAdapter;->applyMapping(ILjava/util/List;)I
 HSPLcom/android/server/wm/InputConfigAdapter;->getInputConfigFromWindowParams(III)I
 HSPLcom/android/server/wm/InputConfigAdapter;->getMask()I
 HPLcom/android/server/wm/InputConsumerImpl;->hide(Landroid/view/SurfaceControl$Transaction;)V
-HPLcom/android/server/wm/InputManagerCallback;->interceptMotionBeforeQueueingNonInteractive(IJI)I
+HPLcom/android/server/wm/InputManagerCallback$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->-$$Nest$mupdateInputWindows(Lcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;Z)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/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;]Lcom/android/server/wm/InputConsumerImpl;Lcom/android/server/wm/InputConsumerImpl;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;
+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/ConfigurationContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;]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;]Lcom/android/server/wm/InputConsumerImpl;Lcom/android/server/wm/InputConsumerImpl;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;]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;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/InputConsumerImpl;Lcom/android/server/wm/InputConsumerImpl;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;
+HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->updateInputWindows(Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/ActivityRecord;]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/InputConsumerImpl;Lcom/android/server/wm/InputConsumerImpl;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/InputMonitor$UpdateInputWindows;->run()V+]Lcom/android/server/wm/DragDropController;Lcom/android/server/wm/DragDropController;
 HSPLcom/android/server/wm/InputMonitor;->-$$Nest$fgetmActiveRecentsActivity(Lcom/android/server/wm/InputMonitor;)Ljava/lang/ref/WeakReference;
 HSPLcom/android/server/wm/InputMonitor;->-$$Nest$fgetmDisplayContent(Lcom/android/server/wm/InputMonitor;)Lcom/android/server/wm/DisplayContent;
@@ -11076,152 +11607,187 @@
 HSPLcom/android/server/wm/InputMonitor;->-$$Nest$smgetWeak(Ljava/lang/ref/WeakReference;)Ljava/lang/Object;
 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;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
-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/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+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/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/DisplayContent;Lcom/android/server/wm/DisplayContent;]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;->requestFocus(Landroid/os/IBinder;Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
+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;->resetInputConsumers(Landroid/view/SurfaceControl$Transaction;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/InputConsumerImpl;Lcom/android/server/wm/InputConsumerImpl;
 HSPLcom/android/server/wm/InputMonitor;->scheduleUpdateInputWindows()V+]Landroid/os/Handler;Landroid/os/Handler;
-HSPLcom/android/server/wm/InputMonitor;->setInputFocusLw(Lcom/android/server/wm/WindowState;Z)V
+HPLcom/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
 HSPLcom/android/server/wm/InputMonitor;->setUpdateInputWindowsNeededLw()V
-HSPLcom/android/server/wm/InputMonitor;->updateInputFocusRequest(Lcom/android/server/wm/InputConsumerImpl;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/inputmethod/InputMethodManagerInternal;Lcom/android/server/inputmethod/InputMethodManagerService$LocalServiceImpl;]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;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;
+HSPLcom/android/server/wm/InputMonitor;->updateInputFocusRequest(Lcom/android/server/wm/InputConsumerImpl;)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/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/inputmethod/InputMethodManagerInternal;Lcom/android/server/inputmethod/InputMethodManagerService$LocalServiceImpl;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;]Lcom/android/server/wm/InputTarget;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/InputMonitor;->updateInputWindowsLw(Z)V+]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->clearTouchableRegion()V
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->getDisplayId()I
-HSPLcom/android/server/wm/InputWindowHandleWrapper;->hasWallpaper()Z
+HPLcom/android/server/wm/InputWindowHandleWrapper;->hasWallpaper()Z
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->isChanged()Z
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->isFocusable()Z
-HSPLcom/android/server/wm/InputWindowHandleWrapper;->isPaused()Z
+HPLcom/android/server/wm/InputWindowHandleWrapper;->isPaused()Z
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setDispatchingTimeoutMillis(J)V
+HPLcom/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;
-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
+HPLcom/android/server/wm/InputWindowHandleWrapper;->setHasWallpaper(Z)V+]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;
+HPLcom/android/server/wm/InputWindowHandleWrapper;->setInputApplicationHandle(Landroid/view/InputApplicationHandle;)V
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setInputConfigMasked(II)V
-HSPLcom/android/server/wm/InputWindowHandleWrapper;->setLayoutParamsFlags(I)V
+HPLcom/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;->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;->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+]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;
+HPLcom/android/server/wm/InputWindowHandleWrapper;->setReplaceTouchableRegionWithCrop(Z)V
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setScaleFactor(F)V
-HSPLcom/android/server/wm/InputWindowHandleWrapper;->setSurfaceInset(I)V
+HPLcom/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
-HSPLcom/android/server/wm/InputWindowHandleWrapper;->setTouchableRegion(Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;
+HPLcom/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;->setWindowToken(Landroid/view/IWindow;)V+]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;
-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;->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;
+HPLcom/android/server/wm/InputWindowHandleWrapper;->setWindowToken(Landroid/view/IWindow;)V+]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;
+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;
+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$ControlTarget;]Lcom/android/server/wm/InsetsPolicy$BarWindow;Lcom/android/server/wm/InsetsPolicy$BarWindow;
 HSPLcom/android/server/wm/InsetsPolicy;->adjustInsetsForRoundedCorners(Lcom/android/server/wm/WindowToken;Landroid/view/InsetsState;Z)Landroid/view/InsetsState;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 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;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/InsetsPolicy;->adjustVisibilityForTransientTypes(Landroid/view/InsetsState;)Landroid/view/InsetsState;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;
-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;
-HSPLcom/android/server/wm/InsetsPolicy;->enforceInsetsPolicyForTarget(Landroid/view/WindowManager$LayoutParams;IZLandroid/view/InsetsState;)Landroid/view/InsetsState;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]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/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/InsetsFrameProvider;Landroid/view/InsetsFrameProvider;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
-HSPLcom/android/server/wm/InsetsPolicy;->forceShowsNavigationBarTransiently()Z
-HSPLcom/android/server/wm/InsetsPolicy;->forceShowsStatusBarTransiently()Z
-HSPLcom/android/server/wm/InsetsPolicy;->getNavControlTarget(Lcom/android/server/wm/WindowState;Z)Lcom/android/server/wm/InsetsControlTarget;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]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;->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;->hasHiddenSources(I)Z+]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;
+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;->enforceInsetsPolicyForTarget(Landroid/view/WindowManager$LayoutParams;IZLandroid/view/InsetsState;)Landroid/view/InsetsState;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/InsetsFrameProvider;Landroid/view/InsetsFrameProvider;]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;->getInsetsForWindowMetrics(Lcom/android/server/wm/WindowToken;Landroid/view/InsetsState;)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/InsetsPolicy;->getNavControlTarget(Lcom/android/server/wm/WindowState;Z)Lcom/android/server/wm/InsetsControlTarget;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
+HPLcom/android/server/wm/InsetsPolicy;->getStatusControlTarget(Lcom/android/server/wm/WindowState;Z)Lcom/android/server/wm/InsetsControlTarget;+]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/InsetsPolicy;->hasHiddenSources(I)Z+]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;
 HSPLcom/android/server/wm/InsetsPolicy;->isTransient(I)Z
-HSPLcom/android/server/wm/InsetsPolicy;->remoteInsetsControllerControlsSystemBars(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
-HSPLcom/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;
+HPLcom/android/server/wm/InsetsPolicy;->remoteInsetsControllerControlsSystemBars(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
+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;
 HPLcom/android/server/wm/InsetsSourceProvider$ControlAdapter;-><init>(Lcom/android/server/wm/InsetsSourceProvider;Landroid/graphics/Point;)V
 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
-HPLcom/android/server/wm/InsetsSourceProvider;->createSimulatedSource(Lcom/android/server/wm/DisplayFrames;Landroid/graphics/Rect;)Landroid/view/InsetsSource;
-HPLcom/android/server/wm/InsetsSourceProvider;->getControl(Lcom/android/server/wm/InsetsControlTarget;)Landroid/view/InsetsSourceControl;
-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/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+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/TriFunction;Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda2;
+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;
+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;
 HPLcom/android/server/wm/InsetsSourceProvider;->isClientVisible()Z
-HSPLcom/android/server/wm/InsetsSourceProvider;->onPostLayout()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/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;]Ljava/util/function/Consumer;Lcom/android/server/wm/InsetsSourceProvider$$ExternalSyntheticLambda0;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;
+HSPLcom/android/server/wm/InsetsSourceProvider;->onPostLayout()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/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]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;]Ljava/util/function/Consumer;Lcom/android/server/wm/InsetsSourceProvider$$ExternalSyntheticLambda0;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;
+HPLcom/android/server/wm/InsetsSourceProvider;->onSurfaceTransactionApplied()V
 HSPLcom/android/server/wm/InsetsSourceProvider;->overridesFrame(I)Z
 HPLcom/android/server/wm/InsetsSourceProvider;->setClientVisible(Z)V
 HPLcom/android/server/wm/InsetsSourceProvider;->setServerVisible(Z)V
-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;
+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/InsetsStateController$1;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
 HPLcom/android/server/wm/InsetsSourceProvider;->updateControlForTarget(Lcom/android/server/wm/InsetsControlTarget;Z)V
-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;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/util/function/TriConsumer;Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda4;,Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda5;,Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda3;
-HPLcom/android/server/wm/InsetsSourceProvider;->updateSourceFrameForServerVisibility()V+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
+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/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/internal/util/function/TriFunction;Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda5;,Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda2;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HPLcom/android/server/wm/InsetsSourceProvider;->updateSourceFrameForServerVisibility()V+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;
 HPLcom/android/server/wm/InsetsSourceProvider;->updateVisibility()V+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
 HPLcom/android/server/wm/InsetsStateController$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/InsetsStateController;->$r8$lambda$ysCnX7fS-2tUJY5jK31WLy-O5oc(Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/InsetsStateController;->addToControlMaps(Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/InsetsSourceProvider;Z)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;->getControlsForDispatch(Lcom/android/server/wm/InsetsControlTarget;)[Landroid/view/InsetsSourceControl;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]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;->getOrCreateSourceProvider(II)Lcom/android/server/wm/WindowContainerInsetsSourceProvider;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/wm/InsetsStateController;->getOrCreateSourceProvider(II)Lcom/android/server/wm/InsetsSourceProvider;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;
 HSPLcom/android/server/wm/InsetsStateController;->getRawInsetsState()Landroid/view/InsetsState;
-HPLcom/android/server/wm/InsetsStateController;->lambda$new$0(Lcom/android/server/wm/WindowState;)V
-HPLcom/android/server/wm/InsetsStateController;->lambda$notifyPendingInsetsControlChanged$3()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/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;->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$3()V+]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;,Lcom/android/server/wm/InsetsPolicy$ControlTarget;,Lcom/android/server/wm/InsetsStateController$1;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]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;->notifyInsetsChanged()V
-HSPLcom/android/server/wm/InsetsStateController;->notifyPendingInsetsControlChanged()V
-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/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
-HPLcom/android/server/wm/InsetsStateController;->onControlTargetChanged(Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsControlTarget;Z)V+]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]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;->notifyPendingInsetsControlChanged()V
+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/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
+HPLcom/android/server/wm/InsetsStateController;->onControlTargetChanged(Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsControlTarget;Z)V+]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]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;->onImeControlTargetChanged(Lcom/android/server/wm/InsetsControlTarget;)V
-HPLcom/android/server/wm/InsetsStateController;->onInsetsModified(Lcom/android/server/wm/InsetsControlTarget;)V+]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/util/SparseArray;Landroid/util/SparseArray;]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;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
+HSPLcom/android/server/wm/InsetsStateController;->onPostLayout()V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
 HPLcom/android/server/wm/InsetsStateController;->removeFromControlMaps(Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/InsetsSourceProvider;Z)V
-HSPLcom/android/server/wm/InsetsStateController;->updateAboveInsetsState(Z)V
+HSPLcom/android/server/wm/InsetsStateController;->updateAboveInsetsState(Z)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/function/Consumer;Lcom/android/server/wm/InsetsStateController$$ExternalSyntheticLambda3;
 HSPLcom/android/server/wm/KeyguardController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/KeyguardController;)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
-HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fgetmAodShowing(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
+HPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fgetmAodShowing(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fgetmKeyguardGoingAway(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$fgetmKeyguardShowing(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fgetmRequestDismissKeyguard(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->getRootTaskForControllingOccluding(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/Task;
 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;
-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/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Landroid/os/PowerManager;Landroid/os/PowerManager;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]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;
+HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->updateVisibility(Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]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/KeyguardController;Lcom/android/server/wm/KeyguardController;
 HSPLcom/android/server/wm/KeyguardController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskSupervisor;)V
-HSPLcom/android/server/wm/KeyguardController;->checkKeyguardVisibility(Lcom/android/server/wm/ActivityRecord;)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;->getDisplayState(I)Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/wm/KeyguardController;->isAodShowing(I)Z
 HSPLcom/android/server/wm/KeyguardController;->isKeyguardGoingAway(I)Z
-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
-HSPLcom/android/server/wm/KeyguardController;->setKeyguardShown(IZZ)V
+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;
+HPLcom/android/server/wm/KeyguardController;->setKeyguardShown(IZZ)V
+HPLcom/android/server/wm/KeyguardController;->updateKeyguardSleepToken()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;
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl;-><init>(Landroid/os/Looper;)V
 HSPLcom/android/server/wm/LaunchParamsController$LaunchParams;-><init>()V
-HSPLcom/android/server/wm/LaunchParamsController$LaunchParams;->set(Lcom/android/server/wm/LaunchParamsController$LaunchParams;)V
+HPLcom/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;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/LaunchParamsPersister;)V
-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
+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
 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$$ExternalSyntheticLambda3;-><init>()V
 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
-HSPLcom/android/server/wm/LaunchParamsUtil;->adjustBoundsToFitInDisplayArea(Lcom/android/server/wm/TaskDisplayArea;ILandroid/content/pm/ActivityInfo$WindowLayout;Landroid/graphics/Rect;)V
-HSPLcom/android/server/wm/LaunchParamsUtil;->getDefaultFreeformSize(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/TaskDisplayArea;Landroid/content/pm/ActivityInfo$WindowLayout;ILandroid/graphics/Rect;)Landroid/util/Size;
+HPLcom/android/server/wm/LaunchParamsPersister;->getLaunchParams(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)V
+HPLcom/android/server/wm/LaunchParamsUtil;->adjustBoundsToFitInDisplayArea(Lcom/android/server/wm/TaskDisplayArea;ILandroid/content/pm/ActivityInfo$WindowLayout;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/LaunchParamsUtil;->getDefaultFreeformSize(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/TaskDisplayArea;Landroid/content/pm/ActivityInfo$WindowLayout;ILandroid/graphics/Rect;)Landroid/util/Size;
 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$$ExternalSyntheticLambda7;,Lcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda8;,Lcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda13;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Color;Landroid/graphics/Color;
-HPLcom/android/server/wm/Letterbox;->layout(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Point;)V
+HPLcom/android/server/wm/Letterbox$LetterboxSurface;->needsApplySurfaceChanges()Z+]Ljava/util/function/Supplier;Lcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda18;,Lcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda13;,Lcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda12;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Color;Landroid/graphics/Color;
+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;
 HPLcom/android/server/wm/Letterbox;->useFullWindowSurface()Z
-HSPLcom/android/server/wm/LetterboxConfiguration;->getIsEducationEnabled()Z
-HSPLcom/android/server/wm/LetterboxConfiguration;->getLetterboxBackgroundType()I
-HSPLcom/android/server/wm/LetterboxUiController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/LetterboxUiController;->findOpaqueNotFinishingActivityBelow()Ljava/util/Optional;+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/LetterboxUiController;->getCropBoundsIfNeeded(Lcom/android/server/wm/WindowState;)Landroid/graphics/Rect;+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
+HPLcom/android/server/wm/LetterboxConfiguration;->getIsEducationEnabled()Z
+HPLcom/android/server/wm/LetterboxConfiguration;->getIsHorizontalReachabilityEnabled()Z
+HPLcom/android/server/wm/LetterboxConfiguration;->getIsVerticalReachabilityEnabled()Z
+HPLcom/android/server/wm/LetterboxConfiguration;->getLetterboxBackgroundType()I+]Lcom/android/server/wm/LetterboxConfiguration;Lcom/android/server/wm/LetterboxConfiguration;
+HPLcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda0;-><init>()V
+HPLcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda0;->getAsBoolean()Z
+HPLcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda11;->get()Ljava/lang/Object;
+HPLcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda1;-><init>()V
+HPLcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda1;->getAsBoolean()Z
+HPLcom/android/server/wm/LetterboxUiController;->$r8$lambda$YT01LshMaXJODA8XQ1D0AqY3G1k()Z
+HPLcom/android/server/wm/LetterboxUiController;->$r8$lambda$pf362WsVOg9UZTz6GOJ5aBQawdk()Z
+HPLcom/android/server/wm/LetterboxUiController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/LetterboxUiController;->findOpaqueNotFinishingActivityBelow()Ljava/util/Optional;
+HPLcom/android/server/wm/LetterboxUiController;->getCropBoundsIfNeeded(Lcom/android/server/wm/WindowState;)Landroid/graphics/Rect;+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/LetterboxUiController;->getExpandedTaskbarOrNull(Lcom/android/server/wm/WindowState;)Landroid/view/InsetsSource;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/LetterboxUiController;->getLetterboxDetails()Lcom/android/internal/statusbar/LetterboxDetails;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/LetterboxUiController;->getLetterboxInnerBounds(Landroid/graphics/Rect;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]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;->getRoundedCornersRadius(Lcom/android/server/wm/WindowState;)I+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
-HSPLcom/android/server/wm/LetterboxUiController;->hasInheritedLetterboxBehavior()Z
+HPLcom/android/server/wm/LetterboxUiController;->getLetterboxInnerBounds(Landroid/graphics/Rect;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]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;->getRoundedCornersRadius(Lcom/android/server/wm/WindowState;)I+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/LetterboxConfiguration;Lcom/android/server/wm/LetterboxConfiguration;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/LetterboxUiController;->hasInheritedLetterboxBehavior()Z
 HPLcom/android/server/wm/LetterboxUiController;->hasWallpaperBackgroundForLetterbox()Z
+HPLcom/android/server/wm/LetterboxUiController;->isFromDoubleTap()Z
 HPLcom/android/server/wm/LetterboxUiController;->isFullyTransparentBarAllowed(Landroid/graphics/Rect;)Z
-HSPLcom/android/server/wm/LetterboxUiController;->isLetterboxedNotForDisplayCutout(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;->isSurfaceVisible(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;]Lcom/android/server/wm/WindowContainer;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/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;]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;->overrideOrientationIfNeeded(I)I+]Ljava/lang/Boolean;Ljava/lang/Boolean;
-HSPLcom/android/server/wm/LetterboxUiController;->requiresRoundedCorners(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]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
-HSPLcom/android/server/wm/LetterboxUiController;->updateLetterboxSurface(Lcom/android/server/wm/WindowState;Landroid/view/SurfaceControl$Transaction;)V
-HSPLcom/android/server/wm/LetterboxUiController;->updateRoundedCornersIfNeeded(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/ActivityRecord;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
-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/LetterboxUiController;->isHorizontalReachabilityEnabled()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
+HPLcom/android/server/wm/LetterboxUiController;->isHorizontalReachabilityEnabled(Landroid/content/res/Configuration;)Z+]Lcom/android/server/wm/LetterboxConfiguration;Lcom/android/server/wm/LetterboxConfiguration;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/LetterboxUiController;->isLetterboxDoubleTapEducationEnabled()Z+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
+HPLcom/android/server/wm/LetterboxUiController;->isLetterboxedNotForDisplayCutout(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;->isSurfaceReadyToShow(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/LetterboxUiController;->isSurfaceVisible(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/LetterboxUiController;->isVerticalReachabilityEnabled()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
+HPLcom/android/server/wm/LetterboxUiController;->isVerticalReachabilityEnabled(Landroid/content/res/Configuration;)Z+]Lcom/android/server/wm/LetterboxConfiguration;Lcom/android/server/wm/LetterboxConfiguration;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+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/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]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;
+HPLcom/android/server/wm/LetterboxUiController;->overrideOrientationIfNeeded(I)I+]Ljava/lang/Boolean;Ljava/lang/Boolean;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HPLcom/android/server/wm/LetterboxUiController;->requiresRoundedCorners(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/LetterboxConfiguration;Lcom/android/server/wm/LetterboxConfiguration;
+HPLcom/android/server/wm/LetterboxUiController;->shouldEnableWithOptInOverrideAndOptOutProperty(Ljava/util/function/BooleanSupplier;ZLjava/lang/Boolean;)Z+]Ljava/util/function/BooleanSupplier;megamorphic_types]Ljava/lang/Boolean;Ljava/lang/Boolean;
+HPLcom/android/server/wm/LetterboxUiController;->shouldLetterboxHaveRoundedCorners()Z
+HPLcom/android/server/wm/LetterboxUiController;->shouldOverrideForceNonResizeApp()Z
+HPLcom/android/server/wm/LetterboxUiController;->shouldOverrideForceResizeApp()Z
+HPLcom/android/server/wm/LetterboxUiController;->shouldOverrideMinAspectRatio()Z
+HPLcom/android/server/wm/LetterboxUiController;->shouldSendFakeFocus()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;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/LetterboxUiController;->updateLetterboxSurface(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/LetterboxUiController;->updateLetterboxSurface(Lcom/android/server/wm/WindowState;Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/LetterboxUiController;->updateRoundedCornersIfNeeded(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/ActivityRecord;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
+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/LockTaskController$LockTaskToken;-><init>()V
 HSPLcom/android/server/wm/LockTaskController$LockTaskToken;-><init>(Lcom/android/server/wm/LockTaskController$LockTaskToken-IA;)V
 HSPLcom/android/server/wm/LockTaskController;-><clinit>()V
 HSPLcom/android/server/wm/LockTaskController;-><init>(Landroid/content/Context;Lcom/android/server/wm/ActivityTaskSupervisor;Landroid/os/Handler;Lcom/android/server/wm/TaskChangeNotificationController;)V
+HSPLcom/android/server/wm/LockTaskController;->getLockTaskAuth(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)I
 HSPLcom/android/server/wm/MirrorActiveUids;-><init>()V
 HPLcom/android/server/wm/MirrorActiveUids;->hasNonAppVisibleWindow(I)Z+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HSPLcom/android/server/wm/MirrorActiveUids;->onNonAppSurfaceVisibilityChanged(IZ)V
@@ -11229,7 +11795,8 @@
 HSPLcom/android/server/wm/MirrorActiveUids;->onUidProcStateChanged(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HSPLcom/android/server/wm/PackageConfigPersister;-><clinit>()V
 HSPLcom/android/server/wm/PackageConfigPersister;-><init>(Lcom/android/server/wm/PersisterQueue;Lcom/android/server/wm/ActivityTaskManagerService;)V
-HSPLcom/android/server/wm/PackageConfigPersister;->findRecord(Landroid/util/SparseArray;Ljava/lang/String;I)Lcom/android/server/wm/PackageConfigPersister$PackageConfigRecord;
+HSPLcom/android/server/wm/PackageConfigPersister;->findPackageConfiguration(Ljava/lang/String;I)Lcom/android/server/wm/ActivityTaskManagerInternal$PackageConfig;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/PackageConfigPersister;Lcom/android/server/wm/PackageConfigPersister;
+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;
 HSPLcom/android/server/wm/PackageConfigPersister;->updateConfigIfNeeded(Lcom/android/server/wm/ConfigurationContainer;ILjava/lang/String;)V
 HSPLcom/android/server/wm/PendingRemoteAnimationRegistry;-><init>(Lcom/android/server/wm/WindowManagerGlobalLock;Landroid/os/Handler;)V
 HSPLcom/android/server/wm/PersisterQueue$$ExternalSyntheticLambda1;-><init>()V
@@ -11239,103 +11806,152 @@
 HSPLcom/android/server/wm/PersisterQueue;-><clinit>()V
 HSPLcom/android/server/wm/PersisterQueue;-><init>()V
 HSPLcom/android/server/wm/PersisterQueue;-><init>(JJ)V
+HPLcom/android/server/wm/PersisterQueue;->addItem(Lcom/android/server/wm/PersisterQueue$WriteQueueItem;Z)V
 HSPLcom/android/server/wm/PersisterQueue;->addListener(Lcom/android/server/wm/PersisterQueue$Listener;)V
+HPLcom/android/server/wm/PersisterQueue;->findLastItem(Ljava/util/function/Predicate;Ljava/lang/Class;)Lcom/android/server/wm/PersisterQueue$WriteQueueItem;
 HSPLcom/android/server/wm/PersisterQueue;->processNextItem()V
-HPLcom/android/server/wm/PointerEventDispatcher;->onInputEvent(Landroid/view/InputEvent;)V+]Landroid/view/InputEventReceiver;Lcom/android/server/wm/PointerEventDispatcher;]Landroid/view/WindowManagerPolicyConstants$PointerEventListener;Lcom/android/server/wm/TaskTapPointerEventListener;,Lcom/android/server/wm/RecentTasks$1;,Lcom/android/server/wm/WindowManagerService$MousePositionTracker;,Lcom/android/server/wm/SystemGesturesPointerEventListener;]Landroid/view/InputEvent;Landroid/view/MotionEvent;
+HPLcom/android/server/wm/PinnedTaskController;->setAdjustedForIme(ZI)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;
 HSPLcom/android/server/wm/RecentTasks$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/RecentTasks;)V
 HSPLcom/android/server/wm/RecentTasks$$ExternalSyntheticLambda1;-><init>()V
 HSPLcom/android/server/wm/RecentTasks$1;-><init>(Lcom/android/server/wm/RecentTasks;)V
-HPLcom/android/server/wm/RecentTasks$1;->onPointerEvent(Landroid/view/MotionEvent;)V+]Landroid/os/Handler;Lcom/android/server/wm/ActivityTaskManagerService$H;]Lcom/android/internal/util/function/pooled/PooledRunnable;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HPLcom/android/server/wm/RecentTasks$1;->onPointerEvent(Landroid/view/MotionEvent;)V+]Landroid/os/Handler;Lcom/android/server/wm/ActivityTaskManagerService$H;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HPLcom/android/server/wm/RecentTasks;->-$$Nest$fgetmFreezeTaskListReordering(Lcom/android/server/wm/RecentTasks;)Z
 HSPLcom/android/server/wm/RecentTasks;-><clinit>()V
 HSPLcom/android/server/wm/RecentTasks;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskSupervisor;)V
-HSPLcom/android/server/wm/RecentTasks;->add(Lcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/RecentTasks;->createRecentTaskInfo(Lcom/android/server/wm/Task;ZZ)Landroid/app/ActivityManager$RecentTaskInfo;
-HPLcom/android/server/wm/RecentTasks;->getRecentTasksImpl(IIZII)Ljava/util/ArrayList;
+HPLcom/android/server/wm/RecentTasks;->add(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/RecentTasks;->createRecentTaskInfo(Lcom/android/server/wm/Task;ZZ)Landroid/app/ActivityManager$RecentTaskInfo;+]Landroid/app/ActivityManager$RecentTaskInfo$PersistedTaskSnapshotData;Landroid/app/ActivityManager$RecentTaskInfo$PersistedTaskSnapshotData;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
+HPLcom/android/server/wm/RecentTasks;->getAppTasksList(ILjava/lang/String;)Ljava/util/ArrayList;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IAppTask$Stub;Lcom/android/server/wm/AppTaskImpl;
+HPLcom/android/server/wm/RecentTasks;->getProfileIds(I)Ljava/util/Set;
+HPLcom/android/server/wm/RecentTasks;->getRecentTasksImpl(IIZII)Ljava/util/ArrayList;+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/RecentTasks;Lcom/android/server/wm/RecentTasks;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/wm/RecentTasks;->isCallerRecents(I)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;->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/Task;Lcom/android/server/wm/Task;]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;
 HSPLcom/android/server/wm/RecentTasks;->loadParametersFromResources(Landroid/content/res/Resources;)V
+HPLcom/android/server/wm/RecentTasks;->notifyTaskPersisterLocked(Lcom/android/server/wm/Task;Z)V
 HSPLcom/android/server/wm/RecentTasks;->registerCallback(Lcom/android/server/wm/RecentTasks$Callbacks;)V
-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;->syncPersistentTaskIdsLocked()V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/wm/RecentTasks;->usersWithRecentsLoadedLocked()[I+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/wm/RefreshRatePolicy$FrameRateVote;->refreshRateEquals(F)Z
-HSPLcom/android/server/wm/RefreshRatePolicy$FrameRateVote;->reset()Z
-HSPLcom/android/server/wm/RefreshRatePolicy$FrameRateVote;->update(FI)Z
+HSPLcom/android/server/wm/RefreshRatePolicy$FrameRateVote;->reset()Z+]Lcom/android/server/wm/RefreshRatePolicy$FrameRateVote;Lcom/android/server/wm/RefreshRatePolicy$FrameRateVote;
+HSPLcom/android/server/wm/RefreshRatePolicy$FrameRateVote;->update(FI)Z+]Lcom/android/server/wm/RefreshRatePolicy$FrameRateVote;Lcom/android/server/wm/RefreshRatePolicy$FrameRateVote;
 HSPLcom/android/server/wm/RefreshRatePolicy$PackageRefreshRate;->get(Ljava/lang/String;)Landroid/view/SurfaceControl$RefreshRateRange;+]Ljava/util/HashMap;Ljava/util/HashMap;
 HSPLcom/android/server/wm/RefreshRatePolicy;->calculatePriority(Lcom/android/server/wm/WindowState;)I
 HSPLcom/android/server/wm/RefreshRatePolicy;->getPreferredMaxRefreshRate(Lcom/android/server/wm/WindowState;)F+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/RefreshRatePolicy$PackageRefreshRate;Lcom/android/server/wm/RefreshRatePolicy$PackageRefreshRate;
 HSPLcom/android/server/wm/RefreshRatePolicy;->getPreferredMinRefreshRate(Lcom/android/server/wm/WindowState;)F+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/RefreshRatePolicy$PackageRefreshRate;Lcom/android/server/wm/RefreshRatePolicy$PackageRefreshRate;
-HSPLcom/android/server/wm/RefreshRatePolicy;->getPreferredModeId(Lcom/android/server/wm/WindowState;)I+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/Display$Mode;Landroid/view/Display$Mode;
-HSPLcom/android/server/wm/RefreshRatePolicy;->updateFrameRateVote(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/HighRefreshRateDenylist;Lcom/android/server/wm/HighRefreshRateDenylist;]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Lcom/android/server/wm/RefreshRatePolicy$FrameRateVote;Lcom/android/server/wm/RefreshRatePolicy$FrameRateVote;]Landroid/view/Display$Mode;Landroid/view/Display$Mode;
-HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda14;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/RefreshRatePolicy;->getPreferredModeId(Lcom/android/server/wm/WindowState;)I+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;
+HSPLcom/android/server/wm/RefreshRatePolicy;->updateFrameRateVote(Lcom/android/server/wm/WindowState;)Z+]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/HighRefreshRateDenylist;Lcom/android/server/wm/HighRefreshRateDenylist;]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Lcom/android/server/wm/RefreshRatePolicy$FrameRateVote;Lcom/android/server/wm/RefreshRatePolicy$FrameRateVote;
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/wm/Task;[ZZLandroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda11;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda15;-><init>(Lcom/android/server/wm/Task;[Z[I)V
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda15;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda16;-><init>([ILandroid/app/ActivityTaskManager$RootTaskInfo;)V
 HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda16;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda19;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda34;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda44;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda22;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda25;-><init>(Lcom/android/server/policy/PermissionPolicyInternal;ILjava/lang/String;[I)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda25;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda31;-><init>([Z)V
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda31;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;->accept(Lcom/android/server/wm/Task;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;->process(Lcom/android/server/wm/WindowProcessController;)Z
+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
-HSPLcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;->test(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;->test(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;->test(Ljava/lang/Object;)Z
+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
 HSPLcom/android/server/wm/RootWindowContainer$MyHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/os/PowerManagerInternal;Lcom/android/server/power/PowerManagerService$LocalService;]Ljava/lang/Long;Ljava/lang/Long;
-HSPLcom/android/server/wm/RootWindowContainer;->allPausedActivitiesComplete()Z
-HSPLcom/android/server/wm/RootWindowContainer;->allResumedActivitiesIdle()Z
+HPLcom/android/server/wm/RootWindowContainer$RankTaskLayersRunnable;->run()V
+HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$vD6FbR4840aks9LZzFBGV8DCdrQ(Lcom/android/server/wm/DisplayContent;)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/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+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+]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/RootWindowContainer;->applySurfaceChangesTransaction()V+]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/StrictModeFlash;Lcom/android/server/wm/StrictModeFlash;
 HSPLcom/android/server/wm/RootWindowContainer;->attachApplication(Lcom/android/server/wm/WindowProcessController;)Z
 HSPLcom/android/server/wm/RootWindowContainer;->checkAppTransitionReady(Lcom/android/server/wm/WindowSurfacePlacer;)V+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;]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;
 HSPLcom/android/server/wm/RootWindowContainer;->copyAnimToLayoutParams()Z
-HSPLcom/android/server/wm/RootWindowContainer;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZ)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
 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;
-HSPLcom/android/server/wm/RootWindowContainer;->getActivityRecord(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/RootWindowContainer;->getActivityRecord(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/RootWindowContainer;->getDisplayContent(I)Lcom/android/server/wm/DisplayContent;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HPLcom/android/server/wm/RootWindowContainer;->getRootTask(I)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/RootWindowContainer;->getRootTask(II)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;->getRootTaskInfo(I)Landroid/app/ActivityTaskManager$RootTaskInfo;
 HPLcom/android/server/wm/RootWindowContainer;->getRootTaskInfo(Lcom/android/server/wm/Task;)Landroid/app/ActivityTaskManager$RootTaskInfo;
-HSPLcom/android/server/wm/RootWindowContainer;->getRunningTasks(ILjava/util/List;IILandroid/util/ArraySet;I)V
+HSPLcom/android/server/wm/RootWindowContainer;->getRunningTasks(ILjava/util/List;IILandroid/util/ArraySet;I)V+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/RunningTasks;Lcom/android/server/wm/RunningTasks;
 HSPLcom/android/server/wm/RootWindowContainer;->getTaskToShowPermissionDialogOn(Ljava/lang/String;I)I
-HSPLcom/android/server/wm/RootWindowContainer;->getTopDisplayFocusedRootTask()Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/RootWindowContainer;->getTopResumedActivity()Lcom/android/server/wm/ActivityRecord;
-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;->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;
+HPLcom/android/server/wm/RootWindowContainer;->getTopResumedActivity()Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/RootWindowContainer;->getWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/WindowToken;+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/RootWindowContainer;->getWindowTokenDisplay(Lcom/android/server/wm/WindowToken;)Lcom/android/server/wm/DisplayContent;
 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;->hasPendingLayoutChanges(Lcom/android/server/wm/WindowAnimator;)Z+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/RootWindowContainer;->invalidateTaskLayers()V
 HSPLcom/android/server/wm/RootWindowContainer;->isLayoutNeeded()Z+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/RootWindowContainer;->lambda$allPausedActivitiesComplete$36([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$getRootTaskInfo$22([ILandroid/app/ActivityTaskManager$RootTaskInfo;Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/RootWindowContainer;->lambda$getTaskToShowPermissionDialogOn$40(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/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$getTaskToShowPermissionDialogOn$41(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;
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$performSurfacePlacementNoTrace$7(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/RootWindowContainer;->lambda$rankTaskLayers$28(Lcom/android/server/wm/Task;)V+]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;
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$resumeFocusedTasksTopActivities$17(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$updateDisplayImePolicyCache$25(Landroid/util/ArrayMap;Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/RootWindowContainer;->onDisplayChanged(I)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/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/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/BackNavigationController;Lcom/android/server/wm/BackNavigationController;]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;->rankTaskLayers()V
+HSPLcom/android/server/wm/RootWindowContainer;->performSurfacePlacementNoTrace()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Handler;Lcom/android/server/wm/RootWindowContainer$MyHandler;]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/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/BackNavigationController;Lcom/android/server/wm/BackNavigationController;]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;
+HPLcom/android/server/wm/RootWindowContainer;->rankTaskLayers()V
+HPLcom/android/server/wm/RootWindowContainer;->removeSleepToken(Lcom/android/server/wm/RootWindowContainer$SleepToken;)V
 HSPLcom/android/server/wm/RootWindowContainer;->resumeFocusedTasksTopActivities(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)Z
+HPLcom/android/server/wm/RootWindowContainer;->startPowerModeLaunchIfNeeded(ZLcom/android/server/wm/ActivityRecord;)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;
 HSPLcom/android/server/wm/RootWindowContainer;->updateUIDsPresentOnDisplay()V
 HSPLcom/android/server/wm/RunningTasks$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/RunningTasks;)V
 HSPLcom/android/server/wm/RunningTasks$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/RunningTasks;-><init>()V
-HSPLcom/android/server/wm/RunningTasks;->accept(Lcom/android/server/wm/Task;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/RecentTasks;Lcom/android/server/wm/RecentTasks;
+HSPLcom/android/server/wm/RunningTasks;->accept(Lcom/android/server/wm/Task;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/RunningTasks;->accept(Ljava/lang/Object;)V+]Lcom/android/server/wm/RunningTasks;Lcom/android/server/wm/RunningTasks;
 HPLcom/android/server/wm/RunningTasks;->createRunningTaskInfo(Lcom/android/server/wm/Task;J)Landroid/app/ActivityManager$RunningTaskInfo;
 HSPLcom/android/server/wm/RunningTasks;->getTasks(ILjava/util/List;ILcom/android/server/wm/RecentTasks;Lcom/android/server/wm/WindowContainer;ILandroid/util/ArraySet;)V+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/RunningTasks;Lcom/android/server/wm/RunningTasks;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HSPLcom/android/server/wm/RunningTasks;->lambda$getTasks$0(Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/SafeActivityOptions;-><init>(Landroid/app/ActivityOptions;)V
+HPLcom/android/server/wm/SafeActivityOptions;->checkPermissions(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/ActivityTaskSupervisor;Landroid/app/ActivityOptions;II)V
 HPLcom/android/server/wm/Session$$ExternalSyntheticLambda3;-><init>(F)V
 HPLcom/android/server/wm/Session$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/wm/Session;->$r8$lambda$3mCyETVElt7RYfRjrQFo6XLjm8E(FLcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/Session;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/IWindowSessionCallback;)V
-HSPLcom/android/server/wm/Session;->actionOnWallpaper(Landroid/os/IBinder;Ljava/util/function/BiConsumer;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Ljava/util/function/BiConsumer;Lcom/android/server/wm/Session$$ExternalSyntheticLambda5;,Lcom/android/server/wm/Session$$ExternalSyntheticLambda4;,Lcom/android/server/wm/Session$$ExternalSyntheticLambda3;,Lcom/android/server/wm/Session$$ExternalSyntheticLambda1;
+HPLcom/android/server/wm/Session;->actionOnWallpaper(Landroid/os/IBinder;Ljava/util/function/BiConsumer;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Ljava/util/function/BiConsumer;Lcom/android/server/wm/Session$$ExternalSyntheticLambda5;,Lcom/android/server/wm/Session$$ExternalSyntheticLambda4;,Lcom/android/server/wm/Session$$ExternalSyntheticLambda3;,Lcom/android/server/wm/Session$$ExternalSyntheticLambda1;
 HSPLcom/android/server/wm/Session;->finishDrawing(Landroid/view/IWindow;Landroid/view/SurfaceControl$Transaction;I)V
 HPLcom/android/server/wm/Session;->lambda$setWallpaperZoomOut$1(FLcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/Session;->onRectangleOnScreenRequested(Landroid/os/IBinder;Landroid/graphics/Rect;)V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
 HSPLcom/android/server/wm/Session;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLcom/android/server/wm/Session;->relayout(Landroid/view/IWindow;Landroid/view/WindowManager$LayoutParams;IIIIIILandroid/window/ClientWindowFrames;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;Landroid/view/InsetsSourceControl$Array;Landroid/os/Bundle;)I
-HPLcom/android/server/wm/Session;->reportSystemGestureExclusionChanged(Landroid/view/IWindow;Ljava/util/List;)V
-HSPLcom/android/server/wm/Session;->setInsets(Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
+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;
+HPLcom/android/server/wm/Session;->performHapticFeedback(IZ)Z
+HSPLcom/android/server/wm/Session;->relayout(Landroid/view/IWindow;Landroid/view/WindowManager$LayoutParams;IIIIIILandroid/window/ClientWindowFrames;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;Landroid/view/InsetsSourceControl$Array;Landroid/os/Bundle;)I+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
+HPLcom/android/server/wm/Session;->reportSystemGestureExclusionChanged(Landroid/view/IWindow;Ljava/util/List;)V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
+HPLcom/android/server/wm/Session;->setInsets(Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
 HSPLcom/android/server/wm/Session;->setOnBackInvokedCallbackInfo(Landroid/view/IWindow;Landroid/window/OnBackInvokedCallbackInfo;)V
 HPLcom/android/server/wm/Session;->setWallpaperZoomOut(Landroid/os/IBinder;F)V+]Lcom/android/server/wm/Session;Lcom/android/server/wm/Session;
 HPLcom/android/server/wm/Session;->updateRequestedVisibleTypes(Landroid/view/IWindow;I)V
+HSPLcom/android/server/wm/Session;->windowAddedLocked()V
+HPLcom/android/server/wm/SnapshotCache;->getSnapshot(Ljava/lang/Integer;)Landroid/window/TaskSnapshot;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLcom/android/server/wm/SnapshotPersistQueue$1;->run()V
 HPLcom/android/server/wm/SnapshotPersistQueue$StoreWriteQueueItem;->writeBuffer()Z
 HPLcom/android/server/wm/SnapshotPersistQueue$StoreWriteQueueItem;->writeProto()Z
+HPLcom/android/server/wm/SnapshotPersistQueue;->setPaused(Z)V
+HPLcom/android/server/wm/SurfaceAnimationRunner$$ExternalSyntheticLambda1;->run()V
+HPLcom/android/server/wm/SurfaceAnimationRunner$$ExternalSyntheticLambda6;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
+HPLcom/android/server/wm/SurfaceAnimationRunner;->applyTransformation(Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;Landroid/view/SurfaceControl$Transaction;J)V+]Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;Lcom/android/server/wm/WindowAnimationSpec;,Lcom/android/server/wm/FadeAnimationController$1;,Lcom/android/server/wm/Dimmer$AlphaAnimationSpec;,Lcom/android/server/wm/WindowState$MoveAnimationSpec;
 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;
-HPLcom/android/server/wm/SurfaceAnimationRunner;->onAnimationLeashLost(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/SurfaceAnimationRunner;->onAnimationLeashLost(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HPLcom/android/server/wm/SurfaceAnimationRunner;->scheduleApplyTransaction()V+]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HPLcom/android/server/wm/SurfaceAnimationRunner;->startAnimation(Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;Ljava/lang/Runnable;)V
 HSPLcom/android/server/wm/SurfaceAnimationThread;-><init>()V
@@ -11344,20 +11960,25 @@
 HSPLcom/android/server/wm/SurfaceAnimationThread;->getHandler()Landroid/os/Handler;
 HSPLcom/android/server/wm/SurfaceAnimator$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
 HSPLcom/android/server/wm/SurfaceAnimator;-><init>(Lcom/android/server/wm/SurfaceAnimator$Animatable;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;Lcom/android/server/wm/WindowManagerService;)V
-HSPLcom/android/server/wm/SurfaceAnimator;->cancelAnimation(Landroid/view/SurfaceControl$Transaction;ZZ)V
-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;
+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;Lcom/android/server/wm/TaskOrganizerController$StartingWindowAnimationAdaptor;,Lcom/android/server/wm/LocalAnimationAdapter;,Lcom/android/server/wm/InsetsSourceProvider$ControlAdapter;,Lcom/android/server/wm/FadeAnimationController$FadeAnimationAdapter;]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/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator;
+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;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Dimmer$DimAnimatable;,Lcom/android/server/wm/WindowToken;
 HSPLcom/android/server/wm/SurfaceAnimator;->getFinishedCallback(Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;
 HSPLcom/android/server/wm/SurfaceAnimator;->hasLeash()Z
 HSPLcom/android/server/wm/SurfaceAnimator;->isAnimating()Z
 HPLcom/android/server/wm/SurfaceAnimator;->lambda$getFinishedCallback$1(Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;ILcom/android/server/wm/AnimationAdapter;)V
-HPLcom/android/server/wm/SurfaceAnimator;->removeLeash(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/SurfaceAnimator$Animatable;Landroid/view/SurfaceControl;Z)Z
-HSPLcom/android/server/wm/SurfaceAnimator;->reset(Landroid/view/SurfaceControl$Transaction;Z)V
-HPLcom/android/server/wm/SurfaceAnimator;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;Ljava/lang/Runnable;Lcom/android/server/wm/AnimationAdapter;Lcom/android/server/wm/SurfaceFreezer;)V
+HPLcom/android/server/wm/SurfaceAnimator;->removeLeash(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/SurfaceAnimator$Animatable;Landroid/view/SurfaceControl;Z)Z+]Ljava/lang/Object;Landroid/view/SurfaceControl;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Lcom/android/server/wm/SurfaceAnimator$Animatable;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Dimmer$DimAnimatable;,Lcom/android/server/wm/WindowToken;
+HSPLcom/android/server/wm/SurfaceAnimator;->reset(Landroid/view/SurfaceControl$Transaction;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
+HPLcom/android/server/wm/SurfaceAnimator;->setRelativeLayer(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;I)V
+HPLcom/android/server/wm/SurfaceAnimator;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;Ljava/lang/Runnable;Lcom/android/server/wm/AnimationAdapter;Lcom/android/server/wm/SurfaceFreezer;)V+]Lcom/android/server/wm/AnimationAdapter;megamorphic_types]Lcom/android/server/wm/SurfaceFreezer;Lcom/android/server/wm/SurfaceFreezer;]Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator;]Lcom/android/server/wm/SurfaceAnimator$Animatable;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Dimmer$DimAnimatable;,Lcom/android/server/wm/WindowToken;
 HSPLcom/android/server/wm/SurfaceFreezer;-><init>(Lcom/android/server/wm/SurfaceFreezer$Freezable;Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/SurfaceFreezer;->hasLeash()Z
+HPLcom/android/server/wm/SurfaceFreezer;->takeLeashForAnimation()Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/SurfaceFreezer;->unfreeze(Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/SurfaceFreezer;->unfreezeInner(Landroid/view/SurfaceControl$Transaction;)V
 HPLcom/android/server/wm/SystemGesturesPointerEventListener$FlingGestureDetector;->onFling(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
-HPLcom/android/server/wm/SystemGesturesPointerEventListener;->captureDown(Landroid/view/MotionEvent;I)V
+HPLcom/android/server/wm/SystemGesturesPointerEventListener;->captureDown(Landroid/view/MotionEvent;I)V+]Lcom/android/server/wm/SystemGesturesPointerEventListener;Lcom/android/server/wm/SystemGesturesPointerEventListener;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 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;->findIndex(I)I
@@ -11365,98 +11986,112 @@
 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/Task$$ExternalSyntheticLambda14;-><init>()V
-HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda14;->test(Ljava/lang/Object;)Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda14;->test(Ljava/lang/Object;)Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda16;-><init>(Lcom/android/server/wm/ActivityRecord;IZZ)V
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda16;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda18;->test(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda18;->test(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda20;-><init>()V
-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$$ExternalSyntheticLambda28;-><init>()V
-HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda28;->test(Ljava/lang/Object;)Z
-HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda37;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda38;-><init>(Lcom/android/server/wm/TaskFragment;[ZLcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)V
-HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda38;->accept(Ljava/lang/Object;)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$$ExternalSyntheticLambda27;-><init>()V
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda27;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda30;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda36;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda37;-><init>(Lcom/android/server/wm/TaskFragment;[ZLcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)V
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda37;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda3;-><init>()V
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda3;->test(Ljava/lang/Object;)Z
-HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda8;-><init>(Z[I)V
-HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda8;-><init>(Z[I)V
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)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;
 HSPLcom/android/server/wm/Task$FindRootHelper;->findRoot(ZZ)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
-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;->$r8$lambda$02qk-9XodTdgz4ZzhgdsM9xBP20(Lcom/android/server/wm/ActivityRecord;)Z
+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;
+HPLcom/android/server/wm/Task;->$r8$lambda$02qk-9XodTdgz4ZzhgdsM9xBP20(Lcom/android/server/wm/ActivityRecord;)Z
 HSPLcom/android/server/wm/Task;->$r8$lambda$glAS06h6u0gde7lZWW7SuxTbP1w(Lcom/android/server/wm/ActivityRecord;IZZLcom/android/server/wm/Task;)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;->asTask()Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->canAffectSystemUiFlags()Z
-HSPLcom/android/server/wm/Task;->checkTranslucentActivityWaiting(Lcom/android/server/wm/ActivityRecord;)V+]Landroid/os/Handler;Lcom/android/server/wm/Task$ActivityTaskHandler;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-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;
-HSPLcom/android/server/wm/Task;->dispatchTaskInfoChangedIfNeeded(Z)V
+HPLcom/android/server/wm/Task;->checkTranslucentActivityWaiting(Lcom/android/server/wm/ActivityRecord;)V+]Landroid/os/Handler;Lcom/android/server/wm/Task$ActivityTaskHandler;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
+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;
+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;
 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;
 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/ActivityTaskSupervisor$TaskInfoHelper;Lcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;]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;]Lcom/android/server/wm/TaskFragment;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;]Lcom/android/server/wm/LetterboxConfiguration;Lcom/android/server/wm/LetterboxConfiguration;
-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;
-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$$ExternalSyntheticLambda34;,Lcom/android/server/wm/RootWindowContainer$FindTaskResult;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda37;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+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/ActivityTaskSupervisor$TaskInfoHelper;Lcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;]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;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/app/PictureInPictureParams;Landroid/app/PictureInPictureParams;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]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;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/LetterboxConfiguration;Lcom/android/server/wm/LetterboxConfiguration;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+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;
+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$$ExternalSyntheticLambda31;,Lcom/android/server/wm/RootWindowContainer$FindTaskResult;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda35;]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
-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/DisplayContent$TaskForResizePointSearchResult;,Lcom/android/server/wm/DisplayArea$Dimmable$$ExternalSyntheticLambda0;,Lcom/android/server/wm/WindowOrganizerController$$ExternalSyntheticLambda11;,Lcom/android/server/wm/Transition$$ExternalSyntheticLambda0;
+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$$ExternalSyntheticLambda30;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda15;,Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda41;
+HSPLcom/android/server/wm/Task;->forAllTasks(Ljava/util/function/Consumer;Z)V+]Ljava/util/function/Consumer;Lcom/android/server/wm/TaskSnapshotController$$ExternalSyntheticLambda1;,Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda39;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda27;,Lcom/android/server/wm/TaskOrganizerController$$ExternalSyntheticLambda3;
+HPLcom/android/server/wm/Task;->getAdjacentTask()Lcom/android/server/wm/Task;+]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;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 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
-HSPLcom/android/server/wm/Task;->getDimBounds(Landroid/graphics/Rect;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]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;
+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;
+HPLcom/android/server/wm/Task;->getDescendantTaskCount()I
+HPLcom/android/server/wm/Task;->getDimBounds(Landroid/graphics/Rect;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]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;
 HSPLcom/android/server/wm/Task;->getDisplayCutoutInsets()Landroid/graphics/Rect;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/DisplayCutout;Landroid/view/DisplayCutout;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->getDisplayInfo()Landroid/view/DisplayInfo;+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/Task;->getName()Ljava/lang/String;
-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;->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;->getPictureInPictureParams(Lcom/android/server/wm/ActivityRecord;)Landroid/app/PictureInPictureParams;+]Landroid/app/PictureInPictureParams;Landroid/app/PictureInPictureParams;
 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(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
 HSPLcom/android/server/wm/Task;->getRootTaskId()I
+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;
-HSPLcom/android/server/wm/Task;->getTopLeafTask()Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/Task;->getTopPausingActivity()Lcom/android/server/wm/ActivityRecord;+]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/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+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;->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;
+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;->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;
 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;
 HSPLcom/android/server/wm/Task;->isAlwaysOnTop()Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/Task;->isCompatible(II)Z
+HPLcom/android/server/wm/Task;->isCompatible(II)Z
 HSPLcom/android/server/wm/Task;->isFocused()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/Task;->isForceHidden()Z
-HSPLcom/android/server/wm/Task;->isForceTranslucent()Z
-HSPLcom/android/server/wm/Task;->isLeafTask()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HPLcom/android/server/wm/Task;->isForceTranslucent()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;->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;
 HSPLcom/android/server/wm/Task;->isOrganized()Z
 HSPLcom/android/server/wm/Task;->isResizeable()Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->isResizeable(Z)Z
 HSPLcom/android/server/wm/Task;->isRootTask()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/Task;->isTaskId(I)Z
 HSPLcom/android/server/wm/Task;->lambda$ensureActivitiesVisible$20(Lcom/android/server/wm/ActivityRecord;IZZLcom/android/server/wm/Task;)V
-HSPLcom/android/server/wm/Task;->lambda$getTopVisibleActivity$10(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/Task;->moveToFront(Ljava/lang/String;Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/Task;->lambda$getTopVisibleActivity$10(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/Task;->moveToFront(Ljava/lang/String;Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/Task;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/Task;->onConfigurationChangedInner(Landroid/content/res/Configuration;)V
 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
-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;]Lcom/android/server/wm/TrustedOverlayHost;Lcom/android/server/wm/TrustedOverlayHost;
-HSPLcom/android/server/wm/Task;->removeLaunchTickMessages()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/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/Dimmer;Lcom/android/server/wm/Dimmer;]Lcom/android/server/wm/TrustedOverlayHost;Lcom/android/server/wm/TrustedOverlayHost;
+HPLcom/android/server/wm/Task;->removeLaunchTickMessages()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->resolveLeafTaskOnlyOverrideConfigs(Landroid/content/res/Configuration;Landroid/graphics/Rect;)V
 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)Z
+HSPLcom/android/server/wm/Task;->saveLaunchingStateIfNeeded(Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/Task;->saveToXml(Lcom/android/modules/utils/TypedXmlSerializer;)V
-HSPLcom/android/server/wm/Task;->sendTaskFragmentParentInfoChangedIfNeeded()V+]Lcom/android/server/wm/TaskFragment;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;->sendTaskFragmentParentInfoChangedIfNeeded()V+]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;
 HSPLcom/android/server/wm/Task;->setIntent(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;)V
-HSPLcom/android/server/wm/Task;->setTaskDescriptionFromActivityAboveRoot(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityManager$TaskDescription;)Z
-HSPLcom/android/server/wm/Task;->shouldIgnoreInput()Z
+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;
+HPLcom/android/server/wm/Task;->shouldIgnoreInput()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;
+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
+HPLcom/android/server/wm/Task;->toString()Ljava/lang/String;
 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;->touchActiveTime()V
+HPLcom/android/server/wm/Task;->updateOverlayInsetsState(Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/Task;->updateSurfaceBounds()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/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;
-HSPLcom/android/server/wm/Task;->updateTaskDescription()V
+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/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController;
 HSPLcom/android/server/wm/Task;->updateTaskMovement(ZZI)V
 HSPLcom/android/server/wm/Task;->updateTaskOrganizerState(Z)Z
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda0;-><init>()V
@@ -11470,6 +12105,7 @@
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda17;-><init>()V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda18;-><init>()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$$ExternalSyntheticLambda1;-><init>()V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda20;-><init>()V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda21;-><init>()V
@@ -11488,226 +12124,313 @@
 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;
 HSPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$jxOOK1u4MJy5_9sX9CuWQfc2qS4(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;->-$$Nest$fgetmNotifyTaskDisplayChanged(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;
 HSPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$17(Landroid/app/ITaskStackListener;Landroid/os/Message;)V+]Landroid/app/ITaskStackListener;megamorphic_types
-HSPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$4(Landroid/app/ITaskStackListener;Landroid/os/Message;)V+]Landroid/app/ITaskStackListener;megamorphic_types
-HSPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskDescriptionChanged(Landroid/app/TaskInfo;)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$4(Landroid/app/ITaskStackListener;Landroid/os/Message;)V+]Landroid/app/ITaskStackListener;megamorphic_types
+HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskDescriptionChanged(Landroid/app/TaskInfo;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskDisplayChanged(II)V+]Landroid/os/Handler;Lcom/android/server/wm/TaskChangeNotificationController$MainHandler;]Landroid/os/Message;Landroid/os/Message;]Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController;
-HSPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskStackChanged()V
-HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda5;-><init>(II)V
-HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z
-HSPLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$uuiWs_4nNasIw8JPlnmaWMlPw4E(IILcom/android/server/wm/Task;)Z
+HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskStackChanged()V
+HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda5;-><init>(II)V
+HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/ActivityRecord;[I)V
+HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda6;->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;[I)V
+HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$uuiWs_4nNasIw8JPlnmaWMlPw4E(IILcom/android/server/wm/Task;)Z
 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;]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;
+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;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 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;]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;
-HSPLcom/android/server/wm/TaskDisplayArea;->canSpecifyOrientation(I)Z
+HSPLcom/android/server/wm/TaskDisplayArea;->canSpecifyOrientation(I)Z+]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/TaskDisplayArea;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZZ)V
 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
 HSPLcom/android/server/wm/TaskDisplayArea;->getDisplayId()I
+HPLcom/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;
-HSPLcom/android/server/wm/TaskDisplayArea;->getOrientation(I)I
-HSPLcom/android/server/wm/TaskDisplayArea;->getPriority(Lcom/android/server/wm/WindowContainer;)I
+HSPLcom/android/server/wm/TaskDisplayArea;->getOrientation(I)I+]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;->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;
 HSPLcom/android/server/wm/TaskDisplayArea;->getRootTask(II)Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;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;->getTopRootTask()Lcom/android/server/wm/Task;
+HPLcom/android/server/wm/TaskDisplayArea;->getTopRootTaskInWindowingMode(I)Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskDisplayArea;->isRemoved()Z
-HSPLcom/android/server/wm/TaskDisplayArea;->isRootTaskVisible(I)Z+]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;
-HSPLcom/android/server/wm/TaskDisplayArea;->lambda$getRootTask$0(IILcom/android/server/wm/Task;)Z
-HSPLcom/android/server/wm/TaskDisplayArea;->positionChildTaskAt(ILcom/android/server/wm/Task;Z)V
-HSPLcom/android/server/wm/TaskDisplayArea;->supportsActivityMinWidthHeightMultiWindow(IILandroid/content/pm/ActivityInfo;)Z+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;
+HPLcom/android/server/wm/TaskDisplayArea;->isRootTaskVisible(I)Z
+HPLcom/android/server/wm/TaskDisplayArea;->lambda$getRootTask$0(IILcom/android/server/wm/Task;)Z
+HPLcom/android/server/wm/TaskDisplayArea;->lambda$pauseBackTasks$6(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;->onLeafTaskMoved(Lcom/android/server/wm/Task;ZZ)V
+HPLcom/android/server/wm/TaskDisplayArea;->positionChildTaskAt(ILcom/android/server/wm/Task;Z)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
+HSPLcom/android/server/wm/TaskDisplayArea;->topRunningActivity(Z)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;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;]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;
+HPLcom/android/server/wm/TaskDisplayArea;->updateLastFocusedRootTask(Lcom/android/server/wm/Task;Ljava/lang/String;)V
 HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda1;-><init>()V
-HPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z+]Ljava/lang/Boolean;Ljava/lang/Boolean;
-HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda2;-><init>()V
-HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
-HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/TaskFragment;->$r8$lambda$wtnka_eKbdSWDBS4F_2xXRE5Nhg(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Z)Z
-HSPLcom/android/server/wm/TaskFragment;->$r8$lambda$xsW-ASiDukYQdk0dDnG88QtD4m4(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/TaskFragment;->$r8$lambda$A_amJF75jP2Gx3YFzSNxCAFJgVI(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;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/os/IBinder;ZZ)V
+HSPLcom/android/server/wm/TaskFragment;->addChild(Lcom/android/server/wm/WindowContainer;I)V
 HSPLcom/android/server/wm/TaskFragment;->asTaskFragment()Lcom/android/server/wm/TaskFragment;
 HSPLcom/android/server/wm/TaskFragment;->calculateInsetFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayInfo;)V
-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;
-HSPLcom/android/server/wm/TaskFragment;->canSpecifyOrientation()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/TaskFragment;->completePause(ZLcom/android/server/wm/ActivityRecord;)V
+HPLcom/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;
+HSPLcom/android/server/wm/TaskFragment;->canSpecifyOrientation()Z+]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;
+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;Landroid/view/DisplayInfo;Lcom/android/server/wm/ActivityRecord$CompatDisplayInsets;)V
-HSPLcom/android/server/wm/TaskFragment;->fillsParent()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/TaskFragment;->forAllLeafTaskFragments(Ljava/util/function/Consumer;Z)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/TaskFragment;]Ljava/util/function/Consumer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-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;Lcom/android/server/wm/Task$$ExternalSyntheticLambda35;,Lcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda30;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda27;,Lcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda2;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HSPLcom/android/server/wm/TaskFragment;->getActivityType()I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]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;->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;megamorphic_types]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;Lcom/android/server/wm/Task$$ExternalSyntheticLambda34;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda25;,Lcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda30;,Lcom/android/server/wm/TaskFragmentOrganizerController$$ExternalSyntheticLambda0;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/TaskFragment;->getActivityType()I+]Lcom/android/server/wm/WindowContainer;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;->getAdjacentTaskFragment()Lcom/android/server/wm/TaskFragment;
-HSPLcom/android/server/wm/TaskFragment;->getDisplayArea()Lcom/android/server/wm/DisplayArea;+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
+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/TaskFragment;,Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/TaskFragment;->getOrganizedTaskFragment()Lcom/android/server/wm/TaskFragment;
-HSPLcom/android/server/wm/TaskFragment;->getOrientation(I)I+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
+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;->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;->getOrganizerProcessIfDifferent(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/WindowProcessController;
+HSPLcom/android/server/wm/TaskFragment;->getOrientation(I)I+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
+HPLcom/android/server/wm/TaskFragment;->getPausingActivity()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/TaskFragment;,Lcom/android/server/wm/Task;]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;
 HSPLcom/android/server/wm/TaskFragment;->getTaskFragment(Ljava/util/function/Predicate;)Lcom/android/server/wm/TaskFragment;+]Ljava/util/function/Predicate;Lcom/android/server/wm/Task$$ExternalSyntheticLambda3;
 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/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
-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;]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;
-HSPLcom/android/server/wm/TaskFragment;->handleCompleteDeferredRemoval()Z+]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/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;->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;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+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/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;
 HSPLcom/android/server/wm/TaskFragment;->intersectWithInsetsIfFits(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
-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;
+HSPLcom/android/server/wm/TaskFragment;->isEmbedded()Z
 HSPLcom/android/server/wm/TaskFragment;->isFocusableAndVisible()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/TaskFragment;->isLeafTaskFragment()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/ActivityRecord;]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)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;
 HSPLcom/android/server/wm/TaskFragment;->isOrganizedTaskFragment()Z
-HSPLcom/android/server/wm/TaskFragment;->isTopActivityFocusable()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/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+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;
-HSPLcom/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;
-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/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/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/TaskFragment;->lambda$getTopNonFinishingActivity$2(Lcom/android/server/wm/ActivityRecord;)Z
-HSPLcom/android/server/wm/TaskFragment;->lambda$topRunningActivity$4(Lcom/android/server/wm/ActivityRecord;)Z
-HSPLcom/android/server/wm/TaskFragment;->onActivityStateChanged(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord$State;Ljava/lang/String;)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;->providesOrientation()Z+]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/ActivityTaskSupervisor$OpaqueActivityHelper;Lcom/android/server/wm/ActivityTaskSupervisor$OpaqueActivityHelper;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
+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;->isTranslucentForTransition()Z
+HPLcom/android/server/wm/TaskFragment;->lambda$getTopNonFinishingActivity$2(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/TaskFragment;->lambda$topRunningActivity$4(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/RecentTasks;Lcom/android/server/wm/RecentTasks;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+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/Dimmer;Lcom/android/server/wm/Dimmer;
+HSPLcom/android/server/wm/TaskFragment;->providesOrientation()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
 HSPLcom/android/server/wm/TaskFragment;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
-HSPLcom/android/server/wm/TaskFragment;->resumeTopActivity(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)Z
-HSPLcom/android/server/wm/TaskFragment;->schedulePauseActivity(Lcom/android/server/wm/ActivityRecord;ZZZLjava/lang/String;)V
-HSPLcom/android/server/wm/TaskFragment;->setResumedActivity(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;)V
+HPLcom/android/server/wm/TaskFragment;->resumeTopActivity(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)Z
+HPLcom/android/server/wm/TaskFragment;->schedulePauseActivity(Lcom/android/server/wm/ActivityRecord;ZZZLjava/lang/String;)V
+HSPLcom/android/server/wm/TaskFragment;->sendTaskFragmentInfoChanged()V
+HPLcom/android/server/wm/TaskFragment;->setResumedActivity(Lcom/android/server/wm/ActivityRecord;Ljava/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;
-HSPLcom/android/server/wm/TaskFragment;->shouldDeferRemoval()Z+]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/TaskFragment;
+HSPLcom/android/server/wm/TaskFragment;->shouldDeferRemoval()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskFragment;->shouldReportOrientationUnspecified()Z
-HSPLcom/android/server/wm/TaskFragment;->startPausing(ZZLcom/android/server/wm/ActivityRecord;Ljava/lang/String;)Z
-HSPLcom/android/server/wm/TaskFragment;->supportsMultiWindowInDisplayArea(Lcom/android/server/wm/TaskDisplayArea;)Z+]Lcom/android/server/wm/TaskFragment;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;
-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/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
+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;->startPausing(ZZLcom/android/server/wm/ActivityRecord;Ljava/lang/String;)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/Task;,Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/TaskFragment;->topRunningActivity(Z)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;->warnForNonLeafTaskFragment(Ljava/lang/String;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskFragmentOrganizerController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/WindowOrganizerController;)V
 HSPLcom/android/server/wm/TaskFragmentOrganizerController;->dispatchPendingEvents()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Lcom/android/server/wm/TaskFragmentOrganizerController;Lcom/android/server/wm/TaskFragmentOrganizerController;
 HPLcom/android/server/wm/TaskFragmentOrganizerController;->dispatchPendingEvents(Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;Ljava/util/List;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;]Landroid/window/TaskFragmentTransaction;Landroid/window/TaskFragmentTransaction;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/TaskFragmentOrganizerController;Lcom/android/server/wm/TaskFragmentOrganizerController;]Lcom/android/server/wm/TaskFragmentOrganizerController$PendingTaskFragmentEvent$Builder;Lcom/android/server/wm/TaskFragmentOrganizerController$PendingTaskFragmentEvent$Builder;
 HPLcom/android/server/wm/TaskFragmentOrganizerController;->shouldDeferPendingEvents(Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;Ljava/util/List;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/wm/TaskFragmentOrganizerController;Lcom/android/server/wm/TaskFragmentOrganizerController;
+HPLcom/android/server/wm/TaskFragmentOrganizerController;->shouldSendEventWhenTaskInvisible(Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;Lcom/android/server/wm/TaskFragmentOrganizerController$PendingTaskFragmentEvent;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;]Landroid/window/TaskFragmentInfo;Landroid/window/TaskFragmentInfo;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/window/TaskFragmentParentInfo;Landroid/window/TaskFragmentParentInfo;]Ljava/util/Map;Ljava/util/WeakHashMap;
 HSPLcom/android/server/wm/TaskLaunchParamsModifier;-><init>(Lcom/android/server/wm/ActivityTaskSupervisor;)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;->getTaskBounds(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/TaskDisplayArea;Landroid/content/pm/ActivityInfo$WindowLayout;IZLandroid/graphics/Rect;)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;->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;
+HPLcom/android/server/wm/TaskLaunchParamsModifier;->getTaskBounds(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/TaskDisplayArea;Landroid/content/pm/ActivityInfo$WindowLayout;IZLandroid/graphics/Rect;)V
 HSPLcom/android/server/wm/TaskOrganizerController$PendingTaskEvent;-><init>(Lcom/android/server/wm/Task;I)V
 HSPLcom/android/server/wm/TaskOrganizerController$PendingTaskEvent;-><init>(Lcom/android/server/wm/Task;Landroid/window/ITaskOrganizer;I)V
-HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;->onTaskInfoChanged(Lcom/android/server/wm/Task;Landroid/app/ActivityManager$RunningTaskInfo;)V
+HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;->onTaskInfoChanged(Lcom/android/server/wm/Task;Landroid/app/ActivityManager$RunningTaskInfo;)V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;->addPendingTaskEvent(Lcom/android/server/wm/TaskOrganizerController$PendingTaskEvent;)V
-HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;->dispatchPendingEvent(Lcom/android/server/wm/TaskOrganizerController$PendingTaskEvent;)V
+HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;->dispatchPendingEvent(Lcom/android/server/wm/TaskOrganizerController$PendingTaskEvent;)V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;]Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;
 HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;->dispatchPendingEvents()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;
-HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;->dispatchTaskInfoChanged(Lcom/android/server/wm/Task;Z)V
-HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;->getPendingLifecycleTaskEvent(Lcom/android/server/wm/Task;)Lcom/android/server/wm/TaskOrganizerController$PendingTaskEvent;
+HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;->dispatchTaskInfoChanged(Lcom/android/server/wm/Task;Z)V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Landroid/app/ActivityManager$RunningTaskInfo;Landroid/app/ActivityManager$RunningTaskInfo;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;
+HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;->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$TaskOrganizerPendingEventsQueue;->removePendingTaskEvent(Lcom/android/server/wm/TaskOrganizerController$PendingTaskEvent;)V
 HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;->-$$Nest$fgetmPendingEventsQueue(Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;)Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;
 HSPLcom/android/server/wm/TaskOrganizerController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
 HSPLcom/android/server/wm/TaskOrganizerController;->dispatchPendingEvents()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;
-HSPLcom/android/server/wm/TaskOrganizerController;->onTaskInfoChanged(Lcom/android/server/wm/Task;Z)V
+HSPLcom/android/server/wm/TaskOrganizerController;->onTaskInfoChanged(Lcom/android/server/wm/Task;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerPendingEventsQueue;
+HPLcom/android/server/wm/TaskOrganizerController;->removeStartingWindow(Lcom/android/server/wm/Task;Z)V
+HPLcom/android/server/wm/TaskPersister$TaskWriteQueueItem;->process()V
 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;->onPreProcessItem(Z)V
 HPLcom/android/server/wm/TaskPersister;->wakeup(Lcom/android/server/wm/Task;Z)V
+HPLcom/android/server/wm/TaskPersister;->writeTaskIdsFiles()V
+HPLcom/android/server/wm/TaskSnapshotCache;->getSnapshot(IIZZ)Landroid/window/TaskSnapshot;
 HPLcom/android/server/wm/TaskSnapshotCache;->putSnapshot(Lcom/android/server/wm/Task;Landroid/window/TaskSnapshot;)V
-HPLcom/android/server/wm/TaskSnapshotController;->getSnapshot(IIZZ)Landroid/window/TaskSnapshot;
-HPLcom/android/server/wm/TaskTapPointerEventListener;->onPointerEvent(Landroid/view/MotionEvent;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;]Lcom/android/server/wm/TaskPositioningController;Lcom/android/server/wm/TaskPositioningController;]Lcom/android/server/wm/TaskTapPointerEventListener;Lcom/android/server/wm/TaskTapPointerEventListener;
+HPLcom/android/server/wm/TaskSnapshotController;->getSnapshot(IIZZ)Landroid/window/TaskSnapshot;+]Lcom/android/server/wm/BaseAppSnapshotPersister$PersistInfoProvider;Lcom/android/server/wm/BaseAppSnapshotPersister$PersistInfoProvider;]Lcom/android/server/wm/TaskSnapshotCache;Lcom/android/server/wm/TaskSnapshotCache;
+HSPLcom/android/server/wm/TaskSnapshotController;->snapshotForSleeping(I)V
+HPLcom/android/server/wm/TaskTapPointerEventListener;->onPointerEvent(Landroid/view/MotionEvent;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;]Lcom/android/server/wm/TaskPositioningController;Lcom/android/server/wm/TaskPositioningController;]Lcom/android/server/wm/TaskTapPointerEventListener;Lcom/android/server/wm/TaskTapPointerEventListener;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/TaskTapPointerEventListener;->setTouchExcludeRegion(Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;
-HSPLcom/android/server/wm/Transition$ChangeInfo;-><init>(Lcom/android/server/wm/WindowContainer;)V
+HPLcom/android/server/wm/Transition$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/Transition$ChangeInfo;-><init>(Lcom/android/server/wm/WindowContainer;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HPLcom/android/server/wm/Transition$ChangeInfo;->getChangeFlags(Lcom/android/server/wm/WindowContainer;)I
 HPLcom/android/server/wm/Transition$ChangeInfo;->getTransitMode(Lcom/android/server/wm/WindowContainer;)I
-HSPLcom/android/server/wm/Transition$ChangeInfo;->hasChanged()Z
-HSPLcom/android/server/wm/Transition$ReadyTracker;->allReady()Z
-HSPLcom/android/server/wm/Transition$ReadyTracker;->setReadyFrom(Lcom/android/server/wm/WindowContainer;Z)V
+HPLcom/android/server/wm/Transition$ChangeInfo;->hasChanged()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
+HPLcom/android/server/wm/Transition$ReadyTracker;-><init>()V
+HPLcom/android/server/wm/Transition$ReadyTracker;->addGroup(Lcom/android/server/wm/WindowContainer;)V
+HPLcom/android/server/wm/Transition$ReadyTracker;->allReady()Z
+HPLcom/android/server/wm/Transition$ReadyTracker;->setReadyFrom(Lcom/android/server/wm/WindowContainer;Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HPLcom/android/server/wm/Transition$Targets;->add(Lcom/android/server/wm/Transition$ChangeInfo;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/wm/Transition$Targets;->getListSortedByZ()Ljava/util/ArrayList;
-HSPLcom/android/server/wm/Transition;-><init>(IILcom/android/server/wm/TransitionController;Lcom/android/server/wm/BLASTSyncEngine;)V
-HSPLcom/android/server/wm/Transition;->applyReady()V
-HSPLcom/android/server/wm/Transition;->calculateTargets(Landroid/util/ArraySet;Landroid/util/ArrayMap;)Ljava/util/ArrayList;
-HSPLcom/android/server/wm/Transition;->calculateTransitionInfo(IILjava/util/ArrayList;Landroid/view/SurfaceControl$Transaction;)Landroid/window/TransitionInfo;
-HPLcom/android/server/wm/Transition;->canPromote(Lcom/android/server/wm/Transition$ChangeInfo;Lcom/android/server/wm/Transition$Targets;Landroid/util/ArrayMap;)Z
-HSPLcom/android/server/wm/Transition;->collect(Lcom/android/server/wm/WindowContainer;)V
-HSPLcom/android/server/wm/Transition;->commitVisibleActivities(Landroid/view/SurfaceControl$Transaction;)V
-HSPLcom/android/server/wm/Transition;->finishTransition()V
-HSPLcom/android/server/wm/Transition;->fromBinder(Landroid/os/IBinder;)Lcom/android/server/wm/Transition;
-HSPLcom/android/server/wm/Transition;->getAnimatableParent(Lcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/WindowContainer;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
+HPLcom/android/server/wm/Transition$Targets;->getListSortedByZ()Ljava/util/ArrayList;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/wm/Transition$Targets;->remove(I)V
+HPLcom/android/server/wm/Transition$Token;-><init>(Lcom/android/server/wm/Transition;)V
+HPLcom/android/server/wm/Transition;-><init>(IILcom/android/server/wm/TransitionController;Lcom/android/server/wm/BLASTSyncEngine;)V
+HPLcom/android/server/wm/Transition;->addOnTopTasks(Lcom/android/server/wm/DisplayContent;Ljava/util/ArrayList;)V
+HPLcom/android/server/wm/Transition;->addOnTopTasks(Lcom/android/server/wm/Task;Ljava/util/ArrayList;)V
+HPLcom/android/server/wm/Transition;->applyDisplayChangeIfNeeded()V
+HPLcom/android/server/wm/Transition;->applyReady()V+]Lcom/android/server/wm/Transition$ReadyTracker;Lcom/android/server/wm/Transition$ReadyTracker;]Lcom/android/server/wm/BLASTSyncEngine;Lcom/android/server/wm/BLASTSyncEngine;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/wm/Transition;->buildCleanupTransaction(Landroid/view/SurfaceControl$Transaction;Landroid/window/TransitionInfo;)V
+HPLcom/android/server/wm/Transition;->buildFinishTransaction(Landroid/view/SurfaceControl$Transaction;Landroid/window/TransitionInfo;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/window/TransitionInfo$Root;Landroid/window/TransitionInfo$Root;]Lcom/android/server/wm/Transition$IContainerFreezer;Lcom/android/server/wm/Transition$ScreenshotFreezer;]Landroid/window/TransitionInfo;Landroid/window/TransitionInfo;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/wm/Transition;->calculateTargets(Landroid/util/ArraySet;Landroid/util/ArrayMap;)Ljava/util/ArrayList;
+HPLcom/android/server/wm/Transition;->calculateTransitionInfo(IILjava/util/ArrayList;Landroid/view/SurfaceControl$Transaction;)Landroid/window/TransitionInfo;
+HPLcom/android/server/wm/Transition;->calculateTransitionRoots(Landroid/window/TransitionInfo;Ljava/util/ArrayList;Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/Transition;->canPromote(Lcom/android/server/wm/Transition$ChangeInfo;Lcom/android/server/wm/Transition$Targets;Landroid/util/ArrayMap;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/Transition$ChangeInfo;Lcom/android/server/wm/Transition$ChangeInfo;]Lcom/android/server/wm/Transition$Targets;Lcom/android/server/wm/Transition$Targets;
+HPLcom/android/server/wm/Transition;->checkEnterPipOnFinish(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/Transition;->cleanUpInternal()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/Transition;->collect(Lcom/android/server/wm/WindowContainer;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/Transition$ReadyTracker;Lcom/android/server/wm/Transition$ReadyTracker;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/BLASTSyncEngine;Lcom/android/server/wm/BLASTSyncEngine;
+HPLcom/android/server/wm/Transition;->collectExistenceChange(Lcom/android/server/wm/WindowContainer;)V
+HPLcom/android/server/wm/Transition;->collectOrderChanges(Z)V
+HPLcom/android/server/wm/Transition;->commitVisibleActivities(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/Transition;->commitVisibleWallpapers()V
+HPLcom/android/server/wm/Transition;->findCommonAncestor(Ljava/util/ArrayList;Lcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/WindowContainer;
+HPLcom/android/server/wm/Transition;->finishTransition()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/wm/TaskSnapshotController;Lcom/android/server/wm/TaskSnapshotController;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/BackNavigationController;Lcom/android/server/wm/BackNavigationController;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Lcom/android/server/inputmethod/InputMethodManagerInternal;Lcom/android/server/inputmethod/InputMethodManagerService$LocalServiceImpl;]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda21;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/ActivitySnapshotController;Lcom/android/server/wm/ActivitySnapshotController;]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/ActivityRecordInputSink;Lcom/android/server/wm/ActivityRecordInputSink;]Lcom/android/server/wm/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TransitionTracer;Lcom/android/server/wm/TransitionTracer;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/Transition;->fromBinder(Landroid/os/IBinder;)Lcom/android/server/wm/Transition;
+HPLcom/android/server/wm/Transition;->getAnimatableParent(Lcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/WindowContainer;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
+HPLcom/android/server/wm/Transition;->getDisplayId(Lcom/android/server/wm/WindowContainer;)I+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/Transition;->getLayoutParamsForAnimationsStyle(ILjava/util/ArrayList;)Landroid/view/WindowManager$LayoutParams;
-HSPLcom/android/server/wm/Transition;->handleLegacyRecentsStartBehavior(Lcom/android/server/wm/DisplayContent;Landroid/window/TransitionInfo;)V
-HSPLcom/android/server/wm/Transition;->isInTransientHide(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HSPLcom/android/server/wm/Transition;->isInTransition(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HSPLcom/android/server/wm/Transition;->onTransactionReady(ILandroid/view/SurfaceControl$Transaction;)V
-HSPLcom/android/server/wm/Transition;->populateParentChanges(Lcom/android/server/wm/Transition$Targets;Landroid/util/ArrayMap;)V
-HSPLcom/android/server/wm/Transition;->reportStartReasonsToLogger()V
-HSPLcom/android/server/wm/Transition;->setReady(Lcom/android/server/wm/WindowContainer;Z)V
-HSPLcom/android/server/wm/Transition;->start()V
-HSPLcom/android/server/wm/Transition;->tryPromote(Lcom/android/server/wm/Transition$Targets;Landroid/util/ArrayMap;)V
+HPLcom/android/server/wm/Transition;->getLeashSurface(Lcom/android/server/wm/WindowContainer;Landroid/view/SurfaceControl$Transaction;)Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/Transition;->getOrigParentSurface(Lcom/android/server/wm/WindowContainer;)Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/Transition;->handleLegacyRecentsStartBehavior(Lcom/android/server/wm/DisplayContent;Landroid/window/TransitionInfo;)V
+HPLcom/android/server/wm/Transition;->isCollecting()Z
+HPLcom/android/server/wm/Transition;->isInTransientHide(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/wm/Transition;->isInTransition(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/wm/Transition;->isTransientLaunch(Lcom/android/server/wm/ActivityRecord;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HPLcom/android/server/wm/Transition;->lambda$addOnTopTasks$1(Lcom/android/server/wm/Task;)Z
+HPLcom/android/server/wm/Transition;->legacyRestoreNavigationBarFromApp()V
+HPLcom/android/server/wm/Transition;->onTransactionReady(ILandroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/TaskSnapshotController;Lcom/android/server/wm/TaskSnapshotController;]Landroid/os/Handler;Landroid/os/Handler;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/window/TransitionInfo$Root;Landroid/window/TransitionInfo$Root;]Lcom/android/server/wm/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/BackNavigationController;Lcom/android/server/wm/BackNavigationController;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Lcom/android/server/wm/AccessibilityController;Lcom/android/server/wm/AccessibilityController;]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda21;]Landroid/window/TransitionInfo;Landroid/window/TransitionInfo;]Lcom/android/server/wm/TransitionTracer;Lcom/android/server/wm/TransitionTracer;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/window/TransitionInfo$AnimationOptions;Landroid/window/TransitionInfo$AnimationOptions;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/wm/Transition;->populateParentChanges(Lcom/android/server/wm/Transition$Targets;Landroid/util/ArrayMap;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/Transition$ChangeInfo;Lcom/android/server/wm/Transition$ChangeInfo;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/wm/Transition;->recordDisplay(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/Transition;->reportStartReasonsToLogger()V
+HPLcom/android/server/wm/Transition;->setEndFixedRotationIfNeeded(Landroid/window/TransitionInfo$Change;Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/Transition;->setReady(Lcom/android/server/wm/WindowContainer;Z)V
+HPLcom/android/server/wm/Transition;->shouldWallpaperBeVisible()Z
+HPLcom/android/server/wm/Transition;->start()V
+HPLcom/android/server/wm/Transition;->startCollecting(J)V
+HPLcom/android/server/wm/Transition;->tryPromote(Lcom/android/server/wm/Transition$Targets;Landroid/util/ArrayMap;)V
+HPLcom/android/server/wm/Transition;->updateTransientFlags(Lcom/android/server/wm/Transition$ChangeInfo;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;
+HPLcom/android/server/wm/Transition;->validateVisibility()V
 HSPLcom/android/server/wm/TransitionController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/TransitionController;)V
 HSPLcom/android/server/wm/TransitionController$Lock;-><init>(Lcom/android/server/wm/TransitionController;)V
-HSPLcom/android/server/wm/TransitionController$Logger;->buildOnFinishLog()Ljava/lang/String;
-HSPLcom/android/server/wm/TransitionController$Logger;->buildOnSendLog()Ljava/lang/String;
-HSPLcom/android/server/wm/TransitionController$Logger;->logOnSend()V
+HPLcom/android/server/wm/TransitionController$Logger;->buildOnFinishLog()Ljava/lang/String;
+HPLcom/android/server/wm/TransitionController$Logger;->buildOnSendLog()Ljava/lang/String;
+HPLcom/android/server/wm/TransitionController$Logger;->logOnFinish()V
+HPLcom/android/server/wm/TransitionController$Logger;->logOnSend()V
+HPLcom/android/server/wm/TransitionController$Logger;->toMsString(J)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/wm/TransitionController$RemotePlayer;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
+HPLcom/android/server/wm/TransitionController$RemotePlayer;->clear()V
+HPLcom/android/server/wm/TransitionController$RemotePlayer;->update(Lcom/android/server/wm/WindowProcessController;ZZ)V
 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;)V
-HSPLcom/android/server/wm/TransitionController;->canAssignLayers()Z
-HSPLcom/android/server/wm/TransitionController;->dispatchLegacyAppTransitionFinished(Lcom/android/server/wm/ActivityRecord;)V
-HSPLcom/android/server/wm/TransitionController;->inCollectingTransition(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
+HPLcom/android/server/wm/TransitionController;->assignTrack(Lcom/android/server/wm/Transition;Landroid/window/TransitionInfo;)V
+HSPLcom/android/server/wm/TransitionController;->canAssignLayers(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
+HPLcom/android/server/wm/TransitionController;->collect(Lcom/android/server/wm/WindowContainer;)V
+HPLcom/android/server/wm/TransitionController;->dispatchLegacyAppTransitionFinished(Lcom/android/server/wm/ActivityRecord;)V+]Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;Lcom/android/server/policy/PhoneWindowManager$5;,Lcom/android/server/wm/DisplayPolicy$2;,Lcom/android/server/wm/WindowManagerService$4;,Lcom/android/server/wm/DisplayContent$FixedRotationTransitionListener;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/wm/TransitionController;->dispatchLegacyAppTransitionPending()V+]Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;Lcom/android/server/policy/PhoneWindowManager$5;,Lcom/android/server/wm/DisplayPolicy$2;,Lcom/android/server/wm/WindowManagerService$4;,Lcom/android/server/wm/DisplayContent$FixedRotationTransitionListener;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/wm/TransitionController;->dispatchLegacyAppTransitionStarting(Landroid/window/TransitionInfo;J)V
+HPLcom/android/server/wm/TransitionController;->finishTransition(Lcom/android/server/wm/Transition;)V
+HSPLcom/android/server/wm/TransitionController;->inCollectingTransition(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/TransitionController;->inPlayingTransition(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/wm/TransitionController;->inTransition()Z+]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
+HPLcom/android/server/wm/TransitionController;->inTransition()Z+]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/TransitionController;->inTransition(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
 HSPLcom/android/server/wm/TransitionController;->isCollecting()Z
+HPLcom/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
-HSPLcom/android/server/wm/TransitionController;->isTransientCollect(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/TransitionController;->isTransientCollect(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;
+HSPLcom/android/server/wm/TransitionController;->isTransientHide(Lcom/android/server/wm/Task;)Z+]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/wm/TransitionController;->isTransientLaunch(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/TransitionController;->isTransitionOnDisplay(Lcom/android/server/wm/DisplayContent;)Z+]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/wm/TransitionController;->requestStartTransition(Lcom/android/server/wm/Transition;Lcom/android/server/wm/Task;Landroid/window/RemoteTransition;Landroid/window/TransitionRequestInfo$DisplayChange;)Lcom/android/server/wm/Transition;
-HSPLcom/android/server/wm/TransitionController;->shouldKeepFocus(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/wm/TransitionController;->updateAnimatingState(Landroid/view/SurfaceControl$Transaction;)V
-HSPLcom/android/server/wm/TransitionController;->updateRunningRemoteAnimation(Lcom/android/server/wm/Transition;Z)V
+HPLcom/android/server/wm/TransitionController;->moveToCollecting(Lcom/android/server/wm/Transition;)V
+HPLcom/android/server/wm/TransitionController;->moveToPlaying(Lcom/android/server/wm/Transition;)V
+HPLcom/android/server/wm/TransitionController;->requestStartTransition(Lcom/android/server/wm/Transition;Lcom/android/server/wm/Task;Landroid/window/RemoteTransition;Landroid/window/TransitionRequestInfo$DisplayChange;)Lcom/android/server/wm/Transition;
+HPLcom/android/server/wm/TransitionController;->setReady(Lcom/android/server/wm/WindowContainer;Z)V
+HPLcom/android/server/wm/TransitionController;->shouldKeepFocus(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/Transition;Lcom/android/server/wm/Transition;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/wm/TransitionController;->updateAnimatingState(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/TransitionController;->updateRunningRemoteAnimation(Lcom/android/server/wm/Transition;Z)V
 HSPLcom/android/server/wm/TransitionController;->useShellTransitionsRotation()Z+]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
-HSPLcom/android/server/wm/VisibleActivityProcessTracker$CpuTimeRecord;->run()V
+HPLcom/android/server/wm/TransitionController;->validateStates()V
+HPLcom/android/server/wm/TransitionTracer;->dumpTransitionTargetsToProto(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/wm/Transition;Ljava/util/ArrayList;)V
+HPLcom/android/server/wm/TransitionTracer;->logFinishedTransition(Lcom/android/server/wm/Transition;)V
+HPLcom/android/server/wm/TransitionTracer;->logSentTransition(Lcom/android/server/wm/Transition;Ljava/util/ArrayList;)V
+HPLcom/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/VisibleActivityProcessTracker$CpuTimeRecord;->run()V
 HSPLcom/android/server/wm/VisibleActivityProcessTracker;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
 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;
+HPLcom/android/server/wm/VisibleActivityProcessTracker;->onActivityResumedWhileVisible(Lcom/android/server/wm/WindowProcessController;)V
 HSPLcom/android/server/wm/VisibleActivityProcessTracker;->removeProcess(Lcom/android/server/wm/WindowProcessController;)Lcom/android/server/wm/VisibleActivityProcessTracker$CpuTimeRecord;
 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
-HSPLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->reset()V
-HPLcom/android/server/wm/WallpaperController;->$r8$lambda$_e-MMevALEiIelp8i16bjc-QRMI(Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)V
-HSPLcom/android/server/wm/WallpaperController;->adjustWallpaperWindows()V
+HPLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->getTopWallpaper(Z)Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->reset()V
+HPLcom/android/server/wm/WallpaperController;->$r8$lambda$O29u11rAW3IYXeemWK5KU739gsM(Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WallpaperController;->$r8$lambda$TRTtRxEuoxdMjwU_pDcrC1gq9rk(Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/WallpaperController;->$r8$lambda$ocL-y-ffVJFlwwbeGQLRQzwLzCg(Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WallpaperController;->adjustWallpaperWindows()V
 HPLcom/android/server/wm/WallpaperController;->computeLastWallpaperZoomOut()V
-HSPLcom/android/server/wm/WallpaperController;->findWallpaperTarget()V
-HSPLcom/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;->isBackNavigationTarget(Lcom/android/server/wm/WindowState;)Z
-HSPLcom/android/server/wm/WallpaperController;->isRecentsTransitionTarget(Lcom/android/server/wm/WindowState;)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/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HSPLcom/android/server/wm/WallpaperController;->isWallpaperTarget(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/WallpaperController;->findWallpaperTarget()V
+HPLcom/android/server/wm/WallpaperController;->getDisplayWidthOffset(ILandroid/graphics/Rect;Z)I+]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+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;
+HPLcom/android/server/wm/WallpaperController;->isBackNavigationTarget(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/WallpaperController;->isRecentsTransitionTarget(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
+HPLcom/android/server/wm/WallpaperController;->isWallpaperTarget(Lcom/android/server/wm/WindowState;)Z
 HSPLcom/android/server/wm/WallpaperController;->isWallpaperVisible()Z+]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/wm/WallpaperController;->lambda$new$0(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]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;]Lcom/android/server/wm/AnimationAdapter;Lcom/android/server/wm/BackNavigationController$AnimationHandler$BackWindowAnimationAdaptor;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/WallpaperController;->lambda$new$1(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WallpaperController;->lambda$new$0(Lcom/android/server/wm/WindowState;)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/WallpaperController$FindWallpaperTargetResult;Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;
+HPLcom/android/server/wm/WallpaperController;->lambda$new$1(Lcom/android/server/wm/WindowState;)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/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]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;]Lcom/android/server/wm/AnimationAdapter;Lcom/android/server/wm/BackNavigationController$AnimationHandler$BackWindowAnimationAdaptor;
+HPLcom/android/server/wm/WallpaperController;->lambda$new$2(Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/WallpaperController;->setWallpaperZoomOut(Lcom/android/server/wm/WindowState;F)V
-HSPLcom/android/server/wm/WallpaperController;->updateWallpaperOffset(Lcom/android/server/wm/WindowState;Z)Z+]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]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;
-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;
+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;
+HPLcom/android/server/wm/WallpaperController;->updateWallpaperOffsetLocked(Lcom/android/server/wm/WindowState;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/WallpaperWindowToken;]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(ZZ)V
-HSPLcom/android/server/wm/WallpaperController;->updateWallpaperWindowsTarget(Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;)V
-HSPLcom/android/server/wm/WallpaperController;->zoomOutToScale(F)F
+HPLcom/android/server/wm/WallpaperController;->updateWallpaperWindowsTarget(Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;)V
+HPLcom/android/server/wm/WallpaperController;->zoomOutToScale(F)F
 HPLcom/android/server/wm/WallpaperVisibilityListeners;->notifyWallpaperVisibilityChanged(Lcom/android/server/wm/DisplayContent;)V
-HSPLcom/android/server/wm/WallpaperWindowToken;->commitVisibility(Z)V+]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;
-HSPLcom/android/server/wm/WallpaperWindowToken;->isVisible()Z+]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WallpaperWindowToken;
-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;->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)V
+HPLcom/android/server/wm/WallpaperWindowToken;->commitVisibility(Z)V+]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;
+HPLcom/android/server/wm/WallpaperWindowToken;->isVisible()Z+]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WallpaperWindowToken;
+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;->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)V
+HPLcom/android/server/wm/WindowAnimationSpec$TmpValues;-><init>()V
 HPLcom/android/server/wm/WindowAnimationSpec;-><init>(Landroid/view/animation/Animation;Landroid/graphics/Point;Landroid/graphics/Rect;ZIZF)V
-HPLcom/android/server/wm/WindowAnimationSpec;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V
+HPLcom/android/server/wm/WindowAnimationSpec;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;]Landroid/view/animation/Animation;Landroid/view/animation/AnimationSet;,Landroid/view/animation/TranslateAnimation;,Landroid/view/animation/AlphaAnimation;
 HSPLcom/android/server/wm/WindowAnimator$$ExternalSyntheticLambda1;->doFrame(J)V
 HSPLcom/android/server/wm/WindowAnimator;->$r8$lambda$aHNu1uhcqxihX5NZc4McDDQPAyw(Lcom/android/server/wm/WindowAnimator;J)V
 HPLcom/android/server/wm/WindowAnimator;->addAfterPrepareSurfacesRunnable(Ljava/lang/Runnable;)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/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/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;
+HSPLcom/android/server/wm/WindowAnimator;->animate(J)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/RootWindowContainer;]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;]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;
 HSPLcom/android/server/wm/WindowAnimator;->cancelAnimation()V
 HSPLcom/android/server/wm/WindowAnimator;->executeAfterPrepareSurfacesRunnables()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Runnable;Lcom/android/server/wm/InsetsStateController$$ExternalSyntheticLambda2;
-HSPLcom/android/server/wm/WindowAnimator;->lambda$new$1(J)V+]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;]Landroid/view/Choreographer;Landroid/view/Choreographer;
+HSPLcom/android/server/wm/WindowAnimator;->lambda$new$1(J)V+]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;
 HSPLcom/android/server/wm/WindowAnimator;->scheduleAnimation()V+]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wm/WindowContainer;)V
-HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda6;-><init>()V
+HPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda6;-><init>()V
 HPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda6;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda7;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda8;-><init>()V
 HSPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->apply(Lcom/android/server/wm/WindowState;)Z+]Ljava/util/function/Consumer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->apply(Ljava/lang/Object;)Z+]Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;
@@ -11715,47 +12438,53 @@
 HSPLcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;->setConsumer(Ljava/util/function/Consumer;)V
 HPLcom/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$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
+HPLcom/android/server/wm/WindowContainer;->allSyncFinished()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/ActivityRecord;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->asDisplayArea()Lcom/android/server/wm/DisplayArea;
 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;
+HSPLcom/android/server/wm/WindowContainer;->asWindowState()Lcom/android/server/wm/WindowState;
 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;]Lcom/android/server/wm/TrustedOverlayHost;Lcom/android/server/wm/TrustedOverlayHost;
 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;
 HPLcom/android/server/wm/WindowContainer;->assignRelativeLayer(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;IZ)V
+HSPLcom/android/server/wm/WindowContainer;->canStartChangeTransition()Z
 HSPLcom/android/server/wm/WindowContainer;->cancelAnimation()V
 HSPLcom/android/server/wm/WindowContainer;->checkAppWindowsReadyToShow()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HSPLcom/android/server/wm/WindowContainer;->compareTo(Lcom/android/server/wm/WindowContainer;)I
+HPLcom/android/server/wm/WindowContainer;->compareTo(Lcom/android/server/wm/WindowContainer;)I+]Ljava/util/LinkedList;Ljava/util/LinkedList;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowContainer;->createMergedSparseArray(Landroid/util/SparseArray;Landroid/util/SparseArray;)Landroid/util/SparseArray;+]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
-HSPLcom/android/server/wm/WindowContainer;->finishSync(Landroid/view/SurfaceControl$Transaction;Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HSPLcom/android/server/wm/WindowContainer;->forAllActivities(Ljava/util/function/Consumer;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/RootWindowContainer;
+HSPLcom/android/server/wm/WindowContainer;->finishSync(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;Z)V+]Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+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;
-HSPLcom/android/server/wm/WindowContainer;->forAllActivities(Ljava/util/function/Predicate;)Z
+HSPLcom/android/server/wm/WindowContainer;->forAllActivities(Ljava/util/function/Predicate;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/RootWindowContainer;
 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;->forAllLeafTaskFragments(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;->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;
+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;->forAllRootTasks(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;->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;->forAllTaskFragments(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,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;
 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;->getActivity(Ljava/util/function/Predicate;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/RootWindowContainer;
-HSPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;Lcom/android/server/wm/WindowContainer;ZZ)Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;Lcom/android/server/wm/WindowContainer;ZZ[Z)Lcom/android/server/wm/ActivityRecord;+]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;
+HPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;Lcom/android/server/wm/WindowContainer;ZZ)Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;Lcom/android/server/wm/WindowContainer;ZZ[Z)Lcom/android/server/wm/ActivityRecord;+]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;
-HSPLcom/android/server/wm/WindowContainer;->getActivityBelow(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;
 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;
+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;
 HSPLcom/android/server/wm/WindowContainer;->getChildCount()I+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->getControllableInsetProvider()Lcom/android/server/wm/InsetsSourceProvider;
@@ -11763,212 +12492,247 @@
 HSPLcom/android/server/wm/WindowContainer;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/WindowContainer;->getInsetsSourceProviders()Landroid/util/SparseArray;
 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;
-HSPLcom/android/server/wm/WindowContainer;->getItemFromTaskDisplayAreas(Ljava/util/function/Function;Z)Ljava/lang/Object;
+HPLcom/android/server/wm/WindowContainer;->getItemFromTaskDisplayAreas(Ljava/util/function/Function;Z)Ljava/lang/Object;
 HSPLcom/android/server/wm/WindowContainer;->getLastOrientationSource()Lcom/android/server/wm/WindowContainer;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
-HSPLcom/android/server/wm/WindowContainer;->getOrientation()I
+HSPLcom/android/server/wm/WindowContainer;->getOrientation()I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowContainer;->getOrientation(I)I+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->getOverrideOrientation()I
 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;
+HPLcom/android/server/wm/WindowContainer;->getParentSurfaceControl()Landroid/view/SurfaceControl;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/DisplayArea$Tokens;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;
 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(Lcom/android/server/wm/WindowContainer;)I+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HSPLcom/android/server/wm/WindowContainer;->getRelativeDisplayRotation()I
+HSPLcom/android/server/wm/WindowContainer;->getRelativeDisplayRotation()I+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLcom/android/server/wm/WindowContainer;->getRelativePosition(Landroid/graphics/Point;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->getRelativePosition(Landroid/graphics/Rect;Landroid/graphics/Point;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/graphics/Point;Landroid/graphics/Point;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types
-HSPLcom/android/server/wm/WindowContainer;->getRequestedConfigurationOrientation(Z)I
+HPLcom/android/server/wm/WindowContainer;->getRequestedConfigurationOrientation(ZI)I+]Lcom/android/server/wm/RootDisplayArea;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 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/DisplayContent;,Lcom/android/server/wm/TaskDisplayArea;
 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;
-HSPLcom/android/server/wm/WindowContainer;->getSession()Landroid/view/SurfaceSession;
+HSPLcom/android/server/wm/WindowContainer;->getSession()Landroid/view/SurfaceSession;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->getSurfaceControl()Landroid/view/SurfaceControl;
 HPLcom/android/server/wm/WindowContainer;->getSurfaceHeight()I
 HPLcom/android/server/wm/WindowContainer;->getSurfaceWidth()I
+HSPLcom/android/server/wm/WindowContainer;->getSyncGroup()Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->getSyncTransaction()Landroid/view/SurfaceControl$Transaction;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
+HSPLcom/android/server/wm/WindowContainer;->getTask(Ljava/util/function/Predicate;)Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/RootWindowContainer;
 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;
-HSPLcom/android/server/wm/WindowContainer;->getTaskFragment(Ljava/util/function/Predicate;)Lcom/android/server/wm/TaskFragment;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/ActivityRecord;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowContainer;->getTaskFragment(Ljava/util/function/Predicate;)Lcom/android/server/wm/TaskFragment;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->getTopChild()Lcom/android/server/wm/WindowContainer;
 HSPLcom/android/server/wm/WindowContainer;->getTopMostActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowContainer;->getTopMostTask()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;->hasActivity()Z
-HSPLcom/android/server/wm/WindowContainer;->hasChild(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/ActivityRecord;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HSPLcom/android/server/wm/WindowContainer;->hasContentToDisplay()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;
+HPLcom/android/server/wm/WindowContainer;->hasContentToDisplay()Z
 HSPLcom/android/server/wm/WindowContainer;->hasInsetsSourceProvider()Z
 HSPLcom/android/server/wm/WindowContainer;->inTransition()Z+]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
 HSPLcom/android/server/wm/WindowContainer;->inTransitionSelfOrParent()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
 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
-HSPLcom/android/server/wm/WindowContainer;->isAttached()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
-HSPLcom/android/server/wm/WindowContainer;->isClosingWhenResizing()Z
-HSPLcom/android/server/wm/WindowContainer;->isDescendantOf(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
+HPLcom/android/server/wm/WindowContainer;->isAttached()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
+HSPLcom/android/server/wm/WindowContainer;->isClosingWhenResizing()Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HPLcom/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/WindowState;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->isFocusable()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
-HSPLcom/android/server/wm/WindowContainer;->isOnTop()Z
+HPLcom/android/server/wm/WindowContainer;->isOnTop()Z
 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;
-HSPLcom/android/server/wm/WindowContainer;->isSyncFinished()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowContainer;->isSyncFinished(Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;)Z+]Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->isVisible()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->isVisibleRequested()Z
 HSPLcom/android/server/wm/WindowContainer;->isWaitingForTransitionStart()Z
-HPLcom/android/server/wm/WindowContainer;->makeAnimationLeash()Landroid/view/SurfaceControl$Builder;
+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;
-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;->makeSurface()Landroid/view/SurfaceControl$Builder;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
+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(ZZ)Z
+HSPLcom/android/server/wm/WindowContainer;->okToAnimate(ZZ)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,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;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
 HPLcom/android/server/wm/WindowContainer;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/wm/WindowContainer;->onChildAdded(Lcom/android/server/wm/WindowContainer;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->onChildRemoved(Lcom/android/server/wm/WindowContainer;)V+]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/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/SurfaceFreezer;Lcom/android/server/wm/SurfaceFreezer;
+HPLcom/android/server/wm/WindowContainer;->onChildVisibilityRequested(Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/SurfaceFreezer;Lcom/android/server/wm/SurfaceFreezer;
 HSPLcom/android/server/wm/WindowContainer;->onChildVisibleRequestedChanged(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HSPLcom/android/server/wm/WindowContainer;->onConfigurationChanged(Landroid/content/res/Configuration;)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;]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;
+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;->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;]Lcom/android/server/wm/WindowContainerListener;Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;,Lcom/android/server/wm/DisplayContent$2;,Lcom/android/server/wm/WindowContainer$2;,Lcom/android/server/wm/ContentRecorder;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
+HPLcom/android/server/wm/WindowContainer;->onSyncFinishedDrawing()Z
 HSPLcom/android/server/wm/WindowContainer;->onSyncReparent(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowContainer;)V
-HSPLcom/android/server/wm/WindowContainer;->onUnfrozen()V
-HSPLcom/android/server/wm/WindowContainer;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+HSPLcom/android/server/wm/WindowContainer;->onSyncTransactionCommitted(Landroid/view/SurfaceControl$Transaction;)V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
+HSPLcom/android/server/wm/WindowContainer;->onUnfrozen()V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+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;
 HSPLcom/android/server/wm/WindowContainer;->prepareSync()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
-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;
+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;->providesOrientation()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
-HSPLcom/android/server/wm/WindowContainer;->reassignLayer(Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/WindowContainer;->reassignLayer(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types
+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;,Lcom/android/server/wm/DisplayContent$2;
+HSPLcom/android/server/wm/WindowContainer;->removeChild(Lcom/android/server/wm/WindowContainer;)V
 HPLcom/android/server/wm/WindowContainer;->removeImmediately()V
 HPLcom/android/server/wm/WindowContainer;->resetSurfacePositionForAnimationLeash(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/wm/WindowContainer;->scheduleAnimation()V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
-HSPLcom/android/server/wm/WindowContainer;->sendAppVisibilityToClients()V
+HPLcom/android/server/wm/WindowContainer;->sendAppVisibilityToClients()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 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;->setParent(Lcom/android/server/wm/WindowContainer;)V
+HPLcom/android/server/wm/WindowContainer;->setRelativeLayer(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;I)V
 HSPLcom/android/server/wm/WindowContainer;->setSurfaceControl(Landroid/view/SurfaceControl;)V
-HSPLcom/android/server/wm/WindowContainer;->setVisibleRequested(Z)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/wm/WindowContainerListener;Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;
-HSPLcom/android/server/wm/WindowContainer;->showWallpaper()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;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;Ljava/lang/Runnable;Lcom/android/server/wm/AnimationAdapter;)V
+HSPLcom/android/server/wm/WindowContainer;->setSyncGroup(Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;)V
+HSPLcom/android/server/wm/WindowContainer;->setVisibleRequested(Z)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/wm/WindowContainerListener;Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;,Lcom/android/server/wm/DisplayContent$2;,Lcom/android/server/wm/WindowContainer$2;,Lcom/android/server/wm/ContentRecorder;
+HPLcom/android/server/wm/WindowContainer;->showWallpaper()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;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;Ljava/lang/Runnable;Lcom/android/server/wm/AnimationAdapter;)V+]Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator;
 HSPLcom/android/server/wm/WindowContainer;->updateAboveInsetsState(Landroid/view/InsetsState;Landroid/util/SparseArray;Landroid/util/ArraySet;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HPLcom/android/server/wm/WindowContainer;->updateOverlayInsetsState(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types
-HSPLcom/android/server/wm/WindowContainer;->updateSurfacePosition(Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/WindowContainer;->updateSurfacePosition(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/SurfaceFreezer;Lcom/android/server/wm/SurfaceFreezer;]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLcom/android/server/wm/WindowContainer;->updateSurfacePositionNonOrganized()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->useBLASTSync()Z
 HSPLcom/android/server/wm/WindowContainer;->waitForSyncTransactionCommit(Landroid/util/ArraySet;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-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;->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;
+HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->reportConfigToWindowTokenClient()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]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;
 HSPLcom/android/server/wm/WindowFrames;-><init>()V
+HSPLcom/android/server/wm/WindowFrames;->clearReportResizeHints()V
 HSPLcom/android/server/wm/WindowFrames;->didFrameSizeChange()Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLcom/android/server/wm/WindowFrames;->hasContentChanged()Z
 HSPLcom/android/server/wm/WindowFrames;->hasInsetsChanged()Z
+HSPLcom/android/server/wm/WindowFrames;->onResizeHandled()V
 HPLcom/android/server/wm/WindowFrames;->parentFrameWasClippedByDisplayCutout()Z
 HSPLcom/android/server/wm/WindowFrames;->setContentChanged(Z)V
 HSPLcom/android/server/wm/WindowFrames;->setParentFrameWasClippedByDisplayCutout(Z)V
 HSPLcom/android/server/wm/WindowFrames;->setReportResizeHints()Z
 HSPLcom/android/server/wm/WindowList;->peekLast()Ljava/lang/Object;
 HSPLcom/android/server/wm/WindowManagerGlobalLock;-><init>()V
-HSPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda20;->get()Ljava/lang/Object;
-HSPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda21;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/android/server/wm/WindowManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-HSPLcom/android/server/wm/WindowManagerService$4;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
-HSPLcom/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/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;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Runnable;Lcom/android/server/policy/PhoneWindowManager$$ExternalSyntheticLambda2;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HPLcom/android/server/wm/WindowManagerService$4;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/WindowManagerService$H;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/wm/WindowContainer;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;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Message;Landroid/os/Message;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/wm/WindowManagerService$LocalService;->hasInputMethodClientFocus(Landroid/os/IBinder;III)I
 HPLcom/android/server/wm/WindowManagerService$LocalService;->isHardKeyboardAvailable()Z
 HSPLcom/android/server/wm/WindowManagerService$LocalService;->isKeyguardShowingAndNotOccluded()Z+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
 HPLcom/android/server/wm/WindowManagerService$LocalService;->onToggleImeRequested(ZLandroid/os/IBinder;Landroid/os/IBinder;I)Lcom/android/server/wm/WindowManagerInternal$ImeTargetInfo;
 HSPLcom/android/server/wm/WindowManagerService$LocalService;->requestTraversalFromDisplayManager()V
 HPLcom/android/server/wm/WindowManagerService$LocalService;->updateInputMethodTargetWindow(Landroid/os/IBinder;Landroid/os/IBinder;)V
-HPLcom/android/server/wm/WindowManagerService$MousePositionTracker;->onPointerEvent(Landroid/view/MotionEvent;)V+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HPLcom/android/server/wm/WindowManagerService$LocalService;->waitForAllWindowsDrawn(Landroid/os/Message;JI)V
+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;-><clinit>()V
 HSPLcom/android/server/wm/WindowManagerService;->addWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/view/WindowManager$LayoutParams;IIIILandroid/view/InputChannel;Landroid/view/InsetsState;Landroid/view/InsetsSourceControl$Array;Landroid/graphics/Rect;[F)I
 HSPLcom/android/server/wm/WindowManagerService;->boostPriorityForLockedSection()V+]Lcom/android/server/wm/WindowManagerThreadPriorityBooster;Lcom/android/server/wm/WindowManagerThreadPriorityBooster;
-HSPLcom/android/server/wm/WindowManagerService;->checkDrawnWindowsLocked()V
+HSPLcom/android/server/wm/WindowManagerService;->checkDrawnWindowsLocked()V+]Landroid/os/Handler;Lcom/android/server/wm/WindowManagerService$H;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/os/Message;Landroid/os/Message;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/WindowManagerService;->closeSurfaceTransaction(Ljava/lang/String;)V+]Lcom/android/server/wm/WindowTracing;Lcom/android/server/wm/WindowTracing;
 HSPLcom/android/server/wm/WindowManagerService;->createSurfaceControl(Landroid/view/SurfaceControl;ILcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowStateAnimator;)I
-HSPLcom/android/server/wm/WindowManagerService;->dipToPixel(ILandroid/util/DisplayMetrics;)I
+HPLcom/android/server/wm/WindowManagerService;->dipToPixel(ILandroid/util/DisplayMetrics;)I
+HPLcom/android/server/wm/WindowManagerService;->dispatchImeInputTargetVisibilityChanged(Landroid/os/IBinder;ZZ)V
 HSPLcom/android/server/wm/WindowManagerService;->enableScreenIfNeededLocked()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;->getDefaultDisplayContentLocked()Lcom/android/server/wm/DisplayContent;+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
+HSPLcom/android/server/wm/WindowManagerService;->getDisplayContentOrCreate(ILandroid/os/IBinder;)Lcom/android/server/wm/DisplayContent;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 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;
-HSPLcom/android/server/wm/WindowManagerService;->getInsetsSourceControls(Lcom/android/server/wm/WindowState;Landroid/view/InsetsSourceControl$Array;)V
+HSPLcom/android/server/wm/WindowManagerService;->getInsetsSourceControls(Lcom/android/server/wm/WindowState;Landroid/view/InsetsSourceControl$Array;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Landroid/view/InsetsSourceControl$Array;Landroid/view/InsetsSourceControl$Array;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/WindowManagerService;->getRecentsAnimationController()Lcom/android/server/wm/RecentsAnimationController;
+HPLcom/android/server/wm/WindowManagerService;->getTaskSnapshot(IIZZ)Landroid/window/TaskSnapshot;
+HSPLcom/android/server/wm/WindowManagerService;->getWindowInsets(ILandroid/os/IBinder;Landroid/view/InsetsState;)Z+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/WindowManagerService;->isInTouchMode(I)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
 HSPLcom/android/server/wm/WindowManagerService;->isKeyguardShowingAndNotOccluded()Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
 HSPLcom/android/server/wm/WindowManagerService;->isUserVisible(I)Z+]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;
-HPLcom/android/server/wm/WindowManagerService;->lambda$checkDrawnWindowsLocked$9(Lcom/android/server/wm/WindowContainer;Ljava/lang/Runnable;)V
-HSPLcom/android/server/wm/WindowManagerService;->makeSurfaceBuilder(Landroid/view/SurfaceSession;)Landroid/view/SurfaceControl$Builder;
+HSPLcom/android/server/wm/WindowManagerService;->makeSurfaceBuilder(Landroid/view/SurfaceSession;)Landroid/view/SurfaceControl$Builder;+]Ljava/util/function/Function;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda22;
+HSPLcom/android/server/wm/WindowManagerService;->makeWindowFreezingScreenIfNeededLocked(Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WindowManagerService;->mapOrientationRequest(I)I
+HPLcom/android/server/wm/WindowManagerService;->notifyFocusChanged()V
+HPLcom/android/server/wm/WindowManagerService;->onAnimationFinished()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;
 HSPLcom/android/server/wm/WindowManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLcom/android/server/wm/WindowManagerService;->openSurfaceTransaction()V
 HPLcom/android/server/wm/WindowManagerService;->postWindowRemoveCleanupLocked(Lcom/android/server/wm/WindowState;)V
-HSPLcom/android/server/wm/WindowManagerService;->relayoutWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/view/WindowManager$LayoutParams;IIIIIILandroid/window/ClientWindowFrames;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;Landroid/view/InsetsSourceControl$Array;Landroid/os/Bundle;)I
+HSPLcom/android/server/wm/WindowManagerService;->relayoutWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/view/WindowManager$LayoutParams;IIIIIILandroid/window/ClientWindowFrames;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;Landroid/view/InsetsSourceControl$Array;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;]Lcom/android/server/wm/WindowSurfaceController;Lcom/android/server/wm/WindowSurfaceController;]Landroid/os/Bundle;Landroid/os/Bundle;]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;]Landroid/view/InsetsSourceControl$Array;Landroid/view/InsetsSourceControl$Array;]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;]Landroid/view/InsetsFrameProvider$InsetsSizeOverride;Landroid/view/InsetsFrameProvider$InsetsSizeOverride;]Lcom/android/server/wm/UnknownAppVisibilityController;Lcom/android/server/wm/UnknownAppVisibilityController;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Landroid/view/InsetsFrameProvider;Landroid/view/InsetsFrameProvider;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/WindowManagerService;->removeWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;)V
 HPLcom/android/server/wm/WindowManagerService;->reportFocusChanged(Landroid/os/IBinder;Landroid/os/IBinder;)V
-HPLcom/android/server/wm/WindowManagerService;->reportSystemGestureExclusionChanged(Lcom/android/server/wm/Session;Landroid/view/IWindow;Ljava/util/List;)V
+HPLcom/android/server/wm/WindowManagerService;->reportSystemGestureExclusionChanged(Lcom/android/server/wm/Session;Landroid/view/IWindow;Ljava/util/List;)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/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/WindowManagerService;->requestTraversal()V
 HSPLcom/android/server/wm/WindowManagerService;->resetPriorityAfterLockedSection()V+]Lcom/android/server/wm/WindowManagerThreadPriorityBooster;Lcom/android/server/wm/WindowManagerThreadPriorityBooster;
 HSPLcom/android/server/wm/WindowManagerService;->scheduleAnimationLocked()V+]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;
-HSPLcom/android/server/wm/WindowManagerService;->setInsetsWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)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;->stopFreezingDisplayLocked()V
 HPLcom/android/server/wm/WindowManagerService;->tryStartExitingAnimation(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowStateAnimator;)V
-HSPLcom/android/server/wm/WindowManagerService;->updateFocusedWindowLocked(IZ)Z
-HSPLcom/android/server/wm/WindowManagerService;->updateNonSystemOverlayWindowsVisibilityIfNeeded(Lcom/android/server/wm/WindowState;Z)V
+HSPLcom/android/server/wm/WindowManagerService;->updateFocusedWindowLocked(IZ)Z+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
+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;
 HSPLcom/android/server/wm/WindowManagerService;->updateRotationUnchecked(ZZ)V
-HSPLcom/android/server/wm/WindowManagerService;->windowForClientLocked(Lcom/android/server/wm/Session;Landroid/os/IBinder;Z)Lcom/android/server/wm/WindowState;+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLcom/android/server/wm/WindowManagerService;->windowForClientLocked(Lcom/android/server/wm/Session;Landroid/view/IWindow;Z)Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Landroid/view/IWindow;Landroid/view/ViewRootImpl$W;,Landroid/view/IWindow$Stub$Proxy;
+HSPLcom/android/server/wm/WindowManagerService;->windowForClientLocked(Lcom/android/server/wm/Session;Landroid/os/IBinder;Z)Lcom/android/server/wm/WindowState;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/HashMap;Ljava/util/HashMap;
+HSPLcom/android/server/wm/WindowManagerService;->windowForClientLocked(Lcom/android/server/wm/Session;Landroid/view/IWindow;Z)Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
 HSPLcom/android/server/wm/WindowManagerThreadPriorityBooster;-><init>()V
 HSPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->boost()V
 HSPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->reset()V
 HSPLcom/android/server/wm/WindowOrganizerController$CallerInfo;-><init>()V
 HSPLcom/android/server/wm/WindowOrganizerController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)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
+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;)I
 HPLcom/android/server/wm/WindowOrganizerController;->finishTransition(Landroid/os/IBinder;Landroid/window/WindowContainerTransaction;Landroid/window/IWindowContainerTransactionCallback;)I
 HSPLcom/android/server/wm/WindowOrganizerController;->getTransitionController()Lcom/android/server/wm/TransitionController;
-HSPLcom/android/server/wm/WindowOrganizerController;->startTransition(ILandroid/os/IBinder;Landroid/window/WindowContainerTransaction;)Landroid/os/IBinder;
+HPLcom/android/server/wm/WindowOrganizerController;->startTransition(ILandroid/os/IBinder;Landroid/window/WindowContainerTransaction;)Landroid/os/IBinder;
+HPLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->onTouchEndLocked(J)V
+HPLcom/android/server/wm/WindowOrientationListener;->getProposedRotation()I
+HPLcom/android/server/wm/WindowOrientationListener;->onTouchEnd()V+]Lcom/android/server/wm/WindowOrientationListener$OrientationJudge;Lcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;
+HPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
 HPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda3;->test(I)Z
+HPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 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
 HSPLcom/android/server/wm/WindowProcessController;->addBoundClientUid(ILjava/lang/String;J)V+]Lcom/android/server/wm/BackgroundLaunchProcessController;Lcom/android/server/wm/BackgroundLaunchProcessController;
 HSPLcom/android/server/wm/WindowProcessController;->addPackage(Ljava/lang/String;)V
-HSPLcom/android/server/wm/WindowProcessController;->addToPendingTop()V
+HPLcom/android/server/wm/WindowProcessController;->addToPendingTop()V
 HPLcom/android/server/wm/WindowProcessController;->areBackgroundActivityStartsAllowed(IZ)I+]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;->clearActivities()V
 HSPLcom/android/server/wm/WindowProcessController;->clearRecentTasks()V
 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;
-HSPLcom/android/server/wm/WindowProcessController;->computeProcessActivityState()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]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;
-HSPLcom/android/server/wm/WindowProcessController;->dispatchConfiguration(Landroid/content/res/Configuration;)V
+HPLcom/android/server/wm/WindowProcessController;->computeProcessActivityState()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]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;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLcom/android/server/wm/WindowProcessController;->dispatchConfiguration(Landroid/content/res/Configuration;)V+]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;->getParent()Lcom/android/server/wm/ConfigurationContainer;
-HSPLcom/android/server/wm/WindowProcessController;->getThread()Landroid/app/IApplicationThread;
+HPLcom/android/server/wm/WindowProcessController;->getThread()Landroid/app/IApplicationThread;
 HSPLcom/android/server/wm/WindowProcessController;->getTopActivityDeviceId()I
-HSPLcom/android/server/wm/WindowProcessController;->getTopNonFinishingActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowProcessController;->getTopNonFinishingActivity()Lcom/android/server/wm/ActivityRecord;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/WindowProcessController;->handleAppDied()Z
 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;->hasRecentTasks()Z
-HSPLcom/android/server/wm/WindowProcessController;->hasResumedActivity()Z
-HSPLcom/android/server/wm/WindowProcessController;->hasThread()Z
+HPLcom/android/server/wm/WindowProcessController;->hasResumedActivity()Z
+HPLcom/android/server/wm/WindowProcessController;->hasThread()Z
 HSPLcom/android/server/wm/WindowProcessController;->hasVisibleActivities()Z
+HSPLcom/android/server/wm/WindowProcessController;->isFactoryTestProcess()Z
 HSPLcom/android/server/wm/WindowProcessController;->isHeavyWeightProcess()Z
 HSPLcom/android/server/wm/WindowProcessController;->isHomeProcess()Z
 HSPLcom/android/server/wm/WindowProcessController;->isPreviousProcess()Z
-HSPLcom/android/server/wm/WindowProcessController;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/WindowProcessController;->isRemoved()Z
+HPLcom/android/server/wm/WindowProcessController;->isRunningRemoteTransition()Z
+HSPLcom/android/server/wm/WindowProcessController;->onConfigurationChanged(Landroid/content/res/Configuration;)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;
 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
+HPLcom/android/server/wm/WindowProcessController;->prepareOomAdjustment()V
 HSPLcom/android/server/wm/WindowProcessController;->registeredForDisplayAreaConfigChanges()Z
+HPLcom/android/server/wm/WindowProcessController;->removeActivity(Lcom/android/server/wm/ActivityRecord;Z)V
 HSPLcom/android/server/wm/WindowProcessController;->removeBackgroundStartPrivileges(Landroid/os/Binder;)V
-HSPLcom/android/server/wm/WindowProcessController;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
-HSPLcom/android/server/wm/WindowProcessController;->scheduleConfigurationChange(Landroid/app/IApplicationThread;Landroid/content/res/Configuration;)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;
+HSPLcom/android/server/wm/WindowProcessController;->scheduleConfigurationChange(Landroid/app/IApplicationThread;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/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
 HSPLcom/android/server/wm/WindowProcessController;->setCurrentAdj(I)V
 HSPLcom/android/server/wm/WindowProcessController;->setCurrentProcState(I)V
 HSPLcom/android/server/wm/WindowProcessController;->setCurrentSchedulingGroup(I)V
 HSPLcom/android/server/wm/WindowProcessController;->setFgInteractionTime(J)V
 HSPLcom/android/server/wm/WindowProcessController;->setInteractionEventTime(J)V
-HSPLcom/android/server/wm/WindowProcessController;->setLastReportedConfiguration(Landroid/content/res/Configuration;)V
-HSPLcom/android/server/wm/WindowProcessController;->setPendingUiClean(Z)V
+HSPLcom/android/server/wm/WindowProcessController;->setLastReportedConfiguration(Landroid/content/res/Configuration;)V+]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
+HPLcom/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;->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;->setThread(Landroid/app/IApplicationThread;)V
-HSPLcom/android/server/wm/WindowProcessController;->setWhenUnimportant(J)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
+HSPLcom/android/server/wm/WindowProcessController;->unregisterActivityConfigurationListener()V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowProcessController;->unregisterConfigurationListeners()V
 HSPLcom/android/server/wm/WindowProcessController;->updateActivityConfigurationListener()V
-HSPLcom/android/server/wm/WindowProcessController;->updateProcessInfo(ZZZZ)V
-HSPLcom/android/server/wm/WindowProcessController;->updateRunningRemoteOrRecentsAnimation()V
-HSPLcom/android/server/wm/WindowProcessController;->updateTopResumingActivityInProcessIfNeeded(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/WindowProcessController;->updateProcessInfo(ZZZZ)V
+HPLcom/android/server/wm/WindowProcessController;->updateRunningRemoteOrRecentsAnimation()V
+HPLcom/android/server/wm/WindowProcessController;->updateTopResumingActivityInProcessIfNeeded(Lcom/android/server/wm/ActivityRecord;)Z
 HSPLcom/android/server/wm/WindowProcessControllerMap;-><init>()V
 HSPLcom/android/server/wm/WindowProcessControllerMap;->getProcess(I)Lcom/android/server/wm/WindowProcessController;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/wm/WindowProcessControllerMap;->put(ILcom/android/server/wm/WindowProcessController;)V
@@ -11976,18 +12740,19 @@
 HSPLcom/android/server/wm/WindowProcessControllerMap;->removeProcessFromUidMap(Lcom/android/server/wm/WindowProcessController;)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$UpdateReportedVisibilityResults;->reset()V
+HPLcom/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;->$r8$lambda$yaMCE92DeyOeXwsfF1GkAkI6k2I(Landroid/view/InsetsState;Landroid/util/ArraySet;Landroid/util/SparseArray;Lcom/android/server/wm/WindowState;)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
-HSPLcom/android/server/wm/WindowState;->adjustRegionInFreefromWindowMode(Landroid/graphics/Rect;)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;->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;
+HSPLcom/android/server/wm/WindowState;->applyDims()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]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;->areAppWindowBoundsLetterboxed()Z
-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;
-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;
+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;->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;
 HSPLcom/android/server/wm/WindowState;->canAddInternalSystemWindow()Z
 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/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowState;->canBeHiddenByKeyguard()Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
@@ -11995,10 +12760,12 @@
 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/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/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/WindowState;->canReceiveTouchInput()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/Task;Lcom/android/server/wm/Task;]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;->canShowWhenLocked()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowState;->cancelAndRedraw()Z
+HPLcom/android/server/wm/WindowState;->commitFinishDrawing(Landroid/view/SurfaceControl$Transaction;)Z
 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/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;
-HSPLcom/android/server/wm/WindowState;->destroySurface(ZZ)Z
+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;
+HPLcom/android/server/wm/WindowState;->destroySurface(ZZ)Z
 HPLcom/android/server/wm/WindowState;->destroySurfaceUnchecked()V
 HPLcom/android/server/wm/WindowState;->disposeInputChannel()V
 HSPLcom/android/server/wm/WindowState;->executeDrawHandlers(Landroid/view/SurfaceControl$Transaction;I)Z
@@ -12008,57 +12775,62 @@
 HPLcom/android/server/wm/WindowState;->forAllWindowTopToBottom(Lcom/android/internal/util/ToBooleanFunction;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowState;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HPLcom/android/server/wm/WindowState;->frameCoversEntireAppTokenBounds()Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/WindowState;->freezeInsetsState()V
 HPLcom/android/server/wm/WindowState;->getActivityRecord()Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/WindowState;->getAnimationLeashParent()Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/WindowState;->getAttrs()Landroid/view/WindowManager$LayoutParams;
-HSPLcom/android/server/wm/WindowState;->getBaseType()I
+HSPLcom/android/server/wm/WindowState;->getBaseType()I+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 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;
-HSPLcom/android/server/wm/WindowState;->getCompatInsetsState()Landroid/view/InsetsState;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+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;->getCompatScaleForClient()F+]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;->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;
-HSPLcom/android/server/wm/WindowState;->getDisableFlags()I
+HPLcom/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;
 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;
-HSPLcom/android/server/wm/WindowState;->getEffectiveTouchableRegion(Landroid/graphics/Region;)V
+HPLcom/android/server/wm/WindowState;->getEffectiveTouchableRegion(Landroid/graphics/Region;)V
 HSPLcom/android/server/wm/WindowState;->getFrame()Landroid/graphics/Rect;
 HPLcom/android/server/wm/WindowState;->getImeInputTarget()Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/WindowState;->getInputDispatchingTimeoutMillis()J
+HPLcom/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/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;->getMergedInsetsState()Landroid/view/InsetsState;+]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;
 HSPLcom/android/server/wm/WindowState;->getName()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/WindowState;->getOrientationChanging()Z+]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;->getOrientationChanging()Z+]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->getOwningPackage()Ljava/lang/String;
-HSPLcom/android/server/wm/WindowState;->getParentFrame()Landroid/graphics/Rect;
+HPLcom/android/server/wm/WindowState;->getParentFrame()Landroid/graphics/Rect;
 HSPLcom/android/server/wm/WindowState;->getParentWindow()Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->getProcessGlobalConfiguration()Landroid/content/res/Configuration;
-HSPLcom/android/server/wm/WindowState;->getRectsInScreenSpace(Ljava/util/List;Landroid/graphics/Matrix;[F)Ljava/util/List;+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+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;
 HSPLcom/android/server/wm/WindowState;->getRequestedVisibleTypes()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;
 HSPLcom/android/server/wm/WindowState;->getSession()Landroid/view/SurfaceSession;
-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;->getSyncMethod()I
+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;->getSyncMethod()I
 HSPLcom/android/server/wm/WindowState;->getTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/WindowState;->getTaskFragment()Lcom/android/server/wm/TaskFragment;
-HSPLcom/android/server/wm/WindowState;->getTopParentWindow()Lcom/android/server/wm/WindowState;
+HPLcom/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;
-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;
+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;->getWindow(Ljava/util/function/Predicate;)Lcom/android/server/wm/WindowState;+]Ljava/util/function/Predicate;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HSPLcom/android/server/wm/WindowState;->getWindowFrames()Lcom/android/server/wm/WindowFrames;
+HPLcom/android/server/wm/WindowState;->getWindowFrames()Lcom/android/server/wm/WindowFrames;
 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;->getWindowType()I
 HSPLcom/android/server/wm/WindowState;->handleCompleteDeferredRemoval()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/WindowState;->handleWindowMovedIfNeeded()V+]Lcom/android/server/wm/AccessibilityController;Lcom/android/server/wm/AccessibilityController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/IWindow;Landroid/view/ViewRootImpl$W;,Landroid/view/IWindow$Stub$Proxy;
-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;
+HSPLcom/android/server/wm/WindowState;->handleWindowMovedIfNeeded()V+]Lcom/android/server/wm/AccessibilityController;Lcom/android/server/wm/AccessibilityController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowState;->hasCompatScale()Z+]Lcom/android/server/wm/ActivityRecord;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;->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;
+HSPLcom/android/server/wm/WindowState;->hide(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/WindowState;,Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;
 HSPLcom/android/server/wm/WindowState;->hideNonSystemOverlayWindowsWhenVisible()Z
+HSPLcom/android/server/wm/WindowState;->inRelaunchingActivity()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowState;->isAnimationRunningSelfOrParent()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->isChildWindow()Z
 HSPLcom/android/server/wm/WindowState;->isDimming()Z
@@ -12071,101 +12843,107 @@
 HPLcom/android/server/wm/WindowState;->isFullyTransparentBarAllowed(Landroid/graphics/Rect;)Z
 HSPLcom/android/server/wm/WindowState;->isGoneForLayout()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]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;
-HSPLcom/android/server/wm/WindowState;->isImplicitlyExcludingAllSystemGestures()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/WindowState;->isInteresting()Z
+HSPLcom/android/server/wm/WindowState;->isImeOverlayLayeringTarget()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/WindowState;->isImplicitlyExcludingAllSystemGestures()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/WindowState;->isInteresting()Z+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 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;->isObscuringDisplay()Z
-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;->isOnScreen()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/WindowState;]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;
-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;
-HSPLcom/android/server/wm/WindowState;->isRequestedVisible(I)Z
-HSPLcom/android/server/wm/WindowState;->isRtl()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
-HSPLcom/android/server/wm/WindowState;->isSecureLocked()Z
+HPLcom/android/server/wm/WindowState;->isRequestedVisible(I)Z
+HPLcom/android/server/wm/WindowState;->isRtl()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
+HSPLcom/android/server/wm/WindowState;->isSecureLocked()Z+]Landroid/app/admin/DevicePolicyCache;Lcom/android/server/devicepolicy/DevicePolicyCacheImpl;
 HSPLcom/android/server/wm/WindowState;->isSelfAnimating(II)Z
 HSPLcom/android/server/wm/WindowState;->isStartingWindowAssociatedToTask()Z
-HSPLcom/android/server/wm/WindowState;->isSyncFinished()Z
+HPLcom/android/server/wm/WindowState;->isSyncFinished(Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 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;
+HSPLcom/android/server/wm/WindowState;->isVisibleByPolicyOrInsets()Z+]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/WindowState;->isVisibleNow()Z
 HSPLcom/android/server/wm/WindowState;->isVisibleRequested()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->isVisibleRequestedOrAdding()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/WindowState;->lambda$new$1(Landroid/view/SurfaceControl$Transaction;)V
-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;]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;
-HPLcom/android/server/wm/WindowState;->logExclusionRestrictions(I)V
+HPLcom/android/server/wm/WindowState;->lambda$new$1(Landroid/view/SurfaceControl$Transaction;)V
+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;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/wm/WindowState;->logExclusionRestrictions(I)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 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/WindowToken;Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/WindowState;->mightAffectAllDrawn()Z
-HSPLcom/android/server/wm/WindowState;->needsRelativeLayeringToIme()Z+]Lcom/android/server/wm/WindowContainer;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;
+HPLcom/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
-HPLcom/android/server/wm/WindowState;->notifyInsetsControlChanged()V
+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+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]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;
+HPLcom/android/server/wm/WindowState;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
 HPLcom/android/server/wm/WindowState;->onAppVisibilityChanged(ZZ)V
 HSPLcom/android/server/wm/WindowState;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/WindowState;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/WindowState;->onExitAnimationDone()V
 HSPLcom/android/server/wm/WindowState;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
-HSPLcom/android/server/wm/WindowState;->onResizeHandled()V
-HSPLcom/android/server/wm/WindowState;->onSurfaceShownChanged(Z)V
+HSPLcom/android/server/wm/WindowState;->onResizeHandled()V+]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;
+HSPLcom/android/server/wm/WindowState;->onSurfaceShownChanged(Z)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/MirrorActiveUids;Lcom/android/server/wm/MirrorActiveUids;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/WindowState;->openInputChannel(Landroid/view/InputChannel;)V
-HSPLcom/android/server/wm/WindowState;->performShowLocked()Z
+HSPLcom/android/server/wm/WindowState;->performShowLocked()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/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowState;->prepareSurfaces()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/WindowState;->prepareSync()Z
-HSPLcom/android/server/wm/WindowState;->prepareWindowToDisplayDuringRelayout(Z)V
-HSPLcom/android/server/wm/WindowState;->providesNonDecorInsets()Z
+HPLcom/android/server/wm/WindowState;->prepareSync()Z
+HSPLcom/android/server/wm/WindowState;->prepareWindowToDisplayDuringRelayout(Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowState$PowerManagerWrapper;Lcom/android/server/wm/WindowState$2;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowState;->providesDisplayDecorInsets()Z+]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/wm/WindowState;->registeredForDisplayAreaConfigChanges()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
-HSPLcom/android/server/wm/WindowState;->relayoutVisibleWindow(I)I
+HSPLcom/android/server/wm/WindowState;->relayoutVisibleWindow(I)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/wm/WindowState;->removeIfPossible()V
 HPLcom/android/server/wm/WindowState;->removeImmediately()V
-HPLcom/android/server/wm/WindowState;->reportResized()V
+HSPLcom/android/server/wm/WindowState;->reportResized()V+]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/ActivityRecord;]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;]Landroid/util/MergedConfiguration;Landroid/util/MergedConfiguration;]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;
 HPLcom/android/server/wm/WindowState;->requestUpdateWallpaperIfNeeded()V
 HSPLcom/android/server/wm/WindowState;->resetContentChanged()V+]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;
 HPLcom/android/server/wm/WindowState;->sendAppVisibilityToClients()V
 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;
 HSPLcom/android/server/wm/WindowState;->setDrawnStateEvaluated(Z)V
-HSPLcom/android/server/wm/WindowState;->setForceHideNonSystemOverlayWindowIfNeeded(Z)V
-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;->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/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;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;
+HSPLcom/android/server/wm/WindowState;->setHasSurface(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;->setOnBackInvokedCallbackInfo(Landroid/window/OnBackInvokedCallbackInfo;)V
 HSPLcom/android/server/wm/WindowState;->setReportResizeHints()Z
 HSPLcom/android/server/wm/WindowState;->setRequestedSize(II)V
-HPLcom/android/server/wm/WindowState;->setSystemGestureExclusion(Ljava/util/List;)Z
+HPLcom/android/server/wm/WindowState;->setSystemGestureExclusion(Ljava/util/List;)Z+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/WindowState;->setViewVisibility(I)V
-HSPLcom/android/server/wm/WindowState;->setWallpaperOffset(IIF)Z
+HPLcom/android/server/wm/WindowState;->setWallpaperOffset(IIF)Z
 HSPLcom/android/server/wm/WindowState;->setWindowScale(II)V
+HPLcom/android/server/wm/WindowState;->setupWindowForRemoveOnExit()V
 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
-HSPLcom/android/server/wm/WindowState;->shouldDrawBlurBehind()Z
-HSPLcom/android/server/wm/WindowState;->shouldSendRedrawForSync()Z
+HSPLcom/android/server/wm/WindowState;->shouldDrawBlurBehind()Z+]Lcom/android/server/wm/BlurController;Lcom/android/server/wm/BlurController;
+HSPLcom/android/server/wm/WindowState;->shouldSendRedrawForSync()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowState;->shouldWindowHandleBeTrusted(Lcom/android/server/wm/Session;)Z
 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;
 HSPLcom/android/server/wm/WindowState;->showForAllUsers()Z
-HSPLcom/android/server/wm/WindowState;->showToCurrentUser()Z
-HSPLcom/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;->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+]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/animation/Animation;)V
-HSPLcom/android/server/wm/WindowState;->subtractTouchExcludeRegionIfNeeded(Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;
-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;->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;
+HPLcom/android/server/wm/WindowState;->subtractTouchExcludeRegionIfNeeded(Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;
+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;
+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
 HSPLcom/android/server/wm/WindowState;->updateAboveInsetsState(Landroid/view/InsetsState;Landroid/util/SparseArray;Landroid/util/ArraySet;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;
 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;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/WindowState;->updateGlobalScale()V
 HSPLcom/android/server/wm/WindowState;->updateLastFrames()V
-HSPLcom/android/server/wm/WindowState;->updateRegionForModalActivityWindow(Landroid/graphics/Region;)V+]Lcom/android/server/wm/WindowContainer;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;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskFragment;]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;->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;
+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;->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;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/wm/WindowState;->updateSurfacePosition(Landroid/view/SurfaceControl$Transaction;)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;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Ljava/util/function/Consumer;Lcom/android/server/wm/WindowState$$ExternalSyntheticLambda2;,Lcom/android/server/wm/WindowState$$ExternalSyntheticLambda1;
-HSPLcom/android/server/wm/WindowState;->useBLASTSync()Z
+HSPLcom/android/server/wm/WindowState;->updateScaleIfNeeded()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowState;]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/InsetsSourceProvider;,Lcom/android/server/wm/ImeInsetsSourceProvider;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/wm/WindowState;->updateSurfacePosition(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Landroid/graphics/Point;Landroid/graphics/Point;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator;]Ljava/util/function/Consumer;Lcom/android/server/wm/WindowState$$ExternalSyntheticLambda1;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
+HSPLcom/android/server/wm/WindowState;->useBLASTSync()Z+]Ljava/util/List;Ljava/util/ArrayList;
 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;
 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;->applyAnimationLocked(IZ)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]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;
 HSPLcom/android/server/wm/WindowStateAnimator;->applyEnterAnimationLocked()V
 HSPLcom/android/server/wm/WindowStateAnimator;->commitFinishDrawingLocked()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/WindowStateAnimator;->computeShownFrameLocked()V
@@ -12173,10 +12951,11 @@
 HPLcom/android/server/wm/WindowStateAnimator;->destroySurface(Landroid/view/SurfaceControl$Transaction;)V
 HPLcom/android/server/wm/WindowStateAnimator;->destroySurfaceLocked(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/wm/WindowStateAnimator;->finishDrawingLocked(Landroid/view/SurfaceControl$Transaction;)Z
-HSPLcom/android/server/wm/WindowStateAnimator;->getShown()Z
+HSPLcom/android/server/wm/WindowStateAnimator;->getShown()Z+]Lcom/android/server/wm/WindowSurfaceController;Lcom/android/server/wm/WindowSurfaceController;
 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/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;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowStateAnimator;->prepareSurfaceLocked(Landroid/view/SurfaceControl$Transaction;)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/wm/WindowSurfaceController;Lcom/android/server/wm/WindowSurfaceController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/WindowStateAnimator;->resetDrawState()V
 HSPLcom/android/server/wm/WindowSurfaceController;-><init>(Ljava/lang/String;IILcom/android/server/wm/WindowStateAnimator;I)V
 HPLcom/android/server/wm/WindowSurfaceController;->destroy(Landroid/view/SurfaceControl$Transaction;)V
@@ -12185,9 +12964,9 @@
 HSPLcom/android/server/wm/WindowSurfaceController;->hasSurface()Z
 HPLcom/android/server/wm/WindowSurfaceController;->hideSurface(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/wm/WindowSurfaceController;->setColorSpaceAgnostic(Landroid/view/SurfaceControl$Transaction;Z)V
-HSPLcom/android/server/wm/WindowSurfaceController;->setShown(Z)V
-HPLcom/android/server/wm/WindowSurfaceController;->showRobustly(Landroid/view/SurfaceControl$Transaction;)V
-HSPLcom/android/server/wm/WindowSurfacePlacer$Traverser;->run()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;)V
+HSPLcom/android/server/wm/WindowSurfacePlacer$Traverser;->run()V+]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
 HSPLcom/android/server/wm/WindowSurfacePlacer;->-$$Nest$fgetmService(Lcom/android/server/wm/WindowSurfacePlacer;)Lcom/android/server/wm/WindowManagerService;
 HSPLcom/android/server/wm/WindowSurfacePlacer;->continueLayout(Z)V
 HSPLcom/android/server/wm/WindowSurfacePlacer;->deferLayout()V
@@ -12196,28 +12975,38 @@
 HSPLcom/android/server/wm/WindowSurfacePlacer;->performSurfacePlacement(Z)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
 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;
 HSPLcom/android/server/wm/WindowSurfacePlacer;->requestTraversal()V+]Landroid/os/Handler;Landroid/os/Handler;
-HSPLcom/android/server/wm/WindowToken$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
+HPLcom/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;-><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
 HSPLcom/android/server/wm/WindowToken;->assignLayer(Landroid/view/SurfaceControl$Transaction;I)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;
+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;
 HSPLcom/android/server/wm/WindowToken;->getFixedRotationTransformDisplayFrames()Lcom/android/server/wm/DisplayFrames;
 HSPLcom/android/server/wm/WindowToken;->getFixedRotationTransformInsetsState()Landroid/view/InsetsState;
-HSPLcom/android/server/wm/WindowToken;->hasFixedRotationTransform()Z
-HSPLcom/android/server/wm/WindowToken;->isClientVisible()Z
-HSPLcom/android/server/wm/WindowToken;->isFinishingFixedRotationTransform()Z
+HPLcom/android/server/wm/WindowToken;->hasFixedRotationTransform()Z
+HPLcom/android/server/wm/WindowToken;->isClientVisible()Z
+HPLcom/android/server/wm/WindowToken;->isFinishingFixedRotationTransform()Z
 HSPLcom/android/server/wm/WindowToken;->isFixedRotationTransforming()Z
-HSPLcom/android/server/wm/WindowToken;->setClientVisible(Z)V
+HPLcom/android/server/wm/WindowToken;->lambda$setInsetsFrozen$1(ZLcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/WindowToken;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/WindowToken;->prepareSync()Z
+HPLcom/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;->setInsetsFrozen(Z)V
 HSPLcom/android/server/wm/WindowToken;->toString()Ljava/lang/String;
+HSPLcom/android/server/wm/WindowToken;->updateSurfacePosition(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/wm/WindowTracing;->isEnabled()Z
 HSPLcom/android/server/wm/WindowTracing;->logState(Ljava/lang/String;)V
+HPLcom/android/server/wm/utils/InsetUtils;->addInsets(Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 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;
-HSPLcom/android/server/wm/utils/RegionUtils;->rectListToRegion(Ljava/util/List;Landroid/graphics/Region;)V
-HSPLcom/android/server/wm/utils/RotationCache;->getOrCompute(Ljava/lang/Object;I)Ljava/lang/Object;
-Landroid/content/IntentFilter$$ExternalSyntheticLambda2;
+HPLcom/android/server/wm/utils/RegionUtils;->rectListToRegion(Ljava/util/List;Landroid/graphics/Region;)V
+HSPLcom/android/server/wm/utils/RotationCache;->getOrCompute(Ljava/lang/Object;I)Ljava/lang/Object;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/utils/RotationCache$RotationDependentComputation;Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda8;,Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda7;,Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda9;,Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda2;
+Landroid/app/ActivityThread$ApplicationThread;
+Landroid/app/ApplicationPackageManager;
+Landroid/content/pm/AuxiliaryResolveInfo$AuxiliaryFilter;
 Landroid/content/pm/PackageManagerInternal$ExternalSourcesPolicy;
 Landroid/content/pm/PackageManagerInternal;
 Landroid/content/pm/TestUtilityService;
+Landroid/hardware/SystemSensorManager;
 Landroid/hardware/light/HwLight$1;
 Landroid/hardware/light/HwLight;
 Landroid/hardware/light/ILights;
@@ -12233,20 +13022,22 @@
 Landroid/net/ConnectivityModuleConnector$Dependencies;
 Landroid/net/ConnectivityModuleConnector$DependenciesImpl;
 Landroid/net/ConnectivityModuleConnector;
-Landroid/net/NetworkPolicyManager$NetworkPolicyCallbackProxy;
 Landroid/os/BatteryStatsInternal;
+Landroid/os/BinderProxy;
+Landroid/os/IInstalld$Stub$Proxy;
 Landroid/power/PowerStatsInternal;
 Landroid/sysprop/SurfaceFlingerProperties;
-Lcom/android/internal/util/ArtBinaryXmlSerializer;
+Landroid/telephony/CellIdentityLte;
+Landroid/telephony/CellIdentityNr;
 Lcom/android/modules/utils/build/SdkLevel;
 Lcom/android/modules/utils/build/UnboundedSdkLevel;
 Lcom/android/server/AnimationThread;
 Lcom/android/server/AppFuseMountException;
 Lcom/android/server/BatteryService$LocalService;
+Lcom/android/server/BinaryTransparencyService$BinaryTransparencyServiceImpl$$ExternalSyntheticLambda0;
 Lcom/android/server/BundleUtils;
 Lcom/android/server/ConsumerIrService;
 Lcom/android/server/DisplayThread;
-Lcom/android/server/DynamicSystemService;
 Lcom/android/server/EventLogTags;
 Lcom/android/server/ExplicitHealthCheckController;
 Lcom/android/server/FgThread;
@@ -12304,6 +13095,7 @@
 Lcom/android/server/adb/AdbDebuggingManager$PairingThread;
 Lcom/android/server/am/ActiveServices$1;
 Lcom/android/server/am/ActiveServices$5;
+Lcom/android/server/am/ActiveServices$MediaProjectionFgsTypeCustomPermission;
 Lcom/android/server/am/ActiveServices$ServiceMap;
 Lcom/android/server/am/ActiveServices$ServiceRestarter;
 Lcom/android/server/am/ActiveServices$SystemExemptedFgsTypePermission;
@@ -12316,22 +13108,17 @@
 Lcom/android/server/am/ActivityManagerGlobalLock;
 Lcom/android/server/am/ActivityManagerLocal;
 Lcom/android/server/am/ActivityManagerProcLock;
-Lcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda26;
+Lcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda22;
 Lcom/android/server/am/ActivityManagerService$12;
 Lcom/android/server/am/ActivityManagerService$13;
 Lcom/android/server/am/ActivityManagerService$16;
 Lcom/android/server/am/ActivityManagerService$1;
 Lcom/android/server/am/ActivityManagerService$2;
 Lcom/android/server/am/ActivityManagerService$3;
-Lcom/android/server/am/ActivityManagerService$4;
-Lcom/android/server/am/ActivityManagerService$5;
 Lcom/android/server/am/ActivityManagerService$6;
 Lcom/android/server/am/ActivityManagerService$8;
-Lcom/android/server/am/ActivityManagerService$CacheBinder;
-Lcom/android/server/am/ActivityManagerService$DbBinder;
 Lcom/android/server/am/ActivityManagerService$FgsTempAllowListItem;
 Lcom/android/server/am/ActivityManagerService$GetBackgroundStartPrivilegesFunctor;
-Lcom/android/server/am/ActivityManagerService$GraphicsBinder;
 Lcom/android/server/am/ActivityManagerService$HiddenApiSettings;
 Lcom/android/server/am/ActivityManagerService$Injector;
 Lcom/android/server/am/ActivityManagerService$IntentFirewallInterface;
@@ -12339,16 +13126,13 @@
 Lcom/android/server/am/ActivityManagerService$LocalService;
 Lcom/android/server/am/ActivityManagerService$MainHandler$1;
 Lcom/android/server/am/ActivityManagerService$MainHandler;
-Lcom/android/server/am/ActivityManagerService$MemBinder$1;
-Lcom/android/server/am/ActivityManagerService$MemBinder;
-Lcom/android/server/am/ActivityManagerService$PermissionController;
 Lcom/android/server/am/ActivityManagerService$PidMap;
 Lcom/android/server/am/ActivityManagerService$ProcessChangeItem;
-Lcom/android/server/am/ActivityManagerService$ProcessInfoService;
 Lcom/android/server/am/ActivityManagerService$UiHandler;
 Lcom/android/server/am/ActivityManagerService;
 Lcom/android/server/am/ActivityManagerShellCommand;
-Lcom/android/server/am/AnrHelper$$ExternalSyntheticLambda0;
+Lcom/android/server/am/AnrHelper$$ExternalSyntheticLambda1;
+Lcom/android/server/am/AnrHelper$$ExternalSyntheticLambda2;
 Lcom/android/server/am/AnrHelper$AnrConsumerThread;
 Lcom/android/server/am/AnrHelper;
 Lcom/android/server/am/AppBatteryExemptionTracker$AppBatteryExemptionPolicy;
@@ -12384,11 +13168,10 @@
 Lcom/android/server/am/AppPermissionTracker$AppPermissionPolicy;
 Lcom/android/server/am/AppPermissionTracker$MyHandler;
 Lcom/android/server/am/AppPermissionTracker;
-Lcom/android/server/am/AppProfiler$$ExternalSyntheticLambda1;
+Lcom/android/server/am/AppProfiler$$ExternalSyntheticLambda0;
 Lcom/android/server/am/AppProfiler$1;
 Lcom/android/server/am/AppProfiler$BgHandler;
-Lcom/android/server/am/AppProfiler$CpuBinder$1;
-Lcom/android/server/am/AppProfiler$CpuBinder;
+Lcom/android/server/am/AppProfiler$CachedAppsWatermarkData;
 Lcom/android/server/am/AppProfiler$ProcessCpuThread;
 Lcom/android/server/am/AppProfiler$ProfileData;
 Lcom/android/server/am/AppProfiler;
@@ -12407,7 +13190,6 @@
 Lcom/android/server/am/AppRestrictionController$TrackerInfo;
 Lcom/android/server/am/AppRestrictionController$UidBatteryUsageProvider;
 Lcom/android/server/am/AppRestrictionController;
-Lcom/android/server/am/AppWaitingForDebuggerDialog;
 Lcom/android/server/am/BaseAppStateDurations;
 Lcom/android/server/am/BaseAppStateDurationsTracker$SimplePackageDurations;
 Lcom/android/server/am/BaseAppStateDurationsTracker$UidStateDurations;
@@ -12428,8 +13210,7 @@
 Lcom/android/server/am/BaseAppStateTracker$StateListener;
 Lcom/android/server/am/BaseAppStateTracker;
 Lcom/android/server/am/BaseErrorDialog;
-Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda46;
-Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda96;
+Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda98;
 Lcom/android/server/am/BatteryStatsService$1;
 Lcom/android/server/am/BatteryStatsService$2;
 Lcom/android/server/am/BatteryStatsService$3;
@@ -12438,17 +13219,18 @@
 Lcom/android/server/am/BatteryStatsService;
 Lcom/android/server/am/BroadcastConstants$SettingsObserver;
 Lcom/android/server/am/BroadcastConstants;
+Lcom/android/server/am/BroadcastDeliveryFailedException;
 Lcom/android/server/am/BroadcastFilter;
 Lcom/android/server/am/BroadcastHistory;
 Lcom/android/server/am/BroadcastProcessQueue$BroadcastConsumer;
 Lcom/android/server/am/BroadcastProcessQueue$BroadcastPredicate;
 Lcom/android/server/am/BroadcastProcessQueue;
 Lcom/android/server/am/BroadcastQueue;
-Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda13;
+Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda10;
+Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda11;
+Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda12;
 Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda14;
-Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda4;
-Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda5;
-Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda6;
+Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda15;
 Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda7;
 Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda8;
 Lcom/android/server/am/BroadcastQueueModernImpl$$ExternalSyntheticLambda9;
@@ -12481,7 +13263,6 @@
 Lcom/android/server/am/CachedAppOptimizer$PropertyChangedCallbackForTest;
 Lcom/android/server/am/CachedAppOptimizer$SettingsContentObserver;
 Lcom/android/server/am/CachedAppOptimizer;
-Lcom/android/server/am/ComponentAliasResolver$$ExternalSyntheticLambda2;
 Lcom/android/server/am/ComponentAliasResolver$1;
 Lcom/android/server/am/ComponentAliasResolver;
 Lcom/android/server/am/ContentProviderConnection;
@@ -12489,14 +13270,11 @@
 Lcom/android/server/am/DropboxRateLimiter$Clock;
 Lcom/android/server/am/DropboxRateLimiter$DefaultClock;
 Lcom/android/server/am/DropboxRateLimiter;
-Lcom/android/server/am/ErrorDialogController;
-Lcom/android/server/am/EventLogTags;
 Lcom/android/server/am/FgsTempAllowList;
 Lcom/android/server/am/ForegroundServiceTypeLoggerModule;
 Lcom/android/server/am/HostingRecord;
 Lcom/android/server/am/InstrumentationReporter$MyThread;
 Lcom/android/server/am/InstrumentationReporter;
-Lcom/android/server/am/LmkdConnection$1;
 Lcom/android/server/am/LmkdConnection$LmkdConnectionListener;
 Lcom/android/server/am/LmkdConnection;
 Lcom/android/server/am/LowMemDetector$LowMemThread;
@@ -12509,7 +13287,6 @@
 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;
 Lcom/android/server/am/PendingStartActivityUids;
@@ -12517,8 +13294,6 @@
 Lcom/android/server/am/PhantomProcessList$Injector;
 Lcom/android/server/am/PhantomProcessList;
 Lcom/android/server/am/PreBootBroadcaster;
-Lcom/android/server/am/ProcessCachedOptimizerRecord;
-Lcom/android/server/am/ProcessErrorStateRecord;
 Lcom/android/server/am/ProcessList$$ExternalSyntheticLambda4;
 Lcom/android/server/am/ProcessList$1;
 Lcom/android/server/am/ProcessList$ImperceptibleKillRunner$H;
@@ -12529,15 +13304,8 @@
 Lcom/android/server/am/ProcessList$KillHandler;
 Lcom/android/server/am/ProcessList$MyProcessMap;
 Lcom/android/server/am/ProcessList$ProcStartHandler;
-Lcom/android/server/am/ProcessList$ProcStateMemTracker;
 Lcom/android/server/am/ProcessList;
-Lcom/android/server/am/ProcessProfileRecord$$ExternalSyntheticLambda0;
-Lcom/android/server/am/ProcessProfileRecord;
-Lcom/android/server/am/ProcessProviderRecord;
-Lcom/android/server/am/ProcessReceiverRecord;
 Lcom/android/server/am/ProcessRecord;
-Lcom/android/server/am/ProcessServiceRecord;
-Lcom/android/server/am/ProcessStateRecord;
 Lcom/android/server/am/ProcessStatsService$1;
 Lcom/android/server/am/ProcessStatsService$3;
 Lcom/android/server/am/ProcessStatsService$4;
@@ -12545,22 +13313,18 @@
 Lcom/android/server/am/ProcessStatsService;
 Lcom/android/server/am/ProviderMap;
 Lcom/android/server/am/ReceiverList;
-Lcom/android/server/am/SameProcessApplicationThread;
 Lcom/android/server/am/ServiceRecord;
 Lcom/android/server/am/TraceErrorLogger;
 Lcom/android/server/am/UidObserverController$$ExternalSyntheticLambda0;
 Lcom/android/server/am/UidObserverController$ChangeRecord;
-Lcom/android/server/am/UidObserverController$UidObserverRegistration;
 Lcom/android/server/am/UidObserverController;
 Lcom/android/server/am/UidProcessMap;
-Lcom/android/server/am/UidRecord;
 Lcom/android/server/am/UserController$1;
 Lcom/android/server/am/UserController$Injector$1;
 Lcom/android/server/am/UserController$Injector;
 Lcom/android/server/am/UserController$UserProgressListener;
 Lcom/android/server/am/UserController;
 Lcom/android/server/am/UserState;
-Lcom/android/server/am/UserSwitchingDialog;
 Lcom/android/server/app/GameManagerService;
 Lcom/android/server/apphibernation/AppHibernationService$$ExternalSyntheticLambda5;
 Lcom/android/server/appop/AppOpsCheckingServiceImpl$1$1;
@@ -12571,35 +13335,24 @@
 Lcom/android/server/appop/AppOpsManagerLocal;
 Lcom/android/server/appop/AppOpsRestrictions;
 Lcom/android/server/appop/AppOpsRestrictionsImpl;
-Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda10;
-Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda11;
 Lcom/android/server/appop/AppOpsService$1$1;
 Lcom/android/server/appop/AppOpsService$1;
 Lcom/android/server/appop/AppOpsService$2;
 Lcom/android/server/appop/AppOpsService$5;
 Lcom/android/server/appop/AppOpsService$8;
-Lcom/android/server/appop/AppOpsService$ActiveCallback;
 Lcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;
 Lcom/android/server/appop/AppOpsService$AppOpsManagerLocalImpl;
+Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda11;
 Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda3;
 Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;
 Lcom/android/server/appop/AppOpsService$Constants;
 Lcom/android/server/appop/AppOpsService$ModeCallback;
 Lcom/android/server/appop/AppOpsService$Op;
 Lcom/android/server/appop/AppOpsService$Ops;
-Lcom/android/server/appop/AppOpsService$PackageVerificationResult;
 Lcom/android/server/appop/AppOpsService$Shell;
 Lcom/android/server/appop/AppOpsService$UidState;
 Lcom/android/server/appop/AppOpsService;
-Lcom/android/server/appop/AppOpsUidStateTracker$UidStateChangedCallback;
 Lcom/android/server/appop/AppOpsUidStateTracker;
-Lcom/android/server/appop/AppOpsUidStateTrackerImpl$$ExternalSyntheticLambda1;
-Lcom/android/server/appop/AppOpsUidStateTrackerImpl$1$$ExternalSyntheticLambda0;
-Lcom/android/server/appop/AppOpsUidStateTrackerImpl$1;
-Lcom/android/server/appop/AppOpsUidStateTrackerImpl$DelayableExecutor;
-Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog$$ExternalSyntheticLambda1;
-Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog$$ExternalSyntheticLambda2;
-Lcom/android/server/appop/AppOpsUidStateTrackerImpl$EventLog;
 Lcom/android/server/appop/AppOpsUidStateTrackerImpl;
 Lcom/android/server/appop/AttributedOp$InProgressStartOpEventPool;
 Lcom/android/server/appop/AttributedOp$OpEventProxyInfoPool;
@@ -12618,7 +13371,6 @@
 Lcom/android/server/companion/virtual/InputController;
 Lcom/android/server/compat/CompatChange$ChangeListener;
 Lcom/android/server/compat/CompatChange;
-Lcom/android/server/compat/CompatConfig$$ExternalSyntheticLambda0;
 Lcom/android/server/compat/CompatConfig;
 Lcom/android/server/compat/OverrideValidatorImpl$SettingsObserver;
 Lcom/android/server/compat/OverrideValidatorImpl;
@@ -12645,9 +13397,6 @@
 Lcom/android/server/criticalevents/CriticalEventLog$ThreadSafeRingBuffer;
 Lcom/android/server/criticalevents/CriticalEventLog;
 Lcom/android/server/devicepolicy/CryptoTestHelper;
-Lcom/android/server/display/DensityMapping$$ExternalSyntheticLambda0;
-Lcom/android/server/display/DensityMapping$Entry;
-Lcom/android/server/display/DensityMapping;
 Lcom/android/server/display/DeviceStateToLayoutMap;
 Lcom/android/server/display/DisplayAdapter$$ExternalSyntheticLambda0;
 Lcom/android/server/display/DisplayAdapter$$ExternalSyntheticLambda1;
@@ -12657,10 +13406,10 @@
 Lcom/android/server/display/DisplayControl;
 Lcom/android/server/display/DisplayDevice;
 Lcom/android/server/display/DisplayDeviceConfig$1;
-Lcom/android/server/display/DisplayDeviceConfig$BrightnessThrottlingData$ThrottlingLevel;
-Lcom/android/server/display/DisplayDeviceConfig$BrightnessThrottlingData;
 Lcom/android/server/display/DisplayDeviceConfig$HighBrightnessModeData;
 Lcom/android/server/display/DisplayDeviceConfig$SensorData;
+Lcom/android/server/display/DisplayDeviceConfig$ThermalBrightnessThrottlingData$ThrottlingLevel;
+Lcom/android/server/display/DisplayDeviceConfig$ThermalBrightnessThrottlingData;
 Lcom/android/server/display/DisplayDeviceConfig;
 Lcom/android/server/display/DisplayDeviceInfo;
 Lcom/android/server/display/DisplayDeviceRepository$Listener;
@@ -12680,6 +13429,7 @@
 Lcom/android/server/display/DisplayManagerService;
 Lcom/android/server/display/DisplayManagerShellCommand;
 Lcom/android/server/display/DisplayPowerControllerInterface;
+Lcom/android/server/display/HighBrightnessModeMetadataMapper;
 Lcom/android/server/display/LocalDisplayAdapter$BacklightAdapter;
 Lcom/android/server/display/LocalDisplayAdapter$DisplayEventListener;
 Lcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;
@@ -12710,15 +13460,12 @@
 Lcom/android/server/display/config/BrightnessThresholds;
 Lcom/android/server/display/config/BrightnessThrottlingMap;
 Lcom/android/server/display/config/BrightnessThrottlingPoint;
-Lcom/android/server/display/config/Density;
-Lcom/android/server/display/config/DensityMapping;
 Lcom/android/server/display/config/DisplayConfiguration;
 Lcom/android/server/display/config/HbmTiming;
 Lcom/android/server/display/config/HighBrightnessMode;
 Lcom/android/server/display/config/IntegerArray;
 Lcom/android/server/display/config/NitsMap;
 Lcom/android/server/display/config/Point;
-Lcom/android/server/display/config/RefreshRateRange;
 Lcom/android/server/display/config/SdrHdrRatioMap;
 Lcom/android/server/display/config/SdrHdrRatioPoint;
 Lcom/android/server/display/config/SensorDetails;
@@ -12731,11 +13478,10 @@
 Lcom/android/server/display/layout/Layout;
 Lcom/android/server/display/mode/DisplayModeDirector$$ExternalSyntheticLambda0;
 Lcom/android/server/display/mode/DisplayModeDirector$AppRequestObserver;
-Lcom/android/server/display/mode/DisplayModeDirector$BallotBox;
-Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda0;
-Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda1;
-Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda2;
-Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda3;
+Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda12;
+Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda13;
+Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda14;
+Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda15;
 Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda4;
 Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda5;
 Lcom/android/server/display/mode/DisplayModeDirector$BrightnessObserver$$ExternalSyntheticLambda6;
@@ -12755,7 +13501,8 @@
 Lcom/android/server/display/mode/DisplayModeDirector$UdfpsObserver;
 Lcom/android/server/display/mode/DisplayModeDirector;
 Lcom/android/server/display/mode/SkinThermalStatusObserver;
-Lcom/android/server/display/utils/AmbientFilter;
+Lcom/android/server/display/mode/VotesStorage$Listener;
+Lcom/android/server/display/mode/VotesStorage;
 Lcom/android/server/display/utils/SensorUtils;
 Lcom/android/server/dreams/DreamManagerService$LocalService;
 Lcom/android/server/firewall/AndFilter$1;
@@ -12808,6 +13555,7 @@
 Lcom/android/server/firewall/StringFilter;
 Lcom/android/server/gpu/GpuService;
 Lcom/android/server/graphics/fonts/FontManagerService$Lifecycle;
+Lcom/android/server/input/FocusEventDebugView;
 Lcom/android/server/input/InputManagerInternal;
 Lcom/android/server/input/InputManagerService$2;
 Lcom/android/server/input/InputManagerService$AdditionalDisplayInputProperties;
@@ -12818,7 +13566,8 @@
 Lcom/android/server/input/InputShellCommand;
 Lcom/android/server/input/NativeInputManagerService$NativeImpl;
 Lcom/android/server/input/NativeInputManagerService;
-Lcom/android/server/job/controllers/JobStatus;
+Lcom/android/server/job/JobSchedulerService$$ExternalSyntheticLambda3;
+Lcom/android/server/job/controllers/ConnectivityController$3;
 Lcom/android/server/job/controllers/PrefetchController$1;
 Lcom/android/server/job/controllers/QuotaController$UsageEventTracker;
 Lcom/android/server/lights/LightsManager;
@@ -12833,39 +13582,14 @@
 Lcom/android/server/location/gnss/GnssVisibilityControl;
 Lcom/android/server/location/gnss/hal/GnssNative;
 Lcom/android/server/locksettings/SyntheticPasswordManager;
-Lcom/android/server/media/projection/MediaProjectionManagerService$1;
-Lcom/android/server/net/NetworkManagementInternal;
 Lcom/android/server/net/watchlist/NetworkWatchlistService$1;
-Lcom/android/server/om/IdmapDaemon$$ExternalSyntheticLambda0;
-Lcom/android/server/om/IdmapDaemon$Connection$$ExternalSyntheticLambda0;
-Lcom/android/server/om/IdmapDaemon$Connection;
-Lcom/android/server/om/IdmapDaemon;
-Lcom/android/server/om/IdmapManager;
 Lcom/android/server/om/OverlayActorEnforcer$ActorState;
 Lcom/android/server/om/OverlayActorEnforcer;
-Lcom/android/server/om/OverlayManagerService$$ExternalSyntheticLambda1;
 Lcom/android/server/om/OverlayManagerService$$ExternalSyntheticLambda4;
-Lcom/android/server/om/OverlayManagerService$1;
-Lcom/android/server/om/OverlayManagerService$PackageManagerHelperImpl$$ExternalSyntheticLambda0;
-Lcom/android/server/om/OverlayManagerService$PackageManagerHelperImpl$PackageStateUsers;
-Lcom/android/server/om/OverlayManagerService$PackageManagerHelperImpl;
-Lcom/android/server/om/OverlayManagerService$PackageReceiver;
-Lcom/android/server/om/OverlayManagerService$UserReceiver;
 Lcom/android/server/om/OverlayManagerService;
-Lcom/android/server/om/OverlayManagerServiceImpl$$ExternalSyntheticLambda0;
-Lcom/android/server/om/OverlayManagerServiceImpl$$ExternalSyntheticLambda2;
-Lcom/android/server/om/OverlayManagerServiceImpl$OperationFailedException;
-Lcom/android/server/om/OverlayManagerServiceImpl;
-Lcom/android/server/om/OverlayManagerSettings$$ExternalSyntheticLambda2;
-Lcom/android/server/om/OverlayManagerSettings$BadKeyException;
-Lcom/android/server/om/OverlayManagerSettings$Serializer;
-Lcom/android/server/om/OverlayManagerSettings$SettingsItem;
-Lcom/android/server/om/OverlayManagerSettings;
-Lcom/android/server/om/OverlayManagerShellCommand;
 Lcom/android/server/om/OverlayReferenceMapper$1;
 Lcom/android/server/om/OverlayReferenceMapper$Provider;
 Lcom/android/server/om/OverlayReferenceMapper;
-Lcom/android/server/om/PackageManagerHelper;
 Lcom/android/server/os/DeviceIdentifiersPolicyService$DeviceIdentifiersPolicy;
 Lcom/android/server/os/DeviceIdentifiersPolicyService;
 Lcom/android/server/permission/access/AccessCheckingService;
@@ -12880,7 +13604,6 @@
 Lcom/android/server/permission/access/SystemState;
 Lcom/android/server/permission/access/UserState;
 Lcom/android/server/permission/access/WritableState;
-Lcom/android/server/permission/access/appop/AppOpService$Companion;
 Lcom/android/server/permission/access/appop/AppOpService;
 Lcom/android/server/permission/access/appop/BaseAppOpPersistence$Companion;
 Lcom/android/server/permission/access/appop/BaseAppOpPersistence;
@@ -12888,19 +13611,9 @@
 Lcom/android/server/permission/access/appop/PackageAppOpPersistence$Companion;
 Lcom/android/server/permission/access/appop/PackageAppOpPersistence;
 Lcom/android/server/permission/access/appop/PackageAppOpPolicy;
-Lcom/android/server/permission/access/appop/UidAppOpPersistence$Companion;
-Lcom/android/server/permission/access/appop/UidAppOpPersistence;
-Lcom/android/server/permission/access/appop/UidAppOpPolicy;
-Lcom/android/server/permission/access/collection/IndexedListSet;
 Lcom/android/server/permission/access/permission/PermissionService$Companion;
 Lcom/android/server/permission/access/permission/PermissionService$OnPermissionFlagsChangedListener;
 Lcom/android/server/permission/access/permission/PermissionService;
-Lcom/android/server/permission/access/permission/UidPermissionPersistence$Companion;
-Lcom/android/server/permission/access/permission/UidPermissionPersistence;
-Lcom/android/server/permission/access/permission/UidPermissionPolicy$Companion;
-Lcom/android/server/permission/access/permission/UidPermissionPolicy$OnPermissionFlagsChangedListener;
-Lcom/android/server/permission/access/permission/UidPermissionPolicy;
-Lcom/android/server/permission/jarjar/kotlin/NotImplementedError;
 Lcom/android/server/permission/jarjar/kotlin/UninitializedPropertyAccessException;
 Lcom/android/server/permission/jarjar/kotlin/collections/ArraysKt__ArraysJVMKt;
 Lcom/android/server/permission/jarjar/kotlin/collections/ArraysKt__ArraysKt;
@@ -12911,17 +13624,12 @@
 Lcom/android/server/pm/AbstractStatsBase;
 Lcom/android/server/pm/ApexManager$1;
 Lcom/android/server/pm/ApexManager$ActiveApexInfo;
-Lcom/android/server/pm/ApexManager$ApexManagerFlattenedApex;
 Lcom/android/server/pm/ApexManager$ApexManagerImpl;
 Lcom/android/server/pm/ApexManager$ScanResult;
 Lcom/android/server/pm/ApexManager;
 Lcom/android/server/pm/ApexSystemServiceInfo;
-Lcom/android/server/pm/AppDataHelper$$ExternalSyntheticLambda1;
-Lcom/android/server/pm/AppDataHelper$$ExternalSyntheticLambda2;
-Lcom/android/server/pm/AppDataHelper$$ExternalSyntheticLambda3;
 Lcom/android/server/pm/AppDataHelper;
 Lcom/android/server/pm/AppIdSettingMap;
-Lcom/android/server/pm/AppStateHelper;
 Lcom/android/server/pm/AppsFilterBase;
 Lcom/android/server/pm/AppsFilterImpl$$ExternalSyntheticLambda0;
 Lcom/android/server/pm/AppsFilterImpl$1;
@@ -12929,15 +13637,10 @@
 Lcom/android/server/pm/AppsFilterImpl;
 Lcom/android/server/pm/AppsFilterLocked;
 Lcom/android/server/pm/AppsFilterSnapshot;
-Lcom/android/server/pm/AppsFilterSnapshotImpl;
 Lcom/android/server/pm/AppsFilterUtils;
-Lcom/android/server/pm/BackgroundDexOptJobService;
-Lcom/android/server/pm/BackgroundDexOptService$1;
-Lcom/android/server/pm/BackgroundDexOptService$Injector;
 Lcom/android/server/pm/BackgroundDexOptService;
 Lcom/android/server/pm/BroadcastHelper;
 Lcom/android/server/pm/ChangedPackagesTracker;
-Lcom/android/server/pm/CompilerStats$PackageStats;
 Lcom/android/server/pm/CompilerStats;
 Lcom/android/server/pm/Computer;
 Lcom/android/server/pm/ComputerEngine$$ExternalSyntheticLambda0;
@@ -12967,8 +13670,6 @@
 Lcom/android/server/pm/DistractingPackageHelper;
 Lcom/android/server/pm/DomainVerificationConnection;
 Lcom/android/server/pm/FeatureConfig;
-Lcom/android/server/pm/GentleUpdateHelper;
-Lcom/android/server/pm/IPackageManagerBase;
 Lcom/android/server/pm/IncrementalProgressListener;
 Lcom/android/server/pm/InitAppsHelper$$ExternalSyntheticLambda0;
 Lcom/android/server/pm/InitAppsHelper$$ExternalSyntheticLambda1;
@@ -12980,7 +13681,6 @@
 Lcom/android/server/pm/InstallRequest;
 Lcom/android/server/pm/InstallSource;
 Lcom/android/server/pm/Installer$$ExternalSyntheticLambda0;
-Lcom/android/server/pm/Installer$Batch;
 Lcom/android/server/pm/Installer$InstallerException;
 Lcom/android/server/pm/Installer$LegacyDexoptDisabledException;
 Lcom/android/server/pm/Installer;
@@ -12988,23 +13688,14 @@
 Lcom/android/server/pm/InstantAppRegistry$2;
 Lcom/android/server/pm/InstantAppRegistry$CookiePersistence;
 Lcom/android/server/pm/InstantAppRegistry;
-Lcom/android/server/pm/InstantAppResolverConnection$ConnectionException;
-Lcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller$1;
-Lcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller;
-Lcom/android/server/pm/InstantAppResolverConnection$MyServiceConnection;
 Lcom/android/server/pm/InstantAppResolverConnection;
 Lcom/android/server/pm/InstructionSets;
 Lcom/android/server/pm/KeySetHandle;
 Lcom/android/server/pm/KeySetManagerService$PublicKeyHandle;
 Lcom/android/server/pm/KeySetManagerService;
-Lcom/android/server/pm/KnownPackages;
 Lcom/android/server/pm/ModuleInfoProvider;
 Lcom/android/server/pm/MovePackageHelper$MoveCallbacks;
 Lcom/android/server/pm/NoFilteringResolver;
-Lcom/android/server/pm/OtaDexoptService$1;
-Lcom/android/server/pm/OtaDexoptService$OTADexoptPackageDexOptimizer;
-Lcom/android/server/pm/OtaDexoptService;
-Lcom/android/server/pm/OtaDexoptShellCommand;
 Lcom/android/server/pm/PackageAbiHelper$Abis;
 Lcom/android/server/pm/PackageAbiHelper$NativeLibraryPaths;
 Lcom/android/server/pm/PackageAbiHelper;
@@ -13015,10 +13706,7 @@
 Lcom/android/server/pm/PackageDexOptimizer;
 Lcom/android/server/pm/PackageFreezer;
 Lcom/android/server/pm/PackageHandler;
-Lcom/android/server/pm/PackageInstallerService$$ExternalSyntheticLambda5;
 Lcom/android/server/pm/PackageInstallerService$1;
-Lcom/android/server/pm/PackageInstallerService$Callbacks;
-Lcom/android/server/pm/PackageInstallerService$InternalCallback;
 Lcom/android/server/pm/PackageInstallerService$Lifecycle;
 Lcom/android/server/pm/PackageInstallerService$PackageDeleteObserverAdapter;
 Lcom/android/server/pm/PackageInstallerService;
@@ -13026,7 +13714,6 @@
 Lcom/android/server/pm/PackageManagerException;
 Lcom/android/server/pm/PackageManagerInternalBase;
 Lcom/android/server/pm/PackageManagerLocal;
-Lcom/android/server/pm/PackageManagerNative;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda11;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda1;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda26;
@@ -13054,7 +13741,6 @@
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda47;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda48;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda49;
-Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda50;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda51;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda52;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda53;
@@ -13064,10 +13750,8 @@
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda57;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda60;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda61;
-Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda62;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda64;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda65;
-Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda66;
 Lcom/android/server/pm/PackageManagerService$1;
 Lcom/android/server/pm/PackageManagerService$2;
 Lcom/android/server/pm/PackageManagerService$3;
@@ -13091,7 +13775,6 @@
 Lcom/android/server/pm/PackageManagerServiceUtils$$ExternalSyntheticLambda2;
 Lcom/android/server/pm/PackageManagerServiceUtils$1;
 Lcom/android/server/pm/PackageManagerServiceUtils;
-Lcom/android/server/pm/PackageManagerShellCommand;
 Lcom/android/server/pm/PackageManagerShellCommandDataLoader;
 Lcom/android/server/pm/PackageManagerTracedLock;
 Lcom/android/server/pm/PackageMetrics;
@@ -13099,7 +13782,6 @@
 Lcom/android/server/pm/PackageProperty;
 Lcom/android/server/pm/PackageSender;
 Lcom/android/server/pm/PackageSessionProvider;
-Lcom/android/server/pm/PackageSessionVerifier;
 Lcom/android/server/pm/PackageSetting$1;
 Lcom/android/server/pm/PackageSetting;
 Lcom/android/server/pm/PackageSignatures;
@@ -13138,7 +13820,6 @@
 Lcom/android/server/pm/ScanRequest;
 Lcom/android/server/pm/ScanResult;
 Lcom/android/server/pm/SettingBase;
-Lcom/android/server/pm/Settings$$ExternalSyntheticLambda0;
 Lcom/android/server/pm/Settings$$ExternalSyntheticLambda1;
 Lcom/android/server/pm/Settings$$ExternalSyntheticLambda2;
 Lcom/android/server/pm/Settings$1;
@@ -13153,12 +13834,8 @@
 Lcom/android/server/pm/SettingsXml$ChildSection;
 Lcom/android/server/pm/SettingsXml$ReadSection;
 Lcom/android/server/pm/SettingsXml$ReadSectionImpl;
-Lcom/android/server/pm/SettingsXml$Serializer;
-Lcom/android/server/pm/SettingsXml$WriteSection;
-Lcom/android/server/pm/SettingsXml$WriteSectionImpl;
 Lcom/android/server/pm/SettingsXml;
 Lcom/android/server/pm/SharedLibrariesImpl$$ExternalSyntheticLambda0;
-Lcom/android/server/pm/SharedLibrariesImpl$$ExternalSyntheticLambda1;
 Lcom/android/server/pm/SharedLibrariesImpl$1;
 Lcom/android/server/pm/SharedLibrariesImpl$2;
 Lcom/android/server/pm/SharedLibrariesImpl;
@@ -13168,22 +13845,21 @@
 Lcom/android/server/pm/SharedUserSetting$1;
 Lcom/android/server/pm/SharedUserSetting$2;
 Lcom/android/server/pm/SharedUserSetting;
-Lcom/android/server/pm/SilentUpdatePolicy;
 Lcom/android/server/pm/SnapshotStatistics$1;
 Lcom/android/server/pm/SnapshotStatistics$BinMap;
 Lcom/android/server/pm/SnapshotStatistics$Stats;
 Lcom/android/server/pm/SnapshotStatistics;
-Lcom/android/server/pm/StagingManager$2;
-Lcom/android/server/pm/StagingManager;
 Lcom/android/server/pm/StorageEventHelper;
 Lcom/android/server/pm/SuspendPackageHelper;
 Lcom/android/server/pm/SystemDeleteException;
 Lcom/android/server/pm/UserDataPreparer;
+Lcom/android/server/pm/UserJourneyLogger;
 Lcom/android/server/pm/UserManagerInternal$UserLifecycleListener;
 Lcom/android/server/pm/UserManagerInternal;
+Lcom/android/server/pm/UserManagerService$$ExternalSyntheticLambda3;
+Lcom/android/server/pm/UserManagerService$$ExternalSyntheticLambda5;
 Lcom/android/server/pm/UserManagerService$1;
 Lcom/android/server/pm/UserManagerService$2;
-Lcom/android/server/pm/UserManagerService$LifeCycle;
 Lcom/android/server/pm/UserManagerService$LocalService;
 Lcom/android/server/pm/UserManagerService$MainHandler;
 Lcom/android/server/pm/UserManagerService$UserData;
@@ -13204,20 +13880,13 @@
 Lcom/android/server/pm/dex/ArtManagerService$ArtManagerInternalImpl;
 Lcom/android/server/pm/dex/ArtManagerService;
 Lcom/android/server/pm/dex/ArtStatsLogUtils$ArtStatsLogger;
-Lcom/android/server/pm/dex/ArtStatsLogUtils$BackgroundDexoptJobStatsLogger;
-Lcom/android/server/pm/dex/DexManager$PackageCodeLocations;
 Lcom/android/server/pm/dex/DexManager;
-Lcom/android/server/pm/dex/DynamicCodeLogger$$ExternalSyntheticLambda0;
 Lcom/android/server/pm/dex/DynamicCodeLogger;
-Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;
-Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;
 Lcom/android/server/pm/dex/PackageDexUsage;
-Lcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;
-Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;
 Lcom/android/server/pm/dex/PackageDynamicCodeLoading;
 Lcom/android/server/pm/dex/ViewCompiler;
+Lcom/android/server/pm/local/PackageManagerLocalImpl$UnfilteredSnapshotImpl;
 Lcom/android/server/pm/local/PackageManagerLocalImpl;
-Lcom/android/server/pm/parsing/PackageCacher$$ExternalSyntheticLambda0;
 Lcom/android/server/pm/parsing/PackageCacher;
 Lcom/android/server/pm/parsing/PackageInfoUtils;
 Lcom/android/server/pm/parsing/PackageParser2$$ExternalSyntheticLambda0;
@@ -13226,7 +13895,6 @@
 Lcom/android/server/pm/parsing/PackageParser2$1;
 Lcom/android/server/pm/parsing/PackageParser2$Callback;
 Lcom/android/server/pm/parsing/PackageParser2;
-Lcom/android/server/pm/parsing/ParsedComponentStateUtils;
 Lcom/android/server/pm/parsing/library/AndroidHidlUpdater;
 Lcom/android/server/pm/parsing/library/AndroidNetIpSecIkeUpdater;
 Lcom/android/server/pm/parsing/library/AndroidTestBaseUpdater;
@@ -13266,10 +13934,7 @@
 Lcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;
 Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;
 Lcom/android/server/pm/permission/PermissionManagerService;
-Lcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda11;
 Lcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda13;
-Lcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda5;
-Lcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda8;
 Lcom/android/server/pm/permission/PermissionManagerServiceImpl$1;
 Lcom/android/server/pm/permission/PermissionManagerServiceImpl$2;
 Lcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;
@@ -13282,8 +13947,6 @@
 Lcom/android/server/pm/permission/UidPermissionState;
 Lcom/android/server/pm/permission/UserPermissionState;
 Lcom/android/server/pm/pkg/AndroidPackage;
-Lcom/android/server/pm/pkg/AndroidPackageSplit;
-Lcom/android/server/pm/pkg/AndroidPackageSplitImpl;
 Lcom/android/server/pm/pkg/PackageState;
 Lcom/android/server/pm/pkg/PackageStateInternal;
 Lcom/android/server/pm/pkg/PackageStateUnserialized;
@@ -13317,8 +13980,6 @@
 Lcom/android/server/pm/pkg/component/ParsedComponentImpl;
 Lcom/android/server/pm/pkg/component/ParsedComponentUtils;
 Lcom/android/server/pm/pkg/component/ParsedInstrumentation;
-Lcom/android/server/pm/pkg/component/ParsedInstrumentationImpl$1;
-Lcom/android/server/pm/pkg/component/ParsedInstrumentationImpl;
 Lcom/android/server/pm/pkg/component/ParsedIntentInfo;
 Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl$1;
 Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;
@@ -13350,7 +14011,6 @@
 Lcom/android/server/pm/pkg/component/ParsedUsesPermission;
 Lcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl$1;
 Lcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl;
-Lcom/android/server/pm/pkg/mutate/PackageStateMutator$Result;
 Lcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper$UserStateWriteWrapper;
 Lcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper;
 Lcom/android/server/pm/pkg/mutate/PackageStateMutator;
@@ -13375,13 +14035,10 @@
 Lcom/android/server/pm/resolution/ComponentResolverApi;
 Lcom/android/server/pm/resolution/ComponentResolverBase;
 Lcom/android/server/pm/resolution/ComponentResolverLocked;
-Lcom/android/server/pm/resolution/ComponentResolverSnapshot;
 Lcom/android/server/pm/snapshot/PackageDataSnapshot;
 Lcom/android/server/pm/split/DefaultSplitAssetLoader;
 Lcom/android/server/pm/split/SplitAssetDependencyLoader;
 Lcom/android/server/pm/split/SplitAssetLoader;
-Lcom/android/server/pm/utils/RequestThrottle$$ExternalSyntheticLambda0;
-Lcom/android/server/pm/utils/RequestThrottle;
 Lcom/android/server/pm/verify/domain/DomainVerificationCollector$$ExternalSyntheticLambda2;
 Lcom/android/server/pm/verify/domain/DomainVerificationCollector;
 Lcom/android/server/pm/verify/domain/DomainVerificationDebug;
@@ -13405,13 +14062,10 @@
 Lcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;
 Lcom/android/server/pm/verify/domain/proxy/DomainVerificationProxy$BaseConnection;
 Lcom/android/server/pm/verify/domain/proxy/DomainVerificationProxy;
-Lcom/android/server/pm/verify/domain/proxy/DomainVerificationProxyCombined;
 Lcom/android/server/pm/verify/domain/proxy/DomainVerificationProxyUnavailable;
 Lcom/android/server/pm/verify/domain/proxy/DomainVerificationProxyV1$Connection;
-Lcom/android/server/pm/verify/domain/proxy/DomainVerificationProxyV1;
 Lcom/android/server/pm/verify/domain/proxy/DomainVerificationProxyV2$Connection;
-Lcom/android/server/pm/verify/domain/proxy/DomainVerificationProxyV2;
-Lcom/android/server/policy/PermissionPolicyInternal;
+Lcom/android/server/policy/PhoneWindowManager;
 Lcom/android/server/policy/WindowManagerPolicy$DisplayContentInfo;
 Lcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;
 Lcom/android/server/policy/WindowManagerPolicy$WindowState;
@@ -13452,16 +14106,19 @@
 Lcom/android/server/power/PowerManagerService$Constants;
 Lcom/android/server/power/PowerManagerService$DockReceiver;
 Lcom/android/server/power/PowerManagerService$DreamReceiver;
+Lcom/android/server/power/PowerManagerService$Injector$$ExternalSyntheticLambda0;
 Lcom/android/server/power/PowerManagerService$Injector$1;
 Lcom/android/server/power/PowerManagerService$Injector$2;
+Lcom/android/server/power/PowerManagerService$Injector$3;
 Lcom/android/server/power/PowerManagerService$Injector;
 Lcom/android/server/power/PowerManagerService$LocalService;
 Lcom/android/server/power/PowerManagerService$NativeWrapper;
+Lcom/android/server/power/PowerManagerService$PermissionCheckerWrapper;
 Lcom/android/server/power/PowerManagerService$PowerGroupWakefulnessChangeListener;
 Lcom/android/server/power/PowerManagerService$PowerManagerHandlerCallback;
+Lcom/android/server/power/PowerManagerService$PowerPropertiesWrapper;
 Lcom/android/server/power/PowerManagerService$SettingsObserver;
 Lcom/android/server/power/PowerManagerService$SuspendBlockerImpl;
-Lcom/android/server/power/PowerManagerService$UidState;
 Lcom/android/server/power/PowerManagerService$UserSwitchedReceiver;
 Lcom/android/server/power/PowerManagerService;
 Lcom/android/server/power/PowerManagerShellCommand;
@@ -13492,17 +14149,17 @@
 Lcom/android/server/power/batterysaver/BatterySavingStats;
 Lcom/android/server/power/hint/HintManagerService$BinderService;
 Lcom/android/server/power/hint/HintManagerService$Injector;
-Lcom/android/server/power/hint/HintManagerService$NativeWrapper;
 Lcom/android/server/power/hint/HintManagerService$MyUidObserver;
+Lcom/android/server/power/hint/HintManagerService$NativeWrapper;
 Lcom/android/server/power/hint/HintManagerService;
 Lcom/android/server/power/stats/BatteryExternalStatsWorker$$ExternalSyntheticLambda0;
 Lcom/android/server/power/stats/BatteryExternalStatsWorker$$ExternalSyntheticLambda3;
-Lcom/android/server/power/stats/BatteryExternalStatsWorker$$ExternalSyntheticLambda8;
 Lcom/android/server/power/stats/BatteryExternalStatsWorker$1;
 Lcom/android/server/power/stats/BatteryExternalStatsWorker$2;
 Lcom/android/server/power/stats/BatteryExternalStatsWorker$Injector;
 Lcom/android/server/power/stats/BatteryExternalStatsWorker;
-Lcom/android/server/power/stats/BatteryStatsImpl$$ExternalSyntheticLambda2;
+Lcom/android/server/power/stats/BatteryStatsImpl$$ExternalSyntheticLambda3;
+Lcom/android/server/power/stats/BatteryStatsImpl$$ExternalSyntheticLambda4;
 Lcom/android/server/power/stats/BatteryStatsImpl$1;
 Lcom/android/server/power/stats/BatteryStatsImpl$2;
 Lcom/android/server/power/stats/BatteryStatsImpl$3;
@@ -13551,11 +14208,7 @@
 Lcom/android/server/power/stats/BatteryUsageStatsStore;
 Lcom/android/server/power/stats/BluetoothPowerCalculator;
 Lcom/android/server/power/stats/CpuPowerCalculator;
-Lcom/android/server/power/stats/CpuWakeupStats$Config;
-Lcom/android/server/power/stats/CpuWakeupStats$WakingActivityHistory;
-Lcom/android/server/power/stats/CpuWakeupStats;
 Lcom/android/server/power/stats/EnergyConsumerSnapshot;
-Lcom/android/server/power/stats/IrqDeviceMap;
 Lcom/android/server/power/stats/KernelWakelockReader;
 Lcom/android/server/power/stats/KernelWakelockStats$Entry;
 Lcom/android/server/power/stats/KernelWakelockStats;
@@ -13565,12 +14218,16 @@
 Lcom/android/server/power/stats/SystemServerCpuThreadReader;
 Lcom/android/server/power/stats/WakelockPowerCalculator;
 Lcom/android/server/power/stats/WifiPowerCalculator;
+Lcom/android/server/power/stats/wakeups/CpuWakeupStats$$ExternalSyntheticLambda0;
+Lcom/android/server/power/stats/wakeups/CpuWakeupStats$Config;
+Lcom/android/server/power/stats/wakeups/CpuWakeupStats$WakingActivityHistory;
+Lcom/android/server/power/stats/wakeups/CpuWakeupStats;
+Lcom/android/server/power/stats/wakeups/IrqDeviceMap;
 Lcom/android/server/powerstats/PowerStatsHALWrapper$IPowerStatsHALWrapper;
 Lcom/android/server/powerstats/PowerStatsHALWrapper$PowerStatsHAL10WrapperImpl;
 Lcom/android/server/powerstats/PowerStatsHALWrapper$PowerStatsHAL20WrapperImpl;
 Lcom/android/server/powerstats/PowerStatsHALWrapper$VintfHalCache;
 Lcom/android/server/powerstats/PowerStatsHALWrapper;
-Lcom/android/server/powerstats/PowerStatsService$BinderService;
 Lcom/android/server/powerstats/PowerStatsService$Injector;
 Lcom/android/server/powerstats/PowerStatsService$LocalService;
 Lcom/android/server/powerstats/PowerStatsService;
@@ -13580,7 +14237,6 @@
 Lcom/android/server/recoverysystem/RecoverySystemService;
 Lcom/android/server/recoverysystem/RecoverySystemShellCommand;
 Lcom/android/server/resources/ResourcesManagerService;
-Lcom/android/server/security/FileIntegrity;
 Lcom/android/server/security/FileIntegrityService$1;
 Lcom/android/server/security/FileIntegrityService$FileIntegrityServiceShellCommand;
 Lcom/android/server/security/FileIntegrityService;
@@ -13593,6 +14249,7 @@
 Lcom/android/server/soundtrigger_middleware/ICaptureStateNotifier;
 Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider;
 Lcom/android/server/stats/pull/StatsPullAtomService;
+Lcom/android/server/statusbar/StatusBarManagerService$1;
 Lcom/android/server/storage/AppFuseBridge;
 Lcom/android/server/tare/InternalResourceService$LocalService;
 Lcom/android/server/tv/TvInputHal;
@@ -13622,7 +14279,6 @@
 Lcom/android/server/utils/SnapshotCache$Sealed;
 Lcom/android/server/utils/SnapshotCache$Statistics;
 Lcom/android/server/utils/SnapshotCache;
-Lcom/android/server/utils/Snapshots;
 Lcom/android/server/utils/TimingsTraceAndSlog;
 Lcom/android/server/utils/Watchable;
 Lcom/android/server/utils/WatchableImpl;
@@ -13670,24 +14326,23 @@
 Lcom/android/server/wm/ActivityTaskManagerService$UpdateConfigurationResult;
 Lcom/android/server/wm/ActivityTaskManagerService;
 Lcom/android/server/wm/ActivityTaskSupervisor$ActivityTaskSupervisorHandler;
+Lcom/android/server/wm/ActivityTaskSupervisor$OpaqueActivityHelper;
 Lcom/android/server/wm/ActivityTaskSupervisor$TaskInfoHelper;
 Lcom/android/server/wm/ActivityTaskSupervisor;
 Lcom/android/server/wm/AppTaskImpl;
 Lcom/android/server/wm/AppWarnings$BaseDialog;
-Lcom/android/server/wm/AppWarnings$ConfigHandler;
 Lcom/android/server/wm/AppWarnings$UiHandler;
 Lcom/android/server/wm/AppWarnings;
 Lcom/android/server/wm/BLASTSyncEngine$TransactionReadyListener;
 Lcom/android/server/wm/BackNavigationController$NavigationMonitor;
 Lcom/android/server/wm/BackNavigationController;
-Lcom/android/server/wm/BackgroundActivityStartCallback;
 Lcom/android/server/wm/BackgroundActivityStartController;
-Lcom/android/server/wm/BackgroundLaunchProcessController;
 Lcom/android/server/wm/ClientLifecycleManager;
 Lcom/android/server/wm/CompatModePackages$CompatHandler;
 Lcom/android/server/wm/CompatModePackages;
 Lcom/android/server/wm/ConfigurationContainer;
 Lcom/android/server/wm/ConfigurationContainerListener;
+Lcom/android/server/wm/DeprecatedAbiDialog;
 Lcom/android/server/wm/DeprecatedTargetSdkVersionDialog;
 Lcom/android/server/wm/DesktopModeLaunchParamsModifier;
 Lcom/android/server/wm/DisplayArea$Dimmable;
@@ -13788,16 +14443,15 @@
 Lcom/android/server/wm/WindowManagerShellCommand;
 Lcom/android/server/wm/WindowManagerThreadPriorityBooster;
 Lcom/android/server/wm/WindowOrganizerController;
-Lcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda3;
 Lcom/android/server/wm/WindowProcessController$ComputeOomAdjCallback;
 Lcom/android/server/wm/WindowProcessController;
 Lcom/android/server/wm/WindowProcessControllerMap;
 Lcom/android/server/wm/WindowProcessListener;
 Lcom/android/server/wm/WindowState;
 Lcom/android/server/wm/WindowToken;
+Ljava/util/zip/GZIPInputStream;
 [Landroid/hardware/power/stats/EnergyConsumer;
 [Lcom/android/server/am/ActivityManagerService$ProcessChangeItem;
-[Lcom/android/server/am/BroadcastFilter;
 [Lcom/android/server/am/BroadcastProcessQueue;
 [Lcom/android/server/am/BroadcastQueue;
 [Lcom/android/server/am/BroadcastRecord;
@@ -13805,7 +14459,6 @@
 [Lcom/android/server/am/CachedAppOptimizer$CompactSource;
 [Lcom/android/server/am/OomAdjProfiler$CpuTimes;
 [Lcom/android/server/am/UidObserverController$ChangeRecord;
-[Lcom/android/server/display/DensityMapping$Entry;
 [Lcom/android/server/display/config/ThermalStatus;
 [Lcom/android/server/firewall/FilterFactory;
 [Lcom/android/server/firewall/IntentFirewall$FirewallIntentResolver;
diff --git a/services/autofill/java/com/android/server/autofill/ClientSuggestionsSession.java b/services/autofill/java/com/android/server/autofill/ClientSuggestionsSession.java
new file mode 100644
index 0000000..715697d
--- /dev/null
+++ b/services/autofill/java/com/android/server/autofill/ClientSuggestionsSession.java
@@ -0,0 +1,293 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.autofill;
+
+import static android.service.autofill.FillRequest.INVALID_REQUEST_ID;
+
+import static com.android.server.autofill.Helper.sVerbose;
+
+import android.annotation.Nullable;
+import android.annotation.UserIdInt;
+import android.app.AppGlobals;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.os.ICancellationSignal;
+import android.os.RemoteException;
+import android.service.autofill.Dataset;
+import android.service.autofill.FillResponse;
+import android.service.autofill.IFillCallback;
+import android.service.autofill.SaveInfo;
+import android.text.TextUtils;
+import android.text.format.DateUtils;
+import android.util.Slog;
+import android.view.autofill.AutofillId;
+import android.view.autofill.IAutoFillManagerClient;
+import android.view.inputmethod.InlineSuggestionsRequest;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.infra.AndroidFuture;
+
+import java.util.List;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Maintains a client suggestions session with the
+ * {@link android.view.autofill.AutofillRequestCallback} through the {@link IAutoFillManagerClient}.
+ *
+ */
+final class ClientSuggestionsSession {
+
+    private static final String TAG = "ClientSuggestionsSession";
+    private static final long TIMEOUT_REMOTE_REQUEST_MILLIS = 15 * DateUtils.SECOND_IN_MILLIS;
+
+    private final int mSessionId;
+    private final IAutoFillManagerClient mClient;
+    private final Handler mHandler;
+    private final ComponentName mComponentName;
+
+    private final RemoteFillService.FillServiceCallbacks mCallbacks;
+
+    private final Object mLock = new Object();
+    @GuardedBy("mLock")
+    private AndroidFuture<FillResponse> mPendingFillRequest;
+    @GuardedBy("mLock")
+    private int mPendingFillRequestId = INVALID_REQUEST_ID;
+
+    ClientSuggestionsSession(int sessionId, IAutoFillManagerClient client, Handler handler,
+            ComponentName componentName, RemoteFillService.FillServiceCallbacks callbacks) {
+        mSessionId = sessionId;
+        mClient = client;
+        mHandler = handler;
+        mComponentName = componentName;
+        mCallbacks = callbacks;
+    }
+
+    void onFillRequest(int requestId, InlineSuggestionsRequest inlineRequest, int flags) {
+        final AtomicReference<ICancellationSignal> cancellationSink = new AtomicReference<>();
+        final AtomicReference<AndroidFuture<FillResponse>> futureRef = new AtomicReference<>();
+        final AndroidFuture<FillResponse> fillRequest = new AndroidFuture<>();
+
+        mHandler.post(() -> {
+            if (sVerbose) {
+                Slog.v(TAG, "calling onFillRequest() for id=" + requestId);
+            }
+
+            try {
+                mClient.requestFillFromClient(requestId, inlineRequest,
+                        new FillCallbackImpl(fillRequest, futureRef, cancellationSink));
+            } catch (RemoteException e) {
+                fillRequest.completeExceptionally(e);
+            }
+        });
+
+        fillRequest.orTimeout(TIMEOUT_REMOTE_REQUEST_MILLIS, TimeUnit.MILLISECONDS);
+        futureRef.set(fillRequest);
+
+        synchronized (mLock) {
+            mPendingFillRequest = fillRequest;
+            mPendingFillRequestId = requestId;
+        }
+
+        fillRequest.whenComplete((res, err) -> mHandler.post(() -> {
+            synchronized (mLock) {
+                mPendingFillRequest = null;
+                mPendingFillRequestId = INVALID_REQUEST_ID;
+            }
+            if (err == null) {
+                processAutofillId(res);
+                mCallbacks.onFillRequestSuccess(requestId, res,
+                        mComponentName.getPackageName(), flags);
+            } else {
+                Slog.e(TAG, "Error calling on  client fill request", err);
+                if (err instanceof TimeoutException) {
+                    dispatchCancellationSignal(cancellationSink.get());
+                    mCallbacks.onFillRequestTimeout(requestId);
+                } else if (err instanceof CancellationException) {
+                    dispatchCancellationSignal(cancellationSink.get());
+                } else {
+                    mCallbacks.onFillRequestFailure(requestId, err.getMessage());
+                }
+            }
+        }));
+    }
+
+    /**
+     * Gets the application info for the component.
+     */
+    @Nullable
+    static ApplicationInfo getAppInfo(ComponentName comp, @UserIdInt int userId) {
+        try {
+            ApplicationInfo si = AppGlobals.getPackageManager().getApplicationInfo(
+                    comp.getPackageName(),
+                    PackageManager.GET_META_DATA,
+                    userId);
+            if (si != null) {
+                return si;
+            }
+        } catch (RemoteException e) {
+        }
+        return null;
+    }
+
+    /**
+     * Gets the user-visible name of the application.
+     */
+    @Nullable
+    @GuardedBy("mLock")
+    static CharSequence getAppLabelLocked(Context context, ApplicationInfo appInfo) {
+        return appInfo == null ? null : appInfo.loadSafeLabel(
+                context.getPackageManager(), 0 /* do not ellipsize */,
+                TextUtils.SAFE_STRING_FLAG_FIRST_LINE | TextUtils.SAFE_STRING_FLAG_TRIM);
+    }
+
+    /**
+     * Gets the user-visible icon of the application.
+     */
+    @Nullable
+    @GuardedBy("mLock")
+    static Drawable getAppIconLocked(Context context, ApplicationInfo appInfo) {
+        return appInfo == null ? null : appInfo.loadIcon(context.getPackageManager());
+    }
+
+    int cancelCurrentRequest() {
+        synchronized (mLock) {
+            return mPendingFillRequest != null && mPendingFillRequest.cancel(false)
+                    ? mPendingFillRequestId
+                    : INVALID_REQUEST_ID;
+        }
+    }
+
+    /**
+     * The {@link AutofillId} which the client gets from its view is not contain the session id,
+     * but Autofill framework is using the {@link AutofillId} with a session id. So before using
+     * those ids in the Autofill framework, applies the current session id.
+     *
+     * @param res which response need to apply for a session id
+     */
+    private void processAutofillId(FillResponse res) {
+        if (res == null) {
+            return;
+        }
+
+        final List<Dataset> datasets = res.getDatasets();
+        if (datasets != null && !datasets.isEmpty()) {
+            for (int i = 0; i < datasets.size(); i++) {
+                final Dataset dataset = datasets.get(i);
+                if (dataset != null) {
+                    applySessionId(dataset.getFieldIds());
+                }
+            }
+        }
+
+        final SaveInfo saveInfo = res.getSaveInfo();
+        if (saveInfo != null) {
+            applySessionId(saveInfo.getOptionalIds());
+            applySessionId(saveInfo.getRequiredIds());
+            applySessionId(saveInfo.getSanitizerValues());
+            applySessionId(saveInfo.getTriggerId());
+        }
+    }
+
+    private void applySessionId(List<AutofillId> ids) {
+        if (ids == null || ids.isEmpty()) {
+            return;
+        }
+
+        for (int i = 0; i < ids.size(); i++) {
+            applySessionId(ids.get(i));
+        }
+    }
+
+    private void applySessionId(AutofillId[][] ids) {
+        if (ids == null) {
+            return;
+        }
+        for (int i = 0; i < ids.length; i++) {
+            applySessionId(ids[i]);
+        }
+    }
+
+    private void applySessionId(AutofillId[] ids) {
+        if (ids == null) {
+            return;
+        }
+        for (int i = 0; i < ids.length; i++) {
+            applySessionId(ids[i]);
+        }
+    }
+
+    private void applySessionId(AutofillId id) {
+        if (id == null) {
+            return;
+        }
+        id.setSessionId(mSessionId);
+    }
+
+    private void dispatchCancellationSignal(@Nullable ICancellationSignal signal) {
+        if (signal == null) {
+            return;
+        }
+        try {
+            signal.cancel();
+        } catch (RemoteException e) {
+            Slog.e(TAG, "Error requesting a cancellation", e);
+        }
+    }
+
+    private class FillCallbackImpl extends IFillCallback.Stub {
+        final AndroidFuture<FillResponse> mFillRequest;
+        final AtomicReference<AndroidFuture<FillResponse>> mFutureRef;
+        final AtomicReference<ICancellationSignal> mCancellationSink;
+
+        FillCallbackImpl(AndroidFuture<FillResponse> fillRequest,
+                AtomicReference<AndroidFuture<FillResponse>> futureRef,
+                AtomicReference<ICancellationSignal> cancellationSink) {
+            mFillRequest = fillRequest;
+            mFutureRef = futureRef;
+            mCancellationSink = cancellationSink;
+        }
+
+        @Override
+        public void onCancellable(ICancellationSignal cancellation) {
+            AndroidFuture<FillResponse> future = mFutureRef.get();
+            if (future != null && future.isCancelled()) {
+                dispatchCancellationSignal(cancellation);
+            } else {
+                mCancellationSink.set(cancellation);
+            }
+        }
+
+        @Override
+        public void onSuccess(FillResponse response) {
+            mFillRequest.complete(response);
+        }
+
+        @Override
+        public void onFailure(int requestId, CharSequence message) {
+            String errorMessage = message == null ? "" : String.valueOf(message);
+            mFillRequest.completeExceptionally(
+                    new RuntimeException(errorMessage));
+        }
+    }
+}
diff --git a/services/autofill/java/com/android/server/autofill/Helper.java b/services/autofill/java/com/android/server/autofill/Helper.java
index 7557071..ad8f5e1 100644
--- a/services/autofill/java/com/android/server/autofill/Helper.java
+++ b/services/autofill/java/com/android/server/autofill/Helper.java
@@ -95,7 +95,7 @@
         rView.visitUris(uri -> {
             int uriOwnerId = android.content.ContentProvider.getUserIdFromUri(uri);
             boolean allowed = uriOwnerId == userId;
-            permissionsOk.set(allowed && permissionsOk.get());
+            permissionsOk.set(allowed & permissionsOk.get());
         });
 
         return permissionsOk.get();
diff --git a/services/autofill/java/com/android/server/autofill/InlineSuggestionRendorInfoCallbackOnResultListener.java b/services/autofill/java/com/android/server/autofill/InlineSuggestionRendorInfoCallbackOnResultListener.java
deleted file mode 100644
index 7351ef5..0000000
--- a/services/autofill/java/com/android/server/autofill/InlineSuggestionRendorInfoCallbackOnResultListener.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.autofill;
-
-import android.annotation.Nullable;
-import android.os.Bundle;
-import android.os.RemoteCallback;
-import android.util.Slog;
-import android.view.autofill.AutofillId;
-import android.view.inputmethod.InlineSuggestionsRequest;
-
-import java.lang.ref.WeakReference;
-import java.util.function.Consumer;
-
-final class InlineSuggestionRendorInfoCallbackOnResultListener implements
-        RemoteCallback.OnResultListener{
-    private static final String TAG = "InlineSuggestionRendorInfoCallbackOnResultListener";
-
-    private final int mRequestIdCopy;
-    private final AutofillId mFocusedId;
-    private final WeakReference<Session> mSessionWeakReference;
-    private final Consumer<InlineSuggestionsRequest> mInlineSuggestionsRequestConsumer;
-
-    InlineSuggestionRendorInfoCallbackOnResultListener(WeakReference<Session> sessionWeakReference,
-            int requestIdCopy,
-            Consumer<InlineSuggestionsRequest> inlineSuggestionsRequestConsumer,
-            AutofillId focusedId) {
-        this.mRequestIdCopy = requestIdCopy;
-        this.mInlineSuggestionsRequestConsumer = inlineSuggestionsRequestConsumer;
-        this.mSessionWeakReference = sessionWeakReference;
-        this.mFocusedId = focusedId;
-    }
-    public void onResult(@Nullable Bundle result) {
-        Session session = this.mSessionWeakReference.get();
-        if (session == null) {
-            Slog.wtf(TAG, "Session is null before trying to call onResult");
-            return;
-        }
-        synchronized (session.mLock) {
-            if (session.mDestroyed) {
-                Slog.wtf(TAG, "Session is destroyed before trying to call onResult");
-                return;
-            }
-            session.mInlineSessionController.onCreateInlineSuggestionsRequestLocked(
-                    this.mFocusedId,
-                    session.inlineSuggestionsRequestCacheDecorator(
-                        this.mInlineSuggestionsRequestConsumer, this.mRequestIdCopy),
-                    result);
-        }
-    }
-}
diff --git a/services/autofill/java/com/android/server/autofill/InlineSuggestionRequestConsumer.java b/services/autofill/java/com/android/server/autofill/InlineSuggestionRequestConsumer.java
deleted file mode 100644
index a3efb25..0000000
--- a/services/autofill/java/com/android/server/autofill/InlineSuggestionRequestConsumer.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.autofill;
-
-import android.util.Slog;
-import android.view.inputmethod.InlineSuggestionsRequest;
-
-import java.lang.ref.WeakReference;
-import java.util.function.Consumer;
-
-class InlineSuggestionRequestConsumer implements Consumer<InlineSuggestionsRequest> {
-
-    static final String TAG = "InlineSuggestionRequestConsumer";
-
-    private final WeakReference<Session.AssistDataReceiverImpl> mAssistDataReceiverWeakReference;
-    private final WeakReference<ViewState>  mViewStateWeakReference;
-
-    InlineSuggestionRequestConsumer(WeakReference<Session.AssistDataReceiverImpl>
-            assistDataReceiverWeakReference,
-            WeakReference<ViewState>  viewStateWeakReference) {
-        mAssistDataReceiverWeakReference = assistDataReceiverWeakReference;
-        mViewStateWeakReference = viewStateWeakReference;
-    }
-
-    @Override
-    public void accept(InlineSuggestionsRequest inlineSuggestionsRequest) {
-        Session.AssistDataReceiverImpl assistDataReceiver = mAssistDataReceiverWeakReference.get();
-        ViewState viewState = mViewStateWeakReference.get();
-        if (assistDataReceiver == null) {
-            Slog.wtf(TAG, "assistDataReceiver is null when accepting new inline suggestion"
-                    + "requests");
-            return;
-        }
-
-        if (viewState == null) {
-            Slog.wtf(TAG, "view state is null when accepting new inline suggestion requests");
-            return;
-        }
-        assistDataReceiver.handleInlineSuggestionRequest(inlineSuggestionsRequest, viewState);
-    }
-}
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 70aff05..061b422 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -44,6 +44,7 @@
 import static android.view.autofill.AutofillManager.ACTION_VIEW_EXITED;
 import static android.view.autofill.AutofillManager.COMMIT_REASON_SESSION_DESTROYED;
 import static android.view.autofill.AutofillManager.COMMIT_REASON_UNKNOWN;
+import static android.view.autofill.AutofillManager.FLAG_ENABLED_CLIENT_SUGGESTIONS;
 import static android.view.autofill.AutofillManager.FLAG_SMART_SUGGESTION_SYSTEM;
 import static android.view.autofill.AutofillManager.getSmartSuggestionModeToString;
 
@@ -323,7 +324,7 @@
      * Id of the View currently being displayed.
      */
     @GuardedBy("mLock")
-    private @Nullable AutofillId mCurrentViewId;
+    @Nullable private AutofillId mCurrentViewId;
 
     @GuardedBy("mLock")
     private IAutoFillManagerClient mClient;
@@ -371,7 +372,7 @@
     private Bundle mClientState;
 
     @GuardedBy("mLock")
-    boolean mDestroyed;
+    private boolean mDestroyed;
 
     /**
      * Helper used to handle state of Save UI when it must be hiding to show a custom description
@@ -450,7 +451,7 @@
     private ArrayList<AutofillId> mAugmentedAutofillableIds;
 
     @NonNull
-    final AutofillInlineSessionController mInlineSessionController;
+    private final AutofillInlineSessionController mInlineSessionController;
 
     /**
      * Receiver of assist data from the app's {@link Activity}.
@@ -462,6 +463,9 @@
      */
     private final PccAssistDataReceiverImpl mPccAssistReceiver = new PccAssistDataReceiverImpl();
 
+    @Nullable
+    private ClientSuggestionsSession mClientSuggestionsSession;
+
     private final ClassificationState mClassificationState = new ClassificationState();
 
     // TODO(b/216576510): Share one BroadcastReceiver between all Sessions instead of creating a
@@ -603,6 +607,9 @@
         /** Whether the current {@link FillResponse} is expired. */
         private boolean mExpiredResponse;
 
+        /** Whether the client is using {@link android.view.autofill.AutofillRequestCallback}. */
+        private boolean mClientSuggestionsEnabled;
+
         /** Whether the fill dialog UI is disabled. */
         private boolean mFillDialogDisabled;
 
@@ -614,7 +621,7 @@
      * TODO(b/151867668): improve how asynchronous data dependencies are handled, without using
      * CountDownLatch.
      */
-    final class AssistDataReceiverImpl extends IAssistDataReceiver.Stub {
+    private final class AssistDataReceiverImpl extends IAssistDataReceiver.Stub {
         @GuardedBy("mLock")
         private boolean mWaitForInlineRequest;
         @GuardedBy("mLock")
@@ -629,32 +636,28 @@
             mPendingFillRequest = null;
             mWaitForInlineRequest = isInlineRequest;
             mPendingInlineSuggestionsRequest = null;
-            if (isInlineRequest) {
-                WeakReference<AssistDataReceiverImpl> assistDataReceiverWeakReference =
-                        new WeakReference<AssistDataReceiverImpl>(this);
-                WeakReference<ViewState> viewStateWeakReference =
-                        new WeakReference<ViewState>(viewState);
-                return new InlineSuggestionRequestConsumer(assistDataReceiverWeakReference,
-                    viewStateWeakReference);
-            }
-            return null;
+            return isInlineRequest ? (inlineSuggestionsRequest) -> {
+                synchronized (mLock) {
+                    if (!mWaitForInlineRequest || mPendingInlineSuggestionsRequest != null) {
+                        return;
+                    }
+                    mWaitForInlineRequest = inlineSuggestionsRequest != null;
+                    mPendingInlineSuggestionsRequest = inlineSuggestionsRequest;
+                    mWaitForInlineRequest = inlineSuggestionsRequest != null;
+                    maybeRequestFillFromServiceLocked();
+                    viewState.resetState(ViewState.STATE_PENDING_CREATE_INLINE_REQUEST);
+                }
+            } : null;
         }
 
-        void handleInlineSuggestionRequest(InlineSuggestionsRequest inlineSuggestionsRequest,
-                ViewState viewState) {
-            synchronized (mLock) {
-                if (!mWaitForInlineRequest || mPendingInlineSuggestionsRequest != null) {
-                    return;
-                }
-                mWaitForInlineRequest = inlineSuggestionsRequest != null;
-                mPendingInlineSuggestionsRequest = inlineSuggestionsRequest;
-                maybeRequestFillLocked();
-                viewState.resetState(ViewState.STATE_PENDING_CREATE_INLINE_REQUEST);
-            }
+        void newAutofillRequestLocked(@Nullable InlineSuggestionsRequest inlineRequest) {
+            mPendingFillRequest = null;
+            mWaitForInlineRequest = inlineRequest != null;
+            mPendingInlineSuggestionsRequest = inlineRequest;
         }
 
         @GuardedBy("mLock")
-        void maybeRequestFillLocked() {
+        void maybeRequestFillFromServiceLocked() {
             if (mPendingFillRequest == null) {
                 return;
             }
@@ -664,13 +667,15 @@
                     return;
                 }
 
-                mPendingFillRequest = new FillRequest(mPendingFillRequest.getId(),
-                        mPendingFillRequest.getFillContexts(),
-                        mPendingFillRequest.getHints(),
-                        mPendingFillRequest.getClientState(),
-                        mPendingFillRequest.getFlags(),
-                        mPendingInlineSuggestionsRequest,
-                        mPendingFillRequest.getDelayedFillIntentSender());
+                if (mPendingInlineSuggestionsRequest.isServiceSupported()) {
+                    mPendingFillRequest = new FillRequest(mPendingFillRequest.getId(),
+                            mPendingFillRequest.getFillContexts(),
+                            mPendingFillRequest.getHints(),
+                            mPendingFillRequest.getClientState(),
+                            mPendingFillRequest.getFlags(),
+                            mPendingInlineSuggestionsRequest,
+                            mPendingFillRequest.getDelayedFillIntentSender());
+                }
             }
             mLastFillRequest = mPendingFillRequest;
 
@@ -792,7 +797,7 @@
                             : mDelayedFillPendingIntent.getIntentSender());
 
                 mPendingFillRequest = request;
-                maybeRequestFillLocked();
+                maybeRequestFillFromServiceLocked();
             }
 
             if (mActivityToken != null) {
@@ -1118,30 +1123,39 @@
     }
 
     /**
-     * Cancels the last request sent to the {@link #mRemoteFillService}.
+     * Cancels the last request sent to the {@link #mRemoteFillService} or the
+     * {@link #mClientSuggestionsSession}.
      */
     @GuardedBy("mLock")
     private void cancelCurrentRequestLocked() {
-        if (mRemoteFillService == null) {
-            wtf(null, "cancelCurrentRequestLocked() called without a remote service. "
-                + "mForAugmentedAutofillOnly: %s", mSessionFlags.mAugmentedAutofillOnly);
+        if (mRemoteFillService == null && mClientSuggestionsSession == null) {
+            wtf(null, "cancelCurrentRequestLocked() called without a remote service or a "
+                    + "client suggestions session.  mForAugmentedAutofillOnly: %s",
+                    mSessionFlags.mAugmentedAutofillOnly);
             return;
         }
-        final int canceledRequest = mRemoteFillService.cancelCurrentRequest();
 
-        // Remove the FillContext as there will never be a response for the service
-        if (canceledRequest != INVALID_REQUEST_ID && mContexts != null) {
-            final int numContexts = mContexts.size();
+        if (mRemoteFillService != null) {
+            final int canceledRequest = mRemoteFillService.cancelCurrentRequest();
 
-            // It is most likely the last context, hence search backwards
-            for (int i = numContexts - 1; i >= 0; i--) {
-                if (mContexts.get(i).getRequestId() == canceledRequest) {
-                    if (sDebug) Slog.d(TAG, "cancelCurrentRequest(): id = " + canceledRequest);
-                    mContexts.remove(i);
-                    break;
+            // Remove the FillContext as there will never be a response for the service
+            if (canceledRequest != INVALID_REQUEST_ID && mContexts != null) {
+                final int numContexts = mContexts.size();
+
+                // It is most likely the last context, hence search backwards
+                for (int i = numContexts - 1; i >= 0; i--) {
+                    if (mContexts.get(i).getRequestId() == canceledRequest) {
+                        if (sDebug) Slog.d(TAG, "cancelCurrentRequest(): id = " + canceledRequest);
+                        mContexts.remove(i);
+                        break;
+                    }
                 }
             }
         }
+
+        if (mClientSuggestionsSession != null) {
+            mClientSuggestionsSession.cancelCurrentRequest();
+        }
     }
 
     private boolean isViewFocusedLocked(int flags) {
@@ -1235,42 +1249,57 @@
             requestAssistStructureForPccLocked(flags | FLAG_PCC_DETECTION);
         }
 
-        // Only ask IME to create inline suggestions request if Autofill provider supports it and
-        // the render service is available except the autofill is triggered manually and the view
-        // is also not focused.
+        // Only ask IME to create inline suggestions request when
+        // 1. Autofill provider supports it or client enabled client suggestions.
+        // 2. The render service is available.
+        // 3. The view is focused. (The view may not be focused if the autofill is triggered
+        //    manually.)
         final RemoteInlineSuggestionRenderService remoteRenderService =
                 mService.getRemoteInlineSuggestionRenderServiceLocked();
-        if (mSessionFlags.mInlineSupportedByService
+        if ((mSessionFlags.mInlineSupportedByService || mSessionFlags.mClientSuggestionsEnabled)
                 && remoteRenderService != null
-                && (isViewFocusedLocked(flags) || isRequestSupportFillDialog(flags))) {
-
-            Consumer<InlineSuggestionsRequest> inlineSuggestionsRequestConsumer =
-                mAssistReceiver.newAutofillRequestLocked(viewState,
-                    /* isInlineRequest= */ true);
-
+                && (isViewFocusedLocked(flags) || (isRequestSupportFillDialog(flags)))) {
+            final Consumer<InlineSuggestionsRequest> inlineSuggestionsRequestConsumer;
+            if (mSessionFlags.mClientSuggestionsEnabled) {
+                final int finalRequestId = requestId;
+                inlineSuggestionsRequestConsumer = (inlineSuggestionsRequest) -> {
+                    // Using client suggestions
+                    synchronized (mLock) {
+                        onClientFillRequestLocked(finalRequestId, inlineSuggestionsRequest);
+                    }
+                    viewState.resetState(ViewState.STATE_PENDING_CREATE_INLINE_REQUEST);
+                };
+            } else {
+                inlineSuggestionsRequestConsumer = mAssistReceiver.newAutofillRequestLocked(
+                        viewState, /* isInlineRequest= */ true);
+            }
             if (inlineSuggestionsRequestConsumer != null) {
-                final int requestIdCopy = requestId;
                 final AutofillId focusedId = mCurrentViewId;
-
-                WeakReference sessionWeakReference = new WeakReference<Session>(this);
-                InlineSuggestionRendorInfoCallbackOnResultListener
-                        inlineSuggestionRendorInfoCallbackOnResultListener =
-                                new InlineSuggestionRendorInfoCallbackOnResultListener(
-                                        sessionWeakReference,
-                                        requestIdCopy,
-                                        inlineSuggestionsRequestConsumer,
-                                        focusedId);
-                RemoteCallback inlineSuggestionRendorInfoCallback = new RemoteCallback(
-                        inlineSuggestionRendorInfoCallbackOnResultListener, mHandler);
-
+                final int requestIdCopy = requestId;
                 remoteRenderService.getInlineSuggestionsRendererInfo(
-                        inlineSuggestionRendorInfoCallback);
+                        new RemoteCallback((extras) -> {
+                            synchronized (mLock) {
+                                mInlineSessionController.onCreateInlineSuggestionsRequestLocked(
+                                        focusedId, inlineSuggestionsRequestCacheDecorator(
+                                                inlineSuggestionsRequestConsumer, requestIdCopy),
+                                        extras);
+                            }
+                        }, mHandler)
+                );
                 viewState.setState(ViewState.STATE_PENDING_CREATE_INLINE_REQUEST);
             }
+        } else if (mSessionFlags.mClientSuggestionsEnabled) {
+            // Request client suggestions for the dropdown mode
+            onClientFillRequestLocked(requestId, null);
         } else {
             mAssistReceiver.newAutofillRequestLocked(viewState, /* isInlineRequest= */ false);
         }
 
+        if (mSessionFlags.mClientSuggestionsEnabled) {
+            // Using client suggestions, unnecessary request AssistStructure
+            return;
+        }
+
         // Now request the assist structure data.
         requestAssistStructureLocked(requestId, flags);
     }
@@ -1377,6 +1406,11 @@
             mSessionFlags = new SessionFlags();
             mSessionFlags.mAugmentedAutofillOnly = forAugmentedAutofillOnly;
             mSessionFlags.mInlineSupportedByService = mService.isInlineSuggestionsEnabledLocked();
+            if (mContext.checkCallingPermission(PROVIDE_OWN_AUTOFILL_SUGGESTIONS)
+                    == PackageManager.PERMISSION_GRANTED) {
+                mSessionFlags.mClientSuggestionsEnabled =
+                        (mFlags & FLAG_ENABLED_CLIENT_SUGGESTIONS) != 0;
+            }
             setClientLocked(client);
         }
 
@@ -1517,14 +1551,15 @@
                 if (requestLog != null) {
                     requestLog.addTaggedData(MetricsEvent.FIELD_AUTOFILL_NUM_DATASETS, -1);
                 }
-                processNullResponseLocked(requestId, requestFlags);
+                processNullResponseOrFallbackLocked(requestId, requestFlags);
                 return;
             }
 
             // TODO: Check if this is required. We can still present datasets to the user even if
             //  traditional field classification is disabled.
             fieldClassificationIds = response.getFieldClassificationIds();
-            if (fieldClassificationIds != null && !mService.isFieldClassificationEnabledLocked()) {
+            if (!mSessionFlags.mClientSuggestionsEnabled && fieldClassificationIds != null
+                    && !mService.isFieldClassificationEnabledLocked()) {
                 Slog.w(TAG, "Ignoring " + response + " because field detection is disabled");
                 processNullResponseLocked(requestId, requestFlags);
                 return;
@@ -1658,7 +1693,9 @@
                         || (ArrayUtils.isEmpty(saveInfo.getOptionalIds())
                             && ArrayUtils.isEmpty(saveInfo.getRequiredIds())
                             && ((saveInfo.getFlags() & SaveInfo.FLAG_DELAY_SAVE) == 0)))
-                    && (ArrayUtils.isEmpty(response.getFieldClassificationIds())));
+                    && (ArrayUtils.isEmpty(response.getFieldClassificationIds())
+                        || (!mSessionFlags.mClientSuggestionsEnabled
+                        && !mService.isFieldClassificationEnabledLocked())));
         }
     }
 
@@ -2044,6 +2081,40 @@
         }
     }
 
+    @GuardedBy("mLock")
+    private void processNullResponseOrFallbackLocked(int requestId, int flags) {
+        if (!mSessionFlags.mClientSuggestionsEnabled) {
+            processNullResponseLocked(requestId, flags);
+            return;
+        }
+
+        // fallback to the default platform password manager
+        mSessionFlags.mClientSuggestionsEnabled = false;
+        mLastFillDialogTriggerIds = null;
+        // Log the existing FillResponse event.
+        mFillResponseEventLogger.logAndEndEvent();
+
+        final InlineSuggestionsRequest inlineRequest =
+                (mLastInlineSuggestionsRequest != null
+                        && mLastInlineSuggestionsRequest.first == requestId)
+                        ? mLastInlineSuggestionsRequest.second : null;
+
+        // Start a new FillRequest logger for client suggestion fallback.
+        mFillRequestEventLogger.startLogForNewRequest();
+        mRequestCount++;
+        mFillRequestEventLogger.maybeSetAppPackageUid(uid);
+        mFillRequestEventLogger.maybeSetFlags(
+            flags & ~FLAG_ENABLED_CLIENT_SUGGESTIONS);
+        mFillRequestEventLogger.maybeSetRequestTriggerReason(
+            TRIGGER_REASON_NORMAL_TRIGGER);
+        mFillRequestEventLogger.maybeSetIsClientSuggestionFallback(true);
+
+        mAssistReceiver.newAutofillRequestLocked(inlineRequest);
+        requestAssistStructureLocked(requestId,
+                flags & ~FLAG_ENABLED_CLIENT_SUGGESTIONS);
+        return;
+    }
+
     // FillServiceCallbacks
     @Override
     @SuppressWarnings("GuardedBy")
@@ -2333,6 +2404,7 @@
                 mLoggedInlineDatasetShown = true;
             }
             mService.logDatasetShown(this.id, mClientState, uiType);
+            Slog.d(TAG, "onShown(): " + uiType);
         }
     }
 
@@ -3201,8 +3273,6 @@
 
         /*
          * Don't show save if the session has credman field
-         *
-         * TODO: add a new enum NO_SAVE_UI_CREDMAN
          */
         if (mSessionFlags.mScreenHasCredmanField) {
             if (sVerbose) {
@@ -4134,7 +4204,15 @@
                     // We don't send an empty response to IME so that it doesn't cause UI flicker
                     // on the IME side if it arrives before the input view is finished on the IME.
                     mInlineSessionController.resetInlineFillUiLocked();
-                    mCurrentViewId = null;
+
+                    if ((viewState.getState() &
+                            ViewState.STATE_PENDING_CREATE_INLINE_REQUEST) != 0) {
+                        // View was exited before Inline Request sent back, do not set it to
+                        // null yet to let onHandleAssistData finish processing
+                    } else {
+                        mCurrentViewId = null;
+                    }
+
 
                     mPresentationStatsEventLogger.maybeSetNoPresentationEventReason(
                                 NOT_SHOWN_REASON_VIEW_FOCUS_CHANGED);
@@ -4299,13 +4377,22 @@
             filterText = value.getTextValue().toString();
         }
 
-        final CharSequence serviceLabel;
-        final Drawable serviceIcon;
-        synchronized (this.mService.mLock) {
-            serviceLabel = mService.getServiceLabelLocked();
-            serviceIcon = mService.getServiceIconLocked();
+        final CharSequence targetLabel;
+        final Drawable targetIcon;
+        synchronized (mLock) {
+            if (mSessionFlags.mClientSuggestionsEnabled) {
+                final ApplicationInfo appInfo = ClientSuggestionsSession.getAppInfo(mComponentName,
+                        mService.getUserId());
+                targetLabel = ClientSuggestionsSession.getAppLabelLocked(
+                        mService.getMaster().getContext(), appInfo);
+                targetIcon = ClientSuggestionsSession.getAppIconLocked(
+                        mService.getMaster().getContext(), appInfo);
+            } else {
+                targetLabel = mService.getServiceLabelLocked();
+                targetIcon = mService.getServiceIconLocked();
+            }
         }
-        if (serviceLabel == null || serviceIcon == null) {
+        if (targetLabel == null || targetIcon == null) {
             wtf(null, "onFillReady(): no service label or icon");
             return;
         }
@@ -4366,7 +4453,7 @@
 
         getUiForShowing().showFillUi(filledId, response, filterText,
                 mService.getServicePackageName(), mComponentName,
-                serviceLabel, serviceIcon, this, mContext, id, mCompatMode);
+                targetLabel, targetIcon, this, mContext, id, mCompatMode);
 
         synchronized (mLock) {
             mPresentationStatsEventLogger.maybeSetCountShown(
@@ -4568,6 +4655,17 @@
             return false;
         }
 
+        final InlineSuggestionsRequest request = inlineSuggestionsRequest.get();
+        if (mSessionFlags.mClientSuggestionsEnabled && !request.isClientSupported()
+                || !mSessionFlags.mClientSuggestionsEnabled && !request.isServiceSupported()) {
+            if (sDebug) {
+                Slog.d(TAG, "Inline suggestions not supported for "
+                        + (mSessionFlags.mClientSuggestionsEnabled ? "client" : "service")
+                        + ". Falling back to dropdown.");
+            }
+            return false;
+        }
+
         final RemoteInlineSuggestionRenderService remoteRenderService =
                 mService.getRemoteInlineSuggestionRenderServiceLocked();
         if (remoteRenderService == null) {
@@ -4582,8 +4680,8 @@
         }
 
         final InlineFillUi.InlineFillUiInfo inlineFillUiInfo =
-            new InlineFillUi.InlineFillUiInfo(inlineSuggestionsRequest.get(), focusedId,
-                filterText, remoteRenderService, userId, id);
+                new InlineFillUi.InlineFillUiInfo(request, focusedId,
+                        filterText, remoteRenderService, userId, id);
         InlineFillUi inlineFillUi = InlineFillUi.forAutofill(inlineFillUiInfo, response,
                 new InlineFillUi.InlineSuggestionUiCallback() {
                     @Override
@@ -5352,7 +5450,7 @@
     }
 
     @NonNull
-    Consumer<InlineSuggestionsRequest> inlineSuggestionsRequestCacheDecorator(
+    private Consumer<InlineSuggestionsRequest> inlineSuggestionsRequestCacheDecorator(
             @NonNull Consumer<InlineSuggestionsRequest> consumer, int requestId) {
         return inlineSuggestionsRequest -> {
             consumer.accept(inlineSuggestionsRequest);
@@ -5393,6 +5491,26 @@
         }
     }
 
+    @GuardedBy("mLock")
+    private void onClientFillRequestLocked(int requestId,
+            InlineSuggestionsRequest inlineSuggestionsRequest) {
+        if (mClientSuggestionsSession == null) {
+            mClientSuggestionsSession = new ClientSuggestionsSession(id, mClient, mHandler,
+                    mComponentName, this);
+        }
+
+        if (mContexts == null) {
+            mContexts = new ArrayList<>(1);
+        }
+        mContexts.add(new FillContext(requestId, new AssistStructure(), mCurrentViewId));
+
+        if (inlineSuggestionsRequest != null && !inlineSuggestionsRequest.isClientSupported()) {
+            inlineSuggestionsRequest = null;
+        }
+
+        mClientSuggestionsSession.onFillRequest(requestId, inlineSuggestionsRequest, mFlags);
+    }
+
     /**
      * The result of checking whether to show the save dialog, when session can be saved.
      *
diff --git a/services/autofill/java/com/android/server/autofill/ui/FillUi.java b/services/autofill/java/com/android/server/autofill/ui/FillUi.java
index cdd9ef4..0a8fe62 100644
--- a/services/autofill/java/com/android/server/autofill/ui/FillUi.java
+++ b/services/autofill/java/com/android/server/autofill/ui/FillUi.java
@@ -426,12 +426,18 @@
             if (mDestroyed) {
                 return;
             }
+            final int size = mFilterText == null ? 0 : mFilterText.length();
             if (count <= 0) {
                 if (sDebug) {
-                    final int size = mFilterText == null ? 0 : mFilterText.length();
                     Slog.d(TAG, "No dataset matches filter with " + size + " chars");
                 }
                 mCallback.requestHideFillUi();
+            } else if (size > 3) {
+                // Do not show suggestion if user entered four or more characters
+                if (sDebug) {
+                    Slog.d(TAG, "Not showing fill UI because user entered more than 3 characters");
+                }
+                mCallback.requestHideFillUi();
             } else {
                 if (updateContentSize()) {
                     requestShowFillUi();
diff --git a/services/autofill/java/com/android/server/autofill/ui/InlineFillUi.java b/services/autofill/java/com/android/server/autofill/ui/InlineFillUi.java
index ac8d962..24eab0b 100644
--- a/services/autofill/java/com/android/server/autofill/ui/InlineFillUi.java
+++ b/services/autofill/java/com/android/server/autofill/ui/InlineFillUi.java
@@ -216,6 +216,16 @@
             }
             return new InlineSuggestionsResponse(inlineSuggestions);
         }
+
+        // Do not show suggestion if user entered four or more characters
+        if (!TextUtils.isEmpty(mFilterText) && mFilterText.length() > 3) {
+            if (sVerbose) {
+                Slog.v(TAG, "Not showing inline suggestion because user entered more than 3 "
+                        + "characters");
+            }
+            return new InlineSuggestionsResponse(inlineSuggestions);
+        }
+
         for (int i = 0; i < size; i++) {
             final Dataset dataset = mDatasets.get(i);
             final int fieldIndex = dataset.getFieldIds().indexOf(mAutofillId);
diff --git a/services/backup/TEST_MAPPING b/services/backup/TEST_MAPPING
index 62706e74..e153230 100644
--- a/services/backup/TEST_MAPPING
+++ b/services/backup/TEST_MAPPING
@@ -1,6 +1,14 @@
 {
   "presubmit": [
     {
+      "name": "FrameworksMockingServicesTests",
+      "options": [
+        {
+          "include-filter": "com.android.server.backup"
+        }
+      ]
+    },
+    {
       "name": "CtsBackupTestCases",
       "options": [
         {
diff --git a/services/backup/java/com/android/server/backup/FullBackupJob.java b/services/backup/java/com/android/server/backup/FullBackupJob.java
index fe0e1c6..bab65ad 100644
--- a/services/backup/java/com/android/server/backup/FullBackupJob.java
+++ b/services/backup/java/com/android/server/backup/FullBackupJob.java
@@ -24,6 +24,7 @@
 import android.app.job.JobService;
 import android.content.ComponentName;
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.util.SparseArray;
 
@@ -52,13 +53,15 @@
         JobInfo.Builder builder = new JobInfo.Builder(getJobIdForUserId(userId), sIdleService);
         final BackupManagerConstants constants = userBackupManagerService.getConstants();
         synchronized (constants) {
-            builder.setRequiresDeviceIdle(true)
-                    .setRequiredNetworkType(constants.getFullBackupRequiredNetworkType())
+            builder.setRequiredNetworkType(constants.getFullBackupRequiredNetworkType())
                     .setRequiresCharging(constants.getFullBackupRequireCharging());
         }
         if (minDelay > 0) {
             builder.setMinimumLatency(minDelay);
         }
+        if (!ctx.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH)) {
+            builder.setRequiresDeviceIdle(true);
+        }
 
         Bundle extraInfo = new Bundle();
         extraInfo.putInt(USER_ID_EXTRA_KEY, userId);
@@ -114,7 +117,8 @@
         return false;
     }
 
-    private static int getJobIdForUserId(int userId) {
+    @VisibleForTesting
+    static int getJobIdForUserId(int userId) {
         return JobIdManager.getJobIdForUserId(MIN_JOB_ID, MAX_JOB_ID, userId);
     }
 }
diff --git a/services/backup/java/com/android/server/backup/KeyValueBackupJob.java b/services/backup/java/com/android/server/backup/KeyValueBackupJob.java
index 164bbea..9a788be 100644
--- a/services/backup/java/com/android/server/backup/KeyValueBackupJob.java
+++ b/services/backup/java/com/android/server/backup/KeyValueBackupJob.java
@@ -169,7 +169,8 @@
         sNextScheduledForUserId.delete(userId);
     }
 
-    private static int getJobIdForUserId(int userId) {
+    @VisibleForTesting
+    static int getJobIdForUserId(int userId) {
         return JobIdManager.getJobIdForUserId(MIN_JOB_ID, MAX_JOB_ID, userId);
     }
 }
diff --git a/services/backup/java/com/android/server/backup/UserBackupManagerService.java b/services/backup/java/com/android/server/backup/UserBackupManagerService.java
index d5aee92..b6baf7e 100644
--- a/services/backup/java/com/android/server/backup/UserBackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/UserBackupManagerService.java
@@ -36,6 +36,7 @@
 import static com.android.server.backup.internal.BackupHandler.MSG_RUN_RESTORE;
 import static com.android.server.backup.internal.BackupHandler.MSG_SCHEDULE_BACKUP_PACKAGE;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.UserIdInt;
 import android.app.ActivityManager;
@@ -508,7 +509,8 @@
 
     @VisibleForTesting
     UserBackupManagerService(Context context, PackageManager packageManager,
-            LifecycleOperationStorage operationStorage, TransportManager transportManager) {
+            LifecycleOperationStorage operationStorage, TransportManager transportManager,
+            BackupHandler backupHandler, BackupManagerConstants backupManagerConstants) {
         mContext = context;
 
         mUserId = 0;
@@ -516,6 +518,9 @@
         mPackageManager = packageManager;
         mOperationStorage = operationStorage;
         mTransportManager = transportManager;
+        mFullBackupQueue = new ArrayList<>();
+        mBackupHandler = backupHandler;
+        mConstants = backupManagerConstants;
 
         mBaseStateDir = null;
         mDataDir = null;
@@ -527,9 +532,7 @@
         mAgentTimeoutParameters = null;
         mActivityManagerInternal = null;
         mAlarmManager = null;
-        mConstants = null;
         mWakelock = null;
-        mBackupHandler = null;
         mBackupPreferences = null;
         mBackupPasswordManager = null;
         mPackageManagerBinder = null;
@@ -974,6 +977,7 @@
                 /* scheduler */ null);
     }
 
+    @NonNull
     private ArrayList<FullBackupEntry> readFullBackupSchedule() {
         boolean changed = false;
         ArrayList<FullBackupEntry> schedule = null;
@@ -987,11 +991,11 @@
                  DataInputStream in = new DataInputStream(bufStream)) {
                 int version = in.readInt();
                 if (version != SCHEDULE_FILE_VERSION) {
-                    Slog.e(
-                            TAG,
-                            addUserIdToLogMessage(
-                                    mUserId, "Unknown backup schedule version " + version));
-                    return null;
+                    // The file version doesn't match the expected value.
+                    // Since this is within a "try" block, this exception will be treated like
+                    // any other exception, and caught below.
+                    throw new IllegalArgumentException("Unknown backup schedule version "
+                            + version);
                 }
 
                 final int numPackages = in.readInt();
diff --git a/services/backup/lint-baseline.xml b/services/backup/lint-baseline.xml
index 28bb937..93c9390 100644
--- a/services/backup/lint-baseline.xml
+++ b/services/backup/lint-baseline.xml
@@ -12,4 +12,28 @@
             column="16"/>
     </issue>
 
+    <issue
+        id="SimpleManualPermissionEnforcement"
+        message="IRestoreSession permission check should be converted to @EnforcePermission annotation">
+        <location
+            file="frameworks/base/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java"
+            line="88"/>
+    </issue>
+
+    <issue
+        id="SimpleManualPermissionEnforcement"
+        message="IRestoreSession permission check should be converted to @EnforcePermission annotation">
+        <location
+            file="frameworks/base/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java"
+            line="144"/>
+    </issue>
+
+    <issue
+        id="SimpleManualPermissionEnforcement"
+        message="IRestoreSession permission check should be converted to @EnforcePermission annotation">
+        <location
+            file="frameworks/base/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java"
+            line="207"/>
+    </issue>
+
 </issues>
diff --git a/services/cloudsearch/OWNERS b/services/cloudsearch/OWNERS
index aa4da3b..3a5841e 100644
--- a/services/cloudsearch/OWNERS
+++ b/services/cloudsearch/OWNERS
@@ -1,4 +1,3 @@
 # Bug component: 758286
 
-huiwu@google.com
 srazdan@google.com
diff --git a/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java b/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java
index 4ace391..fd45d24 100644
--- a/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java
+++ b/services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java
@@ -19,7 +19,6 @@
 import static android.app.PendingIntent.FLAG_CANCEL_CURRENT;
 import static android.app.PendingIntent.FLAG_IMMUTABLE;
 import static android.app.PendingIntent.FLAG_ONE_SHOT;
-import static android.companion.CompanionDeviceManager.COMPANION_DEVICE_DISCOVERY_PACKAGE_NAME;
 import static android.companion.CompanionDeviceManager.REASON_INTERNAL_ERROR;
 import static android.companion.CompanionDeviceManager.RESULT_INTERNAL_ERROR;
 import static android.content.ComponentName.createRelative;
@@ -57,6 +56,8 @@
 import android.os.UserHandle;
 import android.util.Slog;
 
+import com.android.internal.R;
+
 import java.util.List;
 
 /**
@@ -106,9 +107,6 @@
 class AssociationRequestsProcessor {
     private static final String TAG = "CDM_AssociationRequestsProcessor";
 
-    private static final ComponentName ASSOCIATION_REQUEST_APPROVAL_ACTIVITY =
-            createRelative(COMPANION_DEVICE_DISCOVERY_PACKAGE_NAME, ".CompanionDeviceActivity");
-
     // AssociationRequestsProcessor <-> UI
     private static final String EXTRA_APPLICATION_CALLBACK = "application_callback";
     private static final String EXTRA_ASSOCIATION_REQUEST = "association_request";
@@ -130,6 +128,8 @@
     private final @NonNull CompanionDeviceManagerService mService;
     private final @NonNull PackageManagerInternal mPackageManager;
     private final @NonNull AssociationStoreImpl mAssociationStore;
+    @NonNull
+    private final ComponentName mCompanionDeviceActivity;
 
     AssociationRequestsProcessor(@NonNull CompanionDeviceManagerService service,
             @NonNull AssociationStoreImpl associationStore) {
@@ -137,6 +137,9 @@
         mService = service;
         mPackageManager = service.mPackageManagerInternal;
         mAssociationStore = associationStore;
+        mCompanionDeviceActivity = createRelative(
+                mContext.getString(R.string.config_companionDeviceManagerPackage),
+                ".CompanionDeviceActivity");
     }
 
     /**
@@ -189,7 +192,7 @@
         extras.putParcelable(EXTRA_RESULT_RECEIVER, prepareForIpc(mOnRequestConfirmationReceiver));
 
         final Intent intent = new Intent();
-        intent.setComponent(ASSOCIATION_REQUEST_APPROVAL_ACTIVITY);
+        intent.setComponent(mCompanionDeviceActivity);
         intent.putExtras(extras);
 
         // 2b.3. Create a PendingIntent.
@@ -216,7 +219,7 @@
         extras.putBoolean(EXTRA_FORCE_CANCEL_CONFIRMATION, true);
 
         final Intent intent = new Intent();
-        intent.setComponent(ASSOCIATION_REQUEST_APPROVAL_ACTIVITY);
+        intent.setComponent(mCompanionDeviceActivity);
         intent.putExtras(extras);
 
         return createPendingIntent(packageUid, intent);
@@ -278,9 +281,9 @@
         final long timestamp = System.currentTimeMillis();
 
         final AssociationInfo association = new AssociationInfo(id, userId, packageName,
-                macAddress, displayName, deviceProfile, associatedDevice, selfManaged,
-                /* notifyOnDeviceNearby */ false, /* revoked */ false, timestamp, Long.MAX_VALUE,
-                /* systemDataSyncFlags */ 0);
+                /* tag */ null, macAddress, displayName, deviceProfile, associatedDevice,
+                selfManaged, /* notifyOnDeviceNearby */ false, /* revoked */ false,
+                timestamp, Long.MAX_VALUE, /* systemDataSyncFlags */ 0);
 
         if (deviceProfile != null) {
             // If the "Device Profile" is specified, make the companion application a holder of the
diff --git a/services/companion/java/com/android/server/companion/CompanionApplicationController.java b/services/companion/java/com/android/server/companion/CompanionApplicationController.java
index 5a9c470..c2d2468 100644
--- a/services/companion/java/com/android/server/companion/CompanionApplicationController.java
+++ b/services/companion/java/com/android/server/companion/CompanionApplicationController.java
@@ -44,8 +44,9 @@
  * Manages communication with companion applications via
  * {@link android.companion.ICompanionDeviceService} interface, including "connecting" (binding) to
  * the services, maintaining the connection (the binding), and invoking callback methods such as
- * {@link CompanionDeviceService#onDeviceAppeared(AssociationInfo)} and
- * {@link CompanionDeviceService#onDeviceDisappeared(AssociationInfo)} in the application process.
+ * {@link CompanionDeviceService#onDeviceAppeared(AssociationInfo)},
+ * {@link CompanionDeviceService#onDeviceDisappeared(AssociationInfo)} and
+ * {@link CompanionDeviceService#onDeviceEvent(AssociationInfo, int)} in the application process.
  *
  * <p>
  * The following is the list of the APIs provided by {@link CompanionApplicationController} (to be
@@ -53,8 +54,7 @@
  * <ul>
  * <li> {@link #bindCompanionApplication(int, String, boolean)}
  * <li> {@link #unbindCompanionApplication(int, String)}
- * <li> {@link #notifyCompanionApplicationDeviceAppeared(AssociationInfo)}
- * <li> {@link #notifyCompanionApplicationDeviceDisappeared(AssociationInfo)}
+ * <li> {@link #notifyCompanionApplicationDeviceEvent(AssociationInfo, int)} (AssociationInfo, int)}
  * <li> {@link #isCompanionApplicationBound(int, String)}
  * <li> {@link #isRebindingCompanionApplicationScheduled(int, String)}
  * </ul>
@@ -240,19 +240,16 @@
     void notifyCompanionApplicationDeviceAppeared(AssociationInfo association) {
         final int userId = association.getUserId();
         final String packageName = association.getPackageName();
-        if (DEBUG) {
-            Log.i(TAG, "notifyDevice_Appeared() id=" + association.getId() + " u" + userId
+
+        Slog.i(TAG, "notifyDevice_Appeared() id=" + association.getId() + " u" + userId
                     + "/" + packageName);
-        }
 
         final CompanionDeviceServiceConnector primaryServiceConnector =
                 getPrimaryServiceConnector(userId, packageName);
         if (primaryServiceConnector == null) {
-            if (DEBUG) {
-                Log.e(TAG, "notify_CompanionApplicationDevice_Appeared(): "
+            Slog.e(TAG, "notify_CompanionApplicationDevice_Appeared(): "
                         + "u" + userId + "/" + packageName + " is NOT bound.");
-                Log.d(TAG, "Stacktrace", new Throwable());
-            }
+            Slog.e(TAG, "Stacktrace", new Throwable());
             return;
         }
 
@@ -265,19 +262,16 @@
     void notifyCompanionApplicationDeviceDisappeared(AssociationInfo association) {
         final int userId = association.getUserId();
         final String packageName = association.getPackageName();
-        if (DEBUG) {
-            Log.i(TAG, "notifyDevice_Disappeared() id=" + association.getId() + " u" + userId
-                    + "/" + packageName);
-        }
+
+        Slog.i(TAG, "notifyDevice_Disappeared() id=" + association.getId() + " u" + userId
+                + "/" + packageName);
 
         final CompanionDeviceServiceConnector primaryServiceConnector =
                 getPrimaryServiceConnector(userId, packageName);
         if (primaryServiceConnector == null) {
-            if (DEBUG) {
-                Log.e(TAG, "notify_CompanionApplicationDevice_Disappeared(): "
+            Slog.e(TAG, "notify_CompanionApplicationDevice_Disappeared(): "
                         + "u" + userId + "/" + packageName + " is NOT bound.");
-                Log.d(TAG, "Stacktrace", new Throwable());
-            }
+            Slog.e(TAG, "Stacktrace", new Throwable());
             return;
         }
 
@@ -287,6 +281,27 @@
         primaryServiceConnector.postOnDeviceDisappeared(association);
     }
 
+    void notifyCompanionApplicationDeviceEvent(AssociationInfo association, int event) {
+        final int userId = association.getUserId();
+        final String packageName = association.getPackageName();
+        final CompanionDeviceServiceConnector primaryServiceConnector =
+                getPrimaryServiceConnector(userId, packageName);
+
+        if (primaryServiceConnector == null) {
+            Slog.e(TAG, "notifyCompanionApplicationDeviceEvent(): "
+                        + "u" + userId + "/" + packageName
+                        + " event=[ " + event  + " ] is NOT bound.");
+            Slog.e(TAG, "Stacktrace", new Throwable());
+            return;
+        }
+
+        Slog.i(TAG, "Calling onDeviceEvent() to userId=[" + userId + "] package=["
+                + packageName + "] associationId=[" + association.getId()
+                + "] state=[" + event + "]");
+
+        primaryServiceConnector.postOnDeviceEvent(association, event);
+    }
+
     void dump(@NonNull PrintWriter out) {
         out.append("Companion Device Application Controller: \n");
 
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
index 9d6283b8..996c68b 100644
--- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
@@ -17,9 +17,19 @@
 
 package com.android.server.companion;
 
+import static android.Manifest.permission.ASSOCIATE_COMPANION_DEVICES;
+import static android.Manifest.permission.DELIVER_COMPANION_MESSAGES;
 import static android.Manifest.permission.MANAGE_COMPANION_DEVICES;
+import static android.Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE;
+import static android.Manifest.permission.USE_COMPANION_TRANSPORTS;
 import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIBLE;
 import static android.companion.AssociationRequest.DEVICE_PROFILE_AUTOMOTIVE_PROJECTION;
+import static android.companion.CompanionDeviceService.DEVICE_EVENT_BLE_APPEARED;
+import static android.companion.CompanionDeviceService.DEVICE_EVENT_BLE_DISAPPEARED;
+import static android.companion.CompanionDeviceService.DEVICE_EVENT_BT_CONNECTED;
+import static android.companion.CompanionDeviceService.DEVICE_EVENT_BT_DISCONNECTED;
+import static android.companion.CompanionDeviceService.DEVICE_EVENT_SELF_MANAGED_APPEARED;
+import static android.companion.CompanionDeviceService.DEVICE_EVENT_SELF_MANAGED_DISAPPEARED;
 import static android.content.pm.PackageManager.CERT_INPUT_SHA256;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
 import static android.os.Process.SYSTEM_UID;
@@ -34,7 +44,6 @@
 import static com.android.server.companion.PackageUtils.getPackageInfo;
 import static com.android.server.companion.PermissionsUtils.checkCallerCanManageCompanionDevice;
 import static com.android.server.companion.PermissionsUtils.enforceCallerCanManageAssociationsForPackage;
-import static com.android.server.companion.PermissionsUtils.enforceCallerCanManageCompanionDevice;
 import static com.android.server.companion.PermissionsUtils.enforceCallerIsSystemOr;
 import static com.android.server.companion.PermissionsUtils.enforceCallerIsSystemOrCanInteractWithUserId;
 import static com.android.server.companion.PermissionsUtils.sanitizeWithCallerChecks;
@@ -44,6 +53,7 @@
 import static java.util.concurrent.TimeUnit.DAYS;
 import static java.util.concurrent.TimeUnit.MINUTES;
 
+import android.annotation.EnforcePermission;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SuppressLint;
@@ -379,17 +389,8 @@
 
         if (!association.shouldBindWhenPresent()) return;
 
-        final int userId = association.getUserId();
-        final String packageName = association.getPackageName();
-        // Set bindImportant to true when the association is self-managed to avoid the target
-        // service being killed.
-        final boolean bindImportant = association.isSelfManaged();
+        bindApplicationIfNeeded(association);
 
-        if (!mCompanionAppController.isCompanionApplicationBound(userId, packageName)) {
-            mCompanionAppController.bindCompanionApplication(userId, packageName, bindImportant);
-        } else if (DEBUG) {
-            Log.i(TAG, "u" + userId + "\\" + packageName + " is already bound");
-        }
         mCompanionAppController.notifyCompanionApplicationDeviceAppeared(association);
     }
 
@@ -410,11 +411,57 @@
         if (association.shouldBindWhenPresent()) {
             mCompanionAppController.notifyCompanionApplicationDeviceDisappeared(association);
         }
+    }
 
-        // Check if there are other devices associated to the app that are present.
-        if (shouldBindPackage(userId, packageName)) return;
+    private void onDeviceEventInternal(int associationId, int event) {
+        Slog.i(TAG, "onDeviceEventInternal() id=" + associationId + " event= " + event);
+        final AssociationInfo association = mAssociationStore.getAssociationById(associationId);
+        final String packageName = association.getPackageName();
+        final int userId = association.getUserId();
+        switch (event) {
+            case DEVICE_EVENT_BLE_APPEARED:
+            case DEVICE_EVENT_BT_CONNECTED:
+            case DEVICE_EVENT_SELF_MANAGED_APPEARED:
+                if (!association.shouldBindWhenPresent()) return;
 
-        mCompanionAppController.unbindCompanionApplication(userId, packageName);
+                bindApplicationIfNeeded(association);
+
+                mCompanionAppController.notifyCompanionApplicationDeviceEvent(
+                        association, event);
+                break;
+            case DEVICE_EVENT_BLE_DISAPPEARED:
+            case DEVICE_EVENT_BT_DISCONNECTED:
+            case DEVICE_EVENT_SELF_MANAGED_DISAPPEARED:
+                if (!mCompanionAppController.isCompanionApplicationBound(userId, packageName)) {
+                    if (DEBUG) Log.w(TAG, "u" + userId + "\\" + packageName + " is NOT bound");
+                    return;
+                }
+                if (association.shouldBindWhenPresent()) {
+                    mCompanionAppController.notifyCompanionApplicationDeviceEvent(
+                            association, event);
+                }
+                // Check if there are other devices associated to the app that are present.
+                if (shouldBindPackage(userId, packageName)) return;
+                mCompanionAppController.unbindCompanionApplication(userId, packageName);
+                break;
+            default:
+                Slog.e(TAG, "Event: " + event + "is not supported");
+                break;
+        }
+    }
+
+    private void bindApplicationIfNeeded(AssociationInfo association) {
+        final String packageName = association.getPackageName();
+        final int userId = association.getUserId();
+        // Set bindImportant to true when the association is self-managed to avoid the target
+        // service being killed.
+        final boolean bindImportant = association.isSelfManaged();
+        if (!mCompanionAppController.isCompanionApplicationBound(userId, packageName)) {
+            mCompanionAppController.bindCompanionApplication(
+                    userId, packageName, bindImportant);
+        } else if (DEBUG) {
+            Log.i(TAG, "u" + userId + "\\" + packageName + " is already bound");
+        }
     }
 
     /**
@@ -605,60 +652,82 @@
         }
 
         @Override
+        @EnforcePermission(MANAGE_COMPANION_DEVICES)
         public List<AssociationInfo> getAllAssociationsForUser(int userId) throws RemoteException {
+            getAllAssociationsForUser_enforcePermission();
+
             enforceCallerIsSystemOrCanInteractWithUserId(getContext(), userId);
-            enforceCallerCanManageCompanionDevice(getContext(), "getAllAssociationsForUser");
 
             return mAssociationStore.getAssociationsForUser(userId);
         }
 
         @Override
+        @EnforcePermission(MANAGE_COMPANION_DEVICES)
         public void addOnAssociationsChangedListener(IOnAssociationsChangedListener listener,
                 int userId) {
-            enforceCallerIsSystemOrCanInteractWithUserId(getContext(), userId);
-            enforceCallerCanManageCompanionDevice(getContext(),
-                    "addOnAssociationsChangedListener");
+            addOnAssociationsChangedListener_enforcePermission();
 
+            enforceCallerIsSystemOrCanInteractWithUserId(getContext(), userId);
             mListeners.register(listener, userId);
         }
 
         @Override
+        @EnforcePermission(MANAGE_COMPANION_DEVICES)
         public void removeOnAssociationsChangedListener(IOnAssociationsChangedListener listener,
                 int userId) {
+            removeOnAssociationsChangedListener_enforcePermission();
+
             enforceCallerIsSystemOrCanInteractWithUserId(getContext(), userId);
-            enforceCallerCanManageCompanionDevice(
-                    getContext(), "removeOnAssociationsChangedListener");
 
             mListeners.unregister(listener);
         }
 
         @Override
+        @EnforcePermission(USE_COMPANION_TRANSPORTS)
         public void addOnTransportsChangedListener(IOnTransportsChangedListener listener) {
+            addOnTransportsChangedListener_enforcePermission();
+
             mTransportManager.addListener(listener);
         }
 
         @Override
+        @EnforcePermission(USE_COMPANION_TRANSPORTS)
         public void removeOnTransportsChangedListener(IOnTransportsChangedListener listener) {
+            removeOnTransportsChangedListener_enforcePermission();
+
             mTransportManager.removeListener(listener);
         }
 
         @Override
+        @EnforcePermission(USE_COMPANION_TRANSPORTS)
         public void sendMessage(int messageType, byte[] data, int[] associationIds) {
+            sendMessage_enforcePermission();
+
             mTransportManager.sendMessage(messageType, data, associationIds);
         }
 
         @Override
+        @EnforcePermission(USE_COMPANION_TRANSPORTS)
         public void addOnMessageReceivedListener(int messageType,
                 IOnMessageReceivedListener listener) {
+            addOnMessageReceivedListener_enforcePermission();
+
             mTransportManager.addListener(messageType, listener);
         }
 
         @Override
+        @EnforcePermission(USE_COMPANION_TRANSPORTS)
         public void removeOnMessageReceivedListener(int messageType,
                 IOnMessageReceivedListener listener) {
+            removeOnMessageReceivedListener_enforcePermission();
+
             mTransportManager.removeListener(messageType, listener);
         }
 
+        /**
+         * @deprecated use {@link #disassociate(int)} instead
+         */
+        @Deprecated
         @Override
         public void legacyDisassociate(String deviceMacAddress, String packageName, int userId) {
             Log.i(TAG, "legacyDisassociate() pkg=u" + userId + "/" + packageName
@@ -715,10 +784,10 @@
         }
 
         @Override
+        @EnforcePermission(MANAGE_COMPANION_DEVICES)
         public boolean isDeviceAssociatedForWifiConnection(String packageName, String macAddress,
                 int userId) {
-            getContext().enforceCallingOrSelfPermission(
-                    MANAGE_COMPANION_DEVICES, "isDeviceAssociated");
+            isDeviceAssociatedForWifiConnection_enforcePermission();
 
             boolean bypassMacPermission = getContext().getPackageManager().checkPermission(
                     android.Manifest.permission.COMPANION_APPROVE_WIFI_CONNECTIONS, packageName)
@@ -732,15 +801,19 @@
         }
 
         @Override
+        @EnforcePermission(REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE)
         public void registerDevicePresenceListenerService(String deviceAddress,
                 String callingPackage, int userId) throws RemoteException {
+            registerDevicePresenceListenerService_enforcePermission();
             // TODO: take the userId into account.
             registerDevicePresenceListenerActive(callingPackage, deviceAddress, true);
         }
 
         @Override
+        @EnforcePermission(REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE)
         public void unregisterDevicePresenceListenerService(String deviceAddress,
                 String callingPackage, int userId) throws RemoteException {
+            unregisterDevicePresenceListenerService_enforcePermission();
             // TODO: take the userId into account.
             registerDevicePresenceListenerActive(callingPackage, deviceAddress, false);
         }
@@ -769,14 +842,20 @@
         }
 
         @Override
+        @EnforcePermission(DELIVER_COMPANION_MESSAGES)
         public void attachSystemDataTransport(String packageName, int userId, int associationId,
                 ParcelFileDescriptor fd) {
+            attachSystemDataTransport_enforcePermission();
+
             getAssociationWithCallerChecks(associationId);
             mTransportManager.attachSystemDataTransport(packageName, userId, associationId, fd);
         }
 
         @Override
+        @EnforcePermission(DELIVER_COMPANION_MESSAGES)
         public void detachSystemDataTransport(String packageName, int userId, int associationId) {
+            detachSystemDataTransport_enforcePermission();
+
             getAssociationWithCallerChecks(associationId);
             mTransportManager.detachSystemDataTransport(packageName, userId, associationId);
         }
@@ -794,7 +873,9 @@
         }
 
         @Override
+        @EnforcePermission(MANAGE_COMPANION_DEVICES)
         public void enableSecureTransport(boolean enabled) {
+            enableSecureTransport_enforcePermission();
             mTransportManager.enableSecureTransport(enabled);
         }
 
@@ -844,10 +925,6 @@
                         + " active=" + active
                         + " deviceAddress=" + deviceAddress);
             }
-
-            getContext().enforceCallingOrSelfPermission(
-                    android.Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE,
-                    "[un]registerDevicePresenceListenerService");
             final int userId = getCallingUserId();
             enforceCallerIsSystemOr(userId, packageName);
 
@@ -876,10 +953,17 @@
             // an application sets/unsets the mNotifyOnDeviceNearby flag.
             mAssociationStore.updateAssociation(association);
 
+            int associationId = association.getId();
             // If device is already present, then trigger callback.
-            if (active && mDevicePresenceMonitor.isDevicePresent(association.getId())) {
-                if (DEBUG) Log.d(TAG, "Device is already present. Triggering callback.");
-                onDeviceAppearedInternal(association.getId());
+            if (active && mDevicePresenceMonitor.isDevicePresent(associationId)) {
+                Slog.i(TAG, "Device is already present. Triggering callback.");
+                if (mDevicePresenceMonitor.isBlePresent(associationId)
+                        || mDevicePresenceMonitor.isSimulatePresent(associationId)) {
+                    onDeviceAppearedInternal(associationId);
+                    onDeviceEventInternal(associationId, DEVICE_EVENT_BLE_APPEARED);
+                } else if (mDevicePresenceMonitor.isBtConnected(associationId)) {
+                    onDeviceEventInternal(associationId, DEVICE_EVENT_BT_CONNECTED);
+                }
             }
 
             // If last listener is unregistered, then unbind application.
@@ -890,17 +974,17 @@
         }
 
         @Override
+        @EnforcePermission(ASSOCIATE_COMPANION_DEVICES)
         public void createAssociation(String packageName, String macAddress, int userId,
                 byte[] certificate) {
+            createAssociation_enforcePermission();
+
             if (!getContext().getPackageManager().hasSigningCertificate(
                     packageName, certificate, CERT_INPUT_SHA256)) {
                 Slog.e(TAG, "Given certificate doesn't match the package certificate.");
                 return;
             }
 
-            getContext().enforceCallingOrSelfPermission(
-                    android.Manifest.permission.ASSOCIATE_COMPANION_DEVICES, "createAssociation");
-
             final MacAddress macAddressObj = MacAddress.fromString(macAddress);
             createNewAssociation(userId, packageName, macAddressObj, null, null, false);
         }
@@ -930,6 +1014,29 @@
         }
 
         @Override
+        public void setAssociationTag(int associationId, String tag) {
+            AssociationInfo association = getAssociationWithCallerChecks(associationId);
+            association = AssociationInfo.builder(association).setTag(tag).build();
+            mAssociationStore.updateAssociation(association);
+        }
+
+        @Override
+        public void clearAssociationTag(int associationId) {
+            setAssociationTag(associationId, null);
+        }
+
+        @Override
+        public byte[] getBackupPayload(int userId) {
+            // TODO(b/286124853): back up CDM data
+            return new byte[0];
+        }
+
+        @Override
+        public void applyRestoredPayload(byte[] payload, int userId) {
+            // TODO(b/286124853): restore CDM data
+        }
+
+        @Override
         public void onShellCommand(FileDescriptor in, FileDescriptor out, FileDescriptor err,
                 String[] args, ShellCallback callback, ResultReceiver resultReceiver)
                 throws RemoteException {
@@ -1344,6 +1451,11 @@
         public void onDeviceDisappeared(int associationId) {
             onDeviceDisappearedInternal(associationId);
         }
+
+        @Override
+        public void onDeviceEvent(int associationId, int event) {
+            onDeviceEventInternal(associationId, event);
+        }
     };
 
     private final PackageMonitor mPackageMonitor = new PackageMonitor() {
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceServiceConnector.java b/services/companion/java/com/android/server/companion/CompanionDeviceServiceConnector.java
index 82628a6..928842c 100644
--- a/services/companion/java/com/android/server/companion/CompanionDeviceServiceConnector.java
+++ b/services/companion/java/com/android/server/companion/CompanionDeviceServiceConnector.java
@@ -106,6 +106,11 @@
     void postOnDeviceDisappeared(@NonNull AssociationInfo associationInfo) {
         post(companionService -> companionService.onDeviceDisappeared(associationInfo));
     }
+    void postOnDeviceEvent(@NonNull AssociationInfo associationInfo, int event) {
+        post(companionService -> companionService.onDeviceEvent(associationInfo, event));
+    }
+
+
 
     /**
      * Post "unbind" job, which will run *after* all previously posted jobs complete.
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java b/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java
index 04fbab4..d368b86 100644
--- a/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java
+++ b/services/companion/java/com/android/server/companion/CompanionDeviceShellCommand.java
@@ -16,6 +16,8 @@
 
 package com.android.server.companion;
 
+import static android.companion.CompanionDeviceManager.MESSAGE_REQUEST_CONTEXT_SYNC;
+
 import android.companion.AssociationInfo;
 import android.companion.ContextSyncMessage;
 import android.companion.Telecom;
@@ -30,7 +32,6 @@
 import com.android.server.companion.datatransfer.contextsync.CrossDeviceSyncController;
 import com.android.server.companion.presence.CompanionDevicePresenceMonitor;
 import com.android.server.companion.transport.CompanionTransportManager;
-import com.android.server.companion.transport.Transport;
 
 import java.io.PrintWriter;
 import java.util.List;
@@ -106,15 +107,10 @@
                     mService.loadAssociationsFromDisk();
                     break;
 
-                case "simulate-device-appeared":
+                case "simulate-device-event":
                     associationId = getNextIntArgRequired();
-                    mDevicePresenceMonitor.simulateDeviceAppeared(associationId);
-                    break;
-
-                case "simulate-device-disappeared":
-                    associationId = getNextIntArgRequired();
-                    mDevicePresenceMonitor.simulateDeviceDisappeared(associationId);
-                    break;
+                    int event = getNextIntArgRequired();
+                    mDevicePresenceMonitor.simulateDeviceEvent(associationId, event);
 
                 case "remove-inactive-associations": {
                     // This command should trigger the same "clean-up" job as performed by the
@@ -135,7 +131,7 @@
                 case "send-context-sync-empty-message": {
                     associationId = getNextIntArgRequired();
                     mTransportManager.createEmulatedTransport(associationId)
-                            .processMessage(Transport.MESSAGE_REQUEST_CONTEXT_SYNC,
+                            .processMessage(MESSAGE_REQUEST_CONTEXT_SYNC,
                                     /* sequence= */ 0,
                                     CrossDeviceSyncController.createEmptyMessage());
                     break;
@@ -147,7 +143,7 @@
                     String address = getNextArgRequired();
                     String facilitator = getNextArgRequired();
                     mTransportManager.createEmulatedTransport(associationId)
-                            .processMessage(Transport.MESSAGE_REQUEST_CONTEXT_SYNC,
+                            .processMessage(MESSAGE_REQUEST_CONTEXT_SYNC,
                                     /* sequence= */ 0,
                                     CrossDeviceSyncController.createCallCreateMessage(callId,
                                             address, facilitator));
@@ -159,7 +155,7 @@
                     String callId = getNextArgRequired();
                     int control = getNextIntArgRequired();
                     mTransportManager.createEmulatedTransport(associationId)
-                            .processMessage(Transport.MESSAGE_REQUEST_CONTEXT_SYNC,
+                            .processMessage(MESSAGE_REQUEST_CONTEXT_SYNC,
                                     /* sequence= */ 0,
                                     CrossDeviceSyncController.createCallControlMessage(callId,
                                             control));
@@ -184,7 +180,7 @@
                     }
                     pos.end(telecomToken);
                     mTransportManager.createEmulatedTransport(associationId)
-                            .processMessage(Transport.MESSAGE_REQUEST_CONTEXT_SYNC,
+                            .processMessage(MESSAGE_REQUEST_CONTEXT_SYNC,
                                     /* sequence= */ 0, pos.getBytes());
                     break;
                 }
@@ -246,7 +242,7 @@
                     pos.end(callsToken);
                     pos.end(telecomToken);
                     mTransportManager.createEmulatedTransport(associationId)
-                            .processMessage(Transport.MESSAGE_REQUEST_CONTEXT_SYNC,
+                            .processMessage(MESSAGE_REQUEST_CONTEXT_SYNC,
                                     /* sequence= */ 0, pos.getBytes());
                     break;
                 }
@@ -319,7 +315,9 @@
         pw.println("      information from persistent storage. USE FOR DEBUGGING PURPOSES ONLY.");
         pw.println("      USE FOR DEBUGGING AND/OR TESTING PURPOSES ONLY.");
 
-        pw.println("  simulate-device-appeared ASSOCIATION_ID");
+        pw.println("  simulate-device-event ASSOCIATION_ID EVENT");
+        pw.println("  Simulate the companion device event changes:");
+        pw.println("    Case(0): ");
         pw.println("      Make CDM act as if the given companion device has appeared.");
         pw.println("      I.e. bind the associated companion application's");
         pw.println("      CompanionDeviceService(s) and trigger onDeviceAppeared() callback.");
@@ -327,21 +325,23 @@
         pw.println("      will act as if device disappeared, unless 'simulate-device-disappeared'");
         pw.println("      or 'simulate-device-appeared' is called again before 60 seconds run out"
                 + ".");
-        pw.println("      USE FOR DEBUGGING AND/OR TESTING PURPOSES ONLY.");
-
-        pw.println("  simulate-device-disappeared ASSOCIATION_ID");
+        pw.println("    Case(1): ");
         pw.println("      Make CDM act as if the given companion device has disappeared.");
         pw.println("      I.e. unbind the associated companion application's");
         pw.println("      CompanionDeviceService(s) and trigger onDeviceDisappeared() callback.");
         pw.println("      NOTE: This will only have effect if 'simulate-device-appeared' was");
         pw.println("      invoked for the same device (same ASSOCIATION_ID) no longer than");
         pw.println("      60 seconds ago.");
+        pw.println("    Case(2): ");
+        pw.println("      Make CDM act as if the given companion device is BT connected ");
+        pw.println("    Case(3): ");
+        pw.println("      Make CDM act as if the given companion device is BT disconnected ");
         pw.println("      USE FOR DEBUGGING AND/OR TESTING PURPOSES ONLY.");
 
         pw.println("  remove-inactive-associations");
         pw.println("      Remove self-managed associations that have not been active ");
         pw.println("      for a long time (90 days or as configured via ");
-        pw.println("      \"debug.cdm.cdmservice.cleanup_time_window\" system property). ");
+        pw.println("      \"debug.cdm.cdmservice.removal_time_window\" system property). ");
         pw.println("      USE FOR DEBUGGING AND/OR TESTING PURPOSES ONLY.");
 
         pw.println("  create-emulated-transport <ASSOCIATION_ID>");
diff --git a/services/companion/java/com/android/server/companion/PermissionsUtils.java b/services/companion/java/com/android/server/companion/PermissionsUtils.java
index 0ff3fb7..f4e14df 100644
--- a/services/companion/java/com/android/server/companion/PermissionsUtils.java
+++ b/services/companion/java/com/android/server/companion/PermissionsUtils.java
@@ -163,13 +163,6 @@
         return context.checkCallingPermission(MANAGE_COMPANION_DEVICES) == PERMISSION_GRANTED;
     }
 
-    static void enforceCallerCanManageCompanionDevice(@NonNull Context context,
-            @Nullable String message) {
-        if (getCallingUid() == SYSTEM_UID) return;
-
-        context.enforceCallingPermission(MANAGE_COMPANION_DEVICES, message);
-    }
-
     static void enforceCallerCanManageAssociationsForPackage(@NonNull Context context,
             @UserIdInt int userId, @NonNull String packageName,
             @Nullable String actionDescription) {
diff --git a/services/companion/java/com/android/server/companion/PersistentDataStore.java b/services/companion/java/com/android/server/companion/PersistentDataStore.java
index 54798f4..b4b9379 100644
--- a/services/companion/java/com/android/server/companion/PersistentDataStore.java
+++ b/services/companion/java/com/android/server/companion/PersistentDataStore.java
@@ -171,6 +171,7 @@
     private static final String XML_TAG_ASSOCIATION = "association";
     private static final String XML_TAG_PREVIOUSLY_USED_IDS = "previously-used-ids";
     private static final String XML_TAG_PACKAGE = "package";
+    private static final String XML_TAG_TAG = "tag";
     private static final String XML_TAG_ID = "id";
 
     private static final String XML_ATTR_PERSISTENCE_VERSION = "persistence-version";
@@ -421,6 +422,7 @@
         requireStartOfTag(parser, XML_TAG_ASSOCIATION);
 
         final String appPackage = readStringAttribute(parser, XML_ATTR_PACKAGE);
+        final String tag = readStringAttribute(parser, XML_TAG_TAG);
         final String deviceAddress = readStringAttribute(parser, LEGACY_XML_ATTR_DEVICE);
 
         if (appPackage == null || deviceAddress == null) return;
@@ -429,7 +431,7 @@
         final boolean notify = readBooleanAttribute(parser, XML_ATTR_NOTIFY_DEVICE_NEARBY);
         final long timeApproved = readLongAttribute(parser, XML_ATTR_TIME_APPROVED, 0L);
 
-        out.add(new AssociationInfo(associationId, userId, appPackage,
+        out.add(new AssociationInfo(associationId, userId, appPackage, tag,
                 MacAddress.fromString(deviceAddress), null, profile, null,
                 /* managedByCompanionApp */ false, notify, /* revoked */ false, timeApproved,
                 Long.MAX_VALUE, /* systemDataSyncFlags */ 0));
@@ -456,6 +458,7 @@
         final int associationId = readIntAttribute(parser, XML_ATTR_ID);
         final String profile = readStringAttribute(parser, XML_ATTR_PROFILE);
         final String appPackage = readStringAttribute(parser, XML_ATTR_PACKAGE);
+        final String tag = readStringAttribute(parser, XML_TAG_TAG);
         final MacAddress macAddress = stringToMacAddress(
                 readStringAttribute(parser, XML_ATTR_MAC_ADDRESS));
         final String displayName = readStringAttribute(parser, XML_ATTR_DISPLAY_NAME);
@@ -469,7 +472,7 @@
                 XML_ATTR_SYSTEM_DATA_SYNC_FLAGS, 0);
 
         final AssociationInfo associationInfo = createAssociationInfoNoThrow(associationId, userId,
-                appPackage, macAddress, displayName, profile, selfManaged, notify, revoked,
+                appPackage, tag, macAddress, displayName, profile, selfManaged, notify, revoked,
                 timeApproved, lastTimeConnected, systemDataSyncFlags);
         if (associationInfo != null) {
             out.add(associationInfo);
@@ -518,6 +521,7 @@
         writeIntAttribute(serializer, XML_ATTR_ID, a.getId());
         writeStringAttribute(serializer, XML_ATTR_PROFILE, a.getDeviceProfile());
         writeStringAttribute(serializer, XML_ATTR_PACKAGE, a.getPackageName());
+        writeStringAttribute(serializer, XML_TAG_TAG, a.getTag());
         writeStringAttribute(serializer, XML_ATTR_MAC_ADDRESS, a.getDeviceMacAddressAsString());
         writeStringAttribute(serializer, XML_ATTR_DISPLAY_NAME, a.getDisplayName());
         writeBooleanAttribute(serializer, XML_ATTR_SELF_MANAGED, a.isSelfManaged());
@@ -565,17 +569,17 @@
     }
 
     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, boolean revoked, long timeApproved, long lastTimeConnected,
-            int systemDataSyncFlags) {
+            @UserIdInt int userId, @NonNull String appPackage, @Nullable String tag,
+            @Nullable MacAddress macAddress, @Nullable CharSequence displayName,
+            @Nullable String profile, boolean selfManaged, boolean notify, boolean revoked,
+            long timeApproved, long lastTimeConnected, int systemDataSyncFlags) {
         AssociationInfo associationInfo = null;
         try {
             // We do not persist AssociatedDevice, which means that AssociationInfo retrieved from
             // datastore is not guaranteed to be identical to the one from initial association.
-            associationInfo = new AssociationInfo(associationId, userId, appPackage, macAddress,
-                    displayName, profile, null, selfManaged, notify, revoked,
-                    timeApproved, lastTimeConnected, systemDataSyncFlags);
+            associationInfo = new AssociationInfo(associationId, userId, appPackage, tag,
+                    macAddress, displayName, profile, null, selfManaged, notify,
+                    revoked, timeApproved, lastTimeConnected, systemDataSyncFlags);
         } catch (Exception e) {
             if (DEBUG) Log.w(TAG, "Could not create AssociationInfo", e);
         }
diff --git a/services/companion/java/com/android/server/companion/datatransfer/SystemDataTransferProcessor.java b/services/companion/java/com/android/server/companion/datatransfer/SystemDataTransferProcessor.java
index 800a3d9..13f41ed 100644
--- a/services/companion/java/com/android/server/companion/datatransfer/SystemDataTransferProcessor.java
+++ b/services/companion/java/com/android/server/companion/datatransfer/SystemDataTransferProcessor.java
@@ -19,11 +19,10 @@
 import static android.app.PendingIntent.FLAG_CANCEL_CURRENT;
 import static android.app.PendingIntent.FLAG_IMMUTABLE;
 import static android.app.PendingIntent.FLAG_ONE_SHOT;
-import static android.companion.CompanionDeviceManager.COMPANION_DEVICE_DISCOVERY_PACKAGE_NAME;
+import static android.companion.CompanionDeviceManager.MESSAGE_REQUEST_PERMISSION_RESTORE;
 import static android.content.ComponentName.createRelative;
 
 import static com.android.server.companion.Utils.prepareForIpc;
-import static com.android.server.companion.transport.Transport.MESSAGE_REQUEST_PERMISSION_RESTORE;
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -49,6 +48,7 @@
 import android.permission.PermissionControllerManager;
 import android.util.Slog;
 
+import com.android.internal.R;
 import com.android.server.companion.AssociationStore;
 import com.android.server.companion.CompanionDeviceManagerService;
 import com.android.server.companion.PackageUtils;
@@ -77,9 +77,6 @@
     private static final String EXTRA_COMPANION_DEVICE_NAME = "companion_device_name";
     private static final String EXTRA_SYSTEM_DATA_TRANSFER_RESULT_RECEIVER =
             "system_data_transfer_result_receiver";
-    private static final ComponentName SYSTEM_DATA_TRANSFER_REQUEST_APPROVAL_ACTIVITY =
-            createRelative(COMPANION_DEVICE_DISCOVERY_PACKAGE_NAME,
-                    ".CompanionDeviceDataTransferActivity");
 
     private final Context mContext;
     private final PackageManagerInternal mPackageManager;
@@ -88,6 +85,7 @@
     private final CompanionTransportManager mTransportManager;
     private final PermissionControllerManager mPermissionControllerManager;
     private final ExecutorService mExecutor;
+    private final ComponentName mCompanionDeviceDataTransferActivity;
 
     public SystemDataTransferProcessor(CompanionDeviceManagerService service,
             PackageManagerInternal packageManager,
@@ -113,6 +111,9 @@
         mTransportManager.addListener(MESSAGE_REQUEST_PERMISSION_RESTORE, messageListener);
         mPermissionControllerManager = mContext.getSystemService(PermissionControllerManager.class);
         mExecutor = Executors.newSingleThreadExecutor();
+        mCompanionDeviceDataTransferActivity = createRelative(
+                mContext.getString(R.string.config_companionDeviceManagerPackage),
+                ".CompanionDeviceDataTransferActivity");
     }
 
     /**
@@ -156,7 +157,7 @@
                 prepareForIpc(mOnSystemDataTransferRequestConfirmationReceiver));
 
         final Intent intent = new Intent();
-        intent.setComponent(SYSTEM_DATA_TRANSFER_REQUEST_APPROVAL_ACTIVITY);
+        intent.setComponent(mCompanionDeviceDataTransferActivity);
         intent.putExtras(extras);
 
         // Create a PendingIntent
diff --git a/services/companion/java/com/android/server/companion/datatransfer/contextsync/CrossDeviceSyncController.java b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CrossDeviceSyncController.java
index 9bd5af9..ad1eff8 100644
--- a/services/companion/java/com/android/server/companion/datatransfer/contextsync/CrossDeviceSyncController.java
+++ b/services/companion/java/com/android/server/companion/datatransfer/contextsync/CrossDeviceSyncController.java
@@ -16,7 +16,7 @@
 
 package com.android.server.companion.datatransfer.contextsync;
 
-import static com.android.server.companion.transport.Transport.MESSAGE_REQUEST_CONTEXT_SYNC;
+import static android.companion.CompanionDeviceManager.MESSAGE_REQUEST_CONTEXT_SYNC;
 
 import android.app.admin.DevicePolicyManager;
 import android.companion.AssociationInfo;
diff --git a/services/companion/java/com/android/server/companion/presence/BleCompanionDeviceScanner.java b/services/companion/java/com/android/server/companion/presence/BleCompanionDeviceScanner.java
index 0b2cce0..7e30790 100644
--- a/services/companion/java/com/android/server/companion/presence/BleCompanionDeviceScanner.java
+++ b/services/companion/java/com/android/server/companion/presence/BleCompanionDeviceScanner.java
@@ -56,7 +56,6 @@
 import android.content.IntentFilter;
 import android.os.Handler;
 import android.os.Looper;
-import android.os.Message;
 import android.util.Log;
 import android.util.Slog;
 
@@ -73,20 +72,6 @@
 class BleCompanionDeviceScanner implements AssociationStore.OnChangeListener {
     private static final String TAG = "CDM_BleCompanionDeviceScanner";
 
-    /**
-     * When using {@link ScanSettings#SCAN_MODE_LOW_POWER}, it usually takes from 20 seconds to
-     * 2 minutes for the BLE scanner to find advertisements sent from the same device.
-     * On the other hand, {@link android.bluetooth.BluetoothAdapter.LeScanCallback} will report
-     * {@link ScanSettings#CALLBACK_TYPE_MATCH_LOST MATCH_LOST} 10 sec after it finds the
-     * advertisement for the first time (add reports
-     * {@link ScanSettings#CALLBACK_TYPE_FIRST_MATCH FIRST_MATCH}).
-     * To avoid constantly reporting {@link Callback#onBleCompanionDeviceFound(int) onDeviceFound()}
-     * and {@link Callback#onBleCompanionDeviceLost(int) onDeviceLost()} (while the device is
-     * actually present) to its clients, {@link BleCompanionDeviceScanner}, will add 1-minute delay
-     * after it receives {@link ScanSettings#CALLBACK_TYPE_MATCH_LOST MATCH_LOST}.
-     */
-    private static final int NOTIFY_DEVICE_LOST_DELAY = 2 * 60 * 1000; // 2 Min.
-
     interface Callback {
         void onBleCompanionDeviceFound(int associationId);
 
@@ -95,7 +80,6 @@
 
     private final @NonNull AssociationStore mAssociationStore;
     private final @NonNull Callback mCallback;
-    private final @NonNull MainThreadHandler mMainThreadHandler;
 
     // Non-null after init().
     private @Nullable BluetoothAdapter mBtAdapter;
@@ -108,7 +92,6 @@
             @NonNull AssociationStore associationStore, @NonNull Callback callback) {
         mAssociationStore = associationStore;
         mCallback = callback;
-        mMainThreadHandler = new MainThreadHandler();
     }
 
     @MainThread
@@ -146,7 +129,7 @@
         if (Looper.getMainLooper().isCurrentThread()) {
             restartScan();
         } else {
-            mMainThreadHandler.post(this::restartScan);
+            new Handler(Looper.getMainLooper()).post(this::restartScan);
         }
     }
 
@@ -182,11 +165,10 @@
     }
 
     @MainThread
-    private void startScan() {
+    void startScan() {
         enforceInitialized();
 
         if (DEBUG) Log.i(TAG, "startScan()");
-
         // This method should not be called if scan is already in progress.
         if (mScanning) {
             Slog.w(TAG, "Scan is already in progress.");
@@ -243,7 +225,7 @@
         }
     }
 
-    private void stopScanIfNeeded() {
+    void stopScanIfNeeded() {
         enforceInitialized();
 
         if (DEBUG) Log.i(TAG, "stopScan()");
@@ -343,16 +325,11 @@
 
             switch (callbackType) {
                 case CALLBACK_TYPE_FIRST_MATCH:
-                    if (mMainThreadHandler.hasNotifyDeviceLostMessages(device)) {
-                        mMainThreadHandler.removeNotifyDeviceLostMessages(device);
-                        return;
-                    }
-
                     notifyDeviceFound(device);
                     break;
 
                 case CALLBACK_TYPE_MATCH_LOST:
-                    mMainThreadHandler.sendNotifyDeviceLostDelayedMessage(device);
+                    notifyDeviceLost(device);
                     break;
 
                 default:
@@ -370,36 +347,6 @@
         }
     };
 
-    @SuppressLint("HandlerLeak")
-    private class MainThreadHandler extends Handler {
-        private static final int NOTIFY_DEVICE_LOST = 1;
-
-        MainThreadHandler() {
-            super(Looper.getMainLooper());
-        }
-
-        @Override
-        public void handleMessage(@NonNull Message message) {
-            if  (message.what != NOTIFY_DEVICE_LOST) return;
-
-            final BluetoothDevice device = (BluetoothDevice) message.obj;
-            notifyDeviceLost(device);
-        }
-
-        void sendNotifyDeviceLostDelayedMessage(BluetoothDevice device) {
-            final Message message = obtainMessage(NOTIFY_DEVICE_LOST, device);
-            sendMessageDelayed(message, NOTIFY_DEVICE_LOST_DELAY);
-        }
-
-        boolean hasNotifyDeviceLostMessages(BluetoothDevice device) {
-            return hasEqualMessages(NOTIFY_DEVICE_LOST, device);
-        }
-
-        void removeNotifyDeviceLostMessages(BluetoothDevice device) {
-            removeEqualMessages(NOTIFY_DEVICE_LOST, device);
-        }
-    }
-
     private static String nameForBtState(int state) {
         return nameForState(state) + "(" + state + ")";
     }
diff --git a/services/companion/java/com/android/server/companion/presence/BluetoothCompanionDeviceConnectionListener.java b/services/companion/java/com/android/server/companion/presence/BluetoothCompanionDeviceConnectionListener.java
index a5410e4..6ba85bd 100644
--- a/services/companion/java/com/android/server/companion/presence/BluetoothCompanionDeviceConnectionListener.java
+++ b/services/companion/java/com/android/server/companion/presence/BluetoothCompanionDeviceConnectionListener.java
@@ -169,6 +169,7 @@
         }
 
         for (AssociationInfo association : associations) {
+            if (!association.isNotifyOnDeviceNearby()) continue;
             final int id = association.getId();
             if (connected) {
                 mCallback.onBluetoothCompanionDeviceConnected(id);
diff --git a/services/companion/java/com/android/server/companion/presence/CompanionDevicePresenceMonitor.java b/services/companion/java/com/android/server/companion/presence/CompanionDevicePresenceMonitor.java
index f6e9415..8fea078 100644
--- a/services/companion/java/com/android/server/companion/presence/CompanionDevicePresenceMonitor.java
+++ b/services/companion/java/com/android/server/companion/presence/CompanionDevicePresenceMonitor.java
@@ -16,6 +16,12 @@
 
 package com.android.server.companion.presence;
 
+import static android.companion.CompanionDeviceService.DEVICE_EVENT_BLE_APPEARED;
+import static android.companion.CompanionDeviceService.DEVICE_EVENT_BLE_DISAPPEARED;
+import static android.companion.CompanionDeviceService.DEVICE_EVENT_BT_CONNECTED;
+import static android.companion.CompanionDeviceService.DEVICE_EVENT_BT_DISCONNECTED;
+import static android.companion.CompanionDeviceService.DEVICE_EVENT_SELF_MANAGED_APPEARED;
+import static android.companion.CompanionDeviceService.DEVICE_EVENT_SELF_MANAGED_DISAPPEARED;
 import static android.os.Process.ROOT_UID;
 import static android.os.Process.SHELL_UID;
 
@@ -32,6 +38,7 @@
 import android.os.Message;
 import android.os.UserManager;
 import android.util.Log;
+import android.util.Slog;
 import android.util.SparseArray;
 
 import com.android.server.companion.AssociationStore;
@@ -54,6 +61,7 @@
  * <li> {@link #isDevicePresent(int)}
  * <li> {@link Callback#onDeviceAppeared(int) Callback.onDeviceAppeared(int)}
  * <li> {@link Callback#onDeviceDisappeared(int) Callback.onDeviceDisappeared(int)}
+ * <li> {@link Callback#onDeviceStateChanged(int, int)}}
  * </ul>
  */
 @SuppressLint("LongLogTag")
@@ -69,6 +77,9 @@
 
         /** Invoked when a companion device no longer seen nearby or disconnects. */
         void onDeviceDisappeared(int associationId);
+
+        /**Invoked when device has corresponding event changes. */
+        void onDeviceEvent(int associationId, int state);
     }
 
     private final @NonNull AssociationStore mAssociationStore;
@@ -127,6 +138,28 @@
     }
 
     /**
+     * @return whether the current device is BT connected and had already reported to the app.
+     */
+
+    public boolean isBtConnected(int associationId) {
+        return mConnectedBtDevices.contains(associationId);
+    }
+
+    /**
+     * @return whether the current device in BLE range and had already reported to the app.
+     */
+    public boolean isBlePresent(int associationId) {
+        return mNearbyBleDevices.contains(associationId);
+    }
+
+    /**
+     * @return whether the current device had been already reported by the simulator.
+     */
+    public boolean isSimulatePresent(int associationId) {
+        return mSimulated.contains(associationId);
+    }
+
+    /**
      * Marks a "self-managed" device as connected.
      *
      * <p>
@@ -136,7 +169,8 @@
      * {@link android.companion.CompanionDeviceManager#notifyDeviceAppeared(int) notifyDeviceAppeared()}
      */
     public void onSelfManagedDeviceConnected(int associationId) {
-        onDevicePresent(mReportedSelfManagedDevices, associationId, "application-reported");
+        onDeviceEvent(mReportedSelfManagedDevices,
+                associationId, DEVICE_EVENT_SELF_MANAGED_APPEARED);
     }
 
     /**
@@ -149,45 +183,53 @@
      * {@link android.companion.CompanionDeviceManager#notifyDeviceDisappeared(int) notifyDeviceDisappeared()}
      */
     public void onSelfManagedDeviceDisconnected(int associationId) {
-        onDeviceGone(mReportedSelfManagedDevices, associationId, "application-reported");
+        onDeviceEvent(mReportedSelfManagedDevices,
+                associationId, DEVICE_EVENT_SELF_MANAGED_DISAPPEARED);
     }
 
     /**
      * Marks a "self-managed" device as disconnected when binderDied.
      */
     public void onSelfManagedDeviceReporterBinderDied(int associationId) {
-        onDeviceGone(mReportedSelfManagedDevices, associationId, "application-reported");
+        onDeviceEvent(mReportedSelfManagedDevices,
+                associationId, DEVICE_EVENT_SELF_MANAGED_DISAPPEARED);
     }
 
     @Override
     public void onBluetoothCompanionDeviceConnected(int associationId) {
-        onDevicePresent(mConnectedBtDevices, associationId, /* sourceLoggingTag */ "bt");
+        Slog.i(TAG, "onBluetoothCompanionDeviceConnected: "
+                + "associationId( " + associationId + " )");
+        onDeviceEvent(mConnectedBtDevices, associationId, DEVICE_EVENT_BT_CONNECTED);
+        // Stop scanning for BLE devices when this device is connected
+        // and there are no other devices to connect to.
+        if (canStopBleScan()) {
+            mBleScanner.stopScanIfNeeded();
+        }
     }
 
     @Override
     public void onBluetoothCompanionDeviceDisconnected(int associationId) {
-        // If disconnected device is also a BLE device, skip the 2-minute timer and mark it as gone.
-        boolean isConnectableBleDevice = mNearbyBleDevices.remove(associationId);
-        if (DEBUG && isConnectableBleDevice) {
-            Log.d(TAG, "Bluetooth device disconnect was detected."
-                    + " Pre-emptively marking the BLE device as lost.");
-        }
-        onDeviceGone(mConnectedBtDevices, associationId, /* sourceLoggingTag */ "bt");
+        Slog.i(TAG, "onBluetoothCompanionDeviceDisconnected "
+                + "associationId( " + associationId + " )");
+        // Start BLE scanning when the device is disconnected.
+        mBleScanner.startScan();
+
+        onDeviceEvent(mConnectedBtDevices, associationId, DEVICE_EVENT_BT_DISCONNECTED);
     }
 
     @Override
     public void onBleCompanionDeviceFound(int associationId) {
-        onDevicePresent(mNearbyBleDevices, associationId, /* sourceLoggingTag */ "ble");
+        onDeviceEvent(mNearbyBleDevices, associationId, DEVICE_EVENT_BLE_APPEARED);
     }
 
     @Override
     public void onBleCompanionDeviceLost(int associationId) {
-        onDeviceGone(mNearbyBleDevices, associationId, /* sourceLoggingTag */ "ble");
+        onDeviceEvent(mNearbyBleDevices, associationId, DEVICE_EVENT_BLE_DISAPPEARED);
     }
 
     /** FOR DEBUGGING AND/OR TESTING PURPOSES ONLY. */
     @TestApi
-    public void simulateDeviceAppeared(int associationId) {
+    public void simulateDeviceEvent(int associationId, int state) {
         // IMPORTANT: this API should only be invoked via the
         // 'companiondevice simulate-device-appeared' Shell command, so the only uid-s allowed to
         // make this call are SHELL and ROOT.
@@ -196,25 +238,32 @@
         // Make sure the association exists.
         enforceAssociationExists(associationId);
 
-        onDevicePresent(mSimulated, associationId, /* sourceLoggingTag */ "simulated");
+        switch (state) {
+            case DEVICE_EVENT_BLE_APPEARED:
+                simulateDeviceAppeared(associationId, state);
+                break;
+            case DEVICE_EVENT_BT_CONNECTED:
+                onBluetoothCompanionDeviceConnected(associationId);
+                break;
+            case DEVICE_EVENT_BLE_DISAPPEARED:
+                simulateDeviceDisappeared(associationId, state);
+                break;
+            case DEVICE_EVENT_BT_DISCONNECTED:
+                onBluetoothCompanionDeviceDisconnected(associationId);
+                break;
+            default:
+                throw new IllegalArgumentException("State: " + state + "is not supported");
+        }
+    }
 
+    private void simulateDeviceAppeared(int associationId, int state) {
+        onDeviceEvent(mSimulated, associationId, state);
         mSchedulerHelper.scheduleOnDeviceGoneCallForSimulatedDevicePresence(associationId);
     }
 
-    /** FOR DEBUGGING AND/OR TESTING PURPOSES ONLY. */
-    @TestApi
-    public void simulateDeviceDisappeared(int associationId) {
-        // IMPORTANT: this API should only be invoked via the
-        // 'companiondevice simulate-device-appeared' Shell command, so the only uid-s allowed to
-        // make this call are SHELL and ROOT.
-        // No other caller (including SYSTEM!) should be allowed.
-        enforceCallerShellOrRoot();
-        // Make sure the association exists.
-        enforceAssociationExists(associationId);
-
+    private void simulateDeviceDisappeared(int associationId, int state) {
         mSchedulerHelper.unscheduleOnDeviceGoneCallForSimulatedDevicePresence(associationId);
-
-        onDeviceGone(mSimulated, associationId, /* sourceLoggingTag */ "simulated");
+        onDeviceEvent(mSimulated, associationId, state);
     }
 
     private void enforceAssociationExists(int associationId) {
@@ -224,58 +273,46 @@
         }
     }
 
-    private void onDevicePresent(@NonNull Set<Integer> presentDevicesForSource,
-            int newDeviceAssociationId, @NonNull String sourceLoggingTag) {
-        if (DEBUG) {
-            Log.i(TAG, "onDevice_Present() id=" + newDeviceAssociationId
-                    + ", source=" + sourceLoggingTag);
-            Log.d(TAG, "  > association="
-                    + mAssociationStore.getAssociationById(newDeviceAssociationId));
+    private void onDeviceEvent(@NonNull Set<Integer> presentDevicesForSource,
+            int associationId, int event) {
+        Slog.i(TAG, "onDeviceEvent() id=" + associationId + ", state=" + event);
+
+        switch (event) {
+            case DEVICE_EVENT_BLE_APPEARED:
+            case DEVICE_EVENT_BT_CONNECTED:
+            case DEVICE_EVENT_SELF_MANAGED_APPEARED:
+                final boolean added = presentDevicesForSource.add(associationId);
+
+                if (!added) {
+                    Slog.w(TAG, "Association with id "
+                            + associationId + " is ALREADY reported as "
+                            + "present by this source, event=" + event);
+                }
+
+                mCallback.onDeviceAppeared(associationId);
+
+                break;
+            case DEVICE_EVENT_BLE_DISAPPEARED:
+            case DEVICE_EVENT_BT_DISCONNECTED:
+            case DEVICE_EVENT_SELF_MANAGED_DISAPPEARED:
+                final boolean removed = presentDevicesForSource.remove(associationId);
+
+                if (!removed) {
+                    Slog.w(TAG, "Association with id " + associationId + " was NOT reported "
+                            + "as present by this source, event= " + event);
+
+                    return;
+                }
+
+                mCallback.onDeviceDisappeared(associationId);
+
+                break;
+            default:
+                Slog.e(TAG, "Event: " + event + " is not supported");
+                return;
         }
 
-        final boolean alreadyPresent = isDevicePresent(newDeviceAssociationId);
-        if (alreadyPresent) {
-            Log.i(TAG, "Device" + "id (" + newDeviceAssociationId + ") already present.");
-        }
-
-        final boolean added = presentDevicesForSource.add(newDeviceAssociationId);
-        if (!added) {
-            Log.w(TAG, "Association with id "
-                    + newDeviceAssociationId + " is ALREADY reported as "
-                    + "present by this source (" + sourceLoggingTag + ")");
-        }
-
-        if (alreadyPresent) return;
-
-        mCallback.onDeviceAppeared(newDeviceAssociationId);
-    }
-
-    private void onDeviceGone(@NonNull Set<Integer> presentDevicesForSource,
-            int goneDeviceAssociationId, @NonNull String sourceLoggingTag) {
-        if (DEBUG) {
-            Log.i(TAG, "onDevice_Gone() id=" + goneDeviceAssociationId
-                    + ", source=" + sourceLoggingTag);
-            Log.d(TAG, "  > association="
-                    + mAssociationStore.getAssociationById(goneDeviceAssociationId));
-        }
-
-        final boolean removed = presentDevicesForSource.remove(goneDeviceAssociationId);
-        if (!removed) {
-            Log.w(TAG, "Association with id " + goneDeviceAssociationId + " was NOT reported "
-                    + "as present by this source (" + sourceLoggingTag + ")");
-
-            return;
-        }
-
-        final boolean stillPresent = isDevicePresent(goneDeviceAssociationId);
-        if (stillPresent) {
-            if (DEBUG) {
-                Log.i(TAG, "  Device id (" + goneDeviceAssociationId + ") is still present.");
-            }
-            return;
-        }
-
-        mCallback.onDeviceDisappeared(goneDeviceAssociationId);
+        mCallback.onDeviceEvent(associationId, event);
     }
 
     /**
@@ -316,6 +353,19 @@
         throw new SecurityException("Caller is neither Shell nor Root");
     }
 
+    private boolean canStopBleScan() {
+        for (AssociationInfo ai : mAssociationStore.getAssociations()) {
+            int id = ai.getId();
+            // The BLE scan cannot be stopped if there's a device is not yet connected.
+            if (ai.isNotifyOnDeviceNearby() && !isBtConnected(id)) {
+                Slog.i(TAG, "The BLE scan cannot be stopped, "
+                        + "device( " + id + " ) is not yet connected");
+                return false;
+            }
+        }
+        return true;
+    }
+
     /**
      * Dumps system information about devices that are marked as "present".
      */
@@ -386,7 +436,7 @@
         public void handleMessage(@NonNull Message msg) {
             final int associationId = msg.what;
             if (mSimulated.contains(associationId)) {
-                onDeviceGone(mSimulated, associationId, /* sourceLoggingTag */ "simulated");
+                onDeviceEvent(mSimulated, associationId, DEVICE_EVENT_BLE_DISAPPEARED);
             }
         }
     }
diff --git a/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java b/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java
index a49021a..f648f09 100644
--- a/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java
+++ b/services/companion/java/com/android/server/companion/transport/CompanionTransportManager.java
@@ -16,9 +16,7 @@
 
 package com.android.server.companion.transport;
 
-import static android.Manifest.permission.DELIVER_COMPANION_MESSAGES;
-
-import static com.android.server.companion.transport.Transport.MESSAGE_REQUEST_PERMISSION_RESTORE;
+import static android.companion.CompanionDeviceManager.MESSAGE_REQUEST_PERMISSION_RESTORE;
 
 import android.annotation.NonNull;
 import android.annotation.SuppressLint;
@@ -140,7 +138,6 @@
 
     public void attachSystemDataTransport(String packageName, int userId, int associationId,
             ParcelFileDescriptor fd) {
-        mContext.enforceCallingOrSelfPermission(DELIVER_COMPANION_MESSAGES, TAG);
         synchronized (mTransports) {
             if (mTransports.contains(associationId)) {
                 detachSystemDataTransport(packageName, userId, associationId);
@@ -154,7 +151,6 @@
     }
 
     public void detachSystemDataTransport(String packageName, int userId, int associationId) {
-        mContext.enforceCallingOrSelfPermission(DELIVER_COMPANION_MESSAGES, TAG);
         synchronized (mTransports) {
             final Transport transport = mTransports.get(associationId);
             if (transport != null) {
diff --git a/services/companion/java/com/android/server/companion/transport/Transport.java b/services/companion/java/com/android/server/companion/transport/Transport.java
index 5af3b98..32d4061 100644
--- a/services/companion/java/com/android/server/companion/transport/Transport.java
+++ b/services/companion/java/com/android/server/companion/transport/Transport.java
@@ -16,6 +16,11 @@
 
 package com.android.server.companion.transport;
 
+import static android.companion.CompanionDeviceManager.MESSAGE_REQUEST_CONTEXT_SYNC;
+import static android.companion.CompanionDeviceManager.MESSAGE_REQUEST_PERMISSION_RESTORE;
+import static android.companion.CompanionDeviceManager.MESSAGE_REQUEST_PING;
+import static android.companion.CompanionDeviceManager.MESSAGE_REQUEST_REMOTE_AUTHENTICATION;
+
 import android.annotation.NonNull;
 import android.companion.IOnMessageReceivedListener;
 import android.content.Context;
@@ -45,10 +50,6 @@
     protected static final String TAG = "CDM_CompanionTransport";
     protected static final boolean DEBUG = Build.IS_DEBUGGABLE;
 
-    static final int MESSAGE_REQUEST_PING = 0x63807378; // ?PIN
-    public static final int MESSAGE_REQUEST_CONTEXT_SYNC = 0x63678883; // ?CXS
-    public static final int MESSAGE_REQUEST_PERMISSION_RESTORE = 0x63826983; // ?RES
-
     static final int MESSAGE_RESPONSE_SUCCESS = 0x33838567; // !SUC
     static final int MESSAGE_RESPONSE_FAILURE = 0x33706573; // !FAI
 
@@ -181,7 +182,8 @@
                 sendMessage(MESSAGE_RESPONSE_SUCCESS, sequence, data);
                 break;
             }
-            case MESSAGE_REQUEST_CONTEXT_SYNC: {
+            case MESSAGE_REQUEST_CONTEXT_SYNC:
+            case MESSAGE_REQUEST_REMOTE_AUTHENTICATION: {
                 callback(message, data);
                 sendMessage(MESSAGE_RESPONSE_SUCCESS, sequence, EmptyArray.BYTE);
                 break;
diff --git a/services/companion/java/com/android/server/companion/virtual/SensorController.java b/services/companion/java/com/android/server/companion/virtual/SensorController.java
index fb99bff..a831401 100644
--- a/services/companion/java/com/android/server/companion/virtual/SensorController.java
+++ b/services/companion/java/com/android/server/companion/virtual/SensorController.java
@@ -18,17 +18,20 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.companion.virtual.IVirtualDevice;
 import android.companion.virtual.sensor.IVirtualSensorCallback;
 import android.companion.virtual.sensor.VirtualSensor;
 import android.companion.virtual.sensor.VirtualSensorConfig;
 import android.companion.virtual.sensor.VirtualSensorEvent;
 import android.hardware.SensorDirectChannel;
+import android.os.Binder;
 import android.os.IBinder;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
 import android.os.SharedMemory;
 import android.util.ArrayMap;
 import android.util.Slog;
+import android.util.SparseArray;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
@@ -36,6 +39,9 @@
 import com.android.server.sensors.SensorManagerInternal;
 
 import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -54,46 +60,64 @@
 
     private final Object mLock = new Object();
     private final int mVirtualDeviceId;
+
     @GuardedBy("mLock")
     private final ArrayMap<IBinder, SensorDescriptor> mSensorDescriptors = new ArrayMap<>();
 
+    // This device's sensors, keyed by sensor handle.
+    @GuardedBy("mLock")
+    private SparseArray<VirtualSensor> mVirtualSensors = new SparseArray<>();
+    @GuardedBy("mLock")
+    private List<VirtualSensor> mVirtualSensorList = null;
+
     @NonNull
     private final SensorManagerInternal.RuntimeSensorCallback mRuntimeSensorCallback;
     private final SensorManagerInternal mSensorManagerInternal;
     private final VirtualDeviceManagerInternal mVdmInternal;
 
-    public SensorController(int virtualDeviceId,
-            @Nullable IVirtualSensorCallback virtualSensorCallback) {
+    public SensorController(@NonNull IVirtualDevice virtualDevice, int virtualDeviceId,
+            @Nullable IVirtualSensorCallback virtualSensorCallback,
+            @NonNull List<VirtualSensorConfig> sensors) {
         mVirtualDeviceId = virtualDeviceId;
         mRuntimeSensorCallback = new RuntimeSensorCallbackWrapper(virtualSensorCallback);
         mSensorManagerInternal = LocalServices.getService(SensorManagerInternal.class);
         mVdmInternal = LocalServices.getService(VirtualDeviceManagerInternal.class);
+        createSensors(virtualDevice, sensors);
     }
 
     void close() {
         synchronized (mLock) {
             mSensorDescriptors.values().forEach(
-                    descriptor -> mSensorManagerInternal.removeRuntimeSensor(
-                            descriptor.getHandle()));
+                    descriptor -> mSensorManagerInternal.removeRuntimeSensor(descriptor.mHandle));
             mSensorDescriptors.clear();
+            mVirtualSensors.clear();
+            mVirtualSensorList = null;
         }
     }
 
-    int createSensor(@NonNull IBinder sensorToken, @NonNull VirtualSensorConfig config) {
-        Objects.requireNonNull(sensorToken);
-        Objects.requireNonNull(config);
+    private void createSensors(@NonNull IVirtualDevice virtualDevice,
+            @NonNull List<VirtualSensorConfig> configs) {
+        Objects.requireNonNull(virtualDevice);
+        final long token = Binder.clearCallingIdentity();
         try {
-            return createSensorInternal(sensorToken, config);
+            for (VirtualSensorConfig config : configs) {
+                createSensorInternal(virtualDevice, config);
+            }
         } catch (SensorCreationException e) {
-            throw new RuntimeException(
-                    "Failed to create virtual sensor '" + config.getName() + "'.", e);
+            throw new RuntimeException("Failed to create virtual sensor", e);
+        } finally {
+            Binder.restoreCallingIdentity(token);
         }
     }
 
-    private int createSensorInternal(IBinder sensorToken, VirtualSensorConfig config)
+    private void createSensorInternal(@NonNull IVirtualDevice virtualDevice,
+            @NonNull VirtualSensorConfig config)
             throws SensorCreationException {
+        Objects.requireNonNull(config);
         if (config.getType() <= 0) {
-            throw new SensorCreationException("Received an invalid virtual sensor type.");
+            throw new SensorCreationException(
+                    "Received an invalid virtual sensor type (config name '" + config.getName()
+                            + "').");
         }
         final int handle = mSensorManagerInternal.createRuntimeSensor(mVirtualDeviceId,
                 config.getType(), config.getName(),
@@ -101,15 +125,20 @@
                 config.getResolution(), config.getPower(), config.getMinDelay(),
                 config.getMaxDelay(), config.getFlags(), mRuntimeSensorCallback);
         if (handle <= 0) {
-            throw new SensorCreationException("Received an invalid virtual sensor handle.");
+            throw new SensorCreationException(
+                    "Received an invalid virtual sensor handle '" + config.getName() + "'.");
         }
 
+        SensorDescriptor sensorDescriptor = new SensorDescriptor(
+                handle, config.getType(), config.getName());
+        final IBinder sensorToken =
+                new Binder("android.hardware.sensor.VirtualSensor:" + config.getName());
+        VirtualSensor sensor = new VirtualSensor(handle, config.getType(), config.getName(),
+                virtualDevice, sensorToken);
         synchronized (mLock) {
-            SensorDescriptor sensorDescriptor = new SensorDescriptor(
-                    handle, config.getType(), config.getName());
             mSensorDescriptors.put(sensorToken, sensorDescriptor);
+            mVirtualSensors.put(handle, sensor);
         }
-        return handle;
     }
 
     boolean sendSensorEvent(@NonNull IBinder token, @NonNull VirtualSensorEvent event) {
@@ -126,17 +155,25 @@
         }
     }
 
-    void unregisterSensor(@NonNull IBinder token) {
-        Objects.requireNonNull(token);
+    @Nullable
+    VirtualSensor getSensorByHandle(int handle) {
         synchronized (mLock) {
-            final SensorDescriptor sensorDescriptor = mSensorDescriptors.remove(token);
-            if (sensorDescriptor == null) {
-                throw new IllegalArgumentException("Could not unregister sensor for given token");
-            }
-            mSensorManagerInternal.removeRuntimeSensor(sensorDescriptor.getHandle());
+            return mVirtualSensors.get(handle);
         }
     }
 
+    List<VirtualSensor> getSensorList() {
+        synchronized (mLock) {
+            if (mVirtualSensorList == null) {
+                mVirtualSensorList = new ArrayList<>(mVirtualSensors.size());
+                for (int i = 0; i < mVirtualSensors.size(); ++i) {
+                    mVirtualSensorList.add(mVirtualSensors.valueAt(i));
+                }
+                mVirtualSensorList = Collections.unmodifiableList(mVirtualSensorList);
+            }
+            return mVirtualSensorList;
+        }
+    }
 
     void dump(@NonNull PrintWriter fout) {
         fout.println("    SensorController: ");
diff --git a/services/companion/java/com/android/server/companion/virtual/TEST_MAPPING b/services/companion/java/com/android/server/companion/virtual/TEST_MAPPING
index 279981b..253ef43 100644
--- a/services/companion/java/com/android/server/companion/virtual/TEST_MAPPING
+++ b/services/companion/java/com/android/server/companion/virtual/TEST_MAPPING
@@ -9,16 +9,51 @@
       ]
     },
     {
-      "name": "CtsVirtualDevicesTestCases",
+      "name": "CtsVirtualDevicesAudioTestCases",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
+    },
+    {
+      "name": "CtsVirtualDevicesSensorTestCases",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
+    },
+    {
+      "name": "CtsVirtualDevicesAppLaunchTestCases",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
+    },
+    {
+      "name": "CtsHardwareTestCases",
       "options": [
         {
           "include-filter": "android.hardware.input.cts.tests"
         },
         {
-          "exclude-annotation": "androidx.test.filters.FlakyTest"
+          "exclude-annotation": "android.platform.test.annotations.FlakyTest"
         }
       ],
       "file_patterns": ["Virtual[^/]*\\.java"]
+    },
+    {
+      "name": "CtsAccessibilityServiceTestCases",
+      "options": [
+        {
+          "include-filter": "android.accessibilityservice.cts.AccessibilityDisplayProxyTest"
+        },
+        {
+          "exclude-annotation": "android.support.test.filters.FlakyTest"
+        }
+      ]
     }
   ]
 }
diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java
index cf7eb51..ee6c28e 100644
--- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java
+++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceImpl.java
@@ -42,13 +42,13 @@
 import android.companion.virtual.audio.IAudioConfigChangedCallback;
 import android.companion.virtual.audio.IAudioRoutingCallback;
 import android.companion.virtual.sensor.VirtualSensor;
-import android.companion.virtual.sensor.VirtualSensorConfig;
 import android.companion.virtual.sensor.VirtualSensorEvent;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
 import android.graphics.PointF;
 import android.hardware.display.DisplayManager;
 import android.hardware.display.DisplayManagerGlobal;
@@ -93,7 +93,6 @@
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -107,13 +106,13 @@
     private static final String TAG = "VirtualDeviceImpl";
 
     private static final int DEFAULT_VIRTUAL_DISPLAY_FLAGS =
-            DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC
-                    | DisplayManager.VIRTUAL_DISPLAY_FLAG_ROTATES_WITH_CONTENT
-                    | DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY
+            DisplayManager.VIRTUAL_DISPLAY_FLAG_TOUCH_FEEDBACK_DISABLED
                     | DisplayManager.VIRTUAL_DISPLAY_FLAG_DESTROY_CONTENT_ON_REMOVAL
                     | DisplayManager.VIRTUAL_DISPLAY_FLAG_SUPPORTS_TOUCH
                     | DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_FOCUS;
 
+    private static final String PERSISTENT_ID_PREFIX_CDM_ASSOCIATION = "companion:";
+
     /**
      * Timeout until {@link #launchPendingIntent} stops waiting for an activity to be launched.
      */
@@ -127,6 +126,7 @@
     private final PendingTrampolineCallback mPendingTrampolineCallback;
     private final int mOwnerUid;
     private int mDeviceId;
+    private @Nullable String mPersistentDeviceId;
     // Thou shall not hold the mVirtualDeviceLock over the mInputController calls.
     // Holding the lock can lead to lock inversion with GlobalWindowManagerLock.
     // 1. After display is created the window manager calls into VDM during construction
@@ -156,11 +156,6 @@
     @GuardedBy("mVirtualDeviceLock")
     @Nullable
     private LocaleList mLocaleList = null;
-    // This device's sensors, keyed by sensor handle.
-    @GuardedBy("mVirtualDeviceLock")
-    private SparseArray<VirtualSensor> mVirtualSensors = new SparseArray<>();
-    @GuardedBy("mVirtualDeviceLock")
-    private List<VirtualSensor> mVirtualSensorList = null;
 
     private ActivityListener createListenerAdapter() {
         return new ActivityListener() {
@@ -217,7 +212,6 @@
                 ownerUid,
                 deviceId,
                 /* inputController= */ null,
-                /* sensorController= */ null,
                 cameraAccessController,
                 pendingTrampolineCallback,
                 activityListener,
@@ -236,7 +230,6 @@
             int ownerUid,
             int deviceId,
             InputController inputController,
-            SensorController sensorController,
             CameraAccessController cameraAccessController,
             PendingTrampolineCallback pendingTrampolineCallback,
             IVirtualDeviceActivityListener activityListener,
@@ -248,6 +241,7 @@
         UserHandle ownerUserHandle = UserHandle.getUserHandleForUid(ownerUid);
         mContext = context.createContextAsUser(ownerUserHandle, 0);
         mAssociationInfo = associationInfo;
+        mPersistentDeviceId = PERSISTENT_ID_PREFIX_CDM_ASSOCIATION + associationInfo.getId();
         mService = service;
         mPendingTrampolineCallback = pendingTrampolineCallback;
         mActivityListener = activityListener;
@@ -265,15 +259,8 @@
         } else {
             mInputController = inputController;
         }
-        if (sensorController == null) {
-            mSensorController = new SensorController(mDeviceId, mParams.getVirtualSensorCallback());
-        } else {
-            mSensorController = sensorController;
-        }
-        final List<VirtualSensorConfig> virtualSensorConfigs = mParams.getVirtualSensorConfigs();
-        for (int i = 0; i < virtualSensorConfigs.size(); ++i) {
-            createVirtualSensor(virtualSensorConfigs.get(i));
-        }
+        mSensorController = new SensorController(this, mDeviceId,
+                mParams.getVirtualSensorCallback(), mParams.getVirtualSensorConfigs());
         mCameraAccessController = cameraAccessController;
         mCameraAccessController.startObservingIfNeeded();
         try {
@@ -283,6 +270,11 @@
         }
     }
 
+    @VisibleForTesting
+    SensorController getSensorControllerForTest() {
+        return mSensorController;
+    }
+
     /**
      * Returns the flags that should be added to any virtual displays created on this virtual
      * device.
@@ -339,6 +331,12 @@
         return mDeviceId;
     }
 
+    /** Returns the unique device ID of this device. */
+    @Override // Binder call
+    public @Nullable String getPersistentDeviceId() {
+        return mPersistentDeviceId;
+    }
+
     @Override // Binder call
     public int getAssociationId() {
         return mAssociationInfo.getId();
@@ -425,8 +423,6 @@
                     virtualDisplaysToBeReleased[i] = mVirtualDisplays.valueAt(i);
                 }
                 mVirtualDisplays.clear();
-                mVirtualSensorList = null;
-                mVirtualSensors.clear();
             }
             // Destroy the display outside locked section.
             for (VirtualDisplayWrapper virtualDisplayWrapper : virtualDisplaysToBeReleased) {
@@ -504,13 +500,7 @@
     public void createVirtualDpad(VirtualDpadConfig config, @NonNull IBinder deviceToken) {
         super.createVirtualDpad_enforcePermission();
         Objects.requireNonNull(config);
-        synchronized (mVirtualDeviceLock) {
-            if (!mVirtualDisplays.contains(config.getAssociatedDisplayId())) {
-                throw new SecurityException(
-                        "Cannot create a virtual dpad for a display not associated with "
-                                + "this virtual device");
-            }
-        }
+        checkVirtualInputDeviceDisplayIdAssociation(config.getAssociatedDisplayId());
         final long ident = Binder.clearCallingIdentity();
         try {
             mInputController.createDpad(config.getInputDeviceName(), config.getVendorId(),
@@ -525,12 +515,8 @@
     public void createVirtualKeyboard(VirtualKeyboardConfig config, @NonNull IBinder deviceToken) {
         super.createVirtualKeyboard_enforcePermission();
         Objects.requireNonNull(config);
+        checkVirtualInputDeviceDisplayIdAssociation(config.getAssociatedDisplayId());
         synchronized (mVirtualDeviceLock) {
-            if (!mVirtualDisplays.contains(config.getAssociatedDisplayId())) {
-                throw new SecurityException(
-                        "Cannot create a virtual keyboard for a display not associated with "
-                                + "this virtual device");
-            }
             mLocaleList = LocaleList.forLanguageTags(config.getLanguageTag());
         }
         final long ident = Binder.clearCallingIdentity();
@@ -548,13 +534,7 @@
     public void createVirtualMouse(VirtualMouseConfig config, @NonNull IBinder deviceToken) {
         super.createVirtualMouse_enforcePermission();
         Objects.requireNonNull(config);
-        synchronized (mVirtualDeviceLock) {
-            if (!mVirtualDisplays.contains(config.getAssociatedDisplayId())) {
-                throw new SecurityException(
-                        "Cannot create a virtual mouse for a display not associated with this "
-                                + "virtual device");
-            }
-        }
+        checkVirtualInputDeviceDisplayIdAssociation(config.getAssociatedDisplayId());
         final long ident = Binder.clearCallingIdentity();
         try {
             mInputController.createMouse(config.getInputDeviceName(), config.getVendorId(),
@@ -570,13 +550,7 @@
             @NonNull IBinder deviceToken) {
         super.createVirtualTouchscreen_enforcePermission();
         Objects.requireNonNull(config);
-        synchronized (mVirtualDeviceLock) {
-            if (!mVirtualDisplays.contains(config.getAssociatedDisplayId())) {
-                throw new SecurityException(
-                        "Cannot create a virtual touchscreen for a display not associated with "
-                                + "this virtual device");
-            }
-        }
+        checkVirtualInputDeviceDisplayIdAssociation(config.getAssociatedDisplayId());
         int screenHeight = config.getHeight();
         int screenWidth = config.getWidth();
         if (screenHeight <= 0 || screenWidth <= 0) {
@@ -601,13 +575,7 @@
             @NonNull IBinder deviceToken) {
         super.createVirtualNavigationTouchpad_enforcePermission();
         Objects.requireNonNull(config);
-        synchronized (mVirtualDeviceLock) {
-            if (!mVirtualDisplays.contains(config.getAssociatedDisplayId())) {
-                throw new SecurityException(
-                        "Cannot create a virtual navigation touchpad for a display not associated "
-                                + "with this virtual device");
-            }
-        }
+        checkVirtualInputDeviceDisplayIdAssociation(config.getAssociatedDisplayId());
         int touchpadHeight = config.getHeight();
         int touchpadWidth = config.getWidth();
         if (touchpadHeight <= 0 || touchpadWidth <= 0) {
@@ -750,43 +718,17 @@
         }
     }
 
-    private void createVirtualSensor(@NonNull VirtualSensorConfig config) {
-        final IBinder sensorToken =
-                new Binder("android.hardware.sensor.VirtualSensor:" + config.getName());
-        final long ident = Binder.clearCallingIdentity();
-        try {
-            int handle = mSensorController.createSensor(sensorToken, config);
-            VirtualSensor sensor = new VirtualSensor(handle, config.getType(), config.getName(),
-                    this, sensorToken);
-            synchronized (mVirtualDeviceLock) {
-                mVirtualSensors.put(handle, sensor);
-            }
-        } finally {
-            Binder.restoreCallingIdentity(ident);
-        }
-    }
-
     @Override // Binder call
     @EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE)
     @Nullable
     public List<VirtualSensor> getVirtualSensorList() {
         super.getVirtualSensorList_enforcePermission();
-        synchronized (mVirtualDeviceLock) {
-            if (mVirtualSensorList == null) {
-                mVirtualSensorList = new ArrayList<>();
-                for (int i = 0; i < mVirtualSensors.size(); ++i) {
-                    mVirtualSensorList.add(mVirtualSensors.valueAt(i));
-                }
-                mVirtualSensorList = Collections.unmodifiableList(mVirtualSensorList);
-            }
-            return mVirtualSensorList;
-        }
+        return mSensorController.getSensorList();
     }
 
+    @Nullable
     VirtualSensor getVirtualSensorByHandle(int handle) {
-        synchronized (mVirtualDeviceLock) {
-            return mVirtualSensors.get(handle);
-        }
+        return mSensorController.getSensorByHandle(handle);
     }
 
     @Override // Binder call
@@ -996,6 +938,21 @@
         }
     }
 
+    private void checkVirtualInputDeviceDisplayIdAssociation(int displayId) {
+        if (mContext.checkCallingPermission(android.Manifest.permission.INJECT_EVENTS)
+                    == PackageManager.PERMISSION_GRANTED) {
+            // The INJECT_EVENTS permission allows for injecting input to any window / display.
+            return;
+        }
+        synchronized (mVirtualDeviceLock) {
+            if (!mVirtualDisplays.contains(displayId)) {
+                throw new SecurityException(
+                        "Cannot create a virtual input device for display " + displayId
+                                + " which not associated with this virtual device");
+            }
+        }
+    }
+
     /**
      * Release resources tied to virtual display owned by this VirtualDevice instance.
      *
diff --git a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
index e9b9980..77508a8 100644
--- a/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/virtual/VirtualDeviceManagerService.java
@@ -310,6 +310,7 @@
                     }
                 };
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CREATE_VIRTUAL_DEVICE)
         @Override // Binder call
         public IVirtualDevice createVirtualDevice(
                 IBinder token,
@@ -318,9 +319,7 @@
                 @NonNull VirtualDeviceParams params,
                 @NonNull IVirtualDeviceActivityListener activityListener,
                 @NonNull IVirtualDeviceSoundEffectListener soundEffectListener) {
-            getContext().enforceCallingOrSelfPermission(
-                    android.Manifest.permission.CREATE_VIRTUAL_DEVICE,
-                    "createVirtualDevice");
+            createVirtualDevice_enforcePermission();
             final int callingUid = getCallingUid();
             if (!PermissionUtils.validateCallingPackageName(getContext(), packageName)) {
                 throw new SecurityException(
@@ -397,7 +396,8 @@
                 for (int i = 0; i < mVirtualDevices.size(); i++) {
                     final VirtualDeviceImpl device = mVirtualDevices.valueAt(i);
                     virtualDevices.add(
-                            new VirtualDevice(device.getDeviceId(), device.getDeviceName()));
+                            new VirtualDevice(device.getDeviceId(), device.getPersistentDeviceId(),
+                                    device.getDeviceName()));
                 }
             }
             return virtualDevices;
@@ -687,6 +687,15 @@
         }
 
         @Override
+        public @Nullable String getPersistentIdForDevice(int deviceId) {
+            VirtualDeviceImpl virtualDevice;
+            synchronized (mVirtualDeviceManagerLock) {
+                virtualDevice = mVirtualDevices.get(deviceId);
+            }
+            return virtualDevice == null ? null : virtualDevice.getPersistentDeviceId();
+        }
+
+        @Override
         public void registerVirtualDisplayListener(
                 @NonNull VirtualDisplayListener listener) {
             synchronized (mVirtualDeviceManagerLock) {
diff --git a/services/core/Android.bp b/services/core/Android.bp
index 4e412bb..9f263c8 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -74,8 +74,8 @@
         "{ ! (diff $(out) $(location :services.core.protolog.json) | grep -q '^<') || " +
         "{ echo -e '\\n\\n################################################################\\n#\\n" +
         "#  ERROR: ProtoLog viewer config is stale.  To update it, run:\\n#\\n" +
-        "#  cp $(location :generate-protolog.json) " +
-        "$(location :services.core.protolog.json)\\n#\\n" +
+        "#  cp $${ANDROID_BUILD_TOP}/$(location :generate-protolog.json) " +
+        "$${ANDROID_BUILD_TOP}/$(location :services.core.protolog.json)\\n#\\n" +
         "################################################################\\n\\n' >&2 && false; } }",
     out: ["services.core.protolog.json"],
 }
@@ -186,6 +186,8 @@
         "com.android.sysprop.watchdog",
         "ImmutabilityAnnotation",
         "securebox",
+        "apache-commons-math",
+        "power_optimization_flags_lib",
     ],
     javac_shard_size: 50,
     javacflags: [
@@ -202,9 +204,9 @@
     srcs: [":services.core.unboosted"],
     tools: ["lockedregioncodeinjection"],
     cmd: "$(location lockedregioncodeinjection) " +
-        "  --targets \"Lcom/android/server/am/ActivityManagerService;,Lcom/android/server/am/ActivityManagerGlobalLock;,Lcom/android/server/wm/WindowManagerGlobalLock;\" " +
-        "  --pre \"com/android/server/am/ActivityManagerService.boostPriorityForLockedSection,com/android/server/am/ActivityManagerService.boostPriorityForProcLockedSection,com/android/server/wm/WindowManagerService.boostPriorityForLockedSection\" " +
-        "  --post \"com/android/server/am/ActivityManagerService.resetPriorityAfterLockedSection,com/android/server/am/ActivityManagerService.resetPriorityAfterProcLockedSection,com/android/server/wm/WindowManagerService.resetPriorityAfterLockedSection\" " +
+        "  --targets \"Lcom/android/server/am/ActivityManagerService;,Lcom/android/server/am/ActivityManagerGlobalLock;,Lcom/android/server/wm/WindowManagerGlobalLock;,Lcom/android/server/pm/PackageManagerTracedLock;\" " +
+        "  --pre \"com/android/server/am/ActivityManagerService.boostPriorityForLockedSection,com/android/server/am/ActivityManagerService.boostPriorityForProcLockedSection,com/android/server/wm/WindowManagerService.boostPriorityForLockedSection,com/android/server/pm/PackageManagerService.boostPriorityForPackageManagerTracedLockedSection\" " +
+        "  --post \"com/android/server/am/ActivityManagerService.resetPriorityAfterLockedSection,com/android/server/am/ActivityManagerService.resetPriorityAfterProcLockedSection,com/android/server/wm/WindowManagerService.resetPriorityAfterLockedSection,com/android/server/pm/PackageManagerService.resetPriorityAfterPackageManagerTracedLockedSection\" " +
         "  -o $(out) " +
         "  -i $(in)",
     out: ["services.core.priorityboosted.jar"],
diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java
index a305ed3..fc51e2e 100644
--- a/services/core/java/android/content/pm/PackageManagerInternal.java
+++ b/services/core/java/android/content/pm/PackageManagerInternal.java
@@ -44,11 +44,13 @@
 import android.util.SparseArray;
 
 import com.android.internal.util.function.pooled.PooledLambda;
+import com.android.permission.persistence.RuntimePermissionsState;
 import com.android.server.pm.Installer.LegacyDexoptDisabledException;
 import com.android.server.pm.KnownPackages;
 import com.android.server.pm.PackageList;
 import com.android.server.pm.PackageSetting;
 import com.android.server.pm.dex.DynamicCodeLogger;
+import com.android.server.pm.permission.LegacyPermissionSettings;
 import com.android.server.pm.pkg.AndroidPackage;
 import com.android.server.pm.pkg.PackageStateInternal;
 import com.android.server.pm.pkg.SharedUserApi;
@@ -1083,6 +1085,23 @@
     public abstract void writePermissionSettings(@NonNull @UserIdInt int[] userIds, boolean async);
 
     /**
+     * Read legacy permission definitions for permissions migration to new permission subsystem.
+     * Note that this api is supposed to be used for permissions migration only.
+     */
+    public abstract LegacyPermissionSettings getLegacyPermissions();
+
+    /**
+     * Read legacy permission states for permissions migration to new permission subsystem.
+     * Note that this api is supposed to be used for permissions state migration only.
+     */
+    public abstract RuntimePermissionsState getLegacyPermissionsState(@UserIdInt int userId);
+
+    /**
+     * @return permissions file version for the given user.
+     */
+    public abstract int getLegacyPermissionsVersion(@UserIdInt int userId);
+
+    /**
      * Returns {@code true} if the caller is the installer of record for the given package.
      * Otherwise, {@code false}.
      */
@@ -1350,6 +1369,13 @@
     public abstract void setPackageStoppedState(@NonNull String packageName, boolean stopped,
             @UserIdInt int userId);
 
+    /**
+     * Tells PackageManager when a component (except BroadcastReceivers) of the package is used
+     * and the package should get out of stopped state and be enabled.
+     */
+    public abstract void notifyComponentUsed(@NonNull String packageName,
+            @UserIdInt int userId, @NonNull String recentCallingPackage);
+
     /** @deprecated For legacy shell command only. */
     @Deprecated
     public abstract void legacyDumpProfiles(@NonNull String packageName,
@@ -1364,4 +1390,17 @@
     @Deprecated
     public abstract void legacyReconcileSecondaryDexFiles(String packageName)
             throws LegacyDexoptDisabledException;
+
+    /**
+     * Gets {@link PackageManager.DistractionRestriction restrictions} of the given
+     * packages of the given user.
+     *
+     * The corresponding element of the resulting array will be -1 if a given package doesn't exist.
+     *
+     * @param packageNames The packages under which to check.
+     * @param userId The user under which to check.
+     * @return an array of distracting restriction state in order of the given packages
+     */
+    public abstract int[] getDistractingPackageRestrictionsAsUser(
+            @NonNull String[] packageNames, int userId);
 }
diff --git a/services/core/java/com/android/server/BinaryTransparencyService.java b/services/core/java/com/android/server/BinaryTransparencyService.java
index 8fc30e4..173a75b 100644
--- a/services/core/java/com/android/server/BinaryTransparencyService.java
+++ b/services/core/java/com/android/server/BinaryTransparencyService.java
@@ -229,8 +229,8 @@
 
                 // Only digest and split name are different between splits.
                 Digest digest = measureApk(split.getPath());
-                appInfo.digest = digest.value;
-                appInfo.digestAlgorithm = digest.algorithm;
+                appInfo.digest = digest.value();
+                appInfo.digestAlgorithm = digest.algorithm();
 
                 results.add(appInfo);
             }
@@ -391,8 +391,8 @@
                 var apexInfo = new IBinaryTransparencyService.ApexInfo();
                 apexInfo.packageName = packageState.getPackageName();
                 apexInfo.longVersion = packageState.getVersionCode();
-                apexInfo.digest = apexChecksum.value;
-                apexInfo.digestAlgorithm = apexChecksum.algorithm;
+                apexInfo.digest = apexChecksum.value();
+                apexInfo.digestAlgorithm = apexChecksum.algorithm();
                 apexInfo.signerDigests =
                         computePackageSignerSha256Digests(packageState.getSigningInfo());
 
@@ -1693,13 +1693,5 @@
         return slice.getList();
     }
 
-    private static class Digest {
-        public int algorithm;
-        public byte[] value;
-
-        Digest(int algorithm, byte[] value) {
-            this.algorithm = algorithm;
-            this.value = value;
-        }
-    }
+    private record Digest(int algorithm, byte[] value) {}
 }
diff --git a/services/core/java/com/android/server/BootReceiver.java b/services/core/java/com/android/server/BootReceiver.java
index 572e9c2..26421b7 100644
--- a/services/core/java/com/android/server/BootReceiver.java
+++ b/services/core/java/com/android/server/BootReceiver.java
@@ -313,6 +313,11 @@
 
     private static final DropboxRateLimiter sDropboxRateLimiter = new DropboxRateLimiter();
 
+    /** Initialize the rate limiter. */
+    public static void initDropboxRateLimiter() {
+        sDropboxRateLimiter.init();
+    }
+
     /**
      * Reset the dropbox rate limiter.
      */
@@ -362,10 +367,8 @@
                             PosixFilePermissions.fromString("rw-rw----"));
 
                     // Write the new proto container proto with headers.
-                    ParcelFileDescriptor pfd;
-                    try {
-                        pfd = ParcelFileDescriptor.open(tombstoneProtoWithHeaders, MODE_READ_WRITE);
-
+                    try (ParcelFileDescriptor pfd = ParcelFileDescriptor.open(
+                            tombstoneProtoWithHeaders, MODE_READ_WRITE)) {
                         ProtoOutputStream protoStream = new ProtoOutputStream(
                                 pfd.getFileDescriptor());
                         protoStream.write(TombstoneWithHeadersProto.TOMBSTONE, tombstoneBytes);
@@ -379,6 +382,8 @@
                     } catch (FileNotFoundException ex) {
                         Slog.e(TAG, "failed to open for write: " + tombstoneProtoWithHeaders, ex);
                         throw ex;
+                    } catch (IOException ex) {
+                        Slog.e(TAG, "IO exception during write: " + tombstoneProtoWithHeaders, ex);
                     } finally {
                         // Remove the temporary file.
                         if (tombstoneProtoWithHeaders != null) {
diff --git a/services/core/java/com/android/server/DockObserver.java b/services/core/java/com/android/server/DockObserver.java
index fb527c1..9554e63 100644
--- a/services/core/java/com/android/server/DockObserver.java
+++ b/services/core/java/com/android/server/DockObserver.java
@@ -20,9 +20,8 @@
 import android.content.Context;
 import android.content.Intent;
 import android.database.ContentObserver;
-import android.media.AudioManager;
+import android.media.AudioAttributes;
 import android.media.Ringtone;
-import android.media.RingtoneManager;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.Handler;
@@ -306,11 +305,16 @@
                     if (soundPath != null) {
                         final Uri soundUri = Uri.parse("file://" + soundPath);
                         if (soundUri != null) {
-                            final Ringtone sfx = RingtoneManager.getRingtone(
-                                    getContext(), soundUri);
+                            AudioAttributes audioAttributes = new AudioAttributes.Builder()
+                                    .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
+                                    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+                                    .build();
+                            final Ringtone sfx = new Ringtone.Builder(getContext(),
+                                    Ringtone.MEDIA_SOUND, audioAttributes)
+                                    .setUri(soundUri)
+                                    .setPreferBuiltinDevice()
+                                    .build();
                             if (sfx != null) {
-                                sfx.setStreamType(AudioManager.STREAM_SYSTEM);
-                                sfx.preferBuiltinDevice(true);
                                 sfx.play();
                             }
                         }
diff --git a/services/core/java/com/android/server/GestureLauncherService.java b/services/core/java/com/android/server/GestureLauncherService.java
index f19f7f2..1741593 100644
--- a/services/core/java/com/android/server/GestureLauncherService.java
+++ b/services/core/java/com/android/server/GestureLauncherService.java
@@ -19,12 +19,10 @@
 import android.app.ActivityManager;
 import android.app.StatusBarManager;
 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.ResolveInfo;
 import android.content.res.Resources;
 import android.database.ContentObserver;
 import android.hardware.Sensor;
@@ -40,8 +38,6 @@
 import android.os.SystemProperties;
 import android.os.Trace;
 import android.os.UserHandle;
-import android.os.VibrationEffect;
-import android.os.Vibrator;
 import android.provider.Settings;
 import android.util.MutableBoolean;
 import android.util.Slog;
@@ -113,19 +109,6 @@
      */
     private static final int CAMERA_POWER_TAP_COUNT_THRESHOLD = 2;
 
-    /** Action for starting emergency alerts on Wear OS. */
-    private static final String WEAR_LAUNCH_EMERGENCY_ACTION =
-            "com.android.systemui.action.LAUNCH_EMERGENCY";
-
-    /** Action for starting emergency alerts in retail mode on Wear OS. */
-    private static final String WEAR_LAUNCH_EMERGENCY_RETAIL_ACTION =
-            "com.android.systemui.action.LAUNCH_EMERGENCY_RETAIL";
-
-    /**
-     * Boolean extra for distinguishing intents coming from power button gesture.
-     */
-    private static final String EXTRA_LAUNCH_EMERGENCY_VIA_GESTURE = "launch_emergency_via_gesture";
-
     /** The listener that receives the gesture event. */
     private final GestureEventListener mGestureListener = new GestureEventListener();
     private final CameraLiftTriggerEventListener mCameraLiftTriggerListener =
@@ -198,7 +181,6 @@
     private final UiEventLogger mUiEventLogger;
 
     private boolean mHasFeatureWatch;
-    private long mVibrateMilliSecondsForPanicGesture;
 
     @VisibleForTesting
     public enum GestureLauncherEvent implements UiEventLogger.UiEventEnum {
@@ -268,13 +250,6 @@
 
             mHasFeatureWatch =
                     mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH);
-            mVibrateMilliSecondsForPanicGesture =
-                    resources.getInteger(
-                            com.android
-                                    .internal
-                                    .R
-                                    .integer
-                                    .config_mashPressVibrateTimeOnPowerButton);
         }
     }
 
@@ -714,11 +689,6 @@
                         userSetupComplete));
             }
 
-            if (mHasFeatureWatch) {
-                onEmergencyGestureDetectedOnWatch();
-                return true;
-            }
-
             StatusBarManagerInternal service = LocalServices.getService(
                     StatusBarManagerInternal.class);
             service.onEmergencyActionLaunchGestureDetected();
@@ -728,37 +698,6 @@
         }
     }
 
-    private void onEmergencyGestureDetectedOnWatch() {
-        Intent emergencyIntent =
-                new Intent(
-                        isInRetailMode()
-                                ? WEAR_LAUNCH_EMERGENCY_RETAIL_ACTION
-                                : WEAR_LAUNCH_EMERGENCY_ACTION);
-        PackageManager pm = mContext.getPackageManager();
-        ResolveInfo resolveInfo = pm.resolveActivity(emergencyIntent, /*flags=*/0);
-        if (resolveInfo == null) {
-            Slog.w(TAG, "Couldn't find an app to process the emergency intent "
-                    + emergencyIntent.getAction());
-            return;
-        }
-
-        Vibrator vibrator = mContext.getSystemService(Vibrator.class);
-        vibrator.vibrate(VibrationEffect.createOneShot(mVibrateMilliSecondsForPanicGesture,
-                VibrationEffect.DEFAULT_AMPLITUDE));
-
-        emergencyIntent.setComponent(
-                new ComponentName(
-                        resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name));
-        emergencyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        emergencyIntent.putExtra(EXTRA_LAUNCH_EMERGENCY_VIA_GESTURE, true);
-        mContext.startActivityAsUser(emergencyIntent, new UserHandle(mUserId));
-    }
-
-    private boolean isInRetailMode() {
-        return Settings.Global.getInt(mContext.getContentResolver(),
-                Settings.Global.DEVICE_DEMO_MODE, 0) == 1;
-    }
-
     private boolean isUserSetupComplete() {
         return Settings.Secure.getIntForUser(mContext.getContentResolver(),
                 Settings.Secure.USER_SETUP_COMPLETE, 0, UserHandle.USER_CURRENT) != 0;
diff --git a/services/core/java/com/android/server/MasterClearReceiver.java b/services/core/java/com/android/server/MasterClearReceiver.java
index 7c3a75f..5a15f17 100644
--- a/services/core/java/com/android/server/MasterClearReceiver.java
+++ b/services/core/java/com/android/server/MasterClearReceiver.java
@@ -49,6 +49,7 @@
     private static final String TAG = "MasterClear";
     private boolean mWipeExternalStorage;
     private boolean mWipeEsims;
+    private boolean mShowWipeProgress = true;
 
     @Override
     public void onReceive(final Context context, final Intent intent) {
@@ -77,8 +78,12 @@
             return;
         }
 
-        final boolean shutdown = intent.getBooleanExtra("shutdown", false);
         final String reason = intent.getStringExtra(Intent.EXTRA_REASON);
+
+        // Factory reset dialog has its own UI for the reset process, so suppress ours if indicated.
+        mShowWipeProgress = intent.getBooleanExtra(Intent.EXTRA_SHOW_WIPE_PROGRESS, true);
+
+        final boolean shutdown = intent.getBooleanExtra("shutdown", false);
         mWipeExternalStorage = intent.getBooleanExtra(Intent.EXTRA_WIPE_EXTERNAL_STORAGE, false);
         mWipeEsims = intent.getBooleanExtra(Intent.EXTRA_WIPE_ESIMS, false);
         final boolean forceWipe = intent.getBooleanExtra(Intent.EXTRA_FORCE_MASTER_CLEAR, false)
@@ -190,15 +195,19 @@
         public WipeDataTask(Context context, Thread chainedTask) {
             mContext = context;
             mChainedTask = chainedTask;
-            mProgressDialog = new ProgressDialog(context, R.style.Theme_DeviceDefault_System);
+            mProgressDialog = mShowWipeProgress
+                    ? new ProgressDialog(context, R.style.Theme_DeviceDefault_System)
+                    : null;
         }
 
         @Override
         protected void onPreExecute() {
-            mProgressDialog.setIndeterminate(true);
-            mProgressDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
-            mProgressDialog.setMessage(mContext.getText(R.string.progress_erasing));
-            mProgressDialog.show();
+            if (mProgressDialog != null) {
+                mProgressDialog.setIndeterminate(true);
+                mProgressDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+                mProgressDialog.setMessage(mContext.getText(R.string.progress_erasing));
+                mProgressDialog.show();
+            }
         }
 
         @Override
@@ -214,7 +223,9 @@
 
         @Override
         protected void onPostExecute(Void result) {
-            mProgressDialog.dismiss();
+            if (mProgressDialog != null && mProgressDialog.isShowing()) {
+                mProgressDialog.dismiss();
+            }
             mChainedTask.start();
         }
 
diff --git a/services/core/java/com/android/server/RescueParty.java b/services/core/java/com/android/server/RescueParty.java
index 6e2e5f7..c094c12 100644
--- a/services/core/java/com/android/server/RescueParty.java
+++ b/services/core/java/com/android/server/RescueParty.java
@@ -382,6 +382,14 @@
 
     private static void executeRescueLevelInternal(Context context, int level, @Nullable
             String failedPackage) throws Exception {
+
+        if (level <= LEVEL_RESET_SETTINGS_TRUSTED_DEFAULTS) {
+            // Disabling flag resets on master branch for trunk stable launch.
+            // TODO(b/287618292): Re-enable them after the trunk stable is launched and we
+            // figured out a way to reset flags without interfering with trunk development.
+            return;
+        }
+
         FrameworkStatsLog.write(FrameworkStatsLog.RESCUE_PARTY_RESET_REPORTED, level);
         // Try our best to reset all settings possible, and once finished
         // rethrow any exception that we encountered
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index e467dd6..830d55a 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -2085,7 +2085,7 @@
                 }
             };
             // TODO(b/149391976): Use different handler?
-            monitor.register(mContext, user, true, mHandler);
+            monitor.register(mContext, user, mHandler);
             mPackageMonitorsForUser.put(userId, monitor);
         } else {
             Slog.w(TAG, "PackageMonitor is already registered for: " + userId);
diff --git a/services/core/java/com/android/server/SystemConfig.java b/services/core/java/com/android/server/SystemConfig.java
index bca2d60..caf1684 100644
--- a/services/core/java/com/android/server/SystemConfig.java
+++ b/services/core/java/com/android/server/SystemConfig.java
@@ -35,7 +35,6 @@
 import android.os.incremental.IncrementalManager;
 import android.os.storage.StorageManager;
 import android.permission.PermissionManager.SplitPermissionInfo;
-import android.sysprop.ApexProperties;
 import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
@@ -1208,8 +1207,7 @@
                             boolean systemExt = permFile.toPath().startsWith(
                                     Environment.getSystemExtDirectory().toPath() + "/");
                             boolean apex = permFile.toPath().startsWith(
-                                    Environment.getApexDirectory().toPath() + "/")
-                                    && ApexProperties.updatable().orElse(false);
+                                    Environment.getApexDirectory().toPath() + "/");
                             if (vendor) {
                                 readPrivAppPermissions(parser,
                                         mPermissionAllowlist.getVendorPrivilegedAppAllowlist());
diff --git a/services/core/java/com/android/server/SystemUpdateManagerService.java b/services/core/java/com/android/server/SystemUpdateManagerService.java
index 811a780..d5e7be5 100644
--- a/services/core/java/com/android/server/SystemUpdateManagerService.java
+++ b/services/core/java/com/android/server/SystemUpdateManagerService.java
@@ -86,9 +86,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.RECOVERY)
     @Override
     public void updateSystemUpdateInfo(PersistableBundle infoBundle) {
-        mContext.enforceCallingOrSelfPermission(Manifest.permission.RECOVERY, TAG);
+        updateSystemUpdateInfo_enforcePermission();
 
         int status = infoBundle.getInt(KEY_STATUS, STATUS_UNKNOWN);
         if (status == STATUS_UNKNOWN) {
diff --git a/services/core/java/com/android/server/TEST_MAPPING b/services/core/java/com/android/server/TEST_MAPPING
index 1a88182..03022b0 100644
--- a/services/core/java/com/android/server/TEST_MAPPING
+++ b/services/core/java/com/android/server/TEST_MAPPING
@@ -1,7 +1,13 @@
 {
     "presubmit": [
         {
-            "name": "CtsLocationFineTestCases"
+            "name": "CtsLocationFineTestCases",
+            "options": [
+                {
+                    // TODO: Wait for test to deflake - b/293934372
+                    "exclude-filter":"android.location.cts.fine.ScanningSettingsTest"
+                }
+             ]
         },
         {
             "name": "CtsLocationCoarseTestCases"
@@ -14,10 +20,10 @@
             "file_patterns": ["NotificationManagerService\\.java"]
         },
         {
-            "name": "CtsWindowManagerDeviceTestCases",
+            "name": "CtsWindowManagerDeviceWindow",
             "options": [
                 {
-                    "include-filter": "android.server.wm.ToastWindowTest"
+                    "include-filter": "android.server.wm.window.ToastWindowTest"
                 }
             ],
             "file_patterns": ["NotificationManagerService\\.java"]
@@ -54,23 +60,7 @@
         },
         {
             "name": "BinaryTransparencyHostTest",
-            "file_patterns": [
-                "BinaryTransparencyService\\.java"
-            ]
-        },
-        {
-            "name": "CtsMediaProjectionTestCases",
-            "options": [
-                {
-                    "exclude-annotation": "android.platform.test.annotations.FlakyTest"
-                },
-                {
-                    "exclude-annotation": "androidx.test.filters.FlakyTest"
-                },
-                {
-                    "exclude-annotation": "org.junit.Ignore"
-                }
-            ]
+            "file_patterns": ["BinaryTransparencyService\\.java"]
         },
         {
             // GWP-ASan's CTS test ensures that recoverable tombstones work,
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index a641e85..c718d39 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -2093,20 +2093,24 @@
         }
     }
 
-    public void notifyDataActivity(int state) {
-        notifyDataActivityForSubscriber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, state);
-    }
-
-    public void notifyDataActivityForSubscriber(int subId, int state) {
+    /**
+     * Send a notification to registrants about the data activity state.
+     *
+     * @param phoneId the phoneId carrying the data connection
+     * @param subId the subscriptionId for the data connection
+     * @param state indicates the latest data activity type
+     * e.g.,{@link TelephonyManager#DATA_ACTIVITY_IN}
+     *
+     */
+    public void notifyDataActivityForSubscriber(int phoneId, int subId, int state) {
         if (!checkNotifyPermission("notifyDataActivity()" )) {
             return;
         }
-        int phoneId = getPhoneIdFromSubId(subId);
+
         synchronized (mRecords) {
             if (validatePhoneId(phoneId)) {
                 mDataActivity[phoneId] = state;
                 for (Record r : mRecords) {
-                    // Notify by correct subId.
                     if (r.matchTelephonyCallbackEvent(
                             TelephonyCallback.EVENT_DATA_ACTIVITY_CHANGED)
                             && idMatch(r, subId, phoneId)) {
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index 55e805a..dc0f901 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -65,6 +65,7 @@
 import android.os.Binder;
 import android.os.Handler;
 import android.os.IBinder;
+import android.os.PermissionEnforcer;
 import android.os.PowerManager;
 import android.os.PowerManager.ServiceType;
 import android.os.PowerManagerInternal;
@@ -199,6 +200,8 @@
     private final LocalService mLocalService = new LocalService();
     private PowerManagerInternal mLocalPowerManager;
 
+    private final IUiModeManager.Stub mService;
+
     @GuardedBy("mLock")
     private final SparseArray<RemoteCallbackList<IUiModeManagerCallback>> mUiModeManagerCallbacks =
             new SparseArray<>();
@@ -221,6 +224,7 @@
     protected UiModeManagerService(Context context, boolean setupWizardComplete,
             TwilightManager tm, Injector injector) {
         super(context);
+        mService = new Stub(context);
         mConfiguration.setToDefaults();
         mSetupWizardComplete = setupWizardComplete;
         mTwilightManager = tm;
@@ -663,7 +667,11 @@
         }
     }
 
-    private final IUiModeManager.Stub mService = new IUiModeManager.Stub() {
+    private final class Stub extends IUiModeManager.Stub {
+        Stub(Context context) {
+            super(PermissionEnforcer.fromContext(context));
+        }
+
         @Override
         public void addCallback(IUiModeManagerCallback callback) {
             int userId = getCallingUserId();
@@ -851,25 +859,17 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE)
         @Override
         public void setNightModeCustomType(@NightModeCustomType int nightModeCustomType) {
-            if (getContext().checkCallingOrSelfPermission(
-                    android.Manifest.permission.MODIFY_DAY_NIGHT_MODE)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException(
-                        "setNightModeCustomType requires MODIFY_DAY_NIGHT_MODE permission");
-            }
+            setNightModeCustomType_enforcePermission();
             setNightModeInternal(MODE_NIGHT_CUSTOM, nightModeCustomType);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE)
         @Override
         public  @NightModeCustomReturnType int getNightModeCustomType() {
-            if (getContext().checkCallingOrSelfPermission(
-                    android.Manifest.permission.MODIFY_DAY_NIGHT_MODE)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException(
-                        "getNightModeCustomType requires MODIFY_DAY_NIGHT_MODE permission");
-            }
+            getNightModeCustomType_enforcePermission();
             synchronized (mLock) {
                 return mNightModeCustomType;
             }
@@ -1098,10 +1098,10 @@
             return releaseProjectionUnchecked(projectionType, callingPackage);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.READ_PROJECTION_STATE)
         @Override
         public @UiModeManager.ProjectionType int getActiveProjectionTypes() {
-            getContext().enforceCallingOrSelfPermission(
-                    android.Manifest.permission.READ_PROJECTION_STATE, "getActiveProjectionTypes");
+            getActiveProjectionTypes_enforcePermission();
             @UiModeManager.ProjectionType int projectionTypeFlag = PROJECTION_TYPE_NONE;
             synchronized (mLock) {
                 if (mProjectionHolders != null) {
@@ -1115,11 +1115,11 @@
             return projectionTypeFlag;
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.READ_PROJECTION_STATE)
         @Override
         public List<String> getProjectingPackages(
                 @UiModeManager.ProjectionType int projectionType) {
-            getContext().enforceCallingOrSelfPermission(
-                    android.Manifest.permission.READ_PROJECTION_STATE, "getProjectionState");
+            getProjectingPackages_enforcePermission();
             synchronized (mLock) {
                 List<String> packageNames = new ArrayList<>();
                 populateWithRelevantActivePackageNames(projectionType, packageNames);
@@ -1127,11 +1127,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.READ_PROJECTION_STATE)
         public void addOnProjectionStateChangedListener(IOnProjectionStateChangedListener listener,
                 @UiModeManager.ProjectionType int projectionType) {
-            getContext().enforceCallingOrSelfPermission(
-                    android.Manifest.permission.READ_PROJECTION_STATE,
-                    "addOnProjectionStateChangedListener");
+            addOnProjectionStateChangedListener_enforcePermission();
             if (projectionType == PROJECTION_TYPE_NONE) {
                 return;
             }
@@ -1161,11 +1160,10 @@
         }
 
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.READ_PROJECTION_STATE)
         public void removeOnProjectionStateChangedListener(
                 IOnProjectionStateChangedListener listener) {
-            getContext().enforceCallingOrSelfPermission(
-                    android.Manifest.permission.READ_PROJECTION_STATE,
-                    "removeOnProjectionStateChangedListener");
+            removeOnProjectionStateChangedListener_enforcePermission();
             synchronized (mLock) {
                 if (mProjectionListeners != null) {
                     for (int i = 0; i < mProjectionListeners.size(); ++i) {
diff --git a/services/core/java/com/android/server/Watchdog.java b/services/core/java/com/android/server/Watchdog.java
index 62651dd..6baae4b 100644
--- a/services/core/java/com/android/server/Watchdog.java
+++ b/services/core/java/com/android/server/Watchdog.java
@@ -142,6 +142,7 @@
             "android.hardware.camera.provider@2.4::ICameraProvider",
             "android.hardware.gnss@1.0::IGnss",
             "android.hardware.graphics.allocator@2.0::IAllocator",
+            "android.hardware.graphics.allocator@4.0::IAllocator",
             "android.hardware.graphics.composer@2.1::IComposer",
             "android.hardware.health@2.0::IHealth",
             "android.hardware.light@2.0::ILight",
@@ -452,7 +453,7 @@
         mInterestingJavaPids.add(Process.myPid());
 
         // See the notes on DEFAULT_TIMEOUT.
-        assert DB ||
+        assert DB || Build.IS_USERDEBUG ||
                 DEFAULT_TIMEOUT > ZygoteConnectionConstants.WRAPPED_PID_TIMEOUT_MILLIS;
 
         mTraceErrorLogger = new TraceErrorLogger();
@@ -526,7 +527,8 @@
      */
     void updateWatchdogTimeout(long timeoutMillis) {
         // See the notes on DEFAULT_TIMEOUT.
-        if (!DB && timeoutMillis <= ZygoteConnectionConstants.WRAPPED_PID_TIMEOUT_MILLIS) {
+        if (!DB && !Build.IS_USERDEBUG
+                && timeoutMillis <= ZygoteConnectionConstants.WRAPPED_PID_TIMEOUT_MILLIS) {
             timeoutMillis = ZygoteConnectionConstants.WRAPPED_PID_TIMEOUT_MILLIS + 1;
         }
         mWatchdogTimeoutMillis = timeoutMillis;
@@ -914,7 +916,7 @@
         // The system's been hanging for a whlie, another second or two won't hurt much.
         SystemClock.sleep(5000);
         processCpuTracker.update();
-        report.append(processCpuTracker.printCurrentState(anrTime));
+        report.append(processCpuTracker.printCurrentState(anrTime, 10));
         report.append(tracesFileException.getBuffer());
 
         if (!halfWatchdog) {
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 5fec849..d398260 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -357,13 +357,25 @@
             @Override
             public void onPackageAdded(String packageName, int uid) {
                 // Called on a handler, and running as the system
-                cancelAccountAccessRequestNotificationIfNeeded(uid, true);
+                try {
+                    UserAccounts accounts = getUserAccounts(UserHandle.getUserId(uid));
+                    cancelAccountAccessRequestNotificationIfNeeded(uid, true, accounts);
+                } catch (SQLiteCantOpenDatabaseException e) {
+                    Log.w(TAG, "Can't read accounts database", e);
+                    return;
+                }
             }
 
             @Override
             public void onPackageUpdateFinished(String packageName, int uid) {
                 // Called on a handler, and running as the system
-                cancelAccountAccessRequestNotificationIfNeeded(uid, true);
+                try {
+                    UserAccounts accounts = getUserAccounts(UserHandle.getUserId(uid));
+                    cancelAccountAccessRequestNotificationIfNeeded(uid, true, accounts);
+                } catch (SQLiteCantOpenDatabaseException e) {
+                    Log.w(TAG, "Can't read accounts database", e);
+                    return;
+                }
             }
         }.register(mContext, mHandler.getLooper(), UserHandle.ALL, true);
 
@@ -380,13 +392,18 @@
                     if (mode == AppOpsManager.MODE_ALLOWED) {
                         final long identity = Binder.clearCallingIdentity();
                         try {
-                            cancelAccountAccessRequestNotificationIfNeeded(packageName, uid, true);
+                            UserAccounts accounts = getUserAccounts(userId);
+                            cancelAccountAccessRequestNotificationIfNeeded(
+                                    packageName, uid, true, accounts);
                         } finally {
                             Binder.restoreCallingIdentity(identity);
                         }
                     }
                 } catch (NameNotFoundException e) {
                     /* ignore */
+                } catch (SQLiteCantOpenDatabaseException e) {
+                    Log.w(TAG, "Can't read accounts database", e);
+                    return;
                 }
             }
         });
@@ -413,15 +430,15 @@
                                 }
 
                         if (accounts == null) {
-                            accounts = getAccountsAsUser(null, userId, "android");
+                            accounts = getAccountsOrEmptyArray(null, userId, "android");
                             if (ArrayUtils.isEmpty(accounts)) {
                                 return;
                             }
                         }
-
+                        UserAccounts userAccounts = getUserAccounts(UserHandle.getUserId(uid));
                         for (Account account : accounts) {
                             cancelAccountAccessRequestNotificationIfNeeded(
-                                    account, uid, packageName, true);
+                                    account, uid, packageName, true, userAccounts);
                         }
                     }
                 } finally {
@@ -441,39 +458,40 @@
     }
 
     private void cancelAccountAccessRequestNotificationIfNeeded(int uid,
-            boolean checkAccess) {
-        Account[] accounts = getAccountsAsUser(null, UserHandle.getUserId(uid), "android");
+            boolean checkAccess, UserAccounts userAccounts) {
+        Account[] accounts = getAccountsOrEmptyArray(null, UserHandle.getUserId(uid), "android");
         for (Account account : accounts) {
-            cancelAccountAccessRequestNotificationIfNeeded(account, uid, checkAccess);
+            cancelAccountAccessRequestNotificationIfNeeded(account, uid, checkAccess, userAccounts);
         }
     }
 
     private void cancelAccountAccessRequestNotificationIfNeeded(String packageName, int uid,
-            boolean checkAccess) {
-        Account[] accounts = getAccountsAsUser(null, UserHandle.getUserId(uid), "android");
+            boolean checkAccess, UserAccounts userAccounts) {
+        Account[] accounts = getAccountsOrEmptyArray(null, UserHandle.getUserId(uid), "android");
         for (Account account : accounts) {
-            cancelAccountAccessRequestNotificationIfNeeded(account, uid, packageName, checkAccess);
+            cancelAccountAccessRequestNotificationIfNeeded(account,
+                    uid, packageName, checkAccess, userAccounts);
         }
     }
 
     private void cancelAccountAccessRequestNotificationIfNeeded(Account account, int uid,
-            boolean checkAccess) {
+            boolean checkAccess, UserAccounts accounts) {
         String[] packageNames = mPackageManager.getPackagesForUid(uid);
         if (packageNames != null) {
             for (String packageName : packageNames) {
                 cancelAccountAccessRequestNotificationIfNeeded(account, uid,
-                        packageName, checkAccess);
+                        packageName, checkAccess, accounts);
             }
         }
     }
 
     private void cancelAccountAccessRequestNotificationIfNeeded(Account account,
-            int uid, String packageName, boolean checkAccess) {
+            int uid, String packageName, boolean checkAccess, UserAccounts accounts) {
         if (!checkAccess || hasAccountAccess(account, packageName,
                 UserHandle.getUserHandleForUid(uid))) {
             cancelNotification(getCredentialPermissionNotificationId(account,
-                    AccountManager.ACCOUNT_ACCESS_TOKEN_TYPE, uid),
-                    UserHandle.getUserHandleForUid(uid));
+                    AccountManager.ACCOUNT_ACCESS_TOKEN_TYPE, uid, accounts),
+                    accounts);
         }
     }
 
@@ -483,14 +501,13 @@
         Bundle.setDefusable(extras, true);
         int callingUid = Binder.getCallingUid();
         int userId = UserHandle.getCallingUserId();
-        if (Log.isLoggable(TAG, Log.VERBOSE)) {
-            Log.v(TAG, "addAccountExplicitly: " + account + ", caller's uid " + callingUid
-                    + ", pid " + Binder.getCallingPid());
-        }
         Objects.requireNonNull(account, "account cannot be null");
+        Log.v(TAG, "addAccountExplicitly: caller's uid=" + callingUid + ", pid="
+                + Binder.getCallingPid() + ", packageName=" + opPackageName + ", accountType="
+                + account.type);
         if (!isAccountManagedByCaller(account.type, callingUid, userId)) {
-            String msg = String.format("uid %s cannot explicitly add accounts of type: %s",
-                    callingUid, account.type);
+            String msg = String.format("uid=%s, package=%s cannot explicitly add "
+                    + "accounts of type: %s", callingUid, opPackageName, account.type);
             throw new SecurityException(msg);
         }
         /*
@@ -2172,13 +2189,13 @@
          */
         cancelNotification(
                 getSigninRequiredNotificationId(accounts, accountToRename),
-                new UserHandle(accounts.userId));
+                accounts);
         synchronized(accounts.credentialsPermissionNotificationIds) {
             for (Pair<Pair<Account, String>, Integer> pair:
                     accounts.credentialsPermissionNotificationIds.keySet()) {
                 if (accountToRename.equals(pair.first.first)) {
                     NotificationId id = accounts.credentialsPermissionNotificationIds.get(pair);
-                    cancelNotification(id, new UserHandle(accounts.userId));
+                    cancelNotification(id, accounts);
                 }
             }
         }
@@ -2324,18 +2341,19 @@
                 response.onError(AccountManager.ERROR_CODE_MANAGEMENT_DISABLED_FOR_ACCOUNT_TYPE,
                         "User cannot modify accounts of this type (policy).");
             } catch (RemoteException re) {
+                Log.w(TAG, "RemoteException while removing account", re);
             }
             return;
         }
         final long identityToken = clearCallingIdentity();
         UserAccounts accounts = getUserAccounts(userId);
-        cancelNotification(getSigninRequiredNotificationId(accounts, account), user);
+        cancelNotification(getSigninRequiredNotificationId(accounts, account), accounts);
         synchronized(accounts.credentialsPermissionNotificationIds) {
             for (Pair<Pair<Account, String>, Integer> pair:
                 accounts.credentialsPermissionNotificationIds.keySet()) {
                 if (account.equals(pair.first.first)) {
                     NotificationId id = accounts.credentialsPermissionNotificationIds.get(pair);
-                    cancelNotification(id, user);
+                    cancelNotification(id, accounts);
                 }
             }
         }
@@ -2529,7 +2547,7 @@
                             && AccountManager.ACCOUNT_ACCESS_TOKEN_TYPE.equals(key.first.second)) {
                         final int uid = (Integer) key.second;
                         mHandler.post(() -> cancelAccountAccessRequestNotificationIfNeeded(
-                                account, uid, false));
+                                account, uid, false, accounts));
                     }
                 }
             }
@@ -2610,8 +2628,7 @@
         if (account == null || tokenType == null || callerPkg == null || callerSigDigest == null) {
             return;
         }
-        cancelNotification(getSigninRequiredNotificationId(accounts, account),
-                UserHandle.of(accounts.userId));
+        cancelNotification(getSigninRequiredNotificationId(accounts, account), accounts);
         synchronized (accounts.cacheLock) {
             accounts.accountTokenCaches.put(
                     account, token, tokenType, callerPkg, callerSigDigest, expiryMillis);
@@ -2623,8 +2640,7 @@
         if (account == null || type == null) {
             return false;
         }
-        cancelNotification(getSigninRequiredNotificationId(accounts, account),
-                UserHandle.of(accounts.userId));
+        cancelNotification(getSigninRequiredNotificationId(accounts, account), accounts);
         synchronized (accounts.dbLock) {
             accounts.accountsDb.beginTransaction();
             boolean updateCache = false;
@@ -3215,7 +3231,8 @@
     }
 
     private void createNoCredentialsPermissionNotification(Account account, Intent intent,
-            String packageName, int userId) {
+            String packageName, UserAccounts accounts) {
+        int userId = accounts.userId;
         int uid = intent.getIntExtra(
                 GrantCredentialsPermissionActivity.EXTRAS_REQUESTING_UID, -1);
         String authTokenType = intent.getStringExtra(
@@ -3245,7 +3262,7 @@
                             null, user))
                     .build();
         installNotification(getCredentialPermissionNotificationId(
-                account, authTokenType, uid), n, "android", user.getIdentifier());
+                account, authTokenType, uid, accounts), n, "android", user.getIdentifier());
     }
 
     private String getApplicationLabel(String packageName, int userId) {
@@ -3269,8 +3286,9 @@
             // the intent from a non-Activity context. This is the default behavior.
             intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         }
+        UserAccounts accounts = getUserAccounts(UserHandle.getUserId(uid));
         intent.addCategory(getCredentialPermissionNotificationId(account,
-                authTokenType, uid).mTag + (packageName != null ? packageName : ""));
+                authTokenType, uid, accounts).mTag + (packageName != null ? packageName : ""));
         intent.putExtra(GrantCredentialsPermissionActivity.EXTRAS_ACCOUNT, account);
         intent.putExtra(GrantCredentialsPermissionActivity.EXTRAS_AUTH_TOKEN_TYPE, authTokenType);
         intent.putExtra(GrantCredentialsPermissionActivity.EXTRAS_RESPONSE, response);
@@ -3280,9 +3298,8 @@
     }
 
     private NotificationId getCredentialPermissionNotificationId(Account account,
-            String authTokenType, int uid) {
+            String authTokenType, int uid, UserAccounts accounts) {
         NotificationId nId;
-        UserAccounts accounts = getUserAccounts(UserHandle.getUserId(uid));
         synchronized (accounts.credentialsPermissionNotificationIds) {
             final Pair<Pair<Account, String>, Integer> key =
                     new Pair<Pair<Account, String>, Integer>(
@@ -4239,9 +4256,9 @@
             }
 
             private void handleAuthenticatorResponse(boolean accessGranted) throws RemoteException {
+                UserAccounts userAccounts = getUserAccounts(UserHandle.getUserId(uid));
                 cancelNotification(getCredentialPermissionNotificationId(account,
-                        AccountManager.ACCOUNT_ACCESS_TOKEN_TYPE, uid),
-                        UserHandle.getUserHandleForUid(uid));
+                        AccountManager.ACCOUNT_ACCESS_TOKEN_TYPE, uid, userAccounts), userAccounts);
                 if (callback != null) {
                     Bundle result = new Bundle();
                     result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, accessGranted);
@@ -4477,6 +4494,16 @@
     }
 
     @NonNull
+    private Account[] getAccountsOrEmptyArray(String type, int userId, String opPackageName) {
+        try {
+            return getAccountsAsUser(type, userId, opPackageName);
+        } catch (SQLiteCantOpenDatabaseException e) {
+            Log.w(TAG, "Could not get accounts for user " + userId, e);
+            return new Account[]{};
+        }
+    }
+
+    @NonNull
     private Account[] getAccountsAsUserForPackage(
             String type,
             int userId,
@@ -4565,7 +4592,7 @@
     public void addSharedAccountsFromParentUser(int parentUserId, int userId,
             String opPackageName) {
         checkManageOrCreateUsersPermission("addSharedAccountsFromParentUser");
-        Account[] accounts = getAccountsAsUser(null, parentUserId, opPackageName);
+        Account[] accounts = getAccountsOrEmptyArray(null, parentUserId, opPackageName);
         for (Account account : accounts) {
             addSharedAccountAsUser(account, userId);
         }
@@ -5068,7 +5095,7 @@
                 Log.v(TAG, "initiating bind to authenticator type " + mAccountType);
             }
             if (!bindToAuthenticator(mAccountType)) {
-                Log.d(TAG, "bind attempt failed for " + toDebugString());
+                Log.w(TAG, "bind attempt failed for " + toDebugString());
                 onError(AccountManager.ERROR_CODE_REMOTE_EXCEPTION, "bind failure");
             }
         }
@@ -5181,7 +5208,7 @@
                 if (!TextUtils.isEmpty(accountName) && !TextUtils.isEmpty(accountType)) {
                     Account account = new Account(accountName, accountType);
                     cancelNotification(getSigninRequiredNotificationId(mAccounts, account),
-                            new UserHandle(mAccounts.userId));
+                            mAccounts);
                 }
             }
             IAccountManagerResponse response;
@@ -5263,10 +5290,9 @@
             authenticatorInfo = mAuthenticatorCache.getServiceInfo(
                     AuthenticatorDescription.newKey(authenticatorType), mAccounts.userId);
             if (authenticatorInfo == null) {
-                if (Log.isLoggable(TAG, Log.VERBOSE)) {
-                    Log.v(TAG, "there is no authenticator for " + authenticatorType
-                            + ", bailing out");
-                }
+                Log.w(TAG, "there is no authenticator for " + authenticatorType
+                        + ", bailing out");
+
                 return false;
             }
 
@@ -5288,9 +5314,9 @@
                 flags |= Context.BIND_ALLOW_INSTANT;
             }
             if (!mContext.bindServiceAsUser(intent, this, flags, UserHandle.of(mAccounts.userId))) {
-                if (Log.isLoggable(TAG, Log.VERBOSE)) {
-                    Log.v(TAG, "bindService to " + authenticatorInfo.componentName + " failed");
-                }
+                Log.w(TAG, "bindService to " + authenticatorInfo.componentName + " failed");
+                // Perform unbind as per documentation at Context.bindServiceAsUser
+                mContext.unbindService(this);
                 return false;
             }
 
@@ -5504,7 +5530,7 @@
             if (intent.getComponent() != null &&
                     GrantCredentialsPermissionActivity.class.getName().equals(
                             intent.getComponent().getClassName())) {
-                createNoCredentialsPermissionNotification(account, intent, packageName, userId);
+                createNoCredentialsPermissionNotification(account, intent, packageName, accounts);
             } else {
                 Context contextForUser = getContextForUser(new UserHandle(userId));
                 final NotificationId id = getSigninRequiredNotificationId(accounts, account);
@@ -5550,16 +5576,17 @@
         }
     }
 
-    private void cancelNotification(NotificationId id, UserHandle user) {
-        cancelNotification(id, mContext.getPackageName(), user);
+    private void cancelNotification(NotificationId id, UserAccounts accounts) {
+        cancelNotification(id, mContext.getPackageName(), accounts);
     }
 
-    private void cancelNotification(NotificationId id, String packageName, UserHandle user) {
+    private void cancelNotification(NotificationId id, String packageName, UserAccounts accounts) {
         final long identityToken = clearCallingIdentity();
         try {
             INotificationManager service = mInjector.getNotificationManager();
             service.cancelNotificationWithTag(
-                    packageName, "android", id.mTag, id.mId, user.getIdentifier());
+                    packageName, "android", id.mTag, id.mId,
+                    UserHandle.of(accounts.userId).getIdentifier());
         } catch (RemoteException e) {
             /* ignore - local call */
         } finally {
@@ -6016,10 +6043,11 @@
                     accounts.accountsDb.insertGrant(accountId, authTokenType, uid);
                 }
                 cancelNotification(
-                        getCredentialPermissionNotificationId(account, authTokenType, uid),
-                        UserHandle.of(accounts.userId));
+                        getCredentialPermissionNotificationId(
+                                account, authTokenType, uid, accounts),
+                        accounts);
 
-                cancelAccountAccessRequestNotificationIfNeeded(account, uid, true);
+                cancelAccountAccessRequestNotificationIfNeeded(account, uid, true, accounts);
             }
         }
 
@@ -6059,8 +6087,9 @@
                 }
 
                 cancelNotification(
-                        getCredentialPermissionNotificationId(account, authTokenType, uid),
-                        UserHandle.of(accounts.userId));
+                        getCredentialPermissionNotificationId(
+                                account, authTokenType, uid, accounts),
+                        accounts);
             }
         }
 
diff --git a/services/core/java/com/android/server/am/ActiveInstrumentation.java b/services/core/java/com/android/server/am/ActiveInstrumentation.java
index 61ccf11..49685b95 100644
--- a/services/core/java/com/android/server/am/ActiveInstrumentation.java
+++ b/services/core/java/com/android/server/am/ActiveInstrumentation.java
@@ -40,6 +40,9 @@
     // The application being instrumented
     ApplicationInfo mTargetInfo;
 
+    // Whether the application is instrumented as an sdk running in the sdk_sandbox.
+    boolean mIsSdkInSandbox;
+
     // Where to save profiling
     String mProfileFile;
 
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index a8d7845..36ef9b7 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -5116,10 +5116,9 @@
                     r.packageName, r.userId, UsageEvents.Event.APP_COMPONENT_USED);
         }
 
-        // Service is now being launched, its package can't be stopped.
         try {
-            mAm.mPackageManagerInt.setPackageStoppedState(
-                    r.packageName, false, r.userId);
+            mAm.mPackageManagerInt.notifyComponentUsed(
+                    r.packageName, r.userId, r.mRecentCallingPackage);
         } catch (IllegalArgumentException e) {
             Slog.w(TAG, "Failed trying to unstop package "
                     + r.packageName + ": " + e);
@@ -6434,6 +6433,7 @@
         }
         updateServiceConnectionActivitiesLocked(psr);
         psr.removeAllConnections();
+        psr.removeAllSdkSandboxConnections();
 
         psr.mAllowlistManager = false;
 
@@ -6768,8 +6768,9 @@
                     mAm.mHandler.removeCallbacks(mLastAnrDumpClearer);
                     mAm.mHandler.postDelayed(mLastAnrDumpClearer,
                             LAST_ANR_LIFETIME_DURATION_MSECS);
-                    String anrMessage = "executing service " + timeout.shortInstanceName;
-                    timeoutRecord = TimeoutRecord.forServiceExec(anrMessage);
+                    long waitedMillis = now - timeout.executingStart;
+                    timeoutRecord = TimeoutRecord.forServiceExec(timeout.shortInstanceName,
+                            waitedMillis);
                 } else {
                     Message msg = mAm.mHandler.obtainMessage(
                             ActivityManagerService.SERVICE_TIMEOUT_MSG);
diff --git a/services/core/java/com/android/server/am/ActivityManagerConstants.java b/services/core/java/com/android/server/am/ActivityManagerConstants.java
index de6522e..c20f0aa 100644
--- a/services/core/java/com/android/server/am/ActivityManagerConstants.java
+++ b/services/core/java/com/android/server/am/ActivityManagerConstants.java
@@ -22,6 +22,7 @@
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_POWER_QUICK;
 import static com.android.server.am.BroadcastConstants.DEFER_BOOT_COMPLETED_BROADCAST_BACKGROUND_RESTRICTED_ONLY;
 import static com.android.server.am.BroadcastConstants.DEFER_BOOT_COMPLETED_BROADCAST_TARGET_T_ONLY;
+import static com.android.server.am.BroadcastConstants.getDeviceConfigBoolean;
 
 import android.annotation.NonNull;
 import android.app.ActivityThread;
@@ -45,6 +46,7 @@
 import android.util.KeyValueListParser;
 import android.util.Slog;
 
+import com.android.internal.R;
 import com.android.internal.annotations.GuardedBy;
 
 import dalvik.annotation.optimization.NeverCompile;
@@ -153,6 +155,11 @@
     static final String KEY_TIERED_CACHED_ADJ_DECAY_TIME = "tiered_cached_adj_decay_time";
     static final String KEY_USE_MODERN_TRIM = "use_modern_trim";
 
+    /**
+     * Whether or not to enable the new oom adjuster implementation.
+     */
+    static final String KEY_ENABLE_NEW_OOMADJ = "enable_new_oom_adj";
+
     private static final int DEFAULT_MAX_CACHED_PROCESSES = 1024;
     private static final boolean DEFAULT_PRIORITIZE_ALARM_BROADCASTS = true;
     private static final long DEFAULT_FGSERVICE_MIN_SHOWN_TIME = 2*1000;
@@ -216,6 +223,11 @@
     private static final boolean DEFAULT_USE_MODERN_TRIM = true;
 
     /**
+     * The default value to {@link #KEY_ENABLE_NEW_OOMADJ}.
+     */
+    private static final boolean DEFAULT_ENABLE_NEW_OOM_ADJ = false;
+
+    /**
      * Same as {@link TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_NOT_ALLOWED}
      */
     private static final int
@@ -287,10 +299,6 @@
       */
     private static final String KEY_LOW_SWAP_THRESHOLD_PERCENT = "low_swap_threshold_percent";
 
-    /** Default value for mFlagApplicationStartInfoEnabled. Defaults to false. */
-    private static final String KEY_DEFAULT_APPLICATION_START_INFO_ENABLED =
-            "enable_app_start_info";
-
     /**
      * Default value for mFlagBackgroundActivityStartsEnabled if not explicitly set in
      * Settings.Global. This allows it to be set experimentally unless it has been
@@ -596,9 +604,6 @@
     // Controlled by Settings.Global.ACTIVITY_STARTS_LOGGING_ENABLED
     volatile boolean mFlagActivityStartsLoggingEnabled;
 
-    // Indicates whether ApplicationStartInfo is enabled.
-    volatile boolean mFlagApplicationStartInfoEnabled;
-
     // Indicates whether the background activity starts is enabled.
     // Controlled by Settings.Global.BACKGROUND_ACTIVITY_STARTS_ENABLED.
     // If not set explicitly the default is controlled by DeviceConfig.
@@ -1058,6 +1063,19 @@
     /** @see #KEY_USE_MODERN_TRIM */
     public boolean USE_MODERN_TRIM = DEFAULT_USE_MODERN_TRIM;
 
+    /** @see #KEY_ENABLE_NEW_OOMADJ */
+    public boolean ENABLE_NEW_OOMADJ = DEFAULT_ENABLE_NEW_OOM_ADJ;
+
+    /**
+     * Indicates whether PSS profiling in AppProfiler is disabled or not.
+     */
+    static final String KEY_DISABLE_APP_PROFILER_PSS_PROFILING =
+            "disable_app_profiler_pss_profiling";
+
+    private final boolean mDefaultDisableAppProfilerPssProfiling;
+
+    public boolean APP_PROFILER_PSS_PROFILING_DISABLED;
+
     private final OnPropertiesChangedListener mOnDeviceConfigChangedListener =
             new OnPropertiesChangedListener() {
                 @Override
@@ -1070,9 +1088,6 @@
                             case KEY_MAX_CACHED_PROCESSES:
                                 updateMaxCachedProcesses();
                                 break;
-                            case KEY_DEFAULT_APPLICATION_START_INFO_ENABLED:
-                                updateApplicationStartInfoEnabled();
-                                break;
                             case KEY_DEFAULT_BACKGROUND_ACTIVITY_STARTS_ENABLED:
                                 updateBackgroundActivityStarts();
                                 break;
@@ -1236,6 +1251,9 @@
                             case KEY_USE_MODERN_TRIM:
                                 updateUseModernTrim();
                                 break;
+                            case KEY_DISABLE_APP_PROFILER_PSS_PROFILING:
+                                updateDisableAppProfilerPssProfiling();
+                                break;
                             default:
                                 updateFGSPermissionEnforcementFlagsIfNecessary(name);
                                 break;
@@ -1317,7 +1335,10 @@
         CUR_TRIM_EMPTY_PROCESSES = rawMaxEmptyProcesses / 2;
         CUR_TRIM_CACHED_PROCESSES = (Integer.min(CUR_MAX_CACHED_PROCESSES, MAX_CACHED_PROCESSES)
                     - rawMaxEmptyProcesses) / 3;
-
+        loadNativeBootDeviceConfigConstants();
+        mDefaultDisableAppProfilerPssProfiling = context.getResources().getBoolean(
+                R.bool.config_am_disablePssProfiling);
+        APP_PROFILER_PSS_PROFILING_DISABLED = mDefaultDisableAppProfilerPssProfiling;
     }
 
     public void start(ContentResolver resolver) {
@@ -1345,6 +1366,8 @@
         // The following read from Settings.
         updateActivityStartsLoggingEnabled();
         updateForegroundServiceStartsLoggingEnabled();
+        // Read DropboxRateLimiter params from flags.
+        mService.initDropboxRateLimiter();
     }
 
     void loadDeviceConfigConstants() {
@@ -1355,6 +1378,11 @@
                         DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_COMPONENT_ALIAS));
     }
 
+    private void loadNativeBootDeviceConfigConstants() {
+        ENABLE_NEW_OOMADJ = getDeviceConfigBoolean(KEY_ENABLE_NEW_OOMADJ,
+                DEFAULT_ENABLE_NEW_OOM_ADJ);
+    }
+
     public void setOverrideMaxCachedProcesses(int value) {
         mOverrideMaxCachedProcesses = value;
         updateMaxCachedProcesses();
@@ -1491,14 +1519,6 @@
                 Settings.Global.ACTIVITY_STARTS_LOGGING_ENABLED, 1) == 1;
     }
 
-    private void updateApplicationStartInfoEnabled() {
-        mFlagApplicationStartInfoEnabled =
-                DeviceConfig.getBoolean(
-                        DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
-                        KEY_DEFAULT_APPLICATION_START_INFO_ENABLED,
-                        /*defaultValue*/ false);
-    }
-
     private void updateBackgroundActivityStarts() {
         mFlagBackgroundActivityStartsEnabled = DeviceConfig.getBoolean(
                 DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
@@ -2013,9 +2033,22 @@
             DEFAULT_USE_MODERN_TRIM);
     }
 
+    private void updateEnableNewOomAdj() {
+        ENABLE_NEW_OOMADJ = DeviceConfig.getBoolean(
+            DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT,
+            KEY_ENABLE_NEW_OOMADJ,
+            DEFAULT_ENABLE_NEW_OOM_ADJ);
+    }
+
     private void updateFGSPermissionEnforcementFlagsIfNecessary(@NonNull String name) {
         ForegroundServiceTypePolicy.getDefaultPolicy()
-                .updatePermissionEnforcementFlagIfNecessary(name);
+            .updatePermissionEnforcementFlagIfNecessary(name);
+    }
+
+    private void updateDisableAppProfilerPssProfiling() {
+        APP_PROFILER_PSS_PROFILING_DISABLED = DeviceConfig.getBoolean(
+                DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, KEY_DISABLE_APP_PROFILER_PSS_PROFILING,
+                mDefaultDisableAppProfilerPssProfiling);
     }
 
     @NeverCompile // Avoid size overhead of debugging code.
@@ -2123,10 +2156,6 @@
         pw.println(mFgToBgFgsGraceDuration);
         pw.print("  "); pw.print(KEY_FGS_START_FOREGROUND_TIMEOUT); pw.print("=");
         pw.println(mFgsStartForegroundTimeoutMs);
-        pw.print("  ");
-        pw.print(KEY_DEFAULT_APPLICATION_START_INFO_ENABLED);
-        pw.print("=");
-        pw.println(mFlagApplicationStartInfoEnabled);
         pw.print("  "); pw.print(KEY_DEFAULT_BACKGROUND_ACTIVITY_STARTS_ENABLED); pw.print("=");
         pw.println(mFlagBackgroundActivityStartsEnabled);
         pw.print("  "); pw.print(KEY_DEFAULT_BACKGROUND_FGS_STARTS_RESTRICTION_ENABLED);
@@ -2207,6 +2236,12 @@
         pw.print("  "); pw.print(KEY_TIERED_CACHED_ADJ_DECAY_TIME);
         pw.print("="); pw.println(TIERED_CACHED_ADJ_DECAY_TIME);
 
+        pw.print("  "); pw.print(KEY_ENABLE_NEW_OOMADJ);
+        pw.print("="); pw.println(ENABLE_NEW_OOMADJ);
+
+        pw.print("  "); pw.print(KEY_DISABLE_APP_PROFILER_PSS_PROFILING);
+        pw.print("="); pw.println(APP_PROFILER_PSS_PROFILING_DISABLED);
+
         pw.println();
         if (mOverrideMaxCachedProcesses >= 0) {
             pw.print("  mOverrideMaxCachedProcesses="); pw.println(mOverrideMaxCachedProcesses);
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index ce9e7b5..a53c2fb 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -1530,7 +1530,8 @@
      */
     int mBootPhase;
 
-    volatile boolean mDeterministicUidIdle = false;
+    @GuardedBy("this")
+    boolean mDeterministicUidIdle = false;
 
     @VisibleForTesting
     public WindowManagerService mWindowManager;
@@ -2028,6 +2029,7 @@
                 app.makeActive(mSystemThread.getApplicationThread(), mProcessStats);
                 app.mProfile.addHostingComponentType(HOSTING_COMPONENT_TYPE_SYSTEM);
                 addPidLocked(app);
+                mOomAdjuster.onProcessBeginLocked(app);
                 updateLruProcessLocked(app, false, null);
                 updateOomAdjLocked(OOM_ADJ_REASON_SYSTEM_INIT);
             }
@@ -2421,7 +2423,9 @@
         mProcessList.init(this, activeUids, mPlatformCompat);
         mAppProfiler = new AppProfiler(this, BackgroundThread.getHandler().getLooper(), null);
         mPhantomProcessList = new PhantomProcessList(this);
-        mOomAdjuster = new OomAdjuster(this, mProcessList, activeUids, handlerThread);
+        mOomAdjuster = mConstants.ENABLE_NEW_OOMADJ
+                ? new OomAdjusterModernImpl(this, mProcessList, activeUids, handlerThread)
+                : new OomAdjuster(this, mProcessList, activeUids, handlerThread);
 
         mIntentFirewall = null;
         mProcessStats = new ProcessStatsService(this, mContext.getCacheDir());
@@ -2482,7 +2486,9 @@
         mAppProfiler = new AppProfiler(this, BackgroundThread.getHandler().getLooper(),
                 new LowMemDetector(this));
         mPhantomProcessList = new PhantomProcessList(this);
-        mOomAdjuster = new OomAdjuster(this, mProcessList, activeUids);
+        mOomAdjuster = mConstants.ENABLE_NEW_OOMADJ
+                ? new OomAdjusterModernImpl(this, mProcessList, activeUids)
+                : new OomAdjuster(this, mProcessList, activeUids);
 
         // Broadcast policy parameters
         final BroadcastConstants foreConstants = new BroadcastConstants(
@@ -4610,6 +4616,7 @@
         EventLogTags.writeAmProcBound(app.userId, pid, app.processName);
 
         synchronized (mProcLock) {
+            mOomAdjuster.onProcessBeginLocked(app);
             mOomAdjuster.setAttachingProcessStatesLSP(app);
             clearProcessForegroundLocked(app);
             app.setDebugging(false);
@@ -4739,6 +4746,7 @@
             } else if (instr2 != null) {
                 thread.bindApplication(processName, appInfo,
                         app.sdkSandboxClientAppVolumeUuid, app.sdkSandboxClientAppPackage,
+                        instr2.mIsSdkInSandbox,
                         providerList,
                         instr2.mClass,
                         profilerInfo, instr2.mArguments,
@@ -4755,6 +4763,7 @@
             } else {
                 thread.bindApplication(processName, appInfo,
                         app.sdkSandboxClientAppVolumeUuid, app.sdkSandboxClientAppPackage,
+                        /* isSdkInSandbox= */ false,
                         providerList, null, profilerInfo, null, null, null, testMode,
                         mBinderTransactionTrackingEnabled, enableTrackAllocation,
                         isRestrictedBackupMode || !normalMode, app.isPersistent(),
@@ -5860,12 +5869,25 @@
     /**
      * Allows if {@code pid} is {@link #MY_PID}, then denies if the {@code pid} has been denied
      * provided non-{@code null} {@code permission} before. Otherwise calls into
-     * {@link ActivityManager#checkComponentPermission(String, int, int, boolean)}.
+     * {@link ActivityManager#checkComponentPermission(String, int, int, int, boolean)}.
      */
     @PackageManager.PermissionResult
     @PermissionMethod
     public static int checkComponentPermission(@PermissionName String permission, int pid, int uid,
             int owningUid, boolean exported) {
+        return checkComponentPermission(permission, pid, uid, Context.DEVICE_ID_DEFAULT,
+                owningUid, exported);
+    }
+
+    /**
+     * Allows if {@code pid} is {@link #MY_PID}, then denies if the {@code pid} has been denied
+     * provided non-{@code null} {@code permission} before. Otherwise calls into
+     * {@link ActivityManager#checkComponentPermission(String, int, int, int, boolean)}.
+     */
+    @PackageManager.PermissionResult
+    @PermissionMethod
+    public static int checkComponentPermission(@PermissionName String permission, int pid, int uid,
+            int deviceId, int owningUid, boolean exported) {
         if (pid == MY_PID) {
             return PackageManager.PERMISSION_GRANTED;
         }
@@ -5884,7 +5906,7 @@
                 }
             }
         }
-        return ActivityManager.checkComponentPermission(permission, uid,
+        return ActivityManager.checkComponentPermission(permission, uid, deviceId,
                 owningUid, exported);
     }
 
@@ -5913,10 +5935,27 @@
     @PackageManager.PermissionResult
     @PermissionMethod
     public int checkPermission(@PermissionName String permission, int pid, int uid) {
+        return checkPermissionForDevice(permission, pid, uid, Context.DEVICE_ID_DEFAULT);
+    }
+
+    /**
+     * As the only public entry point for permissions checking, this method
+     * can enforce the semantic that requesting a check on a null global
+     * permission is automatically denied.  (Internally a null permission
+     * string is used when calling {@link #checkComponentPermission} in cases
+     * when only uid-based security is needed.)
+     *
+     * This can be called with or without the global lock held.
+     */
+    @Override
+    @PackageManager.PermissionResult
+    @PermissionMethod
+    public int checkPermissionForDevice(@PermissionName String permission, int pid, int uid,
+            int deviceId) {
         if (permission == null) {
             return PackageManager.PERMISSION_DENIED;
         }
-        return checkComponentPermission(permission, pid, uid, -1, true);
+        return checkComponentPermission(permission, pid, uid, deviceId, -1, true);
     }
 
     /**
@@ -6963,6 +7002,7 @@
                     sdkSandboxClientAppPackage,
                     new HostingRecord(HostingRecord.HOSTING_TYPE_ADDED_APPLICATION,
                             customProcess != null ? customProcess : info.processName));
+            mOomAdjuster.onProcessBeginLocked(app);
             updateLruProcessLocked(app, false, null);
             updateOomAdjLocked(app, OOM_ADJ_REASON_PROCESS_BEGIN);
         }
@@ -8146,8 +8186,8 @@
         return killed;
     }
 
-    @Override
-    public void killUid(int appId, int userId, String reason) {
+    private void killUid(int appId, int userId, int reason, int subReason,
+            String reasonAsString) {
         enforceCallingPermission(Manifest.permission.KILL_UID, "killUid");
         synchronized (this) {
             final long identity = Binder.clearCallingIdentity();
@@ -8158,9 +8198,9 @@
                             true /* callerWillRestart */, true /* doit */,
                             true /* evenPersistent */, false /* setRemoved */,
                             false /* uninstalling */,
-                            ApplicationExitInfo.REASON_OTHER,
-                            ApplicationExitInfo.SUBREASON_KILL_UID,
-                            reason != null ? reason : "kill uid");
+                            reason,
+                            subReason,
+                            reasonAsString != null ? reasonAsString : "kill uid");
                 }
             } finally {
                 Binder.restoreCallingIdentity(identity);
@@ -8169,6 +8209,12 @@
     }
 
     @Override
+    public void killUid(int appId, int userId, String reason) {
+        killUid(appId, userId, ApplicationExitInfo.REASON_OTHER,
+                ApplicationExitInfo.SUBREASON_KILL_UID, reason);
+    }
+
+    @Override
     public void killUidForPermissionChange(int appId, int userId, String reason) {
         enforceCallingPermission(Manifest.permission.KILL_UID, "killUid");
         synchronized (this) {
@@ -8633,10 +8679,7 @@
                 t.traceEnd();
             }
 
-            t.traceBegin("showSystemReadyErrorDialogs");
-            mAtmInternal.showSystemReadyErrorDialogsIfNeeded();
-            t.traceEnd();
-
+            mHandler.post(mAtmInternal::showSystemReadyErrorDialogsIfNeeded);
 
             if (isBootingSystemUser) {
                 // Need to send the broadcasts for the system user here because
@@ -8686,6 +8729,8 @@
                             Slog.i(TAG, "Skipping kill (uid is SYSTEM)");
                         } else {
                             killUid(UserHandle.getAppId(uid), UserHandle.getUserId(uid),
+                                    ApplicationExitInfo.REASON_EXCESSIVE_RESOURCE_USAGE,
+                                    ApplicationExitInfo.SUBREASON_EXCESSIVE_BINDER_OBJECTS,
                                     "Too many Binders sent to SYSTEM");
                             // We need to run a GC here, because killing the processes involved
                             // actually isn't guaranteed to free up the proxies; in fact, if the
@@ -8699,7 +8744,7 @@
                             // cleaning up the old proxies.
                             VMRuntime.getRuntime().requestConcurrentGC();
                         }
-                    }, mHandler);
+                    }, BackgroundThread.getHandler());
             t.traceEnd(); // setBinderProxies
 
             t.traceEnd(); // ActivityManagerStartApps
@@ -8991,7 +9036,9 @@
         final boolean isSystemApp = process == null ||
                 (process.info.flags & (ApplicationInfo.FLAG_SYSTEM |
                                        ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) != 0;
-        final String processName = process == null ? "unknown" : process.processName;
+        final String processName = process != null && process.getPid() == MY_PID
+                ? "system_server"
+                : (process == null ? "unknown" : process.processName);
         final DropBoxManager dbox = (DropBoxManager)
                 mContext.getSystemService(Context.DROPBOX_SERVICE);
 
@@ -9257,6 +9304,11 @@
 
     private final DropboxRateLimiter mDropboxRateLimiter = new DropboxRateLimiter();
 
+    /** Initializes the Dropbox Rate Limiter parameters from flags. */
+    public void initDropboxRateLimiter() {
+        mDropboxRateLimiter.init();
+    }
+
     /**
      * Write a description of an error (crash, WTF, ANR) to the drop box.
      * @param eventType to include in the drop box tag ("crash", "wtf", etc.)
@@ -9534,14 +9586,9 @@
         return retList;
     }
 
-    /* @hide */
     @Override
     public ParceledListSlice<ApplicationStartInfo> getHistoricalProcessStartReasons(
             String packageName, int maxNum, int userId) {
-        if (!mConstants.mFlagApplicationStartInfoEnabled) {
-            return new ParceledListSlice<ApplicationStartInfo>(
-                new ArrayList<ApplicationStartInfo>());
-        }
         enforceNotIsolatedCaller("getHistoricalProcessStartReasons");
 
         final ArrayList<ApplicationStartInfo> results = new ArrayList<ApplicationStartInfo>();
@@ -9550,24 +9597,28 @@
     }
 
 
-    /* @hide */
     @Override
     public void setApplicationStartInfoCompleteListener(
             IApplicationStartInfoCompleteListener listener, int userId) {
-        if (!mConstants.mFlagApplicationStartInfoEnabled) {
-            return;
-        }
         enforceNotIsolatedCaller("setApplicationStartInfoCompleteListener");
     }
 
 
-    /* @hide */
     @Override
-    public void removeApplicationStartInfoCompleteListener(int userId) {
-        if (!mConstants.mFlagApplicationStartInfoEnabled) {
-            return;
+    public void clearApplicationStartInfoCompleteListener(int userId) {
+        enforceNotIsolatedCaller("clearApplicationStartInfoCompleteListener");
+
+        // For the simplification, we don't support USER_ALL nor USER_CURRENT here.
+        if (userId == UserHandle.USER_ALL || userId == UserHandle.USER_CURRENT) {
+            throw new IllegalArgumentException("Unsupported userId");
         }
-        enforceNotIsolatedCaller("removeApplicationStartInfoCompleteListener");
+
+        final int callingUid = Binder.getCallingUid();
+    }
+
+    @Override
+    public void addStartInfoTimestamp(int key, long timestampNs, int userId) {
+        enforceNotIsolatedCaller("addStartInfoTimestamp");
     }
 
     @Override
@@ -9717,6 +9768,11 @@
     public void onShellCommand(FileDescriptor in, FileDescriptor out,
             FileDescriptor err, String[] args, ShellCallback callback,
             ResultReceiver resultReceiver) {
+        final int callingUid = Binder.getCallingUid();
+        if (callingUid != ROOT_UID && callingUid != Process.SHELL_UID) {
+            resultReceiver.send(-1, null);
+            throw new SecurityException("Shell commands are only callable by root or shell");
+        }
         (new ActivityManagerShellCommand(this, false)).exec(
                 this, in, out, err, args, callback, resultReceiver);
     }
@@ -15592,7 +15648,8 @@
                         ai,
                         noRestart,
                         disableHiddenApiChecks,
-                        disableTestApiChecks);
+                        disableTestApiChecks,
+                        (flags & ActivityManager.INSTR_FLAG_INSTRUMENT_SDK_IN_SANDBOX) != 0);
             }
 
             ActiveInstrumentation activeInstr = new ActiveInstrumentation(this);
@@ -15689,7 +15746,8 @@
             ApplicationInfo sdkSandboxClientAppInfo,
             boolean noRestart,
             boolean disableHiddenApiChecks,
-            boolean disableTestApiChecks) {
+            boolean disableTestApiChecks,
+            boolean isSdkInSandbox) {
 
         if (noRestart) {
             reportStartInstrumentationFailureLocked(
@@ -15699,16 +15757,6 @@
             return false;
         }
 
-        final ApplicationInfo sdkSandboxInfo;
-        try {
-            final PackageManager pm = mContext.getPackageManager();
-            sdkSandboxInfo = pm.getApplicationInfoAsUser(pm.getSdkSandboxPackageName(), 0, userId);
-        } catch (NameNotFoundException e) {
-            reportStartInstrumentationFailureLocked(
-                    watcher, className, "Can't find SdkSandbox package");
-            return false;
-        }
-
         final SdkSandboxManagerLocal sandboxManagerLocal =
                 LocalManagerRegistry.getManager(SdkSandboxManagerLocal.class);
         if (sandboxManagerLocal == null) {
@@ -15717,13 +15765,22 @@
             return false;
         }
 
-        final String processName = sandboxManagerLocal.getSdkSandboxProcessNameForInstrumentation(
-                sdkSandboxClientAppInfo);
+        final ApplicationInfo sdkSandboxInfo;
+        try {
+            sdkSandboxInfo =
+                    sandboxManagerLocal.getSdkSandboxApplicationInfoForInstrumentation(
+                            sdkSandboxClientAppInfo, userId, isSdkInSandbox);
+        } catch (NameNotFoundException e) {
+            reportStartInstrumentationFailureLocked(
+                    watcher, className, "Can't find SdkSandbox package");
+            return false;
+        }
 
         ActiveInstrumentation activeInstr = new ActiveInstrumentation(this);
         activeInstr.mClass = className;
-        activeInstr.mTargetProcesses = new String[]{processName};
+        activeInstr.mTargetProcesses = new String[]{sdkSandboxInfo.processName};
         activeInstr.mTargetInfo = sdkSandboxInfo;
+        activeInstr.mIsSdkInSandbox = isSdkInSandbox;
         activeInstr.mProfileFile = profileFile;
         activeInstr.mArguments = arguments;
         activeInstr.mWatcher = watcher;
@@ -15740,7 +15797,6 @@
             sandboxManagerLocal.notifyInstrumentationStarted(
                     sdkSandboxClientAppInfo.packageName, sdkSandboxClientAppInfo.uid);
             synchronized (mProcLock) {
-                int sdkSandboxUid = Process.toSdkSandboxUid(sdkSandboxClientAppInfo.uid);
                 // Kill the package sdk sandbox process belong to. At this point sdk sandbox is
                 // already killed.
                 forceStopPackageLocked(
@@ -15756,10 +15812,10 @@
 
                 ProcessRecord app = addAppLocked(
                         sdkSandboxInfo,
-                        processName,
+                        sdkSandboxInfo.processName,
                         /* isolated= */ false,
                         /* isSdkSandbox= */ true,
-                        sdkSandboxUid,
+                        sdkSandboxInfo.uid,
                         sdkSandboxClientAppInfo.packageName,
                         disableHiddenApiChecks,
                         disableTestApiChecks,
@@ -16586,7 +16642,9 @@
 
     @Override
     public void setDeterministicUidIdle(boolean deterministic) {
-        mDeterministicUidIdle = deterministic;
+        synchronized (this) {
+            mDeterministicUidIdle = deterministic;
+        }
     }
 
     /** Make the currently active UIDs idle after a certain grace period. */
@@ -19888,7 +19946,8 @@
                     return superImpl.apply(code, new AttributionSource(shellUid,
                             Process.INVALID_PID, "com.android.shell",
                             attributionSource.getAttributionTag(), attributionSource.getToken(),
-                            /*renouncedPermissions*/ null, attributionSource.getNext()),
+                            /*renouncedPermissions*/ null, attributionSource.getDeviceId(),
+                            attributionSource.getNext()),
                             shouldCollectAsyncNotedOp, message, shouldCollectMessage,
                             skiProxyOperation);
                 } finally {
@@ -19941,7 +20000,8 @@
                     return superImpl.apply(clientId, code, new AttributionSource(shellUid,
                             Process.INVALID_PID, "com.android.shell",
                             attributionSource.getAttributionTag(), attributionSource.getToken(),
-                            /*renouncedPermissions*/ null, attributionSource.getNext()),
+                            /*renouncedPermissions*/ null, attributionSource.getDeviceId(),
+                            attributionSource.getNext()),
                             startIfModeDefault, shouldCollectAsyncNotedOp, message,
                             shouldCollectMessage, skipProxyOperation, proxyAttributionFlags,
                             proxiedAttributionFlags, attributionChainId);
@@ -19967,7 +20027,8 @@
                     superImpl.apply(clientId, code, new AttributionSource(shellUid,
                             Process.INVALID_PID, "com.android.shell",
                             attributionSource.getAttributionTag(), attributionSource.getToken(),
-                            /*renouncedPermissions*/ null, attributionSource.getNext()),
+                            /*renouncedPermissions*/ null, attributionSource.getDeviceId(),
+                            attributionSource.getNext()),
                             skipProxyOperation);
                 } finally {
                     Binder.restoreCallingIdentity(identity);
diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
index 6801d27..c0ac1f8 100644
--- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
+++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java
@@ -228,6 +228,9 @@
         final PrintWriter pw = getOutPrintWriter();
         try {
             switch (cmd) {
+                case "help":
+                    onHelp();
+                    return 0;
                 case "start":
                 case "start-activity":
                     return runStartActivity(pw);
diff --git a/services/core/java/com/android/server/am/AppBatteryTracker.java b/services/core/java/com/android/server/am/AppBatteryTracker.java
index c2326f6..128bbdf 100644
--- a/services/core/java/com/android/server/am/AppBatteryTracker.java
+++ b/services/core/java/com/android/server/am/AppBatteryTracker.java
@@ -58,6 +58,7 @@
 import android.os.BatteryUsageStatsQuery;
 import android.os.PowerExemptionManager;
 import android.os.PowerExemptionManager.ReasonCode;
+import android.os.Process;
 import android.os.SystemClock;
 import android.os.UidBatteryConsumer;
 import android.os.UserHandle;
@@ -1975,15 +1976,15 @@
             if (!mBgCurrentDrainHighThresholdByBgLocation) {
                 return false;
             }
-            final AppRestrictionController controller = mTracker.mAppRestrictionController;
-            if (mInjector.getPermissionManagerServiceInternal().checkUidPermission(
-                    uid, ACCESS_BACKGROUND_LOCATION) == PERMISSION_GRANTED) {
+            if (mTracker.mContext.checkPermission(ACCESS_BACKGROUND_LOCATION,
+                    Process.INVALID_PID, uid) == PERMISSION_GRANTED) {
                 return true;
             }
             if (!mBgCurrentDrainEventDurationBasedThresholdEnabled) {
                 return false;
             }
             final long since = Math.max(0, now - window);
+            final AppRestrictionController controller = mTracker.mAppRestrictionController;
             final long locationDuration = controller.getForegroundServiceTotalDurationsSince(
                     uid, since, now, ServiceInfo.FOREGROUND_SERVICE_TYPE_LOCATION);
             return locationDuration >= mBgCurrentDrainLocationMinDuration;
diff --git a/services/core/java/com/android/server/am/AppPermissionTracker.java b/services/core/java/com/android/server/am/AppPermissionTracker.java
index 722d0d4..18a9153 100644
--- a/services/core/java/com/android/server/am/AppPermissionTracker.java
+++ b/services/core/java/com/android/server/am/AppPermissionTracker.java
@@ -43,6 +43,7 @@
 import android.content.pm.PackageManagerInternal;
 import android.os.Handler;
 import android.os.Message;
+import android.os.Process;
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.os.UserHandle;
@@ -292,8 +293,8 @@
                 mPermissionGranted = true;
                 return;
             }
-            mPermissionGranted = mInjector.getPermissionManagerServiceInternal()
-                    .checkUidPermission(mUid, mPermission) == PERMISSION_GRANTED;
+            mPermissionGranted = mContext.checkPermission(mPermission, Process.INVALID_PID, mUid)
+                    == PERMISSION_GRANTED;
         }
 
         void updateAppOps() {
diff --git a/services/core/java/com/android/server/am/AppProfiler.java b/services/core/java/com/android/server/am/AppProfiler.java
index 16f2226..e7f4bf9 100644
--- a/services/core/java/com/android/server/am/AppProfiler.java
+++ b/services/core/java/com/android/server/am/AppProfiler.java
@@ -633,16 +633,20 @@
                     return st.vsize > 0 && st.uid < FIRST_APPLICATION_UID;
                 });
             }
-            final int numOfStats = stats.size();
-            for (int j = 0; j < numOfStats; j++) {
-                synchronized (mService.mPidsSelfLocked) {
-                    if (mService.mPidsSelfLocked.indexOfKey(stats.get(j).pid) >= 0) {
-                        // This is one of our own processes; skip it.
-                        continue;
+
+            if (!mService.mConstants.APP_PROFILER_PSS_PROFILING_DISABLED) {
+                final int numOfStats = stats.size();
+                for (int j = 0; j < numOfStats; j++) {
+                    synchronized (mService.mPidsSelfLocked) {
+                        if (mService.mPidsSelfLocked.indexOfKey(stats.get(j).pid) >= 0) {
+                            // This is one of our own processes; skip it.
+                            continue;
+                        }
                     }
+                    nativeTotalPss += Debug.getPss(stats.get(j).pid, null, null);
                 }
-                nativeTotalPss += Debug.getPss(stats.get(j).pid, null, null);
             }
+
             memInfo.readMemInfo();
             synchronized (mService.mProcessStats.mLock) {
                 if (DEBUG_PSS) {
@@ -706,7 +710,8 @@
                 final boolean skipPSSCollection =
                         (profile.mApp.mOptRecord != null
                          && profile.mApp.mOptRecord.skipPSSCollectionBecauseFrozen())
-                        || mService.isCameraActiveForUid(profile.mApp.uid);
+                        || mService.isCameraActiveForUid(profile.mApp.uid)
+                        || mService.mConstants.APP_PROFILER_PSS_PROFILING_DISABLED;
                 long pss = skipPSSCollection ? 0 : Debug.getPss(pid, tmp, null);
                 long endTime = SystemClock.currentThreadTimeMillis();
                 synchronized (mProfilerLock) {
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index dc6f858..04ebb2b 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -17,7 +17,6 @@
 package com.android.server.am;
 
 import static android.Manifest.permission.BATTERY_STATS;
-import static android.Manifest.permission.BLUETOOTH_CONNECT;
 import static android.Manifest.permission.DEVICE_POWER;
 import static android.Manifest.permission.NETWORK_STACK;
 import static android.Manifest.permission.POWER_SAVER;
@@ -85,6 +84,7 @@
 import android.provider.Settings;
 import android.telephony.DataConnectionRealTimeInfo;
 import android.telephony.ModemActivityInfo;
+import android.telephony.NetworkRegistrationInfo;
 import android.telephony.SignalStrength;
 import android.telephony.TelephonyManager;
 import android.util.IndentingPrintWriter;
@@ -96,6 +96,8 @@
 import com.android.internal.app.IBatteryStats;
 import com.android.internal.os.BackgroundThread;
 import com.android.internal.os.BinderCallsStats;
+import com.android.internal.os.CpuScalingPolicies;
+import com.android.internal.os.CpuScalingPolicyReader;
 import com.android.internal.os.PowerProfile;
 import com.android.internal.os.RailStats;
 import com.android.internal.os.RpmStats;
@@ -108,6 +110,7 @@
 import com.android.server.Watchdog;
 import com.android.server.net.BaseNetworkObserver;
 import com.android.server.pm.UserManagerInternal;
+import com.android.server.power.optimization.Flags;
 import com.android.server.power.stats.BatteryExternalStatsWorker;
 import com.android.server.power.stats.BatteryStatsImpl;
 import com.android.server.power.stats.BatteryUsageStatsProvider;
@@ -152,6 +155,7 @@
     private static IBatteryStats sService;
 
     private final PowerProfile mPowerProfile;
+    private final CpuScalingPolicies mCpuScalingPolicies;
     final BatteryStatsImpl mStats;
     final CpuWakeupStats mCpuWakeupStats;
     private final BatteryUsageStatsStore mBatteryUsageStatsStore;
@@ -368,14 +372,14 @@
         mHandler = new Handler(mHandlerThread.getLooper());
 
         mPowerProfile = new PowerProfile(context);
+        mCpuScalingPolicies = new CpuScalingPolicyReader().read();
 
         mStats = new BatteryStatsImpl(systemDir, handler, this,
-                this, mUserManagerUserInfoProvider);
+                this, mUserManagerUserInfoProvider, mPowerProfile, mCpuScalingPolicies);
         mWorker = new BatteryExternalStatsWorker(context, mStats);
         mStats.setExternalStatsSyncLocked(mWorker);
         mStats.setRadioScanningTimeoutLocked(mContext.getResources().getInteger(
                 com.android.internal.R.integer.config_radioScanningTimeout) * 1000L);
-        mStats.setPowerProfileLocked(mPowerProfile);
 
         final boolean resetOnUnplugHighBatteryLevel = context.getResources().getBoolean(
                 com.android.internal.R.bool.config_batteryStatsResetOnUnplugHighBatteryLevel);
@@ -1584,7 +1588,8 @@
     @Override
     @EnforcePermission(UPDATE_DEVICE_STATS)
     public void notePhoneDataConnectionState(final int dataType, final boolean hasData,
-            final int serviceType, final int nrFrequency) {
+            final int serviceType, @NetworkRegistrationInfo.NRState final int nrState,
+            final int nrFrequency) {
         super.notePhoneDataConnectionState_enforcePermission();
 
         synchronized (mLock) {
@@ -1593,7 +1598,7 @@
             mHandler.post(() -> {
                 synchronized (mStats) {
                     mStats.notePhoneDataConnectionStateLocked(dataType, hasData, serviceType,
-                            nrFrequency, elapsedRealtime, uptime);
+                            nrState, nrFrequency, elapsedRealtime, uptime);
                 }
             });
         }
@@ -2603,6 +2608,10 @@
         awaitCompletion();
         synchronized (mStats) {
             mStats.dumpConstantsLocked(pw);
+
+            pw.println("Flags:");
+            pw.println("    " + Flags.FLAG_STREAMLINED_BATTERY_STATS
+                    + ": " + Flags.streamlinedBatteryStats());
         }
     }
 
@@ -2916,8 +2925,8 @@
                                 in.setDataPosition(0);
                                 BatteryStatsImpl checkinStats = new BatteryStatsImpl(
                                         null, mStats.mHandler, null, null,
-                                        mUserManagerUserInfoProvider);
-                                checkinStats.setPowerProfileLocked(mPowerProfile);
+                                        mUserManagerUserInfoProvider, mPowerProfile,
+                                        mCpuScalingPolicies);
                                 checkinStats.readSummaryFromParcel(in);
                                 in.recycle();
                                 checkinStats.dumpProtoLocked(
@@ -2957,8 +2966,8 @@
                                 in.setDataPosition(0);
                                 BatteryStatsImpl checkinStats = new BatteryStatsImpl(
                                         null, mStats.mHandler, null, null,
-                                        mUserManagerUserInfoProvider);
-                                checkinStats.setPowerProfileLocked(mPowerProfile);
+                                        mUserManagerUserInfoProvider, mPowerProfile,
+                                        mCpuScalingPolicies);
                                 checkinStats.readSummaryFromParcel(in);
                                 in.recycle();
                                 checkinStats.dumpCheckin(mContext, pw, apps, flags,
diff --git a/services/core/java/com/android/server/am/BroadcastConstants.java b/services/core/java/com/android/server/am/BroadcastConstants.java
index 8c1fd51..2fff79b 100644
--- a/services/core/java/com/android/server/am/BroadcastConstants.java
+++ b/services/core/java/com/android/server/am/BroadcastConstants.java
@@ -373,7 +373,7 @@
      * Return the {@link SystemProperty} name for the given key in our
      * {@link DeviceConfig} namespace.
      */
-    private @NonNull String propertyFor(@NonNull String key) {
+    private static @NonNull String propertyFor(@NonNull String key) {
         return "persist.device_config." + NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT + "." + key;
     }
 
@@ -382,11 +382,11 @@
      * {@link DeviceConfig} namespace, but with a different prefix that can be
      * used to locally override the {@link DeviceConfig} value.
      */
-    private @NonNull String propertyOverrideFor(@NonNull String key) {
+    private static @NonNull String propertyOverrideFor(@NonNull String key) {
         return "persist.sys." + NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT + "." + key;
     }
 
-    private boolean getDeviceConfigBoolean(@NonNull String key, boolean def) {
+    static boolean getDeviceConfigBoolean(@NonNull String key, boolean def) {
         return SystemProperties.getBoolean(propertyOverrideFor(key),
                 SystemProperties.getBoolean(propertyFor(key), def));
     }
diff --git a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
index 5d0fefc..8d2edaa 100644
--- a/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
+++ b/services/core/java/com/android/server/am/BroadcastQueueModernImpl.java
@@ -1725,13 +1725,15 @@
 
     @Override
     public boolean isDelayBehindServices() {
-        // TODO: implement
+        // Modern queue does not alter the broadcasts delivery behavior based on background
+        // services, so ignore.
         return false;
     }
 
     @Override
     public void backgroundServicesFinishedLocked(int userId) {
-        // TODO: implement
+        // Modern queue does not alter the broadcasts delivery behavior based on background
+        // services, so ignore.
     }
 
     private void checkHealth() {
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java
index be514c5..1a58556 100644
--- a/services/core/java/com/android/server/am/CachedAppOptimizer.java
+++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java
@@ -241,7 +241,8 @@
     private static final int FREEZE_BINDER_TIMEOUT_MS = 0;
     private static final int FREEZE_DEADLOCK_TIMEOUT_MS = 1000;
 
-    @VisibleForTesting static final boolean ENABLE_FILE_COMPACT = false;
+    // If enabled, any compaction issued will apply to code mappings and share memory mappings.
+    @VisibleForTesting static final boolean ENABLE_SHARED_AND_CODE_COMPACT = false;
 
     // Defaults for phenotype flags.
     @VisibleForTesting static final boolean DEFAULT_USE_COMPACTION = true;
@@ -1594,15 +1595,22 @@
 
     void onWakefulnessChanged(int wakefulness) {
         if(wakefulness == PowerManagerInternal.WAKEFULNESS_AWAKE) {
-            // Remove any pending compaction we may have scheduled to happen while screen was off
-            Slog.e(TAG_AM, "Cancel pending or running compactions as system is awake");
-            cancelAllCompactions(CancelCompactReason.SCREEN_ON);
+            if (useCompaction()) {
+                // Remove any pending compaction we may have scheduled to happen while screen was
+                // off
+                cancelAllCompactions(CancelCompactReason.SCREEN_ON);
+            }
         }
     }
 
     void cancelAllCompactions(CancelCompactReason reason) {
         synchronized (mProcLock) {
             while(!mPendingCompactionProcesses.isEmpty()) {
+                if (DEBUG_COMPACTION) {
+                    Slog.e(TAG_AM,
+                            "Cancel pending compaction as system is awake for process="
+                                    + mPendingCompactionProcesses.get(0).processName);
+                }
                 cancelCompactionForProcess(mPendingCompactionProcesses.get(0), reason);
             }
             mPendingCompactionProcesses.clear();
@@ -1679,7 +1687,7 @@
             }
         }
 
-        if (!ENABLE_FILE_COMPACT) {
+        if (!ENABLE_SHARED_AND_CODE_COMPACT) {
             if (profile == CompactProfile.SOME) {
                 profile = CompactProfile.NONE;
             } else if (profile == CompactProfile.FULL) {
diff --git a/services/core/java/com/android/server/am/ComponentAliasResolver.java b/services/core/java/com/android/server/am/ComponentAliasResolver.java
index f9eaf02..6e93ce4 100644
--- a/services/core/java/com/android/server/am/ComponentAliasResolver.java
+++ b/services/core/java/com/android/server/am/ComponentAliasResolver.java
@@ -162,7 +162,7 @@
                     // avoid deadlocks.
                     if (enabled) {
                         mPackageMonitor.register(mAm.mContext, UserHandle.ALL,
-                                /* externalStorage= */ false, BackgroundThread.getHandler());
+                                BackgroundThread.getHandler());
                     } else {
                         mPackageMonitor.unregister();
                     }
diff --git a/services/core/java/com/android/server/am/ContentProviderHelper.java b/services/core/java/com/android/server/am/ContentProviderHelper.java
index 3f7d8ba..65fd54a 100644
--- a/services/core/java/com/android/server/am/ContentProviderHelper.java
+++ b/services/core/java/com/android/server/am/ContentProviderHelper.java
@@ -96,7 +96,9 @@
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 
 /**
@@ -116,6 +118,8 @@
     private final ProviderMap mProviderMap;
     private boolean mSystemProvidersInstalled;
 
+    private final Map<String, Boolean> mCloneProfileAuthorityRedirectionCache = new HashMap<>();
+
     ContentProviderHelper(ActivityManagerService service, boolean createProviderMap) {
         mService = service;
         mProviderMap = createProviderMap ? new ProviderMap(mService) : null;
@@ -201,9 +205,24 @@
             final UserProperties userProps = umInternal.getUserProperties(userId);
             final boolean isMediaSharedWithParent =
                     userProps != null && userProps.isMediaSharedWithParent();
-            if (!isAuthorityRedirectedForCloneProfile(name) || !isMediaSharedWithParent) {
+            if (!isAuthorityRedirectedForCloneProfileCached(name) || !isMediaSharedWithParent) {
                 // First check if this content provider has been published...
                 cpr = mProviderMap.getProviderByName(name, userId);
+                // In case we are on media authority and callingUid is cloned app asking to access
+                // the contentProvider of user 0 by specifying content as
+                // content://<parent-id>@media/external/file, we skip checkUser.
+                if (isAuthorityRedirectedForCloneProfileCached(name)) {
+                    final int callingUserId = UserHandle.getUserId(callingUid);
+                    final UserProperties userPropsCallingUser =
+                            umInternal.getUserProperties(callingUserId);
+                    final boolean isMediaSharedWithParentForCallingUser =
+                            userPropsCallingUser != null
+                                    && userPropsCallingUser.isMediaSharedWithParent();
+                    if (isMediaSharedWithParentForCallingUser
+                            && umInternal.getProfileParentId(callingUserId) == userId) {
+                        checkCrossUser = false;
+                    }
+                }
             }
             // If that didn't work, check if it exists for user 0 and then
             // verify that it's a singleton provider before using it.
@@ -218,7 +237,7 @@
                                         r == null ? callingUid : r.uid, cpi.applicationInfo.uid)) {
                         userId = UserHandle.USER_SYSTEM;
                         checkCrossUser = false;
-                    } else if (isAuthorityRedirectedForCloneProfile(name)) {
+                    } else if (isAuthorityRedirectedForCloneProfileCached(name)) {
                         if (isMediaSharedWithParent) {
                             userId = umInternal.getProfileParentId(userId);
                             checkCrossUser = false;
@@ -256,7 +275,6 @@
                 if (r != null && cpr.canRunHere(r)) {
                     checkAssociationAndPermissionLocked(r, cpi, callingUid, userId, checkCrossUser,
                             cpr.name.flattenToShortString(), startTime);
-                    enforceContentProviderRestrictionsForSdkSandbox(cpi);
 
                     // This provider has been published or is in the process
                     // of being published...  but it is also allowed to run
@@ -457,7 +475,6 @@
                     // info and allow the caller to instantiate it.  Only do
                     // this if the provider is the same user as the caller's
                     // process, or can run as root (so can be in any process).
-                    enforceContentProviderRestrictionsForSdkSandbox(cpi);
                     return cpr.newHolder(null, true);
                 }
 
@@ -488,12 +505,11 @@
                                     cpr.appInfo.packageName, userId, Event.APP_COMPONENT_USED);
                         }
 
-                        // Content provider is now in use, its package can't be stopped.
                         try {
                             checkTime(startTime,
                                     "getContentProviderImpl: before set stopped state");
-                            mService.mPackageManagerInt.setPackageStoppedState(
-                                    cpr.appInfo.packageName, false, userId);
+                            mService.mPackageManagerInt.notifyComponentUsed(
+                                    cpr.appInfo.packageName, userId, callingPackage);
                             checkTime(startTime, "getContentProviderImpl: after set stopped state");
                         } catch (IllegalArgumentException e) {
                             Slog.w(TAG, "Failed trying to unstop package "
@@ -609,8 +625,6 @@
                 // Return a holder instance even if we are waiting for the publishing of the
                 // provider, client will check for the holder.provider to see if it needs to wait
                 // for it.
-                //todo(b/265965249) Need to perform cleanup before calling enforce method here
-                enforceContentProviderRestrictionsForSdkSandbox(cpi);
                 return cpr.newHolder(conn, false);
             }
         }
@@ -672,7 +686,6 @@
                     + " caller=" + callerName + "/" + Binder.getCallingUid());
             return null;
         }
-        enforceContentProviderRestrictionsForSdkSandbox(cpi);
         return cpr.newHolder(conn, false);
     }
 
@@ -1078,7 +1091,7 @@
             return false;
         }
 
-        if (isAuthorityRedirectedForCloneProfile(holder.info.authority)
+        if (isAuthorityRedirectedForCloneProfileCached(holder.info.authority)
                 && resolveParentUserIdForCloneProfile(userId) != userId) {
             // Since clone profile shares certain providers with its parent and the access is
             // re-directed as well, the holder may not actually be installed on the clone profile.
@@ -1113,7 +1126,7 @@
             userId = UserHandle.getCallingUserId();
         }
 
-        if (isAuthorityRedirectedForCloneProfile(authority)) {
+        if (isAuthorityRedirectedForCloneProfileCached(authority)) {
             UserManagerInternal umInternal = LocalServices.getService(UserManagerInternal.class);
             UserInfo userInfo = umInternal.getUserInfo(userId);
 
@@ -1150,7 +1163,6 @@
             appName = r.toString();
         }
 
-        enforceContentProviderRestrictionsForSdkSandbox(cpi);
         return checkContentProviderPermission(cpi, callingPid, Binder.getCallingUid(),
                 userId, checkUser, appName);
     }
@@ -1524,11 +1536,17 @@
 
     /**
      * Check if {@link ProcessRecord} has a possible chance at accessing the
-     * given {@link ProviderInfo}. Final permission checking is always done
+     * given {@link ProviderInfo}. First permission checking is for enforcing
+     * ContentProvider Restrictions from SdkSandboxManager.
+     * Final permission checking is always done
      * in {@link ContentProvider}.
      */
     private String checkContentProviderPermission(ProviderInfo cpi, int callingPid, int callingUid,
             int userId, boolean checkUser, String appName) {
+        if (!canAccessContentProviderFromSdkSandbox(cpi, callingUid)) {
+            return "ContentProvider access not allowed from sdk sandbox UID. "
+                    + "ProviderInfo: " + cpi.toString();
+        }
         boolean checkedGrants = false;
         if (checkUser) {
             // Looking for cross-user grants before enforcing the typical cross-users permissions
@@ -1918,11 +1936,10 @@
         }
     }
 
-    // Binder.clearCallingIdentity() shouldn't be called before this method
-    // as Binder should have its original callingUid for the check
-    private void enforceContentProviderRestrictionsForSdkSandbox(ProviderInfo cpi) {
-        if (!Process.isSdkSandboxUid(Binder.getCallingUid())) {
-            return;
+    private boolean canAccessContentProviderFromSdkSandbox(ProviderInfo cpi,
+                                                                    int callingUid) {
+        if (!Process.isSdkSandboxUid(callingUid)) {
+            return true;
         }
         final SdkSandboxManagerLocal sdkSandboxManagerLocal =
                 LocalManagerRegistry.getManager(SdkSandboxManagerLocal.class);
@@ -1931,11 +1948,7 @@
                     + "when checking whether SDK sandbox uid may "
                     + "access the contentprovider.");
         }
-        if (!sdkSandboxManagerLocal
-                .canAccessContentProviderFromSdkSandbox(cpi)) {
-            throw new SecurityException(
-                    "SDK sandbox uid may not access contentprovider " + cpi.name);
-        }
+        return sdkSandboxManagerLocal.canAccessContentProviderFromSdkSandbox(cpi);
     }
 
     /**
@@ -1959,4 +1972,14 @@
             String[] args) {
         return mProviderMap.dumpProviderProto(fd, pw, name, args);
     }
+
+    private Boolean isAuthorityRedirectedForCloneProfileCached(String auth) {
+        if (mCloneProfileAuthorityRedirectionCache.containsKey(auth)) {
+            return mCloneProfileAuthorityRedirectionCache.get(auth);
+        } else {
+            boolean isAuthRedirected = isAuthorityRedirectedForCloneProfile(auth);
+            mCloneProfileAuthorityRedirectionCache.put(auth, isAuthRedirected);
+            return isAuthRedirected;
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/am/CoreSettingsObserver.java b/services/core/java/com/android/server/am/CoreSettingsObserver.java
index 182205a..e84fed7 100644
--- a/services/core/java/com/android/server/am/CoreSettingsObserver.java
+++ b/services/core/java/com/android/server/am/CoreSettingsObserver.java
@@ -79,6 +79,8 @@
     static {
         sSecureSettingToTypeMap.put(Settings.Secure.LONG_PRESS_TIMEOUT, int.class);
         sSecureSettingToTypeMap.put(Settings.Secure.MULTI_PRESS_TIMEOUT, int.class);
+        sSecureSettingToTypeMap.put(Settings.Secure.KEY_REPEAT_TIMEOUT_MS, int.class);
+        sSecureSettingToTypeMap.put(Settings.Secure.KEY_REPEAT_DELAY_MS, int.class);
         // add other secure settings here...
 
         sSystemSettingToTypeMap.put(Settings.System.TIME_12_24, String.class);
diff --git a/services/core/java/com/android/server/am/DataConnectionStats.java b/services/core/java/com/android/server/am/DataConnectionStats.java
index f0910dc..e25dd05 100644
--- a/services/core/java/com/android/server/am/DataConnectionStats.java
+++ b/services/core/java/com/android/server/am/DataConnectionStats.java
@@ -98,18 +98,13 @@
                 mServiceState.getNetworkRegistrationInfo(DOMAIN_PS, TRANSPORT_TYPE_WWAN);
         int networkType = regInfo == null ? TelephonyManager.NETWORK_TYPE_UNKNOWN
                 : regInfo.getAccessNetworkTechnology();
-        // If the device is in NSA NR connection the networkType will report as LTE.
-        // For cell dwell rate metrics, this should report NR instead.
-        if (mNrState == NetworkRegistrationInfo.NR_STATE_CONNECTED) {
-            networkType = TelephonyManager.NETWORK_TYPE_NR;
-        }
         if (DEBUG) {
             Log.d(TAG, String.format("Noting data connection for network type %s: %svisible",
                     networkType, visible ? "" : "not "));
         }
         try {
             mBatteryStats.notePhoneDataConnectionState(networkType, visible,
-                    mServiceState.getState(), mServiceState.getNrFrequencyRange());
+                    mServiceState.getState(), mNrState, mServiceState.getNrFrequencyRange());
         } catch (RemoteException e) {
             Log.w(TAG, "Error noting data connection state", e);
         }
diff --git a/services/core/java/com/android/server/am/DropboxRateLimiter.java b/services/core/java/com/android/server/am/DropboxRateLimiter.java
index b5c7215..003e614 100644
--- a/services/core/java/com/android/server/am/DropboxRateLimiter.java
+++ b/services/core/java/com/android/server/am/DropboxRateLimiter.java
@@ -17,6 +17,7 @@
 package com.android.server.am;
 
 import android.os.SystemClock;
+import android.provider.DeviceConfig;
 import android.text.format.DateUtils;
 import android.util.ArrayMap;
 import android.util.Slog;
@@ -30,17 +31,26 @@
     // After RATE_LIMIT_ALLOWED_ENTRIES have been collected (for a single breakdown of
     // process/eventType) further entries will be rejected until RATE_LIMIT_BUFFER_DURATION has
     // elapsed, after which the current count for this breakdown will be reset.
-    private static final long RATE_LIMIT_BUFFER_DURATION = 10 * DateUtils.MINUTE_IN_MILLIS;
+    private static final long RATE_LIMIT_BUFFER_DURATION_DEFAULT = 10 * DateUtils.MINUTE_IN_MILLIS;
     // Indicated how many buffer durations to wait before the rate limit buffer will be cleared.
     // E.g. if set to 3 will wait 3xRATE_LIMIT_BUFFER_DURATION before clearing the buffer.
-    private static final long RATE_LIMIT_BUFFER_EXPIRY_FACTOR = 3;
+    private static final long RATE_LIMIT_BUFFER_EXPIRY_FACTOR_DEFAULT = 3;
     // The number of entries to keep per breakdown of process/eventType.
-    private static final int RATE_LIMIT_ALLOWED_ENTRIES = 6;
+    private static final int RATE_LIMIT_ALLOWED_ENTRIES_DEFAULT = 6;
 
     // If a process is rate limited twice in a row we consider it crash-looping and rate limit it
     // more aggressively.
-    private static final int STRICT_RATE_LIMIT_ALLOWED_ENTRIES = 1;
-    private static final long STRICT_RATE_LIMIT_BUFFER_DURATION = 20 * DateUtils.MINUTE_IN_MILLIS;
+    private static final int STRICT_RATE_LIMIT_ALLOWED_ENTRIES_DEFAULT = 1;
+    private static final long STRICT_RATE_LIMIT_BUFFER_DURATION_DEFAULT =
+            20 * DateUtils.MINUTE_IN_MILLIS;
+
+    private static final String FLAG_NAMESPACE = "dropbox";
+
+    private long mRateLimitBufferDuration;
+    private long mRateLimitBufferExpiryFactor;
+    private int mRateLimitAllowedEntries;
+    private int mStrictRatelimitAllowedEntries;
+    private long mStrictRateLimitBufferDuration;
 
     @GuardedBy("mErrorClusterRecords")
     private final ArrayMap<String, ErrorRecord> mErrorClusterRecords = new ArrayMap<>();
@@ -54,6 +64,36 @@
 
     public DropboxRateLimiter(Clock clock) {
         mClock = clock;
+
+        mRateLimitBufferDuration = RATE_LIMIT_BUFFER_DURATION_DEFAULT;
+        mRateLimitBufferExpiryFactor = RATE_LIMIT_BUFFER_EXPIRY_FACTOR_DEFAULT;
+        mRateLimitAllowedEntries = RATE_LIMIT_ALLOWED_ENTRIES_DEFAULT;
+        mStrictRatelimitAllowedEntries = STRICT_RATE_LIMIT_ALLOWED_ENTRIES_DEFAULT;
+        mStrictRateLimitBufferDuration = STRICT_RATE_LIMIT_BUFFER_DURATION_DEFAULT;
+    }
+
+    /** Initializes the rate limiter parameters from flags. */
+    public void init() {
+        mRateLimitBufferDuration = DeviceConfig.getLong(
+            FLAG_NAMESPACE,
+            "DropboxRateLimiter__rate_limit_buffer_duration",
+            RATE_LIMIT_BUFFER_DURATION_DEFAULT);
+        mRateLimitBufferExpiryFactor = DeviceConfig.getLong(
+            FLAG_NAMESPACE,
+            "DropboxRateLimiter__rate_limit_buffer_expiry_factor",
+            RATE_LIMIT_BUFFER_EXPIRY_FACTOR_DEFAULT);
+        mRateLimitAllowedEntries = DeviceConfig.getInt(
+            FLAG_NAMESPACE,
+            "DropboxRateLimiter__rate_limit_allowed_entries",
+            RATE_LIMIT_ALLOWED_ENTRIES_DEFAULT);
+        mStrictRatelimitAllowedEntries = DeviceConfig.getInt(
+            FLAG_NAMESPACE,
+            "DropboxRateLimiter__strict_rate_limit_allowed_entries",
+            STRICT_RATE_LIMIT_ALLOWED_ENTRIES_DEFAULT);
+        mStrictRateLimitBufferDuration = DeviceConfig.getLong(
+            FLAG_NAMESPACE,
+            "DropboxRateLimiter__strict_rate_limit_buffer_duration",
+            STRICT_RATE_LIMIT_BUFFER_DURATION_DEFAULT);
     }
 
     /** The interface clock to use for tracking the time elapsed. */
@@ -116,7 +156,7 @@
 
     private void maybeRemoveExpiredRecords(long currentTime) {
         if (currentTime - mLastMapCleanUp
-                <= RATE_LIMIT_BUFFER_EXPIRY_FACTOR * RATE_LIMIT_BUFFER_DURATION) {
+                <= mRateLimitBufferExpiryFactor * mRateLimitBufferDuration) {
             return;
         }
 
@@ -219,15 +259,15 @@
         }
 
         public int getAllowedEntries() {
-            return isRepeated() ? STRICT_RATE_LIMIT_ALLOWED_ENTRIES : RATE_LIMIT_ALLOWED_ENTRIES;
+            return isRepeated() ? mStrictRatelimitAllowedEntries : mRateLimitAllowedEntries;
         }
 
         public long getBufferDuration() {
-            return isRepeated() ? STRICT_RATE_LIMIT_BUFFER_DURATION : RATE_LIMIT_BUFFER_DURATION;
+            return isRepeated() ? mStrictRateLimitBufferDuration : mRateLimitBufferDuration;
         }
 
         public boolean hasExpired(long currentTime) {
-            long bufferExpiry = RATE_LIMIT_BUFFER_EXPIRY_FACTOR * getBufferDuration();
+            long bufferExpiry = mRateLimitBufferExpiryFactor * getBufferDuration();
             return currentTime - mStartTime > bufferExpiry;
         }
     }
diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java
index 459c6ff..d3176ee4 100644
--- a/services/core/java/com/android/server/am/OomAdjuster.java
+++ b/services/core/java/com/android/server/am/OomAdjuster.java
@@ -41,6 +41,7 @@
 import static android.app.ActivityManager.PROCESS_STATE_SERVICE;
 import static android.app.ActivityManager.PROCESS_STATE_TOP;
 import static android.app.ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND;
+import static android.app.ActivityManager.PROCESS_STATE_UNKNOWN;
 import static android.app.ActivityManagerInternal.OOM_ADJ_REASON_ACTIVITY;
 import static android.app.ActivityManagerInternal.OOM_ADJ_REASON_ALLOWLIST;
 import static android.app.ActivityManagerInternal.OOM_ADJ_REASON_BACKUP;
@@ -124,6 +125,7 @@
 import static com.android.server.am.ProcessList.VISIBLE_APP_ADJ;
 import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_SWITCH;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.app.ActivityManagerInternal.OomAdjReason;
@@ -369,20 +371,21 @@
      */
     private final Handler mProcessGroupHandler;
 
-    private final int[] mTmpSchedGroup = new int[1];
+    protected final int[] mTmpSchedGroup = new int[1];
 
-    private final ActivityManagerService mService;
-    private final ProcessList mProcessList;
-    private final ActivityManagerGlobalLock mProcLock;
+    final ActivityManagerService mService;
+    final ProcessList mProcessList;
+    final ActivityManagerGlobalLock mProcLock;
 
     private final int mNumSlots;
-    private final ArrayList<ProcessRecord> mTmpProcessList = new ArrayList<ProcessRecord>();
-    private final ArrayList<UidRecord> mTmpBecameIdle = new ArrayList<UidRecord>();
-    private final ActiveUids mTmpUidRecords;
-    private final ArrayDeque<ProcessRecord> mTmpQueue;
-    private final ArraySet<ProcessRecord> mTmpProcessSet = new ArraySet<>();
-    private final ArraySet<ProcessRecord> mPendingProcessSet = new ArraySet<>();
-    private final ArraySet<ProcessRecord> mProcessesInCycle = new ArraySet<>();
+    protected final ArrayList<ProcessRecord> mTmpProcessList = new ArrayList<ProcessRecord>();
+    protected final ArrayList<ProcessRecord> mTmpProcessList2 = new ArrayList<ProcessRecord>();
+    protected final ArrayList<UidRecord> mTmpBecameIdle = new ArrayList<UidRecord>();
+    protected final ActiveUids mTmpUidRecords;
+    protected final ArrayDeque<ProcessRecord> mTmpQueue;
+    protected final ArraySet<ProcessRecord> mTmpProcessSet = new ArraySet<>();
+    protected final ArraySet<ProcessRecord> mPendingProcessSet = new ArraySet<>();
+    protected final ArraySet<ProcessRecord> mProcessesInCycle = new ArraySet<>();
 
     /**
      * Flag to mark if there is an ongoing oomAdjUpdate: potentially the oomAdjUpdate
@@ -412,7 +415,7 @@
         this(service, processList, activeUids, createAdjusterThread());
     }
 
-    private static ServiceThread createAdjusterThread() {
+    static ServiceThread createAdjusterThread() {
         // The process group is usually critical to the response time of foreground app, so the
         // setter should apply it as soon as possible.
         final ServiceThread adjusterThread =
@@ -532,7 +535,7 @@
         mPendingProcessSet.remove(app);
 
         mProcessesInCycle.clear();
-        computeOomAdjLSP(app, cachedAdj, topApp, false, now, false, true);
+        computeOomAdjLSP(app, cachedAdj, topApp, false, now, false, true, oomAdjReason, true);
         if (!mProcessesInCycle.isEmpty()) {
             // We can't use the score here if there is a cycle, abort.
             for (int i = mProcessesInCycle.size() - 1; i >= 0; i--) {
@@ -550,7 +553,7 @@
                     && (uidRec.getSetProcState() != uidRec.getCurProcState()
                     || uidRec.getSetCapability() != uidRec.getCurCapability()
                     || uidRec.isSetAllowListed() != uidRec.isCurAllowListed())) {
-                ActiveUids uids = mTmpUidRecords;
+                final ActiveUids uids = mTmpUidRecords;
                 uids.clear();
                 uids.put(uidRec.getUid(), uidRec);
                 updateUidsLSP(uids, SystemClock.elapsedRealtime());
@@ -633,19 +636,20 @@
     }
 
     @GuardedBy({"mService", "mProcLock"})
-    private boolean performUpdateOomAdjLSP(ProcessRecord app, @OomAdjReason int oomAdjReason) {
+    protected boolean performUpdateOomAdjLSP(ProcessRecord app, @OomAdjReason int oomAdjReason) {
         final ProcessRecord topApp = mService.getTopApp();
 
         Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, oomAdjReasonToString(oomAdjReason));
         mService.mOomAdjProfiler.oomAdjStarted();
         mAdjSeq++;
 
-        // Firstly, try to see if the importance of itself gets changed
         final ProcessStateRecord state = app.mState;
         final boolean wasCached = state.isCached();
         final int oldAdj = state.getCurRawAdj();
         final int cachedAdj = oldAdj >= CACHED_APP_MIN_ADJ
                 ? oldAdj : UNKNOWN_ADJ;
+
+        // Firstly, try to see if the importance of itself gets changed
         final boolean wasBackground = ActivityManager.isProcStateBackground(
                 state.getSetProcState());
         final int oldCap = state.getSetCapability();
@@ -693,8 +697,6 @@
         mPendingProcessSet.clear();
 
         if (!containsCycle) {
-            // Reset the flag
-            state.setReachable(false);
             // Remove this app from the return list because we've done the computation on it.
             processes.remove(app);
         }
@@ -718,8 +720,13 @@
         return true;
     }
 
+    /**
+     * Collect the reachable processes from the given {@code apps}, the result will be
+     * returned in the given {@code processes}, which will include the processes from
+     * the given {@code apps}.
+     */
     @GuardedBy("mService")
-    private boolean collectReachableProcessesLocked(ArraySet<ProcessRecord> apps,
+    protected boolean collectReachableProcessesLocked(ArraySet<ProcessRecord> apps,
             ArrayList<ProcessRecord> processes, ActiveUids uids) {
         final ArrayDeque<ProcessRecord> queue = mTmpQueue;
         queue.clear();
@@ -824,11 +831,15 @@
         if (size > 0) {
             // Reverse the process list, since the updateOomAdjInnerLSP scans from the end of it.
             for (int l = 0, r = size - 1; l < r; l++, r--) {
-                ProcessRecord t = processes.get(l);
-                processes.set(l, processes.get(r));
+                final ProcessRecord t = processes.get(l);
+                final ProcessRecord u = processes.get(r);
+                t.mState.setReachable(false);
+                u.mState.setReachable(false);
+                processes.set(l, u);
                 processes.set(r, t);
             }
         }
+
         return containsCycle;
     }
 
@@ -928,24 +939,18 @@
      * Update OomAdj for all processes within the given list (could be partial), or the whole LRU
      * list if the given list is null; when it's partial update, each process's client proc won't
      * get evaluated recursively here.
+     *
+     * <p>Note: If the given {@code processes} is not null, the expectation to it is, the caller
+     * must have called {@link collectReachableProcessesLocked} on it.
      */
     @GuardedBy({"mService", "mProcLock"})
-    private void updateOomAdjInnerLSP(@OomAdjReason int oomAdjReason, final ProcessRecord topApp,
+    protected void updateOomAdjInnerLSP(@OomAdjReason int oomAdjReason, final ProcessRecord topApp,
             ArrayList<ProcessRecord> processes, ActiveUids uids, boolean potentialCycles,
             boolean startProfiling) {
-        if (startProfiling) {
-            Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, oomAdjReasonToString(oomAdjReason));
-            mService.mOomAdjProfiler.oomAdjStarted();
-        }
-        final long now = SystemClock.uptimeMillis();
-        final long nowElapsed = SystemClock.elapsedRealtime();
-        final long oldTime = now - mConstants.mMaxEmptyTimeMillis;
         final boolean fullUpdate = processes == null;
+        final ArrayList<ProcessRecord> activeProcesses = fullUpdate
+                ? mProcessList.getLruProcessesLOSP() : processes;
         ActiveUids activeUids = uids;
-        ArrayList<ProcessRecord> activeProcesses = fullUpdate ? mProcessList.getLruProcessesLOSP()
-                : processes;
-        final int numProc = activeProcesses.size();
-
         if (activeUids == null) {
             final int numUids = mActiveUids.size();
             activeUids = mTmpUidRecords;
@@ -956,14 +961,14 @@
             }
         }
 
-        // Reset state in all uid records.
-        for (int  i = activeUids.size() - 1; i >= 0; i--) {
-            final UidRecord uidRec = activeUids.valueAt(i);
-            if (DEBUG_UID_OBSERVERS) {
-                Slog.i(TAG_UID_OBSERVERS, "Starting update of " + uidRec);
-            }
-            uidRec.reset();
+        if (startProfiling) {
+            Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, oomAdjReasonToString(oomAdjReason));
+            mService.mOomAdjProfiler.oomAdjStarted();
         }
+        final long now = SystemClock.uptimeMillis();
+        final long nowElapsed = SystemClock.elapsedRealtime();
+        final long oldTime = now - mConstants.mMaxEmptyTimeMillis;
+        final int numProc = activeProcesses.size();
 
         mAdjSeq++;
         if (fullUpdate) {
@@ -971,6 +976,9 @@
             mNewNumAServiceProcs = 0;
         }
 
+        // Reset state in all uid records.
+        resetUidRecordsLsp(activeUids);
+
         boolean retryCycles = false;
         boolean computeClients = fullUpdate || potentialCycles;
 
@@ -996,8 +1004,9 @@
             if (!app.isKilledByAm() && app.getThread() != null) {
                 state.setProcStateChanged(false);
                 app.mOptRecord.setLastOomAdjChangeReason(oomAdjReason);
+                // It won't enter cycle if not computing clients.
                 computeOomAdjLSP(app, UNKNOWN_ADJ, topApp, fullUpdate, now, false,
-                        computeClients); // It won't enter cycle if not computing clients.
+                        computeClients, oomAdjReason, true);
                 // if any app encountered a cycle, we need to perform an additional loop later
                 retryCycles |= state.containsCycle();
                 // Keep the completedAdjSeq to up to date.
@@ -1034,7 +1043,7 @@
                     final ProcessStateRecord state = app.mState;
                     if (!app.isKilledByAm() && app.getThread() != null && state.containsCycle()) {
                         if (computeOomAdjLSP(app, UNKNOWN_ADJ, topApp, true, now,
-                                true, true)) {
+                                true, true, oomAdjReason, true)) {
                             retryCycles = true;
                         }
                     }
@@ -1045,10 +1054,33 @@
 
         assignCachedAdjIfNecessary(mProcessList.getLruProcessesLOSP());
 
+        postUpdateOomAdjInnerLSP(oomAdjReason, activeUids, now, nowElapsed, oldTime);
+
+        if (startProfiling) {
+            mService.mOomAdjProfiler.oomAdjEnded();
+            Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
+        }
+    }
+
+    @GuardedBy({"mService", "mProcLock"})
+    private void resetUidRecordsLsp(@NonNull ActiveUids activeUids) {
+        // Reset state in all uid records.
+        for (int  i = activeUids.size() - 1; i >= 0; i--) {
+            final UidRecord uidRec = activeUids.valueAt(i);
+            if (DEBUG_UID_OBSERVERS) {
+                Slog.i(TAG_UID_OBSERVERS, "Starting update of " + uidRec);
+            }
+            uidRec.reset();
+        }
+    }
+
+    @GuardedBy({"mService", "mProcLock"})
+    protected void postUpdateOomAdjInnerLSP(@OomAdjReason int oomAdjReason, ActiveUids activeUids,
+            long now, long nowElapsed, long oldTime) {
         mNumNonCachedProcs = 0;
         mNumCachedHiddenProcs = 0;
 
-        boolean allChanged = updateAndTrimProcessLSP(now, nowElapsed, oldTime, activeUids,
+        final boolean allChanged = updateAndTrimProcessLSP(now, nowElapsed, oldTime, activeUids,
                 oomAdjReason);
         mNumServiceProcs = mNewNumServiceProcs;
 
@@ -1085,14 +1117,10 @@
                 Slog.d(TAG_OOM_ADJ, "Did OOM ADJ in " + duration + "ms");
             }
         }
-        if (startProfiling) {
-            mService.mOomAdjProfiler.oomAdjEnded();
-            Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
-        }
     }
 
     @GuardedBy({"mService", "mProcLock"})
-    private void assignCachedAdjIfNecessary(ArrayList<ProcessRecord> lruList) {
+    protected void assignCachedAdjIfNecessary(ArrayList<ProcessRecord> lruList) {
         final int numLru = lruList.size();
         if (mConstants.USE_TIERED_CACHED_ADJ) {
             final long now = SystemClock.uptimeMillis();
@@ -1413,7 +1441,7 @@
     }
 
     @GuardedBy({"mService", "mProcLock"})
-    private void updateAppUidRecIfNecessaryLSP(final ProcessRecord app) {
+    protected void updateAppUidRecIfNecessaryLSP(final ProcessRecord app) {
         if (!app.isKilledByAm() && app.getThread() != null) {
             if (app.isolated && app.mServices.numberOfRunningServices() <= 0
                     && app.getIsolatedEntryPoint() == null) {
@@ -1442,7 +1470,7 @@
     }
 
     @GuardedBy({"mService", "mProcLock"})
-    private void updateUidsLSP(ActiveUids activeUids, final long nowElapsed) {
+    protected void updateUidsLSP(ActiveUids activeUids, final long nowElapsed) {
         // This compares previously set procstate to the current procstate in regards to whether
         // or not the app's network access will be blocked. So, this needs to be called before
         // we update the UidRecord's procstate by calling {@link UidRecord#setSetProcState}.
@@ -1580,7 +1608,7 @@
         return true;
     }
 
-    private final ComputeOomAdjWindowCallback mTmpComputeOomAdjWindowCallback =
+    protected final ComputeOomAdjWindowCallback mTmpComputeOomAdjWindowCallback =
             new ComputeOomAdjWindowCallback();
 
     /** These methods are called inline during computeOomAdjLSP(), on the same thread */
@@ -1719,24 +1747,30 @@
     }
 
     @GuardedBy({"mService", "mProcLock"})
-    private boolean computeOomAdjLSP(ProcessRecord app, int cachedAdj,
+    protected boolean computeOomAdjLSP(ProcessRecord app, int cachedAdj,
             ProcessRecord topApp, boolean doingAll, long now, boolean cycleReEval,
-            boolean computeClients) {
+            boolean computeClients, int oomAdjReason, boolean couldRecurse) {
         final ProcessStateRecord state = app.mState;
-        if (mAdjSeq == state.getAdjSeq()) {
-            if (state.getAdjSeq() == state.getCompletedAdjSeq()) {
-                // This adjustment has already been computed successfully.
-                return false;
-            } else {
-                // The process is being computed, so there is a cycle. We cannot
-                // rely on this process's state.
-                state.setContainsCycle(true);
-                mProcessesInCycle.add(app);
+        if (couldRecurse) {
+            if (mAdjSeq == state.getAdjSeq()) {
+                if (state.getAdjSeq() == state.getCompletedAdjSeq()) {
+                    // This adjustment has already been computed successfully.
+                    return false;
+                } else {
+                    // The process is being computed, so there is a cycle. We cannot
+                    // rely on this process's state.
+                    state.setContainsCycle(true);
+                    mProcessesInCycle.add(app);
 
-                return false;
+                    return false;
+                }
             }
         }
 
+        int prevAppAdj = getInitialAdj(app);
+        int prevProcState = getInitialProcState(app);
+        int prevCapability = getInitialCapability(app);
+
         if (app.getThread() == null) {
             state.setAdjSeq(mAdjSeq);
             state.setCurrentSchedulingGroup(SCHED_GROUP_BACKGROUND);
@@ -1745,6 +1779,8 @@
             state.setCurRawAdj(CACHED_APP_MAX_ADJ);
             state.setCompletedAdjSeq(state.getAdjSeq());
             state.setCurCapability(PROCESS_CAPABILITY_NONE);
+            onProcessStateChanged(app, prevProcState);
+            onProcessOomAdjChanged(app, prevAppAdj);
             return false;
         }
 
@@ -1753,7 +1789,7 @@
         state.setAdjTarget(null);
         state.setEmpty(false);
         state.setCached(false);
-        if (!cycleReEval) {
+        if (!couldRecurse || !cycleReEval) {
             // Don't reset this flag when doing cycles re-evaluation.
             state.setNoKillOnBgRestrictedAndIdle(false);
             // If this UID is currently allowlisted, it should not be frozen.
@@ -1764,9 +1800,6 @@
         final int appUid = app.info.uid;
         final int logUid = mService.mCurOomAdjUid;
 
-        int prevAppAdj = state.getCurAdj();
-        int prevProcState = state.getCurProcState();
-        int prevCapability = state.getCurCapability();
         final ProcessServiceRecord psr = app.mServices;
 
         if (state.getMaxAdj() <= FOREGROUND_APP_ADJ) {
@@ -1812,6 +1845,8 @@
             state.setCurRawProcState(state.getCurProcState());
             state.setCurAdj(state.getMaxAdj());
             state.setCompletedAdjSeq(state.getAdjSeq());
+            onProcessStateChanged(app, prevProcState);
+            onProcessOomAdjChanged(app, prevAppAdj);
             // if curAdj is less than prevAppAdj, then this process was promoted
             return state.getCurAdj() < prevAppAdj || state.getCurProcState() < prevProcState;
         }
@@ -1825,7 +1860,7 @@
         int adj;
         int schedGroup;
         int procState;
-        int capability = cycleReEval ? app.mState.getCurCapability() : 0;
+        int capability = cycleReEval ? getInitialCapability(app) : 0;
 
         boolean foregroundActivities = false;
         boolean hasVisibleActivities = false;
@@ -1904,7 +1939,7 @@
             // value that the caller wants us to.
             adj = cachedAdj;
             procState = PROCESS_STATE_CACHED_EMPTY;
-            if (!state.containsCycle()) {
+            if (!couldRecurse || !state.containsCycle()) {
                 state.setCached(true);
                 state.setEmpty(true);
                 state.setAdjType("cch-empty");
@@ -2169,8 +2204,10 @@
             }
         }
 
-        boolean boundByNonBgRestricted = state.isCurBoundByNonBgRestrictedApp();
-        boolean scheduleLikeTopApp = false;
+        state.setCurBoundByNonBgRestrictedApp(getInitialIsCurBoundByNonBgRestrictedApp(app));
+
+        state.setScheduleLikeTopApp(false);
+
         for (int is = psr.numberOfRunningServices() - 1;
                 is >= 0 && (adj > FOREGROUND_APP_ADJ
                         || schedGroup == SCHED_GROUP_BACKGROUND
@@ -2243,6 +2280,18 @@
                 }
             }
 
+            if (!couldRecurse) {
+                // We're entering recursive functions below, if we're told it's not a recursive
+                // loop, abort here.
+                continue;
+            }
+
+
+            state.setCurRawAdj(adj);
+            state.setCurRawProcState(procState);
+            state.setCurrentSchedulingGroup(schedGroup);
+            state.setCurCapability(capability);
+
             ArrayMap<IBinder, ArrayList<ConnectionRecord>> serviceConnections = s.getConnections();
             for (int conni = serviceConnections.size() - 1;
                     conni >= 0 && (adj > FOREGROUND_APP_ADJ
@@ -2263,335 +2312,13 @@
                         continue;
                     }
 
-                    boolean trackedProcState = false;
+                    computeServiceHostOomAdjLSP(cr, app, cr.binding.client, now, topApp, doingAll,
+                            cycleReEval, computeClients, oomAdjReason, cachedAdj, true);
 
-                    ProcessRecord client = cr.binding.client;
-                    if (app.isSdkSandbox && cr.binding.attributedClient != null) {
-                        // For SDK sandboxes, use the attributed client (eg the app that
-                        // requested the sandbox)
-                        client = cr.binding.attributedClient;
-                    }
-                    final ProcessStateRecord cstate = client.mState;
-                    if (computeClients) {
-                        computeOomAdjLSP(client, cachedAdj, topApp, doingAll, now,
-                                cycleReEval, true);
-                    } else {
-                        cstate.setCurRawAdj(cstate.getCurAdj());
-                        cstate.setCurRawProcState(cstate.getCurProcState());
-                    }
-
-                    int clientAdj = cstate.getCurRawAdj();
-                    int clientProcState = cstate.getCurRawProcState();
-
-                    final boolean clientIsSystem = clientProcState < PROCESS_STATE_TOP;
-
-                    boundByNonBgRestricted |= cstate.isCurBoundByNonBgRestrictedApp()
-                            || clientProcState <= PROCESS_STATE_BOUND_TOP
-                            || (clientProcState == PROCESS_STATE_FOREGROUND_SERVICE
-                                    && !cstate.isBackgroundRestricted());
-
-                    if (client.mOptRecord.shouldNotFreeze()) {
-                        // Propagate the shouldNotFreeze flag down the bindings.
-                        app.mOptRecord.setShouldNotFreeze(true);
-                    }
-
-                    // We always propagate PROCESS_CAPABILITY_BFSL over bindings here,
-                    // but, right before actually setting it to the process,
-                    // we check the final procstate, and remove it if the procsate is below BFGS.
-                    capability |= getBfslCapabilityFromClient(client);
-
-                    if (cr.notHasFlag(Context.BIND_WAIVE_PRIORITY)) {
-                        if (cr.hasFlag(Context.BIND_INCLUDE_CAPABILITIES)) {
-                            capability |= cstate.getCurCapability();
-                        }
-
-                        // If an app has network capability by default
-                        // (by having procstate <= BFGS), then the apps it binds to will get
-                        // elevated to a high enough procstate anyway to get network unless they
-                        // request otherwise, so don't propagate the network capability by default
-                        // in this case unless they explicitly request it.
-                        if ((cstate.getCurCapability()
-                                & PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK) != 0) {
-                            if (clientProcState <= PROCESS_STATE_BOUND_FOREGROUND_SERVICE) {
-                                // This is used to grant network access to Expedited Jobs.
-                                if (cr.hasFlag(Context.BIND_BYPASS_POWER_NETWORK_RESTRICTIONS)) {
-                                    capability |= PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK;
-                                }
-                            } else {
-                                capability |= PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK;
-                            }
-                        }
-                        if ((cstate.getCurCapability()
-                                & PROCESS_CAPABILITY_USER_RESTRICTED_NETWORK) != 0) {
-                            if (clientProcState <= PROCESS_STATE_IMPORTANT_FOREGROUND) {
-                                // This is used to grant network access to User Initiated Jobs.
-                                if (cr.hasFlag(Context.BIND_BYPASS_USER_NETWORK_RESTRICTIONS)) {
-                                    capability |= PROCESS_CAPABILITY_USER_RESTRICTED_NETWORK;
-                                }
-                            }
-                        }
-
-                        if (shouldSkipDueToCycle(app, cstate, procState, adj, cycleReEval)) {
-                            continue;
-                        }
-
-                        if (clientProcState >= PROCESS_STATE_CACHED_ACTIVITY) {
-                            // If the other app is cached for any reason, for purposes here
-                            // we are going to consider it empty.  The specific cached state
-                            // doesn't propagate except under certain conditions.
-                            clientProcState = PROCESS_STATE_CACHED_EMPTY;
-                        }
-                        String adjType = null;
-                        if (cr.hasFlag(Context.BIND_ALLOW_OOM_MANAGEMENT)) {
-                            // Similar to BIND_WAIVE_PRIORITY, keep it unfrozen.
-                            if (clientAdj < CACHED_APP_MIN_ADJ) {
-                                app.mOptRecord.setShouldNotFreeze(true);
-                            }
-                            // Not doing bind OOM management, so treat
-                            // this guy more like a started service.
-                            if (state.hasShownUi() && !state.getCachedIsHomeProcess()) {
-                                // If this process has shown some UI, let it immediately
-                                // go to the LRU list because it may be pretty heavy with
-                                // UI stuff.  We'll tag it with a label just to help
-                                // debug and understand what is going on.
-                                if (adj > clientAdj) {
-                                    adjType = "cch-bound-ui-services";
-                                }
-                                state.setCached(false);
-                                clientAdj = adj;
-                                clientProcState = procState;
-                            } else {
-                                if (now >= (s.lastActivity
-                                        + mConstants.MAX_SERVICE_INACTIVITY)) {
-                                    // This service has not seen activity within
-                                    // recent memory, so allow it to drop to the
-                                    // LRU list if there is no other reason to keep
-                                    // it around.  We'll also tag it with a label just
-                                    // to help debug and undertand what is going on.
-                                    if (adj > clientAdj) {
-                                        adjType = "cch-bound-services";
-                                    }
-                                    clientAdj = adj;
-                                }
-                            }
-                        }
-                        if (adj > clientAdj) {
-                            // If this process has recently shown UI, and
-                            // the process that is binding to it is less
-                            // important than being visible, then we don't
-                            // care about the binding as much as we care
-                            // about letting this process get into the LRU
-                            // list to be killed and restarted if needed for
-                            // memory.
-                            if (state.hasShownUi() && !state.getCachedIsHomeProcess()
-                                    && clientAdj > PERCEPTIBLE_APP_ADJ) {
-                                if (adj >= CACHED_APP_MIN_ADJ) {
-                                    adjType = "cch-bound-ui-services";
-                                }
-                            } else {
-                                int newAdj;
-                                int lbAdj = VISIBLE_APP_ADJ; // lower bound of adj.
-                                if (cr.hasFlag(Context.BIND_ABOVE_CLIENT
-                                        | Context.BIND_IMPORTANT)) {
-                                    if (clientAdj >= PERSISTENT_SERVICE_ADJ) {
-                                        newAdj = clientAdj;
-                                    } else {
-                                        // make this service persistent
-                                        newAdj = PERSISTENT_SERVICE_ADJ;
-                                        schedGroup = SCHED_GROUP_DEFAULT;
-                                        procState = ActivityManager.PROCESS_STATE_PERSISTENT;
-                                        cr.trackProcState(procState, mAdjSeq);
-                                        trackedProcState = true;
-                                    }
-                                } else if (cr.hasFlag(Context.BIND_NOT_PERCEPTIBLE)
-                                        && clientAdj <= PERCEPTIBLE_APP_ADJ
-                                        && adj >= (lbAdj = PERCEPTIBLE_LOW_APP_ADJ)) {
-                                    newAdj = PERCEPTIBLE_LOW_APP_ADJ;
-                                } else if (cr.hasFlag(Context.BIND_ALMOST_PERCEPTIBLE)
-                                        && cr.notHasFlag(Context.BIND_NOT_FOREGROUND)
-                                        && clientAdj < PERCEPTIBLE_APP_ADJ
-                                        && adj >= (lbAdj = PERCEPTIBLE_APP_ADJ)) {
-                                    // This is for user-initiated jobs.
-                                    // We use APP_ADJ + 1 here, so we can tell them apart from FGS.
-                                    newAdj = PERCEPTIBLE_APP_ADJ + 1;
-                                } else if (cr.hasFlag(Context.BIND_ALMOST_PERCEPTIBLE)
-                                        && cr.hasFlag(Context.BIND_NOT_FOREGROUND)
-                                        && clientAdj < PERCEPTIBLE_APP_ADJ
-                                        && adj >= (lbAdj = (PERCEPTIBLE_MEDIUM_APP_ADJ + 2))) {
-                                    // This is for expedited jobs.
-                                    // We use MEDIUM_APP_ADJ + 2 here, so we can tell apart
-                                    // EJ and short-FGS.
-                                    newAdj = PERCEPTIBLE_MEDIUM_APP_ADJ + 2;
-                                } else if (cr.hasFlag(Context.BIND_NOT_VISIBLE)
-                                        && clientAdj < PERCEPTIBLE_APP_ADJ
-                                        && adj >= (lbAdj = PERCEPTIBLE_APP_ADJ)) {
-                                    newAdj = PERCEPTIBLE_APP_ADJ;
-                                } else if (clientAdj >= PERCEPTIBLE_APP_ADJ) {
-                                    newAdj = clientAdj;
-                                } else if (cr.hasFlag(BIND_TREAT_LIKE_VISIBLE_FOREGROUND_SERVICE)
-                                        && clientAdj <= VISIBLE_APP_ADJ
-                                        && adj > VISIBLE_APP_ADJ) {
-                                    newAdj = VISIBLE_APP_ADJ;
-                                } else {
-                                    if (adj > VISIBLE_APP_ADJ) {
-                                        // TODO: Is this too limiting for apps bound from TOP?
-                                        newAdj = Math.max(clientAdj, lbAdj);
-                                    } else {
-                                        newAdj = adj;
-                                    }
-                                }
-                                if (!cstate.isCached()) {
-                                    state.setCached(false);
-                                }
-                                if (adj >  newAdj) {
-                                    adj = newAdj;
-                                    state.setCurRawAdj(adj);
-                                    adjType = "service";
-                                }
-                            }
-                        }
-                        if (cr.notHasFlag(Context.BIND_NOT_FOREGROUND
-                                | Context.BIND_IMPORTANT_BACKGROUND)) {
-                            // This will treat important bound services identically to
-                            // the top app, which may behave differently than generic
-                            // foreground work.
-                            final int curSchedGroup = cstate.getCurrentSchedulingGroup();
-                            if (curSchedGroup > schedGroup) {
-                                if (cr.hasFlag(Context.BIND_IMPORTANT)) {
-                                    schedGroup = curSchedGroup;
-                                } else {
-                                    schedGroup = SCHED_GROUP_DEFAULT;
-                                }
-                            }
-                            if (clientProcState < PROCESS_STATE_TOP) {
-                                // Special handling for above-top states (persistent
-                                // processes).  These should not bring the current process
-                                // into the top state, since they are not on top.  Instead
-                                // give them the best bound state after that.
-                                if (cr.hasFlag(BIND_TREAT_LIKE_VISIBLE_FOREGROUND_SERVICE)) {
-                                    clientProcState = PROCESS_STATE_FOREGROUND_SERVICE;
-                                } else if (cr.hasFlag(Context.BIND_FOREGROUND_SERVICE)) {
-                                    clientProcState = PROCESS_STATE_BOUND_FOREGROUND_SERVICE;
-                                } else if (mService.mWakefulness.get()
-                                        == PowerManagerInternal.WAKEFULNESS_AWAKE
-                                        && cr.hasFlag(Context.BIND_FOREGROUND_SERVICE_WHILE_AWAKE))
-                                {
-                                    clientProcState = PROCESS_STATE_BOUND_FOREGROUND_SERVICE;
-                                } else {
-                                    clientProcState =
-                                            PROCESS_STATE_IMPORTANT_FOREGROUND;
-                                }
-                            } else if (clientProcState == PROCESS_STATE_TOP) {
-                                // Go at most to BOUND_TOP, unless requested to elevate
-                                // to client's state.
-                                clientProcState = PROCESS_STATE_BOUND_TOP;
-                                final boolean enabled = cstate.getCachedCompatChange(
-                                        CACHED_COMPAT_CHANGE_PROCESS_CAPABILITY);
-                                if (enabled) {
-                                    if (cr.hasFlag(Context.BIND_INCLUDE_CAPABILITIES)) {
-                                        // TOP process passes all capabilities to the service.
-                                        capability |= cstate.getCurCapability();
-                                    } else {
-                                        // TOP process passes no capability to the service.
-                                    }
-                                } else {
-                                    // TOP process passes all capabilities to the service.
-                                    capability |= cstate.getCurCapability();
-                                }
-                            }
-                        } else if (cr.notHasFlag(Context.BIND_IMPORTANT_BACKGROUND)) {
-                            if (clientProcState <
-                                    PROCESS_STATE_TRANSIENT_BACKGROUND) {
-                                clientProcState =
-                                        PROCESS_STATE_TRANSIENT_BACKGROUND;
-                            }
-                        } else {
-                            if (clientProcState <
-                                    PROCESS_STATE_IMPORTANT_BACKGROUND) {
-                                clientProcState =
-                                        PROCESS_STATE_IMPORTANT_BACKGROUND;
-                            }
-                        }
-
-                        if (schedGroup < SCHED_GROUP_TOP_APP
-                                && cr.hasFlag(Context.BIND_SCHEDULE_LIKE_TOP_APP)
-                                && clientIsSystem) {
-                            schedGroup = SCHED_GROUP_TOP_APP;
-                            scheduleLikeTopApp = true;
-                        }
-
-                        if (!trackedProcState) {
-                            cr.trackProcState(clientProcState, mAdjSeq);
-                        }
-
-                        if (procState > clientProcState) {
-                            procState = clientProcState;
-                            state.setCurRawProcState(procState);
-                            if (adjType == null) {
-                                adjType = "service";
-                            }
-                        }
-                        if (procState < PROCESS_STATE_IMPORTANT_BACKGROUND
-                                && cr.hasFlag(Context.BIND_SHOWING_UI)) {
-                            app.setPendingUiClean(true);
-                        }
-                        if (adjType != null) {
-                            state.setAdjType(adjType);
-                            state.setAdjTypeCode(ActivityManager.RunningAppProcessInfo
-                                    .REASON_SERVICE_IN_USE);
-                            state.setAdjSource(client);
-                            state.setAdjSourceProcState(clientProcState);
-                            state.setAdjTarget(s.instanceName);
-                            if (DEBUG_OOM_ADJ_REASON || logUid == appUid) {
-                                reportOomAdjMessageLocked(TAG_OOM_ADJ, "Raise to " + adjType
-                                        + ": " + app + ", due to " + client
-                                        + " adj=" + adj + " procState="
-                                        + ProcessList.makeProcStateString(procState));
-                            }
-                        }
-                    } else { // BIND_WAIVE_PRIORITY == true
-                        // BIND_WAIVE_PRIORITY bindings are special when it comes to the
-                        // freezer. Processes bound via WPRI are expected to be running,
-                        // but they are not promoted in the LRU list to keep them out of
-                        // cached. As a result, they can freeze based on oom_adj alone.
-                        // Normally, bindToDeath would fire when a cached app would die
-                        // in the background, but nothing will fire when a running process
-                        // pings a frozen process. Accordingly, any cached app that is
-                        // bound by an unfrozen app via a WPRI binding has to remain
-                        // unfrozen.
-                        if (clientAdj < CACHED_APP_MIN_ADJ) {
-                            app.mOptRecord.setShouldNotFreeze(true);
-                        }
-                    }
-                    if (cr.hasFlag(Context.BIND_TREAT_LIKE_ACTIVITY)) {
-                        psr.setTreatLikeActivity(true);
-                    }
-                    final ActivityServiceConnectionsHolder a = cr.activity;
-                    if (cr.hasFlag(Context.BIND_ADJUST_WITH_ACTIVITY)) {
-                        if (a != null && adj > FOREGROUND_APP_ADJ
-                                && a.isActivityVisible()) {
-                            adj = FOREGROUND_APP_ADJ;
-                            state.setCurRawAdj(adj);
-                            if (cr.notHasFlag(Context.BIND_NOT_FOREGROUND)) {
-                                if (cr.hasFlag(Context.BIND_IMPORTANT)) {
-                                    schedGroup = SCHED_GROUP_TOP_APP_BOUND;
-                                } else {
-                                    schedGroup = SCHED_GROUP_DEFAULT;
-                                }
-                            }
-                            state.setCached(false);
-                            state.setAdjType("service");
-                            state.setAdjTypeCode(ActivityManager.RunningAppProcessInfo
-                                    .REASON_SERVICE_IN_USE);
-                            state.setAdjSource(a);
-                            state.setAdjSourceProcState(procState);
-                            state.setAdjTarget(s.instanceName);
-                            if (DEBUG_OOM_ADJ_REASON || logUid == appUid) {
-                                reportOomAdjMessageLocked(TAG_OOM_ADJ,
-                                        "Raise to service w/activity: " + app);
-                            }
-                        }
-                    }
+                    adj = state.getCurRawAdj();
+                    procState = state.getCurRawProcState();
+                    schedGroup = state.getCurrentSchedulingGroup();
+                    capability = state.getCurCapability();
                 }
             }
         }
@@ -2603,97 +2330,27 @@
                         || procState > PROCESS_STATE_TOP);
                 provi--) {
             ContentProviderRecord cpr = ppr.getProviderAt(provi);
-            for (int i = cpr.connections.size() - 1;
-                    i >= 0 && (adj > FOREGROUND_APP_ADJ
-                            || schedGroup == SCHED_GROUP_BACKGROUND
-                            || procState > PROCESS_STATE_TOP);
-                    i--) {
-                ContentProviderConnection conn = cpr.connections.get(i);
-                ProcessRecord client = conn.client;
-                final ProcessStateRecord cstate = client.mState;
-                if (client == app) {
-                    // Being our own client is not interesting.
-                    continue;
-                }
-                if (computeClients) {
-                    computeOomAdjLSP(client, cachedAdj, topApp, doingAll, now, cycleReEval, true);
-                } else {
-                    cstate.setCurRawAdj(cstate.getCurAdj());
-                    cstate.setCurRawProcState(cstate.getCurProcState());
-                }
+            if (couldRecurse) {
+                // We're entering recursive functions below.
+                state.setCurRawAdj(adj);
+                state.setCurRawProcState(procState);
+                state.setCurrentSchedulingGroup(schedGroup);
+                state.setCurCapability(capability);
 
-                if (shouldSkipDueToCycle(app, cstate, procState, adj, cycleReEval)) {
-                    continue;
-                }
+                for (int i = cpr.connections.size() - 1;
+                        i >= 0 && (adj > FOREGROUND_APP_ADJ
+                                || schedGroup == SCHED_GROUP_BACKGROUND
+                                || procState > PROCESS_STATE_TOP);
+                        i--) {
+                    ContentProviderConnection conn = cpr.connections.get(i);
+                    ProcessRecord client = conn.client;
+                    computeProviderHostOomAdjLSP(conn, app, client, now, topApp, doingAll,
+                            cycleReEval, computeClients, oomAdjReason, cachedAdj, true);
 
-                int clientAdj = cstate.getCurRawAdj();
-                int clientProcState = cstate.getCurRawProcState();
-
-                // We always propagate PROCESS_CAPABILITY_BFSL to providers here,
-                // but, right before actually setting it to the process,
-                // we check the final procstate, and remove it if the procsate is below BFGS.
-                capability |= getBfslCapabilityFromClient(client);
-
-                if (clientProcState >= PROCESS_STATE_CACHED_ACTIVITY) {
-                    // If the other app is cached for any reason, for purposes here
-                    // we are going to consider it empty.
-                    clientProcState = PROCESS_STATE_CACHED_EMPTY;
-                }
-                if (client.mOptRecord.shouldNotFreeze()) {
-                    // Propagate the shouldNotFreeze flag down the bindings.
-                    app.mOptRecord.setShouldNotFreeze(true);
-                }
-
-                boundByNonBgRestricted |= cstate.isCurBoundByNonBgRestrictedApp()
-                        || clientProcState <= PROCESS_STATE_BOUND_TOP
-                        || (clientProcState == PROCESS_STATE_FOREGROUND_SERVICE
-                                && !cstate.isBackgroundRestricted());
-
-                String adjType = null;
-                if (adj > clientAdj) {
-                    if (state.hasShownUi() && !state.getCachedIsHomeProcess()
-                            && clientAdj > PERCEPTIBLE_APP_ADJ) {
-                        adjType = "cch-ui-provider";
-                    } else {
-                        adj = Math.max(clientAdj, FOREGROUND_APP_ADJ);
-                        state.setCurRawAdj(adj);
-                        adjType = "provider";
-                    }
-                    state.setCached(state.isCached() & cstate.isCached());
-                }
-
-                if (clientProcState <= PROCESS_STATE_FOREGROUND_SERVICE) {
-                    if (adjType == null) {
-                        adjType = "provider";
-                    }
-                    if (clientProcState == PROCESS_STATE_TOP) {
-                        clientProcState = PROCESS_STATE_BOUND_TOP;
-                    } else {
-                        clientProcState = PROCESS_STATE_BOUND_FOREGROUND_SERVICE;
-                    }
-                }
-
-                conn.trackProcState(clientProcState, mAdjSeq);
-                if (procState > clientProcState) {
-                    procState = clientProcState;
-                    state.setCurRawProcState(procState);
-                }
-                if (cstate.getCurrentSchedulingGroup() > schedGroup) {
-                    schedGroup = SCHED_GROUP_DEFAULT;
-                }
-                if (adjType != null) {
-                    state.setAdjType(adjType);
-                    state.setAdjTypeCode(ActivityManager.RunningAppProcessInfo
-                            .REASON_PROVIDER_IN_USE);
-                    state.setAdjSource(client);
-                    state.setAdjSourceProcState(clientProcState);
-                    state.setAdjTarget(cpr.name);
-                    if (DEBUG_OOM_ADJ_REASON || logUid == appUid) {
-                        reportOomAdjMessageLocked(TAG_OOM_ADJ, "Raise to " + adjType
-                                + ": " + app + ", due to " + client
-                                + " adj=" + adj + " procState="
-                                + ProcessList.makeProcStateString(procState));
-                    }
+                    adj = state.getCurRawAdj();
+                    procState = state.getCurRawProcState();
+                    schedGroup = state.getCurrentSchedulingGroup();
+                    capability = state.getCurCapability();
                 }
             }
             // If the provider has external (non-framework) process
@@ -2799,7 +2456,7 @@
         // restrictions on screen off
         if (procState >= PROCESS_STATE_BOUND_FOREGROUND_SERVICE
                 && mService.mWakefulness.get() != PowerManagerInternal.WAKEFULNESS_AWAKE
-                && !scheduleLikeTopApp) {
+                && !state.shouldScheduleLikeTopApp()) {
             if (schedGroup > SCHED_GROUP_RESTRICTED) {
                 schedGroup = SCHED_GROUP_RESTRICTED;
             }
@@ -2817,7 +2474,6 @@
             capability &= ~PROCESS_CAPABILITY_BFSL;
         }
 
-
         if (app.isPendingFinishAttach()) {
             // If the app is still starting up. We reset the computations to the
             // hardcoded values in setAttachingProcessStatesLSP. This ensures that the app keeps
@@ -2834,22 +2490,581 @@
         // it when computing the final cached adj later.  Note that we don't need to
         // worry about this for max adj above, since max adj will always be used to
         // keep it out of the cached vaues.
-        state.setCurAdj(adj);
         state.setCurCapability(capability);
-        state.setCurrentSchedulingGroup(schedGroup);
-        state.setCurProcState(procState);
-        state.setCurRawProcState(procState);
         state.updateLastInvisibleTime(hasVisibleActivities);
         state.setHasForegroundActivities(foregroundActivities);
         state.setCompletedAdjSeq(mAdjSeq);
-        state.setCurBoundByNonBgRestrictedApp(boundByNonBgRestricted);
+
+        schedGroup = setIntermediateAdjLSP(app, adj, prevAppAdj, schedGroup);
+        setIntermediateProcStateLSP(app, procState, prevProcState);
+        setIntermediateSchedGroupLSP(state, schedGroup);
 
         // if curAdj or curProcState improved, then this process was promoted
         return state.getCurAdj() < prevAppAdj || state.getCurProcState() < prevProcState
                 || state.getCurCapability() != prevCapability;
     }
 
-    private int getDefaultCapability(ProcessRecord app, int procState) {
+    /**
+     * @return The proposed change to the schedGroup.
+     */
+    @GuardedBy({"mService", "mProcLock"})
+    protected int setIntermediateAdjLSP(ProcessRecord app, int adj, int prevRawAppAdj,
+            int schedGroup) {
+        final ProcessStateRecord state = app.mState;
+        state.setCurRawAdj(adj);
+
+        adj = app.mServices.modifyRawOomAdj(adj);
+        if (adj > state.getMaxAdj()) {
+            adj = state.getMaxAdj();
+            if (adj <= PERCEPTIBLE_LOW_APP_ADJ) {
+                schedGroup = SCHED_GROUP_DEFAULT;
+            }
+        }
+
+        state.setCurAdj(adj);
+
+        return schedGroup;
+    }
+
+    @GuardedBy({"mService", "mProcLock"})
+    protected void setIntermediateProcStateLSP(ProcessRecord app, int procState,
+            int prevProcState) {
+        final ProcessStateRecord state = app.mState;
+        state.setCurProcState(procState);
+        state.setCurRawProcState(procState);
+    }
+
+    @GuardedBy({"mService", "mProcLock"})
+    protected void setIntermediateSchedGroupLSP(ProcessStateRecord state, int schedGroup) {
+        // Put bound foreground services in a special sched group for additional
+        // restrictions on screen off
+        if (state.getCurProcState() >= PROCESS_STATE_BOUND_FOREGROUND_SERVICE
+                && mService.mWakefulness.get() != PowerManagerInternal.WAKEFULNESS_AWAKE
+                && !state.shouldScheduleLikeTopApp()) {
+            if (schedGroup > SCHED_GROUP_RESTRICTED) {
+                schedGroup = SCHED_GROUP_RESTRICTED;
+            }
+        }
+
+        state.setCurrentSchedulingGroup(schedGroup);
+    }
+
+    @GuardedBy({"mService", "mProcLock"})
+    protected void computeServiceHostOomAdjLSP(ConnectionRecord cr, ProcessRecord app,
+            ProcessRecord client, long now, ProcessRecord topApp, boolean doingAll,
+            boolean cycleReEval, boolean computeClients, int oomAdjReason, int cachedAdj,
+            boolean couldRecurse) {
+        if (app.isPendingFinishAttach()) {
+            // We've set the attaching process state in the computeInitialOomAdjLSP. Skip it here.
+            return;
+        }
+
+        final ProcessStateRecord state = app.mState;
+        ProcessStateRecord cstate = client.mState;
+
+        if (couldRecurse) {
+            if (app.isSdkSandbox && cr.binding.attributedClient != null) {
+                // For SDK sandboxes, use the attributed client (eg the app that
+                // requested the sandbox)
+                client = cr.binding.attributedClient;
+                cstate = client.mState;
+            }
+            if (computeClients) {
+                computeOomAdjLSP(client, cachedAdj, topApp, doingAll, now, cycleReEval, true,
+                        oomAdjReason, true);
+            } else {
+                cstate.setCurRawAdj(cstate.getCurAdj());
+                cstate.setCurRawProcState(cstate.getCurProcState());
+            }
+        }
+
+        int clientAdj = cstate.getCurRawAdj();
+        int clientProcState = cstate.getCurRawProcState();
+
+        final boolean clientIsSystem = clientProcState < PROCESS_STATE_TOP;
+
+        int adj = state.getCurRawAdj();
+        int procState = state.getCurRawProcState();
+        int schedGroup = state.getCurrentSchedulingGroup();
+        int capability = state.getCurCapability();
+
+        final int prevRawAdj = adj;
+        final int prevProcState = procState;
+        final int prevSchedGroup = schedGroup;
+
+        final int appUid = app.info.uid;
+        final int logUid = mService.mCurOomAdjUid;
+
+        state.setCurBoundByNonBgRestrictedApp(state.isCurBoundByNonBgRestrictedApp()
+                || cstate.isCurBoundByNonBgRestrictedApp()
+                || clientProcState <= PROCESS_STATE_BOUND_TOP
+                || (clientProcState == PROCESS_STATE_FOREGROUND_SERVICE
+                        && !cstate.isBackgroundRestricted()));
+
+        if (client.mOptRecord.shouldNotFreeze()) {
+            // Propagate the shouldNotFreeze flag down the bindings.
+            app.mOptRecord.setShouldNotFreeze(true);
+        }
+
+        boolean trackedProcState = false;
+
+        // We always propagate PROCESS_CAPABILITY_BFSL over bindings here,
+        // but, right before actually setting it to the process,
+        // we check the final procstate, and remove it if the procsate is below BFGS.
+        capability |= getBfslCapabilityFromClient(client);
+
+        if (cr.notHasFlag(Context.BIND_WAIVE_PRIORITY)) {
+            if (cr.hasFlag(Context.BIND_INCLUDE_CAPABILITIES)) {
+                capability |= cstate.getCurCapability();
+            }
+
+            // If an app has network capability by default
+            // (by having procstate <= BFGS), then the apps it binds to will get
+            // elevated to a high enough procstate anyway to get network unless they
+            // request otherwise, so don't propagate the network capability by default
+            // in this case unless they explicitly request it.
+            if ((cstate.getCurCapability()
+                    & PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK) != 0) {
+                if (clientProcState <= PROCESS_STATE_BOUND_FOREGROUND_SERVICE) {
+                    // This is used to grant network access to Expedited Jobs.
+                    if (cr.hasFlag(Context.BIND_BYPASS_POWER_NETWORK_RESTRICTIONS)) {
+                        capability |= PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK;
+                    }
+                } else {
+                    capability |= PROCESS_CAPABILITY_POWER_RESTRICTED_NETWORK;
+                }
+            }
+            if ((cstate.getCurCapability()
+                    & PROCESS_CAPABILITY_USER_RESTRICTED_NETWORK) != 0) {
+                if (clientProcState <= PROCESS_STATE_IMPORTANT_FOREGROUND) {
+                    // This is used to grant network access to User Initiated Jobs.
+                    if (cr.hasFlag(Context.BIND_BYPASS_USER_NETWORK_RESTRICTIONS)) {
+                        capability |= PROCESS_CAPABILITY_USER_RESTRICTED_NETWORK;
+                    }
+                }
+            }
+
+            if (couldRecurse && shouldSkipDueToCycle(app, cstate, procState, adj, cycleReEval)) {
+                return;
+            }
+
+            if (clientProcState >= PROCESS_STATE_CACHED_ACTIVITY) {
+                // If the other app is cached for any reason, for purposes here
+                // we are going to consider it empty.  The specific cached state
+                // doesn't propagate except under certain conditions.
+                clientProcState = PROCESS_STATE_CACHED_EMPTY;
+            }
+            String adjType = null;
+            if (cr.hasFlag(Context.BIND_ALLOW_OOM_MANAGEMENT)) {
+                // Similar to BIND_WAIVE_PRIORITY, keep it unfrozen.
+                if (clientAdj < CACHED_APP_MIN_ADJ) {
+                    app.mOptRecord.setShouldNotFreeze(true);
+                }
+                // Not doing bind OOM management, so treat
+                // this guy more like a started service.
+                if (state.hasShownUi() && !state.getCachedIsHomeProcess()) {
+                    // If this process has shown some UI, let it immediately
+                    // go to the LRU list because it may be pretty heavy with
+                    // UI stuff.  We'll tag it with a label just to help
+                    // debug and understand what is going on.
+                    if (adj > clientAdj) {
+                        adjType = "cch-bound-ui-services";
+                    }
+                    state.setCached(false);
+                    clientAdj = adj;
+                    clientProcState = procState;
+                } else {
+                    if (now >= (cr.binding.service.lastActivity
+                            + mConstants.MAX_SERVICE_INACTIVITY)) {
+                        // This service has not seen activity within
+                        // recent memory, so allow it to drop to the
+                        // LRU list if there is no other reason to keep
+                        // it around.  We'll also tag it with a label just
+                        // to help debug and undertand what is going on.
+                        if (adj > clientAdj) {
+                            adjType = "cch-bound-services";
+                        }
+                        clientAdj = adj;
+                    }
+                }
+            }
+            if (adj > clientAdj) {
+                // If this process has recently shown UI, and
+                // the process that is binding to it is less
+                // important than being visible, then we don't
+                // care about the binding as much as we care
+                // about letting this process get into the LRU
+                // list to be killed and restarted if needed for
+                // memory.
+                if (state.hasShownUi() && !state.getCachedIsHomeProcess()
+                        && clientAdj > PERCEPTIBLE_APP_ADJ) {
+                    if (adj >= CACHED_APP_MIN_ADJ) {
+                        adjType = "cch-bound-ui-services";
+                    }
+                } else {
+                    int newAdj;
+                    int lbAdj = VISIBLE_APP_ADJ; // lower bound of adj.
+                    if (cr.hasFlag(Context.BIND_ABOVE_CLIENT
+                            | Context.BIND_IMPORTANT)) {
+                        if (clientAdj >= PERSISTENT_SERVICE_ADJ) {
+                            newAdj = clientAdj;
+                        } else {
+                            // make this service persistent
+                            newAdj = PERSISTENT_SERVICE_ADJ;
+                            schedGroup = SCHED_GROUP_DEFAULT;
+                            procState = ActivityManager.PROCESS_STATE_PERSISTENT;
+                            cr.trackProcState(procState, mAdjSeq);
+                            trackedProcState = true;
+                        }
+                    } else if (cr.hasFlag(Context.BIND_NOT_PERCEPTIBLE)
+                            && clientAdj <= PERCEPTIBLE_APP_ADJ
+                            && adj >= (lbAdj = PERCEPTIBLE_LOW_APP_ADJ)) {
+                        newAdj = PERCEPTIBLE_LOW_APP_ADJ;
+                    } else if (cr.hasFlag(Context.BIND_ALMOST_PERCEPTIBLE)
+                            && cr.notHasFlag(Context.BIND_NOT_FOREGROUND)
+                            && clientAdj < PERCEPTIBLE_APP_ADJ
+                            && adj >= (lbAdj = PERCEPTIBLE_APP_ADJ)) {
+                        // This is for user-initiated jobs.
+                        // We use APP_ADJ + 1 here, so we can tell them apart from FGS.
+                        newAdj = PERCEPTIBLE_APP_ADJ + 1;
+                    } else if (cr.hasFlag(Context.BIND_ALMOST_PERCEPTIBLE)
+                            && cr.hasFlag(Context.BIND_NOT_FOREGROUND)
+                            && clientAdj < PERCEPTIBLE_APP_ADJ
+                            && adj >= (lbAdj = (PERCEPTIBLE_MEDIUM_APP_ADJ + 2))) {
+                        // This is for expedited jobs.
+                        // We use MEDIUM_APP_ADJ + 2 here, so we can tell apart
+                        // EJ and short-FGS.
+                        newAdj = PERCEPTIBLE_MEDIUM_APP_ADJ + 2;
+                    } else if (cr.hasFlag(Context.BIND_NOT_VISIBLE)
+                            && clientAdj < PERCEPTIBLE_APP_ADJ
+                            && adj >= (lbAdj = PERCEPTIBLE_APP_ADJ)) {
+                        newAdj = PERCEPTIBLE_APP_ADJ;
+                    } else if (clientAdj >= PERCEPTIBLE_APP_ADJ) {
+                        newAdj = clientAdj;
+                    } else if (cr.hasFlag(BIND_TREAT_LIKE_VISIBLE_FOREGROUND_SERVICE)
+                            && clientAdj <= VISIBLE_APP_ADJ
+                            && adj > VISIBLE_APP_ADJ) {
+                        newAdj = VISIBLE_APP_ADJ;
+                    } else {
+                        if (adj > VISIBLE_APP_ADJ) {
+                            // TODO: Is this too limiting for apps bound from TOP?
+                            newAdj = Math.max(clientAdj, lbAdj);
+                        } else {
+                            newAdj = adj;
+                        }
+                    }
+                    if (!cstate.isCached()) {
+                        state.setCached(false);
+                    }
+                    if (adj >  newAdj) {
+                        adj = newAdj;
+                        state.setCurRawAdj(adj);
+                        adjType = "service";
+                    }
+                }
+            }
+            if (cr.notHasFlag(Context.BIND_NOT_FOREGROUND
+                    | Context.BIND_IMPORTANT_BACKGROUND)) {
+                // This will treat important bound services identically to
+                // the top app, which may behave differently than generic
+                // foreground work.
+                final int curSchedGroup = cstate.getCurrentSchedulingGroup();
+                if (curSchedGroup > schedGroup) {
+                    if (cr.hasFlag(Context.BIND_IMPORTANT)) {
+                        schedGroup = curSchedGroup;
+                    } else {
+                        schedGroup = SCHED_GROUP_DEFAULT;
+                    }
+                }
+                if (clientProcState < PROCESS_STATE_TOP) {
+                    // Special handling for above-top states (persistent
+                    // processes).  These should not bring the current process
+                    // into the top state, since they are not on top.  Instead
+                    // give them the best bound state after that.
+                    if (cr.hasFlag(BIND_TREAT_LIKE_VISIBLE_FOREGROUND_SERVICE)) {
+                        clientProcState = PROCESS_STATE_FOREGROUND_SERVICE;
+                    } else if (cr.hasFlag(Context.BIND_FOREGROUND_SERVICE)) {
+                        clientProcState = PROCESS_STATE_BOUND_FOREGROUND_SERVICE;
+                    } else if (mService.mWakefulness.get()
+                            == PowerManagerInternal.WAKEFULNESS_AWAKE
+                            && cr.hasFlag(Context.BIND_FOREGROUND_SERVICE_WHILE_AWAKE)) {
+                        clientProcState = PROCESS_STATE_BOUND_FOREGROUND_SERVICE;
+                    } else {
+                        clientProcState =
+                                PROCESS_STATE_IMPORTANT_FOREGROUND;
+                    }
+                } else if (clientProcState == PROCESS_STATE_TOP) {
+                    // Go at most to BOUND_TOP, unless requested to elevate
+                    // to client's state.
+                    clientProcState = PROCESS_STATE_BOUND_TOP;
+                    final boolean enabled = cstate.getCachedCompatChange(
+                            CACHED_COMPAT_CHANGE_PROCESS_CAPABILITY);
+                    if (enabled) {
+                        if (cr.hasFlag(Context.BIND_INCLUDE_CAPABILITIES)) {
+                            // TOP process passes all capabilities to the service.
+                            capability |= cstate.getCurCapability();
+                        } else {
+                            // TOP process passes no capability to the service.
+                        }
+                    } else {
+                        // TOP process passes all capabilities to the service.
+                        capability |= cstate.getCurCapability();
+                    }
+                }
+            } else if (cr.notHasFlag(Context.BIND_IMPORTANT_BACKGROUND)) {
+                if (clientProcState < PROCESS_STATE_TRANSIENT_BACKGROUND) {
+                    clientProcState =
+                            PROCESS_STATE_TRANSIENT_BACKGROUND;
+                }
+            } else {
+                if (clientProcState < PROCESS_STATE_IMPORTANT_BACKGROUND) {
+                    clientProcState =
+                            PROCESS_STATE_IMPORTANT_BACKGROUND;
+                }
+            }
+
+            if (schedGroup < SCHED_GROUP_TOP_APP
+                    && cr.hasFlag(Context.BIND_SCHEDULE_LIKE_TOP_APP)
+                    && clientIsSystem) {
+                schedGroup = SCHED_GROUP_TOP_APP;
+                state.setScheduleLikeTopApp(true);
+            }
+
+            if (!trackedProcState) {
+                cr.trackProcState(clientProcState, mAdjSeq);
+            }
+
+            if (procState > clientProcState) {
+                procState = clientProcState;
+                state.setCurRawProcState(procState);
+                if (adjType == null) {
+                    adjType = "service";
+                }
+            }
+            if (procState < PROCESS_STATE_IMPORTANT_BACKGROUND
+                    && cr.hasFlag(Context.BIND_SHOWING_UI)) {
+                app.setPendingUiClean(true);
+            }
+            if (adjType != null) {
+                state.setAdjType(adjType);
+                state.setAdjTypeCode(ActivityManager.RunningAppProcessInfo
+                        .REASON_SERVICE_IN_USE);
+                state.setAdjSource(client);
+                state.setAdjSourceProcState(clientProcState);
+                state.setAdjTarget(cr.binding.service.instanceName);
+                if (DEBUG_OOM_ADJ_REASON || logUid == appUid) {
+                    reportOomAdjMessageLocked(TAG_OOM_ADJ, "Raise to " + adjType
+                            + ": " + app + ", due to " + client
+                            + " adj=" + adj + " procState="
+                            + ProcessList.makeProcStateString(procState));
+                }
+            }
+        } else { // BIND_WAIVE_PRIORITY == true
+            // BIND_WAIVE_PRIORITY bindings are special when it comes to the
+            // freezer. Processes bound via WPRI are expected to be running,
+            // but they are not promoted in the LRU list to keep them out of
+            // cached. As a result, they can freeze based on oom_adj alone.
+            // Normally, bindToDeath would fire when a cached app would die
+            // in the background, but nothing will fire when a running process
+            // pings a frozen process. Accordingly, any cached app that is
+            // bound by an unfrozen app via a WPRI binding has to remain
+            // unfrozen.
+            if (clientAdj < CACHED_APP_MIN_ADJ) {
+                app.mOptRecord.setShouldNotFreeze(true);
+            }
+        }
+        if (cr.hasFlag(Context.BIND_TREAT_LIKE_ACTIVITY)) {
+            app.mServices.setTreatLikeActivity(true);
+            if (clientProcState <= PROCESS_STATE_CACHED_ACTIVITY
+                    && procState > PROCESS_STATE_CACHED_ACTIVITY) {
+                // This is a cached process, but somebody wants us to treat it like it has
+                // an activity, okay!
+                procState = PROCESS_STATE_CACHED_ACTIVITY;
+                state.setAdjType("cch-as-act");
+            }
+        }
+        final ActivityServiceConnectionsHolder a = cr.activity;
+        if (cr.hasFlag(Context.BIND_ADJUST_WITH_ACTIVITY)) {
+            if (a != null && adj > FOREGROUND_APP_ADJ
+                    && a.isActivityVisible()) {
+                adj = FOREGROUND_APP_ADJ;
+                state.setCurRawAdj(adj);
+                if (cr.notHasFlag(Context.BIND_NOT_FOREGROUND)) {
+                    if (cr.hasFlag(Context.BIND_IMPORTANT)) {
+                        schedGroup = SCHED_GROUP_TOP_APP_BOUND;
+                    } else {
+                        schedGroup = SCHED_GROUP_DEFAULT;
+                    }
+                }
+                state.setCached(false);
+                state.setAdjType("service");
+                state.setAdjTypeCode(ActivityManager.RunningAppProcessInfo
+                        .REASON_SERVICE_IN_USE);
+                state.setAdjSource(a);
+                state.setAdjSourceProcState(procState);
+                state.setAdjTarget(cr.binding.service.instanceName);
+                if (DEBUG_OOM_ADJ_REASON || logUid == appUid) {
+                    reportOomAdjMessageLocked(TAG_OOM_ADJ,
+                            "Raise to service w/activity: " + app);
+                }
+            }
+        }
+
+        capability |= getDefaultCapability(app, procState);
+
+        // Procstates below BFGS should never have this capability.
+        if (procState > PROCESS_STATE_BOUND_FOREGROUND_SERVICE) {
+            capability &= ~PROCESS_CAPABILITY_BFSL;
+        }
+
+        if (adj < prevRawAdj) {
+            schedGroup = setIntermediateAdjLSP(app, adj, prevRawAdj, schedGroup);
+        }
+        if (procState < prevProcState) {
+            setIntermediateProcStateLSP(app, procState, prevProcState);
+        }
+        if (schedGroup > prevSchedGroup) {
+            setIntermediateSchedGroupLSP(state, schedGroup);
+        }
+        state.setCurCapability(capability);
+
+        state.setEmpty(false);
+    }
+
+    protected void computeProviderHostOomAdjLSP(ContentProviderConnection conn, ProcessRecord app,
+            ProcessRecord client, long now, ProcessRecord topApp, boolean doingAll,
+            boolean cycleReEval, boolean computeClients, int oomAdjReason, int cachedAdj,
+            boolean couldRecurse) {
+        if (app.isPendingFinishAttach()) {
+            // We've set the attaching process state in the computeInitialOomAdjLSP. Skip it here.
+            return;
+        }
+
+        final ProcessStateRecord state = app.mState;
+        final ProcessStateRecord cstate = client.mState;
+
+        if (client == app) {
+            // Being our own client is not interesting.
+            return;
+        }
+        if (couldRecurse) {
+            if (computeClients) {
+                computeOomAdjLSP(client, cachedAdj, topApp, doingAll, now, cycleReEval, true,
+                        oomAdjReason, true);
+            } else if (couldRecurse) {
+                cstate.setCurRawAdj(cstate.getCurAdj());
+                cstate.setCurRawProcState(cstate.getCurProcState());
+            }
+
+            if (shouldSkipDueToCycle(app, cstate, state.getCurRawProcState(), state.getCurRawAdj(),
+                    cycleReEval)) {
+                return;
+            }
+        }
+
+        int clientAdj = cstate.getCurRawAdj();
+        int clientProcState = cstate.getCurRawProcState();
+
+        int adj = state.getCurRawAdj();
+        int procState = state.getCurRawProcState();
+        int schedGroup = state.getCurrentSchedulingGroup();
+        int capability = state.getCurCapability();
+
+        final int prevRawAdj = adj;
+        final int prevProcState = procState;
+        final int prevSchedGroup = schedGroup;
+
+        final int appUid = app.info.uid;
+        final int logUid = mService.mCurOomAdjUid;
+
+        // We always propagate PROCESS_CAPABILITY_BFSL to providers here,
+        // but, right before actually setting it to the process,
+        // we check the final procstate, and remove it if the procsate is below BFGS.
+        capability |= getBfslCapabilityFromClient(client);
+
+        if (clientProcState >= PROCESS_STATE_CACHED_ACTIVITY) {
+            // If the other app is cached for any reason, for purposes here
+            // we are going to consider it empty.
+            clientProcState = PROCESS_STATE_CACHED_EMPTY;
+        }
+        if (client.mOptRecord.shouldNotFreeze()) {
+            // Propagate the shouldNotFreeze flag down the bindings.
+            app.mOptRecord.setShouldNotFreeze(true);
+        }
+
+        state.setCurBoundByNonBgRestrictedApp(state.isCurBoundByNonBgRestrictedApp()
+                || cstate.isCurBoundByNonBgRestrictedApp()
+                || clientProcState <= PROCESS_STATE_BOUND_TOP
+                || (clientProcState == PROCESS_STATE_FOREGROUND_SERVICE
+                        && !cstate.isBackgroundRestricted()));
+
+        String adjType = null;
+        if (adj > clientAdj) {
+            if (state.hasShownUi() && !state.getCachedIsHomeProcess()
+                    && clientAdj > PERCEPTIBLE_APP_ADJ) {
+                adjType = "cch-ui-provider";
+            } else {
+                adj = Math.max(clientAdj, FOREGROUND_APP_ADJ);
+                state.setCurRawAdj(adj);
+                adjType = "provider";
+            }
+            state.setCached(state.isCached() & cstate.isCached());
+        }
+
+        if (clientProcState <= PROCESS_STATE_FOREGROUND_SERVICE) {
+            if (adjType == null) {
+                adjType = "provider";
+            }
+            if (clientProcState == PROCESS_STATE_TOP) {
+                clientProcState = PROCESS_STATE_BOUND_TOP;
+            } else {
+                clientProcState = PROCESS_STATE_BOUND_FOREGROUND_SERVICE;
+            }
+        }
+
+        conn.trackProcState(clientProcState, mAdjSeq);
+        if (procState > clientProcState) {
+            procState = clientProcState;
+            state.setCurRawProcState(procState);
+        }
+        if (cstate.getCurrentSchedulingGroup() > schedGroup) {
+            schedGroup = SCHED_GROUP_DEFAULT;
+        }
+        if (adjType != null) {
+            state.setAdjType(adjType);
+            state.setAdjTypeCode(ActivityManager.RunningAppProcessInfo
+                    .REASON_PROVIDER_IN_USE);
+            state.setAdjSource(client);
+            state.setAdjSourceProcState(clientProcState);
+            state.setAdjTarget(conn.provider.name);
+            if (DEBUG_OOM_ADJ_REASON || logUid == appUid) {
+                reportOomAdjMessageLocked(TAG_OOM_ADJ, "Raise to " + adjType
+                        + ": " + app + ", due to " + client
+                        + " adj=" + adj + " procState="
+                        + ProcessList.makeProcStateString(procState));
+            }
+        }
+
+        // Procstates below BFGS should never have this capability.
+        if (procState > PROCESS_STATE_BOUND_FOREGROUND_SERVICE) {
+            capability &= ~PROCESS_CAPABILITY_BFSL;
+        }
+
+        if (adj < prevRawAdj) {
+            schedGroup = setIntermediateAdjLSP(app, adj, prevRawAdj, schedGroup);
+        }
+        if (procState < prevProcState) {
+            setIntermediateProcStateLSP(app, procState, prevProcState);
+        }
+        if (schedGroup > prevSchedGroup) {
+            setIntermediateSchedGroupLSP(state, schedGroup);
+        }
+        state.setCurCapability(capability);
+
+        state.setEmpty(false);
+    }
+
+    protected int getDefaultCapability(ProcessRecord app, int procState) {
         final int networkCapabilities =
                 NetworkPolicyManager.getDefaultProcessNetworkCapabilities(procState);
         final int baseCapabilities;
@@ -2882,7 +3097,7 @@
     /**
      * @return the BFSL capability from a client (of a service binding or provider).
      */
-    int getBfslCapabilityFromClient(ProcessRecord client) {
+    protected int getBfslCapabilityFromClient(ProcessRecord client) {
         // Procstates above FGS should always have this flag. We shouldn't need this logic,
         // but let's do it just in case.
         if (client.mState.getCurProcState() < PROCESS_STATE_FOREGROUND_SERVICE) {
@@ -2967,7 +3182,7 @@
 
     /** Inform the oomadj observer of changes to oomadj. Used by tests. */
     @GuardedBy("mService")
-    private void reportOomAdjMessageLocked(String tag, String msg) {
+    protected void reportOomAdjMessageLocked(String tag, String msg) {
         Slog.d(tag, msg);
         synchronized (mService.mOomAdjObserverLock) {
             if (mService.mCurOomAdjObserver != null) {
@@ -2983,7 +3198,7 @@
 
     /** Applies the computed oomadj, procstate and sched group values and freezes them in set* */
     @GuardedBy({"mService", "mProcLock"})
-    private boolean applyOomAdjLSP(ProcessRecord app, boolean doingAll, long now,
+    protected boolean applyOomAdjLSP(ProcessRecord app, boolean doingAll, long now,
             long nowElapsed, @OomAdjReason int oomAdjReson) {
         boolean success = true;
         final ProcessStateRecord state = app.mState;
@@ -3272,6 +3487,8 @@
         int initialCapability =  PROCESS_CAPABILITY_NONE;
         boolean initialCached = true;
         final ProcessStateRecord state = app.mState;
+        final int prevProcState = PROCESS_STATE_UNKNOWN;
+        final int prevAdj = UNKNOWN_ADJ;
         // If the process has been marked as foreground, it is starting as the top app (with
         // Zygote#START_AS_TOP_APP_ARG), so boost the thread priority of its default UI thread.
         if (state.hasForegroundActivities()) {
@@ -3306,6 +3523,9 @@
         state.setCurRawAdj(ProcessList.FOREGROUND_APP_ADJ);
         state.setForcingToImportant(null);
         state.setHasShownUi(false);
+
+        onProcessStateChanged(app, prevProcState);
+        onProcessOomAdjChanged(app, prevAdj);
     }
 
     // ONLY used for unit testing in OomAdjusterTests.java
@@ -3553,4 +3773,56 @@
         }
         processes.clear();
     }
+
+    @GuardedBy("mService")
+    void onProcessBeginLocked(@NonNull ProcessRecord app) {
+        // Empty, the OomAdjusterModernImpl will have an implementation.
+    }
+
+    @GuardedBy("mService")
+    void onProcessEndLocked(@NonNull ProcessRecord app) {
+        // Empty, the OomAdjusterModernImpl will have an implementation.
+    }
+
+    /**
+     * Called when the process state is changed outside of the OomAdjuster.
+     */
+    @GuardedBy("mService")
+    void onProcessStateChanged(@NonNull ProcessRecord app, int prevProcState) {
+        // Empty, the OomAdjusterModernImpl will have an implementation.
+    }
+
+    /**
+     * Called when the oom adj is changed outside of the OomAdjuster.
+     */
+    @GuardedBy("mService")
+    void onProcessOomAdjChanged(@NonNull ProcessRecord app, int prevAdj) {
+        // Empty, the OomAdjusterModernImpl will have an implementation.
+    }
+
+    @VisibleForTesting
+    void resetInternal() {
+        // Empty, the OomAdjusterModernImpl will have an implementation.
+    }
+
+    @GuardedBy("mService")
+    protected int getInitialAdj(@NonNull ProcessRecord app) {
+        return app.mState.getCurAdj();
+    }
+
+    @GuardedBy("mService")
+    protected int getInitialProcState(@NonNull ProcessRecord app) {
+        return app.mState.getCurProcState();
+    }
+
+    @GuardedBy("mService")
+    protected int getInitialCapability(@NonNull ProcessRecord app) {
+        return app.mState.getCurCapability();
+    }
+
+    @GuardedBy("mService")
+    protected boolean getInitialIsCurBoundByNonBgRestrictedApp(@NonNull ProcessRecord app) {
+        // The caller will set the initial value in this implementation.
+        return app.mState.isCurBoundByNonBgRestrictedApp();
+    }
 }
diff --git a/services/core/java/com/android/server/am/OomAdjuster.md b/services/core/java/com/android/server/am/OomAdjuster.md
index febc37b..da5e12e 100644
--- a/services/core/java/com/android/server/am/OomAdjuster.md
+++ b/services/core/java/com/android/server/am/OomAdjuster.md
@@ -17,10 +17,10 @@
 
 ## Purpose of Oom Adjuster
 
-The Android OS runs with limited hardware resources, i.e. CPU/RAM/Power. To strive for the better performance, Oom Ajuster is introduced to tweak the following 3 major factors:
+The Android OS runs with limited hardware resources, i.e. CPU/RAM/Power. To strive for the better performance, Oom Adjuster is introduced to tweak the following 3 major factors:
 
  * Process State
-   * Wildly used by the System Server, i.e., determine if it's foreground or not, change the GC behavior, etc.
+   * Widely used by the System Server, i.e., determine if it's foreground or not, change the GC behavior, etc.
    * Defined in `ActivityManager#PROCESS_STATE_*`
  * Oom Adj score
    * Used by the lmkd to determine which process should be expunged on memory pressure.
@@ -31,36 +31,36 @@
 
 ## Process Capabilities
 
-Besides the above 3 major factors, Android R introduced the Process Capabilities `ActivityManager#PROCESS_CAPABILITY_*`.  It's a new attribute to process record, mainly designed for supporting the "while-in-use" permission model - in additional to the traditional Android permissions, wheather or not a process has access to a given API, will be guarded by its current process state as well. The OomAdjuster will compute the process capabilities during updating the oom adj. Meanwhile, the flag `ActivityManager#BIND_INCLUDE_CAPABILITIES` enables to possiblity to "transfer" the capability from a client process to the service process it binds to.
+Besides the above 3 major factors, Android R introduced the Process Capabilities `ActivityManager#PROCESS_CAPABILITY_*`.  It's a new attribute to process record, mainly designed for supporting the "while-in-use" permission model - in addition to the traditional Android permissions, whether or not a process has access to a given API, will be guarded by its current process state as well. The OomAdjuster will compute the process capabilities during updating the oom adj. Meanwhile, the flag `ActivityManager#BIND_INCLUDE_CAPABILITIES` enables the possibility to "transfer" the capability from a client process to the service process it binds to.
 
 ## Rationale of Oom Adjuster
 
-System server keeps a list of recent used app processes. Given the 4 types of entities that an Android processes could have: Activity, Service, Content Provider and Broadcast Receiver, the System Server has to adjust the above 3 factors to give the users the best performance according to the states of the entities. A typical case would be that: foreground app A binds into a background service B in order to serve the user, in the case of memory pressure, the background service B should be avoided from being expunged since it would result user-perceptible interruption of service. The Oom Adjuster is to tweak the aforementioned 3 factors for those app processes.
+System server keeps a list of recent used app processes. Given the 4 types of entities that an Android processes could have: Activity, Service, Content Provider and Broadcast Receiver, the System Server has to adjust the above 3 factors to give the users the best performance according to the states of the entities. A typical case would be that: foreground app A binds into a background service B in order to serve the user, in the case of memory pressure, the background service B should be avoided from being expunged since it would result in user-perceptible interruption of service. The Oom Adjuster is to tweak the aforementioned 3 factors for those app processes.
 
 The timing of updating the Oom Adj score is vital: assume a camera process in background gets launched into foreground, launching camera typically incurs high memory pressure, which could incur low memory kills - if the camera process isn't moved out of the background adj group, it could get killed by lmkd. Therefore the updates have to be called pretty frequently: in case there is an activity start, service binding, etc.
 
 The update procedure basically consists of 3 parts:
   * Find out the process record to be updated
-    * There are two categories of updateOomAdjLocked: one with the target process record to be updated, while the other one is to update all process record.
+    * There are two categories of updateOomAdjLocked: one with the target process record to be updated, while the other one is to update all process records.
     * Besides that, while computing the Oom Aj score, the clients of service connections or content providers of the present process record, which forms a process dependency graph actually, will be evaluated as well.
-    * Starting from Android R, when updating for a specific process record, an optimization is made that, only the reachable process records starting from this process record in the process dependency graph, will be re-evaluated.
+    * Starting from Android R, when updating a specific process record, an optimization is made that only the reachable process records starting from this process record in the process dependency graph will be re-evaluated.
     * The `cached` Oom Adj scores are grouped in `bucket`, which is used in the isolated processes: they could be correlated - assume one isolated Chrome process is at Oom Adj score 920 and another one is 980; the later one could get expunged much earlier than the former one, which doesn't make sense; grouping them would be a big relief for this case.
   * Compute Oom Adj score
     * This procedure returns true if there is a score change, false if there is no.
     * The curAdj field in the process record is used as an intermediate value during the computation.
     * Initialize the Process State to `PROCESS_STATE_CACHED_EMPTY`, which is the lowest importance.
     * Calculate the scores based on various factors:
-      * If it's not allowed to be lower than `ProcessList#FOREGROUND_APP_ADJ`, meaning it's propbably a persistent process, there is no too much to do here.
+      * If it's not allowed to be lower than `ProcessList#FOREGROUND_APP_ADJ`, meaning it's probably a persistent process, there is no too much to do here.
       * Exame if the process is the top app, running remote animation, running instrumentation, receiving broadcast, executing services, running on top but sleeping (screen off), update the intermediate values.
       * Ask Window Manager (yes, ActivityTaskManager is with WindowManager now) to tell each activity's visibility information.
-      * Check if the process has recent tasks, check if it's hosting a foreground service, overlay UI, toast etc. Note for the foreground service, if it was in foreground status, allow it to stay in higher rank in memory for a while: Assuming a camera captureing case, where the camera app is still processing the picture while being switched out of foreground - keep it stay in higher rank in memory would ensure the pictures are persisted correctly.
-      * Check if the process is the heavy weight process, whose launching/exiting would be slow and it's better to keep it in the memory. Note there should be only one heavy weight process across the system.
+      * Check if the process has recent tasks, check if it's hosting a foreground service, overlay UI, toast etc. Note for the foreground service, if it was in foreground status, allow it to stay in higher rank in memory for a while: Assuming a camera capturing case, where the camera app is still processing the picture while being switched out of foreground - keep it stay in higher rank in memory would ensure the pictures are persisted correctly.
+      * Check if the process is the heavyweight process, whose launching/exiting would be slow and it's better to keep it in the memory. Note there should be only one heavyweight process across the system.
       * For sure the Home process shouldn't be expunged frequently as well.
       * The next two factors are either it was the previous process with visible UI to the user, or it's a backup agent.
       * And then it goes to the massive searches against the service connections and the content providers, each of the clients will be evaluated, and the Oom Adj score could get updated according to its clients' scores. However there are a bunch of service binding flags which could impact the result:
         * Below table captures the results with given various service binding states:
 
-        | Conditon #1                     | Condition #2                                               | Condition #3                                 | Condition #4                                      | Result                   |
+        | Condition #1                    | Condition #2                                               | Condition #3                                 | Condition #4                                      | Result                   |
         |---------------------------------|------------------------------------------------------------|----------------------------------------------|---------------------------------------------------|--------------------------|
         | `BIND_WAIVE_PRIORITY` not set   | `BIND_ALLOW_OOM_MANAGEMENT` set                            | Shown UI && Not Home                         |                                                   | Use the app's own Adj    |
         |                                 |                                                            | Inactive for a while                         |                                                   | Use the app's own Adj    |
@@ -85,7 +85,7 @@
         |                                 |                                                            |                                              | `BIND_IMPORTANT` is NOT set                       | Sched = default          |
         * Below table captures the results with given various content provider binding states:
 
-        | Conditon #1                     | Condition #2                                               | Condition #3                                 | Result                   |
+        | Condition #1                    | Condition #2                                               | Condition #3                                 | Result                   |
         |---------------------------------|------------------------------------------------------------|----------------------------------------------|--------------------------|
         | Client's process state >= cached|                                                            |                                              | Client ProcState = empty |
         | Adj > Client Adj                | Not shown UI or is Home, or Client's Adj <= perceptible    | Client's Adj <= foreground Adj               | Try foreground Adj       |
@@ -94,11 +94,11 @@
         |                                 | Client's process state is NOT top                          |                                              | ProcState = bound fg svc |
         | Has external dependencies       | Adj > fg app                                               |                                              | adj = fg app             |
         |                                 | Process state > important foreground                       |                                              | ProcState = important fg |
-        | Still within retain time        | Adj > previous app Adj                                     |                                              | adj = previuos app adj   |
+        | Still within retain time        | Adj > previous app Adj                                     |                                              | adj = previous app adj   |
         |                                 | Process state > last activity                              |                                              | ProcState = last activity|
         * Some additional tweaks after the above ones:
 
-        | Conditon #1                     | Condition #2                                               | Condition #3                                 | Result                             |
+        | Condition #1                    | Condition #2                                               | Condition #3                                 | Result                             |
         |---------------------------------|------------------------------------------------------------|----------------------------------------------|------------------------------------|
         | Process state >= cached empty   | Has client activities                                      |                                              | ProcState = cached activity client |
         |                                 | treat like activity (IME)                                  |                                              | ProcState = cached activity        |
@@ -108,7 +108,7 @@
 
 ## Cycles, Cycles, Cycles
 
-Another interesting aspect of the Oom Adjuster is the cycles of the dependencies. A simple example would be like below illustration, process A is hosting a service which is bound by process B; meanwhile the process B is hosting a service which is bound by process A.
+Another interesting aspect of the Oom Adjuster is the cycles of the dependencies. A simple example would be like the illustration below, process A is hosting a service which is bound by process B; meanwhile process B is hosting a service which is bound by process A.
 <pre>
   +-------------+           +-------------+
   |  Process A  | <-------- |  Process B  |
@@ -116,7 +116,7 @@
   +-------------+           +-------------+
 </pre>
 
-There could be very complicated cases, which could involve multiple cycles, and in the dependency graph, each of the process record node could have different importance.
+There could be very complicated cases, which could involve multiple cycles, and in the dependency graph, each of the process record nodes could have different importance.
 <pre>
   +-------------+           +-------------+           +-------------+           +-------------+           +-------------+
   |  Process D  | --------> |  Process A  | <-------- |  Process B  | <-------- |  Process C  | <-------- |  Process A  |
@@ -124,9 +124,34 @@
   +-------------+           +-------------+           +-------------+           +-------------+           +-------------+
 </pre>
 
-The Oom Adjuster maintains a global sequence ID `mAdjSeq` to track the current Oom Adjuster calling. And each of the process record has a field to track in which sequence the process record is evaluated. If during the Oom Adj computation, a process record with sequence ID as same as the current global sequence ID, this would mean that a cycle is detected; in this case:
+The Oom Adjuster maintains a global sequence ID `mAdjSeq` to track the current Oom Adjuster calling. And each of the process records has a field to track in which sequence the process record is evaluated. If during the Oom Adj computation, a process record with sequence ID as same as the current global sequence ID, this would mean that a cycle is detected; in this case:
   * Decrement the sequence ID of each process if there is a cycle.
-  * Re-evaluate each of the process record within the cycle until nothing was promoted.
+  * Re-evaluate each of the process records within the cycle until nothing was promoted.
   * Iterate the processes from least important to most important ones.
   * A maximum retries of 10 is enforced, while in practice, the maximum retries could reach only 2 to 3.
 
+## The Modern Implementation
+
+As aforementioned, the OomAdjuster makes the computation in a recursive way, while this is inefficient in dealing with the cycles. The overall code complexity should be around **O((1 + num(retries)) * num(procs) * num(binding connections))**. In addition, depending on the ordering of the input, the algorithm may produce different results and sometimes it's wrong.
+
+The new "Modern Implementation" is based on the rationale that, apps can't promote the service/provider it connects to, to a higher bucket than itself. We are introducing a bucket based, breadth first search algorithm, as illustrated below:
+
+```
+for all processes in the process list
+  compute the state of each process, but, excluding its clients
+  put each process to the corresponding bucket according to the state value
+done
+
+for each bucket, starting from the top most to the bottom most
+  for each process in the bucket
+     for each process it binds to
+           if the state of the bindee process could be elevated because of the binding; then
+              move the bindee process to the higher bucket
+           fi
+      done
+  done
+done
+```
+
+The overall code complexity should be around **O(num(procs) * num(binding connections))**, which saves the retry time from the existing algorithm.
+
diff --git a/services/core/java/com/android/server/am/OomAdjusterModernImpl.java b/services/core/java/com/android/server/am/OomAdjusterModernImpl.java
new file mode 100644
index 0000000..b852ef5
--- /dev/null
+++ b/services/core/java/com/android/server/am/OomAdjusterModernImpl.java
@@ -0,0 +1,1125 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.am;
+
+import static android.app.ActivityManager.PROCESS_STATE_BACKUP;
+import static android.app.ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE;
+import static android.app.ActivityManager.PROCESS_STATE_BOUND_TOP;
+import static android.app.ActivityManager.PROCESS_STATE_CACHED_ACTIVITY;
+import static android.app.ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT;
+import static android.app.ActivityManager.PROCESS_STATE_CACHED_EMPTY;
+import static android.app.ActivityManager.PROCESS_STATE_CACHED_RECENT;
+import static android.app.ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE;
+import static android.app.ActivityManager.PROCESS_STATE_HEAVY_WEIGHT;
+import static android.app.ActivityManager.PROCESS_STATE_HOME;
+import static android.app.ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND;
+import static android.app.ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND;
+import static android.app.ActivityManager.PROCESS_STATE_LAST_ACTIVITY;
+import static android.app.ActivityManager.PROCESS_STATE_PERSISTENT;
+import static android.app.ActivityManager.PROCESS_STATE_PERSISTENT_UI;
+import static android.app.ActivityManager.PROCESS_STATE_RECEIVER;
+import static android.app.ActivityManager.PROCESS_STATE_SERVICE;
+import static android.app.ActivityManager.PROCESS_STATE_TOP;
+import static android.app.ActivityManager.PROCESS_STATE_TOP_SLEEPING;
+import static android.app.ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND;
+import static android.app.ActivityManager.PROCESS_STATE_UNKNOWN;
+
+import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_OOM_ADJ;
+import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_UID_OBSERVERS;
+import static com.android.server.am.ActivityManagerService.TAG_UID_OBSERVERS;
+import static com.android.server.am.ProcessList.BACKUP_APP_ADJ;
+import static com.android.server.am.ProcessList.CACHED_APP_MIN_ADJ;
+import static com.android.server.am.ProcessList.FOREGROUND_APP_ADJ;
+import static com.android.server.am.ProcessList.HEAVY_WEIGHT_APP_ADJ;
+import static com.android.server.am.ProcessList.HOME_APP_ADJ;
+import static com.android.server.am.ProcessList.NATIVE_ADJ;
+import static com.android.server.am.ProcessList.PERCEPTIBLE_APP_ADJ;
+import static com.android.server.am.ProcessList.PERCEPTIBLE_LOW_APP_ADJ;
+import static com.android.server.am.ProcessList.PERCEPTIBLE_MEDIUM_APP_ADJ;
+import static com.android.server.am.ProcessList.PERCEPTIBLE_RECENT_FOREGROUND_APP_ADJ;
+import static com.android.server.am.ProcessList.PERSISTENT_PROC_ADJ;
+import static com.android.server.am.ProcessList.PERSISTENT_SERVICE_ADJ;
+import static com.android.server.am.ProcessList.PREVIOUS_APP_ADJ;
+import static com.android.server.am.ProcessList.SCHED_GROUP_BACKGROUND;
+import static com.android.server.am.ProcessList.SERVICE_ADJ;
+import static com.android.server.am.ProcessList.SERVICE_B_ADJ;
+import static com.android.server.am.ProcessList.SYSTEM_ADJ;
+import static com.android.server.am.ProcessList.UNKNOWN_ADJ;
+import static com.android.server.am.ProcessList.VISIBLE_APP_ADJ;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.app.ActivityManager;
+import android.app.ActivityManagerInternal.OomAdjReason;
+import android.content.pm.ServiceInfo;
+import android.os.IBinder;
+import android.os.SystemClock;
+import android.os.Trace;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+import android.util.Slog;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.server.ServiceThread;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.function.Consumer;
+
+/**
+ * A modern implementation of the oom adjuster.
+ */
+public class OomAdjusterModernImpl extends OomAdjuster {
+    static final String TAG = "OomAdjusterModernImpl";
+
+    // The ADJ_SLOT_INVALID is NOT an actual slot.
+    static final int ADJ_SLOT_INVALID = -1;
+    static final int ADJ_SLOT_NATIVE = 0;
+    static final int ADJ_SLOT_SYSTEM = 1;
+    static final int ADJ_SLOT_PERSISTENT_PROC = 2;
+    static final int ADJ_SLOT_PERSISTENT_SERVICE = 3;
+    static final int ADJ_SLOT_FOREGROUND_APP = 4;
+    static final int ADJ_SLOT_PERCEPTIBLE_RECENT_FOREGROUND_APP = 5;
+    static final int ADJ_SLOT_VISIBLE_APP = 6;
+    static final int ADJ_SLOT_PERCEPTIBLE_APP = 7;
+    static final int ADJ_SLOT_PERCEPTIBLE_MEDIUM_APP = 8;
+    static final int ADJ_SLOT_PERCEPTIBLE_LOW_APP = 9;
+    static final int ADJ_SLOT_BACKUP_APP = 10;
+    static final int ADJ_SLOT_HEAVY_WEIGHT_APP = 11;
+    static final int ADJ_SLOT_SERVICE = 12;
+    static final int ADJ_SLOT_HOME_APP = 13;
+    static final int ADJ_SLOT_PREVIOUS_APP = 14;
+    static final int ADJ_SLOT_SERVICE_B = 15;
+    static final int ADJ_SLOT_CACHED_APP = 16;
+    static final int ADJ_SLOT_UNKNOWN = 17;
+
+    @IntDef(prefix = { "ADJ_SLOT_" }, value = {
+        ADJ_SLOT_INVALID,
+        ADJ_SLOT_NATIVE,
+        ADJ_SLOT_SYSTEM,
+        ADJ_SLOT_PERSISTENT_PROC,
+        ADJ_SLOT_PERSISTENT_SERVICE,
+        ADJ_SLOT_FOREGROUND_APP,
+        ADJ_SLOT_PERCEPTIBLE_RECENT_FOREGROUND_APP,
+        ADJ_SLOT_VISIBLE_APP,
+        ADJ_SLOT_PERCEPTIBLE_APP,
+        ADJ_SLOT_PERCEPTIBLE_MEDIUM_APP,
+        ADJ_SLOT_PERCEPTIBLE_LOW_APP,
+        ADJ_SLOT_BACKUP_APP,
+        ADJ_SLOT_HEAVY_WEIGHT_APP,
+        ADJ_SLOT_SERVICE,
+        ADJ_SLOT_HOME_APP,
+        ADJ_SLOT_PREVIOUS_APP,
+        ADJ_SLOT_SERVICE_B,
+        ADJ_SLOT_CACHED_APP,
+        ADJ_SLOT_UNKNOWN,
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    @interface AdjSlot{}
+
+    static final int[] ADJ_SLOT_VALUES = new int[] {
+        NATIVE_ADJ,
+        SYSTEM_ADJ,
+        PERSISTENT_PROC_ADJ,
+        PERSISTENT_SERVICE_ADJ,
+        FOREGROUND_APP_ADJ,
+        PERCEPTIBLE_RECENT_FOREGROUND_APP_ADJ,
+        VISIBLE_APP_ADJ,
+        PERCEPTIBLE_APP_ADJ,
+        PERCEPTIBLE_MEDIUM_APP_ADJ,
+        PERCEPTIBLE_LOW_APP_ADJ,
+        BACKUP_APP_ADJ,
+        HEAVY_WEIGHT_APP_ADJ,
+        SERVICE_ADJ,
+        HOME_APP_ADJ,
+        PREVIOUS_APP_ADJ,
+        SERVICE_B_ADJ,
+        CACHED_APP_MIN_ADJ,
+        UNKNOWN_ADJ,
+    };
+
+    /**
+     * Note: Always use the raw adj to call this API.
+     */
+    static @AdjSlot int adjToSlot(int adj) {
+        if (adj >= ADJ_SLOT_VALUES[0] && adj <= ADJ_SLOT_VALUES[ADJ_SLOT_VALUES.length - 1]) {
+            // Conduct a binary search, in most of the cases it'll get a hit.
+            final int index = Arrays.binarySearch(ADJ_SLOT_VALUES, adj);
+            if (index >= 0) {
+                return index;
+            }
+            // If not found, the returned index above should be (-(insertion point) - 1),
+            // let's return the first slot that's less than the adj value.
+            return -(index + 1) - 1;
+        }
+        return ADJ_SLOT_VALUES.length - 1;
+    }
+
+    static final int[] PROC_STATE_SLOTS = new int[] {
+        PROCESS_STATE_PERSISTENT, // 0
+        PROCESS_STATE_PERSISTENT_UI,
+        PROCESS_STATE_TOP,
+        PROCESS_STATE_BOUND_TOP,
+        PROCESS_STATE_FOREGROUND_SERVICE,
+        PROCESS_STATE_BOUND_FOREGROUND_SERVICE,
+        PROCESS_STATE_IMPORTANT_FOREGROUND,
+        PROCESS_STATE_IMPORTANT_BACKGROUND,
+        PROCESS_STATE_TRANSIENT_BACKGROUND,
+        PROCESS_STATE_BACKUP,
+        PROCESS_STATE_SERVICE,
+        PROCESS_STATE_RECEIVER,
+        PROCESS_STATE_TOP_SLEEPING,
+        PROCESS_STATE_HEAVY_WEIGHT,
+        PROCESS_STATE_HOME,
+        PROCESS_STATE_LAST_ACTIVITY,
+        PROCESS_STATE_CACHED_ACTIVITY,
+        PROCESS_STATE_CACHED_ACTIVITY_CLIENT,
+        PROCESS_STATE_CACHED_RECENT,
+        PROCESS_STATE_CACHED_EMPTY,
+        PROCESS_STATE_UNKNOWN, // -1
+    };
+
+    static int processStateToSlot(@ActivityManager.ProcessState int state) {
+        if (state >= PROCESS_STATE_PERSISTENT && state <= PROCESS_STATE_CACHED_EMPTY) {
+            return state;
+        }
+        return PROC_STATE_SLOTS.length - 1;
+    }
+
+    /**
+     * A container node in the {@link LinkedProcessRecordList},
+     * holding the references to {@link ProcessRecord}.
+     */
+    static class ProcessRecordNode {
+        static final int NODE_TYPE_PROC_STATE = 0;
+        static final int NODE_TYPE_ADJ = 1;
+
+        @IntDef(prefix = { "NODE_TYPE_" }, value = {
+            NODE_TYPE_PROC_STATE,
+            NODE_TYPE_ADJ,
+        })
+        @Retention(RetentionPolicy.SOURCE)
+        @interface NodeType {}
+
+        static final int NUM_NODE_TYPE = NODE_TYPE_ADJ + 1;
+
+        @Nullable ProcessRecordNode mPrev;
+        @Nullable ProcessRecordNode mNext;
+        final @Nullable ProcessRecord mApp;
+
+        ProcessRecordNode(@Nullable ProcessRecord app) {
+            mApp = app;
+        }
+
+        void unlink() {
+            if (mPrev != null) {
+                mPrev.mNext = mNext;
+            }
+            if (mNext != null) {
+                mNext.mPrev = mPrev;
+            }
+            mPrev = mNext = null;
+        }
+
+        boolean isLinked() {
+            return mPrev != null && mNext != null;
+        }
+
+        @Override
+        public String toString() {
+            final StringBuilder sb = new StringBuilder();
+            sb.append("ProcessRecordNode{");
+            sb.append(Integer.toHexString(System.identityHashCode(this)));
+            sb.append(' ');
+            sb.append(mApp);
+            sb.append(' ');
+            sb.append(mApp != null ? mApp.mState.getCurProcState() : PROCESS_STATE_UNKNOWN);
+            sb.append(' ');
+            sb.append(mApp != null ? mApp.mState.getCurAdj() : UNKNOWN_ADJ);
+            sb.append(' ');
+            sb.append(Integer.toHexString(System.identityHashCode(mPrev)));
+            sb.append(' ');
+            sb.append(Integer.toHexString(System.identityHashCode(mNext)));
+            sb.append('}');
+            return sb.toString();
+        }
+    }
+
+    private class ProcessRecordNodes {
+        private final @ProcessRecordNode.NodeType int mType;
+
+        private final LinkedProcessRecordList[] mProcessRecordNodes;
+        // The last node besides the tail.
+        private final ProcessRecordNode[] mLastNode;
+
+        ProcessRecordNodes(@ProcessRecordNode.NodeType int type, int size) {
+            mType = type;
+            mProcessRecordNodes = new LinkedProcessRecordList[size];
+            for (int i = 0; i < size; i++) {
+                mProcessRecordNodes[i] = new LinkedProcessRecordList(type);
+            }
+            mLastNode = new ProcessRecordNode[size];
+        }
+
+        int size() {
+            return mProcessRecordNodes.length;
+        }
+
+        @VisibleForTesting
+        void reset() {
+            for (int i = 0; i < mProcessRecordNodes.length; i++) {
+                mProcessRecordNodes[i].reset();
+                mLastNode[i] = null;
+            }
+        }
+
+        void resetLastNodes() {
+            for (int i = 0; i < mProcessRecordNodes.length; i++) {
+                mLastNode[i] = mProcessRecordNodes[i].getLastNodeBeforeTail();
+            }
+        }
+
+        void setLastNodeToHead(int slot) {
+            mLastNode[slot] = mProcessRecordNodes[slot].HEAD;
+        }
+
+        void forEachNewNode(int slot, @NonNull Consumer<OomAdjusterArgs> callback) {
+            ProcessRecordNode node = mLastNode[slot].mNext;
+            final ProcessRecordNode tail = mProcessRecordNodes[slot].TAIL;
+            while (node != tail) {
+                mTmpOomAdjusterArgs.mApp = node.mApp;
+                // Save the next before calling callback, since that may change the node.mNext.
+                final ProcessRecordNode next = node.mNext;
+                callback.accept(mTmpOomAdjusterArgs);
+                // There are couple of cases:
+                // a) The current node is moved to another slot
+                //    - for this case, we'd need to keep using the "next" node.
+                // b) There are one or more new nodes being appended to this slot
+                //    - for this case, we'd need to make sure we scan the new node too.
+                // Based on the assumption that case a) is only possible with
+                // the computeInitialOomAdjLSP(), where the movings are for single node only,
+                // we may safely assume that, if the "next" used to be the "tail" here, and it's
+                // now a new tail somewhere else, that's case a); otherwise, it's case b);
+                node = next == tail && node.mNext != null && node.mNext.mNext != null
+                        ? node.mNext : next;
+            }
+        }
+
+        int getNumberOfSlots() {
+            return mProcessRecordNodes.length;
+        }
+
+        void moveAppTo(@NonNull ProcessRecord app, int prevSlot, int newSlot) {
+            final ProcessRecordNode node = app.mLinkedNodes[mType];
+            if (prevSlot != ADJ_SLOT_INVALID) {
+                if (mLastNode[prevSlot] == node) {
+                    mLastNode[prevSlot] = node.mPrev;
+                }
+                node.unlink();
+            }
+            mProcessRecordNodes[newSlot].append(node);
+        }
+
+        void moveAllNodesTo(int fromSlot, int toSlot) {
+            final LinkedProcessRecordList fromList = mProcessRecordNodes[fromSlot];
+            final LinkedProcessRecordList toList = mProcessRecordNodes[toSlot];
+            if (fromSlot != toSlot && fromList.HEAD.mNext != fromList.TAIL) {
+                fromList.moveTo(toList);
+                mLastNode[fromSlot] = fromList.getLastNodeBeforeTail();
+            }
+        }
+
+        void moveAppToTail(ProcessRecord app) {
+            final ProcessRecordNode node = app.mLinkedNodes[mType];
+            int slot;
+            switch (mType) {
+                case ProcessRecordNode.NODE_TYPE_PROC_STATE:
+                    slot = processStateToSlot(app.mState.getCurProcState());
+                    if (mLastNode[slot] == node) {
+                        mLastNode[slot] = node.mPrev;
+                    }
+                    mProcessRecordNodes[slot].moveNodeToTail(node);
+                    break;
+                case ProcessRecordNode.NODE_TYPE_ADJ:
+                    slot = adjToSlot(app.mState.getCurRawAdj());
+                    if (mLastNode[slot] == node) {
+                        mLastNode[slot] = node.mPrev;
+                    }
+                    mProcessRecordNodes[slot].moveNodeToTail(node);
+                    break;
+                default:
+                    return;
+            }
+
+        }
+
+        void reset(int slot) {
+            mProcessRecordNodes[slot].reset();
+        }
+
+        void unlink(@NonNull ProcessRecord app) {
+            final ProcessRecordNode node = app.mLinkedNodes[mType];
+            final int slot = getCurrentSlot(app);
+            if (slot != ADJ_SLOT_INVALID) {
+                if (mLastNode[slot] == node) {
+                    mLastNode[slot] = node.mPrev;
+                }
+            }
+            node.unlink();
+        }
+
+        void append(@NonNull ProcessRecord app) {
+            append(app, getCurrentSlot(app));
+        }
+
+        void append(@NonNull ProcessRecord app, int targetSlot) {
+            final ProcessRecordNode node = app.mLinkedNodes[mType];
+            mProcessRecordNodes[targetSlot].append(node);
+        }
+
+        private int getCurrentSlot(@NonNull ProcessRecord app) {
+            switch (mType) {
+                case ProcessRecordNode.NODE_TYPE_PROC_STATE:
+                    return processStateToSlot(app.mState.getCurProcState());
+                case ProcessRecordNode.NODE_TYPE_ADJ:
+                    return adjToSlot(app.mState.getCurRawAdj());
+            }
+            return ADJ_SLOT_INVALID;
+        }
+
+        String toString(int slot, int logUid) {
+            return "lastNode=" + mLastNode[slot] + " " + mProcessRecordNodes[slot].toString(logUid);
+        }
+
+        /**
+         * A simple version of {@link java.util.LinkedList}, as here we don't allocate new node
+         * while adding an object to it.
+         */
+        private static class LinkedProcessRecordList {
+            // Sentinel head/tail, to make bookkeeping work easier.
+            final ProcessRecordNode HEAD = new ProcessRecordNode(null);
+            final ProcessRecordNode TAIL = new ProcessRecordNode(null);
+            final @ProcessRecordNode.NodeType int mNodeType;
+
+            LinkedProcessRecordList(@ProcessRecordNode.NodeType int nodeType) {
+                HEAD.mNext = TAIL;
+                TAIL.mPrev = HEAD;
+                mNodeType = nodeType;
+            }
+
+            void append(@NonNull ProcessRecordNode node) {
+                node.mNext = TAIL;
+                node.mPrev = TAIL.mPrev;
+                TAIL.mPrev.mNext = node;
+                TAIL.mPrev = node;
+            }
+
+            void moveTo(@NonNull LinkedProcessRecordList toList) {
+                if (HEAD.mNext != TAIL) {
+                    toList.TAIL.mPrev.mNext = HEAD.mNext;
+                    HEAD.mNext.mPrev = toList.TAIL.mPrev;
+                    toList.TAIL.mPrev = TAIL.mPrev;
+                    TAIL.mPrev.mNext = toList.TAIL;
+                    HEAD.mNext = TAIL;
+                    TAIL.mPrev = HEAD;
+                }
+            }
+
+            void moveNodeToTail(@NonNull ProcessRecordNode node) {
+                node.unlink();
+                append(node);
+            }
+
+            @NonNull ProcessRecordNode getLastNodeBeforeTail() {
+                return TAIL.mPrev;
+            }
+
+            @VisibleForTesting
+            void reset() {
+                HEAD.mNext = TAIL;
+                TAIL.mPrev = HEAD;
+            }
+
+            String toString(int logUid) {
+                final StringBuilder sb = new StringBuilder();
+                sb.append("LinkedProcessRecordList{");
+                sb.append(HEAD);
+                sb.append(' ');
+                sb.append(TAIL);
+                sb.append('[');
+                ProcessRecordNode node = HEAD.mNext;
+                while (node != TAIL) {
+                    if (node.mApp != null && node.mApp.uid == logUid) {
+                        sb.append(node);
+                        sb.append(',');
+                    }
+                    node = node.mNext;
+                }
+                sb.append(']');
+                sb.append('}');
+                return sb.toString();
+            }
+        }
+    }
+
+    /**
+     * A data class for holding the parameters in computing oom adj.
+     */
+    private class OomAdjusterArgs {
+        ProcessRecord mApp;
+        ProcessRecord mTopApp;
+        long mNow;
+        int mCachedAdj;
+        @OomAdjReason int mOomAdjReason;
+        @NonNull ActiveUids mUids;
+        boolean mFullUpdate;
+
+        void update(ProcessRecord topApp, long now, int cachedAdj,
+                @OomAdjReason int oomAdjReason, @NonNull ActiveUids uids, boolean fullUpdate) {
+            mTopApp = topApp;
+            mNow = now;
+            mCachedAdj = cachedAdj;
+            mOomAdjReason = oomAdjReason;
+            mUids = uids;
+            mFullUpdate = fullUpdate;
+        }
+    }
+
+    OomAdjusterModernImpl(ActivityManagerService service, ProcessList processList,
+            ActiveUids activeUids) {
+        this(service, processList, activeUids, createAdjusterThread());
+    }
+
+    OomAdjusterModernImpl(ActivityManagerService service, ProcessList processList,
+            ActiveUids activeUids, ServiceThread adjusterThread) {
+        super(service, processList, activeUids, adjusterThread);
+    }
+
+    private final ProcessRecordNodes mProcessRecordProcStateNodes = new ProcessRecordNodes(
+            ProcessRecordNode.NODE_TYPE_PROC_STATE, PROC_STATE_SLOTS.length);
+    private final ProcessRecordNodes mProcessRecordAdjNodes = new ProcessRecordNodes(
+            ProcessRecordNode.NODE_TYPE_ADJ, ADJ_SLOT_VALUES.length);
+    private final OomAdjusterArgs mTmpOomAdjusterArgs = new OomAdjusterArgs();
+
+    void linkProcessRecordToList(@NonNull ProcessRecord app) {
+        mProcessRecordProcStateNodes.append(app);
+        mProcessRecordAdjNodes.append(app);
+    }
+
+    void unlinkProcessRecordFromList(@NonNull ProcessRecord app) {
+        mProcessRecordProcStateNodes.unlink(app);
+        mProcessRecordAdjNodes.unlink(app);
+    }
+
+    @Override
+    @VisibleForTesting
+    void resetInternal() {
+        mProcessRecordProcStateNodes.reset();
+        mProcessRecordAdjNodes.reset();
+    }
+
+    @GuardedBy("mService")
+    @Override
+    void onProcessBeginLocked(@NonNull ProcessRecord app) {
+        // Check one type should be good enough.
+        if (app.mLinkedNodes[ProcessRecordNode.NODE_TYPE_PROC_STATE] == null) {
+            for (int i = 0; i < app.mLinkedNodes.length; i++) {
+                app.mLinkedNodes[i] = new ProcessRecordNode(app);
+            }
+        }
+        if (!app.mLinkedNodes[ProcessRecordNode.NODE_TYPE_PROC_STATE].isLinked()) {
+            linkProcessRecordToList(app);
+        }
+    }
+
+    @GuardedBy("mService")
+    @Override
+    void onProcessEndLocked(@NonNull ProcessRecord app) {
+        if (app.mLinkedNodes[ProcessRecordNode.NODE_TYPE_PROC_STATE] != null
+                && app.mLinkedNodes[ProcessRecordNode.NODE_TYPE_PROC_STATE].isLinked()) {
+            unlinkProcessRecordFromList(app);
+        }
+    }
+
+    @GuardedBy("mService")
+    @Override
+    void onProcessStateChanged(@NonNull ProcessRecord app, int prevProcState) {
+        updateProcStateSlotIfNecessary(app, prevProcState);
+    }
+
+    @GuardedBy("mService")
+    void onProcessOomAdjChanged(@NonNull ProcessRecord app, int prevAdj) {
+        updateAdjSlotIfNecessary(app, prevAdj);
+    }
+
+    @GuardedBy("mService")
+    @Override
+    protected int getInitialAdj(@NonNull ProcessRecord app) {
+        return UNKNOWN_ADJ;
+    }
+
+    @GuardedBy("mService")
+    @Override
+    protected int getInitialProcState(@NonNull ProcessRecord app) {
+        return PROCESS_STATE_UNKNOWN;
+    }
+
+    @GuardedBy("mService")
+    @Override
+    protected int getInitialCapability(@NonNull ProcessRecord app) {
+        return 0;
+    }
+
+    @GuardedBy("mService")
+    @Override
+    protected boolean getInitialIsCurBoundByNonBgRestrictedApp(@NonNull ProcessRecord app) {
+        return false;
+    }
+
+    private void updateAdjSlotIfNecessary(ProcessRecord app, int prevRawAdj) {
+        if (app.mState.getCurRawAdj() != prevRawAdj) {
+            final int slot = adjToSlot(app.mState.getCurRawAdj());
+            final int prevSlot = adjToSlot(prevRawAdj);
+            if (slot != prevSlot && slot != ADJ_SLOT_INVALID) {
+                mProcessRecordAdjNodes.moveAppTo(app, prevSlot, slot);
+            }
+        }
+    }
+
+    private void updateProcStateSlotIfNecessary(ProcessRecord app, int prevProcState) {
+        if (app.mState.getCurProcState() != prevProcState) {
+            final int slot = processStateToSlot(app.mState.getCurProcState());
+            final int prevSlot = processStateToSlot(prevProcState);
+            if (slot != prevSlot) {
+                mProcessRecordProcStateNodes.moveAppTo(app, prevSlot, slot);
+            }
+        }
+    }
+
+    @Override
+    protected boolean performUpdateOomAdjLSP(ProcessRecord app, @OomAdjReason int oomAdjReason) {
+        final ProcessRecord topApp = mService.getTopApp();
+
+        Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, oomAdjReasonToString(oomAdjReason));
+        mService.mOomAdjProfiler.oomAdjStarted();
+        mAdjSeq++;
+
+        final ProcessStateRecord state = app.mState;
+        final int oldAdj = state.getCurRawAdj();
+        final int cachedAdj = oldAdj >= CACHED_APP_MIN_ADJ
+                ? oldAdj : UNKNOWN_ADJ;
+
+        final ActiveUids uids = mTmpUidRecords;
+        final ArraySet<ProcessRecord> targetProcesses = mTmpProcessSet;
+        final ArrayList<ProcessRecord> reachableProcesses = mTmpProcessList;
+        final long now = SystemClock.uptimeMillis();
+        final long nowElapsed = SystemClock.elapsedRealtime();
+
+        uids.clear();
+        targetProcesses.clear();
+        targetProcesses.add(app);
+        reachableProcesses.clear();
+
+        // Find out all reachable processes from this app.
+        collectReachableProcessesLocked(targetProcesses, reachableProcesses, uids);
+
+        // Copy all of the reachable processes into the target process set.
+        targetProcesses.addAll(reachableProcesses);
+        reachableProcesses.clear();
+
+        final boolean result = performNewUpdateOomAdjLSP(oomAdjReason,
+                topApp, targetProcesses, uids, false, now, cachedAdj);
+
+        reachableProcesses.addAll(targetProcesses);
+        assignCachedAdjIfNecessary(reachableProcesses);
+        for (int  i = uids.size() - 1; i >= 0; i--) {
+            final UidRecord uidRec = uids.valueAt(i);
+            uidRec.forEachProcess(this::updateAppUidRecIfNecessaryLSP);
+        }
+        updateUidsLSP(uids, nowElapsed);
+        for (int i = 0, size = targetProcesses.size(); i < size; i++) {
+            applyOomAdjLSP(targetProcesses.valueAt(i), false, now, nowElapsed, oomAdjReason);
+        }
+        targetProcesses.clear();
+        reachableProcesses.clear();
+
+        mService.mOomAdjProfiler.oomAdjEnded();
+        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
+        return result;
+    }
+
+    @GuardedBy({"mService", "mProcLock"})
+    @Override
+    protected void updateOomAdjInnerLSP(@OomAdjReason int oomAdjReason, final ProcessRecord topApp,
+            ArrayList<ProcessRecord> processes, ActiveUids uids, boolean potentialCycles,
+            boolean startProfiling) {
+        final boolean fullUpdate = processes == null;
+        final ArrayList<ProcessRecord> activeProcesses = fullUpdate
+                ? mProcessList.getLruProcessesLOSP() : processes;
+        ActiveUids activeUids = uids;
+        if (activeUids == null) {
+            final int numUids = mActiveUids.size();
+            activeUids = mTmpUidRecords;
+            activeUids.clear();
+            for (int i = 0; i < numUids; i++) {
+                UidRecord uidRec = mActiveUids.valueAt(i);
+                activeUids.put(uidRec.getUid(), uidRec);
+            }
+        }
+
+        if (startProfiling) {
+            Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, oomAdjReasonToString(oomAdjReason));
+            mService.mOomAdjProfiler.oomAdjStarted();
+        }
+        final long now = SystemClock.uptimeMillis();
+        final long nowElapsed = SystemClock.elapsedRealtime();
+        final long oldTime = now - mConstants.mMaxEmptyTimeMillis;
+        final int numProc = activeProcesses.size();
+
+        mAdjSeq++;
+        if (fullUpdate) {
+            mNewNumServiceProcs = 0;
+            mNewNumAServiceProcs = 0;
+        }
+
+        final ArraySet<ProcessRecord> targetProcesses = mTmpProcessSet;
+        targetProcesses.clear();
+        if (!fullUpdate) {
+            targetProcesses.addAll(activeProcesses);
+        }
+
+        performNewUpdateOomAdjLSP(oomAdjReason, topApp, targetProcesses, activeUids,
+                fullUpdate, now, UNKNOWN_ADJ);
+
+        if (fullUpdate) {
+            assignCachedAdjIfNecessary(mProcessList.getLruProcessesLOSP());
+            postUpdateOomAdjInnerLSP(oomAdjReason, activeUids, now, nowElapsed, oldTime);
+        } else {
+            activeProcesses.clear();
+            activeProcesses.addAll(targetProcesses);
+            assignCachedAdjIfNecessary(activeProcesses);
+
+            for (int  i = activeUids.size() - 1; i >= 0; i--) {
+                final UidRecord uidRec = activeUids.valueAt(i);
+                uidRec.forEachProcess(this::updateAppUidRecIfNecessaryLSP);
+            }
+            updateUidsLSP(activeUids, nowElapsed);
+
+            for (int i = 0, size = targetProcesses.size(); i < size; i++) {
+                applyOomAdjLSP(targetProcesses.valueAt(i), false, now, nowElapsed, oomAdjReason);
+            }
+
+            activeProcesses.clear();
+        }
+        targetProcesses.clear();
+
+        if (startProfiling) {
+            mService.mOomAdjProfiler.oomAdjEnded();
+            Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
+        }
+        return;
+    }
+
+    /**
+     * Perform the oom adj update on the given {@code targetProcesses}.
+     *
+     * <p>Note: The expectation to the given {@code targetProcesses} is, the caller
+     * must have called {@link collectReachableProcessesLocked} on it.
+     */
+    private boolean performNewUpdateOomAdjLSP(@OomAdjReason int oomAdjReason,
+            ProcessRecord topApp,  ArraySet<ProcessRecord> targetProcesses, ActiveUids uids,
+            boolean fullUpdate, long now, int cachedAdj) {
+
+        final ArrayList<ProcessRecord> clientProcesses = mTmpProcessList2;
+        clientProcesses.clear();
+
+        // We'll need to collect the upstream processes of the target apps here, because those
+        // processes would potentially impact the procstate/adj via bindings.
+        if (!fullUpdate) {
+            final boolean containsCycle = collectReversedReachableProcessesLocked(targetProcesses,
+                    clientProcesses);
+
+            // If any of its upstream processes are in a cycle,
+            // move them into the candidate targets.
+            if (containsCycle) {
+                // Add all client apps to the target process list.
+                for (int i = 0, size = clientProcesses.size(); i < size; i++) {
+                    final ProcessRecord client = clientProcesses.get(i);
+                    final UidRecord uidRec = client.getUidRecord();
+                    targetProcesses.add(client);
+                    if (uidRec != null) {
+                        uids.put(uidRec.getUid(), uidRec);
+                    }
+                }
+                clientProcesses.clear();
+            }
+            for (int i = 0, size = targetProcesses.size(); i < size; i++) {
+                final ProcessRecord app = targetProcesses.valueAt(i);
+                app.mState.resetCachedInfo();
+                final UidRecord uidRec = app.getUidRecord();
+                if (uidRec != null) {
+                    if (DEBUG_UID_OBSERVERS) {
+                        Slog.i(TAG_UID_OBSERVERS, "Starting update of " + uidRec);
+                    }
+                    uidRec.reset();
+                }
+            }
+        } else {
+            final ArrayList<ProcessRecord> lru = mProcessList.getLruProcessesLOSP();
+            for (int i = 0, size = lru.size(); i < size; i++) {
+                final ProcessRecord app = lru.get(i);
+                app.mState.resetCachedInfo();
+                final UidRecord uidRec = app.getUidRecord();
+                if (uidRec != null) {
+                    if (DEBUG_UID_OBSERVERS) {
+                        Slog.i(TAG_UID_OBSERVERS, "Starting update of " + uidRec);
+                    }
+                    uidRec.reset();
+                }
+            }
+        }
+
+        updateNewOomAdjInnerLSP(oomAdjReason, topApp, targetProcesses, clientProcesses, uids,
+                cachedAdj, now, fullUpdate);
+
+        clientProcesses.clear();
+
+        return true;
+    }
+
+    /**
+     * Collect the reversed reachable processes from the given {@code apps}, the result will be
+     * returned in the given {@code processes}, which will <em>NOT</em> include the processes from
+     * the given {@code apps}.
+     */
+    @GuardedBy("mService")
+    private boolean collectReversedReachableProcessesLocked(ArraySet<ProcessRecord> apps,
+            ArrayList<ProcessRecord> clientProcesses) {
+        final ArrayDeque<ProcessRecord> queue = mTmpQueue;
+        queue.clear();
+        clientProcesses.clear();
+        for (int i = 0, size = apps.size(); i < size; i++) {
+            final ProcessRecord app = apps.valueAt(i);
+            app.mState.setReachable(true);
+            app.mState.setReversedReachable(true);
+            queue.offer(app);
+        }
+
+        // Track if any of them reachables could include a cycle
+        boolean containsCycle = false;
+
+        // Scan upstreams of the process record
+        for (ProcessRecord pr = queue.poll(); pr != null; pr = queue.poll()) {
+            if (!pr.mState.isReachable()) {
+                // If not in the given initial set of apps, add it.
+                clientProcesses.add(pr);
+            }
+            final ProcessServiceRecord psr = pr.mServices;
+            for (int i = psr.numberOfRunningServices() - 1; i >= 0; i--) {
+                final ServiceRecord s = psr.getRunningServiceAt(i);
+                final ArrayMap<IBinder, ArrayList<ConnectionRecord>> serviceConnections =
+                        s.getConnections();
+                for (int j = serviceConnections.size() - 1; j >= 0; j--) {
+                    final ArrayList<ConnectionRecord> clist = serviceConnections.valueAt(j);
+                    for (int k = clist.size() - 1; k >= 0; k--) {
+                        final ConnectionRecord cr = clist.get(k);
+                        final ProcessRecord client = cr.binding.client;
+                        containsCycle |= client.mState.isReversedReachable();
+                        if (client.mState.isReversedReachable()) {
+                            continue;
+                        }
+                        queue.offer(client);
+                        client.mState.setReversedReachable(true);
+                    }
+                }
+            }
+            final ProcessProviderRecord ppr = pr.mProviders;
+            for (int i = ppr.numberOfProviders() - 1; i >= 0; i--) {
+                final ContentProviderRecord cpr = ppr.getProviderAt(i);
+                for (int j = cpr.connections.size() - 1; j >= 0; j--) {
+                    final ContentProviderConnection conn = cpr.connections.get(j);
+                    final ProcessRecord client = conn.client;
+                    containsCycle |= client.mState.isReversedReachable();
+                    if (client.mState.isReversedReachable()) {
+                        continue;
+                    }
+                    queue.offer(client);
+                    client.mState.setReversedReachable(true);
+                }
+            }
+            // If this process is a sandbox itself, also add the app on whose behalf
+            // its running
+            if (pr.isSdkSandbox) {
+                for (int is = psr.numberOfRunningServices() - 1; is >= 0; is--) {
+                    ServiceRecord s = psr.getRunningServiceAt(is);
+                    ArrayMap<IBinder, ArrayList<ConnectionRecord>> serviceConnections =
+                            s.getConnections();
+                    for (int conni = serviceConnections.size() - 1; conni >= 0; conni--) {
+                        ArrayList<ConnectionRecord> clist = serviceConnections.valueAt(conni);
+                        for (int i = clist.size() - 1; i >= 0; i--) {
+                            ConnectionRecord cr = clist.get(i);
+                            ProcessRecord attributedApp = cr.binding.attributedClient;
+                            if (attributedApp == null || attributedApp == pr) {
+                                continue;
+                            }
+                            containsCycle |= attributedApp.mState.isReversedReachable();
+                            if (attributedApp.mState.isReversedReachable()) {
+                                continue;
+                            }
+                            queue.offer(attributedApp);
+                            attributedApp.mState.setReversedReachable(true);
+                        }
+                    }
+                }
+            }
+        }
+
+        // Reset the temporary bits.
+        for (int i = clientProcesses.size() - 1; i >= 0; i--) {
+            clientProcesses.get(i).mState.setReversedReachable(false);
+        }
+        for (int i = 0, size = apps.size(); i < size; i++) {
+            final ProcessRecord app = apps.valueAt(i);
+            app.mState.setReachable(false);
+            app.mState.setReversedReachable(false);
+        }
+        return containsCycle;
+    }
+
+    @GuardedBy({"mService", "mProcLock"})
+    private void updateNewOomAdjInnerLSP(@OomAdjReason int oomAdjReason, final ProcessRecord topApp,
+            ArraySet<ProcessRecord> targetProcesses, ArrayList<ProcessRecord> clientProcesses,
+            ActiveUids uids, int cachedAdj, long now, boolean fullUpdate) {
+        mTmpOomAdjusterArgs.update(topApp, now, cachedAdj, oomAdjReason, uids, fullUpdate);
+
+        mProcessRecordProcStateNodes.resetLastNodes();
+        mProcessRecordAdjNodes.resetLastNodes();
+
+        final int procStateTarget = mProcessRecordProcStateNodes.size() - 1;
+        final int adjTarget = mProcessRecordAdjNodes.size() - 1;
+
+        final int appUid = !fullUpdate && targetProcesses.size() > 0
+                ? targetProcesses.valueAt(0).uid : -1;
+        final int logUid = mService.mCurOomAdjUid;
+
+        mAdjSeq++;
+        // All apps to be updated will be moved to the lowest slot.
+        if (fullUpdate) {
+            // Move all the process record node to the lowest slot, we'll do recomputation on all of
+            // them. Use the processes from the lru list, because the scanning order matters here.
+            final ArrayList<ProcessRecord> lruList = mProcessList.getLruProcessesLOSP();
+            for (int i = procStateTarget; i >= 0; i--) {
+                mProcessRecordProcStateNodes.reset(i);
+                // Force the last node to the head since we'll recompute all of them.
+                mProcessRecordProcStateNodes.setLastNodeToHead(i);
+            }
+            // enqueue the targets in the reverse order of the lru list.
+            for (int i = lruList.size() - 1; i >= 0; i--) {
+                mProcessRecordProcStateNodes.append(lruList.get(i), procStateTarget);
+            }
+            // Do the same to the adj nodes.
+            for (int i = adjTarget; i >= 0; i--) {
+                mProcessRecordAdjNodes.reset(i);
+                // Force the last node to the head since we'll recompute all of them.
+                mProcessRecordAdjNodes.setLastNodeToHead(i);
+            }
+            for (int i = lruList.size() - 1; i >= 0; i--) {
+                mProcessRecordAdjNodes.append(lruList.get(i), adjTarget);
+            }
+        } else {
+            // Move the target processes to the lowest slot.
+            for (int i = 0, size = targetProcesses.size(); i < size; i++) {
+                final ProcessRecord app = targetProcesses.valueAt(i);
+                final int procStateSlot = processStateToSlot(app.mState.getCurProcState());
+                final int adjSlot = adjToSlot(app.mState.getCurRawAdj());
+                mProcessRecordProcStateNodes.moveAppTo(app, procStateSlot, procStateTarget);
+                mProcessRecordAdjNodes.moveAppTo(app, adjSlot, adjTarget);
+            }
+            // Move the "lastNode" to head to make sure we scan all nodes in this slot.
+            mProcessRecordProcStateNodes.setLastNodeToHead(procStateTarget);
+            mProcessRecordAdjNodes.setLastNodeToHead(adjTarget);
+        }
+
+        // All apps to be updated have been moved to the lowest slot.
+        // Do an initial pass of the computation.
+        mProcessRecordProcStateNodes.forEachNewNode(mProcessRecordProcStateNodes.size() - 1,
+                this::computeInitialOomAdjLSP);
+
+        if (!fullUpdate) {
+            // We didn't update the client processes with the computeInitialOomAdjLSP
+            // because they don't need to do so. But they'll be playing vital roles in
+            // computing the bindings. So include them into the scan list below.
+            for (int i = 0, size = clientProcesses.size(); i < size; i++) {
+                mProcessRecordProcStateNodes.moveAppToTail(clientProcesses.get(i));
+            }
+            // We don't update the adj list since we're resetting it below.
+        }
+
+        // Now nodes are set into their slots, without facting in the bindings.
+        // The nodes between the `lastNode` pointer and the TAIL should be the new nodes.
+        //
+        // The whole rationale here is that, the bindings from client to host app, won't elevate
+        // the host app's procstate/adj higher than the client app's state (BIND_ABOVE_CLIENT
+        // is a special case here, but client app's raw adj is still no less than the host app's).
+        // Therefore, starting from the top to the bottom, for each slot, scan all of the new nodes,
+        // check its bindings, elevate its host app's slot if necessary.
+        //
+        // We'd have to do this in two passes: 1) scan procstate node list; 2) scan adj node list.
+        // Because the procstate and adj are not always in sync - there are cases where
+        // the processes with lower proc state could be getting a higher oom adj score.
+        // And because of this, the procstate and adj node lists are basically two priority heaps.
+        //
+        // As the 2nd pass with the adj node lists potentially includes a significant amount of
+        // duplicated scans as the 1st pass has done, we'll reset the last node pointers for
+        // the adj node list before the 1st pass; so during the 1st pass, if any app's adj slot
+        // gets bumped, we'll only scan those in 2nd pass.
+
+        mProcessRecordAdjNodes.resetLastNodes();
+
+        // 1st pass, scan each slot in the procstate node list.
+        for (int i = 0, end = mProcessRecordProcStateNodes.size() - 1; i < end; i++) {
+            mProcessRecordProcStateNodes.forEachNewNode(i, this::computeHostOomAdjLSP);
+        }
+
+        // 2nd pass, scan each slot in the adj node list.
+        for (int i = 0, end = mProcessRecordAdjNodes.size() - 1; i < end; i++) {
+            mProcessRecordAdjNodes.forEachNewNode(i, this::computeHostOomAdjLSP);
+        }
+    }
+
+    @GuardedBy({"mService", "mProcLock"})
+    private void computeInitialOomAdjLSP(OomAdjusterArgs args) {
+        final ProcessRecord app = args.mApp;
+        final int cachedAdj = args.mCachedAdj;
+        final ProcessRecord topApp = args.mTopApp;
+        final long now = args.mNow;
+        final int oomAdjReason = args.mOomAdjReason;
+        final ActiveUids uids = args.mUids;
+        final boolean fullUpdate = args.mFullUpdate;
+
+        if (DEBUG_OOM_ADJ) {
+            Slog.i(TAG, "OOM ADJ initial args app=" + app
+                    + " cachedAdj=" + cachedAdj
+                    + " topApp=" + topApp
+                    + " now=" + now
+                    + " oomAdjReason=" + oomAdjReasonToString(oomAdjReason)
+                    + " fullUpdate=" + fullUpdate);
+        }
+
+        if (uids != null) {
+            final UidRecord uidRec = app.getUidRecord();
+
+            if (uidRec != null) {
+                uids.put(uidRec.getUid(), uidRec);
+            }
+        }
+
+        computeOomAdjLSP(app, cachedAdj, topApp, fullUpdate, now, false, false, oomAdjReason,
+                false);
+    }
+
+    /**
+     * @return The proposed change to the schedGroup.
+     */
+    @GuardedBy({"mService", "mProcLock"})
+    @Override
+    protected int setIntermediateAdjLSP(ProcessRecord app, int adj, int prevRawAppAdj,
+            int schedGroup) {
+        schedGroup = super.setIntermediateAdjLSP(app, adj, prevRawAppAdj, schedGroup);
+
+        updateAdjSlotIfNecessary(app, prevRawAppAdj);
+
+        return schedGroup;
+    }
+
+    @GuardedBy({"mService", "mProcLock"})
+    @Override
+    protected void setIntermediateProcStateLSP(ProcessRecord app, int procState,
+            int prevProcState) {
+        super.setIntermediateProcStateLSP(app, procState, prevProcState);
+
+        updateProcStateSlotIfNecessary(app, prevProcState);
+    }
+
+    @GuardedBy({"mService", "mProcLock"})
+    private void computeHostOomAdjLSP(OomAdjusterArgs args) {
+        final ProcessRecord app = args.mApp;
+        final int cachedAdj = args.mCachedAdj;
+        final ProcessRecord topApp = args.mTopApp;
+        final long now = args.mNow;
+        final @OomAdjReason int oomAdjReason = args.mOomAdjReason;
+        final boolean fullUpdate = args.mFullUpdate;
+        final ActiveUids uids = args.mUids;
+
+        final ProcessServiceRecord psr = app.mServices;
+        for (int i = psr.numberOfConnections() - 1; i >= 0; i--) {
+            ConnectionRecord cr = psr.getConnectionAt(i);
+            ProcessRecord service = cr.hasFlag(ServiceInfo.FLAG_ISOLATED_PROCESS)
+                    ? cr.binding.service.isolationHostProc : cr.binding.service.app;
+            if (service == null || service == app
+                    || (service.mState.getMaxAdj() >= SYSTEM_ADJ
+                            && service.mState.getMaxAdj() < FOREGROUND_APP_ADJ)
+                    || (service.mState.getCurAdj() <= FOREGROUND_APP_ADJ
+                            && service.mState.getCurrentSchedulingGroup() > SCHED_GROUP_BACKGROUND
+                            && service.mState.getCurProcState() <= PROCESS_STATE_TOP)) {
+                continue;
+            }
+
+
+            computeServiceHostOomAdjLSP(cr, service, app, now, topApp, fullUpdate, false, false,
+                    oomAdjReason, cachedAdj, false);
+        }
+
+        for (int i = psr.numberOfSdkSandboxConnections() - 1; i >= 0; i--) {
+            final ConnectionRecord cr = psr.getSdkSandboxConnectionAt(i);
+            final ProcessRecord service = cr.binding.service.app;
+            if (service == null || service == app
+                    || (service.mState.getMaxAdj() >= SYSTEM_ADJ
+                            && service.mState.getMaxAdj() < FOREGROUND_APP_ADJ)
+                    || (service.mState.getCurAdj() <= FOREGROUND_APP_ADJ
+                            && service.mState.getCurrentSchedulingGroup() > SCHED_GROUP_BACKGROUND
+                            && service.mState.getCurProcState() <= PROCESS_STATE_TOP)) {
+                continue;
+            }
+
+            computeServiceHostOomAdjLSP(cr, service, app, now, topApp, fullUpdate, false, false,
+                    oomAdjReason, cachedAdj, false);
+        }
+
+        final ProcessProviderRecord ppr = app.mProviders;
+        for (int i = ppr.numberOfProviderConnections() - 1; i >= 0; i--) {
+            ContentProviderConnection cpc = ppr.getProviderConnectionAt(i);
+            ProcessRecord provider = cpc.provider.proc;
+            if (provider == null || provider == app
+                    || (provider.mState.getMaxAdj() >= ProcessList.SYSTEM_ADJ
+                            && provider.mState.getMaxAdj() < FOREGROUND_APP_ADJ)
+                    || (provider.mState.getCurAdj() <= FOREGROUND_APP_ADJ
+                            && provider.mState.getCurrentSchedulingGroup() > SCHED_GROUP_BACKGROUND
+                            && provider.mState.getCurProcState() <= PROCESS_STATE_TOP)) {
+                continue;
+            }
+
+            computeProviderHostOomAdjLSP(cpc, provider, app, now, topApp, fullUpdate, false, false,
+                    oomAdjReason, cachedAdj, false);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/am/PendingIntentRecord.java b/services/core/java/com/android/server/am/PendingIntentRecord.java
index 65ca5d3..10d5fd3 100644
--- a/services/core/java/com/android/server/am/PendingIntentRecord.java
+++ b/services/core/java/com/android/server/am/PendingIntentRecord.java
@@ -67,7 +67,6 @@
     @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.TIRAMISU)
     @Overridable
     private static final long DEFAULT_RESCIND_BAL_PRIVILEGES_FROM_PENDING_INTENT_SENDER = 244637991;
-
     public static final int FLAG_ACTIVITY_SENDER = 1 << 0;
     public static final int FLAG_BROADCAST_SENDER = 1 << 1;
     public static final int FLAG_SERVICE_SENDER = 1 << 2;
diff --git a/services/core/java/com/android/server/am/ProcessErrorStateRecord.java b/services/core/java/com/android/server/am/ProcessErrorStateRecord.java
index 753fdae..09df277 100644
--- a/services/core/java/com/android/server/am/ProcessErrorStateRecord.java
+++ b/services/core/java/com/android/server/am/ProcessErrorStateRecord.java
@@ -321,11 +321,13 @@
         }
 
         final boolean isSilentAnr;
-        final int pid = mApp.getPid();
+        final int pid;
         final UUID errorId;
         latencyTracker.waitingOnAMSLockStarted();
         synchronized (mService) {
             latencyTracker.waitingOnAMSLockEnded();
+            // Get the process's pid after obtaining the global lock.
+            pid = mApp.getPid();
             // Store annotation here as instance above will not be hit on all paths.
             setAnrAnnotation(annotation);
 
diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java
index f6acc41..e2edd8a 100644
--- a/services/core/java/com/android/server/am/ProcessRecord.java
+++ b/services/core/java/com/android/server/am/ProcessRecord.java
@@ -22,6 +22,7 @@
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
 import static com.android.server.am.ActivityManagerService.MY_PID;
+import static com.android.server.am.OomAdjusterModernImpl.ProcessRecordNode.NUM_NODE_TYPE;
 
 import static java.util.Objects.requireNonNull;
 
@@ -63,6 +64,7 @@
 import com.android.internal.app.procstats.ProcessStats;
 import com.android.internal.os.Zygote;
 import com.android.server.FgThread;
+import com.android.server.am.OomAdjusterModernImpl.ProcessRecordNode;
 import com.android.server.wm.WindowProcessController;
 import com.android.server.wm.WindowProcessListener;
 
@@ -434,6 +436,8 @@
      */
     volatile boolean mSkipProcessGroupCreation;
 
+    final ProcessRecordNode[] mLinkedNodes = new ProcessRecordNode[NUM_NODE_TYPE];
+
     void setStartParams(int startUid, HostingRecord hostingRecord, String seInfo,
             long startUptime, long startElapsedTime) {
         this.mStartUid = startUid;
@@ -1119,6 +1123,7 @@
         mState.onCleanupApplicationRecordLSP();
         mServices.onCleanupApplicationRecordLocked();
         mReceivers.onCleanupApplicationRecordLocked();
+        mService.mOomAdjuster.onProcessEndLocked(this);
 
         return mProviders.onCleanupApplicationRecordLocked(allowRestart);
     }
diff --git a/services/core/java/com/android/server/am/ProcessServiceRecord.java b/services/core/java/com/android/server/am/ProcessServiceRecord.java
index 7ff6d11..a165e88 100644
--- a/services/core/java/com/android/server/am/ProcessServiceRecord.java
+++ b/services/core/java/com/android/server/am/ProcessServiceRecord.java
@@ -19,6 +19,7 @@
 import static android.app.ProcessMemoryState.HOSTING_COMPONENT_TYPE_BOUND_SERVICE;
 import static android.app.ProcessMemoryState.HOSTING_COMPONENT_TYPE_FOREGROUND_SERVICE;
 
+import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.content.Context;
 import android.content.pm.ServiceInfo;
@@ -134,6 +135,11 @@
     private final ArraySet<ConnectionRecord> mConnections = new ArraySet<>();
 
     /**
+     * All ConnectionRecord this process holds indirectly to SDK sandbox processes.
+     */
+    private @Nullable ArraySet<ConnectionRecord> mSdkSandboxConnections;
+
+    /**
      * A set of UIDs of all bound clients.
      */
     private ArraySet<Integer> mBoundClientUids = new ArraySet<>();
@@ -490,13 +496,18 @@
 
     void addConnection(ConnectionRecord connection) {
         mConnections.add(connection);
+        addSdkSandboxConnectionIfNecessary(connection);
     }
 
     void removeConnection(ConnectionRecord connection) {
         mConnections.remove(connection);
+        removeSdkSandboxConnectionIfNecessary(connection);
     }
 
     void removeAllConnections() {
+        for (int i = 0, size = mConnections.size(); i < size; i++) {
+            removeSdkSandboxConnectionIfNecessary(mConnections.valueAt(i));
+        }
         mConnections.clear();
     }
 
@@ -508,6 +519,39 @@
         return mConnections.size();
     }
 
+    private void addSdkSandboxConnectionIfNecessary(ConnectionRecord connection) {
+        final ProcessRecord attributedClient = connection.binding.attributedClient;
+        if (attributedClient != null && connection.binding.service.isSdkSandbox) {
+            if (attributedClient.mServices.mSdkSandboxConnections == null) {
+                attributedClient.mServices.mSdkSandboxConnections = new ArraySet<>();
+            }
+            attributedClient.mServices.mSdkSandboxConnections.add(connection);
+        }
+    }
+
+    private void removeSdkSandboxConnectionIfNecessary(ConnectionRecord connection) {
+        final ProcessRecord attributedClient = connection.binding.attributedClient;
+        if (attributedClient != null && connection.binding.service.isSdkSandbox) {
+            if (attributedClient.mServices.mSdkSandboxConnections == null) {
+                attributedClient.mServices.mSdkSandboxConnections.remove(connection);
+            }
+        }
+    }
+
+    void removeAllSdkSandboxConnections() {
+        if (mSdkSandboxConnections != null) {
+            mSdkSandboxConnections.clear();
+        }
+    }
+
+    ConnectionRecord getSdkSandboxConnectionAt(int index) {
+        return mSdkSandboxConnections != null ? mSdkSandboxConnections.valueAt(index) : null;
+    }
+
+    int numberOfSdkSandboxConnections() {
+        return mSdkSandboxConnections != null ? mSdkSandboxConnections.size() : 0;
+    }
+
     void addBoundClientUid(int clientUid, String clientPackageName, long bindFlags) {
         mBoundClientUids.add(clientUid);
         mApp.getWindowProcessController()
diff --git a/services/core/java/com/android/server/am/ProcessStateRecord.java b/services/core/java/com/android/server/am/ProcessStateRecord.java
index db341d2..a9c388c 100644
--- a/services/core/java/com/android/server/am/ProcessStateRecord.java
+++ b/services/core/java/com/android/server/am/ProcessStateRecord.java
@@ -378,6 +378,12 @@
     private boolean mReachable;
 
     /**
+     * Whether or not this process is reversed reachable from given process.
+     */
+    @GuardedBy("mService")
+    private boolean mReversedReachable;
+
+    /**
      * The most recent time when the last visible activity within this process became invisible.
      *
      * <p> It'll be set to 0 if there is never a visible activity, or Long.MAX_VALUE if there is
@@ -454,6 +460,9 @@
     @GuardedBy("mService")
     private int mCachedSchedGroup = ProcessList.SCHED_GROUP_BACKGROUND;
 
+    @GuardedBy("mService")
+    private boolean mScheduleLikeTopApp = false;
+
     ProcessStateRecord(ProcessRecord app) {
         mApp = app;
         mService = app.mService;
@@ -614,9 +623,11 @@
     void forceProcessStateUpTo(int newState) {
         if (mRepProcState > newState) {
             synchronized (mProcLock) {
+                final int prevProcState = mRepProcState;
                 setReportedProcState(newState);
                 setCurProcState(newState);
                 setCurRawProcState(newState);
+                mService.mOomAdjuster.onProcessStateChanged(mApp, prevProcState);
             }
         }
     }
@@ -985,6 +996,16 @@
     }
 
     @GuardedBy("mService")
+    boolean isReversedReachable() {
+        return mReversedReachable;
+    }
+
+    @GuardedBy("mService")
+    void setReversedReachable(boolean reversedReachable) {
+        mReversedReachable = reversedReachable;
+    }
+
+    @GuardedBy("mService")
     void resetCachedInfo() {
         mCachedHasActivities = VALUE_INVALID;
         mCachedIsHeavyWeight = VALUE_INVALID;
@@ -1134,6 +1155,16 @@
         return mCachedSchedGroup;
     }
 
+    @GuardedBy("mService")
+    boolean shouldScheduleLikeTopApp() {
+        return mScheduleLikeTopApp;
+    }
+
+    @GuardedBy("mService")
+    void setScheduleLikeTopApp(boolean scheduleLikeTopApp) {
+        mScheduleLikeTopApp = scheduleLikeTopApp;
+    }
+
     @GuardedBy(anyOf = {"mService", "mProcLock"})
     public String makeAdjReason() {
         if (mAdjSource != null || mAdjTarget != null) {
diff --git a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java
index 9db9e77..0e4465d 100644
--- a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java
+++ b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java
@@ -87,6 +87,7 @@
         DeviceConfig.NAMESPACE_CAMERA_NATIVE,
         DeviceConfig.NAMESPACE_CONFIGURATION,
         DeviceConfig.NAMESPACE_CONNECTIVITY,
+        DeviceConfig.NAMESPACE_CORE_EXPERIMENTS_TEAM_INTERNAL,
         DeviceConfig.NAMESPACE_EDGETPU_NATIVE,
         DeviceConfig.NAMESPACE_INPUT_NATIVE_BOOT,
         DeviceConfig.NAMESPACE_INTELLIGENCE_CONTENT_SUGGESTIONS,
diff --git a/services/core/java/com/android/server/am/StackTracesDumpHelper.java b/services/core/java/com/android/server/am/StackTracesDumpHelper.java
index ba0fd17..c1374e1 100644
--- a/services/core/java/com/android/server/am/StackTracesDumpHelper.java
+++ b/services/core/java/com/android/server/am/StackTracesDumpHelper.java
@@ -104,8 +104,8 @@
     public static File dumpStackTraces(ArrayList<Integer> firstPids,
             ProcessCpuTracker processCpuTracker, SparseBooleanArray lastPids,
             Future<ArrayList<Integer>> nativePidsFuture, StringWriter logExceptionCreatingFile,
-            String subject, String criticalEventSection,
-            @NonNull Executor auxiliaryTaskExecutor, AnrLatencyTracker latencyTracker) {
+            String subject, String criticalEventSection, @NonNull Executor auxiliaryTaskExecutor,
+            AnrLatencyTracker latencyTracker) {
         return dumpStackTraces(firstPids, processCpuTracker, lastPids, nativePidsFuture,
                 logExceptionCreatingFile, null, subject, criticalEventSection,
                 /* memoryHeaders= */ null, auxiliaryTaskExecutor, null, latencyTracker);
@@ -120,7 +120,7 @@
             Future<ArrayList<Integer>> nativePidsFuture, StringWriter logExceptionCreatingFile,
             AtomicLong firstPidEndOffset, String subject, String criticalEventSection,
             String memoryHeaders, @NonNull Executor auxiliaryTaskExecutor,
-            Future<File> firstPidFilePromise, AnrLatencyTracker latencyTracker) {
+           Future<File> firstPidFilePromise, AnrLatencyTracker latencyTracker) {
         try {
 
             if (latencyTracker != null) {
diff --git a/services/core/java/com/android/server/am/TEST_MAPPING b/services/core/java/com/android/server/am/TEST_MAPPING
index 97d4879..575db01 100644
--- a/services/core/java/com/android/server/am/TEST_MAPPING
+++ b/services/core/java/com/android/server/am/TEST_MAPPING
@@ -88,11 +88,14 @@
       "file_patterns": ["Battery[^/]*\\.java", "MeasuredEnergy[^/]*\\.java"],
       "name": "FrameworksServicesTests",
       "options": [
-        { "include-filter": "com.android.server.am.BatteryStatsServiceTest" },
-        { "include-filter": "com.android.server.power.stats.BatteryStatsTests" }
+        { "include-filter": "com.android.server.am.BatteryStatsServiceTest" }
       ]
     },
     {
+      "file_patterns": ["Battery[^/]*\\.java", "MeasuredEnergy[^/]*\\.java"],
+      "name": "PowerStatsTests"
+    },
+    {
       "file_patterns": ["Broadcast.*"],
       "name": "FrameworksMockingServicesTests",
       "options": [
@@ -111,27 +114,14 @@
       ]
     },
     {
-      "name": "CtsUsageStatsTestCases",
+      "name": "CtsBRSTestCases",
       "file_patterns": [
         "ActivityManagerService\\.java",
         "BroadcastQueue\\.java"
       ],
       "options": [
-        {
-          "include-filter": "android.app.usage.cts.BroadcastResponseStatsTest"
-        },
-        {
-          "exclude-annotation": "androidx.test.filters.FlakyTest"
-        },
-        {
-          "exclude-annotation": "android.platform.test.annotations.FlakyTest"
-        },
-        {
-          "exclude-annotation": "androidx.test.filters.MediumTest"
-        },
-        {
-          "exclude-annotation": "androidx.test.filters.LargeTest"
-        }
+        { "exclude-annotation": "androidx.test.filters.FlakyTest" },
+        { "exclude-annotation": "org.junit.Ignore" }
       ]
     }
   ],
@@ -145,12 +135,7 @@
       ]
     },
     {
-      "name": "CtsAppSecurityHostTestCases",
-      "options": [
-        {
-          "include-filter": "android.appsecurity.cts.AppDataIsolationTests"
-        }
-      ]
+      "name": "CtsAppDataIsolationHostTestCases"
     },
     {
       "name": "CtsAppTestCases",
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index 99c2f8a..d426c79 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -126,6 +126,7 @@
 import com.android.internal.policy.IKeyguardDismissCallback;
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.FrameworkStatsLog;
+import com.android.internal.util.ObjectUtils;
 import com.android.internal.util.Preconditions;
 import com.android.internal.widget.LockPatternUtils;
 import com.android.server.FactoryResetter;
@@ -146,6 +147,7 @@
 import com.android.server.wm.WindowManagerService;
 
 import java.io.PrintWriter;
+import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Iterator;
@@ -261,6 +263,10 @@
     // once target user goes into the foreground. Use mLock when updating
     @GuardedBy("mLock")
     private volatile int mTargetUserId = UserHandle.USER_NULL;
+    // If a user switch request comes during an ongoing user switch, it is postponed to the end of
+    // the current switch, and this variable holds those user ids. Use mLock when updating
+    @GuardedBy("mLock")
+    private final ArrayDeque<Integer> mPendingTargetUserIds = new ArrayDeque<>();
 
     /**
      * Which users have been started, so are allowed to run code.
@@ -291,6 +297,7 @@
 
     /**
      * Mapping from each known user ID to the profile group ID it is associated with.
+     * <p>Users not present in this array have a profile group of NO_PROFILE_GROUP_ID.
      */
     @GuardedBy("mLock")
     private final SparseIntArray mUserProfileGroupIds = new SparseIntArray();
@@ -484,9 +491,7 @@
         mHandler.post(() -> {
             finishUserBoot(uss);
             startProfiles();
-            synchronized (mLock) {
-                stopRunningUsersLU(mMaxRunningUsers);
-            }
+            stopExcessRunningUsers();
         });
     }
 
@@ -510,14 +515,31 @@
         return runningUsers;
     }
 
+    private void stopExcessRunningUsers() {
+        final ArraySet<Integer> exemptedUsers = new ArraySet<>();
+        final List<UserInfo> users = mInjector.getUserManager().getUsers(true);
+        for (int i = 0; i < users.size(); i++) {
+            final int userId = users.get(i).id;
+            if (isAlwaysVisibleUser(userId)) {
+                exemptedUsers.add(userId);
+            }
+        }
+
+        synchronized (mLock) {
+            stopExcessRunningUsersLU(mMaxRunningUsers, exemptedUsers);
+        }
+    }
+
     @GuardedBy("mLock")
-    private void stopRunningUsersLU(int maxRunningUsers) {
+    private void stopExcessRunningUsersLU(int maxRunningUsers, ArraySet<Integer> exemptedUsers) {
         List<Integer> currentlyRunning = getRunningUsersLU();
         Iterator<Integer> iterator = currentlyRunning.iterator();
         while (currentlyRunning.size() > maxRunningUsers && iterator.hasNext()) {
             Integer userId = iterator.next();
-            if (userId == UserHandle.USER_SYSTEM || userId == mCurrentUserId) {
-                // Owner/System user and current user can't be stopped
+            if (userId == UserHandle.USER_SYSTEM
+                    || userId == mCurrentUserId
+                    || exemptedUsers.contains(userId)) {
+                // System and current users can't be stopped, and an exempt user shouldn't be
                 continue;
             }
             // allowDelayedLocking set here as stopping user is done without any explicit request
@@ -595,22 +617,18 @@
             }
         }
 
-        // We need to delay unlocking managed profiles until the parent user
-        // is also unlocked.
-        if (mInjector.getUserManager().isProfile(userId)) {
-            final UserInfo parent = mInjector.getUserManager().getProfileParent(userId);
-            if (parent != null
-                    && isUserRunning(parent.id, ActivityManager.FLAG_AND_UNLOCKED)) {
-                Slogf.d(TAG, "User " + userId + " (parent " + parent.id
-                        + "): attempting unlock because parent is unlocked");
-                maybeUnlockUser(userId);
-            } else {
-                String parentId = (parent == null) ? "<null>" : String.valueOf(parent.id);
-                Slogf.d(TAG, "User " + userId + " (parent " + parentId
-                        + "): delaying unlock because parent is locked");
-            }
-        } else {
+        // We need to delay unlocking profiles until the parent user is also unlocked.
+        final UserInfo parent = mInjector.getUserManager().getProfileParent(userId);
+        if (parent == null) {
+            // Not a profile (or is a parentless profile) so no parent for which to wait.
             maybeUnlockUser(userId);
+        } else if (isUserRunning(parent.id, ActivityManager.FLAG_AND_UNLOCKED)) {
+            Slogf.d(TAG, "User " + userId + " (parent " + parent.id
+                    + "): attempting unlock because parent is unlocked");
+            maybeUnlockUser(userId);
+        } else {
+            Slogf.d(TAG, "User " + userId + " (parent " + parent.id
+                    + "): delaying unlock because parent is locked");
         }
     }
 
@@ -1693,7 +1711,6 @@
                 boolean userSwitchUiEnabled;
                 synchronized (mLock) {
                     mCurrentUserId = userId;
-                    mTargetUserId = UserHandle.USER_NULL; // reset, mCurrentUserId has caught up
                     userSwitchUiEnabled = mUserSwitchUiEnabled;
                 }
                 mInjector.updateUserConfiguration();
@@ -1822,8 +1839,7 @@
         boolean success = startUser(targetUserId, USER_START_MODE_FOREGROUND);
         if (!success) {
             mInjector.getWindowManager().setSwitchingUser(false);
-            mTargetUserId = UserHandle.USER_NULL;
-            dismissUserSwitchDialog(null);
+            dismissUserSwitchDialog(this::endUserSwitch);
         }
     }
 
@@ -1900,8 +1916,7 @@
             return false;
         }
 
-        // We just unlocked a user, so let's now attempt to unlock any
-        // managed profiles under that user.
+        // We just unlocked a user, so let's now attempt to unlock any profiles under that user.
 
         // First, get list of userIds. Requires mLock, so we cannot make external calls, e.g. to UMS
         int[] userIds;
@@ -1944,6 +1959,7 @@
             Slogf.w(TAG, "Cannot switch to User #" + targetUserId + ": factory reset in progress");
             return false;
         }
+
         boolean userSwitchUiEnabled;
         synchronized (mLock) {
             if (!mInitialized) {
@@ -1951,6 +1967,12 @@
                         + ": UserController not ready yet");
                 return false;
             }
+            if (mTargetUserId != UserHandle.USER_NULL) {
+                Slogf.w(TAG, "There is already an ongoing user switch to User #" + mTargetUserId
+                        + ". User #" + targetUserId + " will be added to the queue.");
+                mPendingTargetUserIds.offer(targetUserId);
+                return true;
+            }
             mTargetUserId = targetUserId;
             userSwitchUiEnabled = mUserSwitchUiEnabled;
         }
@@ -2017,6 +2039,19 @@
         sendUserSwitchBroadcasts(oldUserId, newUserId);
         t.traceEnd();
         t.traceEnd();
+
+        endUserSwitch();
+    }
+
+    private void endUserSwitch() {
+        final int nextUserId;
+        synchronized (mLock) {
+            nextUserId = ObjectUtils.getOrElse(mPendingTargetUserIds.poll(), UserHandle.USER_NULL);
+            mTargetUserId = UserHandle.USER_NULL;
+        }
+        if (nextUserId != UserHandle.USER_NULL) {
+            switchUser(nextUserId);
+        }
     }
 
     private void dispatchLockedBootComplete(@UserIdInt int userId) {
@@ -2784,6 +2819,12 @@
         return userId == getCurrentOrTargetUserIdLU();
     }
 
+    /** Returns whether the user is always-visible (such as a communal profile). */
+    private boolean isAlwaysVisibleUser(@UserIdInt int userId) {
+        final UserProperties properties = getUserProperties(userId);
+        return properties != null && properties.getAlwaysVisible();
+    }
+
     int[] getUsers() {
         UserManagerService ums = mInjector.getUserManager();
         return ums != null ? ums.getUserIds() : new int[] { 0 };
@@ -2853,6 +2894,7 @@
         return mInjector.getUserManager().hasUserRestriction(restriction, userId);
     }
 
+    /** Returns whether the two users are in the same profile group. */
     boolean isSameProfileGroup(int callingUserId, int targetUserId) {
         if (callingUserId == targetUserId) {
             return true;
@@ -2900,7 +2942,9 @@
             if (user.profileGroupId == mCurrentUserId) {
                 mCurrentProfileIds = ArrayUtils.appendInt(mCurrentProfileIds, user.id);
             }
-            mUserProfileGroupIds.put(user.id, user.profileGroupId);
+            if (user.profileGroupId != UserInfo.NO_PROFILE_GROUP_ID) {
+                mUserProfileGroupIds.put(user.id, user.profileGroupId);
+            }
         }
     }
 
diff --git a/services/core/java/com/android/server/ambientcontext/AmbientContextManagerService.java b/services/core/java/com/android/server/ambientcontext/AmbientContextManagerService.java
index c6b15b6..c7a560b 100644
--- a/services/core/java/com/android/server/ambientcontext/AmbientContextManagerService.java
+++ b/services/core/java/com/android/server/ambientcontext/AmbientContextManagerService.java
@@ -129,7 +129,7 @@
                 PACKAGE_UPDATE_POLICY_REFRESH_EAGER
                         | /*To avoid high latency*/ PACKAGE_RESTART_POLICY_REFRESH_EAGER);
         mContext = context;
-        mExistingClientRequests = new ArraySet<>();
+        mExistingClientRequests = ConcurrentHashMap.newKeySet();
     }
 
     @Override
@@ -158,18 +158,22 @@
             String callingPackage, IAmbientContextObserver observer) {
         Slog.d(TAG, "New client added: " + callingPackage);
 
-        // Remove any existing ClientRequest for this user and package.
-        mExistingClientRequests.removeAll(
-                findExistingRequests(userId, callingPackage));
+        synchronized (mExistingClientRequests) {
+            // Remove any existing ClientRequest for this user and package.
+            mExistingClientRequests.removeAll(
+                    findExistingRequests(userId, callingPackage));
 
-        // Add to existing ClientRequests
-        mExistingClientRequests.add(
-                new ClientRequest(userId, request, callingPackage, observer));
+            // Add to existing ClientRequests
+            mExistingClientRequests.add(
+                    new ClientRequest(userId, request, callingPackage, observer));
+        }
     }
 
     void clientRemoved(int userId, String packageName) {
         Slog.d(TAG, "Remove client: " + packageName);
-        mExistingClientRequests.removeAll(findExistingRequests(userId, packageName));
+        synchronized (mExistingClientRequests) {
+            mExistingClientRequests.removeAll(findExistingRequests(userId, packageName));
+        }
     }
 
     private Set<ClientRequest> findExistingRequests(int userId, String packageName) {
@@ -184,9 +188,11 @@
 
     @Nullable
     IAmbientContextObserver getClientRequestObserver(int userId, String packageName) {
-        for (ClientRequest clientRequest : mExistingClientRequests) {
-            if (clientRequest.hasUserIdAndPackageName(userId, packageName)) {
-                return clientRequest.getObserver();
+        synchronized (mExistingClientRequests) {
+            for (ClientRequest clientRequest : mExistingClientRequests) {
+                if (clientRequest.hasUserIdAndPackageName(userId, packageName)) {
+                    return clientRequest.getObserver();
+                }
             }
         }
         return null;
@@ -588,10 +594,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.ACCESS_AMBIENT_CONTEXT_EVENT)
         @Override
         public void unregisterObserver(String callingPackage) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.ACCESS_AMBIENT_CONTEXT_EVENT, TAG);
+            unregisterObserver_enforcePermission();
             assertCalledByPackageOwner(callingPackage);
 
             synchronized (mLock) {
diff --git a/services/core/java/com/android/server/appop/AppOpMigrationHelper.java b/services/core/java/com/android/server/appop/AppOpMigrationHelper.java
new file mode 100644
index 0000000..7919370
--- /dev/null
+++ b/services/core/java/com/android/server/appop/AppOpMigrationHelper.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.appop;
+
+import android.annotation.NonNull;
+
+import java.util.Map;
+
+/**
+ * In-process api for app-ops migration.
+ *
+ * @hide
+ */
+public interface AppOpMigrationHelper {
+
+    /**
+     * @return a map of app ID to app-op modes (op name -> mode) for a given user.
+     */
+    @NonNull
+    Map<Integer, Map<String, Integer>> getLegacyAppIdAppOpModes(int userId);
+
+    /**
+     * @return a map of package name to app-op modes (op name -> mode) for a given user.
+     */
+    @NonNull
+    Map<String, Map<String, Integer>> getLegacyPackageAppOpModes(int userId);
+
+    /**
+     * @return AppOps file version, the version is same for all the user.
+     */
+    int getLegacyAppOpVersion();
+
+    /**
+     * @return Whether app-op state exists or not.
+     */
+    boolean hasLegacyAppOpState();
+}
diff --git a/services/core/java/com/android/server/appop/AppOpMigrationHelperImpl.java b/services/core/java/com/android/server/appop/AppOpMigrationHelperImpl.java
new file mode 100644
index 0000000..b5288bf
--- /dev/null
+++ b/services/core/java/com/android/server/appop/AppOpMigrationHelperImpl.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.appop;
+
+import android.annotation.NonNull;
+import android.app.AppOpsManager;
+import android.os.UserHandle;
+import android.util.ArrayMap;
+import android.util.AtomicFile;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.server.SystemServiceManager;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * Provider of legacy app-ops data for new permission subsystem.
+ *
+ * @hide
+ */
+public class AppOpMigrationHelperImpl implements AppOpMigrationHelper {
+    private SparseArray<Map<Integer, Map<String, Integer>>> mAppIdAppOpModes = null;
+    private SparseArray<Map<String, Map<String, Integer>>> mPackageAppOpModes = null;
+    private int mVersionAtBoot;
+
+    private final Object mLock = new Object();
+
+    @Override
+    @GuardedBy("mLock")
+    @NonNull
+    public Map<Integer, Map<String, Integer>> getLegacyAppIdAppOpModes(int userId) {
+        synchronized (mLock) {
+            if (mAppIdAppOpModes == null) {
+                readLegacyAppOpState();
+            }
+        }
+        return mAppIdAppOpModes.get(userId, Collections.emptyMap());
+    }
+
+    @Override
+    @GuardedBy("mLock")
+    @NonNull
+    public Map<String, Map<String, Integer>> getLegacyPackageAppOpModes(int userId) {
+        synchronized (mLock) {
+            if (mPackageAppOpModes == null) {
+                readLegacyAppOpState();
+            }
+        }
+        return mPackageAppOpModes.get(userId, Collections.emptyMap());
+    }
+
+    @GuardedBy("mLock")
+    private void readLegacyAppOpState() {
+        final File systemDir = SystemServiceManager.ensureSystemDir();
+        AtomicFile appOpFile = new AtomicFile(new File(systemDir, "appops.xml"));
+
+        final SparseArray<SparseIntArray> uidAppOpModes = new SparseArray<>();
+        final SparseArray<ArrayMap<String, SparseIntArray>> packageAppOpModes =
+                new SparseArray<>();
+
+        LegacyAppOpStateParser parser = new LegacyAppOpStateParser();
+        final int version = parser.readState(appOpFile, uidAppOpModes, packageAppOpModes);
+        // -1 No app ops data available
+        // 0 appops.xml exist w/o any version
+        switch (version) {
+            case -2:
+                mVersionAtBoot = -1;
+                break;
+            case -1:
+                mVersionAtBoot = 0;
+                break;
+            default:
+                mVersionAtBoot = version;
+        }
+        mAppIdAppOpModes = getAppIdAppOpModes(uidAppOpModes);
+        mPackageAppOpModes = getPackageAppOpModes(packageAppOpModes);
+    }
+
+    private SparseArray<Map<Integer, Map<String, Integer>>> getAppIdAppOpModes(
+            SparseArray<SparseIntArray> uidAppOpModes) {
+        SparseArray<Map<Integer, Map<String, Integer>>> userAppIdAppOpModes = new SparseArray<>();
+
+        int size = uidAppOpModes.size();
+        for (int uidIndex = 0; uidIndex < size; uidIndex++) {
+            int uid = uidAppOpModes.keyAt(uidIndex);
+            int userId = UserHandle.getUserId(uid);
+            Map<Integer, Map<String, Integer>> appIdAppOpModes = userAppIdAppOpModes.get(userId);
+            if (appIdAppOpModes == null) {
+                appIdAppOpModes = new ArrayMap<>();
+                userAppIdAppOpModes.put(userId, appIdAppOpModes);
+            }
+
+            SparseIntArray appOpModes = uidAppOpModes.valueAt(uidIndex);
+            appIdAppOpModes.put(UserHandle.getAppId(uid), getAppOpModesForOpName(appOpModes));
+        }
+        return userAppIdAppOpModes;
+    }
+
+    private SparseArray<Map<String, Map<String, Integer>>> getPackageAppOpModes(
+            SparseArray<ArrayMap<String, SparseIntArray>> legacyPackageAppOpModes) {
+        SparseArray<Map<String, Map<String, Integer>>> userPackageAppOpModes = new SparseArray<>();
+
+        int usersSize = legacyPackageAppOpModes.size();
+        for (int userIndex = 0; userIndex < usersSize; userIndex++) {
+            int userId = legacyPackageAppOpModes.keyAt(userIndex);
+            Map<String, Map<String, Integer>> packageAppOpModes = userPackageAppOpModes.get(userId);
+            if (packageAppOpModes == null) {
+                packageAppOpModes = new ArrayMap<>();
+                userPackageAppOpModes.put(userId, packageAppOpModes);
+            }
+
+            ArrayMap<String, SparseIntArray> legacyPackagesModes =
+                    legacyPackageAppOpModes.valueAt(userIndex);
+
+            int packagesSize = legacyPackagesModes.size();
+            for (int packageIndex = 0; packageIndex < packagesSize; packageIndex++) {
+                String packageName = legacyPackagesModes.keyAt(packageIndex);
+                SparseIntArray modes = legacyPackagesModes.valueAt(packageIndex);
+                packageAppOpModes.put(packageName, getAppOpModesForOpName(modes));
+            }
+        }
+        return userPackageAppOpModes;
+    }
+
+    /**
+     * Converts the map from op code -> mode to op name -> mode.
+     */
+    private Map<String, Integer> getAppOpModesForOpName(SparseIntArray appOpCodeModes) {
+        int modesSize = appOpCodeModes.size();
+        Map<String, Integer> appOpNameModes = new ArrayMap<>(modesSize);
+
+        for (int modeIndex = 0; modeIndex < modesSize; modeIndex++) {
+            int opCode = appOpCodeModes.keyAt(modeIndex);
+            int opMode = appOpCodeModes.valueAt(modeIndex);
+            appOpNameModes.put(AppOpsManager.opToPublicName(opCode), opMode);
+        }
+        return appOpNameModes;
+    }
+
+    @Override
+    public int getLegacyAppOpVersion() {
+        synchronized (mLock) {
+            if (mAppIdAppOpModes == null || mPackageAppOpModes == null) {
+                readLegacyAppOpState();
+            }
+        }
+        return mVersionAtBoot;
+    }
+
+    @Override
+    public boolean hasLegacyAppOpState() {
+        return getLegacyAppOpVersion() > -1;
+    }
+}
diff --git a/services/core/java/com/android/server/appop/AppOpsCheckingServiceImpl.java b/services/core/java/com/android/server/appop/AppOpsCheckingServiceImpl.java
index 4dfd9b0..108f53f 100644
--- a/services/core/java/com/android/server/appop/AppOpsCheckingServiceImpl.java
+++ b/services/core/java/com/android/server/appop/AppOpsCheckingServiceImpl.java
@@ -17,20 +17,12 @@
 package com.android.server.appop;
 
 import static android.app.AppOpsManager.MODE_ALLOWED;
-import static android.app.AppOpsManager.OP_NONE;
+import static android.app.AppOpsManager.MODE_FOREGROUND;
 import static android.app.AppOpsManager.OP_SCHEDULE_EXACT_ALARM;
 import static android.app.AppOpsManager.OP_USE_FULL_SCREEN_INTENT;
-import static android.app.AppOpsManager.WATCH_FOREGROUND_CHANGES;
-import static android.app.AppOpsManager.opRestrictsRead;
-import static android.app.AppOpsManager.opToDefaultMode;
 
-import static com.android.server.appop.AppOpsService.ModeCallback.ALL_OPS;
-
-import android.Manifest;
 import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.annotation.UserIdInt;
-import android.app.AppGlobals;
 import android.app.AppOpsManager;
 import android.app.AppOpsManager.Mode;
 import android.content.Context;
@@ -38,13 +30,10 @@
 import android.content.pm.PackageManagerInternal;
 import android.content.pm.UserPackage;
 import android.os.AsyncTask;
-import android.os.Binder;
 import android.os.Handler;
-import android.os.RemoteException;
 import android.os.UserHandle;
 import android.permission.PermissionManager;
 import android.util.ArrayMap;
-import android.util.ArraySet;
 import android.util.AtomicFile;
 import android.util.Slog;
 import android.util.SparseArray;
@@ -54,30 +43,16 @@
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.util.XmlUtils;
-import com.android.internal.util.function.pooled.PooledLambda;
-import com.android.modules.utils.TypedXmlPullParser;
 import com.android.modules.utils.TypedXmlSerializer;
 import com.android.server.LocalServices;
 import com.android.server.pm.UserManagerInternal;
 import com.android.server.pm.permission.PermissionManagerServiceInternal;
 
-import libcore.util.EmptyArray;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.PrintWriter;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
-import java.util.Objects;
-
 
 /**
  * Legacy implementation for App-ops service's app-op mode (uid and package) storage and access.
@@ -130,9 +105,9 @@
     @GuardedBy("mLock")
     final SparseArray<ArrayMap<String, SparseIntArray>> mUserPackageModes = new SparseArray<>();
 
-    final SparseArray<ArraySet<OnOpModeChangedListener>> mOpModeWatchers = new SparseArray<>();
-    final ArrayMap<String, ArraySet<OnOpModeChangedListener>> mPackageModeWatchers =
-            new ArrayMap<>();
+    private final LegacyAppOpStateParser mAppOpsStateParser = new LegacyAppOpStateParser();
+    @GuardedBy("mLock")
+    private List<AppOpsModeChangedListener> mModeChangedListeners = new ArrayList<>();
 
     final AtomicFile mFile;
     final Runnable mWriteRunner = new Runnable() {
@@ -155,10 +130,6 @@
     boolean mWriteScheduled;
     boolean mFastWriteScheduled;
 
-
-    // Constant meaning that any UID should be matched when dispatching callbacks
-    private static final int UID_ANY = -2;
-
     AppOpsCheckingServiceImpl(File storageFile,
             @NonNull Object lock, Handler handler, Context context,
             SparseArray<int[]> switchedOps) {
@@ -218,31 +189,39 @@
     @Override
     public boolean setUidMode(int uid, int op, int mode) {
         final int defaultMode = AppOpsManager.opToDefaultMode(op);
+        List<AppOpsModeChangedListener> listenersCopy;
         synchronized (mLock) {
             SparseIntArray opModes = mUidModes.get(uid, null);
-            if (opModes == null) {
-                if (mode != defaultMode) {
-                    opModes = new SparseIntArray();
-                    mUidModes.put(uid, opModes);
-                    opModes.put(op, mode);
-                    scheduleWriteLocked();
+
+            int previousMode = defaultMode;
+            if (opModes != null) {
+                previousMode = opModes.get(op, defaultMode);
+            }
+            if (mode == previousMode) {
+                return false;
+            }
+
+            if (mode == defaultMode) {
+                opModes.delete(op);
+                if (opModes.size() == 0) {
+                    mUidModes.remove(uid);
                 }
             } else {
-                if (opModes.indexOfKey(op) >= 0 && opModes.get(op) == mode) {
-                    return false;
+                if (opModes == null) {
+                    opModes = new SparseIntArray();
+                    mUidModes.put(uid, opModes);
                 }
-                if (mode == defaultMode) {
-                    opModes.delete(op);
-                    if (opModes.size() <= 0) {
-                        opModes = null;
-                        mUidModes.delete(uid);
-                    }
-                } else {
-                    opModes.put(op, mode);
-                }
-                scheduleWriteLocked();
+                opModes.put(op, mode);
             }
+
+            scheduleWriteLocked();
+            listenersCopy = new ArrayList<>(mModeChangedListeners);
         }
+
+        for (int i = 0; i < listenersCopy.size(); i++) {
+            listenersCopy.get(i).onUidModeChanged(uid, op, mode);
+        }
+
         return true;
     }
 
@@ -264,35 +243,52 @@
     @Override
     public void setPackageMode(String packageName, int op, @Mode int mode, @UserIdInt int userId) {
         final int defaultMode = AppOpsManager.opToDefaultMode(op);
+        List<AppOpsModeChangedListener> listenersCopy;
         synchronized (mLock) {
             ArrayMap<String, SparseIntArray> packageModes = mUserPackageModes.get(userId, null);
-            if (packageModes == null) {
+            if (packageModes == null && mode != defaultMode) {
                 packageModes = new ArrayMap<>();
                 mUserPackageModes.put(userId, packageModes);
             }
-            SparseIntArray opModes = packageModes.get(packageName);
-            if (opModes == null) {
-                if (mode != defaultMode) {
-                    opModes = new SparseIntArray();
-                    packageModes.put(packageName, opModes);
-                    opModes.put(op, mode);
-                    scheduleWriteLocked();
+            SparseIntArray opModes = null;
+            int previousMode = defaultMode;
+            if (packageModes != null) {
+                opModes = packageModes.get(packageName);
+                if (opModes != null) {
+                    previousMode = opModes.get(op, defaultMode);
+                }
+            }
+
+            if (mode == previousMode) {
+                return;
+            }
+
+            if (mode == defaultMode) {
+                opModes.delete(op);
+                if (opModes.size() == 0) {
+                    packageModes.remove(packageName);
+                    if (packageModes.size() == 0) {
+                        mUserPackageModes.remove(userId);
+                    }
                 }
             } else {
-                if (opModes.indexOfKey(op) >= 0 && opModes.get(op) == mode) {
-                    return;
+                if (packageModes == null) {
+                    packageModes = new ArrayMap<>();
+                    mUserPackageModes.put(userId, packageModes);
                 }
-                if (mode == defaultMode) {
-                    opModes.delete(op);
-                    if (opModes.size() <= 0) {
-                        opModes = null;
-                        packageModes.remove(packageName);
-                    }
-                } else {
-                    opModes.put(op, mode);
+                if (opModes == null) {
+                    opModes = new SparseIntArray();
+                    packageModes.put(packageName, opModes);
                 }
-                scheduleWriteLocked();
+                opModes.put(op, mode);
             }
+
+            scheduleFastWriteLocked();
+            listenersCopy = new ArrayList<>(mModeChangedListeners);
+        }
+
+        for (int i = 0; i < listenersCopy.size(); i++) {
+            listenersCopy.get(i).onPackageModeChanged(packageName, userId, op, mode);
         }
     }
 
@@ -353,348 +349,43 @@
     }
 
     @Override
-    public void startWatchingOpModeChanged(@NonNull OnOpModeChangedListener changedListener,
-            int op) {
-        Objects.requireNonNull(changedListener);
+    public SparseBooleanArray getForegroundOps(int uid) {
+        SparseBooleanArray result = new SparseBooleanArray();
         synchronized (mLock) {
-            ArraySet<OnOpModeChangedListener> modeWatcherSet = mOpModeWatchers.get(op);
-            if (modeWatcherSet == null) {
-                modeWatcherSet = new ArraySet<>();
-                mOpModeWatchers.put(op, modeWatcherSet);
+            SparseIntArray modes = mUidModes.get(uid);
+            if (modes == null) {
+                return result;
             }
-            modeWatcherSet.add(changedListener);
+            for (int i = 0; i < modes.size(); i++) {
+                if (modes.valueAt(i) == MODE_FOREGROUND) {
+                    result.put(modes.keyAt(i), true);
+                }
+            }
         }
+
+        return result;
     }
 
     @Override
-    public void startWatchingPackageModeChanged(@NonNull OnOpModeChangedListener changedListener,
-            @NonNull String packageName) {
-        Objects.requireNonNull(changedListener);
-        Objects.requireNonNull(packageName);
+    public SparseBooleanArray getForegroundOps(String packageName, int userId) {
+        SparseBooleanArray result = new SparseBooleanArray();
         synchronized (mLock) {
-            ArraySet<OnOpModeChangedListener> modeWatcherSet =
-                    mPackageModeWatchers.get(packageName);
-            if (modeWatcherSet == null) {
-                modeWatcherSet = new ArraySet<>();
-                mPackageModeWatchers.put(packageName, modeWatcherSet);
+            ArrayMap<String, SparseIntArray> packageModes = mUserPackageModes.get(userId);
+            if (packageModes == null) {
+                return result;
             }
-            modeWatcherSet.add(changedListener);
-        }
-    }
-
-    @Override
-    public void removeListener(@NonNull OnOpModeChangedListener changedListener) {
-        Objects.requireNonNull(changedListener);
-
-        synchronized (mLock) {
-            for (int i = mOpModeWatchers.size() - 1; i >= 0; i--) {
-                ArraySet<OnOpModeChangedListener> cbs = mOpModeWatchers.valueAt(i);
-                cbs.remove(changedListener);
-                if (cbs.size() <= 0) {
-                    mOpModeWatchers.removeAt(i);
-                }
+            SparseIntArray modes = packageModes.get(packageName);
+            if (modes == null) {
+                return result;
             }
-
-            for (int i = mPackageModeWatchers.size() - 1; i >= 0; i--) {
-                ArraySet<OnOpModeChangedListener> cbs = mPackageModeWatchers.valueAt(i);
-                cbs.remove(changedListener);
-                if (cbs.size() <= 0) {
-                    mPackageModeWatchers.removeAt(i);
-                }
-            }
-        }
-    }
-
-    @Override
-    public ArraySet<OnOpModeChangedListener> getOpModeChangedListeners(int op) {
-        synchronized (mLock) {
-            ArraySet<OnOpModeChangedListener> modeChangedListenersSet = mOpModeWatchers.get(op);
-            if (modeChangedListenersSet == null) {
-                return new ArraySet<>();
-            }
-            return new ArraySet<>(modeChangedListenersSet);
-        }
-    }
-
-    @Override
-    public ArraySet<OnOpModeChangedListener> getPackageModeChangedListeners(
-            @NonNull String packageName) {
-        Objects.requireNonNull(packageName);
-
-        synchronized (mLock) {
-            ArraySet<OnOpModeChangedListener> modeChangedListenersSet =
-                    mPackageModeWatchers.get(packageName);
-            if (modeChangedListenersSet == null) {
-                return new ArraySet<>();
-            }
-            return new ArraySet<>(modeChangedListenersSet);
-        }
-    }
-
-    @Override
-    public void notifyWatchersOfChange(int code, int uid) {
-        ArraySet<OnOpModeChangedListener> listenerSet = getOpModeChangedListeners(code);
-        if (listenerSet == null) {
-            return;
-        }
-        for (int i = 0; i < listenerSet.size(); i++) {
-            final OnOpModeChangedListener listener = listenerSet.valueAt(i);
-            notifyOpChanged(listener, code, uid, null);
-        }
-    }
-
-    @Override
-    public void notifyOpChanged(@NonNull OnOpModeChangedListener onModeChangedListener, int code,
-            int uid, @Nullable String packageName) {
-        Objects.requireNonNull(onModeChangedListener);
-
-        if (uid != UID_ANY && onModeChangedListener.getWatchingUid() >= 0
-                && onModeChangedListener.getWatchingUid() != uid) {
-            return;
-        }
-
-        // See CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE
-        int[] switchedCodes;
-        if (onModeChangedListener.getWatchedOpCode() == ALL_OPS) {
-            switchedCodes = mSwitchedOps.get(code);
-        } else if (onModeChangedListener.getWatchedOpCode() == OP_NONE) {
-            switchedCodes = new int[]{code};
-        } else {
-            switchedCodes = new int[]{onModeChangedListener.getWatchedOpCode()};
-        }
-
-        for (int switchedCode : switchedCodes) {
-            // There are features watching for mode changes such as window manager
-            // and location manager which are in our process. The callbacks in these
-            // features may require permissions our remote caller does not have.
-            final long identity = Binder.clearCallingIdentity();
-            try {
-                if (shouldIgnoreCallback(switchedCode, onModeChangedListener.getCallingPid(),
-                        onModeChangedListener.getCallingUid())) {
-                    continue;
-                }
-                onModeChangedListener.onOpModeChanged(switchedCode, uid, packageName);
-            } catch (RemoteException e) {
-                /* ignore */
-            } finally {
-                Binder.restoreCallingIdentity(identity);
-            }
-        }
-    }
-
-    private boolean shouldIgnoreCallback(int op, int watcherPid, int watcherUid) {
-        // If it's a restricted read op, ignore it if watcher doesn't have manage ops permission,
-        // as watcher should not use this to signal if the value is changed.
-        return opRestrictsRead(op) && mContext.checkPermission(Manifest.permission.MANAGE_APPOPS,
-                watcherPid, watcherUid) != PackageManager.PERMISSION_GRANTED;
-    }
-
-    @Override
-    public void notifyOpChangedForAllPkgsInUid(int code, int uid, boolean onlyForeground,
-            @Nullable OnOpModeChangedListener callbackToIgnore) {
-        String[] uidPackageNames = getPackagesForUid(uid);
-        ArrayMap<OnOpModeChangedListener, ArraySet<String>> callbackSpecs = null;
-
-        synchronized (mLock) {
-            ArraySet<OnOpModeChangedListener> callbacks = mOpModeWatchers.get(code);
-            if (callbacks != null) {
-                final int callbackCount = callbacks.size();
-                for (int i = 0; i < callbackCount; i++) {
-                    OnOpModeChangedListener callback = callbacks.valueAt(i);
-
-                    if (onlyForeground && (callback.getFlags()
-                            & WATCH_FOREGROUND_CHANGES) == 0) {
-                        continue;
-                    }
-
-                    ArraySet<String> changedPackages = new ArraySet<>();
-                    Collections.addAll(changedPackages, uidPackageNames);
-                    if (callbackSpecs == null) {
-                        callbackSpecs = new ArrayMap<>();
-                    }
-                    callbackSpecs.put(callback, changedPackages);
-                }
-            }
-
-            for (String uidPackageName : uidPackageNames) {
-                callbacks = mPackageModeWatchers.get(uidPackageName);
-                if (callbacks != null) {
-                    if (callbackSpecs == null) {
-                        callbackSpecs = new ArrayMap<>();
-                    }
-                    final int callbackCount = callbacks.size();
-                    for (int i = 0; i < callbackCount; i++) {
-                        OnOpModeChangedListener callback = callbacks.valueAt(i);
-
-                        if (onlyForeground && (callback.getFlags()
-                                & WATCH_FOREGROUND_CHANGES) == 0) {
-                            continue;
-                        }
-
-                        ArraySet<String> changedPackages = callbackSpecs.get(callback);
-                        if (changedPackages == null) {
-                            changedPackages = new ArraySet<>();
-                            callbackSpecs.put(callback, changedPackages);
-                        }
-                        changedPackages.add(uidPackageName);
-                    }
-                }
-            }
-
-            if (callbackSpecs != null && callbackToIgnore != null) {
-                callbackSpecs.remove(callbackToIgnore);
-            }
-        }
-
-        if (callbackSpecs == null) {
-            return;
-        }
-
-        for (int i = 0; i < callbackSpecs.size(); i++) {
-            final OnOpModeChangedListener callback = callbackSpecs.keyAt(i);
-            final ArraySet<String> reportedPackageNames = callbackSpecs.valueAt(i);
-            if (reportedPackageNames == null) {
-                mHandler.sendMessage(PooledLambda.obtainMessage(
-                        AppOpsCheckingServiceImpl::notifyOpChanged,
-                        this, callback, code, uid, (String) null));
-
-            } else {
-                final int reportedPackageCount = reportedPackageNames.size();
-                for (int j = 0; j < reportedPackageCount; j++) {
-                    final String reportedPackageName = reportedPackageNames.valueAt(j);
-                    mHandler.sendMessage(PooledLambda.obtainMessage(
-                            AppOpsCheckingServiceImpl::notifyOpChanged,
-                            this, callback, code, uid, reportedPackageName));
-                }
-            }
-        }
-    }
-
-    private static String[] getPackagesForUid(int uid) {
-        String[] packageNames = null;
-
-        // Very early during boot the package manager is not yet or not yet fully started. At this
-        // time there are no packages yet.
-        if (AppGlobals.getPackageManager() != null) {
-            try {
-                packageNames = AppGlobals.getPackageManager().getPackagesForUid(uid);
-            } catch (RemoteException e) {
-                /* ignore - local call */
-            }
-        }
-        if (packageNames == null) {
-            return EmptyArray.STRING;
-        }
-        return packageNames;
-    }
-
-    @Override
-    public SparseBooleanArray evalForegroundUidOps(int uid, SparseBooleanArray foregroundOps) {
-        synchronized (mLock) {
-            return evalForegroundOps(mUidModes.get(uid), foregroundOps);
-        }
-    }
-
-    @Override
-    public SparseBooleanArray evalForegroundPackageOps(String packageName,
-            SparseBooleanArray foregroundOps, @UserIdInt int userId) {
-        synchronized (mLock) {
-            ArrayMap<String, SparseIntArray> packageModes = mUserPackageModes.get(userId, null);
-            return evalForegroundOps(packageModes == null ? null : packageModes.get(packageName),
-                    foregroundOps);
-        }
-    }
-
-    private SparseBooleanArray evalForegroundOps(SparseIntArray opModes,
-            SparseBooleanArray foregroundOps) {
-        SparseBooleanArray tempForegroundOps = foregroundOps;
-        if (opModes != null) {
-            for (int i = opModes.size() - 1; i >= 0; i--) {
-                if (opModes.valueAt(i) == AppOpsManager.MODE_FOREGROUND) {
-                    if (tempForegroundOps == null) {
-                        tempForegroundOps = new SparseBooleanArray();
-                    }
-                    evalForegroundWatchers(opModes.keyAt(i), tempForegroundOps);
-                }
-            }
-        }
-        return tempForegroundOps;
-    }
-
-    private void evalForegroundWatchers(int op, SparseBooleanArray foregroundOps) {
-        boolean curValue = foregroundOps.get(op, false);
-        ArraySet<OnOpModeChangedListener> listenerSet = mOpModeWatchers.get(op);
-        if (listenerSet != null) {
-            for (int cbi = listenerSet.size() - 1; !curValue && cbi >= 0; cbi--) {
-                if ((listenerSet.valueAt(cbi).getFlags()
-                        & AppOpsManager.WATCH_FOREGROUND_CHANGES) != 0) {
-                    curValue = true;
-                }
-            }
-        }
-        foregroundOps.put(op, curValue);
-    }
-
-    @Override
-    public boolean dumpListeners(int dumpOp, int dumpUid, String dumpPackage,
-            PrintWriter printWriter) {
-        boolean needSep = false;
-        if (mOpModeWatchers.size() > 0) {
-            boolean printedHeader = false;
-            for (int i = 0; i < mOpModeWatchers.size(); i++) {
-                if (dumpOp >= 0 && dumpOp != mOpModeWatchers.keyAt(i)) {
-                    continue;
-                }
-                boolean printedOpHeader = false;
-                ArraySet<OnOpModeChangedListener> modeChangedListenerSet =
-                        mOpModeWatchers.valueAt(i);
-                for (int j = 0; j < modeChangedListenerSet.size(); j++) {
-                    final OnOpModeChangedListener listener = modeChangedListenerSet.valueAt(j);
-                    if (dumpPackage != null
-                            && dumpUid != UserHandle.getAppId(listener.getWatchingUid())) {
-                        continue;
-                    }
-                    needSep = true;
-                    if (!printedHeader) {
-                        printWriter.println("  Op mode watchers:");
-                        printedHeader = true;
-                    }
-                    if (!printedOpHeader) {
-                        printWriter.print("    Op ");
-                        printWriter.print(AppOpsManager.opToName(mOpModeWatchers.keyAt(i)));
-                        printWriter.println(":");
-                        printedOpHeader = true;
-                    }
-                    printWriter.print("      #"); printWriter.print(j); printWriter.print(": ");
-                    printWriter.println(listener.toString());
+            for (int i = 0; i < modes.size(); i++) {
+                if (modes.valueAt(i) == MODE_FOREGROUND) {
+                    result.put(modes.keyAt(i), true);
                 }
             }
         }
 
-        if (mPackageModeWatchers.size() > 0 && dumpOp < 0) {
-            boolean printedHeader = false;
-            for (int i = 0; i < mPackageModeWatchers.size(); i++) {
-                if (dumpPackage != null
-                        && !dumpPackage.equals(mPackageModeWatchers.keyAt(i))) {
-                    continue;
-                }
-                needSep = true;
-                if (!printedHeader) {
-                    printWriter.println("  Package mode watchers:");
-                    printedHeader = true;
-                }
-                printWriter.print("    Pkg "); printWriter.print(mPackageModeWatchers.keyAt(i));
-                printWriter.println(":");
-                ArraySet<OnOpModeChangedListener> modeChangedListenerSet =
-                        mPackageModeWatchers.valueAt(i);
-
-                for (int j = 0; j < modeChangedListenerSet.size(); j++) {
-                    printWriter.print("      #"); printWriter.print(j); printWriter.print(": ");
-                    printWriter.println(modeChangedListenerSet.valueAt(j).toString());
-                }
-            }
-        }
-        return needSep;
+        return result;
     }
 
     private void scheduleWriteLocked() {
@@ -834,58 +525,7 @@
     public void readState() {
         synchronized (mFile) {
             synchronized (mLock) {
-                FileInputStream stream;
-                try {
-                    stream = mFile.openRead();
-                } catch (FileNotFoundException e) {
-                    Slog.i(TAG, "No existing app ops " + mFile.getBaseFile() + "; starting empty");
-                    mVersionAtBoot = NO_FILE_VERSION;
-                    return;
-                }
-
-                try {
-                    TypedXmlPullParser parser = Xml.resolvePullParser(stream);
-                    int type;
-                    while ((type = parser.next()) != XmlPullParser.START_TAG
-                            && type != XmlPullParser.END_DOCUMENT) {
-                        // Parse next until we reach the start or end
-                    }
-
-                    if (type != XmlPullParser.START_TAG) {
-                        throw new IllegalStateException("no start tag found");
-                    }
-
-                    mVersionAtBoot = parser.getAttributeInt(null, "v", NO_VERSION);
-
-                    int outerDepth = parser.getDepth();
-                    while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                            && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
-                        if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
-                            continue;
-                        }
-
-                        String tagName = parser.getName();
-                        if (tagName.equals("pkg")) {
-                            // version 2 has the structure pkg -> uid -> op ->
-                            // in version 3, since pkg and uid states are kept completely
-                            // independent we switch to user -> pkg -> op
-                            readPackage(parser);
-                        } else if (tagName.equals("uid")) {
-                            readUidOps(parser);
-                        } else if (tagName.equals("user")) {
-                            readUser(parser);
-                        } else {
-                            Slog.w(TAG, "Unknown element under <app-ops>: "
-                                    + parser.getName());
-                            XmlUtils.skipCurrentTag(parser);
-                        }
-                    }
-                    return;
-                } catch (XmlPullParserException e) {
-                    throw new RuntimeException(e);
-                } catch (IOException e) {
-                    throw new RuntimeException(e);
-                }
+                mVersionAtBoot = mAppOpsStateParser.readState(mFile, mUidModes, mUserPackageModes);
             }
         }
     }
@@ -907,162 +547,6 @@
     }
 
     @GuardedBy("mLock")
-    private void readUidOps(TypedXmlPullParser parser) throws NumberFormatException,
-            XmlPullParserException, IOException {
-        final int uid = parser.getAttributeInt(null, "n");
-        SparseIntArray modes = mUidModes.get(uid);
-        if (modes == null) {
-            modes = new SparseIntArray();
-            mUidModes.put(uid, modes);
-        }
-
-        int outerDepth = parser.getDepth();
-        int type;
-        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
-            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
-                continue;
-            }
-
-            String tagName = parser.getName();
-            if (tagName.equals("op")) {
-                final int code = parser.getAttributeInt(null, "n");
-                final int mode = parser.getAttributeInt(null, "m");
-
-                if (mode != opToDefaultMode(code)) {
-                    modes.put(code, mode);
-                }
-            } else {
-                Slog.w(TAG, "Unknown element under <uid>: "
-                        + parser.getName());
-                XmlUtils.skipCurrentTag(parser);
-            }
-        }
-    }
-
-    /*
-     * Used for migration when pkg is the depth=1 tag
-     */
-    @GuardedBy("mLock")
-    private void readPackage(TypedXmlPullParser parser)
-            throws NumberFormatException, XmlPullParserException, IOException {
-        String pkgName = parser.getAttributeValue(null, "n");
-        int outerDepth = parser.getDepth();
-        int type;
-        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
-            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
-                continue;
-            }
-
-            String tagName = parser.getName();
-            if (tagName.equals("uid")) {
-                readUid(parser, pkgName);
-            } else {
-                Slog.w(TAG, "Unknown element under <pkg>: "
-                        + parser.getName());
-                XmlUtils.skipCurrentTag(parser);
-            }
-        }
-    }
-
-    /*
-     * Used for migration when uid is the depth=2 tag
-     */
-    @GuardedBy("mLock")
-    private void readUid(TypedXmlPullParser parser, String pkgName)
-            throws NumberFormatException, XmlPullParserException, IOException {
-        int userId = UserHandle.getUserId(parser.getAttributeInt(null, "n"));
-        int outerDepth = parser.getDepth();
-        int type;
-        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
-            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
-                continue;
-            }
-
-            String tagName = parser.getName();
-            if (tagName.equals("op")) {
-                readOp(parser, userId, pkgName);
-            } else {
-                Slog.w(TAG, "Unknown element under <pkg>: "
-                        + parser.getName());
-                XmlUtils.skipCurrentTag(parser);
-            }
-        }
-    }
-
-    @GuardedBy("mLock")
-    private void readUser(TypedXmlPullParser parser)
-            throws NumberFormatException, XmlPullParserException, IOException {
-        int userId = parser.getAttributeInt(null, "n");
-        int outerDepth = parser.getDepth();
-        int type;
-        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
-            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
-                continue;
-            }
-
-            String tagName = parser.getName();
-            if (tagName.equals("pkg")) {
-                readPackage(parser, userId);
-            } else {
-                Slog.w(TAG, "Unknown element under <user>: "
-                        + parser.getName());
-                XmlUtils.skipCurrentTag(parser);
-            }
-        }
-    }
-
-    @GuardedBy("mLock")
-    private void readPackage(TypedXmlPullParser parser, int userId)
-            throws NumberFormatException, XmlPullParserException, IOException {
-        String pkgName = parser.getAttributeValue(null, "n");
-        int outerDepth = parser.getDepth();
-        int type;
-        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
-            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
-                continue;
-            }
-
-            String tagName = parser.getName();
-            if (tagName.equals("op")) {
-                readOp(parser, userId, pkgName);
-            } else {
-                Slog.w(TAG, "Unknown element under <pkg>: "
-                        + parser.getName());
-                XmlUtils.skipCurrentTag(parser);
-            }
-        }
-    }
-
-    @GuardedBy("mLock")
-    private void readOp(TypedXmlPullParser parser, int userId, @NonNull String pkgName)
-            throws NumberFormatException, XmlPullParserException {
-        final int opCode = parser.getAttributeInt(null, "n");
-        final int defaultMode = AppOpsManager.opToDefaultMode(opCode);
-        final int mode = parser.getAttributeInt(null, "m", defaultMode);
-
-        if (mode != defaultMode) {
-            ArrayMap<String, SparseIntArray> packageModes = mUserPackageModes.get(userId);
-            if (packageModes == null) {
-                packageModes = new ArrayMap<>();
-                mUserPackageModes.put(userId, packageModes);
-            }
-
-            SparseIntArray modes = packageModes.get(pkgName);
-            if (modes == null) {
-                modes = new SparseIntArray();
-                packageModes.put(pkgName, modes);
-            }
-
-            modes.put(opCode, mode);
-        }
-    }
-
-    @GuardedBy("mLock")
     private void upgradeLocked(int oldVersion) {
         if (oldVersion == NO_FILE_VERSION || oldVersion >= CURRENT_VERSION) {
             return;
@@ -1217,4 +701,18 @@
 
         return result;
     }
-}
\ No newline at end of file
+
+    @Override
+    public boolean addAppOpsModeChangedListener(AppOpsModeChangedListener listener) {
+        synchronized (mLock) {
+            return mModeChangedListeners.add(listener);
+        }
+    }
+
+    @Override
+    public boolean removeAppOpsModeChangedListener(AppOpsModeChangedListener listener) {
+        synchronized (mLock) {
+            return mModeChangedListeners.remove(listener);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/appop/AppOpsCheckingServiceInterface.java b/services/core/java/com/android/server/appop/AppOpsCheckingServiceInterface.java
index 9096898..60d17cd 100644
--- a/services/core/java/com/android/server/appop/AppOpsCheckingServiceInterface.java
+++ b/services/core/java/com/android/server/appop/AppOpsCheckingServiceInterface.java
@@ -16,17 +16,13 @@
 package com.android.server.appop;
 
 import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.annotation.UserIdInt;
 import android.app.AppOpsManager.Mode;
-import android.util.ArraySet;
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
 
 import com.android.internal.annotations.VisibleForTesting;
 
-import java.io.PrintWriter;
-
 /**
  * Interface for accessing and modifying modes for app-ops i.e. package and uid modes.
  * This interface also includes functions for added and removing op mode watchers.
@@ -148,99 +144,60 @@
     void clearAllModes();
 
     /**
-     * Registers changedListener to listen to op's mode change.
-     * @param changedListener the listener that must be trigger on the op's mode change.
-     * @param op op representing the app-op whose mode change needs to be listened to.
+     * @param uid UID to query foreground ops for.
+     * @return SparseBooleanArray where the keys are the op codes for which their modes are
+     * MODE_FOREGROUND for the passed UID.
      */
-    void startWatchingOpModeChanged(@NonNull OnOpModeChangedListener changedListener, int op);
+    SparseBooleanArray getForegroundOps(int uid);
 
     /**
-     * Registers changedListener to listen to package's app-op's mode change.
-     * @param changedListener the listener that must be trigger on the mode change.
-     * @param packageName of the package whose app-op's mode change needs to be listened to.
+     *
+     * @param packageName Package name to check for.
+     * @param userId User ID to check for.
+     * @return SparseBooleanArray where the keys are the op codes for which their modes are
+     * MODE_FOREGROUND for the passed package name and user ID.
      */
-    void startWatchingPackageModeChanged(@NonNull OnOpModeChangedListener changedListener,
-            @NonNull String packageName);
+    SparseBooleanArray getForegroundOps(String packageName, int userId);
 
     /**
-     * Stop the changedListener from triggering on any mode change.
-     * @param changedListener the listener that needs to be removed.
+     * Adds a listener for changes in appop modes. These callbacks should be dispatched
+     * synchronously.
+     *
+     * @param listener The listener to be added.
+     * @return true if the listener was added.
      */
-    void removeListener(@NonNull OnOpModeChangedListener changedListener);
+    boolean addAppOpsModeChangedListener(@NonNull AppOpsModeChangedListener listener);
 
     /**
-     * Temporary API which will be removed once we can safely untangle the methods that use this.
-     * Returns a set of OnOpModeChangedListener that are listening for op's mode changes.
-     * @param op app-op whose mode change is being listened to.
+     * Removes a listener for changes in appop modes.
+     *
+     * @param listener The listener to be removed.
+     * @return true if the listener was removed.
      */
-    ArraySet<OnOpModeChangedListener> getOpModeChangedListeners(int op);
+    boolean removeAppOpsModeChangedListener(@NonNull AppOpsModeChangedListener listener);
 
     /**
-     * Temporary API which will be removed once we can safely untangle the methods that use this.
-     * Returns a set of OnOpModeChangedListener that are listening for package's op's mode changes.
-     * @param packageName of package whose app-op's mode change is being listened to.
+     * A listener for changes to the AppOps mode.
      */
-    ArraySet<OnOpModeChangedListener> getPackageModeChangedListeners(@NonNull String packageName);
+    interface AppOpsModeChangedListener {
 
-    /**
-     * Temporary API which will be removed once we can safely untangle the methods that use this.
-     * Notify that the app-op's mode is changed by triggering the change listener.
-     * @param op App-op whose mode has changed
-     * @param uid user id associated with the app-op (or, if UID_ANY, notifies all users)
-     */
-    void notifyWatchersOfChange(int op, int uid);
+        /**
+         * Invoked when a UID's appop mode is changed.
+         *
+         * @param uid The UID whose appop mode was changed.
+         * @param code The op code that was changed.
+         * @param mode The new mode.
+         */
+        void onUidModeChanged(int uid, int code, int mode);
 
-    /**
-     * Temporary API which will be removed once we can safely untangle the methods that use this.
-     * Notify that the app-op's mode is changed by triggering the change listener.
-     * @param changedListener the change listener.
-     * @param op App-op whose mode has changed
-     * @param uid user id associated with the app-op
-     * @param packageName package name that is associated with the app-op
-     */
-    void notifyOpChanged(@NonNull OnOpModeChangedListener changedListener, int op, int uid,
-            @Nullable String packageName);
-
-    /**
-     * Temporary API which will be removed once we can safely untangle the methods that use this.
-     * Notify that the app-op's mode is changed to all packages associated with the uid by
-     * triggering the appropriate change listener.
-     * @param op App-op whose mode has changed
-     * @param uid user id associated with the app-op
-     * @param onlyForeground true if only watchers that
-     * @param callbackToIgnore callback that should be ignored.
-     */
-    void notifyOpChangedForAllPkgsInUid(int op, int uid, boolean onlyForeground,
-            @Nullable OnOpModeChangedListener callbackToIgnore);
-
-    /**
-     * TODO: Move hasForegroundWatchers and foregroundOps into this.
-     * Go over the list of app-ops for the uid and mark app-ops with MODE_FOREGROUND in
-     * foregroundOps.
-     * @param uid for which the app-op's mode needs to be marked.
-     * @param foregroundOps boolean array where app-ops that have MODE_FOREGROUND are marked true.
-     * @return  foregroundOps.
-     */
-    SparseBooleanArray evalForegroundUidOps(int uid, SparseBooleanArray foregroundOps);
-
-    /**
-     * Go over the list of app-ops for the package name and mark app-ops with MODE_FOREGROUND in
-     * foregroundOps.
-     * @param packageName for which the app-op's mode needs to be marked.
-     * @param foregroundOps boolean array where app-ops that have MODE_FOREGROUND are marked true.
-     * @param userId user id associated with the package.
-     * @return foregroundOps.
-     */
-    SparseBooleanArray evalForegroundPackageOps(String packageName,
-            SparseBooleanArray foregroundOps, @UserIdInt int userId);
-
-    /**
-     * Dump op mode and package mode listeners and their details.
-     * @param dumpOp if -1 then op mode listeners for all app-ops are dumped. If it's set to an
-     *               app-op, only the watchers for that app-op are dumped.
-     * @param dumpUid uid for which we want to dump op mode watchers.
-     * @param dumpPackage if not null and if dumpOp is -1, dumps watchers for the package name.
-     * @param printWriter writer to dump to.
-     */
-    boolean dumpListeners(int dumpOp, int dumpUid, String dumpPackage, PrintWriter printWriter);
+        /**
+         * Invoked when a package's appop mode is changed.
+         *
+         * @param packageName The package name whose appop mode was changed.
+         * @param userId The user ID for the package.
+         * @param code The op code that was changed.
+         * @param mode The new mode.
+         */
+        void onPackageModeChanged(@NonNull String packageName, int userId, int code, int mode);
+    }
 }
diff --git a/services/core/java/com/android/server/appop/AppOpsCheckingServiceLoggingDecorator.java b/services/core/java/com/android/server/appop/AppOpsCheckingServiceLoggingDecorator.java
index 0094b86..3fee59b 100644
--- a/services/core/java/com/android/server/appop/AppOpsCheckingServiceLoggingDecorator.java
+++ b/services/core/java/com/android/server/appop/AppOpsCheckingServiceLoggingDecorator.java
@@ -17,14 +17,10 @@
 package com.android.server.appop;
 
 import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.util.ArraySet;
 import android.util.Log;
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
 
-import java.io.PrintWriter;
-
 /**
  * Logging decorator for {@link AppOpsCheckingServiceInterface}.
  */
@@ -134,83 +130,27 @@
     }
 
     @Override
-    public void startWatchingOpModeChanged(@NonNull OnOpModeChangedListener changedListener,
-            int op) {
-        Log.i(LOG_TAG, "startWatchingOpModeChanged(changedListener = " + changedListener + ", op = "
-                + op + ")");
-        mService.startWatchingOpModeChanged(changedListener, op);
+    public SparseBooleanArray getForegroundOps(int uid) {
+        Log.i(LOG_TAG, "getForegroundOps(uid = " + uid + ")");
+        return mService.getForegroundOps(uid);
     }
 
     @Override
-    public void startWatchingPackageModeChanged(@NonNull OnOpModeChangedListener changedListener,
-            @NonNull String packageName) {
-        Log.i(LOG_TAG, "startWatchingPackageModeChanged(changedListener = " + changedListener
-                + ", packageName = " + packageName + ")");
-        mService.startWatchingPackageModeChanged(changedListener, packageName);
-    }
-
-    @Override
-    public void removeListener(@NonNull OnOpModeChangedListener changedListener) {
-        Log.i(LOG_TAG, "removeListener(changedListener = " + changedListener + ")");
-        mService.removeListener(changedListener);
-    }
-
-    @Override
-    public ArraySet<OnOpModeChangedListener> getOpModeChangedListeners(int op) {
-        Log.i(LOG_TAG, "getOpModeChangedListeners(op = " + op + ")");
-        return mService.getOpModeChangedListeners(op);
-    }
-
-    @Override
-    public ArraySet<OnOpModeChangedListener> getPackageModeChangedListeners(
-            @NonNull String packageName) {
-        Log.i(LOG_TAG, "getPackageModeChangedListeners(packageName = " + packageName + ")");
-        return mService.getPackageModeChangedListeners(packageName);
-    }
-
-    @Override
-    public void notifyWatchersOfChange(int op, int uid) {
-        Log.i(LOG_TAG, "notifyWatchersOfChange(op = " + op + ", uid = " + uid + ")");
-        mService.notifyWatchersOfChange(op, uid);
-    }
-
-    @Override
-    public void notifyOpChanged(@NonNull OnOpModeChangedListener changedListener, int op, int uid,
-            @Nullable String packageName) {
-        Log.i(LOG_TAG, "notifyOpChanged(changedListener = " + changedListener + ", op = " + op
-                + ", uid = " + uid + ", packageName = " + packageName + ")");
-        mService.notifyOpChanged(changedListener, op, uid, packageName);
-    }
-
-    @Override
-    public void notifyOpChangedForAllPkgsInUid(int op, int uid, boolean onlyForeground,
-            @Nullable OnOpModeChangedListener callbackToIgnore) {
-        Log.i(LOG_TAG, "notifyOpChangedForAllPkgsInUid(op = " + op + ", uid = " + uid
-                + ", onlyForeground = " + onlyForeground + ", callbackToIgnore = "
-                + callbackToIgnore + ")");
-        mService.notifyOpChangedForAllPkgsInUid(op, uid, onlyForeground, callbackToIgnore);
-    }
-
-    @Override
-    public SparseBooleanArray evalForegroundUidOps(int uid, SparseBooleanArray foregroundOps) {
-        Log.i(LOG_TAG, "evalForegroundUidOps(uid = " + uid + ", foregroundOps = " + foregroundOps
+    public SparseBooleanArray getForegroundOps(String packageName, int userId) {
+        Log.i(LOG_TAG, "getForegroundOps(packageName = " + packageName + ", userId = " + userId
                 + ")");
-        return mService.evalForegroundUidOps(uid, foregroundOps);
+        return mService.getForegroundOps(packageName, userId);
     }
 
     @Override
-    public SparseBooleanArray evalForegroundPackageOps(String packageName,
-            SparseBooleanArray foregroundOps, int userId) {
-        Log.i(LOG_TAG, "evalForegroundPackageOps(packageName = " + packageName
-                + ", foregroundOps = " + foregroundOps + ", userId = " + userId + ")");
-        return mService.evalForegroundPackageOps(packageName, foregroundOps, userId);
+    public boolean addAppOpsModeChangedListener(AppOpsModeChangedListener listener) {
+        Log.i(LOG_TAG, "addAppOpsModeChangedListener(listener = " + listener + ")");
+        return mService.addAppOpsModeChangedListener(listener);
     }
 
     @Override
-    public boolean dumpListeners(int dumpOp, int dumpUid, String dumpPackage,
-            PrintWriter printWriter) {
-        Log.i(LOG_TAG, "dumpListeners(dumpOp = " + dumpOp + ", dumpUid = " + dumpUid
-                + ", dumpPackage = " + dumpPackage + ", printWriter = " + printWriter + ")");
-        return mService.dumpListeners(dumpOp, dumpUid, dumpPackage, printWriter);
+    public boolean removeAppOpsModeChangedListener(AppOpsModeChangedListener listener) {
+        Log.i(LOG_TAG, "removeAppOpsModeChangedListener(listener = " + listener + ")");
+        return mService.removeAppOpsModeChangedListener(listener);
     }
 }
diff --git a/services/core/java/com/android/server/appop/AppOpsCheckingServiceTracingDecorator.java b/services/core/java/com/android/server/appop/AppOpsCheckingServiceTracingDecorator.java
index a028ae1..c0cc8b1 100644
--- a/services/core/java/com/android/server/appop/AppOpsCheckingServiceTracingDecorator.java
+++ b/services/core/java/com/android/server/appop/AppOpsCheckingServiceTracingDecorator.java
@@ -17,16 +17,12 @@
 package com.android.server.appop;
 
 import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.annotation.UserIdInt;
 import android.app.AppOpsManager;
 import android.os.Trace;
-import android.util.ArraySet;
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
 
-import java.io.PrintWriter;
-
 /**
  * Surrounds all AppOpsCheckingServiceInterface method calls with Trace.traceBegin and
  * Trace.traceEnd. These traces are used for performance testing.
@@ -205,128 +201,44 @@
     }
 
     @Override
-    public void startWatchingOpModeChanged(@NonNull OnOpModeChangedListener changedListener,
-            int op) {
+    public SparseBooleanArray getForegroundOps(int uid) {
         Trace.traceBegin(TRACE_TAG,
-                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#startWatchingOpModeChanged");
+                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#getForegroundOps");
         try {
-            mService.startWatchingOpModeChanged(changedListener, op);
+            return mService.getForegroundOps(uid);
         } finally {
             Trace.traceEnd(TRACE_TAG);
         }
     }
 
     @Override
-    public void startWatchingPackageModeChanged(@NonNull OnOpModeChangedListener changedListener,
-            @NonNull String packageName) {
+    public SparseBooleanArray getForegroundOps(String packageName, int userId) {
         Trace.traceBegin(TRACE_TAG,
-                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#startWatchingPackageModeChanged");
+                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#getForegroundOps");
         try {
-            mService.startWatchingPackageModeChanged(changedListener, packageName);
+            return mService.getForegroundOps(packageName, userId);
         } finally {
             Trace.traceEnd(TRACE_TAG);
         }
     }
 
     @Override
-    public void removeListener(@NonNull OnOpModeChangedListener changedListener) {
+    public boolean addAppOpsModeChangedListener(AppOpsModeChangedListener listener) {
         Trace.traceBegin(TRACE_TAG,
-                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#removeListener");
+                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#addAppOpsModeChangedListener");
         try {
-            mService.removeListener(changedListener);
+            return mService.addAppOpsModeChangedListener(listener);
         } finally {
             Trace.traceEnd(TRACE_TAG);
         }
     }
 
     @Override
-    public ArraySet<OnOpModeChangedListener> getOpModeChangedListeners(int op) {
+    public boolean removeAppOpsModeChangedListener(AppOpsModeChangedListener listener) {
         Trace.traceBegin(TRACE_TAG,
-                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#getOpModeChangedListeners");
+                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#removeAppOpsModeChangedListener");
         try {
-            return mService.getOpModeChangedListeners(op);
-        } finally {
-            Trace.traceEnd(TRACE_TAG);
-        }
-    }
-
-    @Override
-    public ArraySet<OnOpModeChangedListener> getPackageModeChangedListeners(
-            @NonNull String packageName) {
-        Trace.traceBegin(TRACE_TAG,
-                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#getPackageModeChangedListeners");
-        try {
-            return mService.getPackageModeChangedListeners(packageName);
-        } finally {
-            Trace.traceEnd(TRACE_TAG);
-        }
-    }
-
-    @Override
-    public void notifyWatchersOfChange(int op, int uid) {
-        Trace.traceBegin(TRACE_TAG,
-                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#notifyWatchersOfChange");
-        try {
-            mService.notifyWatchersOfChange(op, uid);
-        } finally {
-            Trace.traceEnd(TRACE_TAG);
-        }
-    }
-
-    @Override
-    public void notifyOpChanged(@NonNull OnOpModeChangedListener changedListener, int op, int uid,
-            @Nullable String packageName) {
-        Trace.traceBegin(TRACE_TAG,
-                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#notifyOpChanged");
-        try {
-            mService.notifyOpChanged(changedListener, op, uid, packageName);
-        } finally {
-            Trace.traceEnd(TRACE_TAG);
-        }
-    }
-
-    @Override
-    public void notifyOpChangedForAllPkgsInUid(int op, int uid, boolean onlyForeground,
-            @Nullable OnOpModeChangedListener callbackToIgnore) {
-        Trace.traceBegin(TRACE_TAG,
-                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#notifyOpChangedForAllPkgsInUid");
-        try {
-            mService.notifyOpChangedForAllPkgsInUid(op, uid, onlyForeground, callbackToIgnore);
-        } finally {
-            Trace.traceEnd(TRACE_TAG);
-        }
-    }
-
-    @Override
-    public SparseBooleanArray evalForegroundUidOps(int uid, SparseBooleanArray foregroundOps) {
-        Trace.traceBegin(TRACE_TAG,
-                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#evalForegroundUidOps");
-        try {
-            return mService.evalForegroundUidOps(uid, foregroundOps);
-        } finally {
-            Trace.traceEnd(TRACE_TAG);
-        }
-    }
-
-    @Override
-    public SparseBooleanArray evalForegroundPackageOps(String packageName,
-            SparseBooleanArray foregroundOps, @UserIdInt int userId) {
-        Trace.traceBegin(TRACE_TAG,
-                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#evalForegroundPackageOps");
-        try {
-            return mService.evalForegroundPackageOps(packageName, foregroundOps, userId);
-        } finally {
-            Trace.traceEnd(TRACE_TAG);
-        }
-    }
-
-    @Override
-    public boolean dumpListeners(int dumpOp, int dumpUid, String dumpPackage,
-            PrintWriter printWriter) {
-        Trace.traceBegin(TRACE_TAG,
-                "TaggedTracingAppOpsCheckingServiceInterfaceImpl#dumpListeners");
-        try {
-            return mService.dumpListeners(dumpOp, dumpUid, dumpPackage, printWriter);
+            return mService.removeAppOpsModeChangedListener(listener);
         } finally {
             Trace.traceEnd(TRACE_TAG);
         }
diff --git a/services/core/java/com/android/server/appop/AppOpsRestrictions.java b/services/core/java/com/android/server/appop/AppOpsRestrictions.java
index f7ccd34..0241d02 100644
--- a/services/core/java/com/android/server/appop/AppOpsRestrictions.java
+++ b/services/core/java/com/android/server/appop/AppOpsRestrictions.java
@@ -144,4 +144,11 @@
      */
     void dumpRestrictions(PrintWriter printWriter, int dumpOp, String dumpPackage,
             boolean showUserRestrictions);
+
+    /**
+     * Listener for when an appop restriction is removed.
+     */
+    interface AppOpsRestrictionRemovedListener {
+        void onAppOpsRestrictionRemoved(int code);
+    }
 }
diff --git a/services/core/java/com/android/server/appop/AppOpsRestrictionsImpl.java b/services/core/java/com/android/server/appop/AppOpsRestrictionsImpl.java
index f51200f2..ae93991 100644
--- a/services/core/java/com/android/server/appop/AppOpsRestrictionsImpl.java
+++ b/services/core/java/com/android/server/appop/AppOpsRestrictionsImpl.java
@@ -42,7 +42,8 @@
 
     private Context mContext;
     private Handler mHandler;
-    private AppOpsCheckingServiceInterface mAppOpsCheckingServiceInterface;
+
+    private AppOpsRestrictionRemovedListener mAppOpsRestrictionRemovedListener;
 
     // Map from (Object token) to (int code) to (boolean restricted)
     private final ArrayMap<Object, SparseBooleanArray> mGlobalRestrictions = new ArrayMap<>();
@@ -56,10 +57,10 @@
             mUserRestrictionExcludedPackageTags = new ArrayMap<>();
 
     public AppOpsRestrictionsImpl(Context context, Handler handler,
-            AppOpsCheckingServiceInterface appOpsCheckingServiceInterface) {
+            AppOpsRestrictionRemovedListener appOpsRestrictionRemovedListener) {
         mContext = context;
         mHandler = handler;
-        mAppOpsCheckingServiceInterface = appOpsCheckingServiceInterface;
+        mAppOpsRestrictionRemovedListener = appOpsRestrictionRemovedListener;
     }
 
     @Override
@@ -211,15 +212,11 @@
         return allRestrictedCodes;
     }
 
-    // TODO: For clearUserRestrictions, we are calling notifyOpChanged from within the
-    //  LegacyAppOpsServiceInterfaceImpl class. But, for all other changes to restrictions, we're
-    //  calling it from within AppOpsService. This is awkward, and we should probably do it one
-    //  way or the other.
     private void notifyAllUserRestrictions(SparseBooleanArray allUserRestrictedCodes) {
         int restrictedCodesSize = allUserRestrictedCodes.size();
         for (int j = 0; j < restrictedCodesSize; j++) {
             int code = allUserRestrictedCodes.keyAt(j);
-            mHandler.post(() -> mAppOpsCheckingServiceInterface.notifyWatchersOfChange(code, UID_ANY));
+            mHandler.post(() -> mAppOpsRestrictionRemovedListener.onAppOpsRestrictionRemoved(code));
         }
     }
 
diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java
index a110169..4ee4c30 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -54,6 +54,7 @@
 import static android.app.AppOpsManager.SAMPLING_STRATEGY_UNIFORM;
 import static android.app.AppOpsManager.SAMPLING_STRATEGY_UNIFORM_OPS;
 import static android.app.AppOpsManager.SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE;
+import static android.app.AppOpsManager.WATCH_FOREGROUND_CHANGES;
 import static android.app.AppOpsManager._NUM_OP;
 import static android.app.AppOpsManager.extractFlagsFromKey;
 import static android.app.AppOpsManager.extractUidStateFromKey;
@@ -232,6 +233,15 @@
     private static final int MAX_UNUSED_POOLED_OBJECTS = 3;
     private static final int RARELY_USED_PACKAGES_INITIALIZATION_DELAY_MILLIS = 300000;
 
+    /* Temporary solution before Uidstate class is removed. These uids get their modes set. */
+    private static final int[] NON_PACKAGE_UIDS = new int[]{
+            Process.ROOT_UID,
+            Process.PHONE_UID,
+            Process.BLUETOOTH_UID,
+            Process.NFC_UID,
+            Process.NETWORK_STACK_UID,
+            Process.SHELL_UID};
+
     final Context mContext;
     final AtomicFile mStorageFile;
     final AtomicFile mRecentAccessesFile;
@@ -286,6 +296,11 @@
     private final ArrayMap<Pair<String, Integer>, ArrayList<AsyncNotedAppOp>>
             mUnforwardedAsyncNotedOps = new ArrayMap<>();
 
+    private final SparseArray<ArraySet<OnOpModeChangedListener>> mOpModeWatchers =
+            new SparseArray<>();
+    private final ArrayMap<String, ArraySet<OnOpModeChangedListener>> mPackageModeWatchers =
+            new ArrayMap<>();
+
     boolean mWriteNoteOpsScheduled;
 
     boolean mWriteScheduled;
@@ -309,6 +324,8 @@
     @GuardedBy("this")
     @VisibleForTesting
     final SparseArray<UidState> mUidStates = new SparseArray<>();
+    @GuardedBy("this")
+    private boolean mUidStatesInitialized;
 
     volatile @NonNull HistoricalRegistry mHistoricalRegistry = new HistoricalRegistry(this);
 
@@ -335,8 +352,6 @@
       */
     private final SparseArray<int[]> mSwitchedOps = new SparseArray<>();
 
-    private ActivityManagerInternal mActivityManagerInternal;
-
     /** Package sampled for message collection in the current session */
     @GuardedBy("this")
     private String mSampledPackage = null;
@@ -384,6 +399,10 @@
 
     private AppOpsUidStateTracker mUidStateTracker;
 
+    /** Callback to skip on next appop update.*/
+    @GuardedBy("this")
+    private IAppOpsCallback mIgnoredCallback = null;
+
     /** Hands the definition of foreground and uid states */
     @GuardedBy("this")
     public AppOpsUidStateTracker getUidStateTracker() {
@@ -499,11 +518,6 @@
         @NonNull
         public final ArrayMap<String, Ops> pkgOps = new ArrayMap<>();
 
-        // true indicates there is an interested observer, false there isn't but it has such an op
-        //TODO: Move foregroundOps and hasForegroundWatchers into the AppOpsServiceInterface.
-        public SparseBooleanArray foregroundOps;
-        public boolean hasForegroundWatchers;
-
         public UidState(int uid) {
             this.uid = uid;
         }
@@ -534,25 +548,6 @@
             return getUidStateTracker().evalMode(uid, op, mode);
         }
 
-        public void evalForegroundOps() {
-            foregroundOps = null;
-            foregroundOps = mAppOpsCheckingService.evalForegroundUidOps(uid, foregroundOps);
-            for (int i = pkgOps.size() - 1; i >= 0; i--) {
-                foregroundOps = mAppOpsCheckingService
-                        .evalForegroundPackageOps(pkgOps.valueAt(i).packageName, foregroundOps,
-                                UserHandle.getUserId(uid));
-            }
-            hasForegroundWatchers = false;
-            if (foregroundOps != null) {
-                for (int i = 0;  i < foregroundOps.size(); i++) {
-                    if (foregroundOps.valueAt(i)) {
-                        hasForegroundWatchers = true;
-                        break;
-                    }
-                }
-            }
-        }
-
         @SuppressWarnings("GuardedBy")
         public int getState() {
             return getUidStateTracker().getUidState(uid);
@@ -929,12 +924,33 @@
             mSwitchedOps.put(switchCode,
                     ArrayUtils.appendInt(mSwitchedOps.get(switchCode), switchedCode));
         }
-        mAppOpsCheckingService = new AppOpsCheckingServiceTracingDecorator(
-                new AppOpsCheckingServiceImpl(
-                        storageFile, this, handler, context,  mSwitchedOps));
-        //mAppOpsCheckingService = new AppOpsCheckingServiceLoggingDecorator(
-        //        LocalServices.getService(AppOpsCheckingServiceInterface.class));
-        mAppOpsRestrictions = new AppOpsRestrictionsImpl(context, handler, mAppOpsCheckingService);
+        if (PermissionManager.USE_ACCESS_CHECKING_SERVICE) {
+            mAppOpsCheckingService = new AppOpsCheckingServiceTracingDecorator(
+                    LocalServices.getService(AppOpsCheckingServiceInterface.class));
+        } else {
+            mAppOpsCheckingService = new AppOpsCheckingServiceTracingDecorator(
+                    new AppOpsCheckingServiceImpl(storageFile, this, handler, context,
+                            mSwitchedOps));
+        }
+        mAppOpsCheckingService.addAppOpsModeChangedListener(
+                new AppOpsCheckingServiceInterface.AppOpsModeChangedListener() {
+                    @Override
+                    public void onUidModeChanged(int uid, int code, int mode) {
+                        mHandler.sendMessage(PooledLambda.obtainMessage(
+                                AppOpsService::notifyOpChangedForAllPkgsInUid, AppOpsService.this,
+                                code, uid, false));
+                    }
+
+                    @Override
+                    public void onPackageModeChanged(String packageName, int userId, int code,
+                            int mode) {
+                        mHandler.sendMessage(PooledLambda.obtainMessage(
+                                AppOpsService::notifyOpChangedForPkg, AppOpsService.this,
+                                packageName, code, mode, userId));
+                    }
+                });
+        mAppOpsRestrictions = new AppOpsRestrictionsImpl(context, handler,
+                code -> notifyWatchersOfChange(code, UID_ANY));
 
         LockGuard.installLock(this, LockGuard.INDEX_APP_OPS);
         mStorageFile = new AtomicFile(storageFile, "appops_legacy");
@@ -1059,7 +1075,7 @@
                 UidState uidState = mUidStates.valueAt(uidNum);
 
                 String[] pkgsInUid = getPackagesForUid(uidState.uid);
-                if (ArrayUtils.isEmpty(pkgsInUid)) {
+                if (ArrayUtils.isEmpty(pkgsInUid) && uid >= Process.FIRST_APPLICATION_UID) {
                     uidState.clear();
                     mUidStates.removeAt(uidNum);
                     scheduleFastWriteLocked();
@@ -1088,6 +1104,64 @@
             }
         }
 
+        prepareInternalCallbacks();
+
+        final IntentFilter packageSuspendFilter = new IntentFilter();
+        packageSuspendFilter.addAction(Intent.ACTION_PACKAGES_UNSUSPENDED);
+        packageSuspendFilter.addAction(Intent.ACTION_PACKAGES_SUSPENDED);
+        mContext.registerReceiverAsUser(new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                final int[] changedUids = intent.getIntArrayExtra(Intent.EXTRA_CHANGED_UID_LIST);
+                final String[] changedPkgs = intent.getStringArrayExtra(
+                        Intent.EXTRA_CHANGED_PACKAGE_LIST);
+                for (int code : OPS_RESTRICTED_ON_SUSPEND) {
+                    ArraySet<OnOpModeChangedListener> onModeChangedListeners;
+                    synchronized (AppOpsService.this) {
+                        onModeChangedListeners = mOpModeWatchers.get(code);
+                        if (onModeChangedListeners == null) {
+                            continue;
+                        }
+                    }
+                    for (int i = 0; i < changedUids.length; i++) {
+                        final int changedUid = changedUids[i];
+                        final String changedPkg = changedPkgs[i];
+                        // We trust packagemanager to insert matching uid and packageNames in the
+                        // extras
+                        notifyOpChanged(onModeChangedListeners, code, changedUid, changedPkg);
+                    }
+                }
+            }
+        }, UserHandle.ALL, packageSuspendFilter, null, null);
+
+        mHandler.postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                List<String> packageNames = getPackageListAndResample();
+                initializeRarelyUsedPackagesList(new ArraySet<>(packageNames));
+            }
+        }, RARELY_USED_PACKAGES_INITIALIZATION_DELAY_MILLIS);
+
+        getPackageManagerInternal().setExternalSourcesPolicy(
+                new PackageManagerInternal.ExternalSourcesPolicy() {
+                    @Override
+                    public int getPackageTrustedToInstallApps(String packageName, int uid) {
+                        int appOpMode = checkOperation(AppOpsManager.OP_REQUEST_INSTALL_PACKAGES,
+                                uid, packageName);
+                        switch (appOpMode) {
+                            case AppOpsManager.MODE_ALLOWED:
+                                return PackageManagerInternal.ExternalSourcesPolicy.USER_TRUSTED;
+                            case AppOpsManager.MODE_ERRORED:
+                                return PackageManagerInternal.ExternalSourcesPolicy.USER_BLOCKED;
+                            default:
+                                return PackageManagerInternal.ExternalSourcesPolicy.USER_DEFAULT;
+                        }
+                    }
+                });
+    }
+
+    @VisibleForTesting
+    void prepareInternalCallbacks() {
         getUserManagerInternal().addUserLifecycleListener(
                 new UserManagerInternal.UserLifecycleListener() {
                     @Override
@@ -1133,62 +1207,6 @@
                         }
                     }
                 });
-
-        final IntentFilter packageSuspendFilter = new IntentFilter();
-        packageSuspendFilter.addAction(Intent.ACTION_PACKAGES_UNSUSPENDED);
-        packageSuspendFilter.addAction(Intent.ACTION_PACKAGES_SUSPENDED);
-        mContext.registerReceiverAsUser(new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                final int[] changedUids = intent.getIntArrayExtra(Intent.EXTRA_CHANGED_UID_LIST);
-                final String[] changedPkgs = intent.getStringArrayExtra(
-                        Intent.EXTRA_CHANGED_PACKAGE_LIST);
-                for (int code : OPS_RESTRICTED_ON_SUSPEND) {
-                    ArraySet<OnOpModeChangedListener> onModeChangedListeners;
-                    synchronized (AppOpsService.this) {
-                        onModeChangedListeners =
-                                mAppOpsCheckingService.getOpModeChangedListeners(code);
-                        if (onModeChangedListeners == null) {
-                            continue;
-                        }
-                    }
-                    for (int i = 0; i < changedUids.length; i++) {
-                        final int changedUid = changedUids[i];
-                        final String changedPkg = changedPkgs[i];
-                        // We trust packagemanager to insert matching uid and packageNames in the
-                        // extras
-                        notifyOpChanged(onModeChangedListeners, code, changedUid, changedPkg);
-                    }
-                }
-            }
-        }, UserHandle.ALL, packageSuspendFilter, null, null);
-
-        mHandler.postDelayed(new Runnable() {
-            @Override
-            public void run() {
-                List<String> packageNames = getPackageListAndResample();
-                initializeRarelyUsedPackagesList(new ArraySet<>(packageNames));
-            }
-        }, RARELY_USED_PACKAGES_INITIALIZATION_DELAY_MILLIS);
-
-        getPackageManagerInternal().setExternalSourcesPolicy(
-                new PackageManagerInternal.ExternalSourcesPolicy() {
-                    @Override
-                    public int getPackageTrustedToInstallApps(String packageName, int uid) {
-                        int appOpMode = checkOperation(AppOpsManager.OP_REQUEST_INSTALL_PACKAGES,
-                                uid, packageName);
-                        switch (appOpMode) {
-                            case AppOpsManager.MODE_ALLOWED:
-                                return PackageManagerInternal.ExternalSourcesPolicy.USER_TRUSTED;
-                            case AppOpsManager.MODE_ERRORED:
-                                return PackageManagerInternal.ExternalSourcesPolicy.USER_BLOCKED;
-                            default:
-                                return PackageManagerInternal.ExternalSourcesPolicy.USER_DEFAULT;
-                        }
-                    }
-                });
-
-        mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class);
     }
 
     /**
@@ -1207,6 +1225,11 @@
                     initializeUserUidStatesLocked(userId, packageStates);
                 }
             }
+
+            for (int uid : NON_PACKAGE_UIDS) {
+                mUidStates.put(uid, new UidState(uid));
+            }
+            mUidStatesInitialized = true;
         }
     }
 
@@ -1250,8 +1273,6 @@
                 ops.put(code, new Op(uidState, packageName, code, uid));
             }
         }
-
-        uidState.evalForegroundOps();
     }
 
     /**
@@ -1325,23 +1346,51 @@
     // The callback method from AppOpsUidStateTracker
     private void onUidStateChanged(int uid, int state, boolean foregroundModeMayChange) {
         synchronized (this) {
-            UidState uidState = getUidStateLocked(uid, true);
+            UidState uidState = getUidStateLocked(uid, false);
 
-            if (uidState != null && foregroundModeMayChange && uidState.hasForegroundWatchers) {
-                for (int fgi = uidState.foregroundOps.size() - 1; fgi >= 0; fgi--) {
-                    if (!uidState.foregroundOps.valueAt(fgi)) {
+            boolean hasForegroundWatchers = false;
+
+            for (int i = 0; i < mModeWatchers.size(); i++) {
+                ModeCallback cb = mModeWatchers.valueAt(i);
+                if (cb.isWatchingUid(uid) && (cb.getFlags() & WATCH_FOREGROUND_CHANGES) != 0) {
+                    hasForegroundWatchers = true;
+                    break;
+                }
+            }
+
+            if (uidState != null && foregroundModeMayChange && hasForegroundWatchers) {
+
+                SparseBooleanArray foregroundOps = new SparseBooleanArray();
+
+                SparseBooleanArray uidForegroundOps = mAppOpsCheckingService.getForegroundOps(uid);
+                for (int i = 0; i < uidForegroundOps.size(); i++) {
+                    foregroundOps.put(uidForegroundOps.keyAt(i), true);
+                }
+                String[] uidPackageNames = getPackagesForUid(uid);
+
+                int userId = UserHandle.getUserId(uid);
+                for (String packageName : uidPackageNames) {
+                    SparseBooleanArray packageForegroundOps =
+                            mAppOpsCheckingService.getForegroundOps(packageName, userId);
+                    for (int i = 0; i < packageForegroundOps.size(); i++) {
+                        foregroundOps.put(packageForegroundOps.keyAt(i), true);
+                    }
+                }
+
+                for (int fgi = foregroundOps.size() - 1; fgi >= 0; fgi--) {
+                    if (!foregroundOps.valueAt(fgi)) {
                         continue;
                     }
-                    final int code = uidState.foregroundOps.keyAt(fgi);
+                    final int code = foregroundOps.keyAt(fgi);
 
                     if (uidState.getUidMode(code) != AppOpsManager.opToDefaultMode(code)
                             && uidState.getUidMode(code) == AppOpsManager.MODE_FOREGROUND) {
                         mHandler.sendMessage(PooledLambda.obtainMessage(
                                 AppOpsService::notifyOpChangedForAllPkgsInUid,
-                                this, code, uidState.uid, true, null));
+                                this, code, uidState.uid, true));
                     } else if (!uidState.pkgOps.isEmpty()) {
                         final ArraySet<OnOpModeChangedListener> listenerSet =
-                                mAppOpsCheckingService.getOpModeChangedListeners(code);
+                                mOpModeWatchers.get(code);
                         if (listenerSet != null) {
                             for (int cbi = listenerSet.size() - 1; cbi >= 0; cbi--) {
                                 final OnOpModeChangedListener listener = listenerSet.valueAt(cbi);
@@ -1398,12 +1447,6 @@
             @ActivityManager.ProcessCapability int capability) {
         synchronized (this) {
             getUidStateTracker().updateUidProcState(uid, procState, capability);
-            if (!mUidStates.contains(uid)) {
-                UidState uidState = new UidState(uid);
-                mUidStates.put(uid, uidState);
-                onUidStateChanged(uid,
-                        AppOpsUidStateTracker.processStateToUidState(procState), false);
-            }
         }
     }
 
@@ -1538,7 +1581,7 @@
                 return null;
             }
             ArrayList<AppOpsManager.OpEntry> resOps = collectOps(pkgOps, ops);
-            if (resOps == null) {
+            if (resOps == null || resOps.size() == 0) {
                 return null;
             }
             ArrayList<AppOpsManager.PackageOps> res = new ArrayList<AppOpsManager.PackageOps>();
@@ -1795,6 +1838,12 @@
                 if (mode == defaultMode) {
                     return;
                 }
+                if (uid >= Process.FIRST_APPLICATION_UID) {
+                    // TODO change to a throw; no crashing for now.
+                    Slog.e(TAG, "Trying to set mode for unknown uid " + uid + ".");
+                }
+                // I suppose we'll support setting these uids. Shouldn't matter later when UidState
+                // is removed.
                 uidState = new UidState(uid);
                 mUidStates.put(uid, uidState);
             }
@@ -1805,17 +1854,16 @@
                 previousMode = MODE_DEFAULT;
             }
 
+            mIgnoredCallback = permissionPolicyCallback;
             if (!uidState.setUidMode(code, mode)) {
                 return;
             }
-            uidState.evalForegroundOps();
             if (mode != MODE_ERRORED && mode != previousMode) {
                 updateStartedOpModeForUidLocked(code, mode == MODE_IGNORED, uid);
             }
         }
 
-        notifyOpChangedForAllPkgsInUid(code, uid, false, permissionPolicyCallback);
-        notifyOpChangedSync(code, uid, null, mode, previousMode);
+        notifyStorageManagerOpModeChangedSync(code, uid, null, mode, previousMode);
     }
 
     /**
@@ -1825,12 +1873,128 @@
      * @param uid The uid the op was changed for
      * @param onlyForeground Only notify watchers that watch for foreground changes
      */
-    private void notifyOpChangedForAllPkgsInUid(int code, int uid, boolean onlyForeground,
-            @Nullable IAppOpsCallback callbackToIgnore) {
-        ModeCallback listenerToIgnore = callbackToIgnore != null
-                ? mModeWatchers.get(callbackToIgnore.asBinder()) : null;
-        mAppOpsCheckingService.notifyOpChangedForAllPkgsInUid(code, uid, onlyForeground,
-                listenerToIgnore);
+    private void notifyOpChangedForAllPkgsInUid(int code, int uid, boolean onlyForeground) {
+        String[] uidPackageNames = getPackagesForUid(uid);
+        ArrayMap<OnOpModeChangedListener, ArraySet<String>> callbackSpecs = null;
+        synchronized (this) {
+            ArraySet<OnOpModeChangedListener> callbacks = mOpModeWatchers.get(code);
+            if (callbacks != null) {
+                final int callbackCount = callbacks.size();
+                for (int i = 0; i < callbackCount; i++) {
+                    OnOpModeChangedListener callback = callbacks.valueAt(i);
+
+                    if (!callback.isWatchingUid(uid)) {
+                        continue;
+                    }
+
+                    if (onlyForeground && (callback.getFlags()
+                            & WATCH_FOREGROUND_CHANGES) == 0) {
+                        continue;
+                    }
+
+                    ArraySet<String> changedPackages = new ArraySet<>();
+                    Collections.addAll(changedPackages, uidPackageNames);
+                    if (callbackSpecs == null) {
+                        callbackSpecs = new ArrayMap<>();
+                    }
+                    callbackSpecs.put(callback, changedPackages);
+                }
+            }
+
+            for (String uidPackageName : uidPackageNames) {
+                callbacks = mPackageModeWatchers.get(uidPackageName);
+                if (callbacks != null) {
+                    if (callbackSpecs == null) {
+                        callbackSpecs = new ArrayMap<>();
+                    }
+                    final int callbackCount = callbacks.size();
+                    for (int i = 0; i < callbackCount; i++) {
+                        OnOpModeChangedListener callback = callbacks.valueAt(i);
+
+                        if (onlyForeground && (callback.getFlags()
+                                & WATCH_FOREGROUND_CHANGES) == 0) {
+                            continue;
+                        }
+
+                        ArraySet<String> changedPackages = callbackSpecs.get(callback);
+                        if (changedPackages == null) {
+                            changedPackages = new ArraySet<>();
+                            callbackSpecs.put(callback, changedPackages);
+                        }
+                        changedPackages.add(uidPackageName);
+                    }
+                }
+            }
+
+            if (callbackSpecs != null && mIgnoredCallback != null) {
+                callbackSpecs.remove(mModeWatchers.get(mIgnoredCallback.asBinder()));
+            }
+        }
+
+        if (callbackSpecs == null) {
+            return;
+        }
+
+        for (int i = 0; i < callbackSpecs.size(); i++) {
+            final OnOpModeChangedListener callback = callbackSpecs.keyAt(i);
+            final ArraySet<String> reportedPackageNames = callbackSpecs.valueAt(i);
+            if (reportedPackageNames == null) {
+                mHandler.sendMessage(PooledLambda.obtainMessage(
+                        AppOpsService::notifyOpChanged,
+                        this, callback, code, uid, (String) null));
+
+            } else {
+                final int reportedPackageCount = reportedPackageNames.size();
+                for (int j = 0; j < reportedPackageCount; j++) {
+                    final String reportedPackageName = reportedPackageNames.valueAt(j);
+                    mHandler.sendMessage(PooledLambda.obtainMessage(
+                            AppOpsService::notifyOpChanged,
+                            this, callback, code, uid, reportedPackageName));
+                }
+            }
+        }
+    }
+
+    private void notifyOpChangedForPkg(@NonNull String packageName, int code, int mode,
+            @UserIdInt int userId) {
+        ArraySet<OnOpModeChangedListener> repCbs = null;
+        int uid = -1;
+        synchronized (AppOpsService.this) {
+            ArraySet<OnOpModeChangedListener> cbs = mOpModeWatchers.get(code);
+            if (cbs != null) {
+                if (repCbs == null) {
+                    repCbs = new ArraySet<>();
+                }
+                repCbs.addAll(cbs);
+            }
+            cbs = mPackageModeWatchers.get(packageName);
+            if (cbs != null) {
+                if (repCbs == null) {
+                    repCbs = new ArraySet<>();
+                }
+                repCbs.addAll(cbs);
+            }
+            if (repCbs != null && mIgnoredCallback != null) {
+                repCbs.remove(mModeWatchers.get(mIgnoredCallback.asBinder()));
+            }
+            uid = getPackageManagerInternal().getPackageUid(packageName,
+                    PackageManager.MATCH_KNOWN_PACKAGES, userId);
+            Op op = getOpLocked(code, uid, packageName, null, false, null, /* edit */ false);
+            if (op != null && mode == AppOpsManager.opToDefaultMode(op.op)) {
+                // If going into the default mode, prune this op
+                // if there is nothing else interesting in it.
+                pruneOpLocked(op, uid, packageName);
+            }
+            scheduleFastWriteLocked();
+            if (mode != MODE_ERRORED) {
+                updateStartedOpModeForUidLocked(code, mode == MODE_IGNORED, uid);
+            }
+        }
+
+        if (repCbs != null && uid != -1) {
+            mHandler.sendMessage(PooledLambda.obtainMessage(AppOpsService::notifyOpChanged, this,
+                    repCbs, code, uid, packageName));
+        }
     }
 
     private void updatePermissionRevokedCompat(int uid, int switchCode, int mode) {
@@ -1924,8 +2088,8 @@
         }
     }
 
-    private void notifyOpChangedSync(int code, int uid, @NonNull String packageName, int mode,
-            int previousMode) {
+    private void notifyStorageManagerOpModeChangedSync(int code, int uid,
+            @NonNull String packageName, int mode, int previousMode) {
         final StorageManagerInternal storageManagerInternal =
                 LocalServices.getService(StorageManagerInternal.class);
         if (storageManagerInternal != null) {
@@ -1954,70 +2118,29 @@
             return;
         }
 
-        ArraySet<OnOpModeChangedListener> repCbs = null;
         code = AppOpsManager.opToSwitch(code);
 
         PackageVerificationResult pvr;
         try {
             pvr = verifyAndGetBypass(uid, packageName, null);
         } catch (SecurityException e) {
-            if (Process.isIsolated(uid)) {
-                Slog.e(TAG, "Cannot setMode: isolated process");
-            } else {
-                Slog.e(TAG, "Cannot setMode", e);
-            }
+            logVerifyAndGetBypassFailure(uid, e, "setMode");
             return;
         }
 
         int previousMode = MODE_DEFAULT;
         synchronized (this) {
-            UidState uidState = getUidStateLocked(uid, false);
             Op op = getOpLocked(code, uid, packageName, null, false, pvr.bypass, /* edit */ true);
             if (op != null) {
                 if (op.getMode() != mode) {
                     previousMode = op.getMode();
+                    mIgnoredCallback = permissionPolicyCallback;
                     op.setMode(mode);
-
-                    if (uidState != null) {
-                        uidState.evalForegroundOps();
-                    }
-                    ArraySet<OnOpModeChangedListener> cbs =
-                            mAppOpsCheckingService.getOpModeChangedListeners(code);
-                    if (cbs != null) {
-                        if (repCbs == null) {
-                            repCbs = new ArraySet<>();
-                        }
-                        repCbs.addAll(cbs);
-                    }
-                    cbs = mAppOpsCheckingService.getPackageModeChangedListeners(packageName);
-                    if (cbs != null) {
-                        if (repCbs == null) {
-                            repCbs = new ArraySet<>();
-                        }
-                        repCbs.addAll(cbs);
-                    }
-                    if (repCbs != null && permissionPolicyCallback != null) {
-                        repCbs.remove(mModeWatchers.get(permissionPolicyCallback.asBinder()));
-                    }
-                    if (mode == AppOpsManager.opToDefaultMode(op.op)) {
-                        // If going into the default mode, prune this op
-                        // if there is nothing else interesting in it.
-                        pruneOpLocked(op, uid, packageName);
-                    }
-                    scheduleFastWriteLocked();
-                    if (mode != MODE_ERRORED) {
-                        updateStartedOpModeForUidLocked(code, mode == MODE_IGNORED, uid);
-                    }
                 }
             }
         }
-        if (repCbs != null) {
-            mHandler.sendMessage(PooledLambda.obtainMessage(
-                    AppOpsService::notifyOpChanged,
-                    this, repCbs, code, uid, packageName));
-        }
 
-        notifyOpChangedSync(code, uid, packageName, mode, previousMode);
+        notifyStorageManagerOpModeChangedSync(code, uid, packageName, mode, previousMode);
     }
 
     private void notifyOpChanged(ArraySet<OnOpModeChangedListener> callbacks, int code,
@@ -2028,9 +2151,42 @@
         }
     }
 
-    private void notifyOpChanged(OnOpModeChangedListener callback, int code,
+    private void notifyOpChanged(OnOpModeChangedListener onModeChangedListener, int code,
             int uid, String packageName) {
-        mAppOpsCheckingService.notifyOpChanged(callback, code, uid, packageName);
+        Objects.requireNonNull(onModeChangedListener);
+
+        if (uid != UID_ANY && onModeChangedListener.getWatchingUid() >= 0
+                && onModeChangedListener.getWatchingUid() != uid) {
+            return;
+        }
+
+        // See CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE
+        int[] switchedCodes;
+        if (onModeChangedListener.getWatchedOpCode() == ALL_OPS) {
+            switchedCodes = mSwitchedOps.get(code);
+        } else if (onModeChangedListener.getWatchedOpCode() == OP_NONE) {
+            switchedCodes = new int[]{code};
+        } else {
+            switchedCodes = new int[]{onModeChangedListener.getWatchedOpCode()};
+        }
+
+        for (int switchedCode : switchedCodes) {
+            // There are features watching for mode changes such as window manager
+            // and location manager which are in our process. The callbacks in these
+            // features may require permissions our remote caller does not have.
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                if (shouldIgnoreCallback(switchedCode, onModeChangedListener.getCallingPid(),
+                        onModeChangedListener.getCallingUid())) {
+                    continue;
+                }
+                onModeChangedListener.onOpModeChanged(switchedCode, uid, packageName);
+            } catch (RemoteException e) {
+                /* ignore */
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
     }
 
     private static ArrayList<ChangeRec> addChange(ArrayList<ChangeRec> reports,
@@ -2129,11 +2285,9 @@
                             uidState.setUidMode(code, newMode);
                             for (String packageName : getPackagesForUid(uidState.uid)) {
                                 callbacks = addCallbacks(callbacks, code, uidState.uid, packageName,
-                                        previousMode,
-                                        mAppOpsCheckingService.getOpModeChangedListeners(code));
+                                        previousMode, mOpModeWatchers.get(code));
                                 callbacks = addCallbacks(callbacks, code, uidState.uid, packageName,
-                                        previousMode, mAppOpsCheckingService
-                                                .getPackageModeChangedListeners(packageName));
+                                        previousMode, mPackageModeWatchers.get(packageName));
 
                                 allChanges = addChange(allChanges, code, uidState.uid,
                                         packageName, previousMode);
@@ -2182,11 +2336,9 @@
                             uidChanged = true;
                             final int uid = curOp.uidState.uid;
                             callbacks = addCallbacks(callbacks, curOp.op, uid, packageName,
-                                    previousMode,
-                                    mAppOpsCheckingService.getOpModeChangedListeners(curOp.op));
+                                    previousMode, mOpModeWatchers.get(curOp.op));
                             callbacks = addCallbacks(callbacks, curOp.op, uid, packageName,
-                                    previousMode, mAppOpsCheckingService
-                                            .getPackageModeChangedListeners(packageName));
+                                    previousMode, mPackageModeWatchers.get(packageName));
 
                             allChanges = addChange(allChanges, curOp.op, uid, packageName,
                                     previousMode);
@@ -2202,9 +2354,6 @@
                                 UserHandle.getUserId(uidState.uid));
                     }
                 }
-                if (uidChanged) {
-                    uidState.evalForegroundOps();
-                }
             }
 
             if (changed) {
@@ -2228,7 +2377,7 @@
         int numChanges = allChanges.size();
         for (int i = 0; i < numChanges; i++) {
             ChangeRec change = allChanges.get(i);
-            notifyOpChangedSync(change.op, change.uid, change.pkg,
+            notifyStorageManagerOpModeChangedSync(change.op, change.uid, change.pkg,
                     AppOpsManager.opToDefaultMode(change.op), change.previous_mode);
         }
     }
@@ -2281,15 +2430,6 @@
         dpmi.resetOp(op, packageName, userId);
     }
 
-    private void evalAllForegroundOpsLocked() {
-        for (int uidi = mUidStates.size() - 1; uidi >= 0; uidi--) {
-            final UidState uidState = mUidStates.valueAt(uidi);
-            if (uidState.foregroundOps != null) {
-                uidState.evalForegroundOps();
-            }
-        }
-    }
-
     @Override
     public void startWatchingMode(int op, String packageName, IAppOpsCallback callback) {
         startWatchingModeWithFlags(op, packageName, 0, callback);
@@ -2333,12 +2473,21 @@
                 mModeWatchers.put(callback.asBinder(), cb);
             }
             if (switchOp != AppOpsManager.OP_NONE) {
-                mAppOpsCheckingService.startWatchingOpModeChanged(cb, switchOp);
+                ArraySet<OnOpModeChangedListener> cbs = mOpModeWatchers.get(switchOp);
+                if (cbs == null) {
+                    cbs = new ArraySet<>();
+                    mOpModeWatchers.put(switchOp, cbs);
+                }
+                cbs.add(cb);
             }
             if (mayWatchPackageName) {
-                mAppOpsCheckingService.startWatchingPackageModeChanged(cb, packageName);
+                ArraySet<OnOpModeChangedListener> cbs = mPackageModeWatchers.get(packageName);
+                if (cbs == null) {
+                    cbs = new ArraySet<>();
+                    mPackageModeWatchers.put(packageName, cbs);
+                }
+                cbs.add(cb);
             }
-            evalAllForegroundOpsLocked();
         }
     }
 
@@ -2351,10 +2500,21 @@
             ModeCallback cb = mModeWatchers.remove(callback.asBinder());
             if (cb != null) {
                 cb.unlinkToDeath();
-                mAppOpsCheckingService.removeListener(cb);
+                for (int i = mOpModeWatchers.size() - 1; i >= 0; i--) {
+                    ArraySet<OnOpModeChangedListener> cbs = mOpModeWatchers.valueAt(i);
+                    cbs.remove(cb);
+                    if (cbs.size() <= 0) {
+                        mOpModeWatchers.removeAt(i);
+                    }
+                }
+                for (int i = mPackageModeWatchers.size() - 1; i >= 0; i--) {
+                    ArraySet<OnOpModeChangedListener> cbs = mPackageModeWatchers.valueAt(i);
+                    cbs.remove(cb);
+                    if (cbs.size() <= 0) {
+                        mPackageModeWatchers.removeAt(i);
+                    }
+                }
             }
-
-            evalAllForegroundOpsLocked();
         }
     }
 
@@ -2416,11 +2576,7 @@
         try {
             pvr = verifyAndGetBypass(uid, packageName, null);
         } catch (SecurityException e) {
-            if (Process.isIsolated(uid)) {
-                Slog.e(TAG, "Cannot checkOperation: isolated process");
-            } else {
-                Slog.e(TAG, "Cannot checkOperation", e);
-            }
+            logVerifyAndGetBypassFailure(uid, e, "checkOperation");
             return AppOpsManager.opToDefaultMode(code);
         }
 
@@ -2632,11 +2788,7 @@
                 attributionTag = null;
             }
         } catch (SecurityException e) {
-            if (Process.isIsolated(uid)) {
-                Slog.e(TAG, "Cannot noteOperation: isolated process");
-            } else {
-                Slog.e(TAG, "Cannot noteOperation", e);
-            }
+            logVerifyAndGetBypassFailure(uid, e, "noteOperation");
             return new SyncNotedAppOp(AppOpsManager.MODE_ERRORED, code, attributionTag,
                     packageName);
         }
@@ -3055,7 +3207,7 @@
         return startOperationUnchecked(clientId, code, uid, packageName, attributionTag,
                 Process.INVALID_UID, null, null, OP_FLAG_SELF, startIfModeDefault,
                 shouldCollectAsyncNotedOp, message, shouldCollectMessage, attributionFlags,
-                attributionChainId, /*dryRun*/ false);
+                attributionChainId);
     }
 
     @Override
@@ -3123,11 +3275,10 @@
 
         if (!skipProxyOperation) {
             // Test if the proxied operation will succeed before starting the proxy operation
-            final SyncNotedAppOp testProxiedOp = startOperationUnchecked(clientId, code,
-                    proxiedUid, resolvedProxiedPackageName, proxiedAttributionTag, proxyUid,
-                    resolvedProxyPackageName, proxyAttributionTag, proxiedFlags, startIfModeDefault,
-                    shouldCollectAsyncNotedOp, message, shouldCollectMessage,
-                    proxiedAttributionFlags, attributionChainId, /*dryRun*/ true);
+            final SyncNotedAppOp testProxiedOp = startOperationDryRun(code,
+                    proxiedUid, resolvedProxiedPackageName, proxiedAttributionTag,
+                    resolvedProxyPackageName, proxiedFlags, startIfModeDefault);
+
             if (!shouldStartForMode(testProxiedOp.getOpMode(), startIfModeDefault)) {
                 return testProxiedOp;
             }
@@ -3138,8 +3289,7 @@
             final SyncNotedAppOp proxyAppOp = startOperationUnchecked(clientId, code, proxyUid,
                     resolvedProxyPackageName, proxyAttributionTag, Process.INVALID_UID, null, null,
                     proxyFlags, startIfModeDefault, !isProxyTrusted, "proxy " + message,
-                    shouldCollectMessage, proxyAttributionFlags, attributionChainId,
-                    /*dryRun*/ false);
+                    shouldCollectMessage, proxyAttributionFlags, attributionChainId);
             if (!shouldStartForMode(proxyAppOp.getOpMode(), startIfModeDefault)) {
                 return proxyAppOp;
             }
@@ -3148,8 +3298,7 @@
         return startOperationUnchecked(clientId, code, proxiedUid, resolvedProxiedPackageName,
                 proxiedAttributionTag, proxyUid, resolvedProxyPackageName, proxyAttributionTag,
                 proxiedFlags, startIfModeDefault, shouldCollectAsyncNotedOp, message,
-                shouldCollectMessage, proxiedAttributionFlags, attributionChainId,
-                /*dryRun*/ false);
+                shouldCollectMessage, proxiedAttributionFlags, attributionChainId);
     }
 
     private boolean shouldStartForMode(int mode, boolean startIfModeDefault) {
@@ -3161,7 +3310,7 @@
             String proxyPackageName, @Nullable String proxyAttributionTag, @OpFlags int flags,
             boolean startIfModeDefault, boolean shouldCollectAsyncNotedOp, @Nullable String message,
             boolean shouldCollectMessage, @AttributionFlags int attributionFlags,
-            int attributionChainId, boolean dryRun) {
+            int attributionChainId) {
         PackageVerificationResult pvr;
         try {
             pvr = verifyAndGetBypass(uid, packageName, attributionTag, proxyPackageName);
@@ -3169,11 +3318,7 @@
                 attributionTag = null;
             }
         } catch (SecurityException e) {
-            if (Process.isIsolated(uid)) {
-                Slog.e(TAG, "Cannot startOperation: isolated process");
-            } else {
-                Slog.e(TAG, "Cannot startOperation", e);
-            }
+            logVerifyAndGetBypassFailure(uid, e, "startOperation");
             return new SyncNotedAppOp(AppOpsManager.MODE_ERRORED, code, attributionTag,
                     packageName);
         }
@@ -3184,11 +3329,9 @@
             final Ops ops = getOpsLocked(uid, packageName, attributionTag,
                     pvr.isAttributionTagValid, pvr.bypass, /* edit */ true);
             if (ops == null) {
-                if (!dryRun) {
-                    scheduleOpStartedIfNeededLocked(code, uid, packageName, attributionTag,
-                            flags, AppOpsManager.MODE_IGNORED, startType, attributionFlags,
-                            attributionChainId);
-                }
+                scheduleOpStartedIfNeededLocked(code, uid, packageName, attributionTag,
+                        flags, AppOpsManager.MODE_IGNORED, startType, attributionFlags,
+                        attributionChainId);
                 if (DEBUG) Slog.d(TAG, "startOperation: no op for code " + code + " uid " + uid
                         + " package " + packageName + " flags: "
                         + AppOpsManager.flagsToString(flags));
@@ -3211,11 +3354,9 @@
                                 + switchCode + " (" + code + ") uid " + uid + " package "
                                 + packageName + " flags: " + AppOpsManager.flagsToString(flags));
                     }
-                    if (!dryRun) {
-                        attributedOp.rejected(uidState.getState(), flags);
-                        scheduleOpStartedIfNeededLocked(code, uid, packageName, attributionTag,
-                                flags, uidMode, startType, attributionFlags, attributionChainId);
-                    }
+                    attributedOp.rejected(uidState.getState(), flags);
+                    scheduleOpStartedIfNeededLocked(code, uid, packageName, attributionTag,
+                            flags, uidMode, startType, attributionFlags, attributionChainId);
                     return new SyncNotedAppOp(uidMode, code, attributionTag, packageName);
                 }
             } else {
@@ -3227,39 +3368,35 @@
                     if (DEBUG) Slog.d(TAG, "startOperation: reject #" + mode + " for code "
                             + switchCode + " (" + code + ") uid " + uid + " package "
                             + packageName + " flags: " + AppOpsManager.flagsToString(flags));
-                    if (!dryRun) {
-                        attributedOp.rejected(uidState.getState(), flags);
-                        scheduleOpStartedIfNeededLocked(code, uid, packageName, attributionTag,
-                                flags, mode, startType, attributionFlags, attributionChainId);
-                    }
+                    attributedOp.rejected(uidState.getState(), flags);
+                    scheduleOpStartedIfNeededLocked(code, uid, packageName, attributionTag,
+                            flags, mode, startType, attributionFlags, attributionChainId);
                     return new SyncNotedAppOp(mode, code, attributionTag, packageName);
                 }
             }
             if (DEBUG) Slog.d(TAG, "startOperation: allowing code " + code + " uid " + uid
                     + " package " + packageName + " restricted: " + isRestricted
                     + " flags: " + AppOpsManager.flagsToString(flags));
-            if (!dryRun) {
-                try {
-                    if (isRestricted) {
-                        attributedOp.createPaused(clientId, proxyUid, proxyPackageName,
-                                proxyAttributionTag, uidState.getState(), flags,
-                                attributionFlags, attributionChainId);
-                    } else {
-                        attributedOp.started(clientId, proxyUid, proxyPackageName,
-                                proxyAttributionTag, uidState.getState(), flags,
-                                attributionFlags, attributionChainId);
-                        startType = START_TYPE_STARTED;
-                    }
-                } catch (RemoteException e) {
-                    throw new RuntimeException(e);
+            try {
+                if (isRestricted) {
+                    attributedOp.createPaused(clientId, proxyUid, proxyPackageName,
+                            proxyAttributionTag, uidState.getState(), flags,
+                            attributionFlags, attributionChainId);
+                } else {
+                    attributedOp.started(clientId, proxyUid, proxyPackageName,
+                            proxyAttributionTag, uidState.getState(), flags,
+                            attributionFlags, attributionChainId);
+                    startType = START_TYPE_STARTED;
                 }
-                scheduleOpStartedIfNeededLocked(code, uid, packageName, attributionTag, flags,
-                        isRestricted ? MODE_IGNORED : MODE_ALLOWED, startType, attributionFlags,
-                        attributionChainId);
+            } catch (RemoteException e) {
+                throw new RuntimeException(e);
             }
+            scheduleOpStartedIfNeededLocked(code, uid, packageName, attributionTag, flags,
+                    isRestricted ? MODE_IGNORED : MODE_ALLOWED, startType, attributionFlags,
+                    attributionChainId);
         }
 
-        if (shouldCollectAsyncNotedOp && !dryRun && !isRestricted) {
+        if (shouldCollectAsyncNotedOp && !isRestricted) {
             collectAsyncNotedOp(uid, packageName, code, attributionTag, AppOpsManager.OP_FLAG_SELF,
                     message, shouldCollectMessage);
         }
@@ -3268,6 +3405,88 @@
                 packageName);
     }
 
+    /**
+     * Performs a dry run of the start operation i.e. determines the result of the start operation
+     * without actually updating the op state to be started.
+     *
+     * <p>This is used for proxy operations; before starting the op as the proxy, we must check that
+     * the proxied app can successfully start the operation.
+     */
+    private SyncNotedAppOp startOperationDryRun(int code, int uid,
+            @NonNull String packageName, @Nullable String attributionTag,
+            String proxyPackageName, @OpFlags int flags,
+            boolean startIfModeDefault) {
+        PackageVerificationResult pvr;
+        try {
+            pvr = verifyAndGetBypass(uid, packageName, attributionTag, proxyPackageName);
+            if (!pvr.isAttributionTagValid) {
+                attributionTag = null;
+            }
+        } catch (SecurityException e) {
+            if (Process.isIsolated(uid)) {
+                Slog.e(TAG, "Cannot startOperation: isolated process");
+            } else {
+                Slog.e(TAG, "Cannot startOperation", e);
+            }
+            return new SyncNotedAppOp(AppOpsManager.MODE_ERRORED, code, attributionTag,
+                    packageName);
+        }
+
+        boolean isRestricted = false;
+        synchronized (this) {
+            final Ops ops = getOpsLocked(uid, packageName, attributionTag,
+                    pvr.isAttributionTagValid, pvr.bypass, /* edit */ true);
+            if (ops == null) {
+                if (DEBUG) {
+                    Slog.d(TAG, "startOperation: no op for code " + code + " uid " + uid
+                            + " package " + packageName + " flags: "
+                            + AppOpsManager.flagsToString(flags));
+                }
+                return new SyncNotedAppOp(AppOpsManager.MODE_ERRORED, code, attributionTag,
+                        packageName);
+            }
+            final Op op = getOpLocked(ops, code, uid, true);
+            final UidState uidState = ops.uidState;
+            isRestricted = isOpRestrictedLocked(uid, code, packageName, attributionTag, pvr.bypass,
+                    false);
+            final int switchCode = AppOpsManager.opToSwitch(code);
+            // If there is a non-default mode per UID policy (we set UID op mode only if
+            // non-default) it takes over, otherwise use the per package policy.
+            if (uidState.getUidMode(switchCode) != AppOpsManager.opToDefaultMode(switchCode)) {
+                final int uidMode = uidState.evalMode(code, uidState.getUidMode(switchCode));
+                if (!shouldStartForMode(uidMode, startIfModeDefault)) {
+                    if (DEBUG) {
+                        Slog.d(TAG, "startOperation: uid reject #" + uidMode + " for code "
+                                + switchCode + " (" + code + ") uid " + uid + " package "
+                                + packageName + " flags: " + AppOpsManager.flagsToString(flags));
+                    }
+                    return new SyncNotedAppOp(uidMode, code, attributionTag, packageName);
+                }
+            } else {
+                final Op switchOp = switchCode != code ? getOpLocked(ops, switchCode, uid, true)
+                        : op;
+                final int mode = switchOp.uidState.evalMode(switchOp.op, switchOp.getMode());
+                if (mode != AppOpsManager.MODE_ALLOWED
+                        && (!startIfModeDefault || mode != MODE_DEFAULT)) {
+                    if (DEBUG) {
+                        Slog.d(TAG, "startOperation: reject #" + mode + " for code "
+                                + switchCode + " (" + code + ") uid " + uid + " package "
+                                + packageName + " flags: " + AppOpsManager.flagsToString(flags));
+                    }
+                    return new SyncNotedAppOp(mode, code, attributionTag, packageName);
+                }
+            }
+            if (DEBUG) {
+                Slog.d(TAG, "startOperation: allowing code " + code + " uid " + uid
+                        + " package " + packageName + " restricted: " + isRestricted
+                        + " flags: " + AppOpsManager.flagsToString(flags));
+            }
+        }
+
+        return new SyncNotedAppOp(isRestricted ? MODE_IGNORED : MODE_ALLOWED, code, attributionTag,
+                packageName);
+    }
+
     @Override
     public void finishOperation(IBinder clientId, int code, int uid, String packageName,
             String attributionTag) {
@@ -3349,11 +3568,7 @@
                 attributionTag = null;
             }
         } catch (SecurityException e) {
-            if (Process.isIsolated(uid)) {
-                Slog.e(TAG, "Cannot finishOperation: isolated process");
-            } else {
-                Slog.e(TAG, "Cannot finishOperation", e);
-            }
+            logVerifyAndGetBypassFailure(uid, e, "finishOperation");
             return;
         }
 
@@ -3719,7 +3934,7 @@
     /**
      * Create a restriction description matching the properties of the package.
      *
-     * @param pkg The package to create the restriction description for
+     * @param packageState The package to create the restriction description for
      *
      * @return The restriction matching the package
      */
@@ -3909,6 +4124,17 @@
         return false;
     }
 
+    private void logVerifyAndGetBypassFailure(int uid, @NonNull SecurityException e,
+            @NonNull String methodName) {
+        if (Process.isIsolated(uid)) {
+            Slog.e(TAG, "Cannot " + methodName + ": isolated UID");
+        } else if (UserHandle.getAppId(uid) < Process.FIRST_APPLICATION_UID) {
+            Slog.e(TAG, "Cannot " + methodName + ": non-application UID " + uid);
+        } else {
+            Slog.e(TAG, "Cannot " + methodName, e);
+        }
+    }
+
     /**
      * Get (and potentially create) ops.
      *
@@ -3923,7 +4149,7 @@
      */
     private Ops getOpsLocked(int uid, String packageName, @Nullable String attributionTag,
             boolean isAttributionTagValid, @Nullable RestrictionBypass bypass, boolean edit) {
-        UidState uidState = getUidStateLocked(uid, edit);
+        UidState uidState = getUidStateLocked(uid, false);
         if (uidState == null) {
             return null;
         }
@@ -5149,8 +5375,55 @@
                 pw.println();
             }
 
-            if (!dumpHistory) {
-                needSep |= mAppOpsCheckingService.dumpListeners(dumpOp, dumpUid, dumpPackage, pw);
+            if (mOpModeWatchers.size() > 0 && !dumpHistory) {
+                boolean printedHeader = false;
+                for (int i = 0; i < mOpModeWatchers.size(); i++) {
+                    if (dumpOp >= 0 && dumpOp != mOpModeWatchers.keyAt(i)) {
+                        continue;
+                    }
+                    boolean printedOpHeader = false;
+                    ArraySet<OnOpModeChangedListener> callbacks = mOpModeWatchers.valueAt(i);
+                    for (int j = 0; j < callbacks.size(); j++) {
+                        final OnOpModeChangedListener cb = callbacks.valueAt(j);
+                        if (dumpPackage != null
+                                && dumpUid != UserHandle.getAppId(cb.getWatchingUid())) {
+                            continue;
+                        }
+                        needSep = true;
+                        if (!printedHeader) {
+                            pw.println("  Op mode watchers:");
+                            printedHeader = true;
+                        }
+                        if (!printedOpHeader) {
+                            pw.print("    Op ");
+                            pw.print(AppOpsManager.opToName(mOpModeWatchers.keyAt(i)));
+                            pw.println(":");
+                            printedOpHeader = true;
+                        }
+                        pw.print("      #"); pw.print(j); pw.print(": ");
+                        pw.println(cb);
+                    }
+                }
+            }
+            if (mPackageModeWatchers.size() > 0 && dumpOp < 0 && !dumpHistory) {
+                boolean printedHeader = false;
+                for (int i = 0; i < mPackageModeWatchers.size(); i++) {
+                    if (dumpPackage != null && !dumpPackage.equals(mPackageModeWatchers.keyAt(i))) {
+                        continue;
+                    }
+                    needSep = true;
+                    if (!printedHeader) {
+                        pw.println("  Package mode watchers:");
+                        printedHeader = true;
+                    }
+                    pw.print("    Pkg "); pw.print(mPackageModeWatchers.keyAt(i));
+                    pw.println(":");
+                    ArraySet<OnOpModeChangedListener> callbacks = mPackageModeWatchers.valueAt(i);
+                    for (int j = 0; j < callbacks.size(); j++) {
+                        pw.print("      #"); pw.print(j); pw.print(": ");
+                        pw.println(callbacks.valueAt(j));
+                    }
+                }
             }
 
             if (mModeWatchers.size() > 0 && dumpOp < 0 && !dumpHistory) {
@@ -5350,11 +5623,6 @@
                             }
                         }
                     }
-                    if (uidState.foregroundOps != null && !hasOp) {
-                        if (uidState.foregroundOps.indexOfKey(dumpOp) > 0) {
-                            hasOp = true;
-                        }
-                    }
                     if (!hasOp || !hasPackage || !hasMode) {
                         continue;
                     }
@@ -5362,21 +5630,6 @@
 
                 pw.print("  Uid "); UserHandle.formatUid(pw, uidState.uid); pw.println(":");
                 uidState.dump(pw, nowElapsed);
-                if (uidState.foregroundOps != null && (dumpMode < 0
-                        || dumpMode == AppOpsManager.MODE_FOREGROUND)) {
-                    pw.println("    foregroundOps:");
-                    for (int j = 0; j < uidState.foregroundOps.size(); j++) {
-                        if (dumpOp >= 0 && dumpOp != uidState.foregroundOps.keyAt(j)) {
-                            continue;
-                        }
-                        pw.print("      ");
-                        pw.print(AppOpsManager.opToName(uidState.foregroundOps.keyAt(j)));
-                        pw.print(": ");
-                        pw.println(uidState.foregroundOps.valueAt(j) ? "WATCHER" : "SILENT");
-                    }
-                    pw.print("    hasForegroundWatchers=");
-                    pw.println(uidState.hasForegroundWatchers);
-                }
                 needSep = true;
 
                 if (opModes != null) {
@@ -5578,7 +5831,7 @@
     private void notifyWatchersOfChange(int code, int uid) {
         final ArraySet<OnOpModeChangedListener> modeChangedListenerSet;
         synchronized (this) {
-            modeChangedListenerSet = mAppOpsCheckingService.getOpModeChangedListeners(code);
+            modeChangedListenerSet = mOpModeWatchers.get(code);
             if (modeChangedListenerSet == null) {
                 return;
             }
@@ -5665,10 +5918,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_APPOPS)
     @Override
     public void resetPackageOpsNoHistory(@NonNull String packageName) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_APPOPS,
-                "resetPackageOpsNoHistory");
+        resetPackageOpsNoHistory_enforcePermission();
         synchronized (AppOpsService.this) {
             final int uid = mPackageManagerInternal.getPackageUid(packageName, 0,
                     UserHandle.getCallingUserId());
@@ -5687,52 +5940,52 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_APPOPS)
     @Override
     public void setHistoryParameters(@AppOpsManager.HistoricalMode int mode,
             long baseSnapshotInterval, int compressionStep) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_APPOPS,
-                "setHistoryParameters");
+        setHistoryParameters_enforcePermission();
         // Must not hold the appops lock
         mHistoricalRegistry.setHistoryParameters(mode, baseSnapshotInterval, compressionStep);
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_APPOPS)
     @Override
     public void offsetHistory(long offsetMillis) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_APPOPS,
-                "offsetHistory");
+        offsetHistory_enforcePermission();
         // Must not hold the appops lock
         mHistoricalRegistry.offsetHistory(offsetMillis);
         mHistoricalRegistry.offsetDiscreteHistory(offsetMillis);
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_APPOPS)
     @Override
     public void addHistoricalOps(HistoricalOps ops) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_APPOPS,
-                "addHistoricalOps");
+        addHistoricalOps_enforcePermission();
         // Must not hold the appops lock
         mHistoricalRegistry.addHistoricalOps(ops);
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_APPOPS)
     @Override
     public void resetHistoryParameters() {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_APPOPS,
-                "resetHistoryParameters");
+        resetHistoryParameters_enforcePermission();
         // Must not hold the appops lock
         mHistoricalRegistry.resetHistoryParameters();
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_APPOPS)
     @Override
     public void clearHistory() {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_APPOPS,
-                "clearHistory");
+        clearHistory_enforcePermission();
         // Must not hold the appops lock
         mHistoricalRegistry.clearAllHistory();
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_APPOPS)
     @Override
     public void rebootHistory(long offlineDurationMillis) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_APPOPS,
-                "rebootHistory");
+        rebootHistory_enforcePermission();
 
         Preconditions.checkArgument(offlineDurationMillis >= 0);
 
diff --git a/services/core/java/com/android/server/appop/AppOpsServiceTestingShim.java b/services/core/java/com/android/server/appop/AppOpsServiceTestingShim.java
new file mode 100644
index 0000000..de73a55
--- /dev/null
+++ b/services/core/java/com/android/server/appop/AppOpsServiceTestingShim.java
@@ -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.server.appop;
+
+import android.util.SparseBooleanArray;
+import android.util.SparseIntArray;
+
+import java.util.Objects;
+
+/**
+ * A testing shim, which supports running two variants of an AppOpsServiceInterface at once,
+ * and checking the results of both.
+ */
+public class AppOpsServiceTestingShim implements AppOpsCheckingServiceInterface {
+
+    private AppOpsCheckingServiceInterface mOldImplementation;
+    private AppOpsCheckingServiceInterface mNewImplementation;
+
+    public AppOpsServiceTestingShim(AppOpsCheckingServiceInterface oldValImpl,
+            AppOpsCheckingServiceInterface newImpl) {
+        mOldImplementation = oldValImpl;
+        mNewImplementation = newImpl;
+    }
+
+    private void signalImplDifference(String message) {
+        //TODO b/252886104 implement
+    }
+
+    @Override
+    public void writeState() {
+        mOldImplementation.writeState();
+        mNewImplementation.writeState();
+    }
+
+    @Override
+    public void readState() {
+        mOldImplementation.readState();
+        mNewImplementation.readState();
+    }
+
+    @Override
+    public void shutdown() {
+        mOldImplementation.shutdown();
+        mNewImplementation.shutdown();
+    }
+
+    @Override
+    public void systemReady() {
+        mOldImplementation.systemReady();
+        mNewImplementation.systemReady();
+    }
+
+    @Override
+    public SparseIntArray getNonDefaultUidModes(int uid) {
+        SparseIntArray oldVal = mOldImplementation.getNonDefaultUidModes(uid);
+        SparseIntArray newVal = mNewImplementation.getNonDefaultUidModes(uid);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getNonDefaultUidModes");
+        }
+
+        return newVal;
+    }
+
+    @Override
+    public SparseIntArray getNonDefaultPackageModes(String packageName, int userId) {
+        SparseIntArray oldVal = mOldImplementation.getNonDefaultPackageModes(packageName, userId);
+        SparseIntArray newVal = mNewImplementation.getNonDefaultPackageModes(packageName, userId);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getNonDefaultPackageModes");
+        }
+
+        return newVal;
+    }
+
+    @Override
+    public int getUidMode(int uid, int op) {
+        int oldVal = mOldImplementation.getUidMode(uid, op);
+        int newVal = mNewImplementation.getUidMode(uid, op);
+
+        if (oldVal != newVal) {
+            signalImplDifference("getUidMode");
+        }
+
+        return newVal;
+    }
+
+    @Override
+    public boolean setUidMode(int uid, int op, int mode) {
+        boolean oldVal = mOldImplementation.setUidMode(uid, op, mode);
+        boolean newVal = mNewImplementation.setUidMode(uid, op, mode);
+
+        if (oldVal != newVal) {
+            signalImplDifference("setUidMode");
+        }
+
+        return newVal;
+    }
+
+    @Override
+    public int getPackageMode(String packageName, int op, int userId) {
+        int oldVal = mOldImplementation.getPackageMode(packageName, op, userId);
+        int newVal = mNewImplementation.getPackageMode(packageName, op, userId);
+
+        if (oldVal != newVal) {
+            signalImplDifference("getPackageMode");
+        }
+
+        return newVal;
+    }
+
+    @Override
+    public void setPackageMode(String packageName, int op, int mode, int userId) {
+        mOldImplementation.setPackageMode(packageName, op, mode, userId);
+        mNewImplementation.setPackageMode(packageName, op, mode, userId);
+    }
+
+    @Override
+    public boolean removePackage(String packageName, int userId) {
+        boolean oldVal = mOldImplementation.removePackage(packageName, userId);
+        boolean newVal = mNewImplementation.removePackage(packageName, userId);
+
+        if (oldVal != newVal) {
+            signalImplDifference("removePackage");
+        }
+
+        return newVal;
+    }
+
+    @Override
+    public void removeUid(int uid) {
+        mOldImplementation.removeUid(uid);
+        mNewImplementation.removeUid(uid);
+    }
+
+    @Override
+    public boolean areUidModesDefault(int uid) {
+        boolean oldVal = mOldImplementation.areUidModesDefault(uid);
+        boolean newVal = mNewImplementation.areUidModesDefault(uid);
+
+        if (oldVal != newVal) {
+            signalImplDifference("areUidModesDefault");
+        }
+
+        return newVal;
+    }
+
+    @Override
+    public boolean arePackageModesDefault(String packageName, int userId) {
+        boolean oldVal = mOldImplementation.arePackageModesDefault(packageName, userId);
+        boolean newVal = mNewImplementation.arePackageModesDefault(packageName, userId);
+
+        if (oldVal != newVal) {
+            signalImplDifference("arePackageModesDefault");
+        }
+
+        return newVal;
+    }
+
+    @Override
+    public void clearAllModes() {
+        mOldImplementation.clearAllModes();
+        mNewImplementation.clearAllModes();
+    }
+
+    @Override
+    public SparseBooleanArray getForegroundOps(int uid) {
+        SparseBooleanArray oldVal = mOldImplementation.getForegroundOps(uid);
+        SparseBooleanArray newVal = mNewImplementation.getForegroundOps(uid);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getForegroundOps");
+        }
+
+        return newVal;
+    }
+
+    @Override
+    public SparseBooleanArray getForegroundOps(String packageName, int userId) {
+        SparseBooleanArray oldVal = mOldImplementation.getForegroundOps(packageName, userId);
+        SparseBooleanArray newVal = mNewImplementation.getForegroundOps(packageName, userId);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getForegroundOps");
+        }
+
+        return newVal;
+    }
+
+    @Override
+    public boolean addAppOpsModeChangedListener(AppOpsModeChangedListener listener) {
+        boolean oldVal = mOldImplementation.addAppOpsModeChangedListener(listener);
+        boolean newVal = mNewImplementation.addAppOpsModeChangedListener(listener);
+
+        if (oldVal != newVal) {
+            signalImplDifference("addAppOpsModeChangedListener");
+        }
+
+        return newVal;
+    }
+
+    @Override
+    public boolean removeAppOpsModeChangedListener(AppOpsModeChangedListener listener) {
+        boolean oldVal = mOldImplementation.removeAppOpsModeChangedListener(listener);
+        boolean newVal = mNewImplementation.removeAppOpsModeChangedListener(listener);
+
+        if (oldVal != newVal) {
+            signalImplDifference("removeAppOpsModeChangedListener");
+        }
+
+        return newVal;
+    }
+}
diff --git a/services/core/java/com/android/server/appop/DiscreteRegistry.java b/services/core/java/com/android/server/appop/DiscreteRegistry.java
index 10243e2..e91b7e8 100644
--- a/services/core/java/com/android/server/appop/DiscreteRegistry.java
+++ b/services/core/java/com/android/server/appop/DiscreteRegistry.java
@@ -35,6 +35,7 @@
 import static android.app.AppOpsManager.OP_PHONE_CALL_CAMERA;
 import static android.app.AppOpsManager.OP_PHONE_CALL_MICROPHONE;
 import static android.app.AppOpsManager.OP_RECEIVE_AMBIENT_TRIGGER_AUDIO;
+import static android.app.AppOpsManager.OP_RECEIVE_SANDBOX_TRIGGER_AUDIO;
 import static android.app.AppOpsManager.OP_RECORD_AUDIO;
 import static android.app.AppOpsManager.flagsToString;
 import static android.app.AppOpsManager.getUidStateName;
@@ -134,7 +135,8 @@
     private static final String PROPERTY_DISCRETE_OPS_LIST = "discrete_history_ops_cslist";
     private static final String DEFAULT_DISCRETE_OPS = OP_FINE_LOCATION + "," + OP_COARSE_LOCATION
             + "," + OP_CAMERA + "," + OP_RECORD_AUDIO + "," + OP_PHONE_CALL_MICROPHONE + ","
-            + OP_PHONE_CALL_CAMERA + "," + OP_RECEIVE_AMBIENT_TRIGGER_AUDIO;
+            + OP_PHONE_CALL_CAMERA + "," + OP_RECEIVE_AMBIENT_TRIGGER_AUDIO + ","
+            + OP_RECEIVE_SANDBOX_TRIGGER_AUDIO;
     private static final long DEFAULT_DISCRETE_HISTORY_CUTOFF = Duration.ofDays(7).toMillis();
     private static final long MAXIMUM_DISCRETE_HISTORY_CUTOFF = Duration.ofDays(30).toMillis();
     private static final long DEFAULT_DISCRETE_HISTORY_QUANTIZATION =
diff --git a/services/core/java/com/android/server/appop/LegacyAppOpStateParser.java b/services/core/java/com/android/server/appop/LegacyAppOpStateParser.java
new file mode 100644
index 0000000..a6d5050
--- /dev/null
+++ b/services/core/java/com/android/server/appop/LegacyAppOpStateParser.java
@@ -0,0 +1,255 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.appop;
+
+import static android.app.AppOpsManager.opToDefaultMode;
+
+import android.annotation.NonNull;
+import android.app.AppOpsManager;
+import android.os.UserHandle;
+import android.util.ArrayMap;
+import android.util.AtomicFile;
+import android.util.Slog;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+import android.util.Xml;
+
+import com.android.internal.util.XmlUtils;
+import com.android.modules.utils.TypedXmlPullParser;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+class LegacyAppOpStateParser {
+    static final String TAG = LegacyAppOpStateParser.class.getSimpleName();
+
+    private static final int NO_FILE_VERSION = -2;
+    private static final int NO_VERSION = -1;
+
+    /**
+     * Reads legacy app-ops data into given maps.
+     */
+    public int readState(AtomicFile file, SparseArray<SparseIntArray> uidModes,
+            SparseArray<ArrayMap<String, SparseIntArray>> userPackageModes) {
+        FileInputStream stream;
+        try {
+            stream = file.openRead();
+        } catch (FileNotFoundException e) {
+            Slog.i(TAG, "No existing app ops " + file.getBaseFile() + "; starting empty");
+            return NO_FILE_VERSION;
+        }
+
+        try {
+            TypedXmlPullParser parser = Xml.resolvePullParser(stream);
+            int type;
+            while ((type = parser.next()) != XmlPullParser.START_TAG
+                    && type != XmlPullParser.END_DOCUMENT) {
+                // Parse next until we reach the start or end
+            }
+
+            if (type != XmlPullParser.START_TAG) {
+                throw new IllegalStateException("no start tag found");
+            }
+
+            int versionAtBoot = parser.getAttributeInt(null, "v", NO_VERSION);
+
+            int outerDepth = parser.getDepth();
+            while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                    && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+                if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                    continue;
+                }
+
+                String tagName = parser.getName();
+                if (tagName.equals("pkg")) {
+                    // version 2 has the structure pkg -> uid -> op ->
+                    // in version 3, since pkg and uid states are kept completely
+                    // independent we switch to user -> pkg -> op
+                    readPackage(parser, userPackageModes);
+                } else if (tagName.equals("uid")) {
+                    readUidOps(parser, uidModes);
+                } else if (tagName.equals("user")) {
+                    readUser(parser, userPackageModes);
+                } else {
+                    Slog.w(TAG, "Unknown element under <app-ops>: "
+                            + parser.getName());
+                    XmlUtils.skipCurrentTag(parser);
+                }
+            }
+            return versionAtBoot;
+        } catch (XmlPullParserException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private void readPackage(TypedXmlPullParser parser,
+            SparseArray<ArrayMap<String, SparseIntArray>> userPackageModes)
+            throws NumberFormatException, XmlPullParserException, IOException {
+        String pkgName = parser.getAttributeValue(null, "n");
+        int outerDepth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            }
+
+            String tagName = parser.getName();
+            if (tagName.equals("uid")) {
+                readPackageUid(parser, pkgName, userPackageModes);
+            } else {
+                Slog.w(TAG, "Unknown element under <pkg>: "
+                        + parser.getName());
+                XmlUtils.skipCurrentTag(parser);
+            }
+        }
+    }
+
+    private void readPackageUid(TypedXmlPullParser parser, String pkgName,
+            SparseArray<ArrayMap<String, SparseIntArray>> userPackageModes)
+            throws NumberFormatException, XmlPullParserException, IOException {
+        int userId = UserHandle.getUserId(parser.getAttributeInt(null, "n"));
+        int outerDepth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            }
+
+            String tagName = parser.getName();
+            if (tagName.equals("op")) {
+                readOp(parser, userId, pkgName, userPackageModes);
+            } else {
+                Slog.w(TAG, "Unknown element under <pkg>: "
+                        + parser.getName());
+                XmlUtils.skipCurrentTag(parser);
+            }
+        }
+    }
+
+    private void readUidOps(TypedXmlPullParser parser, SparseArray<SparseIntArray> uidModes)
+            throws NumberFormatException,
+            XmlPullParserException, IOException {
+        final int uid = parser.getAttributeInt(null, "n");
+        SparseIntArray modes = uidModes.get(uid);
+        if (modes == null) {
+            modes = new SparseIntArray();
+            uidModes.put(uid, modes);
+        }
+
+        int outerDepth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            }
+
+            String tagName = parser.getName();
+            if (tagName.equals("op")) {
+                final int code = parser.getAttributeInt(null, "n");
+                final int mode = parser.getAttributeInt(null, "m");
+
+                if (mode != opToDefaultMode(code)) {
+                    modes.put(code, mode);
+                }
+            } else {
+                Slog.w(TAG, "Unknown element under <uid>: "
+                        + parser.getName());
+                XmlUtils.skipCurrentTag(parser);
+            }
+        }
+    }
+
+    private void readUser(TypedXmlPullParser parser,
+            SparseArray<ArrayMap<String, SparseIntArray>> userPackageModes)
+            throws NumberFormatException, XmlPullParserException, IOException {
+        int userId = parser.getAttributeInt(null, "n");
+        int outerDepth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            }
+
+            String tagName = parser.getName();
+            if (tagName.equals("pkg")) {
+                readPackageOp(parser, userId, userPackageModes);
+            } else {
+                Slog.w(TAG, "Unknown element under <user>: "
+                        + parser.getName());
+                XmlUtils.skipCurrentTag(parser);
+            }
+        }
+    }
+
+    // read package tag refactored in Android U
+    private void readPackageOp(TypedXmlPullParser parser, int userId,
+            SparseArray<ArrayMap<String, SparseIntArray>> userPackageModes)
+            throws NumberFormatException, XmlPullParserException, IOException {
+        String pkgName = parser.getAttributeValue(null, "n");
+        int outerDepth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            }
+
+            String tagName = parser.getName();
+            if (tagName.equals("op")) {
+                readOp(parser, userId, pkgName, userPackageModes);
+            } else {
+                Slog.w(TAG, "Unknown element under <pkg>: "
+                        + parser.getName());
+                XmlUtils.skipCurrentTag(parser);
+            }
+        }
+    }
+
+    private void readOp(TypedXmlPullParser parser, int userId, @NonNull String pkgName,
+            SparseArray<ArrayMap<String, SparseIntArray>> userPackageModes)
+            throws NumberFormatException, XmlPullParserException {
+        final int opCode = parser.getAttributeInt(null, "n");
+        final int defaultMode = AppOpsManager.opToDefaultMode(opCode);
+        final int mode = parser.getAttributeInt(null, "m", defaultMode);
+
+        if (mode != defaultMode) {
+            ArrayMap<String, SparseIntArray> packageModes = userPackageModes.get(userId);
+            if (packageModes == null) {
+                packageModes = new ArrayMap<>();
+                userPackageModes.put(userId, packageModes);
+            }
+
+            SparseIntArray modes = packageModes.get(pkgName);
+            if (modes == null) {
+                modes = new SparseIntArray();
+                packageModes.put(pkgName, modes);
+            }
+
+            modes.put(opCode, mode);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/appop/OWNERS b/services/core/java/com/android/server/appop/OWNERS
index 999ea0e..2fe78c5 100644
--- a/services/core/java/com/android/server/appop/OWNERS
+++ b/services/core/java/com/android/server/appop/OWNERS
@@ -1 +1,2 @@
+#Bug component: 137825
 include /core/java/android/permission/OWNERS
diff --git a/services/core/java/com/android/server/appop/TEST_MAPPING b/services/core/java/com/android/server/appop/TEST_MAPPING
index 72d3835..68062b5 100644
--- a/services/core/java/com/android/server/appop/TEST_MAPPING
+++ b/services/core/java/com/android/server/appop/TEST_MAPPING
@@ -1,7 +1,12 @@
 {
     "presubmit": [
         {
-            "name": "CtsAppOpsTestCases"
+            "name": "CtsAppOpsTestCases",
+            "options": [
+                {
+                  "exclude-annotation": "android.platform.test.annotations.FlakyTest"
+                }
+            ]
         },
         {
             "name": "CtsAppOps2TestCases"
@@ -26,6 +31,9 @@
             "name": "CtsPermissionTestCases",
             "options": [
                 {
+                    "exclude-annotation": "android.platform.test.annotations.FlakyTest"
+                },
+                {
                     "include-filter": "android.permission.cts.BackgroundPermissionsTest"
                 },
                 {
@@ -55,5 +63,27 @@
                 }
             ]
         }        
+    ],
+    "postsubmit": [
+        {
+            "name": "CtsAppOpsTestCases"
+        },
+        {
+            "name": "CtsPermissionTestCases",
+            "options": [
+                {
+                    "include-filter": "android.permission.cts.BackgroundPermissionsTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.SplitPermissionTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.PermissionFlagsTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.SharedUidPermissionsTest"
+                }
+            ]
+        }
     ]
 }
diff --git a/services/core/java/com/android/server/attention/AttentionManagerService.java b/services/core/java/com/android/server/attention/AttentionManagerService.java
index 658e38b..5edbaa9 100644
--- a/services/core/java/com/android/server/attention/AttentionManagerService.java
+++ b/services/core/java/com/android/server/attention/AttentionManagerService.java
@@ -96,12 +96,15 @@
     @VisibleForTesting
     static final String KEY_SERVICE_ENABLED = "service_enabled";
 
-    /** Default value in absence of {@link DeviceConfig} override. */
+    /** Default service enabled value in absence of {@link DeviceConfig} override. */
     private static final boolean DEFAULT_SERVICE_ENABLED = true;
 
     @VisibleForTesting
     boolean mIsServiceEnabled;
 
+    @VisibleForTesting
+    boolean mIsProximityEnabled;
+
     /**
      * DeviceConfig flag name, describes how much time we consider a result fresh; if the check
      * attention called within that period - cached value will be returned.
@@ -180,6 +183,9 @@
             DeviceConfig.addOnPropertiesChangedListener(NAMESPACE_ATTENTION_MANAGER_SERVICE,
                     ActivityThread.currentApplication().getMainExecutor(),
                     (properties) -> onDeviceConfigChange(properties.getKeyset()));
+            mIsProximityEnabled = mContext.getResources()
+                    .getBoolean(com.android.internal.R.bool.config_enableProximityService);
+            Slog.i(LOG_TAG, "mIsProximityEnabled is: " + mIsProximityEnabled);
         }
     }
 
@@ -351,7 +357,7 @@
     @VisibleForTesting
     boolean onStartProximityUpdates(ProximityUpdateCallbackInternal callbackInternal) {
         Objects.requireNonNull(callbackInternal);
-        if (!mIsServiceEnabled) {
+        if (!mIsProximityEnabled) {
             Slog.w(LOG_TAG, "Trying to call onProximityUpdate() on an unsupported device.");
             return false;
         }
@@ -488,6 +494,7 @@
     private void dumpInternal(IndentingPrintWriter ipw) {
         ipw.println("Attention Manager Service (dumpsys attention) state:\n");
         ipw.println("isServiceEnabled=" + mIsServiceEnabled);
+        ipw.println("mIsProximityEnabled=" + mIsProximityEnabled);
         ipw.println("mStaleAfterMillis=" + mStaleAfterMillis);
         ipw.println("AttentionServicePackageName=" + getServiceConfigPackage(mContext));
         ipw.println("Resolved component:");
@@ -519,6 +526,11 @@
         }
 
         @Override
+        public boolean isProximitySupported() {
+            return AttentionManagerService.this.mIsProximityEnabled;
+        }
+
+        @Override
         public boolean checkAttention(long timeout, AttentionCallbackInternal callbackInternal) {
             return AttentionManagerService.this.checkAttention(timeout, callbackInternal);
         }
diff --git a/services/core/java/com/android/server/audio/AudioDeviceBroker.java b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
index b1b4a18..af8aa916 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceBroker.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
@@ -1898,7 +1898,6 @@
                     final BluetoothDevice btDevice = (BluetoothDevice) msg.obj;
                     BtHelper.onNotifyPreferredAudioProfileApplied(btDevice);
                 } break;
-
                 case MSG_L_CHECK_COMMUNICATION_DEVICE_REMOVAL: {
                     synchronized (mSetModeLock) {
                         synchronized (mDeviceStateLock) {
@@ -1906,7 +1905,6 @@
                         }
                     }
                 } break;
-
                 case MSG_PERSIST_AUDIO_DEVICE_SETTINGS:
                     onPersistAudioDeviceSettings();
                     break;
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 61820d5..76c4cfe 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -17,7 +17,6 @@
 package com.android.server.audio;
 
 import static android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED;
-import static android.Manifest.permission.REMOTE_AUDIO_PLAYBACK;
 import static android.app.BroadcastOptions.DELIVERY_GROUP_POLICY_MOST_RECENT;
 import static android.media.AudioDeviceInfo.TYPE_BLE_HEADSET;
 import static android.media.AudioDeviceInfo.TYPE_BLE_SPEAKER;
@@ -81,6 +80,8 @@
 import android.database.ContentObserver;
 import android.hardware.SensorPrivacyManager;
 import android.hardware.SensorPrivacyManagerInternal;
+import android.hardware.display.DisplayManager;
+import android.hardware.display.DisplayManager.DisplayListener;
 import android.hardware.hdmi.HdmiAudioSystemClient;
 import android.hardware.hdmi.HdmiClient;
 import android.hardware.hdmi.HdmiControlManager;
@@ -190,6 +191,7 @@
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.SparseIntArray;
+import android.view.Display;
 import android.view.KeyEvent;
 import android.view.accessibility.AccessibilityManager;
 import android.widget.Toast;
@@ -365,7 +367,7 @@
     private static final int MSG_SET_ALL_VOLUMES = 10;
     private static final int MSG_UNLOAD_SOUND_EFFECTS = 15;
     private static final int MSG_SYSTEM_READY = 16;
-    private static final int MSG_UNMUTE_STREAM = 18;
+    private static final int MSG_UNMUTE_STREAM_ON_SINGLE_VOL_DEVICE = 18;
     private static final int MSG_DYN_POLICY_MIX_STATE_UPDATE = 19;
     private static final int MSG_INDICATE_SYSTEM_READY = 20;
     private static final int MSG_ACCESSORY_PLUG_MEDIA_UNMUTE = 21;
@@ -401,6 +403,7 @@
     private static final int MSG_DISPATCH_PREFERRED_MIXER_ATTRIBUTES = 52;
     private static final int MSG_LOWER_VOLUME_TO_RS1 = 53;
     private static final int MSG_CONFIGURATION_CHANGED = 54;
+    private static final int MSG_BROADCAST_MASTER_MUTE = 55;
 
     /** Messages handled by the {@link SoundDoseHelper}. */
     /*package*/ static final int SAFE_MEDIA_VOLUME_MSG_START = 1000;
@@ -984,6 +987,39 @@
     @GuardedBy("mSettingsLock")
     private boolean mRttEnabled = false;
 
+    private AtomicBoolean mMasterMute = new AtomicBoolean(false);
+
+    private DisplayManager mDisplayManager;
+
+    private DisplayListener mDisplayListener =
+      new DisplayListener() {
+        @Override
+        public void onDisplayAdded(int displayId) {}
+
+        @Override
+        public void onDisplayRemoved(int displayId) {}
+
+        @Override
+        public void onDisplayChanged(int displayId) {
+            if (displayId != Display.DEFAULT_DISPLAY) {
+                return;
+            }
+            int displayState = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY).getState();
+            if (displayState == Display.STATE_ON) {
+                if (mMonitorRotation) {
+                    RotationHelper.enable();
+                }
+                AudioSystem.setParameters("screen_state=on");
+            } else {
+                if (mMonitorRotation) {
+                    //reduce wakeups (save current) by only listening when display is on
+                    RotationHelper.disable();
+                }
+                AudioSystem.setParameters("screen_state=off");
+            }
+        }
+      };
+
     ///////////////////////////////////////////////////////////////////////////
     // Construction
     ///////////////////////////////////////////////////////////////////////////
@@ -1264,6 +1300,8 @@
                 0 /* arg1 */, 0 /* arg2 */, null /* obj */, 0 /* delay */);
         queueMsgUnderWakeLock(mAudioHandler, MSG_INIT_SPATIALIZER,
                 0 /* arg1 */, 0 /* arg2 */, null /* obj */, 0 /* delay */);
+
+        mDisplayManager = context.getSystemService(DisplayManager.class);
     }
 
     private void initVolumeStreamStates() {
@@ -1360,8 +1398,10 @@
                 new IntentFilter(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED);
         intentFilter.addAction(BluetoothHeadset.ACTION_ACTIVE_DEVICE_CHANGED);
         intentFilter.addAction(Intent.ACTION_DOCK_EVENT);
-        intentFilter.addAction(Intent.ACTION_SCREEN_ON);
-        intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
+        if (mDisplayManager == null) {
+            intentFilter.addAction(Intent.ACTION_SCREEN_ON);
+            intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
+        }
         intentFilter.addAction(Intent.ACTION_USER_SWITCHED);
         intentFilter.addAction(Intent.ACTION_USER_BACKGROUND);
         intentFilter.addAction(Intent.ACTION_USER_FOREGROUND);
@@ -1391,6 +1431,10 @@
         } else {
             subscriptionManager.addOnSubscriptionsChangedListener(mSubscriptionChangedListener);
         }
+
+        if (mDisplayManager != null) {
+            mDisplayManager.registerDisplayListener(mDisplayListener, mAudioHandler);
+        }
     }
 
     public void systemReady() {
@@ -2467,13 +2511,11 @@
         return true;
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.WRITE_SETTINGS)
     /** @see AudioManager#setEncodedSurroundMode(int) */
     @Override
     public boolean setEncodedSurroundMode(@AudioManager.EncodedSurroundOutputMode int mode) {
-        if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.WRITE_SETTINGS)
-                != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Missing WRITE_SETTINGS permission");
-        }
+        setEncodedSurroundMode_enforcePermission();
 
         final long token = Binder.clearCallingIdentity();
         try {
@@ -2749,21 +2791,18 @@
         }
         final int currentUser = getCurrentUserId();
 
+        if (mUseFixedVolume) {
+            AudioSystem.setMasterVolume(1.0f);
+        }
+
         // Check the current user restriction.
         boolean masterMute =
                 mUserManagerInternal.getUserRestriction(currentUser,
                         UserManager.DISALLOW_UNMUTE_DEVICE)
                         || mUserManagerInternal.getUserRestriction(currentUser,
                         UserManager.DISALLOW_ADJUST_VOLUME);
-        if (mUseFixedVolume) {
-            masterMute = false;
-            AudioSystem.setMasterVolume(1.0f);
-        }
-        if (DEBUG_VOL) {
-            Log.d(TAG, String.format("Master mute %s, user=%d", masterMute, currentUser));
-        }
-        AudioSystem.setMasterMute(masterMute);
-        broadcastMasterMuteStatus(masterMute);
+        setMasterMuteInternalNoCallerCheck(
+                masterMute, /* flags =*/ 0, currentUser, "readUserRestrictions");
 
         mMicMuteFromRestrictions = mUserManagerInternal.getUserRestriction(
                 currentUser, UserManager.DISALLOW_UNMUTE_MICROPHONE);
@@ -3521,7 +3560,7 @@
 
         if (adjustVolume && (direction != AudioManager.ADJUST_SAME)
                 && (keyEventMode != AudioDeviceVolumeManager.ADJUST_MODE_END)) {
-            mAudioHandler.removeMessages(MSG_UNMUTE_STREAM);
+            mAudioHandler.removeMessages(MSG_UNMUTE_STREAM_ON_SINGLE_VOL_DEVICE);
 
             if (isMuteAdjust && !mFullVolumeDevices.contains(device)) {
                 boolean state;
@@ -3548,8 +3587,9 @@
                         muteAliasStreams(streamTypeAlias, false);
                     } else if (direction == AudioManager.ADJUST_LOWER) {
                         if (mIsSingleVolume) {
-                            sendMsg(mAudioHandler, MSG_UNMUTE_STREAM, SENDMSG_QUEUE,
-                                    streamTypeAlias, flags, null, UNMUTE_STREAM_DELAY);
+                            sendMsg(mAudioHandler, MSG_UNMUTE_STREAM_ON_SINGLE_VOL_DEVICE,
+                                    SENDMSG_QUEUE, streamTypeAlias, flags, null,
+                                    UNMUTE_STREAM_DELAY);
                         }
                     }
                 }
@@ -3718,21 +3758,24 @@
     }
 
     // Called after a delay when volume down is pressed while muted
-    private void onUnmuteStream(int stream, int flags) {
+    private void onUnmuteStreamOnSingleVolDevice(int streamAlias, int flags) {
         boolean wasMuted;
         // Locking mSettingsLock to avoid inversion when calling vss.mute -> vss.doMute ->
         // vss.updateVolumeGroupIndex
         synchronized (mSettingsLock) {
             synchronized (VolumeStreamState.class) {
-                final VolumeStreamState streamState = mStreamStates[stream];
+                final VolumeStreamState streamState = mStreamStates[streamAlias];
                 // if unmuting causes a change, it was muted
-                wasMuted = streamState.mute(false, "onUnmuteStream");
-
-                final int device = getDeviceForStream(stream);
+                wasMuted = streamState.mute(false, "onUnmuteStreamOnSingleVolDevice");
+                if (wasMuted) {
+                    // Unmute all aliasted streams
+                    muteAliasStreams(streamAlias, false);
+                }
+                final int device = getDeviceForStream(streamAlias);
                 final int index = streamState.getIndex(device);
-                sendVolumeUpdate(stream, index, index, flags, device);
+                sendVolumeUpdate(streamAlias, index, index, flags, device);
             }
-            if (stream == AudioSystem.STREAM_MUSIC && wasMuted) {
+            if (streamAlias == AudioSystem.STREAM_MUSIC && wasMuted) {
                 synchronized (mHdmiClientLock) {
                     maybeSendSystemAudioStatusCommand(true);
                 }
@@ -4770,16 +4813,10 @@
     // UI update and Broadcast Intent
     private void sendMasterMuteUpdate(boolean muted, int flags) {
         mVolumeController.postMasterMuteChanged(updateFlagsForTvPlatform(flags));
-        broadcastMasterMuteStatus(muted);
+        sendMsg(mAudioHandler, MSG_BROADCAST_MASTER_MUTE,
+                SENDMSG_QUEUE, muted ? 1 : 0, 0, null, 0);
     }
 
-    private void broadcastMasterMuteStatus(boolean muted) {
-        Intent intent = new Intent(AudioManager.MASTER_MUTE_CHANGED_ACTION);
-        intent.putExtra(AudioManager.EXTRA_MASTER_VOLUME_MUTED, muted);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
-                | Intent.FLAG_RECEIVER_REPLACE_PENDING);
-        sendStickyBroadcastToAll(intent);
-    }
 
     /**
      * Sets the stream state's index, and posts a message to set system volume.
@@ -4946,18 +4983,21 @@
                 != PackageManager.PERMISSION_GRANTED) {
             return;
         }
-        setMasterMuteInternalNoCallerCheck(mute, flags, userId);
+        setMasterMuteInternalNoCallerCheck(mute, flags, userId, "setMasterMute");
     }
 
-    private void setMasterMuteInternalNoCallerCheck(boolean mute, int flags, int userId) {
+    private void setMasterMuteInternalNoCallerCheck(
+            boolean mute, int flags, int userId, String eventSource) {
         if (DEBUG_VOL) {
-            Log.d(TAG, String.format("Master mute %s, %d, user=%d", mute, flags, userId));
+            Log.d(TAG, TextUtils.formatSimple("Master mute %s, %d, user=%d from %s",
+                    mute, flags, userId, eventSource));
         }
+
         if (!isPlatformAutomotive() && mUseFixedVolume) {
             // If using fixed volume, we don't mute.
             // TODO: remove the isPlatformAutomotive check here.
             // The isPlatformAutomotive check is added for safety but may not be necessary.
-            return;
+            mute = false;
         }
         // For automotive,
         // - the car service is always running as system user
@@ -4966,8 +5006,10 @@
         // Therefore, the getCurrentUser() is always different to the foreground user.
         if ((isPlatformAutomotive() && userId == UserHandle.USER_SYSTEM)
                 || (getCurrentUserId() == userId)) {
-            if (mute != AudioSystem.getMasterMute()) {
-                AudioSystem.setMasterMute(mute);
+            if (mute != mMasterMute.getAndSet(mute)) {
+                sVolumeLogger.enqueue(new VolumeEvent(
+                        VolumeEvent.VOL_MASTER_MUTE, mute));
+                mAudioSystem.setMasterMute(mute);
                 sendMasterMuteUpdate(mute, flags);
             }
         }
@@ -4975,7 +5017,7 @@
 
     /** get global mute state. */
     public boolean isMasterMute() {
-        return AudioSystem.getMasterMute();
+        return mMasterMute.get();
     }
 
     @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
@@ -7575,15 +7617,13 @@
     public @interface BtProfile {}
 
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.BLUETOOTH_STACK)
     /**
      * See AudioManager.handleBluetoothActiveDeviceChanged(...)
      */
     public void handleBluetoothActiveDeviceChanged(BluetoothDevice newDevice,
             BluetoothDevice previousDevice, @NonNull BluetoothProfileConnectionInfo info) {
-        if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.BLUETOOTH_STACK)
-                != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Bluetooth is the only caller allowed");
-        }
+        handleBluetoothActiveDeviceChanged_enforcePermission();
         if (info == null) {
             throw new IllegalArgumentException("Illegal null BluetoothProfileConnectionInfo for"
                     + " device " + previousDevice + " -> " + newDevice);
@@ -9255,8 +9295,8 @@
                     onAccessoryPlugMediaUnmute(msg.arg1);
                     break;
 
-                case MSG_UNMUTE_STREAM:
-                    onUnmuteStream(msg.arg1, msg.arg2);
+                case MSG_UNMUTE_STREAM_ON_SINGLE_VOL_DEVICE:
+                    onUnmuteStreamOnSingleVolDevice(msg.arg1, msg.arg2);
                     break;
 
                 case MSG_DYN_POLICY_MIX_STATE_UPDATE:
@@ -9298,6 +9338,10 @@
                     mSystemServer.sendMicrophoneMuteChangedIntent();
                     break;
 
+                case MSG_BROADCAST_MASTER_MUTE:
+                    mSystemServer.broadcastMasterMuteStatus(msg.arg1 == 1);
+                    break;
+
                 case MSG_CHECK_MODE_FOR_UID:
                     synchronized (mDeviceBroker.mSetModeLock) {
                         if (msg.obj == null) {
@@ -9591,14 +9635,14 @@
                         0,
                         null, 0);
             } else if (action.equals(Intent.ACTION_USER_SWITCHED)) {
-                if (mUserSwitchedReceived) {
+                // the current audio focus owner is likely no longer valid
+                final boolean audioDiscarded = mMediaFocusControl.maybeDiscardAudioFocusOwner();
+                if (audioDiscarded && mUserSwitchedReceived) {
                     // attempt to stop music playback for background user except on first user
                     // switch (i.e. first boot)
                     mDeviceBroker.postBroadcastBecomingNoisy();
                 }
                 mUserSwitchedReceived = true;
-                // the current audio focus owner is no longer valid
-                mMediaFocusControl.discardAudioFocusOwner();
 
                 if (mSupportsMicPrivacyToggle) {
                     mMicMuteFromPrivacyToggle = mSensorPrivacyManagerInternal
@@ -9695,7 +9739,8 @@
                         newRestrictions.getBoolean(UserManager.DISALLOW_ADJUST_VOLUME)
                                 || newRestrictions.getBoolean(UserManager.DISALLOW_UNMUTE_DEVICE);
                 if (wasRestricted != isRestricted) {
-                    setMasterMuteInternalNoCallerCheck(isRestricted, /* flags =*/ 0, userId);
+                    setMasterMuteInternalNoCallerCheck(
+                            isRestricted, /* flags =*/ 0, userId, "onUserRestrictionsChanged");
                 }
             }
         }
@@ -10587,9 +10632,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.REMOTE_AUDIO_PLAYBACK)
     @Override
     public void setRingtonePlayer(IRingtonePlayer player) {
-        mContext.enforceCallingOrSelfPermission(REMOTE_AUDIO_PLAYBACK, null);
+        setRingtonePlayer_enforcePermission();
         mRingtonePlayer = player;
     }
 
@@ -10915,6 +10961,10 @@
 
     private void updateA11yVolumeAlias(boolean a11VolEnabled) {
         if (DEBUG_VOL) Log.d(TAG, "Accessibility volume enabled = " + a11VolEnabled);
+        if (mIsSingleVolume) {
+            if (DEBUG_VOL) Log.d(TAG, "Accessibility volume is not set on single volume device");
+            return;
+        }
         if (sIndependentA11yVolume != a11VolEnabled) {
             sIndependentA11yVolume = a11VolEnabled;
             // update the volume mapping scheme
@@ -11103,10 +11153,11 @@
             pw.print("  mHdmiCecVolumeControlEnabled="); pw.println(mHdmiCecVolumeControlEnabled);
         }
         pw.print("  mIsCallScreeningModeSupported="); pw.println(mIsCallScreeningModeSupported);
-        pw.print("  mic mute FromSwitch=" + mMicMuteFromSwitch
+        pw.println("  mic mute FromSwitch=" + mMicMuteFromSwitch
                         + " FromRestrictions=" + mMicMuteFromRestrictions
                         + " FromApi=" + mMicMuteFromApi
                         + " from system=" + mMicMuteFromSystemCached);
+        pw.print("  mMasterMute="); pw.println(mMasterMute.get());
         dumpAccessibilityServiceUids(pw);
         dumpAssistantServicesUids(pw);
 
diff --git a/services/core/java/com/android/server/audio/AudioServiceEvents.java b/services/core/java/com/android/server/audio/AudioServiceEvents.java
index 6ebb42e..aac868f 100644
--- a/services/core/java/com/android/server/audio/AudioServiceEvents.java
+++ b/services/core/java/com/android/server/audio/AudioServiceEvents.java
@@ -228,6 +228,7 @@
         static final int VOL_MUTE_STREAM_INT = 9;
         static final int VOL_SET_LE_AUDIO_VOL = 10;
         static final int VOL_ADJUST_GROUP_VOL = 11;
+        static final int VOL_MASTER_MUTE = 12;
 
         final int mOp;
         final int mStream;
@@ -321,6 +322,17 @@
             logMetricEvent();
         }
 
+        /** used for VOL_MASTER_MUTE */
+        VolumeEvent(int op, boolean state) {
+            mOp = op;
+            mStream = -1;
+            mVal1 = state ? 1 : 0;
+            mVal2 = 0;
+            mCaller = null;
+            mGroupName = null;
+            logMetricEvent();
+        }
+
 
         /**
          * Audio Analytics unique Id.
@@ -429,6 +441,9 @@
                 case VOL_MUTE_STREAM_INT:
                     // No value in logging metrics for this internal event
                     return;
+                case VOL_MASTER_MUTE:
+                    // No value in logging metrics for this internal event
+                    return;
                 default:
                     return;
             }
@@ -510,6 +525,10 @@
                             .append(AudioSystem.streamToString(mStream))
                             .append(mVal1 == 1 ? ", muted)" : ", unmuted)")
                             .toString();
+                case VOL_MASTER_MUTE:
+                    return new StringBuilder("Master mute:")
+                            .append(mVal1 == 1 ? " muted)" : " unmuted)")
+                            .toString();
                 default: return new StringBuilder("FIXME invalid op:").append(mOp).toString();
             }
         }
diff --git a/services/core/java/com/android/server/audio/AudioSystemAdapter.java b/services/core/java/com/android/server/audio/AudioSystemAdapter.java
index 4343894..e70b649 100644
--- a/services/core/java/com/android/server/audio/AudioSystemAdapter.java
+++ b/services/core/java/com/android/server/audio/AudioSystemAdapter.java
@@ -685,6 +685,15 @@
     }
 
     /**
+     * Sets master mute state in audio flinger
+     * @param mute the mute state to set
+     * @return operation status
+     */
+    public int setMasterMute(boolean mute) {
+        return AudioSystem.setMasterMute(mute);
+    }
+
+    /**
      * Part of AudioService dump
      * @param pw
      */
diff --git a/services/core/java/com/android/server/audio/FocusRequester.java b/services/core/java/com/android/server/audio/FocusRequester.java
index ab8b795..88a4b05 100644
--- a/services/core/java/com/android/server/audio/FocusRequester.java
+++ b/services/core/java/com/android/server/audio/FocusRequester.java
@@ -18,15 +18,19 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.content.pm.UserProperties;
 import android.media.AudioAttributes;
 import android.media.AudioFocusInfo;
 import android.media.AudioManager;
 import android.media.IAudioFocusDispatcher;
 import android.os.IBinder;
+import android.os.UserHandle;
 import android.util.Log;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.server.LocalServices;
 import com.android.server.audio.MediaFocusControl.AudioFocusDeathHandler;
+import com.android.server.pm.UserManagerInternal;
 
 import java.io.PrintWriter;
 
@@ -166,6 +170,12 @@
         return mCallingUid == uid;
     }
 
+    boolean isAlwaysVisibleUser() {
+        final UserManagerInternal umi = LocalServices.getService(UserManagerInternal.class);
+        final UserProperties properties = umi.getUserProperties(UserHandle.getUserId(mCallingUid));
+        return properties != null && properties.getAlwaysVisible();
+    }
+
     int getClientUid() {
         return mCallingUid;
     }
diff --git a/services/core/java/com/android/server/audio/MediaFocusControl.java b/services/core/java/com/android/server/audio/MediaFocusControl.java
index 27687b2..b218096 100644
--- a/services/core/java/com/android/server/audio/MediaFocusControl.java
+++ b/services/core/java/com/android/server/audio/MediaFocusControl.java
@@ -208,20 +208,29 @@
     }
 
     /**
-     * Discard the current audio focus owner.
+     * Discard the current audio focus owner (unless the user is considered {@link
+     * FocusRequester#isAlwaysVisibleUser() always visible)}.
      * Notify top of audio focus stack that it lost focus (regardless of possibility to reassign
      * focus), remove it from the stack, and clear the remote control display.
+     * @return whether the current audio focus owner was discarded (including if there was none);
+     *         returns false if it was purposefully kept
      */
-    protected void discardAudioFocusOwner() {
+    protected boolean maybeDiscardAudioFocusOwner() {
         synchronized(mAudioFocusLock) {
             if (!mFocusStack.empty()) {
-                // notify the current focus owner it lost focus after removing it from stack
-                final FocusRequester exFocusOwner = mFocusStack.pop();
-                exFocusOwner.handleFocusLoss(AudioManager.AUDIOFOCUS_LOSS, null,
-                        false /*forceDuck*/);
-                exFocusOwner.release();
+                final FocusRequester exFocusOwner = mFocusStack.peek();
+                if (!exFocusOwner.isAlwaysVisibleUser()) {
+                    mFocusStack.pop();
+                    exFocusOwner.handleFocusLoss(AudioManager.AUDIOFOCUS_LOSS, null,
+                            false /*forceDuck*/);
+                    exFocusOwner.release();
+                    return true;
+                } else {
+                    return false;
+                }
             }
         }
+        return true;
     }
 
     /**
diff --git a/services/core/java/com/android/server/audio/SystemServerAdapter.java b/services/core/java/com/android/server/audio/SystemServerAdapter.java
index 22456bc..dfcd2e9 100644
--- a/services/core/java/com/android/server/audio/SystemServerAdapter.java
+++ b/services/core/java/com/android/server/audio/SystemServerAdapter.java
@@ -145,4 +145,18 @@
             ActivityManager.broadcastStickyIntent(intent, profileId);
         }
     }
+
+    /*package*/ void broadcastMasterMuteStatus(boolean muted) {
+        Intent intent = new Intent(AudioManager.MASTER_MUTE_CHANGED_ACTION);
+        intent.putExtra(AudioManager.EXTRA_MASTER_VOLUME_MUTED, muted);
+        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
+                | Intent.FLAG_RECEIVER_REPLACE_PENDING
+                | Intent.FLAG_RECEIVER_FOREGROUND);
+        final long ident = Binder.clearCallingIdentity();
+        try {
+            mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/backup/SystemBackupAgent.java b/services/core/java/com/android/server/backup/SystemBackupAgent.java
index 224e34d..de4979a 100644
--- a/services/core/java/com/android/server/backup/SystemBackupAgent.java
+++ b/services/core/java/com/android/server/backup/SystemBackupAgent.java
@@ -25,6 +25,7 @@
 import android.app.backup.FullBackupDataOutput;
 import android.app.backup.WallpaperBackupHelper;
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.os.Environment;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
@@ -60,6 +61,7 @@
     private static final String PEOPLE_HELPER = "people";
     private static final String APP_LOCALES_HELPER = "app_locales";
     private static final String APP_GENDER_HELPER = "app_gender";
+    private static final String COMPANION_HELPER = "companion";
 
     // These paths must match what the WallpaperManagerService uses.  The leaf *_FILENAME
     // are also used in the full-backup file format, so must not change unless steps are
@@ -94,7 +96,8 @@
                     PERMISSION_HELPER,
                     NOTIFICATION_HELPER,
                     SYNC_SETTINGS_HELPER,
-                    APP_LOCALES_HELPER);
+                    APP_LOCALES_HELPER,
+                    COMPANION_HELPER);
 
     /** Helpers that are enabled for full, non-system users. */
     private static final Set<String> sEligibleHelpersForNonSystemUser =
@@ -124,11 +127,14 @@
         addHelperIfEligibleForUser(USAGE_STATS_HELPER, new UsageStatsBackupHelper(mUserId));
         addHelperIfEligibleForUser(SHORTCUT_MANAGER_HELPER, new ShortcutBackupHelper(mUserId));
         addHelperIfEligibleForUser(ACCOUNT_MANAGER_HELPER, new AccountManagerBackupHelper(mUserId));
-        addHelperIfEligibleForUser(SLICES_HELPER, new SliceBackupHelper(this));
+        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_SLICES_DISABLED)) {
+            addHelperIfEligibleForUser(SLICES_HELPER, new SliceBackupHelper(this));
+        }
         addHelperIfEligibleForUser(PEOPLE_HELPER, new PeopleBackupHelper(mUserId));
         addHelperIfEligibleForUser(APP_LOCALES_HELPER, new AppSpecificLocalesBackupHelper(mUserId));
         addHelperIfEligibleForUser(APP_GENDER_HELPER,
                 new AppGrammaticalGenderBackupHelper(mUserId));
+        addHelperIfEligibleForUser(COMPANION_HELPER, new CompanionBackupHelper(mUserId));
     }
 
     @Override
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java
index 35fc43a..50d375c 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java
@@ -43,6 +43,7 @@
 import com.android.server.biometrics.log.OperationContextExt;
 import com.android.server.biometrics.sensors.AuthSessionCoordinator;
 import com.android.server.biometrics.sensors.AuthenticationClient;
+import com.android.server.biometrics.sensors.BiometricNotificationUtils;
 import com.android.server.biometrics.sensors.ClientMonitorCallback;
 import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
 import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback;
@@ -241,6 +242,9 @@
                 vendorCode,
                 getTargetUserId()));
 
+        if (error == BiometricConstants.BIOMETRIC_ERROR_RE_ENROLL) {
+            BiometricNotificationUtils.showReEnrollmentNotification(getContext());
+        }
         super.onError(error, vendorCode);
     }
 
diff --git a/services/core/java/com/android/server/camera/CameraServiceProxy.java b/services/core/java/com/android/server/camera/CameraServiceProxy.java
index f8f0088..df16c5b 100644
--- a/services/core/java/com/android/server/camera/CameraServiceProxy.java
+++ b/services/core/java/com/android/server/camera/CameraServiceProxy.java
@@ -1015,6 +1015,12 @@
             handles.add(id);
         }
 
+        // If the device is running in headless system user mode then allow
+        // User 0 to access camera.
+        if (UserManager.isHeadlessSystemUserMode()) {
+            handles.add(UserHandle.USER_SYSTEM);
+        }
+
         return handles;
     }
 
diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java
index 4b8b431..38c6a52 100644
--- a/services/core/java/com/android/server/clipboard/ClipboardService.java
+++ b/services/core/java/com/android/server/clipboard/ClipboardService.java
@@ -193,8 +193,11 @@
         if (IS_EMULATOR) {
             mEmulatorClipboardMonitor = new EmulatorClipboardMonitor((clip) -> {
                 synchronized (mLock) {
-                    setPrimaryClipInternalLocked(getClipboardLocked(0, DEVICE_ID_DEFAULT), clip,
-                            android.os.Process.SYSTEM_UID, null);
+                    Clipboard clipboard = getClipboardLocked(0, DEVICE_ID_DEFAULT);
+                    if (clipboard != null) {
+                        setPrimaryClipInternalLocked(clipboard, clip, android.os.Process.SYSTEM_UID,
+                                null);
+                    }
                 }
             });
         } else {
@@ -470,6 +473,7 @@
                     callingPackage);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.SET_CLIP_SOURCE)
         @Override
         public void setPrimaryClipAsPackage(
                 ClipData clip,
@@ -478,8 +482,7 @@
                 @UserIdInt int userId,
                 int deviceId,
                 String sourcePackage) {
-            getContext().enforceCallingOrSelfPermission(Manifest.permission.SET_CLIP_SOURCE,
-                    "Requires SET_CLIP_SOURCE permission");
+            setPrimaryClipAsPackage_enforcePermission();
             checkAndSetPrimaryClip(clip, callingPackage, attributionTag, userId, deviceId,
                     sourcePackage);
         }
@@ -637,6 +640,9 @@
                 }
 
                 Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId);
+                if (clipboard == null) {
+                    return null;
+                }
                 showAccessNotificationLocked(pkg, intendingUid, intendingUserId, clipboard);
                 notifyTextClassifierLocked(clipboard, pkg, intendingUid);
                 if (clipboard.primaryClip != null) {
@@ -665,7 +671,7 @@
             }
             synchronized (mLock) {
                 Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId);
-                return clipboard.primaryClip != null
+                return (clipboard != null && clipboard.primaryClip != null)
                         ? clipboard.primaryClip.getDescription() : null;
             }
         }
@@ -688,7 +694,8 @@
                 return false;
             }
             synchronized (mLock) {
-                return getClipboardLocked(intendingUserId, intendingDeviceId).primaryClip != null;
+                Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId);
+                return clipboard != null && clipboard.primaryClip != null;
             }
         }
 
@@ -709,8 +716,11 @@
                 return;
             }
             synchronized (mLock) {
-                getClipboardLocked(intendingUserId, intendingDeviceId)
-                        .primaryClipListeners
+                Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId);
+                if (clipboard == null) {
+                    return;
+                }
+                clipboard.primaryClipListeners
                         .register(
                                 listener,
                                 new ListenerInfo(intendingUid, callingPackage, attributionTag));
@@ -733,8 +743,11 @@
                 return;
             }
             synchronized (mLock) {
-                getClipboardLocked(intendingUserId,
-                        intendingDeviceId).primaryClipListeners.unregister(listener);
+                Clipboard clipboard = getClipboardLocked(intendingUserId,
+                                intendingDeviceId);
+                if (clipboard != null) {
+                    clipboard.primaryClipListeners.unregister(listener);
+                }
             }
         }
 
@@ -757,7 +770,7 @@
             }
             synchronized (mLock) {
                 Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId);
-                if (clipboard.primaryClip != null) {
+                if (clipboard != null && clipboard.primaryClip != null) {
                     CharSequence text = clipboard.primaryClip.getItemAt(0).getText();
                     return text != null && text.length() > 0;
                 }
@@ -765,11 +778,11 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.SET_CLIP_SOURCE)
         @Override
         public String getPrimaryClipSource(
                 String callingPackage, String attributionTag, int userId, int deviceId) {
-            getContext().enforceCallingOrSelfPermission(Manifest.permission.SET_CLIP_SOURCE,
-                    "Requires SET_CLIP_SOURCE permission");
+            getPrimaryClipSource_enforcePermission();
             final int intendingUid = getIntendingUid(callingPackage, userId);
             final int intendingUserId = UserHandle.getUserId(intendingUid);
             final int intendingDeviceId = getIntendingDeviceId(deviceId, intendingUid);
@@ -786,7 +799,7 @@
             }
             synchronized (mLock) {
                 Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId);
-                if (clipboard.primaryClip != null) {
+                if (clipboard != null && clipboard.primaryClip != null) {
                     return clipboard.mPrimaryClipPackage;
                 }
                 return null;
@@ -808,7 +821,8 @@
                         final int intendingUid = msg.arg2;
                         final int intendingDeviceId = ((Pair<Integer, Integer>) msg.obj).second;
                         synchronized (mLock) {
-                            if (getClipboardLocked(userId, intendingDeviceId).primaryClip != null) {
+                            Clipboard clipboard = getClipboardLocked(userId, intendingDeviceId);
+                            if (clipboard != null && clipboard.primaryClip != null) {
                                 FrameworkStatsLog.write(FrameworkStatsLog.CLIPBOARD_CLEARED,
                                         FrameworkStatsLog.CLIPBOARD_CLEARED__SOURCE__AUTO_CLEAR);
                                 setPrimaryClipInternalLocked(
@@ -824,9 +838,23 @@
     };
 
     @GuardedBy("mLock")
-    private Clipboard getClipboardLocked(@UserIdInt int userId, int deviceId) {
+    private @Nullable Clipboard getClipboardLocked(@UserIdInt int userId, int deviceId) {
         Clipboard clipboard = mClipboards.get(userId, deviceId);
         if (clipboard == null) {
+            try {
+                if (!mUm.isUserRunning(userId)) {
+                    Slog.w(TAG, "getClipboardLocked called with not running userId " + userId);
+                    return null;
+                }
+            } catch (RemoteException e) {
+                Slog.e(TAG, "RemoteException calling UserManager: " + e);
+                return null;
+            }
+            if (deviceId != DEVICE_ID_DEFAULT && !mVdm.isValidVirtualDeviceId(deviceId)) {
+                Slog.w(TAG, "getClipboardLocked called with invalid (possibly released) deviceId "
+                        + deviceId);
+                return null;
+            }
             clipboard = new Clipboard(userId, deviceId);
             mClipboards.add(userId, deviceId, clipboard);
         }
@@ -876,8 +904,11 @@
         final int userId = UserHandle.getUserId(uid);
 
         // Update this user
-        setPrimaryClipInternalLocked(getClipboardLocked(userId, deviceId), clip, uid,
-                sourcePackage);
+        Clipboard clipboard = getClipboardLocked(userId, deviceId);
+        if (clipboard == null) {
+            return;
+        }
+        setPrimaryClipInternalLocked(clipboard, clip, uid, sourcePackage);
 
         // Update related users
         List<UserInfo> related = getRelatedProfiles(userId);
@@ -911,8 +942,11 @@
                         final boolean canCopyIntoProfile = !hasRestriction(
                                 UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE, id);
                         if (canCopyIntoProfile) {
-                            setPrimaryClipInternalNoClassifyLocked(
-                                    getClipboardLocked(id, deviceId), clip, uid, sourcePackage);
+                            Clipboard relatedClipboard = getClipboardLocked(id, deviceId);
+                            if (relatedClipboard != null) {
+                                setPrimaryClipInternalNoClassifyLocked(relatedClipboard, clip, uid,
+                                        sourcePackage);
+                            }
                         }
                     }
                 }
@@ -1046,6 +1080,9 @@
 
         synchronized (mLock) {
             Clipboard clipboard = getClipboardLocked(userId, deviceId);
+            if (clipboard == null) {
+                return;
+            }
             if (clipboard.primaryClip == clip) {
                 applyClassificationAndSendBroadcastLocked(
                         clipboard, confidences, links, classifier);
@@ -1061,7 +1098,8 @@
                                     UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE, id);
                             if (canCopyIntoProfile) {
                                 Clipboard relatedClipboard = getClipboardLocked(id, deviceId);
-                                if (hasTextLocked(relatedClipboard, text)) {
+                                if (relatedClipboard != null
+                                        && hasTextLocked(relatedClipboard, text)) {
                                     applyClassificationAndSendBroadcastLocked(
                                             relatedClipboard, confidences, links, classifier);
                                 }
@@ -1184,9 +1222,10 @@
             Binder.restoreCallingIdentity(oldIdentity);
         }
         Clipboard clipboard = getClipboardLocked(UserHandle.getUserId(uid), deviceId);
-        if (clipboard.primaryClip != null && !clipboard.activePermissionOwners.contains(pkg)) {
+        if (clipboard != null && clipboard.primaryClip != null
+                && !clipboard.activePermissionOwners.contains(pkg)) {
             final int N = clipboard.primaryClip.getItemCount();
-            for (int i=0; i<N; i++) {
+            for (int i = 0; i < N; i++) {
                 grantItemPermission(clipboard.primaryClip.getItemAt(i), clipboard.primaryClipUid,
                         pkg, UserHandle.getUserId(uid));
             }
diff --git a/services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java b/services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java
index 4d12574..283353dd 100644
--- a/services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java
+++ b/services/core/java/com/android/server/companion/virtual/VirtualDeviceManagerInternal.java
@@ -19,6 +19,7 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.companion.virtual.IVirtualDevice;
+import android.companion.virtual.VirtualDevice;
 import android.companion.virtual.sensor.VirtualSensor;
 import android.os.LocaleList;
 import android.util.ArraySet;
@@ -156,4 +157,14 @@
      * @return the set of display ids for all VirtualDisplays owned by the device
      */
     public abstract @NonNull ArraySet<Integer> getDisplayIdsForDevice(int deviceId);
+
+    /**
+     * Gets the persistent ID for the VirtualDevice with the given device ID.
+     *
+     * @param deviceId which device we're asking about
+     * @return the persistent ID for this device, or {@code null} if no such ID exists.
+     *
+     * @see VirtualDevice#getPersistentDeviceId()
+     */
+    public abstract @Nullable String getPersistentIdForDevice(int deviceId);
 }
diff --git a/services/core/java/com/android/server/content/ContentService.java b/services/core/java/com/android/server/content/ContentService.java
index 781920c..1b48e3c 100644
--- a/services/core/java/com/android/server/content/ContentService.java
+++ b/services/core/java/com/android/server/content/ContentService.java
@@ -1150,10 +1150,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.READ_SYNC_STATS)
     @Override
     public boolean isSyncActive(Account account, String authority, ComponentName cname) {
-        mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_SYNC_STATS,
-                "no permission to read the sync stats");
+        isSyncActive_enforcePermission();
 
         final int callingUid = Binder.getCallingUid();
         final int userId = UserHandle.getCallingUserId();
@@ -1254,11 +1254,11 @@
         return isSyncPendingAsUser(account, authority, cname, UserHandle.getCallingUserId());
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.READ_SYNC_STATS)
     @Override
     public boolean isSyncPendingAsUser(Account account, String authority, ComponentName cname,
                                        int userId) {
-        mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_SYNC_STATS,
-                "no permission to read the sync stats");
+        isSyncPendingAsUser_enforcePermission();
         enforceCrossUserPermission(userId,
                 "no permission to retrieve the sync settings for user " + userId);
 
diff --git a/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java b/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java
index add94b1..1012bc1 100644
--- a/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java
+++ b/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java
@@ -1234,12 +1234,11 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DEVICE_STATE)
         @Override // Binder call
         public void onStateRequestOverlayDismissed(boolean shouldCancelRequest) {
 
-            getContext().enforceCallingOrSelfPermission(CONTROL_DEVICE_STATE,
-                    "CONTROL_DEVICE_STATE permission required to control the state request "
-                            + "overlay");
+            onStateRequestOverlayDismissed_enforcePermission();
 
             final long callingIdentity = Binder.clearCallingIdentity();
             try {
diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java
index e5965ef..c131226 100644
--- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java
+++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java
@@ -222,8 +222,14 @@
  *          <minimum>120</minimum>
  *          <maximum>120</maximum>
  *        </refreshRate>
- *        <thermalStatusLimit>light</thermalStatusLimit>
  *        <allowInLowPowerMode>false</allowInLowPowerMode>
+ *        <minimumHdrPercentOfScreen>0.6</minimumHdrPercentOfScreen>
+ *        <sdrHdrRatioMap>
+ *          <point>
+ *            <sdrNits>2.000</sdrNits>
+ *            <hdrRatio>4.000</hdrRatio>
+ *          </point>
+ *        </sdrHdrRatioMap>
  *      </highBrightnessMode>
  *
  *      <luxThrottling>
@@ -276,6 +282,10 @@
  *      <lightSensor>
  *        <type>android.sensor.light</type>
  *        <name>1234 Ambient Light Sensor</name>
+ *        <refreshRate>
+ *          <minimum>60</minimum>
+ *          <maximum>120</maximum>
+ *        </refreshRate>
  *      </lightSensor>
  *      <screenOffBrightnessSensor>
  *        <type>com.google.sensor.binned_brightness</type>
@@ -1568,37 +1578,40 @@
     public String toString() {
         return "DisplayDeviceConfig{"
                 + "mLoadedFrom=" + mLoadedFrom
-                + ", mBacklight=" + Arrays.toString(mBacklight)
+                + "\n"
+                + "mBacklight=" + Arrays.toString(mBacklight)
                 + ", mNits=" + Arrays.toString(mNits)
                 + ", mRawBacklight=" + Arrays.toString(mRawBacklight)
                 + ", mRawNits=" + Arrays.toString(mRawNits)
                 + ", mInterpolationType=" + mInterpolationType
-                + ", mBrightness=" + Arrays.toString(mBrightness)
-                + ", mBrightnessToBacklightSpline=" + mBrightnessToBacklightSpline
+                + "mBrightness=" + Arrays.toString(mBrightness)
+                + "\n"
+                + "mBrightnessToBacklightSpline=" + mBrightnessToBacklightSpline
                 + ", mBacklightToBrightnessSpline=" + mBacklightToBrightnessSpline
                 + ", mNitsToBacklightSpline=" + mNitsToBacklightSpline
                 + ", mBacklightMinimum=" + mBacklightMinimum
                 + ", mBacklightMaximum=" + mBacklightMaximum
                 + ", mBrightnessDefault=" + mBrightnessDefault
                 + ", mQuirks=" + mQuirks
-                + ", isHbmEnabled=" + mIsHighBrightnessModeEnabled
-                + ", mLuxThrottlingData=" + mLuxThrottlingData
+                + ", mIsHighBrightnessModeEnabled=" + mIsHighBrightnessModeEnabled
+                + "\n"
+                + "mLuxThrottlingData=" + mLuxThrottlingData
                 + ", mHbmData=" + mHbmData
                 + ", mSdrToHdrRatioSpline=" + mSdrToHdrRatioSpline
                 + ", mThermalBrightnessThrottlingDataMapByThrottlingId="
                 + mThermalBrightnessThrottlingDataMapByThrottlingId
                 + "\n"
-                + ", mBrightnessRampFastDecrease=" + mBrightnessRampFastDecrease
+                + "mBrightnessRampFastDecrease=" + mBrightnessRampFastDecrease
                 + ", mBrightnessRampFastIncrease=" + mBrightnessRampFastIncrease
                 + ", mBrightnessRampSlowDecrease=" + mBrightnessRampSlowDecrease
                 + ", mBrightnessRampSlowIncrease=" + mBrightnessRampSlowIncrease
                 + ", mBrightnessRampDecreaseMaxMillis=" + mBrightnessRampDecreaseMaxMillis
                 + ", mBrightnessRampIncreaseMaxMillis=" + mBrightnessRampIncreaseMaxMillis
                 + "\n"
-                + ", mAmbientHorizonLong=" + mAmbientHorizonLong
+                + "mAmbientHorizonLong=" + mAmbientHorizonLong
                 + ", mAmbientHorizonShort=" + mAmbientHorizonShort
                 + "\n"
-                + ", mScreenDarkeningMinThreshold=" + mScreenDarkeningMinThreshold
+                + "mScreenDarkeningMinThreshold=" + mScreenDarkeningMinThreshold
                 + ", mScreenDarkeningMinThresholdIdle=" + mScreenDarkeningMinThresholdIdle
                 + ", mScreenBrighteningMinThreshold=" + mScreenBrighteningMinThreshold
                 + ", mScreenBrighteningMinThresholdIdle=" + mScreenBrighteningMinThresholdIdle
@@ -1608,7 +1621,7 @@
                 + ", mAmbientLuxBrighteningMinThresholdIdle="
                 + mAmbientLuxBrighteningMinThresholdIdle
                 + "\n"
-                + ", mScreenBrighteningLevels=" + Arrays.toString(
+                + "mScreenBrighteningLevels=" + Arrays.toString(
                 mScreenBrighteningLevels)
                 + ", mScreenBrighteningPercentages=" + Arrays.toString(
                 mScreenBrighteningPercentages)
@@ -1625,7 +1638,7 @@
                 + ", mAmbientDarkeningPercentages=" + Arrays.toString(
                 mAmbientDarkeningPercentages)
                 + "\n"
-                + ", mAmbientBrighteningLevelsIdle=" + Arrays.toString(
+                + "mAmbientBrighteningLevelsIdle=" + Arrays.toString(
                 mAmbientBrighteningLevelsIdle)
                 + ", mAmbientBrighteningPercentagesIdle=" + Arrays.toString(
                 mAmbientBrighteningPercentagesIdle)
@@ -1642,7 +1655,7 @@
                 + ", mScreenDarkeningPercentagesIdle=" + Arrays.toString(
                 mScreenDarkeningPercentagesIdle)
                 + "\n"
-                + ", mAmbientLightSensor=" + mAmbientLightSensor
+                + "mAmbientLightSensor=" + mAmbientLightSensor
                 + ", mScreenOffBrightnessSensor=" + mScreenOffBrightnessSensor
                 + ", mProximitySensor=" + mProximitySensor
                 + ", mRefreshRateLimitations= " + Arrays.toString(mRefreshRateLimitations.toArray())
@@ -1656,7 +1669,7 @@
                 + ", mDdcAutoBrightnessAvailable= " + mDdcAutoBrightnessAvailable
                 + ", mAutoBrightnessAvailable= " + mAutoBrightnessAvailable
                 + "\n"
-                + ", mDefaultLowBlockingZoneRefreshRate= " + mDefaultLowBlockingZoneRefreshRate
+                + "mDefaultLowBlockingZoneRefreshRate= " + mDefaultLowBlockingZoneRefreshRate
                 + ", mDefaultHighBlockingZoneRefreshRate= " + mDefaultHighBlockingZoneRefreshRate
                 + ", mDefaultPeakRefreshRate= " + mDefaultPeakRefreshRate
                 + ", mDefaultRefreshRate= " + mDefaultRefreshRate
@@ -1665,7 +1678,7 @@
                 + ", mDefaultRefreshRateInHbmSunlight= " + mDefaultRefreshRateInHbmSunlight
                 + ", mRefreshRateThrottlingMap= " + mRefreshRateThrottlingMap
                 + "\n"
-                + ", mLowDisplayBrightnessThresholds= "
+                + "mLowDisplayBrightnessThresholds= "
                 + Arrays.toString(mLowDisplayBrightnessThresholds)
                 + ", mLowAmbientBrightnessThresholds= "
                 + Arrays.toString(mLowAmbientBrightnessThresholds)
@@ -1674,10 +1687,10 @@
                 + ", mHighAmbientBrightnessThresholds= "
                 + Arrays.toString(mHighAmbientBrightnessThresholds)
                 + "\n"
-                + ", mScreenOffBrightnessSensorValueToLux=" + Arrays.toString(
+                + "mScreenOffBrightnessSensorValueToLux=" + Arrays.toString(
                 mScreenOffBrightnessSensorValueToLux)
                 + "\n"
-                + ", mUsiVersion= " + mHostUsiVersion
+                + "mUsiVersion= " + mHostUsiVersion
                 + "}";
     }
 
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 898a3c4..fe445a6 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -39,6 +39,7 @@
 import static android.hardware.display.DisplayViewport.VIEWPORT_INTERNAL;
 import static android.hardware.display.DisplayViewport.VIEWPORT_VIRTUAL;
 import static android.hardware.display.HdrConversionMode.HDR_CONVERSION_UNSUPPORTED;
+import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_CRITICAL;
 import static android.os.Process.FIRST_APPLICATION_UID;
 import static android.os.Process.ROOT_UID;
 
@@ -593,7 +594,7 @@
         DisplayManagerGlobal.invalidateLocalDisplayInfoCaches();
 
         publishBinderService(Context.DISPLAY_SERVICE, new BinderService(),
-                true /*allowIsolated*/);
+                true /*allowIsolated*/, DUMP_FLAG_PRIORITY_CRITICAL);
         publishLocalService(DisplayManagerInternal.class, new LocalService());
     }
 
@@ -2019,20 +2020,7 @@
         final Point userPreferredResolution =
                 mPersistentDataStore.getUserPreferredResolution(device);
         final float refreshRate = mPersistentDataStore.getUserPreferredRefreshRate(device);
-        // If value in persistentDataStore is null, preserving the mode from systemPreferredMode.
-        // This is required because in some devices, user-preferred mode was not stored in
-        // persistentDataStore, but was stored in a config which is returned through
-        // systemPreferredMode.
-        if ((userPreferredResolution == null && Float.isNaN(refreshRate))
-                || (userPreferredResolution.equals(0, 0) && refreshRate == 0.0f)) {
-            Display.Mode systemPreferredMode = device.getSystemPreferredDisplayModeLocked();
-            if (systemPreferredMode == null) {
-                return;
-            }
-            storeModeInPersistentDataStoreLocked(
-                    display.getDisplayIdLocked(), systemPreferredMode.getPhysicalWidth(),
-                    systemPreferredMode.getPhysicalHeight(), systemPreferredMode.getRefreshRate());
-            device.setUserPreferredDisplayModeLocked(systemPreferredMode);
+        if (userPreferredResolution == null && Float.isNaN(refreshRate)) {
             return;
         }
         Display.Mode.Builder modeBuilder = new Display.Mode.Builder();
@@ -3512,10 +3500,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY)
         @Override // Binder call
         public void startWifiDisplayScan() {
-            mContext.enforceCallingOrSelfPermission(Manifest.permission.CONFIGURE_WIFI_DISPLAY,
-                    "Permission required to start wifi display scans");
+            startWifiDisplayScan_enforcePermission();
 
             final int callingPid = Binder.getCallingPid();
             final long token = Binder.clearCallingIdentity();
@@ -3526,10 +3514,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY)
         @Override // Binder call
         public void stopWifiDisplayScan() {
-            mContext.enforceCallingOrSelfPermission(Manifest.permission.CONFIGURE_WIFI_DISPLAY,
-                    "Permission required to stop wifi display scans");
+            stopWifiDisplayScan_enforcePermission();
 
             final int callingPid = Binder.getCallingPid();
             final long token = Binder.clearCallingIdentity();
@@ -3603,10 +3591,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY)
         @Override // Binder call
         public void pauseWifiDisplay() {
-            mContext.enforceCallingOrSelfPermission(Manifest.permission.CONFIGURE_WIFI_DISPLAY,
-                    "Permission required to pause a wifi display session");
+            pauseWifiDisplay_enforcePermission();
 
             final long token = Binder.clearCallingIdentity();
             try {
@@ -3616,10 +3604,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY)
         @Override // Binder call
         public void resumeWifiDisplay() {
-            mContext.enforceCallingOrSelfPermission(Manifest.permission.CONFIGURE_WIFI_DISPLAY,
-                    "Permission required to resume a wifi display session");
+            resumeWifiDisplay_enforcePermission();
 
             final long token = Binder.clearCallingIdentity();
             try {
@@ -3642,11 +3630,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
         @Override // Binder call
         public void setUserDisabledHdrTypes(int[] userDisabledFormats) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.WRITE_SECURE_SETTINGS,
-                    "Permission required to write the user settings.");
+            setUserDisabledHdrTypes_enforcePermission();
 
             final long token = Binder.clearCallingIdentity();
             try {
@@ -3669,11 +3656,10 @@
             DisplayControl.overrideHdrTypes(displayToken, modes);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
         @Override // Binder call
         public void setAreUserDisabledHdrTypesAllowed(boolean areUserDisabledHdrTypesAllowed) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.WRITE_SECURE_SETTINGS,
-                    "Permission required to write the user settings.");
+            setAreUserDisabledHdrTypesAllowed_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 setAreUserDisabledHdrTypesAllowedInternal(areUserDisabledHdrTypesAllowed);
@@ -3696,11 +3682,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONFIGURE_DISPLAY_COLOR_MODE)
         @Override // Binder call
         public void requestColorMode(int displayId, int colorMode) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.CONFIGURE_DISPLAY_COLOR_MODE,
-                    "Permission required to change the display color mode");
+            requestColorMode_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 requestColorModeInternal(displayId, colorMode);
@@ -3777,11 +3762,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.BRIGHTNESS_SLIDER_USAGE)
         @Override // Binder call
         public ParceledListSlice<BrightnessChangeEvent> getBrightnessEvents(String callingPackage) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.BRIGHTNESS_SLIDER_USAGE,
-                    "Permission to read brightness events.");
+            getBrightnessEvents_enforcePermission();
 
             final int callingUid = Binder.getCallingUid();
             AppOpsManager appOpsManager = mContext.getSystemService(AppOpsManager.class);
@@ -3810,11 +3794,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.ACCESS_AMBIENT_LIGHT_STATS)
         @Override // Binder call
         public ParceledListSlice<AmbientBrightnessDayStats> getAmbientBrightnessStats() {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.ACCESS_AMBIENT_LIGHT_STATS,
-                    "Permission required to to access ambient light stats.");
+            getAmbientBrightnessStats_enforcePermission();
             final int callingUid = Binder.getCallingUid();
             final int userId = UserHandle.getUserId(callingUid);
             final long token = Binder.clearCallingIdentity();
@@ -3828,12 +3811,11 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS)
         @Override // Binder call
         public void setBrightnessConfigurationForUser(
                 BrightnessConfiguration c, @UserIdInt int userId, String packageName) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS,
-                    "Permission required to change the display's brightness configuration");
+            setBrightnessConfigurationForUser_enforcePermission();
             if (userId != UserHandle.getCallingUserId()) {
                 mContext.enforceCallingOrSelfPermission(
                         Manifest.permission.INTERACT_ACROSS_USERS,
@@ -3858,12 +3840,11 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS)
         @Override // Binder call
         public void setBrightnessConfigurationForDisplay(BrightnessConfiguration c,
                 String uniqueId, int userId, String packageName) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS,
-                    "Permission required to change the display's brightness configuration");
+            setBrightnessConfigurationForDisplay_enforcePermission();
             if (userId != UserHandle.getCallingUserId()) {
                 mContext.enforceCallingOrSelfPermission(
                         Manifest.permission.INTERACT_ACROSS_USERS,
@@ -3878,12 +3859,11 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS)
         @Override // Binder call
         public BrightnessConfiguration getBrightnessConfigurationForDisplay(String uniqueId,
                 int userId) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS,
-                    "Permission required to read the display's brightness configuration");
+            getBrightnessConfigurationForDisplay_enforcePermission();
             if (userId != UserHandle.getCallingUserId()) {
                 mContext.enforceCallingOrSelfPermission(
                         Manifest.permission.INTERACT_ACROSS_USERS,
@@ -3927,11 +3907,10 @@
 
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS)
         @Override // Binder call
         public BrightnessConfiguration getDefaultBrightnessConfiguration() {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS,
-                    "Permission required to read the display's default brightness configuration");
+            getDefaultBrightnessConfiguration_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 synchronized (mSyncRoot) {
@@ -3943,11 +3922,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS)
         @Override
         public BrightnessInfo getBrightnessInfo(int displayId) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS,
-                    "Permission required to read the display's brightness info.");
+            getBrightnessInfo_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 synchronized (mSyncRoot) {
@@ -3975,11 +3953,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS)
         @Override // Binder call
         public void setTemporaryBrightness(int displayId, float brightness) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS,
-                    "Permission required to set the display's brightness");
+            setTemporaryBrightness_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 synchronized (mSyncRoot) {
@@ -3991,11 +3968,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS)
         @Override // Binder call
         public void setBrightness(int displayId, float brightness) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS,
-                    "Permission required to set the display's brightness");
+            setBrightness_enforcePermission();
             if (!isValidBrightness(brightness)) {
                 Slog.w(TAG, "Attempted to set invalid brightness" + brightness);
                 return;
@@ -4034,11 +4010,10 @@
             return brightness;
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS)
         @Override // Binder call
         public void setTemporaryAutoBrightnessAdjustment(float adjustment) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS,
-                    "Permission required to set the display's auto brightness adjustment");
+            setTemporaryAutoBrightnessAdjustment_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 synchronized (mSyncRoot) {
@@ -4078,11 +4053,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_USER_PREFERRED_DISPLAY_MODE)
         @Override // Binder call
         public void setUserPreferredDisplayMode(int displayId, Display.Mode mode) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.MODIFY_USER_PREFERRED_DISPLAY_MODE,
-                    "Permission required to set the user preferred display mode.");
+            setUserPreferredDisplayMode_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 setUserPreferredDisplayModeInternal(displayId, mode);
@@ -4167,11 +4141,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS)
         @Override // Binder call
         public void setShouldAlwaysRespectAppRequestedMode(boolean enabled) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS,
-                    "Permission required to override display mode requests.");
+            setShouldAlwaysRespectAppRequestedMode_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 setShouldAlwaysRespectAppRequestedModeInternal(enabled);
@@ -4180,11 +4153,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS)
         @Override // Binder call
         public boolean shouldAlwaysRespectAppRequestedMode() {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS,
-                    "Permission required to override display mode requests.");
+            shouldAlwaysRespectAppRequestedMode_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 return shouldAlwaysRespectAppRequestedModeInternal();
@@ -4193,11 +4165,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE)
         @Override // Binder call
         public void setRefreshRateSwitchingType(int newValue) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE,
-                    "Permission required to modify refresh rate switching type.");
+            setRefreshRateSwitchingType_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 setRefreshRateSwitchingTypeInternal(newValue);
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 59b8871..dd22cfd 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -1411,10 +1411,10 @@
         if (mScreenOffBrightnessSensorController != null) {
             mScreenOffBrightnessSensorController.stop();
         }
-
         if (mDisplayWhiteBalanceController != null) {
             mDisplayWhiteBalanceController.setEnabled(false);
         }
+
     }
 
     // Call from handler thread
@@ -2727,10 +2727,11 @@
     public void setBrightness(float brightnessValue, int userSerial) {
         // Update the setting, which will eventually call back into DPC to have us actually update
         // the display with the new value.
+        float clampedBrightnessValue = clampScreenBrightness(brightnessValue);
         mBrightnessSetting.setUserSerial(userSerial);
-        mBrightnessSetting.setBrightness(brightnessValue);
+        mBrightnessSetting.setBrightness(clampedBrightnessValue);
         if (mDisplayId == Display.DEFAULT_DISPLAY && mPersistBrightnessNitsForDefaultDisplay) {
-            float nits = convertToNits(brightnessValue);
+            float nits = convertToNits(clampedBrightnessValue);
             if (nits >= 0) {
                 mBrightnessSetting.setBrightnessNitsForDefaultDisplay(nits);
             }
diff --git a/services/core/java/com/android/server/display/DisplayPowerController2.java b/services/core/java/com/android/server/display/DisplayPowerController2.java
index 4db8777..25e704b 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController2.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController2.java
@@ -146,6 +146,8 @@
     private static final int MSG_SET_DWBC_COLOR_OVERRIDE = 15;
     private static final int MSG_SET_DWBC_LOGGING_ENABLED = 16;
 
+
+
     private static final int BRIGHTNESS_CHANGE_STATSD_REPORT_INTERVAL_MS = 500;
 
 
@@ -2239,7 +2241,8 @@
 
     @Override
     public void setBrightness(float brightnessValue, int userSerial) {
-        mDisplayBrightnessController.setBrightness(brightnessValue, userSerial);
+        mDisplayBrightnessController.setBrightness(clampScreenBrightness(brightnessValue),
+                userSerial);
     }
 
     @Override
@@ -2988,15 +2991,15 @@
                     hbmChangeCallback, hbmMetadata, context);
         }
 
-        boolean isColorFadeEnabled() {
-            return !ActivityManager.isLowRamDeviceStatic();
-        }
-
         DisplayWhiteBalanceController getDisplayWhiteBalanceController(Handler handler,
                 SensorManager sensorManager, Resources resources) {
             return DisplayWhiteBalanceFactory.create(handler,
                     sensorManager, resources);
         }
+
+        boolean isColorFadeEnabled() {
+            return !ActivityManager.isLowRamDeviceStatic();
+        }
     }
 
     static class CachedBrightnessInfo {
diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index 89d865e..b00b7a1 100644
--- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -70,7 +70,7 @@
 
     private static final String UNIQUE_ID_PREFIX = "local:";
 
-    private static final String PROPERTY_EMULATOR_CIRCULAR = "ro.emulator.circular";
+    private static final String PROPERTY_EMULATOR_CIRCULAR = "ro.boot.emulator.circular";
 
     private final LongSparseArray<LocalDisplayDevice> mDevices = new LongSparseArray<>();
 
diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java
index 4edc8bc..9c271ff5 100644
--- a/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -441,6 +441,9 @@
             if ((deviceInfo.flags & DisplayDeviceInfo.FLAG_ALWAYS_UNLOCKED) != 0) {
                 mBaseDisplayInfo.flags |= Display.FLAG_ALWAYS_UNLOCKED;
             }
+            if ((deviceInfo.flags & DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT) != 0) {
+                mBaseDisplayInfo.flags |= Display.FLAG_ROTATES_WITH_CONTENT;
+            }
             if ((deviceInfo.flags & DisplayDeviceInfo.FLAG_TOUCH_FEEDBACK_DISABLED) != 0) {
                 mBaseDisplayInfo.flags |= Display.FLAG_TOUCH_FEEDBACK_DISABLED;
             }
diff --git a/services/core/java/com/android/server/display/TEST_MAPPING b/services/core/java/com/android/server/display/TEST_MAPPING
index 5e4e270..6f243e1 100644
--- a/services/core/java/com/android/server/display/TEST_MAPPING
+++ b/services/core/java/com/android/server/display/TEST_MAPPING
@@ -8,20 +8,6 @@
                 {"exclude-annotation": "androidx.test.filters.FlakyTest"},
                 {"exclude-annotation": "org.junit.Ignore"}
             ]
-        },
-        {
-            "name": "CtsMediaProjectionTestCases",
-            "options": [
-                {
-                    "exclude-annotation": "android.platform.test.annotations.FlakyTest"
-                },
-                {
-                    "exclude-annotation": "androidx.test.filters.FlakyTest"
-                },
-                {
-                    "exclude-annotation": "org.junit.Ignore"
-                }
-            ]
         }
     ],
     "postsubmit": [
diff --git a/services/core/java/com/android/server/display/VirtualDisplayAdapter.java b/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
index 9f480b6..6936112 100644
--- a/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
@@ -80,8 +80,7 @@
     @VisibleForTesting
     static final String UNIQUE_ID_PREFIX = "virtual:";
 
-    private final ArrayMap<IBinder, VirtualDisplayDevice> mVirtualDisplayDevices =
-            new ArrayMap<IBinder, VirtualDisplayDevice>();
+    private final ArrayMap<IBinder, VirtualDisplayDevice> mVirtualDisplayDevices = new ArrayMap<>();
     private final Handler mHandler;
     private final SurfaceControlDisplayFactory mSurfaceControlDisplayFactory;
 
@@ -113,9 +112,16 @@
     public DisplayDevice createVirtualDisplayLocked(IVirtualDisplayCallback callback,
             IMediaProjection projection, int ownerUid, String ownerPackageName, Surface surface,
             int flags, VirtualDisplayConfig virtualDisplayConfig) {
+        IBinder appToken = callback.asBinder();
+        if (mVirtualDisplayDevices.containsKey(appToken)) {
+            Slog.wtfStack(TAG,
+                    "Can't create virtual display, display with same appToken already exists");
+            return null;
+        }
+
         String name = virtualDisplayConfig.getName();
         boolean secure = (flags & VIRTUAL_DISPLAY_FLAG_SECURE) != 0;
-        IBinder appToken = callback.asBinder();
+
         IBinder displayToken = mSurfaceControlDisplayFactory.createDisplay(name, secure,
                 virtualDisplayConfig.getRequestedRefreshRate());
         final String baseUniqueId =
diff --git a/services/core/java/com/android/server/display/brightness/BrightnessEvent.java b/services/core/java/com/android/server/display/brightness/BrightnessEvent.java
index a3bca9a..d4d1bae 100644
--- a/services/core/java/com/android/server/display/brightness/BrightnessEvent.java
+++ b/services/core/java/com/android/server/display/brightness/BrightnessEvent.java
@@ -19,10 +19,12 @@
 import android.hardware.display.BrightnessInfo;
 import android.os.PowerManager;
 import android.os.SystemClock;
-import android.util.TimeUtils;
 
 import com.android.internal.annotations.VisibleForTesting;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
 /**
  * Represents a particular brightness change event.
  */
@@ -34,6 +36,8 @@
     public static final int FLAG_IDLE_CURVE = 0x10;
     public static final int FLAG_LOW_POWER_MODE = 0x20;
 
+    private static final SimpleDateFormat FORMAT = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
+
     private BrightnessReason mReason = new BrightnessReason();
     private int mDisplayId;
     private String mPhysicalDisplayId;
@@ -169,7 +173,7 @@
      * @return A stringified BrightnessEvent
      */
     public String toString(boolean includeTime) {
-        return (includeTime ? TimeUtils.formatForLogging(mTime) + " - " : "")
+        return (includeTime ? FORMAT.format(new Date(mTime)) + " - " : "")
                 + "BrightnessEvent: "
                 + "disp=" + mDisplayId
                 + ", physDisp=" + mPhysicalDisplayId
diff --git a/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java b/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java
index 45f1be0..f141c20 100644
--- a/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java
+++ b/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java
@@ -119,7 +119,7 @@
         if (!mOldBrightnessStrategyName.equals(displayBrightnessStrategy.getName())) {
             Slog.i(TAG,
                     "Changing the DisplayBrightnessStrategy from " + mOldBrightnessStrategyName
-                            + " to" + displayBrightnessStrategy.getName() + " for display "
+                            + " to " + displayBrightnessStrategy.getName() + " for display "
                             + mDisplayId);
             mOldBrightnessStrategyName = displayBrightnessStrategy.getName();
         }
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 c0ea5fe..d8831fa 100644
--- a/services/core/java/com/android/server/display/color/ColorDisplayService.java
+++ b/services/core/java/com/android/server/display/color/ColorDisplayService.java
@@ -1696,11 +1696,10 @@
     @VisibleForTesting
     final class BinderService extends IColorDisplayManager.Stub {
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS)
         @Override
         public void setColorMode(int colorMode) {
-            getContext().enforceCallingOrSelfPermission(
-                    Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS,
-                    "Permission required to set display color mode");
+            setColorMode_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 setColorModeInternal(colorMode);
@@ -1790,11 +1789,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS)
         @Override
         public boolean setNightDisplayActivated(boolean activated) {
-            getContext().enforceCallingOrSelfPermission(
-                    Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS,
-                    "Permission required to set night display activated");
+            setNightDisplayActivated_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 mNightDisplayTintController.setActivated(activated);
@@ -1814,11 +1812,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS)
         @Override
         public boolean setNightDisplayColorTemperature(int temperature) {
-            getContext().enforceCallingOrSelfPermission(
-                    Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS,
-                    "Permission required to set night display temperature");
+            setNightDisplayColorTemperature_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 return mNightDisplayTintController.setColorTemperature(temperature);
@@ -1837,11 +1834,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS)
         @Override
         public boolean setNightDisplayAutoMode(int autoMode) {
-            getContext().enforceCallingOrSelfPermission(
-                    Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS,
-                    "Permission required to set night display auto mode");
+            setNightDisplayAutoMode_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 return setNightDisplayAutoModeInternal(autoMode);
@@ -1850,11 +1846,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS)
         @Override
         public int getNightDisplayAutoMode() {
-            getContext().enforceCallingOrSelfPermission(
-                    Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS,
-                    "Permission required to get night display auto mode");
+            getNightDisplayAutoMode_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 return getNightDisplayAutoModeInternal();
@@ -1873,11 +1868,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS)
         @Override
         public boolean setNightDisplayCustomStartTime(Time startTime) {
-            getContext().enforceCallingOrSelfPermission(
-                    Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS,
-                    "Permission required to set night display custom start time");
+            setNightDisplayCustomStartTime_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 return setNightDisplayCustomStartTimeInternal(startTime);
@@ -1896,11 +1890,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS)
         @Override
         public boolean setNightDisplayCustomEndTime(Time endTime) {
-            getContext().enforceCallingOrSelfPermission(
-                    Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS,
-                    "Permission required to set night display custom end time");
+            setNightDisplayCustomEndTime_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 return setNightDisplayCustomEndTimeInternal(endTime);
@@ -1919,11 +1912,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS)
         @Override
         public boolean setDisplayWhiteBalanceEnabled(boolean enabled) {
-            getContext().enforceCallingOrSelfPermission(
-                    Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS,
-                    "Permission required to set night display activated");
+            setDisplayWhiteBalanceEnabled_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 return setDisplayWhiteBalanceSettingEnabled(enabled);
@@ -1952,11 +1944,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS)
         @Override
         public boolean setReduceBrightColorsActivated(boolean activated) {
-            getContext().enforceCallingOrSelfPermission(
-                    Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS,
-                    "Permission required to set reduce bright colors activation state");
+            setReduceBrightColorsActivated_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 return setReduceBrightColorsActivatedInternal(activated);
@@ -1985,11 +1976,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS)
         @Override
         public boolean setReduceBrightColorsStrength(int strength) {
-            getContext().enforceCallingOrSelfPermission(
-                    Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS,
-                    "Permission required to set reduce bright colors strength");
+            setReduceBrightColorsStrength_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 return setReduceBrightColorsStrengthInternal(strength);
diff --git a/services/core/java/com/android/server/display/mode/DisplayModeDirector.java b/services/core/java/com/android/server/display/mode/DisplayModeDirector.java
index 82755b6..f15f036 100644
--- a/services/core/java/com/android/server/display/mode/DisplayModeDirector.java
+++ b/services/core/java/com/android/server/display/mode/DisplayModeDirector.java
@@ -2359,8 +2359,7 @@
         private final SparseBooleanArray mAuthenticationPossible = new SparseBooleanArray();
 
         public void observe() {
-            StatusBarManagerInternal statusBar =
-                    LocalServices.getService(StatusBarManagerInternal.class);
+            StatusBarManagerInternal statusBar = mInjector.getStatusBarManagerInternal();
             if (statusBar == null) {
                 return;
             }
@@ -2464,10 +2463,9 @@
 
         public void observe() {
             mDisplayManager = mContext.getSystemService(DisplayManager.class);
-            mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
+            mDisplayManagerInternal = mInjector.getDisplayManagerInternal();
 
-            final SensorManagerInternal sensorManager =
-                    LocalServices.getService(SensorManagerInternal.class);
+            final SensorManagerInternal sensorManager = mInjector.getSensorManagerInternal();
             sensorManager.addProximityActiveListener(BackgroundThread.getExecutor(), this);
 
             synchronized (mSensorObserverLock) {
@@ -2584,7 +2582,7 @@
             synchronized (mLock) {
                 setupHdrRefreshRates(mDefaultDisplayDeviceConfig);
             }
-            mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
+            mDisplayManagerInternal = mInjector.getDisplayManagerInternal();
             mInjector.registerDisplayListener(this, mHandler,
                     DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS
                     | DisplayManager.EVENT_FLAG_DISPLAY_REMOVED);
@@ -2825,6 +2823,12 @@
         boolean registerThermalServiceListener(IThermalEventListener listener);
 
         boolean supportsFrameRateOverride();
+
+        DisplayManagerInternal getDisplayManagerInternal();
+
+        StatusBarManagerInternal getStatusBarManagerInternal();
+
+        SensorManagerInternal getSensorManagerInternal();
     }
 
     @VisibleForTesting
@@ -2922,6 +2926,21 @@
             return SurfaceFlingerProperties.enable_frame_rate_override().orElse(true);
         }
 
+        @Override
+        public DisplayManagerInternal getDisplayManagerInternal() {
+            return LocalServices.getService(DisplayManagerInternal.class);
+        }
+
+        @Override
+        public StatusBarManagerInternal getStatusBarManagerInternal() {
+            return LocalServices.getService(StatusBarManagerInternal.class);
+        }
+
+        @Override
+        public SensorManagerInternal getSensorManagerInternal() {
+            return LocalServices.getService(SensorManagerInternal.class);
+        }
+
         private DisplayManager getDisplayManager() {
             if (mDisplayManager == null) {
                 mDisplayManager = mContext.getSystemService(DisplayManager.class);
diff --git a/services/core/java/com/android/server/graphics/fonts/FontManagerService.java b/services/core/java/com/android/server/graphics/fonts/FontManagerService.java
index ad640b1..c6a50ed 100644
--- a/services/core/java/com/android/server/graphics/fonts/FontManagerService.java
+++ b/services/core/java/com/android/server/graphics/fonts/FontManagerService.java
@@ -46,6 +46,7 @@
 import com.android.internal.util.DumpUtils;
 import com.android.internal.util.Preconditions;
 import com.android.server.LocalServices;
+import com.android.server.SystemServerInitThreadPool;
 import com.android.server.SystemService;
 
 import java.io.File;
@@ -61,6 +62,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.concurrent.CompletableFuture;
 
 /** A service for managing system fonts. */
 public final class FontManagerService extends IFontManager.Stub {
@@ -136,10 +138,11 @@
     /** Class to manage FontManagerService's lifecycle. */
     public static final class Lifecycle extends SystemService {
         private final FontManagerService mService;
+        private final CompletableFuture<Void> mServiceStarted = new CompletableFuture<>();
 
         public Lifecycle(@NonNull Context context, boolean safeMode) {
             super(context);
-            mService = new FontManagerService(context, safeMode);
+            mService = new FontManagerService(context, safeMode, mServiceStarted);
         }
 
         @Override
@@ -152,11 +155,20 @@
                             if (!Typeface.ENABLE_LAZY_TYPEFACE_INITIALIZATION) {
                                 return null;
                             }
+                            mServiceStarted.join();
                             return mService.getCurrentFontMap();
                         }
                     });
             publishBinderService(Context.FONT_SERVICE, mService);
         }
+
+        @Override
+        public void onBootPhase(int phase) {
+            if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {
+                // Wait for FontManagerService to start since it will be needed after this point.
+                mServiceStarted.join();
+            }
+        }
     }
 
     private static class FsverityUtilImpl implements UpdatableFontDir.FsverityUtil {
@@ -219,14 +231,30 @@
     @Nullable
     private SharedMemory mSerializedFontMap = null;
 
-    private FontManagerService(Context context, boolean safeMode) {
+    private FontManagerService(
+            Context context, boolean safeMode, CompletableFuture<Void> serviceStarted) {
         if (safeMode) {
             Slog.i(TAG, "Entering safe mode. Deleting all font updates.");
             UpdatableFontDir.deleteAllFiles(new File(FONT_FILES_DIR), new File(CONFIG_XML_FILE));
         }
         mContext = context;
         mIsSafeMode = safeMode;
-        initialize();
+
+        SystemServerInitThreadPool.submit(() -> {
+            initialize();
+
+            // Set system font map only if there is updatable font directory.
+            // If there is no updatable font directory, `initialize` will have already loaded the
+            // system font map, so there's no need to set the system font map again here.
+            if  (mUpdatableFontDir != null) {
+                try {
+                    Typeface.setSystemFontMap(getCurrentFontMap());
+                } catch (IOException | ErrnoException e) {
+                    Slog.w(TAG, "Failed to set system font map of system_server");
+                }
+            }
+            serviceStarted.complete(null);
+        }, "FontManagerService_create");
     }
 
     @Nullable
@@ -263,6 +291,9 @@
         synchronized (mUpdatableFontDirLock) {
             mUpdatableFontDir = createUpdatableFontDir();
             if (mUpdatableFontDir == null) {
+                // If fs-verity is not supported, load preinstalled system font map and use it for
+                // all apps.
+                Typeface.loadPreinstalledSystemFontMap();
                 setSerializedFontMap(serializeSystemServerFontMap());
                 return;
             }
diff --git a/services/core/java/com/android/server/hdmi/Constants.java b/services/core/java/com/android/server/hdmi/Constants.java
index 090d728..77213bf 100644
--- a/services/core/java/com/android/server/hdmi/Constants.java
+++ b/services/core/java/com/android/server/hdmi/Constants.java
@@ -601,6 +601,7 @@
     })
     @interface RcProfileSource {}
 
+    static final int HDMI_EARC_STATUS_UNKNOWN = -1;
     static final int HDMI_EARC_STATUS_IDLE = IEArcStatus.IDLE; // IDLE1
     static final int HDMI_EARC_STATUS_EARC_PENDING =
             IEArcStatus.EARC_PENDING; // DISC1 and DISC2
@@ -609,6 +610,7 @@
             IEArcStatus.EARC_CONNECTED; // eARC connected
 
     @IntDef({
+            HDMI_EARC_STATUS_UNKNOWN,
             HDMI_EARC_STATUS_IDLE,
             HDMI_EARC_STATUS_EARC_PENDING,
             HDMI_EARC_STATUS_ARC_PENDING,
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecAtomWriter.java b/services/core/java/com/android/server/hdmi/HdmiCecAtomWriter.java
index 9437c4f..53c0217 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecAtomWriter.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecAtomWriter.java
@@ -16,6 +16,11 @@
 
 package com.android.server.hdmi;
 
+import static com.android.server.hdmi.Constants.HDMI_EARC_STATUS_ARC_PENDING;
+import static com.android.server.hdmi.Constants.HDMI_EARC_STATUS_EARC_CONNECTED;
+import static com.android.server.hdmi.Constants.HDMI_EARC_STATUS_EARC_PENDING;
+import static com.android.server.hdmi.Constants.HDMI_EARC_STATUS_IDLE;
+
 import android.stats.hdmi.HdmiStatsEnums;
 
 import com.android.internal.annotations.VisibleForTesting;
@@ -193,6 +198,61 @@
     }
 
     /**
+     * Writes a HdmiEarcStatusReported atom representing a eARC status change.
+     * @param isSupported         Whether the hardware supports eARC.
+     * @param isEnabled           Whether eARC is enabled.
+     * @param oldConnectionState  If enumLogReason == HdmiStatsEnums.LOG_REASON_EARC_STATUS_CHANGED,
+     *                            the state just before the change. Otherwise, the current state.
+     * @param newConnectionState  If enumLogReason == HdmiStatsEnums.LOG_REASON_EARC_STATUS_CHANGED,
+     *                            the state just after the change. Otherwise, the current state.
+     * @param enumLogReason       The event that triggered the log.
+     */
+    public void earcStatusChanged(boolean isSupported, boolean isEnabled, int oldConnectionState,
+            int newConnectionState, int enumLogReason) {
+        int enumOldConnectionState = earcStateToEnum(oldConnectionState);
+        int enumNewConnectionState = earcStateToEnum(newConnectionState);
+
+        FrameworkStatsLog.write(
+                FrameworkStatsLog.HDMI_EARC_STATUS_REPORTED,
+                isSupported,
+                isEnabled,
+                enumOldConnectionState,
+                enumNewConnectionState,
+                enumLogReason
+        );
+    }
+
+    /**
+     * Writes a HdmiSoundbarModeStatusReported atom representing a Dynamic soundbar mode status
+     * change.
+     * @param isSupported         Whether the hardware supports ARC.
+     * @param isEnabled           Whether DSM is enabled.
+     * @param enumLogReason       The event that triggered the log.
+     */
+    public void dsmStatusChanged(boolean isSupported, boolean isEnabled, int enumLogReason) {
+        FrameworkStatsLog.write(
+                FrameworkStatsLog.HDMI_SOUNDBAR_MODE_STATUS_REPORTED,
+                isSupported,
+                isEnabled,
+                enumLogReason);
+    }
+
+    private int earcStateToEnum(int earcState) {
+        switch (earcState) {
+            case HDMI_EARC_STATUS_IDLE:
+                return HdmiStatsEnums.HDMI_EARC_STATUS_IDLE;
+            case HDMI_EARC_STATUS_EARC_PENDING:
+                return HdmiStatsEnums.HDMI_EARC_STATUS_EARC_PENDING;
+            case HDMI_EARC_STATUS_ARC_PENDING:
+                return HdmiStatsEnums.HDMI_EARC_STATUS_ARC_PENDING;
+            case HDMI_EARC_STATUS_EARC_CONNECTED:
+                return HdmiStatsEnums.HDMI_EARC_STATUS_EARC_CONNECTED;
+            default:
+                return HdmiStatsEnums.HDMI_EARC_STATUS_UNKNOWN;
+        }
+    }
+
+    /**
      * Contains the required arguments for creating any HdmiCecMessageReported atom
      */
     private class MessageReportedGenericArgs {
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecFeatureAction.java b/services/core/java/com/android/server/hdmi/HdmiCecFeatureAction.java
index 2e1ff03..5db114b 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecFeatureAction.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecFeatureAction.java
@@ -191,6 +191,11 @@
         mService.sendCecCommand(cmd, callback);
     }
 
+    protected final void sendCommandWithoutRetries(HdmiCecMessage cmd,
+            HdmiControlService.SendMessageCallback callback) {
+        mService.sendCecCommandWithoutRetries(cmd, callback);
+    }
+
     protected final void addAndStartAction(HdmiCecFeatureAction action) {
         mSource.addAndStartAction(action);
     }
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java b/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java
index 698ee0b..29ed9da 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java
@@ -213,7 +213,13 @@
         }
 
         private int toAndroidKeycodeIfMatched(byte[] cecKeycodeAndParams) {
-            if (Arrays.equals(mCecKeycodeAndParams, cecKeycodeAndParams)) {
+            if (cecKeycodeAndParams.length < mCecKeycodeAndParams.length) {
+                return UNSUPPORTED_KEYCODE;
+            }
+            byte[] trimmedCecKeycodeAndParams = new byte[mCecKeycodeAndParams.length];
+            System.arraycopy(cecKeycodeAndParams, 0, trimmedCecKeycodeAndParams, 0,
+                    mCecKeycodeAndParams.length);
+            if (Arrays.equals(mCecKeycodeAndParams, trimmedCecKeycodeAndParams)) {
                 return mAndroidKeycode;
             } else {
                 return UNSUPPORTED_KEYCODE;
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
index 7d0d5a7..207d38e 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
@@ -16,6 +16,8 @@
 
 package com.android.server.hdmi;
 
+import static com.android.server.hdmi.HdmiControlService.DEVICE_CLEANUP_TIMEOUT;
+
 import android.annotation.CallSuper;
 import android.hardware.hdmi.DeviceFeatures;
 import android.hardware.hdmi.HdmiControlManager;
@@ -61,9 +63,6 @@
     private static final int MAX_HDMI_ACTIVE_SOURCE_HISTORY = 10;
     private static final int MSG_DISABLE_DEVICE_TIMEOUT = 1;
     private static final int MSG_USER_CONTROL_RELEASE_TIMEOUT = 2;
-    // Timeout in millisecond for device clean up (5s).
-    // Normal actions timeout is 2s but some of them would have several sequence of timeout.
-    private static final int DEVICE_CLEANUP_TIMEOUT = 5000;
     // Within the timer, a received <User Control Pressed> will start "Press and Hold" behavior.
     // When it expires, we can assume <User Control Release> is received.
     private static final int FOLLOWER_SAFETY_TIMEOUT = 550;
@@ -175,6 +174,14 @@
             };
 
     /**
+     * A callback interface used by local devices use to indicate that they have finished their part
+     * of the standby process.
+     */
+    interface StandbyCompletedCallback {
+        void onStandbyCompleted();
+    }
+
+    /**
      * A callback interface to get notified when all pending action is cleared. It can be called
      * when timeout happened.
      */
@@ -1006,6 +1013,12 @@
         assertRunOnServiceThread();
         mActions.add(action);
         if (mService.isPowerStandby() || !mService.isAddressAllocated()) {
+            if (action.getClass() == ResendCecCommandAction.class) {
+                Slog.i(TAG, "Not ready to start ResendCecCommandAction. "
+                        + "This action is cancelled.");
+                removeAction(action);
+                return;
+            }
             Slog.i(TAG, "Not ready to start action. Queued for deferred start:" + action);
             return;
         }
@@ -1260,8 +1273,14 @@
      *     messages like &lt;Standby&gt;
      * @param standbyAction Intent action that drives the standby process, either {@link
      *     HdmiControlService#STANDBY_SCREEN_OFF} or {@link HdmiControlService#STANDBY_SHUTDOWN}
+     * @param callback callback invoked after the standby process for the local device is completed.
      */
-    protected void onStandby(boolean initiatedByCec, int standbyAction) {}
+    protected void onStandby(boolean initiatedByCec, int standbyAction,
+            StandbyCompletedCallback callback) {}
+
+    protected void onStandby(boolean initiatedByCec, int standbyAction) {
+        onStandby(initiatedByCec, standbyAction, null);
+    }
 
     /**
      * Called when the initialization of local devices is complete.
@@ -1282,6 +1301,7 @@
         removeAction(AbsoluteVolumeAudioStatusAction.class);
         removeAction(SetAudioVolumeLevelDiscoveryAction.class);
         removeAction(ActiveSourceAction.class);
+        removeAction(ResendCecCommandAction.class);
 
         mPendingActionClearedCallback =
                 new PendingActionClearedCallback() {
@@ -1422,6 +1442,16 @@
         }
     }
 
+    @ServiceThreadOnly
+    @VisibleForTesting
+    public void invokeStandbyCompletedCallback(StandbyCompletedCallback callback) {
+        assertRunOnServiceThread();
+        if (callback == null) {
+            return;
+        }
+        callback.onStandbyCompleted();
+    }
+
     void sendUserControlPressedAndReleased(int targetAddress, int cecKeycode) {
         mService.sendCecCommand(
                 HdmiCecMessageBuilder.buildUserControlPressed(
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java
index 184bdd7..b3aa351 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java
@@ -21,6 +21,7 @@
 import static com.android.server.hdmi.Constants.ALWAYS_SYSTEM_AUDIO_CONTROL_ON_POWER_ON;
 import static com.android.server.hdmi.Constants.PROPERTY_SYSTEM_AUDIO_CONTROL_ON_POWER_ON;
 import static com.android.server.hdmi.Constants.USE_LAST_STATE_SYSTEM_AUDIO_CONTROL_ON_POWER_ON;
+import static com.android.server.hdmi.HdmiControlService.SendMessageCallback;
 
 import android.annotation.Nullable;
 import android.content.ActivityNotFoundException;
@@ -243,7 +244,8 @@
 
     @Override
     @ServiceThreadOnly
-    protected void onStandby(boolean initiatedByCec, int standbyAction) {
+    protected void onStandby(boolean initiatedByCec, int standbyAction,
+            StandbyCompletedCallback callback) {
         assertRunOnServiceThread();
         // Invalidate the internal active source record when goes to standby
         // This set will also update mIsActiveSource
@@ -256,7 +258,7 @@
                     Constants.PROPERTY_LAST_SYSTEM_AUDIO_CONTROL,
                     isSystemAudioActivated() ? "true" : "false");
         }
-        terminateSystemAudioMode();
+        terminateSystemAudioMode(callback);
     }
 
     @Override
@@ -1092,9 +1094,16 @@
     }
 
     protected void terminateSystemAudioMode() {
+        terminateSystemAudioMode(null);
+    }
+
+    // Since this method is not just called during the standby process, the callback should be
+    // generalized in the future.
+    protected void terminateSystemAudioMode(StandbyCompletedCallback callback) {
         // remove pending initiation actions
         removeAction(SystemAudioInitiationActionFromAvr.class);
         if (!isSystemAudioActivated()) {
+            invokeStandbyCompletedCallback(callback);
             return;
         }
 
@@ -1102,7 +1111,13 @@
             // send <Set System Audio Mode> [“Off”]
             mService.sendCecCommand(
                     HdmiCecMessageBuilder.buildSetSystemAudioMode(
-                            getDeviceInfo().getLogicalAddress(), Constants.ADDR_BROADCAST, false));
+                            getDeviceInfo().getLogicalAddress(), Constants.ADDR_BROADCAST, false),
+                    new SendMessageCallback() {
+                        @Override
+                        public void onSendCompleted(int error) {
+                            invokeStandbyCompletedCallback(callback);
+                        }
+                    });
         }
     }
 
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
index c73a07d..dc416b2 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
@@ -28,7 +28,6 @@
 import android.os.Binder;
 import android.os.Handler;
 import android.os.PowerManager;
-import android.os.PowerManager.WakeLock;
 import android.os.SystemProperties;
 import android.sysprop.HdmiProperties;
 import android.util.Slog;
@@ -238,9 +237,11 @@
 
     @Override
     @ServiceThreadOnly
-    protected void onStandby(boolean initiatedByCec, int standbyAction) {
+    protected void onStandby(boolean initiatedByCec, int standbyAction,
+            StandbyCompletedCallback callback) {
         assertRunOnServiceThread();
         if (!mService.isCecControlEnabled()) {
+            invokeStandbyCompletedCallback(callback);
             return;
         }
         boolean wasActiveSource = isActiveSource();
@@ -248,12 +249,20 @@
         mService.setActiveSource(Constants.ADDR_INVALID, Constants.INVALID_PHYSICAL_ADDRESS,
                 "HdmiCecLocalDevicePlayback#onStandby()");
         if (!wasActiveSource) {
+            invokeStandbyCompletedCallback(callback);
             return;
         }
+        SendMessageCallback sendMessageCallback = new SendMessageCallback() {
+            @Override
+            public void onSendCompleted(int error) {
+                invokeStandbyCompletedCallback(callback);
+            }
+        };
         if (initiatedByCec) {
             mService.sendCecCommand(
                     HdmiCecMessageBuilder.buildInactiveSource(
-                            getDeviceInfo().getLogicalAddress(), mService.getPhysicalAddress()));
+                            getDeviceInfo().getLogicalAddress(), mService.getPhysicalAddress()),
+                    sendMessageCallback);
             return;
         }
         switch (standbyAction) {
@@ -266,7 +275,8 @@
                     case HdmiControlManager.POWER_CONTROL_MODE_TV:
                         mService.sendCecCommand(
                                 HdmiCecMessageBuilder.buildStandby(
-                                        getDeviceInfo().getLogicalAddress(), Constants.ADDR_TV));
+                                        getDeviceInfo().getLogicalAddress(), Constants.ADDR_TV),
+                                sendMessageCallback);
                         break;
                     case HdmiControlManager.POWER_CONTROL_MODE_TV_AND_AUDIO_SYSTEM:
                         mService.sendCecCommand(
@@ -275,19 +285,19 @@
                         mService.sendCecCommand(
                                 HdmiCecMessageBuilder.buildStandby(
                                         getDeviceInfo().getLogicalAddress(),
-                                        Constants.ADDR_AUDIO_SYSTEM));
+                                        Constants.ADDR_AUDIO_SYSTEM), sendMessageCallback);
                         break;
                     case HdmiControlManager.POWER_CONTROL_MODE_BROADCAST:
                         mService.sendCecCommand(
                                 HdmiCecMessageBuilder.buildStandby(
                                         getDeviceInfo().getLogicalAddress(),
-                                        Constants.ADDR_BROADCAST));
+                                        Constants.ADDR_BROADCAST), sendMessageCallback);
                         break;
                     case HdmiControlManager.POWER_CONTROL_MODE_NONE:
                         mService.sendCecCommand(
                                 HdmiCecMessageBuilder.buildInactiveSource(
                                         getDeviceInfo().getLogicalAddress(),
-                                        mService.getPhysicalAddress()));
+                                        mService.getPhysicalAddress()), sendMessageCallback);
                         break;
                 }
                 break;
@@ -295,7 +305,8 @@
                 // ACTION_SHUTDOWN is taken as a signal to power off all the devices.
                 mService.sendCecCommand(
                         HdmiCecMessageBuilder.buildStandby(
-                                getDeviceInfo().getLogicalAddress(), Constants.ADDR_BROADCAST));
+                                getDeviceInfo().getLogicalAddress(), Constants.ADDR_BROADCAST),
+                        sendMessageCallback);
                 break;
         }
     }
@@ -590,7 +601,7 @@
     }
 
     private class SystemWakeLock implements ActiveWakeLock {
-        private final WakeLock mWakeLock;
+        private final WakeLockWrapper mWakeLock;
         public SystemWakeLock() {
             mWakeLock = mService.getPowerManager().newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
             mWakeLock.setReferenceCounted(false);
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index effedce..6cca1bd 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -1185,7 +1185,11 @@
         if (mService.isSystemAudioActivated()) {
             return Constants.ABORT_NOT_IN_CORRECT_MODE;
         } else {
-            mService.setStreamMusicVolume(message.getAudioVolumeLevel(), 0);
+            int audioVolumeLevel = message.getAudioVolumeLevel();
+            if (audioVolumeLevel >= AudioStatus.MIN_VOLUME
+                    && audioVolumeLevel <= AudioStatus.MAX_VOLUME) {
+                mService.setStreamMusicVolume(audioVolumeLevel, 0);
+            }
             return Constants.HANDLED;
         }
     }
@@ -1396,10 +1400,12 @@
 
     @Override
     @ServiceThreadOnly
-    protected void onStandby(boolean initiatedByCec, int standbyAction) {
+    protected void onStandby(boolean initiatedByCec, int standbyAction,
+            StandbyCompletedCallback callback) {
         assertRunOnServiceThread();
         // Seq #11
         if (!mService.isCecControlEnabled()) {
+            invokeStandbyCompletedCallback(callback);
             return;
         }
         boolean sendStandbyOnSleep =
@@ -1409,7 +1415,15 @@
         if (!initiatedByCec && sendStandbyOnSleep) {
             mService.sendCecCommand(
                     HdmiCecMessageBuilder.buildStandby(
-                            getDeviceInfo().getLogicalAddress(), Constants.ADDR_BROADCAST));
+                            getDeviceInfo().getLogicalAddress(), Constants.ADDR_BROADCAST),
+                    new SendMessageCallback() {
+                        @Override
+                        public void onSendCompleted(int error) {
+                            invokeStandbyCompletedCallback(callback);
+                        }
+                    });
+        } else {
+            invokeStandbyCompletedCallback(callback);
         }
     }
 
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecMessageBuilder.java b/services/core/java/com/android/server/hdmi/HdmiCecMessageBuilder.java
index adcff4c..e9959c2 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecMessageBuilder.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecMessageBuilder.java
@@ -287,6 +287,17 @@
     }
 
     /**
+     * Build &lt;Image View On&gt; command.
+     *
+     * @param src source address of command
+     * @param dest destination address of command
+     * @return newly created {@link HdmiCecMessage}
+     */
+    static HdmiCecMessage buildImageViewOn(int src, int dest) {
+        return HdmiCecMessage.build(src, dest, Constants.MESSAGE_IMAGE_VIEW_ON);
+    }
+
+    /**
      * Build &lt;Request Active Source&gt; command.
      *
      * @param src source address of command
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecMessageValidator.java b/services/core/java/com/android/server/hdmi/HdmiCecMessageValidator.java
index da38a344..a15cb10 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecMessageValidator.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecMessageValidator.java
@@ -99,8 +99,7 @@
         // Messages related to the physical address.
         PhysicalAddressValidator physicalAddressValidator = new PhysicalAddressValidator();
         addValidationInfo(Constants.MESSAGE_ACTIVE_SOURCE,
-                physicalAddressValidator, ADDR_ALL ^ (ADDR_RECORDER_1 | ADDR_RECORDER_2
-                        | ADDR_AUDIO_SYSTEM | ADDR_RECORDER_3), ADDR_BROADCAST);
+                physicalAddressValidator, ADDR_ALL ^ ADDR_AUDIO_SYSTEM, ADDR_BROADCAST);
         addValidationInfo(Constants.MESSAGE_INACTIVE_SOURCE,
                 physicalAddressValidator, ADDR_NOT_UNREGISTERED, ADDR_DIRECT);
         addValidationInfo(Constants.MESSAGE_REPORT_PHYSICAL_ADDRESS,
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index 3eab4b0..5abb2b5 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -21,13 +21,16 @@
 import static android.hardware.hdmi.HdmiControlManager.EARC_FEATURE_DISABLED;
 import static android.hardware.hdmi.HdmiControlManager.EARC_FEATURE_ENABLED;
 import static android.hardware.hdmi.HdmiControlManager.HDMI_CEC_CONTROL_ENABLED;
+import static android.hardware.hdmi.HdmiControlManager.POWER_CONTROL_MODE_NONE;
 import static android.hardware.hdmi.HdmiControlManager.SOUNDBAR_MODE_DISABLED;
 import static android.hardware.hdmi.HdmiControlManager.SOUNDBAR_MODE_ENABLED;
+import static android.hardware.hdmi.HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED;
 
 import static com.android.server.hdmi.Constants.ADDR_UNREGISTERED;
 import static com.android.server.hdmi.Constants.DISABLED;
 import static com.android.server.hdmi.Constants.ENABLED;
 import static com.android.server.hdmi.Constants.HDMI_EARC_STATUS_ARC_PENDING;
+import static com.android.server.hdmi.Constants.HDMI_EARC_STATUS_UNKNOWN;
 import static com.android.server.hdmi.Constants.OPTION_MHL_ENABLE;
 import static com.android.server.hdmi.Constants.OPTION_MHL_INPUT_SWITCHING;
 import static com.android.server.hdmi.Constants.OPTION_MHL_POWER_CHARGE;
@@ -91,6 +94,7 @@
 import android.os.UserHandle;
 import android.provider.DeviceConfig;
 import android.provider.Settings.Global;
+import android.stats.hdmi.HdmiStatsEnums;
 import android.sysprop.HdmiProperties;
 import android.text.TextUtils;
 import android.util.ArrayMap;
@@ -108,6 +112,7 @@
 import com.android.server.hdmi.HdmiCecController.AllocateAddressCallback;
 import com.android.server.hdmi.HdmiCecLocalDevice.ActiveSource;
 import com.android.server.hdmi.HdmiCecLocalDevice.PendingActionClearedCallback;
+import com.android.server.hdmi.HdmiCecLocalDevice.StandbyCompletedCallback;
 
 import libcore.util.EmptyArray;
 
@@ -222,6 +227,10 @@
     public @interface WakeReason {
     }
 
+    // Timeout in millisecond for device clean up (5s).
+    // Normal actions timeout is 2s but some of them would have several sequences of timeout.
+    static final int DEVICE_CLEANUP_TIMEOUT = 5000;
+
     @VisibleForTesting
     static final AudioDeviceAttributes AUDIO_OUTPUT_DEVICE_HDMI = new AudioDeviceAttributes(
             AudioDeviceAttributes.ROLE_OUTPUT, AudioDeviceInfo.TYPE_HDMI, "");
@@ -490,6 +499,9 @@
     private DeviceConfigWrapper mDeviceConfig;
 
     @Nullable
+    private WakeLockWrapper mWakeLock;
+
+    @Nullable
     private PowerManagerWrapper mPowerManager;
 
     @Nullable
@@ -682,13 +694,13 @@
                 HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED);
 
         mSoundbarModeFeatureFlagEnabled = mDeviceConfig.getBoolean(
-                Constants.DEVICE_CONFIG_FEATURE_FLAG_SOUNDBAR_MODE, false);
+                Constants.DEVICE_CONFIG_FEATURE_FLAG_SOUNDBAR_MODE, true);
         mEarcTxFeatureFlagEnabled = mDeviceConfig.getBoolean(
-                Constants.DEVICE_CONFIG_FEATURE_FLAG_ENABLE_EARC_TX, false);
+                Constants.DEVICE_CONFIG_FEATURE_FLAG_ENABLE_EARC_TX, true);
         mTransitionFromArcToEarcTxEnabled = mDeviceConfig.getBoolean(
-                Constants.DEVICE_CONFIG_FEATURE_FLAG_TRANSITION_ARC_TO_EARC_TX, false);
+                Constants.DEVICE_CONFIG_FEATURE_FLAG_TRANSITION_ARC_TO_EARC_TX, true);
         mNumericSoundbarVolumeUiOnTvFeatureFlagEnabled = mDeviceConfig.getBoolean(
-                Constants.DEVICE_CONFIG_FEATURE_FLAG_TV_NUMERIC_SOUNDBAR_VOLUME_UI, false);
+                Constants.DEVICE_CONFIG_FEATURE_FLAG_TV_NUMERIC_SOUNDBAR_VOLUME_UI, true);
 
         synchronized (mLock) {
             mEarcEnabled = (mHdmiCecConfig.getIntValue(
@@ -845,7 +857,7 @@
                         public void onPropertiesChanged(DeviceConfig.Properties properties) {
                             mEarcTxFeatureFlagEnabled = properties.getBoolean(
                                     Constants.DEVICE_CONFIG_FEATURE_FLAG_ENABLE_EARC_TX,
-                                    false);
+                                    true);
                             boolean earcEnabledSetting = mHdmiCecConfig.getIntValue(
                                     HdmiControlManager.SETTING_NAME_EARC_ENABLED)
                                     == EARC_FEATURE_ENABLED;
@@ -879,7 +891,7 @@
                     public void onPropertiesChanged(DeviceConfig.Properties properties) {
                         mSoundbarModeFeatureFlagEnabled = properties.getBoolean(
                                 Constants.DEVICE_CONFIG_FEATURE_FLAG_SOUNDBAR_MODE,
-                                false);
+                                true);
                         boolean soundbarModeSetting = mHdmiCecConfig.getIntValue(
                                 HdmiControlManager.CEC_SETTING_NAME_SOUNDBAR_MODE)
                                 == SOUNDBAR_MODE_ENABLED;
@@ -905,7 +917,7 @@
                     public void onPropertiesChanged(DeviceConfig.Properties properties) {
                         mTransitionFromArcToEarcTxEnabled = properties.getBoolean(
                                 Constants.DEVICE_CONFIG_FEATURE_FLAG_TRANSITION_ARC_TO_EARC_TX,
-                                false);
+                                true);
                     }
                 });
 
@@ -915,7 +927,7 @@
                     public void onPropertiesChanged(DeviceConfig.Properties properties) {
                         mNumericSoundbarVolumeUiOnTvFeatureFlagEnabled = properties.getBoolean(
                                 Constants.DEVICE_CONFIG_FEATURE_FLAG_TV_NUMERIC_SOUNDBAR_VOLUME_UI,
-                                false);
+                                true);
                         checkAndUpdateAbsoluteVolumeBehavior();
                     }
                 });
@@ -1052,13 +1064,18 @@
      */
     @VisibleForTesting
     public void setSoundbarMode(final int settingValue) {
+        boolean isArcSupported = isArcSupported();
         HdmiCecLocalDevicePlayback playback = playback();
         HdmiCecLocalDeviceAudioSystem audioSystem = audioSystem();
+        getAtomWriter().dsmStatusChanged(isArcSupported,
+                settingValue == SOUNDBAR_MODE_ENABLED,
+                HdmiStatsEnums.LOG_REASON_DSM_SETTING_TOGGLED);
+
         if (playback == null) {
             Slog.w(TAG, "Device type not compatible to change soundbar mode.");
             return;
         }
-        if (!SystemProperties.getBoolean(Constants.PROPERTY_ARC_SUPPORT, true)) {
+        if (!isArcSupported) {
             Slog.w(TAG, "Device type doesn't support ARC.");
             return;
         }
@@ -1257,11 +1274,8 @@
     @ServiceThreadOnly
     private List<Integer> getCecLocalDeviceTypes() {
         ArrayList<Integer> allLocalDeviceTypes = new ArrayList<>(mCecLocalDevices);
-        if (mHdmiCecConfig.getIntValue(HdmiControlManager.CEC_SETTING_NAME_SOUNDBAR_MODE)
-                == SOUNDBAR_MODE_ENABLED
-                && !allLocalDeviceTypes.contains(HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM)
-                && SystemProperties.getBoolean(Constants.PROPERTY_ARC_SUPPORT, true)
-                && mSoundbarModeFeatureFlagEnabled) {
+        if (isDsmEnabled() && !allLocalDeviceTypes.contains(HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM)
+                && isArcSupported() && mSoundbarModeFeatureFlagEnabled) {
             allLocalDeviceTypes.add(HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM);
         }
         return allLocalDeviceTypes;
@@ -1506,6 +1520,51 @@
         }
     }
 
+    @ServiceThreadOnly
+    void sendCecCommand(HdmiCecMessage command) {
+        sendCecCommand(command, null);
+    }
+
+    @ServiceThreadOnly
+    void sendCecCommand(HdmiCecMessage command, @Nullable SendMessageCallback callback) {
+        switch (command.getOpcode()) {
+            case Constants.MESSAGE_ACTIVE_SOURCE:
+            case Constants.MESSAGE_IMAGE_VIEW_ON:
+            case Constants.MESSAGE_INACTIVE_SOURCE:
+            case Constants.MESSAGE_ROUTING_CHANGE:
+            case Constants.MESSAGE_SET_STREAM_PATH:
+            case Constants.MESSAGE_TEXT_VIEW_ON:
+                sendCecCommandWithRetries(command, callback);
+                break;
+            default:
+                sendCecCommandWithoutRetries(command, callback);
+        }
+    }
+
+    /**
+     * Create a {@link ResendCecCommandAction} that will retry sending the CEC message if it fails.
+     * @param command  command to be sent on the CEC bus.
+     * @param callback callback for handling the result of sending the command.
+     */
+    @ServiceThreadOnly
+    private void sendCecCommandWithRetries(HdmiCecMessage command,
+            @Nullable SendMessageCallback callback) {
+        assertRunOnServiceThread();
+        HdmiCecLocalDevice localDevice = getAllCecLocalDevices().get(0);
+        if (localDevice != null) {
+            sendCecCommandWithoutRetries(command, new SendMessageCallback() {
+                @Override
+                public void onSendCompleted(int result) {
+                    if (result != SendMessageResult.SUCCESS) {
+                        localDevice.addAndStartAction(new
+                                ResendCecCommandAction(localDevice, command, callback));
+                    }
+                }
+            });
+        }
+    }
+
+
     /**
      * Transmit a CEC command to CEC bus.
      *
@@ -1513,7 +1572,8 @@
      * @param callback interface used to the result of send command
      */
     @ServiceThreadOnly
-    void sendCecCommand(HdmiCecMessage command, @Nullable SendMessageCallback callback) {
+    void sendCecCommandWithoutRetries(HdmiCecMessage command,
+            @Nullable SendMessageCallback callback) {
         assertRunOnServiceThread();
         if (command.getValidationResult() == HdmiCecMessageValidator.OK
                 && verifyPhysicalAddresses(command)) {
@@ -1526,12 +1586,6 @@
         }
     }
 
-    @ServiceThreadOnly
-    void sendCecCommand(HdmiCecMessage command) {
-        assertRunOnServiceThread();
-        sendCecCommand(command, null);
-    }
-
     /**
      * Send <Feature Abort> command on the given CEC message if possible.
      * If the aborted message is invalid, then it wont send the message.
@@ -3013,7 +3067,7 @@
         }
         String powerControlMode = getHdmiCecConfig().getStringValue(
                 HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE);
-        if (powerControlMode.equals(HdmiControlManager.POWER_CONTROL_MODE_NONE)) {
+        if (powerControlMode.equals(POWER_CONTROL_MODE_NONE)) {
             return false;
         }
         int hdmiCecEnabled = getHdmiCecConfig().getIntValue(
@@ -3530,12 +3584,23 @@
         }
     }
 
-    private boolean isEarcSupported() {
+    @VisibleForTesting
+    protected boolean isEarcSupported() {
         synchronized (mLock) {
             return mEarcSupported;
         }
     }
 
+    private boolean isDsmEnabled() {
+        return mHdmiCecConfig.getIntValue(HdmiControlManager.CEC_SETTING_NAME_SOUNDBAR_MODE)
+                == SOUNDBAR_MODE_ENABLED;
+    }
+
+    @VisibleForTesting
+    protected boolean isArcSupported() {
+        return SystemProperties.getBoolean(Constants.PROPERTY_ARC_SUPPORT, true);
+    }
+
     @ServiceThreadOnly
     int getPowerStatus() {
         assertRunOnServiceThread();
@@ -3648,12 +3713,23 @@
                 setEarcEnabledInHal(false, false);
             }
         }
+        if (isTvDevice()) {
+            int earcStatus = getEarcStatus();
+            getAtomWriter().earcStatusChanged(isEarcSupported(), isEarcEnabled(),
+                    earcStatus, earcStatus, HdmiStatsEnums.LOG_REASON_WAKE);
+        } else if (isPlaybackDevice()) {
+            getAtomWriter().dsmStatusChanged(isArcSupported(), isDsmEnabled(),
+                    HdmiStatsEnums.LOG_REASON_DSM_WAKE);
+        }
         // TODO: Initialize MHL local devices.
     }
 
     @ServiceThreadOnly
     @VisibleForTesting
     protected void onStandby(final int standbyAction) {
+        if (shouldAcquireWakeLockOnStandby()) {
+            acquireWakeLock();
+        }
         mWakeUpMessageReceived = false;
         assertRunOnServiceThread();
         mPowerStatusController.setPowerStatus(HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY,
@@ -3719,7 +3795,8 @@
         return mMenuLanguage;
     }
 
-    private void disableCecLocalDevices(PendingActionClearedCallback callback) {
+    @VisibleForTesting
+    protected void disableCecLocalDevices(PendingActionClearedCallback callback) {
         if (mCecController != null) {
             for (HdmiCecLocalDevice device : mHdmiCecNetwork.getLocalDeviceList()) {
                 device.disableDevice(mStandbyMessageReceived, callback);
@@ -3747,25 +3824,81 @@
      * cleared during standby. In this case, it does not execute the standby flow.
      */
     @ServiceThreadOnly
-    private void onPendingActionsCleared(int standbyAction) {
+    @VisibleForTesting
+    protected void onPendingActionsCleared(int standbyAction) {
         assertRunOnServiceThread();
         Slog.v(TAG, "onPendingActionsCleared");
+        int localDevicesCount = getAllCecLocalDevices().size();
+        final int[] countStandbyCompletedDevices = new int[1];
+        StandbyCompletedCallback callback = new StandbyCompletedCallback() {
+            @Override
+            public void onStandbyCompleted() {
+                if (localDevicesCount < ++countStandbyCompletedDevices[0]) {
+                    return;
+                }
+
+                releaseWakeLock();
+                if (isAudioSystemDevice() || !isPowerStandby()) {
+                    return;
+                }
+                mCecController.enableSystemCecControl(false);
+                mMhlController.setOption(OPTION_MHL_SERVICE_CONTROL, DISABLED);
+            }
+        };
 
         if (mPowerStatusController.isPowerStatusTransientToStandby()) {
             mPowerStatusController.setPowerStatus(HdmiControlManager.POWER_STATUS_STANDBY);
             for (HdmiCecLocalDevice device : mHdmiCecNetwork.getLocalDeviceList()) {
-                device.onStandby(mStandbyMessageReceived, standbyAction);
-            }
-            if (!isAudioSystemDevice()) {
-                mCecController.enableSystemCecControl(false);
-                mMhlController.setOption(OPTION_MHL_SERVICE_CONTROL, DISABLED);
+                device.onStandby(mStandbyMessageReceived, standbyAction, callback);
             }
         }
-
         // Always reset this flag to set up for the next standby
         mStandbyMessageReceived = false;
     }
 
+    private boolean shouldAcquireWakeLockOnStandby() {
+        boolean sendStandbyOnSleep = false;
+        if (tv() != null) {
+            sendStandbyOnSleep = mHdmiCecConfig.getIntValue(
+                    HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP)
+                    == TV_SEND_STANDBY_ON_SLEEP_ENABLED;
+        } else if (playback() != null) {
+            sendStandbyOnSleep = !mHdmiCecConfig.getStringValue(
+                            HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE)
+                    .equals(POWER_CONTROL_MODE_NONE);
+        }
+
+        return isCecControlEnabled() && isPowerOnOrTransient() && sendStandbyOnSleep;
+    }
+
+    /**
+     * Acquire the wake lock used to hold the system awake until the standby process is finished.
+     */
+    @VisibleForTesting
+    protected void acquireWakeLock() {
+        releaseWakeLock();
+        mWakeLock = mPowerManager.newWakeLock(
+                PowerManager.PARTIAL_WAKE_LOCK, TAG);
+        mWakeLock.acquire(DEVICE_CLEANUP_TIMEOUT);
+    }
+
+    /**
+     * Release the wake lock acquired when the standby process started.
+     */
+    @VisibleForTesting
+    protected void releaseWakeLock() {
+        if (mWakeLock != null) {
+            try {
+                if (mWakeLock.isHeld()) {
+                    mWakeLock.release();
+                }
+            } catch (RuntimeException e) {
+                Slog.w(TAG, "Exception when releasing wake lock.");
+            }
+            mWakeLock = null;
+        }
+    }
+
     @VisibleForTesting
     void addVendorCommandListener(IHdmiVendorCommandListener listener, int vendorId) {
         VendorCommandListenerRecord record = new VendorCommandListenerRecord(listener, vendorId);
@@ -3786,6 +3919,7 @@
             if (mVendorCommandListenerRecords.isEmpty()) {
                 return false;
             }
+            boolean notifiedVendorCommandToListeners = false;
             for (VendorCommandListenerRecord record : mVendorCommandListenerRecords) {
                 if (hasVendorId) {
                     int vendorId =
@@ -3798,12 +3932,12 @@
                 }
                 try {
                     record.mListener.onReceived(srcAddress, destAddress, params, hasVendorId);
-                    return true;
+                    notifiedVendorCommandToListeners = true;
                 } catch (RemoteException e) {
                     Slog.e(TAG, "Failed to notify vendor command reception", e);
                 }
             }
-            return false;
+            return notifiedVendorCommandToListeners;
         }
     }
 
@@ -4678,6 +4812,17 @@
     }
 
     @ServiceThreadOnly
+    private int getEarcStatus() {
+        assertRunOnServiceThread();
+        if (mEarcLocalDevice != null) {
+            synchronized (mLock) {
+                return mEarcLocalDevice.mEarcStatus;
+            }
+        }
+        return HDMI_EARC_STATUS_UNKNOWN;
+    }
+
+    @ServiceThreadOnly
     @VisibleForTesting
     HdmiEarcLocalDevice getEarcLocalDevice() {
         assertRunOnServiceThread();
@@ -4725,17 +4870,29 @@
     @ServiceThreadOnly
     void handleEarcStateChange(int status, int portId) {
         assertRunOnServiceThread();
+        int oldEarcStatus = getEarcStatus();
         if (!getPortInfo(portId).isEarcSupported()) {
             Slog.w(TAG, "Tried to update eARC status on a port that doesn't support eARC.");
+            getAtomWriter().earcStatusChanged(isEarcSupported(), isEarcEnabled(), oldEarcStatus,
+                    status, HdmiStatsEnums.LOG_REASON_EARC_STATUS_CHANGED_UNSUPPORTED_PORT);
             return;
         }
         if (mEarcLocalDevice != null) {
             mEarcLocalDevice.handleEarcStateChange(status);
+            getAtomWriter().earcStatusChanged(isEarcSupported(), isEarcEnabled(),
+                    oldEarcStatus, status, HdmiStatsEnums.LOG_REASON_EARC_STATUS_CHANGED);
         } else if (status == HDMI_EARC_STATUS_ARC_PENDING) {
             // If eARC is disabled, the local device is null. This is why we notify
             // AudioService here that the eARC connection is terminated.
+            HdmiLogger.debug("eARC state change [new: HDMI_EARC_STATUS_ARC_PENDING(2)]");
             notifyEarcStatusToAudioService(false, new ArrayList<>());
             startArcAction(true, null);
+            getAtomWriter().earcStatusChanged(isEarcSupported(), isEarcEnabled(),
+                    oldEarcStatus, status, HdmiStatsEnums.LOG_REASON_EARC_STATUS_CHANGED);
+        } else {
+            getAtomWriter().earcStatusChanged(isEarcSupported(), isEarcEnabled(),
+                    oldEarcStatus, status,
+                    HdmiStatsEnums.LOG_REASON_EARC_STATUS_CHANGED_WRONG_STATE);
         }
     }
 
diff --git a/services/core/java/com/android/server/hdmi/PowerManagerWrapper.java b/services/core/java/com/android/server/hdmi/PowerManagerWrapper.java
index f081068..7530b3b 100644
--- a/services/core/java/com/android/server/hdmi/PowerManagerWrapper.java
+++ b/services/core/java/com/android/server/hdmi/PowerManagerWrapper.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.os.PowerManager;
-import android.os.PowerManager.WakeLock;
 
 /**
  * Abstraction around {@link PowerManager} to allow faking PowerManager in tests.
@@ -44,7 +43,54 @@
         mPowerManager.goToSleep(time, reason, flags);
     }
 
-    WakeLock newWakeLock(int levelAndFlags, String tag) {
-        return mPowerManager.newWakeLock(levelAndFlags, tag);
+    WakeLockWrapper newWakeLock(int levelAndFlags, String tag) {
+        return new DefaultWakeLockWrapper(mPowerManager.newWakeLock(levelAndFlags, tag));
+    }
+
+    /**
+     * "Default" wrapper for {@link PowerManager.WakeLock}, as opposed to a "Fake" wrapper for
+     * testing - see {@link FakePowerManagerWrapper.FakeWakeLockWrapper}.
+     *
+     * Stores an instance of {@link PowerManager.WakeLock} and directly passes method calls to that
+     * instance.
+     */
+    public static class DefaultWakeLockWrapper implements WakeLockWrapper {
+
+        private static final String TAG = "DefaultWakeLockWrapper";
+
+        private final PowerManager.WakeLock mWakeLock;
+
+        private DefaultWakeLockWrapper(PowerManager.WakeLock wakeLock) {
+            mWakeLock = wakeLock;
+        }
+
+        @Override
+        public void acquire(long timeout) {
+            mWakeLock.acquire(timeout);
+        }
+
+        @Override
+        public void acquire() {
+            mWakeLock.acquire();
+        }
+
+        /**
+         * @throws RuntimeException WakeLock can throw this exception if it is not released
+         * successfully.
+         */
+        @Override
+        public void release() throws RuntimeException {
+            mWakeLock.release();
+        }
+
+        @Override
+        public boolean isHeld() {
+            return mWakeLock.isHeld();
+        }
+
+        @Override
+        public void setReferenceCounted(boolean value) {
+            mWakeLock.setReferenceCounted(value);
+        }
     }
 }
diff --git a/services/core/java/com/android/server/hdmi/ResendCecCommandAction.java b/services/core/java/com/android/server/hdmi/ResendCecCommandAction.java
new file mode 100644
index 0000000..b130c46
--- /dev/null
+++ b/services/core/java/com/android/server/hdmi/ResendCecCommandAction.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.hdmi;
+
+import android.hardware.tv.hdmi.cec.SendMessageResult;
+import android.util.Slog;
+
+import com.android.server.hdmi.HdmiControlService.SendMessageCallback;
+
+/**
+ * Action that retries RETRANSMISSION_COUNT times to send a CEC command when the first attempt to
+ * send the message failed.
+ *
+ * This action starts with a delay of SEND_COMMAND_RETRY_MS milliseconds.
+ *
+ * If this action can't be started it will be canceled and not deferred.
+ * See {@link HdmiCecLocalDevice#addAndStartAction}.
+ */
+public class ResendCecCommandAction extends HdmiCecFeatureAction {
+    private static final String TAG = "ResendCecCommandAction";
+    private static final int RETRANSMISSION_COUNT = 1;
+    private static final int STATE_WAIT_FOR_RESEND_COMMAND = 1;
+    static final int SEND_COMMAND_RETRY_MS = 300;
+
+    private final HdmiCecMessage mCommand;
+    private int mRetransmissionCount = 0;
+    private final SendMessageCallback mResultCallback;
+    private final SendMessageCallback mCallback = new SendMessageCallback(){
+        @Override
+        public void onSendCompleted(int result) {
+            if (result != SendMessageResult.SUCCESS
+                    && mRetransmissionCount++ < RETRANSMISSION_COUNT) {
+                mState = STATE_WAIT_FOR_RESEND_COMMAND;
+                addTimer(mState, SEND_COMMAND_RETRY_MS);
+            } else {
+                if (mResultCallback != null) {
+                    mResultCallback.onSendCompleted(result);
+                }
+                finish();
+            }
+        }
+    };
+
+    ResendCecCommandAction(HdmiCecLocalDevice source, HdmiCecMessage command,
+            SendMessageCallback callback) {
+        super(source);
+        mCommand = command;
+        mResultCallback = callback;
+        mState = STATE_WAIT_FOR_RESEND_COMMAND;
+        addTimer(mState, SEND_COMMAND_RETRY_MS);
+    }
+
+    @Override
+    boolean start() {
+        Slog.d(TAG, "ResendCecCommandAction started");
+        return true;
+    }
+
+    @Override
+    void handleTimerEvent(int state) {
+        if (mState != state) {
+            Slog.w(TAG, "Timeout in invalid state:[Expected:" + mState + ", Actual:" + state
+                    + "]");
+            return;
+        }
+        if (mState == STATE_WAIT_FOR_RESEND_COMMAND) {
+            Slog.d(TAG, "sendCommandWithoutRetries failed, retry");
+            sendCommandWithoutRetries(mCommand, mCallback);
+        }
+    }
+
+    @Override
+    boolean processCommand(HdmiCecMessage command) {
+        return false;
+    }
+}
diff --git a/services/core/java/com/android/server/hdmi/WakeLockWrapper.java b/services/core/java/com/android/server/hdmi/WakeLockWrapper.java
new file mode 100644
index 0000000..f689910
--- /dev/null
+++ b/services/core/java/com/android/server/hdmi/WakeLockWrapper.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.hdmi;
+
+/**
+ * Interface with the methods from {@link PowerManager.WakeLock} used by the HDMI control framework.
+ * Allows the class to be faked for the tests.
+ *
+ * See implementations {@link DefaultWakeLockWrapper} and
+ * {@link FakePowerManagerWrapper.FakeWakeLockWrapper}.
+ */
+public interface WakeLockWrapper {
+
+    /**
+     * Wraps {@link PowerManager.WakeLock#acquire(long)};
+     */
+    void acquire(long timeout);
+
+    /**
+     * Wraps {@link PowerManager.WakeLock#acquire()};
+     */
+    void acquire();
+
+    /**
+     * Wraps {@link PowerManager.WakeLock#release()};
+     */
+    void release();
+
+    /**
+     * Wraps {@link PowerManager.WakeLock#isHeld()};
+     */
+    boolean isHeld();
+
+    /**
+     * Wraps {@link PowerManager.WakeLock#setReferenceCounted(boolean)};
+     */
+    void setReferenceCounted(boolean value);
+}
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index 030f399..6241ebb 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -2648,18 +2648,6 @@
 
     // Native callback.
     @SuppressWarnings("unused")
-    private int getKeyRepeatTimeout() {
-        return ViewConfiguration.getKeyRepeatTimeout();
-    }
-
-    // Native callback.
-    @SuppressWarnings("unused")
-    private int getKeyRepeatDelay() {
-        return ViewConfiguration.getKeyRepeatDelay();
-    }
-
-    // Native callback.
-    @SuppressWarnings("unused")
     private int getHoverTapTimeout() {
         return ViewConfiguration.getHoverTapTimeout();
     }
@@ -2742,11 +2730,12 @@
 
     // Native callback.
     @SuppressWarnings("unused")
-    private String[] getKeyboardLayoutOverlay(InputDeviceIdentifier identifier) {
+    private String[] getKeyboardLayoutOverlay(InputDeviceIdentifier identifier, String languageTag,
+            String layoutType) {
         if (!mSystemReady) {
             return null;
         }
-        return mKeyboardLayoutManager.getKeyboardLayoutOverlay(identifier);
+        return mKeyboardLayoutManager.getKeyboardLayoutOverlay(identifier, languageTag, layoutType);
     }
 
     @EnforcePermission(Manifest.permission.REMAP_MODIFIER_KEYS)
diff --git a/services/core/java/com/android/server/input/InputSettingsObserver.java b/services/core/java/com/android/server/input/InputSettingsObserver.java
index a608b4f..cf7c692 100644
--- a/services/core/java/com/android/server/input/InputSettingsObserver.java
+++ b/services/core/java/com/android/server/input/InputSettingsObserver.java
@@ -47,6 +47,9 @@
     private final NativeInputManagerService mNative;
     private final Map<Uri, Consumer<String /* reason*/>> mObservers;
 
+    // Cache prevent notifying same KeyRepeatInfo data to native code multiple times.
+    private KeyRepeatInfo mLastKeyRepeatInfoSettingsUpdate;
+
     InputSettingsObserver(Context context, Handler handler, InputManagerService service,
             NativeInputManagerService nativeIms) {
         super(handler);
@@ -79,7 +82,11 @@
                                 Settings.Global.MAXIMUM_OBSCURING_OPACITY_FOR_TOUCH),
                         (reason) -> updateMaximumObscuringOpacityForTouch()),
                 Map.entry(Settings.System.getUriFor(Settings.System.SHOW_KEY_PRESSES),
-                        (reason) -> updateShowKeyPresses()));
+                        (reason) -> updateShowKeyPresses()),
+                Map.entry(Settings.Secure.getUriFor(Settings.Secure.KEY_REPEAT_TIMEOUT_MS),
+                        (reason) -> updateKeyRepeatInfo(getLatestLongPressTimeoutValue())),
+                Map.entry(Settings.Secure.getUriFor(Settings.Secure.KEY_REPEAT_DELAY_MS),
+                        (reason) -> updateKeyRepeatInfo(getLatestLongPressTimeoutValue())));
     }
 
     /**
@@ -170,27 +177,48 @@
     }
 
     private void updateLongPressTimeout(String reason) {
-        // Some key gesture timeouts are based on the long press timeout, so update key gesture
-        // timeouts when the value changes. See ViewConfiguration#getKeyRepeatTimeout().
-        mNative.notifyKeyGestureTimeoutsChanged();
+        final int longPressTimeoutValue = getLatestLongPressTimeoutValue();
 
-        // Update the deep press status.
-        // Not using ViewConfiguration.getLongPressTimeout here because it may return a stale value.
-        final int timeout = Settings.Secure.getIntForUser(mContext.getContentResolver(),
-                Settings.Secure.LONG_PRESS_TIMEOUT, ViewConfiguration.DEFAULT_LONG_PRESS_TIMEOUT,
-                UserHandle.USER_CURRENT);
+        // Before the key repeat timeout was introduced, some users relied on changing
+        // LONG_PRESS_TIMEOUT settings to also change the key repeat timeout. To support this
+        // backward compatibility, we'll preemptively update key repeat info here, in case where
+        // key repeat timeout was never set, and user is still relying on long press timeout value.
+        updateKeyRepeatInfo(longPressTimeoutValue);
+
         final boolean featureEnabledFlag =
                 DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_INPUT_NATIVE_BOOT,
                         DEEP_PRESS_ENABLED, true /* default */);
         final boolean enabled =
-                featureEnabledFlag && timeout <= ViewConfiguration.DEFAULT_LONG_PRESS_TIMEOUT;
-        Log.i(TAG,
-                (enabled ? "Enabling" : "Disabling") + " motion classifier because " + reason
+                featureEnabledFlag
+                        && longPressTimeoutValue <= ViewConfiguration.DEFAULT_LONG_PRESS_TIMEOUT;
+        Log.i(TAG, (enabled ? "Enabling" : "Disabling") + " motion classifier because " + reason
                 + ": feature " + (featureEnabledFlag ? "enabled" : "disabled")
-                + ", long press timeout = " + timeout);
+                + ", long press timeout = " + longPressTimeoutValue);
         mNative.setMotionClassifierEnabled(enabled);
     }
 
+    private void updateKeyRepeatInfo(int fallbackKeyRepeatTimeoutValue) {
+        // Not using ViewConfiguration.getKeyRepeatTimeout here because it may return a stale value.
+        final int timeoutMs = Settings.Secure.getIntForUser(mContext.getContentResolver(),
+                Settings.Secure.KEY_REPEAT_TIMEOUT_MS, fallbackKeyRepeatTimeoutValue,
+                UserHandle.USER_CURRENT);
+        final int delayMs = Settings.Secure.getIntForUser(mContext.getContentResolver(),
+                Settings.Secure.KEY_REPEAT_DELAY_MS, ViewConfiguration.getKeyRepeatDelay(),
+                UserHandle.USER_CURRENT);
+        if (mLastKeyRepeatInfoSettingsUpdate == null || !mLastKeyRepeatInfoSettingsUpdate.isEqualTo(
+                timeoutMs, delayMs)) {
+            mNative.setKeyRepeatConfiguration(timeoutMs, delayMs);
+            mLastKeyRepeatInfoSettingsUpdate = new KeyRepeatInfo(timeoutMs, delayMs);
+        }
+    }
+
+    // Not using ViewConfiguration.getLongPressTimeout here because it may return a stale value.
+    private int getLatestLongPressTimeoutValue() {
+        return Settings.Secure.getIntForUser(mContext.getContentResolver(),
+                Settings.Secure.LONG_PRESS_TIMEOUT, ViewConfiguration.DEFAULT_LONG_PRESS_TIMEOUT,
+                UserHandle.USER_CURRENT);
+    }
+
     private void updateMaximumObscuringOpacityForTouch() {
         final float opacity = InputSettings.getMaximumObscuringOpacityForTouch(mContext);
         if (opacity < 0 || opacity > 1) {
@@ -200,4 +228,19 @@
         }
         mNative.setMaximumObscuringOpacityForTouch(opacity);
     }
+
+    private static class KeyRepeatInfo {
+        private final int mKeyRepeatTimeoutMs;
+        private final int mKeyRepeatDelayMs;
+
+        private KeyRepeatInfo(int keyRepeatTimeoutMs, int keyRepeatDelayMs) {
+            this.mKeyRepeatTimeoutMs = keyRepeatTimeoutMs;
+            this.mKeyRepeatDelayMs = keyRepeatDelayMs;
+        }
+
+        public boolean isEqualTo(int keyRepeatTimeoutMs, int keyRepeatDelayMs) {
+            return mKeyRepeatTimeoutMs == keyRepeatTimeoutMs
+                    && mKeyRepeatDelayMs == keyRepeatDelayMs;
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/input/InputShellCommand.java b/services/core/java/com/android/server/input/InputShellCommand.java
index 5132591..16b23ca 100644
--- a/services/core/java/com/android/server/input/InputShellCommand.java
+++ b/services/core/java/com/android/server/input/InputShellCommand.java
@@ -74,6 +74,8 @@
     private static final int DEFAULT_EDGE_FLAGS = 0;
     private static final int DEFAULT_BUTTON_STATE = 0;
     private static final int DEFAULT_FLAGS = 0;
+    private static final boolean INJECT_ASYNC = true;
+    private static final boolean INJECT_SYNC = false;
 
     /** Modifier key to meta state */
     private static final Map<Integer, Integer> MODIFIER;
@@ -109,9 +111,11 @@
         SOURCES = unmodifiableMap(map);
     }
 
-    private void injectKeyEvent(KeyEvent event) {
-        InputManagerGlobal.getInstance().injectInputEvent(event,
-                InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);
+    private void injectKeyEvent(KeyEvent event, boolean async) {
+        int injectMode = async
+                ? InputManager.INJECT_INPUT_EVENT_MODE_ASYNC
+                : InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH;
+        InputManagerGlobal.getInstance().injectInputEvent(event, injectMode);
     }
 
     private int getInputDeviceId(int inputSource) {
@@ -271,7 +275,9 @@
             out.println();
             out.println("The commands and default sources are:");
             out.println("      text <string> (Default: touchscreen)");
-            out.println("      keyevent [--longpress|--doubletap] <key code number or name> ..."
+            out.println("      keyevent [--longpress|--doubletap|--async"
+                    + "|--delay <duration between keycodes in ms>]"
+                    + " <key code number or name> ..."
                     + " (Default: keyboard)");
             out.println("      tap <x> <y> (Default: touchscreen)");
             out.println("      swipe <x1> <y1> <x2> <y2> [duration(ms)]"
@@ -322,32 +328,45 @@
                 e.setSource(source);
             }
             e.setDisplayId(displayId);
-            injectKeyEvent(e);
+            injectKeyEvent(e, INJECT_SYNC);
         }
     }
 
     private void runKeyEvent(int inputSource, int displayId) {
-        String arg = getNextArgRequired();
-        final boolean longpress = "--longpress".equals(arg);
-        if (longpress) {
-            arg = getNextArgRequired();
-        } else {
-            final boolean doubleTap = "--doubletap".equals(arg);
-            if (doubleTap) {
-                arg = getNextArgRequired();
-                final int keycode = KeyEvent.keyCodeFromString(arg);
-                sendKeyDoubleTap(inputSource, keycode, displayId);
-                return;
-            }
-        }
+        boolean longPress = false;
+        boolean async = false;
+        boolean doubleTap = false;
+        long delayMs = 0;
 
+        String arg = getNextArgRequired();
         do {
-            final int keycode = KeyEvent.keyCodeFromString(arg);
-            sendKeyEvent(inputSource, keycode, longpress, displayId);
+            if (!arg.startsWith("--")) break;
+            longPress = (longPress || arg.equals("--longpress"));
+            async = (async || arg.equals("--async"));
+            doubleTap = (doubleTap || arg.equals("--doubletap"));
+            if (arg.equals("--delay")) {
+                delayMs = Long.parseLong(getNextArgRequired());
+            }
+        } while ((arg = getNextArg()) != null);
+
+        boolean firstInput = true;
+        do {
+            if (!firstInput && delayMs > 0) {
+                sleep(delayMs);
+            }
+            firstInput = false;
+
+            final int keyCode = KeyEvent.keyCodeFromString(arg);
+            sendKeyEvent(inputSource, keyCode, longPress, displayId, async);
+            if (doubleTap) {
+                sleep(ViewConfiguration.getDoubleTapMinTime());
+                sendKeyEvent(inputSource, keyCode, longPress, displayId, async);
+            }
         } while ((arg = getNextArg()) != null);
     }
 
-    private void sendKeyEvent(int inputSource, int keyCode, boolean longpress, int displayId) {
+    private void sendKeyEvent(
+            int inputSource, int keyCode, boolean longPress, int displayId, boolean async) {
         final long now = SystemClock.uptimeMillis();
 
         KeyEvent event = new KeyEvent(now, now, KeyEvent.ACTION_DOWN, keyCode, 0 /* repeatCount */,
@@ -355,21 +374,16 @@
                 inputSource);
         event.setDisplayId(displayId);
 
-        injectKeyEvent(event);
-        if (longpress) {
+        injectKeyEvent(event, async);
+        if (longPress) {
             sleep(ViewConfiguration.getLongPressTimeout());
             // Some long press behavior would check the event time, we set a new event time here.
             final long nextEventTime = now + ViewConfiguration.getLongPressTimeout();
-            injectKeyEvent(KeyEvent.changeTimeRepeat(event, nextEventTime, 1 /* repeatCount */,
-                    KeyEvent.FLAG_LONG_PRESS));
+            KeyEvent longPressEvent = KeyEvent.changeTimeRepeat(
+                    event, nextEventTime, 1 /* repeatCount */, KeyEvent.FLAG_LONG_PRESS);
+            injectKeyEvent(longPressEvent, async);
         }
-        injectKeyEvent(KeyEvent.changeAction(event, KeyEvent.ACTION_UP));
-    }
-
-    private void sendKeyDoubleTap(int inputSource, int keyCode, int displayId) {
-        sendKeyEvent(inputSource, keyCode, false, displayId);
-        sleep(ViewConfiguration.getDoubleTapMinTime());
-        sendKeyEvent(inputSource, keyCode, false, displayId);
+        injectKeyEvent(KeyEvent.changeAction(event, KeyEvent.ACTION_UP), async);
     }
 
     private void runTap(int inputSource, int displayId) {
@@ -530,11 +544,6 @@
         sendKeyCombination(inputSource, keyCodes, displayId, duration);
     }
 
-    private void injectKeyEventAsync(KeyEvent event) {
-        InputManagerGlobal.getInstance().injectInputEvent(event,
-                InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
-    }
-
     private void sendKeyCombination(int inputSource, IntArray keyCodes, int displayId,
             long duration) {
         final long now = SystemClock.uptimeMillis();
@@ -555,7 +564,7 @@
         for (KeyEvent event: events) {
             // Use async inject so interceptKeyBeforeQueueing or interceptKeyBeforeDispatching could
             // handle keys.
-            injectKeyEventAsync(event);
+            injectKeyEvent(event, INJECT_ASYNC);
         }
 
         sleep(duration);
@@ -565,7 +574,7 @@
             final KeyEvent upEvent = new KeyEvent(now, now, KeyEvent.ACTION_UP, keyCode,
                     0, metaState, KeyCharacterMap.VIRTUAL_KEYBOARD, 0 /*scancode*/, 0 /*flags*/,
                     inputSource);
-            injectKeyEventAsync(upEvent);
+            injectKeyEvent(upEvent, INJECT_ASYNC);
             metaState &= ~MODIFIER.getOrDefault(keyCode, 0);
         }
     }
diff --git a/services/core/java/com/android/server/input/KeyboardLayoutManager.java b/services/core/java/com/android/server/input/KeyboardLayoutManager.java
index 7a8de34..a5162c0 100644
--- a/services/core/java/com/android/server/input/KeyboardLayoutManager.java
+++ b/services/core/java/com/android/server/input/KeyboardLayoutManager.java
@@ -25,6 +25,7 @@
 import android.annotation.MainThread;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.SuppressLint;
 import android.annotation.UserIdInt;
 import android.app.Notification;
 import android.app.NotificationManager;
@@ -109,7 +110,6 @@
     private static final int MSG_SWITCH_KEYBOARD_LAYOUT = 2;
     private static final int MSG_RELOAD_KEYBOARD_LAYOUTS = 3;
     private static final int MSG_UPDATE_KEYBOARD_LAYOUTS = 4;
-    private static final int MSG_CURRENT_IME_INFO_CHANGED = 5;
 
     private final Context mContext;
     private final NativeInputManagerService mNative;
@@ -169,7 +169,9 @@
     @Override
     @MainThread
     public void onInputDeviceAdded(int deviceId) {
-        onInputDeviceChanged(deviceId);
+        // Logging keyboard configuration data to statsd whenever input device is added. Currently
+        // only logging for New Settings UI where we are using IME to decide the layout information.
+        onInputDeviceChangedInternal(deviceId, true /* shouldLogConfiguration */);
     }
 
     @Override
@@ -182,10 +184,15 @@
     @Override
     @MainThread
     public void onInputDeviceChanged(int deviceId) {
+        onInputDeviceChangedInternal(deviceId, false /* shouldLogConfiguration */);
+    }
+
+    private void onInputDeviceChangedInternal(int deviceId, boolean shouldLogConfiguration) {
         final InputDevice inputDevice = getInputDevice(deviceId);
         if (inputDevice == null || inputDevice.isVirtual() || !inputDevice.isFullKeyboard()) {
             return;
         }
+        final KeyboardIdentifier keyboardIdentifier = new KeyboardIdentifier(inputDevice);
         KeyboardConfiguration config = mConfiguredKeyboards.get(deviceId);
         if (config == null) {
             config = new KeyboardConfiguration();
@@ -202,8 +209,6 @@
                         setCurrentKeyboardLayoutForInputDevice(inputDevice.getIdentifier(), layout);
                     }
                 }
-                config.setCurrentLayout(
-                        new KeyboardLayoutInfo(layout, LAYOUT_SELECTION_CRITERIA_USER));
                 if (layout == null) {
                     // In old settings show notification always until user manually selects a
                     // layout in the settings.
@@ -211,16 +216,14 @@
                 }
             }
         } else {
-            final InputDeviceIdentifier identifier = inputDevice.getIdentifier();
-            final String key = getLayoutDescriptor(identifier);
             Set<String> selectedLayouts = new HashSet<>();
             List<ImeInfo> imeInfoList = getImeInfoListForLayoutMapping();
             List<KeyboardLayoutInfo> layoutInfoList = new ArrayList<>();
             boolean hasMissingLayout = false;
             for (ImeInfo imeInfo : imeInfoList) {
                 // Check if the layout has been previously configured
-                KeyboardLayoutInfo layoutInfo = getKeyboardLayoutForInputDeviceInternal(identifier,
-                        imeInfo);
+                KeyboardLayoutInfo layoutInfo = getKeyboardLayoutForInputDeviceInternal(
+                        keyboardIdentifier, imeInfo);
                 boolean noLayoutFound = layoutInfo == null || layoutInfo.mDescriptor == null;
                 if (!noLayoutFound) {
                     selectedLayouts.add(layoutInfo.mDescriptor);
@@ -231,8 +234,8 @@
 
             if (DEBUG) {
                 Slog.d(TAG,
-                        "Layouts selected for input device: " + identifier + " -> selectedLayouts: "
-                                + selectedLayouts);
+                        "Layouts selected for input device: " + keyboardIdentifier
+                                + " -> selectedLayouts: " + selectedLayouts);
             }
 
             // If even one layout not configured properly, we need to ask user to configure
@@ -243,30 +246,18 @@
 
             config.setConfiguredLayouts(selectedLayouts);
 
-            // Update current layout: If there is a change then need to reload.
-            synchronized (mImeInfoLock) {
-                KeyboardLayoutInfo layoutInfo = getKeyboardLayoutForInputDeviceInternal(
-                        inputDevice.getIdentifier(), mCurrentImeInfo);
-                if (!Objects.equals(layoutInfo, config.getCurrentLayout())) {
-                    config.setCurrentLayout(layoutInfo);
-                    mHandler.sendEmptyMessage(MSG_RELOAD_KEYBOARD_LAYOUTS);
-                }
-            }
-
             synchronized (mDataStore) {
                 try {
-                    boolean isFirstConfiguration = !mDataStore.hasInputDeviceEntry(key);
+                    final String key = keyboardIdentifier.toString();
                     if (mDataStore.setSelectedKeyboardLayouts(key, selectedLayouts)) {
                         // Need to show the notification only if layout selection changed
                         // from the previous configuration
                         needToShowNotification = true;
+                    }
 
-                        // Logging keyboard configuration data to statsd only if the
-                        // configuration changed from the previous configuration. Currently
-                        // only logging for New Settings UI where we are using IME to decide
-                        // the layout information.
+                    if (shouldLogConfiguration) {
                         logKeyboardConfigurationEvent(inputDevice, imeInfoList, layoutInfoList,
-                                isFirstConfiguration);
+                                !mDataStore.hasInputDeviceEntry(key));
                     }
                 } finally {
                     mDataStore.saveIfNeeded();
@@ -563,35 +554,6 @@
         return LocaleList.forLanguageTags(languageTags.replace('|', ','));
     }
 
-    private String getLayoutDescriptor(@NonNull InputDeviceIdentifier identifier) {
-        Objects.requireNonNull(identifier, "identifier must not be null");
-        Objects.requireNonNull(identifier.getDescriptor(), "descriptor must not be null");
-
-        if (identifier.getVendorId() == 0 && identifier.getProductId() == 0) {
-            return identifier.getDescriptor();
-        }
-        // If vendor id and product id is available, use it as keys. This allows us to have the
-        // same setup for all keyboards with same product and vendor id. i.e. User can swap 2
-        // identical keyboards and still get the same setup.
-        StringBuilder key = new StringBuilder();
-        key.append("vendor:").append(identifier.getVendorId()).append(",product:").append(
-                identifier.getProductId());
-
-        if (useNewSettingsUi()) {
-            InputDevice inputDevice = getInputDevice(identifier);
-            Objects.requireNonNull(inputDevice, "Input device must not be null");
-            // Some keyboards can have same product ID and vendor ID but different Keyboard info
-            // like language tag and layout type.
-            if (!TextUtils.isEmpty(inputDevice.getKeyboardLanguageTag())) {
-                key.append(",languageTag:").append(inputDevice.getKeyboardLanguageTag());
-            }
-            if (!TextUtils.isEmpty(inputDevice.getKeyboardLayoutType())) {
-                key.append(",layoutType:").append(inputDevice.getKeyboardLayoutType());
-            }
-        }
-        return key.toString();
-    }
-
     @AnyThread
     @Nullable
     public String getCurrentKeyboardLayoutForInputDevice(InputDeviceIdentifier identifier) {
@@ -599,7 +561,7 @@
             Slog.e(TAG, "getCurrentKeyboardLayoutForInputDevice API not supported");
             return null;
         }
-        String key = getLayoutDescriptor(identifier);
+        String key = new KeyboardIdentifier(identifier).toString();
         synchronized (mDataStore) {
             String layout;
             // try loading it using the layout descriptor if we have it
@@ -626,7 +588,7 @@
 
         Objects.requireNonNull(keyboardLayoutDescriptor,
                 "keyboardLayoutDescriptor must not be null");
-        String key = getLayoutDescriptor(identifier);
+        String key = new KeyboardIdentifier(identifier).toString();
         synchronized (mDataStore) {
             try {
                 if (mDataStore.setCurrentKeyboardLayout(key, keyboardLayoutDescriptor)) {
@@ -649,7 +611,7 @@
             Slog.e(TAG, "getEnabledKeyboardLayoutsForInputDevice API not supported");
             return new String[0];
         }
-        String key = getLayoutDescriptor(identifier);
+        String key = new KeyboardIdentifier(identifier).toString();
         synchronized (mDataStore) {
             String[] layouts = mDataStore.getKeyboardLayouts(key);
             if ((layouts == null || layouts.length == 0)
@@ -670,7 +632,7 @@
         Objects.requireNonNull(keyboardLayoutDescriptor,
                 "keyboardLayoutDescriptor must not be null");
 
-        String key = getLayoutDescriptor(identifier);
+        String key = new KeyboardIdentifier(identifier).toString();
         synchronized (mDataStore) {
             try {
                 String oldLayout = mDataStore.getCurrentKeyboardLayout(key);
@@ -698,7 +660,7 @@
         Objects.requireNonNull(keyboardLayoutDescriptor,
                 "keyboardLayoutDescriptor must not be null");
 
-        String key = getLayoutDescriptor(identifier);
+        String key = new KeyboardIdentifier(identifier).toString();
         synchronized (mDataStore) {
             try {
                 String oldLayout = mDataStore.getCurrentKeyboardLayout(key);
@@ -737,7 +699,7 @@
             final boolean changed;
             final String keyboardLayoutDescriptor;
 
-            String key = getLayoutDescriptor(device.getIdentifier());
+            String key = new KeyboardIdentifier(device.getIdentifier()).toString();
             synchronized (mDataStore) {
                 try {
                     changed = mDataStore.switchKeyboardLayout(key, direction);
@@ -769,11 +731,13 @@
 
     @Nullable
     @AnyThread
-    public String[] getKeyboardLayoutOverlay(InputDeviceIdentifier identifier) {
+    public String[] getKeyboardLayoutOverlay(InputDeviceIdentifier identifier, String languageTag,
+            String layoutType) {
         String keyboardLayoutDescriptor;
         if (useNewSettingsUi()) {
             synchronized (mImeInfoLock) {
-                KeyboardLayoutInfo layoutInfo = getKeyboardLayoutForInputDeviceInternal(identifier,
+                KeyboardLayoutInfo layoutInfo = getKeyboardLayoutForInputDeviceInternal(
+                        new KeyboardIdentifier(identifier, languageTag, layoutType),
                         mCurrentImeInfo);
                 keyboardLayoutDescriptor = layoutInfo == null ? null : layoutInfo.mDescriptor;
             }
@@ -811,12 +775,16 @@
             Slog.e(TAG, "getKeyboardLayoutForInputDevice() API not supported");
             return null;
         }
-        InputMethodSubtypeHandle subtypeHandle = InputMethodSubtypeHandle.of(imeInfo, imeSubtype);
-        KeyboardLayoutInfo layoutInfo = getKeyboardLayoutForInputDeviceInternal(identifier,
-                new ImeInfo(userId, subtypeHandle, imeSubtype));
+        InputDevice inputDevice = getInputDevice(identifier);
+        if (inputDevice == null || inputDevice.isVirtual() || !inputDevice.isFullKeyboard()) {
+            return null;
+        }
+        KeyboardIdentifier keyboardIdentifier = new KeyboardIdentifier(inputDevice);
+        KeyboardLayoutInfo layoutInfo = getKeyboardLayoutForInputDeviceInternal(
+                keyboardIdentifier, new ImeInfo(userId, imeInfo, imeSubtype));
         if (DEBUG) {
             Slog.d(TAG, "getKeyboardLayoutForInputDevice() " + identifier.toString() + ", userId : "
-                    + userId + ", subtypeHandle = " + subtypeHandle + " -> " + layoutInfo);
+                    + userId + ", subtype = " + imeSubtype + " -> " + layoutInfo);
         }
         return layoutInfo != null ? layoutInfo.mDescriptor : null;
     }
@@ -832,16 +800,20 @@
         }
         Objects.requireNonNull(keyboardLayoutDescriptor,
                 "keyboardLayoutDescriptor must not be null");
-        String key = createLayoutKey(identifier,
-                new ImeInfo(userId, InputMethodSubtypeHandle.of(imeInfo, imeSubtype), imeSubtype));
+        InputDevice inputDevice = getInputDevice(identifier);
+        if (inputDevice == null || inputDevice.isVirtual() || !inputDevice.isFullKeyboard()) {
+            return;
+        }
+        KeyboardIdentifier keyboardIdentifier = new KeyboardIdentifier(inputDevice);
+        String layoutKey = new LayoutKey(keyboardIdentifier,
+                new ImeInfo(userId, imeInfo, imeSubtype)).toString();
         synchronized (mDataStore) {
             try {
-                // Key for storing into data store = <device descriptor>,<userId>,<subtypeHandle>
-                if (mDataStore.setKeyboardLayout(getLayoutDescriptor(identifier), key,
+                if (mDataStore.setKeyboardLayout(keyboardIdentifier.toString(), layoutKey,
                         keyboardLayoutDescriptor)) {
                     if (DEBUG) {
                         Slog.d(TAG, "setKeyboardLayoutForInputDevice() " + identifier
-                                + " key: " + key
+                                + " key: " + layoutKey
                                 + " keyboardLayoutDescriptor: " + keyboardLayoutDescriptor);
                     }
                     mHandler.sendEmptyMessage(MSG_RELOAD_KEYBOARD_LAYOUTS);
@@ -860,18 +832,23 @@
             Slog.e(TAG, "getKeyboardLayoutListForInputDevice() API not supported");
             return new KeyboardLayout[0];
         }
-        return getKeyboardLayoutListForInputDeviceInternal(identifier, new ImeInfo(userId,
-                InputMethodSubtypeHandle.of(imeInfo, imeSubtype), imeSubtype));
+        InputDevice inputDevice = getInputDevice(identifier);
+        if (inputDevice == null || inputDevice.isVirtual() || !inputDevice.isFullKeyboard()) {
+            return new KeyboardLayout[0];
+        }
+        return getKeyboardLayoutListForInputDeviceInternal(new KeyboardIdentifier(inputDevice),
+                new ImeInfo(userId, imeInfo, imeSubtype));
     }
 
     private KeyboardLayout[] getKeyboardLayoutListForInputDeviceInternal(
-            InputDeviceIdentifier identifier, @Nullable ImeInfo imeInfo) {
-        String key = createLayoutKey(identifier, imeInfo);
+            KeyboardIdentifier keyboardIdentifier, @Nullable ImeInfo imeInfo) {
+        String layoutKey = new LayoutKey(keyboardIdentifier, imeInfo).toString();
 
         // Fetch user selected layout and always include it in layout list.
         String userSelectedLayout;
         synchronized (mDataStore) {
-            userSelectedLayout = mDataStore.getKeyboardLayout(getLayoutDescriptor(identifier), key);
+            userSelectedLayout = mDataStore.getKeyboardLayout(keyboardIdentifier.toString(),
+                    layoutKey);
         }
 
         final ArrayList<KeyboardLayout> potentialLayouts = new ArrayList<>();
@@ -894,8 +871,8 @@
                 // devices that have special layouts we assume there's a reason that the generic
                 // layouts don't work for them, so we don't want to return them since it's likely
                 // to result in a poor user experience.
-                if (layout.getVendorId() == identifier.getVendorId()
-                        && layout.getProductId() == identifier.getProductId()) {
+                if (layout.getVendorId() == keyboardIdentifier.mIdentifier.getVendorId()
+                        && layout.getProductId() == keyboardIdentifier.mIdentifier.getProductId()) {
                     if (!mDeviceSpecificLayoutAvailable) {
                         mDeviceSpecificLayoutAvailable = true;
                         potentialLayouts.clear();
@@ -934,7 +911,7 @@
             if (mCurrentImeInfo == null || !subtypeHandle.equals(mCurrentImeInfo.mImeSubtypeHandle)
                     || mCurrentImeInfo.mUserId != userId) {
                 mCurrentImeInfo = new ImeInfo(userId, subtypeHandle, subtype);
-                mHandler.sendEmptyMessage(MSG_CURRENT_IME_INFO_CHANGED);
+                mHandler.sendEmptyMessage(MSG_RELOAD_KEYBOARD_LAYOUTS);
                 if (DEBUG) {
                     Slog.d(TAG, "InputMethodSubtype changed: userId=" + userId
                             + " subtypeHandle=" + subtypeHandle);
@@ -943,34 +920,12 @@
         }
     }
 
-    @MainThread
-    private void onCurrentImeInfoChanged() {
-        synchronized (mImeInfoLock) {
-            for (int i = 0; i < mConfiguredKeyboards.size(); i++) {
-                InputDevice inputDevice = Objects.requireNonNull(
-                        getInputDevice(mConfiguredKeyboards.keyAt(i)));
-                KeyboardLayoutInfo layoutInfo = getKeyboardLayoutForInputDeviceInternal(
-                        inputDevice.getIdentifier(), mCurrentImeInfo);
-                KeyboardConfiguration config = mConfiguredKeyboards.valueAt(i);
-                if (!Objects.equals(layoutInfo, config.getCurrentLayout())) {
-                    config.setCurrentLayout(layoutInfo);
-                    mHandler.sendEmptyMessage(MSG_RELOAD_KEYBOARD_LAYOUTS);
-                    return;
-                }
-            }
-        }
-    }
-
     @Nullable
     private KeyboardLayoutInfo getKeyboardLayoutForInputDeviceInternal(
-            InputDeviceIdentifier identifier, @Nullable ImeInfo imeInfo) {
-        InputDevice inputDevice = getInputDevice(identifier);
-        if (inputDevice == null || inputDevice.isVirtual() || !inputDevice.isFullKeyboard()) {
-            return null;
-        }
-        String key = createLayoutKey(identifier, imeInfo);
+            KeyboardIdentifier keyboardIdentifier, @Nullable ImeInfo imeInfo) {
+        String layoutKey = new LayoutKey(keyboardIdentifier, imeInfo).toString();
         synchronized (mDataStore) {
-            String layout = mDataStore.getKeyboardLayout(getLayoutDescriptor(identifier), key);
+            String layout = mDataStore.getKeyboardLayout(keyboardIdentifier.toString(), layoutKey);
             if (layout != null) {
                 return new KeyboardLayoutInfo(layout, LAYOUT_SELECTION_CRITERIA_USER);
             }
@@ -978,16 +933,17 @@
 
         synchronized (mKeyboardLayoutCache) {
             // Check Auto-selected layout cache to see if layout had been previously selected
-            if (mKeyboardLayoutCache.containsKey(key)) {
-                return mKeyboardLayoutCache.get(key);
+            if (mKeyboardLayoutCache.containsKey(layoutKey)) {
+                return mKeyboardLayoutCache.get(layoutKey);
             } else {
                 // NOTE: This list is already filtered based on IME Script code
                 KeyboardLayout[] layoutList = getKeyboardLayoutListForInputDeviceInternal(
-                        identifier, imeInfo);
+                        keyboardIdentifier, imeInfo);
                 // Call auto-matching algorithm to find the best matching layout
                 KeyboardLayoutInfo layoutInfo =
-                        getDefaultKeyboardLayoutBasedOnImeInfo(inputDevice, imeInfo, layoutList);
-                mKeyboardLayoutCache.put(key, layoutInfo);
+                        getDefaultKeyboardLayoutBasedOnImeInfo(keyboardIdentifier, imeInfo,
+                                layoutList);
+                mKeyboardLayoutCache.put(layoutKey, layoutInfo);
                 return layoutInfo;
             }
         }
@@ -995,17 +951,18 @@
 
     @Nullable
     private static KeyboardLayoutInfo getDefaultKeyboardLayoutBasedOnImeInfo(
-            InputDevice inputDevice, @Nullable ImeInfo imeInfo, KeyboardLayout[] layoutList) {
+            KeyboardIdentifier keyboardIdentifier, @Nullable ImeInfo imeInfo,
+            KeyboardLayout[] layoutList) {
         Arrays.sort(layoutList);
 
         // Check <VendorID, ProductID> matching for explicitly declared custom KCM files.
         for (KeyboardLayout layout : layoutList) {
-            if (layout.getVendorId() == inputDevice.getVendorId()
-                    && layout.getProductId() == inputDevice.getProductId()) {
+            if (layout.getVendorId() == keyboardIdentifier.mIdentifier.getVendorId()
+                    && layout.getProductId() == keyboardIdentifier.mIdentifier.getProductId()) {
                 if (DEBUG) {
                     Slog.d(TAG,
                             "getDefaultKeyboardLayoutBasedOnImeInfo() : Layout found based on "
-                                    + "vendor and product Ids. " + inputDevice.getIdentifier()
+                                    + "vendor and product Ids. " + keyboardIdentifier
                                     + " : " + layout.getDescriptor());
                 }
                 return new KeyboardLayoutInfo(layout.getDescriptor(),
@@ -1014,17 +971,17 @@
         }
 
         // Check layout type, language tag information from InputDevice for matching
-        String inputLanguageTag = inputDevice.getKeyboardLanguageTag();
+        String inputLanguageTag = keyboardIdentifier.mLanguageTag;
         if (inputLanguageTag != null) {
             String layoutDesc = getMatchingLayoutForProvidedLanguageTagAndLayoutType(layoutList,
-                    inputLanguageTag, inputDevice.getKeyboardLayoutType());
+                    inputLanguageTag, keyboardIdentifier.mLayoutType);
 
             if (layoutDesc != null) {
                 if (DEBUG) {
                     Slog.d(TAG,
                             "getDefaultKeyboardLayoutBasedOnImeInfo() : Layout found based on "
                                     + "HW information (Language tag and Layout type). "
-                                    + inputDevice.getIdentifier() + " : " + layoutDesc);
+                                    + keyboardIdentifier + " : " + layoutDesc);
                 }
                 return new KeyboardLayoutInfo(layoutDesc, LAYOUT_SELECTION_CRITERIA_DEVICE);
             }
@@ -1045,7 +1002,7 @@
         if (DEBUG) {
             Slog.d(TAG,
                     "getDefaultKeyboardLayoutBasedOnImeInfo() : Layout found based on "
-                            + "IME locale matching. " + inputDevice.getIdentifier() + " : "
+                            + "IME locale matching. " + keyboardIdentifier + " : "
                             + layoutDesc);
         }
         if (layoutDesc != null) {
@@ -1105,7 +1062,7 @@
             }
         }
         return layoutMatchingLanguageAndCountry != null
-                    ? layoutMatchingLanguageAndCountry : layoutMatchingLanguage;
+                ? layoutMatchingLanguageAndCountry : layoutMatchingLanguage;
     }
 
     private void reloadKeyboardLayouts() {
@@ -1297,9 +1254,6 @@
             case MSG_UPDATE_KEYBOARD_LAYOUTS:
                 updateKeyboardLayouts();
                 return true;
-            case MSG_CURRENT_IME_INFO_CHANGED:
-                onCurrentImeInfoChanged();
-                return true;
             default:
                 return false;
         }
@@ -1322,6 +1276,7 @@
                 identifier.getDescriptor()) : null;
     }
 
+    @SuppressLint("MissingPermission")
     private List<ImeInfo> getImeInfoListForLayoutMapping() {
         List<ImeInfo> imeInfoList = new ArrayList<>();
         UserManager userManager = Objects.requireNonNull(
@@ -1337,31 +1292,20 @@
             int userId = userHandle.getIdentifier();
             for (InputMethodInfo imeInfo :
                     inputMethodManagerInternal.getEnabledInputMethodListAsUser(
-                    userId)) {
+                            userId)) {
                 for (InputMethodSubtype imeSubtype :
                         inputMethodManager.getEnabledInputMethodSubtypeList(
                                 imeInfo, true /* allowsImplicitlyEnabledSubtypes */)) {
                     if (!imeSubtype.isSuitableForPhysicalKeyboardLayoutMapping()) {
                         continue;
                     }
-                    imeInfoList.add(
-                            new ImeInfo(userId, InputMethodSubtypeHandle.of(imeInfo, imeSubtype),
-                                    imeSubtype));
+                    imeInfoList.add(new ImeInfo(userId, imeInfo, imeSubtype));
                 }
             }
         }
         return imeInfoList;
     }
 
-    private String createLayoutKey(InputDeviceIdentifier identifier, @Nullable ImeInfo imeInfo) {
-        if (imeInfo == null) {
-            return getLayoutDescriptor(identifier);
-        }
-        Objects.requireNonNull(imeInfo.mImeSubtypeHandle, "subtypeHandle must not be null");
-        return "layoutDescriptor:" + getLayoutDescriptor(identifier) + ",userId:" + imeInfo.mUserId
-                + ",subtypeHandle:" + imeInfo.mImeSubtypeHandle.toStringHandle();
-    }
-
     private static boolean isLayoutCompatibleWithLanguageTag(KeyboardLayout layout,
             @NonNull String languageTag) {
         LocaleList layoutLocales = layout.getLocales();
@@ -1451,6 +1395,11 @@
             mImeSubtypeHandle = imeSubtypeHandle;
             mImeSubtype = imeSubtype;
         }
+
+        ImeInfo(@UserIdInt int userId, @NonNull InputMethodInfo imeInfo,
+                @Nullable InputMethodSubtype imeSubtype) {
+            this(userId, InputMethodSubtypeHandle.of(imeInfo, imeSubtype), imeSubtype);
+        }
     }
 
     private static class KeyboardConfiguration {
@@ -1459,10 +1408,6 @@
         @Nullable
         private Set<String> mConfiguredLayouts;
 
-        // If null, it means no layout is selected for the device.
-        @Nullable
-        private KeyboardLayoutInfo mCurrentLayout;
-
         private boolean hasConfiguredLayouts() {
             return mConfiguredLayouts != null && !mConfiguredLayouts.isEmpty();
         }
@@ -1475,15 +1420,6 @@
         private void setConfiguredLayouts(Set<String> configuredLayouts) {
             mConfiguredLayouts = configuredLayouts;
         }
-
-        @Nullable
-        private KeyboardLayoutInfo getCurrentLayout() {
-            return mCurrentLayout;
-        }
-
-        private void setCurrentLayout(KeyboardLayoutInfo currentLayout) {
-            mCurrentLayout = currentLayout;
-        }
     }
 
     private static class KeyboardLayoutInfo {
@@ -1517,4 +1453,88 @@
         void visitKeyboardLayout(Resources resources,
                 int keyboardLayoutResId, KeyboardLayout layout);
     }
+
+    private static class KeyboardIdentifier {
+        @NonNull
+        private final InputDeviceIdentifier mIdentifier;
+        @Nullable
+        private final String mLanguageTag;
+        @Nullable
+        private final String mLayoutType;
+
+        // NOTE: Use this only for old settings UI where we don't use language tag and layout
+        // type to determine the KCM file.
+        private KeyboardIdentifier(@NonNull InputDeviceIdentifier inputDeviceIdentifier) {
+            this(inputDeviceIdentifier, null, null);
+        }
+
+        private KeyboardIdentifier(@NonNull InputDevice inputDevice) {
+            this(inputDevice.getIdentifier(), inputDevice.getKeyboardLanguageTag(),
+                    inputDevice.getKeyboardLayoutType());
+        }
+
+        private KeyboardIdentifier(@NonNull InputDeviceIdentifier identifier,
+                @Nullable String languageTag, @Nullable String layoutType) {
+            Objects.requireNonNull(identifier, "identifier must not be null");
+            Objects.requireNonNull(identifier.getDescriptor(), "descriptor must not be null");
+            mIdentifier = identifier;
+            mLanguageTag = languageTag;
+            mLayoutType = layoutType;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hashCode(toString());
+        }
+
+        @Override
+        public String toString() {
+            if (mIdentifier.getVendorId() == 0 && mIdentifier.getProductId() == 0) {
+                return mIdentifier.getDescriptor();
+            }
+            // If vendor id and product id is available, use it as keys. This allows us to have the
+            // same setup for all keyboards with same product and vendor id. i.e. User can swap 2
+            // identical keyboards and still get the same setup.
+            StringBuilder key = new StringBuilder();
+            key.append("vendor:").append(mIdentifier.getVendorId()).append(",product:").append(
+                    mIdentifier.getProductId());
+
+            // Some keyboards can have same product ID and vendor ID but different Keyboard info
+            // like language tag and layout type.
+            if (!TextUtils.isEmpty(mLanguageTag)) {
+                key.append(",languageTag:").append(mLanguageTag);
+            }
+            if (!TextUtils.isEmpty(mLayoutType)) {
+                key.append(",layoutType:").append(mLayoutType);
+            }
+            return key.toString();
+        }
+    }
+
+    private static class LayoutKey {
+
+        private final KeyboardIdentifier mKeyboardIdentifier;
+        @Nullable
+        private final ImeInfo mImeInfo;
+
+        private LayoutKey(KeyboardIdentifier keyboardIdentifier, @Nullable ImeInfo imeInfo) {
+            mKeyboardIdentifier = keyboardIdentifier;
+            mImeInfo = imeInfo;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hashCode(toString());
+        }
+
+        @Override
+        public String toString() {
+            if (mImeInfo == null) {
+                return mKeyboardIdentifier.toString();
+            }
+            Objects.requireNonNull(mImeInfo.mImeSubtypeHandle, "subtypeHandle must not be null");
+            return "layoutDescriptor:" + mKeyboardIdentifier + ",userId:" + mImeInfo.mUserId
+                    + ",subtypeHandle:" + mImeInfo.mImeSubtypeHandle.toStringHandle();
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/input/NativeInputManagerService.java b/services/core/java/com/android/server/input/NativeInputManagerService.java
index 363bc94..f126a89 100644
--- a/services/core/java/com/android/server/input/NativeInputManagerService.java
+++ b/services/core/java/com/android/server/input/NativeInputManagerService.java
@@ -28,7 +28,6 @@
 import android.view.InputEvent;
 import android.view.PointerIcon;
 import android.view.VerifiedInputEvent;
-import android.view.ViewConfiguration;
 
 import java.util.List;
 
@@ -203,6 +202,8 @@
 
     void setMotionClassifierEnabled(boolean enabled);
 
+    void setKeyRepeatConfiguration(int timeoutMs, int delayMs);
+
     InputSensorInfo[] getSensorList(int deviceId);
 
     boolean flushSensor(int deviceId, int sensorType);
@@ -242,15 +243,6 @@
      */
     void sysfsNodeChanged(String sysfsNodePath);
 
-    /**
-     * Notify there is a change in any of the key gesture timeouts, such as the key
-     * repeat timeout or key repeat delay.
-     *
-     * @see ViewConfiguration#getKeyRepeatTimeout()
-     * @see ViewConfiguration#getKeyRepeatDelay()
-     */
-    void notifyKeyGestureTimeoutsChanged();
-
     /** The native implementation of InputManagerService methods. */
     class NativeImpl implements NativeInputManagerService {
         /** Pointer to native input manager service object, used by native code. */
@@ -466,6 +458,9 @@
         public native void setMotionClassifierEnabled(boolean enabled);
 
         @Override
+        public native void setKeyRepeatConfiguration(int timeoutMs, int delayMs);
+
+        @Override
         public native InputSensorInfo[] getSensorList(int deviceId);
 
         @Override
@@ -498,8 +493,5 @@
 
         @Override
         public native void sysfsNodeChanged(String sysfsNodePath);
-
-        @Override
-        public native void notifyKeyGestureTimeoutsChanged();
     }
 }
diff --git a/services/core/java/com/android/server/inputmethod/HandwritingModeController.java b/services/core/java/com/android/server/inputmethod/HandwritingModeController.java
index aa99dab..26df162 100644
--- a/services/core/java/com/android/server/inputmethod/HandwritingModeController.java
+++ b/services/core/java/com/android/server/inputmethod/HandwritingModeController.java
@@ -16,8 +16,6 @@
 
 package com.android.server.inputmethod;
 
-import static android.view.InputDevice.SOURCE_STYLUS;
-
 import android.Manifest;
 import android.annotation.AnyThread;
 import android.annotation.NonNull;
@@ -94,15 +92,6 @@
         mInkWindowInitRunnable = inkWindowInitRunnable;
     }
 
-    // TODO(b/210039666): Consider moving this to MotionEvent
-    private static boolean isStylusEvent(MotionEvent event) {
-        if (!event.isFromSource(SOURCE_STYLUS)) {
-            return false;
-        }
-        final int tool = event.getToolType(0);
-        return tool == MotionEvent.TOOL_TYPE_STYLUS || tool == MotionEvent.TOOL_TYPE_ERASER;
-    }
-
     /**
      * Initializes the handwriting spy on the given displayId.
      *
@@ -332,7 +321,7 @@
             return false;
         }
         final MotionEvent event = (MotionEvent) ev;
-        if (!isStylusEvent(event)) {
+        if (!event.isStylusPointer()) {
             return false;
         }
         if (event.getDisplayId() != mCurrentDisplayId) {
@@ -352,6 +341,10 @@
             // Ask IMMS to make ink window ready.
             mInkWindowInitRunnable.run();
             mInkWindowInitRunnable = null;
+            return;
+        } else if (event.isHoverEvent()) {
+            // Hover events need not be recorded to buffer.
+            return;
         }
 
         // If handwriting delegation is ongoing, don't clear the buffer so that multiple strokes
diff --git a/services/core/java/com/android/server/inputmethod/IInputMethodClientInvoker.java b/services/core/java/com/android/server/inputmethod/IInputMethodClientInvoker.java
index b1580b1..977dbff 100644
--- a/services/core/java/com/android/server/inputmethod/IInputMethodClientInvoker.java
+++ b/services/core/java/com/android/server/inputmethod/IInputMethodClientInvoker.java
@@ -249,26 +249,6 @@
     }
 
     @AnyThread
-    void updateVirtualDisplayToScreenMatrix(int bindSequence, float[] matrixValues) {
-        if (mIsProxy) {
-            updateVirtualDisplayToScreenMatrixInternal(bindSequence, matrixValues);
-        } else {
-            mHandler.post(() ->
-                    updateVirtualDisplayToScreenMatrixInternal(bindSequence, matrixValues));
-        }
-    }
-
-    @AnyThread
-    private void updateVirtualDisplayToScreenMatrixInternal(int bindSequence,
-            float[] matrixValues) {
-        try {
-            mTarget.updateVirtualDisplayToScreenMatrix(bindSequence, matrixValues);
-        } catch (RemoteException e) {
-            logRemoteException(e);
-        }
-    }
-
-    @AnyThread
     void setImeTraceEnabled(boolean enabled) {
         if (mIsProxy) {
             setImeTraceEnabledInternal(enabled);
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java b/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java
index 5308336..20c7029 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java
@@ -424,7 +424,7 @@
             addFreshWindowToken();
             return new InputBindResult(
                     InputBindResult.ResultCode.SUCCESS_WAITING_IME_BINDING,
-                    null, null, null, mCurId, mCurSeq, null, false);
+                    null, null, null, mCurId, mCurSeq, false);
         }
 
         Slog.w(InputMethodManagerService.TAG,
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 2a617c5..2fc4829 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -81,8 +81,6 @@
 import android.content.pm.ServiceInfo;
 import android.content.res.Resources;
 import android.database.ContentObserver;
-import android.graphics.Matrix;
-import android.hardware.display.DisplayManagerInternal;
 import android.hardware.input.InputManager;
 import android.inputmethodservice.InputMethodService;
 import android.media.AudioManagerInternal;
@@ -118,7 +116,6 @@
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 import android.util.proto.ProtoOutputStream;
-import android.view.DisplayInfo;
 import android.view.InputChannel;
 import android.view.InputDevice;
 import android.view.MotionEvent;
@@ -288,7 +285,6 @@
     final InputManagerInternal mInputManagerInternal;
     final ImePlatformCompatUtils mImePlatformCompatUtils;
     final InputMethodDeviceConfigs mInputMethodDeviceConfigs;
-    private final DisplayManagerInternal mDisplayManagerInternal;
     private final ArrayMap<String, List<InputMethodSubtype>> mAdditionalSubtypeMap =
             new ArrayMap<>();
     private final UserManagerInternal mUserManagerInternal;
@@ -458,35 +454,6 @@
     @GuardedBy("ImfLock.class")
     final ArrayMap<IBinder, ClientState> mClients = new ArrayMap<>();
 
-    private static final class VirtualDisplayInfo {
-        /**
-         * {@link ClientState} where {@link android.hardware.display.VirtualDisplay} is running.
-         */
-        private final ClientState mParentClient;
-        /**
-         * {@link Matrix} to convert screen coordinates in the embedded virtual display to
-         * screen coordinates where {@link #mParentClient} exists.
-         */
-        private final Matrix mMatrix;
-
-        VirtualDisplayInfo(ClientState parentClient, Matrix matrix) {
-            mParentClient = parentClient;
-            mMatrix = matrix;
-        }
-    }
-
-    /**
-     * A mapping table from virtual display IDs created for
-     * {@link android.hardware.display.VirtualDisplay} to its parent IME client where the embedded
-     * virtual display is running.
-     *
-     * <p>Note: this can be used only for virtual display IDs created by
-     * {@link android.hardware.display.VirtualDisplay}.</p>
-     */
-    @GuardedBy("ImfLock.class")
-    private final SparseArray<VirtualDisplayInfo> mVirtualDisplayIdToParentMap =
-            new SparseArray<>();
-
     /**
      * Set once the system is ready to run third party code.
      */
@@ -605,16 +572,6 @@
     EditorInfo mCurEditorInfo;
 
     /**
-     * A special {@link Matrix} to convert virtual screen coordinates to the IME target display
-     * coordinates.
-     *
-     * <p>Used only while the IME client is running in a virtual display. {@code null}
-     * otherwise.</p>
-     */
-    @Nullable
-    private Matrix mCurVirtualDisplayToScreenMatrix = null;
-
-    /**
      * Id obtained with {@link InputMethodInfo#getId()} for the input method that we are currently
      * connected to or in the process of connecting to.
      *
@@ -1728,7 +1685,6 @@
         mInputManagerInternal = LocalServices.getService(InputManagerInternal.class);
         mImePlatformCompatUtils = new ImePlatformCompatUtils();
         mInputMethodDeviceConfigs = new InputMethodDeviceConfigs();
-        mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
         mUserManagerInternal = LocalServices.getService(UserManagerInternal.class);
 
         mSlotIme = mContext.getString(com.android.internal.R.string.status_bar_ime);
@@ -2309,14 +2265,6 @@
                 clearClientSessionLocked(cs);
                 clearClientSessionForAccessibilityLocked(cs);
 
-                final int numItems = mVirtualDisplayIdToParentMap.size();
-                for (int i = numItems - 1; i >= 0; --i) {
-                    final VirtualDisplayInfo info = mVirtualDisplayIdToParentMap.valueAt(i);
-                    if (info.mParentClient == cs) {
-                        mVirtualDisplayIdToParentMap.removeAt(i);
-                    }
-                }
-
                 if (mCurClient == cs) {
                     hideCurrentInputLocked(mCurFocusedWindow, null /* statsToken */, 0 /* flags */,
                             null /* resultReceiver */, SoftInputShowHideReason.HIDE_REMOVE_CLIENT);
@@ -2332,7 +2280,6 @@
                     }
                     mBoundToAccessibility = false;
                     mCurClient = null;
-                    mCurVirtualDisplayToScreenMatrix = null;
                 }
                 if (mCurFocusedWindowClient == cs) {
                     mCurFocusedWindowClient = null;
@@ -2366,7 +2313,6 @@
             mCurClient.mSessionRequested = false;
             mCurClient.mSessionRequestedForAccessibility = false;
             mCurClient = null;
-            mCurVirtualDisplayToScreenMatrix = null;
             ImeTracker.forLogging().onFailed(mCurStatsToken, ImeTracker.PHASE_SERVER_WAIT_IME);
             mCurStatsToken = null;
             mMenuController.hideInputMethodMenuLocked();
@@ -2483,33 +2429,7 @@
         return new InputBindResult(InputBindResult.ResultCode.SUCCESS_WITH_IME_SESSION,
                 session.mSession, accessibilityInputMethodSessions,
                 (session.mChannel != null ? session.mChannel.dup() : null),
-                curId, getSequenceNumberLocked(), mCurVirtualDisplayToScreenMatrix,
-                suppressesSpellChecker);
-    }
-
-    @GuardedBy("ImfLock.class")
-    @Nullable
-    private Matrix getVirtualDisplayToScreenMatrixLocked(int clientDisplayId, int imeDisplayId) {
-        if (clientDisplayId == imeDisplayId) {
-            return null;
-        }
-        int displayId = clientDisplayId;
-        Matrix matrix = null;
-        while (true) {
-            final VirtualDisplayInfo info = mVirtualDisplayIdToParentMap.get(displayId);
-            if (info == null) {
-                return null;
-            }
-            if (matrix == null) {
-                matrix = new Matrix(info.mMatrix);
-            } else {
-                matrix.postConcat(info.mMatrix);
-            }
-            if (info.mParentClient.mSelfReportedDisplayId == imeDisplayId) {
-                return matrix;
-            }
-            displayId = info.mParentClient.mSelfReportedDisplayId;
-        }
+                curId, getSequenceNumberLocked(), suppressesSpellChecker);
     }
 
     @GuardedBy("ImfLock.class")
@@ -2573,7 +2493,7 @@
             // party code.
             return new InputBindResult(
                     InputBindResult.ResultCode.ERROR_SYSTEM_NOT_READY,
-                    null, null, null, selectedMethodId, getSequenceNumberLocked(), null, false);
+                    null, null, null, selectedMethodId, getSequenceNumberLocked(), false);
         }
 
         if (!InputMethodUtils.checkIfPackageBelongsToUid(mPackageManagerInternal, cs.mUid,
@@ -2610,9 +2530,6 @@
         mCurInputConnection = inputConnection;
         mCurRemoteAccessibilityInputConnection = remoteAccessibilityInputConnection;
         mCurImeDispatcher = imeDispatcher;
-        mCurVirtualDisplayToScreenMatrix =
-                getVirtualDisplayToScreenMatrixLocked(cs.mSelfReportedDisplayId,
-                        mDisplayIdToShowIme);
         // Override the locale hints if the app is running on a virtual device.
         if (mVdmInternal == null) {
             mVdmInternal = LocalServices.getService(VirtualDeviceManagerInternal.class);
@@ -2728,7 +2645,7 @@
                 requestClientSessionForAccessibilityLocked(cs);
                 return new InputBindResult(
                         InputBindResult.ResultCode.SUCCESS_WAITING_IME_SESSION,
-                        null, null, null, getCurIdLocked(), getSequenceNumberLocked(), null, false);
+                        null, null, null, getCurIdLocked(), getSequenceNumberLocked(), false);
             } else {
                 long bindingDuration = SystemClock.uptimeMillis() - getLastBindTimeLocked();
                 if (bindingDuration < TIME_TO_RECONNECT) {
@@ -2741,8 +2658,7 @@
                     // to see if we can get back in touch with the service.
                     return new InputBindResult(
                             InputBindResult.ResultCode.SUCCESS_WAITING_IME_BINDING,
-                            null, null, null, getCurIdLocked(), getSequenceNumberLocked(), null,
-                            false);
+                            null, null, null, getCurIdLocked(), getSequenceNumberLocked(), false);
                 } else {
                     EventLog.writeEvent(EventLogTags.IMF_FORCE_RECONNECT_IME,
                             getSelectedMethodIdLocked(), bindingDuration, 0);
@@ -3900,7 +3816,7 @@
             }
             return new InputBindResult(
                     InputBindResult.ResultCode.SUCCESS_REPORT_WINDOW_FOCUS_ONLY,
-                    null, null, null, null, -1, null, false);
+                    null, null, null, null, -1, false);
         }
 
         mCurFocusedWindow = windowToken;
@@ -4359,95 +4275,6 @@
     }
 
     @Override
-    public void reportVirtualDisplayGeometryAsync(IInputMethodClient parentClient,
-            int childDisplayId, float[] matrixValues) {
-        final IInputMethodClientInvoker parentClientInvoker =
-                IInputMethodClientInvoker.create(parentClient, mHandler);
-        try {
-            final DisplayInfo displayInfo = mDisplayManagerInternal.getDisplayInfo(childDisplayId);
-            if (displayInfo == null) {
-                throw new IllegalArgumentException(
-                        "Cannot find display for non-existent displayId: " + childDisplayId);
-            }
-            final int callingUid = Binder.getCallingUid();
-            if (callingUid != displayInfo.ownerUid) {
-                throw new SecurityException("The caller doesn't own the display.");
-            }
-
-            synchronized (ImfLock.class) {
-                final ClientState cs = mClients.get(parentClientInvoker.asBinder());
-                if (cs == null) {
-                    return;
-                }
-
-                // null matrixValues means that the entry needs to be removed.
-                if (matrixValues == null) {
-                    final VirtualDisplayInfo info =
-                            mVirtualDisplayIdToParentMap.get(childDisplayId);
-                    if (info == null) {
-                        return;
-                    }
-                    if (info.mParentClient != cs) {
-                        throw new SecurityException("Only the owner client can clear"
-                                + " VirtualDisplayGeometry for display #" + childDisplayId);
-                    }
-                    mVirtualDisplayIdToParentMap.remove(childDisplayId);
-                    return;
-                }
-
-                VirtualDisplayInfo info = mVirtualDisplayIdToParentMap.get(childDisplayId);
-                if (info != null && info.mParentClient != cs) {
-                    throw new InvalidParameterException("Display #" + childDisplayId
-                            + " is already registered by " + info.mParentClient);
-                }
-                if (info == null) {
-                    if (!mWindowManagerInternal.isUidAllowedOnDisplay(childDisplayId, cs.mUid)) {
-                        throw new SecurityException(cs + " cannot access to display #"
-                                + childDisplayId);
-                    }
-                    info = new VirtualDisplayInfo(cs, new Matrix());
-                    mVirtualDisplayIdToParentMap.put(childDisplayId, info);
-                }
-                info.mMatrix.setValues(matrixValues);
-
-                if (mCurClient == null || mCurClient.mCurSession == null) {
-                    return;
-                }
-
-                Matrix matrix = null;
-                int displayId = mCurClient.mSelfReportedDisplayId;
-                boolean needToNotify = false;
-                while (true) {
-                    needToNotify |= (displayId == childDisplayId);
-                    final VirtualDisplayInfo next = mVirtualDisplayIdToParentMap.get(displayId);
-                    if (next == null) {
-                        break;
-                    }
-                    if (matrix == null) {
-                        matrix = new Matrix(next.mMatrix);
-                    } else {
-                        matrix.postConcat(next.mMatrix);
-                    }
-                    if (next.mParentClient.mSelfReportedDisplayId == mCurTokenDisplayId) {
-                        if (needToNotify) {
-                            final float[] values = new float[9];
-                            matrix.getValues(values);
-                            mCurClient.mClient.updateVirtualDisplayToScreenMatrix(
-                                    getSequenceNumberLocked(), values);
-                        }
-                        break;
-                    }
-                    displayId = info.mParentClient.mSelfReportedDisplayId;
-                }
-            }
-        } catch (Throwable t) {
-            if (parentClientInvoker != null) {
-                parentClientInvoker.throwExceptionFromSystem(t.toString());
-            }
-        }
-    }
-
-    @Override
     public void removeImeSurfaceFromWindowAsync(IBinder windowToken) {
         // No permission check, because we'll only execute the request if the calling window is
         // also the current IME client.
@@ -5859,7 +5686,7 @@
                     final InputBindResult res = new InputBindResult(
                             InputBindResult.ResultCode.SUCCESS_WITH_ACCESSIBILITY_SESSION,
                             imeSession, accessibilityInputMethodSessions, null, getCurIdLocked(),
-                            getSequenceNumberLocked(), mCurVirtualDisplayToScreenMatrix, false);
+                            getSequenceNumberLocked(), false);
                     mCurClient.mClient.onBindAccessibilityService(res, accessibilityConnectionId);
                 }
             }
diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
index 6c8ba16..6124b55 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -15,7 +15,6 @@
 
 package com.android.server.lights;
 
-import android.Manifest;
 import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.content.Context;
@@ -29,6 +28,7 @@
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
+import android.os.PermissionEnforcer;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.Trace;
@@ -68,6 +68,9 @@
     private Handler mH;
 
     private final class LightsManagerBinderService extends ILightsManager.Stub {
+        LightsManagerBinderService() {
+            super(PermissionEnforcer.fromContext(getContext()));
+        }
 
         private final class Session implements Comparable<Session> {
             final IBinder mToken;
@@ -101,10 +104,10 @@
          * Returns the lights available for apps to control on the device. Only lights that aren't
          * reserved for system use are available to apps.
          */
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DEVICE_LIGHTS)
         @Override
         public List<Light> getLights() {
-            getContext().enforceCallingOrSelfPermission(Manifest.permission.CONTROL_DEVICE_LIGHTS,
-                    "getLights requires CONTROL_DEVICE_LIGHTS_PERMISSION");
+            getLights_enforcePermission();
 
             synchronized (LightsService.this) {
                 final List<Light> lights = new ArrayList<Light>();
@@ -125,10 +128,10 @@
          * <p>Null values mean that the request should be removed, and the light turned off if it
          * is not being used by anything else.
          */
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DEVICE_LIGHTS)
         @Override
         public void setLightStates(IBinder token, int[] lightIds, LightState[] lightStates) {
-            getContext().enforceCallingOrSelfPermission(Manifest.permission.CONTROL_DEVICE_LIGHTS,
-                    "setLightStates requires CONTROL_DEVICE_LIGHTS permission");
+            setLightStates_enforcePermission();
             Preconditions.checkState(lightIds.length == lightStates.length);
 
             synchronized (LightsService.this) {
@@ -144,10 +147,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DEVICE_LIGHTS)
         @Override
         public @Nullable LightState getLightState(int lightId) {
-            getContext().enforceCallingOrSelfPermission(Manifest.permission.CONTROL_DEVICE_LIGHTS,
-                    "getLightState(@TestApi) requires CONTROL_DEVICE_LIGHTS permission");
+            getLightState_enforcePermission();
 
             synchronized (LightsService.this) {
                 final LightImpl light = mLightsById.get(lightId);
@@ -158,10 +161,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DEVICE_LIGHTS)
         @Override
         public void openSession(IBinder token, int priority) {
-            getContext().enforceCallingOrSelfPermission(Manifest.permission.CONTROL_DEVICE_LIGHTS,
-                    "openSession requires CONTROL_DEVICE_LIGHTS permission");
+            openSession_enforcePermission();
             Preconditions.checkNotNull(token);
 
             synchronized (LightsService.this) {
@@ -177,10 +180,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CONTROL_DEVICE_LIGHTS)
         @Override
         public void closeSession(IBinder token) {
-            getContext().enforceCallingOrSelfPermission(Manifest.permission.CONTROL_DEVICE_LIGHTS,
-                    "closeSession requires CONTROL_DEVICE_LIGHTS permission");
+            closeSession_enforcePermission();
             Preconditions.checkNotNull(token);
             closeSessionInternal(token);
         }
diff --git a/services/core/java/com/android/server/location/LocationManagerService.java b/services/core/java/com/android/server/location/LocationManagerService.java
index 115421d..74b7f08 100644
--- a/services/core/java/com/android/server/location/LocationManagerService.java
+++ b/services/core/java/com/android/server/location/LocationManagerService.java
@@ -204,8 +204,9 @@
         public void onUserStarting(TargetUser user) {
             mUserInfoHelper.onUserStarted(user.getUserIdentifier());
 
-            // log location enabled state on start to minimize coverage loss
+            // log location enabled state and emergency state on start to minimize coverage loss
             mService.logLocationEnabledState();
+            mService.logEmergencyState();
         }
 
         @Override
@@ -297,6 +298,8 @@
                 refreshAppOpsRestrictions(userId);
             }
         });
+        mInjector.getEmergencyHelper().addOnEmergencyStateChangedListener(
+                this::onEmergencyStateChanged);
 
         // set up passive provider first since it will be required for all other location providers,
         // which are loaded later once the system is ready.
@@ -361,9 +364,13 @@
             if (realProvider != null) {
                 // custom logic wrapping all non-passive providers
                 if (manager != mPassiveManager) {
+                    int defaultStationaryThrottlingSetting =
+                            mContext.getPackageManager().hasSystemFeature(
+                                PackageManager.FEATURE_WATCH) ? 0 : 1;
                     boolean enableStationaryThrottling = Settings.Global.getInt(
                             mContext.getContentResolver(),
-                            Settings.Global.LOCATION_ENABLE_STATIONARY_THROTTLE, 1) != 0;
+                            Settings.Global.LOCATION_ENABLE_STATIONARY_THROTTLE,
+                            defaultStationaryThrottlingSetting) != 0;
                     if (enableStationaryThrottling) {
                         realProvider = new StationaryThrottlingLocationProvider(manager.getName(),
                                 mInjector, realProvider);
@@ -568,6 +575,15 @@
         refreshAppOpsRestrictions(userId);
     }
 
+    private void onEmergencyStateChanged() {
+        this.logEmergencyState();
+    }
+
+    private void logEmergencyState() {
+        boolean isInEmergency = mInjector.getEmergencyHelper().isInEmergency(Long.MIN_VALUE);
+        mInjector.getLocationUsageLogger().logEmergencyStateChanged(isInEmergency);
+    }
+
     private void logLocationEnabledState() {
         boolean locationEnabled = false;
         // Location setting is considered on if it is enabled for any one user
@@ -598,10 +614,11 @@
         return mGnssManagerService == null ? 0 : mGnssManagerService.getGnssBatchSize();
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.LOCATION_HARDWARE)
     @Override
     public void startGnssBatch(long periodNanos, ILocationListener listener, String packageName,
             @Nullable String attributionTag, String listenerId) {
-        mContext.enforceCallingOrSelfPermission(Manifest.permission.LOCATION_HARDWARE, null);
+        startGnssBatch_enforcePermission();
 
         if (mGnssManagerService == null) {
             return;
@@ -627,9 +644,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.LOCATION_HARDWARE)
     @Override
     public void flushGnssBatch() {
-        mContext.enforceCallingOrSelfPermission(Manifest.permission.LOCATION_HARDWARE, null);
+        flushGnssBatch_enforcePermission();
 
         if (mGnssManagerService == null) {
             return;
@@ -642,9 +660,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.LOCATION_HARDWARE)
     @Override
     public void stopGnssBatch() {
-        mContext.enforceCallingOrSelfPermission(Manifest.permission.LOCATION_HARDWARE, null);
+        stopGnssBatch_enforcePermission();
 
         if (mGnssManagerService == null) {
             return;
@@ -1110,10 +1129,11 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.INTERACT_ACROSS_USERS)
     @Override
     @RequiresPermission(INTERACT_ACROSS_USERS)
     public void addProviderRequestListener(IProviderRequestListener listener) {
-        mContext.enforceCallingOrSelfPermission(INTERACT_ACROSS_USERS, null);
+        addProviderRequestListener_enforcePermission();
         for (LocationProviderManager manager : mProviderManagers) {
             if (manager.isVisibleToCaller()) {
                 manager.addProviderRequestListener(listener);
@@ -1194,10 +1214,11 @@
         return manager.getProperties();
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.READ_DEVICE_CONFIG)
     @Override
     public boolean isProviderPackage(@Nullable String provider, String packageName,
             @Nullable String attributionTag) {
-        mContext.enforceCallingOrSelfPermission(permission.READ_DEVICE_CONFIG, null);
+        isProviderPackage_enforcePermission();
 
         for (LocationProviderManager manager : mProviderManagers) {
             if (provider != null && !provider.equals(manager.getName())) {
@@ -1216,9 +1237,10 @@
         return false;
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.READ_DEVICE_CONFIG)
     @Override
     public List<String> getProviderPackages(String provider) {
-        mContext.enforceCallingOrSelfPermission(permission.READ_DEVICE_CONFIG, null);
+        getProviderPackages_enforcePermission();
 
         LocationProviderManager manager = getLocationProviderManager(provider);
         if (manager == null) {
@@ -1549,6 +1571,18 @@
         }
         ipw.decreaseIndent();
 
+        ipw.println("Historical Aggregate Gnss Measurement Provider Data:");
+        ipw.increaseIndent();
+        ArrayMap<CallerIdentity, LocationEventLog.GnssMeasurementAggregateStats>
+                gnssAggregateStats = EVENT_LOG.copyGnssMeasurementAggregateStats();
+        for (int i = 0; i < gnssAggregateStats.size(); i++) {
+            ipw.print(gnssAggregateStats.keyAt(i));
+            ipw.print(": ");
+            gnssAggregateStats.valueAt(i).updateTotals();
+            ipw.println(gnssAggregateStats.valueAt(i));
+        }
+        ipw.decreaseIndent();
+
         if (mGnssManagerService != null) {
             ipw.println("GNSS Manager:");
             ipw.increaseIndent();
@@ -1716,13 +1750,6 @@
         }
 
         @Override
-        public void sendNiResponse(int notifId, int userResponse) {
-            if (mGnssManagerService != null) {
-                mGnssManagerService.sendNiResponse(notifId, userResponse);
-            }
-        }
-
-        @Override
         public @Nullable LocationTime getGnssTimeMillis() {
             LocationProviderManager gpsManager = getLocationProviderManager(GPS_PROVIDER);
             if (gpsManager == null) {
diff --git a/services/core/java/com/android/server/location/TEST_MAPPING b/services/core/java/com/android/server/location/TEST_MAPPING
index 214d2f3..f5deb2b 100644
--- a/services/core/java/com/android/server/location/TEST_MAPPING
+++ b/services/core/java/com/android/server/location/TEST_MAPPING
@@ -1,7 +1,13 @@
 {
   "presubmit": [
     {
-      "name": "CtsLocationFineTestCases"
+      "name": "CtsLocationFineTestCases",
+      "options": [
+          {
+             // TODO: Wait for test to deflake - b/293934372
+             "exclude-filter":"android.location.cts.fine.ScanningSettingsTest"
+          }
+      ]
     },
     {
       "name": "CtsLocationCoarseTestCases"
@@ -16,4 +22,4 @@
       }]
     }
   ]
-}
\ No newline at end of file
+}
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 5819ff0..5c1897d 100644
--- a/services/core/java/com/android/server/location/contexthub/ContextHubClientBroker.java
+++ b/services/core/java/com/android/server/location/contexthub/ContextHubClientBroker.java
@@ -185,8 +185,7 @@
      * True if {@link #mWakeLock} is open for acquisition. It is set to false after the client is
      * unregistered.
      */
-    @GuardedBy("mWakeLock")
-    private boolean mIsWakelockUsable = true;
+    private AtomicBoolean mIsWakelockUsable = new AtomicBoolean(true);
 
     /*
      * Internal interface used to invoke client callbacks.
@@ -529,7 +528,7 @@
     @VisibleForTesting
     boolean isWakelockUsable() {
         synchronized (mWakeLock) {
-            return mIsWakelockUsable;
+            return mIsWakelockUsable.get();
         }
     }
 
@@ -1103,10 +1102,8 @@
     private void acquireWakeLock() {
         Binder.withCleanCallingIdentity(
                 () -> {
-                    synchronized (mWakeLock) {
-                        if (mIsWakelockUsable) {
-                            mWakeLock.acquire(WAKELOCK_TIMEOUT_MILLIS);
-                        }
+                    if (mIsWakelockUsable.get()) {
+                        mWakeLock.acquire(WAKELOCK_TIMEOUT_MILLIS);
                     }
                 });
     }
@@ -1119,13 +1116,11 @@
     private void releaseWakeLock() {
         Binder.withCleanCallingIdentity(
                 () -> {
-                    synchronized (mWakeLock) {
-                        if (mWakeLock.isHeld()) {
-                            try {
-                                mWakeLock.release();
-                            } catch (RuntimeException e) {
-                                Log.e(TAG, "Releasing the wakelock fails - ", e);
-                            }
+                    if (mWakeLock.isHeld()) {
+                        try {
+                            mWakeLock.release();
+                        } catch (RuntimeException e) {
+                            Log.e(TAG, "Releasing the wakelock fails - ", e);
                         }
                     }
                 });
@@ -1139,18 +1134,16 @@
     private void releaseWakeLockOnExit() {
         Binder.withCleanCallingIdentity(
                 () -> {
-                    synchronized (mWakeLock) {
-                        mIsWakelockUsable = false;
-                        while (mWakeLock.isHeld()) {
-                            try {
-                                mWakeLock.release();
-                            } catch (RuntimeException e) {
-                                Log.e(
-                                        TAG,
-                                        "Releasing the wakelock for all acquisitions fails - ",
-                                        e);
-                                break;
-                            }
+                    mIsWakelockUsable.set(false);
+                    while (mWakeLock.isHeld()) {
+                        try {
+                            mWakeLock.release();
+                        } catch (RuntimeException e) {
+                            Log.e(
+                                    TAG,
+                                    "Releasing the wakelock for all acquisitions fails - ",
+                                    e);
+                            break;
                         }
                     }
                 });
diff --git a/services/core/java/com/android/server/location/contexthub/IContextHubWrapper.java b/services/core/java/com/android/server/location/contexthub/IContextHubWrapper.java
index eb1a0e2..35c6120 100644
--- a/services/core/java/com/android/server/location/contexthub/IContextHubWrapper.java
+++ b/services/core/java/com/android/server/location/contexthub/IContextHubWrapper.java
@@ -421,6 +421,9 @@
                 android.hardware.contexthub.IContextHubCallback.Stub {
             private final int mContextHubId;
             private final ICallback mCallback;
+            // 9a17008d-6bf1-445a-9011-6d21bd985b6c
+            private static final byte[] UUID = {-102, 23, 0, -115, 107, -15, 68, 90,
+                                                -112, 17, 109, 33, -67, -104, 91, 108};
 
             ContextHubAidlCallback(int contextHubId, ICallback callback) {
                 mContextHubId = contextHubId;
@@ -463,6 +466,11 @@
                 // TODO(271471342): Implement
             }
 
+            public byte[] getUuid() throws RemoteException {
+                //TODO(b/247124878): return the UUID defined in this file when the API is put in use
+                throw new RemoteException("This API is not implemented yet.");
+            }
+
             @Override
             public String getInterfaceHash() {
                 return android.hardware.contexthub.IContextHubCallback.HASH;
diff --git a/services/core/java/com/android/server/location/eventlog/LocationEventLog.java b/services/core/java/com/android/server/location/eventlog/LocationEventLog.java
index cb952ed..87e193f 100644
--- a/services/core/java/com/android/server/location/eventlog/LocationEventLog.java
+++ b/services/core/java/com/android/server/location/eventlog/LocationEventLog.java
@@ -30,6 +30,7 @@
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 
 import android.annotation.Nullable;
+import android.location.GnssMeasurementRequest;
 import android.location.LocationRequest;
 import android.location.provider.ProviderRequest;
 import android.location.util.identity.CallerIdentity;
@@ -58,21 +59,25 @@
 
     private static int getLocationsLogSize() {
         if (D) {
-            return 200;
+            return 400;
         } else {
-            return 100;
+            return 200;
         }
     }
 
     @GuardedBy("mAggregateStats")
     private final ArrayMap<String, ArrayMap<CallerIdentity, AggregateStats>> mAggregateStats;
 
+    @GuardedBy("mGnssMeasAggregateStats")
+    private final ArrayMap<CallerIdentity, GnssMeasurementAggregateStats> mGnssMeasAggregateStats;
+
     @GuardedBy("this")
     private final LocationsEventLog mLocationsLog;
 
     private LocationEventLog() {
         super(getLogSize(), Object.class);
         mAggregateStats = new ArrayMap<>(4);
+        mGnssMeasAggregateStats = new ArrayMap<>();
         mLocationsLog = new LocationsEventLog(getLocationsLogSize());
     }
 
@@ -105,6 +110,29 @@
         }
     }
 
+    /** Copies out gnss measurement aggregated stats. */
+    public ArrayMap<CallerIdentity, GnssMeasurementAggregateStats>
+            copyGnssMeasurementAggregateStats() {
+        synchronized (mGnssMeasAggregateStats) {
+            ArrayMap<CallerIdentity, GnssMeasurementAggregateStats> copy = new ArrayMap<>(
+                    mGnssMeasAggregateStats);
+            return copy;
+        }
+    }
+
+    private GnssMeasurementAggregateStats getGnssMeasurementAggregateStats(
+            CallerIdentity identity) {
+        synchronized (mGnssMeasAggregateStats) {
+            CallerIdentity aggregate = CallerIdentity.forAggregation(identity);
+            GnssMeasurementAggregateStats stats = mGnssMeasAggregateStats.get(aggregate);
+            if (stats == null) {
+                stats = new GnssMeasurementAggregateStats();
+                mGnssMeasAggregateStats.put(aggregate, stats);
+            }
+            return stats;
+        }
+    }
+
     /** Logs a user switched event. */
     public void logUserSwitched(int userIdFrom, int userIdTo) {
         addLog(new UserSwitchedEvent(userIdFrom, userIdTo));
@@ -221,6 +249,29 @@
         addLog(new LocationPowerSaveModeEvent(locationPowerSaveMode));
     }
 
+    /** Logs a new client registration for a GNSS Measurement. */
+    public void logGnssMeasurementClientRegistered(CallerIdentity identity,
+            GnssMeasurementRequest request) {
+        addLog(new GnssMeasurementClientRegisterEvent(true, identity, request));
+        getGnssMeasurementAggregateStats(identity).markRequestAdded(request.getIntervalMillis(),
+                request.isFullTracking());
+    }
+
+    /** Logs a new client unregistration for a GNSS Measurement. */
+    public void logGnssMeasurementClientUnregistered(CallerIdentity identity) {
+        addLog(new GnssMeasurementClientRegisterEvent(false, identity, null));
+        getGnssMeasurementAggregateStats(identity).markRequestRemoved();
+    }
+
+    /** Logs a GNSS measurement event deliver for a client. */
+    public void logGnssMeasurementsDelivered(int numGnssMeasurements,
+            CallerIdentity identity) {
+        synchronized (this) {
+            mLocationsLog.logDeliveredGnssMeasurements(numGnssMeasurements, identity);
+        }
+        getGnssMeasurementAggregateStats(identity).markGnssMeasurementDelivered();
+    }
+
     private void addLog(Object logEvent) {
         addLog(SystemClock.elapsedRealtime(), logEvent);
     }
@@ -528,6 +579,50 @@
         }
     }
 
+    private static final class GnssMeasurementClientRegisterEvent{
+
+        private final boolean mRegistered;
+        private final CallerIdentity mIdentity;
+        @Nullable
+        private final GnssMeasurementRequest mGnssMeasurementRequest;
+
+        GnssMeasurementClientRegisterEvent(boolean registered,
+                CallerIdentity identity, @Nullable GnssMeasurementRequest measurementRequest) {
+            mRegistered = registered;
+            mIdentity = identity;
+            mGnssMeasurementRequest = measurementRequest;
+        }
+
+        @Override
+        public String toString() {
+            if (mRegistered) {
+                return "gnss measurements +registration " + mIdentity + " -> "
+                        + mGnssMeasurementRequest;
+            } else {
+                return "gnss measurements -registration " + mIdentity;
+            }
+        }
+    }
+
+    private static final class GnssMeasurementDeliverEvent {
+
+        private final int mNumGnssMeasurements;
+        @Nullable
+        private final CallerIdentity mIdentity;
+
+        GnssMeasurementDeliverEvent(int numGnssMeasurements,
+                @Nullable CallerIdentity identity) {
+            mNumGnssMeasurements = numGnssMeasurements;
+            mIdentity = identity;
+        }
+
+        @Override
+        public String toString() {
+            return "gnss measurements delivered GnssMeasurements[" + mNumGnssMeasurements + "]"
+                    + " to " + mIdentity;
+        }
+    }
+
     private static final class LocationsEventLog extends LocalEventLog<Object> {
 
         LocationsEventLog(int size) {
@@ -538,6 +633,11 @@
             addLog(new ProviderReceiveLocationEvent(provider, numLocations));
         }
 
+        public void logDeliveredGnssMeasurements(int numGnssMeasurements,
+                CallerIdentity identity) {
+            addLog(new GnssMeasurementDeliverEvent(numGnssMeasurements, identity));
+        }
+
         public void logProviderDeliveredLocations(String provider, int numLocations,
                 CallerIdentity identity) {
             addLog(new ProviderDeliverLocationEvent(provider, numLocations, identity));
@@ -668,4 +768,89 @@
             }
         }
     }
+
+    /**
+     * Aggregate statistics for GNSS measurements.
+     */
+    public static final class GnssMeasurementAggregateStats {
+        @GuardedBy("this")
+        private int mAddedRequestCount;
+        @GuardedBy("this")
+        private int mReceivedMeasurementEventCount;
+        @GuardedBy("this")
+        private long mAddedTimeTotalMs;
+        @GuardedBy("this")
+        private long mAddedTimeLastUpdateRealtimeMs;
+        @GuardedBy("this")
+        private long mFastestIntervalMs = Long.MAX_VALUE;
+        @GuardedBy("this")
+        private long mSlowestIntervalMs = 0;
+        @GuardedBy("this")
+        private boolean mHasFullTracking;
+        @GuardedBy("this")
+        private boolean mHasDutyCycling;
+
+        GnssMeasurementAggregateStats() {
+        }
+
+        synchronized void markRequestAdded(long intervalMillis, boolean fullTracking) {
+            if (mAddedRequestCount++ == 0) {
+                mAddedTimeLastUpdateRealtimeMs = SystemClock.elapsedRealtime();
+            }
+            if (fullTracking) {
+                mHasFullTracking = true;
+            } else {
+                mHasDutyCycling = true;
+            }
+            mFastestIntervalMs = min(intervalMillis, mFastestIntervalMs);
+            mSlowestIntervalMs = max(intervalMillis, mSlowestIntervalMs);
+        }
+
+        synchronized void markRequestRemoved() {
+            updateTotals();
+            --mAddedRequestCount;
+            Preconditions.checkState(mAddedRequestCount >= 0);
+        }
+
+        synchronized void markGnssMeasurementDelivered() {
+            mReceivedMeasurementEventCount++;
+        }
+
+        public synchronized void updateTotals() {
+            if (mAddedRequestCount > 0) {
+                long realtimeMs = SystemClock.elapsedRealtime();
+                mAddedTimeTotalMs += realtimeMs - mAddedTimeLastUpdateRealtimeMs;
+                mAddedTimeLastUpdateRealtimeMs = realtimeMs;
+            }
+        }
+
+        @Override
+        public synchronized String toString() {
+            return "min/max interval = "
+                    + intervalToString(mFastestIntervalMs) + "/"
+                    + intervalToString(mSlowestIntervalMs)
+                    + ", total duration = " + formatDuration(mAddedTimeTotalMs)
+                    + ", tracking mode = " + trackingModeToString() + ", GNSS measurement events = "
+                    + mReceivedMeasurementEventCount;
+        }
+
+        private static String intervalToString(long intervalMs) {
+            if (intervalMs == GnssMeasurementRequest.PASSIVE_INTERVAL) {
+                return "passive";
+            } else {
+                return MILLISECONDS.toSeconds(intervalMs) + "s";
+            }
+        }
+
+        @GuardedBy("this")
+        private String trackingModeToString() {
+            if (mHasFullTracking && mHasDutyCycling) {
+                return "mixed tracking mode";
+            } else if (mHasFullTracking) {
+                return "always full-tracking";
+            } else {
+                return "always duty-cycling";
+            }
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java b/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java
index ed5c130..e97a12a 100644
--- a/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java
@@ -62,7 +62,6 @@
 import android.database.ContentObserver;
 import android.location.GnssCapabilities;
 import android.location.GnssStatus;
-import android.location.INetInitiatedListener;
 import android.location.Location;
 import android.location.LocationListener;
 import android.location.LocationManager;
@@ -109,7 +108,6 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.app.IBatteryStats;
 import com.android.internal.location.GpsNetInitiatedHandler;
-import com.android.internal.location.GpsNetInitiatedHandler.GpsNiNotification;
 import com.android.internal.util.FrameworkStatsLog;
 import com.android.internal.util.HexDump;
 import com.android.server.FgThread;
@@ -396,7 +394,6 @@
         mC2KServerPort = mGnssConfiguration.getC2KPort(TCP_MIN_PORT);
         mNIHandler.setEmergencyExtensionSeconds(mGnssConfiguration.getEsExtensionSec());
         mSuplEsEnabled = mGnssConfiguration.getSuplEs(0) == 1;
-        mNIHandler.setSuplEsEnabled(mSuplEsEnabled);
         if (mGnssVisibilityControl != null) {
             mGnssVisibilityControl.onConfigurationUpdated(mGnssConfiguration);
         }
@@ -465,7 +462,6 @@
                     }
                 };
         mNIHandler = new GpsNetInitiatedHandler(context,
-                mNetInitiatedListener,
                 emergencyCallCallback,
                 mSuplEsEnabled);
         // Trigger PSDS data download when the network comes up after booting.
@@ -1435,96 +1431,6 @@
         updateRequirements();
     }
 
-    //=============================================================
-    // NI Client support
-    //=============================================================
-    private final INetInitiatedListener mNetInitiatedListener = new INetInitiatedListener.Stub() {
-        // Sends a response for an NI request to HAL.
-        @Override
-        public boolean sendNiResponse(int notificationId, int userResponse) {
-            // TODO Add Permission check
-
-            if (DEBUG) {
-                Log.d(TAG, "sendNiResponse, notifId: " + notificationId
-                        + ", response: " + userResponse);
-            }
-            mGnssNative.sendNiResponse(notificationId, userResponse);
-
-            FrameworkStatsLog.write(FrameworkStatsLog.GNSS_NI_EVENT_REPORTED,
-                    FrameworkStatsLog.GNSS_NI_EVENT_REPORTED__EVENT_TYPE__NI_RESPONSE,
-                    notificationId,
-                    /* niType= */ 0,
-                    /* needNotify= */ false,
-                    /* needVerify= */ false,
-                    /* privacyOverride= */ false,
-                    /* timeout= */ 0,
-                    /* defaultResponse= */ 0,
-                    /* requestorId= */ null,
-                    /* text= */ null,
-                    /* requestorIdEncoding= */ 0,
-                    /* textEncoding= */ 0,
-                    mSuplEsEnabled,
-                    isGpsEnabled(),
-                    userResponse);
-
-            return true;
-        }
-    };
-
-    public INetInitiatedListener getNetInitiatedListener() {
-        return mNetInitiatedListener;
-    }
-
-    /** Reports a NI notification. */
-    private void reportNiNotification(int notificationId, int niType, int notifyFlags, int timeout,
-            int defaultResponse, String requestorId, String text, int requestorIdEncoding,
-            int textEncoding) {
-        Log.i(TAG, "reportNiNotification: entered");
-        Log.i(TAG, "notificationId: " + notificationId
-                + ", niType: " + niType
-                + ", notifyFlags: " + notifyFlags
-                + ", timeout: " + timeout
-                + ", defaultResponse: " + defaultResponse);
-
-        Log.i(TAG, "requestorId: " + requestorId
-                + ", text: " + text
-                + ", requestorIdEncoding: " + requestorIdEncoding
-                + ", textEncoding: " + textEncoding);
-
-        GpsNiNotification notification = new GpsNiNotification();
-
-        notification.notificationId = notificationId;
-        notification.niType = niType;
-        notification.needNotify = (notifyFlags & GpsNetInitiatedHandler.GPS_NI_NEED_NOTIFY) != 0;
-        notification.needVerify = (notifyFlags & GpsNetInitiatedHandler.GPS_NI_NEED_VERIFY) != 0;
-        notification.privacyOverride =
-                (notifyFlags & GpsNetInitiatedHandler.GPS_NI_PRIVACY_OVERRIDE) != 0;
-        notification.timeout = timeout;
-        notification.defaultResponse = defaultResponse;
-        notification.requestorId = requestorId;
-        notification.text = text;
-        notification.requestorIdEncoding = requestorIdEncoding;
-        notification.textEncoding = textEncoding;
-
-        mNIHandler.handleNiNotification(notification);
-        FrameworkStatsLog.write(FrameworkStatsLog.GNSS_NI_EVENT_REPORTED,
-                FrameworkStatsLog.GNSS_NI_EVENT_REPORTED__EVENT_TYPE__NI_REQUEST,
-                notification.notificationId,
-                notification.niType,
-                notification.needNotify,
-                notification.needVerify,
-                notification.privacyOverride,
-                notification.timeout,
-                notification.defaultResponse,
-                notification.requestorId,
-                notification.text,
-                notification.requestorIdEncoding,
-                notification.textEncoding,
-                mSuplEsEnabled,
-                isGpsEnabled(),
-                /* userResponse= */ 0);
-    }
-
     private void demandUtcTimeInjection() {
         if (DEBUG) Log.d(TAG, "demandUtcTimeInjection");
         postWithWakeLockHeld(mNetworkTimeHelper::demandUtcTimeInjection);
@@ -1829,14 +1735,6 @@
     }
 
     @Override
-    public void onReportNiNotification(int notificationId, int niType, int notifyFlags,
-            int timeout, int defaultResponse, String requestorId, String text,
-            int requestorIdEncoding, int textEncoding) {
-        reportNiNotification(notificationId, niType, notifyFlags, timeout,
-                defaultResponse, requestorId, text, requestorIdEncoding, textEncoding);
-    }
-
-    @Override
     public void onRequestSetID(@GnssNative.AGpsCallbacks.AgpsSetIdFlags int flags) {
         TelephonyManager phone = (TelephonyManager)
                 mContext.getSystemService(Context.TELEPHONY_SERVICE);
diff --git a/services/core/java/com/android/server/location/gnss/GnssManagerService.java b/services/core/java/com/android/server/location/gnss/GnssManagerService.java
index c962bc4..133704d 100644
--- a/services/core/java/com/android/server/location/gnss/GnssManagerService.java
+++ b/services/core/java/com/android/server/location/gnss/GnssManagerService.java
@@ -38,7 +38,6 @@
 import android.location.util.identity.CallerIdentity;
 import android.os.BatteryStats;
 import android.os.Binder;
-import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.util.IndentingPrintWriter;
@@ -275,17 +274,6 @@
     }
 
     /**
-     * Send Ni Response, indicating a location request initiated by a network carrier.
-     */
-    public void sendNiResponse(int notifId, int userResponse) {
-        try {
-            mGnssLocationProvider.getNetInitiatedListener().sendNiResponse(notifId, userResponse);
-        } catch (RemoteException e) {
-            throw e.rethrowFromSystemServer();
-        }
-    }
-
-    /**
      * Dump info for debugging.
      */
     public void dump(FileDescriptor fd, IndentingPrintWriter ipw, String[] args) {
diff --git a/services/core/java/com/android/server/location/gnss/GnssMeasurementsProvider.java b/services/core/java/com/android/server/location/gnss/GnssMeasurementsProvider.java
index 041f11d..d02b6f4 100644
--- a/services/core/java/com/android/server/location/gnss/GnssMeasurementsProvider.java
+++ b/services/core/java/com/android/server/location/gnss/GnssMeasurementsProvider.java
@@ -18,6 +18,7 @@
 
 import static android.app.AppOpsManager.OP_MONITOR_HIGH_POWER_LOCATION;
 
+import static com.android.server.location.eventlog.LocationEventLog.EVENT_LOG;
 import static com.android.server.location.gnss.GnssManagerService.D;
 import static com.android.server.location.gnss.GnssManagerService.TAG;
 
@@ -62,11 +63,17 @@
         @Override
         protected void onRegister() {
             super.onRegister();
-
+            EVENT_LOG.logGnssMeasurementClientRegistered(getIdentity(), getRequest());
             executeOperation(listener -> listener.onStatusChanged(
                     GnssMeasurementsEvent.Callback.STATUS_READY));
         }
 
+        @Override
+        protected void onUnregister() {
+            EVENT_LOG.logGnssMeasurementClientUnregistered(getIdentity());
+            super.onUnregister();
+        }
+
         @Nullable
         @Override
         protected void onActive() {
@@ -250,6 +257,8 @@
         deliverToListeners(registration -> {
             if (mAppOpsHelper.noteOpNoThrow(AppOpsManager.OP_FINE_LOCATION,
                     registration.getIdentity())) {
+                EVENT_LOG.logGnssMeasurementsDelivered(event.getMeasurements().size(),
+                        registration.getIdentity());
                 return listener -> listener.onGnssMeasurementsReceived(event);
             } else {
                 return null;
diff --git a/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java b/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java
index c0cce6f..78c8cde 100644
--- a/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java
+++ b/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java
@@ -458,12 +458,12 @@
         // capabilities.
         capabilities = networkAttributes.mCapabilities;
         Log.i(TAG, String.format(
-                "updateNetworkState, state=%s, connected=%s, network=%s, capabilities=%s"
+                "updateNetworkState, state=%s, connected=%s, network=%s, capabilityFlags=%d"
                         + ", availableNetworkCount: %d",
                 agpsDataConnStateAsString(),
                 isConnected,
                 network,
-                capabilities,
+                NetworkAttributes.getCapabilityFlags(capabilities),
                 mAvailableNetworkAttributes.size()));
 
         if (native_is_agps_ril_supported()) {
diff --git a/services/core/java/com/android/server/location/gnss/NetworkTimeHelper.java b/services/core/java/com/android/server/location/gnss/NetworkTimeHelper.java
index f5114b7..01c108b 100644
--- a/services/core/java/com/android/server/location/gnss/NetworkTimeHelper.java
+++ b/services/core/java/com/android/server/location/gnss/NetworkTimeHelper.java
@@ -37,7 +37,7 @@
      * a platform bug. This switch will be removed in a future release. If there are problems with
      * the new impl we'd like to hear about them.
      */
-    static final boolean USE_TIME_DETECTOR_IMPL = false;
+    static final boolean USE_TIME_DETECTOR_IMPL = true;
 
     /**
      * The callback interface used by {@link NetworkTimeHelper} to report the time to {@link
diff --git a/services/core/java/com/android/server/location/gnss/hal/GnssNative.java b/services/core/java/com/android/server/location/gnss/hal/GnssNative.java
index 7618419..bdd4885 100644
--- a/services/core/java/com/android/server/location/gnss/hal/GnssNative.java
+++ b/services/core/java/com/android/server/location/gnss/hal/GnssNative.java
@@ -284,9 +284,6 @@
 
     /** Callbacks for notifications. */
     public interface NotificationCallbacks {
-        void onReportNiNotification(int notificationId, int niType, int notifyFlags,
-                int timeout, int defaultResponse, String requestorId, String text,
-                int requestorIdEncoding, int textEncoding);
         void onReportNfwNotification(String proxyAppPackageName, byte protocolStack,
                 String otherProtocolStackName, byte requestor, String requestorId,
                 byte responseType, boolean inEmergencyMode, boolean isCachedLocation);
@@ -933,14 +930,6 @@
     }
 
     /**
-     * Send a network initiated respnse.
-     */
-    public void sendNiResponse(int notificationId, int userResponse) {
-        Preconditions.checkState(mRegistered);
-        mGnssHal.sendNiResponse(notificationId, userResponse);
-    }
-
-    /**
      * Request an eventual update of GNSS power statistics.
      */
     public void requestPowerStats() {
@@ -1244,16 +1233,6 @@
     }
 
     @NativeEntryPoint
-    void reportNiNotification(int notificationId, int niType, int notifyFlags,
-            int timeout, int defaultResponse, String requestorId, String text,
-            int requestorIdEncoding, int textEncoding) {
-        Binder.withCleanCallingIdentity(
-                () -> mNotificationCallbacks.onReportNiNotification(notificationId, niType,
-                        notifyFlags, timeout, defaultResponse, requestorId, text,
-                        requestorIdEncoding, textEncoding));
-    }
-
-    @NativeEntryPoint
     void requestSetID(int flags) {
         Binder.withCleanCallingIdentity(() -> mAGpsCallbacks.onRequestSetID(flags));
     }
@@ -1488,10 +1467,6 @@
             return native_is_gnss_visibility_control_supported();
         }
 
-        protected void sendNiResponse(int notificationId, int userResponse) {
-            native_send_ni_response(notificationId, userResponse);
-        }
-
         protected void requestPowerStats() {
             native_request_power_stats();
         }
@@ -1648,8 +1623,6 @@
 
     private static native boolean native_is_gnss_visibility_control_supported();
 
-    private static native void native_send_ni_response(int notificationId, int userResponse);
-
     // power stats APIs
 
     private static native void native_request_power_stats();
diff --git a/services/core/java/com/android/server/location/injector/EmergencyHelper.java b/services/core/java/com/android/server/location/injector/EmergencyHelper.java
index be4bf50..10cf714 100644
--- a/services/core/java/com/android/server/location/injector/EmergencyHelper.java
+++ b/services/core/java/com/android/server/location/injector/EmergencyHelper.java
@@ -16,14 +16,55 @@
 
 package com.android.server.location.injector;
 
+import java.util.concurrent.CopyOnWriteArrayList;
+
 /**
  * Provides helpers for emergency sessions.
  */
 public abstract class EmergencyHelper {
 
+    private final CopyOnWriteArrayList<EmergencyStateChangedListener> mListeners;
+
+    protected EmergencyHelper() {
+        mListeners = new CopyOnWriteArrayList<>();
+    }
+
+    /**
+     * Listener for emergency state changes.
+     */
+    public interface EmergencyStateChangedListener {
+        /**
+         * Called when state changes.
+         */
+        void onStateChanged();
+    }
+
     /**
      * Returns true if the device is in an emergency session, or if an emergency session ended
      * within the given extension time.
      */
     public abstract boolean isInEmergency(long extensionTimeMs);
+
+    /**
+     * Add a listener for changes to the emergency location state.
+     */
+    public void addOnEmergencyStateChangedListener(EmergencyStateChangedListener listener) {
+        mListeners.add(listener);
+    }
+
+    /**
+     * Remove a listener for changes to the emergency location state.
+     */
+    public void removeOnEmergencyStateChangedListener(EmergencyStateChangedListener listener) {
+        mListeners.remove(listener);
+    }
+
+    /**
+     * Notify listeners for emergency state of state change
+     */
+    protected final void dispatchEmergencyStateChanged() {
+        for (EmergencyStateChangedListener listener : mListeners) {
+            listener.onStateChanged();
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/location/injector/Injector.java b/services/core/java/com/android/server/location/injector/Injector.java
index b2c8672..4a0c4b2 100644
--- a/services/core/java/com/android/server/location/injector/Injector.java
+++ b/services/core/java/com/android/server/location/injector/Injector.java
@@ -16,13 +16,11 @@
 
 package com.android.server.location.injector;
 
-import com.android.internal.annotations.VisibleForTesting;
 import com.android.server.location.settings.LocationSettings;
 
 /**
  * Injects various location dependencies so that they may be controlled by tests.
  */
-@VisibleForTesting
 public interface Injector {
 
     /** Returns a UserInfoHelper. */
diff --git a/services/core/java/com/android/server/location/injector/LocationUsageLogger.java b/services/core/java/com/android/server/location/injector/LocationUsageLogger.java
index a9701b3..9319e89 100644
--- a/services/core/java/com/android/server/location/injector/LocationUsageLogger.java
+++ b/services/core/java/com/android/server/location/injector/LocationUsageLogger.java
@@ -129,6 +129,13 @@
         FrameworkStatsLog.write(FrameworkStatsLog.LOCATION_ENABLED_STATE_CHANGED, enabled);
     }
 
+    /**
+     * Log emergency location state change event
+     */
+    public synchronized void logEmergencyStateChanged(boolean isInEmergency) {
+        FrameworkStatsLog.write(FrameworkStatsLog.EMERGENCY_STATE_CHANGED, isInEmergency);
+    }
+
     private static int bucketizeProvider(String provider) {
         if (LocationManager.NETWORK_PROVIDER.equals(provider)) {
             return LocationStatsEnums.PROVIDER_NETWORK;
diff --git a/services/core/java/com/android/server/location/injector/SystemEmergencyHelper.java b/services/core/java/com/android/server/location/injector/SystemEmergencyHelper.java
index 1fb00ef..c772e08 100644
--- a/services/core/java/com/android/server/location/injector/SystemEmergencyHelper.java
+++ b/services/core/java/com/android/server/location/injector/SystemEmergencyHelper.java
@@ -27,6 +27,7 @@
 import android.telephony.TelephonyManager;
 import android.util.Log;
 
+import com.android.internal.telephony.TelephonyIntents;
 import com.android.server.FgThread;
 
 import java.util.Objects;
@@ -73,12 +74,25 @@
                     try {
                         mIsInEmergencyCall = mTelephonyManager.isEmergencyNumber(
                                 intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER));
+                        dispatchEmergencyStateChanged();
                     } catch (IllegalStateException e) {
                         Log.w(TAG, "Failed to call TelephonyManager.isEmergencyNumber().", e);
                     }
                 }
             }
         }, new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL));
+
+        mContext.registerReceiver(new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                if (!TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED.equals(
+                        intent.getAction())) {
+                    return;
+                }
+
+                dispatchEmergencyStateChanged();
+            }
+        }, new IntentFilter(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED));
     }
 
     @Override
@@ -108,6 +122,7 @@
                     if (mIsInEmergencyCall) {
                         mEmergencyCallEndRealtimeMs = SystemClock.elapsedRealtime();
                         mIsInEmergencyCall = false;
+                        dispatchEmergencyStateChanged();
                     }
                 }
             }
diff --git a/services/core/java/com/android/server/location/provider/LocationProviderManager.java b/services/core/java/com/android/server/location/provider/LocationProviderManager.java
index 925ab65..d3eb5a9 100644
--- a/services/core/java/com/android/server/location/provider/LocationProviderManager.java
+++ b/services/core/java/com/android/server/location/provider/LocationProviderManager.java
@@ -64,6 +64,7 @@
 import android.location.LocationManagerInternal.ProviderEnabledListener;
 import android.location.LocationRequest;
 import android.location.LocationResult;
+import android.location.altitude.AltitudeConverter;
 import android.location.provider.IProviderRequestListener;
 import android.location.provider.ProviderProperties;
 import android.location.provider.ProviderRequest;
@@ -81,6 +82,7 @@
 import android.os.SystemClock;
 import android.os.UserHandle;
 import android.os.WorkSource;
+import android.provider.DeviceConfig;
 import android.stats.location.LocationStatsEnums;
 import android.text.TextUtils;
 import android.util.ArraySet;
@@ -94,6 +96,7 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.Preconditions;
 import com.android.server.FgThread;
+import com.android.server.IoThread;
 import com.android.server.LocalServices;
 import com.android.server.location.LocationPermissions;
 import com.android.server.location.LocationPermissions.PermissionLevel;
@@ -122,6 +125,7 @@
 import com.android.server.location.settings.LocationUserSettings;
 
 import java.io.FileDescriptor;
+import java.io.IOException;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
@@ -886,6 +890,15 @@
 
                         @Override
                         public boolean test(Location location) {
+                            if (Double.isNaN(location.getLatitude()) || location.getLatitude() < -90
+                                    || location.getLatitude() > 90
+                                    || Double.isNaN(location.getLongitude())
+                                    || location.getLongitude() < -180
+                                    || location.getLongitude() > 180) {
+                                Log.e(TAG, mName + " provider registration " + getIdentity()
+                                        + " dropped delivery - invalid latitude or longitude.");
+                                return false;
+                            }
                             if (mPreviousLocation != null) {
                                 // check fastest interval
                                 long deltaMs = location.getElapsedRealtimeMillis()
@@ -1441,6 +1454,10 @@
     @GuardedBy("mMultiplexerLock")
     @Nullable private StateChangedListener mStateChangedListener;
 
+    /** Enables missing MSL altitudes to be added on behalf of the provider. */
+    private final AltitudeConverter mAltitudeConverter = new AltitudeConverter();
+    private volatile boolean mIsAltitudeConverterIdle = true;
+
     public LocationProviderManager(Context context, Injector injector,
             String name, @Nullable PassiveLocationProviderManager passiveManager) {
         this(context, injector, name, passiveManager, Collections.emptyList());
@@ -2512,33 +2529,18 @@
     @GuardedBy("mMultiplexerLock")
     @Override
     public void onReportLocation(LocationResult locationResult) {
-        LocationResult filtered;
+        LocationResult processed;
         if (mPassiveManager != null) {
-            filtered = locationResult.filter(location -> {
-                if (!location.isMock()) {
-                    if (location.getLatitude() == 0 && location.getLongitude() == 0) {
-                        Log.e(TAG, "blocking 0,0 location from " + mName + " provider");
-                        return false;
-                    }
-                }
-
-                if (!location.isComplete()) {
-                    Log.e(TAG, "blocking incomplete location from " + mName + " provider");
-                    return false;
-                }
-
-                return true;
-            });
-
-            if (filtered == null) {
+            processed = processReportedLocation(locationResult);
+            if (processed == null) {
                 return;
             }
 
             // don't log location received for passive provider because it's spammy
-            EVENT_LOG.logProviderReceivedLocations(mName, filtered.size());
+            EVENT_LOG.logProviderReceivedLocations(mName, processed.size());
         } else {
-            // passive provider should get already filtered results as input
-            filtered = locationResult;
+            // passive provider should get already processed results as input
+            processed = locationResult;
         }
 
         // check for non-monotonic locations if we're not the passive manager. the passive manager
@@ -2554,20 +2556,78 @@
         }
 
         // update last location
-        setLastLocation(filtered.getLastLocation(), UserHandle.USER_ALL);
+        setLastLocation(processed.getLastLocation(), UserHandle.USER_ALL);
 
         // attempt listener delivery
         deliverToListeners(registration -> {
-            return registration.acceptLocationChange(filtered);
+            return registration.acceptLocationChange(processed);
         });
 
         // notify passive provider
         if (mPassiveManager != null) {
-            mPassiveManager.updateLocation(filtered);
+            mPassiveManager.updateLocation(processed);
         }
     }
 
     @GuardedBy("mMultiplexerLock")
+    @Nullable
+    private LocationResult processReportedLocation(LocationResult locationResult) {
+        LocationResult processed = locationResult.filter(location -> {
+            if (!location.isMock()) {
+                if (location.getLatitude() == 0 && location.getLongitude() == 0) {
+                    Log.e(TAG, "blocking 0,0 location from " + mName + " provider");
+                    return false;
+                }
+            }
+
+            if (!location.isComplete()) {
+                Log.e(TAG, "blocking incomplete location from " + mName + " provider");
+                return false;
+            }
+
+            return true;
+        });
+        if (processed == null) {
+            return null;
+        }
+
+        // Attempt to add a missing MSL altitude on behalf of the provider.
+        if (DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_LOCATION,
+                "enable_location_provider_manager_msl", true)) {
+            return processed.map(location -> {
+                if (!location.hasMslAltitude() && location.hasAltitude()) {
+                    try {
+                        Location locationCopy = new Location(location);
+                        if (mAltitudeConverter.addMslAltitudeToLocation(locationCopy)) {
+                            return locationCopy;
+                        }
+                        // Only queue up one IO thread runnable.
+                        if (mIsAltitudeConverterIdle) {
+                            mIsAltitudeConverterIdle = false;
+                            IoThread.getExecutor().execute(() -> {
+                                try {
+                                    // Results added to the location copy are essentially discarded.
+                                    // We only rely on the side effect of loading altitude assets
+                                    // into the converter's memory cache.
+                                    mAltitudeConverter.addMslAltitudeToLocation(mContext,
+                                            locationCopy);
+                                } catch (IOException e) {
+                                    Log.e(TAG, "not loading MSL altitude assets: " + e);
+                                }
+                                mIsAltitudeConverterIdle = true;
+                            });
+                        }
+                    } catch (IllegalArgumentException e) {
+                        Log.e(TAG, "not adding MSL altitude to location: " + e);
+                    }
+                }
+                return location;
+            });
+        }
+        return processed;
+    }
+
+    @GuardedBy("mMultiplexerLock")
     private void onUserStarted(int userId) {
         if (userId == UserHandle.USER_NULL) {
             return;
diff --git a/services/core/java/com/android/server/locksettings/BiometricDeferredQueue.java b/services/core/java/com/android/server/locksettings/BiometricDeferredQueue.java
index 46f486d..f572845 100644
--- a/services/core/java/com/android/server/locksettings/BiometricDeferredQueue.java
+++ b/services/core/java/com/android/server/locksettings/BiometricDeferredQueue.java
@@ -311,7 +311,7 @@
 
     @Nullable
     private static synchronized IGateKeeperService getGatekeeperService() {
-        final IBinder service = ServiceManager.getService(Context.GATEKEEPER_SERVICE);
+        final IBinder service = ServiceManager.waitForService(Context.GATEKEEPER_SERVICE);
         if (service == null) {
             Slog.e(TAG, "Unable to acquire GateKeeperService");
             return null;
diff --git a/services/core/java/com/android/server/locksettings/LockSettingsService.java b/services/core/java/com/android/server/locksettings/LockSettingsService.java
index 0616f4e..b3ef869 100644
--- a/services/core/java/com/android/server/locksettings/LockSettingsService.java
+++ b/services/core/java/com/android/server/locksettings/LockSettingsService.java
@@ -118,7 +118,6 @@
 import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
-import android.util.EventLog;
 import android.util.Log;
 import android.util.LongSparseArray;
 import android.util.Slog;
@@ -311,8 +310,9 @@
             super.onBootPhase(phase);
             if (phase == PHASE_ACTIVITY_MANAGER_READY) {
                 mLockSettingsService.migrateOldDataAfterSystemReady();
-                mLockSettingsService.loadEscrowData();
                 mLockSettingsService.deleteRepairModePersistentDataIfNeeded();
+            } else if (phase == PHASE_BOOT_COMPLETED) {
+                mLockSettingsService.loadEscrowData();
             }
         }
 
@@ -393,11 +393,14 @@
         if (mStorage.hasChildProfileLock(profileUserId)) {
             return;
         }
+        final UserInfo parent = mUserManager.getProfileParent(profileUserId);
+        if (parent == null) {
+            return;
+        }
         // If parent does not have a screen lock, simply clear credential from the profile,
         // to maintain the invariant that unified profile should always have the same secure state
         // as its parent.
-        final int parentId = mUserManager.getProfileParent(profileUserId).id;
-        if (!isUserSecure(parentId) && !profileUserPassword.isNone()) {
+        if (!isUserSecure(parent.id) && !profileUserPassword.isNone()) {
             Slogf.i(TAG, "Clearing password for profile user %d to match parent", profileUserId);
             setLockCredentialInternal(LockscreenCredential.createNone(), profileUserPassword,
                     profileUserId, /* isLockTiedToParent= */ true);
@@ -408,7 +411,7 @@
         // This can only happen during an upgrade path where SID is yet to be
         // generated when the user unlocks for the first time.
         try {
-            parentSid = getGateKeeperService().getSecureUserId(parentId);
+            parentSid = getGateKeeperService().getSecureUserId(parent.id);
             if (parentSid == 0) {
                 return;
             }
@@ -419,7 +422,7 @@
         try (LockscreenCredential unifiedProfilePassword = generateRandomProfilePassword()) {
             setLockCredentialInternal(unifiedProfilePassword, profileUserPassword, profileUserId,
                     /* isLockTiedToParent= */ true);
-            tieProfileLockToParent(profileUserId, parentId, unifiedProfilePassword);
+            tieProfileLockToParent(profileUserId, parent.id, unifiedProfilePassword);
             mManagedProfilePasswordCache.storePassword(profileUserId, unifiedProfilePassword,
                     parentSid);
         }
@@ -832,15 +835,11 @@
 
     @Override // binder interface
     public void systemReady() {
-        if (mContext.checkCallingOrSelfPermission(PERMISSION) != PERMISSION_GRANTED) {
-            EventLog.writeEvent(0x534e4554, "28251513", getCallingUid(), "");  // SafetyNet
-        }
         checkWritePermission();
 
         mHasSecureLockScreen = mContext.getPackageManager()
                 .hasSystemFeature(PackageManager.FEATURE_SECURE_LOCK_SCREEN);
         migrateOldData();
-        getGateKeeperService();
         getAuthSecretHal();
         mDeviceProvisionedObserver.onSystemReady();
 
@@ -1090,9 +1089,6 @@
     }
 
     private final void checkPasswordHavePermission() {
-        if (mContext.checkCallingOrSelfPermission(PERMISSION) != PERMISSION_GRANTED) {
-            EventLog.writeEvent(0x534e4554, "28251513", getCallingUid(), "");  // SafetyNet
-        }
         mContext.enforceCallingOrSelfPermission(PERMISSION, "LockSettingsHave");
     }
 
@@ -1635,6 +1631,7 @@
                                 + PERMISSION);
             }
         }
+        credential.validateBasicRequirements();
 
         final long identity = Binder.clearCallingIdentity();
         try {
@@ -1733,10 +1730,6 @@
     }
 
     private void onPostPasswordChanged(LockscreenCredential newCredential, int userHandle) {
-        if (newCredential.isPattern()) {
-            setBoolean(LockPatternUtils.PATTERN_EVER_CHOSEN_KEY, true, userHandle);
-        }
-
         updatePasswordHistory(newCredential, userHandle);
         mContext.getSystemService(TrustManager.class).reportEnabledTrustAgentsChanged(userHandle);
     }
@@ -2208,17 +2201,6 @@
                 // credential has matched
                 mBiometricDeferredQueue.addPendingLockoutResetForUser(userId,
                         authResult.syntheticPassword.deriveGkPassword());
-
-                // perform verifyChallenge with synthetic password which generates the real GK auth
-                // token and response for the current user
-                response = mSpManager.verifyChallenge(getGateKeeperService(),
-                        authResult.syntheticPassword, 0L /* challenge */, userId);
-                if (response.getResponseCode() != VerifyCredentialResponse.RESPONSE_OK) {
-                    // This shouldn't really happen: the unwrapping of SP succeeds, but SP doesn't
-                    // match the recorded GK password handle.
-                    Slog.wtf(TAG, "verifyChallenge with SP failed.");
-                    return VerifyCredentialResponse.ERROR;
-                }
             }
         }
         if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_OK) {
@@ -2614,7 +2596,7 @@
             return mGateKeeperService;
         }
 
-        final IBinder service = ServiceManager.getService(Context.GATEKEEPER_SERVICE);
+        final IBinder service = ServiceManager.waitForService(Context.GATEKEEPER_SERVICE);
         if (service != null) {
             try {
                 service.linkToDeath(new GateKeeperDiedRecipient(), 0);
@@ -2852,7 +2834,7 @@
      *
      * Also maintains the invariants described in {@link SyntheticPasswordManager} by
      * setting/clearing the protection (by the SP) on the user's auth-bound Keystore keys when the
-     * LSKF is added/removed, respectively.  If the new LSKF is nonempty, then the Gatekeeper auth
+     * LSKF is added/removed, respectively.  If an LSKF is being added, then the Gatekeeper auth
      * token is also refreshed.
      */
     @GuardedBy("mSpManager")
@@ -2869,9 +2851,7 @@
             // not needed by synchronizeUnifiedWorkChallengeForProfiles()
             profilePasswords = null;
 
-            if (mSpManager.hasSidForUser(userId)) {
-                mSpManager.verifyChallenge(getGateKeeperService(), sp, 0L, userId);
-            } else {
+            if (!mSpManager.hasSidForUser(userId)) {
                 mSpManager.newSidForUser(getGateKeeperService(), sp, userId);
                 mSpManager.verifyChallenge(getGateKeeperService(), sp, 0L, userId);
                 setKeystorePassword(sp.deriveKeyStorePassword(), userId);
@@ -3087,6 +3067,7 @@
     private boolean setLockCredentialWithToken(LockscreenCredential credential, long tokenHandle,
             byte[] token, int userId) {
         boolean result;
+        credential.validateBasicRequirements();
         synchronized (mSpManager) {
             if (!mSpManager.hasEscrowData(userId)) {
                 throw new SecurityException("Escrow token is disabled on the current user");
diff --git a/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java b/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java
index f107d0b..df95c69 100644
--- a/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java
+++ b/services/core/java/com/android/server/locksettings/LockSettingsShellCommand.java
@@ -16,8 +16,6 @@
 
 package com.android.server.locksettings;
 
-import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
-import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PATTERN;
 import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
 
 import android.app.ActivityManager;
@@ -313,16 +311,8 @@
                 mLockPatternUtils.getRequestedPasswordMetrics(mCurrentUserId);
         final int requiredComplexity =
                 mLockPatternUtils.getRequestedPasswordComplexity(mCurrentUserId);
-        final List<PasswordValidationError> errors;
-        if (credential.isPassword() || credential.isPin()) {
-            errors = PasswordMetrics.validatePassword(requiredMetrics, requiredComplexity,
-                    credential.isPin(), credential.getCredential());
-        } else {
-            PasswordMetrics metrics = new PasswordMetrics(
-                    credential.isPattern() ? CREDENTIAL_TYPE_PATTERN : CREDENTIAL_TYPE_NONE);
-            errors = PasswordMetrics.validatePasswordMetrics(
-                    requiredMetrics, requiredComplexity, metrics);
-        }
+        final List<PasswordValidationError> errors =
+                PasswordMetrics.validateCredential(requiredMetrics, requiredComplexity, credential);
         if (!errors.isEmpty()) {
             getOutPrintWriter().println(
                     "New credential doesn't satisfy admin policies: " + errors.get(0));
diff --git a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java
index 7349088..d700c6a 100644
--- a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java
+++ b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java
@@ -36,6 +36,7 @@
 import android.hardware.weaver.WeaverConfig;
 import android.hardware.weaver.WeaverReadResponse;
 import android.hardware.weaver.WeaverReadStatus;
+import android.os.IBinder;
 import android.os.RemoteCallbackList;
 import android.os.RemoteException;
 import android.os.ServiceManager;
@@ -505,7 +506,7 @@
 
     private final Context mContext;
     private LockSettingsStorage mStorage;
-    private IWeaver mWeaver;
+    private volatile IWeaver mWeaver;
     private WeaverConfig mWeaverConfig;
     private PasswordSlotManager mPasswordSlotManager;
 
@@ -536,13 +537,33 @@
         }
     }
 
-    private IWeaver getWeaverService() {
+    private class WeaverDiedRecipient implements IBinder.DeathRecipient {
+        // Not synchronized on the outer class, since setting the pointer to null is atomic, and we
+        // don't want to have to worry about any sort of deadlock here.
+        @Override
+        public void binderDied() {
+            // Weaver died.  Try to recover by setting mWeaver to null, which makes
+            // getWeaverService() look up the service again.  This is done only as a simple
+            // robustness measure; it should not be relied on.  If this triggers, the root cause is
+            // almost certainly a bug in the device's Weaver implementation, which must be fixed.
+            Slog.wtf(TAG, "Weaver service has died");
+            mWeaver.asBinder().unlinkToDeath(this, 0);
+            mWeaver = null;
+        }
+    }
+
+    private @Nullable IWeaver getWeaverServiceInternal() {
         // Try to get the AIDL service first
         try {
             IWeaver aidlWeaver = IWeaver.Stub.asInterface(
                     ServiceManager.waitForDeclaredService(IWeaver.DESCRIPTOR + "/default"));
             if (aidlWeaver != null) {
                 Slog.i(TAG, "Using AIDL weaver service");
+                try {
+                    aidlWeaver.asBinder().linkToDeath(new WeaverDiedRecipient(), 0);
+                } catch (RemoteException e) {
+                    Slog.w(TAG, "Unable to register Weaver death recipient", e);
+                }
                 return aidlWeaver;
             }
         } catch (SecurityException e) {
@@ -568,15 +589,20 @@
         return LockPatternUtils.isAutoPinConfirmFeatureAvailable();
     }
 
-    private synchronized boolean isWeaverAvailable() {
-        if (mWeaver != null) {
-            return true;
+    /**
+     * Returns a handle to the Weaver service, or null if Weaver is unavailable.  Note that not all
+     * devices support Weaver.
+     */
+    private synchronized @Nullable IWeaver getWeaverService() {
+        IWeaver weaver = mWeaver;
+        if (weaver != null) {
+            return weaver;
         }
 
         // Re-initialize weaver in case there was a transient error preventing access to it.
-        IWeaver weaver = getWeaverService();
+        weaver = getWeaverServiceInternal();
         if (weaver == null) {
-            return false;
+            return null;
         }
 
         final WeaverConfig weaverConfig;
@@ -584,19 +610,18 @@
             weaverConfig = weaver.getConfig();
         } catch (RemoteException | ServiceSpecificException e) {
             Slog.e(TAG, "Failed to get weaver config", e);
-            return false;
+            return null;
         }
         if (weaverConfig == null || weaverConfig.slots <= 0) {
             Slog.e(TAG, "Invalid weaver config");
-            return false;
+            return null;
         }
 
         mWeaver = weaver;
         mWeaverConfig = weaverConfig;
         mPasswordSlotManager.refreshActiveSlots(getUsedWeaverSlots());
         Slog.i(TAG, "Weaver service initialized");
-
-        return true;
+        return weaver;
     }
 
     /**
@@ -606,7 +631,7 @@
      *
      * @return the value stored in the weaver slot, or null if the operation fails
      */
-    private byte[] weaverEnroll(int slot, byte[] key, @Nullable byte[] value) {
+    private byte[] weaverEnroll(IWeaver weaver, int slot, byte[] key, @Nullable byte[] value) {
         if (slot == INVALID_WEAVER_SLOT || slot >= mWeaverConfig.slots) {
             throw new IllegalArgumentException("Invalid slot for weaver");
         }
@@ -619,7 +644,7 @@
             value = SecureRandomUtils.randomBytes(mWeaverConfig.valueSize);
         }
         try {
-            mWeaver.write(slot, key, value);
+            weaver.write(slot, key, value);
         } catch (RemoteException e) {
             Slog.e(TAG, "weaver write binder call failed, slot: " + slot, e);
             return null;
@@ -648,7 +673,7 @@
      * the verification is successful, throttled or failed. If successful, the bound secret
      * is also returned.
      */
-    private VerifyCredentialResponse weaverVerify(int slot, byte[] key) {
+    private VerifyCredentialResponse weaverVerify(IWeaver weaver, int slot, byte[] key) {
         if (slot == INVALID_WEAVER_SLOT || slot >= mWeaverConfig.slots) {
             throw new IllegalArgumentException("Invalid slot for weaver");
         }
@@ -659,7 +684,7 @@
         }
         final WeaverReadResponse readResponse;
         try {
-            readResponse = mWeaver.read(slot, key);
+            readResponse = weaver.read(slot, key);
         } catch (RemoteException e) {
             Slog.e(TAG, "weaver read failed, slot: " + slot, e);
             return VerifyCredentialResponse.ERROR;
@@ -870,14 +895,15 @@
         int slot = loadWeaverSlot(protectorId, userId);
         destroyState(WEAVER_SLOT_NAME, protectorId, userId);
         if (slot != INVALID_WEAVER_SLOT) {
-            if (!isWeaverAvailable()) {
+            final IWeaver weaver = getWeaverService();
+            if (weaver == null) {
                 Slog.e(TAG, "Cannot erase Weaver slot because Weaver is unavailable");
                 return;
             }
             Set<Integer> usedSlots = getUsedWeaverSlots();
             if (!usedSlots.contains(slot)) {
                 Slogf.i(TAG, "Erasing Weaver slot %d", slot);
-                weaverEnroll(slot, null, null);
+                weaverEnroll(weaver, slot, null, null);
                 mPasswordSlotManager.markSlotDeleted(slot);
             } else {
                 Slogf.i(TAG, "Weaver slot %d was already reused; not erasing it", slot);
@@ -955,13 +981,14 @@
 
         Slogf.i(TAG, "Creating LSKF-based protector %016x for user %d", protectorId, userId);
 
-        if (isWeaverAvailable()) {
+        final IWeaver weaver = getWeaverService();
+        if (weaver != null) {
             // Weaver is available, so make the protector use it to verify the LSKF.  Do this even
             // if the LSKF is empty, as that gives us support for securely deleting the protector.
             int weaverSlot = getNextAvailableWeaverSlot();
             Slogf.i(TAG, "Enrolling LSKF for user %d into Weaver slot %d", userId, weaverSlot);
-            byte[] weaverSecret = weaverEnroll(weaverSlot, stretchedLskfToWeaverKey(stretchedLskf),
-                    null);
+            byte[] weaverSecret = weaverEnroll(weaver, weaverSlot,
+                    stretchedLskfToWeaverKey(stretchedLskf), null);
             if (weaverSecret == null) {
                 throw new IllegalStateException(
                         "Fail to enroll user password under weaver " + userId);
@@ -1048,7 +1075,8 @@
             }
             return VerifyCredentialResponse.fromGateKeeperResponse(response);
         } else if (persistentData.type == PersistentData.TYPE_SP_WEAVER) {
-            if (!isWeaverAvailable()) {
+            final IWeaver weaver = getWeaverService();
+            if (weaver == null) {
                 Slog.e(TAG, "No weaver service to verify SP-based persistent data credential");
                 return VerifyCredentialResponse.ERROR;
             }
@@ -1056,7 +1084,8 @@
             byte[] stretchedLskf = stretchLskf(userCredential, pwd);
             int weaverSlot = persistentData.userId;
 
-            return weaverVerify(weaverSlot, stretchedLskfToWeaverKey(stretchedLskf)).stripPayload();
+            return weaverVerify(weaver, weaverSlot,
+                    stretchedLskfToWeaverKey(stretchedLskf)).stripPayload();
         } else {
             Slog.e(TAG, "persistentData.type must be TYPE_SP_GATEKEEPER or TYPE_SP_WEAVER, but is "
                     + persistentData.type);
@@ -1209,7 +1238,7 @@
         TokenData tokenData = new TokenData();
         tokenData.mType = type;
         final byte[] secdiscardable = SecureRandomUtils.randomBytes(SECDISCARDABLE_LENGTH);
-        if (isWeaverAvailable()) {
+        if (getWeaverService() != null) {
             tokenData.weaverSecret = SecureRandomUtils.randomBytes(mWeaverConfig.valueSize);
             tokenData.secdiscardableOnDisk = SyntheticPasswordCrypto.encrypt(tokenData.weaverSecret,
                             PERSONALIZATION_WEAVER_TOKEN, secdiscardable);
@@ -1252,10 +1281,11 @@
             return false;
         }
         Slogf.i(TAG, "Creating token-based protector %016x for user %d", tokenHandle, userId);
-        if (isWeaverAvailable()) {
+        final IWeaver weaver = getWeaverService();
+        if (weaver != null) {
             int slot = getNextAvailableWeaverSlot();
             Slogf.i(TAG, "Using Weaver slot %d for new token-based protector", slot);
-            if (weaverEnroll(slot, null, tokenData.weaverSecret) == null) {
+            if (weaverEnroll(weaver, slot, null, tokenData.weaverSecret) == null) {
                 Slog.e(TAG, "Failed to enroll weaver secret when activating token");
                 return false;
             }
@@ -1344,12 +1374,14 @@
         int weaverSlot = loadWeaverSlot(protectorId, userId);
         if (weaverSlot != INVALID_WEAVER_SLOT) {
             // Protector uses Weaver to verify the LSKF
-            if (!isWeaverAvailable()) {
+            final IWeaver weaver = getWeaverService();
+            if (weaver == null) {
                 Slog.e(TAG, "Protector uses Weaver, but Weaver is unavailable");
                 result.gkResponse = VerifyCredentialResponse.ERROR;
                 return result;
             }
-            result.gkResponse = weaverVerify(weaverSlot, stretchedLskfToWeaverKey(stretchedLskf));
+            result.gkResponse = weaverVerify(weaver, weaverSlot,
+                    stretchedLskfToWeaverKey(stretchedLskf));
             if (result.gkResponse.getResponseCode() != VerifyCredentialResponse.RESPONSE_OK) {
                 return result;
             }
@@ -1517,12 +1549,13 @@
         }
         int slotId = loadWeaverSlot(protectorId, userId);
         if (slotId != INVALID_WEAVER_SLOT) {
-            if (!isWeaverAvailable()) {
+            final IWeaver weaver = getWeaverService();
+            if (weaver == null) {
                 Slog.e(TAG, "Protector uses Weaver, but Weaver is unavailable");
                 result.gkResponse = VerifyCredentialResponse.ERROR;
                 return result;
             }
-            VerifyCredentialResponse response = weaverVerify(slotId, null);
+            VerifyCredentialResponse response = weaverVerify(weaver, slotId, null);
             if (response.getResponseCode() != VerifyCredentialResponse.RESPONSE_OK ||
                     response.getGatekeeperHAT() == null) {
                 Slog.e(TAG,
@@ -1651,8 +1684,10 @@
             }
             return result;
         } else if (responseCode == GateKeeperResponse.RESPONSE_RETRY) {
+            Slog.e(TAG, "Gatekeeper verification of synthetic password failed with RESPONSE_RETRY");
             return VerifyCredentialResponse.fromTimeout(response.getTimeout());
         } else {
+            Slog.e(TAG, "Gatekeeper verification of synthetic password failed with RESPONSE_ERROR");
             return VerifyCredentialResponse.ERROR;
         }
     }
@@ -1675,7 +1710,7 @@
     /** Destroy all weak token-based SP protectors for the given user. */
     public void destroyAllWeakTokenBasedProtectors(int userId) {
         List<Long> protectorIds =
-            mStorage.listSyntheticPasswordProtectorsForUser(SECDISCARDABLE_NAME, userId);
+            mStorage.listSyntheticPasswordProtectorsForUser(SP_BLOB_NAME, userId);
         for (long protectorId : protectorIds) {
             SyntheticPasswordBlob blob = SyntheticPasswordBlob.fromBytes(loadState(SP_BLOB_NAME,
                     protectorId, userId));
diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/KeySyncTask.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/KeySyncTask.java
index ec0d985..77a60289 100644
--- a/services/core/java/com/android/server/locksettings/recoverablekeystore/KeySyncTask.java
+++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/KeySyncTask.java
@@ -123,7 +123,7 @@
      * @param userId The uid of the user whose profile has been unlocked.
      * @param credentialType The type of credential as defined in {@code LockPatternUtils}
      * @param credential The credential, encoded as a byte array
-     * @param credentialUpdated signals weather credentials were updated.
+     * @param credentialUpdated indicates credentials change.
      * @param platformKeyManager platform key manager
      * @param testOnlyInsecureCertificateHelper utility class used for end-to-end tests
      */
@@ -143,7 +143,7 @@
         mRecoverableKeyStoreDb = recoverableKeyStoreDb;
         mUserId = userId;
         mCredentialType = credentialType;
-        mCredential = credential;
+        mCredential = credential != null ? Arrays.copyOf(credential, credential.length) : null;
         mCredentialUpdated = credentialUpdated;
         mPlatformKeyManager = platformKeyManager;
         mRecoverySnapshotStorage = snapshotStorage;
@@ -160,6 +160,10 @@
             }
         } catch (Exception e) {
             Log.e(TAG, "Unexpected exception thrown during KeySyncTask", e);
+        } finally {
+            if (mCredential != null) {
+                Arrays.fill(mCredential, (byte) 0); // no longer needed.
+            }
         }
     }
 
diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/PlatformKeyManager.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/PlatformKeyManager.java
index 7009a41..ce3fb85 100644
--- a/services/core/java/com/android/server/locksettings/recoverablekeystore/PlatformKeyManager.java
+++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/PlatformKeyManager.java
@@ -166,6 +166,7 @@
      * @param userId The ID of the user to whose lock screen the platform key must be bound.
      * @throws NoSuchAlgorithmException if AES is unavailable - should never happen.
      * @throws KeyStoreException if there is an error in AndroidKeyStore.
+     * @throws InsecureUserException if the user does not have a lock screen set.
      * @throws IOException if there was an issue with local database update.
      * @throws RemoteException if there was an issue communicating with {@link IGateKeeperService}.
      *
@@ -174,7 +175,7 @@
     @VisibleForTesting
     void regenerate(int userId)
             throws NoSuchAlgorithmException, KeyStoreException, IOException,
-                    RemoteException {
+                    RemoteException, InsecureUserException {
         int generationId = getGenerationId(userId);
         int nextId;
         if (generationId == -1) {
@@ -195,13 +196,14 @@
      * @throws UnrecoverableKeyException if the key could not be recovered.
      * @throws NoSuchAlgorithmException if AES is unavailable - should never occur.
      * @throws IOException if there was an issue with local database update.
+     * @throws InsecureUserException if the user does not have a lock screen set.
      * @throws RemoteException if there was an issue communicating with {@link IGateKeeperService}.
      *
      * @hide
      */
     public PlatformEncryptionKey getEncryptKey(int userId)
             throws KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException,
-                    IOException, RemoteException {
+                    IOException, RemoteException, InsecureUserException {
         init(userId);
         try {
             // Try to see if the decryption key is still accessible before using the encryption key.
@@ -254,7 +256,7 @@
      */
     public PlatformDecryptionKey getDecryptKey(int userId)
             throws KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException,
-                    IOException, RemoteException {
+                    IOException, InsecureUserException, RemoteException {
         init(userId);
         try {
             PlatformDecryptionKey decryptionKey = getDecryptKeyInternal(userId);
@@ -328,7 +330,7 @@
      */
     void init(int userId)
             throws KeyStoreException, NoSuchAlgorithmException, IOException,
-                    RemoteException {
+                    RemoteException, InsecureUserException {
         int generationId = getGenerationId(userId);
         if (isKeyLoaded(userId, generationId)) {
             Log.i(TAG, String.format(
@@ -414,7 +416,8 @@
      * @throws RemoteException if there was an issue communicating with {@link IGateKeeperService}.
      */
     private void generateAndLoadKey(int userId, int generationId)
-            throws NoSuchAlgorithmException, KeyStoreException, IOException, RemoteException {
+            throws NoSuchAlgorithmException, KeyStoreException, IOException, RemoteException,
+                InsecureUserException {
         String encryptAlias = getEncryptAlias(userId, generationId);
         String decryptAlias = getDecryptAlias(userId, generationId);
         // SecretKey implementation doesn't provide reliable way to destroy the secret
@@ -427,23 +430,31 @@
                     .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE);
         // Skip UserAuthenticationRequired for main user
         if (userId ==  UserHandle.USER_SYSTEM) {
+            // attempt to store key will fail if screenlock is not set.
             decryptionKeyProtection.setUnlockedDeviceRequired(true);
         } else {
             // Don't set protection params to prevent losing key.
         }
         // Store decryption key first since it is more likely to fail.
-        mKeyStore.setEntry(
-                decryptAlias,
-                new KeyStore.SecretKeyEntry(secretKey),
-                decryptionKeyProtection.build());
-        mKeyStore.setEntry(
-                encryptAlias,
-                new KeyStore.SecretKeyEntry(secretKey),
-                new KeyProtection.Builder(KeyProperties.PURPOSE_ENCRYPT)
-                    .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
-                    .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
-                    .build());
-
+        try {
+            mKeyStore.setEntry(
+                    decryptAlias,
+                    new KeyStore.SecretKeyEntry(secretKey),
+                    decryptionKeyProtection.build());
+            mKeyStore.setEntry(
+                    encryptAlias,
+                    new KeyStore.SecretKeyEntry(secretKey),
+                    new KeyProtection.Builder(KeyProperties.PURPOSE_ENCRYPT)
+                        .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
+                        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
+                        .build());
+        } catch (KeyStoreException e) {
+            if (!isDeviceSecure(userId)) {
+                throw new InsecureUserException("Screenlock is not set");
+            } else {
+                throw e;
+            }
+        }
         setGenerationId(userId, generationId);
     }
 
@@ -477,4 +488,8 @@
         return keyStore;
     }
 
+    private boolean isDeviceSecure(int userId) {
+        return mContext.getSystemService(KeyguardManager.class).isDeviceSecure(userId);
+    }
+
 }
diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
index 24dbce4..0cfdaf2 100644
--- a/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
+++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java
@@ -19,6 +19,7 @@
 import static android.security.keystore.recovery.RecoveryController.ERROR_BAD_CERTIFICATE_FORMAT;
 import static android.security.keystore.recovery.RecoveryController.ERROR_DECRYPTION_FAILED;
 import static android.security.keystore.recovery.RecoveryController.ERROR_DOWNGRADE_CERTIFICATE;
+import static android.security.keystore.recovery.RecoveryController.ERROR_INSECURE_USER;
 import static android.security.keystore.recovery.RecoveryController.ERROR_INVALID_CERTIFICATE;
 import static android.security.keystore.recovery.RecoveryController.ERROR_INVALID_KEY_FORMAT;
 import static android.security.keystore.recovery.RecoveryController.ERROR_NO_SNAPSHOT_PENDING;
@@ -750,6 +751,8 @@
             throw new RuntimeException(e);
         } catch (KeyStoreException | UnrecoverableKeyException | IOException e) {
             throw new ServiceSpecificException(ERROR_SERVICE_INTERNAL_ERROR, e.getMessage());
+        } catch (InsecureUserException e) {
+            throw new ServiceSpecificException(ERROR_INSECURE_USER, e.getMessage());
         }
 
         try {
@@ -817,6 +820,8 @@
             throw new RuntimeException(e);
         } catch (KeyStoreException | UnrecoverableKeyException | IOException e) {
             throw new ServiceSpecificException(ERROR_SERVICE_INTERNAL_ERROR, e.getMessage());
+        } catch (InsecureUserException e) {
+            throw new ServiceSpecificException(ERROR_INSECURE_USER, e.getMessage());
         }
 
         try {
diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage.java
index 06db6b8..ef56a1e 100644
--- a/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage.java
+++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage.java
@@ -138,7 +138,7 @@
         } catch (android.security.KeyStoreException e) {
             if (e.getNumericErrorCode()
                     == android.security.KeyStoreException.ERROR_KEY_DOES_NOT_EXIST) {
-                Log.e(TAG, "Failed to get grant for KeyStore key - key not found", e);
+                Log.w(TAG, "Failed to get grant for KeyStore key - key not found");
                 throw new ServiceSpecificException(ERROR_KEY_NOT_FOUND, e.getMessage());
             }
             Log.e(TAG, "Failed to get grant for KeyStore key.", e);
diff --git a/services/core/java/com/android/server/logcat/OWNERS b/services/core/java/com/android/server/logcat/OWNERS
index 4ce93aa..33e1873 100644
--- a/services/core/java/com/android/server/logcat/OWNERS
+++ b/services/core/java/com/android/server/logcat/OWNERS
@@ -4,6 +4,5 @@
 eunjeongshin@google.com
 georgechan@google.com
 jsharkey@google.com
-vishwath@google.com
 wenhaowang@google.com
 xiaozhenl@google.com
diff --git a/services/core/java/com/android/server/media/MediaFeatureFlagManager.java b/services/core/java/com/android/server/media/MediaFeatureFlagManager.java
index 70ee38f..f555505 100644
--- a/services/core/java/com/android/server/media/MediaFeatureFlagManager.java
+++ b/services/core/java/com/android/server/media/MediaFeatureFlagManager.java
@@ -17,6 +17,8 @@
 package com.android.server.media;
 
 import android.annotation.StringDef;
+import android.app.ActivityThread;
+import android.app.Application;
 import android.provider.DeviceConfig;
 
 import java.lang.annotation.ElementType;
@@ -31,10 +33,13 @@
      */
     private static final String NAMESPACE_MEDIA_BETTER_TOGETHER = "media_better_together";
 
-    @StringDef(prefix = "FEATURE_", value = {
-            FEATURE_AUDIO_STRATEGIES_IS_USING_LEGACY_CONTROLLER
-    })
-    @Target({ ElementType.TYPE_USE, ElementType.TYPE_PARAMETER })
+    @StringDef(
+            prefix = "FEATURE_",
+            value = {
+                FEATURE_AUDIO_STRATEGIES_IS_USING_LEGACY_CONTROLLER,
+                FEATURE_SCANNING_MINIMUM_PACKAGE_IMPORTANCE
+            })
+    @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
     @Retention(RetentionPolicy.SOURCE)
     /* package */ @interface MediaFeatureFlag {}
 
@@ -46,6 +51,13 @@
             FEATURE_AUDIO_STRATEGIES_IS_USING_LEGACY_CONTROLLER =
             "BluetoothRouteController__enable_legacy_bluetooth_routes_controller";
 
+    /**
+     * Whether to use IMPORTANCE_FOREGROUND (i.e. 100) or IMPORTANCE_FOREGROUND_SERVICE (i.e. 125)
+     * as the minimum package importance for scanning.
+     */
+    /* package */ static final @MediaFeatureFlag String
+            FEATURE_SCANNING_MINIMUM_PACKAGE_IMPORTANCE = "scanning_package_minimum_importance";
+
     private static final MediaFeatureFlagManager sInstance = new MediaFeatureFlagManager();
 
     private MediaFeatureFlagManager() {
@@ -63,4 +75,29 @@
     public boolean getBoolean(@MediaFeatureFlag String key, boolean defaultValue) {
         return DeviceConfig.getBoolean(NAMESPACE_MEDIA_BETTER_TOGETHER, key, defaultValue);
     }
+
+    /**
+     * Returns an int value from {@link DeviceConfig} from the system_time namespace, or {@code
+     * defaultValue} if there is no explicit value set.
+     */
+    public int getInt(@MediaFeatureFlag String key, int defaultValue) {
+        return DeviceConfig.getInt(NAMESPACE_MEDIA_BETTER_TOGETHER, key, defaultValue);
+    }
+
+    /**
+     * Adds a listener to react for changes in media feature flags values. Future calls to this
+     * method with the same listener will replace the old namespace and executor.
+     *
+     * @param onPropertiesChangedListener The listener to add.
+     */
+    public void addOnPropertiesChangedListener(
+            DeviceConfig.OnPropertiesChangedListener onPropertiesChangedListener) {
+        Application currentApplication = ActivityThread.currentApplication();
+        if (currentApplication != null) {
+            DeviceConfig.addOnPropertiesChangedListener(
+                    NAMESPACE_MEDIA_BETTER_TOGETHER,
+                    currentApplication.getMainExecutor(),
+                    onPropertiesChangedListener);
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/media/MediaRoute2Provider.java b/services/core/java/com/android/server/media/MediaRoute2Provider.java
index c59b733..8149847 100644
--- a/services/core/java/com/android/server/media/MediaRoute2Provider.java
+++ b/services/core/java/com/android/server/media/MediaRoute2Provider.java
@@ -116,6 +116,7 @@
     public void dump(PrintWriter pw, String prefix) {
         pw.println(prefix + getDebugString());
         prefix += "  ";
+
         if (mProviderInfo == null) {
             pw.println(prefix + "<provider info not received, yet>");
         } else if (mProviderInfo.getRoutes().isEmpty()) {
@@ -125,6 +126,17 @@
                 pw.printf("%s%s | %s\n", prefix, route.getId(), route.getName());
             }
         }
+
+        pw.println(prefix + "Active routing sessions:");
+        synchronized (mLock) {
+            if (mSessionInfos.isEmpty()) {
+                pw.println(prefix + "  <no active routing sessions>");
+            } else {
+                for (RoutingSessionInfo routingSessionInfo : mSessionInfos) {
+                    routingSessionInfo.dump(pw, prefix + "  ");
+                }
+            }
+        }
     }
 
     @Override
diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
index 309a99e..63dc59c 100644
--- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
+++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
@@ -24,13 +24,13 @@
 import static android.media.MediaRouter2Utils.getProviderId;
 
 import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
+import static com.android.server.media.MediaFeatureFlagManager.FEATURE_SCANNING_MINIMUM_PACKAGE_IMPORTANCE;
 
 import android.Manifest;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.RequiresPermission;
 import android.app.ActivityManager;
-import android.app.ActivityThread;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -95,10 +95,11 @@
     //       in MediaRouter2, remove this constant and replace the usages with the real request IDs.
     private static final long DUMMY_REQUEST_ID = -1;
 
-    private static final String MEDIA_BETTER_TOGETHER_NAMESPACE = "media_better_together";
-
-    private static final String KEY_SCANNING_PACKAGE_MINIMUM_IMPORTANCE =
-            "scanning_package_minimum_importance";
+    private static int sPackageImportanceForScanning =
+            MediaFeatureFlagManager.getInstance()
+                    .getInt(
+                            FEATURE_SCANNING_MINIMUM_PACKAGE_IMPORTANCE,
+                            IMPORTANCE_FOREGROUND_SERVICE);
 
     /**
      * Contains the list of bluetooth permissions that are required to do system routing.
@@ -111,11 +112,6 @@
                 Manifest.permission.BLUETOOTH_CONNECT, Manifest.permission.BLUETOOTH_SCAN
             };
 
-    private static int sPackageImportanceForScanning = DeviceConfig.getInt(
-            MEDIA_BETTER_TOGETHER_NAMESPACE,
-            /* name */ KEY_SCANNING_PACKAGE_MINIMUM_IMPORTANCE,
-            /* defaultValue */ IMPORTANCE_FOREGROUND_SERVICE);
-
     private final Context mContext;
     private final UserManagerInternal mUserManagerInternal;
     private final Object mLock = new Object();
@@ -172,9 +168,8 @@
         mContext.registerReceiver(mScreenOnOffReceiver, screenOnOffIntentFilter);
         mContext.getPackageManager().addOnPermissionsChangeListener(this::onPermissionsChanged);
 
-        DeviceConfig.addOnPropertiesChangedListener(MEDIA_BETTER_TOGETHER_NAMESPACE,
-                ActivityThread.currentApplication().getMainExecutor(),
-                this::onDeviceConfigChange);
+        MediaFeatureFlagManager.getInstance()
+                .addOnPropertiesChangedListener(this::onDeviceConfigChange);
     }
 
     /**
@@ -487,20 +482,20 @@
     }
 
     public void registerManager(@NonNull IMediaRouter2Manager manager,
-            @NonNull String packageName) {
+            @NonNull String callerPackageName) {
         Objects.requireNonNull(manager, "manager must not be null");
-        if (TextUtils.isEmpty(packageName)) {
-            throw new IllegalArgumentException("packageName must not be empty");
+        if (TextUtils.isEmpty(callerPackageName)) {
+            throw new IllegalArgumentException("callerPackageName must not be empty");
         }
 
-        final int uid = Binder.getCallingUid();
-        final int pid = Binder.getCallingPid();
-        final int userId = UserHandle.getUserHandleForUid(uid).getIdentifier();
+        final int callerUid = Binder.getCallingUid();
+        final int callerPid = Binder.getCallingPid();
+        final int userId = UserHandle.getUserHandleForUid(callerUid).getIdentifier();
 
         final long token = Binder.clearCallingIdentity();
         try {
             synchronized (mLock) {
-                registerManagerLocked(manager, uid, pid, packageName, userId);
+                registerManagerLocked(manager, callerUid, callerPid, callerPackageName, userId);
             }
         } finally {
             Binder.restoreCallingIdentity(token);
@@ -678,30 +673,35 @@
 
         final long token = Binder.clearCallingIdentity();
         try {
-            RoutingSessionInfo systemSessionInfo = null;
             synchronized (mLock) {
                 UserRecord userRecord = getOrCreateUserRecordLocked(userId);
                 List<RoutingSessionInfo> sessionInfos;
                 if (hasModifyAudioRoutingPermission) {
                     if (setDeviceRouteSelected) {
-                        systemSessionInfo = userRecord.mHandler.mSystemProvider
+                        // Return a fake system session that shows the device route as selected and
+                        // available bluetooth routes as transferable.
+                        return userRecord.mHandler.mSystemProvider
                                 .generateDeviceRouteSelectedSessionInfo(packageName);
                     } else {
                         sessionInfos = userRecord.mHandler.mSystemProvider.getSessionInfos();
                         if (sessionInfos != null && !sessionInfos.isEmpty()) {
-                            systemSessionInfo = new RoutingSessionInfo.Builder(sessionInfos.get(0))
-                                    .setClientPackageName(packageName).build();
+                            // Return a copy of the current system session with no modification,
+                            // except setting the client package name.
+                            return new RoutingSessionInfo.Builder(sessionInfos.get(0))
+                                    .setClientPackageName(packageName)
+                                    .build();
                         } else {
                             Slog.w(TAG, "System provider does not have any session info.");
                         }
                     }
                 } else {
-                    systemSessionInfo = new RoutingSessionInfo.Builder(
-                            userRecord.mHandler.mSystemProvider.getDefaultSessionInfo())
-                            .setClientPackageName(packageName).build();
+                    return new RoutingSessionInfo.Builder(
+                                    userRecord.mHandler.mSystemProvider.getDefaultSessionInfo())
+                            .setClientPackageName(packageName)
+                            .build();
                 }
             }
-            return systemSessionInfo;
+            return null;
         } finally {
             Binder.restoreCallingIdentity(token);
         }
@@ -925,6 +925,17 @@
             return;
         }
 
+        Slog.i(
+                TAG,
+                TextUtils.formatSimple(
+                        "requestCreateSessionWithRouter2 | router: %s(id: %d), old session id: %s,"
+                            + " new session's route id: %s, request id: %d",
+                        routerRecord.mPackageName,
+                        routerRecord.mRouterId,
+                        oldSession.getId(),
+                        route.getId(),
+                        requestId));
+
         if (managerRequestId != MediaRoute2ProviderService.REQUEST_ID_NONE) {
             ManagerRecord manager = routerRecord.mUserRecord.mHandler.findManagerWithId(
                     toRequesterId(managerRequestId));
@@ -1130,25 +1141,26 @@
 
     @GuardedBy("mLock")
     private void registerManagerLocked(@NonNull IMediaRouter2Manager manager,
-            int uid, int pid, @NonNull String packageName, int userId) {
+            int callerUid, int callerPid, @NonNull String callerPackageName, int userId) {
         final IBinder binder = manager.asBinder();
         ManagerRecord managerRecord = mAllManagerRecords.get(binder);
 
         if (managerRecord != null) {
-            Slog.w(TAG, "registerManagerLocked: Same manager already exists. packageName="
-                    + packageName);
+            Slog.w(TAG, "registerManagerLocked: Same manager already exists. callerPackageName="
+                    + callerPackageName);
             return;
         }
 
         Slog.i(TAG, TextUtils.formatSimple(
-                "registerManager | uid: %d, pid: %d, package: %s, user: %d",
-                uid, pid, packageName, userId));
+                "registerManager | callerUid: %d, callerPid: %d, package: %s, user: %d",
+                callerUid, callerPid, callerPackageName, userId));
 
-        mContext.enforcePermission(Manifest.permission.MEDIA_CONTENT_CONTROL, pid, uid,
+        mContext.enforcePermission(Manifest.permission.MEDIA_CONTENT_CONTROL, callerPid, callerUid,
                 "Must hold MEDIA_CONTENT_CONTROL permission.");
 
         UserRecord userRecord = getOrCreateUserRecordLocked(userId);
-        managerRecord = new ManagerRecord(userRecord, manager, uid, pid, packageName);
+        managerRecord = new ManagerRecord(
+                userRecord, manager, callerUid, callerPid, callerPackageName);
         try {
             binder.linkToDeath(managerRecord, 0);
         } catch (RemoteException ex) {
@@ -1174,8 +1186,11 @@
             // TODO: UserRecord <-> routerRecord, why do they reference each other?
             // How about removing mUserRecord from routerRecord?
             routerRecord.mUserRecord.mHandler.sendMessage(
-                    obtainMessage(UserHandler::notifyDiscoveryPreferenceChangedToManager,
-                        routerRecord.mUserRecord.mHandler, routerRecord, manager));
+                    obtainMessage(
+                            UserHandler::notifyDiscoveryPreferenceChangedToManager,
+                            routerRecord.mUserRecord.mHandler,
+                            routerRecord,
+                            manager));
         }
 
         userRecord.mHandler.sendMessage(
@@ -1192,7 +1207,7 @@
 
         Slog.i(TAG, TextUtils.formatSimple(
                 "unregisterManager | package: %s, user: %d, manager: %d",
-                managerRecord.mPackageName,
+                managerRecord.mOwnerPackageName,
                 userRecord.mUserId,
                 managerRecord.mManagerId));
 
@@ -1455,9 +1470,10 @@
     // End of locked methods that are used by both MediaRouter2 and MediaRouter2Manager.
 
     private void onDeviceConfigChange(@NonNull DeviceConfig.Properties properties) {
-        sPackageImportanceForScanning = properties.getInt(
-                /* name */ KEY_SCANNING_PACKAGE_MINIMUM_IMPORTANCE,
-                /* defaultValue */ IMPORTANCE_FOREGROUND_SERVICE);
+        sPackageImportanceForScanning =
+                properties.getInt(
+                        /* name */ FEATURE_SCANNING_MINIMUM_PACKAGE_IMPORTANCE,
+                        /* defaultValue */ IMPORTANCE_FOREGROUND_SERVICE);
     }
 
     static long toUniqueRequestId(int requesterId, int originalRequestId) {
@@ -1709,20 +1725,20 @@
     final class ManagerRecord implements IBinder.DeathRecipient {
         public final UserRecord mUserRecord;
         public final IMediaRouter2Manager mManager;
-        public final int mUid;
-        public final int mPid;
-        public final String mPackageName;
+        public final int mOwnerUid;
+        public final int mOwnerPid;
+        public final String mOwnerPackageName;
         public final int mManagerId;
         public SessionCreationRequest mLastSessionCreationRequest;
         public boolean mIsScanning;
 
         ManagerRecord(UserRecord userRecord, IMediaRouter2Manager manager,
-                int uid, int pid, String packageName) {
+                int ownerUid, int ownerPid, String ownerPackageName) {
             mUserRecord = userRecord;
             mManager = manager;
-            mUid = uid;
-            mPid = pid;
-            mPackageName = packageName;
+            mOwnerUid = ownerUid;
+            mOwnerPid = ownerPid;
+            mOwnerPackageName = ownerPackageName;
             mManagerId = mNextRouterOrManagerId.getAndIncrement();
         }
 
@@ -1740,10 +1756,10 @@
 
             String indent = prefix + "  ";
 
-            pw.println(indent + "mPackageName=" + mPackageName);
+            pw.println(indent + "mOwnerPackageName=" + mOwnerPackageName);
             pw.println(indent + "mManagerId=" + mManagerId);
-            pw.println(indent + "mUid=" + mUid);
-            pw.println(indent + "mPid=" + mPid);
+            pw.println(indent + "mOwnerUid=" + mOwnerUid);
+            pw.println(indent + "mOwnerPid=" + mOwnerPid);
             pw.println(indent + "mIsScanning=" + mIsScanning);
 
             if (mLastSessionCreationRequest != null) {
@@ -1771,7 +1787,7 @@
 
         @Override
         public String toString() {
-            return "Manager " + mPackageName + " (pid " + mPid + ")";
+            return "Manager " + mOwnerPackageName + " (pid " + mOwnerPid + ")";
         }
     }
 
@@ -1926,10 +1942,10 @@
             }
             boolean isUidRelevant;
             synchronized (service.mLock) {
-                isUidRelevant = mUserRecord.mRouterRecords.stream().anyMatch(
-                        router -> router.mUid == uid)
-                        | mUserRecord.mManagerRecords.stream().anyMatch(
-                            manager -> manager.mUid == uid);
+                isUidRelevant =
+                        mUserRecord.mRouterRecords.stream().anyMatch(router -> router.mUid == uid)
+                                | mUserRecord.mManagerRecords.stream()
+                                        .anyMatch(manager -> manager.mOwnerUid == uid);
             }
             if (isUidRelevant) {
                 sendMessage(PooledLambda.obtainMessage(
@@ -2742,7 +2758,7 @@
             if (service.mPowerManager.isInteractive()) {
                 isManagerScanning = managerRecords.stream().anyMatch(manager ->
                         manager.mIsScanning && service.mActivityManager
-                                .getPackageImportance(manager.mPackageName)
+                                .getPackageImportance(manager.mOwnerPackageName)
                                 <= sPackageImportanceForScanning);
 
                 if (isManagerScanning) {
@@ -2808,6 +2824,7 @@
             return null;
         }
     }
+
     static final class SessionCreationRequest {
         public final RouterRecord mRouterRecord;
         public final long mUniqueRequestId;
diff --git a/services/core/java/com/android/server/media/MediaRouterService.java b/services/core/java/com/android/server/media/MediaRouterService.java
index b440e88..cc261a4 100644
--- a/services/core/java/com/android/server/media/MediaRouterService.java
+++ b/services/core/java/com/android/server/media/MediaRouterService.java
@@ -195,7 +195,8 @@
 
     // Binder call
     @Override
-    public void registerClientAsUser(IMediaRouterClient client, String packageName, int userId) {
+    public void registerClientAsUser(
+            IMediaRouterClient client, @NonNull String packageName, int userId) {
         final int uid = Binder.getCallingUid();
         if (!validatePackageName(uid, packageName)) {
             throw new SecurityException("packageName must match the calling uid");
@@ -537,12 +538,12 @@
 
     // Binder call
     @Override
-    public void registerManager(IMediaRouter2Manager manager, String packageName) {
+    public void registerManager(IMediaRouter2Manager manager, String callerPackageName) {
         final int uid = Binder.getCallingUid();
-        if (!validatePackageName(uid, packageName)) {
-            throw new SecurityException("packageName must match the calling uid");
+        if (!validatePackageName(uid, callerPackageName)) {
+            throw new SecurityException("callerPackageName must match the calling uid");
         }
-        mService2.registerManager(manager, packageName);
+        mService2.registerManager(manager, callerPackageName);
     }
 
     // Binder call
@@ -693,8 +694,13 @@
     }
 
     @GuardedBy("mLock")
-    private void registerClientLocked(IMediaRouterClient client,
-            int uid, int pid, String packageName, int userId, boolean trusted) {
+    private void registerClientLocked(
+            IMediaRouterClient client,
+            int uid,
+            int pid,
+            @NonNull String packageName,
+            int userId,
+            boolean trusted) {
         final IBinder binder = client.asBinder();
         ClientRecord clientRecord = mAllClientRecords.get(binder);
         if (clientRecord == null) {
@@ -926,6 +932,10 @@
         clientRecord.dispose();
     }
 
+    /**
+     * Validates whether the provided package name matches a given uid. Returns false if the package
+     * name is null.
+     */
     private boolean validatePackageName(int uid, String packageName) {
         if (packageName != null) {
             String[] packageNames = mContext.getPackageManager().getPackagesForUid(uid);
@@ -974,8 +984,13 @@
         public String mSelectedRouteId;
         public String mGroupId;
 
-        public ClientRecord(UserRecord userRecord, IMediaRouterClient client,
-                int uid, int pid, String packageName, boolean trusted) {
+        ClientRecord(
+                UserRecord userRecord,
+                IMediaRouterClient client,
+                int uid,
+                int pid,
+                @NonNull String packageName,
+                boolean trusted) {
             mUserRecord = userRecord;
             mClient = client;
             mUid = uid;
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java
index 9185a00..95ca08c 100644
--- a/services/core/java/com/android/server/media/MediaSessionRecord.java
+++ b/services/core/java/com/android/server/media/MediaSessionRecord.java
@@ -106,6 +106,16 @@
     @EnabledSince(targetSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
     static final long THROW_FOR_INVALID_BROADCAST_RECEIVER = 270049379L;
 
+    /**
+     * {@link MediaSession#setMediaButtonReceiver(PendingIntent)} throws an {@link
+     * IllegalArgumentException} if the provided {@link PendingIntent} targets an {@link
+     * android.app.Activity activity} for apps targeting Android V and above. For apps targeting
+     * Android U and below, the request will be ignored.
+     */
+    @ChangeId
+    @EnabledSince(targetSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
+    static final long THROW_FOR_ACTIVITY_MEDIA_BUTTON_RECEIVER = 272737196L;
+
     private static final String TAG = "MediaSessionRecord";
     private static final String[] ART_URIS = new String[] {
             MediaMetadata.METADATA_KEY_ALBUM_ART_URI,
@@ -1055,13 +1065,26 @@
         }
 
         @Override
-        public void setMediaButtonReceiver(PendingIntent pi) throws RemoteException {
+        public void setMediaButtonReceiver(@Nullable PendingIntent pi) throws RemoteException {
+            final int uid = Binder.getCallingUid();
             final long token = Binder.clearCallingIdentity();
             try {
                 if ((mPolicies & MediaSessionPolicyProvider.SESSION_POLICY_IGNORE_BUTTON_RECEIVER)
                         != 0) {
                     return;
                 }
+
+                if (pi != null && pi.isActivity()) {
+                    if (CompatChanges.isChangeEnabled(
+                            THROW_FOR_ACTIVITY_MEDIA_BUTTON_RECEIVER, uid)) {
+                        throw new IllegalArgumentException(
+                                "The media button receiver cannot be set to an activity.");
+                    } else {
+                        Log.w(TAG, "Ignoring invalid media button receiver targeting an activity.");
+                        return;
+                    }
+                }
+
                 mMediaButtonReceiverHolder =
                         MediaButtonReceiverHolder.create(mUserId, pi, mPackageName);
                 mService.onMediaButtonReceiverChanged(MediaSessionRecord.this);
diff --git a/services/core/java/com/android/server/media/MediaSessionStack.java b/services/core/java/com/android/server/media/MediaSessionStack.java
index 26e8fe6..321b74c 100644
--- a/services/core/java/com/android/server/media/MediaSessionStack.java
+++ b/services/core/java/com/android/server/media/MediaSessionStack.java
@@ -40,8 +40,6 @@
     private static final boolean DEBUG = MediaSessionService.DEBUG;
     private static final String TAG = "MediaSessionStack";
 
-    private static final int DUMP_EVENTS_MAX_COUNT = 70;
-
     /**
      * Listen the change in the media button session.
      */
diff --git a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java
index f4e6abd..6c9aa4b 100644
--- a/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java
+++ b/services/core/java/com/android/server/media/SystemMediaRoute2Provider.java
@@ -17,6 +17,7 @@
 package com.android.server.media;
 
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -253,6 +254,16 @@
         return mDefaultSessionInfo;
     }
 
+    /**
+     * Builds a system {@link RoutingSessionInfo} with the selected route set to the currently
+     * selected <b>device</b> route (wired or built-in, but not bluetooth) and transferable routes
+     * set to the currently available (connected) bluetooth routes.
+     *
+     * <p>The session's client package name is set to the provided package name.
+     *
+     * <p>Returns {@code null} if there are no registered system sessions.
+     */
+    @Nullable
     public RoutingSessionInfo generateDeviceRouteSelectedSessionInfo(String packageName) {
         synchronized (mLock) {
             if (mSessionInfos.isEmpty()) {
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 802a7f2..e7bd68e 100644
--- a/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java
+++ b/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java
@@ -652,13 +652,10 @@
             return projection;
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_MEDIA_PROJECTION)
         @Override // Binder call
         public boolean isCurrentProjection(IMediaProjection projection) {
-            if (mContext.checkCallingOrSelfPermission(MANAGE_MEDIA_PROJECTION)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException("Requires MANAGE_MEDIA_PROJECTION in order to check "
-                        + "if the given projection is current.");
-            }
+            isCurrentProjection_enforcePermission();
             return MediaProjectionManagerService.this.isCurrentProjection(
                     projection == null ? null : projection.asBinder());
         }
@@ -678,13 +675,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_MEDIA_PROJECTION)
         @Override // Binder call
         public void stopActiveProjection() {
-            if (mContext.checkCallingOrSelfPermission(MANAGE_MEDIA_PROJECTION)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException("Requires MANAGE_MEDIA_PROJECTION in order to stop "
-                        + "the active projection");
-            }
+            stopActiveProjection_enforcePermission();
             final long token = Binder.clearCallingIdentity();
             try {
                 synchronized (mLock) {
@@ -698,13 +692,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_MEDIA_PROJECTION)
         @Override // Binder call
         public void notifyActiveProjectionCapturedContentResized(int width, int height) {
-            if (mContext.checkCallingOrSelfPermission(MANAGE_MEDIA_PROJECTION)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException("Requires MANAGE_MEDIA_PROJECTION in order to notify "
-                        + "on captured content resize");
-            }
+            notifyActiveProjectionCapturedContentResized_enforcePermission();
             synchronized (mLock) {
                 if (!isCurrentProjection(mProjectionGrant)) {
                     return;
@@ -722,13 +713,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_MEDIA_PROJECTION)
         @Override
         public void notifyActiveProjectionCapturedContentVisibilityChanged(boolean isVisible) {
-            if (mContext.checkCallingOrSelfPermission(MANAGE_MEDIA_PROJECTION)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException("Requires MANAGE_MEDIA_PROJECTION in order to notify "
-                        + "on captured content visibility changed");
-            }
+            notifyActiveProjectionCapturedContentVisibilityChanged_enforcePermission();
             synchronized (mLock) {
                 if (!isCurrentProjection(mProjectionGrant)) {
                     return;
@@ -776,14 +764,11 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_MEDIA_PROJECTION)
         @Override
         public boolean setContentRecordingSession(@Nullable ContentRecordingSession incomingSession,
                 @NonNull IMediaProjection projection) {
-            if (mContext.checkCallingOrSelfPermission(Manifest.permission.MANAGE_MEDIA_PROJECTION)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException("Requires MANAGE_MEDIA_PROJECTION to set session "
-                        + "details.");
-            }
+            setContentRecordingSession_enforcePermission();
             synchronized (mLock) {
                 if (!isCurrentProjection(projection)) {
                     throw new SecurityException("Unable to set ContentRecordingSession on "
@@ -799,13 +784,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_MEDIA_PROJECTION)
         @Override
         public void requestConsentForInvalidProjection(@NonNull IMediaProjection projection) {
-            if (mContext.checkCallingOrSelfPermission(Manifest.permission.MANAGE_MEDIA_PROJECTION)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException("Requires MANAGE_MEDIA_PROJECTION to check if the given"
-                        + "projection is valid.");
-            }
+            requestConsentForInvalidProjection_enforcePermission();
             synchronized (mLock) {
                 if (!isCurrentProjection(projection)) {
                     Slog.v(TAG, "Reusing token: Won't request consent again for a token that "
@@ -922,13 +904,10 @@
                 || mType == MediaProjectionManager.TYPE_SCREEN_CAPTURE;
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_MEDIA_PROJECTION)
         @Override // Binder call
         public int applyVirtualDisplayFlags(int flags) {
-            if (mContext.checkCallingOrSelfPermission(MANAGE_MEDIA_PROJECTION)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException("Requires MANAGE_MEDIA_PROJECTION to apply virtual "
-                        + "display flags.");
-            }
+            applyVirtualDisplayFlags_enforcePermission();
             if (mType == MediaProjectionManager.TYPE_SCREEN_CAPTURE) {
                 flags &= ~DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY;
                 flags |= DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR
@@ -1085,33 +1064,24 @@
             mCallbackDelegate.remove(callback);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_MEDIA_PROJECTION)
         @Override // Binder call
         public void setLaunchCookie(IBinder launchCookie) {
-            if (mContext.checkCallingOrSelfPermission(MANAGE_MEDIA_PROJECTION)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException("Requires MANAGE_MEDIA_PROJECTION to set launch "
-                        + "cookie.");
-            }
+            setLaunchCookie_enforcePermission();
             mLaunchCookie = launchCookie;
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_MEDIA_PROJECTION)
         @Override // Binder call
         public IBinder getLaunchCookie() {
-            if (mContext.checkCallingOrSelfPermission(MANAGE_MEDIA_PROJECTION)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException("Requires MANAGE_MEDIA_PROJECTION to get launch "
-                        + "cookie.");
-            }
+            getLaunchCookie_enforcePermission();
             return mLaunchCookie;
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_MEDIA_PROJECTION)
         @Override
         public boolean isValid() {
-            if (mContext.checkCallingOrSelfPermission(Manifest.permission.MANAGE_MEDIA_PROJECTION)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException("Requires MANAGE_MEDIA_PROJECTION to check if this"
-                        + "projection is valid.");
-            }
+            isValid_enforcePermission();
             synchronized (mLock) {
                 final long curMs = mClock.uptimeMillis();
                 final boolean hasTimedOut = curMs - mCreateTimeMs > mTimeoutMs;
@@ -1138,13 +1108,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_MEDIA_PROJECTION)
         @Override
         public void notifyVirtualDisplayCreated(int displayId) {
-            if (mContext.checkCallingOrSelfPermission(Manifest.permission.MANAGE_MEDIA_PROJECTION)
-                    != PackageManager.PERMISSION_GRANTED) {
-                throw new SecurityException("Requires MANAGE_MEDIA_PROJECTION to notify virtual "
-                        + "display created.");
-            }
+            notifyVirtualDisplayCreated_enforcePermission();
             synchronized (mLock) {
                 mVirtualDisplayId = displayId;
 
diff --git a/services/core/java/com/android/server/media/projection/TEST_MAPPING b/services/core/java/com/android/server/media/projection/TEST_MAPPING
index 4324930..a792498 100644
--- a/services/core/java/com/android/server/media/projection/TEST_MAPPING
+++ b/services/core/java/com/android/server/media/projection/TEST_MAPPING
@@ -13,20 +13,6 @@
           "exclude-annotation": "org.junit.Ignore"
         }
       ]
-    },
-    {
-      "name": "CtsMediaProjectionTestCases",
-      "options": [
-        {
-          "exclude-annotation": "android.platform.test.annotations.FlakyTest"
-        },
-        {
-          "exclude-annotation": "androidx.test.filters.FlakyTest"
-        },
-        {
-          "exclude-annotation": "org.junit.Ignore"
-        }
-      ]
     }
   ]
 }
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index c506469..fb9bc01 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -141,6 +141,7 @@
 import static org.xmlpull.v1.XmlPullParser.START_TAG;
 
 import android.Manifest;
+import android.annotation.EnforcePermission;
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -2892,9 +2893,10 @@
         }
     }
 
+    @EnforcePermission(MANAGE_NETWORK_POLICY)
     @Override
     public void setUidPolicy(int uid, int policy) {
-        mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
+        setUidPolicy_enforcePermission();
 
         if (!UserHandle.isApp(uid)) {
             throw new IllegalArgumentException("cannot apply policy to UID " + uid);
@@ -2913,9 +2915,10 @@
         }
     }
 
+    @EnforcePermission(MANAGE_NETWORK_POLICY)
     @Override
     public void addUidPolicy(int uid, int policy) {
-        mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
+        addUidPolicy_enforcePermission();
 
         if (!UserHandle.isApp(uid)) {
             throw new IllegalArgumentException("cannot apply policy to UID " + uid);
@@ -2931,9 +2934,10 @@
         }
     }
 
+    @EnforcePermission(MANAGE_NETWORK_POLICY)
     @Override
     public void removeUidPolicy(int uid, int policy) {
-        mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
+        removeUidPolicy_enforcePermission();
 
         if (!UserHandle.isApp(uid)) {
             throw new IllegalArgumentException("cannot apply policy to UID " + uid);
@@ -2998,18 +3002,20 @@
         }
     }
 
+    @EnforcePermission(MANAGE_NETWORK_POLICY)
     @Override
     public int getUidPolicy(int uid) {
-        mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
+        getUidPolicy_enforcePermission();
 
         synchronized (mUidRulesFirstLock) {
             return mUidPolicy.get(uid, POLICY_NONE);
         }
     }
 
+    @EnforcePermission(MANAGE_NETWORK_POLICY)
     @Override
     public int[] getUidsWithPolicy(int policy) {
-        mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
+        getUidsWithPolicy_enforcePermission();
 
         int[] uids = new int[0];
         synchronized (mUidRulesFirstLock) {
@@ -3105,9 +3111,10 @@
         mListeners.unregister(listener);
     }
 
+    @EnforcePermission(MANAGE_NETWORK_POLICY)
     @Override
     public void setNetworkPolicies(NetworkPolicy[] policies) {
-        mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
+        setNetworkPolicies_enforcePermission();
 
         final long token = Binder.clearCallingIdentity();
         try {
@@ -3128,9 +3135,10 @@
         setNetworkPolicies(policies);
     }
 
+    @EnforcePermission(MANAGE_NETWORK_POLICY)
     @Override
     public NetworkPolicy[] getNetworkPolicies(String callingPackage) {
-        mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
+        getNetworkPolicies_enforcePermission();
         try {
             mContext.enforceCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE, TAG);
             // SKIP checking run-time OP_READ_PHONE_STATE since caller or self has PRIVILEGED
@@ -3226,9 +3234,10 @@
         return template;
     }
 
+    @EnforcePermission(MANAGE_NETWORK_POLICY)
     @Override
     public void snoozeLimit(NetworkTemplate template) {
-        mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
+        snoozeLimit_enforcePermission();
 
         final long token = Binder.clearCallingIdentity();
         try {
@@ -3336,9 +3345,10 @@
                 .sendToTarget();
     }
 
+    @EnforcePermission(ACCESS_NETWORK_STATE)
     @Override
     public int getRestrictBackgroundByCaller() {
-        mContext.enforceCallingOrSelfPermission(ACCESS_NETWORK_STATE, TAG);
+        getRestrictBackgroundByCaller_enforcePermission();
         return getRestrictBackgroundStatusInternal(Binder.getCallingUid());
     }
 
@@ -3371,18 +3381,20 @@
         }
     }
 
+    @EnforcePermission(MANAGE_NETWORK_POLICY)
     @Override
     public boolean getRestrictBackground() {
-        mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
+        getRestrictBackground_enforcePermission();
 
         synchronized (mUidRulesFirstLock) {
             return mRestrictBackground;
         }
     }
 
+    @EnforcePermission(MANAGE_NETWORK_POLICY)
     @Override
     public void setDeviceIdleMode(boolean enabled) {
-        mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
+        setDeviceIdleMode_enforcePermission();
         Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "setDeviceIdleMode");
         try {
             synchronized (mUidRulesFirstLock) {
@@ -3407,9 +3419,10 @@
         }
     }
 
+    @EnforcePermission(MANAGE_NETWORK_POLICY)
     @Override
     public void setWifiMeteredOverride(String networkId, int meteredOverride) {
-        mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
+        setWifiMeteredOverride_enforcePermission();
         final long token = Binder.clearCallingIdentity();
         try {
             final WifiManager wm = mContext.getSystemService(WifiManager.class);
@@ -6017,9 +6030,10 @@
         }
     }
 
+    @EnforcePermission(NETWORK_SETTINGS)
     @Override
     public void factoryReset(String subscriber) {
-        mContext.enforceCallingOrSelfPermission(NETWORK_SETTINGS, TAG);
+        factoryReset_enforcePermission();
 
         if (mUserManager.hasUserRestriction(UserManager.DISALLOW_NETWORK_RESET)) {
             return;
@@ -6078,9 +6092,10 @@
         return blockedReasons != BLOCKED_REASON_NONE;
     }
 
+    @EnforcePermission(OBSERVE_NETWORK_POLICY)
     @Override
     public boolean isUidRestrictedOnMeteredNetworks(int uid) {
-        mContext.enforceCallingOrSelfPermission(OBSERVE_NETWORK_POLICY, TAG);
+        isUidRestrictedOnMeteredNetworks_enforcePermission();
         synchronized (mUidBlockedState) {
             final UidBlockedState uidBlockedState = mUidBlockedState.get(uid);
             int blockedReasons = uidBlockedState == null
diff --git a/services/core/java/com/android/server/notification/ConditionProviders.java b/services/core/java/com/android/server/notification/ConditionProviders.java
index bfc4f53..2da1a68 100644
--- a/services/core/java/com/android/server/notification/ConditionProviders.java
+++ b/services/core/java/com/android/server/notification/ConditionProviders.java
@@ -441,6 +441,58 @@
         return info == null ? null : (IConditionProvider) info.service;
     }
 
+    void resetDefaultFromConfig() {
+        synchronized (mDefaultsLock) {
+            mDefaultComponents.clear();
+            mDefaultPackages.clear();
+        }
+        loadDefaultsFromConfig();
+    }
+
+    boolean removeDefaultFromConfig(int userId) {
+        boolean removed = false;
+        String defaultDndDenied = mContext.getResources().getString(
+                R.string.config_defaultDndDeniedPackages);
+        if (defaultDndDenied != null) {
+            String[] dnds = defaultDndDenied.split(ManagedServices.ENABLED_SERVICES_SEPARATOR);
+            for (int i = 0; i < dnds.length; i++) {
+                if (TextUtils.isEmpty(dnds[i])) {
+                    continue;
+                }
+                removed |= removePackageFromApprovedLists(userId, dnds[i], "remove from config");
+            }
+        }
+        return removed;
+    }
+
+    private boolean removePackageFromApprovedLists(int userId, String pkg, String reason) {
+        boolean removed = false;
+        synchronized (mApproved) {
+            final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(
+                    userId);
+            if (approvedByType != null) {
+                int approvedByTypeSize = approvedByType.size();
+                for (int i = 0; i < approvedByTypeSize; i++) {
+                    final ArraySet<String> approved = approvedByType.valueAt(i);
+                    int approvedSize = approved.size();
+                    for (int j = approvedSize - 1; j >= 0; j--) {
+                        final String packageOrComponent = approved.valueAt(j);
+                        final String packageName = getPackageName(packageOrComponent);
+                        if (TextUtils.equals(pkg, packageName)) {
+                            approved.removeAt(j);
+                            removed = true;
+                            if (DEBUG) {
+                                Slog.v(TAG, "Removing " + packageOrComponent
+                                        + " from approved list; " + reason);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return removed;
+    }
+
     private static class ConditionRecord {
         public final Uri id;
         public final ComponentName component;
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java
index 5dd958b..c6f6fe2 100644
--- a/services/core/java/com/android/server/notification/ManagedServices.java
+++ b/services/core/java/com/android/server/notification/ManagedServices.java
@@ -26,6 +26,7 @@
 
 import android.annotation.NonNull;
 import android.app.ActivityManager;
+import android.app.ActivityOptions;
 import android.app.PendingIntent;
 import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
@@ -1542,8 +1543,11 @@
 
         intent.putExtra(Intent.EXTRA_CLIENT_LABEL, mConfig.clientLabel);
 
+        final ActivityOptions activityOptions = ActivityOptions.makeBasic();
+        activityOptions.setIgnorePendingIntentCreatorForegroundState(true);
         final PendingIntent pendingIntent = PendingIntent.getActivity(
-            mContext, 0, new Intent(mConfig.settingsAction), PendingIntent.FLAG_IMMUTABLE);
+                mContext, 0, new Intent(mConfig.settingsAction), PendingIntent.FLAG_IMMUTABLE,
+                activityOptions.toBundle());
         intent.putExtra(Intent.EXTRA_CLIENT_INTENT, pendingIntent);
 
         ApplicationInfo appInfo = null;
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
old mode 100644
new mode 100755
index 15a8c0f..e782ea9
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -832,12 +832,32 @@
             allowNotificationListener(userId, cn);
         }
 
+        allowDndPackages(userId);
+
+        setDefaultAssistantForUser(userId);
+    }
+
+    @VisibleForTesting
+    void allowDndPackages(int userId) {
         ArraySet<String> defaultDnds = mConditionProviders.getDefaultPackages();
         for (int i = 0; i < defaultDnds.size(); i++) {
             allowDndPackage(userId, defaultDnds.valueAt(i));
         }
+        if (!isDNDMigrationDone(userId)) {
+            setDNDMigrationDone(userId);
+        }
+    }
 
-        setDefaultAssistantForUser(userId);
+    @VisibleForTesting
+    boolean isDNDMigrationDone(int userId) {
+        return Settings.Secure.getIntForUser(getContext().getContentResolver(),
+                Settings.Secure.DND_CONFIGS_MIGRATED, 0, userId) == 1;
+    }
+
+    @VisibleForTesting
+    void setDNDMigrationDone(int userId) {
+        Settings.Secure.putIntForUser(getContext().getContentResolver(),
+                Settings.Secure.DND_CONFIGS_MIGRATED, 1, userId);
     }
 
     protected void migrateDefaultNAS() {
@@ -1024,6 +1044,24 @@
     }
 
     @VisibleForTesting
+    void resetDefaultDndIfNecessary() {
+        boolean removed = false;
+        final List<UserInfo> activeUsers = mUm.getAliveUsers();
+        for (UserInfo userInfo : activeUsers) {
+            int userId = userInfo.getUserHandle().getIdentifier();
+            if (isDNDMigrationDone(userId)) {
+                continue;
+            }
+            removed |= mConditionProviders.removeDefaultFromConfig(userId);
+            mConditionProviders.resetDefaultFromConfig();
+            allowDndPackages(userId);
+        }
+        if (removed) {
+            handleSavePolicyFile();
+        }
+    }
+
+    @VisibleForTesting
     protected void loadPolicyFile() {
         if (DBG) Slog.d(TAG, "loadPolicyFile");
         synchronized (mPolicyFile) {
@@ -1031,6 +1069,13 @@
             try {
                 infile = mPolicyFile.openRead();
                 readPolicyXml(infile, false /*forRestore*/, UserHandle.USER_ALL);
+
+                // We re-load the default dnd packages to allow the newly added and denined.
+                final boolean isWatch = mPackageManagerClient.hasSystemFeature(
+                        PackageManager.FEATURE_WATCH);
+                if (isWatch) {
+                    resetDefaultDndIfNecessary();
+                }
             } catch (FileNotFoundException e) {
                 // No data yet
                 // Load default managed services approvals
@@ -4343,6 +4388,7 @@
             return getActiveNotificationsWithAttribution(callingPkg, null);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.ACCESS_NOTIFICATIONS)
         /**
          * System-only API for getting a list of current (i.e. not cleared) notifications.
          *
@@ -4353,9 +4399,7 @@
         public StatusBarNotification[] getActiveNotificationsWithAttribution(String callingPkg,
                 String callingAttributionTag) {
             // enforce() will ensure the calling uid has the correct permission
-            getContext().enforceCallingOrSelfPermission(
-                    android.Manifest.permission.ACCESS_NOTIFICATIONS,
-                    "NotificationManagerService.getActiveNotifications");
+            getActiveNotificationsWithAttribution_enforcePermission();
 
             ArrayList<StatusBarNotification> tmp = new ArrayList<>();
             int uid = Binder.getCallingUid();
@@ -4471,6 +4515,7 @@
                     includeSnoozed);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.ACCESS_NOTIFICATIONS)
         /**
          * System-only API for getting a list of recent (cleared, no longer shown) notifications.
          */
@@ -4479,9 +4524,7 @@
         public StatusBarNotification[] getHistoricalNotificationsWithAttribution(String callingPkg,
                 String callingAttributionTag, int count, boolean includeSnoozed) {
             // enforce() will ensure the calling uid has the correct permission
-            getContext().enforceCallingOrSelfPermission(
-                    android.Manifest.permission.ACCESS_NOTIFICATIONS,
-                    "NotificationManagerService.getHistoricalNotifications");
+            getHistoricalNotificationsWithAttribution_enforcePermission();
 
             StatusBarNotification[] tmp = null;
             int uid = Binder.getCallingUid();
@@ -4497,6 +4540,7 @@
             return tmp;
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.ACCESS_NOTIFICATIONS)
         /**
          * System-only API for getting a list of historical notifications. May contain multiple days
          * of notifications.
@@ -4507,9 +4551,7 @@
         public NotificationHistory getNotificationHistory(String callingPkg,
                 String callingAttributionTag) {
             // enforce() will ensure the calling uid has the correct permission
-            getContext().enforceCallingOrSelfPermission(
-                    android.Manifest.permission.ACCESS_NOTIFICATIONS,
-                    "NotificationManagerService.getNotificationHistory");
+            getNotificationHistory_enforcePermission();
             int uid = Binder.getCallingUid();
 
             // noteOp will check to make sure the callingPkg matches the uid
diff --git a/services/core/java/com/android/server/notification/PermissionHelper.java b/services/core/java/com/android/server/notification/PermissionHelper.java
index 93c83e1..85c140c 100644
--- a/services/core/java/com/android/server/notification/PermissionHelper.java
+++ b/services/core/java/com/android/server/notification/PermissionHelper.java
@@ -196,19 +196,20 @@
             int uid = mPackageManager.getPackageUid(packageName, 0, userId);
             boolean currentlyGranted = hasPermission(uid);
             if (grant && !currentlyGranted) {
-                mPermManager.grantRuntimePermission(packageName, NOTIFICATION_PERMISSION, userId);
+                mPermManager.grantRuntimePermission(packageName, NOTIFICATION_PERMISSION,
+                        Context.DEVICE_ID_DEFAULT, userId);
             } else if (!grant && currentlyGranted) {
                 mPermManager.revokeRuntimePermission(packageName, NOTIFICATION_PERMISSION,
-                        userId, TAG);
+                        Context.DEVICE_ID_DEFAULT, 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,
-                        flagMask, FLAG_PERMISSION_USER_SET, true, userId);
+                mPermManager.updatePermissionFlags(packageName, NOTIFICATION_PERMISSION, flagMask,
+                        FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, userId);
             } else {
                 mPermManager.updatePermissionFlags(packageName, NOTIFICATION_PERMISSION,
-                        flagMask, 0, true, userId);
+                        flagMask, 0, true, Context.DEVICE_ID_DEFAULT, userId);
             }
         } catch (RemoteException e) {
             Slog.e(TAG, "Could not reach system server", e);
@@ -236,7 +237,7 @@
         try {
             try {
                 int flags = mPermManager.getPermissionFlags(packageName, NOTIFICATION_PERMISSION,
-                        userId);
+                        Context.DEVICE_ID_DEFAULT, userId);
                 return (flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0
                         || (flags & PackageManager.FLAG_PERMISSION_POLICY_FIXED) != 0;
             } catch (RemoteException e) {
@@ -253,7 +254,7 @@
         try {
             try {
                 int flags = mPermManager.getPermissionFlags(packageName, NOTIFICATION_PERMISSION,
-                        userId);
+                        Context.DEVICE_ID_DEFAULT, userId);
                 return (flags & (PackageManager.FLAG_PERMISSION_USER_SET
                         | PackageManager.FLAG_PERMISSION_USER_FIXED)) != 0;
             } catch (RemoteException e) {
@@ -270,7 +271,7 @@
         try {
             try {
                 int flags = mPermManager.getPermissionFlags(packageName, NOTIFICATION_PERMISSION,
-                        userId);
+                        Context.DEVICE_ID_DEFAULT, userId);
                 return (flags & (PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT
                         | PackageManager.FLAG_PERMISSION_GRANTED_BY_ROLE)) != 0;
             } catch (RemoteException e) {
diff --git a/services/core/java/com/android/server/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java
index 1bb1092..3f799dc 100644
--- a/services/core/java/com/android/server/notification/PreferencesHelper.java
+++ b/services/core/java/com/android/server/notification/PreferencesHelper.java
@@ -2608,7 +2608,12 @@
                             for (NotificationChannel channel : r.channels.values()) {
                                 if (!channel.isSoundRestored()) {
                                     Uri uri = channel.getSound();
-                                    Uri restoredUri = channel.restoreSoundUri(mContext, uri, true);
+                                    Uri restoredUri =
+                                            channel.restoreSoundUri(
+                                                    mContext,
+                                                    uri,
+                                                    true,
+                                                    channel.getAudioAttributes().getUsage());
                                     if (Settings.System.DEFAULT_NOTIFICATION_URI.equals(
                                             restoredUri)) {
                                         Log.w(TAG,
diff --git a/services/core/java/com/android/server/om/OverlayManagerService.java b/services/core/java/com/android/server/om/OverlayManagerService.java
index 2f9536f..52eef47 100644
--- a/services/core/java/com/android/server/om/OverlayManagerService.java
+++ b/services/core/java/com/android/server/om/OverlayManagerService.java
@@ -261,6 +261,8 @@
 
     private final OverlayActorEnforcer mActorEnforcer;
 
+    private int mPrevStartedUserId = -1;
+
     public OverlayManagerService(@NonNull final Context context) {
         super(context);
         try {
@@ -338,6 +340,10 @@
     }
 
     private void onStartUser(@UserIdInt int newUserId) {
+        // Do nothing when start a user that is the same as the one started previously.
+        if (newUserId == mPrevStartedUserId) {
+            return;
+        }
         try {
             traceBegin(TRACE_TAG_RRO, "OMS#onStartUser " + newUserId);
             // ensure overlays in the settings are up-to-date, and propagate
@@ -348,6 +354,7 @@
         } finally {
             traceEnd(TRACE_TAG_RRO);
         }
+        mPrevStartedUserId = newUserId;
     }
 
     private static String[] getDefaultOverlayPackages() {
@@ -1316,7 +1323,8 @@
 
             ApkAssets apkAssets = null;
             try {
-                apkAssets = ApkAssets.loadFromPath(pkg.getSplits().get(0).getPath());
+                apkAssets = ApkAssets.loadFromPath(pkg.getSplits().get(0).getPath(),
+                        ApkAssets.PROPERTY_ONLY_OVERLAYABLES);
                 return apkAssets.getOverlayableInfo(targetOverlayableName);
             } finally {
                 if (apkAssets != null) {
diff --git a/services/core/java/com/android/server/om/TEST_MAPPING b/services/core/java/com/android/server/om/TEST_MAPPING
index e8a2a02..82e7817 100644
--- a/services/core/java/com/android/server/om/TEST_MAPPING
+++ b/services/core/java/com/android/server/om/TEST_MAPPING
@@ -15,12 +15,7 @@
       "name": "OverlayHostTests"
     },
     {
-      "name": "CtsAppSecurityHostTestCases",
-      "options": [
-        {
-          "include-filter": "android.appsecurity.cts.OverlayHostTest"
-        }
-      ]
+      "name": "CtsOverlayHostTestCases"
     }
   ],
   "presubmit-large": [
diff --git a/services/core/java/com/android/server/os/NativeTombstoneManager.java b/services/core/java/com/android/server/os/NativeTombstoneManager.java
index 7b0eddc..c7c8136 100644
--- a/services/core/java/com/android/server/os/NativeTombstoneManager.java
+++ b/services/core/java/com/android/server/os/NativeTombstoneManager.java
@@ -96,6 +96,8 @@
         registerForUserRemoval();
         registerForPackageRemoval();
 
+        BootReceiver.initDropboxRateLimiter();
+
         // Scan existing tombstones.
         mHandler.post(() -> {
             final File[] tombstoneFiles = TOMBSTONE_DIR.listFiles();
diff --git a/services/core/java/com/android/server/pm/ApexManager.java b/services/core/java/com/android/server/pm/ApexManager.java
index 42be07b..26e70c0 100644
--- a/services/core/java/com/android/server/pm/ApexManager.java
+++ b/services/core/java/com/android/server/pm/ApexManager.java
@@ -35,7 +35,6 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.Trace;
-import android.sysprop.ApexProperties;
 import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
@@ -82,18 +81,12 @@
             new Singleton<ApexManager>() {
                 @Override
                 protected ApexManager create() {
-                    if (ApexProperties.updatable().orElse(false)) {
-                        return new ApexManagerImpl();
-                    } else {
-                        return new ApexManagerFlattenedApex();
-                    }
+                    return new ApexManagerImpl();
                 }
             };
 
     /**
-     * Returns an instance of either {@link ApexManagerImpl} or {@link ApexManagerFlattenedApex}
-     * depending on whether this device supports APEX, i.e. {@link ApexProperties#updatable()}
-     * evaluates to {@code true}.
+     * Returns an instance of {@link ApexManagerImpl}
      * @hide
      */
     public static ApexManager getInstance() {
@@ -996,203 +989,4 @@
             }
         }
     }
-
-    /**
-     * An implementation of {@link ApexManager} that should be used in case device does not support
-     * updating APEX packages.
-     */
-    @VisibleForTesting
-    static final class ApexManagerFlattenedApex extends ApexManager {
-        @Override
-        ApexInfo[] getAllApexInfos() {
-            return null;
-        }
-
-        @Override
-        void notifyScanResult(List<ScanResult> scanResults) {
-            // No-op
-        }
-
-        @Override
-        public List<ActiveApexInfo> getActiveApexInfos() {
-            // There is no apexd running in case of flattened apex
-            // We look up the /apex directory and identify the active APEX modules from there.
-            // As "preinstalled" path, we just report /system since in the case of flattened APEX
-            // the /apex directory is just a symlink to /system/apex.
-            List<ActiveApexInfo> result = new ArrayList<>();
-            File apexDir = Environment.getApexDirectory();
-            if (apexDir.isDirectory()) {
-                File[] files = apexDir.listFiles();
-                // listFiles might be null if system server doesn't have permission to read
-                // a directory.
-                if (files != null) {
-                    for (File file : files) {
-                        if (file.isDirectory() && !file.getName().contains("@")
-                                // In flattened configuration, init special-cases the art directory
-                                // and bind-mounts com.android.art.debug to com.android.art.
-                                && !file.getName().equals("com.android.art.debug")) {
-                            result.add(
-                                    new ActiveApexInfo(file, Environment.getRootDirectory(), file));
-                        }
-                    }
-                }
-            }
-            return result;
-        }
-
-        @Override
-        @Nullable
-        public String getActiveApexPackageNameContainingPackage(
-                @NonNull String containedPackageName) {
-            Objects.requireNonNull(containedPackageName);
-
-            return null;
-        }
-
-        @Override
-        ApexSessionInfo getStagedSessionInfo(int sessionId) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        SparseArray<ApexSessionInfo> getSessions() {
-            return new SparseArray<>(0);
-        }
-
-        @Override
-        ApexInfoList submitStagedSession(ApexSessionParams params)
-                throws PackageManagerException {
-            throw new PackageManagerException(PackageManager.INSTALL_FAILED_INTERNAL_ERROR,
-                    "Device doesn't support updating APEX");
-        }
-
-        @Override
-        ApexInfo[] getStagedApexInfos(ApexSessionParams params) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        void markStagedSessionReady(int sessionId) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        void markStagedSessionSuccessful(int sessionId) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        boolean isApexSupported() {
-            return false;
-        }
-
-        @Override
-        boolean revertActiveSessions() {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        boolean abortStagedSession(int sessionId) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        boolean uninstallApex(String apexPackagePath) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        void registerApkInApex(AndroidPackage pkg) {
-            // No-op
-        }
-
-        @Override
-        void reportErrorWithApkInApex(String scanDirPath, String errorMsg) {
-            // No-op
-        }
-
-        @Override
-        @Nullable
-        String getApkInApexInstallError(String apexPackageName) {
-            return null;
-        }
-
-        @Override
-        List<String> getApksInApex(String apexPackageName) {
-            return Collections.emptyList();
-        }
-
-        @Override
-        @Nullable
-        public String getApexModuleNameForPackageName(String apexPackageName) {
-            return null;
-        }
-
-        @Override
-        @Nullable
-        public String getActivePackageNameForApexModuleName(String apexModuleName) {
-            return null;
-        }
-
-        @Override
-        public boolean snapshotCeData(int userId, int rollbackId, String apexPackageName) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public boolean restoreCeData(int userId, int rollbackId, String apexPackageName) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public boolean destroyDeSnapshots(int rollbackId) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public boolean destroyCeSnapshots(int userId, int rollbackId) {
-            return true;
-        }
-
-        @Override
-        public boolean destroyCeSnapshotsNotSpecified(int userId, int[] retainRollbackIds) {
-            return true;
-        }
-
-        @Override
-        public void markBootCompleted() {
-            // No-op
-        }
-
-        @Override
-        public long calculateSizeForCompressedApex(CompressedApexInfoList infoList) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public void reserveSpaceForCompressedApex(CompressedApexInfoList infoList) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        ApexInfo installPackage(File apexFile, boolean force) {
-            throw new UnsupportedOperationException("APEX updates are not supported");
-        }
-
-        @Override
-        public List<ApexSystemServiceInfo> getApexSystemServices() {
-            // TODO(satayev): we can't really support flattened apex use case, and need to migrate
-            // the manifest entries into system's manifest asap.
-            return Collections.emptyList();
-        }
-
-        @Override
-        void dump(PrintWriter pw) {
-        }
-
-        @Override
-        public File getBackingApexFile(File file) {
-            return null;
-        }
-    }
 }
diff --git a/services/core/java/com/android/server/pm/AppsFilterBase.java b/services/core/java/com/android/server/pm/AppsFilterBase.java
index 12f6a18..5b32a94 100644
--- a/services/core/java/com/android/server/pm/AppsFilterBase.java
+++ b/services/core/java/com/android/server/pm/AppsFilterBase.java
@@ -197,6 +197,7 @@
 
     protected volatile boolean mCacheReady = false;
     protected volatile boolean mCacheEnabled = true;
+    protected volatile boolean mNeedToUpdateCacheForImplicitAccess = false;
 
     protected static final boolean CACHE_VALID = true;
     protected static final boolean CACHE_INVALID = false;
diff --git a/services/core/java/com/android/server/pm/AppsFilterImpl.java b/services/core/java/com/android/server/pm/AppsFilterImpl.java
index ba5907c..21610c9 100644
--- a/services/core/java/com/android/server/pm/AppsFilterImpl.java
+++ b/services/core/java/com/android/server/pm/AppsFilterImpl.java
@@ -465,6 +465,9 @@
             changed = retainOnUpdate
                     ? mRetainedImplicitlyQueryable.add(recipientUid, visibleUid)
                     : mImplicitlyQueryable.add(recipientUid, visibleUid);
+            if (!mCacheReady && changed) {
+                mNeedToUpdateCacheForImplicitAccess = true;
+            }
         }
         if (changed && DEBUG_LOGGING) {
             Slog.i(TAG, (retainOnUpdate ? "retained " : "") + "implicit access granted: "
@@ -476,8 +479,6 @@
                 // Update the cache in a one-off manner since we've got all the information we need.
                 mShouldFilterCache.put(recipientUid, visibleUid, false);
             }
-        } else if (changed) {
-            invalidateCache("grantImplicitAccess: " + recipientUid + " -> " + visibleUid);
         }
         if (changed) {
             onChanged();
@@ -833,7 +834,6 @@
             }
 
             updateEntireShouldFilterCacheInner(snapshot, settings, usersRef[0], USER_ALL);
-            onChanged();
             logCacheRebuilt(reason, SystemClock.currentTimeMicro() - currentTimeUs,
                     users.length, settings.size());
 
@@ -844,7 +844,15 @@
                 return;
             }
 
-            mCacheReady = true;
+            synchronized (mImplicitlyQueryableLock) {
+                if (mNeedToUpdateCacheForImplicitAccess) {
+                    updateShouldFilterCacheForImplicitAccess();
+                    mNeedToUpdateCacheForImplicitAccess = false;
+                }
+                mCacheReady = true;
+            }
+
+            onChanged();
         }, delayMs);
     }
 
@@ -875,6 +883,25 @@
                 snapshot.getPackageStates().size());
     }
 
+    @GuardedBy("mImplicitlyQueryableLock")
+    private void updateShouldFilterCacheForImplicitAccess() {
+        updateShouldFilterCacheForImplicitAccess(mRetainedImplicitlyQueryable);
+        updateShouldFilterCacheForImplicitAccess(mImplicitlyQueryable);
+    }
+
+    private void updateShouldFilterCacheForImplicitAccess(
+            WatchedSparseSetArray<Integer> queriesMap) {
+        synchronized (mCacheLock) {
+            for (int i = 0; i < queriesMap.size(); i++) {
+                Integer callingUid = queriesMap.keyAt(i);
+                ArraySet<Integer> targetUids = queriesMap.get(callingUid);
+                for (Integer targetUid : targetUids) {
+                    mShouldFilterCache.put(callingUid, targetUid, false);
+                }
+            }
+        }
+    }
+
     private void updateShouldFilterCacheForPackage(Computer snapshot,
             String packageName) {
         if (!mCacheReady) {
@@ -1198,6 +1225,7 @@
                                 setting.getPackageName(), siblingSetting, settings,
                                 users, USER_ALL, settings.size());
                     }
+                    break;
                 }
             }
 
diff --git a/services/core/java/com/android/server/pm/AppsFilterLocked.java b/services/core/java/com/android/server/pm/AppsFilterLocked.java
index 29bb14e..e29f2b9 100644
--- a/services/core/java/com/android/server/pm/AppsFilterLocked.java
+++ b/services/core/java/com/android/server/pm/AppsFilterLocked.java
@@ -28,21 +28,28 @@
     /**
      * The following locks guard the accesses for the list/set class members
      */
-    protected final Object mForceQueryableLock = new Object();
-    protected final Object mQueriesViaPackageLock = new Object();
-    protected final Object mQueriesViaComponentLock = new Object();
+    protected final PackageManagerTracedLock mForceQueryableLock =
+            new PackageManagerTracedLock();
+    protected final PackageManagerTracedLock mQueriesViaPackageLock =
+            new PackageManagerTracedLock();
+    protected final PackageManagerTracedLock mQueriesViaComponentLock =
+            new PackageManagerTracedLock();
     /**
      * This lock covers both {@link #mImplicitlyQueryable} and {@link #mRetainedImplicitlyQueryable}
      */
-    protected final Object mImplicitlyQueryableLock = new Object();
-    protected final Object mQueryableViaUsesLibraryLock = new Object();
-    protected final Object mProtectedBroadcastsLock = new Object();
-    protected final Object mQueryableViaUsesPermissionLock = new Object();
+    protected final PackageManagerTracedLock mImplicitlyQueryableLock =
+        new PackageManagerTracedLock();
+    protected final PackageManagerTracedLock mQueryableViaUsesLibraryLock =
+        new PackageManagerTracedLock();
+    protected final PackageManagerTracedLock mProtectedBroadcastsLock =
+        new PackageManagerTracedLock();
+    protected final PackageManagerTracedLock mQueryableViaUsesPermissionLock =
+        new PackageManagerTracedLock();
 
     /**
      * Guards the access for {@link AppsFilterBase#mShouldFilterCache};
      */
-    protected final Object mCacheLock = new Object();
+    protected final PackageManagerTracedLock mCacheLock = new PackageManagerTracedLock();
 
     @Override
     protected boolean isForceQueryable(int appId) {
diff --git a/services/core/java/com/android/server/pm/ArchiveManager.java b/services/core/java/com/android/server/pm/ArchiveManager.java
new file mode 100644
index 0000000..5435206
--- /dev/null
+++ b/services/core/java/com/android/server/pm/ArchiveManager.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.pm;
+
+import static android.content.pm.PackageManager.DELETE_KEEP_DATA;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Context;
+import android.content.IntentSender;
+import android.content.pm.LauncherActivityInfo;
+import android.content.pm.LauncherApps;
+import android.content.pm.PackageManager;
+import android.content.pm.VersionedPackage;
+import android.os.Binder;
+import android.os.UserHandle;
+import android.text.TextUtils;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.server.pm.pkg.ArchiveState;
+import com.android.server.pm.pkg.ArchiveState.ArchiveActivityInfo;
+import com.android.server.pm.pkg.PackageStateInternal;
+
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Responsible archiving apps and returning information about archived apps.
+ *
+ * <p> An archived app is in a state where the app is not fully on the device. APKs are removed
+ * while the data directory is kept. Archived apps are included in the list of launcher apps where
+ * tapping them re-installs the full app.
+ */
+final class ArchiveManager {
+
+    private final Context mContext;
+    private final PackageManagerService mPm;
+
+    @Nullable
+    private LauncherApps mLauncherApps;
+
+    ArchiveManager(Context context, PackageManagerService mPm) {
+        this.mContext = context;
+        this.mPm = mPm;
+    }
+
+    void archiveApp(
+            @NonNull String packageName,
+            @NonNull String callerPackageName,
+            @NonNull UserHandle user,
+            @NonNull IntentSender intentSender) throws PackageManager.NameNotFoundException {
+        Objects.requireNonNull(packageName);
+        Objects.requireNonNull(callerPackageName);
+        Objects.requireNonNull(user);
+        Objects.requireNonNull(intentSender);
+
+        Computer snapshot = mPm.snapshotComputer();
+        int callingUid = Binder.getCallingUid();
+        int userId = user.getIdentifier();
+        String callingPackageName = snapshot.getNameForUid(callingUid);
+        snapshot.enforceCrossUserPermission(callingUid, userId, true, true,
+                "archiveApp");
+        verifyCaller(callerPackageName, callingPackageName);
+        PackageStateInternal ps = getPackageState(packageName, snapshot, callingUid, user);
+        verifyInstaller(packageName, ps.getInstallSource());
+
+        List<LauncherActivityInfo> mainActivities = getLauncherApps().getActivityList(
+                ps.getPackageName(),
+                new UserHandle(userId));
+        // TODO(b/291569242) Verify that this list is not empty and return failure with intentsender
+
+        storeArchiveState(ps, mainActivities, userId);
+
+        // TODO(b/278553670) Add special strings for the delete dialog
+        mPm.mInstallerService.uninstall(
+                new VersionedPackage(packageName, PackageManager.VERSION_CODE_HIGHEST),
+                callerPackageName, DELETE_KEEP_DATA, intentSender, userId);
+    }
+
+    @NonNull
+    private static PackageStateInternal getPackageState(String packageName,
+            Computer snapshot, int callingUid, UserHandle user)
+            throws PackageManager.NameNotFoundException {
+        PackageStateInternal ps = snapshot.getPackageStateFiltered(packageName, callingUid,
+                user.getIdentifier());
+        if (ps == null) {
+            throw new PackageManager.NameNotFoundException(
+                    TextUtils.formatSimple("Package %s not found.", packageName));
+        }
+        return ps;
+    }
+
+    private LauncherApps getLauncherApps() {
+        if (mLauncherApps == null) {
+            mLauncherApps = mContext.getSystemService(LauncherApps.class);
+        }
+        return mLauncherApps;
+    }
+
+    private void storeArchiveState(PackageStateInternal ps,
+            List<LauncherActivityInfo> mainActivities, int userId)
+            throws PackageManager.NameNotFoundException {
+        List<ArchiveActivityInfo> activityInfos = new ArrayList<>();
+        for (int i = 0; i < mainActivities.size(); i++) {
+            // TODO(b/278553670) Extract and store launcher icons
+            ArchiveActivityInfo activityInfo = new ArchiveActivityInfo(
+                    mainActivities.get(i).getLabel().toString(),
+                    Path.of("/TODO"), null);
+            activityInfos.add(activityInfo);
+        }
+
+        InstallSource installSource = ps.getInstallSource();
+        String installerPackageName = installSource.mUpdateOwnerPackageName != null
+                ? installSource.mUpdateOwnerPackageName : installSource.mInstallerPackageName;
+
+        synchronized (mPm.mLock) {
+            getPackageSetting(ps.getPackageName(), userId).modifyUserState(userId).setArchiveState(
+                    new ArchiveState(activityInfos, installerPackageName));
+        }
+    }
+
+    @NonNull
+    @GuardedBy("mPm.mLock")
+    private PackageSetting getPackageSetting(String packageName, int userId)
+            throws PackageManager.NameNotFoundException {
+        PackageSetting ps = mPm.mSettings.getPackageLPr(packageName);
+        if (ps == null || !ps.getUserStateOrDefault(userId).isInstalled()) {
+            throw new PackageManager.NameNotFoundException(
+                    TextUtils.formatSimple("Package %s not found.", packageName));
+        }
+        return ps;
+    }
+
+    private static void verifyCaller(String callerPackageName, String callingPackageName) {
+        if (!TextUtils.equals(callingPackageName, callerPackageName)) {
+            throw new SecurityException(
+                    TextUtils.formatSimple(
+                            "The callerPackageName %s set by the caller doesn't match the "
+                                    + "caller's own package name %s.",
+                            callerPackageName,
+                            callingPackageName));
+        }
+    }
+
+    private static void verifyInstaller(String packageName, InstallSource installSource) {
+        // TODO(b/291060290) Verify installer supports unarchiving
+        if (installSource.mUpdateOwnerPackageName == null
+                && installSource.mInstallerPackageName == null) {
+            throw new SecurityException(
+                    TextUtils.formatSimple("No installer found to archive app %s.",
+                            packageName));
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/pm/BackgroundInstallControlService.java b/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
index 1b34c70..7f0aadc 100644
--- a/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
+++ b/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
@@ -234,7 +234,7 @@
         // the installers without INSTALL_PACKAGES perm can't perform
         // the installation in background. So we can just filter out them.
         if (mPermissionManager.checkPermission(installerPackageName,
-                android.Manifest.permission.INSTALL_PACKAGES,
+                android.Manifest.permission.INSTALL_PACKAGES, Context.DEVICE_ID_DEFAULT,
                 userId) != PackageManager.PERMISSION_GRANTED) {
             return;
         }
@@ -433,7 +433,7 @@
             return true;
         }
         return mPermissionManager.checkPermission(pkgName,
-                android.Manifest.permission.INSTALL_PACKAGES,
+                android.Manifest.permission.INSTALL_PACKAGES, Context.DEVICE_ID_DEFAULT,
                 userId) == PackageManager.PERMISSION_GRANTED;
     }
 
diff --git a/services/core/java/com/android/server/pm/Computer.java b/services/core/java/com/android/server/pm/Computer.java
index 9748aba..6e75605 100644
--- a/services/core/java/com/android/server/pm/Computer.java
+++ b/services/core/java/com/android/server/pm/Computer.java
@@ -60,7 +60,6 @@
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
-import java.util.Collection;
 import java.util.List;
 import java.util.Set;
 
@@ -406,8 +405,7 @@
     ProviderInfo getProviderInfo(@NonNull ComponentName component,
             @PackageManager.ComponentInfoFlagsBits long flags, @UserIdInt int userId);
 
-    @Nullable
-    String[] getSystemSharedLibraryNames();
+    ArrayMap<String, String> getSystemSharedLibraryNamesAndPaths();
 
     /**
      * @return the state if the given package is installed and isn't filtered by visibility.
@@ -679,5 +677,5 @@
     UserInfo[] getUserInfos();
 
     @NonNull
-    Collection<SharedUserSetting> getAllSharedUsers();
+    ArrayMap<String, ? extends SharedUserApi> getSharedUsers();
 }
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index 78f1fa6..5b05b48 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -24,6 +24,7 @@
 import static android.content.Intent.ACTION_MAIN;
 import static android.content.Intent.CATEGORY_DEFAULT;
 import static android.content.Intent.CATEGORY_HOME;
+import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE;
 import static android.content.pm.PackageManager.CERT_INPUT_RAW_X509;
 import static android.content.pm.PackageManager.CERT_INPUT_SHA256;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
@@ -301,8 +302,8 @@
         }
 
         @NonNull
-        public Collection<SharedUserSetting> getAllSharedUsers() {
-            return mSettings.getAllSharedUsersLPw();
+        ArrayMap<String, ? extends SharedUserApi> getSharedUsers() {
+            return mSettings.getSharedUsersLocked().untrackedStorage();
         }
 
         @Nullable
@@ -1514,11 +1515,17 @@
             ai.uid = UserHandle.getUid(userId, ps.getAppId());
             ai.primaryCpuAbi = ps.getPrimaryCpuAbiLegacy();
             ai.secondaryCpuAbi = ps.getSecondaryCpuAbiLegacy();
+            ai.volumeUuid = ps.getVolumeUuid();
+            ai.storageUuid = StorageManager.convert(ai.volumeUuid);
+            if (ps.isDefaultToDeviceProtectedStorage()) {
+                ai.privateFlags |= PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE;
+            }
             ai.setVersionCode(ps.getVersionCode());
             ai.flags = ps.getFlags();
             ai.privateFlags = ps.getPrivateFlags();
             pi.applicationInfo = PackageInfoUtils.generateDelegateApplicationInfo(
                     ai, flags, state, userId);
+            pi.signingInfo = ps.getSigningInfo();
 
             if (DEBUG_PACKAGE_INFO) {
                 Log.v(TAG, "ps.pkg is n/a for ["
@@ -2583,7 +2590,7 @@
 
     // NOTE: Can't remove without a major refactor. Keep around for now.
     public final int checkUidPermission(String permName, int uid) {
-        return mPermissionManager.checkUidPermission(uid, permName);
+        return mPermissionManager.checkUidPermission(uid, permName, Context.DEVICE_ID_DEFAULT);
     }
 
     public int getPackageUidInternal(String packageName,
@@ -4053,13 +4060,12 @@
         return null;
     }
 
-    @Nullable
     @Override
-    public String[] getSystemSharedLibraryNames() {
+    public ArrayMap<String, String> getSystemSharedLibraryNamesAndPaths() {
         // allow instant applications
         final WatchedArrayMap<String, WatchedLongSparseArray<SharedLibraryInfo>> sharedLibraries =
                 getSharedLibraries();
-        Set<String> libs = null;
+        final ArrayMap<String, String> libs = new ArrayMap<>();
         final int libCount = sharedLibraries.size();
         for (int i = 0; i < libCount; i++) {
             WatchedLongSparseArray<SharedLibraryInfo> versionedLib = sharedLibraries.valueAt(i);
@@ -4070,10 +4076,7 @@
             for (int j = 0; j < versionCount; j++) {
                 SharedLibraryInfo libraryInfo = versionedLib.valueAt(j);
                 if (!libraryInfo.isStatic()) {
-                    if (libs == null) {
-                        libs = new ArraySet<>();
-                    }
-                    libs.add(libraryInfo.getName());
+                    libs.put(libraryInfo.getName(), libraryInfo.getPath());
                     break;
                 }
                 final PackageStateInternal ps =
@@ -4081,22 +4084,12 @@
                 if (ps != null && !filterSharedLibPackage(ps, Binder.getCallingUid(),
                         UserHandle.getUserId(Binder.getCallingUid()),
                         PackageManager.MATCH_STATIC_SHARED_AND_SDK_LIBRARIES)) {
-                    if (libs == null) {
-                        libs = new ArraySet<>();
-                    }
-                    libs.add(libraryInfo.getName());
+                    libs.put(libraryInfo.getName(), libraryInfo.getPath());
                     break;
                 }
             }
         }
-
-        if (libs != null) {
-            String[] libsArray = new String[libs.size()];
-            libs.toArray(libsArray);
-            return libsArray;
-        }
-
-        return null;
+        return libs;
     }
 
     @Override
@@ -4542,8 +4535,8 @@
         int numMatch = 0;
         for (int i=0; i<permissions.length; i++) {
             final String permission = permissions[i];
-            if (mPermissionManager.checkPermission(ps.getPackageName(), permission, userId)
-                    == PERMISSION_GRANTED) {
+            if (mPermissionManager.checkPermission(ps.getPackageName(), permission,
+                    Context.DEVICE_ID_DEFAULT, userId) == PERMISSION_GRANTED) {
                 tmp[i] = true;
                 numMatch++;
             } else {
@@ -5519,8 +5512,8 @@
     @Override
     public SparseArray<String> getAppsWithSharedUserIds() {
         final SparseArray<String> sharedUserIds = new SparseArray<>();
-        for (SharedUserSetting setting : mSettings.getAllSharedUsers()) {
-            sharedUserIds.put(UserHandle.getAppId(setting.mAppId), setting.name);
+        for (SharedUserApi sharedUser : mSettings.getSharedUsers().values()) {
+            sharedUserIds.put(UserHandle.getAppId(sharedUser.getAppId()), sharedUser.getName());
         }
         return sharedUserIds;
     }
@@ -5644,7 +5637,12 @@
             return sus.getPackages();
         } else if (settingBase instanceof PackageSetting) {
             final PackageSetting ps = (PackageSetting) settingBase;
-            return List.of(ps.getPkg());
+            final AndroidPackage pkg = ps.getPkg();
+            if (pkg != null) {
+                return Collections.singletonList(pkg);
+            } else {
+                return Collections.emptyList();
+            }
         } else {
             return Collections.emptyList();
         }
@@ -5820,8 +5818,8 @@
 
     @Override
     @NonNull
-    public Collection<SharedUserSetting> getAllSharedUsers() {
-        return mSettings.getAllSharedUsers();
+    public ArrayMap<String, ? extends SharedUserApi> getSharedUsers() {
+        return mSettings.getSharedUsers();
     }
 
     @Override
diff --git a/services/core/java/com/android/server/pm/CrossProfileIntentResolverEngine.java b/services/core/java/com/android/server/pm/CrossProfileIntentResolverEngine.java
index b5c0417..1ed829e4 100644
--- a/services/core/java/com/android/server/pm/CrossProfileIntentResolverEngine.java
+++ b/services/core/java/com/android/server/pm/CrossProfileIntentResolverEngine.java
@@ -32,6 +32,7 @@
 import android.content.pm.UserInfo;
 import android.content.pm.UserProperties;
 import android.os.Process;
+import android.os.UserHandle;
 import android.text.TextUtils;
 import android.util.Pair;
 import android.util.Slog;
@@ -421,9 +422,19 @@
         } else {
             candidates.addAll(resolveInfoFromCrossProfileDomainInfo(crossProfileCandidates));
         }
+        // When we have only a single result belonging to a different user space, we check
+        // if filtering is configured on cross-profile intent resolution for the originating user.
+        // Accordingly, we modify the intent to reflect the content-owner as the originating user,
+        // preventing the resolving user to be assumed the same, when activity is started.
+
+        // In case more than one result is present, the resolver sheet is opened which takes care of
+        // cross user access.
+        if (candidates.size() == 1 && !UserHandle.of(userId).equals(candidates.get(0).userHandle)
+                && isNoFilteringPropertyConfiguredForUser(userId)) {
+            intent.prepareToLeaveUser(userId);
+        }
         return new QueryIntentActivitiesResult(sortResult, addInstant, candidates);
     }
-
     /**
      * It filters and combines results from current and cross profile based on domain priority.
      * @param computer {@link Computer} instance
diff --git a/services/core/java/com/android/server/pm/DeletePackageHelper.java b/services/core/java/com/android/server/pm/DeletePackageHelper.java
index c1d5af5..b5ec136 100644
--- a/services/core/java/com/android/server/pm/DeletePackageHelper.java
+++ b/services/core/java/com/android/server/pm/DeletePackageHelper.java
@@ -16,6 +16,7 @@
 
 package com.android.server.pm;
 
+import static android.Manifest.permission.CONTROL_KEYGUARD;
 import static android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
@@ -134,10 +135,6 @@
         final int removeUser = (deleteFlags & PackageManager.DELETE_ALL_USERS) != 0
                 ? UserHandle.USER_ALL : userId;
 
-        if (mPm.isPackageDeviceAdmin(packageName, removeUser)) {
-            Slog.w(TAG, "Not removing package " + packageName + ": has active device admin");
-            return PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER;
-        }
 
         final PackageSetting uninstalledPs;
         final PackageSetting disabledSystemPs;
@@ -343,6 +340,20 @@
         return res ? DELETE_SUCCEEDED : PackageManager.DELETE_FAILED_INTERNAL_ERROR;
     }
 
+    /** Deletes dexopt artifacts for the given package*/
+    private void deleteArtDexoptArtifacts(String packageName) {
+        try (PackageManagerLocal.FilteredSnapshot filteredSnapshot =
+                     PackageManagerServiceUtils.getPackageManagerLocal()
+                             .withFilteredSnapshot()) {
+            try {
+                DexOptHelper.getArtManagerLocal().deleteDexoptArtifacts(
+                        filteredSnapshot, packageName);
+            } catch (IllegalArgumentException | IllegalStateException e) {
+                Slog.w(TAG, e.toString());
+            }
+        }
+    }
+
     /*
      * This method handles package deletion in general
      */
@@ -354,6 +365,12 @@
         synchronized (mPm.mLock) {
             final PackageSetting ps = mPm.mSettings.getPackageLPr(packageName);
             final PackageSetting disabledPs = mPm.mSettings.getDisabledSystemPkgLPr(ps);
+            if (PackageManagerServiceUtils.isSystemApp(ps)
+                    && mPm.checkPermission(CONTROL_KEYGUARD, packageName, UserHandle.USER_SYSTEM)
+                    == PERMISSION_GRANTED) {
+                Slog.w(TAG, "Attempt to delete keyguard system package " + packageName);
+                return false;
+            }
             action = mayDeletePackageLocked(outInfo, ps, disabledPs, flags, user);
         }
         if (DEBUG_REMOVE) Slog.d(TAG, "deletePackageLI: " + packageName + " user " + user);
@@ -453,7 +470,6 @@
                         // We need to set it back to 'installed' so the uninstall
                         // broadcasts will be sent correctly.
                         if (DEBUG_REMOVE) Slog.d(TAG, "Not installed by other users, full delete");
-                        ps.setPkg(null);
                         ps.setInstalled(true, userId);
                         mPm.mSettings.writeKernelMappingLPr(ps);
                         clearPackageStateAndReturn = false;
@@ -484,6 +500,11 @@
                     action, allUserHandles, writeSettings);
         } else {
             if (DEBUG_REMOVE) Slog.d(TAG, "Removing non-system package: " + ps.getPackageName());
+            if (ps.isIncremental()) {
+                // Explicitly delete dexopt artifacts for incremental app because the
+                // artifacts are not stored in the same directory as the APKs
+                deleteArtDexoptArtifacts(packageName);
+            }
             deleteInstalledPackageLIF(ps, deleteCodeAndResources, flags, allUserHandles,
                     outInfo, writeSettings);
         }
@@ -611,7 +632,8 @@
                     null /*harmfulAppWarning*/,
                     null /*splashScreenTheme*/,
                     0 /*firstInstallTime*/,
-                    PackageManager.USER_MIN_ASPECT_RATIO_UNSET);
+                    PackageManager.USER_MIN_ASPECT_RATIO_UNSET,
+                    null /*archiveState*/);
         }
         mPm.mSettings.writeKernelMappingLPr(ps);
     }
@@ -681,18 +703,6 @@
         final String packageName = versionedPackage.getPackageName();
         final long versionCode = versionedPackage.getLongVersionCode();
 
-        if (mPm.mProtectedPackages.isPackageDataProtected(userId, packageName)) {
-            mPm.mHandler.post(() -> {
-                try {
-                    Slog.w(TAG, "Attempted to delete protected package: " + packageName);
-                    observer.onPackageDeleted(packageName,
-                            PackageManager.DELETE_FAILED_INTERNAL_ERROR, null);
-                } catch (RemoteException re) {
-                }
-            });
-            return;
-        }
-
         try {
             if (mPm.mInjector.getLocalService(ActivityTaskManagerInternal.class)
                     .isBaseOfLockedTask(packageName)) {
@@ -733,6 +743,41 @@
                     "deletePackage for user " + userId);
         }
 
+        final long token = Binder.clearCallingIdentity();
+        try {
+            // If a package is device admin, or is data protected for any user, it should not be
+            // uninstalled from that user, or from any users if DELETE_ALL_USERS flag is passed.
+            for (int user : users) {
+                if (mPm.isPackageDeviceAdmin(packageName, user)) {
+                    mPm.mHandler.post(() -> {
+                        try {
+                            Slog.w(TAG, "Not removing package " + packageName
+                                    + ": has active device admin");
+                            observer.onPackageDeleted(packageName,
+                                    PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER, null);
+                        } catch (RemoteException e) {
+                            // no-op
+                        }
+                    });
+                    return;
+                }
+                if (mPm.mProtectedPackages.isPackageDataProtected(user, packageName)) {
+                    mPm.mHandler.post(() -> {
+                        try {
+                            Slog.w(TAG, "Attempted to delete protected package: " + packageName);
+                            observer.onPackageDeleted(packageName,
+                                    PackageManager.DELETE_FAILED_INTERNAL_ERROR, null);
+                        } catch (RemoteException re) {
+                            // no-op
+                        }
+                    });
+                    return;
+                }
+            }
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+
         if (mPm.isUserRestricted(userId, UserManager.DISALLOW_UNINSTALL_APPS)) {
             mPm.mHandler.post(() -> {
                 try {
diff --git a/services/core/java/com/android/server/pm/DistractingPackageHelper.java b/services/core/java/com/android/server/pm/DistractingPackageHelper.java
index dbf0d29..8ebb6ea 100644
--- a/services/core/java/com/android/server/pm/DistractingPackageHelper.java
+++ b/services/core/java/com/android/server/pm/DistractingPackageHelper.java
@@ -32,6 +32,7 @@
 import com.android.server.pm.pkg.PackageStateInternal;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -133,6 +134,39 @@
         return unactionedPackages.toArray(new String[0]);
     }
 
+
+    /**
+     * Gets {@link DistractionRestriction restrictions} of the given packages of the given user.
+     *
+     * The corresponding element of the resulting array will be -1 if a given package doesn't exist.
+     *
+     * @param packageNames The packages under which to check.
+     * @param userId The user under which to check.
+     * @return an array of distracting restriction state in order of the given packages
+     */
+    int[] getDistractingPackageRestrictionsAsUser(@NonNull Computer snapshot,
+            @NonNull String[] packageNames, int userId, int callingUid) {
+        int[] res = new int[packageNames.length];
+        Arrays.fill(res, -1);
+
+        if (ArrayUtils.isEmpty(packageNames)) {
+            return res;
+        }
+
+        for (int i = 0; i < packageNames.length; i++) {
+            final String packageName = packageNames[i];
+            final PackageStateInternal packageState =
+                    snapshot.getPackageStateForInstalledAndFiltered(
+                            packageName, callingUid, userId);
+            if (packageState == null) {
+                continue;
+            }
+
+            res[i] = packageState.getUserStateOrDefault(userId).getDistractionFlags();
+        }
+        return res;
+    }
+
     /**
      * Removes any {@link DistractionRestriction restrictions} set on given packages.
      *
diff --git a/services/core/java/com/android/server/pm/DumpHelper.java b/services/core/java/com/android/server/pm/DumpHelper.java
index fcaaa90..f3ea42e 100644
--- a/services/core/java/com/android/server/pm/DumpHelper.java
+++ b/services/core/java/com/android/server/pm/DumpHelper.java
@@ -23,6 +23,7 @@
 
 import android.annotation.NonNull;
 import android.content.ComponentName;
+import android.content.Context;
 import android.content.pm.FeatureInfo;
 import android.content.pm.PackageManager;
 import android.os.Binder;
@@ -160,7 +161,8 @@
                 pkg = snapshot.resolveInternalPackageName(pkg,
                         PackageManager.VERSION_CODE_HIGHEST);
 
-                pw.println(mPermissionManager.checkPermission(perm, pkg, user));
+                pw.println(mPermissionManager.checkPermission(
+                        pkg, perm, Context.DEVICE_ID_DEFAULT, user));
                 return;
             } else if ("l".equals(cmd) || "libraries".equals(cmd)) {
                 dumpState.setDump(DumpState.DUMP_LIBS);
@@ -617,7 +619,9 @@
         pw.println("    --checkin: dump for a checkin");
         pw.println("    -f: print details of intent filters");
         pw.println("    -h: print this help");
+        pw.println("    ---proto: dump data to proto");
         pw.println("    --all-components: include all component names in package dump");
+        pw.println("    --include-apex: includes the apex packages in package dump");
         pw.println("  cmd may be one of:");
         pw.println("    apex: list active APEXes and APEX session state");
         pw.println("    l[ibraries]: list known shared libraries");
@@ -631,7 +635,7 @@
         pw.println("    prov[iders]: dump content providers");
         pw.println("    p[ackages]: dump installed packages");
         pw.println("    q[ueries]: dump app queryability calculations");
-        pw.println("    s[hared-users]: dump shared user IDs");
+        pw.println("    s[hared-users] [noperm]: dump shared user IDs");
         pw.println("    m[essages]: print collected runtime messages");
         pw.println("    v[erifiers]: print package verifier info");
         pw.println("    d[omain-preferred-apps]: print domains preferred apps");
@@ -644,9 +648,12 @@
         pw.println("    dexopt: dump dexopt state");
         pw.println("    compiler-stats: dump compiler statistics");
         pw.println("    service-permissions: dump permissions required by services");
-        pw.println("    snapshot: dump snapshot statistics");
+        pw.println("    snapshot [--full|--brief]: dump snapshot statistics");
         pw.println("    protected-broadcasts: print list of protected broadcast actions");
         pw.println("    known-packages: dump known packages");
+        pw.println("    changes: dump the packages that have been changed");
+        pw.println("    frozen: dump the frozen packages");
+        pw.println("    volumes: dump the loaded volumes");
         pw.println("    <package.name>: info about given package");
     }
 
diff --git a/services/core/java/com/android/server/pm/FreeStorageHelper.java b/services/core/java/com/android/server/pm/FreeStorageHelper.java
new file mode 100644
index 0000000..66ec80f
--- /dev/null
+++ b/services/core/java/com/android/server/pm/FreeStorageHelper.java
@@ -0,0 +1,251 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.pm;
+
+import static com.android.server.pm.PackageManagerService.TAG;
+
+import android.content.Context;
+import android.content.pm.PackageInfoLite;
+import android.content.pm.parsing.PackageLite;
+import android.os.Environment;
+import android.os.FileUtils;
+import android.os.RemoteException;
+import android.os.SystemProperties;
+import android.os.storage.IStorageManager;
+import android.os.storage.StorageManager;
+import android.os.storage.StorageManagerInternal;
+import android.provider.Settings;
+import android.text.format.DateUtils;
+import android.util.Slog;
+
+import com.android.internal.content.InstallLocationUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A helper to clear various types of cached data across the system.
+ */
+final class FreeStorageHelper {
+    private static final long FREE_STORAGE_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD =
+            TimeUnit.HOURS.toMillis(2); /* two hours */
+
+    /**
+     * Wall-clock timeout (in milliseconds) after which we *require* that an fstrim
+     * be run on this device.  We use the value in the Settings.Global.MANDATORY_FSTRIM_INTERVAL
+     * settings entry if available, otherwise we use the hardcoded default.  If it's been
+     * more than this long since the last fstrim, we force one during the boot sequence.
+     *
+     * This backstops other fstrim scheduling:  if the device is alive at midnight+idle,
+     * one gets run at the next available charging+idle time.  This final mandatory
+     * no-fstrim check kicks in only of the other scheduling criteria is never met.
+     */
+    private static final long DEFAULT_MANDATORY_FSTRIM_INTERVAL = 3 * DateUtils.DAY_IN_MILLIS;
+
+    private final PackageManagerService mPm;
+    private final Context mContext;
+    private final PackageManagerServiceInjector mInjector;
+    private final boolean mEnableFreeCacheV2;
+
+    // TODO(b/198166813): remove PMS dependency
+    FreeStorageHelper(PackageManagerService pm, PackageManagerServiceInjector injector,
+            Context context, boolean enableFreeCacheV2) {
+        mPm = pm;
+        mInjector = injector;
+        mContext = context;
+        mEnableFreeCacheV2 = enableFreeCacheV2;
+    }
+
+    FreeStorageHelper(PackageManagerService pm) {
+        this(pm, pm.mInjector, pm.mContext,
+                SystemProperties.getBoolean("fw.free_cache_v2", true));
+    }
+
+    /**
+     * Blocking call to clear various types of cached data across the system
+     * until the requested bytes are available.
+     */
+    void freeStorage(String volumeUuid, long bytes,
+            @StorageManager.AllocateFlags int flags) throws IOException {
+        final StorageManager storage = mInjector.getSystemService(StorageManager.class);
+        final File file = storage.findPathForUuid(volumeUuid);
+        if (file.getUsableSpace() >= bytes) return;
+
+        if (mEnableFreeCacheV2) {
+            final boolean internalVolume = Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL,
+                    volumeUuid);
+            final boolean aggressive = (flags & StorageManager.FLAG_ALLOCATE_AGGRESSIVE) != 0;
+
+            // 1. Pre-flight to determine if we have any chance to succeed
+            // 2. Consider preloaded data (after 1w honeymoon, unless aggressive)
+            if (internalVolume && (aggressive || SystemProperties
+                    .getBoolean("persist.sys.preloads.file_cache_expired", false))) {
+                mPm.deletePreloadsFileCache();
+                if (file.getUsableSpace() >= bytes) return;
+            }
+
+            // 3. Consider parsed APK data (aggressive only)
+            if (internalVolume && aggressive) {
+                FileUtils.deleteContents(mPm.getCacheDir());
+                if (file.getUsableSpace() >= bytes) return;
+            }
+
+            // 4. Consider cached app data (above quotas)
+            synchronized (mPm.mInstallLock) {
+                try {
+                    mPm.mInstaller.freeCache(volumeUuid, bytes, Installer.FLAG_FREE_CACHE_V2);
+                } catch (Installer.InstallerException ignored) {
+                }
+            }
+            if (file.getUsableSpace() >= bytes) return;
+
+            final Computer computer = mPm.snapshotComputer();
+            final SharedLibrariesImpl sharedLibraries = mPm.mInjector.getSharedLibrariesImpl();
+            // 5. Consider shared libraries with refcount=0 and age>min cache period
+            if (internalVolume && sharedLibraries.pruneUnusedStaticSharedLibraries(computer, bytes,
+                    android.provider.Settings.Global.getLong(mContext.getContentResolver(),
+                            Settings.Global.UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD,
+                            FREE_STORAGE_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD))) {
+                return;
+            }
+
+            // 6. Consider dexopt output (aggressive only)
+            // TODO: Implement
+
+            // 7. Consider installed instant apps unused longer than min cache period
+            if (internalVolume) {
+                if (mPm.mInstantAppRegistry.pruneInstalledInstantApps(computer, bytes,
+                        android.provider.Settings.Global.getLong(
+                                mContext.getContentResolver(),
+                                Settings.Global.INSTALLED_INSTANT_APP_MIN_CACHE_PERIOD,
+                                InstantAppRegistry
+                                        .DEFAULT_INSTALLED_INSTANT_APP_MIN_CACHE_PERIOD))) {
+                    return;
+                }
+            }
+
+            // 8. Consider cached app data (below quotas)
+            synchronized (mPm.mInstallLock) {
+                try {
+                    mPm.mInstaller.freeCache(volumeUuid, bytes,
+                            Installer.FLAG_FREE_CACHE_V2 | Installer.FLAG_FREE_CACHE_V2_DEFY_QUOTA);
+                } catch (Installer.InstallerException ignored) {
+                }
+            }
+            if (file.getUsableSpace() >= bytes) return;
+
+            // 9. Consider DropBox entries
+            // TODO: Implement
+
+            // 10. Consider instant meta-data (uninstalled apps) older that min cache period
+            if (internalVolume) {
+                if (mPm.mInstantAppRegistry.pruneUninstalledInstantApps(computer, bytes,
+                        android.provider.Settings.Global.getLong(
+                                mContext.getContentResolver(),
+                                Settings.Global.UNINSTALLED_INSTANT_APP_MIN_CACHE_PERIOD,
+                                InstantAppRegistry
+                                        .DEFAULT_UNINSTALLED_INSTANT_APP_MIN_CACHE_PERIOD))) {
+                    return;
+                }
+            }
+
+            // 11. Free storage service cache
+            StorageManagerInternal smInternal =
+                    mInjector.getLocalService(StorageManagerInternal.class);
+            long freeBytesRequired = bytes - file.getUsableSpace();
+            if (freeBytesRequired > 0) {
+                smInternal.freeCache(volumeUuid, freeBytesRequired);
+            }
+
+            // 12. Clear temp install session files
+            mPm.mInstallerService.freeStageDirs(volumeUuid);
+        } else {
+            synchronized (mPm.mInstallLock) {
+                try {
+                    mPm.mInstaller.freeCache(volumeUuid, bytes, 0);
+                } catch (Installer.InstallerException ignored) {
+                }
+            }
+        }
+        if (file.getUsableSpace() >= bytes) return;
+
+        throw new IOException("Failed to free " + bytes + " on storage device at " + file);
+    }
+
+    int freeCacheForInstallation(int recommendedInstallLocation, PackageLite pkgLite,
+            String resolvedPath, String mPackageAbiOverride, int installFlags) {
+        // TODO: focus freeing disk space on the target device
+        final StorageManager storage = StorageManager.from(mContext);
+        final long lowThreshold = storage.getStorageLowBytes(Environment.getDataDirectory());
+
+        final long sizeBytes = PackageManagerServiceUtils.calculateInstalledSize(resolvedPath,
+                mPackageAbiOverride);
+        if (sizeBytes >= 0) {
+            synchronized (mPm.mInstallLock) {
+                try {
+                    mPm.mInstaller.freeCache(null, sizeBytes + lowThreshold, 0);
+                    PackageInfoLite pkgInfoLite = PackageManagerServiceUtils.getMinimalPackageInfo(
+                            mContext, pkgLite, resolvedPath, installFlags,
+                            mPackageAbiOverride);
+                    // The cache free must have deleted the file we downloaded to install.
+                    if (pkgInfoLite.recommendedInstallLocation
+                            == InstallLocationUtils.RECOMMEND_FAILED_INVALID_URI) {
+                        pkgInfoLite.recommendedInstallLocation =
+                                InstallLocationUtils.RECOMMEND_FAILED_INSUFFICIENT_STORAGE;
+                    }
+                    return pkgInfoLite.recommendedInstallLocation;
+                } catch (Installer.InstallerException e) {
+                    Slog.w(TAG, "Failed to free cache", e);
+                }
+            }
+        }
+        return recommendedInstallLocation;
+    }
+
+    void performFstrimIfNeeded() {
+        PackageManagerServiceUtils.enforceSystemOrRoot("Only the system can request fstrim");
+
+        // Before everything else, see whether we need to fstrim.
+        try {
+            IStorageManager sm = InstallLocationUtils.getStorageManager();
+            if (sm != null) {
+                boolean doTrim = false;
+                final long interval = android.provider.Settings.Global.getLong(
+                        mContext.getContentResolver(),
+                        android.provider.Settings.Global.FSTRIM_MANDATORY_INTERVAL,
+                        DEFAULT_MANDATORY_FSTRIM_INTERVAL);
+                if (interval > 0) {
+                    final long timeSinceLast = System.currentTimeMillis() - sm.lastMaintenance();
+                    if (timeSinceLast > interval) {
+                        doTrim = true;
+                        Slog.w(TAG, "No disk maintenance in " + timeSinceLast
+                                + "; running immediately");
+                    }
+                }
+                if (doTrim) {
+                    sm.runMaintenance();
+                }
+            } else {
+                Slog.e(TAG, "storageManager service unavailable!");
+            }
+        } catch (RemoteException e) {
+            // Can't happen; StorageManagerService is local
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/pm/IPackageManagerBase.java b/services/core/java/com/android/server/pm/IPackageManagerBase.java
index 52fdbda..fd47846 100644
--- a/services/core/java/com/android/server/pm/IPackageManagerBase.java
+++ b/services/core/java/com/android/server/pm/IPackageManagerBase.java
@@ -57,6 +57,7 @@
 import android.os.Trace;
 import android.os.UserHandle;
 import android.permission.PermissionManager;
+import android.util.ArrayMap;
 import android.util.Log;
 
 import com.android.internal.R;
@@ -67,6 +68,7 @@
 import com.android.server.pm.verify.domain.proxy.DomainVerificationProxyV1;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 
 /**
@@ -810,7 +812,22 @@
     @Override
     @Deprecated
     public final String[] getSystemSharedLibraryNames() {
-        return snapshot().getSystemSharedLibraryNames();
+        ArrayMap<String, String> namesAndPaths = snapshot().getSystemSharedLibraryNamesAndPaths();
+        if (namesAndPaths.isEmpty()) {
+            return null;
+        }
+        final int size = namesAndPaths.size();
+        final String[] libs = new String[size];
+        for (int i = 0; i < size; i++) {
+            libs[i] = namesAndPaths.keyAt(i);
+        }
+        return libs;
+    }
+
+    @Override
+    @Deprecated
+    public final Map<String, String> getSystemSharedLibraryNamesAndPaths() {
+        return snapshot().getSystemSharedLibraryNamesAndPaths();
     }
 
     @Override
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index 622cb66..31869b8 100644
--- a/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -719,7 +719,7 @@
                     if ((installFlags & PackageManager.INSTALL_ALL_WHITELIST_RESTRICTED_PERMISSIONS)
                             != 0) {
                         permissionParamsBuilder.setAllowlistedRestrictedPermissions(
-                                pkgSetting.getPkg().getRequestedPermissions());
+                                new ArrayList<>(pkgSetting.getPkg().getRequestedPermissions()));
                     }
                     mPm.mPermissionManager.onPackageInstalled(pkgSetting.getPkg(),
                             Process.INVALID_UID /* previousAppId */,
@@ -1532,29 +1532,34 @@
         } else {
             // Enable SCAN_NO_DEX flag to skip dexopt at a later stage
             scanFlags |= SCAN_NO_DEX;
+            // The native libs of Apex is located in apex_payload.img, don't need to parse it from
+            // the original apex file
+            if (!isApex) {
+                try {
+                    PackageSetting pkgSetting;
+                    synchronized (mPm.mLock) {
+                        pkgSetting = mPm.mSettings.getPackageLPr(pkgName);
+                    }
+                    boolean isUpdatedSystemAppFromExistingSetting = pkgSetting != null
+                            && pkgSetting.isUpdatedSystemApp();
+                    final String abiOverride = deriveAbiOverride(request.getAbiOverride());
 
-            try {
-                PackageSetting pkgSetting;
-                synchronized (mPm.mLock) {
-                    pkgSetting = mPm.mSettings.getPackageLPr(pkgName);
+                    // TODO: Are these system flags actually set properly at this stage?
+                    boolean isUpdatedSystemAppInferred =
+                            pkgSetting != null && pkgSetting.isSystem();
+                    final Pair<PackageAbiHelper.Abis, PackageAbiHelper.NativeLibraryPaths>
+                            derivedAbi = mPackageAbiHelper.derivePackageAbi(parsedPackage,
+                            systemApp, (isUpdatedSystemAppFromExistingSetting
+                                    || isUpdatedSystemAppInferred), abiOverride,
+                            ScanPackageUtils.getAppLib32InstallDir());
+                    derivedAbi.first.applyTo(parsedPackage);
+                    derivedAbi.second.applyTo(parsedPackage);
+                } catch (PackageManagerException pme) {
+                    Slog.e(TAG, "Error deriving application ABI", pme);
+                    throw PrepareFailure.ofInternalError(
+                            "Error deriving application ABI: " + pme.getMessage(),
+                            PackageManagerException.INTERNAL_ERROR_DERIVING_ABI);
                 }
-                boolean isUpdatedSystemAppFromExistingSetting = pkgSetting != null
-                        && pkgSetting.isUpdatedSystemApp();
-                final String abiOverride = deriveAbiOverride(request.getAbiOverride());
-
-                // TODO: Are these system flags actually set properly at this stage?
-                boolean isUpdatedSystemAppInferred = pkgSetting != null && pkgSetting.isSystem();
-                final Pair<PackageAbiHelper.Abis, PackageAbiHelper.NativeLibraryPaths>
-                        derivedAbi = mPackageAbiHelper.derivePackageAbi(parsedPackage, systemApp,
-                        isUpdatedSystemAppFromExistingSetting || isUpdatedSystemAppInferred,
-                        abiOverride, ScanPackageUtils.getAppLib32InstallDir());
-                derivedAbi.first.applyTo(parsedPackage);
-                derivedAbi.second.applyTo(parsedPackage);
-            } catch (PackageManagerException pme) {
-                Slog.e(TAG, "Error deriving application ABI", pme);
-                throw PrepareFailure.ofInternalError(
-                        "Error deriving application ABI: " + pme.getMessage(),
-                        PackageManagerException.INTERNAL_ERROR_DERIVING_ABI);
             }
         }
 
@@ -2167,7 +2172,7 @@
 
     private void updateSettingsInternalLI(AndroidPackage pkg,
             int[] allUsers, InstallRequest installRequest) {
-        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "updateSettings");
+        Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "updateSettingsInternal");
 
         final String pkgName = pkg.getPackageName();
         final int[] installedForUsers = installRequest.getOriginUsers();
@@ -2341,9 +2346,7 @@
                         & PackageManager.INSTALL_GRANT_ALL_REQUESTED_PERMISSIONS) != 0;
                 if (grantRequestedPermissions) {
                     var permissionStates = new ArrayMap<String, Integer>();
-                    var requestedPermissions = pkg.getRequestedPermissions();
-                    for (int index = 0; index < requestedPermissions.size(); index++) {
-                        var permissionName = requestedPermissions.get(index);
+                    for (var permissionName : pkg.getRequestedPermissions()) {
                         permissionStates.put(permissionName,
                                 PackageInstaller.SessionParams.PERMISSION_STATE_GRANTED);
                     }
@@ -2359,7 +2362,8 @@
                         (installRequest.getInstallFlags()
                                 & PackageManager.INSTALL_ALL_WHITELIST_RESTRICTED_PERMISSIONS) != 0;
                 final List<String> allowlistedRestrictedPermissions =
-                        allowlistAllRestrictedPermissions ? pkg.getRequestedPermissions()
+                        allowlistAllRestrictedPermissions
+                                ? new ArrayList<>(pkg.getRequestedPermissions())
                                 : installRequest.getAllowlistedRestrictedPermissions();
                 if (allowlistedRestrictedPermissions != null) {
                     permissionParamsBuilder.setAllowlistedRestrictedPermissions(
@@ -2413,7 +2417,8 @@
             final InstallRequest installRequest = reconciledPkg.mInstallRequest;
             final boolean instantApp = ((installRequest.getScanFlags() & SCAN_AS_INSTANT_APP) != 0);
             final boolean isApex = ((installRequest.getScanFlags() & SCAN_AS_APEX) != 0);
-            final AndroidPackage pkg = installRequest.getScannedPackageSetting().getPkg();
+            final PackageSetting ps = installRequest.getScannedPackageSetting();
+            final AndroidPackage pkg = ps.getPkg();
             final String packageName = pkg.getPackageName();
             final String codePath = pkg.getPath();
             final boolean onIncremental = mIncrementalManager != null
@@ -2513,7 +2518,7 @@
                 // Compile the layout resources.
                 if (SystemProperties.getBoolean(PRECOMPILE_LAYOUTS, false)) {
                     Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "compileLayouts");
-                    mViewCompiler.compileLayouts(pkg);
+                    mViewCompiler.compileLayouts(ps, pkg.getBaseApkPath());
                     Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
                 }
 
@@ -2818,6 +2823,8 @@
                     final String[] pkgNames = new String[]{
                             request.getRemovedInfo().mRemovedPackage};
                     final int[] uids = new int[]{request.getRemovedInfo().mUid};
+                    mPm.notifyResourcesChanged(false /* mediaStatus */,
+                            true /* replacing */, pkgNames, uids);
                     mBroadcastHelper.sendResourcesChangedBroadcast(mPm::snapshotComputer,
                             false /* mediaStatus */, true /* replacing */, pkgNames, uids);
                 }
@@ -3023,6 +3030,8 @@
                     final int[] uids = new int[]{request.getPkg().getUid()};
                     mBroadcastHelper.sendResourcesChangedBroadcast(mPm::snapshotComputer,
                             true /* mediaStatus */, true /* replacing */, pkgNames, uids);
+                    mPm.notifyResourcesChanged(true /* mediaStatus */, true /* replacing */,
+                            pkgNames, uids);
                 }
             } else if (!ArrayUtils.isEmpty(request.getLibraryConsumers())) { // if static shared lib
                 // No need to kill consumers if it's installation of new version static shared lib.
@@ -3740,12 +3749,15 @@
 
             if (throwable == null) {
                 try {
+                    Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "addForInitLI");
                     addForInitLI(parseResult.parsedPackage, parseFlags, scanFlags,
                             new UserHandle(UserHandle.USER_SYSTEM), apexInfo);
                 } catch (PackageManagerException e) {
                     errorCode = e.error;
                     errorMsg = "Failed to scan " + parseResult.scanFile + ": " + e.getMessage();
                     Slog.w(TAG, errorMsg);
+                } finally {
+                    Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
                 }
             } else if (throwable instanceof PackageManagerException) {
                 PackageManagerException e = (PackageManagerException) throwable;
diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java
index fbdf750..e73eced 100644
--- a/services/core/java/com/android/server/pm/LauncherAppsService.java
+++ b/services/core/java/com/android/server/pm/LauncherAppsService.java
@@ -379,7 +379,7 @@
                 filter.addDataScheme("package");
                 mContext.registerReceiverAsUser(mPackageRemovedListener, UserHandle.ALL, filter,
                         /* broadcastPermission= */ null, mCallbackHandler);
-                mPackageMonitor.register(mContext, UserHandle.ALL, true, mCallbackHandler);
+                mPackageMonitor.register(mContext, UserHandle.ALL, mCallbackHandler);
                 mIsWatchingPackageBroadcasts = true;
             }
         }
diff --git a/services/core/java/com/android/server/pm/MovePackageHelper.java b/services/core/java/com/android/server/pm/MovePackageHelper.java
index adee143..1a5591c 100644
--- a/services/core/java/com/android/server/pm/MovePackageHelper.java
+++ b/services/core/java/com/android/server/pm/MovePackageHelper.java
@@ -102,16 +102,13 @@
                     "3rd party apps are not allowed on internal storage");
         }
 
-
-        final String currentVolumeUuid = packageState.getVolumeUuid();
-
         final File probe = new File(pkg.getPath());
-        final File probeOat = new File(probe, "oat");
-        if (!probe.isDirectory() || !probeOat.isDirectory()) {
+        if (!probe.isDirectory()) {
             throw new PackageManagerException(MOVE_FAILED_INTERNAL_ERROR,
                     "Move only supported for modern cluster style installs");
         }
 
+        final String currentVolumeUuid = packageState.getVolumeUuid();
         if (Objects.equals(currentVolumeUuid, volumeUuid)) {
             throw new PackageManagerException(MOVE_FAILED_INTERNAL_ERROR,
                     "Package already moved to " + volumeUuid);
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index 178719f..10cd51a 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -1307,9 +1307,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.INSTALL_PACKAGES)
     @Override
     public void setPermissionsResult(int sessionId, boolean accepted) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, TAG);
+        setPermissionsResult_enforcePermission();
 
         synchronized (mSessions) {
             PackageInstallerSession session = mSessions.get(sessionId);
@@ -1320,10 +1321,16 @@
     }
 
     private boolean isValidForInstallConstraints(PackageStateInternal ps,
-            String installerPackageName) {
+            String installerPackageName, int installerUid, String packageName) {
+        final var snapshot = mPm.snapshotComputer();
+        final var isSelfUpdatePermissionGranted =
+                (snapshot.checkUidPermission(android.Manifest.permission.INSTALL_SELF_UPDATES,
+                        installerUid) == PackageManager.PERMISSION_GRANTED);
+        final var isSelfUpdateAllowed = isSelfUpdatePermissionGranted && TextUtils.equals(
+                packageName, installerPackageName);
         return TextUtils.equals(ps.getInstallSource().mInstallerPackageName, installerPackageName)
                 || TextUtils.equals(ps.getInstallSource().mUpdateOwnerPackageName,
-                installerPackageName);
+                installerPackageName) || isSelfUpdateAllowed;
     }
 
     private CompletableFuture<InstallConstraintsResult> checkInstallConstraintsInternal(
@@ -1342,7 +1349,8 @@
         if (!PackageManagerServiceUtils.isSystemOrRootOrShell(callingUid)) {
             for (var packageName : packageNames) {
                 var ps = snapshot.getPackageStateInternal(packageName);
-                if (ps == null || !isValidForInstallConstraints(ps, installerPackageName)) {
+                if (ps == null || !isValidForInstallConstraints(ps, installerPackageName,
+                        callingUid, packageName)) {
                     throw new SecurityException("Caller has no access to package " + packageName);
                 }
             }
@@ -1878,7 +1886,14 @@
         }
 
         public void onSessionFinished(final PackageInstallerSession session, boolean success) {
-            mCallbacks.notifySessionFinished(session.sessionId, session.userId, success);
+            if (success) {
+                // There is a timing issue here, if the callback opens the session again in
+                // notifySessionFinished() immediately, the session may not be removed from
+                // the mSession. But to avoid adding unknown latency, only notifying failures
+                // are moved to the last of posted runnable, notifying success cases are
+                // still kept here.
+                mCallbacks.notifySessionFinished(session.sessionId, session.userId, success);
+            }
 
             mInstallHandler.post(new Runnable() {
                 @Override
@@ -1907,6 +1922,10 @@
 
                         mSettingsWriteRequest.runNow();
                     }
+                    if (!success) {
+                        mCallbacks.notifySessionFinished(
+                                session.sessionId, session.userId, success);
+                    }
                 }
             });
         }
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index f0e3895..303f321 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -66,6 +66,7 @@
 import android.app.admin.DevicePolicyEventLogger;
 import android.app.admin.DevicePolicyManager;
 import android.app.admin.DevicePolicyManagerInternal;
+import android.app.compat.CompatChanges;
 import android.compat.annotation.ChangeId;
 import android.compat.annotation.EnabledSince;
 import android.content.ComponentName;
@@ -333,6 +334,15 @@
 
     private static final int APP_METADATA_FILE_ACCESS_MODE = 0640;
 
+    /**
+     * Throws IllegalArgumentException if the {@link IntentSender} from an immutable
+     * {@link android.app.PendingIntent} when caller has a target SDK of API
+     * {@link android.os.Build.VERSION_CODES#VANILLA_ICE_CREAM} or above.
+     */
+    @ChangeId
+    @EnabledSince(targetSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
+    private static final long THROW_EXCEPTION_COMMIT_WITH_IMMUTABLE_PENDING_INTENT = 240618202L;
+
     // TODO: enforce INSTALL_ALLOW_TEST
     // TODO: enforce INSTALL_ALLOW_DOWNGRADE
 
@@ -451,6 +461,9 @@
     private IntentSender mRemoteStatusReceiver;
 
     @GuardedBy("mLock")
+    private IntentSender mPreapprovalRemoteStatusReceiver;
+
+    @GuardedBy("mLock")
     private PreapprovalDetails mPreapprovalDetails;
 
     /** Fields derived from commit parsing */
@@ -695,9 +708,30 @@
         @Override
         public void verifySession() {
             assertCallerIsOwnerOrRootOrSystem();
-            Preconditions.checkArgument(isCommitted());
-            Preconditions.checkArgument(!isInTerminalState());
-            verify();
+            if (isCommittedAndNotInTerminalState()) {
+                verify();
+            }
+        }
+
+        private boolean isCommittedAndNotInTerminalState() {
+            String errorMsg = null;
+            if (!isCommitted()) {
+                errorMsg = TextUtils.formatSimple("The session %d should be committed", sessionId);
+            } else if (isSessionApplied()) {
+                errorMsg = TextUtils.formatSimple("The session %d has applied", sessionId);
+            } else if (isSessionFailed()) {
+                synchronized (PackageInstallerSession.this.mLock) {
+                    errorMsg = TextUtils.formatSimple("The session %d has failed with error: %s",
+                            sessionId, PackageInstallerSession.this.mSessionErrorMessage);
+                }
+            }
+            if (errorMsg != null) {
+                Slog.e(TAG, "verifySession error: " + errorMsg);
+                setSessionFailed(INSTALL_FAILED_INTERNAL_ERROR, errorMsg);
+                onSessionVerificationFailure(INSTALL_FAILED_INTERNAL_ERROR, errorMsg);
+                return false;
+            }
+            return true;
         }
     }
 
@@ -1864,6 +1898,12 @@
     @Override
     public void commit(@NonNull IntentSender statusReceiver, boolean forTransfer) {
         assertNotChild("commit");
+        boolean throwsExceptionCommitImmutableCheck = CompatChanges.isChangeEnabled(
+                THROW_EXCEPTION_COMMIT_WITH_IMMUTABLE_PENDING_INTENT, Binder.getCallingUid());
+        if (throwsExceptionCommitImmutableCheck && statusReceiver.isImmutable()) {
+            throw new IllegalArgumentException(
+                "The commit() status receiver should come from a mutable PendingIntent");
+        }
 
         if (!markAsSealed(statusReceiver, forTransfer)) {
             return;
@@ -1989,8 +2029,8 @@
                 mHandler.obtainMessage(MSG_INSTALL).sendToTarget();
             }
         } catch (PackageManagerException e) {
-            destroy();
             String msg = ExceptionUtils.getCompleteMessage(e);
+            destroy(msg);
             dispatchSessionFinished(e.error, msg, null);
             maybeFinishChildSessions(e.error, msg);
         }
@@ -2003,11 +2043,11 @@
          * {@link #setPermissionsResult(boolean)} is called and then
          * {@link #MSG_PRE_APPROVAL_REQUEST} is handled to come back here to check again.
          */
-        if (sendPendingUserActionIntentIfNeeded()) {
+        if (sendPendingUserActionIntentIfNeeded(/* forPreapproval= */true)) {
             return;
         }
 
-        dispatchSessionPreappoved();
+        dispatchSessionPreapproved();
     }
 
     private final class FileSystemConnector extends
@@ -2243,7 +2283,7 @@
 
     private void onSessionValidationFailure(int error, String detailMessage) {
         // Session is sealed but could not be validated, we need to destroy it.
-        destroyInternal();
+        destroyInternal("Failed to validate session, error: " + error + ", " + detailMessage);
         // Dispatch message to remove session from PackageInstallerService.
         dispatchSessionFinished(error, detailMessage, null);
     }
@@ -2462,14 +2502,16 @@
      * @return true if the session set requires user action for the installation, otherwise false.
      */
     @WorkerThread
-    private boolean sendPendingUserActionIntentIfNeeded() {
+    private boolean sendPendingUserActionIntentIfNeeded(boolean forPreapproval) {
         // To support pre-approval request of atomic install, we allow child session to handle
         // the result by itself since it has the status receiver.
         if (isCommitted()) {
             assertNotChild("PackageInstallerSession#sendPendingUserActionIntentIfNeeded");
         }
-
-        final IntentSender statusReceiver = getRemoteStatusReceiver();
+        // Since there are separate status receivers for session preapproval and commit,
+        // check whether user action is requested for session preapproval or commit
+        final IntentSender statusReceiver = forPreapproval ? getPreapprovalRemoteStatusReceiver()
+                                            : getRemoteStatusReceiver();
         return sessionContains(s -> checkUserActionRequirement(s, statusReceiver));
     }
 
@@ -2492,7 +2534,8 @@
          * install. Since control may come back here more than 1 time, we must ensure that it's
          * value is not overwritten.
          */
-        boolean wasUserActionIntentSent = sendPendingUserActionIntentIfNeeded();
+        boolean wasUserActionIntentSent =
+                sendPendingUserActionIntentIfNeeded(/* forPreapproval= */false);
         if (mUserActionRequired == null) {
             mUserActionRequired = wasUserActionIntentSent;
         }
@@ -2554,6 +2597,18 @@
         }
     }
 
+    private IntentSender getPreapprovalRemoteStatusReceiver() {
+        synchronized (mLock) {
+            return mPreapprovalRemoteStatusReceiver;
+        }
+    }
+
+    private void setPreapprovalRemoteStatusReceiver(IntentSender remoteStatusReceiver) {
+        synchronized (mLock) {
+            mPreapprovalRemoteStatusReceiver = remoteStatusReceiver;
+        }
+    }
+
     /**
      * Prepares staged directory with any inherited APKs.
      */
@@ -2791,7 +2846,8 @@
     private void onVerificationComplete() {
         if (isStaged()) {
             mStagingManager.commitSession(mStagedSession);
-            sendUpdateToRemoteStatusReceiver(INSTALL_SUCCEEDED, "Session staged", null);
+            sendUpdateToRemoteStatusReceiver(INSTALL_SUCCEEDED, "Session staged",
+                    /* extras= */ null, /* forPreapproval= */ false);
             return;
         }
         install();
@@ -3957,7 +4013,7 @@
             root.mHandler.obtainMessage(
                     isCommitted() ? MSG_INSTALL : MSG_PRE_APPROVAL_REQUEST).sendToTarget();
         } else {
-            root.destroy();
+            root.destroy("User rejected permissions");
             root.dispatchSessionFinished(INSTALL_FAILED_ABORTED, "User rejected permissions", null);
             root.maybeFinishChildSessions(INSTALL_FAILED_ABORTED, "User rejected permissions");
         }
@@ -4072,7 +4128,7 @@
                 if (isStaged() && isCommitted()) {
                     mStagingManager.abortCommittedSession(mStagedSession);
                 }
-                destroy();
+                destroy("Session was abandoned");
                 dispatchSessionFinished(INSTALL_FAILED_ABORTED, "Session was abandoned", null);
                 maybeFinishChildSessions(INSTALL_FAILED_ABORTED,
                         "Session was abandoned because the parent session is abandoned");
@@ -4109,16 +4165,18 @@
         return params.installFlags;
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.USE_INSTALLER_V2)
     @Override
     public DataLoaderParamsParcel getDataLoaderParams() {
-        mContext.enforceCallingOrSelfPermission(Manifest.permission.USE_INSTALLER_V2, null);
+        getDataLoaderParams_enforcePermission();
         return params.dataLoaderParams != null ? params.dataLoaderParams.getData() : null;
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.USE_INSTALLER_V2)
     @Override
     public void addFile(int location, String name, long lengthBytes, byte[] metadata,
             byte[] signature) {
-        mContext.enforceCallingOrSelfPermission(Manifest.permission.USE_INSTALLER_V2, null);
+        addFile_enforcePermission();
         if (!isDataLoaderInstallation()) {
             throw new IllegalStateException(
                     "Cannot add files to non-data loader installation session.");
@@ -4149,9 +4207,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.USE_INSTALLER_V2)
     @Override
     public void removeFile(int location, String name) {
-        mContext.enforceCallingOrSelfPermission(Manifest.permission.USE_INSTALLER_V2, null);
+        removeFile_enforcePermission();
         if (!isDataLoaderInstallation()) {
             throw new IllegalStateException(
                     "Cannot add files to non-data loader installation session.");
@@ -4545,7 +4604,11 @@
     }
 
     private void dispatchSessionFinished(int returnCode, String msg, Bundle extras) {
-        sendUpdateToRemoteStatusReceiver(returnCode, msg, extras);
+        // Session can be marked as finished due to user rejecting pre approval or commit request,
+        // any internal error or after successful completion. As such, check whether
+        // the session is in the preapproval stage or the commit stage.
+        sendUpdateToRemoteStatusReceiver(returnCode, msg, extras,
+                /* forPreapproval= */ isPreapprovalRequested() && !isCommitted());
 
         synchronized (mLock) {
             mFinalStatus = returnCode;
@@ -4567,8 +4630,10 @@
         }
     }
 
-    private void sendUpdateToRemoteStatusReceiver(int returnCode, String msg, Bundle extras) {
-        final IntentSender statusReceiver = getRemoteStatusReceiver();
+    private void sendUpdateToRemoteStatusReceiver(int returnCode, String msg, Bundle extras,
+            boolean forPreapproval) {
+        final IntentSender statusReceiver = forPreapproval ? getPreapprovalRemoteStatusReceiver()
+                                            : getRemoteStatusReceiver();
         if (statusReceiver != null) {
             // Execute observer.onPackageInstalled on different thread as we don't want callers
             // inside the system server have to worry about catching the callbacks while they are
@@ -4584,8 +4649,8 @@
         }
     }
 
-    private void dispatchSessionPreappoved() {
-        final IntentSender target = getRemoteStatusReceiver();
+    private void dispatchSessionPreapproved() {
+        final IntentSender target = getPreapprovalRemoteStatusReceiver();
         final Intent intent = new Intent();
         intent.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId);
         intent.putExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_SUCCESS);
@@ -4606,7 +4671,8 @@
 
         if (!mPm.isPreapprovalRequestAvailable()) {
             sendUpdateToRemoteStatusReceiver(INSTALL_FAILED_PRE_APPROVAL_NOT_AVAILABLE,
-                    "Request user pre-approval is currently not available.", null /* extras */);
+                    "Request user pre-approval is currently not available.", /* extras= */null,
+                    /* preapproval= */true);
             return;
         }
 
@@ -4628,7 +4694,7 @@
         synchronized (mLock) {
             assertPreparedAndNotSealedLocked("request of session " + sessionId);
             mPreapprovalDetails = details;
-            setRemoteStatusReceiver(statusReceiver);
+            setPreapprovalRemoteStatusReceiver(statusReceiver);
         }
     }
 
@@ -4684,7 +4750,7 @@
             mSessionErrorMessage = errorMessage;
             Slog.d(TAG, "Marking session " + sessionId + " as failed: " + errorMessage);
         }
-        destroy();
+        destroy("Session marked as failed: " + errorMessage);
         mCallback.onSessionChanged(this);
     }
 
@@ -4699,7 +4765,7 @@
             mSessionErrorMessage = "";
             Slog.d(TAG, "Marking session " + sessionId + " as applied");
         }
-        destroy();
+        destroy(null);
         mCallback.onSessionChanged(this);
     }
 
@@ -4742,7 +4808,7 @@
      * Free up storage used by this session and its children.
      * Must not be called on a child session.
      */
-    private void destroy() {
+    private void destroy(String reason) {
         // TODO(b/173194203): destroy() is called indirectly by
         //  PackageInstallerService#restoreAndApplyStagedSessionIfNeeded on an orphan child session.
         //  Enable this assertion when we figure out a better way to clean up orphan sessions.
@@ -4751,16 +4817,20 @@
         // TODO(b/173194203): destroyInternal() should be used by destroy() only.
         //  For the sake of consistency, a session should be destroyed as a whole. The caller
         //  should always call destroy() for cleanup without knowing it has child sessions or not.
-        destroyInternal();
+        destroyInternal(reason);
         for (PackageInstallerSession child : getChildSessions()) {
-            child.destroyInternal();
+            child.destroyInternal(reason);
         }
     }
 
     /**
      * Free up storage used by this session.
      */
-    private void destroyInternal() {
+    private void destroyInternal(String reason) {
+        if (reason != null) {
+            Slog.i(TAG,
+                    "Session [" + this.sessionId + "] was destroyed because of [" + reason + "]");
+        }
         final IncrementalFileStorages incrementalFileStorages;
         synchronized (mLock) {
             mSealed = true;
diff --git a/services/core/java/com/android/server/pm/PackageManagerInternalBase.java b/services/core/java/com/android/server/pm/PackageManagerInternalBase.java
index 4e75210..82587c5 100644
--- a/services/core/java/com/android/server/pm/PackageManagerInternalBase.java
+++ b/services/core/java/com/android/server/pm/PackageManagerInternalBase.java
@@ -745,6 +745,13 @@
         mService.setPackageStoppedState(snapshot(), packageName, stopped, userId);
     }
 
+    @Override
+    public void notifyComponentUsed(@NonNull String packageName,
+            @UserIdInt int userId, @NonNull String recentCallingPackage) {
+        mService.notifyComponentUsed(snapshot(), packageName, userId,
+                recentCallingPackage);
+    }
+
     @NonNull
     @Override
     @Deprecated
diff --git a/services/core/java/com/android/server/pm/PackageManagerLocal.java b/services/core/java/com/android/server/pm/PackageManagerLocal.java
index 935c4dd..6266ef3 100644
--- a/services/core/java/com/android/server/pm/PackageManagerLocal.java
+++ b/services/core/java/com/android/server/pm/PackageManagerLocal.java
@@ -24,6 +24,7 @@
 import android.os.UserHandle;
 
 import com.android.server.pm.pkg.PackageState;
+import com.android.server.pm.pkg.SharedUserApi;
 
 import java.io.IOException;
 import java.lang.annotation.Retention;
@@ -150,6 +151,16 @@
         Map<String, PackageState> getPackageStates();
 
         /**
+         * Returns a map of all {@link SharedUserApi SharedUsers} on the device.
+         *
+         * @return Mapping of shared user name to {@link SharedUserApi}.
+         *
+         * @hide Pending API
+         */
+        @NonNull
+        Map<String, SharedUserApi> getSharedUsers();
+
+        /**
          * Returns a map of all disabled system {@link PackageState PackageStates} on the device.
          *
          * @return Mapping of package name to disabled system {@link PackageState}.
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index e5dc688..dc42644 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -15,7 +15,6 @@
 
 package com.android.server.pm;
 
-import static android.Manifest.permission.GET_APP_METADATA;
 import static android.Manifest.permission.MANAGE_DEVICE_ADMINS;
 import static android.Manifest.permission.SET_HARMFUL_APP_WARNINGS;
 import static android.app.AppOpsManager.MODE_IGNORED;
@@ -97,7 +96,6 @@
 import android.content.pm.InstantAppRequest;
 import android.content.pm.ModuleInfo;
 import android.content.pm.PackageInfo;
-import android.content.pm.PackageInfoLite;
 import android.content.pm.PackageInstaller;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.ComponentEnabledSetting;
@@ -131,6 +129,7 @@
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.IBinder;
+import android.os.IRemoteCallback;
 import android.os.Message;
 import android.os.Parcel;
 import android.os.ParcelFileDescriptor;
@@ -149,7 +148,6 @@
 import android.os.UserManager;
 import android.os.incremental.IncrementalManager;
 import android.os.incremental.PerUidReadTimeouts;
-import android.os.storage.IStorageManager;
 import android.os.storage.StorageManager;
 import android.os.storage.StorageManagerInternal;
 import android.os.storage.VolumeRecord;
@@ -158,7 +156,6 @@
 import android.provider.Settings.Global;
 import android.provider.Settings.Secure;
 import android.text.TextUtils;
-import android.text.format.DateUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.DisplayMetrics;
@@ -190,6 +187,7 @@
 import com.android.modules.utils.TypedXmlPullParser;
 import com.android.modules.utils.TypedXmlSerializer;
 import com.android.permission.persistence.RuntimePermissionsPersistence;
+import com.android.permission.persistence.RuntimePermissionsState;
 import com.android.server.EventLogTags;
 import com.android.server.FgThread;
 import com.android.server.LocalManagerRegistry;
@@ -198,6 +196,7 @@
 import com.android.server.PackageWatchdog;
 import com.android.server.ServiceThread;
 import com.android.server.SystemConfig;
+import com.android.server.ThreadPriorityBooster;
 import com.android.server.Watchdog;
 import com.android.server.apphibernation.AppHibernationManagerInternal;
 import com.android.server.art.DexUseManagerLocal;
@@ -220,6 +219,7 @@
 import com.android.server.pm.parsing.pkg.ParsedPackage;
 import com.android.server.pm.permission.LegacyPermissionManagerInternal;
 import com.android.server.pm.permission.LegacyPermissionManagerService;
+import com.android.server.pm.permission.LegacyPermissionSettings;
 import com.android.server.pm.permission.PermissionManagerService;
 import com.android.server.pm.permission.PermissionManagerServiceInternal;
 import com.android.server.pm.pkg.AndroidPackage;
@@ -483,18 +483,6 @@
     static final long WATCHDOG_TIMEOUT = 1000*60*10;     // ten minutes
 
     /**
-     * Wall-clock timeout (in milliseconds) after which we *require* that an fstrim
-     * be run on this device.  We use the value in the Settings.Global.MANDATORY_FSTRIM_INTERVAL
-     * settings entry if available, otherwise we use the hardcoded default.  If it's been
-     * more than this long since the last fstrim, we force one during the boot sequence.
-     *
-     * This backstops other fstrim scheduling:  if the device is alive at midnight+idle,
-     * one gets run at the next available charging+idle time.  This final mandatory
-     * no-fstrim check kicks in only of the other scheduling criteria is never met.
-     */
-    private static final long DEFAULT_MANDATORY_FSTRIM_INTERVAL = 3 * DateUtils.DAY_IN_MILLIS;
-
-    /**
      * Default IncFs timeouts. Maximum values in IncFs is 1hr.
      *
      * <p>If flag value is empty, the default value will be assigned.
@@ -600,8 +588,6 @@
 
     final ProcessLoggingHandler mProcessLoggingHandler;
 
-    private final boolean mEnableFreeCacheV2;
-
     private final int mSdkVersion;
     final Context mContext;
     final boolean mFactoryTest;
@@ -726,6 +712,9 @@
     @NonNull
     private final PackageObserverHelper mPackageObserverHelper = new PackageObserverHelper();
 
+    @NonNull
+    private final PackageMonitorCallbackHelper mPackageMonitorCallbackHelper;
+
     private final ModuleInfoProvider mModuleInfoProvider;
 
     final ApexManager mApexManager;
@@ -948,8 +937,6 @@
     // When the service constructor finished plus a delay (used for broadcast delay computation)
     private long mServiceStartWithDelay;
 
-    private static final long FREE_STORAGE_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD =
-            TimeUnit.HOURS.toMillis(2); /* two hours */
     static final long DEFAULT_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD =
             TimeUnit.DAYS.toMillis(7); /* 7 days */
 
@@ -1003,6 +990,34 @@
     private final SuspendPackageHelper mSuspendPackageHelper;
     private final DistractingPackageHelper mDistractingPackageHelper;
     private final StorageEventHelper mStorageEventHelper;
+    private final FreeStorageHelper mFreeStorageHelper;
+
+
+    private static final boolean ENABLE_BOOST = false;
+
+    private static ThreadPriorityBooster sThreadPriorityBooster = new ThreadPriorityBooster(
+            Process.THREAD_PRIORITY_FOREGROUND, LockGuard.INDEX_PACKAGES);
+
+    /**
+     * Boost the priority of the thread before holding PM traced lock.
+     * @hide
+     */
+    public static void boostPriorityForPackageManagerTracedLockedSection() {
+        if (ENABLE_BOOST) {
+            sThreadPriorityBooster.boost();
+        }
+    }
+
+
+    /**
+     * Restore the priority of the thread after release the PM traced lock.
+     * @hide
+     */
+    public static void resetPriorityAfterPackageManagerTracedLockedSection() {
+        if (ENABLE_BOOST) {
+            sThreadPriorityBooster.reset();
+        }
+    }
 
     /**
      * Invalidate the package info cache, which includes updating the cached computer.
@@ -1800,7 +1815,7 @@
         mSnapshotStatistics = null;
 
         mPackages.putAll(testParams.packages);
-        mEnableFreeCacheV2 = testParams.enableFreeCacheV2;
+        mFreeStorageHelper = testParams.freeStorageHelper;
         mSdkVersion = testParams.sdkVersion;
         mAppInstallDir = testParams.appInstallDir;
         mIsEngBuild = testParams.isEngBuild;
@@ -1823,6 +1838,7 @@
         mSharedLibraries.setDeletePackageHelper(mDeletePackageHelper);
 
         mStorageEventHelper = testParams.storageEventHelper;
+        mPackageMonitorCallbackHelper = testParams.packageMonitorCallbackHelper;
 
         registerObservers(false);
         invalidatePackageInfoCache();
@@ -1854,7 +1870,7 @@
         mFactoryTest = factoryTest;
         mMetrics = injector.getDisplayMetrics();
         mInstaller = injector.getInstaller();
-        mEnableFreeCacheV2 = SystemProperties.getBoolean("fw.free_cache_v2", true);
+        mFreeStorageHelper = new FreeStorageHelper(this);
 
         // Create sub-components that provide services / data. Order here is important.
         t.traceBegin("createSubComponents");
@@ -1963,6 +1979,7 @@
         mDomainVerificationManager.setConnection(mDomainVerificationConnection);
 
         mBroadcastHelper = new BroadcastHelper(mInjector);
+        mPackageMonitorCallbackHelper = new PackageMonitorCallbackHelper(mInjector);
         mAppDataHelper = new AppDataHelper(this);
         mInstallPackageHelper = new InstallPackageHelper(this, mAppDataHelper);
         mRemovePackageHelper = new RemovePackageHelper(this, mAppDataHelper);
@@ -2105,8 +2122,8 @@
                 // Save the names of pre-existing packages prior to scanning, so we can determine
                 // which system packages are completely new due to an upgrade.
                 mExistingPackages = new ArraySet<>(packageSettings.size());
-                for (PackageSetting ps : packageSettings.values()) {
-                    mExistingPackages.add(ps.getPackageName());
+                for (int i = 0; i < packageSettings.size(); i++) {
+                    mExistingPackages.add(packageSettings.valueAt(i).getPackageName());
                 }
 
                 // Triggering {@link com.android.server.pm.crossprofile.
@@ -2233,8 +2250,10 @@
             // If this is the first boot or an update from pre-M, then we need to initialize the
             // default preferred apps across all defined users.
             if (mPromoteSystemApps || mFirstBoot) {
-                for (UserInfo user : mInjector.getUserManagerInternal().getUsers(true)) {
-                    mSettings.applyDefaultPreferredAppsLPw(user.id);
+                final List<UserInfo> users = mInjector.getUserManagerInternal().getUsers(true);
+                for (int i = 0; i < users.size(); i++) {
+                    mSettings.applyDefaultPreferredAppsLPw(users.get(i).id);
+
                 }
             }
 
@@ -2404,13 +2423,6 @@
 
         mInjector.getSystemWrapper().enablePackageCaches();
 
-        // Now after opening every single application zip, make sure they
-        // are all flushed.  Not really needed, but keeps things nice and
-        // tidy.
-        t.traceBegin("GC");
-        VMRuntime.getRuntime().requestConcurrentGC();
-        t.traceEnd();
-
         // The initial scanning above does many calls into installd while
         // holding the mPackages lock, but we're mostly interested in yelling
         // once we have a booted system.
@@ -2491,13 +2503,22 @@
 
     @NonNull
     private String getRequiredServicesExtensionPackageLPr(@NonNull Computer computer) {
-        String servicesExtensionPackage =
-                ensureSystemPackageName(computer,
-                        mContext.getString(R.string.config_servicesExtensionPackage));
+        String configServicesExtensionPackage = mContext.getString(
+                R.string.config_servicesExtensionPackage);
+        if (TextUtils.isEmpty(configServicesExtensionPackage)) {
+            throw new RuntimeException(
+                    "Required services extension package failed due to "
+                            + "config_servicesExtensionPackage is empty.");
+        }
+        String servicesExtensionPackage = ensureSystemPackageName(computer,
+                configServicesExtensionPackage);
         if (TextUtils.isEmpty(servicesExtensionPackage)) {
             throw new RuntimeException(
-                    "Required services extension package is missing, check "
-                            + "config_servicesExtensionPackage.");
+                    "Required services extension package is missing, "
+                            + "config_servicesExtensionPackage had defined with "
+                            + configServicesExtensionPackage
+                            + ", but can not find the package info on the system image, check if "
+                            + "the package has a problem.");
         }
         return servicesExtensionPackage;
     }
@@ -2776,138 +2797,13 @@
      */
     public void freeStorage(String volumeUuid, long bytes,
             @StorageManager.AllocateFlags int flags) throws IOException {
-        final StorageManager storage = mInjector.getSystemService(StorageManager.class);
-        final File file = storage.findPathForUuid(volumeUuid);
-        if (file.getUsableSpace() >= bytes) return;
-
-        if (mEnableFreeCacheV2) {
-            final boolean internalVolume = Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL,
-                    volumeUuid);
-            final boolean aggressive = (flags & StorageManager.FLAG_ALLOCATE_AGGRESSIVE) != 0;
-
-            // 1. Pre-flight to determine if we have any chance to succeed
-            // 2. Consider preloaded data (after 1w honeymoon, unless aggressive)
-            if (internalVolume && (aggressive || SystemProperties
-                    .getBoolean("persist.sys.preloads.file_cache_expired", false))) {
-                deletePreloadsFileCache();
-                if (file.getUsableSpace() >= bytes) return;
-            }
-
-            // 3. Consider parsed APK data (aggressive only)
-            if (internalVolume && aggressive) {
-                FileUtils.deleteContents(mCacheDir);
-                if (file.getUsableSpace() >= bytes) return;
-            }
-
-            // 4. Consider cached app data (above quotas)
-            synchronized (mInstallLock) {
-                try {
-                    mInstaller.freeCache(volumeUuid, bytes, Installer.FLAG_FREE_CACHE_V2);
-                } catch (InstallerException ignored) {
-                }
-            }
-            if (file.getUsableSpace() >= bytes) return;
-
-            Computer computer = snapshotComputer();
-            // 5. Consider shared libraries with refcount=0 and age>min cache period
-            if (internalVolume && mSharedLibraries.pruneUnusedStaticSharedLibraries(computer, bytes,
-                    android.provider.Settings.Global.getLong(mContext.getContentResolver(),
-                            Global.UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD,
-                            FREE_STORAGE_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD))) {
-                return;
-            }
-
-            // 6. Consider dexopt output (aggressive only)
-            // TODO: Implement
-
-            // 7. Consider installed instant apps unused longer than min cache period
-            if (internalVolume) {
-                if (mInstantAppRegistry.pruneInstalledInstantApps(computer, bytes,
-                        android.provider.Settings.Global.getLong(
-                                mContext.getContentResolver(),
-                                Global.INSTALLED_INSTANT_APP_MIN_CACHE_PERIOD,
-                                InstantAppRegistry
-                                        .DEFAULT_INSTALLED_INSTANT_APP_MIN_CACHE_PERIOD))) {
-                    return;
-                }
-            }
-
-            // 8. Consider cached app data (below quotas)
-            synchronized (mInstallLock) {
-                try {
-                    mInstaller.freeCache(volumeUuid, bytes,
-                            Installer.FLAG_FREE_CACHE_V2 | Installer.FLAG_FREE_CACHE_V2_DEFY_QUOTA);
-                } catch (InstallerException ignored) {
-                }
-            }
-            if (file.getUsableSpace() >= bytes) return;
-
-            // 9. Consider DropBox entries
-            // TODO: Implement
-
-            // 10. Consider instant meta-data (uninstalled apps) older that min cache period
-            if (internalVolume) {
-                if (mInstantAppRegistry.pruneUninstalledInstantApps(computer, bytes,
-                        android.provider.Settings.Global.getLong(
-                                mContext.getContentResolver(),
-                                Global.UNINSTALLED_INSTANT_APP_MIN_CACHE_PERIOD,
-                                InstantAppRegistry
-                                        .DEFAULT_UNINSTALLED_INSTANT_APP_MIN_CACHE_PERIOD))) {
-                    return;
-                }
-            }
-
-            // 11. Free storage service cache
-            StorageManagerInternal smInternal =
-                    mInjector.getLocalService(StorageManagerInternal.class);
-            long freeBytesRequired = bytes - file.getUsableSpace();
-            if (freeBytesRequired > 0) {
-                smInternal.freeCache(volumeUuid, freeBytesRequired);
-            }
-
-            // 12. Clear temp install session files
-            mInstallerService.freeStageDirs(volumeUuid);
-        } else {
-            synchronized (mInstallLock) {
-                try {
-                    mInstaller.freeCache(volumeUuid, bytes, 0);
-                } catch (InstallerException ignored) {
-                }
-            }
-        }
-        if (file.getUsableSpace() >= bytes) return;
-
-        throw new IOException("Failed to free " + bytes + " on storage device at " + file);
+        mFreeStorageHelper.freeStorage(volumeUuid, bytes, flags);
     }
 
     int freeCacheForInstallation(int recommendedInstallLocation, PackageLite pkgLite,
             String resolvedPath, String mPackageAbiOverride, int installFlags) {
-        // TODO: focus freeing disk space on the target device
-        final StorageManager storage = StorageManager.from(mContext);
-        final long lowThreshold = storage.getStorageLowBytes(Environment.getDataDirectory());
-
-        final long sizeBytes = PackageManagerServiceUtils.calculateInstalledSize(resolvedPath,
-                mPackageAbiOverride);
-        if (sizeBytes >= 0) {
-            synchronized (mInstallLock) {
-                try {
-                    mInstaller.freeCache(null, sizeBytes + lowThreshold, 0);
-                    PackageInfoLite pkgInfoLite = PackageManagerServiceUtils.getMinimalPackageInfo(
-                            mContext, pkgLite, resolvedPath, installFlags,
-                            mPackageAbiOverride);
-                    // The cache free must have deleted the file we downloaded to install.
-                    if (pkgInfoLite.recommendedInstallLocation
-                            == InstallLocationUtils.RECOMMEND_FAILED_INVALID_URI) {
-                        pkgInfoLite.recommendedInstallLocation =
-                                InstallLocationUtils.RECOMMEND_FAILED_INSUFFICIENT_STORAGE;
-                    }
-                    return pkgInfoLite.recommendedInstallLocation;
-                } catch (Installer.InstallerException e) {
-                    Slog.w(TAG, "Failed to free cache", e);
-                }
-            }
-        }
-        return recommendedInstallLocation;
+        return mFreeStorageHelper.freeCacheForInstallation(recommendedInstallLocation, pkgLite,
+                resolvedPath, mPackageAbiOverride, installFlags);
     }
 
     public ModuleInfo getModuleInfo(String packageName, @PackageManager.ModuleInfoFlags int flags) {
@@ -2932,7 +2828,8 @@
 
     // NOTE: Can't remove due to unsupported app usage
     public int checkPermission(String permName, String pkgName, int userId) {
-        return mPermissionManager.checkPermission(pkgName, permName, userId);
+        return mPermissionManager.checkPermission(pkgName, permName, Context.DEVICE_ID_DEFAULT,
+                userId);
     }
 
     public String getSdkSandboxPackageName() {
@@ -2986,34 +2883,7 @@
     }
 
     public void performFstrimIfNeeded() {
-        PackageManagerServiceUtils.enforceSystemOrRoot("Only the system can request fstrim");
-
-        // Before everything else, see whether we need to fstrim.
-        try {
-            IStorageManager sm = InstallLocationUtils.getStorageManager();
-            if (sm != null) {
-                boolean doTrim = false;
-                final long interval = android.provider.Settings.Global.getLong(
-                        mContext.getContentResolver(),
-                        android.provider.Settings.Global.FSTRIM_MANDATORY_INTERVAL,
-                        DEFAULT_MANDATORY_FSTRIM_INTERVAL);
-                if (interval > 0) {
-                    final long timeSinceLast = System.currentTimeMillis() - sm.lastMaintenance();
-                    if (timeSinceLast > interval) {
-                        doTrim = true;
-                        Slog.w(TAG, "No disk maintenance in " + timeSinceLast
-                                + "; running immediately");
-                    }
-                }
-                if (doTrim) {
-                    sm.runMaintenance();
-                }
-            } else {
-                Slog.e(TAG, "storageManager service unavailable!");
-            }
-        } catch (RemoteException e) {
-            // Can't happen; StorageManagerService is local
-        }
+        mFreeStorageHelper.performFstrimIfNeeded();
     }
 
     public void updatePackagesIfNeeded() {
@@ -3125,6 +2995,27 @@
         mHandler.post(() -> mBroadcastHelper.sendPackageBroadcast(action, pkg, extras, flags,
                 targetPkg, finishedReceiver, userIds, instantUserIds, broadcastAllowList,
                 null /* filterExtrasForReceiver */, bOptions));
+        if (targetPkg == null) {
+            // For some broadcast action, e.g. ACTION_PACKAGE_ADDED, this method will be called
+            // many times to different targets, e.g. installer app, permission controller, other
+            // registered apps. We should filter it to avoid calling back many times for the same
+            // action. When the targetPkg is set, it sends the broadcast to specific app, e.g.
+            // installer app or null for registered apps. The callback only need to send back to the
+            // registered apps so we check the null condition here.
+            notifyPackageMonitor(action, pkg, extras, userIds, instantUserIds, broadcastAllowList);
+        }
+    }
+
+    void notifyPackageMonitor(String action, String pkg, Bundle extras, int[] userIds,
+            int[] instantUserIds, SparseArray<int[]> broadcastAllowList) {
+        mPackageMonitorCallbackHelper.notifyPackageMonitor(action, pkg, extras, userIds,
+                instantUserIds, broadcastAllowList);
+    }
+
+    void notifyResourcesChanged(boolean mediaStatus, boolean replacing,
+            @NonNull String[] pkgNames, @NonNull int[] uids) {
+        mPackageMonitorCallbackHelper.notifyResourcesChanged(mediaStatus, replacing, pkgNames,
+                uids);
     }
 
     @Override
@@ -3173,6 +3064,8 @@
                 userIds, snapshot.getPackageStates());
         mHandler.post(() -> mBroadcastHelper.sendPackageAddedForNewUsers(
                 packageName, appId, userIds, instantUserIds, dataLoaderType, broadcastAllowList));
+        mPackageMonitorCallbackHelper.notifyPackageAddedForNewUsers(packageName, appId, userIds,
+                instantUserIds, dataLoaderType, broadcastAllowList);
         if (sendBootCompleted && !ArrayUtils.isEmpty(userIds)) {
             mHandler.post(() -> {
                         for (int userId : userIds) {
@@ -4177,6 +4070,8 @@
         mHandler.post(() -> mBroadcastHelper.sendPackageChangedBroadcast(
                 packageName, dontKillApp, componentNames, packageUid, reason, userIds,
                 instantUserIds, broadcastAllowList));
+        mPackageMonitorCallbackHelper.notifyPackageChanged(packageName, dontKillApp, componentNames,
+                packageUid, reason, userIds, instantUserIds, broadcastAllowList);
     }
 
     /**
@@ -4272,7 +4167,10 @@
         final int livingUserCount = livingUsers.size();
         for (int i = 0; i < livingUserCount; i++) {
             final int userId = livingUsers.get(i).id;
-            if (mSettings.isPermissionUpgradeNeeded(userId)) {
+            final boolean isPermissionUpgradeNeeded = !Objects.equals(
+                    mPermissionManager.getDefaultPermissionGrantFingerprint(userId),
+                    Build.FINGERPRINT);
+            if (isPermissionUpgradeNeeded) {
                 grantPermissionsUserIds = ArrayUtils.appendInt(
                         grantPermissionsUserIds, userId);
             }
@@ -4280,6 +4178,7 @@
         // If we upgraded grant all default permissions before kicking off.
         for (int userId : grantPermissionsUserIds) {
             mLegacyPermissionManager.grantDefaultPermissions(userId);
+            mPermissionManager.setDefaultPermissionGrantFingerprint(Build.FINGERPRINT, userId);
         }
         if (grantPermissionsUserIds == EMPTY_INT_ARRAY) {
             // If we did not grant default permissions, we preload from this the
@@ -4382,8 +4281,9 @@
         final Computer snapshot = snapshotComputer();
         for (String packageName : apkList) {
             setSystemAppHiddenUntilInstalled(snapshot, packageName, true);
-            for (UserInfo user : mInjector.getUserManagerInternal().getUsers(false)) {
-                setSystemAppInstallState(snapshot, packageName, false, user.id);
+            final List<UserInfo> users = mInjector.getUserManagerInternal().getUsers(false);
+            for (int i = 0; i < users.size(); i++) {
+                setSystemAppInstallState(snapshot, packageName, false, users.get(i).id);
             }
         }
     }
@@ -4416,6 +4316,7 @@
             mAppsFilter.onUserDeleted(snapshotComputer(), userId);
         }
         mInstantAppRegistry.onUserRemoved(userId);
+        mPackageMonitorCallbackHelper.onUserRemoved(userId);
     }
 
     /**
@@ -4448,6 +4349,7 @@
         if (!convertedFromPreCreated || !readPermissionStateForUser(userId)) {
             mPermissionManager.onUserCreated(userId);
             mLegacyPermissionManager.grantDefaultPermissions(userId);
+            mPermissionManager.setDefaultPermissionGrantFingerprint(Build.FINGERPRINT, userId);
             mDomainVerificationManager.clearUser(userId);
         }
     }
@@ -4457,7 +4359,10 @@
             mPermissionManager.writeLegacyPermissionStateTEMP();
             mSettings.readPermissionStateForUserSyncLPr(userId);
             mPermissionManager.readLegacyPermissionStateTEMP();
-            return mSettings.isPermissionUpgradeNeeded(userId);
+            final boolean isPermissionUpgradeNeeded = !Objects.equals(
+                    mPermissionManager.getDefaultPermissionGrantFingerprint(userId),
+                    Build.FINGERPRINT);
+            return isPermissionUpgradeNeeded;
         }
     }
 
@@ -4677,6 +4582,13 @@
         }
     }
 
+    void notifyComponentUsed(@NonNull Computer snapshot, @NonNull String packageName,
+            @UserIdInt int userId, @NonNull String recentCallingPackage) {
+        PackageManagerService.this
+                .setPackageStoppedState(snapshot, packageName, false /* stopped */,
+                        userId);
+    }
+
     public class IPackageManagerImpl extends IPackageManagerBase {
 
         public IPackageManagerImpl() {
@@ -4711,11 +4623,11 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CLEAR_APP_USER_DATA)
         @Override
         public void clearApplicationUserData(final String packageName,
                 final IPackageDataObserver observer, final int userId) {
-            mContext.enforceCallingOrSelfPermission(
-                    android.Manifest.permission.CLEAR_APP_USER_DATA, null);
+            clearApplicationUserData_enforcePermission();
 
             final int callingUid = Binder.getCallingUid();
             final Computer snapshot = snapshotComputer();
@@ -4787,10 +4699,10 @@
             });
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
         @Override
         public void clearCrossProfileIntentFilters(int sourceUserId, String ownerPackage) {
-            mContext.enforceCallingOrSelfPermission(
-                    android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null);
+            clearCrossProfileIntentFilters_enforcePermission();
             final int callingUid = Binder.getCallingUid();
             final Computer snapshot = snapshotComputer();
             enforceOwnerRights(snapshot, ownerPackage, callingUid);
@@ -4802,13 +4714,13 @@
             scheduleWritePackageRestrictions(sourceUserId);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
         @Override
         public boolean removeCrossProfileIntentFilter(IntentFilter intentFilter,
                 String ownerPackage,
                 int sourceUserId,
                 int targetUserId, int flags) {
-            mContext.enforceCallingOrSelfPermission(
-                    android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null);
+            removeCrossProfileIntentFilter_enforcePermission();
             final int callingUid = Binder.getCallingUid();
             enforceOwnerRights(snapshotComputer(), ownerPackage, callingUid);
             mUserManager.enforceCrossProfileIntentFilterAccess(sourceUserId, targetUserId,
@@ -4823,7 +4735,8 @@
 
                 ArraySet<CrossProfileIntentFilter> set =
                         new ArraySet<>(resolver.filterSet());
-                for (CrossProfileIntentFilter filter : set) {
+                for (int i = 0; i < set.size(); i++) {
+                    final CrossProfileIntentFilter filter = set.valueAt(i);
                     if (IntentFilter.filterEquals(filter.mFilter, intentFilter)
                             && filter.getOwnerPackage().equals(ownerPackage)
                             && filter.getTargetUserId() == targetUserId
@@ -4976,11 +4889,11 @@
         }
 
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CLEAR_APP_CACHE)
         @Override
         public void freeStorage(final String volumeUuid, final long freeStorageSize,
                 final @StorageManager.AllocateFlags int flags, final IntentSender pi) {
-            mContext.enforceCallingOrSelfPermission(
-                    android.Manifest.permission.CLEAR_APP_CACHE, TAG);
+            freeStorage_enforcePermission();
             mHandler.post(() -> {
                 boolean success = false;
                 try {
@@ -5003,11 +4916,11 @@
             });
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.CLEAR_APP_CACHE)
         @Override
         public void freeStorageAndNotify(final String volumeUuid, final long freeStorageSize,
                 final @StorageManager.AllocateFlags int flags, final IPackageDataObserver observer) {
-            mContext.enforceCallingOrSelfPermission(
-                    android.Manifest.permission.CLEAR_APP_CACHE, null);
+            freeStorageAndNotify_enforcePermission();
             mHandler.post(() -> {
                 boolean success = false;
                 try {
@@ -5092,10 +5005,10 @@
             return token;
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.ACCESS_INSTANT_APPS)
         @Override
         public String getInstantAppAndroidId(String packageName, int userId) {
-            mContext.enforceCallingOrSelfPermission(
-                    android.Manifest.permission.ACCESS_INSTANT_APPS, "getInstantAppAndroidId");
+            getInstantAppAndroidId_enforcePermission();
             final Computer snapshot = snapshotComputer();
             snapshot.enforceCrossUserPermission(Binder.getCallingUid(), userId,
                     true /* requireFullPermission */, false /* checkShell */,
@@ -5187,16 +5100,17 @@
             return getMimeGroupInternal(snapshot, packageName, mimeGroup);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS)
         @Override
         public int getMoveStatus(int moveId) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS, null);
+            getMoveStatus_enforcePermission();
             return mMoveCallbacks.mLastStatus.get(moveId);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.GET_APP_METADATA)
         @Override
         public ParcelFileDescriptor getAppMetadataFd(String packageName, int userId) {
-            mContext.enforceCallingOrSelfPermission(GET_APP_METADATA, "getAppMetadataFd");
+            getAppMetadataFd_enforcePermission();
             final int callingUid = Binder.getCallingUid();
             final Computer snapshot = snapshotComputer();
             final PackageStateInternal ps = snapshot.getPackageStateForInstalledAndFiltered(
@@ -5317,11 +5231,10 @@
                     packageNames, userId, callingUid);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.PACKAGE_VERIFICATION_AGENT)
         @Override
         public VerifierDeviceIdentity getVerifierDeviceIdentity() throws RemoteException {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.PACKAGE_VERIFICATION_AGENT,
-                    "Only package verification agents can read the verifier device identity");
+            getVerifierDeviceIdentity_enforcePermission();
 
             synchronized (mLock) {
                 return mSettings.getVerifierDeviceIdentityLPw(mLiveComputer);
@@ -5343,10 +5256,10 @@
                     false /*direct*/, false /* retainOnUpdate */);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MAKE_UID_VISIBLE)
         @Override
         public void makeUidVisible(int recipientUid, int visibleUid) {
-            mContext.enforceCallingOrSelfPermission(
-                    android.Manifest.permission.MAKE_UID_VISIBLE, "makeUidVisible");
+            makeUidVisible_enforcePermission();
             final int callingUid = Binder.getCallingUid();
             final int recipientUserId = UserHandle.getUserId(recipientUid);
             final int visibleUserId = UserHandle.getUserId(visibleUid);
@@ -5445,9 +5358,10 @@
                     processName, uid, seinfo, pid);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MOVE_PACKAGE)
         @Override
         public int movePackage(final String packageName, final String volumeUuid) {
-            mContext.enforceCallingOrSelfPermission(Manifest.permission.MOVE_PACKAGE, null);
+            movePackage_enforcePermission();
 
             final int callingUid = Binder.getCallingUid();
             final UserHandle user = new UserHandle(UserHandle.getUserId(callingUid));
@@ -5466,9 +5380,10 @@
             return moveId;
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MOVE_PACKAGE)
         @Override
         public int movePrimaryStorage(String volumeUuid) throws RemoteException {
-            mContext.enforceCallingOrSelfPermission(Manifest.permission.MOVE_PACKAGE, null);
+            movePrimaryStorage_enforcePermission();
 
             final int realMoveId = mNextMoveId.getAndIncrement();
             final Bundle extras = new Bundle();
@@ -5656,10 +5571,10 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS)
         @Override
         public void registerMoveCallback(IPackageMoveObserver callback) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS, null);
+            registerMoveCallback_enforcePermission();
             mMoveCallbacks.register(callback);
         }
 
@@ -5761,10 +5676,11 @@
                     userId, callingPackage);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USERS)
         @Override
         public boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden,
                 int userId) {
-            mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null);
+            setApplicationHiddenSettingAsUser_enforcePermission();
             final int callingUid = Binder.getCallingUid();
             final Computer snapshot = snapshotComputer();
             snapshot.enforceCrossUserPermission(callingUid, userId, true /* requireFullPermission */,
@@ -5848,11 +5764,11 @@
             }
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.DELETE_PACKAGES)
         @Override
         public boolean setBlockUninstallForUser(String packageName, boolean blockUninstall,
                 int userId) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.DELETE_PACKAGES, null);
+            setBlockUninstallForUser_enforcePermission();
             final Computer snapshot = snapshotComputer();
             PackageStateInternal packageState = snapshot.getPackageStateInternal(packageName);
             if (packageState != null && packageState.getPkg() != null) {
@@ -5944,10 +5860,10 @@
             scheduleWritePackageRestrictions(userId);
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
         @Override
         public boolean setInstallLocation(int loc) {
-            mContext.enforceCallingOrSelfPermission(Manifest.permission.WRITE_SECURE_SETTINGS,
-                    null);
+            setInstallLocation_enforcePermission();
             if (getInstallLocation() == loc) {
                 return true;
             }
@@ -6162,8 +6078,8 @@
             final Computer snapshot = snapshotComputer();
             enforceOwnerRights(snapshot, packageName, Binder.getCallingUid());
             mimeTypes = CollectionUtils.emptyIfNull(mimeTypes);
-            for (String mimeType : mimeTypes) {
-                if (mimeType.length() > 255) {
+            for (int i = 0; i < mimeTypes.size(); i++) {
+                if (mimeTypes.get(i).length() > 255) {
                     throw new IllegalArgumentException("MIME type length exceeds 255 characters");
                 }
             }
@@ -6284,17 +6200,18 @@
                     state.userState(userId).setSplashScreenTheme(themeId));
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.INSTALL_PACKAGES)
         @Override
         public void setUpdateAvailable(String packageName, boolean updateAvailable) {
-            mContext.enforceCallingOrSelfPermission(Manifest.permission.INSTALL_PACKAGES, null);
+            setUpdateAvailable_enforcePermission();
             commitPackageStateMutation(null, packageName, state ->
                     state.setUpdateAvailable(updateAvailable));
         }
 
+        @android.annotation.EnforcePermission(android.Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS)
         @Override
         public void unregisterMoveCallback(IPackageMoveObserver callback) {
-            mContext.enforceCallingOrSelfPermission(
-                    Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS, null);
+            unregisterMoveCallback_enforcePermission();
             mMoveCallbacks.unregister(callback);
         }
 
@@ -6332,6 +6249,17 @@
         }
 
         @Override
+        public void registerPackageMonitorCallback(@NonNull IRemoteCallback callback, int userId) {
+            int uid = Binder.getCallingUid();
+            mPackageMonitorCallbackHelper.registerPackageMonitorCallback(callback, userId, uid);
+        }
+
+        @Override
+        public void unregisterPackageMonitorCallback(@NonNull IRemoteCallback callback) {
+            mPackageMonitorCallbackHelper.unregisterPackageMonitorCallback(callback);
+        }
+
+        @Override
         public void requestPackageChecksums(@NonNull String packageName, boolean includeSplits,
                 @Checksum.TypeMask int optional, @Checksum.TypeMask int required,
                 @Nullable List trustedInstallers,
@@ -6865,6 +6793,30 @@
         }
 
         @Override
+        public LegacyPermissionSettings getLegacyPermissions() {
+            synchronized (mLock) {
+                return mSettings.mPermissions;
+            }
+        }
+
+        /**
+         * Read legacy permission states for permissions migration to new permission subsystem.
+         */
+        @Override
+        public RuntimePermissionsState getLegacyPermissionsState(int userId) {
+            synchronized (mLock) {
+                return mSettings.getLegacyPermissionsState(userId);
+            }
+        }
+
+        @Override
+        public int getLegacyPermissionsVersion(@UserIdInt int userId) {
+            synchronized (mLock) {
+                return mSettings.getDefaultRuntimePermissionsVersion(userId);
+            }
+        }
+
+        @Override
         @SuppressWarnings("GuardedBy")
         public boolean isPermissionUpgradeNeeded(int userId) {
             return mSettings.isPermissionUpgradeNeeded(userId);
@@ -6959,6 +6911,16 @@
             mHandler.post(() -> PackageManagerService.this.notifyInstallObserver(packageName,
                     true /* killApp */));
         }
+
+        @Override
+        public int[] getDistractingPackageRestrictionsAsUser(
+                @NonNull String[] packageNames, int userId) {
+            final int callingUid = Binder.getCallingUid();
+            final Computer snapshot = snapshotComputer();
+            Objects.requireNonNull(packageNames, "packageNames cannot be null");
+            return mDistractingPackageHelper.getDistractingPackageRestrictionsAsUser(snapshot,
+                    packageNames, userId, callingUid);
+        }
     }
 
     private void setEnabledOverlayPackages(@UserIdInt int userId,
@@ -6991,7 +6953,9 @@
 
                 if (targetPkg.getLibraryNames() != null) {
                     // Set the overlay paths for dependencies of the shared library.
-                    for (final String libName : targetPkg.getLibraryNames()) {
+                    List<String> libraryNames = targetPkg.getLibraryNames();
+                    for (int j = 0; j < libraryNames.size(); j++) {
+                        final String libName = libraryNames.get(j);
                         ArraySet<String> modifiedDependents = null;
 
                         final SharedLibraryInfo info = computer.getSharedLibraryInfo(libName,
@@ -7005,7 +6969,8 @@
                         if (dependents == null) {
                             continue;
                         }
-                        for (final VersionedPackage dependent : dependents) {
+                        for (int k = 0; k < dependents.size(); k++) {
+                            final VersionedPackage dependent = dependents.get(k);
                             final PackageStateInternal dependentState =
                                     computer.getPackageStateInternal(dependent.getPackageName());
                             if (dependentState == null) {
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceTestParams.java b/services/core/java/com/android/server/pm/PackageManagerServiceTestParams.java
index 0ed90e4..ca57209 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceTestParams.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceTestParams.java
@@ -100,7 +100,6 @@
     public @Nullable String wearableSensingPackage;
     public ComponentName resolveComponentName;
     public ArrayMap<String, AndroidPackage> packages;
-    public boolean enableFreeCacheV2;
     public int sdkVersion;
     public File appInstallDir;
     public File appLib32InstallDir;
@@ -123,4 +122,6 @@
     public StorageEventHelper storageEventHelper;
     public Set<String> initialNonStoppedSystemPackages = new ArraySet<>();
     public boolean shouldStopSystemPackagesByDefault;
+    public FreeStorageHelper freeStorageHelper;
+    public PackageMonitorCallbackHelper packageMonitorCallbackHelper;
 }
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index 2a7ebfb..ce0e7ad 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -23,6 +23,9 @@
 import static android.content.pm.PackageManager.FLAG_PERMISSION_REVOKE_WHEN_REQUESTED;
 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.RESTRICTION_HIDE_FROM_SUGGESTIONS;
+import static android.content.pm.PackageManager.RESTRICTION_HIDE_NOTIFICATIONS;
+import static android.content.pm.PackageManager.RESTRICTION_NONE;
 
 import static com.android.server.LocalManagerRegistry.ManagerNotFoundException;
 import static com.android.server.pm.PackageManagerService.PLATFORM_PACKAGE_NAME;
@@ -216,6 +219,9 @@
         final PrintWriter pw = getOutPrintWriter();
         try {
             switch (cmd) {
+                case "help":
+                    onHelp();
+                    return 0;
                 case "path":
                     return runPath();
                 case "dump":
@@ -287,6 +293,8 @@
                     return runSuspend(false);
                 case "set-distracting-restriction":
                     return runSetDistractingRestriction();
+                case "get-distracting-restriction":
+                    return runGetDistractingRestriction();
                 case "grant":
                     return runGrantRevokePermission(true);
                 case "revoke":
@@ -311,6 +319,8 @@
                     return runCreateUser();
                 case "remove-user":
                     return runRemoveUser();
+                case "mark-guest-for-deletion":
+                    return runMarkGuestForDeletion();
                 case "rename-user":
                     return runRenameUser();
                 case "set-user-restriction":
@@ -354,6 +364,8 @@
                     return runSetSilentUpdatesPolicy();
                 case "get-app-metadata":
                     return runGetAppMetadata();
+                case "clear-package-preferred-activities":
+                    return runClearPackagePreferredActivities();
                 case "wait-for-handler":
                     return runWaitForHandler(/* forBackgroundHandler= */ false);
                 case "wait-for-background-handler":
@@ -907,27 +919,42 @@
 
     private int runListLibraries() throws RemoteException {
         final PrintWriter pw = getOutPrintWriter();
-        final List<String> list = new ArrayList<String>();
-        final String[] rawList = mInterface.getSystemSharedLibraryNames();
-        for (int i = 0; i < rawList.length; i++) {
-            list.add(rawList[i]);
+        boolean verbose = false;
+        String opt;
+        while ((opt = getNextArg()) != null) {
+            switch (opt) {
+                case "-v":
+                    verbose = true;
+                    break;
+                default:
+                    pw.println("Error: Unknown option: " + opt);
+                    return -1;
+            }
+        }
+
+        final Map<String, String> namesAndPaths = mInterface.getSystemSharedLibraryNamesAndPaths();
+        if (namesAndPaths.isEmpty()) {
+            return 0;
         }
 
         // sort by name
-        Collections.sort(list, new Comparator<String>() {
-            public int compare(String o1, String o2) {
+        final List<String> libs = new ArrayList<>(namesAndPaths.keySet());
+        Collections.sort(libs, (o1, o2) -> {
                 if (o1 == o2) return 0;
                 if (o1 == null) return -1;
                 if (o2 == null) return 1;
                 return o1.compareTo(o2);
-            }
         });
 
-        final int count = (list != null) ? list.size() : 0;
-        for (int p = 0; p < count; p++) {
-            String lib = list.get(p);
+        for (int i = 0; i < libs.size(); i++) {
+            String lib = libs.get(i);
             pw.print("library:");
-            pw.println(lib);
+            pw.print(lib);
+            if (verbose) {
+                pw.print(" path:");
+                pw.print(namesAndPaths.get(lib));
+            }
+            pw.println();
         }
         return 0;
     }
@@ -1614,8 +1641,8 @@
         // broadcast only if packageInstallerName is "android". We can't always force
         // "android" as packageIntallerName, e.g, rollback auto implies
         // "-i com.android.shell".
-        while (currentTime < endTime) {
-            if (si != null && (si.isStagedSessionReady() || si.isStagedSessionFailed())) {
+        while (si != null && currentTime < endTime) {
+            if (si.isStagedSessionReady() || si.isStagedSessionFailed()) {
                 break;
             }
             SystemClock.sleep(Math.min(endTime - currentTime, 100));
@@ -2565,6 +2592,58 @@
         }
     }
 
+    private int runGetDistractingRestriction() {
+        final PrintWriter pw = getOutPrintWriter();
+        int userId = UserHandle.USER_SYSTEM;
+        String opt;
+        while ((opt = getNextOption()) != null) {
+            switch (opt) {
+                case "--user":
+                    userId = UserHandle.parseUserArg(getNextArgRequired());
+                    break;
+                default:
+                    pw.println("Error: Unknown option: " + opt);
+                    return 1;
+            }
+        }
+
+        final List<String> packageNames = getRemainingArgs();
+        if (packageNames.isEmpty()) {
+            pw.println("Error: package name not specified");
+            return 1;
+        }
+        pw.println("Distracting restrictions state for user " + userId);
+
+        final int translatedUserId = translateUserId(userId, UserHandle.USER_NULL,
+                "get-distracting");
+        final String[] packages = packageNames.toArray(new String[]{});
+        int[] res = mPm.getDistractingPackageRestrictionsAsUser(packages, translatedUserId);
+
+        for (int i = 0; i < res.length; i++) {
+            final int state = res[i];
+            if (state == -1) {
+                pw.println(packages[i] + " not found ...");
+            } else {
+                pw.println(packages[i] + "  state: " + stateToString(state));
+            }
+        }
+
+        return 0;
+    }
+
+    private static String stateToString(@PackageManager.DistractionRestriction int flag) {
+        switch (flag) {
+            case RESTRICTION_NONE:
+                return "NONE";
+            case RESTRICTION_HIDE_FROM_SUGGESTIONS:
+                return "HIDE_FROM_SUGGESTIONS";
+            case RESTRICTION_HIDE_NOTIFICATIONS:
+                return "HIDE_NOTIFICATIONS";
+            default:
+                return "UNKNOWN";
+        }
+    }
+
     private int runSuspend(boolean suspendedState) {
         final PrintWriter pw = getOutPrintWriter();
         int userId = UserHandle.USER_SYSTEM;
@@ -3126,6 +3205,24 @@
         }
     }
 
+    private int runMarkGuestForDeletion() throws RemoteException {
+        String arg = getNextArg();
+        if (arg == null) {
+            getErrPrintWriter().println("Error: no user id specified.");
+            return 1;
+        }
+        int userId = resolveUserId(UserHandle.parseUserArg(arg));
+
+        IUserManager um = IUserManager.Stub.asInterface(
+                ServiceManager.getService(Context.USER_SERVICE));
+        if (!um.markGuestForDeletion(userId)) {
+            getErrPrintWriter().println("Error: could not mark guest for deletion");
+            return 1;
+        }
+
+        return 0;
+    }
+
     private int runRenameUser() throws RemoteException {
         String arg = getNextArg();
         if (arg == null) {
@@ -4154,6 +4251,22 @@
         return userId == UserHandle.USER_CURRENT ? ActivityManager.getCurrentUser() : userId;
     }
 
+    private int runClearPackagePreferredActivities() {
+        final PrintWriter pw = getErrPrintWriter();
+        final String packageName = getNextArg();
+        if (packageName == null) {
+            pw.println("Error: package name not specified");
+            return 1;
+        }
+        try {
+            mContext.getPackageManager().clearPackagePreferredActivities(packageName);
+            return 0;
+        } catch (Exception e) {
+            pw.println(e.toString());
+            return 1;
+        }
+    }
+
     @Override
     public void onHelp() {
         final PrintWriter pw = getOutPrintWriter();
@@ -4179,8 +4292,10 @@
         pw.println("    Options:");
         pw.println("      -f: dump the name of the .apk file containing the test package");
         pw.println("");
-        pw.println("  list libraries");
+        pw.println("  list libraries [-v]");
         pw.println("    Prints all system libraries.");
+        pw.println("    Options:");
+        pw.println("      -v: shows the location of the library in the device's filesystem");
         pw.println("");
         pw.println("  list packages [-f] [-d] [-e] [-s] [-3] [-i] [-l] [-u] [-U] ");
         pw.println("      [--show-versioncode] [--apex-only] [--factory-only]");
@@ -4381,6 +4496,9 @@
         pw.println("    Any existing flags are overwritten, which also means that if no flags are");
         pw.println("    specified then all existing flags will be cleared.");
         pw.println("");
+        pw.println("  get-distracting-restriction [--user USER_ID] PACKAGE [PACKAGE...]");
+        pw.println("    Gets the specified restriction flags of given package(s) (of the user).");
+        pw.println("");
         pw.println("  grant [--user USER_ID] PACKAGE PERMISSION");
         pw.println("  revoke [--user USER_ID] PACKAGE PERMISSION");
         pw.println("    These commands either grant or revoke permissions to apps.  The permissions");
@@ -4434,6 +4552,11 @@
         pw.println("        switch or reboot)");
         pw.println("      --wait: Wait until user is removed. Ignored if set-ephemeral-if-in-use");
         pw.println("");
+        pw.println("  mark-guest-for-deletion USER_ID");
+        pw.println("    Mark the guest user for deletion. After this, it is possible to create a");
+        pw.println("    new guest user and switch to it. This allows resetting the guest user");
+        pw.println("    without switching to another user.");
+        pw.println("");
         pw.println("  rename-user USER_ID [USER_NAME]");
         pw.println("    Rename USER_ID with USER_NAME (or null when [USER_NAME] is not set)");
         pw.println("");
@@ -4488,6 +4611,8 @@
         pw.println("      --reset: restore the installer and throttle time to the default, and");
         pw.println("        clear tracks of silent updates in the system.");
         pw.println("");
+        pw.println("  clear-package-preferred-activities <PACKAGE>");
+        pw.println("    Remove the preferred activity mappings for the given package.");
         pw.println("  wait-for-handler --timeout <MILLIS>");
         pw.println("    Wait for a given amount of time till the package manager handler finishes");
         pw.println("    handling all pending messages.");
diff --git a/services/core/java/com/android/server/pm/PackageMonitorCallbackHelper.java b/services/core/java/com/android/server/pm/PackageMonitorCallbackHelper.java
new file mode 100644
index 0000000..a771502
--- /dev/null
+++ b/services/core/java/com/android/server/pm/PackageMonitorCallbackHelper.java
@@ -0,0 +1,251 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.pm;
+
+import static com.android.server.pm.PackageManagerService.PACKAGE_SCHEME;
+
+import android.annotation.AppIdInt;
+import android.annotation.NonNull;
+import android.app.ActivityManager;
+import android.app.IActivityManager;
+import android.content.Intent;
+import android.content.pm.PackageInstaller;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IRemoteCallback;
+import android.os.Process;
+import android.os.RemoteCallbackList;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.text.TextUtils;
+import android.util.Slog;
+import android.util.SparseArray;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.util.ArrayUtils;
+
+import java.util.ArrayList;
+
+/** Helper class to handle PackageMonitorCallback and notify the registered client. This is mainly
+ * used by PackageMonitor to improve the broadcast latency. */
+class PackageMonitorCallbackHelper {
+
+    private static final boolean DEBUG = false;
+
+    @NonNull
+    private final Object mLock = new Object();
+    final IActivityManager mActivityManager = ActivityManager.getService();
+
+    final Handler mHandler;
+
+    PackageMonitorCallbackHelper(PackageManagerServiceInjector injector) {
+        mHandler = injector.getHandler();
+    }
+
+    @NonNull
+    @GuardedBy("mLock")
+    private final RemoteCallbackList<IRemoteCallback> mCallbacks = new RemoteCallbackList<>();
+
+    public void registerPackageMonitorCallback(IRemoteCallback callback, int userId, int uid) {
+        synchronized (mLock) {
+            mCallbacks.register(callback, new RegisterUser(userId, uid));
+        }
+    }
+
+    public void unregisterPackageMonitorCallback(IRemoteCallback callback) {
+        synchronized (mLock) {
+            mCallbacks.unregister(callback);
+        }
+    }
+
+    public void onUserRemoved(int userId) {
+        ArrayList<IRemoteCallback> targetUnRegisteredCallbacks = null;
+        synchronized (mLock) {
+            int registerCount = mCallbacks.getRegisteredCallbackCount();
+            for (int i = 0; i < registerCount; i++) {
+                RegisterUser registerUser =
+                        (RegisterUser) mCallbacks.getRegisteredCallbackCookie(i);
+                if (registerUser.getUserId() == userId) {
+                    IRemoteCallback callback = mCallbacks.getRegisteredCallbackItem(i);
+                    if (targetUnRegisteredCallbacks == null) {
+                        targetUnRegisteredCallbacks = new ArrayList<>();
+                    }
+                    targetUnRegisteredCallbacks.add(callback);
+                }
+            }
+        }
+        if (targetUnRegisteredCallbacks != null && targetUnRegisteredCallbacks.size() > 0) {
+            int count = targetUnRegisteredCallbacks.size();
+            for (int i = 0; i < count; i++) {
+                unregisterPackageMonitorCallback(targetUnRegisteredCallbacks.get(i));
+            }
+        }
+    }
+
+    public void notifyPackageAddedForNewUsers(String packageName,
+            @AppIdInt int appId, @NonNull int[] userIds, @NonNull int[] instantUserIds,
+            int dataLoaderType, SparseArray<int[]> broadcastAllowList) {
+        Bundle extras = new Bundle(2);
+        // Set to UID of the first user, EXTRA_UID is automatically updated in sendPackageBroadcast
+        final int uid = UserHandle.getUid(
+                (ArrayUtils.isEmpty(userIds) ? instantUserIds[0] : userIds[0]), appId);
+        extras.putInt(Intent.EXTRA_UID, uid);
+        extras.putInt(PackageInstaller.EXTRA_DATA_LOADER_TYPE, dataLoaderType);
+        notifyPackageMonitor(Intent.ACTION_PACKAGE_ADDED, packageName, extras ,
+                userIds /* userIds */, instantUserIds, broadcastAllowList);
+    }
+
+    public void notifyResourcesChanged(boolean mediaStatus, boolean replacing,
+            @NonNull String[] pkgNames, @NonNull int[] uids) {
+        Bundle extras = new Bundle();
+        extras.putStringArray(Intent.EXTRA_CHANGED_PACKAGE_LIST, pkgNames);
+        extras.putIntArray(Intent.EXTRA_CHANGED_UID_LIST, uids);
+        if (replacing) {
+            extras.putBoolean(Intent.EXTRA_REPLACING, replacing);
+        }
+        String action = mediaStatus ? Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE
+                : Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE;
+        notifyPackageMonitor(action, null /* pkg */, extras, null /* userIds */,
+                null /* instantUserIds */, null /* broadcastAllowList */);
+    }
+
+    public void notifyPackageChanged(String packageName, boolean dontKillApp,
+            ArrayList<String> componentNames, int packageUid, String reason, int[] userIds,
+            int[] instantUserIds, SparseArray<int[]> broadcastAllowList) {
+        Bundle extras = new Bundle(4);
+        extras.putString(Intent.EXTRA_CHANGED_COMPONENT_NAME, componentNames.get(0));
+        String[] nameList = new String[componentNames.size()];
+        componentNames.toArray(nameList);
+        extras.putStringArray(Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST, nameList);
+        extras.putBoolean(Intent.EXTRA_DONT_KILL_APP, dontKillApp);
+        extras.putInt(Intent.EXTRA_UID, packageUid);
+        if (reason != null) {
+            extras.putString(Intent.EXTRA_REASON, reason);
+        }
+        notifyPackageMonitor(Intent.ACTION_PACKAGE_CHANGED, packageName, extras, userIds,
+                instantUserIds, broadcastAllowList);
+    }
+
+    public void notifyPackageMonitor(String action, String pkg, Bundle extras,
+            int[] userIds, int[] instantUserIds, SparseArray<int[]> broadcastAllowList) {
+        if (!isAllowedCallbackAction(action)) {
+            return;
+        }
+        try {
+            final int[] resolvedUserIds;
+            if (userIds == null) {
+                if (mActivityManager == null) return;
+                resolvedUserIds = mActivityManager.getRunningUserIds();
+            } else {
+                resolvedUserIds = userIds;
+            }
+
+            if (ArrayUtils.isEmpty(instantUserIds)) {
+                doNotifyCallbacks(action, pkg, extras, resolvedUserIds, broadcastAllowList);
+            } else {
+                doNotifyCallbacks(action, pkg, extras, instantUserIds, broadcastAllowList);
+            }
+        } catch (RemoteException e) {
+            // do nothing
+        }
+    }
+
+    private static boolean isAllowedCallbackAction(String action) {
+        return TextUtils.equals(action, Intent.ACTION_PACKAGE_ADDED)
+                || TextUtils.equals(action, Intent.ACTION_PACKAGE_REMOVED)
+                || TextUtils.equals(action, Intent.ACTION_PACKAGE_CHANGED)
+                || TextUtils.equals(action, Intent.ACTION_UID_REMOVED)
+                || TextUtils.equals(action, Intent.ACTION_PACKAGES_SUSPENDED)
+                || TextUtils.equals(action, Intent.ACTION_PACKAGES_UNSUSPENDED)
+                || TextUtils.equals(action, Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE)
+                || TextUtils.equals(action, Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
+    }
+
+    private void doNotifyCallbacks(String action, String pkg, Bundle extras, int[] userIds,
+            SparseArray<int[]> broadcastAllowList) {
+        RemoteCallbackList<IRemoteCallback> callbacks;
+        synchronized (mLock) {
+            callbacks = mCallbacks;
+        }
+        for (int userId : userIds) {
+            final Intent intent = new Intent(action,
+                    pkg != null ? Uri.fromParts(PACKAGE_SCHEME, pkg, null) : null);
+            if (extras != null) {
+                intent.putExtras(extras);
+            }
+            int uid = intent.getIntExtra(Intent.EXTRA_UID, -1);
+            if (uid >= 0 && UserHandle.getUserId(uid) != userId) {
+                uid = UserHandle.getUid(userId, UserHandle.getAppId(uid));
+                intent.putExtra(Intent.EXTRA_UID, uid);
+            }
+            intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
+
+            final int[] allowUids =
+                    broadcastAllowList != null ? broadcastAllowList.get(userId) : new int[]{};
+
+            mHandler.post(() -> callbacks.broadcast((callback, user) -> {
+                RegisterUser registerUser = (RegisterUser) user;
+                if ((registerUser.getUserId() != UserHandle.USER_ALL) && (registerUser.getUserId()
+                        != userId)) {
+                    return;
+                }
+                int registerUid = registerUser.getUid();
+                if (broadcastAllowList != null && registerUid != Process.SYSTEM_UID
+                        && !ArrayUtils.contains(allowUids, registerUid)) {
+                    if (DEBUG) {
+                        Slog.w("PackageMonitorCallbackHelper",
+                                "Skip invoke PackageMonitorCallback for " + action + ", uid "
+                                        + registerUid);
+                    }
+                    return;
+                }
+                invokeCallback(callback, intent);
+            }));
+        }
+    }
+
+    private void invokeCallback(IRemoteCallback callback, Intent intent) {
+        try {
+            Bundle bundle = new Bundle();
+            bundle.putParcelable(
+                    PackageManager.EXTRA_PACKAGE_MONITOR_CALLBACK_RESULT, intent);
+            callback.sendResult(bundle);
+        } catch (RemoteException e) {
+            // do nothing
+        }
+    }
+
+    private final class RegisterUser {
+        int mUserId;
+        int mUid;
+
+        RegisterUser(int userId, int uid) {
+            mUid = uid;
+            mUserId = userId;
+        }
+
+        public int getUid() {
+            return mUid;
+        }
+
+        public int getUserId() {
+            return mUserId;
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java
index 3e9ccac..dee31ec 100644
--- a/services/core/java/com/android/server/pm/PackageSetting.java
+++ b/services/core/java/com/android/server/pm/PackageSetting.java
@@ -20,6 +20,7 @@
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
 
+import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.UserIdInt;
@@ -48,6 +49,7 @@
 import com.android.server.pm.permission.LegacyPermissionDataProvider;
 import com.android.server.pm.permission.LegacyPermissionState;
 import com.android.server.pm.pkg.AndroidPackage;
+import com.android.server.pm.pkg.ArchiveState;
 import com.android.server.pm.pkg.PackageState;
 import com.android.server.pm.pkg.PackageStateInternal;
 import com.android.server.pm.pkg.PackageStateUnserialized;
@@ -79,9 +81,38 @@
  * @hide
  */
 @DataClass(genGetters = true, genConstructor = false, genSetters = false, genBuilder = false)
-@DataClass.Suppress({"getSnapshot", })
+@DataClass.Suppress({"getSnapshot", "getBooleans"})
 public class PackageSetting extends SettingBase implements PackageStateInternal {
 
+    // Use a bitset to store boolean data to save memory
+    private static class Booleans {
+        @IntDef({
+                INSTALL_PERMISSION_FIXED,
+                DEFAULT_TO_DEVICE_PROTECTED_STORAGE,
+                UPDATE_AVAILABLE,
+                FORCE_QUERYABLE_OVERRIDE
+        })
+        public @interface Flags {
+        }
+        private static final int INSTALL_PERMISSION_FIXED = 1;
+        private static final int DEFAULT_TO_DEVICE_PROTECTED_STORAGE = 1 << 1;
+        private static final int UPDATE_AVAILABLE = 1 << 2;
+        private static final int FORCE_QUERYABLE_OVERRIDE = 1 << 3;
+    }
+    private int mBooleans;
+
+    private void setBoolean(@Booleans.Flags int flag, boolean value) {
+        if (value) {
+            mBooleans |= flag;
+        } else {
+            mBooleans &= ~flag;
+        }
+    }
+
+    private boolean getBoolean(@Booleans.Flags int flag) {
+        return (mBooleans & flag) != 0;
+    }
+
     /**
      * The shared user ID lets us link this object to {@link SharedUserSetting}.
      */
@@ -159,8 +190,6 @@
     @NonNull
     private PackageSignatures signatures;
 
-    private boolean installPermissionsFixed;
-
     @NonNull
     private PackageKeySetData keySetData = new PackageKeySetData();
 
@@ -171,18 +200,13 @@
     @NonNull
     private InstallSource installSource;
 
-    /** @see PackageState#getVolumeUuid()  */
+    /** @see PackageState#getVolumeUuid() */
     @Nullable
     private String volumeUuid;
 
     /** @see PackageState#getCategoryOverride() */
     private int categoryOverride = ApplicationInfo.CATEGORY_UNDEFINED;
 
-    /** @see PackageState#isUpdateAvailable() */
-    private boolean updateAvailable;
-
-    private boolean forceQueryableOverride;
-
     @NonNull
     private final PackageStateUnserialized pkgState = new PackageStateUnserialized(this);
 
@@ -258,7 +282,8 @@
         this.mRealName = realPkgName;
     }
 
-    PackageSetting(@NonNull PackageSetting original, boolean sealedSnapshot)  {
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    public PackageSetting(@NonNull PackageSetting original, boolean sealedSnapshot)  {
         super(original);
         copyPackageSetting(original, sealedSnapshot);
         if (sealedSnapshot) {
@@ -362,7 +387,7 @@
     }
 
     public PackageSetting setForceQueryableOverride(boolean forceQueryableOverride) {
-        this.forceQueryableOverride = forceQueryableOverride;
+        setBoolean(Booleans.FORCE_QUERYABLE_OVERRIDE, forceQueryableOverride);
         onChanged();
         return this;
     }
@@ -448,6 +473,7 @@
     /**
      * Notify {@link #onChanged()}  if the parameter {@code usesLibraryFiles} is different from
      * {@link #getUsesLibraryFiles()}.
+     *
      * @param usesLibraryFiles the new uses library files
      * @return {@code this}
      */
@@ -485,13 +511,20 @@
         return this;
     }
 
+    public PackageSetting setDefaultToDeviceProtectedStorage(
+            boolean defaultToDeviceProtectedStorage) {
+        setBoolean(Booleans.DEFAULT_TO_DEVICE_PROTECTED_STORAGE, defaultToDeviceProtectedStorage);
+        onChanged();
+        return this;
+    }
+
     @Override
     public boolean isExternalStorage() {
         return (getFlags() & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
     }
 
     public PackageSetting setUpdateAvailable(boolean updateAvailable) {
-        this.updateAvailable = updateAvailable;
+        setBoolean(Booleans.UPDATE_AVAILABLE, updateAvailable);
         onChanged();
         return this;
     }
@@ -583,7 +616,7 @@
     }
 
     public PackageSetting setInstallPermissionsFixed(boolean installPermissionsFixed) {
-        this.installPermissionsFixed = installPermissionsFixed;
+        setBoolean(Booleans.INSTALL_PERMISSION_FIXED, installPermissionsFixed);
         return this;
     }
 
@@ -633,6 +666,7 @@
 
     public void copyPackageSetting(PackageSetting other, boolean sealedSnapshot) {
         super.copySettingBase(other);
+        mBooleans = other.mBooleans;
         mSharedUserAppId = other.mSharedUserAppId;
         mLoadingProgress = other.mLoadingProgress;
         mLoadingCompletedTime = other.mLoadingCompletedTime;
@@ -650,13 +684,10 @@
         lastUpdateTime = other.lastUpdateTime;
         versionCode = other.versionCode;
         signatures = other.signatures;
-        installPermissionsFixed = other.installPermissionsFixed;
         keySetData = new PackageKeySetData(other.keySetData);
         installSource = other.installSource;
         volumeUuid = other.volumeUuid;
         categoryOverride = other.categoryOverride;
-        updateAvailable = other.updateAvailable;
-        forceQueryableOverride = other.forceQueryableOverride;
         mDomainSetId = other.mDomainSetId;
         mAppMetadataFilePath = other.mAppMetadataFilePath;
 
@@ -875,7 +906,7 @@
             ArraySet<String> enabledComponents, ArraySet<String> disabledComponents,
             int installReason, int uninstallReason,
             String harmfulAppWarning, String splashScreenTheme,
-            long firstInstallTime, int aspectRatio) {
+            long firstInstallTime, int aspectRatio, ArchiveState archiveState) {
         modifyUserState(userId)
                 .setSuspendParams(suspendParams)
                 .setCeDataInode(ceDataInode)
@@ -895,7 +926,8 @@
                 .setHarmfulAppWarning(harmfulAppWarning)
                 .setSplashScreenTheme(splashScreenTheme)
                 .setFirstInstallTimeMillis(firstInstallTime)
-                .setMinAspectRatio(aspectRatio);
+                .setMinAspectRatio(aspectRatio)
+                .setArchiveState(archiveState);
         onChanged();
     }
 
@@ -913,7 +945,8 @@
                         ? null : otherState.getDisabledComponentsNoCopy().untrackedStorage(),
                 otherState.getInstallReason(), otherState.getUninstallReason(),
                 otherState.getHarmfulAppWarning(), otherState.getSplashScreenTheme(),
-                otherState.getFirstInstallTimeMillis(), otherState.getMinAspectRatio());
+                otherState.getFirstInstallTimeMillis(), otherState.getMinAspectRatio(),
+                otherState.getArchiveState());
     }
 
     WatchedArraySet<String> getEnabledComponents(int userId) {
@@ -1108,10 +1141,39 @@
                     state.getLastDisableAppCaller());
             proto.write(PackageProto.UserInfoProto.FIRST_INSTALL_TIME_MS,
                     state.getFirstInstallTimeMillis());
+            writeArchiveState(proto, state.getArchiveState());
             proto.end(userToken);
         }
     }
 
+    private static void writeArchiveState(ProtoOutputStream proto, ArchiveState archiveState) {
+        if (archiveState == null) {
+            return;
+        }
+        long archiveStateToken = proto.start(PackageProto.UserInfoProto.ARCHIVE_STATE);
+        for (ArchiveState.ArchiveActivityInfo activityInfo : archiveState.getActivityInfos()) {
+            long activityInfoToken = proto.start(
+                    PackageProto.UserInfoProto.ArchiveState.ACTIVITY_INFOS);
+            proto.write(PackageProto.UserInfoProto.ArchiveState.ArchiveActivityInfo.TITLE,
+                    activityInfo.getTitle());
+            proto.write(
+                    PackageProto.UserInfoProto.ArchiveState.ArchiveActivityInfo.ICON_BITMAP_PATH,
+                    activityInfo.getIconBitmap().toAbsolutePath().toString());
+            proto.write(
+                    PackageProto
+                            .UserInfoProto
+                            .ArchiveState
+                            .ArchiveActivityInfo
+                            .MONOCHROME_ICON_BITMAP_PATH,
+                    activityInfo.getMonochromeIconBitmap().toAbsolutePath().toString());
+            proto.end(activityInfoToken);
+        }
+
+        proto.write(PackageProto.UserInfoProto.ArchiveState.INSTALLER_TITLE,
+                archiveState.getInstallerTitle());
+        proto.end(archiveStateToken);
+    }
+
     /**
      * @see #mPath
      */
@@ -1165,8 +1227,11 @@
     }
 
     public PackageSetting setLoadingProgress(float progress) {
-        mLoadingProgress = progress;
-        onChanged();
+        // To prevent race conditions, we don't allow progress to ever go down
+        if (mLoadingProgress < progress) {
+            mLoadingProgress = progress;
+            onChanged();
+        }
         return this;
     }
 
@@ -1246,7 +1311,7 @@
     @NonNull
     @Override
     public List<SharedLibrary> getSharedLibraryDependencies() {
-        return (List<SharedLibrary>) (List<?>) pkgState.getUsesLibraryInfos();
+        return Collections.unmodifiableList(pkgState.getUsesLibraryInfos());
     }
 
     @NonNull
@@ -1258,7 +1323,7 @@
     @NonNull
     @Override
     public List<String> getUsesLibraryFiles() {
-        return pkgState.getUsesLibraryFiles();
+        return Collections.unmodifiableList(pkgState.getUsesLibraryFiles());
     }
 
     @NonNull
@@ -1438,6 +1503,32 @@
         return getAndroidPackage() != null && getAndroidPackage().isApex();
     }
 
+    @Override
+    public boolean isForceQueryableOverride() {
+        return getBoolean(Booleans.FORCE_QUERYABLE_OVERRIDE);
+    }
+
+    /**
+     * @see PackageState#isUpdateAvailable()
+     */
+    @Override
+    public boolean isUpdateAvailable() {
+        return getBoolean(Booleans.UPDATE_AVAILABLE);
+    }
+
+    @Override
+    public boolean isInstallPermissionsFixed() {
+        return getBoolean(Booleans.INSTALL_PERMISSION_FIXED);
+    }
+
+    /**
+     * @see PackageState#isDefaultToDeviceProtectedStorage()
+     */
+    @Override
+    public boolean isDefaultToDeviceProtectedStorage() {
+        return getBoolean(Booleans.DEFAULT_TO_DEVICE_PROTECTED_STORAGE);
+    }
+
 
 
     // Code below generated by codegen v1.0.23.
@@ -1540,11 +1631,6 @@
     }
 
     @DataClass.Generated.Member
-    public boolean isInstallPermissionsFixed() {
-        return installPermissionsFixed;
-    }
-
-    @DataClass.Generated.Member
     public @NonNull PackageKeySetData getKeySetData() {
         return keySetData;
     }
@@ -1570,19 +1656,6 @@
         return categoryOverride;
     }
 
-    /**
-     * @see PackageState#isUpdateAvailable()
-     */
-    @DataClass.Generated.Member
-    public boolean isUpdateAvailable() {
-        return updateAvailable;
-    }
-
-    @DataClass.Generated.Member
-    public boolean isForceQueryableOverride() {
-        return forceQueryableOverride;
-    }
-
     @DataClass.Generated.Member
     public @NonNull PackageStateUnserialized getPkgState() {
         return pkgState;
@@ -1599,10 +1672,10 @@
     }
 
     @DataClass.Generated(
-            time = 1680917079522L,
+            time = 1691185420362L,
             codegenVersion = "1.0.23",
             sourceFile = "frameworks/base/services/core/java/com/android/server/pm/PackageSetting.java",
-            inputSignatures = "private  int mSharedUserAppId\nprivate @android.annotation.Nullable java.util.Map<java.lang.String,java.util.Set<java.lang.String>> mimeGroups\nprivate @java.lang.Deprecated @android.annotation.Nullable java.util.Set<java.lang.String> mOldCodePaths\nprivate @android.annotation.Nullable java.lang.String[] usesSdkLibraries\nprivate @android.annotation.Nullable long[] usesSdkLibrariesVersionsMajor\nprivate @android.annotation.Nullable java.lang.String[] usesStaticLibraries\nprivate @android.annotation.Nullable long[] usesStaticLibrariesVersions\nprivate @android.annotation.Nullable @java.lang.Deprecated java.lang.String legacyNativeLibraryPath\nprivate @android.annotation.NonNull java.lang.String mName\nprivate @android.annotation.Nullable java.lang.String mRealName\nprivate  int mAppId\nprivate @android.annotation.Nullable com.android.server.pm.parsing.pkg.AndroidPackageInternal pkg\nprivate @android.annotation.NonNull java.io.File mPath\nprivate @android.annotation.NonNull java.lang.String mPathString\nprivate  float mLoadingProgress\nprivate  long mLoadingCompletedTime\nprivate @android.annotation.Nullable java.lang.String mPrimaryCpuAbi\nprivate @android.annotation.Nullable java.lang.String mSecondaryCpuAbi\nprivate @android.annotation.Nullable java.lang.String mCpuAbiOverride\nprivate  long mLastModifiedTime\nprivate  long lastUpdateTime\nprivate  long versionCode\nprivate @android.annotation.NonNull com.android.server.pm.PackageSignatures signatures\nprivate  boolean installPermissionsFixed\nprivate @android.annotation.NonNull com.android.server.pm.PackageKeySetData keySetData\nprivate final @android.annotation.NonNull android.util.SparseArray<com.android.server.pm.pkg.PackageUserStateImpl> mUserStates\nprivate @android.annotation.NonNull com.android.server.pm.InstallSource installSource\nprivate @android.annotation.Nullable java.lang.String volumeUuid\nprivate  int categoryOverride\nprivate  boolean updateAvailable\nprivate  boolean forceQueryableOverride\nprivate final @android.annotation.NonNull com.android.server.pm.pkg.PackageStateUnserialized pkgState\nprivate @android.annotation.NonNull java.util.UUID mDomainSetId\nprivate @android.annotation.Nullable java.lang.String mAppMetadataFilePath\nprivate final @android.annotation.NonNull com.android.server.utils.SnapshotCache<com.android.server.pm.PackageSetting> mSnapshot\nprivate  com.android.server.utils.SnapshotCache<com.android.server.pm.PackageSetting> makeCache()\npublic  com.android.server.pm.PackageSetting snapshot()\npublic  void dumpDebug(android.util.proto.ProtoOutputStream,long,java.util.List<android.content.pm.UserInfo>,com.android.server.pm.permission.LegacyPermissionDataProvider)\npublic  com.android.server.pm.PackageSetting setAppId(int)\npublic  com.android.server.pm.PackageSetting setCpuAbiOverride(java.lang.String)\npublic  com.android.server.pm.PackageSetting setFirstInstallTimeFromReplaced(com.android.server.pm.pkg.PackageStateInternal,int[])\npublic  com.android.server.pm.PackageSetting setFirstInstallTime(long,int)\npublic  com.android.server.pm.PackageSetting setForceQueryableOverride(boolean)\npublic  com.android.server.pm.PackageSetting setInstallerPackage(java.lang.String,int)\npublic  com.android.server.pm.PackageSetting setUpdateOwnerPackage(java.lang.String)\npublic  com.android.server.pm.PackageSetting setInstallSource(com.android.server.pm.InstallSource)\n  com.android.server.pm.PackageSetting removeInstallerPackage(java.lang.String)\npublic  com.android.server.pm.PackageSetting setIsOrphaned(boolean)\npublic  com.android.server.pm.PackageSetting setKeySetData(com.android.server.pm.PackageKeySetData)\npublic  com.android.server.pm.PackageSetting setLastModifiedTime(long)\npublic  com.android.server.pm.PackageSetting setLastUpdateTime(long)\npublic  com.android.server.pm.PackageSetting setLongVersionCode(long)\npublic  boolean setMimeGroup(java.lang.String,android.util.ArraySet<java.lang.String>)\npublic  com.android.server.pm.PackageSetting setPkg(com.android.server.pm.pkg.AndroidPackage)\npublic  com.android.server.pm.PackageSetting setPkgStateLibraryFiles(java.util.Collection<java.lang.String>)\npublic  com.android.server.pm.PackageSetting setPrimaryCpuAbi(java.lang.String)\npublic  com.android.server.pm.PackageSetting setSecondaryCpuAbi(java.lang.String)\npublic  com.android.server.pm.PackageSetting setSignatures(com.android.server.pm.PackageSignatures)\npublic  com.android.server.pm.PackageSetting setVolumeUuid(java.lang.String)\npublic @java.lang.Override boolean isExternalStorage()\npublic  com.android.server.pm.PackageSetting setUpdateAvailable(boolean)\npublic  void setSharedUserAppId(int)\npublic @java.lang.Override int getSharedUserAppId()\npublic @java.lang.Override boolean hasSharedUser()\npublic @java.lang.Override java.lang.String toString()\nprotected  void copyMimeGroups(java.util.Map<java.lang.String,java.util.Set<java.lang.String>>)\npublic  void updateFrom(com.android.server.pm.PackageSetting)\n  com.android.server.pm.PackageSetting updateMimeGroups(java.util.Set<java.lang.String>)\npublic @java.lang.Deprecated @java.lang.Override com.android.server.pm.permission.LegacyPermissionState getLegacyPermissionState()\npublic  com.android.server.pm.PackageSetting setInstallPermissionsFixed(boolean)\npublic  boolean isPrivileged()\npublic  boolean isOem()\npublic  boolean isVendor()\npublic  boolean isProduct()\npublic @java.lang.Override boolean isRequiredForSystemUser()\npublic  boolean isSystemExt()\npublic  boolean isOdm()\npublic  boolean isSystem()\npublic  android.content.pm.SigningDetails getSigningDetails()\npublic  com.android.server.pm.PackageSetting setSigningDetails(android.content.pm.SigningDetails)\npublic  void copyPackageSetting(com.android.server.pm.PackageSetting,boolean)\n @com.android.internal.annotations.VisibleForTesting com.android.server.pm.pkg.PackageUserStateImpl modifyUserState(int)\npublic  com.android.server.pm.pkg.PackageUserStateImpl getOrCreateUserState(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateInternal readUserState(int)\n  void setEnabled(int,int,java.lang.String)\n  int getEnabled(int)\n  void setInstalled(boolean,int)\n  boolean getInstalled(int)\n  int getInstallReason(int)\n  void setInstallReason(int,int)\n  int getUninstallReason(int)\n  void setUninstallReason(int,int)\n @android.annotation.NonNull android.content.pm.overlay.OverlayPaths getOverlayPaths(int)\n  boolean setOverlayPathsForLibrary(java.lang.String,android.content.pm.overlay.OverlayPaths,int)\n  boolean isAnyInstalled(int[])\n  int[] queryInstalledUsers(int[],boolean)\n  long getCeDataInode(int)\n  void setCeDataInode(long,int)\n  boolean getStopped(int)\n  void setStopped(boolean,int)\n  boolean getNotLaunched(int)\n  void setNotLaunched(boolean,int)\n  boolean getHidden(int)\n  void setHidden(boolean,int)\n  int getDistractionFlags(int)\n  void setDistractionFlags(int,int)\npublic  boolean getInstantApp(int)\n  void setInstantApp(boolean,int)\n  boolean getVirtualPreload(int)\n  void setVirtualPreload(boolean,int)\n  void setUserState(int,long,int,boolean,boolean,boolean,boolean,int,android.util.ArrayMap<java.lang.String,com.android.server.pm.pkg.SuspendParams>,boolean,boolean,java.lang.String,android.util.ArraySet<java.lang.String>,android.util.ArraySet<java.lang.String>,int,int,java.lang.String,java.lang.String,long)\n  void setUserState(int,com.android.server.pm.pkg.PackageUserStateInternal)\n  com.android.server.utils.WatchedArraySet<java.lang.String> getEnabledComponents(int)\n  com.android.server.utils.WatchedArraySet<java.lang.String> getDisabledComponents(int)\n  void setEnabledComponents(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n  void setDisabledComponents(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n  void setEnabledComponentsCopy(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n  void setDisabledComponentsCopy(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n  com.android.server.pm.pkg.PackageUserStateImpl modifyUserStateComponents(int,boolean,boolean)\n  void addDisabledComponent(java.lang.String,int)\n  void addEnabledComponent(java.lang.String,int)\n  boolean enableComponentLPw(java.lang.String,int)\n  boolean disableComponentLPw(java.lang.String,int)\n  boolean restoreComponentLPw(java.lang.String,int)\n  int getCurrentEnabledStateLPr(java.lang.String,int)\n  void removeUser(int)\npublic  int[] getNotInstalledUserIds()\n  void writePackageUserPermissionsProto(android.util.proto.ProtoOutputStream,long,java.util.List<android.content.pm.UserInfo>,com.android.server.pm.permission.LegacyPermissionDataProvider)\nprotected  void writeUsersInfoToProto(android.util.proto.ProtoOutputStream,long)\n  com.android.server.pm.PackageSetting setPath(java.io.File)\npublic @com.android.internal.annotations.VisibleForTesting boolean overrideNonLocalizedLabelAndIcon(android.content.ComponentName,java.lang.String,java.lang.Integer,int)\npublic  void resetOverrideComponentLabelIcon(int)\npublic @android.annotation.Nullable java.lang.String getSplashScreenTheme(int)\npublic  boolean isIncremental()\npublic  boolean isLoading()\npublic  com.android.server.pm.PackageSetting setLoadingProgress(float)\npublic  com.android.server.pm.PackageSetting setLoadingCompletedTime(long)\npublic  com.android.server.pm.PackageSetting setAppMetadataFilePath(java.lang.String)\npublic @android.annotation.NonNull @java.lang.Override long getVersionCode()\npublic @android.annotation.Nullable @java.lang.Override java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getMimeGroups()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String getPackageName()\npublic @android.annotation.Nullable @java.lang.Override com.android.server.pm.pkg.AndroidPackage getAndroidPackage()\npublic @android.annotation.NonNull android.content.pm.SigningInfo getSigningInfo()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String[] getUsesSdkLibraries()\npublic @android.annotation.NonNull @java.lang.Override long[] getUsesSdkLibrariesVersionsMajor()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String[] getUsesStaticLibraries()\npublic @android.annotation.NonNull @java.lang.Override long[] getUsesStaticLibrariesVersions()\npublic @android.annotation.NonNull @java.lang.Override java.util.List<com.android.server.pm.pkg.SharedLibrary> getSharedLibraryDependencies()\npublic @android.annotation.NonNull com.android.server.pm.PackageSetting addUsesLibraryInfo(android.content.pm.SharedLibraryInfo)\npublic @android.annotation.NonNull @java.lang.Override java.util.List<java.lang.String> getUsesLibraryFiles()\npublic @android.annotation.NonNull com.android.server.pm.PackageSetting addUsesLibraryFile(java.lang.String)\npublic @java.lang.Override boolean isHiddenUntilInstalled()\npublic @android.annotation.NonNull @java.lang.Override long[] getLastPackageUsageTime()\npublic @java.lang.Override boolean isUpdatedSystemApp()\npublic @java.lang.Override boolean isApkInUpdatedApex()\npublic @android.annotation.Nullable @java.lang.Override java.lang.String getApexModuleName()\npublic  com.android.server.pm.PackageSetting setDomainSetId(java.util.UUID)\npublic  com.android.server.pm.PackageSetting setCategoryOverride(int)\npublic  com.android.server.pm.PackageSetting setLegacyNativeLibraryPath(java.lang.String)\npublic  com.android.server.pm.PackageSetting setMimeGroups(java.util.Map<java.lang.String,java.util.Set<java.lang.String>>)\npublic  com.android.server.pm.PackageSetting setOldCodePaths(java.util.Set<java.lang.String>)\npublic  com.android.server.pm.PackageSetting setUsesSdkLibraries(java.lang.String[])\npublic  com.android.server.pm.PackageSetting setUsesSdkLibrariesVersionsMajor(long[])\npublic  com.android.server.pm.PackageSetting setUsesStaticLibraries(java.lang.String[])\npublic  com.android.server.pm.PackageSetting setUsesStaticLibrariesVersions(long[])\npublic  com.android.server.pm.PackageSetting setApexModuleName(java.lang.String)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageStateUnserialized getTransientState()\npublic @android.annotation.NonNull android.util.SparseArray<? extends PackageUserStateInternal> getUserStates()\npublic  com.android.server.pm.PackageSetting addMimeTypes(java.lang.String,java.util.Set<java.lang.String>)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageUserState getStateForUser(android.os.UserHandle)\npublic @android.annotation.Nullable java.lang.String getPrimaryCpuAbi()\npublic @android.annotation.Nullable java.lang.String getSecondaryCpuAbi()\npublic @android.annotation.Nullable @java.lang.Override java.lang.String getSeInfo()\npublic @android.annotation.Nullable java.lang.String getPrimaryCpuAbiLegacy()\npublic @android.annotation.Nullable java.lang.String getSecondaryCpuAbiLegacy()\npublic @android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy @java.lang.Override int getHiddenApiEnforcementPolicy()\npublic @java.lang.Override boolean isApex()\nclass PackageSetting extends com.android.server.pm.SettingBase implements [com.android.server.pm.pkg.PackageStateInternal]\n@com.android.internal.util.DataClass(genGetters=true, genConstructor=false, genSetters=false, genBuilder=false)")
+            inputSignatures = "private  int mBooleans\nprivate  int mSharedUserAppId\nprivate @android.annotation.Nullable java.util.Map<java.lang.String,java.util.Set<java.lang.String>> mimeGroups\nprivate @java.lang.Deprecated @android.annotation.Nullable java.util.Set<java.lang.String> mOldCodePaths\nprivate @android.annotation.Nullable java.lang.String[] usesSdkLibraries\nprivate @android.annotation.Nullable long[] usesSdkLibrariesVersionsMajor\nprivate @android.annotation.Nullable java.lang.String[] usesStaticLibraries\nprivate @android.annotation.Nullable long[] usesStaticLibrariesVersions\nprivate @android.annotation.Nullable @java.lang.Deprecated java.lang.String legacyNativeLibraryPath\nprivate @android.annotation.NonNull java.lang.String mName\nprivate @android.annotation.Nullable java.lang.String mRealName\nprivate  int mAppId\nprivate @android.annotation.Nullable com.android.server.pm.parsing.pkg.AndroidPackageInternal pkg\nprivate @android.annotation.NonNull java.io.File mPath\nprivate @android.annotation.NonNull java.lang.String mPathString\nprivate  float mLoadingProgress\nprivate  long mLoadingCompletedTime\nprivate @android.annotation.Nullable java.lang.String mPrimaryCpuAbi\nprivate @android.annotation.Nullable java.lang.String mSecondaryCpuAbi\nprivate @android.annotation.Nullable java.lang.String mCpuAbiOverride\nprivate  long mLastModifiedTime\nprivate  long lastUpdateTime\nprivate  long versionCode\nprivate @android.annotation.NonNull com.android.server.pm.PackageSignatures signatures\nprivate @android.annotation.NonNull com.android.server.pm.PackageKeySetData keySetData\nprivate final @android.annotation.NonNull android.util.SparseArray<com.android.server.pm.pkg.PackageUserStateImpl> mUserStates\nprivate @android.annotation.NonNull com.android.server.pm.InstallSource installSource\nprivate @android.annotation.Nullable java.lang.String volumeUuid\nprivate  int categoryOverride\nprivate final @android.annotation.NonNull com.android.server.pm.pkg.PackageStateUnserialized pkgState\nprivate @android.annotation.NonNull java.util.UUID mDomainSetId\nprivate @android.annotation.Nullable java.lang.String mAppMetadataFilePath\nprivate final @android.annotation.NonNull com.android.server.utils.SnapshotCache<com.android.server.pm.PackageSetting> mSnapshot\nprivate  void setBoolean(int,boolean)\nprivate  boolean getBoolean(int)\nprivate  com.android.server.utils.SnapshotCache<com.android.server.pm.PackageSetting> makeCache()\npublic  com.android.server.pm.PackageSetting snapshot()\npublic  void dumpDebug(android.util.proto.ProtoOutputStream,long,java.util.List<android.content.pm.UserInfo>,com.android.server.pm.permission.LegacyPermissionDataProvider)\npublic  com.android.server.pm.PackageSetting setAppId(int)\npublic  com.android.server.pm.PackageSetting setCpuAbiOverride(java.lang.String)\npublic  com.android.server.pm.PackageSetting setFirstInstallTimeFromReplaced(com.android.server.pm.pkg.PackageStateInternal,int[])\npublic  com.android.server.pm.PackageSetting setFirstInstallTime(long,int)\npublic  com.android.server.pm.PackageSetting setForceQueryableOverride(boolean)\npublic  com.android.server.pm.PackageSetting setInstallerPackage(java.lang.String,int)\npublic  com.android.server.pm.PackageSetting setUpdateOwnerPackage(java.lang.String)\npublic  com.android.server.pm.PackageSetting setInstallSource(com.android.server.pm.InstallSource)\n  com.android.server.pm.PackageSetting removeInstallerPackage(java.lang.String)\npublic  com.android.server.pm.PackageSetting setIsOrphaned(boolean)\npublic  com.android.server.pm.PackageSetting setKeySetData(com.android.server.pm.PackageKeySetData)\npublic  com.android.server.pm.PackageSetting setLastModifiedTime(long)\npublic  com.android.server.pm.PackageSetting setLastUpdateTime(long)\npublic  com.android.server.pm.PackageSetting setLongVersionCode(long)\npublic  boolean setMimeGroup(java.lang.String,android.util.ArraySet<java.lang.String>)\npublic  com.android.server.pm.PackageSetting setPkg(com.android.server.pm.pkg.AndroidPackage)\npublic  com.android.server.pm.PackageSetting setPkgStateLibraryFiles(java.util.Collection<java.lang.String>)\npublic  com.android.server.pm.PackageSetting setPrimaryCpuAbi(java.lang.String)\npublic  com.android.server.pm.PackageSetting setSecondaryCpuAbi(java.lang.String)\npublic  com.android.server.pm.PackageSetting setSignatures(com.android.server.pm.PackageSignatures)\npublic  com.android.server.pm.PackageSetting setVolumeUuid(java.lang.String)\npublic  com.android.server.pm.PackageSetting setDefaultToDeviceProtectedStorage(boolean)\npublic @java.lang.Override boolean isExternalStorage()\npublic  com.android.server.pm.PackageSetting setUpdateAvailable(boolean)\npublic  void setSharedUserAppId(int)\npublic @java.lang.Override int getSharedUserAppId()\npublic @java.lang.Override boolean hasSharedUser()\npublic @java.lang.Override java.lang.String toString()\nprotected  void copyMimeGroups(java.util.Map<java.lang.String,java.util.Set<java.lang.String>>)\npublic  void updateFrom(com.android.server.pm.PackageSetting)\n  com.android.server.pm.PackageSetting updateMimeGroups(java.util.Set<java.lang.String>)\npublic @java.lang.Deprecated @java.lang.Override com.android.server.pm.permission.LegacyPermissionState getLegacyPermissionState()\npublic  com.android.server.pm.PackageSetting setInstallPermissionsFixed(boolean)\npublic  boolean isPrivileged()\npublic  boolean isOem()\npublic  boolean isVendor()\npublic  boolean isProduct()\npublic @java.lang.Override boolean isRequiredForSystemUser()\npublic  boolean isSystemExt()\npublic  boolean isOdm()\npublic  boolean isSystem()\npublic  android.content.pm.SigningDetails getSigningDetails()\npublic  com.android.server.pm.PackageSetting setSigningDetails(android.content.pm.SigningDetails)\npublic  void copyPackageSetting(com.android.server.pm.PackageSetting,boolean)\n @com.android.internal.annotations.VisibleForTesting com.android.server.pm.pkg.PackageUserStateImpl modifyUserState(int)\npublic  com.android.server.pm.pkg.PackageUserStateImpl getOrCreateUserState(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateInternal readUserState(int)\n  void setEnabled(int,int,java.lang.String)\n  int getEnabled(int)\n  void setInstalled(boolean,int)\n  boolean getInstalled(int)\n  int getInstallReason(int)\n  void setInstallReason(int,int)\n  int getUninstallReason(int)\n  void setUninstallReason(int,int)\n @android.annotation.NonNull android.content.pm.overlay.OverlayPaths getOverlayPaths(int)\n  boolean setOverlayPathsForLibrary(java.lang.String,android.content.pm.overlay.OverlayPaths,int)\n  boolean isAnyInstalled(int[])\n  int[] queryInstalledUsers(int[],boolean)\n  long getCeDataInode(int)\n  void setCeDataInode(long,int)\n  boolean getStopped(int)\n  void setStopped(boolean,int)\n  boolean getNotLaunched(int)\n  void setNotLaunched(boolean,int)\n  boolean getHidden(int)\n  void setHidden(boolean,int)\n  int getDistractionFlags(int)\n  void setDistractionFlags(int,int)\npublic  boolean getInstantApp(int)\n  void setInstantApp(boolean,int)\n  boolean getVirtualPreload(int)\n  void setVirtualPreload(boolean,int)\n  void setUserState(int,long,int,boolean,boolean,boolean,boolean,int,android.util.ArrayMap<java.lang.String,com.android.server.pm.pkg.SuspendParams>,boolean,boolean,java.lang.String,android.util.ArraySet<java.lang.String>,android.util.ArraySet<java.lang.String>,int,int,java.lang.String,java.lang.String,long,int,com.android.server.pm.pkg.ArchiveState)\n  void setUserState(int,com.android.server.pm.pkg.PackageUserStateInternal)\n  com.android.server.utils.WatchedArraySet<java.lang.String> getEnabledComponents(int)\n  com.android.server.utils.WatchedArraySet<java.lang.String> getDisabledComponents(int)\n  void setEnabledComponents(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n  void setDisabledComponents(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n  void setEnabledComponentsCopy(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n  void setDisabledComponentsCopy(com.android.server.utils.WatchedArraySet<java.lang.String>,int)\n  com.android.server.pm.pkg.PackageUserStateImpl modifyUserStateComponents(int,boolean,boolean)\n  void addDisabledComponent(java.lang.String,int)\n  void addEnabledComponent(java.lang.String,int)\n  boolean enableComponentLPw(java.lang.String,int)\n  boolean disableComponentLPw(java.lang.String,int)\n  boolean restoreComponentLPw(java.lang.String,int)\n  int getCurrentEnabledStateLPr(java.lang.String,int)\n  void removeUser(int)\npublic  int[] getNotInstalledUserIds()\n  void writePackageUserPermissionsProto(android.util.proto.ProtoOutputStream,long,java.util.List<android.content.pm.UserInfo>,com.android.server.pm.permission.LegacyPermissionDataProvider)\nprotected  void writeUsersInfoToProto(android.util.proto.ProtoOutputStream,long)\nprivate static  void writeArchiveState(android.util.proto.ProtoOutputStream,com.android.server.pm.pkg.ArchiveState)\n  com.android.server.pm.PackageSetting setPath(java.io.File)\npublic @com.android.internal.annotations.VisibleForTesting boolean overrideNonLocalizedLabelAndIcon(android.content.ComponentName,java.lang.String,java.lang.Integer,int)\npublic  void resetOverrideComponentLabelIcon(int)\npublic @android.annotation.Nullable java.lang.String getSplashScreenTheme(int)\npublic  boolean isIncremental()\npublic  boolean isLoading()\npublic  com.android.server.pm.PackageSetting setLoadingProgress(float)\npublic  com.android.server.pm.PackageSetting setLoadingCompletedTime(long)\npublic  com.android.server.pm.PackageSetting setAppMetadataFilePath(java.lang.String)\npublic @android.annotation.NonNull @java.lang.Override long getVersionCode()\npublic @android.annotation.Nullable @java.lang.Override java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getMimeGroups()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String getPackageName()\npublic @android.annotation.Nullable @java.lang.Override com.android.server.pm.pkg.AndroidPackage getAndroidPackage()\npublic @android.annotation.NonNull android.content.pm.SigningInfo getSigningInfo()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String[] getUsesSdkLibraries()\npublic @android.annotation.NonNull @java.lang.Override long[] getUsesSdkLibrariesVersionsMajor()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String[] getUsesStaticLibraries()\npublic @android.annotation.NonNull @java.lang.Override long[] getUsesStaticLibrariesVersions()\npublic @android.annotation.NonNull @java.lang.Override java.util.List<com.android.server.pm.pkg.SharedLibrary> getSharedLibraryDependencies()\npublic @android.annotation.NonNull com.android.server.pm.PackageSetting addUsesLibraryInfo(android.content.pm.SharedLibraryInfo)\npublic @android.annotation.NonNull @java.lang.Override java.util.List<java.lang.String> getUsesLibraryFiles()\npublic @android.annotation.NonNull com.android.server.pm.PackageSetting addUsesLibraryFile(java.lang.String)\npublic @java.lang.Override boolean isHiddenUntilInstalled()\npublic @android.annotation.NonNull @java.lang.Override long[] getLastPackageUsageTime()\npublic @java.lang.Override boolean isUpdatedSystemApp()\npublic @java.lang.Override boolean isApkInUpdatedApex()\npublic @android.annotation.Nullable @java.lang.Override java.lang.String getApexModuleName()\npublic  com.android.server.pm.PackageSetting setDomainSetId(java.util.UUID)\npublic  com.android.server.pm.PackageSetting setCategoryOverride(int)\npublic  com.android.server.pm.PackageSetting setLegacyNativeLibraryPath(java.lang.String)\npublic  com.android.server.pm.PackageSetting setMimeGroups(java.util.Map<java.lang.String,java.util.Set<java.lang.String>>)\npublic  com.android.server.pm.PackageSetting setOldCodePaths(java.util.Set<java.lang.String>)\npublic  com.android.server.pm.PackageSetting setUsesSdkLibraries(java.lang.String[])\npublic  com.android.server.pm.PackageSetting setUsesSdkLibrariesVersionsMajor(long[])\npublic  com.android.server.pm.PackageSetting setUsesStaticLibraries(java.lang.String[])\npublic  com.android.server.pm.PackageSetting setUsesStaticLibrariesVersions(long[])\npublic  com.android.server.pm.PackageSetting setApexModuleName(java.lang.String)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageStateUnserialized getTransientState()\npublic @android.annotation.NonNull android.util.SparseArray<? extends PackageUserStateInternal> getUserStates()\npublic  com.android.server.pm.PackageSetting addMimeTypes(java.lang.String,java.util.Set<java.lang.String>)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageUserState getStateForUser(android.os.UserHandle)\npublic @android.annotation.Nullable java.lang.String getPrimaryCpuAbi()\npublic @android.annotation.Nullable java.lang.String getSecondaryCpuAbi()\npublic @android.annotation.Nullable @java.lang.Override java.lang.String getSeInfo()\npublic @android.annotation.Nullable java.lang.String getPrimaryCpuAbiLegacy()\npublic @android.annotation.Nullable java.lang.String getSecondaryCpuAbiLegacy()\npublic @android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy @java.lang.Override int getHiddenApiEnforcementPolicy()\npublic @java.lang.Override boolean isApex()\npublic @java.lang.Override boolean isForceQueryableOverride()\npublic @java.lang.Override boolean isUpdateAvailable()\npublic @java.lang.Override boolean isInstallPermissionsFixed()\npublic @java.lang.Override boolean isDefaultToDeviceProtectedStorage()\nclass PackageSetting extends com.android.server.pm.SettingBase implements [com.android.server.pm.pkg.PackageStateInternal]\nprivate static final  int INSTALL_PERMISSION_FIXED\nprivate static final  int DEFAULT_TO_DEVICE_PROTECTED_STORAGE\nprivate static final  int UPDATE_AVAILABLE\nprivate static final  int FORCE_QUERYABLE_OVERRIDE\nclass Booleans extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genGetters=true, genConstructor=false, genSetters=false, genBuilder=false)")
     @Deprecated
     private void __metadata() {}
 
diff --git a/services/core/java/com/android/server/pm/RemovePackageHelper.java b/services/core/java/com/android/server/pm/RemovePackageHelper.java
index 59314a2..6d3b26c 100644
--- a/services/core/java/com/android/server/pm/RemovePackageHelper.java
+++ b/services/core/java/com/android/server/pm/RemovePackageHelper.java
@@ -135,6 +135,7 @@
         cacher.cleanCachedResult(codePath);
     }
 
+    // Used for system apps only
     public void removePackage(AndroidPackage pkg, boolean chatty) {
         synchronized (mPm.mInstallLock) {
             removePackageLI(pkg, chatty);
@@ -284,6 +285,13 @@
         }
 
         removePackageLI(deletedPs.getPackageName(), (flags & PackageManager.DELETE_CHATTY) != 0);
+        if (!deletedPs.isSystem()) {
+            // A non-system app's AndroidPackage object has been removed from the service.
+            // Explicitly nullify the corresponding app's PackageSetting's pkg object to
+            // prevent any future usage of it, in case the PackageSetting object will remain because
+            // of DELETE_KEEP_DATA.
+            deletedPs.setPkg(null);
+        }
 
         if ((flags & PackageManager.DELETE_KEEP_DATA) == 0) {
             final AndroidPackage resolvedPkg;
diff --git a/services/core/java/com/android/server/pm/ResilientAtomicFile.java b/services/core/java/com/android/server/pm/ResilientAtomicFile.java
index 54ca426..3aefc5a 100644
--- a/services/core/java/com/android/server/pm/ResilientAtomicFile.java
+++ b/services/core/java/com/android/server/pm/ResilientAtomicFile.java
@@ -107,10 +107,15 @@
 
         // In case of MT access, it's possible the files get overwritten during write.
         // Let's open all FDs we need now.
-        mMainOutStream = new FileOutputStream(mFile);
-        mMainInStream = new FileInputStream(mFile);
-        mReserveOutStream = new FileOutputStream(mReserveCopy);
-        mReserveInStream = new FileInputStream(mReserveCopy);
+        try {
+            mMainOutStream = new FileOutputStream(mFile);
+            mMainInStream = new FileInputStream(mFile);
+            mReserveOutStream = new FileOutputStream(mReserveCopy);
+            mReserveInStream = new FileInputStream(mReserveCopy);
+        } catch (IOException e) {
+            close();
+            throw e;
+        }
 
         return mMainOutStream;
     }
diff --git a/services/core/java/com/android/server/pm/ScanPackageUtils.java b/services/core/java/com/android/server/pm/ScanPackageUtils.java
index c3106a8..f4dca3f 100644
--- a/services/core/java/com/android/server/pm/ScanPackageUtils.java
+++ b/services/core/java/com/android/server/pm/ScanPackageUtils.java
@@ -149,6 +149,8 @@
         String primaryCpuAbiFromSettings = null;
         String secondaryCpuAbiFromSettings = null;
         boolean needToDeriveAbi = (scanFlags & SCAN_FIRST_BOOT_OR_UPGRADE) != 0;
+        boolean isApex = (scanFlags & SCAN_AS_APEX) != 0;
+
         if (!needToDeriveAbi) {
             if (pkgSetting != null) {
                 // TODO(b/154610922): if it is not first boot or upgrade, we should directly use
@@ -240,6 +242,7 @@
                     usesStaticLibraries, parsedPackage.getUsesStaticLibrariesVersions(),
                     parsedPackage.getMimeGroups(), newDomainSetId);
         }
+
         if (createNewPackage && originalPkgSetting != null) {
             // This is the initial transition from the original package, so,
             // fix up the new package's name now. We must do this after looking
@@ -279,77 +282,91 @@
         final boolean isUpdatedSystemApp = pkgSetting.isUpdatedSystemApp();
 
         final File appLib32InstallDir = getAppLib32InstallDir();
-        if ((scanFlags & SCAN_NEW_INSTALL) == 0) {
-            if (needToDeriveAbi) {
-                Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "derivePackageAbi");
-                final Pair<PackageAbiHelper.Abis, PackageAbiHelper.NativeLibraryPaths> derivedAbi =
-                        packageAbiHelper.derivePackageAbi(parsedPackage, isSystemApp,
-                                isUpdatedSystemApp, cpuAbiOverride, appLib32InstallDir);
-                derivedAbi.first.applyTo(parsedPackage);
-                derivedAbi.second.applyTo(parsedPackage);
-                Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
+        // The native libs of Apex is located in apex_payload.img, don't need to parse it from
+        // the original apex file
+        if (!isApex) {
+            if ((scanFlags & SCAN_NEW_INSTALL) == 0) {
+                if (needToDeriveAbi) {
+                    Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "derivePackageAbi");
+                    try {
+                        final Pair<PackageAbiHelper.Abis, PackageAbiHelper.NativeLibraryPaths>
+                                derivedAbi =
+                                packageAbiHelper.derivePackageAbi(
+                                        parsedPackage,
+                                        isSystemApp,
+                                        isUpdatedSystemApp,
+                                        cpuAbiOverride,
+                                        appLib32InstallDir);
+                        derivedAbi.first.applyTo(parsedPackage);
+                        derivedAbi.second.applyTo(parsedPackage);
+                    } finally {
+                        Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
+                    }
 
-                // Some system apps still use directory structure for native libraries
-                // in which case we might end up not detecting abi solely based on apk
-                // structure. Try to detect abi based on directory structure.
+                    // Some system apps still use directory structure for native libraries
+                    // in which case we might end up not detecting abi solely based on apk
+                    // structure. Try to detect abi based on directory structure.
 
-                String pkgRawPrimaryCpuAbi = AndroidPackageUtils.getRawPrimaryCpuAbi(parsedPackage);
-                if (isSystemApp && !isUpdatedSystemApp && pkgRawPrimaryCpuAbi == null) {
-                    final PackageAbiHelper.Abis abis = packageAbiHelper.getBundledAppAbis(
+                    String pkgRawPrimaryCpuAbi = AndroidPackageUtils.getRawPrimaryCpuAbi(
                             parsedPackage);
-                    abis.applyTo(parsedPackage);
-                    abis.applyTo(pkgSetting);
+                    if (isSystemApp && !isUpdatedSystemApp && pkgRawPrimaryCpuAbi == null) {
+                        final PackageAbiHelper.Abis abis = packageAbiHelper.getBundledAppAbis(
+                                parsedPackage);
+                        abis.applyTo(parsedPackage);
+                        abis.applyTo(pkgSetting);
+                        final PackageAbiHelper.NativeLibraryPaths nativeLibraryPaths =
+                                packageAbiHelper.deriveNativeLibraryPaths(parsedPackage,
+                                        isSystemApp, isUpdatedSystemApp, appLib32InstallDir);
+                        nativeLibraryPaths.applyTo(parsedPackage);
+                    }
+                } else {
+                    // This is not a first boot or an upgrade, don't bother deriving the
+                    // ABI during the scan. Instead, trust the value that was stored in the
+                    // package setting.
+                    parsedPackage.setPrimaryCpuAbi(primaryCpuAbiFromSettings)
+                            .setSecondaryCpuAbi(secondaryCpuAbiFromSettings);
+
                     final PackageAbiHelper.NativeLibraryPaths nativeLibraryPaths =
                             packageAbiHelper.deriveNativeLibraryPaths(parsedPackage, isSystemApp,
                                     isUpdatedSystemApp, appLib32InstallDir);
                     nativeLibraryPaths.applyTo(parsedPackage);
+
+                    if (DEBUG_ABI_SELECTION) {
+                        Slog.i(TAG, "Using ABIS and native lib paths from settings : "
+                                + parsedPackage.getPackageName() + " "
+                                + AndroidPackageUtils.getRawPrimaryCpuAbi(parsedPackage)
+                                + ", "
+                                + AndroidPackageUtils.getRawSecondaryCpuAbi(parsedPackage));
+                    }
                 }
             } else {
-                // This is not a first boot or an upgrade, don't bother deriving the
-                // ABI during the scan. Instead, trust the value that was stored in the
-                // package setting.
-                parsedPackage.setPrimaryCpuAbi(primaryCpuAbiFromSettings)
-                        .setSecondaryCpuAbi(secondaryCpuAbiFromSettings);
+                if ((scanFlags & SCAN_MOVE) != 0) {
+                    // We haven't run dex-opt for this move (since we've moved the compiled output
+                    // too) but we already have this packages package info in the PackageSetting.
+                    // We just use that and derive the native library path based on the new code
+                    // path.
+                    parsedPackage.setPrimaryCpuAbi(pkgSetting.getPrimaryCpuAbiLegacy())
+                            .setSecondaryCpuAbi(pkgSetting.getSecondaryCpuAbiLegacy());
+                }
 
+                // Set native library paths again. For moves, the path will be updated based on the
+                // ABIs we've determined above. For non-moves, the path will be updated based on the
+                // ABIs we determined during compilation, but the path will depend on the final
+                // package path (after the rename away from the stage path).
                 final PackageAbiHelper.NativeLibraryPaths nativeLibraryPaths =
                         packageAbiHelper.deriveNativeLibraryPaths(parsedPackage, isSystemApp,
                                 isUpdatedSystemApp, appLib32InstallDir);
                 nativeLibraryPaths.applyTo(parsedPackage);
-
-                if (DEBUG_ABI_SELECTION) {
-                    Slog.i(TAG, "Using ABIS and native lib paths from settings : "
-                            + parsedPackage.getPackageName() + " "
-                            + AndroidPackageUtils.getRawPrimaryCpuAbi(parsedPackage)
-                            + ", "
-                            + AndroidPackageUtils.getRawSecondaryCpuAbi(parsedPackage));
-                }
-            }
-        } else {
-            if ((scanFlags & SCAN_MOVE) != 0) {
-                // We haven't run dex-opt for this move (since we've moved the compiled output too)
-                // but we already have this packages package info in the PackageSetting. We just
-                // use that and derive the native library path based on the new code path.
-                parsedPackage.setPrimaryCpuAbi(pkgSetting.getPrimaryCpuAbiLegacy())
-                        .setSecondaryCpuAbi(pkgSetting.getSecondaryCpuAbiLegacy());
             }
 
-            // Set native library paths again. For moves, the path will be updated based on the
-            // ABIs we've determined above. For non-moves, the path will be updated based on the
-            // ABIs we determined during compilation, but the path will depend on the final
-            // package path (after the rename away from the stage path).
-            final PackageAbiHelper.NativeLibraryPaths nativeLibraryPaths =
-                    packageAbiHelper.deriveNativeLibraryPaths(parsedPackage, isSystemApp,
-                            isUpdatedSystemApp, appLib32InstallDir);
-            nativeLibraryPaths.applyTo(parsedPackage);
-        }
-
-        // This is a special case for the "system" package, where the ABI is
-        // dictated by the zygote configuration (and init.rc). We should keep track
-        // of this ABI so that we can deal with "normal" applications that run under
-        // the same UID correctly.
-        if (isPlatformPackage) {
-            parsedPackage.setPrimaryCpuAbi(VMRuntime.getRuntime().is64Bit()
-                    ? Build.SUPPORTED_64_BIT_ABIS[0] : Build.SUPPORTED_32_BIT_ABIS[0]);
+            // This is a special case for the "system" package, where the ABI is
+            // dictated by the zygote configuration (and init.rc). We should keep track
+            // of this ABI so that we can deal with "normal" applications that run under
+            // the same UID correctly.
+            if (isPlatformPackage) {
+                parsedPackage.setPrimaryCpuAbi(VMRuntime.getRuntime().is64Bit()
+                        ? Build.SUPPORTED_64_BIT_ABIS[0] : Build.SUPPORTED_32_BIT_ABIS[0]);
+            }
         }
 
         // If there's a mismatch between the abi-override in the package setting
@@ -445,6 +462,8 @@
                             + " to " + volumeUuid);
             pkgSetting.setVolumeUuid(volumeUuid);
         }
+        pkgSetting.setDefaultToDeviceProtectedStorage(
+                parsedPackage.isDefaultToDeviceProtectedStorage());
 
         SharedLibraryInfo sdkLibraryInfo = null;
         if (!TextUtils.isEmpty(parsedPackage.getSdkLibraryName())) {
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 677a5d1..c6135e0 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -107,9 +107,11 @@
 import com.android.server.pm.permission.LegacyPermissionState;
 import com.android.server.pm.permission.LegacyPermissionState.PermissionState;
 import com.android.server.pm.pkg.AndroidPackage;
+import com.android.server.pm.pkg.ArchiveState;
 import com.android.server.pm.pkg.PackageStateInternal;
 import com.android.server.pm.pkg.PackageUserState;
 import com.android.server.pm.pkg.PackageUserStateInternal;
+import com.android.server.pm.pkg.SharedUserApi;
 import com.android.server.pm.pkg.SuspendParams;
 import com.android.server.pm.pkg.component.ParsedComponent;
 import com.android.server.pm.pkg.component.ParsedIntentInfo;
@@ -152,6 +154,7 @@
 import java.io.PrintWriter;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -315,6 +318,8 @@
     private static final String TAG_SUSPEND_PARAMS = "suspend-params";
     private static final String TAG_MIME_GROUP = "mime-group";
     private static final String TAG_MIME_TYPE = "mime-type";
+    private static final String TAG_ARCHIVE_STATE = "archive-state";
+    private static final String TAG_ARCHIVE_ACTIVITY_INFO = "archive-activity-info";
 
     public static final String ATTR_NAME = "name";
     public static final String ATTR_PACKAGE = "package";
@@ -361,6 +366,10 @@
     private static final String ATTR_DATABASE_VERSION = "databaseVersion";
     private static final String ATTR_VALUE = "value";
     private static final String ATTR_FIRST_INSTALL_TIME = "first-install-time";
+    private static final String ATTR_ARCHIVE_ACTIVITY_TITLE = "activity-title";
+    private static final String ATTR_ARCHIVE_INSTALLER_TITLE = "installer-title";
+    private static final String ATTR_ARCHIVE_ICON_PATH = "icon-path";
+    private static final String ATTR_ARCHIVE_MONOCHROME_ICON_PATH = "monochrome-icon-path";
 
     private final Handler mHandler;
 
@@ -699,7 +708,7 @@
         mHandler = handler;
         mLock = lock;
         mAppIds = new AppIdSettingMap();
-        mPermissions = new LegacyPermissionSettings(lock);
+        mPermissions = new LegacyPermissionSettings();
         mRuntimePermissionsPersistence = new RuntimePermissionPersistence(
                 runtimePermissionsPersistence, new Consumer<Integer>() {
             @Override
@@ -870,6 +879,10 @@
         return s;
     }
 
+    WatchedArrayMap<String, ? extends SharedUserApi> getSharedUsersLocked() {
+        return mSharedUsers;
+    }
+
     Collection<SharedUserSetting> getAllSharedUsersLPw() {
         return mSharedUsers.values();
     }
@@ -1126,7 +1139,8 @@
                                 null /*harmfulAppWarning*/,
                                 null /*splashscreenTheme*/,
                                 0 /*firstInstallTime*/,
-                                PackageManager.USER_MIN_ASPECT_RATIO_UNSET
+                                PackageManager.USER_MIN_ASPECT_RATIO_UNSET,
+                                null /*archiveState*/
                         );
                     }
                 }
@@ -1802,7 +1816,8 @@
                                     null /*harmfulAppWarning*/,
                                     null /* splashScreenTheme*/,
                                     0 /*firstInstallTime*/,
-                                    PackageManager.USER_MIN_ASPECT_RATIO_UNSET
+                                    PackageManager.USER_MIN_ASPECT_RATIO_UNSET,
+                                    null /*archiveState*/
                             );
                         }
                         return;
@@ -1906,6 +1921,7 @@
                         PersistableBundle suspendedAppExtras = null;
                         PersistableBundle suspendedLauncherExtras = null;
                         SuspendDialogInfo oldSuspendDialogInfo = null;
+                        ArchiveState archiveState = null;
 
                         int packageDepth = parser.getDepth();
                         ArrayMap<String, SuspendParams> suspendParamsMap = null;
@@ -1947,6 +1963,9 @@
                                     suspendParamsMap.put(suspendingPackage,
                                             SuspendParams.restoreFromXml(parser));
                                     break;
+                                case TAG_ARCHIVE_STATE:
+                                    archiveState = parseArchiveState(parser);
+                                    break;
                                 default:
                                     Slog.wtf(TAG, "Unknown tag " + parser.getName() + " under tag "
                                             + TAG_PACKAGE);
@@ -1977,7 +1996,7 @@
                                 uninstallReason, harmfulAppWarning, splashScreenTheme,
                                 firstInstallTime != 0 ? firstInstallTime :
                                         origFirstInstallTimes.getOrDefault(name, 0L),
-                                minAspectRatio);
+                                minAspectRatio, archiveState);
 
                         mDomainVerificationManager.setLegacyUserState(name, userId, verifState);
                     } else if (tagName.equals("preferred-activities")) {
@@ -2006,6 +2025,64 @@
         }
     }
 
+    private static ArchiveState parseArchiveState(TypedXmlPullParser parser)
+            throws XmlPullParserException, IOException {
+        String installerTitle = parser.getAttributeValue(null,
+                ATTR_ARCHIVE_INSTALLER_TITLE);
+        List<ArchiveState.ArchiveActivityInfo> activityInfos =
+                parseArchiveActivityInfos(parser);
+
+        if (installerTitle == null) {
+            Slog.wtf(TAG, "parseArchiveState: installerTitle is null");
+            return null;
+        }
+
+        if (activityInfos.size() < 1) {
+            Slog.wtf(TAG, "parseArchiveState: activityInfos is empty");
+            return null;
+        }
+
+        return new ArchiveState(activityInfos, installerTitle);
+    }
+
+    private static List<ArchiveState.ArchiveActivityInfo> parseArchiveActivityInfos(
+            TypedXmlPullParser parser) throws XmlPullParserException, IOException {
+        List<ArchiveState.ArchiveActivityInfo> activityInfos = new ArrayList<>();
+        int type;
+        int outerDepth = parser.getDepth();
+        String tagName;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG
+                || parser.getDepth() > outerDepth)) {
+            if (type == XmlPullParser.END_TAG
+                    || type == XmlPullParser.TEXT) {
+                continue;
+            }
+            tagName = parser.getName();
+            if (tagName.equals(TAG_ARCHIVE_ACTIVITY_INFO)) {
+                String title = parser.getAttributeValue(null,
+                        ATTR_ARCHIVE_ACTIVITY_TITLE);
+                Path iconPath = Path.of(parser.getAttributeValue(null,
+                        ATTR_ARCHIVE_ICON_PATH));
+                Path monochromeIconPath = Path.of(parser.getAttributeValue(null,
+                        ATTR_ARCHIVE_MONOCHROME_ICON_PATH));
+
+                if (title == null || iconPath == null) {
+                    Slog.wtf(TAG,
+                            TextUtils.formatSimple("Missing attributes in tag %s. %s: %s, %s: %s",
+                                    TAG_ARCHIVE_ACTIVITY_INFO, ATTR_ARCHIVE_ACTIVITY_TITLE, title,
+                                    ATTR_ARCHIVE_ICON_PATH,
+                                    iconPath));
+                    continue;
+                }
+
+                activityInfos.add(
+                        new ArchiveState.ArchiveActivityInfo(title, iconPath, monochromeIconPath));
+            }
+        }
+        return activityInfos;
+    }
+
     void setBlockUninstallLPw(int userId, String packageName, boolean blockUninstall) {
         ArraySet<String> packages = mBlockUninstallPackages.get(userId);
         if (blockUninstall) {
@@ -2318,6 +2395,7 @@
                             }
                             serializer.endTag(null, TAG_DISABLED_COMPONENTS);
                         }
+                        writeArchiveStateLPr(serializer, ustate.getArchiveState());
 
                         serializer.endTag(null, TAG_PACKAGE);
                     }
@@ -2356,6 +2434,28 @@
         }
     }
 
+    private void writeArchiveStateLPr(TypedXmlSerializer serializer, ArchiveState archiveState)
+            throws IOException {
+        if (archiveState == null) {
+            return;
+        }
+
+        serializer.startTag(null, TAG_ARCHIVE_STATE);
+        serializer.attribute(null, ATTR_ARCHIVE_INSTALLER_TITLE, archiveState.getInstallerTitle());
+        for (ArchiveState.ArchiveActivityInfo activityInfo : archiveState.getActivityInfos()) {
+            serializer.startTag(null, TAG_ARCHIVE_ACTIVITY_INFO);
+            serializer.attribute(null, ATTR_ARCHIVE_ACTIVITY_TITLE, activityInfo.getTitle());
+            serializer.attribute(null, ATTR_ARCHIVE_ICON_PATH,
+                    activityInfo.getIconBitmap().toAbsolutePath().toString());
+            if (activityInfo.getMonochromeIconBitmap() != null) {
+                serializer.attribute(null, ATTR_ARCHIVE_MONOCHROME_ICON_PATH,
+                        activityInfo.getMonochromeIconBitmap().toAbsolutePath().toString());
+            }
+            serializer.endTag(null, TAG_ARCHIVE_ACTIVITY_INFO);
+        }
+        serializer.endTag(null, TAG_ARCHIVE_STATE);
+    }
+
     void readInstallPermissionsLPr(TypedXmlPullParser parser,
             LegacyPermissionState permissionsState, List<UserInfo> users)
             throws IOException, XmlPullParserException {
@@ -2814,29 +2914,28 @@
             FileUtils.setPermissions(fstr.getFD(), 0640, SYSTEM_UID, PACKAGE_INFO_GID);
 
             StringBuilder sb = new StringBuilder();
-            for (final PackageSetting pkg : mPackages.values()) {
+            for (final PackageSetting ps : mPackages.values()) {
                 // TODO(b/135203078): This doesn't handle multiple users
-                final String dataPath = pkg.getPkg() == null ? null :
-                        PackageInfoUtils.getDataDir(pkg.getPkg(), UserHandle.USER_SYSTEM)
-                                .getAbsolutePath();
+                final String dataPath = PackageInfoUtils.getDataDir(ps, UserHandle.USER_SYSTEM)
+                        .getAbsolutePath();
 
-                if (pkg.getPkg() == null || dataPath == null) {
-                    if (!"android".equals(pkg.getPackageName())) {
-                        Slog.w(TAG, "Skipping " + pkg + " due to missing metadata");
+                if (ps.getPkg() == null || dataPath == null) {
+                    if (!"android".equals(ps.getPackageName())) {
+                        Slog.w(TAG, "Skipping " + ps + " due to missing metadata");
                     }
                     continue;
                 }
-                if (pkg.getPkg().isApex()) {
+                if (ps.getPkg().isApex()) {
                     // Don't persist APEX which doesn't have a valid app id and will cause parsing
                     // error in libpackagelistparser
                     continue;
                 }
 
-                final boolean isDebug = pkg.getPkg().isDebuggable();
+                final boolean isDebug = ps.getPkg().isDebuggable();
                 final IntArray gids = new IntArray();
                 for (final int userId : userIds) {
                     gids.addAll(mPermissionDataProvider.getGidsForUid(UserHandle.getUid(userId,
-                            pkg.getAppId())));
+                            ps.getAppId())));
                 }
 
                 // Avoid any application that has a space in its path.
@@ -2864,13 +2963,13 @@
                 //   system/core/libpackagelistparser
                 //
                 sb.setLength(0);
-                sb.append(pkg.getPkg().getPackageName());
+                sb.append(ps.getPkg().getPackageName());
                 sb.append(" ");
-                sb.append(pkg.getPkg().getUid());
+                sb.append(ps.getPkg().getUid());
                 sb.append(isDebug ? " 1 " : " 0 ");
                 sb.append(dataPath);
                 sb.append(" ");
-                sb.append(pkg.getSeInfo());
+                sb.append(ps.getSeInfo());
                 sb.append(" ");
                 final int gidsSize = gids.size();
                 if (gids != null && gids.size() > 0) {
@@ -2883,19 +2982,19 @@
                     sb.append("none");
                 }
                 sb.append(" ");
-                sb.append(pkg.getPkg().isProfileableByShell() ? "1" : "0");
+                sb.append(ps.getPkg().isProfileableByShell() ? "1" : "0");
                 sb.append(" ");
-                sb.append(pkg.getPkg().getLongVersionCode());
+                sb.append(ps.getPkg().getLongVersionCode());
                 sb.append(" ");
-                sb.append(pkg.getPkg().isProfileable() ? "1" : "0");
+                sb.append(ps.getPkg().isProfileable() ? "1" : "0");
                 sb.append(" ");
-                if (pkg.isSystem()) {
+                if (ps.isSystem()) {
                     sb.append("@system");
-                } else if (pkg.isProduct()) {
+                } else if (ps.isProduct()) {
                     sb.append("@product");
-                } else if (pkg.getInstallSource().mInstallerPackageName != null
-                           && !pkg.getInstallSource().mInstallerPackageName.isEmpty()) {
-                    sb.append(pkg.getInstallSource().mInstallerPackageName);
+                } else if (ps.getInstallSource().mInstallerPackageName != null
+                           && !ps.getInstallSource().mInstallerPackageName.isEmpty()) {
+                    sb.append(ps.getInstallSource().mInstallerPackageName);
                 } else {
                     sb.append("@null");
                 }
@@ -3023,6 +3122,8 @@
         if (pkg.getVolumeUuid() != null) {
             serializer.attribute(null, "volumeUuid", pkg.getVolumeUuid());
         }
+        serializer.attributeBoolean(null, "defaultToDeviceProtectedStorage",
+                pkg.isDefaultToDeviceProtectedStorage());
         if (pkg.getCategoryOverride() != ApplicationInfo.CATEGORY_UNDEFINED) {
             serializer.attributeInt(null, "categoryHint", pkg.getCategoryOverride());
         }
@@ -3337,6 +3438,11 @@
                 mPackages, mSharedUsers, getUserRuntimePermissionsFile(userId));
     }
 
+    RuntimePermissionsState getLegacyPermissionsState(@UserIdInt int userId) {
+        return mRuntimePermissionsPersistence.getLegacyPermissionsState(
+                userId, mPackages, mSharedUsers);
+    }
+
     void applyDefaultPreferredAppsLPw(int userId) {
         // First pull data from any pre-installed apps.
         final PackageManagerInternal pmInternal =
@@ -3806,6 +3912,7 @@
         String installInitiatingPackageName = null;
         boolean installInitiatorUninstalled = false;
         String volumeUuid = null;
+        boolean defaultToDeviceProtectedStorage = false;
         boolean updateAvailable = false;
         int categoryHint = ApplicationInfo.CATEGORY_UNDEFINED;
         int pkgFlags = 0;
@@ -3855,6 +3962,8 @@
             installInitiatorUninstalled = parser.getAttributeBoolean(null,
                     "installInitiatorUninstalled", false);
             volumeUuid = parser.getAttributeValue(null, "volumeUuid");
+            defaultToDeviceProtectedStorage = parser.getAttributeBoolean(
+                    null, "defaultToDeviceProtectedStorage", false);
             categoryHint = parser.getAttributeInt(null, "categoryHint",
                     ApplicationInfo.CATEGORY_UNDEFINED);
             appMetadataFilePath = parser.getAttributeValue(null, "appMetadataFilePath");
@@ -3994,6 +4103,7 @@
                     installInitiatorUninstalled);
             packageSetting.setInstallSource(installSource)
                     .setVolumeUuid(volumeUuid)
+                    .setDefaultToDeviceProtectedStorage(defaultToDeviceProtectedStorage)
                     .setCategoryOverride(categoryHint)
                     .setLegacyNativeLibraryPath(legacyNativeLibraryPathStr)
                     .setPrimaryCpuAbi(primaryCpuAbiString)
@@ -4781,6 +4891,8 @@
             pw.print("]");
         }
         pw.println();
+        File dataDir = PackageInfoUtils.getDataDir(ps, UserHandle.myUserId());
+        pw.print(prefix); pw.print("  dataDir="); pw.println(dataDir.getAbsolutePath());
         if (pkg != null) {
             pw.print(prefix); pw.print("  versionName="); pw.println(pkg.getVersionName());
             pw.print(prefix); pw.print("  usesNonSdkApi="); pw.println(pkg.isNonSdkApiRequested());
@@ -4812,8 +4924,6 @@
                 pw.append(prefix).append("  queriesIntents=")
                         .println(ps.getPkg().getQueriesIntents());
             }
-            File dataDir = PackageInfoUtils.getDataDir(pkg, UserHandle.myUserId());
-            pw.print(prefix); pw.print("  dataDir="); pw.println(dataDir.getAbsolutePath());
             pw.print(prefix); pw.print("  supportsScreens=[");
             boolean first = true;
             if (pkg.isSmallScreensSupported()) {
@@ -5033,10 +5143,9 @@
         if ((permissionNames != null || dumpAll) && pkg != null
                 && pkg.getRequestedPermissions() != null
                 && pkg.getRequestedPermissions().size() > 0) {
-            final List<String> perms = pkg.getRequestedPermissions();
+            final Set<String> perms = pkg.getRequestedPermissions();
             pw.print(prefix); pw.println("  requested permissions:");
-            for (int i=0; i<perms.size(); i++) {
-                String perm = perms.get(i);
+            for (String perm : perms) {
                 if (permissionNames != null
                         && !permissionNames.contains(perm)) {
                     continue;
@@ -5194,6 +5303,10 @@
                     }
                 }
             }
+            ArchiveState archiveState = userState.getArchiveState();
+            if (archiveState != null) {
+                pw.print(archiveState.toString());
+            }
         }
     }
 
@@ -5787,7 +5900,7 @@
                 legacyPermissionDataProvider,
                 @NonNull WatchedArrayMap<String, ? extends PackageStateInternal> packageStates,
                 @NonNull WatchedArrayMap<String, SharedUserSetting> sharedUsers,
-                @Nullable Handler pmHandler, @NonNull Object pmLock,
+                @Nullable Handler pmHandler, @NonNull PackageManagerTracedLock pmLock,
                 boolean sync) {
             synchronized (mLock) {
                 mAsyncHandler.removeMessages(userId);
@@ -5797,44 +5910,16 @@
             Runnable writer = () -> {
                 boolean isLegacyPermissionStateStale = mIsLegacyPermissionStateStale.getAndSet(
                         false);
+                Map<String, List<RuntimePermissionsState.PermissionState>> packagePermissions;
+                Map<String, List<RuntimePermissionsState.PermissionState>> sharedUserPermissions;
 
-                final Map<String, List<RuntimePermissionsState.PermissionState>>
-                        packagePermissions = new ArrayMap<>();
-                final Map<String, List<RuntimePermissionsState.PermissionState>>
-                        sharedUserPermissions = new ArrayMap<>();
                 synchronized (pmLock) {
                     if (sync || isLegacyPermissionStateStale) {
                         legacyPermissionDataProvider.writeLegacyPermissionStateTEMP();
                     }
 
-                    int packagesSize = packageStates.size();
-                    for (int i = 0; i < packagesSize; i++) {
-                        String packageName = packageStates.keyAt(i);
-                        PackageStateInternal packageState = packageStates.valueAt(i);
-                        if (!packageState.hasSharedUser()) {
-                            List<RuntimePermissionsState.PermissionState> permissions =
-                                    getPermissionsFromPermissionsState(
-                                            packageState.getLegacyPermissionState(), userId);
-                            if (permissions.isEmpty()
-                                    && !packageState.isInstallPermissionsFixed()) {
-                                // Storing an empty state means the package is known to the
-                                // system and its install permissions have been granted and fixed.
-                                // If this is not the case, we should not store anything.
-                                continue;
-                            }
-                            packagePermissions.put(packageName, permissions);
-                        }
-                    }
-
-                    final int sharedUsersSize = sharedUsers.size();
-                    for (int i = 0; i < sharedUsersSize; i++) {
-                        String sharedUserName = sharedUsers.keyAt(i);
-                        SharedUserSetting sharedUserSetting = sharedUsers.valueAt(i);
-                        List<RuntimePermissionsState.PermissionState> permissions =
-                                getPermissionsFromPermissionsState(
-                                        sharedUserSetting.getLegacyPermissionState(), userId);
-                        sharedUserPermissions.put(sharedUserName, permissions);
-                    }
+                    packagePermissions = getPackagePermissions(userId, packageStates);
+                    sharedUserPermissions = getShareUsersPermissions(userId, sharedUsers);
                 }
                 synchronized (mLock) {
                     int version = mVersions.get(userId, INITIAL_VERSION);
@@ -5862,6 +5947,68 @@
             }
         }
 
+        @NonNull
+        RuntimePermissionsState getLegacyPermissionsState(int userId,
+                @NonNull WatchedArrayMap<String, ? extends PackageStateInternal> packageStates,
+                @NonNull WatchedArrayMap<String, SharedUserSetting> sharedUsers) {
+            int version;
+            String fingerprint;
+            synchronized (mLock) {
+                version = mVersions.get(userId, INITIAL_VERSION);
+                fingerprint = mFingerprints.get(userId);
+            }
+
+            return new RuntimePermissionsState(
+                    version, fingerprint, getPackagePermissions(userId, packageStates),
+                    getShareUsersPermissions(userId, sharedUsers));
+        }
+
+        @NonNull
+        private Map<String, List<RuntimePermissionsState.PermissionState>> getPackagePermissions(
+                int userId,
+                @NonNull WatchedArrayMap<String, ? extends PackageStateInternal> packageStates) {
+            final Map<String, List<RuntimePermissionsState.PermissionState>>
+                    packagePermissions = new ArrayMap<>();
+
+            final int packagesSize = packageStates.size();
+            for (int i = 0; i < packagesSize; i++) {
+                String packageName = packageStates.keyAt(i);
+                PackageStateInternal packageState = packageStates.valueAt(i);
+                if (!packageState.hasSharedUser()) {
+                    List<RuntimePermissionsState.PermissionState> permissions =
+                            getPermissionsFromPermissionsState(
+                                    packageState.getLegacyPermissionState(), userId);
+                    if (permissions.isEmpty()
+                            && !packageState.isInstallPermissionsFixed()) {
+                        // Storing an empty state means the package is known to the
+                        // system and its install permissions have been granted and fixed.
+                        // If this is not the case, we should not store anything.
+                        continue;
+                    }
+                    packagePermissions.put(packageName, permissions);
+                }
+            }
+            return packagePermissions;
+        }
+
+        @NonNull
+        private Map<String, List<RuntimePermissionsState.PermissionState>> getShareUsersPermissions(
+                int userId, @NonNull WatchedArrayMap<String, SharedUserSetting> sharedUsers) {
+            final Map<String, List<RuntimePermissionsState.PermissionState>>
+                    sharedUserPermissions = new ArrayMap<>();
+
+            final int sharedUsersSize = sharedUsers.size();
+            for (int i = 0; i < sharedUsersSize; i++) {
+                String sharedUserName = sharedUsers.keyAt(i);
+                SharedUserSetting sharedUserSetting = sharedUsers.valueAt(i);
+                List<RuntimePermissionsState.PermissionState> permissions =
+                        getPermissionsFromPermissionsState(
+                                sharedUserSetting.getLegacyPermissionState(), userId);
+                sharedUserPermissions.put(sharedUserName, permissions);
+            }
+            return sharedUserPermissions;
+        }
+
         private void writePendingStates() {
             while (true) {
                 final RuntimePermissionsState runtimePermissions;
diff --git a/services/core/java/com/android/server/pm/ShortcutLauncher.java b/services/core/java/com/android/server/pm/ShortcutLauncher.java
index 00f7dc4..bac300d 100644
--- a/services/core/java/com/android/server/pm/ShortcutLauncher.java
+++ b/services/core/java/com/android/server/pm/ShortcutLauncher.java
@@ -23,7 +23,6 @@
 import android.content.pm.UserPackage;
 import android.util.ArrayMap;
 import android.util.ArraySet;
-import android.util.AtomicFile;
 import android.util.Slog;
 import android.util.Xml;
 
@@ -32,8 +31,6 @@
 import com.android.modules.utils.TypedXmlSerializer;
 import com.android.server.pm.ShortcutService.DumpFilter;
 
-import libcore.io.IoUtils;
-
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.xmlpull.v1.XmlPullParser;
@@ -41,7 +38,6 @@
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -264,45 +260,41 @@
 
     public static ShortcutLauncher loadFromFile(File path, ShortcutUser shortcutUser,
             int ownerUserId, boolean fromBackup) {
+        try (ResilientAtomicFile file = getResilientFile(path)) {
+            FileInputStream in = null;
+            try {
+                in = file.openRead();
+                if (in == null) {
+                    Slog.d(TAG, "Not found " + path);
+                    return null;
+                }
 
-        final AtomicFile file = new AtomicFile(path);
-        final FileInputStream in;
-        try {
-            in = file.openRead();
-        } catch (FileNotFoundException e) {
-            if (ShortcutService.DEBUG) {
-                Slog.d(TAG, "Not found " + path);
+                ShortcutLauncher ret = null;
+                TypedXmlPullParser parser = Xml.resolvePullParser(in);
+
+                int type;
+                while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
+                    if (type != XmlPullParser.START_TAG) {
+                        continue;
+                    }
+                    final int depth = parser.getDepth();
+
+                    final String tag = parser.getName();
+                    if (ShortcutService.DEBUG_LOAD) {
+                        Slog.d(TAG, String.format("depth=%d type=%d name=%s", depth, type, tag));
+                    }
+                    if ((depth == 1) && TAG_ROOT.equals(tag)) {
+                        ret = loadFromXml(parser, shortcutUser, ownerUserId, fromBackup);
+                        continue;
+                    }
+                    ShortcutService.throwForInvalidTag(depth, tag);
+                }
+                return ret;
+            } catch (Exception e) {
+                Slog.e(TAG, "Failed to read file " + file.getBaseFile(), e);
+                file.failRead(in, e);
+                return loadFromFile(path, shortcutUser, ownerUserId, fromBackup);
             }
-            return null;
-        }
-
-        try {
-            ShortcutLauncher ret = null;
-            TypedXmlPullParser parser = Xml.resolvePullParser(in);
-
-            int type;
-            while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
-                if (type != XmlPullParser.START_TAG) {
-                    continue;
-                }
-                final int depth = parser.getDepth();
-
-                final String tag = parser.getName();
-                if (ShortcutService.DEBUG_LOAD) {
-                    Slog.d(TAG, String.format("depth=%d type=%d name=%s", depth, type, tag));
-                }
-                if ((depth == 1) && TAG_ROOT.equals(tag)) {
-                    ret = loadFromXml(parser, shortcutUser, ownerUserId, fromBackup);
-                    continue;
-                }
-                ShortcutService.throwForInvalidTag(depth, tag);
-            }
-            return ret;
-        } catch (IOException | XmlPullParserException e) {
-            Slog.e(TAG, "Failed to read file " + file.getBaseFile(), e);
-            return null;
-        } finally {
-            IoUtils.closeQuietly(in);
         }
     }
 
diff --git a/services/core/java/com/android/server/pm/ShortcutPackage.java b/services/core/java/com/android/server/pm/ShortcutPackage.java
index 28cb7f0..0ea45c4 100644
--- a/services/core/java/com/android/server/pm/ShortcutPackage.java
+++ b/services/core/java/com/android/server/pm/ShortcutPackage.java
@@ -50,7 +50,6 @@
 import android.text.format.Formatter;
 import android.util.ArrayMap;
 import android.util.ArraySet;
-import android.util.AtomicFile;
 import android.util.Log;
 import android.util.Slog;
 import android.util.Xml;
@@ -69,8 +68,6 @@
 import com.android.server.pm.ShortcutService.ShortcutOperation;
 import com.android.server.pm.ShortcutService.Stats;
 
-import libcore.io.IoUtils;
-
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.xmlpull.v1.XmlPullParser;
@@ -78,7 +75,6 @@
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -1969,45 +1965,41 @@
 
     public static ShortcutPackage loadFromFile(ShortcutService s, ShortcutUser shortcutUser,
             File path, boolean fromBackup) {
+        try (ResilientAtomicFile file = getResilientFile(path)) {
+            FileInputStream in = null;
+            try {
+                in = file.openRead();
+                if (in == null) {
+                    Slog.d(TAG, "Not found " + path);
+                    return null;
+                }
 
-        final AtomicFile file = new AtomicFile(path);
-        final FileInputStream in;
-        try {
-            in = file.openRead();
-        } catch (FileNotFoundException e) {
-            if (ShortcutService.DEBUG) {
-                Slog.d(TAG, "Not found " + path);
+                ShortcutPackage ret = null;
+                TypedXmlPullParser parser = Xml.resolvePullParser(in);
+
+                int type;
+                while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
+                    if (type != XmlPullParser.START_TAG) {
+                        continue;
+                    }
+                    final int depth = parser.getDepth();
+
+                    final String tag = parser.getName();
+                    if (ShortcutService.DEBUG_LOAD || ShortcutService.DEBUG_REBOOT) {
+                        Slog.d(TAG, String.format("depth=%d type=%d name=%s", depth, type, tag));
+                    }
+                    if ((depth == 1) && TAG_ROOT.equals(tag)) {
+                        ret = loadFromXml(s, shortcutUser, parser, fromBackup);
+                        continue;
+                    }
+                    ShortcutService.throwForInvalidTag(depth, tag);
+                }
+                return ret;
+            } catch (Exception e) {
+                Slog.e(TAG, "Failed to read file " + file.getBaseFile(), e);
+                file.failRead(in, e);
+                return loadFromFile(s, shortcutUser, path, fromBackup);
             }
-            return null;
-        }
-
-        try {
-            ShortcutPackage ret = null;
-            TypedXmlPullParser parser = Xml.resolvePullParser(in);
-
-            int type;
-            while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
-                if (type != XmlPullParser.START_TAG) {
-                    continue;
-                }
-                final int depth = parser.getDepth();
-
-                final String tag = parser.getName();
-                if (ShortcutService.DEBUG_LOAD || ShortcutService.DEBUG_REBOOT) {
-                    Slog.d(TAG, String.format("depth=%d type=%d name=%s", depth, type, tag));
-                }
-                if ((depth == 1) && TAG_ROOT.equals(tag)) {
-                    ret = loadFromXml(s, shortcutUser, parser, fromBackup);
-                    continue;
-                }
-                ShortcutService.throwForInvalidTag(depth, tag);
-            }
-            return ret;
-        } catch (IOException | XmlPullParserException e) {
-            Slog.e(TAG, "Failed to read file " + file.getBaseFile(), e);
-            return null;
-        } finally {
-            IoUtils.closeQuietly(in);
         }
     }
 
diff --git a/services/core/java/com/android/server/pm/ShortcutPackageItem.java b/services/core/java/com/android/server/pm/ShortcutPackageItem.java
index 8b118da..8667888 100644
--- a/services/core/java/com/android/server/pm/ShortcutPackageItem.java
+++ b/services/core/java/com/android/server/pm/ShortcutPackageItem.java
@@ -20,14 +20,13 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.ShortcutInfo;
 import android.graphics.Bitmap;
-import android.util.AtomicFile;
+import android.os.FileUtils;
 import android.util.Slog;
 import android.util.Xml;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.Preconditions;
 import com.android.modules.utils.TypedXmlSerializer;
-import com.android.server.security.FileIntegrity;
 
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -160,36 +159,31 @@
 
     @GuardedBy("mLock")
     public void saveToFileLocked(File path, boolean forBackup) {
-        final AtomicFile file = new AtomicFile(path);
-        FileOutputStream os = null;
-        try {
-            os = file.startWrite();
-
-            // Write to XML
-            final TypedXmlSerializer itemOut;
-            if (forBackup) {
-                itemOut = Xml.newFastSerializer();
-                itemOut.setOutput(os, StandardCharsets.UTF_8.name());
-            } else {
-                itemOut = Xml.resolveSerializer(os);
-            }
-            itemOut.startDocument(null, true);
-
-            saveToXml(itemOut, forBackup);
-
-            itemOut.endDocument();
-
-            os.flush();
-            file.finishWrite(os);
-
+        try (ResilientAtomicFile file = getResilientFile(path)) {
+            FileOutputStream os = null;
             try {
-                FileIntegrity.setUpFsVerity(path);
-            } catch (IOException e) {
-                Slog.e(TAG, "Failed to verity-protect " + path, e);
+                os = file.startWrite();
+
+                // Write to XML
+                final TypedXmlSerializer itemOut;
+                if (forBackup) {
+                    itemOut = Xml.newFastSerializer();
+                    itemOut.setOutput(os, StandardCharsets.UTF_8.name());
+                } else {
+                    itemOut = Xml.resolveSerializer(os);
+                }
+                itemOut.startDocument(null, true);
+
+                saveToXml(itemOut, forBackup);
+
+                itemOut.endDocument();
+
+                os.flush();
+                file.finishWrite(os);
+            } catch (XmlPullParserException | IOException e) {
+                Slog.e(TAG, "Failed to write to file " + file.getBaseFile(), e);
+                file.failWrite(os);
             }
-        } catch (XmlPullParserException | IOException e) {
-            Slog.e(TAG, "Failed to write to file " + file.getBaseFile(), e);
-            file.failWrite(os);
         }
     }
 
@@ -265,9 +259,18 @@
 
     void removeShortcutPackageItem() {
         synchronized (mLock) {
-            getShortcutPackageItemFile().delete();
+            getResilientFile(getShortcutPackageItemFile()).delete();
         }
     }
 
     protected abstract File getShortcutPackageItemFile();
+
+    protected static ResilientAtomicFile getResilientFile(File file) {
+        String path = file.getPath();
+        File temporaryBackup = new File(path + ".backup");
+        File reserveCopy = new File(path + ".reservecopy");
+        int fileMode = FileUtils.S_IRWXU | FileUtils.S_IRWXG | FileUtils.S_IXOTH;
+        return new ResilientAtomicFile(file, temporaryBackup, reserveCopy, fileMode,
+                "shortcut package item", null);
+    }
 }
diff --git a/services/core/java/com/android/server/pm/ShortcutUser.java b/services/core/java/com/android/server/pm/ShortcutUser.java
index 94eb6bb..d32eb22 100644
--- a/services/core/java/com/android/server/pm/ShortcutUser.java
+++ b/services/core/java/com/android/server/pm/ShortcutUser.java
@@ -437,14 +437,14 @@
         } else {
             final File root = s.injectUserDataPath(userId);
 
-            forAllFilesIn(new File(root, DIRECTORY_PACKAGES), (File f) -> {
+            forMainFilesIn(new File(root, DIRECTORY_PACKAGES), (File f) -> {
                 final ShortcutPackage sp = ShortcutPackage.loadFromFile(s, ret, f, fromBackup);
                 if (sp != null) {
                     ret.mPackages.put(sp.getPackageName(), sp);
                 }
             });
 
-            forAllFilesIn(new File(root, DIRECTORY_LUANCHERS), (File f) -> {
+            forMainFilesIn(new File(root, DIRECTORY_LUANCHERS), (File f) -> {
                 final ShortcutLauncher sl =
                         ShortcutLauncher.loadFromFile(f, ret, userId, fromBackup);
                 if (sl != null) {
@@ -456,13 +456,15 @@
         return ret;
     }
 
-    private static void forAllFilesIn(File path, Consumer<File> callback) {
+    private static void forMainFilesIn(File path, Consumer<File> callback) {
         if (!path.exists()) {
             return;
         }
         File[] list = path.listFiles();
         for (File f : list) {
-            callback.accept(f);
+            if (!f.getName().endsWith(".reservecopy") && !f.getName().endsWith(".backup")) {
+                callback.accept(f);
+            }
         }
     }
 
diff --git a/services/core/java/com/android/server/pm/StorageEventHelper.java b/services/core/java/com/android/server/pm/StorageEventHelper.java
index 8f8f437..6f0fe63 100644
--- a/services/core/java/com/android/server/pm/StorageEventHelper.java
+++ b/services/core/java/com/android/server/pm/StorageEventHelper.java
@@ -306,6 +306,7 @@
         }
         mBroadcastHelper.sendResourcesChangedBroadcast(mPm::snapshotComputer, mediaStatus,
                 replacing, packageNames, packageUids);
+        mPm.notifyResourcesChanged(mediaStatus, replacing, packageNames, packageUids);
     }
 
     /**
diff --git a/services/core/java/com/android/server/pm/SuspendPackageHelper.java b/services/core/java/com/android/server/pm/SuspendPackageHelper.java
index 08934c6..94e09f1 100644
--- a/services/core/java/com/android/server/pm/SuspendPackageHelper.java
+++ b/services/core/java/com/android/server/pm/SuspendPackageHelper.java
@@ -633,6 +633,8 @@
                 (callingUid, intentExtras) -> BroadcastHelper.filterExtrasChangedPackageList(
                         mPm.snapshotComputer(), callingUid, intentExtras),
                 options));
+        mPm.notifyPackageMonitor(intent, null /* pkg */, extras, new int[]{userId},
+                null /* instantUserIds */, null /* broadcastAllowList */);
     }
 
     /**
diff --git a/services/core/java/com/android/server/pm/TEST_MAPPING b/services/core/java/com/android/server/pm/TEST_MAPPING
index a622d07..04d1da6 100644
--- a/services/core/java/com/android/server/pm/TEST_MAPPING
+++ b/services/core/java/com/android/server/pm/TEST_MAPPING
@@ -18,7 +18,12 @@
       "name": "CtsCompilationTestCases"
     },
     {
-      "name": "CtsAppEnumerationTestCases"
+      "name": "CtsAppEnumerationTestCases",
+      "options": [
+        {
+          "exclude-annotation": "androidx.test.filters.LargeTest"
+        }
+      ]
     },
     {
       "name": "CtsMatchFlagTestCases"
@@ -88,11 +93,20 @@
           "include-filter": "android.uidmigration.cts"
         }
       ]
+    },
+    {
+      "name": "CtsInstantAppsHostTestCases",
+      "file_patterns": ["(/|^)PackageMonitorCallbackHelper\\.java"],
+      "options": [
+        {
+          "include-filter": "android.appsecurity.cts.EphemeralTest#testGetSearchableInfo"
+        }
+      ]
     }
   ],
-  "presubmit-large": [
+  "presubmit-large":[
     {
-      "name": "CtsContentTestCases",
+      "name": "CtsPackageManagerTestCases",
       "options": [
         {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
@@ -101,7 +115,7 @@
           "exclude-annotation": "org.junit.Ignore"
         },
         {
-          "include-filter": "android.content.pm.cts"
+          "exclude-filter": "android.content.pm.cts.PackageManagerShellCommandMultiUserTest"
         }
       ]
     }
@@ -116,10 +130,21 @@
       ]
     },
     {
-      "name": "CtsAppSecurityHostTestCases"
+      "name": "CtsPackageManagerHostTestCases"
     },
     {
       "name": "PackageManagerServiceHostTests"
+    },
+    {
+      "name": "CtsAppEnumerationTestCases"
+    },
+    {
+      "name": "CtsPackageManagerTestCases",
+      "options": [
+        {
+          "include-filter": "android.content.pm.cts.PackageManagerShellCommandMultiUserTest"
+        }
+      ]
     }
   ],
   "imports": [
diff --git a/services/core/java/com/android/server/pm/UserManagerInternal.java b/services/core/java/com/android/server/pm/UserManagerInternal.java
index 194f237..04cd183 100644
--- a/services/core/java/com/android/server/pm/UserManagerInternal.java
+++ b/services/core/java/com/android/server/pm/UserManagerInternal.java
@@ -588,4 +588,10 @@
      */
     public abstract @UserIdInt int getBootUser(boolean waitUntilSet)
             throws UserManager.CheckedUserOperationException;
+
+    /**
+     * Returns the user id of the communal profile, or {@link android.os.UserHandle#USER_NULL}
+     * if there is no such user.
+     */
+    public abstract @UserIdInt int getCommunalProfileId();
 }
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index cab90d2..385dfcb8 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -723,6 +723,10 @@
                     user.unlockRealtime = SystemClock.elapsedRealtime();
                 }
             }
+            if (targetUser.getUserIdentifier() == UserHandle.USER_SYSTEM
+                    && UserManager.isCommunalProfileEnabled()) {
+                mUms.startCommunalProfile();
+            }
         }
 
         @Override
@@ -828,6 +832,26 @@
         return mLocalService;
     }
 
+    private void startCommunalProfile() {
+        final int communalProfileId = getCommunalProfileIdUnchecked();
+        if (communalProfileId != UserHandle.USER_NULL) {
+            Slogf.d(LOG_TAG, "Starting the Communal Profile");
+            boolean started = false;
+            try {
+                started = ActivityManager.getService().startProfile(communalProfileId);
+            } catch (RemoteException e) {
+                // Should not happen - same process
+                e.rethrowAsRuntimeException();
+            }
+            if (!started) {
+                Slogf.wtf(LOG_TAG,
+                        "Failed to start communal profile userId=%d", communalProfileId);
+            }
+        } else {
+            Slogf.w(LOG_TAG, "Cannot start Communal Profile because there isn't one");
+        }
+    }
+
     /** Marks all ephemeral users as slated for deletion. **/
     private void markEphemeralUsersForRemoval() {
         synchronized (mUsersLock) {
@@ -1049,6 +1073,26 @@
         return previousUser;
     }
 
+    @Override
+    public @UserIdInt int getCommunalProfileId() {
+        checkQueryOrCreateUsersPermission("get communal profile user id");
+        return getCommunalProfileIdUnchecked();
+    }
+
+    /** Returns the currently-designated communal profile, or USER_NULL if not present. */
+    private @UserIdInt int getCommunalProfileIdUnchecked() {
+        synchronized (mUsersLock) {
+            final int userSize = mUsers.size();
+            for (int i = 0; i < userSize; i++) {
+                final UserInfo user = mUsers.valueAt(i).info;
+                if (user.isCommunalProfile() && !mRemovingUserIds.get(user.id)) {
+                    return user.id;
+                }
+            }
+        }
+        return UserHandle.USER_NULL;
+    }
+
     public @NonNull List<UserInfo> getUsers(boolean excludeDying) {
         return getUsers(/*excludePartial= */ true, excludeDying, /* excludePreCreated= */
                 true);
@@ -1209,6 +1253,10 @@
         return isSameProfileGroupNoChecks(userId, otherUserId);
     }
 
+    /**
+     * Returns whether users are in the same non-empty profile group.
+     * Currently, false if empty profile group, even if they are the same user, for whatever reason.
+     */
     private boolean isSameProfileGroupNoChecks(@UserIdInt int userId, int otherUserId) {
         synchronized (mUsersLock) {
             UserInfo userInfo = getUserInfoLU(userId);
@@ -1224,6 +1272,16 @@
         }
     }
 
+    /**
+     * Returns whether users are in the same profile group, or if the target is a communal profile.
+     */
+    private boolean isSameUserOrProfileGroupOrTargetIsCommunal(UserInfo asker, UserInfo target) {
+        if (asker.id == target.id) return true;
+        if (target.isCommunalProfile()) return true;
+        return (asker.profileGroupId != UserInfo.NO_PROFILE_GROUP_ID
+                && asker.profileGroupId == target.profileGroupId);
+    }
+
     @Override
     public UserInfo getProfileParent(@UserIdInt int userId) {
         if (!hasManageUsersOrPermission(android.Manifest.permission.INTERACT_ACROSS_USERS)) {
@@ -1875,6 +1933,18 @@
         return userTypeDetails.getBadgeNoBackground();
     }
 
+    @Override
+    public @DrawableRes int getUserStatusBarIconResId(@UserIdInt int userId) {
+        checkManageOrInteractPermissionIfCallerInOtherProfileGroup(userId,
+                "getUserStatusBarIconResId");
+        final UserTypeDetails userTypeDetails = getUserTypeDetailsNoChecks(userId);
+        if (userTypeDetails == null || !userTypeDetails.hasBadge()) {
+            Slog.w(LOG_TAG, "Requested status bar icon for non-badged user " + userId);
+            return Resources.ID_NULL;
+        }
+        return userTypeDetails.getStatusBarIcon();
+    }
+
     public boolean isProfile(@UserIdInt int userId) {
         checkQueryOrInteractPermissionIfCallerInOtherProfileGroup(userId, "isProfile");
         return isProfileUnchecked(userId);
@@ -2286,7 +2356,7 @@
     @Override
     public boolean isRestricted(@UserIdInt int userId) {
         if (userId != UserHandle.getCallingUserId()) {
-            checkCreateUsersPermission("query isRestricted for user " + userId);
+            checkQueryOrCreateUsersPermission("query isRestricted for user " + userId);
         }
         synchronized (mUsersLock) {
             final UserInfo userInfo = getUserInfoLU(userId);
@@ -2507,41 +2577,58 @@
     @Override
     public boolean setUserEphemeral(@UserIdInt int userId, boolean enableEphemeral) {
         checkCreateUsersPermission("update ephemeral user flag");
-        UserData userToUpdate = null;
+        return enableEphemeral
+                ? UserManager.isRemoveResultSuccessful(setUserEphemeralUnchecked(userId))
+                : setUserNonEphemeralUnchecked(userId);
+    }
+
+    private boolean setUserNonEphemeralUnchecked(@UserIdInt int userId) {
         synchronized (mPackagesLock) {
+            final UserData userData;
             synchronized (mUsersLock) {
-                final UserData userData = mUsers.get(userId);
+                userData = mUsers.get(userId);
                 if (userData == null) {
-                    Slog.e(LOG_TAG, "User not found for setting ephemeral mode: u" + userId);
+                    Slog.e(LOG_TAG, TextUtils.formatSimple(
+                            "Cannot set user %d non-ephemeral, invalid user id provided.", 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);
+                if (!userData.info.isEphemeral()) {
+                    return true;
+                }
+
+                if ((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
+                    Slog.e(LOG_TAG, TextUtils.formatSimple("User %d can not be changed to "
+                            + "non-ephemeral because it was set ephemeral on create.", 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);
-            }
+            userData.info.flags &= ~UserInfo.FLAG_EPHEMERAL;
+            writeUserLP(userData);
         }
         return true;
     }
 
+    private @UserManager.RemoveResult int setUserEphemeralUnchecked(@UserIdInt int userId) {
+        synchronized (mPackagesLock) {
+            final UserData userData;
+            synchronized (mUsersLock) {
+                final int userRemovability = getUserRemovabilityLocked(userId, "set as ephemeral");
+                if (userRemovability != UserManager.REMOVE_RESULT_USER_IS_REMOVABLE) {
+                    return userRemovability;
+                }
+                userData = mUsers.get(userId);
+            }
+            userData.info.flags |= UserInfo.FLAG_EPHEMERAL;
+            writeUserLP(userData);
+        }
+        Slog.i(LOG_TAG, TextUtils.formatSimple(
+                "User %d is set ephemeral and will be removed on user switch or reboot.", userId));
+        return UserManager.REMOVE_RESULT_DEFERRED;
+    }
+
     @Override
     public void setUserIcon(@UserIdInt int userId, Bitmap bitmap) {
         try {
@@ -2578,11 +2665,8 @@
             }
 
             final int callingUserId = UserHandle.getCallingUserId();
-            final int callingGroupId = getUserInfoNoChecks(callingUserId).profileGroupId;
-            final int targetGroupId = targetUserInfo.profileGroupId;
-            final boolean sameGroup = (callingGroupId != UserInfo.NO_PROFILE_GROUP_ID
-                    && callingGroupId == targetGroupId);
-            if ((callingUserId != targetUserId) && !sameGroup) {
+            final UserInfo callingUserInfo = getUserInfoNoChecks(callingUserId);
+            if (!isSameUserOrProfileGroupOrTargetIsCommunal(callingUserInfo, targetUserInfo)) {
                 checkManageUsersPermission("get the icon of a user who is not related");
             }
 
@@ -4798,11 +4882,13 @@
                     UserManager.USER_OPERATION_ERROR_LOW_STORAGE);
         }
 
+        final boolean isMainUser = (flags & UserInfo.FLAG_MAIN) != 0;
         final boolean isProfile = userTypeDetails.isProfile();
         final boolean isGuest = UserManager.isUserTypeGuest(userType);
         final boolean isRestricted = UserManager.isUserTypeRestricted(userType);
         final boolean isDemo = UserManager.isUserTypeDemo(userType);
         final boolean isManagedProfile = UserManager.isUserTypeManagedProfile(userType);
+        final boolean isCommunalProfile = UserManager.isUserTypeCommunalProfile(userType);
 
         final long ident = Binder.clearCallingIdentity();
         UserInfo userInfo;
@@ -4837,7 +4923,8 @@
                             UserManager.USER_OPERATION_ERROR_MAX_USERS);
                 }
                 // TODO(b/142482943): Perhaps let the following code apply to restricted users too.
-                if (isProfile && !canAddMoreProfilesToUser(userType, parentId, false)) {
+                if (isProfile && !isCommunalProfile &&
+                        !canAddMoreProfilesToUser(userType, parentId, false)) {
                     throwCheckedUserOperationException(
                             "Cannot add more profiles of type " + userType
                                     + " for user " + parentId,
@@ -4942,6 +5029,10 @@
                 }
             } else {
                 userTypeDetails.addDefaultRestrictionsTo(restrictions);
+                if (isMainUser) {
+                    restrictions.remove(UserManager.DISALLOW_OUTGOING_CALLS);
+                    restrictions.remove(UserManager.DISALLOW_SMS);
+                }
             }
             synchronized (mRestrictionsLock) {
                 mBaseUserRestrictions.updateRestrictions(userId, restrictions);
@@ -5422,23 +5513,37 @@
     }
 
     private boolean removeUserWithProfilesUnchecked(@UserIdInt int userId) {
-        UserInfo userInfo = getUserInfoNoChecks(userId);
-
-        if (userInfo == null) {
-            Slog.e(LOG_TAG, TextUtils.formatSimple(
-                    "Cannot remove user %d, invalid user id provided.", userId));
-            return false;
+        final UserData userData;
+        final boolean isProfile;
+        final IntArray profileIds;
+        synchronized (mUsersLock) {
+            final int userRemovability = getUserRemovabilityLocked(userId, "removed");
+            if (userRemovability != UserManager.REMOVE_RESULT_USER_IS_REMOVABLE) {
+                return UserManager.isRemoveResultSuccessful(userRemovability);
+            }
+            userData = mUsers.get(userId);
+            isProfile = userData.info.isProfile();
+            profileIds = isProfile ? null : getProfileIdsLU(userId, null, false);
         }
 
-        if (!userInfo.isProfile()) {
-            int[] profileIds = getProfileIds(userId, false);
-            for (int profileId : profileIds) {
+        if (!isProfile) {
+            Pair<Integer, Integer> currentAndTargetUserIds = getCurrentAndTargetUserIds();
+            if (userId == currentAndTargetUserIds.first) {
+                Slog.w(LOG_TAG, "Current user cannot be removed.");
+                return false;
+            }
+            if (userId == currentAndTargetUserIds.second) {
+                Slog.w(LOG_TAG, "Target user of an ongoing user switch cannot be removed.");
+                return false;
+            }
+            for (int i = profileIds.size() - 1; i >= 0; i--) {
+                int profileId = profileIds.get(i);
                 if (profileId == userId) {
                     //Remove the associated profiles first and then remove the user
                     continue;
                 }
                 Slog.i(LOG_TAG, "removing profile:" + profileId
-                        + "associated with user:" + userId);
+                        + " associated with user:" + userId);
                 if (!removeUserUnchecked(profileId)) {
                     // If the profile was not immediately removed, make sure it is marked as
                     // ephemeral. Don't mark as disabled since, per UserInfo.FLAG_DISABLED
@@ -5485,45 +5590,16 @@
         final long ident = Binder.clearCallingIdentity();
         try {
             final UserData userData;
-            Pair<Integer, Integer> currentAndTargetUserIds = getCurrentAndTargetUserIds();
-            if (userId == currentAndTargetUserIds.first) {
-                Slog.w(LOG_TAG, "Current user cannot be removed.");
-                return false;
-            }
-            if (userId == currentAndTargetUserIds.second) {
-                Slog.w(LOG_TAG, "Target user of an ongoing user switch cannot be removed.");
-                return false;
-            }
             synchronized (mPackagesLock) {
                 synchronized (mUsersLock) {
+                    final int userRemovability = getUserRemovabilityLocked(userId, "removed");
+                    if (userRemovability != UserManager.REMOVE_RESULT_USER_IS_REMOVABLE) {
+                        return UserManager.isRemoveResultSuccessful(userRemovability);
+                    }
                     userData = mUsers.get(userId);
-                    if (userId == UserHandle.USER_SYSTEM) {
-                        Slog.e(LOG_TAG, "System user cannot be removed.");
-                        return false;
-                    }
-
-                    if (userData == null) {
-                        Slog.e(LOG_TAG, TextUtils.formatSimple(
-                                "Cannot remove user %d, invalid user id provided.", userId));
-                        return false;
-                    }
-
-                    if (isNonRemovableMainUser(userData.info)) {
-                        Slog.e(LOG_TAG, "Main user cannot be removed when "
-                                + "it's a permanent admin user.");
-                        return false;
-                    }
-
-                    if (mRemovingUserIds.get(userId)) {
-                        Slog.e(LOG_TAG, TextUtils.formatSimple(
-                                "User %d is already scheduled for removal.", userId));
-                        return false;
-                    }
-
                     Slog.i(LOG_TAG, "Removing user " + userId);
                     addRemovingUserIdLocked(userId);
                 }
-
                 // Set this to a partially created user, so that the user will be purged
                 // on next startup, in case the runtime stops now before stopping and
                 // removing the user completely.
@@ -5612,6 +5688,7 @@
     @Override
     public @UserManager.RemoveResult int removeUserWhenPossible(@UserIdInt int userId,
             boolean overrideDevicePolicy) {
+        Slog.i(LOG_TAG, "removeUserWhenPossible u" + userId);
         checkCreateUsersPermission("Only the system can remove users");
 
         if (!overrideDevicePolicy) {
@@ -5621,65 +5698,47 @@
                 return UserManager.REMOVE_RESULT_ERROR_USER_RESTRICTION;
             }
         }
+        Slog.i(LOG_TAG, "Attempting to immediately remove user " + userId);
+        if (removeUserWithProfilesUnchecked(userId)) {
+            return UserManager.REMOVE_RESULT_REMOVED;
+        }
+        Slog.i(LOG_TAG, TextUtils.formatSimple(
+                "Unable to immediately remove user %d. Now trying to set it ephemeral.", userId));
+        return setUserEphemeralUnchecked(userId);
+    }
+
+    /**
+     * Returns the user's removability status.
+     * User is removable if the return value is {@link UserManager#REMOVE_RESULT_USER_IS_REMOVABLE}.
+     * If the user is not removable this method also prints the reason.
+     * See also {@link UserManager#isRemoveResultSuccessful}.
+     */
+    @GuardedBy("mUsersLock")
+    private @UserManager.RemoveResult int getUserRemovabilityLocked(@UserIdInt int userId,
+            String msg) {
+        String prefix = TextUtils.formatSimple("User %d can not be %s, ", userId, msg);
         if (userId == UserHandle.USER_SYSTEM) {
-            Slog.e(LOG_TAG, "System user cannot be removed.");
+            Slog.e(LOG_TAG, prefix + "system user cannot be removed.");
             return UserManager.REMOVE_RESULT_ERROR_SYSTEM_USER;
         }
-
-        final long ident = Binder.clearCallingIdentity();
-        try {
-            final UserData userData;
-            synchronized (mPackagesLock) {
-                synchronized (mUsersLock) {
-                    userData = mUsers.get(userId);
-                    if (userData == null) {
-                        Slog.e(LOG_TAG,
-                                "Cannot remove user " + userId + ", invalid user id provided.");
-                        return UserManager.REMOVE_RESULT_ERROR_USER_NOT_FOUND;
-                    }
-
-                    if (isNonRemovableMainUser(userData.info)) {
-                        Slog.e(LOG_TAG, "Main user cannot be removed when "
-                                + "it's a permanent admin user.");
-                        return UserManager.REMOVE_RESULT_ERROR_MAIN_USER_PERMANENT_ADMIN;
-                    }
-
-                    if (mRemovingUserIds.get(userId)) {
-                        Slog.e(LOG_TAG, "User " + userId + " is already scheduled for removal.");
-                        return UserManager.REMOVE_RESULT_ALREADY_BEING_REMOVED;
-                    }
-                }
-
-                // Attempt to immediately remove a non-current and non-target user
-                Pair<Integer, Integer> currentAndTargetUserIds = getCurrentAndTargetUserIds();
-                if (userId != currentAndTargetUserIds.first
-                        && userId != currentAndTargetUserIds.second) {
-                    // Attempt to remove the user. This will fail if the user is the current user
-                    if (removeUserWithProfilesUnchecked(userId)) {
-                        return UserManager.REMOVE_RESULT_REMOVED;
-                    }
-                }
-                // If the user was not immediately removed, make sure it is marked as ephemeral.
-                // Don't mark as disabled since, per UserInfo.FLAG_DISABLED documentation, an
-                // ephemeral user should only be marked as disabled when its removal is in progress.
-                Slog.i(LOG_TAG, TextUtils.formatSimple("Unable to immediately remove user %d "
-                                + "(%s is %d). User is set as ephemeral and will be removed on "
-                                + "user switch or reboot.",
-                        userId,
-                        userId == currentAndTargetUserIds.first
-                                ? "current user"
-                                : "target user of an ongoing user switch",
-                        userId));
-                userData.info.flags |= UserInfo.FLAG_EPHEMERAL;
-                writeUserLP(userData);
-
-                return UserManager.REMOVE_RESULT_DEFERRED;
-            }
-        } finally {
-            Binder.restoreCallingIdentity(ident);
+        final UserData userData = mUsers.get(userId);
+        if (userData == null) {
+            Slog.e(LOG_TAG, prefix + "invalid user id provided.");
+            return UserManager.REMOVE_RESULT_ERROR_USER_NOT_FOUND;
         }
+        if (isNonRemovableMainUser(userData.info)) {
+            Slog.e(LOG_TAG, prefix
+                    + "main user cannot be removed when it's a permanent admin user.");
+            return UserManager.REMOVE_RESULT_ERROR_MAIN_USER_PERMANENT_ADMIN;
+        }
+        if (mRemovingUserIds.get(userId)) {
+            Slog.w(LOG_TAG, prefix + "it is already scheduled for removal.");
+            return UserManager.REMOVE_RESULT_ALREADY_BEING_REMOVED;
+        }
+        return UserManager.REMOVE_RESULT_USER_IS_REMOVABLE;
     }
 
+
     private void finishRemoveUser(final @UserIdInt int userId) {
         Slog.i(LOG_TAG, "finishRemoveUser " + userId);
 
@@ -7063,6 +7122,7 @@
                     return false;
                 }
 
+                // TODO(b/276473320): Probably use isSameUserOrProfileGroupOrTargetIsCommunal.
                 if (targetUserInfo.profileGroupId == UserInfo.NO_PROFILE_GROUP_ID ||
                         targetUserInfo.profileGroupId != callingUserInfo.profileGroupId) {
                     if (throwSecurityException) {
@@ -7147,8 +7207,12 @@
         @UserAssignmentResult
         public int assignUserToDisplayOnStart(@UserIdInt int userId,
                 @UserIdInt int profileGroupId, @UserStartMode int userStartMode, int displayId) {
+
+            final UserProperties properties = getUserProperties(userId);
+            final boolean isAlwaysVisible =  properties != null && properties.getAlwaysVisible();
+
             return mUserVisibilityMediator.assignUserToDisplayOnStart(userId, profileGroupId,
-                    userStartMode, displayId);
+                    userStartMode, displayId, isAlwaysVisible);
         }
 
         @Override
@@ -7255,6 +7319,11 @@
             return getBootUserUnchecked();
         }
 
+        @Override
+        public @UserIdInt int getCommunalProfileId() {
+            return getCommunalProfileIdUnchecked();
+        }
+
     } // class LocalService
 
 
diff --git a/services/core/java/com/android/server/pm/UserTypeDetails.java b/services/core/java/com/android/server/pm/UserTypeDetails.java
index 6065372..7bdcd68 100644
--- a/services/core/java/com/android/server/pm/UserTypeDetails.java
+++ b/services/core/java/com/android/server/pm/UserTypeDetails.java
@@ -116,6 +116,9 @@
     /** Resource ID of the badge without a background. Should be set if mIconBadge is set. */
     private @DrawableRes final int mBadgeNoBackground;
 
+    /** Resource ID of the status bar icon. */
+    private @DrawableRes final int mStatusBarIcon;
+
     /**
      * Resource ID ({@link StringRes}) of the of the labels to describe badged apps; should be the
      * same format as com.android.internal.R.color.profile_badge_1. These are used for accessibility
@@ -160,6 +163,7 @@
             @UserInfoFlag int baseType, @UserInfoFlag int defaultUserInfoPropertyFlags, int label,
             int maxAllowedPerParent,
             int iconBadge, int badgePlain, int badgeNoBackground,
+            int statusBarIcon,
             @Nullable int[] badgeLabels, @Nullable int[] badgeColors,
             @Nullable int[] darkThemeBadgeColors,
             @Nullable Bundle defaultRestrictions,
@@ -181,6 +185,7 @@
         this.mIconBadge = iconBadge;
         this.mBadgePlain = badgePlain;
         this.mBadgeNoBackground = badgeNoBackground;
+        this.mStatusBarIcon = statusBarIcon;
         this.mLabel = label;
         this.mBadgeLabels = badgeLabels;
         this.mBadgeColors = badgeColors;
@@ -254,6 +259,11 @@
         return mBadgeNoBackground;
     }
 
+    /** Resource ID of the status bar icon. */
+    public @DrawableRes int getStatusBarIcon() {
+        return mStatusBarIcon;
+    }
+
     /**
      * Returns the Resource ID of the badgeIndexth badge label, where the badgeIndex is expected
      * to be the {@link UserInfo#profileBadge} of the user.
@@ -375,6 +385,7 @@
         pw.print(prefix); pw.print("mIconBadge: "); pw.println(mIconBadge);
         pw.print(prefix); pw.print("mBadgePlain: "); pw.println(mBadgePlain);
         pw.print(prefix); pw.print("mBadgeNoBackground: "); pw.println(mBadgeNoBackground);
+        pw.print(prefix); pw.print("mStatusBarIcon: "); pw.println(mStatusBarIcon);
         pw.print(prefix); pw.print("mBadgeLabels.length: ");
         pw.println(mBadgeLabels != null ? mBadgeLabels.length : "0(null)");
         pw.print(prefix); pw.print("mBadgeColors.length: ");
@@ -404,6 +415,7 @@
         private @DrawableRes int mIconBadge = Resources.ID_NULL;
         private @DrawableRes int mBadgePlain = Resources.ID_NULL;
         private @DrawableRes int mBadgeNoBackground = Resources.ID_NULL;
+        private @DrawableRes int mStatusBarIcon = Resources.ID_NULL;
         // Default UserProperties cannot be null but for efficiency we don't initialize it now.
         // If it isn't set explicitly, {@link UserProperties.Builder#build()} will be used.
         private @Nullable UserProperties mDefaultUserProperties = null;
@@ -471,6 +483,11 @@
             return this;
         }
 
+        public Builder setStatusBarIcon(@DrawableRes int statusBarIcon) {
+            mStatusBarIcon = statusBarIcon;
+            return this;
+        }
+
         public Builder setLabel(int label) {
             mLabel = label;
             return this;
@@ -550,6 +567,7 @@
                     mIconBadge,
                     mBadgePlain,
                     mBadgeNoBackground,
+                    mStatusBarIcon,
                     mBadgeLabels,
                     mBadgeColors,
                     mDarkThemeBadgeColors == null ? mBadgeColors : mDarkThemeBadgeColors,
@@ -607,4 +625,20 @@
     public boolean isManagedProfile() {
         return UserManager.isUserTypeManagedProfile(mName);
     }
+
+    /**
+     * Returns whether the user type is a communal profile
+     * (i.e. {@link UserManager#USER_TYPE_PROFILE_COMMUNAL}).
+     */
+    public boolean isCommunalProfile() {
+        return UserManager.isUserTypeCommunalProfile(mName);
+    }
+
+    /**
+     * Returns whether the user type is a private profile
+     * (i.e. {@link UserManager#USER_TYPE_PROFILE_PRIVATE}).
+     */
+    public boolean isPrivateProfile() {
+        return UserManager.isUserTypePrivateProfile(mName);
+    }
 }
diff --git a/services/core/java/com/android/server/pm/UserTypeFactory.java b/services/core/java/com/android/server/pm/UserTypeFactory.java
index a814ca4..d5231b5 100644
--- a/services/core/java/com/android/server/pm/UserTypeFactory.java
+++ b/services/core/java/com/android/server/pm/UserTypeFactory.java
@@ -33,7 +33,9 @@
 import static android.os.UserManager.USER_TYPE_FULL_SECONDARY;
 import static android.os.UserManager.USER_TYPE_FULL_SYSTEM;
 import static android.os.UserManager.USER_TYPE_PROFILE_CLONE;
+import static android.os.UserManager.USER_TYPE_PROFILE_COMMUNAL;
 import static android.os.UserManager.USER_TYPE_PROFILE_MANAGED;
+import static android.os.UserManager.USER_TYPE_PROFILE_PRIVATE;
 import static android.os.UserManager.USER_TYPE_PROFILE_TEST;
 import static android.os.UserManager.USER_TYPE_SYSTEM_HEADLESS;
 
@@ -106,6 +108,8 @@
         builders.put(USER_TYPE_FULL_RESTRICTED, getDefaultTypeFullRestricted());
         builders.put(USER_TYPE_SYSTEM_HEADLESS, getDefaultTypeSystemHeadless());
         builders.put(USER_TYPE_PROFILE_CLONE, getDefaultTypeProfileClone());
+        builders.put(USER_TYPE_PROFILE_COMMUNAL, getDefaultTypeProfileCommunal());
+        builders.put(USER_TYPE_PROFILE_PRIVATE, getDefaultTypeProfilePrivate());
         if (Build.IS_DEBUGGABLE) {
             builders.put(USER_TYPE_PROFILE_TEST, getDefaultTypeProfileTest());
         }
@@ -128,6 +132,7 @@
                 .setBadgePlain(com.android.internal.R.drawable.ic_clone_badge)
                 // Clone doesn't use BadgeNoBackground, so just set to BadgePlain as a placeholder.
                 .setBadgeNoBackground(com.android.internal.R.drawable.ic_clone_badge)
+                .setStatusBarIcon(Resources.ID_NULL)
                 .setBadgeLabels(
                         com.android.internal.R.string.clone_profile_label_badge)
                 .setBadgeColors(
@@ -167,6 +172,7 @@
                 .setIconBadge(com.android.internal.R.drawable.ic_corp_icon_badge_case)
                 .setBadgePlain(com.android.internal.R.drawable.ic_corp_badge_case)
                 .setBadgeNoBackground(com.android.internal.R.drawable.ic_corp_badge_no_background)
+                .setStatusBarIcon(com.android.internal.R.drawable.stat_sys_managed_profile_status)
                 .setBadgeLabels(
                         com.android.internal.R.string.managed_profile_label_badge,
                         com.android.internal.R.string.managed_profile_label_badge_2,
@@ -179,7 +185,7 @@
                         com.android.internal.R.color.profile_badge_1_dark,
                         com.android.internal.R.color.profile_badge_2_dark,
                         com.android.internal.R.color.profile_badge_3_dark)
-                .setDefaultRestrictions(getDefaultManagedProfileRestrictions())
+                .setDefaultRestrictions(getDefaultProfileRestrictions())
                 .setDefaultSecureSettings(getDefaultManagedProfileSecureSettings())
                 .setDefaultCrossProfileIntentFilters(getDefaultManagedCrossProfileIntentFilter())
                 .setDefaultUserProperties(new UserProperties.Builder()
@@ -194,7 +200,7 @@
      * configuration (for userdebug builds). For now it just uses managed profile badges.
      */
     private static UserTypeDetails.Builder getDefaultTypeProfileTest() {
-        final Bundle restrictions = new Bundle();
+        final Bundle restrictions = getDefaultProfileRestrictions();
         restrictions.putBoolean(UserManager.DISALLOW_FUN, true);
 
         return new UserTypeDetails.Builder()
@@ -205,6 +211,7 @@
                 .setIconBadge(com.android.internal.R.drawable.ic_test_icon_badge_experiment)
                 .setBadgePlain(com.android.internal.R.drawable.ic_test_badge_experiment)
                 .setBadgeNoBackground(com.android.internal.R.drawable.ic_test_badge_no_background)
+                .setStatusBarIcon(com.android.internal.R.drawable.ic_test_badge_experiment)
                 .setBadgeLabels(
                         com.android.internal.R.string.managed_profile_label_badge,
                         com.android.internal.R.string.managed_profile_label_badge_2,
@@ -222,6 +229,77 @@
     }
 
     /**
+     * Returns the Builder for the default {@link UserManager#USER_TYPE_PROFILE_COMMUNAL}
+     * configuration. For now it just uses managed profile badges.
+     */
+    private static UserTypeDetails.Builder getDefaultTypeProfileCommunal() {
+        return new UserTypeDetails.Builder()
+                .setName(USER_TYPE_PROFILE_COMMUNAL)
+                .setBaseType(FLAG_PROFILE)
+                .setMaxAllowed(1)
+                .setEnabled(UserManager.isCommunalProfileEnabled() ? 1 : 0)
+                .setLabel(0)
+                .setIconBadge(com.android.internal.R.drawable.ic_test_icon_badge_experiment)
+                .setBadgePlain(com.android.internal.R.drawable.ic_test_badge_experiment)
+                .setBadgeNoBackground(com.android.internal.R.drawable.ic_test_badge_no_background)
+                .setStatusBarIcon(com.android.internal.R.drawable.ic_test_badge_experiment)
+                .setBadgeLabels(
+                        com.android.internal.R.string.managed_profile_label_badge,
+                        com.android.internal.R.string.managed_profile_label_badge_2,
+                        com.android.internal.R.string.managed_profile_label_badge_3)
+                .setBadgeColors(
+                        com.android.internal.R.color.profile_badge_1,
+                        com.android.internal.R.color.profile_badge_2,
+                        com.android.internal.R.color.profile_badge_3)
+                .setDarkThemeBadgeColors(
+                        com.android.internal.R.color.profile_badge_1_dark,
+                        com.android.internal.R.color.profile_badge_2_dark,
+                        com.android.internal.R.color.profile_badge_3_dark)
+                .setDefaultRestrictions(getDefaultProfileRestrictions())
+                .setDefaultSecureSettings(getDefaultNonManagedProfileSecureSettings())
+                .setDefaultUserProperties(new UserProperties.Builder()
+                        .setStartWithParent(false)
+                        .setShowInLauncher(UserProperties.SHOW_IN_LAUNCHER_SEPARATE)
+                        .setShowInSettings(UserProperties.SHOW_IN_SETTINGS_SEPARATE)
+                        .setCredentialShareableWithParent(false)
+                        .setAlwaysVisible(true));
+    }
+
+    /**
+     * Returns the Builder for the default {@link UserManager#USER_TYPE_PROFILE_PRIVATE}
+     * configuration.
+     */
+    private static UserTypeDetails.Builder getDefaultTypeProfilePrivate() {
+        return new UserTypeDetails.Builder()
+                .setName(USER_TYPE_PROFILE_PRIVATE)
+                .setBaseType(FLAG_PROFILE)
+                .setMaxAllowedPerParent(1)
+                .setLabel(0)
+                .setIconBadge(com.android.internal.R.drawable.ic_test_icon_badge_experiment)
+                .setBadgePlain(com.android.internal.R.drawable.ic_test_badge_experiment)
+                .setBadgeNoBackground(com.android.internal.R.drawable.ic_test_badge_no_background)
+                .setStatusBarIcon(com.android.internal.R.drawable.ic_test_badge_experiment)
+                .setBadgeLabels(
+                        com.android.internal.R.string.managed_profile_label_badge,
+                        com.android.internal.R.string.managed_profile_label_badge_2,
+                        com.android.internal.R.string.managed_profile_label_badge_3)
+                .setBadgeColors(
+                        com.android.internal.R.color.profile_badge_2)
+                .setDarkThemeBadgeColors(
+                        com.android.internal.R.color.profile_badge_2_dark)
+                .setDefaultRestrictions(getDefaultProfileRestrictions())
+                .setDefaultSecureSettings(getDefaultNonManagedProfileSecureSettings())
+                .setDefaultUserProperties(new UserProperties.Builder()
+                        .setStartWithParent(true)
+                        .setCredentialShareableWithParent(false)
+                        .setMediaSharedWithParent(false)
+                        .setShowInLauncher(UserProperties.SHOW_IN_LAUNCHER_SEPARATE)
+                        .setCrossProfileIntentFilterAccessControl(
+                                UserProperties.CROSS_PROFILE_INTENT_FILTER_ACCESS_LEVEL_SYSTEM)
+                        .setInheritDevicePolicy(UserProperties.INHERIT_DEVICE_POLICY_FROM_PARENT));
+    }
+
+    /**
      * Returns the Builder for the default {@link UserManager#USER_TYPE_FULL_SECONDARY}
      * configuration.
      */
@@ -314,7 +392,7 @@
         return restrictions;
     }
 
-    private static Bundle getDefaultManagedProfileRestrictions() {
+    private static Bundle getDefaultProfileRestrictions() {
         final Bundle restrictions = new Bundle();
         restrictions.putBoolean(UserManager.DISALLOW_WALLPAPER, true);
         return restrictions;
@@ -426,6 +504,7 @@
                     setResAttribute(parser, "icon-badge", builder::setIconBadge);
                     setResAttribute(parser, "badge-plain", builder::setBadgePlain);
                     setResAttribute(parser, "badge-no-background", builder::setBadgeNoBackground);
+                    setResAttribute(parser, "status-bar-icon", builder::setStatusBarIcon);
                 }
 
                 setIntAttribute(parser, "enabled", builder::setEnabled);
diff --git a/services/core/java/com/android/server/pm/UserVisibilityMediator.java b/services/core/java/com/android/server/pm/UserVisibilityMediator.java
index cf82536..613ebd3 100644
--- a/services/core/java/com/android/server/pm/UserVisibilityMediator.java
+++ b/services/core/java/com/android/server/pm/UserVisibilityMediator.java
@@ -121,6 +121,13 @@
     })
     public @interface SecondaryDisplayMappingStatus {}
 
+    /**
+     * ProfileGroupId representing always-visible users (e.g. a communal profile).
+     * This is an implementation detail of this class only; it may have nothing to do with the
+     * actual user's profile group id in UserManagerService.
+     */
+    public static final int ALWAYS_VISIBLE_PROFILE_GROUP_ID = UserHandle.USER_ALL;
+
     // TODO(b/266158156): might need to change this if boot logic is refactored for HSUM devices
     @VisibleForTesting
     static final int INITIAL_CURRENT_USER_ID = USER_SYSTEM;
@@ -159,6 +166,10 @@
      *
      * <p>It's used to determine not just if the user is visible, but also
      * {@link #isProfile(int, int) if it's a profile}.
+     *
+     * <p>Note that these profile group ids might not be identical to those used in
+     * UserManagerService, as different conventions are used (such as how to treat users with no
+     * profiles, or how to treat the communal profile).
      */
     @GuardedBy("mLock")
     private final SparseIntArray mStartedVisibleProfileGroupIds = new SparseIntArray();
@@ -221,7 +232,7 @@
      */
     public @UserAssignmentResult int assignUserToDisplayOnStart(@UserIdInt int userId,
             @UserIdInt int unResolvedProfileGroupId, @UserStartMode int userStartMode,
-            int displayId) {
+            int displayId, boolean isAlwaysVisible) {
         Preconditions.checkArgument(!isSpecialUserId(userId), "user id cannot be generic: %d",
                 userId);
         validateUserStartMode(userStartMode);
@@ -238,9 +249,8 @@
         // getUserVisibilityOnStartLocked() respectively).
 
 
-        int profileGroupId = unResolvedProfileGroupId == NO_PROFILE_GROUP_ID
-                ? userId
-                : unResolvedProfileGroupId;
+        int profileGroupId
+                = resolveProfileGroupId(userId, unResolvedProfileGroupId, isAlwaysVisible);
         if (DBG) {
             Slogf.d(TAG, "assignUserToDisplayOnStart(%d, %d, %s, %d): actualProfileGroupId=%d",
                     userId, unResolvedProfileGroupId, userStartModeToString(userStartMode),
@@ -330,6 +340,18 @@
         return result;
     }
 
+    private int resolveProfileGroupId(
+            @UserIdInt int userId, @UserIdInt int unResolvedProfileGroupId,
+            boolean isAlwaysVisible) {
+
+        if (isAlwaysVisible) {
+            return ALWAYS_VISIBLE_PROFILE_GROUP_ID;
+        }
+        return unResolvedProfileGroupId == NO_PROFILE_GROUP_ID
+                ? userId
+                : unResolvedProfileGroupId;
+    }
+
     @GuardedBy("mLock")
     @UserAssignmentResult
     private int getUserVisibilityOnStartLocked(@UserIdInt int userId, @UserIdInt int profileGroupId,
@@ -388,8 +410,7 @@
                             userStartModeToString(userStartMode), displayId);
                     return USER_ASSIGNMENT_RESULT_FAILURE;
                 case USER_START_MODE_BACKGROUND_VISIBLE:
-                    boolean isParentVisibleOnDisplay = isUserVisible(profileGroupId, displayId);
-                    if (!isParentVisibleOnDisplay) {
+                    if (!isParentVisibleOnDisplay(profileGroupId, displayId)) {
                         Slogf.w(TAG, "getUserVisibilityOnStartLocked(%d, %d, %s, %d) failed: cannot"
                                 + " start profile user visible when its parent is not visible in "
                                 + "that display", userId, profileGroupId,
@@ -721,6 +742,19 @@
     }
 
     /**
+     * Returns whether the given profileGroupId - i.e. the user (for a non-profile), or its parent
+     * (for a profile) - is visible on the given display.
+     */
+    private boolean isParentVisibleOnDisplay(@UserIdInt int profileGroupId, int displayId) {
+        if (profileGroupId == ALWAYS_VISIBLE_PROFILE_GROUP_ID) {
+            return true;
+        }
+        // The profileGroupId is the user (for a non-profile) or its parent (for a profile),
+        // so query whether it is visible.
+        return isUserVisible(profileGroupId, displayId);
+    }
+
+    /**
      * See {@link UserManagerInternal#isUserVisible(int, int)}.
      */
     public boolean isUserVisible(@UserIdInt int userId, int displayId) {
@@ -1133,8 +1167,9 @@
             if (mCurrentUserId == userId) {
                 return true;
             }
-            return mStartedVisibleProfileGroupIds.get(userId, NO_PROFILE_GROUP_ID)
-                    == mCurrentUserId;
+            int profileGroupId = mStartedVisibleProfileGroupIds.get(userId, NO_PROFILE_GROUP_ID);
+            return profileGroupId ==
+                    mCurrentUserId || profileGroupId == ALWAYS_VISIBLE_PROFILE_GROUP_ID;
         }
     }
 
diff --git a/services/core/java/com/android/server/pm/VerifyingSession.java b/services/core/java/com/android/server/pm/VerifyingSession.java
index 7198de2..3a1fd7c 100644
--- a/services/core/java/com/android/server/pm/VerifyingSession.java
+++ b/services/core/java/com/android/server/pm/VerifyingSession.java
@@ -589,27 +589,14 @@
             final PackageVerificationResponse response = new PackageVerificationResponse(
                     verificationCodeAtTimeout, requiredUid);
 
-            if (streaming) {
-                // For streaming installations, count verification timeout from the broadcast.
-                startVerificationTimeoutCountdown(verificationId, streaming, response,
-                        verificationTimeout);
-            }
+            startVerificationTimeoutCountdown(verificationId, streaming, response,
+                    verificationTimeout);
 
             // Send the intent to the required verification agent, but only start the
             // verification timeout after the target BroadcastReceivers have run.
             mPm.mContext.sendOrderedBroadcastAsUser(requiredIntent, verifierUser,
                     receiverPermission, AppOpsManager.OP_NONE, options.toBundle(),
-                    new BroadcastReceiver() {
-                        @Override
-                        public void onReceive(Context context, Intent intent) {
-                            if (!streaming) {
-                                // For NON-streaming installations, count verification timeout from
-                                // the broadcast was processed by all receivers.
-                                startVerificationTimeoutCountdown(verificationId, streaming,
-                                        response, verificationTimeout);
-                            }
-                        }
-                    }, null, 0, null, null);
+                    null, null, 0, null, null);
         }
 
         Trace.asyncTraceBegin(TRACE_TAG_PACKAGE_MANAGER, "verification", verificationId);
diff --git a/services/core/java/com/android/server/pm/dex/ArtManagerService.java b/services/core/java/com/android/server/pm/dex/ArtManagerService.java
index d88b66b..31856f1 100644
--- a/services/core/java/com/android/server/pm/dex/ArtManagerService.java
+++ b/services/core/java/com/android/server/pm/dex/ArtManagerService.java
@@ -61,7 +61,7 @@
 import com.android.server.pm.PackageManagerServiceUtils;
 import com.android.server.pm.parsing.PackageInfoUtils;
 import com.android.server.pm.pkg.AndroidPackage;
-import com.android.server.pm.pkg.PackageState;
+import com.android.server.pm.pkg.PackageStateInternal;
 
 import dalvik.system.DexFile;
 import dalvik.system.VMRuntime;
@@ -542,14 +542,14 @@
     /**
      * Compile layout resources in a given package.
      */
-    public boolean compileLayouts(@NonNull PackageState packageState, @NonNull AndroidPackage pkg) {
+    public boolean compileLayouts(@NonNull PackageStateInternal ps, @NonNull AndroidPackage pkg) {
         try {
             final String packageName = pkg.getPackageName();
             final String apkPath = pkg.getSplits().get(0).getPath();
             // TODO(b/143971007): Use a cross-user directory
-            File dataDir = PackageInfoUtils.getDataDir(pkg, UserHandle.myUserId());
+            File dataDir = PackageInfoUtils.getDataDir(ps, UserHandle.myUserId());
             final String outDexFile = dataDir.getAbsolutePath() + "/code_cache/compiled_view.dex";
-            if (packageState.isPrivileged() || pkg.isUseEmbeddedDex()
+            if (ps.isPrivileged() || pkg.isUseEmbeddedDex()
                     || pkg.isDefaultToDeviceProtectedStorage()) {
                 // Privileged apps prefer to load trusted code so they don't use compiled views.
                 // If the app is not privileged but prefers code integrity, also avoid compiling
diff --git a/services/core/java/com/android/server/pm/dex/ViewCompiler.java b/services/core/java/com/android/server/pm/dex/ViewCompiler.java
index 9ce648f..6405ea5 100644
--- a/services/core/java/com/android/server/pm/dex/ViewCompiler.java
+++ b/services/core/java/com/android/server/pm/dex/ViewCompiler.java
@@ -23,7 +23,7 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.server.pm.Installer;
 import com.android.server.pm.parsing.PackageInfoUtils;
-import com.android.server.pm.pkg.AndroidPackage;
+import com.android.server.pm.pkg.PackageStateInternal;
 
 import java.io.File;
 
@@ -37,12 +37,11 @@
         mInstaller = installer;
     }
 
-    public boolean compileLayouts(AndroidPackage pkg) {
+    public boolean compileLayouts(PackageStateInternal ps, String apkPath) {
         try {
-            final String packageName = pkg.getPackageName();
-            final String apkPath = pkg.getBaseApkPath();
+            final String packageName = ps.getPackageName();
             // TODO(b/143971007): Use a cross-user directory
-            File dataDir = PackageInfoUtils.getDataDir(pkg, UserHandle.myUserId());
+            File dataDir = PackageInfoUtils.getDataDir(ps, UserHandle.myUserId());
             final String outDexFile = dataDir.getAbsolutePath() + "/code_cache/compiled_view.dex";
             Log.i("PackageManager", "Compiling layouts in " + packageName + " (" + apkPath +
                 ") to " + outDexFile);
@@ -50,7 +49,7 @@
             try {
                 synchronized (mInstallLock) {
                     return mInstaller.compileLayouts(apkPath, packageName, outDexFile,
-                        pkg.getUid());
+                        ps.getAppId());
                 }
             } finally {
                 Binder.restoreCallingIdentity(callingId);
diff --git a/services/core/java/com/android/server/pm/local/PackageManagerLocalImpl.java b/services/core/java/com/android/server/pm/local/PackageManagerLocalImpl.java
index 4e0a11d..8d05450 100644
--- a/services/core/java/com/android/server/pm/local/PackageManagerLocalImpl.java
+++ b/services/core/java/com/android/server/pm/local/PackageManagerLocalImpl.java
@@ -28,6 +28,7 @@
 import com.android.server.pm.PackageManagerLocal;
 import com.android.server.pm.PackageManagerService;
 import com.android.server.pm.pkg.PackageState;
+import com.android.server.pm.pkg.SharedUserApi;
 import com.android.server.pm.snapshot.PackageDataSnapshot;
 
 import java.io.IOException;
@@ -105,6 +106,9 @@
         private Map<String, PackageState> mCachedUnmodifiablePackageStates;
 
         @Nullable
+        private Map<String, SharedUserApi> mCachedUnmodifiableSharedUsers;
+
+        @Nullable
         private Map<String, PackageState> mCachedUnmodifiableDisabledSystemPackageStates;
 
         private UnfilteredSnapshotImpl(@NonNull PackageDataSnapshot snapshot) {
@@ -132,6 +136,19 @@
         @SuppressWarnings("RedundantSuppression")
         @NonNull
         @Override
+        public Map<String, SharedUserApi> getSharedUsers() {
+            checkClosed();
+
+            if (mCachedUnmodifiableSharedUsers == null) {
+                mCachedUnmodifiableSharedUsers =
+                        Collections.unmodifiableMap(mSnapshot.getSharedUsers());
+            }
+            return mCachedUnmodifiableSharedUsers;
+        }
+
+        @SuppressWarnings("RedundantSuppression")
+        @NonNull
+        @Override
         public Map<String, PackageState> getDisabledSystemPackageStates() {
             checkClosed();
 
diff --git a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
index d55f85c..94e9599 100644
--- a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
+++ b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
@@ -1082,18 +1082,18 @@
     }
 
     @NonNull
-    public static File getDataDir(AndroidPackage pkg, int userId) {
-        if ("android".equals(pkg.getPackageName())) {
+    public static File getDataDir(PackageStateInternal ps, int userId) {
+        if ("android".equals(ps.getPackageName())) {
             return Environment.getDataSystemDirectory();
         }
 
-        if (pkg.isDefaultToDeviceProtectedStorage()
+        if (ps.isDefaultToDeviceProtectedStorage()
                 && PackageManager.APPLY_DEFAULT_TO_DEVICE_PROTECTED_STORAGE) {
-            return Environment.getDataUserDePackageDirectory(pkg.getVolumeUuid(), userId,
-                    pkg.getPackageName());
+            return Environment.getDataUserDePackageDirectory(ps.getVolumeUuid(), userId,
+                    ps.getPackageName());
         } else {
-            return Environment.getDataUserCePackageDirectory(pkg.getVolumeUuid(), userId,
-                    pkg.getPackageName());
+            return Environment.getDataUserCePackageDirectory(ps.getVolumeUuid(), userId,
+                    ps.getPackageName());
         }
     }
 
diff --git a/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java b/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java
index f036835..056aae4 100644
--- a/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java
+++ b/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java
@@ -160,8 +160,8 @@
      */
     @NonNull
     @Deprecated
-    @DataClass.ParcelWith(Parcelling.BuiltIn.ForInternedStringList.class)
-    protected List<String> requestedPermissions = emptyList();
+    @DataClass.ParcelWith(Parcelling.BuiltIn.ForInternedStringSet.class)
+    protected Set<String> requestedPermissions = emptySet();
     @NonNull
     @DataClass.ParcelWith(Parcelling.BuiltIn.ForInternedStringList.class)
     protected List<String> protectedBroadcasts = emptyList();
@@ -277,8 +277,8 @@
     @NonNull
     private List<ParsedUsesPermission> usesPermissions = emptyList();
     @NonNull
-    @DataClass.ParcelWith(Parcelling.BuiltIn.ForInternedStringList.class)
-    private List<String> implicitPermissions = emptyList();
+    @DataClass.ParcelWith(Parcelling.BuiltIn.ForInternedStringSet.class)
+    private Set<String> implicitPermissions = emptySet();
     @NonNull
     private Set<String> upgradeKeySets = emptySet();
     @NonNull
@@ -664,29 +664,39 @@
 
     @Override
     public PackageImpl addUsesLibrary(String libraryName) {
-        this.usesLibraries = CollectionUtils.add(this.usesLibraries,
-                TextUtils.safeIntern(libraryName));
+        libraryName = TextUtils.safeIntern(libraryName);
+        if (!ArrayUtils.contains(this.usesLibraries, libraryName)) {
+            this.usesLibraries = CollectionUtils.add(this.usesLibraries, libraryName);
+        }
         return this;
     }
 
     @Override
     public final PackageImpl addUsesNativeLibrary(String libraryName) {
-        this.usesNativeLibraries = CollectionUtils.add(this.usesNativeLibraries,
-                TextUtils.safeIntern(libraryName));
+        libraryName = TextUtils.safeIntern(libraryName);
+        if (!ArrayUtils.contains(this.usesNativeLibraries, libraryName)) {
+            this.usesNativeLibraries = CollectionUtils.add(this.usesNativeLibraries, libraryName);
+        }
         return this;
     }
 
     @Override
     public PackageImpl addUsesOptionalLibrary(String libraryName) {
-        this.usesOptionalLibraries = CollectionUtils.add(this.usesOptionalLibraries,
-                TextUtils.safeIntern(libraryName));
+        libraryName = TextUtils.safeIntern(libraryName);
+        if (!ArrayUtils.contains(this.usesOptionalLibraries, libraryName)) {
+            this.usesOptionalLibraries = CollectionUtils.add(this.usesOptionalLibraries,
+                    libraryName);
+        }
         return this;
     }
 
     @Override
     public final PackageImpl addUsesOptionalNativeLibrary(String libraryName) {
-        this.usesOptionalNativeLibraries = CollectionUtils.add(this.usesOptionalNativeLibraries,
-                TextUtils.safeIntern(libraryName));
+        libraryName = TextUtils.safeIntern(libraryName);
+        if (!ArrayUtils.contains(this.usesOptionalNativeLibraries, libraryName)) {
+            this.usesOptionalNativeLibraries = CollectionUtils.add(this.usesOptionalNativeLibraries,
+                    libraryName);
+        }
         return this;
     }
 
@@ -967,7 +977,7 @@
 
     @NonNull
     @Override
-    public List<String> getImplicitPermissions() {
+    public Set<String> getImplicitPermissions() {
         return implicitPermissions;
     }
 
@@ -1225,7 +1235,7 @@
     @NonNull
     @Override
     @Deprecated
-    public List<String> getRequestedPermissions() {
+    public Set<String> getRequestedPermissions() {
         return requestedPermissions;
     }
 
@@ -2729,7 +2739,7 @@
         usesOptionalNativeLibraries = Collections.unmodifiableList(usesOptionalNativeLibraries);
         originalPackages = Collections.unmodifiableList(originalPackages);
         adoptPermissions = Collections.unmodifiableList(adoptPermissions);
-        requestedPermissions = Collections.unmodifiableList(requestedPermissions);
+        requestedPermissions = Collections.unmodifiableSet(requestedPermissions);
         protectedBroadcasts = Collections.unmodifiableList(protectedBroadcasts);
         apexSystemServices = Collections.unmodifiableList(apexSystemServices);
 
@@ -2750,7 +2760,7 @@
         featureGroups = Collections.unmodifiableList(featureGroups);
         usesPermissions = Collections.unmodifiableList(usesPermissions);
         usesSdkLibraries = Collections.unmodifiableList(usesSdkLibraries);
-        implicitPermissions = Collections.unmodifiableList(implicitPermissions);
+        implicitPermissions = Collections.unmodifiableSet(implicitPermissions);
         upgradeKeySets = Collections.unmodifiableSet(upgradeKeySets);
         keySetMapping = Collections.unmodifiableMap(keySetMapping);
         attributions = Collections.unmodifiableList(attributions);
@@ -3121,9 +3131,9 @@
         dest.writeByteArray(this.restrictUpdateHash);
         dest.writeStringList(this.originalPackages);
         sForInternedStringList.parcel(this.adoptPermissions, dest, flags);
-        sForInternedStringList.parcel(this.requestedPermissions, dest, flags);
+        sForInternedStringSet.parcel(this.requestedPermissions, dest, flags);
         ParsingUtils.writeParcelableList(dest, this.usesPermissions);
-        sForInternedStringList.parcel(this.implicitPermissions, dest, flags);
+        sForInternedStringSet.parcel(this.implicitPermissions, dest, flags);
         sForStringSet.parcel(this.upgradeKeySets, dest, flags);
         ParsingPackageUtils.writeKeySetMapping(dest, this.keySetMapping);
         sForInternedStringList.parcel(this.protectedBroadcasts, dest, flags);
@@ -3273,10 +3283,10 @@
         this.restrictUpdateHash = in.createByteArray();
         this.originalPackages = in.createStringArrayList();
         this.adoptPermissions = sForInternedStringList.unparcel(in);
-        this.requestedPermissions = sForInternedStringList.unparcel(in);
+        this.requestedPermissions = sForInternedStringSet.unparcel(in);
         this.usesPermissions = ParsingUtils.createTypedInterfaceList(in,
                 ParsedUsesPermissionImpl.CREATOR);
-        this.implicitPermissions = sForInternedStringList.unparcel(in);
+        this.implicitPermissions = sForInternedStringSet.unparcel(in);
         this.upgradeKeySets = sForStringSet.unparcel(in);
         this.keySetMapping = ParsingPackageUtils.readKeySetMapping(in);
         this.protectedBroadcasts = sForInternedStringList.unparcel(in);
diff --git a/services/core/java/com/android/server/pm/permission/AccessTestingShimFactory.java b/services/core/java/com/android/server/pm/permission/AccessTestingShimFactory.java
new file mode 100644
index 0000000..0682e92
--- /dev/null
+++ b/services/core/java/com/android/server/pm/permission/AccessTestingShimFactory.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.server.pm.permission;
+
+import static android.provider.DeviceConfig.NAMESPACE_PRIVACY;
+
+import android.content.Context;
+import android.provider.DeviceConfig;
+
+import com.android.server.appop.AppOpsCheckingServiceInterface;
+import com.android.server.appop.AppOpsServiceTestingShim;
+
+import java.util.function.Supplier;
+
+/**
+ * A factory which will select one or both implementations of a PermissionManagerServiceInterface or
+ * AppOpsCheckingServiceInterface, based upon either a DeviceConfig value, or a hard coded config.
+ */
+public class AccessTestingShimFactory {
+
+    private static final int RUN_OLD_SUBSYSTEM = 0;
+    private static final int RUN_NEW_SUBSYSTEM = 1;
+    private static final int RUN_BOTH_SUBSYSTEMS = 2;
+    public static final String DEVICE_CONFIG_SETTING = "selected_access_subsystem";
+
+    /**
+     * Get the PermissionManagerServiceInterface, based upon the current config state.
+     */
+    public static PermissionManagerServiceInterface getPms(Context context,
+            Supplier<PermissionManagerServiceInterface> oldImpl,
+            Supplier<PermissionManagerServiceInterface> newImpl) {
+        int selectedSystem = DeviceConfig.getInt(NAMESPACE_PRIVACY,
+                DEVICE_CONFIG_SETTING, RUN_OLD_SUBSYSTEM);
+        switch (selectedSystem) {
+            case RUN_BOTH_SUBSYSTEMS:
+                return new PermissionManagerServiceTestingShim(oldImpl.get(), newImpl.get());
+            case RUN_NEW_SUBSYSTEM:
+                return newImpl.get();
+            default:
+                return oldImpl.get();
+        }
+    }
+
+    /**
+     * Get the AppOpsCheckingServiceInterface, based upon the current config state.
+     */
+    public static AppOpsCheckingServiceInterface getAos(Context context,
+            Supplier<AppOpsCheckingServiceInterface> oldImpl,
+            Supplier<AppOpsCheckingServiceInterface> newImpl) {
+        int selectedSystem = DeviceConfig.getInt(NAMESPACE_PRIVACY,
+                DEVICE_CONFIG_SETTING, RUN_OLD_SUBSYSTEM);
+        switch (selectedSystem) {
+            case RUN_BOTH_SUBSYSTEMS:
+                return new AppOpsServiceTestingShim(oldImpl.get(), newImpl.get());
+            case RUN_NEW_SUBSYSTEM:
+                return newImpl.get();
+            default:
+                return oldImpl.get();
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
index 5ac3439..c44b8852 100644
--- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
@@ -26,7 +26,6 @@
 import android.app.DownloadManager;
 import android.app.SearchManager;
 import android.app.admin.DevicePolicyManager;
-import android.companion.CompanionDeviceManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
@@ -219,7 +218,6 @@
         STORAGE_PERMISSIONS.add(Manifest.permission.READ_MEDIA_AUDIO);
         STORAGE_PERMISSIONS.add(Manifest.permission.READ_MEDIA_VIDEO);
         STORAGE_PERMISSIONS.add(Manifest.permission.READ_MEDIA_IMAGES);
-        STORAGE_PERMISSIONS.add(Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED);
     }
 
     private static final Set<String> NEARBY_DEVICES_PERMISSIONS = new ArraySet<>();
@@ -903,7 +901,7 @@
 
         // Companion devices
         grantSystemFixedPermissionsToSystemPackage(pm,
-                CompanionDeviceManager.COMPANION_DEVICE_DISCOVERY_PACKAGE_NAME, userId,
+                getDefaultCompanionDeviceManagerPackage(), userId,
                 ALWAYS_LOCATION_PERMISSIONS, NEARBY_DEVICES_PERMISSIONS);
 
         // Ringtone Picker
@@ -953,6 +951,10 @@
         return mContext.getString(R.string.config_defaultDockManagerPackageName);
     }
 
+    private String getDefaultCompanionDeviceManagerPackage() {
+        return mContext.getString(R.string.config_companionDeviceManagerPackage);
+    }
+
     @SafeVarargs
     private final void grantPermissionToEachSystemPackage(PackageManagerWrapper pm,
             ArrayList<String> packages, int userId, Set<String>... permissions) {
diff --git a/services/core/java/com/android/server/pm/permission/LegacyPermissionSettings.java b/services/core/java/com/android/server/pm/permission/LegacyPermissionSettings.java
index fc6d202..fe6cd4d 100644
--- a/services/core/java/com/android/server/pm/permission/LegacyPermissionSettings.java
+++ b/services/core/java/com/android/server/pm/permission/LegacyPermissionSettings.java
@@ -28,10 +28,10 @@
 import com.android.modules.utils.TypedXmlSerializer;
 import com.android.server.pm.DumpState;
 import com.android.server.pm.PackageManagerService;
+import com.android.server.pm.PackageManagerTracedLock;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlSerializer;
 
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -59,11 +59,7 @@
     private final ArrayMap<String, LegacyPermission> mPermissionTrees = new ArrayMap<>();
 
     @NonNull
-    private final Object mLock;
-
-    public LegacyPermissionSettings(@NonNull Object lock) {
-        mLock = lock;
-    }
+    private final PackageManagerTracedLock mLock = new PackageManagerTracedLock();
 
     @NonNull
     public List<LegacyPermission> getPermissions() {
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index 297ad73..b01a89e 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -70,6 +70,7 @@
 import android.util.SparseArray;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.Preconditions;
 import com.android.internal.util.function.TriFunction;
 import com.android.server.LocalServices;
@@ -79,6 +80,8 @@
 import com.android.server.pm.pkg.AndroidPackage;
 import com.android.server.pm.pkg.PackageState;
 
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -153,10 +156,13 @@
         LocalServices.addService(PermissionManagerServiceInternal.class, localService);
         LocalServices.addService(PermissionManagerInternal.class, localService);
 
-        mPermissionManagerServiceImpl = new PermissionManagerServiceImpl(context,
-                availableFeatures);
-        //mPermissionManagerServiceImpl = new PermissionManagerServiceLoggingDecorator(
-        //        LocalServices.getService(PermissionManagerServiceInterface.class));
+        if (PermissionManager.USE_ACCESS_CHECKING_SERVICE) {
+            mPermissionManagerServiceImpl = LocalServices.getService(
+                    PermissionManagerServiceInterface.class);
+        } else {
+            mPermissionManagerServiceImpl = new PermissionManagerServiceImpl(context,
+                    availableFeatures);
+        }
     }
 
     /**
@@ -212,9 +218,12 @@
         }
     }
 
-    private int checkPermission(String pkgName, String permName, @UserIdInt int userId) {
+    @Override
+    @PackageManager.PermissionResult
+    public int checkPermission(String packageName, String permissionName, int deviceId,
+            @UserIdInt int userId) {
         // Not using Objects.requireNonNull() here for compatibility reasons.
-        if (pkgName == null || permName == null) {
+        if (packageName == null || permissionName == null) {
             return PackageManager.PERMISSION_DENIED;
         }
 
@@ -224,15 +233,18 @@
         }
 
         if (checkPermissionDelegate == null) {
-            return mPermissionManagerServiceImpl.checkPermission(pkgName, permName, userId);
+            return mPermissionManagerServiceImpl.checkPermission(
+                    packageName, permissionName, userId);
         }
-        return checkPermissionDelegate.checkPermission(pkgName, permName, userId,
+        return checkPermissionDelegate.checkPermission(packageName, permissionName, userId,
                 mPermissionManagerServiceImpl::checkPermission);
     }
 
-    private int checkUidPermission(int uid, String permName) {
+    @Override
+    @PackageManager.PermissionResult
+    public int checkUidPermission(int uid, String permissionName, int deviceId) {
         // Not using Objects.requireNonNull() here for compatibility reasons.
-        if (permName == null) {
+        if (permissionName == null) {
             return PackageManager.PERMISSION_DENIED;
         }
 
@@ -242,9 +254,9 @@
         }
 
         if (checkPermissionDelegate == null)  {
-            return mPermissionManagerServiceImpl.checkUidPermission(uid, permName);
+            return mPermissionManagerServiceImpl.checkUidPermission(uid, permissionName);
         }
-        return checkPermissionDelegate.checkUidPermission(uid, permName,
+        return checkPermissionDelegate.checkUidPermission(uid, permissionName,
                 mPermissionManagerServiceImpl::checkUidPermission);
     }
 
@@ -390,13 +402,11 @@
         return oneTimePermissionUserManager;
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS)
     @Override
     public void startOneTimePermissionSession(String packageName, @UserIdInt int userId,
             long timeoutMillis, long revokeAfterKilledDelayMillis) {
-        mContext.enforceCallingOrSelfPermission(
-                Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS,
-                "Must hold " + Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS
-                        + " to register permissions as one time.");
+        startOneTimePermissionSession_enforcePermission();
         Objects.requireNonNull(packageName);
 
         final long token = Binder.clearCallingIdentity();
@@ -498,14 +508,15 @@
     }
 
     @Override
-    public int getPermissionFlags(String packageName, String permissionName, int userId) {
+    public int getPermissionFlags(String packageName, String permissionName, int deviceId,
+            int userId) {
         return mPermissionManagerServiceImpl
                 .getPermissionFlags(packageName, permissionName, userId);
     }
 
     @Override
     public void updatePermissionFlags(String packageName, String permissionName, int flagMask,
-            int flagValues, boolean checkAdjustPolicyFlagPermission, int userId) {
+            int flagValues, boolean checkAdjustPolicyFlagPermission, int deviceId, int userId) {
         mPermissionManagerServiceImpl.updatePermissionFlags(packageName, permissionName, flagMask,
                 flagValues, checkAdjustPolicyFlagPermission, userId);
     }
@@ -547,15 +558,16 @@
     }
 
     @Override
-    public void grantRuntimePermission(String packageName, String permissionName, int userId) {
+    public void grantRuntimePermission(String packageName, String permissionName, int deviceId,
+            int userId) {
         mPermissionManagerServiceImpl.grantRuntimePermission(packageName, permissionName, userId);
     }
 
     @Override
-    public void revokeRuntimePermission(String packageName, String permissionName, int userId,
-            String reason) {
-        mPermissionManagerServiceImpl.revokeRuntimePermission(packageName, permissionName, userId,
-                reason);
+    public void revokeRuntimePermission(String packageName, String permissionName, int deviceId,
+            int userId, String reason) {
+        mPermissionManagerServiceImpl.revokeRuntimePermission(packageName, permissionName,
+                userId, reason);
     }
 
     @Override
@@ -566,14 +578,14 @@
 
     @Override
     public boolean shouldShowRequestPermissionRationale(String packageName, String permissionName,
-            int userId) {
+            int deviceId, int userId) {
         return mPermissionManagerServiceImpl.shouldShowRequestPermissionRationale(packageName,
                 permissionName, userId);
     }
 
     @Override
     public boolean isPermissionRevokedByPolicy(String packageName, String permissionName,
-            int userId) {
+            int deviceId, int userId) {
         return mPermissionManagerServiceImpl
                 .isPermissionRevokedByPolicy(packageName, permissionName, userId);
     }
@@ -588,14 +600,14 @@
     private class PermissionManagerServiceInternalImpl implements PermissionManagerServiceInternal {
         @Override
         public int checkPermission(@NonNull String packageName, @NonNull String permissionName,
-                @UserIdInt int userId) {
+                int deviceId, @UserIdInt int userId) {
             return PermissionManagerService.this.checkPermission(packageName, permissionName,
-                    userId);
+                    deviceId, userId);
         }
 
         @Override
-        public int checkUidPermission(int uid, @NonNull String permissionName) {
-            return PermissionManagerService.this.checkUidPermission(uid, permissionName);
+        public int checkUidPermission(int uid, @NonNull String permissionName, int deviceId) {
+            return PermissionManagerService.this.checkUidPermission(uid, permissionName, deviceId);
         }
 
         @Override
@@ -686,6 +698,18 @@
             mPermissionManagerServiceImpl.writeLegacyPermissionsTEMP(legacyPermissionSettings);
         }
 
+        @Nullable
+        @Override
+        public String getDefaultPermissionGrantFingerprint(@UserIdInt int userId) {
+            return mPermissionManagerServiceImpl.getDefaultPermissionGrantFingerprint(userId);
+        }
+
+        @Override
+        public void setDefaultPermissionGrantFingerprint(@NonNull String fingerprint,
+                @UserIdInt int userId) {
+            mPermissionManagerServiceImpl.setDefaultPermissionGrantFingerprint(fingerprint, userId);
+        }
+
         @Override
         public void onPackageAdded(@NonNull PackageState packageState, boolean isInstantApp,
                 @Nullable AndroidPackage oldPkg) {
@@ -722,23 +746,21 @@
         public void onPackageUninstalled(@NonNull String packageName, int appId,
                 @NonNull PackageState packageState, @Nullable AndroidPackage pkg,
                 @NonNull List<AndroidPackage> sharedUserPkgs, @UserIdInt int userId) {
+            if (userId != UserHandle.USER_ALL) {
+                final int[] userIds = getAllUserIds();
+                if (!ArrayUtils.contains(userIds, userId)) {
+                    // This may happen due to DeletePackageHelper.removeUnusedPackagesLPw() calling
+                    // deletePackageX() asynchronously.
+                    Slog.w(LOG_TAG, "Skipping onPackageUninstalled() for non-existent user "
+                            + userId);
+                    return;
+                }
+            }
             mPermissionManagerServiceImpl.onPackageUninstalled(packageName, appId, packageState,
                     pkg, sharedUserPkgs, userId);
         }
 
         @Override
-        public void addOnRuntimePermissionStateChangedListener(
-                OnRuntimePermissionStateChangedListener listener) {
-            mPermissionManagerServiceImpl.addOnRuntimePermissionStateChangedListener(listener);
-        }
-
-        @Override
-        public void removeOnRuntimePermissionStateChangedListener(
-                OnRuntimePermissionStateChangedListener listener) {
-            mPermissionManagerServiceImpl.removeOnRuntimePermissionStateChangedListener(listener);
-        }
-
-        @Override
         public void onSystemReady() {
             mPermissionManagerServiceImpl.onSystemReady();
         }
@@ -791,6 +813,7 @@
         public void resetRuntimePermissions(@NonNull AndroidPackage pkg, @UserIdInt int userId) {
             mPermissionManagerServiceImpl.resetRuntimePermissions(pkg, userId);
         }
+
         @Override
         public void resetRuntimePermissionsForUser(@UserIdInt int userId) {
             mPermissionManagerServiceImpl.resetRuntimePermissionsForUser(userId);
@@ -1207,8 +1230,7 @@
             }
 
             if (!fromDatasource && !checkPermission(context, permissionManagerServiceInt,
-                    permission, attributionSource.getUid(),
-                    attributionSource.getRenouncedPermissions())) {
+                    permission, attributionSource)) {
                 return PermissionChecker.PERMISSION_HARD_DENIED;
             }
 
@@ -1269,12 +1291,11 @@
                     }
                     case AppOpsManager.MODE_DEFAULT: {
                         if (!skipCurrentChecks && !checkPermission(context,
-                                permissionManagerServiceInt, permission, attributionSource.getUid(),
-                                attributionSource.getRenouncedPermissions())) {
+                                permissionManagerServiceInt, permission, attributionSource)) {
                             return PermissionChecker.PERMISSION_HARD_DENIED;
                         }
                         if (next != null && !checkPermission(context, permissionManagerServiceInt,
-                                permission, next.getUid(), next.getRenouncedPermissions())) {
+                                permission, next)) {
                             return PermissionChecker.PERMISSION_HARD_DENIED;
                         }
                     }
@@ -1303,8 +1324,7 @@
             // We consider the chain trusted if the start node has UPDATE_APP_OPS_STATS, and
             // every attributionSource in the chain is registered with the system.
             final boolean isChainStartTrusted = !hasChain || checkPermission(context,
-                    permissionManagerServiceInt, UPDATE_APP_OPS_STATS, current.getUid(),
-                    current.getRenouncedPermissions());
+                    permissionManagerServiceInt, UPDATE_APP_OPS_STATS, current);
 
             while (true) {
                 final boolean skipCurrentChecks = (fromDatasource || next != null);
@@ -1319,12 +1339,12 @@
 
                 // If we already checked the permission for this one, skip the work
                 if (!skipCurrentChecks && !checkPermission(context, permissionManagerServiceInt,
-                        permission, current.getUid(), current.getRenouncedPermissions())) {
+                        permission, current)) {
                     return PermissionChecker.PERMISSION_HARD_DENIED;
                 }
 
                 if (next != null && !checkPermission(context, permissionManagerServiceInt,
-                        permission, next.getUid(), next.getRenouncedPermissions())) {
+                        permission, next)) {
                     return PermissionChecker.PERMISSION_HARD_DENIED;
                 }
 
@@ -1392,9 +1412,13 @@
 
         private static boolean checkPermission(@NonNull Context context,
                 @NonNull PermissionManagerServiceInternal permissionManagerServiceInt,
-                @NonNull String permission, int uid, @NonNull Set<String> renouncedPermissions) {
-            boolean permissionGranted = context.checkPermission(permission, /*pid*/ -1,
-                    uid) == PackageManager.PERMISSION_GRANTED;
+                @NonNull String permission, AttributionSource attributionSource) {
+            int uid = attributionSource.getUid();
+            int deviceId = attributionSource.getDeviceId();
+            final Context deviceContext = context.getDeviceId() == deviceId ? context
+                    : context.createDeviceContext(deviceId);
+            boolean permissionGranted = deviceContext.checkPermission(permission,
+                    Process.INVALID_PID, uid) == PackageManager.PERMISSION_GRANTED;
 
             // Override certain permissions checks for the shared isolated process for both
             // HotwordDetectionService and VisualQueryDetectionService, which ordinarily cannot hold
@@ -1410,10 +1434,10 @@
                 permissionGranted = hotwordServiceProvider != null
                         && uid == hotwordServiceProvider.getUid();
             }
-
+            Set<String> renouncedPermissions = attributionSource.getRenouncedPermissions();
             if (permissionGranted && renouncedPermissions.contains(permission)
-                    && context.checkPermission(Manifest.permission.RENOUNCE_PERMISSIONS,
-                    /*pid*/ -1, uid) == PackageManager.PERMISSION_GRANTED) {
+                    && deviceContext.checkPermission(Manifest.permission.RENOUNCE_PERMISSIONS,
+                        Process.INVALID_PID, uid) == PackageManager.PERMISSION_GRANTED) {
                 return false;
             }
             return permissionGranted;
@@ -1484,8 +1508,7 @@
             // We consider the chain trusted if the start node has UPDATE_APP_OPS_STATS, and
             // every attributionSource in the chain is registered with the system.
             final boolean isChainStartTrusted = !hasChain || checkPermission(context,
-                    permissionManagerServiceInt, UPDATE_APP_OPS_STATS, current.getUid(),
-                    current.getRenouncedPermissions());
+                    permissionManagerServiceInt, UPDATE_APP_OPS_STATS, current);
 
             while (true) {
                 final boolean skipCurrentChecks = (next != null);
@@ -1777,4 +1800,10 @@
             return false;
         }
     }
+
+    @Override
+    protected void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter writer,
+            @Nullable String[] args) {
+        mPermissionManagerServiceImpl.dump(fd, writer, args);
+    }
 }
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 2144654..4353c57 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
@@ -121,10 +121,8 @@
 import com.android.internal.os.RoSystemProperties;
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.CollectionUtils;
-import com.android.internal.util.DumpUtils;
 import com.android.internal.util.IntPair;
 import com.android.internal.util.Preconditions;
-import com.android.internal.util.function.pooled.PooledLambda;
 import com.android.server.FgThread;
 import com.android.server.LocalServices;
 import com.android.server.PermissionThread;
@@ -134,6 +132,7 @@
 import com.android.server.pm.ApexManager;
 import com.android.server.pm.KnownPackages;
 import com.android.server.pm.PackageInstallerService;
+import com.android.server.pm.PackageManagerTracedLock;
 import com.android.server.pm.UserManagerInternal;
 import com.android.server.pm.UserManagerService;
 import com.android.server.pm.parsing.PackageInfoUtils;
@@ -253,7 +252,7 @@
             new ArraySet<>();
 
     /** Lock to protect internal data access */
-    private final Object mLock = new Object();
+    private final PackageManagerTracedLock mLock = new PackageManagerTracedLock();
 
     /** Internal connection to the package manager */
     private final PackageManagerInternal mPackageManagerInt;
@@ -310,12 +309,6 @@
     @GuardedBy("mLock")
     private final SparseBooleanArray mHasNoDelayedPermBackup = new SparseBooleanArray();
 
-    /** Listeners for permission state (granting and flags) changes */
-    @GuardedBy("mLock")
-    private final ArrayList<PermissionManagerServiceInternal
-            .OnRuntimePermissionStateChangedListener>
-            mRuntimePermissionStateChangedListeners = new ArrayList<>();
-
     private final boolean mIsLeanback;
 
     @NonNull
@@ -394,7 +387,11 @@
             mPackageManagerInt.writeSettings(true);
         }
         @Override
-        public void onPermissionUpdated(int[] userIds, boolean sync) {
+        public void onPermissionUpdated(int[] userIds, boolean sync, int appId) {
+            for (int i = 0; i < userIds.length; i++) {
+                int uid = UserHandle.getUid(userIds[i], appId);
+                mOnPermissionChangeListeners.onPermissionsChanged(uid);
+            }
             mPackageManagerInt.writePermissionSettings(userIds, !sync);
         }
         @Override
@@ -405,18 +402,6 @@
         public void onPermissionRemoved() {
             mPackageManagerInt.writeSettings(false);
         }
-        public void onPermissionUpdatedNotifyListener(@UserIdInt int[] updatedUserIds, boolean sync,
-                int uid) {
-            onPermissionUpdated(updatedUserIds, sync);
-            for (int i = 0; i < updatedUserIds.length; i++) {
-                int userUid = UserHandle.getUid(updatedUserIds[i], UserHandle.getAppId(uid));
-                mOnPermissionChangeListeners.onPermissionsChanged(userUid);
-            }
-        }
-        public void onInstallPermissionUpdatedNotifyListener(int uid) {
-            onInstallPermissionUpdated();
-            mOnPermissionChangeListeners.onPermissionsChanged(uid);
-        }
     };
 
     public PermissionManagerServiceImpl(@NonNull Context context,
@@ -475,13 +460,7 @@
     }
 
     @Override
-    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) {
-            return;
-        }
-
-        mContext.getSystemService(PermissionControllerManager.class).dump(fd, args);
-    }
+    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {}
 
     /**
      * This method should typically only be used when granting or revoking
@@ -816,12 +795,6 @@
             flagValues &= ~FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT;
             flagValues &= ~FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT;
             flagValues &= ~PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION;
-            // REVIEW_REQUIRED can be set on any permission by the shell or the root uid, or by
-            // any app for the POST_NOTIFICATIONS permission specifically.
-            if (!POST_NOTIFICATIONS.equals(permName) && callingUid != Process.SHELL_UID
-                    && callingUid != Process.ROOT_UID) {
-                flagValues &= ~PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED;
-            }
         }
 
         final AndroidPackage pkg = mPackageManagerInt.getPackage(packageName);
@@ -878,17 +851,13 @@
             permissionUpdated = uidState.updatePermissionFlags(bp, flagMask, flagValues);
         }
 
-        if (permissionUpdated && isRuntimePermission) {
-            notifyRuntimePermissionStateChanged(packageName, userId);
-        }
         if (permissionUpdated && callback != null) {
             // Install and runtime permissions are stored in different places,
             // so figure out what permission changed and persist the change.
             if (!isRuntimePermission) {
-                int userUid = UserHandle.getUid(userId, pkg.getUid());
-                callback.onInstallPermissionUpdatedNotifyListener(userUid);
+                callback.onInstallPermissionUpdated();
             } else {
-                callback.onPermissionUpdatedNotifyListener(new int[]{userId}, false, pkg.getUid());
+                callback.onPermissionUpdated(new int[]{ userId }, false, pkg.getUid());
             }
         }
     }
@@ -1150,9 +1119,7 @@
 
             ArrayList<String> allowlistedPermissions = null;
 
-            final int permissionCount = ArrayUtils.size(pkg.getRequestedPermissions());
-            for (int i = 0; i < permissionCount; i++) {
-                final String permissionName = pkg.getRequestedPermissions().get(i);
+            for (final String permissionName : pkg.getRequestedPermissions()) {
                 final int currentFlags =
                         uidState.getPermissionFlags(permissionName);
                 if ((currentFlags & queryFlags) != 0) {
@@ -1498,10 +1465,6 @@
                 callback.onGidsChanged(UserHandle.getAppId(pkg.getUid()), userId);
             }
         }
-
-        if (isRuntimePermission) {
-            notifyRuntimePermissionStateChanged(packageName, userId);
-        }
     }
 
     @Override
@@ -1656,10 +1619,6 @@
                 mDefaultPermissionCallback.onInstallPermissionRevoked();
             }
         }
-
-        if (isRuntimePermission) {
-            notifyRuntimePermissionStateChanged(packageName, userId);
-        }
     }
 
     private boolean mayManageRolePermission(int uid) {
@@ -1715,8 +1674,9 @@
                 mDefaultPermissionCallback.onInstallPermissionRevoked();
             }
 
-            public void onPermissionUpdated(int[] updatedUserIds, boolean sync) {
-                for (int userId : updatedUserIds) {
+            public void onPermissionUpdated(int[] userIds, boolean sync, int appId) {
+                mOnPermissionChangeListeners.onPermissionsChanged(appId);
+                for (int userId : userIds) {
                     if (sync) {
                         syncUpdatedUsers.add(userId);
                         asyncUpdatedUsers.remove(userId);
@@ -1736,16 +1696,6 @@
             public void onInstallPermissionUpdated() {
                 mDefaultPermissionCallback.onInstallPermissionUpdated();
             }
-
-            public void onPermissionUpdatedNotifyListener(@UserIdInt int[] updatedUserIds,
-                    boolean sync, int uid) {
-                onPermissionUpdated(updatedUserIds, sync);
-                mOnPermissionChangeListeners.onPermissionsChanged(uid);
-            }
-
-            public void onInstallPermissionUpdatedNotifyListener(int uid) {
-                mDefaultPermissionCallback.onInstallPermissionUpdatedNotifyListener(uid);
-            }
         };
 
         if (filterPkg != null) {
@@ -1796,10 +1746,11 @@
                 | FLAG_PERMISSION_POLICY_FIXED;
 
         final String packageName = pkg.getPackageName();
-        final int permissionCount = ArrayUtils.size(pkg.getRequestedPermissions());
-        for (int i = 0; i < permissionCount; i++) {
-            final String permName = pkg.getRequestedPermissions().get(i);
-
+        for (final String permName : pkg.getRequestedPermissions()) {
+            if (mIsLeanback && NOTIFICATION_PERMISSIONS.contains(permName)) {
+                // Do not reset the Notification permissions on TV
+                continue;
+            }
             final boolean isRuntimePermission;
             synchronized (mLock) {
                 final Permission permission = mRegistry.getPermission(permName);
@@ -2073,45 +2024,6 @@
                 });
     }
 
-    @Override
-    public void addOnRuntimePermissionStateChangedListener(
-            PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener listener) {
-        synchronized (mLock) {
-            mRuntimePermissionStateChangedListeners.add(listener);
-        }
-    }
-
-    @Override
-    public void removeOnRuntimePermissionStateChangedListener(
-            PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener listener) {
-        synchronized (mLock) {
-            mRuntimePermissionStateChangedListeners.remove(listener);
-        }
-    }
-
-    private void notifyRuntimePermissionStateChanged(@NonNull String packageName,
-            @UserIdInt int userId) {
-        FgThread.getHandler().sendMessage(PooledLambda.obtainMessage(
-                PermissionManagerServiceImpl::doNotifyRuntimePermissionStateChanged,
-                PermissionManagerServiceImpl.this, packageName, userId));
-    }
-
-    private void doNotifyRuntimePermissionStateChanged(@NonNull String packageName,
-            @UserIdInt int userId) {
-        final ArrayList<PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener>
-                listeners;
-        synchronized (mLock) {
-            if (mRuntimePermissionStateChangedListeners.isEmpty()) {
-                return;
-            }
-            listeners = new ArrayList<>(mRuntimePermissionStateChangedListeners);
-        }
-        final int listenerCount = listeners.size();
-        for (int i = 0; i < listenerCount; i++) {
-            listeners.get(i).onRuntimePermissionStateChanged(packageName, userId);
-        }
-    }
-
     /**
      * If the app is updated, and has scoped storage permissions, then it is possible that the
      * app updated in an attempt to get unscoped storage. If so, revoke all storage permissions.
@@ -2134,11 +2046,9 @@
 
         final int callingUid = Binder.getCallingUid();
         for (int userId: getAllUserIds()) {
-            int numRequestedPermissions = newPackage.getRequestedPermissions().size();
-            for (int i = 0; i < numRequestedPermissions; i++) {
-                PermissionInfo permInfo = getPermissionInfo(
-                        newPackage.getRequestedPermissions().get(i),
-                        0, newPackage.getPackageName());
+            for (final String permName : newPackage.getRequestedPermissions()) {
+                PermissionInfo permInfo = getPermissionInfo(permName, 0,
+                        newPackage.getPackageName());
                 if (permInfo == null) {
                     continue;
                 }
@@ -2476,10 +2386,8 @@
                 if (DEBUG_REMOVE) Log.d(TAG, "  Permissions: " + r);
             }
 
-            n = pkg.getRequestedPermissions().size();
             r = null;
-            for (int i = 0; i < n; i++) {
-                final String permissionName = pkg.getRequestedPermissions().get(i);
+            for (final String permissionName : pkg.getRequestedPermissions()) {
                 final Permission permission = mRegistry.getPermission(permissionName);
                 if (permission != null && permission.isAppOp()) {
                     mRegistry.removeAppOpPermissionPackage(permissionName,
@@ -2597,11 +2505,8 @@
         ArraySet<String> shouldGrantSignaturePermission = null;
         ArraySet<String> shouldGrantInternalPermission = null;
         ArraySet<String> shouldGrantPrivilegedPermissionIfWasGranted = new ArraySet<>();
-        final List<String> requestedPermissions = pkg.getRequestedPermissions();
-        final int requestedPermissionsSize = requestedPermissions.size();
-        for (int i = 0; i < requestedPermissionsSize; i++) {
-            final String permissionName = pkg.getRequestedPermissions().get(i);
-
+        final Set<String> requestedPermissions = pkg.getRequestedPermissions();
+        for (final String permissionName : pkg.getRequestedPermissions()) {
             final Permission permission;
             synchronized (mLock) {
                 permission = mRegistry.getPermission(permissionName);
@@ -2732,9 +2637,7 @@
                 ArraySet<String> newImplicitPermissions = new ArraySet<>();
                 final String friendlyName = pkg.getPackageName() + "(" + pkg.getUid() + ")";
 
-                for (int i = 0; i < requestedPermissionsSize; i++) {
-                    final String permName = requestedPermissions.get(i);
-
+                for (final String permName : requestedPermissions) {
                     final Permission bp = mRegistry.getPermission(permName);
                     final boolean appSupportsRuntimePermissions =
                             pkg.getTargetSdkVersion() >= Build.VERSION_CODES.M;
@@ -3031,11 +2934,7 @@
         if (callback != null) {
             callback.onPermissionUpdated(updatedUserIds,
                     (changingPackageName != null && replace && installPermissionsChanged)
-                            || runtimePermissionsRevoked);
-        }
-
-        for (int userId : updatedUserIds) {
-            notifyRuntimePermissionStateChanged(pkg.getPackageName(), userId);
+                            || runtimePermissionsRevoked, pkg.getUid());
         }
     }
 
@@ -3734,12 +3633,9 @@
             @UserIdInt int userId) {
         ArraySet<String> oldGrantedRestrictedPermissions = null;
         boolean updatePermissions = false;
-        final int permissionCount = pkg.getRequestedPermissions().size();
         final int myUid = Process.myUid();
 
-        for (int j = 0; j < permissionCount; j++) {
-            final String permissionName = pkg.getRequestedPermissions().get(j);
-
+        for (final String permissionName : pkg.getRequestedPermissions()) {
             final boolean isGranted;
             synchronized (mLock) {
                 final Permission bp = mRegistry.getPermission(permissionName);
@@ -3862,7 +3758,8 @@
                     isGranted = uidState.isPermissionGranted(permissionName);
                 }
                 if (!isGranted) {
-                    mDefaultPermissionCallback.onPermissionRevoked(pkg.getUid(), userId, null);
+                    mDefaultPermissionCallback.onPermissionRevoked(
+                            UserHandle.getUid(userId, pkg.getUid()), userId, null);
                     break;
                 }
             }
@@ -4706,6 +4603,19 @@
         }
     }
 
+    @Nullable
+    @Override
+    public String getDefaultPermissionGrantFingerprint(@UserIdInt int userId) {
+        return mPackageManagerInt.isPermissionUpgradeNeeded(userId) ? null : Build.FINGERPRINT;
+    }
+
+    @Override
+    public void setDefaultPermissionGrantFingerprint(@NonNull String fingerprint,
+            @UserIdInt int userId) {
+        // Ignored - default permission grant here shares the same version with runtime permission
+        // upgrade, and the new version is set by that later.
+    }
+
     private void onPackageAddedInternal(@NonNull PackageState packageState,
             @NonNull AndroidPackage pkg, boolean isInstantApp, @Nullable AndroidPackage oldPkg) {
         if (!pkg.getAdoptPermissions().isEmpty()) {
@@ -5356,25 +5266,14 @@
         public void onPermissionGranted(int uid, @UserIdInt int userId) {}
         public void onInstallPermissionGranted() {}
         public void onPermissionRevoked(int uid, @UserIdInt int userId, String reason) {
-            onPermissionRevoked(uid, userId, reason, false);
-        }
-        public void onPermissionRevoked(int uid, @UserIdInt int userId, String reason,
-                boolean overrideKill) {
             onPermissionRevoked(uid, userId, reason, false, null);
         }
         public void onPermissionRevoked(int uid, @UserIdInt int userId, String reason,
                 boolean overrideKill, @Nullable String permissionName) {}
         public void onInstallPermissionRevoked() {}
-        public void onPermissionUpdated(@UserIdInt int[] updatedUserIds, boolean sync) {}
-        public void onPermissionUpdatedNotifyListener(@UserIdInt int[] updatedUserIds, boolean sync,
-                int uid) {
-            onPermissionUpdated(updatedUserIds, sync);
-        }
+        public void onPermissionUpdated(@UserIdInt int[] userIds, boolean sync, int appId) {}
         public void onPermissionRemoved() {}
         public void onInstallPermissionUpdated() {}
-        public void onInstallPermissionUpdatedNotifyListener(int uid) {
-            onInstallPermissionUpdated();
-        }
     }
 
     private static final class OnPermissionChangeListeners extends Handler {
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java
index b62c64b..128f847 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java
@@ -383,24 +383,6 @@
     int checkUidPermission(int uid, String permName);
 
     /**
-     * Adds a listener for runtime permission state (permissions or flags) changes.
-     *
-     * @param listener The listener.
-     */
-    void addOnRuntimePermissionStateChangedListener(
-            @NonNull PermissionManagerServiceInternal
-                    .OnRuntimePermissionStateChangedListener listener);
-
-    /**
-     * Removes a listener for runtime permission state (permissions or flags) changes.
-     *
-     * @param listener The listener.
-     */
-    void removeOnRuntimePermissionStateChangedListener(
-            @NonNull PermissionManagerServiceInternal
-                    .OnRuntimePermissionStateChangedListener listener);
-
-    /**
      * Get all the package names requesting app op permissions.
      *
      * @return a map of app op permission names to package names requesting them
@@ -541,6 +523,17 @@
     void writeLegacyPermissionsTEMP(@NonNull LegacyPermissionSettings legacyPermissionSettings);
 
     /**
+     * Get the fingerprint for default permission grants.
+     */
+    @Nullable
+    String getDefaultPermissionGrantFingerprint(@UserIdInt int userId);
+
+    /**
+     * Set the fingerprint for default permission grants.
+     */
+    void setDefaultPermissionGrantFingerprint(@NonNull String fingerprint, @UserIdInt int userId);
+
+    /**
      * Callback when the system is ready.
      */
     void onSystemReady();
@@ -621,6 +614,6 @@
      * @param userId the user ID the package is uninstalled for
      */
     void onPackageUninstalled(@NonNull String packageName, int appId,
-            @NonNull PackageState packageState, @NonNull AndroidPackage pkg,
+            @NonNull PackageState packageState, @Nullable AndroidPackage pkg,
             @NonNull List<AndroidPackage> sharedUserPkgs, @UserIdInt int userId);
 }
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java
index 4dd6966..98adeb6 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java
@@ -46,12 +46,13 @@
      *
      * @param packageName the name of the package you are checking against
      * @param permissionName the name of the permission you are checking for
+     * @param deviceId the device ID
      * @param userId the user ID
      * @return {@code PERMISSION_GRANTED} if the permission is granted, or {@code PERMISSION_DENIED}
      *         otherwise
      */
     //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
-    int checkPermission(@NonNull String packageName, @NonNull String permissionName,
+    int checkPermission(@NonNull String packageName, @NonNull String permissionName, int deviceId,
             @UserIdInt int userId);
 
     /**
@@ -59,27 +60,12 @@
      *
      * @param uid the UID
      * @param permissionName the name of the permission you are checking for
+     * @param deviceId the device for which you are checking the permission
      * @return {@code PERMISSION_GRANTED} if the permission is granted, or {@code PERMISSION_DENIED}
      *         otherwise
      */
     //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
-    int checkUidPermission(int uid, @NonNull String permissionName);
-
-    /**
-     * Adds a listener for runtime permission state (permissions or flags) changes.
-     *
-     * @param listener The listener.
-     */
-    void addOnRuntimePermissionStateChangedListener(
-            @NonNull OnRuntimePermissionStateChangedListener listener);
-
-    /**
-     * Removes a listener for runtime permission state (permissions or flags) changes.
-     *
-     * @param listener The listener.
-     */
-    void removeOnRuntimePermissionStateChangedListener(
-            @NonNull OnRuntimePermissionStateChangedListener listener);
+    int checkUidPermission(int uid, @NonNull String permissionName, int deviceId);
 
     /**
      * Get whether permission review is required for a package.
@@ -89,8 +75,7 @@
      * @return whether permission review is required
      */
     //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
-    boolean isPermissionsReviewRequired(@NonNull String packageName,
-            @UserIdInt int userId);
+    boolean isPermissionsReviewRequired(@NonNull String packageName, @UserIdInt int userId);
 
     /**
      * Reset the runtime permission state changes for a package.
@@ -101,8 +86,7 @@
      * @param userId the user ID
      */
     //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
-    void resetRuntimePermissions(@NonNull AndroidPackage pkg,
-            @UserIdInt int userId);
+    void resetRuntimePermissions(@NonNull AndroidPackage pkg, @UserIdInt int userId);
 
     /**
      * Reset the runtime permission state changes for all packages in a user.
@@ -231,6 +215,17 @@
     void writeLegacyPermissionsTEMP(@NonNull LegacyPermissionSettings legacyPermissionSettings);
 
     /**
+     * Get the fingerprint for default permission grants.
+     */
+    @Nullable
+    String getDefaultPermissionGrantFingerprint(@UserIdInt int userId);
+
+    /**
+     * Set the fingerprint for default permission grants.
+     */
+    void setDefaultPermissionGrantFingerprint(@NonNull String fingerprint, @UserIdInt int userId);
+
+    /**
      * Callback when the system is ready.
      */
     //@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
@@ -313,22 +308,6 @@
             @NonNull List<AndroidPackage> sharedUserPkgs, @UserIdInt int userId);
 
     /**
-     * Listener for package permission state (permissions or flags) changes.
-     */
-    interface OnRuntimePermissionStateChangedListener {
-
-        /**
-         * Called when the runtime permission state (permissions or flags) changed.
-         *
-         * @param packageName The package for which the change happened.
-         * @param userId the user id for which the change happened.
-         */
-        @Nullable
-        void onRuntimePermissionStateChanged(@NonNull String packageName,
-                @UserIdInt int userId);
-    }
-
-    /**
      * The permission-related parameters passed in for package installation.
      *
      * @see SessionParams
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceLoggingDecorator.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceLoggingDecorator.java
index a6fa304..7f98e21 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceLoggingDecorator.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceLoggingDecorator.java
@@ -238,23 +238,6 @@
     }
 
     @Override
-    public void addOnRuntimePermissionStateChangedListener(
-            @NonNull PermissionManagerServiceInternal
-                    .OnRuntimePermissionStateChangedListener listener) {
-        Log.i(LOG_TAG, "addOnRuntimePermissionStateChangedListener(listener = " + listener + ")");
-        mService.addOnRuntimePermissionStateChangedListener(listener);
-    }
-
-    @Override
-    public void removeOnRuntimePermissionStateChangedListener(
-            @NonNull PermissionManagerServiceInternal
-                    .OnRuntimePermissionStateChangedListener listener) {
-        Log.i(LOG_TAG, "removeOnRuntimePermissionStateChangedListener(listener = " + listener
-                + ")");
-        mService.removeOnRuntimePermissionStateChangedListener(listener);
-    }
-
-    @Override
     public Map<String, Set<String>> getAllAppOpPermissionPackages() {
         Log.i(LOG_TAG, "getAllAppOpPermissionPackages()");
         return mService.getAllAppOpPermissionPackages();
@@ -373,6 +356,20 @@
         mService.writeLegacyPermissionsTEMP(legacyPermissionSettings);
     }
 
+    @Nullable
+    @Override
+    public String getDefaultPermissionGrantFingerprint(int userId) {
+        Log.i(LOG_TAG, "getDefaultPermissionGrantFingerprint(userId = " + userId + ")");
+        return mService.getDefaultPermissionGrantFingerprint(userId);
+    }
+
+    @Override
+    public void setDefaultPermissionGrantFingerprint(@NonNull String fingerprint, int userId) {
+        Log.i(LOG_TAG, "setDefaultPermissionGrantFingerprint(fingerprint = " + fingerprint
+                + ", userId = " + userId + ")");
+        mService.setDefaultPermissionGrantFingerprint(fingerprint, userId);
+    }
+
     @Override
     public void onSystemReady() {
         Log.i(LOG_TAG, "onSystemReady()");
@@ -429,7 +426,7 @@
 
     @Override
     public void onPackageUninstalled(@NonNull String packageName, int appId,
-            @NonNull PackageState packageState, @NonNull AndroidPackage pkg,
+            @NonNull PackageState packageState, @Nullable AndroidPackage pkg,
             @NonNull List<AndroidPackage> sharedUserPkgs, int userId) {
         Log.i(LOG_TAG, "onPackageUninstalled(packageName = " + packageName + ", appId = " + appId
                 + ", packageState = " + packageState + ", pkg = " + pkg + ", sharedUserPkgs = "
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTestingShim.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTestingShim.java
new file mode 100644
index 0000000..d4c6d42
--- /dev/null
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTestingShim.java
@@ -0,0 +1,572 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.permission;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.UserIdInt;
+import android.content.pm.PermissionGroupInfo;
+import android.content.pm.PermissionInfo;
+import android.content.pm.permission.SplitPermissionInfoParcelable;
+import android.os.Build;
+import android.permission.IOnPermissionsChangeListener;
+
+import com.android.server.pm.pkg.AndroidPackage;
+import com.android.server.pm.pkg.PackageState;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+
+/**
+ * A testing shim, which supports running two variants of a PermissionManagerServiceInterface at
+ * once, and checking the results of both.
+ */
+public class PermissionManagerServiceTestingShim implements PermissionManagerServiceInterface {
+
+    private PermissionManagerServiceInterface mOldImplementation;
+    private PermissionManagerServiceInterface mNewImplementation;
+
+    public PermissionManagerServiceTestingShim(PermissionManagerServiceInterface oldImpl,
+            PermissionManagerServiceInterface newImpl) {
+        mOldImplementation = oldImpl;
+        mNewImplementation = newImpl;
+    }
+
+    private void signalImplDifference(String message) {
+        //TODO b/252886104 implement
+    }
+
+
+    @Nullable
+    @Override
+    public byte[] backupRuntimePermissions(int userId) {
+        byte[] oldVal = mOldImplementation.backupRuntimePermissions(userId);
+        byte[] newVal = mNewImplementation.backupRuntimePermissions(userId);
+        if (!Arrays.equals(oldVal, newVal)) {
+            signalImplDifference("backupRuntimePermissions");
+        }
+
+        return newVal;
+    }
+
+    @Override
+    public void restoreRuntimePermissions(@NonNull byte[] backup, int userId) {
+        mOldImplementation.backupRuntimePermissions(userId);
+        mNewImplementation.backupRuntimePermissions(userId);
+    }
+
+    @Override
+    public void restoreDelayedRuntimePermissions(@NonNull String packageName, int userId) {
+        mOldImplementation.restoreDelayedRuntimePermissions(packageName, userId);
+        mNewImplementation.restoreDelayedRuntimePermissions(packageName, userId);
+
+    }
+
+    @Override
+    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+        mOldImplementation.dump(fd, pw, args);
+        mNewImplementation.dump(fd, pw, args);
+    }
+
+    @Override
+    public List<PermissionGroupInfo> getAllPermissionGroups(int flags) {
+        List<PermissionGroupInfo> oldVal = mOldImplementation.getAllPermissionGroups(flags);
+        List<PermissionGroupInfo> newVal = mNewImplementation.getAllPermissionGroups(flags);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getAllPermissionGroups");
+        }
+        return newVal;
+    }
+
+    @Override
+    public PermissionGroupInfo getPermissionGroupInfo(String groupName, int flags) {
+        PermissionGroupInfo oldVal = mOldImplementation.getPermissionGroupInfo(groupName, flags);
+        PermissionGroupInfo newVal = mNewImplementation.getPermissionGroupInfo(groupName, flags);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getPermissionGroupInfo");
+        }
+        return newVal;
+    }
+
+    @Override
+    public PermissionInfo getPermissionInfo(@NonNull String permName, int flags,
+            @NonNull String opPackageName) {
+        PermissionInfo oldVal = mOldImplementation.getPermissionInfo(permName, flags,
+                opPackageName);
+        PermissionInfo newVal = mNewImplementation.getPermissionInfo(permName, flags,
+                opPackageName);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getPermissionInfo");
+        }
+        return newVal;
+    }
+
+    @Override
+    public List<PermissionInfo> queryPermissionsByGroup(String groupName, int flags) {
+        List<PermissionInfo> oldVal = mOldImplementation.queryPermissionsByGroup(groupName,
+                flags);
+        List<PermissionInfo> newVal = mNewImplementation.queryPermissionsByGroup(groupName, flags);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("queryPermissionsByGroup");
+        }
+        return newVal;
+    }
+
+    @Override
+    public boolean addPermission(PermissionInfo info, boolean async) {
+        boolean oldVal = mOldImplementation.addPermission(info, async);
+        boolean newVal = mNewImplementation.addPermission(info, async);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("addPermission");
+        }
+        return newVal;
+    }
+
+    @Override
+    public void removePermission(String permName) {
+        mOldImplementation.removePermission(permName);
+        mNewImplementation.removePermission(permName);
+    }
+
+    @Override
+    public int getPermissionFlags(String packageName, String permName, int userId) {
+        int oldVal = mOldImplementation.getPermissionFlags(packageName, permName, userId);
+        int newVal = mNewImplementation.getPermissionFlags(packageName, permName, userId);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getPermissionFlags");
+        }
+        return newVal;
+    }
+
+    @Override
+    public void updatePermissionFlags(String packageName, String permName, int flagMask,
+            int flagValues, boolean checkAdjustPolicyFlagPermission, int userId) {
+        mOldImplementation.updatePermissionFlags(packageName, permName, flagMask, flagValues,
+                checkAdjustPolicyFlagPermission, userId);
+        mNewImplementation.updatePermissionFlags(packageName, permName, flagMask, flagValues,
+                checkAdjustPolicyFlagPermission, userId);
+    }
+
+    @Override
+    public void updatePermissionFlagsForAllApps(int flagMask, int flagValues, int userId) {
+        mOldImplementation.updatePermissionFlagsForAllApps(flagMask, flagValues, userId);
+        mNewImplementation.updatePermissionFlagsForAllApps(flagMask, flagValues, userId);
+    }
+
+    @Override
+    public void addOnPermissionsChangeListener(IOnPermissionsChangeListener listener) {
+        mOldImplementation.addOnPermissionsChangeListener(listener);
+        mNewImplementation.addOnPermissionsChangeListener(listener);
+    }
+
+    @Override
+    public void removeOnPermissionsChangeListener(IOnPermissionsChangeListener listener) {
+        mOldImplementation.removeOnPermissionsChangeListener(listener);
+        mNewImplementation.removeOnPermissionsChangeListener(listener);
+    }
+
+    @Override
+    public boolean addAllowlistedRestrictedPermission(@NonNull String packageName,
+            @NonNull String permName, int flags, int userId) {
+        boolean oldVal = mOldImplementation.addAllowlistedRestrictedPermission(packageName,
+                permName,
+                flags, userId);
+        boolean newVal = mNewImplementation.addAllowlistedRestrictedPermission(packageName,
+                permName, flags, userId);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("addAllowlistedRestrictedPermission");
+        }
+        return newVal;
+    }
+
+    @Override
+    public List<String> getAllowlistedRestrictedPermissions(@NonNull String packageName, int flags,
+            int userId) {
+        List<String> oldVal = mOldImplementation.getAllowlistedRestrictedPermissions(packageName,
+                flags, userId);
+        List<String> newVal = mNewImplementation.getAllowlistedRestrictedPermissions(packageName,
+                flags, userId);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getAllowlistedRestrictedPermissions");
+        }
+        return newVal;
+    }
+
+    @Override
+    public boolean removeAllowlistedRestrictedPermission(@NonNull String packageName,
+            @NonNull String permName, int flags, int userId) {
+        boolean oldVal = mOldImplementation.removeAllowlistedRestrictedPermission(packageName,
+                permName, flags, userId);
+        boolean newVal = mNewImplementation.removeAllowlistedRestrictedPermission(packageName,
+                permName, flags, userId);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("removeAllowlistedRestrictedPermission");
+        }
+        return newVal;
+    }
+
+    @Override
+    public void grantRuntimePermission(String packageName, String permName, int userId) {
+        mOldImplementation.grantRuntimePermission(packageName, permName, userId);
+        mNewImplementation.grantRuntimePermission(packageName, permName, userId);
+    }
+
+    @Override
+    public void revokeRuntimePermission(String packageName, String permName, int userId,
+            String reason) {
+        mOldImplementation.grantRuntimePermission(packageName, permName, userId);
+        mNewImplementation.grantRuntimePermission(packageName, permName, userId);
+    }
+
+    @Override
+    public void revokePostNotificationPermissionWithoutKillForTest(String packageName, int userId) {
+        mOldImplementation.revokePostNotificationPermissionWithoutKillForTest(packageName,
+                userId);
+        mNewImplementation.revokePostNotificationPermissionWithoutKillForTest(packageName, userId);
+    }
+
+    @Override
+    public boolean shouldShowRequestPermissionRationale(String packageName, String permName,
+            int userId) {
+        boolean oldVal = mOldImplementation
+                .shouldShowRequestPermissionRationale(packageName, permName, userId);
+        boolean newVal = mNewImplementation
+                .shouldShowRequestPermissionRationale(packageName, permName, userId);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("shouldShowRequestPermissionRationale");
+        }
+        return newVal;
+    }
+
+    @Override
+    public boolean isPermissionRevokedByPolicy(String packageName, String permName, int userId) {
+        boolean oldVal = mOldImplementation
+                .isPermissionRevokedByPolicy(packageName, permName, userId);
+        boolean newVal = mNewImplementation.isPermissionRevokedByPolicy(packageName, permName,
+                userId);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("isPermissionRevokedByPolicy");
+        }
+        return newVal;
+    }
+
+    @Override
+    public List<SplitPermissionInfoParcelable> getSplitPermissions() {
+        List<SplitPermissionInfoParcelable> oldVal = mOldImplementation.getSplitPermissions();
+        List<SplitPermissionInfoParcelable> newVal = mNewImplementation.getSplitPermissions();
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getSplitPermissions");
+        }
+        return newVal;
+    }
+
+    @Override
+    public int checkPermission(String pkgName, String permName, int userId) {
+        int oldVal = mOldImplementation.checkPermission(pkgName, permName, userId);
+        int newVal = mNewImplementation.checkPermission(pkgName, permName, userId);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("checkPermission");
+        }
+        return newVal;
+    }
+
+    @Override
+    public int checkUidPermission(int uid, String permName) {
+        int oldVal = mOldImplementation.checkUidPermission(uid, permName);
+        int newVal = mNewImplementation.checkUidPermission(uid, permName);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("checkUidPermission");
+        }
+        return newVal;
+    }
+
+    @Override
+    public Map<String, Set<String>> getAllAppOpPermissionPackages() {
+        Map<String, Set<String>> oldVal = mOldImplementation.getAllAppOpPermissionPackages();
+        Map<String, Set<String>> newVal = mNewImplementation.getAllAppOpPermissionPackages();
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getAllAppOpPermissionPackages");
+        }
+        return newVal;
+    }
+
+    @Override
+    public boolean isPermissionsReviewRequired(@NonNull String packageName, int userId) {
+        boolean oldVal = mOldImplementation.isPermissionsReviewRequired(packageName, userId);
+        boolean newVal = mNewImplementation.isPermissionsReviewRequired(packageName, userId);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("isPermissionsReviewRequired");
+        }
+        return newVal;
+    }
+
+    @Override
+    public void resetRuntimePermissions(@NonNull AndroidPackage pkg, @UserIdInt int userId) {
+        mOldImplementation.resetRuntimePermissions(pkg, userId);
+        mNewImplementation.resetRuntimePermissions(pkg, userId);
+    }
+
+    @Override
+    public void resetRuntimePermissionsForUser(int userId) {
+        mOldImplementation.resetRuntimePermissionsForUser(userId);
+        mNewImplementation.resetRuntimePermissionsForUser(userId);
+    }
+
+    @Override
+    public void readLegacyPermissionStateTEMP() {
+        mOldImplementation.readLegacyPermissionStateTEMP();
+        mNewImplementation.readLegacyPermissionStateTEMP();
+    }
+
+    @Override
+    public void writeLegacyPermissionStateTEMP() {
+        mOldImplementation.writeLegacyPermissionStateTEMP();
+        mNewImplementation.writeLegacyPermissionStateTEMP();
+    }
+
+    @Override
+    public Set<String> getInstalledPermissions(String packageName) {
+        Set<String> oldVal = mOldImplementation.getInstalledPermissions(packageName);
+        Set<String> newVal = mNewImplementation.getInstalledPermissions(packageName);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getInstalledPermissions");
+        }
+        return newVal;
+    }
+
+    @NonNull
+    @Override
+    public Set<String> getGrantedPermissions(@NonNull String packageName, int userId) {
+        Set<String> oldVal = mOldImplementation.getGrantedPermissions(packageName, userId);
+        Set<String> newVal = mNewImplementation.getGrantedPermissions(packageName, userId);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getGrantedPermissions");
+        }
+        return newVal;
+    }
+
+    @NonNull
+    @Override
+    public int[] getPermissionGids(@NonNull String permissionName, int userId) {
+        int[] oldVal = mOldImplementation.getPermissionGids(permissionName, userId);
+        int[] newVal = mNewImplementation.getPermissionGids(permissionName, userId);
+
+        if (!Arrays.equals(oldVal, newVal)) {
+            signalImplDifference("getPermissionGids");
+        }
+        return newVal;
+    }
+
+    @NonNull
+    @Override
+    public String[] getAppOpPermissionPackages(@NonNull String permissionName) {
+        String[] oldVal = mOldImplementation.getAppOpPermissionPackages(permissionName);
+        String[] newVal = mNewImplementation.getAppOpPermissionPackages(permissionName);
+
+        if (!Arrays.equals(oldVal, newVal)) {
+            signalImplDifference("getAppOpPermissionPackages");
+        }
+        return newVal;
+    }
+
+    @Nullable
+    @Override
+    public Permission getPermissionTEMP(@NonNull String permName) {
+        Permission oldVal = mOldImplementation.getPermissionTEMP(permName);
+        Permission newVal = mNewImplementation.getPermissionTEMP(permName);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getPermissionTEMP");
+        }
+        return newVal;
+    }
+
+    @NonNull
+    @Override
+    public List<PermissionInfo> getAllPermissionsWithProtection(int protection) {
+        List<PermissionInfo> oldVal = mOldImplementation.getAllPermissionsWithProtection(
+                protection);
+        List<PermissionInfo> newVal = mNewImplementation.getAllPermissionsWithProtection(
+                protection);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getAllPermissionsWithProtection");
+        }
+        return newVal;
+    }
+
+    @NonNull
+    @Override
+    public List<PermissionInfo> getAllPermissionsWithProtectionFlags(int protectionFlags) {
+        List<PermissionInfo> oldVal = mOldImplementation
+                .getAllPermissionsWithProtectionFlags(protectionFlags);
+        List<PermissionInfo> newVal = mNewImplementation.getAllPermissionsWithProtectionFlags(
+                protectionFlags);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getAllPermissionsWithProtectionFlags");
+        }
+        return newVal;
+    }
+
+    @NonNull
+    @Override
+    public List<LegacyPermission> getLegacyPermissions() {
+        List<LegacyPermission> oldVal = mOldImplementation.getLegacyPermissions();
+        List<LegacyPermission> newVal = mNewImplementation.getLegacyPermissions();
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getLegacyPermissions");
+        }
+        return newVal;
+    }
+
+    @NonNull
+    @Override
+    public LegacyPermissionState getLegacyPermissionState(int appId) {
+        LegacyPermissionState oldVal = mOldImplementation.getLegacyPermissionState(appId);
+        LegacyPermissionState newVal = mNewImplementation.getLegacyPermissionState(appId);
+
+        if (!Objects.equals(oldVal, newVal)) {
+            signalImplDifference("getLegacyPermissionState");
+        }
+        return newVal;
+    }
+
+    @Override
+    public void readLegacyPermissionsTEMP(
+            @NonNull LegacyPermissionSettings legacyPermissionSettings) {
+        mOldImplementation.readLegacyPermissionsTEMP(legacyPermissionSettings);
+        mNewImplementation.readLegacyPermissionsTEMP(legacyPermissionSettings);
+    }
+
+    @Override
+    public void writeLegacyPermissionsTEMP(
+            @NonNull LegacyPermissionSettings legacyPermissionSettings) {
+        mOldImplementation.writeLegacyPermissionsTEMP(legacyPermissionSettings);
+        mNewImplementation.writeLegacyPermissionsTEMP(legacyPermissionSettings);
+    }
+
+    @Nullable
+    @Override
+    public String getDefaultPermissionGrantFingerprint(@UserIdInt int userId) {
+        String oldVal = mOldImplementation.getDefaultPermissionGrantFingerprint(userId);
+        String newVal = mNewImplementation.getDefaultPermissionGrantFingerprint(userId);
+
+        if (Objects.equals(oldVal, Build.FINGERPRINT)
+                != Objects.equals(newVal, Build.FINGERPRINT)) {
+            signalImplDifference("getDefaultPermissionGrantFingerprint");
+        }
+        return newVal;
+    }
+
+    @Override
+    public void setDefaultPermissionGrantFingerprint(@NonNull String fingerprint,
+            @UserIdInt int userId) {
+        mOldImplementation.setDefaultPermissionGrantFingerprint(fingerprint, userId);
+        mNewImplementation.setDefaultPermissionGrantFingerprint(fingerprint, userId);
+    }
+
+    @Override
+    public void onSystemReady() {
+        mOldImplementation.onSystemReady();
+        mNewImplementation.onSystemReady();
+    }
+
+    @Override
+    public void onStorageVolumeMounted(@NonNull String volumeUuid, boolean fingerprintChanged) {
+        mOldImplementation.onStorageVolumeMounted(volumeUuid, fingerprintChanged);
+        mNewImplementation.onStorageVolumeMounted(volumeUuid, fingerprintChanged);
+    }
+
+    @NonNull
+    @Override
+    public int[] getGidsForUid(int uid) {
+        int[] oldVal = mOldImplementation.getGidsForUid(uid);
+        int[] newVal = mNewImplementation.getGidsForUid(uid);
+
+        if (!Arrays.equals(oldVal, newVal)) {
+            signalImplDifference("getGidsForUid");
+        }
+        return newVal;
+    }
+
+    @Override
+    public void onUserCreated(int userId) {
+        mOldImplementation.onUserCreated(userId);
+        mNewImplementation.onUserCreated(userId);
+    }
+
+    @Override
+    public void onUserRemoved(int userId) {
+        mOldImplementation.onUserRemoved(userId);
+        mNewImplementation.onUserRemoved(userId);
+    }
+
+    @Override
+    public void onPackageAdded(@NonNull PackageState pkg, boolean isInstantApp,
+            @Nullable AndroidPackage oldPkg) {
+        mOldImplementation.onPackageAdded(pkg, isInstantApp, oldPkg);
+        mNewImplementation.onPackageAdded(pkg, isInstantApp, oldPkg);
+    }
+
+    @Override
+    public void onPackageInstalled(@NonNull AndroidPackage pkg, int previousAppId,
+            @NonNull PermissionManagerServiceInternal.PackageInstalledParams params, int userId) {
+        mOldImplementation.onPackageInstalled(pkg, previousAppId, params, userId);
+        mNewImplementation.onPackageInstalled(pkg, previousAppId, params, userId);
+    }
+
+    @Override
+    public void onPackageRemoved(@NonNull AndroidPackage pkg) {
+        mOldImplementation.onPackageRemoved(pkg);
+        mNewImplementation.onPackageRemoved(pkg);
+    }
+
+    @Override
+    public void onPackageUninstalled(@NonNull String packageName, int appId,
+            @NonNull PackageState packageState, @Nullable AndroidPackage pkg,
+            @NonNull List<AndroidPackage> sharedUserPkgs, int userId) {
+        mOldImplementation.onPackageUninstalled(packageName, appId, packageState, pkg,
+                sharedUserPkgs, userId);
+        mNewImplementation.onPackageUninstalled(packageName, appId, packageState, pkg,
+                sharedUserPkgs, userId);
+    }
+}
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTracingDecorator.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTracingDecorator.java
new file mode 100644
index 0000000..4e72fae
--- /dev/null
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceTracingDecorator.java
@@ -0,0 +1,659 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.pm.permission;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.pm.PermissionGroupInfo;
+import android.content.pm.PermissionInfo;
+import android.content.pm.permission.SplitPermissionInfoParcelable;
+import android.os.Trace;
+import android.permission.IOnPermissionsChangeListener;
+
+import com.android.server.pm.pkg.AndroidPackage;
+import com.android.server.pm.pkg.PackageState;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Surrounds all PermissionManagerServiceInterface method calls with Trace.traceBegin and
+ * Trace.traceEnd. These traces are used for identifying permission issues and testing.
+ */
+public class PermissionManagerServiceTracingDecorator implements PermissionManagerServiceInterface {
+    private static final long TRACE_TAG = Trace.TRACE_TAG_PACKAGE_MANAGER;
+
+    @NonNull
+    private final PermissionManagerServiceInterface mService;
+
+    public PermissionManagerServiceTracingDecorator(
+            @NonNull PermissionManagerServiceInterface service
+    ) {
+        mService = service;
+    }
+
+    @Nullable
+    @Override
+    public byte[] backupRuntimePermissions(int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#backupRuntimePermissions");
+        try {
+            return mService.backupRuntimePermissions(userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void restoreRuntimePermissions(@NonNull byte[] backup, int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#restoreRuntimePermissions");
+        try {
+            mService.restoreRuntimePermissions(backup, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void restoreDelayedRuntimePermissions(@NonNull String packageName, int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#restoreDelayedRuntimePermissions");
+        try {
+            mService.restoreDelayedRuntimePermissions(packageName, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#dump");
+        try {
+            mService.dump(fd, pw, args);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public List<PermissionGroupInfo> getAllPermissionGroups(int flags) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#getAllPermissionGroups");
+        try {
+            return mService.getAllPermissionGroups(flags);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public PermissionGroupInfo getPermissionGroupInfo(String groupName, int flags) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#getPermissionGroupInfo");
+        try {
+            return mService.getPermissionGroupInfo(groupName, flags);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public PermissionInfo getPermissionInfo(@NonNull String permName, int flags,
+            @NonNull String opPackageName) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#getPermissionInfo");
+        try {
+            return mService.getPermissionInfo(permName, flags, opPackageName);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public List<PermissionInfo> queryPermissionsByGroup(String groupName, int flags) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#queryPermissionsByGroup");
+        try {
+            return mService.queryPermissionsByGroup(groupName, flags);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public boolean addPermission(PermissionInfo info, boolean async) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#addPermission");
+        try {
+            return mService.addPermission(info, async);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void removePermission(String permName) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#removePermission");
+        try {
+            mService.removePermission(permName);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public int getPermissionFlags(String packageName, String permName, int userId) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#getPermissionFlags");
+        try {
+            return mService.getPermissionFlags(packageName, permName, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void updatePermissionFlags(String packageName, String permName, int flagMask,
+            int flagValues, boolean checkAdjustPolicyFlagPermission, int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#updatePermissionFlags");
+        try {
+            mService.updatePermissionFlags(packageName, permName, flagMask, flagValues,
+                    checkAdjustPolicyFlagPermission, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void updatePermissionFlagsForAllApps(int flagMask, int flagValues, int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#updatePermissionFlagsForAllApps");
+        try {
+            mService.updatePermissionFlagsForAllApps(flagMask, flagValues, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void addOnPermissionsChangeListener(IOnPermissionsChangeListener listener) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#addOnPermissionsChangeListener");
+        try {
+            mService.addOnPermissionsChangeListener(listener);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void removeOnPermissionsChangeListener(
+            IOnPermissionsChangeListener listener) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#removeOnPermissionsChangeListener");
+        try {
+            mService.removeOnPermissionsChangeListener(listener);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public boolean addAllowlistedRestrictedPermission(@NonNull String packageName,
+            @NonNull String permName, int flags, int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#addAllowlistedRestrictedPermission");
+        try {
+            return mService.addAllowlistedRestrictedPermission(packageName, permName, flags,
+                    userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public List<String> getAllowlistedRestrictedPermissions(@NonNull String packageName, int flags,
+            int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#getAllowlistedRestrictedPermissions");
+        try {
+            return mService.getAllowlistedRestrictedPermissions(packageName, flags, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public boolean removeAllowlistedRestrictedPermission(@NonNull String packageName,
+            @NonNull String permName, int flags, int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#removeAllowlistedRestrictedPermission");
+        try {
+            return mService.removeAllowlistedRestrictedPermission(packageName, permName, flags,
+                    userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void grantRuntimePermission(String packageName, String permName, int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#grantRuntimePermission");
+        try {
+            mService.grantRuntimePermission(packageName, permName, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void revokeRuntimePermission(String packageName, String permName, int userId,
+            String reason) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#revokeRuntimePermission");
+        try {
+            mService.revokeRuntimePermission(packageName, permName, userId, reason);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void revokePostNotificationPermissionWithoutKillForTest(String packageName, int userId) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl"
+                + "#revokePostNotificationPermissionWithoutKillForTest");
+        try {
+            mService.revokePostNotificationPermissionWithoutKillForTest(packageName, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public boolean shouldShowRequestPermissionRationale(String packageName, String permName,
+            int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#shouldShowRequestPermissionRationale");
+        try {
+            return mService.shouldShowRequestPermissionRationale(packageName, permName, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public boolean isPermissionRevokedByPolicy(String packageName, String permName, int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#isPermissionRevokedByPolicy");
+        try {
+            return mService.isPermissionRevokedByPolicy(packageName, permName, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public List<SplitPermissionInfoParcelable> getSplitPermissions() {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#getSplitPermissions");
+        try {
+            return mService.getSplitPermissions();
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public int checkPermission(String pkgName, String permName, int userId) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#checkPermission");
+        try {
+            return mService.checkPermission(pkgName, permName, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public int checkUidPermission(int uid, String permName) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#checkUidPermission");
+        try {
+            return mService.checkUidPermission(uid, permName);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public Map<String, Set<String>> getAllAppOpPermissionPackages() {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#getAllAppOpPermissionPackages");
+        try {
+            return mService.getAllAppOpPermissionPackages();
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public boolean isPermissionsReviewRequired(@NonNull String packageName, int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#isPermissionsReviewRequired");
+        try {
+            return mService.isPermissionsReviewRequired(packageName, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void resetRuntimePermissions(@NonNull AndroidPackage pkg, int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#resetRuntimePermissions");
+        try {
+            mService.resetRuntimePermissions(pkg, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void resetRuntimePermissionsForUser(int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#resetRuntimePermissionsForUser");
+        try {
+            mService.resetRuntimePermissionsForUser(userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void readLegacyPermissionStateTEMP() {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#readLegacyPermissionStateTEMP");
+        try {
+            mService.readLegacyPermissionStateTEMP();
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void writeLegacyPermissionStateTEMP() {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#writeLegacyPermissionStateTEMP");
+        try {
+            mService.writeLegacyPermissionStateTEMP();
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @NonNull
+    @Override
+    public Set<String> getInstalledPermissions(@NonNull String packageName) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#getInstalledPermissions");
+        try {
+            return mService.getInstalledPermissions(packageName);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @NonNull
+    @Override
+    public Set<String> getGrantedPermissions(@NonNull String packageName, int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#getGrantedPermissions");
+        try {
+            return mService.getGrantedPermissions(packageName, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @NonNull
+    @Override
+    public int[] getPermissionGids(@NonNull String permissionName, int userId) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#getPermissionGids");
+        try {
+            return mService.getPermissionGids(permissionName, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @NonNull
+    @Override
+    public String[] getAppOpPermissionPackages(@NonNull String permissionName) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#getAppOpPermissionPackages");
+        try {
+            return mService.getAppOpPermissionPackages(permissionName);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Nullable
+    @Override
+    public Permission getPermissionTEMP(@NonNull String permName) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#getPermissionTEMP");
+        try {
+            return mService.getPermissionTEMP(permName);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @NonNull
+    @Override
+    public List<PermissionInfo> getAllPermissionsWithProtection(int protection) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#getAllPermissionsWithProtection");
+        try {
+            return mService.getAllPermissionsWithProtection(protection);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @NonNull
+    @Override
+    public List<PermissionInfo> getAllPermissionsWithProtectionFlags(int protectionFlags) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#getAllPermissionsWithProtectionFlags");
+        try {
+            return mService.getAllPermissionsWithProtectionFlags(protectionFlags);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @NonNull
+    @Override
+    public List<LegacyPermission> getLegacyPermissions() {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#getLegacyPermissions");
+        try {
+            return mService.getLegacyPermissions();
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @NonNull
+    @Override
+    public LegacyPermissionState getLegacyPermissionState(int appId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#getLegacyPermissionState");
+        try {
+            return mService.getLegacyPermissionState(appId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void readLegacyPermissionsTEMP(
+            @NonNull LegacyPermissionSettings legacyPermissionSettings) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#readLegacyPermissionsTEMP");
+        try {
+            mService.readLegacyPermissionsTEMP(legacyPermissionSettings);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void writeLegacyPermissionsTEMP(
+            @NonNull LegacyPermissionSettings legacyPermissionSettings) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#writeLegacyPermissionsTEMP");
+        try {
+            mService.writeLegacyPermissionsTEMP(legacyPermissionSettings);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Nullable
+    @Override
+    public String getDefaultPermissionGrantFingerprint(int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#getDefaultPermissionGrantFingerprint");
+        try {
+            return mService.getDefaultPermissionGrantFingerprint(userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void setDefaultPermissionGrantFingerprint(@NonNull String fingerprint, int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#setDefaultPermissionGrantFingerprint");
+        try {
+            mService.setDefaultPermissionGrantFingerprint(fingerprint, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void onSystemReady() {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#onSystemReady");
+        try {
+            mService.onSystemReady();
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void onStorageVolumeMounted(@NonNull String volumeUuid, boolean fingerprintChanged) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#onStorageVolumeMounted");
+        try {
+            mService.onStorageVolumeMounted(volumeUuid, fingerprintChanged);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @NonNull
+    @Override
+    public int[] getGidsForUid(int uid) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#getGidsForUid");
+        try {
+            return mService.getGidsForUid(uid);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void onUserCreated(int userId) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#onUserCreated");
+        try {
+            mService.onUserCreated(userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void onUserRemoved(int userId) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#onUserRemoved");
+        try {
+            mService.onUserRemoved(userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void onPackageAdded(@NonNull PackageState packageState, boolean isInstantApp,
+            @Nullable AndroidPackage oldPkg) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#onPackageAdded");
+        try {
+            mService.onPackageAdded(packageState, isInstantApp, oldPkg);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void onPackageInstalled(@NonNull AndroidPackage pkg, int previousAppId,
+            @NonNull PermissionManagerServiceInternal.PackageInstalledParams params, int userId) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#onPackageInstalled");
+        try {
+            mService.onPackageInstalled(pkg, previousAppId, params, userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void onPackageRemoved(@NonNull AndroidPackage pkg) {
+        Trace.traceBegin(TRACE_TAG, "TaggedTracingPermissionManagerServiceImpl#onPackageRemoved");
+        try {
+            mService.onPackageRemoved(pkg);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+
+    @Override
+    public void onPackageUninstalled(@NonNull String packageName, int appId,
+            @NonNull PackageState packageState, @Nullable AndroidPackage pkg,
+            @NonNull List<AndroidPackage> sharedUserPkgs, int userId) {
+        Trace.traceBegin(TRACE_TAG,
+                "TaggedTracingPermissionManagerServiceImpl#onPackageUninstalled");
+        try {
+            mService.onPackageUninstalled(packageName, appId, packageState, pkg, sharedUserPkgs,
+                    userId);
+        } finally {
+            Trace.traceEnd(TRACE_TAG);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/pm/permission/PermissionMigrationHelper.java b/services/core/java/com/android/server/pm/permission/PermissionMigrationHelper.java
new file mode 100644
index 0000000..9eb6fde
--- /dev/null
+++ b/services/core/java/com/android/server/pm/permission/PermissionMigrationHelper.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.pm.permission;
+
+import android.annotation.NonNull;
+import android.content.pm.PermissionInfo;
+
+import java.util.Map;
+
+/**
+ * In-process api for permissions migration.
+ *
+ * @hide
+ */
+public interface PermissionMigrationHelper {
+    /**
+     * Whether legacy permission definitions/trees exist or not.
+     */
+    boolean hasLegacyPermission();
+
+    /**
+     * @return legacy permission definitions.
+     */
+    @NonNull
+    Map<String, LegacyPermission> getLegacyPermissions();
+
+    /**
+     * @return legacy permission trees.
+     */
+    @NonNull
+    Map<String, LegacyPermission> getLegacyPermissionTrees();
+
+    /**
+     * @return legacy permissions state for a user.
+     */
+    @NonNull
+    Map<Integer, Map<String, LegacyPermissionState>> getLegacyPermissionStates(int userId);
+
+    /**
+     * @return permissions file version for the given user.
+     */
+    int getLegacyPermissionStateVersion(int userId);
+
+    /**
+     * @return true if permissions state exists or not.
+     */
+    boolean hasLegacyPermissionState(int userId);
+
+    /**
+     * Legacy permission definition.
+     */
+    final class LegacyPermission {
+        private final PermissionInfo mPermissionInfo;
+        private final int mType;
+
+        LegacyPermission(PermissionInfo permissionInfo, int type) {
+            mPermissionInfo = permissionInfo;
+            mType = type;
+        }
+
+        @NonNull
+        public PermissionInfo getPermissionInfo() {
+            return mPermissionInfo;
+        }
+
+        public int getType() {
+            return mType;
+        }
+    }
+
+    /**
+     * State of a legacy permission.
+     */
+    final class LegacyPermissionState {
+        private final boolean mGranted;
+        private final int mFlags;
+
+        LegacyPermissionState(boolean granted, int flags) {
+            mGranted = granted;
+            mFlags = flags;
+        }
+
+        /**
+         * @return Whether the permission is granted or not.
+         */
+        public boolean isGranted() {
+            return mGranted;
+        }
+
+        /**
+         * @return Permission flags.
+         */
+        public int getFlags() {
+            return mFlags;
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/pm/permission/PermissionMigrationHelperImpl.java b/services/core/java/com/android/server/pm/permission/PermissionMigrationHelperImpl.java
new file mode 100644
index 0000000..dbf4047
--- /dev/null
+++ b/services/core/java/com/android/server/pm/permission/PermissionMigrationHelperImpl.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.pm.permission;
+
+import android.annotation.NonNull;
+import android.content.pm.PackageManagerInternal;
+import android.util.ArrayMap;
+import android.util.Log;
+
+import com.android.permission.persistence.RuntimePermissionsState;
+import com.android.server.LocalManagerRegistry;
+import com.android.server.LocalServices;
+import com.android.server.pm.PackageManagerLocal;
+import com.android.server.pm.pkg.PackageState;
+import com.android.server.pm.pkg.SharedUserApi;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Provider of legacy permissions data for new permission subsystem.
+ *
+ * @hide
+ */
+public class PermissionMigrationHelperImpl implements PermissionMigrationHelper {
+    private static final String LOG_TAG = PermissionMigrationHelperImpl.class.getSimpleName();
+
+    @Override
+    public boolean hasLegacyPermission() {
+        PackageManagerInternal packageManagerInternal =
+                LocalServices.getService(PackageManagerInternal.class);
+        LegacyPermissionSettings legacySettings = packageManagerInternal.getLegacyPermissions();
+        return !(legacySettings.getPermissions().isEmpty()
+                && legacySettings.getPermissionTrees().isEmpty());
+    }
+
+    /**
+     * @return legacy permission definitions.
+     */
+    @NonNull
+    public Map<String, LegacyPermission> getLegacyPermissions() {
+        PackageManagerInternal mPackageManagerInternal =
+                LocalServices.getService(PackageManagerInternal.class);
+        return toLegacyPermissions(
+                mPackageManagerInternal.getLegacyPermissions().getPermissions());
+    }
+
+    /**
+     * @return legacy permission trees.
+     */
+    @NonNull
+    public Map<String, LegacyPermission> getLegacyPermissionTrees() {
+        PackageManagerInternal mPackageManagerInternal =
+                LocalServices.getService(PackageManagerInternal.class);
+        return toLegacyPermissions(
+                mPackageManagerInternal.getLegacyPermissions().getPermissionTrees());
+    }
+
+    @NonNull
+    private Map<String, LegacyPermission> toLegacyPermissions(
+            List<com.android.server.pm.permission.LegacyPermission> legacyPermissions) {
+        Map<String, LegacyPermission> permissions = new ArrayMap<>();
+        legacyPermissions.forEach(legacyPermission -> {
+            LegacyPermission permission = new LegacyPermission(legacyPermission.getPermissionInfo(),
+                    legacyPermission.getType());
+            permissions.put(legacyPermission.getPermissionInfo().name, permission);
+        });
+
+        return permissions;
+    }
+
+    /**
+     * @return permissions state for a user, i.e. map of appId to map of permission name and state.
+     */
+    @NonNull
+    public Map<Integer, Map<String, LegacyPermissionState>> getLegacyPermissionStates(int userId) {
+        PackageManagerInternal mPackageManagerInternal =
+                LocalServices.getService(PackageManagerInternal.class);
+        Map<Integer, Map<String, LegacyPermissionState>> appIdPermissionStates = new ArrayMap<>();
+
+        RuntimePermissionsState legacyState =
+                mPackageManagerInternal.getLegacyPermissionsState(userId);
+        PackageManagerLocal packageManagerLocal =
+                LocalManagerRegistry.getManager(PackageManagerLocal.class);
+
+        try (PackageManagerLocal.UnfilteredSnapshot snapshot =
+                     packageManagerLocal.withUnfilteredSnapshot()) {
+            Map<String, PackageState> packageStates = snapshot.getPackageStates();
+            legacyState.getPackagePermissions().forEach((packageName, permissionStates) -> {
+                if (!permissionStates.isEmpty()) {
+                    PackageState packageState = packageStates.get(packageName);
+                    if (packageState != null) {
+                        int appId = packageState.getAppId();
+                        appIdPermissionStates.put(appId,
+                                toLegacyPermissionStates(permissionStates));
+                    } else {
+                        Log.w(LOG_TAG, "Package " + packageName + " not found.");
+                    }
+                }
+            });
+
+            Map<String, SharedUserApi> sharedUsers = snapshot.getSharedUsers();
+            legacyState.getSharedUserPermissions().forEach((sharedUserName, permissionStates) -> {
+                if (!permissionStates.isEmpty()) {
+                    SharedUserApi sharedUser = sharedUsers.get(sharedUserName);
+                    if (sharedUser != null) {
+                        int appId = sharedUser.getAppId();
+                        appIdPermissionStates.put(appId,
+                                toLegacyPermissionStates(permissionStates));
+                    } else {
+                        Log.w(LOG_TAG, "Shared user " + sharedUserName + " not found.");
+                    }
+                }
+            });
+        }
+        return appIdPermissionStates;
+    }
+
+    @Override
+    public int getLegacyPermissionStateVersion(int userId) {
+        PackageManagerInternal packageManagerInternal =
+                LocalServices.getService(PackageManagerInternal.class);
+        int version = packageManagerInternal.getLegacyPermissionsVersion(userId);
+        // -1 No permission data available
+        // 0 runtime-permissions.xml exist w/o any version
+        switch (version) {
+            case -1:
+                return 0;
+            case 0:
+                return -1;
+            default:
+                return version;
+        }
+    }
+
+    @Override
+    public boolean hasLegacyPermissionState(int userId) {
+        return getLegacyPermissionStateVersion(userId) > -1;
+    }
+
+    @NonNull
+    private Map<String, LegacyPermissionState> toLegacyPermissionStates(
+            List<RuntimePermissionsState.PermissionState> permissions) {
+        Map<String, LegacyPermissionState> legacyPermissions = new ArrayMap<>();
+
+        final int size = permissions.size();
+        for (int i = 0; i < size; i++) {
+            RuntimePermissionsState.PermissionState permState = permissions.get(i);
+            legacyPermissions.put(permState.getName(), new LegacyPermissionState(
+                    permState.isGranted(), permState.getFlags()));
+        }
+
+        return legacyPermissions;
+    }
+}
diff --git a/services/core/java/com/android/server/pm/permission/TEST_MAPPING b/services/core/java/com/android/server/pm/permission/TEST_MAPPING
index 579d4e3..b2dcf37 100644
--- a/services/core/java/com/android/server/pm/permission/TEST_MAPPING
+++ b/services/core/java/com/android/server/pm/permission/TEST_MAPPING
@@ -4,6 +4,9 @@
             "name": "CtsPermissionTestCases",
             "options": [
                 {
+                    "exclude-annotation": "android.platform.test.annotations.FlakyTest"
+                },
+                {
                     "include-filter": "android.permission.cts.BackgroundPermissionsTest"
                 },
                 {
@@ -29,6 +32,9 @@
             "name": "CtsPermissionPolicyTestCases",
             "options": [
                 {
+                    "exclude-annotation": "android.platform.test.annotations.FlakyTest"
+                },
+                {
                     "include-filter": "android.permissionpolicy.cts.RestrictedPermissionsTest"
                 },
                 {
@@ -59,6 +65,29 @@
             "options": [
                 {
                     "include-filter": "android.permission.cts.PermissionUpdateListenerTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.BackgroundPermissionsTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.SplitPermissionTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.PermissionFlagsTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.SharedUidPermissionsTest"
+                }
+            ]
+        },
+        {
+            "name": "CtsPermissionPolicyTestCases",
+            "options": [
+                {
+                    "include-filter": "android.permissionpolicy.cts.RestrictedPermissionsTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.PermissionMaxSdkVersionTest"
                 }
             ]
         }
diff --git a/services/core/java/com/android/server/pm/pkg/AndroidPackage.java b/services/core/java/com/android/server/pm/pkg/AndroidPackage.java
index e54f34d..91854fd 100644
--- a/services/core/java/com/android/server/pm/pkg/AndroidPackage.java
+++ b/services/core/java/com/android/server/pm/pkg/AndroidPackage.java
@@ -775,7 +775,7 @@
      * @hide
      */
     @NonNull
-    List<String> getImplicitPermissions();
+    Set<String> getImplicitPermissions();
 
     /**
      * @see ApplicationInfo#installLocation
@@ -1123,7 +1123,7 @@
      * @hide
      */
     @NonNull
-    List<String> getRequestedPermissions();
+    Set<String> getRequestedPermissions();
 
     /**
      * Whether or not the app requested explicitly resizeable Activities. Null value means nothing
diff --git a/services/core/java/com/android/server/pm/pkg/ArchiveState.java b/services/core/java/com/android/server/pm/pkg/ArchiveState.java
new file mode 100644
index 0000000..d44ae16
--- /dev/null
+++ b/services/core/java/com/android/server/pm/pkg/ArchiveState.java
@@ -0,0 +1,306 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.pm.pkg;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
+import com.android.internal.util.DataClass;
+
+import java.nio.file.Path;
+import java.util.List;
+
+/**
+ * Information about the state of an archived app. All fields are gathered at the time of
+ * archival.
+ *
+ * @hide
+ */
+@DataClass(genEqualsHashCode = true, genToString = true)
+public class ArchiveState {
+
+    /**
+     * Information about main activities.
+     *
+     * <p> This list has at least one entry. In the vast majority of cases, this list has only one
+     * entry.
+     */
+    @NonNull
+    private final List<ArchiveActivityInfo> mActivityInfos;
+
+    /**
+     * Corresponds to android:label of the installer responsible for the unarchival of the app.
+     * Stored in the installer's locale .
+     */
+    @NonNull
+    private final String mInstallerTitle;
+
+    /** Information about a main activity of an archived app. */
+    @DataClass(genEqualsHashCode = true, genToString = true)
+    public static class ArchiveActivityInfo {
+        /** Corresponds to the activity's android:label in the app's locale. */
+        @NonNull
+        private final String mTitle;
+
+        /** The path to the stored icon of the activity in the app's locale. */
+        @NonNull
+        private final Path mIconBitmap;
+
+        /** See {@link #mIconBitmap}. Only set if the app defined a monochrome icon. */
+        @Nullable
+        private final Path mMonochromeIconBitmap;
+
+
+
+        // Code below generated by codegen v1.0.23.
+        //
+        // DO NOT MODIFY!
+        // CHECKSTYLE:OFF Generated code
+        //
+        // To regenerate run:
+        // $ codegen $ANDROID_BUILD_TOP/frameworks/base/services/core/java/com/android/server/pm/pkg/ArchiveState.java
+        //
+        // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+        //   Settings > Editor > Code Style > Formatter Control
+        //@formatter:off
+
+
+        /**
+         * Creates a new ArchiveActivityInfo.
+         *
+         * @param title
+         *   Corresponds to the activity's android:label in the app's locale.
+         * @param iconBitmap
+         *   The path to the stored icon of the activity in the app's locale.
+         * @param monochromeIconBitmap
+         *   See {@link #mIconBitmap}. Only set if the app defined a monochrome icon.
+         */
+        @DataClass.Generated.Member
+        public ArchiveActivityInfo(
+                @NonNull String title,
+                @NonNull Path iconBitmap,
+                @Nullable Path monochromeIconBitmap) {
+            this.mTitle = title;
+            com.android.internal.util.AnnotationValidations.validate(
+                    NonNull.class, null, mTitle);
+            this.mIconBitmap = iconBitmap;
+            com.android.internal.util.AnnotationValidations.validate(
+                    NonNull.class, null, mIconBitmap);
+            this.mMonochromeIconBitmap = monochromeIconBitmap;
+
+            // onConstructed(); // You can define this method to get a callback
+        }
+
+        /**
+         * Corresponds to the activity's android:label in the app's locale.
+         */
+        @DataClass.Generated.Member
+        public @NonNull String getTitle() {
+            return mTitle;
+        }
+
+        /**
+         * The path to the stored icon of the activity in the app's locale.
+         */
+        @DataClass.Generated.Member
+        public @NonNull Path getIconBitmap() {
+            return mIconBitmap;
+        }
+
+        /**
+         * See {@link #mIconBitmap}. Only set if the app defined a monochrome icon.
+         */
+        @DataClass.Generated.Member
+        public @Nullable Path getMonochromeIconBitmap() {
+            return mMonochromeIconBitmap;
+        }
+
+        @Override
+        @DataClass.Generated.Member
+        public String toString() {
+            // You can override field toString logic by defining methods like:
+            // String fieldNameToString() { ... }
+
+            return "ArchiveActivityInfo { " +
+                    "title = " + mTitle + ", " +
+                    "iconBitmap = " + mIconBitmap + ", " +
+                    "monochromeIconBitmap = " + mMonochromeIconBitmap +
+            " }";
+        }
+
+        @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(ArchiveActivityInfo other) { ... }
+            // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+            @SuppressWarnings("unchecked")
+            ArchiveActivityInfo that = (ArchiveActivityInfo) o;
+            //noinspection PointlessBooleanExpression
+            return true
+                    && java.util.Objects.equals(mTitle, that.mTitle)
+                    && java.util.Objects.equals(mIconBitmap, that.mIconBitmap)
+                    && java.util.Objects.equals(mMonochromeIconBitmap, that.mMonochromeIconBitmap);
+        }
+
+        @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(mTitle);
+            _hash = 31 * _hash + java.util.Objects.hashCode(mIconBitmap);
+            _hash = 31 * _hash + java.util.Objects.hashCode(mMonochromeIconBitmap);
+            return _hash;
+        }
+
+        @DataClass.Generated(
+                time = 1689169065133L,
+                codegenVersion = "1.0.23",
+                sourceFile = "frameworks/base/services/core/java/com/android/server/pm/pkg/ArchiveState.java",
+                inputSignatures = "private final @android.annotation.NonNull java.lang.String mTitle\nprivate final @android.annotation.NonNull java.nio.file.Path mIconBitmap\nprivate final @android.annotation.Nullable java.nio.file.Path mMonochromeIconBitmap\nclass ArchiveActivityInfo extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true)")
+        @Deprecated
+        private void __metadata() {}
+
+
+        //@formatter:on
+        // End of generated code
+
+    }
+
+
+
+
+
+    // Code below generated by codegen v1.0.23.
+    //
+    // DO NOT MODIFY!
+    // CHECKSTYLE:OFF Generated code
+    //
+    // To regenerate run:
+    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/services/core/java/com/android/server/pm/pkg/ArchiveState.java
+    //
+    // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+    //   Settings > Editor > Code Style > Formatter Control
+    //@formatter:off
+
+
+    /**
+     * Creates a new ArchiveState.
+     *
+     * @param activityInfos
+     *   Information about main activities.
+     *
+     *   <p> This list has at least one entry. In the vast majority of cases, this list has only one
+     *   entry.
+     * @param installerTitle
+     *   Corresponds to android:label of the installer responsible for the unarchival of the app.
+     *   Stored in the installer's locale .
+     */
+    @DataClass.Generated.Member
+    public ArchiveState(
+            @NonNull List<ArchiveActivityInfo> activityInfos,
+            @NonNull String installerTitle) {
+        this.mActivityInfos = activityInfos;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mActivityInfos);
+        this.mInstallerTitle = installerTitle;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mInstallerTitle);
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    /**
+     * Information about main activities.
+     *
+     * <p> This list has at least one entry. In the vast majority of cases, this list has only one
+     * entry.
+     */
+    @DataClass.Generated.Member
+    public @NonNull List<ArchiveActivityInfo> getActivityInfos() {
+        return mActivityInfos;
+    }
+
+    /**
+     * Corresponds to android:label of the installer responsible for the unarchival of the app.
+     * Stored in the installer's locale .
+     */
+    @DataClass.Generated.Member
+    public @NonNull String getInstallerTitle() {
+        return mInstallerTitle;
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public String toString() {
+        // You can override field toString logic by defining methods like:
+        // String fieldNameToString() { ... }
+
+        return "ArchiveState { " +
+                "activityInfos = " + mActivityInfos + ", " +
+                "installerTitle = " + mInstallerTitle +
+        " }";
+    }
+
+    @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(ArchiveState other) { ... }
+        // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        @SuppressWarnings("unchecked")
+        ArchiveState that = (ArchiveState) o;
+        //noinspection PointlessBooleanExpression
+        return true
+                && java.util.Objects.equals(mActivityInfos, that.mActivityInfos)
+                && java.util.Objects.equals(mInstallerTitle, that.mInstallerTitle);
+    }
+
+    @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(mActivityInfos);
+        _hash = 31 * _hash + java.util.Objects.hashCode(mInstallerTitle);
+        return _hash;
+    }
+
+    @DataClass.Generated(
+            time = 1689169065144L,
+            codegenVersion = "1.0.23",
+            sourceFile = "frameworks/base/services/core/java/com/android/server/pm/pkg/ArchiveState.java",
+            inputSignatures = "private final @android.annotation.NonNull java.util.List<com.android.server.pm.pkg.ArchiveActivityInfo> mActivityInfos\nprivate final @android.annotation.NonNull java.lang.String mInstallerTitle\nclass ArchiveState extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genEqualsHashCode=true, genToString=true)")
+    @Deprecated
+    private void __metadata() {}
+
+
+    //@formatter:on
+    // End of generated code
+
+}
diff --git a/services/core/java/com/android/server/pm/pkg/PackageState.java b/services/core/java/com/android/server/pm/pkg/PackageState.java
index 2c37876..3f347e4 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageState.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageState.java
@@ -59,11 +59,6 @@
 public interface PackageState {
 
     /*
-     * Until immutability or read-only caching is enabled, {@link PackageSetting} cannot be
-     * returned directly, so {@link PackageStateImpl} is used to temporarily copy the data.
-     * This is a relatively expensive operation since it has to create an object for every package,
-     * but it's much lighter than the alternative of generating {@link PackageInfo} objects.
-     * <p>
      * TODO: Documentation
      * TODO: Currently missing, should be exposed as API?
      *   - keySetData
@@ -350,6 +345,12 @@
     String getVolumeUuid();
 
     /**
+     * @see AndroidPackage#isDefaultToDeviceProtectedStorage()
+     * @hide
+     */
+    boolean isDefaultToDeviceProtectedStorage();
+
+    /**
      * @see AndroidPackage#isExternalStorage()
      * @hide
      */
diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java b/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java
deleted file mode 100644
index 3d056e8..0000000
--- a/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java
+++ /dev/null
@@ -1,751 +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.server.pm.pkg;
-
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManagerInternal;
-import android.content.pm.SigningInfo;
-import android.content.pm.overlay.OverlayPaths;
-import android.os.UserHandle;
-import android.util.ArraySet;
-import android.util.SparseArray;
-
-import com.android.internal.util.DataClass;
-import com.android.server.pm.PackageManagerService;
-import com.android.server.pm.PackageSetting;
-import com.android.server.pm.Settings;
-
-import java.io.File;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.function.Consumer;
-
-/**
- * Because a {@link PackageSetting} cannot be returned from {@link Settings} without holding the
- * {@link PackageManagerService#mLock}, this class serves as a memory snapshot of the state of a
- * single package, for use with {@link PackageManagerInternal#getPackageState(String)} and {@link
- * PackageManagerInternal#forEachPackageState(boolean, Consumer)}.
- *
- * @hide
- */
-@DataClass(genConstructor = false)
-@DataClass.Suppress({"mUserStates"})
-public class PackageStateImpl implements PackageState {
-
-    public static PackageState copy(@NonNull PackageStateInternal pkgSetting) {
-        return new PackageStateImpl(pkgSetting, pkgSetting.getPkg());
-    }
-
-    private static class Booleans {
-        @IntDef({
-                SYSTEM,
-                EXTERNAL_STORAGE,
-                PRIVILEGED,
-                OEM,
-                VENDOR,
-                PRODUCT,
-                SYSTEM_EXT,
-                REQUIRED_FOR_SYSTEM_USER,
-                ODM,
-                FORCE_QUERYABLE_OVERRIDE,
-                HIDDEN_UNTIL_INSTALLED,
-                INSTALL_PERMISSIONS_FIXED,
-                UPDATE_AVAILABLE,
-                UPDATED_SYSTEM_APP,
-                APK_IN_UPDATED_APEX,
-        })
-        public @interface Flags {
-        }
-
-        private static final int SYSTEM = 1;
-        private static final int EXTERNAL_STORAGE = 1 << 1;
-        private static final int PRIVILEGED = 1 << 2;
-        private static final int OEM = 1 << 3;
-        private static final int VENDOR = 1 << 4;
-        private static final int PRODUCT = 1 << 5;
-        private static final int SYSTEM_EXT = 1 << 6;
-        private static final int REQUIRED_FOR_SYSTEM_USER = 1 << 7;
-        private static final int ODM = 1 << 8;
-        private static final int FORCE_QUERYABLE_OVERRIDE = 1 << 9;
-        private static final int HIDDEN_UNTIL_INSTALLED = 1 << 10;
-        private static final int INSTALL_PERMISSIONS_FIXED = 1 << 11;
-        private static final int UPDATE_AVAILABLE = 1 << 12;
-        private static final int UPDATED_SYSTEM_APP = 1 << 13;
-        private static final int APK_IN_UPDATED_APEX = 1 << 14;
-    }
-
-    private int mBooleans;
-
-    private void setBoolean(@Booleans.Flags int flag, boolean value) {
-        if (value) {
-            mBooleans |= flag;
-        } else {
-            mBooleans &= ~flag;
-        }
-    }
-
-    private boolean getBoolean(@Booleans.Flags int flag) {
-        return (mBooleans & flag) != 0;
-    }
-
-    @Nullable
-    private final AndroidPackage mAndroidPackage;
-
-    @NonNull
-    private final String mPackageName;
-    @Nullable
-    private final String mVolumeUuid;
-    private final int mAppId;
-    private final int mCategoryOverride;
-    @Nullable
-    private final String mCpuAbiOverride;
-    @ApplicationInfo.HiddenApiEnforcementPolicy
-    private final int mHiddenApiEnforcementPolicy;
-    private final long mLastModifiedTime;
-    private final long mLastUpdateTime;
-    private final long mLongVersionCode;
-    @NonNull
-    private final Map<String, Set<String>> mMimeGroups;
-    @NonNull
-    private final File mPath;
-    @Nullable
-    private final String mPrimaryCpuAbi;
-    @Nullable
-    private final String mSecondaryCpuAbi;
-    @Nullable
-    private final String mSeInfo;
-    private final boolean mHasSharedUser;
-    private final int mSharedUserAppId;
-    @NonNull
-    private final String[] mUsesSdkLibraries;
-    @NonNull
-    private final long[] mUsesSdkLibrariesVersionsMajor;
-    @NonNull
-    private final String[] mUsesStaticLibraries;
-    @NonNull
-    private final long[] mUsesStaticLibrariesVersions;
-    @NonNull
-    private final List<SharedLibrary> mUsesLibraries;
-    @NonNull
-    private final List<String> mUsesLibraryFiles;
-    @NonNull
-    private final long[] mLastPackageUsageTime;
-    @NonNull
-    private final SigningInfo mSigningInfo;
-    @NonNull
-    private final SparseArray<PackageUserState> mUserStates;
-    @Nullable
-    private final String mApexModuleName;
-
-    private PackageStateImpl(@NonNull PackageState pkgState, @Nullable AndroidPackage pkg) {
-        mAndroidPackage = pkg;
-
-        setBoolean(Booleans.SYSTEM, pkgState.isSystem());
-        setBoolean(Booleans.EXTERNAL_STORAGE, pkgState.isExternalStorage());
-        setBoolean(Booleans.PRIVILEGED, pkgState.isPrivileged());
-        setBoolean(Booleans.OEM, pkgState.isOem());
-        setBoolean(Booleans.VENDOR, pkgState.isVendor());
-        setBoolean(Booleans.PRODUCT, pkgState.isProduct());
-        setBoolean(Booleans.SYSTEM_EXT, pkgState.isSystemExt());
-        setBoolean(Booleans.REQUIRED_FOR_SYSTEM_USER, pkgState.isRequiredForSystemUser());
-        setBoolean(Booleans.ODM, pkgState.isOdm());
-
-        mPackageName = pkgState.getPackageName();
-        mVolumeUuid = pkgState.getVolumeUuid();
-        mAppId = pkgState.getAppId();
-        mCategoryOverride = pkgState.getCategoryOverride();
-        mCpuAbiOverride = pkgState.getCpuAbiOverride();
-        mHiddenApiEnforcementPolicy = pkgState.getHiddenApiEnforcementPolicy();
-        mLastModifiedTime = pkgState.getLastModifiedTime();
-        mLastUpdateTime = pkgState.getLastUpdateTime();
-        mLongVersionCode = pkgState.getVersionCode();
-        mMimeGroups = Collections.unmodifiableMap(pkgState.getMimeGroups());
-        mPath = pkgState.getPath();
-        mPrimaryCpuAbi = pkgState.getPrimaryCpuAbi();
-        mSecondaryCpuAbi = pkgState.getSecondaryCpuAbi();
-        mSeInfo = pkgState.getSeInfo();
-        mHasSharedUser = pkgState.hasSharedUser();
-        mSharedUserAppId = pkgState.getSharedUserAppId();
-        mUsesSdkLibraries = pkgState.getUsesSdkLibraries();
-        mUsesSdkLibrariesVersionsMajor = pkgState.getUsesSdkLibrariesVersionsMajor();
-        mUsesStaticLibraries = pkgState.getUsesStaticLibraries();
-        mUsesStaticLibrariesVersions = pkgState.getUsesStaticLibrariesVersions();
-        mUsesLibraries = Collections.unmodifiableList(pkgState.getSharedLibraryDependencies());
-        mUsesLibraryFiles = Collections.unmodifiableList(pkgState.getUsesLibraryFiles());
-        setBoolean(Booleans.FORCE_QUERYABLE_OVERRIDE, pkgState.isForceQueryableOverride());
-        setBoolean(Booleans.HIDDEN_UNTIL_INSTALLED, pkgState.isHiddenUntilInstalled());
-        setBoolean(Booleans.INSTALL_PERMISSIONS_FIXED, pkgState.isInstallPermissionsFixed());
-        setBoolean(Booleans.UPDATE_AVAILABLE, pkgState.isUpdateAvailable());
-        mLastPackageUsageTime = pkgState.getLastPackageUsageTime();
-        setBoolean(Booleans.UPDATED_SYSTEM_APP, pkgState.isUpdatedSystemApp());
-        setBoolean(Booleans.APK_IN_UPDATED_APEX, pkgState.isApkInUpdatedApex());
-        mSigningInfo = pkgState.getSigningInfo();
-
-        SparseArray<? extends PackageUserState> userStates = pkgState.getUserStates();
-        int userStatesSize = userStates.size();
-        mUserStates = new SparseArray<>(userStatesSize);
-        for (int index = 0; index < userStatesSize; index++) {
-            mUserStates.put(userStates.keyAt(index),
-                    UserStateImpl.copy(userStates.valueAt(index)));
-        }
-
-        mApexModuleName = pkgState.getApexModuleName();
-    }
-
-    @NonNull
-    @Override
-    public PackageUserState getStateForUser(@NonNull UserHandle user) {
-        PackageUserState userState = getUserStates().get(user.getIdentifier());
-        return userState == null ? PackageUserState.DEFAULT : userState;
-    }
-
-    @Override
-    public boolean isExternalStorage() {
-        return getBoolean(Booleans.EXTERNAL_STORAGE);
-    }
-
-    @Override
-    public boolean isForceQueryableOverride() {
-        return getBoolean(Booleans.FORCE_QUERYABLE_OVERRIDE);
-    }
-
-    @Override
-    public boolean isHiddenUntilInstalled() {
-        return getBoolean(Booleans.HIDDEN_UNTIL_INSTALLED);
-    }
-
-    @Override
-    public boolean isInstallPermissionsFixed() {
-        return getBoolean(Booleans.INSTALL_PERMISSIONS_FIXED);
-    }
-
-    @Override
-    public boolean isOdm() {
-        return getBoolean(Booleans.ODM);
-    }
-
-    @Override
-    public boolean isOem() {
-        return getBoolean(Booleans.OEM);
-    }
-
-    @Override
-    public boolean isPrivileged() {
-        return getBoolean(Booleans.PRIVILEGED);
-    }
-
-    @Override
-    public boolean isProduct() {
-        return getBoolean(Booleans.PRODUCT);
-    }
-
-    @Override
-    public boolean isRequiredForSystemUser() {
-        return getBoolean(Booleans.REQUIRED_FOR_SYSTEM_USER);
-    }
-
-    @Override
-    public boolean isSystem() {
-        return getBoolean(Booleans.SYSTEM);
-    }
-
-    @Override
-    public boolean isSystemExt() {
-        return getBoolean(Booleans.SYSTEM_EXT);
-    }
-
-    @Override
-    public boolean isUpdateAvailable() {
-        return getBoolean(Booleans.UPDATE_AVAILABLE);
-    }
-
-    @Override
-    public boolean isUpdatedSystemApp() {
-        return getBoolean(Booleans.UPDATED_SYSTEM_APP);
-    }
-
-    @Override
-    public boolean isApkInUpdatedApex() {
-        return getBoolean(Booleans.APK_IN_UPDATED_APEX);
-    }
-
-    @Override
-    public boolean isVendor() {
-        return getBoolean(Booleans.VENDOR);
-    }
-
-    @Override
-    public long getVersionCode() {
-        return mLongVersionCode;
-    }
-
-    @Override
-    public boolean hasSharedUser() {
-        return mHasSharedUser;
-    }
-
-    @Override
-    public boolean isApex() {
-        return getAndroidPackage() != null && getAndroidPackage().isApex();
-    }
-
-    /**
-     * @hide
-     */
-    @DataClass(genConstructor = false)
-    public static class UserStateImpl implements PackageUserState {
-
-        public static PackageUserState copy(@NonNull PackageUserState state) {
-            return new UserStateImpl(state);
-        }
-
-        private static class Booleans {
-            @IntDef({
-                    HIDDEN,
-                    INSTALLED,
-                    INSTANT_APP,
-                    NOT_LAUNCHED,
-                    STOPPED,
-                    SUSPENDED,
-                    VIRTUAL_PRELOAD,
-            })
-            public @interface Flags {
-            }
-
-            private static final int HIDDEN = 1;
-            private static final int INSTALLED = 1 << 1;
-            private static final int INSTANT_APP = 1 << 2;
-            private static final int NOT_LAUNCHED = 1 << 3;
-            private static final int STOPPED = 1 << 4;
-            private static final int SUSPENDED = 1 << 5;
-            private static final int VIRTUAL_PRELOAD = 1 << 6;
-        }
-
-        private int mBooleans;
-
-        private void setBoolean(@Booleans.Flags int flag, boolean value) {
-            if (value) {
-                mBooleans |= flag;
-            } else {
-                mBooleans &= ~flag;
-            }
-        }
-
-        private boolean getBoolean(@Booleans.Flags int flag) {
-            return (mBooleans & flag) != 0;
-        }
-
-        private final long mCeDataInode;
-        @NonNull
-        private final ArraySet<String> mDisabledComponents;
-        @PackageManager.DistractionRestriction
-        private final int mDistractionFlags;
-        @NonNull
-        private final ArraySet<String> mEnabledComponents;
-        private final int mEnabledState;
-        @Nullable
-        private final String mHarmfulAppWarning;
-        @PackageManager.InstallReason
-        private final int mInstallReason;
-        @Nullable
-        private final String mLastDisableAppCaller;
-        @NonNull
-        private final OverlayPaths mOverlayPaths;
-        @NonNull
-        private final Map<String, OverlayPaths> mSharedLibraryOverlayPaths;
-        @PackageManager.UninstallReason
-        private final int mUninstallReason;
-        @Nullable
-        private final String mSplashScreenTheme;
-        @PackageManager.UserMinAspectRatio
-        private final int mMinAspectRatio;
-        private final long mFirstInstallTimeMillis;
-
-        private UserStateImpl(@NonNull PackageUserState userState) {
-            mCeDataInode = userState.getCeDataInode();
-            mDisabledComponents = userState.getDisabledComponents();
-            mDistractionFlags = userState.getDistractionFlags();
-            mEnabledComponents = userState.getEnabledComponents();
-            mEnabledState = userState.getEnabledState();
-            mHarmfulAppWarning = userState.getHarmfulAppWarning();
-            mInstallReason = userState.getInstallReason();
-            mLastDisableAppCaller = userState.getLastDisableAppCaller();
-            mOverlayPaths = userState.getOverlayPaths();
-            mSharedLibraryOverlayPaths = userState.getSharedLibraryOverlayPaths();
-            mUninstallReason = userState.getUninstallReason();
-            mSplashScreenTheme = userState.getSplashScreenTheme();
-            mMinAspectRatio = userState.getMinAspectRatio();
-            setBoolean(Booleans.HIDDEN, userState.isHidden());
-            setBoolean(Booleans.INSTALLED, userState.isInstalled());
-            setBoolean(Booleans.INSTANT_APP, userState.isInstantApp());
-            setBoolean(Booleans.NOT_LAUNCHED, userState.isNotLaunched());
-            setBoolean(Booleans.STOPPED, userState.isStopped());
-            setBoolean(Booleans.SUSPENDED, userState.isSuspended());
-            setBoolean(Booleans.VIRTUAL_PRELOAD, userState.isVirtualPreload());
-            mFirstInstallTimeMillis = userState.getFirstInstallTimeMillis();
-        }
-
-        @Override
-        public boolean isHidden() {
-            return getBoolean(Booleans.HIDDEN);
-        }
-
-        @Override
-        public boolean isInstalled() {
-            return getBoolean(Booleans.INSTALLED);
-        }
-
-        @Override
-        public boolean isInstantApp() {
-            return getBoolean(Booleans.INSTANT_APP);
-        }
-
-        @Override
-        public boolean isNotLaunched() {
-            return getBoolean(Booleans.NOT_LAUNCHED);
-        }
-
-        @Override
-        public boolean isStopped() {
-            return getBoolean(Booleans.STOPPED);
-        }
-
-        @Override
-        public boolean isSuspended() {
-            return getBoolean(Booleans.SUSPENDED);
-        }
-
-        @Override
-        public boolean isVirtualPreload() {
-            return getBoolean(Booleans.VIRTUAL_PRELOAD);
-        }
-
-        @Override
-        public boolean isComponentEnabled(String componentName) {
-            return mEnabledComponents.contains(componentName);
-        }
-
-        @Override
-        public boolean isComponentDisabled(String componentName) {
-            return mDisabledComponents.contains(componentName);
-        }
-
-        @Override
-        public OverlayPaths getAllOverlayPaths() {
-            if (mOverlayPaths == null && mSharedLibraryOverlayPaths == null) {
-                return null;
-            }
-            final OverlayPaths.Builder newPaths = new OverlayPaths.Builder();
-            newPaths.addAll(mOverlayPaths);
-            if (mSharedLibraryOverlayPaths != null) {
-                for (final OverlayPaths libOverlayPaths : mSharedLibraryOverlayPaths.values()) {
-                    newPaths.addAll(libOverlayPaths);
-                }
-            }
-            return newPaths.build();
-        }
-
-
-
-        // Code below generated by codegen v1.0.23.
-        //
-        // DO NOT MODIFY!
-        // CHECKSTYLE:OFF Generated code
-        //
-        // To regenerate run:
-        // $ codegen $ANDROID_BUILD_TOP/frameworks/base/services/core/java/com/android/server/pm/pkg/PackageStateImpl.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 int getBooleans() {
-            return mBooleans;
-        }
-
-        @DataClass.Generated.Member
-        public long getCeDataInode() {
-            return mCeDataInode;
-        }
-
-        @DataClass.Generated.Member
-        public @NonNull ArraySet<String> getDisabledComponents() {
-            return mDisabledComponents;
-        }
-
-        @DataClass.Generated.Member
-        public @PackageManager.DistractionRestriction int getDistractionFlags() {
-            return mDistractionFlags;
-        }
-
-        @DataClass.Generated.Member
-        public @NonNull ArraySet<String> getEnabledComponents() {
-            return mEnabledComponents;
-        }
-
-        @DataClass.Generated.Member
-        public int getEnabledState() {
-            return mEnabledState;
-        }
-
-        @DataClass.Generated.Member
-        public @Nullable String getHarmfulAppWarning() {
-            return mHarmfulAppWarning;
-        }
-
-        @DataClass.Generated.Member
-        public @PackageManager.InstallReason int getInstallReason() {
-            return mInstallReason;
-        }
-
-        @DataClass.Generated.Member
-        public @Nullable String getLastDisableAppCaller() {
-            return mLastDisableAppCaller;
-        }
-
-        @DataClass.Generated.Member
-        public @NonNull OverlayPaths getOverlayPaths() {
-            return mOverlayPaths;
-        }
-
-        @DataClass.Generated.Member
-        public @NonNull Map<String,OverlayPaths> getSharedLibraryOverlayPaths() {
-            return mSharedLibraryOverlayPaths;
-        }
-
-        @DataClass.Generated.Member
-        public @PackageManager.UninstallReason int getUninstallReason() {
-            return mUninstallReason;
-        }
-
-        @DataClass.Generated.Member
-        public @Nullable String getSplashScreenTheme() {
-            return mSplashScreenTheme;
-        }
-
-        @DataClass.Generated.Member
-        public @PackageManager.UserMinAspectRatio int getMinAspectRatio() {
-            return mMinAspectRatio;
-        }
-
-        @DataClass.Generated.Member
-        public long getFirstInstallTimeMillis() {
-            return mFirstInstallTimeMillis;
-        }
-
-        @DataClass.Generated.Member
-        public @NonNull UserStateImpl setBooleans( int value) {
-            mBooleans = value;
-            return this;
-        }
-
-        @DataClass.Generated(
-                time = 1687938966108L,
-                codegenVersion = "1.0.23",
-                sourceFile = "frameworks/base/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java",
-                inputSignatures = "private  int mBooleans\nprivate final  long mCeDataInode\nprivate final @android.annotation.NonNull android.util.ArraySet<java.lang.String> mDisabledComponents\nprivate final @android.content.pm.PackageManager.DistractionRestriction int mDistractionFlags\nprivate final @android.annotation.NonNull android.util.ArraySet<java.lang.String> mEnabledComponents\nprivate final  int mEnabledState\nprivate final @android.annotation.Nullable java.lang.String mHarmfulAppWarning\nprivate final @android.content.pm.PackageManager.InstallReason int mInstallReason\nprivate final @android.annotation.Nullable java.lang.String mLastDisableAppCaller\nprivate final @android.annotation.NonNull android.content.pm.overlay.OverlayPaths mOverlayPaths\nprivate final @android.annotation.NonNull java.util.Map<java.lang.String,android.content.pm.overlay.OverlayPaths> mSharedLibraryOverlayPaths\nprivate final @android.content.pm.PackageManager.UninstallReason int mUninstallReason\nprivate final @android.annotation.Nullable java.lang.String mSplashScreenTheme\nprivate final @android.content.pm.PackageManager.UserMinAspectRatio int mMinAspectRatio\nprivate final  long mFirstInstallTimeMillis\npublic static  com.android.server.pm.pkg.PackageUserState copy(com.android.server.pm.pkg.PackageUserState)\nprivate  void setBoolean(int,boolean)\nprivate  boolean getBoolean(int)\npublic @java.lang.Override boolean isHidden()\npublic @java.lang.Override boolean isInstalled()\npublic @java.lang.Override boolean isInstantApp()\npublic @java.lang.Override boolean isNotLaunched()\npublic @java.lang.Override boolean isStopped()\npublic @java.lang.Override boolean isSuspended()\npublic @java.lang.Override boolean isVirtualPreload()\npublic @java.lang.Override boolean isComponentEnabled(java.lang.String)\npublic @java.lang.Override boolean isComponentDisabled(java.lang.String)\npublic @java.lang.Override android.content.pm.overlay.OverlayPaths getAllOverlayPaths()\nclass UserStateImpl extends java.lang.Object implements [com.android.server.pm.pkg.PackageUserState]\nprivate static final  int HIDDEN\nprivate static final  int INSTALLED\nprivate static final  int INSTANT_APP\nprivate static final  int NOT_LAUNCHED\nprivate static final  int STOPPED\nprivate static final  int SUSPENDED\nprivate static final  int VIRTUAL_PRELOAD\nclass Booleans extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false)")
-        @Deprecated
-        private void __metadata() {}
-
-
-        //@formatter:on
-        // End of generated code
-
-    }
-
-
-
-    // Code below generated by codegen v1.0.23.
-    //
-    // DO NOT MODIFY!
-    // CHECKSTYLE:OFF Generated code
-    //
-    // To regenerate run:
-    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/services/core/java/com/android/server/pm/pkg/PackageStateImpl.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 int getBooleans() {
-        return mBooleans;
-    }
-
-    @DataClass.Generated.Member
-    public @Nullable AndroidPackage getAndroidPackage() {
-        return mAndroidPackage;
-    }
-
-    @DataClass.Generated.Member
-    public @NonNull String getPackageName() {
-        return mPackageName;
-    }
-
-    @DataClass.Generated.Member
-    public @Nullable String getVolumeUuid() {
-        return mVolumeUuid;
-    }
-
-    @DataClass.Generated.Member
-    public int getAppId() {
-        return mAppId;
-    }
-
-    @DataClass.Generated.Member
-    public int getCategoryOverride() {
-        return mCategoryOverride;
-    }
-
-    @DataClass.Generated.Member
-    public @Nullable String getCpuAbiOverride() {
-        return mCpuAbiOverride;
-    }
-
-    @DataClass.Generated.Member
-    public @ApplicationInfo.HiddenApiEnforcementPolicy int getHiddenApiEnforcementPolicy() {
-        return mHiddenApiEnforcementPolicy;
-    }
-
-    @DataClass.Generated.Member
-    public long getLastModifiedTime() {
-        return mLastModifiedTime;
-    }
-
-    @DataClass.Generated.Member
-    public long getLastUpdateTime() {
-        return mLastUpdateTime;
-    }
-
-    @DataClass.Generated.Member
-    public long getLongVersionCode() {
-        return mLongVersionCode;
-    }
-
-    @DataClass.Generated.Member
-    public @NonNull Map<String,Set<String>> getMimeGroups() {
-        return mMimeGroups;
-    }
-
-    @DataClass.Generated.Member
-    public @NonNull File getPath() {
-        return mPath;
-    }
-
-    @DataClass.Generated.Member
-    public @Nullable String getPrimaryCpuAbi() {
-        return mPrimaryCpuAbi;
-    }
-
-    @DataClass.Generated.Member
-    public @Nullable String getSecondaryCpuAbi() {
-        return mSecondaryCpuAbi;
-    }
-
-    @DataClass.Generated.Member
-    public @Nullable String getSeInfo() {
-        return mSeInfo;
-    }
-
-    @DataClass.Generated.Member
-    public boolean isHasSharedUser() {
-        return mHasSharedUser;
-    }
-
-    @DataClass.Generated.Member
-    public int getSharedUserAppId() {
-        return mSharedUserAppId;
-    }
-
-    @DataClass.Generated.Member
-    public @NonNull String[] getUsesSdkLibraries() {
-        return mUsesSdkLibraries;
-    }
-
-    @DataClass.Generated.Member
-    public @NonNull long[] getUsesSdkLibrariesVersionsMajor() {
-        return mUsesSdkLibrariesVersionsMajor;
-    }
-
-    @DataClass.Generated.Member
-    public @NonNull String[] getUsesStaticLibraries() {
-        return mUsesStaticLibraries;
-    }
-
-    @DataClass.Generated.Member
-    public @NonNull long[] getUsesStaticLibrariesVersions() {
-        return mUsesStaticLibrariesVersions;
-    }
-
-    @DataClass.Generated.Member
-    public @NonNull List<SharedLibrary> getSharedLibraryDependencies() {
-        return mUsesLibraries;
-    }
-
-    @DataClass.Generated.Member
-    public @NonNull List<String> getUsesLibraryFiles() {
-        return mUsesLibraryFiles;
-    }
-
-    @DataClass.Generated.Member
-    public @NonNull long[] getLastPackageUsageTime() {
-        return mLastPackageUsageTime;
-    }
-
-    @DataClass.Generated.Member
-    public @NonNull SigningInfo getSigningInfo() {
-        return mSigningInfo;
-    }
-
-    @DataClass.Generated.Member
-    public @NonNull SparseArray<PackageUserState> getUserStates() {
-        return mUserStates;
-    }
-
-    @DataClass.Generated.Member
-    public @Nullable String getApexModuleName() {
-        return mApexModuleName;
-    }
-
-    @DataClass.Generated.Member
-    public @NonNull PackageStateImpl setBooleans( int value) {
-        mBooleans = value;
-        return this;
-    }
-
-    @DataClass.Generated(
-            time = 1671671043929L,
-            codegenVersion = "1.0.23",
-            sourceFile = "frameworks/base/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java",
-            inputSignatures = "private  int mBooleans\nprivate final @android.annotation.Nullable com.android.server.pm.pkg.AndroidPackage mAndroidPackage\nprivate final @android.annotation.NonNull java.lang.String mPackageName\nprivate final @android.annotation.Nullable java.lang.String mVolumeUuid\nprivate final  int mAppId\nprivate final  int mCategoryOverride\nprivate final @android.annotation.Nullable java.lang.String mCpuAbiOverride\nprivate final @android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy int mHiddenApiEnforcementPolicy\nprivate final  long mLastModifiedTime\nprivate final  long mLastUpdateTime\nprivate final  long mLongVersionCode\nprivate final @android.annotation.NonNull java.util.Map<java.lang.String,java.util.Set<java.lang.String>> mMimeGroups\nprivate final @android.annotation.NonNull java.io.File mPath\nprivate final @android.annotation.Nullable java.lang.String mPrimaryCpuAbi\nprivate final @android.annotation.Nullable java.lang.String mSecondaryCpuAbi\nprivate final @android.annotation.Nullable java.lang.String mSeInfo\nprivate final  boolean mHasSharedUser\nprivate final  int mSharedUserAppId\nprivate final @android.annotation.NonNull java.lang.String[] mUsesSdkLibraries\nprivate final @android.annotation.NonNull long[] mUsesSdkLibrariesVersionsMajor\nprivate final @android.annotation.NonNull java.lang.String[] mUsesStaticLibraries\nprivate final @android.annotation.NonNull long[] mUsesStaticLibrariesVersions\nprivate final @android.annotation.NonNull java.util.List<com.android.server.pm.pkg.SharedLibrary> mUsesLibraries\nprivate final @android.annotation.NonNull java.util.List<java.lang.String> mUsesLibraryFiles\nprivate final @android.annotation.NonNull long[] mLastPackageUsageTime\nprivate final @android.annotation.NonNull android.content.pm.SigningInfo mSigningInfo\nprivate final @android.annotation.NonNull android.util.SparseArray<com.android.server.pm.pkg.PackageUserState> mUserStates\nprivate final @android.annotation.Nullable java.lang.String mApexModuleName\npublic static  com.android.server.pm.pkg.PackageState copy(com.android.server.pm.pkg.PackageStateInternal)\nprivate  void setBoolean(int,boolean)\nprivate  boolean getBoolean(int)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageUserState getStateForUser(android.os.UserHandle)\npublic @java.lang.Override boolean isExternalStorage()\npublic @java.lang.Override boolean isForceQueryableOverride()\npublic @java.lang.Override boolean isHiddenUntilInstalled()\npublic @java.lang.Override boolean isInstallPermissionsFixed()\npublic @java.lang.Override boolean isOdm()\npublic @java.lang.Override boolean isOem()\npublic @java.lang.Override boolean isPrivileged()\npublic @java.lang.Override boolean isProduct()\npublic @java.lang.Override boolean isRequiredForSystemUser()\npublic @java.lang.Override boolean isSystem()\npublic @java.lang.Override boolean isSystemExt()\npublic @java.lang.Override boolean isUpdateAvailable()\npublic @java.lang.Override boolean isUpdatedSystemApp()\npublic @java.lang.Override boolean isApkInUpdatedApex()\npublic @java.lang.Override boolean isVendor()\npublic @java.lang.Override long getVersionCode()\npublic @java.lang.Override boolean hasSharedUser()\npublic @java.lang.Override boolean isApex()\nclass PackageStateImpl extends java.lang.Object implements [com.android.server.pm.pkg.PackageState]\nprivate static final  int SYSTEM\nprivate static final  int EXTERNAL_STORAGE\nprivate static final  int PRIVILEGED\nprivate static final  int OEM\nprivate static final  int VENDOR\nprivate static final  int PRODUCT\nprivate static final  int SYSTEM_EXT\nprivate static final  int REQUIRED_FOR_SYSTEM_USER\nprivate static final  int ODM\nprivate static final  int FORCE_QUERYABLE_OVERRIDE\nprivate static final  int HIDDEN_UNTIL_INSTALLED\nprivate static final  int INSTALL_PERMISSIONS_FIXED\nprivate static final  int UPDATE_AVAILABLE\nprivate static final  int UPDATED_SYSTEM_APP\nprivate static final  int APK_IN_UPDATED_APEX\nclass Booleans extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false)")
-    @Deprecated
-    private void __metadata() {}
-
-
-    //@formatter:on
-    // End of generated code
-
-}
diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java b/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java
index f839648..fc74a195 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageStateInternal.java
@@ -35,7 +35,7 @@
  */
 public interface PackageStateInternal extends PackageState {
 
-    @NonNull
+    @Nullable
     AndroidPackageInternal getPkg();
 
     // TODO: Remove in favor of exposing APIs directly?
diff --git a/services/core/java/com/android/server/pm/pkg/PackageUserState.java b/services/core/java/com/android/server/pm/pkg/PackageUserState.java
index f75d214..81915b4 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageUserState.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageUserState.java
@@ -225,4 +225,12 @@
      */
     @PackageManager.UserMinAspectRatio
     int getMinAspectRatio();
+    /**
+     * Information about the archived state of an app. Set only if an app is archived.
+     *
+     * @hide
+     */
+    @Immutable.Ignore
+    @Nullable
+    ArchiveState getArchiveState();
 }
diff --git a/services/core/java/com/android/server/pm/pkg/PackageUserStateDefault.java b/services/core/java/com/android/server/pm/pkg/PackageUserStateDefault.java
index 1fb12a8..cce18a8 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageUserStateDefault.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageUserStateDefault.java
@@ -185,4 +185,10 @@
             @NonNull ComponentName componentName) {
         return null;
     }
+
+    @Nullable
+    @Override
+    public ArchiveState getArchiveState() {
+        return null;
+    }
 }
diff --git a/services/core/java/com/android/server/pm/pkg/PackageUserStateImpl.java b/services/core/java/com/android/server/pm/pkg/PackageUserStateImpl.java
index d911ac1..d8c8af6 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageUserStateImpl.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageUserStateImpl.java
@@ -17,6 +17,7 @@
 package com.android.server.pm.pkg;
 
 import android.annotation.CurrentTimeMillisLong;
+import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.ComponentName;
@@ -45,9 +46,44 @@
 /** @hide */
 @DataClass(genConstructor = false, genBuilder = false, genEqualsHashCode = true)
 @DataClass.Suppress({"mOverlayPathsLock", "mOverlayPaths", "mSharedLibraryOverlayPathsLock",
-        "mSharedLibraryOverlayPaths", "setOverlayPaths", "setCachedOverlayPaths", "getWatchable"})
+        "mSharedLibraryOverlayPaths", "setOverlayPaths", "setCachedOverlayPaths", "getWatchable",
+        "getBooleans"
+})
 public class PackageUserStateImpl extends WatchableImpl implements PackageUserStateInternal,
         Snappable {
+    // Use a bitset to store boolean data to save memory
+    private static class Booleans {
+        @IntDef({
+                INSTALLED,
+                STOPPED,
+                NOT_LAUNCHED,
+                HIDDEN,
+                INSTANT_APP,
+                VIRTUAL_PRELOADED,
+        })
+        public @interface Flags {
+        }
+        private static final int INSTALLED = 1;
+        private static final int STOPPED = 1 << 1;
+        private static final int NOT_LAUNCHED = 1 << 2;
+        // Is the app restricted by owner / admin
+        private static final int HIDDEN = 1 << 3;
+        private static final int INSTANT_APP = 1 << 4;
+        private static final int VIRTUAL_PRELOADED = 1 << 5;
+    }
+    private int mBooleans;
+
+    private void setBoolean(@Booleans.Flags int flag, boolean value) {
+        if (value) {
+            mBooleans |= flag;
+        } else {
+            mBooleans &= ~flag;
+        }
+    }
+
+    private boolean getBoolean(@Booleans.Flags int flag) {
+        return (mBooleans & flag) != 0;
+    }
 
     @Nullable
     protected WatchedArraySet<String> mDisabledComponentsWatched;
@@ -55,13 +91,7 @@
     protected WatchedArraySet<String> mEnabledComponentsWatched;
 
     private long mCeDataInode;
-    private boolean mInstalled = true;
-    private boolean mStopped;
-    private boolean mNotLaunched;
-    private boolean mHidden; // Is the app restricted by owner / admin
     private int mDistractionFlags;
-    private boolean mInstantApp;
-    private boolean mVirtualPreload;
     @PackageManager.EnabledState
     private int mEnabledState = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
     @PackageManager.InstallReason
@@ -101,6 +131,9 @@
     @Nullable
     private Watchable mWatchable;
 
+    @Nullable
+    private ArchiveState mArchiveState;
+
     @NonNull
     final SnapshotCache<PackageUserStateImpl> mSnapshot;
 
@@ -119,15 +152,18 @@
         super();
         mWatchable = null;
         mSnapshot = makeCache();
+        setBoolean(Booleans.INSTALLED, true);
     }
 
     public PackageUserStateImpl(@NonNull Watchable watchable) {
         mWatchable = watchable;
         mSnapshot = makeCache();
+        setBoolean(Booleans.INSTALLED, true);
     }
 
     public PackageUserStateImpl(@NonNull Watchable watchable, PackageUserStateImpl other) {
         mWatchable = watchable;
+        mBooleans = other.mBooleans;
         mDisabledComponentsWatched = other.mDisabledComponentsWatched == null
                 ? null : other.mDisabledComponentsWatched.snapshot();
         mEnabledComponentsWatched =  other.mEnabledComponentsWatched == null
@@ -136,13 +172,7 @@
         mSharedLibraryOverlayPaths = other.mSharedLibraryOverlayPaths == null
                 ? null : other.mSharedLibraryOverlayPaths.snapshot();
         mCeDataInode = other.mCeDataInode;
-        mInstalled = other.mInstalled;
-        mStopped = other.mStopped;
-        mNotLaunched = other.mNotLaunched;
-        mHidden = other.mHidden;
         mDistractionFlags = other.mDistractionFlags;
-        mInstantApp = other.mInstantApp;
-        mVirtualPreload = other.mVirtualPreload;
         mEnabledState = other.mEnabledState;
         mInstallReason = other.mInstallReason;
         mUninstallReason = other.mUninstallReason;
@@ -154,6 +184,7 @@
         mComponentLabelIconOverrideMap = other.mComponentLabelIconOverrideMap == null
                 ? null : other.mComponentLabelIconOverrideMap.snapshot();
         mFirstInstallTimeMillis = other.mFirstInstallTimeMillis;
+        mArchiveState = other.mArchiveState;
         mSnapshot = new SnapshotCache.Sealed<>();
     }
 
@@ -414,25 +445,25 @@
     }
 
     public @NonNull PackageUserStateImpl setInstalled(boolean value) {
-        mInstalled = value;
+        setBoolean(Booleans.INSTALLED, value);
         onChanged();
         return this;
     }
 
     public @NonNull PackageUserStateImpl setStopped(boolean value) {
-        mStopped = value;
+        setBoolean(Booleans.STOPPED, value);
         onChanged();
         return this;
     }
 
     public @NonNull PackageUserStateImpl setNotLaunched(boolean value) {
-        mNotLaunched = value;
+        setBoolean(Booleans.NOT_LAUNCHED, value);
         onChanged();
         return this;
     }
 
     public @NonNull PackageUserStateImpl setHidden(boolean value) {
-        mHidden = value;
+        setBoolean(Booleans.HIDDEN, value);
         onChanged();
         return this;
     }
@@ -444,13 +475,13 @@
     }
 
     public @NonNull PackageUserStateImpl setInstantApp(boolean value) {
-        mInstantApp = value;
+        setBoolean(Booleans.INSTANT_APP, value);
         onChanged();
         return this;
     }
 
     public @NonNull PackageUserStateImpl setVirtualPreload(boolean value) {
-        mVirtualPreload = value;
+        setBoolean(Booleans.VIRTUAL_PRELOADED, value);
         onChanged();
         return this;
     }
@@ -563,6 +594,18 @@
         return this;
     }
 
+    /**
+     * Sets the value for {@link #getArchiveState()}.
+     *
+     * @hide
+     */
+    @NonNull
+    public PackageUserStateImpl setArchiveState(@NonNull ArchiveState archiveState) {
+        mArchiveState = archiveState;
+        onChanged();
+        return this;
+    }
+
     @NonNull
     @Override
     public Map<String, OverlayPaths> getSharedLibraryOverlayPaths() {
@@ -597,6 +640,38 @@
     }
 
 
+    @Override
+    public boolean isInstalled() {
+        return getBoolean(Booleans.INSTALLED);
+    }
+
+    @Override
+    public boolean isStopped() {
+        return getBoolean(Booleans.STOPPED);
+    }
+
+    @Override
+    public boolean isNotLaunched() {
+        return getBoolean(Booleans.NOT_LAUNCHED);
+    }
+
+    @Override
+    public boolean isHidden() {
+        return getBoolean(Booleans.HIDDEN);
+    }
+
+    @Override
+    public boolean isInstantApp() {
+        return getBoolean(Booleans.INSTANT_APP);
+    }
+
+    @Override
+    public boolean isVirtualPreload() {
+        return getBoolean(Booleans.VIRTUAL_PRELOADED);
+    }
+
+
+
 
     // Code below generated by codegen v1.0.23.
     //
@@ -627,41 +702,11 @@
     }
 
     @DataClass.Generated.Member
-    public boolean isInstalled() {
-        return mInstalled;
-    }
-
-    @DataClass.Generated.Member
-    public boolean isStopped() {
-        return mStopped;
-    }
-
-    @DataClass.Generated.Member
-    public boolean isNotLaunched() {
-        return mNotLaunched;
-    }
-
-    @DataClass.Generated.Member
-    public boolean isHidden() {
-        return mHidden;
-    }
-
-    @DataClass.Generated.Member
     public int getDistractionFlags() {
         return mDistractionFlags;
     }
 
     @DataClass.Generated.Member
-    public boolean isInstantApp() {
-        return mInstantApp;
-    }
-
-    @DataClass.Generated.Member
-    public boolean isVirtualPreload() {
-        return mVirtualPreload;
-    }
-
-    @DataClass.Generated.Member
     public @PackageManager.EnabledState int getEnabledState() {
         return mEnabledState;
     }
@@ -720,11 +765,22 @@
     }
 
     @DataClass.Generated.Member
+    public @Nullable ArchiveState getArchiveState() {
+        return mArchiveState;
+    }
+
+    @DataClass.Generated.Member
     public @NonNull SnapshotCache<PackageUserStateImpl> getSnapshot() {
         return mSnapshot;
     }
 
     @DataClass.Generated.Member
+    public @NonNull PackageUserStateImpl setBooleans( int value) {
+        mBooleans = value;
+        return this;
+    }
+
+    @DataClass.Generated.Member
     public @NonNull PackageUserStateImpl setDisabledComponentsWatched(@NonNull WatchedArraySet<String> value) {
         mDisabledComponentsWatched = value;
         return this;
@@ -770,16 +826,11 @@
         PackageUserStateImpl that = (PackageUserStateImpl) o;
         //noinspection PointlessBooleanExpression
         return true
+                && mBooleans == that.mBooleans
                 && Objects.equals(mDisabledComponentsWatched, that.mDisabledComponentsWatched)
                 && Objects.equals(mEnabledComponentsWatched, that.mEnabledComponentsWatched)
                 && mCeDataInode == that.mCeDataInode
-                && mInstalled == that.mInstalled
-                && mStopped == that.mStopped
-                && mNotLaunched == that.mNotLaunched
-                && mHidden == that.mHidden
                 && mDistractionFlags == that.mDistractionFlags
-                && mInstantApp == that.mInstantApp
-                && mVirtualPreload == that.mVirtualPreload
                 && mEnabledState == that.mEnabledState
                 && mInstallReason == that.mInstallReason
                 && mUninstallReason == that.mUninstallReason
@@ -793,6 +844,7 @@
                 && Objects.equals(mComponentLabelIconOverrideMap, that.mComponentLabelIconOverrideMap)
                 && mFirstInstallTimeMillis == that.mFirstInstallTimeMillis
                 && watchableEquals(that.mWatchable)
+                && Objects.equals(mArchiveState, that.mArchiveState)
                 && snapshotEquals(that.mSnapshot);
     }
 
@@ -803,16 +855,11 @@
         // int fieldNameHashCode() { ... }
 
         int _hash = 1;
+        _hash = 31 * _hash + mBooleans;
         _hash = 31 * _hash + Objects.hashCode(mDisabledComponentsWatched);
         _hash = 31 * _hash + Objects.hashCode(mEnabledComponentsWatched);
         _hash = 31 * _hash + Long.hashCode(mCeDataInode);
-        _hash = 31 * _hash + Boolean.hashCode(mInstalled);
-        _hash = 31 * _hash + Boolean.hashCode(mStopped);
-        _hash = 31 * _hash + Boolean.hashCode(mNotLaunched);
-        _hash = 31 * _hash + Boolean.hashCode(mHidden);
         _hash = 31 * _hash + mDistractionFlags;
-        _hash = 31 * _hash + Boolean.hashCode(mInstantApp);
-        _hash = 31 * _hash + Boolean.hashCode(mVirtualPreload);
         _hash = 31 * _hash + mEnabledState;
         _hash = 31 * _hash + mInstallReason;
         _hash = 31 * _hash + mUninstallReason;
@@ -826,15 +873,16 @@
         _hash = 31 * _hash + Objects.hashCode(mComponentLabelIconOverrideMap);
         _hash = 31 * _hash + Long.hashCode(mFirstInstallTimeMillis);
         _hash = 31 * _hash + watchableHashCode();
+        _hash = 31 * _hash + Objects.hashCode(mArchiveState);
         _hash = 31 * _hash + snapshotHashCode();
         return _hash;
     }
 
     @DataClass.Generated(
-            time = 1687938397579L,
+            time = 1691186062924L,
             codegenVersion = "1.0.23",
             sourceFile = "frameworks/base/services/core/java/com/android/server/pm/pkg/PackageUserStateImpl.java",
-            inputSignatures = "protected @android.annotation.Nullable com.android.server.utils.WatchedArraySet<java.lang.String> mDisabledComponentsWatched\nprotected @android.annotation.Nullable com.android.server.utils.WatchedArraySet<java.lang.String> mEnabledComponentsWatched\nprivate  long mCeDataInode\nprivate  boolean mInstalled\nprivate  boolean mStopped\nprivate  boolean mNotLaunched\nprivate  boolean mHidden\nprivate  int mDistractionFlags\nprivate  boolean mInstantApp\nprivate  boolean mVirtualPreload\nprivate @android.content.pm.PackageManager.EnabledState int mEnabledState\nprivate @android.content.pm.PackageManager.InstallReason int mInstallReason\nprivate @android.content.pm.PackageManager.UninstallReason int mUninstallReason\nprivate @android.annotation.Nullable java.lang.String mHarmfulAppWarning\nprivate @android.annotation.Nullable java.lang.String mLastDisableAppCaller\nprivate @android.annotation.Nullable android.content.pm.overlay.OverlayPaths mOverlayPaths\nprotected @android.annotation.Nullable com.android.server.utils.WatchedArrayMap<java.lang.String,android.content.pm.overlay.OverlayPaths> mSharedLibraryOverlayPaths\nprivate @android.annotation.Nullable java.lang.String mSplashScreenTheme\nprivate @android.content.pm.PackageManager.UserMinAspectRatio int mMinAspectRatio\nprivate @android.annotation.Nullable com.android.server.utils.WatchedArrayMap<java.lang.String,com.android.server.pm.pkg.SuspendParams> mSuspendParams\nprivate @android.annotation.Nullable com.android.server.utils.WatchedArrayMap<android.content.ComponentName,android.util.Pair<java.lang.String,java.lang.Integer>> mComponentLabelIconOverrideMap\nprivate @android.annotation.CurrentTimeMillisLong long mFirstInstallTimeMillis\nprivate @android.annotation.Nullable com.android.server.utils.Watchable mWatchable\nfinal @android.annotation.NonNull com.android.server.utils.SnapshotCache<com.android.server.pm.pkg.PackageUserStateImpl> mSnapshot\nprivate  com.android.server.utils.SnapshotCache<com.android.server.pm.pkg.PackageUserStateImpl> makeCache()\nprivate  void onChanged()\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageUserStateImpl snapshot()\npublic @android.annotation.Nullable boolean setOverlayPaths(android.content.pm.overlay.OverlayPaths)\npublic  boolean setSharedLibraryOverlayPaths(java.lang.String,android.content.pm.overlay.OverlayPaths)\npublic @android.annotation.Nullable @java.lang.Override com.android.server.utils.WatchedArraySet<java.lang.String> getDisabledComponentsNoCopy()\npublic @android.annotation.Nullable @java.lang.Override com.android.server.utils.WatchedArraySet<java.lang.String> getEnabledComponentsNoCopy()\npublic @android.annotation.NonNull @java.lang.Override android.util.ArraySet<java.lang.String> getDisabledComponents()\npublic @android.annotation.NonNull @java.lang.Override android.util.ArraySet<java.lang.String> getEnabledComponents()\npublic @java.lang.Override boolean isComponentEnabled(java.lang.String)\npublic @java.lang.Override boolean isComponentDisabled(java.lang.String)\npublic @java.lang.Override android.content.pm.overlay.OverlayPaths getAllOverlayPaths()\npublic @com.android.internal.annotations.VisibleForTesting boolean overrideLabelAndIcon(android.content.ComponentName,java.lang.String,java.lang.Integer)\npublic  void resetOverrideComponentLabelIcon()\npublic @android.annotation.Nullable android.util.Pair<java.lang.String,java.lang.Integer> getOverrideLabelIconForComponent(android.content.ComponentName)\npublic @java.lang.Override boolean isSuspended()\npublic  com.android.server.pm.pkg.PackageUserStateImpl putSuspendParams(java.lang.String,com.android.server.pm.pkg.SuspendParams)\npublic  com.android.server.pm.pkg.PackageUserStateImpl removeSuspension(java.lang.String)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setDisabledComponents(android.util.ArraySet<java.lang.String>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setEnabledComponents(android.util.ArraySet<java.lang.String>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setEnabledComponents(com.android.server.utils.WatchedArraySet<java.lang.String>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setDisabledComponents(com.android.server.utils.WatchedArraySet<java.lang.String>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setCeDataInode(long)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setInstalled(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setStopped(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setNotLaunched(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setHidden(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setDistractionFlags(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setInstantApp(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setVirtualPreload(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setEnabledState(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setInstallReason(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setUninstallReason(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setHarmfulAppWarning(java.lang.String)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setLastDisableAppCaller(java.lang.String)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setSharedLibraryOverlayPaths(android.util.ArrayMap<java.lang.String,android.content.pm.overlay.OverlayPaths>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setSplashScreenTheme(java.lang.String)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setMinAspectRatio(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setSuspendParams(android.util.ArrayMap<java.lang.String,com.android.server.pm.pkg.SuspendParams>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setComponentLabelIconOverrideMap(android.util.ArrayMap<android.content.ComponentName,android.util.Pair<java.lang.String,java.lang.Integer>>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setFirstInstallTimeMillis(long)\npublic @android.annotation.NonNull @java.lang.Override java.util.Map<java.lang.String,android.content.pm.overlay.OverlayPaths> getSharedLibraryOverlayPaths()\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setWatchable(com.android.server.utils.Watchable)\nprivate  boolean watchableEquals(com.android.server.utils.Watchable)\nprivate  int watchableHashCode()\nprivate  boolean snapshotEquals(com.android.server.utils.SnapshotCache<com.android.server.pm.pkg.PackageUserStateImpl>)\nprivate  int snapshotHashCode()\nclass PackageUserStateImpl extends com.android.server.utils.WatchableImpl implements [com.android.server.pm.pkg.PackageUserStateInternal, com.android.server.utils.Snappable]\n@com.android.internal.util.DataClass(genConstructor=false, genBuilder=false, genEqualsHashCode=true)")
+            inputSignatures = "private  int mBooleans\nprotected @android.annotation.Nullable com.android.server.utils.WatchedArraySet<java.lang.String> mDisabledComponentsWatched\nprotected @android.annotation.Nullable com.android.server.utils.WatchedArraySet<java.lang.String> mEnabledComponentsWatched\nprivate  long mCeDataInode\nprivate  int mDistractionFlags\nprivate @android.content.pm.PackageManager.EnabledState int mEnabledState\nprivate @android.content.pm.PackageManager.InstallReason int mInstallReason\nprivate @android.content.pm.PackageManager.UninstallReason int mUninstallReason\nprivate @android.annotation.Nullable java.lang.String mHarmfulAppWarning\nprivate @android.annotation.Nullable java.lang.String mLastDisableAppCaller\nprivate @android.annotation.Nullable android.content.pm.overlay.OverlayPaths mOverlayPaths\nprotected @android.annotation.Nullable com.android.server.utils.WatchedArrayMap<java.lang.String,android.content.pm.overlay.OverlayPaths> mSharedLibraryOverlayPaths\nprivate @android.annotation.Nullable java.lang.String mSplashScreenTheme\nprivate @android.content.pm.PackageManager.UserMinAspectRatio int mMinAspectRatio\nprivate @android.annotation.Nullable com.android.server.utils.WatchedArrayMap<java.lang.String,com.android.server.pm.pkg.SuspendParams> mSuspendParams\nprivate @android.annotation.Nullable com.android.server.utils.WatchedArrayMap<android.content.ComponentName,android.util.Pair<java.lang.String,java.lang.Integer>> mComponentLabelIconOverrideMap\nprivate @android.annotation.CurrentTimeMillisLong long mFirstInstallTimeMillis\nprivate @android.annotation.Nullable com.android.server.utils.Watchable mWatchable\nprivate @android.annotation.Nullable com.android.server.pm.pkg.ArchiveState mArchiveState\nfinal @android.annotation.NonNull com.android.server.utils.SnapshotCache<com.android.server.pm.pkg.PackageUserStateImpl> mSnapshot\nprivate  void setBoolean(int,boolean)\nprivate  boolean getBoolean(int)\nprivate  com.android.server.utils.SnapshotCache<com.android.server.pm.pkg.PackageUserStateImpl> makeCache()\nprivate  void onChanged()\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageUserStateImpl snapshot()\npublic @android.annotation.Nullable boolean setOverlayPaths(android.content.pm.overlay.OverlayPaths)\npublic  boolean setSharedLibraryOverlayPaths(java.lang.String,android.content.pm.overlay.OverlayPaths)\npublic @android.annotation.Nullable @java.lang.Override com.android.server.utils.WatchedArraySet<java.lang.String> getDisabledComponentsNoCopy()\npublic @android.annotation.Nullable @java.lang.Override com.android.server.utils.WatchedArraySet<java.lang.String> getEnabledComponentsNoCopy()\npublic @android.annotation.NonNull @java.lang.Override android.util.ArraySet<java.lang.String> getDisabledComponents()\npublic @android.annotation.NonNull @java.lang.Override android.util.ArraySet<java.lang.String> getEnabledComponents()\npublic @java.lang.Override boolean isComponentEnabled(java.lang.String)\npublic @java.lang.Override boolean isComponentDisabled(java.lang.String)\npublic @java.lang.Override android.content.pm.overlay.OverlayPaths getAllOverlayPaths()\npublic @com.android.internal.annotations.VisibleForTesting boolean overrideLabelAndIcon(android.content.ComponentName,java.lang.String,java.lang.Integer)\npublic  void resetOverrideComponentLabelIcon()\npublic @android.annotation.Nullable android.util.Pair<java.lang.String,java.lang.Integer> getOverrideLabelIconForComponent(android.content.ComponentName)\npublic @java.lang.Override boolean isSuspended()\npublic  com.android.server.pm.pkg.PackageUserStateImpl putSuspendParams(java.lang.String,com.android.server.pm.pkg.SuspendParams)\npublic  com.android.server.pm.pkg.PackageUserStateImpl removeSuspension(java.lang.String)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setDisabledComponents(android.util.ArraySet<java.lang.String>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setEnabledComponents(android.util.ArraySet<java.lang.String>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setEnabledComponents(com.android.server.utils.WatchedArraySet<java.lang.String>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setDisabledComponents(com.android.server.utils.WatchedArraySet<java.lang.String>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setCeDataInode(long)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setInstalled(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setStopped(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setNotLaunched(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setHidden(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setDistractionFlags(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setInstantApp(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setVirtualPreload(boolean)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setEnabledState(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setInstallReason(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setUninstallReason(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setHarmfulAppWarning(java.lang.String)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setLastDisableAppCaller(java.lang.String)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setSharedLibraryOverlayPaths(android.util.ArrayMap<java.lang.String,android.content.pm.overlay.OverlayPaths>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setSplashScreenTheme(java.lang.String)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setMinAspectRatio(int)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setSuspendParams(android.util.ArrayMap<java.lang.String,com.android.server.pm.pkg.SuspendParams>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setComponentLabelIconOverrideMap(android.util.ArrayMap<android.content.ComponentName,android.util.Pair<java.lang.String,java.lang.Integer>>)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setFirstInstallTimeMillis(long)\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setArchiveState(com.android.server.pm.pkg.ArchiveState)\npublic @android.annotation.NonNull @java.lang.Override java.util.Map<java.lang.String,android.content.pm.overlay.OverlayPaths> getSharedLibraryOverlayPaths()\npublic @android.annotation.NonNull com.android.server.pm.pkg.PackageUserStateImpl setWatchable(com.android.server.utils.Watchable)\nprivate  boolean watchableEquals(com.android.server.utils.Watchable)\nprivate  int watchableHashCode()\nprivate  boolean snapshotEquals(com.android.server.utils.SnapshotCache<com.android.server.pm.pkg.PackageUserStateImpl>)\nprivate  int snapshotHashCode()\npublic @java.lang.Override boolean isInstalled()\npublic @java.lang.Override boolean isStopped()\npublic @java.lang.Override boolean isNotLaunched()\npublic @java.lang.Override boolean isHidden()\npublic @java.lang.Override boolean isInstantApp()\npublic @java.lang.Override boolean isVirtualPreload()\nclass PackageUserStateImpl extends com.android.server.utils.WatchableImpl implements [com.android.server.pm.pkg.PackageUserStateInternal, com.android.server.utils.Snappable]\nprivate static final  int INSTALLED\nprivate static final  int STOPPED\nprivate static final  int NOT_LAUNCHED\nprivate static final  int HIDDEN\nprivate static final  int INSTANT_APP\nprivate static final  int VIRTUAL_PRELOADED\nclass Booleans extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false, genBuilder=false, genEqualsHashCode=true)")
     @Deprecated
     private void __metadata() {}
 
diff --git a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java
index 7fc3356..f1f0fa3 100644
--- a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java
+++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java
@@ -456,7 +456,7 @@
     List<ParsedActivity> getReceivers();
 
     @NonNull
-    List<String> getRequestedPermissions();
+    Set<String> getRequestedPermissions();
 
     @Nullable
     Boolean getResizeableActivity();
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 1567af0..e2cb87e 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
@@ -2958,7 +2958,7 @@
         final int listSize = mSplitPermissionInfos.size();
         for (int is = 0; is < listSize; is++) {
             final PermissionManager.SplitPermissionInfo spi = mSplitPermissionInfos.get(is);
-            List<String> requestedPermissions = pkg.getRequestedPermissions();
+            Set<String> requestedPermissions = pkg.getRequestedPermissions();
             if (pkg.getTargetSdkVersion() >= spi.getTargetSdk()
                     || !requestedPermissions.contains(spi.getSplitPermission())) {
                 continue;
diff --git a/services/core/java/com/android/server/policy/AppOpsPolicy.java b/services/core/java/com/android/server/policy/AppOpsPolicy.java
index 5288e85..ebc7163 100644
--- a/services/core/java/com/android/server/policy/AppOpsPolicy.java
+++ b/services/core/java/com/android/server/policy/AppOpsPolicy.java
@@ -16,6 +16,9 @@
 
 package com.android.server.policy;
 
+import static android.app.AppOpsManager.OP_RECEIVE_SANDBOX_TRIGGER_AUDIO;
+import static android.app.AppOpsManager.OP_RECORD_AUDIO_HOTWORD;
+
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.AppOpsManager;
@@ -72,6 +75,9 @@
     private static final boolean SYSPROP_HOTWORD_DETECTION_SERVICE_REQUIRED =
             SystemProperties.getBoolean("ro.hotword.detection_service_required", false);
 
+    //TODO(b/289087412): import this from the flag value in set up in device config.
+    private static final boolean IS_VOICE_ACTIVATION_OP_ENABLED = false;
+
     @NonNull
     private final Object mLock = new Object();
 
@@ -203,6 +209,16 @@
     }
 
     /**
+     * @return the op that should be noted for the voice activations of the app by detected hotword.
+     */
+    public static int getVoiceActivationOp() {
+        if (IS_VOICE_ACTIVATION_OP_ENABLED) {
+            return OP_RECEIVE_SANDBOX_TRIGGER_AUDIO;
+        }
+        return OP_RECORD_AUDIO_HOTWORD;
+    }
+
+    /**
      * @hide
      */
     public static boolean isHotwordDetectionServiceRequired(PackageManager pm) {
@@ -321,7 +337,6 @@
         }
     }
 
-
     private int resolveDatasourceOp(int code, int uid, @NonNull String packageName,
             @Nullable String attributionTag) {
         code = resolveRecordAudioOp(code, uid);
diff --git a/services/core/java/com/android/server/policy/ModifierShortcutManager.java b/services/core/java/com/android/server/policy/ModifierShortcutManager.java
index 69cc125..539bb6b 100644
--- a/services/core/java/com/android/server/policy/ModifierShortcutManager.java
+++ b/services/core/java/com/android/server/policy/ModifierShortcutManager.java
@@ -21,7 +21,6 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
-import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.content.res.XmlResourceParser;
 import android.hardware.input.InputManager;
@@ -65,8 +64,8 @@
     private static final String ATTRIBUTE_CATEGORY = "category";
     private static final String ATTRIBUTE_SHIFT = "shift";
 
-    private final SparseArray<ShortcutInfo> mIntentShortcuts = new SparseArray<>();
-    private final SparseArray<ShortcutInfo> mShiftShortcuts = new SparseArray<>();
+    private final SparseArray<Intent> mIntentShortcuts = new SparseArray<>();
+    private final SparseArray<Intent> mShiftShortcuts = new SparseArray<>();
 
     private LongSparseArray<IShortcutService> mShortcutKeyServices = new LongSparseArray<>();
 
@@ -126,26 +125,26 @@
             return null;
         }
 
-        ShortcutInfo shortcut = null;
+        Intent shortcutIntent = null;
 
         // If the Shift key is pressed, then search for the shift shortcuts.
-        SparseArray<ShortcutInfo> shortcutMap = isShiftOn ? mShiftShortcuts : mIntentShortcuts;
+        SparseArray<Intent> shortcutMap = isShiftOn ? mShiftShortcuts : mIntentShortcuts;
 
         // First try the exact keycode (with modifiers).
         int shortcutChar = kcm.get(keyCode, metaState);
         if (shortcutChar != 0) {
-            shortcut = shortcutMap.get(shortcutChar);
+            shortcutIntent = shortcutMap.get(shortcutChar);
         }
 
         // Next try the primary character on that key.
-        if (shortcut == null) {
+        if (shortcutIntent == null) {
             shortcutChar = Character.toLowerCase(kcm.getDisplayLabel(keyCode));
             if (shortcutChar != 0) {
-                shortcut = shortcutMap.get(shortcutChar);
+                shortcutIntent = shortcutMap.get(shortcutChar);
             }
         }
 
-        return (shortcut != null) ? shortcut.intent : null;
+        return shortcutIntent;
     }
 
     private void loadShortcuts() {
@@ -181,12 +180,10 @@
                 final boolean isShiftShortcut = (shiftName != null && shiftName.equals("true"));
 
                 final Intent intent;
-                final String title;
                 if (packageName != null && className != null) {
-                    ActivityInfo info = null;
                     ComponentName componentName = new ComponentName(packageName, className);
                     try {
-                        info = packageManager.getActivityInfo(componentName,
+                        packageManager.getActivityInfo(componentName,
                                 PackageManager.MATCH_DIRECT_BOOT_AWARE
                                         | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
                                         | PackageManager.MATCH_UNINSTALLED_PACKAGES);
@@ -195,7 +192,7 @@
                                 new String[] { packageName });
                         componentName = new ComponentName(packages[0], className);
                         try {
-                            info = packageManager.getActivityInfo(componentName,
+                            packageManager.getActivityInfo(componentName,
                                     PackageManager.MATCH_DIRECT_BOOT_AWARE
                                             | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
                                             | PackageManager.MATCH_UNINSTALLED_PACKAGES);
@@ -209,21 +206,18 @@
                     intent = new Intent(Intent.ACTION_MAIN);
                     intent.addCategory(Intent.CATEGORY_LAUNCHER);
                     intent.setComponent(componentName);
-                    title = info.loadLabel(packageManager).toString();
                 } else if (categoryName != null) {
                     intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, categoryName);
-                    title = "";
                 } else {
                     Log.w(TAG, "Unable to add bookmark for shortcut " + shortcutName
                             + ": missing package/class or category attributes");
                     continue;
                 }
 
-                ShortcutInfo shortcut = new ShortcutInfo(title, intent);
                 if (isShiftShortcut) {
-                    mShiftShortcuts.put(shortcutChar, shortcut);
+                    mShiftShortcuts.put(shortcutChar, intent);
                 } else {
-                    mIntentShortcuts.put(shortcutChar, shortcut);
+                    mIntentShortcuts.put(shortcutChar, intent);
                 }
             }
         } catch (XmlPullParserException | IOException e) {
@@ -394,14 +388,4 @@
 
         return false;
     }
-
-    private static final class ShortcutInfo {
-        public final String title;
-        public final Intent intent;
-
-        ShortcutInfo(String title, Intent intent) {
-            this.title = title;
-            this.intent = intent;
-        }
-    }
 }
diff --git a/services/core/java/com/android/server/policy/PermissionPolicyService.java b/services/core/java/com/android/server/policy/PermissionPolicyService.java
index 0e99e7e..d6e35e8 100644
--- a/services/core/java/com/android/server/policy/PermissionPolicyService.java
+++ b/services/core/java/com/android/server/policy/PermissionPolicyService.java
@@ -58,7 +58,6 @@
 import android.content.pm.PackageManagerInternal;
 import android.content.pm.PackageManagerInternal.PackageListObserver;
 import android.content.pm.PermissionInfo;
-import android.content.pm.UserPackage;
 import android.content.res.Resources;
 import android.os.Build;
 import android.os.Bundle;
@@ -142,18 +141,18 @@
     private OnInitializedCallback mOnInitializedCallback;
 
     /**
-     * Whether an async {@link #synchronizePackagePermissionsAndAppOpsForUser} is currently
-     * scheduled for a package/user.
+     * Whether an async {@link #synchronizeUidPermissionsAndAppOps} is currently
+     * scheduled for a UID.
      */
     @GuardedBy("mLock")
-    private final ArraySet<UserPackage> mIsPackageSyncsScheduled = new ArraySet<>();
+    private final SparseBooleanArray mIsUidSyncScheduled = new SparseBooleanArray();
 
     /**
      * Whether an async {@link #resetAppOpPermissionsIfNotRequestedForUid} is currently
      * scheduled for a uid.
      */
     @GuardedBy("mLock")
-    private final SparseBooleanArray mIsUidSyncScheduled = new SparseBooleanArray();
+    private final SparseBooleanArray mIsUidResetScheduled = new SparseBooleanArray();
 
     /**
      * This change reflects the presence of the new Notification Permission
@@ -199,7 +198,8 @@
                         .getUserIds();
                 for (final int userId : userIds) {
                     if (isStarted(userId)) {
-                        synchronizePackagePermissionsAndAppOpsForUser(packageName, userId);
+                        final int uid = UserHandle.getUid(userId, appId);
+                        synchronizeUidPermissionsAndAppOps(uid);
                     }
                 }
             }
@@ -210,8 +210,8 @@
                         .getUserIds();
                 for (final int userId : userIds) {
                     if (isStarted(userId)) {
-                        synchronizePackagePermissionsAndAppOpsForUser(packageName, userId);
                         final int uid = UserHandle.getUid(userId, appId);
+                        synchronizeUidPermissionsAndAppOps(uid);
                         resetAppOpPermissionsIfNotRequestedForUid(uid);
                     }
                 }
@@ -230,14 +230,13 @@
             }
         });
 
-        mPermissionManagerInternal.addOnRuntimePermissionStateChangedListener(
-                this::synchronizePackagePermissionsAndAppOpsAsyncForUser);
+        mPackageManager.addOnPermissionsChangeListener(
+                this::synchronizeUidPermissionsAndAppOpsAsync);
 
         mAppOpsCallback = new IAppOpsCallback.Stub() {
             public void opChanged(int op, int uid, @Nullable String packageName) {
                 if (packageName != null) {
-                    synchronizePackagePermissionsAndAppOpsAsyncForUser(packageName,
-                            UserHandle.getUserId(uid));
+                    synchronizeUidPermissionsAndAppOpsAsync(uid);
                 }
                 resetAppOpPermissionsIfNotRequestedForUidAsync(uid);
             }
@@ -381,24 +380,23 @@
         return AppOpsManager.opToSwitch(op);
     }
 
-    private void synchronizePackagePermissionsAndAppOpsAsyncForUser(@NonNull String packageName,
-            @UserIdInt int changedUserId) {
-        if (isStarted(changedUserId)) {
+    private void synchronizeUidPermissionsAndAppOpsAsync(int uid) {
+        final int userId = UserHandle.getUserId(uid);
+        if (isStarted(userId)) {
             synchronized (mLock) {
-                if (mIsPackageSyncsScheduled.add(UserPackage.of(changedUserId, packageName))) {
+                if (!mIsUidSyncScheduled.get(uid)) {
                     // TODO(b/165030092): migrate this to PermissionThread.getHandler().
-                    // synchronizePackagePermissionsAndAppOpsForUser is a heavy operation.
+                    // synchronizeUidPermissionsAndAppOps is a heavy operation.
                     // Dispatched on a PermissionThread, it interferes with user switch.
                     // FgThread is busy and schedules it after most of the switch is done.
                     // A possible solution is to delay the callback.
                     FgThread.getHandler().sendMessage(PooledLambda.obtainMessage(
-                            PermissionPolicyService
-                                    ::synchronizePackagePermissionsAndAppOpsForUser,
-                            this, packageName, changedUserId));
+                            PermissionPolicyService::synchronizeUidPermissionsAndAppOps, this,
+                            uid));
+                    mIsUidSyncScheduled.put(uid, true);
                 } else {
                     if (DEBUG) {
-                        Slog.v(LOG_TAG, "sync for " + packageName + "/" + changedUserId
-                                + " already scheduled");
+                        Slog.v(LOG_TAG, "sync for UID " + uid + " already scheduled");
                     }
                 }
             }
@@ -585,6 +583,10 @@
     }
 
     private void grantOrUpgradeDefaultRuntimePermissionsIfNeeded(@UserIdInt int userId) {
+        if (PermissionManager.USE_ACCESS_CHECKING_SERVICE) {
+            return;
+        }
+
         if (DEBUG) Slog.i(LOG_TAG, "grantOrUpgradeDefaultPermsIfNeeded(" + userId + ")");
         final TimingsTraceAndSlog t = new TimingsTraceAndSlog();
 
@@ -648,39 +650,27 @@
     }
 
     /**
-     * Synchronize a single package.
+     * Synchronize a single UID.
      */
-    private void synchronizePackagePermissionsAndAppOpsForUser(@NonNull String packageName,
-            @UserIdInt int userId) {
+    private void synchronizeUidPermissionsAndAppOps(int uid) {
         synchronized (mLock) {
-            mIsPackageSyncsScheduled.remove(UserPackage.of(userId, packageName));
+            mIsUidSyncScheduled.delete(uid);
         }
 
         if (DEBUG) {
             Slog.v(LOG_TAG,
-                    "synchronizePackagePermissionsAndAppOpsForUser(" + packageName + ", "
-                            + userId + ")");
+                    "synchronizePackagePermissionsAndAppOpsForUser(" + uid + ")");
         }
 
-        final PackageManagerInternal packageManagerInternal = LocalServices.getService(
-                PackageManagerInternal.class);
-        final PackageInfo pkg = packageManagerInternal.getPackageInfo(packageName, 0,
-                Process.SYSTEM_UID, userId);
-        if (pkg == null) {
-            return;
-        }
+        final UserHandle user = UserHandle.getUserHandleForUid(uid);
         final PermissionToOpSynchroniser synchroniser = new PermissionToOpSynchroniser(
-                getUserContext(getContext(), UserHandle.of(userId)));
-        synchroniser.addPackage(pkg.packageName);
-        final String[] sharedPkgNames = packageManagerInternal.getSharedUserPackagesForPackage(
-                pkg.packageName, userId);
-
-        for (String sharedPkgName : sharedPkgNames) {
-            final AndroidPackage sharedPkg = packageManagerInternal
-                    .getPackage(sharedPkgName);
-            if (sharedPkg != null) {
-                synchroniser.addPackage(sharedPkg.getPackageName());
-            }
+                getUserContext(getContext(), user));
+        final int appId = UserHandle.getAppId(uid);
+        final List<AndroidPackage> pkgs = mPackageManagerInternal.getPackagesForAppId(appId);
+        final int pkgsSize = pkgs.size();
+        for (int i = 0; i < pkgsSize; i++) {
+            final AndroidPackage pkg = pkgs.get(i);
+            synchroniser.addPackage(pkg.getPackageName());
         }
         synchroniser.syncPackages();
     }
@@ -708,8 +698,8 @@
     private void resetAppOpPermissionsIfNotRequestedForUidAsync(int uid) {
         if (isStarted(UserHandle.getUserId(uid))) {
             synchronized (mLock) {
-                if (!mIsUidSyncScheduled.get(uid)) {
-                    mIsUidSyncScheduled.put(uid, true);
+                if (!mIsUidResetScheduled.get(uid)) {
+                    mIsUidResetScheduled.put(uid, true);
                     PermissionThread.getHandler().sendMessage(PooledLambda.obtainMessage(
                             PermissionPolicyService::resetAppOpPermissionsIfNotRequestedForUid,
                             this, uid));
@@ -720,7 +710,7 @@
 
     private void resetAppOpPermissionsIfNotRequestedForUid(int uid) {
         synchronized (mLock) {
-            mIsUidSyncScheduled.delete(uid);
+            mIsUidResetScheduled.delete(uid);
         }
 
         final Context context = getContext();
@@ -858,7 +848,7 @@
         /**
          * Set app ops that were added in {@link #addPackage}.
          *
-         * <p>This processes ops previously added by {@link #addAppOps(PackageInfo, String)}
+         * <p>This processes ops previously added by {@link #addPackage(String)})}
          */
         private void syncPackages() {
             // Remember which ops were already set. This makes sure that we always set the most
@@ -1431,8 +1421,8 @@
             }
             boolean hasCreatedNotificationChannels = mNotificationManager
                     .getNumNotificationChannelsForPackage(pkgName, uid, true) > 0;
-            boolean granted = mPermissionManagerInternal.checkUidPermission(uid, POST_NOTIFICATIONS)
-                    == PackageManager.PERMISSION_GRANTED;
+            boolean granted = mPermissionManagerInternal.checkUidPermission(uid, POST_NOTIFICATIONS,
+                    Context.DEVICE_ID_DEFAULT) == PackageManager.PERMISSION_GRANTED;
             int flags = mPackageManager.getPermissionFlags(POST_NOTIFICATIONS, pkgName, user);
             boolean explicitlySet = (flags & PermissionManager.EXPLICIT_SET_FLAGS) != 0;
             return !granted && hasCreatedNotificationChannels && !explicitlySet;
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 02bf3c3..faf132e 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -68,6 +68,7 @@
 import static android.view.WindowManagerGlobal.ADD_PERMISSION_DENIED;
 
 import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.SCREENSHOT_KEYCHORD_DELAY;
+import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_WEAR_TRIPLE_PRESS_GESTURE;
 import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_COVERED;
 import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_COVER_ABSENT;
 import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_UNCOVERED;
@@ -192,6 +193,7 @@
 
 import com.android.internal.R;
 import com.android.internal.accessibility.AccessibilityShortcutController;
+import com.android.internal.accessibility.util.AccessibilityStatsLogUtils;
 import com.android.internal.accessibility.util.AccessibilityUtils;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.app.AssistUtils;
@@ -206,7 +208,6 @@
 import com.android.internal.policy.PhoneWindow;
 import com.android.internal.policy.TransitionAnimation;
 import com.android.internal.statusbar.IStatusBarService;
-import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.FrameworkStatsLog;
 import com.android.internal.widget.LockPatternUtils;
 import com.android.server.AccessibilityManagerInternal;
@@ -227,6 +228,7 @@
 import com.android.server.policy.keyguard.KeyguardServiceDelegate.DrawnListener;
 import com.android.server.policy.keyguard.KeyguardStateMonitor.StateCallback;
 import com.android.server.statusbar.StatusBarManagerInternal;
+import com.android.server.vibrator.HapticFeedbackVibrationProvider;
 import com.android.server.vr.VrManagerInternal;
 import com.android.server.wallpaper.WallpaperManagerInternal;
 import com.android.server.wm.ActivityTaskManagerInternal;
@@ -266,7 +268,13 @@
     // Whether to allow devices placed in vr headset viewers to have an alternative Home intent.
     static final boolean ENABLE_VR_HEADSET_HOME_CAPTURE = true;
 
+    // --------- Key behavior definitions below. ---------
+    // NOTE: When updating the valid range of any of these behaviors, and if that behavior has a
+    // Settings key associated to it for dynamic update, update its valid Settings value range in
+    // android.provider.settings.validators.GlobalSettingsValidators.
+
     // must match: config_shortPressOnPowerBehavior in config.xml
+    // The config value can be overridden using Settings.Global.POWER_BUTTON_SHORT_PRESS
     static final int SHORT_PRESS_POWER_NOTHING = 0;
     static final int SHORT_PRESS_POWER_GO_TO_SLEEP = 1;
     static final int SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP = 2;
@@ -277,6 +285,7 @@
     static final int SHORT_PRESS_POWER_DREAM_OR_SLEEP = 7;
 
     // must match: config_LongPressOnPowerBehavior in config.xml
+    // The config value can be overridden using Settings.Global.POWER_BUTTON_LONG_PRESS
     static final int LONG_PRESS_POWER_NOTHING = 0;
     static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
     static final int LONG_PRESS_POWER_SHUT_OFF = 2;
@@ -285,6 +294,7 @@
     static final int LONG_PRESS_POWER_ASSISTANT = 5; // Settings.Secure.ASSISTANT
 
     // must match: config_veryLongPresOnPowerBehavior in config.xml
+    // The config value can be overridden using Settings.Global.POWER_BUTTON_VERY_LONG_PRESS
     static final int VERY_LONG_PRESS_POWER_NOTHING = 0;
     static final int VERY_LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
 
@@ -294,6 +304,8 @@
     static final int POWER_VOLUME_UP_BEHAVIOR_GLOBAL_ACTIONS = 2;
 
     // must match: config_doublePressOnPowerBehavior in config.xml
+    // The config value can be overridden using Settings.Global.POWER_BUTTON_DOUBLE_PRESS and/or
+    // Settings.Global.POWER_BUTTON_TRIPLE_PRESS
     static final int MULTI_PRESS_POWER_NOTHING = 0;
     static final int MULTI_PRESS_POWER_THEATER_MODE = 1;
     static final int MULTI_PRESS_POWER_BRIGHTNESS_BOOST = 2;
@@ -324,18 +336,22 @@
     static final int PENDING_KEY_NULL = -1;
 
     // Must match: config_shortPressOnStemPrimaryBehavior in config.xml
+    // The config value can be overridden using Settings.Global.STEM_PRIMARY_BUTTON_SHORT_PRESS
     static final int SHORT_PRESS_PRIMARY_NOTHING = 0;
     static final int SHORT_PRESS_PRIMARY_LAUNCH_ALL_APPS = 1;
 
     // Must match: config_longPressOnStemPrimaryBehavior in config.xml
+    // The config value can be overridden using Settings.Global.STEM_PRIMARY_BUTTON_LONG_PRESS
     static final int LONG_PRESS_PRIMARY_NOTHING = 0;
     static final int LONG_PRESS_PRIMARY_LAUNCH_VOICE_ASSISTANT = 1;
 
     // Must match: config_doublePressOnStemPrimaryBehavior in config.xml
+    //The config value can be overridden using Settings.Global.STEM_PRIMARY_BUTTON_DOUBLE_PRESS
     static final int DOUBLE_PRESS_PRIMARY_NOTHING = 0;
     static final int DOUBLE_PRESS_PRIMARY_SWITCH_RECENT_APP = 1;
 
     // Must match: config_triplePressOnStemPrimaryBehavior in config.xml
+    // The config value can be overridden using Settings.Global.STEM_PRIMARY_BUTTON_TRIPLE_PRESS
     static final int TRIPLE_PRESS_PRIMARY_NOTHING = 0;
     static final int TRIPLE_PRESS_PRIMARY_TOGGLE_ACCESSIBILITY = 1;
 
@@ -356,12 +372,6 @@
     private static final String TALKBACK_LABEL = "TalkBack";
 
     private static final int POWER_BUTTON_SUPPRESSION_DELAY_DEFAULT_MILLIS = 800;
-    private static final VibrationAttributes TOUCH_VIBRATION_ATTRIBUTES =
-            VibrationAttributes.createForUsage(VibrationAttributes.USAGE_TOUCH);
-    private static final VibrationAttributes PHYSICAL_EMULATION_VIBRATION_ATTRIBUTES =
-            VibrationAttributes.createForUsage(VibrationAttributes.USAGE_PHYSICAL_EMULATION);
-    private static final VibrationAttributes HARDWARE_FEEDBACK_VIBRATION_ATTRIBUTES =
-            VibrationAttributes.createForUsage(VibrationAttributes.USAGE_HARDWARE_FEEDBACK);
 
     /**
      * Keyguard stuff
@@ -436,6 +446,7 @@
     PackageManager mPackageManager;
     SideFpsEventHandler mSideFpsEventHandler;
     LockPatternUtils mLockPatternUtils;
+    private HapticFeedbackVibrationProvider mHapticFeedbackVibrationProvider;
     private boolean mHasFeatureAuto;
     private boolean mHasFeatureWatch;
     private boolean mHasFeatureLeanback;
@@ -444,9 +455,6 @@
     // Assigned on main thread, accessed on UI thread
     volatile VrManagerInternal mVrManagerInternal;
 
-    // Vibrator pattern for haptic feedback during boot when safe mode is enabled.
-    long[] mSafeModeEnabledVibePattern;
-
     /** If true, hitting shift & menu will broadcast Intent.ACTION_BUG_REPORT */
     boolean mEnableShiftMenuBugReports = false;
 
@@ -544,7 +552,6 @@
     int mPowerVolUpBehavior;
     boolean mStylusButtonsEnabled = true;
     boolean mHasSoftInput = false;
-    boolean mHapticTextHandleEnabled;
     boolean mUseTvRouting;
     boolean mAllowStartActivityForLongPressOnPowerDuringSetup;
     MetricsLogger mLogger;
@@ -810,6 +817,15 @@
                     Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED), false, this,
                     UserHandle.USER_ALL);
             resolver.registerContentObserver(Settings.Global.getUriFor(
+                    Settings.Global.POWER_BUTTON_SHORT_PRESS), false, this,
+                    UserHandle.USER_ALL);
+            resolver.registerContentObserver(Settings.Global.getUriFor(
+                    Settings.Global.POWER_BUTTON_DOUBLE_PRESS), false, this,
+                    UserHandle.USER_ALL);
+            resolver.registerContentObserver(Settings.Global.getUriFor(
+                    Settings.Global.POWER_BUTTON_TRIPLE_PRESS), false, this,
+                    UserHandle.USER_ALL);
+            resolver.registerContentObserver(Settings.Global.getUriFor(
                     Settings.Global.POWER_BUTTON_LONG_PRESS), false, this,
                     UserHandle.USER_ALL);
             resolver.registerContentObserver(Settings.Global.getUriFor(
@@ -819,6 +835,18 @@
                     Settings.Global.POWER_BUTTON_VERY_LONG_PRESS), false, this,
                     UserHandle.USER_ALL);
             resolver.registerContentObserver(Settings.Global.getUriFor(
+                    Settings.Global.STEM_PRIMARY_BUTTON_SHORT_PRESS), false, this,
+                    UserHandle.USER_ALL);
+            resolver.registerContentObserver(Settings.Global.getUriFor(
+                    Settings.Global.STEM_PRIMARY_BUTTON_DOUBLE_PRESS), false, this,
+                    UserHandle.USER_ALL);
+            resolver.registerContentObserver(Settings.Global.getUriFor(
+                    Settings.Global.STEM_PRIMARY_BUTTON_TRIPLE_PRESS), false, this,
+                    UserHandle.USER_ALL);
+            resolver.registerContentObserver(Settings.Global.getUriFor(
+                    Settings.Global.STEM_PRIMARY_BUTTON_LONG_PRESS), false, this,
+                    UserHandle.USER_ALL);
+            resolver.registerContentObserver(Settings.Global.getUriFor(
                     Settings.Global.KEY_CHORD_POWER_VOLUME_UP), false, this,
                     UserHandle.USER_ALL);
             resolver.registerContentObserver(Settings.Global.getUriFor(
@@ -991,6 +1019,9 @@
     }
 
     private void interceptPowerKeyUp(KeyEvent event, boolean canceled) {
+        // Inform the StatusBar; but do not allow it to consume the event.
+        sendSystemKeyToStatusBarAsync(event);
+
         final boolean handled = canceled || mPowerKeyHandled;
 
         if (!handled) {
@@ -1432,7 +1463,20 @@
                 if (DEBUG_INPUT) {
                     Slog.d(TAG, "Executing stem primary triple press action behavior.");
                 }
-                toggleTalkBack();
+
+                if (Settings.System.getIntForUser(mContext.getContentResolver(),
+                        Settings.System.WEAR_ACCESSIBILITY_GESTURE_ENABLED,
+                        /* def= */ 0, UserHandle.USER_CURRENT) == 1) {
+                    /** Toggle talkback begin */
+                    ComponentName componentName = getTalkbackComponent();
+                    if (componentName != null && toggleTalkBack(componentName)) {
+                        /** log stem triple press telemetry if it's a talkback enabled event */
+                        logStemTriplePressAccessibilityTelemetry(componentName);
+                    }
+                    performHapticFeedback(HapticFeedbackConstants.CONFIRM, /* always = */ false,
+                        /* reason = */ "Stem primary - Triple Press - Toggle Accessibility");
+                    /** Toggle talkback end */
+                }
                 break;
         }
     }
@@ -1451,17 +1495,39 @@
         }
     }
 
-    private void toggleTalkBack() {
-        final ComponentName componentName = getTalkbackComponent();
-        if (componentName == null) {
-            return;
-        }
-
+    /**
+     * A function that toggles talkback service
+     *
+     * @return {@code true} if talkback is enabled, {@code false} if talkback is disabled
+     */
+    private boolean toggleTalkBack(ComponentName componentName) {
         final Set<ComponentName> enabledServices =
                 AccessibilityUtils.getEnabledServicesFromSettings(mContext, mCurrentUserId);
 
+        boolean isTalkbackAlreadyEnabled = enabledServices.contains(componentName);
         AccessibilityUtils.setAccessibilityServiceState(mContext, componentName,
-                !enabledServices.contains(componentName));
+                !isTalkbackAlreadyEnabled);
+        /** if isTalkbackAlreadyEnabled is true, then it's a disabled event so return false
+         * and if isTalkbackAlreadyEnabled is false, return true as it's an enabled event */
+        return !isTalkbackAlreadyEnabled;
+    }
+
+    /**
+     * A function that logs stem triple press accessibility telemetry
+     * If the user setup (Oobe) is not completed, set the
+     * WEAR_ACCESSIBILITY_GESTURE_ENABLED_DURING_OOBE
+     * setting which will be later logged via Settings Snapshot
+     * else, log ACCESSIBILITY_SHORTCUT_REPORTED atom
+     */
+    private void logStemTriplePressAccessibilityTelemetry(ComponentName componentName) {
+        if (!AccessibilityUtils.isUserSetupCompleted(mContext)) {
+            Settings.Secure.putInt(mContext.getContentResolver(),
+                    Settings.System.WEAR_ACCESSIBILITY_GESTURE_ENABLED_DURING_OOBE, 1);
+        } else {
+            AccessibilityStatsLogUtils.logAccessibilityShortcutActivated(mContext, componentName,
+                    ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_WEAR_TRIPLE_PRESS_GESTURE,
+                    /* serviceEnabled= */ true);
+        }
     }
 
     private ComponentName getTalkbackComponent() {
@@ -2169,29 +2235,20 @@
         mLongPressOnBackBehavior = mContext.getResources().getInteger(
                 com.android.internal.R.integer.config_longPressOnBackBehavior);
 
-        mShortPressOnPowerBehavior = mContext.getResources().getInteger(
-                com.android.internal.R.integer.config_shortPressOnPowerBehavior);
         mLongPressOnPowerBehavior = mContext.getResources().getInteger(
                 com.android.internal.R.integer.config_longPressOnPowerBehavior);
         mLongPressOnPowerAssistantTimeoutMs = mContext.getResources().getInteger(
                 com.android.internal.R.integer.config_longPressOnPowerDurationMs);
         mVeryLongPressOnPowerBehavior = mContext.getResources().getInteger(
                 com.android.internal.R.integer.config_veryLongPressOnPowerBehavior);
-        mDoublePressOnPowerBehavior = mContext.getResources().getInteger(
-                com.android.internal.R.integer.config_doublePressOnPowerBehavior);
         mPowerDoublePressTargetActivity = ComponentName.unflattenFromString(
             mContext.getResources().getString(
                 com.android.internal.R.string.config_doublePressOnPowerTargetActivity));
-        mTriplePressOnPowerBehavior = mContext.getResources().getInteger(
-                com.android.internal.R.integer.config_triplePressOnPowerBehavior);
         mShortPressOnSleepBehavior = mContext.getResources().getInteger(
                 com.android.internal.R.integer.config_shortPressOnSleepBehavior);
         mAllowStartActivityForLongPressOnPowerDuringSetup = mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_allowStartActivityForLongPressOnPowerInSetup);
 
-        mHapticTextHandleEnabled = mContext.getResources().getBoolean(
-                com.android.internal.R.bool.config_enableHapticTextHandle);
-
         mUseTvRouting = AudioSystem.getPlatformType(mContext) == AudioSystem.PLATFORM_TELEVISION;
 
         mHandleVolumeKeysInWM = mContext.getResources().getBoolean(
@@ -2232,8 +2289,8 @@
         mContext.registerReceiver(mMultiuserReceiver, filter);
 
         mVibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
-        mSafeModeEnabledVibePattern = getLongIntArray(mContext.getResources(),
-                com.android.internal.R.array.config_safeModeEnabledVibePattern);
+        mHapticFeedbackVibrationProvider =
+                new HapticFeedbackVibrationProvider(mContext.getResources(), mVibrator);
 
         mGlobalKeyManager = new GlobalKeyManager(mContext);
 
@@ -2597,17 +2654,21 @@
         if (mPackageManager.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)) {
             mShortPressOnWindowBehavior = SHORT_PRESS_WINDOW_PICTURE_IN_PICTURE;
         }
-        mShortPressOnStemPrimaryBehavior = mContext.getResources().getInteger(
-                com.android.internal.R.integer.config_shortPressOnStemPrimaryBehavior);
-        mLongPressOnStemPrimaryBehavior = mContext.getResources().getInteger(
-                com.android.internal.R.integer.config_longPressOnStemPrimaryBehavior);
-        mDoublePressOnStemPrimaryBehavior = mContext.getResources().getInteger(
-                com.android.internal.R.integer.config_doublePressOnStemPrimaryBehavior);
-        mTriplePressOnStemPrimaryBehavior = mContext.getResources().getInteger(
-                com.android.internal.R.integer.config_triplePressOnStemPrimaryBehavior);
     }
 
-    public void updateSettings() {
+    private void updateSettings() {
+        updateSettings(null);
+    }
+
+    /**
+     * Update provider Setting values on a given {@code handler}, or synchronously if {@code null}
+     * is passed for handler.
+     */
+    void updateSettings(Handler handler) {
+        if (handler != null) {
+            handler.post(() -> updateSettings(null));
+            return;
+        }
         ContentResolver resolver = mContext.getContentResolver();
         boolean updateRotation = false;
         synchronized (mLock) {
@@ -2657,6 +2718,19 @@
                 updateRotation = true;
             }
 
+            mShortPressOnPowerBehavior = Settings.Global.getInt(resolver,
+                    Settings.Global.POWER_BUTTON_SHORT_PRESS,
+                    mContext.getResources().getInteger(
+                            com.android.internal.R.integer.config_shortPressOnPowerBehavior));
+            mDoublePressOnPowerBehavior = Settings.Global.getInt(resolver,
+                    Settings.Global.POWER_BUTTON_DOUBLE_PRESS,
+                    mContext.getResources().getInteger(
+                            com.android.internal.R.integer.config_doublePressOnPowerBehavior));
+            mTriplePressOnPowerBehavior = Settings.Global.getInt(resolver,
+                    Settings.Global.POWER_BUTTON_TRIPLE_PRESS,
+                    mContext.getResources().getInteger(
+                            com.android.internal.R.integer.config_triplePressOnPowerBehavior));
+
             final int longPressOnPowerBehavior = Settings.Global.getInt(resolver,
                     Settings.Global.POWER_BUTTON_LONG_PRESS,
                     mContext.getResources().getInteger(
@@ -2682,6 +2756,25 @@
                     mContext.getResources().getInteger(
                             com.android.internal.R.integer.config_keyChordPowerVolumeUp));
 
+            mShortPressOnStemPrimaryBehavior = Settings.Global.getInt(resolver,
+                    Settings.Global.STEM_PRIMARY_BUTTON_SHORT_PRESS,
+                    mContext.getResources().getInteger(
+                            com.android.internal.R.integer.config_shortPressOnStemPrimaryBehavior));
+            mDoublePressOnStemPrimaryBehavior = Settings.Global.getInt(resolver,
+                    Settings.Global.STEM_PRIMARY_BUTTON_DOUBLE_PRESS,
+                    mContext.getResources().getInteger(
+                            com.android.internal.R.integer
+                                    .config_doublePressOnStemPrimaryBehavior));
+            mTriplePressOnStemPrimaryBehavior = Settings.Global.getInt(resolver,
+                    Settings.Global.STEM_PRIMARY_BUTTON_TRIPLE_PRESS,
+                    mContext.getResources().getInteger(
+                            com.android.internal.R.integer
+                                    .config_triplePressOnStemPrimaryBehavior));
+            mLongPressOnStemPrimaryBehavior = Settings.Global.getInt(resolver,
+                    Settings.Global.STEM_PRIMARY_BUTTON_LONG_PRESS,
+                    mContext.getResources().getInteger(
+                            com.android.internal.R.integer.config_longPressOnStemPrimaryBehavior));
+
             mStylusButtonsEnabled = Settings.Secure.getIntForUser(resolver,
                     Secure.STYLUS_BUTTONS_ENABLED, 1, UserHandle.USER_CURRENT) == 1;
             mInputManagerInternal.setStylusButtonMotionEventsEnabled(mStylusButtonsEnabled);
@@ -3495,16 +3588,12 @@
     }
 
     private void requestBugreportForTv() {
-        if ("1".equals(SystemProperties.get("ro.debuggable"))
-                || Settings.Global.getInt(mContext.getContentResolver(),
-                        Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) == 1) {
-            try {
-                if (!ActivityManager.getService().launchBugReportHandlerApp()) {
-                    ActivityManager.getService().requestInteractiveBugReport();
-                }
-            } catch (RemoteException e) {
-                Slog.e(TAG, "Error taking bugreport", e);
+        try {
+            if (!ActivityManager.getService().launchBugReportHandlerApp()) {
+                ActivityManager.getService().requestInteractiveBugReport();
             }
+        } catch (RemoteException e) {
+            Slog.e(TAG, "Error taking bugreport", e);
         }
     }
 
@@ -4422,6 +4511,7 @@
                 } else {
                     sleepRelease(event.getEventTime());
                 }
+                sendSystemKeyToStatusBarAsync(event);
                 break;
             }
 
@@ -4432,6 +4522,7 @@
                 if (!down) {
                     mPowerManagerInternal.setUserInactiveOverrideFromWindowManager();
                 }
+                sendSystemKeyToStatusBarAsync(event);
                 break;
             }
 
@@ -4571,6 +4662,9 @@
             case KeyEvent.KEYCODE_MACRO_4:
                 result &= ~ACTION_PASS_TO_USER;
                 break;
+            case KeyEvent.KEYCODE_STEM_PRIMARY:
+                sendSystemKeyToStatusBarAsync(event);
+                break;
         }
 
         if (useHapticFeedback) {
@@ -4741,7 +4835,8 @@
         if ((policyFlags & FLAG_WAKE) != 0) {
             if (wakeUp(whenNanos / 1000000, mAllowTheaterModeWakeFromMotion,
                     PowerManager.WAKE_REASON_WAKE_MOTION, "android.policy:MOTION")) {
-                return 0;
+                // Woke up. Pass motion events to user.
+                return ACTION_PASS_TO_USER;
             }
         }
 
@@ -4753,8 +4848,11 @@
         // there will be no dream to intercept the touch and wake into ambient.  The device should
         // wake up in this case.
         if (isTheaterModeEnabled() && (policyFlags & FLAG_WAKE) != 0) {
-            wakeUp(whenNanos / 1000000, mAllowTheaterModeWakeFromMotionWhenNotDreaming,
-                    PowerManager.WAKE_REASON_WAKE_MOTION, "android.policy:MOTION");
+            if (wakeUp(whenNanos / 1000000, mAllowTheaterModeWakeFromMotionWhenNotDreaming,
+                    PowerManager.WAKE_REASON_WAKE_MOTION, "android.policy:MOTION")) {
+                // Woke up. Pass motion events to user.
+                return ACTION_PASS_TO_USER;
+            }
         }
 
         return 0;
@@ -4770,28 +4868,19 @@
         final boolean displayOff = (display == null
                 || display.getState() == STATE_OFF);
 
-        if (displayOff && !mHasFeatureWatch) {
+        if (displayOff) {
             return false;
         }
 
         // Send events to keyguard while the screen is on and it's showing.
-        if (isKeyguardShowingAndNotOccluded() && !displayOff) {
+        if (isKeyguardShowingAndNotOccluded()) {
             return true;
         }
 
-        // Watches handle BACK and hardware buttons specially
-        if (mHasFeatureWatch && (keyCode == KeyEvent.KEYCODE_BACK
-                || keyCode == KeyEvent.KEYCODE_STEM_PRIMARY
-                || keyCode == KeyEvent.KEYCODE_STEM_1
-                || keyCode == KeyEvent.KEYCODE_STEM_2
-                || keyCode == KeyEvent.KEYCODE_STEM_3)) {
-            return false;
-        }
-
         // TODO(b/123372519): Refine when dream can support multi display.
         if (isDefaultDisplay) {
-            // Send events to a dozing dream even if the screen is off since the dream
-            // is in control of the state of the screen.
+            // Send events to a dozing dream since the dream is in control of the state of the
+            // screen.
             IDreamManager dreamManager = getDreamManager();
 
             try {
@@ -5476,10 +5565,6 @@
         }
     }
 
-    static long[] getLongIntArray(Resources r, int resid) {
-        return ArrayUtils.convertToLongArray(r.getIntArray(resid));
-    }
-
     private void bindKeyguard() {
         synchronized (mLock) {
             if (mKeyguardBound) {
@@ -5512,12 +5597,7 @@
         mDefaultDisplayRotation.updateOrientationListener();
         synchronized (mLock) {
             mSystemReady = true;
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    updateSettings();
-                }
-            });
+            updateSettings(mHandler);
             // If this happens, for whatever reason, systemReady came later than systemBooted.
             // And keyguard should be already bound from systemBooted
             if (mSystemBooted) {
@@ -5966,138 +6046,18 @@
         if (!mVibrator.hasVibrator()) {
             return false;
         }
-        VibrationEffect effect = getVibrationEffect(effectId);
+        VibrationEffect effect =
+                mHapticFeedbackVibrationProvider.getVibrationForHapticFeedback(effectId);
         if (effect == null) {
             return false;
         }
-        VibrationAttributes attrs = getVibrationAttributes(effectId);
-        if (always) {
-            attrs = new VibrationAttributes.Builder(attrs)
-                    .setFlags(VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF)
-                    .build();
-        }
+        VibrationAttributes attrs =
+                mHapticFeedbackVibrationProvider.getVibrationAttributesForHapticFeedback(
+                        effectId, /* bypassVibrationIntensitySetting= */ always);
         mVibrator.vibrate(uid, packageName, effect, reason, attrs);
         return true;
     }
 
-    private VibrationEffect getVibrationEffect(int effectId) {
-        long[] pattern;
-        switch (effectId) {
-            case HapticFeedbackConstants.CONTEXT_CLICK:
-            case HapticFeedbackConstants.GESTURE_END:
-            case HapticFeedbackConstants.GESTURE_THRESHOLD_ACTIVATE:
-            case HapticFeedbackConstants.ROTARY_SCROLL_TICK:
-            case HapticFeedbackConstants.SEGMENT_TICK:
-                return VibrationEffect.get(VibrationEffect.EFFECT_TICK);
-
-            case HapticFeedbackConstants.TEXT_HANDLE_MOVE:
-                if (!mHapticTextHandleEnabled) {
-                    return null;
-                }
-                // fallthrough
-            case HapticFeedbackConstants.CLOCK_TICK:
-            case HapticFeedbackConstants.SEGMENT_FREQUENT_TICK:
-                return VibrationEffect.get(VibrationEffect.EFFECT_TEXTURE_TICK);
-
-            case HapticFeedbackConstants.KEYBOARD_RELEASE:
-            case HapticFeedbackConstants.VIRTUAL_KEY_RELEASE:
-            case HapticFeedbackConstants.ENTRY_BUMP:
-            case HapticFeedbackConstants.DRAG_CROSSING:
-                return VibrationEffect.get(VibrationEffect.EFFECT_TICK, false);
-
-            case HapticFeedbackConstants.KEYBOARD_TAP: // == KEYBOARD_PRESS
-            case HapticFeedbackConstants.VIRTUAL_KEY:
-            case HapticFeedbackConstants.EDGE_RELEASE:
-            case HapticFeedbackConstants.CALENDAR_DATE:
-            case HapticFeedbackConstants.CONFIRM:
-            case HapticFeedbackConstants.GESTURE_START:
-            case HapticFeedbackConstants.ROTARY_SCROLL_ITEM_FOCUS:
-            case HapticFeedbackConstants.ROTARY_SCROLL_LIMIT:
-                return VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
-
-            case HapticFeedbackConstants.LONG_PRESS:
-            case HapticFeedbackConstants.LONG_PRESS_POWER_BUTTON:
-            case HapticFeedbackConstants.DRAG_START:
-            case HapticFeedbackConstants.EDGE_SQUEEZE:
-                return VibrationEffect.get(VibrationEffect.EFFECT_HEAVY_CLICK);
-
-            case HapticFeedbackConstants.REJECT:
-                return VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK);
-
-            case HapticFeedbackConstants.SAFE_MODE_ENABLED:
-                pattern = mSafeModeEnabledVibePattern;
-                break;
-
-            case HapticFeedbackConstants.ASSISTANT_BUTTON:
-                if (mVibrator.areAllPrimitivesSupported(
-                        VibrationEffect.Composition.PRIMITIVE_QUICK_RISE,
-                        VibrationEffect.Composition.PRIMITIVE_TICK)) {
-                    // quiet ramp, short pause, then sharp tick
-                    return VibrationEffect.startComposition()
-                            .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_RISE, 0.25f)
-                            .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1f, 50)
-                            .compose();
-                }
-                // fallback for devices without composition support
-                return VibrationEffect.get(VibrationEffect.EFFECT_HEAVY_CLICK);
-
-            case HapticFeedbackConstants.GESTURE_THRESHOLD_DEACTIVATE:
-                return getScaledPrimitiveOrElseEffect(
-                        VibrationEffect.Composition.PRIMITIVE_TICK, 0.4f,
-                        VibrationEffect.EFFECT_TEXTURE_TICK);
-
-            case HapticFeedbackConstants.TOGGLE_ON:
-                return getScaledPrimitiveOrElseEffect(
-                        VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f,
-                        VibrationEffect.EFFECT_TICK);
-
-            case HapticFeedbackConstants.TOGGLE_OFF:
-                return getScaledPrimitiveOrElseEffect(
-                        VibrationEffect.Composition.PRIMITIVE_LOW_TICK, 0.2f,
-                        VibrationEffect.EFFECT_TEXTURE_TICK);
-
-            case HapticFeedbackConstants.NO_HAPTICS:
-            default:
-                return null;
-        }
-        if (pattern.length == 0) {
-            // No vibration
-            return null;
-        } else if (pattern.length == 1) {
-            // One-shot vibration
-            return VibrationEffect.createOneShot(pattern[0], VibrationEffect.DEFAULT_AMPLITUDE);
-        } else {
-            // Pattern vibration
-            return VibrationEffect.createWaveform(pattern, -1);
-        }
-    }
-
-    private VibrationEffect getScaledPrimitiveOrElseEffect(int primitiveId, float scale,
-            int elseEffectId) {
-        if (mVibrator.areAllPrimitivesSupported(primitiveId)) {
-            return VibrationEffect.startComposition()
-                    .addPrimitive(primitiveId, scale)
-                    .compose();
-        } else {
-            return VibrationEffect.get(elseEffectId);
-        }
-    }
-
-    private VibrationAttributes getVibrationAttributes(int effectId) {
-        switch (effectId) {
-            case HapticFeedbackConstants.EDGE_SQUEEZE:
-            case HapticFeedbackConstants.EDGE_RELEASE:
-                return PHYSICAL_EMULATION_VIBRATION_ATTRIBUTES;
-            case HapticFeedbackConstants.ASSISTANT_BUTTON:
-            case HapticFeedbackConstants.LONG_PRESS_POWER_BUTTON:
-            case HapticFeedbackConstants.ROTARY_SCROLL_TICK:
-            case HapticFeedbackConstants.ROTARY_SCROLL_ITEM_FOCUS:
-            case HapticFeedbackConstants.ROTARY_SCROLL_LIMIT:
-                return HARDWARE_FEEDBACK_VIBRATION_ATTRIBUTES;
-            default:
-                return TOUCH_VIBRATION_ATTRIBUTES;
-        }
-    }
 
     @Override
     public void keepScreenOnStartedLw() {
@@ -6235,8 +6195,7 @@
                 pw.print("mAllowStartActivityForLongPressOnPowerDuringSetup=");
                 pw.println(mAllowStartActivityForLongPressOnPowerDuringSetup);
         pw.print(prefix);
-                pw.print("mHasSoftInput="); pw.print(mHasSoftInput);
-                pw.print(" mHapticTextHandleEnabled="); pw.println(mHapticTextHandleEnabled);
+                pw.print("mHasSoftInput="); pw.println(mHasSoftInput);
         pw.print(prefix);
                 pw.print("mDismissImeOnBackKeyPressed="); pw.print(mDismissImeOnBackKeyPressed);
                 pw.print(" mIncallPowerBehavior=");
@@ -6261,6 +6220,7 @@
                 pw.print(" mLockScreenTimeout="); pw.print(mLockScreenTimeout);
                 pw.print(" mLockScreenTimerActive="); pw.println(mLockScreenTimerActive);
 
+        mHapticFeedbackVibrationProvider.dump(prefix, pw);
         mGlobalKeyManager.dump(prefix, pw);
         mKeyCombinationManager.dump(prefix, pw);
         mSingleKeyGestureDetector.dump(prefix, pw);
diff --git a/services/core/java/com/android/server/policy/TEST_MAPPING b/services/core/java/com/android/server/policy/TEST_MAPPING
index 9f1cb1a..819a82c 100644
--- a/services/core/java/com/android/server/policy/TEST_MAPPING
+++ b/services/core/java/com/android/server/policy/TEST_MAPPING
@@ -32,6 +32,9 @@
       "name": "CtsPermissionPolicyTestCases",
       "options": [
         {
+          "exclude-annotation": "android.platform.test.annotations.FlakyTest"
+        },
+        {
           "include-filter": "android.permissionpolicy.cts.RestrictedPermissionsTest"
         },
         {
@@ -46,6 +49,9 @@
       "name": "CtsPermissionTestCases",
       "options": [
         {
+          "exclude-annotation": "android.platform.test.annotations.FlakyTest"
+        },
+        {
           "include-filter": "android.permission.cts.SplitPermissionTest"
         },
         {
@@ -78,6 +84,31 @@
           "include-filter": "com.android.server.policy."
         }
       ]
+    },
+    {
+      "name": "CtsPermissionPolicyTestCases",
+      "options": [
+        {
+          "include-filter": "android.permissionpolicy.cts.RestrictedPermissionsTest"
+        },
+        {
+          "include-filter": "android.permissionpolicy.cts.RestrictedStoragePermissionSharedUidTest"
+        },
+        {
+          "include-filter": "android.permissionpolicy.cts.RestrictedStoragePermissionTest"
+        }
+      ]
+    },
+    {
+      "name": "CtsPermissionTestCases",
+      "options": [
+        {
+          "include-filter": "android.permission.cts.SplitPermissionTest"
+        },
+        {
+          "include-filter": "android.permission.cts.BackgroundPermissionsTest"
+        }
+      ]
     }
   ]
 }
diff --git a/services/core/java/com/android/server/policy/role/RoleServicePlatformHelperImpl.java b/services/core/java/com/android/server/policy/role/RoleServicePlatformHelperImpl.java
index f45bda7..5e8b4de 100644
--- a/services/core/java/com/android/server/policy/role/RoleServicePlatformHelperImpl.java
+++ b/services/core/java/com/android/server/policy/role/RoleServicePlatformHelperImpl.java
@@ -19,6 +19,7 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.UserIdInt;
+import android.app.admin.DevicePolicyManagerInternal;
 import android.app.role.RoleManager;
 import android.content.ComponentName;
 import android.content.ContentResolver;
@@ -57,7 +58,6 @@
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.Collections;
-import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
@@ -304,6 +304,8 @@
     public String computePackageStateHash(@UserIdInt int userId) {
         PackageManagerInternal packageManagerInternal = LocalServices.getService(
                 PackageManagerInternal.class);
+        DevicePolicyManagerInternal devicePolicyManagerInternal = LocalServices.getService(
+                DevicePolicyManagerInternal.class);
         final MessageDigestOutputStream mdos = new MessageDigestOutputStream();
 
         DataOutputStream dataOutputStream = new DataOutputStream(new BufferedOutputStream(mdos));
@@ -314,11 +316,10 @@
                 dataOutputStream.writeInt(packageManagerInternal.getApplicationEnabledState(
                         pkg.getPackageName(), userId));
 
-                final List<String> requestedPermissions = pkg.getRequestedPermissions();
-                final int requestedPermissionsSize = requestedPermissions.size();
-                dataOutputStream.writeInt(requestedPermissionsSize);
-                for (int i = 0; i < requestedPermissionsSize; i++) {
-                    dataOutputStream.writeUTF(requestedPermissions.get(i));
+                final Set<String> requestedPermissions = pkg.getRequestedPermissions();
+                dataOutputStream.writeInt(requestedPermissions.size());
+                for (String permissionName : requestedPermissions) {
+                    dataOutputStream.writeUTF(permissionName);
                 }
 
                 final ArraySet<String> enabledComponents =
@@ -344,6 +345,34 @@
                 throw new AssertionError(e);
             }
         }, userId);
+        try {
+            String deviceOwner= "";
+            if (devicePolicyManagerInternal != null) {
+                if (devicePolicyManagerInternal.getDeviceOwnerUserId() == userId) {
+                    ComponentName deviceOwnerComponent =
+                        devicePolicyManagerInternal.getDeviceOwnerComponent(false);
+                    if (deviceOwnerComponent != null) {
+                        deviceOwner = deviceOwnerComponent.getPackageName();
+                    }
+                }
+            }
+            dataOutputStream.writeUTF(deviceOwner);
+            String profileOwner = "";
+            if (devicePolicyManagerInternal != null) {
+                ComponentName profileOwnerComponent =
+                    devicePolicyManagerInternal.getProfileOwnerAsUser(userId);
+                if (profileOwnerComponent != null) {
+                    profileOwner = profileOwnerComponent.getPackageName();
+                }
+            }
+            dataOutputStream.writeUTF(profileOwner);
+            dataOutputStream.writeInt(Settings.Global.getInt(mContext.getContentResolver(),
+                    Settings.Global.DEVICE_DEMO_MODE, 0));
+            dataOutputStream.flush();
+        } catch (IOException e) {
+            // Never happens for MessageDigestOutputStream and DataOutputStream.
+            throw new AssertionError(e);
+        }
         return mdos.getDigestAsString();
     }
 
diff --git a/services/core/java/com/android/server/power/Android.bp b/services/core/java/com/android/server/power/Android.bp
new file mode 100644
index 0000000..1da9dd7
--- /dev/null
+++ b/services/core/java/com/android/server/power/Android.bp
@@ -0,0 +1,12 @@
+aconfig_declarations {
+    name: "power_optimization_flags",
+    package: "com.android.server.power.optimization",
+    srcs: [
+        "stats/*.aconfig",
+    ],
+}
+
+java_aconfig_library {
+    name: "power_optimization_flags_lib",
+    aconfig_declarations: "power_optimization_flags",
+}
diff --git a/services/core/java/com/android/server/power/LowPowerStandbyController.java b/services/core/java/com/android/server/power/LowPowerStandbyController.java
index 8e78041..3b4b20f 100644
--- a/services/core/java/com/android/server/power/LowPowerStandbyController.java
+++ b/services/core/java/com/android/server/power/LowPowerStandbyController.java
@@ -1369,7 +1369,7 @@
          * Otherwise, returns false, and the default policy will be used.
          */
         public boolean enableCustomPolicy() {
-            return DeviceConfig.getBoolean(NAMESPACE, FEATURE_FLAG_ENABLE_POLICY, false);
+            return DeviceConfig.getBoolean(NAMESPACE, FEATURE_FLAG_ENABLE_POLICY, true);
         }
 
         /**
@@ -1377,7 +1377,7 @@
          * Otherwise, returns false, and {@link #getActiveStandbyPorts()} will always be empty.
          */
         public boolean enableStandbyPorts() {
-            return DeviceConfig.getBoolean(NAMESPACE, FEATURE_FLAG_ENABLE_STANDBY_PORTS, false);
+            return DeviceConfig.getBoolean(NAMESPACE, FEATURE_FLAG_ENABLE_STANDBY_PORTS, true);
         }
 
         /**
diff --git a/services/core/java/com/android/server/power/Notifier.java b/services/core/java/com/android/server/power/Notifier.java
index a694e31..3ecc985 100644
--- a/services/core/java/com/android/server/power/Notifier.java
+++ b/services/core/java/com/android/server/power/Notifier.java
@@ -222,7 +222,7 @@
         mShowWirelessChargingAnimationConfig = context.getResources().getBoolean(
                 com.android.internal.R.bool.config_showBuiltinWirelessChargingAnim);
 
-        mWakeLockLog = new WakeLockLog();
+        mWakeLockLog = new WakeLockLog(context);
 
         // Initialize interactive state for battery stats.
         try {
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index d82f7a5..1e6486a 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -18,7 +18,6 @@
 
 import static android.hardware.display.DisplayManagerInternal.DisplayPowerRequest.policyToString;
 import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_CRITICAL;
-import static android.os.IServiceManager.DUMP_FLAG_PRIORITY_DEFAULT;
 import static android.os.PowerManager.GO_TO_SLEEP_REASON_DISPLAY_GROUPS_TURNED_OFF;
 import static android.os.PowerManager.GO_TO_SLEEP_REASON_DISPLAY_GROUP_REMOVED;
 import static android.os.PowerManager.WAKE_REASON_DISPLAY_GROUP_ADDED;
@@ -1280,7 +1279,7 @@
     @Override
     public void onStart() {
         publishBinderService(Context.POWER_SERVICE, mBinderService, /* allowIsolated= */ false,
-                DUMP_FLAG_PRIORITY_DEFAULT | DUMP_FLAG_PRIORITY_CRITICAL);
+                DUMP_FLAG_PRIORITY_CRITICAL);
         publishLocalService(PowerManagerInternal.class, mLocalService);
 
         Watchdog.getInstance().addMonitor(this);
@@ -5583,7 +5582,7 @@
         private void recordReferenceLocked(String id) {
             LongArray times = mOpenReferenceTimes.get(id);
             if (times == null) {
-                times = new LongArray();
+                times = new LongArray(2);
                 mOpenReferenceTimes.put(id, times);
             }
             times.add(System.currentTimeMillis());
@@ -5593,6 +5592,9 @@
             LongArray times = mOpenReferenceTimes.get(id);
             if (times != null && times.size() > 0) {
                 times.remove(times.size() - 1);
+                if (times.size() == 0) {
+                    mOpenReferenceTimes.remove(id);
+                }
             }
         }
     }
@@ -6805,6 +6807,13 @@
         }
     }
 
+    @VisibleForTesting
+    int getPowerGroupSize() {
+        synchronized (mLock) {
+            return mPowerGroups.size();
+        }
+    }
+
     @GoToSleepReason
     private int getLastSleepReasonInternal() {
         synchronized (mLock) {
diff --git a/services/core/java/com/android/server/power/ShutdownCheckPoints.java b/services/core/java/com/android/server/power/ShutdownCheckPoints.java
index 546dc81..dafaa7d 100644
--- a/services/core/java/com/android/server/power/ShutdownCheckPoints.java
+++ b/services/core/java/com/android/server/power/ShutdownCheckPoints.java
@@ -121,23 +121,25 @@
 
     @VisibleForTesting
     void recordCheckPointInternal(@Nullable String reason) {
-        recordCheckPointInternal(new SystemServerCheckPoint(mInjector, reason));
+        recordCheckPointInternal(new SystemServerCheckPoint(mInjector.currentTimeMillis(), reason));
         Slog.v(TAG, "System server shutdown checkpoint recorded");
     }
 
     @VisibleForTesting
     void recordCheckPointInternal(int callerProcessId, @Nullable String reason) {
+        long timestamp = mInjector.currentTimeMillis();
         recordCheckPointInternal(callerProcessId == Process.myPid()
-                ? new SystemServerCheckPoint(mInjector, reason)
-                : new BinderCheckPoint(mInjector, callerProcessId, reason));
+                ? new SystemServerCheckPoint(timestamp, reason)
+                : new BinderCheckPoint(timestamp, callerProcessId, reason));
         Slog.v(TAG, "Binder shutdown checkpoint recorded with pid=" + callerProcessId);
     }
 
     @VisibleForTesting
     void recordCheckPointInternal(String intentName, String packageName, @Nullable String reason) {
+        long timestamp = mInjector.currentTimeMillis();
         recordCheckPointInternal("android".equals(packageName)
-                ? new SystemServerCheckPoint(mInjector, reason)
-                : new IntentCheckPoint(mInjector, intentName, packageName, reason));
+                ? new SystemServerCheckPoint(timestamp, reason)
+                : new IntentCheckPoint(timestamp, intentName, packageName, reason));
         Slog.v(TAG, String.format("Shutdown intent checkpoint recorded intent=%s from package=%s",
                 intentName, packageName));
     }
@@ -156,7 +158,7 @@
             records = new ArrayList<>(mCheckPoints);
         }
         for (CheckPoint record : records) {
-            record.dump(printWriter);
+            record.dump(mInjector, printWriter);
             printWriter.println();
         }
     }
@@ -185,12 +187,12 @@
         private final long mTimestamp;
         @Nullable private final String mReason;
 
-        CheckPoint(Injector injector, @Nullable String reason) {
-            mTimestamp = injector.currentTimeMillis();
+        CheckPoint(long timestamp, @Nullable String reason) {
+            mTimestamp = timestamp;
             mReason = reason;
         }
 
-        final void dump(PrintWriter printWriter) {
+        final void dump(Injector injector, PrintWriter printWriter) {
             printWriter.print("Shutdown request from ");
             printWriter.print(getOrigin());
             if (mReason != null) {
@@ -200,12 +202,12 @@
             printWriter.print(" at ");
             printWriter.print(DATE_FORMAT.format(new Date(mTimestamp)));
             printWriter.println(" (epoch=" + mTimestamp + ")");
-            dumpDetails(printWriter);
+            dumpDetails(injector, printWriter);
         }
 
         abstract String getOrigin();
 
-        abstract void dumpDetails(PrintWriter printWriter);
+        abstract void dumpDetails(Injector injector, PrintWriter printWriter);
     }
 
     /** Representation of a shutdown call from the system server, with stack trace. */
@@ -213,8 +215,8 @@
 
         private final StackTraceElement[] mStackTraceElements;
 
-        SystemServerCheckPoint(Injector injector, @Nullable String reason) {
-            super(injector, reason);
+        SystemServerCheckPoint(long timestamp, @Nullable String reason) {
+            super(timestamp, reason);
             mStackTraceElements = Thread.currentThread().getStackTrace();
         }
 
@@ -224,14 +226,14 @@
         }
 
         @Override
-        void dumpDetails(PrintWriter printWriter) {
-            String methodName = getMethodName();
+        void dumpDetails(Injector injector, PrintWriter printWriter) {
+            String methodName = findMethodName();
             printWriter.println(methodName == null ? "Failed to get method name" : methodName);
             printStackTrace(printWriter);
         }
 
         @Nullable
-        String getMethodName() {
+        String findMethodName() {
             int idx = findCallSiteIndex();
             if (idx < mStackTraceElements.length) {
                 StackTraceElement element = mStackTraceElements[idx];
@@ -241,7 +243,7 @@
         }
 
         void printStackTrace(PrintWriter printWriter) {
-            // Skip the call site line, as it's already considered with getMethodName.
+            // Skip the call site line, as it's already considered with findMethodName.
             for (int i = findCallSiteIndex() + 1; i < mStackTraceElements.length; i++) {
                 printWriter.print(" at ");
                 printWriter.println(mStackTraceElements[i]);
@@ -268,12 +270,10 @@
     /** Representation of a shutdown call to {@link android.os.Binder}, with caller process id. */
     private static class BinderCheckPoint extends SystemServerCheckPoint {
         private final int mCallerProcessId;
-        private final IActivityManager mActivityManager;
 
-        BinderCheckPoint(Injector injector, int callerProcessId, @Nullable String reason) {
-            super(injector, reason);
+        BinderCheckPoint(long timestamp, int callerProcessId, @Nullable String reason) {
+            super(timestamp, reason);
             mCallerProcessId = callerProcessId;
-            mActivityManager = injector.activityManager();
         }
 
         @Override
@@ -282,25 +282,25 @@
         }
 
         @Override
-        void dumpDetails(PrintWriter printWriter) {
-            String methodName = getMethodName();
+        void dumpDetails(Injector injector, PrintWriter printWriter) {
+            String methodName = findMethodName();
             printWriter.println(methodName == null ? "Failed to get method name" : methodName);
 
-            String processName = getProcessName();
+            String processName = findProcessName(injector.activityManager());
             printWriter.print("From process ");
             printWriter.print(processName == null ? "?" : processName);
             printWriter.println(" (pid=" + mCallerProcessId + ")");
         }
 
         @Nullable
-        String getProcessName() {
+        private String findProcessName(@Nullable IActivityManager activityManager) {
             try {
                 List<ActivityManager.RunningAppProcessInfo> runningProcesses = null;
-                if (mActivityManager != null) {
-                    runningProcesses = mActivityManager.getRunningAppProcesses();
+                if (activityManager != null) {
+                    runningProcesses = activityManager.getRunningAppProcesses();
                 } else {
-                    Slog.v(TAG, "No ActivityManager available to find process name with pid="
-                            + mCallerProcessId);
+                    Slog.v(TAG, "No ActivityManager to find name of process with pid="
+                        + mCallerProcessId);
                 }
                 if (runningProcesses != null) {
                     for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
@@ -322,8 +322,8 @@
         private final String mPackageName;
 
         IntentCheckPoint(
-                Injector injector, String intentName, String packageName, @Nullable String reason) {
-            super(injector, reason);
+                long timestamp, String intentName, String packageName, @Nullable String reason) {
+            super(timestamp, reason);
             mIntentName = intentName;
             mPackageName = packageName;
         }
@@ -334,7 +334,7 @@
         }
 
         @Override
-        void dumpDetails(PrintWriter printWriter) {
+        void dumpDetails(Injector injector, PrintWriter printWriter) {
             printWriter.print("Intent: ");
             printWriter.println(mIntentName);
             printWriter.print("Package: ");
diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java
index b1430e7..862948e 100644
--- a/services/core/java/com/android/server/power/ShutdownThread.java
+++ b/services/core/java/com/android/server/power/ShutdownThread.java
@@ -30,7 +30,6 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.PackageManagerInternal;
-import android.media.AudioAttributes;
 import android.os.Bundle;
 import android.os.FileUtils;
 import android.os.Handler;
@@ -44,20 +43,26 @@
 import android.os.Trace;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.os.VibrationAttributes;
+import android.os.VibrationEffect;
 import android.os.Vibrator;
+import android.os.vibrator.persistence.VibrationXmlParser;
 import android.telephony.TelephonyManager;
+import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.Log;
 import android.util.Slog;
 import android.util.TimingsTraceLog;
 import android.view.WindowManager;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.server.LocalServices;
 import com.android.server.RescueParty;
 import com.android.server.statusbar.StatusBarManagerInternal;
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.io.FileReader;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 
@@ -80,7 +85,7 @@
     private static final int MOUNT_SERVICE_STOP_PERCENT = 20;
 
     // length of vibration before shutting down
-    private static final int SHUTDOWN_VIBRATE_MS = 500;
+    @VisibleForTesting static final int DEFAULT_SHUTDOWN_VIBRATE_MS = 500;
 
     // state tracking
     private static final Object sIsStartedGuard = new Object();
@@ -101,11 +106,6 @@
     // static instance of this thread
     private static final ShutdownThread sInstance = new ShutdownThread();
 
-    private static final AudioAttributes VIBRATION_ATTRIBUTES = new AudioAttributes.Builder()
-            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
-            .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
-            .build();
-
     // Metrics that will be reported to tron after reboot
     private static final ArrayMap<String, Long> TRON_METRICS = new ArrayMap<>();
 
@@ -124,6 +124,8 @@
     private static String METRIC_RADIO = "shutdown_radio";
     private static String METRIC_SHUTDOWN_TIME_START = "begin_shutdown";
 
+    private final Injector mInjector;
+
     private final Object mActionDoneSync = new Object();
     private boolean mActionDone;
     private Context mContext;
@@ -136,6 +138,12 @@
     private ProgressDialog mProgressDialog;
 
     private ShutdownThread() {
+        this(new Injector());
+    }
+
+    @VisibleForTesting
+    ShutdownThread(Injector injector) {
+        mInjector = injector;
     }
 
     /**
@@ -699,19 +707,10 @@
             PowerManagerService.lowLevelReboot(reason);
             Log.e(TAG, "Reboot failed, will attempt shutdown instead");
             reason = null;
-        } else if (SHUTDOWN_VIBRATE_MS > 0 && context != null) {
+        } else if (context != null) {
             // vibrate before shutting down
-            Vibrator vibrator = new SystemVibrator(context);
             try {
-                if (vibrator.hasVibrator()) {
-                    vibrator.vibrate(SHUTDOWN_VIBRATE_MS, VIBRATION_ATTRIBUTES);
-                    // vibrator is asynchronous so we need to wait to avoid shutting down too soon.
-                    try {
-                        Thread.sleep(SHUTDOWN_VIBRATE_MS);
-                    } catch (InterruptedException unused) {
-                        // this is not critical and does not require logging
-                    }
-                }
+                sInstance.playShutdownVibration(context);
             } catch (Exception e) {
                 // Failure to vibrate shouldn't interrupt shutdown.  Just log it.
                 Log.w(TAG, "Failed to vibrate during shutdown.", e);
@@ -723,6 +722,31 @@
         PowerManagerService.lowLevelShutdown(reason);
     }
 
+    /**
+     * Plays a vibration for shutdown. Along with playing a shutdown vibration, this method also
+     * sleeps the current Thread for some time, to allow the vibration to finish before the device
+     * shuts down.
+     */
+    @VisibleForTesting // For testing vibrations without shutting down device
+    void playShutdownVibration(Context context) {
+        Vibrator vibrator = mInjector.getVibrator(context);
+        if (!vibrator.hasVibrator()) {
+            return;
+        }
+
+        VibrationEffect vibrationEffect = getValidShutdownVibration(context, vibrator);
+        vibrator.vibrate(
+                vibrationEffect,
+                VibrationAttributes.createForUsage(VibrationAttributes.USAGE_TOUCH));
+
+        // vibrator is asynchronous so we have to wait to avoid shutting down too soon.
+        long vibrationDuration = vibrationEffect.getDuration();
+        // A negative vibration duration may indicate a vibration effect whose duration is not
+        // known by the system (e.g. pre-baked effects). In that case, use the default shutdown
+        // vibration duration.
+        mInjector.sleep(vibrationDuration < 0 ? DEFAULT_SHUTDOWN_VIBRATE_MS : vibrationDuration);
+    }
+
     private static void saveMetrics(boolean reboot, String reason) {
         StringBuilder metricValue = new StringBuilder();
         metricValue.append("reboot:");
@@ -810,4 +834,75 @@
             }
         }
     }
-}
+
+    /**
+     * Provides a {@link VibrationEffect} to be used for shutdown.
+     *
+     * <p>The vibration to be played is derived from the shutdown vibration file (which the device
+     * should specify at `com.android.internal.R.string.config_defaultShutdownVibrationFile`). A
+     * fallback vibration maybe used in one of these conditions:
+     *      <ul>
+     *          <li>A vibration file has not been specified, or if the specified file does not exist
+     *          <li>If the content of the file does not represent a valid serialization of a
+     *              {@link VibrationEffect}
+     *          <li>If the {@link VibrationEffect} specified in the file is not suitable for
+     *              a shutdown vibration (such as indefinite vibrations)
+     *      </ul>
+     */
+    private VibrationEffect getValidShutdownVibration(Context context, Vibrator vibrator) {
+        VibrationEffect parsedEffect = parseVibrationEffectFromFile(
+                mInjector.getDefaultShutdownVibrationEffectFilePath(context));
+
+        if (parsedEffect == null || !vibrator.areVibrationFeaturesSupported(parsedEffect)) {
+            return createDefaultVibrationEffect();
+        }
+
+        long parsedEffectDuration = parsedEffect.getDuration();
+        if (parsedEffectDuration == Long.MAX_VALUE) {
+            // This means that the effect does not have a defined end.
+            // Since we don't want to vibrate forever while trying to shutdown, we ignore this
+            // parsed effect and use the default one instead.
+            Log.w(TAG, "The parsed shutdown vibration is indefinite.");
+            return createDefaultVibrationEffect();
+        }
+
+        return parsedEffect;
+    }
+
+    private static VibrationEffect parseVibrationEffectFromFile(String filePath) {
+        if (!TextUtils.isEmpty(filePath)) {
+            try {
+                return VibrationXmlParser.parse(new FileReader(filePath));
+            } catch (IOException e) {
+                Log.e(TAG, "Error parsing default shutdown vibration effect.", e);
+            }
+        }
+        return null;
+    }
+
+    private static VibrationEffect createDefaultVibrationEffect() {
+        return VibrationEffect.createOneShot(
+                DEFAULT_SHUTDOWN_VIBRATE_MS, VibrationEffect.DEFAULT_AMPLITUDE);
+    }
+
+    /** Utility class to inject instances, for easy testing. */
+    @VisibleForTesting
+    static class Injector {
+        public Vibrator getVibrator(Context context) {
+            return new SystemVibrator(context);
+        }
+
+        public void sleep(long durationMs) {
+            try {
+                Thread.sleep(durationMs);
+            } catch (InterruptedException unused) {
+                // this is not critical and does not require logging.
+            }
+        }
+
+        public String getDefaultShutdownVibrationEffectFilePath(Context context) {
+            return context.getResources().getString(
+                    com.android.internal.R.string.config_defaultShutdownVibrationFile);
+        }
+    }
+}
\ No newline at end of file
diff --git a/services/core/java/com/android/server/power/TEST_MAPPING b/services/core/java/com/android/server/power/TEST_MAPPING
index fbfe291..19086a1 100644
--- a/services/core/java/com/android/server/power/TEST_MAPPING
+++ b/services/core/java/com/android/server/power/TEST_MAPPING
@@ -17,12 +17,12 @@
       ]
     },
     {
-      "name": "FrameworksServicesTests",
+      "name": "PowerServiceTests",
       "options": [
         {"include-filter": "com.android.server.power"},
-        {"exclude-filter": "com.android.server.power.BatteryStatsTests"},
         {"exclude-annotation": "android.platform.test.annotations.FlakyTest"},
-        {"exclude-annotation": "androidx.test.filters.FlakyTest"}
+        {"exclude-annotation": "androidx.test.filters.FlakyTest"},
+        {"exclude-annotation": "org.junit.Ignore"}
       ]
     }
   ],
@@ -39,8 +39,14 @@
     {
       "name": "FrameworksServicesTests",
       "options": [
+        {"include-filter": "com.android.server.power"}
+      ]
+    },
+    {
+      "name": "PowerServiceTests",
+      "options": [
         {"include-filter": "com.android.server.power"},
-        {"exclude-filter": "com.android.server.power.BatteryStatsTests"}
+        {"exclude-annotation": "org.junit.Ignore"}
       ]
     }
   ]
diff --git a/services/core/java/com/android/server/power/WakeLockLog.java b/services/core/java/com/android/server/power/WakeLockLog.java
index d20c7f1..d3486a4 100644
--- a/services/core/java/com/android/server/power/WakeLockLog.java
+++ b/services/core/java/com/android/server/power/WakeLockLog.java
@@ -16,20 +16,26 @@
 
 package com.android.server.power;
 
+import android.content.Context;
+import android.content.pm.PackageManager;
 import android.os.PowerManager;
 import android.text.TextUtils;
 import android.util.Slog;
+import android.util.SparseArray;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.os.BackgroundThread;
 
 import java.io.PrintWriter;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.ConcurrentModificationException;
 import java.util.Date;
 import java.util.Iterator;
+import java.util.List;
 import java.util.NoSuchElementException;
+import java.util.Objects;
 
 /**
  * Simple Log for wake lock events. Optimized to reduce memory usage.
@@ -117,7 +123,7 @@
     private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
 
     /**
-     * Lock protects WakeLockLock.dump (binder thread) from conflicting with changes to the log
+     * Lock protects WakeLockLog.dump (binder thread) from conflicting with changes to the log
      * happening on the background thread.
      */
     private final Object mLock = new Object();
@@ -126,18 +132,20 @@
     private final TheLog mLog;
     private final TagDatabase mTagDatabase;
     private final SimpleDateFormat mDumpsysDateFormat;
+    private final Context mContext;
 
-    WakeLockLog() {
-        this(new Injector());
+    WakeLockLog(Context context) {
+        this(new Injector(), context);
     }
 
     @VisibleForTesting
-    WakeLockLog(Injector injector) {
+    WakeLockLog(Injector injector, Context context) {
         mInjector = injector;
         mTagDatabase = new TagDatabase(injector);
         EntryByteTranslator translator = new EntryByteTranslator(mTagDatabase);
         mLog = new TheLog(injector, translator, mTagDatabase);
         mDumpsysDateFormat = injector.getDateFormat();
+        mContext = context;
     }
 
     /**
@@ -176,10 +184,24 @@
         try {
             synchronized (mLock) {
                 pw.println("Wake Lock Log");
-                LogEntry tempEntry = new LogEntry();  // Temporary entry for the iterator to reuse.
-                final Iterator<LogEntry> iterator = mLog.getAllItems(tempEntry);
                 int numEvents = 0;
                 int numResets = 0;
+                SparseArray<String[]> uidToPackagesCache = new SparseArray();
+
+                for (int i = 0; i < mLog.mSavedAcquisitions.size(); i++) {
+                    numEvents++;
+                    LogEntry entry = mLog.mSavedAcquisitions.get(i);
+
+                    entry.updatePackageName(uidToPackagesCache, mContext.getPackageManager());
+
+                    if (DEBUG) {
+                        pw.print("Saved acquisition no. " + i);
+                    }
+                    entry.dump(pw, mDumpsysDateFormat);
+                }
+
+                LogEntry tempEntry = new LogEntry();  // Temporary entry for the iterator to reuse.
+                final Iterator<LogEntry> iterator = mLog.getAllItems(tempEntry);
                 while (iterator.hasNext()) {
                     String address = null;
                     if (DEBUG) {
@@ -192,6 +214,8 @@
                             numResets++;
                         } else {
                             numEvents++;
+                            entry.updatePackageName(uidToPackagesCache,
+                                    mContext.getPackageManager());
                             if (DEBUG) {
                                 pw.print(address);
                             }
@@ -381,6 +405,11 @@
          */
         public int flags;
 
+        /**
+         * The name of the package that acquired the wake lock
+         */
+        public String packageName;
+
         LogEntry() {}
 
         LogEntry(long time, int type, TagData tag, int flags) {
@@ -438,8 +467,13 @@
             }
             sb.append(dateFormat.format(new Date(time)))
                     .append(" - ")
-                    .append(tag == null ? "---" : tag.ownerUid)
-                    .append(" - ")
+                    .append(tag == null ? "---" : tag.ownerUid);
+            if (packageName != null) {
+                sb.append(" (");
+                sb.append(packageName);
+                sb.append(")");
+            }
+            sb.append(" - ")
                     .append(type == TYPE_ACQUIRE ? "ACQ" : "REL")
                     .append(" ")
                     .append(tag == null ? "UNKNOWN" : tag.tag);
@@ -463,6 +497,36 @@
                 sb.append(",system-wakelock");
             }
         }
+
+        /**
+         * Update the package name using the cache if available or the package manager.
+         * @param uidToPackagesCache The cache of package names
+         * @param packageManager The package manager
+         */
+        public void updatePackageName(SparseArray<String[]> uidToPackagesCache,
+                PackageManager packageManager) {
+            if (tag == null) {
+                return;
+            }
+
+            String[] packages;
+            if (uidToPackagesCache.contains(tag.ownerUid)) {
+                packages = uidToPackagesCache.get(tag.ownerUid);
+            } else {
+                packages = packageManager.getPackagesForUid(tag.ownerUid);
+                uidToPackagesCache.put(tag.ownerUid, packages);
+            }
+
+            if (packages != null && packages.length > 0) {
+                packageName = packages[0];
+                if (packages.length > 1) {
+                    StringBuilder sb = new StringBuilder();
+                    sb.append(packageName)
+                            .append(",...");
+                    packageName = sb.toString();
+                }
+            }
+        }
     }
 
     /**
@@ -744,6 +808,12 @@
 
         private final TagDatabase mTagDatabase;
 
+        /**
+         * Wake lock acquisition events should continue to be printed until their corresponding
+         * release event is removed from the log.
+         */
+        private final List<LogEntry> mSavedAcquisitions;
+
         TheLog(Injector injector, EntryByteTranslator translator, TagDatabase tagDatabase) {
             final int logSize = Math.max(injector.getLogSize(), LOG_SIZE_MIN);
             mBuffer = new byte[logSize];
@@ -758,6 +828,8 @@
                     removeTagIndex(index);
                 }
             });
+
+            mSavedAcquisitions = new ArrayList();
         }
 
         /**
@@ -976,6 +1048,19 @@
 
             // Copy the contents of the start of the buffer to our temporary buffer.
             LogEntry entry = readEntryAt(mStart, mStartTime, null);
+            if (entry.type == TYPE_ACQUIRE) {
+                // We'll continue to print the event until the corresponding release event is also
+                // removed from the log.
+                mSavedAcquisitions.add(entry);
+            } else if (entry.type == TYPE_RELEASE) {
+                // We no longer need to print the corresponding acquire event.
+                for (int i = 0; i < mSavedAcquisitions.size(); i++) {
+                    if (Objects.equals(mSavedAcquisitions.get(i).tag, entry.tag)) {
+                        mSavedAcquisitions.remove(i);
+                        break;
+                    }
+                }
+            }
             if (DEBUG) {
                 Slog.d(TAG, "Removing oldest item at @ " + mStart + ", found: " + entry);
             }
diff --git a/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java b/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java
index efb3622..07d1844 100644
--- a/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java
+++ b/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java
@@ -19,6 +19,7 @@
 import android.app.UiModeManager;
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.res.Resources;
 import android.database.ContentObserver;
 import android.net.Uri;
 import android.os.BatterySaverPolicyConfig;
@@ -162,26 +163,8 @@
 
     private static final Policy DEFAULT_ADAPTIVE_POLICY = OFF_POLICY;
 
-    private static final Policy DEFAULT_FULL_POLICY = new Policy(
-            0.5f,  /* adjustBrightnessFactor */
-            true,  /* advertiseIsEnabled */
-            true,  /* deferFullBackup */
-            true,  /* deferKeyValueBackup */
-            false, /* disableAnimation */
-            true,  /* disableAod */
-            true,  /* disableLaunchBoost */
-            true,  /* disableOptionalSensors */
-            false,  /* disableVibration */
-            false, /* enableAdjustBrightness */
-            false, /* enableDataSaver */
-            true,  /* enableFirewall */
-            true, /* enableNightMode */
-            true, /* enableQuickDoze */
-            true, /* forceAllAppsStandby */
-            true, /* forceBackgroundCheck */
-            PowerManager.LOCATION_MODE_FOREGROUND_ONLY, /* locationMode */
-            PowerManager.SOUND_TRIGGER_MODE_CRITICAL_ONLY /* soundTriggerMode */
-    );
+    /** The base default full policy for the device. */
+    private final Policy DEFAULT_FULL_POLICY;
 
     private final Object mLock;
     private final Handler mHandler;
@@ -222,13 +205,13 @@
     @GuardedBy("mLock")
     private Policy mAdaptivePolicy = DEFAULT_ADAPTIVE_POLICY;
 
-    /** The current default full policy. */
+    /** The current default full policy. This may be modified by Settings or DeviceConfig flags. */
     @GuardedBy("mLock")
-    private Policy mDefaultFullPolicy = DEFAULT_FULL_POLICY;
+    private Policy mDefaultFullPolicy;
 
     /** The policy to be used for full battery saver. */
     @GuardedBy("mLock")
-    private Policy mFullPolicy = DEFAULT_FULL_POLICY;
+    private Policy mFullPolicy;
 
     /**
      * The current effective policy. This is based on the current policy level's policy, with any
@@ -273,6 +256,30 @@
         mContext = context;
         mContentResolver = context.getContentResolver();
         mBatterySavingStats = batterySavingStats;
+
+        final Resources res = context.getResources();
+        DEFAULT_FULL_POLICY = new Policy(
+                res.getFloat(R.dimen.config_batterySaver_full_adjustBrightnessFactor),
+                true,  /* advertiseIsEnabled */
+                res.getBoolean(R.bool.config_batterySaver_full_deferFullBackup),
+                res.getBoolean(R.bool.config_batterySaver_full_deferKeyValueBackup),
+                res.getBoolean(R.bool.config_batterySaver_full_disableAnimation),
+                res.getBoolean(R.bool.config_batterySaver_full_disableAod),
+                res.getBoolean(R.bool.config_batterySaver_full_disableLaunchBoost),
+                res.getBoolean(R.bool.config_batterySaver_full_disableOptionalSensors),
+                res.getBoolean(R.bool.config_batterySaver_full_disableVibration),
+                res.getBoolean(R.bool.config_batterySaver_full_enableAdjustBrightness),
+                res.getBoolean(R.bool.config_batterySaver_full_enableDataSaver),
+                res.getBoolean(R.bool.config_batterySaver_full_enableFirewall),
+                res.getBoolean(R.bool.config_batterySaver_full_enableNightMode),
+                res.getBoolean(R.bool.config_batterySaver_full_enableQuickDoze),
+                res.getBoolean(R.bool.config_batterySaver_full_forceAllAppsStandby),
+                res.getBoolean(R.bool.config_batterySaver_full_forceBackgroundCheck),
+                res.getInteger(R.integer.config_batterySaver_full_locationMode),
+                res.getInteger(R.integer.config_batterySaver_full_soundTriggerMode)
+        );
+        mDefaultFullPolicy = DEFAULT_FULL_POLICY;
+        mFullPolicy = DEFAULT_FULL_POLICY;
     }
 
     /**
diff --git a/services/core/java/com/android/server/power/batterysaver/TEST_MAPPING b/services/core/java/com/android/server/power/batterysaver/TEST_MAPPING
index 17dba7d..c091b8e 100644
--- a/services/core/java/com/android/server/power/batterysaver/TEST_MAPPING
+++ b/services/core/java/com/android/server/power/batterysaver/TEST_MAPPING
@@ -4,7 +4,13 @@
       "name": "CtsLocationCoarseTestCases"
     },
     {
-      "name": "CtsLocationFineTestCases"
+      "name": "CtsLocationFineTestCases",
+      "options": [
+          {
+             // TODO: Wait for test to deflake - b/293934372
+             "exclude-filter":"android.location.cts.fine.ScanningSettingsTest"
+          }
+      ]
     },
     {
       "name": "CtsLocationNoneTestCases"
diff --git a/services/core/java/com/android/server/power/hint/HintManagerService.java b/services/core/java/com/android/server/power/hint/HintManagerService.java
index 1a91d25..8dcf3e0 100644
--- a/services/core/java/com/android/server/power/hint/HintManagerService.java
+++ b/services/core/java/com/android/server/power/hint/HintManagerService.java
@@ -304,7 +304,8 @@
         return mService;
     }
 
-    private boolean checkTidValid(int uid, int tgid, int [] tids) {
+    // returns the first invalid tid or null if not found
+    private Integer checkTidValid(int uid, int tgid, int [] tids) {
         // Make sure all tids belongs to the same UID (including isolated UID),
         // tids can belong to different application processes.
         List<Integer> isolatedPids = null;
@@ -326,19 +327,24 @@
             if (isolatedPids == null) {
                 // To avoid deadlock, do not call into AMS if the call is from system.
                 if (uid == Process.SYSTEM_UID) {
-                    return false;
+                    return threadId;
                 }
                 isolatedPids = mAmInternal.getIsolatedProcesses(uid);
                 if (isolatedPids == null) {
-                    return false;
+                    return threadId;
                 }
             }
             if (isolatedPids.contains(pidOfThreadId)) {
                 continue;
             }
-            return false;
+            return threadId;
         }
-        return true;
+        return null;
+    }
+
+    private String formatTidCheckErrMsg(int callingUid, int[] tids, Integer invalidTid) {
+        return "Tid" + invalidTid + " from list " + Arrays.toString(tids)
+                + " doesn't belong to the calling application" + callingUid;
     }
 
     @VisibleForTesting
@@ -356,8 +362,11 @@
             final int callingTgid = Process.getThreadGroupLeader(Binder.getCallingPid());
             final long identity = Binder.clearCallingIdentity();
             try {
-                if (!checkTidValid(callingUid, callingTgid, tids)) {
-                    throw new SecurityException("Some tid doesn't belong to the application");
+                final Integer invalidTid = checkTidValid(callingUid, callingTgid, tids);
+                if (invalidTid != null) {
+                    final String errMsg = formatTidCheckErrMsg(callingUid, tids, invalidTid);
+                    Slogf.w(TAG, errMsg);
+                    throw new SecurityException(errMsg);
                 }
 
                 long halSessionPtr = mNativeWrapper.halCreateHintSession(callingTgid, callingUid,
@@ -561,8 +570,11 @@
                 final int callingTgid = Process.getThreadGroupLeader(Binder.getCallingPid());
                 final long identity = Binder.clearCallingIdentity();
                 try {
-                    if (!checkTidValid(callingUid, callingTgid, tids)) {
-                        throw new SecurityException("Some tid doesn't belong to the application.");
+                    final Integer invalidTid = checkTidValid(callingUid, callingTgid, tids);
+                    if (invalidTid != null) {
+                        final String errMsg = formatTidCheckErrMsg(callingUid, tids, invalidTid);
+                        Slogf.w(TAG, errMsg);
+                        throw new SecurityException(errMsg);
                     }
                 } finally {
                     Binder.restoreCallingIdentity(identity);
diff --git a/services/core/java/com/android/server/power/stats/BatteryExternalStatsWorker.java b/services/core/java/com/android/server/power/stats/BatteryExternalStatsWorker.java
index 751f535..d5fd017 100644
--- a/services/core/java/com/android/server/power/stats/BatteryExternalStatsWorker.java
+++ b/services/core/java/com/android/server/power/stats/BatteryExternalStatsWorker.java
@@ -54,6 +54,7 @@
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import java.util.concurrent.RejectedExecutionException;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
@@ -404,8 +405,10 @@
      * within the task, never wait on the resulting Future. This will result in a deadlock.
      */
     public synchronized void scheduleRunnable(Runnable runnable) {
-        if (!mExecutorService.isShutdown()) {
+        try {
             mExecutorService.submit(runnable);
+        } catch (RejectedExecutionException e) {
+            Slog.e(TAG, "Couldn't schedule " + runnable, e);
         }
     }
 
diff --git a/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java b/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
index 6821c40..cf4e845 100644
--- a/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
+++ b/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
@@ -78,6 +78,7 @@
 import android.telephony.CellSignalStrengthNr;
 import android.telephony.DataConnectionRealTimeInfo;
 import android.telephony.ModemActivityInfo;
+import android.telephony.NetworkRegistrationInfo;
 import android.telephony.ServiceState;
 import android.telephony.ServiceState.RegState;
 import android.telephony.SignalStrength;
@@ -113,6 +114,7 @@
 import com.android.internal.os.BinderCallsStats;
 import com.android.internal.os.BinderTransactionNameResolver;
 import com.android.internal.os.Clock;
+import com.android.internal.os.CpuScalingPolicies;
 import com.android.internal.os.KernelCpuSpeedReader;
 import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidActiveTimeReader;
 import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidClusterTimeReader;
@@ -180,7 +182,7 @@
     // TODO: remove "tcp" from network methods, since we measure total stats.
 
     // Current on-disk Parcel version. Must be updated when the format of the parcelable changes
-    public static final int VERSION = 212;
+    public static final int VERSION = 213;
 
     // The maximum number of names wakelocks we will keep track of
     // per uid; once the limit is reached, we batch the remaining wakelocks
@@ -251,10 +253,14 @@
     private static final LongCounter[] ZERO_LONG_COUNTER_ARRAY =
             new LongCounter[]{ZERO_LONG_COUNTER};
 
-    private final KernelWakelockReader mKernelWakelockReader = new KernelWakelockReader();
+    @VisibleForTesting
+    protected CpuScalingPolicies mCpuScalingPolicies;
+
     private final KernelWakelockStats mTmpWakelockStats = new KernelWakelockStats();
 
     @VisibleForTesting
+    protected KernelWakelockReader mKernelWakelockReader;
+    @VisibleForTesting
     protected KernelCpuUidUserSysTimeReader mCpuUidUserSysTimeReader;
     @VisibleForTesting
     protected KernelCpuSpeedReader[] mKernelCpuSpeedReaders;
@@ -323,6 +329,7 @@
      * ModemActivityInfo must be available.
      */
     public static final int PER_UID_MODEM_POWER_MODEL_MODEM_ACTIVITY_INFO_RX_TX = 2;
+
     @IntDef(flag = true, prefix = "PER_UID_MODEM_MODEL_", value = {
             PER_UID_MODEM_POWER_MODEL_MOBILE_RADIO_ACTIVE_TIME,
             PER_UID_MODEM_POWER_MODEL_MODEM_ACTIVITY_INFO_RX_TX,
@@ -577,9 +584,7 @@
     @SuppressWarnings("GuardedBy")    // errorprone false positive on getProcStateTimeCounter
     @VisibleForTesting
     public void updateProcStateCpuTimesLocked(int uid, long elapsedRealtimeMs, long uptimeMs) {
-        if (!initKernelSingleUidTimeReaderLocked()) {
-            return;
-        }
+        ensureKernelSingleUidTimeReaderLocked();
 
         final Uid u = getUidStatsLocked(uid);
 
@@ -656,9 +661,7 @@
                 return;
             }
 
-            if(!initKernelSingleUidTimeReaderLocked()) {
-                return;
-            }
+            ensureKernelSingleUidTimeReaderLocked();
 
             // TODO(b/197162116): just get a list of UIDs
             final SparseArray<long[]> allUidCpuFreqTimesMs =
@@ -718,24 +721,15 @@
     }
 
     @GuardedBy("this")
-    private boolean initKernelSingleUidTimeReaderLocked() {
-        if (mKernelSingleUidTimeReader == null) {
-            if (mPowerProfile == null) {
-                return false;
-            }
-            if (mCpuFreqs == null) {
-                mCpuFreqs = mCpuUidFreqTimeReader.readFreqs(mPowerProfile);
-            }
-            if (mCpuFreqs != null) {
-                mKernelSingleUidTimeReader = new KernelSingleUidTimeReader(mCpuFreqs.length);
-            } else {
-                mPerProcStateCpuTimesAvailable = mCpuUidFreqTimeReader.allUidTimesAvailable();
-                return false;
-            }
+    private void ensureKernelSingleUidTimeReaderLocked() {
+        if (mKernelSingleUidTimeReader != null) {
+            return;
         }
-        mPerProcStateCpuTimesAvailable = mCpuUidFreqTimeReader.allUidTimesAvailable()
+
+        mKernelSingleUidTimeReader = new KernelSingleUidTimeReader(
+                mCpuScalingPolicies.getScalingStepCount());
+        mPerProcStateCpuTimesAvailable = mCpuUidFreqTimeReader.perClusterTimesAvailable()
                 && mKernelSingleUidTimeReader.singleUidCpuTimesAvailable();
-        return true;
     }
 
     public interface ExternalStatsSync {
@@ -1032,6 +1026,7 @@
     private static final int USB_DATA_CONNECTED = 2;
     int mUsbDataState = USB_DATA_UNKNOWN;
 
+    private static final int GPS_SIGNAL_QUALITY_NONE = 2;
     int mGpsSignalQualityBin = -1;
     final StopwatchTimer[] mGpsSignalQualityTimer =
         new StopwatchTimer[GnssSignalQuality.NUM_GNSS_SIGNAL_QUALITY_LEVELS];
@@ -1047,6 +1042,9 @@
     final StopwatchTimer[] mPhoneDataConnectionsTimer =
             new StopwatchTimer[NUM_DATA_CONNECTION_TYPES];
 
+    int mNrState = -1;
+    StopwatchTimer mNrNsaTimer;
+
     @RadioAccessTechnology
     int mActiveRat = RADIO_ACCESS_TECHNOLOGY_OTHER;
 
@@ -1542,8 +1540,6 @@
 
     private long mBatteryTimeToFullSeconds = -1;
 
-    private boolean mCpuFreqsInitialized;
-    private long[] mCpuFreqs;
     private LongArrayMultiStateCounter.LongArrayContainer mTmpCpuTimeInFreq;
 
     /**
@@ -1763,6 +1759,7 @@
         mCpuUidFreqTimeReader = new KernelCpuUidFreqTimeReader(true, clock);
         mCpuUidActiveTimeReader = new KernelCpuUidActiveTimeReader(true, clock);
         mCpuUidClusterTimeReader = new KernelCpuUidClusterTimeReader(true, clock);
+        mKernelWakelockReader = new KernelWakelockReader();
     }
 
     /**
@@ -2675,19 +2672,18 @@
          * The reported count from /proc/wakelocks when unplug() was last
          * called.
          */
-        int mUnpluggedReportedCount;
+        int mBaseReportedCount;
 
         /**
          * The most recent reported total_time from /proc/wakelocks.
          */
         long mCurrentReportedTotalTimeUs;
 
-
         /**
          * The reported total_time from /proc/wakelocks when unplug() was last
          * called.
          */
-        long mUnpluggedReportedTotalTimeUs;
+        long mBaseReportedTotalTimeUs;
 
         /**
          * Whether we are currently in a discharge cycle.
@@ -2708,9 +2704,9 @@
         public SamplingTimer(Clock clock, TimeBase timeBase, Parcel in) {
             super(clock, 0, timeBase, in);
             mCurrentReportedCount = in.readInt();
-            mUnpluggedReportedCount = in.readInt();
+            mBaseReportedCount = in.readInt();
             mCurrentReportedTotalTimeUs = in.readLong();
-            mUnpluggedReportedTotalTimeUs = in.readLong();
+            mBaseReportedTotalTimeUs = in.readLong();
             mTrackingReportedValues = in.readInt() == 1;
             mTimeBaseRunning = timeBase.isRunning();
         }
@@ -2736,8 +2732,8 @@
         public void endSample(long elapsedRealtimeUs) {
             mTotalTimeUs = computeRunTimeLocked(0 /* unused by us */, elapsedRealtimeUs);
             mCount = computeCurrentCountLocked();
-            mUnpluggedReportedTotalTimeUs = mCurrentReportedTotalTimeUs = 0;
-            mUnpluggedReportedCount = mCurrentReportedCount = 0;
+            mBaseReportedTotalTimeUs = mCurrentReportedTotalTimeUs = 0;
+            mBaseReportedCount = mCurrentReportedCount = 0;
             mTrackingReportedValues = false;
         }
 
@@ -2762,10 +2758,21 @@
          * @param count total number of times the event being sampled occurred.
          */
         public void update(long totalTimeUs, int count, long elapsedRealtimeUs) {
+            update(totalTimeUs, 0, count, elapsedRealtimeUs);
+        }
+
+        /**
+         * Updates the current recorded values. See {@link #update(long, int, long)}
+         *
+         * @param activeTimeUs Time that the currently active wake lock has been held.
+         */
+        public void update(long totalTimeUs, long activeTimeUs, int count,
+                long elapsedRealtimeUs) {
             if (mTimeBaseRunning && !mTrackingReportedValues) {
-                // Updating the reported value for the first time.
-                mUnpluggedReportedTotalTimeUs = totalTimeUs;
-                mUnpluggedReportedCount = count;
+                // Updating the reported value for the first time. If the wake lock is currently
+                // active, mark the time it was acquired as the base timestamp.
+                mBaseReportedTotalTimeUs = totalTimeUs - activeTimeUs;
+                mBaseReportedCount = activeTimeUs == 0 ? count : count - 1;
             }
 
             mTrackingReportedValues = true;
@@ -2800,8 +2807,8 @@
         public void onTimeStarted(long elapsedRealtimeUs, long baseUptimeUs, long baseRealtimeUs) {
             super.onTimeStarted(elapsedRealtimeUs, baseUptimeUs, baseRealtimeUs);
             if (mTrackingReportedValues) {
-                mUnpluggedReportedTotalTimeUs = mCurrentReportedTotalTimeUs;
-                mUnpluggedReportedCount = mCurrentReportedCount;
+                mBaseReportedTotalTimeUs = mCurrentReportedTotalTimeUs;
+                mBaseReportedCount = mCurrentReportedCount;
             }
             mTimeBaseRunning = true;
         }
@@ -2816,30 +2823,30 @@
         public void logState(Printer pw, String prefix) {
             super.logState(pw, prefix);
             pw.println(prefix + "mCurrentReportedCount=" + mCurrentReportedCount
-                    + " mUnpluggedReportedCount=" + mUnpluggedReportedCount
+                    + " mBaseReportedCount=" + mBaseReportedCount
                     + " mCurrentReportedTotalTime=" + mCurrentReportedTotalTimeUs
-                    + " mUnpluggedReportedTotalTime=" + mUnpluggedReportedTotalTimeUs);
+                    + " mBaseReportedTotalTimeUs=" + mBaseReportedTotalTimeUs);
         }
 
         @Override
         protected long computeRunTimeLocked(long curBatteryRealtime, long elapsedRealtimeUs) {
             return mTotalTimeUs + (mTimeBaseRunning && mTrackingReportedValues
-                    ? mCurrentReportedTotalTimeUs - mUnpluggedReportedTotalTimeUs : 0);
+                    ? mCurrentReportedTotalTimeUs - mBaseReportedTotalTimeUs : 0);
         }
 
         @Override
         protected int computeCurrentCountLocked() {
             return mCount + (mTimeBaseRunning && mTrackingReportedValues
-                    ? mCurrentReportedCount - mUnpluggedReportedCount : 0);
+                    ? mCurrentReportedCount - mBaseReportedCount : 0);
         }
 
         @Override
         public void writeToParcel(Parcel out, long elapsedRealtimeUs) {
             super.writeToParcel(out, elapsedRealtimeUs);
             out.writeInt(mCurrentReportedCount);
-            out.writeInt(mUnpluggedReportedCount);
+            out.writeInt(mBaseReportedCount);
             out.writeLong(mCurrentReportedTotalTimeUs);
-            out.writeLong(mUnpluggedReportedTotalTimeUs);
+            out.writeLong(mBaseReportedTotalTimeUs);
             out.writeInt(mTrackingReportedValues ? 1 : 0);
         }
 
@@ -2847,8 +2854,8 @@
         public boolean reset(boolean detachIfReset, long elapsedRealtimeUs) {
             super.reset(detachIfReset, elapsedRealtimeUs);
             mTrackingReportedValues = false;
-            mUnpluggedReportedTotalTimeUs = 0;
-            mUnpluggedReportedCount = 0;
+            mBaseReportedTotalTimeUs = 0;
+            mBaseReportedCount = 0;
             return true;
         }
     }
@@ -5210,6 +5217,8 @@
         if (mGpsNesting == 0) {
             mHistory.recordStateStopEvent(elapsedRealtimeMs, uptimeMs,
                     HistoryItem.STATE_GPS_ON_FLAG);
+            mHistory.recordGpsSignalQualityEvent(elapsedRealtimeMs, uptimeMs,
+                    GPS_SIGNAL_QUALITY_NONE);
             stopAllGpsSignalQualityTimersLocked(-1, elapsedRealtimeMs);
             mGpsSignalQualityBin = -1;
         }
@@ -6087,15 +6096,16 @@
 
     @GuardedBy("this")
     public void notePhoneDataConnectionStateLocked(@NetworkType int dataType, boolean hasData,
-            @RegState int serviceType, @ServiceState.FrequencyRange int nrFrequency) {
-        notePhoneDataConnectionStateLocked(dataType, hasData, serviceType, nrFrequency,
+            @RegState int serviceType, @NetworkRegistrationInfo.NRState int nrState,
+            @ServiceState.FrequencyRange int nrFrequency) {
+        notePhoneDataConnectionStateLocked(dataType, hasData, serviceType, nrState, nrFrequency,
                 mClock.elapsedRealtime(), mClock.uptimeMillis());
     }
 
     @GuardedBy("this")
     public void notePhoneDataConnectionStateLocked(@NetworkType int dataType, boolean hasData,
-            @RegState int serviceType, @ServiceState.FrequencyRange int nrFrequency,
-            long elapsedRealtimeMs, long uptimeMs) {
+            @RegState int serviceType, @NetworkRegistrationInfo.NRState int nrState,
+            @ServiceState.FrequencyRange int nrFrequency, long elapsedRealtimeMs, long uptimeMs) {
         // BatteryStats uses 0 to represent no network type.
         // Telephony does not have a concept of no network type, and uses 0 to represent unknown.
         // Unknown is included in DATA_CONNECTION_OTHER.
@@ -6118,11 +6128,7 @@
             }
         }
 
-        final int newRat = mapNetworkTypeToRadioAccessTechnology(bin);
-        if (newRat == RADIO_ACCESS_TECHNOLOGY_NR) {
-            // Note possible frequency change for the NR RAT.
-            getRatBatteryStatsLocked(newRat).noteFrequencyRange(nrFrequency, elapsedRealtimeMs);
-        }
+
 
         if (DEBUG) Log.i(TAG, "Phone Data Connection -> " + dataType + " = " + hasData);
         if (mPhoneDataConnectionType != bin) {
@@ -6133,18 +6139,54 @@
             }
             mPhoneDataConnectionType = bin;
             mPhoneDataConnectionsTimer[bin].startRunningLocked(elapsedRealtimeMs);
-
-            if (mActiveRat != newRat) {
-                getRatBatteryStatsLocked(mActiveRat).noteActive(false, elapsedRealtimeMs);
-                mActiveRat = newRat;
-            }
-            final boolean modemActive = mMobileRadioActiveTimer.isRunningLocked();
-            getRatBatteryStatsLocked(newRat).noteActive(modemActive, elapsedRealtimeMs);
         }
+
+        if (mNrState != nrState) {
+            mHistory.recordNrStateChangeEvent(elapsedRealtimeMs, uptimeMs, nrState);
+            mNrState = nrState;
+        }
+
+        final boolean newNrNsaActive = isNrNsa(bin, nrState);
+        final boolean nrNsaActive = mNrNsaTimer.isRunningLocked();
+        if (newNrNsaActive != nrNsaActive) {
+            if (newNrNsaActive) {
+                mNrNsaTimer.startRunningLocked(elapsedRealtimeMs);
+            } else {
+                mNrNsaTimer.stopRunningLocked(elapsedRealtimeMs);
+            }
+        }
+
+        final int newRat = mapNetworkTypeToRadioAccessTechnology(bin, nrState);
+        if (newRat == RADIO_ACCESS_TECHNOLOGY_NR) {
+            // Note possible frequency change for the NR RAT.
+            getRatBatteryStatsLocked(newRat).noteFrequencyRange(nrFrequency, elapsedRealtimeMs);
+        }
+        if (mActiveRat != newRat) {
+            getRatBatteryStatsLocked(mActiveRat).noteActive(false, elapsedRealtimeMs);
+            mActiveRat = newRat;
+        }
+        final boolean modemActive = mMobileRadioActiveTimer.isRunningLocked();
+        getRatBatteryStatsLocked(newRat).noteActive(modemActive, elapsedRealtimeMs);
+    }
+
+    /**
+     * Non-standalone (NSA) mode for 5G NR will have an LTE network type. If NR state is
+     * connected while on an LTE network, the device is in NR NSA mode.
+     */
+    private static boolean isNrNsa(@NetworkType int dataType,
+            @NetworkRegistrationInfo.NRState int nrState) {
+        return dataType == TelephonyManager.NETWORK_TYPE_LTE
+                && nrState == NetworkRegistrationInfo.NR_STATE_CONNECTED;
     }
 
     @RadioAccessTechnology
-    private static int mapNetworkTypeToRadioAccessTechnology(@NetworkType int dataType) {
+    private static int mapNetworkTypeToRadioAccessTechnology(@NetworkType int dataType,
+            @NetworkRegistrationInfo.NRState int nrState) {
+        if (isNrNsa(dataType, nrState)) {
+            // Treat an NR NSA connection as RADIO_ACCESS_TECHNOLOGY_NR
+            return RADIO_ACCESS_TECHNOLOGY_NR;
+        }
+
         switch (dataType) {
             case TelephonyManager.NETWORK_TYPE_NR:
                 return RADIO_ACCESS_TECHNOLOGY_NR;
@@ -7317,6 +7359,10 @@
         return mPhoneDataConnectionsTimer[dataType];
     }
 
+    @Override public long getNrNsaTime(long elapsedRealtimeUs) {
+        return mNrNsaTimer.getTotalTimeLocked(elapsedRealtimeUs, STATS_SINCE_CHARGED);
+    }
+
     @Override public long getActiveRadioDurationMs(@RadioAccessTechnology int rat,
             @ServiceState.FrequencyRange int frequencyRange, int signalStrength,
             long elapsedRealtimeMs) {
@@ -8209,11 +8255,13 @@
 
             mProcStateTimeMs =
                     new TimeInFreqMultiStateCounter(mBsi.mOnBatteryTimeBase,
-                            PROC_STATE_TIME_COUNTER_STATE_COUNT, mBsi.getCpuFreqCount(),
+                            PROC_STATE_TIME_COUNTER_STATE_COUNT,
+                            mBsi.mCpuScalingPolicies.getScalingStepCount(),
                             timestampMs);
             mProcStateScreenOffTimeMs =
                     new TimeInFreqMultiStateCounter(mBsi.mOnBatteryScreenOffTimeBase,
-                            PROC_STATE_TIME_COUNTER_STATE_COUNT, mBsi.getCpuFreqCount(),
+                            PROC_STATE_TIME_COUNTER_STATE_COUNT,
+                            mBsi.mCpuScalingPolicies.getScalingStepCount(),
                             timestampMs);
         }
 
@@ -9214,6 +9262,7 @@
         }
 
         @Override
+        @Deprecated
         public long getTimeAtCpuSpeed(int cluster, int step, int which) {
             if (mCpuClusterSpeedTimesUs != null) {
                 if (cluster >= 0 && cluster < mCpuClusterSpeedTimesUs.length) {
@@ -10445,7 +10494,7 @@
                 cpuActiveCounter.setState(0, timestampMs);
 
                 if (mBsi.trackPerProcStateCpuTimes()) {
-                    final int cpuFreqCount = mBsi.getCpuFreqCount();
+                    final int cpuFreqCount = mBsi.mCpuScalingPolicies.getScalingStepCount();
 
                     cpuTimeInFreqCounter = new LongArrayMultiStateCounter(1, cpuFreqCount);
 
@@ -10848,44 +10897,43 @@
     }
 
     @GuardedBy("this")
-    @Override
-    public long[] getCpuFreqs() {
-        if (!mCpuFreqsInitialized) {
-            mCpuFreqs = mCpuUidFreqTimeReader.readFreqs(mPowerProfile);
-            mCpuFreqsInitialized = true;
-        }
-        return mCpuFreqs;
-    }
-
-    @GuardedBy("this")
-    @Override
-    public int getCpuFreqCount() {
-        final long[] cpuFreqs = getCpuFreqs();
-        return cpuFreqs != null ? cpuFreqs.length : 0;
+    public CpuScalingPolicies getCpuScalingPolicies() {
+        return mCpuScalingPolicies;
     }
 
     @GuardedBy("this")
     private LongArrayMultiStateCounter.LongArrayContainer getCpuTimeInFreqContainer() {
         if (mTmpCpuTimeInFreq == null) {
             mTmpCpuTimeInFreq =
-                    new LongArrayMultiStateCounter.LongArrayContainer(getCpuFreqCount());
+                    new LongArrayMultiStateCounter.LongArrayContainer(
+                            mCpuScalingPolicies.getScalingStepCount());
         }
         return mTmpCpuTimeInFreq;
     }
 
-    public BatteryStatsImpl(File systemDir, Handler handler, PlatformIdleStateCallback cb,
-            EnergyStatsRetriever energyStatsCb, UserInfoProvider userInfoProvider) {
-        this(Clock.SYSTEM_CLOCK, systemDir, handler, cb, energyStatsCb, userInfoProvider);
+    public BatteryStatsImpl(@Nullable File systemDir, @NonNull Handler handler,
+            @Nullable PlatformIdleStateCallback cb, @Nullable EnergyStatsRetriever energyStatsCb,
+            @NonNull UserInfoProvider userInfoProvider, @NonNull PowerProfile powerProfile,
+            @NonNull CpuScalingPolicies cpuScalingPolicies) {
+        this(Clock.SYSTEM_CLOCK, systemDir, handler, cb, energyStatsCb, userInfoProvider,
+                powerProfile, cpuScalingPolicies);
     }
 
-    private BatteryStatsImpl(Clock clock, File systemDir, Handler handler,
-            PlatformIdleStateCallback cb, EnergyStatsRetriever energyStatsCb,
-            UserInfoProvider userInfoProvider) {
+    private BatteryStatsImpl(@NonNull Clock clock, @Nullable File systemDir,
+            @NonNull Handler handler, @Nullable PlatformIdleStateCallback cb,
+            @Nullable EnergyStatsRetriever energyStatsCb,
+            @NonNull UserInfoProvider userInfoProvider, @NonNull PowerProfile powerProfile,
+            @NonNull CpuScalingPolicies cpuScalingPolicies) {
         init(clock);
 
         mHandler = new MyHandler(handler.getLooper());
         mConstants = new Constants(mHandler);
 
+        mPowerProfile = powerProfile;
+        mCpuScalingPolicies = cpuScalingPolicies;
+
+        initPowerProfile();
+
         if (systemDir == null) {
             mStatsFile = null;
             mCheckinFile = null;
@@ -10948,6 +10996,7 @@
             mPhoneDataConnectionsTimer[i] = new StopwatchTimer(mClock, null, -300 - i, null,
                     mOnBatteryTimeBase);
         }
+        mNrNsaTimer = new StopwatchTimer(mClock, null, -200 + 2, null, mOnBatteryTimeBase);
         for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
             mNetworkByteActivityCounters[i] = new LongSamplingCounter(mOnBatteryTimeBase);
             mNetworkPacketActivityCounters[i] = new LongSamplingCounter(mOnBatteryTimeBase);
@@ -11001,39 +11050,27 @@
         mBatteryLevel = 0;
     }
 
-    /**
-     * Injects a power profile.
-     */
-    @GuardedBy("this")
-    public void setPowerProfileLocked(PowerProfile profile) {
-        mPowerProfile = profile;
-
-        int totalSpeedStepCount = 0;
-
-        // We need to initialize the KernelCpuSpeedReaders to read from
-        // the first cpu of each core. Once we have the PowerProfile, we have access to this
-        // information.
-        final int numClusters = mPowerProfile.getNumCpuClusters();
-        mKernelCpuSpeedReaders = new KernelCpuSpeedReader[numClusters];
-        int firstCpuOfCluster = 0;
-        for (int i = 0; i < numClusters; i++) {
-            final int numSpeedSteps = mPowerProfile.getNumSpeedStepsInCpuCluster(i);
-            mKernelCpuSpeedReaders[i] = new KernelCpuSpeedReader(firstCpuOfCluster,
-                    numSpeedSteps);
-            firstCpuOfCluster += mPowerProfile.getNumCoresInCpuCluster(i);
-            totalSpeedStepCount += numSpeedSteps;
+    private void initPowerProfile() {
+        int[] policies = mCpuScalingPolicies.getPolicies();
+        mKernelCpuSpeedReaders = new KernelCpuSpeedReader[policies.length];
+        for (int i = 0; i < policies.length; i++) {
+            int[] cpus = mCpuScalingPolicies.getRelatedCpus(policies[i]);
+            int[] freqs = mCpuScalingPolicies.getFrequencies(policies[i]);
+            // We need to initialize the KernelCpuSpeedReaders to read from
+            // the first cpu of each core. Once we have the CpuScalingPolicy, we have access to this
+            // information.
+            mKernelCpuSpeedReaders[i] = new KernelCpuSpeedReader(cpus[0], freqs.length);
         }
 
         // Initialize CPU power bracket map, which combines CPU states (cluster/freq pairs)
         // into a small number of brackets
-        mCpuPowerBracketMap = new int[totalSpeedStepCount];
+        mCpuPowerBracketMap = new int[mCpuScalingPolicies.getScalingStepCount()];
         int index = 0;
-        int numCpuClusters = mPowerProfile.getNumCpuClusters();
-        for (int cluster = 0; cluster < numCpuClusters; cluster++) {
-            int steps = mPowerProfile.getNumSpeedStepsInCpuCluster(cluster);
+        for (int policy : policies) {
+            int steps = mCpuScalingPolicies.getFrequencies(policy).length;
             for (int step = 0; step < steps; step++) {
                 mCpuPowerBracketMap[index++] =
-                        mPowerProfile.getPowerBracketForCpuCore(cluster, step);
+                        mPowerProfile.getCpuPowerBracketForScalingStep(policy, step);
             }
         }
 
@@ -11042,7 +11079,7 @@
         mCpuUsageDetails.cpuUsageMs = new long[cpuPowerBracketCount];
         for (int i = 0; i < cpuPowerBracketCount; i++) {
             mCpuUsageDetails.cpuBracketDescriptions[i] =
-                    mPowerProfile.getCpuPowerBracketDescription(i);
+                    mPowerProfile.getCpuPowerBracketDescription(mCpuScalingPolicies, i);
         }
 
         if (mEstimatedBatteryCapacityMah == -1) {
@@ -11583,6 +11620,7 @@
         for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
             mPhoneDataConnectionsTimer[i].reset(false, elapsedRealtimeUs);
         }
+        mNrNsaTimer.reset(false, elapsedRealtimeUs);
         for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
             mNetworkByteActivityCounters[i].reset(false, elapsedRealtimeUs);
             mNetworkPacketActivityCounters[i].reset(false, elapsedRealtimeUs);
@@ -12164,7 +12202,8 @@
         if (DEBUG_ENERGY) {
             Slog.d(TAG, "Updating mobile radio stats with " + activityInfo);
         }
-        ModemActivityInfo deltaInfo = mLastModemActivityInfo == null ? activityInfo
+        ModemActivityInfo deltaInfo = mLastModemActivityInfo == null
+                ? (activityInfo == null ? null : activityInfo.getDelta(activityInfo))
                 : mLastModemActivityInfo.getDelta(activityInfo);
         mLastModemActivityInfo = activityInfo;
 
@@ -13398,6 +13437,10 @@
      * Read and distribute kernel wake lock use across apps.
      */
     public void updateKernelWakelocksLocked(long elapsedRealtimeUs) {
+        if (mKernelWakelockReader == null) {
+            return;
+        }
+
         final KernelWakelockStats wakelockStats = mKernelWakelockReader.readKernelWakelockStats(
                 mTmpWakelockStats);
         if (wakelockStats == null) {
@@ -13416,8 +13459,8 @@
                 mKernelWakelockStats.put(name, kwlt);
             }
 
-            kwlt.update(kws.mTotalTime, kws.mCount, elapsedRealtimeUs);
-            kwlt.setUpdateVersion(kws.mVersion);
+            kwlt.update(kws.totalTimeUs, kws.activeTimeUs, kws.count, elapsedRealtimeUs);
+            kwlt.setUpdateVersion(kws.version);
         }
 
         int numWakelocksSetStale = 0;
@@ -13471,7 +13514,7 @@
                 Slog.d(TAG, String.format("Added entry %d and updated timer to: "
                         + "mUnpluggedReportedTotalTimeUs %d size %d", bandwidthEntries.keyAt(i),
                         mKernelMemoryStats.get(
-                                bandwidthEntries.keyAt(i)).mUnpluggedReportedTotalTimeUs,
+                                bandwidthEntries.keyAt(i)).mBaseReportedTotalTimeUs,
                         mKernelMemoryStats.size()));
             }
         }
@@ -13554,18 +13597,10 @@
     @GuardedBy("this")
     public void updateCpuTimeLocked(boolean onBattery, boolean onBatteryScreenOff,
             long[] cpuClusterChargeUC) {
-        if (mPowerProfile == null) {
-            return;
-        }
-
         if (DEBUG_ENERGY_CPU) {
             Slog.d(TAG, "!Cpu updating!");
         }
 
-        if (mCpuFreqs == null) {
-            mCpuFreqs = mCpuUidFreqTimeReader.readFreqs(mPowerProfile);
-        }
-
         // Calculate the wakelocks we have to distribute amongst. The system is excluded as it is
         // usually holding the wakelock on behalf of an app.
         // And Only distribute cpu power to wakelocks if the screen is off and we're on battery.
@@ -13597,31 +13632,37 @@
                 mCpuUidClusterTimeReader.readDelta(false, null);
                 mNumAllUidCpuTimeReads += 2;
             }
-            for (int cluster = mKernelCpuSpeedReaders.length - 1; cluster >= 0; --cluster) {
-                mKernelCpuSpeedReaders[cluster].readDelta();
+            for (int i = mKernelCpuSpeedReaders.length - 1; i >= 0; --i) {
+                if (mKernelCpuSpeedReaders[i] != null) {
+                    mKernelCpuSpeedReaders[i].readDelta();
+                }
             }
             mSystemServerCpuThreadReader.readDelta();
             return;
         }
 
         mUserInfoProvider.refreshUserIds();
-        final SparseLongArray updatedUids = mCpuUidFreqTimeReader.perClusterTimesAvailable()
+        final SparseLongArray updatedUids = mCpuUidFreqTimeReader.allUidTimesAvailable()
                 ? null : new SparseLongArray();
 
         final CpuDeltaPowerAccumulator powerAccumulator;
         if (mGlobalEnergyConsumerStats != null
                 && mGlobalEnergyConsumerStats.isStandardBucketSupported(
-                EnergyConsumerStats.POWER_BUCKET_CPU) && mCpuPowerCalculator != null) {
+                EnergyConsumerStats.POWER_BUCKET_CPU)) {
             if (cpuClusterChargeUC == null) {
                 Slog.wtf(TAG,
                         "POWER_BUCKET_CPU supported but no EnergyConsumer Cpu Cluster charge "
                                 + "reported on updateCpuTimeLocked!");
                 powerAccumulator = null;
             } else {
+                if (mCpuPowerCalculator == null) {
+                    mCpuPowerCalculator = new CpuPowerCalculator(mCpuScalingPolicies,
+                            mPowerProfile);
+                }
                 // Cpu EnergyConsumer is supported, create an object to accumulate the estimated
                 // charge consumption since the last cpu update
-                final int numClusters = mPowerProfile.getNumCpuClusters();
-                powerAccumulator = new CpuDeltaPowerAccumulator(mCpuPowerCalculator, numClusters);
+                powerAccumulator = new CpuDeltaPowerAccumulator(mCpuPowerCalculator,
+                        mCpuScalingPolicies.getPolicies().length);
             }
         } else {
             powerAccumulator = null;
@@ -13679,15 +13720,14 @@
         if (DEBUG_BINDER_STATS) {
             Slog.d(TAG, "System server threads per CPU cluster (incoming binder threads)");
             long binderThreadTimeMs = 0;
-            int cpuIndex = 0;
             final long[] binderThreadCpuTimesUs = mBinderThreadCpuTimesUs.getCountsLocked(
                     BatteryStats.STATS_SINCE_CHARGED);
             int index = 0;
-            int numCpuClusters = mPowerProfile.getNumCpuClusters();
-            for (int cluster = 0; cluster < numCpuClusters; cluster++) {
+            int[] policies = mCpuScalingPolicies.getPolicies();
+            for (int policy : policies) {
                 StringBuilder sb = new StringBuilder();
-                sb.append("cpu").append(cpuIndex).append(": [");
-                int numSpeeds = mPowerProfile.getNumSpeedStepsInCpuCluster(cluster);
+                sb.append("policy").append(policy).append(": [");
+                int numSpeeds = mCpuScalingPolicies.getFrequencies(policy).length;
                 for (int speed = 0; speed < numSpeeds; speed++) {
                     if (speed != 0) {
                         sb.append(", ");
@@ -13698,7 +13738,6 @@
                     binderThreadTimeMs += binderCountMs;
                     index++;
                 }
-                cpuIndex += mPowerProfile.getNumCoresInCpuCluster(cluster);
                 Slog.d(TAG, sb.toString());
             }
         }
@@ -13749,10 +13788,12 @@
         // Read the time spent for each cluster at various cpu frequencies.
         final long[][] clusterSpeedTimesMs = new long[mKernelCpuSpeedReaders.length][];
         for (int cluster = 0; cluster < mKernelCpuSpeedReaders.length; cluster++) {
-            clusterSpeedTimesMs[cluster] = mKernelCpuSpeedReaders[cluster].readDelta();
-            if (clusterSpeedTimesMs[cluster] != null) {
-                for (int speed = clusterSpeedTimesMs[cluster].length - 1; speed >= 0; --speed) {
-                    totalCpuClustersTimeMs += clusterSpeedTimesMs[cluster][speed];
+            if (mKernelCpuSpeedReaders[cluster] != null) {
+                clusterSpeedTimesMs[cluster] = mKernelCpuSpeedReaders[cluster].readDelta();
+                if (clusterSpeedTimesMs[cluster] != null) {
+                    for (int speed = clusterSpeedTimesMs[cluster].length - 1; speed >= 0; --speed) {
+                        totalCpuClustersTimeMs += clusterSpeedTimesMs[cluster][speed];
+                    }
                 }
             }
         }
@@ -13767,13 +13808,13 @@
                 final Uid u = getUidStatsLocked(updatedUids.keyAt(i), elapsedRealtimeMs, uptimeMs);
                 final long appCpuTimeUs = updatedUids.valueAt(i);
                 // Add the cpu speeds to this UID.
-                final int numClusters = mPowerProfile.getNumCpuClusters();
+                int[] policies = mCpuScalingPolicies.getPolicies();
                 if (u.mCpuClusterSpeedTimesUs == null ||
-                        u.mCpuClusterSpeedTimesUs.length != numClusters) {
-                    u.mCpuClusterSpeedTimesUs = new LongSamplingCounter[numClusters][];
+                        u.mCpuClusterSpeedTimesUs.length != policies.length) {
+                    u.mCpuClusterSpeedTimesUs = new LongSamplingCounter[policies.length][];
                 }
 
-                for (int cluster = 0; cluster < clusterSpeedTimesMs.length; cluster++) {
+                for (int cluster = 0; cluster < policies.length; cluster++) {
                     final int speedsInCluster = clusterSpeedTimesMs[cluster].length;
                     if (u.mCpuClusterSpeedTimesUs[cluster] == null || speedsInCluster !=
                             u.mCpuClusterSpeedTimesUs[cluster].length) {
@@ -13929,7 +13970,8 @@
         final boolean perClusterTimesAvailable =
                 mCpuUidFreqTimeReader.perClusterTimesAvailable();
         final int numWakelocks = partialTimers == null ? 0 : partialTimers.size();
-        final int numClusters = mPowerProfile.getNumCpuClusters();
+        final int[] policies = mCpuScalingPolicies.getPolicies();
+        final int numClusters = policies.length;
         mWakeLockAllocationsUs = null;
         final long startTimeMs = mClock.uptimeMillis();
         final long elapsedRealtimeMs = mClock.elapsedRealtime();
@@ -13970,19 +14012,18 @@
                 }
 
                 int freqIndex = 0;
-                for (int cluster = 0; cluster < numClusters; ++cluster) {
-                    final int speedsInCluster = mPowerProfile.getNumSpeedStepsInCpuCluster(cluster);
+                for (int cluster = 0; cluster < numClusters; cluster++) {
+                    final int[] freqs = mCpuScalingPolicies.getFrequencies(policies[cluster]);
                     if (u.mCpuClusterSpeedTimesUs[cluster] == null ||
-                            u.mCpuClusterSpeedTimesUs[cluster].length != speedsInCluster) {
+                            u.mCpuClusterSpeedTimesUs[cluster].length != freqs.length) {
                         detachIfNotNull(u.mCpuClusterSpeedTimesUs[cluster]);
-                        u.mCpuClusterSpeedTimesUs[cluster]
-                                = new LongSamplingCounter[speedsInCluster];
+                        u.mCpuClusterSpeedTimesUs[cluster] = new LongSamplingCounter[freqs.length];
                     }
                     if (numWakelocks > 0 && mWakeLockAllocationsUs[cluster] == null) {
-                        mWakeLockAllocationsUs[cluster] = new long[speedsInCluster];
+                        mWakeLockAllocationsUs[cluster] = new long[freqs.length];
                     }
                     final LongSamplingCounter[] cpuTimesUs = u.mCpuClusterSpeedTimesUs[cluster];
-                    for (int speed = 0; speed < speedsInCluster; ++speed) {
+                    for (int speed = 0; speed < freqs.length; ++speed) {
                         if (cpuTimesUs[speed] == null) {
                             cpuTimesUs[speed] = new LongSamplingCounter(mOnBatteryTimeBase);
                         }
@@ -14022,7 +14063,8 @@
                 }
 
                 for (int cluster = 0; cluster < numClusters; ++cluster) {
-                    final int speedsInCluster = mPowerProfile.getNumSpeedStepsInCpuCluster(cluster);
+                    final int speedsInCluster =
+                            mCpuScalingPolicies.getFrequencies(policies[cluster]).length;
                     if (u.mCpuClusterSpeedTimesUs[cluster] == null ||
                             u.mCpuClusterSpeedTimesUs[cluster].length != speedsInCluster) {
                         detachIfNotNull(u.mCpuClusterSpeedTimesUs[cluster]);
@@ -14152,6 +14194,9 @@
      * Notifies BatteryStatsImpl that the system server is ready.
      */
     public void onSystemReady() {
+        if (mCpuUidFreqTimeReader != null) {
+            mCpuUidFreqTimeReader.onSystemReady();
+        }
         mSystemReady = true;
     }
 
@@ -15222,9 +15267,6 @@
             if (supportedStandardBuckets[EnergyConsumerStats.POWER_BUCKET_BLUETOOTH]) {
                 mBluetoothPowerCalculator = new BluetoothPowerCalculator(mPowerProfile);
             }
-            if (supportedStandardBuckets[EnergyConsumerStats.POWER_BUCKET_CPU]) {
-                mCpuPowerCalculator = new CpuPowerCalculator(mPowerProfile);
-            }
             if (supportedStandardBuckets[EnergyConsumerStats.POWER_BUCKET_MOBILE_RADIO]) {
                 mMobileRadioPowerCalculator = new MobileRadioPowerCalculator(mPowerProfile);
             }
@@ -15612,7 +15654,7 @@
             pw.print("    ");
             pw.print(bracket);
             pw.print(": ");
-            pw.println(mPowerProfile.getCpuPowerBracketDescription(bracket));
+            pw.println(mPowerProfile.getCpuPowerBracketDescription(mCpuScalingPolicies, bracket));
         }
     }
 
@@ -15893,6 +15935,7 @@
         for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
             mPhoneDataConnectionsTimer[i].readSummaryFromParcelLocked(in);
         }
+        mNrNsaTimer.readSummaryFromParcelLocked(in);
         for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
             mNetworkByteActivityCounters[i].readSummaryFromParcelLocked(in);
             mNetworkPacketActivityCounters[i].readSummaryFromParcelLocked(in);
@@ -16103,7 +16146,9 @@
 
             if (in.readInt() != 0) {
                 final int numClusters = in.readInt();
-                if (mPowerProfile != null && mPowerProfile.getNumCpuClusters() != numClusters) {
+                int[] policies =
+                        mCpuScalingPolicies != null ? mCpuScalingPolicies.getPolicies() : null;
+                if (policies != null && policies.length != numClusters) {
                     throw new ParcelFormatException("Incompatible cpu cluster arrangement");
                 }
                 detachIfNotNull(u.mCpuClusterSpeedTimesUs);
@@ -16111,8 +16156,9 @@
                 for (int cluster = 0; cluster < numClusters; cluster++) {
                     if (in.readInt() != 0) {
                         final int NSB = in.readInt();
-                        if (mPowerProfile != null &&
-                                mPowerProfile.getNumSpeedStepsInCpuCluster(cluster) != NSB) {
+                        if (policies != null
+                                && mCpuScalingPolicies.getFrequencies(policies[cluster]).length
+                                != NSB) {
                             throw new ParcelFormatException("File corrupt: too many speed bins " +
                                     NSB);
                         }
@@ -16157,7 +16203,7 @@
                 detachIfNotNull(u.mProcStateTimeMs);
                 u.mProcStateTimeMs = TimeInFreqMultiStateCounter.readFromParcel(in,
                         mOnBatteryTimeBase, PROC_STATE_TIME_COUNTER_STATE_COUNT,
-                        getCpuFreqCount(), mClock.elapsedRealtime());
+                        mCpuScalingPolicies.getScalingStepCount(), mClock.elapsedRealtime());
             }
 
             detachIfNotNull(u.mProcStateScreenOffTimeMs);
@@ -16168,7 +16214,7 @@
                 detachIfNotNull(u.mProcStateScreenOffTimeMs);
                 u.mProcStateScreenOffTimeMs = TimeInFreqMultiStateCounter.readFromParcel(in,
                         mOnBatteryScreenOffTimeBase, PROC_STATE_TIME_COUNTER_STATE_COUNT,
-                        getCpuFreqCount(), mClock.elapsedRealtime());
+                        mCpuScalingPolicies.getScalingStepCount(), mClock.elapsedRealtime());
             }
 
             if (in.readInt() != 0) {
@@ -16393,6 +16439,7 @@
         for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
             mPhoneDataConnectionsTimer[i].writeSummaryFromParcelLocked(out, nowRealtime);
         }
+        mNrNsaTimer.writeSummaryFromParcelLocked(out, nowRealtime);
         for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
             mNetworkByteActivityCounters[i].writeSummaryFromParcelLocked(out);
             mNetworkPacketActivityCounters[i].writeSummaryFromParcelLocked(out);
diff --git a/services/core/java/com/android/server/power/stats/BatteryUsageStatsProvider.java b/services/core/java/com/android/server/power/stats/BatteryUsageStatsProvider.java
index ebd4aec..3a32733 100644
--- a/services/core/java/com/android/server/power/stats/BatteryUsageStatsProvider.java
+++ b/services/core/java/com/android/server/power/stats/BatteryUsageStatsProvider.java
@@ -31,6 +31,7 @@
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.os.CpuScalingPolicies;
 import com.android.internal.os.PowerProfile;
 
 import java.util.ArrayList;
@@ -47,6 +48,7 @@
     private final BatteryStats mStats;
     private final BatteryUsageStatsStore mBatteryUsageStatsStore;
     private final PowerProfile mPowerProfile;
+    private final CpuScalingPolicies mCpuScalingPolicies;
     private final Object mLock = new Object();
     private List<PowerCalculator> mPowerCalculators;
 
@@ -63,6 +65,7 @@
         mPowerProfile = stats instanceof BatteryStatsImpl
                 ? ((BatteryStatsImpl) stats).getPowerProfile()
                 : new PowerProfile(context);
+        mCpuScalingPolicies = stats.getCpuScalingPolicies();
     }
 
     private List<PowerCalculator> getPowerCalculators() {
@@ -72,7 +75,7 @@
 
                 // Power calculators are applied in the order of registration
                 mPowerCalculators.add(new BatteryChargeCalculator());
-                mPowerCalculators.add(new CpuPowerCalculator(mPowerProfile));
+                mPowerCalculators.add(new CpuPowerCalculator(mCpuScalingPolicies, mPowerProfile));
                 mPowerCalculators.add(new MemoryPowerCalculator(mPowerProfile));
                 mPowerCalculators.add(new WakelockPowerCalculator(mPowerProfile));
                 if (!BatteryStats.checkWifiOnly(mContext)) {
@@ -97,7 +100,8 @@
                 // It is important that SystemServicePowerCalculator be applied last,
                 // because it re-attributes some of the power estimated by the other
                 // calculators.
-                mPowerCalculators.add(new SystemServicePowerCalculator(mPowerProfile));
+                mPowerCalculators.add(
+                        new SystemServicePowerCalculator(mCpuScalingPolicies, mPowerProfile));
             }
         }
         return mPowerCalculators;
diff --git a/services/core/java/com/android/server/power/stats/CpuPowerCalculator.java b/services/core/java/com/android/server/power/stats/CpuPowerCalculator.java
index 5074838..ce8680f 100644
--- a/services/core/java/com/android/server/power/stats/CpuPowerCalculator.java
+++ b/services/core/java/com/android/server/power/stats/CpuPowerCalculator.java
@@ -24,6 +24,7 @@
 import android.util.Log;
 import android.util.SparseArray;
 
+import com.android.internal.os.CpuScalingPolicies;
 import com.android.internal.os.PowerProfile;
 
 import java.util.Arrays;
@@ -32,6 +33,8 @@
     private static final String TAG = "CpuPowerCalculator";
     private static final boolean DEBUG = PowerCalculator.DEBUG;
     private static final BatteryConsumer.Key[] UNINITIALIZED_KEYS = new BatteryConsumer.Key[0];
+
+    private final CpuScalingPolicies mCpuScalingPolicies;
     private final int mNumCpuClusters;
 
     // Time-in-state based CPU power estimation model computes the estimated power
@@ -59,34 +62,33 @@
         public long[] cpuFreqTimes;
     }
 
-    public CpuPowerCalculator(PowerProfile profile) {
-        mNumCpuClusters = profile.getNumCpuClusters();
+    public CpuPowerCalculator(CpuScalingPolicies cpuScalingPolicies, PowerProfile profile) {
+        mCpuScalingPolicies = cpuScalingPolicies;
+        int[] policies = mCpuScalingPolicies.getPolicies();
+        mNumCpuClusters = policies.length;
 
         mCpuActivePowerEstimator = new UsageBasedPowerEstimator(
                 profile.getAveragePower(PowerProfile.POWER_CPU_ACTIVE));
 
-        mPerClusterPowerEstimators = new UsageBasedPowerEstimator[mNumCpuClusters];
-        for (int cluster = 0; cluster < mNumCpuClusters; cluster++) {
-            mPerClusterPowerEstimators[cluster] = new UsageBasedPowerEstimator(
-                    profile.getAveragePowerForCpuCluster(cluster));
+        mPerClusterPowerEstimators = new UsageBasedPowerEstimator[policies.length];
+        for (int i = 0; i < policies.length; i++) {
+            mPerClusterPowerEstimators[i] = new UsageBasedPowerEstimator(
+                    profile.getAveragePowerForCpuScalingPolicy(policies[i]));
         }
 
-        int freqCount = 0;
-        for (int cluster = 0; cluster < mNumCpuClusters; cluster++) {
-            freqCount += profile.getNumSpeedStepsInCpuCluster(cluster);
-        }
-
+        mPerCpuFreqPowerEstimators =
+                new UsageBasedPowerEstimator[cpuScalingPolicies.getScalingStepCount()];
         mPerCpuFreqPowerEstimatorsByCluster = new UsageBasedPowerEstimator[mNumCpuClusters][];
-        mPerCpuFreqPowerEstimators = new UsageBasedPowerEstimator[freqCount];
         int index = 0;
-        for (int cluster = 0; cluster < mNumCpuClusters; cluster++) {
-            final int speedsForCluster = profile.getNumSpeedStepsInCpuCluster(cluster);
+        for (int cluster = 0; cluster < policies.length; cluster++) {
+            int policy = policies[cluster];
+            int[] freqs = cpuScalingPolicies.getFrequencies(policy);
             mPerCpuFreqPowerEstimatorsByCluster[cluster] =
-                    new UsageBasedPowerEstimator[speedsForCluster];
-            for (int speed = 0; speed < speedsForCluster; speed++) {
+                    new UsageBasedPowerEstimator[freqs.length];
+            for (int step = 0; step < freqs.length; step++) {
                 final UsageBasedPowerEstimator estimator = new UsageBasedPowerEstimator(
-                        profile.getAveragePowerForCpuCore(cluster, speed));
-                mPerCpuFreqPowerEstimatorsByCluster[cluster][speed] = estimator;
+                        profile.getAveragePowerForCpuScalingStep(policy, step));
+                mPerCpuFreqPowerEstimatorsByCluster[cluster][step] = estimator;
                 mPerCpuFreqPowerEstimators[index++] = estimator;
             }
         }
@@ -105,7 +107,7 @@
         BatteryConsumer.Key[] keys = UNINITIALIZED_KEYS;
         Result result = new Result();
         if (query.isProcessStateDataNeeded()) {
-            result.cpuFreqTimes = new long[batteryStats.getCpuFreqCount()];
+            result.cpuFreqTimes = new long[mCpuScalingPolicies.getScalingStepCount()];
         }
         final SparseArray<UidBatteryConsumer.Builder> uidBatteryConsumerBuilders =
                 builder.getUidBatteryConsumerBuilders();
@@ -333,7 +335,7 @@
      * @param durationsMs duration of CPU usage.
      * @return a double in milliamp-hours of estimated active CPU power consumption.
      */
-    public double calculateActiveCpuPowerMah(long durationsMs) {
+    private double calculateActiveCpuPowerMah(long durationsMs) {
         return mCpuActivePowerEstimator.calculatePower(durationsMs);
     }
 
diff --git a/services/core/java/com/android/server/power/stats/KernelWakelockReader.java b/services/core/java/com/android/server/power/stats/KernelWakelockReader.java
index 0377d8a..3fffcf7 100644
--- a/services/core/java/com/android/server/power/stats/KernelWakelockReader.java
+++ b/services/core/java/com/android/server/power/stats/KernelWakelockReader.java
@@ -42,30 +42,31 @@
     private static final String sWakeupSourceFile = "/d/wakeup_sources";
     private static final String sSysClassWakeupDir = "/sys/class/wakeup";
 
-    private static final int[] PROC_WAKELOCKS_FORMAT = new int[] {
-        Process.PROC_TAB_TERM|Process.PROC_OUT_STRING|                // 0: name
-                              Process.PROC_QUOTES,
-        Process.PROC_TAB_TERM|Process.PROC_OUT_LONG,                  // 1: count
-        Process.PROC_TAB_TERM,
-        Process.PROC_TAB_TERM,
-        Process.PROC_TAB_TERM,
-        Process.PROC_TAB_TERM|Process.PROC_OUT_LONG,                  // 5: totalTime
+    private static final int[] PROC_WAKELOCKS_FORMAT = new int[]{
+            Process.PROC_TAB_TERM | Process.PROC_OUT_STRING                 // 0: name
+                    | Process.PROC_QUOTES,
+            Process.PROC_TAB_TERM | Process.PROC_OUT_LONG,                  // 1: count
+            Process.PROC_TAB_TERM,
+            Process.PROC_TAB_TERM | Process.PROC_OUT_LONG,                  // 3: activeSince
+            Process.PROC_TAB_TERM,
+            Process.PROC_TAB_TERM | Process.PROC_OUT_LONG,                  // 5: totalTime
     };
 
-    private static final int[] WAKEUP_SOURCES_FORMAT = new int[] {
-        Process.PROC_TAB_TERM|Process.PROC_OUT_STRING,                // 0: name
-        Process.PROC_TAB_TERM|Process.PROC_COMBINE|
-                              Process.PROC_OUT_LONG,                  // 1: count
-        Process.PROC_TAB_TERM|Process.PROC_COMBINE,
-        Process.PROC_TAB_TERM|Process.PROC_COMBINE,
-        Process.PROC_TAB_TERM|Process.PROC_COMBINE,
-        Process.PROC_TAB_TERM|Process.PROC_COMBINE,
-        Process.PROC_TAB_TERM|Process.PROC_COMBINE
-                             |Process.PROC_OUT_LONG,                  // 6: totalTime
+    private static final int[] WAKEUP_SOURCES_FORMAT = new int[]{
+            Process.PROC_TAB_TERM | Process.PROC_OUT_STRING,                // 0: name
+            Process.PROC_TAB_TERM | Process.PROC_COMBINE
+                    | Process.PROC_OUT_LONG,                                // 1: count
+            Process.PROC_TAB_TERM | Process.PROC_COMBINE,
+            Process.PROC_TAB_TERM | Process.PROC_COMBINE,
+            Process.PROC_TAB_TERM | Process.PROC_COMBINE,
+            Process.PROC_TAB_TERM | Process.PROC_COMBINE
+                    | Process.PROC_OUT_LONG,                                // 5: activeSince
+            Process.PROC_TAB_TERM | Process.PROC_COMBINE
+                    | Process.PROC_OUT_LONG,                                // 6: totalTime
     };
 
     private final String[] mProcWakelocksName = new String[3];
-    private final long[] mProcWakelocksData = new long[3];
+    private final long[] mProcWakelocksData = new long[4];
     private ISuspendControlServiceInternal mSuspendControlService = null;
     private byte[] mKernelWakelockBuffer = new byte[32 * 1024];
 
@@ -74,7 +75,7 @@
      * @param staleStats Existing object to update.
      * @return the updated data.
      */
-    public final KernelWakelockStats readKernelWakelockStats(KernelWakelockStats staleStats) {
+    public KernelWakelockStats readKernelWakelockStats(KernelWakelockStats staleStats) {
         boolean useSystemSuspend = (new File(sSysClassWakeupDir)).exists();
 
         if (useSystemSuspend) {
@@ -180,14 +181,16 @@
      */
     private KernelWakelockStats getWakelockStatsFromSystemSuspend(
             final KernelWakelockStats staleStats) {
-        WakeLockInfo[] wlStats = null;
-        try {
-            mSuspendControlService = waitForSuspendControlService();
-        } catch (ServiceNotFoundException e) {
-            Slog.wtf(TAG, "Required service suspend_control not available", e);
-            return null;
+        if (mSuspendControlService == null) {
+            try {
+                mSuspendControlService = waitForSuspendControlService();
+            } catch (ServiceNotFoundException e) {
+                Slog.wtf(TAG, "Required service suspend_control not available", e);
+                return null;
+            }
         }
 
+        WakeLockInfo[] wlStats;
         try {
             wlStats = mSuspendControlService.getWakeLockStats();
             updateWakelockStats(wlStats, staleStats);
@@ -210,13 +213,16 @@
         for (WakeLockInfo info : wlStats) {
             if (!staleStats.containsKey(info.name)) {
                 staleStats.put(info.name, new KernelWakelockStats.Entry((int) info.activeCount,
-                        info.totalTime * 1000 /* ms to us */, sKernelWakelockUpdateVersion));
+                        info.totalTime * 1000 /* ms to us */,
+                        info.isActive ? info.activeTime * 1000 : 0,
+                        sKernelWakelockUpdateVersion));
             } else {
                 KernelWakelockStats.Entry kwlStats = staleStats.get(info.name);
-                kwlStats.mCount = (int) info.activeCount;
+                kwlStats.count = (int) info.activeCount;
                 // Convert milliseconds to microseconds
-                kwlStats.mTotalTime = info.totalTime * 1000;
-                kwlStats.mVersion = sKernelWakelockUpdateVersion;
+                kwlStats.totalTimeUs = info.totalTime * 1000;
+                kwlStats.activeTimeUs = info.isActive ? info.activeTime * 1000 : 0;
+                kwlStats.version = sKernelWakelockUpdateVersion;
             }
         }
 
@@ -232,6 +238,7 @@
         String name;
         int count;
         long totalTime;
+        long activeTime;
         int startIndex;
         int endIndex;
 
@@ -268,26 +275,30 @@
                 count = (int) wlData[1];
 
                 if (wakeup_sources) {
-                        // convert milliseconds to microseconds
-                        totalTime = wlData[2] * 1000;
+                    // convert milliseconds to microseconds
+                    activeTime = wlData[2] * 1000;
+                    totalTime = wlData[3] * 1000;
                 } else {
-                        // convert nanoseconds to microseconds with rounding.
-                        totalTime = (wlData[2] + 500) / 1000;
+                    // convert nanoseconds to microseconds with rounding.
+                    activeTime = (wlData[2] + 500) / 1000;
+                    totalTime = (wlData[3] + 500) / 1000;
                 }
 
                 if (parsed && name.length() > 0) {
                     if (!staleStats.containsKey(name)) {
                         staleStats.put(name, new KernelWakelockStats.Entry(count, totalTime,
-                                sKernelWakelockUpdateVersion));
+                                activeTime, sKernelWakelockUpdateVersion));
                     } else {
                         KernelWakelockStats.Entry kwlStats = staleStats.get(name);
-                        if (kwlStats.mVersion == sKernelWakelockUpdateVersion) {
-                            kwlStats.mCount += count;
-                            kwlStats.mTotalTime += totalTime;
+                        if (kwlStats.version == sKernelWakelockUpdateVersion) {
+                            kwlStats.count += count;
+                            kwlStats.totalTimeUs += totalTime;
+                            kwlStats.activeTimeUs = activeTime;
                         } else {
-                            kwlStats.mCount = count;
-                            kwlStats.mTotalTime = totalTime;
-                            kwlStats.mVersion = sKernelWakelockUpdateVersion;
+                            kwlStats.count = count;
+                            kwlStats.totalTimeUs = totalTime;
+                            kwlStats.activeTimeUs = activeTime;
+                            kwlStats.version = sKernelWakelockUpdateVersion;
                         }
                     }
                 } else if (!parsed) {
@@ -326,7 +337,7 @@
     public KernelWakelockStats removeOldStats(final KernelWakelockStats staleStats) {
         Iterator<KernelWakelockStats.Entry> itr = staleStats.values().iterator();
         while (itr.hasNext()) {
-            if (itr.next().mVersion != sKernelWakelockUpdateVersion) {
+            if (itr.next().version != sKernelWakelockUpdateVersion) {
                 itr.remove();
             }
         }
diff --git a/services/core/java/com/android/server/power/stats/KernelWakelockStats.java b/services/core/java/com/android/server/power/stats/KernelWakelockStats.java
index 502b7a0..3ed3803 100644
--- a/services/core/java/com/android/server/power/stats/KernelWakelockStats.java
+++ b/services/core/java/com/android/server/power/stats/KernelWakelockStats.java
@@ -22,14 +22,16 @@
  */
 public class KernelWakelockStats extends HashMap<String, KernelWakelockStats.Entry> {
     public static class Entry {
-        public int mCount;
-        public long mTotalTime;
-        public int mVersion;
+        public int count;
+        public long totalTimeUs;
+        public long activeTimeUs;
+        public int version;
 
-        Entry(int count, long totalTime, int version) {
-            mCount = count;
-            mTotalTime = totalTime;
-            mVersion = version;
+        Entry(int count, long totalTimeUs, long activeTimeUs, int version) {
+            this.count = count;
+            this.totalTimeUs = totalTimeUs;
+            this.activeTimeUs = activeTimeUs;
+            this.version = version;
         }
     }
 
diff --git a/services/core/java/com/android/server/power/stats/SystemServicePowerCalculator.java b/services/core/java/com/android/server/power/stats/SystemServicePowerCalculator.java
index aa17d4fb..1d5d93e 100644
--- a/services/core/java/com/android/server/power/stats/SystemServicePowerCalculator.java
+++ b/services/core/java/com/android/server/power/stats/SystemServicePowerCalculator.java
@@ -25,6 +25,7 @@
 import android.util.Log;
 import android.util.SparseArray;
 
+import com.android.internal.os.CpuScalingPolicies;
 import com.android.internal.os.PowerProfile;
 
 /**
@@ -39,23 +40,19 @@
     // to this layout:
     // {cluster1-speed1, cluster1-speed2, ..., cluster2-speed1, cluster2-speed2, ...}
     private final UsageBasedPowerEstimator[] mPowerEstimators;
-    private final com.android.server.power.stats.CpuPowerCalculator mCpuPowerCalculator;
+    private final CpuPowerCalculator mCpuPowerCalculator;
 
-    public SystemServicePowerCalculator(PowerProfile powerProfile) {
-        mCpuPowerCalculator = new CpuPowerCalculator(powerProfile);
-        int numFreqs = 0;
-        final int numCpuClusters = powerProfile.getNumCpuClusters();
-        for (int cluster = 0; cluster < numCpuClusters; cluster++) {
-            numFreqs += powerProfile.getNumSpeedStepsInCpuCluster(cluster);
-        }
-
-        mPowerEstimators = new UsageBasedPowerEstimator[numFreqs];
+    public SystemServicePowerCalculator(CpuScalingPolicies cpuScalingPolicies,
+            PowerProfile powerProfile) {
+        mCpuPowerCalculator = new CpuPowerCalculator(cpuScalingPolicies, powerProfile);
+        mPowerEstimators = new UsageBasedPowerEstimator[cpuScalingPolicies.getScalingStepCount()];
         int index = 0;
-        for (int cluster = 0; cluster < numCpuClusters; cluster++) {
-            final int numSpeeds = powerProfile.getNumSpeedStepsInCpuCluster(cluster);
+        int[] policies = cpuScalingPolicies.getPolicies();
+        for (int policy : policies) {
+            final int numSpeeds = cpuScalingPolicies.getFrequencies(policy).length;
             for (int speed = 0; speed < numSpeeds; speed++) {
                 mPowerEstimators[index++] = new UsageBasedPowerEstimator(
-                        powerProfile.getAveragePowerForCpuCore(cluster, speed));
+                        powerProfile.getAveragePowerForCpuScalingStep(policy, speed));
             }
         }
     }
diff --git a/services/core/java/com/android/server/power/stats/flags.aconfig b/services/core/java/com/android/server/power/stats/flags.aconfig
new file mode 100644
index 0000000..d61bebc
--- /dev/null
+++ b/services/core/java/com/android/server/power/stats/flags.aconfig
@@ -0,0 +1,8 @@
+package: "com.android.server.power.optimization"
+
+flag {
+    name: "streamlined_battery_stats"
+    namespace: "power_optimization"
+    description: "Feature flag for streamlined battery stats"
+    bug: "285646152"
+}
diff --git a/services/core/java/com/android/server/power/stats/wakeups/CpuWakeupStats.java b/services/core/java/com/android/server/power/stats/wakeups/CpuWakeupStats.java
index 712a696..f047f56 100644
--- a/services/core/java/com/android/server/power/stats/wakeups/CpuWakeupStats.java
+++ b/services/core/java/com/android/server/power/stats/wakeups/CpuWakeupStats.java
@@ -32,12 +32,12 @@
 import android.os.UserHandle;
 import android.provider.DeviceConfig;
 import android.util.IndentingPrintWriter;
+import android.util.LongSparseArray;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
 import android.util.SparseLongArray;
-import android.util.TimeSparseArray;
 import android.util.TimeUtils;
 
 import com.android.internal.annotations.VisibleForTesting;
@@ -74,12 +74,12 @@
     private final WakingActivityHistory mRecentWakingActivity;
 
     @VisibleForTesting
-    final TimeSparseArray<Wakeup> mWakeupEvents = new TimeSparseArray<>();
+    final LongSparseArray<Wakeup> mWakeupEvents = new LongSparseArray<>();
 
     /* Maps timestamp -> {subsystem  -> {uid -> procState}} */
     @VisibleForTesting
-    final TimeSparseArray<SparseArray<SparseIntArray>> mWakeupAttribution =
-            new TimeSparseArray<>();
+    final LongSparseArray<SparseArray<SparseIntArray>> mWakeupAttribution =
+            new LongSparseArray<>();
 
     final SparseIntArray mUidProcStates = new SparseIntArray();
     private final SparseIntArray mReusableUidProcStates = new SparseIntArray(4);
@@ -218,11 +218,11 @@
         // the last wakeup and its attribution (if computed) is always stored, even if that wakeup
         // had occurred before retentionDuration.
         final long retentionDuration = mConfig.WAKEUP_STATS_RETENTION_MS;
-        int lastIdx = mWakeupEvents.closestIndexOnOrBefore(elapsedRealtime - retentionDuration);
+        int lastIdx = mWakeupEvents.lastIndexOnOrBefore(elapsedRealtime - retentionDuration);
         for (int i = lastIdx; i >= 0; i--) {
             mWakeupEvents.removeAt(i);
         }
-        lastIdx = mWakeupAttribution.closestIndexOnOrBefore(elapsedRealtime - retentionDuration);
+        lastIdx = mWakeupAttribution.lastIndexOnOrBefore(elapsedRealtime - retentionDuration);
         for (int i = lastIdx; i >= 0; i--) {
             mWakeupAttribution.removeAt(i);
         }
@@ -273,9 +273,9 @@
             SparseIntArray uidProcStates) {
         final long matchingWindowMillis = mConfig.WAKEUP_MATCHING_WINDOW_MS;
 
-        final int startIdx = mWakeupEvents.closestIndexOnOrAfter(
+        final int startIdx = mWakeupEvents.firstIndexOnOrAfter(
                 activityElapsed - matchingWindowMillis);
-        final int endIdx = mWakeupEvents.closestIndexOnOrBefore(
+        final int endIdx = mWakeupEvents.lastIndexOnOrBefore(
                 activityElapsed + matchingWindowMillis);
 
         for (int wakeupIdx = startIdx; wakeupIdx <= endIdx; wakeupIdx++) {
@@ -404,7 +404,7 @@
     static final class WakingActivityHistory {
         private LongSupplier mRetentionSupplier;
         @VisibleForTesting
-        final SparseArray<TimeSparseArray<SparseIntArray>> mWakingActivity = new SparseArray<>();
+        final SparseArray<LongSparseArray<SparseIntArray>> mWakingActivity = new SparseArray<>();
 
         WakingActivityHistory(LongSupplier retentionSupplier) {
             mRetentionSupplier = retentionSupplier;
@@ -414,9 +414,9 @@
             if (uidProcStates == null) {
                 return;
             }
-            TimeSparseArray<SparseIntArray> wakingActivity = mWakingActivity.get(subsystem);
+            LongSparseArray<SparseIntArray> wakingActivity = mWakingActivity.get(subsystem);
             if (wakingActivity == null) {
-                wakingActivity = new TimeSparseArray<>();
+                wakingActivity = new LongSparseArray<>();
                 mWakingActivity.put(subsystem, wakingActivity);
             }
             final SparseIntArray uidsToBlame = wakingActivity.get(elapsedRealtime);
@@ -435,7 +435,7 @@
             // Limit activity history per subsystem to the last retention period as supplied by
             // mRetentionSupplier. Note that the last activity is always present, even if it
             // occurred before the retention period.
-            final int endIdx = wakingActivity.closestIndexOnOrBefore(
+            final int endIdx = wakingActivity.lastIndexOnOrBefore(
                     elapsedRealtime - mRetentionSupplier.getAsLong());
             for (int i = endIdx; i >= 0; i--) {
                 wakingActivity.removeAt(i);
@@ -445,11 +445,11 @@
         SparseIntArray removeBetween(int subsystem, long startElapsed, long endElapsed) {
             final SparseIntArray uidsToReturn = new SparseIntArray();
 
-            final TimeSparseArray<SparseIntArray> activityForSubsystem =
+            final LongSparseArray<SparseIntArray> activityForSubsystem =
                     mWakingActivity.get(subsystem);
             if (activityForSubsystem != null) {
-                final int startIdx = activityForSubsystem.closestIndexOnOrAfter(startElapsed);
-                final int endIdx = activityForSubsystem.closestIndexOnOrBefore(endElapsed);
+                final int startIdx = activityForSubsystem.firstIndexOnOrAfter(startElapsed);
+                final int endIdx = activityForSubsystem.lastIndexOnOrBefore(endElapsed);
                 for (int i = endIdx; i >= startIdx; i--) {
                     final SparseIntArray uidsForTime = activityForSubsystem.valueAt(i);
                     for (int j = 0; j < uidsForTime.size(); j++) {
@@ -463,8 +463,8 @@
                     activityForSubsystem.removeAt(i);
                 }
                 // Generally waking activity is a high frequency occurrence for any subsystem, so we
-                // don't delete the TimeSparseArray even if it is now empty, to avoid object churn.
-                // This will leave one TimeSparseArray per subsystem, which are few right now.
+                // don't delete the LongSparseArray even if it is now empty, to avoid object churn.
+                // This will leave one LongSparseArray per subsystem, which are few right now.
             }
             return uidsToReturn.size() > 0 ? uidsToReturn : null;
         }
@@ -474,7 +474,7 @@
             pw.increaseIndent();
             for (int i = 0; i < mWakingActivity.size(); i++) {
                 pw.println("Subsystem " + subsystemToString(mWakingActivity.keyAt(i)) + ":");
-                final TimeSparseArray<SparseIntArray> wakingActivity = mWakingActivity.valueAt(i);
+                final LongSparseArray<SparseIntArray> wakingActivity = mWakingActivity.valueAt(i);
                 if (wakingActivity == null) {
                     continue;
                 }
diff --git a/services/core/java/com/android/server/powerstats/IntervalRandomNoiseGenerator.java b/services/core/java/com/android/server/powerstats/IntervalRandomNoiseGenerator.java
new file mode 100644
index 0000000..444f885
--- /dev/null
+++ b/services/core/java/com/android/server/powerstats/IntervalRandomNoiseGenerator.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.powerstats;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import org.apache.commons.math.MathException;
+import org.apache.commons.math.distribution.AbstractContinuousDistribution;
+import org.apache.commons.math.distribution.BetaDistributionImpl;
+
+import java.util.Arrays;
+
+/**
+ * Adds random noise to provided value, keeping it within the limits of a specified range.
+ * @hide
+ */
+public class IntervalRandomNoiseGenerator {
+    private static final int DISTRIBUTION_SAMPLE_SIZE = 17;
+
+    private final AbstractContinuousDistribution mDistribution;
+    private final double[] mSamples = new double[DISTRIBUTION_SAMPLE_SIZE];
+
+    private static final double UNINITIALIZED = -1;
+
+    /**
+     * Higher alpha makes the distribution more asymmetrical, tightening it
+     * closer to the high bound.  A value of alpha should be &gt; 1 to ensure
+     * that the samples closer to 1 appear more frequently t those closer
+     * to 0.
+     */
+    IntervalRandomNoiseGenerator(double alpha) {
+        if (alpha <= 1) {
+            throw new IllegalArgumentException("alpha should be > 1");
+        }
+        mDistribution = new BetaDistributionImpl(alpha, 1 /* beta */);
+        refresh();
+    }
+
+    @VisibleForTesting
+    void reseed(long seed) {
+        mDistribution.reseedRandomGenerator(seed);
+    }
+
+    /**
+     * Returns a random value between the specified bounds, statistically closer to the
+     * highProbabilityBound.
+     *
+     * The same value is returned for a given stickyKey until {@link #refresh()} is called.
+     */
+    long addNoise(long lowProbabilityBound, long highProbabilityBound, int stickyKey) {
+        double sample = mSamples[stickyKey % DISTRIBUTION_SAMPLE_SIZE];
+        if (sample < 0) {   // UNINITIALIZED
+            try {
+                sample = mDistribution.sample();
+            } catch (MathException e) {
+                throw new IllegalStateException(e);
+            }
+            mSamples[stickyKey % DISTRIBUTION_SAMPLE_SIZE] = sample;
+        }
+        return lowProbabilityBound + (long) ((highProbabilityBound - lowProbabilityBound) * sample);
+    }
+
+    /**
+     * Resets the cache of random samples.
+     */
+    void refresh() {
+        Arrays.fill(mSamples, UNINITIALIZED);
+    }
+}
diff --git a/services/core/java/com/android/server/powerstats/PowerStatsDataStorage.java b/services/core/java/com/android/server/powerstats/PowerStatsDataStorage.java
index d770792..d1d27f3 100644
--- a/services/core/java/com/android/server/powerstats/PowerStatsDataStorage.java
+++ b/services/core/java/com/android/server/powerstats/PowerStatsDataStorage.java
@@ -299,7 +299,7 @@
                         }
                     } catch (NumberFormatException nfe) {
                         Slog.e(TAG,
-                                "Failed to extract start time from file : " + fileName, nfe);
+                            "Failed to extract start time from file : " + fileName, nfe);
                     }
                 }
             }
diff --git a/services/core/java/com/android/server/powerstats/PowerStatsService.java b/services/core/java/com/android/server/powerstats/PowerStatsService.java
index ffc9a01..5609f69 100644
--- a/services/core/java/com/android/server/powerstats/PowerStatsService.java
+++ b/services/core/java/com/android/server/powerstats/PowerStatsService.java
@@ -16,28 +16,40 @@
 
 package com.android.server.powerstats;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
 import android.hardware.power.stats.Channel;
 import android.hardware.power.stats.EnergyConsumer;
 import android.hardware.power.stats.EnergyConsumerResult;
+import android.hardware.power.stats.EnergyConsumerType;
 import android.hardware.power.stats.EnergyMeasurement;
 import android.hardware.power.stats.PowerEntity;
 import android.hardware.power.stats.StateResidencyResult;
 import android.os.Binder;
+import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
+import android.os.HandlerExecutor;
 import android.os.HandlerThread;
+import android.os.IBinder;
+import android.os.IPowerStatsService;
 import android.os.Looper;
+import android.os.PowerMonitor;
+import android.os.PowerMonitorReadings;
+import android.os.ResultReceiver;
 import android.os.UserHandle;
 import android.power.PowerStatsInternal;
+import android.provider.DeviceConfig;
+import android.provider.DeviceConfigInterface;
 import android.util.IndentingPrintWriter;
+import android.util.Log;
 import android.util.Slog;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.os.Clock;
 import com.android.internal.util.DumpUtils;
-import com.android.internal.util.function.pooled.PooledLambda;
 import com.android.server.SystemService;
 import com.android.server.powerstats.PowerStatsHALWrapper.IPowerStatsHALWrapper;
 import com.android.server.powerstats.ProtoStreamUtils.ChannelUtils;
@@ -47,7 +59,11 @@
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Executor;
 
 /**
  * This class provides a system service that estimates system power usage
@@ -66,8 +82,19 @@
     private static final String METER_CACHE_FILENAME = "meterCache";
     private static final String MODEL_CACHE_FILENAME = "modelCache";
     private static final String RESIDENCY_CACHE_FILENAME = "residencyCache";
+    private static final long MAX_POWER_MONITOR_AGE_MILLIS = 30_000;
+
+    static final String KEY_POWER_MONITOR_API_ENABLED = "power_monitor_api_enabled";
+
+    // The alpha parameter of the Beta distribution used by the random noise generator.
+    // The higher this value, the smaller the amount of added noise.
+    private static final double INTERVAL_RANDOM_NOISE_GENERATION_ALPHA = 50;
+    private static final long MAX_RANDOM_NOISE_UWS = 10_000_000;
 
     private final Injector mInjector;
+    private final Clock mClock;
+    private final DeviceConfigInterface mDeviceConfig;
+    private final DeviceConfigListener mDeviceConfigListener = new DeviceConfigListener();
     private File mDataStoragePath;
 
     private Context mContext;
@@ -84,15 +111,23 @@
     @Nullable
     @GuardedBy("this")
     private Looper mLooper;
+    private Handler mHandler;
     @Nullable
     @GuardedBy("this")
     private EnergyConsumer[] mEnergyConsumers = null;
+    @Nullable
+    @GuardedBy("this")
+    private Channel[] mEnergyMeters = null;
 
     @VisibleForTesting
     static class Injector {
         @GuardedBy("this")
         private IPowerStatsHALWrapper mPowerStatsHALWrapper;
 
+        Clock getClock() {
+            return Clock.SYSTEM_CLOCK;
+        }
+
         File createDataStoragePath() {
             return new File(Environment.getDataSystemDeDirectory(UserHandle.USER_SYSTEM),
                 DATA_STORAGE_SUBDIR);
@@ -159,9 +194,30 @@
                 PowerStatsInternal powerStatsInternal) {
             return new StatsPullAtomCallbackImpl(context, powerStatsInternal);
         }
+
+        DeviceConfigInterface getDeviceConfig() {
+            return DeviceConfigInterface.REAL;
+        }
+
+        IntervalRandomNoiseGenerator createIntervalRandomNoiseGenerator() {
+            return new IntervalRandomNoiseGenerator(INTERVAL_RANDOM_NOISE_GENERATION_ALPHA);
+        }
     }
 
-    private final class BinderService extends Binder {
+    private final IBinder mService = new IPowerStatsService.Stub() {
+
+        @Override
+        public void getSupportedPowerMonitors(ResultReceiver resultReceiver) {
+            getHandler().post(() -> getSupportedPowerMonitorsImpl(resultReceiver));
+        }
+
+        @Override
+        public void getPowerMonitorReadings(int[] powerMonitorIds, ResultReceiver resultReceiver) {
+            int callingUid = Binder.getCallingUid();
+            getHandler().post(() ->
+                    getPowerMonitorReadingsImpl(powerMonitorIds, resultReceiver, callingUid));
+        }
+
         @Override
         protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
             if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
@@ -205,6 +261,20 @@
                 }
             }
         }
+    };
+
+    private class DeviceConfigListener implements DeviceConfig.OnPropertiesChangedListener {
+        public Executor mExecutor = new HandlerExecutor(getHandler());
+
+        void startListening() {
+            mDeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_BATTERY_STATS,
+                    mExecutor, this);
+        }
+
+        @Override
+        public void onPropertiesChanged(DeviceConfig.Properties properties) {
+            refreshFlags();
+        }
     }
 
     @Override
@@ -222,11 +292,13 @@
             mPowerStatsInternal = new LocalService();
             publishLocalService(PowerStatsInternal.class, mPowerStatsInternal);
         }
-        publishBinderService(Context.POWER_STATS_SERVICE, new BinderService());
+        publishBinderService(Context.POWER_STATS_SERVICE, mService);
     }
 
     private void onSystemServicesReady() {
         mPullAtomCallback = mInjector.createStatsPullerImpl(mContext, mPowerStatsInternal);
+        mDeviceConfigListener.startListening();
+        refreshFlags();
     }
 
     @VisibleForTesting
@@ -277,6 +349,15 @@
         }
     }
 
+    private Handler getHandler() {
+        synchronized (this) {
+            if (mHandler == null) {
+                mHandler = new Handler(getLooper());
+            }
+            return mHandler;
+        }
+    }
+
     private EnergyConsumer[] getEnergyConsumerInfo() {
         synchronized (this) {
             if (mEnergyConsumers == null) {
@@ -286,6 +367,15 @@
         }
     }
 
+    private Channel[] getEnergyMeterInfo() {
+        synchronized (this) {
+            if (mEnergyMeters == null) {
+                mEnergyMeters = getPowerStatsHal().getEnergyMeterInfo();
+            }
+            return mEnergyMeters;
+        }
+    }
+
     public PowerStatsService(Context context) {
         this(context, new Injector());
     }
@@ -295,15 +385,16 @@
         super(context);
         mContext = context;
         mInjector = injector;
+        mClock = injector.getClock();
+        mDeviceConfig = injector.getDeviceConfig();
+    }
+
+    void refreshFlags() {
+        setPowerMonitorApiEnabled(mDeviceConfig.getBoolean(DeviceConfig.NAMESPACE_BATTERY_STATS,
+                KEY_POWER_MONITOR_API_ENABLED, true));
     }
 
     private final class LocalService extends PowerStatsInternal {
-        private final Handler mHandler;
-
-        LocalService() {
-            mHandler = new Handler(getLooper());
-        }
-
 
         @Override
         public EnergyConsumer[] getEnergyConsumerInfo() {
@@ -314,9 +405,8 @@
         public CompletableFuture<EnergyConsumerResult[]> getEnergyConsumedAsync(
                 int[] energyConsumerIds) {
             final CompletableFuture<EnergyConsumerResult[]> future = new CompletableFuture<>();
-            mHandler.sendMessage(
-                    PooledLambda.obtainMessage(PowerStatsService.this::getEnergyConsumedAsync,
-                            future, energyConsumerIds));
+            getHandler().post(
+                    () -> PowerStatsService.this.getEnergyConsumedAsync(future, energyConsumerIds));
             return future;
         }
 
@@ -329,9 +419,8 @@
         public CompletableFuture<StateResidencyResult[]> getStateResidencyAsync(
                 int[] powerEntityIds) {
             final CompletableFuture<StateResidencyResult[]> future = new CompletableFuture<>();
-            mHandler.sendMessage(
-                    PooledLambda.obtainMessage(PowerStatsService.this::getStateResidencyAsync,
-                            future, powerEntityIds));
+            getHandler().post(
+                    () -> PowerStatsService.this.getStateResidencyAsync(future, powerEntityIds));
             return future;
         }
 
@@ -344,9 +433,8 @@
         public CompletableFuture<EnergyMeasurement[]> readEnergyMeterAsync(
                 int[] channelIds) {
             final CompletableFuture<EnergyMeasurement[]> future = new CompletableFuture<>();
-            mHandler.sendMessage(
-                    PooledLambda.obtainMessage(PowerStatsService.this::readEnergyMeterAsync,
-                            future, channelIds));
+            getHandler().post(
+                    () -> PowerStatsService.this.readEnergyMeterAsync(future, channelIds));
             return future;
         }
     }
@@ -427,4 +515,280 @@
             int[] channelIds) {
         future.complete(getPowerStatsHal().readEnergyMeter(channelIds));
     }
+
+    private static class PowerMonitorState {
+        public final PowerMonitor powerMonitor;
+        public final int id;
+        public long timestampMs;
+        public long energyUws = PowerMonitorReadings.ENERGY_UNAVAILABLE;
+        public long prevEnergyUws;
+
+        private PowerMonitorState(PowerMonitor powerMonitor, int id) {
+            this.powerMonitor = powerMonitor;
+            this.id = id;
+        }
+    }
+
+    private boolean mPowerMonitorApiEnabled = true;
+    private volatile PowerMonitor[] mPowerMonitors;
+    private PowerMonitorState[] mPowerMonitorStates;
+    private IntervalRandomNoiseGenerator mIntervalRandomNoiseGenerator;
+
+    private void setPowerMonitorApiEnabled(boolean powerMonitorApiEnabled) {
+        if (powerMonitorApiEnabled != mPowerMonitorApiEnabled) {
+            mPowerMonitorApiEnabled = powerMonitorApiEnabled;
+            mPowerMonitors = null;
+            mPowerMonitorStates = null;
+        }
+    }
+
+    private void ensurePowerMonitors() {
+        if (mPowerMonitors != null) {
+            return;
+        }
+
+        synchronized (this) {
+            if (mPowerMonitors != null) {
+                return;
+            }
+
+            if (mIntervalRandomNoiseGenerator == null) {
+                mIntervalRandomNoiseGenerator = mInjector.createIntervalRandomNoiseGenerator();
+            }
+
+            if (!mPowerMonitorApiEnabled) {
+                mPowerMonitors = new PowerMonitor[0];
+                mPowerMonitorStates = new PowerMonitorState[0];
+                return;
+            }
+
+            List<PowerMonitor> monitors = new ArrayList<>();
+            List<PowerMonitorState> states = new ArrayList<>();
+
+            int index = 0;
+
+            Channel[] channels = getEnergyMeterInfo();
+            for (Channel channel : channels) {
+                PowerMonitor monitor = new PowerMonitor(index++,
+                        PowerMonitor.POWER_MONITOR_TYPE_MEASUREMENT,
+                        getChannelName(channel));
+                monitors.add(monitor);
+                states.add(new PowerMonitorState(monitor, channel.id));
+            }
+
+            EnergyConsumer[] energyConsumers = getEnergyConsumerInfo();
+            for (EnergyConsumer consumer : energyConsumers) {
+                PowerMonitor monitor = new PowerMonitor(index++,
+                        PowerMonitor.POWER_MONITOR_TYPE_CONSUMER,
+                        getEnergyConsumerName(consumer, energyConsumers));
+                monitors.add(monitor);
+                states.add(new PowerMonitorState(monitor, consumer.id));
+            }
+
+            mPowerMonitors = monitors.toArray(new PowerMonitor[monitors.size()]);
+            mPowerMonitorStates = states.toArray(new PowerMonitorState[monitors.size()]);
+        }
+    }
+
+    @NonNull
+    private String getChannelName(Channel c) {
+        StringBuilder sb = new StringBuilder();
+        sb.append('[').append(c.name).append("]:");
+        if (c.subsystem != null) {
+            sb.append(c.subsystem);
+        }
+        return sb.toString();
+    }
+
+    @NonNull
+    private String getEnergyConsumerName(EnergyConsumer consumer,
+            EnergyConsumer[] energyConsumers) {
+        if (consumer.type != EnergyConsumerType.OTHER) {
+            StringBuilder sb = new StringBuilder();
+            sb.append(energyConsumerTypeToString(consumer.type));
+            boolean hasOrdinal = consumer.ordinal != 0;
+            if (!hasOrdinal) {
+                // See if any other EnergyConsumer of the same type has an ordinal
+                for (EnergyConsumer aConsumer : energyConsumers) {
+                    if (aConsumer.type == consumer.type && aConsumer.ordinal != 0) {
+                        hasOrdinal = true;
+                        break;
+                    }
+                }
+            }
+            if (hasOrdinal) {
+                sb.append('/').append(consumer.ordinal);
+            }
+            return sb.toString();
+        } else {
+            return consumer.name;
+        }
+    }
+
+    private static String energyConsumerTypeToString(int type) {
+        switch(type) {
+            case EnergyConsumerType.BLUETOOTH: return "BLUETOOTH";
+            case EnergyConsumerType.CPU_CLUSTER: return "CPU";
+            case EnergyConsumerType.DISPLAY: return "DISPLAY";
+            case EnergyConsumerType.GNSS: return "GNSS";
+            case EnergyConsumerType.MOBILE_RADIO: return "MOBILE_RADIO";
+            case EnergyConsumerType.WIFI: return "WIFI";
+            case EnergyConsumerType.OTHER: return "";
+            default:
+                throw new IllegalStateException("Unrecognized EnergyConsumerType: " + type);
+        }
+    }
+
+    /**
+     * Returns names of supported power monitors, including Channels and EnergyConsumers.
+     */
+    @VisibleForTesting
+    public void getSupportedPowerMonitorsImpl(ResultReceiver resultReceiver) {
+        ensurePowerMonitors();
+        Bundle result = new Bundle();
+        result.putParcelableArray(IPowerStatsService.KEY_MONITORS, mPowerMonitors);
+        resultReceiver.send(IPowerStatsService.RESULT_SUCCESS, result);
+    }
+
+    /**
+     * Returns the latest readings for the specified power monitors.
+     */
+    @VisibleForTesting
+    public void getPowerMonitorReadingsImpl(@NonNull int[] powerMonitorIndices,
+            ResultReceiver resultReceiver, int callingUid) {
+        ensurePowerMonitors();
+
+        long earliestTimestamp = Long.MAX_VALUE;
+        PowerMonitorState[] powerMonitorStates = new PowerMonitorState[powerMonitorIndices.length];
+        for (int i = 0; i < powerMonitorIndices.length; i++) {
+            int index = powerMonitorIndices[i];
+            if (index < 0 || index >= mPowerMonitorStates.length) {
+                resultReceiver.send(IPowerStatsService.RESULT_UNSUPPORTED_POWER_MONITOR, null);
+                return;
+            }
+
+            powerMonitorStates[i] = mPowerMonitorStates[index];
+            if (mPowerMonitorStates[index] != null
+                    && mPowerMonitorStates[index].timestampMs < earliestTimestamp) {
+                earliestTimestamp = mPowerMonitorStates[index].timestampMs;
+            }
+        }
+
+        if (earliestTimestamp == 0
+                || mClock.elapsedRealtime() - earliestTimestamp > MAX_POWER_MONITOR_AGE_MILLIS) {
+            updateEnergyConsumers(powerMonitorStates);
+            updateEnergyMeasurements(powerMonitorStates);
+            mIntervalRandomNoiseGenerator.refresh();
+        }
+
+        long[] energy = new long[powerMonitorStates.length];
+        long[] timestamps = new long[powerMonitorStates.length];
+        for (int i = 0; i < powerMonitorStates.length; i++) {
+            PowerMonitorState state = powerMonitorStates[i];
+            if (state.energyUws != PowerMonitorReadings.ENERGY_UNAVAILABLE
+                    && state.prevEnergyUws != PowerMonitorReadings.ENERGY_UNAVAILABLE) {
+                energy[i] = mIntervalRandomNoiseGenerator.addNoise(
+                        Math.max(state.prevEnergyUws, state.energyUws - MAX_RANDOM_NOISE_UWS),
+                        state.energyUws, callingUid);
+                if (DEBUG) {
+                    Log.d(TAG, String.format(Locale.ENGLISH,
+                            "Monitor=%s timestamp=%d energy=%d"
+                                    + " uid=%d noise=%.1f%% returned=%d",
+                            state.powerMonitor.name,
+                            state.timestampMs,
+                            state.energyUws,
+                            callingUid,
+                            state.energyUws != state.prevEnergyUws
+                                    ? (state.energyUws - energy[i]) * 100.0
+                                            / (state.energyUws - state.prevEnergyUws)
+                                    : 0,
+                            energy[i]));
+                }
+            } else {
+                energy[i] = state.energyUws;
+            }
+            timestamps[i] = state.timestampMs;
+        }
+
+        Bundle result = new Bundle();
+        result.putLongArray(IPowerStatsService.KEY_ENERGY, energy);
+        result.putLongArray(IPowerStatsService.KEY_TIMESTAMPS, timestamps);
+        resultReceiver.send(IPowerStatsService.RESULT_SUCCESS, result);
+    }
+
+    private void updateEnergyConsumers(PowerMonitorState[] powerMonitorStates) {
+        int[] ids = collectIds(powerMonitorStates, PowerMonitor.POWER_MONITOR_TYPE_CONSUMER);
+        if (ids == null) {
+            return;
+        }
+
+        EnergyConsumerResult[] energyConsumerResults = getPowerStatsHal().getEnergyConsumed(ids);
+        if (energyConsumerResults == null) {
+            return;
+        }
+
+        for (PowerMonitorState powerMonitorState : powerMonitorStates) {
+            if (powerMonitorState.powerMonitor.type
+                    == PowerMonitor.POWER_MONITOR_TYPE_CONSUMER) {
+                for (EnergyConsumerResult energyConsumerResult : energyConsumerResults) {
+                    if (energyConsumerResult.id == powerMonitorState.id) {
+                        powerMonitorState.prevEnergyUws = powerMonitorState.energyUws;
+                        powerMonitorState.energyUws = energyConsumerResult.energyUWs;
+                        powerMonitorState.timestampMs = energyConsumerResult.timestampMs;
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+    private void updateEnergyMeasurements(PowerMonitorState[] powerMonitorStates) {
+        int[] ids = collectIds(powerMonitorStates, PowerMonitor.POWER_MONITOR_TYPE_MEASUREMENT);
+        if (ids == null) {
+            return;
+        }
+
+        EnergyMeasurement[] energyMeasurements = getPowerStatsHal().readEnergyMeter(ids);
+        if (energyMeasurements == null) {
+            return;
+        }
+
+        for (PowerMonitorState powerMonitorState : powerMonitorStates) {
+            if (powerMonitorState.powerMonitor.type
+                    == PowerMonitor.POWER_MONITOR_TYPE_MEASUREMENT) {
+                for (EnergyMeasurement energyMeasurement : energyMeasurements) {
+                    if (energyMeasurement.id == powerMonitorState.id) {
+                        powerMonitorState.prevEnergyUws = powerMonitorState.energyUws;
+                        powerMonitorState.energyUws = energyMeasurement.energyUWs;
+                        powerMonitorState.timestampMs = energyMeasurement.timestampMs;
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+    @Nullable
+    private int[] collectIds(PowerMonitorState[] powerMonitorStates,
+            @PowerMonitor.PowerMonitorType int type) {
+        int count = 0;
+        for (PowerMonitorState monitorState : powerMonitorStates) {
+            if (monitorState.powerMonitor.type == type) {
+                count++;
+            }
+        }
+
+        if (count == 0) {
+            return null;
+        }
+
+        int[] ids = new int[count];
+        int index = 0;
+        for (PowerMonitorState monitorState : powerMonitorStates) {
+            if (monitorState.powerMonitor.type == type) {
+                ids[index++] = monitorState.id;
+            }
+        }
+        return ids;
+    }
 }
diff --git a/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java b/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java
index 9d5173a..375ef61 100644
--- a/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java
+++ b/services/core/java/com/android/server/recoverysystem/RecoverySystemService.java
@@ -52,7 +52,6 @@
 import android.os.ShellCallback;
 import android.os.SystemProperties;
 import android.provider.DeviceConfig;
-import android.sysprop.ApexProperties;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.FastImmutableArraySet;
@@ -906,10 +905,11 @@
         return RESUME_ON_REBOOT_REBOOT_ERROR_UNSPECIFIED;
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.RECOVERY)
     @Override // Binder call for the legacy rebootWithLskf
     public @ResumeOnRebootRebootErrorCode int rebootWithLskfAssumeSlotSwitch(String packageName,
             String reason) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.RECOVERY, null);
+        rebootWithLskfAssumeSlotSwitch_enforcePermission();
         return rebootWithLskfImpl(packageName, reason, true);
     }
 
@@ -920,10 +920,6 @@
         return rebootWithLskfImpl(packageName, reason, slotSwitch);
     }
 
-    public static boolean isUpdatableApexSupported() {
-        return ApexProperties.updatable().orElse(false);
-    }
-
     // Metadata should be no more than few MB, if it's larger than 100MB something is wrong.
     private static final long APEX_INFO_SIZE_LIMIT = 24 * 1024 * 100;
 
@@ -970,14 +966,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.RECOVERY)
     @Override
     public boolean allocateSpaceForUpdate(String packageFile) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.RECOVERY, null);
-        if (!isUpdatableApexSupported()) {
-            Log.i(TAG, "Updatable Apex not supported, "
-                    + "allocateSpaceForUpdate does nothing.");
-            return true;
-        }
+        allocateSpaceForUpdate_enforcePermission();
         final long token = Binder.clearCallingIdentity();
         try {
             CompressedApexInfoList apexInfoList = getCompressedApexInfoList(packageFile);
diff --git a/services/core/java/com/android/server/security/FileIntegrity.java b/services/core/java/com/android/server/security/FileIntegrity.java
index 7b87d99..b8f187e 100644
--- a/services/core/java/com/android/server/security/FileIntegrity.java
+++ b/services/core/java/com/android/server/security/FileIntegrity.java
@@ -16,6 +16,8 @@
 
 package com.android.server.security;
 
+import static android.os.ParcelFileDescriptor.MODE_READ_ONLY;
+
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
 import android.os.ParcelFileDescriptor;
@@ -36,18 +38,26 @@
     private FileIntegrity() {}
 
     /**
-     * Enables fs-verity, if supported by the filesystem.
+     * Enables fs-verity, if supported by the filesystem. This operation is atomic, i.e. it's either
+     * enabled or not, even in case of power failure during or after the call.
      * @see <a href="https://www.kernel.org/doc/html/latest/filesystems/fsverity.html">
+     *
      * @hide
      */
     @SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
     public static void setUpFsVerity(@NonNull File file) throws IOException {
-        VerityUtils.setUpFsverity(file.getAbsolutePath());
+        try (ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file, MODE_READ_ONLY)) {
+            setUpFsVerity(pfd);
+        }
     }
 
     /**
-     * Enables fs-verity, if supported by the filesystem.
+     * Enables fs-verity, if supported by the filesystem. This operation is atomic, i.e. it's either
+     * enabled or not, even in case of power failure during or after the call.
      * @see <a href="https://www.kernel.org/doc/html/latest/filesystems/fsverity.html">
+     *
+     * @param parcelFileDescriptor an FD opened in {@link ParcelFileDescriptor#MODE_READ_ONLY}.
+     *
      * @hide
      */
     @SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
diff --git a/services/core/java/com/android/server/servicewatcher/CurrentUserServiceSupplier.java b/services/core/java/com/android/server/servicewatcher/CurrentUserServiceSupplier.java
index 00bedac..6677e7e 100644
--- a/services/core/java/com/android/server/servicewatcher/CurrentUserServiceSupplier.java
+++ b/services/core/java/com/android/server/servicewatcher/CurrentUserServiceSupplier.java
@@ -37,8 +37,8 @@
 import android.content.pm.ServiceInfo;
 import android.content.res.Resources;
 import android.os.Bundle;
+import android.os.Process;
 import android.os.UserHandle;
-import android.permission.PermissionManager;
 import android.util.Log;
 
 import com.android.internal.util.Preconditions;
@@ -294,8 +294,8 @@
             BoundServiceInfo serviceInfo = new BoundServiceInfo(mIntent.getAction(), resolveInfo);
 
             if (mServicePermission != null) {
-                if (PermissionManager.checkPackageNamePermission(mServicePermission,
-                        service.packageName, serviceInfo.getUserId()) != PERMISSION_GRANTED) {
+                if (mContext.checkPermission(mServicePermission, Process.INVALID_PID,
+                        serviceInfo.mUid) != PERMISSION_GRANTED) {
                     Log.d(TAG, serviceInfo.getComponentName().flattenToShortString()
                             + " disqualified due to not holding " + mCallerPermission);
                     continue;
diff --git a/services/core/java/com/android/server/servicewatcher/ServiceWatcherImpl.java b/services/core/java/com/android/server/servicewatcher/ServiceWatcherImpl.java
index ac97038..b178269 100644
--- a/services/core/java/com/android/server/servicewatcher/ServiceWatcherImpl.java
+++ b/services/core/java/com/android/server/servicewatcher/ServiceWatcherImpl.java
@@ -98,7 +98,7 @@
         Preconditions.checkState(!mRegistered);
 
         mRegistered = true;
-        mPackageMonitor.register(mContext, UserHandle.ALL, /*externalStorage=*/ true, mHandler);
+        mPackageMonitor.register(mContext, UserHandle.ALL, mHandler);
         mServiceSupplier.register(this);
 
         onServiceChanged(false);
diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
index 9128974..5d04e5d 100644
--- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
+++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
@@ -1734,7 +1734,7 @@
             String name = ent.getKey();
             KernelWakelockStats.Entry kws = ent.getValue();
             pulledData.add(FrameworkStatsLog.buildStatsEvent(
-                    atomTag, name, kws.mCount, kws.mVersion, kws.mTotalTime));
+                    atomTag, name, kws.count, kws.version, kws.totalTimeUs));
         }
         return StatsManager.PULL_SUCCESS;
     }
@@ -3098,6 +3098,7 @@
     }
 
     // read high watermark for section
+    @GuardedBy("mProcStatsLock")
     private long readProcStatsHighWaterMark(int atomTag) {
         try {
             File[] files =
diff --git a/services/core/java/com/android/server/timedetector/ConfigurationInternal.java b/services/core/java/com/android/server/timedetector/ConfigurationInternal.java
index 4f221b5..9718194 100644
--- a/services/core/java/com/android/server/timedetector/ConfigurationInternal.java
+++ b/services/core/java/com/android/server/timedetector/ConfigurationInternal.java
@@ -244,6 +244,8 @@
                 && mAutoDetectionEnabledSetting == that.mAutoDetectionEnabledSetting
                 && mUserId == that.mUserId && mUserConfigAllowed == that.mUserConfigAllowed
                 && mSystemClockUpdateThresholdMillis == that.mSystemClockUpdateThresholdMillis
+                && mSystemClockConfidenceThresholdMillis
+                == that.mSystemClockConfidenceThresholdMillis
                 && mAutoSuggestionLowerBound.equals(that.mAutoSuggestionLowerBound)
                 && mManualSuggestionLowerBound.equals(that.mManualSuggestionLowerBound)
                 && mSuggestionUpperBound.equals(that.mSuggestionUpperBound)
@@ -253,7 +255,8 @@
     @Override
     public int hashCode() {
         int result = Objects.hash(mAutoDetectionSupported, mAutoDetectionEnabledSetting, mUserId,
-                mUserConfigAllowed, mSystemClockUpdateThresholdMillis, mAutoSuggestionLowerBound,
+                mUserConfigAllowed, mSystemClockUpdateThresholdMillis,
+                mSystemClockConfidenceThresholdMillis, mAutoSuggestionLowerBound,
                 mManualSuggestionLowerBound, mSuggestionUpperBound);
         result = 31 * result + Arrays.hashCode(mOriginPriorities);
         return result;
diff --git a/services/core/java/com/android/server/timedetector/EnvironmentImpl.java b/services/core/java/com/android/server/timedetector/EnvironmentImpl.java
index fc960d8..c52f8f8 100644
--- a/services/core/java/com/android/server/timedetector/EnvironmentImpl.java
+++ b/services/core/java/com/android/server/timedetector/EnvironmentImpl.java
@@ -22,15 +22,16 @@
 import android.os.Handler;
 import android.os.PowerManager;
 import android.os.SystemClock;
+import android.util.IndentingPrintWriter;
 import android.util.Slog;
 
 import com.android.server.AlarmManagerInternal;
 import com.android.server.LocalServices;
 import com.android.server.SystemClockTime;
 import com.android.server.SystemClockTime.TimeConfidence;
-import com.android.server.timezonedetector.StateChangeListener;
 
-import java.io.PrintWriter;
+import java.time.Duration;
+import java.time.Instant;
 import java.util.Objects;
 
 /**
@@ -41,14 +42,11 @@
     private static final String LOG_TAG = TimeDetectorService.TAG;
 
     @NonNull private final Handler mHandler;
-    @NonNull private final ServiceConfigAccessor mServiceConfigAccessor;
     @NonNull private final PowerManager.WakeLock mWakeLock;
     @NonNull private final AlarmManagerInternal mAlarmManagerInternal;
 
-    EnvironmentImpl(@NonNull Context context, @NonNull Handler handler,
-            @NonNull ServiceConfigAccessor serviceConfigAccessor) {
+    EnvironmentImpl(@NonNull Context context, @NonNull Handler handler) {
         mHandler = Objects.requireNonNull(handler);
-        mServiceConfigAccessor = Objects.requireNonNull(serviceConfigAccessor);
 
         PowerManager powerManager = context.getSystemService(PowerManager.class);
         mWakeLock = Objects.requireNonNull(
@@ -59,19 +57,6 @@
     }
 
     @Override
-    public void setConfigurationInternalChangeListener(
-            @NonNull StateChangeListener listener) {
-        StateChangeListener stateChangeListener =
-                () -> mHandler.post(listener::onChange);
-        mServiceConfigAccessor.addConfigurationInternalChangeListener(stateChangeListener);
-    }
-
-    @Override
-    public ConfigurationInternal getCurrentUserConfigurationInternal() {
-        return mServiceConfigAccessor.getCurrentUserConfigurationInternal();
-    }
-
-    @Override
     public void acquireWakeLock() {
         if (mWakeLock.isHeld()) {
             Slog.wtf(LOG_TAG, "WakeLock " + mWakeLock + " already held");
@@ -126,8 +111,19 @@
     }
 
     @Override
-    public void dumpDebugLog(@NonNull PrintWriter printWriter) {
-        SystemClockTime.dump(printWriter);
+    public void dumpDebugLog(@NonNull IndentingPrintWriter pw) {
+        long elapsedRealtimeMillis = elapsedRealtimeMillis();
+        pw.printf("elapsedRealtimeMillis()=%s (%s)\n",
+                Duration.ofMillis(elapsedRealtimeMillis), elapsedRealtimeMillis);
+        long systemClockMillis = systemClockMillis();
+        pw.printf("systemClockMillis()=%s (%s)\n",
+                Instant.ofEpochMilli(systemClockMillis), systemClockMillis);
+        pw.println("systemClockConfidence()=" + systemClockConfidence());
+
+        pw.println("SystemClockTime debug log:");
+        pw.increaseIndent();
+        SystemClockTime.dump(pw);
+        pw.decreaseIndent();
     }
 
     @Override
diff --git a/services/core/java/com/android/server/timedetector/NetworkTimeUpdateService.java b/services/core/java/com/android/server/timedetector/NetworkTimeUpdateService.java
index e7c073c..49dec05 100644
--- a/services/core/java/com/android/server/timedetector/NetworkTimeUpdateService.java
+++ b/services/core/java/com/android/server/timedetector/NetworkTimeUpdateService.java
@@ -21,13 +21,9 @@
 import android.annotation.Nullable;
 import android.annotation.RequiresPermission;
 import android.app.AlarmManager;
-import android.app.PendingIntent;
 import android.app.time.UnixEpochTime;
-import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
 import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
 import android.database.ContentObserver;
 import android.net.ConnectivityManager;
 import android.net.Network;
@@ -73,10 +69,6 @@
     private static final String TAG = "NetworkTimeUpdateService";
     private static final boolean DBG = false;
 
-    private static final String ACTION_POLL =
-            "com.android.server.timedetector.NetworkTimeUpdateService.action.POLL";
-    private static final int POLL_REQUEST = 0;
-
     private final Object mLock = new Object();
     private final Context mContext;
     private final ConnectivityManager mCM;
@@ -113,16 +105,19 @@
         AlarmManager alarmManager = mContext.getSystemService(AlarmManager.class);
         TimeDetectorInternal timeDetectorInternal =
                 LocalServices.getService(TimeDetectorInternal.class);
-        // Broadcast alarms sent by system are immutable
-        Intent pollIntent = new Intent(ACTION_POLL, null).setPackage("android");
-        PendingIntent pendingPollIntent = PendingIntent.getBroadcast(mContext, POLL_REQUEST,
-                pollIntent, PendingIntent.FLAG_IMMUTABLE);
         mRefreshCallbacks = new Engine.RefreshCallbacks() {
+            private final AlarmManager.OnAlarmListener mOnAlarmListener =
+                    new ScheduledRefreshAlarmListener();
+
             @Override
             public void scheduleNextRefresh(@ElapsedRealtimeLong long elapsedRealtimeMillis) {
-                alarmManager.cancel(pendingPollIntent);
+                alarmManager.cancel(mOnAlarmListener);
+
+                String alarmTag = "NetworkTimeUpdateService.POLL";
+                Handler handler = null; // Use the main thread
                 alarmManager.set(
-                        AlarmManager.ELAPSED_REALTIME, elapsedRealtimeMillis, pendingPollIntent);
+                        AlarmManager.ELAPSED_REALTIME, elapsedRealtimeMillis, alarmTag,
+                        mOnAlarmListener, handler);
             }
 
             @Override
@@ -138,10 +133,6 @@
 
     /** Initialize the receivers and initiate the first NTP request */
     public void systemRunning() {
-        // Listen for scheduled refreshes.
-        ScheduledRefreshBroadcastReceiver receiver = new ScheduledRefreshBroadcastReceiver();
-        mContext.registerReceiver(receiver, new IntentFilter(ACTION_POLL));
-
         // Listen for network connectivity changes.
         NetworkConnectivityCallback networkConnectivityCallback = new NetworkConnectivityCallback();
         mCM.registerDefaultNetworkCallback(networkConnectivityCallback, mHandler);
@@ -214,13 +205,13 @@
         }
     }
 
-    private class ScheduledRefreshBroadcastReceiver extends BroadcastReceiver implements Runnable {
+    private class ScheduledRefreshAlarmListener implements AlarmManager.OnAlarmListener, Runnable {
 
         @Override
-        public void onReceive(Context context, Intent intent) {
-            // The BroadcastReceiver has to complete quickly or an ANR will be triggered by the
+        public void onAlarm() {
+            // The OnAlarmListener has to complete quickly or an ANR will be triggered by the
             // platform regardless of the receiver thread used. Instead of blocking the receiver
-            // thread, the long-running / blocking work is posted to mHandler to allow onReceive()
+            // thread, the long-running / blocking work is posted to mHandler to allow onAlarm()
             // to return immediately.
             mHandler.post(this);
         }
@@ -424,8 +415,14 @@
             logToDebugAndDumpsys("forceRefreshForTests: refreshSuccessful=" + refreshSuccessful);
 
             if (refreshSuccessful) {
-                makeNetworkTimeSuggestion(mNtpTrustedTime.getCachedTimeResult(),
-                        "EngineImpl.forceRefreshForTests()", refreshCallbacks);
+                TimeResult cachedTimeResult = mNtpTrustedTime.getCachedTimeResult();
+                if (cachedTimeResult == null) {
+                    logToDebugAndDumpsys(
+                            "forceRefreshForTests: cachedTimeResult unexpectedly null");
+                } else {
+                    makeNetworkTimeSuggestion(cachedTimeResult,
+                            "EngineImpl.forceRefreshForTests()", refreshCallbacks);
+                }
             }
             return refreshSuccessful;
         }
diff --git a/services/core/java/com/android/server/timedetector/ServiceConfigAccessor.java b/services/core/java/com/android/server/timedetector/ServiceConfigAccessor.java
index ff180eb..7bc0af3 100644
--- a/services/core/java/com/android/server/timedetector/ServiceConfigAccessor.java
+++ b/services/core/java/com/android/server/timedetector/ServiceConfigAccessor.java
@@ -64,7 +64,7 @@
             boolean bypassUserPolicyChecks);
 
     /**
-     * Returns a snapshot of the configuration that controls time zone detector behavior for the
+     * Returns a snapshot of the configuration that controls time detector behavior for the
      * specified user.
      */
     @NonNull
diff --git a/services/core/java/com/android/server/timedetector/ServiceConfigAccessorImpl.java b/services/core/java/com/android/server/timedetector/ServiceConfigAccessorImpl.java
index dc2a974..58c31d5 100644
--- a/services/core/java/com/android/server/timedetector/ServiceConfigAccessorImpl.java
+++ b/services/core/java/com/android/server/timedetector/ServiceConfigAccessorImpl.java
@@ -39,7 +39,6 @@
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.database.ContentObserver;
-import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
@@ -65,8 +64,6 @@
  */
 final class ServiceConfigAccessorImpl implements ServiceConfigAccessor {
 
-    private static final int SYSTEM_CLOCK_UPDATE_THRESHOLD_MILLIS_DEFAULT = 2 * 1000;
-
     /**
      * An absolute threshold at/below which the system clock confidence can be upgraded. i.e. if the
      * detector receives a high-confidence time and the current system clock is +/- this value from
@@ -122,9 +119,8 @@
         mConfigOriginPrioritiesSupplier = new ConfigOriginPrioritiesSupplier(context);
         mServerFlagsOriginPrioritiesSupplier =
                 new ServerFlagsOriginPrioritiesSupplier(mServerFlags);
-        mSystemClockUpdateThresholdMillis =
-                SystemProperties.getInt("ro.sys.time_detector_update_diff",
-                        SYSTEM_CLOCK_UPDATE_THRESHOLD_MILLIS_DEFAULT);
+        mSystemClockUpdateThresholdMillis = context.getResources().getInteger(
+                R.integer.config_timeDetectorAutoUpdateDiffMillis);
 
         // Wire up the config change listeners for anything that could affect ConfigurationInternal.
         // Use the main thread for event delivery, listeners can post to their chosen thread.
diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorService.java b/services/core/java/com/android/server/timedetector/TimeDetectorService.java
index 22f096b..d88f426 100644
--- a/services/core/java/com/android/server/timedetector/TimeDetectorService.java
+++ b/services/core/java/com/android/server/timedetector/TimeDetectorService.java
@@ -96,8 +96,8 @@
 
             CallerIdentityInjector callerIdentityInjector = CallerIdentityInjector.REAL;
             TimeDetectorService service = new TimeDetectorService(
-                    context, handler, callerIdentityInjector, serviceConfigAccessor,
-                    timeDetectorStrategy, NtpTrustedTime.getInstance(context));
+                    context, handler, callerIdentityInjector, timeDetectorStrategy,
+                    NtpTrustedTime.getInstance(context));
 
             // Publish the binder service so it can be accessed from other (appropriately
             // permissioned) processes.
@@ -108,7 +108,6 @@
     @NonNull private final Handler mHandler;
     @NonNull private final Context mContext;
     @NonNull private final CallerIdentityInjector mCallerIdentityInjector;
-    @NonNull private final ServiceConfigAccessor mServiceConfigAccessor;
     @NonNull private final TimeDetectorStrategy mTimeDetectorStrategy;
     @NonNull private final NtpTrustedTime mNtpTrustedTime;
 
@@ -123,20 +122,18 @@
     @VisibleForTesting
     public TimeDetectorService(@NonNull Context context, @NonNull Handler handler,
             @NonNull CallerIdentityInjector callerIdentityInjector,
-            @NonNull ServiceConfigAccessor serviceConfigAccessor,
             @NonNull TimeDetectorStrategy timeDetectorStrategy,
             @NonNull NtpTrustedTime ntpTrustedTime) {
         mContext = Objects.requireNonNull(context);
         mHandler = Objects.requireNonNull(handler);
         mCallerIdentityInjector = Objects.requireNonNull(callerIdentityInjector);
-        mServiceConfigAccessor = Objects.requireNonNull(serviceConfigAccessor);
         mTimeDetectorStrategy = Objects.requireNonNull(timeDetectorStrategy);
         mNtpTrustedTime = Objects.requireNonNull(ntpTrustedTime);
 
-        // Wire up a change listener so that ITimeZoneDetectorListeners can be notified when
-        // the configuration changes for any reason.
-        mServiceConfigAccessor.addConfigurationInternalChangeListener(
-                () -> mHandler.post(this::handleConfigurationInternalChangedOnHandlerThread));
+        // Wire up a change listener so that ITimeDetectorListeners can be notified when the
+        // detector state changes for any reason.
+        mTimeDetectorStrategy.addChangeListener(
+                () -> mHandler.post(this::handleChangeOnHandlerThread));
     }
 
     @Override
@@ -151,10 +148,8 @@
 
         final long token = mCallerIdentityInjector.clearCallingIdentity();
         try {
-            ConfigurationInternal configurationInternal =
-                    mServiceConfigAccessor.getConfigurationInternal(userId);
-            final boolean bypassUserPolicyCheck = false;
-            return configurationInternal.createCapabilitiesAndConfig(bypassUserPolicyCheck);
+            final boolean bypassUserPolicyChecks = false;
+            return mTimeDetectorStrategy.getCapabilitiesAndConfig(userId, bypassUserPolicyChecks);
         } finally {
             mCallerIdentityInjector.restoreCallingIdentity(token);
         }
@@ -180,9 +175,9 @@
 
         final long token = mCallerIdentityInjector.clearCallingIdentity();
         try {
-            final boolean bypassUserPolicyCheck = false;
-            return mServiceConfigAccessor.updateConfiguration(
-                    resolvedUserId, configuration, bypassUserPolicyCheck);
+            final boolean bypassUserPolicyChecks = false;
+            return mTimeDetectorStrategy.updateConfiguration(
+                    resolvedUserId, configuration, bypassUserPolicyChecks);
         } finally {
             mCallerIdentityInjector.restoreCallingIdentity(token);
         }
@@ -262,7 +257,7 @@
         }
     }
 
-    private void handleConfigurationInternalChangedOnHandlerThread() {
+    private void handleChangeOnHandlerThread() {
         // Configuration has changed, but each user may have a different view of the configuration.
         // It's possible that this will cause unnecessary notifications but that shouldn't be a
         // problem.
diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorStrategy.java b/services/core/java/com/android/server/timedetector/TimeDetectorStrategy.java
index 11cec66..15c0a80 100644
--- a/services/core/java/com/android/server/timedetector/TimeDetectorStrategy.java
+++ b/services/core/java/com/android/server/timedetector/TimeDetectorStrategy.java
@@ -21,6 +21,8 @@
 import android.annotation.Nullable;
 import android.annotation.UserIdInt;
 import android.app.time.ExternalTimeSuggestion;
+import android.app.time.TimeCapabilitiesAndConfig;
+import android.app.time.TimeConfiguration;
 import android.app.time.TimeState;
 import android.app.time.UnixEpochTime;
 import android.app.timedetector.ManualTimeSuggestion;
@@ -87,6 +89,48 @@
      */
     boolean confirmTime(@NonNull UnixEpochTime confirmationTime);
 
+    /**
+     * Adds a listener that will be triggered when something changes that could affect the result
+     * of the {@link #getCapabilitiesAndConfig} call for the <em>current user only</em>. This
+     * includes the current user changing. This is exposed so that (indirect) users like SettingsUI
+     * can monitor for changes to data derived from {@link TimeCapabilitiesAndConfig} and update
+     * the UI accordingly.
+     */
+    void addChangeListener(@NonNull StateChangeListener listener);
+
+    /**
+     * Returns a {@link TimeCapabilitiesAndConfig} object for the specified user.
+     *
+     * <p>The strategy is dependent on device state like current user, settings and device config.
+     * These updates are usually handled asynchronously, so callers should expect some delay between
+     * a change being made directly to services like settings and the strategy becoming aware of
+     * them. Changes made via {@link #updateConfiguration} will be visible immediately.
+     *
+     * @param userId the user ID to retrieve the information for
+     * @param bypassUserPolicyChecks {@code true} for device policy manager use cases where device
+     *   policy restrictions that should apply to actual users can be ignored
+     */
+    TimeCapabilitiesAndConfig getCapabilitiesAndConfig(
+            @UserIdInt int userId, boolean bypassUserPolicyChecks);
+
+    /**
+     * Updates the configuration properties that control a device's time behavior.
+     *
+     * <p>This method returns {@code true} if the configuration was changed, {@code false}
+     * otherwise.
+     *
+     * <p>See {@link #getCapabilitiesAndConfig} for guarantees about visibility of updates to
+     * subsequent calls.
+     *
+     * @param userId the current user ID, supplied to make sure that the asynchronous process
+     *   that happens when users switch is completed when the call is made
+     * @param configuration the configuration changes
+     * @param bypassUserPolicyChecks {@code true} for device policy manager use cases where device
+     *   policy restrictions that should apply to actual users can be ignored
+     */
+    boolean updateConfiguration(@UserIdInt int userId,
+            @NonNull TimeConfiguration configuration, boolean bypassUserPolicyChecks);
+
     /** Processes the suggested time from telephony sources. */
     void suggestTelephonyTime(@NonNull TelephonyTimeSuggestion suggestion);
 
diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java b/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java
index b293bac..374dd89 100644
--- a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java
+++ b/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java
@@ -30,6 +30,7 @@
 import android.app.time.ExternalTimeSuggestion;
 import android.app.time.TimeCapabilities;
 import android.app.time.TimeCapabilitiesAndConfig;
+import android.app.time.TimeConfiguration;
 import android.app.time.TimeState;
 import android.app.time.UnixEpochTime;
 import android.app.timedetector.ManualTimeSuggestion;
@@ -48,10 +49,10 @@
 import com.android.server.timezonedetector.ReferenceWithHistory;
 import com.android.server.timezonedetector.StateChangeListener;
 
-import java.io.PrintWriter;
-import java.time.Duration;
 import java.time.Instant;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -94,6 +95,12 @@
     @NonNull
     private final Environment mEnvironment;
 
+    @NonNull
+    private final ServiceConfigAccessor mServiceConfigAccessor;
+
+    @GuardedBy("this")
+    @NonNull private final List<StateChangeListener> mStateChangeListeners = new ArrayList<>();
+
     @GuardedBy("this")
     @NonNull
     private ConfigurationInternal mCurrentConfigurationInternal;
@@ -139,16 +146,6 @@
      */
     public interface Environment {
 
-        /**
-         * Sets a {@link StateChangeListener} that will be invoked when there are any changes that
-         * could affect the content of {@link ConfigurationInternal}.
-         * This is invoked during system server setup.
-         */
-        void setConfigurationInternalChangeListener(@NonNull StateChangeListener listener);
-
-        /** Returns the {@link ConfigurationInternal} for the current user. */
-        @NonNull ConfigurationInternal getCurrentUserConfigurationInternal();
-
         /** Acquire a suitable wake lock. Must be followed by {@link #releaseWakeLock()} */
         void acquireWakeLock();
 
@@ -174,16 +171,15 @@
         /** Release the wake lock acquired by a call to {@link #acquireWakeLock()}. */
         void releaseWakeLock();
 
-
         /**
          * Adds a standalone entry to the time debug log.
          */
         void addDebugLogEntry(@NonNull String logMsg);
 
         /**
-         * Dumps the time debug log to the supplied {@link PrintWriter}.
+         * Dumps the time debug log to the supplied {@link IndentingPrintWriter}.
          */
-        void dumpDebugLog(PrintWriter printWriter);
+        void dumpDebugLog(IndentingPrintWriter ipw);
 
         /**
          * Requests that the supplied runnable is invoked asynchronously.
@@ -195,19 +191,23 @@
             @NonNull Context context, @NonNull Handler handler,
             @NonNull ServiceConfigAccessor serviceConfigAccessor) {
 
-        TimeDetectorStrategyImpl.Environment environment =
-                new EnvironmentImpl(context, handler, serviceConfigAccessor);
-        return new TimeDetectorStrategyImpl(environment);
+        TimeDetectorStrategyImpl.Environment environment = new EnvironmentImpl(context, handler);
+        return new TimeDetectorStrategyImpl(environment, serviceConfigAccessor);
     }
 
     @VisibleForTesting
-    TimeDetectorStrategyImpl(@NonNull Environment environment) {
+    TimeDetectorStrategyImpl(@NonNull Environment environment,
+            @NonNull ServiceConfigAccessor serviceConfigAccessor) {
         mEnvironment = Objects.requireNonNull(environment);
+        mServiceConfigAccessor = Objects.requireNonNull(serviceConfigAccessor);
 
         synchronized (this) {
-            mEnvironment.setConfigurationInternalChangeListener(
-                    this::handleConfigurationInternalChanged);
-            mCurrentConfigurationInternal = mEnvironment.getCurrentUserConfigurationInternal();
+            // Listen for config and user changes and get an initial snapshot of configuration.
+            StateChangeListener stateChangeListener = this::handleConfigurationInternalMaybeChanged;
+            mServiceConfigAccessor.addConfigurationInternalChangeListener(stateChangeListener);
+
+            // Initialize mCurrentConfigurationInternal with a starting value.
+            updateCurrentConfigurationInternalIfRequired("TimeDetectorStrategyImpl:");
         }
     }
 
@@ -378,7 +378,7 @@
             @Origin int origin = ORIGIN_MANUAL;
             UnixEpochTime unixEpochTime = timeState.getUnixEpochTime();
             setSystemClockAndConfidenceUnderWakeLock(
-                    origin, unixEpochTime, confidence, "setTimeZoneState()");
+                    origin, unixEpochTime, confidence, "setTimeState()");
         } finally {
             mEnvironment.releaseWakeLock();
         }
@@ -421,6 +421,57 @@
         }
     }
 
+    @GuardedBy("this")
+    private void notifyStateChangeListenersAsynchronously() {
+        for (StateChangeListener listener : mStateChangeListeners) {
+            // This is queuing asynchronous notification, so no need to surrender the "this" lock.
+            mEnvironment.runAsync(listener::onChange);
+        }
+    }
+
+    @Override
+    public synchronized void addChangeListener(@NonNull StateChangeListener listener) {
+        mStateChangeListeners.add(listener);
+    }
+
+    @Override
+    public synchronized TimeCapabilitiesAndConfig getCapabilitiesAndConfig(@UserIdInt int userId,
+            boolean bypassUserPolicyChecks) {
+        ConfigurationInternal configurationInternal;
+        if (mCurrentConfigurationInternal.getUserId() == userId) {
+            // Use the cached snapshot we have.
+            configurationInternal = mCurrentConfigurationInternal;
+        } else {
+            // This is not a common case: It would be unusual to want the configuration for a user
+            // other than the "current" user, but it is supported because it is trivial to do so.
+            // Unlike the current user config, there's no cached copy to worry about so read it
+            // directly from mServiceConfigAccessor.
+            configurationInternal = mServiceConfigAccessor.getConfigurationInternal(userId);
+        }
+        return configurationInternal.createCapabilitiesAndConfig(bypassUserPolicyChecks);
+    }
+
+    @Override
+    public synchronized boolean updateConfiguration(@UserIdInt int userId,
+            @NonNull TimeConfiguration configuration, boolean bypassUserPolicyChecks) {
+        // Write-through
+        boolean updateSuccessful = mServiceConfigAccessor.updateConfiguration(
+                userId, configuration, bypassUserPolicyChecks);
+
+        // The update above will trigger config update listeners asynchronously if they are needed,
+        // but that could mean an immediate call to getCapabilitiesAndConfig() for the current user
+        // wouldn't see the update. So, handle the cache update and notifications here. When the
+        // async update listener triggers it will find everything already up to date and do nothing.
+        if (updateSuccessful) {
+            String logMsg = "updateConfiguration:"
+                    + " userId=" + userId
+                    + ", configuration=" + configuration
+                    + ", bypassUserPolicyChecks=" + bypassUserPolicyChecks;
+            updateCurrentConfigurationInternalIfRequired(logMsg);
+        }
+        return updateSuccessful;
+    }
+
     @Override
     public synchronized void suggestTelephonyTime(@NonNull TelephonyTimeSuggestion suggestion) {
         // Empty time suggestion means that telephony network connectivity has been lost.
@@ -448,26 +499,49 @@
         doAutoTimeDetection(reason);
     }
 
-    private synchronized void handleConfigurationInternalChanged() {
-        ConfigurationInternal currentUserConfig =
-                mEnvironment.getCurrentUserConfigurationInternal();
-        String logMsg = "handleConfigurationInternalChanged:"
-                + " oldConfiguration=" + mCurrentConfigurationInternal
-                + ", newConfiguration=" + currentUserConfig;
-        addDebugLogEntry(logMsg);
-        mCurrentConfigurationInternal = currentUserConfig;
+    /**
+     * Handles a configuration change notification.
+     */
+    private synchronized void handleConfigurationInternalMaybeChanged() {
+        String logMsg = "handleConfigurationInternalMaybeChanged:";
+        updateCurrentConfigurationInternalIfRequired(logMsg);
+    }
 
-        boolean autoDetectionEnabled =
-                mCurrentConfigurationInternal.getAutoDetectionEnabledBehavior();
-        // When automatic time detection is enabled we update the system clock instantly if we can.
-        // Conversely, when automatic time detection is disabled we leave the clock as it is.
-        if (autoDetectionEnabled) {
-            String reason = "Auto time zone detection config changed.";
-            doAutoTimeDetection(reason);
-        } else {
-            // CLOCK_PARANOIA: We are losing "control" of the system clock so we cannot predict what
-            // it should be in future.
-            mLastAutoSystemClockTimeSet = null;
+    @GuardedBy("this")
+    private void updateCurrentConfigurationInternalIfRequired(@NonNull String logMsg) {
+        ConfigurationInternal newCurrentConfigurationInternal =
+                mServiceConfigAccessor.getCurrentUserConfigurationInternal();
+        // mCurrentConfigurationInternal is null the first time this method is called.
+        ConfigurationInternal oldCurrentConfigurationInternal = mCurrentConfigurationInternal;
+
+        // If the configuration actually changed, update the cached copy synchronously and do
+        // other necessary house-keeping / (async) listener notifications.
+        if (!newCurrentConfigurationInternal.equals(oldCurrentConfigurationInternal)) {
+            mCurrentConfigurationInternal = newCurrentConfigurationInternal;
+
+            logMsg = new StringBuilder(logMsg)
+                    .append(" [oldConfiguration=").append(oldCurrentConfigurationInternal)
+                    .append(", newConfiguration=").append(newCurrentConfigurationInternal)
+                    .append("]")
+                    .toString();
+            addDebugLogEntry(logMsg);
+
+            // The configuration and maybe the status changed so notify listeners.
+            notifyStateChangeListenersAsynchronously();
+
+            boolean autoDetectionEnabled =
+                    mCurrentConfigurationInternal.getAutoDetectionEnabledBehavior();
+            // When automatic time detection is enabled we update the system clock instantly if we
+            // can. Conversely, when automatic time detection is disabled we leave the clock as it
+            // is.
+            if (autoDetectionEnabled) {
+                String reason = "Auto time detection config changed.";
+                doAutoTimeDetection(reason);
+            } else {
+                // CLOCK_PARANOIA: We are losing "control" of the system clock so we cannot predict
+                // what it should be in future.
+                mLastAutoSystemClockTimeSet = null;
+            }
         }
     }
 
@@ -489,13 +563,11 @@
         ipw.println("[Capabilities="
                 + mCurrentConfigurationInternal.createCapabilitiesAndConfig(bypassUserPolicyChecks)
                 + "]");
-        long elapsedRealtimeMillis = mEnvironment.elapsedRealtimeMillis();
-        ipw.printf("mEnvironment.elapsedRealtimeMillis()=%s (%s)\n",
-                Duration.ofMillis(elapsedRealtimeMillis), elapsedRealtimeMillis);
-        long systemClockMillis = mEnvironment.systemClockMillis();
-        ipw.printf("mEnvironment.systemClockMillis()=%s (%s)\n",
-                Instant.ofEpochMilli(systemClockMillis), systemClockMillis);
-        ipw.println("mEnvironment.systemClockConfidence()=" + mEnvironment.systemClockConfidence());
+
+        ipw.println("mEnvironment:");
+        ipw.increaseIndent();
+        mEnvironment.dumpDebugLog(ipw);
+        ipw.decreaseIndent();
 
         ipw.println("Time change log:");
         ipw.increaseIndent(); // level 2
@@ -525,6 +597,11 @@
         ipw.decreaseIndent(); // level 1
     }
 
+    @VisibleForTesting
+    public synchronized ConfigurationInternal getCachedCapabilitiesAndConfigForTests() {
+        return mCurrentConfigurationInternal;
+    }
+
     @GuardedBy("this")
     private boolean storeTelephonySuggestion(@NonNull TelephonyTimeSuggestion suggestion) {
         UnixEpochTime newUnixEpochTime = suggestion.getUnixEpochTime();
diff --git a/services/core/java/com/android/server/timezonedetector/location/LocationTimeZoneProviderController.java b/services/core/java/com/android/server/timezonedetector/location/LocationTimeZoneProviderController.java
index ed7ea00..36658b2 100644
--- a/services/core/java/com/android/server/timezonedetector/location/LocationTimeZoneProviderController.java
+++ b/services/core/java/com/android/server/timezonedetector/location/LocationTimeZoneProviderController.java
@@ -303,8 +303,7 @@
     private void reportSuggestionEvent(
             @NonNull GeolocationTimeZoneSuggestion suggestion, @NonNull String reason) {
         LocationTimeZoneAlgorithmStatus algorithmStatus = generateCurrentAlgorithmStatus();
-        LocationAlgorithmEvent event = new LocationAlgorithmEvent(
-                algorithmStatus, suggestion);
+        LocationAlgorithmEvent event = new LocationAlgorithmEvent(algorithmStatus, suggestion);
         event.addDebugInfo(reason);
         reportEvent(event);
     }
@@ -728,20 +727,35 @@
         // Start the uncertainty timeout if needed to ensure the controller will eventually make an
         // uncertain suggestion if no success event arrives in time to counteract it.
         if (!mUncertaintyTimeoutQueue.hasQueued()) {
-            debugLog("Starting uncertainty timeout: reason=" + reason);
+            if (STATE_UNCERTAIN.equals(mState.get())) {
+                // If the controller is already uncertain, there's no reason to start a timeout;
+                // just forward the suggestion immediately to make it obvious in the logs what has
+                // happened. Making a new suggestion potentially captures new LTZP status info.
+                GeolocationTimeZoneSuggestion suggestion =
+                        GeolocationTimeZoneSuggestion.createUncertainSuggestion(
+                                uncertaintyStartedElapsedMillis);
+                String debugInfo = "Uncertainty received from " + provider.getName() + ":"
+                        + " primary=" + mPrimaryProvider
+                        + ", secondary=" + mSecondaryProvider
+                        + ", uncertaintyStarted="
+                        + Duration.ofMillis(uncertaintyStartedElapsedMillis);
+                reportSuggestionEvent(suggestion, debugInfo);
+            } else {
+                debugLog("Starting uncertainty timeout: reason=" + reason);
 
-            Duration uncertaintyDelay = mEnvironment.getUncertaintyDelay();
-            mUncertaintyTimeoutQueue.runDelayed(
-                    () -> onProviderUncertaintyTimeout(
-                            provider, uncertaintyStartedElapsedMillis, uncertaintyDelay),
-                    uncertaintyDelay.toMillis());
+                Duration uncertaintyDelay = mEnvironment.getUncertaintyDelay();
+                mUncertaintyTimeoutQueue.runDelayed(
+                        () -> onProviderUncertaintyTimeout(
+                                provider, uncertaintyStartedElapsedMillis, uncertaintyDelay),
+                        uncertaintyDelay.toMillis());
+            }
         }
 
         if (provider == mPrimaryProvider) {
             // (Try to) start the secondary. It could already be started, or enabling might not
             // succeed if the provider has previously reported it is perm failed. The uncertainty
-            // timeout (set above) is used to ensure that an uncertain suggestion will be made if
-            // the secondary cannot generate a success event in time.
+            // timeout (may be set above) is used to ensure that an uncertain suggestion will be
+            // made if the secondary cannot generate a success event in time.
             tryStartProvider(mSecondaryProvider, mCurrentUserConfiguration);
         }
     }
diff --git a/services/core/java/com/android/server/tv/TvInputHardwareManager.java b/services/core/java/com/android/server/tv/TvInputHardwareManager.java
index d63a908..0ab6d57 100755
--- a/services/core/java/com/android/server/tv/TvInputHardwareManager.java
+++ b/services/core/java/com/android/server/tv/TvInputHardwareManager.java
@@ -396,6 +396,16 @@
         }
     }
 
+    public void updateInputInfo(TvInputInfo info) {
+        synchronized (mLock) {
+            if (!mInputMap.containsKey(info.getId())) {
+                return;
+            }
+            Slog.w(TAG, "update inputInfo for input id " + info.getId());
+            mInputMap.put(info.getId(), info);
+        }
+    }
+
     /**
      * Create a TvInputHardware object with a specific deviceId. One service at a time can access
      * the object, and if more than one process attempts to create hardware with the same deviceId,
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index a05bd2d..f36ecf7 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -155,6 +155,12 @@
     // ID of the current user.
     @GuardedBy("mLock")
     private int mCurrentUserId = UserHandle.USER_SYSTEM;
+    @GuardedBy("mLock")
+    // ID of the current input displayed on the screen.
+    private String mCurrentInputId = null;
+    @GuardedBy("mLock")
+    // SessionState of the currently active TIS session.
+    private SessionState mCurrentSessionState = null;
     // IDs of the running profiles. Their parent user ID should be mCurrentUserId.
     @GuardedBy("mLock")
     private final Set<Integer> mRunningProfiles = new HashSet<>();
@@ -884,6 +890,10 @@
                 sessionState.session = null;
             }
         }
+        logExternalInputEvent(FrameworkStatsLog.EXTERNAL_TV_INPUT_EVENT__EVENT_TYPE__RELEASED,
+                mCurrentInputId, sessionState);
+        mCurrentInputId = null;
+        mCurrentSessionState = null;
         removeSessionStateLocked(sessionToken, userId);
         return sessionState;
     }
@@ -1065,8 +1075,20 @@
             Slog.e(TAG, "failed to set input info - unknown input id " + inputId);
             return;
         }
+        boolean currentCecTvInputInfoUpdated = isCurrentCecTvInputInfoUpdate(userState, inputInfo);
         inputState.info = inputInfo;
         inputState.uid = getInputUid(inputInfo);
+        ServiceState serviceState = userState.serviceStateMap.get(inputInfo.getComponent());
+        if (serviceState != null && serviceState.isHardware) {
+            serviceState.hardwareInputMap.put(inputInfo.getId(), inputInfo);
+            mTvInputHardwareManager.updateInputInfo(inputInfo);
+        }
+
+        if (currentCecTvInputInfoUpdated) {
+            logExternalInputEvent(
+                    FrameworkStatsLog.EXTERNAL_TV_INPUT_EVENT__EVENT_TYPE__DEVICE_INFO_UPDATED,
+                    mCurrentInputId, mCurrentSessionState);
+        }
 
         int n = userState.mCallbacks.beginBroadcast();
         for (int i = 0; i < n; ++i) {
@@ -1080,6 +1102,29 @@
     }
 
     @GuardedBy("mLock")
+    private boolean isCurrentCecTvInputInfoUpdate(UserState userState, TvInputInfo newInputInfo) {
+        if (newInputInfo == null || newInputInfo.getId() == null
+                || !newInputInfo.getId().equals(mCurrentInputId)) {
+            return false;
+        }
+        if (newInputInfo.getHdmiDeviceInfo() == null
+                || !newInputInfo.getHdmiDeviceInfo().isCecDevice()) {
+            return false;
+        }
+        TvInputState inputState = userState.inputMap.get(mCurrentInputId);
+        if (inputState == null || inputState.info == null) {
+            return false;
+        }
+        if (inputState.info.getHdmiDeviceInfo() == null
+                || !inputState.info.getHdmiDeviceInfo().isCecDevice()) {
+            return false;
+        }
+        int newVendorId = newInputInfo.getHdmiDeviceInfo().getVendorId(),
+            currentVendorId = inputState.info.getHdmiDeviceInfo().getVendorId();
+        return newVendorId != currentVendorId;
+    }
+
+    @GuardedBy("mLock")
     private void setStateLocked(String inputId, int state, int userId) {
         UserState userState = getOrCreateUserStateLocked(userId);
         TvInputState inputState = userState.inputMap.get(inputId);
@@ -1096,6 +1141,24 @@
             return;
         }
         if (oldState != state) {
+            if (inputId.equals(mCurrentInputId)) {
+                logExternalInputEvent(
+                        FrameworkStatsLog
+                                .EXTERNAL_TV_INPUT_EVENT__EVENT_TYPE__CONNECTION_STATE_CHANGED,
+                        mCurrentInputId, mCurrentSessionState);
+            } else if (mCurrentInputId != null) {
+                TvInputInfo currentInputInfo = userState.inputMap.get(mCurrentInputId).info;
+                if (currentInputInfo != null && currentInputInfo.getHdmiDeviceInfo() != null
+                        && inputId.equals(currentInputInfo.getParentId())) {
+                    logExternalInputEvent(
+                            FrameworkStatsLog
+                                    .EXTERNAL_TV_INPUT_EVENT__EVENT_TYPE__CONNECTION_STATE_CHANGED,
+                            inputId, mCurrentSessionState);
+                    if (state == INPUT_STATE_CONNECTED_STANDBY) {
+                        mCurrentInputId = currentInputInfo.getParentId();
+                    }
+                }
+            }
             notifyInputStateChangedLocked(userState, inputId, state, null);
         }
     }
@@ -1759,10 +1822,18 @@
                         UserState userState = getOrCreateUserStateLocked(resolvedUserId);
                         SessionState sessionState = getSessionStateLocked(sessionToken, callingUid,
                                 userState);
+                        if (mCurrentInputId == null
+                                || !mCurrentInputId.equals(sessionState.inputId)) {
+                            mCurrentInputId = sessionState.inputId;
+                            logExternalInputEvent(
+                                    FrameworkStatsLog.EXTERNAL_TV_INPUT_EVENT__EVENT_TYPE__TUNED,
+                                    sessionState.inputId, sessionState);
+                        }
                         if (!sessionState.isCurrent
                                 || !Objects.equals(sessionState.currentChannel, channelUri)) {
                             sessionState.isCurrent = true;
                             sessionState.currentChannel = channelUri;
+                            mCurrentSessionState = sessionState;
                             notifyCurrentChannelInfosUpdatedLocked(userState);
                         }
                         if (TvContract.isChannelUriForPassthroughInput(channelUri)) {
@@ -2985,6 +3056,30 @@
                 hdmiPort);
     }
 
+    private void logExternalInputEvent(int eventType, String inputId, SessionState sessionState) {
+        UserState userState = getOrCreateUserStateLocked(sessionState.userId);
+        TvInputState tvInputState = userState.inputMap.get(inputId);
+        TvInputInfo tvInputInfo = tvInputState.info;
+        int inputState = tvInputState.state;
+        int inputType = tvInputInfo.getType();
+        // For non-CEC input, the value of vendorId is 0.
+        int vendorId = 0;
+        // For non-HDMI input, the value of hdmiPort is 0.
+        int hdmiPort = 0;
+        String tifSessionId = sessionState.sessionId;
+
+        if (tvInputInfo.getType() == TvInputInfo.TYPE_HDMI) {
+            HdmiDeviceInfo hdmiDeviceInfo = tvInputInfo.getHdmiDeviceInfo();
+            if (hdmiDeviceInfo != null) {
+                vendorId = hdmiDeviceInfo.getVendorId();
+                hdmiPort = hdmiDeviceInfo.getPortId();
+            }
+        }
+
+        FrameworkStatsLog.write(FrameworkStatsLog.EXTERNAL_TV_INPUT_EVENT, eventType, inputState,
+                inputType, vendorId, hdmiPort, tifSessionId);
+    }
+
     private static final class UserState {
         // A mapping from the TV input id to its TvInputState.
         private Map<String, TvInputState> inputMap = new HashMap<>();
@@ -3348,6 +3443,16 @@
                 synchronized (mLock) {
                     mTvInputHardwareManager.addHdmiInput(id, inputInfo);
                     addHardwareInputLocked(inputInfo);
+                    // catch the use case when a CEC device is unplugged from
+                    // an HDMI port, then plugged in to the same HDMI port.
+                    if (mCurrentInputId != null && mCurrentSessionState != null
+                            && mCurrentInputId.equals(inputInfo.getParentId())
+                            && inputInfo.getId().equals(mCurrentSessionState.inputId)) {
+                        logExternalInputEvent(
+                                FrameworkStatsLog.EXTERNAL_TV_INPUT_EVENT__EVENT_TYPE__TUNED,
+                                inputInfo.getId(), mCurrentSessionState);
+                        mCurrentInputId = inputInfo.getId();
+                    }
                 }
             } finally {
                 Binder.restoreCallingIdentity(identity);
@@ -3450,6 +3555,8 @@
                         UserState userState = getOrCreateUserStateLocked(mSessionState.userId);
                         mSessionState.isCurrent = true;
                         mSessionState.currentChannel = channelUri;
+                        mCurrentSessionState = mSessionState;
+                        mCurrentInputId = mSessionState.inputId;
                         notifyCurrentChannelInfosUpdatedLocked(userState);
                     }
                 } catch (RemoteException e) {
diff --git a/services/core/java/com/android/server/uri/TEST_MAPPING b/services/core/java/com/android/server/uri/TEST_MAPPING
index a9525f4a..b42d154 100644
--- a/services/core/java/com/android/server/uri/TEST_MAPPING
+++ b/services/core/java/com/android/server/uri/TEST_MAPPING
@@ -9,7 +9,7 @@
             ]
         },
         {
-            "name": "CtsAppSecurityHostTestCases",
+            "name": "CtsStorageHostTestCases",
             "options": [
                 {
                     "include-filter": "android.appsecurity.cts.ExternalStorageHostTest#testGrantUriPermission"
@@ -39,10 +39,10 @@
             ]
         },
         {
-            "name": "CtsWindowManagerDeviceTestCases",
+            "name": "CtsWindowManagerDeviceWindow",
             "options": [
                 {
-                    "include-filter": "android.server.wm.CrossAppDragAndDropTests"
+                    "include-filter": "android.server.wm.window.CrossAppDragAndDropTests"
                 }
             ]
         }
diff --git a/services/core/java/com/android/server/uri/UriPermissionOwner.java b/services/core/java/com/android/server/uri/UriPermissionOwner.java
index d22bb58..b5e7cb0 100644
--- a/services/core/java/com/android/server/uri/UriPermissionOwner.java
+++ b/services/core/java/com/android/server/uri/UriPermissionOwner.java
@@ -155,18 +155,22 @@
 
     public void removeReadPermission(UriPermission perm) {
         synchronized (this) {
-            mReadPerms.remove(perm);
-            if (mReadPerms.isEmpty()) {
-                mReadPerms = null;
+            if (mReadPerms != null) {
+                mReadPerms.remove(perm);
+                if (mReadPerms.isEmpty()) {
+                    mReadPerms = null;
+                }
             }
         }
     }
 
     public void removeWritePermission(UriPermission perm) {
         synchronized (this) {
-            mWritePerms.remove(perm);
-            if (mWritePerms.isEmpty()) {
-                mWritePerms = null;
+            if (mWritePerms != null) {
+                mWritePerms.remove(perm);
+                if (mWritePerms.isEmpty()) {
+                    mWritePerms = null;
+                }
             }
         }
     }
diff --git a/services/core/java/com/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter.java b/services/core/java/com/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter.java
index 160f4f9..111e075a 100644
--- a/services/core/java/com/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter.java
+++ b/services/core/java/com/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter.java
@@ -18,7 +18,6 @@
 
 import android.os.VibratorInfo;
 import android.os.vibrator.RampSegment;
-import android.os.vibrator.StepSegment;
 import android.os.vibrator.VibrationEffectSegment;
 import android.util.MathUtils;
 import android.util.Range;
@@ -26,38 +25,29 @@
 import java.util.List;
 
 /**
- * Adapter that clips frequency values to the ones specified by the
- * {@link VibratorInfo.FrequencyProfile}.
+ * Adapter that clips frequency values to the supported range specified by
+ * {@link VibratorInfo.FrequencyProfile}, then clips amplitude values to the max supported one at
+ * each frequency.
  *
- * <p>Devices with no frequency control will collapse all frequencies to the resonant frequency and
- * leave amplitudes unchanged.
+ * <p>The {@link VibratorInfo.FrequencyProfile} is only applicable to PWLE compositions. This
+ * adapter is only applied to {@link RampSegment} and all other segments will remain unchanged.
  */
-final class ClippingAmplitudeAndFrequencyAdapter
-        implements VibrationEffectAdapters.SegmentsAdapter<VibratorInfo> {
+final class ClippingAmplitudeAndFrequencyAdapter implements VibrationSegmentsAdapter {
 
     @Override
-    public int apply(List<VibrationEffectSegment> segments, int repeatIndex, VibratorInfo info) {
+    public int adaptToVibrator(VibratorInfo info, List<VibrationEffectSegment> segments,
+            int repeatIndex) {
         int segmentCount = segments.size();
         for (int i = 0; i < segmentCount; i++) {
             VibrationEffectSegment segment = segments.get(i);
-            if (segment instanceof StepSegment) {
-                segments.set(i, apply((StepSegment) segment, info));
-            } else if (segment instanceof RampSegment) {
-                segments.set(i, apply((RampSegment) segment, info));
+            if (segment instanceof RampSegment) {
+                segments.set(i, adaptToVibrator(info, (RampSegment) segment));
             }
         }
         return repeatIndex;
     }
 
-    private StepSegment apply(StepSegment segment, VibratorInfo info) {
-        float clampedFrequency = clampFrequency(info, segment.getFrequencyHz());
-        return new StepSegment(
-                clampAmplitude(info, clampedFrequency, segment.getAmplitude()),
-                clampedFrequency,
-                (int) segment.getDuration());
-    }
-
-    private RampSegment apply(RampSegment segment, VibratorInfo info) {
+    private RampSegment adaptToVibrator(VibratorInfo info, RampSegment segment) {
         float clampedStartFrequency = clampFrequency(info, segment.getStartFrequencyHz());
         float clampedEndFrequency = clampFrequency(info, segment.getEndFrequencyHz());
         return new RampSegment(
@@ -71,7 +61,7 @@
     private float clampFrequency(VibratorInfo info, float frequencyHz) {
         Range<Float> frequencyRangeHz = info.getFrequencyProfile().getFrequencyRangeHz();
         if (frequencyHz == 0 || frequencyRangeHz == null)  {
-            return info.getResonantFrequencyHz();
+            return Float.isNaN(info.getResonantFrequencyHz()) ? 0 : info.getResonantFrequencyHz();
         }
         return frequencyRangeHz.clamp(frequencyHz);
     }
diff --git a/services/core/java/com/android/server/vibrator/ComposePwleVibratorStep.java b/services/core/java/com/android/server/vibrator/ComposePwleVibratorStep.java
index 7100ffd..5d572be6 100644
--- a/services/core/java/com/android/server/vibrator/ComposePwleVibratorStep.java
+++ b/services/core/java/com/android/server/vibrator/ComposePwleVibratorStep.java
@@ -19,7 +19,6 @@
 import android.os.Trace;
 import android.os.VibrationEffect;
 import android.os.vibrator.RampSegment;
-import android.os.vibrator.StepSegment;
 import android.os.vibrator.VibrationEffectSegment;
 import android.util.Slog;
 
@@ -30,7 +29,7 @@
  * Represents a step to turn the vibrator on using a composition of PWLE segments.
  *
  * <p>This step will use the maximum supported number of consecutive segments of type
- * {@link StepSegment} or {@link RampSegment} starting at the current index.
+ * {@link RampSegment}, starting at the current index.
  */
 final class ComposePwleVibratorStep extends AbstractVibratorStep {
     /**
diff --git a/services/core/java/com/android/server/vibrator/DeviceAdapter.java b/services/core/java/com/android/server/vibrator/DeviceAdapter.java
new file mode 100644
index 0000000..98309cd
--- /dev/null
+++ b/services/core/java/com/android/server/vibrator/DeviceAdapter.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.vibrator;
+
+import android.annotation.NonNull;
+import android.os.CombinedVibration;
+import android.os.VibrationEffect;
+import android.os.VibratorInfo;
+import android.os.vibrator.VibrationEffectSegment;
+import android.util.Slog;
+import android.util.SparseArray;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Adapts a {@link CombinedVibration} to a device by transforming each {@link VibrationEffect} to
+ * the available device vibrator capabilities defined by {@link VibratorInfo}.
+ */
+final class DeviceAdapter implements CombinedVibration.VibratorAdapter {
+    private static final String TAG = "DeviceAdapter";
+
+    /**
+     * The VibratorController.getInfo might trigger HAL method calls, so just keep a reference to
+     * the system controllers until the adaptor is triggered by the VibrationThread.
+     */
+    private final SparseArray<VibratorController> mAvailableVibrators;
+    private final int[] mAvailableVibratorIds;
+
+    /**
+     * The actual adapters that can replace VibrationEffectSegment entries from a list based on the
+     * VibratorInfo. They can be applied in a chain to a mutable list before a new VibrationEffect
+     * instance is created with the final segment list.
+     */
+    private final List<VibrationSegmentsAdapter> mSegmentAdapters;
+
+    DeviceAdapter(VibrationSettings settings, SparseArray<VibratorController> vibrators) {
+        mSegmentAdapters = Arrays.asList(
+                // TODO(b/167947076): add filter that removes unsupported primitives
+                // TODO(b/167947076): add filter that replaces unsupported prebaked with fallback
+                // Convert segments based on device capabilities
+                new RampToStepAdapter(settings.getRampStepDuration()),
+                new StepToRampAdapter(),
+                // Add extra ramp down segments as needed
+                new RampDownAdapter(settings.getRampDownDuration(), settings.getRampStepDuration()),
+                // Split segments based on their duration and device supported limits
+                new SplitSegmentsAdapter(),
+                // Clip amplitudes and frequencies of final segments based on device bandwidth curve
+                new ClippingAmplitudeAndFrequencyAdapter()
+        );
+        mAvailableVibrators = vibrators;
+        mAvailableVibratorIds = new int[vibrators.size()];
+        for (int i = 0; i < vibrators.size(); i++) {
+            mAvailableVibratorIds[i] = vibrators.keyAt(i);
+        }
+    }
+
+    SparseArray<VibratorController> getAvailableVibrators() {
+        return mAvailableVibrators;
+    }
+
+    @Override
+    public int[] getAvailableVibratorIds() {
+        return mAvailableVibratorIds;
+    }
+
+    @NonNull
+    @Override
+    public VibrationEffect adaptToVibrator(int vibratorId, @NonNull VibrationEffect effect) {
+        if (!(effect instanceof VibrationEffect.Composed)) {
+            // Segments adapters can only apply to Composed effects.
+            Slog.wtf(TAG, "Error adapting unsupported vibration effect: " + effect);
+            return effect;
+        }
+
+        VibratorController controller = mAvailableVibrators.get(vibratorId);
+        if (controller == null) {
+            // Effect mapped to nonexistent vibrator, skip adapter.
+            return effect;
+        }
+
+        VibratorInfo info = controller.getVibratorInfo();
+        VibrationEffect.Composed composed = (VibrationEffect.Composed) effect;
+        List<VibrationEffectSegment> newSegments = new ArrayList<>(composed.getSegments());
+        int newRepeatIndex = composed.getRepeatIndex();
+
+        int adapterCount = mSegmentAdapters.size();
+        for (int i = 0; i < adapterCount; i++) {
+            newRepeatIndex =
+                    mSegmentAdapters.get(i).adaptToVibrator(info, newSegments, newRepeatIndex);
+        }
+
+        return new VibrationEffect.Composed(newSegments, newRepeatIndex);
+    }
+}
diff --git a/services/core/java/com/android/server/vibrator/DeviceVibrationEffectAdapter.java b/services/core/java/com/android/server/vibrator/DeviceVibrationEffectAdapter.java
deleted file mode 100644
index 24da261..0000000
--- a/services/core/java/com/android/server/vibrator/DeviceVibrationEffectAdapter.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.server.vibrator;
-
-import android.os.VibrationEffect;
-import android.os.VibratorInfo;
-
-import java.util.Arrays;
-import java.util.List;
-
-/** Adapts a {@link VibrationEffect} to a specific device, taking into account its capabilities. */
-final class DeviceVibrationEffectAdapter
-        implements VibrationEffectAdapters.EffectAdapter<VibratorInfo> {
-
-    private final List<VibrationEffectAdapters.SegmentsAdapter<VibratorInfo>> mSegmentAdapters;
-
-    DeviceVibrationEffectAdapter(VibrationSettings settings) {
-        mSegmentAdapters = Arrays.asList(
-                // TODO(b/167947076): add filter that removes unsupported primitives
-                // TODO(b/167947076): add filter that replaces unsupported prebaked with fallback
-                new RampToStepAdapter(settings.getRampStepDuration()),
-                new StepToRampAdapter(),
-                new RampDownAdapter(settings.getRampDownDuration(), settings.getRampStepDuration()),
-                new ClippingAmplitudeAndFrequencyAdapter()
-        );
-    }
-
-    @Override
-    public VibrationEffect apply(VibrationEffect effect, VibratorInfo info) {
-        return VibrationEffectAdapters.apply(effect, mSegmentAdapters, info);
-    }
-}
diff --git a/services/core/java/com/android/server/vibrator/HalVibration.java b/services/core/java/com/android/server/vibrator/HalVibration.java
index b803273..743d02d 100644
--- a/services/core/java/com/android/server/vibrator/HalVibration.java
+++ b/services/core/java/com/android/server/vibrator/HalVibration.java
@@ -26,9 +26,8 @@
 
 import com.android.internal.util.FrameworkStatsLog;
 
-import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.CountDownLatch;
-import java.util.function.Function;
 
 /**
  * Represents a vibration defined by a {@link CombinedVibration} that will be performed by
@@ -38,26 +37,28 @@
 
     public final SparseArray<VibrationEffect> mFallbacks = new SparseArray<>();
 
-    /** The actual effect to be played. */
-    @Nullable
-    private CombinedVibration mEffect;
+    /** A {@link CountDownLatch} to enable waiting for completion. */
+    private final CountDownLatch mCompletionLatch = new CountDownLatch(1);
+
+    /** The original effect that was requested, for debugging purposes. */
+    @NonNull
+    private final CombinedVibration mOriginalEffect;
 
     /**
-     * The original effect that was requested. Typically these two things differ because the effect
-     * was scaled based on the users vibration intensity settings.
+     * The scaled and adapted effect to be played. This should only be updated from a single thread,
+     * but can be read from different ones for debugging purposes.
      */
-    @Nullable
-    private CombinedVibration mOriginalEffect;
+    @NonNull
+    private volatile CombinedVibration mEffectToPlay;
 
     /** Vibration status. */
     private Vibration.Status mStatus;
 
-    /** A {@link CountDownLatch} to enable waiting for completion. */
-    private final CountDownLatch mCompletionLatch = new CountDownLatch(1);
-
-    HalVibration(@NonNull IBinder token, CombinedVibration effect, @NonNull CallerInfo callerInfo) {
+    HalVibration(@NonNull IBinder token, @NonNull CombinedVibration effect,
+            @NonNull CallerInfo callerInfo) {
         super(token, callerInfo);
-        this.mEffect = effect;
+        mOriginalEffect = effect;
+        mEffectToPlay = effect;
         mStatus = Vibration.Status.RUNNING;
     }
 
@@ -101,53 +102,35 @@
     }
 
     /**
-     * Applied update function to the current effect held by this vibration, and to each fallback
-     * effect added.
+     * Scales the {@link #getEffectToPlay()} and each fallback effect with a scaling transformation.
+     *
+     * @param scaler A {@link VibrationEffect.Transformation<Integer>} that takes one of the
+     *               {@code VibrationAttributes.USAGE_*} as the modifier to scale the effect
+     *               based on the user settings.
      */
-    public void updateEffects(Function<VibrationEffect, VibrationEffect> updateFn) {
-        CombinedVibration newEffect = transformCombinedEffect(mEffect, updateFn);
-        if (!newEffect.equals(mEffect)) {
-            if (mOriginalEffect == null) {
-                mOriginalEffect = mEffect;
-            }
-            mEffect = newEffect;
+    public void scaleEffects(VibrationEffect.Transformation<Integer> scaler) {
+        int vibrationUsage = callerInfo.attrs.getUsage();
+        CombinedVibration newEffect = mEffectToPlay.transform(scaler, vibrationUsage);
+        if (!Objects.equals(mEffectToPlay, newEffect)) {
+            mEffectToPlay = newEffect;
         }
         for (int i = 0; i < mFallbacks.size(); i++) {
-            mFallbacks.setValueAt(i, updateFn.apply(mFallbacks.valueAt(i)));
+            mFallbacks.setValueAt(i, scaler.transform(mFallbacks.valueAt(i), vibrationUsage));
         }
     }
 
     /**
-     * Creates a new {@link CombinedVibration} by applying the given transformation function
-     * to each {@link VibrationEffect}.
+     * Adapts the {@link #getEffectToPlay()} to the device using given vibrator adapter.
+     *
+     * @param deviceAdapter A {@link CombinedVibration.VibratorAdapter} that transforms vibration
+     *                      effects to device vibrators based on its capabilities.
      */
-    private static CombinedVibration transformCombinedEffect(
-            CombinedVibration combinedEffect, Function<VibrationEffect, VibrationEffect> fn) {
-        if (combinedEffect instanceof CombinedVibration.Mono) {
-            VibrationEffect effect = ((CombinedVibration.Mono) combinedEffect).getEffect();
-            return CombinedVibration.createParallel(fn.apply(effect));
-        } else if (combinedEffect instanceof CombinedVibration.Stereo) {
-            SparseArray<VibrationEffect> effects =
-                    ((CombinedVibration.Stereo) combinedEffect).getEffects();
-            CombinedVibration.ParallelCombination combination =
-                    CombinedVibration.startParallel();
-            for (int i = 0; i < effects.size(); i++) {
-                combination.addVibrator(effects.keyAt(i), fn.apply(effects.valueAt(i)));
-            }
-            return combination.combine();
-        } else if (combinedEffect instanceof CombinedVibration.Sequential) {
-            List<CombinedVibration> effects =
-                    ((CombinedVibration.Sequential) combinedEffect).getEffects();
-            CombinedVibration.SequentialCombination combination =
-                    CombinedVibration.startSequential();
-            for (CombinedVibration effect : effects) {
-                combination.addNext(transformCombinedEffect(effect, fn));
-            }
-            return combination.combine();
-        } else {
-            // Unknown combination, return same effect.
-            return combinedEffect;
+    public void adaptToDevice(CombinedVibration.VibratorAdapter deviceAdapter) {
+        CombinedVibration newEffect = mEffectToPlay.adapt(deviceAdapter);
+        if (!Objects.equals(mEffectToPlay, newEffect)) {
+            mEffectToPlay = newEffect;
         }
+        // No need to update fallback effects, they are already configured per device.
     }
 
     /** Return true is current status is different from {@link Status#RUNNING}. */
@@ -157,21 +140,21 @@
 
     @Override
     public boolean isRepeating() {
-        return mEffect.getDuration() == Long.MAX_VALUE;
+        return mOriginalEffect.getDuration() == Long.MAX_VALUE;
     }
 
     /** Return the effect that should be played by this vibration. */
-    @Nullable
-    public CombinedVibration getEffect() {
-        return mEffect;
+    public CombinedVibration getEffectToPlay() {
+        return mEffectToPlay;
     }
 
-    /**
-     * Return {@link Vibration.DebugInfo} with read-only debug information about this vibration.
-     */
+    /** Return {@link Vibration.DebugInfo} with read-only debug information about this vibration. */
     public Vibration.DebugInfo getDebugInfo() {
-        return new Vibration.DebugInfo(mStatus, stats, mEffect, mOriginalEffect, /* scale= */ 0,
-                callerInfo);
+        // Clear the original effect if it's the same as the effect that was played, for simplicity
+        CombinedVibration originalEffect =
+                Objects.equals(mOriginalEffect, mEffectToPlay) ? null : mOriginalEffect;
+        return new Vibration.DebugInfo(mStatus, stats, mEffectToPlay, originalEffect,
+                /* scale= */ 0, callerInfo);
     }
 
     /** Return {@link VibrationStats.StatsInfo} with read-only metrics about this vibration. */
diff --git a/services/core/java/com/android/server/vibrator/HapticFeedbackCustomization.java b/services/core/java/com/android/server/vibrator/HapticFeedbackCustomization.java
new file mode 100644
index 0000000..8be3b2d
--- /dev/null
+++ b/services/core/java/com/android/server/vibrator/HapticFeedbackCustomization.java
@@ -0,0 +1,202 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.vibrator;
+
+import android.annotation.Nullable;
+import android.content.res.Resources;
+import android.os.VibrationEffect;
+import android.os.vibrator.persistence.VibrationXmlParser;
+import android.text.TextUtils;
+import android.util.Slog;
+import android.util.SparseArray;
+import android.util.Xml;
+
+import com.android.internal.vibrator.persistence.XmlParserException;
+import com.android.internal.vibrator.persistence.XmlReader;
+import com.android.internal.vibrator.persistence.XmlValidator;
+import com.android.modules.utils.TypedXmlPullParser;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+
+/**
+ * Class that loads custom {@link VibrationEffect} to be performed for each
+ * {@link HapticFeedbackConstants} key.
+ *
+ * <p>The system has its default logic to get the {@link VibrationEffect} that will be played for a
+ * given haptic feedback constant. Devices may choose to override some or all of these supported
+ * haptic feedback vibrations via a customization XML.
+ *
+ * <p>The XML simply provides a mapping of a constant from {@link HapticFeedbackConstants} to its
+ * corresponding {@link VibrationEffect}. Its root tag should be `<haptic-feedback-constants>`. It
+ * should have one or more entries for customizing a haptic feedback constant. A customization is
+ * started by a `<constant id="X">` tag (where `X` is the haptic feedback constant being customized
+ * in this entry) and closed by </constant>. Between these two tags, there should be a valid XML
+ * serialization of a non-repeating {@link VibrationEffect}. Such a valid vibration serialization
+ * should be parse-able by {@link VibrationXmlParser}.
+ *
+ * The example below represents a valid customization for effect IDs 10 and 11.
+ *
+ * <pre>
+ *   {@code
+ *     <haptic-feedback-constants>
+ *          <constant id="10">
+ *              // Valid Vibration Serialization
+ *          </constant>
+ *          <constant id="11">
+ *              // Valid Vibration Serialization
+ *          </constant>
+ *     </haptic-feedback-constants>
+ *   }
+ * </pre>
+ *
+ * <p>After a successful parsing of the customization XML file, it returns a {@link SparseArray}
+ * that maps each customized haptic feedback effect ID to its respective {@link VibrationEffect}.
+ *
+ * @hide
+ */
+final class HapticFeedbackCustomization {
+    private static final String TAG = "HapticFeedbackCustomization";
+
+    /** The outer-most tag for haptic feedback customizations.  */
+    private static final String TAG_CONSTANTS = "haptic-feedback-constants";
+    /** The tag defining a customization for a single haptic feedback constant. */
+    private static final String TAG_CONSTANT = "constant";
+
+    /**
+     * Attribute for {@link TAG_CONSTANT}, specifying the haptic feedback constant to
+     * customize.
+     */
+    private static final String ATTRIBUTE_ID = "id";
+
+    /**
+     * Parses the haptic feedback vibration customization XML file for the device, and provides a
+     * mapping of the customized effect IDs to their respective {@link VibrationEffect}s.
+     *
+     * <p>This is potentially expensive, so avoid calling repeatedly. One call is enough, and the
+     * caller should process the returned mapping (if any) for further queries.
+     *
+     * @param res {@link Resources} object to be used for reading the device's resources.
+     * @return a {@link SparseArray} that maps each customized haptic feedback effect ID to its
+     *      respective {@link VibrationEffect}, or {@code null}, if the device has not configured
+     *      a file for haptic feedback constants customization.
+     * @throws {@link IOException} if an IO error occurs while parsing the customization XML.
+     * @throws {@link CustomizationParserException} for any non-IO error that occurs when parsing
+     *      the XML, like an invalid XML content or an invalid haptic feedback constant.
+     *
+     * @hide
+     */
+    @Nullable
+    static SparseArray<VibrationEffect> loadVibrations(Resources res)
+            throws CustomizationParserException, IOException {
+        try {
+            return loadVibrationsInternal(res);
+        } catch (VibrationXmlParser.VibrationXmlParserException
+                | XmlParserException
+                | XmlPullParserException e) {
+            throw new CustomizationParserException(
+                    "Error parsing haptic feedback customization file.", e);
+        }
+    }
+
+    @Nullable
+    private static SparseArray<VibrationEffect> loadVibrationsInternal(Resources res) throws
+            CustomizationParserException,
+            IOException,
+            VibrationXmlParser.VibrationXmlParserException,
+            XmlParserException,
+            XmlPullParserException {
+        String customizationFile =
+                res.getString(
+                        com.android.internal.R.string.config_hapticFeedbackCustomizationFile);
+        if (TextUtils.isEmpty(customizationFile)) {
+            Slog.d(TAG, "Customization file not configured.");
+            return null;
+        }
+
+        FileReader fileReader;
+        try {
+            fileReader = new FileReader(customizationFile);
+        } catch (FileNotFoundException e) {
+            Slog.d(TAG, "Specified customization file not found.");
+            return  null;
+        }
+
+        TypedXmlPullParser parser = Xml.newFastPullParser();
+        parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
+        parser.setInput(fileReader);
+
+        XmlReader.readDocumentStartTag(parser, TAG_CONSTANTS);
+        XmlValidator.checkTagHasNoUnexpectedAttributes(parser);
+        int rootDepth = parser.getDepth();
+
+        SparseArray<VibrationEffect> mapping = new SparseArray<>();
+        while (XmlReader.readNextTagWithin(parser, rootDepth)) {
+            XmlValidator.checkStartTag(parser, TAG_CONSTANT);
+            int customizationDepth = parser.getDepth();
+
+            // Only attribute in tag is the `id` attribute.
+            XmlValidator.checkTagHasNoUnexpectedAttributes(parser, ATTRIBUTE_ID);
+            int effectId = XmlReader.readAttributeIntNonNegative(parser, ATTRIBUTE_ID);
+            if (mapping.contains(effectId)) {
+                throw new CustomizationParserException(
+                        "Multiple customizations found for effect " + effectId);
+            }
+
+            // Move the parser one step into the `<constant>` tag.
+            XmlValidator.checkParserCondition(
+                    XmlReader.readNextTagWithin(parser, customizationDepth),
+                    "Unsupported empty customization tag");
+
+            VibrationEffect effect = VibrationXmlParser.parseTag(
+                    parser, VibrationXmlParser.FLAG_ALLOW_HIDDEN_APIS);
+            if (effect.getDuration() == Long.MAX_VALUE) {
+                throw new CustomizationParserException(String.format(
+                        "Vibration for effect ID %d is repeating, which is not allowed as a"
+                        + " haptic feedback: %s", effectId, effect));
+            }
+            mapping.put(effectId, effect);
+
+            XmlReader.readEndTag(parser, TAG_CONSTANT, customizationDepth);
+        }
+
+        // Make checks that the XML ends well.
+        XmlReader.readEndTag(parser, TAG_CONSTANTS, rootDepth);
+        XmlReader.readDocumentEndTag(parser);
+
+        return mapping;
+    }
+
+    /**
+     * Represents an error while parsing a haptic feedback customization XML.
+     *
+     * @hide
+     */
+    static final class CustomizationParserException extends Exception {
+        private CustomizationParserException(String message) {
+            super(message);
+        }
+
+        private CustomizationParserException(String message, Throwable cause) {
+            super(message, cause);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/vibrator/HapticFeedbackVibrationProvider.java b/services/core/java/com/android/server/vibrator/HapticFeedbackVibrationProvider.java
new file mode 100644
index 0000000..19dd0b2
--- /dev/null
+++ b/services/core/java/com/android/server/vibrator/HapticFeedbackVibrationProvider.java
@@ -0,0 +1,314 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.vibrator;
+
+import android.annotation.Nullable;
+import android.content.res.Resources;
+import android.os.VibrationAttributes;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.util.Slog;
+import android.util.SparseArray;
+import android.view.HapticFeedbackConstants;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Provides the {@link VibrationEffect} and {@link VibrationAttributes} for haptic feedback.
+ *
+ * @hide
+ */
+public final class HapticFeedbackVibrationProvider {
+    private static final String TAG = "HapticFeedbackVibrationProvider";
+
+    private static final VibrationAttributes TOUCH_VIBRATION_ATTRIBUTES =
+            VibrationAttributes.createForUsage(VibrationAttributes.USAGE_TOUCH);
+    private static final VibrationAttributes PHYSICAL_EMULATION_VIBRATION_ATTRIBUTES =
+            VibrationAttributes.createForUsage(VibrationAttributes.USAGE_PHYSICAL_EMULATION);
+    private static final VibrationAttributes HARDWARE_FEEDBACK_VIBRATION_ATTRIBUTES =
+            VibrationAttributes.createForUsage(VibrationAttributes.USAGE_HARDWARE_FEEDBACK);
+
+    private final Vibrator mVibrator;
+    private final boolean mHapticTextHandleEnabled;
+    // Vibrator effect for haptic feedback during boot when safe mode is enabled.
+    private final VibrationEffect mSafeModeEnabledVibrationEffect;
+    // Haptic feedback vibration customizations specific to the device.
+    // If present and valid, a vibration here will be used for an effect.
+    // Otherwise, the system's default vibration will be used.
+    @Nullable private final SparseArray<VibrationEffect> mHapticCustomizations;
+
+    /** @hide */
+    public HapticFeedbackVibrationProvider(Resources res, Vibrator vibrator) {
+        this(res, vibrator, loadHapticCustomizations(res));
+    }
+
+    /** @hide */
+    @VisibleForTesting HapticFeedbackVibrationProvider(
+            Resources res,
+            Vibrator vibrator,
+            @Nullable SparseArray<VibrationEffect> hapticCustomizations) {
+        mVibrator = vibrator;
+        mHapticTextHandleEnabled = res.getBoolean(
+                com.android.internal.R.bool.config_enableHapticTextHandle);
+
+        if (hapticCustomizations != null) {
+            // Clean up the customizations to remove vibrations which may not ever be used due to
+            // Vibrator properties or other device configurations.
+            removeUnsupportedVibrations(hapticCustomizations, vibrator);
+            if (hapticCustomizations.size() == 0) {
+                hapticCustomizations = null;
+            }
+        }
+        mHapticCustomizations = hapticCustomizations;
+
+        mSafeModeEnabledVibrationEffect =
+                effectHasCustomization(HapticFeedbackConstants.SAFE_MODE_ENABLED)
+                        ? mHapticCustomizations.get(HapticFeedbackConstants.SAFE_MODE_ENABLED)
+                        : VibrationSettings.createEffectFromResource(
+                                res,
+                                com.android.internal.R.array.config_safeModeEnabledVibePattern);
+    }
+
+    /**
+     * Provides the {@link VibrationEffect} for a given haptic feedback effect ID (provided in
+     * {@link HapticFeedbackConstants}).
+     *
+     * @param effectId the haptic feedback effect ID whose respective vibration we want to get.
+     * @return a {@link VibrationEffect} for the given haptic feedback effect ID, or {@code null} if
+     *          the provided effect ID is not supported.
+     */
+    @Nullable public VibrationEffect getVibrationForHapticFeedback(int effectId) {
+        switch (effectId) {
+            case HapticFeedbackConstants.CONTEXT_CLICK:
+            case HapticFeedbackConstants.GESTURE_END:
+            case HapticFeedbackConstants.GESTURE_THRESHOLD_ACTIVATE:
+            case HapticFeedbackConstants.SCROLL_TICK:
+            case HapticFeedbackConstants.SEGMENT_TICK:
+                return getVibration(effectId, VibrationEffect.EFFECT_TICK);
+
+            case HapticFeedbackConstants.TEXT_HANDLE_MOVE:
+                if (!mHapticTextHandleEnabled) {
+                    return null;
+                }
+                // fallthrough
+            case HapticFeedbackConstants.CLOCK_TICK:
+            case HapticFeedbackConstants.SEGMENT_FREQUENT_TICK:
+                return getVibration(effectId, VibrationEffect.EFFECT_TEXTURE_TICK);
+
+            case HapticFeedbackConstants.KEYBOARD_RELEASE:
+            case HapticFeedbackConstants.VIRTUAL_KEY_RELEASE:
+            case HapticFeedbackConstants.ENTRY_BUMP:
+            case HapticFeedbackConstants.DRAG_CROSSING:
+                return getVibration(
+                        effectId,
+                        VibrationEffect.EFFECT_TICK,
+                        /* fallbackForPredefinedEffect= */ false);
+
+            case HapticFeedbackConstants.KEYBOARD_TAP: // == KEYBOARD_PRESS
+            case HapticFeedbackConstants.VIRTUAL_KEY:
+            case HapticFeedbackConstants.EDGE_RELEASE:
+            case HapticFeedbackConstants.CALENDAR_DATE:
+            case HapticFeedbackConstants.CONFIRM:
+            case HapticFeedbackConstants.GESTURE_START:
+            case HapticFeedbackConstants.SCROLL_ITEM_FOCUS:
+            case HapticFeedbackConstants.SCROLL_LIMIT:
+                return getVibration(effectId, VibrationEffect.EFFECT_CLICK);
+
+            case HapticFeedbackConstants.LONG_PRESS:
+            case HapticFeedbackConstants.LONG_PRESS_POWER_BUTTON:
+            case HapticFeedbackConstants.DRAG_START:
+            case HapticFeedbackConstants.EDGE_SQUEEZE:
+                return getVibration(effectId, VibrationEffect.EFFECT_HEAVY_CLICK);
+
+            case HapticFeedbackConstants.REJECT:
+                return getVibration(effectId, VibrationEffect.EFFECT_DOUBLE_CLICK);
+
+            case HapticFeedbackConstants.SAFE_MODE_ENABLED:
+                return mSafeModeEnabledVibrationEffect;
+
+            case HapticFeedbackConstants.ASSISTANT_BUTTON:
+                return getAssistantButtonVibration();
+
+            case HapticFeedbackConstants.GESTURE_THRESHOLD_DEACTIVATE:
+                return getVibration(
+                        effectId,
+                        VibrationEffect.Composition.PRIMITIVE_TICK,
+                        /* primitiveScale= */ 0.4f,
+                        VibrationEffect.EFFECT_TEXTURE_TICK);
+
+            case HapticFeedbackConstants.TOGGLE_ON:
+                return getVibration(
+                        effectId,
+                        VibrationEffect.Composition.PRIMITIVE_TICK,
+                        /* primitiveScale= */ 0.5f,
+                        VibrationEffect.EFFECT_TICK);
+
+            case HapticFeedbackConstants.TOGGLE_OFF:
+                return getVibration(
+                        effectId,
+                        VibrationEffect.Composition.PRIMITIVE_LOW_TICK,
+                        /* primitiveScale= */ 0.2f,
+                        VibrationEffect.EFFECT_TEXTURE_TICK);
+
+            case HapticFeedbackConstants.NO_HAPTICS:
+            default:
+                return null;
+        }
+    }
+
+    /**
+     * Provides the {@link VibrationAttributes} that should be used for a haptic feedback.
+     *
+     * @param effectId the haptic feedback effect ID whose respective vibration attributes we want
+     *      to get.
+     * @param bypassVibrationIntensitySetting {@code true} if the returned attribute should bypass
+     *      vibration intensity settings. {@code false} otherwise.
+     * @return the {@link VibrationAttributes} that should be used for the provided haptic feedback.
+     */
+    public VibrationAttributes getVibrationAttributesForHapticFeedback(
+            int effectId, boolean bypassVibrationIntensitySetting) {
+        VibrationAttributes attrs;
+        switch (effectId) {
+            case HapticFeedbackConstants.EDGE_SQUEEZE:
+            case HapticFeedbackConstants.EDGE_RELEASE:
+                attrs = PHYSICAL_EMULATION_VIBRATION_ATTRIBUTES;
+                break;
+            case HapticFeedbackConstants.ASSISTANT_BUTTON:
+            case HapticFeedbackConstants.LONG_PRESS_POWER_BUTTON:
+            case HapticFeedbackConstants.SCROLL_TICK:
+            case HapticFeedbackConstants.SCROLL_ITEM_FOCUS:
+            case HapticFeedbackConstants.SCROLL_LIMIT:
+                attrs = HARDWARE_FEEDBACK_VIBRATION_ATTRIBUTES;
+                break;
+            default:
+                attrs = TOUCH_VIBRATION_ATTRIBUTES;
+        }
+        if (bypassVibrationIntensitySetting) {
+            attrs = new VibrationAttributes.Builder(attrs)
+                    .setFlags(VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF)
+                    .build();
+        }
+        return attrs;
+    }
+
+    /** Dumps relevant state. */
+    public void dump(String prefix, PrintWriter pw) {
+        pw.print("mHapticTextHandleEnabled="); pw.println(mHapticTextHandleEnabled);
+    }
+
+    private VibrationEffect getVibration(int effectId, int predefinedVibrationEffectId) {
+        return getVibration(
+                effectId, predefinedVibrationEffectId, /* fallbackForPredefinedEffect= */ true);
+    }
+
+    /**
+     * Returns the customized vibration for {@code hapticFeedbackId}, or
+     * {@code predefinedVibrationEffectId} if a customization does not exist for the haptic
+     * feedback.
+     *
+     * <p>If a customization does not exist and the default predefined effect is to be returned,
+     * {@code fallbackForPredefinedEffect} will be used to decide whether or not to fallback
+     * to a generic pattern if the predefined effect is not hardware supported.
+     *
+     * @see VibrationEffect#get(int, boolean)
+     */
+    private VibrationEffect getVibration(
+            int hapticFeedbackId,
+            int predefinedVibrationEffectId,
+            boolean fallbackForPredefinedEffect) {
+        if (effectHasCustomization(hapticFeedbackId)) {
+            return mHapticCustomizations.get(hapticFeedbackId);
+        }
+        return VibrationEffect.get(predefinedVibrationEffectId, fallbackForPredefinedEffect);
+    }
+
+    /**
+     * Returns the customized vibration for {@code hapticFeedbackId}, or some fallback vibration if
+     * a customization does not exist for the ID.
+     *
+     * <p>The fallback will be a primitive composition formed of {@code primitiveId} and
+     * {@code primitiveScale}, if the primitive is supported. Otherwise, it will be a predefined
+     * vibration of {@code elsePredefinedVibrationEffectId}.
+     */
+    private VibrationEffect getVibration(
+            int hapticFeedbackId,
+            int primitiveId,
+            float primitiveScale,
+            int elsePredefinedVibrationEffectId) {
+        if (effectHasCustomization(hapticFeedbackId)) {
+            return mHapticCustomizations.get(hapticFeedbackId);
+        }
+        if (mVibrator.areAllPrimitivesSupported(primitiveId)) {
+            return VibrationEffect.startComposition()
+                    .addPrimitive(primitiveId, primitiveScale)
+                    .compose();
+        } else {
+            return VibrationEffect.get(elsePredefinedVibrationEffectId);
+        }
+    }
+
+    private VibrationEffect getAssistantButtonVibration() {
+        if (effectHasCustomization(HapticFeedbackConstants.ASSISTANT_BUTTON)) {
+            return mHapticCustomizations.get(HapticFeedbackConstants.ASSISTANT_BUTTON);
+        }
+        if (mVibrator.areAllPrimitivesSupported(
+                VibrationEffect.Composition.PRIMITIVE_QUICK_RISE,
+                VibrationEffect.Composition.PRIMITIVE_TICK)) {
+            // quiet ramp, short pause, then sharp tick
+            return VibrationEffect.startComposition()
+                    .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_RISE, 0.25f)
+                    .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1f, 50)
+                    .compose();
+        }
+        // fallback for devices without composition support
+        return VibrationEffect.get(VibrationEffect.EFFECT_HEAVY_CLICK);
+    }
+
+    private boolean effectHasCustomization(int effectId) {
+        return mHapticCustomizations != null && mHapticCustomizations.contains(effectId);
+    }
+
+    @Nullable
+    private static SparseArray<VibrationEffect> loadHapticCustomizations(Resources res) {
+        try {
+            return HapticFeedbackCustomization.loadVibrations(res);
+        } catch (IOException | HapticFeedbackCustomization.CustomizationParserException e) {
+            Slog.e(TAG, "Unable to load haptic customizations.", e);
+            return null;
+        }
+    }
+
+    private static void removeUnsupportedVibrations(
+            SparseArray<VibrationEffect> customizations, Vibrator vibrator) {
+        Set<Integer> keysToRemove = new HashSet<>();
+        for (int i = 0; i < customizations.size(); i++) {
+            int key = customizations.keyAt(i);
+            if (!vibrator.areVibrationFeaturesSupported(customizations.get(key))) {
+                keysToRemove.add(key);
+            }
+        }
+
+        for (int key : keysToRemove) {
+            customizations.remove(key);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/vibrator/OWNERS b/services/core/java/com/android/server/vibrator/OWNERS
index 08f0a90..9afa682 100644
--- a/services/core/java/com/android/server/vibrator/OWNERS
+++ b/services/core/java/com/android/server/vibrator/OWNERS
@@ -1,3 +1,6 @@
+# Bug component: 345036
+
 lsandrade@google.com
 michaelwr@google.com
-sbowden@google.com
\ No newline at end of file
+sbowden@google.com
+khalilahmad@google.com
\ No newline at end of file
diff --git a/services/core/java/com/android/server/vibrator/RampDownAdapter.java b/services/core/java/com/android/server/vibrator/RampDownAdapter.java
index 8fec162..3d8d717 100644
--- a/services/core/java/com/android/server/vibrator/RampDownAdapter.java
+++ b/services/core/java/com/android/server/vibrator/RampDownAdapter.java
@@ -42,7 +42,7 @@
  * be used to bring the amplitude down to zero. This ensures that the transition from the last
  * amplitude to zero will be handled by the same vibrate method.
  */
-final class RampDownAdapter implements VibrationEffectAdapters.SegmentsAdapter<VibratorInfo> {
+final class RampDownAdapter implements VibrationSegmentsAdapter {
     private final int mRampDownDuration;
     private final int mStepDuration;
 
@@ -52,8 +52,8 @@
     }
 
     @Override
-    public int apply(List<VibrationEffectSegment> segments, int repeatIndex,
-            VibratorInfo info) {
+    public int adaptToVibrator(VibratorInfo info, List<VibrationEffectSegment> segments,
+            int repeatIndex) {
         if (mRampDownDuration <= 0) {
             // Nothing to do, no ramp down duration configured.
             return repeatIndex;
diff --git a/services/core/java/com/android/server/vibrator/RampToStepAdapter.java b/services/core/java/com/android/server/vibrator/RampToStepAdapter.java
index c943bb2..fc19e27 100644
--- a/services/core/java/com/android/server/vibrator/RampToStepAdapter.java
+++ b/services/core/java/com/android/server/vibrator/RampToStepAdapter.java
@@ -28,11 +28,13 @@
 import java.util.List;
 
 /**
- * Adapter that converts ramp segments that to a sequence of fixed step segments.
+ * Adapter that converts ramp segments to a sequence of fixed step segments.
  *
- * <p>This leaves the list unchanged if the device has compose PWLE capability.
+ * <p>This change preserves the frequency parameters by interpolating the ramp values.
+ *
+ * <p>The segments will not be changed if the device has {@link IVibrator#CAP_COMPOSE_PWLE_EFFECTS}.
  */
-final class RampToStepAdapter implements VibrationEffectAdapters.SegmentsAdapter<VibratorInfo> {
+final class RampToStepAdapter implements VibrationSegmentsAdapter {
 
     private final int mStepDuration;
 
@@ -41,8 +43,8 @@
     }
 
     @Override
-    public int apply(List<VibrationEffectSegment> segments, int repeatIndex,
-            VibratorInfo info) {
+    public int adaptToVibrator(VibratorInfo info, List<VibrationEffectSegment> segments,
+            int repeatIndex) {
         if (info.hasCapability(IVibrator.CAP_COMPOSE_PWLE_EFFECTS)) {
             // The vibrator have PWLE capability, so keep the segments unchanged.
             return repeatIndex;
@@ -53,7 +55,7 @@
             if (!(segment instanceof RampSegment)) {
                 continue;
             }
-            List<StepSegment> steps = apply(info, (RampSegment) segment);
+            List<StepSegment> steps = convertRampToSteps(info, (RampSegment) segment);
             segments.remove(i);
             segments.addAll(i, steps);
             int addedSegments = steps.size() - 1;
@@ -66,7 +68,7 @@
         return repeatIndex;
     }
 
-    private List<StepSegment> apply(VibratorInfo info, RampSegment ramp) {
+    private List<StepSegment> convertRampToSteps(VibratorInfo info, RampSegment ramp) {
         if (Float.compare(ramp.getStartAmplitude(), ramp.getEndAmplitude()) == 0) {
             // Amplitude is the same, so return a single step to simulate this ramp.
             return Arrays.asList(
@@ -94,6 +96,9 @@
     }
 
     private static float fillEmptyFrequency(VibratorInfo info, float frequencyHz) {
+        if (Float.isNaN(info.getResonantFrequencyHz())) {
+            return 0;
+        }
         return frequencyHz == 0 ? info.getResonantFrequencyHz() : frequencyHz;
     }
 }
diff --git a/services/core/java/com/android/server/vibrator/SetAmplitudeVibratorStep.java b/services/core/java/com/android/server/vibrator/SetAmplitudeVibratorStep.java
index 6d01123..e13ec6c 100644
--- a/services/core/java/com/android/server/vibrator/SetAmplitudeVibratorStep.java
+++ b/services/core/java/com/android/server/vibrator/SetAmplitudeVibratorStep.java
@@ -37,7 +37,7 @@
      * The repeating waveform keeps the vibrator ON all the time. Use a minimum duration to
      * prevent short patterns from turning the vibrator ON too frequently.
      */
-    private static final int REPEATING_EFFECT_ON_DURATION = 5000; // 5s
+    static final int REPEATING_EFFECT_ON_DURATION = 5000; // 5s
 
     SetAmplitudeVibratorStep(VibrationStepConductor conductor, long startTime,
             VibratorController controller, VibrationEffect.Composed effect, int index,
diff --git a/services/core/java/com/android/server/vibrator/SplitSegmentsAdapter.java b/services/core/java/com/android/server/vibrator/SplitSegmentsAdapter.java
new file mode 100644
index 0000000..347db35
--- /dev/null
+++ b/services/core/java/com/android/server/vibrator/SplitSegmentsAdapter.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.vibrator;
+
+import android.hardware.vibrator.IVibrator;
+import android.os.VibratorInfo;
+import android.os.vibrator.RampSegment;
+import android.os.vibrator.VibrationEffectSegment;
+import android.util.MathUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Adapter that splits segments with longer duration than the device capabilities.
+ *
+ * <p>This transformation replaces large {@link RampSegment} entries by a sequence of smaller
+ * ramp segments that starts and ends at the same amplitudes/frequencies, interpolating the
+ * intermediate values.
+ *
+ * <p>The segments will not be changed if the device doesn't have
+ * {@link IVibrator#CAP_COMPOSE_PWLE_EFFECTS}.
+ */
+final class SplitSegmentsAdapter implements VibrationSegmentsAdapter {
+
+    @Override
+    public int adaptToVibrator(VibratorInfo info, List<VibrationEffectSegment> segments,
+            int repeatIndex) {
+        if (!info.hasCapability(IVibrator.CAP_COMPOSE_PWLE_EFFECTS)) {
+            // The vibrator does not have PWLE capability, so keep the segments unchanged.
+            return repeatIndex;
+        }
+        int maxRampDuration = info.getPwlePrimitiveDurationMax();
+        if (maxRampDuration <= 0) {
+            // No limit set to PWLE primitive duration.
+            return repeatIndex;
+        }
+
+        int segmentCount = segments.size();
+        for (int i = 0; i < segmentCount; i++) {
+            if (!(segments.get(i) instanceof RampSegment)) {
+                continue;
+            }
+            RampSegment ramp = (RampSegment) segments.get(i);
+            int splits = ((int) ramp.getDuration() + maxRampDuration - 1) / maxRampDuration;
+            if (splits <= 1) {
+                continue;
+            }
+            segments.remove(i);
+            segments.addAll(i, splitRampSegment(info, ramp, splits));
+            int addedSegments = splits - 1;
+            if (repeatIndex > i) {
+                repeatIndex += addedSegments;
+            }
+            i += addedSegments;
+            segmentCount += addedSegments;
+        }
+
+        return repeatIndex;
+    }
+
+    private static List<RampSegment> splitRampSegment(VibratorInfo info, RampSegment ramp,
+            int splits) {
+        List<RampSegment> ramps = new ArrayList<>(splits);
+        // Fill zero frequency values with the device resonant frequency before interpolating.
+        float startFrequencyHz = fillEmptyFrequency(info, ramp.getStartFrequencyHz());
+        float endFrequencyHz = fillEmptyFrequency(info, ramp.getEndFrequencyHz());
+        long splitDuration = ramp.getDuration() / splits;
+        float previousAmplitude = ramp.getStartAmplitude();
+        float previousFrequencyHz = startFrequencyHz;
+        long accumulatedDuration = 0;
+
+        for (int i = 1; i < splits; i++) {
+            accumulatedDuration += splitDuration;
+            float durationRatio = (float) accumulatedDuration / ramp.getDuration();
+            float interpolatedFrequency =
+                    MathUtils.lerp(startFrequencyHz, endFrequencyHz, durationRatio);
+            float interpolatedAmplitude =
+                    MathUtils.lerp(ramp.getStartAmplitude(), ramp.getEndAmplitude(), durationRatio);
+            RampSegment rampSplit = new RampSegment(
+                    previousAmplitude, interpolatedAmplitude,
+                    previousFrequencyHz, interpolatedFrequency,
+                    (int) splitDuration);
+            ramps.add(rampSplit);
+            previousAmplitude = rampSplit.getEndAmplitude();
+            previousFrequencyHz = rampSplit.getEndFrequencyHz();
+        }
+
+        ramps.add(new RampSegment(previousAmplitude, ramp.getEndAmplitude(), previousFrequencyHz,
+                endFrequencyHz, (int) (ramp.getDuration() - accumulatedDuration)));
+
+        return ramps;
+    }
+
+    private static float fillEmptyFrequency(VibratorInfo info, float frequencyHz) {
+        if (Float.isNaN(info.getResonantFrequencyHz())) {
+            return frequencyHz;
+        }
+        return frequencyHz == 0 ? info.getResonantFrequencyHz() : frequencyHz;
+    }
+}
diff --git a/services/core/java/com/android/server/vibrator/StartSequentialEffectStep.java b/services/core/java/com/android/server/vibrator/StartSequentialEffectStep.java
index 15c60a3..c197271 100644
--- a/services/core/java/com/android/server/vibrator/StartSequentialEffectStep.java
+++ b/services/core/java/com/android/server/vibrator/StartSequentialEffectStep.java
@@ -22,7 +22,6 @@
 import android.os.SystemClock;
 import android.os.Trace;
 import android.os.VibrationEffect;
-import android.os.VibratorInfo;
 import android.os.vibrator.PrebakedSegment;
 import android.os.vibrator.PrimitiveSegment;
 import android.os.vibrator.StepSegment;
@@ -162,8 +161,7 @@
      * waveforms return {@link Long#MAX_VALUE}. Zero or negative values indicate the vibrators
      * have ignored all effects.
      */
-    private long startVibrating(
-            DeviceEffectMap effectMapping, List<Step> nextSteps) {
+    private long startVibrating(DeviceEffectMap effectMapping, List<Step> nextSteps) {
         int vibratorCount = effectMapping.size();
         if (vibratorCount == 0) {
             // No effect was mapped to any available vibrator.
@@ -257,17 +255,22 @@
 
         DeviceEffectMap(CombinedVibration.Mono mono) {
             SparseArray<VibratorController> vibrators = conductor.getVibrators();
-            mVibratorEffects = new SparseArray<>(vibrators.size());
-            mVibratorIds = new int[vibrators.size()];
-            for (int i = 0; i < vibrators.size(); i++) {
-                int vibratorId = vibrators.keyAt(i);
-                VibratorInfo vibratorInfo = vibrators.valueAt(i).getVibratorInfo();
-                VibrationEffect effect = conductor.deviceEffectAdapter.apply(
-                        mono.getEffect(), vibratorInfo);
-                if (effect instanceof VibrationEffect.Composed) {
-                    mVibratorEffects.put(vibratorId, (VibrationEffect.Composed) effect);
+            VibrationEffect effect = mono.getEffect();
+            if (effect instanceof VibrationEffect.Composed) {
+                mVibratorEffects = new SparseArray<>(vibrators.size());
+                mVibratorIds = new int[vibrators.size()];
+
+                VibrationEffect.Composed composedEffect = (VibrationEffect.Composed) effect;
+                for (int i = 0; i < vibrators.size(); i++) {
+                    int vibratorId = vibrators.keyAt(i);
+                    mVibratorEffects.put(vibratorId, composedEffect);
                     mVibratorIds[i] = vibratorId;
                 }
+            } else {
+                Slog.wtf(VibrationThread.TAG,
+                        "Unable to map device vibrators to unexpected effect: " + effect);
+                mVibratorEffects = new SparseArray<>();
+                mVibratorIds = new int[0];
             }
             mRequiredSyncCapabilities = calculateRequiredSyncCapabilities(mVibratorEffects);
         }
@@ -279,11 +282,12 @@
             for (int i = 0; i < stereoEffects.size(); i++) {
                 int vibratorId = stereoEffects.keyAt(i);
                 if (vibrators.contains(vibratorId)) {
-                    VibratorInfo vibratorInfo = vibrators.valueAt(i).getVibratorInfo();
-                    VibrationEffect effect = conductor.deviceEffectAdapter.apply(
-                            stereoEffects.valueAt(i), vibratorInfo);
+                    VibrationEffect effect = stereoEffects.valueAt(i);
                     if (effect instanceof VibrationEffect.Composed) {
                         mVibratorEffects.put(vibratorId, (VibrationEffect.Composed) effect);
+                    } else {
+                        Slog.wtf(VibrationThread.TAG,
+                                "Unable to map device vibrators to unexpected effect: " + effect);
                     }
                 }
             }
diff --git a/services/core/java/com/android/server/vibrator/StepToRampAdapter.java b/services/core/java/com/android/server/vibrator/StepToRampAdapter.java
index 86fc642..6616f10 100644
--- a/services/core/java/com/android/server/vibrator/StepToRampAdapter.java
+++ b/services/core/java/com/android/server/vibrator/StepToRampAdapter.java
@@ -21,33 +21,27 @@
 import android.os.vibrator.RampSegment;
 import android.os.vibrator.StepSegment;
 import android.os.vibrator.VibrationEffectSegment;
-import android.util.MathUtils;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
  * Adapter that converts step segments that should be handled as PWLEs to ramp segments.
  *
- * <p>Each replaced {@link StepSegment} will be represented by a {@link RampSegment} with same
- * start and end amplitudes/frequencies, which can then be converted to PWLE compositions. This
- * adapter leaves the segments unchanged if the device doesn't have the PWLE composition capability.
+ * <p>Each replaced step will be represented by a ramp with same start and end
+ * amplitudes/frequencies, which can then be converted to PWLE compositions.
+ *
+ * <p>The segments will not be changed if the device doesn't have
+ * {@link IVibrator#CAP_COMPOSE_PWLE_EFFECTS}.
  */
-final class StepToRampAdapter implements VibrationEffectAdapters.SegmentsAdapter<VibratorInfo> {
+final class StepToRampAdapter implements VibrationSegmentsAdapter {
 
     @Override
-    public int apply(List<VibrationEffectSegment> segments, int repeatIndex,
-            VibratorInfo info) {
+    public int adaptToVibrator(VibratorInfo info, List<VibrationEffectSegment> segments,
+            int repeatIndex) {
         if (!info.hasCapability(IVibrator.CAP_COMPOSE_PWLE_EFFECTS)) {
             // The vibrator does not have PWLE capability, so keep the segments unchanged.
             return repeatIndex;
         }
-        convertStepsToRamps(info, segments);
-        repeatIndex = splitLongRampSegments(info, segments, repeatIndex);
-        return repeatIndex;
-    }
-
-    private void convertStepsToRamps(VibratorInfo info, List<VibrationEffectSegment> segments) {
         int segmentCount = segments.size();
         // Convert steps that require frequency control to ramps.
         for (int i = 0; i < segmentCount; i++) {
@@ -68,40 +62,6 @@
                 }
             }
         }
-    }
-
-    /**
-     * Split {@link RampSegment} entries that have duration longer than {@link
-     * VibratorInfo#getPwlePrimitiveDurationMax()}.
-     */
-    private int splitLongRampSegments(VibratorInfo info, List<VibrationEffectSegment> segments,
-            int repeatIndex) {
-        int maxDuration = info.getPwlePrimitiveDurationMax();
-        if (maxDuration <= 0) {
-            // No limit set to PWLE primitive duration.
-            return repeatIndex;
-        }
-
-        int segmentCount = segments.size();
-        for (int i = 0; i < segmentCount; i++) {
-            if (!(segments.get(i) instanceof RampSegment)) {
-                continue;
-            }
-            RampSegment ramp = (RampSegment) segments.get(i);
-            int splits = ((int) ramp.getDuration() + maxDuration - 1) / maxDuration;
-            if (splits <= 1) {
-                continue;
-            }
-            segments.remove(i);
-            segments.addAll(i, splitRampSegment(info, ramp, splits));
-            int addedSegments = splits - 1;
-            if (repeatIndex > i) {
-                repeatIndex += addedSegments;
-            }
-            i += addedSegments;
-            segmentCount += addedSegments;
-        }
-
         return repeatIndex;
     }
 
@@ -111,43 +71,14 @@
                 frequencyHz, frequencyHz, (int) segment.getDuration());
     }
 
-    private static List<RampSegment> splitRampSegment(VibratorInfo info, RampSegment ramp,
-            int splits) {
-        List<RampSegment> ramps = new ArrayList<>(splits);
-        float startFrequencyHz = fillEmptyFrequency(info, ramp.getStartFrequencyHz());
-        float endFrequencyHz = fillEmptyFrequency(info, ramp.getEndFrequencyHz());
-        long splitDuration = ramp.getDuration() / splits;
-        float previousAmplitude = ramp.getStartAmplitude();
-        float previousFrequency = startFrequencyHz;
-        long accumulatedDuration = 0;
-
-        for (int i = 1; i < splits; i++) {
-            accumulatedDuration += splitDuration;
-            float durationRatio = (float) accumulatedDuration / ramp.getDuration();
-            float interpolatedFrequency =
-                    MathUtils.lerp(startFrequencyHz, endFrequencyHz, durationRatio);
-            float interpolatedAmplitude =
-                    MathUtils.lerp(ramp.getStartAmplitude(), ramp.getEndAmplitude(), durationRatio);
-            RampSegment rampSplit = new RampSegment(
-                    previousAmplitude, interpolatedAmplitude,
-                    previousFrequency, interpolatedFrequency,
-                    (int) splitDuration);
-            ramps.add(rampSplit);
-            previousAmplitude = rampSplit.getEndAmplitude();
-            previousFrequency = rampSplit.getEndFrequencyHz();
-        }
-
-        ramps.add(new RampSegment(previousAmplitude, ramp.getEndAmplitude(), previousFrequency,
-                endFrequencyHz, (int) (ramp.getDuration() - accumulatedDuration)));
-
-        return ramps;
-    }
-
     private static boolean isStep(VibrationEffectSegment segment) {
         return segment instanceof StepSegment;
     }
 
     private static float fillEmptyFrequency(VibratorInfo info, float frequencyHz) {
+        if (Float.isNaN(info.getResonantFrequencyHz())) {
+            return frequencyHz;
+        }
         return frequencyHz == 0 ? info.getResonantFrequencyHz() : frequencyHz;
     }
 }
diff --git a/services/core/java/com/android/server/vibrator/TEST_MAPPING b/services/core/java/com/android/server/vibrator/TEST_MAPPING
new file mode 100644
index 0000000..92b327d
--- /dev/null
+++ b/services/core/java/com/android/server/vibrator/TEST_MAPPING
@@ -0,0 +1,10 @@
+{
+  "imports": [
+    {
+      "path": "frameworks/base/services/tests/vibrator"
+    },
+    {
+      "path": "cts/tests/vibrator"
+    }
+  ]
+}
diff --git a/services/core/java/com/android/server/vibrator/Vibration.java b/services/core/java/com/android/server/vibrator/Vibration.java
index c6bd80f..fed6e7e 100644
--- a/services/core/java/com/android/server/vibrator/Vibration.java
+++ b/services/core/java/com/android/server/vibrator/Vibration.java
@@ -18,6 +18,7 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.media.AudioAttributes;
 import android.os.CombinedVibration;
 import android.os.IBinder;
 import android.os.VibrationAttributes;
@@ -27,10 +28,13 @@
 import android.os.vibrator.RampSegment;
 import android.os.vibrator.StepSegment;
 import android.os.vibrator.VibrationEffectSegment;
+import android.util.IndentingPrintWriter;
 import android.util.proto.ProtoOutputStream;
 
+import java.io.PrintWriter;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.Locale;
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -38,7 +42,9 @@
  * The base class for all vibrations.
  */
 abstract class Vibration {
-    private static final SimpleDateFormat DEBUG_DATE_FORMAT =
+    private static final SimpleDateFormat DEBUG_TIME_FORMAT =
+            new SimpleDateFormat("HH:mm:ss.SSS");
+    private static final SimpleDateFormat DEBUG_DATE_TIME_FORMAT =
             new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
     // Used to generate globally unique vibration ids.
     private static final AtomicInteger sNextVibrationId = new AtomicInteger(1); // 0 = no callback
@@ -76,7 +82,8 @@
         IGNORED_FOR_RINGER_MODE(VibrationProto.IGNORED_FOR_RINGER_MODE),
         IGNORED_FOR_SETTINGS(VibrationProto.IGNORED_FOR_SETTINGS),
         IGNORED_SUPERSEDED(VibrationProto.IGNORED_SUPERSEDED),
-        IGNORED_FROM_VIRTUAL_DEVICE(VibrationProto.IGNORED_FROM_VIRTUAL_DEVICE);
+        IGNORED_FROM_VIRTUAL_DEVICE(VibrationProto.IGNORED_FROM_VIRTUAL_DEVICE),
+        IGNORED_ON_WIRELESS_CHARGER(VibrationProto.IGNORED_ON_WIRELESS_CHARGER);
 
         private final int mProtoEnumValue;
 
@@ -144,10 +151,10 @@
         @Override
         public String toString() {
             return "CallerInfo{"
-                    + " attrs=" + attrs
-                    + ", uid=" + uid
-                    + ", displayId=" + displayId
+                    + " uid=" + uid
                     + ", opPkg=" + opPkg
+                    + ", displayId=" + displayId
+                    + ", attrs=" + attrs
                     + ", reason=" + reason
                     + '}';
         }
@@ -201,17 +208,20 @@
      * potentially expensive or resource-linked objects, such as {@link IBinder}.
      */
     static final class DebugInfo {
-        private final long mCreateTime;
+        final long mCreateTime;
+        final CallerInfo mCallerInfo;
+        @Nullable
+        final CombinedVibration mPlayedEffect;
+
         private final long mStartTime;
         private final long mEndTime;
         private final long mDurationMs;
-        private final CombinedVibration mEffect;
+        @Nullable
         private final CombinedVibration mOriginalEffect;
         private final float mScale;
-        private final CallerInfo mCallerInfo;
         private final Status mStatus;
 
-        DebugInfo(Status status, VibrationStats stats, @Nullable CombinedVibration effect,
+        DebugInfo(Status status, VibrationStats stats, @Nullable CombinedVibration playedEffect,
                 @Nullable CombinedVibration originalEffect, float scale,
                 @NonNull CallerInfo callerInfo) {
             Objects.requireNonNull(callerInfo);
@@ -219,7 +229,7 @@
             mStartTime = stats.getStartTimeDebug();
             mEndTime = stats.getEndTimeDebug();
             mDurationMs = stats.getDurationDebug();
-            mEffect = effect;
+            mPlayedEffect = playedEffect;
             mOriginalEffect = originalEffect;
             mScale = scale;
             mCallerInfo = callerInfo;
@@ -228,31 +238,68 @@
 
         @Override
         public String toString() {
-            return new StringBuilder()
-                    .append("createTime: ")
-                    .append(DEBUG_DATE_FORMAT.format(new Date(mCreateTime)))
-                    .append(", startTime: ")
-                    .append(DEBUG_DATE_FORMAT.format(new Date(mStartTime)))
-                    .append(", endTime: ")
-                    .append(mEndTime == 0 ? null
-                            : DEBUG_DATE_FORMAT.format(new Date(mEndTime)))
-                    .append(", durationMs: ")
-                    .append(mDurationMs)
-                    .append(", status: ")
-                    .append(mStatus.name().toLowerCase())
-                    .append(", effect: ")
-                    .append(mEffect)
-                    .append(", originalEffect: ")
-                    .append(mOriginalEffect)
-                    .append(", scale: ")
-                    .append(String.format("%.2f", mScale))
-                    .append(", callerInfo: ")
-                    .append(mCallerInfo)
-                    .toString();
+            return "createTime: " + DEBUG_DATE_TIME_FORMAT.format(new Date(mCreateTime))
+                    + ", startTime: " + DEBUG_DATE_TIME_FORMAT.format(new Date(mStartTime))
+                    + ", endTime: "
+                    + (mEndTime == 0 ? null : DEBUG_DATE_TIME_FORMAT.format(new Date(mEndTime)))
+                    + ", durationMs: " + mDurationMs
+                    + ", status: " + mStatus.name().toLowerCase(Locale.ROOT)
+                    + ", playedEffect: " + mPlayedEffect
+                    + ", originalEffect: " + mOriginalEffect
+                    + ", scale: " + String.format(Locale.ROOT, "%.2f", mScale)
+                    + ", callerInfo: " + mCallerInfo;
+        }
+
+        /**
+         * Write this info in a compact way into given {@link PrintWriter}.
+         *
+         * <p>This is used by dumpsys to log multiple vibration records in single lines that are
+         * easy to skim through by the sorted created time.
+         */
+        void dumpCompact(IndentingPrintWriter pw) {
+            boolean isExternalVibration = mPlayedEffect == null;
+            String timingsStr = String.format(Locale.ROOT,
+                    "%s | %8s | %20s | duration: %5dms | start: %12s | end: %10s",
+                    DEBUG_DATE_TIME_FORMAT.format(new Date(mCreateTime)),
+                    isExternalVibration ? "external" : "effect",
+                    mStatus.name().toLowerCase(Locale.ROOT),
+                    mDurationMs,
+                    mStartTime == 0 ? "" : DEBUG_TIME_FORMAT.format(new Date(mStartTime)),
+                    mEndTime == 0 ? "" : DEBUG_TIME_FORMAT.format(new Date(mEndTime)));
+            String callerInfoStr = String.format(Locale.ROOT,
+                    " | %s (uid=%d, displayId=%d) | usage: %s (audio=%s) | flags: %s | reason: %s",
+                    mCallerInfo.opPkg, mCallerInfo.uid, mCallerInfo.displayId,
+                    mCallerInfo.attrs.usageToString(),
+                    AudioAttributes.usageToString(mCallerInfo.attrs.getAudioUsage()),
+                    Long.toBinaryString(mCallerInfo.attrs.getFlags()),
+                    mCallerInfo.reason);
+            String effectStr = String.format(Locale.ROOT,
+                    " | played: %s | original: %s | scale: %.2f",
+                    mPlayedEffect == null ? null : mPlayedEffect.toDebugString(),
+                    mOriginalEffect == null ? null : mOriginalEffect.toDebugString(),
+                    mScale);
+            pw.println(timingsStr + callerInfoStr + effectStr);
+        }
+
+        /** Write this info into given {@link PrintWriter}. */
+        void dump(IndentingPrintWriter pw) {
+            pw.println("Vibration:");
+            pw.increaseIndent();
+            pw.println("status = " + mStatus.name().toLowerCase(Locale.ROOT));
+            pw.println("durationMs = " + mDurationMs);
+            pw.println("createTime = " + DEBUG_DATE_TIME_FORMAT.format(new Date(mCreateTime)));
+            pw.println("startTime = " + DEBUG_DATE_TIME_FORMAT.format(new Date(mStartTime)));
+            pw.println("endTime = "
+                    + (mEndTime == 0 ? null : DEBUG_DATE_TIME_FORMAT.format(new Date(mEndTime))));
+            pw.println("playedEffect = " + mPlayedEffect);
+            pw.println("originalEffect = " + mOriginalEffect);
+            pw.println("scale = " + String.format(Locale.ROOT, "%.2f", mScale));
+            pw.println("callerInfo = " + mCallerInfo);
+            pw.decreaseIndent();
         }
 
         /** Write this info into given {@code fieldId} on {@link ProtoOutputStream}. */
-        public void dumpProto(ProtoOutputStream proto, long fieldId) {
+        void dump(ProtoOutputStream proto, long fieldId) {
             final long token = proto.start(fieldId);
             proto.write(VibrationProto.START_TIME, mStartTime);
             proto.write(VibrationProto.END_TIME, mEndTime);
@@ -266,8 +313,8 @@
             proto.write(VibrationAttributesProto.FLAGS, attrs.getFlags());
             proto.end(attrsToken);
 
-            if (mEffect != null) {
-                dumpEffect(proto, VibrationProto.EFFECT, mEffect);
+            if (mPlayedEffect != null) {
+                dumpEffect(proto, VibrationProto.PLAYED_EFFECT, mPlayedEffect);
             }
             if (mOriginalEffect != null) {
                 dumpEffect(proto, VibrationProto.ORIGINAL_EFFECT, mOriginalEffect);
diff --git a/services/core/java/com/android/server/vibrator/VibrationEffectAdapters.java b/services/core/java/com/android/server/vibrator/VibrationEffectAdapters.java
deleted file mode 100644
index 446d981..0000000
--- a/services/core/java/com/android/server/vibrator/VibrationEffectAdapters.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.vibrator;
-
-import android.os.VibrationEffect;
-import android.os.vibrator.VibrationEffectSegment;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Helpers to adapt a {@link VibrationEffect} to generic modifiers (e.g. device capabilities,
- * user settings, etc).
- */
-public final class VibrationEffectAdapters {
-
-    /**
-     * Function that applies a generic modifier to a sequence of {@link VibrationEffectSegment}.
-     *
-     * @param <T> The type of modifiers this adapter accepts.
-     */
-    public interface SegmentsAdapter<T> {
-
-        /**
-         * Add and/or remove segments to the given {@link VibrationEffectSegment} list based on the
-         * given modifier.
-         *
-         * <p>This returns the new {@code repeatIndex} to be used together with the updated list to
-         * specify an equivalent {@link VibrationEffect}.
-         *
-         * @param segments    List of {@link VibrationEffectSegment} to be modified.
-         * @param repeatIndex Repeat index on the current segment list.
-         * @param modifier    The modifier to be applied to the sequence of segments.
-         * @return The new repeat index on the modifies list.
-         */
-        int apply(List<VibrationEffectSegment> segments, int repeatIndex, T modifier);
-    }
-
-    /**
-     * Function that applies a generic modifier to a {@link VibrationEffect}.
-     *
-     * @param <T> The type of modifiers this adapter accepts.
-     */
-    public interface EffectAdapter<T> {
-
-        /** Applies the modifier to given {@link VibrationEffect}, returning the new effect. */
-        VibrationEffect apply(VibrationEffect effect, T modifier);
-    }
-
-    /**
-     * Applies a sequence of {@link SegmentsAdapter} to the segments of a given
-     * {@link VibrationEffect}, in order.
-     *
-     * @param effect   The effect to be adapted to given modifier.
-     * @param adapters The sequence of adapters to be applied to given {@link VibrationEffect}.
-     * @param modifier The modifier to be passed to each adapter that describes the conditions the
-     *                 {@link VibrationEffect} needs to be adapted to (e.g. device capabilities,
-     *                 user settings, etc).
-     */
-    public static <T> VibrationEffect apply(VibrationEffect effect,
-            List<SegmentsAdapter<T>> adapters, T modifier) {
-        if (!(effect instanceof VibrationEffect.Composed)) {
-            // Segments adapters can only be applied to Composed effects.
-            return effect;
-        }
-
-        VibrationEffect.Composed composed = (VibrationEffect.Composed) effect;
-        List<VibrationEffectSegment> newSegments = new ArrayList<>(composed.getSegments());
-        int newRepeatIndex = composed.getRepeatIndex();
-
-        int adapterCount = adapters.size();
-        for (int i = 0; i < adapterCount; i++) {
-            newRepeatIndex = adapters.get(i).apply(newSegments, newRepeatIndex, modifier);
-        }
-
-        return new VibrationEffect.Composed(newSegments, newRepeatIndex);
-    }
-}
diff --git a/services/core/java/com/android/server/vibrator/VibrationScaler.java b/services/core/java/com/android/server/vibrator/VibrationScaler.java
index a528f06..59b55bf7 100644
--- a/services/core/java/com/android/server/vibrator/VibrationScaler.java
+++ b/services/core/java/com/android/server/vibrator/VibrationScaler.java
@@ -16,15 +16,19 @@
 
 package com.android.server.vibrator;
 
+import android.annotation.NonNull;
 import android.content.Context;
 import android.hardware.vibrator.V1_0.EffectStrength;
 import android.os.IExternalVibratorService;
 import android.os.VibrationEffect;
 import android.os.Vibrator;
 import android.os.vibrator.PrebakedSegment;
+import android.os.vibrator.VibrationEffectSegment;
 import android.util.Slog;
 import android.util.SparseArray;
 
+import java.util.ArrayList;
+
 /** Controls vibration scaling. */
 final class VibrationScaler {
     private static final String TAG = "VibrationScaler";
@@ -100,7 +104,14 @@
      * @return The same given effect, if no changes were made, or a new {@link VibrationEffect} with
      * resolved and scaled amplitude
      */
-    public <T extends VibrationEffect> T scale(VibrationEffect effect, int usageHint) {
+    @NonNull
+    public VibrationEffect scale(@NonNull VibrationEffect effect, int usageHint) {
+        if (!(effect instanceof VibrationEffect.Composed)) {
+            // This only scales composed vibration effects.
+            Slog.wtf(TAG, "Error scaling unsupported vibration effect: " + effect);
+            return effect;
+        }
+
         int defaultIntensity = mSettingsController.getDefaultIntensity(usageHint);
         int currentIntensity = mSettingsController.getCurrentIntensity(usageHint);
 
@@ -110,17 +121,36 @@
         }
 
         int newEffectStrength = intensityToEffectStrength(currentIntensity);
-        effect = effect.applyEffectStrength(newEffectStrength).resolve(mDefaultVibrationAmplitude);
-        ScaleLevel scale = mScaleLevels.get(currentIntensity - defaultIntensity);
+        ScaleLevel scaleLevel = mScaleLevels.get(currentIntensity - defaultIntensity);
 
-        if (scale == null) {
+        if (scaleLevel == null) {
             // Something about our scaling has gone wrong, so just play with no scaling.
             Slog.e(TAG, "No configured scaling level!"
                     + " (current=" + currentIntensity + ", default= " + defaultIntensity + ")");
-            return (T) effect;
         }
 
-        return (T) effect.scale(scale.factor);
+        VibrationEffect.Composed composedEffect = (VibrationEffect.Composed) effect;
+        ArrayList<VibrationEffectSegment> segments =
+                new ArrayList<>(composedEffect.getSegments());
+        int segmentCount = segments.size();
+        for (int i = 0; i < segmentCount; i++) {
+            VibrationEffectSegment segment = segments.get(i);
+            segment = segment.resolve(mDefaultVibrationAmplitude)
+                    .applyEffectStrength(newEffectStrength);
+            if (scaleLevel != null) {
+                segment = segment.scale(scaleLevel.factor);
+            }
+            segments.set(i, segment);
+        }
+        if (segments.equals(composedEffect.getSegments())) {
+            // No segment was updated, return original effect.
+            return effect;
+        }
+        VibrationEffect.Composed scaled =
+                new VibrationEffect.Composed(segments, composedEffect.getRepeatIndex());
+        // Make sure we validate what was scaled, since we're using the constructor directly
+        scaled.validate();
+        return scaled;
     }
 
     /**
diff --git a/services/core/java/com/android/server/vibrator/VibrationSegmentsAdapter.java b/services/core/java/com/android/server/vibrator/VibrationSegmentsAdapter.java
new file mode 100644
index 0000000..b0fc0bf
--- /dev/null
+++ b/services/core/java/com/android/server/vibrator/VibrationSegmentsAdapter.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.vibrator;
+
+import android.os.VibrationEffect;
+import android.os.VibratorInfo;
+import android.os.vibrator.VibrationEffectSegment;
+
+import java.util.List;
+
+/** Adapts a sequence of {@link VibrationEffectSegment} to a vibrator. */
+interface VibrationSegmentsAdapter {
+
+    /**
+     * Add and/or remove segments to the given {@link VibrationEffectSegment} list based on the
+     * given {@link VibratorInfo}.
+     *
+     * <p>This returns the new {@code repeatIndex} to be used together with the updated list to
+     * specify an equivalent {@link VibrationEffect}.
+     *
+     * @param info        The vibrator info to be applied to the sequence of segments.
+     * @param segments    List of {@link VibrationEffectSegment} to be modified.
+     * @param repeatIndex Repeat index on the current segment list.
+     * @return The new repeat index on the modifies list.
+     */
+    int adaptToVibrator(VibratorInfo info, List<VibrationEffectSegment> segments, int repeatIndex);
+}
diff --git a/services/core/java/com/android/server/vibrator/VibrationSettings.java b/services/core/java/com/android/server/vibrator/VibrationSettings.java
index 9cf0834..db8a9ae 100644
--- a/services/core/java/com/android/server/vibrator/VibrationSettings.java
+++ b/services/core/java/com/android/server/vibrator/VibrationSettings.java
@@ -40,6 +40,7 @@
 import android.database.ContentObserver;
 import android.media.AudioManager;
 import android.net.Uri;
+import android.os.BatteryManager;
 import android.os.Handler;
 import android.os.PowerManager;
 import android.os.PowerManagerInternal;
@@ -53,6 +54,7 @@
 import android.os.Vibrator.VibrationIntensity;
 import android.os.vibrator.VibrationConfig;
 import android.provider.Settings;
+import android.util.IndentingPrintWriter;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.SparseIntArray;
@@ -64,6 +66,7 @@
 import com.android.server.LocalServices;
 import com.android.server.companion.virtual.VirtualDeviceManagerInternal;
 
+import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
@@ -186,6 +189,8 @@
     private boolean mVibrateOn;
     @GuardedBy("mLock")
     private int mRingerMode;
+    @GuardedBy("mLock")
+    private boolean mOnWirelessCharger;
 
     VibrationSettings(Context context, Handler handler) {
         this(context, handler, new VibrationConfig(context.getResources()));
@@ -291,6 +296,25 @@
         registerSettingsObserver(
                 Settings.System.getUriFor(Settings.System.RING_VIBRATION_INTENSITY));
 
+        if (mVibrationConfig.ignoreVibrationsOnWirelessCharger()) {
+            Intent batteryStatus = mContext.registerReceiver(
+                    new BroadcastReceiver() {
+                        @Override
+                        public void onReceive(Context context, Intent intent) {
+                            updateBatteryInfo(intent);
+                        }
+                    },
+                    new IntentFilter(Intent.ACTION_BATTERY_CHANGED),
+                    Context.RECEIVER_NOT_EXPORTED);
+            // After registering the receiver for battery status, process the sticky broadcast that
+            // may have been returned upon registration of the receiver. This helps to capture the
+            // current charging state, and subsequent charging states can be listened to via the
+            // receiver registered.
+            if (batteryStatus != null) {
+                updateBatteryInfo(batteryStatus);
+            }
+        }
+
         // Update with newly loaded services.
         update();
     }
@@ -409,6 +433,10 @@
                     return Vibration.Status.IGNORED_FOR_RINGER_MODE;
                 }
             }
+
+            if (mVibrationConfig.ignoreVibrationsOnWirelessCharger() && mOnWirelessCharger) {
+                return Vibration.Status.IGNORED_ON_WIRELESS_CHARGER;
+            }
         }
         return null;
     }
@@ -544,6 +572,13 @@
         }
     }
 
+    private void updateBatteryInfo(Intent intent) {
+        int pluggedInfo = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
+        synchronized (mLock) {
+            mOnWirelessCharger = pluggedInfo == BatteryManager.BATTERY_PLUGGED_WIRELESS;
+        }
+    }
+
     @Override
     public String toString() {
         synchronized (mLock) {
@@ -568,8 +603,32 @@
         }
     }
 
+    /** Write current settings into given {@link PrintWriter}. */
+    void dump(IndentingPrintWriter pw) {
+        pw.println("VibrationSettings:");
+        pw.increaseIndent();
+        pw.println("vibrateOn = " + mVibrateOn);
+        pw.println("vibrateInputDevices = " + mVibrateInputDevices);
+        pw.println("batterySaverMode = " + mBatterySaverMode);
+        pw.println("VibrationIntensities:");
+
+        pw.increaseIndent();
+        for (int i = 0; i < mCurrentVibrationIntensities.size(); i++) {
+            int usage = mCurrentVibrationIntensities.keyAt(i);
+            int intensity = mCurrentVibrationIntensities.valueAt(i);
+            pw.println(VibrationAttributes.usageToString(usage) + " = "
+                    + intensityToString(intensity)
+                    + ", default: " + intensityToString(getDefaultIntensity(usage)));
+        }
+        pw.decreaseIndent();
+
+        mVibrationConfig.dumpWithoutDefaultSettings(pw);
+        pw.println("processStateCache = " + mUidObserver.mProcStatesCache);
+        pw.decreaseIndent();
+    }
+
     /** Write current settings into given {@link ProtoOutputStream}. */
-    public void dumpProto(ProtoOutputStream proto) {
+    void dump(ProtoOutputStream proto) {
         synchronized (mLock) {
             proto.write(VibratorManagerServiceDumpProto.VIBRATE_ON, mVibrateOn);
             proto.write(VibratorManagerServiceDumpProto.LOW_POWER_MODE, mBatterySaverMode);
@@ -665,7 +724,23 @@
 
     @Nullable
     private VibrationEffect createEffectFromResource(int resId) {
-        long[] timings = getLongIntArray(mContext.getResources(), resId);
+        return createEffectFromResource(mContext.getResources(), resId);
+    }
+
+    /**
+     * Provides a {@link VibrationEffect} from a timings-array provided as an int-array resource..
+     *
+     * <p>If the timings array is {@code null} or empty, it returns {@code null}.
+     *
+     * <p>If the timings array has a size of one, it returns a one-shot vibration with duration that
+     * is equal to the single value in the array.
+     *
+     * <p>If the timings array has more than one values, it returns a non-repeating wave-form
+     * vibration with off-on timings as per the provided timings array.
+     */
+    @Nullable
+    static VibrationEffect createEffectFromResource(Resources res, int resId) {
+        long[] timings = getLongIntArray(res, resId);
         return createEffectFromTimings(timings);
     }
 
diff --git a/services/core/java/com/android/server/vibrator/VibrationStepConductor.java b/services/core/java/com/android/server/vibrator/VibrationStepConductor.java
index 4202afb..624da80 100644
--- a/services/core/java/com/android/server/vibrator/VibrationStepConductor.java
+++ b/services/core/java/com/android/server/vibrator/VibrationStepConductor.java
@@ -62,14 +62,14 @@
 
     // Used within steps.
     public final VibrationSettings vibrationSettings;
-    public final DeviceVibrationEffectAdapter deviceEffectAdapter;
     public final VibrationThread.VibratorManagerHooks vibratorManagerHooks;
 
-    // Not guarded by lock because they're not modified by this conductor, it's used here only to
-    // check immutable attributes. The status and other mutable states are changed by the service or
-    // by the vibrator steps.
+    private final DeviceAdapter mDeviceAdapter;
+
+    // Not guarded by lock because it's mostly used to read immutable fields by this conductor.
+    // This is only modified here at the prepareToStart method which always runs at the vibration
+    // thread, to update the adapted effect and report start time.
     private final HalVibration mVibration;
-    private final SparseArray<VibratorController> mVibrators = new SparseArray<>();
 
     private final PriorityQueue<Step> mNextSteps = new PriorityQueue<>();
     private final Queue<Step> mPendingOnVibratorCompleteSteps = new LinkedList<>();
@@ -96,21 +96,14 @@
     private int mSuccessfulVibratorOnSteps;
 
     VibrationStepConductor(HalVibration vib, VibrationSettings vibrationSettings,
-            DeviceVibrationEffectAdapter effectAdapter,
-            SparseArray<VibratorController> availableVibrators,
+            DeviceAdapter deviceAdapter,
             VibrationThread.VibratorManagerHooks vibratorManagerHooks) {
         this.mVibration = vib;
         this.vibrationSettings = vibrationSettings;
-        this.deviceEffectAdapter = effectAdapter;
+        this.mDeviceAdapter = deviceAdapter;
         this.vibratorManagerHooks = vibratorManagerHooks;
-
-        CombinedVibration effect = vib.getEffect();
-        for (int i = 0; i < availableVibrators.size(); i++) {
-            if (effect.hasVibrator(availableVibrators.keyAt(i))) {
-                mVibrators.put(availableVibrators.keyAt(i), availableVibrators.valueAt(i));
-            }
-        }
-        this.mSignalVibratorsComplete = new IntArray(mVibrators.size());
+        this.mSignalVibratorsComplete =
+                new IntArray(mDeviceAdapter.getAvailableVibratorIds().length);
     }
 
     @Nullable
@@ -150,7 +143,9 @@
         if (Build.IS_DEBUGGABLE) {
             expectIsVibrationThread(true);
         }
-        CombinedVibration.Sequential sequentialEffect = toSequential(mVibration.getEffect());
+        // Scaling happened before the effect was dispatched to this conductor (or to input devices)
+        mVibration.adaptToDevice(mDeviceAdapter);
+        CombinedVibration.Sequential sequentialEffect = toSequential(mVibration.getEffectToPlay());
         mPendingVibrateSteps++;
         // This count is decremented at the completion of the step, so we don't subtract one.
         mRemainingStartSequentialEffectSteps = sequentialEffect.getEffects().size();
@@ -167,7 +162,7 @@
 
     SparseArray<VibratorController> getVibrators() {
         // No thread assertion: immutable
-        return mVibrators;
+        return mDeviceAdapter.getAvailableVibrators();
     }
 
     public boolean isFinished() {
@@ -408,8 +403,8 @@
         }
 
         synchronized (mLock) {
-            for (int i = 0; i < mVibrators.size(); i++) {
-                mSignalVibratorsComplete.add(mVibrators.keyAt(i));
+            for (int vibratorId : mDeviceAdapter.getAvailableVibratorIds()) {
+                mSignalVibratorsComplete.add(vibratorId);
             }
             mLock.notify();
         }
diff --git a/services/core/java/com/android/server/vibrator/VibratorController.java b/services/core/java/com/android/server/vibrator/VibratorController.java
index 47b3e1a..f5d4d1e 100644
--- a/services/core/java/com/android/server/vibrator/VibratorController.java
+++ b/services/core/java/com/android/server/vibrator/VibratorController.java
@@ -17,6 +17,7 @@
 package com.android.server.vibrator;
 
 import android.annotation.Nullable;
+import android.annotation.Nullable;
 import android.hardware.vibrator.IVibrator;
 import android.os.Binder;
 import android.os.IVibratorStateListener;
@@ -26,6 +27,7 @@
 import android.os.vibrator.PrebakedSegment;
 import android.os.vibrator.PrimitiveSegment;
 import android.os.vibrator.RampSegment;
+import android.util.IndentingPrintWriter;
 import android.util.Slog;
 
 import com.android.internal.annotations.GuardedBy;
@@ -351,6 +353,19 @@
                 + '}';
     }
 
+    void dump(IndentingPrintWriter pw) {
+        pw.println("VibratorController:");
+        pw.increaseIndent();
+        pw.println("isVibrating = " + mIsVibrating);
+        pw.println("isUnderExternalControl = " + mIsUnderExternalControl);
+        pw.println("currentAmplitude = " + mCurrentAmplitude);
+        pw.println("vibratorInfoLoadSuccessful = " + mVibratorInfoLoadSuccessful);
+        pw.println("vibratorStateListenerCount = "
+                + mVibratorStateListeners.getRegisteredCallbackCount());
+        mVibratorInfo.dump(pw);
+        pw.decreaseIndent();
+    }
+
     @GuardedBy("mLock")
     private void notifyListenerOnVibrating(boolean isVibrating) {
         if (mIsVibrating != isVibrating) {
diff --git a/services/core/java/com/android/server/vibrator/VibratorManagerService.java b/services/core/java/com/android/server/vibrator/VibratorManagerService.java
index cb7e54d..2fef092 100644
--- a/services/core/java/com/android/server/vibrator/VibratorManagerService.java
+++ b/services/core/java/com/android/server/vibrator/VibratorManagerService.java
@@ -54,7 +54,9 @@
 import android.os.VibratorInfo;
 import android.os.vibrator.PrebakedSegment;
 import android.os.vibrator.VibrationEffectSegment;
+import android.os.vibrator.persistence.VibrationXmlParser;
 import android.text.TextUtils;
+import android.util.IndentingPrintWriter;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.proto.ProtoOutputStream;
@@ -70,13 +72,16 @@
 import libcore.util.NativeAllocationRegistry;
 
 import java.io.FileDescriptor;
+import java.io.IOException;
 import java.io.PrintWriter;
+import java.io.StringReader;
 import java.lang.ref.WeakReference;
 import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Objects;
 import java.util.function.Consumer;
 import java.util.function.Function;
 
@@ -151,7 +156,7 @@
     private final VibrationSettings mVibrationSettings;
     private final VibrationScaler mVibrationScaler;
     private final InputDeviceDelegate mInputDeviceDelegate;
-    private final DeviceVibrationEffectAdapter mDeviceVibrationEffectAdapter;
+    private final DeviceAdapter mDeviceAdapter;
 
     private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
         @Override
@@ -196,15 +201,20 @@
         mVibrationSettings = new VibrationSettings(mContext, mHandler);
         mVibrationScaler = new VibrationScaler(mContext, mVibrationSettings);
         mInputDeviceDelegate = new InputDeviceDelegate(mContext, mHandler);
-        mDeviceVibrationEffectAdapter = new DeviceVibrationEffectAdapter(mVibrationSettings);
 
         VibrationCompleteListener listener = new VibrationCompleteListener(this);
         mNativeWrapper = injector.getNativeWrapper();
         mNativeWrapper.init(listener);
 
-        int dumpLimit = mContext.getResources().getInteger(
-                com.android.internal.R.integer.config_previousVibrationsDumpLimit);
-        mVibratorManagerRecords = new VibratorManagerRecords(dumpLimit);
+        int recentDumpSizeLimit = mContext.getResources().getInteger(
+                com.android.internal.R.integer.config_recentVibrationsDumpSizeLimit);
+        int dumpSizeLimit = mContext.getResources().getInteger(
+                com.android.internal.R.integer.config_previousVibrationsDumpSizeLimit);
+        int dumpAggregationTimeLimit = mContext.getResources().getInteger(
+                com.android.internal.R.integer
+                        .config_previousVibrationsDumpAggregationTimeMillisLimit);
+        mVibratorManagerRecords = new VibratorManagerRecords(
+                recentDumpSizeLimit, dumpSizeLimit, dumpAggregationTimeLimit);
 
         mBatteryStatsService = injector.getBatteryStatsService();
         mFrameworkStatsLogger = injector.getFrameworkStatsLogger(mHandler);
@@ -234,6 +244,9 @@
             }
         }
 
+        // Load vibrator adapter, that depends on hardware info.
+        mDeviceAdapter = new DeviceAdapter(mVibrationSettings, mVibrators);
+
         // Reset the hardware to a default state, in case this is a runtime restart instead of a
         // fresh boot.
         mNativeWrapper.cancelSynced();
@@ -298,20 +311,18 @@
         return controller.isVibratorInfoLoadSuccessful() ? info : null;
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE)
     @Override // Binder call
     public boolean isVibrating(int vibratorId) {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.ACCESS_VIBRATOR_STATE,
-                "isVibrating");
+        isVibrating_enforcePermission();
         VibratorController controller = mVibrators.get(vibratorId);
         return controller != null && controller.isVibrating();
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE)
     @Override // Binder call
     public boolean registerVibratorStateListener(int vibratorId, IVibratorStateListener listener) {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.ACCESS_VIBRATOR_STATE,
-                "registerVibratorStateListener");
+        registerVibratorStateListener_enforcePermission();
         VibratorController controller = mVibrators.get(vibratorId);
         if (controller == null) {
             return false;
@@ -319,12 +330,11 @@
         return controller.registerVibratorStateListener(listener);
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE)
     @Override // Binder call
     public boolean unregisterVibratorStateListener(int vibratorId,
             IVibratorStateListener listener) {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.ACCESS_VIBRATOR_STATE,
-                "unregisterVibratorStateListener");
+        unregisterVibratorStateListener_enforcePermission();
         VibratorController controller = mVibrators.get(vibratorId);
         if (controller == null) {
             return false;
@@ -412,7 +422,7 @@
             if (attrs.isFlagSet(VibrationAttributes.FLAG_INVALIDATE_SETTINGS_CACHE)) {
                 // Force update of user settings before checking if this vibration effect should
                 // be ignored or scaled.
-                mVibrationSettings.mSettingObserver.onChange(false);
+                mVibrationSettings.update();
             }
 
             synchronized (mLock) {
@@ -542,49 +552,74 @@
         }
     }
 
-    private void dumpText(PrintWriter pw) {
+    private void dumpText(PrintWriter w) {
         if (DEBUG) {
             Slog.d(TAG, "Dumping vibrator manager service to text...");
         }
+        IndentingPrintWriter pw = new IndentingPrintWriter(w, /* singleIndent= */ "  ");
         synchronized (mLock) {
             pw.println("Vibrator Manager Service:");
-            pw.println("  mVibrationSettings:");
-            pw.println("    " + mVibrationSettings);
+            pw.increaseIndent();
+
+            mVibrationSettings.dump(pw);
             pw.println();
-            pw.println("  mVibratorControllers:");
+
+            pw.println("VibratorControllers:");
+            pw.increaseIndent();
             for (int i = 0; i < mVibrators.size(); i++) {
-                pw.println("    " + mVibrators.valueAt(i));
+                mVibrators.valueAt(i).dump(pw);
             }
+            pw.decreaseIndent();
             pw.println();
-            pw.println("  mCurrentVibration:");
-            pw.println("    " + (mCurrentVibration == null
-                    ? null : mCurrentVibration.getVibration().getDebugInfo()));
+
+            pw.println("CurrentVibration:");
+            pw.increaseIndent();
+            if (mCurrentVibration != null) {
+                mCurrentVibration.getVibration().getDebugInfo().dump(pw);
+            } else {
+                pw.println("null");
+            }
+            pw.decreaseIndent();
             pw.println();
-            pw.println("  mNextVibration:");
-            pw.println("    " + (mNextVibration == null
-                    ? null : mNextVibration.getVibration().getDebugInfo()));
+
+            pw.println("NextVibration:");
+            pw.increaseIndent();
+            if (mNextVibration != null) {
+                mNextVibration.getVibration().getDebugInfo().dump(pw);
+            } else {
+                pw.println("null");
+            }
+            pw.decreaseIndent();
             pw.println();
-            pw.println("  mCurrentExternalVibration:");
-            pw.println("    " + (mCurrentExternalVibration == null
-                    ? null : mCurrentExternalVibration.getDebugInfo()));
-            pw.println();
+
+            pw.println("CurrentExternalVibration:");
+            pw.increaseIndent();
+            if (mCurrentExternalVibration != null) {
+                mCurrentExternalVibration.getDebugInfo().dump(pw);
+            } else {
+                pw.println("null");
+            }
+            pw.decreaseIndent();
         }
-        mVibratorManagerRecords.dumpText(pw);
+
+        pw.println();
+        pw.println();
+        mVibratorManagerRecords.dump(pw);
     }
 
-    synchronized void dumpProto(FileDescriptor fd) {
+    private void dumpProto(FileDescriptor fd) {
         final ProtoOutputStream proto = new ProtoOutputStream(fd);
         if (DEBUG) {
             Slog.d(TAG, "Dumping vibrator manager service to proto...");
         }
         synchronized (mLock) {
-            mVibrationSettings.dumpProto(proto);
+            mVibrationSettings.dump(proto);
             if (mCurrentVibration != null) {
-                mCurrentVibration.getVibration().getDebugInfo().dumpProto(proto,
+                mCurrentVibration.getVibration().getDebugInfo().dump(proto,
                         VibratorManagerServiceDumpProto.CURRENT_VIBRATION);
             }
             if (mCurrentExternalVibration != null) {
-                mCurrentExternalVibration.getDebugInfo().dumpProto(proto,
+                mCurrentExternalVibration.getDebugInfo().dump(proto,
                         VibratorManagerServiceDumpProto.CURRENT_EXTERNAL_VIBRATION);
             }
 
@@ -599,7 +634,7 @@
             proto.write(VibratorManagerServiceDumpProto.VIBRATOR_UNDER_EXTERNAL_CONTROL,
                     isUnderExternalControl);
         }
-        mVibratorManagerRecords.dumpProto(proto);
+        mVibratorManagerRecords.dump(proto);
         proto.flush();
     }
 
@@ -674,16 +709,16 @@
     private Vibration.EndInfo startVibrationLocked(HalVibration vib) {
         Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "startVibrationLocked");
         try {
-            vib.updateEffects(
-                    effect -> mVibrationScaler.scale(effect, vib.callerInfo.attrs.getUsage()));
+            // Scale effect before dispatching it to the input devices or the vibration thread.
+            vib.scaleEffects(mVibrationScaler::scale);
             boolean inputDevicesAvailable = mInputDeviceDelegate.vibrateIfAvailable(
-                    vib.callerInfo, vib.getEffect());
+                    vib.callerInfo, vib.getEffectToPlay());
             if (inputDevicesAvailable) {
                 return new Vibration.EndInfo(Vibration.Status.FORWARDED_TO_INPUT_DEVICES);
             }
 
             VibrationStepConductor conductor = new VibrationStepConductor(vib, mVibrationSettings,
-                    mDeviceVibrationEffectAdapter, mVibrators, mVibrationThreadCallbacks);
+                    mDeviceAdapter, mVibrationThreadCallbacks);
             if (mCurrentVibration == null) {
                 return startVibrationOnThreadLocked(conductor);
             }
@@ -1509,7 +1544,7 @@
         }
 
         public Vibration.DebugInfo getDebugInfo() {
-            return new Vibration.DebugInfo(mStatus, stats, /* effect= */ null,
+            return new Vibration.DebugInfo(mStatus, stats, /* playedEffect= */ null,
                     /* originalEffect= */ null, scale, callerInfo);
         }
 
@@ -1579,64 +1614,105 @@
 
     /** Keep records of vibrations played and provide debug information for this service. */
     private static final class VibratorManagerRecords {
-        private final SparseArray<LinkedList<Vibration.DebugInfo>> mPreviousVibrations =
-                new SparseArray<>();
-        private final LinkedList<Vibration.DebugInfo> mPreviousExternalVibrations =
-                new LinkedList<>();
-        private final int mPreviousVibrationsLimit;
+        private final VibrationRecords mAggregatedVibrationHistory;
+        private final VibrationRecords mRecentVibrations;
 
-        VibratorManagerRecords(int limit) {
-            mPreviousVibrationsLimit = limit;
+        VibratorManagerRecords(int recentVibrationSizeLimit, int aggregationSizeLimit,
+                int aggregationTimeLimit) {
+            mAggregatedVibrationHistory =
+                    new VibrationRecords(aggregationSizeLimit, aggregationTimeLimit);
+            mRecentVibrations = new VibrationRecords(
+                    recentVibrationSizeLimit, /* aggregationTimeLimit= */ 0);
         }
 
         synchronized void record(HalVibration vib) {
-            int usage = vib.callerInfo.attrs.getUsage();
-            if (!mPreviousVibrations.contains(usage)) {
-                mPreviousVibrations.put(usage, new LinkedList<>());
-            }
-            record(mPreviousVibrations.get(usage), vib.getDebugInfo());
+            record(vib.getDebugInfo());
         }
 
         synchronized void record(ExternalVibrationHolder vib) {
-            record(mPreviousExternalVibrations, vib.getDebugInfo());
+            record(vib.getDebugInfo());
         }
 
-        synchronized void record(LinkedList<Vibration.DebugInfo> records,
-                Vibration.DebugInfo info) {
-            if (records.size() > mPreviousVibrationsLimit) {
-                records.removeFirst();
+        private synchronized void record(Vibration.DebugInfo info) {
+            AggregatedVibrationRecord removedRecord = mRecentVibrations.record(info);
+            if (removedRecord != null) {
+                mAggregatedVibrationHistory.record(removedRecord.mLatestVibration);
             }
-            records.addLast(info);
         }
 
-        synchronized void dumpText(PrintWriter pw) {
-            for (int i = 0; i < mPreviousVibrations.size(); i++) {
-                pw.println();
-                pw.print("  Previous vibrations for usage ");
-                pw.print(VibrationAttributes.usageToString(mPreviousVibrations.keyAt(i)));
-                pw.println(":");
-                for (Vibration.DebugInfo info : mPreviousVibrations.valueAt(i)) {
-                    pw.println("    " + info);
+        synchronized void dump(IndentingPrintWriter pw) {
+            pw.println("Recent vibrations:");
+            pw.increaseIndent();
+            mRecentVibrations.dump(pw);
+            pw.decreaseIndent();
+            pw.println();
+            pw.println();
+
+            pw.println("Aggregated vibration history:");
+            pw.increaseIndent();
+            mAggregatedVibrationHistory.dump(pw);
+            pw.decreaseIndent();
+        }
+
+        synchronized void dump(ProtoOutputStream proto) {
+            mRecentVibrations.dump(proto);
+        }
+    }
+
+    /** Keep records of vibrations played and provide debug information for this service. */
+    private static final class VibrationRecords {
+        private final SparseArray<LinkedList<AggregatedVibrationRecord>> mVibrations =
+                new SparseArray<>();
+        private final int mSizeLimit;
+        private final int mAggregationTimeLimit;
+
+        VibrationRecords(int sizeLimit, int aggregationTimeLimit) {
+            mSizeLimit = sizeLimit;
+            mAggregationTimeLimit = aggregationTimeLimit;
+        }
+
+        synchronized AggregatedVibrationRecord record(Vibration.DebugInfo info) {
+            int usage = info.mCallerInfo.attrs.getUsage();
+            if (!mVibrations.contains(usage)) {
+                mVibrations.put(usage, new LinkedList<>());
+            }
+            LinkedList<AggregatedVibrationRecord> records = mVibrations.get(usage);
+            if (mAggregationTimeLimit > 0 && !records.isEmpty()) {
+                AggregatedVibrationRecord lastRecord = records.getLast();
+                if (lastRecord.mayAggregate(info, mAggregationTimeLimit)) {
+                    lastRecord.record(info);
+                    return null;
                 }
             }
+            AggregatedVibrationRecord removedRecord = null;
+            if (records.size() > mSizeLimit) {
+                removedRecord = records.removeFirst();
+            }
+            records.addLast(new AggregatedVibrationRecord(info));
+            return removedRecord;
+        }
 
-            pw.println();
-            pw.println("  Previous external vibrations:");
-            for (Vibration.DebugInfo info : mPreviousExternalVibrations) {
-                pw.println("    " + info);
+        synchronized void dump(IndentingPrintWriter pw) {
+            for (int i = 0; i < mVibrations.size(); i++) {
+                pw.println(VibrationAttributes.usageToString(mVibrations.keyAt(i)) + ":");
+                pw.increaseIndent();
+                for (AggregatedVibrationRecord info : mVibrations.valueAt(i)) {
+                    info.dump(pw);
+                }
+                pw.decreaseIndent();
+                pw.println();
             }
         }
 
-        synchronized void dumpProto(ProtoOutputStream proto) {
-            for (int i = 0; i < mPreviousVibrations.size(); i++) {
+        synchronized void dump(ProtoOutputStream proto) {
+            for (int i = 0; i < mVibrations.size(); i++) {
                 long fieldId;
-                switch (mPreviousVibrations.keyAt(i)) {
+                switch (mVibrations.keyAt(i)) {
                     case VibrationAttributes.USAGE_RINGTONE:
                         fieldId = VibratorManagerServiceDumpProto.PREVIOUS_RING_VIBRATIONS;
                         break;
                     case VibrationAttributes.USAGE_NOTIFICATION:
-                        fieldId = VibratorManagerServiceDumpProto
-                                .PREVIOUS_NOTIFICATION_VIBRATIONS;
+                        fieldId = VibratorManagerServiceDumpProto.PREVIOUS_NOTIFICATION_VIBRATIONS;
                         break;
                     case VibrationAttributes.USAGE_ALARM:
                         fieldId = VibratorManagerServiceDumpProto.PREVIOUS_ALARM_VIBRATIONS;
@@ -1644,18 +1720,70 @@
                     default:
                         fieldId = VibratorManagerServiceDumpProto.PREVIOUS_VIBRATIONS;
                 }
-                for (Vibration.DebugInfo info : mPreviousVibrations.valueAt(i)) {
-                    info.dumpProto(proto, fieldId);
+                for (AggregatedVibrationRecord info : mVibrations.valueAt(i)) {
+                    if (info.mLatestVibration.mPlayedEffect == null) {
+                        // External vibrations are reported separately in the dump proto
+                        info.dump(proto,
+                                VibratorManagerServiceDumpProto.PREVIOUS_EXTERNAL_VIBRATIONS);
+                    } else {
+                        info.dump(proto, fieldId);
+                    }
                 }
             }
+        }
 
-            for (Vibration.DebugInfo info : mPreviousExternalVibrations) {
-                info.dumpProto(proto,
-                        VibratorManagerServiceDumpProto.PREVIOUS_EXTERNAL_VIBRATIONS);
+        synchronized void dumpOnSingleField(ProtoOutputStream proto, long fieldId) {
+            for (int i = 0; i < mVibrations.size(); i++) {
+                for (AggregatedVibrationRecord info : mVibrations.valueAt(i)) {
+                    info.dump(proto, fieldId);
+                }
             }
         }
     }
 
+    /**
+     * Record that keeps the last {@link Vibration.DebugInfo} played, aggregating close vibrations
+     * from the same uid that have the same {@link VibrationAttributes} and {@link VibrationEffect}.
+     */
+    private static final class AggregatedVibrationRecord {
+        private final Vibration.DebugInfo mFirstVibration;
+        private Vibration.DebugInfo mLatestVibration;
+        private int mVibrationCount;
+
+        AggregatedVibrationRecord(Vibration.DebugInfo info) {
+            mLatestVibration = mFirstVibration = info;
+            mVibrationCount = 1;
+        }
+
+        synchronized boolean mayAggregate(Vibration.DebugInfo info, long timeLimit) {
+            return Objects.equals(mLatestVibration.mCallerInfo.uid, info.mCallerInfo.uid)
+                    && Objects.equals(mLatestVibration.mCallerInfo.attrs, info.mCallerInfo.attrs)
+                    && Objects.equals(mLatestVibration.mPlayedEffect, info.mPlayedEffect)
+                    && Math.abs(mLatestVibration.mCreateTime - info.mCreateTime) < timeLimit;
+        }
+
+        synchronized void record(Vibration.DebugInfo vib) {
+            mLatestVibration = vib;
+            mVibrationCount++;
+        }
+
+        synchronized void dump(IndentingPrintWriter pw) {
+            mFirstVibration.dumpCompact(pw);
+            if (mVibrationCount == 1) {
+                return;
+            }
+            if (mVibrationCount > 2) {
+                pw.println(
+                        "-> Skipping " + (mVibrationCount - 2) + " aggregated vibrations, latest:");
+            }
+            mLatestVibration.dumpCompact(pw);
+        }
+
+        synchronized void dump(ProtoOutputStream proto, long fieldId) {
+            mLatestVibration.dump(proto, fieldId);
+        }
+    }
+
     /** Clears mNextVibration if set, ending it cleanly */
     @GuardedBy("mLock")
     private void clearNextVibrationLocked(Vibration.EndInfo vibrationEndInfo) {
@@ -1674,7 +1802,7 @@
     /**
      * Ends the external vibration, and clears related service state.
      *
-     * @param vibrationEndInfo the status and related info to end the associated Vibration with
+     * @param vibrationEndInfo        the status and related info to end the associated Vibration
      * @param continueExternalControl indicates whether external control will continue. If not, the
      *                                HAL will have external control turned off.
      */
@@ -1899,6 +2027,9 @@
                 if ("sequential".equals(cmd)) {
                     return runSequential();
                 }
+                if ("xml".equals(cmd)) {
+                    return runXml();
+                }
                 if ("cancel".equals(cmd)) {
                     return runCancel();
                 }
@@ -1973,6 +2104,14 @@
             return 0;
         }
 
+        private int runXml() {
+            CommonOptions commonOptions = new CommonOptions();
+            String xml = getNextArgRequired();
+            CombinedVibration vibration = parseXml(xml);
+            runVibrate(commonOptions, vibration);
+            return 0;
+        }
+
         private int runCancel() {
             // Cancel is only needed if the vibration was run in the background, otherwise it's
             // terminated by the shell command ending. In these cases, the token was that of the
@@ -2157,15 +2296,28 @@
         }
 
         private VibrationAttributes createVibrationAttributes(CommonOptions commonOptions) {
-            final int flags =
-                    commonOptions.force ? VibrationAttributes.FLAG_BYPASS_INTERRUPTION_POLICY : 0;
+            // This will bypass user settings, Do Not Disturb and other interruption policies.
+            final int flags = commonOptions.force ? ATTRIBUTES_ALL_BYPASS_FLAGS : 0;
             return new VibrationAttributes.Builder()
                     .setFlags(flags)
-                    // Used to apply Settings.System.HAPTIC_FEEDBACK_INTENSITY to scale effects.
-                    .setUsage(VibrationAttributes.USAGE_TOUCH)
+                    // Used to allow vibrations when the adb shell process is running in background.
+                    // This will apply the NOTIFICATION_VIBRATION_INTENSITY setting.
+                    .setUsage(VibrationAttributes.USAGE_COMMUNICATION_REQUEST)
                     .build();
         }
 
+        private CombinedVibration parseXml(String xml) {
+            try {
+                VibrationEffect effect = VibrationXmlParser.parse(new StringReader(xml));
+                if (effect == null) {
+                    throw new IllegalArgumentException("Error parsing vibration XML " + xml);
+                }
+                return CombinedVibration.createParallel(effect);
+            } catch (IOException e) {
+                throw new RuntimeException("Error parsing vibration XML " + xml, e);
+            }
+        }
+
         @Override
         public void onHelp() {
             try (PrintWriter pw = getOutPrintWriter();) {
@@ -2182,6 +2334,9 @@
                 pw.println("    Vibrates different effects on each vibrator in sync.");
                 pw.println("  sequential [options] (-v <vibrator-id> <effect>...)...");
                 pw.println("    Vibrates different effects on each vibrator in sequence.");
+                pw.println("  xml [options] <xml>");
+                pw.println("    Vibrates using combined vibration described in given XML string.");
+                pw.println("    XML containing a single effect it runs on all vibrators in sync.");
                 pw.println("  cancel");
                 pw.println("    Cancels any active vibration");
                 pw.println("");
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index da7fbf8..ddc0519 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -955,7 +955,7 @@
             try {
                 connection.mService.attach(connection, mToken, TYPE_WALLPAPER, false,
                         wpdData.mWidth, wpdData.mHeight,
-                        wpdData.mPadding, mDisplayId, wallpaper.mWhich);
+                        wpdData.mPadding, mDisplayId, wallpaper.mWhich, connection.mInfo);
             } catch (RemoteException e) {
                 Slog.w(TAG, "Failed attaching wallpaper on display", e);
                 if (wallpaper != null && !wallpaper.wallpaperUpdating
@@ -1016,8 +1016,7 @@
                         && mWallpaper.userId == mCurrentUserId) {
                     Slog.w(TAG, "Wallpaper reconnect timed out for " + mWallpaper.wallpaperComponent
                             + ", reverting to built-in wallpaper!");
-                    clearWallpaperLocked(true, FLAG_SYSTEM, mWallpaper.userId,
-                            null);
+                    clearWallpaperLocked(FLAG_SYSTEM, mWallpaper.userId, null);
                 }
             }
         };
@@ -1197,7 +1196,7 @@
                 } else {
                     // Timeout
                     Slog.w(TAG, "Reverting to built-in wallpaper!");
-                    clearWallpaperLocked(true, FLAG_SYSTEM, mWallpaper.userId, null);
+                    clearWallpaperLocked(FLAG_SYSTEM, mWallpaper.userId, null);
                     final String flattened = wpService.flattenToString();
                     EventLog.writeEvent(EventLogTags.WP_WALLPAPER_CRASHED,
                             flattened.substring(0, Math.min(flattened.length(),
@@ -1236,8 +1235,7 @@
                             } else {
                                 if (mLmkLimitRebindRetries <= 0) {
                                     Slog.w(TAG, "Reverting to built-in wallpaper due to lmk!");
-                                    clearWallpaperLocked(true, FLAG_SYSTEM, mWallpaper.userId,
-                                            null);
+                                    clearWallpaperLocked(FLAG_SYSTEM, mWallpaper.userId, null);
                                     mLmkLimitRebindRetries = LMK_RECONNECT_REBIND_RETRIES;
                                     return;
                                 }
@@ -1256,7 +1254,7 @@
                                     && mWallpaper.lastDiedTime + MIN_WALLPAPER_CRASH_TIME
                                     > SystemClock.uptimeMillis()) {
                                 Slog.w(TAG, "Reverting to built-in wallpaper!");
-                                clearWallpaperLocked(true, FLAG_SYSTEM, mWallpaper.userId, null);
+                                clearWallpaperLocked(FLAG_SYSTEM, mWallpaper.userId, null);
                             } else {
                                 mWallpaper.lastDiedTime = SystemClock.uptimeMillis();
                                 tryToRebind();
@@ -1497,7 +1495,7 @@
                                 wallpaper, null)) {
                             Slog.w(TAG, "Wallpaper " + wpService
                                     + " no longer available; reverting to default");
-                            clearWallpaperLocked(false, FLAG_SYSTEM, wallpaper.userId, null);
+                            clearWallpaperLocked(FLAG_SYSTEM, wallpaper.userId, null);
                         }
                     }
                 }
@@ -1585,7 +1583,7 @@
                     if (doit) {
                         Slog.w(TAG, "Wallpaper uninstalled, removing: "
                                 + wallpaper.wallpaperComponent);
-                        clearWallpaperLocked(false, FLAG_SYSTEM, wallpaper.userId, null);
+                        clearWallpaperLocked(FLAG_SYSTEM, wallpaper.userId, null);
                     }
                 }
             }
@@ -1606,7 +1604,7 @@
                 } catch (NameNotFoundException e) {
                     Slog.w(TAG, "Wallpaper component gone, removing: "
                             + wallpaper.wallpaperComponent);
-                    clearWallpaperLocked(false, FLAG_SYSTEM, wallpaper.userId, null);
+                    clearWallpaperLocked(FLAG_SYSTEM, wallpaper.userId, null);
                 }
             }
             if (wallpaper.nextWallpaperComponent != null
@@ -1638,7 +1636,8 @@
         mShuttingDown = false;
         mImageWallpaper = ComponentName.unflattenFromString(
                 context.getResources().getString(R.string.image_wallpaper_component));
-        mDefaultWallpaperComponent = WallpaperManager.getCmfDefaultWallpaperComponent(context);
+        ComponentName defaultComponent = WallpaperManager.getCmfDefaultWallpaperComponent(context);
+        mDefaultWallpaperComponent = defaultComponent == null ? mImageWallpaper : defaultComponent;
         mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class);
         mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class);
         mIPackageManager = AppGlobals.getPackageManager();
@@ -1721,7 +1720,7 @@
                 if (DEBUG) {
                     Slog.i(TAG, "Unable to regenerate crop; resetting");
                 }
-                clearWallpaperLocked(false, FLAG_SYSTEM, UserHandle.USER_SYSTEM, null);
+                clearWallpaperLocked(FLAG_SYSTEM, UserHandle.USER_SYSTEM, null);
             }
         } else {
             if (DEBUG) {
@@ -1978,7 +1977,7 @@
                 }
 
                 if (si == null) {
-                    clearWallpaperLocked(false, FLAG_SYSTEM, wallpaper.userId, reply);
+                    clearWallpaperLocked(FLAG_SYSTEM, wallpaper.userId, reply);
                 } else {
                     Slog.w(TAG, "Wallpaper isn't direct boot aware; using fallback until unlocked");
                     // We might end up persisting the current wallpaper data
@@ -2002,10 +2001,10 @@
 
         if (serviceInfo == null) {
             if (wallpaper.mWhich == (FLAG_LOCK | FLAG_SYSTEM)) {
-                clearWallpaperLocked(false, FLAG_SYSTEM, wallpaper.userId, null);
-                clearWallpaperLocked(false, FLAG_LOCK, wallpaper.userId, reply);
+                clearWallpaperLocked(FLAG_SYSTEM, wallpaper.userId, null);
+                clearWallpaperLocked(FLAG_LOCK, wallpaper.userId, reply);
             } else {
-                clearWallpaperLocked(false, wallpaper.mWhich, wallpaper.userId, reply);
+                clearWallpaperLocked(wallpaper.mWhich, wallpaper.userId, reply);
             }
             return;
         }
@@ -2038,9 +2037,9 @@
         WallpaperData data = null;
         synchronized (mLock) {
             if (mIsLockscreenLiveWallpaperEnabled) {
-                clearWallpaperLocked(callingPackage, false, which, userId);
+                clearWallpaperLocked(callingPackage, which, userId);
             } else {
-                clearWallpaperLocked(false, which, userId, null);
+                clearWallpaperLocked(which, userId, null);
             }
 
             if (which == FLAG_LOCK) {
@@ -2058,8 +2057,7 @@
         }
     }
 
-    private void clearWallpaperLocked(String callingPackage, boolean defaultFailed,
-            int which, int userId) {
+    private void clearWallpaperLocked(String callingPackage, int which, int userId) {
 
         // Might need to bring it in the first time to establish our rewrite
         if (!mWallpaperMap.contains(userId)) {
@@ -2094,7 +2092,7 @@
                 component = wallpaper.wallpaperComponent;
                 finalWhich = FLAG_LOCK | FLAG_SYSTEM;
             } else {
-                component = defaultFailed ? mImageWallpaper : null;
+                component = null;
                 finalWhich = which;
             }
 
@@ -2114,8 +2112,7 @@
     }
 
     // TODO(b/266818039) remove this version of the method
-    private void clearWallpaperLocked(boolean defaultFailed, int which, int userId,
-            IRemoteCallback reply) {
+    private void clearWallpaperLocked(int which, int userId, IRemoteCallback reply) {
         if (which != FLAG_SYSTEM && which != FLAG_LOCK) {
             throw new IllegalArgumentException("Must specify exactly one kind of wallpaper to clear");
         }
@@ -2168,9 +2165,7 @@
                 wallpaper.primaryColors = null;
                 wallpaper.imageWallpaperPending = false;
                 if (userId != mCurrentUserId) return;
-                if (bindWallpaperComponentLocked(defaultFailed
-                        ? mImageWallpaper
-                                : null, true, false, wallpaper, reply)) {
+                if (bindWallpaperComponentLocked(null, true, false, wallpaper, reply)) {
                     return;
                 }
             } catch (IllegalArgumentException e1) {
@@ -2224,8 +2219,8 @@
                     continue;
                 }
 
-                // ignore managed profiles
-                if (user.isManagedProfile()) {
+                // ignore profiles
+                if (user.isProfile()) {
                     continue;
                 }
                 WallpaperData wd = mWallpaperMap.get(user.id);
@@ -3527,11 +3522,6 @@
         try {
             if (componentName == null) {
                 componentName = mDefaultWallpaperComponent;
-                if (componentName == null) {
-                    // Fall back to static image wallpaper
-                    componentName = mImageWallpaper;
-                    if (DEBUG_LIVE) Slog.v(TAG, "No default component; using image wallpaper");
-                }
             }
             int serviceUserId = wallpaper.userId;
             ServiceInfo si = mIPackageManager.getServiceInfo(componentName,
@@ -3600,7 +3590,9 @@
                 final int hasPrivilege = mIPackageManager.checkPermission(
                         android.Manifest.permission.AMBIENT_WALLPAPER, wi.getPackageName(),
                         serviceUserId);
-                if (hasPrivilege != PERMISSION_GRANTED) {
+                // All watch wallpapers support ambient mode by default.
+                if (hasPrivilege != PERMISSION_GRANTED
+                        && !mIPackageManager.hasSystemFeature(PackageManager.FEATURE_WATCH, 0)) {
                     String msg = "Selected service does not have "
                             + android.Manifest.permission.AMBIENT_WALLPAPER
                             + ": " + componentName;
@@ -3631,10 +3623,15 @@
             intent.putExtra(Intent.EXTRA_CLIENT_LABEL,
                     com.android.internal.R.string.wallpaper_binding_label);
             intent.putExtra(Intent.EXTRA_CLIENT_INTENT, clientIntent);
-            boolean bindSuccess = mContext.bindServiceAsUser(intent, newConn,
-                    Context.BIND_AUTO_CREATE | Context.BIND_SHOWING_UI
+            int bindFlags = Context.BIND_AUTO_CREATE | Context.BIND_SHOWING_UI
                             | Context.BIND_FOREGROUND_SERVICE_WHILE_AWAKE
-                            | Context.BIND_INCLUDE_CAPABILITIES,
+                            | Context.BIND_INCLUDE_CAPABILITIES;
+
+            if (mContext.getResources().getBoolean(
+                    com.android.internal.R.bool.config_wallpaperTopApp)) {
+                bindFlags |= Context.BIND_SCHEDULE_LIKE_TOP_APP;
+            }
+            boolean bindSuccess = mContext.bindServiceAsUser(intent, newConn, bindFlags,
                     new UserHandle(serviceUserId));
             if (!bindSuccess) {
                 String msg = "Unable to bind service: " + componentName;
@@ -3994,7 +3991,8 @@
             mFallbackWallpaper = new WallpaperData(systemUserId, FLAG_SYSTEM);
             mFallbackWallpaper.allowBackup = false;
             mFallbackWallpaper.wallpaperId = makeWallpaperIdLocked();
-            bindWallpaperComponentLocked(mImageWallpaper, true, false, mFallbackWallpaper, null);
+            bindWallpaperComponentLocked(mDefaultWallpaperComponent, true, false,
+                    mFallbackWallpaper, null);
         }
     }
 
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index b9ac5c3..59ed3d6 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -291,6 +291,7 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.ConstrainDisplayApisConfig;
 import android.content.pm.PackageManager;
+import android.content.pm.UserProperties;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
@@ -367,6 +368,7 @@
 import com.android.server.am.PendingIntentRecord;
 import com.android.server.contentcapture.ContentCaptureManagerInternal;
 import com.android.server.display.color.ColorDisplayService;
+import com.android.server.pm.UserManagerInternal;
 import com.android.server.uri.NeededUriGrants;
 import com.android.server.uri.UriPermissionOwner;
 import com.android.server.wm.ActivityMetricsLogger.TransitionInfoSnapshot;
@@ -722,6 +724,13 @@
     private boolean mInheritShownWhenLocked;
     private boolean mTurnScreenOn;
 
+    /**
+     * Whether the user is always-visible (e.g. a communal profile). Activities for such users
+     * are treated as visible regardless of what user is in the foreground, and can appear
+     * over the lockscreen.
+     */
+    private final boolean mIsUserAlwaysVisible;
+
     /** Allow activity launches which would otherwise be blocked by
      * {@link ActivityTransitionSecurityController#checkActivityAllowedToStart}
      */
@@ -2033,7 +2042,12 @@
                 .getBoolean(R.bool.config_isCameraCompatControlForStretchedIssuesEnabled);
 
         mTargetSdk = info.applicationInfo.targetSdkVersion;
-        mShowForAllUsers = (info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0;
+
+        final UserManagerInternal umi = LocalServices.getService(UserManagerInternal.class);
+        final UserProperties properties = umi.getUserProperties(mUserId);
+        mIsUserAlwaysVisible =  properties != null && properties.getAlwaysVisible();
+
+        mShowForAllUsers = (info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0 || mIsUserAlwaysVisible;
         setOrientation(info.screenOrientation);
         mRotationAnimationHint = info.rotationAnimation;
 
@@ -2115,8 +2129,7 @@
         hasBeenLaunched = false;
         mTaskSupervisor = supervisor;
 
-        info.taskAffinity = computeTaskAffinity(info.taskAffinity, info.applicationInfo.uid,
-                info.launchMode, mActivityComponent);
+        info.taskAffinity = computeTaskAffinity(info.taskAffinity, info.applicationInfo.uid);
         taskAffinity = info.taskAffinity;
         final String uid = Integer.toString(info.applicationInfo.uid);
         if (info.windowLayout != null && info.windowLayout.windowLayoutAffinity != null
@@ -2216,19 +2229,12 @@
      *
      * @param affinity The affinity of the activity.
      * @param uid The user-ID that has been assigned to this application.
-     * @param launchMode The activity launch mode
-     * @param componentName The activity component name. This is only useful when the given
-     *                      launchMode is {@link ActivityInfo#LAUNCH_SINGLE_INSTANCE}
      * @return The task affinity
      */
-    static String computeTaskAffinity(String affinity, int uid, int launchMode,
-            ComponentName componentName) {
+    static String computeTaskAffinity(String affinity, int uid) {
         final String uidStr = Integer.toString(uid);
         if (affinity != null && !affinity.startsWith(uidStr)) {
             affinity = uidStr + ":" + affinity;
-            if (launchMode == LAUNCH_SINGLE_INSTANCE && componentName != null) {
-                affinity += ":" + componentName.hashCode();
-            }
         }
         return affinity;
     }
@@ -4651,7 +4657,8 @@
      * @return {@code true} if the activity windowing mode is not in
      *         {@link android.app.WindowConfiguration#WINDOWING_MODE_PINNED} and a) activity
      *         contains windows that have {@link LayoutParams#FLAG_SHOW_WHEN_LOCKED} set or if the
-     *         activity has set {@link #mShowWhenLocked}, or b) if the activity has set
+     *         activity has set {@link #mShowWhenLocked}, or if its user
+     *         is {@link #mIsUserAlwaysVisible always-visible} or b) if the activity has set
      *         {@link #mInheritShownWhenLocked} and the activity behind this satisfies the
      *         conditions a) above.
      *         Multi-windowing mode will be exited if {@code true} is returned.
@@ -4660,17 +4667,22 @@
         if (r == null || r.getTaskFragment() == null) {
             return false;
         }
-        if (!r.inPinnedWindowingMode() && (r.mShowWhenLocked || r.containsShowWhenLockedWindow())) {
+        if (canShowWhenLockedInner(r)) {
             return true;
         } else if (r.mInheritShownWhenLocked) {
             final ActivityRecord activity = r.getTaskFragment().getActivityBelow(r);
-            return activity != null && !activity.inPinnedWindowingMode()
-                    && (activity.mShowWhenLocked || activity.containsShowWhenLockedWindow());
+            return activity != null && canShowWhenLockedInner(activity);
         } else {
             return false;
         }
     }
 
+    /** @see #canShowWhenLocked(ActivityRecord) */
+    private static boolean canShowWhenLockedInner(@NonNull ActivityRecord r) {
+        return !r.inPinnedWindowingMode() &&
+                (r.mShowWhenLocked || r.containsShowWhenLockedWindow() || r.mIsUserAlwaysVisible);
+    }
+
     /**
      *  Determines if the activity can show while lock-screen is displayed. System displays
      *  activities while lock-screen is displayed only if all activities
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index 3c650e3..4113094 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -104,7 +104,6 @@
 import android.app.WaitResult;
 import android.app.WindowConfiguration;
 import android.compat.annotation.ChangeId;
-import android.compat.annotation.Disabled;
 import android.compat.annotation.EnabledSince;
 import android.content.IIntentSender;
 import android.content.Intent;
@@ -189,7 +188,7 @@
      * Feature flag for go/activity-security rules
      */
     @ChangeId
-    @Disabled
+    @EnabledSince(targetSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
     static final long ASM_RESTRICTIONS = 230590090L;
 
     private final ActivityTaskManagerService mService;
@@ -699,6 +698,10 @@
                         mRequest.intent, caller, callingUid);
             }
 
+            if (mRequest.intent != null) {
+                mRequest.componentSpecified |= mRequest.intent.getComponent() != null;
+            }
+
             // If the caller hasn't already resolved the activity, we're willing
             // to do so here. If the caller is already holding the WM lock here,
             // and we need to check dynamic Uri permissions, then we're forced
@@ -1997,11 +2000,7 @@
             }
         }
 
-        boolean shouldBlockActivityStart = true;
-        // Used for logging/toasts. Would we block the start if target sdk was U and feature was
-        // enabled?
-        boolean wouldBlockActivityStartIgnoringFlags = true;
-
+        Pair<Boolean, Boolean> pair = null;
         if (mSourceRecord != null) {
             boolean passesAsmChecks = true;
             Task sourceTask = mSourceRecord.getTask();
@@ -2017,14 +2016,25 @@
 
             if (passesAsmChecks) {
                 Task taskToCheck = taskToFront ? sourceTask : targetTask;
-                // first == false means Should Block
-                // second == false means Would Block disregarding flags
-                Pair<Boolean, Boolean> pair = ActivityTaskSupervisor
+                pair = ActivityTaskSupervisor
                         .doesTopActivityMatchingUidExistForAsm(taskToCheck, mSourceRecord.getUid(),
                                 mSourceRecord);
-                shouldBlockActivityStart = !pair.first;
-                wouldBlockActivityStartIgnoringFlags = !pair.second;
             }
+        } else if (!taskToFront) {
+            // We don't have a sourceRecord, and we're launching into an existing task.
+            // Allow if callingUid is top of stack.
+            pair = ActivityTaskSupervisor
+                    .doesTopActivityMatchingUidExistForAsm(targetTask, mCallingUid,
+                            /*sourceRecord*/null);
+        }
+
+        boolean shouldBlockActivityStart = true;
+        if (pair != null) {
+            // We block if feature flag is enabled
+            shouldBlockActivityStart = !pair.first;
+            // Used for logging/toasts. Would we block if target sdk was U and feature was
+            // enabled? If so, we can't return here but we also might not block at the end
+            boolean wouldBlockActivityStartIgnoringFlags = !pair.second;
 
             if (!wouldBlockActivityStartIgnoringFlags) {
                 return true;
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 78da5de..8673b90 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -18,6 +18,7 @@
 
 import static android.Manifest.permission.BIND_VOICE_INTERACTION;
 import static android.Manifest.permission.CHANGE_CONFIGURATION;
+import static android.Manifest.permission.CONTROL_KEYGUARD;
 import static android.Manifest.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS;
 import static android.Manifest.permission.DETECT_SCREEN_CAPTURE;
 import static android.Manifest.permission.INTERACT_ACROSS_USERS;
@@ -311,6 +312,7 @@
  * {@hide}
  */
 public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
+    private static final String GRAMMATICAL_GENDER_PROPERTY = "persist.sys.grammatical_gender";
     private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityTaskManagerService" : TAG_ATM;
     static final String TAG_ROOT_TASK = TAG + POSTFIX_ROOT_TASK;
     static final String TAG_SWITCH = TAG + POSTFIX_SWITCH;
@@ -928,6 +930,14 @@
             configuration.setLayoutDirection(configuration.locale);
         }
 
+        // Retrieve the grammatical gender from system property, set it into configuration which
+        // will get updated later if the grammatical gender raw value of current configuration is
+        // {@link Configuration#GRAMMATICAL_GENDER_UNDEFINED}.
+        if (configuration.getGrammaticalGenderRaw() == Configuration.GRAMMATICAL_GENDER_UNDEFINED) {
+            configuration.setGrammaticalGender(SystemProperties.getInt(GRAMMATICAL_GENDER_PROPERTY,
+                    Configuration.GRAMMATICAL_GENDER_UNDEFINED));
+        }
+
         synchronized (mGlobalLock) {
             mForceResizableActivities = forceResizable;
             mDevEnableNonResizableMultiWindow = devEnableNonResizableMultiWindow;
@@ -3540,6 +3550,7 @@
 
     @Override
     public void keyguardGoingAway(int flags) {
+        mAmInternal.enforceCallingPermission(CONTROL_KEYGUARD, "unlock keyguard");
         enforceNotIsolatedCaller("keyguardGoingAway");
         final long token = Binder.clearCallingIdentity();
         try {
@@ -6056,6 +6067,12 @@
 
         @Override
         public void showSystemReadyErrorDialogsIfNeeded() {
+            if (Trace.isTagEnabled(TRACE_TAG_WINDOW_MANAGER)) {
+                Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "showSystemReadyErrorDialogs");
+            }
+            // Pull the check for build consistency outside the lock, to avoid holding the lock for
+            // too long, given that `Build.isBuildConsistent()` takes relatively long.
+            boolean isBuildConsistent = Build.isBuildConsistent();
             synchronized (mGlobalLock) {
                 try {
                     if (AppGlobals.getPackageManager().hasSystemUidErrors()) {
@@ -6078,7 +6095,7 @@
                 } catch (RemoteException e) {
                 }
 
-                if (!Build.isBuildConsistent()) {
+                if (!isBuildConsistent) {
                     Slog.e(TAG, "Build fingerprint is not consistent, warning user");
                     mUiHandler.post(() -> {
                         if (mShowDialogs) {
@@ -6095,6 +6112,7 @@
                     });
                 }
             }
+            Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
         }
 
         @Override
diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
index cc130c4..f9dac3a 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
@@ -621,6 +621,13 @@
         mFinishingActivities.remove(r);
 
         stopWaitingForActivityVisible(r);
+
+        final Task task = r.getTask();
+        if (task != null && task.mKillProcessesOnDestroyed && task.getTopMostActivity() == r) {
+            // The activity is destroyed or its process is died, so cancel the pending kill.
+            task.mKillProcessesOnDestroyed = false;
+            removeTimeoutOfKillProcessesOnDestroyed(task);
+        }
     }
 
     /** There is no valid launch time, just stop waiting. */
@@ -1903,9 +1910,13 @@
         killTaskProcessesIfPossible(task);
     }
 
+    private void removeTimeoutOfKillProcessesOnDestroyed(Task task) {
+        mHandler.removeMessages(KILL_TASK_PROCESSES_TIMEOUT_MSG, task);
+    }
+
     void killTaskProcessesOnDestroyedIfNeeded(Task task) {
         if (task == null || !task.mKillProcessesOnDestroyed) return;
-        mHandler.removeMessages(KILL_TASK_PROCESSES_TIMEOUT_MSG, task);
+        removeTimeoutOfKillProcessesOnDestroyed(task);
         killTaskProcessesIfPossible(task);
     }
 
@@ -2778,7 +2789,7 @@
                 } break;
                 case KILL_TASK_PROCESSES_TIMEOUT_MSG: {
                     final Task task = (Task) msg.obj;
-                    if (task.mKillProcessesOnDestroyed) {
+                    if (task.mKillProcessesOnDestroyed && task.hasActivity()) {
                         Slog.i(TAG, "Destroy timeout of remove-task, attempt to kill " + task);
                         killTaskProcessesIfPossible(task);
                     }
diff --git a/services/core/java/com/android/server/wm/AppWarnings.java b/services/core/java/com/android/server/wm/AppWarnings.java
index 0273a30..ad5f442 100644
--- a/services/core/java/com/android/server/wm/AppWarnings.java
+++ b/services/core/java/com/android/server/wm/AppWarnings.java
@@ -160,7 +160,11 @@
      * @param r activity record for which the warning may be displayed
      */
     public void showDeprecatedTargetDialogIfNeeded(ActivityRecord r) {
-        if (r.info.applicationInfo.targetSdkVersion < Build.VERSION.MIN_SUPPORTED_TARGET_SDK_INT) {
+        // The warning dialog can be disabled for debugging or testing purposes
+        final boolean disableDeprecatedTargetSdkDialog = SystemProperties.getBoolean(
+                "debug.wm.disable_deprecated_target_sdk_dialog", false);
+        if (r.info.applicationInfo.targetSdkVersion < Build.VERSION.MIN_SUPPORTED_TARGET_SDK_INT
+                && !disableDeprecatedTargetSdkDialog) {
             mUiHandler.showDeprecatedTargetDialog(r);
         }
     }
diff --git a/services/core/java/com/android/server/wm/Dimmer.java b/services/core/java/com/android/server/wm/Dimmer.java
index d7667d8..4f3ab8b 100644
--- a/services/core/java/com/android/server/wm/Dimmer.java
+++ b/services/core/java/com/android/server/wm/Dimmer.java
@@ -349,7 +349,8 @@
 
         // Otherwise use the same duration as the animation on the WindowContainer
         AnimationAdapter animationAdapter = container.mSurfaceAnimator.getAnimation();
-        return animationAdapter == null ? DEFAULT_DIM_ANIM_DURATION
+        final float durationScale = container.mWmService.getTransitionAnimationScaleLocked();
+        return animationAdapter == null ? (long) (DEFAULT_DIM_ANIM_DURATION * durationScale)
                 : animationAdapter.getDurationHint();
     }
 
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index e292ce0..c909cbe 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -34,7 +34,6 @@
 import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
 import static android.content.res.Configuration.ORIENTATION_UNDEFINED;
 import static android.os.Build.VERSION_CODES.N;
-import static android.os.Process.SYSTEM_UID;
 import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
 import static android.util.DisplayMetrics.DENSITY_DEFAULT;
 import static android.util.RotationUtils.deltaRotation;
@@ -522,7 +521,6 @@
     boolean mWaitingForConfig;
 
     // TODO(multi-display): remove some of the usages.
-    @VisibleForTesting
     boolean isDefaultDisplay;
 
     /** Detect user tapping outside of current focused task bounds .*/
@@ -3362,6 +3360,7 @@
             mRootWindowContainer.mTaskSupervisor
                     .getKeyguardController().onDisplayRemoved(mDisplayId);
             mWallpaperController.resetLargestDisplay(mDisplay);
+            mWmService.mDisplayWindowSettings.onDisplayRemoved(this);
         } finally {
             mDisplayReady = false;
         }
@@ -5422,8 +5421,10 @@
             // Attach the SystemUiContext to this DisplayContent the get latest configuration.
             // Note that the SystemUiContext will be removed automatically if this DisplayContent
             // is detached.
+            final WindowProcessController wpc = mAtmService.getProcessController(
+                    getDisplayUiContext().getIApplicationThread());
             mWmService.mWindowContextListenerController.registerWindowContainerListener(
-                    getDisplayUiContext().getWindowContextToken(), this, SYSTEM_UID,
+                    wpc, getDisplayUiContext().getWindowContextToken(), this,
                     INVALID_WINDOW_TYPE, null /* options */);
         }
     }
@@ -6493,6 +6494,13 @@
     }
 
     /**
+     * @return whether the physical display has a fixed orientation and cannot be rotated.
+     */
+    boolean isDisplayOrientationFixed() {
+        return (mDisplayInfo.flags & Display.FLAG_ROTATES_WITH_CONTENT) == 0;
+    }
+
+    /**
      * @return whether AOD is showing on this display
      */
     boolean isAodShowing() {
@@ -7041,4 +7049,12 @@
         // Display is the root, so it's not rotated relative to anything.
         return Surface.ROTATION_0;
     }
+
+    public void replaceContent(SurfaceControl sc) {
+        new Transaction().reparent(sc, getSurfaceControl())
+                .reparent(mWindowingLayer, null)
+                .reparent(mOverlayLayer, null)
+                .reparent(mA11yOverlayLayer, null)
+                .apply();
+    }
 }
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index 354b0db..1871cf6 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -951,7 +951,7 @@
             float maxOpacity = mService.mMaximumObscuringOpacityForTouch;
             if (attrs.alpha > maxOpacity
                     && (attrs.flags & FLAG_NOT_TOUCHABLE) != 0
-                    && (attrs.privateFlags & PRIVATE_FLAG_TRUSTED_OVERLAY) == 0) {
+                    && !win.isTrustedOverlay()) {
                 // The app is posting a SAW with the intent of letting touches pass through, but
                 // they are going to be deemed untrusted and will be blocked. Try to honor the
                 // intent of letting touches pass through at the cost of 0.2 opacity for app
diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java
index ed3fad0..9ef25b6 100644
--- a/services/core/java/com/android/server/wm/DisplayRotation.java
+++ b/services/core/java/com/android/server/wm/DisplayRotation.java
@@ -434,7 +434,8 @@
         final boolean isTv = mContext.getPackageManager().hasSystemFeature(
                 PackageManager.FEATURE_LEANBACK);
         mDefaultFixedToUserRotation =
-                (isCar || isTv || mService.mIsPc || mDisplayContent.forceDesktopMode())
+                (isCar || isTv || mService.mIsPc || mDisplayContent.forceDesktopMode()
+                        || mDisplayContent.isDisplayOrientationFixed())
                 // For debug purposes the next line turns this feature off with:
                 // $ adb shell setprop config.override_forced_orient true
                 // $ adb shell wm size reset
@@ -980,6 +981,8 @@
                 return false;
             case IWindowManager.FIXED_TO_USER_ROTATION_ENABLED:
                 return true;
+            case IWindowManager.FIXED_TO_USER_ROTATION_IF_NO_AUTO_ROTATION:
+                return false;
             default:
                 return mDefaultFixedToUserRotation;
         }
@@ -1293,9 +1296,13 @@
             // Application just wants to remain locked in the last rotation.
             preferredRotation = lastRotation;
         } else if (!mSupportAutoRotation) {
-            // If we don't support auto-rotation then bail out here and ignore
-            // the sensor and any rotation lock settings.
-            preferredRotation = -1;
+            if (mFixedToUserRotation == IWindowManager.FIXED_TO_USER_ROTATION_IF_NO_AUTO_ROTATION) {
+                preferredRotation = mUserRotation;
+            } else {
+                // If we don't support auto-rotation then bail out here and ignore
+                // the sensor and any rotation lock settings.
+                preferredRotation = -1;
+            }
         } else if (((mUserRotationMode == WindowManagerPolicy.USER_ROTATION_FREE
                             || isTabletopAutoRotateOverrideEnabled())
                         && (orientation == ActivityInfo.SCREEN_ORIENTATION_USER
diff --git a/services/core/java/com/android/server/wm/DisplayWindowSettings.java b/services/core/java/com/android/server/wm/DisplayWindowSettings.java
index 4c0435e..e1753d7 100644
--- a/services/core/java/com/android/server/wm/DisplayWindowSettings.java
+++ b/services/core/java/com/android/server/wm/DisplayWindowSettings.java
@@ -33,6 +33,7 @@
 import android.view.DisplayInfo;
 import android.view.IWindowManager;
 import android.view.Surface;
+import android.view.WindowManager;
 import android.view.WindowManager.DisplayImePolicy;
 
 import com.android.server.policy.WindowManagerPolicy;
@@ -45,15 +46,20 @@
  * delegates the persistence and lookup of settings values to the supplied {@link SettingsProvider}.
  */
 class DisplayWindowSettings {
+    @NonNull
     private final WindowManagerService mService;
+    @NonNull
     private final SettingsProvider mSettingsProvider;
 
-    DisplayWindowSettings(WindowManagerService service, SettingsProvider settingsProvider) {
+    DisplayWindowSettings(@NonNull WindowManagerService service,
+            @NonNull SettingsProvider settingsProvider) {
         mService = service;
         mSettingsProvider = settingsProvider;
     }
 
-    void setUserRotation(DisplayContent displayContent, int rotationMode, int rotation) {
+    void setUserRotation(@NonNull DisplayContent displayContent,
+            @WindowManagerPolicy.UserRotationMode int rotationMode,
+            @Surface.Rotation int rotation) {
         final DisplayInfo displayInfo = displayContent.getDisplayInfo();
         final SettingsProvider.SettingsEntry overrideSettings =
                 mSettingsProvider.getOverrideSettings(displayInfo);
@@ -62,7 +68,7 @@
         mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
     }
 
-    void setForcedSize(DisplayContent displayContent, int width, int height) {
+    void setForcedSize(@NonNull DisplayContent displayContent, int width, int height) {
         if (displayContent.isDefaultDisplay) {
             final String sizeString = (width == 0 || height == 0) ? "" : (width + "," + height);
             Settings.Global.putString(mService.mContext.getContentResolver(),
@@ -77,21 +83,20 @@
         mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
     }
 
-    void setForcedDensity(DisplayInfo info, int density, int userId) {
+    void setForcedDensity(@NonNull DisplayInfo info, int density, int userId) {
         if (info.displayId == Display.DEFAULT_DISPLAY) {
             final String densityString = density == 0 ? "" : Integer.toString(density);
             Settings.Secure.putStringForUser(mService.mContext.getContentResolver(),
                     Settings.Secure.DISPLAY_DENSITY_FORCED, densityString, userId);
         }
 
-        final DisplayInfo displayInfo = info;
         final SettingsProvider.SettingsEntry overrideSettings =
-                mSettingsProvider.getOverrideSettings(displayInfo);
+                mSettingsProvider.getOverrideSettings(info);
         overrideSettings.mForcedDensity = density;
-        mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
+        mSettingsProvider.updateOverrideSettings(info, overrideSettings);
     }
 
-    void setForcedScalingMode(DisplayContent displayContent, @ForceScalingMode int mode) {
+    void setForcedScalingMode(@NonNull DisplayContent displayContent, @ForceScalingMode int mode) {
         if (displayContent.isDefaultDisplay) {
             Settings.Global.putInt(mService.mContext.getContentResolver(),
                     Settings.Global.DISPLAY_SCALING_FORCE, mode);
@@ -104,7 +109,7 @@
         mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
     }
 
-    void setFixedToUserRotation(DisplayContent displayContent, int fixedToUserRotation) {
+    void setFixedToUserRotation(@NonNull DisplayContent displayContent, int fixedToUserRotation) {
         final DisplayInfo displayInfo = displayContent.getDisplayInfo();
         final SettingsProvider.SettingsEntry overrideSettings =
                 mSettingsProvider.getOverrideSettings(displayInfo);
@@ -112,8 +117,8 @@
         mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
     }
 
-    void setIgnoreOrientationRequest(
-            DisplayContent displayContent, boolean ignoreOrientationRequest) {
+    void setIgnoreOrientationRequest(@NonNull DisplayContent displayContent,
+            boolean ignoreOrientationRequest) {
         final DisplayInfo displayInfo = displayContent.getDisplayInfo();
         final SettingsProvider.SettingsEntry overrideSettings =
                 mSettingsProvider.getOverrideSettings(displayInfo);
@@ -121,7 +126,9 @@
         mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
     }
 
-    private int getWindowingModeLocked(SettingsProvider.SettingsEntry settings, DisplayContent dc) {
+    @WindowConfiguration.WindowingMode
+    private int getWindowingModeLocked(@NonNull SettingsProvider.SettingsEntry settings,
+            @NonNull DisplayContent dc) {
         int windowingMode = settings.mWindowingMode;
         // This display used to be in freeform, but we don't support freeform anymore, so fall
         // back to fullscreen.
@@ -139,13 +146,15 @@
         return windowingMode;
     }
 
-    int getWindowingModeLocked(DisplayContent dc) {
+    @WindowConfiguration.WindowingMode
+    int getWindowingModeLocked(@NonNull DisplayContent dc) {
         final DisplayInfo displayInfo = dc.getDisplayInfo();
         final SettingsProvider.SettingsEntry settings = mSettingsProvider.getSettings(displayInfo);
         return getWindowingModeLocked(settings, dc);
     }
 
-    void setWindowingModeLocked(DisplayContent dc, int mode) {
+    void setWindowingModeLocked(@NonNull DisplayContent dc,
+            @WindowConfiguration.WindowingMode int mode) {
         final DisplayInfo displayInfo = dc.getDisplayInfo();
         final SettingsProvider.SettingsEntry overrideSettings =
                 mSettingsProvider.getOverrideSettings(displayInfo);
@@ -157,7 +166,8 @@
         mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
     }
 
-    int getRemoveContentModeLocked(DisplayContent dc) {
+    @WindowManager.RemoveContentMode
+    int getRemoveContentModeLocked(@NonNull DisplayContent dc) {
         final DisplayInfo displayInfo = dc.getDisplayInfo();
         final SettingsProvider.SettingsEntry settings = mSettingsProvider.getSettings(displayInfo);
         if (settings.mRemoveContentMode == REMOVE_CONTENT_MODE_UNDEFINED) {
@@ -171,7 +181,8 @@
         return settings.mRemoveContentMode;
     }
 
-    void setRemoveContentModeLocked(DisplayContent dc, int mode) {
+    void setRemoveContentModeLocked(@NonNull DisplayContent dc,
+            @WindowManager.RemoveContentMode int mode) {
         final DisplayInfo displayInfo = dc.getDisplayInfo();
         final SettingsProvider.SettingsEntry overrideSettings =
                 mSettingsProvider.getOverrideSettings(displayInfo);
@@ -179,14 +190,14 @@
         mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
     }
 
-    boolean shouldShowWithInsecureKeyguardLocked(DisplayContent dc) {
+    boolean shouldShowWithInsecureKeyguardLocked(@NonNull DisplayContent dc) {
         final DisplayInfo displayInfo = dc.getDisplayInfo();
         final SettingsProvider.SettingsEntry settings = mSettingsProvider.getSettings(displayInfo);
         return settings.mShouldShowWithInsecureKeyguard != null
                 ? settings.mShouldShowWithInsecureKeyguard : false;
     }
 
-    void setShouldShowWithInsecureKeyguardLocked(DisplayContent dc, boolean shouldShow) {
+    void setShouldShowWithInsecureKeyguardLocked(@NonNull DisplayContent dc, boolean shouldShow) {
         if (!dc.isPrivate() && shouldShow) {
             throw new IllegalArgumentException("Public display can't be allowed to show content"
                     + " when locked");
@@ -199,7 +210,7 @@
         mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
     }
 
-    void setDontMoveToTop(DisplayContent dc, boolean dontMoveToTop) {
+    void setDontMoveToTop(@NonNull DisplayContent dc, boolean dontMoveToTop) {
         DisplayInfo displayInfo = dc.getDisplayInfo();
         SettingsProvider.SettingsEntry overrideSettings =
                 mSettingsProvider.getSettings(displayInfo);
@@ -207,7 +218,7 @@
         mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
     }
 
-    boolean shouldShowSystemDecorsLocked(DisplayContent dc) {
+    boolean shouldShowSystemDecorsLocked(@NonNull DisplayContent dc) {
         if (dc.getDisplayId() == Display.DEFAULT_DISPLAY) {
             // Default display should show system decors.
             return true;
@@ -218,7 +229,7 @@
         return settings.mShouldShowSystemDecors != null ? settings.mShouldShowSystemDecors : false;
     }
 
-    void setShouldShowSystemDecorsLocked(DisplayContent dc, boolean shouldShow) {
+    void setShouldShowSystemDecorsLocked(@NonNull DisplayContent dc, boolean shouldShow) {
         final DisplayInfo displayInfo = dc.getDisplayInfo();
         final SettingsProvider.SettingsEntry overrideSettings =
                 mSettingsProvider.getOverrideSettings(displayInfo);
@@ -226,7 +237,8 @@
         mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
     }
 
-    @DisplayImePolicy int getImePolicyLocked(DisplayContent dc) {
+    @DisplayImePolicy
+    int getImePolicyLocked(@NonNull DisplayContent dc) {
         if (dc.getDisplayId() == Display.DEFAULT_DISPLAY) {
             // Default display should show IME.
             return DISPLAY_IME_POLICY_LOCAL;
@@ -238,7 +250,7 @@
                 : DISPLAY_IME_POLICY_FALLBACK_DISPLAY;
     }
 
-    void setDisplayImePolicy(DisplayContent dc, @DisplayImePolicy int imePolicy) {
+    void setDisplayImePolicy(@NonNull DisplayContent dc, @DisplayImePolicy int imePolicy) {
         final DisplayInfo displayInfo = dc.getDisplayInfo();
         final SettingsProvider.SettingsEntry overrideSettings =
                 mSettingsProvider.getOverrideSettings(displayInfo);
@@ -246,11 +258,11 @@
         mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
     }
 
-    void applySettingsToDisplayLocked(DisplayContent dc) {
+    void applySettingsToDisplayLocked(@NonNull DisplayContent dc) {
         applySettingsToDisplayLocked(dc, /* includeRotationSettings */ true);
     }
 
-    void applySettingsToDisplayLocked(DisplayContent dc, boolean includeRotationSettings) {
+    void applySettingsToDisplayLocked(@NonNull DisplayContent dc, boolean includeRotationSettings) {
         final DisplayInfo displayInfo = dc.getDisplayInfo();
         final SettingsProvider.SettingsEntry settings = mSettingsProvider.getSettings(displayInfo);
 
@@ -274,9 +286,8 @@
         dc.mIsDensityForced = hasDensityOverride;
         dc.mIsSizeForced = hasSizeOverride;
 
-        final boolean ignoreDisplayCutout = settings.mIgnoreDisplayCutout != null
+        dc.mIgnoreDisplayCutout = settings.mIgnoreDisplayCutout != null
                 ? settings.mIgnoreDisplayCutout : false;
-        dc.mIgnoreDisplayCutout = ignoreDisplayCutout;
 
         final int width = hasSizeOverride ? settings.mForcedWidth : dc.mInitialDisplayWidth;
         final int height = hasSizeOverride ? settings.mForcedHeight : dc.mInitialDisplayHeight;
@@ -296,7 +307,7 @@
         if (includeRotationSettings) applyRotationSettingsToDisplayLocked(dc);
     }
 
-    void applyRotationSettingsToDisplayLocked(DisplayContent dc) {
+    void applyRotationSettingsToDisplayLocked(@NonNull DisplayContent dc) {
         final DisplayInfo displayInfo = dc.getDisplayInfo();
         final SettingsProvider.SettingsEntry settings = mSettingsProvider.getSettings(displayInfo);
 
@@ -315,7 +326,7 @@
      * @return {@code true} if any settings for this display has changed; {@code false} if nothing
      * changed.
      */
-    boolean updateSettingsForDisplay(DisplayContent dc) {
+    boolean updateSettingsForDisplay(@NonNull DisplayContent dc) {
         final TaskDisplayArea defaultTda = dc.getDefaultTaskDisplayArea();
         if (defaultTda != null && defaultTda.getWindowingMode() != getWindowingModeLocked(dc)) {
             // For the time being the only thing that may change is windowing mode, so just update
@@ -327,6 +338,13 @@
     }
 
     /**
+     * Called when the given {@link DisplayContent} is removed to cleanup.
+     */
+    void onDisplayRemoved(@NonNull DisplayContent dc) {
+        mSettingsProvider.onDisplayRemoved(dc.getDisplayInfo());
+    }
+
+    /**
      * Provides the functionality to lookup the {@link SettingsEntry settings} for a given
      * {@link DisplayInfo}.
      * <p>
@@ -364,19 +382,29 @@
         void updateOverrideSettings(@NonNull DisplayInfo info, @NonNull SettingsEntry overrides);
 
         /**
+         * Called when a display is removed to cleanup.
+         */
+        void onDisplayRemoved(@NonNull DisplayInfo info);
+
+        /**
          * Settings for a display.
          */
         class SettingsEntry {
+            @WindowConfiguration.WindowingMode
             int mWindowingMode = WindowConfiguration.WINDOWING_MODE_UNDEFINED;
             @Nullable
+            @WindowManagerPolicy.UserRotationMode
             Integer mUserRotationMode;
             @Nullable
+            @Surface.Rotation
             Integer mUserRotation;
             int mForcedWidth;
             int mForcedHeight;
             int mForcedDensity;
             @Nullable
+            @ForceScalingMode
             Integer mForcedScalingMode;
+            @WindowManager.RemoveContentMode
             int mRemoveContentMode = REMOVE_CONTENT_MODE_UNDEFINED;
             @Nullable
             Boolean mShouldShowWithInsecureKeyguard;
@@ -395,7 +423,7 @@
 
             SettingsEntry() {}
 
-            SettingsEntry(SettingsEntry copyFrom) {
+            SettingsEntry(@NonNull SettingsEntry copyFrom) {
                 setTo(copyFrom);
             }
 
diff --git a/services/core/java/com/android/server/wm/DisplayWindowSettingsProvider.java b/services/core/java/com/android/server/wm/DisplayWindowSettingsProvider.java
index 1abb0a1..ea668fa 100644
--- a/services/core/java/com/android/server/wm/DisplayWindowSettingsProvider.java
+++ b/services/core/java/com/android/server/wm/DisplayWindowSettingsProvider.java
@@ -16,6 +16,7 @@
 
 package com.android.server.wm;
 
+import static android.view.Display.TYPE_VIRTUAL;
 import static android.view.WindowManager.DISPLAY_IME_POLICY_FALLBACK_DISPLAY;
 import static android.view.WindowManager.DISPLAY_IME_POLICY_LOCAL;
 import static android.view.WindowManager.REMOVE_CONTENT_MODE_UNDEFINED;
@@ -28,6 +29,8 @@
 import android.annotation.Nullable;
 import android.app.WindowConfiguration;
 import android.os.Environment;
+import android.util.ArrayMap;
+import android.util.ArraySet;
 import android.util.AtomicFile;
 import android.util.Slog;
 import android.util.Xml;
@@ -49,7 +52,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -86,7 +88,9 @@
         void finishWrite(OutputStream os, boolean success);
     }
 
+    @NonNull
     private ReadableSettings mBaseSettings;
+    @NonNull
     private final WritableSettings mOverrideSettings;
 
     DisplayWindowSettingsProvider() {
@@ -155,6 +159,16 @@
         mOverrideSettings.updateSettingsEntry(info, overrides);
     }
 
+    @Override
+    public void onDisplayRemoved(@NonNull DisplayInfo info) {
+        mOverrideSettings.onDisplayRemoved(info);
+    }
+
+    @VisibleForTesting
+    int getOverrideSettingsSize() {
+        return mOverrideSettings.mSettings.size();
+    }
+
     /**
      * Class that allows reading {@link SettingsEntry entries} from a
      * {@link ReadableSettingsStorage}.
@@ -168,14 +182,15 @@
          */
         @DisplayIdentifierType
         protected int mIdentifierType;
-        protected final Map<String, SettingsEntry> mSettings = new HashMap<>();
+        @NonNull
+        protected final ArrayMap<String, SettingsEntry> mSettings = new ArrayMap<>();
 
-        ReadableSettings(ReadableSettingsStorage settingsStorage) {
+        ReadableSettings(@NonNull ReadableSettingsStorage settingsStorage) {
             loadSettings(settingsStorage);
         }
 
         @Nullable
-        final SettingsEntry getSettingsEntry(DisplayInfo info) {
+        final SettingsEntry getSettingsEntry(@NonNull DisplayInfo info) {
             final String identifier = getIdentifier(info);
             SettingsEntry settings;
             // Try to get corresponding settings using preferred identifier for the current config.
@@ -193,7 +208,8 @@
         }
 
         /** Gets the identifier of choice for the current config. */
-        protected final String getIdentifier(DisplayInfo displayInfo) {
+        @NonNull
+        protected final String getIdentifier(@NonNull DisplayInfo displayInfo) {
             if (mIdentifierType == IDENTIFIER_PORT && displayInfo.address != null) {
                 // Config suggests using port as identifier for physical displays.
                 if (displayInfo.address instanceof DisplayAddress.Physical) {
@@ -203,7 +219,7 @@
             return displayInfo.uniqueId;
         }
 
-        private void loadSettings(ReadableSettingsStorage settingsStorage) {
+        private void loadSettings(@NonNull ReadableSettingsStorage settingsStorage) {
             FileData fileData = readSettings(settingsStorage);
             if (fileData != null) {
                 mIdentifierType = fileData.mIdentifierType;
@@ -217,15 +233,18 @@
      * {@link WritableSettingsStorage}.
      */
     private static final class WritableSettings extends ReadableSettings {
+        @NonNull
         private final WritableSettingsStorage mSettingsStorage;
+        @NonNull
+        private final ArraySet<String> mVirtualDisplayIdentifiers = new ArraySet<>();
 
-        WritableSettings(WritableSettingsStorage settingsStorage) {
+        WritableSettings(@NonNull WritableSettingsStorage settingsStorage) {
             super(settingsStorage);
             mSettingsStorage = settingsStorage;
         }
 
         @NonNull
-        SettingsEntry getOrCreateSettingsEntry(DisplayInfo info) {
+        SettingsEntry getOrCreateSettingsEntry(@NonNull DisplayInfo info) {
             final String identifier = getIdentifier(info);
             SettingsEntry settings;
             // Try to get corresponding settings using preferred identifier for the current config.
@@ -243,21 +262,47 @@
 
             settings = new SettingsEntry();
             mSettings.put(identifier, settings);
+            if (info.type == TYPE_VIRTUAL) {
+                // Keep track of virtual display. We don't want to write virtual display settings to
+                // file.
+                mVirtualDisplayIdentifiers.add(identifier);
+            }
             return settings;
         }
 
-        void updateSettingsEntry(DisplayInfo info, SettingsEntry settings) {
+        void updateSettingsEntry(@NonNull DisplayInfo info, @NonNull SettingsEntry settings) {
             final SettingsEntry overrideSettings = getOrCreateSettingsEntry(info);
             final boolean changed = overrideSettings.setTo(settings);
-            if (changed) {
+            if (changed && info.type != TYPE_VIRTUAL) {
                 writeSettings();
             }
         }
 
+        void onDisplayRemoved(@NonNull DisplayInfo info) {
+            final String identifier = getIdentifier(info);
+            if (!mSettings.containsKey(identifier)) {
+                return;
+            }
+            if (mVirtualDisplayIdentifiers.remove(identifier)
+                    || mSettings.get(identifier).isEmpty()) {
+                // Don't keep track of virtual display or empty settings to avoid growing the cached
+                // map.
+                mSettings.remove(identifier);
+            }
+        }
+
         private void writeSettings() {
-            FileData fileData = new FileData();
+            final FileData fileData = new FileData();
             fileData.mIdentifierType = mIdentifierType;
-            fileData.mSettings.putAll(mSettings);
+            final int size = mSettings.size();
+            for (int i = 0; i < size; i++) {
+                final String identifier = mSettings.keyAt(i);
+                if (mVirtualDisplayIdentifiers.contains(identifier)) {
+                    // Do not write virtual display settings to file.
+                    continue;
+                }
+                fileData.mSettings.put(identifier, mSettings.get(identifier));
+            }
             DisplayWindowSettingsProvider.writeSettings(mSettingsStorage, fileData);
         }
     }
@@ -283,7 +328,7 @@
     }
 
     @Nullable
-    private static FileData readSettings(ReadableSettingsStorage storage) {
+    private static FileData readSettings(@NonNull ReadableSettingsStorage storage) {
         InputStream stream;
         try {
             stream = storage.openRead();
@@ -348,13 +393,14 @@
         return fileData;
     }
 
-    private static int getIntAttribute(TypedXmlPullParser parser, String name, int defaultValue) {
+    private static int getIntAttribute(@NonNull TypedXmlPullParser parser, @NonNull String name,
+            int defaultValue) {
         return parser.getAttributeInt(null, name, defaultValue);
     }
 
     @Nullable
-    private static Integer getIntegerAttribute(TypedXmlPullParser parser, String name,
-            @Nullable Integer defaultValue) {
+    private static Integer getIntegerAttribute(@NonNull TypedXmlPullParser parser,
+            @NonNull String name, @Nullable Integer defaultValue) {
         try {
             return parser.getAttributeInt(null, name);
         } catch (Exception ignored) {
@@ -363,8 +409,8 @@
     }
 
     @Nullable
-    private static Boolean getBooleanAttribute(TypedXmlPullParser parser, String name,
-            @Nullable Boolean defaultValue) {
+    private static Boolean getBooleanAttribute(@NonNull TypedXmlPullParser parser,
+            @NonNull String name, @Nullable Boolean defaultValue) {
         try {
             return parser.getAttributeBoolean(null, name);
         } catch (Exception ignored) {
@@ -372,7 +418,7 @@
         }
     }
 
-    private static void readDisplay(TypedXmlPullParser parser, FileData fileData)
+    private static void readDisplay(@NonNull TypedXmlPullParser parser, @NonNull FileData fileData)
             throws NumberFormatException, XmlPullParserException, IOException {
         String name = parser.getAttributeValue(null, "name");
         if (name != null) {
@@ -420,7 +466,7 @@
         XmlUtils.skipCurrentTag(parser);
     }
 
-    private static void readConfig(TypedXmlPullParser parser, FileData fileData)
+    private static void readConfig(@NonNull TypedXmlPullParser parser, @NonNull FileData fileData)
             throws NumberFormatException,
             XmlPullParserException, IOException {
         fileData.mIdentifierType = getIntAttribute(parser, "identifier",
@@ -428,7 +474,8 @@
         XmlUtils.skipCurrentTag(parser);
     }
 
-    private static void writeSettings(WritableSettingsStorage storage, FileData data) {
+    private static void writeSettings(@NonNull WritableSettingsStorage storage,
+            @NonNull FileData data) {
         OutputStream stream;
         try {
             stream = storage.startWrite();
@@ -525,7 +572,8 @@
 
     private static final class FileData {
         int mIdentifierType;
-        final Map<String, SettingsEntry> mSettings = new HashMap<>();
+        @NonNull
+        final Map<String, SettingsEntry> mSettings = new ArrayMap<>();
 
         @Override
         public String toString() {
@@ -537,6 +585,7 @@
     }
 
     private static final class AtomicFileStorage implements WritableSettingsStorage {
+        @NonNull
         private final AtomicFile mAtomicFile;
 
         AtomicFileStorage(@NonNull AtomicFile atomicFile) {
diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java
index d03388a..c396a31 100644
--- a/services/core/java/com/android/server/wm/KeyguardController.java
+++ b/services/core/java/com/android/server/wm/KeyguardController.java
@@ -226,7 +226,6 @@
                 final DisplayContent dc = mRootWindowContainer.getDefaultDisplay();
                 dc.requestTransitionAndLegacyPrepare(
                         TRANSIT_TO_FRONT, TRANSIT_FLAG_KEYGUARD_APPEARING);
-                dc.mWallpaperController.showWallpaperInTransition(false /* showHome */);
                 mWindowManager.executeAppTransition();
             }
         }
@@ -283,8 +282,6 @@
                     TRANSIT_TO_BACK, transitFlags, null /* trigger */, dc);
             updateKeyguardSleepToken();
 
-            // Make the home wallpaper visible
-            dc.mWallpaperController.showWallpaperInTransition(true /* showHome */);
             // Some stack visibility might change (e.g. docked stack)
             mRootWindowContainer.resumeFocusedTasksTopActivities();
             mRootWindowContainer.ensureActivitiesVisible(null, 0, !PRESERVE_WINDOWS);
diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java
index 4faaf51..f33ecaa 100644
--- a/services/core/java/com/android/server/wm/RecentTasks.java
+++ b/services/core/java/com/android/server/wm/RecentTasks.java
@@ -183,6 +183,8 @@
 
     /** The non-empty tasks that are removed from recent tasks (see {@link #removeForAddTask}). */
     private final ArrayList<Task> mHiddenTasks = new ArrayList<>();
+    /** The maximum size that the hidden tasks are cached. */
+    private static final int MAX_HIDDEN_TASK_SIZE = 10;
 
     /** Whether to trim inactive tasks when activities are idle. */
     private boolean mCheckTrimmableTasksOnIdle;
@@ -1497,9 +1499,13 @@
         return task.compareTo(rootHomeTask) < 0;
     }
 
-    /** Remove the tasks that user may not be able to return. */
+    /** Remove the tasks that user may not be able to return when exceeds the cache limit. */
     private void removeUnreachableHiddenTasks(int windowingMode) {
-        for (int i = mHiddenTasks.size() - 1; i >= 0; i--) {
+        final int size = mHiddenTasks.size();
+        if (size <= MAX_HIDDEN_TASK_SIZE) {
+            return;
+        }
+        for (int i = size - 1; i >= MAX_HIDDEN_TASK_SIZE; i--) {
             final Task hiddenTask = mHiddenTasks.get(i);
             if (!hiddenTask.hasChild() || hiddenTask.inRecents) {
                 // The task was removed by other path or it became reachable (added to recents).
@@ -1543,7 +1549,7 @@
                 // A non-empty task is replaced by a new task. Because the removed task is no longer
                 // managed by the recent tasks list, add it to the hidden list to prevent the task
                 // from becoming dangling.
-                mHiddenTasks.add(removedTask);
+                mHiddenTasks.add(0, removedTask);
             }
             notifyTaskRemoved(removedTask, false /* wasTrimmed */, false /* killProcess */);
             if (DEBUG_RECENTS_TRIM_TASKS) {
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 9a0e47d..2f0c303 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -102,6 +102,7 @@
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.ResolveInfo;
+import android.content.pm.UserProperties;
 import android.content.res.Configuration;
 import android.graphics.Rect;
 import android.hardware.display.DisplayManager;
@@ -148,6 +149,7 @@
 import com.android.server.am.ActivityManagerService;
 import com.android.server.am.AppTimeTracker;
 import com.android.server.am.UserState;
+import com.android.server.pm.UserManagerInternal;
 import com.android.server.policy.PermissionPolicyInternal;
 import com.android.server.policy.WindowManagerPolicy;
 import com.android.server.utils.Slogf;
@@ -1877,6 +1879,14 @@
             rootTask.switchUser(userId);
         });
 
+
+        if (topFocusedRootTask != null && isAlwaysVisibleUser(topFocusedRootTask.mUserId)) {
+            Slog.i(TAG, "Persisting top task because it belongs to an always-visible user");
+            // For a normal user-switch, we will restore the new user's task. But if the pre-switch
+            // top task is an always-visible (Communal) one, keep it even after the switch.
+            mUserRootTaskInFront.put(mCurrentUser, focusRootTaskId);
+        }
+
         final int restoreRootTaskId = mUserRootTaskInFront.get(userId);
         Task rootTask = getRootTask(restoreRootTaskId);
         if (rootTask == null) {
@@ -1892,6 +1902,13 @@
         return homeInFront;
     }
 
+    /** Returns whether the given user is to be always-visible (e.g. a communal profile). */
+    private boolean isAlwaysVisibleUser(@UserIdInt int userId) {
+        final UserManagerInternal umi = LocalServices.getService(UserManagerInternal.class);
+        final UserProperties properties = umi.getUserProperties(userId);
+        return properties != null && properties.getAlwaysVisible();
+    }
+
     void removeUser(int userId) {
         mUserRootTaskInFront.delete(userId);
     }
diff --git a/services/core/java/com/android/server/wm/SafeActivityOptions.java b/services/core/java/com/android/server/wm/SafeActivityOptions.java
index c914fa1..fe3094e 100644
--- a/services/core/java/com/android/server/wm/SafeActivityOptions.java
+++ b/services/core/java/com/android/server/wm/SafeActivityOptions.java
@@ -293,26 +293,7 @@
             throw new SecurityException(msg);
         }
         // Check if the caller is allowed to launch on the specified display area.
-        final WindowContainerToken daToken = options.getLaunchTaskDisplayArea();
-        TaskDisplayArea taskDisplayArea = daToken != null
-                ? (TaskDisplayArea) WindowContainer.fromBinder(daToken.asBinder()) : null;
-
-        // If we do not have a task display area token, check if the launch task display area
-        // feature id is specified.
-        if (taskDisplayArea == null) {
-            final int launchTaskDisplayAreaFeatureId = options.getLaunchTaskDisplayAreaFeatureId();
-            if (launchTaskDisplayAreaFeatureId != FEATURE_UNDEFINED) {
-                final int launchDisplayId = options.getLaunchDisplayId() == INVALID_DISPLAY
-                        ? DEFAULT_DISPLAY : options.getLaunchDisplayId();
-                final DisplayContent dc = supervisor.mRootWindowContainer
-                        .getDisplayContent(launchDisplayId);
-                if (dc != null) {
-                    taskDisplayArea = dc.getItemFromTaskDisplayAreas(tda ->
-                            tda.mFeatureId == launchTaskDisplayAreaFeatureId ? tda : null);
-                }
-            }
-        }
-
+        final TaskDisplayArea taskDisplayArea = getLaunchTaskDisplayArea(options, supervisor);
         if (aInfo != null && taskDisplayArea != null
                 && !supervisor.isCallerAllowedToLaunchOnTaskDisplayArea(callingPid, callingUid,
                 taskDisplayArea, aInfo)) {
@@ -428,6 +409,32 @@
         }
     }
 
+    @VisibleForTesting
+    TaskDisplayArea getLaunchTaskDisplayArea(ActivityOptions options,
+            ActivityTaskSupervisor supervisor) {
+        final WindowContainerToken daToken = options.getLaunchTaskDisplayArea();
+        TaskDisplayArea taskDisplayArea = daToken != null
+                ? (TaskDisplayArea) WindowContainer.fromBinder(daToken.asBinder()) : null;
+        if (taskDisplayArea != null) {
+            return taskDisplayArea;
+        }
+
+        // If we do not have a task display area token, check if the launch task display area
+        // feature id is specified.
+        final int launchTaskDisplayAreaFeatureId = options.getLaunchTaskDisplayAreaFeatureId();
+        if (launchTaskDisplayAreaFeatureId != FEATURE_UNDEFINED) {
+            final int launchDisplayId = options.getLaunchDisplayId() == INVALID_DISPLAY
+                    ? DEFAULT_DISPLAY : options.getLaunchDisplayId();
+            final DisplayContent dc = supervisor.mRootWindowContainer
+                    .getDisplayContent(launchDisplayId);
+            if (dc != null) {
+                taskDisplayArea = dc.getItemFromTaskDisplayAreas(tda ->
+                        tda.mFeatureId == launchTaskDisplayAreaFeatureId ? tda : null);
+            }
+        }
+        return taskDisplayArea;
+    }
+
     private boolean isAssistant(ActivityTaskManagerService atmService, int callingUid) {
         if (atmService.mActiveVoiceInteractionServiceComponent == null) {
             return false;
diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java
index b49c5fb..1845ae8 100644
--- a/services/core/java/com/android/server/wm/Session.java
+++ b/services/core/java/com/android/server/wm/Session.java
@@ -16,6 +16,7 @@
 
 package com.android.server.wm;
 
+import static android.Manifest.permission.ALWAYS_UPDATE_WALLPAPER;
 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;
@@ -112,6 +113,7 @@
     final boolean mCanCreateSystemApplicationOverlay;
     final boolean mCanHideNonSystemOverlayWindows;
     final boolean mCanSetUnrestrictedGestureExclusion;
+    final boolean mCanAlwaysUpdateWallpaper;
     private AlertWindowNotification mAlertWindowNotification;
     private boolean mShowingAlertWindowNotificationAllowed;
     private boolean mClientDead = false;
@@ -144,6 +146,9 @@
         mCanSetUnrestrictedGestureExclusion =
                 service.mContext.checkCallingOrSelfPermission(SET_UNRESTRICTED_GESTURE_EXCLUSION)
                         == PERMISSION_GRANTED;
+        mCanAlwaysUpdateWallpaper =
+                service.mContext.checkCallingOrSelfPermission(ALWAYS_UPDATE_WALLPAPER)
+                        == PERMISSION_GRANTED;
         mShowingAlertWindowNotificationAllowed = mService.mShowAlertWindowNotifications;
         mDragDropController = mService.mDragDropController;
         StringBuilder sb = new StringBuilder();
@@ -621,8 +626,15 @@
             final long ident = Binder.clearCallingIdentity();
             try {
                 final WindowState windowState = mService.windowForClientLocked(this, window, true);
-                return windowState.getDisplayContent().mWallpaperController
-                        .sendWindowWallpaperCommand(windowState, action, x, y, z, extras, sync);
+                WallpaperController wallpaperController =
+                        windowState.getDisplayContent().mWallpaperController;
+                if (mCanAlwaysUpdateWallpaper
+                        || windowState == wallpaperController.getWallpaperTarget()
+                        || windowState == wallpaperController.getPrevWallpaperTarget()) {
+                    return wallpaperController.sendWindowWallpaperCommandUnchecked(
+                            windowState, action, x, y, z, extras, sync);
+                }
+                return null;
             } finally {
                 Binder.restoreCallingIdentity(ident);
             }
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 6caccdd..4e95c84 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -5414,8 +5414,7 @@
         // Basic case: for simple app-centric recents, we need to recreate
         // the task if the affinity has changed.
 
-        final String affinity = ActivityRecord.computeTaskAffinity(destAffinity, srec.getUid(),
-                srec.launchMode, srec.mActivityComponent);
+        final String affinity = ActivityRecord.computeTaskAffinity(destAffinity, srec.getUid());
         if (srec == null || srec.getTask().affinity == null
                 || !srec.getTask().affinity.equals(affinity)) {
             return true;
diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java
index e80cbb3..9af12ad 100644
--- a/services/core/java/com/android/server/wm/TaskDisplayArea.java
+++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java
@@ -1851,9 +1851,17 @@
                                         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
-                // windowing mode.
-                task.setWindowingMode(WINDOWING_MODE_UNDEFINED);
+                // If the task is going to be reparented to the non-fullscreen root TDA and the task
+                // is set to FULLSCREEN explicitly, we keep the windowing mode as is. Otherwise, the
+                // task will inherit the display windowing mode unexpectedly.
+                final boolean keepWindowingMode = launchRoot == null
+                        && task.getRequestedOverrideWindowingMode() == WINDOWING_MODE_FULLSCREEN
+                        && toDisplayArea.getWindowingMode() != WINDOWING_MODE_FULLSCREEN;
+                if (!keepWindowingMode) {
+                    // Set the windowing mode to undefined to let the root task inherited the
+                    // windowing mode.
+                    task.setWindowingMode(WINDOWING_MODE_UNDEFINED);
+                }
                 lastReparentedRootTask = task;
             }
             // Root task may be removed from this display. Ensure each root task will be processed
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index 83949cc..d8cc8d3 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -86,7 +86,6 @@
 import android.graphics.Rect;
 import android.hardware.HardwareBuffer;
 import android.os.IBinder;
-import android.os.RemoteException;
 import android.os.UserHandle;
 import android.util.DisplayMetrics;
 import android.util.Slog;
@@ -1325,14 +1324,12 @@
             }
         }
 
-        // Launching this app's activity, make sure the app is no longer
-        // considered stopped.
         try {
             mTaskSupervisor.getActivityMetricsLogger()
                     .notifyBeforePackageUnstopped(next.packageName);
-            mAtmService.getPackageManager().setPackageStoppedState(
-                    next.packageName, false, next.mUserId); /* TODO: Verify if correct userid */
-        } catch (RemoteException e1) {
+            mAtmService.getPackageManagerInternalLocked().notifyComponentUsed(
+                    next.packageName, next.mUserId,
+                    next.packageName); /* TODO: Verify if correct userid */
         } catch (IllegalArgumentException e) {
             Slog.w(TAG, "Failed trying to unstop package "
                     + next.packageName + ": " + e);
diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java
index b72d027..3d01001 100644
--- a/services/core/java/com/android/server/wm/TaskOrganizerController.java
+++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java
@@ -1230,10 +1230,16 @@
     public void dump(PrintWriter pw, String prefix) {
         final String innerPrefix = prefix + "  ";
         pw.print(prefix); pw.println("TaskOrganizerController:");
-        for (final TaskOrganizerState state : mTaskOrganizerStates.values()) {
+        final ITaskOrganizer lastOrganizer = mTaskOrganizers.peekLast();
+        for (ITaskOrganizer organizer : mTaskOrganizers) {
+            final TaskOrganizerState state = mTaskOrganizerStates.get(organizer.asBinder());
             final ArrayList<Task> tasks = state.mOrganizedTasks;
             pw.print(innerPrefix + "  ");
-            pw.println(state.mOrganizer.mTaskOrganizer + " uid=" + state.mUid + ":");
+            pw.print(state.mOrganizer.mTaskOrganizer + " uid=" + state.mUid);
+            if (lastOrganizer == organizer) {
+                pw.print(" (active)");
+            }
+            pw.println(':');
             for (int k = 0; k < tasks.size(); k++) {
                 final Task task = tasks.get(k);
                 final int mode = task.getWindowingMode();
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index fd25edf..aad17aa 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -1658,7 +1658,7 @@
         // Since we created root-leash but no longer reference it from core, release it now
         info.releaseAnimSurfaces();
 
-        mController.mLoggerHandler.post(mLogger::logOnSend);
+        mLogger.logOnSendAsync(mController.mLoggerHandler);
         if (mLogger.mInfo != null) {
             mController.mTransitionTracer.logSentTransition(this, mTargets);
         }
diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java
index 48cca32..6432ff0 100644
--- a/services/core/java/com/android/server/wm/TransitionController.java
+++ b/services/core/java/com/android/server/wm/TransitionController.java
@@ -1471,7 +1471,7 @@
      * Beside `mCreateWallTimeMs`, all times are elapsed times and will all be reported relative
      * to when the transition was created.
      */
-    static class Logger {
+    static class Logger implements Runnable {
         long mCreateWallTimeMs;
         long mCreateTimeNs;
         long mRequestTimeNs;
@@ -1495,6 +1495,20 @@
             return sb.toString();
         }
 
+        void logOnSendAsync(Handler handler) {
+            handler.post(this);
+        }
+
+        @Override
+        public void run() {
+            try {
+                logOnSend();
+            } catch (Exception e) {
+                // In case TransitionRequestInfo#toString() accesses window container with race.
+                Slog.w(TAG, "Failed to log transition", e);
+            }
+        }
+
         void logOnSend() {
             ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS_MIN, "%s", buildOnSendLog());
             ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS_MIN, "    startWCT=%s", mStartWCT);
diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java
index 00bedcd..7e5dabb 100644
--- a/services/core/java/com/android/server/wm/WallpaperController.java
+++ b/services/core/java/com/android/server/wm/WallpaperController.java
@@ -56,6 +56,7 @@
 import android.view.animation.Animation;
 import android.window.ScreenCapture;
 
+import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.protolog.ProtoLogImpl;
 import com.android.internal.protolog.common.ProtoLog;
@@ -91,10 +92,12 @@
     private float mLastWallpaperZoomOut = 0;
     private int mLastWallpaperDisplayOffsetX = Integer.MIN_VALUE;
     private int mLastWallpaperDisplayOffsetY = Integer.MIN_VALUE;
-    private final float mMaxWallpaperScale;
     // Whether COMMAND_FREEZE was dispatched.
     private boolean mLastFrozen = false;
 
+    private float mMinWallpaperScale;
+    private float mMaxWallpaperScale;
+
     // This is set when we are waiting for a wallpaper to tell us it is done
     // changing its scroll position.
     private WindowState mWaitingOnWallpaper;
@@ -240,14 +243,16 @@
     WallpaperController(WindowManagerService service, DisplayContent displayContent) {
         mService = service;
         mDisplayContent = displayContent;
+        mIsLockscreenLiveWallpaperEnabled =
+                SystemProperties.getBoolean("persist.wm.debug.lockscreen_live_wallpaper", true);
+
         Resources resources = service.mContext.getResources();
-        mMaxWallpaperScale =
-                resources.getFloat(com.android.internal.R.dimen.config_wallpaperMaxScale);
+        mMinWallpaperScale =
+                resources.getFloat(com.android.internal.R.dimen.config_wallpaperMinScale);
+        mMaxWallpaperScale = resources.getFloat(R.dimen.config_wallpaperMaxScale);
         mShouldOffsetWallpaperCenter =
                 resources.getBoolean(
                         com.android.internal.R.bool.config_offsetWallpaperToCenterOfLargestDisplay);
-        mIsLockscreenLiveWallpaperEnabled =
-                SystemProperties.getBoolean("persist.wm.debug.lockscreen_live_wallpaper", true);
     }
 
     void resetLargestDisplay(Display display) {
@@ -256,6 +261,16 @@
         }
     }
 
+    @VisibleForTesting
+    void setMinWallpaperScale(float minScale) {
+        mMinWallpaperScale = minScale;
+    }
+
+    @VisibleForTesting
+    void setMaxWallpaperScale(float maxScale) {
+        mMaxWallpaperScale = maxScale;
+    }
+
     @VisibleForTesting void setShouldOffsetWallpaperCenter(boolean shouldOffset) {
         mShouldOffsetWallpaperCenter = shouldOffset;
     }
@@ -283,6 +298,10 @@
         return mWallpaperTarget;
     }
 
+    WindowState getPrevWallpaperTarget() {
+        return mPrevWallpaperTarget;
+    }
+
     boolean isWallpaperTarget(WindowState win) {
         return win == mWallpaperTarget;
     }
@@ -314,31 +333,6 @@
                         || !mWallpaperTarget.mActivityRecord.isWaitingForTransitionStart());
     }
 
-    /**
-     * Make one wallpaper visible, according to {@attr showHome}.
-     * This is called during the keyguard unlocking transition
-     * (see {@link KeyguardController#keyguardGoingAway(int, int)}),
-     * or when a keyguard unlock is cancelled (see {@link KeyguardController})
-     */
-    public void showWallpaperInTransition(boolean showHome) {
-        updateWallpaperWindowsTarget(mFindResults);
-
-        if (!mFindResults.hasTopShowWhenLockedWallpaper()) {
-            Slog.w(TAG, "There is no wallpaper for the lock screen");
-            return;
-        }
-        WindowState hideWhenLocked = mFindResults.mTopWallpaper.mTopHideWhenLockedWallpaper;
-        WindowState showWhenLocked = mFindResults.mTopWallpaper.mTopShowWhenLockedWallpaper;
-        if (!mFindResults.hasTopHideWhenLockedWallpaper()) {
-            // Shared wallpaper, ensure its visibility
-            showWhenLocked.mToken.asWallpaperToken().updateWallpaperWindows(true);
-        } else {
-            // Separate lock and home wallpapers: show the correct wallpaper in transition
-            hideWhenLocked.mToken.asWallpaperToken().updateWallpaperWindowsInTransition(showHome);
-            showWhenLocked.mToken.asWallpaperToken().updateWallpaperWindowsInTransition(!showHome);
-        }
-    }
-
     void hideDeferredWallpapersIfNeededLegacy() {
         for (int i = mWallpaperTokens.size() - 1; i >= 0; i--) {
             final WallpaperWindowToken token = mWallpaperTokens.get(i);
@@ -575,12 +569,10 @@
         }
     }
 
-    Bundle sendWindowWallpaperCommand(
-            WindowState window, String action, int x, int y, int z, Bundle extras, boolean sync) {
-        if (window == mWallpaperTarget || window == mPrevWallpaperTarget) {
-            sendWindowWallpaperCommand(action, x, y, z, extras, sync);
-        }
-
+    Bundle sendWindowWallpaperCommandUnchecked(
+            WindowState window, String action, int x, int y, int z,
+            Bundle extras, boolean sync) {
+        sendWindowWallpaperCommand(action, x, y, z, extras, sync);
         return null;
     }
 
@@ -840,10 +832,7 @@
             }
         }
 
-        if (!mDisplayContent.isKeyguardGoingAway() || !mIsLockscreenLiveWallpaperEnabled) {
-            // When keyguard goes away, KeyguardController handles the visibility
-            updateWallpaperTokens(visible, mDisplayContent.isKeyguardLocked());
-        }
+        updateWallpaperTokens(visible, mDisplayContent.isKeyguardLocked());
 
         if (DEBUG_WALLPAPER) {
             Slog.v(TAG, "adjustWallpaperWindows: wallpaper visibility " + visible
@@ -1038,8 +1027,8 @@
         }
     }
 
-    private float zoomOutToScale(float zoom) {
-        return MathUtils.lerp(1, mMaxWallpaperScale, 1 - zoom);
+    private float zoomOutToScale(float zoomOut) {
+        return MathUtils.lerp(mMinWallpaperScale, mMaxWallpaperScale, 1 - zoomOut);
     }
 
     void dump(PrintWriter pw, String prefix) {
diff --git a/services/core/java/com/android/server/wm/WallpaperWindowToken.java b/services/core/java/com/android/server/wm/WallpaperWindowToken.java
index 8e0ad0d..c7fd147 100644
--- a/services/core/java/com/android/server/wm/WallpaperWindowToken.java
+++ b/services/core/java/com/android/server/wm/WallpaperWindowToken.java
@@ -128,20 +128,6 @@
         }
     }
 
-    /**
-     * Update the visibility of the token to {@param visible}. If a transition will collect the
-     * wallpaper, then the visibility will be committed during the execution of the transition.
-     *
-     * waitingToShow is reset at the beginning of the transition:
-     * {@link Transition#onTransactionReady(int, SurfaceControl.Transaction)}
-     */
-    void updateWallpaperWindowsInTransition(boolean visible) {
-        if (mTransitionController.isCollecting() && mVisibleRequested != visible) {
-            waitingToShow = true;
-        }
-        updateWallpaperWindows(visible);
-    }
-
     void updateWallpaperWindows(boolean visible) {
         if (mVisibleRequested != visible) {
             ProtoLog.d(WM_DEBUG_WALLPAPER, "Wallpaper token %s visible=%b",
@@ -212,12 +198,9 @@
         commitVisibility(visible);
     }
 
-    /**
-     * Commits the visibility of this token. This will directly update the visibility unless the
-     * wallpaper is in a transition.
-     */
+    /** Commits the visibility of this token. This will directly update the visibility. */
     void commitVisibility(boolean visible) {
-        if (visible == isVisible() || waitingToShow) return;
+        if (visible == isVisible()) return;
 
         ProtoLog.v(WM_DEBUG_APP_TRANSITIONS,
                 "commitVisibility: %s: visible=%b mVisibleRequested=%b", this,
diff --git a/services/core/java/com/android/server/wm/WindowContextListenerController.java b/services/core/java/com/android/server/wm/WindowContextListenerController.java
index 43dc9c8..21f251f 100644
--- a/services/core/java/com/android/server/wm/WindowContextListenerController.java
+++ b/services/core/java/com/android/server/wm/WindowContextListenerController.java
@@ -26,7 +26,8 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.app.IWindowToken;
+import android.app.servertransaction.WindowContextInfoChangeItem;
+import android.app.servertransaction.WindowContextWindowRemovalItem;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.os.Bundle;
@@ -47,7 +48,7 @@
  *
  * <ul>
  *   <li>When a {@link WindowContext} is created, it registers the listener via
- *     {@link WindowManagerService#attachWindowContextToDisplayArea(IBinder, int, int, Bundle)}
+ *     {@link WindowManagerService#attachWindowContextToDisplayArea
  *     automatically.</li>
  *   <li>When the {@link WindowContext} adds the first window to the screen via
  *     {@link android.view.WindowManager#addView(View, android.view.ViewGroup.LayoutParams)},
@@ -55,7 +56,7 @@
  *     to corresponding {@link WindowToken} via this controller.</li>
  *   <li>When the {@link WindowContext} is GCed, it unregisters the previously
  *     registered listener via
- *     {@link WindowManagerService#detachWindowContextFromWindowContainer(IBinder)}.
+ *     {@link WindowManagerService#detachWindowContext(IBinder)}.
  *     {@link WindowManagerService} is also responsible for removing the
  *     {@link WindowContext} created {@link WindowToken}.</li>
  * </ul>
@@ -69,44 +70,58 @@
     final ArrayMap<IBinder, WindowContextListenerImpl> mListeners = new ArrayMap<>();
 
     /**
-     * @see #registerWindowContainerListener(IBinder, WindowContainer, int, int, Bundle, boolean)
+     * @see #registerWindowContainerListener(WindowProcessController, IBinder, WindowContainer, int,
+     * Bundle, boolean)
      */
-    void registerWindowContainerListener(@NonNull IBinder clientToken,
-            @NonNull WindowContainer<?> container, int ownerUid, @WindowType int type,
-            @Nullable Bundle options) {
-        registerWindowContainerListener(clientToken, container, ownerUid, type, options,
-                true /* shouDispatchConfigWhenRegistering */);
+    void registerWindowContainerListener(@NonNull WindowProcessController wpc,
+            @NonNull IBinder clientToken, @NonNull WindowContainer<?> container,
+            @WindowType int type, @Nullable Bundle options) {
+        registerWindowContainerListener(wpc, clientToken, container, type, options,
+                true /* shouldDispatchConfigWhenRegistering */);
     }
 
     /**
      * Registers the listener to a {@code container} which is associated with
-     * a {@code clientToken}, which is a {@link android.window.WindowContext} representation. If the
+     * a {@code clientToken}, which is a {@link WindowContext} representation. If the
      * listener associated with {@code clientToken} hasn't been initialized yet, create one
      * {@link WindowContextListenerImpl}. Otherwise, the listener associated with
      * {@code clientToken} switches to listen to the {@code container}.
      *
+     * @param wpc the process that we should send the window configuration change to
      * @param clientToken the token to associate with the listener
      * @param container the {@link WindowContainer} which the listener is going to listen to.
-     * @param ownerUid the caller UID
      * @param type the window type
      * @param options a bundle used to pass window-related options.
-     * @param shouDispatchConfigWhenRegistering {@code true} to indicate the current
+     * @param shouldDispatchConfigWhenRegistering {@code true} to indicate the current
      *                {@code container}'s config will dispatch to the client side when
      *                registering the {@link WindowContextListenerImpl}
      */
-    void registerWindowContainerListener(@NonNull IBinder clientToken,
-            @NonNull WindowContainer<?> container, int ownerUid, @WindowType int type,
-            @Nullable Bundle options, boolean shouDispatchConfigWhenRegistering) {
+    void registerWindowContainerListener(@NonNull WindowProcessController wpc,
+            @NonNull IBinder clientToken, @NonNull WindowContainer<?> container,
+            @WindowType int type, @Nullable Bundle options,
+            boolean shouldDispatchConfigWhenRegistering) {
         WindowContextListenerImpl listener = mListeners.get(clientToken);
         if (listener == null) {
-            listener = new WindowContextListenerImpl(clientToken, container, ownerUid, type,
+            listener = new WindowContextListenerImpl(wpc, clientToken, container, type,
                     options);
-            listener.register(shouDispatchConfigWhenRegistering);
+            listener.register(shouldDispatchConfigWhenRegistering);
         } else {
-            listener.updateContainer(container);
+            updateContainerForWindowContextListener(clientToken, container);
         }
     }
 
+    /**
+     * Updates the {@link WindowContainer} that an existing {@link WindowContext} is listening to.
+     */
+    void updateContainerForWindowContextListener(@NonNull IBinder clientToken,
+            @NonNull WindowContainer<?> container) {
+        final WindowContextListenerImpl listener = mListeners.get(clientToken);
+        if (listener == null) {
+            throw new IllegalArgumentException("Can't find listener for " + clientToken);
+        }
+        listener.updateContainer(container);
+    }
+
     void unregisterWindowContainerListener(IBinder clientToken) {
         final WindowContextListenerImpl listener = mListeners.get(clientToken);
         // Listeners may be removed earlier. An example is the display where the listener is
@@ -126,7 +141,7 @@
             final WindowContextListenerImpl listener = mListeners.valueAt(i);
             if (listener.getWindowContainer().getDisplayContent().getDisplayId() == displayId
                     && listener.mHasPendingConfiguration) {
-                listener.reportConfigToWindowTokenClient();
+                listener.dispatchWindowContextInfoChange();
             }
         }
     }
@@ -145,9 +160,9 @@
         if (callerCanManageAppTokens) {
             return true;
         }
-        if (callingUid != listener.mOwnerUid) {
+        if (callingUid != listener.getUid()) {
             throw new UnsupportedOperationException("Uid mismatch. Caller uid is " + callingUid
-                    + ", while the listener's owner is from " + listener.mOwnerUid);
+                    + ", while the listener's owner is from " + listener.getUid());
         }
         return true;
     }
@@ -189,9 +204,12 @@
 
     @VisibleForTesting
     class WindowContextListenerImpl implements WindowContainerListener {
-        @NonNull private final IWindowToken mClientToken;
-        private final int mOwnerUid;
-        @NonNull private WindowContainer<?> mContainer;
+        @NonNull
+        private final WindowProcessController mWpc;
+        @NonNull
+        private final IBinder mClientToken;
+        @NonNull
+        private WindowContainer<?> mContainer;
         /**
          * The options from {@link Context#createWindowContext(int, Bundle)}.
          * <p>It can be used for choosing the {@link DisplayArea} where the window context
@@ -207,11 +225,12 @@
 
         private boolean mHasPendingConfiguration;
 
-        private WindowContextListenerImpl(IBinder clientToken, WindowContainer<?> container,
-                int ownerUid, @WindowType int type, @Nullable Bundle options) {
-            mClientToken = IWindowToken.Stub.asInterface(clientToken);
+        private WindowContextListenerImpl(@NonNull WindowProcessController wpc,
+                @NonNull IBinder clientToken, @NonNull WindowContainer<?> container,
+                @WindowType int type, @Nullable Bundle options) {
+            mWpc = Objects.requireNonNull(wpc);
+            mClientToken = clientToken;
             mContainer = Objects.requireNonNull(container);
-            mOwnerUid = ownerUid;
             mType = type;
             mOptions = options;
 
@@ -231,6 +250,10 @@
             return mContainer;
         }
 
+        int getUid() {
+            return mWpc.mUid;
+        }
+
         private void updateContainer(@NonNull WindowContainer<?> newContainer) {
             Objects.requireNonNull(newContainer);
 
@@ -248,7 +271,7 @@
         }
 
         private void register(boolean shouldDispatchConfig) {
-            final IBinder token = mClientToken.asBinder();
+            final IBinder token = mClientToken;
             if (mDeathRecipient == null) {
                 throw new IllegalStateException("Invalid client token: " + token);
             }
@@ -258,7 +281,7 @@
 
         private void unregister() {
             mContainer.unregisterWindowContainerListener(this);
-            mListeners.remove(mClientToken.asBinder());
+            mListeners.remove(mClientToken);
         }
 
         private void clear() {
@@ -268,17 +291,17 @@
 
         @Override
         public void onMergedOverrideConfigurationChanged(Configuration mergedOverrideConfig) {
-            reportConfigToWindowTokenClient();
+            dispatchWindowContextInfoChange();
         }
 
         @Override
         public void onDisplayChanged(DisplayContent dc) {
-            reportConfigToWindowTokenClient();
+            dispatchWindowContextInfoChange();
         }
 
-        private void reportConfigToWindowTokenClient() {
+        private void dispatchWindowContextInfoChange() {
             if (mDeathRecipient == null) {
-                throw new IllegalStateException("Invalid client token: " + mClientToken.asBinder());
+                throw new IllegalStateException("Invalid client token: " + mClientToken);
             }
             final DisplayContent dc = mContainer.getDisplayContent();
             if (!dc.isReady()) {
@@ -307,18 +330,15 @@
             mLastReportedConfig.setTo(config);
             mLastReportedDisplay = displayId;
 
-            try {
-                mClientToken.onConfigurationChanged(config, displayId);
-            } catch (RemoteException e) {
-                ProtoLog.w(WM_ERROR, "Could not report config changes to the window token client.");
-            }
+            mWpc.scheduleClientTransactionItem(WindowContextInfoChangeItem.obtain(
+                    mClientToken, config, displayId));
             mHasPendingConfiguration = false;
         }
 
         @Override
         public void onRemoved() {
             if (mDeathRecipient == null) {
-                throw new IllegalStateException("Invalid client token: " + mClientToken.asBinder());
+                throw new IllegalStateException("Invalid client token: " + mClientToken);
             }
             final WindowToken windowToken = mContainer.asWindowToken();
             if (windowToken != null && windowToken.isFromClient()) {
@@ -336,17 +356,13 @@
                 }
             }
             mDeathRecipient.unlinkToDeath();
-            try {
-                mClientToken.onWindowTokenRemoved();
-            } catch (RemoteException e) {
-                ProtoLog.w(WM_ERROR, "Could not report token removal to the window token client.");
-            }
+            mWpc.scheduleClientTransactionItem(WindowContextWindowRemovalItem.obtain(mClientToken));
             unregister();
         }
 
         @Override
         public String toString() {
-            return "WindowContextListenerImpl{clientToken=" + mClientToken.asBinder() + ", "
+            return "WindowContextListenerImpl{clientToken=" + mClientToken + ", "
                     + "container=" + mContainer + "}";
         }
 
@@ -360,11 +376,11 @@
             }
 
             void linkToDeath() throws RemoteException {
-                mClientToken.asBinder().linkToDeath(this, 0);
+                mClientToken.linkToDeath(this, 0);
             }
 
             void unlinkToDeath() {
-                mClientToken.asBinder().unlinkToDeath(this, 0);
+                mClientToken.unlinkToDeath(this, 0);
             }
         }
     }
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 3a19a3b..261d6bc 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -16,6 +16,7 @@
 
 package com.android.server.wm;
 
+import static android.Manifest.permission.ACCESS_SURFACE_FLINGER;
 import static android.Manifest.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS;
 import static android.Manifest.permission.INPUT_CONSUMER;
 import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW;
@@ -24,7 +25,6 @@
 import static android.Manifest.permission.MODIFY_TOUCH_MODE_STATE;
 import static android.Manifest.permission.READ_FRAME_BUFFER;
 import static android.Manifest.permission.REGISTER_WINDOW_MANAGER_LISTENERS;
-import static android.Manifest.permission.RESTRICTED_VR_ACCESS;
 import static android.Manifest.permission.START_TASKS_FROM_RECENTS;
 import static android.Manifest.permission.STATUS_BAR_SERVICE;
 import static android.Manifest.permission.WRITE_SECURE_SETTINGS;
@@ -167,6 +167,7 @@
 import android.app.ActivityThread;
 import android.app.AppOpsManager;
 import android.app.IActivityManager;
+import android.app.IApplicationThread;
 import android.app.IAssistDataReceiver;
 import android.app.WindowConfiguration;
 import android.content.BroadcastReceiver;
@@ -304,6 +305,7 @@
 import android.window.ScreenCapture;
 import android.window.TaskSnapshot;
 import android.window.WindowContainerToken;
+import android.window.WindowContextInfo;
 
 import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
@@ -415,7 +417,7 @@
     private static final String DENSITY_OVERRIDE = "ro.config.density_override";
     private static final String SIZE_OVERRIDE = "ro.config.size_override";
 
-    private static final String PROPERTY_EMULATOR_CIRCULAR = "ro.emulator.circular";
+    private static final String PROPERTY_EMULATOR_CIRCULAR = "ro.boot.emulator.circular";
 
     static final int MY_PID = myPid();
     static final int MY_UID = myUid();
@@ -552,7 +554,9 @@
     final PackageManagerInternal mPmInternal;
     private final TestUtilityService mTestUtilityService;
 
+    @NonNull
     final DisplayWindowSettingsProvider mDisplayWindowSettingsProvider;
+    @NonNull
     final DisplayWindowSettings mDisplayWindowSettings;
 
     /** If the system should display notifications for apps displaying an alert window. */
@@ -1695,8 +1699,8 @@
                         return WindowManagerGlobal.ADD_INVALID_TYPE;
                     }
                 } else {
-                    mWindowContextListenerController.registerWindowContainerListener(
-                            windowContextToken, token, callingUid, type, options);
+                    mWindowContextListenerController.updateContainerForWindowContextListener(
+                            windowContextToken, token);
                 }
             }
 
@@ -2732,18 +2736,26 @@
         }
     }
 
+    @Nullable
     @Override
-    public Configuration attachWindowContextToDisplayArea(IBinder clientToken, int
-            type, int displayId, Bundle options) {
-        if (clientToken == null) {
-            throw new IllegalArgumentException("clientToken must not be null!");
-        }
+    public WindowContextInfo attachWindowContextToDisplayArea(@NonNull IApplicationThread appThread,
+            @NonNull IBinder clientToken, @LayoutParams.WindowType int type, int displayId,
+            @Nullable Bundle options) {
+        Objects.requireNonNull(appThread);
+        Objects.requireNonNull(clientToken);
         final boolean callerCanManageAppTokens = checkCallingPermission(MANAGE_APP_TOKENS,
                 "attachWindowContextToDisplayArea", false /* printLog */);
+        final int callingPid = Binder.getCallingPid();
         final int callingUid = Binder.getCallingUid();
         final long origId = Binder.clearCallingIdentity();
         try {
             synchronized (mGlobalLock) {
+                final WindowProcessController wpc = mAtmService.getProcessController(appThread);
+                if (wpc == null) {
+                    ProtoLog.w(WM_ERROR, "attachWindowContextToDisplayArea: calling from"
+                            + " non-existing process pid=%d uid=%d", callingPid, callingUid);
+                    return null;
+                }
                 final DisplayContent dc = mRoot.getDisplayContentOrCreate(displayId);
                 if (dc == null) {
                     ProtoLog.w(WM_ERROR, "attachWindowContextToDisplayArea: trying to attach"
@@ -2754,28 +2766,83 @@
                 // the feature b/155340867 is completed.
                 final DisplayArea<?> da = dc.findAreaForWindowType(type, options,
                         callerCanManageAppTokens, false /* roundedCornerOverlay */);
-                mWindowContextListenerController.registerWindowContainerListener(clientToken, da,
-                        callingUid, type, options, false /* shouDispatchConfigWhenRegistering */);
-                return da.getConfiguration();
+                mWindowContextListenerController.registerWindowContainerListener(wpc, clientToken,
+                        da, type, options, false /* shouldDispatchConfigWhenRegistering */);
+                return new WindowContextInfo(da.getConfiguration(), displayId);
             }
         } finally {
             Binder.restoreCallingIdentity(origId);
         }
     }
 
+    @Nullable
     @Override
-    public void attachWindowContextToWindowToken(IBinder clientToken, IBinder token) {
-        final boolean callerCanManageAppTokens = checkCallingPermission(MANAGE_APP_TOKENS,
-                "attachWindowContextToWindowToken", false /* printLog */);
+    public WindowContextInfo attachWindowContextToDisplayContent(
+            @NonNull IApplicationThread appThread, @NonNull IBinder clientToken, int displayId) {
+        Objects.requireNonNull(appThread);
+        Objects.requireNonNull(clientToken);
+        final int callingPid = Binder.getCallingPid();
         final int callingUid = Binder.getCallingUid();
         final long origId = Binder.clearCallingIdentity();
         try {
             synchronized (mGlobalLock) {
+                final WindowProcessController wpc = mAtmService.getProcessController(appThread);
+                if (wpc == null) {
+                    ProtoLog.w(WM_ERROR, "attachWindowContextToDisplayContent: calling from"
+                            + " non-existing process pid=%d uid=%d", callingPid, callingUid);
+                    return null;
+                }
+                // We use "getDisplayContent" instead of "getDisplayContentOrCreate" because
+                // this method may be called in DisplayPolicy's constructor and may cause
+                // infinite loop. In this scenario, we early return here and switch to do the
+                // registration in DisplayContent#onParentChanged at DisplayContent initialization.
+                final DisplayContent dc = mRoot.getDisplayContent(displayId);
+                if (dc == null) {
+                    if (callingPid != MY_PID) {
+                        throw new WindowManager.InvalidDisplayException(
+                                "attachWindowContextToDisplayContent: trying to attach to a"
+                                        + " non-existing display:" + displayId);
+                    }
+                    // Early return if this method is invoked from system process.
+                    // See above comments for more detail.
+                    return null;
+                }
+
+                mWindowContextListenerController.registerWindowContainerListener(wpc, clientToken,
+                        dc, INVALID_WINDOW_TYPE, null /* options */,
+                        false /* shouldDispatchConfigWhenRegistering */);
+                return new WindowContextInfo(dc.getConfiguration(), displayId);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(origId);
+        }
+    }
+
+    @Nullable
+    @Override
+    public WindowContextInfo attachWindowContextToWindowToken(@NonNull IApplicationThread appThread,
+            @NonNull IBinder clientToken, @NonNull IBinder token) {
+        Objects.requireNonNull(appThread);
+        Objects.requireNonNull(clientToken);
+        Objects.requireNonNull(token);
+        final boolean callerCanManageAppTokens = checkCallingPermission(MANAGE_APP_TOKENS,
+                "attachWindowContextToWindowToken", false /* printLog */);
+        final int callingPid = Binder.getCallingPid();
+        final int callingUid = Binder.getCallingUid();
+        final long origId = Binder.clearCallingIdentity();
+        try {
+            synchronized (mGlobalLock) {
+                final WindowProcessController wpc = mAtmService.getProcessController(appThread);
+                if (wpc == null) {
+                    ProtoLog.w(WM_ERROR, "attachWindowContextToWindowToken: calling from"
+                            + " non-existing process pid=%d uid=%d", callingPid, callingUid);
+                    return null;
+                }
                 final WindowToken windowToken = mRoot.getWindowToken(token);
                 if (windowToken == null) {
                     ProtoLog.w(WM_ERROR, "Then token:%s is invalid. It might be "
                             + "removed", token);
-                    return;
+                    return null;
                 }
                 final int type = mWindowContextListenerController.getWindowType(clientToken);
                 if (type == INVALID_WINDOW_TYPE) {
@@ -2789,10 +2856,13 @@
                 }
                 if (!mWindowContextListenerController.assertCallerCanModifyListener(clientToken,
                         callerCanManageAppTokens, callingUid)) {
-                    return;
+                    return null;
                 }
-                mWindowContextListenerController.registerWindowContainerListener(clientToken,
-                        windowToken, callingUid, windowToken.windowType, windowToken.mOptions);
+                mWindowContextListenerController.registerWindowContainerListener(wpc, clientToken,
+                        windowToken, windowToken.windowType, windowToken.mOptions,
+                                               false /* shouldDispatchConfigWhenRegistering */);
+                return new WindowContextInfo(windowToken.getConfiguration(),
+                        windowToken.getDisplayContent().getDisplayId());
             }
         } finally {
             Binder.restoreCallingIdentity(origId);
@@ -2800,9 +2870,10 @@
     }
 
     @Override
-    public void detachWindowContextFromWindowContainer(IBinder clientToken) {
+    public void detachWindowContext(@NonNull IBinder clientToken) {
+        Objects.requireNonNull(clientToken);
         final boolean callerCanManageAppTokens = checkCallingPermission(MANAGE_APP_TOKENS,
-                "detachWindowContextFromWindowContainer", false /* printLog */);
+                "detachWindowContext", false /* printLog */);
         final int callingUid = Binder.getCallingUid();
         final long origId = Binder.clearCallingIdentity();
         try {
@@ -2826,40 +2897,6 @@
         }
     }
 
-    @Override
-    public Configuration attachToDisplayContent(IBinder clientToken, int displayId) {
-        if (clientToken == null) {
-            throw new IllegalArgumentException("clientToken must not be null!");
-        }
-        final int callingUid = Binder.getCallingUid();
-        final long origId = Binder.clearCallingIdentity();
-        try {
-            synchronized (mGlobalLock) {
-                // We use "getDisplayContent" instead of "getDisplayContentOrCreate" because
-                // this method may be called in DisplayPolicy's constructor and may cause
-                // infinite loop. In this scenario, we early return here and switch to do the
-                // registration in DisplayContent#onParentChanged at DisplayContent initialization.
-                final DisplayContent dc = mRoot.getDisplayContent(displayId);
-                if (dc == null) {
-                    if (Binder.getCallingPid() != MY_PID) {
-                        throw new WindowManager.InvalidDisplayException("attachToDisplayContent: "
-                                + "trying to attach to a non-existing display:" + displayId);
-                    }
-                    // Early return if this method is invoked from system process.
-                    // See above comments for more detail.
-                    return null;
-                }
-
-                mWindowContextListenerController.registerWindowContainerListener(clientToken, dc,
-                        callingUid, INVALID_WINDOW_TYPE, null /* options */,
-                        false /* shouDispatchConfigWhenRegistering */);
-                return dc.getConfiguration();
-            }
-        } finally {
-            Binder.restoreCallingIdentity(origId);
-        }
-    }
-
     /** Returns {@code true} if this binder is a registered window token. */
     @Override
     public boolean isWindowToken(IBinder binder) {
@@ -3225,15 +3262,13 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.DISABLE_KEYGUARD)
     /**
      * @see android.app.KeyguardManager#exitKeyguardSecurely
      */
     @Override
     public void exitKeyguardSecurely(final IOnKeyguardExitResult callback) {
-        if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DISABLE_KEYGUARD)
-            != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Requires DISABLE_KEYGUARD permission");
-        }
+        exitKeyguardSecurely_enforcePermission();
 
         if (callback == null) {
             throw new IllegalArgumentException("callback == null");
@@ -4433,13 +4468,11 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_APP_TOKENS)
     @Override
     public SurfaceControl addShellRoot(int displayId, IWindow client,
             @WindowManager.ShellRootLayer int shellRootLayer) {
-        if (mContext.checkCallingOrSelfPermission(MANAGE_APP_TOKENS)
-                != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Must hold permission " + MANAGE_APP_TOKENS);
-        }
+        addShellRoot_enforcePermission();
         final long origId = Binder.clearCallingIdentity();
         try {
             synchronized (mGlobalLock) {
@@ -4454,13 +4487,11 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_APP_TOKENS)
     @Override
     public void setShellRootAccessibilityWindow(int displayId,
             @WindowManager.ShellRootLayer int shellRootLayer, IWindow target) {
-        if (mContext.checkCallingOrSelfPermission(MANAGE_APP_TOKENS)
-                != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Must hold permission " + MANAGE_APP_TOKENS);
-        }
+        setShellRootAccessibilityWindow_enforcePermission();
         final long origId = Binder.clearCallingIdentity();
         try {
             synchronized (mGlobalLock) {
@@ -4479,13 +4510,11 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_APP_TOKENS)
     @Override
     public void setDisplayWindowInsetsController(
             int displayId, IDisplayWindowInsetsController insetsController) {
-        if (mContext.checkCallingOrSelfPermission(MANAGE_APP_TOKENS)
-                != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Must hold permission " + MANAGE_APP_TOKENS);
-        }
+        setDisplayWindowInsetsController_enforcePermission();
         final long origId = Binder.clearCallingIdentity();
         try {
             synchronized (mGlobalLock) {
@@ -4500,13 +4529,11 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_APP_TOKENS)
     @Override
     public void updateDisplayWindowRequestedVisibleTypes(
             int displayId, @InsetsType int requestedVisibleTypes) {
-        if (mContext.checkCallingOrSelfPermission(MANAGE_APP_TOKENS)
-                != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Must hold permission " + MANAGE_APP_TOKENS);
-        }
+        updateDisplayWindowRequestedVisibleTypes_enforcePermission();
         final long origId = Binder.clearCallingIdentity();
         try {
             synchronized (mGlobalLock) {
@@ -5703,12 +5730,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
     @Override
     public void setForcedDisplaySize(int displayId, int width, int height) {
-        if (mContext.checkCallingOrSelfPermission(WRITE_SECURE_SETTINGS)
-                != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Must hold permission " + WRITE_SECURE_SETTINGS);
-        }
+        setForcedDisplaySize_enforcePermission();
 
         final long ident = Binder.clearCallingIdentity();
         try {
@@ -5723,12 +5748,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
     @Override
     public void setForcedDisplayScalingMode(int displayId, int mode) {
-        if (mContext.checkCallingOrSelfPermission(WRITE_SECURE_SETTINGS)
-                != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Must hold permission " + WRITE_SECURE_SETTINGS);
-        }
+        setForcedDisplayScalingMode_enforcePermission();
 
         final long ident = Binder.clearCallingIdentity();
         try {
@@ -5813,12 +5836,10 @@
         return changed;
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
     @Override
     public void clearForcedDisplaySize(int displayId) {
-        if (mContext.checkCallingOrSelfPermission(WRITE_SECURE_SETTINGS)
-                != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Must hold permission " + WRITE_SECURE_SETTINGS);
-        }
+        clearForcedDisplaySize_enforcePermission();
 
         final long ident = Binder.clearCallingIdentity();
         try {
@@ -5878,12 +5899,10 @@
         return -1;
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
     @Override
     public void setForcedDisplayDensityForUser(int displayId, int density, int userId) {
-        if (mContext.checkCallingOrSelfPermission(WRITE_SECURE_SETTINGS)
-                != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Must hold permission " + WRITE_SECURE_SETTINGS);
-        }
+        setForcedDisplayDensityForUser_enforcePermission();
 
         final int targetUserId = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
                 Binder.getCallingUid(), userId, false, true, "setForcedDisplayDensityForUser",
@@ -5906,12 +5925,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.WRITE_SECURE_SETTINGS)
     @Override
     public void clearForcedDisplayDensityForUser(int displayId, int userId) {
-        if (mContext.checkCallingOrSelfPermission(WRITE_SECURE_SETTINGS)
-                != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Must hold permission " + WRITE_SECURE_SETTINGS);
-        }
+        clearForcedDisplayDensityForUser_enforcePermission();
 
         final int callingUserId = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
                 Binder.getCallingUid(), userId, false, true, "clearForcedDisplayDensityForUser",
@@ -6407,12 +6424,9 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.STATUS_BAR)
     public void setNavBarVirtualKeyHapticFeedbackEnabled(boolean enabled) {
-        if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.STATUS_BAR)
-                != PackageManager.PERMISSION_GRANTED) {
-            throw new SecurityException("Caller does not hold permission "
-                    + android.Manifest.permission.STATUS_BAR);
-        }
+        setNavBarVirtualKeyHapticFeedbackEnabled_enforcePermission();
 
         synchronized (mGlobalLock) {
             mPolicy.setNavBarVirtualKeyHapticFeedbackEnabledLw(enabled);
@@ -6452,11 +6466,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.RESTRICTED_VR_ACCESS)
     @Override
     public Region getCurrentImeTouchRegion() {
-        if (mContext.checkCallingOrSelfPermission(RESTRICTED_VR_ACCESS) != PERMISSION_GRANTED) {
-            throw new SecurityException("getCurrentImeTouchRegion is restricted to VR services");
-        }
+        getCurrentImeTouchRegion_enforcePermission();
         synchronized (mGlobalLock) {
             final Region r = new Region();
             // TODO(b/111080190): this method is only return the recent focused IME touch region,
@@ -9574,4 +9587,27 @@
             return List.copyOf(notifiedApps);
         }
     }
+
+    @RequiresPermission(ACCESS_SURFACE_FLINGER)
+    @Override
+    public boolean replaceContentOnDisplay(int displayId, SurfaceControl sc) {
+        if (!checkCallingPermission(ACCESS_SURFACE_FLINGER,
+                "replaceDisplayContent()")) {
+            throw new SecurityException("Requires ACCESS_SURFACE_FLINGER permission");
+        }
+
+        final long origId = Binder.clearCallingIdentity();
+        try {
+            synchronized (mGlobalLock) {
+                DisplayContent dc = mRoot.getDisplayContentOrCreate(displayId);
+                if (dc == null) {
+                    return false;
+                }
+                dc.replaceContent(sc);
+                return true;
+            }
+        } finally {
+            Binder.restoreCallingIdentity(origId);
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java
index 0388496..427ab7e 100644
--- a/services/core/java/com/android/server/wm/WindowOrganizerController.java
+++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java
@@ -18,7 +18,7 @@
 
 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.WINDOWING_MODE_PINNED;
 import static android.app.WindowConfiguration.WINDOW_CONFIG_BOUNDS;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.window.TaskFragmentOperation.OP_TYPE_CLEAR_ADJACENT_TASK_FRAGMENTS;
@@ -564,9 +564,9 @@
                 // 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.
+                        && entry.getValue().getWindowingMode() != WINDOWING_MODE_PINNED) {
+                    // We are going out of pip. 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;
@@ -710,7 +710,7 @@
                 return effects;
             }
 
-            if (windowingMode == WindowConfiguration.WINDOWING_MODE_PINNED) {
+            if (windowingMode == 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.
@@ -763,7 +763,7 @@
             tr.mDisplayContent.mPinnedTaskController.setEnterPipBounds(enterPipBounds);
         }
 
-        if (c.getWindowingMode() == WindowConfiguration.WINDOWING_MODE_PINNED
+        if (c.getWindowingMode() == WINDOWING_MODE_PINNED
                 && !tr.inPinnedWindowingMode()) {
             final ActivityRecord activity = tr.getTopNonFinishingActivity();
             if (activity != null) {
diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java
index d7d2b4e..83e8646 100644
--- a/services/core/java/com/android/server/wm/WindowProcessController.java
+++ b/services/core/java/com/android/server/wm/WindowProcessController.java
@@ -55,6 +55,7 @@
 import android.app.BackgroundStartPrivileges;
 import android.app.IApplicationThread;
 import android.app.ProfilerInfo;
+import android.app.servertransaction.ClientTransactionItem;
 import android.app.servertransaction.ConfigurationChangeItem;
 import android.content.ComponentName;
 import android.content.Context;
@@ -1584,9 +1585,10 @@
         resolvedConfig.seq = newParentConfig.seq;
     }
 
-    void dispatchConfiguration(Configuration config) {
+    void dispatchConfiguration(@NonNull Configuration config) {
         mHasPendingConfigurationChange = false;
-        if (mThread == null) {
+        final IApplicationThread thread = mThread;
+        if (thread == null) {
             if (Build.IS_DEBUGGABLE && mHasImeService) {
                 // TODO (b/135719017): Temporary log for debugging IME service.
                 Slog.w(TAG_CONFIGURATION, "Unable to send config for IME proc " + mName
@@ -1611,10 +1613,11 @@
             }
         }
 
-        scheduleConfigurationChange(mThread, config);
+        scheduleConfigurationChange(thread, config);
     }
 
-    private void scheduleConfigurationChange(IApplicationThread thread, Configuration config) {
+    private void scheduleConfigurationChange(@NonNull IApplicationThread thread,
+            @NonNull Configuration config) {
         ProtoLog.v(WM_DEBUG_CONFIGURATION, "Sending to proc %s new config %s", mName,
                 config);
         if (Build.IS_DEBUGGABLE && mHasImeService) {
@@ -1622,11 +1625,30 @@
             Slog.v(TAG_CONFIGURATION, "Sending to IME proc " + mName + " new config " + config);
         }
         mHasCachedConfiguration = false;
+        scheduleClientTransactionItem(thread, ConfigurationChangeItem.obtain(
+                config, mLastTopActivityDeviceId));
+    }
+
+    @VisibleForTesting
+    void scheduleClientTransactionItem(@NonNull ClientTransactionItem transactionItem) {
+        final IApplicationThread thread = mThread;
+        if (thread == null) {
+            if (Build.IS_DEBUGGABLE) {
+                Slog.w(TAG_CONFIGURATION, "Unable to send transaction to client proc " + mName
+                        + ": no app thread");
+            }
+            return;
+        }
+        scheduleClientTransactionItem(thread, transactionItem);
+    }
+
+    private void scheduleClientTransactionItem(@NonNull IApplicationThread thread,
+            @NonNull ClientTransactionItem transactionItem) {
         try {
-            mAtm.getLifecycleManager().scheduleTransaction(thread,
-                    ConfigurationChangeItem.obtain(config, mLastTopActivityDeviceId));
+            mAtm.getLifecycleManager().scheduleTransaction(thread, transactionItem);
         } catch (Exception e) {
-            Slog.e(TAG_CONFIGURATION, "Failed to schedule configuration change: " + mOwner, e);
+            Slog.e(TAG_CONFIGURATION, "Failed to schedule ClientTransactionItem="
+                    + transactionItem + " owner=" + mOwner, e);
         }
     }
 
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 8faeebc..fc49700 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -2481,6 +2481,11 @@
                     if (allowExitAnimation && mWinAnimator.applyAnimationLocked(transit, false)) {
                         ProtoLog.v(WM_DEBUG_ANIM,
                                 "Set animatingExit: reason=remove/applyAnimation win=%s", this);
+                        if (startingWindow && mSurfaceAnimator.hasLeash()) {
+                            // Keep starting window on top during fade-out animation.
+                            getPendingTransaction().setLayer(mSurfaceAnimator.mLeash,
+                                    Integer.MAX_VALUE);
+                        }
                         mAnimatingExit = true;
 
                         // mAnimatingExit affects canAffectSystemUiFlags(). Run layout such that
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
index d5217c8..101af4d 100644
--- a/services/core/jni/Android.bp
+++ b/services/core/jni/Android.bp
@@ -177,7 +177,7 @@
         "android.hardware.power@1.1",
         "android.hardware.power@1.2",
         "android.hardware.power@1.3",
-        "android.hardware.power-V4-cpp",
+        "android.hardware.power-V4-ndk",
         "android.hardware.power.stats@1.0",
         "android.hardware.power.stats-V1-ndk",
         "android.hardware.thermal@1.0",
diff --git a/services/core/jni/TEST_MAPPING b/services/core/jni/TEST_MAPPING
new file mode 100644
index 0000000..ea44d06
--- /dev/null
+++ b/services/core/jni/TEST_MAPPING
@@ -0,0 +1,16 @@
+{
+  "presubmit": [
+    {
+      "file_patterns": [
+        "[^/]*(vibrator)[^/]*\\.[^/]*"
+      ],
+      "name": "CtsVibratorTestCases",
+      "options": [
+        {"exclude-annotation": "android.platform.test.annotations.LargeTest"},
+        {"exclude-annotation": "android.platform.test.annotations.FlakyTest"},
+        {"exclude-annotation": "androidx.test.filters.FlakyTest"},
+        {"exclude-annotation": "org.junit.Ignore"}
+      ]
+    }
+  ]
+}
diff --git a/services/core/jni/com_android_server_UsbDescriptorParser.cpp b/services/core/jni/com_android_server_UsbDescriptorParser.cpp
index 9917bcb..a4a44c9 100644
--- a/services/core/jni/com_android_server_UsbDescriptorParser.cpp
+++ b/services/core/jni/com_android_server_UsbDescriptorParser.cpp
@@ -63,19 +63,13 @@
         return NULL;
     }
 
-    // Get Raw UCS2 Bytes
-    jbyte* byteBuffer = NULL;
-    size_t numUSC2Bytes = 0;
-    int retVal =
-            usb_device_get_string_ucs2(device, stringId,
-                                       USB_CONTROL_TRANSFER_TIMEOUT_MS,
-                                       (void**)&byteBuffer, &numUSC2Bytes);
+    char* data = usb_device_get_string(device, stringId, USB_CONTROL_TRANSFER_TIMEOUT_MS);
 
     jstring j_str = NULL;
 
-    if (retVal == 0) {
-        j_str = env->NewString((jchar*)byteBuffer, numUSC2Bytes/2);
-        free(byteBuffer);
+    if (data != NULL) {
+        j_str = env->NewStringUTF(data);
+        free(data);
     }
 
     usb_device_close(device);
diff --git a/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp b/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp
index 0488247..4343edd 100644
--- a/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp
+++ b/services/core/jni/com_android_server_am_CachedAppOptimizer.cpp
@@ -333,7 +333,10 @@
     return -1;
 }
 static int getAnonPageAdvice(const Vma& vma) {
-    if (vma.inode == 0 && !vma.is_shared) {
+    bool hasReadFlag = (vma.flags & PROT_READ) > 0;
+    bool hasWriteFlag = (vma.flags & PROT_WRITE) > 0;
+    bool hasExecuteFlag = (vma.flags & PROT_EXEC) > 0;
+    if ((hasReadFlag || hasWriteFlag) && !hasExecuteFlag && !vma.is_shared) {
         return MADV_PAGEOUT;
     }
     return -1;
@@ -376,6 +379,9 @@
                 ++coldVmaIndex;
                 break;
             case MADV_PAGEOUT:
+#ifdef DEBUG_COMPACTION
+                ALOGE("Adding to compact vma=%s", vma.name.c_str());
+#endif
                 if (pageoutVmaIndex < pageoutVmas.size()) {
                     pageoutVmas[pageoutVmaIndex] = vma;
                 } else {
diff --git a/services/core/jni/com_android_server_hint_HintManagerService.cpp b/services/core/jni/com_android_server_hint_HintManagerService.cpp
index e322fa2..e148b94 100644
--- a/services/core/jni/com_android_server_hint_HintManagerService.cpp
+++ b/services/core/jni/com_android_server_hint_HintManagerService.cpp
@@ -18,77 +18,78 @@
 
 //#define LOG_NDEBUG 0
 
+#include <aidl/android/hardware/power/IPower.h>
 #include <android-base/stringprintf.h>
-#include <android/hardware/power/IPower.h>
-#include <android_runtime/AndroidRuntime.h>
 #include <nativehelper/JNIHelp.h>
 #include <nativehelper/ScopedPrimitiveArray.h>
 #include <powermanager/PowerHalController.h>
 #include <utils/Log.h>
 
-#include <unistd.h>
-#include <cinttypes>
-
-#include <sys/types.h>
+#include <unordered_map>
 
 #include "jni.h"
 
-using android::hardware::power::IPowerHintSession;
-using android::hardware::power::SessionHint;
-using android::hardware::power::WorkDuration;
+using aidl::android::hardware::power::IPowerHintSession;
+using aidl::android::hardware::power::SessionHint;
+using aidl::android::hardware::power::WorkDuration;
 
 using android::base::StringPrintf;
 
 namespace android {
 
 static power::PowerHalController gPowerHalController;
+static std::unordered_map<jlong, std::shared_ptr<IPowerHintSession>> gSessionMap;
+static std::mutex gSessionMapLock;
 
 static jlong createHintSession(JNIEnv* env, int32_t tgid, int32_t uid,
                                std::vector<int32_t> threadIds, int64_t durationNanos) {
-    auto result =
-            gPowerHalController.createHintSession(tgid, uid, std::move(threadIds), durationNanos);
+    auto result = gPowerHalController.createHintSession(tgid, uid, threadIds, durationNanos);
     if (result.isOk()) {
-        sp<IPowerHintSession> appSession = result.value();
-        if (appSession) appSession->incStrong(env);
-        return reinterpret_cast<jlong>(appSession.get());
+        auto session_ptr = reinterpret_cast<jlong>(result.value().get());
+        {
+            std::unique_lock<std::mutex> sessionLock(gSessionMapLock);
+            auto res = gSessionMap.insert({session_ptr, result.value()});
+            return res.second ? session_ptr : 0;
+        }
     }
     return 0;
 }
 
 static void pauseHintSession(JNIEnv* env, int64_t session_ptr) {
-    sp<IPowerHintSession> appSession = reinterpret_cast<IPowerHintSession*>(session_ptr);
+    auto appSession = reinterpret_cast<IPowerHintSession*>(session_ptr);
     appSession->pause();
 }
 
 static void resumeHintSession(JNIEnv* env, int64_t session_ptr) {
-    sp<IPowerHintSession> appSession = reinterpret_cast<IPowerHintSession*>(session_ptr);
+    auto appSession = reinterpret_cast<IPowerHintSession*>(session_ptr);
     appSession->resume();
 }
 
 static void closeHintSession(JNIEnv* env, int64_t session_ptr) {
-    sp<IPowerHintSession> appSession = reinterpret_cast<IPowerHintSession*>(session_ptr);
+    auto appSession = reinterpret_cast<IPowerHintSession*>(session_ptr);
     appSession->close();
-    appSession->decStrong(env);
+    std::unique_lock<std::mutex> sessionLock(gSessionMapLock);
+    gSessionMap.erase(session_ptr);
 }
 
 static void updateTargetWorkDuration(int64_t session_ptr, int64_t targetDurationNanos) {
-    sp<IPowerHintSession> appSession = reinterpret_cast<IPowerHintSession*>(session_ptr);
+    auto appSession = reinterpret_cast<IPowerHintSession*>(session_ptr);
     appSession->updateTargetWorkDuration(targetDurationNanos);
 }
 
 static void reportActualWorkDuration(int64_t session_ptr,
                                      const std::vector<WorkDuration>& actualDurations) {
-    sp<IPowerHintSession> appSession = reinterpret_cast<IPowerHintSession*>(session_ptr);
+    auto appSession = reinterpret_cast<IPowerHintSession*>(session_ptr);
     appSession->reportActualWorkDuration(actualDurations);
 }
 
 static void sendHint(int64_t session_ptr, SessionHint hint) {
-    sp<IPowerHintSession> appSession = reinterpret_cast<IPowerHintSession*>(session_ptr);
+    auto appSession = reinterpret_cast<IPowerHintSession*>(session_ptr);
     appSession->sendHint(hint);
 }
 
 static void setThreads(int64_t session_ptr, const std::vector<int32_t>& threadIds) {
-    sp<IPowerHintSession> appSession = reinterpret_cast<IPowerHintSession*>(session_ptr);
+    auto appSession = reinterpret_cast<IPowerHintSession*>(session_ptr);
     appSession->setThreads(threadIds);
 }
 
diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp
index 9d39165..7c8c558 100644
--- a/services/core/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/core/jni/com_android_server_input_InputManagerService.cpp
@@ -123,8 +123,6 @@
     jmethodID getInputUniqueIdAssociations;
     jmethodID getDeviceTypeAssociations;
     jmethodID getKeyboardLayoutAssociations;
-    jmethodID getKeyRepeatTimeout;
-    jmethodID getKeyRepeatDelay;
     jmethodID getHoverTapTimeout;
     jmethodID getHoverTapSlop;
     jmethodID getDoubleTapTimeout;
@@ -316,7 +314,8 @@
     std::shared_ptr<PointerControllerInterface> obtainPointerController(int32_t deviceId) override;
     void notifyInputDevicesChanged(const std::vector<InputDeviceInfo>& inputDevices) override;
     std::shared_ptr<KeyCharacterMap> getKeyboardLayoutOverlay(
-            const InputDeviceIdentifier& identifier) override;
+            const InputDeviceIdentifier& identifier,
+            const std::optional<KeyboardLayoutInfo> keyboardLayoutInfo) override;
     std::string getDeviceAlias(const InputDeviceIdentifier& identifier) override;
     TouchAffineTransformation getTouchAffineTransformation(const std::string& inputDeviceDescriptor,
                                                            ui::Rotation surfaceRotation) override;
@@ -345,7 +344,6 @@
                               InputDeviceSensorAccuracy accuracy) override;
     void notifyVibratorState(int32_t deviceId, bool isOn) override;
     bool filterInputEvent(const InputEvent& inputEvent, uint32_t policyFlags) override;
-    InputDispatcherConfiguration getDispatcherConfiguration() override;
     void interceptKeyBeforeQueueing(const KeyEvent& keyEvent, uint32_t& policyFlags) override;
     void interceptMotionBeforeQueueing(int32_t displayId, nsecs_t when,
                                        uint32_t& policyFlags) override;
@@ -784,17 +782,32 @@
 }
 
 std::shared_ptr<KeyCharacterMap> NativeInputManager::getKeyboardLayoutOverlay(
-        const InputDeviceIdentifier& identifier) {
+        const InputDeviceIdentifier& identifier,
+        const std::optional<KeyboardLayoutInfo> keyboardLayoutInfo) {
     ATRACE_CALL();
     JNIEnv* env = jniEnv();
 
     std::shared_ptr<KeyCharacterMap> result;
     ScopedLocalRef<jstring> descriptor(env, env->NewStringUTF(identifier.descriptor.c_str()));
+    ScopedLocalRef<jstring> languageTag(env,
+                                        keyboardLayoutInfo
+                                                ? env->NewStringUTF(
+                                                          keyboardLayoutInfo->languageTag.c_str())
+                                                : nullptr);
+    ScopedLocalRef<jstring> layoutType(env,
+                                       keyboardLayoutInfo
+                                               ? env->NewStringUTF(
+                                                         keyboardLayoutInfo->layoutType.c_str())
+                                               : nullptr);
     ScopedLocalRef<jobject> identifierObj(env, env->NewObject(gInputDeviceIdentifierInfo.clazz,
             gInputDeviceIdentifierInfo.constructor, descriptor.get(),
             identifier.vendor, identifier.product));
-    ScopedLocalRef<jobjectArray> arrayObj(env, jobjectArray(env->CallObjectMethod(mServiceObj,
-                gServiceClassInfo.getKeyboardLayoutOverlay, identifierObj.get())));
+    ScopedLocalRef<jobjectArray>
+            arrayObj(env,
+                     jobjectArray(env->CallObjectMethod(mServiceObj,
+                                                        gServiceClassInfo.getKeyboardLayoutOverlay,
+                                                        identifierObj.get(), languageTag.get(),
+                                                        layoutType.get())));
     if (arrayObj.get()) {
         ScopedLocalRef<jstring> filenameObj(env,
                 jstring(env->GetObjectArrayElement(arrayObj.get(), 0)));
@@ -1020,24 +1033,6 @@
     checkAndClearExceptionFromCallback(env, "notifyVibratorState");
 }
 
-InputDispatcherConfiguration NativeInputManager::getDispatcherConfiguration() {
-    ATRACE_CALL();
-    InputDispatcherConfiguration config;
-    JNIEnv* env = jniEnv();
-
-    jint keyRepeatTimeout = env->CallIntMethod(mServiceObj, gServiceClassInfo.getKeyRepeatTimeout);
-    if (!checkAndClearExceptionFromCallback(env, "getKeyRepeatTimeout")) {
-        config.keyRepeatTimeout = milliseconds_to_nanoseconds(keyRepeatTimeout);
-    }
-
-    jint keyRepeatDelay = env->CallIntMethod(mServiceObj, gServiceClassInfo.getKeyRepeatDelay);
-    if (!checkAndClearExceptionFromCallback(env, "getKeyRepeatDelay")) {
-        config.keyRepeatDelay = milliseconds_to_nanoseconds(keyRepeatDelay);
-    }
-
-    return config;
-}
-
 void NativeInputManager::displayRemoved(JNIEnv* env, int32_t displayId) {
     mInputManager->getDispatcher().displayRemoved(displayId);
 }
@@ -1193,6 +1188,8 @@
 }
 
 void NativeInputManager::setInputDeviceEnabled(uint32_t deviceId, bool enabled) {
+    bool refresh = false;
+
     { // acquire lock
         std::scoped_lock _l(mLock);
 
@@ -1200,14 +1197,18 @@
         bool currentlyEnabled = it == mLocked.disabledInputDevices.end();
         if (!enabled && currentlyEnabled) {
             mLocked.disabledInputDevices.insert(deviceId);
+            refresh = true;
         }
         if (enabled && !currentlyEnabled) {
             mLocked.disabledInputDevices.erase(deviceId);
+            refresh = true;
         }
     } // release lock
 
-    mInputManager->getReader().requestRefreshConfiguration(
-            InputReaderConfiguration::Change::ENABLED_STATE);
+    if (refresh) {
+        mInputManager->getReader().requestRefreshConfiguration(
+                InputReaderConfiguration::Change::ENABLED_STATE);
+    }
 }
 
 void NativeInputManager::setShowTouches(bool enabled) {
@@ -2457,6 +2458,16 @@
     im->setMotionClassifierEnabled(enabled);
 }
 
+static void nativeSetKeyRepeatConfiguration(JNIEnv* env, jobject nativeImplObj, jint timeoutMs,
+                                            jint delayMs) {
+    NativeInputManager* im = getNativeInputManager(env, nativeImplObj);
+    im->getInputManager()->getDispatcher().setKeyRepeatConfiguration(static_cast<nsecs_t>(
+                                                                             timeoutMs) *
+                                                                             1000000,
+                                                                     static_cast<nsecs_t>(delayMs) *
+                                                                             1000000);
+}
+
 static jobject createInputSensorInfo(JNIEnv* env, jstring name, jstring vendor, jint version,
                                      jint handle, jint type, jfloat maxRange, jfloat resolution,
                                      jfloat power, jfloat minDelay, jint fifoReservedEventCount,
@@ -2587,11 +2598,6 @@
     im->setStylusPointerIconEnabled(enabled);
 }
 
-static void nativeNotifyKeyGestureTimeoutsChanged(JNIEnv* env, jobject nativeImplObj) {
-    NativeInputManager* im = getNativeInputManager(env, nativeImplObj);
-    im->getInputManager()->getDispatcher().requestRefreshConfiguration();
-}
-
 // ----------------------------------------------------------------------------
 
 static const JNINativeMethod gInputManagerMethods[] = {
@@ -2676,6 +2682,7 @@
         {"setDisplayEligibilityForPointerCapture", "(IZ)V",
          (void*)nativeSetDisplayEligibilityForPointerCapture},
         {"setMotionClassifierEnabled", "(Z)V", (void*)nativeSetMotionClassifierEnabled},
+        {"setKeyRepeatConfiguration", "(II)V", (void*)nativeSetKeyRepeatConfiguration},
         {"getSensorList", "(I)[Landroid/hardware/input/InputSensorInfo;",
          (void*)nativeGetSensorList},
         {"enableSensor", "(IIII)Z", (void*)nativeEnableSensor},
@@ -2688,7 +2695,6 @@
          (void*)nativeSetStylusButtonMotionEventsEnabled},
         {"getMouseCursorPosition", "()[F", (void*)nativeGetMouseCursorPosition},
         {"setStylusPointerIconEnabled", "(Z)V", (void*)nativeSetStylusPointerIconEnabled},
-        {"notifyKeyGestureTimeoutsChanged", "()V", (void*)nativeNotifyKeyGestureTimeoutsChanged},
 };
 
 #define FIND_CLASS(var, className) \
@@ -2808,12 +2814,6 @@
     GET_METHOD_ID(gServiceClassInfo.getKeyboardLayoutAssociations, clazz,
                   "getKeyboardLayoutAssociations", "()[Ljava/lang/String;");
 
-    GET_METHOD_ID(gServiceClassInfo.getKeyRepeatTimeout, clazz,
-            "getKeyRepeatTimeout", "()I");
-
-    GET_METHOD_ID(gServiceClassInfo.getKeyRepeatDelay, clazz,
-            "getKeyRepeatDelay", "()I");
-
     GET_METHOD_ID(gServiceClassInfo.getHoverTapTimeout, clazz,
             "getHoverTapTimeout", "()I");
 
@@ -2832,9 +2832,9 @@
     GET_METHOD_ID(gServiceClassInfo.getPointerIcon, clazz,
             "getPointerIcon", "(I)Landroid/view/PointerIcon;");
 
-    GET_METHOD_ID(gServiceClassInfo.getKeyboardLayoutOverlay, clazz,
-            "getKeyboardLayoutOverlay",
-            "(Landroid/hardware/input/InputDeviceIdentifier;)[Ljava/lang/String;");
+    GET_METHOD_ID(gServiceClassInfo.getKeyboardLayoutOverlay, clazz, "getKeyboardLayoutOverlay",
+                  "(Landroid/hardware/input/InputDeviceIdentifier;Ljava/lang/String;Ljava/lang/"
+                  "String;)[Ljava/lang/String;");
 
     GET_METHOD_ID(gServiceClassInfo.getDeviceAlias, clazz,
             "getDeviceAlias", "(Ljava/lang/String;)Ljava/lang/String;");
diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
index e1de05c..11c40d7 100644
--- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
+++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
@@ -69,7 +69,6 @@
 
 static jclass class_gnssPowerStats;
 
-static jmethodID method_reportNiNotification;
 static jmethodID method_reportGnssPowerStats;
 static jmethodID method_reportNfwNotification;
 static jmethodID method_isInEmergencySession;
@@ -92,8 +91,6 @@
 using android::hardware::gnss::V1_0::GnssLocationFlags;
 using android::hardware::gnss::V1_0::IGnssNavigationMessage;
 using android::hardware::gnss::V1_0::IGnssNavigationMessageCallback;
-using android::hardware::gnss::V1_0::IGnssNi;
-using android::hardware::gnss::V1_0::IGnssNiCallback;
 using android::hardware::gnss::V1_0::IGnssXtra;
 using android::hardware::gnss::V1_0::IGnssXtraCallback;
 using android::hardware::gnss::V2_0::ElapsedRealtimeFlags;
@@ -127,7 +124,6 @@
 using GnssLocationAidl = android::hardware::gnss::GnssLocation;
 using IGnssAntennaInfoAidl = android::hardware::gnss::IGnssAntennaInfo;
 
-sp<IGnssNi> gnssNiIface = nullptr;
 sp<IGnssPowerIndication> gnssPowerIndicationIface = nullptr;
 
 std::unique_ptr<android::gnss::GnssHal> gnssHal = nullptr;
@@ -195,42 +191,6 @@
     return Status::ok();
 }
 
-/*
- * GnssNiCallback implements callback methods required by the IGnssNi interface.
- */
-struct GnssNiCallback : public IGnssNiCallback {
-    Return<void> niNotifyCb(const IGnssNiCallback::GnssNiNotification& notification)
-            override;
-};
-
-Return<void> GnssNiCallback::niNotifyCb(
-        const IGnssNiCallback::GnssNiNotification& notification) {
-    JNIEnv* env = getJniEnv();
-    jstring requestorId = env->NewStringUTF(notification.requestorId.c_str());
-    jstring text = env->NewStringUTF(notification.notificationMessage.c_str());
-
-    if (requestorId && text) {
-        env->CallVoidMethod(mCallbacksObj, method_reportNiNotification,
-                            notification.notificationId, notification.niType,
-                            notification.notifyFlags, notification.timeoutSec,
-                            notification.defaultResponse, requestorId, text,
-                            notification.requestorIdEncoding,
-                            notification.notificationIdEncoding);
-    } else {
-        ALOGE("%s: OOM Error\n", __func__);
-    }
-
-    if (requestorId) {
-        env->DeleteLocalRef(requestorId);
-    }
-
-    if (text) {
-        env->DeleteLocalRef(text);
-    }
-    checkAndClearExceptionFromCallback(env, __FUNCTION__);
-    return Void();
-}
-
 /* Initializes the GNSS service handle. */
 static void android_location_gnss_hal_GnssNative_set_gps_service_handle() {
     gnssHal = std::make_unique<gnss::GnssHal>();
@@ -242,10 +202,6 @@
     android_location_gnss_hal_GnssNative_set_gps_service_handle();
 
     // Cache methodIDs and class IDs.
-
-    method_reportNiNotification = env->GetMethodID(clazz, "reportNiNotification",
-            "(IIIIILjava/lang/String;Ljava/lang/String;II)V");
-
     method_reportNfwNotification = env->GetMethodID(clazz, "reportNfwNotification",
             "(Ljava/lang/String;BLjava/lang/String;BLjava/lang/String;BZZ)V");
     method_reportGnssPowerStats =
@@ -305,7 +261,6 @@
     gnssAntennaInfoIface = gnssHal->getGnssAntennaInfoInterface();
     gnssMeasurementCorrectionsIface = gnssHal->getMeasurementCorrectionsInterface();
     gnssDebugIface = gnssHal->getGnssDebugInterface();
-    gnssNiIface = gnssHal->getGnssNiInterface();
     gnssConfigurationIface = gnssHal->getGnssConfigurationInterface();
     gnssGeofencingIface = gnssHal->getGnssGeofenceInterface();
     gnssBatchingIface = gnssHal->getGnssBatchingInterface();
@@ -376,15 +331,6 @@
         ALOGI("Unable to initialize IGnssGeofencing interface.");
     }
 
-    // Set IGnssNi.hal callback.
-    sp<IGnssNiCallback> gnssNiCbIface = new GnssNiCallback();
-    if (gnssNiIface != nullptr) {
-        auto status = gnssNiIface->setCallback(gnssNiCbIface);
-        checkHidlReturn(status, "IGnssNi setCallback() failed.");
-    } else {
-        ALOGI("Unable to initialize IGnssNi interface.");
-    }
-
     // Set IAGnssRil callback.
     if (agnssRilIface == nullptr ||
         !agnssRilIface->setCallback(std::make_unique<gnss::AGnssRilCallback>())) {
@@ -592,18 +538,6 @@
     }
 }
 
-static void android_location_gnss_hal_GnssNative_send_ni_response(JNIEnv* /* env */, jclass,
-                                                                  jint notifId, jint response) {
-    if (gnssNiIface == nullptr) {
-        ALOGE("%s: IGnssNi interface not available.", __func__);
-        return;
-    }
-
-    auto result = gnssNiIface->respond(notifId,
-            static_cast<IGnssNiCallback::GnssUserResponseType>(response));
-    checkHidlReturn(result, "IGnssNi respond() failed.");
-}
-
 static jstring android_location_gnss_hal_GnssNative_get_internal_state(JNIEnv* env, jclass) {
     /*
      * TODO: Create a jobject to represent GnssDebug.
@@ -987,8 +921,6 @@
          reinterpret_cast<void*>(android_location_gnss_hal_GnssNative_set_agps_server)},
         {"native_inject_ni_supl_message_data", "([BII)V",
          reinterpret_cast<void*>(android_location_gnss_hal_GnssNative_inject_ni_supl_message_data)},
-        {"native_send_ni_response", "(II)V",
-         reinterpret_cast<void*>(android_location_gnss_hal_GnssNative_send_ni_response)},
         {"native_get_internal_state", "()Ljava/lang/String;",
          reinterpret_cast<void*>(android_location_gnss_hal_GnssNative_get_internal_state)},
         {"native_is_gnss_visibility_control_supported", "()Z",
diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp
index fe86ff1..6ab98fe 100644
--- a/services/core/jni/com_android_server_power_PowerManagerService.cpp
+++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp
@@ -18,48 +18,40 @@
 
 //#define LOG_NDEBUG 0
 
+#include "com_android_server_power_PowerManagerService.h"
+
+#include <aidl/android/hardware/power/Boost.h>
+#include <aidl/android/hardware/power/Mode.h>
 #include <aidl/android/system/suspend/ISystemSuspend.h>
 #include <aidl/android/system/suspend/IWakeLock.h>
-#include <android/hardware/power/1.1/IPower.h>
-#include <android/hardware/power/Boost.h>
-#include <android/hardware/power/IPower.h>
-#include <android/hardware/power/Mode.h>
-#include <android/system/suspend/ISuspendControlService.h>
-#include <android/system/suspend/internal/ISuspendControlServiceInternal.h>
-#include <nativehelper/JNIHelp.h>
-#include "jni.h"
-
-#include <nativehelper/ScopedUtfChars.h>
-#include <powermanager/PowerHalController.h>
-
-#include <limits.h>
-
 #include <android-base/chrono_utils.h>
 #include <android/binder_manager.h>
+#include <android/system/suspend/ISuspendControlService.h>
+#include <android/system/suspend/internal/ISuspendControlServiceInternal.h>
 #include <android_runtime/AndroidRuntime.h>
 #include <android_runtime/Log.h>
 #include <binder/IServiceManager.h>
 #include <gui/SurfaceComposerClient.h>
-#include <hardware/power.h>
 #include <hardware_legacy/power.h>
 #include <hidl/ServiceManagement.h>
+#include <limits.h>
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedUtfChars.h>
+#include <powermanager/PowerHalController.h>
 #include <utils/Log.h>
 #include <utils/String8.h>
 #include <utils/Timers.h>
 #include <utils/misc.h>
 
-#include "com_android_server_power_PowerManagerService.h"
+#include "jni.h"
 
+using aidl::android::hardware::power::Boost;
+using aidl::android::hardware::power::Mode;
 using aidl::android::system::suspend::ISystemSuspend;
 using aidl::android::system::suspend::IWakeLock;
 using aidl::android::system::suspend::WakeLockType;
 using android::String8;
-using android::hardware::power::Boost;
-using android::hardware::power::Mode;
 using android::system::suspend::ISuspendControlService;
-using IPowerV1_1 = android::hardware::power::V1_1::IPower;
-using IPowerV1_0 = android::hardware::power::V1_0::IPower;
-using IPowerAidl = android::hardware::power::IPower;
 
 namespace android {
 
diff --git a/services/core/jni/com_android_server_power_PowerManagerService.h b/services/core/jni/com_android_server_power_PowerManagerService.h
index a2f335c..36aaceb 100644
--- a/services/core/jni/com_android_server_power_PowerManagerService.h
+++ b/services/core/jni/com_android_server_power_PowerManagerService.h
@@ -18,9 +18,10 @@
 #define _ANDROID_SERVER_POWER_MANAGER_SERVICE_H
 
 #include <nativehelper/JNIHelp.h>
-#include "jni.h"
-
 #include <powermanager/PowerManager.h>
+#include <utils/Timers.h>
+
+#include "jni.h"
 
 namespace android {
 
diff --git a/services/core/lint-baseline.xml b/services/core/lint-baseline.xml
index 69e13b3..070bd4b 100644
--- a/services/core/lint-baseline.xml
+++ b/services/core/lint-baseline.xml
@@ -137,4 +137,12 @@
             line="1448"/>
     </issue>
 
+    <issue
+        id="SimpleManualPermissionEnforcement"
+        message="IWindowManager permission check should be converted to @EnforcePermission annotation">
+        <location
+            file="out/.intermediates/frameworks/base/services/core/services.core.protologsrc/gen/services.core.protolog.srcjar!/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java"
+            line="7158"/>
+    </issue>
+
 </issues>
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index f3c2de6..c323a7f 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -1414,7 +1414,6 @@
                             policy.mAdminList.remove(i);
                             policy.mAdminMap.remove(aa.info.getComponent());
                             pushActiveAdminPackagesLocked(userHandle);
-                            pushMeteredDisabledPackages(userHandle);
                         }
                     }
                 } catch (RemoteException re) {
@@ -1455,6 +1454,7 @@
         if (removedAdmin) {
             // The removed admin might have disabled camera, so update user restrictions.
             pushUserRestrictions(userHandle);
+            pushMeteredDisabledPackages(userHandle);
         }
     }
 
@@ -3187,6 +3187,10 @@
         final ActiveAdmin admin = getActiveAdminUncheckedLocked(adminReceiver, userHandle);
         DevicePolicyData policy = getUserData(userHandle);
         if (admin != null && !policy.mRemovingAdmins.contains(adminReceiver)) {
+            Slogf.d(LOG_TAG, "Adding " + adminReceiver + " for user " + userHandle
+                    + " to list of removing admins.");
+            logStackTrace("removeActiveAdminLocked");
+
             policy.mRemovingAdmins.add(adminReceiver);
             sendAdminCommandLocked(admin,
                     DeviceAdminReceiver.ACTION_DEVICE_ADMIN_DISABLED,
@@ -3466,8 +3470,10 @@
             }
 
             revertTransferOwnershipIfNecessaryLocked();
+            if (!isPolicyEngineForFinanceFlagEnabled()) {
+                updateUsbDataSignal(mContext, isUsbDataSignalingEnabledInternalLocked());
+            }
         }
-        updateUsbDataSignal();
 
         // In case flag value has changed, we apply it during boot to avoid doing it concurrently
         // with user toggling quiet mode.
@@ -5127,8 +5133,11 @@
             boolean deviceWideOnly) {
         final CallerIdentity caller = getCallerIdentity();
         Preconditions.checkCallAuthorization(hasFullCrossUsersPermission(caller, userHandle)
-                && (isSystemUid(caller) || hasCallingOrSelfPermission(
-                permission.SET_INITIAL_LOCK)));
+                && (isSystemUid(caller)
+                    // Accept any permission that ILockSettings#setLockCredential() accepts.
+                    || hasCallingOrSelfPermission(permission.SET_INITIAL_LOCK)
+                    || hasCallingOrSelfPermission(permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS)
+                    || hasCallingOrSelfPermission(permission.ACCESS_KEYGUARD_SECURE_STORAGE)));
         return getPasswordMinimumMetricsUnchecked(userHandle, deviceWideOnly);
     }
 
@@ -5725,20 +5734,17 @@
         final int callingUid = caller.getUid();
         final int userHandle = UserHandle.getUserId(callingUid);
         final boolean isPin = PasswordMetrics.isNumericOnly(password);
+        final LockscreenCredential newCredential;
+        if (isPin) {
+            newCredential = LockscreenCredential.createPin(password);
+        } else {
+            newCredential = LockscreenCredential.createPasswordOrNone(password);
+        }
         synchronized (getLockObject()) {
             final PasswordMetrics minMetrics = getPasswordMinimumMetricsUnchecked(userHandle);
-            final List<PasswordValidationError> validationErrors;
             final int complexity = getAggregatedPasswordComplexityLocked(userHandle);
-            // TODO: Consider changing validation API to take LockscreenCredential.
-            if (password.isEmpty()) {
-                validationErrors = PasswordMetrics.validatePasswordMetrics(
-                        minMetrics, complexity, new PasswordMetrics(CREDENTIAL_TYPE_NONE));
-            } else {
-                // TODO(b/120484642): remove getBytes() below
-                validationErrors = PasswordMetrics.validatePassword(
-                        minMetrics, complexity, isPin, password.getBytes());
-            }
-
+            final List<PasswordValidationError> validationErrors =
+                    PasswordMetrics.validateCredential(minMetrics, complexity, newCredential);
             if (!validationErrors.isEmpty()) {
                 Slogf.w(LOG_TAG, "Failed to reset password due to constraint violation: %s",
                         validationErrors.get(0));
@@ -5762,12 +5768,6 @@
         // Don't do this with the lock held, because it is going to call
         // back in to the service.
         final long ident = mInjector.binderClearCallingIdentity();
-        final LockscreenCredential newCredential;
-        if (isPin) {
-            newCredential = LockscreenCredential.createPin(password);
-        } else {
-            newCredential = LockscreenCredential.createPasswordOrNone(password);
-        }
         try {
             if (tokenHandle == 0 || token == null) {
                 if (!mLockPatternUtils.setLockCredential(newCredential,
@@ -17321,9 +17321,6 @@
         if (!mUserManager.isUserRunning(new UserHandle(deviceOwnerUserId))) {
             return STATUS_USER_NOT_RUNNING;
         }
-        if (mIsWatch && hasPaired(UserHandle.USER_SYSTEM)) {
-            return STATUS_HAS_PAIRED;
-        }
 
         boolean isHeadlessSystemUserMode = mInjector.userManagerIsHeadlessSystemUserMode();
 
@@ -17347,7 +17344,7 @@
 
         if (isAdb) {
             // If shell command runs after user setup completed check device status. Otherwise, OK.
-            if (mIsWatch || hasUserSetupCompleted(UserHandle.USER_SYSTEM)) {
+            if (hasUserSetupCompleted(UserHandle.USER_SYSTEM)) {
                 // DO can be setup only if there are no users which are neither created by default
                 // nor marked as FOR_TESTING
 
@@ -17895,41 +17892,44 @@
         if (!mHasFeature) {
             return packageNames;
         }
-        synchronized (getLockObject()) {
-            final ActiveAdmin admin = getProfileOwnerOrDeviceOwnerLocked(caller.getUserId());
-            return mInjector.binderWithCleanCallingIdentity(() -> {
-                final List<String> excludedPkgs = removeInvalidPkgsForMeteredDataRestriction(
-                        caller.getUserId(), packageNames);
+        return mInjector.binderWithCleanCallingIdentity(() -> {
+            final List<String> excludedPkgs = removeInvalidPkgsForMeteredDataRestriction(
+                    caller.getUserId(), packageNames);
+
+            synchronized (getLockObject()) {
+                final ActiveAdmin admin = getProfileOwnerOrDeviceOwnerLocked(caller.getUserId());
                 admin.meteredDisabledPackages = packageNames;
-                pushMeteredDisabledPackages(caller.getUserId());
                 saveSettingsLocked(caller.getUserId());
-                return excludedPkgs;
-            });
-        }
+            }
+            pushMeteredDisabledPackages(caller.getUserId());
+            return excludedPkgs;
+        });
     }
 
     private List<String> removeInvalidPkgsForMeteredDataRestriction(
             int userId, List<String> pkgNames) {
-        final Set<String> activeAdmins = getActiveAdminPackagesLocked(userId);
-        final List<String> excludedPkgs = new ArrayList<>();
-        for (int i = pkgNames.size() - 1; i >= 0; --i) {
-            final String pkgName = pkgNames.get(i);
-            // If the package is an active admin, don't restrict it.
-            if (activeAdmins.contains(pkgName)) {
-                excludedPkgs.add(pkgName);
-                continue;
-            }
-            // If the package doesn't exist, don't restrict it.
-            try {
-                if (!mInjector.getIPackageManager().isPackageAvailable(pkgName, userId)) {
+        synchronized (getLockObject()) {
+            final Set<String> activeAdmins = getActiveAdminPackagesLocked(userId);
+            final List<String> excludedPkgs = new ArrayList<>();
+            for (int i = pkgNames.size() - 1; i >= 0; --i) {
+                final String pkgName = pkgNames.get(i);
+                // If the package is an active admin, don't restrict it.
+                if (activeAdmins.contains(pkgName)) {
                     excludedPkgs.add(pkgName);
+                    continue;
                 }
-            } catch (RemoteException e) {
-                // Should not happen
+                // If the package doesn't exist, don't restrict it.
+                try {
+                    if (!mInjector.getIPackageManager().isPackageAvailable(pkgName, userId)) {
+                        excludedPkgs.add(pkgName);
+                    }
+                } catch (RemoteException e) {
+                    // Should not happen
+                }
             }
+            pkgNames.removeAll(excludedPkgs);
+            return excludedPkgs;
         }
-        pkgNames.removeAll(excludedPkgs);
-        return excludedPkgs;
     }
 
     @Override
@@ -18555,7 +18555,15 @@
             pushActiveAdminPackagesLocked(userHandle);
             saveSettingsLocked(userHandle);
             updateMaximumTimeToLockLocked(userHandle);
+
+            Slogf.d(LOG_TAG,
+                    "Removing device admin " + adminReceiver + " from user " + userHandle);
+            logStackTrace("removeAdminArtifacts");
+
             policy.mRemovingAdmins.remove(adminReceiver);
+            Slogf.d(LOG_TAG, "Current state of DevicePolicyData#mRemovingAdmins for user "
+                    + userHandle + ": " + policy.mRemovingAdmins);
+
             pushScreenCapturePolicy(userHandle);
 
             Slogf.i(LOG_TAG, "Device admin " + adminReceiver + " removed from user " + userHandle);
@@ -19509,8 +19517,9 @@
     public boolean isCurrentInputMethodSetByOwner() {
         final CallerIdentity caller = getCallerIdentity();
         Preconditions.checkCallAuthorization(isDefaultDeviceOwner(caller)
-                || isProfileOwner(caller) || isSystemUid(caller),
-                "Only profile owner, device owner and system may call this method.");
+                || isProfileOwner(caller) || canQueryAdminPolicy(caller) || isSystemUid(caller),
+                "Only profile owner, device owner, a caller with QUERY_ADMIN_POLICY "
+                        + "permission or system may call this method.");
         return getUserData(caller.getUserId()).mCurrentInputMethodSet;
     }
 
@@ -22364,7 +22373,7 @@
     public void setUsbDataSignalingEnabled(String packageName, boolean enabled) {
         Objects.requireNonNull(packageName, "Admin package name must be provided");
         final CallerIdentity caller = getCallerIdentity(packageName);
-        if (!isPermissionCheckFlagEnabled()) {
+        if (!isPolicyEngineForFinanceFlagEnabled()) {
             Preconditions.checkCallAuthorization(
                     isDefaultDeviceOwner(caller) || isProfileOwnerOfOrganizationOwnedDevice(caller),
                     "USB data signaling can only be controlled by a device owner or "
@@ -22373,22 +22382,25 @@
                     "USB data signaling cannot be disabled.");
         }
 
-
         synchronized (getLockObject()) {
-            ActiveAdmin admin;
-            if (isPermissionCheckFlagEnabled()) {
-                admin = enforcePermissionAndGetEnforcingAdmin(
+            if (isPolicyEngineForFinanceFlagEnabled()) {
+                EnforcingAdmin enforcingAdmin = enforcePermissionAndGetEnforcingAdmin(
                         /* admin= */ null, MANAGE_DEVICE_POLICY_USB_DATA_SIGNALLING,
                         caller.getPackageName(),
-                        caller.getUserId()).getActiveAdmin();
+                        caller.getUserId());
+                Preconditions.checkState(canUsbDataSignalingBeDisabled(),
+                        "USB data signaling cannot be disabled.");
+                mDevicePolicyEngine.setGlobalPolicy(
+                        PolicyDefinition.USB_DATA_SIGNALING,
+                        enforcingAdmin,
+                        new BooleanPolicyValue(enabled));
             } else {
-                admin = getProfileOwnerOrDeviceOwnerLocked(caller.getUserId());
-            }
-
-            if (admin.mUsbDataSignalingEnabled != enabled) {
-                admin.mUsbDataSignalingEnabled = enabled;
-                saveSettingsLocked(caller.getUserId());
-                updateUsbDataSignal();
+                ActiveAdmin admin = getProfileOwnerOrDeviceOwnerLocked(caller.getUserId());
+                if (admin.mUsbDataSignalingEnabled != enabled) {
+                    admin.mUsbDataSignalingEnabled = enabled;
+                    saveSettingsLocked(caller.getUserId());
+                    updateUsbDataSignal(mContext, isUsbDataSignalingEnabledInternalLocked());
+                }
             }
         }
         DevicePolicyEventLogger
@@ -22398,16 +22410,12 @@
                 .write();
     }
 
-    private void updateUsbDataSignal() {
-        if (!canUsbDataSignalingBeDisabled()) {
+    static void updateUsbDataSignal(Context context, boolean value) {
+        if (!canUsbDataSignalingBeDisabledInternal(context)) {
             return;
         }
-        final boolean usbEnabled;
-        synchronized (getLockObject()) {
-            usbEnabled = isUsbDataSignalingEnabledInternalLocked();
-        }
-        if (!mInjector.binderWithCleanCallingIdentity(
-                () -> mInjector.getUsbManager().enableUsbDataSignal(usbEnabled))) {
+        if (!Binder.withCleanCallingIdentity(
+                () -> context.getSystemService(UsbManager.class).enableUsbDataSignal(value))) {
             Slogf.w(LOG_TAG, "Failed to set usb data signaling state");
         }
     }
@@ -22415,28 +22423,26 @@
     @Override
     public boolean isUsbDataSignalingEnabled(String packageName) {
         final CallerIdentity caller = getCallerIdentity(packageName);
-        synchronized (getLockObject()) {
-            // If the caller is an admin, return the policy set by itself. Otherwise
-            // return the device-wide policy.
-            if (isDefaultDeviceOwner(caller) || isProfileOwnerOfOrganizationOwnedDevice(caller)) {
-                return getProfileOwnerOrDeviceOwnerLocked(
-                        caller.getUserId()).mUsbDataSignalingEnabled;
-            } else {
-                return isUsbDataSignalingEnabledInternalLocked();
+        if (isPolicyEngineForFinanceFlagEnabled()) {
+            Boolean enabled = mDevicePolicyEngine.getResolvedPolicy(
+                    PolicyDefinition.USB_DATA_SIGNALING,
+                    caller.getUserId());
+            return enabled == null || enabled;
+        } else {
+            synchronized (getLockObject()) {
+                // If the caller is an admin, return the policy set by itself. Otherwise
+                // return the device-wide policy.
+                if (isDefaultDeviceOwner(caller) || isProfileOwnerOfOrganizationOwnedDevice(
+                        caller)) {
+                    return getProfileOwnerOrDeviceOwnerLocked(
+                            caller.getUserId()).mUsbDataSignalingEnabled;
+                } else {
+                    return isUsbDataSignalingEnabledInternalLocked();
+                }
             }
         }
     }
 
-    @Override
-    public boolean isUsbDataSignalingEnabledForUser(int userId) {
-        final CallerIdentity caller = getCallerIdentity();
-        Preconditions.checkCallAuthorization(isSystemUid(caller));
-
-        synchronized (getLockObject()) {
-            return isUsbDataSignalingEnabledInternalLocked();
-        }
-    }
-
     private boolean isUsbDataSignalingEnabledInternalLocked() {
         // TODO(b/261999445): remove
         ActiveAdmin admin;
@@ -22451,9 +22457,14 @@
 
     @Override
     public boolean canUsbDataSignalingBeDisabled() {
-        return mInjector.binderWithCleanCallingIdentity(() ->
-                mInjector.getUsbManager() != null
-                        && mInjector.getUsbManager().getUsbHalVersion() >= UsbManager.USB_HAL_V1_3
+        return canUsbDataSignalingBeDisabledInternal(mContext);
+    }
+
+    private static boolean canUsbDataSignalingBeDisabledInternal(Context context) {
+        return Binder.withCleanCallingIdentity(() ->
+            context.getSystemService(UsbManager.class) != null
+                  && context.getSystemService(UsbManager.class).getUsbHalVersion()
+                  >= UsbManager.USB_HAL_V1_3
         );
     }
 
@@ -24128,7 +24139,7 @@
                 // When listener is added onSubscriptionsChanged gets called immediately for once
                 // (even if subscriptions are not changed) and later on when subscriptions changes.
                 subscriptionManager.addOnSubscriptionsChangedListener(
-                        mSubscriptionsChangedListener.getHandlerExecutor(),
+                        mHandler::post,
                         mSubscriptionsChangedListener);
             } finally {
                 mInjector.binderRestoreCallingIdentity(id);
@@ -24648,4 +24659,28 @@
         return getRoleHolderPackageNameOnUser(
                 RoleManager.ROLE_FINANCED_DEVICE_KIOSK, UserHandle.USER_ALL);
     }
+
+    /**
+     * TODO (b/278924166): this method is added for debugging the specified bug.
+     * Remove once fixed.
+     **/
+    private void logStackTrace(String methodName) {
+        try {
+            StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
+            String stackMethod;
+            StringBuilder stackTrace = new StringBuilder();
+            for (StackTraceElement s : stackTraceElements) {
+                stackMethod = s.getMethodName();
+                if (stackMethod == null || stackMethod.equals("getThreadStackTrace")
+                        || stackMethod.equals("getStackTrace")
+                        || stackMethod.equals("logStackTrace")) {
+                    continue;
+                }
+                stackTrace.append(s.getMethodName() + ":" + s.getLineNumber() + "\n");
+            }
+            Slogf.d(LOG_TAG, "StackTrace for " + methodName + ": \n" + stackTrace);
+        } catch (Exception e) {
+            Slogf.d(LOG_TAG, "Unable to get stacktrace");
+        }
+    }
 }
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/PolicyDefinition.java b/services/devicepolicy/java/com/android/server/devicepolicy/PolicyDefinition.java
index 7e48407..7a877b9 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/PolicyDefinition.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/PolicyDefinition.java
@@ -332,6 +332,14 @@
             PolicyEnforcerCallbacks::setPersonalAppsSuspended,
             new BooleanPolicySerializer());
 
+    static PolicyDefinition<Boolean> USB_DATA_SIGNALING = new PolicyDefinition<>(
+            new NoArgsPolicyKey(DevicePolicyIdentifiers.USB_DATA_SIGNALING_POLICY),
+            // usb data signaling is enabled by default, hence disabling it is more restrictive.
+            FALSE_MORE_RESTRICTIVE,
+            POLICY_FLAG_GLOBAL_ONLY_POLICY,
+            (Boolean value, Context context, Integer userId, PolicyKey policyKey) ->
+                PolicyEnforcerCallbacks.setUsbDataSignalingEnabled(value, context),
+            new BooleanPolicySerializer());
 
     private static final Map<String, PolicyDefinition<?>> POLICY_DEFINITIONS = new HashMap<>();
     private static Map<String, Integer> USER_RESTRICTION_FLAGS = new HashMap<>();
@@ -364,6 +372,8 @@
                 SCREEN_CAPTURE_DISABLED);
         POLICY_DEFINITIONS.put(DevicePolicyIdentifiers.PERSONAL_APPS_SUSPENDED_POLICY,
                 PERSONAL_APPS_SUSPENDED);
+        POLICY_DEFINITIONS.put(DevicePolicyIdentifiers.USB_DATA_SIGNALING_POLICY,
+                USB_DATA_SIGNALING);
 
         // User Restriction Policies
         USER_RESTRICTION_FLAGS.put(UserManager.DISALLOW_MODIFY_ACCOUNTS, /* flags= */ 0);
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/PolicyEnforcerCallbacks.java b/services/devicepolicy/java/com/android/server/devicepolicy/PolicyEnforcerCallbacks.java
index 3b048b2..6570ce1 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/PolicyEnforcerCallbacks.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/PolicyEnforcerCallbacks.java
@@ -302,4 +302,14 @@
             Slogf.wtf(LOG_TAG, "Failed to suspend apps: " + String.join(",", failedApps));
         }
     }
+
+    static boolean setUsbDataSignalingEnabled(@Nullable Boolean value, @NonNull Context context) {
+        return Binder.withCleanCallingIdentity(() -> {
+            Objects.requireNonNull(context);
+
+            boolean enabled = value == null || value;
+            DevicePolicyManagerService.updateUsbDataSignal(context, enabled);
+            return true;
+        });
+    }
 }
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/PolicyVersionUpgrader.java b/services/devicepolicy/java/com/android/server/devicepolicy/PolicyVersionUpgrader.java
index 06f11be..733b1d9 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/PolicyVersionUpgrader.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/PolicyVersionUpgrader.java
@@ -29,6 +29,7 @@
 import java.io.IOException;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -307,6 +308,8 @@
             String versionString = Files.readAllLines(
                     file.toPath(), Charset.defaultCharset()).get(0);
             return Integer.parseInt(versionString);
+        } catch (NoSuchFileException e) {
+            return 0; // expected on first boot
         } catch (IOException | NumberFormatException | IndexOutOfBoundsException e) {
             Slog.e(LOG_TAG, "Error reading version", e);
             return 0;
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/StringSetPolicySerializer.java b/services/devicepolicy/java/com/android/server/devicepolicy/StringSetPolicySerializer.java
index 24d0521..0265453 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/StringSetPolicySerializer.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/StringSetPolicySerializer.java
@@ -32,9 +32,8 @@
 
 // TODO(scottjonathan): Replace with generic set implementation
 final class StringSetPolicySerializer extends PolicySerializer<Set<String>> {
-    private static final String ATTR_VALUES = ":strings";
+    private static final String ATTR_VALUES = "strings";
     private static final String ATTR_VALUES_SEPARATOR = ";";
-
     @Override
     void saveToXml(PolicyKey policyKey, TypedXmlSerializer serializer,
             @NonNull Set<String> value) throws IOException {
diff --git a/services/incremental/ServiceWrappers.cpp b/services/incremental/ServiceWrappers.cpp
index ce3d514..2a2fa7a 100644
--- a/services/incremental/ServiceWrappers.cpp
+++ b/services/incremental/ServiceWrappers.cpp
@@ -315,11 +315,22 @@
         std::unique_lock lock(mMutex);
         for (;;) {
             const TimePoint nextJobTs = mJobs.empty() ? kInfinityTs : mJobs.begin()->when;
-            mCondition.wait_until(lock, nextJobTs, [this, oldNextJobTs = nextJobTs]() {
+            auto conditionPredicate = [this, oldNextJobTs = nextJobTs]() {
                 const auto now = Clock::now();
                 const auto newFirstJobTs = !mJobs.empty() ? mJobs.begin()->when : kInfinityTs;
                 return newFirstJobTs <= now || newFirstJobTs < oldNextJobTs || !mRunning;
-            });
+            };
+            // libcxx's implementation of wait_until() recalculates the 'until' time into
+            // the wait duration and then goes back to the absolute timestamp when calling
+            // pthread_cond_timedwait(); this back-and-forth calculation sometimes loses
+            // the 'infinity' value because enough time passes in between, and instead
+            // passes incorrect timestamp into the syscall, causing a crash.
+            // Mitigating it by explicitly calling the non-timed wait here.
+            if (mJobs.empty()) {
+                mCondition.wait(lock, conditionPredicate);
+            } else {
+                mCondition.wait_until(lock, nextJobTs, conditionPredicate);
+            }
             if (!mRunning) {
                 return;
             }
diff --git a/services/incremental/TEST_MAPPING b/services/incremental/TEST_MAPPING
index be7feb5..4af880d 100644
--- a/services/incremental/TEST_MAPPING
+++ b/services/incremental/TEST_MAPPING
@@ -9,6 +9,14 @@
       ]
     },
     {
+      "name": "CtsPackageManagerIncrementalStatsHostTestCases",
+      "options": [
+        {
+          "exclude-annotation": "android.platform.test.annotations.LargeTest"
+        }
+      ]
+    },
+    {
       "name": "CtsIncrementalInstallHostTestCases"
     },
     {
@@ -20,13 +28,13 @@
     {
       "name": "CtsInstalledLoadingProgressHostTests"
     }
-  ],
+   ],
   "presubmit-large": [
     {
-      "name": "CtsContentTestCases",
+      "name": "CtsPackageManagerTestCases",
       "options": [
         {
-          "include-filter": "android.content.pm.cts.PackageManagerShellCommandTest"
+          "include-filter": "android.content.pm.cts.PackageManagerShellCommandInstallTest"
         },
         {
           "include-filter": "android.content.pm.cts.PackageManagerShellCommandIncrementalTest"
@@ -41,5 +49,15 @@
     {
       "name": "CtsIncrementalInstallHostTestCases"
     }
+  ],
+  "postsubmit": [
+    {
+      "name": "CtsPackageManagerIncrementalStatsHostTestCases",
+      "options": [
+        {
+          "include-annotation": "android.platform.test.annotations.LargeTest"
+        }
+      ]
+    }
   ]
 }
diff --git a/services/java/com/android/server/CommunalProfileInitializer.java b/services/java/com/android/server/CommunalProfileInitializer.java
new file mode 100644
index 0000000..3271518
--- /dev/null
+++ b/services/java/com/android/server/CommunalProfileInitializer.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.server;
+
+import android.content.pm.UserInfo;
+import android.os.UserHandle;
+import android.os.UserManager;
+
+import com.android.server.am.ActivityManagerService;
+import com.android.server.pm.UserManagerInternal;
+import com.android.server.utils.Slogf;
+import com.android.server.utils.TimingsTraceAndSlog;
+
+/**
+ * Responsible for creating the communal profile at first boot, if required.
+ */
+public class CommunalProfileInitializer {
+
+    private static final String TAG = CommunalProfileInitializer.class.getSimpleName();
+
+    private UserManagerInternal mUmi;
+    private final ActivityManagerService mAms;
+
+    public CommunalProfileInitializer(ActivityManagerService ams) {
+        mUmi = LocalServices.getService(UserManagerInternal.class);
+        mAms = ams;
+    }
+
+    /**
+     * Initialize this object and create the Communal Profile if needed.
+     */
+    public void init(TimingsTraceAndSlog t) {
+        Slogf.i(TAG, "init())");
+
+        t.traceBegin("createCommunalProfileIfNeeded");
+        createCommunalProfileIfNeeded();
+        t.traceEnd();
+    }
+
+    private void createCommunalProfileIfNeeded() {
+        final int communalProfile = mUmi.getCommunalProfileId();
+        if (communalProfile != UserHandle.USER_NULL) {
+            Slogf.d(TAG, "Found existing Communal Profile, userId=%d", communalProfile);
+            return;
+        }
+
+        Slogf.d(TAG, "Creating a new Communal Profile");
+        try {
+            // TODO: b/293860614 - Create Communal Profile string name
+            final UserInfo newProfile = mUmi.createUserEvenWhenDisallowed(
+                    /* name= */ null,
+                    UserManager.USER_TYPE_PROFILE_COMMUNAL,
+                    /* flags= */ 0, /* disallowedPackages= */ null, /* token= */ null);
+            Slogf.i(TAG, "Successfully created Communal Profile, userId=%d", newProfile.id);
+        } catch (UserManager.CheckedUserOperationException e) {
+            Slogf.wtf(TAG, "Communal Profile creation failed", e);
+        }
+    }
+
+    static void removeCommunalProfileIfPresent() {
+        final UserManagerInternal umi = LocalServices.getService(UserManagerInternal.class);
+        final int communalProfile = umi.getCommunalProfileId();
+        if (communalProfile == UserHandle.USER_NULL) {
+            return;
+        }
+        Slogf.d(TAG, "Removing existing Communal Profile, userId=%d", communalProfile);
+        final boolean removeSucceeded = umi.removeUserEvenWhenDisallowed(communalProfile);
+        if (!removeSucceeded) {
+            Slogf.e(TAG, "Failed to remove Communal Profile, userId=%d", communalProfile);
+        }
+    }
+
+}
diff --git a/services/java/com/android/server/HsumBootUserInitializer.java b/services/java/com/android/server/HsumBootUserInitializer.java
index b895812..0bf8e71 100644
--- a/services/java/com/android/server/HsumBootUserInitializer.java
+++ b/services/java/com/android/server/HsumBootUserInitializer.java
@@ -74,7 +74,8 @@
         }
         return new HsumBootUserInitializer(
                 LocalServices.getService(UserManagerInternal.class),
-                am, pms, contentResolver, shouldAlwaysHaveMainUser);
+                am, pms, contentResolver,
+                shouldAlwaysHaveMainUser);
     }
 
     private HsumBootUserInitializer(UserManagerInternal umi, ActivityManagerService am,
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index cb2bb1b..57fa12d 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -51,7 +51,6 @@
 import android.database.sqlite.SQLiteCompatibilityWalFlags;
 import android.database.sqlite.SQLiteGlobal;
 import android.graphics.GraphicsStatsService;
-import android.graphics.Typeface;
 import android.hardware.display.DisplayManagerInternal;
 import android.net.ConnectivityManager;
 import android.net.ConnectivityModuleConnector;
@@ -76,6 +75,7 @@
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.os.storage.IStorageManager;
 import android.provider.DeviceConfig;
 import android.provider.Settings;
@@ -106,8 +106,9 @@
 import com.android.internal.widget.ILockSettings;
 import com.android.internal.widget.LockSettingsInternal;
 import com.android.server.am.ActivityManagerService;
-import com.android.server.ambientcontext.AmbientContextManagerService;
 import com.android.server.appbinding.AppBindingService;
+import com.android.server.appop.AppOpMigrationHelper;
+import com.android.server.appop.AppOpMigrationHelperImpl;
 import com.android.server.art.ArtModuleServiceInitializer;
 import com.android.server.art.DexUseManagerLocal;
 import com.android.server.attention.AttentionManagerService;
@@ -175,6 +176,8 @@
 import com.android.server.pm.ShortcutService;
 import com.android.server.pm.UserManagerService;
 import com.android.server.pm.dex.OdsignStatsLogger;
+import com.android.server.pm.permission.PermissionMigrationHelper;
+import com.android.server.pm.permission.PermissionMigrationHelperImpl;
 import com.android.server.pm.verify.domain.DomainVerificationService;
 import com.android.server.policy.AppOpsPolicy;
 import com.android.server.policy.PermissionPolicyService;
@@ -323,16 +326,20 @@
             "com.android.clockwork.power.WearPowerService";
     private static final String HEALTH_SERVICE_CLASS =
             "com.android.clockwork.healthservices.HealthService";
-    private static final String WEAR_SIDEKICK_SERVICE_CLASS =
-            "com.google.android.clockwork.sidekick.SidekickService";
+    private static final String SYSTEM_STATE_DISPLAY_SERVICE_CLASS =
+            "com.android.clockwork.systemstatedisplay.SystemStateDisplayService";
     private static final String WEAR_DISPLAYOFFLOAD_SERVICE_CLASS =
             "com.android.clockwork.displayoffload.DisplayOffloadService";
+    private static final String WEAR_MODE_SERVICE_CLASS =
+            "com.android.clockwork.modes.ModeManagerService";
     private static final String WEAR_DISPLAY_SERVICE_CLASS =
             "com.android.clockwork.display.WearDisplayService";
     private static final String WEAR_TIME_SERVICE_CLASS =
             "com.android.clockwork.time.WearTimeService";
-    private static final String WEAR_GLOBAL_ACTIONS_SERVICE_CLASS =
-            "com.android.clockwork.globalactions.GlobalActionsService";
+    private static final String WEAR_SETTINGS_SERVICE_CLASS =
+            "com.android.clockwork.settings.WearSettingsService";
+    private static final String WRIST_ORIENTATION_SERVICE_CLASS =
+            "com.android.clockwork.wristorientation.WristOrientationService";
     private static final String ACCOUNT_SERVICE_CLASS =
             "com.android.server.accounts.AccountManagerService$Lifecycle";
     private static final String CONTENT_SERVICE_CLASS =
@@ -349,6 +356,8 @@
             "com.android.server.translation.TranslationManagerService";
     private static final String MUSIC_RECOGNITION_MANAGER_SERVICE_CLASS =
             "com.android.server.musicrecognition.MusicRecognitionManagerService";
+    private static final String AMBIENT_CONTEXT_MANAGER_SERVICE_CLASS =
+            "com.android.server.ambientcontext.AmbientContextManagerService";
     private static final String SYSTEM_CAPTIONS_MANAGER_SERVICE_CLASS =
             "com.android.server.systemcaptions.SystemCaptionsManagerService";
     private static final String TEXT_TO_SPEECH_MANAGER_SERVICE_CLASS =
@@ -905,13 +914,6 @@
             SystemServerInitThreadPool tp = SystemServerInitThreadPool.start();
             mDumper.addDumpable(tp);
 
-            // Load preinstalled system fonts for system server, so that WindowManagerService, etc
-            // can start using Typeface. Note that fonts are required not only for text rendering,
-            // but also for some text operations (e.g. TextUtils.makeSafeForPresentation()).
-            if (Typeface.ENABLE_LAZY_TYPEFACE_INITIALIZATION) {
-                Typeface.loadPreinstalledSystemFontMap();
-            }
-
             // Attach JVMTI agent if this is a debuggable build and the system property is set.
             if (Build.IS_DEBUGGABLE) {
                 // Property is of the form "library_path=parameters".
@@ -1142,6 +1144,10 @@
 
         // Start AccessCheckingService which provides new implementation for permission and app op.
         t.traceBegin("StartAccessCheckingService");
+        LocalServices.addService(PermissionMigrationHelper.class,
+                new PermissionMigrationHelperImpl());
+        LocalServices.addService(AppOpMigrationHelper.class,
+                new AppOpMigrationHelperImpl());
         mSystemServiceManager.startService(AccessCheckingService.class);
         t.traceEnd();
 
@@ -1213,13 +1219,6 @@
         }
         t.traceEnd();
 
-        t.traceBegin("StartSidekickService");
-        // Package manager isn't started yet; need to use SysProp not hardware feature
-        if (SystemProperties.getBoolean("config.enable_sidekick_graphics", false)) {
-            mSystemServiceManager.startService(WEAR_SIDEKICK_SERVICE_CLASS);
-        }
-        t.traceEnd();
-
         // Display manager is needed to provide display metrics before package manager
         // starts up.
         t.traceBegin("StartDisplayManager");
@@ -1569,9 +1568,11 @@
             mSystemServiceManager.startService(ROLE_SERVICE_CLASS);
             t.traceEnd();
 
-            t.traceBegin("StartVibratorManagerService");
-            mSystemServiceManager.startService(VibratorManagerService.Lifecycle.class);
-            t.traceEnd();
+            if (!isTv) {
+                t.traceBegin("StartVibratorManagerService");
+                mSystemServiceManager.startService(VibratorManagerService.Lifecycle.class);
+                t.traceEnd();
+            }
 
             t.traceBegin("StartDynamicSystemService");
             dynamicSystem = new DynamicSystemService(context);
@@ -1884,9 +1885,7 @@
             t.traceBegin("StartStatusBarManagerService");
             try {
                 statusBar = new StatusBarManagerService(context);
-                if (!isWatch) {
-                    statusBar.publishGlobalActionsProvider();
-                }
+                statusBar.publishGlobalActionsProvider();
                 ServiceManager.addService(Context.STATUS_BAR_SERVICE, statusBar, false,
                         DUMP_FLAG_PRIORITY_NORMAL | DUMP_FLAG_PROTO);
             } catch (Throwable e) {
@@ -1909,9 +1908,17 @@
             startRotationResolverService(context, t);
             startSystemCaptionsManagerService(context, t);
             startTextToSpeechManagerService(context, t);
-            startAmbientContextService(t);
             startWearableSensingService(t);
 
+            if (deviceHasConfigString(
+                    context, R.string.config_defaultAmbientContextDetectionService)) {
+                t.traceBegin("StartAmbientContextService");
+                mSystemServiceManager.startService(AMBIENT_CONTEXT_MANAGER_SERVICE_CLASS);
+                t.traceEnd();
+            } else {
+                Slog.d(TAG, "AmbientContextManagerService not defined by OEM or disabled by flag");
+            }
+
             // System Speech Recognition Service
             t.traceBegin("StartSpeechRecognitionManagerService");
             mSystemServiceManager.startService(SPEECH_RECOGNITION_MANAGER_SERVICE_CLASS);
@@ -1936,16 +1943,20 @@
             }
 
             // Search UI manager service
-            // TODO: add deviceHasConfigString(context, R.string.config_defaultSearchUiService)
-            t.traceBegin("StartSearchUiService");
-            mSystemServiceManager.startService(SEARCH_UI_MANAGER_SERVICE_CLASS);
-            t.traceEnd();
+            if (deviceHasConfigString(context, R.string.config_defaultSearchUiService)) {
+                t.traceBegin("StartSearchUiService");
+                mSystemServiceManager.startService(SEARCH_UI_MANAGER_SERVICE_CLASS);
+                t.traceEnd();
+            }
 
             // Smartspace manager service
-            // TODO: add deviceHasConfigString(context, R.string.config_defaultSmartspaceService)
-            t.traceBegin("StartSmartspaceService");
-            mSystemServiceManager.startService(SMARTSPACE_MANAGER_SERVICE_CLASS);
-            t.traceEnd();
+            if (deviceHasConfigString(context, R.string.config_defaultSmartspaceService)) {
+                t.traceBegin("StartSmartspaceService");
+                mSystemServiceManager.startService(SMARTSPACE_MANAGER_SERVICE_CLASS);
+                t.traceEnd();
+            } else {
+                Slog.d(TAG, "SmartspaceManagerService not defined by OEM or disabled by flag");
+            }
 
             t.traceBegin("InitConnectivityModuleConnector");
             try {
@@ -2195,12 +2206,13 @@
             }
 
             // WallpaperEffectsGeneration manager service
-            // TODO (b/135218095): Use deviceHasConfigString(context,
-            //  R.string.config_defaultWallpaperEffectsGenerationService)
-            t.traceBegin("StartWallpaperEffectsGenerationService");
-            mSystemServiceManager.startService(
+            if (deviceHasConfigString(context,
+                R.string.config_defaultWallpaperEffectsGenerationService)) {
+                t.traceBegin("StartWallpaperEffectsGenerationService");
+                mSystemServiceManager.startService(
                     WALLPAPER_EFFECTS_GENERATION_MANAGER_SERVICE_CLASS);
-            t.traceEnd();
+                t.traceEnd();
+            }
 
             t.traceBegin("StartAudioService");
             if (!isArc) {
@@ -2433,8 +2445,9 @@
                 t.traceBegin("StartCompanionDeviceManager");
                 mSystemServiceManager.startService(COMPANION_DEVICE_MANAGER_SERVICE_CLASS);
                 t.traceEnd();
+            }
 
-                // VirtualDeviceManager depends on CDM to control the associations.
+            if (context.getResources().getBoolean(R.bool.config_enableVirtualDeviceManager)) {
                 t.traceBegin("StartVirtualDeviceManager");
                 mSystemServiceManager.startService(VIRTUAL_DEVICE_MANAGER_SERVICE_CLASS);
                 t.traceEnd();
@@ -2583,7 +2596,7 @@
         mSystemServiceManager.startService(MediaProjectionManagerService.class);
         t.traceEnd();
 
-       if (isWatch) {
+        if (isWatch) {
             // Must be started before services that depend it, e.g. WearConnectivityService
             t.traceBegin("StartWearPowerService");
             mSystemServiceManager.startService(WEAR_POWER_SERVICE_CLASS);
@@ -2593,6 +2606,10 @@
             mSystemServiceManager.startService(HEALTH_SERVICE_CLASS);
             t.traceEnd();
 
+            t.traceBegin("StartSystemStateDisplayService");
+            mSystemServiceManager.startService(SYSTEM_STATE_DISPLAY_SERVICE_CLASS);
+            t.traceEnd();
+
             t.traceBegin("StartWearConnectivityService");
             mSystemServiceManager.startService(WEAR_CONNECTIVITY_SERVICE_CLASS);
             t.traceEnd();
@@ -2605,9 +2622,21 @@
             mSystemServiceManager.startService(WEAR_TIME_SERVICE_CLASS);
             t.traceEnd();
 
-            t.traceBegin("StartWearGlobalActionsService");
-            mSystemServiceManager.startService(WEAR_GLOBAL_ACTIONS_SERVICE_CLASS);
+            t.traceBegin("StartWearSettingsService");
+            mSystemServiceManager.startService(WEAR_SETTINGS_SERVICE_CLASS);
             t.traceEnd();
+
+            t.traceBegin("StartWearModeService");
+            mSystemServiceManager.startService(WEAR_MODE_SERVICE_CLASS);
+            t.traceEnd();
+
+            boolean enableWristOrientationService = SystemProperties.getBoolean(
+                    "config.enable_wristorientation", false);
+            if (enableWristOrientationService) {
+                t.traceBegin("StartWristOrientationService");
+                mSystemServiceManager.startService(WRIST_ORIENTATION_SERVICE_CLASS);
+                t.traceEnd();
+            }
         }
 
         if (!mPackageManager.hasSystemFeature(PackageManager.FEATURE_SLICES_DISABLED)) {
@@ -2750,6 +2779,19 @@
             t.traceEnd();
         }
 
+        CommunalProfileInitializer communalProfileInitializer = null;
+        if (UserManager.isCommunalProfileEnabled()) {
+            t.traceBegin("CommunalProfileInitializer.init");
+            communalProfileInitializer =
+                    new CommunalProfileInitializer(mActivityManagerService);
+            communalProfileInitializer.init(t);
+            t.traceEnd();
+        } else {
+            t.traceBegin("CommunalProfileInitializer.removeCommunalProfileIfPresent");
+            CommunalProfileInitializer.removeCommunalProfileIfPresent();
+            t.traceEnd();
+        }
+
         t.traceBegin("StartBootPhaseSystemServicesReady");
         mSystemServiceManager.startBootPhase(t, SystemService.PHASE_SYSTEM_SERVICES_READY);
         t.traceEnd();
@@ -3313,12 +3355,6 @@
 
     }
 
-    private void startAmbientContextService(@NonNull TimingsTraceAndSlog t) {
-        t.traceBegin("StartAmbientContextService");
-        mSystemServiceManager.startService(AmbientContextManagerService.class);
-        t.traceEnd();
-    }
-
     private void startWearableSensingService(@NonNull TimingsTraceAndSlog t) {
         t.traceBegin("startWearableSensingService");
         mSystemServiceManager.startService(WearableSensingManagerService.class);
diff --git a/services/lint-baseline.xml b/services/lint-baseline.xml
new file mode 100644
index 0000000..8489c17
--- /dev/null
+++ b/services/lint-baseline.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.1.0-dev" type="baseline" client="" dependencies="true" name="" variant="all" version="8.1.0-dev">
+
+    <issue
+        id="SimpleManualPermissionEnforcement"
+        message="ISystemConfig permission check should be converted to @EnforcePermission annotation"
+        errorLine1="            mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_CARRIER_APP_INFO,"
+        errorLine2="            ^">
+        <location
+            file="frameworks/base/services/java/com/android/server/SystemConfigService.java"
+            line="46"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="SimpleManualPermissionEnforcement"
+        message="ISystemConfig permission check should be converted to @EnforcePermission annotation"
+        errorLine1="            mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_CARRIER_APP_INFO,"
+        errorLine2="            ^">
+        <location
+            file="frameworks/base/services/java/com/android/server/SystemConfigService.java"
+            line="54"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="SimpleManualPermissionEnforcement"
+        message="ISystemConfig permission check should be converted to @EnforcePermission annotation"
+        errorLine1="            mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_CARRIER_APP_INFO,"
+        errorLine2="            ^">
+        <location
+            file="frameworks/base/services/java/com/android/server/SystemConfigService.java"
+            line="67"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="SimpleManualPermissionEnforcement"
+        message="ISystemConfig permission check should be converted to @EnforcePermission annotation"
+        errorLine1="            mContext.enforceCallingOrSelfPermission(Manifest.permission.GET_RUNTIME_PERMISSIONS,"
+        errorLine2="            ^">
+        <location
+            file="frameworks/base/services/java/com/android/server/SystemConfigService.java"
+            line="76"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="SimpleManualPermissionEnforcement"
+        message="ISystemConfig permission check should be converted to @EnforcePermission annotation"
+        errorLine1="            getContext().enforceCallingOrSelfPermission(Manifest.permission.QUERY_ALL_PACKAGES,"
+        errorLine2="            ^">
+        <location
+            file="frameworks/base/services/java/com/android/server/SystemConfigService.java"
+            line="107"
+            column="13"/>
+    </issue>
+
+</issues>
diff --git a/services/midi/java/com/android/server/midi/MidiService.java b/services/midi/java/com/android/server/midi/MidiService.java
index fe979b6..486ddb4 100644
--- a/services/midi/java/com/android/server/midi/MidiService.java
+++ b/services/midi/java/com/android/server/midi/MidiService.java
@@ -31,6 +31,7 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
+import android.content.res.Resources;
 import android.content.res.XmlResourceParser;
 import android.media.MediaMetrics;
 import android.media.midi.IBluetoothMidiService;
@@ -43,6 +44,7 @@
 import android.media.midi.MidiDeviceService;
 import android.media.midi.MidiDeviceStatus;
 import android.media.midi.MidiManager;
+import android.media.midi.MidiUmpDeviceService;
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.IBinder;
@@ -85,7 +87,7 @@
 //TODO Introduce a single lock object to lock the whole state and avoid the requirement above.
 
 // All users should be able to connect to USB and Bluetooth MIDI devices.
-// All users can create can install an app that provides, a Virtual MIDI Device Service.
+// All users can create can install an app that provides a Virtual MIDI Device Service.
 // Users can not open virtual MIDI devices created by other users.
 // getDevices() surfaces devices that can be opened by that user.
 // openDevice() rejects devices that are cannot be opened by that user.
@@ -577,10 +579,14 @@
                         intent.setComponent(new ComponentName(
                                 MidiManager.BLUETOOTH_MIDI_SERVICE_PACKAGE,
                                 MidiManager.BLUETOOTH_MIDI_SERVICE_CLASS));
-                    } else {
+                    } else if (!isUmpDevice(mDeviceInfo)) {
                         intent = new Intent(MidiDeviceService.SERVICE_INTERFACE);
                         intent.setComponent(
                                 new ComponentName(mServiceInfo.packageName, mServiceInfo.name));
+                    } else {
+                        intent = new Intent(MidiUmpDeviceService.SERVICE_INTERFACE);
+                        intent.setComponent(
+                                new ComponentName(mServiceInfo.packageName, mServiceInfo.name));
                     }
 
                     if (!mContext.bindServiceAsUser(intent, mServiceConnection,
@@ -693,8 +699,8 @@
                             isDeviceDisconnected ? "true" : "false")
                     .set(MediaMetrics.Property.IS_SHARED,
                             !mDeviceInfo.isPrivate() ? "true" : "false")
-                    .set(MediaMetrics.Property.SUPPORTS_MIDI_UMP, mDeviceInfo.getDefaultProtocol()
-                             != MidiDeviceInfo.PROTOCOL_UNKNOWN ? "true" : "false")
+                    .set(MediaMetrics.Property.SUPPORTS_MIDI_UMP,
+                            isUmpDevice(mDeviceInfo) ? "true" : "false")
                     .set(MediaMetrics.Property.USING_ALSA, mDeviceInfo.getProperties().get(
                             MidiDeviceInfo.PROPERTY_ALSA_CARD) != null ? "true" : "false")
                     .set(MediaMetrics.Property.EVENT, "deviceClosed")
@@ -968,19 +974,37 @@
     private void onStartOrUnlockUser(TargetUser user, boolean matchDirectBootUnaware) {
         Log.d(TAG, "onStartOrUnlockUser " + user.getUserIdentifier() + " matchDirectBootUnaware: "
                 + matchDirectBootUnaware);
-        Intent intent = new Intent(MidiDeviceService.SERVICE_INTERFACE);
         int resolveFlags = PackageManager.GET_META_DATA;
         if (matchDirectBootUnaware) {
             resolveFlags |= PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
         }
-        List<ResolveInfo> resolveInfos = mPackageManager.queryIntentServicesAsUser(intent,
-                resolveFlags, user.getUserIdentifier());
-        if (resolveInfos != null) {
-            int count = resolveInfos.size();
-            for (int i = 0; i < count; i++) {
-                ServiceInfo serviceInfo = resolveInfos.get(i).serviceInfo;
-                if (serviceInfo != null) {
-                    addPackageDeviceServer(serviceInfo, user.getUserIdentifier());
+
+        {
+            Intent intent = new Intent(MidiDeviceService.SERVICE_INTERFACE);
+            List<ResolveInfo> resolveInfos = mPackageManager.queryIntentServicesAsUser(intent,
+                    resolveFlags, user.getUserIdentifier());
+            if (resolveInfos != null) {
+                int count = resolveInfos.size();
+                for (int i = 0; i < count; i++) {
+                    ServiceInfo serviceInfo = resolveInfos.get(i).serviceInfo;
+                    if (serviceInfo != null) {
+                        addLegacyPackageDeviceServer(serviceInfo, user.getUserIdentifier());
+                    }
+                }
+            }
+        }
+
+        {
+            Intent intent = new Intent(MidiUmpDeviceService.SERVICE_INTERFACE);
+            List<ResolveInfo> resolveInfos = mPackageManager.queryIntentServicesAsUser(intent,
+                    resolveFlags, user.getUserIdentifier());
+            if (resolveInfos != null) {
+                int count = resolveInfos.size();
+                for (int i = 0; i < count; i++) {
+                    ServiceInfo serviceInfo = resolveInfos.get(i).serviceInfo;
+                    if (serviceInfo != null) {
+                        addUmpPackageDeviceServer(serviceInfo, user.getUserIdentifier());
+                    }
                 }
             }
         }
@@ -1054,13 +1078,11 @@
                 if (device.isUidAllowed(uid) && device.isUserIdAllowed(userId)) {
                     // UMP devices have protocols that are not PROTOCOL_UNKNOWN
                     if (transport == MidiManager.TRANSPORT_UNIVERSAL_MIDI_PACKETS) {
-                        if (device.getDeviceInfo().getDefaultProtocol()
-                                != MidiDeviceInfo.PROTOCOL_UNKNOWN) {
+                        if (isUmpDevice(device.getDeviceInfo())) {
                             deviceInfos.add(device.getDeviceInfo());
                         }
                     } else if (transport == MidiManager.TRANSPORT_MIDI_BYTE_STREAM) {
-                        if (device.getDeviceInfo().getDefaultProtocol()
-                                == MidiDeviceInfo.PROTOCOL_UNKNOWN) {
+                        if (!isUmpDevice(device.getDeviceInfo())) {
                             deviceInfos.add(device.getDeviceInfo());
                         }
                     }
@@ -1361,14 +1383,15 @@
         ServiceInfo[] services = info.services;
         if (services == null) return;
         for (int i = 0; i < services.length; i++) {
-            addPackageDeviceServer(services[i], userId);
+            addLegacyPackageDeviceServer(services[i], userId);
+            addUmpPackageDeviceServer(services[i], userId);
         }
     }
 
     private static final String[] EMPTY_STRING_ARRAY = new String[0];
 
-    private void addPackageDeviceServer(ServiceInfo serviceInfo, int userId) {
-        Log.d(TAG, "addPackageDeviceServer()" + userId);
+    private void addLegacyPackageDeviceServer(ServiceInfo serviceInfo, int userId) {
+        Log.d(TAG, "addLegacyPackageDeviceServer()" + userId);
         XmlResourceParser parser = null;
 
         try {
@@ -1504,6 +1527,128 @@
         }
     }
 
+    @RequiresPermission(Manifest.permission.INTERACT_ACROSS_USERS)
+    private void addUmpPackageDeviceServer(ServiceInfo serviceInfo, int userId) {
+        Log.d(TAG, "addUmpPackageDeviceServer()" + userId);
+        XmlResourceParser parser = null;
+
+        try {
+            ComponentName componentName = new ComponentName(serviceInfo.packageName,
+                    serviceInfo.name);
+            int resId = mPackageManager.getProperty(MidiUmpDeviceService.SERVICE_INTERFACE,
+                    componentName).getResourceId();
+            Resources resources = mPackageManager.getResourcesForApplication(
+                    serviceInfo.packageName);
+            parser = resources.getXml(resId);
+            if (parser == null) return;
+
+            // ignore virtual device servers that do not require the correct permission
+            if (!android.Manifest.permission.BIND_MIDI_DEVICE_SERVICE.equals(
+                    serviceInfo.permission)) {
+                Log.w(TAG, "Skipping MIDI device service " + serviceInfo.packageName
+                        + ": it does not require the permission "
+                        + android.Manifest.permission.BIND_MIDI_DEVICE_SERVICE);
+                return;
+            }
+
+            Bundle properties = null;
+            int numPorts = 0;
+            boolean isPrivate = false;
+            ArrayList<String> portNames = new ArrayList<String>();
+
+            while (true) {
+                int eventType = parser.next();
+                if (eventType == XmlPullParser.END_DOCUMENT) {
+                    break;
+                } else if (eventType == XmlPullParser.START_TAG) {
+                    String tagName = parser.getName();
+                    if ("device".equals(tagName)) {
+                        if (properties != null) {
+                            Log.w(TAG, "nested <device> elements in metadata for "
+                                    + serviceInfo.packageName);
+                            continue;
+                        }
+                        properties = new Bundle();
+                        properties.putParcelable(MidiDeviceInfo.PROPERTY_SERVICE_INFO, serviceInfo);
+                        numPorts = 0;
+                        isPrivate = false;
+
+                        int count = parser.getAttributeCount();
+                        for (int i = 0; i < count; i++) {
+                            String name = parser.getAttributeName(i);
+                            String value = parser.getAttributeValue(i);
+                            if ("private".equals(name)) {
+                                isPrivate = "true".equals(value);
+                            } else {
+                                properties.putString(name, value);
+                            }
+                        }
+                    } else if ("port".equals(tagName)) {
+                        if (properties == null) {
+                            Log.w(TAG, "<port> outside of <device> in metadata for "
+                                    + serviceInfo.packageName);
+                            continue;
+                        }
+                        numPorts++;
+
+                        String portName = null;
+                        int count = parser.getAttributeCount();
+                        for (int i = 0; i < count; i++) {
+                            String name = parser.getAttributeName(i);
+                            String value = parser.getAttributeValue(i);
+                            if ("name".equals(name)) {
+                                portName = value;
+                                break;
+                            }
+                        }
+                        portNames.add(portName);
+                    }
+                } else if (eventType == XmlPullParser.END_TAG) {
+                    String tagName = parser.getName();
+                    if ("device".equals(tagName)) {
+                        if (properties != null) {
+                            if (numPorts == 0) {
+                                Log.w(TAG, "<device> with no ports in metadata for "
+                                        + serviceInfo.packageName);
+                                continue;
+                            }
+
+                            int uid;
+                            try {
+                                ApplicationInfo appInfo = mPackageManager.getApplicationInfoAsUser(
+                                        serviceInfo.packageName, 0, userId);
+                                uid = appInfo.uid;
+                            } catch (PackageManager.NameNotFoundException e) {
+                                Log.e(TAG, "could not fetch ApplicationInfo for "
+                                        + serviceInfo.packageName);
+                                continue;
+                            }
+
+                            synchronized (mDevicesByInfo) {
+                                addDeviceLocked(MidiDeviceInfo.TYPE_VIRTUAL,
+                                        numPorts, numPorts,
+                                        portNames.toArray(EMPTY_STRING_ARRAY),
+                                        portNames.toArray(EMPTY_STRING_ARRAY),
+                                        properties, null, serviceInfo, isPrivate, uid,
+                                        MidiDeviceInfo.PROTOCOL_UMP_MIDI_2_0, userId);
+                            }
+                            // setting properties to null signals that we are no longer
+                            // processing a <device>
+                            properties = null;
+                            portNames.clear();
+                        }
+                    }
+                }
+            }
+        } catch (PackageManager.NameNotFoundException e) {
+                // No such property
+        } catch (Exception e) {
+            Log.w(TAG, "Unable to load component info " + serviceInfo.toString(), e);
+        } finally {
+            if (parser != null) parser.close();
+        }
+    }
+
     private void removePackageDeviceServers(String packageName, int userId) {
         synchronized (mDevicesByInfo) {
             Iterator<Device> iterator = mDevicesByInfo.values().iterator();
@@ -1646,4 +1791,8 @@
     private int getCallingUserId() {
         return UserHandle.getUserId(Binder.getCallingUid());
     }
+
+    private boolean isUmpDevice(MidiDeviceInfo deviceInfo) {
+        return deviceInfo.getDefaultProtocol() != MidiDeviceInfo.PROTOCOL_UNKNOWN;
+    }
 }
diff --git a/services/people/java/com/android/server/people/PeopleService.java b/services/people/java/com/android/server/people/PeopleService.java
index 292320e..885ed35 100644
--- a/services/people/java/com/android/server/people/PeopleService.java
+++ b/services/people/java/com/android/server/people/PeopleService.java
@@ -63,9 +63,8 @@
 
     private static final String TAG = "PeopleService";
 
-    private DataManager mDataManager;
-    @VisibleForTesting
-    ConversationListenerHelper mConversationListenerHelper;
+    private DataManager mLazyDataManager;
+    private ConversationListenerHelper mLazyConversationListenerHelper;
 
     private PackageManagerInternal mPackageManagerInternal;
 
@@ -76,17 +75,30 @@
      */
     public PeopleService(Context context) {
         super(context);
-
-        mDataManager = new DataManager(context);
-        mConversationListenerHelper = new ConversationListenerHelper();
-        mDataManager.addConversationsListener(mConversationListenerHelper);
     }
 
-    @Override
-    public void onBootPhase(int phase) {
-        if (phase == PHASE_SYSTEM_SERVICES_READY) {
-            mDataManager.initialize();
+    @VisibleForTesting
+    ConversationListenerHelper getConversationListenerHelper() {
+        if (mLazyConversationListenerHelper == null) {
+            initLazyStuff();
         }
+        return mLazyConversationListenerHelper;
+    }
+
+    private synchronized void initLazyStuff() {
+        if (mLazyDataManager == null) {
+            mLazyDataManager = new DataManager(getContext());
+            mLazyDataManager.initialize();
+            mLazyConversationListenerHelper = new ConversationListenerHelper();
+            mLazyDataManager.addConversationsListener(mLazyConversationListenerHelper);
+        }
+    }
+
+    private DataManager getDataManager() {
+        if (mLazyDataManager == null) {
+            initLazyStuff();
+        }
+        return mLazyDataManager;
     }
 
     @Override
@@ -105,12 +117,12 @@
 
     @Override
     public void onUserUnlocked(@NonNull TargetUser user) {
-        mDataManager.onUserUnlocked(user.getUserIdentifier());
+        getDataManager().onUserUnlocked(user.getUserIdentifier());
     }
 
     @Override
     public void onUserStopping(@NonNull TargetUser user) {
-        mDataManager.onUserStopping(user.getUserIdentifier());
+        getDataManager().onUserStopping(user.getUserIdentifier());
     }
 
     /**
@@ -171,28 +183,28 @@
         public ConversationChannel getConversation(
                 String packageName, int userId, String shortcutId) {
             enforceSystemRootOrSystemUI(getContext(), "get conversation");
-            return mDataManager.getConversation(packageName, userId, shortcutId);
+            return getDataManager().getConversation(packageName, userId, shortcutId);
         }
 
         @Override
         public ParceledListSlice<ConversationChannel> getRecentConversations() {
             enforceSystemRootOrSystemUI(getContext(), "get recent conversations");
             return new ParceledListSlice<>(
-                    mDataManager.getRecentConversations(
+                    getDataManager().getRecentConversations(
                             Binder.getCallingUserHandle().getIdentifier()));
         }
 
         @Override
         public void removeRecentConversation(String packageName, int userId, String shortcutId) {
             enforceSystemOrRoot("remove a recent conversation");
-            mDataManager.removeRecentConversation(packageName, userId, shortcutId,
+            getDataManager().removeRecentConversation(packageName, userId, shortcutId,
                     Binder.getCallingUserHandle().getIdentifier());
         }
 
         @Override
         public void removeAllRecentConversations() {
             enforceSystemOrRoot("remove all recent conversations");
-            mDataManager.removeAllRecentConversations(
+            getDataManager().removeAllRecentConversations(
                     Binder.getCallingUserHandle().getIdentifier());
         }
 
@@ -200,7 +212,7 @@
         public boolean isConversation(String packageName, int userId, String shortcutId) {
             enforceHasReadPeopleDataPermission();
             handleIncomingUser(userId);
-            return mDataManager.isConversation(packageName, userId, shortcutId);
+            return getDataManager().isConversation(packageName, userId, shortcutId);
         }
 
         private void enforceHasReadPeopleDataPermission() throws SecurityException {
@@ -213,7 +225,7 @@
         @Override
         public long getLastInteraction(String packageName, int userId, String shortcutId) {
             enforceSystemRootOrSystemUI(getContext(), "get last interaction");
-            return mDataManager.getLastInteraction(packageName, userId, shortcutId);
+            return getDataManager().getLastInteraction(packageName, userId, shortcutId);
         }
 
         @Override
@@ -224,7 +236,7 @@
             if (status.getStartTimeMillis() > System.currentTimeMillis()) {
                 throw new IllegalArgumentException("Start time must be in the past");
             }
-            mDataManager.addOrUpdateStatus(packageName, userId, conversationId, status);
+            getDataManager().addOrUpdateStatus(packageName, userId, conversationId, status);
         }
 
         @Override
@@ -232,14 +244,14 @@
                 String statusId) {
             handleIncomingUser(userId);
             checkCallerIsSameApp(packageName);
-            mDataManager.clearStatus(packageName, userId, conversationId, statusId);
+            getDataManager().clearStatus(packageName, userId, conversationId, statusId);
         }
 
         @Override
         public void clearStatuses(String packageName, int userId, String conversationId) {
             handleIncomingUser(userId);
             checkCallerIsSameApp(packageName);
-            mDataManager.clearStatuses(packageName, userId, conversationId);
+            getDataManager().clearStatuses(packageName, userId, conversationId);
         }
 
         @Override
@@ -250,21 +262,21 @@
                 checkCallerIsSameApp(packageName);
             }
             return new ParceledListSlice<>(
-                    mDataManager.getStatuses(packageName, userId, conversationId));
+                    getDataManager().getStatuses(packageName, userId, conversationId));
         }
 
         @Override
         public void registerConversationListener(
                 String packageName, int userId, String shortcutId, IConversationListener listener) {
             enforceSystemRootOrSystemUI(getContext(), "register conversation listener");
-            mConversationListenerHelper.addConversationListener(
+            getConversationListenerHelper().addConversationListener(
                     new ListenerKey(packageName, userId, shortcutId), listener);
         }
 
         @Override
         public void unregisterConversationListener(IConversationListener listener) {
             enforceSystemRootOrSystemUI(getContext(), "unregister conversation listener");
-            mConversationListenerHelper.removeConversationListener(listener);
+            getConversationListenerHelper().removeConversationListener(listener);
         }
     };
 
@@ -393,7 +405,7 @@
         public void onCreatePredictionSession(AppPredictionContext appPredictionContext,
                 AppPredictionSessionId sessionId) {
             mSessions.put(sessionId,
-                    new SessionInfo(appPredictionContext, mDataManager, sessionId.getUserId(),
+                    new SessionInfo(appPredictionContext, getDataManager(), sessionId.getUserId(),
                             getContext()));
         }
 
@@ -448,18 +460,18 @@
 
         @Override
         public void pruneDataForUser(@UserIdInt int userId, @NonNull CancellationSignal signal) {
-            mDataManager.pruneDataForUser(userId, signal);
+            getDataManager().pruneDataForUser(userId, signal);
         }
 
         @Nullable
         @Override
         public byte[] getBackupPayload(@UserIdInt int userId) {
-            return mDataManager.getBackupPayload(userId);
+            return getDataManager().getBackupPayload(userId);
         }
 
         @Override
         public void restore(@UserIdInt int userId, @NonNull byte[] payload) {
-            mDataManager.restore(userId, payload);
+            getDataManager().restore(userId, payload);
         }
 
         @VisibleForTesting
diff --git a/services/permission/OWNERS b/services/permission/OWNERS
index 6c6c9fc..e464038 100644
--- a/services/permission/OWNERS
+++ b/services/permission/OWNERS
@@ -1,4 +1,5 @@
-ashfall@google.com
+#Bug component: 137825
+
 joecastro@google.com
 ntmyren@google.com
 zhanghai@google.com
diff --git a/services/permission/TEST_MAPPING b/services/permission/TEST_MAPPING
new file mode 100644
index 0000000..b2dcf37
--- /dev/null
+++ b/services/permission/TEST_MAPPING
@@ -0,0 +1,100 @@
+{
+    "presubmit": [
+        {
+            "name": "CtsPermissionTestCases",
+            "options": [
+                {
+                    "exclude-annotation": "android.platform.test.annotations.FlakyTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.BackgroundPermissionsTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.SplitPermissionTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.PermissionFlagsTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.SharedUidPermissionsTest"
+                }
+            ]
+        },
+        {
+            "name": "CtsAppSecurityHostTestCases",
+            "options": [
+                {
+                    "include-filter": "android.appsecurity.cts.AppSecurityTests#rebootWithDuplicatePermission"
+                }
+            ]
+        },
+        {
+            "name": "CtsPermissionPolicyTestCases",
+            "options": [
+                {
+                    "exclude-annotation": "android.platform.test.annotations.FlakyTest"
+                },
+                {
+                    "include-filter": "android.permissionpolicy.cts.RestrictedPermissionsTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.PermissionMaxSdkVersionTest"
+                }
+            ]
+        },
+        {
+            "name": "CtsStatsdHostTestCases",
+            "options": [
+                {
+                    "include-filter": "android.cts.statsd.atom.UidAtomTests#testDangerousPermissionState"
+                }
+            ]
+        }
+    ],
+    "postsubmit": [
+        {
+            "name": "CtsAppSecurityHostTestCases",
+            "options": [
+                {
+                    "include-filter": "android.appsecurity.cts.AppSecurityTests#testPermissionDiffCert"
+                }
+            ]
+        },
+        {
+            "name": "CtsPermissionTestCases",
+            "options": [
+                {
+                    "include-filter": "android.permission.cts.PermissionUpdateListenerTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.BackgroundPermissionsTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.SplitPermissionTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.PermissionFlagsTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.SharedUidPermissionsTest"
+                }
+            ]
+        },
+        {
+            "name": "CtsPermissionPolicyTestCases",
+            "options": [
+                {
+                    "include-filter": "android.permissionpolicy.cts.RestrictedPermissionsTest"
+                },
+                {
+                    "include-filter": "android.permission.cts.PermissionMaxSdkVersionTest"
+                }
+            ]
+        }
+    ],
+    "imports": [
+        {
+            "path": "vendor/xts/gts-tests/tests/permission"
+        }
+    ]
+}
diff --git a/services/permission/java/com/android/server/permission/access/AccessCheckingService.kt b/services/permission/java/com/android/server/permission/access/AccessCheckingService.kt
index e416718..c1d137f 100644
--- a/services/permission/java/com/android/server/permission/access/AccessCheckingService.kt
+++ b/services/permission/java/com/android/server/permission/access/AccessCheckingService.kt
@@ -16,6 +16,7 @@
 
 package com.android.server.permission.access
 
+import android.app.admin.DevicePolicyManagerInternal
 import android.content.Context
 import android.content.pm.PackageManager
 import android.content.pm.PackageManagerInternal
@@ -29,6 +30,7 @@
 import com.android.server.appop.AppOpsCheckingServiceInterface
 import com.android.server.permission.access.appop.AppOpService
 import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
 import com.android.server.permission.access.permission.PermissionService
 import com.android.server.pm.KnownPackages
 import com.android.server.pm.PackageManagerLocal
@@ -72,9 +74,9 @@
         userManagerService = UserManagerService.getInstance()
         systemConfig = SystemConfig.getInstance()
 
-        val userIds = IntSet(userManagerService.userIdsIncludingPreCreated)
+        val userIds = MutableIntSet(userManagerService.userIdsIncludingPreCreated)
         val (packageStates, disabledSystemPackageStates) = packageManagerLocal.allPackageStates
-        val knownPackages = packageManagerInternal.knownPackages
+        val knownPackages = packageManagerInternal.getKnownPackages(packageStates)
         val isLeanback = systemConfig.isLeanback
         val configPermissions = systemConfig.permissions
         val privilegedPermissionAllowlistPackages =
@@ -82,7 +84,7 @@
         val permissionAllowlist = systemConfig.permissionAllowlist
         val implicitToSourcePermissions = systemConfig.implicitToSourcePermissions
 
-        val state = AccessState()
+        val state = MutableAccessState()
         policy.initialize(
             state, userIds, packageStates, disabledSystemPackageStates, knownPackages, isLeanback,
             configPermissions, privilegedPermissionAllowlistPackages, permissionAllowlist,
@@ -104,7 +106,7 @@
         get() = PackageManager.FEATURE_LEANBACK in availableFeatures
 
     private val SystemConfig.privilegedPermissionAllowlistPackages: IndexedListSet<String>
-        get() = IndexedListSet<String>().apply {
+        get() = MutableIndexedListSet<String>().apply {
             this += "android"
             if (PackageManager.FEATURE_AUTOMOTIVE in availableFeatures) {
                 // Note that SystemProperties.get(String, String) forces returning an empty string
@@ -117,25 +119,16 @@
         }
 
     private val SystemConfig.implicitToSourcePermissions: IndexedMap<String, IndexedListSet<String>>
-        get() = IndexedMap<String, IndexedListSet<String>>().apply {
+        @Suppress("UNCHECKED_CAST")
+        get() = MutableIndexedMap<String, MutableIndexedListSet<String>>().apply {
             splitPermissions.forEach { splitPermissionInfo ->
                 val sourcePermissionName = splitPermissionInfo.splitPermission
                 splitPermissionInfo.newPermissions.forEach { implicitPermissionName ->
-                    getOrPut(implicitPermissionName) { IndexedListSet() } += sourcePermissionName
+                    getOrPut(implicitPermissionName) { MutableIndexedListSet() } +=
+                        sourcePermissionName
                 }
             }
-        }
-
-    fun getDecision(subject: AccessUri, `object`: AccessUri): Int =
-        getState {
-            with(policy) { getDecision(subject, `object`) }
-        }
-
-    fun setDecision(subject: AccessUri, `object`: AccessUri, decision: Int) {
-        mutateState {
-            with(policy) { setDecision(subject, `object`, decision) }
-        }
-    }
+        } as IndexedMap<String, IndexedListSet<String>>
 
     internal fun onUserAdded(userId: Int) {
         mutateState {
@@ -149,14 +142,18 @@
         }
     }
 
-    internal fun onStorageVolumeMounted(volumeUuid: String?, isSystemUpdated: Boolean) {
+    internal fun onStorageVolumeMounted(
+        volumeUuid: String?,
+        packageNames: List<String>,
+        isSystemUpdated: Boolean
+    ) {
         val (packageStates, disabledSystemPackageStates) = packageManagerLocal.allPackageStates
-        val knownPackages = packageManagerInternal.knownPackages
+        val knownPackages = packageManagerInternal.getKnownPackages(packageStates)
         mutateState {
             with(policy) {
                 onStorageVolumeMounted(
                     packageStates, disabledSystemPackageStates, knownPackages, volumeUuid,
-                    isSystemUpdated
+                    packageNames, isSystemUpdated
                 )
             }
         }
@@ -164,7 +161,7 @@
 
     internal fun onPackageAdded(packageName: String) {
         val (packageStates, disabledSystemPackageStates) = packageManagerLocal.allPackageStates
-        val knownPackages = packageManagerInternal.knownPackages
+        val knownPackages = packageManagerInternal.getKnownPackages(packageStates)
         mutateState {
             with(policy) {
                 onPackageAdded(
@@ -176,7 +173,7 @@
 
     internal fun onPackageRemoved(packageName: String, appId: Int) {
         val (packageStates, disabledSystemPackageStates) = packageManagerLocal.allPackageStates
-        val knownPackages = packageManagerInternal.knownPackages
+        val knownPackages = packageManagerInternal.getKnownPackages(packageStates)
         mutateState {
             with(policy) {
                 onPackageRemoved(
@@ -188,7 +185,7 @@
 
     internal fun onPackageInstalled(packageName: String, userId: Int) {
         val (packageStates, disabledSystemPackageStates) = packageManagerLocal.allPackageStates
-        val knownPackages = packageManagerInternal.knownPackages
+        val knownPackages = packageManagerInternal.getKnownPackages(packageStates)
         mutateState {
             with(policy) {
                 onPackageInstalled(
@@ -200,7 +197,7 @@
 
     internal fun onPackageUninstalled(packageName: String, appId: Int, userId: Int) {
         val (packageStates, disabledSystemPackageStates) = packageManagerLocal.allPackageStates
-        val knownPackages = packageManagerInternal.knownPackages
+        val knownPackages = packageManagerInternal.getKnownPackages(packageStates)
         mutateState {
             with(policy) {
                 onPackageUninstalled(
@@ -212,8 +209,12 @@
     }
 
     internal fun onSystemReady() {
+        val (packageStates, disabledSystemPackageStates) = packageManagerLocal.allPackageStates
+        val knownPackages = packageManagerInternal.getKnownPackages(packageStates)
         mutateState {
-            with(policy) { onSystemReady() }
+            with(policy) {
+                onSystemReady(packageStates, disabledSystemPackageStates, knownPackages)
+            }
         }
     }
 
@@ -221,42 +222,48 @@
         Pair<Map<String, PackageState>, Map<String, PackageState>>
         get() = withUnfilteredSnapshot().use { it.packageStates to it.disabledSystemPackageStates }
 
-    private val PackageManagerInternal.knownPackages: IntMap<Array<String>>
-        get() = IntMap<Array<String>>().apply {
-            this[KnownPackages.PACKAGE_INSTALLER] = getKnownPackageNames(
-                KnownPackages.PACKAGE_INSTALLER, UserHandle.USER_SYSTEM
-            )
-            this[KnownPackages.PACKAGE_PERMISSION_CONTROLLER] = getKnownPackageNames(
-                KnownPackages.PACKAGE_PERMISSION_CONTROLLER, UserHandle.USER_SYSTEM
-            )
-            this[KnownPackages.PACKAGE_VERIFIER] = getKnownPackageNames(
-                KnownPackages.PACKAGE_VERIFIER, UserHandle.USER_SYSTEM
-            )
-            this[KnownPackages.PACKAGE_SETUP_WIZARD] = getKnownPackageNames(
-                KnownPackages.PACKAGE_SETUP_WIZARD, UserHandle.USER_SYSTEM
-            )
-            this[KnownPackages.PACKAGE_SYSTEM_TEXT_CLASSIFIER] = getKnownPackageNames(
-                KnownPackages.PACKAGE_SYSTEM_TEXT_CLASSIFIER, UserHandle.USER_SYSTEM
-            )
-            this[KnownPackages.PACKAGE_CONFIGURATOR] = getKnownPackageNames(
-                KnownPackages.PACKAGE_CONFIGURATOR, UserHandle.USER_SYSTEM
-            )
-            this[KnownPackages.PACKAGE_INCIDENT_REPORT_APPROVER] = getKnownPackageNames(
-                KnownPackages.PACKAGE_INCIDENT_REPORT_APPROVER, UserHandle.USER_SYSTEM
-            )
-            this[KnownPackages.PACKAGE_APP_PREDICTOR] = getKnownPackageNames(
-                KnownPackages.PACKAGE_APP_PREDICTOR, UserHandle.USER_SYSTEM
-            )
-            this[KnownPackages.PACKAGE_COMPANION] = getKnownPackageNames(
-                KnownPackages.PACKAGE_COMPANION, UserHandle.USER_SYSTEM
-            )
-            this[KnownPackages.PACKAGE_RETAIL_DEMO] = getKnownPackageNames(
-                KnownPackages.PACKAGE_RETAIL_DEMO, UserHandle.USER_SYSTEM
-            )
-            this[KnownPackages.PACKAGE_RECENTS] = getKnownPackageNames(
-                KnownPackages.PACKAGE_RECENTS, UserHandle.USER_SYSTEM
-            )
-        }
+    private fun PackageManagerInternal.getKnownPackages(
+        packageStates: Map<String, PackageState>
+    ): IntMap<Array<String>> = MutableIntMap<Array<String>>().apply {
+        this[KnownPackages.PACKAGE_INSTALLER] =
+            getKnownPackageNames(KnownPackages.PACKAGE_INSTALLER, UserHandle.USER_SYSTEM)
+        this[KnownPackages.PACKAGE_PERMISSION_CONTROLLER] = getKnownPackageNames(
+            KnownPackages.PACKAGE_PERMISSION_CONTROLLER, UserHandle.USER_SYSTEM
+        )
+        this[KnownPackages.PACKAGE_VERIFIER] =
+            getKnownPackageNames(KnownPackages.PACKAGE_VERIFIER, UserHandle.USER_SYSTEM)
+        this[KnownPackages.PACKAGE_SETUP_WIZARD] =
+            getKnownPackageNames(KnownPackages.PACKAGE_SETUP_WIZARD, UserHandle.USER_SYSTEM)
+        this[KnownPackages.PACKAGE_SYSTEM_TEXT_CLASSIFIER] = getKnownPackageNames(
+            KnownPackages.PACKAGE_SYSTEM_TEXT_CLASSIFIER, UserHandle.USER_SYSTEM
+        )
+        this[KnownPackages.PACKAGE_CONFIGURATOR] =
+            getKnownPackageNames(KnownPackages.PACKAGE_CONFIGURATOR, UserHandle.USER_SYSTEM)
+        this[KnownPackages.PACKAGE_INCIDENT_REPORT_APPROVER] = getKnownPackageNames(
+            KnownPackages.PACKAGE_INCIDENT_REPORT_APPROVER, UserHandle.USER_SYSTEM
+        )
+        this[KnownPackages.PACKAGE_APP_PREDICTOR] =
+            getKnownPackageNames(KnownPackages.PACKAGE_APP_PREDICTOR, UserHandle.USER_SYSTEM)
+        this[KnownPackages.PACKAGE_COMPANION] =
+            getKnownPackageNames(KnownPackages.PACKAGE_COMPANION, UserHandle.USER_SYSTEM)
+        this[KnownPackages.PACKAGE_RETAIL_DEMO] =
+            getKnownPackageNames(KnownPackages.PACKAGE_RETAIL_DEMO, UserHandle.USER_SYSTEM)
+                .filter { isProfileOwner(it, packageStates) }.toTypedArray()
+        this[KnownPackages.PACKAGE_RECENTS] =
+            getKnownPackageNames(KnownPackages.PACKAGE_RECENTS, UserHandle.USER_SYSTEM)
+    }
+
+    private fun isProfileOwner(
+        packageName: String,
+        packageStates: Map<String, PackageState>
+    ): Boolean {
+        val appId = packageStates[packageName]?.appId ?: return false
+        val devicePolicyManagerInternal =
+            LocalServices.getService(DevicePolicyManagerInternal::class.java) ?: return false
+        // TODO(b/169395065): Figure out if this flow makes sense in Device Owner mode.
+        return devicePolicyManagerInternal.isActiveProfileOwner(appId) ||
+            devicePolicyManagerInternal.isActiveDeviceOwner(appId)
+    }
 
     @OptIn(ExperimentalContracts::class)
     internal inline fun <T> getState(action: GetStateScope.() -> T): T {
@@ -269,7 +276,7 @@
         contract { callsInPlace(action, InvocationKind.EXACTLY_ONCE) }
         synchronized(stateLock) {
             val oldState = state
-            val newState = oldState.copy()
+            val newState = oldState.toMutable()
             MutateStateScope(oldState, newState).action()
             persistence.write(newState)
             state = newState
diff --git a/services/permission/java/com/android/server/permission/access/AccessPersistence.kt b/services/permission/java/com/android/server/permission/access/AccessPersistence.kt
index a25b720..a3f65af 100644
--- a/services/permission/java/com/android/server/permission/access/AccessPersistence.kt
+++ b/services/permission/java/com/android/server/permission/access/AccessPersistence.kt
@@ -22,17 +22,19 @@
 import android.os.SystemClock
 import android.os.UserHandle
 import android.util.AtomicFile
-import android.util.Log
+import android.util.Slog
+import android.util.SparseLongArray
 import com.android.internal.annotations.GuardedBy
 import com.android.internal.os.BackgroundThread
 import com.android.modules.utils.BinaryXmlPullParser
 import com.android.modules.utils.BinaryXmlSerializer
 import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
 import com.android.server.permission.access.util.PermissionApex
 import com.android.server.permission.access.util.parseBinaryXml
-import com.android.server.permission.access.util.read
+import com.android.server.permission.access.util.readWithReserveCopy
 import com.android.server.permission.access.util.serializeBinaryXml
-import com.android.server.permission.access.util.writeInlined
+import com.android.server.permission.access.util.writeWithReserveCopy
 import java.io.File
 import java.io.FileNotFoundException
 
@@ -41,9 +43,9 @@
 ) {
     private val scheduleLock = Any()
     @GuardedBy("scheduleLock")
-    private val pendingMutationTimesMillis = IntLongMap()
+    private val pendingMutationTimesMillis = SparseLongArray()
     @GuardedBy("scheduleLock")
-    private val pendingStates = IntMap<AccessState>()
+    private val pendingStates = MutableIntMap<AccessState>()
     @GuardedBy("scheduleLock")
     private lateinit var writeHandler: WriteHandler
 
@@ -53,36 +55,54 @@
         writeHandler = WriteHandler(BackgroundThread.getHandler().looper)
     }
 
-    fun read(state: AccessState) {
+    /**
+     * Reads the state either from the disk or migrate legacy data when the data files are missing.
+     */
+    fun read(state: MutableAccessState) {
         readSystemState(state)
-        state.systemState.userIds.forEachIndexed { _, userId ->
+        state.externalState.userIds.forEachIndexed { _, userId ->
             readUserState(state, userId)
         }
     }
 
-    private fun readSystemState(state: AccessState) {
-        systemFile.parse {
+    private fun readSystemState(state: MutableAccessState) {
+        val fileExists = systemFile.parse {
             // This is the canonical way to call an extension function in a different class.
             // TODO(b/259469752): Use context receiver for this when it becomes stable.
             with(policy) { parseSystemState(state) }
         }
-    }
 
-    private fun readUserState(state: AccessState, userId: Int) {
-        getUserFile(userId).parse {
-            with(policy) { parseUserState(state, userId) }
+        if (!fileExists) {
+            policy.migrateSystemState(state)
+            state.systemState.write(state, UserHandle.USER_ALL)
         }
     }
 
-    private inline fun File.parse(block: BinaryXmlPullParser.() -> Unit) {
+    private fun readUserState(state: MutableAccessState, userId: Int) {
+        val fileExists = getUserFile(userId).parse {
+            with(policy) { parseUserState(state, userId) }
+        }
+
+        if (!fileExists) {
+            policy.migrateUserState(state, userId)
+            state.userStates[userId]!!.write(state, userId)
+        }
+    }
+
+    /**
+     * @return {@code true} if the file is successfully read from the disk; {@code false} if
+     * the file doesn't exist yet.
+     */
+    private inline fun File.parse(block: BinaryXmlPullParser.() -> Unit): Boolean =
         try {
-            AtomicFile(this).read { it.parseBinaryXml(block) }
+            AtomicFile(this).readWithReserveCopy { it.parseBinaryXml(block) }
+            true
         } catch (e: FileNotFoundException) {
-            Log.i(LOG_TAG, "$this not found")
+            Slog.i(LOG_TAG, "$this not found")
+            false
         } catch (e: Exception) {
             throw IllegalStateException("Failed to read $this", e)
         }
-    }
 
     fun write(state: AccessState) {
         state.systemState.write(state, UserHandle.USER_ALL)
@@ -94,11 +114,7 @@
     private fun WritableState.write(state: AccessState, userId: Int) {
         when (val writeMode = writeMode) {
             WriteMode.NONE -> {}
-            WriteMode.SYNC -> {
-                synchronized(scheduleLock) { pendingStates[userId] = state }
-                writePendingState(userId)
-            }
-            WriteMode.ASYNC -> {
+            WriteMode.ASYNCHRONOUS -> {
                 synchronized(scheduleLock) {
                     writeHandler.removeMessages(userId)
                     pendingStates[userId] = state
@@ -117,6 +133,10 @@
                     }
                 }
             }
+            WriteMode.SYNCHRONOUS -> {
+                synchronized(scheduleLock) { pendingStates[userId] = state }
+                writePendingState(userId)
+            }
             else -> error(writeMode)
         }
     }
@@ -126,7 +146,7 @@
             val state: AccessState?
             synchronized(scheduleLock) {
                 pendingMutationTimesMillis -= userId
-                state = pendingStates.removeReturnOld(userId)
+                state = pendingStates.remove(userId)
                 writeHandler.removeMessages(userId)
             }
             if (state == null) {
@@ -154,9 +174,9 @@
 
     private inline fun File.serialize(block: BinaryXmlSerializer.() -> Unit) {
         try {
-            AtomicFile(this).writeInlined { it.serializeBinaryXml(block) }
+            AtomicFile(this).writeWithReserveCopy { it.serializeBinaryXml(block) }
         } catch (e: Exception) {
-            Log.e(LOG_TAG, "Failed to serialize $this", e)
+            Slog.e(LOG_TAG, "Failed to serialize $this", e)
         }
     }
 
@@ -176,16 +196,6 @@
     }
 
     private inner class WriteHandler(looper: Looper) : Handler(looper) {
-        fun writeAtTime(userId: Int, timeMillis: Long) {
-            removeMessages(userId)
-            val message = obtainMessage(userId)
-            sendMessageDelayed(message, timeMillis)
-        }
-
-        fun cancelWrite(userId: Int) {
-            removeMessages(userId)
-        }
-
         override fun handleMessage(message: Message) {
             val userId = message.what
             writePendingState(userId)
diff --git a/services/permission/java/com/android/server/permission/access/AccessPolicy.kt b/services/permission/java/com/android/server/permission/access/AccessPolicy.kt
index 07a5e72..17474fb 100644
--- a/services/permission/java/com/android/server/permission/access/AccessPolicy.kt
+++ b/services/permission/java/com/android/server/permission/access/AccessPolicy.kt
@@ -16,15 +16,21 @@
 
 package com.android.server.permission.access
 
-import android.util.Log
+import android.util.Slog
 import com.android.modules.utils.BinaryXmlPullParser
 import com.android.modules.utils.BinaryXmlSerializer
 import com.android.server.SystemConfig
+import com.android.server.permission.access.appop.AppIdAppOpPolicy
 import com.android.server.permission.access.appop.PackageAppOpPolicy
-import com.android.server.permission.access.appop.UidAppOpPolicy
 import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
-import com.android.server.permission.access.permission.UidPermissionPolicy
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.immutable.IndexedMap
+import com.android.server.permission.access.permission.AppIdPermissionPolicy
+import com.android.server.permission.access.util.attributeInt
+import com.android.server.permission.access.util.attributeInterned
 import com.android.server.permission.access.util.forEachTag
+import com.android.server.permission.access.util.getAttributeIntOrThrow
+import com.android.server.permission.access.util.getAttributeValueOrThrow
 import com.android.server.permission.access.util.tag
 import com.android.server.permission.access.util.tagName
 import com.android.server.pm.permission.PermissionAllowlist
@@ -33,14 +39,16 @@
 class AccessPolicy private constructor(
     private val schemePolicies: IndexedMap<String, IndexedMap<String, SchemePolicy>>
 ) {
+    @Suppress("UNCHECKED_CAST")
     constructor() : this(
-        IndexedMap<String, IndexedMap<String, SchemePolicy>>().apply {
-            fun addPolicy(policy: SchemePolicy) =
-                getOrPut(policy.subjectScheme) { IndexedMap() }.put(policy.objectScheme, policy)
-            addPolicy(UidPermissionPolicy())
-            addPolicy(UidAppOpPolicy())
+        MutableIndexedMap<String, MutableIndexedMap<String, SchemePolicy>>().apply {
+            fun addPolicy(policy: SchemePolicy) {
+                getOrPut(policy.subjectScheme) { MutableIndexedMap() }[policy.objectScheme] = policy
+            }
+            addPolicy(AppIdPermissionPolicy())
+            addPolicy(AppIdAppOpPolicy())
             addPolicy(PackageAppOpPolicy())
-        }
+        } as IndexedMap<String, IndexedMap<String, SchemePolicy>>
     )
 
     fun getSchemePolicy(subjectScheme: String, objectScheme: String): SchemePolicy =
@@ -48,15 +56,8 @@
             "Scheme policy for $subjectScheme and $objectScheme does not exist"
         }
 
-    fun GetStateScope.getDecision(subject: AccessUri, `object`: AccessUri): Int =
-        with(getSchemePolicy(subject, `object`)){ getDecision(subject, `object`) }
-
-    fun MutateStateScope.setDecision(subject: AccessUri, `object`: AccessUri, decision: Int) {
-        with(getSchemePolicy(subject, `object`)) { setDecision(subject, `object`, decision) }
-    }
-
     fun initialize(
-        state: AccessState,
+        state: MutableAccessState,
         userIds: IntSet,
         packageStates: Map<String, PackageState>,
         disabledSystemPackageStates: Map<String, PackageState>,
@@ -67,25 +68,24 @@
         permissionAllowlist: PermissionAllowlist,
         implicitToSourcePermissions: IndexedMap<String, IndexedListSet<String>>
     ) {
-        state.systemState.apply {
-            this.userIds += userIds
-            this.packageStates = packageStates
-            this.disabledSystemPackageStates = disabledSystemPackageStates
+        state.mutateExternalState().apply {
+            mutateUserIds() += userIds
+            setPackageStates(packageStates)
+            setDisabledSystemPackageStates(disabledSystemPackageStates)
             packageStates.forEach { (_, packageState) ->
-                appIds.getOrPut(packageState.appId) { IndexedListSet() }
+                mutateAppIdPackageNames()
+                    .mutateOrPut(packageState.appId) { MutableIndexedListSet() }
                     .add(packageState.packageName)
             }
-            this.knownPackages = knownPackages
-            this.isLeanback = isLeanback
-            this.configPermissions = configPermissions
-            this.privilegedPermissionAllowlistPackages = privilegedPermissionAllowlistPackages
-            this.permissionAllowlist = permissionAllowlist
-            this.implicitToSourcePermissions = implicitToSourcePermissions
+            setKnownPackages(knownPackages)
+            setLeanback(isLeanback)
+            setConfigPermissions(configPermissions)
+            setPrivilegedPermissionAllowlistPackages(privilegedPermissionAllowlistPackages)
+            setPermissionAllowlist(permissionAllowlist)
+            setImplicitToSourcePermissions(implicitToSourcePermissions)
         }
-        state.userStates.apply {
-            userIds.forEachIndexed { _, userId ->
-                this[userId] = UserState()
-            }
+        state.mutateUserStatesNoWrite().apply {
+            userIds.forEachIndexed { _, userId -> this[userId] = MutableUserState() }
         }
     }
 
@@ -102,16 +102,19 @@
     }
 
     fun MutateStateScope.onUserAdded(userId: Int) {
-        newState.systemState.userIds += userId
-        newState.userStates[userId] = UserState()
+        newState.mutateExternalState().mutateUserIds() += userId
+        newState.mutateUserStatesNoWrite()[userId] = MutableUserState()
         forEachSchemePolicy {
             with(it) { onUserAdded(userId) }
         }
+        newState.externalState.packageStates.forEach { (_, packageState) ->
+            upgradePackageVersion(packageState, userId)
+        }
     }
 
     fun MutateStateScope.onUserRemoved(userId: Int) {
-        newState.systemState.userIds -= userId
-        newState.userStates -= userId
+        newState.mutateExternalState().mutateUserIds() -= userId
+        newState.mutateUserStatesNoWrite() -= userId
         forEachSchemePolicy {
             with(it) { onUserRemoved(userId) }
         }
@@ -122,22 +125,31 @@
         disabledSystemPackageStates: Map<String, PackageState>,
         knownPackages: IntMap<Array<String>>,
         volumeUuid: String?,
+        packageNames: List<String>,
         isSystemUpdated: Boolean
     ) {
-        val addedAppIds = IntSet()
-        newState.systemState.apply {
-            this.packageStates = packageStates
-            this.disabledSystemPackageStates = disabledSystemPackageStates
+        val addedAppIds = MutableIntSet()
+        newState.mutateExternalState().apply {
+            setPackageStates(packageStates)
+            setDisabledSystemPackageStates(disabledSystemPackageStates)
             packageStates.forEach { (packageName, packageState) ->
                 if (packageState.volumeUuid == volumeUuid) {
+                    // The APK for a package on a mounted storage volume may still be unavailable
+                    // due to APK being deleted, e.g. after an OTA.
+                    check(
+                        packageState.androidPackage == null || packageNames.contains(packageName)
+                    ) {
+                        "Package $packageName on storage volume $volumeUuid didn't receive" +
+                            " onPackageAdded() before onStorageVolumeMounted()"
+                    }
                     val appId = packageState.appId
-                    appIds.getOrPut(appId) {
+                    mutateAppIdPackageNames().mutateOrPut(appId) {
                         addedAppIds += appId
-                        IndexedListSet()
+                        MutableIndexedListSet()
                     } += packageName
                 }
             }
-            this.knownPackages = knownPackages
+            setKnownPackages(knownPackages)
         }
         addedAppIds.forEachIndexed { _, appId ->
             forEachSchemePolicy {
@@ -145,7 +157,14 @@
             }
         }
         forEachSchemePolicy {
-            with(it) { onStorageVolumeMounted(volumeUuid, isSystemUpdated) }
+            with(it) { onStorageVolumeMounted(volumeUuid, packageNames, isSystemUpdated) }
+        }
+        packageStates.forEach { (_, packageState) ->
+            if (packageState.volumeUuid == volumeUuid) {
+                newState.userStates.forEachIndexed { _, userId, _ ->
+                    upgradePackageVersion(packageState, userId)
+                }
+            }
         }
     }
 
@@ -156,20 +175,19 @@
         packageName: String
     ) {
         val packageState = packageStates[packageName]
-        // TODO(zhanghai): STOPSHIP: Remove check before feature enable.
         checkNotNull(packageState) {
             "Added package $packageName isn't found in packageStates in onPackageAdded()"
         }
         val appId = packageState.appId
         var isAppIdAdded = false
-        newState.systemState.apply {
-            this.packageStates = packageStates
-            this.disabledSystemPackageStates = disabledSystemPackageStates
-            appIds.getOrPut(appId) {
+        newState.mutateExternalState().apply {
+            setPackageStates(packageStates)
+            setDisabledSystemPackageStates(disabledSystemPackageStates)
+            mutateAppIdPackageNames().mutateOrPut(appId) {
                 isAppIdAdded = true
-                IndexedListSet()
+                MutableIndexedListSet()
             } += packageName
-            this.knownPackages = knownPackages
+            setKnownPackages(knownPackages)
         }
         if (isAppIdAdded) {
             forEachSchemePolicy {
@@ -179,6 +197,9 @@
         forEachSchemePolicy {
             with(it) { onPackageAdded(packageState) }
         }
+        newState.userStates.forEachIndexed { _, userId, _ ->
+            upgradePackageVersion(packageState, userId)
+        }
     }
 
     fun MutateStateScope.onPackageRemoved(
@@ -188,22 +209,21 @@
         packageName: String,
         appId: Int
     ) {
-        // TODO(zhanghai): STOPSHIP: Remove check before feature enable.
         check(packageName !in packageStates) {
             "Removed package $packageName is still in packageStates in onPackageRemoved()"
         }
         var isAppIdRemoved = false
-        newState.systemState.apply {
-            this.packageStates = packageStates
-            this.disabledSystemPackageStates = disabledSystemPackageStates
-            appIds[appId]?.apply {
+        newState.mutateExternalState().apply {
+            setPackageStates(packageStates)
+            setDisabledSystemPackageStates(disabledSystemPackageStates)
+            mutateAppIdPackageNames().mutate(appId)?.apply {
                 this -= packageName
                 if (isEmpty()) {
-                    appIds -= appId
+                    mutateAppIdPackageNames() -= appId
                     isAppIdRemoved = true
                 }
             }
-            this.knownPackages = knownPackages
+            setKnownPackages(knownPackages)
         }
         forEachSchemePolicy {
             with(it) { onPackageRemoved(packageName, appId) }
@@ -213,6 +233,11 @@
                 with(it) { onAppIdRemoved(appId) }
             }
         }
+        newState.userStates.forEachIndexed { userStateIndex, _, userState ->
+            if (packageName in userState.packageVersions) {
+                newState.mutateUserStateAt(userStateIndex).mutatePackageVersions() -= packageName
+            }
+        }
     }
 
     fun MutateStateScope.onPackageInstalled(
@@ -222,13 +247,12 @@
         packageName: String,
         userId: Int
     ) {
-        newState.systemState.apply {
-            this.packageStates = packageStates
-            this.disabledSystemPackageStates = disabledSystemPackageStates
-            this.knownPackages = knownPackages
+        newState.mutateExternalState().apply {
+            setPackageStates(packageStates)
+            setDisabledSystemPackageStates(disabledSystemPackageStates)
+            setKnownPackages(knownPackages)
         }
         val packageState = packageStates[packageName]
-        // TODO(zhanghai): STOPSHIP: Remove check before feature enable.
         checkNotNull(packageState) {
             "Installed package $packageName isn't found in packageStates in onPackageInstalled()"
         }
@@ -245,24 +269,73 @@
         appId: Int,
         userId: Int
     ) {
-        newState.systemState.apply {
-            this.packageStates = packageStates
-            this.disabledSystemPackageStates = disabledSystemPackageStates
-            this.knownPackages = knownPackages
+        newState.mutateExternalState().apply {
+            setPackageStates(packageStates)
+            setDisabledSystemPackageStates(disabledSystemPackageStates)
+            setKnownPackages(knownPackages)
         }
         forEachSchemePolicy {
             with(it) { onPackageUninstalled(packageName, appId, userId) }
         }
     }
 
-    fun MutateStateScope.onSystemReady() {
-        newState.systemState.isSystemReady = true
+    fun MutateStateScope.onSystemReady(
+        packageStates: Map<String, PackageState>,
+        disabledSystemPackageStates: Map<String, PackageState>,
+        knownPackages: IntMap<Array<String>>
+    ) {
+        newState.mutateExternalState().apply {
+            setPackageStates(packageStates)
+            setDisabledSystemPackageStates(disabledSystemPackageStates)
+            setKnownPackages(knownPackages)
+            setSystemReady(true)
+        }
         forEachSchemePolicy {
             with(it) { onSystemReady() }
         }
     }
 
-    fun BinaryXmlPullParser.parseSystemState(state: AccessState) {
+    fun migrateSystemState(state: MutableAccessState) {
+        forEachSchemePolicy {
+            with(it) { migrateSystemState(state) }
+        }
+    }
+
+    fun migrateUserState(state: MutableAccessState, userId: Int) {
+        forEachSchemePolicy {
+            with(it) { migrateUserState(state, userId) }
+        }
+    }
+
+    private fun MutateStateScope.upgradePackageVersion(packageState: PackageState, userId: Int) {
+        if (packageState.androidPackage == null) {
+            return
+        }
+
+        val packageName = packageState.packageName
+        // The version would be latest when the package is new to the system, e.g. newly
+        // installed, first boot, or system apps added via OTA.
+        val version = newState.userStates[userId]!!.packageVersions[packageName]
+        when {
+            version == null ->
+                newState.mutateUserState(userId)!!.mutatePackageVersions()[packageName] =
+                    VERSION_LATEST
+            version < VERSION_LATEST -> {
+                forEachSchemePolicy {
+                    with(it) { upgradePackageState(packageState, userId, version) }
+                }
+                newState.mutateUserState(userId)!!.mutatePackageVersions()[packageName] =
+                    VERSION_LATEST
+            }
+            version == VERSION_LATEST -> {}
+            else -> Slog.w(
+                LOG_TAG, "Unexpected version $version for package $packageName," +
+                    "latest version is $VERSION_LATEST"
+            )
+        }
+    }
+
+    fun BinaryXmlPullParser.parseSystemState(state: MutableAccessState) {
         forEachTag {
             when (tagName) {
                 TAG_ACCESS -> {
@@ -272,7 +345,7 @@
                         }
                     }
                 }
-                else -> Log.w(LOG_TAG, "Ignoring unknown tag $tagName when parsing system state")
+                else -> Slog.w(LOG_TAG, "Ignoring unknown tag $tagName when parsing system state")
             }
         }
     }
@@ -285,18 +358,25 @@
         }
     }
 
-    fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) {
+    fun BinaryXmlPullParser.parseUserState(state: MutableAccessState, userId: Int) {
         forEachTag {
             when (tagName) {
                 TAG_ACCESS -> {
                     forEachTag {
-                        forEachSchemePolicy {
-                            with(it) { parseUserState(state, userId) }
+                        when (tagName) {
+                            TAG_PACKAGE_VERSIONS -> parsePackageVersions(state, userId)
+                            TAG_DEFAULT_PERMISSION_GRANT ->
+                                parseDefaultPermissionGrant(state, userId)
+                            else -> {
+                                forEachSchemePolicy {
+                                    with(it) { parseUserState(state, userId) }
+                                }
+                            }
                         }
                     }
                 }
                 else -> {
-                    Log.w(
+                    Slog.w(
                         LOG_TAG,
                         "Ignoring unknown tag $tagName when parsing user state for user $userId"
                     )
@@ -305,20 +385,82 @@
         }
     }
 
+    private fun BinaryXmlPullParser.parsePackageVersions(state: MutableAccessState, userId: Int) {
+        val userState = state.mutateUserState(userId, WriteMode.NONE)!!
+        val packageVersions = userState.mutatePackageVersions()
+        forEachTag {
+            when (tagName) {
+                TAG_PACKAGE -> parsePackageVersion(packageVersions)
+                else -> Slog.w(LOG_TAG, "Ignoring unknown tag $name when parsing package versions")
+            }
+        }
+        packageVersions.forEachReversedIndexed { packageVersionIndex, packageName, _ ->
+            if (packageName !in state.externalState.packageStates) {
+                Slog.w(LOG_TAG, "Dropping unknown $packageName when parsing package versions")
+                packageVersions.removeAt(packageVersionIndex)
+                userState.requestWriteMode(WriteMode.ASYNCHRONOUS)
+            }
+        }
+    }
+
+    private fun BinaryXmlPullParser.parsePackageVersion(
+        packageVersions: MutableIndexedMap<String, Int>
+    ) {
+        val packageName = getAttributeValueOrThrow(ATTR_NAME).intern()
+        val version = getAttributeIntOrThrow(ATTR_VERSION)
+        packageVersions[packageName] = version
+    }
+
+    private fun BinaryXmlPullParser.parseDefaultPermissionGrant(
+        state: MutableAccessState,
+        userId: Int
+    ) {
+        val userState = state.mutateUserState(userId, WriteMode.NONE)!!
+        val fingerprint = getAttributeValueOrThrow(ATTR_FINGERPRINT).intern()
+        userState.setDefaultPermissionGrantFingerprint(fingerprint)
+    }
+
     fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) {
         tag(TAG_ACCESS) {
+            serializePackageVersions(state.userStates[userId]!!.packageVersions)
+            serializeDefaultPermissionGrantFingerprint(
+                state.userStates[userId]!!.defaultPermissionGrantFingerprint
+            )
             forEachSchemePolicy {
                 with(it) { serializeUserState(state, userId) }
             }
         }
     }
 
+    private fun BinaryXmlSerializer.serializePackageVersions(
+        packageVersions: IndexedMap<String, Int>
+    ) {
+        tag(TAG_PACKAGE_VERSIONS) {
+            packageVersions.forEachIndexed { _, packageName, version ->
+                tag(TAG_PACKAGE) {
+                    attributeInterned(ATTR_NAME, packageName)
+                    attributeInt(ATTR_VERSION, version)
+                }
+            }
+        }
+    }
+
+    private fun BinaryXmlSerializer.serializeDefaultPermissionGrantFingerprint(
+        fingerprint: String?
+    ) {
+        if (fingerprint != null) {
+            tag(TAG_DEFAULT_PERMISSION_GRANT) {
+                attributeInterned(ATTR_FINGERPRINT, fingerprint)
+            }
+        }
+    }
+
     private fun getSchemePolicy(subject: AccessUri, `object`: AccessUri): SchemePolicy =
         getSchemePolicy(subject.scheme, `object`.scheme)
 
     private inline fun forEachSchemePolicy(action: (SchemePolicy) -> Unit) {
-        schemePolicies.forEachValueIndexed { _, objectSchemePolicies ->
-            objectSchemePolicies.forEachValueIndexed { _, schemePolicy ->
+        schemePolicies.forEachIndexed { _, _, objectSchemePolicies ->
+            objectSchemePolicies.forEachIndexed { _, _, schemePolicy ->
                 action(schemePolicy)
             }
         }
@@ -327,7 +469,16 @@
     companion object {
         private val LOG_TAG = AccessPolicy::class.java.simpleName
 
+        internal const val VERSION_LATEST = 15
+
         private const val TAG_ACCESS = "access"
+        private const val TAG_DEFAULT_PERMISSION_GRANT = "default-permission-grant"
+        private const val TAG_PACKAGE_VERSIONS = "package-versions"
+        private const val TAG_PACKAGE = "package"
+
+        private const val ATTR_FINGERPRINT = "fingerprint"
+        private const val ATTR_NAME = "name"
+        private const val ATTR_VERSION = "version"
     }
 }
 
@@ -336,14 +487,6 @@
 
     abstract val objectScheme: String
 
-    abstract fun GetStateScope.getDecision(subject: AccessUri, `object`: AccessUri): Int
-
-    abstract fun MutateStateScope.setDecision(
-        subject: AccessUri,
-        `object`: AccessUri,
-        decision: Int
-    )
-
     open fun GetStateScope.onStateMutated() {}
 
     open fun MutateStateScope.onInitialized() {}
@@ -358,7 +501,8 @@
 
     open fun MutateStateScope.onStorageVolumeMounted(
         volumeUuid: String?,
-        isSystemUpdated: Boolean
+        packageNames: List<String>,
+        isSystemUpdated: Boolean,
     ) {}
 
     open fun MutateStateScope.onPackageAdded(packageState: PackageState) {}
@@ -371,11 +515,21 @@
 
     open fun MutateStateScope.onSystemReady() {}
 
-    open fun BinaryXmlPullParser.parseSystemState(state: AccessState) {}
+    open fun migrateSystemState(state: MutableAccessState) {}
+
+    open fun migrateUserState(state: MutableAccessState, userId: Int) {}
+
+    open fun MutateStateScope.upgradePackageState(
+        packageState: PackageState,
+        userId: Int,
+        version: Int
+    ) {}
+
+    open fun BinaryXmlPullParser.parseSystemState(state: MutableAccessState) {}
 
     open fun BinaryXmlSerializer.serializeSystemState(state: AccessState) {}
 
-    open fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) {}
+    open fun BinaryXmlPullParser.parseUserState(state: MutableAccessState, userId: Int) {}
 
     open fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) {}
 }
diff --git a/services/permission/java/com/android/server/permission/access/AccessState.kt b/services/permission/java/com/android/server/permission/access/AccessState.kt
index 5532311..4ec32ea 100644
--- a/services/permission/java/com/android/server/permission/access/AccessState.kt
+++ b/services/permission/java/com/android/server/permission/access/AccessState.kt
@@ -18,124 +18,424 @@
 
 import android.content.pm.PermissionGroupInfo
 import com.android.server.SystemConfig
-import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
 import com.android.server.permission.access.permission.Permission
 import com.android.server.pm.permission.PermissionAllowlist
 import com.android.server.pm.pkg.PackageState
 
-class AccessState private constructor(
-    val systemState: SystemState,
-    val userStates: IntMap<UserState>
+private typealias ExternalStateReference = MutableReference<ExternalState, MutableExternalState>
+
+private typealias SystemStateReference = MutableReference<SystemState, MutableSystemState>
+
+typealias UserStates = IntReferenceMap<UserState, MutableUserState>
+typealias MutableUserStates = MutableIntReferenceMap<UserState, MutableUserState>
+private typealias UserStatesReference = MutableReference<UserStates, MutableUserStates>
+
+sealed class AccessState(
+    internal val externalStateReference: ExternalStateReference,
+    internal val systemStateReference: SystemStateReference,
+    internal val userStatesReference: UserStatesReference
+) : Immutable<MutableAccessState> {
+    val externalState: ExternalState
+        get() = externalStateReference.get()
+
+    val systemState: SystemState
+        get() = systemStateReference.get()
+
+    val userStates: UserStates
+        get() = userStatesReference.get()
+
+    override fun toMutable(): MutableAccessState = MutableAccessState(this)
+}
+
+class MutableAccessState private constructor(
+    externalStateReference: ExternalStateReference,
+    systemStateReference: SystemStateReference,
+    userStatesReference: UserStatesReference
+) : AccessState(
+    externalStateReference,
+    systemStateReference,
+    userStatesReference
 ) {
     constructor() : this(
-        SystemState(),
-        IntMap()
+        ExternalStateReference(MutableExternalState()),
+        SystemStateReference(MutableSystemState()),
+        UserStatesReference(MutableUserStates())
     )
 
-    fun copy(): AccessState = AccessState(
-        systemState.copy(),
-        userStates.copy { it.copy() }
+    internal constructor(accessState: AccessState) : this(
+        accessState.externalStateReference.toImmutable(),
+        accessState.systemStateReference.toImmutable(),
+        accessState.userStatesReference.toImmutable()
     )
+
+    fun mutateExternalState(): MutableExternalState = externalStateReference.mutate()
+
+    fun mutateSystemState(writeMode: Int = WriteMode.ASYNCHRONOUS): MutableSystemState =
+        systemStateReference.mutate().apply { requestWriteMode(writeMode) }
+
+    fun mutateUserStatesNoWrite(): MutableUserStates = userStatesReference.mutate()
+
+    fun mutateUserState(userId: Int, writeMode: Int = WriteMode.ASYNCHRONOUS): MutableUserState? =
+        mutateUserStatesNoWrite().mutate(userId)?.apply { requestWriteMode(writeMode) }
+
+    fun mutateUserStateAt(index: Int, writeMode: Int = WriteMode.ASYNCHRONOUS): MutableUserState =
+        mutateUserStatesNoWrite().mutateAt(index).apply { requestWriteMode(writeMode) }
 }
 
-class SystemState private constructor(
-    val userIds: IntSet,
-    var packageStates: Map<String, PackageState>,
-    var disabledSystemPackageStates: Map<String, PackageState>,
-    val appIds: IntMap<IndexedListSet<String>>,
-    // Mapping from KnownPackages keys to package names.
-    var knownPackages: IntMap<Array<String>>,
-    var isLeanback: Boolean,
-    var configPermissions: Map<String, SystemConfig.PermissionEntry>,
-    var privilegedPermissionAllowlistPackages: IndexedListSet<String>,
-    var permissionAllowlist: PermissionAllowlist,
-    var implicitToSourcePermissions: IndexedMap<String, IndexedListSet<String>>,
-    var isSystemReady: Boolean,
-    // TODO: Get and watch the state for deviceAndProfileOwners
-    // Mapping from user ID to package name.
-    var deviceAndProfileOwners: IntMap<String>,
-    val permissionGroups: IndexedMap<String, PermissionGroupInfo>,
-    val permissionTrees: IndexedMap<String, Permission>,
-    val permissions: IndexedMap<String, Permission>
-) : WritableState() {
+private typealias UserIdsReference = MutableReference<IntSet, MutableIntSet>
+
+typealias AppIdPackageNames = IntReferenceMap<IndexedListSet<String>, MutableIndexedListSet<String>>
+typealias MutableAppIdPackageNames =
+    MutableIntReferenceMap<IndexedListSet<String>, MutableIndexedListSet<String>>
+private typealias AppIdPackageNamesReference =
+    MutableReference<AppIdPackageNames, MutableAppIdPackageNames>
+
+sealed class ExternalState(
+    val userIdsReference: UserIdsReference,
+    packageStates: Map<String, PackageState>,
+    disabledSystemPackageStates: Map<String, PackageState>,
+    val appIdPackageNamesReference: AppIdPackageNamesReference,
+    knownPackages: IntMap<Array<String>>,
+    isLeanback: Boolean,
+    configPermissions: Map<String, SystemConfig.PermissionEntry>,
+    privilegedPermissionAllowlistPackages: IndexedListSet<String>,
+    permissionAllowlist: PermissionAllowlist,
+    implicitToSourcePermissions: IndexedMap<String, IndexedListSet<String>>,
+    isSystemReady: Boolean
+) : Immutable<MutableExternalState> {
+    val userIds: IntSet
+        get() = userIdsReference.get()
+
+    var packageStates: Map<String, PackageState> = packageStates
+        protected set
+
+    var disabledSystemPackageStates: Map<String, PackageState> = disabledSystemPackageStates
+        protected set
+
+    val appIdPackageNames: AppIdPackageNames
+        get() = appIdPackageNamesReference.get()
+
+    var knownPackages: IntMap<Array<String>> = knownPackages
+        protected set
+
+    var isLeanback: Boolean = isLeanback
+        protected set
+
+    var configPermissions: Map<String, SystemConfig.PermissionEntry> = configPermissions
+        protected set
+
+    var privilegedPermissionAllowlistPackages: IndexedListSet<String> =
+        privilegedPermissionAllowlistPackages
+        protected set
+
+    var permissionAllowlist: PermissionAllowlist = permissionAllowlist
+        protected set
+
+    var implicitToSourcePermissions: IndexedMap<String, IndexedListSet<String>> =
+        implicitToSourcePermissions
+        protected set
+
+    var isSystemReady: Boolean = isSystemReady
+        protected set
+
+    override fun toMutable(): MutableExternalState = MutableExternalState(this)
+}
+
+class MutableExternalState private constructor(
+    userIdsReference: UserIdsReference,
+    packageStates: Map<String, PackageState>,
+    disabledSystemPackageStates: Map<String, PackageState>,
+    appIdPackageNamesReference: AppIdPackageNamesReference,
+    knownPackages: IntMap<Array<String>>,
+    isLeanback: Boolean,
+    configPermissions: Map<String, SystemConfig.PermissionEntry>,
+    privilegedPermissionAllowlistPackages: IndexedListSet<String>,
+    permissionAllowlist: PermissionAllowlist,
+    implicitToSourcePermissions: IndexedMap<String, IndexedListSet<String>>,
+    isSystemReady: Boolean
+) : ExternalState(
+    userIdsReference,
+    packageStates,
+    disabledSystemPackageStates,
+    appIdPackageNamesReference,
+    knownPackages,
+    isLeanback,
+    configPermissions,
+    privilegedPermissionAllowlistPackages,
+    permissionAllowlist,
+    implicitToSourcePermissions,
+    isSystemReady
+) {
     constructor() : this(
-        IntSet(),
+        UserIdsReference(MutableIntSet()),
         emptyMap(),
         emptyMap(),
-        IntMap(),
-        IntMap(),
+        AppIdPackageNamesReference(MutableAppIdPackageNames()),
+        MutableIntMap(),
         false,
         emptyMap(),
-        IndexedListSet(),
+        MutableIndexedListSet(),
         PermissionAllowlist(),
-        IndexedMap(),
-        false,
-        IntMap(),
-        IndexedMap(),
-        IndexedMap(),
-        IndexedMap()
+        MutableIndexedMap(),
+        false
     )
 
-    fun copy(): SystemState =
-        SystemState(
-            userIds.copy(),
-            packageStates,
-            disabledSystemPackageStates,
-            appIds.copy { it.copy() },
-            knownPackages,
-            isLeanback,
-            configPermissions,
-            privilegedPermissionAllowlistPackages,
-            permissionAllowlist,
-            implicitToSourcePermissions,
-            isSystemReady,
-            deviceAndProfileOwners,
-            permissionGroups.copy { it },
-            permissionTrees.copy { it },
-            permissions.copy { it }
-        )
+    internal constructor(externalState: ExternalState) : this(
+        externalState.userIdsReference.toImmutable(),
+        externalState.packageStates,
+        externalState.disabledSystemPackageStates,
+        externalState.appIdPackageNamesReference.toImmutable(),
+        externalState.knownPackages,
+        externalState.isLeanback,
+        externalState.configPermissions,
+        externalState.privilegedPermissionAllowlistPackages,
+        externalState.permissionAllowlist,
+        externalState.implicitToSourcePermissions,
+        externalState.isSystemReady
+    )
+
+    fun mutateUserIds(): MutableIntSet = userIdsReference.mutate()
+
+    @JvmName("setPackageStatesPublic")
+    fun setPackageStates(packageStates: Map<String, PackageState>) {
+        this.packageStates = packageStates
+    }
+
+    @JvmName("setDisabledSystemPackageStatesPublic")
+    fun setDisabledSystemPackageStates(disabledSystemPackageStates: Map<String, PackageState>) {
+        this.disabledSystemPackageStates = disabledSystemPackageStates
+    }
+
+    fun mutateAppIdPackageNames(): MutableAppIdPackageNames = appIdPackageNamesReference.mutate()
+
+    @JvmName("setKnownPackagesPublic")
+    fun setKnownPackages(knownPackages: IntMap<Array<String>>) {
+        this.knownPackages = knownPackages
+    }
+
+    @JvmName("setLeanbackPublic")
+    fun setLeanback(isLeanback: Boolean) {
+        this.isLeanback = isLeanback
+    }
+
+    @JvmName("setConfigPermissionsPublic")
+    fun setConfigPermissions(configPermissions: Map<String, SystemConfig.PermissionEntry>) {
+        this.configPermissions = configPermissions
+    }
+
+    @JvmName("setPrivilegedPermissionAllowlistPackagesPublic")
+    fun setPrivilegedPermissionAllowlistPackages(
+        privilegedPermissionAllowlistPackages: IndexedListSet<String>
+    ) {
+        this.privilegedPermissionAllowlistPackages = privilegedPermissionAllowlistPackages
+    }
+
+    @JvmName("setPermissionAllowlistPublic")
+    fun setPermissionAllowlist(permissionAllowlist: PermissionAllowlist) {
+        this.permissionAllowlist = permissionAllowlist
+    }
+
+    @JvmName("setImplicitToSourcePermissionsPublic")
+    fun setImplicitToSourcePermissions(
+        implicitToSourcePermissions: IndexedMap<String, IndexedListSet<String>>
+    ) {
+        this.implicitToSourcePermissions = implicitToSourcePermissions
+    }
+
+    @JvmName("setSystemReadyPublic")
+    fun setSystemReady(isSystemReady: Boolean) {
+        this.isSystemReady = isSystemReady
+    }
 }
 
-class UserState private constructor(
-    // A map of (appId to a map of (permissionName to permissionFlags))
-    val uidPermissionFlags: IntMap<IndexedMap<String, Int>>,
-    // appId -> opName -> opCode
-    val uidAppOpModes: IntMap<IndexedMap<String, Int>>,
-    // packageName -> opName -> opCode
-    val packageAppOpModes: IndexedMap<String, IndexedMap<String, Int>>
-) : WritableState() {
+private typealias PermissionGroupsReference = MutableReference<
+    IndexedMap<String, PermissionGroupInfo>, MutableIndexedMap<String, PermissionGroupInfo>
+>
+
+private typealias PermissionTreesReference =
+    MutableReference<IndexedMap<String, Permission>, MutableIndexedMap<String, Permission>>
+
+private typealias PermissionsReference =
+    MutableReference<IndexedMap<String, Permission>, MutableIndexedMap<String, Permission>>
+
+sealed class SystemState(
+    val permissionGroupsReference: PermissionGroupsReference,
+    val permissionTreesReference: PermissionTreesReference,
+    val permissionsReference: PermissionsReference,
+    writeMode: Int
+) : WritableState, Immutable<MutableSystemState> {
+    val permissionGroups: IndexedMap<String, PermissionGroupInfo>
+        get() = permissionGroupsReference.get()
+
+    val permissionTrees: IndexedMap<String, Permission>
+        get() = permissionTreesReference.get()
+
+    val permissions: IndexedMap<String, Permission>
+        get() = permissionsReference.get()
+
+    override var writeMode: Int = writeMode
+        protected set
+
+    override fun toMutable(): MutableSystemState = MutableSystemState(this)
+}
+
+class MutableSystemState private constructor(
+    permissionGroupsReference: PermissionGroupsReference,
+    permissionTreesReference: PermissionTreesReference,
+    permissionsReference: PermissionsReference,
+    writeMode: Int
+) : SystemState(
+    permissionGroupsReference,
+    permissionTreesReference,
+    permissionsReference,
+    writeMode
+), MutableWritableState {
     constructor() : this(
-        IntMap(),
-        IntMap(),
-        IndexedMap()
+        PermissionGroupsReference(MutableIndexedMap()),
+        PermissionTreesReference(MutableIndexedMap()),
+        PermissionsReference(MutableIndexedMap()),
+        WriteMode.NONE
     )
 
-    fun copy(): UserState = UserState(
-        uidPermissionFlags.copy { it.copy { it } },
-        uidAppOpModes.copy { it.copy { it } },
-        packageAppOpModes.copy { it.copy { it } }
+    internal constructor(systemState: SystemState) : this(
+        systemState.permissionGroupsReference.toImmutable(),
+        systemState.permissionTreesReference.toImmutable(),
+        systemState.permissionsReference.toImmutable(),
+        WriteMode.NONE
     )
+
+    fun mutatePermissionGroups(): MutableIndexedMap<String, PermissionGroupInfo> =
+        permissionGroupsReference.mutate()
+
+    fun mutatePermissionTrees(): MutableIndexedMap<String, Permission> =
+        permissionTreesReference.mutate()
+
+    fun mutatePermissions(): MutableIndexedMap<String, Permission> =
+        permissionsReference.mutate()
+
+    override fun requestWriteMode(writeMode: Int) {
+        this.writeMode = maxOf(this.writeMode, writeMode)
+    }
+}
+
+private typealias PackageVersionsReference =
+    MutableReference<IndexedMap<String, Int>, MutableIndexedMap<String, Int>>
+
+typealias AppIdPermissionFlags =
+    IntReferenceMap<IndexedMap<String, Int>, MutableIndexedMap<String, Int>>
+typealias MutableAppIdPermissionFlags =
+    MutableIntReferenceMap<IndexedMap<String, Int>, MutableIndexedMap<String, Int>>
+private typealias AppIdPermissionFlagsReference =
+    MutableReference<AppIdPermissionFlags, MutableAppIdPermissionFlags>
+
+typealias AppIdAppOpModes =
+    IntReferenceMap<IndexedMap<String, Int>, MutableIndexedMap<String, Int>>
+typealias MutableAppIdAppOpModes =
+    MutableIntReferenceMap<IndexedMap<String, Int>, MutableIndexedMap<String, Int>>
+private typealias AppIdAppOpModesReference =
+    MutableReference<AppIdAppOpModes, MutableAppIdAppOpModes>
+
+typealias PackageAppOpModes =
+    IndexedReferenceMap<String, IndexedMap<String, Int>, MutableIndexedMap<String, Int>>
+typealias MutablePackageAppOpModes =
+    MutableIndexedReferenceMap<String, IndexedMap<String, Int>, MutableIndexedMap<String, Int>>
+private typealias PackageAppOpModesReference =
+    MutableReference<PackageAppOpModes, MutablePackageAppOpModes>
+
+sealed class UserState(
+    internal val packageVersionsReference: PackageVersionsReference,
+    internal val appIdPermissionFlagsReference: AppIdPermissionFlagsReference,
+    internal val appIdAppOpModesReference: AppIdAppOpModesReference,
+    internal val packageAppOpModesReference: PackageAppOpModesReference,
+    defaultPermissionGrantFingerprint: String?,
+    writeMode: Int
+) : WritableState, Immutable<MutableUserState> {
+    val packageVersions: IndexedMap<String, Int>
+        get() = packageVersionsReference.get()
+
+    val appIdPermissionFlags: AppIdPermissionFlags
+        get() = appIdPermissionFlagsReference.get()
+
+    val appIdAppOpModes: AppIdAppOpModes
+        get() = appIdAppOpModesReference.get()
+
+    val packageAppOpModes: PackageAppOpModes
+        get() = packageAppOpModesReference.get()
+
+    var defaultPermissionGrantFingerprint: String? = defaultPermissionGrantFingerprint
+        protected set
+
+    override var writeMode: Int = writeMode
+        protected set
+
+    override fun toMutable(): MutableUserState = MutableUserState(this)
+}
+
+class MutableUserState private constructor(
+    packageVersionsReference: PackageVersionsReference,
+    appIdPermissionFlagsReference: AppIdPermissionFlagsReference,
+    appIdAppOpModesReference: AppIdAppOpModesReference,
+    packageAppOpModesReference: PackageAppOpModesReference,
+    defaultPermissionGrantFingerprint: String?,
+    writeMode: Int
+) : UserState(
+    packageVersionsReference,
+    appIdPermissionFlagsReference,
+    appIdAppOpModesReference,
+    packageAppOpModesReference,
+    defaultPermissionGrantFingerprint,
+    writeMode
+), MutableWritableState {
+    constructor() : this(
+        PackageVersionsReference(MutableIndexedMap<String, Int>()),
+        AppIdPermissionFlagsReference(MutableAppIdPermissionFlags()),
+        AppIdAppOpModesReference(MutableAppIdAppOpModes()),
+        PackageAppOpModesReference(MutablePackageAppOpModes()),
+        null,
+        WriteMode.NONE
+    )
+
+    internal constructor(userState: UserState) : this(
+        userState.packageVersionsReference.toImmutable(),
+        userState.appIdPermissionFlagsReference.toImmutable(),
+        userState.appIdAppOpModesReference.toImmutable(),
+        userState.packageAppOpModesReference.toImmutable(),
+        userState.defaultPermissionGrantFingerprint,
+        WriteMode.NONE
+    )
+
+    fun mutatePackageVersions(): MutableIndexedMap<String, Int> = packageVersionsReference.mutate()
+
+    fun mutateAppIdPermissionFlags(): MutableAppIdPermissionFlags =
+        appIdPermissionFlagsReference.mutate()
+
+    fun mutateAppIdAppOpModes(): MutableAppIdAppOpModes = appIdAppOpModesReference.mutate()
+
+    fun mutatePackageAppOpModes(): MutablePackageAppOpModes = packageAppOpModesReference.mutate()
+
+    @JvmName("setDefaultPermissionGrantFingerprintPublic")
+    fun setDefaultPermissionGrantFingerprint(defaultPermissionGrantFingerprint: String?) {
+        this.defaultPermissionGrantFingerprint = defaultPermissionGrantFingerprint
+    }
+
+    override fun requestWriteMode(writeMode: Int) {
+        this.writeMode = maxOf(this.writeMode, writeMode)
+    }
 }
 
 object WriteMode {
     const val NONE = 0
-    const val SYNC = 1
-    const val ASYNC = 2
+    const val ASYNCHRONOUS = 1
+    const val SYNCHRONOUS = 2
 }
 
-abstract class WritableState {
-    var writeMode: Int = WriteMode.NONE
-        private set
+interface WritableState {
+    val writeMode: Int
+}
 
-    fun requestWrite(sync: Boolean = false) {
-        if (sync) {
-            writeMode = WriteMode.SYNC
-        } else {
-            if (writeMode != WriteMode.SYNC) {
-                writeMode = WriteMode.ASYNC
-            }
-        }
-    }
+interface MutableWritableState : WritableState {
+    fun requestWriteMode(writeMode: Int)
 }
 
 open class GetStateScope(
@@ -144,5 +444,5 @@
 
 class MutateStateScope(
     val oldState: AccessState,
-    val newState: AccessState
+    val newState: MutableAccessState
 ) : GetStateScope(newState)
diff --git a/services/permission/java/com/android/server/permission/access/appop/AppIdAppOpMigration.kt b/services/permission/java/com/android/server/permission/access/appop/AppIdAppOpMigration.kt
new file mode 100644
index 0000000..96d315e
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/appop/AppIdAppOpMigration.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.appop
+
+import android.os.Process
+import android.util.Slog
+import com.android.server.LocalServices
+import com.android.server.appop.AppOpMigrationHelper
+import com.android.server.permission.access.MutableAccessState
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.util.PackageVersionMigration
+
+class AppIdAppOpMigration {
+    fun migrateUserState(state: MutableAccessState, userId: Int) {
+        val legacyAppOpsManager = LocalServices.getService(AppOpMigrationHelper::class.java)!!
+        if (!legacyAppOpsManager.hasLegacyAppOpState()) {
+            return
+        }
+
+        val legacyAppIdAppOpModes = legacyAppOpsManager.getLegacyAppIdAppOpModes(userId)
+        val version = PackageVersionMigration.getVersion(userId)
+
+        val userState = state.mutateUserState(userId)!!
+        val appIdAppOpModes = userState.mutateAppIdAppOpModes()
+        legacyAppIdAppOpModes.forEach { (appId, legacyAppOpModes) ->
+            val packageNames = state.externalState.appIdPackageNames[appId]
+            // Non-application UIDs may not have an Android package but may still have app op state.
+            if (packageNames == null && appId >= Process.FIRST_APPLICATION_UID) {
+                Slog.w(LOG_TAG, "Dropping unknown app ID $appId when migrating app op state")
+                return@forEach
+            }
+
+            val appOpModes = MutableIndexedMap<String, Int>()
+            appIdAppOpModes[appId] = appOpModes
+            legacyAppOpModes.forEach { (appOpName, appOpMode) ->
+                appOpModes[appOpName] = appOpMode
+            }
+
+            if (packageNames != null) {
+                val packageVersions = userState.mutatePackageVersions()
+                packageNames.forEachIndexed { _, packageName ->
+                    packageVersions[packageName] = version
+                }
+            }
+        }
+    }
+
+    companion object {
+        private val LOG_TAG = AppIdAppOpMigration::class.java.simpleName
+    }
+}
diff --git a/services/permission/java/com/android/server/permission/access/appop/AppIdAppOpPersistence.kt b/services/permission/java/com/android/server/permission/access/appop/AppIdAppOpPersistence.kt
new file mode 100644
index 0000000..4c7e946
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/appop/AppIdAppOpPersistence.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.server.permission.access.appop
+
+import android.os.Process
+import android.util.Slog
+import com.android.modules.utils.BinaryXmlPullParser
+import com.android.modules.utils.BinaryXmlSerializer
+import com.android.server.permission.access.AccessState
+import com.android.server.permission.access.AppIdAppOpModes
+import com.android.server.permission.access.MutableAccessState
+import com.android.server.permission.access.MutableAppIdAppOpModes
+import com.android.server.permission.access.WriteMode
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.util.attributeInt
+import com.android.server.permission.access.util.forEachTag
+import com.android.server.permission.access.util.getAttributeIntOrThrow
+import com.android.server.permission.access.util.tag
+import com.android.server.permission.access.util.tagName
+
+class AppIdAppOpPersistence : BaseAppOpPersistence() {
+    override fun BinaryXmlPullParser.parseUserState(state: MutableAccessState, userId: Int) {
+        when (tagName) {
+            TAG_APP_ID_APP_OPS -> parseAppIdAppOps(state, userId)
+            else -> {}
+        }
+    }
+
+    private fun BinaryXmlPullParser.parseAppIdAppOps(state: MutableAccessState, userId: Int) {
+        val userState = state.mutateUserState(userId, WriteMode.NONE)!!
+        val appIdAppOpModes = userState.mutateAppIdAppOpModes()
+        forEachTag {
+            when (tagName) {
+                TAG_APP_ID -> parseAppId(appIdAppOpModes)
+                else -> Slog.w(LOG_TAG, "Ignoring unknown tag $name when parsing app-op state")
+            }
+        }
+        userState.appIdAppOpModes.forEachReversedIndexed { appIdIndex, appId, _ ->
+            // Non-application UIDs may not have an Android package but may still have app op state.
+            if (appId !in state.externalState.appIdPackageNames &&
+                appId >= Process.FIRST_APPLICATION_UID) {
+                Slog.w(LOG_TAG, "Dropping unknown app ID $appId when parsing app-op state")
+                appIdAppOpModes.removeAt(appIdIndex)
+                userState.requestWriteMode(WriteMode.ASYNCHRONOUS)
+            }
+        }
+    }
+
+    private fun BinaryXmlPullParser.parseAppId(appIdAppOpModes: MutableAppIdAppOpModes) {
+        val appId = getAttributeIntOrThrow(ATTR_ID)
+        val appOpModes = MutableIndexedMap<String, Int>()
+        appIdAppOpModes[appId] = appOpModes
+        parseAppOps(appOpModes)
+    }
+
+    override fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) {
+        serializeAppIdAppOps(state.userStates[userId]!!.appIdAppOpModes)
+    }
+
+    private fun BinaryXmlSerializer.serializeAppIdAppOps(appIdAppOpModes: AppIdAppOpModes) {
+        tag(TAG_APP_ID_APP_OPS) {
+            appIdAppOpModes.forEachIndexed { _, appId, appOpModes ->
+                serializeAppId(appId, appOpModes)
+            }
+        }
+    }
+
+    private fun BinaryXmlSerializer.serializeAppId(
+        appId: Int,
+        appOpModes: IndexedMap<String, Int>
+    ) {
+        tag(TAG_APP_ID) {
+            attributeInt(ATTR_ID, appId)
+            serializeAppOps(appOpModes)
+        }
+    }
+
+    companion object {
+        private val LOG_TAG = AppIdAppOpPersistence::class.java.simpleName
+
+        private const val TAG_APP_ID = "app-id"
+        private const val TAG_APP_ID_APP_OPS = "app-id-app-ops"
+
+        private const val ATTR_ID = "id"
+    }
+}
diff --git a/services/permission/java/com/android/server/permission/access/appop/AppIdAppOpPolicy.kt b/services/permission/java/com/android/server/permission/access/appop/AppIdAppOpPolicy.kt
new file mode 100644
index 0000000..c02fe4d
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/appop/AppIdAppOpPolicy.kt
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.permission.access.appop
+
+import android.app.AppOpsManager
+import com.android.server.permission.access.GetStateScope
+import com.android.server.permission.access.MutableAccessState
+import com.android.server.permission.access.MutateStateScope
+import com.android.server.permission.access.UidUri
+import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
+import com.android.server.pm.pkg.PackageState
+
+class AppIdAppOpPolicy : BaseAppOpPolicy(AppIdAppOpPersistence()) {
+    private val migration = AppIdAppOpMigration()
+
+    private val upgrade = AppIdAppOpUpgrade(this)
+
+    @Volatile
+    private var onAppOpModeChangedListeners: IndexedListSet<OnAppOpModeChangedListener> =
+        MutableIndexedListSet()
+    private val onAppOpModeChangedListenersLock = Any()
+
+    override val subjectScheme: String
+        get() = UidUri.SCHEME
+
+    override fun GetStateScope.onStateMutated() {
+        onAppOpModeChangedListeners.forEachIndexed { _, it -> it.onStateMutated() }
+    }
+
+    override fun MutateStateScope.onAppIdRemoved(appId: Int) {
+        newState.userStates.forEachIndexed { userStateIndex, _, userState ->
+            val appIdIndex = userState.appIdAppOpModes.indexOfKey(appId)
+            if (appIdIndex >= 0) {
+                newState.mutateUserStateAt(userStateIndex).mutateAppIdAppOpModes()
+                    .removeAt(appIdIndex)
+                // Skip notifying the change listeners since the app ID no longer exists.
+            }
+        }
+    }
+
+    fun GetStateScope.getAppOpModes(appId: Int, userId: Int): IndexedMap<String, Int>? =
+        state.userStates[userId]?.appIdAppOpModes?.get(appId)
+
+    fun MutateStateScope.removeAppOpModes(appId: Int, userId: Int): Boolean {
+        val userStateIndex = newState.userStates.indexOfKey(userId)
+        if (userStateIndex < 0) {
+            return false
+        }
+        val appIdIndex = newState.userStates.valueAt(userStateIndex).appIdAppOpModes
+            .indexOfKey(appId)
+        if (appIdIndex < 0) {
+            return false
+        }
+        newState.mutateUserStateAt(userStateIndex).mutateAppIdAppOpModes().removeAt(appIdIndex)
+        return true
+    }
+
+    fun GetStateScope.getAppOpMode(appId: Int, userId: Int, appOpName: String): Int =
+        state.userStates[userId]?.appIdAppOpModes?.get(appId)
+            .getWithDefault(appOpName, AppOpsManager.opToDefaultMode(appOpName))
+
+    fun MutateStateScope.setAppOpMode(
+        appId: Int,
+        userId: Int,
+        appOpName: String,
+        mode: Int
+    ): Boolean {
+        val defaultMode = AppOpsManager.opToDefaultMode(appOpName)
+        val oldMode = newState.userStates[userId]!!.appIdAppOpModes[appId]
+            .getWithDefault(appOpName, defaultMode)
+        if (oldMode == mode) {
+            return false
+        }
+        val appIdAppOpModes = newState.mutateUserState(userId)!!.mutateAppIdAppOpModes()
+        val appOpModes = appIdAppOpModes.mutateOrPut(appId) { MutableIndexedMap() }
+        appOpModes.putWithDefault(appOpName, mode, defaultMode)
+        if (appOpModes.isEmpty()) {
+            appIdAppOpModes -= appId
+        }
+        onAppOpModeChangedListeners.forEachIndexed { _, it ->
+            it.onAppOpModeChanged(appId, userId, appOpName, oldMode, mode)
+        }
+        return true
+    }
+
+    fun addOnAppOpModeChangedListener(listener: OnAppOpModeChangedListener) {
+        synchronized(onAppOpModeChangedListenersLock) {
+            onAppOpModeChangedListeners = onAppOpModeChangedListeners + listener
+        }
+    }
+
+    fun removeOnAppOpModeChangedListener(listener: OnAppOpModeChangedListener) {
+        synchronized(onAppOpModeChangedListenersLock) {
+            onAppOpModeChangedListeners = onAppOpModeChangedListeners - listener
+        }
+    }
+
+    override fun migrateUserState(state: MutableAccessState, userId: Int) {
+        with(migration) { migrateUserState(state, userId) }
+    }
+
+    override fun MutateStateScope.upgradePackageState(
+        packageState: PackageState,
+        userId: Int,
+        version: Int,
+    ) {
+        with(upgrade) { upgradePackageState(packageState, userId, version) }
+    }
+
+    /**
+     * Listener for app op mode changes.
+     */
+    abstract class OnAppOpModeChangedListener {
+        /**
+         * Called when an app op mode change has been made to the upcoming new state.
+         *
+         * Implementations should keep this method fast to avoid stalling the locked state mutation,
+         * and only call external code after [onStateMutated] when the new state has actually become
+         * the current state visible to external code.
+         */
+        abstract fun onAppOpModeChanged(
+            appId: Int,
+            userId: Int,
+            appOpName: String,
+            oldMode: Int,
+            newMode: Int
+        )
+
+        /**
+         * Called when the upcoming new state has become the current state.
+         *
+         * Implementations should keep this method fast to avoid stalling the locked state mutation.
+         */
+        abstract fun onStateMutated()
+    }
+}
diff --git a/services/permission/java/com/android/server/permission/access/appop/AppIdAppOpUpgrade.kt b/services/permission/java/com/android/server/permission/access/appop/AppIdAppOpUpgrade.kt
new file mode 100644
index 0000000..12df95e
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/appop/AppIdAppOpUpgrade.kt
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.appop
+
+import android.app.AppOpsManager
+import com.android.server.permission.access.MutateStateScope
+import com.android.server.pm.pkg.PackageState
+
+class AppIdAppOpUpgrade(private val policy: AppIdAppOpPolicy) {
+    fun MutateStateScope.upgradePackageState(
+        packageState: PackageState,
+        userId: Int,
+        version: Int,
+    ) {
+        if (version <= 2) {
+            with(policy) {
+                val appOpMode = getAppOpMode(
+                    packageState.appId, userId, AppOpsManager.OPSTR_RUN_IN_BACKGROUND
+                )
+                setAppOpMode(
+                    packageState.appId, userId, AppOpsManager.OPSTR_RUN_ANY_IN_BACKGROUND, appOpMode
+                )
+            }
+        }
+        if (version <= 13) {
+            val permissionName = AppOpsManager.opToPermission(AppOpsManager.OP_SCHEDULE_EXACT_ALARM)
+            if (permissionName in packageState.androidPackage!!.requestedPermissions) {
+                with(policy) {
+                    val appOpMode = getAppOpMode(
+                        packageState.appId, userId, AppOpsManager.OPSTR_SCHEDULE_EXACT_ALARM
+                    )
+                    val defaultAppOpMode =
+                        AppOpsManager.opToDefaultMode(AppOpsManager.OP_SCHEDULE_EXACT_ALARM)
+                    if (appOpMode == defaultAppOpMode) {
+                        setAppOpMode(
+                            packageState.appId, userId, AppOpsManager.OPSTR_SCHEDULE_EXACT_ALARM,
+                            AppOpsManager.MODE_ALLOWED
+                        )
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/services/permission/java/com/android/server/permission/access/appop/AppOpService.kt b/services/permission/java/com/android/server/permission/access/appop/AppOpService.kt
index af85eba..5b91ad9 100644
--- a/services/permission/java/com/android/server/permission/access/appop/AppOpService.kt
+++ b/services/permission/java/com/android/server/permission/access/appop/AppOpService.kt
@@ -16,82 +16,70 @@
 
 package com.android.server.permission.access.appop
 
-import android.Manifest
-import android.annotation.UserIdInt
-import android.app.AppGlobals
 import android.app.AppOpsManager
-import android.content.pm.PackageManager
-import android.os.Binder
 import android.os.Handler
-import android.os.RemoteException
 import android.os.UserHandle
+import android.util.ArrayMap
+import android.util.ArraySet
 import android.util.SparseBooleanArray
 import android.util.SparseIntArray
 import com.android.internal.annotations.VisibleForTesting
-import com.android.internal.util.ArrayUtils
-import com.android.internal.util.function.pooled.PooledLambda
 import com.android.server.appop.AppOpsCheckingServiceInterface
-import com.android.server.appop.OnOpModeChangedListener
+import com.android.server.appop.AppOpsCheckingServiceInterface.AppOpsModeChangedListener
 import com.android.server.permission.access.AccessCheckingService
 import com.android.server.permission.access.AppOpUri
 import com.android.server.permission.access.PackageUri
 import com.android.server.permission.access.UidUri
-import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
-import com.android.server.permission.access.util.hasBits
-import libcore.util.EmptyArray
-import java.io.PrintWriter
+import com.android.server.permission.access.collection.forEachIndexed
+import com.android.server.permission.access.collection.set
 
 class AppOpService(
     private val service: AccessCheckingService
 ) : AppOpsCheckingServiceInterface {
     private val packagePolicy = service.getSchemePolicy(PackageUri.SCHEME, AppOpUri.SCHEME)
         as PackageAppOpPolicy
-    private val uidPolicy = service.getSchemePolicy(UidUri.SCHEME, AppOpUri.SCHEME)
-        as UidAppOpPolicy
+    private val appIdPolicy = service.getSchemePolicy(UidUri.SCHEME, AppOpUri.SCHEME)
+        as AppIdAppOpPolicy
 
     private val context = service.context
     private lateinit var handler: Handler
-    private lateinit var lock: Any
-    private lateinit var switchedOps: IntMap<IntArray>
+
+    @Volatile
+    private var listeners = ArraySet<AppOpsModeChangedListener>()
+    private val listenersLock = Any()
 
     fun initialize() {
         // TODO(b/252883039): Wrong handler. Inject main thread handler here.
         handler = Handler(context.mainLooper)
-        // TODO(b/252883039): Wrong lock object. Inject AppOpsService here.
-        lock = Any()
 
-        switchedOps = IntMap()
-        for (switchedCode in 0 until AppOpsManager._NUM_OP) {
-            val switchCode = AppOpsManager.opToSwitch(switchedCode)
-            switchedOps.put(switchCode,
-                ArrayUtils.appendInt(switchedOps.get(switchCode), switchedCode))
-        }
+        appIdPolicy.addOnAppOpModeChangedListener(OnAppIdAppOpModeChangedListener())
+        packagePolicy.addOnAppOpModeChangedListener(OnPackageAppOpModeChangedListener())
     }
 
     @VisibleForTesting
     override fun writeState() {
-        // TODO Not yet implemented
+        // Not implemented because writes are handled automatically.
     }
 
     override fun readState() {
-        // TODO Not yet implemented
+        // Not implemented because reads are handled automatically.
     }
 
     @VisibleForTesting
     override fun shutdown() {
-        // TODO Not yet implemented
+        // Not implemented because writes are handled automatically.
     }
 
     override fun systemReady() {
-        // TODO Not yet implemented
+        // Not implemented because upgrades are handled automatically.
     }
 
     override fun getNonDefaultUidModes(uid: Int): SparseIntArray {
-        return opNameMapToOpIntMap(getUidModes(uid))
+        return opNameMapToOpSparseArray(getUidModes(uid))
     }
 
     override fun getNonDefaultPackageModes(packageName: String, userId: Int): SparseIntArray {
-        return opNameMapToOpIntMap(getPackageModes(packageName, userId))
+        return opNameMapToOpSparseArray(getPackageModes(packageName, userId))
     }
 
     override fun getUidMode(uid: Int, op: Int): Int {
@@ -99,16 +87,14 @@
         val userId = UserHandle.getUserId(uid)
         val opName = AppOpsManager.opToPublicName(op)
         return service.getState {
-            with(uidPolicy) { getAppOpMode(appId, userId, opName) }
+            with(appIdPolicy) { getAppOpMode(appId, userId, opName) }
         }
     }
 
-    private fun getUidModes(uid: Int): IndexedMap<String, Int>? {
+    private fun getUidModes(uid: Int): ArrayMap<String, Int>? {
         val appId = UserHandle.getAppId(uid)
         val userId = UserHandle.getUserId(uid)
-        return service.getState {
-            with(uidPolicy) { getAppOpModes(appId, userId) }
-        }
+        return service.getState { with(appIdPolicy) { getAppOpModes(appId, userId) } }?.map
     }
 
     override fun setUidMode(uid: Int, op: Int, mode: Int): Boolean {
@@ -117,7 +103,7 @@
         val opName = AppOpsManager.opToPublicName(op)
         var wasChanged = false
         service.mutateState {
-            wasChanged = with(uidPolicy) { setAppOpMode(appId, userId, opName, mode) }
+            wasChanged = with(appIdPolicy) { setAppOpMode(appId, userId, opName, mode) }
         }
         return wasChanged
     }
@@ -132,8 +118,8 @@
     private fun getPackageModes(
         packageName: String,
         userId: Int
-    ): IndexedMap<String, Int>? =
-        service.getState { with(packagePolicy) { getAppOpModes(packageName, userId) } }
+    ): ArrayMap<String, Int>? =
+        service.getState { with(packagePolicy) { getAppOpModes(packageName, userId) } }?.map
 
     override fun setPackageMode(packageName: String, op: Int, mode: Int, userId: Int) {
         val opName = AppOpsManager.opToPublicName(op)
@@ -146,7 +132,7 @@
         val appId = UserHandle.getAppId(uid)
         val userId = UserHandle.getUserId(uid)
         service.mutateState {
-            with(uidPolicy) { removeAppOpModes(appId, userId) }
+            with(appIdPolicy) { removeAppOpModes(appId, userId) }
         }
     }
 
@@ -158,15 +144,15 @@
         return wasChanged
     }
 
-    private fun opNameMapToOpIntMap(modes: IndexedMap<String, Int>?): SparseIntArray =
+    private fun opNameMapToOpSparseArray(modes: ArrayMap<String, Int>?): SparseIntArray =
         if (modes == null) {
             SparseIntArray()
         } else {
-            val opIntMap = SparseIntArray(modes.size)
+            val opSparseArray = SparseIntArray(modes.size)
             modes.forEachIndexed { _, opName, opMode ->
-                opIntMap.put(AppOpsManager.strOpToOp(opName), opMode)
+                opSparseArray.put(AppOpsManager.strOpToOp(opName), opMode)
             }
-            opIntMap
+            opSparseArray
         }
 
     override fun areUidModesDefault(uid: Int): Boolean {
@@ -184,308 +170,108 @@
         // and we have our own persistence.
     }
 
-    // code -> listeners
-    private val opModeWatchers = IntMap<IndexedSet<OnOpModeChangedListener>>()
-
-    // packageName -> listeners
-    private val packageModeWatchers = IndexedMap<String, IndexedSet<OnOpModeChangedListener>>()
-
-    override fun startWatchingOpModeChanged(changedListener: OnOpModeChangedListener, op: Int) {
-        synchronized(lock) {
-            opModeWatchers.getOrPut(op) { IndexedSet() } += changedListener
-        }
-    }
-
-    override fun startWatchingPackageModeChanged(
-        changedListener: OnOpModeChangedListener,
-        packageName: String
-    ) {
-        synchronized(lock) {
-            packageModeWatchers.getOrPut(packageName) { IndexedSet() } += changedListener
-        }
-    }
-
-    override fun removeListener(changedListener: OnOpModeChangedListener) {
-        synchronized(lock) {
-            opModeWatchers.removeAllIndexed { _, _, listeners ->
-                listeners -= changedListener
-                listeners.isEmpty()
-            }
-            packageModeWatchers.removeAllIndexed { _, _, listeners ->
-                listeners -= changedListener
-                listeners.isEmpty()
+    override fun getForegroundOps(uid: Int): SparseBooleanArray {
+        return SparseBooleanArray().apply {
+            getUidModes(uid)?.forEachIndexed { _, op, mode ->
+                if (mode == AppOpsManager.MODE_FOREGROUND) {
+                    this[AppOpsManager.strOpToOp(op)] = true
+                }
             }
         }
     }
 
-    override fun getOpModeChangedListeners(op: Int): IndexedSet<OnOpModeChangedListener> {
-        synchronized(lock) {
-            val listeners = opModeWatchers[op]
-            return if (listeners == null) {
-                IndexedSet()
-            } else {
-                IndexedSet(listeners)
+    override fun getForegroundOps(packageName: String, userId: Int): SparseBooleanArray {
+        return SparseBooleanArray().apply {
+            getPackageModes(packageName, userId)?.forEachIndexed { _, op, mode ->
+                if (mode == AppOpsManager.MODE_FOREGROUND) {
+                    this[AppOpsManager.strOpToOp(op)] = true
+                }
             }
         }
     }
 
-    override fun getPackageModeChangedListeners(
-        packageName: String
-    ): IndexedSet<OnOpModeChangedListener> {
-        synchronized(lock) {
-            val listeners = packageModeWatchers[packageName]
-            return if (listeners == null) {
-                IndexedSet()
-            } else {
-                IndexedSet(listeners)
-            }
+    override fun addAppOpsModeChangedListener(listener: AppOpsModeChangedListener): Boolean {
+        synchronized(listenersLock) {
+            val newListeners = ArraySet(listeners)
+            val result = newListeners.add(listener)
+            listeners = newListeners
+            return result
         }
     }
 
-    override fun notifyWatchersOfChange(op: Int, uid: Int) {
-        val listeners = getOpModeChangedListeners(op)
-        listeners.forEachIndexed { _, listener ->
-            notifyOpChanged(listener, op, uid, null)
+    override fun removeAppOpsModeChangedListener(listener: AppOpsModeChangedListener): Boolean {
+        synchronized(listenersLock) {
+            val newListeners = ArraySet(listeners)
+            val result = newListeners.remove(listener)
+            listeners = newListeners
+            return result
         }
     }
 
-    override fun notifyOpChanged(
-        changedListener: OnOpModeChangedListener,
-        op: Int,
-        uid: Int,
-        packageName: String?
-    ) {
-        if (uid != UID_ANY &&
-            changedListener.watchingUid >= 0 &&
-            changedListener.watchingUid != uid
+    inner class OnAppIdAppOpModeChangedListener : AppIdAppOpPolicy.OnAppOpModeChangedListener() {
+        // (uid, appOpCode) -> newMode
+        val pendingChanges = ArrayMap<Pair<Int, Int>, Int>()
+
+        override fun onAppOpModeChanged(
+            appId: Int,
+            userId: Int,
+            appOpName: String,
+            oldMode: Int,
+            newMode: Int
         ) {
-            return
+            val uid = UserHandle.getUid(userId, appId)
+            val appOpCode = AppOpsManager.strOpToOp(appOpName)
+            val key = Pair(uid, appOpCode)
+
+            pendingChanges[key] = newMode
         }
 
-        // See CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE
-        val switchedCodes = when (changedListener.watchedOpCode) {
-            ALL_OPS -> switchedOps.get(op)
-            AppOpsManager.OP_NONE -> intArrayOf(op)
-            else -> intArrayOf(changedListener.watchedOpCode)
-        }
+        override fun onStateMutated() {
+            val listenersLocal = listeners
+            pendingChanges.forEachIndexed { _, key, mode ->
+                listenersLocal.forEachIndexed { _, listener ->
+                    val uid = key.first
+                    val appOpCode = key.second
 
-        for (switchedCode in switchedCodes) {
-            // There are features watching for mode changes such as window manager
-            // and location manager which are in our process. The callbacks in these
-            // features may require permissions our remote caller does not have.
-            val identity = Binder.clearCallingIdentity()
-            try {
-                if (!shouldIgnoreCallback(switchedCode, changedListener)) {
-                    changedListener.onOpModeChanged(switchedCode, uid, packageName)
+                    listener.onUidModeChanged(uid, appOpCode, mode)
                 }
-            } catch (e: RemoteException) {
-                /* ignore */
-            } finally {
-                Binder.restoreCallingIdentity(identity)
             }
+
+            pendingChanges.clear()
         }
     }
 
-    private fun shouldIgnoreCallback(op: Int, listener: OnOpModeChangedListener): Boolean {
-        // If it's a restricted read op, ignore it if watcher doesn't have manage ops permission,
-        // as watcher should not use this to signal if the value is changed.
-        return AppOpsManager.opRestrictsRead(op) && context.checkPermission(
-            Manifest.permission.MANAGE_APPOPS,
-            listener.callingPid,
-            listener.callingUid
-        ) != PackageManager.PERMISSION_GRANTED
-    }
+    private inner class OnPackageAppOpModeChangedListener :
+        PackageAppOpPolicy.OnAppOpModeChangedListener() {
+        // (packageName, userId, appOpCode) -> newMode
+        val pendingChanges = ArrayMap<Triple<String, Int, Int>, Int>()
 
-    /**
-     * Construct a map from each listener (listening to the given op, uid) to all of its associated
-     * packageNames (by reverse-indexing opModeWatchers and packageModeWatchers), then invoke
-     * notifyOpChanged for each listener.
-     */
-    override fun notifyOpChangedForAllPkgsInUid(
-        op: Int,
-        uid: Int,
-        onlyForeground: Boolean,
-        callbackToIgnore: OnOpModeChangedListener?
-    ) {
-        val uidPackageNames = getPackagesForUid(uid)
-        val callbackSpecs = IndexedMap<OnOpModeChangedListener, IndexedSet<String>>()
-
-        fun associateListenerWithPackageNames(
-            listener: OnOpModeChangedListener,
-            packageNames: Array<String>
+        override fun onAppOpModeChanged(
+            packageName: String,
+            userId: Int,
+            appOpName: String,
+            oldMode: Int,
+            newMode: Int
         ) {
-            val listenerIsForeground =
-                listener.flags.hasBits(AppOpsManager.WATCH_FOREGROUND_CHANGES)
-            if (onlyForeground && !listenerIsForeground) {
-                return
-            }
-            val changedPackages = callbackSpecs.getOrPut(listener) { IndexedSet() }
-            changedPackages.addAll(packageNames)
+            val appOpCode = AppOpsManager.strOpToOp(appOpName)
+            val key = Triple(packageName, userId, appOpCode)
+
+            pendingChanges[key] = newMode
         }
 
-        synchronized(lock) {
-            // Collect all listeners from opModeWatchers and pckageModeWatchers
-            val listeners = opModeWatchers[op]
-            listeners?.forEachIndexed { _, listener ->
-                associateListenerWithPackageNames(listener, uidPackageNames)
-            }
-            uidPackageNames.forEachIndexed { _, uidPackageName ->
-                val packageListeners = packageModeWatchers[uidPackageName]
-                packageListeners?.forEachIndexed { _, listener ->
-                    associateListenerWithPackageNames(listener, arrayOf(uidPackageName))
+        override fun onStateMutated() {
+            val listenersLocal = listeners
+            pendingChanges.forEachIndexed { _, key, mode ->
+                listenersLocal.forEachIndexed { _, listener ->
+                    val packageName = key.first
+                    val userId = key.second
+                    val appOpCode = key.third
+
+                    listener.onPackageModeChanged(packageName, userId, appOpCode, mode)
                 }
             }
-            // Remove ignored listeners
-            if (callbackToIgnore != null) {
-                callbackSpecs.remove(callbackToIgnore)
-            }
+
+            pendingChanges.clear()
         }
-
-        // For each (listener, packageName) pair, invoke notifyOpChanged
-        callbackSpecs.forEachIndexed { _, listener, reportedPackageNames ->
-            reportedPackageNames.forEachIndexed { _, reportedPackageName ->
-                handler.sendMessage(
-                    PooledLambda.obtainMessage(
-                        AppOpService::notifyOpChanged, this, listener,
-                        op, uid, reportedPackageName
-                    )
-                )
-            }
-        }
-    }
-
-    private fun getPackagesForUid(uid: Int): Array<String> {
-        // Very early during boot the package manager is not yet or not yet fully started. At this
-        // time there are no packages yet.
-        return try {
-            AppGlobals.getPackageManager()?.getPackagesForUid(uid) ?: EmptyArray.STRING
-        } catch (e: RemoteException) {
-            EmptyArray.STRING
-        }
-    }
-
-    override fun evalForegroundUidOps(
-        uid: Int,
-        foregroundOps: SparseBooleanArray?
-    ): SparseBooleanArray? {
-        synchronized(lock) {
-            val uidModes = getUidModes(uid)
-            return evalForegroundOps(uidModes, foregroundOps)
-        }
-    }
-
-    override fun evalForegroundPackageOps(
-        packageName: String,
-        foregroundOps: SparseBooleanArray?,
-        @UserIdInt userId: Int
-    ): SparseBooleanArray? {
-        synchronized(lock) {
-            val ops = service.getState { getPackageModes(packageName, userId) }
-            return evalForegroundOps(ops, foregroundOps)
-        }
-    }
-
-    private fun evalForegroundOps(
-        ops: IndexedMap<String, Int>?,
-        foregroundOps: SparseBooleanArray?
-    ): SparseBooleanArray? {
-        var foregroundOps = foregroundOps
-        ops?.forEachIndexed { _, opName, opMode ->
-            if (opMode == AppOpsManager.MODE_FOREGROUND) {
-                if (foregroundOps == null) {
-                    foregroundOps = SparseBooleanArray()
-                }
-                evalForegroundWatchers(opName, foregroundOps!!)
-            }
-        }
-        return foregroundOps
-    }
-
-    private fun evalForegroundWatchers(opName: String, foregroundOps: SparseBooleanArray) {
-        val opCode = AppOpsManager.strOpToOp(opName)
-        val listeners = opModeWatchers[opCode]
-        val hasForegroundListeners = foregroundOps[opCode] || listeners?.anyIndexed { _, listener ->
-            listener.flags.hasBits(AppOpsManager.WATCH_FOREGROUND_CHANGES)
-        } ?: false
-        foregroundOps.put(opCode, hasForegroundListeners)
-    }
-
-    override fun dumpListeners(
-        dumpOp: Int,
-        dumpUid: Int,
-        dumpPackage: String?,
-        printWriter: PrintWriter
-    ): Boolean {
-        var needSep = false
-        if (opModeWatchers.size() > 0) {
-            var printedHeader = false
-            opModeWatchers.forEachIndexed { _, op, modeChangedListenerSet ->
-                if (dumpOp >= 0 && dumpOp != op) {
-                    return@forEachIndexed // continue
-                }
-                val opName = AppOpsManager.opToName(op)
-                var printedOpHeader = false
-                modeChangedListenerSet.forEachIndexed listenerLoop@ { listenerIndex, listener ->
-                    with(printWriter) {
-                        if (dumpPackage != null &&
-                            dumpUid != UserHandle.getAppId(listener.watchingUid)) {
-                            return@listenerLoop // continue
-                        }
-                        needSep = true
-                        if (!printedHeader) {
-                            println("  Op mode watchers:")
-                            printedHeader = true
-                        }
-                        if (!printedOpHeader) {
-                            print("    Op ")
-                            print(opName)
-                            println(":")
-                            printedOpHeader = true
-                        }
-                        print("      #")
-                        print(listenerIndex)
-                        print(opName)
-                        print(": ")
-                        println(listener.toString())
-                    }
-                }
-            }
-        }
-
-        if (packageModeWatchers.size > 0 && dumpOp < 0) {
-            var printedHeader = false
-            packageModeWatchers.forEachIndexed { _, packageName, listeners ->
-                with(printWriter) {
-                    if (dumpPackage != null && dumpPackage != packageName) {
-                        return@forEachIndexed // continue
-                    }
-                    needSep = true
-                    if (!printedHeader) {
-                        println("  Package mode watchers:")
-                        printedHeader = true
-                    }
-                    print("    Pkg ")
-                    print(packageName)
-                    println(":")
-                    listeners.forEachIndexed { listenerIndex, listener ->
-                        print("      #")
-                        print(listenerIndex)
-                        print(": ")
-                        println(listener.toString())
-                    }
-                }
-            }
-        }
-        return needSep
-    }
-
-    companion object {
-        private val LOG_TAG = AppOpService::class.java.simpleName
-
-        // Constant meaning that any UID should be matched when dispatching callbacks
-        private const val UID_ANY = -2
-
-        // If watchedOpCode==ALL_OPS, notify for ops affected by the switch-op
-        private const val ALL_OPS = -2
     }
 }
diff --git a/services/permission/java/com/android/server/permission/access/appop/BaseAppOpPersistence.kt b/services/permission/java/com/android/server/permission/access/appop/BaseAppOpPersistence.kt
index 5faf96f..a267637 100644
--- a/services/permission/java/com/android/server/permission/access/appop/BaseAppOpPersistence.kt
+++ b/services/permission/java/com/android/server/permission/access/appop/BaseAppOpPersistence.kt
@@ -16,11 +16,13 @@
 
 package com.android.server.permission.access.appop
 
-import android.util.Log
+import android.util.Slog
 import com.android.modules.utils.BinaryXmlPullParser
 import com.android.modules.utils.BinaryXmlSerializer
 import com.android.server.permission.access.AccessState
+import com.android.server.permission.access.MutableAccessState
 import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
 import com.android.server.permission.access.util.attributeInt
 import com.android.server.permission.access.util.attributeInterned
 import com.android.server.permission.access.util.forEachTag
@@ -30,20 +32,20 @@
 import com.android.server.permission.access.util.tagName
 
 abstract class BaseAppOpPersistence {
-    abstract fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int)
+    abstract fun BinaryXmlPullParser.parseUserState(state: MutableAccessState, userId: Int)
 
     abstract fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int)
 
-    protected fun BinaryXmlPullParser.parseAppOps(appOpModes: IndexedMap<String, Int>) {
+    protected fun BinaryXmlPullParser.parseAppOps(appOpModes: MutableIndexedMap<String, Int>) {
         forEachTag {
             when (tagName) {
                 TAG_APP_OP -> parseAppOp(appOpModes)
-                else -> Log.w(LOG_TAG, "Ignoring unknown tag $name when parsing app-op state")
+                else -> Slog.w(LOG_TAG, "Ignoring unknown tag $name when parsing app-op state")
             }
         }
     }
 
-    private fun BinaryXmlPullParser.parseAppOp(appOpModes: IndexedMap<String, Int>) {
+    private fun BinaryXmlPullParser.parseAppOp(appOpModes: MutableIndexedMap<String, Int>) {
         val name = getAttributeValueOrThrow(ATTR_NAME).intern()
         val mode = getAttributeIntOrThrow(ATTR_MODE)
         appOpModes[name] = mode
diff --git a/services/permission/java/com/android/server/permission/access/appop/BaseAppOpPolicy.kt b/services/permission/java/com/android/server/permission/access/appop/BaseAppOpPolicy.kt
index 9c8c0ce..c0a85f8 100644
--- a/services/permission/java/com/android/server/permission/access/appop/BaseAppOpPolicy.kt
+++ b/services/permission/java/com/android/server/permission/access/appop/BaseAppOpPolicy.kt
@@ -20,6 +20,7 @@
 import com.android.modules.utils.BinaryXmlSerializer
 import com.android.server.permission.access.AccessState
 import com.android.server.permission.access.AppOpUri
+import com.android.server.permission.access.MutableAccessState
 import com.android.server.permission.access.SchemePolicy
 
 abstract class BaseAppOpPolicy(
@@ -28,7 +29,7 @@
     override val objectScheme: String
         get() = AppOpUri.SCHEME
 
-    override fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) {
+    override fun BinaryXmlPullParser.parseUserState(state: MutableAccessState, userId: Int) {
         with(persistence) { this@parseUserState.parseUserState(state, userId) }
     }
 
diff --git a/services/permission/java/com/android/server/permission/access/appop/PackageAppOpMigration.kt b/services/permission/java/com/android/server/permission/access/appop/PackageAppOpMigration.kt
new file mode 100644
index 0000000..03311a2
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/appop/PackageAppOpMigration.kt
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.appop
+
+import android.util.Slog
+import com.android.server.LocalServices
+import com.android.server.appop.AppOpMigrationHelper
+import com.android.server.permission.access.MutableAccessState
+import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.util.PackageVersionMigration
+
+class PackageAppOpMigration {
+    fun migrateUserState(state: MutableAccessState, userId: Int) {
+        val legacyAppOpsManager = LocalServices.getService(AppOpMigrationHelper::class.java)!!
+        if (!legacyAppOpsManager.hasLegacyAppOpState()) {
+            return
+        }
+
+        val legacyPackageAppOpModes = legacyAppOpsManager.getLegacyPackageAppOpModes(userId)
+        val version = PackageVersionMigration.getVersion(userId)
+
+        val userState = state.mutateUserState(userId)!!
+        val packageAppOpModes = userState.mutatePackageAppOpModes()
+        legacyPackageAppOpModes.forEach { (packageName, legacyAppOpModes) ->
+            if (packageName !in state.externalState.packageStates) {
+                Slog.w(LOG_TAG, "Dropping unknown package $packageName when migrating app op state")
+                return@forEach
+            }
+
+            val appOpModes = MutableIndexedMap<String, Int>()
+            packageAppOpModes[packageName] = appOpModes
+            legacyAppOpModes.forEach { (appOpName, appOpMode) ->
+                appOpModes[appOpName] = appOpMode
+            }
+
+            userState.mutatePackageVersions()[packageName] = version
+        }
+    }
+
+    companion object {
+        private val LOG_TAG = PackageAppOpMigration::class.java.simpleName
+    }
+}
diff --git a/services/permission/java/com/android/server/permission/access/appop/PackageAppOpPersistence.kt b/services/permission/java/com/android/server/permission/access/appop/PackageAppOpPersistence.kt
index 6ef117a..169bd69 100644
--- a/services/permission/java/com/android/server/permission/access/appop/PackageAppOpPersistence.kt
+++ b/services/permission/java/com/android/server/permission/access/appop/PackageAppOpPersistence.kt
@@ -16,12 +16,16 @@
 
 package com.android.server.permission.access.appop
 
-import android.util.Log
+import android.util.Slog
 import com.android.modules.utils.BinaryXmlPullParser
 import com.android.modules.utils.BinaryXmlSerializer
 import com.android.server.permission.access.AccessState
-import com.android.server.permission.access.UserState
+import com.android.server.permission.access.MutableAccessState
+import com.android.server.permission.access.MutablePackageAppOpModes
+import com.android.server.permission.access.PackageAppOpModes
+import com.android.server.permission.access.WriteMode
 import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
 import com.android.server.permission.access.util.attributeInterned
 import com.android.server.permission.access.util.forEachTag
 import com.android.server.permission.access.util.getAttributeValueOrThrow
@@ -29,44 +33,45 @@
 import com.android.server.permission.access.util.tagName
 
 class PackageAppOpPersistence : BaseAppOpPersistence() {
-    override fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) {
+    override fun BinaryXmlPullParser.parseUserState(state: MutableAccessState, userId: Int) {
         when (tagName) {
             TAG_PACKAGE_APP_OPS -> parsePackageAppOps(state, userId)
             else -> {}
         }
     }
 
-    private fun BinaryXmlPullParser.parsePackageAppOps(state: AccessState, userId: Int) {
-        val userState = state.userStates[userId]
+    private fun BinaryXmlPullParser.parsePackageAppOps(state: MutableAccessState, userId: Int) {
+        val userState = state.mutateUserState(userId, WriteMode.NONE)!!
+        val packageAppOpModes = userState.mutatePackageAppOpModes()
         forEachTag {
             when (tagName) {
-                TAG_PACKAGE -> parsePackage(userState)
-                else -> Log.w(LOG_TAG, "Ignoring unknown tag $name when parsing app-op state")
+                TAG_PACKAGE -> parsePackage(packageAppOpModes)
+                else -> Slog.w(LOG_TAG, "Ignoring unknown tag $name when parsing app-op state")
             }
         }
-        userState.packageAppOpModes.retainAllIndexed { _, packageName, _ ->
-            val hasPackage = packageName in state.systemState.packageStates
-            if (!hasPackage) {
-                Log.w(LOG_TAG, "Dropping unknown package $packageName when parsing app-op state")
+        packageAppOpModes.forEachReversedIndexed { packageNameIndex, packageName, _ ->
+            if (packageName !in state.externalState.packageStates) {
+                Slog.w(LOG_TAG, "Dropping unknown package $packageName when parsing app-op state")
+                packageAppOpModes.removeAt(packageNameIndex)
+                userState.requestWriteMode(WriteMode.ASYNCHRONOUS)
             }
-            hasPackage
         }
     }
 
-    private fun BinaryXmlPullParser.parsePackage(userState: UserState) {
+    private fun BinaryXmlPullParser.parsePackage(packageAppOpModes: MutablePackageAppOpModes) {
         val packageName = getAttributeValueOrThrow(ATTR_NAME).intern()
-        val appOpModes = IndexedMap<String, Int>()
-        userState.packageAppOpModes[packageName] = appOpModes
+        val appOpModes = MutableIndexedMap<String, Int>()
+        packageAppOpModes[packageName] = appOpModes
         parseAppOps(appOpModes)
     }
 
     override fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) {
-        serializePackageAppOps(state.userStates[userId])
+        serializePackageAppOps(state.userStates[userId]!!.packageAppOpModes)
     }
 
-    private fun BinaryXmlSerializer.serializePackageAppOps(userState: UserState) {
+    private fun BinaryXmlSerializer.serializePackageAppOps(packageAppOpModes: PackageAppOpModes) {
         tag(TAG_PACKAGE_APP_OPS) {
-            userState.packageAppOpModes.forEachIndexed { _, packageName, appOpModes ->
+            packageAppOpModes.forEachIndexed { _, packageName, appOpModes ->
                 serializePackage(packageName, appOpModes)
             }
         }
diff --git a/services/permission/java/com/android/server/permission/access/appop/PackageAppOpPolicy.kt b/services/permission/java/com/android/server/permission/access/appop/PackageAppOpPolicy.kt
index 7d3578d..5398a57 100644
--- a/services/permission/java/com/android/server/permission/access/appop/PackageAppOpPolicy.kt
+++ b/services/permission/java/com/android/server/permission/access/appop/PackageAppOpPolicy.kt
@@ -17,63 +17,62 @@
 package com.android.server.permission.access.appop
 
 import android.app.AppOpsManager
-import com.android.server.permission.access.AccessUri
-import com.android.server.permission.access.AppOpUri
 import com.android.server.permission.access.GetStateScope
+import com.android.server.permission.access.MutableAccessState
 import com.android.server.permission.access.MutateStateScope
 import com.android.server.permission.access.PackageUri
 import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
+import com.android.server.pm.pkg.PackageState
 
 class PackageAppOpPolicy : BaseAppOpPolicy(PackageAppOpPersistence()) {
+    private val migration = PackageAppOpMigration()
+
+    private val upgrade = PackageAppOpUpgrade(this)
+
     @Volatile
-    private var onAppOpModeChangedListeners = IndexedListSet<OnAppOpModeChangedListener>()
+    private var onAppOpModeChangedListeners: IndexedListSet<OnAppOpModeChangedListener> =
+        MutableIndexedListSet()
     private val onAppOpModeChangedListenersLock = Any()
 
     override val subjectScheme: String
         get() = PackageUri.SCHEME
 
-    override fun GetStateScope.getDecision(subject: AccessUri, `object`: AccessUri): Int {
-        subject as PackageUri
-        `object` as AppOpUri
-        return getAppOpMode(subject.packageName, subject.userId, `object`.appOpName)
-    }
-
-    override fun MutateStateScope.setDecision(
-        subject: AccessUri,
-        `object`: AccessUri,
-        decision: Int
-    ) {
-        subject as PackageUri
-        `object` as AppOpUri
-        setAppOpMode(subject.packageName, subject.userId, `object`.appOpName, decision)
-    }
-
     override fun GetStateScope.onStateMutated() {
         onAppOpModeChangedListeners.forEachIndexed { _, it -> it.onStateMutated() }
     }
 
     override fun MutateStateScope.onPackageRemoved(packageName: String, appId: Int) {
-        newState.userStates.forEachIndexed { _, _, userState ->
-            userState.packageAppOpModes -= packageName
-            userState.requestWrite()
-            // Skip notifying the change listeners since the package no longer exists.
+        newState.userStates.forEachIndexed { userStateIndex, _, userState ->
+            val packageNameIndex = userState.packageAppOpModes.indexOfKey(packageName)
+            if (packageNameIndex >= 0) {
+                newState.mutateUserStateAt(userStateIndex).mutatePackageAppOpModes()
+                    .removeAt(packageNameIndex)
+                // Skip notifying the change listeners since the package no longer exists.
+            }
         }
     }
 
     fun GetStateScope.getAppOpModes(packageName: String, userId: Int): IndexedMap<String, Int>? =
-        state.userStates[userId].packageAppOpModes[packageName]
+        state.userStates[userId]?.packageAppOpModes?.get(packageName)
 
     fun MutateStateScope.removeAppOpModes(packageName: String, userId: Int): Boolean {
-        val userState = newState.userStates[userId]
-        val isChanged = userState.packageAppOpModes.remove(packageName) != null
-        if (isChanged) {
-            userState.requestWrite()
+        val userStateIndex = newState.userStates.indexOfKey(userId)
+        if (userStateIndex < 0) {
+            return false
         }
-        return isChanged
+        val packageNameIndex = newState.userStates.valueAt(userStateIndex).packageAppOpModes
+            .indexOfKey(packageName)
+        if (packageNameIndex < 0) {
+            return false
+        }
+        newState.mutateUserStateAt(userStateIndex).mutatePackageAppOpModes()
+            .removeAt(packageNameIndex)
+        return true
     }
 
     fun GetStateScope.getAppOpMode(packageName: String, userId: Int, appOpName: String): Int =
-        state.userStates[userId].packageAppOpModes[packageName]
+        state.userStates[userId]?.packageAppOpModes?.get(packageName)
             .getWithDefault(appOpName, AppOpsManager.opToDefaultMode(appOpName))
 
     fun MutateStateScope.setAppOpMode(
@@ -82,23 +81,18 @@
         appOpName: String,
         mode: Int
     ): Boolean {
-        val userState = newState.userStates[userId]
-        val packageAppOpModes = userState.packageAppOpModes
-        var appOpModes = packageAppOpModes[packageName]
         val defaultMode = AppOpsManager.opToDefaultMode(appOpName)
-        val oldMode = appOpModes.getWithDefault(appOpName, defaultMode)
+        val oldMode = newState.userStates[userId]!!.packageAppOpModes[packageName]
+            .getWithDefault(appOpName, defaultMode)
         if (oldMode == mode) {
             return false
         }
-        if (appOpModes == null) {
-            appOpModes = IndexedMap()
-            packageAppOpModes[packageName] = appOpModes
-        }
+        val packageAppOpModes = newState.mutateUserState(userId)!!.mutatePackageAppOpModes()
+        val appOpModes = packageAppOpModes.mutateOrPut(packageName) { MutableIndexedMap() }
         appOpModes.putWithDefault(appOpName, mode, defaultMode)
         if (appOpModes.isEmpty()) {
             packageAppOpModes -= packageName
         }
-        userState.requestWrite()
         onAppOpModeChangedListeners.forEachIndexed { _, it ->
             it.onAppOpModeChanged(packageName, userId, appOpName, oldMode, mode)
         }
@@ -117,6 +111,18 @@
         }
     }
 
+    override fun migrateUserState(state: MutableAccessState, userId: Int) {
+        with(migration) { migrateUserState(state, userId) }
+    }
+
+    override fun MutateStateScope.upgradePackageState(
+        packageState: PackageState,
+        userId: Int,
+        version: Int,
+    ) {
+        with(upgrade) { upgradePackageState(packageState, userId, version) }
+    }
+
     /**
      * Listener for app op mode changes.
      */
diff --git a/services/permission/java/com/android/server/permission/access/appop/PackageAppOpUpgrade.kt b/services/permission/java/com/android/server/permission/access/appop/PackageAppOpUpgrade.kt
new file mode 100644
index 0000000..8e37093
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/appop/PackageAppOpUpgrade.kt
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.appop
+
+import android.app.AppOpsManager
+import com.android.server.permission.access.MutateStateScope
+import com.android.server.pm.pkg.PackageState
+
+class PackageAppOpUpgrade(private val policy: PackageAppOpPolicy) {
+    fun MutateStateScope.upgradePackageState(
+        packageState: PackageState,
+        userId: Int,
+        version: Int,
+    ) {
+        if (version <= 2) {
+            with(policy) {
+                val appOpMode = getAppOpMode(
+                    packageState.packageName, userId, AppOpsManager.OPSTR_RUN_IN_BACKGROUND
+                )
+                setAppOpMode(
+                    packageState.packageName, userId, AppOpsManager.OPSTR_RUN_ANY_IN_BACKGROUND,
+                    appOpMode
+                )
+            }
+        }
+    }
+}
diff --git a/services/permission/java/com/android/server/permission/access/appop/UidAppOpPersistence.kt b/services/permission/java/com/android/server/permission/access/appop/UidAppOpPersistence.kt
deleted file mode 100644
index 7a965d4..0000000
--- a/services/permission/java/com/android/server/permission/access/appop/UidAppOpPersistence.kt
+++ /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.server.permission.access.appop
-
-import android.util.Log
-import com.android.modules.utils.BinaryXmlPullParser
-import com.android.modules.utils.BinaryXmlSerializer
-import com.android.server.permission.access.AccessState
-import com.android.server.permission.access.UserState
-import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
-import com.android.server.permission.access.util.attributeInt
-import com.android.server.permission.access.util.forEachTag
-import com.android.server.permission.access.util.getAttributeIntOrThrow
-import com.android.server.permission.access.util.tag
-import com.android.server.permission.access.util.tagName
-
-class UidAppOpPersistence : BaseAppOpPersistence() {
-    override fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) {
-        when (tagName) {
-            TAG_UID_APP_OPS -> parseUidAppOps(state, userId)
-            else -> {}
-        }
-    }
-
-    private fun BinaryXmlPullParser.parseUidAppOps(state: AccessState, userId: Int) {
-        val userState = state.userStates[userId]
-        forEachTag {
-            when (tagName) {
-                TAG_APP_ID -> parseAppId(userState)
-                else -> Log.w(LOG_TAG, "Ignoring unknown tag $name when parsing app-op state")
-            }
-        }
-        userState.uidAppOpModes.retainAllIndexed { _, appId, _ ->
-            val hasAppId = appId in state.systemState.appIds
-            if (!hasAppId) {
-                Log.w(LOG_TAG, "Dropping unknown app ID $appId when parsing app-op state")
-            }
-            hasAppId
-        }
-    }
-
-    private fun BinaryXmlPullParser.parseAppId(userState: UserState) {
-        val appId = getAttributeIntOrThrow(ATTR_ID)
-        val appOpModes = IndexedMap<String, Int>()
-        userState.uidAppOpModes[appId] = appOpModes
-        parseAppOps(appOpModes)
-    }
-
-    override fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) {
-        serializeUidAppOps(state.userStates[userId])
-    }
-
-    private fun BinaryXmlSerializer.serializeUidAppOps(userState: UserState) {
-        tag(TAG_UID_APP_OPS) {
-            userState.uidAppOpModes.forEachIndexed { _, appId, appOpModes ->
-                serializeAppId(appId, appOpModes)
-            }
-        }
-    }
-
-    private fun BinaryXmlSerializer.serializeAppId(
-        appId: Int,
-        appOpModes: IndexedMap<String, Int>
-    ) {
-        tag(TAG_APP_ID) {
-            attributeInt(ATTR_ID, appId)
-            serializeAppOps(appOpModes)
-        }
-    }
-
-    companion object {
-        private val LOG_TAG = UidAppOpPersistence::class.java.simpleName
-
-        private const val TAG_APP_ID = "app-id"
-        private const val TAG_UID_APP_OPS = "uid-app-ops"
-
-        private const val ATTR_ID = "id"
-    }
-}
diff --git a/services/permission/java/com/android/server/permission/access/appop/UidAppOpPolicy.kt b/services/permission/java/com/android/server/permission/access/appop/UidAppOpPolicy.kt
deleted file mode 100644
index 0ba9a1e..0000000
--- a/services/permission/java/com/android/server/permission/access/appop/UidAppOpPolicy.kt
+++ /dev/null
@@ -1,146 +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.server.permission.access.appop
-
-import android.app.AppOpsManager
-import com.android.server.permission.access.AccessUri
-import com.android.server.permission.access.AppOpUri
-import com.android.server.permission.access.GetStateScope
-import com.android.server.permission.access.MutateStateScope
-import com.android.server.permission.access.UidUri
-import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
-
-class UidAppOpPolicy : BaseAppOpPolicy(UidAppOpPersistence()) {
-    @Volatile
-    private var onAppOpModeChangedListeners = IndexedListSet<OnAppOpModeChangedListener>()
-    private val onAppOpModeChangedListenersLock = Any()
-
-    override val subjectScheme: String
-        get() = UidUri.SCHEME
-
-    override fun GetStateScope.getDecision(subject: AccessUri, `object`: AccessUri): Int {
-        subject as UidUri
-        `object` as AppOpUri
-        return getAppOpMode(subject.appId, subject.userId, `object`.appOpName)
-    }
-
-    override fun MutateStateScope.setDecision(
-        subject: AccessUri,
-        `object`: AccessUri,
-        decision: Int
-    ) {
-        subject as UidUri
-        `object` as AppOpUri
-        setAppOpMode(subject.appId, subject.userId, `object`.appOpName, decision)
-    }
-
-    override fun GetStateScope.onStateMutated() {
-        onAppOpModeChangedListeners.forEachIndexed { _, it -> it.onStateMutated() }
-    }
-
-    override fun MutateStateScope.onAppIdRemoved(appId: Int) {
-        newState.userStates.forEachIndexed { _, _, userState ->
-            userState.uidAppOpModes -= appId
-            userState.requestWrite()
-            // Skip notifying the change listeners since the app ID no longer exists.
-        }
-    }
-
-    fun GetStateScope.getAppOpModes(appId: Int, userId: Int): IndexedMap<String, Int>? =
-        state.userStates[userId].uidAppOpModes[appId]
-
-    fun MutateStateScope.removeAppOpModes(appId: Int, userId: Int): Boolean {
-        val userState = newState.userStates[userId]
-        val isChanged = userState.uidAppOpModes.removeReturnOld(appId) != null
-        if (isChanged) {
-            userState.requestWrite()
-        }
-        return isChanged
-    }
-
-    fun GetStateScope.getAppOpMode(appId: Int, userId: Int, appOpName: String): Int =
-        state.userStates[userId].uidAppOpModes[appId]
-            .getWithDefault(appOpName, AppOpsManager.opToDefaultMode(appOpName))
-
-    fun MutateStateScope.setAppOpMode(
-        appId: Int,
-        userId: Int,
-        appOpName: String,
-        mode: Int
-    ): Boolean {
-        val userState = newState.userStates[userId]
-        val uidAppOpModes = userState.uidAppOpModes
-        var appOpModes = uidAppOpModes[appId]
-        val defaultMode = AppOpsManager.opToDefaultMode(appOpName)
-        val oldMode = appOpModes.getWithDefault(appOpName, defaultMode)
-        if (oldMode == mode) {
-            return false
-        }
-        if (appOpModes == null) {
-            appOpModes = IndexedMap()
-            uidAppOpModes[appId] = appOpModes
-        }
-        appOpModes.putWithDefault(appOpName, mode, defaultMode)
-        if (appOpModes.isEmpty()) {
-            uidAppOpModes -= appId
-        }
-        userState.requestWrite()
-        onAppOpModeChangedListeners.forEachIndexed { _, it ->
-            it.onAppOpModeChanged(appId, userId, appOpName, oldMode, mode)
-        }
-        return true
-    }
-
-    fun addOnAppOpModeChangedListener(listener: OnAppOpModeChangedListener) {
-        synchronized(onAppOpModeChangedListenersLock) {
-            onAppOpModeChangedListeners = onAppOpModeChangedListeners + listener
-        }
-    }
-
-    fun removeOnAppOpModeChangedListener(listener: OnAppOpModeChangedListener) {
-        synchronized(onAppOpModeChangedListenersLock) {
-            onAppOpModeChangedListeners = onAppOpModeChangedListeners - listener
-        }
-    }
-
-    /**
-     * Listener for app op mode changes.
-     */
-    abstract class OnAppOpModeChangedListener {
-        /**
-         * Called when an app op mode change has been made to the upcoming new state.
-         *
-         * Implementations should keep this method fast to avoid stalling the locked state mutation,
-         * and only call external code after [onStateMutated] when the new state has actually become
-         * the current state visible to external code.
-         */
-        abstract fun onAppOpModeChanged(
-            appId: Int,
-            userId: Int,
-            appOpName: String,
-            oldMode: Int,
-            newMode: Int
-        )
-
-        /**
-         * Called when the upcoming new state has become the current state.
-         *
-         * Implementations should keep this method fast to avoid stalling the locked state mutation.
-         */
-        abstract fun onStateMutated()
-    }
-}
diff --git a/services/permission/java/com/android/server/permission/access/collection/ArrayMapExtensions.kt b/services/permission/java/com/android/server/permission/access/collection/ArrayMapExtensions.kt
new file mode 100644
index 0000000..686db42
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/collection/ArrayMapExtensions.kt
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.collection
+
+import android.util.ArrayMap
+
+inline fun <K, V> ArrayMap<K, V>.allIndexed(predicate: (Int, K, V) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (!predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <K, V> ArrayMap<K, V>.anyIndexed(predicate: (Int, K, V) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return true
+        }
+    }
+    return false
+}
+
+inline fun <K, V> ArrayMap<K, V>.forEachIndexed(action: (Int, K, V) -> Unit) {
+    for (index in 0 until size) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+inline fun <K, V> ArrayMap<K, V>.forEachReversedIndexed(action: (Int, K, V) -> Unit) {
+    for (index in lastIndex downTo 0) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+inline fun <K, V> ArrayMap<K, V>.getOrPut(key: K, defaultValue: () -> V): V {
+    get(key)?.let { return it }
+    return defaultValue().also { put(key, it) }
+}
+
+inline val <K, V> ArrayMap<K, V>.lastIndex: Int
+    get() = size - 1
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <K, V> ArrayMap<K, V>.minusAssign(key: K) {
+    remove(key)
+}
+
+inline fun <K, V> ArrayMap<K, V>.noneIndexed(predicate: (Int, K, V) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <K, V> ArrayMap<K, V>.removeAllIndexed(predicate: (Int, K, V) -> Boolean): Boolean {
+    var isChanged = false
+    forEachReversedIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            removeAt(index)
+            isChanged = true
+        }
+    }
+    return isChanged
+}
+
+inline fun <K, V> ArrayMap<K, V>.retainAllIndexed(predicate: (Int, K, V) -> Boolean): Boolean {
+    var isChanged = false
+    forEachReversedIndexed { index, key, value ->
+        if (!predicate(index, key, value)) {
+            removeAt(index)
+            isChanged = true
+        }
+    }
+    return isChanged
+}
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <K, V> ArrayMap<K, V>.set(key: K, value: V) {
+    put(key, value)
+}
diff --git a/services/permission/java/com/android/server/permission/access/collection/ArraySetExtensions.kt b/services/permission/java/com/android/server/permission/access/collection/ArraySetExtensions.kt
new file mode 100644
index 0000000..4710103
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/collection/ArraySetExtensions.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.server.permission.access.collection
+
+import android.util.ArraySet
+
+fun <T> arraySetOf(vararg elements: T): ArraySet<T> = ArraySet(elements.asList())
+
+inline fun <T> ArraySet<T>.allIndexed(predicate: (Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, value ->
+        if (!predicate(index, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <T> ArraySet<T>.anyIndexed(predicate: (Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, value ->
+        if (predicate(index, value)) {
+            return true
+        }
+    }
+    return false
+}
+
+inline fun <T> ArraySet<T>.forEachIndexed(action: (Int, T) -> Unit) {
+    for (index in 0 until size) {
+        action(index, valueAt(index))
+    }
+}
+
+inline fun <T> ArraySet<T>.forEachReversedIndexed(action: (Int, T) -> Unit) {
+    for (index in lastIndex downTo 0) {
+        action(index, valueAt(index))
+    }
+}
+
+inline val <T> ArraySet<T>.lastIndex: Int
+    get() = size - 1
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <T> ArraySet<T>.minusAssign(value: T) {
+    remove(value)
+}
+
+inline fun <T> ArraySet<T>.noneIndexed(predicate: (Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, value ->
+        if (predicate(index, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <T> ArraySet<T>.plusAssign(value: T) {
+    add(value)
+}
+
+inline fun <T> ArraySet<T>.removeAllIndexed(predicate: (Int, T) -> Boolean): Boolean {
+    var isChanged = false
+    forEachReversedIndexed { index, value ->
+        if (predicate(index, value)) {
+            removeAt(index)
+            isChanged = true
+        }
+    }
+    return isChanged
+}
+
+inline fun <T> ArraySet<T>.retainAllIndexed(predicate: (Int, T) -> Boolean): Boolean {
+    var isChanged = false
+    forEachReversedIndexed { index, value ->
+        if (!predicate(index, value)) {
+            removeAt(index)
+            isChanged = true
+        }
+    }
+    return isChanged
+}
diff --git a/services/permission/java/com/android/server/permission/access/collection/IndexedList.kt b/services/permission/java/com/android/server/permission/access/collection/IndexedList.kt
deleted file mode 100644
index f4ecceb..0000000
--- a/services/permission/java/com/android/server/permission/access/collection/IndexedList.kt
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.permission.access.collection
-
-typealias IndexedList<T> = ArrayList<T>
-
-inline fun <T> IndexedList<T>.allIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    forEachIndexed { index, element ->
-        if (!predicate(index, element)) {
-            return false
-        }
-    }
-    return true
-}
-
-inline fun <T> IndexedList<T>.anyIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    forEachIndexed { index, element ->
-        if (predicate(index, element)) {
-            return true
-        }
-    }
-    return false
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline fun <T> IndexedList<T>.copy(): IndexedList<T> = IndexedList(this)
-
-inline fun <T> IndexedList<T>.forEachIndexed(action: (Int, T) -> Unit) {
-    for (index in indices) {
-        action(index, this[index])
-    }
-}
-
-inline fun <T> IndexedList<T>.forEachReversedIndexed(action: (Int, T) -> Unit) {
-    for (index in lastIndex downTo 0) {
-        action(index, this[index])
-    }
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <T> IndexedList<T>.minus(element: T): IndexedList<T> =
-    copy().apply { this -= element }
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <T> IndexedList<T>.minusAssign(element: T) {
-    remove(element)
-}
-
-inline fun <T> IndexedList<T>.noneIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    forEachIndexed { index, element ->
-        if (predicate(index, element)) {
-            return false
-        }
-    }
-    return true
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <T> IndexedList<T>.plus(element: T): IndexedList<T> =
-    copy().apply { this += element }
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <T> IndexedList<T>.plusAssign(element: T) {
-    add(element)
-}
-
-inline fun <T> IndexedList<T>.removeAllIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, element ->
-        if (predicate(index, element)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
-
-inline fun <T> IndexedList<T>.retainAllIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, element ->
-        if (!predicate(index, element)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
-
-inline fun <T, R> IndexedList<T>.mapNotNullIndexed(transform: (T) -> R?): IndexedList<R> =
-    IndexedList<R>().also { destination ->
-        forEachIndexed { _, element ->
-            transform(element)?.let { destination += it }
-        }
-    }
diff --git a/services/permission/java/com/android/server/permission/access/collection/IndexedListSet.kt b/services/permission/java/com/android/server/permission/access/collection/IndexedListSet.kt
deleted file mode 100644
index c40f7ee..0000000
--- a/services/permission/java/com/android/server/permission/access/collection/IndexedListSet.kt
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.permission.access.collection
-
-class IndexedListSet<T> private constructor(
-    private val list: ArrayList<T>
-) : MutableSet<T> {
-    constructor() : this(ArrayList())
-
-    override val size: Int
-        get() = list.size
-
-    override fun contains(element: T): Boolean = list.contains(element)
-
-    override fun isEmpty(): Boolean = list.isEmpty()
-
-    override fun iterator(): MutableIterator<T> = list.iterator()
-
-    override fun containsAll(elements: Collection<T>): Boolean {
-        throw NotImplementedError()
-    }
-
-    fun elementAt(index: Int): T = list[index]
-
-    fun indexOf(element: T): Int = list.indexOf(element)
-
-    override fun add(element: T): Boolean =
-        if (list.contains(element)) {
-            false
-        } else {
-            list.add(element)
-            true
-        }
-
-    override fun remove(element: T): Boolean = list.remove(element)
-
-    override fun clear() {
-        list.clear()
-    }
-
-    override fun addAll(elements: Collection<T>): Boolean {
-        throw NotImplementedError()
-    }
-
-    override fun removeAll(elements: Collection<T>): Boolean {
-        throw NotImplementedError()
-    }
-
-    override fun retainAll(elements: Collection<T>): Boolean {
-        throw NotImplementedError()
-    }
-
-    fun removeAt(index: Int): T? = list.removeAt(index)
-
-    fun copy(): IndexedListSet<T> = IndexedListSet(ArrayList(list))
-}
-
-inline fun <T> IndexedListSet<T>.allIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    forEachIndexed { index, element ->
-        if (!predicate(index, element)) {
-            return false
-        }
-    }
-    return true
-}
-
-inline fun <T> IndexedListSet<T>.anyIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    forEachIndexed { index, element ->
-        if (predicate(index, element)) {
-            return true
-        }
-    }
-    return false
-}
-
-inline fun <T> IndexedListSet<T>.forEachIndexed(action: (Int, T) -> Unit) {
-    for (index in indices) {
-        action(index, elementAt(index))
-    }
-}
-
-inline fun <T> IndexedListSet<T>.forEachReversedIndexed(action: (Int, T) -> Unit) {
-    for (index in lastIndex downTo 0) {
-        action(index, elementAt(index))
-    }
-}
-
-inline val <T> IndexedListSet<T>.lastIndex: Int
-    get() = size - 1
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <T> IndexedListSet<T>.minus(element: T): IndexedListSet<T> =
-    copy().apply { this -= element }
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <T> IndexedListSet<T>.minusAssign(element: T) {
-    remove(element)
-}
-
-inline fun <T> IndexedListSet<T>.noneIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    forEachIndexed { index, element ->
-        if (predicate(index, element)) {
-            return false
-        }
-    }
-    return true
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <T> IndexedListSet<T>.plus(element: T): IndexedListSet<T> =
-    copy().apply { this += element }
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <T> IndexedListSet<T>.plusAssign(element: T) {
-    add(element)
-}
-
-inline fun <T> IndexedListSet<T>.removeAllIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, element ->
-        if (predicate(index, element)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
-
-inline fun <T> IndexedListSet<T>.retainAllIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, element ->
-        if (!predicate(index, element)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
diff --git a/services/permission/java/com/android/server/permission/access/collection/IndexedMap.kt b/services/permission/java/com/android/server/permission/access/collection/IndexedMap.kt
deleted file mode 100644
index 998d206..0000000
--- a/services/permission/java/com/android/server/permission/access/collection/IndexedMap.kt
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.permission.access.collection
-
-import android.util.ArrayMap
-
-typealias IndexedMap<K, V> = ArrayMap<K, V>
-
-inline fun <K, V> IndexedMap<K, V>.allIndexed(predicate: (Int, K, V) -> Boolean): Boolean {
-    forEachIndexed { index, key, value ->
-        if (!predicate(index, key, value)) {
-            return false
-        }
-    }
-    return true
-}
-
-inline fun <K, V> IndexedMap<K, V>.anyIndexed(predicate: (Int, K, V) -> Boolean): Boolean {
-    forEachIndexed { index, key, value ->
-        if (predicate(index, key, value)) {
-            return true
-        }
-    }
-    return false
-}
-
-inline fun <K, V> IndexedMap<K, V>.copy(copyValue: (V) -> V): IndexedMap<K, V> =
-    IndexedMap(this).apply {
-        forEachValueIndexed { index, value ->
-            setValueAt(index, copyValue(value))
-        }
-    }
-
-inline fun <K, V, R> IndexedMap<K, V>.firstNotNullOfOrNullIndexed(transform: (Int, K, V) -> R): R? {
-    forEachIndexed { index, key, value ->
-        transform(index, key, value)?.let { return it }
-    }
-    return null
-}
-
-inline fun <K, V> IndexedMap<K, V>.forEachIndexed(action: (Int, K, V) -> Unit) {
-    for (index in 0 until size) {
-        action(index, keyAt(index), valueAt(index))
-    }
-}
-
-inline fun <K, V> IndexedMap<K, V>.forEachKeyIndexed(action: (Int, K) -> Unit) {
-    for (index in 0 until size) {
-        action(index, keyAt(index))
-    }
-}
-
-inline fun <K, V> IndexedMap<K, V>.forEachReversedIndexed(action: (Int, K, V) -> Unit) {
-    for (index in lastIndex downTo 0) {
-        action(index, keyAt(index), valueAt(index))
-    }
-}
-
-inline fun <K, V> IndexedMap<K, V>.forEachValueIndexed(action: (Int, V) -> Unit) {
-    for (index in 0 until size) {
-        action(index, valueAt(index))
-    }
-}
-
-inline fun <K, V> IndexedMap<K, V>.getOrPut(key: K, defaultValue: () -> V): V {
-    get(key)?.let { return it }
-    return defaultValue().also { put(key, it) }
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline fun <K, V> IndexedMap<K, V>?.getWithDefault(key: K, defaultValue: V): V {
-    this ?: return defaultValue
-    val index = indexOfKey(key)
-    return if (index >= 0) valueAt(index) else defaultValue
-}
-
-inline val <K, V> IndexedMap<K, V>.lastIndex: Int
-    get() = size - 1
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <K, V> IndexedMap<K, V>.minusAssign(key: K) {
-    remove(key)
-}
-
-inline fun <K, V> IndexedMap<K, V>.noneIndexed(predicate: (Int, K, V) -> Boolean): Boolean {
-    forEachIndexed { index, key, value ->
-        if (predicate(index, key, value)) {
-            return false
-        }
-    }
-    return true
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline fun <K, V> IndexedMap<K, V>.putWithDefault(key: K, value: V, defaultValue: V): V {
-    val index = indexOfKey(key)
-    if (index >= 0) {
-        val oldValue = valueAt(index)
-        if (value != oldValue) {
-            if (value == defaultValue) {
-                removeAt(index)
-            } else {
-                setValueAt(index, value)
-            }
-        }
-        return oldValue
-    } else {
-        if (value != defaultValue) {
-            put(key, value)
-        }
-        return defaultValue
-    }
-}
-
-inline fun <K, V> IndexedMap<K, V>.removeAllIndexed(predicate: (Int, K, V) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, key, value ->
-        if (predicate(index, key, value)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
-
-inline fun <K, V> IndexedMap<K, V>.retainAllIndexed(predicate: (Int, K, V) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, key, value ->
-        if (!predicate(index, key, value)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
-
-inline fun <K, V, R> IndexedMap<K, V>.mapIndexed(transform: (Int, K, V) -> R): IndexedList<R> =
-    IndexedList<R>().also { destination ->
-        forEachIndexed { index, key, value ->
-            transform(index, key, value).let { destination += it }
-        }
-    }
-
-inline fun <K, V, R> IndexedMap<K, V>.mapNotNullIndexed(
-    transform: (Int, K, V) -> R?
-): IndexedList<R> =
-    IndexedList<R>().also { destination ->
-        forEachIndexed { index, key, value ->
-            transform(index, key, value)?.let { destination += it }
-        }
-    }
-
-inline fun <K, V, R> IndexedMap<K, V>.mapNotNullIndexedToSet(
-    transform: (Int, K, V) -> R?
-): IndexedSet<R> =
-    IndexedSet<R>().also { destination ->
-        forEachIndexed { index, key, value ->
-            transform(index, key, value)?.let { destination += it }
-        }
-    }
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <K, V> IndexedMap<K, V>.set(key: K, value: V) {
-    put(key, value)
-}
diff --git a/services/permission/java/com/android/server/permission/access/collection/IndexedSet.kt b/services/permission/java/com/android/server/permission/access/collection/IndexedSet.kt
deleted file mode 100644
index 13fa31f..0000000
--- a/services/permission/java/com/android/server/permission/access/collection/IndexedSet.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.server.permission.access.collection
-
-import android.util.ArraySet
-
-typealias IndexedSet<T> = ArraySet<T>
-
-inline fun <T> IndexedSet<T>.allIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    forEachIndexed { index, element ->
-        if (!predicate(index, element)) {
-            return false
-        }
-    }
-    return true
-}
-
-inline fun <T> IndexedSet<T>.anyIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    forEachIndexed { index, element ->
-        if (predicate(index, element)) {
-            return true
-        }
-    }
-    return false
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline fun <T> IndexedSet<T>.copy(): IndexedSet<T> = IndexedSet(this)
-
-@Suppress("NOTHING_TO_INLINE")
-inline fun <T> IndexedSet<T>.elementAt(index: Int): T = valueAt(index)
-
-inline fun <T> IndexedSet<T>.forEachIndexed(action: (Int, T) -> Unit) {
-    for (index in indices) {
-        action(index, elementAt(index))
-    }
-}
-
-inline fun <T> IndexedSet<T>.forEachReversedIndexed(action: (Int, T) -> Unit) {
-    for (index in lastIndex downTo 0) {
-        action(index, elementAt(index))
-    }
-}
-
-inline val <T> IndexedSet<T>.lastIndex: Int
-    get() = size - 1
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <T> IndexedSet<T>.minus(element: T): IndexedSet<T> =
-    copy().apply { this -= element }
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <T> IndexedSet<T>.minusAssign(element: T) {
-    remove(element)
-}
-
-inline fun <T> IndexedSet<T>.noneIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    forEachIndexed { index, element ->
-        if (predicate(index, element)) {
-            return false
-        }
-    }
-    return true
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <T> IndexedSet<T>.plus(element: T): IndexedSet<T> =
-    copy().apply { this += element }
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <T> IndexedSet<T>.plusAssign(element: T) {
-    add(element)
-}
-
-inline fun <T> IndexedSet<T>.removeAllIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, element ->
-        if (predicate(index, element)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
-
-inline fun <T> IndexedSet<T>.retainAllIndexed(predicate: (Int, T) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, element ->
-        if (!predicate(index, element)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline fun <T> indexedSetOf(vararg elements: T): IndexedSet<T> = IndexedSet(elements.asList())
diff --git a/services/permission/java/com/android/server/permission/access/collection/IntBooleanMap.kt b/services/permission/java/com/android/server/permission/access/collection/IntBooleanMap.kt
deleted file mode 100644
index 2f7b9bf..0000000
--- a/services/permission/java/com/android/server/permission/access/collection/IntBooleanMap.kt
+++ /dev/null
@@ -1,171 +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.server.permission.access.collection
-
-import android.util.SparseBooleanArray
-
-typealias IntBooleanMap = SparseBooleanArray
-
-inline fun IntBooleanMap.allIndexed(predicate: (Int, Int, Boolean) -> Boolean): Boolean {
-    forEachIndexed { index, key, value ->
-        if (!predicate(index, key, value)) {
-            return false
-        }
-    }
-    return true
-}
-
-inline fun IntBooleanMap.anyIndexed(predicate: (Int, Int, Boolean) -> Boolean): Boolean {
-    forEachIndexed { index, key, value ->
-        if (predicate(index, key, value)) {
-            return true
-        }
-    }
-    return false
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline fun IntBooleanMap.copy(): IntBooleanMap = clone()
-
-inline fun <R> IntBooleanMap.firstNotNullOfOrNullIndexed(transform: (Int, Int, Boolean) -> R): R? {
-    forEachIndexed { index, key, value ->
-        transform(index, key, value)?.let { return it }
-    }
-    return null
-}
-
-inline fun IntBooleanMap.forEachIndexed(action: (Int, Int, Boolean) -> Unit) {
-    for (index in 0 until size) {
-        action(index, keyAt(index), valueAt(index))
-    }
-}
-
-inline fun IntBooleanMap.forEachKeyIndexed(action: (Int, Int) -> Unit) {
-    for (index in 0 until size) {
-        action(index, keyAt(index))
-    }
-}
-
-inline fun IntBooleanMap.forEachReversedIndexed(action: (Int, Int, Boolean) -> Unit) {
-    for (index in lastIndex downTo 0) {
-        action(index, keyAt(index), valueAt(index))
-    }
-}
-
-inline fun IntBooleanMap.forEachValueIndexed(action: (Int, Boolean) -> Unit) {
-    for (index in 0 until size) {
-        action(index, valueAt(index))
-    }
-}
-
-inline fun IntBooleanMap.getOrPut(key: Int, defaultValue: () -> Boolean): Boolean {
-    val index = indexOfKey(key)
-    return if (index >= 0) {
-        valueAt(index)
-    } else {
-        defaultValue().also { put(key, it) }
-    }
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline fun IntBooleanMap?.getWithDefault(key: Int, defaultValue: Boolean): Boolean {
-    this ?: return defaultValue
-    return get(key, defaultValue)
-}
-
-inline val IntBooleanMap.lastIndex: Int
-    get() = size - 1
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun IntBooleanMap.minusAssign(key: Int) {
-    delete(key)
-}
-
-inline fun IntBooleanMap.noneIndexed(predicate: (Int, Int, Boolean) -> Boolean): Boolean {
-    forEachIndexed { index, key, value ->
-        if (predicate(index, key, value)) {
-            return false
-        }
-    }
-    return true
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline fun IntBooleanMap.putWithDefault(key: Int, value: Boolean, defaultValue: Boolean): Boolean {
-    val index = indexOfKey(key)
-    if (index >= 0) {
-        val oldValue = valueAt(index)
-        if (value != oldValue) {
-            if (value == defaultValue) {
-                removeAt(index)
-            } else {
-                setValueAt(index, value)
-            }
-        }
-        return oldValue
-    } else {
-        if (value != defaultValue) {
-            put(key, value)
-        }
-        return defaultValue
-    }
-}
-
-fun IntBooleanMap.remove(key: Int) {
-    delete(key)
-}
-
-fun IntBooleanMap.remove(key: Int, defaultValue: Boolean): Boolean {
-    val index = indexOfKey(key)
-    return if (index >= 0) {
-        val oldValue = valueAt(index)
-        removeAt(index)
-        oldValue
-    } else {
-        defaultValue
-    }
-}
-
-inline fun IntBooleanMap.removeAllIndexed(predicate: (Int, Int, Boolean) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, key, value ->
-        if (predicate(index, key, value)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
-
-inline fun IntBooleanMap.retainAllIndexed(predicate: (Int, Int, Boolean) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, key, value ->
-        if (!predicate(index, key, value)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun IntBooleanMap.set(key: Int, value: Boolean) {
-    put(key, value)
-}
-
-inline val IntBooleanMap.size: Int
-    get() = size()
diff --git a/services/permission/java/com/android/server/permission/access/collection/IntLongMap.kt b/services/permission/java/com/android/server/permission/access/collection/IntLongMap.kt
deleted file mode 100644
index 692bbd6..0000000
--- a/services/permission/java/com/android/server/permission/access/collection/IntLongMap.kt
+++ /dev/null
@@ -1,171 +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.server.permission.access.collection
-
-import android.util.SparseLongArray
-
-typealias IntLongMap = SparseLongArray
-
-inline fun IntLongMap.allIndexed(predicate: (Int, Int, Long) -> Boolean): Boolean {
-    forEachIndexed { index, key, value ->
-        if (!predicate(index, key, value)) {
-            return false
-        }
-    }
-    return true
-}
-
-inline fun IntLongMap.anyIndexed(predicate: (Int, Int, Long) -> Boolean): Boolean {
-    forEachIndexed { index, key, value ->
-        if (predicate(index, key, value)) {
-            return true
-        }
-    }
-    return false
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline fun IntLongMap.copy(): IntLongMap = clone()
-
-inline fun <R> IntLongMap.firstNotNullOfOrNullIndexed(transform: (Int, Int, Long) -> R): R? {
-    forEachIndexed { index, key, value ->
-        transform(index, key, value)?.let { return it }
-    }
-    return null
-}
-
-inline fun IntLongMap.forEachIndexed(action: (Int, Int, Long) -> Unit) {
-    for (index in 0 until size) {
-        action(index, keyAt(index), valueAt(index))
-    }
-}
-
-inline fun IntLongMap.forEachKeyIndexed(action: (Int, Int) -> Unit) {
-    for (index in 0 until size) {
-        action(index, keyAt(index))
-    }
-}
-
-inline fun IntLongMap.forEachReversedIndexed(action: (Int, Int, Long) -> Unit) {
-    for (index in lastIndex downTo 0) {
-        action(index, keyAt(index), valueAt(index))
-    }
-}
-
-inline fun IntLongMap.forEachValueIndexed(action: (Int, Long) -> Unit) {
-    for (index in 0 until size) {
-        action(index, valueAt(index))
-    }
-}
-
-inline fun IntLongMap.getOrPut(key: Int, defaultValue: () -> Long): Long {
-    val index = indexOfKey(key)
-    return if (index >= 0) {
-        valueAt(index)
-    } else {
-        defaultValue().also { put(key, it) }
-    }
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline fun IntLongMap?.getWithDefault(key: Int, defaultValue: Long): Long {
-    this ?: return defaultValue
-    return get(key, defaultValue)
-}
-
-inline val IntLongMap.lastIndex: Int
-    get() = size - 1
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun IntLongMap.minusAssign(key: Int) {
-    delete(key)
-}
-
-inline fun IntLongMap.noneIndexed(predicate: (Int, Int, Long) -> Boolean): Boolean {
-    forEachIndexed { index, key, value ->
-        if (predicate(index, key, value)) {
-            return false
-        }
-    }
-    return true
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline fun IntLongMap.putWithDefault(key: Int, value: Long, defaultValue: Long): Long {
-    val index = indexOfKey(key)
-    if (index >= 0) {
-        val oldValue = valueAt(index)
-        if (value != oldValue) {
-            if (value == defaultValue) {
-                removeAt(index)
-            } else {
-                setValueAt(index, value)
-            }
-        }
-        return oldValue
-    } else {
-        if (value != defaultValue) {
-            put(key, value)
-        }
-        return defaultValue
-    }
-}
-
-fun IntLongMap.remove(key: Int) {
-    delete(key)
-}
-
-fun IntLongMap.remove(key: Int, defaultValue: Long): Long {
-    val index = indexOfKey(key)
-    return if (index >= 0) {
-        val oldValue = valueAt(index)
-        removeAt(index)
-        oldValue
-    } else {
-        defaultValue
-    }
-}
-
-inline fun IntLongMap.removeAllIndexed(predicate: (Int, Int, Long) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, key, value ->
-        if (predicate(index, key, value)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
-
-inline fun IntLongMap.retainAllIndexed(predicate: (Int, Int, Long) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, key, value ->
-        if (!predicate(index, key, value)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun IntLongMap.set(key: Int, value: Long) {
-    put(key, value)
-}
-
-inline val IntLongMap.size: Int
-    get() = size()
diff --git a/services/permission/java/com/android/server/permission/access/collection/IntMap.kt b/services/permission/java/com/android/server/permission/access/collection/IntMap.kt
deleted file mode 100644
index e905567..0000000
--- a/services/permission/java/com/android/server/permission/access/collection/IntMap.kt
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.permission.access.collection
-
-import android.util.SparseArray
-
-typealias IntMap<T> = SparseArray<T>
-
-inline fun <T> IntMap<T>.allIndexed(predicate: (Int, Int, T) -> Boolean): Boolean {
-    forEachIndexed { index, key, value ->
-        if (!predicate(index, key, value)) {
-            return false
-        }
-    }
-    return true
-}
-
-inline fun <T> IntMap<T>.anyIndexed(predicate: (Int, Int, T) -> Boolean): Boolean {
-    forEachIndexed { index, key, value ->
-        if (predicate(index, key, value)) {
-            return true
-        }
-    }
-    return false
-}
-
-inline fun <T> IntMap<T>.copy(copyValue: (T) -> T): IntMap<T> =
-    this.clone().apply {
-        forEachValueIndexed { index, value ->
-            setValueAt(index, copyValue(value))
-        }
-    }
-
-inline fun <T, R> IntMap<T>.firstNotNullOfOrNullIndexed(transform: (Int, Int, T) -> R): R? {
-    forEachIndexed { index, key, value ->
-        transform(index, key, value)?.let { return it }
-    }
-    return null
-}
-
-inline fun <T> IntMap<T>.forEachIndexed(action: (Int, Int, T) -> Unit) {
-    for (index in 0 until size) {
-        action(index, keyAt(index), valueAt(index))
-    }
-}
-
-inline fun <T> IntMap<T>.forEachKeyIndexed(action: (Int, Int) -> Unit) {
-    for (index in 0 until size) {
-        action(index, keyAt(index))
-    }
-}
-
-inline fun <T> IntMap<T>.forEachReversedIndexed(action: (Int, Int, T) -> Unit) {
-    for (index in lastIndex downTo 0) {
-        action(index, keyAt(index), valueAt(index))
-    }
-}
-
-inline fun <T> IntMap<T>.forEachValueIndexed(action: (Int, T) -> Unit) {
-    for (index in 0 until size) {
-        action(index, valueAt(index))
-    }
-}
-
-inline fun <T> IntMap<T>.getOrPut(key: Int, defaultValue: () -> T): T {
-    get(key)?.let { return it }
-    return defaultValue().also { put(key, it) }
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline fun <T> IntMap<T>?.getWithDefault(key: Int, defaultValue: T): T {
-    this ?: return defaultValue
-    val index = indexOfKey(key)
-    return if (index >= 0) valueAt(index) else defaultValue
-}
-
-inline val <T> IntMap<T>.lastIndex: Int
-    get() = size - 1
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun <T> IntMap<T>.minusAssign(key: Int) {
-    remove(key)
-}
-
-inline fun <T> IntMap<T>.noneIndexed(predicate: (Int, Int, T) -> Boolean): Boolean {
-    forEachIndexed { index, key, value ->
-        if (predicate(index, key, value)) {
-            return false
-        }
-    }
-    return true
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline fun <T> IntMap<T>.putWithDefault(key: Int, value: T, defaultValue: T): T {
-    val index = indexOfKey(key)
-    if (index >= 0) {
-        val oldValue = valueAt(index)
-        if (value != oldValue) {
-            if (value == defaultValue) {
-                removeAt(index)
-            } else {
-                setValueAt(index, value)
-            }
-        }
-        return oldValue
-    } else {
-        if (value != defaultValue) {
-            put(key, value)
-        }
-        return defaultValue
-    }
-}
-
-// SparseArray.removeReturnOld() is @hide, so a backup once we move to APIs.
-fun <T> IntMap<T>.removeReturnOld(key: Int): T? {
-    val index = indexOfKey(key)
-    return if (index >= 0) {
-        val oldValue = valueAt(index)
-        removeAt(index)
-        oldValue
-    } else {
-        null
-    }
-}
-
-inline fun <T> IntMap<T>.removeAllIndexed(predicate: (Int, Int, T) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, key, value ->
-        if (predicate(index, key, value)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
-
-inline fun <T> IntMap<T>.retainAllIndexed(predicate: (Int, Int, T) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, key, value ->
-        if (!predicate(index, key, value)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
-
-inline val <T> IntMap<T>.size: Int
-    get() = size()
diff --git a/services/permission/java/com/android/server/permission/access/collection/IntSet.kt b/services/permission/java/com/android/server/permission/access/collection/IntSet.kt
deleted file mode 100644
index 4717251..0000000
--- a/services/permission/java/com/android/server/permission/access/collection/IntSet.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.server.permission.access.collection
-
-import android.util.SparseBooleanArray
-
-class IntSet private constructor(
-    private val array: SparseBooleanArray
-) {
-    constructor() : this(SparseBooleanArray())
-
-    val size: Int
-        get() = array.size()
-
-    operator fun contains(element: Int): Boolean = array[element]
-
-    fun elementAt(index: Int): Int = array.keyAt(index)
-
-    fun indexOf(element: Int): Int = array.indexOfKey(element)
-
-    fun add(element: Int) {
-        array.put(element, true)
-    }
-
-    fun remove(element: Int) {
-        array.delete(element)
-    }
-
-    fun clear() {
-        array.clear()
-    }
-
-    fun removeAt(index: Int) {
-        array.removeAt(index)
-    }
-
-    fun copy(): IntSet = IntSet(array.clone())
-}
-
-fun IntSet(values: IntArray): IntSet = IntSet().apply{ this += values }
-
-inline fun IntSet.allIndexed(predicate: (Int, Int) -> Boolean): Boolean {
-    forEachIndexed { index, element ->
-        if (!predicate(index, element)) {
-            return false
-        }
-    }
-    return true
-}
-
-inline fun IntSet.anyIndexed(predicate: (Int, Int) -> Boolean): Boolean {
-    forEachIndexed { index, element ->
-        if (predicate(index, element)) {
-            return true
-        }
-    }
-    return false
-}
-
-inline fun IntSet.forEachIndexed(action: (Int, Int) -> Unit) {
-    for (index in 0 until size) {
-        action(index, elementAt(index))
-    }
-}
-
-inline fun IntSet.forEachReversedIndexed(action: (Int, Int) -> Unit) {
-    for (index in lastIndex downTo 0) {
-        action(index, elementAt(index))
-    }
-}
-
-inline val IntSet.lastIndex: Int
-    get() = size - 1
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun IntSet.minus(element: Int): IntSet = copy().apply { this -= element }
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun IntSet.minusAssign(element: Int) {
-    remove(element)
-}
-
-inline fun IntSet.noneIndexed(predicate: (Int, Int) -> Boolean): Boolean {
-    forEachIndexed { index, element ->
-        if (predicate(index, element)) {
-            return false
-        }
-    }
-    return true
-}
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun IntSet.plus(element: Int): IntSet = copy().apply { this += element }
-
-@Suppress("NOTHING_TO_INLINE")
-inline operator fun IntSet.plusAssign(element: Int) {
-    add(element)
-}
-
-operator fun IntSet.plusAssign(set: IntSet) {
-    set.forEachIndexed { _, it -> this += it }
-}
-
-operator fun IntSet.plusAssign(array: IntArray) {
-    array.forEach { this += it }
-}
-
-inline fun IntSet.removeAllIndexed(predicate: (Int, Int) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, element ->
-        if (predicate(index, element)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
-
-inline fun IntSet.retainAllIndexed(predicate: (Int, Int) -> Boolean): Boolean {
-    var isChanged = false
-    forEachReversedIndexed { index, element ->
-        if (!predicate(index, element)) {
-            removeAt(index)
-            isChanged = true
-        }
-    }
-    return isChanged
-}
diff --git a/services/permission/java/com/android/server/permission/access/collection/List.kt b/services/permission/java/com/android/server/permission/access/collection/ListExtensions.kt
similarity index 100%
rename from services/permission/java/com/android/server/permission/access/collection/List.kt
rename to services/permission/java/com/android/server/permission/access/collection/ListExtensions.kt
diff --git a/services/permission/java/com/android/server/permission/access/collection/SparseArrayExtensions.kt b/services/permission/java/com/android/server/permission/access/collection/SparseArrayExtensions.kt
new file mode 100644
index 0000000..8b7f3de
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/collection/SparseArrayExtensions.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.server.permission.access.collection
+
+import android.util.SparseArray
+
+inline fun <T> SparseArray<T>.allIndexed(predicate: (Int, Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (!predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <T> SparseArray<T>.anyIndexed(predicate: (Int, Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return true
+        }
+    }
+    return false
+}
+
+inline fun <T> SparseArray<T>.forEachIndexed(action: (Int, Int, T) -> Unit) {
+    for (index in 0 until size) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+inline fun <T> SparseArray<T>.forEachReversedIndexed(action: (Int, Int, T) -> Unit) {
+    for (index in lastIndex downTo 0) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+inline fun <T> SparseArray<T>.getOrPut(key: Int, defaultValue: () -> T): T {
+    val index = indexOfKey(key)
+    return if (index >= 0) {
+        valueAt(index)
+    } else {
+        defaultValue().also { put(key, it) }
+    }
+}
+
+inline val <T> SparseArray<T>.lastIndex: Int
+    get() = size - 1
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <T> SparseArray<T>.minusAssign(key: Int) {
+    delete(key)
+}
+
+inline fun <T> SparseArray<T>.noneIndexed(predicate: (Int, Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <T> SparseArray<T>.removeAllIndexed(predicate: (Int, Int, T) -> Boolean): Boolean {
+    var isChanged = false
+    forEachReversedIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            removeAt(index)
+            isChanged = true
+        }
+    }
+    return isChanged
+}
+
+inline fun <T> SparseArray<T>.retainAllIndexed(predicate: (Int, Int, T) -> Boolean): Boolean {
+    var isChanged = false
+    forEachReversedIndexed { index, key, value ->
+        if (!predicate(index, key, value)) {
+            removeAt(index)
+            isChanged = true
+        }
+    }
+    return isChanged
+}
+
+inline val <T> SparseArray<T>.size: Int
+    get() = size()
diff --git a/services/permission/java/com/android/server/permission/access/collection/SparseBooleanArrayExtensions.kt b/services/permission/java/com/android/server/permission/access/collection/SparseBooleanArrayExtensions.kt
new file mode 100644
index 0000000..0a4c52b
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/collection/SparseBooleanArrayExtensions.kt
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.permission.access.collection
+
+import android.util.SparseBooleanArray
+
+inline fun SparseBooleanArray.allIndexed(predicate: (Int, Int, Boolean) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (!predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun SparseBooleanArray.anyIndexed(predicate: (Int, Int, Boolean) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return true
+        }
+    }
+    return false
+}
+
+inline fun SparseBooleanArray.forEachIndexed(action: (Int, Int, Boolean) -> Unit) {
+    for (index in 0 until size) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+inline fun SparseBooleanArray.forEachReversedIndexed(action: (Int, Int, Boolean) -> Unit) {
+    for (index in lastIndex downTo 0) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+inline fun SparseBooleanArray.getOrPut(key: Int, defaultValue: () -> Boolean): Boolean {
+    val index = indexOfKey(key)
+    return if (index >= 0) {
+        valueAt(index)
+    } else {
+        defaultValue().also { put(key, it) }
+    }
+}
+
+inline val SparseBooleanArray.lastIndex: Int
+    get() = size - 1
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun SparseBooleanArray.minusAssign(key: Int) {
+    delete(key)
+}
+
+inline fun SparseBooleanArray.noneIndexed(predicate: (Int, Int, Boolean) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+fun SparseBooleanArray.remove(key: Int) {
+    delete(key)
+}
+
+fun SparseBooleanArray.remove(key: Int, defaultValue: Boolean): Boolean {
+    val index = indexOfKey(key)
+    return if (index >= 0) {
+        val oldValue = valueAt(index)
+        removeAt(index)
+        oldValue
+    } else {
+        defaultValue
+    }
+}
+
+inline fun SparseBooleanArray.removeAllIndexed(predicate: (Int, Int, Boolean) -> Boolean): Boolean {
+    var isChanged = false
+    forEachReversedIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            removeAt(index)
+            isChanged = true
+        }
+    }
+    return isChanged
+}
+
+inline fun SparseBooleanArray.retainAllIndexed(predicate: (Int, Int, Boolean) -> Boolean): Boolean {
+    var isChanged = false
+    forEachReversedIndexed { index, key, value ->
+        if (!predicate(index, key, value)) {
+            removeAt(index)
+            isChanged = true
+        }
+    }
+    return isChanged
+}
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun SparseBooleanArray.set(key: Int, value: Boolean) {
+    put(key, value)
+}
+
+inline val SparseBooleanArray.size: Int
+    get() = size()
diff --git a/services/permission/java/com/android/server/permission/access/collection/SparseLongArrayExtensions.kt b/services/permission/java/com/android/server/permission/access/collection/SparseLongArrayExtensions.kt
new file mode 100644
index 0000000..1149c52
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/collection/SparseLongArrayExtensions.kt
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.permission.access.collection
+
+import android.util.SparseLongArray
+
+inline fun SparseLongArray.allIndexed(predicate: (Int, Int, Long) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (!predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun SparseLongArray.anyIndexed(predicate: (Int, Int, Long) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return true
+        }
+    }
+    return false
+}
+
+inline fun SparseLongArray.forEachIndexed(action: (Int, Int, Long) -> Unit) {
+    for (index in 0 until size) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+inline fun SparseLongArray.forEachReversedIndexed(action: (Int, Int, Long) -> Unit) {
+    for (index in lastIndex downTo 0) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+inline fun SparseLongArray.getOrPut(key: Int, defaultValue: () -> Long): Long {
+    val index = indexOfKey(key)
+    return if (index >= 0) {
+        valueAt(index)
+    } else {
+        defaultValue().also { put(key, it) }
+    }
+}
+
+inline val SparseLongArray.lastIndex: Int
+    get() = size - 1
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun SparseLongArray.minusAssign(key: Int) {
+    delete(key)
+}
+
+inline fun SparseLongArray.noneIndexed(predicate: (Int, Int, Long) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+fun SparseLongArray.remove(key: Int) {
+    delete(key)
+}
+
+fun SparseLongArray.remove(key: Int, defaultValue: Long): Long {
+    val index = indexOfKey(key)
+    return if (index >= 0) {
+        val oldValue = valueAt(index)
+        removeAt(index)
+        oldValue
+    } else {
+        defaultValue
+    }
+}
+
+inline fun SparseLongArray.removeAllIndexed(predicate: (Int, Int, Long) -> Boolean): Boolean {
+    var isChanged = false
+    forEachReversedIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            removeAt(index)
+            isChanged = true
+        }
+    }
+    return isChanged
+}
+
+inline fun SparseLongArray.retainAllIndexed(predicate: (Int, Int, Long) -> Boolean): Boolean {
+    var isChanged = false
+    forEachReversedIndexed { index, key, value ->
+        if (!predicate(index, key, value)) {
+            removeAt(index)
+            isChanged = true
+        }
+    }
+    return isChanged
+}
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun SparseLongArray.set(key: Int, value: Long) {
+    put(key, value)
+}
+
+inline val SparseLongArray.size: Int
+    get() = size()
diff --git a/services/permission/java/com/android/server/permission/access/immutable/Immutable.kt b/services/permission/java/com/android/server/permission/access/immutable/Immutable.kt
new file mode 100644
index 0000000..64e6d4d
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/Immutable.kt
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+interface Immutable<M> {
+    fun toMutable(): M
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/Immutable.md b/services/permission/java/com/android/server/permission/access/immutable/Immutable.md
new file mode 100644
index 0000000..dcf30d2
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/Immutable.md
@@ -0,0 +1,214 @@
+# Immutable Data Structures
+
+## Introduction
+
+The classes inside this package implements a way to manipulate data in an immutable way, which
+allows achieving lock-free reads for performance-critical code paths, and organizing the
+implementation of complex state transitions in a readable and maintainable way.
+
+## Features
+
+This implementation provides the following features:
+
+- Immutability is implemented leveraging the Java/Kotlin type system.
+
+    Each data structure has both an immutable and a mutable variant, so that the type system will be
+    enforcing proper operations on the data during compilation and preventing any accidental
+    mutations.
+
+- Unmodified portion of the data is shared between mutations.
+
+    Making a full copy of the entire state for any modification is often an overkill and bad for
+    performance, so a path-copy approach is taken when mutating part of the data, which is also
+    enforced by the type system.
+
+- Consecutive modifications can be batched.
+
+    This implementation keeps track of the mutation status of each object and reuses objects that
+    are already copied to perform further mutations, so that temporary copies won't be unnecessarily
+    created.
+
+- No manual `freeze()` calls needed at the end of modifications.
+
+    Thanks to the type system enforced immutability, a mutated data structure can simply be upcasted
+    back to its immutable variant at the end of mutations, so that any future modification will
+    require a new call to `toMutable()` which ensures a new copy is created. This eliminates a whole
+    class of potential issues with a required manual `freeze()` call, which may either be forgotten
+    for (part of) the data and result in hard-to-catch bugs, or require correct boilerplate code
+    that properly propagates this information across the entire tree of objects.
+
+- Android-specific data structures are included.
+
+    Android has its own collection classes (e.g. `ArrayMap` and `SparseArray`) that are preferred
+    (for typical amount of data) for performance reasons, and this implementation provides
+    immutability for them via wrapper classes so that the same underlying implementation is used and
+    the same performance goals are achieved.
+
+- Android Runtime performance is considered.
+
+    Both the immutable and mutable variants are defined as classes and their member methods are
+    final (default in Kotlin), so that the method invocations will be `invoke-direct` and allow
+    better AOT compilation.
+
+    The data structure classes here also deliberately chose to not implement the standard
+    Java/Kotlin collection interfaces, so that we can enforce that a number of standard Java/Kotlin
+    utilities that may be bad for performance or generate interface calls (e.g. Java 8 streams,
+    methods taking non-inlined lambdas and kotlin-stdlib extensions taking interfaces) won't be
+    accidentally used. We will only add utility methods when necessary and with proper performance
+    considerations (e.g. indexed iteration, taking class instead of interface).
+
+## Implementation
+
+### Immutable and mutable classes
+
+In order to leverage the type system to enforce immutability, the core idea is to have both an
+immutable and a mutable class for any data structure, where the latter extends the former
+(important for `MutableReference` later).
+
+### How mutation works
+
+The primary difficulty in design comes when data structures are composed together in a tree-like
+fashion, via map or custom data structures. Specifically, the mutation and copy-on-write would
+first happen on the immediate data structure that is being mutated, which would produce a new
+instance that contains the mutation, however it is the parent data structure that also needs to know
+about this new instance and mutate itself to update its reference to the new child. This problem is
+also referred to as "path copying" in persistent data structures.
+
+This design difficulty is solved by the following convention in this implementation. Normally, the
+immutable class is good for any read-only access. But when any mutations are needed, it can be
+started by calling a `toMutable()` method on the root data structure, which would return a mutable
+class over a shallow copy of the existing data. In order to perform the actual mutation deeper in
+the tree, a chain of `mutateFoo()` calls will be needed to obtain mutable classes of child data
+structures, while these `mutateFoo()` calls are also only available on mutable classes. This way,
+proper chain of mutation is also enforced by the type system, and unmodified data is unchanged and
+reused.
+
+Here is an example of how this convention would work in the real-world. A read access would just
+work as if this implementation isn't involved:
+
+```kotlin
+val permission = state.systemState.permissions[permissionName]
+```
+
+Whereas the write access would remain similar, which is natural and easy-to-use with safety
+guaranteed by the type system:
+
+```kotlin
+val newState = state.toMutable()
+newState.mutateSystemState().mutatePermissions().put(permission.name, permission)
+state = newState
+```
+
+### The magic: `MutableReference`
+
+The magic of the implementation for this convention comes from the `MutableReference` class, and
+below is a simplified version of it.
+
+```kotlin
+class MutableReference<I : Immutable<M>, M : I>(
+    private var immutable: I,
+    private var mutable: M?
+) {
+    fun get(): I = immutable
+
+    fun mutate(): M {
+        mutable?.let { return it }
+        return immutable.toMutable().also {
+            immutable = it
+            mutable = it
+        }
+    }
+
+    fun toImmutable(): MutableReference<I, M> = MutableReference(immutable, null)
+}
+
+interface Immutable<M> {
+    fun toMutable(): M
+}
+```
+
+Reference to any mutable data structure should be wrapped by this `MutableReference`, which
+encapsulates the logic to mutate/copy a child data structure and update the reference to the new
+child instance. It also remembers the mutated child instance so that it can be reused during further
+mutations. These `MutableReference` objects should be kept private within a data structure, with the
+`get()` method exposed on the immutable interface of the data structure as `getFoo()`, and the
+`mutate()` method exposed on the mutable interface of the data structure as `mutateFoo()`. When the
+parent data structure is mutated/copied, a new `MutableReference` object should be obtained with
+`MutableReference.toImmutable()`, which creates a new reference with the state only being immutable
+and prevents modifications to an object accessed with an immutable interface.
+
+Here is how the usage of `MutableReference` would be like in an actual class:
+
+```kotlin
+private typealias PermissionsReference =
+    MutableReference<IndexedMap<String, Permission>, MutableIndexedMap<String, Permission>>
+
+sealed class SystemState(
+    protected val permissionsReference: PermissionsReference
+) {
+    val permissions: IndexedMap<String, Permission>
+        get() = permissionsReference.get()
+}
+
+class MutableSystemState(
+    permissionsReference: PermissionsReference
+) : SystemState(permissionsRef), Immutable<MutableSystemState> {
+    fun mutatePermissions(): MutableIndexedMap<String, Permission> = permissionsReference.mutate()
+
+    override fun toMutable(): MutableSystemState =
+        MutableSystemState(permissionsReference.toImmutable())
+}
+```
+
+For collection classes like `IndexedMap`, there are also classes like `IndexedReferenceMap` where
+the values are held by `MutableReference`s, and a `mutate(key: K): V` method would help obtain a
+mutable instance of map values.
+
+## Comparison with similar solutions
+
+### Persistent data structure
+
+[Persistent data structure](https://www.wikiwand.com/en/Persistent_data_structure) is a special type
+of data structure implementation that are designed to always preserve the previous version of itself
+when it's modified. Copy-on-write data structure is a common example of it.
+
+Theoretically, persistent data structure can help eliminate the need for locking even upon
+mutations. However, in reality a lot of mutation operations may be updating multiple places in the
+tree of states, and without locking the reader might see an inconsistent state that's right in the
+middle of a mutation operation and make a wrong decision. As a result, we will still need locking
+upon mutations.
+
+Persistent data structure is also much more complex than a plain mutable data structure, both in
+terms of complexity and in terms of performance, and vastly different from the Android-specific
+collection classes that are recommended. Whereas this implementation is just a lightweight wrapper
+around the Android-specific collection classes, which allows reusing them and following the
+guidance for platform code.
+
+### `Snappable` and `Watchable` in `PackageManagerService`
+
+`Snappable` and `Watchable` is an alternative solution for lock contention and immutability.
+Basically, all the mutable state classes will need to implement a way to snapshot themselves, and a
+cache is used for each level of snapshot to reuse copies; the classes will also need to correctly
+implement change notification, so that listeners can be registered to both invalidate snapshot cache
+upon change and detect illegal mutations at run time.
+
+Here are the pros and cons of this implementation, when compared with the snapshot solution:
+
+|                        | Snapshot                                                                                                                                                                      | Immutable                                                                                                                                       |
+|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|
+| Locking for reads      | Locked reads when no cached snapshot, lockless when cached                                                                                                                    | Always lockless reads                                                                                                                           |
+| Memory footprint       | Doubled memory usage for mutable data because a copy is kept in snapshot cache if ever read                                                                                   | Potentially more than necessary transient memory usage due to immutability instead of on-demand snapshot (may be mitigated for in-process code) |
+| Immutability for reads | Enforced during run time by `seal()` and `Watchable`                                                                                                                          | Enforced during compile time by type system                                                                                                     |
+| Integration complexity | A `SnapshotCache` field for every existing field, and a correctly implemented `snapshot()` method, keeps Java collection interfaces                                           | Two classes with straightforward accessors for `MutableReference` fields, less room for incorrect code, ditches Java collection interfaces      |
+| ART performance        | Non-final methods (may be made final), potential interface calls for Java collection interfaces, `Snappable` and `Watchable` interface and `instanceof` check for `Snappable` | Final methods, can't have interface call for Java/Kotlin collection interfaces, `Immutable` interface but no `instanceof` check                 |
+
+Unlike package state, permission state is far more frequently queried than mutated - mutations
+mostly happen upon first boot, or when user changes their permission decision which is rare in terms
+of the entire uptime of the system. So reads being always lockless is generally a more suitable
+design in terms of performance, and it also allows flexibility in code that have to obtain external
+state. This fact has a similar impact on the memory footprint, since most of the time the state will
+be unchanged and only read, and we should avoid having to keep another copy of it. Compile time
+enforcement of immutability for reads is safer than run time enforcement, and less room for
+incorrect integration is also an upside when both require some form of code and permission code is
+new. So all in all, the immutable data structure proposed in this document is more suitable for the
+new permission implementation.
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IndexedList.kt b/services/permission/java/com/android/server/permission/access/immutable/IndexedList.kt
new file mode 100644
index 0000000..ce4aa44
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IndexedList.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+/**
+ * Immutable list with index-based access.
+ */
+sealed class IndexedList<T>(
+    internal val list: ArrayList<T>
+) : Immutable<MutableIndexedList<T>> {
+    val size: Int
+        get() = list.size
+
+    fun isEmpty(): Boolean = list.isEmpty()
+
+    operator fun contains(element: T): Boolean = list.contains(element)
+
+    @Suppress("ReplaceGetOrSet")
+    operator fun get(index: Int): T = list.get(index)
+
+    override fun toMutable(): MutableIndexedList<T> = MutableIndexedList(this)
+
+    override fun toString(): String = list.toString()
+}
+
+/**
+ * Mutable list with index-based access.
+ */
+class MutableIndexedList<T>(
+    list: ArrayList<T> = ArrayList()
+) : IndexedList<T>(list) {
+    constructor(indexedList: IndexedList<T>) : this(ArrayList(indexedList.list))
+
+    @Suppress("ReplaceGetOrSet")
+    operator fun set(index: Int, element: T): T = list.set(index, element)
+
+    fun add(element: T) {
+        list.add(element)
+    }
+
+    fun add(index: Int, element: T) {
+        list.add(index, element)
+    }
+
+    fun remove(element: T) {
+        list.remove(element)
+    }
+
+    fun clear() {
+        list.clear()
+    }
+
+    fun removeAt(index: Int): T = list.removeAt(index)
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IndexedListExtensions.kt b/services/permission/java/com/android/server/permission/access/immutable/IndexedListExtensions.kt
new file mode 100644
index 0000000..dc9bae3
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IndexedListExtensions.kt
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+inline fun <T> IndexedList<T>.allIndexed(predicate: (Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, element ->
+        if (!predicate(index, element)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <T> IndexedList<T>.anyIndexed(predicate: (Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, element ->
+        if (predicate(index, element)) {
+            return true
+        }
+    }
+    return false
+}
+
+inline fun <T> IndexedList<T>.forEachIndexed(action: (Int, T) -> Unit) {
+    for (index in 0 until size) {
+        action(index, this[index])
+    }
+}
+
+inline fun <T> IndexedList<T>.forEachReversedIndexed(action: (Int, T) -> Unit) {
+    for (index in lastIndex downTo 0) {
+        action(index, this[index])
+    }
+}
+
+inline val <T> IndexedList<T>.lastIndex: Int
+    get() = size - 1
+
+operator fun <T> IndexedList<T>.minus(element: T): MutableIndexedList<T> =
+    toMutable().apply { this -= element }
+
+inline fun <T> IndexedList<T>.noneIndexed(predicate: (Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, element ->
+        if (predicate(index, element)) {
+            return false
+        }
+    }
+    return true
+}
+
+operator fun <T> IndexedList<T>.plus(element: T): MutableIndexedList<T> =
+    toMutable().apply { this += element }
+
+// Using Int instead of <R> to avoid autoboxing, since we only have the use case for Int.
+inline fun <T> IndexedList<T>.reduceIndexed(
+    initialValue: Int,
+    accumulator: (Int, Int, T) -> Int
+): Int {
+    var value = initialValue
+    forEachIndexed { index, element ->
+        value = accumulator(value, index, element)
+    }
+    return value
+}
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <T> MutableIndexedList<T>.minusAssign(element: T) {
+    remove(element)
+}
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <T> MutableIndexedList<T>.plusAssign(element: T) {
+    add(element)
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IndexedListSet.kt b/services/permission/java/com/android/server/permission/access/immutable/IndexedListSet.kt
new file mode 100644
index 0000000..77e71ba
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IndexedListSet.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+/**
+ * Immutable set with index-based access, implemented using a list.
+ */
+sealed class IndexedListSet<T>(
+    internal val list: ArrayList<T>
+) : Immutable<MutableIndexedListSet<T>> {
+    val size: Int
+        get() = list.size
+
+    fun isEmpty(): Boolean = list.isEmpty()
+
+    operator fun contains(element: T): Boolean = list.contains(element)
+
+    fun indexOf(element: T): Int = list.indexOf(element)
+
+    @Suppress("ReplaceGetOrSet")
+    fun elementAt(index: Int): T = list.get(index)
+
+    override fun toMutable(): MutableIndexedListSet<T> = MutableIndexedListSet(this)
+
+    override fun toString(): String = list.toString()
+}
+
+/**
+ * Mutable set with index-based access, implemented using a list.
+ */
+class MutableIndexedListSet<T>(
+    list: ArrayList<T> = ArrayList()
+) : IndexedListSet<T>(list) {
+    constructor(indexedListSet: IndexedListSet<T>) : this(ArrayList(indexedListSet.list))
+
+    fun add(element: T): Boolean =
+        if (list.contains(element)) {
+            false
+        } else {
+            list.add(element)
+            true
+        }
+
+    fun remove(element: T): Boolean = list.remove(element)
+
+    fun clear() {
+        list.clear()
+    }
+
+    fun removeAt(index: Int): T = list.removeAt(index)
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IndexedListSetExtensions.kt b/services/permission/java/com/android/server/permission/access/immutable/IndexedListSetExtensions.kt
new file mode 100644
index 0000000..13fc141
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IndexedListSetExtensions.kt
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+inline fun <T> IndexedListSet<T>.allIndexed(predicate: (Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, element ->
+        if (!predicate(index, element)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <T> IndexedListSet<T>.anyIndexed(predicate: (Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, element ->
+        if (predicate(index, element)) {
+            return true
+        }
+    }
+    return false
+}
+
+inline fun <T> IndexedListSet<T>.forEachIndexed(action: (Int, T) -> Unit) {
+    for (index in 0 until size) {
+        action(index, elementAt(index))
+    }
+}
+
+inline fun <T> IndexedListSet<T>.forEachReversedIndexed(action: (Int, T) -> Unit) {
+    for (index in lastIndex downTo 0) {
+        action(index, elementAt(index))
+    }
+}
+
+inline val <T> IndexedListSet<T>.lastIndex: Int
+    get() = size - 1
+
+operator fun <T> IndexedListSet<T>.minus(element: T): MutableIndexedListSet<T> =
+    toMutable().apply { this -= element }
+
+inline fun <T> IndexedListSet<T>.noneIndexed(predicate: (Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, element ->
+        if (predicate(index, element)) {
+            return false
+        }
+    }
+    return true
+}
+
+operator fun <T> IndexedListSet<T>.plus(element: T): MutableIndexedListSet<T> =
+    toMutable().apply { this += element }
+
+// Using Int instead of <R> to avoid autoboxing, since we only have the use case for Int.
+inline fun <T> IndexedListSet<T>.reduceIndexed(
+    initialValue: Int,
+    accumulator: (Int, Int, T) -> Int
+): Int {
+    var value = initialValue
+    forEachIndexed { index, element ->
+        value = accumulator(value, index, element)
+    }
+    return value
+}
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <T> MutableIndexedListSet<T>.minusAssign(element: T) {
+    remove(element)
+}
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <T> MutableIndexedListSet<T>.plusAssign(element: T) {
+    add(element)
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IndexedMap.kt b/services/permission/java/com/android/server/permission/access/immutable/IndexedMap.kt
new file mode 100644
index 0000000..299cc89
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IndexedMap.kt
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+import android.util.ArrayMap
+
+/**
+ * Immutable map with index-based access.
+ */
+sealed class IndexedMap<K, V>(
+    internal val map: ArrayMap<K, V>
+) : Immutable<MutableIndexedMap<K, V>> {
+    val size: Int
+        get() = map.size
+
+    fun isEmpty(): Boolean = map.isEmpty()
+
+    operator fun contains(key: K): Boolean = map.containsKey(key)
+
+    @Suppress("ReplaceGetOrSet")
+    operator fun get(key: K): V? = map.get(key)
+
+    fun indexOfKey(key: K): Int = map.indexOfKey(key)
+
+    fun keyAt(index: Int): K = map.keyAt(index)
+
+    fun valueAt(index: Int): V = map.valueAt(index)
+
+    override fun toMutable(): MutableIndexedMap<K, V> = MutableIndexedMap(this)
+
+    override fun toString(): String = map.toString()
+}
+
+/**
+ * Mutable map with index-based access.
+ */
+class MutableIndexedMap<K, V>(
+    map: ArrayMap<K, V> = ArrayMap()
+) : IndexedMap<K, V>(map) {
+    constructor(indexedMap: IndexedMap<K, V>) : this(ArrayMap(indexedMap.map))
+
+    fun put(key: K, value: V): V? = map.put(key, value)
+
+    fun remove(key: K): V? = map.remove(key)
+
+    fun clear() {
+        map.clear()
+    }
+
+    fun putAt(index: Int, value: V): V = map.setValueAt(index, value)
+
+    fun removeAt(index: Int): V = map.removeAt(index)
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IndexedMapExtensions.kt b/services/permission/java/com/android/server/permission/access/immutable/IndexedMapExtensions.kt
new file mode 100644
index 0000000..69f1779c
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IndexedMapExtensions.kt
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+inline fun <K, V> IndexedMap<K, V>.allIndexed(predicate: (Int, K, V) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (!predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <K, V> IndexedMap<K, V>.anyIndexed(predicate: (Int, K, V) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return true
+        }
+    }
+    return false
+}
+
+inline fun <K, V, R> IndexedMap<K, V>.firstNotNullOfOrNullIndexed(transform: (Int, K, V) -> R): R? {
+    forEachIndexed { index, key, value ->
+        transform(index, key, value)?.let { return it }
+    }
+    return null
+}
+
+inline fun <K, V> IndexedMap<K, V>.forEachIndexed(action: (Int, K, V) -> Unit) {
+    for (index in 0 until size) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+inline fun <K, V> IndexedMap<K, V>.forEachReversedIndexed(action: (Int, K, V) -> Unit) {
+    for (index in lastIndex downTo 0) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+fun <K, V> IndexedMap<K, V>?.getWithDefault(key: K, defaultValue: V): V {
+    this ?: return defaultValue
+    val index = indexOfKey(key)
+    return if (index >= 0) valueAt(index) else defaultValue
+}
+
+inline val <K, V> IndexedMap<K, V>.lastIndex: Int
+    get() = size - 1
+
+inline fun <K, V> IndexedMap<K, V>.noneIndexed(predicate: (Int, K, V) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <K, V, R, C : MutableCollection<R>> IndexedMap<K, V>.mapIndexedTo(
+    destination: C,
+    transform: (Int, K, V) -> R,
+): C {
+    forEachIndexed { index, key, value ->
+        transform(index, key, value).let { destination += it }
+    }
+    return destination
+}
+
+inline fun <K, V, R, C : MutableCollection<R>> IndexedMap<K, V>.mapNotNullIndexedTo(
+    destination: C,
+    transform: (Int, K, V) -> R?
+): C {
+    forEachIndexed { index, key, value ->
+        transform(index, key, value)?.let { destination += it }
+    }
+    return destination
+}
+
+inline fun <K, V> MutableIndexedMap<K, V>.getOrPut(key: K, defaultValue: () -> V): V {
+    get(key)?.let { return it }
+    return defaultValue().also { put(key, it) }
+}
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <K, V> MutableIndexedMap<K, V>.minusAssign(key: K) {
+    remove(key)
+}
+
+fun <K, V> MutableIndexedMap<K, V>.putWithDefault(key: K, value: V, defaultValue: V): V {
+    val index = indexOfKey(key)
+    if (index >= 0) {
+        val oldValue = valueAt(index)
+        if (value != oldValue) {
+            if (value == defaultValue) {
+                removeAt(index)
+            } else {
+                putAt(index, value)
+            }
+        }
+        return oldValue
+    } else {
+        if (value != defaultValue) {
+            put(key, value)
+        }
+        return defaultValue
+    }
+}
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <K, V> MutableIndexedMap<K, V>.set(key: K, value: V) {
+    put(key, value)
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IndexedReferenceMap.kt b/services/permission/java/com/android/server/permission/access/immutable/IndexedReferenceMap.kt
new file mode 100644
index 0000000..ff76a47
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IndexedReferenceMap.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+import android.util.ArrayMap
+
+/**
+ * Immutable map with index-based access and mutable data structure values.
+ *
+ * @see MutableReference
+ */
+sealed class IndexedReferenceMap<K, I : Immutable<M>, M : I>(
+    internal val map: ArrayMap<K, MutableReference<I, M>>
+) : Immutable<MutableIndexedReferenceMap<K, I, M>> {
+    val size: Int
+        get() = map.size
+
+    fun isEmpty(): Boolean = map.isEmpty()
+
+    operator fun contains(key: K): Boolean = map.containsKey(key)
+
+    @Suppress("ReplaceGetOrSet")
+    operator fun get(key: K): I? = map.get(key)?.get()
+
+    fun indexOfKey(key: K): Int = map.indexOfKey(key)
+
+    fun keyAt(index: Int): K = map.keyAt(index)
+
+    fun valueAt(index: Int): I = map.valueAt(index).get()
+
+    override fun toMutable(): MutableIndexedReferenceMap<K, I, M> = MutableIndexedReferenceMap(this)
+
+    override fun toString(): String = map.toString()
+}
+
+/**
+ * Mutable map with index-based access and mutable data structure values.
+ *
+ * @see MutableReference
+ */
+class MutableIndexedReferenceMap<K, I : Immutable<M>, M : I>(
+    map: ArrayMap<K, MutableReference<I, M>> = ArrayMap()
+) : IndexedReferenceMap<K, I, M>(map) {
+    constructor(indexedReferenceMap: IndexedReferenceMap<K, I, M>) : this(
+        ArrayMap(indexedReferenceMap.map).apply {
+            for (i in 0 until size) {
+                setValueAt(i, valueAt(i).toImmutable())
+            }
+        }
+    )
+
+    @Suppress("ReplaceGetOrSet")
+    fun mutate(key: K): M? = map.get(key)?.mutate()
+
+    fun put(key: K, value: M): I? = map.put(key, MutableReference(value))?.get()
+
+    fun remove(key: K): I? = map.remove(key)?.get()
+
+    fun clear() {
+        map.clear()
+    }
+
+    fun mutateAt(index: Int): M = map.valueAt(index).mutate()
+
+    fun putAt(index: Int, value: M): I = map.setValueAt(index, MutableReference(value)).get()
+
+    fun removeAt(index: Int): I = map.removeAt(index).get()
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IndexedReferenceMapExtensions.kt b/services/permission/java/com/android/server/permission/access/immutable/IndexedReferenceMapExtensions.kt
new file mode 100644
index 0000000..22b4d52
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IndexedReferenceMapExtensions.kt
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+inline fun <K, I : Immutable<M>, M : I> IndexedReferenceMap<K, I, M>.allIndexed(
+    predicate: (Int, K, I) -> Boolean
+): Boolean {
+    forEachIndexed { index, key, value ->
+        if (!predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <K, I : Immutable<M>, M : I> IndexedReferenceMap<K, I, M>.anyIndexed(
+    predicate: (Int, K, I) -> Boolean
+): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return true
+        }
+    }
+    return false
+}
+
+inline fun <K, I : Immutable<M>, M : I> IndexedReferenceMap<K, I, M>.forEachIndexed(
+    action: (Int, K, I) -> Unit
+) {
+    for (index in 0 until size) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+inline fun <K, I : Immutable<M>, M : I> IndexedReferenceMap<K, I, M>.forEachReversedIndexed(
+    action: (Int, K, I) -> Unit
+) {
+    for (index in lastIndex downTo 0) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+inline val <K, I : Immutable<M>, M : I> IndexedReferenceMap<K, I, M>.lastIndex: Int
+    get() = size - 1
+
+inline fun <K, I : Immutable<M>, M : I> IndexedReferenceMap<K, I, M>.noneIndexed(
+    predicate: (Int, K, I) -> Boolean
+): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <K, I : Immutable<M>, M : I> MutableIndexedReferenceMap<K, I, M>.mutateOrPut(
+    key: K,
+    defaultValue: () -> M
+): M {
+    mutate(key)?.let { return it }
+    return defaultValue().also { put(key, it) }
+}
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <K, I : Immutable<M>, M : I> MutableIndexedReferenceMap<K, I, M>.minusAssign(
+    key: K
+) {
+    remove(key)
+}
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <K, I : Immutable<M>, M : I> MutableIndexedReferenceMap<K, I, M>.set(
+    key: K,
+    value: M
+) {
+    put(key, value)
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IndexedSet.kt b/services/permission/java/com/android/server/permission/access/immutable/IndexedSet.kt
new file mode 100644
index 0000000..547e56c
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IndexedSet.kt
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+import android.util.ArraySet
+
+/**
+ * Immutable set with index-based access.
+ */
+sealed class IndexedSet<T>(
+    internal val set: ArraySet<T>
+) : Immutable<MutableIndexedSet<T>> {
+    val size: Int
+        get() = set.size
+
+    fun isEmpty(): Boolean = set.isEmpty()
+
+    operator fun contains(element: T): Boolean = set.contains(element)
+
+    fun indexOf(element: T): Int = set.indexOf(element)
+
+    fun elementAt(index: Int): T = set.elementAt(index)
+
+    override fun toMutable(): MutableIndexedSet<T> = MutableIndexedSet(this)
+
+    override fun toString(): String = set.toString()
+}
+
+/**
+ * Mutable set with index-based access.
+ */
+class MutableIndexedSet<T>(
+    set: ArraySet<T> = ArraySet()
+) : IndexedSet<T>(set) {
+    constructor(indexedSet: IndexedSet<T>) : this(ArraySet(indexedSet.set))
+
+    fun add(element: T): Boolean = set.add(element)
+
+    fun remove(element: T): Boolean = set.remove(element)
+
+    fun clear() {
+        set.clear()
+    }
+
+    fun removeAt(index: Int): T = set.removeAt(index)
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IndexedSetExtensions.kt b/services/permission/java/com/android/server/permission/access/immutable/IndexedSetExtensions.kt
new file mode 100644
index 0000000..5959ec6
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IndexedSetExtensions.kt
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+import android.util.ArraySet
+import com.android.server.permission.access.collection.forEachIndexed
+
+fun <T> indexedSetOf(vararg elements: T): IndexedSet<T> =
+    MutableIndexedSet(ArraySet(elements.asList()))
+
+inline fun <T> IndexedSet<T>.allIndexed(predicate: (Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, element ->
+        if (!predicate(index, element)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <T> IndexedSet<T>.anyIndexed(predicate: (Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, element ->
+        if (predicate(index, element)) {
+            return true
+        }
+    }
+    return false
+}
+
+inline fun <T> IndexedSet<T>.forEachIndexed(action: (Int, T) -> Unit) {
+    for (index in 0 until size) {
+        action(index, elementAt(index))
+    }
+}
+
+inline fun <T> IndexedSet<T>.forEachReversedIndexed(action: (Int, T) -> Unit) {
+    for (index in lastIndex downTo 0) {
+        action(index, elementAt(index))
+    }
+}
+
+inline val <T> IndexedSet<T>.lastIndex: Int
+    get() = size - 1
+
+operator fun <T> IndexedSet<T>.minus(element: T): MutableIndexedSet<T> =
+    toMutable().apply { this -= element }
+
+inline fun <T> IndexedSet<T>.noneIndexed(predicate: (Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, element ->
+        if (predicate(index, element)) {
+            return false
+        }
+    }
+    return true
+}
+
+operator fun <T> IndexedSet<T>.plus(element: T): MutableIndexedSet<T> =
+    toMutable().apply { this += element }
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <T> MutableIndexedSet<T>.minusAssign(element: T) {
+    remove(element)
+}
+
+@Suppress("NOTHING_TO_INLINE")
+inline operator fun <T> MutableIndexedSet<T>.plusAssign(element: T) {
+    add(element)
+}
+
+operator fun <T> MutableIndexedSet<T>.plusAssign(collection: Collection<T>) {
+    collection.forEach { this += it }
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IntMap.kt b/services/permission/java/com/android/server/permission/access/immutable/IntMap.kt
new file mode 100644
index 0000000..7ed29e8
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IntMap.kt
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+import android.util.SparseArray
+
+/**
+ * Immutable map with index-based access and [Int] keys.
+ */
+sealed class IntMap<T>(
+    internal val array: SparseArray<T>
+) : Immutable<MutableIntMap<T>> {
+    val size: Int
+        get() = array.size()
+
+    fun isEmpty(): Boolean = array.size() == 0
+
+    operator fun contains(key: Int): Boolean = array.contains(key)
+
+    operator fun get(key: Int): T? = array.get(key)
+
+    fun indexOfKey(key: Int): Int = array.indexOfKey(key)
+
+    fun keyAt(index: Int): Int = array.keyAt(index)
+
+    fun valueAt(index: Int): T = array.valueAt(index)
+
+    override fun toMutable(): MutableIntMap<T> = MutableIntMap(this)
+
+    override fun toString(): String = array.toString()
+}
+
+/**
+ * Mutable map with index-based access and [Int] keys.
+ */
+class MutableIntMap<T>(
+    array: SparseArray<T> = SparseArray()
+) : IntMap<T>(array) {
+    constructor(intMap: IntMap<T>) : this(intMap.array.clone())
+
+    fun put(key: Int, value: T): T? = array.putReturnOld(key, value)
+
+    fun remove(key: Int): T? = array.removeReturnOld(key).also { array.gc() }
+
+    fun clear() {
+        array.clear()
+    }
+
+    fun putAt(index: Int, value: T): T = array.setValueAtReturnOld(index, value)
+
+    fun removeAt(index: Int): T = array.removeAtReturnOld(index).also { array.gc() }
+}
+
+internal fun <T> SparseArray<T>.putReturnOld(key: Int, value: T): T? {
+    val index = indexOfKey(key)
+    return if (index >= 0) {
+        val oldValue = valueAt(index)
+        setValueAt(index, value)
+        oldValue
+    } else {
+        put(key, value)
+        null
+    }
+}
+
+// SparseArray.removeReturnOld() is @hide, so a backup once we move to APIs.
+@Suppress("EXTENSION_SHADOWED_BY_MEMBER")
+internal fun <T> SparseArray<T>.removeReturnOld(key: Int): T? {
+    val index = indexOfKey(key)
+    return if (index >= 0) {
+        val oldValue = valueAt(index)
+        removeAt(index)
+        oldValue
+    } else {
+        null
+    }
+}
+
+internal fun <T> SparseArray<T>.setValueAtReturnOld(index: Int, value: T): T {
+    val oldValue = valueAt(index)
+    setValueAt(index, value)
+    return oldValue
+}
+
+internal fun <T> SparseArray<T>.removeAtReturnOld(index: Int): T {
+    val oldValue = valueAt(index)
+    removeAt(index)
+    return oldValue
+}
+
+internal fun <T> SparseArray<T>.gc() {
+    size()
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IntMapExtensions.kt b/services/permission/java/com/android/server/permission/access/immutable/IntMapExtensions.kt
new file mode 100644
index 0000000..ed7f0af
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IntMapExtensions.kt
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+inline fun <T> IntMap<T>.allIndexed(predicate: (Int, Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (!predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <T> IntMap<T>.anyIndexed(predicate: (Int, Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return true
+        }
+    }
+    return false
+}
+
+inline fun <T, R> IntMap<T>.firstNotNullOfOrNullIndexed(transform: (Int, Int, T) -> R): R? {
+    forEachIndexed { index, key, value ->
+        transform(index, key, value)?.let { return it }
+    }
+    return null
+}
+
+inline fun <T> IntMap<T>.forEachIndexed(action: (Int, Int, T) -> Unit) {
+    for (index in 0 until size) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+inline fun <T> IntMap<T>.forEachReversedIndexed(action: (Int, Int, T) -> Unit) {
+    for (index in lastIndex downTo 0) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+fun <T> IntMap<T>?.getWithDefault(key: Int, defaultValue: T): T {
+    this ?: return defaultValue
+    val index = indexOfKey(key)
+    return if (index >= 0) valueAt(index) else defaultValue
+}
+
+inline val <T> IntMap<T>.lastIndex: Int
+    get() = size - 1
+
+inline fun <T> IntMap<T>.noneIndexed(predicate: (Int, Int, T) -> Boolean): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <T> MutableIntMap<T>.getOrPut(key: Int, defaultValue: () -> T): T {
+    get(key)?.let { return it }
+    return defaultValue().also { put(key, it) }
+}
+
+operator fun <T> MutableIntMap<T>.minusAssign(key: Int) {
+    array.remove(key)
+}
+
+fun <T> MutableIntMap<T>.putWithDefault(key: Int, value: T, defaultValue: T): T {
+    val index = indexOfKey(key)
+    if (index >= 0) {
+        val oldValue = valueAt(index)
+        if (value != oldValue) {
+            if (value == defaultValue) {
+                removeAt(index)
+            } else {
+                putAt(index, value)
+            }
+        }
+        return oldValue
+    } else {
+        if (value != defaultValue) {
+            put(key, value)
+        }
+        return defaultValue
+    }
+}
+
+operator fun <T> MutableIntMap<T>.set(key: Int, value: T) {
+    array.put(key, value)
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IntReferenceMap.kt b/services/permission/java/com/android/server/permission/access/immutable/IntReferenceMap.kt
new file mode 100644
index 0000000..160b227
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IntReferenceMap.kt
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+import android.util.SparseArray
+
+/**
+ * Immutable map with index-based access, [Int] keys and mutable data structure values.
+ *
+ * @see MutableReference
+ */
+sealed class IntReferenceMap<I : Immutable<M>, M : I>(
+    internal val array: SparseArray<MutableReference<I, M>>
+) : Immutable<MutableIntReferenceMap<I, M>> {
+    val size: Int
+        get() = array.size()
+
+    fun isEmpty(): Boolean = array.size() == 0
+
+    operator fun contains(key: Int): Boolean = array.contains(key)
+
+    @Suppress("ReplaceGetOrSet")
+    operator fun get(key: Int): I? = array.get(key)?.get()
+
+    fun indexOfKey(key: Int): Int = array.indexOfKey(key)
+
+    fun keyAt(index: Int): Int = array.keyAt(index)
+
+    fun valueAt(index: Int): I = array.valueAt(index).get()
+
+    override fun toMutable(): MutableIntReferenceMap<I, M> = MutableIntReferenceMap(this)
+
+    override fun toString(): String = array.toString()
+}
+
+/**
+ * Mutable map with index-based access, [Int] keys and mutable data structure values.
+ *
+ * @see MutableReference
+ */
+class MutableIntReferenceMap<I : Immutable<M>, M : I>(
+    array: SparseArray<MutableReference<I, M>> = SparseArray()
+) : IntReferenceMap<I, M>(array) {
+    constructor(intReferenceMap: IntReferenceMap<I, M>) : this(
+        intReferenceMap.array.clone().apply {
+            for (i in 0 until size()) {
+                setValueAt(i, valueAt(i).toImmutable())
+            }
+        }
+    )
+
+    @Suppress("ReplaceGetOrSet")
+    fun mutate(key: Int): M? = array.get(key)?.mutate()
+
+    fun put(key: Int, value: M): I? = array.putReturnOld(key, MutableReference(value))?.get()
+
+    fun remove(key: Int): I? = array.removeReturnOld(key).also { array.gc() }?.get()
+
+    fun clear() {
+        array.clear()
+    }
+
+    fun mutateAt(index: Int): M = array.valueAt(index).mutate()
+
+    fun putAt(index: Int, value: M): I =
+        array.setValueAtReturnOld(index, MutableReference(value)).get()
+
+    fun removeAt(index: Int): I = array.removeAtReturnOld(index).also { array.gc() }.get()
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IntReferenceMapExtensions.kt b/services/permission/java/com/android/server/permission/access/immutable/IntReferenceMapExtensions.kt
new file mode 100644
index 0000000..b4de5d1
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IntReferenceMapExtensions.kt
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+inline fun <I : Immutable<M>, M : I> IntReferenceMap<I, M>.allIndexed(
+    predicate: (Int, Int, I) -> Boolean
+): Boolean {
+    forEachIndexed { index, key, value ->
+        if (!predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <I : Immutable<M>, M : I> IntReferenceMap<I, M>.anyIndexed(
+    predicate: (Int, Int, I) -> Boolean
+): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return true
+        }
+    }
+    return false
+}
+
+inline fun <I : Immutable<M>, M : I> IntReferenceMap<I, M>.forEachIndexed(
+    action: (Int, Int, I) -> Unit
+) {
+    for (index in 0 until size) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+inline fun <I : Immutable<M>, M : I> IntReferenceMap<I, M>.forEachReversedIndexed(
+    action: (Int, Int, I) -> Unit
+) {
+    for (index in lastIndex downTo 0) {
+        action(index, keyAt(index), valueAt(index))
+    }
+}
+
+inline val <I : Immutable<M>, M : I> IntReferenceMap<I, M>.lastIndex: Int
+    get() = size - 1
+
+inline fun <I : Immutable<M>, M : I> IntReferenceMap<I, M>.noneIndexed(
+    predicate: (Int, Int, I) -> Boolean
+): Boolean {
+    forEachIndexed { index, key, value ->
+        if (predicate(index, key, value)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun <I : Immutable<M>, M : I> MutableIntReferenceMap<I, M>.mutateOrPut(
+    key: Int,
+    defaultValue: () -> M
+): M {
+    mutate(key)?.let { return it }
+    return defaultValue().also { put(key, it) }
+}
+
+operator fun <I : Immutable<M>, M : I> MutableIntReferenceMap<I, M>.minusAssign(key: Int) {
+    array.remove(key)
+}
+
+operator fun <I : Immutable<M>, M : I> MutableIntReferenceMap<I, M>.set(key: Int, value: M) {
+    array.put(key, MutableReference(value))
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IntSet.kt b/services/permission/java/com/android/server/permission/access/immutable/IntSet.kt
new file mode 100644
index 0000000..21f2af2
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IntSet.kt
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+import android.util.SparseBooleanArray
+
+/**
+ * Immutable set with index-based access and [Int] elements.
+ */
+sealed class IntSet(
+    internal val array: SparseBooleanArray
+) : Immutable<MutableIntSet> {
+    val size: Int
+        get() = array.size()
+
+    fun isEmpty(): Boolean = array.size() == 0
+
+    operator fun contains(element: Int): Boolean = array.contains(element)
+
+    fun indexOf(element: Int): Int = array.indexOfKey(element)
+
+    fun elementAt(index: Int): Int = array.keyAt(index)
+
+    override fun toMutable(): MutableIntSet = MutableIntSet(this)
+
+    override fun toString(): String = array.toString()
+}
+
+/**
+ * Mutable set with index-based access and [Int] elements.
+ */
+class MutableIntSet(
+    array: SparseBooleanArray = SparseBooleanArray()
+) : IntSet(array) {
+    constructor(intSet: IntSet) : this(intSet.array.clone())
+
+    fun add(element: Int): Boolean =
+        if (array.contains(element)) {
+            false
+        } else {
+            array.put(element, true)
+            true
+        }
+
+    fun remove(element: Int): Boolean {
+        val index = array.indexOfKey(element)
+        return if (index >= 0) {
+            array.removeAt(index)
+            true
+        } else {
+            false
+        }
+    }
+
+    fun clear() {
+        array.clear()
+    }
+
+    fun removeAt(index: Int) {
+        array.removeAt(index)
+    }
+}
+
+// Unlike SparseArray, SparseBooleanArray is missing this method.
+private fun SparseBooleanArray.contains(key: Int): Boolean = indexOfKey(key) >= 0
diff --git a/services/permission/java/com/android/server/permission/access/immutable/IntSetExtensions.kt b/services/permission/java/com/android/server/permission/access/immutable/IntSetExtensions.kt
new file mode 100644
index 0000000..163ebbf
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/IntSetExtensions.kt
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+inline fun IntSet.allIndexed(predicate: (Int, Int) -> Boolean): Boolean {
+    forEachIndexed { index, element ->
+        if (!predicate(index, element)) {
+            return false
+        }
+    }
+    return true
+}
+
+inline fun IntSet.anyIndexed(predicate: (Int, Int) -> Boolean): Boolean {
+    forEachIndexed { index, element ->
+        if (predicate(index, element)) {
+            return true
+        }
+    }
+    return false
+}
+
+inline fun IntSet.forEachIndexed(action: (Int, Int) -> Unit) {
+    for (index in 0 until size) {
+        action(index, elementAt(index))
+    }
+}
+
+inline fun IntSet.forEachReversedIndexed(action: (Int, Int) -> Unit) {
+    for (index in lastIndex downTo 0) {
+        action(index, elementAt(index))
+    }
+}
+
+inline val IntSet.lastIndex: Int
+    get() = size - 1
+
+operator fun IntSet.minus(element: Int): MutableIntSet = toMutable().apply { this -= element }
+
+operator fun IntSet.minusAssign(element: Int) {
+    array.delete(element)
+}
+
+inline fun IntSet.noneIndexed(predicate: (Int, Int) -> Boolean): Boolean {
+    forEachIndexed { index, element ->
+        if (predicate(index, element)) {
+            return false
+        }
+    }
+    return true
+}
+
+operator fun IntSet.plus(element: Int): MutableIntSet = toMutable().apply { this += element }
+
+fun MutableIntSet(values: IntArray): MutableIntSet = MutableIntSet().apply{ this += values }
+
+operator fun MutableIntSet.plusAssign(element: Int) {
+    array.put(element, true)
+}
+
+operator fun MutableIntSet.plusAssign(set: IntSet) {
+    set.forEachIndexed { _, it -> this += it }
+}
+
+operator fun MutableIntSet.plusAssign(array: IntArray) {
+    array.forEach { this += it }
+}
diff --git a/services/permission/java/com/android/server/permission/access/immutable/MutableReference.kt b/services/permission/java/com/android/server/permission/access/immutable/MutableReference.kt
new file mode 100644
index 0000000..171cfeb
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/immutable/MutableReference.kt
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.immutable
+
+/**
+ * Wrapper class for reference to a mutable data structure instance.
+ *
+ * This class encapsulates the logic to mutate/copy a mutable data structure instance and update the
+ * reference to the new mutated instance. It also remembers the mutated instance so that it can be
+ * reused during further mutations.
+ *
+ * Instances of this class should be kept private within a data structure, with the [get] method
+ * exposed on the immutable interface of the data structure as a `getFoo` method, and the [mutate]
+ * method exposed on the mutable interface of the data structure as a `mutateFoo` method. When the
+ * data structure is mutated/copied, a new instance of this class should be obtained with
+ * [toImmutable], which makes the wrapped reference immutable-only again and thus prevents
+ * further modifications to a data structure accessed with its immutable interface.
+ *
+ * @see MutableIndexedReferenceMap
+ * @see MutableIntReferenceMap
+ */
+class MutableReference<I : Immutable<M>, M : I> private constructor(
+    private var immutable: I,
+    private var mutable: M?
+) {
+    constructor(mutable: M) : this(mutable, mutable)
+
+    /**
+     * Return an immutable reference to the wrapped mutable data structure.
+     */
+    fun get(): I = immutable
+
+    /**
+     * Make the wrapped mutable data structure mutable, by either calling [Immutable.toMutable] and
+     * replacing the wrapped reference with its result, or reusing the existing reference if it's
+     * already mutable.
+     */
+    fun mutate(): M {
+        mutable?.let { return it }
+        return immutable.toMutable().also {
+            immutable = it
+            mutable = it
+        }
+    }
+
+    /**
+     * Create a new [MutableReference] instance with the wrapped mutable data structure being
+     * immutable-only again.
+     */
+    fun toImmutable(): MutableReference<I, M> = MutableReference(immutable, null)
+
+    override fun equals(other: Any?): Boolean {
+        if (this === other) {
+            return true
+        }
+        if (javaClass != other?.javaClass) {
+            return false
+        }
+        other as MutableReference<*, *>
+        return immutable == other.immutable
+    }
+
+    override fun hashCode(): Int = immutable.hashCode()
+}
diff --git a/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionMigration.kt b/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionMigration.kt
new file mode 100644
index 0000000..691ed8f
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionMigration.kt
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.permission
+
+import android.util.Slog
+import com.android.server.LocalServices
+import com.android.server.permission.access.MutableAccessState
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.util.PackageVersionMigration
+import com.android.server.pm.permission.PermissionMigrationHelper
+
+/**
+ * This class migrate legacy permissions to unified permission subsystem
+ */
+class AppIdPermissionMigration {
+    internal fun migrateSystemState(state: MutableAccessState) {
+        val legacyPermissionsManager =
+            LocalServices.getService(PermissionMigrationHelper::class.java)!!
+        if (!legacyPermissionsManager.hasLegacyPermission()) {
+            return
+        }
+
+        migratePermissions(state.mutateSystemState().mutatePermissions(),
+            legacyPermissionsManager.legacyPermissions)
+        migratePermissions(state.mutateSystemState().mutatePermissionTrees(),
+            legacyPermissionsManager.legacyPermissionTrees, true)
+    }
+
+    private fun migratePermissions(
+        permissions: MutableIndexedMap<String, Permission>,
+        legacyPermissions: Map<String, PermissionMigrationHelper.LegacyPermission>,
+        isPermissionTree: Boolean = false
+    ) {
+        legacyPermissions.forEach { (_, legacyPermission) ->
+            val permission = Permission(
+                legacyPermission.permissionInfo, false, legacyPermission.type, 0
+            )
+            permissions[permission.name] = permission
+            if (DEBUG_MIGRATION) {
+                Slog.v(LOG_TAG, "Migrated permission: ${permission.name}, type: " +
+                    "${permission.type}, appId: ${permission.appId}, protectionLevel: " +
+                    "${permission.protectionLevel}, tree: $isPermissionTree"
+                )
+            }
+        }
+    }
+
+    internal fun migrateUserState(state: MutableAccessState, userId: Int) {
+        val permissionMigrationHelper =
+            LocalServices.getService(PermissionMigrationHelper::class.java)!!
+        if (!permissionMigrationHelper.hasLegacyPermissionState(userId)) {
+            return
+        }
+
+        val legacyAppIdPermissionStates =
+            permissionMigrationHelper.getLegacyPermissionStates(userId)
+        val version = PackageVersionMigration.getVersion(userId)
+
+        val userState = state.mutateUserState(userId)!!
+        val appIdPermissionFlags = userState.mutateAppIdPermissionFlags()
+        legacyAppIdPermissionStates.forEach { (appId, legacyPermissionStates) ->
+            val packageNames = state.externalState.appIdPackageNames[appId]
+            if (packageNames == null) {
+                Slog.w(LOG_TAG, "Dropping unknown app ID $appId when migrating permission state")
+                return@forEach
+            }
+
+            val permissionFlags = MutableIndexedMap<String, Int>()
+            appIdPermissionFlags[appId] = permissionFlags
+            legacyPermissionStates.forEach forEachPermission@ {
+                (permissionName, legacyPermissionState) ->
+                val permission = state.systemState.permissions[permissionName]
+                if (permission == null) {
+                    Slog.w(
+                        LOG_TAG, "Dropping unknown permission $permissionName for app ID $appId" +
+                            " when migrating permission state"
+                    )
+                    return@forEachPermission
+                }
+                permissionFlags[permissionName] = migratePermissionFlags(
+                    permission, legacyPermissionState, appId, userId
+                )
+            }
+
+            val packageVersions = userState.mutatePackageVersions()
+            packageNames.forEachIndexed { _, packageName ->
+                packageVersions[packageName] = version
+            }
+        }
+    }
+
+    private fun migratePermissionFlags(
+        permission: Permission,
+        legacyPermissionState: PermissionMigrationHelper.LegacyPermissionState,
+        appId: Int,
+        userId: Int
+    ): Int {
+        var flags = when {
+            permission.isNormal -> if (legacyPermissionState.isGranted) {
+                PermissionFlags.INSTALL_GRANTED
+            } else {
+                PermissionFlags.INSTALL_REVOKED
+            }
+            permission.isSignature || permission.isInternal ->
+                if (legacyPermissionState.isGranted) {
+                    if (permission.isDevelopment || permission.isRole) {
+                        PermissionFlags.PROTECTION_GRANTED or PermissionFlags.RUNTIME_GRANTED
+                    } else {
+                        PermissionFlags.PROTECTION_GRANTED
+                    }
+                } else {
+                    0
+                }
+            permission.isRuntime ->
+                if (legacyPermissionState.isGranted) PermissionFlags.RUNTIME_GRANTED else 0
+            else -> 0
+        }
+        flags = PermissionFlags.updateFlags(
+            permission, flags, legacyPermissionState.flags, legacyPermissionState.flags
+        )
+        if (DEBUG_MIGRATION) {
+            val oldFlagString = PermissionFlags.apiFlagsToString(legacyPermissionState.flags)
+            val newFlagString = PermissionFlags.toString(flags)
+            val oldGrantState = legacyPermissionState.isGranted
+            val newGrantState = PermissionFlags.isPermissionGranted(flags)
+            val flagsMismatch = legacyPermissionState.flags != PermissionFlags.toApiFlags(flags)
+            Slog.v(
+                LOG_TAG, "Migrated appId: $appId, permission: " +
+                    "${permission.name}, user: $userId, oldGrantState: $oldGrantState" +
+                    ", oldFlags: $oldFlagString, newFlags: $newFlagString, grantMismatch: " +
+                    "${oldGrantState != newGrantState}, flagsMismatch: $flagsMismatch"
+            )
+        }
+        return flags
+    }
+
+    companion object {
+        private val LOG_TAG = AppIdPermissionMigration::class.java.simpleName
+
+        private const val DEBUG_MIGRATION = false
+    }
+}
diff --git a/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionPersistence.kt b/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionPersistence.kt
new file mode 100644
index 0000000..2c8175b
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionPersistence.kt
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.permission.access.permission
+
+import android.content.pm.PermissionInfo
+import android.util.Slog
+import com.android.modules.utils.BinaryXmlPullParser
+import com.android.modules.utils.BinaryXmlSerializer
+import com.android.server.permission.access.AccessState
+import com.android.server.permission.access.AppIdPermissionFlags
+import com.android.server.permission.access.MutableAccessState
+import com.android.server.permission.access.MutableAppIdPermissionFlags
+import com.android.server.permission.access.WriteMode
+import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.util.andInv
+import com.android.server.permission.access.util.attribute
+import com.android.server.permission.access.util.attributeInt
+import com.android.server.permission.access.util.attributeIntHex
+import com.android.server.permission.access.util.attributeIntHexWithDefault
+import com.android.server.permission.access.util.attributeInterned
+import com.android.server.permission.access.util.forEachTag
+import com.android.server.permission.access.util.getAttributeIntHexOrDefault
+import com.android.server.permission.access.util.getAttributeIntHexOrThrow
+import com.android.server.permission.access.util.getAttributeIntOrThrow
+import com.android.server.permission.access.util.getAttributeValue
+import com.android.server.permission.access.util.getAttributeValueOrThrow
+import com.android.server.permission.access.util.hasBits
+import com.android.server.permission.access.util.tag
+import com.android.server.permission.access.util.tagName
+
+class AppIdPermissionPersistence {
+    fun BinaryXmlPullParser.parseSystemState(state: MutableAccessState) {
+        when (tagName) {
+            TAG_PERMISSION_TREES -> parsePermissions(state, true)
+            TAG_PERMISSIONS -> parsePermissions(state, false)
+            else -> {}
+        }
+    }
+
+    private fun BinaryXmlPullParser.parsePermissions(
+        state: MutableAccessState,
+        isPermissionTree: Boolean
+    ) {
+        val systemState = state.mutateSystemState(WriteMode.NONE)
+        val permissions = if (isPermissionTree) {
+            systemState.mutatePermissionTrees()
+        } else {
+            systemState.mutatePermissions()
+        }
+        forEachTag {
+            when (val tagName = tagName) {
+                TAG_PERMISSION -> parsePermission(permissions)
+                else -> Slog.w(LOG_TAG, "Ignoring unknown tag $tagName when parsing permissions")
+            }
+        }
+        permissions.forEachReversedIndexed { permissionIndex, _, permission ->
+            val packageName = permission.packageName
+            val externalState = state.externalState
+            if (packageName !in externalState.packageStates &&
+                packageName !in externalState.disabledSystemPackageStates) {
+                Slog.w(
+                    LOG_TAG, "Dropping permission ${permission.name} from unknown package" +
+                        " $packageName when parsing permissions"
+                )
+                permissions.removeAt(permissionIndex)
+                systemState.requestWriteMode(WriteMode.ASYNCHRONOUS)
+            }
+        }
+    }
+
+    private fun BinaryXmlPullParser.parsePermission(
+        permissions: MutableIndexedMap<String, Permission>
+    ) {
+        val name = getAttributeValueOrThrow(ATTR_NAME).intern()
+        @Suppress("DEPRECATION")
+        val permissionInfo = PermissionInfo().apply {
+            this.name = name
+            packageName = getAttributeValueOrThrow(ATTR_PACKAGE_NAME).intern()
+            protectionLevel = getAttributeIntHexOrThrow(ATTR_PROTECTION_LEVEL)
+        }
+        val type = getAttributeIntOrThrow(ATTR_TYPE)
+        when (type) {
+            Permission.TYPE_MANIFEST -> {}
+            Permission.TYPE_CONFIG -> {
+                Slog.w(LOG_TAG, "Ignoring unexpected config permission $name")
+                return
+            }
+            Permission.TYPE_DYNAMIC -> {
+                permissionInfo.apply {
+                    icon = getAttributeIntHexOrDefault(ATTR_ICON, 0)
+                    nonLocalizedLabel = getAttributeValue(ATTR_LABEL)
+                }
+            }
+            else -> {
+                Slog.w(LOG_TAG, "Ignoring permission $name with unknown type $type")
+                return
+            }
+        }
+        val permission = Permission(permissionInfo, false, type, 0)
+        permissions[name] = permission
+    }
+
+    fun BinaryXmlSerializer.serializeSystemState(state: AccessState) {
+        val systemState = state.systemState
+        serializePermissions(TAG_PERMISSION_TREES, systemState.permissionTrees)
+        serializePermissions(TAG_PERMISSIONS, systemState.permissions)
+    }
+
+    private fun BinaryXmlSerializer.serializePermissions(
+        tagName: String,
+        permissions: IndexedMap<String, Permission>
+    ) {
+        tag(tagName) {
+            permissions.forEachIndexed { _, _, it -> serializePermission(it) }
+        }
+    }
+
+    private fun BinaryXmlSerializer.serializePermission(permission: Permission) {
+        val type = permission.type
+        when (type) {
+            Permission.TYPE_MANIFEST, Permission.TYPE_DYNAMIC -> {}
+            Permission.TYPE_CONFIG -> return
+            else -> {
+                Slog.w(LOG_TAG, "Skipping serializing permission $name with unknown type $type")
+                return
+            }
+        }
+        tag(TAG_PERMISSION) {
+            attributeInterned(ATTR_NAME, permission.name)
+            attributeInterned(ATTR_PACKAGE_NAME, permission.packageName)
+            attributeIntHex(ATTR_PROTECTION_LEVEL, permission.protectionLevel)
+            attributeInt(ATTR_TYPE, type)
+            if (type == Permission.TYPE_DYNAMIC) {
+                val permissionInfo = permission.permissionInfo
+                attributeIntHexWithDefault(ATTR_ICON, permissionInfo.icon, 0)
+                permissionInfo.nonLocalizedLabel?.toString()?.let { attribute(ATTR_LABEL, it) }
+            }
+        }
+    }
+
+    fun BinaryXmlPullParser.parseUserState(state: MutableAccessState, userId: Int) {
+        when (tagName) {
+            TAG_APP_ID_PERMISSIONS -> parseAppIdPermissions(state, userId)
+            else -> {}
+        }
+    }
+
+    private fun BinaryXmlPullParser.parseAppIdPermissions(state: MutableAccessState, userId: Int) {
+        val userState = state.mutateUserState(userId, WriteMode.NONE)!!
+        val appIdPermissionFlags = userState.mutateAppIdPermissionFlags()
+        forEachTag {
+            when (tagName) {
+                TAG_APP_ID -> parseAppId(appIdPermissionFlags)
+                else -> Slog.w(LOG_TAG, "Ignoring unknown tag $name when parsing permission state")
+            }
+        }
+        appIdPermissionFlags.forEachReversedIndexed { appIdIndex, appId, _ ->
+            if (appId !in state.externalState.appIdPackageNames) {
+                Slog.w(LOG_TAG, "Dropping unknown app ID $appId when parsing permission state")
+                appIdPermissionFlags.removeAt(appIdIndex)
+                userState.requestWriteMode(WriteMode.ASYNCHRONOUS)
+            }
+        }
+    }
+
+    private fun BinaryXmlPullParser.parseAppId(appIdPermissionFlags: MutableAppIdPermissionFlags) {
+        val appId = getAttributeIntOrThrow(ATTR_ID)
+        val permissionFlags = MutableIndexedMap<String, Int>()
+        appIdPermissionFlags[appId] = permissionFlags
+        forEachTag {
+            when (tagName) {
+                TAG_PERMISSION -> parseAppIdPermission(permissionFlags)
+                else -> Slog.w(LOG_TAG, "Ignoring unknown tag $name when parsing permission state")
+            }
+        }
+    }
+
+    private fun BinaryXmlPullParser.parseAppIdPermission(
+        permissionFlags: MutableIndexedMap<String, Int>
+    ) {
+        val name = getAttributeValueOrThrow(ATTR_NAME).intern()
+        val flags = getAttributeIntOrThrow(ATTR_FLAGS)
+        permissionFlags[name] = flags
+    }
+
+    fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) {
+        serializeAppIdPermissions(state.userStates[userId]!!.appIdPermissionFlags)
+    }
+
+    private fun BinaryXmlSerializer.serializeAppIdPermissions(
+        appIdPermissionFlags: AppIdPermissionFlags
+    ) {
+        tag(TAG_APP_ID_PERMISSIONS) {
+            appIdPermissionFlags.forEachIndexed { _, appId, permissionFlags ->
+                serializeAppId(appId, permissionFlags)
+            }
+        }
+    }
+
+    private fun BinaryXmlSerializer.serializeAppId(
+        appId: Int,
+        permissionFlags: IndexedMap<String, Int>
+    ) {
+        tag(TAG_APP_ID) {
+            attributeInt(ATTR_ID, appId)
+            permissionFlags.forEachIndexed { _, name, flags ->
+                serializeAppIdPermission(name, flags)
+            }
+        }
+    }
+
+    private fun BinaryXmlSerializer.serializeAppIdPermission(name: String, flags: Int) {
+        tag(TAG_PERMISSION) {
+            attributeInterned(ATTR_NAME, name)
+            // Never serialize one-time permissions as granted.
+            val serializedFlags = if (flags.hasBits(PermissionFlags.ONE_TIME)) {
+                flags andInv PermissionFlags.RUNTIME_GRANTED
+            } else {
+                flags
+            }
+            attributeInt(ATTR_FLAGS, serializedFlags)
+        }
+    }
+
+    companion object {
+        private val LOG_TAG = AppIdPermissionPersistence::class.java.simpleName
+
+        private const val TAG_APP_ID = "app-id"
+        private const val TAG_APP_ID_PERMISSIONS = "app-id-permissions"
+        private const val TAG_PERMISSION = "permission"
+        private const val TAG_PERMISSIONS = "permissions"
+        private const val TAG_PERMISSION_TREES = "permission-trees"
+
+        private const val ATTR_FLAGS = "flags"
+        private const val ATTR_ICON = "icon"
+        private const val ATTR_ID = "id"
+        private const val ATTR_LABEL = "label"
+        private const val ATTR_NAME = "name"
+        private const val ATTR_PACKAGE_NAME = "packageName"
+        private const val ATTR_PROTECTION_LEVEL = "protectionLevel"
+        private const val ATTR_TYPE = "type"
+    }
+}
diff --git a/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionPolicy.kt b/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionPolicy.kt
new file mode 100644
index 0000000..345f101
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionPolicy.kt
@@ -0,0 +1,1594 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.permission
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.content.pm.PermissionGroupInfo
+import android.content.pm.PermissionInfo
+import android.content.pm.SigningDetails
+import android.os.Build
+import android.util.Slog
+import com.android.internal.os.RoSystemProperties
+import com.android.modules.utils.BinaryXmlPullParser
+import com.android.modules.utils.BinaryXmlSerializer
+import com.android.server.permission.access.AccessState
+import com.android.server.permission.access.GetStateScope
+import com.android.server.permission.access.MutableAccessState
+import com.android.server.permission.access.MutateStateScope
+import com.android.server.permission.access.PermissionUri
+import com.android.server.permission.access.SchemePolicy
+import com.android.server.permission.access.UidUri
+import com.android.server.permission.access.WriteMode
+import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.util.andInv
+import com.android.server.permission.access.util.hasAnyBit
+import com.android.server.permission.access.util.hasBits
+import com.android.server.permission.access.util.isInternal
+import com.android.server.pm.KnownPackages
+import com.android.server.pm.parsing.PackageInfoUtils
+import com.android.server.pm.permission.CompatibilityPermissionInfo
+import com.android.server.pm.pkg.AndroidPackage
+import com.android.server.pm.pkg.PackageState
+
+class AppIdPermissionPolicy : SchemePolicy() {
+    private val persistence = AppIdPermissionPersistence()
+
+    private val migration = AppIdPermissionMigration()
+
+    private val upgrade = AppIdPermissionUpgrade(this)
+
+    @Volatile
+    private var onPermissionFlagsChangedListeners:
+        IndexedListSet<OnPermissionFlagsChangedListener> = MutableIndexedListSet()
+    private val onPermissionFlagsChangedListenersLock = Any()
+
+    private val privilegedPermissionAllowlistViolations = MutableIndexedSet<String>()
+
+    override val subjectScheme: String
+        get() = UidUri.SCHEME
+
+    override val objectScheme: String
+        get() = PermissionUri.SCHEME
+
+    override fun GetStateScope.onStateMutated() {
+        onPermissionFlagsChangedListeners.forEachIndexed { _, it -> it.onStateMutated() }
+    }
+
+    override fun MutateStateScope.onInitialized() {
+        newState.externalState.configPermissions.forEach { (permissionName, permissionEntry) ->
+            val oldPermission = newState.systemState.permissions[permissionName]
+            val newPermission = if (oldPermission != null) {
+                if (permissionEntry.gids != null) {
+                    oldPermission.copy(
+                        gids = permissionEntry.gids, areGidsPerUser = permissionEntry.perUser
+                    )
+                } else {
+                    return@forEach
+                }
+            } else {
+                @Suppress("DEPRECATION")
+                val permissionInfo = PermissionInfo().apply {
+                    name = permissionName
+                    packageName = PLATFORM_PACKAGE_NAME
+                    protectionLevel = PermissionInfo.PROTECTION_SIGNATURE
+                }
+                if (permissionEntry.gids != null) {
+                    Permission(
+                        permissionInfo, false, Permission.TYPE_CONFIG, 0, permissionEntry.gids,
+                        permissionEntry.perUser
+                    )
+                } else {
+                    Permission(permissionInfo, false, Permission.TYPE_CONFIG, 0)
+                }
+            }
+            newState.mutateSystemState().mutatePermissions()[permissionName] = newPermission
+        }
+    }
+
+    override fun MutateStateScope.onUserAdded(userId: Int) {
+        newState.externalState.packageStates.forEach { (_, packageState) ->
+            evaluateAllPermissionStatesForPackageAndUser(packageState, userId, null)
+        }
+        newState.externalState.appIdPackageNames.forEachIndexed { _, appId, _ ->
+            inheritImplicitPermissionStates(appId, userId)
+        }
+    }
+
+    override fun MutateStateScope.onAppIdRemoved(appId: Int) {
+        newState.userStates.forEachIndexed { userStateIndex, _, userState ->
+            if (appId in userState.appIdPermissionFlags) {
+                newState.mutateUserStateAt(userStateIndex).mutateAppIdPermissionFlags() -= appId
+                // Skip notifying the change listeners since the app ID no longer exists.
+            }
+        }
+    }
+
+    override fun MutateStateScope.onStorageVolumeMounted(
+        volumeUuid: String?,
+        packageNames: List<String>,
+        isSystemUpdated: Boolean
+    ) {
+        val changedPermissionNames = MutableIndexedSet<String>()
+        packageNames.forEachIndexed { _, packageName ->
+            val packageState = newState.externalState.packageStates[packageName]!!
+            adoptPermissions(packageState, changedPermissionNames)
+            addPermissionGroups(packageState)
+            addPermissions(packageState, changedPermissionNames)
+            trimPermissions(packageState.packageName, changedPermissionNames)
+            trimPermissionStates(packageState.appId)
+            revokePermissionsOnPackageUpdate(packageState.appId)
+        }
+        changedPermissionNames.forEachIndexed { _, permissionName ->
+            evaluatePermissionStateForAllPackages(permissionName, null)
+        }
+
+        packageNames.forEachIndexed { _, packageName ->
+            val packageState = newState.externalState.packageStates[packageName]!!
+            val installedPackageState = if (isSystemUpdated) packageState else null
+            evaluateAllPermissionStatesForPackage(packageState, installedPackageState)
+        }
+        packageNames.forEachIndexed { _, packageName ->
+            val packageState = newState.externalState.packageStates[packageName]!!
+            newState.externalState.userIds.forEachIndexed { _, userId ->
+                inheritImplicitPermissionStates(packageState.appId, userId)
+            }
+        }
+    }
+
+    override fun MutateStateScope.onPackageAdded(packageState: PackageState) {
+        val changedPermissionNames = MutableIndexedSet<String>()
+        adoptPermissions(packageState, changedPermissionNames)
+        addPermissionGroups(packageState)
+        addPermissions(packageState, changedPermissionNames)
+        trimPermissions(packageState.packageName, changedPermissionNames)
+        trimPermissionStates(packageState.appId)
+        revokePermissionsOnPackageUpdate(packageState.appId)
+        changedPermissionNames.forEachIndexed { _, permissionName ->
+            evaluatePermissionStateForAllPackages(permissionName, null)
+        }
+        evaluateAllPermissionStatesForPackage(packageState, packageState)
+        newState.externalState.userIds.forEachIndexed { _, userId ->
+            inheritImplicitPermissionStates(packageState.appId, userId)
+        }
+    }
+
+    override fun MutateStateScope.onPackageRemoved(packageName: String, appId: Int) {
+        check(packageName !in newState.externalState.disabledSystemPackageStates) {
+            "Package $packageName reported as removed before disabled system package is enabled"
+        }
+
+        val changedPermissionNames = MutableIndexedSet<String>()
+        trimPermissions(packageName, changedPermissionNames)
+        if (appId in newState.externalState.appIdPackageNames) {
+            trimPermissionStates(appId)
+        }
+        changedPermissionNames.forEachIndexed { _, permissionName ->
+            evaluatePermissionStateForAllPackages(permissionName, null)
+        }
+    }
+
+    override fun MutateStateScope.onPackageInstalled(packageState: PackageState, userId: Int) {
+        // Clear UPGRADE_EXEMPT for all permissions requested by this package since there's
+        // an installer and the installer has made a decision.
+        clearRestrictedPermissionImplicitExemption(packageState, userId)
+    }
+
+    private fun MutateStateScope.clearRestrictedPermissionImplicitExemption(
+        packageState: PackageState,
+        userId: Int
+    ) {
+        // System apps can always retain their UPGRADE_EXEMPT.
+        if (packageState.isSystem) {
+            return
+        }
+        val androidPackage = packageState.androidPackage ?: return
+        val appId = packageState.appId
+        androidPackage.requestedPermissions.forEach { permissionName ->
+            val permission = newState.systemState.permissions[permissionName]
+                ?: return@forEach
+            if (!permission.isHardOrSoftRestricted) {
+                return@forEach
+            }
+            val isRequestedBySystemPackage = anyPackageInAppId(appId) {
+                it.isSystem && permissionName in it.androidPackage!!.requestedPermissions
+            }
+            if (isRequestedBySystemPackage) {
+                return@forEach
+            }
+            val oldFlags = getPermissionFlags(appId, userId, permissionName)
+            var newFlags = oldFlags andInv PermissionFlags.UPGRADE_EXEMPT
+            val isExempt = newFlags.hasAnyBit(PermissionFlags.MASK_EXEMPT)
+            newFlags = if (permission.isHardRestricted && !isExempt) {
+                newFlags or PermissionFlags.RESTRICTION_REVOKED
+            } else {
+                newFlags andInv PermissionFlags.RESTRICTION_REVOKED
+            }
+            newFlags = if (permission.isSoftRestricted && !isExempt) {
+                newFlags or PermissionFlags.SOFT_RESTRICTED
+            } else {
+                newFlags andInv PermissionFlags.SOFT_RESTRICTED
+            }
+            setPermissionFlags(appId, userId, permissionName, newFlags)
+        }
+    }
+
+    override fun MutateStateScope.onPackageUninstalled(
+        packageName: String,
+        appId: Int,
+        userId: Int
+    ) {
+        resetRuntimePermissions(packageName, userId)
+    }
+
+    fun MutateStateScope.resetRuntimePermissions(packageName: String, userId: Int) {
+        // It's okay to skip resetting permissions for packages that are removed,
+        // because their states will be trimmed in onPackageRemoved()/onAppIdRemoved()
+        val packageState = newState.externalState.packageStates[packageName] ?: return
+        val androidPackage = packageState.androidPackage ?: return
+        val appId = packageState.appId
+        androidPackage.requestedPermissions.forEach { permissionName ->
+            val permission = newState.systemState.permissions[permissionName]
+                ?: return@forEach
+            if (!permission.isRuntime || permission.isRemoved) {
+                return@forEach
+            }
+            val isRequestedByOtherPackages = anyPackageInAppId(appId) {
+                it.packageName != packageName &&
+                    permissionName in it.androidPackage!!.requestedPermissions
+            }
+            if (isRequestedByOtherPackages) {
+                return@forEach
+            }
+            val oldFlags = getPermissionFlags(appId, userId, permissionName)
+            if (oldFlags.hasAnyBit(SYSTEM_OR_POLICY_FIXED_MASK)) {
+                return@forEach
+            }
+            var newFlags = oldFlags
+            newFlags = if (
+                newFlags.hasBits(PermissionFlags.ROLE) || newFlags.hasBits(PermissionFlags.PREGRANT)
+            ) {
+                newFlags or PermissionFlags.RUNTIME_GRANTED
+            } else {
+                newFlags andInv PermissionFlags.RUNTIME_GRANTED
+            }
+            newFlags = newFlags andInv USER_SETTABLE_MASK
+            if (newFlags.hasBits(PermissionFlags.LEGACY_GRANTED)) {
+                newFlags = newFlags or PermissionFlags.IMPLICIT
+            }
+            setPermissionFlags(appId, userId, permissionName, newFlags)
+        }
+    }
+
+    private fun MutateStateScope.adoptPermissions(
+        packageState: PackageState,
+        changedPermissionNames: MutableIndexedSet<String>
+    ) {
+        val `package` = packageState.androidPackage!!
+        `package`.adoptPermissions.forEachIndexed { _, originalPackageName ->
+            val packageName = `package`.packageName
+            if (!canAdoptPermissions(packageName, originalPackageName)) {
+                return@forEachIndexed
+            }
+            newState.systemState.permissions.forEachIndexed permissions@ {
+                permissionIndex, permissionName, oldPermission ->
+                if (oldPermission.packageName != originalPackageName) {
+                    return@permissions
+                }
+                @Suppress("DEPRECATION")
+                val newPermissionInfo = PermissionInfo().apply {
+                    name = oldPermission.permissionInfo.name
+                    this.packageName = packageName
+                    protectionLevel = oldPermission.permissionInfo.protectionLevel
+                }
+                // Different from the old implementation, which removes the GIDs upon permission
+                // adoption, but adds them back on the next boot, we now just consistently keep the
+                // GIDs.
+                val newPermission = oldPermission.copy(
+                    permissionInfo = newPermissionInfo, isReconciled = false, appId = 0
+                )
+                newState.mutateSystemState().mutatePermissions()
+                    .putAt(permissionIndex, newPermission)
+                changedPermissionNames += permissionName
+            }
+        }
+    }
+
+    private fun MutateStateScope.canAdoptPermissions(
+        packageName: String,
+        originalPackageName: String
+    ): Boolean {
+        val originalPackageState = newState.externalState.packageStates[originalPackageName]
+            ?: return false
+        if (!originalPackageState.isSystem) {
+            Slog.w(
+                LOG_TAG, "Unable to adopt permissions from $originalPackageName to $packageName:" +
+                    " original package not in system partition"
+            )
+            return false
+        }
+        if (originalPackageState.androidPackage != null) {
+            Slog.w(
+                LOG_TAG, "Unable to adopt permissions from $originalPackageName to $packageName:" +
+                    " original package still exists"
+            )
+            return false
+        }
+        return true
+    }
+
+    private fun MutateStateScope.addPermissionGroups(packageState: PackageState) {
+        // Different from the old implementation, which decides whether the app is an instant app by
+        // the install flags, now for consistent behavior we allow adding permission groups if the
+        // app is non-instant in at least one user.
+        val isInstantApp = packageState.userStates.allIndexed { _, _, it -> it.isInstantApp }
+        if (isInstantApp) {
+            Slog.w(
+                LOG_TAG, "Ignoring permission groups declared in package" +
+                    " ${packageState.packageName}: instant apps cannot declare permission groups"
+            )
+            return
+        }
+        packageState.androidPackage!!.permissionGroups.forEachIndexed { _, parsedPermissionGroup ->
+            val newPermissionGroup = PackageInfoUtils.generatePermissionGroupInfo(
+                parsedPermissionGroup, PackageManager.GET_META_DATA.toLong()
+            )!!
+            // TODO: Clear permission state on group take-over?
+            val permissionGroupName = newPermissionGroup.name
+            val oldPermissionGroup = newState.systemState.permissionGroups[permissionGroupName]
+            if (oldPermissionGroup != null &&
+                newPermissionGroup.packageName != oldPermissionGroup.packageName) {
+                val newPackageName = newPermissionGroup.packageName
+                val oldPackageName = oldPermissionGroup.packageName
+                // Different from the old implementation, which defines permission group on
+                // a first-come-first-serve basis, and relies on system apps being scanned before
+                // non-system apps, we now allow system apps to override permission groups similar
+                // to permissions so that we no longer need to rely on the scan order.
+                if (!packageState.isSystem) {
+                    Slog.w(
+                        LOG_TAG, "Ignoring permission group $permissionGroupName declared in" +
+                            " package $newPackageName: already declared in another" +
+                            " package $oldPackageName"
+                    )
+                    return@forEachIndexed
+                }
+                if (newState.externalState.packageStates[oldPackageName]?.isSystem == true) {
+                    Slog.w(
+                        LOG_TAG, "Ignoring permission group $permissionGroupName declared in" +
+                            " system package $newPackageName: already declared in another" +
+                            " system package $oldPackageName"
+                    )
+                    return@forEachIndexed
+                }
+                Slog.w(
+                    LOG_TAG, "Overriding permission group $permissionGroupName with" +
+                        " new declaration in system package $newPackageName: originally" +
+                        " declared in another package $oldPackageName"
+                )
+            }
+            newState.mutateSystemState().mutatePermissionGroups()[permissionGroupName] =
+                newPermissionGroup
+        }
+    }
+
+    private fun MutateStateScope.addPermissions(
+        packageState: PackageState,
+        changedPermissionNames: MutableIndexedSet<String>
+    ) {
+        val androidPackage = packageState.androidPackage!!
+        // This may not be the same package as the old permission because the old permission owner
+        // can be different, hence using this somewhat strange name to prevent misuse.
+        val oldNewPackage = oldState.externalState.packageStates[packageState.packageName]
+            ?.androidPackage
+        val isPackageSigningChanged = oldNewPackage != null &&
+                androidPackage.signingDetails != oldNewPackage.signingDetails
+        androidPackage.permissions.forEachIndexed { _, parsedPermission ->
+            val newPermissionInfo = PackageInfoUtils.generatePermissionInfo(
+                parsedPermission, PackageManager.GET_META_DATA.toLong()
+            )!!
+            val permissionName = newPermissionInfo.name
+            val oldPermission = if (parsedPermission.isTree) {
+                newState.systemState.permissionTrees[permissionName]
+            } else {
+                newState.systemState.permissions[permissionName]
+            }
+            // Different from the old implementation, which may add an (incomplete) signature
+            // permission inside another package's permission tree, we now consistently ignore such
+            // permissions.
+            val permissionTree = findPermissionTree(permissionName)
+            val newPackageName = newPermissionInfo.packageName
+            if (permissionTree != null && newPackageName != permissionTree.packageName) {
+                Slog.w(
+                    LOG_TAG, "Ignoring permission $permissionName declared in package" +
+                        " $newPackageName: base permission tree ${permissionTree.name} is" +
+                        " declared in another package ${permissionTree.packageName}"
+                )
+                return@forEachIndexed
+            }
+            val newPermission = if (oldPermission != null &&
+                newPackageName != oldPermission.packageName) {
+                val oldPackageName = oldPermission.packageName
+                // Only allow system apps to redefine non-system permissions.
+                if (!packageState.isSystem) {
+                    Slog.w(
+                        LOG_TAG, "Ignoring permission $permissionName declared in package" +
+                            " $newPackageName: already declared in another package" +
+                            " $oldPackageName"
+                    )
+                    return@forEachIndexed
+                }
+                if (oldPermission.type == Permission.TYPE_CONFIG && !oldPermission.isReconciled) {
+                    // It's a config permission and has no owner, take ownership now.
+                    oldPermission.copy(
+                        permissionInfo = newPermissionInfo, isReconciled = true,
+                        type = Permission.TYPE_MANIFEST, appId = packageState.appId
+                    )
+                } else if (newState.externalState.packageStates[oldPackageName]?.isSystem != true) {
+                    Slog.w(
+                        LOG_TAG, "Overriding permission $permissionName with new declaration in" +
+                            " system package $newPackageName: originally declared in another" +
+                            " package $oldPackageName"
+                    )
+                    // Remove permission state on owner change.
+                    newState.externalState.userIds.forEachIndexed { _, userId ->
+                        newState.externalState.appIdPackageNames.forEachIndexed { _, appId, _ ->
+                            setPermissionFlags(appId, userId, permissionName, 0)
+                        }
+                    }
+                    // Different from the old implementation, which removes the GIDs upon permission
+                    // override, but adds them back on the next boot, we now just consistently keep
+                    // the GIDs.
+                    Permission(
+                        newPermissionInfo, true, Permission.TYPE_MANIFEST, packageState.appId,
+                        oldPermission.gids, oldPermission.areGidsPerUser
+                    )
+                } else {
+                    Slog.w(
+                        LOG_TAG, "Ignoring permission $permissionName declared in system package" +
+                            " $newPackageName: already declared in another system package" +
+                            " $oldPackageName"
+                    )
+                    return@forEachIndexed
+                }
+            } else {
+                if (oldPermission != null && oldPermission.isReconciled) {
+                    val isPermissionGroupChanged = newPermissionInfo.isRuntime &&
+                        newPermissionInfo.group != null &&
+                        newPermissionInfo.group != oldPermission.groupName
+                    val isPermissionProtectionChanged =
+                        oldPermission.type != Permission.TYPE_CONFIG && (
+                            (newPermissionInfo.isRuntime && !oldPermission.isRuntime) ||
+                                (newPermissionInfo.isInternal && !oldPermission.isInternal)
+                        )
+                    if (isPermissionGroupChanged || isPermissionProtectionChanged) {
+                        newState.externalState.userIds.forEachIndexed { _, userId ->
+                            newState.externalState.appIdPackageNames.forEachIndexed { _, appId, _ ->
+                                if (isPermissionGroupChanged) {
+                                    // We might auto-grant permissions if any permission of
+                                    // the group is already granted. Hence if the group of
+                                    // a granted permission changes we need to revoke it to
+                                    // avoid having permissions of the new group auto-granted.
+                                    Slog.w(
+                                        LOG_TAG, "Revoking runtime permission $permissionName for" +
+                                            " appId $appId and userId $userId as the permission" +
+                                            " group changed from ${oldPermission.groupName}" +
+                                            " to ${newPermissionInfo.group}"
+                                    )
+                                }
+                                if (isPermissionProtectionChanged) {
+                                    Slog.w(
+                                        LOG_TAG, "Revoking permission $permissionName for" +
+                                            " appId $appId and userId $userId as the permission" +
+                                            " protection changed."
+                                    )
+                                }
+                                setPermissionFlags(appId, userId, permissionName, 0)
+                            }
+                        }
+                    }
+                }
+
+                // Different from the old implementation, which doesn't update the permission
+                // definition upon app update, but does update it on the next boot, we now
+                // consistently update the permission definition upon app update.
+                @Suppress("IfThenToElvis")
+                if (oldPermission != null) {
+                    oldPermission.copy(
+                        permissionInfo = newPermissionInfo, isReconciled = true,
+                        type = Permission.TYPE_MANIFEST, appId = packageState.appId
+                    )
+                } else {
+                    Permission(
+                        newPermissionInfo, true, Permission.TYPE_MANIFEST, packageState.appId
+                    )
+                }
+            }
+
+            if (parsedPermission.isTree) {
+                newState.mutateSystemState().mutatePermissionTrees()[permissionName] = newPermission
+            } else {
+                newState.mutateSystemState().mutatePermissions()[permissionName] = newPermission
+                val isPermissionChanged = oldPermission == null ||
+                    newPackageName != oldPermission.packageName ||
+                    newPermission.protectionLevel != oldPermission.protectionLevel || (
+                        oldPermission.isReconciled && (
+                            (newPermission.isSignature && isPackageSigningChanged) || (
+                                newPermission.isKnownSigner &&
+                                    newPermission.knownCerts != oldPermission.knownCerts
+                            ) || (
+                                newPermission.isRuntime && newPermission.groupName != null &&
+                                    newPermission.groupName != oldPermission.groupName
+                            )
+                        )
+                    )
+                if (isPermissionChanged) {
+                    changedPermissionNames += permissionName
+                }
+            }
+        }
+    }
+
+    private fun MutateStateScope.trimPermissions(
+        packageName: String,
+        changedPermissionNames: MutableIndexedSet<String>
+    ) {
+        val packageState = newState.externalState.packageStates[packageName]
+        val androidPackage = packageState?.androidPackage
+        if (packageState != null && androidPackage == null) {
+            return
+        }
+        val disabledSystemPackage = newState.externalState.disabledSystemPackageStates[packageName]
+            ?.androidPackage
+        // Unlike in the previous implementation, we now also retain permission trees defined by
+        // disabled system packages for consistency with permissions.
+        newState.systemState.permissionTrees.forEachReversedIndexed {
+            permissionTreeIndex, permissionTreeName, permissionTree ->
+            if (permissionTree.packageName == packageName && (
+                packageState == null || androidPackage!!.permissions.noneIndexed { _, it ->
+                    it.isTree && it.name == permissionTreeName
+                }
+            ) && (
+                disabledSystemPackage?.permissions?.anyIndexed { _, it ->
+                    it.isTree && it.name == permissionTreeName
+                } != true
+            )) {
+                newState.mutateSystemState().mutatePermissionTrees().removeAt(permissionTreeIndex)
+            }
+        }
+
+        newState.systemState.permissions.forEachReversedIndexed {
+            permissionIndex, permissionName, permission ->
+            val updatedPermission = updatePermissionIfDynamic(permission)
+            newState.mutateSystemState().mutatePermissions()
+                .putAt(permissionIndex, updatedPermission)
+            if (updatedPermission.packageName == packageName && (
+                packageState == null || androidPackage!!.permissions.noneIndexed { _, it ->
+                    !it.isTree && it.name == permissionName
+                }
+            ) && (
+                disabledSystemPackage?.permissions?.anyIndexed { _, it ->
+                    !it.isTree && it.name == permissionName
+                } != true
+            )) {
+                // Different from the old implementation where we keep the permission state if the
+                // permission is declared by a disabled system package (ag/15189282), we now
+                // shouldn't be notified when the updated system package is removed but the disabled
+                // system package isn't re-enabled yet, so we don't need to maintain that brittle
+                // special case either.
+                newState.externalState.userIds.forEachIndexed { _, userId ->
+                    newState.externalState.appIdPackageNames.forEachIndexed { _, appId, _ ->
+                        setPermissionFlags(appId, userId, permissionName, 0)
+                    }
+                }
+                newState.mutateSystemState().mutatePermissions().removeAt(permissionIndex)
+                changedPermissionNames += permissionName
+            }
+        }
+    }
+
+    private fun MutateStateScope.updatePermissionIfDynamic(permission: Permission): Permission {
+        if (!permission.isDynamic) {
+            return permission
+        }
+        val permissionTree = findPermissionTree(permission.name) ?: return permission
+        @Suppress("DEPRECATION")
+        return permission.copy(
+            permissionInfo = PermissionInfo(permission.permissionInfo).apply {
+                packageName = permissionTree.packageName
+            }, appId = permissionTree.appId, isReconciled = true
+        )
+    }
+
+    private fun MutateStateScope.trimPermissionStates(appId: Int) {
+        val requestedPermissions = MutableIndexedSet<String>()
+        forEachPackageInAppId(appId) {
+            // Note that we still trim the permission states requested by disabled system packages.
+            // Because in the previous implementation:
+            // despite revokeSharedUserPermissionsForLeavingPackageInternal() retains permissions
+            // requested by disabled system packages, revokeUnusedSharedUserPermissionsLocked(),
+            // which is call upon app update installation, didn't do such preservation.
+            // Hence, permissions only requested by disabled system packages were still trimmed in
+            // the previous implementation.
+            requestedPermissions += it.androidPackage!!.requestedPermissions
+        }
+        newState.userStates.forEachIndexed { _, userId, userState ->
+            userState.appIdPermissionFlags[appId]?.forEachReversedIndexed { _, permissionName, _ ->
+                if (permissionName !in requestedPermissions) {
+                    setPermissionFlags(appId, userId, permissionName, 0)
+                }
+            }
+        }
+    }
+
+    private fun MutateStateScope.revokePermissionsOnPackageUpdate(appId: Int) {
+        val hasOldPackage = appId in oldState.externalState.appIdPackageNames &&
+            anyPackageInAppId(appId, oldState) { true }
+        if (!hasOldPackage) {
+            // Don't revoke anything if this isn't a package update, i.e. if information about the
+            // old package isn't available. Notably, this also means skipping packages changed via
+            // OTA, but the revocation here is also mostly for normal apps and there's no way to get
+            // information about the package before OTA anyway.
+            return
+        }
+
+        // If the app is updated, and has scoped storage permissions, then it is possible that the
+        // app updated in an attempt to get unscoped storage. If so, revoke all storage permissions.
+        val oldTargetSdkVersion =
+            reducePackageInAppId(appId, Build.VERSION_CODES.CUR_DEVELOPMENT, oldState) {
+                targetSdkVersion, packageState ->
+                targetSdkVersion.coerceAtMost(packageState.androidPackage!!.targetSdkVersion)
+            }
+        val newTargetSdkVersion =
+            reducePackageInAppId(appId, Build.VERSION_CODES.CUR_DEVELOPMENT, newState) {
+                targetSdkVersion, packageState ->
+                targetSdkVersion.coerceAtMost(packageState.androidPackage!!.targetSdkVersion)
+            }
+        @Suppress("ConvertTwoComparisonsToRangeCheck")
+        val isTargetSdkVersionDowngraded = oldTargetSdkVersion >= Build.VERSION_CODES.Q &&
+            newTargetSdkVersion < Build.VERSION_CODES.Q
+        @Suppress("ConvertTwoComparisonsToRangeCheck")
+        val isTargetSdkVersionUpgraded = oldTargetSdkVersion < Build.VERSION_CODES.Q &&
+            newTargetSdkVersion >= Build.VERSION_CODES.Q
+        val oldIsRequestLegacyExternalStorage = anyPackageInAppId(appId, oldState) {
+            it.androidPackage!!.isRequestLegacyExternalStorage
+        }
+        val newIsRequestLegacyExternalStorage = anyPackageInAppId(appId, newState) {
+            it.androidPackage!!.isRequestLegacyExternalStorage
+        }
+        val isNewlyRequestingLegacyExternalStorage = !isTargetSdkVersionUpgraded &&
+            !oldIsRequestLegacyExternalStorage && newIsRequestLegacyExternalStorage
+        val shouldRevokeStorageAndMediaPermissions = isNewlyRequestingLegacyExternalStorage ||
+            isTargetSdkVersionDowngraded
+        if (shouldRevokeStorageAndMediaPermissions) {
+            newState.userStates.forEachIndexed { _, userId, userState ->
+                userState.appIdPermissionFlags[appId]?.forEachReversedIndexed {
+                    _, permissionName, oldFlags ->
+                    // Do not revoke the permission during an upgrade if it's POLICY_FIXED or
+                    // SYSTEM_FIXED. Otherwise the user cannot grant back the permission.
+                    if (permissionName in STORAGE_AND_MEDIA_PERMISSIONS &&
+                        oldFlags.hasBits(PermissionFlags.RUNTIME_GRANTED) &&
+                        !oldFlags.hasAnyBit(SYSTEM_OR_POLICY_FIXED_MASK)) {
+                        Slog.v(
+                            LOG_TAG, "Revoking storage permission: $permissionName for appId: " +
+                                " $appId and user: $userId"
+                        )
+                        val newFlags = oldFlags andInv (
+                            PermissionFlags.RUNTIME_GRANTED or USER_SETTABLE_MASK
+                        )
+                        setPermissionFlags(appId, userId, permissionName, newFlags)
+                    }
+                }
+            }
+        }
+    }
+
+    private fun MutateStateScope.evaluatePermissionStateForAllPackages(
+        permissionName: String,
+        installedPackageState: PackageState?
+    ) {
+        val externalState = newState.externalState
+        externalState.userIds.forEachIndexed { _, userId ->
+            externalState.appIdPackageNames.forEachIndexed { _, appId, _ ->
+                val isPermissionRequested = anyPackageInAppId(appId) {
+                    permissionName in it.androidPackage!!.requestedPermissions
+                }
+                if (isPermissionRequested) {
+                    evaluatePermissionState(appId, userId, permissionName, installedPackageState)
+                }
+            }
+        }
+    }
+
+    private fun MutateStateScope.evaluateAllPermissionStatesForPackage(
+        packageState: PackageState,
+        installedPackageState: PackageState?
+    ) {
+        newState.externalState.userIds.forEachIndexed { _, userId ->
+            evaluateAllPermissionStatesForPackageAndUser(
+                packageState, userId, installedPackageState
+            )
+        }
+    }
+
+    private fun MutateStateScope.evaluateAllPermissionStatesForPackageAndUser(
+        packageState: PackageState,
+        userId: Int,
+        installedPackageState: PackageState?
+    ) {
+        packageState.androidPackage?.requestedPermissions?.forEach { permissionName ->
+            evaluatePermissionState(
+                packageState.appId, userId, permissionName, installedPackageState
+            )
+        }
+    }
+
+    private fun MutateStateScope.evaluatePermissionState(
+        appId: Int,
+        userId: Int,
+        permissionName: String,
+        installedPackageState: PackageState?
+    ) {
+        val packageNames = newState.externalState.appIdPackageNames[appId]!!
+        // Repeatedly checking whether a permission is requested can actually be costly, so we cache
+        // the result for this method which is frequently called during boot, instead of calling
+        // anyPackageInAppId() and checking requested permissions multiple times.
+        val requestingPackageStates = MutableIndexedList<PackageState>()
+        var hasMissingPackage = false
+        packageNames.forEachIndexed { _, packageName ->
+            val packageState = newState.externalState.packageStates[packageName]!!
+            val androidPackage = packageState.androidPackage
+            if (androidPackage != null) {
+                if (permissionName in androidPackage.requestedPermissions) {
+                    requestingPackageStates += packageState
+                }
+            } else {
+                hasMissingPackage = true
+            }
+        }
+        if (packageNames.size == 1 && hasMissingPackage) {
+            // For non-shared-user packages with missing androidPackage, skip evaluation.
+            return
+        }
+        val permission = newState.systemState.permissions[permissionName]
+        val oldFlags = getPermissionFlags(appId, userId, permissionName)
+        if (permission == null) {
+            if (oldFlags == 0) {
+                // If the permission definition is missing and we don't have any permission states
+                // for this permission, add the INSTALL_REVOKED flag to ensure that we don't
+                // automatically grant the permission when it's defined
+                setPermissionFlags(appId, userId, permissionName, PermissionFlags.INSTALL_REVOKED)
+            }
+            return
+        }
+        if (permission.isNormal) {
+            val wasGranted = oldFlags.hasBits(PermissionFlags.INSTALL_GRANTED)
+            if (!wasGranted) {
+                val wasRevoked = oldFlags.hasBits(PermissionFlags.INSTALL_REVOKED)
+                val isRequestedByInstalledPackage = installedPackageState != null &&
+                    permissionName in installedPackageState.androidPackage!!.requestedPermissions
+                val isRequestedBySystemPackage =
+                    requestingPackageStates.anyIndexed { _, it -> it.isSystem }
+                val isCompatibilityPermission = requestingPackageStates.anyIndexed { _, it ->
+                    isCompatibilityPermissionForPackage(it.androidPackage!!, permissionName)
+                }
+                // If this is an existing, non-system package,
+                // then we can't add any new permissions to it.
+                // Except if this is a permission that was added to the platform
+                var newFlags = if (!wasRevoked || isRequestedByInstalledPackage ||
+                    isRequestedBySystemPackage || isCompatibilityPermission) {
+                    PermissionFlags.INSTALL_GRANTED
+                } else {
+                    PermissionFlags.INSTALL_REVOKED
+                }
+                if (permission.isAppOp) {
+                    newFlags = newFlags or (
+                        oldFlags and (PermissionFlags.ROLE or PermissionFlags.USER_SET)
+                    )
+                }
+                setPermissionFlags(appId, userId, permissionName, newFlags)
+            }
+        } else if (permission.isSignature || permission.isInternal) {
+            val wasProtectionGranted = oldFlags.hasBits(PermissionFlags.PROTECTION_GRANTED)
+            var newFlags = if (hasMissingPackage && wasProtectionGranted) {
+                // Keep the non-runtime permission grants for shared UID with missing androidPackage
+                PermissionFlags.PROTECTION_GRANTED
+            } else {
+                val mayGrantByPrivileged = !permission.isPrivileged ||
+                    requestingPackageStates.anyIndexed { _, it ->
+                        checkPrivilegedPermissionAllowlist(it, permission)
+                    }
+                val shouldGrantBySignature = permission.isSignature &&
+                    requestingPackageStates.anyIndexed { _, it ->
+                        shouldGrantPermissionBySignature(it, permission)
+                    }
+                val shouldGrantByProtectionFlags = requestingPackageStates.anyIndexed { _, it ->
+                    shouldGrantPermissionByProtectionFlags(it, permission)
+                }
+                if (mayGrantByPrivileged &&
+                    (shouldGrantBySignature || shouldGrantByProtectionFlags)) {
+                    PermissionFlags.PROTECTION_GRANTED
+                } else {
+                    0
+                }
+            }
+            if (permission.isAppOp) {
+                newFlags = newFlags or (
+                    oldFlags and (PermissionFlags.ROLE or PermissionFlags.USER_SET)
+                )
+            }
+            // Different from the old implementation, which seemingly allows granting an
+            // unallowlisted privileged permission via development or role but revokes it upon next
+            // reconciliation, we now properly allows that because the privileged protection flag
+            // should only affect the other static flags, but not dynamic flags like development or
+            // role. This may be useful in the case of an updated system app.
+            if (permission.isDevelopment) {
+                newFlags = newFlags or (oldFlags and PermissionFlags.RUNTIME_GRANTED)
+            }
+            if (permission.isRole) {
+                newFlags = newFlags or (
+                    oldFlags and (PermissionFlags.ROLE or PermissionFlags.RUNTIME_GRANTED)
+                )
+            }
+            setPermissionFlags(appId, userId, permissionName, newFlags)
+        } else if (permission.isRuntime) {
+            var newFlags = oldFlags and PermissionFlags.MASK_RUNTIME
+            val wasRevoked = newFlags != 0 && !PermissionFlags.isPermissionGranted(newFlags)
+            val targetSdkVersion =
+                requestingPackageStates.reduceIndexed(Build.VERSION_CODES.CUR_DEVELOPMENT) {
+                    targetSdkVersion, _, packageState ->
+                    targetSdkVersion.coerceAtMost(packageState.androidPackage!!.targetSdkVersion)
+                }
+            if (targetSdkVersion < Build.VERSION_CODES.M) {
+                if (permission.isRuntimeOnly) {
+                    // Different from the old implementation, which simply skips a runtime-only
+                    // permission, we now only allow holding on to the restriction related flags,
+                    // since such flags may only be set one-time in some cases, and disallow all
+                    // other flags thus keeping it revoked.
+                    newFlags = newFlags and PermissionFlags.MASK_EXEMPT
+                } else {
+                    newFlags = newFlags or PermissionFlags.LEGACY_GRANTED
+                    if (wasRevoked) {
+                        newFlags = newFlags or PermissionFlags.APP_OP_REVOKED
+                    }
+                    // Explicitly check against the old state to determine if this permission is
+                    // new.
+                    val isNewPermission =
+                        getOldStatePermissionFlags(appId, userId, permissionName) == 0
+                    if (isNewPermission) {
+                        newFlags = newFlags or PermissionFlags.IMPLICIT
+                    }
+                }
+            } else {
+                val wasGrantedByLegacy = newFlags.hasBits(PermissionFlags.LEGACY_GRANTED)
+                val hasImplicitFlag = newFlags.hasBits(PermissionFlags.IMPLICIT)
+                if (wasGrantedByLegacy) {
+                    newFlags = newFlags andInv PermissionFlags.LEGACY_GRANTED
+                    if (!hasImplicitFlag) {
+                        newFlags = newFlags or PermissionFlags.RUNTIME_GRANTED
+                    }
+                }
+                val wasGrantedByImplicit = newFlags.hasBits(PermissionFlags.IMPLICIT_GRANTED)
+                val isLeanbackNotificationsPermission = newState.externalState.isLeanback &&
+                    permissionName in NOTIFICATIONS_PERMISSIONS
+                val isImplicitPermission = requestingPackageStates.anyIndexed { _, it ->
+                    permissionName in it.androidPackage!!.implicitPermissions
+                }
+                val sourcePermissions = newState.externalState
+                    .implicitToSourcePermissions[permissionName]
+                val isAnySourcePermissionNonRuntime = sourcePermissions?.anyIndexed {
+                    _, sourcePermissionName ->
+                    val sourcePermission = newState.systemState.permissions[sourcePermissionName]
+                    checkNotNull(sourcePermission) {
+                        "Unknown source permission $sourcePermissionName in split permissions"
+                    }
+                    !sourcePermission.isRuntime
+                } ?: false
+                val shouldGrantByImplicit = isLeanbackNotificationsPermission ||
+                    (isImplicitPermission && isAnySourcePermissionNonRuntime)
+                if (shouldGrantByImplicit) {
+                    newFlags = newFlags or PermissionFlags.IMPLICIT_GRANTED
+                    if (wasRevoked) {
+                        newFlags = newFlags or PermissionFlags.APP_OP_REVOKED
+                    }
+                } else {
+                    newFlags = newFlags andInv PermissionFlags.IMPLICIT_GRANTED
+                    if ((wasGrantedByLegacy || wasGrantedByImplicit) &&
+                        newFlags.hasBits(PermissionFlags.APP_OP_REVOKED)) {
+                        // The permission was granted from a compatibility grant or an implicit
+                        // grant, however this flag might still be set if the user denied this
+                        // permission in the settings. Hence upon app upgrade and when this
+                        // permission is no longer LEGACY_GRANTED or IMPLICIT_GRANTED and we revoke
+                        // the permission, we want to remove this flag so that the app can request
+                        // the permission again.
+                        newFlags = newFlags andInv (
+                            PermissionFlags.RUNTIME_GRANTED or PermissionFlags.APP_OP_REVOKED
+                        )
+                    }
+                }
+                if (!isImplicitPermission && hasImplicitFlag) {
+                    newFlags = newFlags andInv PermissionFlags.IMPLICIT
+                    var shouldRetainAsNearbyDevices = false
+                    if (permissionName in NEARBY_DEVICES_PERMISSIONS) {
+                        val accessBackgroundLocationFlags = getPermissionFlags(
+                            appId, userId, Manifest.permission.ACCESS_BACKGROUND_LOCATION
+                        )
+                        shouldRetainAsNearbyDevices =
+                            PermissionFlags.isAppOpGranted(accessBackgroundLocationFlags) &&
+                                !accessBackgroundLocationFlags.hasBits(PermissionFlags.IMPLICIT)
+                    }
+                    val shouldRetainByMask = newFlags.hasAnyBit(SYSTEM_OR_POLICY_FIXED_MASK)
+                    if (shouldRetainAsNearbyDevices || shouldRetainByMask) {
+                        if (wasGrantedByImplicit) {
+                            newFlags = newFlags or PermissionFlags.RUNTIME_GRANTED
+                        }
+                    } else {
+                        newFlags = newFlags andInv (
+                            PermissionFlags.RUNTIME_GRANTED or PermissionFlags.USER_SET or
+                                PermissionFlags.USER_FIXED
+                        )
+                    }
+                }
+            }
+
+            val wasExempt = newFlags.hasAnyBit(PermissionFlags.MASK_EXEMPT)
+            val wasRestricted = newFlags.hasAnyBit(PermissionFlags.MASK_RESTRICTED)
+            val isExempt = if (permission.isHardOrSoftRestricted && !wasExempt && !wasRestricted) {
+                // All restricted permissions start as exempt. If there's an installer for the
+                // package, we will drop this UPGRADE_EXEMPT flag when we receive the
+                // onPackageInstalled() callback and set up the INSTALLER_EXEMPT flags.
+                // UPGRADE_EXEMPT is chosen instead of other flags because it is the same flag that
+                // was assigned to pre-installed apps in RuntimePermissionsUpgradeController, and to
+                // apps with missing permission state.
+                // This way we make sure both pre-installed apps, and apps updated/installed after
+                // a rollback snapshot is taken, can get the allowlist for permissions that won't be
+                // allowlisted otherwise.
+                newFlags = newFlags or PermissionFlags.UPGRADE_EXEMPT
+                true
+            } else {
+                wasExempt
+            }
+            newFlags = if (permission.isHardRestricted && !isExempt) {
+                newFlags or PermissionFlags.RESTRICTION_REVOKED
+            } else {
+                newFlags andInv PermissionFlags.RESTRICTION_REVOKED
+            }
+            newFlags = if (permission.isSoftRestricted && !isExempt) {
+                newFlags or PermissionFlags.SOFT_RESTRICTED
+            } else {
+                newFlags andInv PermissionFlags.SOFT_RESTRICTED
+            }
+            setPermissionFlags(appId, userId, permissionName, newFlags)
+        } else {
+            Slog.e(LOG_TAG, "Unknown protection level ${permission.protectionLevel}" +
+                "for permission ${permission.name} while evaluating permission state" +
+                "for appId $appId and userId $userId")
+        }
+    }
+
+    private fun MutateStateScope.inheritImplicitPermissionStates(appId: Int, userId: Int) {
+        val implicitPermissions = MutableIndexedSet<String>()
+        forEachPackageInAppId(appId) {
+            implicitPermissions += it.androidPackage!!.implicitPermissions
+        }
+        implicitPermissions.forEachIndexed implicitPermissions@ { _, implicitPermissionName ->
+            val implicitPermission = newState.systemState.permissions[implicitPermissionName]
+            checkNotNull(implicitPermission) {
+                "Unknown implicit permission $implicitPermissionName in split permissions"
+            }
+            if (!implicitPermission.isRuntime) {
+                return@implicitPermissions
+            }
+            // Explicitly check against the old state to determine if this permission is new.
+            val isNewPermission =
+                getOldStatePermissionFlags(appId, userId, implicitPermissionName) == 0
+            if (!isNewPermission) {
+                return@implicitPermissions
+            }
+            val sourcePermissions = newState.externalState
+                .implicitToSourcePermissions[implicitPermissionName] ?: return@implicitPermissions
+            var newFlags = getPermissionFlags(appId, userId, implicitPermissionName)
+            sourcePermissions.forEachIndexed sourcePermissions@ { _, sourcePermissionName ->
+                val sourcePermission = newState.systemState.permissions[sourcePermissionName]
+                checkNotNull(sourcePermission) {
+                    "Unknown source permission $sourcePermissionName in split permissions"
+                }
+                val sourceFlags = getPermissionFlags(appId, userId, sourcePermissionName)
+                val isSourceGranted = PermissionFlags.isPermissionGranted(sourceFlags)
+                val isNewGranted = PermissionFlags.isPermissionGranted(newFlags)
+                val isGrantingNewFromRevoke = isSourceGranted && !isNewGranted
+                if (isSourceGranted == isNewGranted || isGrantingNewFromRevoke) {
+                    if (isGrantingNewFromRevoke) {
+                        newFlags = 0
+                    }
+                    newFlags = newFlags or (sourceFlags and PermissionFlags.MASK_RUNTIME)
+                }
+            }
+            if (implicitPermissionName in RETAIN_IMPLICIT_FLAGS_PERMISSIONS) {
+                newFlags = newFlags andInv PermissionFlags.IMPLICIT
+            } else {
+                newFlags = newFlags or PermissionFlags.IMPLICIT
+            }
+            setPermissionFlags(appId, userId, implicitPermissionName, newFlags)
+        }
+    }
+
+    private fun isCompatibilityPermissionForPackage(
+        androidPackage: AndroidPackage,
+        permissionName: String
+    ): Boolean {
+        for (compatibilityPermission in CompatibilityPermissionInfo.COMPAT_PERMS) {
+            if (compatibilityPermission.name == permissionName &&
+                androidPackage.targetSdkVersion < compatibilityPermission.sdkVersion) {
+                Slog.i(
+                    LOG_TAG, "Auto-granting $permissionName to old package" +
+                    " ${androidPackage.packageName}"
+                )
+                return true
+            }
+        }
+        return false
+    }
+
+    private fun MutateStateScope.shouldGrantPermissionBySignature(
+        packageState: PackageState,
+        permission: Permission
+    ): Boolean {
+        // Check if the package is allowed to use this signature permission.  A package is allowed
+        // to use a signature permission if:
+        // - it has the same set of signing certificates as the source package
+        // - or its signing certificate was rotated from the source package's certificate
+        // - or its signing certificate is a previous signing certificate of the defining
+        //     package, and the defining package still trusts the old certificate for permissions
+        // - or it shares a common signing certificate in its lineage with the defining package,
+        //     and the defining package still trusts the old certificate for permissions
+        // - or it shares the above relationships with the system package
+        val packageSigningDetails = packageState.androidPackage!!.signingDetails
+        val sourceSigningDetails = newState.externalState
+            .packageStates[permission.packageName]?.androidPackage?.signingDetails
+        val platformSigningDetails = newState.externalState
+            .packageStates[PLATFORM_PACKAGE_NAME]!!.androidPackage!!.signingDetails
+        return sourceSigningDetails?.hasCommonSignerWithCapability(packageSigningDetails,
+            SigningDetails.CertCapabilities.PERMISSION) == true ||
+            packageSigningDetails.hasAncestorOrSelf(platformSigningDetails) ||
+            platformSigningDetails.checkCapability(packageSigningDetails,
+                    SigningDetails.CertCapabilities.PERMISSION)
+    }
+
+    private fun MutateStateScope.checkPrivilegedPermissionAllowlist(
+        packageState: PackageState,
+        permission: Permission
+    ): Boolean {
+        if (RoSystemProperties.CONTROL_PRIVAPP_PERMISSIONS_DISABLE) {
+            return true
+        }
+        if (packageState.packageName == PLATFORM_PACKAGE_NAME) {
+            return true
+        }
+        if (!(packageState.isSystem && packageState.isPrivileged)) {
+            return true
+        }
+        if (permission.packageName !in
+            newState.externalState.privilegedPermissionAllowlistPackages) {
+            return true
+        }
+        val allowlistState = getPrivilegedPermissionAllowlistState(packageState, permission.name)
+        if (allowlistState != null) {
+            return allowlistState
+        }
+        // Updated system apps do not need to be allowlisted
+        if (packageState.isUpdatedSystemApp) {
+            return true
+        }
+        // Only enforce the privileged permission allowlist on boot
+        if (!newState.externalState.isSystemReady) {
+            // Apps that are in updated apex's do not need to be allowlisted
+            if (!packageState.isApkInUpdatedApex) {
+                Slog.w(
+                    LOG_TAG, "Privileged permission ${permission.name} for package" +
+                    " ${packageState.packageName} (${packageState.path}) not in" +
+                    " privileged permission allowlist"
+                )
+                if (RoSystemProperties.CONTROL_PRIVAPP_PERMISSIONS_ENFORCE) {
+                    privilegedPermissionAllowlistViolations += "${packageState.packageName}" +
+                        " (${packageState.path}): ${permission.name}"
+                }
+            }
+        }
+        return !RoSystemProperties.CONTROL_PRIVAPP_PERMISSIONS_ENFORCE
+    }
+
+    /**
+     * Get the whether a privileged permission is explicitly allowed or denied for a package in the
+     * allowlist, or `null` if it's not in the allowlist.
+     */
+    private fun MutateStateScope.getPrivilegedPermissionAllowlistState(
+        packageState: PackageState,
+        permissionName: String
+    ): Boolean? {
+        val permissionAllowlist = newState.externalState.permissionAllowlist
+        val apexModuleName = packageState.apexModuleName
+        val packageName = packageState.packageName
+        return when {
+            packageState.isVendor -> permissionAllowlist.getVendorPrivilegedAppAllowlistState(
+                packageName, permissionName
+            )
+            packageState.isProduct -> permissionAllowlist.getProductPrivilegedAppAllowlistState(
+                packageName, permissionName
+            )
+            packageState.isSystemExt ->
+                permissionAllowlist.getSystemExtPrivilegedAppAllowlistState(
+                    packageName, permissionName
+                )
+            apexModuleName != null -> {
+                val nonApexAllowlistState = permissionAllowlist.getPrivilegedAppAllowlistState(
+                    packageName, permissionName
+                )
+                if (nonApexAllowlistState != null) {
+                    // TODO(andreionea): Remove check as soon as all apk-in-apex
+                    // permission allowlists are migrated.
+                    Slog.w(
+                        LOG_TAG, "Package $packageName is an APK in APEX but has permission" +
+                            " allowlist on the system image, please bundle the allowlist in the" +
+                            " $apexModuleName APEX instead"
+                    )
+                }
+                val apexAllowlistState = permissionAllowlist.getApexPrivilegedAppAllowlistState(
+                    apexModuleName, packageName, permissionName
+                )
+                apexAllowlistState ?: nonApexAllowlistState
+            }
+            else -> permissionAllowlist.getPrivilegedAppAllowlistState(packageName, permissionName)
+        }
+    }
+
+    private inline fun MutateStateScope.anyPackageInAppId(
+        appId: Int,
+        state: AccessState = newState,
+        predicate: (PackageState) -> Boolean
+    ): Boolean {
+        val packageNames = state.externalState.appIdPackageNames[appId]!!
+        return packageNames.anyIndexed { _, packageName ->
+            val packageState = state.externalState.packageStates[packageName]!!
+            packageState.androidPackage != null && predicate(packageState)
+        }
+    }
+
+    private inline fun MutateStateScope.forEachPackageInAppId(
+        appId: Int,
+        state: AccessState = newState,
+        action: (PackageState) -> Unit
+    ) {
+        val packageNames = state.externalState.appIdPackageNames[appId]!!
+        packageNames.forEachIndexed { _, packageName ->
+            val packageState = state.externalState.packageStates[packageName]!!
+            if (packageState.androidPackage != null) {
+                action(packageState)
+            }
+        }
+    }
+
+    // Using Int instead of <T> to avoid autoboxing, since we only have the use case for Int.
+    private inline fun MutateStateScope.reducePackageInAppId(
+        appId: Int,
+        initialValue: Int,
+        state: AccessState = newState,
+        accumulator: (Int, PackageState) -> Int
+    ): Int {
+        val packageNames = state.externalState.appIdPackageNames[appId]!!
+        return packageNames.reduceIndexed(initialValue) { value, _, packageName ->
+            val packageState = state.externalState.packageStates[packageName]!!
+            if (packageState.androidPackage != null) {
+                accumulator(value, packageState)
+            } else {
+                value
+            }
+        }
+    }
+
+    private fun MutateStateScope.shouldGrantPermissionByProtectionFlags(
+        packageState: PackageState,
+        permission: Permission
+    ): Boolean {
+        val androidPackage = packageState.androidPackage!!
+        val knownPackages = newState.externalState.knownPackages
+        val packageName = packageState.packageName
+        if ((permission.isPrivileged || permission.isOem) && packageState.isSystem) {
+            val shouldGrant = if (packageState.isUpdatedSystemApp) {
+                // For updated system applications, a privileged/oem permission
+                // is granted only if it had been defined by the original application.
+                val disabledSystemPackageState = newState.externalState
+                    .disabledSystemPackageStates[packageState.packageName]
+                val disabledSystemPackage = disabledSystemPackageState?.androidPackage
+                disabledSystemPackage != null &&
+                    permission.name in disabledSystemPackage.requestedPermissions &&
+                    shouldGrantPrivilegedOrOemPermission(disabledSystemPackageState, permission)
+            } else {
+                shouldGrantPrivilegedOrOemPermission(packageState, permission)
+            }
+            if (shouldGrant) {
+                return true
+            }
+        }
+        if (permission.isPre23 && androidPackage.targetSdkVersion < Build.VERSION_CODES.M) {
+            // If this was a previously normal/dangerous permission that got moved
+            // to a system permission as part of the runtime permission redesign, then
+            // we still want to blindly grant it to old apps.
+            return true
+        }
+        if (permission.isInstaller && (
+            packageName in knownPackages[KnownPackages.PACKAGE_INSTALLER]!! ||
+                packageName in knownPackages[KnownPackages.PACKAGE_PERMISSION_CONTROLLER]!!
+        )) {
+            // If this permission is to be granted to the system installer and
+            // this app is an installer or permission controller, then it gets the permission.
+            return true
+        }
+        if (permission.isVerifier &&
+            packageName in knownPackages[KnownPackages.PACKAGE_VERIFIER]!!) {
+            // If this permission is to be granted to the system verifier and
+            // this app is a verifier, then it gets the permission.
+            return true
+        }
+        if (permission.isPreInstalled && packageState.isSystem) {
+            // Any pre-installed system app is allowed to get this permission.
+            return true
+        }
+        if (permission.isKnownSigner &&
+            androidPackage.signingDetails.hasAncestorOrSelfWithDigest(permission.knownCerts)) {
+            // If the permission is to be granted to a known signer then check if any of this
+            // app's signing certificates are in the trusted certificate digest Set.
+            return true
+        }
+        if (permission.isSetup &&
+            packageName in knownPackages[KnownPackages.PACKAGE_SETUP_WIZARD]!!) {
+            // If this permission is to be granted to the system setup wizard and
+            // this app is a setup wizard, then it gets the permission.
+            return true
+        }
+        if (permission.isSystemTextClassifier &&
+            packageName in knownPackages[KnownPackages.PACKAGE_SYSTEM_TEXT_CLASSIFIER]!!) {
+            // Special permissions for the system default text classifier.
+            return true
+        }
+        if (permission.isConfigurator &&
+            packageName in knownPackages[KnownPackages.PACKAGE_CONFIGURATOR]!!) {
+            // Special permissions for the device configurator.
+            return true
+        }
+        if (permission.isIncidentReportApprover &&
+            packageName in knownPackages[KnownPackages.PACKAGE_INCIDENT_REPORT_APPROVER]!!) {
+            // If this permission is to be granted to the incident report approver and
+            // this app is the incident report approver, then it gets the permission.
+            return true
+        }
+        if (permission.isAppPredictor &&
+            packageName in knownPackages[KnownPackages.PACKAGE_APP_PREDICTOR]!!) {
+            // Special permissions for the system app predictor.
+            return true
+        }
+        if (permission.isCompanion &&
+            packageName in knownPackages[KnownPackages.PACKAGE_COMPANION]!!) {
+            // Special permissions for the system companion device manager.
+            return true
+        }
+        if (permission.isRetailDemo &&
+            packageName in knownPackages[KnownPackages.PACKAGE_RETAIL_DEMO]!!) {
+            // Special permission granted only to the OEM specified retail demo app.
+            // Note that the original code was passing app ID as UID, so this behavior is kept
+            // unchanged.
+            return true
+        }
+        if (permission.isRecents &&
+            packageName in knownPackages[KnownPackages.PACKAGE_RECENTS]!!) {
+            // Special permission for the recents app.
+            return true
+        }
+        if (permission.isModule && packageState.apexModuleName != null) {
+            // Special permission granted for APKs inside APEX modules.
+            return true
+        }
+        return false
+    }
+
+    private fun MutateStateScope.shouldGrantPrivilegedOrOemPermission(
+        packageState: PackageState,
+        permission: Permission
+    ): Boolean {
+        val permissionName = permission.name
+        val packageName = packageState.packageName
+        when {
+            permission.isPrivileged -> {
+                if (packageState.isPrivileged) {
+                    // In any case, don't grant a privileged permission to privileged vendor apps,
+                    // if the permission's protectionLevel does not have the extra vendorPrivileged
+                    // flag.
+                    if (packageState.isVendor && !permission.isVendorPrivileged) {
+                        Slog.w(
+                            LOG_TAG, "Permission $permissionName cannot be granted to privileged" +
+                            " vendor app $packageName because it isn't a vendorPrivileged" +
+                            " permission"
+                        )
+                        return false
+                    }
+                    return true
+                }
+            }
+            permission.isOem -> {
+                if (packageState.isOem) {
+                    val allowlistState = newState.externalState.permissionAllowlist
+                        .getOemAppAllowlistState(packageName, permissionName)
+                    checkNotNull(allowlistState) {
+                        "OEM permission $permissionName requested by package" +
+                            " $packageName must be explicitly declared granted or not"
+                    }
+                    return allowlistState
+                }
+            }
+        }
+        return false
+    }
+
+    override fun MutateStateScope.onSystemReady() {
+        // HACK: PACKAGE_USAGE_STATS is the only permission with the retailDemo protection flag,
+        // and we have to wait until DevicePolicyManagerService is started to know whether the
+        // retail demo package is a profile owner so that it can have the permission.
+        // Since there's no simple callback for profile owner change, and we are deprecating and
+        // removing the retailDemo protection flag in favor of a proper role soon, we can just
+        // re-evaluate the permission here, which is also how the old implementation has been
+        // working.
+        // TODO: Partially revert ag/22690114 once we can remove support for the retailDemo
+        //  protection flag.
+        val externalState = newState.externalState
+        for (packageName in externalState.knownPackages[KnownPackages.PACKAGE_RETAIL_DEMO]!!) {
+            val appId = externalState.packageStates[packageName]?.appId ?: continue
+            newState.userStates.forEachIndexed { _, userId, _ ->
+                evaluatePermissionState(
+                    appId, userId, Manifest.permission.PACKAGE_USAGE_STATS, null
+                )
+            }
+        }
+        if (!privilegedPermissionAllowlistViolations.isEmpty()) {
+            throw IllegalStateException("Signature|privileged permissions not in privileged" +
+                " permission allowlist: $privilegedPermissionAllowlistViolations")
+        }
+    }
+
+    override fun BinaryXmlPullParser.parseSystemState(state: MutableAccessState) {
+        with(persistence) { this@parseSystemState.parseSystemState(state) }
+    }
+
+    override fun BinaryXmlSerializer.serializeSystemState(state: AccessState) {
+        with(persistence) { this@serializeSystemState.serializeSystemState(state) }
+    }
+
+    override fun BinaryXmlPullParser.parseUserState(state: MutableAccessState, userId: Int) {
+        with(persistence) { this@parseUserState.parseUserState(state, userId) }
+    }
+
+    override fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) {
+        with(persistence) { this@serializeUserState.serializeUserState(state, userId) }
+    }
+
+    fun GetStateScope.getPermissionTrees(): IndexedMap<String, Permission> =
+        state.systemState.permissionTrees
+
+    fun GetStateScope.findPermissionTree(permissionName: String): Permission? =
+        state.systemState.permissionTrees.firstNotNullOfOrNullIndexed {
+                _, permissionTreeName, permissionTree ->
+            if (permissionName.startsWith(permissionTreeName) &&
+                permissionName.length > permissionTreeName.length &&
+                permissionName[permissionTreeName.length] == '.') {
+                permissionTree
+            } else {
+                null
+            }
+        }
+
+    fun MutateStateScope.addPermissionTree(permission: Permission) {
+        newState.mutateSystemState().mutatePermissionTrees()[permission.name] = permission
+    }
+
+    /**
+     * returns all permission group definitions available in the system
+     */
+    fun GetStateScope.getPermissionGroups(): IndexedMap<String, PermissionGroupInfo> =
+        state.systemState.permissionGroups
+
+    /**
+     * returns all permission definitions available in the system
+     */
+    fun GetStateScope.getPermissions(): IndexedMap<String, Permission> =
+        state.systemState.permissions
+
+    fun MutateStateScope.addPermission(
+        permission: Permission,
+        isSynchronousWrite: Boolean = false
+    ) {
+        val writeMode = if (isSynchronousWrite) WriteMode.SYNCHRONOUS else WriteMode.ASYNCHRONOUS
+        newState.mutateSystemState(writeMode).mutatePermissions()[permission.name] = permission
+    }
+
+    fun MutateStateScope.removePermission(permission: Permission) {
+        newState.mutateSystemState().mutatePermissions() -= permission.name
+    }
+
+    fun GetStateScope.getUidPermissionFlags(appId: Int, userId: Int): IndexedMap<String, Int>? =
+        state.userStates[userId]?.appIdPermissionFlags?.get(appId)
+
+    fun GetStateScope.getPermissionFlags(
+        appId: Int,
+        userId: Int,
+        permissionName: String
+    ): Int = getPermissionFlags(state, appId, userId, permissionName)
+
+    private fun MutateStateScope.getOldStatePermissionFlags(
+        appId: Int,
+        userId: Int,
+        permissionName: String
+    ): Int = getPermissionFlags(oldState, appId, userId, permissionName)
+
+    private fun getPermissionFlags(
+        state: AccessState,
+        appId: Int,
+        userId: Int,
+        permissionName: String
+    ): Int =
+        state.userStates[userId]?.appIdPermissionFlags?.get(appId).getWithDefault(permissionName, 0)
+
+    fun MutateStateScope.setPermissionFlags(
+        appId: Int,
+        userId: Int,
+        permissionName: String,
+        flags: Int
+    ): Boolean =
+        updatePermissionFlags(appId, userId, permissionName, PermissionFlags.MASK_ALL, flags)
+
+    fun MutateStateScope.updatePermissionFlags(
+        appId: Int,
+        userId: Int,
+        permissionName: String,
+        flagMask: Int,
+        flagValues: Int
+    ): Boolean {
+        val oldFlags = newState.userStates[userId]!!.appIdPermissionFlags[appId]
+            .getWithDefault(permissionName, 0)
+        val newFlags = (oldFlags andInv flagMask) or (flagValues and flagMask)
+        if (oldFlags == newFlags) {
+            return false
+        }
+        val appIdPermissionFlags = newState.mutateUserState(userId)!!.mutateAppIdPermissionFlags()
+        val permissionFlags = appIdPermissionFlags.mutateOrPut(appId) { MutableIndexedMap() }
+        permissionFlags.putWithDefault(permissionName, newFlags, 0)
+        if (permissionFlags.isEmpty()) {
+            appIdPermissionFlags -= appId
+        }
+        onPermissionFlagsChangedListeners.forEachIndexed { _, it ->
+            it.onPermissionFlagsChanged(appId, userId, permissionName, oldFlags, newFlags)
+        }
+        return true
+    }
+
+    fun addOnPermissionFlagsChangedListener(listener: OnPermissionFlagsChangedListener) {
+        synchronized(onPermissionFlagsChangedListenersLock) {
+            onPermissionFlagsChangedListeners = onPermissionFlagsChangedListeners + listener
+        }
+    }
+
+    fun removeOnPermissionFlagsChangedListener(listener: OnPermissionFlagsChangedListener) {
+        synchronized(onPermissionFlagsChangedListenersLock) {
+            onPermissionFlagsChangedListeners = onPermissionFlagsChangedListeners - listener
+        }
+    }
+
+    override fun migrateSystemState(state: MutableAccessState) {
+        migration.migrateSystemState(state)
+    }
+
+    override fun migrateUserState(state: MutableAccessState, userId: Int) {
+        migration.migrateUserState(state, userId)
+    }
+
+    override fun MutateStateScope.upgradePackageState(
+        packageState: PackageState,
+        userId: Int,
+        version: Int
+    ) {
+        with(upgrade) { upgradePackageState(packageState, userId, version) }
+    }
+
+    companion object {
+        private val LOG_TAG = AppIdPermissionPolicy::class.java.simpleName
+
+        private const val PLATFORM_PACKAGE_NAME = "android"
+
+        // A set of permissions that we don't want to revoke when they are no longer implicit.
+        private val RETAIN_IMPLICIT_FLAGS_PERMISSIONS = indexedSetOf(
+            Manifest.permission.ACCESS_MEDIA_LOCATION,
+            Manifest.permission.ACTIVITY_RECOGNITION,
+            Manifest.permission.READ_MEDIA_AUDIO,
+            Manifest.permission.READ_MEDIA_IMAGES,
+            Manifest.permission.READ_MEDIA_VIDEO,
+        )
+
+        private val NEARBY_DEVICES_PERMISSIONS = indexedSetOf(
+            Manifest.permission.BLUETOOTH_ADVERTISE,
+            Manifest.permission.BLUETOOTH_CONNECT,
+            Manifest.permission.BLUETOOTH_SCAN,
+            Manifest.permission.NEARBY_WIFI_DEVICES
+        )
+
+        private val NOTIFICATIONS_PERMISSIONS = indexedSetOf(
+            Manifest.permission.POST_NOTIFICATIONS
+        )
+
+        private val STORAGE_AND_MEDIA_PERMISSIONS = indexedSetOf(
+            Manifest.permission.READ_EXTERNAL_STORAGE,
+            Manifest.permission.WRITE_EXTERNAL_STORAGE,
+            Manifest.permission.READ_MEDIA_AUDIO,
+            Manifest.permission.READ_MEDIA_VIDEO,
+            Manifest.permission.READ_MEDIA_IMAGES,
+            Manifest.permission.ACCESS_MEDIA_LOCATION,
+            Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED
+        )
+
+        /**
+         * Mask for all permission flags that can be set by the user
+         */
+        private const val USER_SETTABLE_MASK =
+            PermissionFlags.USER_SET or
+                PermissionFlags.USER_FIXED or
+                PermissionFlags.APP_OP_REVOKED or
+                PermissionFlags.ONE_TIME or
+                PermissionFlags.HIBERNATION or
+                PermissionFlags.USER_SELECTED
+
+        /**
+         * Mask for all permission flags that imply we shouldn't automatically modify the
+         * permission grant state.
+         */
+        private const val SYSTEM_OR_POLICY_FIXED_MASK =
+            PermissionFlags.SYSTEM_FIXED or PermissionFlags.POLICY_FIXED
+    }
+
+    /**
+     * Listener for permission flags changes.
+     */
+    abstract class OnPermissionFlagsChangedListener {
+        /**
+         * Called when a permission flags change has been made to the upcoming new state.
+         *
+         * Implementations should keep this method fast to avoid stalling the locked state mutation,
+         * and only call external code after [onStateMutated] when the new state has actually become
+         * the current state visible to external code.
+         */
+        abstract fun onPermissionFlagsChanged(
+            appId: Int,
+            userId: Int,
+            permissionName: String,
+            oldFlags: Int,
+            newFlags: Int
+        )
+
+        /**
+         * Called when the upcoming new state has become the current state.
+         *
+         * Implementations should keep this method fast to avoid stalling the locked state mutation.
+         */
+        abstract fun onStateMutated()
+    }
+}
diff --git a/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionUpgrade.kt b/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionUpgrade.kt
new file mode 100644
index 0000000..b644d8f
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/permission/AppIdPermissionUpgrade.kt
@@ -0,0 +1,272 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.permission
+
+import android.Manifest
+import android.os.Build
+import android.util.Slog
+import com.android.server.permission.access.MutateStateScope
+import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.util.andInv
+import com.android.server.permission.access.util.hasAnyBit
+import com.android.server.permission.access.util.hasBits
+import com.android.server.pm.pkg.PackageState
+
+class AppIdPermissionUpgrade(private val policy: AppIdPermissionPolicy) {
+    /**
+     * Upgrade the package permissions, if needed.
+     *
+     * @param version package version
+     *
+     * @see [com.android.server.permission.access.util.PackageVersionMigration.getVersion]
+     */
+    fun MutateStateScope.upgradePackageState(
+        packageState: PackageState,
+        userId: Int,
+        version: Int
+    ) {
+        val packageName = packageState.packageName
+        if (version <= 3) {
+            Slog.v(
+                LOG_TAG, "Allowlisting and upgrading background location permission for " +
+                    "package: $packageName, version: $version, user:$userId"
+            )
+            allowlistRestrictedPermissions(packageState, userId)
+            upgradeBackgroundLocationPermission(packageState, userId)
+        }
+        if (version <= 10) {
+            Slog.v(
+                LOG_TAG, "Upgrading access media location permission for package: $packageName" +
+                    ", version: $version, user: $userId"
+            )
+            upgradeAccessMediaLocationPermission(packageState, userId)
+        }
+        // TODO Enable isAtLeastT check, when moving subsystem to mainline.
+        if (version <= 12 /*&& SdkLevel.isAtLeastT()*/) {
+            Slog.v(
+                LOG_TAG, "Upgrading scoped permissions for package: $packageName" +
+                    ", version: $version, user: $userId"
+            )
+            upgradeAuralVisualMediaPermissions(packageState, userId)
+        }
+        // TODO Enable isAtLeastU check, when moving subsystem to mainline.
+        if (version <= 14 /*&& SdkLevel.isAtLeastU()*/) {
+            Slog.v(
+                LOG_TAG, "Upgrading visual media permission for package: $packageName" +
+                    ", version: $version, user: $userId"
+            )
+            upgradeUserSelectedVisualMediaPermission(packageState, userId)
+        }
+        // Add a new upgrade step: if (packageVersion <= LATEST_VERSION) { .... }
+        // Also increase LATEST_VERSION
+    }
+
+    private fun MutateStateScope.allowlistRestrictedPermissions(
+        packageState: PackageState,
+        userId: Int
+    ) {
+        packageState.androidPackage!!.requestedPermissions.forEach { permissionName ->
+            if (permissionName in LEGACY_RESTRICTED_PERMISSIONS) {
+                with(policy) {
+                    updatePermissionFlags(
+                        packageState.appId, userId, permissionName,
+                        PermissionFlags.UPGRADE_EXEMPT, PermissionFlags.UPGRADE_EXEMPT
+                    )
+                }
+            }
+        }
+    }
+
+    private fun MutateStateScope.upgradeBackgroundLocationPermission(
+        packageState: PackageState,
+        userId: Int
+    ) {
+        if (Manifest.permission.ACCESS_BACKGROUND_LOCATION in
+            packageState.androidPackage!!.requestedPermissions) {
+            val appId = packageState.appId
+            val accessFineLocationFlags = with(policy) {
+                getPermissionFlags(appId, userId, Manifest.permission.ACCESS_FINE_LOCATION)
+            }
+            val accessCoarseLocationFlags = with(policy) {
+                getPermissionFlags(appId, userId, Manifest.permission.ACCESS_COARSE_LOCATION)
+            }
+            val isForegroundLocationGranted =
+                PermissionFlags.isAppOpGranted(accessFineLocationFlags) ||
+                    PermissionFlags.isAppOpGranted(accessCoarseLocationFlags)
+            if (isForegroundLocationGranted) {
+                grantRuntimePermission(
+                    packageState, userId, Manifest.permission.ACCESS_BACKGROUND_LOCATION
+                )
+            }
+        }
+    }
+
+    private fun MutateStateScope.upgradeAccessMediaLocationPermission(
+        packageState: PackageState,
+        userId: Int
+    ) {
+        if (Manifest.permission.ACCESS_MEDIA_LOCATION in
+            packageState.androidPackage!!.requestedPermissions) {
+            val flags = with(policy) {
+                getPermissionFlags(
+                    packageState.appId, userId, Manifest.permission.READ_EXTERNAL_STORAGE
+                )
+            }
+            if (PermissionFlags.isAppOpGranted(flags)) {
+                grantRuntimePermission(
+                    packageState, userId, Manifest.permission.ACCESS_MEDIA_LOCATION
+                )
+            }
+        }
+    }
+
+    /**
+     * Upgrade permissions based on storage permissions grant
+     */
+    private fun MutateStateScope.upgradeAuralVisualMediaPermissions(
+        packageState: PackageState,
+        userId: Int
+    ) {
+        val androidPackage = packageState.androidPackage!!
+        if (androidPackage.targetSdkVersion < Build.VERSION_CODES.TIRAMISU) {
+            return
+        }
+        val requestedPermissionNames = androidPackage.requestedPermissions
+        val isStorageUserGranted = STORAGE_PERMISSIONS.anyIndexed { _, permissionName ->
+            if (permissionName !in requestedPermissionNames) {
+                return@anyIndexed false
+            }
+            val flags = with(policy) {
+                getPermissionFlags(packageState.appId, userId, permissionName)
+            }
+            PermissionFlags.isAppOpGranted(flags) && flags.hasBits(PermissionFlags.USER_SET)
+        }
+        if (isStorageUserGranted) {
+            AURAL_VISUAL_MEDIA_PERMISSIONS.forEachIndexed { _, permissionName ->
+                if (permissionName in requestedPermissionNames) {
+                    grantRuntimePermission(packageState, userId, permissionName)
+                }
+            }
+        }
+    }
+
+    /**
+     * Upgrade permission based on the grant in [Manifest.permission_group.READ_MEDIA_VISUAL]
+     */
+    private fun MutateStateScope.upgradeUserSelectedVisualMediaPermission(
+        packageState: PackageState,
+        userId: Int
+    ) {
+        val androidPackage = packageState.androidPackage!!
+        if (androidPackage.targetSdkVersion < Build.VERSION_CODES.TIRAMISU) {
+            return
+        }
+        val requestedPermissionNames = androidPackage.requestedPermissions
+        val isVisualMediaUserGranted = VISUAL_MEDIA_PERMISSIONS.anyIndexed { _, permissionName ->
+            if (permissionName !in requestedPermissionNames) {
+                return@anyIndexed false
+            }
+            val flags = with(policy) {
+                getPermissionFlags(packageState.appId, userId, permissionName)
+            }
+            PermissionFlags.isAppOpGranted(flags) && flags.hasBits(PermissionFlags.USER_SET)
+        }
+        if (isVisualMediaUserGranted) {
+            if (Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED in requestedPermissionNames) {
+                grantRuntimePermission(
+                    packageState, userId, Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED
+                )
+            }
+        }
+    }
+
+    private fun MutateStateScope.grantRuntimePermission(
+        packageState: PackageState,
+        userId: Int,
+        permissionName: String
+    ) {
+        Slog.v(
+            LOG_TAG, "Granting runtime permission for package: ${packageState.packageName}, " +
+                "permission: $permissionName, userId: $userId"
+        )
+        val permission = newState.systemState.permissions[permissionName]!!
+        if (packageState.getUserStateOrDefault(userId).isInstantApp && !permission.isInstant) {
+            return
+        }
+
+        val appId = packageState.appId
+        var flags = with(policy) { getPermissionFlags(appId, userId, permissionName) }
+        if (flags.hasAnyBit(MASK_ANY_FIXED)) {
+            Slog.v(
+                LOG_TAG,
+                "Not allowed to grant $permissionName to package ${packageState.packageName}"
+            )
+            return
+        }
+
+        flags = flags or PermissionFlags.RUNTIME_GRANTED
+        flags = flags andInv (
+            PermissionFlags.APP_OP_REVOKED or
+            PermissionFlags.IMPLICIT or
+            PermissionFlags.LEGACY_GRANTED or
+            PermissionFlags.HIBERNATION or
+            PermissionFlags.ONE_TIME
+        )
+        with(policy) { setPermissionFlags(appId, userId, permissionName, flags) }
+    }
+
+    companion object {
+        private val LOG_TAG = AppIdPermissionUpgrade::class.java.simpleName
+
+        private const val MASK_ANY_FIXED =
+            PermissionFlags.USER_SET or PermissionFlags.USER_FIXED or
+            PermissionFlags.POLICY_FIXED or PermissionFlags.SYSTEM_FIXED
+
+        private val LEGACY_RESTRICTED_PERMISSIONS = indexedSetOf(
+            Manifest.permission.ACCESS_BACKGROUND_LOCATION,
+            Manifest.permission.READ_EXTERNAL_STORAGE,
+            Manifest.permission.WRITE_EXTERNAL_STORAGE,
+            Manifest.permission.SEND_SMS,
+            Manifest.permission.RECEIVE_SMS,
+            Manifest.permission.RECEIVE_WAP_PUSH,
+            Manifest.permission.RECEIVE_MMS,
+            Manifest.permission.READ_CELL_BROADCASTS,
+            Manifest.permission.READ_CALL_LOG,
+            Manifest.permission.WRITE_CALL_LOG,
+            Manifest.permission.PROCESS_OUTGOING_CALLS
+        )
+
+        private val STORAGE_PERMISSIONS = indexedSetOf(
+            Manifest.permission.READ_EXTERNAL_STORAGE,
+            Manifest.permission.WRITE_EXTERNAL_STORAGE
+        )
+        private val AURAL_VISUAL_MEDIA_PERMISSIONS = indexedSetOf(
+            Manifest.permission.READ_MEDIA_AUDIO,
+            Manifest.permission.READ_MEDIA_IMAGES,
+            Manifest.permission.READ_MEDIA_VIDEO,
+            Manifest.permission.ACCESS_MEDIA_LOCATION,
+            Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED
+        )
+        // Visual media permissions in T
+        private val VISUAL_MEDIA_PERMISSIONS = indexedSetOf(
+            Manifest.permission.READ_MEDIA_IMAGES,
+            Manifest.permission.READ_MEDIA_VIDEO,
+            Manifest.permission.ACCESS_MEDIA_LOCATION
+        )
+    }
+}
diff --git a/services/permission/java/com/android/server/permission/access/permission/Permission.kt b/services/permission/java/com/android/server/permission/access/permission/Permission.kt
index 714480c..c7fe1a9 100644
--- a/services/permission/java/com/android/server/permission/access/permission/Permission.kt
+++ b/services/permission/java/com/android/server/permission/access/permission/Permission.kt
@@ -140,9 +140,7 @@
         get() = permissionInfo.flags.hasBits(PermissionInfo.FLAG_SOFT_RESTRICTED)
 
     inline val isHardOrSoftRestricted: Boolean
-        get() = permissionInfo.flags.hasBits(
-            PermissionInfo.FLAG_HARD_RESTRICTED or PermissionInfo.FLAG_SOFT_RESTRICTED
-        )
+        get() = isHardRestricted || isSoftRestricted
 
     inline val isImmutablyRestricted: Boolean
         get() = permissionInfo.flags.hasBits(PermissionInfo.FLAG_IMMUTABLY_RESTRICTED)
@@ -170,5 +168,13 @@
         const val TYPE_CONFIG = 1
         // The permission is defined dynamically.
         const val TYPE_DYNAMIC = 2
+
+        fun typeToString(type: Int): String =
+            when (type) {
+                TYPE_MANIFEST -> "TYPE_MANIFEST"
+                TYPE_CONFIG -> "TYPE_CONFIG"
+                TYPE_DYNAMIC -> "TYPE_DYNAMIC"
+                else -> type.toString()
+            }
     }
 }
diff --git a/services/permission/java/com/android/server/permission/access/permission/PermissionFlags.kt b/services/permission/java/com/android/server/permission/access/permission/PermissionFlags.kt
index 48658ff..550d148 100644
--- a/services/permission/java/com/android/server/permission/access/permission/PermissionFlags.kt
+++ b/services/permission/java/com/android/server/permission/access/permission/PermissionFlags.kt
@@ -22,6 +22,7 @@
 import android.os.Build
 import android.permission.PermissionManager
 import com.android.server.permission.access.util.andInv
+import com.android.server.permission.access.util.flagsToString
 import com.android.server.permission.access.util.hasAnyBit
 import com.android.server.permission.access.util.hasBits
 
@@ -137,7 +138,7 @@
      * For example, this flag may be set in
      * [com.android.server.pm.permission.DefaultPermissionGrantPolicy].
      *
-     * @see PackageManager.FLAG_PERMISSION_SYSTEM_FIXED
+     * @see PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT
      */
     const val PREGRANT = 1 shl 9
 
@@ -317,6 +318,11 @@
      */
     const val MASK_EXEMPT = INSTALLER_EXEMPT or SYSTEM_EXEMPT or UPGRADE_EXEMPT
 
+    /**
+     * Mask for all permission flags about permission restriction.
+     */
+    const val MASK_RESTRICTED = RESTRICTION_REVOKED or SOFT_RESTRICTED
+
     fun isPermissionGranted(flags: Int): Boolean {
         if (flags.hasBits(INSTALL_GRANTED)) {
             return true
@@ -477,4 +483,38 @@
         }
         return flags
     }
+
+    fun flagToString(flag: Int): String =
+        when (flag) {
+            INSTALL_GRANTED -> "INSTALL_GRANTED"
+            INSTALL_REVOKED -> "INSTALL_REVOKED"
+            PROTECTION_GRANTED -> "PROTECTION_GRANTED"
+            ROLE -> "ROLE"
+            RUNTIME_GRANTED -> "RUNTIME_GRANTED"
+            USER_SET -> "USER_SET"
+            USER_FIXED -> "USER_FIXED"
+            POLICY_FIXED -> "POLICY_FIXED"
+            SYSTEM_FIXED -> "SYSTEM_FIXED"
+            PREGRANT -> "PREGRANT"
+            LEGACY_GRANTED -> "LEGACY_GRANTED"
+            IMPLICIT_GRANTED -> "IMPLICIT_GRANTED"
+            IMPLICIT -> "IMPLICIT"
+            USER_SENSITIVE_WHEN_GRANTED -> "USER_SENSITIVE_WHEN_GRANTED"
+            USER_SENSITIVE_WHEN_REVOKED -> "USER_SENSITIVE_WHEN_REVOKED"
+            INSTALLER_EXEMPT -> "INSTALLER_EXEMPT"
+            SYSTEM_EXEMPT -> "SYSTEM_EXEMPT"
+            UPGRADE_EXEMPT -> "UPGRADE_EXEMPT"
+            RESTRICTION_REVOKED -> "RESTRICTION_REVOKED"
+            SOFT_RESTRICTED -> "SOFT_RESTRICTED"
+            APP_OP_REVOKED -> "APP_OP_REVOKED"
+            ONE_TIME -> "ONE_TIME"
+            HIBERNATION -> "HIBERNATION"
+            USER_SELECTED -> "USER_SELECTED"
+            else -> "0x${flag.toUInt().toString(16).uppercase()}"
+        }
+
+    fun toString(flags: Int): String = flags.flagsToString { flagToString(it) }
+
+    fun apiFlagsToString(apiFlags: Int): String =
+        apiFlags.flagsToString { PackageManager.permissionFlagToString(it) }
 }
diff --git a/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt b/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt
index de7dc3b..edacf188 100644
--- a/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt
+++ b/services/permission/java/com/android/server/permission/access/permission/PermissionService.kt
@@ -45,9 +45,14 @@
 import android.permission.PermissionControllerManager
 import android.permission.PermissionManager
 import android.provider.Settings
+import android.util.ArrayMap
+import android.util.ArraySet
 import android.util.DebugUtils
+import android.util.IndentingPrintWriter
 import android.util.IntArray as GrowingIntArray
-import android.util.Log
+import android.util.Slog
+import android.util.SparseBooleanArray
+import com.android.internal.annotations.GuardedBy
 import com.android.internal.compat.IPlatformCompat
 import com.android.internal.logging.MetricsLogger
 import com.android.internal.logging.nano.MetricsProto
@@ -60,13 +65,15 @@
 import com.android.server.ServiceThread
 import com.android.server.SystemConfig
 import com.android.server.permission.access.AccessCheckingService
+import com.android.server.permission.access.AccessState
 import com.android.server.permission.access.AppOpUri
 import com.android.server.permission.access.GetStateScope
 import com.android.server.permission.access.MutateStateScope
 import com.android.server.permission.access.PermissionUri
 import com.android.server.permission.access.UidUri
-import com.android.server.permission.access.appop.UidAppOpPolicy
+import com.android.server.permission.access.appop.AppIdAppOpPolicy
 import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
+import com.android.server.permission.access.immutable.* // ktlint-disable no-wildcard-imports
 import com.android.server.permission.access.util.andInv
 import com.android.server.permission.access.util.hasAnyBit
 import com.android.server.permission.access.util.hasBits
@@ -101,7 +108,7 @@
     private val service: AccessCheckingService
 ) : PermissionManagerServiceInterface {
     private val policy =
-        service.getSchemePolicy(UidUri.SCHEME, PermissionUri.SCHEME) as UidPermissionPolicy
+        service.getSchemePolicy(UidUri.SCHEME, PermissionUri.SCHEME) as AppIdPermissionPolicy
 
     private val context = service.context
     private lateinit var metricsLogger: MetricsLogger
@@ -117,7 +124,11 @@
     private lateinit var onPermissionsChangeListeners: OnPermissionsChangeListeners
     private lateinit var onPermissionFlagsChangedListener: OnPermissionFlagsChangedListener
 
-    private val mountedStorageVolumes = IndexedSet<String?>()
+    private val storageVolumeLock = Any()
+    @GuardedBy("storageVolumeLock")
+    private val mountedStorageVolumes = ArraySet<String?>()
+    @GuardedBy("storageVolumeLock")
+    private val storageVolumePackageNames = ArrayMap<String?, MutableList<String>>()
 
     private lateinit var permissionControllerManager: PermissionControllerManager
 
@@ -128,7 +139,7 @@
      * This array (`userId -> noDelayedBackupLeft`) is `true` for all the users where
      * there is **no more** delayed backup left.
      */
-    private val isDelayedPermissionBackupFinished = IntBooleanMap()
+    private val isDelayedPermissionBackupFinished = SparseBooleanArray()
 
     fun initialize() {
         metricsLogger = MetricsLogger()
@@ -142,6 +153,12 @@
         userManagerInternal = LocalServices.getService(UserManagerInternal::class.java)
         userManagerService = UserManagerService.getInstance()
 
+        // The package info cache is the cache for package and permission information.
+        // Disable the package info and package permission caches locally but leave the
+        // checkPermission cache active.
+        PackageManager.invalidatePackageInfoCache()
+        PermissionManager.disablePackageNamePermissionCache()
+
         handlerThread = ServiceThread(LOG_TAG, Process.THREAD_PRIORITY_BACKGROUND, true)
             .apply { start() }
         handler = Handler(handlerThread.looper)
@@ -161,7 +178,7 @@
                 with(policy) { getPermissionGroups() }
             }
 
-            return permissionGroups.mapNotNullIndexed { _, _, permissionGroup ->
+            return permissionGroups.mapNotNullIndexedTo(ArrayList()) { _, _, permissionGroup ->
                 if (snapshot.isPackageVisibleToUid(permissionGroup.packageName, callingUid)) {
                     permissionGroup.generatePermissionGroupInfo(flags)
                 } else {
@@ -229,7 +246,7 @@
             val opPackage = snapshot.getPackageState(opPackageName)?.androidPackage
             targetSdkVersion = when {
                 // System sees all flags.
-                isRootOrSystemOrShell(callingUid) -> Build.VERSION_CODES.CUR_DEVELOPMENT
+                isRootOrSystemOrShellUid(callingUid) -> Build.VERSION_CODES.CUR_DEVELOPMENT
                 opPackage != null -> opPackage.targetSdkVersion
                 else -> Build.VERSION_CODES.CUR_DEVELOPMENT
             }
@@ -272,8 +289,7 @@
                 return null
             }
 
-            val permissions: IndexedMap<String, Permission>
-            service.getState {
+            val permissions = service.getState {
                 if (permissionGroupName != null) {
                     val permissionGroup =
                         with(policy) { getPermissionGroups()[permissionGroupName] } ?: return null
@@ -283,10 +299,10 @@
                     }
                 }
 
-                permissions = with(policy) { getPermissions() }
+                with(policy) { getPermissions() }
             }
 
-            return permissions.mapNotNullIndexed { _, _, permission ->
+            return permissions.mapNotNullIndexedTo(ArrayList()) { _, _, permission ->
                 if (permission.groupName == permissionGroupName &&
                     snapshot.isPackageVisibleToUid(permission.packageName, callingUid)
                 ) {
@@ -311,15 +327,15 @@
     private inline fun getPermissionsWithProtectionOrProtectionFlags(
         predicate: (Permission) -> Boolean
     ): List<PermissionInfo> {
-        service.getState {
-            with(policy) {
-                return getPermissions().mapNotNullIndexed { _, _, permission ->
-                    if (predicate(permission)) {
-                        permission.generatePermissionInfo(0)
-                    } else {
-                        null
-                    }
-                }
+        val permissions = service.getState {
+            with(policy) { getPermissions() }
+        }
+
+        return permissions.mapNotNullIndexedTo(ArrayList()) { _, _, permission ->
+            if (predicate(permission)) {
+                permission.generatePermissionInfo(0)
+            } else {
+                null
             }
         }
     }
@@ -337,7 +353,8 @@
         val permissions = service.getState {
             with(policy) { getPermissions() }
         }
-        return permissions.mapNotNullIndexedToSet { _, _, permission ->
+
+        return permissions.mapNotNullIndexedTo(ArraySet()) { _, _, permission ->
             if (permission.packageName == packageName) {
                 permission.name
             } else {
@@ -434,7 +451,7 @@
     private fun GetStateScope.calculatePermissionTreeFootprint(permissionTree: Permission): Int {
         var size = 0
         with(policy) {
-            getPermissions().forEachValueIndexed { _, permission ->
+            getPermissions().forEachIndexed { _, _, permission ->
                 if (permissionTree.appId == permission.appId) {
                     size += permission.footprint
                 }
@@ -458,7 +475,7 @@
             val packageState =
                 packageManagerInternal.getPackageStateInternal(androidPackage.packageName)
             if (packageState == null) {
-                Log.e(
+                Slog.e(
                     LOG_TAG, "checkUidPermission: PackageState not found for AndroidPackage" +
                         " $androidPackage"
                 )
@@ -575,7 +592,7 @@
         val packageState = packageManagerLocal.withUnfilteredSnapshot()
             .use { it.getPackageState(packageName) }
         if (packageState == null) {
-            Log.w(LOG_TAG, "getGrantedPermissions: Unknown package $packageName")
+            Slog.w(LOG_TAG, "getGrantedPermissions: Unknown package $packageName")
             return emptySet()
         }
 
@@ -583,7 +600,7 @@
             val permissionFlags = with(policy) { getUidPermissionFlags(packageState.appId, userId) }
                 ?: return emptySet()
 
-            return permissionFlags.mapNotNullIndexedToSet { _, permissionName, _ ->
+            return permissionFlags.mapNotNullIndexedTo(ArraySet()) { _, permissionName, _ ->
                 if (isPermissionGranted(packageState, userId, permissionName)) {
                     permissionName
                 } else {
@@ -670,7 +687,7 @@
         if (isDebugEnabled &&
             PermissionManager.shouldTraceGrant(packageName, permissionName, userId)) {
             val callingUidName = packageManagerInternal.getNameForUid(callingUid)
-            Log.i(
+            Slog.i(
                 LOG_TAG, "$methodName(packageName = $packageName," +
                     " permissionName = $permissionName" +
                     (if (isGranted) "" else "skipKillUid = $skipKillUid, reason = $revokeReason") +
@@ -680,7 +697,7 @@
         }
 
         if (!userManagerInternal.exists(userId)) {
-            Log.w(LOG_TAG, "$methodName: Unknown user $userId")
+            Slog.w(LOG_TAG, "$methodName: Unknown user $userId")
             return
         }
 
@@ -710,11 +727,11 @@
         // throws when package exists but isn't visible, we now return in both cases to avoid
         // leaking the package existence.
         if (androidPackage == null) {
-            Log.w(LOG_TAG, "$methodName: Unknown package $packageName")
+            Slog.w(LOG_TAG, "$methodName: Unknown package $packageName")
             return
         }
 
-        val canManageRolePermission = isRootOrSystem(callingUid) ||
+        val canManageRolePermission = isRootOrSystemUid(callingUid) ||
             UserHandle.getAppId(callingUid) == permissionControllerPackageState!!.appId
         val overridePolicyFixed = context.checkCallingOrSelfPermission(
             Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY
@@ -740,7 +757,7 @@
     private fun setRequestedPermissionStates(
         packageState: PackageState,
         userId: Int,
-        permissionStates: IndexedMap<String, Int>
+        permissionStates: ArrayMap<String, Int>
     ) {
         service.mutateState {
             permissionStates.forEachIndexed { _, permissionName, permissionState ->
@@ -748,7 +765,7 @@
                     PackageInstaller.SessionParams.PERMISSION_STATE_GRANTED,
                     PackageInstaller.SessionParams.PERMISSION_STATE_DENIED -> {}
                     else -> {
-                        Log.w(
+                        Slog.w(
                             LOG_TAG, "setRequestedPermissionStates: Unknown permission state" +
                             " $permissionState for permission $permissionName"
                         )
@@ -769,6 +786,15 @@
                                 canManageRolePermission = false, overridePolicyFixed = false,
                                 reportError = false, "setRequestedPermissionStates"
                             )
+                            updatePermissionFlags(
+                                packageState.appId, userId, permissionName,
+                                PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED or
+                                    PackageManager.FLAG_PERMISSION_REVOKED_COMPAT, 0,
+                                canUpdateSystemFlags = false,
+                                reportErrorForUnknownPermission = false,
+                                isPermissionRequested = true, "setRequestedPermissionStates",
+                                packageState.packageName
+                            )
                         }
                     }
                     permission.isAppOp && permissionName in
@@ -858,7 +884,7 @@
 
         if (oldFlags.hasBits(PermissionFlags.SYSTEM_FIXED)) {
             if (reportError) {
-                Log.e(
+                Slog.e(
                     LOG_TAG, "$methodName: Cannot change system fixed permission $permissionName" +
                         " for package $packageName"
                 )
@@ -868,7 +894,7 @@
 
         if (oldFlags.hasBits(PermissionFlags.POLICY_FIXED) && !overridePolicyFixed) {
             if (reportError) {
-                Log.e(
+                Slog.e(
                     LOG_TAG, "$methodName: Cannot change policy fixed permission $permissionName" +
                         " for package $packageName"
                 )
@@ -878,7 +904,7 @@
 
         if (isGranted && oldFlags.hasBits(PermissionFlags.RESTRICTION_REVOKED)) {
             if (reportError) {
-                Log.e(
+                Slog.e(
                     LOG_TAG, "$methodName: Cannot grant hard-restricted non-exempt permission" +
                         " $permissionName to package $packageName"
                 )
@@ -894,7 +920,7 @@
             )
             if (!softRestrictedPermissionPolicy.mayGrantPermission()) {
                 if (reportError) {
-                    Log.e(
+                    Slog.e(
                         LOG_TAG, "$methodName: Cannot grant soft-restricted non-exempt permission" +
                             " $permissionName to package $packageName"
                     )
@@ -930,7 +956,8 @@
         permissionName: String,
         isGranted: Boolean
     ) {
-        val appOpPolicy = service.getSchemePolicy(UidUri.SCHEME, AppOpUri.SCHEME) as UidAppOpPolicy
+        val appOpPolicy = service.getSchemePolicy(UidUri.SCHEME, AppOpUri.SCHEME) as
+            AppIdAppOpPolicy
         val appOpName = AppOpsManager.permissionToOp(permissionName)
         val mode = if (isGranted) AppOpsManager.MODE_ALLOWED else AppOpsManager.MODE_ERRORED
         with(appOpPolicy) { setAppOpMode(packageState.appId, userId, appOpName, mode) }
@@ -938,7 +965,7 @@
 
     override fun getPermissionFlags(packageName: String, permissionName: String, userId: Int): Int {
         if (!userManagerInternal.exists(userId)) {
-            Log.w(LOG_TAG, "getPermissionFlags: Unknown user $userId")
+            Slog.w(LOG_TAG, "getPermissionFlags: Unknown user $userId")
             return 0
         }
 
@@ -955,14 +982,14 @@
         val packageState = packageManagerLocal.withFilteredSnapshot()
             .use { it.getPackageState(packageName) }
         if (packageState == null) {
-            Log.w(LOG_TAG, "getPermissionFlags: Unknown package $packageName")
+            Slog.w(LOG_TAG, "getPermissionFlags: Unknown package $packageName")
             return 0
         }
 
         service.getState {
             val permission = with(policy) { getPermissions()[permissionName] }
             if (permission == null) {
-                Log.w(LOG_TAG, "getPermissionFlags: Unknown permission $permissionName")
+                Slog.w(LOG_TAG, "getPermissionFlags: Unknown permission $permissionName")
                 return 0
             }
 
@@ -978,7 +1005,7 @@
         userId: Int
     ): Boolean {
         if (!userManagerInternal.exists(userId)) {
-            Log.w(LOG_TAG, "isPermissionRevokedByPolicy: Unknown user $userId")
+            Slog.w(LOG_TAG, "isPermissionRevokedByPolicy: Unknown user $userId")
             return false
         }
 
@@ -1022,7 +1049,7 @@
         userId: Int
     ): Boolean {
         if (!userManagerInternal.exists(userId)) {
-            Log.w(LOG_TAG, "shouldShowRequestPermissionRationale: Unknown user $userId")
+            Slog.w(LOG_TAG, "shouldShowRequestPermissionRationale: Unknown user $userId")
             return false
         }
 
@@ -1058,7 +1085,7 @@
                         BACKGROUND_RATIONALE_CHANGE_ID, packageName, userId
                     )
                 } catch (e: RemoteException) {
-                    Log.e(LOG_TAG, "shouldShowRequestPermissionRationale: Unable to check if" +
+                    Slog.e(LOG_TAG, "shouldShowRequestPermissionRationale: Unable to check if" +
                         " compatibility change is enabled", e)
                     false
                 }
@@ -1089,7 +1116,7 @@
                 PackageManager::class.java, "FLAG_PERMISSION_", flagValues.toLong()
             )
             val callingUidName = packageManagerInternal.getNameForUid(callingUid)
-            Log.i(
+            Slog.i(
                 LOG_TAG, "updatePermissionFlags(packageName = $packageName," +
                     " permissionName = $permissionName, flagMask = $flagMaskString," +
                     " flagValues = $flagValuesString, userId = $userId," +
@@ -1098,7 +1125,7 @@
         }
 
         if (!userManagerInternal.exists(userId)) {
-            Log.w(LOG_TAG, "updatePermissionFlags: Unknown user $userId")
+            Slog.w(LOG_TAG, "updatePermissionFlags: Unknown user $userId")
             return
         }
 
@@ -1115,7 +1142,7 @@
         // POLICY_FIXED flag if the caller is system or root UID, now we do allow that since system
         // and root UIDs are supposed to have all permissions including
         // ADJUST_RUNTIME_PERMISSIONS_POLICY.
-        if (!isRootOrSystem(callingUid)) {
+        if (!isRootOrSystemUid(callingUid)) {
             if (flagMask.hasBits(PackageManager.FLAG_PERMISSION_POLICY_FIXED)) {
                 if (enforceAdjustPolicyPermission) {
                     context.enforceCallingOrSelfPermission(
@@ -1146,10 +1173,15 @@
         // leaking the package existence.
         if (androidPackage == null ||
             packageManagerInternal.filterAppAccess(packageName, callingUid, userId, false)) {
-            Log.w(LOG_TAG, "updatePermissionFlags: Unknown package $packageName")
+            Slog.w(LOG_TAG, "updatePermissionFlags: Unknown package $packageName")
             return
         }
 
+        // Different from the old implementation, which only allowed the system UID to modify the
+        // following flags, we now allow the root UID as well since both should have all
+        // permissions.
+        val canUpdateSystemFlags = isRootOrSystemUid(callingUid)
+
         val isPermissionRequested = if (permissionName in androidPackage.requestedPermissions) {
             // Fast path, the current package has requested the permission.
             true
@@ -1167,7 +1199,7 @@
         val appId = packageState.appId
         service.mutateState {
             updatePermissionFlags(
-                appId, userId, permissionName, flagMask, flagValues,
+                appId, userId, permissionName, flagMask, flagValues, canUpdateSystemFlags,
                 reportErrorForUnknownPermission = true, isPermissionRequested,
                 "updatePermissionFlags", packageName
             )
@@ -1184,7 +1216,7 @@
                 PackageManager::class.java, "FLAG_PERMISSION_", flagValues.toLong()
             )
             val callingUidName = packageManagerInternal.getNameForUid(callingUid)
-            Log.i(
+            Slog.i(
                 LOG_TAG, "updatePermissionFlagsForAllApps(flagMask = $flagMaskString," +
                     " flagValues = $flagValuesString, userId = $userId," +
                     " callingUid = $callingUidName ($callingUid))", RuntimeException()
@@ -1192,7 +1224,7 @@
         }
 
         if (!userManagerInternal.exists(userId)) {
-            Log.w(LOG_TAG, "updatePermissionFlagsForAllApps: Unknown user $userId")
+            Slog.w(LOG_TAG, "updatePermissionFlagsForAllApps: Unknown user $userId")
             return
         }
 
@@ -1205,18 +1237,20 @@
             Manifest.permission.REVOKE_RUNTIME_PERMISSIONS
         )
 
+        // Different from the old implementation, which only sanitized the SYSTEM_FIXED
+        // flag, we now properly sanitize all flags as in updatePermissionFlags().
+        val canUpdateSystemFlags = isRootOrSystemUid(callingUid)
+
         val packageStates = packageManagerLocal.withUnfilteredSnapshot()
             .use { it.packageStates }
         service.mutateState {
             packageStates.forEach { (packageName, packageState) ->
                 val androidPackage = packageState.androidPackage ?: return@forEach
                 androidPackage.requestedPermissions.forEach { permissionName ->
-                    // Different from the old implementation, which only sanitized the SYSTEM_FIXED
-                    // flag, we now properly sanitize all flags as in updatePermissionFlags().
                     updatePermissionFlags(
                         packageState.appId, userId, permissionName, flagMask, flagValues,
-                        reportErrorForUnknownPermission = false, isPermissionRequested = true,
-                        "updatePermissionFlagsForAllApps", packageName
+                        canUpdateSystemFlags, reportErrorForUnknownPermission = false,
+                        isPermissionRequested = true, "updatePermissionFlagsForAllApps", packageName
                     )
                 }
             }
@@ -1224,8 +1258,7 @@
     }
 
     /**
-     * Shared internal implementation that should only be called by [updatePermissionFlags] and
-     * [updatePermissionFlagsForAllApps].
+     * Update flags for a permission, without any validation on caller.
      */
     private fun MutateStateScope.updatePermissionFlags(
         appId: Int,
@@ -1233,32 +1266,23 @@
         permissionName: String,
         flagMask: Int,
         flagValues: Int,
+        canUpdateSystemFlags: Boolean,
         reportErrorForUnknownPermission: Boolean,
         isPermissionRequested: Boolean,
         methodName: String,
         packageName: String
     ) {
-        // Different from the old implementation, which only allowed the system UID to modify the
-        // following flags, we now allow the root UID as well since both should have all
-        // permissions.
-        // Only the system can change these flags and nothing else.
-        val callingUid = Binder.getCallingUid()
         @Suppress("NAME_SHADOWING")
         var flagMask = flagMask
         @Suppress("NAME_SHADOWING")
         var flagValues = flagValues
-        if (!isRootOrSystem(callingUid)) {
+        // Only the system can change these flags and nothing else.
+        if (!canUpdateSystemFlags) {
             // Different from the old implementation, which allowed non-system UIDs to remove (but
             // not add) permission restriction flags, we now consistently ignore them altogether.
             val ignoredMask = PackageManager.FLAG_PERMISSION_SYSTEM_FIXED or
                 PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT or
-                // REVIEW_REQUIRED can be set on any permission by the shell, or by any app for the
-                // NOTIFICATIONS permissions specifically.
-                if (isShell(callingUid) || permissionName in NOTIFICATIONS_PERMISSIONS) {
-                    0
-                } else {
-                    PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED
-                } or PackageManager.FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT or
+                PackageManager.FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT or
                 PackageManager.FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT or
                 PackageManager.FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT or
                 PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION
@@ -1276,7 +1300,7 @@
 
         val oldFlags = with(policy) { getPermissionFlags(appId, userId, permissionName) }
         if (!isPermissionRequested && oldFlags == 0) {
-            Log.w(
+            Slog.w(
                 LOG_TAG, "$methodName: Permission $permissionName isn't requested by package" +
                     " $packageName"
             )
@@ -1291,13 +1315,13 @@
         packageName: String,
         allowlistedFlags: Int,
         userId: Int
-    ): IndexedList<String>? {
+    ): ArrayList<String>? {
         requireNotNull(packageName) { "packageName cannot be null" }
         Preconditions.checkFlagsArgument(allowlistedFlags, PERMISSION_ALLOWLIST_MASK)
         Preconditions.checkArgumentNonnegative(userId, "userId cannot be null")
 
         if (!userManagerInternal.exists(userId)) {
-            Log.w(LOG_TAG, "AllowlistedRestrictedPermission api: Unknown user $userId")
+            Slog.w(LOG_TAG, "AllowlistedRestrictedPermission api: Unknown user $userId")
             return null
         }
 
@@ -1349,7 +1373,7 @@
         appId: Int,
         allowlistedFlags: Int,
         userId: Int
-    ): IndexedList<String>? {
+    ): ArrayList<String>? {
         val permissionFlags = service.getState {
             with(policy) { getUidPermissionFlags(appId, userId) }
         } ?: return null
@@ -1365,7 +1389,7 @@
             queryFlags = queryFlags or PermissionFlags.INSTALLER_EXEMPT
         }
 
-        return permissionFlags.mapNotNullIndexed { _, permissionName, flags ->
+        return permissionFlags.mapNotNullIndexedTo(ArrayList()) { _, permissionName, flags ->
             if (flags.hasAnyBit(queryFlags)) permissionName else null
         }
     }
@@ -1383,7 +1407,7 @@
 
         val permissionNames = getAllowlistedRestrictedPermissions(
             packageName, allowlistedFlags, userId
-        ) ?: IndexedList(1)
+        ) ?: ArrayList(1)
 
         if (permissionName !in permissionNames) {
             permissionNames += permissionName
@@ -1403,7 +1427,7 @@
         val newPermissionNames = getAllowlistedRestrictedPermissionsUnchecked(appId,
             PackageManager.FLAG_PERMISSION_WHITELIST_INSTALLER, userId
         )?.let {
-            IndexedSet(permissionNames).apply { this += it }.toList()
+            ArraySet(permissionNames).apply { this += it }.toList()
         } ?: permissionNames
 
         setAllowlistedRestrictedPermissionsUnchecked(androidPackage, appId, newPermissionNames,
@@ -1437,7 +1461,7 @@
     private fun enforceRestrictedPermission(permissionName: String): Boolean {
         val permission = service.getState { with(policy) { getPermissions()[permissionName] } }
         if (permission == null) {
-            Log.w(LOG_TAG, "permission definition for $permissionName does not exist")
+            Slog.w(LOG_TAG, "permission definition for $permissionName does not exist")
             return false
         }
 
@@ -1569,27 +1593,31 @@
                         return@forEachIndexed
                     }
 
-                    val wasAllowlisted = oldFlags.hasAnyBit(PermissionFlags.MASK_EXEMPT)
-                    val isAllowlisted = newFlags.hasAnyBit(PermissionFlags.MASK_EXEMPT)
+                    val isExempt = newFlags.hasAnyBit(PermissionFlags.MASK_EXEMPT)
 
                     // If the permission is policy fixed as granted but it is no longer
                     // on any of the allowlists we need to clear the policy fixed flag
                     // as allowlisting trumps policy i.e. policy cannot grant a non
                     // grantable permission.
                     if (oldFlags.hasBits(PermissionFlags.POLICY_FIXED)) {
-                        if (!isAllowlisted && wasGranted) {
+                        if (!isExempt && wasGranted) {
                             mask = mask or PermissionFlags.POLICY_FIXED
                             newFlags = newFlags andInv PermissionFlags.POLICY_FIXED
                         }
                     }
 
-                    // If we are allowlisting an app that does not support runtime permissions
-                    // we need to make sure it goes through the permission review UI at launch.
-                    if (androidPackage.targetSdkVersion < Build.VERSION_CODES.M &&
-                        !wasAllowlisted && isAllowlisted) {
-                        mask = mask or PermissionFlags.IMPLICIT
-                        newFlags = newFlags or PermissionFlags.IMPLICIT
+                    newFlags = if (permission.isHardRestricted && !isExempt) {
+                        newFlags or PermissionFlags.RESTRICTION_REVOKED
+                    } else {
+                        newFlags andInv PermissionFlags.RESTRICTION_REVOKED
                     }
+                    newFlags = if (permission.isSoftRestricted && !isExempt) {
+                        newFlags or PermissionFlags.SOFT_RESTRICTED
+                    } else {
+                        newFlags andInv PermissionFlags.SOFT_RESTRICTED
+                    }
+                    mask = mask or PermissionFlags.RESTRICTION_REVOKED or
+                        PermissionFlags.SOFT_RESTRICTED
 
                     updatePermissionFlags(
                         appId, userId, requestedPermission, mask, newFlags
@@ -1600,11 +1628,23 @@
     }
 
     override fun resetRuntimePermissions(androidPackage: AndroidPackage, userId: Int) {
-        // TODO("Not yet implemented")
+        service.mutateState {
+            with(policy) {
+                resetRuntimePermissions(androidPackage.packageName, userId)
+            }
+        }
     }
 
     override fun resetRuntimePermissionsForUser(userId: Int) {
-        // TODO("Not yet implemented")
+        packageManagerLocal.withUnfilteredSnapshot().use { snapshot ->
+            service.mutateState {
+                snapshot.packageStates.forEach { (_, packageState) ->
+                    with(policy) {
+                        resetRuntimePermissions(packageState.packageName, userId)
+                    }
+                }
+            }
+        }
     }
 
     override fun addOnPermissionsChangeListener(listener: IOnPermissionsChangeListener) {
@@ -1615,18 +1655,6 @@
         onPermissionsChangeListeners.removeListener(listener)
     }
 
-    override fun addOnRuntimePermissionStateChangedListener(
-        listener: PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener
-    ) {
-        // TODO: Should be removed once we remove PermissionPolicyService.
-    }
-
-    override fun removeOnRuntimePermissionStateChangedListener(
-        listener: PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener
-    ) {
-        // TODO: Should be removed once we remove PermissionPolicyService.
-    }
-
     override fun getSplitPermissions(): List<SplitPermissionInfoParcelable> {
         return PermissionManager.splitPermissionInfoListToParcelableList(
             systemConfig.splitPermissions
@@ -1637,7 +1665,7 @@
 
     override fun getAppOpPermissionPackages(permissionName: String): Array<String> {
         requireNotNull(permissionName) { "permissionName cannot be null" }
-        val packageNames = IndexedSet<String>()
+        val packageNames = ArraySet<String>()
 
         val permission = service.getState {
             with(policy) { getPermissions()[permissionName] }
@@ -1659,7 +1687,7 @@
     }
 
     override fun getAllAppOpPermissionPackages(): Map<String, Set<String>> {
-        val appOpPermissionPackageNames = IndexedMap<String, IndexedSet<String>>()
+        val appOpPermissionPackageNames = ArrayMap<String, ArraySet<String>>()
         val permissions = service.getState { with(policy) { getPermissions() } }
         packageManagerLocal.withUnfilteredSnapshot().use { snapshot ->
             snapshot.packageStates.forEach packageStates@{ (_, packageState) ->
@@ -1668,7 +1696,7 @@
                     val permission = permissions[permissionName] ?: return@requestedPermissions
                     if (permission.isAppOp) {
                         val packageNames = appOpPermissionPackageNames
-                            .getOrPut(permissionName) { IndexedSet() }
+                            .getOrPut(permissionName) { ArraySet() }
                         packageNames += androidPackage.packageName
                     }
                 }
@@ -1689,7 +1717,7 @@
         } catch (e: Exception) {
             when (e) {
                 is TimeoutException, is InterruptedException, is ExecutionException -> {
-                    Log.e(LOG_TAG, "Cannot create permission backup for user $userId", e)
+                    Slog.e(LOG_TAG, "Cannot create permission backup for user $userId", e)
                     null
                 }
                 else -> throw e
@@ -1734,7 +1762,162 @@
         if (!DumpUtils.checkDumpPermission(context, LOG_TAG, pw)) {
             return
         }
-        context.getSystemService(PermissionControllerManager::class.java)!!.dump(fd, args)
+
+        val writer = IndentingPrintWriter(pw, "  ")
+
+        if (args.isNullOrEmpty()) {
+            service.getState {
+                writer.dumpSystemState(state)
+                getAllAppIdPackageNames(state).forEachIndexed { _, appId, packageNames ->
+                    if (appId != Process.INVALID_UID) {
+                        writer.dumpAppIdState(appId, state, packageNames)
+                    }
+                }
+            }
+        } else if (args[0] == "--app-id" && args.size == 2) {
+            val appId = args[1].toInt()
+            service.getState {
+                val appIdPackageNames = getAllAppIdPackageNames(state)
+                if (appId in appIdPackageNames) {
+                    writer.dumpAppIdState(appId, state, appIdPackageNames[appId])
+                } else {
+                    writer.println("Unknown app ID $appId.")
+                }
+            }
+        } else {
+            writer.println("Usage: dumpsys permission [--app-id APP_ID]")
+        }
+    }
+
+    private fun getAllAppIdPackageNames(
+        state: AccessState
+    ): IndexedMap<Int, MutableIndexedSet<String>> {
+        val appIds = MutableIndexedSet<Int>()
+
+        val packageStates = packageManagerLocal.withUnfilteredSnapshot().use {
+            it.packageStates
+        }
+        state.userStates.forEachIndexed { _, _, userState ->
+            userState.appIdPermissionFlags.forEachIndexed { _, appId, _ ->
+                appIds.add(appId)
+            }
+            userState.appIdAppOpModes.forEachIndexed { _, appId, _ ->
+                appIds.add(appId)
+            }
+            userState.packageVersions.forEachIndexed packageVersions@ { _, packageName, _ ->
+                val appId = packageStates[packageName]?.appId ?: return@packageVersions
+                appIds.add(appId)
+            }
+            userState.packageAppOpModes.forEachIndexed packageAppOpModes@ { _, packageName, _ ->
+                val appId = packageStates[packageName]?.appId ?: return@packageAppOpModes
+                appIds.add(appId)
+            }
+        }
+
+        val appIdPackageNames = MutableIndexedMap<Int, MutableIndexedSet<String>>()
+        packageStates.forEach { (_, packageState) ->
+            appIdPackageNames.getOrPut(packageState.appId) { MutableIndexedSet() }
+                .add(packageState.packageName)
+        }
+        // add non-package app IDs which might not be reported by package manager.
+        appIds.forEachIndexed { _, appId ->
+            appIdPackageNames.getOrPut(appId) { MutableIndexedSet() }
+        }
+
+        return appIdPackageNames
+    }
+
+    private fun IndentingPrintWriter.dumpSystemState(state: AccessState) {
+        println("Permissions:")
+        withIndent {
+            state.systemState.permissions.forEachIndexed { _, _, permission ->
+                val protectionLevel = PermissionInfo.protectionToString(permission.protectionLevel)
+                println(
+                    "${permission.name}: " +
+                        "type=${Permission.typeToString(permission.type)}, " +
+                        "packageName=${permission.packageName}, " +
+                        "appId=${permission.appId}, " +
+                        "gids=${permission.gids.contentToString()}, " +
+                        "protectionLevel=[$protectionLevel], " +
+                        "flags=${PermissionInfo.flagsToString(permission.permissionInfo.flags)}"
+                )
+            }
+        }
+
+        println("Permission groups:")
+        withIndent {
+            state.systemState.permissionGroups.forEachIndexed { _, _, permissionGroup ->
+                println(
+                    "${permissionGroup.name}: " +
+                        "packageName=${permissionGroup.packageName}"
+                )
+            }
+        }
+
+        println("Permission trees:")
+        withIndent {
+            state.systemState.permissionTrees.forEachIndexed { _, _, permissionTree ->
+                println(
+                    "${permissionTree.name}: " +
+                        "packageName=${permissionTree.packageName}, " +
+                        "appId=${permissionTree.appId}"
+                )
+            }
+        }
+    }
+
+    private fun IndentingPrintWriter.dumpAppIdState(
+        appId: Int,
+        state: AccessState,
+        packageNames: IndexedSet<String>?
+    ) {
+        println("App ID: $appId")
+        withIndent {
+            state.userStates.forEachIndexed { _, userId, userState ->
+                println("User: $userId")
+                withIndent {
+                    println("Permissions:")
+                    withIndent {
+                        userState.appIdPermissionFlags[appId]?.forEachIndexed {
+                                _, permissionName, flags ->
+                            val isGranted = PermissionFlags.isPermissionGranted(flags)
+                            println(
+                                "$permissionName: granted=$isGranted, flags=" +
+                                    PermissionFlags.toString(flags)
+                            )
+                        }
+                    }
+
+                    println("App ops:")
+                    withIndent {
+                        userState.appIdAppOpModes[appId]?.forEachIndexed {_, appOpName, appOpMode ->
+                            println("$appOpName: mode=${AppOpsManager.modeToName(appOpMode)}")
+                        }
+                    }
+
+                    packageNames?.forEachIndexed { _, packageName ->
+                        println("Package: $packageName")
+                        withIndent {
+                            println("version=${userState.packageVersions[packageName]}")
+                            println("App ops:")
+                            withIndent {
+                                userState.packageAppOpModes[packageName]?.forEachIndexed {
+                                        _, appOpName, appOpMode ->
+                                    val modeName = AppOpsManager.modeToName(appOpMode)
+                                    println("$appOpName: mode=$modeName")
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private inline fun IndentingPrintWriter.withIndent(block: IndentingPrintWriter.() -> Unit) {
+        increaseIndent()
+        block()
+        decreaseIndent()
     }
 
     override fun getPermissionTEMP(permissionName: String): LegacyPermission2? {
@@ -1751,7 +1934,7 @@
     override fun getLegacyPermissions(): List<LegacyPermission> =
         service.getState {
             with(policy) { getPermissions() }
-        }.mapIndexed { _, _, permission ->
+        }.mapIndexedTo(ArrayList()) { _, _, permission ->
             LegacyPermission(
                 permission.permissionInfo, permission.type, permission.appId, permission.gids
             )
@@ -1774,7 +1957,7 @@
     private fun toLegacyPermissions(
         permissions: IndexedMap<String, Permission>
     ): List<LegacyPermission> =
-        permissions.mapIndexed { _, _, permission ->
+        permissions.mapIndexedTo(ArrayList()) { _, _, permission ->
             // We don't need to provide UID and GIDs, which are only retrieved when dumping.
             LegacyPermission(
                 permission.permissionInfo, permission.type, 0, EmptyArray.INT
@@ -1809,6 +1992,15 @@
 
     override fun writeLegacyPermissionStateTEMP() {}
 
+    override fun getDefaultPermissionGrantFingerprint(userId: Int): String? =
+        service.getState { state.userStates[userId]!!.defaultPermissionGrantFingerprint }
+
+    override fun setDefaultPermissionGrantFingerprint(fingerprint: String, userId: Int) {
+        service.mutateState {
+            newState.mutateUserState(userId)!!.setDefaultPermissionGrantFingerprint(fingerprint)
+        }
+    }
+
     override fun onSystemReady() {
         service.onSystemReady()
         permissionControllerManager = PermissionControllerManager(
@@ -1817,7 +2009,9 @@
     }
 
     override fun onUserCreated(userId: Int) {
-        service.onUserAdded(userId)
+        withCorkedPackageInfoCache {
+            service.onUserAdded(userId)
+        }
     }
 
     override fun onUserRemoved(userId: Int) {
@@ -1825,10 +2019,16 @@
     }
 
     override fun onStorageVolumeMounted(volumeUuid: String, fingerprintChanged: Boolean) {
-        service.onStorageVolumeMounted(volumeUuid, fingerprintChanged)
-        synchronized(mountedStorageVolumes) {
+        val packageNames: List<String>
+        synchronized(storageVolumeLock) {
+            // Removing the storageVolumePackageNames entry because we expect onPackageAdded()
+            // to always be called before onStorageVolumeMounted().
+            packageNames = storageVolumePackageNames.remove(volumeUuid) ?: emptyList()
             mountedStorageVolumes += volumeUuid
         }
+        withCorkedPackageInfoCache {
+            service.onStorageVolumeMounted(volumeUuid, packageNames, fingerprintChanged)
+        }
     }
 
     override fun onPackageAdded(
@@ -1836,7 +2036,14 @@
         isInstantApp: Boolean,
         oldPackage: AndroidPackage?
     ) {
-        synchronized(mountedStorageVolumes) {
+        synchronized(storageVolumeLock) {
+            // Accumulating the package names here because we want to maintain the same call order
+            // of onPackageAdded() and reuse this order in onStorageVolumeAdded(). We need the
+            // packages to be iterated in onStorageVolumeAdded() in the same order so that the
+            // ownership of permissions is consistent.
+            storageVolumePackageNames.getOrPut(packageState.volumeUuid) {
+                mutableListOf()
+            } += packageState.packageName
             if (packageState.volumeUuid !in mountedStorageVolumes) {
                 // Wait for the storage volume to be mounted and batch the state mutation there.
                 return
@@ -1856,7 +2063,19 @@
         params: PermissionManagerServiceInternal.PackageInstalledParams,
         userId: Int
     ) {
-        synchronized(mountedStorageVolumes) {
+        if (params === PermissionManagerServiceInternal.PackageInstalledParams.DEFAULT) {
+            // TODO: We should actually stop calling onPackageInstalled() when we are passing
+            //  PackageInstalledParams.DEFAULT in InstallPackageHelper, because there's actually no
+            //  installer in those cases of system app installs, and the default params won't
+            //  allowlist any permissions which means the original UPGRADE_EXEMPT will be dropped
+            //  without any INSTALLER_EXEMPT added. However, we can't do that right now because the
+            //  old permission subsystem still depends on this method being called to set up the
+            //  permission state for the first time (which we are doing in onPackageAdded() or
+            //  onStorageVolumeMounted() now).
+            return
+        }
+
+        synchronized(storageVolumeLock) {
             if (androidPackage.volumeUuid !in mountedStorageVolumes) {
                 // Wait for the storage volume to be mounted and batch the state mutation there.
                 // PackageInstalledParams won't exist when packages are being scanned instead of
@@ -1905,24 +2124,33 @@
         }
     }
 
+    private inline fun <T> withCorkedPackageInfoCache(block: () -> T): T {
+        PackageManager.corkPackageInfoCache()
+        try {
+            return block()
+        } finally {
+            PackageManager.uncorkPackageInfoCache()
+        }
+    }
+
     /**
-     * Check whether a UID is root or system.
+     * Check whether a UID is root or system UID.
      */
-    private fun isRootOrSystem(uid: Int) =
+    private fun isRootOrSystemUid(uid: Int) =
         when (UserHandle.getAppId(uid)) {
             Process.ROOT_UID, Process.SYSTEM_UID -> true
             else -> false
         }
 
     /**
-     * Check whether a UID is shell.
+     * Check whether a UID is shell UID.
      */
-    private fun isShell(uid: Int) = UserHandle.getAppId(uid) == Process.SHELL_UID
+    private fun isShellUid(uid: Int) = UserHandle.getAppId(uid) == Process.SHELL_UID
 
     /**
-     * Check whether a UID is root, system or shell.
+     * Check whether a UID is root, system or shell UID.
      */
-    private fun isRootOrSystemOrShell(uid: Int) = isRootOrSystem(uid) || isShell(uid)
+    private fun isRootOrSystemOrShellUid(uid: Int) = isRootOrSystemUid(uid) || isShellUid(uid)
 
     /**
      * This method should typically only be used when granting or revoking permissions, since the
@@ -2030,7 +2258,7 @@
                         append(": ")
                     }
                     append("Neither user ")
-                    append(Binder.getCallingUid())
+                    append(callingUid)
                     append(" nor current process has ")
                     append(permissionName)
                     append(" to access user ")
@@ -2039,7 +2267,7 @@
                 throw SecurityException(exceptionMessage)
             }
         }
-        if (enforceShellRestriction && isShell(callingUid)) {
+        if (enforceShellRestriction && isShellUid(callingUid)) {
             val isShellRestricted = userManagerInternal.hasUserRestriction(
                 UserManager.DISALLOW_DEBUGGING_FEATURES, userId
             )
@@ -2090,16 +2318,16 @@
      * Callback invoked when interesting actions have been taken on a permission.
      */
     private inner class OnPermissionFlagsChangedListener :
-        UidPermissionPolicy.OnPermissionFlagsChangedListener() {
+        AppIdPermissionPolicy.OnPermissionFlagsChangedListener() {
         private var isPermissionFlagsChanged = false
 
-        private val runtimePermissionChangedUids = IntSet()
+        private val runtimePermissionChangedUids = MutableIntSet()
         // Mapping from UID to whether only notifications permissions are revoked.
-        private val runtimePermissionRevokedUids = IntBooleanMap()
-        private val gidsChangedUids = IntSet()
+        private val runtimePermissionRevokedUids = SparseBooleanArray()
+        private val gidsChangedUids = MutableIntSet()
 
         private var isKillRuntimePermissionRevokedUidsSkipped = false
-        private val killRuntimePermissionRevokedUidsReasons = IndexedSet<String>()
+        private val killRuntimePermissionRevokedUidsReasons = ArraySet<String>()
 
         fun MutateStateScope.skipKillRuntimePermissionRevokedUids() {
             isKillRuntimePermissionRevokedUidsSkipped = true
@@ -2134,7 +2362,7 @@
                 if (wasPermissionGranted && !isPermissionGranted) {
                     runtimePermissionRevokedUids[uid] =
                         permissionName in NOTIFICATIONS_PERMISSIONS &&
-                            runtimePermissionRevokedUids.getWithDefault(uid, true)
+                            runtimePermissionRevokedUids.get(uid, true)
                 }
             }
 
@@ -2199,7 +2427,7 @@
                 ) == Settings.Secure.USER_SETUP_PERSONALIZATION_STARTED
                 isInSetup || isInDeferredSetup
             } catch (e: Settings.SettingNotFoundException) {
-                Log.w(LOG_TAG, "Failed to check if the user is in restore: $e")
+                Slog.w(LOG_TAG, "Failed to check if the user is in restore: $e")
                 false
             }
         }
@@ -2222,7 +2450,7 @@
                 try {
                     listener.onPermissionsChanged(uid)
                 } catch (e: RemoteException) {
-                    Log.e(LOG_TAG, "Error when calling OnPermissionsChangeListener", e)
+                    Slog.e(LOG_TAG, "Error when calling OnPermissionsChangeListener", e)
                 }
             }
         }
@@ -2257,14 +2485,14 @@
         @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.Q)
         private val BACKGROUND_RATIONALE_CHANGE_ID = 147316723L
 
-        private val FULLER_PERMISSIONS = IndexedMap<String, String>().apply {
+        private val FULLER_PERMISSIONS = ArrayMap<String, String>().apply {
             this[Manifest.permission.ACCESS_COARSE_LOCATION] =
                 Manifest.permission.ACCESS_FINE_LOCATION
             this[Manifest.permission.INTERACT_ACROSS_USERS] =
                 Manifest.permission.INTERACT_ACROSS_USERS_FULL
         }
 
-        private val NOTIFICATIONS_PERMISSIONS = indexedSetOf(
+        private val NOTIFICATIONS_PERMISSIONS = arraySetOf(
             Manifest.permission.POST_NOTIFICATIONS
         )
 
diff --git a/services/permission/java/com/android/server/permission/access/permission/UidPermissionPersistence.kt b/services/permission/java/com/android/server/permission/access/permission/UidPermissionPersistence.kt
deleted file mode 100644
index 35cdbce..0000000
--- a/services/permission/java/com/android/server/permission/access/permission/UidPermissionPersistence.kt
+++ /dev/null
@@ -1,229 +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.server.permission.access.permission
-
-import android.content.pm.PermissionInfo
-import android.util.Log
-import com.android.modules.utils.BinaryXmlPullParser
-import com.android.modules.utils.BinaryXmlSerializer
-import com.android.server.permission.access.AccessState
-import com.android.server.permission.access.UserState
-import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
-import com.android.server.permission.access.util.attribute
-import com.android.server.permission.access.util.attributeInt
-import com.android.server.permission.access.util.attributeIntHex
-import com.android.server.permission.access.util.attributeIntHexWithDefault
-import com.android.server.permission.access.util.attributeInterned
-import com.android.server.permission.access.util.forEachTag
-import com.android.server.permission.access.util.getAttributeIntHexOrDefault
-import com.android.server.permission.access.util.getAttributeIntHexOrThrow
-import com.android.server.permission.access.util.getAttributeIntOrThrow
-import com.android.server.permission.access.util.getAttributeValue
-import com.android.server.permission.access.util.getAttributeValueOrThrow
-import com.android.server.permission.access.util.tag
-import com.android.server.permission.access.util.tagName
-
-class UidPermissionPersistence {
-    fun BinaryXmlPullParser.parseSystemState(state: AccessState) {
-        val systemState = state.systemState
-        when (tagName) {
-            TAG_PERMISSION_TREES -> parsePermissions(systemState.permissionTrees)
-            TAG_PERMISSIONS -> parsePermissions(systemState.permissions)
-            else -> {}
-        }
-    }
-
-    private fun BinaryXmlPullParser.parsePermissions(permissions: IndexedMap<String, Permission>) {
-        forEachTag {
-            when (val tagName = tagName) {
-                TAG_PERMISSION -> parsePermission(permissions)
-                else -> Log.w(LOG_TAG, "Ignoring unknown tag $tagName when parsing permissions")
-            }
-        }
-    }
-
-    private fun BinaryXmlPullParser.parsePermission(permissions: IndexedMap<String, Permission>) {
-        val name = getAttributeValueOrThrow(ATTR_NAME).intern()
-        @Suppress("DEPRECATION")
-        val permissionInfo = PermissionInfo().apply {
-            this.name = name
-            packageName = getAttributeValueOrThrow(ATTR_PACKAGE_NAME).intern()
-            protectionLevel = getAttributeIntHexOrThrow(ATTR_PROTECTION_LEVEL)
-        }
-        val type = getAttributeIntOrThrow(ATTR_TYPE)
-        when (type) {
-            Permission.TYPE_MANIFEST -> {}
-            Permission.TYPE_CONFIG -> {
-                Log.w(LOG_TAG, "Ignoring unexpected config permission $name")
-                return
-            }
-            Permission.TYPE_DYNAMIC -> {
-                permissionInfo.apply {
-                    icon = getAttributeIntHexOrDefault(ATTR_ICON, 0)
-                    nonLocalizedLabel = getAttributeValue(ATTR_LABEL)
-                }
-            }
-            else -> {
-                Log.w(LOG_TAG, "Ignoring permission $name with unknown type $type")
-                return
-            }
-        }
-        val permission = Permission(permissionInfo, false, type, 0)
-        permissions[name] = permission
-    }
-
-    fun BinaryXmlSerializer.serializeSystemState(state: AccessState) {
-        val systemState = state.systemState
-        serializePermissions(TAG_PERMISSION_TREES, systemState.permissionTrees)
-        serializePermissions(TAG_PERMISSIONS, systemState.permissions)
-    }
-
-    private fun BinaryXmlSerializer.serializePermissions(
-        tagName: String,
-        permissions: IndexedMap<String, Permission>
-    ) {
-        tag(tagName) {
-            permissions.forEachValueIndexed { _, it -> serializePermission(it) }
-        }
-    }
-
-    private fun BinaryXmlSerializer.serializePermission(permission: Permission) {
-        val type = permission.type
-        when (type) {
-            Permission.TYPE_MANIFEST, Permission.TYPE_DYNAMIC -> {}
-            Permission.TYPE_CONFIG -> return
-            else -> {
-                Log.w(LOG_TAG, "Skipping serializing permission $name with unknown type $type")
-                return
-            }
-        }
-        tag(TAG_PERMISSION) {
-            attributeInterned(ATTR_NAME, permission.name)
-            attributeInterned(ATTR_PACKAGE_NAME, permission.packageName)
-            attributeIntHex(ATTR_PROTECTION_LEVEL, permission.protectionLevel)
-            attributeInt(ATTR_TYPE, type)
-            if (type == Permission.TYPE_DYNAMIC) {
-                val permissionInfo = permission.permissionInfo
-                attributeIntHexWithDefault(ATTR_ICON, permissionInfo.icon, 0)
-                permissionInfo.nonLocalizedLabel?.toString()?.let { attribute(ATTR_LABEL, it) }
-            }
-        }
-    }
-
-    fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) {
-        when (tagName) {
-            TAG_PERMISSIONS -> parsePermissionFlags(state, userId)
-            else -> {}
-        }
-    }
-
-    private fun BinaryXmlPullParser.parsePermissionFlags(state: AccessState, userId: Int) {
-        val userState = state.userStates[userId]
-        forEachTag {
-            when (tagName) {
-                TAG_APP_ID -> parseAppId(userState)
-                else -> Log.w(LOG_TAG, "Ignoring unknown tag $name when parsing permission state")
-            }
-        }
-        userState.uidPermissionFlags.retainAllIndexed { _, appId, _ ->
-            val hasAppId = appId in state.systemState.appIds
-            if (!hasAppId) {
-                Log.w(LOG_TAG, "Dropping unknown app ID $appId when parsing permission state")
-            }
-            hasAppId
-        }
-    }
-
-    private fun BinaryXmlPullParser.parseAppId(userState: UserState) {
-        val appId = getAttributeIntOrThrow(ATTR_ID)
-        val permissionFlags = IndexedMap<String, Int>()
-        userState.uidPermissionFlags[appId] = permissionFlags
-        parseAppIdPermissions(permissionFlags)
-    }
-
-    private fun BinaryXmlPullParser.parseAppIdPermissions(
-        permissionFlags: IndexedMap<String, Int>
-    ) {
-        forEachTag {
-            when (tagName) {
-                TAG_PERMISSION -> parseAppIdPermission(permissionFlags)
-                else -> Log.w(LOG_TAG, "Ignoring unknown tag $name when parsing permission state")
-            }
-        }
-    }
-
-    private fun BinaryXmlPullParser.parseAppIdPermission(permissionFlags: IndexedMap<String, Int>) {
-        val name = getAttributeValueOrThrow(ATTR_NAME).intern()
-        val flags = getAttributeIntOrThrow(ATTR_FLAGS)
-        permissionFlags[name] = flags
-    }
-
-    fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) {
-        serializePermissionFlags(state.userStates[userId])
-    }
-
-    private fun BinaryXmlSerializer.serializePermissionFlags(userState: UserState) {
-        tag(TAG_PERMISSIONS) {
-            userState.uidPermissionFlags.forEachIndexed { _, appId, permissionFlags ->
-                serializeAppId(appId, permissionFlags)
-            }
-        }
-    }
-
-    private fun BinaryXmlSerializer.serializeAppId(
-        appId: Int,
-        permissionFlags: IndexedMap<String, Int>
-    ) {
-        tag(TAG_APP_ID) {
-            attributeInt(ATTR_ID, appId)
-            serializeAppIdPermissions(permissionFlags)
-        }
-    }
-
-    private fun BinaryXmlSerializer.serializeAppIdPermissions(
-        permissionFlags: IndexedMap<String, Int>
-    ) {
-        permissionFlags.forEachIndexed { _, name, flags ->
-            serializeAppIdPermission(name, flags)
-        }
-    }
-
-    private fun BinaryXmlSerializer.serializeAppIdPermission(name: String, flags: Int) {
-        tag(TAG_PERMISSION) {
-            attributeInterned(ATTR_NAME, name)
-            attributeInt(ATTR_FLAGS, flags)
-        }
-    }
-
-    companion object {
-        private val LOG_TAG = UidPermissionPersistence::class.java.simpleName
-
-        private const val TAG_APP_ID = "app-id"
-        private const val TAG_PERMISSION = "permission"
-        private const val TAG_PERMISSIONS = "permissions"
-        private const val TAG_PERMISSION_TREES = "permission-trees"
-
-        private const val ATTR_FLAGS = "flags"
-        private const val ATTR_ICON = "icon"
-        private const val ATTR_ID = "id"
-        private const val ATTR_LABEL = "label"
-        private const val ATTR_NAME = "name"
-        private const val ATTR_PACKAGE_NAME = "packageName"
-        private const val ATTR_PROTECTION_LEVEL = "protectionLevel"
-        private const val ATTR_TYPE = "type"
-    }
-}
diff --git a/services/permission/java/com/android/server/permission/access/permission/UidPermissionPolicy.kt b/services/permission/java/com/android/server/permission/access/permission/UidPermissionPolicy.kt
deleted file mode 100644
index 5a7b37a..0000000
--- a/services/permission/java/com/android/server/permission/access/permission/UidPermissionPolicy.kt
+++ /dev/null
@@ -1,1468 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.permission.access.permission
-
-import android.Manifest
-import android.content.pm.PackageManager
-import android.content.pm.PermissionGroupInfo
-import android.content.pm.PermissionInfo
-import android.content.pm.SigningDetails
-import android.os.Build
-import android.os.UserHandle
-import android.util.Log
-import com.android.internal.os.RoSystemProperties
-import com.android.modules.utils.BinaryXmlPullParser
-import com.android.modules.utils.BinaryXmlSerializer
-import com.android.server.permission.access.AccessState
-import com.android.server.permission.access.AccessUri
-import com.android.server.permission.access.GetStateScope
-import com.android.server.permission.access.MutateStateScope
-import com.android.server.permission.access.PermissionUri
-import com.android.server.permission.access.SchemePolicy
-import com.android.server.permission.access.UidUri
-import com.android.server.permission.access.collection.* // ktlint-disable no-wildcard-imports
-import com.android.server.permission.access.util.andInv
-import com.android.server.permission.access.util.hasAnyBit
-import com.android.server.permission.access.util.hasBits
-import com.android.server.permission.access.util.isInternal
-import com.android.server.pm.KnownPackages
-import com.android.server.pm.parsing.PackageInfoUtils
-import com.android.server.pm.permission.CompatibilityPermissionInfo
-import com.android.server.pm.pkg.AndroidPackage
-import com.android.server.pm.pkg.PackageState
-
-class UidPermissionPolicy : SchemePolicy() {
-    private val persistence = UidPermissionPersistence()
-
-    @Volatile
-    private var onPermissionFlagsChangedListeners =
-        IndexedListSet<OnPermissionFlagsChangedListener>()
-    private val onPermissionFlagsChangedListenersLock = Any()
-
-    private val privilegedPermissionAllowlistViolations = IndexedSet<String>()
-
-    override val subjectScheme: String
-        get() = UidUri.SCHEME
-
-    override val objectScheme: String
-        get() = PermissionUri.SCHEME
-
-    override fun GetStateScope.getDecision(subject: AccessUri, `object`: AccessUri): Int {
-        subject as UidUri
-        `object` as PermissionUri
-        return getPermissionFlags(subject.appId, subject.userId, `object`.permissionName)
-    }
-
-    override fun MutateStateScope.setDecision(
-        subject: AccessUri,
-        `object`: AccessUri,
-        decision: Int
-    ) {
-        subject as UidUri
-        `object` as PermissionUri
-        setPermissionFlags(subject.appId, subject.userId, `object`.permissionName, decision)
-    }
-
-    override fun GetStateScope.onStateMutated() {
-        onPermissionFlagsChangedListeners.forEachIndexed { _, it -> it.onStateMutated() }
-    }
-
-    override fun MutateStateScope.onInitialized() {
-        newState.systemState.configPermissions.forEach { (permissionName, permissionEntry) ->
-            val permissions = newState.systemState.permissions
-            val oldPermission = permissions[permissionName]
-            val newPermission = if (oldPermission != null) {
-                if (permissionEntry.gids != null) {
-                    oldPermission.copy(
-                        gids = permissionEntry.gids, areGidsPerUser = permissionEntry.perUser
-                    )
-                } else {
-                    return@forEach
-                }
-            } else {
-                @Suppress("DEPRECATION")
-                val permissionInfo = PermissionInfo().apply {
-                    name = permissionName
-                    packageName = PLATFORM_PACKAGE_NAME
-                    protectionLevel = PermissionInfo.PROTECTION_SIGNATURE
-                }
-                if (permissionEntry.gids != null) {
-                    Permission(
-                        permissionInfo, false, Permission.TYPE_CONFIG, 0, permissionEntry.gids,
-                        permissionEntry.perUser
-                    )
-                } else {
-                    Permission(permissionInfo, false, Permission.TYPE_CONFIG, 0)
-                }
-            }
-            permissions[permissionName] = newPermission
-        }
-    }
-
-    override fun MutateStateScope.onUserAdded(userId: Int) {
-        newState.systemState.packageStates.forEach { (_, packageState) ->
-            evaluateAllPermissionStatesForPackageAndUser(packageState, userId, null)
-        }
-        newState.systemState.appIds.forEachKeyIndexed { _, appId ->
-            inheritImplicitPermissionStates(appId, userId)
-        }
-    }
-
-    override fun MutateStateScope.onAppIdRemoved(appId: Int) {
-        newState.userStates.forEachValueIndexed { _, userState ->
-            userState.uidPermissionFlags -= appId
-            userState.requestWrite()
-            // Skip notifying the change listeners since the app ID no longer exists.
-        }
-    }
-
-    override fun MutateStateScope.onStorageVolumeMounted(
-        volumeUuid: String?,
-        isSystemUpdated: Boolean
-    ) {
-        val changedPermissionNames = IndexedSet<String>()
-        newState.systemState.packageStates.forEach { (_, packageState) ->
-            val androidPackage = packageState.androidPackage
-            if (androidPackage == null || androidPackage.volumeUuid != volumeUuid) {
-                return@forEach
-            }
-            adoptPermissions(packageState, changedPermissionNames)
-            addPermissionGroups(packageState)
-            addPermissions(packageState, changedPermissionNames)
-            trimPermissions(packageState.packageName, changedPermissionNames)
-            trimPermissionStates(packageState.appId)
-            revokePermissionsOnPackageUpdate(packageState.appId)
-        }
-        changedPermissionNames.forEachIndexed { _, permissionName ->
-            evaluatePermissionStateForAllPackages(permissionName, null)
-        }
-
-        newState.systemState.packageStates.forEach { (_, packageState) ->
-            val androidPackage = packageState.androidPackage
-            if (androidPackage == null || androidPackage.volumeUuid != volumeUuid) {
-                return@forEach
-            }
-            val installedPackageState = if (isSystemUpdated) packageState else null
-            evaluateAllPermissionStatesForPackage(packageState, installedPackageState)
-        }
-        newState.systemState.packageStates.forEach { (_, packageState) ->
-            val androidPackage = packageState.androidPackage
-            if (androidPackage == null || androidPackage.volumeUuid != volumeUuid) {
-                return@forEach
-            }
-            newState.systemState.userIds.forEachIndexed { _, userId ->
-                inheritImplicitPermissionStates(packageState.appId, userId)
-            }
-        }
-    }
-
-    override fun MutateStateScope.onPackageAdded(packageState: PackageState) {
-        val changedPermissionNames = IndexedSet<String>()
-        adoptPermissions(packageState, changedPermissionNames)
-        addPermissionGroups(packageState)
-        addPermissions(packageState, changedPermissionNames)
-        // TODO: revokeSystemAlertWindowIfUpgradedPast23()
-        trimPermissions(packageState.packageName, changedPermissionNames)
-        trimPermissionStates(packageState.appId)
-        revokePermissionsOnPackageUpdate(packageState.appId)
-        changedPermissionNames.forEachIndexed { _, permissionName ->
-            evaluatePermissionStateForAllPackages(permissionName, null)
-        }
-        evaluateAllPermissionStatesForPackage(packageState, packageState)
-        newState.systemState.userIds.forEachIndexed { _, userId ->
-            inheritImplicitPermissionStates(packageState.appId, userId)
-        }
-    }
-
-    override fun MutateStateScope.onPackageRemoved(packageName: String, appId: Int) {
-        // TODO: STOPSHIP: Remove this check or at least turn into logging.
-        check(packageName !in newState.systemState.disabledSystemPackageStates) {
-            "Package $packageName reported as removed before disabled system package is enabled"
-        }
-
-        val changedPermissionNames = IndexedSet<String>()
-        trimPermissions(packageName, changedPermissionNames)
-        if (appId in newState.systemState.appIds) {
-            trimPermissionStates(appId)
-        }
-        changedPermissionNames.forEachIndexed { _, permissionName ->
-            evaluatePermissionStateForAllPackages(permissionName, null)
-        }
-    }
-
-    override fun MutateStateScope.onPackageUninstalled(
-        packageName: String,
-        appId: Int,
-        userId: Int
-    ) {
-        resetRuntimePermissions(packageName, appId, userId)
-    }
-
-    fun MutateStateScope.resetRuntimePermissions(
-        packageName: String,
-        appId: Int,
-        userId: Int
-    ) {
-        val androidPackage = newState.systemState.packageStates[packageName]?.androidPackage
-            ?: return
-        androidPackage.requestedPermissions.forEachIndexed { _, permissionName ->
-            val permission = newState.systemState.permissions[permissionName]
-                ?: return@forEachIndexed
-            if (permission.isRemoved) {
-                return@forEachIndexed
-            }
-            val isRequestedByOtherPackages = anyRequestingPackageInAppId(appId, permissionName) {
-                it.packageName != packageName
-            }
-            if (isRequestedByOtherPackages) {
-                return@forEachIndexed
-            }
-            val oldFlags = getPermissionFlags(appId, userId, permissionName)
-            if (oldFlags.hasAnyBit(SYSTEM_OR_POLICY_FIXED_MASK)) {
-                return@forEachIndexed
-            }
-            var newFlags = oldFlags
-            newFlags = if (
-                newFlags.hasBits(PermissionFlags.ROLE) || newFlags.hasBits(PermissionFlags.PREGRANT)
-            ) {
-                newFlags or PermissionFlags.RUNTIME_GRANTED
-            } else {
-                newFlags andInv PermissionFlags.RUNTIME_GRANTED
-            }
-            newFlags = newFlags andInv USER_SETTABLE_MASK
-            if (newFlags.hasBits(PermissionFlags.LEGACY_GRANTED)) {
-                newFlags = newFlags or PermissionFlags.IMPLICIT
-            }
-            setPermissionFlags(appId, userId, permissionName, newFlags)
-        }
-    }
-
-    private fun MutateStateScope.adoptPermissions(
-        packageState: PackageState,
-        changedPermissionNames: IndexedSet<String>
-    ) {
-        val `package` = packageState.androidPackage!!
-        `package`.adoptPermissions.forEachIndexed { _, originalPackageName ->
-            val packageName = `package`.packageName
-            if (!canAdoptPermissions(packageName, originalPackageName)) {
-                return@forEachIndexed
-            }
-            val systemState = newState.systemState
-            val permissions = systemState.permissions
-            permissions.forEachIndexed permissions@ {
-                permissionIndex, permissionName, oldPermission ->
-                if (oldPermission.packageName != originalPackageName) {
-                    return@permissions
-                }
-                @Suppress("DEPRECATION")
-                val newPermissionInfo = PermissionInfo().apply {
-                    name = oldPermission.permissionInfo.name
-                    this.packageName = packageName
-                    protectionLevel = oldPermission.permissionInfo.protectionLevel
-                }
-                // Different from the old implementation, which removes the GIDs upon permission
-                // adoption, but adds them back on the next boot, we now just consistently keep the
-                // GIDs.
-                val newPermission = oldPermission.copy(
-                    permissionInfo = newPermissionInfo, isReconciled = false, appId = 0
-                )
-                permissions.setValueAt(permissionIndex, newPermission)
-                systemState.requestWrite()
-                changedPermissionNames += permissionName
-            }
-        }
-    }
-
-    private fun MutateStateScope.canAdoptPermissions(
-        packageName: String,
-        originalPackageName: String
-    ): Boolean {
-        val originalPackageState = newState.systemState.packageStates[originalPackageName]
-            ?: return false
-        if (!originalPackageState.isSystem) {
-            Log.w(
-                LOG_TAG, "Unable to adopt permissions from $originalPackageName to $packageName:" +
-                    " original package not in system partition"
-            )
-            return false
-        }
-        if (originalPackageState.androidPackage != null) {
-            Log.w(
-                LOG_TAG, "Unable to adopt permissions from $originalPackageName to $packageName:" +
-                    " original package still exists"
-            )
-            return false
-        }
-        return true
-    }
-
-    private fun MutateStateScope.addPermissionGroups(packageState: PackageState) {
-        // Different from the old implementation, which decides whether the app is an instant app by
-        // the install flags, now for consistent behavior we allow adding permission groups if the
-        // app is non-instant in at least one user.
-        val isInstantApp = packageState.userStates.allIndexed { _, _, it -> it.isInstantApp }
-        if (isInstantApp) {
-            Log.w(
-                LOG_TAG, "Ignoring permission groups declared in package" +
-                    " ${packageState.packageName}: instant apps cannot declare permission groups"
-            )
-            return
-        }
-        packageState.androidPackage!!.permissionGroups.forEachIndexed { _, parsedPermissionGroup ->
-            val newPermissionGroup = PackageInfoUtils.generatePermissionGroupInfo(
-                parsedPermissionGroup, PackageManager.GET_META_DATA.toLong()
-            )!!
-            // TODO: Clear permission state on group take-over?
-            val permissionGroupName = newPermissionGroup.name
-            val oldPermissionGroup = newState.systemState.permissionGroups[permissionGroupName]
-            if (oldPermissionGroup != null &&
-                newPermissionGroup.packageName != oldPermissionGroup.packageName) {
-                val newPackageName = newPermissionGroup.packageName
-                val oldPackageName = oldPermissionGroup.packageName
-                // Different from the old implementation, which defines permission group on
-                // a first-come-first-serve basis, and relies on system apps being scanned before
-                // non-system apps, we now allow system apps to override permission groups similar
-                // to permissions so that we no longer need to rely on the scan order.
-                if (!packageState.isSystem) {
-                    Log.w(
-                        LOG_TAG, "Ignoring permission group $permissionGroupName declared in" +
-                            " package $newPackageName: already declared in another" +
-                            " package $oldPackageName"
-                    )
-                    return@forEachIndexed
-                }
-                if (newState.systemState.packageStates[oldPackageName]?.isSystem == true) {
-                    Log.w(
-                        LOG_TAG, "Ignoring permission group $permissionGroupName declared in" +
-                            " system package $newPackageName: already declared in another" +
-                            " system package $oldPackageName"
-                    )
-                    return@forEachIndexed
-                }
-                Log.w(
-                    LOG_TAG, "Overriding permission group $permissionGroupName with" +
-                        " new declaration in system package $newPackageName: originally" +
-                        " declared in another package $oldPackageName"
-                )
-            }
-            newState.systemState.permissionGroups[permissionGroupName] = newPermissionGroup
-        }
-    }
-
-    private fun MutateStateScope.addPermissions(
-        packageState: PackageState,
-        changedPermissionNames: IndexedSet<String>
-    ) {
-        packageState.androidPackage!!.permissions.forEachIndexed { _, parsedPermission ->
-            // TODO:
-            // parsedPermission.flags = parsedPermission.flags andInv PermissionInfo.FLAG_INSTALLED
-            // TODO: This seems actually unused.
-            // if (packageState.androidPackage.targetSdkVersion > Build.VERSION_CODES.LOLLIPOP_MR1) {
-            //    parsedPermission.setParsedPermissionGroup(
-            //        newState.systemState.permissionGroup[parsedPermission.group]
-            //    )
-            // }
-            val newPermissionInfo = PackageInfoUtils.generatePermissionInfo(
-                parsedPermission, PackageManager.GET_META_DATA.toLong()
-            )!!
-            // TODO: newPermissionInfo.flags |= PermissionInfo.FLAG_INSTALLED
-            val systemState = newState.systemState
-            val permissionName = newPermissionInfo.name
-            val oldPermission = if (parsedPermission.isTree) {
-                systemState.permissionTrees[permissionName]
-            } else {
-                systemState.permissions[permissionName]
-            }
-            // Different from the old implementation, which may add an (incomplete) signature
-            // permission inside another package's permission tree, we now consistently ignore such
-            // permissions.
-            val permissionTree = findPermissionTree(permissionName)
-            val newPackageName = newPermissionInfo.packageName
-            if (permissionTree != null && newPackageName != permissionTree.packageName) {
-                Log.w(
-                    LOG_TAG, "Ignoring permission $permissionName declared in package" +
-                        " $newPackageName: base permission tree ${permissionTree.name} is" +
-                        " declared in another package ${permissionTree.packageName}"
-                )
-                return@forEachIndexed
-            }
-            val newPermission = if (oldPermission != null &&
-                newPackageName != oldPermission.packageName) {
-                val oldPackageName = oldPermission.packageName
-                // Only allow system apps to redefine non-system permissions.
-                if (!packageState.isSystem) {
-                    Log.w(
-                        LOG_TAG, "Ignoring permission $permissionName declared in package" +
-                            " $newPackageName: already declared in another package" +
-                            " $oldPackageName"
-                    )
-                    return@forEachIndexed
-                }
-                if (oldPermission.type == Permission.TYPE_CONFIG && !oldPermission.isReconciled) {
-                    // It's a config permission and has no owner, take ownership now.
-                    oldPermission.copy(
-                        permissionInfo = newPermissionInfo, isReconciled = true,
-                        appId = packageState.appId
-                    )
-                } else if (systemState.packageStates[oldPackageName]?.isSystem != true) {
-                    Log.w(
-                        LOG_TAG, "Overriding permission $permissionName with new declaration in" +
-                            " system package $newPackageName: originally declared in another" +
-                            " package $oldPackageName"
-                    )
-                    // Remove permission state on owner change.
-                    systemState.userIds.forEachIndexed { _, userId ->
-                        systemState.appIds.forEachKeyIndexed { _, appId ->
-                            setPermissionFlags(appId, userId, permissionName, 0)
-                        }
-                    }
-                    // Different from the old implementation, which removes the GIDs upon permission
-                    // override, but adds them back on the next boot, we now just consistently keep
-                    // the GIDs.
-                    Permission(
-                        newPermissionInfo, true, Permission.TYPE_MANIFEST, packageState.appId,
-                        oldPermission.gids, oldPermission.areGidsPerUser
-                    )
-                } else {
-                    Log.w(
-                        LOG_TAG, "Ignoring permission $permissionName declared in system package" +
-                            " $newPackageName: already declared in another system package" +
-                            " $oldPackageName"
-                    )
-                    return@forEachIndexed
-                }
-            } else {
-                if (oldPermission != null) {
-                    val isPermissionGroupChanged = newPermissionInfo.isRuntime &&
-                        newPermissionInfo.group != null &&
-                        newPermissionInfo.group != oldPermission.groupName
-                    val isPermissionTypeChanged = oldPermission.type != Permission.TYPE_CONFIG && (
-                        (newPermissionInfo.isRuntime && !oldPermission.isRuntime) ||
-                            (newPermissionInfo.isInternal && !oldPermission.isInternal)
-                    )
-                    if (isPermissionGroupChanged || isPermissionTypeChanged) {
-                        systemState.userIds.forEachIndexed { _, userId ->
-                            systemState.appIds.forEachKeyIndexed { _, appId ->
-                                if (isPermissionGroupChanged) {
-                                    // We might auto-grant permissions if any permission of
-                                    // the group is already granted. Hence if the group of
-                                    // a granted permission changes we need to revoke it to
-                                    // avoid having permissions of the new group auto-granted.
-                                    Log.w(
-                                        LOG_TAG, "Revoking runtime permission $permissionName for" +
-                                            " appId $appId and userId $userId as the permission" +
-                                            " group changed from ${oldPermission.groupName}" +
-                                            " to ${newPermissionInfo.group}"
-                                    )
-                                }
-                                if (isPermissionTypeChanged) {
-                                    Log.w(
-                                        LOG_TAG, "Revoking permission $permissionName for" +
-                                            " appId $appId and userId $userId as the permission" +
-                                            " type changed."
-                                    )
-                                }
-                                setPermissionFlags(appId, userId, permissionName, 0)
-                            }
-                        }
-                    }
-                }
-
-                // Different from the old implementation, which doesn't update the permission
-                // definition upon app update, but does update it on the next boot, we now
-                // consistently update the permission definition upon app update.
-                @Suppress("IfThenToElvis")
-                if (oldPermission != null) {
-                    oldPermission.copy(
-                        permissionInfo = newPermissionInfo, isReconciled = true,
-                        appId = packageState.appId
-                    )
-                } else {
-                    Permission(
-                        newPermissionInfo, true, Permission.TYPE_MANIFEST, packageState.appId
-                    )
-                }
-            }
-
-            if (parsedPermission.isTree) {
-                systemState.permissionTrees[permissionName] = newPermission
-            } else {
-                systemState.permissions[permissionName] = newPermission
-            }
-            systemState.requestWrite()
-            changedPermissionNames += permissionName
-        }
-    }
-
-    private fun MutateStateScope.trimPermissions(
-        packageName: String,
-        changedPermissionNames: IndexedSet<String>
-    ) {
-        val systemState = newState.systemState
-        val packageState = systemState.packageStates[packageName]
-        val androidPackage = packageState?.androidPackage
-        if (packageState != null && androidPackage == null) {
-            return
-        }
-        val disabledSystemPackage = systemState.disabledSystemPackageStates[packageName]
-            ?.androidPackage
-        // Unlike in the previous implementation, we now also retain permission trees defined by
-        // disabled system packages for consistency with permissions.
-        val isPermissionTreeRemoved = systemState.permissionTrees.removeAllIndexed {
-            _, permissionTreeName, permissionTree ->
-            permissionTree.packageName == packageName && (
-                packageState == null || androidPackage!!.permissions.noneIndexed { _, it ->
-                    it.isTree && it.name == permissionTreeName
-                }
-            ) && (
-                disabledSystemPackage?.permissions?.anyIndexed { _, it ->
-                    it.isTree && it.name == permissionTreeName
-                } != true
-            )
-        }
-        if (isPermissionTreeRemoved) {
-            systemState.requestWrite()
-        }
-
-        systemState.permissions.removeAllIndexed { permissionIndex, permissionName, permission ->
-            val updatedPermission = updatePermissionIfDynamic(permission)
-            newState.systemState.permissions.setValueAt(permissionIndex, updatedPermission)
-            if (updatedPermission.packageName == packageName && (
-                packageState == null || androidPackage!!.permissions.noneIndexed { _, it ->
-                    !it.isTree && it.name == permissionName
-                }
-            ) && (
-                disabledSystemPackage?.permissions?.anyIndexed { _, it ->
-                    !it.isTree && it.name == permissionName
-                } != true
-            )) {
-                // Different from the old implementation where we keep the permission state if the
-                // permission is declared by a disabled system package (ag/15189282), we now
-                // shouldn't be notified when the updated system package is removed but the disabled
-                // system package isn't re-enabled yet, so we don't need to maintain that brittle
-                // special case either.
-                systemState.userIds.forEachIndexed { _, userId ->
-                    systemState.appIds.forEachKeyIndexed { _, appId ->
-                        setPermissionFlags(appId, userId, permissionName, 0)
-                    }
-                }
-                changedPermissionNames += permissionName
-                systemState.requestWrite()
-                true
-            } else {
-                false
-            }
-        }
-    }
-
-    private fun MutateStateScope.updatePermissionIfDynamic(permission: Permission): Permission {
-        if (!permission.isDynamic) {
-            return permission
-        }
-        val permissionTree = findPermissionTree(permission.name) ?: return permission
-        @Suppress("DEPRECATION")
-        return permission.copy(
-            permissionInfo = PermissionInfo(permission.permissionInfo).apply {
-                packageName = permissionTree.packageName
-            }, appId = permissionTree.appId, isReconciled = true
-        )
-    }
-
-    private fun MutateStateScope.trimPermissionStates(appId: Int) {
-        val requestedPermissions = IndexedSet<String>()
-        forEachPackageInAppId(appId) {
-            // Note that we still trim the permission states requested by disabled system packages.
-            // Because in the previous implementation:
-            // despite revokeSharedUserPermissionsForLeavingPackageInternal() retains permissions
-            // requested by disabled system packages, revokeUnusedSharedUserPermissionsLocked(),
-            // which is call upon app update installation, didn't do such preservation.
-            // Hence, permissions only requested by disabled system packages were still trimmed in
-            // the previous implementation.
-            requestedPermissions += it.androidPackage!!.requestedPermissions
-        }
-        newState.userStates.forEachIndexed { _, userId, userState ->
-            userState.uidPermissionFlags[appId]?.forEachReversedIndexed { _, permissionName, _ ->
-                if (permissionName !in requestedPermissions) {
-                    setPermissionFlags(appId, userId, permissionName, 0)
-                }
-            }
-        }
-    }
-
-    private fun MutateStateScope.revokePermissionsOnPackageUpdate(appId: Int) {
-        // If the app is updated, and has scoped storage permissions, then it is possible that the
-        // app updated in an attempt to get unscoped storage. If so, revoke all storage permissions.
-        newState.userStates.forEachIndexed { _, userId, userState ->
-            userState.uidPermissionFlags[appId]?.forEachReversedIndexed {
-                _, permissionName, oldFlags ->
-                if (permissionName !in STORAGE_AND_MEDIA_PERMISSIONS || oldFlags == 0) {
-                    return@forEachReversedIndexed
-                }
-                val oldTargetSdkVersion = getAppIdTargetSdkVersion(appId, permissionName, oldState)
-                val newTargetSdkVersion = getAppIdTargetSdkVersion(appId, permissionName, newState)
-                val isTargetSdkVersionDowngraded = oldTargetSdkVersion >= Build.VERSION_CODES.Q &&
-                    newTargetSdkVersion < Build.VERSION_CODES.Q
-                val isTargetSdkVersionUpgraded = oldTargetSdkVersion < Build.VERSION_CODES.Q &&
-                    newTargetSdkVersion >= Build.VERSION_CODES.Q
-                val oldIsRequestLegacyExternalStorage = anyRequestingPackageInAppId(
-                    appId, permissionName, oldState
-                ) { it.androidPackage!!.isRequestLegacyExternalStorage }
-                val newIsRequestLegacyExternalStorage = anyRequestingPackageInAppId(
-                    appId, permissionName, newState
-                ) { it.androidPackage!!.isRequestLegacyExternalStorage }
-                val isNewlyRequestingLegacyExternalStorage = !isTargetSdkVersionUpgraded &&
-                    !oldIsRequestLegacyExternalStorage && newIsRequestLegacyExternalStorage
-                if ((isNewlyRequestingLegacyExternalStorage || isTargetSdkVersionDowngraded) &&
-                    oldFlags.hasBits(PermissionFlags.RUNTIME_GRANTED)) {
-                    val newFlags = oldFlags andInv (
-                        PermissionFlags.RUNTIME_GRANTED or USER_SETTABLE_MASK
-                    )
-                    setPermissionFlags(appId, userId, permissionName, newFlags)
-                }
-            }
-        }
-    }
-
-    private fun MutateStateScope.evaluatePermissionStateForAllPackages(
-        permissionName: String,
-        installedPackageState: PackageState?
-    ) {
-        val systemState = newState.systemState
-        systemState.userIds.forEachIndexed { _, userId ->
-            systemState.appIds.forEachKeyIndexed { _, appId ->
-                val isPermissionRequested =
-                    anyRequestingPackageInAppId(appId, permissionName) { true }
-                if (isPermissionRequested) {
-                    evaluatePermissionState(appId, userId, permissionName, installedPackageState)
-                }
-            }
-        }
-    }
-
-    private fun MutateStateScope.evaluateAllPermissionStatesForPackage(
-        packageState: PackageState,
-        installedPackageState: PackageState?
-    ) {
-        newState.systemState.userIds.forEachIndexed { _, userId ->
-            evaluateAllPermissionStatesForPackageAndUser(
-                packageState, userId, installedPackageState
-            )
-        }
-    }
-
-    private fun MutateStateScope.evaluateAllPermissionStatesForPackageAndUser(
-        packageState: PackageState,
-        userId: Int,
-        installedPackageState: PackageState?
-    ) {
-        packageState.androidPackage?.requestedPermissions?.forEachIndexed { _, permissionName ->
-            evaluatePermissionState(
-                packageState.appId, userId, permissionName, installedPackageState
-            )
-        }
-    }
-
-    private fun MutateStateScope.evaluatePermissionState(
-        appId: Int,
-        userId: Int,
-        permissionName: String,
-        installedPackageState: PackageState?
-    ) {
-        val packageNames = newState.systemState.appIds[appId]
-        val hasMissingPackage = packageNames.anyIndexed { _, packageName ->
-            newState.systemState.packageStates[packageName]!!.androidPackage == null
-        }
-        if (packageNames.size == 1 && hasMissingPackage) {
-            // For non-shared-user packages with missing androidPackage, skip evaluation.
-            return
-        }
-        val permission = newState.systemState.permissions[permissionName]
-        val oldFlags = getPermissionFlags(appId, userId, permissionName)
-        if (permission == null) {
-            if (oldFlags == 0) {
-                // If the permission definition is missing and we don't have any permission states
-                // for this permission, add the INSTALL_REVOKED flag to ensure that we don't
-                // automatically grant the permission when it's defined
-                setPermissionFlags(appId, userId, permissionName, PermissionFlags.INSTALL_REVOKED)
-            }
-            return
-        }
-        if (permission.isNormal) {
-            val wasGranted = oldFlags.hasBits(PermissionFlags.INSTALL_GRANTED)
-            if (!wasGranted) {
-                val wasRevoked = oldFlags.hasBits(PermissionFlags.INSTALL_REVOKED)
-                val isRequestedByInstalledPackage = installedPackageState != null &&
-                    permissionName in installedPackageState.androidPackage!!.requestedPermissions
-                val isRequestedBySystemPackage =
-                    anyRequestingPackageInAppId(appId, permissionName) { it.isSystem }
-                val isCompatibilityPermission = anyRequestingPackageInAppId(appId, permissionName) {
-                    isCompatibilityPermissionForPackage(it.androidPackage!!, permissionName)
-                }
-                // If this is an existing, non-system package,
-                // then we can't add any new permissions to it.
-                // Except if this is a permission that was added to the platform
-                val newFlags = if (!wasRevoked || isRequestedByInstalledPackage ||
-                    isRequestedBySystemPackage || isCompatibilityPermission) {
-                    PermissionFlags.INSTALL_GRANTED
-                } else {
-                    PermissionFlags.INSTALL_REVOKED
-                }
-                setPermissionFlags(appId, userId, permissionName, newFlags)
-            }
-        } else if (permission.isSignature || permission.isInternal) {
-            val wasProtectionGranted = oldFlags.hasBits(PermissionFlags.PROTECTION_GRANTED)
-            var newFlags = if (hasMissingPackage && wasProtectionGranted) {
-                // Keep the non-runtime permission grants for shared UID with missing androidPackage
-                PermissionFlags.PROTECTION_GRANTED
-            } else {
-                val mayGrantByPrivileged = !permission.isPrivileged || (
-                    anyRequestingPackageInAppId(appId, permissionName) {
-                        checkPrivilegedPermissionAllowlist(it, permission)
-                    }
-                )
-                val shouldGrantBySignature = permission.isSignature && (
-                    anyRequestingPackageInAppId(appId, permissionName) {
-                        shouldGrantPermissionBySignature(it, permission)
-                    }
-                )
-                val shouldGrantByProtectionFlags =
-                    anyRequestingPackageInAppId(appId, permissionName) {
-                        shouldGrantPermissionByProtectionFlags(it, permission)
-                    }
-                if (mayGrantByPrivileged &&
-                    (shouldGrantBySignature || shouldGrantByProtectionFlags)) {
-                    PermissionFlags.PROTECTION_GRANTED
-                } else {
-                    0
-                }
-            }
-            // Different from the old implementation, which seemingly allows granting an
-            // unallowlisted privileged permission via development or role but revokes it upon next
-            // reconciliation, we now properly allows that because the privileged protection flag
-            // should only affect the other static flags, but not dynamic flags like development or
-            // role. This may be useful in the case of an updated system app.
-            if (permission.isDevelopment) {
-                newFlags = newFlags or (oldFlags and PermissionFlags.RUNTIME_GRANTED)
-            }
-            if (permission.isRole) {
-                newFlags = newFlags or (
-                    oldFlags and (PermissionFlags.ROLE or PermissionFlags.RUNTIME_GRANTED)
-                )
-            }
-            setPermissionFlags(appId, userId, permissionName, newFlags)
-        } else if (permission.isRuntime) {
-            var newFlags = oldFlags and PermissionFlags.MASK_RUNTIME
-            if (getAppIdTargetSdkVersion(appId, permissionName) < Build.VERSION_CODES.M) {
-                if (permission.isRuntimeOnly) {
-                    // Different from the old implementation, which simply skips a runtime-only
-                    // permission, we now only allow holding on to the restriction related flags,
-                    // since such flags may only be set one-time in some cases, and disallow all
-                    // other flags thus keeping it revoked.
-                    newFlags = newFlags and PermissionFlags.MASK_EXEMPT
-                } else {
-                    newFlags = newFlags or PermissionFlags.LEGACY_GRANTED
-                    // Explicitly check against the old state to determine if this permission is
-                    // new.
-                    val isNewPermission =
-                        getOldStatePermissionFlags(appId, userId, permissionName) == 0
-                    if (isNewPermission) {
-                        newFlags = newFlags or PermissionFlags.IMPLICIT
-                    }
-                }
-            } else {
-                val wasGrantedByLegacy = newFlags.hasBits(PermissionFlags.LEGACY_GRANTED)
-                newFlags = newFlags andInv PermissionFlags.LEGACY_GRANTED
-                val wasGrantedByImplicit = newFlags.hasBits(PermissionFlags.IMPLICIT_GRANTED)
-                val isLeanbackNotificationsPermission = newState.systemState.isLeanback &&
-                    permissionName in NOTIFICATIONS_PERMISSIONS
-                val isImplicitPermission = anyRequestingPackageInAppId(appId, permissionName) {
-                    permissionName in it.androidPackage!!.implicitPermissions
-                }
-                val sourcePermissions = newState.systemState
-                    .implicitToSourcePermissions[permissionName]
-                val isAnySourcePermissionNonRuntime = sourcePermissions?.any {
-                    val sourcePermission = newState.systemState.permissions[it]
-                    checkNotNull(sourcePermission) {
-                        "Unknown source permission $it in split permissions"
-                    }
-                    !sourcePermission.isRuntime
-                } ?: false
-                val shouldGrantByImplicit = isLeanbackNotificationsPermission ||
-                    (isImplicitPermission && isAnySourcePermissionNonRuntime)
-                if (shouldGrantByImplicit) {
-                    newFlags = newFlags or PermissionFlags.IMPLICIT_GRANTED
-                } else {
-                    newFlags = newFlags andInv PermissionFlags.IMPLICIT_GRANTED
-                }
-                if ((wasGrantedByLegacy || wasGrantedByImplicit) && !shouldGrantByImplicit) {
-                    // The permission was granted from a compatibility grant or an implicit grant,
-                    // however this flag might still be set if the user denied this permission in
-                    // the settings. Hence upon app upgrade and when this permission is no longer
-                    // LEGACY_GRANTED or IMPLICIT_GRANTED and we revoke the permission, we want to
-                    // remove this flag so that the app can request the permission again.
-                    newFlags = newFlags andInv PermissionFlags.APP_OP_REVOKED
-                }
-                val hasImplicitFlag = newFlags.hasBits(PermissionFlags.IMPLICIT)
-                if (!isImplicitPermission && hasImplicitFlag) {
-                    newFlags = newFlags andInv PermissionFlags.IMPLICIT
-                    var shouldRetainAsNearbyDevices = false
-                    if (permissionName in NEARBY_DEVICES_PERMISSIONS) {
-                        val accessBackgroundLocationFlags = getPermissionFlags(
-                            appId, userId, Manifest.permission.ACCESS_BACKGROUND_LOCATION
-                        )
-                        shouldRetainAsNearbyDevices =
-                            PermissionFlags.isAppOpGranted(accessBackgroundLocationFlags) &&
-                                !accessBackgroundLocationFlags.hasBits(PermissionFlags.IMPLICIT)
-                    }
-                    val shouldRetainByMask = newFlags.hasAnyBit(SYSTEM_OR_POLICY_FIXED_MASK)
-                    if (shouldRetainAsNearbyDevices || shouldRetainByMask) {
-                        if (wasGrantedByImplicit) {
-                            newFlags = newFlags or PermissionFlags.RUNTIME_GRANTED
-                        }
-                    } else {
-                        newFlags = newFlags andInv (
-                            PermissionFlags.RUNTIME_GRANTED or PermissionFlags.USER_SET or
-                                PermissionFlags.USER_FIXED
-                        )
-                    }
-                }
-            }
-
-            val isExempt = newFlags.hasAnyBit(PermissionFlags.MASK_EXEMPT)
-            val isHardRestricted = permission.isHardRestricted && !isExempt
-            newFlags = if (isHardRestricted) {
-                newFlags or PermissionFlags.RESTRICTION_REVOKED
-            } else {
-                newFlags andInv PermissionFlags.RESTRICTION_REVOKED
-            }
-            val isSoftRestricted = permission.isSoftRestricted && !isExempt
-            newFlags = if (isSoftRestricted) {
-                newFlags or PermissionFlags.SOFT_RESTRICTED
-            } else {
-                newFlags andInv PermissionFlags.SOFT_RESTRICTED
-            }
-            setPermissionFlags(appId, userId, permissionName, newFlags)
-        } else {
-            Log.e(LOG_TAG, "Unknown protection level ${permission.protectionLevel}" +
-                "for permission ${permission.name} while evaluating permission state" +
-                "for appId $appId and userId $userId")
-        }
-    }
-
-    private fun MutateStateScope.inheritImplicitPermissionStates(appId: Int, userId: Int) {
-        val implicitPermissions = IndexedSet<String>()
-        forEachPackageInAppId(appId) {
-            implicitPermissions += it.androidPackage!!.implicitPermissions
-        }
-        implicitPermissions.forEachIndexed implicitPermissions@ { _, implicitPermissionName ->
-            val implicitPermission = newState.systemState.permissions[implicitPermissionName]
-            checkNotNull(implicitPermission) {
-                "Unknown implicit permission $implicitPermissionName in split permissions"
-            }
-            if (!implicitPermission.isRuntime) {
-                return@implicitPermissions
-            }
-            // Explicitly check against the old state to determine if this permission is new.
-            val isNewPermission =
-                getOldStatePermissionFlags(appId, userId, implicitPermissionName) == 0
-            if (!isNewPermission) {
-                return@implicitPermissions
-            }
-            val sourcePermissions = newState.systemState
-                .implicitToSourcePermissions[implicitPermissionName] ?: return@implicitPermissions
-            var newFlags = getPermissionFlags(appId, userId, implicitPermissionName)
-            sourcePermissions.forEachIndexed sourcePermissions@ { _, sourcePermissionName ->
-                val sourcePermission = newState.systemState.permissions[sourcePermissionName]
-                checkNotNull(sourcePermission) {
-                    "Unknown source permission $sourcePermissionName in split permissions"
-                }
-                val sourceFlags = getPermissionFlags(appId, userId, sourcePermissionName)
-                val isSourceGranted = PermissionFlags.isPermissionGranted(sourceFlags)
-                val isNewGranted = PermissionFlags.isPermissionGranted(newFlags)
-                val isGrantingNewFromRevoke = isSourceGranted && !isNewGranted
-                if (isSourceGranted == isNewGranted || isGrantingNewFromRevoke) {
-                    if (isGrantingNewFromRevoke) {
-                        newFlags = 0
-                    }
-                    newFlags = newFlags or (sourceFlags and PermissionFlags.MASK_RUNTIME)
-                }
-            }
-            if (implicitPermissionName in RETAIN_IMPLICIT_FLAGS_PERMISSIONS) {
-                newFlags = newFlags andInv PermissionFlags.IMPLICIT
-            } else {
-                newFlags = newFlags or PermissionFlags.IMPLICIT
-            }
-            setPermissionFlags(appId, userId, implicitPermissionName, newFlags)
-        }
-    }
-
-    private fun isCompatibilityPermissionForPackage(
-        androidPackage: AndroidPackage,
-        permissionName: String
-    ): Boolean {
-        for (compatibilityPermission in CompatibilityPermissionInfo.COMPAT_PERMS) {
-            if (compatibilityPermission.name == permissionName &&
-                androidPackage.targetSdkVersion < compatibilityPermission.sdkVersion) {
-                Log.i(
-                    LOG_TAG, "Auto-granting $permissionName to old package" +
-                    " ${androidPackage.packageName}"
-                )
-                return true
-            }
-        }
-        return false
-    }
-
-    private fun MutateStateScope.shouldGrantPermissionBySignature(
-        packageState: PackageState,
-        permission: Permission
-    ): Boolean {
-        // Check if the package is allowed to use this signature permission.  A package is allowed
-        // to use a signature permission if:
-        // - it has the same set of signing certificates as the source package
-        // - or its signing certificate was rotated from the source package's certificate
-        // - or its signing certificate is a previous signing certificate of the defining
-        //     package, and the defining package still trusts the old certificate for permissions
-        // - or it shares a common signing certificate in its lineage with the defining package,
-        //     and the defining package still trusts the old certificate for permissions
-        // - or it shares the above relationships with the system package
-        val packageSigningDetails = packageState.androidPackage!!.signingDetails
-        val sourceSigningDetails = newState.systemState
-            .packageStates[permission.packageName]?.androidPackage?.signingDetails
-        val platformSigningDetails = newState.systemState
-            .packageStates[PLATFORM_PACKAGE_NAME]!!.androidPackage!!.signingDetails
-        return sourceSigningDetails?.hasCommonSignerWithCapability(packageSigningDetails,
-            SigningDetails.CertCapabilities.PERMISSION) == true ||
-            packageSigningDetails.hasAncestorOrSelf(platformSigningDetails) ||
-            platformSigningDetails.checkCapability(packageSigningDetails,
-                    SigningDetails.CertCapabilities.PERMISSION)
-    }
-
-    private fun MutateStateScope.checkPrivilegedPermissionAllowlist(
-        packageState: PackageState,
-        permission: Permission
-    ): Boolean {
-        if (RoSystemProperties.CONTROL_PRIVAPP_PERMISSIONS_DISABLE) {
-            return true
-        }
-        if (packageState.packageName == PLATFORM_PACKAGE_NAME) {
-            return true
-        }
-        if (!(packageState.isSystem && packageState.isPrivileged)) {
-            return true
-        }
-        if (permission.packageName !in newState.systemState.privilegedPermissionAllowlistPackages) {
-            return true
-        }
-        val allowlistState = getPrivilegedPermissionAllowlistState(packageState, permission.name)
-        if (allowlistState != null) {
-            return allowlistState
-        }
-        // Updated system apps do not need to be allowlisted
-        if (packageState.isUpdatedSystemApp) {
-            return true
-        }
-        // Only enforce the privileged permission allowlist on boot
-        if (!newState.systemState.isSystemReady) {
-            // Apps that are in updated apex's do not need to be allowlisted
-            if (!packageState.isApkInUpdatedApex) {
-                Log.w(
-                    LOG_TAG, "Privileged permission ${permission.name} for package" +
-                    " ${packageState.packageName} (${packageState.path}) not in" +
-                    " privileged permission allowlist"
-                )
-                if (RoSystemProperties.CONTROL_PRIVAPP_PERMISSIONS_ENFORCE) {
-                    privilegedPermissionAllowlistViolations += "${packageState.packageName}" +
-                        " (${packageState.path}): ${permission.name}"
-                }
-            }
-        }
-        return !RoSystemProperties.CONTROL_PRIVAPP_PERMISSIONS_ENFORCE
-    }
-
-    /**
-     * Get the whether a privileged permission is explicitly allowed or denied for a package in the
-     * allowlist, or `null` if it's not in the allowlist.
-     */
-    private fun MutateStateScope.getPrivilegedPermissionAllowlistState(
-        packageState: PackageState,
-        permissionName: String
-    ): Boolean? {
-        val permissionAllowlist = newState.systemState.permissionAllowlist
-        val apexModuleName = packageState.apexModuleName
-        val packageName = packageState.packageName
-        return when {
-            packageState.isVendor -> permissionAllowlist.getVendorPrivilegedAppAllowlistState(
-                packageName, permissionName
-            )
-            packageState.isProduct -> permissionAllowlist.getProductPrivilegedAppAllowlistState(
-                packageName, permissionName
-            )
-            packageState.isSystemExt ->
-                permissionAllowlist.getSystemExtPrivilegedAppAllowlistState(
-                    packageName, permissionName
-                )
-            apexModuleName != null -> {
-                val nonApexAllowlistState = permissionAllowlist.getPrivilegedAppAllowlistState(
-                    packageName, permissionName
-                )
-                if (nonApexAllowlistState != null) {
-                    // TODO(andreionea): Remove check as soon as all apk-in-apex
-                    // permission allowlists are migrated.
-                    Log.w(
-                        LOG_TAG, "Package $packageName is an APK in APEX but has permission" +
-                            " allowlist on the system image, please bundle the allowlist in the" +
-                            " $apexModuleName APEX instead"
-                    )
-                }
-                val apexAllowlistState = permissionAllowlist.getApexPrivilegedAppAllowlistState(
-                    apexModuleName, packageName, permissionName
-                )
-                apexAllowlistState ?: nonApexAllowlistState
-            }
-            else -> permissionAllowlist.getPrivilegedAppAllowlistState(packageName, permissionName)
-        }
-    }
-
-    private fun MutateStateScope.getAppIdTargetSdkVersion(
-        appId: Int,
-        permissionName: String,
-        state: AccessState = newState
-    ): Int {
-        var targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT
-        forEachRequestingPackageInAppId(appId, permissionName, state) {
-            targetSdkVersion = targetSdkVersion.coerceAtMost(it.androidPackage!!.targetSdkVersion)
-        }
-        return targetSdkVersion
-    }
-
-    private inline fun MutateStateScope.anyRequestingPackageInAppId(
-        appId: Int,
-        permissionName: String,
-        state: AccessState = newState,
-        predicate: (PackageState) -> Boolean
-    ): Boolean {
-        val packageNames = state.systemState.appIds[appId]
-        return packageNames.anyIndexed { _, packageName ->
-            val packageState = state.systemState.packageStates[packageName]!!
-            val androidPackage = packageState.androidPackage
-            androidPackage != null && permissionName in androidPackage.requestedPermissions &&
-                predicate(packageState)
-        }
-    }
-
-    private inline fun MutateStateScope.forEachPackageInAppId(
-        appId: Int,
-        state: AccessState = newState,
-        action: (PackageState) -> Unit
-    ) {
-        val packageNames = state.systemState.appIds[appId]!!
-        packageNames.forEachIndexed { _, packageName ->
-            val packageState = state.systemState.packageStates[packageName]!!
-            if (packageState.androidPackage != null) {
-                action(packageState)
-            }
-        }
-    }
-
-    private inline fun MutateStateScope.forEachRequestingPackageInAppId(
-        appId: Int,
-        permissionName: String,
-        state: AccessState = newState,
-        action: (PackageState) -> Unit
-    ) {
-        val packageNames = state.systemState.appIds[appId]
-        packageNames.forEachIndexed { _, packageName ->
-            val packageState = state.systemState.packageStates[packageName]!!
-            val androidPackage = packageState.androidPackage
-            if (androidPackage != null && permissionName in androidPackage.requestedPermissions) {
-                action(packageState)
-            }
-        }
-    }
-
-    private fun MutateStateScope.shouldGrantPermissionByProtectionFlags(
-        packageState: PackageState,
-        permission: Permission
-    ): Boolean {
-        val androidPackage = packageState.androidPackage!!
-        val knownPackages = newState.systemState.knownPackages
-        val packageName = packageState.packageName
-        if ((permission.isPrivileged || permission.isOem) && packageState.isSystem) {
-            val shouldGrant = if (packageState.isUpdatedSystemApp) {
-                // For updated system applications, a privileged/oem permission
-                // is granted only if it had been defined by the original application.
-                val disabledSystemPackageState = newState.systemState
-                    .disabledSystemPackageStates[packageState.packageName]
-                val disabledSystemPackage = disabledSystemPackageState?.androidPackage
-                disabledSystemPackage != null &&
-                    permission.name in disabledSystemPackage.requestedPermissions &&
-                    shouldGrantPrivilegedOrOemPermission(disabledSystemPackageState, permission)
-            } else {
-                shouldGrantPrivilegedOrOemPermission(packageState, permission)
-            }
-            if (shouldGrant) {
-                return true
-            }
-        }
-        if (permission.isPre23 && androidPackage.targetSdkVersion < Build.VERSION_CODES.M) {
-            // If this was a previously normal/dangerous permission that got moved
-            // to a system permission as part of the runtime permission redesign, then
-            // we still want to blindly grant it to old apps.
-            return true
-        }
-        if (permission.isInstaller && (
-            packageName in knownPackages[KnownPackages.PACKAGE_INSTALLER] ||
-                packageName in knownPackages[KnownPackages.PACKAGE_PERMISSION_CONTROLLER]
-        )) {
-            // If this permission is to be granted to the system installer and
-            // this app is an installer or permission controller, then it gets the permission.
-            return true
-        }
-        if (permission.isVerifier &&
-            packageName in knownPackages[KnownPackages.PACKAGE_VERIFIER]) {
-            // If this permission is to be granted to the system verifier and
-            // this app is a verifier, then it gets the permission.
-            return true
-        }
-        if (permission.isPreInstalled && packageState.isSystem) {
-            // Any pre-installed system app is allowed to get this permission.
-            return true
-        }
-        if (permission.isKnownSigner &&
-            androidPackage.signingDetails.hasAncestorOrSelfWithDigest(permission.knownCerts)) {
-            // If the permission is to be granted to a known signer then check if any of this
-            // app's signing certificates are in the trusted certificate digest Set.
-            return true
-        }
-        if (permission.isSetup &&
-            packageName in knownPackages[KnownPackages.PACKAGE_SETUP_WIZARD]) {
-            // If this permission is to be granted to the system setup wizard and
-            // this app is a setup wizard, then it gets the permission.
-            return true
-        }
-        if (permission.isSystemTextClassifier &&
-            packageName in knownPackages[KnownPackages.PACKAGE_SYSTEM_TEXT_CLASSIFIER]) {
-            // Special permissions for the system default text classifier.
-            return true
-        }
-        if (permission.isConfigurator &&
-            packageName in knownPackages[KnownPackages.PACKAGE_CONFIGURATOR]) {
-            // Special permissions for the device configurator.
-            return true
-        }
-        if (permission.isIncidentReportApprover &&
-            packageName in knownPackages[KnownPackages.PACKAGE_INCIDENT_REPORT_APPROVER]) {
-            // If this permission is to be granted to the incident report approver and
-            // this app is the incident report approver, then it gets the permission.
-            return true
-        }
-        if (permission.isAppPredictor &&
-            packageName in knownPackages[KnownPackages.PACKAGE_APP_PREDICTOR]) {
-            // Special permissions for the system app predictor.
-            return true
-        }
-        if (permission.isCompanion &&
-            packageName in knownPackages[KnownPackages.PACKAGE_COMPANION]) {
-            // Special permissions for the system companion device manager.
-            return true
-        }
-        if (permission.isRetailDemo &&
-            packageName in knownPackages[KnownPackages.PACKAGE_RETAIL_DEMO] &&
-            isDeviceOrProfileOwnerUid(packageState.appId)) {
-            // Special permission granted only to the OEM specified retail demo app.
-            // Note that the original code was passing app ID as UID, so this behavior is kept
-            // unchanged.
-            return true
-        }
-        if (permission.isRecents &&
-            packageName in knownPackages[KnownPackages.PACKAGE_RECENTS]) {
-            // Special permission for the recents app.
-            return true
-        }
-        if (permission.isModule && packageState.apexModuleName != null) {
-            // Special permission granted for APKs inside APEX modules.
-            return true
-        }
-        return false
-    }
-
-    private fun MutateStateScope.shouldGrantPrivilegedOrOemPermission(
-        packageState: PackageState,
-        permission: Permission
-    ): Boolean {
-        val permissionName = permission.name
-        val packageName = packageState.packageName
-        when {
-            permission.isPrivileged -> {
-                if (packageState.isPrivileged) {
-                    // In any case, don't grant a privileged permission to privileged vendor apps,
-                    // if the permission's protectionLevel does not have the extra vendorPrivileged
-                    // flag.
-                    if (packageState.isVendor && !permission.isVendorPrivileged) {
-                        Log.w(
-                            LOG_TAG, "Permission $permissionName cannot be granted to privileged" +
-                            " vendor app $packageName because it isn't a vendorPrivileged" +
-                            " permission"
-                        )
-                        return false
-                    }
-                    return true
-                }
-            }
-            permission.isOem -> {
-                if (packageState.isOem) {
-                    val allowlistState = newState.systemState.permissionAllowlist
-                        .getOemAppAllowlistState(packageName, permissionName)
-                    checkNotNull(allowlistState) {
-                        "OEM permission $permissionName requested by package" +
-                            " $packageName must be explicitly declared granted or not"
-                    }
-                    return allowlistState
-                }
-            }
-        }
-        return false
-    }
-
-    private fun MutateStateScope.isDeviceOrProfileOwnerUid(uid: Int): Boolean {
-        val userId = UserHandle.getUserId(uid)
-        val ownerPackageName = newState.systemState.deviceAndProfileOwners[userId] ?: return false
-        val ownerPackageState = newState.systemState.packageStates[ownerPackageName] ?: return false
-        val ownerUid = UserHandle.getUid(userId, ownerPackageState.appId)
-        return uid == ownerUid
-    }
-
-    override fun MutateStateScope.onSystemReady() {
-        if (!privilegedPermissionAllowlistViolations.isEmpty()) {
-            throw IllegalStateException("Signature|privileged permissions not in privileged" +
-                " permission allowlist: $privilegedPermissionAllowlistViolations")
-        }
-    }
-
-    override fun BinaryXmlPullParser.parseSystemState(state: AccessState) {
-        with(persistence) { this@parseSystemState.parseSystemState(state) }
-    }
-
-    override fun BinaryXmlSerializer.serializeSystemState(state: AccessState) {
-        with(persistence) { this@serializeSystemState.serializeSystemState(state) }
-    }
-
-    override fun BinaryXmlPullParser.parseUserState(state: AccessState, userId: Int) {
-        with(persistence) { this@parseUserState.parseUserState(state, userId) }
-    }
-
-    override fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) {
-        with(persistence) { this@serializeUserState.serializeUserState(state, userId) }
-    }
-
-    fun GetStateScope.getPermissionTrees(): IndexedMap<String, Permission> =
-        state.systemState.permissionTrees
-
-    fun GetStateScope.findPermissionTree(permissionName: String): Permission? =
-        state.systemState.permissionTrees.firstNotNullOfOrNullIndexed {
-                _, permissionTreeName, permissionTree ->
-            if (permissionName.startsWith(permissionTreeName) &&
-                permissionName.length > permissionTreeName.length &&
-                permissionName[permissionTreeName.length] == '.') {
-                permissionTree
-            } else {
-                null
-            }
-        }
-
-    fun MutateStateScope.addPermissionTree(permission: Permission) {
-        newState.systemState.permissionTrees[permission.name] = permission
-        newState.systemState.requestWrite()
-    }
-
-    /**
-     * returns all permission group definitions available in the system
-     */
-    fun GetStateScope.getPermissionGroups(): IndexedMap<String, PermissionGroupInfo> =
-        state.systemState.permissionGroups
-
-    /**
-     * returns all permission definitions available in the system
-     */
-    fun GetStateScope.getPermissions(): IndexedMap<String, Permission> =
-        state.systemState.permissions
-
-    fun MutateStateScope.addPermission(permission: Permission, sync: Boolean = false) {
-        newState.systemState.permissions[permission.name] = permission
-        newState.systemState.requestWrite(sync)
-    }
-
-    fun MutateStateScope.removePermission(permission: Permission) {
-        newState.systemState.permissions -= permission.name
-        newState.systemState.requestWrite()
-    }
-
-    fun GetStateScope.getUidPermissionFlags(appId: Int, userId: Int): IndexedMap<String, Int>? =
-        state.userStates[userId]?.uidPermissionFlags?.get(appId)
-
-    fun GetStateScope.getPermissionFlags(
-        appId: Int,
-        userId: Int,
-        permissionName: String
-    ): Int = getPermissionFlags(state, appId, userId, permissionName)
-
-    private fun MutateStateScope.getOldStatePermissionFlags(
-        appId: Int,
-        userId: Int,
-        permissionName: String
-    ): Int = getPermissionFlags(oldState, appId, userId, permissionName)
-
-    private fun getPermissionFlags(
-        state: AccessState,
-        appId: Int,
-        userId: Int,
-        permissionName: String
-    ): Int =
-        state.userStates[userId]?.uidPermissionFlags?.get(appId).getWithDefault(permissionName, 0)
-
-    fun MutateStateScope.setPermissionFlags(
-        appId: Int,
-        userId: Int,
-        permissionName: String,
-        flags: Int
-    ): Boolean =
-        updatePermissionFlags(appId, userId, permissionName, PermissionFlags.MASK_ALL, flags)
-
-    fun MutateStateScope.updatePermissionFlags(
-        appId: Int,
-        userId: Int,
-        permissionName: String,
-        flagMask: Int,
-        flagValues: Int
-    ): Boolean {
-        val userState = newState.userStates[userId]
-        val uidPermissionFlags = userState.uidPermissionFlags
-        var permissionFlags = uidPermissionFlags[appId]
-        val oldFlags = permissionFlags.getWithDefault(permissionName, 0)
-        val newFlags = (oldFlags andInv flagMask) or (flagValues and flagMask)
-        if (oldFlags == newFlags) {
-            return false
-        }
-        if (permissionFlags == null) {
-            permissionFlags = IndexedMap()
-            uidPermissionFlags[appId] = permissionFlags
-        }
-        permissionFlags.putWithDefault(permissionName, newFlags, 0)
-        if (permissionFlags.isEmpty()) {
-            uidPermissionFlags -= appId
-        }
-        userState.requestWrite()
-        onPermissionFlagsChangedListeners.forEachIndexed { _, it ->
-            it.onPermissionFlagsChanged(appId, userId, permissionName, oldFlags, newFlags)
-        }
-        return true
-    }
-
-    fun addOnPermissionFlagsChangedListener(listener: OnPermissionFlagsChangedListener) {
-        synchronized(onPermissionFlagsChangedListenersLock) {
-            onPermissionFlagsChangedListeners = onPermissionFlagsChangedListeners + listener
-        }
-    }
-
-    fun removeOnPermissionFlagsChangedListener(listener: OnPermissionFlagsChangedListener) {
-        synchronized(onPermissionFlagsChangedListenersLock) {
-            onPermissionFlagsChangedListeners = onPermissionFlagsChangedListeners - listener
-        }
-    }
-
-    companion object {
-        private val LOG_TAG = UidPermissionPolicy::class.java.simpleName
-
-        private const val PLATFORM_PACKAGE_NAME = "android"
-
-        // A set of permissions that we don't want to revoke when they are no longer implicit.
-        private val RETAIN_IMPLICIT_FLAGS_PERMISSIONS = indexedSetOf(
-            Manifest.permission.ACCESS_MEDIA_LOCATION,
-            Manifest.permission.ACTIVITY_RECOGNITION,
-            Manifest.permission.READ_MEDIA_AUDIO,
-            Manifest.permission.READ_MEDIA_IMAGES,
-            Manifest.permission.READ_MEDIA_VIDEO,
-        )
-
-        private val NEARBY_DEVICES_PERMISSIONS = indexedSetOf(
-            Manifest.permission.BLUETOOTH_ADVERTISE,
-            Manifest.permission.BLUETOOTH_CONNECT,
-            Manifest.permission.BLUETOOTH_SCAN,
-            Manifest.permission.NEARBY_WIFI_DEVICES
-        )
-
-        private val NOTIFICATIONS_PERMISSIONS = indexedSetOf(
-            Manifest.permission.POST_NOTIFICATIONS
-        )
-
-        private val STORAGE_AND_MEDIA_PERMISSIONS = indexedSetOf(
-            Manifest.permission.READ_EXTERNAL_STORAGE,
-            Manifest.permission.WRITE_EXTERNAL_STORAGE,
-            Manifest.permission.READ_MEDIA_AUDIO,
-            Manifest.permission.READ_MEDIA_VIDEO,
-            Manifest.permission.READ_MEDIA_IMAGES,
-            Manifest.permission.ACCESS_MEDIA_LOCATION,
-            Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED
-        )
-
-        /**
-         * Mask for all permission flags that can be set by the user
-         */
-        private const val USER_SETTABLE_MASK =
-            PermissionFlags.USER_SET or
-                PermissionFlags.USER_FIXED or
-                PermissionFlags.APP_OP_REVOKED or
-                PermissionFlags.ONE_TIME or
-                PermissionFlags.HIBERNATION or
-                PermissionFlags.USER_SELECTED
-
-        /**
-         * Mask for all permission flags that imply we shouldn't automatically modify the
-         * permission grant state.
-         */
-        private const val SYSTEM_OR_POLICY_FIXED_MASK =
-            PermissionFlags.SYSTEM_FIXED or PermissionFlags.POLICY_FIXED
-    }
-
-    /**
-     * Listener for permission flags changes.
-     */
-    abstract class OnPermissionFlagsChangedListener {
-        /**
-         * Called when a permission flags change has been made to the upcoming new state.
-         *
-         * Implementations should keep this method fast to avoid stalling the locked state mutation,
-         * and only call external code after [onStateMutated] when the new state has actually become
-         * the current state visible to external code.
-         */
-        abstract fun onPermissionFlagsChanged(
-            appId: Int,
-            userId: Int,
-            permissionName: String,
-            oldFlags: Int,
-            newFlags: Int
-        )
-
-        /**
-         * Called when the upcoming new state has become the current state.
-         *
-         * Implementations should keep this method fast to avoid stalling the locked state mutation.
-         */
-        abstract fun onStateMutated()
-    }
-}
diff --git a/services/permission/java/com/android/server/permission/access/util/AtomicFileExtensions.kt b/services/permission/java/com/android/server/permission/access/util/AtomicFileExtensions.kt
index 984dfb5..bd82935 100644
--- a/services/permission/java/com/android/server/permission/access/util/AtomicFileExtensions.kt
+++ b/services/permission/java/com/android/server/permission/access/util/AtomicFileExtensions.kt
@@ -16,17 +16,54 @@
 
 package com.android.server.permission.access.util
 
+import android.os.FileUtils
 import android.util.AtomicFile
+import android.util.Slog
+import java.io.File
 import java.io.FileInputStream
+import java.io.FileNotFoundException
 import java.io.FileOutputStream
 import java.io.IOException
 
 /**
- * Read from an [AtomicFile] and close everything safely when done.
+ * Read from an [AtomicFile], fallback to reserve file to read the data.
+ */
+@Throws(Exception::class)
+inline fun AtomicFile.readWithReserveCopy(block: (FileInputStream) -> Unit) {
+    try {
+        openRead().use(block)
+    } catch (e: FileNotFoundException) {
+        throw e
+    } catch (e: Exception) {
+        Slog.wtf("AccessPersistence", "Failed to read $this", e)
+        val reserveFile = File(baseFile.parentFile, baseFile.name + ".reservecopy")
+        try {
+            AtomicFile(reserveFile).openRead().use(block)
+        } catch (e2: Exception) {
+            Slog.e("AccessPersistence", "Failed to read $reserveFile", e2)
+            throw e
+        }
+    }
+}
+
+/**
+ * Write to actual file and reserve file.
  */
 @Throws(IOException::class)
-inline fun AtomicFile.read(block: (FileInputStream) -> Unit) {
-    openRead().use(block)
+inline fun AtomicFile.writeWithReserveCopy(block: (FileOutputStream) -> Unit) {
+    val reserveFile = File(baseFile.parentFile, baseFile.name + ".reservecopy")
+    reserveFile.delete()
+    writeInlined(block)
+    try {
+        FileInputStream(baseFile).use { inputStream ->
+            FileOutputStream(reserveFile).use { outputStream ->
+                FileUtils.copy(inputStream, outputStream)
+                outputStream.fd.sync()
+            }
+        }
+    } catch (e: Exception) {
+        Slog.e("AccessPersistence", "Failed to write $reserveFile", e)
+    }
 }
 
 /**
diff --git a/services/permission/java/com/android/server/permission/access/util/IntExtensions.kt b/services/permission/java/com/android/server/permission/access/util/IntExtensions.kt
index e71d7a1..bc3328c 100644
--- a/services/permission/java/com/android/server/permission/access/util/IntExtensions.kt
+++ b/services/permission/java/com/android/server/permission/access/util/IntExtensions.kt
@@ -21,3 +21,19 @@
 fun Int.hasBits(bits: Int): Boolean = this and bits == bits
 
 infix fun Int.andInv(other: Int): Int = this and other.inv()
+
+inline fun Int.flagsToString(flagToString: (Int) -> String): String {
+    var flags = this
+    return buildString {
+        append("[")
+        while (flags != 0) {
+            val flag = 1 shl flags.countTrailingZeroBits()
+            flags = flags andInv flag
+            append(flagToString(flag))
+            if (flags != 0) {
+                append('|')
+            }
+        }
+        append("]")
+    }
+}
diff --git a/services/permission/java/com/android/server/permission/access/util/PackageVersionMigration.kt b/services/permission/java/com/android/server/permission/access/util/PackageVersionMigration.kt
new file mode 100644
index 0000000..a61489c
--- /dev/null
+++ b/services/permission/java/com/android/server/permission/access/util/PackageVersionMigration.kt
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.permission.access.util
+
+import com.android.server.LocalServices
+import com.android.server.appop.AppOpMigrationHelper
+import com.android.server.pm.permission.PermissionMigrationHelper
+
+object PackageVersionMigration {
+    /**
+     * Maps existing permission and app-op version to a unified version during OTA upgrade. The
+     * new unified version is used in determining the upgrade steps for a package (for both
+     * permission and app-ops).
+     *
+     * @return unified permission/app-op version
+     * @throws IllegalStateException if the method is called when there is nothing to migrate i.e.
+     * permission and app-op file does not exist.
+     */
+    internal fun getVersion(userId: Int): Int {
+        val permissionMigrationHelper =
+            LocalServices.getService(PermissionMigrationHelper::class.java)
+        val permissionVersion = permissionMigrationHelper.getLegacyPermissionStateVersion(userId)
+
+        val appOpMigrationHelper = LocalServices.getService(AppOpMigrationHelper::class.java)
+        val appOpVersion = appOpMigrationHelper.legacyAppOpVersion
+
+        return when {
+            // Both files don't exist.
+            permissionVersion == -1 && appOpVersion == -1 ->
+                error("getVersion() called when there are no legacy files")
+            // merging combination of versions based on released android version
+            // permissions version 1-8 were released in Q, 9 in S, 10 in T and 11 in U
+            // app ops version 1 was released in P, 3 in U.
+            permissionVersion >= 11 && appOpVersion >= 3 -> 15
+            permissionVersion >= 10 && appOpVersion >= 3 -> 14
+            permissionVersion >= 10 && appOpVersion >= 1 -> 13
+            permissionVersion >= 9 && appOpVersion >= 1 -> 12
+            permissionVersion >= 8 && appOpVersion >= 1 -> 11
+            permissionVersion >= 7 && appOpVersion >= 1 -> 10
+            permissionVersion >= 6 && appOpVersion >= 1 -> 9
+            permissionVersion >= 5 && appOpVersion >= 1 -> 8
+            permissionVersion >= 4 && appOpVersion >= 1 -> 7
+            permissionVersion >= 3 && appOpVersion >= 1 -> 6
+            permissionVersion >= 2 && appOpVersion >= 1 -> 5
+            permissionVersion >= 1 && appOpVersion >= 1 -> 4
+            // Permission file exist w/o version, app op file has version as 1.
+            permissionVersion >= 0 && appOpVersion >= 1 -> 3
+            // Both file exist but w/o any version.
+            permissionVersion >= 0 && appOpVersion >= 0 -> 2
+            // Permission file doesn't exit, app op file exist w/o version.
+            permissionVersion >= -1 && appOpVersion >= 0 -> 1
+            // Re-run all upgrades to be safe.
+            else -> 0
+        }
+    }
+}
diff --git a/services/print/lint-baseline.xml b/services/print/lint-baseline.xml
new file mode 100644
index 0000000..1bf031a
--- /dev/null
+++ b/services/print/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.1.0-dev" type="baseline" client="" dependencies="true" name="" variant="all" version="8.1.0-dev">
+
+    <issue
+        id="SimpleManualPermissionEnforcement"
+        message="IPrintManager permission check should be converted to @EnforcePermission annotation"
+        errorLine1="            mContext.enforceCallingOrSelfPermission("
+        errorLine2="            ^">
+        <location
+            file="frameworks/base/services/print/java/com/android/server/print/PrintManagerService.java"
+            line="401"
+            column="13"/>
+    </issue>
+
+</issues>
diff --git a/services/robotests/backup/Android.bp b/services/robotests/backup/Android.bp
index 506e156..e04dd68 100644
--- a/services/robotests/backup/Android.bp
+++ b/services/robotests/backup/Android.bp
@@ -36,6 +36,7 @@
         "services.backup",
         "services.core",
         "services.net",
+        "service-permission.stubs.system_server",
     ],
 
     libs: ["android.net.ipsec.ike.stubs.system"],
diff --git a/services/robotests/backup/src/com/android/server/backup/FullBackupJobTest.java b/services/robotests/backup/src/com/android/server/backup/FullBackupJobTest.java
index c8797e2..cd53cf4 100644
--- a/services/robotests/backup/src/com/android/server/backup/FullBackupJobTest.java
+++ b/services/robotests/backup/src/com/android/server/backup/FullBackupJobTest.java
@@ -16,13 +16,18 @@
 
 package com.android.server.backup;
 
+import static com.android.server.backup.FullBackupJob.getJobIdForUserId;
+
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.Mockito.when;
+import static org.robolectric.Shadows.shadowOf;
 
 import android.annotation.UserIdInt;
+import android.app.job.JobInfo;
 import android.app.job.JobScheduler;
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.os.Handler;
 import android.os.UserHandle;
 import android.platform.test.annotations.Presubmit;
@@ -87,6 +92,25 @@
     }
 
     @Test
+    public void testSchedule_notWatch_requiresDeviceIdle() {
+        shadowOf(mContext.getPackageManager())
+                .setSystemFeature(PackageManager.FEATURE_WATCH, false);
+        FullBackupJob.schedule(mUserOneId, mContext, 0, mUserBackupManagerService);
+
+        JobInfo pendingJob = mShadowJobScheduler.getPendingJob(getJobIdForUserId(mUserOneId));
+        assertThat(pendingJob.isRequireDeviceIdle()).isTrue();
+    }
+
+    @Test
+    public void testSchedule_isWatch_doesNotRequireDeviceIdle() {
+        shadowOf(mContext.getPackageManager()).setSystemFeature(PackageManager.FEATURE_WATCH, true);
+        FullBackupJob.schedule(mUserOneId, mContext, 0, mUserBackupManagerService);
+
+        JobInfo pendingJob = mShadowJobScheduler.getPendingJob(getJobIdForUserId(mUserOneId));
+        assertThat(pendingJob.isRequireDeviceIdle()).isFalse();
+    }
+
+    @Test
     public void testCancel_afterCancelling_jobDoesntExist() {
         FullBackupJob.schedule(mUserOneId, mContext, 0, mUserBackupManagerService);
         FullBackupJob.schedule(mUserTwoId, mContext, 0, mUserBackupManagerService);
@@ -130,9 +154,4 @@
         assertThat(mShadowJobScheduler.getPendingJob(getJobIdForUserId(mUserOneId))).isNull();
         assertThat(mShadowJobScheduler.getPendingJob(getJobIdForUserId(mUserTwoId))).isNotNull();
     }
-
-    private static int getJobIdForUserId(int userId) {
-        return JobIdManager.getJobIdForUserId(FullBackupJob.MIN_JOB_ID, FullBackupJob.MAX_JOB_ID,
-                userId);
-    }
 }
diff --git a/services/tests/InputMethodSystemServerTests/Android.bp b/services/tests/InputMethodSystemServerTests/Android.bp
index 07ddda3..36446f6 100644
--- a/services/tests/InputMethodSystemServerTests/Android.bp
+++ b/services/tests/InputMethodSystemServerTests/Android.bp
@@ -41,6 +41,7 @@
         "mockito-target-extended-minus-junit4",
         "platform-test-annotations",
         "services.core",
+        "service-permission.stubs.system_server",
         "servicestests-core-utils",
         "servicestests-utils-mockito-extended",
         "truth-prebuilt",
@@ -88,6 +89,7 @@
         "mockito-target-extended-minus-junit4",
         "platform-test-annotations",
         "services.core",
+        "service-permission.stubs.system_server",
         "servicestests-core-utils",
         "servicestests-utils-mockito-extended",
         "truth-prebuilt",
diff --git a/services/tests/InputMethodSystemServerTests/OWNERS b/services/tests/InputMethodSystemServerTests/OWNERS
index 1f2c036..eb4fe3c 100644
--- a/services/tests/InputMethodSystemServerTests/OWNERS
+++ b/services/tests/InputMethodSystemServerTests/OWNERS
@@ -1 +1,2 @@
+# Bug component: 34867
 include /services/core/java/com/android/server/inputmethod/OWNERS
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
index 1a8e00c..a1be00a 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
@@ -19,6 +19,7 @@
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.spy;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
 
 import static org.mockito.ArgumentMatchers.any;
@@ -35,7 +36,6 @@
 import android.content.Context;
 import android.content.pm.PackageManagerInternal;
 import android.content.res.Configuration;
-import android.hardware.display.DisplayManagerInternal;
 import android.hardware.input.IInputManager;
 import android.hardware.input.InputManagerGlobal;
 import android.os.Binder;
@@ -94,14 +94,12 @@
                     null,
                     "0",
                     0,
-                    null,
                     false);
 
     @Mock protected WindowManagerInternal mMockWindowManagerInternal;
     @Mock protected ActivityManagerInternal mMockActivityManagerInternal;
     @Mock protected PackageManagerInternal mMockPackageManagerInternal;
     @Mock protected InputManagerInternal mMockInputManagerInternal;
-    @Mock protected DisplayManagerInternal mMockDisplayManagerInternal;
     @Mock protected UserManagerInternal mMockUserManagerInternal;
     @Mock protected InputMethodBindingController mMockInputMethodBindingController;
     @Mock protected IInputMethodClient mMockInputMethodClient;
@@ -125,6 +123,7 @@
     protected InputMethodManagerService mInputMethodManagerService;
     protected ServiceThread mServiceThread;
     protected boolean mIsLargeScreen;
+    private InputManagerGlobal.TestSession mInputManagerGlobalSession;
 
     @BeforeClass
     public static void setupClass() {
@@ -145,8 +144,7 @@
                         .mockStatic(SystemServerInitThreadPool.class)
                         .startMocking();
 
-        mContext = InstrumentationRegistry.getInstrumentation().getContext();
-        spyOn(mContext);
+        mContext = spy(InstrumentationRegistry.getInstrumentation().getContext());
 
         mTargetSdkVersion = mContext.getApplicationInfo().targetSdkVersion;
         mIsLargeScreen = mContext.getResources().getConfiguration()
@@ -164,8 +162,6 @@
                 .when(() -> LocalServices.getService(PackageManagerInternal.class));
         doReturn(mMockInputManagerInternal)
                 .when(() -> LocalServices.getService(InputManagerInternal.class));
-        doReturn(mMockDisplayManagerInternal)
-                .when(() -> LocalServices.getService(DisplayManagerInternal.class));
         doReturn(mMockUserManagerInternal)
                 .when(() -> LocalServices.getService(UserManagerInternal.class));
         doReturn(mMockImeTargetVisibilityPolicy)
@@ -186,7 +182,7 @@
 
         // Injecting and mocked InputMethodBindingController and InputMethod.
         mMockInputMethodInvoker = IInputMethodInvoker.create(mMockInputMethod);
-        InputManagerGlobal.resetInstance(mMockIInputManager);
+        mInputManagerGlobalSession = InputManagerGlobal.createTestSession(mMockIInputManager);
         synchronized (ImfLock.class) {
             when(mMockInputMethodBindingController.getCurMethod())
                     .thenReturn(mMockInputMethodInvoker);
@@ -262,6 +258,10 @@
         if (mMockingSession != null) {
             mMockingSession.finishMocking();
         }
+
+        if (mInputManagerGlobalSession != null) {
+            mInputManagerGlobalSession.close();
+        }
         LocalServices.removeServiceForTest(InputMethodManagerInternal.class);
     }
 
diff --git a/services/tests/PackageManagerComponentOverrideTests/Android.bp b/services/tests/PackageManagerComponentOverrideTests/Android.bp
index 19fdf60..bc36970 100644
--- a/services/tests/PackageManagerComponentOverrideTests/Android.bp
+++ b/services/tests/PackageManagerComponentOverrideTests/Android.bp
@@ -29,12 +29,13 @@
 android_test {
     name: "PackageManagerComponentOverrideTests",
     srcs: [
-        "src/**/*.kt"
+        "src/**/*.kt",
     ],
     static_libs: [
         "androidx.test.runner",
         "mockito-target-extended-minus-junit4",
         "services.core",
+        "service-permission.stubs.system_server",
         "servicestests-utils-mockito-extended",
         "testng", // TODO: remove once Android migrates to JUnit 4.12, which provides assertThrows
         "truth-prebuilt",
diff --git a/services/tests/PackageManagerServiceTests/server/Android.bp b/services/tests/PackageManagerServiceTests/server/Android.bp
index 3176f06..a1d846e 100644
--- a/services/tests/PackageManagerServiceTests/server/Android.bp
+++ b/services/tests/PackageManagerServiceTests/server/Android.bp
@@ -43,7 +43,6 @@
         "ShortcutManagerTestUtils",
         "truth-prebuilt",
         "testables",
-        "ub-uiautomator",
         "platformprotosnano",
         "framework-protos",
         "hamcrest-library",
diff --git a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/AppsFilterImplTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/AppsFilterImplTest.java
index 7909ba4..d5cd6ef9 100644
--- a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/AppsFilterImplTest.java
+++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/AppsFilterImplTest.java
@@ -224,7 +224,6 @@
 
         MockitoAnnotations.initMocks(this);
         when(mSnapshot.getPackageStates()).thenAnswer(x -> mExisting);
-        when(mSnapshot.getAllSharedUsers()).thenReturn(mSharedUserSettings);
         when(mSnapshot.getUserInfos()).thenReturn(USER_INFO_LIST);
         when(mSnapshot.getSharedUser(anyInt())).thenAnswer(invocation -> {
             final int sharedUserAppId = invocation.getArgument(0);
diff --git a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerSettingsTests.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerSettingsTests.java
index 16fb012..dc2fbfc 100644
--- a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerSettingsTests.java
+++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerSettingsTests.java
@@ -68,6 +68,7 @@
 import com.android.server.pm.parsing.pkg.ParsedPackage;
 import com.android.server.pm.permission.LegacyPermissionDataProvider;
 import com.android.server.pm.pkg.AndroidPackage;
+import com.android.server.pm.pkg.ArchiveState;
 import com.android.server.pm.pkg.PackageUserState;
 import com.android.server.pm.pkg.PackageUserStateInternal;
 import com.android.server.pm.pkg.SuspendParams;
@@ -864,6 +865,34 @@
     }
 
     @Test
+    public void testWriteReadArchiveState() {
+        Settings settings = makeSettings();
+        PackageSetting packageSetting = createPackageSetting(PACKAGE_NAME_1);
+        packageSetting.setAppId(Process.FIRST_APPLICATION_UID);
+        packageSetting.setPkg(PackageImpl.forTesting(PACKAGE_NAME_1).hideAsParsed()
+                .setUid(packageSetting.getAppId())
+                .hideAsFinal());
+
+        ArchiveState archiveState = new ArchiveState(
+                List.of(new ArchiveState.ArchiveActivityInfo("title1", Path.of("/path1"),
+                                Path.of("/monochromePath1")),
+                        new ArchiveState.ArchiveActivityInfo("title2", Path.of("/path2"),
+                                Path.of("/monochromePath2"))),
+                "installerTitle");
+        packageSetting.modifyUserState(UserHandle.SYSTEM.getIdentifier()).setArchiveState(
+                archiveState);
+        settings.mPackages.put(PACKAGE_NAME_1, packageSetting);
+
+        settings.writeLPr(computer, /*sync=*/true);
+        settings.mPackages.clear();
+
+        assertThat(settings.readLPw(computer, createFakeUsers()), is(true));
+
+        Truth.assertThat(settings.getPackageLPr(PACKAGE_NAME_1).getStateForUser(
+                UserHandle.SYSTEM).getArchiveState()).isEqualTo(archiveState);
+    }
+
+    @Test
     public void testPackageRestrictionsDistractionFlagsDefault() {
         final PackageSetting defaultSetting = createPackageSetting(PACKAGE_NAME_1);
         assertThat(defaultSetting.getDistractionFlags(0), is(PackageManager.RESTRICTION_NONE));
@@ -971,7 +1000,7 @@
         origPkgSetting01.setUserState(0, 100, 1, true, false, false, false, 0, null, false,
                 false, "lastDisabledCaller", new ArraySet<>(new String[]{"enabledComponent1"}),
                 new ArraySet<>(new String[]{"disabledComponent1"}), 0, 0, "harmfulAppWarning",
-                "splashScreenTheme", 1000L, PackageManager.USER_MIN_ASPECT_RATIO_UNSET);
+                "splashScreenTheme", 1000L, PackageManager.USER_MIN_ASPECT_RATIO_UNSET, null);
         final PersistableBundle appExtras1 = createPersistableBundle(
                 PACKAGE_NAME_1, 1L, 0.01, true, "appString1");
         final PersistableBundle launcherExtras1 = createPersistableBundle(
diff --git a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerTests.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerTests.java
index dc92376..74dc853 100644
--- a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerTests.java
+++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerTests.java
@@ -966,9 +966,11 @@
     }
 
     private static void assertUninstalled(ApplicationInfo info) throws Exception {
-        File nativeLibraryFile = new File(info.nativeLibraryDir);
-        assertFalse("Native library directory " + info.nativeLibraryDir
-                + " should be erased", nativeLibraryFile.exists());
+        if (info.nativeLibraryDir != null) {
+            File nativeLibraryFile = new File(info.nativeLibraryDir);
+            assertFalse("Native library directory " + info.nativeLibraryDir
+                    + " should be erased", nativeLibraryFile.exists());
+        }
     }
 
     public void deleteFromRawResource(int iFlags, int dFlags) throws Exception {
@@ -2883,14 +2885,15 @@
                     break;
                 }
             }
-            assertNotNull("activities should not be null", packageInfo.activities);
-            assertNotNull("configPreferences should not be null", packageInfo.configPreferences);
-            assertNotNull("instrumentation should not be null", packageInfo.instrumentation);
-            assertNotNull("permissions should not be null", packageInfo.permissions);
-            assertNotNull("providers should not be null", packageInfo.providers);
-            assertNotNull("receivers should not be null", packageInfo.receivers);
-            assertNotNull("services should not be null", packageInfo.services);
-            assertNotNull("signatures should not be null", packageInfo.signatures);
+            assertNotNull("applicationInfo should not be null", packageInfo.applicationInfo);
+            assertNull("activities should be null", packageInfo.activities);
+            assertNull("configPreferences should be null", packageInfo.configPreferences);
+            assertNull("instrumentation should be null", packageInfo.instrumentation);
+            assertNull("permissions should be null", packageInfo.permissions);
+            assertNull("providers should be null", packageInfo.providers);
+            assertNull("receivers should be null", packageInfo.receivers);
+            assertNull("services should be null", packageInfo.services);
+            assertNotNull("signingInfo should not be null", packageInfo.signingInfo);
         } finally {
             cleanUpInstall(ip);
         }
diff --git a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageParserTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageParserTest.java
index c7fb32c..0eac4e6 100644
--- a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageParserTest.java
+++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageParserTest.java
@@ -231,8 +231,8 @@
         assertSame(deserialized.getPackageName(), deserialized2.getPackageName());
         assertSame(deserialized.getPermission(),
                 deserialized2.getPermission());
-        assertSame(deserialized.getRequestedPermissions().get(0),
-                deserialized2.getRequestedPermissions().get(0));
+        assertSame(deserialized.getRequestedPermissions().iterator().next(),
+                deserialized2.getRequestedPermissions().iterator().next());
 
         List<String> protectedBroadcastsOne = new ArrayList<>(1);
         protectedBroadcastsOne.addAll(deserialized.getProtectedBroadcasts());
diff --git a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageUserStateTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageUserStateTest.java
index 9ad503c..58ae740 100644
--- a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageUserStateTest.java
+++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageUserStateTest.java
@@ -35,6 +35,7 @@
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.server.pm.pkg.ArchiveState;
 import com.android.server.pm.pkg.PackageStateUnserialized;
 import com.android.server.pm.pkg.PackageUserStateImpl;
 import com.android.server.pm.pkg.SuspendParams;
@@ -44,6 +45,9 @@
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
 
+import java.nio.file.Path;
+import java.util.List;
+
 @Presubmit
 @RunWith(AndroidJUnit4.class)
 @SmallTest
@@ -394,4 +398,14 @@
         assertFalse(testState.setSharedLibraryOverlayPaths(LIB_ONE, null));
     }
 
+    @Test
+    public void archiveState() {
+        PackageUserStateImpl packageUserState = new PackageUserStateImpl();
+        ArchiveState.ArchiveActivityInfo archiveActivityInfo = new ArchiveState.ArchiveActivityInfo(
+                "appTitle", Path.of("/path1"), Path.of("/path2"));
+        ArchiveState archiveState = new ArchiveState(List.of(archiveActivityInfo),
+                "installerTitle");
+        packageUserState.setArchiveState(archiveState);
+        assertEquals(archiveState, packageUserState.getArchiveState());
+    }
 }
diff --git a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/ScanTests.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/ScanTests.java
index b5bd869..e2939c1 100644
--- a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/ScanTests.java
+++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/ScanTests.java
@@ -21,6 +21,7 @@
 import static android.content.pm.SharedLibraryInfo.TYPE_STATIC;
 import static android.content.pm.SharedLibraryInfo.VERSION_UNDEFINED;
 
+import static com.android.server.pm.PackageManagerService.SCAN_AS_APEX;
 import static com.android.server.pm.PackageManagerService.SCAN_AS_FULL_APP;
 import static com.android.server.pm.PackageManagerService.SCAN_AS_INSTANT_APP;
 import static com.android.server.pm.PackageManagerService.SCAN_FIRST_BOOT_OR_UPGRADE;
@@ -365,6 +366,46 @@
     }
 
     @Test
+    public void scanFirstBoot_apexDontDeriveAbis() throws Exception {
+        final PackageSetting pkgSetting =
+                createBasicPackageSettingBuilder(DUMMY_PACKAGE_NAME)
+                        .setPkgFlags(ApplicationInfo.FLAG_SYSTEM).build();
+
+        final String codePath = "/data/apex/" + DUMMY_PACKAGE_NAME + ".apex";
+
+        // Create the ParsedPackage for the apex
+        final ParsedPackage basicPackage =
+                ((ParsedPackage) new PackageImpl(DUMMY_PACKAGE_NAME, codePath, codePath,
+                        mock(TypedArray.class), false)
+                        .setVolumeUuid(UUID_ONE.toString())
+                        .hideAsParsed())
+                        .setVersionCodeMajor(1)
+                        .setVersionCode(2345)
+                        .setSystem(true);
+
+        when(mMockInjector.getAbiHelper()).thenReturn(new PackageAbiHelperImpl());
+
+        // prepare the scan request with the scanflag (SCAN_FIRST_BOOT_OR_UPGRADE | SCAN_AS_APEX)
+        final ScanResult scanResult = executeScan(new ScanRequestBuilder(basicPackage)
+                .setPkgSetting(pkgSetting)
+                .addScanFlag(SCAN_FIRST_BOOT_OR_UPGRADE | SCAN_AS_APEX)
+                .build());
+
+        final PackageSetting resultSetting = scanResult.mPkgSetting;
+        final ApplicationInfo applicationInfo = PackageInfoUtils.generateApplicationInfo(
+                resultSetting.getPkg(), 0, pkgSetting.getUserStateOrDefault(0), 0, resultSetting);
+        assertThat(applicationInfo.primaryCpuAbi, nullValue());
+        assertThat(applicationInfo.primaryCpuAbi, nullValue());
+        assertThat(applicationInfo.secondaryCpuAbi, nullValue());
+
+        assertThat(applicationInfo.nativeLibraryRootDir, nullValue());
+        assertThat(pkgSetting.getLegacyNativeLibraryPath(), nullValue());
+        assertThat(applicationInfo.nativeLibraryRootRequiresIsa, is(false));
+        assertThat(applicationInfo.nativeLibraryDir, nullValue());
+        assertThat(applicationInfo.secondaryNativeLibraryDir, nullValue());
+    }
+
+    @Test
     public void scanFirstBoot_derivesAbis() throws Exception {
         final PackageSetting pkgSetting =
                 createBasicPackageSettingBuilder(DUMMY_PACKAGE_NAME).build();
diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt
index 3200871..edab1d6 100644
--- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt
+++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt
@@ -623,7 +623,6 @@
         expect.that(after.longVersionCode).isEqualTo(38654705667)
         expect.that(after.requestedPermissions)
             .containsExactlyElementsIn(after.usesPermissions.map { it.name })
-            .inOrder()
 
         expect.that(after.mimeGroups).containsExactly(
             "TestActivityName/mimeGroup",
diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/pkg/PackageStateTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/pkg/PackageStateTest.kt
index 5a733c7..d217d63 100644
--- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/pkg/PackageStateTest.kt
+++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/pkg/PackageStateTest.kt
@@ -29,7 +29,6 @@
 import com.android.server.pm.parsing.pkg.PackageImpl
 import com.android.server.pm.pkg.AndroidPackage
 import com.android.server.pm.pkg.PackageState
-import com.android.server.pm.pkg.PackageStateImpl
 import com.android.server.pm.pkg.PackageUserState
 import com.android.server.pm.pkg.PackageUserStateImpl
 import com.android.server.pm.pkg.component.ParsedActivity
@@ -125,7 +124,7 @@
 
         fillMissingData(packageState, pkg as PackageImpl)
 
-        visitType(seenTypes, emptyList(), PackageStateImpl.copy(packageState),
+        visitType(seenTypes, emptyList(), PackageSetting(packageState, true),
             PackageState::class.starProjectedType)
         visitType(seenTypes, emptyList(), pkg, AndroidPackage::class.starProjectedType)
         visitType(seenTypes, emptyList(), packageState.getUserStateOrDefault(0),
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java
index da7a6a1..d9338a9 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java
@@ -22,8 +22,10 @@
 
 import static org.junit.Assert.assertArrayEquals;
 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.anyFloat;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.mock;
@@ -32,6 +34,7 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.hardware.display.DisplayManagerInternal;
 import android.os.Temperature;
 import android.util.SparseArray;
 import android.util.Spline;
@@ -74,8 +77,7 @@
     private static final int[] HIGH_AMBIENT_THRESHOLD_OF_PEAK_REFRESH_RATE = new int[]{-1, 30000};
     private static final float[] NITS = {2, 500, 800};
     private static final float[] BRIGHTNESS = {0, 0.62f, 1};
-    private static final Spline NITS_TO_BRIGHTNESS_SPLINE =
-            Spline.createSpline(NITS, BRIGHTNESS);
+    private static final Spline NITS_TO_BRIGHTNESS_SPLINE = Spline.createSpline(NITS, BRIGHTNESS);
 
     private DisplayDeviceConfig mDisplayDeviceConfig;
     private static final float ZERO_DELTA = 0.0f;
@@ -178,40 +180,174 @@
         assertEquals(82, mDisplayDeviceConfig.getDefaultRefreshRateInHbmHdr());
         assertEquals(83, mDisplayDeviceConfig.getDefaultRefreshRateInHbmSunlight());
 
-        assertEquals("sensor_12345",
-                mDisplayDeviceConfig.getScreenOffBrightnessSensor().type);
-        assertEquals("Sensor 12345",
-                mDisplayDeviceConfig.getScreenOffBrightnessSensor().name);
+        assertNotNull(mDisplayDeviceConfig.getHostUsiVersion());
+        assertEquals(mDisplayDeviceConfig.getHostUsiVersion().getMajorVersion(), 2);
+        assertEquals(mDisplayDeviceConfig.getHostUsiVersion().getMinorVersion(), 0);
+    }
 
-        assertArrayEquals(new int[]{-1, 10, 20, 30, 40},
-                mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux());
+    @Test
+    public void testConfigValuesFromConfigResource() {
+        setupDisplayDeviceConfigFromConfigResourceFile();
+        verifyConfigValuesFromConfigResource();
+    }
+
+    @Test
+    public void testThermalRefreshRateThrottlingFromDisplayConfig() throws IOException {
+        setupDisplayDeviceConfigFromDisplayConfigFile();
+
+        SparseArray<SurfaceControl.RefreshRateRange> defaultMap =
+                mDisplayDeviceConfig.getThermalRefreshRateThrottlingData(null);
+        assertNotNull(defaultMap);
+        assertEquals(2, defaultMap.size());
+        assertEquals(30, defaultMap.get(Temperature.THROTTLING_CRITICAL).min, SMALL_DELTA);
+        assertEquals(60, defaultMap.get(Temperature.THROTTLING_CRITICAL).max, SMALL_DELTA);
+        assertEquals(0, defaultMap.get(Temperature.THROTTLING_SHUTDOWN).min, SMALL_DELTA);
+        assertEquals(30, defaultMap.get(Temperature.THROTTLING_SHUTDOWN).max, SMALL_DELTA);
+
+        SparseArray<SurfaceControl.RefreshRateRange> testMap =
+                mDisplayDeviceConfig.getThermalRefreshRateThrottlingData("test");
+        assertNotNull(testMap);
+        assertEquals(1, testMap.size());
+        assertEquals(60, testMap.get(Temperature.THROTTLING_EMERGENCY).min, SMALL_DELTA);
+        assertEquals(90, testMap.get(Temperature.THROTTLING_EMERGENCY).max, SMALL_DELTA);
+    }
+
+    @Test
+    public void testValidLuxThrottling() throws Exception {
+        setupDisplayDeviceConfigFromDisplayConfigFile();
+
+        Map<DisplayDeviceConfig.BrightnessLimitMapType, Map<Float, Float>> luxThrottlingData =
+                mDisplayDeviceConfig.getLuxThrottlingData();
+        assertEquals(2, luxThrottlingData.size());
+
+        Map<Float, Float> adaptiveOnBrightnessPoints = luxThrottlingData.get(
+                DisplayDeviceConfig.BrightnessLimitMapType.ADAPTIVE);
+        assertEquals(2, adaptiveOnBrightnessPoints.size());
+        assertEquals(0.3f, adaptiveOnBrightnessPoints.get(1000f), SMALL_DELTA);
+        assertEquals(0.5f, adaptiveOnBrightnessPoints.get(5000f), SMALL_DELTA);
+
+        Map<Float, Float> adaptiveOffBrightnessPoints = luxThrottlingData.get(
+                DisplayDeviceConfig.BrightnessLimitMapType.DEFAULT);
+        assertEquals(2, adaptiveOffBrightnessPoints.size());
+        assertEquals(0.35f, adaptiveOffBrightnessPoints.get(1500f), SMALL_DELTA);
+        assertEquals(0.55f, adaptiveOffBrightnessPoints.get(5500f), SMALL_DELTA);
+    }
+
+    @Test
+    public void testInvalidLuxThrottling() throws Exception {
+        setupDisplayDeviceConfigFromDisplayConfigFile(
+                getContent(getInvalidLuxThrottling(), getValidProxSensor()));
+
+        Map<DisplayDeviceConfig.BrightnessLimitMapType, Map<Float, Float>> luxThrottlingData =
+                mDisplayDeviceConfig.getLuxThrottlingData();
+        assertEquals(1, luxThrottlingData.size());
+
+        Map<Float, Float> adaptiveOnBrightnessPoints = luxThrottlingData.get(
+                DisplayDeviceConfig.BrightnessLimitMapType.ADAPTIVE);
+        assertEquals(1, adaptiveOnBrightnessPoints.size());
+        assertEquals(0.3f, adaptiveOnBrightnessPoints.get(1000f), SMALL_DELTA);
+    }
+
+    @Test
+    public void testFallbackToConfigResource() throws IOException {
+        setupDisplayDeviceConfigFromConfigResourceFile();
+
+        // Empty display config file
+        setupDisplayDeviceConfigFromDisplayConfigFile(
+                "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
+                + "<displayConfiguration />\n");
+
+        // We should fall back to the config resource
+        verifyConfigValuesFromConfigResource();
+    }
+
+    @Test
+    public void testDensityMappingFromDisplayConfig() throws IOException {
+        setupDisplayDeviceConfigFromDisplayConfigFile();
+
+        assertEquals(120, mDisplayDeviceConfig.getDensityMapping()
+                .getDensityForResolution(720, 480));
+        assertEquals(213, mDisplayDeviceConfig.getDensityMapping()
+                .getDensityForResolution(1280, 720));
+        assertEquals(320, mDisplayDeviceConfig.getDensityMapping()
+                .getDensityForResolution(1920, 1080));
+        assertEquals(640, mDisplayDeviceConfig.getDensityMapping()
+                .getDensityForResolution(3840, 2160));
+    }
+
+    @Test
+    public void testHighBrightnessModeDataFromDisplayConfig() throws IOException {
+        setupDisplayDeviceConfigFromDisplayConfigFile();
+
+        DisplayDeviceConfig.HighBrightnessModeData hbmData =
+                mDisplayDeviceConfig.getHighBrightnessModeData();
+        assertNotNull(hbmData);
+        assertEquals(BRIGHTNESS[1], hbmData.transitionPoint, ZERO_DELTA);
+        assertEquals(10000, hbmData.minimumLux, ZERO_DELTA);
+        assertEquals(1800 * 1000, hbmData.timeWindowMillis);
+        assertEquals(300 * 1000, hbmData.timeMaxMillis);
+        assertEquals(60 * 1000, hbmData.timeMinMillis);
+        assertFalse(hbmData.allowInLowPowerMode);
+        assertEquals(0.6f, hbmData.minimumHdrPercentOfScreen, ZERO_DELTA);
+
+        List<DisplayManagerInternal.RefreshRateLimitation> refreshRateLimitations =
+                mDisplayDeviceConfig.getRefreshRateLimitations();
+        assertEquals(1, refreshRateLimitations.size());
+        assertEquals(DisplayManagerInternal.REFRESH_RATE_LIMIT_HIGH_BRIGHTNESS_MODE,
+                refreshRateLimitations.get(0).type);
+        assertEquals(120, refreshRateLimitations.get(0).range.min, ZERO_DELTA);
+        assertEquals(120, refreshRateLimitations.get(0).range.max, ZERO_DELTA);
+
+        // Max desired Hdr/SDR ratio upper-bounds the HDR brightness.
+        assertTrue(mDisplayDeviceConfig.hasSdrToHdrRatioSpline());
+        assertEquals(NITS_TO_BRIGHTNESS_SPLINE.interpolate(500 * 1.6f),
+                mDisplayDeviceConfig.getHdrBrightnessFromSdr(
+                        NITS_TO_BRIGHTNESS_SPLINE.interpolate(500), Float.POSITIVE_INFINITY),
+                ZERO_DELTA);
+        assertEquals(NITS_TO_BRIGHTNESS_SPLINE.interpolate(500),
+                mDisplayDeviceConfig.getHdrBrightnessFromSdr(
+                        NITS_TO_BRIGHTNESS_SPLINE.interpolate(500), 1.0f),
+                ZERO_DELTA);
+        assertEquals(NITS_TO_BRIGHTNESS_SPLINE.interpolate(500 * 1.25f),
+                mDisplayDeviceConfig.getHdrBrightnessFromSdr(
+                        NITS_TO_BRIGHTNESS_SPLINE.interpolate(500), 1.25f),
+                SMALL_DELTA);
+        assertEquals(NITS_TO_BRIGHTNESS_SPLINE.interpolate(2 * 4),
+                mDisplayDeviceConfig.getHdrBrightnessFromSdr(
+                        NITS_TO_BRIGHTNESS_SPLINE.interpolate(2), Float.POSITIVE_INFINITY),
+                SMALL_DELTA);
+    }
+
+    @Test
+    public void testThermalBrightnessThrottlingDataFromDisplayConfig() throws IOException {
+        setupDisplayDeviceConfigFromDisplayConfigFile();
 
         List<DisplayDeviceConfig.ThermalBrightnessThrottlingData.ThrottlingLevel>
                 defaultThrottlingLevels = new ArrayList<>();
         defaultThrottlingLevels.add(
                 new DisplayDeviceConfig.ThermalBrightnessThrottlingData.ThrottlingLevel(
-                DisplayDeviceConfig.convertThermalStatus(ThermalStatus.light), 0.4f
-        ));
+                        DisplayDeviceConfig.convertThermalStatus(ThermalStatus.light), 0.4f
+                ));
         defaultThrottlingLevels.add(
                 new DisplayDeviceConfig.ThermalBrightnessThrottlingData.ThrottlingLevel(
-                DisplayDeviceConfig.convertThermalStatus(ThermalStatus.moderate), 0.3f
-        ));
+                        DisplayDeviceConfig.convertThermalStatus(ThermalStatus.moderate), 0.3f
+                ));
         defaultThrottlingLevels.add(
                 new DisplayDeviceConfig.ThermalBrightnessThrottlingData.ThrottlingLevel(
-                DisplayDeviceConfig.convertThermalStatus(ThermalStatus.severe), 0.2f
-        ));
+                        DisplayDeviceConfig.convertThermalStatus(ThermalStatus.severe), 0.2f
+                ));
         defaultThrottlingLevels.add(
                 new DisplayDeviceConfig.ThermalBrightnessThrottlingData.ThrottlingLevel(
-                DisplayDeviceConfig.convertThermalStatus(ThermalStatus.critical), 0.1f
-        ));
+                        DisplayDeviceConfig.convertThermalStatus(ThermalStatus.critical), 0.1f
+                ));
         defaultThrottlingLevels.add(
                 new DisplayDeviceConfig.ThermalBrightnessThrottlingData.ThrottlingLevel(
-                DisplayDeviceConfig.convertThermalStatus(ThermalStatus.emergency), 0.05f
-        ));
+                        DisplayDeviceConfig.convertThermalStatus(ThermalStatus.emergency), 0.05f
+                ));
         defaultThrottlingLevels.add(
                 new DisplayDeviceConfig.ThermalBrightnessThrottlingData.ThrottlingLevel(
-                DisplayDeviceConfig.convertThermalStatus(ThermalStatus.shutdown), 0.025f
-        ));
+                        DisplayDeviceConfig.convertThermalStatus(ThermalStatus.shutdown), 0.025f
+                ));
 
         DisplayDeviceConfig.ThermalBrightnessThrottlingData defaultThrottlingData =
                 new DisplayDeviceConfig.ThermalBrightnessThrottlingData(defaultThrottlingLevels);
@@ -220,28 +356,28 @@
                 concurrentThrottlingLevels = new ArrayList<>();
         concurrentThrottlingLevels.add(
                 new DisplayDeviceConfig.ThermalBrightnessThrottlingData.ThrottlingLevel(
-                DisplayDeviceConfig.convertThermalStatus(ThermalStatus.light), 0.2f
-        ));
+                        DisplayDeviceConfig.convertThermalStatus(ThermalStatus.light), 0.2f
+                ));
         concurrentThrottlingLevels.add(
                 new DisplayDeviceConfig.ThermalBrightnessThrottlingData.ThrottlingLevel(
-                DisplayDeviceConfig.convertThermalStatus(ThermalStatus.moderate), 0.15f
-        ));
+                        DisplayDeviceConfig.convertThermalStatus(ThermalStatus.moderate), 0.15f
+                ));
         concurrentThrottlingLevels.add(
                 new DisplayDeviceConfig.ThermalBrightnessThrottlingData.ThrottlingLevel(
-                DisplayDeviceConfig.convertThermalStatus(ThermalStatus.severe), 0.1f
-        ));
+                        DisplayDeviceConfig.convertThermalStatus(ThermalStatus.severe), 0.1f
+                ));
         concurrentThrottlingLevels.add(
                 new DisplayDeviceConfig.ThermalBrightnessThrottlingData.ThrottlingLevel(
-                DisplayDeviceConfig.convertThermalStatus(ThermalStatus.critical), 0.05f
-        ));
+                        DisplayDeviceConfig.convertThermalStatus(ThermalStatus.critical), 0.05f
+                ));
         concurrentThrottlingLevels.add(
                 new DisplayDeviceConfig.ThermalBrightnessThrottlingData.ThrottlingLevel(
-                DisplayDeviceConfig.convertThermalStatus(ThermalStatus.emergency), 0.025f
-        ));
+                        DisplayDeviceConfig.convertThermalStatus(ThermalStatus.emergency), 0.025f
+                ));
         concurrentThrottlingLevels.add(
                 new DisplayDeviceConfig.ThermalBrightnessThrottlingData.ThrottlingLevel(
-                DisplayDeviceConfig.convertThermalStatus(ThermalStatus.shutdown), 0.0125f
-        ));
+                        DisplayDeviceConfig.convertThermalStatus(ThermalStatus.shutdown), 0.0125f
+                ));
         DisplayDeviceConfig.ThermalBrightnessThrottlingData concurrentThrottlingData =
                 new DisplayDeviceConfig.ThermalBrightnessThrottlingData(concurrentThrottlingLevels);
 
@@ -252,29 +388,87 @@
 
         assertEquals(throttlingDataMap,
                 mDisplayDeviceConfig.getThermalBrightnessThrottlingDataMapByThrottlingId());
-
-        assertNotNull(mDisplayDeviceConfig.getHostUsiVersion());
-        assertEquals(mDisplayDeviceConfig.getHostUsiVersion().getMajorVersion(), 2);
-        assertEquals(mDisplayDeviceConfig.getHostUsiVersion().getMinorVersion(), 0);
-
-        // Max desired Hdr/SDR ratio upper-bounds the HDR brightness.
-        assertEquals(1.0f,
-                mDisplayDeviceConfig.getHdrBrightnessFromSdr(0.62f, Float.POSITIVE_INFINITY),
-                ZERO_DELTA);
-        assertEquals(0.62f,
-                mDisplayDeviceConfig.getHdrBrightnessFromSdr(0.62f, 1.0f),
-                ZERO_DELTA);
-        assertEquals(0.77787f,
-                mDisplayDeviceConfig.getHdrBrightnessFromSdr(0.62f, 1.25f),
-                SMALL_DELTA);
-
-        // Todo: Add asserts for DensityMapping,
-        // HighBrightnessModeData AmbientLightSensor, RefreshRateLimitations and ProximitySensor.
     }
 
     @Test
-    public void testConfigValuesFromConfigResource() {
+    public void testAmbientLightSensorFromDisplayConfig() throws IOException {
+        setupDisplayDeviceConfigFromDisplayConfigFile();
+
+        assertEquals("test_light_sensor",
+                mDisplayDeviceConfig.getAmbientLightSensor().type);
+        assertEquals("Test Ambient Light Sensor",
+                mDisplayDeviceConfig.getAmbientLightSensor().name);
+        assertEquals(60, mDisplayDeviceConfig.getAmbientLightSensor().minRefreshRate, ZERO_DELTA);
+        assertEquals(120, mDisplayDeviceConfig.getAmbientLightSensor().maxRefreshRate, ZERO_DELTA);
+    }
+
+    @Test
+    public void testScreenOffBrightnessSensorFromDisplayConfig() throws IOException {
+        setupDisplayDeviceConfigFromDisplayConfigFile();
+
+        assertEquals("test_binned_brightness_sensor",
+                mDisplayDeviceConfig.getScreenOffBrightnessSensor().type);
+        assertEquals("Test Binned Brightness Sensor",
+                mDisplayDeviceConfig.getScreenOffBrightnessSensor().name);
+
+        assertArrayEquals(new int[]{ -1, 10, 20, 30, 40 },
+                mDisplayDeviceConfig.getScreenOffBrightnessSensorValueToLux());
+    }
+
+    @Test
+    public void testProximitySensorFromDisplayConfig() throws IOException {
+        setupDisplayDeviceConfigFromDisplayConfigFile();
+
+        assertEquals("test_proximity_sensor",
+                mDisplayDeviceConfig.getProximitySensor().type);
+        assertEquals("Test Proximity Sensor",
+                mDisplayDeviceConfig.getProximitySensor().name);
+    }
+
+    @Test
+    public void testProximitySensorWithEmptyValuesFromDisplayConfig() throws IOException {
+        setupDisplayDeviceConfigFromDisplayConfigFile(
+                getContent(getValidLuxThrottling(), getProxSensorWithEmptyValues()));
+        assertNull(mDisplayDeviceConfig.getProximitySensor());
+    }
+
+    @Test
+    public void testBlockingZoneThresholdsFromDisplayConfig() throws IOException {
+        setupDisplayDeviceConfigFromDisplayConfigFile();
+
+        assertArrayEquals(new float[]{ NITS_TO_BRIGHTNESS_SPLINE.interpolate(50),
+                        NITS_TO_BRIGHTNESS_SPLINE.interpolate(300),
+                        NITS_TO_BRIGHTNESS_SPLINE.interpolate(300), -1},
+                mDisplayDeviceConfig.getLowDisplayBrightnessThresholds(), SMALL_DELTA);
+        assertArrayEquals(new float[]{50, 60, -1, 60},
+                mDisplayDeviceConfig.getLowAmbientBrightnessThresholds(), ZERO_DELTA);
+        assertArrayEquals(new float[]{ NITS_TO_BRIGHTNESS_SPLINE.interpolate(80),
+                        NITS_TO_BRIGHTNESS_SPLINE.interpolate(100),
+                        NITS_TO_BRIGHTNESS_SPLINE.interpolate(100), -1},
+                mDisplayDeviceConfig.getHighDisplayBrightnessThresholds(), SMALL_DELTA);
+        assertArrayEquals(new float[]{70, 80, -1, 80},
+                mDisplayDeviceConfig.getHighAmbientBrightnessThresholds(), ZERO_DELTA);
+    }
+
+    @Test
+    public void testBlockingZoneThresholdsFromConfigResource() {
         setupDisplayDeviceConfigFromConfigResourceFile();
+
+        assertArrayEquals(displayBrightnessThresholdsIntToFloat(
+                        LOW_BRIGHTNESS_THRESHOLD_OF_PEAK_REFRESH_RATE),
+                mDisplayDeviceConfig.getLowDisplayBrightnessThresholds(), SMALL_DELTA);
+        assertArrayEquals(ambientBrightnessThresholdsIntToFloat(
+                        LOW_AMBIENT_THRESHOLD_OF_PEAK_REFRESH_RATE),
+                mDisplayDeviceConfig.getLowAmbientBrightnessThresholds(), ZERO_DELTA);
+        assertArrayEquals(displayBrightnessThresholdsIntToFloat(
+                        HIGH_BRIGHTNESS_THRESHOLD_OF_PEAK_REFRESH_RATE),
+                mDisplayDeviceConfig.getHighDisplayBrightnessThresholds(), SMALL_DELTA);
+        assertArrayEquals(ambientBrightnessThresholdsIntToFloat(
+                        HIGH_AMBIENT_THRESHOLD_OF_PEAK_REFRESH_RATE),
+                mDisplayDeviceConfig.getHighAmbientBrightnessThresholds(), ZERO_DELTA);
+    }
+
+    private void verifyConfigValuesFromConfigResource() {
         assertNull(mDisplayDeviceConfig.getName());
         assertArrayEquals(mDisplayDeviceConfig.getAutoBrightnessBrighteningLevelsNits(), new
                 float[]{2.0f, 200.0f, 600.0f}, ZERO_DELTA);
@@ -342,100 +536,8 @@
         assertEquals(mDisplayDeviceConfig.getDefaultRefreshRateInHbmHdr(),
                 DEFAULT_REFRESH_RATE_IN_HBM_HDR);
 
-        // Todo: Add asserts for ThermalBrightnessThrottlingData, DensityMapping,
-        // HighBrightnessModeData AmbientLightSensor, RefreshRateLimitations and ProximitySensor.
-    }
-
-    @Test
-    public void testThermalRefreshRateThrottlingFromDisplayConfig() throws IOException {
-        setupDisplayDeviceConfigFromDisplayConfigFile();
-
-        SparseArray<SurfaceControl.RefreshRateRange> defaultMap =
-                mDisplayDeviceConfig.getThermalRefreshRateThrottlingData(null);
-        assertNotNull(defaultMap);
-        assertEquals(2, defaultMap.size());
-        assertEquals(30, defaultMap.get(Temperature.THROTTLING_CRITICAL).min, SMALL_DELTA);
-        assertEquals(60, defaultMap.get(Temperature.THROTTLING_CRITICAL).max, SMALL_DELTA);
-        assertEquals(0, defaultMap.get(Temperature.THROTTLING_SHUTDOWN).min, SMALL_DELTA);
-        assertEquals(30, defaultMap.get(Temperature.THROTTLING_SHUTDOWN).max, SMALL_DELTA);
-
-        SparseArray<SurfaceControl.RefreshRateRange> testMap =
-                mDisplayDeviceConfig.getThermalRefreshRateThrottlingData("test");
-        assertNotNull(testMap);
-        assertEquals(1, testMap.size());
-        assertEquals(60, testMap.get(Temperature.THROTTLING_EMERGENCY).min, SMALL_DELTA);
-        assertEquals(90, testMap.get(Temperature.THROTTLING_EMERGENCY).max, SMALL_DELTA);
-    }
-
-    @Test
-    public void testValidLuxThrottling() throws Exception {
-        setupDisplayDeviceConfigFromDisplayConfigFile();
-
-        Map<DisplayDeviceConfig.BrightnessLimitMapType, Map<Float, Float>> luxThrottlingData =
-                mDisplayDeviceConfig.getLuxThrottlingData();
-        assertEquals(2, luxThrottlingData.size());
-
-        Map<Float, Float> adaptiveOnBrightnessPoints = luxThrottlingData.get(
-                DisplayDeviceConfig.BrightnessLimitMapType.ADAPTIVE);
-        assertEquals(2, adaptiveOnBrightnessPoints.size());
-        assertEquals(0.3f, adaptiveOnBrightnessPoints.get(1000f), SMALL_DELTA);
-        assertEquals(0.5f, adaptiveOnBrightnessPoints.get(5000f), SMALL_DELTA);
-
-        Map<Float, Float> adaptiveOffBrightnessPoints = luxThrottlingData.get(
-                DisplayDeviceConfig.BrightnessLimitMapType.DEFAULT);
-        assertEquals(2, adaptiveOffBrightnessPoints.size());
-        assertEquals(0.35f, adaptiveOffBrightnessPoints.get(1500f), SMALL_DELTA);
-        assertEquals(0.55f, adaptiveOffBrightnessPoints.get(5500f), SMALL_DELTA);
-    }
-
-    @Test
-    public void testInvalidLuxThrottling() throws Exception {
-        setupDisplayDeviceConfigFromDisplayConfigFile(getContent(getInvalidLuxThrottling()));
-
-        Map<DisplayDeviceConfig.BrightnessLimitMapType, Map<Float, Float>> luxThrottlingData =
-                mDisplayDeviceConfig.getLuxThrottlingData();
-        assertEquals(1, luxThrottlingData.size());
-
-        Map<Float, Float> adaptiveOnBrightnessPoints = luxThrottlingData.get(
-                DisplayDeviceConfig.BrightnessLimitMapType.ADAPTIVE);
-        assertEquals(1, adaptiveOnBrightnessPoints.size());
-        assertEquals(0.3f, adaptiveOnBrightnessPoints.get(1000f), SMALL_DELTA);
-    }
-
-    @Test
-    public void testBlockingZoneThresholdsFromDisplayConfig() throws IOException {
-        setupDisplayDeviceConfigFromDisplayConfigFile();
-
-        assertArrayEquals(new float[]{ NITS_TO_BRIGHTNESS_SPLINE.interpolate(50),
-                        NITS_TO_BRIGHTNESS_SPLINE.interpolate(300),
-                        NITS_TO_BRIGHTNESS_SPLINE.interpolate(300), -1},
-                mDisplayDeviceConfig.getLowDisplayBrightnessThresholds(), SMALL_DELTA);
-        assertArrayEquals(new float[]{50, 60, -1, 60},
-                mDisplayDeviceConfig.getLowAmbientBrightnessThresholds(), ZERO_DELTA);
-        assertArrayEquals(new float[]{ NITS_TO_BRIGHTNESS_SPLINE.interpolate(80),
-                        NITS_TO_BRIGHTNESS_SPLINE.interpolate(100),
-                        NITS_TO_BRIGHTNESS_SPLINE.interpolate(100), -1},
-                mDisplayDeviceConfig.getHighDisplayBrightnessThresholds(), SMALL_DELTA);
-        assertArrayEquals(new float[]{70, 80, -1, 80},
-                mDisplayDeviceConfig.getHighAmbientBrightnessThresholds(), ZERO_DELTA);
-    }
-
-    @Test
-    public void testBlockingZoneThresholdsFromConfigResource() {
-        setupDisplayDeviceConfigFromConfigResourceFile();
-
-        assertArrayEquals(displayBrightnessThresholdsIntToFloat(
-                LOW_BRIGHTNESS_THRESHOLD_OF_PEAK_REFRESH_RATE),
-                mDisplayDeviceConfig.getLowDisplayBrightnessThresholds(), SMALL_DELTA);
-        assertArrayEquals(ambientBrightnessThresholdsIntToFloat(
-                LOW_AMBIENT_THRESHOLD_OF_PEAK_REFRESH_RATE),
-                mDisplayDeviceConfig.getLowAmbientBrightnessThresholds(), ZERO_DELTA);
-        assertArrayEquals(displayBrightnessThresholdsIntToFloat(
-                HIGH_BRIGHTNESS_THRESHOLD_OF_PEAK_REFRESH_RATE),
-                mDisplayDeviceConfig.getHighDisplayBrightnessThresholds(), SMALL_DELTA);
-        assertArrayEquals(ambientBrightnessThresholdsIntToFloat(
-                HIGH_AMBIENT_THRESHOLD_OF_PEAK_REFRESH_RATE),
-                mDisplayDeviceConfig.getHighAmbientBrightnessThresholds(), ZERO_DELTA);
+        assertEquals("test_light_sensor", mDisplayDeviceConfig.getAmbientLightSensor().type);
+        assertEquals("", mDisplayDeviceConfig.getAmbientLightSensor().name);
     }
 
     private String getValidLuxThrottling() {
@@ -541,14 +643,50 @@
                + "</refreshRateThrottlingMap>\n";
     }
 
-    private String getContent() {
-        return getContent(getValidLuxThrottling());
+    private String getValidProxSensor() {
+        return "<proxSensor>\n"
+                +   "<type>test_proximity_sensor</type>\n"
+                +   "<name>Test Proximity Sensor</name>\n"
+                + "</proxSensor>\n";
     }
 
-    private String getContent(String brightnessCapConfig) {
+    private String getProxSensorWithEmptyValues() {
+        return "<proxSensor>\n"
+                +   "<type></type>\n"
+                +   "<name></name>\n"
+                + "</proxSensor>\n";
+    }
+
+    private String getContent() {
+        return getContent(getValidLuxThrottling(), getValidProxSensor());
+    }
+
+    private String getContent(String brightnessCapConfig, String proxSensor) {
         return "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
                 + "<displayConfiguration>\n"
-                +   "<name>Example Display</name>"
+                +   "<name>Example Display</name>\n"
+                +   "<densityMapping>\n"
+                +       "<density>\n"
+                +           "<height>480</height>\n"
+                +           "<width>720</width>\n"
+                +           "<density>120</density>\n"
+                +       "</density>\n"
+                +       "<density>\n"
+                +           "<height>720</height>\n"
+                +           "<width>1280</width>\n"
+                +           "<density>213</density>\n"
+                +       "</density>\n"
+                +       "<density>\n"
+                +           "<height>1080</height>\n"
+                +           "<width>1920</width>\n"
+                +           "<density>320</density>\n"
+                +       "</density>\n"
+                +       "<density>\n"
+                +           "<height>2160</height>\n"
+                +           "<width>3840</width>\n"
+                +           "<density>640</density>\n"
+                +       "</density>\n"
+                +   "</densityMapping>\n"
                 +   "<screenBrightnessMap>\n"
                 +       "<point>\n"
                 +           "<value>" + BRIGHTNESS[0] + "</value>\n"
@@ -578,7 +716,7 @@
                 +       "</displayBrightnessMapping>\n"
                 +   "</autoBrightness>\n"
                 +   "<highBrightnessMode enabled=\"true\">\n"
-                +       "<transitionPoint>0.62</transitionPoint>\n"
+                +       "<transitionPoint>" + BRIGHTNESS[1] + "</transitionPoint>\n"
                 +       "<minimumLux>10000</minimumLux>\n"
                 +       "<timing>\n"
                 +           "<!-- allow for 5 minutes out of every 30 minutes -->\n"
@@ -590,8 +728,8 @@
                 +           "<minimum>120</minimum>\n"
                 +           "<maximum>120</maximum>\n"
                 +       "</refreshRate>\n"
-                +       "<thermalStatusLimit>light</thermalStatusLimit>\n"
                 +       "<allowInLowPowerMode>false</allowInLowPowerMode>\n"
+                +       "<minimumHdrPercentOfScreen>0.6</minimumHdrPercentOfScreen>\n"
                 +       "<sdrHdrRatioMap>\n"
                 +            "<point>\n"
                 +                "<sdrNits>2.000</sdrNits>\n"
@@ -604,10 +742,19 @@
                 +       "</sdrHdrRatioMap>\n"
                 +   "</highBrightnessMode>\n"
                 + brightnessCapConfig
+                +   "<lightSensor>\n"
+                +       "<type>test_light_sensor</type>\n"
+                +       "<name>Test Ambient Light Sensor</name>\n"
+                +       "<refreshRate>\n"
+                +           "<minimum>60</minimum>\n"
+                +           "<maximum>120</maximum>\n"
+                +       "</refreshRate>\n"
+                +   "</lightSensor>\n"
                 +   "<screenOffBrightnessSensor>\n"
-                +       "<type>sensor_12345</type>\n"
-                +       "<name>Sensor 12345</name>\n"
+                +       "<type>test_binned_brightness_sensor</type>\n"
+                +       "<name>Test Binned Brightness Sensor</name>\n"
                 +   "</screenOffBrightnessSensor>\n"
+                + proxSensor
                 +   "<ambientBrightnessChangeThresholds>\n"
                 +       "<brighteningThresholds>\n"
                 +           "<minimum>10</minimum>\n"
@@ -946,9 +1093,9 @@
         when(mResources.getInteger(R.integer.config_defaultRefreshRate))
                 .thenReturn(DEFAULT_REFRESH_RATE);
         when(mResources.getInteger(R.integer.config_fixedRefreshRateInHighZone))
-            .thenReturn(DEFAULT_HIGH_BLOCKING_ZONE_REFRESH_RATE);
+                .thenReturn(DEFAULT_HIGH_BLOCKING_ZONE_REFRESH_RATE);
         when(mResources.getInteger(R.integer.config_defaultRefreshRateInZone))
-            .thenReturn(DEFAULT_LOW_BLOCKING_ZONE_REFRESH_RATE);
+                .thenReturn(DEFAULT_LOW_BLOCKING_ZONE_REFRESH_RATE);
         when(mResources.getIntArray(R.array.config_brightnessThresholdsOfPeakRefreshRate))
                 .thenReturn(LOW_BRIGHTNESS_THRESHOLD_OF_PEAK_REFRESH_RATE);
         when(mResources.getIntArray(R.array.config_ambientThresholdsOfPeakRefreshRate))
@@ -960,11 +1107,14 @@
                 R.array.config_highAmbientBrightnessThresholdsOfFixedRefreshRate))
                 .thenReturn(HIGH_AMBIENT_THRESHOLD_OF_PEAK_REFRESH_RATE);
         when(mResources.getInteger(
-            R.integer.config_defaultRefreshRateInHbmHdr))
-            .thenReturn(DEFAULT_REFRESH_RATE_IN_HBM_HDR);
+                R.integer.config_defaultRefreshRateInHbmHdr))
+                .thenReturn(DEFAULT_REFRESH_RATE_IN_HBM_HDR);
         when(mResources.getInteger(
-            R.integer.config_defaultRefreshRateInHbmSunlight))
-            .thenReturn(DEFAULT_REFRESH_RATE_IN_HBM_SUNLIGHT);
+                R.integer.config_defaultRefreshRateInHbmSunlight))
+                .thenReturn(DEFAULT_REFRESH_RATE_IN_HBM_SUNLIGHT);
+
+        when(mResources.getString(com.android.internal.R.string.config_displayLightSensorType))
+                .thenReturn("test_light_sensor");
 
         mDisplayDeviceConfig = DisplayDeviceConfig.create(mContext, true);
     }
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java
index d16c9c5..979676e 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayManagerServiceTest.java
@@ -248,6 +248,8 @@
     @Mock VirtualDeviceManagerInternal mMockVirtualDeviceManagerInternal;
     @Mock IVirtualDisplayCallback.Stub mMockAppToken;
     @Mock IVirtualDisplayCallback.Stub mMockAppToken2;
+
+    @Mock IVirtualDisplayCallback.Stub mMockAppToken3;
     @Mock WindowManagerInternal mMockWindowManagerInternal;
     @Mock LightsManager mMockLightsManager;
     @Mock VirtualDisplayAdapter mMockVirtualDisplayAdapter;
@@ -477,6 +479,41 @@
     }
 
     @Test
+    public void testCreateVirtualRotatesWithContent() throws RemoteException {
+        DisplayManagerService displayManager =
+                new DisplayManagerService(mContext, mBasicInjector);
+        registerDefaultDisplays(displayManager);
+
+        // This is effectively the DisplayManager service published to ServiceManager.
+        DisplayManagerService.BinderService bs = displayManager.new BinderService();
+
+        String uniqueId = "uniqueId --- Rotates with Content Test";
+        int width = 600;
+        int height = 800;
+        int dpi = 320;
+        int flags = DisplayManager.VIRTUAL_DISPLAY_FLAG_ROTATES_WITH_CONTENT;
+
+        when(mMockAppToken.asBinder()).thenReturn(mMockAppToken);
+        final VirtualDisplayConfig.Builder builder = new VirtualDisplayConfig.Builder(
+                VIRTUAL_DISPLAY_NAME, width, height, dpi);
+        builder.setFlags(flags);
+        builder.setUniqueId(uniqueId);
+        int displayId = bs.createVirtualDisplay(builder.build(), /* callback= */ mMockAppToken,
+                /* projection= */ null, PACKAGE_NAME);
+        verify(mMockProjectionService, never()).setContentRecordingSession(any(),
+                nullable(IMediaProjection.class));
+
+        displayManager.performTraversalInternal(mock(SurfaceControl.Transaction.class));
+
+        // flush the handler
+        displayManager.getDisplayHandler().runWithScissors(() -> {}, /* now= */ 0);
+
+        DisplayDeviceInfo ddi = displayManager.getDisplayDeviceInfoInternal(displayId);
+        assertNotNull(ddi);
+        assertTrue((ddi.flags & DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT) != 0);
+    }
+
+    @Test
     public void testCreateVirtualDisplayOwnFocus() throws RemoteException {
         DisplayManagerService displayManager =
                 new DisplayManagerService(mContext, mBasicInjector);
@@ -838,6 +875,7 @@
 
         registerDefaultDisplays(displayManager);
         when(mMockAppToken.asBinder()).thenReturn(mMockAppToken);
+        when(mMockAppToken2.asBinder()).thenReturn(mMockAppToken2);
 
         IVirtualDevice virtualDevice = mock(IVirtualDevice.class);
         when(virtualDevice.getDeviceId()).thenReturn(1);
@@ -851,7 +889,7 @@
         int displayId1 =
                 localService.createVirtualDisplay(
                         builder1.build(),
-                        mMockAppToken /* callback */,
+                        mMockAppToken2 /* callback */,
                         virtualDevice /* virtualDeviceToken */,
                         mock(DisplayWindowPolicyController.class),
                         PACKAGE_NAME);
@@ -893,6 +931,7 @@
 
         registerDefaultDisplays(displayManager);
         when(mMockAppToken.asBinder()).thenReturn(mMockAppToken);
+        when(mMockAppToken2.asBinder()).thenReturn(mMockAppToken2);
 
         IVirtualDevice virtualDevice = mock(IVirtualDevice.class);
         when(virtualDevice.getDeviceId()).thenReturn(1);
@@ -927,7 +966,7 @@
         int displayId2 =
                 localService.createVirtualDisplay(
                         builder2.build(),
-                        mMockAppToken /* callback */,
+                        mMockAppToken2 /* callback */,
                         virtualDevice /* virtualDeviceToken */,
                         mock(DisplayWindowPolicyController.class),
                         PACKAGE_NAME);
@@ -950,6 +989,8 @@
 
         registerDefaultDisplays(displayManager);
         when(mMockAppToken.asBinder()).thenReturn(mMockAppToken);
+        when(mMockAppToken2.asBinder()).thenReturn(mMockAppToken2);
+        when(mMockAppToken3.asBinder()).thenReturn(mMockAppToken3);
 
         IVirtualDevice virtualDevice = mock(IVirtualDevice.class);
         when(virtualDevice.getDeviceId()).thenReturn(1);
@@ -999,7 +1040,7 @@
         int ownDisplayGroupDisplayId =
                 localService.createVirtualDisplay(
                         ownDisplayGroupConfig,
-                        mMockAppToken /* callback */,
+                        mMockAppToken2 /* callback */,
                         virtualDevice /* virtualDeviceToken */,
                         mock(DisplayWindowPolicyController.class),
                         PACKAGE_NAME);
@@ -1024,7 +1065,7 @@
         int defaultDisplayGroupDisplayId =
                 localService.createVirtualDisplay(
                         defaultDisplayGroupConfig,
-                        mMockAppToken /* callback */,
+                        mMockAppToken3 /* callback */,
                         null /* virtualDeviceToken */,
                         mock(DisplayWindowPolicyController.class),
                         PACKAGE_NAME);
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java
index ad8c5e5..4c3d80a 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerController2Test.java
@@ -1093,6 +1093,16 @@
     }
 
     @Test
+    public void testSetBrightness_BrightnessShouldBeClamped() {
+        float clampedBrightness = 0.6f;
+        when(mHolder.hbmController.getCurrentBrightnessMax()).thenReturn(clampedBrightness);
+
+        mHolder.dpc.setBrightness(PowerManager.BRIGHTNESS_MAX);
+
+        verify(mHolder.brightnessSetting).setBrightness(clampedBrightness);
+    }
+
+    @Test
     public void testDwbcCallsHappenOnHandler() {
         mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
 
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
index 8ddf7b6..01e49f2 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayPowerControllerTest.java
@@ -59,6 +59,7 @@
 import android.view.DisplayInfo;
 
 import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.FlakyTest;
 import androidx.test.filters.SmallTest;
 import androidx.test.platform.app.InstrumentationRegistry;
 
@@ -303,6 +304,7 @@
     }
 
     @Test
+    @FlakyTest(bugId = 294107062)
     public void testDisplayBrightnessFollowers_BothDpcsSupportNits() {
         DisplayPowerControllerHolder followerDpc =
                 createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID);
@@ -356,6 +358,7 @@
     }
 
     @Test
+    @FlakyTest(bugId = 294107062)
     public void testDisplayBrightnessFollowers_FollowerDoesNotSupportNits() {
         DisplayPowerControllerHolder followerDpc =
                 createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID);
@@ -388,6 +391,7 @@
     }
 
     @Test
+    @FlakyTest(bugId = 294107062)
     public void testDisplayBrightnessFollowers_LeadDpcDoesNotSupportNits() {
         DisplayPowerControllerHolder followerDpc =
                 createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID);
@@ -418,6 +422,7 @@
     }
 
     @Test
+    @FlakyTest(bugId = 294107062)
     public void testDisplayBrightnessFollowers_NeitherDpcSupportsNits() {
         DisplayPowerControllerHolder followerDpc =
                 createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID);
@@ -450,6 +455,7 @@
     }
 
     @Test
+    @FlakyTest(bugId = 294107062)
     public void testDisplayBrightnessFollowers_AutomaticBrightness() {
         Settings.System.putInt(mContext.getContentResolver(),
                 Settings.System.SCREEN_BRIGHTNESS_MODE,
@@ -521,6 +527,7 @@
     }
 
     @Test
+    @FlakyTest(bugId = 294107062)
     public void testDisplayBrightnessFollowersRemoval_RemoveSingleFollower() {
         DisplayPowerControllerHolder followerDpc = createDisplayPowerController(FOLLOWER_DISPLAY_ID,
                 FOLLOWER_UNIQUE_ID);
@@ -612,6 +619,7 @@
     }
 
     @Test
+    @FlakyTest(bugId = 294107062)
     public void testDisplayBrightnessFollowersRemoval_RemoveAllFollowers() {
         DisplayPowerControllerHolder followerHolder =
                 createDisplayPowerController(FOLLOWER_DISPLAY_ID, FOLLOWER_UNIQUE_ID);
@@ -1095,6 +1103,16 @@
     }
 
     @Test
+    public void testSetBrightness_BrightnessShouldBeClamped() {
+        float clampedBrightness = 0.6f;
+        when(mHolder.hbmController.getCurrentBrightnessMax()).thenReturn(clampedBrightness);
+
+        mHolder.dpc.setBrightness(PowerManager.BRIGHTNESS_MAX);
+
+        verify(mHolder.brightnessSetting).setBrightness(clampedBrightness);
+    }
+
+    @Test
     public void testDwbcCallsHappenOnHandler() {
         mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
 
diff --git a/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java b/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java
index 2065479..c0128ae 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java
@@ -69,7 +69,6 @@
         mDisplayDeviceInfo.copyFrom(new DisplayDeviceInfo());
         mDisplayDeviceInfo.width = DISPLAY_WIDTH;
         mDisplayDeviceInfo.height = DISPLAY_HEIGHT;
-        mDisplayDeviceInfo.flags = DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
         mDisplayDeviceInfo.touch = DisplayDeviceInfo.TOUCH_INTERNAL;
         mDisplayDeviceInfo.modeId = MODE_ID;
         mDisplayDeviceInfo.supportedModes = new Display.Mode[] {new Display.Mode(MODE_ID,
@@ -112,8 +111,18 @@
         mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false);
         assertEquals(expectedPosition, mLogicalDisplay.getDisplayPosition());
 
-        expectedPosition.set(40, -20);
         DisplayInfo displayInfo = new DisplayInfo();
+        displayInfo.logicalWidth = DISPLAY_WIDTH;
+        displayInfo.logicalHeight = DISPLAY_HEIGHT;
+        // Rotation doesn't matter when the FLAG_ROTATES_WITH_CONTENT is absent.
+        displayInfo.rotation = Surface.ROTATION_90;
+        mLogicalDisplay.setDisplayInfoOverrideFromWindowManagerLocked(displayInfo);
+        mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false);
+        assertEquals(expectedPosition, mLogicalDisplay.getDisplayPosition());
+
+        expectedPosition.set(40, -20);
+        mDisplayDeviceInfo.flags = DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
+        mLogicalDisplay.updateLocked(mDeviceRepo);
         displayInfo.logicalWidth = DISPLAY_HEIGHT;
         displayInfo.logicalHeight = DISPLAY_WIDTH;
         displayInfo.rotation = Surface.ROTATION_90;
diff --git a/services/tests/displayservicetests/src/com/android/server/display/VirtualDisplayAdapterTest.java b/services/tests/displayservicetests/src/com/android/server/display/VirtualDisplayAdapterTest.java
new file mode 100644
index 0000000..8bbacc4
--- /dev/null
+++ b/services/tests/displayservicetests/src/com/android/server/display/VirtualDisplayAdapterTest.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.display;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.hardware.display.IVirtualDisplayCallback;
+import android.hardware.display.VirtualDisplayConfig;
+import android.os.IBinder;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import com.android.server.testutils.TestHandler;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class VirtualDisplayAdapterTest {
+
+    @Mock
+    Context mContextMock;
+
+    @Mock
+    VirtualDisplayAdapter.SurfaceControlDisplayFactory mMockSufaceControlDisplayFactory;
+
+    @Mock
+    DisplayAdapter.Listener mMockListener;
+
+    @Mock
+    IVirtualDisplayCallback mMockCallback;
+
+    @Mock
+    IBinder mMockBinder;
+
+    private TestHandler mHandler;
+
+    private VirtualDisplayAdapter mVirtualDisplayAdapter;
+
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mHandler = new TestHandler(null);
+        mVirtualDisplayAdapter = new VirtualDisplayAdapter(new DisplayManagerService.SyncRoot(),
+                mContextMock, mHandler, mMockListener, mMockSufaceControlDisplayFactory);
+
+        when(mMockCallback.asBinder()).thenReturn(mMockBinder);
+    }
+
+    @Test
+    public void testCreatesVirtualDisplay() {
+        VirtualDisplayConfig config = new VirtualDisplayConfig.Builder("test", /* width= */ 1,
+                /* height= */ 1, /* densityDpi= */ 1).build();
+
+        DisplayDevice result = mVirtualDisplayAdapter.createVirtualDisplayLocked(mMockCallback,
+                /* projection= */ null, /* ownerUid= */ 10, /* packageName= */ "testpackage",
+                /* surface= */ null, /* flags= */ 0, config);
+
+        assertNotNull(result);
+    }
+
+    @Test
+    public void testDoesNotCreateVirtualDisplayForSameCallback() {
+        VirtualDisplayConfig config1 = new VirtualDisplayConfig.Builder("test", /* width= */ 1,
+                /* height= */ 1, /* densityDpi= */ 1).build();
+        VirtualDisplayConfig config2 = new VirtualDisplayConfig.Builder("test2", /* width= */ 1,
+                /* height= */ 1, /* densityDpi= */ 1).build();
+        mVirtualDisplayAdapter.createVirtualDisplayLocked(mMockCallback, /* projection= */ null,
+                /* ownerUid= */ 10, /* packageName= */ "testpackage", /* surface= */ null,
+                /* flags= */ 0, config1);
+
+        DisplayDevice result = mVirtualDisplayAdapter.createVirtualDisplayLocked(mMockCallback,
+                /* projection= */ null, /* ownerUid= */ 10, /* packageName= */ "testpackage",
+                /* surface= */ null, /* flags= */ 0, config2);
+
+        assertNull(result);
+    }
+}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java b/services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java
index 15f13cd..b088dbf 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java
@@ -88,7 +88,6 @@
 import com.android.internal.util.Preconditions;
 import com.android.internal.util.test.FakeSettingsProvider;
 import com.android.internal.util.test.FakeSettingsProviderRule;
-import com.android.server.LocalServices;
 import com.android.server.display.DisplayDeviceConfig;
 import com.android.server.display.TestUtils;
 import com.android.server.display.mode.DisplayModeDirector.BrightnessObserver;
@@ -149,15 +148,9 @@
         mContext = spy(new ContextWrapper(ApplicationProvider.getApplicationContext()));
         final MockContentResolver resolver = mSettingsProviderRule.mockContentResolver(mContext);
         when(mContext.getContentResolver()).thenReturn(resolver);
-        mInjector = spy(new FakesInjector());
+        mInjector = spy(new FakesInjector(mDisplayManagerInternalMock, mStatusBarMock,
+                mSensorManagerInternalMock));
         mHandler = new Handler(Looper.getMainLooper());
-
-        LocalServices.removeServiceForTest(StatusBarManagerInternal.class);
-        LocalServices.addService(StatusBarManagerInternal.class, mStatusBarMock);
-        LocalServices.removeServiceForTest(SensorManagerInternal.class);
-        LocalServices.addService(SensorManagerInternal.class, mSensorManagerInternalMock);
-        LocalServices.removeServiceForTest(DisplayManagerInternal.class);
-        LocalServices.addService(DisplayManagerInternal.class, mDisplayManagerInternalMock);
     }
 
     private DisplayModeDirector createDirectorFromRefreshRateArray(
@@ -2841,16 +2834,28 @@
         private final DisplayInfo mDisplayInfo;
         private final Display mDisplay;
         private boolean mDisplayInfoValid = true;
-        private ContentObserver mBrightnessObserver;
+        private final DisplayManagerInternal mDisplayManagerInternal;
+        private final StatusBarManagerInternal mStatusBarManagerInternal;
+        private final SensorManagerInternal mSensorManagerInternal;
+
         private ContentObserver mPeakRefreshRateObserver;
 
         FakesInjector() {
+            this(null, null, null);
+        }
+
+        FakesInjector(DisplayManagerInternal displayManagerInternal,
+                StatusBarManagerInternal statusBarManagerInternal,
+                SensorManagerInternal sensorManagerInternal) {
             mDeviceConfig = new FakeDeviceConfig();
             mDisplayInfo = new DisplayInfo();
             mDisplayInfo.defaultModeId = MODE_ID;
             mDisplayInfo.supportedModes = new Display.Mode[] {new Display.Mode(MODE_ID,
                     800, 600, /* refreshRate= */ 60)};
             mDisplay = createDisplay(DISPLAY_ID);
+            mDisplayManagerInternal = displayManagerInternal;
+            mStatusBarManagerInternal = statusBarManagerInternal;
+            mSensorManagerInternal = sensorManagerInternal;
         }
 
         @NonNull
@@ -2906,6 +2911,21 @@
             return true;
         }
 
+        @Override
+        public DisplayManagerInternal getDisplayManagerInternal() {
+            return mDisplayManagerInternal;
+        }
+
+        @Override
+        public StatusBarManagerInternal getStatusBarManagerInternal() {
+            return mStatusBarManagerInternal;
+        }
+
+        @Override
+        public SensorManagerInternal getSensorManagerInternal() {
+            return mSensorManagerInternal;
+        }
+
         protected Display createDisplay(int id) {
             return new Display(DisplayManagerGlobal.getInstance(), id, mDisplayInfo,
                     ApplicationProvider.getApplicationContext().getResources());
diff --git a/services/tests/dreamservicetests/Android.bp b/services/tests/dreamservicetests/Android.bp
new file mode 100644
index 0000000..8ef443e
--- /dev/null
+++ b/services/tests/dreamservicetests/Android.bp
@@ -0,0 +1,36 @@
+package {
+    // See: http://go/android-license-faq
+    default_applicable_licenses: ["frameworks_base_license"],
+}
+
+android_test {
+    name: "DreamServiceTests",
+
+    // Include all test java files.
+    srcs: [
+        "src/**/*.java",
+    ],
+
+    static_libs: [
+        "androidx.test.ext.truth",
+        "frameworks-base-testutils",
+        "mockito-target-minus-junit4",
+        "services.core",
+        "mockingservicestests-utils-mockito",
+    ],
+
+    platform_apis: true,
+
+    test_suites: [
+        "automotive-tests",
+        "device-tests",
+    ],
+
+    certificate: "platform",
+
+    dxflags: ["--multi-dex"],
+
+    optimize: {
+        enabled: false,
+    },
+}
diff --git a/services/tests/dreamservicetests/AndroidManifest.xml b/services/tests/dreamservicetests/AndroidManifest.xml
new file mode 100644
index 0000000..f4b88d9
--- /dev/null
+++ b/services/tests/dreamservicetests/AndroidManifest.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+     package="com.android.frameworks.dreamservicetests">
+
+    <!--
+    Insert permissions here. eg:
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
+    -->
+
+    <application android:debuggable="true"
+                 android:testOnly="true">
+        <uses-library android:name="android.test.mock" android:required="true" />
+        <uses-library android:name="android.test.runner" />
+
+        <service
+            android:name="com.android.server.dreams.TestDreamService"
+            android:exported="false"
+            android:label="Test Dream" >
+            <intent-filter>
+                <action android:name="android.service.dreams.DreamService" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data
+                android:name="android.service.dream"
+                android:resource="@xml/test_dream_metadata" />
+        </service>
+
+        <service
+            android:name="com.android.server.dreams.TestDreamServiceWithInvalidSettings"
+            android:exported="false"
+            android:label="Test Dream" >
+            <intent-filter>
+                <action android:name="android.service.dreams.DreamService" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data
+                android:name="android.service.dream"
+                android:resource="@xml/test_dream_metadata_invalid" />
+        </service>
+    </application>
+
+    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+         android:targetPackage="com.android.frameworks.dreamservicetests"
+         android:label="Frameworks Services Tests"/>
+</manifest>
diff --git a/services/tests/dreamservicetests/AndroidTest.xml b/services/tests/dreamservicetests/AndroidTest.xml
new file mode 100644
index 0000000..ae89281
--- /dev/null
+++ b/services/tests/dreamservicetests/AndroidTest.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<configuration description="Runs Dream Service Tests.">
+    <option name="test-suite-tag" value="apct" />
+    <option name="test-suite-tag" value="apct-instrumentation" />
+
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="install-arg" value="-t" />
+        <option name="test-file-name" value="DreamServiceTests.apk" />
+    </target_preparer>
+
+    <option name="test-tag" value="DreamServiceTests" />
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="com.android.frameworks.dreamservicetests" />
+        <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/dreamservicetests/OWNERS b/services/tests/dreamservicetests/OWNERS
new file mode 100644
index 0000000..6dd64e7
--- /dev/null
+++ b/services/tests/dreamservicetests/OWNERS
@@ -0,0 +1,3 @@
+# Bug component: 78010
+
+include /core/java/android/service/dreams/OWNERS
diff --git a/services/tests/dreamservicetests/TEST_MAPPING b/services/tests/dreamservicetests/TEST_MAPPING
new file mode 100644
index 0000000..d73d83d
--- /dev/null
+++ b/services/tests/dreamservicetests/TEST_MAPPING
@@ -0,0 +1,22 @@
+{
+  "presubmit": [
+    {
+      "name": "DreamServiceTests",
+      "options": [
+        {"include-filter": "com.android.server.dreams"},
+        {"exclude-annotation": "android.platform.test.annotations.FlakyTest"},
+        {"exclude-annotation": "androidx.test.filters.FlakyTest"},
+        {"exclude-annotation": "org.junit.Ignore"}
+      ]
+    }
+  ],
+  "postsubmit": [
+    {
+      "name": "DreamServiceTests",
+      "options": [
+        {"include-filter": "com.android.server.dreams"},
+        {"exclude-annotation": "org.junit.Ignore"}
+      ]
+    }
+  ]
+}
diff --git a/services/tests/dreamservicetests/res/xml/test_dream_metadata.xml b/services/tests/dreamservicetests/res/xml/test_dream_metadata.xml
new file mode 100644
index 0000000..9211ec1
--- /dev/null
+++ b/services/tests/dreamservicetests/res/xml/test_dream_metadata.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.
+  -->
+
+<dream xmlns:android="http://schemas.android.com/apk/res/android"
+       android:settingsActivity=
+           "com.android.frameworks.dreamservicetests/.TestDreamSettingsActivity"
+       android:showClockAndComplications="false" />
diff --git a/services/tests/servicestests/res/xml/test_dream_metadata_invalid.xml b/services/tests/dreamservicetests/res/xml/test_dream_metadata_invalid.xml
similarity index 100%
rename from services/tests/servicestests/res/xml/test_dream_metadata_invalid.xml
rename to services/tests/dreamservicetests/res/xml/test_dream_metadata_invalid.xml
diff --git a/services/tests/dreamservicetests/src/com/android/server/dreams/DreamControllerTest.java b/services/tests/dreamservicetests/src/com/android/server/dreams/DreamControllerTest.java
new file mode 100644
index 0000000..db70434
--- /dev/null
+++ b/services/tests/dreamservicetests/src/com/android/server/dreams/DreamControllerTest.java
@@ -0,0 +1,283 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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 static android.os.PowerManager.USER_ACTIVITY_EVENT_OTHER;
+import static android.os.PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.ActivityTaskManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.ServiceConnection;
+import android.content.res.Resources;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.IPowerManager;
+import android.os.IRemoteCallback;
+import android.os.PowerManager;
+import android.os.RemoteException;
+import android.os.test.TestLooper;
+import android.service.dreams.IDreamService;
+
+import androidx.test.filters.FlakyTest;
+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.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class DreamControllerTest {
+    @Mock
+    private DreamController.Listener mListener;
+    @Mock
+    private Context mContext;
+
+    @Mock
+    private ActivityTaskManager mActivityTaskManager;
+    @Mock
+    private IPowerManager mPowerManager;
+
+    @Mock
+    private IBinder mIBinder;
+    @Mock
+    private IDreamService mIDreamService;
+
+    @Mock
+    private Resources mResources;
+
+    @Captor
+    private ArgumentCaptor<ServiceConnection> mServiceConnectionACaptor;
+    @Captor
+    private ArgumentCaptor<IBinder.DeathRecipient> mDeathRecipientCaptor;
+    @Captor
+    private ArgumentCaptor<IRemoteCallback> mRemoteCallbackCaptor;
+
+    private final TestLooper mLooper = new TestLooper();
+    private final Handler mHandler = new Handler(mLooper.getLooper());
+
+    private DreamController mDreamController;
+
+    private Binder mToken;
+    private ComponentName mDreamName;
+    private ComponentName mOverlayName;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+
+        when(mIDreamService.asBinder()).thenReturn(mIBinder);
+        when(mIBinder.queryLocalInterface(anyString())).thenReturn(mIDreamService);
+        when(mContext.bindServiceAsUser(any(), any(), anyInt(), any())).thenReturn(true);
+        when(mContext.getSystemService(Context.ACTIVITY_TASK_SERVICE))
+                .thenReturn(mActivityTaskManager);
+        when(mContext.getSystemServiceName(ActivityTaskManager.class))
+                .thenReturn(Context.ACTIVITY_TASK_SERVICE);
+
+        final PowerManager powerManager = new PowerManager(mContext, mPowerManager, null, null);
+        when(mContext.getSystemService(Context.POWER_SERVICE))
+                .thenReturn(powerManager);
+        when(mContext.getSystemServiceName(PowerManager.class))
+                .thenReturn(Context.POWER_SERVICE);
+        when(mContext.getResources()).thenReturn(mResources);
+
+        mToken = new Binder();
+        mDreamName = ComponentName.unflattenFromString("dream");
+        mOverlayName = ComponentName.unflattenFromString("dream_overlay");
+        mDreamController = new DreamController(mContext, mHandler, mListener);
+    }
+
+    @Test
+    public void startDream_attachOnServiceConnected() throws RemoteException {
+        // Call dream controller to start dreaming.
+        mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
+                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
+
+        // Mock service connected.
+        final ServiceConnection serviceConnection = captureServiceConnection();
+        serviceConnection.onServiceConnected(mDreamName, mIBinder);
+        mLooper.dispatchAll();
+
+        // Verify that dream service is called to attach.
+        verify(mIDreamService).attach(eq(mToken), eq(false) /*doze*/,
+                eq(false) /*preview*/, any());
+    }
+
+    @Test
+    public void startDream_dreamListenerNotified() {
+        // Call dream controller to start dreaming.
+        mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
+                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
+
+        // Mock service connected.
+        final ServiceConnection serviceConnection = captureServiceConnection();
+        serviceConnection.onServiceConnected(mDreamName, mIBinder);
+        mLooper.dispatchAll();
+
+        // Verify that dream service is called to attach.
+        verify(mListener).onDreamStarted(any());
+    }
+
+    @Test
+    public void stopDream_dreamListenerNotified() {
+        // Start dream.
+        mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
+                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
+        captureServiceConnection().onServiceConnected(mDreamName, mIBinder);
+        mLooper.dispatchAll();
+
+        // Stop dream.
+        mDreamController.stopDream(true /*immediate*/, "test stop dream" /*reason*/);
+        mLooper.dispatchAll();
+
+        // Verify that dream service is called to detach.
+        verify(mListener).onDreamStopped(any());
+    }
+
+    @Test
+    public void startDream_attachOnServiceConnectedInPreviewMode() throws RemoteException {
+        // Call dream controller to start dreaming.
+        mDreamController.startDream(mToken, mDreamName, true /*isPreview*/, false /*doze*/,
+                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
+
+        // Mock service connected.
+        final ServiceConnection serviceConnection = captureServiceConnection();
+        serviceConnection.onServiceConnected(mDreamName, mIBinder);
+        mLooper.dispatchAll();
+
+        // Verify that dream service is called to attach.
+        verify(mIDreamService).attach(eq(mToken), eq(false) /*doze*/,
+                eq(true) /*preview*/, any());
+    }
+
+    @Test
+    public void startDream_startASecondDream_detachOldDreamOnceNewDreamIsStarted()
+            throws RemoteException {
+        // Start first dream.
+        mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
+                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
+        captureServiceConnection().onServiceConnected(mDreamName, mIBinder);
+        mLooper.dispatchAll();
+        clearInvocations(mContext);
+
+        // Set up second dream.
+        final Binder newToken = new Binder();
+        final ComponentName newDreamName = ComponentName.unflattenFromString("new_dream");
+        final ComponentName newOverlayName = ComponentName.unflattenFromString("new_dream_overlay");
+        final IDreamService newDreamService = mock(IDreamService.class);
+        final IBinder newBinder = mock(IBinder.class);
+        when(newDreamService.asBinder()).thenReturn(newBinder);
+        when(newBinder.queryLocalInterface(anyString())).thenReturn(newDreamService);
+
+        // Start second dream.
+        mDreamController.startDream(newToken, newDreamName, false /*isPreview*/, false /*doze*/,
+                0 /*userId*/, null /*wakeLock*/, newOverlayName, "test" /*reason*/);
+        captureServiceConnection().onServiceConnected(newDreamName, newBinder);
+        mLooper.dispatchAll();
+
+        // Mock second dream started.
+        verify(newDreamService).attach(eq(newToken), eq(false) /*doze*/,
+                eq(false) /*preview*/, mRemoteCallbackCaptor.capture());
+        mRemoteCallbackCaptor.getValue().sendResult(null /*data*/);
+        mLooper.dispatchAll();
+
+        // Verify that the first dream is called to detach.
+        verify(mIDreamService).detach();
+    }
+
+    @Test
+    public void stopDream_detachFromService() throws RemoteException {
+        // Start dream.
+        mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
+                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
+        captureServiceConnection().onServiceConnected(mDreamName, mIBinder);
+        mLooper.dispatchAll();
+
+        // Stop dream.
+        mDreamController.stopDream(true /*immediate*/, "test stop dream" /*reason*/);
+
+        // Verify that dream service is called to detach.
+        verify(mIDreamService).detach();
+    }
+
+    @Test
+    @FlakyTest(bugId = 293109503)
+    public void serviceDisconnect_resetsScreenTimeout() throws RemoteException {
+        // Start dream.
+        mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
+                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
+        ServiceConnection serviceConnection = captureServiceConnection();
+        serviceConnection.onServiceConnected(mDreamName, mIBinder);
+        mLooper.dispatchAll();
+
+        // Dream disconnects unexpectedly.
+        serviceConnection.onServiceDisconnected(mDreamName);
+        mLooper.dispatchAll();
+
+        // Power manager receives user activity signal.
+        verify(mPowerManager).userActivity(/*displayId=*/ anyInt(), /*time=*/ anyLong(),
+                eq(USER_ACTIVITY_EVENT_OTHER),
+                eq(USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS));
+    }
+
+    @Test
+    @FlakyTest(bugId = 293109503)
+    public void binderDied_resetsScreenTimeout() throws RemoteException {
+        // Start dream.
+        mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
+                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
+        captureServiceConnection().onServiceConnected(mDreamName, mIBinder);
+        mLooper.dispatchAll();
+
+        // Dream binder dies.
+        captureDeathRecipient().binderDied();
+        mLooper.dispatchAll();
+
+        // Power manager receives user activity signal.
+        verify(mPowerManager).userActivity(/*displayId=*/ anyInt(), /*time=*/ anyLong(),
+                eq(USER_ACTIVITY_EVENT_OTHER),
+                eq(USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS));
+    }
+
+    private ServiceConnection captureServiceConnection() {
+        verify(mContext).bindServiceAsUser(any(), mServiceConnectionACaptor.capture(), anyInt(),
+                any());
+        return mServiceConnectionACaptor.getValue();
+    }
+
+    private IBinder.DeathRecipient captureDeathRecipient() throws RemoteException {
+        verify(mIBinder).linkToDeath(mDeathRecipientCaptor.capture(), anyInt());
+        return mDeathRecipientCaptor.getValue();
+    }
+}
diff --git a/services/tests/dreamservicetests/src/com/android/server/dreams/DreamManagerServiceMockingTest.java b/services/tests/dreamservicetests/src/com/android/server/dreams/DreamManagerServiceMockingTest.java
new file mode 100644
index 0000000..32d4e75
--- /dev/null
+++ b/services/tests/dreamservicetests/src/com/android/server/dreams/DreamManagerServiceMockingTest.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.dreams;
+
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.app.ActivityManagerInternal;
+import android.content.ContextWrapper;
+import android.content.pm.UserInfo;
+import android.content.res.Resources;
+import android.os.PowerManagerInternal;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.provider.Settings;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.FlakyTest;
+
+import com.android.server.LocalServices;
+import com.android.server.SystemService;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.MockitoSession;
+import org.mockito.quality.Strictness;
+
+/**
+ * Collection of tests for exercising the {@link DreamManagerService} lifecycle.
+ */
+public class DreamManagerServiceMockingTest {
+    private ContextWrapper mContextSpy;
+    private Resources mResourcesSpy;
+
+    @Mock
+    private ActivityManagerInternal mActivityManagerInternalMock;
+
+    @Mock
+    private PowerManagerInternal mPowerManagerInternalMock;
+
+    @Mock
+    private UserManager mUserManagerMock;
+
+    private MockitoSession mMockitoSession;
+
+    private static <T> void addLocalServiceMock(Class<T> clazz, T mock) {
+        LocalServices.removeServiceForTest(clazz);
+        LocalServices.addService(clazz, mock);
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+
+        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
+        mResourcesSpy = spy(mContextSpy.getResources());
+        when(mContextSpy.getResources()).thenReturn(mResourcesSpy);
+
+        addLocalServiceMock(ActivityManagerInternal.class, mActivityManagerInternalMock);
+        addLocalServiceMock(PowerManagerInternal.class, mPowerManagerInternalMock);
+
+        when(mContextSpy.getSystemService(UserManager.class)).thenReturn(mUserManagerMock);
+        mMockitoSession = mockitoSession()
+                .initMocks(this)
+                .strictness(Strictness.LENIENT)
+                .mockStatic(Settings.Secure.class)
+                .startMocking();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        mMockitoSession.finishMocking();
+        LocalServices.removeServiceForTest(ActivityManagerInternal.class);
+        LocalServices.removeServiceForTest(PowerManagerInternal.class);
+    }
+
+    private DreamManagerService createService() {
+        return new DreamManagerService(mContextSpy);
+    }
+
+    @Test
+    @FlakyTest(bugId = 293443309)
+    public void testSettingsQueryUserChange() {
+        final DreamManagerService service = createService();
+
+        final SystemService.TargetUser from =
+                new SystemService.TargetUser(mock(UserInfo.class));
+        final SystemService.TargetUser to =
+                new SystemService.TargetUser(mock(UserInfo.class));
+
+        service.onUserSwitching(from, to);
+
+        verify(() -> Settings.Secure.getIntForUser(any(),
+                eq(Settings.Secure.SCREENSAVER_ENABLED),
+                anyInt(),
+                eq(UserHandle.USER_CURRENT)));
+    }
+}
diff --git a/services/tests/dreamservicetests/src/com/android/server/dreams/DreamOverlayServiceTest.java b/services/tests/dreamservicetests/src/com/android/server/dreams/DreamOverlayServiceTest.java
new file mode 100644
index 0000000..54f4607
--- /dev/null
+++ b/services/tests/dreamservicetests/src/com/android/server/dreams/DreamOverlayServiceTest.java
@@ -0,0 +1,229 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.dreams;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import android.content.ComponentName;
+import android.content.Intent;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.service.dreams.DreamOverlayService;
+import android.service.dreams.IDreamOverlay;
+import android.service.dreams.IDreamOverlayCallback;
+import android.service.dreams.IDreamOverlayClient;
+import android.service.dreams.IDreamOverlayClientCallback;
+import android.view.WindowManager;
+
+import androidx.annotation.NonNull;
+import androidx.test.filters.FlakyTest;
+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.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import java.util.concurrent.Executor;
+
+/**
+ * A collection of tests to exercise {@link DreamOverlayService}.
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class DreamOverlayServiceTest {
+    private static final ComponentName FIRST_DREAM_COMPONENT =
+            ComponentName.unflattenFromString("com.foo.bar/.DreamService");
+    private static final ComponentName SECOND_DREAM_COMPONENT =
+            ComponentName.unflattenFromString("com.foo.baz/.DreamService");
+
+    @Mock
+    WindowManager.LayoutParams mLayoutParams;
+
+    @Mock
+    IDreamOverlayCallback mOverlayCallback;
+
+    @Mock
+    Executor mExecutor;
+
+    /**
+     * {@link TestDreamOverlayService} is a simple {@link DreamOverlayService} implementation for
+     * tracking interactions across {@link IDreamOverlay} binder interface. The service reports
+     * interactions to a {@link Monitor} instance provided at construction.
+     */
+    private static class TestDreamOverlayService extends DreamOverlayService {
+        /**
+         * An interface implemented to be informed when the corresponding methods in
+         * {@link TestDreamOverlayService} are invoked.
+         */
+        interface Monitor {
+            void onStartDream();
+            void onEndDream();
+            void onWakeUp();
+        }
+
+        private final Monitor mMonitor;
+
+        TestDreamOverlayService(Monitor monitor, Executor executor) {
+            super(executor);
+            mMonitor = monitor;
+        }
+
+        @Override
+        public void onStartDream(@NonNull WindowManager.LayoutParams layoutParams) {
+            mMonitor.onStartDream();
+        }
+
+        @Override
+        public void onEndDream() {
+            mMonitor.onEndDream();
+            super.onEndDream();
+        }
+    }
+
+    /**
+     * A {@link IDreamOverlayClientCallback} implementation that captures the requested client.
+     */
+    private static class OverlayClientCallback extends IDreamOverlayClientCallback.Stub {
+        public IDreamOverlayClient retrievedClient;
+        @Override
+        public void onDreamOverlayClient(IDreamOverlayClient client) throws RemoteException {
+            retrievedClient = client;
+        }
+    }
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    /**
+     * Verifies that callbacks for subclasses are run on the provided executor.
+     */
+    @Test
+    @FlakyTest(bugId = 293108088)
+    public void testCallbacksRunOnExecutor() throws RemoteException {
+        final TestDreamOverlayService.Monitor monitor = Mockito.mock(
+                TestDreamOverlayService.Monitor.class);
+        final TestDreamOverlayService service = new TestDreamOverlayService(monitor, mExecutor);
+        final IBinder binder = service.onBind(new Intent());
+        final IDreamOverlay overlay = IDreamOverlay.Stub.asInterface(binder);
+
+        final IDreamOverlayClient client = getClient(overlay);
+
+        // Start the dream.
+        client.startDream(mLayoutParams, mOverlayCallback,
+                FIRST_DREAM_COMPONENT.flattenToString(), false);
+
+        // The callback should not have run yet.
+        verify(monitor, never()).onStartDream();
+
+        // Run the Runnable sent to the executor.
+        ArgumentCaptor<Runnable> mRunnableCaptor = ArgumentCaptor.forClass(Runnable.class);
+        verify(mExecutor).execute(mRunnableCaptor.capture());
+        mRunnableCaptor.getValue().run();
+
+        // Callback is run.
+        verify(monitor).onStartDream();
+
+        // Verify onWakeUp is run on the executor.
+        client.wakeUp();
+        verify(monitor, never()).onWakeUp();
+        mRunnableCaptor = ArgumentCaptor.forClass(Runnable.class);
+        verify(mExecutor).execute(mRunnableCaptor.capture());
+        mRunnableCaptor.getValue().run();
+        verify(monitor).onWakeUp();
+
+        // Verify onEndDream is run on the executor.
+        client.endDream();
+        verify(monitor, never()).onEndDream();
+        mRunnableCaptor = ArgumentCaptor.forClass(Runnable.class);
+        verify(mExecutor).execute(mRunnableCaptor.capture());
+        mRunnableCaptor.getValue().run();
+        verify(monitor).onEndDream();
+    }
+
+    /**
+     * Verifies that only the currently started dream is able to affect the overlay.
+     */
+    @Test
+    public void testOverlayClientInteraction() throws RemoteException {
+        doAnswer(invocation -> {
+            ((Runnable) invocation.getArgument(0)).run();
+            return null;
+        }).when(mExecutor).execute(any());
+
+        final TestDreamOverlayService.Monitor monitor = Mockito.mock(
+                TestDreamOverlayService.Monitor.class);
+        final TestDreamOverlayService service = new TestDreamOverlayService(monitor, mExecutor);
+        final IBinder binder = service.onBind(new Intent());
+        final IDreamOverlay overlay = IDreamOverlay.Stub.asInterface(binder);
+
+        // Create two overlay clients and ensure they are unique.
+        final IDreamOverlayClient firstClient = getClient(overlay);
+        assertThat(firstClient).isNotNull();
+
+        final IDreamOverlayClient secondClient = getClient(overlay);
+        assertThat(secondClient).isNotNull();
+
+        assertThat(firstClient).isNotEqualTo(secondClient);
+
+        // Start a dream with the first client and ensure the dream is now active from the
+        // overlay's perspective.
+        firstClient.startDream(mLayoutParams, mOverlayCallback,
+                FIRST_DREAM_COMPONENT.flattenToString(), false);
+
+
+        verify(monitor).onStartDream();
+        assertThat(service.getDreamComponent()).isEqualTo(FIRST_DREAM_COMPONENT);
+
+        Mockito.clearInvocations(monitor);
+
+        // Start a dream from the second client and verify that the overlay has both cycled to
+        // the new dream (ended/started).
+        secondClient.startDream(mLayoutParams, mOverlayCallback,
+                SECOND_DREAM_COMPONENT.flattenToString(), false);
+
+        verify(monitor).onEndDream();
+        verify(monitor).onStartDream();
+        assertThat(service.getDreamComponent()).isEqualTo(SECOND_DREAM_COMPONENT);
+
+        Mockito.clearInvocations(monitor);
+
+        // Verify that interactions with the first, now inactive client don't affect the overlay.
+        firstClient.endDream();
+        verify(monitor, never()).onEndDream();
+
+        firstClient.wakeUp();
+        verify(monitor, never()).onWakeUp();
+    }
+
+    private static IDreamOverlayClient getClient(IDreamOverlay overlay) throws RemoteException {
+        final OverlayClientCallback callback = new OverlayClientCallback();
+        overlay.getClient(callback);
+        return callback.retrievedClient;
+    }
+}
diff --git a/services/tests/dreamservicetests/src/com/android/server/dreams/DreamServiceTest.java b/services/tests/dreamservicetests/src/com/android/server/dreams/DreamServiceTest.java
new file mode 100644
index 0000000..d231e40f
--- /dev/null
+++ b/services/tests/dreamservicetests/src/com/android/server/dreams/DreamServiceTest.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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 static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertFalse;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.ServiceInfo;
+import android.service.dreams.DreamService;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class DreamServiceTest {
+    private static final String TEST_PACKAGE_NAME = "com.android.frameworks.dreamservicetests";
+
+    @Test
+    public void testMetadataParsing() throws PackageManager.NameNotFoundException {
+        final String testDreamClassName = "com.android.server.dreams.TestDreamService";
+        final String testSettingsActivity =
+                "com.android.frameworks.dreamservicetests/.TestDreamSettingsActivity";
+        final DreamService.DreamMetadata metadata = getDreamMetadata(testDreamClassName);
+
+        assertThat(metadata.settingsActivity).isEqualTo(
+                ComponentName.unflattenFromString(testSettingsActivity));
+        assertFalse(metadata.showComplications);
+    }
+
+    @Test
+    public void testMetadataParsing_invalidSettingsActivity()
+            throws PackageManager.NameNotFoundException {
+        final String testDreamClassName =
+                "com.android.server.dreams.TestDreamServiceWithInvalidSettings";
+        final DreamService.DreamMetadata metadata = getDreamMetadata(testDreamClassName);
+
+        assertThat(metadata.settingsActivity).isNull();
+    }
+
+    private DreamService.DreamMetadata getDreamMetadata(String dreamClassName)
+            throws PackageManager.NameNotFoundException {
+        final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
+        final ServiceInfo si = context.getPackageManager().getServiceInfo(
+                new ComponentName(TEST_PACKAGE_NAME, dreamClassName),
+                PackageManager.ComponentInfoFlags.of(PackageManager.GET_META_DATA));
+        return DreamService.getDreamMetadata(context, si);
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/dreams/TestDreamService.java b/services/tests/dreamservicetests/src/com/android/server/dreams/TestDreamService.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/dreams/TestDreamService.java
rename to services/tests/dreamservicetests/src/com/android/server/dreams/TestDreamService.java
diff --git a/services/tests/servicestests/src/com/android/server/dreams/TestDreamServiceWithInvalidSettings.java b/services/tests/dreamservicetests/src/com/android/server/dreams/TestDreamServiceWithInvalidSettings.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/dreams/TestDreamServiceWithInvalidSettings.java
rename to services/tests/dreamservicetests/src/com/android/server/dreams/TestDreamServiceWithInvalidSettings.java
diff --git a/services/tests/mockingservicestests/assets/AppOpsUpgradeTest/OWNERS b/services/tests/mockingservicestests/assets/AppOpsUpgradeTest/OWNERS
index 999ea0e..2fe78c5 100644
--- a/services/tests/mockingservicestests/assets/AppOpsUpgradeTest/OWNERS
+++ b/services/tests/mockingservicestests/assets/AppOpsUpgradeTest/OWNERS
@@ -1 +1,2 @@
+#Bug component: 137825
 include /core/java/android/permission/OWNERS
diff --git a/services/tests/mockingservicestests/src/com/android/server/DeviceIdleControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/DeviceIdleControllerTest.java
index 2b57c59..525bfd7 100644
--- a/services/tests/mockingservicestests/src/com/android/server/DeviceIdleControllerTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/DeviceIdleControllerTest.java
@@ -32,8 +32,6 @@
 import static com.android.server.DeviceIdleController.LIGHT_STATE_OVERRIDE;
 import static com.android.server.DeviceIdleController.LIGHT_STATE_WAITING_FOR_NETWORK;
 import static com.android.server.DeviceIdleController.MSG_REPORT_STATIONARY_STATUS;
-import static com.android.server.DeviceIdleController.MSG_RESET_PRE_IDLE_TIMEOUT_FACTOR;
-import static com.android.server.DeviceIdleController.MSG_UPDATE_PRE_IDLE_TIMEOUT_FACTOR;
 import static com.android.server.DeviceIdleController.STATE_ACTIVE;
 import static com.android.server.DeviceIdleController.STATE_IDLE;
 import static com.android.server.DeviceIdleController.STATE_IDLE_MAINTENANCE;
@@ -84,6 +82,7 @@
 import android.os.PowerManagerInternal;
 import android.os.PowerSaveState;
 import android.os.SystemClock;
+import android.os.WearModeManagerInternal;
 import android.provider.DeviceConfig;
 import android.telephony.TelephonyCallback;
 import android.telephony.TelephonyManager;
@@ -146,6 +145,10 @@
     private SensorManager mSensorManager;
     @Mock
     private TelephonyManager mTelephonyManager;
+    @Mock
+    private Sensor mOffBodySensor;
+    @Mock
+    private WearModeManagerInternal mWearModeManagerInternal;
 
     class InjectorForTest extends DeviceIdleController.Injector {
         ConnectivityManager connectivityManager;
@@ -198,9 +201,7 @@
                 mHandler = controller.new MyHandler(getContext().getMainLooper());
                 spyOn(mHandler);
                 doNothing().when(mHandler).handleMessage(argThat((message) ->
-                        message.what != MSG_REPORT_STATIONARY_STATUS
-                        && message.what != MSG_UPDATE_PRE_IDLE_TIMEOUT_FACTOR
-                        && message.what != MSG_RESET_PRE_IDLE_TIMEOUT_FACTOR));
+                        message.what != MSG_REPORT_STATIONARY_STATUS));
                 doAnswer(new Answer<Boolean>() {
                     @Override
                     public Boolean answer(InvocationOnMock invocation) throws Throwable {
@@ -209,9 +210,7 @@
                         return true;
                     }
                 }).when(mHandler).sendMessageDelayed(
-                        argThat((message) -> message.what == MSG_REPORT_STATIONARY_STATUS
-                                || message.what == MSG_UPDATE_PRE_IDLE_TIMEOUT_FACTOR
-                                || message.what == MSG_RESET_PRE_IDLE_TIMEOUT_FACTOR),
+                        argThat((message) -> message.what == MSG_REPORT_STATIONARY_STATUS),
                         anyLong());
             }
 
@@ -351,6 +350,9 @@
         mAnyMotionDetector = new AnyMotionDetectorForTest();
         mInjector = new InjectorForTest(getContext());
 
+        doReturn(mWearModeManagerInternal)
+                .when(() -> LocalServices.getService(WearModeManagerInternal.class));
+
         setupDeviceIdleController();
     }
 
@@ -2085,43 +2087,6 @@
     }
 
     @Test
-    public void testStepToIdleMode() {
-        float delta = mDeviceIdleController.MIN_PRE_IDLE_FACTOR_CHANGE;
-        for (int mode = PowerManager.PRE_IDLE_TIMEOUT_MODE_NORMAL;
-                mode <= PowerManager.PRE_IDLE_TIMEOUT_MODE_LONG;
-                mode++) {
-            int ret = mDeviceIdleController.setPreIdleTimeoutMode(mode);
-            if (mode == PowerManager.PRE_IDLE_TIMEOUT_MODE_NORMAL) {
-                assertEquals("setPreIdleTimeoutMode: " + mode + " failed.",
-                        mDeviceIdleController.SET_IDLE_FACTOR_RESULT_IGNORED, ret);
-            } else {
-                assertEquals("setPreIdleTimeoutMode: " + mode + " failed.",
-                        mDeviceIdleController.SET_IDLE_FACTOR_RESULT_OK, ret);
-            }
-            //TODO(b/123045185): Mocked Handler of DeviceIdleController to make message loop
-            //workable in this test class
-            float expectedfactor = mDeviceIdleController.getPreIdleTimeoutByMode(mode);
-            float curfactor = mDeviceIdleController.getPreIdleTimeoutFactor();
-            assertEquals("Pre idle time factor of mode [" + mode + "].",
-                    expectedfactor, curfactor, delta);
-            mDeviceIdleController.resetPreIdleTimeoutMode();
-
-            checkNextAlarmTimeWithNewPreIdleFactor(expectedfactor, STATE_INACTIVE);
-            checkNextAlarmTimeWithNewPreIdleFactor(expectedfactor, STATE_IDLE_PENDING);
-
-            checkNextAlarmTimeWithNewPreIdleFactor(expectedfactor, STATE_SENSING);
-            checkNextAlarmTimeWithNewPreIdleFactor(expectedfactor, STATE_LOCATING);
-            checkNextAlarmTimeWithNewPreIdleFactor(expectedfactor, STATE_QUICK_DOZE_DELAY);
-            checkNextAlarmTimeWithNewPreIdleFactor(expectedfactor, STATE_IDLE_MAINTENANCE);
-            checkNextAlarmTimeWithNewPreIdleFactor(expectedfactor, STATE_IDLE);
-            checkMaybeDoAnImmediateMaintenance(expectedfactor);
-        }
-        float curfactor = mDeviceIdleController.getPreIdleTimeoutFactor();
-        assertEquals("Pre idle time factor of mode default.",
-                1.0f, curfactor, delta);
-    }
-
-    @Test
     public void testStationaryDetection_QuickDozeOff() {
         setQuickDozeEnabled(false);
         enterDeepState(STATE_IDLE);
@@ -2452,6 +2417,58 @@
         verifyLightStateConditions(LIGHT_STATE_ACTIVE);
     }
 
+    @Test
+    public void testModeManager_NoModeManagerLocalService_AddListenerNotCalled() {
+        mConstants.USE_MODE_MANAGER = true;
+        doReturn(null)
+                .when(() -> LocalServices.getService(WearModeManagerInternal.class));
+        cleanupDeviceIdleController();
+        setupDeviceIdleController();
+        verify(mWearModeManagerInternal, never()).addActiveStateChangeListener(
+                eq(WearModeManagerInternal.QUICK_DOZE_REQUEST_IDENTIFIER), any(),
+                eq(mDeviceIdleController.mModeManagerQuickDozeRequestConsumer));
+    }
+
+    @Test
+    public void testModeManager_NoBatterySaver_QuickDoze() {
+        mConstants.USE_MODE_MANAGER = true;
+        PowerSaveState powerSaveState = new PowerSaveState.Builder().setBatterySaverEnabled(
+                false).build();
+        when(mPowerManagerInternal.getLowPowerState(anyInt()))
+                .thenReturn(powerSaveState);
+        cleanupDeviceIdleController();
+        setupDeviceIdleController();
+
+        // Mode manager quick doze request: true.
+        mDeviceIdleController.mModeManagerQuickDozeRequestConsumer.accept(true);
+        assertTrue(mDeviceIdleController.isQuickDozeEnabled());
+
+        // Mode manager quick doze request: false.
+        mDeviceIdleController.mModeManagerQuickDozeRequestConsumer.accept(false);
+        assertFalse(mDeviceIdleController.isQuickDozeEnabled());
+        verifyStateConditions(STATE_ACTIVE);
+    }
+
+    @Test
+    public void testModeManager_WithBatterySaver_QuickDoze() {
+        mConstants.USE_MODE_MANAGER = true;
+        PowerSaveState powerSaveState = new PowerSaveState.Builder().setBatterySaverEnabled(
+                true).build();
+        when(mPowerManagerInternal.getLowPowerState(anyInt()))
+                .thenReturn(powerSaveState);
+        cleanupDeviceIdleController();
+        setupDeviceIdleController();
+
+        // Mode manager quick doze request: true.
+        mDeviceIdleController.mModeManagerQuickDozeRequestConsumer.accept(true);
+        assertTrue(mDeviceIdleController.isQuickDozeEnabled());
+
+        // Mode manager quick doze request: false.
+        // Quick doze should remain enabled because battery saver is on.
+        mDeviceIdleController.mModeManagerQuickDozeRequestConsumer.accept(false);
+        assertTrue(mDeviceIdleController.isQuickDozeEnabled());
+    }
+
     private void enterDeepState(int state) {
         switch (state) {
             case STATE_ACTIVE:
@@ -2706,68 +2723,4 @@
                 fail("Conditions for " + lightStateToString(expectedLightState) + " unknown.");
         }
     }
-
-    private void checkNextAlarmTimeWithNewPreIdleFactor(float factor, int state) {
-        final long errorTolerance = 1000;
-        enterDeepState(state);
-        long now = SystemClock.elapsedRealtime();
-        long alarm = mDeviceIdleController.getNextAlarmTime();
-        if (state == STATE_INACTIVE || state == STATE_IDLE_PENDING) {
-            int ret = mDeviceIdleController.setPreIdleTimeoutFactor(factor);
-            if (Float.compare(factor, 1.0f) == 0) {
-                assertEquals("setPreIdleTimeoutMode: " + factor + " failed.",
-                        mDeviceIdleController.SET_IDLE_FACTOR_RESULT_IGNORED, ret);
-            } else {
-                assertEquals("setPreIdleTimeoutMode: " + factor + " failed.",
-                        mDeviceIdleController.SET_IDLE_FACTOR_RESULT_OK, ret);
-            }
-            if (ret == mDeviceIdleController.SET_IDLE_FACTOR_RESULT_OK) {
-                long newAlarm = mDeviceIdleController.getNextAlarmTime();
-                long newDelay = (long) ((alarm - now) * factor);
-                assertTrue("setPreIdleTimeoutFactor: " + factor,
-                        Math.abs(newDelay - (newAlarm - now)) <  errorTolerance);
-                mDeviceIdleController.resetPreIdleTimeoutMode();
-                newAlarm = mDeviceIdleController.getNextAlarmTime();
-                assertTrue("resetPreIdleTimeoutMode from: " + factor,
-                        Math.abs(newAlarm - alarm) < errorTolerance);
-                mDeviceIdleController.setPreIdleTimeoutFactor(factor);
-                now = SystemClock.elapsedRealtime();
-                enterDeepState(state);
-                newAlarm = mDeviceIdleController.getNextAlarmTime();
-                assertTrue("setPreIdleTimeoutFactor: " + factor + " before step to idle",
-                        Math.abs(newDelay - (newAlarm - now)) <  errorTolerance);
-                mDeviceIdleController.resetPreIdleTimeoutMode();
-            }
-        } else {
-            mDeviceIdleController.setPreIdleTimeoutFactor(factor);
-            long newAlarm = mDeviceIdleController.getNextAlarmTime();
-            assertTrue("setPreIdleTimeoutFactor: " + factor
-                    + " shounld not change next alarm" ,
-                    (newAlarm == alarm));
-            mDeviceIdleController.resetPreIdleTimeoutMode();
-        }
-    }
-
-    private void checkMaybeDoAnImmediateMaintenance(float factor) {
-        int ret = mDeviceIdleController.setPreIdleTimeoutFactor(factor);
-        final long minuteInMillis = 60 * 1000;
-        if (Float.compare(factor, 1.0f) == 0) {
-            assertEquals("setPreIdleTimeoutMode: " + factor + " failed.",
-                    mDeviceIdleController.SET_IDLE_FACTOR_RESULT_IGNORED, ret);
-        } else {
-            assertEquals("setPreIdleTimeoutMode: " + factor + " failed.",
-                    mDeviceIdleController.SET_IDLE_FACTOR_RESULT_OK, ret);
-        }
-        if (ret == mDeviceIdleController.SET_IDLE_FACTOR_RESULT_OK) {
-            enterDeepState(STATE_IDLE);
-            long now = SystemClock.elapsedRealtime();
-            mDeviceIdleController.setIdleStartTimeForTest(
-                    now - (long) (mConstants.IDLE_TIMEOUT * 0.6));
-            verifyStateConditions(STATE_IDLE);
-            mDeviceIdleController.setIdleStartTimeForTest(
-                    now - (long) (mConstants.IDLE_TIMEOUT * 1.2));
-            verifyStateConditions(STATE_IDLE_MAINTENANCE);
-            mDeviceIdleController.resetPreIdleTimeoutMode();
-        }
-    }
 }
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 c046740..5b51963 100644
--- a/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java
@@ -143,6 +143,7 @@
 import android.os.Message;
 import android.os.PowerExemptionManager;
 import android.os.PowerManager;
+import android.os.Process;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemProperties;
@@ -327,16 +328,6 @@
         }
 
         @Override
-        void setKernelTimeZoneOffset(int utcOffsetMillis) {
-            // Do nothing.
-        }
-
-        @Override
-        void syncKernelTimeZoneOffset() {
-            // Do nothing.
-        }
-
-        @Override
         int getCallingUid() {
             return mTestCallingUid;
         }
@@ -2146,31 +2137,59 @@
 
         assertEquals(deviceIdleUntil, mTestTimer.getElapsed());
 
-        final PendingIntent pi5wakeup = getNewMockPendingIntent();
-        final PendingIntent pi4wakeupPackage = getNewMockPendingIntent();
-        final PendingIntent pi2nonWakeup = getNewMockPendingIntent(57, "test.different.package");
+        final PendingIntent pi4System = getNewMockPendingIntent(Process.SYSTEM_UID, "android");
+        final PendingIntent pi9System = getNewMockPendingIntent(Process.SYSTEM_UID, "android");
 
-        setTestAlarm(ELAPSED_REALTIME_WAKEUP, mNowElapsedTest + 5, pi5wakeup);
-        setTestAlarm(ELAPSED_REALTIME, mNowElapsedTest + 4, pi4wakeupPackage);
+        final PendingIntent pi5wakeupPackage = getNewMockPendingIntent();
+        final IAlarmListener listener2WakeupPackage = getNewListener(() -> {});
+        final PendingIntent pi4wakeupPackage = getNewMockPendingIntent(41, "test.wakeup.package2");
+        final PendingIntent pi19wakeupPackage = getNewMockPendingIntent(41, "test.wakeup.package2");
+
+        final PendingIntent pi2nonWakeup = getNewMockPendingIntent(57, "test.nonwakeup.package1");
+        final PendingIntent pi8nonWakeup = getNewMockPendingIntent(59, "test.nonwakeup.package2");
+        final PendingIntent pi11nonWakeup = getNewMockPendingIntent(51, "test.nonwakeup.package3");
+
+        // Alarms from the system
+        setTestAlarm(ELAPSED_REALTIME, mNowElapsedTest + 4, pi4System);
+        setTestAlarm(ELAPSED_REALTIME, mNowElapsedTest + 9, pi9System);
+
+        // Alarms from TEST_CALLING_PACKAGE, TEST_CALLING_UID, having one wakeup alarm
+        setTestAlarmWithListener(ELAPSED_REALTIME, mNowElapsedTest + 20, mService.mTimeTickTrigger);
+        setTestAlarm(ELAPSED_REALTIME_WAKEUP, mNowElapsedTest + 5, pi5wakeupPackage);
+        setTestAlarmWithListener(ELAPSED_REALTIME, mNowElapsedTest + 2, listener2WakeupPackage);
+
+        // Alarms from 41, "test.wakeup.package2", having one wakeup alarm
+        setTestAlarm(ELAPSED_REALTIME_WAKEUP, mNowElapsedTest + 4, pi4wakeupPackage);
+        setTestAlarm(ELAPSED_REALTIME, mNowElapsedTest + 19, pi19wakeupPackage);
+
+        // Alarms from other packages having no wakeup alarms
+        setTestAlarm(ELAPSED_REALTIME, mNowElapsedTest + 8, pi8nonWakeup);
+        setTestAlarm(ELAPSED_REALTIME, mNowElapsedTest + 11, pi11nonWakeup);
         setTestAlarm(ELAPSED_REALTIME, mNowElapsedTest + 2, pi2nonWakeup);
 
         mNowElapsedTest = deviceIdleUntil;
         mTestTimer.expire();
 
-        // The order of the alarms in delivery list should be:
-        // IdleUntil, all alarms of a package with any wakeup alarms, then the rest.
-        // Within a package, alarms should be ordered by requested delivery time.
-        final PendingIntent[] expectedOrder = new PendingIntent[]{
-                idleUntilPi, pi4wakeupPackage, pi5wakeup, pi2nonWakeup};
+        // IdleUntil should always go out first. The others are divided into three classes:
+        // System alarms | Alarms of packages with any wakeup alarms | Others.
+        // Within each class, time_tick should go first if present, others should be ordered by
+        // requested delivery time.
+        final PendingIntent[] expectedPiOrder = new PendingIntent[]{
+                idleUntilPi, pi4System, pi9System, null, null, pi4wakeupPackage, pi5wakeupPackage,
+                pi19wakeupPackage, pi2nonWakeup, pi8nonWakeup, pi11nonWakeup};
+
+        final IAlarmListener[] expectedListenerOrder = new IAlarmListener[expectedPiOrder.length];
+        expectedListenerOrder[3] = mService.mTimeTickTrigger;
+        expectedListenerOrder[4] = listener2WakeupPackage;
 
         ArgumentCaptor<ArrayList<Alarm>> listCaptor = ArgumentCaptor.forClass(ArrayList.class);
         verify(mService).deliverAlarmsLocked(listCaptor.capture(), anyLong());
         final ArrayList<Alarm> deliveryList = listCaptor.getValue();
 
-        assertEquals(expectedOrder.length, deliveryList.size());
-        for (int i = 0; i < expectedOrder.length; i++) {
+        assertEquals(expectedPiOrder.length, deliveryList.size());
+        for (int i = 0; i < expectedPiOrder.length; i++) {
             assertTrue("Unexpected alarm: " + deliveryList.get(i) + " at pos: " + i,
-                    deliveryList.get(i).matches(expectedOrder[i], null));
+                    deliveryList.get(i).matches(expectedPiOrder[i], expectedListenerOrder[i]));
         }
     }
 
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/AsyncProcessStartTest.java b/services/tests/mockingservicestests/src/com/android/server/am/AsyncProcessStartTest.java
index 1fd7c4a..0abf46b 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/AsyncProcessStartTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/AsyncProcessStartTest.java
@@ -203,7 +203,7 @@
             return null;
         }).when(thread).bindApplication(
                 any(), any(),
-                any(), any(),
+                any(), any(), anyBoolean(),
                 any(), any(),
                 any(), any(),
                 any(),
@@ -264,7 +264,7 @@
                 /* expectedStartSeq */ 0, /* procAttached */ false);
 
         app.getThread().bindApplication(PACKAGE, appInfo,
-                null, null,
+                null, null, false,
                 null,
                 null,
                 null, null,
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/BackgroundRestrictionTest.java b/services/tests/mockingservicestests/src/com/android/server/am/BackgroundRestrictionTest.java
index bad04dc..bb91939 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/BackgroundRestrictionTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/BackgroundRestrictionTest.java
@@ -2435,10 +2435,18 @@
     private void setPermissionState(String packageName, int uid, String perm, boolean granted) {
         doReturn(granted ? PERMISSION_GRANTED : PERMISSION_DENIED)
                 .when(mPermissionManagerServiceInternal)
-                .checkUidPermission(uid, perm);
+                .checkUidPermission(uid, perm, Context.DEVICE_ID_DEFAULT);
         doReturn(granted ? PERMISSION_GRANTED : PERMISSION_DENIED)
                 .when(mPermissionManagerServiceInternal)
-                .checkPermission(packageName, perm, UserHandle.getUserId(uid));
+                .checkPermission(
+                        packageName, perm, Context.DEVICE_ID_DEFAULT, UserHandle.getUserId(uid));
+        try {
+            doReturn(granted ? PERMISSION_GRANTED : PERMISSION_DENIED)
+                    .when(mIActivityManager)
+                    .checkPermission(perm, Process.INVALID_PID, uid);
+        } catch (RemoteException e) {
+            // Ignore.
+        }
     }
 
     private void setAppOpState(String packageName, int uid, int op, boolean granted) {
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java b/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java
index 22ad7c4..03439e55 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java
@@ -969,7 +969,7 @@
 
         mCachedAppOptimizerUnderTest.mLastCompactionStats.clear();
 
-        if (CachedAppOptimizer.ENABLE_FILE_COMPACT) {
+        if (CachedAppOptimizer.ENABLE_SHARED_AND_CODE_COMPACT) {
             // We force a some compaction
             mCachedAppOptimizerUnderTest.compactApp(processRecord,
                     CachedAppOptimizer.CompactProfile.SOME, CachedAppOptimizer.CompactSource.APP,
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java b/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java
index 1f4563f..b4a66bd 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java
@@ -105,6 +105,7 @@
 import com.android.server.wm.ActivityTaskManagerService;
 import com.android.server.wm.WindowProcessController;
 
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -206,8 +207,10 @@
         setFieldValue(AppProfiler.class, profiler, "mProfilerLock", new Object());
         doReturn(new ActivityManagerService.ProcessChangeItem()).when(pr)
                 .enqueueProcessChangeItemLocked(anyInt(), anyInt());
-        sService.mOomAdjuster = new OomAdjuster(sService, sService.mProcessList,
-                new ActiveUids(sService, false));
+        sService.mOomAdjuster = sService.mConstants.ENABLE_NEW_OOMADJ
+                ? new OomAdjusterModernImpl(sService, sService.mProcessList,
+                        new ActiveUids(sService, false))
+                : new OomAdjuster(sService, sService.mProcessList, new ActiveUids(sService, false));
         sService.mOomAdjuster.mAdjSeq = 10000;
         sService.mWakefulness = new AtomicInteger(PowerManagerInternal.WAKEFULNESS_AWAKE);
         if (sService.mConstants.USE_TIERED_CACHED_ADJ) {
@@ -220,6 +223,11 @@
         LocalServices.removeServiceForTest(PackageManagerInternal.class);
     }
 
+    @After
+    public void tearDown() {
+        sService.mOomAdjuster.resetInternal();
+    }
+
     private static <T> void setFieldValue(Class clazz, Object obj, String fieldName, T val) {
         try {
             Field field = clazz.getDeclaredField(fieldName);
@@ -245,10 +253,14 @@
      * Replace the process LRU with the given processes.
      * @param apps
      */
+    @SuppressWarnings("GuardedBy")
     private void setProcessesToLru(ProcessRecord... apps) {
         ArrayList<ProcessRecord> lru = sService.mProcessList.getLruProcessesLOSP();
         lru.clear();
         Collections.addAll(lru, apps);
+        for (ProcessRecord app : apps) {
+            sService.mOomAdjuster.onProcessBeginLocked(app);
+        }
     }
 
     /**
@@ -259,6 +271,7 @@
     @SuppressWarnings("GuardedBy")
     private void updateOomAdj(ProcessRecord... apps) {
         if (apps.length == 1) {
+            sService.mOomAdjuster.onProcessBeginLocked(apps[0]);
             sService.mOomAdjuster.updateOomAdjLocked(apps[0], OOM_ADJ_REASON_NONE);
         } else {
             setProcessesToLru(apps);
@@ -600,10 +613,13 @@
             s.lastTopAlmostPerceptibleBindRequestUptimeMs = nowUptime;
             s.getConnections().clear();
             app.mServices.updateHasTopStartedAlmostPerceptibleServices();
+            sService.mOomAdjuster.onProcessBeginLocked(system);
             sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
             updateOomAdj(app);
 
             assertEquals(PERCEPTIBLE_RECENT_FOREGROUND_APP_ADJ + 2, app.mState.getSetAdj());
+
+            sService.mOomAdjuster.resetInternal();
         }
 
         // Out of grace period but valid binding allows the adjustment.
@@ -620,10 +636,13 @@
             s.lastTopAlmostPerceptibleBindRequestUptimeMs =
                     nowUptime - 2 * sService.mConstants.mServiceBindAlmostPerceptibleTimeoutMs;
             app.mServices.updateHasTopStartedAlmostPerceptibleServices();
+            sService.mOomAdjuster.onProcessBeginLocked(system);
             sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
             updateOomAdj(app);
 
             assertEquals(PERCEPTIBLE_RECENT_FOREGROUND_APP_ADJ + 2, app.mState.getSetAdj());
+
+            sService.mOomAdjuster.resetInternal();
         }
 
         // Out of grace period and no valid binding so no adjustment.
@@ -641,10 +660,13 @@
                     nowUptime - 2 * sService.mConstants.mServiceBindAlmostPerceptibleTimeoutMs;
             s.getConnections().clear();
             app.mServices.updateHasTopStartedAlmostPerceptibleServices();
+            sService.mOomAdjuster.onProcessBeginLocked(system);
             sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
             updateOomAdj(app);
 
             assertNotEquals(PERCEPTIBLE_RECENT_FOREGROUND_APP_ADJ + 2, app.mState.getSetAdj());
+
+            sService.mOomAdjuster.resetInternal();
         }
     }
 
@@ -657,11 +679,12 @@
                 MOCKAPP2_PROCESSNAME, MOCKAPP2_PACKAGENAME, true));
         system.mState.setMaxAdj(PERSISTENT_PROC_ADJ);
         system.mState.setHasTopUi(true);
+        sService.mOomAdjuster.onProcessBeginLocked(system);
         // Simulate the system starting and binding to a service in the app.
         ServiceRecord s = bindService(app, system,
                 null, Context.BIND_ALMOST_PERCEPTIBLE, mock(IBinder.class));
         sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
-        sService.mOomAdjuster.updateOomAdjLocked(app, OOM_ADJ_REASON_NONE);
+        updateOomAdj(system, app);
 
         assertProcStates(app, PROCESS_STATE_IMPORTANT_FOREGROUND,
                 PERCEPTIBLE_APP_ADJ + 1, SCHED_GROUP_DEFAULT);
@@ -850,6 +873,7 @@
                 MOCKAPP_PROCESSNAME, MOCKAPP_PACKAGENAME, false));
         ProcessRecord client = spy(makeDefaultProcessRecord(MOCKAPP2_PID, MOCKAPP2_UID,
                 MOCKAPP2_PROCESSNAME, MOCKAPP2_PACKAGENAME, false));
+        client.mServices.setTreatLikeActivity(true);
         bindService(app, client, null, Context.BIND_WAIVE_PRIORITY
                 | Context.BIND_TREAT_LIKE_ACTIVITY, mock(IBinder.class));
         sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
@@ -1006,7 +1030,7 @@
         bindService(app, client, null, Context.BIND_NOT_FOREGROUND, mock(IBinder.class));
         client.mState.setMaxAdj(PERSISTENT_PROC_ADJ);
         sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
-        updateOomAdj(app);
+        updateOomAdj(client, app);
 
         assertEquals(PROCESS_STATE_TRANSIENT_BACKGROUND, app.mState.getSetProcState());
         assertNoBfsl(app);
@@ -1132,7 +1156,7 @@
         assertNoBfsl(app);
 
         client.mState.setMaxAdj(PERSISTENT_PROC_ADJ);
-        updateOomAdj(app);
+        updateOomAdj(client, app);
 
         assertEquals(PERSISTENT_SERVICE_ADJ, app.mState.getSetAdj());
         assertBfsl(app);
@@ -1148,7 +1172,7 @@
         bindService(app, client, null, Context.BIND_NOT_PERCEPTIBLE, mock(IBinder.class));
         client.mState.setRunningRemoteAnimation(true);
         sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
-        updateOomAdj(app);
+        updateOomAdj(client, app);
 
         assertEquals(PERCEPTIBLE_LOW_APP_ADJ, app.mState.getSetAdj());
     }
@@ -1199,6 +1223,8 @@
             updateOomAdj(client, app);
 
             assertEquals(PERCEPTIBLE_MEDIUM_APP_ADJ + 2, app.mState.getSetAdj());
+
+            sService.mOomAdjuster.resetInternal();
         }
 
         {
@@ -1217,6 +1243,8 @@
             doReturn(false).when(wpc).isHeavyWeightProcess();
 
             assertEquals(PERCEPTIBLE_MEDIUM_APP_ADJ + 2, app.mState.getSetAdj());
+
+            sService.mOomAdjuster.resetInternal();
         }
 
         {
@@ -1229,9 +1257,11 @@
                     mock(IBinder.class));
             client.mState.setMaxAdj(PERSISTENT_PROC_ADJ);
             sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
-            sService.mOomAdjuster.updateOomAdjLocked(app, OOM_ADJ_REASON_NONE);
+            updateOomAdj(client, app);
 
             assertEquals(PERCEPTIBLE_APP_ADJ + 1, app.mState.getSetAdj());
+
+            sService.mOomAdjuster.resetInternal();
         }
 
         {
@@ -1246,10 +1276,12 @@
                     mock(IBinder.class));
             client.mState.setMaxAdj(PERSISTENT_PROC_ADJ);
             sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
-            sService.mOomAdjuster.updateOomAdjLocked(app, OOM_ADJ_REASON_NONE);
+            updateOomAdj(client, app);
             doReturn(false).when(wpc).isHeavyWeightProcess();
 
             assertEquals(PERCEPTIBLE_APP_ADJ + 1, app.mState.getSetAdj());
+
+            sService.mOomAdjuster.resetInternal();
         }
     }
 
@@ -1849,7 +1881,7 @@
 
         bindService(app1, client1, null, Context.BIND_SCHEDULE_LIKE_TOP_APP, mock(IBinder.class));
         bindService(app2, client2, null, Context.BIND_SCHEDULE_LIKE_TOP_APP, mock(IBinder.class));
-        updateOomAdj(app1, app2);
+        updateOomAdj(client1, client2, app1, app2);
 
         assertProcStates(app1, PROCESS_STATE_BOUND_FOREGROUND_SERVICE, VISIBLE_APP_ADJ,
                 SCHED_GROUP_TOP_APP);
@@ -1899,6 +1931,8 @@
 
         s1.getConnections().clear();
         s2.getConnections().clear();
+        client1.mServices.removeAllConnections();
+        client2.mServices.removeAllConnections();
         client1.mState.setMaxAdj(UNKNOWN_ADJ);
         client2.mState.setMaxAdj(UNKNOWN_ADJ);
         client1.mServices.setHasForegroundServices(true, 0, /* hasNoneType=*/true);
@@ -1909,7 +1943,7 @@
         bindService(app2, client2, s2, Context.BIND_TREAT_LIKE_VISIBLE_FOREGROUND_SERVICE,
                 mock(IBinder.class));
 
-        updateOomAdj(app1, app2);
+        updateOomAdj(client1, client2, app1, app2);
 
         // VISIBLE_APP_ADJ is the max oom-adj for BIND_TREAT_LIKE_VISIBLE_FOREGROUND_SERVICE.
         assertProcStates(app1, PROCESS_STATE_FOREGROUND_SERVICE, VISIBLE_APP_ADJ,
@@ -1922,7 +1956,7 @@
         doReturn(client2).when(sService).getTopApp();
         sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
 
-        sService.mOomAdjuster.updateOomAdjLocked(app2, OOM_ADJ_REASON_NONE);
+        updateOomAdj(client2, app2);
         assertProcStates(app2, PROCESS_STATE_BOUND_TOP, VISIBLE_APP_ADJ,
                 SCHED_GROUP_DEFAULT);
     }
@@ -1977,6 +2011,7 @@
         app.setPendingFinishAttach(true);
         app.mState.setHasForegroundActivities(false);
 
+        sService.mOomAdjuster.onProcessBeginLocked(app);
         sService.mOomAdjuster.setAttachingProcessStatesLSP(app);
         updateOomAdj(app);
 
@@ -1991,7 +2026,9 @@
                 MOCKAPP_PROCESSNAME, MOCKAPP_PACKAGENAME, false));
         app.setPendingFinishAttach(true);
         app.mState.setHasForegroundActivities(true);
+        doReturn(app).when(sService).getTopApp();
 
+        sService.mOomAdjuster.onProcessBeginLocked(app);
         sService.mOomAdjuster.setAttachingProcessStatesLSP(app);
         updateOomAdj(app);
 
@@ -2088,7 +2125,7 @@
                     anyInt(), anyBoolean(), anyBoolean(), anyBoolean());
             doNothing().when(sService.mServices)
                     .scheduleServiceTimeoutLocked(any(ProcessRecord.class));
-            sService.mOomAdjuster.updateOomAdjLocked(client1, OOM_ADJ_REASON_NONE);
+            updateOomAdj(client1, client2, app1, app2, app3);
 
             assertEquals(PROCESS_STATE_CACHED_EMPTY, client1.mState.getSetProcState());
             assertEquals(PROCESS_STATE_SERVICE, app1.mState.getSetProcState());
@@ -2426,6 +2463,8 @@
         lru.clear();
         lru.add(app2);
         lru.add(app);
+        sService.mOomAdjuster.onProcessBeginLocked(app2);
+        sService.mOomAdjuster.onProcessBeginLocked(app);
 
         final ComponentName cn = ComponentName.unflattenFromString(
                 MOCKAPP_PACKAGENAME + "/.TestService");
@@ -2528,7 +2567,7 @@
         doReturn(PROCESS_STATE_TOP).when(sService.mAtmInternal).getTopProcessState();
         doReturn(app).when(sService).getTopApp();
         sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
-        sService.mOomAdjuster.updateOomAdjLocked(app, OOM_ADJ_REASON_NONE);
+        updateOomAdj(app);
 
         assertEquals(FOREGROUND_APP_ADJ, app.mState.getSetAdj());
 
diff --git a/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsLegacyRestrictionsTest.java b/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsLegacyRestrictionsTest.java
index 021d01c..1973428 100644
--- a/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsLegacyRestrictionsTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsLegacyRestrictionsTest.java
@@ -57,7 +57,7 @@
     Handler mHandler;
 
     @Mock
-    AppOpsCheckingServiceInterface mLegacyAppOpsService;
+    AppOpsRestrictions.AppOpsRestrictionRemovedListener mRestrictionRemovedListener;
 
     AppOpsRestrictions mAppOpsRestrictions;
 
@@ -75,7 +75,8 @@
             r.run();
             return true;
         });
-        mAppOpsRestrictions = new AppOpsRestrictionsImpl(mContext, mHandler, mLegacyAppOpsService);
+        mAppOpsRestrictions = new AppOpsRestrictionsImpl(mContext, mHandler,
+                mRestrictionRemovedListener);
     }
 
     @After
@@ -271,7 +272,7 @@
     public void testNotify() {
         mAppOpsRestrictions.setUserRestriction(mClientToken, mUserId1, mOpCode1, true, null);
         mAppOpsRestrictions.clearUserRestrictions(mClientToken);
-        Mockito.verify(mLegacyAppOpsService, Mockito.times(1))
-                .notifyWatchersOfChange(mOpCode1, UID_ANY);
+        Mockito.verify(mRestrictionRemovedListener, Mockito.times(1))
+                .onAppOpsRestrictionRemoved(mOpCode1);
     }
 }
diff --git a/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsServiceTest.java
index 44ec26e..646f486 100644
--- a/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/appop/AppOpsServiceTest.java
@@ -23,6 +23,7 @@
 import static android.app.AppOpsManager.OP_READ_SMS;
 import static android.app.AppOpsManager.OP_WIFI_SCAN;
 import static android.app.AppOpsManager.OP_WRITE_SMS;
+import static android.os.UserHandle.getAppId;
 import static android.os.UserHandle.getUserId;
 
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
@@ -37,8 +38,10 @@
 
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assume.assumeFalse;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.nullable;
@@ -52,6 +55,7 @@
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.Process;
+import android.permission.PermissionManager;
 import android.provider.Settings;
 import android.util.ArrayMap;
 
@@ -108,6 +112,7 @@
         mAppOpsService = new AppOpsService(mRecentAccessesFile, mStorageFile, mHandler,
                 spy(sContext));
         mAppOpsService.mHistoricalRegistry.systemReady(sContext.getContentResolver());
+        mAppOpsService.prepareInternalCallbacks();
 
         // Always approve all permission checks
         doNothing().when(mAppOpsService.mContext).enforcePermission(anyString(), anyInt(),
@@ -116,6 +121,8 @@
 
     @Before
     public void setUp() {
+        assumeFalse(PermissionManager.USE_ACCESS_CHECKING_SERVICE);
+
         mStorageFile = new File(sContext.getFilesDir(), APP_OPS_FILENAME);
         mRecentAccessesFile = new File(sContext.getFilesDir(), APP_OPS_ACCESSES_FILENAME);
         mStorageFile.delete();
@@ -135,6 +142,11 @@
 
     @After
     public void tearDown() {
+        // @After methods are still executed even if there's assumption failure in @Before.
+        if (PermissionManager.USE_ACCESS_CHECKING_SERVICE) {
+            return;
+        }
+
         mAppOpsService.shutdown();
 
         mMockingSession.finishMocking();
@@ -161,6 +173,8 @@
         when(mockPackageManagerInternal.getPackageStateInternal(sMyPackageName))
                 .thenReturn(mockMyPSInternal);
         when(mockPackageManagerInternal.getPackage(sMyPackageName)).thenReturn(mockMyPkg);
+        when(mockPackageManagerInternal.getPackageUid(eq(sMyPackageName), anyLong(),
+                eq(getUserId(mMyUid)))).thenReturn(mMyUid);
         doReturn(mockPackageManagerInternal).when(
                 () -> LocalServices.getService(PackageManagerInternal.class));
 
@@ -184,6 +198,16 @@
         // Mock behavior to use specific Settings.Global.APPOP_HISTORY_PARAMETERS
         doReturn(null).when(() -> Settings.Global.getString(any(ContentResolver.class),
                 eq(Settings.Global.APPOP_HISTORY_PARAMETERS)));
+
+        prepareInstallInvocation(mockPackageManagerInternal);
+    }
+
+    private void prepareInstallInvocation(PackageManagerInternal mockPackageManagerInternal) {
+        when(mockPackageManagerInternal.getPackageList(any())).thenAnswer(invocation -> {
+            PackageManagerInternal.PackageListObserver observer = invocation.getArgument(0);
+            observer.onPackageAdded(sMyPackageName, getAppId(mMyUid));
+            return null;
+        });
     }
 
     @Test
diff --git a/services/tests/mockingservicestests/src/com/android/server/appop/OWNERS b/services/tests/mockingservicestests/src/com/android/server/appop/OWNERS
index 999ea0e..2fe78c5 100644
--- a/services/tests/mockingservicestests/src/com/android/server/appop/OWNERS
+++ b/services/tests/mockingservicestests/src/com/android/server/appop/OWNERS
@@ -1 +1,2 @@
+#Bug component: 137825
 include /core/java/android/permission/OWNERS
diff --git a/services/tests/mockingservicestests/src/com/android/server/backup/SystemBackupAgentTest.java b/services/tests/mockingservicestests/src/com/android/server/backup/SystemBackupAgentTest.java
index 327fc19..4095be7 100644
--- a/services/tests/mockingservicestests/src/com/android/server/backup/SystemBackupAgentTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/backup/SystemBackupAgentTest.java
@@ -21,6 +21,7 @@
 import android.annotation.NonNull;
 import android.app.backup.BackupHelper;
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.platform.test.annotations.Presubmit;
@@ -47,14 +48,20 @@
 
     private TestableSystemBackupAgent mSystemBackupAgent;
 
-    @Mock private Context mContextMock;
-    @Mock private UserManager mUserManagerMock;
+    @Mock
+    private Context mContextMock;
+    @Mock
+    private UserManager mUserManagerMock;
+    @Mock
+    private PackageManager mPackageManagerMock;
 
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
         mSystemBackupAgent = new TestableSystemBackupAgent();
         when(mContextMock.getSystemService(UserManager.class)).thenReturn(mUserManagerMock);
+        when(mPackageManagerMock.hasSystemFeature(
+                PackageManager.FEATURE_SLICES_DISABLED)).thenReturn(false);
     }
 
     @Test
@@ -76,7 +83,32 @@
                         "slices",
                         "people",
                         "app_locales",
-                        "app_gender");
+                        "app_gender",
+                        "companion");
+    }
+
+    @Test
+    public void onCreate_systemUser_slicesDisabled_addsAllNonSlicesHelpers() {
+        UserHandle userHandle = new UserHandle(UserHandle.USER_SYSTEM);
+        when(mUserManagerMock.isProfile()).thenReturn(false);
+        when(mPackageManagerMock.hasSystemFeature(
+                PackageManager.FEATURE_SLICES_DISABLED)).thenReturn(true);
+
+        mSystemBackupAgent.onCreate(userHandle, /* backupDestination= */ 0);
+
+        assertThat(mSystemBackupAgent.mAddedHelpers)
+                .containsExactly(
+                        "account_sync_settings",
+                        "preferred_activities",
+                        "notifications",
+                        "permissions",
+                        "usage_stats",
+                        "shortcut_manager",
+                        "account_manager",
+                        "people",
+                        "app_locales",
+                        "app_gender",
+                        "companion");
     }
 
     @Test
@@ -91,7 +123,8 @@
                         "account_sync_settings",
                         "notifications",
                         "permissions",
-                        "app_locales");
+                        "app_locales",
+                        "companion");
     }
 
     @Test
@@ -110,7 +143,8 @@
                         "app_locales",
                         "account_manager",
                         "usage_stats",
-                        "shortcut_manager");
+                        "shortcut_manager",
+                        "companion");
     }
 
     private class TestableSystemBackupAgent extends SystemBackupAgent {
@@ -130,5 +164,10 @@
         public Object getSystemService(@ServiceName @NonNull String name) {
             return null;
         }
+
+        @Override
+        public PackageManager getPackageManager() {
+            return mPackageManagerMock;
+        }
     }
 }
diff --git a/services/tests/mockingservicestests/src/com/android/server/backup/UserBackupManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/backup/UserBackupManagerServiceTest.java
index dc1c6d5..7eb78eb 100644
--- a/services/tests/mockingservicestests/src/com/android/server/backup/UserBackupManagerServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/backup/UserBackupManagerServiceTest.java
@@ -16,36 +16,46 @@
 
 package com.android.server.backup;
 
-import static com.google.common.truth.Truth.assertThat;
-
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
 
+import static com.google.common.truth.Truth.assertThat;
+
 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.anyString;
+import static org.mockito.ArgumentMatchers.argThat;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.when;
 
+import android.annotation.UserIdInt;
 import android.app.backup.BackupAgent;
 import android.app.backup.BackupAnnotations;
 import android.app.backup.BackupAnnotations.BackupDestination;
 import android.app.backup.BackupRestoreEventLogger.DataTypeResult;
 import android.app.backup.IBackupManagerMonitor;
 import android.app.backup.IBackupObserver;
+import android.app.job.JobInfo;
+import android.app.job.JobScheduler;
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.os.Handler;
 import android.platform.test.annotations.Presubmit;
+import android.provider.Settings;
+import android.testing.TestableContext;
 import android.util.FeatureFlagUtils;
+import android.util.KeyValueListParser;
 
+import androidx.test.core.app.ApplicationProvider;
 import androidx.test.filters.FlakyTest;
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.server.backup.internal.BackupHandler;
 import com.android.server.backup.internal.LifecycleOperationStorage;
 import com.android.server.backup.internal.OnTaskFinishedListener;
 import com.android.server.backup.params.BackupParams;
@@ -75,9 +85,9 @@
     private static final String TEST_PACKAGE = "package1";
     private static final String[] TEST_PACKAGES = new String[] { TEST_PACKAGE };
     private static final String TEST_TRANSPORT = "transport";
-    private static final int WORKER_THREAD_TIMEOUT_MILLISECONDS = 1;
+    private static final int WORKER_THREAD_TIMEOUT_MILLISECONDS = 100;
+    @UserIdInt private static final int USER_ID = 0;
 
-    @Mock Context mContext;
     @Mock IBackupManagerMonitor mBackupManagerMonitor;
     @Mock IBackupObserver mBackupObserver;
     @Mock PackageManager mPackageManager;
@@ -86,7 +96,10 @@
     @Mock BackupTransportClient mBackupTransport;
     @Mock BackupEligibilityRules mBackupEligibilityRules;
     @Mock LifecycleOperationStorage mOperationStorage;
+    @Mock JobScheduler mJobScheduler;
+    @Mock BackupHandler mBackupHandler;
 
+    private TestableContext mContext;
     private MockitoSession mSession;
     private TestBackupService mService;
 
@@ -101,10 +114,16 @@
                 .startMocking();
         MockitoAnnotations.initMocks(this);
 
+        mContext = new TestableContext(ApplicationProvider.getApplicationContext());
+        mContext.addMockSystemService(JobScheduler.class, mJobScheduler);
+        mContext.getTestablePermissions().setPermission(android.Manifest.permission.BACKUP,
+                PackageManager.PERMISSION_GRANTED);
+
         mService = new TestBackupService(mContext, mPackageManager, mOperationStorage,
-                mTransportManager);
+                mTransportManager, mBackupHandler);
         mService.setEnabled(true);
         mService.setSetupComplete(true);
+        mService.enqueueFullBackup("com.test.backup.app", /* lastBackedUp= */ 0);
     }
 
     @After
@@ -115,6 +134,38 @@
     }
 
     @Test
+    public void testSetFrameworkSchedulingEnabled_enablesAndSchedulesBackups() throws Exception {
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                Settings.Secure.BACKUP_SCHEDULING_ENABLED, 0);
+
+        mService.setFrameworkSchedulingEnabled(true);
+
+        assertThat(mService.isFrameworkSchedulingEnabled()).isTrue();
+        verify(mJobScheduler).schedule(
+                matchesJobWithId(KeyValueBackupJob.getJobIdForUserId(
+                        USER_ID)));
+        verify(mJobScheduler).schedule(
+                matchesJobWithId(FullBackupJob.getJobIdForUserId(
+                        USER_ID)));
+    }
+
+    private static JobInfo matchesJobWithId(int id) {
+        return argThat((jobInfo) -> jobInfo.getId() == id);
+    }
+
+    @Test
+    public void testSetFrameworkSchedulingEnabled_disablesAndCancelBackups() throws Exception {
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                Settings.Secure.BACKUP_SCHEDULING_ENABLED, 1);
+
+        mService.setFrameworkSchedulingEnabled(false);
+
+        assertThat(mService.isFrameworkSchedulingEnabled()).isFalse();
+        verify(mJobScheduler).cancel(FullBackupJob.getJobIdForUserId(USER_ID));
+        verify(mJobScheduler).cancel(KeyValueBackupJob.getJobIdForUserId(USER_ID));
+    }
+
+    @Test
     public void initializeBackupEnableState_doesntWriteStateToDisk() {
         mService.initializeBackupEnableState();
 
@@ -265,8 +316,20 @@
         private volatile Thread mWorkerThread = null;
 
         TestBackupService(Context context, PackageManager packageManager,
-                LifecycleOperationStorage operationStorage, TransportManager transportManager) {
-            super(context, packageManager, operationStorage, transportManager);
+                LifecycleOperationStorage operationStorage, TransportManager transportManager,
+                BackupHandler backupHandler) {
+            super(context, packageManager, operationStorage, transportManager, backupHandler,
+                    createConstants(context));
+        }
+
+        private static BackupManagerConstants createConstants(Context context) {
+            BackupManagerConstants constants = new BackupManagerConstants(
+                    Handler.getMain(),
+                    context.getContentResolver());
+            // This will trigger constants default values to be set thus preventing invalid values
+            // being used in tests.
+            constants.update(new KeyValueListParser(','));
+            return constants;
         }
 
         @Override
diff --git a/services/tests/mockingservicestests/src/com/android/server/dreams/DreamManagerServiceMockingTest.java b/services/tests/mockingservicestests/src/com/android/server/dreams/DreamManagerServiceMockingTest.java
deleted file mode 100644
index c02cbd1..0000000
--- a/services/tests/mockingservicestests/src/com/android/server/dreams/DreamManagerServiceMockingTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.dreams;
-
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.app.ActivityManagerInternal;
-import android.content.ContextWrapper;
-import android.content.pm.UserInfo;
-import android.content.res.Resources;
-import android.os.PowerManagerInternal;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.provider.Settings;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.server.LocalServices;
-import com.android.server.SystemService;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.MockitoSession;
-import org.mockito.quality.Strictness;
-
-/**
- * Collection of tests for exercising the {@link DreamManagerService} lifecycle.
- */
-public class DreamManagerServiceMockingTest {
-    private ContextWrapper mContextSpy;
-    private Resources mResourcesSpy;
-
-    @Mock
-    private ActivityManagerInternal mActivityManagerInternalMock;
-
-    @Mock
-    private PowerManagerInternal mPowerManagerInternalMock;
-
-    @Mock
-    private UserManager mUserManagerMock;
-
-    private MockitoSession mMockitoSession;
-
-    private static <T> void addLocalServiceMock(Class<T> clazz, T mock) {
-        LocalServices.removeServiceForTest(clazz);
-        LocalServices.addService(clazz, mock);
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
-
-        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
-        mResourcesSpy = spy(mContextSpy.getResources());
-        when(mContextSpy.getResources()).thenReturn(mResourcesSpy);
-
-        addLocalServiceMock(ActivityManagerInternal.class, mActivityManagerInternalMock);
-        addLocalServiceMock(PowerManagerInternal.class, mPowerManagerInternalMock);
-
-        when(mContextSpy.getSystemService(UserManager.class)).thenReturn(mUserManagerMock);
-        mMockitoSession = mockitoSession()
-                .initMocks(this)
-                .strictness(Strictness.LENIENT)
-                .mockStatic(Settings.Secure.class)
-                .startMocking();
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        mMockitoSession.finishMocking();
-        LocalServices.removeServiceForTest(ActivityManagerInternal.class);
-        LocalServices.removeServiceForTest(PowerManagerInternal.class);
-    }
-
-    private DreamManagerService createService() {
-        return new DreamManagerService(mContextSpy);
-    }
-
-    @Test
-    public void testSettingsQueryUserChange() {
-        final DreamManagerService service = createService();
-
-        final SystemService.TargetUser from =
-                new SystemService.TargetUser(mock(UserInfo.class));
-        final SystemService.TargetUser to =
-                new SystemService.TargetUser(mock(UserInfo.class));
-
-        service.onUserSwitching(from, to);
-
-        verify(() -> Settings.Secure.getIntForUser(any(),
-                eq(Settings.Secure.SCREENSAVER_ENABLED),
-                anyInt(),
-                eq(UserHandle.USER_CURRENT)));
-    }
-}
diff --git a/services/tests/mockingservicestests/src/com/android/server/location/altitude/AltitudeConverterTest.java b/services/tests/mockingservicestests/src/com/android/server/location/altitude/AltitudeConverterTest.java
index 0d9aeb5..8d9a6c5 100644
--- a/services/tests/mockingservicestests/src/com/android/server/location/altitude/AltitudeConverterTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/location/altitude/AltitudeConverterTest.java
@@ -49,10 +49,10 @@
 
     @Test
     public void testAddMslAltitudeToLocation_expectedBehavior() throws IOException {
-        // Interpolates between bffffc, 955554, and 000004.
+        // Interpolates in boundary region (bffffc).
         Location location = new Location("");
-        location.setLatitude(-35.246789);
-        location.setLongitude(-44.962683);
+        location.setLatitude(-35.334815);
+        location.setLongitude(-45);
         location.setAltitude(-1);
         location.setVerticalAccuracyMeters(1);
         // Requires data to be loaded from raw assets.
@@ -61,43 +61,27 @@
         assertThat(location.hasMslAltitudeAccuracy()).isFalse();
         // Loads data from raw assets.
         mAltitudeConverter.addMslAltitudeToLocation(mContext, location);
-        assertThat(location.getMslAltitudeMeters()).isWithin(2).of(5.1076);
+        assertThat(location.getMslAltitudeMeters()).isWithin(2).of(5.0622);
         assertThat(location.getMslAltitudeAccuracyMeters()).isGreaterThan(1f);
         assertThat(location.getMslAltitudeAccuracyMeters()).isLessThan(1.1f);
 
-        // Again interpolates between bffffc, 955554, and 000004.
+        // Again interpolates at same location to assert no loading from raw assets. Also checks
+        // behavior w.r.t. invalid vertical accuracy.
         location = new Location("");
-        location.setLatitude(-35.246789);
-        location.setLongitude(-44.962683);
-        location.setAltitude(-1);
-        location.setVerticalAccuracyMeters(1);
-        // Requires no data to be loaded from raw assets.
-        assertThat(mAltitudeConverter.addMslAltitudeToLocation(location)).isTrue();
-        assertThat(location.getMslAltitudeMeters()).isWithin(2).of(5.1076);
-        assertThat(location.getMslAltitudeAccuracyMeters()).isGreaterThan(1f);
-        assertThat(location.getMslAltitudeAccuracyMeters()).isLessThan(1.1f);
-        // Results in same outcome.
-        mAltitudeConverter.addMslAltitudeToLocation(mContext, location);
-        assertThat(location.getMslAltitudeMeters()).isWithin(2).of(5.1076);
-        assertThat(location.getMslAltitudeAccuracyMeters()).isGreaterThan(1f);
-        assertThat(location.getMslAltitudeAccuracyMeters()).isLessThan(1.1f);
-
-        // Interpolate between 955554, 000004, 00000c, and 95554c - no vertical accuracy.
-        location = new Location("");
-        location.setLatitude(-35.176383);
-        location.setLongitude(-44.962683);
+        location.setLatitude(-35.334815);
+        location.setLongitude(-45);
         location.setAltitude(-1);
         location.setVerticalAccuracyMeters(-1); // Invalid vertical accuracy
         // Requires no data to be loaded from raw assets.
         assertThat(mAltitudeConverter.addMslAltitudeToLocation(location)).isTrue();
-        assertThat(location.getMslAltitudeMeters()).isWithin(2).of(5.1919);
+        assertThat(location.getMslAltitudeMeters()).isWithin(2).of(5.0622);
         assertThat(location.hasMslAltitudeAccuracy()).isFalse();
         // Results in same outcome.
         mAltitudeConverter.addMslAltitudeToLocation(mContext, location);
-        assertThat(location.getMslAltitudeMeters()).isWithin(2).of(5.1919);
+        assertThat(location.getMslAltitudeMeters()).isWithin(2).of(5.0622);
         assertThat(location.hasMslAltitudeAccuracy()).isFalse();
 
-        // Interpolates somewhere else more interesting, i.e., Hawaii.
+        // Interpolates out of boundary region, e.g., Hawaii.
         location = new Location("");
         location.setLatitude(19.545519);
         location.setLongitude(-155.998774);
@@ -112,6 +96,29 @@
         assertThat(location.getMslAltitudeMeters()).isWithin(2).of(-19.2359);
         assertThat(location.getMslAltitudeAccuracyMeters()).isGreaterThan(1f);
         assertThat(location.getMslAltitudeAccuracyMeters()).isLessThan(1.1f);
+
+        // The following round out test coverage for boundary regions.
+
+        location = new Location("");
+        location.setLatitude(-35.229154);
+        location.setLongitude(44.925335);
+        location.setAltitude(-1);
+        mAltitudeConverter.addMslAltitudeToLocation(mContext, location);
+        assertThat(location.getMslAltitudeMeters()).isWithin(2).of(-34.1913);
+
+        location = new Location("");
+        location.setLatitude(-35.334815);
+        location.setLongitude(45);
+        location.setAltitude(-1);
+        mAltitudeConverter.addMslAltitudeToLocation(mContext, location);
+        assertThat(location.getMslAltitudeMeters()).isWithin(2).of(-34.2258);
+
+        location = new Location("");
+        location.setLatitude(35.229154);
+        location.setLongitude(-44.925335);
+        location.setAltitude(-1);
+        mAltitudeConverter.addMslAltitudeToLocation(mContext, location);
+        assertThat(location.getMslAltitudeMeters()).isWithin(2).of(-11.0691);
     }
 
     @Test
@@ -122,15 +129,15 @@
 
         location.setLatitude(Double.NaN);
         assertThrows(IllegalArgumentException.class,
-                () -> mAltitudeConverter.addMslAltitudeToLocation(location));
+                () -> mAltitudeConverter.addMslAltitudeToLocation(mContext, location));
 
         location.setLatitude(91);
         assertThrows(IllegalArgumentException.class,
-                () -> mAltitudeConverter.addMslAltitudeToLocation(location));
+                () -> mAltitudeConverter.addMslAltitudeToLocation(mContext, location));
 
         location.setLatitude(-91);
         assertThrows(IllegalArgumentException.class,
-                () -> mAltitudeConverter.addMslAltitudeToLocation(location));
+                () -> mAltitudeConverter.addMslAltitudeToLocation(mContext, location));
     }
 
     @Test
@@ -141,15 +148,15 @@
 
         location.setLongitude(Double.NaN);
         assertThrows(IllegalArgumentException.class,
-                () -> mAltitudeConverter.addMslAltitudeToLocation(location));
+                () -> mAltitudeConverter.addMslAltitudeToLocation(mContext, location));
 
         location.setLongitude(181);
         assertThrows(IllegalArgumentException.class,
-                () -> mAltitudeConverter.addMslAltitudeToLocation(location));
+                () -> mAltitudeConverter.addMslAltitudeToLocation(mContext, location));
 
         location.setLongitude(-181);
         assertThrows(IllegalArgumentException.class,
-                () -> mAltitudeConverter.addMslAltitudeToLocation(location));
+                () -> mAltitudeConverter.addMslAltitudeToLocation(mContext, location));
     }
 
     @Test
@@ -159,14 +166,14 @@
         location.setLongitude(-44.962683);
 
         assertThrows(IllegalArgumentException.class,
-                () -> mAltitudeConverter.addMslAltitudeToLocation(location));
+                () -> mAltitudeConverter.addMslAltitudeToLocation(mContext, location));
 
         location.setAltitude(Double.NaN);
         assertThrows(IllegalArgumentException.class,
-                () -> mAltitudeConverter.addMslAltitudeToLocation(location));
+                () -> mAltitudeConverter.addMslAltitudeToLocation(mContext, location));
 
         location.setAltitude(Double.POSITIVE_INFINITY);
         assertThrows(IllegalArgumentException.class,
-                () -> mAltitudeConverter.addMslAltitudeToLocation(location));
+                () -> mAltitudeConverter.addMslAltitudeToLocation(mContext, location));
     }
 }
diff --git a/services/tests/mockingservicestests/src/com/android/server/location/fudger/LocationFudgerTest.java b/services/tests/mockingservicestests/src/com/android/server/location/fudger/LocationFudgerTest.java
index b53ee4b..4e9b6c7 100644
--- a/services/tests/mockingservicestests/src/com/android/server/location/fudger/LocationFudgerTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/location/fudger/LocationFudgerTest.java
@@ -49,7 +49,7 @@
     private static final double APPROXIMATE_METERS_PER_DEGREE_AT_EQUATOR = 111_000;
     private static final float ACCURACY_M = 2000;
     private static final float MAX_COARSE_FUDGE_DISTANCE_M =
-            (float) Math.sqrt(2 * ACCURACY_M * ACCURACY_M);
+            (float) Math.sqrt(2 * ACCURACY_M * ACCURACY_M) + ACCURACY_M / 4f;
 
     private Random mRandom;
 
diff --git a/services/tests/mockingservicestests/src/com/android/server/location/gnss/hal/FakeGnssHal.java b/services/tests/mockingservicestests/src/com/android/server/location/gnss/hal/FakeGnssHal.java
index 2d962ac..1a8b12a 100644
--- a/services/tests/mockingservicestests/src/com/android/server/location/gnss/hal/FakeGnssHal.java
+++ b/services/tests/mockingservicestests/src/com/android/server/location/gnss/hal/FakeGnssHal.java
@@ -686,9 +686,6 @@
     }
 
     @Override
-    protected void sendNiResponse(int notificationId, int userResponse) {}
-
-    @Override
     protected void requestPowerStats() {
         Objects.requireNonNull(mGnssNative).reportGnssPowerStats(mState.mPowerStats);
     }
diff --git a/services/tests/mockingservicestests/src/com/android/server/location/injector/FakeEmergencyHelper.java b/services/tests/mockingservicestests/src/com/android/server/location/injector/FakeEmergencyHelper.java
index 2cf57da..7ee411b 100644
--- a/services/tests/mockingservicestests/src/com/android/server/location/injector/FakeEmergencyHelper.java
+++ b/services/tests/mockingservicestests/src/com/android/server/location/injector/FakeEmergencyHelper.java
@@ -27,6 +27,7 @@
 
     public void setInEmergency(boolean inEmergency) {
         mInEmergency = inEmergency;
+        dispatchEmergencyStateChanged();
     }
 
     @Override
diff --git a/services/tests/mockingservicestests/src/com/android/server/location/provider/LocationProviderManagerTest.java b/services/tests/mockingservicestests/src/com/android/server/location/provider/LocationProviderManagerTest.java
index 7dc1935..293003d 100644
--- a/services/tests/mockingservicestests/src/com/android/server/location/provider/LocationProviderManagerTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/location/provider/LocationProviderManagerTest.java
@@ -80,8 +80,12 @@
 import android.os.RemoteException;
 import android.os.WorkSource;
 import android.platform.test.annotations.Presubmit;
+import android.provider.DeviceConfig;
+import android.provider.Settings;
 import android.util.Log;
 
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.filters.MediumTest;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
 
@@ -174,6 +178,8 @@
         doReturn(mResources).when(mContext).getResources();
         doReturn(mPackageManager).when(mContext).getPackageManager();
         doReturn(mPowerManager).when(mContext).getSystemService(PowerManager.class);
+        doReturn(ApplicationProvider.getApplicationContext()).when(
+                mContext).getApplicationContext();
         doReturn(mWakeLock).when(mPowerManager).newWakeLock(anyInt(), anyString());
         doReturn(PackageManager.PERMISSION_DENIED)
                 .when(mContext)
@@ -210,6 +216,8 @@
 
     @After
     public void tearDown() throws Exception {
+        DeviceConfig.resetToDefaults(Settings.RESET_MODE_PACKAGE_DEFAULTS,
+                DeviceConfig.NAMESPACE_LOCATION);
         LocalServices.removeServiceForTest(LocationManagerInternal.class);
 
         // some test failures may leave the fg thread stuck, interrupt until we get out of it
@@ -1339,6 +1347,144 @@
         assertThat(mManager.isVisibleToCaller()).isFalse();
     }
 
+    @MediumTest
+    @Test
+    public void testEnableMsl_expectedBehavior() throws Exception {
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_LOCATION,
+                "enable_location_provider_manager_msl", Boolean.toString(true), false);
+
+        // Create a random location and set provider location to cache necessary MSL assets.
+        Location loc = createLocation(NAME, mRandom);
+        loc.setAltitude(mRandom.nextDouble());
+        loc.setVerticalAccuracyMeters(mRandom.nextFloat());
+        mProvider.setProviderLocation(LocationResult.wrap(loc));
+        Thread.sleep(1000);
+
+        // Register listener and reset provider location to capture.
+        ILocationListener listener = createMockLocationListener();
+        LocationRequest request = new LocationRequest.Builder(0).setWorkSource(WORK_SOURCE).build();
+        mPassive.registerLocationRequest(request, IDENTITY, PERMISSION_FINE, listener);
+        mProvider.setProviderLocation(LocationResult.wrap(loc));
+        ArgumentCaptor<List<Location>> captor = ArgumentCaptor.forClass(List.class);
+        verify(listener).onLocationChanged(captor.capture(), nullable(IRemoteCallback.class));
+
+        // Assert that MSL fields are populated.
+        Location actual = captor.getValue().get(0);
+        assertThat(actual.hasMslAltitude()).isTrue();
+        assertThat(actual.hasMslAltitudeAccuracy()).isTrue();
+    }
+
+    @MediumTest
+    @Test
+    public void testEnableMsl_noVerticalAccuracy() throws Exception {
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_LOCATION,
+                "enable_location_provider_manager_msl", Boolean.toString(true), false);
+
+        // Create a random location and set provider location to cache necessary MSL assets.
+        Location loc = createLocation(NAME, mRandom);
+        loc.setAltitude(mRandom.nextDouble());
+        loc.setVerticalAccuracyMeters(mRandom.nextFloat());
+        mProvider.setProviderLocation(LocationResult.wrap(loc));
+        Thread.sleep(1000);
+
+        // Register listener and reset provider location with no vertical accuracy to capture.
+        ILocationListener listener = createMockLocationListener();
+        LocationRequest request = new LocationRequest.Builder(0).setWorkSource(WORK_SOURCE).build();
+        mPassive.registerLocationRequest(request, IDENTITY, PERMISSION_FINE, listener);
+        loc.removeVerticalAccuracy();
+        mProvider.setProviderLocation(LocationResult.wrap(loc));
+        ArgumentCaptor<List<Location>> captor = ArgumentCaptor.forClass(List.class);
+        verify(listener).onLocationChanged(captor.capture(), nullable(IRemoteCallback.class));
+
+        // Assert that only the MSL accuracy field is populated.
+        Location actual = captor.getValue().get(0);
+        assertThat(actual.hasMslAltitude()).isTrue();
+        assertThat(actual.hasMslAltitudeAccuracy()).isFalse();
+    }
+
+    @MediumTest
+    @Test
+    public void testEnableMsl_noAltitude() throws Exception {
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_LOCATION,
+                "enable_location_provider_manager_msl", Boolean.toString(true), false);
+
+        // Create a random location and set provider location to cache necessary MSL assets.
+        Location loc = createLocation(NAME, mRandom);
+        loc.setAltitude(mRandom.nextDouble());
+        loc.setVerticalAccuracyMeters(mRandom.nextFloat());
+        mProvider.setProviderLocation(LocationResult.wrap(loc));
+        Thread.sleep(1000);
+
+        // Register listener and reset provider location with no altitude to capture.
+        ILocationListener listener = createMockLocationListener();
+        LocationRequest request = new LocationRequest.Builder(0).setWorkSource(WORK_SOURCE).build();
+        mPassive.registerLocationRequest(request, IDENTITY, PERMISSION_FINE, listener);
+        loc.removeAltitude();
+        mProvider.setProviderLocation(LocationResult.wrap(loc));
+        ArgumentCaptor<List<Location>> captor = ArgumentCaptor.forClass(List.class);
+        verify(listener).onLocationChanged(captor.capture(), nullable(IRemoteCallback.class));
+
+        // Assert that no MSL fields are populated.
+        Location actual = captor.getValue().get(0);
+        assertThat(actual.hasMslAltitude()).isFalse();
+        assertThat(actual.hasMslAltitudeAccuracy()).isFalse();
+    }
+
+    @MediumTest
+    @Test
+    public void testEnableMsl_invalidAltitude() throws Exception {
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_LOCATION,
+                "enable_location_provider_manager_msl", Boolean.toString(true), false);
+
+        // Create a random location and set provider location to cache necessary MSL assets.
+        Location loc = createLocation(NAME, mRandom);
+        loc.setAltitude(mRandom.nextDouble());
+        loc.setVerticalAccuracyMeters(mRandom.nextFloat());
+        mProvider.setProviderLocation(LocationResult.wrap(loc));
+        Thread.sleep(1000);
+
+        // Register listener and reset provider location with invalid altitude to capture.
+        ILocationListener listener = createMockLocationListener();
+        LocationRequest request = new LocationRequest.Builder(0).setWorkSource(WORK_SOURCE).build();
+        mPassive.registerLocationRequest(request, IDENTITY, PERMISSION_FINE, listener);
+        loc.setAltitude(Double.POSITIVE_INFINITY);
+        mProvider.setProviderLocation(LocationResult.wrap(loc));
+        ArgumentCaptor<List<Location>> captor = ArgumentCaptor.forClass(List.class);
+        verify(listener).onLocationChanged(captor.capture(), nullable(IRemoteCallback.class));
+
+        // Assert that no MSL fields are populated.
+        Location actual = captor.getValue().get(0);
+        assertThat(actual.hasMslAltitude()).isFalse();
+        assertThat(actual.hasMslAltitudeAccuracy()).isFalse();
+    }
+
+    @MediumTest
+    @Test
+    public void testDisableMsl_expectedBehavior() throws Exception {
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_LOCATION,
+                "enable_location_provider_manager_msl", Boolean.toString(false), false);
+
+        // Create a random location and set provider location to cache necessary MSL assets.
+        Location loc = createLocation(NAME, mRandom);
+        loc.setAltitude(mRandom.nextDouble());
+        loc.setVerticalAccuracyMeters(mRandom.nextFloat());
+        mProvider.setProviderLocation(LocationResult.wrap(loc));
+        Thread.sleep(1000);
+
+        // Register listener and reset provider location to capture.
+        ILocationListener listener = createMockLocationListener();
+        LocationRequest request = new LocationRequest.Builder(0).setWorkSource(WORK_SOURCE).build();
+        mPassive.registerLocationRequest(request, IDENTITY, PERMISSION_FINE, listener);
+        mProvider.setProviderLocation(LocationResult.wrap(loc));
+        ArgumentCaptor<List<Location>> captor = ArgumentCaptor.forClass(List.class);
+        verify(listener).onLocationChanged(captor.capture(), nullable(IRemoteCallback.class));
+
+        // Assert that no MSL fields are populated.
+        Location actual = captor.getValue().get(0);
+        assertThat(actual.hasMslAltitude()).isFalse();
+        assertThat(actual.hasMslAltitudeAccuracy()).isFalse();
+    }
+
     private ILocationListener createMockLocationListener() {
         return spy(new ILocationListener.Stub() {
             @Override
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/ApexManagerTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/ApexManagerTest.java
index 3a73dd9..52044bf 100644
--- a/services/tests/mockingservicestests/src/com/android/server/pm/ApexManagerTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/ApexManagerTest.java
@@ -477,15 +477,6 @@
     }
 
     @Test
-    public void testGetBackingApexFiles_flattenedApex() {
-        ApexManager flattenedApexManager = new ApexManager.ApexManagerFlattenedApex();
-        final File backingApexFile = flattenedApexManager.getBackingApexFile(
-                new File(mMockSystem.system().getApexDirectory(),
-                        "com.android.apex.cts.shim/app/CtsShim/CtsShim.apk"));
-        assertThat(backingApexFile).isNull();
-    }
-
-    @Test
     public void testActiveApexChanged() throws RemoteException {
         ApexInfo apex1 = createApexInfo(
                 "com.apex1", 37, true, true, new File("/data/apex/active/com.apex@37.apex"));
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/ArchiveManagerTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/ArchiveManagerTest.java
new file mode 100644
index 0000000..a8b0a7b
--- /dev/null
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/ArchiveManagerTest.java
@@ -0,0 +1,230 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.pm;
+
+import static android.content.pm.PackageManager.DELETE_KEEP_DATA;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertThrows;
+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.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.IntentSender;
+import android.content.pm.LauncherActivityInfo;
+import android.content.pm.LauncherApps;
+import android.content.pm.PackageManager;
+import android.content.pm.VersionedPackage;
+import android.os.Binder;
+import android.os.Build;
+import android.os.Process;
+import android.os.UserHandle;
+import android.platform.test.annotations.Presubmit;
+import android.text.TextUtils;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.server.pm.pkg.ArchiveState;
+import com.android.server.pm.pkg.PackageStateInternal;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+
+@SmallTest
+@Presubmit
+@RunWith(AndroidJUnit4.class)
+public class ArchiveManagerTest {
+
+    private static final String PACKAGE = "com.example";
+    private static final String CALLER_PACKAGE = "com.vending";
+
+    @Rule
+    public final MockSystemRule mMockSystem = new MockSystemRule();
+
+    @Mock
+    private IntentSender mIntentSender;
+    @Mock
+    private Computer mComputer;
+    @Mock
+    private Context mContext;
+    @Mock
+    private LauncherApps mLauncherApps;
+    @Mock
+    private PackageInstallerService mInstallerService;
+    @Mock
+    private PackageStateInternal mPackageState;
+
+    private final InstallSource mInstallSource =
+            InstallSource.create(
+                    CALLER_PACKAGE,
+                    CALLER_PACKAGE,
+                    CALLER_PACKAGE,
+                    Binder.getCallingUid(),
+                    CALLER_PACKAGE,
+                    /* installerAttributionTag= */ null,
+                    /* packageSource= */ 0);
+
+    private final List<LauncherActivityInfo> mLauncherActivityInfos = createLauncherActivities();
+
+    private PackageSetting mPackageSetting;
+
+    private PackageManagerService mPm;
+    private ArchiveManager mArchiveManager;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        mMockSystem.system().stageNominalSystemState();
+        when(mMockSystem.mocks().getInjector().getPackageInstallerService()).thenReturn(
+                mInstallerService);
+        mPm = spy(new PackageManagerService(mMockSystem.mocks().getInjector(),
+                /* factoryTest= */false,
+                MockSystem.Companion.getDEFAULT_VERSION_INFO().fingerprint,
+                /* isEngBuild= */ false,
+                /* isUserDebugBuild= */false,
+                Build.VERSION_CODES.CUR_DEVELOPMENT,
+                Build.VERSION.INCREMENTAL));
+
+        when(mComputer.getPackageStateFiltered(eq(PACKAGE), anyInt(), anyInt())).thenReturn(
+                mPackageState);
+        when(mPackageState.getPackageName()).thenReturn(PACKAGE);
+        when(mPackageState.getInstallSource()).thenReturn(mInstallSource);
+        mPackageSetting = createBasicPackageSetting();
+        when(mMockSystem.mocks().getSettings().getPackageLPr(eq(PACKAGE))).thenReturn(
+                mPackageSetting);
+        when(mContext.getSystemService(LauncherApps.class)).thenReturn(mLauncherApps);
+        when(mLauncherApps.getActivityList(eq(PACKAGE), eq(UserHandle.CURRENT))).thenReturn(
+                mLauncherActivityInfos);
+        doReturn(mComputer).when(mPm).snapshotComputer();
+        when(mComputer.getNameForUid(eq(Binder.getCallingUid()))).thenReturn(CALLER_PACKAGE);
+        mArchiveManager = new ArchiveManager(mContext, mPm);
+    }
+
+    @Test
+    public void archiveApp_callerPackageNameIncorrect() {
+        Exception e = assertThrows(
+                SecurityException.class,
+                () -> mArchiveManager.archiveApp(PACKAGE, "different", UserHandle.CURRENT,
+                        mIntentSender)
+        );
+        assertThat(e).hasMessageThat().isEqualTo(
+                String.format(
+                        "The callerPackageName %s set by the caller doesn't match the "
+                                + "caller's own package name %s.",
+                        "different",
+                        CALLER_PACKAGE));
+    }
+
+    @Test
+    public void archiveApp_packageNotInstalled() {
+        when(mMockSystem.mocks().getSettings().getPackageLPr(eq(PACKAGE))).thenReturn(
+                null);
+
+        Exception e = assertThrows(
+                PackageManager.NameNotFoundException.class,
+                () -> mArchiveManager.archiveApp(PACKAGE, CALLER_PACKAGE, UserHandle.CURRENT,
+                        mIntentSender)
+        );
+        assertThat(e).hasMessageThat().isEqualTo(String.format("Package %s not found.", PACKAGE));
+    }
+
+    @Test
+    public void archiveApp_packageNotInstalledForUser() {
+        mPackageSetting.modifyUserState(UserHandle.CURRENT.getIdentifier()).setInstalled(false);
+
+        Exception e = assertThrows(
+                PackageManager.NameNotFoundException.class,
+                () -> mArchiveManager.archiveApp(PACKAGE, CALLER_PACKAGE, UserHandle.CURRENT,
+                        mIntentSender)
+        );
+        assertThat(e).hasMessageThat().isEqualTo(String.format("Package %s not found.", PACKAGE));
+    }
+
+    @Test
+    public void archiveApp_noInstallerFound() {
+        InstallSource otherInstallSource =
+                InstallSource.create(
+                        CALLER_PACKAGE,
+                        CALLER_PACKAGE,
+                        /* installerPackageName= */ null,
+                        Binder.getCallingUid(),
+                        /* updateOwnerPackageName= */ null,
+                        /* installerAttributionTag= */ null,
+                        /* packageSource= */ 0);
+        when(mPackageState.getInstallSource()).thenReturn(otherInstallSource);
+
+        Exception e = assertThrows(
+                SecurityException.class,
+                () -> mArchiveManager.archiveApp(PACKAGE, CALLER_PACKAGE, Process.myUserHandle(),
+                        mIntentSender)
+        );
+        assertThat(e).hasMessageThat().isEqualTo(
+                TextUtils.formatSimple("No installer found to archive app %s.",
+                        PACKAGE));
+    }
+
+    @Test
+    public void archiveApp_success() throws PackageManager.NameNotFoundException {
+        List<ArchiveState.ArchiveActivityInfo> activityInfos = new ArrayList<>();
+        for (LauncherActivityInfo mainActivity : createLauncherActivities()) {
+            // TODO(b/278553670) Extract and store launcher icons
+            ArchiveState.ArchiveActivityInfo activityInfo = new ArchiveState.ArchiveActivityInfo(
+                    mainActivity.getLabel().toString(),
+                    Path.of("/TODO"), null);
+            activityInfos.add(activityInfo);
+        }
+
+        mArchiveManager.archiveApp(PACKAGE, CALLER_PACKAGE, UserHandle.CURRENT, mIntentSender);
+        verify(mInstallerService).uninstall(
+                eq(new VersionedPackage(PACKAGE, PackageManager.VERSION_CODE_HIGHEST)),
+                eq(CALLER_PACKAGE), eq(DELETE_KEEP_DATA), eq(mIntentSender),
+                eq(UserHandle.CURRENT.getIdentifier()));
+        assertThat(mPackageSetting.readUserState(
+                UserHandle.CURRENT.getIdentifier()).getArchiveState()).isEqualTo(
+                new ArchiveState(activityInfos, CALLER_PACKAGE));
+    }
+
+    private static List<LauncherActivityInfo> createLauncherActivities() {
+        LauncherActivityInfo activity1 = mock(LauncherActivityInfo.class);
+        when(activity1.getLabel()).thenReturn("activity1");
+        LauncherActivityInfo activity2 = mock(LauncherActivityInfo.class);
+        when(activity2.getLabel()).thenReturn("activity2");
+        return List.of(activity1, activity2);
+    }
+
+    private PackageSetting createBasicPackageSetting() {
+        return new PackageSettingBuilder()
+                .setName(PACKAGE).setCodePath("/data/app/" + PACKAGE + "-randompath")
+                .setInstallState(UserHandle.CURRENT.getIdentifier(), /* installed= */ true)
+                .build();
+    }
+}
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/DeletePackageHelperTest.kt b/services/tests/mockingservicestests/src/com/android/server/pm/DeletePackageHelperTest.kt
index c197b34..d6a4d40 100644
--- a/services/tests/mockingservicestests/src/com/android/server/pm/DeletePackageHelperTest.kt
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/DeletePackageHelperTest.kt
@@ -16,9 +16,13 @@
 
 package com.android.server.pm
 
+import android.Manifest.permission.CONTROL_KEYGUARD
 import android.content.pm.PackageManager
+import android.content.pm.PackageManager.PERMISSION_DENIED
+import android.content.pm.PackageManager.PERMISSION_GRANTED
 import android.content.pm.UserInfo
 import android.os.Build
+import android.os.UserHandle.USER_SYSTEM
 import android.util.Log
 import com.android.server.testutils.any
 import com.android.server.testutils.spy
@@ -105,6 +109,8 @@
         whenever(PackageManagerServiceUtils.isSystemApp(ps)).thenReturn(true)
         whenever(mUserManagerInternal.getUserInfo(1)).thenReturn(
             UserInfo(1, "test", UserInfo.FLAG_ADMIN))
+        whenever(mPms.checkPermission(CONTROL_KEYGUARD, "a.data.package", USER_SYSTEM))
+            .thenReturn(PERMISSION_DENIED)
 
         val dph = DeletePackageHelper(mPms)
         val result = dph.deletePackageX("a.data.package", 1L, 1,
@@ -124,6 +130,8 @@
         whenever(mUserManagerInternal.getProfileParentId(userId)).thenReturn(parentId)
         whenever(mUserManagerInternal.getUserInfo(parentId)).thenReturn(
             UserInfo(userId, "testparent", UserInfo.FLAG_ADMIN))
+        whenever(mPms.checkPermission(CONTROL_KEYGUARD, "a.data.package", USER_SYSTEM))
+            .thenReturn(PERMISSION_DENIED)
 
         val dph = DeletePackageHelper(mPms)
         val result = dph.deletePackageX("a.data.package", 1L, userId,
@@ -138,6 +146,9 @@
         whenever(PackageManagerServiceUtils.isUpdatedSystemApp(ps)).thenReturn(true)
         whenever(mUserManagerInternal.getUserInfo(1)).thenReturn(UserInfo(1, "test", 0))
         whenever(mUserManagerInternal.getProfileParentId(1)).thenReturn(1)
+        whenever(PackageManagerServiceUtils.isSystemApp(ps)).thenReturn(true)
+        whenever(mPms.checkPermission(CONTROL_KEYGUARD, "a.data.package", USER_SYSTEM))
+            .thenReturn(PERMISSION_DENIED)
 
         val dph = DeletePackageHelper(mPms)
         val result = dph.deletePackageX("a.data.package", 1L, 1,
@@ -145,4 +156,18 @@
 
         assertThat(result).isEqualTo(PackageManager.DELETE_SUCCEEDED)
     }
+
+    @Test
+    fun deleteSystemPackageWithKeyguard_fails() {
+        val ps = mPms.mSettings.getPackageLPr("a.data.package")
+        whenever(PackageManagerServiceUtils.isSystemApp(ps)).thenReturn(true)
+        whenever(mPms.checkPermission(CONTROL_KEYGUARD, "a.data.package", USER_SYSTEM))
+            .thenReturn(PERMISSION_GRANTED)
+
+        val dph = DeletePackageHelper(mPms)
+        val result = dph.deletePackageX("a.data.package", 1L, 1,
+            PackageManager.DELETE_SYSTEM_APP, false)
+
+        assertThat(result).isEqualTo(PackageManager.DELETE_FAILED_INTERNAL_ERROR)
+    }
 }
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/PackageMonitorCallbackHelperTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/PackageMonitorCallbackHelperTest.java
new file mode 100644
index 0000000..f206333
--- /dev/null
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/PackageMonitorCallbackHelperTest.java
@@ -0,0 +1,311 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.pm;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.after;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Intent;
+import android.content.pm.PackageInstaller;
+import android.content.pm.PackageManager;
+import android.os.Binder;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IRemoteCallback;
+import android.os.Looper;
+import android.os.Process;
+import android.util.SparseArray;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import org.mockito.ArgumentCaptor;
+
+import java.util.ArrayList;
+
+/**
+ * A unit test for PackageMonitorCallbackHelper implementation.
+ */
+@RunWith(JUnit4.class)
+public class PackageMonitorCallbackHelperTest {
+
+    private static final String FAKE_PACKAGE_NAME = "com.android.server.pm.fakeapp";
+    private static final int FAKE_PACKAGE_UID = 123;
+    private static final int WAIT_CALLBACK_CALLED_IN_MS = 300;
+
+    private final Handler mHandler = new Handler(Looper.getMainLooper());
+    PackageMonitorCallbackHelper mPackageMonitorCallbackHelper;
+
+    @Rule
+    public final MockSystemRule mMockSystem = new MockSystemRule();
+
+    @Before
+    public void setup() {
+        when(mMockSystem.mocks().getInjector().getHandler()).thenReturn(mHandler);
+        mPackageMonitorCallbackHelper = new PackageMonitorCallbackHelper(
+                mMockSystem.mocks().getInjector());
+    }
+
+
+    @After
+    public void teardown() {
+        mPackageMonitorCallbackHelper = null;
+    }
+
+    @Test
+    public void testWithoutRegisterPackageMonitorCallback_callbackNotCalled() throws Exception {
+        IRemoteCallback callback = createMockPackageMonitorCallback();
+
+        mPackageMonitorCallbackHelper.notifyPackageMonitor(Intent.ACTION_PACKAGE_ADDED,
+                FAKE_PACKAGE_NAME, createFakeBundle(), new int[]{0} /* userIds */,
+                null /* instantUserIds */, null /* broadcastAllowList */);
+
+        verify(callback, after(WAIT_CALLBACK_CALLED_IN_MS).never()).sendResult(any());
+    }
+
+    @Test
+    public void testUnregisterPackageMonitorCallback_callbackShouldNotCalled() throws Exception {
+        IRemoteCallback callback = createMockPackageMonitorCallback();
+
+        mPackageMonitorCallbackHelper.registerPackageMonitorCallback(callback, 0 /* userId */,
+                Binder.getCallingUid());
+        mPackageMonitorCallbackHelper.notifyPackageMonitor(Intent.ACTION_PACKAGE_ADDED,
+                FAKE_PACKAGE_NAME, createFakeBundle(), new int[]{0}, null /* instantUserIds */,
+                null /* broadcastAllowList */);
+
+        verify(callback, after(WAIT_CALLBACK_CALLED_IN_MS).times(1)).sendResult(any());
+
+        reset(callback);
+        mPackageMonitorCallbackHelper.unregisterPackageMonitorCallback(callback);
+        mPackageMonitorCallbackHelper.notifyPackageMonitor(Intent.ACTION_PACKAGE_ADDED,
+                FAKE_PACKAGE_NAME, createFakeBundle(), new int[]{0} /* userIds */,
+                null /* instantUserIds */, null /* broadcastAllowList */);
+
+        verify(callback, after(WAIT_CALLBACK_CALLED_IN_MS).never()).sendResult(any());
+    }
+
+    @Test
+    public void testRegisterPackageMonitorCallback_callbackCalled() throws Exception {
+        IRemoteCallback callback = createMockPackageMonitorCallback();
+
+        mPackageMonitorCallbackHelper.registerPackageMonitorCallback(callback, 0 /* userId */,
+                Binder.getCallingUid());
+        mPackageMonitorCallbackHelper.notifyPackageMonitor(Intent.ACTION_PACKAGE_ADDED,
+                FAKE_PACKAGE_NAME, createFakeBundle(), new int[]{0} /* userIds */,
+                null /* instantUserIds */, null /* broadcastAllowList */);
+
+        ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
+        verify(callback, after(WAIT_CALLBACK_CALLED_IN_MS).times(1)).sendResult(
+                bundleCaptor.capture());
+        Bundle bundle = bundleCaptor.getValue();
+        Intent intent = bundle.getParcelable(
+                PackageManager.EXTRA_PACKAGE_MONITOR_CALLBACK_RESULT, Intent.class);
+        assertThat(intent).isNotNull();
+        assertThat(intent.getAction()).isEqualTo(Intent.ACTION_PACKAGE_ADDED);
+        assertThat(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1)).isEqualTo(0);
+    }
+
+    @Test
+    public void testRegisterPackageMonitorCallbackUserNotMatch_callbackShouldNotCalled()
+            throws Exception {
+        IRemoteCallback callback = createMockPackageMonitorCallback();
+
+        // Register for user 0
+        mPackageMonitorCallbackHelper.registerPackageMonitorCallback(callback, 0 /* userId */,
+                Binder.getCallingUid());
+        // Notify for user 10
+        mPackageMonitorCallbackHelper.notifyPackageMonitor(Intent.ACTION_PACKAGE_ADDED,
+                FAKE_PACKAGE_NAME, createFakeBundle(), new int[]{10} /* userIds */,
+                null /* instantUserIds */, null /* broadcastAllowList */);
+
+        verify(callback, after(WAIT_CALLBACK_CALLED_IN_MS).never()).sendResult(any());
+    }
+
+    @Test
+    public void testNotifyPackageChanged_callbackCalled() throws Exception {
+        IRemoteCallback callback = createMockPackageMonitorCallback();
+
+        ArrayList<String> components = new ArrayList<>();
+        String component1 = FAKE_PACKAGE_NAME + "/.Component1";
+        components.add(component1);
+        mPackageMonitorCallbackHelper.registerPackageMonitorCallback(callback, 0 /* userId */,
+                Binder.getCallingUid());
+        mPackageMonitorCallbackHelper.notifyPackageChanged(FAKE_PACKAGE_NAME,
+                false /* dontKillApp */, components, FAKE_PACKAGE_UID, null /* reason */,
+                new int[]{0} /* userIds */, null /* instantUserIds */,
+                null /* broadcastAllowList */);
+
+        ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
+        verify(callback, after(WAIT_CALLBACK_CALLED_IN_MS).times(1)).sendResult(
+                bundleCaptor.capture());
+        Bundle bundle = bundleCaptor.getValue();
+        Intent intent = bundle.getParcelable(
+                PackageManager.EXTRA_PACKAGE_MONITOR_CALLBACK_RESULT, Intent.class);
+        assertThat(intent).isNotNull();
+        assertThat(intent.getAction()).isEqualTo(Intent.ACTION_PACKAGE_CHANGED);
+        assertThat(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1)).isEqualTo(0);
+        assertThat(intent.getStringExtra(Intent.EXTRA_REASON)).isNull();
+        assertThat(intent.getBooleanExtra(Intent.EXTRA_DONT_KILL_APP, true)).isFalse();
+        assertThat(intent.getIntExtra(Intent.EXTRA_UID, -1)).isEqualTo(FAKE_PACKAGE_UID);
+        String[] result = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST);
+        assertThat(result).isNotNull();
+        assertThat(result.length).isEqualTo(1);
+        assertThat(result[0]).isEqualTo(component1);
+    }
+
+    @Test
+    public void testNotifyPackageAddedForNewUsers_callbackCalled() throws Exception {
+        IRemoteCallback callback = createMockPackageMonitorCallback();
+
+        mPackageMonitorCallbackHelper.registerPackageMonitorCallback(callback, 0 /* userId */,
+                Binder.getCallingUid());
+        mPackageMonitorCallbackHelper.notifyPackageAddedForNewUsers(FAKE_PACKAGE_NAME,
+                FAKE_PACKAGE_UID, new int[]{0} /* userIds */, new int[0],
+                PackageInstaller.DATA_LOADER_TYPE_STREAMING, null /* broadcastAllowList */);
+
+        ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
+        verify(callback, after(WAIT_CALLBACK_CALLED_IN_MS).times(1)).sendResult(
+                bundleCaptor.capture());
+        Bundle bundle = bundleCaptor.getValue();
+        Intent intent = bundle.getParcelable(
+                PackageManager.EXTRA_PACKAGE_MONITOR_CALLBACK_RESULT, Intent.class);
+        assertThat(intent).isNotNull();
+        assertThat(intent.getAction()).isEqualTo(Intent.ACTION_PACKAGE_ADDED);
+        assertThat(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1)).isEqualTo(0);
+        assertThat(intent.getIntExtra(PackageInstaller.EXTRA_DATA_LOADER_TYPE, -1)).isEqualTo(
+                PackageInstaller.DATA_LOADER_TYPE_STREAMING);
+        assertThat(intent.getIntExtra(Intent.EXTRA_UID, -1)).isEqualTo(FAKE_PACKAGE_UID);
+    }
+
+    @Test
+    public void testNotifyResourcesChanged_callbackCalled() throws Exception {
+        IRemoteCallback callback = createMockPackageMonitorCallback();
+
+        mPackageMonitorCallbackHelper.registerPackageMonitorCallback(callback, 0 /* userId */,
+                Binder.getCallingUid());
+        mPackageMonitorCallbackHelper.notifyResourcesChanged(true /* mediaStatus */,
+                true /* replacing */, new String[]{FAKE_PACKAGE_NAME},
+                new int[]{FAKE_PACKAGE_UID} /* uids */);
+
+        ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
+        verify(callback, after(WAIT_CALLBACK_CALLED_IN_MS).times(1)).sendResult(
+                bundleCaptor.capture());
+        Bundle bundle = bundleCaptor.getValue();
+        Intent intent = bundle.getParcelable(
+                PackageManager.EXTRA_PACKAGE_MONITOR_CALLBACK_RESULT, Intent.class);
+        assertThat(intent).isNotNull();
+        assertThat(intent.getAction()).isEqualTo(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
+        assertThat(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1)).isEqualTo(0);
+        assertThat(intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)).isTrue();
+
+        int[] uids = intent.getIntArrayExtra(Intent.EXTRA_CHANGED_UID_LIST);
+        assertThat(uids).isNotNull();
+        assertThat(uids.length).isEqualTo(1);
+        assertThat(uids[0]).isEqualTo(FAKE_PACKAGE_UID);
+
+        String[] pkgNames = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
+        assertThat(pkgNames).isNotNull();
+        assertThat(pkgNames.length).isEqualTo(1);
+        assertThat(pkgNames[0]).isEqualTo(FAKE_PACKAGE_NAME);
+    }
+
+    @Test
+    public void testPackageMonitorCallback_onUserRemoved_callbackNotCalled() throws Exception {
+        IRemoteCallback callback = createMockPackageMonitorCallback();
+        mPackageMonitorCallbackHelper.registerPackageMonitorCallback(callback, 10 /* userId */,
+                Binder.getCallingUid());
+
+        mPackageMonitorCallbackHelper.onUserRemoved(10);
+        mPackageMonitorCallbackHelper.notifyPackageMonitor(Intent.ACTION_PACKAGE_ADDED,
+                FAKE_PACKAGE_NAME, createFakeBundle(), new int[]{10} /* userIds */,
+                null /* instantUserIds */, null /* broadcastAllowList */);
+
+        verify(callback, after(WAIT_CALLBACK_CALLED_IN_MS).never()).sendResult(any());
+    }
+
+    @Test
+    public void testRegisterPackageMonitorCallbackInAllowList_callbackShouldCalled()
+            throws Exception {
+        IRemoteCallback callback = createMockPackageMonitorCallback();
+        SparseArray<int[]> broadcastAllowList = new SparseArray<>();
+        broadcastAllowList.put(0, new int[] {Binder.getCallingUid()});
+
+        mPackageMonitorCallbackHelper.registerPackageMonitorCallback(callback, 0 /* userId */,
+                Binder.getCallingUid());
+        mPackageMonitorCallbackHelper.notifyPackageMonitor(Intent.ACTION_PACKAGE_ADDED,
+                FAKE_PACKAGE_NAME, createFakeBundle(), new int[]{0} /* userIds */,
+                null /* instantUserIds */, broadcastAllowList);
+
+        verify(callback, after(WAIT_CALLBACK_CALLED_IN_MS).times(1)).sendResult(any());
+    }
+
+    @Test
+    public void testRegisterPackageMonitorCallbackNotInAllowList_callbackShouldNotCalled()
+            throws Exception {
+        IRemoteCallback callback = createMockPackageMonitorCallback();
+        SparseArray<int[]> broadcastAllowList = new SparseArray<>();
+        broadcastAllowList.put(0, new int[] {12345});
+
+        mPackageMonitorCallbackHelper.registerPackageMonitorCallback(callback, 0 /* userId */,
+                Binder.getCallingUid());
+        mPackageMonitorCallbackHelper.notifyPackageMonitor(Intent.ACTION_PACKAGE_ADDED,
+                FAKE_PACKAGE_NAME, createFakeBundle(), new int[]{0} /* userIds */,
+                null /* instantUserIds */, broadcastAllowList);
+
+        verify(callback, after(WAIT_CALLBACK_CALLED_IN_MS).never()).sendResult(any());
+    }
+
+    @Test
+    public void testRegisterPackageMonitorCallbackNotInAllowListSystemUid_callbackShouldCalled()
+            throws Exception {
+        IRemoteCallback callback = createMockPackageMonitorCallback();
+        SparseArray<int[]> broadcastAllowList = new SparseArray<>();
+        broadcastAllowList.put(0, new int[] {12345});
+
+        mPackageMonitorCallbackHelper.registerPackageMonitorCallback(callback, 0 /* userId */,
+                Process.SYSTEM_UID);
+        mPackageMonitorCallbackHelper.notifyPackageMonitor(Intent.ACTION_PACKAGE_ADDED,
+                FAKE_PACKAGE_NAME, createFakeBundle(), new int[]{0} /* userIds */,
+                null /* instantUserIds */, broadcastAllowList);
+
+        verify(callback, after(WAIT_CALLBACK_CALLED_IN_MS).times(1)).sendResult(any());
+    }
+
+    private IRemoteCallback createMockPackageMonitorCallback() {
+        return spy(new IRemoteCallback.Stub() {
+            @Override
+            public void sendResult(Bundle data) {
+                // no op
+            }
+        });
+    }
+
+    private Bundle createFakeBundle() {
+        Bundle bundle = new Bundle();
+        bundle.putInt(Intent.EXTRA_UID, FAKE_PACKAGE_UID);
+        return bundle;
+    }
+}
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java
index 60c15fe..d32b6be 100644
--- a/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java
@@ -15,12 +15,21 @@
  */
 package com.android.server.pm;
 
+import static android.os.UserManager.DISALLOW_OUTGOING_CALLS;
+import static android.os.UserManager.DISALLOW_SMS;
+import static android.os.UserManager.DISALLOW_USER_SWITCH;
+import static android.os.UserManager.USER_TYPE_FULL_SECONDARY;
+
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
 
+import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.junit.Assert.assertThrows;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
@@ -30,6 +39,7 @@
 import android.content.Context;
 import android.content.pm.PackageManagerInternal;
 import android.content.pm.UserInfo;
+import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.os.storage.StorageManager;
@@ -88,6 +98,7 @@
     public final ExtendedMockitoRule mExtendedMockitoRule = new ExtendedMockitoRule.Builder(this)
             .spyStatic(UserManager.class)
             .spyStatic(LocalServices.class)
+            .spyStatic(SystemProperties.class)
             .mockStatic(Settings.Global.class)
             .build();
 
@@ -402,6 +413,126 @@
                 .isEqualTo(USER_ID);
     }
 
+    @Test
+    public void assertIsUserSwitcherEnabledOnMultiUserSettings() throws Exception {
+        resetUserSwitcherEnabled();
+
+        mockUserSwitcherEnabled(false);
+        assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isFalse();
+
+        mockUserSwitcherEnabled(true);
+        assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isTrue();
+    }
+
+    @Test
+    public void assertIsUserSwitcherEnabledOnMaxSupportedUsers()  throws Exception {
+        resetUserSwitcherEnabled();
+
+        mockMaxSupportedUsers(/* maxUsers= */ 1);
+        assertThat(UserManager.supportsMultipleUsers()).isFalse();
+        assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isFalse();
+
+        mockMaxSupportedUsers(/* maxUsers= */ 8);
+        assertThat(UserManager.supportsMultipleUsers()).isTrue();
+        assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isTrue();
+    }
+
+    @Test
+    public void assertIsUserSwitcherEnabled()  throws Exception {
+        resetUserSwitcherEnabled();
+
+        mockMaxSupportedUsers(/* maxUsers= */ 8);
+        assertThat(mUms.isUserSwitcherEnabled(true, USER_ID)).isTrue();
+
+        mockUserSwitcherEnabled(false);
+        assertThat(mUms.isUserSwitcherEnabled(true, USER_ID)).isFalse();
+
+        mockUserSwitcherEnabled(true);
+        assertThat(mUms.isUserSwitcherEnabled(false, USER_ID)).isTrue();
+
+        mUms.setUserRestriction(DISALLOW_USER_SWITCH, true, USER_ID);
+        assertThat(mUms.isUserSwitcherEnabled(false, USER_ID)).isFalse();
+
+        mUms.setUserRestriction(DISALLOW_USER_SWITCH, false, USER_ID);
+        mockMaxSupportedUsers(1);
+        assertThat(mUms.isUserSwitcherEnabled(true, USER_ID)).isFalse();
+    }
+
+    @Test
+    public void assertIsUserSwitcherEnabledOnShowMultiuserUI()  throws Exception {
+        resetUserSwitcherEnabled();
+
+        mockShowMultiuserUI(/* show= */ false);
+        assertThat(UserManager.supportsMultipleUsers()).isFalse();
+        assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isFalse();
+
+        mockShowMultiuserUI(/* show= */ true);
+        assertThat(UserManager.supportsMultipleUsers()).isTrue();
+        assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isTrue();
+    }
+
+    @Test
+    public void assertIsUserSwitcherEnabledOnUserRestrictions() throws Exception {
+        resetUserSwitcherEnabled();
+
+        mUms.setUserRestriction(DISALLOW_USER_SWITCH, true, USER_ID);
+        assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isFalse();
+
+        mUms.setUserRestriction(DISALLOW_USER_SWITCH, false, USER_ID);
+        assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isTrue();
+    }
+
+    @Test
+    public void assertIsUserSwitcherEnabledOnDemoMode() throws Exception {
+        resetUserSwitcherEnabled();
+
+        mockDeviceDemoMode(/* enabled= */ true);
+        assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isFalse();
+
+        mockDeviceDemoMode(/* enabled= */ false);
+        assertThat(mUms.isUserSwitcherEnabled(USER_ID)).isTrue();
+    }
+
+    @Test
+    public void testMainUser_hasNoCallsOrSMSRestrictionsByDefault() {
+        UserInfo mainUser = mUms.createUserWithThrow("main user", USER_TYPE_FULL_SECONDARY,
+                UserInfo.FLAG_FULL | UserInfo.FLAG_MAIN);
+
+        assertThat(mUms.hasUserRestriction(DISALLOW_OUTGOING_CALLS, mainUser.id))
+                .isFalse();
+        assertThat(mUms.hasUserRestriction(DISALLOW_SMS, mainUser.id))
+                .isFalse();
+    }
+
+    private void resetUserSwitcherEnabled() {
+        mUms.putUserInfo(new UserInfo(USER_ID, "Test User", 0));
+        mUms.setUserRestriction(DISALLOW_USER_SWITCH, false, USER_ID);
+        mockUserSwitcherEnabled(/* enabled= */ true);
+        mockDeviceDemoMode(/* enabled= */ false);
+        mockMaxSupportedUsers(/* maxUsers= */ 8);
+        mockShowMultiuserUI(/* show= */ true);
+    }
+
+    private void mockUserSwitcherEnabled(boolean enabled) {
+        doReturn(enabled ? 1 : 0).when(() -> Settings.Global.getInt(
+                any(), eq(android.provider.Settings.Global.USER_SWITCHER_ENABLED), anyInt()));
+    }
+
+    private void mockDeviceDemoMode(boolean enabled) {
+        doReturn(enabled ? 1 : 0).when(() -> Settings.Global.getInt(
+                any(), eq(android.provider.Settings.Global.DEVICE_DEMO_MODE), anyInt()));
+    }
+
+    private void mockMaxSupportedUsers(int maxUsers) {
+        doReturn(maxUsers).when(() ->
+                SystemProperties.getInt(eq("fw.max_users"), anyInt()));
+    }
+
+    private void mockShowMultiuserUI(boolean show) {
+        doReturn(show).when(() ->
+                SystemProperties.getBoolean(eq("fw.show_multiuserui"), anyBoolean()));
+    }
+
     private void mockCurrentUser(@UserIdInt int userId) {
         mockGetLocalService(ActivityManagerInternal.class, mActivityManagerInternal);
 
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorMUPANDTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorMUPANDTest.java
index 8979585..6e248b3 100644
--- a/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorMUPANDTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorMUPANDTest.java
@@ -55,7 +55,7 @@
         AsyncUserVisibilityListener listener = addListenerForEvents(onVisible(visibleBgUserId));
 
         int result = mMediator.assignUserToDisplayOnStart(visibleBgUserId, visibleBgUserId,
-                BG_VISIBLE, DEFAULT_DISPLAY);
+                BG_VISIBLE, DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE);
         expectVisibleUsers(currentUserId, visibleBgUserId);
 
@@ -76,7 +76,7 @@
 
         // Make sure another user cannot be started on default display
         int result2 = mMediator.assignUserToDisplayOnStart(otherUserId, otherUserId, BG_VISIBLE,
-                DEFAULT_DISPLAY);
+                DEFAULT_DISPLAY, false);
         assertStartUserResult(result2, USER_ASSIGNMENT_RESULT_FAILURE,
                 "when user (%d) is starting on default display after it was started by user %d",
                 otherUserId, visibleBgUserId);
@@ -99,7 +99,7 @@
         startForegroundUser(currentUserId);
 
         int result = mMediator.assignUserToDisplayOnStart(visibleBgUserId, visibleBgUserId,
-                BG_VISIBLE, DEFAULT_DISPLAY);
+                BG_VISIBLE, DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE);
         expectVisibleUsers(currentUserId, visibleBgUserId);
 
@@ -120,7 +120,7 @@
 
         // Make sure another user cannot be started on default display
         int result2 = mMediator.assignUserToDisplayOnStart(otherUserId, otherUserId, BG_VISIBLE,
-                DEFAULT_DISPLAY);
+                DEFAULT_DISPLAY, false);
         assertStartUserResult(result2, USER_ASSIGNMENT_RESULT_FAILURE,
                 "when user (%d) is starting on default display after it was started by user %d",
                 otherUserId, visibleBgUserId);
@@ -137,7 +137,7 @@
         startUserInSecondaryDisplay(PARENT_USER_ID, OTHER_SECONDARY_DISPLAY_ID);
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID,
-                BG_VISIBLE, DEFAULT_DISPLAY);
+                BG_VISIBLE, DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(PROFILE_USER_ID);
@@ -159,7 +159,7 @@
         startUserInSecondaryDisplay(PARENT_USER_ID, DEFAULT_DISPLAY);
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID,
-                BG_VISIBLE, DEFAULT_DISPLAY);
+                BG_VISIBLE, DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE);
 
         // Assert parent user visibility
@@ -188,7 +188,7 @@
         startUserInSecondaryDisplay(PARENT_USER_ID, DEFAULT_DISPLAY);
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID, BG,
-                DEFAULT_DISPLAY);
+                DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_INVISIBLE);
 
         // Assert parent user visibility
@@ -213,7 +213,7 @@
         AsyncUserVisibilityListener listener = addListenerForNoEvents();
 
         int result = mMediator.assignUserToDisplayOnStart(currentUserId, currentUserId,
-                BG_VISIBLE, DEFAULT_DISPLAY);
+                BG_VISIBLE, DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_ALREADY_VISIBLE);
 
         // Assert current user visibility
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorSUSDTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorSUSDTest.java
index c195064..9e2829f 100644
--- a/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorSUSDTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorSUSDTest.java
@@ -55,7 +55,7 @@
                 onVisible(USER_ID));
 
         int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, FG,
-                DEFAULT_DISPLAY);
+                DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE);
         expectUserCannotBeUnassignedFromDisplay(USER_ID, DEFAULT_DISPLAY);
 
@@ -87,7 +87,7 @@
         startForegroundUser(previousCurrentUserId);
 
         int result = mMediator.assignUserToDisplayOnStart(currentUserId, currentUserId, FG,
-                DEFAULT_DISPLAY);
+                DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE);
         expectUserCannotBeUnassignedFromDisplay(currentUserId, DEFAULT_DISPLAY);
 
@@ -123,7 +123,7 @@
         startForegroundUser(PARENT_USER_ID);
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID,
-                BG_VISIBLE, DEFAULT_DISPLAY);
+                BG_VISIBLE, DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE);
         expectUserCannotBeUnassignedFromDisplay(PROFILE_USER_ID, DEFAULT_DISPLAY);
 
@@ -144,7 +144,7 @@
         AsyncUserVisibilityListener listener = addListenerForNoEvents();
 
         int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, BG_VISIBLE,
-                SECONDARY_DISPLAY_ID);
+                SECONDARY_DISPLAY_ID, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(USER_ID);
@@ -154,4 +154,27 @@
 
         listener.verify();
     }
+
+    @Test
+    public void testStartVisibleBgProfile_communalProfile() throws Exception {
+        AsyncUserVisibilityListener listener = addListenerForEvents(
+                onVisible(PROFILE_USER_ID));
+
+        int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID,
+                /* profileGroup= */ -12345,
+                BG_VISIBLE, DEFAULT_DISPLAY,
+                /* isCommunalProfile= */ true);
+        assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE);
+        expectUserCannotBeUnassignedFromDisplay(PROFILE_USER_ID, DEFAULT_DISPLAY);
+
+        expectUserIsVisible(PROFILE_USER_ID);
+        expectUserIsNotVisibleOnDisplay(PROFILE_USER_ID, INVALID_DISPLAY);
+        expectUserIsVisibleOnDisplay(PROFILE_USER_ID, DEFAULT_DISPLAY);
+        expectUserIsVisibleOnDisplay(PROFILE_USER_ID, SECONDARY_DISPLAY_ID);
+        expectVisibleUsers(INITIAL_CURRENT_USER_ID, PROFILE_USER_ID);
+
+        expectDisplayAssignedToUser(PROFILE_USER_ID, DEFAULT_DISPLAY);
+
+        listener.verify();
+    }
 }
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorTestCase.java b/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorTestCase.java
index 386fd3e..2f27436 100644
--- a/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorTestCase.java
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorTestCase.java
@@ -148,27 +148,28 @@
     @Test
     public final void testAssignUserToDisplayOnStart_invalidUserIds() {
         assertThrows(IllegalArgumentException.class, () -> mMediator
-                .assignUserToDisplayOnStart(USER_NULL, USER_ID, FG, DEFAULT_DISPLAY));
+                .assignUserToDisplayOnStart(USER_NULL, USER_ID, FG, DEFAULT_DISPLAY, false));
         assertThrows(IllegalArgumentException.class, () -> mMediator
-                .assignUserToDisplayOnStart(USER_ALL, USER_ID, FG, DEFAULT_DISPLAY));
+                .assignUserToDisplayOnStart(USER_ALL, USER_ID, FG, DEFAULT_DISPLAY, false));
         assertThrows(IllegalArgumentException.class, () -> mMediator
-                .assignUserToDisplayOnStart(USER_CURRENT, USER_ID, FG, DEFAULT_DISPLAY));
+                .assignUserToDisplayOnStart(USER_CURRENT, USER_ID, FG, DEFAULT_DISPLAY, false));
         assertThrows(IllegalArgumentException.class, () -> mMediator
-                .assignUserToDisplayOnStart(USER_CURRENT_OR_SELF, USER_ID, FG, DEFAULT_DISPLAY));
+                .assignUserToDisplayOnStart(USER_CURRENT_OR_SELF, USER_ID, FG, DEFAULT_DISPLAY,
+                        false));
     }
 
     @Test
     public final void testAssignUserToDisplayOnStart_invalidUserStartMode() {
         assertThrows(IllegalArgumentException.class, () -> mMediator
-                .assignUserToDisplayOnStart(USER_ID, USER_ID, 666, DEFAULT_DISPLAY));
+                .assignUserToDisplayOnStart(USER_ID, USER_ID, 666, DEFAULT_DISPLAY, false));
     }
 
     @Test
     public final void testStartFgUser_onSecondaryDisplay() throws Exception {
         AsyncUserVisibilityListener listener = addListenerForNoEvents();
 
-        int result =
-                mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, FG, SECONDARY_DISPLAY_ID);
+        int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, FG,
+                SECONDARY_DISPLAY_ID, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(USER_ID);
@@ -182,7 +183,8 @@
     public final void testStartBgUser_onDefaultDisplay() throws Exception {
         AsyncUserVisibilityListener listener = addListenerForNoEvents();
 
-        int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, BG, DEFAULT_DISPLAY);
+        int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, BG, DEFAULT_DISPLAY,
+                false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_INVISIBLE);
 
         expectUserIsNotVisibleAtAll(USER_ID);
@@ -199,7 +201,7 @@
         AsyncUserVisibilityListener listener = addListenerForNoEvents();
 
         int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, BG_VISIBLE,
-                DEFAULT_DISPLAY);
+                DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(USER_ID);
@@ -215,7 +217,7 @@
         AsyncUserVisibilityListener listener = addListenerForNoEvents();
 
         int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, BG,
-                SECONDARY_DISPLAY_ID);
+                SECONDARY_DISPLAY_ID, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(USER_ID);
@@ -236,7 +238,7 @@
         startForegroundUser(USER_ID);
 
         int result = mMediator.assignUserToDisplayOnStart(USER_SYSTEM, USER_SYSTEM, BG,
-                SECONDARY_DISPLAY_ID);
+                SECONDARY_DISPLAY_ID, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(USER_SYSTEM);
@@ -297,7 +299,7 @@
         AsyncUserVisibilityListener listener = addListenerForNoEvents();
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID,
-                BG_VISIBLE, DEFAULT_DISPLAY);
+                BG_VISIBLE, DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(PROFILE_USER_ID);
@@ -313,7 +315,7 @@
         startBackgroundUser(PARENT_USER_ID);
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID,
-                BG_VISIBLE, DEFAULT_DISPLAY);
+                BG_VISIBLE, DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(PROFILE_USER_ID);
@@ -332,7 +334,7 @@
         AsyncUserVisibilityListener listener = addListenerForNoEvents();
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID,
-                BG_VISIBLE, SECONDARY_DISPLAY_ID);
+                BG_VISIBLE, SECONDARY_DISPLAY_ID, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(PROFILE_USER_ID);
@@ -352,7 +354,7 @@
         AsyncUserVisibilityListener listener = addListenerForNoEvents();
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID, BG,
-                DEFAULT_DISPLAY);
+                DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_INVISIBLE);
 
         expectUserIsNotVisibleAtAll(PROFILE_USER_ID);
@@ -368,7 +370,7 @@
         startBackgroundUser(PARENT_USER_ID);
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID, BG,
-                DEFAULT_DISPLAY);
+                DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_INVISIBLE);
 
         expectUserIsNotVisibleAtAll(PROFILE_USER_ID);
@@ -386,7 +388,7 @@
         AsyncUserVisibilityListener listener = addListenerForNoEvents();
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID, BG,
-                SECONDARY_DISPLAY_ID);
+                SECONDARY_DISPLAY_ID, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(PROFILE_USER_ID);
@@ -405,7 +407,7 @@
         AsyncUserVisibilityListener listener = addListenerForNoEvents();
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID, FG,
-                DEFAULT_DISPLAY);
+                DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(PROFILE_USER_ID);
@@ -424,7 +426,7 @@
         AsyncUserVisibilityListener listener = addListenerForNoEvents();
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID, FG,
-                SECONDARY_DISPLAY_ID);
+                SECONDARY_DISPLAY_ID, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(PROFILE_USER_ID);
@@ -482,7 +484,8 @@
      */
     protected void startForegroundUser(@UserIdInt int userId) {
         Log.d(TAG, "startForegroundUSer(" + userId + ")");
-        int result = mMediator.assignUserToDisplayOnStart(userId, userId, FG, DEFAULT_DISPLAY);
+        int result = mMediator.assignUserToDisplayOnStart(userId, userId, FG, DEFAULT_DISPLAY,
+                false);
         if (result != USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE) {
             throw new IllegalStateException("Failed to start foreground user " + userId
                     + ": mediator returned " + userAssignmentResultToString(result));
@@ -498,7 +501,8 @@
      */
     protected void startBackgroundUser(@UserIdInt int userId) {
         Log.d(TAG, "startBackgroundUser(" + userId + ")");
-        int result = mMediator.assignUserToDisplayOnStart(userId, userId, BG, DEFAULT_DISPLAY);
+        int result = mMediator.assignUserToDisplayOnStart(userId, userId, BG, DEFAULT_DISPLAY,
+                false);
         if (result != USER_ASSIGNMENT_RESULT_SUCCESS_INVISIBLE) {
             throw new IllegalStateException("Failed to start background user " + userId
                     + ": mediator returned " + userAssignmentResultToString(result));
@@ -520,7 +524,7 @@
                 + " its parent (" + PARENT_USER_ID + ") on foreground");
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID,
-                BG_VISIBLE, DEFAULT_DISPLAY);
+                BG_VISIBLE, DEFAULT_DISPLAY, false);
         if (result != USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE) {
             throw new IllegalStateException("Failed to start profile user " + PROFILE_USER_ID
                     + ": mediator returned " + userAssignmentResultToString(result));
@@ -536,7 +540,8 @@
      */
     protected final void startUserInSecondaryDisplay(@UserIdInt int userId, int displayId) {
         Log.d(TAG, "startUserInSecondaryDisplay(" + userId + ", " + displayId + ")");
-        int result = mMediator.assignUserToDisplayOnStart(userId, userId, BG_VISIBLE, displayId);
+        int result = mMediator.assignUserToDisplayOnStart(userId, userId, BG_VISIBLE, displayId,
+                false);
         if (result != USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE) {
             throw new IllegalStateException("Failed to startuser " + userId
                     + " on background: mediator returned " + userAssignmentResultToString(result));
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorVisibleBackgroundUserTestCase.java b/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorVisibleBackgroundUserTestCase.java
index 08b094b..065f29b 100644
--- a/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorVisibleBackgroundUserTestCase.java
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/UserVisibilityMediatorVisibleBackgroundUserTestCase.java
@@ -51,7 +51,7 @@
                 onVisible(USER_ID));
 
         int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, FG,
-                DEFAULT_DISPLAY);
+                DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE);
         expectUserCannotBeUnassignedFromDisplay(USER_ID, DEFAULT_DISPLAY);
 
@@ -85,7 +85,7 @@
         startForegroundUser(previousCurrentUserId);
 
         int result = mMediator.assignUserToDisplayOnStart(currentUserId, currentUserId, FG,
-                DEFAULT_DISPLAY);
+                DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE);
         expectUserCannotBeUnassignedFromDisplay(currentUserId, DEFAULT_DISPLAY);
 
@@ -112,7 +112,8 @@
     public final void testStartFgUser_onInvalidDisplay() throws Exception {
         AsyncUserVisibilityListener listener = addListenerForNoEvents();
 
-        int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, FG, INVALID_DISPLAY);
+        int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, FG, INVALID_DISPLAY,
+                false);
 
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
@@ -127,7 +128,7 @@
         AsyncUserVisibilityListener listener = addListenerForNoEvents();
 
         int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, BG_VISIBLE,
-                INVALID_DISPLAY);
+                INVALID_DISPLAY, false);
 
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
@@ -145,7 +146,7 @@
         AsyncUserVisibilityListener listener = addListenerForEvents(onVisible(USER_ID));
 
         int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, BG_VISIBLE,
-                SECONDARY_DISPLAY_ID);
+                SECONDARY_DISPLAY_ID, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE);
         expectUserCannotBeUnassignedFromDisplay(USER_ID, SECONDARY_DISPLAY_ID);
 
@@ -182,7 +183,7 @@
         expectUserIsNotVisibleOnDisplay("before", PROFILE_USER_ID, SECONDARY_DISPLAY_ID);
 
         int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, BG_VISIBLE,
-                SECONDARY_DISPLAY_ID);
+                SECONDARY_DISPLAY_ID, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE);
 
         expectUserIsNotVisibleOnDisplay("after", PARENT_USER_ID, SECONDARY_DISPLAY_ID);
@@ -196,7 +197,7 @@
         startUserInSecondaryDisplay(OTHER_USER_ID, SECONDARY_DISPLAY_ID);
 
         int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, BG_VISIBLE,
-                SECONDARY_DISPLAY_ID);
+                SECONDARY_DISPLAY_ID, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(USER_ID);
@@ -224,7 +225,7 @@
         assertUserCanBeAssignedExtraDisplay(USER_ID, OTHER_SECONDARY_DISPLAY_ID);
 
         int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, BG_VISIBLE,
-                SECONDARY_DISPLAY_ID);
+                SECONDARY_DISPLAY_ID, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_ALREADY_VISIBLE);
 
         // Run same assertions above
@@ -247,7 +248,7 @@
         startUserInSecondaryDisplay(USER_ID, OTHER_SECONDARY_DISPLAY_ID);
 
         int result = mMediator.assignUserToDisplayOnStart(USER_ID, USER_ID, BG_VISIBLE,
-                SECONDARY_DISPLAY_ID);
+                SECONDARY_DISPLAY_ID, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsVisible(USER_ID);
@@ -284,7 +285,7 @@
         startForegroundUser(PARENT_USER_ID);
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID,
-                BG_VISIBLE, DEFAULT_DISPLAY);
+                BG_VISIBLE, DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_VISIBLE);
         expectUserCannotBeUnassignedFromDisplay(PROFILE_USER_ID, DEFAULT_DISPLAY);
 
@@ -310,7 +311,7 @@
         startUserInSecondaryDisplay(PARENT_USER_ID, OTHER_SECONDARY_DISPLAY_ID);
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID,
-                BG_VISIBLE, DEFAULT_DISPLAY);
+                BG_VISIBLE, DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(PROFILE_USER_ID);
@@ -331,7 +332,7 @@
         startUserInSecondaryDisplay(PARENT_USER_ID, OTHER_SECONDARY_DISPLAY_ID);
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID,
-                BG_VISIBLE, DEFAULT_DISPLAY);
+                BG_VISIBLE, DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_FAILURE);
 
         expectUserIsNotVisibleAtAll(PROFILE_USER_ID);
@@ -351,7 +352,7 @@
         startUserInSecondaryDisplay(PARENT_USER_ID, OTHER_SECONDARY_DISPLAY_ID);
 
         int result = mMediator.assignUserToDisplayOnStart(PROFILE_USER_ID, PARENT_USER_ID, BG,
-                DEFAULT_DISPLAY);
+                DEFAULT_DISPLAY, false);
         assertStartUserResult(result, USER_ASSIGNMENT_RESULT_SUCCESS_INVISIBLE);
 
         expectUserIsNotVisibleAtAll(PROFILE_USER_ID);
diff --git a/services/tests/mockingservicestests/src/com/android/server/power/PowerManagerServiceMockingTest.java b/services/tests/mockingservicestests/src/com/android/server/power/PowerManagerServiceMockingTest.java
deleted file mode 100644
index 0f2c27c..0000000
--- a/services/tests/mockingservicestests/src/com/android/server/power/PowerManagerServiceMockingTest.java
+++ /dev/null
@@ -1,316 +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.server.power;
-
-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.anyString;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.app.ActivityManagerInternal;
-import android.attention.AttentionManagerInternal;
-import android.content.Context;
-import android.content.ContextWrapper;
-import android.content.res.Resources;
-import android.hardware.SensorManager;
-import android.hardware.devicestate.DeviceStateManager;
-import android.hardware.devicestate.DeviceStateManager.DeviceStateCallback;
-import android.hardware.display.AmbientDisplayConfiguration;
-import android.hardware.display.DisplayManagerInternal;
-import android.os.BatteryManagerInternal;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.PowerManager;
-import android.os.PowerSaveState;
-import android.os.test.TestLooper;
-import android.provider.Settings;
-import android.service.dreams.DreamManagerInternal;
-import android.test.mock.MockContentResolver;
-import android.view.Display;
-import android.view.DisplayInfo;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.internal.app.IBatteryStats;
-import com.android.internal.util.test.FakeSettingsProvider;
-import com.android.server.LocalServices;
-import com.android.server.SystemService;
-import com.android.server.lights.LightsManager;
-import com.android.server.policy.WindowManagerPolicy;
-import com.android.server.power.PowerManagerService.BatteryReceiver;
-import com.android.server.power.PowerManagerService.Injector;
-import com.android.server.power.PowerManagerService.NativeWrapper;
-import com.android.server.power.PowerManagerService.UserSwitchedReceiver;
-import com.android.server.power.batterysaver.BatterySaverController;
-import com.android.server.power.batterysaver.BatterySaverPolicy;
-import com.android.server.power.batterysaver.BatterySaverStateMachine;
-import com.android.server.power.batterysaver.BatterySavingStats;
-import com.android.server.testutils.OffsettableClock;
-
-import java.util.concurrent.Executor;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-/**
- * Tests for {@link com.android.server.power.PowerManagerService}.
- *
- * Build/Install/Run:
- *  atest FrameworksServicesTests:PowerManagerServiceMockingTest
- */
-public class PowerManagerServiceMockingTest {
-    private static final String SYSTEM_PROPERTY_QUIESCENT = "ro.boot.quiescent";
-    private static final String SYSTEM_PROPERTY_REBOOT_REASON = "sys.boot.reason";
-
-    private static final float BRIGHTNESS_FACTOR = 0.7f;
-    private static final boolean BATTERY_SAVER_ENABLED = true;
-
-    @Mock private BatterySaverController mBatterySaverControllerMock;
-    @Mock private BatterySaverPolicy mBatterySaverPolicyMock;
-    @Mock private BatterySaverStateMachine mBatterySaverStateMachineMock;
-    @Mock private LightsManager mLightsManagerMock;
-    @Mock private DisplayManagerInternal mDisplayManagerInternalMock;
-    @Mock private BatteryManagerInternal mBatteryManagerInternalMock;
-    @Mock private ActivityManagerInternal mActivityManagerInternalMock;
-    @Mock private AttentionManagerInternal mAttentionManagerInternalMock;
-    @Mock private DreamManagerInternal mDreamManagerInternalMock;
-    @Mock private PowerManagerService.NativeWrapper mNativeWrapperMock;
-    @Mock private Notifier mNotifierMock;
-    @Mock private WirelessChargerDetector mWirelessChargerDetectorMock;
-    @Mock private AmbientDisplayConfiguration mAmbientDisplayConfigurationMock;
-    @Mock private SystemPropertiesWrapper mSystemPropertiesMock;
-    @Mock private DeviceStateManager mDeviceStateManagerMock;
-
-    @Mock
-    private InattentiveSleepWarningController mInattentiveSleepWarningControllerMock;
-
-    private PowerManagerService mService;
-    private PowerSaveState mPowerSaveState;
-    private ContextWrapper mContextSpy;
-    private BatteryReceiver mBatteryReceiver;
-    private UserSwitchedReceiver mUserSwitchedReceiver;
-    private Resources mResourcesSpy;
-    private OffsettableClock mClock;
-    private TestLooper mTestLooper;
-
-    @Before
-    public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
-        FakeSettingsProvider.clearSettingsProvider();
-
-        mPowerSaveState = new PowerSaveState.Builder()
-                .setBatterySaverEnabled(BATTERY_SAVER_ENABLED)
-                .setBrightnessFactor(BRIGHTNESS_FACTOR)
-                .build();
-        when(mBatterySaverPolicyMock.getBatterySaverPolicy(
-                eq(PowerManager.ServiceType.SCREEN_BRIGHTNESS)))
-                .thenReturn(mPowerSaveState);
-        when(mBatteryManagerInternalMock.isPowered(anyInt())).thenReturn(false);
-        when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(false);
-        when(mDisplayManagerInternalMock.requestPowerState(anyInt(), any(), anyBoolean()))
-                .thenReturn(true);
-        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_QUIESCENT), anyString())).thenReturn("");
-        when(mAmbientDisplayConfigurationMock.ambientDisplayAvailable()).thenReturn(true);
-
-        addLocalServiceMock(LightsManager.class, mLightsManagerMock);
-        addLocalServiceMock(DisplayManagerInternal.class, mDisplayManagerInternalMock);
-        addLocalServiceMock(BatteryManagerInternal.class, mBatteryManagerInternalMock);
-        addLocalServiceMock(ActivityManagerInternal.class, mActivityManagerInternalMock);
-        addLocalServiceMock(AttentionManagerInternal.class, mAttentionManagerInternalMock);
-        addLocalServiceMock(DreamManagerInternal.class, mDreamManagerInternalMock);
-
-        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
-        mResourcesSpy = spy(mContextSpy.getResources());
-        when(mContextSpy.getResources()).thenReturn(mResourcesSpy);
-
-        MockContentResolver cr = new MockContentResolver(mContextSpy);
-        cr.addProvider(Settings.AUTHORITY, new FakeSettingsProvider());
-        when(mContextSpy.getContentResolver()).thenReturn(cr);
-
-        when(mContextSpy.getSystemService(DeviceStateManager.class))
-                .thenReturn(mDeviceStateManagerMock);
-
-        Settings.Global.putInt(mContextSpy.getContentResolver(),
-                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0);
-
-        mClock = new OffsettableClock.Stopped();
-        mTestLooper = new TestLooper(mClock::now);
-    }
-
-    private PowerManagerService createService() {
-        mService = new PowerManagerService(mContextSpy, new Injector() {
-            @Override
-            Notifier createNotifier(Looper looper, Context context, IBatteryStats batteryStats,
-                    SuspendBlocker suspendBlocker, WindowManagerPolicy policy,
-                    FaceDownDetector faceDownDetector, ScreenUndimDetector screenUndimDetector,
-                    Executor executor) {
-                return mNotifierMock;
-            }
-
-            @Override
-            SuspendBlocker createSuspendBlocker(PowerManagerService service, String name) {
-                return super.createSuspendBlocker(service, name);
-            }
-
-            @Override
-            BatterySaverPolicy createBatterySaverPolicy(
-                    Object lock, Context context, BatterySavingStats batterySavingStats) {
-                return mBatterySaverPolicyMock;
-            }
-
-            @Override
-            BatterySaverController createBatterySaverController(
-                    Object lock, Context context, BatterySaverPolicy batterySaverPolicy,
-                    BatterySavingStats batterySavingStats) {
-                return mBatterySaverControllerMock;
-            }
-
-            @Override
-            BatterySaverStateMachine createBatterySaverStateMachine(Object lock, Context context,
-                    BatterySaverController batterySaverController) {
-                return mBatterySaverStateMachineMock;
-            }
-
-            @Override
-            NativeWrapper createNativeWrapper() {
-                return mNativeWrapperMock;
-            }
-
-            @Override
-            WirelessChargerDetector createWirelessChargerDetector(
-                    SensorManager sensorManager, SuspendBlocker suspendBlocker, Handler handler) {
-                return mWirelessChargerDetectorMock;
-            }
-
-            @Override
-            AmbientDisplayConfiguration createAmbientDisplayConfiguration(Context context) {
-                return mAmbientDisplayConfigurationMock;
-            }
-
-            @Override
-            InattentiveSleepWarningController createInattentiveSleepWarningController() {
-                return mInattentiveSleepWarningControllerMock;
-            }
-
-            @Override
-            public SystemPropertiesWrapper createSystemPropertiesWrapper() {
-                return mSystemPropertiesMock;
-            }
-
-            @Override
-            PowerManagerService.Clock createClock() {
-                return new PowerManagerService.Clock() {
-                    @Override
-                    public long uptimeMillis() {
-                        return mClock.now();
-                    }
-
-                    @Override
-                    public long elapsedRealtime() {
-                        return mClock.now();
-                    }
-                };
-            }
-
-            @Override
-            Handler createHandler(Looper looper, Handler.Callback callback) {
-                return new Handler(mTestLooper.getLooper(), callback);
-            }
-
-            @Override
-            void invalidateIsInteractiveCaches() {
-                // Avoids an SELinux failure.
-            }
-        });
-        return mService;
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        LocalServices.removeServiceForTest(LightsManager.class);
-        LocalServices.removeServiceForTest(DisplayManagerInternal.class);
-        LocalServices.removeServiceForTest(BatteryManagerInternal.class);
-        LocalServices.removeServiceForTest(ActivityManagerInternal.class);
-        LocalServices.removeServiceForTest(AttentionManagerInternal.class);
-        LocalServices.removeServiceForTest(DreamManagerInternal.class);
-        FakeSettingsProvider.clearSettingsProvider();
-    }
-
-    /**
-     * Creates a mock and registers it to {@link LocalServices}.
-     */
-    private static <T> void addLocalServiceMock(Class<T> clazz, T mock) {
-        LocalServices.removeServiceForTest(clazz);
-        LocalServices.addService(clazz, mock);
-    }
-
-    private void advanceTime(long timeMs) {
-        mClock.fastForward(timeMs);
-        mTestLooper.dispatchAll();
-    }
-
-    @Test
-    public void testUserActivityOnDeviceStateChange() {
-        createService();
-        mService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
-        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info);
-
-        final ArgumentCaptor<DeviceStateCallback> deviceStateCallbackCaptor =
-                ArgumentCaptor.forClass(DeviceStateCallback.class);
-        verify(mDeviceStateManagerMock).registerCallback(any(),
-                deviceStateCallbackCaptor.capture());
-
-        // Advance the time 10001 and verify that the device thinks it has been idle
-        // for just less than that.
-        mService.onUserActivity();
-        advanceTime(10001);
-        assertThat(mService.wasDeviceIdleForInternal(10000)).isTrue();
-
-        // Send a display state change event and advance the clock 10.
-        final DeviceStateCallback deviceStateCallback = deviceStateCallbackCaptor.getValue();
-        deviceStateCallback.onStateChanged(1);
-        final long timeToAdvance = 10;
-        advanceTime(timeToAdvance);
-
-        // Ensure that the device has been idle for only 10 (doesn't include the idle time
-        // before the display state event).
-        assertThat(mService.wasDeviceIdleForInternal(timeToAdvance - 1)).isTrue();
-        assertThat(mService.wasDeviceIdleForInternal(timeToAdvance)).isFalse();
-
-        // Send the same state and ensure that does not trigger an update.
-        deviceStateCallback.onStateChanged(1);
-        advanceTime(timeToAdvance);
-        final long newTime = timeToAdvance * 2;
-
-        assertThat(mService.wasDeviceIdleForInternal(newTime - 1)).isTrue();
-        assertThat(mService.wasDeviceIdleForInternal(newTime)).isFalse();
-    }
-}
diff --git a/services/tests/mockingservicestests/src/com/android/server/power/ScreenUndimDetectorTest.java b/services/tests/mockingservicestests/src/com/android/server/power/ScreenUndimDetectorTest.java
index 93a1f30..e8e1dac 100644
--- a/services/tests/mockingservicestests/src/com/android/server/power/ScreenUndimDetectorTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/power/ScreenUndimDetectorTest.java
@@ -38,13 +38,13 @@
 
 import com.android.modules.utils.testing.TestableDeviceConfig;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
-import org.mockito.MockitoAnnotations;
 
 import java.util.Arrays;
 import java.util.List;
@@ -86,7 +86,7 @@
 
     @Before
     public void setup() {
-        MockitoAnnotations.initMocks(this);
+        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
 
         DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE,
                 KEY_UNDIMS_REQUIRED,
@@ -100,12 +100,17 @@
         mScreenUndimDetector.systemReady(sContext);
     }
 
+    @After
+    public void tearDown() {
+        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
+    }
+
     @Test
     public void recordScreenPolicy_disabledByFlag_noop() {
         DeviceConfig.setProperty(NAMESPACE_ATTENTION_MANAGER_SERVICE,
                 KEY_KEEP_SCREEN_ON_ENABLED, Boolean.FALSE.toString(), false /*makeDefault*/);
+        mScreenUndimDetector.readValuesFromDeviceConfig();
 
-        setup();
         mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_DIM);
         mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, POLICY_BRIGHT);
 
@@ -115,7 +120,7 @@
     @Test
     public void recordScreenPolicy_samePolicy_noop() {
         for (int policy : ALL_POLICIES) {
-            setup();
+            resetDetector();
             mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, policy);
             mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, policy);
 
@@ -149,7 +154,7 @@
                 if (from == POLICY_DIM && to == POLICY_BRIGHT) {
                     continue;
                 }
-                setup();
+                resetDetector();
                 mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, from);
                 mScreenUndimDetector.recordScreenPolicy(DEFAULT_DISPLAY_GROUP, to);
 
@@ -290,7 +295,8 @@
     @Test
     public void recordScreenPolicy_dimToNonBright_resets() {
         for (int to : Arrays.asList(POLICY_OFF, POLICY_DOZE)) {
-            setup();
+            resetDetector();
+
             mScreenUndimDetector.mUndimCounter = 1;
             mScreenUndimDetector.mUndimCounterStartedMillis = 123;
             mScreenUndimDetector.mWakeLock.acquire();
@@ -308,7 +314,8 @@
     @Test
     public void recordScreenPolicy_brightToNonDim_resets() {
         for (int to : Arrays.asList(POLICY_OFF, POLICY_DOZE)) {
-            setup();
+            resetDetector();
+
             mScreenUndimDetector.mUndimCounter = 1;
             mScreenUndimDetector.mUndimCounterStartedMillis = 123;
             mScreenUndimDetector.mWakeLock.acquire();
@@ -351,4 +358,9 @@
             }
         }
     }
+
+    private void resetDetector() {
+        mScreenUndimDetector.reset();
+        mScreenUndimDetector.mCurrentScreenPolicy = 0;
+    }
 }
diff --git a/services/tests/powerservicetests/Android.bp b/services/tests/powerservicetests/Android.bp
new file mode 100644
index 0000000..7351fc5f
--- /dev/null
+++ b/services/tests/powerservicetests/Android.bp
@@ -0,0 +1,44 @@
+package {
+    // See: http://go/android-license-faq
+    default_applicable_licenses: ["frameworks_base_license"],
+}
+
+android_test {
+    name: "PowerServiceTests",
+
+    srcs: [
+        "src/**/*.java",
+    ],
+
+    static_libs: [
+        "frameworks-base-testutils",
+        "platform-compat-test-rules",
+        "platform-test-annotations",
+        "services.core",
+        "servicestests-utils",
+        "testables",
+        "TestParameterInjector",
+    ],
+
+    libs: [
+        "android.test.mock",
+    ],
+
+    defaults: [
+        "modules-utils-testable-device-config-defaults",
+    ],
+
+    platform_apis: true,
+    test_suites: [
+        "device-tests",
+        "automotive-tests",
+    ],
+
+    certificate: "platform",
+
+    dxflags: ["--multi-dex"],
+
+    optimize: {
+        enabled: false,
+    },
+}
diff --git a/services/tests/powerservicetests/AndroidManifest.xml b/services/tests/powerservicetests/AndroidManifest.xml
new file mode 100644
index 0000000..26d9eec
--- /dev/null
+++ b/services/tests/powerservicetests/AndroidManifest.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.frameworks.powerservicetests">
+
+    <!-- Permissions -->
+    <uses-permission android:name="android.permission.DEVICE_POWER"/>
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
+    <uses-permission android:name="android.permission.READ_DEVICE_CONFIG"/>
+    <uses-permission android:name="android.permission.READ_DREAM_STATE"/>
+    <uses-permission android:name="android.permission.READ_DREAM_SUPPRESSION"/>
+    <uses-permission android:name="android.permission.STATUS_BAR_SERVICE"/>
+    <uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS"/>
+    <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"/>
+    <uses-permission android:name="android.permission.WAKE_LOCK"/>
+    <uses-permission android:name="android.permission.WRITE_DREAM_STATE"/>
+
+    <application android:debuggable="true"
+                 android:testOnly="true">
+        <uses-library android:name="android.test.mock" android:required="true" />
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation
+        android:name="androidx.test.runner.AndroidJUnitRunner"
+        android:label="Power Service Tests"
+        android:targetPackage="com.android.frameworks.powerservicetests" />
+</manifest>
diff --git a/services/tests/powerservicetests/AndroidTest.xml b/services/tests/powerservicetests/AndroidTest.xml
new file mode 100644
index 0000000..fa6645b
--- /dev/null
+++ b/services/tests/powerservicetests/AndroidTest.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<configuration description="Runs Power Service Tests.">
+    <option name="test-suite-tag" value="apct" />
+    <option name="test-suite-tag" value="apct-instrumentation" />
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="install-arg" value="-t" />
+        <option name="test-file-name" value="PowerServiceTests.apk" />
+    </target_preparer>
+
+    <option name="test-tag" value="PowerServiceTests" />
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest">
+        <option name="package" value="com.android.frameworks.powerservicetests" />
+        <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
+        <option name="hidden-api-checks" value="false" />
+    </test>
+</configuration>
diff --git a/services/tests/powerservicetests/OWNERS b/services/tests/powerservicetests/OWNERS
new file mode 100644
index 0000000..aff0930
--- /dev/null
+++ b/services/tests/powerservicetests/OWNERS
@@ -0,0 +1,4 @@
+# Bug component: 46788
+
+include /services/core/java/com/android/server/power/OWNERS
+
diff --git a/services/tests/powerservicetests/TEST_MAPPING b/services/tests/powerservicetests/TEST_MAPPING
new file mode 100644
index 0000000..1b534a1
--- /dev/null
+++ b/services/tests/powerservicetests/TEST_MAPPING
@@ -0,0 +1,8 @@
+{
+  "imports": [
+    {
+      "path": "frameworks/base/services/core/java/com/android/server/power"
+    }
+  ]
+}
+
diff --git a/services/tests/servicestests/src/com/android/server/power/LowPowerStandbyControllerTest.java b/services/tests/powerservicetests/src/com/android/server/power/LowPowerStandbyControllerTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/LowPowerStandbyControllerTest.java
rename to services/tests/powerservicetests/src/com/android/server/power/LowPowerStandbyControllerTest.java
diff --git a/services/tests/powerservicetests/src/com/android/server/power/NotifierTest.java b/services/tests/powerservicetests/src/com/android/server/power/NotifierTest.java
new file mode 100644
index 0000000..58cdb1b
--- /dev/null
+++ b/services/tests/powerservicetests/src/com/android/server/power/NotifierTest.java
@@ -0,0 +1,373 @@
+/*
+ * 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.server.power;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+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.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.Context;
+import android.content.res.Resources;
+import android.hardware.SensorManager;
+import android.hardware.display.AmbientDisplayConfiguration;
+import android.os.BatteryStats;
+import android.os.Handler;
+import android.os.IWakeLockCallback;
+import android.os.Looper;
+import android.os.PowerManager;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.VibrationAttributes;
+import android.os.Vibrator;
+import android.os.test.TestLooper;
+import android.provider.Settings;
+import android.testing.TestableContext;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.app.IBatteryStats;
+import com.android.server.LocalServices;
+import com.android.server.policy.WindowManagerPolicy;
+import com.android.server.power.batterysaver.BatterySaverController;
+import com.android.server.power.batterysaver.BatterySaverPolicy;
+import com.android.server.power.batterysaver.BatterySavingStats;
+import com.android.server.statusbar.StatusBarManagerInternal;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.concurrent.Executor;
+
+/**
+ * Tests for {@link com.android.server.power.Notifier}
+ */
+public class NotifierTest {
+    private static final String SYSTEM_PROPERTY_QUIESCENT = "ro.boot.quiescent";
+    private static final int USER_ID = 0;
+
+    @Mock private BatterySaverController mBatterySaverControllerMock;
+    @Mock private BatterySaverPolicy mBatterySaverPolicyMock;
+    @Mock private PowerManagerService.NativeWrapper mNativeWrapperMock;
+    @Mock private Notifier mNotifierMock;
+    @Mock private WirelessChargerDetector mWirelessChargerDetectorMock;
+    @Mock private AmbientDisplayConfiguration mAmbientDisplayConfigurationMock;
+    @Mock private SystemPropertiesWrapper mSystemPropertiesMock;
+    @Mock private InattentiveSleepWarningController mInattentiveSleepWarningControllerMock;
+    @Mock private Vibrator mVibrator;
+    @Mock private StatusBarManagerInternal mStatusBarManagerInternal;
+
+    private PowerManagerService mService;
+    private Context mContextSpy;
+    private Resources mResourcesSpy;
+    private TestLooper mTestLooper = new TestLooper();
+    private FakeExecutor mTestExecutor = new FakeExecutor();
+    private Notifier mNotifier;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        LocalServices.removeServiceForTest(StatusBarManagerInternal.class);
+        LocalServices.addService(StatusBarManagerInternal.class, mStatusBarManagerInternal);
+
+        mContextSpy = spy(new TestableContext(InstrumentationRegistry.getContext()));
+        mResourcesSpy = spy(mContextSpy.getResources());
+        when(mContextSpy.getResources()).thenReturn(mResourcesSpy);
+        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_QUIESCENT), anyString())).thenReturn("");
+        when(mContextSpy.getSystemService(Vibrator.class)).thenReturn(mVibrator);
+
+        mService = new PowerManagerService(mContextSpy, mInjector);
+    }
+
+    @Test
+    public void testVibrateEnabled_wiredCharging() {
+        createNotifier();
+
+        // GIVEN the charging vibration is enabled
+        enableChargingVibration(true);
+
+        // WHEN wired charging starts
+        mNotifier.onWiredChargingStarted(USER_ID);
+        mTestLooper.dispatchAll();
+        mTestExecutor.simulateAsyncExecutionOfLastCommand();
+
+        // THEN the device vibrates once
+        verify(mVibrator, times(1)).vibrate(any(), any(VibrationAttributes.class));
+    }
+
+    @Test
+    public void testVibrateDisabled_wiredCharging() {
+        createNotifier();
+
+        // GIVEN the charging vibration is disabled
+        enableChargingVibration(false);
+
+        // WHEN wired charging starts
+        mNotifier.onWiredChargingStarted(USER_ID);
+        mTestLooper.dispatchAll();
+        mTestExecutor.simulateAsyncExecutionOfLastCommand();
+
+        // THEN the device doesn't vibrate
+        verify(mVibrator, never()).vibrate(any(), any(VibrationAttributes.class));
+    }
+
+    @Test
+    public void testVibrateEnabled_wirelessCharging() {
+        createNotifier();
+
+        // GIVEN the charging vibration is enabled
+        enableChargingVibration(true);
+
+        // WHEN wireless charging starts
+        mNotifier.onWirelessChargingStarted(5, USER_ID);
+        mTestLooper.dispatchAll();
+        mTestExecutor.simulateAsyncExecutionOfLastCommand();
+
+        // THEN the device vibrates once
+        verify(mVibrator, times(1)).vibrate(any(), any(VibrationAttributes.class));
+    }
+
+    @Test
+    public void testVibrateDisabled_wirelessCharging() {
+        createNotifier();
+
+        // GIVEN the charging vibration is disabeld
+        enableChargingVibration(false);
+
+        // WHEN wireless charging starts
+        mNotifier.onWirelessChargingStarted(5, USER_ID);
+        mTestLooper.dispatchAll();
+        mTestExecutor.simulateAsyncExecutionOfLastCommand();
+
+        // THEN the device doesn't vibrate
+        verify(mVibrator, never()).vibrate(any(), any(VibrationAttributes.class));
+    }
+
+    @Test
+    public void testVibrateEnabled_dndOn() {
+        createNotifier();
+
+        // GIVEN the charging vibration is enabled but dnd is on
+        enableChargingVibration(true);
+        enableChargingFeedback(
+                /* chargingFeedbackEnabled */ true,
+                /* dndOn */ true);
+
+        // WHEN wired charging starts
+        mNotifier.onWiredChargingStarted(USER_ID);
+        mTestLooper.dispatchAll();
+        mTestExecutor.simulateAsyncExecutionOfLastCommand();
+
+        // THEN the device doesn't vibrate
+        verify(mVibrator, never()).vibrate(any(), any(VibrationAttributes.class));
+    }
+
+    @Test
+    public void testWirelessAnimationEnabled() {
+        // GIVEN the wireless charging animation is enabled
+        when(mResourcesSpy.getBoolean(
+                com.android.internal.R.bool.config_showBuiltinWirelessChargingAnim))
+                .thenReturn(true);
+        createNotifier();
+
+        // WHEN wireless charging starts
+        mNotifier.onWirelessChargingStarted(5, USER_ID);
+        mTestLooper.dispatchAll();
+        mTestExecutor.simulateAsyncExecutionOfLastCommand();
+
+        // THEN the charging animation is triggered
+        verify(mStatusBarManagerInternal, times(1)).showChargingAnimation(5);
+    }
+
+    @Test
+    public void testWirelessAnimationDisabled() {
+        // GIVEN the wireless charging animation is disabled
+        when(mResourcesSpy.getBoolean(
+                com.android.internal.R.bool.config_showBuiltinWirelessChargingAnim))
+                .thenReturn(false);
+        createNotifier();
+
+        // WHEN wireless charging starts
+        mNotifier.onWirelessChargingStarted(5, USER_ID);
+        mTestLooper.dispatchAll();
+        mTestExecutor.simulateAsyncExecutionOfLastCommand();
+
+        // THEN the charging animation never gets called
+        verify(mStatusBarManagerInternal, never()).showChargingAnimation(anyInt());
+    }
+
+    @Test
+    public void testOnWakeLockListener_RemoteException_NoRethrow() {
+        createNotifier();
+
+        IWakeLockCallback exceptingCallback = new IWakeLockCallback.Stub() {
+            @Override public void onStateChanged(boolean enabled) throws RemoteException {
+                throw new RemoteException("Just testing");
+            }
+        };
+
+        final int uid = 1234;
+        final int pid = 5678;
+        mNotifier.onWakeLockReleased(PowerManager.PARTIAL_WAKE_LOCK, "wakelockTag",
+                "my.package.name", uid, pid, /* workSource= */ null, /* historyTag= */ null,
+                exceptingCallback);
+        mNotifier.onWakeLockAcquired(PowerManager.PARTIAL_WAKE_LOCK, "wakelockTag",
+                "my.package.name", uid, pid, /* workSource= */ null, /* historyTag= */ null,
+                exceptingCallback);
+        mNotifier.onWakeLockChanging(PowerManager.PARTIAL_WAKE_LOCK, "wakelockTag",
+                "my.package.name", uid, pid, /* workSource= */ null, /* historyTag= */ null,
+                exceptingCallback,
+                PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "wakelockTag",
+                "my.package.name", uid, pid, /* newWorkSource= */ null, /* newHistoryTag= */ null,
+                exceptingCallback);
+        mTestLooper.dispatchAll();
+        // If we didn't throw, we're good!
+    }
+
+    private final PowerManagerService.Injector mInjector = new PowerManagerService.Injector() {
+        @Override
+        Notifier createNotifier(Looper looper, Context context, IBatteryStats batteryStats,
+                SuspendBlocker suspendBlocker, WindowManagerPolicy policy,
+                FaceDownDetector faceDownDetector, ScreenUndimDetector screenUndimDetector,
+                Executor backgroundExecutor) {
+            return mNotifierMock;
+        }
+
+        @Override
+        SuspendBlocker createSuspendBlocker(PowerManagerService service, String name) {
+            return super.createSuspendBlocker(service, name);
+        }
+
+        @Override
+        BatterySaverPolicy createBatterySaverPolicy(
+                Object lock, Context context, BatterySavingStats batterySavingStats) {
+            return mBatterySaverPolicyMock;
+        }
+
+        @Override
+        BatterySaverController createBatterySaverController(
+                Object lock, Context context, BatterySaverPolicy batterySaverPolicy,
+                BatterySavingStats batterySavingStats) {
+            return mBatterySaverControllerMock;
+        }
+
+        @Override
+        PowerManagerService.NativeWrapper createNativeWrapper() {
+            return mNativeWrapperMock;
+        }
+
+        @Override
+        WirelessChargerDetector createWirelessChargerDetector(
+                SensorManager sensorManager, SuspendBlocker suspendBlocker, Handler handler) {
+            return mWirelessChargerDetectorMock;
+        }
+
+        @Override
+        AmbientDisplayConfiguration createAmbientDisplayConfiguration(Context context) {
+            return mAmbientDisplayConfigurationMock;
+        }
+
+        @Override
+        InattentiveSleepWarningController createInattentiveSleepWarningController() {
+            return mInattentiveSleepWarningControllerMock;
+        }
+
+        @Override
+        public SystemPropertiesWrapper createSystemPropertiesWrapper() {
+            return mSystemPropertiesMock;
+        }
+
+        @Override
+        void invalidateIsInteractiveCaches() {
+            // Avoids an SELinux denial.
+        }
+    };
+
+    private void enableChargingFeedback(boolean chargingFeedbackEnabled, boolean dndOn) {
+        // enable/disable charging feedback
+        Settings.Secure.putIntForUser(
+                mContextSpy.getContentResolver(),
+                Settings.Secure.CHARGING_SOUNDS_ENABLED,
+                chargingFeedbackEnabled ? 1 : 0,
+                USER_ID);
+
+        // toggle on/off dnd
+        Settings.Global.putInt(
+                mContextSpy.getContentResolver(),
+                Settings.Global.ZEN_MODE,
+                dndOn ? Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS
+                        : Settings.Global.ZEN_MODE_OFF);
+    }
+
+    private void enableChargingVibration(boolean enable) {
+        enableChargingFeedback(true, false);
+
+        Settings.Secure.putIntForUser(
+                mContextSpy.getContentResolver(),
+                Settings.Secure.CHARGING_VIBRATION_ENABLED,
+                enable ? 1 : 0,
+                USER_ID);
+    }
+
+    private void createNotifier() {
+        mNotifier = new Notifier(
+                mTestLooper.getLooper(),
+                mContextSpy,
+                IBatteryStats.Stub.asInterface(ServiceManager.getService(
+                        BatteryStats.SERVICE_NAME)),
+                mInjector.createSuspendBlocker(mService, "testBlocker"),
+                null,
+                null,
+                null,
+                mTestExecutor);
+    }
+
+    private static class FakeExecutor implements Executor {
+        private Runnable mLastCommand;
+
+        @Override
+        public void execute(Runnable command) {
+            assertNull(mLastCommand);
+            assertNotNull(command);
+            mLastCommand = command;
+        }
+
+        public Runnable getAndResetLastCommand() {
+            Runnable toReturn = mLastCommand;
+            mLastCommand = null;
+            return toReturn;
+        }
+
+        public void simulateAsyncExecutionOfLastCommand() {
+            Runnable toRun = getAndResetLastCommand();
+            if (toRun != null) {
+                toRun.run();
+            }
+        }
+    }
+
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/PowerGroupTest.java b/services/tests/powerservicetests/src/com/android/server/power/PowerGroupTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/PowerGroupTest.java
rename to services/tests/powerservicetests/src/com/android/server/power/PowerGroupTest.java
diff --git a/services/tests/powerservicetests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/powerservicetests/src/com/android/server/power/PowerManagerServiceTest.java
new file mode 100644
index 0000000..d6d5264
--- /dev/null
+++ b/services/tests/powerservicetests/src/com/android/server/power/PowerManagerServiceTest.java
@@ -0,0 +1,2866 @@
+/*
+ * 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.server.power;
+
+import static android.app.ActivityManager.PROCESS_STATE_BOUND_TOP;
+import static android.app.ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE;
+import static android.app.ActivityManager.PROCESS_STATE_RECEIVER;
+import static android.app.ActivityManager.PROCESS_STATE_TOP_SLEEPING;
+import static android.os.PowerManager.USER_ACTIVITY_EVENT_BUTTON;
+import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP;
+import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE;
+import static android.os.PowerManagerInternal.WAKEFULNESS_DOZING;
+import static android.os.PowerManagerInternal.WAKEFULNESS_DREAMING;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertFalse;
+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.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isA;
+import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.ArgumentMatchers.same;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.atMost;
+import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
+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.app.ActivityManagerInternal;
+import android.attention.AttentionManagerInternal;
+import android.compat.testing.PlatformCompatChangeRule;
+import android.content.AttributionSource;
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.PermissionChecker;
+import android.content.res.Resources;
+import android.hardware.SensorManager;
+import android.hardware.devicestate.DeviceStateManager;
+import android.hardware.devicestate.DeviceStateManager.DeviceStateCallback;
+import android.hardware.display.AmbientDisplayConfiguration;
+import android.hardware.display.DisplayManagerInternal;
+import android.hardware.display.DisplayManagerInternal.DisplayPowerRequest;
+import android.hardware.power.Boost;
+import android.hardware.power.Mode;
+import android.os.BatteryManager;
+import android.os.BatteryManagerInternal;
+import android.os.BatterySaverPolicyConfig;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.IWakeLockCallback;
+import android.os.Looper;
+import android.os.PowerManager;
+import android.os.PowerManagerInternal;
+import android.os.PowerSaveState;
+import android.os.UserHandle;
+import android.os.test.TestLooper;
+import android.provider.DeviceConfig;
+import android.provider.Settings;
+import android.service.dreams.DreamManagerInternal;
+import android.sysprop.PowerProperties;
+import android.test.mock.MockContentResolver;
+import android.util.IntArray;
+import android.view.Display;
+import android.view.DisplayInfo;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.internal.app.IBatteryStats;
+import com.android.internal.util.test.FakeSettingsProvider;
+import com.android.server.LocalServices;
+import com.android.server.SystemService;
+import com.android.server.display.feature.DeviceConfigParameterProvider;
+import com.android.server.lights.LightsManager;
+import com.android.server.policy.WindowManagerPolicy;
+import com.android.server.power.PowerManagerService.BatteryReceiver;
+import com.android.server.power.PowerManagerService.BinderService;
+import com.android.server.power.PowerManagerService.NativeWrapper;
+import com.android.server.power.PowerManagerService.UserSwitchedReceiver;
+import com.android.server.power.PowerManagerService.WakeLock;
+import com.android.server.power.batterysaver.BatterySaverController;
+import com.android.server.power.batterysaver.BatterySaverPolicy;
+import com.android.server.power.batterysaver.BatterySaverStateMachine;
+import com.android.server.power.batterysaver.BatterySavingStats;
+import com.android.server.testutils.OffsettableClock;
+
+import com.google.testing.junit.testparameterinjector.TestParameter;
+import com.google.testing.junit.testparameterinjector.TestParameterInjector;
+
+import libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges;
+import libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestRule;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.ArgumentMatcher;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.mockito.stubbing.Answer;
+
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Tests for {@link com.android.server.power.PowerManagerService}.
+ *
+ * Build/Install/Run:
+ *  atest PowerServiceTests:PowerManagerServiceTest
+ */
+@SuppressWarnings("GuardedBy")
+@RunWith(TestParameterInjector.class)
+public class PowerManagerServiceTest {
+    private static final String SYSTEM_PROPERTY_QUIESCENT = "ro.boot.quiescent";
+    private static final String SYSTEM_PROPERTY_REBOOT_REASON = "sys.boot.reason";
+
+    private static final float BRIGHTNESS_FACTOR = 0.7f;
+    private static final boolean BATTERY_SAVER_ENABLED = true;
+
+    @Mock private BatterySaverController mBatterySaverControllerMock;
+    @Mock private BatterySaverPolicy mBatterySaverPolicyMock;
+    @Mock private BatterySaverStateMachine mBatterySaverStateMachineMock;
+    @Mock private LightsManager mLightsManagerMock;
+    @Mock private DisplayManagerInternal mDisplayManagerInternalMock;
+    @Mock private BatteryManagerInternal mBatteryManagerInternalMock;
+    @Mock private ActivityManagerInternal mActivityManagerInternalMock;
+    @Mock private AttentionManagerInternal mAttentionManagerInternalMock;
+    @Mock private DreamManagerInternal mDreamManagerInternalMock;
+    @Mock private PowerManagerService.NativeWrapper mNativeWrapperMock;
+    @Mock private Notifier mNotifierMock;
+    @Mock private WirelessChargerDetector mWirelessChargerDetectorMock;
+    @Mock private AmbientDisplayConfiguration mAmbientDisplayConfigurationMock;
+    @Mock private SystemPropertiesWrapper mSystemPropertiesMock;
+    @Mock private LowPowerStandbyController mLowPowerStandbyControllerMock;
+    @Mock private Callable<Void> mInvalidateInteractiveCachesMock;
+    @Mock private InattentiveSleepWarningController mInattentiveSleepWarningControllerMock;
+    @Mock private PowerManagerService.PermissionCheckerWrapper mPermissionCheckerWrapperMock;
+    @Mock private PowerManagerService.PowerPropertiesWrapper mPowerPropertiesWrapper;
+    @Mock private DeviceStateManager mDeviceStateManagerMock;
+    @Mock private DeviceConfigParameterProvider mDeviceParameterProvider;
+
+    @Rule public TestRule compatChangeRule = new PlatformCompatChangeRule();
+
+    private PowerManagerService mService;
+    private ContextWrapper mContextSpy;
+    private BatteryReceiver mBatteryReceiver;
+    private UserSwitchedReceiver mUserSwitchedReceiver;
+    private Resources mResourcesSpy;
+    private OffsettableClock mClock;
+    private long mLastElapsedRealtime;
+    private TestLooper mTestLooper;
+
+    private static class IntentFilterMatcher implements ArgumentMatcher<IntentFilter> {
+        private final IntentFilter mFilter;
+
+        IntentFilterMatcher(IntentFilter filter) {
+            mFilter = filter;
+        }
+
+        @Override
+        public boolean matches(IntentFilter other) {
+            if (other.countActions() != mFilter.countActions()) {
+                return false;
+            }
+            for (int i = 0; i < mFilter.countActions(); i++) {
+                if (!mFilter.getAction(i).equals(other.getAction(i))) {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        FakeSettingsProvider.clearSettingsProvider();
+
+        PowerSaveState powerSaveState = new PowerSaveState.Builder()
+                .setBatterySaverEnabled(BATTERY_SAVER_ENABLED)
+                .setBrightnessFactor(BRIGHTNESS_FACTOR)
+                .build();
+        when(mBatterySaverPolicyMock.getBatterySaverPolicy(
+                eq(PowerManager.ServiceType.SCREEN_BRIGHTNESS)))
+                .thenReturn(powerSaveState);
+        when(mBatteryManagerInternalMock.isPowered(anyInt())).thenReturn(false);
+        when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(false);
+        when(mDisplayManagerInternalMock.requestPowerState(anyInt(), any(), anyBoolean()))
+                .thenReturn(true);
+        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_QUIESCENT), anyString())).thenReturn("");
+        when(mAmbientDisplayConfigurationMock.ambientDisplayAvailable()).thenReturn(true);
+
+        addLocalServiceMock(LightsManager.class, mLightsManagerMock);
+        addLocalServiceMock(DisplayManagerInternal.class, mDisplayManagerInternalMock);
+        addLocalServiceMock(BatteryManagerInternal.class, mBatteryManagerInternalMock);
+        addLocalServiceMock(ActivityManagerInternal.class, mActivityManagerInternalMock);
+        addLocalServiceMock(AttentionManagerInternal.class, mAttentionManagerInternalMock);
+        addLocalServiceMock(DreamManagerInternal.class, mDreamManagerInternalMock);
+
+        mContextSpy = spy(new ContextWrapper(ApplicationProvider.getApplicationContext()));
+        mResourcesSpy = spy(mContextSpy.getResources());
+        when(mContextSpy.getResources()).thenReturn(mResourcesSpy);
+
+        MockContentResolver cr = new MockContentResolver(mContextSpy);
+        cr.addProvider(Settings.AUTHORITY, new FakeSettingsProvider());
+        when(mContextSpy.getContentResolver()).thenReturn(cr);
+
+        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_dreamsSupported))
+                .thenReturn(true);
+        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_dreamsEnabledByDefault))
+                .thenReturn(true);
+        Settings.Global.putInt(mContextSpy.getContentResolver(),
+                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0);
+        Settings.Secure.putInt(mContextSpy.getContentResolver(),
+                Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 0);
+
+        mClock = new OffsettableClock.Stopped();
+        mTestLooper = new TestLooper(mClock::now);
+    }
+
+    private PowerManagerService createService() {
+        mService = new PowerManagerService(mContextSpy, new PowerManagerService.Injector() {
+            @Override
+            Notifier createNotifier(Looper looper, Context context, IBatteryStats batteryStats,
+                    SuspendBlocker suspendBlocker, WindowManagerPolicy policy,
+                    FaceDownDetector faceDownDetector, ScreenUndimDetector screenUndimDetector,
+                    Executor executor) {
+                return mNotifierMock;
+            }
+
+            @Override
+            SuspendBlocker createSuspendBlocker(PowerManagerService service, String name) {
+                return super.createSuspendBlocker(service, name);
+            }
+
+            @Override
+            BatterySaverPolicy createBatterySaverPolicy(
+                    Object lock, Context context, BatterySavingStats batterySavingStats) {
+                return mBatterySaverPolicyMock;
+            }
+
+            @Override
+            BatterySaverController createBatterySaverController(
+                    Object lock, Context context, BatterySaverPolicy batterySaverPolicy,
+                    BatterySavingStats batterySavingStats) {
+                return mBatterySaverControllerMock;
+            }
+
+            @Override
+            BatterySaverStateMachine createBatterySaverStateMachine(Object lock, Context context,
+                    BatterySaverController batterySaverController) {
+                return mBatterySaverStateMachineMock;
+            }
+
+            @Override
+            NativeWrapper createNativeWrapper() {
+                return mNativeWrapperMock;
+            }
+
+            @Override
+            WirelessChargerDetector createWirelessChargerDetector(
+                    SensorManager sensorManager, SuspendBlocker suspendBlocker, Handler handler) {
+                return mWirelessChargerDetectorMock;
+            }
+
+            @Override
+            AmbientDisplayConfiguration createAmbientDisplayConfiguration(Context context) {
+                return mAmbientDisplayConfigurationMock;
+            }
+
+            @Override
+            InattentiveSleepWarningController createInattentiveSleepWarningController() {
+                return mInattentiveSleepWarningControllerMock;
+            }
+
+            @Override
+            public SystemPropertiesWrapper createSystemPropertiesWrapper() {
+                return mSystemPropertiesMock;
+            }
+
+            @Override
+            PowerManagerService.Clock createClock() {
+                return new PowerManagerService.Clock() {
+                    @Override
+                    public long uptimeMillis() {
+                        return mClock.now();
+                    }
+
+                    @Override
+                    public long elapsedRealtime() {
+                        mLastElapsedRealtime = mClock.now();
+                        return mLastElapsedRealtime;
+                    }
+                };
+            }
+
+            @Override
+            Handler createHandler(Looper looper, Handler.Callback callback) {
+                return new Handler(mTestLooper.getLooper(), callback);
+            }
+
+            @Override
+            void invalidateIsInteractiveCaches() {
+                try {
+                    mInvalidateInteractiveCachesMock.call();
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            }
+
+            @Override
+            LowPowerStandbyController createLowPowerStandbyController(Context context,
+                    Looper looper) {
+                return mLowPowerStandbyControllerMock;
+            }
+
+            @Override
+            PowerManagerService.PermissionCheckerWrapper createPermissionCheckerWrapper() {
+                return mPermissionCheckerWrapperMock;
+            }
+
+            @Override
+            PowerManagerService.PowerPropertiesWrapper createPowerPropertiesWrapper() {
+                return mPowerPropertiesWrapper;
+            }
+
+            @Override
+            DeviceConfigParameterProvider createDeviceConfigParameterProvider() {
+                return mDeviceParameterProvider;
+            }
+        });
+        return mService;
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        LocalServices.removeServiceForTest(LightsManager.class);
+        LocalServices.removeServiceForTest(DisplayManagerInternal.class);
+        LocalServices.removeServiceForTest(BatteryManagerInternal.class);
+        LocalServices.removeServiceForTest(ActivityManagerInternal.class);
+        FakeSettingsProvider.clearSettingsProvider();
+    }
+
+    /**
+     * Creates a mock and registers it to {@link LocalServices}.
+     */
+    private static <T> void addLocalServiceMock(Class<T> clazz, T mock) {
+        LocalServices.removeServiceForTest(clazz);
+        LocalServices.addService(clazz, mock);
+    }
+
+    private void startSystem() {
+        mService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
+
+        // Grab the BatteryReceiver
+        ArgumentCaptor<BatteryReceiver> batCaptor = ArgumentCaptor.forClass(BatteryReceiver.class);
+        IntentFilter batFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+        batFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
+        verify(mContextSpy).registerReceiver(batCaptor.capture(),
+                argThat(new IntentFilterMatcher(batFilter)), isNull(), isA(Handler.class));
+        mBatteryReceiver = batCaptor.getValue();
+
+        // Grab the UserSwitchedReceiver
+        ArgumentCaptor<UserSwitchedReceiver> userSwitchedCaptor =
+                ArgumentCaptor.forClass(UserSwitchedReceiver.class);
+        IntentFilter usFilter = new IntentFilter(Intent.ACTION_USER_SWITCHED);
+        verify(mContextSpy).registerReceiver(userSwitchedCaptor.capture(),
+                argThat(new IntentFilterMatcher(usFilter)), isNull(), isA(Handler.class));
+        mUserSwitchedReceiver = userSwitchedCaptor.getValue();
+
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+    }
+
+    private void forceSleep() {
+        mService.getBinderServiceInstance().goToSleep(mClock.now(),
+                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
+    }
+
+    private void forceDream() {
+        mService.getBinderServiceInstance().nap(mClock.now());
+    }
+
+    private void forceAwake() {
+        mService.getBinderServiceInstance().wakeUp(mClock.now(),
+                PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name");
+    }
+
+    private void forceDozing() {
+        mService.getBinderServiceInstance().goToSleep(mClock.now(),
+                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0);
+    }
+
+    private void setPluggedIn(boolean isPluggedIn) {
+        // Set the callback to return the new state
+        when(mBatteryManagerInternalMock.isPowered(anyInt()))
+                .thenReturn(isPluggedIn);
+        // Trigger PowerManager to reread the plug-in state
+        mBatteryReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_BATTERY_CHANGED));
+    }
+
+    private void setBatteryLevel(int batteryLevel) {
+        when(mBatteryManagerInternalMock.getBatteryLevel())
+                .thenReturn(batteryLevel);
+        mBatteryReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_BATTERY_CHANGED));
+    }
+
+    private void setBatteryHealth(int batteryHealth) {
+        when(mBatteryManagerInternalMock.getBatteryHealth())
+                .thenReturn(batteryHealth);
+        mBatteryReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_BATTERY_CHANGED));
+    }
+
+    private void setAttentiveTimeout(int attentiveTimeoutMillis) {
+        Settings.Secure.putInt(
+                mContextSpy.getContentResolver(), Settings.Secure.ATTENTIVE_TIMEOUT,
+                attentiveTimeoutMillis);
+    }
+
+    private void setAttentiveWarningDuration(int attentiveWarningDurationMillis) {
+        when(mResourcesSpy.getInteger(
+                com.android.internal.R.integer.config_attentiveWarningDuration))
+                .thenReturn(attentiveWarningDurationMillis);
+    }
+
+    private void setMinimumScreenOffTimeoutConfig(int minimumScreenOffTimeoutConfigMillis) {
+        when(mResourcesSpy.getInteger(
+                com.android.internal.R.integer.config_minimumScreenOffTimeout))
+                .thenReturn(minimumScreenOffTimeoutConfigMillis);
+    }
+
+    private void setDreamsDisabledByAmbientModeSuppressionConfig(boolean disable) {
+        when(mResourcesSpy.getBoolean(
+                com.android.internal.R.bool.config_dreamsDisabledByAmbientModeSuppressionConfig))
+                .thenReturn(disable);
+    }
+
+    private void setDreamsBatteryLevelDrainConfig(int threshold) {
+        when(mResourcesSpy.getInteger(
+                com.android.internal.R.integer.config_dreamsBatteryLevelDrainCutoff)).thenReturn(
+                threshold);
+    }
+
+    private void advanceTime(long timeMs) {
+        mClock.fastForward(timeMs);
+        mTestLooper.dispatchAll();
+    }
+
+    @Test
+    public void testCreateService_initializesNativeServiceAndSetsPowerModes() {
+        PowerManagerService service = createService();
+        verify(mNativeWrapperMock).nativeInit(same(service));
+        verify(mNativeWrapperMock).nativeSetPowerMode(eq(Mode.INTERACTIVE), eq(true));
+        verify(mNativeWrapperMock).nativeSetPowerMode(eq(Mode.DOUBLE_TAP_TO_WAKE), eq(false));
+    }
+
+    @Test
+    public void testGetLastShutdownReasonInternal() {
+        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_REBOOT_REASON), any())).thenReturn(
+                "shutdown,thermal");
+        createService();
+        int reason = mService.getLastShutdownReasonInternal();
+        assertThat(reason).isEqualTo(PowerManager.SHUTDOWN_REASON_THERMAL_SHUTDOWN);
+    }
+
+    @Test
+    public void testWakefulnessAwake_InitialValue() {
+        createService();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+    }
+
+    @Test
+    public void testWakefulnessSleep_NoDozeSleepFlag() {
+        createService();
+        // Start with AWAKE state
+        startSystem();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        // Take a nap and verify.
+        mService.getBinderServiceInstance().goToSleep(mClock.now(),
+                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+    }
+
+    @Test
+    public void testWakefulnessSleep_SoftSleepFlag_NoWakelocks() {
+        createService();
+        // Start with AWAKE state
+        startSystem();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        // Take a nap and verify we go to sleep.
+        mService.getBinderServiceInstance().goToSleep(mClock.now(),
+                PowerManager.GO_TO_SLEEP_REASON_APPLICATION,
+                PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
+    }
+
+    @Test
+    public void testWakefulnessSleep_SoftSleepFlag_WithPartialWakelock() {
+        createService();
+        // Start with AWAKE state
+        startSystem();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        // Grab a wakelock
+        final String tag = "wakelock1";
+        final String packageName = "pkg.name";
+        final IBinder token = new Binder();
+        final int flags = PowerManager.PARTIAL_WAKE_LOCK;
+        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY,
+                null /* callback */);
+
+        // Take a nap and verify we stay awake.
+        mService.getBinderServiceInstance().goToSleep(mClock.now(),
+                PowerManager.GO_TO_SLEEP_REASON_APPLICATION,
+                PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
+    }
+
+    @Test
+    public void testWakefulnessSleep_SoftSleepFlag_WithFullWakelock() {
+        createService();
+        // Start with AWAKE state
+        startSystem();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        // Grab a wakelock
+        final String tag = "wakelock1";
+        final String packageName = "pkg.name";
+        final IBinder token = new Binder();
+        final int flags = PowerManager.FULL_WAKE_LOCK;
+        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY,
+                null /* callback */);
+
+        // Take a nap and verify we stay awake.
+        mService.getBinderServiceInstance().goToSleep(mClock.now(),
+                PowerManager.GO_TO_SLEEP_REASON_APPLICATION,
+                PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+    }
+
+    @Test
+    public void testWakefulnessSleep_SoftSleepFlag_WithScreenBrightWakelock() {
+        createService();
+        // Start with AWAKE state
+        startSystem();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        // Grab a wakelock
+        final String tag = "wakelock1";
+        final String packageName = "pkg.name";
+        final IBinder token = new Binder();
+        final int flags = PowerManager.SCREEN_BRIGHT_WAKE_LOCK;
+        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY,
+                null /* callback */);
+
+        // Take a nap and verify we stay awake.
+        mService.getBinderServiceInstance().goToSleep(mClock.now(),
+                PowerManager.GO_TO_SLEEP_REASON_APPLICATION,
+                PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+    }
+    @Test
+    public void testWakefulnessSleep_SoftSleepFlag_WithScreenDimWakelock() {
+        createService();
+        // Start with AWAKE state
+        startSystem();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        // Grab a wakelock
+        final String tag = "wakelock1";
+        final String packageName = "pkg.name";
+        final IBinder token = new Binder();
+        final int flags = PowerManager.SCREEN_DIM_WAKE_LOCK;
+        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY,
+                null /* callback */);
+
+        // Take a nap and verify we stay awake.
+        mService.getBinderServiceInstance().goToSleep(mClock.now(),
+                PowerManager.GO_TO_SLEEP_REASON_APPLICATION,
+                PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+    }
+
+    @Test
+    @EnableCompatChanges({PowerManagerService.REQUIRE_TURN_SCREEN_ON_PERMISSION})
+    public void testWakefulnessAwake_AcquireCausesWakeup_turnScreenOnAllowed() {
+        createService();
+        startSystem();
+        forceSleep();
+
+        IBinder token = new Binder();
+        String tag = "acq_causes_wakeup";
+        String packageName = "pkg.name";
+        AttributionSource attrSrc = new AttributionSource(Binder.getCallingUid(),
+                packageName, /* attributionTag= */ null);
+
+        doReturn(PermissionChecker.PERMISSION_GRANTED).when(
+                mPermissionCheckerWrapperMock).checkPermissionForDataDelivery(any(),
+                eq(android.Manifest.permission.TURN_SCREEN_ON), anyInt(), eq(attrSrc), anyString());
+
+        // First, ensure that a normal full wake lock does not cause a wakeup
+        int flags = PowerManager.FULL_WAKE_LOCK;
+        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+        mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
+
+        // Ensure that the flag does *NOT* work with a partial wake lock.
+        flags = PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
+        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+        mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
+
+        // Verify that flag forces a wakeup when paired to a FULL_WAKE_LOCK
+        flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
+        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
+    }
+
+    @Test
+    @DisableCompatChanges({PowerManagerService.REQUIRE_TURN_SCREEN_ON_PERMISSION})
+    public void testWakefulnessAwake_AcquireCausesWakeupOldSdk_turnScreenOnAllowed() {
+        createService();
+        startSystem();
+        forceSleep();
+
+        IBinder token = new Binder();
+        String tag = "acq_causes_wakeup";
+        String packageName = "pkg.name";
+        AttributionSource attrSrc = new AttributionSource(Binder.getCallingUid(),
+                packageName, /* attributionTag= */ null);
+
+        // verify that the wakeup is allowed for apps targeting older sdks, and therefore won't have
+        // the TURN_SCREEN_ON permission granted
+        doReturn(PermissionChecker.PERMISSION_HARD_DENIED).when(
+                mPermissionCheckerWrapperMock).checkPermissionForDataDelivery(any(),
+                eq(android.Manifest.permission.TURN_SCREEN_ON), anyInt(), eq(attrSrc), anyString());
+
+        doReturn(false).when(mPowerPropertiesWrapper).waive_target_sdk_check_for_turn_screen_on();
+
+        int flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
+        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
+    }
+
+    @Test
+    @EnableCompatChanges({PowerManagerService.REQUIRE_TURN_SCREEN_ON_PERMISSION})
+    public void testWakefulnessAwake_AcquireCausesWakeup_turnScreenOnDenied() {
+        createService();
+        startSystem();
+        forceSleep();
+
+        IBinder token = new Binder();
+        String tag = "acq_causes_wakeup";
+        String packageName = "pkg.name";
+        AttributionSource attrSrc = new AttributionSource(Binder.getCallingUid(),
+                packageName, /* attributionTag= */ null);
+        doReturn(PermissionChecker.PERMISSION_HARD_DENIED).when(
+                mPermissionCheckerWrapperMock).checkPermissionForDataDelivery(any(),
+                eq(android.Manifest.permission.TURN_SCREEN_ON), anyInt(), eq(attrSrc), anyString());
+
+        doReturn(false).when(mPowerPropertiesWrapper).waive_target_sdk_check_for_turn_screen_on();
+        doReturn(false).when(mPowerPropertiesWrapper).permissionless_turn_screen_on();
+
+        // Verify that flag has no effect when TURN_SCREEN_ON is not allowed for apps targeting U+
+        int flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
+        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+        mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
+    }
+
+    @Test
+    @EnableCompatChanges({PowerManagerService.REQUIRE_TURN_SCREEN_ON_PERMISSION})
+    public void testWakefulnessAwake_AcquireCausesWakeupOldSdk_turnScreenOnDenied() {
+        createService();
+        startSystem();
+        forceSleep();
+
+        IBinder token = new Binder();
+        String tag = "acq_causes_wakeup";
+        String packageName = "pkg.name";
+        AttributionSource attrSrc = new AttributionSource(Binder.getCallingUid(),
+                packageName, /* attributionTag= */ null);
+        doReturn(PermissionChecker.PERMISSION_HARD_DENIED).when(
+                mPermissionCheckerWrapperMock).checkPermissionForDataDelivery(any(),
+                eq(android.Manifest.permission.TURN_SCREEN_ON), anyInt(), eq(attrSrc), anyString());
+
+        doReturn(true).when(mPowerPropertiesWrapper).waive_target_sdk_check_for_turn_screen_on();
+
+        // Verify that flag has no effect when TURN_SCREEN_ON is not allowed for apps targeting U+
+        int flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
+        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
+        if (PowerProperties.permissionless_turn_screen_on().orElse(false)) {
+            assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        } else {
+            assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+        }
+        mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
+    }
+
+    @Test
+    public void testWakefulnessAwake_IPowerManagerWakeUp() {
+        createService();
+        startSystem();
+        forceSleep();
+        mService.getBinderServiceInstance().wakeUp(mClock.now(),
+                PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name");
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+    }
+
+    /**
+     * Tests a series of variants that control whether a device wakes-up when it is plugged in
+     * or docked.
+     */
+    @Test
+    public void testWakefulnessAwake_ShouldWakeUpWhenPluggedIn() {
+        createService();
+        startSystem();
+        forceSleep();
+
+        // Test 1:
+        // Set config to prevent it wake up, test, verify, reset config value.
+        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
+                .thenReturn(false);
+        mService.readConfigurationLocked();
+        setPluggedIn(true);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
+                .thenReturn(true);
+        mService.readConfigurationLocked();
+
+        // Test 2:
+        // Turn the power off, sleep, then plug into a wireless charger.
+        // Verify that we do not wake up if the phone is being plugged into a wireless charger.
+        setPluggedIn(false);
+        forceSleep();
+        when(mBatteryManagerInternalMock.getPlugType())
+                .thenReturn(BatteryManager.BATTERY_PLUGGED_WIRELESS);
+        when(mWirelessChargerDetectorMock.update(true /* isPowered */,
+                BatteryManager.BATTERY_PLUGGED_WIRELESS)).thenReturn(false);
+        setPluggedIn(true);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+
+        // Test 3:
+        // Do not wake up if the phone is being REMOVED from a wireless charger
+        when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0);
+        setPluggedIn(false);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+
+        // Test 4:
+        // Do not wake if we are dreaming.
+        forceAwake();  // Needs to be awake first before it can dream.
+        forceDream();
+        setPluggedIn(true);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
+        forceSleep();
+
+        // Test 5:
+        // Don't wake if the device is configured not to wake up in theater mode (and theater
+        // mode is enabled).
+        Settings.Global.putInt(
+                mContextSpy.getContentResolver(), Settings.Global.THEATER_MODE_ON, 1);
+        mUserSwitchedReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_USER_SWITCHED));
+        when(mResourcesSpy.getBoolean(
+                com.android.internal.R.bool.config_allowTheaterModeWakeFromUnplug))
+                .thenReturn(false);
+        setPluggedIn(false);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+        Settings.Global.putInt(
+                mContextSpy.getContentResolver(), Settings.Global.THEATER_MODE_ON, 0);
+        mUserSwitchedReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_USER_SWITCHED));
+
+        // Test 6:
+        // Don't wake up if we are Dozing away and always-on is enabled.
+        when(mAmbientDisplayConfigurationMock.alwaysOnEnabled(UserHandle.USER_CURRENT))
+                .thenReturn(true);
+        mUserSwitchedReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_USER_SWITCHED));
+        forceAwake();
+        forceDozing();
+        setPluggedIn(true);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
+
+        // Test 7:
+        // Finally, take away all the factors above and ensure the device wakes up!
+        forceAwake();
+        forceSleep();
+        setPluggedIn(false);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+    }
+
+    /**
+     * Tests that dreaming stops when undocking and not configured to keep dreaming.
+     */
+    @Test
+    public void testWakefulnessDream_shouldStopDreamingWhenUndocked_whenNotConfigured() {
+        // Make sure "unplug turns on screen" is configured to true.
+        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
+                .thenReturn(true);
+
+        createService();
+        startSystem();
+
+        ArgumentCaptor<DreamManagerInternal.DreamManagerStateListener> dreamManagerStateListener =
+                ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class);
+        verify(mDreamManagerInternalMock).registerDreamManagerStateListener(
+                dreamManagerStateListener.capture());
+        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(false);
+
+        when(mBatteryManagerInternalMock.getPlugType())
+                .thenReturn(BatteryManager.BATTERY_PLUGGED_DOCK);
+        setPluggedIn(true);
+
+        forceAwake();  // Needs to be awake first before it can dream.
+        forceDream();
+        when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0);
+        setPluggedIn(false);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+    }
+
+    /**
+     * Tests that dreaming continues when undocking and configured to do so.
+     */
+    @Test
+    public void testWakefulnessDream_shouldKeepDreamingWhenUndocked_whenConfigured() {
+        // Make sure "unplug turns on screen" is configured to true.
+        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
+                .thenReturn(true);
+
+        createService();
+        startSystem();
+
+        ArgumentCaptor<DreamManagerInternal.DreamManagerStateListener> dreamManagerStateListener =
+                ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class);
+        verify(mDreamManagerInternalMock).registerDreamManagerStateListener(
+                dreamManagerStateListener.capture());
+        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(true);
+
+        when(mBatteryManagerInternalMock.getPlugType())
+                .thenReturn(BatteryManager.BATTERY_PLUGGED_DOCK);
+        setPluggedIn(true);
+
+        forceAwake();  // Needs to be awake first before it can dream.
+        forceDream();
+        when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0);
+        setPluggedIn(false);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
+    }
+
+    /**
+     * Tests that dreaming stops when undocking while showing a dream that prevents it.
+     */
+    @Test
+    public void testWakefulnessDream_shouldStopDreamingWhenUndocked_whenDreamPrevents() {
+        // Make sure "unplug turns on screen" is configured to true.
+        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
+                .thenReturn(true);
+
+        createService();
+        startSystem();
+
+        ArgumentCaptor<DreamManagerInternal.DreamManagerStateListener> dreamManagerStateListener =
+                ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class);
+        verify(mDreamManagerInternalMock).registerDreamManagerStateListener(
+                dreamManagerStateListener.capture());
+        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(true);
+
+        when(mBatteryManagerInternalMock.getPlugType())
+                .thenReturn(BatteryManager.BATTERY_PLUGGED_DOCK);
+        setPluggedIn(true);
+
+        forceAwake();  // Needs to be awake first before it can dream.
+        forceDream();
+        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(false);
+        when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0);
+        setPluggedIn(false);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+    }
+
+    @Test
+    public void testWakefulnessDream_shouldStopDreamingWhenUnplugging_whenDreamPrevents() {
+        // Make sure "unplug turns on screen" is configured to true.
+        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
+                .thenReturn(true);
+
+        createService();
+        startSystem();
+
+        ArgumentCaptor<DreamManagerInternal.DreamManagerStateListener> dreamManagerStateListener =
+                ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class);
+        verify(mDreamManagerInternalMock).registerDreamManagerStateListener(
+                dreamManagerStateListener.capture());
+
+        when(mBatteryManagerInternalMock.getPlugType())
+                .thenReturn(BatteryManager.BATTERY_PLUGGED_AC);
+        setPluggedIn(true);
+
+        forceAwake();  // Needs to be awake first before it can dream.
+        forceDream();
+        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(false);
+        when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0);
+        setPluggedIn(false);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+    }
+
+
+    @Test
+    public void testWakefulnessDoze_goToSleep() {
+        createService();
+        // Start with AWAKE state
+        startSystem();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        // Take a nap and verify.
+        mService.getBinderServiceInstance().goToSleep(mClock.now(),
+                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
+    }
+
+    @Test
+    public void testWasDeviceIdleFor_true() {
+        int interval = 1000;
+        createService();
+        startSystem();
+        mService.onUserActivity();
+        advanceTime(interval + 1 /* just a little more */);
+        assertThat(mService.wasDeviceIdleForInternal(interval)).isTrue();
+    }
+
+    @Test
+    public void testWasDeviceIdleFor_false() {
+        int interval = 1000;
+        createService();
+        startSystem();
+        mService.onUserActivity();
+        assertThat(mService.wasDeviceIdleForInternal(interval)).isFalse();
+    }
+
+    @Test
+    public void testForceSuspend_putsDeviceToSleep() {
+        createService();
+        startSystem();
+
+        // Verify that we start awake
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        // Grab the wakefulness value when PowerManager finally calls into the
+        // native component to actually perform the suspend.
+        when(mNativeWrapperMock.nativeForceSuspend()).then(inv -> {
+            assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+            return true;
+        });
+
+        boolean retval = mService.getBinderServiceInstance().forceSuspend();
+        assertThat(retval).isTrue();
+
+        // Still asleep when the function returns.
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+    }
+
+    @Test
+    public void testForceSuspend_wakeLocksDisabled() {
+        final String tag = "TestWakelockTag_098213";
+        final int flags = PowerManager.PARTIAL_WAKE_LOCK;
+        final String pkg = mContextSpy.getOpPackageName();
+
+        createService();
+
+        // Set up the Notification mock to keep track of the wakelocks that are currently
+        // active or disabled. We'll use this to verify that wakelocks are disabled when
+        // they should be.
+        final Map<String, Integer> wakelockMap = new HashMap<>(1);
+        doAnswer(inv -> {
+            wakelockMap.put((String) inv.getArguments()[1], (int) inv.getArguments()[0]);
+            return null;
+        }).when(mNotifierMock).onWakeLockAcquired(anyInt(), anyString(), anyString(), anyInt(),
+                anyInt(), any(), any(), any());
+        doAnswer(inv -> {
+            wakelockMap.remove((String) inv.getArguments()[1]);
+            return null;
+        }).when(mNotifierMock).onWakeLockReleased(anyInt(), anyString(), anyString(), anyInt(),
+                anyInt(), any(), any(), any());
+
+        //
+        // TEST STARTS HERE
+        //
+        startSystem();
+
+        // Verify that we start awake
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        // Create a wakelock
+        mService.getBinderServiceInstance().acquireWakeLock(new Binder(), flags, tag, pkg,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
+        assertThat(wakelockMap.get(tag)).isEqualTo(flags);  // Verify wakelock is active.
+
+        // Confirm that the wakelocks have been disabled when the forceSuspend is in flight.
+        when(mNativeWrapperMock.nativeForceSuspend()).then(inv -> {
+            // Verify that the wakelock is disabled by the time we get to the native force
+            // suspend call.
+            assertThat(wakelockMap.containsKey(tag)).isFalse();
+            return true;
+        });
+
+        assertThat(mService.getBinderServiceInstance().forceSuspend()).isTrue();
+        assertThat(wakelockMap.get(tag)).isEqualTo(flags);
+
+    }
+
+    @Test
+    public void testForceSuspend_forceSuspendFailurePropagated() {
+        createService();
+        startSystem();
+        when(mNativeWrapperMock.nativeForceSuspend()).thenReturn(false);
+        assertThat(mService.getBinderServiceInstance().forceSuspend()).isFalse();
+    }
+
+    @SuppressWarnings("GuardedBy")
+    @Test
+    public void testScreensaverActivateOnSleepDisabled_powered_afterTimeout_goesToDozing() {
+        when(mBatteryManagerInternalMock.isPowered(anyInt())).thenReturn(true);
+
+        doAnswer(inv -> {
+            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
+            return null;
+        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
+
+        setMinimumScreenOffTimeoutConfig(5);
+        createService();
+        startSystem();
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        advanceTime(15000);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
+    }
+
+    @SuppressWarnings("GuardedBy")
+    @Test
+    public void testScreensaverActivateOnSleepEnabled_powered_afterTimeout_goesToDreaming() {
+        when(mBatteryManagerInternalMock.isPowered(anyInt())).thenReturn(true);
+        Settings.Secure.putInt(mContextSpy.getContentResolver(),
+                Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 1);
+
+        doAnswer(inv -> {
+            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
+            return null;
+        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
+
+        setMinimumScreenOffTimeoutConfig(5);
+        createService();
+        startSystem();
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        advanceTime(15000);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
+    }
+
+    @SuppressWarnings("GuardedBy")
+    @Test
+    public void testAmbientSuppression_disablesDreamingAndWakesDevice() {
+        Settings.Secure.putInt(mContextSpy.getContentResolver(),
+                Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 1);
+
+        setDreamsDisabledByAmbientModeSuppressionConfig(true);
+        setMinimumScreenOffTimeoutConfig(10000);
+        createService();
+        startSystem();
+
+        doAnswer(inv -> {
+            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
+            return null;
+        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
+
+        setPluggedIn(true);
+        // Allow asynchronous sandman calls to execute.
+        advanceTime(10000);
+
+        forceDream();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test", true);
+        advanceTime(50);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+    }
+
+    @SuppressWarnings("GuardedBy")
+    @Test
+    public void testAmbientSuppressionDisabled_shouldNotWakeDevice() {
+        Settings.Secure.putInt(mContextSpy.getContentResolver(),
+                Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 1);
+
+        setDreamsDisabledByAmbientModeSuppressionConfig(false);
+        setMinimumScreenOffTimeoutConfig(10000);
+        createService();
+        startSystem();
+
+        doAnswer(inv -> {
+            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
+            return null;
+        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
+
+        setPluggedIn(true);
+        // Allow asynchronous sandman calls to execute.
+        advanceTime(10000);
+
+        forceDream();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test", true);
+        advanceTime(50);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
+    }
+
+    @Test
+    public void testAmbientSuppression_doesNotAffectDreamForcing() {
+        Settings.Secure.putInt(mContextSpy.getContentResolver(),
+                Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 1);
+
+        setDreamsDisabledByAmbientModeSuppressionConfig(true);
+        setMinimumScreenOffTimeoutConfig(10000);
+        createService();
+        startSystem();
+
+        doAnswer(inv -> {
+            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
+            return null;
+        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
+
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test", true);
+        setPluggedIn(true);
+        // Allow asynchronous sandman calls to execute.
+        advanceTime(10000);
+
+        // Verify that forcing dream still works even though ambient display is suppressed
+        forceDream();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
+    }
+
+    @Test
+    public void testBatteryDrainDuringDream() {
+        Settings.Secure.putInt(mContextSpy.getContentResolver(),
+                Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 1);
+
+        setMinimumScreenOffTimeoutConfig(100);
+        setDreamsBatteryLevelDrainConfig(5);
+        createService();
+        startSystem();
+
+        doAnswer(inv -> {
+            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
+            return null;
+        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
+
+        setBatteryLevel(100);
+        setPluggedIn(true);
+
+        forceAwake();  // Needs to be awake first before it can dream.
+        forceDream();
+        advanceTime(10); // Allow async calls to happen
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
+        setBatteryLevel(90);
+        advanceTime(10); // Allow async calls to happen
+        assertThat(mService.getDreamsBatteryLevelDrain()).isEqualTo(10);
+
+        // If battery overheat protection is enabled, we shouldn't count battery drain
+        setBatteryHealth(BatteryManager.BATTERY_HEALTH_OVERHEAT);
+        setBatteryLevel(70);
+        advanceTime(10); // Allow async calls to happen
+        assertThat(mService.getDreamsBatteryLevelDrain()).isEqualTo(10);
+    }
+
+    @Test
+    public void testSetDozeOverrideFromDreamManager_triggersSuspendBlocker() {
+        final String suspendBlockerName = "PowerManagerService.Display";
+        final String tag = "acq_causes_wakeup";
+        final String packageName = "pkg.name";
+        final IBinder token = new Binder();
+
+        final boolean[] isAcquired = new boolean[1];
+        doAnswer(inv -> {
+            if (suspendBlockerName.equals(inv.getArguments()[0])) {
+                isAcquired[0] = false;
+            }
+            return null;
+        }).when(mNativeWrapperMock).nativeReleaseSuspendBlocker(any());
+
+        doAnswer(inv -> {
+            if (suspendBlockerName.equals(inv.getArguments()[0])) {
+                isAcquired[0] = true;
+            }
+            return null;
+        }).when(mNativeWrapperMock).nativeAcquireSuspendBlocker(any());
+
+        // Need to create the service after we stub the mocks for this test because some of the
+        // mocks are used during the constructor.
+        createService();
+
+        // Start with AWAKE state
+        startSystem();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertTrue(isAcquired[0]);
+
+        // Take a nap and verify we no longer hold the blocker
+        int flags = PowerManager.DOZE_WAKE_LOCK;
+        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
+        when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
+        mService.getBinderServiceInstance().goToSleep(mClock.now(),
+                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
+        assertFalse(isAcquired[0]);
+
+        // Override the display state by DreamManager and verify is reacquires the blocker.
+        mService.getLocalServiceInstance()
+                .setDozeOverrideFromDreamManager(Display.STATE_ON, PowerManager.BRIGHTNESS_DEFAULT);
+        assertTrue(isAcquired[0]);
+    }
+
+    @Test
+    public void testSuspendBlockerHeldDuringBoot() {
+        final String suspendBlockerName = "PowerManagerService.Booting";
+
+        final boolean[] isAcquired = new boolean[1];
+        doAnswer(inv -> {
+            isAcquired[0] = false;
+            return null;
+        }).when(mNativeWrapperMock).nativeReleaseSuspendBlocker(eq(suspendBlockerName));
+
+        doAnswer(inv -> {
+            isAcquired[0] = true;
+            return null;
+        }).when(mNativeWrapperMock).nativeAcquireSuspendBlocker(eq(suspendBlockerName));
+
+        // Need to create the service after we stub the mocks for this test because some of the
+        // mocks are used during the constructor.
+        createService();
+        assertTrue(isAcquired[0]);
+
+        mService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
+        assertTrue(isAcquired[0]);
+
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+        assertFalse(isAcquired[0]);
+    }
+
+    @Test
+    public void testInattentiveSleep_hideWarningIfStayOnIsEnabledAndPluggedIn() {
+        setMinimumScreenOffTimeoutConfig(5);
+        setAttentiveWarningDuration(120);
+        setAttentiveTimeout(100);
+
+        Settings.Global.putInt(mContextSpy.getContentResolver(),
+                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, BatteryManager.BATTERY_PLUGGED_AC);
+
+        createService();
+        startSystem();
+
+        verify(mInattentiveSleepWarningControllerMock, times(1)).show();
+        verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean());
+        when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
+
+        setPluggedIn(true);
+        verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss(true);
+    }
+
+    @Test
+    public void testInattentiveSleep_hideWarningIfInattentiveSleepIsDisabled() {
+        setMinimumScreenOffTimeoutConfig(5);
+        setAttentiveWarningDuration(120);
+        setAttentiveTimeout(100);
+
+        createService();
+        startSystem();
+
+        verify(mInattentiveSleepWarningControllerMock, times(1)).show();
+        verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean());
+        when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
+
+        setAttentiveTimeout(-1);
+        mService.handleSettingsChangedLocked();
+
+        verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss(true);
+    }
+
+    @Test
+    public void testInattentiveSleep_userActivityDismissesWarning() {
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
+        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info);
+        setMinimumScreenOffTimeoutConfig(5);
+        setAttentiveWarningDuration(1900);
+        setAttentiveTimeout(2000);
+
+        createService();
+        startSystem();
+
+        mService.getBinderServiceInstance().userActivity(Display.DEFAULT_DISPLAY, mClock.now(),
+                PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0);
+        verify(mInattentiveSleepWarningControllerMock, never()).show();
+
+        advanceTime(150);
+        verify(mInattentiveSleepWarningControllerMock, times(1)).show();
+        verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean());
+        when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
+
+        mService.getBinderServiceInstance().userActivity(Display.DEFAULT_DISPLAY, mClock.now(),
+                PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0);
+        verify(mInattentiveSleepWarningControllerMock, times(1)).dismiss(true);
+    }
+
+    @Test
+    public void testInattentiveSleep_warningHiddenAfterWakingUp() {
+        setMinimumScreenOffTimeoutConfig(5);
+        setAttentiveWarningDuration(70);
+        setAttentiveTimeout(100);
+
+        createService();
+        startSystem();
+        advanceTime(50);
+        verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).show();
+        when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
+        advanceTime(70);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+        forceAwake();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss(false);
+    }
+
+    @Test
+    public void testInattentiveSleep_warningStaysWhenDreaming() {
+        setMinimumScreenOffTimeoutConfig(5);
+        setAttentiveWarningDuration(70);
+        setAttentiveTimeout(100);
+        createService();
+        startSystem();
+        advanceTime(50);
+        verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).show();
+        when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
+
+        forceDream();
+        when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
+
+        advanceTime(10);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
+        verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean());
+    }
+
+    @Test
+    public void testInattentiveSleep_warningNotShownWhenSleeping() {
+        setMinimumScreenOffTimeoutConfig(5);
+        setAttentiveWarningDuration(70);
+        setAttentiveTimeout(100);
+        createService();
+        startSystem();
+
+        advanceTime(10);
+        forceSleep();
+
+        advanceTime(50);
+        verify(mInattentiveSleepWarningControllerMock, never()).show();
+    }
+
+    @Test
+    public void testInattentiveSleep_noWarningShownIfInattentiveSleepDisabled() {
+        setAttentiveTimeout(-1);
+        createService();
+        startSystem();
+        verify(mInattentiveSleepWarningControllerMock, never()).show();
+    }
+
+    @Test
+    public void testInattentiveSleep_goesToSleepAfterTimeout() {
+        setMinimumScreenOffTimeoutConfig(5);
+        setAttentiveTimeout(5);
+        createService();
+        startSystem();
+        advanceTime(20);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getBinderServiceInstance().getLastSleepReason()).isEqualTo(
+                PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE);
+    }
+
+    @Test
+    public void testInattentiveSleep_goesToSleepWithWakeLock() {
+        final String pkg = mContextSpy.getOpPackageName();
+        final Binder token = new Binder();
+        final String tag = "testInattentiveSleep_goesToSleepWithWakeLock";
+
+        setMinimumScreenOffTimeoutConfig(5);
+        setAttentiveTimeout(30);
+        createService();
+        startSystem();
+
+        mService.getBinderServiceInstance().acquireWakeLock(token,
+                PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        advanceTime(60);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getBinderServiceInstance().getLastSleepReason()).isEqualTo(
+                PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE);
+    }
+
+    @Test
+    public void testInattentiveSleep_dreamEnds_goesToSleepAfterTimeout() {
+        setMinimumScreenOffTimeoutConfig(5);
+        setAttentiveTimeout(30000);
+        createService();
+        startSystem();
+
+        advanceTime(10000);
+        forceDream();
+        advanceTime(10000);
+        final String pkg = mContextSpy.getOpPackageName();
+        mService.getBinderServiceInstance().wakeUp(mClock.now(),
+                PowerManager.WAKE_REASON_DREAM_FINISHED, "PowerManagerServiceTest:DREAM_FINISHED",
+                pkg);
+        advanceTime(10001);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getBinderServiceInstance().getLastSleepReason()).isEqualTo(
+                PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE);
+    }
+
+    @Test
+    public void testInattentiveSleep_wakeLockOnAfterRelease_inattentiveSleepTimeoutNotAffected() {
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
+        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info);
+
+        final String pkg = mContextSpy.getOpPackageName();
+        final Binder token = new Binder();
+        final String tag = "testInattentiveSleep_wakeLockOnAfterRelease";
+
+        setMinimumScreenOffTimeoutConfig(5);
+        setAttentiveTimeout(2000);
+        createService();
+        startSystem();
+
+        mService.getBinderServiceInstance().acquireWakeLock(token,
+                PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, tag, pkg,
+                null /* workSource */, null /* historyTag */, Display.DEFAULT_DISPLAY, null);
+
+        advanceTime(1500);
+        mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
+
+        advanceTime(520);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getBinderServiceInstance().getLastSleepReason()).isEqualTo(
+                PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE);
+    }
+
+    @Test
+    public void testInattentiveSleep_userActivityNoChangeLights_inattentiveSleepTimeoutNotAffected() {
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
+        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info);
+
+        setMinimumScreenOffTimeoutConfig(5);
+        setAttentiveTimeout(2000);
+        createService();
+        startSystem();
+
+        advanceTime(1500);
+        mService.getBinderServiceInstance().userActivity(Display.DEFAULT_DISPLAY, mClock.now(),
+                PowerManager.USER_ACTIVITY_EVENT_OTHER,
+                PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS);
+
+        advanceTime(520);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getBinderServiceInstance().getLastSleepReason()).isEqualTo(
+                PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE);
+    }
+
+    @Test
+    public void testInattentiveSleep_userActivity_inattentiveSleepTimeoutExtended() {
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
+        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info);
+
+        setMinimumScreenOffTimeoutConfig(5);
+        setAttentiveTimeout(2000);
+        createService();
+        startSystem();
+
+        advanceTime(1500);
+        mService.getBinderServiceInstance().userActivity(Display.DEFAULT_DISPLAY, mClock.now(),
+                PowerManager.USER_ACTIVITY_EVENT_OTHER, 0 /* flags */);
+
+        advanceTime(520);
+        assertThat(mService.getGlobalWakefulnessLocked()).isNotEqualTo(WAKEFULNESS_ASLEEP);
+    }
+
+
+    @SuppressWarnings("GuardedBy")
+    @Test
+    public void testInattentiveSleep_goesToSleepFromDream() {
+        setAttentiveTimeout(20000);
+        createService();
+        startSystem();
+        setPluggedIn(true);
+        forceAwake();
+        forceDream();
+        when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
+
+        advanceTime(20500);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+    }
+
+    @Test
+    public void testWakeLock_affectsProperDisplayGroup() {
+        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
+        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info);
+
+        final String pkg = mContextSpy.getOpPackageName();
+        final Binder token = new Binder();
+        final String tag = "testWakeLock_affectsProperDisplayGroup";
+
+        setMinimumScreenOffTimeoutConfig(5);
+        createService();
+        startSystem();
+        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
+
+        mService.getBinderServiceInstance().acquireWakeLock(token,
+                PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg,
+                null /* workSource */, null /* historyTag */, Display.DEFAULT_DISPLAY, null);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+
+        advanceTime(15000);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
+                WAKEFULNESS_DOZING);
+    }
+
+    @Test
+    public void testInvalidDisplayGroupWakeLock_affectsAllDisplayGroups() {
+        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
+        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info);
+
+        final String pkg = mContextSpy.getOpPackageName();
+        final Binder token = new Binder();
+        final String tag = "testInvalidDisplayGroupWakeLock_affectsAllDisplayGroups";
+
+        setMinimumScreenOffTimeoutConfig(5);
+        createService();
+        startSystem();
+        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
+
+        mService.getBinderServiceInstance().acquireWakeLock(token,
+                PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+
+        advanceTime(15000);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+    }
+
+    @Test
+    public void testRemovedDisplayGroupWakeLock_affectsNoDisplayGroups() {
+        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = nonDefaultDisplayGroupId;
+        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
+
+        doAnswer(inv -> {
+            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
+            return null;
+        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
+
+        final String pkg = mContextSpy.getOpPackageName();
+        final Binder token = new Binder();
+        final String tag = "testRemovedDisplayGroupWakeLock_affectsNoDisplayGroups";
+
+        setMinimumScreenOffTimeoutConfig(5);
+        createService();
+        startSystem();
+        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
+
+        mService.getBinderServiceInstance().acquireWakeLock(token,
+                PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg,
+                null /* workSource */, null /* historyTag */, nonDefaultDisplay, null);
+
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        listener.get().onDisplayGroupRemoved(nonDefaultDisplayGroupId);
+
+        advanceTime(15000);
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_DOZING);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
+    }
+
+    @Test
+    public void testBoot_ShouldBeAwake() {
+        createService();
+        startSystem();
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        verify(mNotifierMock, never()).onGlobalWakefulnessChangeStarted(anyInt(), anyInt(),
+                anyLong());
+    }
+
+    @Test
+    public void testBoot_DesiredScreenPolicyShouldBeBright() {
+        createService();
+        startSystem();
+
+        assertThat(mService.getDesiredScreenPolicyLocked(Display.DEFAULT_DISPLAY)).isEqualTo(
+                DisplayPowerRequest.POLICY_BRIGHT);
+    }
+
+    @Test
+    public void testQuiescentBoot_ShouldBeAsleep() {
+        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_QUIESCENT), any())).thenReturn("1");
+        createService();
+        startSystem();
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+        verify(mNotifierMock).onGlobalWakefulnessChangeStarted(eq(WAKEFULNESS_ASLEEP), anyInt(),
+                anyLong());
+    }
+
+    @Test
+    public void testQuiescentBoot_DesiredScreenPolicyShouldBeOff() {
+        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_QUIESCENT), any())).thenReturn("1");
+        createService();
+        startSystem();
+        assertThat(mService.getDesiredScreenPolicyLocked(Display.DEFAULT_DISPLAY)).isEqualTo(
+                DisplayPowerRequest.POLICY_OFF);
+    }
+
+    @Test
+    public void testQuiescentBoot_WakeUp_DesiredScreenPolicyShouldBeBright() {
+        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_QUIESCENT), any())).thenReturn("1");
+        createService();
+        startSystem();
+        forceAwake();
+        assertThat(mService.getDesiredScreenPolicyLocked(Display.DEFAULT_DISPLAY)).isEqualTo(
+                DisplayPowerRequest.POLICY_BRIGHT);
+    }
+
+    @Test
+    public void testQuiescentBoot_WakeKeyBeforeBootCompleted_AwakeAfterBootCompleted() {
+        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_QUIESCENT), any())).thenReturn("1");
+        createService();
+        startSystem();
+
+        mService.getBinderServiceInstance().wakeUp(mClock.now(),
+                PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name");
+
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getDesiredScreenPolicyLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                DisplayPowerRequest.POLICY_BRIGHT);
+    }
+
+    @Test
+    public void testIsAmbientDisplayAvailable_available() {
+        createService();
+        when(mAmbientDisplayConfigurationMock.ambientDisplayAvailable()).thenReturn(true);
+
+        assertThat(mService.getBinderServiceInstance().isAmbientDisplayAvailable()).isTrue();
+    }
+
+    @Test
+    public void testIsAmbientDisplayAvailable_unavailable() {
+        createService();
+        when(mAmbientDisplayConfigurationMock.ambientDisplayAvailable()).thenReturn(false);
+
+        assertThat(mService.getBinderServiceInstance().isAmbientDisplayAvailable()).isFalse();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressed_default_notSuppressed() {
+        createService();
+
+        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressed()).isFalse();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressed_suppressed() {
+        createService();
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test", true);
+
+        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressed()).isTrue();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressed_notSuppressed() {
+        createService();
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test", false);
+
+        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressed()).isFalse();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressed_multipleTokens_suppressed() {
+        createService();
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test1", false);
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test2", true);
+
+        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressed()).isTrue();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressed_multipleTokens_notSuppressed() {
+        createService();
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test1", false);
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test2", false);
+
+        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressed()).isFalse();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressedForToken_default_notSuppressed() {
+        createService();
+
+        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressedForToken("test"))
+            .isFalse();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressedForToken_suppressed() {
+        createService();
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test", true);
+
+        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressedForToken("test"))
+            .isTrue();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressedForToken_notSuppressed() {
+        createService();
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test", false);
+
+        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressedForToken("test"))
+            .isFalse();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressedForToken_multipleTokens_suppressed() {
+        createService();
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test1", true);
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test2", true);
+
+        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressedForToken("test1"))
+            .isTrue();
+        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressedForToken("test2"))
+            .isTrue();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressedForToken_multipleTokens_notSuppressed() {
+        createService();
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test1", true);
+        mService.getBinderServiceInstance().suppressAmbientDisplay("test2", false);
+
+        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressedForToken("test1"))
+            .isTrue();
+        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressedForToken("test2"))
+            .isFalse();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressedForTokenByApp_ambientDisplayUnavailable() {
+        createService();
+        when(mAmbientDisplayConfigurationMock.ambientDisplayAvailable()).thenReturn(false);
+
+        BinderService service = mService.getBinderServiceInstance();
+        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test", Binder.getCallingUid()))
+            .isFalse();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressedForTokenByApp_default() {
+        createService();
+
+        BinderService service = mService.getBinderServiceInstance();
+        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test", Binder.getCallingUid()))
+            .isFalse();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressedForTokenByApp_suppressedByCallingApp() {
+        createService();
+        BinderService service = mService.getBinderServiceInstance();
+        service.suppressAmbientDisplay("test", true);
+
+        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test", Binder.getCallingUid()))
+            .isTrue();
+        // Check that isAmbientDisplaySuppressedForTokenByApp doesn't return true for another app.
+        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test", /* appUid= */ 123))
+            .isFalse();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressedForTokenByApp_notSuppressedByCallingApp() {
+        createService();
+        BinderService service = mService.getBinderServiceInstance();
+        service.suppressAmbientDisplay("test", false);
+
+        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test", Binder.getCallingUid()))
+            .isFalse();
+        // Check that isAmbientDisplaySuppressedForTokenByApp doesn't return true for another app.
+        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test", /* appUid= */ 123))
+            .isFalse();
+    }
+
+    @Test
+    public void testIsAmbientDisplaySuppressedForTokenByApp_multipleTokensSuppressedByCallingApp() {
+        createService();
+        BinderService service = mService.getBinderServiceInstance();
+        service.suppressAmbientDisplay("test1", true);
+        service.suppressAmbientDisplay("test2", true);
+
+        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test1", Binder.getCallingUid()))
+            .isTrue();
+        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test2", Binder.getCallingUid()))
+            .isTrue();
+        // Check that isAmbientDisplaySuppressedForTokenByApp doesn't return true for another app.
+        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test1", /* appUid= */ 123))
+            .isFalse();
+        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test2", /* appUid= */ 123))
+            .isFalse();
+    }
+
+    @Test
+    public void testGetAmbientDisplaySuppressionTokens_default() {
+        createService();
+        BinderService service = mService.getBinderServiceInstance();
+
+        assertThat(service.getAmbientDisplaySuppressionTokens()).isEmpty();
+    }
+
+    @Test
+    public void testGetAmbientDisplaySuppressionTokens_singleToken() {
+        createService();
+        BinderService service = mService.getBinderServiceInstance();
+        service.suppressAmbientDisplay("test1", true);
+        service.suppressAmbientDisplay("test2", false);
+
+        assertThat(service.getAmbientDisplaySuppressionTokens()).containsExactly("test1");
+    }
+
+    @Test
+    public void testGetAmbientDisplaySuppressionTokens_multipleTokens() {
+        createService();
+        BinderService service = mService.getBinderServiceInstance();
+        service.suppressAmbientDisplay("test1", true);
+        service.suppressAmbientDisplay("test2", true);
+
+        assertThat(service.getAmbientDisplaySuppressionTokens())
+                .containsExactly("test1", "test2");
+    }
+
+    @Test
+    public void testSetPowerBoost_redirectsCallToNativeWrapper() {
+        createService();
+        startSystem();
+
+        mService.getBinderServiceInstance().setPowerBoost(Boost.INTERACTION, 1234);
+
+        verify(mNativeWrapperMock).nativeSetPowerBoost(eq(Boost.INTERACTION), eq(1234));
+    }
+
+    @Test
+    public void testSetPowerMode_redirectsCallToNativeWrapper() {
+        createService();
+        startSystem();
+
+        // Enabled launch boost in BatterySaverController to allow setting launch mode.
+        when(mBatterySaverControllerMock.isLaunchBoostDisabled()).thenReturn(false);
+        when(mNativeWrapperMock.nativeSetPowerMode(anyInt(), anyBoolean())).thenReturn(true);
+
+        mService.getBinderServiceInstance().setPowerMode(Mode.LAUNCH, true);
+
+        verify(mNativeWrapperMock).nativeSetPowerMode(eq(Mode.LAUNCH), eq(true));
+    }
+
+    @Test
+    public void testSetPowerMode_withLaunchBoostDisabledAndModeLaunch_ignoresCallToEnable() {
+        createService();
+        startSystem();
+
+        // Disables launch boost in BatterySaverController.
+        when(mBatterySaverControllerMock.isLaunchBoostDisabled()).thenReturn(true);
+        when(mNativeWrapperMock.nativeSetPowerMode(anyInt(), anyBoolean())).thenReturn(true);
+
+        mService.getBinderServiceInstance().setPowerMode(Mode.LAUNCH, true);
+        mService.getBinderServiceInstance().setPowerMode(Mode.LAUNCH, false);
+
+        verify(mNativeWrapperMock, never()).nativeSetPowerMode(eq(Mode.LAUNCH), eq(true));
+        verify(mNativeWrapperMock).nativeSetPowerMode(eq(Mode.LAUNCH), eq(false));
+    }
+
+    @Test
+    public void testSetPowerModeChecked_returnsNativeCallResult() {
+        createService();
+        startSystem();
+
+        // Disables launch boost in BatterySaverController.
+        when(mBatterySaverControllerMock.isLaunchBoostDisabled()).thenReturn(true);
+        when(mNativeWrapperMock.nativeSetPowerMode(anyInt(), anyBoolean())).thenReturn(true);
+        when(mNativeWrapperMock.nativeSetPowerMode(eq(Mode.INTERACTIVE), anyBoolean()))
+            .thenReturn(false);
+
+        // Ignored because isLaunchBoostDisabled is true. Should return false.
+        assertFalse(mService.getBinderServiceInstance().setPowerModeChecked(Mode.LAUNCH, true));
+        // Native calls return true.
+        assertTrue(mService.getBinderServiceInstance().setPowerModeChecked(Mode.LAUNCH, false));
+        assertTrue(mService.getBinderServiceInstance().setPowerModeChecked(Mode.LOW_POWER, true));
+        // Native call for interactive returns false.
+        assertFalse(
+                mService.getBinderServiceInstance().setPowerModeChecked(Mode.INTERACTIVE, false));
+    }
+
+    @Test
+    public void testMultiDisplay_wakefulnessUpdates() {
+        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+
+        createService();
+        startSystem();
+        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_ASLEEP, 0, 0, 0, 0,
+                null, null);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        mService.setWakefulnessLocked(nonDefaultDisplayGroupId, WAKEFULNESS_ASLEEP, 0, 0, 0, 0,
+                null, null);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+
+        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_AWAKE, 0, 0, 0, 0,
+                null, null);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+    }
+
+    @Test
+    public void testMultiDisplay_addDisplayGroup_wakesDeviceUp() {
+        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+
+        createService();
+        startSystem();
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_ASLEEP, 0, 0, 0, 0,
+                null, null);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+
+        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+    }
+
+    @Test
+    public void testMultiDisplay_removeDisplayGroup_updatesWakefulness() {
+        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+
+        createService();
+        startSystem();
+        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_ASLEEP, 0, 0, 0, 0,
+                null, null);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        listener.get().onDisplayGroupRemoved(nonDefaultDisplayGroupId);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+
+        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_AWAKE, 0, 0, 0, 0,
+                null, null);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+    }
+
+    @Test
+    public void testMultiDisplay_updatesLastGlobalWakeTime() {
+        final int nonDefaultPowerGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        long eventTime1 = 10;
+        long eventTime2 = eventTime1 + 1;
+        long eventTime3 = eventTime2 + 1;
+        long eventTime4 = eventTime3 + 1;
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+
+        createService();
+        startSystem();
+        listener.get().onDisplayGroupAdded(nonDefaultPowerGroupId);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_DOZING, eventTime1,
+                0, PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE, 0, null, null);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        mService.setWakefulnessLocked(nonDefaultPowerGroupId, WAKEFULNESS_DOZING, eventTime2,
+                0, PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
+        long eventElapsedRealtime1 = mLastElapsedRealtime;
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
+        assertThat(mService.getBinderServiceInstance().getLastSleepReason()).isEqualTo(
+                PowerManager.GO_TO_SLEEP_REASON_APPLICATION);
+
+        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_AWAKE,
+                eventTime3, /* uid= */ 0, PowerManager.WAKE_REASON_PLUGGED_IN, /* opUid= */
+                0, /* opPackageName= */ null, /* details= */ null);
+        long eventElapsedRealtime2 = mLastElapsedRealtime;
+        PowerManager.WakeData wakeData = mService.getLocalServiceInstance().getLastWakeup();
+        assertThat(wakeData.wakeTime).isEqualTo(eventTime3);
+        assertThat(wakeData.wakeReason).isEqualTo(PowerManager.WAKE_REASON_PLUGGED_IN);
+        assertThat(wakeData.sleepDurationRealtime)
+                .isEqualTo(eventElapsedRealtime2 - eventElapsedRealtime1);
+
+        // The global wake time and reason as well as sleep duration shouldn't change when another
+        // PowerGroup wakes up.
+        mService.setWakefulnessLocked(nonDefaultPowerGroupId, WAKEFULNESS_AWAKE,
+                eventTime4, /* uid= */ 0, PowerManager.WAKE_REASON_CAMERA_LAUNCH, /* opUid= */
+                0, /* opPackageName= */ null, /* details= */ null);
+        PowerManager.WakeData wakeData2 = mService.getLocalServiceInstance().getLastWakeup();
+        assertThat(wakeData2).isEqualTo(wakeData);
+    }
+
+    @Test
+    public void testMultiDisplay_defaultDisplayCanDoze() {
+        createService();
+        startSystem();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+
+        forceDozing();
+        // Allow handleSandman() to be called asynchronously
+        advanceTime(500);
+        verify(mDreamManagerInternalMock).startDream(eq(true), anyString());
+    }
+
+    @Test
+    public void testMultiDisplay_twoDisplays_defaultDisplayCanDoze() {
+        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = nonDefaultDisplayGroupId;
+        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
+
+        createService();
+        startSystem();
+
+        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
+
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        forceDozing();
+
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_DOZING);
+        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        // Allow handleSandman() to be called asynchronously
+        advanceTime(500);
+        verify(mDreamManagerInternalMock).startDream(eq(true), anyString());
+    }
+
+    @Test
+    public void testMultiDisplay_addNewDisplay_becomeGloballyAwakeButDefaultRemainsDozing() {
+        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = nonDefaultDisplayGroupId;
+        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
+
+        doAnswer(inv -> {
+            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
+            return null;
+        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
+
+        createService();
+        startSystem();
+
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+
+        forceDozing();
+        advanceTime(500);
+
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_DOZING);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
+        verify(mDreamManagerInternalMock).stopDream(anyBoolean(), anyString());
+        verify(mDreamManagerInternalMock).startDream(eq(true), anyString());
+
+        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
+        advanceTime(500);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_DOZING);
+
+        // Make sure there were no additional calls to stopDream or startDream
+        verify(mDreamManagerInternalMock, atMost(1)).stopDream(anyBoolean(), anyString());
+        verify(mDreamManagerInternalMock, atMost(1)).startDream(eq(true), anyString());
+    }
+
+    @Test
+    public void testLastSleepTime_notUpdatedWhenDreaming() {
+        createService();
+        startSystem();
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        PowerManager.WakeData initialWakeData = mService.getLocalServiceInstance().getLastWakeup();
+
+        forceDream();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
+        assertThat(mService.getLocalServiceInstance().getLastWakeup()).isEqualTo(initialWakeData);
+    }
+
+    @Test
+    public void testMultiDisplay_onlyOneDisplaySleeps_onWakefulnessChangedEventsFire() {
+        createService();
+        startSystem();
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        forceSleep();
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_ASLEEP);
+
+        verify(mNotifierMock).onGroupWakefulnessChangeStarted(eq(Display.DEFAULT_DISPLAY_GROUP),
+                eq(WAKEFULNESS_ASLEEP), eq(PowerManager.GO_TO_SLEEP_REASON_APPLICATION), anyLong());
+        verify(mNotifierMock).onGlobalWakefulnessChangeStarted(eq(WAKEFULNESS_ASLEEP),
+                eq(PowerManager.GO_TO_SLEEP_REASON_APPLICATION), anyLong());
+    }
+
+    @Test
+    public void testMultiDisplay_bothDisplaysSleep_onWakefulnessChangedEventsFireCorrectly() {
+        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = nonDefaultDisplayGroupId;
+        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
+
+        createService();
+        startSystem();
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
+
+        mService.setWakefulnessLocked(nonDefaultDisplayGroupId, WAKEFULNESS_ASLEEP, 0, 0,
+                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
+        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_ASLEEP, 0, 0,
+                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_ASLEEP);
+        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
+                WAKEFULNESS_ASLEEP);
+
+        verify(mNotifierMock).onGroupWakefulnessChangeStarted(eq(nonDefaultDisplayGroupId),
+                eq(WAKEFULNESS_ASLEEP), eq(PowerManager.GO_TO_SLEEP_REASON_APPLICATION), anyLong());
+        verify(mNotifierMock).onGroupWakefulnessChangeStarted(eq(Display.DEFAULT_DISPLAY_GROUP),
+                eq(WAKEFULNESS_ASLEEP), eq(PowerManager.GO_TO_SLEEP_REASON_APPLICATION), anyLong());
+        verify(mNotifierMock).onGlobalWakefulnessChangeStarted(eq(WAKEFULNESS_ASLEEP),
+                eq(PowerManager.GO_TO_SLEEP_REASON_APPLICATION), anyLong());
+    }
+
+    @Test
+    public void testMultiDisplay_separateWakeStates_onWakefulnessChangedEventsFireCorrectly() {
+        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = nonDefaultDisplayGroupId;
+        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
+
+        createService();
+        startSystem();
+
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
+
+        final String pkg = mContextSpy.getOpPackageName();
+        final Binder token = new Binder();
+        final String tag =
+                "testMultiDisplay_separateWakeStates_onWakefulnessChangedEventFiresCorrectly";
+        mService.getBinderServiceInstance().acquireWakeLock(token,
+                PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg,
+                null /* workSource */, null /* historyTag */, nonDefaultDisplay, null);
+
+        forceSleep();
+
+        // The wakelock should have kept the second display awake, and we should notify that the
+        // default display went to sleep.
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_ASLEEP);
+        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+        verify(mNotifierMock).onGroupWakefulnessChangeStarted(eq(nonDefaultDisplayGroupId),
+                eq(WAKEFULNESS_AWAKE), eq(PowerManager.WAKE_REASON_DISPLAY_GROUP_ADDED), anyLong());
+        verify(mNotifierMock).onGroupWakefulnessChangeStarted(eq(Display.DEFAULT_DISPLAY_GROUP),
+                eq(WAKEFULNESS_ASLEEP), eq(PowerManager.GO_TO_SLEEP_REASON_APPLICATION), anyLong());
+        verify(mNotifierMock, never()).onGlobalWakefulnessChangeStarted(eq(WAKEFULNESS_ASLEEP),
+                anyInt(), anyLong());
+    }
+
+    @Test
+    public void testMultiDisplay_oneDisplayGroupChanges_globalDoesNotChange() {
+        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = nonDefaultDisplayGroupId;
+        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
+
+        createService();
+        startSystem();
+
+        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
+
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+
+        long eventTime = mClock.now();
+        mService.setWakefulnessLocked(nonDefaultDisplayGroupId, WAKEFULNESS_ASLEEP, eventTime, 0,
+                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
+
+        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
+                WAKEFULNESS_AWAKE);
+        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
+                WAKEFULNESS_ASLEEP);
+        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
+        verify(mNotifierMock, never()).onGlobalWakefulnessChangeStarted(anyInt(), anyInt(),
+                anyLong());
+        verify(mNotifierMock, atMost(1)).onGroupWakefulnessChangeStarted(
+                eq(nonDefaultDisplayGroupId), eq(WAKEFULNESS_ASLEEP),
+                eq(PowerManager.GO_TO_SLEEP_REASON_APPLICATION), eq(eventTime));
+    }
+
+    @Test
+    public void testMultiDisplay_isInteractive_nonExistentGroup() {
+        createService();
+        startSystem();
+
+        int nonExistentDisplayGroup = 999;
+        BinderService binderService = mService.getBinderServiceInstance();
+        assertThat(binderService.isDisplayInteractive(nonExistentDisplayGroup)).isFalse();
+    }
+
+    private void testMultiDisplay_isInteractive_returnsCorrectValue(
+            boolean defaultDisplayAwake, boolean secondGroupDisplayAwake) {
+        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        // We use a display id that does not match the group id, to make sure we aren't accidentally
+        // confusing display id's and display group id's in the implementation.
+        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 17;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+
+        final DisplayInfo defaultDisplayInfo = new DisplayInfo();
+        defaultDisplayInfo.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
+        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(
+                defaultDisplayInfo);
+
+        final DisplayInfo secondDisplayInfo = new DisplayInfo();
+        secondDisplayInfo.displayGroupId = nonDefaultDisplayGroupId;
+        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(
+                secondDisplayInfo);
+
+        createService();
+        startSystem();
+        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
+
+        if (!defaultDisplayAwake) {
+            mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_ASLEEP,
+                    mClock.now(), 0, PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
+        }
+        if (!secondGroupDisplayAwake) {
+            mService.setWakefulnessLocked(nonDefaultDisplayGroupId, WAKEFULNESS_ASLEEP,
+                    mClock.now(), 0,
+                    PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
+        }
+        assertThat(PowerManagerInternal.isInteractive(
+                mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP))).isEqualTo(
+                defaultDisplayAwake);
+        assertThat(PowerManagerInternal.isInteractive(
+                mService.getWakefulnessLocked(nonDefaultDisplayGroupId))).isEqualTo(
+                secondGroupDisplayAwake);
+
+        BinderService binderService = mService.getBinderServiceInstance();
+        assertThat(binderService.isInteractive()).isEqualTo(
+                defaultDisplayAwake || secondGroupDisplayAwake);
+        assertThat(binderService.isDisplayInteractive(Display.DEFAULT_DISPLAY)).isEqualTo(
+                defaultDisplayAwake);
+        assertThat(binderService.isDisplayInteractive(nonDefaultDisplay)).isEqualTo(
+                secondGroupDisplayAwake);
+    }
+
+    @Test
+    public void testMultiDisplay_isInteractive_defaultGroupIsAwakeSecondGroupIsAwake() {
+        testMultiDisplay_isInteractive_returnsCorrectValue(true, true);
+    }
+
+    @Test
+    public void testMultiDisplay_isInteractive_defaultGroupIsAwakeSecondGroupIsAsleep() {
+        testMultiDisplay_isInteractive_returnsCorrectValue(true, false);
+    }
+
+    @Test
+    public void testMultiDisplay_isInteractive_defaultGroupIsAsleepSecondGroupIsAwake() {
+        testMultiDisplay_isInteractive_returnsCorrectValue(false, true);
+    }
+
+    @Test
+    public void testMultiDisplay_isInteractive_bothGroupsAreAsleep() {
+        testMultiDisplay_isInteractive_returnsCorrectValue(false, false);
+    }
+
+    @Test
+    public void testMultiDisplay_defaultGroupWakefulnessChange_causesIsInteractiveInvalidate()
+            throws Exception {
+        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = nonDefaultDisplayGroupId;
+        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
+        createService();
+        startSystem();
+        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
+
+        verify(mInvalidateInteractiveCachesMock).call();
+
+        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_ASLEEP,
+                mClock.now(), 0, PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
+
+        verify(mInvalidateInteractiveCachesMock, times(2)).call();
+    }
+
+    @Test
+    public void testMultiDisplay_secondGroupWakefulness_causesIsInteractiveInvalidate()
+            throws Exception {
+        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
+        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
+        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
+                new AtomicReference<>();
+        doAnswer((Answer<Void>) invocation -> {
+            listener.set(invocation.getArgument(0));
+            return null;
+        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = nonDefaultDisplayGroupId;
+        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
+        createService();
+        startSystem();
+        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
+
+        verify(mInvalidateInteractiveCachesMock).call();
+
+        mService.setWakefulnessLocked(nonDefaultDisplayGroupId, WAKEFULNESS_ASLEEP, mClock.now(),
+                0, PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
+
+        verify(mInvalidateInteractiveCachesMock, times(2)).call();
+    }
+
+    @Test
+    public void testGetFullPowerSavePolicy_returnsStateMachineResult() {
+        createService();
+        startSystem();
+        BatterySaverPolicyConfig mockReturnConfig = new BatterySaverPolicyConfig.Builder().build();
+        when(mBatterySaverStateMachineMock.getFullBatterySaverPolicy())
+                .thenReturn(mockReturnConfig);
+
+        mService.getBinderServiceInstance().setPowerSaveModeEnabled(true);
+        BatterySaverPolicyConfig policyConfig =
+                mService.getBinderServiceInstance().getFullPowerSavePolicy();
+        assertThat(mockReturnConfig).isEqualTo(policyConfig);
+        verify(mBatterySaverStateMachineMock).getFullBatterySaverPolicy();
+    }
+
+    @Test
+    public void testSetFullPowerSavePolicy_callsStateMachine() {
+        createService();
+        startSystem();
+        BatterySaverPolicyConfig mockSetPolicyConfig =
+                new BatterySaverPolicyConfig.Builder().build();
+        when(mBatterySaverStateMachineMock.setFullBatterySaverPolicy(any())).thenReturn(true);
+
+        mService.getBinderServiceInstance().setPowerSaveModeEnabled(true);
+        assertThat(mService.getBinderServiceInstance()
+                .setFullPowerSavePolicy(mockSetPolicyConfig)).isTrue();
+        verify(mBatterySaverStateMachineMock).setFullBatterySaverPolicy(eq(mockSetPolicyConfig));
+    }
+
+    @Test
+    public void testLowPowerStandby_whenInactive_FgsWakeLockEnabled() {
+        createService();
+        startSystem();
+        WakeLock wakeLock = acquireWakeLock("fgsWakeLock", PowerManager.PARTIAL_WAKE_LOCK);
+        mService.updateUidProcStateInternal(wakeLock.mOwnerUid, PROCESS_STATE_FOREGROUND_SERVICE);
+        mService.setDeviceIdleModeInternal(true);
+
+        assertThat(wakeLock.mDisabled).isFalse();
+    }
+
+    @Test
+    public void testLowPowerStandby_whenActive_FgsWakeLockDisabled() {
+        createService();
+        startSystem();
+        WakeLock wakeLock = acquireWakeLock("fgsWakeLock", PowerManager.PARTIAL_WAKE_LOCK);
+        mService.updateUidProcStateInternal(wakeLock.mOwnerUid, PROCESS_STATE_FOREGROUND_SERVICE);
+        mService.setDeviceIdleModeInternal(true);
+        mService.setLowPowerStandbyActiveInternal(true);
+
+        assertThat(wakeLock.mDisabled).isTrue();
+    }
+
+    @Test
+    public void testLowPowerStandby_whenActive_FgsWakeLockEnabledIfAllowlisted() {
+        createService();
+        startSystem();
+        WakeLock wakeLock = acquireWakeLock("fgsWakeLock", PowerManager.PARTIAL_WAKE_LOCK);
+        mService.updateUidProcStateInternal(wakeLock.mOwnerUid, PROCESS_STATE_FOREGROUND_SERVICE);
+        mService.setDeviceIdleModeInternal(true);
+        mService.setLowPowerStandbyActiveInternal(true);
+        mService.setLowPowerStandbyAllowlistInternal(new int[]{wakeLock.mOwnerUid});
+
+        assertThat(wakeLock.mDisabled).isFalse();
+    }
+
+    @Test
+    public void testLowPowerStandby_whenActive_BoundTopWakeLockDisabled() {
+        createService();
+        startSystem();
+        WakeLock wakeLock = acquireWakeLock("BoundTopWakeLock", PowerManager.PARTIAL_WAKE_LOCK);
+        mService.updateUidProcStateInternal(wakeLock.mOwnerUid, PROCESS_STATE_BOUND_TOP);
+        mService.setDeviceIdleModeInternal(true);
+        mService.setLowPowerStandbyActiveInternal(true);
+
+        assertThat(wakeLock.mDisabled).isFalse();
+    }
+
+    @Test
+    public void testSetLowPowerStandbyActiveDuringMaintenance_redirectsCallToNativeWrapper() {
+        createService();
+        startSystem();
+
+        mService.getBinderServiceInstance().setLowPowerStandbyActiveDuringMaintenance(true);
+        verify(mLowPowerStandbyControllerMock).setActiveDuringMaintenance(true);
+
+        mService.getBinderServiceInstance().setLowPowerStandbyActiveDuringMaintenance(false);
+        verify(mLowPowerStandbyControllerMock).setActiveDuringMaintenance(false);
+    }
+
+    @Test
+    public void testPowerGroupInitialization_multipleDisplayGroups() {
+        IntArray displayGroupIds = IntArray.wrap(new int[]{1, 2, 3});
+        when(mDisplayManagerInternalMock.getDisplayGroupIds()).thenReturn(displayGroupIds);
+
+        createService();
+        startSystem();
+
+        // Power group for DEFAULT_DISPLAY_GROUP is added by default.
+        assertThat(mService.getPowerGroupSize()).isEqualTo(4);
+    }
+
+    @Test
+    public void testPowerGroupInitialization_multipleDisplayGroupsWithDefaultGroup() {
+        IntArray displayGroupIds = IntArray.wrap(new int[]{Display.DEFAULT_DISPLAY_GROUP, 1, 2, 3});
+        when(mDisplayManagerInternalMock.getDisplayGroupIds()).thenReturn(displayGroupIds);
+
+        createService();
+        startSystem();
+
+        // Power group for DEFAULT_DISPLAY_GROUP is added once even if getDisplayGroupIds() return
+        // an array including DEFAULT_DESIPLAY_GROUP.
+        assertThat(mService.getPowerGroupSize()).isEqualTo(4);
+    }
+
+    private WakeLock acquireWakeLock(String tag, int flags) {
+        IBinder token = new Binder();
+        String packageName = "pkg.name";
+        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY,
+                null /* callback */);
+        return mService.findWakeLockLocked(token);
+    }
+
+    /**
+     * Test IPowerManager.acquireWakeLock() with a IWakeLockCallback.
+     */
+    @Test
+    public void testNotifyWakeLockCallback() {
+        createService();
+        startSystem();
+        final String tag = "wakelock1";
+        final String packageName = "pkg.name";
+        final IBinder token = new Binder();
+        final int flags = PowerManager.PARTIAL_WAKE_LOCK;
+        final IWakeLockCallback callback = Mockito.mock(IWakeLockCallback.class);
+        final IBinder callbackBinder = Mockito.mock(Binder.class);
+        when(callback.asBinder()).thenReturn(callbackBinder);
+        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, callback);
+        verify(mNotifierMock).onWakeLockAcquired(anyInt(), eq(tag), eq(packageName), anyInt(),
+                anyInt(), any(), any(), same(callback));
+
+        mService.getBinderServiceInstance().releaseWakeLock(token, 0);
+        verify(mNotifierMock).onWakeLockReleased(anyInt(), eq(tag), eq(packageName), anyInt(),
+                anyInt(), any(), any(), same(callback));
+    }
+
+    /**
+     * Test IPowerManager.updateWakeLockCallback() with a new IWakeLockCallback.
+     */
+    @Test
+    public void testNotifyWakeLockCallbackChange() {
+        createService();
+        startSystem();
+        final String tag = "wakelock1";
+        final String packageName = "pkg.name";
+        final IBinder token = new Binder();
+        int flags = PowerManager.PARTIAL_WAKE_LOCK;
+        final IWakeLockCallback callback1 = Mockito.mock(IWakeLockCallback.class);
+        final IBinder callbackBinder1 = Mockito.mock(Binder.class);
+        when(callback1.asBinder()).thenReturn(callbackBinder1);
+        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
+                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, callback1);
+        verify(mNotifierMock).onWakeLockAcquired(anyInt(), eq(tag), eq(packageName), anyInt(),
+                anyInt(), any(), any(), same(callback1));
+
+        final IWakeLockCallback callback2 = Mockito.mock(IWakeLockCallback.class);
+        final IBinder callbackBinder2 = Mockito.mock(Binder.class);
+        when(callback2.asBinder()).thenReturn(callbackBinder2);
+        mService.getBinderServiceInstance().updateWakeLockCallback(token, callback2);
+        verify(mNotifierMock).onWakeLockChanging(anyInt(), eq(tag), eq(packageName),
+                anyInt(), anyInt(), any(), any(), same(callback1),
+                anyInt(), eq(tag), eq(packageName), anyInt(), anyInt(), any(), any(),
+                same(callback2));
+
+        mService.getBinderServiceInstance().releaseWakeLock(token, 0);
+        verify(mNotifierMock).onWakeLockReleased(anyInt(), eq(tag), eq(packageName), anyInt(),
+                anyInt(), any(), any(), same(callback2));
+    }
+
+    @Test
+    public void testUserActivity_futureEventsAreIgnored() {
+        createService();
+        startSystem();
+        // Starting the system triggers a user activity event, so clear that before calling
+        // userActivity() directly.
+        clearInvocations(mNotifierMock);
+        final long eventTime = mClock.now() + Duration.ofHours(10).toMillis();
+        mService.getBinderServiceInstance().userActivity(Display.DEFAULT_DISPLAY, eventTime,
+                USER_ACTIVITY_EVENT_BUTTON, /* flags= */ 0);
+        verify(mNotifierMock, never()).onUserActivity(anyInt(),  anyInt(), anyInt());
+    }
+
+    @Test
+    public void testUserActivityOnDeviceStateChange() {
+        when(mContextSpy.getSystemService(DeviceStateManager.class))
+                .thenReturn(mDeviceStateManagerMock);
+
+        createService();
+        mService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+
+        final DisplayInfo info = new DisplayInfo();
+        info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
+        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info);
+
+        final ArgumentCaptor<DeviceStateCallback> deviceStateCallbackCaptor =
+                ArgumentCaptor.forClass(DeviceStateCallback.class);
+        verify(mDeviceStateManagerMock).registerCallback(any(),
+                deviceStateCallbackCaptor.capture());
+
+        // Advance the time 10001 and verify that the device thinks it has been idle
+        // for just less than that.
+        mService.onUserActivity();
+        advanceTime(10001);
+        assertThat(mService.wasDeviceIdleForInternal(10000)).isTrue();
+
+        // Send a display state change event and advance the clock 10.
+        final DeviceStateCallback deviceStateCallback = deviceStateCallbackCaptor.getValue();
+        deviceStateCallback.onStateChanged(1);
+        final long timeToAdvance = 10;
+        advanceTime(timeToAdvance);
+
+        // Ensure that the device has been idle for only 10 (doesn't include the idle time
+        // before the display state event).
+        assertThat(mService.wasDeviceIdleForInternal(timeToAdvance - 1)).isTrue();
+        assertThat(mService.wasDeviceIdleForInternal(timeToAdvance)).isFalse();
+
+        // Send the same state and ensure that does not trigger an update.
+        deviceStateCallback.onStateChanged(1);
+        advanceTime(timeToAdvance);
+        final long newTime = timeToAdvance * 2;
+
+        assertThat(mService.wasDeviceIdleForInternal(newTime - 1)).isTrue();
+        assertThat(mService.wasDeviceIdleForInternal(newTime)).isFalse();
+    }
+
+    @Test
+    public void testFeatureEnabledProcStateUncachedToCached_screenWakeLockDisabled(
+            @TestParameter PowerManagerServiceTest.ScreenWakeLockTestParameter param) {
+        doReturn(true).when(mDeviceParameterProvider)
+                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
+        createService();
+        startSystem();
+        WakeLock wakeLock = acquireWakeLock(param.mDescr, param.mFlags);
+        setUncachedUidProcState(wakeLock.mOwnerUid);
+
+        setCachedUidProcState(wakeLock.mOwnerUid);
+        assertThat(wakeLock.mDisabled).isTrue();
+    }
+
+    @Test
+    public void testFeatureDisabledProcStateUncachedToCached_screenWakeLockEnabled(
+            @TestParameter PowerManagerServiceTest.ScreenWakeLockTestParameter param) {
+        doReturn(false).when(mDeviceParameterProvider)
+                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
+        createService();
+        startSystem();
+        WakeLock wakeLock = acquireWakeLock(param.mDescr, param.mFlags);
+        setUncachedUidProcState(wakeLock.mOwnerUid);
+
+        setCachedUidProcState(wakeLock.mOwnerUid);
+        assertThat(wakeLock.mDisabled).isFalse();
+    }
+
+    @Test
+    public void testFeatureEnabledProcStateCachedToUncached_screenWakeLockEnabled(
+            @TestParameter PowerManagerServiceTest.ScreenWakeLockTestParameter param) {
+        doReturn(true).when(mDeviceParameterProvider)
+                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
+        createService();
+        startSystem();
+        WakeLock wakeLock = acquireWakeLock(param.mDescr, param.mFlags);
+        setCachedUidProcState(wakeLock.mOwnerUid);
+
+        setUncachedUidProcState(wakeLock.mOwnerUid);
+        assertThat(wakeLock.mDisabled).isFalse();
+    }
+
+    @Test
+    public void testFeatureDisabledProcStateCachedToUncached_screenWakeLockEnabled(
+            @TestParameter PowerManagerServiceTest.ScreenWakeLockTestParameter param) {
+        doReturn(false).when(mDeviceParameterProvider)
+                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
+        createService();
+        startSystem();
+        WakeLock wakeLock = acquireWakeLock(param.mDescr, param.mFlags);
+        setCachedUidProcState(wakeLock.mOwnerUid);
+
+        setUncachedUidProcState(wakeLock.mOwnerUid);
+        assertThat(wakeLock.mDisabled).isFalse();
+    }
+
+    @Test
+    public void testFeatureDynamicallyDisabledProcStateUncachedToCached_screenWakeLockEnabled() {
+        doReturn(true).when(mDeviceParameterProvider)
+                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
+        ArgumentCaptor<DeviceConfig.OnPropertiesChangedListener> listenerCaptor =
+                ArgumentCaptor.forClass(DeviceConfig.OnPropertiesChangedListener.class);
+        createService();
+        startSystem();
+        verify(mDeviceParameterProvider, times(1))
+                .addOnPropertiesChangedListener(any(), listenerCaptor.capture());
+        WakeLock wakeLock = acquireWakeLock("fullWakeLock", PowerManager.FULL_WAKE_LOCK);
+        setUncachedUidProcState(wakeLock.mOwnerUid);
+        // dynamically disable the feature
+        doReturn(false).when(mDeviceParameterProvider)
+                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
+        listenerCaptor.getValue().onPropertiesChanged(
+                new DeviceConfig.Properties("ignored_namespace", null));
+
+        setUncachedUidProcState(wakeLock.mOwnerUid);
+        assertThat(wakeLock.mDisabled).isFalse();
+    }
+
+    private void setCachedUidProcState(int uid) {
+        mService.updateUidProcStateInternal(uid, PROCESS_STATE_TOP_SLEEPING);
+    }
+
+    private void setUncachedUidProcState(int uid) {
+        mService.updateUidProcStateInternal(uid, PROCESS_STATE_RECEIVER);
+    }
+
+    private enum ScreenWakeLockTestParameter {
+        FULL_WAKE_LOCK("fullWakeLock", PowerManager.FULL_WAKE_LOCK),
+        SCREEN_BRIGHT_WAKE_LOCK("screenBrightWakeLock", PowerManager.SCREEN_BRIGHT_WAKE_LOCK),
+        SCREEN_DIM_WAKE_LOCK("screenDimWakeLock", PowerManager.SCREEN_DIM_WAKE_LOCK);
+
+        final String mDescr;
+        final int mFlags;
+
+        ScreenWakeLockTestParameter(String descr, int flags) {
+            this.mDescr = descr;
+            this.mFlags = flags;
+        }
+    }
+}
diff --git a/services/tests/powerservicetests/src/com/android/server/power/ShutdownCheckPointsTest.java b/services/tests/powerservicetests/src/com/android/server/power/ShutdownCheckPointsTest.java
new file mode 100644
index 0000000..67ed6b7
--- /dev/null
+++ b/services/tests/powerservicetests/src/com/android/server/power/ShutdownCheckPointsTest.java
@@ -0,0 +1,414 @@
+/*
+ * 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.server.power;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
+
+import android.app.ActivityManager;
+import android.app.IActivityManager;
+import android.os.Process;
+import android.os.RemoteException;
+import android.platform.test.annotations.Presubmit;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
+
+/**
+ * Run: atest FrameworksServicesTests:ShutdownCheckPointsTest
+ */
+@Presubmit
+public class ShutdownCheckPointsTest {
+
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+
+    @Mock
+    private IActivityManager mActivityManager;
+
+    private TestInjector mTestInjector;
+    private ShutdownCheckPoints mInstance;
+
+    @Before
+    public void setUp() {
+        Locale.setDefault(Locale.UK);
+        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
+        mTestInjector = new TestInjector(mActivityManager);
+        mInstance = new ShutdownCheckPoints(mTestInjector);
+    }
+
+    @Test
+    public void testSystemServerEntry() {
+        mTestInjector.setCurrentTime(1000);
+        mInstance.recordCheckPointInternal("reason1");
+
+        assertTrue(dumpToString().startsWith(
+                "Shutdown request from SYSTEM for reason reason1 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "com.android.server.power.ShutdownCheckPointsTest"
+                        + ".testSystemServerEntry\n at "));
+    }
+
+    @Test
+    public void testSystemServerEntryWithoutReason() {
+        mTestInjector.setCurrentTime(1000);
+        mInstance.recordCheckPointInternal(null);
+
+        assertTrue(dumpToString().startsWith(
+                "Shutdown request from SYSTEM at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"));
+    }
+
+    @Test
+    public void testSystemServiceBinderEntry() {
+        mTestInjector.setCurrentTime(1000);
+        mInstance.recordCheckPointInternal(Process.myPid(), "reason1");
+
+        assertTrue(dumpToString().startsWith(
+                "Shutdown request from SYSTEM for reason reason1 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "com.android.server.power.ShutdownCheckPointsTest"
+                        + ".testSystemServiceBinderEntry\n at "));
+    }
+
+    @Test
+    public void testCallerProcessBinderEntries() throws RemoteException {
+        List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfos = new ArrayList<>();
+        runningAppProcessInfos.add(
+                new ActivityManager.RunningAppProcessInfo("process_name", 1, new String[0]));
+        when(mActivityManager.getRunningAppProcesses()).thenReturn(runningAppProcessInfos);
+
+        mTestInjector.setCurrentTime(1000);
+        // Matching pid in getRunningAppProcesses
+        mInstance.recordCheckPointInternal(1, "reason1");
+        // Missing pid in getRunningAppProcesses
+        mInstance.recordCheckPointInternal(2, "reason2");
+
+        assertEquals(
+                "Shutdown request from BINDER for reason reason1 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "com.android.server.power.ShutdownCheckPointsTest"
+                        + ".testCallerProcessBinderEntries\n"
+                        + "From process process_name (pid=1)\n\n"
+                        + "Shutdown request from BINDER for reason reason2 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "com.android.server.power.ShutdownCheckPointsTest"
+                        + ".testCallerProcessBinderEntries\n"
+                        + "From process ? (pid=2)\n\n",
+                dumpToString());
+    }
+
+    @Test
+    public void testNullCallerProcessBinderEntries() throws RemoteException {
+        when(mActivityManager.getRunningAppProcesses()).thenReturn(null);
+
+        mTestInjector.setCurrentTime(1000);
+        mInstance.recordCheckPointInternal(1, "reason1");
+
+        assertEquals(
+                "Shutdown request from BINDER for reason reason1 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "com.android.server.power.ShutdownCheckPointsTest"
+                        + ".testNullCallerProcessBinderEntries\n"
+                        + "From process ? (pid=1)\n\n",
+                dumpToString());
+    }
+
+    @Test
+    public void testRemoteExceptionOnBinderEntry() throws RemoteException {
+        when(mActivityManager.getRunningAppProcesses()).thenThrow(new RemoteException("Error"));
+
+        mTestInjector.setCurrentTime(1000);
+        mInstance.recordCheckPointInternal(1, "reason1");
+
+        assertEquals(
+                "Shutdown request from BINDER for reason reason1 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "com.android.server.power.ShutdownCheckPointsTest"
+                        + ".testRemoteExceptionOnBinderEntry\n"
+                        + "From process ? (pid=1)\n\n",
+                dumpToString());
+    }
+
+    @Test
+    public void testUnknownProcessBinderEntry() {
+        mTestInjector.setCurrentTime(1000);
+        mInstance.recordCheckPointInternal(1, "reason1");
+
+        assertEquals(
+                "Shutdown request from BINDER for reason reason1 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "com.android.server.power.ShutdownCheckPointsTest"
+                        + ".testUnknownProcessBinderEntry\n"
+                        + "From process ? (pid=1)\n\n",
+                dumpToString());
+    }
+
+    @Test
+    public void testBinderEntryWithoutReason() throws RemoteException {
+        mTestInjector.setCurrentTime(1000);
+        mInstance.recordCheckPointInternal(1, null);
+
+        assertTrue(dumpToString().startsWith(
+                "Shutdown request from BINDER at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"));
+    }
+
+    @Test
+    public void testSystemServiceIntentEntry() {
+        mTestInjector.setCurrentTime(1000);
+        mInstance.recordCheckPointInternal("some.intent", "android", "reason1");
+
+        assertTrue(dumpToString().startsWith(
+                "Shutdown request from SYSTEM for reason reason1 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "com.android.server.power.ShutdownCheckPointsTest"
+                        + ".testSystemServiceIntentEntry\n at "));
+    }
+
+    @Test
+    public void testIntentEntry() {
+        mTestInjector.setCurrentTime(1000);
+        mInstance.recordCheckPointInternal("some.intent", "some.app", "reason1");
+
+        assertEquals(
+                "Shutdown request from INTENT for reason reason1 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "Intent: some.intent\n"
+                        + "Package: some.app\n\n",
+                dumpToString());
+    }
+
+    @Test
+    public void testIntentEntryWithoutReason() {
+        mTestInjector.setCurrentTime(1000);
+        mInstance.recordCheckPointInternal("some.intent", "some.app", null);
+
+        assertTrue(dumpToString().startsWith(
+                "Shutdown request from INTENT at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"));
+    }
+
+    @Test
+    public void testMultipleEntries() {
+        mTestInjector.setCurrentTime(1000);
+        mInstance.recordCheckPointInternal(1, "reason1");
+        mTestInjector.setCurrentTime(2000);
+        mInstance.recordCheckPointInternal(2, "reason2");
+        mTestInjector.setCurrentTime(3000);
+        mInstance.recordCheckPointInternal("intent", "app", "reason3");
+
+        assertEquals(
+                "Shutdown request from BINDER for reason reason1 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "com.android.server.power.ShutdownCheckPointsTest.testMultipleEntries\n"
+                        + "From process ? (pid=1)\n\n"
+                        + "Shutdown request from BINDER for reason reason2 "
+                        + "at 1970-01-01 00:00:02.000 UTC (epoch=2000)\n"
+                        + "com.android.server.power.ShutdownCheckPointsTest.testMultipleEntries\n"
+                        + "From process ? (pid=2)\n\n"
+                        + "Shutdown request from INTENT for reason reason3 "
+                        + "at 1970-01-01 00:00:03.000 UTC (epoch=3000)\n"
+                        + "Intent: intent\n"
+                        + "Package: app\n\n",
+                dumpToString());
+    }
+
+    @Test
+    public void testTooManyEntriesDropsOlderOnes() {
+        mTestInjector.setCheckPointsLimit(2);
+        ShutdownCheckPoints limitedInstance = new ShutdownCheckPoints(mTestInjector);
+
+        mTestInjector.setCurrentTime(1000);
+        limitedInstance.recordCheckPointInternal("intent.1", "app.1", "reason1");
+        mTestInjector.setCurrentTime(2000);
+        limitedInstance.recordCheckPointInternal("intent.2", "app.2", "reason2");
+        mTestInjector.setCurrentTime(3000);
+        limitedInstance.recordCheckPointInternal("intent.3", "app.3", "reason3");
+
+        // Drops first intent.
+        assertEquals(
+                "Shutdown request from INTENT for reason reason2 "
+                        + "at 1970-01-01 00:00:02.000 UTC (epoch=2000)\n"
+                        + "Intent: intent.2\n"
+                        + "Package: app.2\n\n"
+                        + "Shutdown request from INTENT for reason reason3 "
+                        + "at 1970-01-01 00:00:03.000 UTC (epoch=3000)\n"
+                        + "Intent: intent.3\n"
+                        + "Package: app.3\n\n",
+                dumpToString(limitedInstance));
+    }
+
+    @Test
+    public void testDumpToFile() throws Exception {
+        File tempDir = createTempDir();
+        File baseFile = new File(tempDir, "checkpoints");
+
+        mTestInjector.setCurrentTime(1000);
+        mInstance.recordCheckPointInternal("first.intent", "first.app", "reason1");
+        dumpToFile(baseFile);
+
+        mTestInjector.setCurrentTime(2000);
+        mInstance.recordCheckPointInternal("second.intent", "second.app", "reason2");
+        dumpToFile(baseFile);
+
+        File[] dumpFiles = tempDir.listFiles();
+        Arrays.sort(dumpFiles);
+
+        assertEquals(2, dumpFiles.length);
+        assertEquals(
+                "Shutdown request from INTENT for reason reason1 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "Intent: first.intent\n"
+                        + "Package: first.app\n\n",
+                readFileAsString(dumpFiles[0].getAbsolutePath()));
+        assertEquals(
+                "Shutdown request from INTENT for reason reason1 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "Intent: first.intent\n"
+                        + "Package: first.app\n\n"
+                        + "Shutdown request from INTENT for reason reason2 "
+                        + "at 1970-01-01 00:00:02.000 UTC (epoch=2000)\n"
+                        + "Intent: second.intent\n"
+                        + "Package: second.app\n\n",
+                readFileAsString(dumpFiles[1].getAbsolutePath()));
+    }
+
+    @Test
+    public void testTooManyFilesDropsOlderOnes() throws Exception {
+        mTestInjector.setDumpFilesLimit(1);
+        ShutdownCheckPoints instance = new ShutdownCheckPoints(mTestInjector);
+        File tempDir = createTempDir();
+        File baseFile = new File(tempDir, "checkpoints");
+
+        mTestInjector.setCurrentTime(1000);
+        instance.recordCheckPointInternal("first.intent", "first.app", "reason1");
+        dumpToFile(instance, baseFile);
+
+        mTestInjector.setCurrentTime(2000);
+        instance.recordCheckPointInternal("second.intent", "second.app", "reason2");
+        dumpToFile(instance, baseFile);
+
+        File[] dumpFiles = tempDir.listFiles();
+        assertEquals(1, dumpFiles.length);
+        assertEquals(
+                "Shutdown request from INTENT for reason reason1 "
+                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
+                        + "Intent: first.intent\n"
+                        + "Package: first.app\n\n"
+                        + "Shutdown request from INTENT for reason reason2 "
+                        + "at 1970-01-01 00:00:02.000 UTC (epoch=2000)\n"
+                        + "Intent: second.intent\n"
+                        + "Package: second.app\n\n",
+                readFileAsString(dumpFiles[0].getAbsolutePath()));
+    }
+
+    private String dumpToString() {
+        return dumpToString(mInstance);
+    }
+
+    private String dumpToString(ShutdownCheckPoints instance) {
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        instance.dumpInternal(pw);
+        return sw.toString();
+    }
+
+    private void dumpToFile(File baseFile) throws InterruptedException {
+        dumpToFile(mInstance, baseFile);
+    }
+
+    private void dumpToFile(ShutdownCheckPoints instance, File baseFile)
+            throws InterruptedException {
+        Thread dumpThread = instance.newDumpThreadInternal(baseFile);
+        dumpThread.start();
+        dumpThread.join();
+    }
+
+    private String readFileAsString(String absolutePath) throws IOException {
+        return new String(Files.readAllBytes(Paths.get(absolutePath)), StandardCharsets.UTF_8);
+    }
+
+    private File createTempDir() throws IOException {
+        File tempDir = File.createTempFile("checkpoints", "out");
+        tempDir.delete();
+        tempDir.mkdir();
+        return tempDir;
+    }
+
+    /** Fake system dependencies for testing. */
+    private static final class TestInjector implements ShutdownCheckPoints.Injector {
+        private long mNow;
+        private int mCheckPointsLimit;
+        private int mDumpFilesLimit;
+        private IActivityManager mActivityManager;
+
+        TestInjector(IActivityManager activityManager) {
+            mNow = 0;
+            mCheckPointsLimit = 100;
+            mDumpFilesLimit = 2;
+            mActivityManager = activityManager;
+        }
+
+        @Override
+        public long currentTimeMillis() {
+            return mNow;
+        }
+
+        @Override
+        public int maxCheckPoints() {
+            return mCheckPointsLimit;
+        }
+
+        @Override
+        public int maxDumpFiles() {
+            return mDumpFilesLimit;
+        }
+
+        @Override
+        public IActivityManager activityManager() {
+            return mActivityManager;
+        }
+
+        void setCurrentTime(long time) {
+            mNow = time;
+        }
+
+        void setCheckPointsLimit(int limit) {
+            mCheckPointsLimit = limit;
+        }
+
+        void setDumpFilesLimit(int dumpFilesLimit) {
+            mDumpFilesLimit = dumpFilesLimit;
+        }
+    }
+}
diff --git a/services/tests/powerservicetests/src/com/android/server/power/ShutdownThreadTest.java b/services/tests/powerservicetests/src/com/android/server/power/ShutdownThreadTest.java
new file mode 100644
index 0000000..6041e91
--- /dev/null
+++ b/services/tests/powerservicetests/src/com/android/server/power/ShutdownThreadTest.java
@@ -0,0 +1,215 @@
+/*
+ * 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.server.power;
+
+import static com.android.server.power.ShutdownThread.DEFAULT_SHUTDOWN_VIBRATE_MS;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+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.content.Context;
+import android.os.VibrationAttributes;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.util.AtomicFile;
+
+import androidx.test.InstrumentationRegistry;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Tests for {@link com.android.server.power.ShutdownThread}
+ */
+public class ShutdownThreadTest {
+
+    private static final String WAVEFORM_VIB_10MS_SERIALIZATION =
+            """
+            <vibration>
+                <waveform-effect>
+                    <waveform-entry durationMs="10" amplitude="100"/>
+                </waveform-effect>
+            </vibration>
+            """;
+
+    private static final VibrationEffect WAVEFORM_VIB_10MS = VibrationEffect.createOneShot(10, 100);
+
+    private static final String REPEATING_VIB_SERIALIZATION =
+            """
+            <vibration>
+                <waveform-effect>
+                    <repeating>
+                        <waveform-entry durationMs="10" amplitude="100"/>
+                    </repeating>
+                </waveform-effect>
+            </vibration>
+            """;
+
+    private static final String CLICK_VIB_SERIALIZATION =
+            """
+            <vibration>
+                <predefined-effect name="click"/>
+            </vibration>
+            """;
+
+    private static final VibrationEffect CLILCK_VIB =
+            VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK);
+
+    private static final String BAD_VIB_SERIALIZATION = "BAD SERIALIZATION";
+
+    @Mock private Context mContextMock;
+    @Mock private Vibrator mVibratorMock;
+
+    private String mDefaultShutdownVibrationFilePath;
+    private long mLastSleepDurationMs;
+
+    private ShutdownThread mShutdownThread;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mVibratorMock.hasVibrator()).thenReturn(true);
+
+        when(mVibratorMock.areVibrationFeaturesSupported(any())).thenReturn(true);
+
+        mShutdownThread = new ShutdownThread(new TestInjector());
+    }
+
+    @Test
+    public void testSuccessfulShutdownVibrationFromFile() throws Exception {
+        setShutdownVibrationFileContent(WAVEFORM_VIB_10MS_SERIALIZATION);
+
+        mShutdownThread.playShutdownVibration(mContextMock);
+
+        assertShutdownVibration(WAVEFORM_VIB_10MS, /* vibrationSleepDuration= */ 10);
+    }
+
+    @Test
+    public void testIOExceptionWhenParsingShutdownVibration() throws Exception {
+        mDefaultShutdownVibrationFilePath = "non/existent/file_path";
+
+        mShutdownThread.playShutdownVibration(mContextMock);
+
+        assertDefaultShutdownVibration();
+    }
+
+    @Test
+    public void testMalformedShutdownVibrationFileContent() throws Exception {
+        setShutdownVibrationFileContent(BAD_VIB_SERIALIZATION);
+
+        mShutdownThread.playShutdownVibration(mContextMock);
+
+        assertDefaultShutdownVibration();
+    }
+
+    @Test
+    public void testVibratorUnsupportedShutdownVibrationEffect() throws Exception {
+        setShutdownVibrationFileContent(WAVEFORM_VIB_10MS_SERIALIZATION);
+        when(mVibratorMock.areVibrationFeaturesSupported(any())).thenReturn(false);
+
+        mShutdownThread.playShutdownVibration(mContextMock);
+
+        assertDefaultShutdownVibration();
+    }
+
+    @Test
+    public void testRepeatinghutdownVibrationEffect() throws Exception {
+        setShutdownVibrationFileContent(REPEATING_VIB_SERIALIZATION);
+
+        mShutdownThread.playShutdownVibration(mContextMock);
+
+        assertDefaultShutdownVibration();
+    }
+
+    @Test
+    public void testVibrationEffectWithUnknownDuration() throws Exception {
+        setShutdownVibrationFileContent(CLICK_VIB_SERIALIZATION);
+
+        mShutdownThread.playShutdownVibration(mContextMock);
+
+        assertShutdownVibration(CLILCK_VIB, DEFAULT_SHUTDOWN_VIBRATE_MS);
+    }
+
+    @Test
+    public void testNoVibrator() {
+        when(mVibratorMock.hasVibrator()).thenReturn(false);
+
+        mShutdownThread.playShutdownVibration(mContextMock);
+
+        verify(mVibratorMock, never())
+                .vibrate(any(VibrationEffect.class), any(VibrationAttributes.class));
+    }
+
+    private void assertShutdownVibration(VibrationEffect effect, long vibrationSleepDuration)
+            throws Exception {
+        verify(mVibratorMock).vibrate(
+                eq(effect),
+                eq(VibrationAttributes.createForUsage(VibrationAttributes.USAGE_TOUCH)));
+        assertEquals(vibrationSleepDuration, mLastSleepDurationMs);
+    }
+
+    private void assertDefaultShutdownVibration() throws Exception {
+        assertShutdownVibration(
+                VibrationEffect.createOneShot(
+                        DEFAULT_SHUTDOWN_VIBRATE_MS, VibrationEffect.DEFAULT_AMPLITUDE),
+                DEFAULT_SHUTDOWN_VIBRATE_MS);
+    }
+
+    private void setShutdownVibrationFileContent(String content) throws Exception {
+        mDefaultShutdownVibrationFilePath = createFileForContent(content).getAbsolutePath();
+    }
+
+    private static File createFileForContent(String content) throws Exception {
+        File file = new File(InstrumentationRegistry.getContext().getCacheDir(), "test.xml");
+        file.createNewFile();
+
+        AtomicFile atomicFile = new AtomicFile(file);
+        FileOutputStream fos = atomicFile.startWrite();
+        fos.write(content.getBytes());
+        atomicFile.finishWrite(fos);
+
+        return file;
+    }
+
+    private class TestInjector extends ShutdownThread.Injector {
+        @Override
+        public Vibrator getVibrator(Context context) {
+            return mVibratorMock;
+        }
+
+        @Override
+        public String getDefaultShutdownVibrationEffectFilePath(Context context) {
+            return mDefaultShutdownVibrationFilePath;
+        }
+
+        @Override
+        public void sleep(long durationMs) {
+            mLastSleepDurationMs = durationMs;
+        }
+    }
+}
diff --git a/services/tests/powerservicetests/src/com/android/server/power/WakeLockLogTest.java b/services/tests/powerservicetests/src/com/android/server/power/WakeLockLogTest.java
new file mode 100644
index 0000000..0fad25d
--- /dev/null
+++ b/services/tests/powerservicetests/src/com/android/server/power/WakeLockLogTest.java
@@ -0,0 +1,453 @@
+/*
+ * 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.server.power;
+
+import static org.junit.Assert.assertEquals;
+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.Context;
+import android.content.pm.PackageManager;
+import android.os.PowerManager;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.text.SimpleDateFormat;
+import java.util.TimeZone;
+
+/**
+ * Tests for {@link WakeLockLog}.
+ */
+public class WakeLockLogTest {
+
+    @Mock
+    private Context mContext;
+
+    @Mock
+    private PackageManager mPackageManager;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mContext.getPackageManager()).thenReturn(mPackageManager);
+
+        when(mPackageManager.getPackagesForUid(101)).thenReturn(new String[]{ "some.package1" });
+        when(mPackageManager.getPackagesForUid(102)).thenReturn(new String[]{ "some.package2" });
+    }
+
+    @Test
+    public void testAddTwoItems() {
+        final int tagDatabaseSize = 128;
+        final int logSize = 20;
+        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
+        WakeLockLog log = new WakeLockLog(injectorSpy, mContext);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
+        log.onWakeLockAcquired("TagPartial", 101,
+                PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1150L);
+        log.onWakeLockAcquired("TagFull", 102,
+                PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP);
+
+        assertEquals("Wake Lock Log\n"
+                + "  01-01 00:00:01.000 - 101 (some.package1) - ACQ TagPartial "
+                        + "(partial,on-after-release)\n"
+                + "  01-01 00:00:01.150 - 102 (some.package2) - ACQ TagFull "
+                        + "(full,acq-causes-wake)\n"
+                + "  -\n"
+                + "  Events: 2, Time-Resets: 0\n"
+                + "  Buffer, Bytes used: 6\n",
+                dumpLog(log, false));
+    }
+
+    @Test
+    public void testAddTwoItemsWithTimeReset() {
+        final int tagDatabaseSize = 128;
+        final int logSize = 20;
+        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
+        WakeLockLog log = new WakeLockLog(injectorSpy, mContext);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
+        log.onWakeLockAcquired("TagPartial", 101, PowerManager.PARTIAL_WAKE_LOCK);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1350L);
+        log.onWakeLockAcquired("TagFull", 102, PowerManager.FULL_WAKE_LOCK);
+
+        assertEquals("Wake Lock Log\n"
+                + "  01-01 00:00:01.000 - 101 (some.package1) - ACQ TagPartial (partial)\n"
+                + "  01-01 00:00:01.350 - 102 (some.package2) - ACQ TagFull (full)\n"
+                + "  -\n"
+                + "  Events: 2, Time-Resets: 1\n"
+                + "  Buffer, Bytes used: 15\n",
+                dumpLog(log, false));
+    }
+
+    @Test
+    public void testAddTwoItemsWithTagOverwrite() {
+        final int tagDatabaseSize = 2;
+        final int logSize = 20;
+        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
+        WakeLockLog log = new WakeLockLog(injectorSpy, mContext);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
+        log.onWakeLockAcquired("TagPartial", 101, PowerManager.PARTIAL_WAKE_LOCK);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1150L);
+        log.onWakeLockAcquired("TagFull", 102, PowerManager.FULL_WAKE_LOCK);
+
+        assertEquals("Wake Lock Log\n"
+                + "  01-01 00:00:01.000 - --- - ACQ UNKNOWN (partial)\n"
+                + "  01-01 00:00:01.150 - 102 (some.package2) - ACQ TagFull (full)\n"
+                + "  -\n"
+                + "  Events: 2, Time-Resets: 0\n"
+                + "  Buffer, Bytes used: 6\n",
+                dumpLog(log, false));
+    }
+
+    @Test
+    public void testAddFourItemsWithRingBufferOverflow() {
+        final int tagDatabaseSize = 6;
+        final int logSize = 10;
+        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
+        WakeLockLog log = new WakeLockLog(injectorSpy, mContext);
+
+        // Wake lock 1 acquired - log size = 3
+        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
+        log.onWakeLockAcquired("TagPartial", 101, PowerManager.PARTIAL_WAKE_LOCK);
+
+        // Wake lock 2 acquired - log size = 3 + 3 = 6
+        when(injectorSpy.currentTimeMillis()).thenReturn(1150L);
+        log.onWakeLockAcquired("TagFull", 102, PowerManager.FULL_WAKE_LOCK);
+
+        // Wake lock 3 acquired - log size = 6 + 3 = 9
+        when(injectorSpy.currentTimeMillis()).thenReturn(1151L);
+        log.onWakeLockAcquired("TagThree", 101, PowerManager.PARTIAL_WAKE_LOCK);
+
+        // We need more space - wake lock 1 acquisition is removed from the log and saved in the
+        // list. Log size = 9 - 3 + 2 = 8
+        when(injectorSpy.currentTimeMillis()).thenReturn(1152L);
+        log.onWakeLockReleased("TagThree", 101);
+
+        // We need more space - wake lock 2 acquisition is removed from the log and saved in the
+        // list. Log size = 8 - 3 + 2 = 7
+        when(injectorSpy.currentTimeMillis()).thenReturn(1153L);
+        log.onWakeLockReleased("TagPartial", 101);
+
+        // We need more space - wake lock 3 acquisition is removed from the log and saved in the
+        // list. Log size = 7 - 3 + 3 = 7
+        when(injectorSpy.currentTimeMillis()).thenReturn(1154L);
+        log.onWakeLockAcquired("TagFour", 101, PowerManager.PARTIAL_WAKE_LOCK);
+
+        // We need more space - wake lock 3 release is removed from the log and wake lock 3
+        // acquisition is removed from the list. Log size = 7 - 2 + 3 = 8
+        when(injectorSpy.currentTimeMillis()).thenReturn(1155L);
+        log.onWakeLockAcquired("TagFive", 101, PowerManager.PARTIAL_WAKE_LOCK);
+
+        // We need more space - wake lock 1 release is removed from the log and wake lock 1
+        // acquisition is removed from the list. Log size = 8 - 2 + 2 = 8
+        when(injectorSpy.currentTimeMillis()).thenReturn(1156L);
+        log.onWakeLockReleased("TagFull", 102);
+
+        // Wake lock 2 acquisition is still printed because its release have not rolled off the log
+        // yet.
+        assertEquals("Wake Lock Log\n"
+                + "  01-01 00:00:01.150 - 102 (some.package2) - ACQ TagFull (full)\n"
+                + "  01-01 00:00:01.154 - 101 (some.package1) - ACQ TagFour (partial)\n"
+                + "  01-01 00:00:01.155 - 101 (some.package1) - ACQ TagFive (partial)\n"
+                + "  01-01 00:00:01.156 - 102 (some.package2) - REL TagFull\n"
+                + "  -\n"
+                + "  Events: 4, Time-Resets: 0\n"
+                + "  Buffer, Bytes used: 8\n",
+                dumpLog(log, false));
+    }
+
+    @Test
+    public void testAddItemWithBadTag() {
+        final int tagDatabaseSize = 6;
+        final int logSize = 10;
+        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
+        WakeLockLog log = new WakeLockLog(injectorSpy, mContext);
+
+        // Bad tag means it wont get written
+        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
+        log.onWakeLockAcquired(null /* tag */, 0 /* ownerUid */, PowerManager.PARTIAL_WAKE_LOCK);
+
+        assertEquals("Wake Lock Log\n"
+                + "  -\n"
+                + "  Events: 0, Time-Resets: 0\n"
+                + "  Buffer, Bytes used: 0\n",
+                dumpLog(log, false));
+    }
+
+    @Test
+    public void testAddItemWithReducedTagName() {
+        final int tagDatabaseSize = 6;
+        final int logSize = 10;
+        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
+        WakeLockLog log = new WakeLockLog(injectorSpy, mContext);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
+        log.onWakeLockAcquired("*job*/com.one.two.3hree/.one..Last", 101,
+                PowerManager.PARTIAL_WAKE_LOCK);
+
+        assertEquals("Wake Lock Log\n"
+                + "  01-01 00:00:01.000 - 101 (some.package1) - ACQ "
+                        + "*job*/c.o.t.3/.o..Last (partial)\n"
+                + "  -\n"
+                + "  Events: 1, Time-Resets: 0\n"
+                + "  Buffer, Bytes used: 3\n",
+                dumpLog(log, false));
+    }
+
+    @Test
+    public void testAddAcquireAndReleaseWithRepeatTagName() {
+        final int tagDatabaseSize = 6;
+        final int logSize = 10;
+        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
+        WakeLockLog log = new WakeLockLog(injectorSpy, mContext);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
+        log.onWakeLockAcquired("HowdyTag", 101, PowerManager.PARTIAL_WAKE_LOCK);
+        when(injectorSpy.currentTimeMillis()).thenReturn(1001L);
+        log.onWakeLockReleased("HowdyTag", 101);
+
+        assertEquals("Wake Lock Log\n"
+                + "  01-01 00:00:01.000 - 101 (some.package1) - ACQ HowdyTag (partial)\n"
+                + "  01-01 00:00:01.001 - 101 (some.package1) - REL HowdyTag\n"
+                + "  -\n"
+                + "  Events: 2, Time-Resets: 0\n"
+                + "  Buffer, Bytes used: 5\n"
+                + "  Tag Database: size(5), entries: 1, Bytes used: 80\n",
+                dumpLog(log, true));
+    }
+
+    @Test
+    public void testAddAcquireAndReleaseWithTimeTravel() {
+        final int tagDatabaseSize = 6;
+        final int logSize = 10;
+        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
+        WakeLockLog log = new WakeLockLog(injectorSpy, mContext);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1100L);
+        log.onWakeLockAcquired("HowdyTag", 101, PowerManager.PARTIAL_WAKE_LOCK);
+
+        // New element goes back in time...should not be written to log.
+        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
+        log.onWakeLockReleased("HowdyTag", 101);
+
+        assertEquals("Wake Lock Log\n"
+                + "  01-01 00:00:01.100 - 101 (some.package1) - ACQ HowdyTag (partial)\n"
+                + "  -\n"
+                + "  Events: 1, Time-Resets: 0\n"
+                + "  Buffer, Bytes used: 3\n",
+                dumpLog(log, false));
+    }
+
+    @Test
+    public void testAddSystemWakelock() {
+        final int tagDatabaseSize = 6;
+        final int logSize = 10;
+        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
+        WakeLockLog log = new WakeLockLog(injectorSpy, mContext);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
+        log.onWakeLockAcquired("TagPartial", 101,
+                PowerManager.PARTIAL_WAKE_LOCK | PowerManager.SYSTEM_WAKELOCK);
+
+        assertEquals("Wake Lock Log\n"
+                        + "  01-01 00:00:01.000 - 101 (some.package1) - ACQ TagPartial "
+                                + "(partial,system-wakelock)\n"
+                        + "  -\n"
+                        + "  Events: 1, Time-Resets: 0\n"
+                        + "  Buffer, Bytes used: 3\n",
+                dumpLog(log, false));
+    }
+
+    @Test
+    public void testAddItemWithNoPackageName() {
+        final int tagDatabaseSize = 128;
+        final int logSize = 20;
+        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
+        WakeLockLog log = new WakeLockLog(injectorSpy, mContext);
+
+        when(mPackageManager.getPackagesForUid(101)).thenReturn(null);
+        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
+        log.onWakeLockAcquired("TagPartial", 101,
+                PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE);
+
+        assertEquals("Wake Lock Log\n"
+                        + "  01-01 00:00:01.000 - 101 - ACQ TagPartial "
+                                + "(partial,on-after-release)\n"
+                        + "  -\n"
+                        + "  Events: 1, Time-Resets: 0\n"
+                        + "  Buffer, Bytes used: 3\n",
+                dumpLog(log, false));
+    }
+
+    @Test
+    public void testAddItemWithMultiplePackageNames() {
+        final int tagDatabaseSize = 128;
+        final int logSize = 20;
+        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
+        WakeLockLog log = new WakeLockLog(injectorSpy, mContext);
+
+        when(mPackageManager.getPackagesForUid(101)).thenReturn(
+                new String[]{ "some.package1", "some.package2", "some.package3" });
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
+        log.onWakeLockAcquired("TagPartial", 101,
+                PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE);
+
+        assertEquals("Wake Lock Log\n"
+                        + "  01-01 00:00:01.000 - 101 (some.package1,...) - ACQ TagPartial "
+                                + "(partial,on-after-release)\n"
+                        + "  -\n"
+                        + "  Events: 1, Time-Resets: 0\n"
+                        + "  Buffer, Bytes used: 3\n",
+                dumpLog(log, false));
+    }
+
+    @Test
+    public void testAddItemsWithRepeatOwnerUid_UsesCache() {
+        final int tagDatabaseSize = 128;
+        final int logSize = 20;
+        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
+        WakeLockLog log = new WakeLockLog(injectorSpy, mContext);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
+        log.onWakeLockAcquired("TagPartial", 101,
+                PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1150L);
+        log.onWakeLockAcquired("TagFull", 101,
+                PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1151L);
+        log.onWakeLockAcquired("TagFull2", 101,
+                PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP);
+
+        assertEquals("Wake Lock Log\n"
+                        + "  01-01 00:00:01.000 - 101 (some.package1) - ACQ TagPartial "
+                        + "(partial,on-after-release)\n"
+                        + "  01-01 00:00:01.150 - 101 (some.package1) - ACQ TagFull "
+                        + "(full,acq-causes-wake)\n"
+                        + "  01-01 00:00:01.151 - 101 (some.package1) - ACQ TagFull2 "
+                        + "(full,acq-causes-wake)\n"
+                        + "  -\n"
+                        + "  Events: 3, Time-Resets: 0\n"
+                        + "  Buffer, Bytes used: 9\n",
+                dumpLog(log, false));
+
+        verify(mPackageManager, times(1)).getPackagesForUid(101);
+    }
+
+    @Test
+    public void testAddItemsWithRepeatOwnerUid_SavedAcquisitions_UsesCache() {
+        final int tagDatabaseSize = 128;
+        final int logSize = 10;
+        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
+        WakeLockLog log = new WakeLockLog(injectorSpy, mContext);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
+        log.onWakeLockAcquired("TagPartial", 101,
+                PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1150L);
+        log.onWakeLockAcquired("TagFull", 101,
+                PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1151L);
+        log.onWakeLockAcquired("TagFull2", 101,
+                PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1152L);
+        log.onWakeLockAcquired("TagFull3", 101,
+                PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1153L);
+        log.onWakeLockAcquired("TagFull4", 101,
+                PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP);
+
+        when(injectorSpy.currentTimeMillis()).thenReturn(1154L);
+        log.onWakeLockAcquired("TagFull5", 101,
+                PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP);
+
+        // The first 3 events have been removed from the log and they exist in the saved
+        // acquisitions list. They should also use the cache when fetching the package names.
+        assertEquals("Wake Lock Log\n"
+                        + "  01-01 00:00:01.000 - 101 (some.package1) - ACQ TagPartial "
+                        + "(partial,on-after-release)\n"
+                        + "  01-01 00:00:01.150 - 101 (some.package1) - ACQ TagFull "
+                        + "(full,acq-causes-wake)\n"
+                        + "  01-01 00:00:01.151 - 101 (some.package1) - ACQ TagFull2 "
+                        + "(full,acq-causes-wake)\n"
+                        + "  01-01 00:00:01.152 - 101 (some.package1) - ACQ TagFull3 "
+                        + "(full,acq-causes-wake)\n"
+                        + "  01-01 00:00:01.153 - 101 (some.package1) - ACQ TagFull4 "
+                        + "(full,acq-causes-wake)\n"
+                        + "  01-01 00:00:01.154 - 101 (some.package1) - ACQ TagFull5 "
+                        + "(full,acq-causes-wake)\n"
+                        + "  -\n"
+                        + "  Events: 6, Time-Resets: 0\n"
+                        + "  Buffer, Bytes used: 9\n",
+                dumpLog(log, false));
+
+        verify(mPackageManager, times(1)).getPackagesForUid(101);
+    }
+
+    private String dumpLog(WakeLockLog log, boolean includeTagDb) {
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        log.dump(pw, includeTagDb);
+        return sw.toString();
+    }
+
+    public static class TestInjector extends WakeLockLog.Injector {
+        private final int mTagDatabaseSize;
+        private final int mLogSize;
+
+        public TestInjector(int tagDatabaseSize, int logSize) {
+            mTagDatabaseSize = tagDatabaseSize;
+            mLogSize = logSize;
+        }
+
+        @Override
+        public int getTagDatabaseSize() {
+            return mTagDatabaseSize;
+        }
+
+        @Override
+        public int getLogSize() {
+            return mLogSize;
+        }
+
+        @Override
+        public SimpleDateFormat getDateFormat() {
+            SimpleDateFormat format = new SimpleDateFormat(super.getDateFormat().toPattern());
+            format.setTimeZone(TimeZone.getTimeZone("UTC"));
+            return format;
+        }
+    }
+}
diff --git a/services/tests/powerstatstests/Android.bp b/services/tests/powerstatstests/Android.bp
new file mode 100644
index 0000000..05acd9b
--- /dev/null
+++ b/services/tests/powerstatstests/Android.bp
@@ -0,0 +1,52 @@
+package {
+    // See: http://go/android-license-faq
+    default_applicable_licenses: ["frameworks_base_license"],
+}
+
+android_test {
+    name: "PowerStatsTests",
+
+    // Include all test java files.
+    srcs: [
+        "src/**/*.java",
+    ],
+
+    static_libs: [
+        "services.core",
+        "coretests-aidl",
+        "platformprotosnano",
+        "junit",
+        "truth-prebuilt",
+        "androidx.test.runner",
+        "androidx.test.ext.junit",
+        "androidx.test.ext.truth",
+        "androidx.test.uiautomator_uiautomator",
+        "mockito-target-minus-junit4",
+        "servicestests-utils",
+    ],
+
+    libs: [
+        "android.test.base",
+    ],
+
+    resource_dirs: ["res/"],
+
+    data: [
+        ":BstatsTestApp",
+    ],
+
+    test_suites: [
+        "automotive-tests",
+        "device-tests",
+    ],
+
+    platform_apis: true,
+
+    certificate: "platform",
+
+    dxflags: ["--multi-dex"],
+
+    optimize: {
+        enabled: false,
+    },
+}
diff --git a/services/tests/powerstatstests/AndroidManifest.xml b/services/tests/powerstatstests/AndroidManifest.xml
new file mode 100644
index 0000000..d3a88d2
--- /dev/null
+++ b/services/tests/powerstatstests/AndroidManifest.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+     package="com.android.frameworks.powerstatstests">
+
+    <uses-permission android:name="android.permission.BATTERY_STATS" />
+    <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
+    <uses-permission android:name="android.permission.MANAGE_USERS"/>
+
+    <queries>
+        <package android:name="com.android.coretests.apps.bstatstestapp" />
+    </queries>
+
+    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+         android:targetPackage="com.android.frameworks.powerstatstests"
+         android:label="BatteryStats and PowerStats Services Tests"/>
+</manifest>
diff --git a/services/tests/powerstatstests/AndroidTest.xml b/services/tests/powerstatstests/AndroidTest.xml
new file mode 100644
index 0000000..79b07e8
--- /dev/null
+++ b/services/tests/powerstatstests/AndroidTest.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<configuration description="Runs Power Stats Tests.">
+    <option name="test-suite-tag" value="apct" />
+    <option name="test-suite-tag" value="apct-instrumentation" />
+
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="install-arg" value="-t" />
+        <option name="test-file-name" value="PowerStatsTests.apk" />
+        <option name="test-file-name" value="BstatsTestApp.apk" />
+    </target_preparer>
+
+    <option name="test-tag" value="PowerStatsTests" />
+
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="com.android.frameworks.powerstatstests" />
+        <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/core/tests/coretests/BstatsTestApp/Android.bp b/services/tests/powerstatstests/BstatsTestApp/Android.bp
similarity index 100%
rename from core/tests/coretests/BstatsTestApp/Android.bp
rename to services/tests/powerstatstests/BstatsTestApp/Android.bp
diff --git a/core/tests/coretests/BstatsTestApp/AndroidManifest.xml b/services/tests/powerstatstests/BstatsTestApp/AndroidManifest.xml
similarity index 100%
rename from core/tests/coretests/BstatsTestApp/AndroidManifest.xml
rename to services/tests/powerstatstests/BstatsTestApp/AndroidManifest.xml
diff --git a/core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/BaseCmdReceiver.java b/services/tests/powerstatstests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/BaseCmdReceiver.java
similarity index 100%
rename from core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/BaseCmdReceiver.java
rename to services/tests/powerstatstests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/BaseCmdReceiver.java
diff --git a/services/tests/powerstatstests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/Common.java b/services/tests/powerstatstests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/Common.java
new file mode 100644
index 0000000..c731e53
--- /dev/null
+++ b/services/tests/powerstatstests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/Common.java
@@ -0,0 +1,60 @@
+/*
+ * 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.coretests.apps.bstatstestapp;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.SystemClock;
+import android.util.Log;
+
+import com.android.frameworks.coretests.aidl.ICmdCallback;
+
+public class Common {
+    private static final String EXTRA_KEY_CMD_RECEIVER = "cmd_receiver";
+
+    public static void doSomeWork(int durationMs) {
+        final long endTime = SystemClock.currentThreadTimeMillis() + durationMs;
+        double x;
+        double y;
+        double z;
+        while (SystemClock.currentThreadTimeMillis() <= endTime) {
+            x = 0.02;
+            x *= 1000;
+            y = x % 5;
+            z = Math.sqrt(y / 100);
+        }
+    }
+
+    public static void notifyLaunched(Intent intent, IBinder binder, String tag) {
+        if (intent == null) {
+            return;
+        }
+
+        final Bundle extras = intent.getExtras();
+        if (extras == null) {
+            return;
+        }
+        final ICmdCallback callback = ICmdCallback.Stub.asInterface(
+                extras.getBinder(EXTRA_KEY_CMD_RECEIVER));
+        try {
+            callback.onLaunched(binder);
+        } catch (RemoteException e) {
+            Log.e(tag, "Error occured while notifying the test: " + e);
+        }
+    }
+}
diff --git a/core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/IsolatedTestService.java b/services/tests/powerstatstests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/IsolatedTestService.java
similarity index 100%
rename from core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/IsolatedTestService.java
rename to services/tests/powerstatstests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/IsolatedTestService.java
diff --git a/core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/TestActivity.java b/services/tests/powerstatstests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/TestActivity.java
similarity index 100%
rename from core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/TestActivity.java
rename to services/tests/powerstatstests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/TestActivity.java
diff --git a/core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/TestService.java b/services/tests/powerstatstests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/TestService.java
similarity index 100%
rename from core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/TestService.java
rename to services/tests/powerstatstests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/TestService.java
diff --git a/services/tests/powerstatstests/OWNERS b/services/tests/powerstatstests/OWNERS
new file mode 100644
index 0000000..9ed0e05
--- /dev/null
+++ b/services/tests/powerstatstests/OWNERS
@@ -0,0 +1,4 @@
+# Bug component: 987260
+
+include /BATTERY_STATS_OWNERS
+include /services/core/java/com/android/server/powerstats/OWNERS
diff --git a/services/tests/powerstatstests/TEST_MAPPING b/services/tests/powerstatstests/TEST_MAPPING
new file mode 100644
index 0000000..e1eb1e4
--- /dev/null
+++ b/services/tests/powerstatstests/TEST_MAPPING
@@ -0,0 +1,22 @@
+{
+  "presubmit": [
+    {
+      "name": "PowerStatsTests",
+      "options": [
+        {"include-filter": "com.android.server.power.stats"},
+        {"exclude-annotation": "android.platform.test.annotations.FlakyTest"},
+        {"exclude-annotation": "androidx.test.filters.FlakyTest"},
+        {"exclude-annotation": "org.junit.Ignore"}
+      ]
+    }
+  ],
+  "postsubmit": [
+    {
+      "name": "PowerStatsTests",
+      "options": [
+        {"include-filter": "com.android.server.power.stats"},
+        {"exclude-annotation": "org.junit.Ignore"}
+      ]
+    }
+  ]
+}
diff --git a/services/tests/servicestests/res/xml/irq_device_map_1.xml b/services/tests/powerstatstests/res/xml/irq_device_map_1.xml
similarity index 100%
rename from services/tests/servicestests/res/xml/irq_device_map_1.xml
rename to services/tests/powerstatstests/res/xml/irq_device_map_1.xml
diff --git a/services/tests/servicestests/res/xml/irq_device_map_2.xml b/services/tests/powerstatstests/res/xml/irq_device_map_2.xml
similarity index 100%
rename from services/tests/servicestests/res/xml/irq_device_map_2.xml
rename to services/tests/powerstatstests/res/xml/irq_device_map_2.xml
diff --git a/services/tests/servicestests/res/xml/irq_device_map_3.xml b/services/tests/powerstatstests/res/xml/irq_device_map_3.xml
similarity index 100%
rename from services/tests/servicestests/res/xml/irq_device_map_3.xml
rename to services/tests/powerstatstests/res/xml/irq_device_map_3.xml
diff --git a/services/tests/servicestests/res/xml/power_profile_test_legacy_modem.xml b/services/tests/powerstatstests/res/xml/power_profile_test_legacy_modem.xml
similarity index 100%
rename from services/tests/servicestests/res/xml/power_profile_test_legacy_modem.xml
rename to services/tests/powerstatstests/res/xml/power_profile_test_legacy_modem.xml
diff --git a/services/tests/servicestests/res/xml/power_profile_test_modem_calculator.xml b/services/tests/powerstatstests/res/xml/power_profile_test_modem_calculator.xml
similarity index 100%
rename from services/tests/servicestests/res/xml/power_profile_test_modem_calculator.xml
rename to services/tests/powerstatstests/res/xml/power_profile_test_modem_calculator.xml
diff --git a/services/tests/servicestests/res/xml/power_profile_test_modem_calculator_multiactive.xml b/services/tests/powerstatstests/res/xml/power_profile_test_modem_calculator_multiactive.xml
similarity index 100%
rename from services/tests/servicestests/res/xml/power_profile_test_modem_calculator_multiactive.xml
rename to services/tests/powerstatstests/res/xml/power_profile_test_modem_calculator_multiactive.xml
diff --git a/services/tests/servicestests/res/xml/power_profile_test_modem_default.xml b/services/tests/powerstatstests/res/xml/power_profile_test_modem_default.xml
similarity index 100%
rename from services/tests/servicestests/res/xml/power_profile_test_modem_default.xml
rename to services/tests/powerstatstests/res/xml/power_profile_test_modem_default.xml
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/AmbientDisplayPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/AmbientDisplayPowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/AmbientDisplayPowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/AmbientDisplayPowerCalculatorTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/AudioPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/AudioPowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/AudioPowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/AudioPowerCalculatorTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryChargeCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryChargeCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryChargeCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryChargeCalculatorTest.java
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryExternalStatsWorkerTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryExternalStatsWorkerTest.java
new file mode 100644
index 0000000..5a2d2e3
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryExternalStatsWorkerTest.java
@@ -0,0 +1,328 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.power.stats;
+
+import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_ALL;
+import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_BT;
+import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_CAMERA;
+import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_CPU;
+import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_DISPLAY;
+import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_RADIO;
+import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_WIFI;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import android.content.Context;
+import android.hardware.power.stats.Channel;
+import android.hardware.power.stats.EnergyConsumer;
+import android.hardware.power.stats.EnergyConsumerResult;
+import android.hardware.power.stats.EnergyConsumerType;
+import android.hardware.power.stats.EnergyMeasurement;
+import android.hardware.power.stats.PowerEntity;
+import android.hardware.power.stats.StateResidencyResult;
+import android.power.PowerStatsInternal;
+import android.util.IntArray;
+import android.util.SparseArray;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.os.CpuScalingPolicies;
+import com.android.internal.os.PowerProfile;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.concurrent.CompletableFuture;
+
+/**
+ * Tests for {@link BatteryExternalStatsWorker}.
+ *
+ * Build/Install/Run:
+ * atest FrameworksServicesTests:BatteryExternalStatsWorkerTest
+ */
+@SuppressWarnings("GuardedBy")
+public class BatteryExternalStatsWorkerTest {
+    private BatteryExternalStatsWorker mBatteryExternalStatsWorker;
+    private TestBatteryStatsImpl mBatteryStatsImpl;
+    private TestPowerStatsInternal mPowerStatsInternal;
+
+    @Before
+    public void setUp() {
+        final Context context = InstrumentationRegistry.getContext();
+
+        mBatteryStatsImpl = new TestBatteryStatsImpl(context);
+        mPowerStatsInternal = new TestPowerStatsInternal();
+        mBatteryExternalStatsWorker = new BatteryExternalStatsWorker(new TestInjector(context),
+                mBatteryStatsImpl);
+    }
+
+    @Test
+    public void testTargetedEnergyConsumerQuerying() {
+        final int numCpuClusters = 4;
+        final int numDisplays = 5;
+        final int numOther = 3;
+
+        // Add some energy consumers used by BatteryExternalStatsWorker.
+        final IntArray tempAllIds = new IntArray();
+
+        final int[] displayIds = new int[numDisplays];
+        for (int i = 0; i < numDisplays; i++) {
+            displayIds[i] = mPowerStatsInternal.addEnergyConsumer(
+                    EnergyConsumerType.DISPLAY, i, "display" + i);
+            tempAllIds.add(displayIds[i]);
+            mPowerStatsInternal.incrementEnergyConsumption(displayIds[i], 12345 + i);
+        }
+        Arrays.sort(displayIds);
+
+        final int wifiId = mPowerStatsInternal.addEnergyConsumer(EnergyConsumerType.WIFI, 0,
+                "wifi");
+        tempAllIds.add(wifiId);
+        mPowerStatsInternal.incrementEnergyConsumption(wifiId, 23456);
+
+        final int btId = mPowerStatsInternal.addEnergyConsumer(EnergyConsumerType.BLUETOOTH, 0,
+                "bt");
+        tempAllIds.add(btId);
+        mPowerStatsInternal.incrementEnergyConsumption(btId, 34567);
+
+        final int gnssId = mPowerStatsInternal.addEnergyConsumer(EnergyConsumerType.GNSS, 0,
+                "gnss");
+        tempAllIds.add(gnssId);
+        mPowerStatsInternal.incrementEnergyConsumption(gnssId, 787878);
+
+        final int cameraId =
+                mPowerStatsInternal.addEnergyConsumer(EnergyConsumerType.CAMERA, 0, "camera");
+        tempAllIds.add(cameraId);
+        mPowerStatsInternal.incrementEnergyConsumption(cameraId, 901234);
+
+        final int mobileRadioId = mPowerStatsInternal.addEnergyConsumer(
+                EnergyConsumerType.MOBILE_RADIO, 0, "mobile_radio");
+        tempAllIds.add(mobileRadioId);
+        mPowerStatsInternal.incrementEnergyConsumption(mobileRadioId, 62626);
+
+        final int[] cpuClusterIds = new int[numCpuClusters];
+        for (int i = 0; i < numCpuClusters; i++) {
+            cpuClusterIds[i] = mPowerStatsInternal.addEnergyConsumer(
+                    EnergyConsumerType.CPU_CLUSTER, i, "cpu_cluster" + i);
+            tempAllIds.add(cpuClusterIds[i]);
+            mPowerStatsInternal.incrementEnergyConsumption(cpuClusterIds[i], 1111 + i);
+        }
+        Arrays.sort(cpuClusterIds);
+
+        final int[] otherIds = new int[numOther];
+        for (int i = 0; i < numOther; i++) {
+            otherIds[i] = mPowerStatsInternal.addEnergyConsumer(
+                    EnergyConsumerType.OTHER, i, "other" + i);
+            tempAllIds.add(otherIds[i]);
+            mPowerStatsInternal.incrementEnergyConsumption(otherIds[i], 3000 + i);
+        }
+        Arrays.sort(otherIds);
+
+        final int[] allIds = tempAllIds.toArray();
+        Arrays.sort(allIds);
+
+        // Inform BESW that PowerStatsInternal is ready to query
+        mBatteryExternalStatsWorker.systemServicesReady();
+
+        final EnergyConsumerResult[] displayResults =
+                mBatteryExternalStatsWorker.getEnergyConsumersLocked(UPDATE_DISPLAY).getNow(null);
+        // Results should only have the cpu cluster energy consumers
+        final int[] receivedDisplayIds = new int[displayResults.length];
+        for (int i = 0; i < displayResults.length; i++) {
+            receivedDisplayIds[i] = displayResults[i].id;
+        }
+        Arrays.sort(receivedDisplayIds);
+        assertArrayEquals(displayIds, receivedDisplayIds);
+
+        final EnergyConsumerResult[] wifiResults =
+                mBatteryExternalStatsWorker.getEnergyConsumersLocked(UPDATE_WIFI).getNow(null);
+        // Results should only have the wifi energy consumer
+        assertEquals(1, wifiResults.length);
+        assertEquals(wifiId, wifiResults[0].id);
+
+        final EnergyConsumerResult[] bluetoothResults =
+                mBatteryExternalStatsWorker.getEnergyConsumersLocked(UPDATE_BT).getNow(null);
+        // Results should only have the bluetooth energy consumer
+        assertEquals(1, bluetoothResults.length);
+        assertEquals(btId, bluetoothResults[0].id);
+
+        final EnergyConsumerResult[] mobileRadioResults =
+                mBatteryExternalStatsWorker.getEnergyConsumersLocked(UPDATE_RADIO).getNow(null);
+        // Results should only have the mobile radio energy consumer
+        assertEquals(1, mobileRadioResults.length);
+        assertEquals(mobileRadioId, mobileRadioResults[0].id);
+
+        final EnergyConsumerResult[] cpuResults =
+                mBatteryExternalStatsWorker.getEnergyConsumersLocked(UPDATE_CPU).getNow(null);
+        // Results should only have the cpu cluster energy consumers
+        final int[] receivedCpuIds = new int[cpuResults.length];
+        for (int i = 0; i < cpuResults.length; i++) {
+            receivedCpuIds[i] = cpuResults[i].id;
+        }
+        Arrays.sort(receivedCpuIds);
+        assertArrayEquals(cpuClusterIds, receivedCpuIds);
+
+        final EnergyConsumerResult[] cameraResults =
+                mBatteryExternalStatsWorker.getEnergyConsumersLocked(UPDATE_CAMERA).getNow(null);
+        // Results should only have the camera energy consumer
+        assertEquals(1, cameraResults.length);
+        assertEquals(cameraId, cameraResults[0].id);
+
+        final EnergyConsumerResult[] allResults =
+                mBatteryExternalStatsWorker.getEnergyConsumersLocked(UPDATE_ALL).getNow(null);
+        // All energy consumer results should be available
+        final int[] receivedAllIds = new int[allResults.length];
+        for (int i = 0; i < allResults.length; i++) {
+            receivedAllIds[i] = allResults[i].id;
+        }
+        Arrays.sort(receivedAllIds);
+        assertArrayEquals(allIds, receivedAllIds);
+    }
+
+    public class TestInjector extends BatteryExternalStatsWorker.Injector {
+        public TestInjector(Context context) {
+            super(context);
+        }
+
+        public <T> T getSystemService(Class<T> serviceClass) {
+            return null;
+        }
+
+        public <T> T getLocalService(Class<T> serviceClass) {
+            if (serviceClass == PowerStatsInternal.class) {
+                return (T) mPowerStatsInternal;
+            }
+            return null;
+        }
+    }
+
+    public class TestBatteryStatsImpl extends BatteryStatsImpl {
+        public TestBatteryStatsImpl(Context context) {
+            mPowerProfile = new PowerProfile(context, true /* forTest */);
+
+            SparseArray<int[]> cpusByPolicy = new SparseArray<>();
+            cpusByPolicy.put(0, new int[]{0, 1, 2, 3});
+            cpusByPolicy.put(4, new int[]{4, 5, 6, 7});
+            SparseArray<int[]> freqsByPolicy = new SparseArray<>();
+            freqsByPolicy.put(0, new int[]{300000, 1000000, 2000000});
+            freqsByPolicy.put(4, new int[]{300000, 1000000, 2500000, 3000000});
+            mCpuScalingPolicies = new CpuScalingPolicies(freqsByPolicy, freqsByPolicy);
+
+            initTimersAndCounters();
+        }
+    }
+
+    public class TestPowerStatsInternal extends PowerStatsInternal {
+        private final SparseArray<EnergyConsumer> mEnergyConsumers = new SparseArray();
+        private final SparseArray<EnergyConsumerResult> mEnergyConsumerResults = new SparseArray();
+        private final int mTimeSinceBoot = 0;
+
+        @Override
+        public EnergyConsumer[] getEnergyConsumerInfo() {
+            final int size = mEnergyConsumers.size();
+            final EnergyConsumer[] consumers = new EnergyConsumer[size];
+            for (int i = 0; i < size; i++) {
+                consumers[i] = mEnergyConsumers.valueAt(i);
+            }
+            return consumers;
+        }
+
+        @Override
+        public CompletableFuture<EnergyConsumerResult[]> getEnergyConsumedAsync(
+                int[] energyConsumerIds) {
+            final CompletableFuture<EnergyConsumerResult[]> future = new CompletableFuture();
+            final EnergyConsumerResult[] results;
+            final int length = energyConsumerIds.length;
+            if (length == 0) {
+                final int size = mEnergyConsumerResults.size();
+                results = new EnergyConsumerResult[size];
+                for (int i = 0; i < size; i++) {
+                    results[i] = mEnergyConsumerResults.valueAt(i);
+                }
+            } else {
+                results = new EnergyConsumerResult[length];
+                for (int i = 0; i < length; i++) {
+                    results[i] = mEnergyConsumerResults.get(energyConsumerIds[i]);
+                }
+            }
+            future.complete(results);
+            return future;
+        }
+
+        @Override
+        public PowerEntity[] getPowerEntityInfo() {
+            return new PowerEntity[0];
+        }
+
+        @Override
+        public CompletableFuture<StateResidencyResult[]> getStateResidencyAsync(
+                int[] powerEntityIds) {
+            return new CompletableFuture<>();
+        }
+
+        @Override
+        public Channel[] getEnergyMeterInfo() {
+            return new Channel[0];
+        }
+
+        @Override
+        public CompletableFuture<EnergyMeasurement[]> readEnergyMeterAsync(
+                int[] channelIds) {
+            return new CompletableFuture<>();
+        }
+
+        /**
+         * Util method to add a new EnergyConsumer for testing
+         *
+         * @return the EnergyConsumer id of the new EnergyConsumer
+         */
+        public int addEnergyConsumer(@EnergyConsumerType byte type, int ordinal, String name) {
+            final EnergyConsumer consumer = new EnergyConsumer();
+            final int id = getNextAvailableId();
+            consumer.id = id;
+            consumer.type = type;
+            consumer.ordinal = ordinal;
+            consumer.name = name;
+            mEnergyConsumers.put(id, consumer);
+
+            final EnergyConsumerResult result = new EnergyConsumerResult();
+            result.id = id;
+            result.timestampMs = mTimeSinceBoot;
+            result.energyUWs = 0;
+            mEnergyConsumerResults.put(id, result);
+            return id;
+        }
+
+        public void incrementEnergyConsumption(int id, long energyUWs) {
+            EnergyConsumerResult result = mEnergyConsumerResults.get(id, null);
+            assertNotNull(result);
+            result.energyUWs += energyUWs;
+        }
+
+        private int getNextAvailableId() {
+            final int size = mEnergyConsumers.size();
+            // Just return the first index that does not match the key (aka the EnergyConsumer id)
+            for (int i = size - 1; i >= 0; i--) {
+                if (mEnergyConsumers.keyAt(i) == i) return i + 1;
+            }
+            // Otherwise return the lowest id
+            return 0;
+        }
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsBackgroundStatsTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsBackgroundStatsTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsBackgroundStatsTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsBackgroundStatsTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsBinderCallStatsTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsBinderCallStatsTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsBinderCallStatsTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsBinderCallStatsTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsCounterTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsCounterTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsCounterTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsCounterTest.java
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsCpuTimesTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsCpuTimesTest.java
new file mode 100644
index 0000000..55ffa1a
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsCpuTimesTest.java
@@ -0,0 +1,1416 @@
+/*
+ * 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.server.power.stats;
+
+import static android.os.BatteryStats.STATS_SINCE_CHARGED;
+import static android.os.BatteryStats.WAKE_TYPE_PARTIAL;
+import static android.os.Process.FIRST_APPLICATION_UID;
+import static android.os.Process.FIRST_ISOLATED_UID;
+
+import static com.android.server.power.stats.BatteryStatsImpl.WAKE_LOCK_WEIGHT;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+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.anyBoolean;
+import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import android.os.BatteryStats;
+import android.os.UserHandle;
+import android.util.SparseArray;
+import android.util.SparseLongArray;
+import android.view.Display;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.internal.os.CpuScalingPolicies;
+import com.android.internal.os.KernelCpuSpeedReader;
+import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidActiveTimeReader;
+import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidClusterTimeReader;
+import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader;
+import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidUserSysTimeReader;
+import com.android.internal.util.ArrayUtils;
+
+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.ArrayList;
+import java.util.Arrays;
+
+/**
+ * To run the tests, use
+ *
+ * runtest -c BatteryStatsCpuTimesTest frameworks-core
+ *
+ * or
+ *
+ * Build: m FrameworksCoreTests
+ * Install: adb install -r \
+ * ${ANDROID_PRODUCT_OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
+ * Run: adb shell am instrument -e class BatteryStatsCpuTimesTest -w \
+ * com.android.frameworks.coretests/androidx.test.runner.AndroidJUnitRunner
+ *
+ * or
+ *
+ * atest FrameworksCoreTests:BatteryStatsCpuTimesTest
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class BatteryStatsCpuTimesTest {
+    @Mock
+    KernelCpuUidUserSysTimeReader mCpuUidUserSysTimeReader;
+    @Mock
+    KernelCpuUidFreqTimeReader mCpuUidFreqTimeReader;
+    @Mock
+    KernelCpuUidActiveTimeReader mCpuUidActiveTimeReader;
+    @Mock
+    KernelCpuUidClusterTimeReader mCpuUidClusterTimeReader;
+    @Mock
+    SystemServerCpuThreadReader mSystemServerCpuThreadReader;
+    @Mock
+    BatteryStatsImpl.UserInfoProvider mUserInfoProvider;
+
+    private MockClock mClocks;
+    private MockBatteryStatsImpl mBatteryStatsImpl;
+    private KernelCpuSpeedReader[] mKernelCpuSpeedReaders;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mClocks = new MockClock();
+        mBatteryStatsImpl = new MockBatteryStatsImpl(mClocks)
+                .setTestCpuScalingPolicies()
+                .setKernelCpuUidUserSysTimeReader(mCpuUidUserSysTimeReader)
+                .setKernelCpuUidFreqTimeReader(mCpuUidFreqTimeReader)
+                .setKernelCpuUidActiveTimeReader(mCpuUidActiveTimeReader)
+                .setKernelCpuUidClusterTimeReader(mCpuUidClusterTimeReader)
+                .setSystemServerCpuThreadReader(mSystemServerCpuThreadReader)
+                .setUserInfoProvider(mUserInfoProvider);
+    }
+
+    @Test
+    public void testUpdateCpuTimeLocked() {
+        // PRECONDITIONS
+        mBatteryStatsImpl.setOnBatteryInternal(false);
+        final int numClusters = 3;
+        initKernelCpuSpeedReaders(numClusters);
+
+        // RUN
+        mBatteryStatsImpl.updateCpuTimeLocked(false, false, null);
+
+        // VERIFY
+        verify(mCpuUidUserSysTimeReader).readDelta(anyBoolean(), isNull());
+        verify(mCpuUidFreqTimeReader).readDelta(anyBoolean(), isNull());
+        for (int i = 0; i < numClusters; ++i) {
+            verify(mKernelCpuSpeedReaders[i]).readDelta();
+        }
+
+        // Prepare for next test
+        Mockito.reset(mUserInfoProvider, mCpuUidFreqTimeReader, mCpuUidUserSysTimeReader);
+        for (int i = 0; i < numClusters; ++i) {
+            Mockito.reset(mKernelCpuSpeedReaders[i]);
+        }
+
+        // PRECONDITIONS
+        mBatteryStatsImpl.setOnBatteryInternal(true);
+
+        // RUN
+        mBatteryStatsImpl.updateCpuTimeLocked(true, false, null);
+
+        // VERIFY
+        verify(mUserInfoProvider).refreshUserIds();
+        verify(mCpuUidUserSysTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidUserSysTimeReader.Callback.class));
+        verify(mCpuUidFreqTimeReader).perClusterTimesAvailable();
+        verify(mCpuUidFreqTimeReader).allUidTimesAvailable();
+        verify(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidFreqTimeReader.Callback.class));
+        verify(mCpuUidActiveTimeReader).readAbsolute(
+                any(KernelCpuUidActiveTimeReader.Callback.class));
+        verify(mCpuUidClusterTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidClusterTimeReader.Callback.class));
+        verifyNoMoreInteractions(mCpuUidFreqTimeReader);
+        for (int i = 0; i < numClusters; ++i) {
+            verify(mKernelCpuSpeedReaders[i]).readDelta();
+        }
+    }
+
+    @Test
+    public void testMarkPartialTimersAsEligible() {
+        // PRECONDITIONS
+        final ArrayList<BatteryStatsImpl.StopwatchTimer> partialTimers = getPartialTimers(
+                10032, 10042, 10052);
+        final ArrayList<BatteryStatsImpl.StopwatchTimer> lastPartialTimers
+                = new ArrayList<>(partialTimers);
+        mBatteryStatsImpl.setPartialTimers(partialTimers);
+        mBatteryStatsImpl.setLastPartialTimers(lastPartialTimers);
+        final boolean[] inList = {false, true, false};
+        for (int i = 0; i < partialTimers.size(); ++i) {
+            partialTimers.get(i).mInList = inList[i];
+        }
+
+        // RUN
+        mBatteryStatsImpl.markPartialTimersAsEligible();
+
+        // VERIFY
+        assertTrue(ArrayUtils.referenceEquals(partialTimers, lastPartialTimers));
+        for (int i = 0; i < partialTimers.size(); ++i) {
+            assertTrue("Timer id=" + i, partialTimers.get(i).mInList);
+        }
+
+        // PRECONDITIONS
+        partialTimers.addAll(getPartialTimers(10077, 10099));
+        partialTimers.remove(1 /* index */);
+
+        // RUN
+        mBatteryStatsImpl.markPartialTimersAsEligible();
+
+        // VERIFY
+        assertTrue(ArrayUtils.referenceEquals(partialTimers, lastPartialTimers));
+        for (int i = 0; i < partialTimers.size(); ++i) {
+            assertTrue("Timer id=" + i, partialTimers.get(i).mInList);
+        }
+    }
+
+    @Test
+    public void testUpdateClusterSpeedTimes() {
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+        final long[][] clusterSpeedTimesMs = {{20, 30}, {40, 50, 60}};
+
+        CpuScalingPolicies scalingPolicies = new CpuScalingPolicies(
+                new SparseArray<>() {{
+                    for (int i = 0; i < clusterSpeedTimesMs.length; i++) {
+                        put(i, new int[]{i});
+                    }
+                }},
+                new SparseArray<>() {{
+                    for (int i = 0; i < clusterSpeedTimesMs.length; i++) {
+                        put(i, new int[clusterSpeedTimesMs[i].length]);
+                    }
+                }});
+        mBatteryStatsImpl.setCpuScalingPolicies(scalingPolicies);
+
+        initKernelCpuSpeedReaders(clusterSpeedTimesMs.length);
+        for (int i = 0; i < clusterSpeedTimesMs.length; ++i) {
+            when(mKernelCpuSpeedReaders[i].readDelta()).thenReturn(clusterSpeedTimesMs[i]);
+        }
+
+        final SparseLongArray updatedUids = new SparseLongArray();
+        final int[] testUids = {10012, 10014, 10016};
+        final int[] cpuTimeUs = {89, 31, 43};
+        for (int i = 0; i < testUids.length; ++i) {
+            updatedUids.put(testUids[i], cpuTimeUs[i]);
+        }
+
+        // RUN
+        mBatteryStatsImpl.updateClusterSpeedTimes(updatedUids, true, null);
+
+        // VERIFY
+        int totalClustersTimeMs = 0;
+        for (int i = 0; i < clusterSpeedTimesMs.length; ++i) {
+            for (int j = 0; j < clusterSpeedTimesMs[i].length; ++j) {
+                totalClustersTimeMs += clusterSpeedTimesMs[i][j];
+            }
+        }
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+            for (int cluster = 0; cluster < clusterSpeedTimesMs.length; ++cluster) {
+                for (int speed = 0; speed < clusterSpeedTimesMs[cluster].length; ++speed) {
+                    assertEquals("Uid=" + testUids[i] + ", cluster=" + cluster + ", speed=" + speed,
+                            cpuTimeUs[i] * clusterSpeedTimesMs[cluster][speed]
+                                    / totalClustersTimeMs,
+                            u.getTimeAtCpuSpeed(cluster, speed, STATS_SINCE_CHARGED));
+                }
+            }
+        }
+    }
+
+    @Test
+    public void testReadKernelUidCpuTimesLocked() {
+        //PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+        final int testUserId = 11;
+        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
+        final int[] testUids = getUids(testUserId, new int[]{
+                FIRST_APPLICATION_UID + 22,
+                FIRST_APPLICATION_UID + 27,
+                FIRST_APPLICATION_UID + 33
+        });
+        final long[][] uidTimesUs = {
+                {12, 34}, {34897394, 3123983}, {79775429834L, 8430434903489L}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidUserSysTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], uidTimesUs[i]);
+            }
+            return null;
+        }).when(mCpuUidUserSysTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidUserSysTimeReader.Callback.class));
+
+        // RUN
+        final SparseLongArray updatedUids = new SparseLongArray();
+        mBatteryStatsImpl.readKernelUidCpuTimesLocked(null, updatedUids, true);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+            assertEquals("Unexpected user cpu time for uid=" + testUids[i],
+                    uidTimesUs[i][0], u.getUserCpuTimeUs(STATS_SINCE_CHARGED));
+            assertEquals("Unexpected system cpu time for uid=" + testUids[i],
+                    uidTimesUs[i][1], u.getSystemCpuTimeUs(STATS_SINCE_CHARGED));
+
+            assertEquals("Unexpected entry in updated uids for uid=" + testUids[i],
+                    uidTimesUs[i][0] + uidTimesUs[i][1], updatedUids.get(testUids[i]));
+            updatedUids.delete(testUids[i]);
+        }
+        assertEquals("Updated uids: " + updatedUids, 0, updatedUids.size());
+
+        // Repeat the test with a null updatedUids
+
+        // PRECONDITIONS
+        final long[][] deltasUs = {
+                {9379, 3332409833484L}, {493247, 723234}, {3247819, 123348}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidUserSysTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], deltasUs[i]);
+            }
+            return null;
+        }).when(mCpuUidUserSysTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidUserSysTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuTimesLocked(null, null, true);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+            assertEquals("Unexpected user cpu time for uid=" + testUids[i],
+                    uidTimesUs[i][0] + deltasUs[i][0], u.getUserCpuTimeUs(STATS_SINCE_CHARGED));
+            assertEquals("Unexpected system cpu time for uid=" + testUids[i],
+                    uidTimesUs[i][1] + deltasUs[i][1], u.getSystemCpuTimeUs(STATS_SINCE_CHARGED));
+        }
+    }
+
+    @Test
+    public void testReadKernelUidCpuTimesLocked_isolatedUid() {
+        //PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+        final int testUserId = 11;
+        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
+        final int isolatedAppId = FIRST_ISOLATED_UID + 27;
+        final int isolatedUid = UserHandle.getUid(testUserId, isolatedAppId);
+        final int[] testUids = getUids(testUserId, new int[]{
+                FIRST_APPLICATION_UID + 22,
+                isolatedAppId,
+                FIRST_APPLICATION_UID + 33
+        });
+        final long[][] uidTimesUs = {
+                {12, 34}, {34897394, 3123983}, {79775429834L, 8430434903489L}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidUserSysTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], uidTimesUs[i]);
+            }
+            return null;
+        }).when(mCpuUidUserSysTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidUserSysTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuTimesLocked(null, null, true);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            if (UserHandle.isIsolated(testUids[i])) {
+                assertNull("There shouldn't be an entry for isolated uid=" + testUids[i], u);
+                continue;
+            }
+            assertNotNull("No entry for uid=" + testUids[i], u);
+            assertEquals("Unexpected user cpu time for uid=" + testUids[i],
+                    uidTimesUs[i][0], u.getUserCpuTimeUs(STATS_SINCE_CHARGED));
+            assertEquals("Unexpected system cpu time for uid=" + testUids[i],
+                    uidTimesUs[i][1], u.getSystemCpuTimeUs(STATS_SINCE_CHARGED));
+        }
+
+        // Add an isolated uid mapping and repeat the test.
+
+        // PRECONDITIONS
+        final int ownerUid = UserHandle.getUid(testUserId, FIRST_APPLICATION_UID + 42);
+        mBatteryStatsImpl.addIsolatedUidLocked(isolatedUid, ownerUid);
+        final long[][] deltasUs = {
+                {9379, 3332409833484L}, {493247, 723234}, {3247819, 123348}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidUserSysTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], deltasUs[i]);
+            }
+            return null;
+        }).when(mCpuUidUserSysTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidUserSysTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuTimesLocked(null, null, true);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            final long expectedUserTimeUs;
+            final long expectedSystemTimeUs;
+            if (UserHandle.isIsolated(testUids[i])) {
+                assertNull("There shouldn't be an entry for isolated uid=" + testUids[i], u);
+                // Since we added a mapping, an entry should've been created for owner uid.
+                u = mBatteryStatsImpl.getUidStats().get(ownerUid);
+                expectedUserTimeUs = deltasUs[i][0];
+                expectedSystemTimeUs = deltasUs[i][1];
+                assertNotNull("No entry for owner uid=" + ownerUid, u);
+            } else {
+                assertNotNull("No entry for uid=" + testUids[i], u);
+                expectedUserTimeUs = uidTimesUs[i][0] + deltasUs[i][0];
+                expectedSystemTimeUs = uidTimesUs[i][1] + deltasUs[i][1];
+            }
+            assertEquals("Unexpected user cpu time for uid=" + testUids[i],
+                    expectedUserTimeUs, u.getUserCpuTimeUs(STATS_SINCE_CHARGED));
+            assertEquals("Unexpected system cpu time for uid=" + testUids[i],
+                    expectedSystemTimeUs, u.getSystemCpuTimeUs(STATS_SINCE_CHARGED));
+        }
+    }
+
+    @Test
+    public void testReadKernelUidCpuTimesLocked_invalidUid() {
+        //PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+        final int testUserId = 11;
+        final int invalidUserId = 15;
+        final int invalidUid = UserHandle.getUid(invalidUserId, FIRST_APPLICATION_UID + 99);
+        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
+        when(mUserInfoProvider.exists(invalidUserId)).thenReturn(false);
+        final int[] testUids = getUids(testUserId, new int[]{
+                FIRST_APPLICATION_UID + 22,
+                FIRST_APPLICATION_UID + 27,
+                FIRST_APPLICATION_UID + 33
+        });
+        final long[][] uidTimesUs = {
+                {12, 34}, {34897394, 3123983}, {79775429834L, 8430434903489L}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidUserSysTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], uidTimesUs[i]);
+            }
+            // And one for the invalid uid
+            callback.onUidCpuTime(invalidUid, new long[]{3879, 239});
+            return null;
+        }).when(mCpuUidUserSysTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidUserSysTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuTimesLocked(null, null, true);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+            assertEquals("Unexpected user cpu time for uid=" + testUids[i],
+                    uidTimesUs[i][0], u.getUserCpuTimeUs(STATS_SINCE_CHARGED));
+            assertEquals("Unexpected system cpu time for uid=" + testUids[i],
+                    uidTimesUs[i][1], u.getSystemCpuTimeUs(STATS_SINCE_CHARGED));
+        }
+        assertNull("There shouldn't be an entry for invalid uid=" + invalidUid,
+                mBatteryStatsImpl.getUidStats().get(invalidUid));
+    }
+
+    @Test
+    public void testReadKernelUidCpuTimesLocked_withPartialTimers() {
+        //PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+        final int testUserId = 11;
+        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
+        final int[] testUids = getUids(testUserId, new int[]{
+                FIRST_APPLICATION_UID + 22,
+                FIRST_APPLICATION_UID + 27,
+                FIRST_APPLICATION_UID + 33
+        });
+        final int[] partialTimerUids = {
+                UserHandle.getUid(testUserId, FIRST_APPLICATION_UID + 48),
+                UserHandle.getUid(testUserId, FIRST_APPLICATION_UID + 10)
+        };
+        final ArrayList<BatteryStatsImpl.StopwatchTimer> partialTimers
+                = getPartialTimers(partialTimerUids);
+        final long[][] uidTimesUs = {
+                {12, 34}, {3394, 3123}, {7977, 80434}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidUserSysTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], uidTimesUs[i]);
+            }
+            return null;
+        }).when(mCpuUidUserSysTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidUserSysTimeReader.Callback.class));
+
+        // RUN
+        final SparseLongArray updatedUids = new SparseLongArray();
+        mBatteryStatsImpl.readKernelUidCpuTimesLocked(partialTimers, updatedUids, true);
+
+        // VERIFY
+        long totalUserTimeUs = 0;
+        long totalSystemTimeUs = 0;
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+            final long expectedUserTimeUs = uidTimesUs[i][0] * WAKE_LOCK_WEIGHT / 100;
+            final long expectedSystemTimeUs = uidTimesUs[i][1] * WAKE_LOCK_WEIGHT / 100;
+            assertEquals("Unexpected user cpu time for uid=" + testUids[i],
+                    expectedUserTimeUs, u.getUserCpuTimeUs(STATS_SINCE_CHARGED));
+            assertEquals("Unexpected system cpu time for uid=" + testUids[i],
+                    expectedSystemTimeUs, u.getSystemCpuTimeUs(STATS_SINCE_CHARGED));
+            assertEquals("Unexpected entry in updated uids for uid=" + testUids[i],
+                    expectedUserTimeUs + expectedSystemTimeUs, updatedUids.get(testUids[i]));
+            updatedUids.delete(testUids[i]);
+            totalUserTimeUs += uidTimesUs[i][0];
+            totalSystemTimeUs += uidTimesUs[i][1];
+        }
+
+        totalUserTimeUs = totalUserTimeUs * (100 - WAKE_LOCK_WEIGHT) / 100;
+        totalSystemTimeUs = totalSystemTimeUs * (100 - WAKE_LOCK_WEIGHT) / 100;
+        for (int i = 0; i < partialTimerUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(partialTimerUids[i]);
+            assertNotNull("No entry for partial timer uid=" + partialTimerUids[i], u);
+            final long expectedUserTimeUs = totalUserTimeUs / (partialTimerUids.length - i);
+            final long expectedSystemTimeUs = totalSystemTimeUs / (partialTimerUids.length - i);
+            assertEquals("Unexpected user cpu time for partial timer uid=" + partialTimerUids[i],
+                    expectedUserTimeUs, u.getUserCpuTimeUs(STATS_SINCE_CHARGED));
+            assertEquals("Unexpected system cpu time for partial timer uid=" + partialTimerUids[i],
+                    expectedSystemTimeUs, u.getSystemCpuTimeUs(STATS_SINCE_CHARGED));
+            assertEquals("Unexpected entry in updated uids for partial timer uid="
+                            + partialTimerUids[i],
+                    expectedUserTimeUs + expectedSystemTimeUs,
+                    updatedUids.get(partialTimerUids[i]));
+            updatedUids.delete(partialTimerUids[i]);
+            totalUserTimeUs -= expectedUserTimeUs;
+            totalSystemTimeUs -= expectedSystemTimeUs;
+
+            final BatteryStats.Uid.Proc proc = u.getProcessStats().get("*wakelock*");
+            assertEquals("Unexpected user cpu time for *wakelock* in uid=" + partialTimerUids[i],
+                    expectedUserTimeUs / 1000, proc.getUserTime(STATS_SINCE_CHARGED));
+            assertEquals("Unexpected system cpu time for *wakelock* in uid=" + partialTimerUids[i],
+                    expectedSystemTimeUs / 1000, proc.getSystemTime(STATS_SINCE_CHARGED));
+        }
+        assertEquals(0, totalUserTimeUs);
+        assertEquals(0, totalSystemTimeUs);
+        assertEquals("Updated uids: " + updatedUids, 0, updatedUids.size());
+    }
+
+    @Test
+    public void testReadKernelUidCpuFreqTimesLocked() {
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+
+        final int testUserId = 11;
+        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
+        final int[] testUids = getUids(testUserId, new int[]{
+                FIRST_APPLICATION_UID + 22,
+                FIRST_APPLICATION_UID + 27,
+                FIRST_APPLICATION_UID + 33
+        });
+        final long[][] uidTimesMs = {
+                {4, 10, 5, 9, 4},
+                {5, 1, 12, 2, 10},
+                {8, 25, 3, 0, 42}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
+            }
+            return null;
+        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidFreqTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, false, null);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+
+            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
+                    uidTimesMs[i], u.getCpuFreqTimes(STATS_SINCE_CHARGED));
+            assertNull("Unexpected screen-off cpu times for uid=" + testUids[i],
+                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
+        }
+
+        // Repeat the test when the screen is off.
+
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        final long[][] deltasMs = {
+                {3, 12, 55, 100, 32},
+                {3248327490475L, 232349349845043L, 123, 2398, 0},
+                {43, 3345, 2143, 123, 4554}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], deltasMs[i]);
+            }
+            return null;
+        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidFreqTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, true, null);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+
+            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
+                    sum(uidTimesMs[i], deltasMs[i]), u.getCpuFreqTimes(STATS_SINCE_CHARGED));
+            assertArrayEquals("Unexpected screen-off cpu times for uid=" + testUids[i],
+                    deltasMs[i], u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
+        }
+    }
+
+    @Test
+    public void testReadKernelUidCpuFreqTimesLocked_perClusterTimesAvailable() {
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+
+        final int testUserId = 11;
+        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
+        final int[] testUids = getUids(testUserId, new int[]{
+                FIRST_APPLICATION_UID + 22,
+                FIRST_APPLICATION_UID + 27,
+                FIRST_APPLICATION_UID + 33
+        });
+        CpuScalingPolicies scalingPolicies = new CpuScalingPolicies(
+                new SparseArray<>() {{
+                    put(0, new int[]{0});
+                    put(1, new int[]{1});
+                }},
+                new SparseArray<>() {{
+                    put(0, new int[]{1, 12, 123});
+                    put(1, new int[]{12, 1234});
+                }});
+        mBatteryStatsImpl.setCpuScalingPolicies(scalingPolicies);
+        // Derived from freqs above, 2 clusters with {3, 2} freqs in each of them.
+        final int[] clusterFreqs = {3, 2};
+
+        final long[][] uidTimesMs = {
+                {4, 10, 5, 9, 4},
+                {5, 1, 12, 2, 10},
+                {8, 25, 3, 0, 42}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
+            }
+            return null;
+        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidFreqTimeReader.Callback.class));
+        when(mCpuUidFreqTimeReader.perClusterTimesAvailable()).thenReturn(true);
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, false, null);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+
+            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
+                    uidTimesMs[i], u.getCpuFreqTimes(STATS_SINCE_CHARGED));
+            assertNull("Unexpected screen-off cpu times for uid=" + testUids[i],
+                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
+
+            int idx = 0;
+            for (int cluster = 0; cluster < clusterFreqs.length; ++cluster) {
+                for (int speed = 0; speed < clusterFreqs[cluster]; ++speed) {
+                    assertEquals("Unexpected time at cluster=" + cluster + ", speed=" + speed,
+                            uidTimesMs[i][idx] * 1000,
+                            u.getTimeAtCpuSpeed(cluster, speed, STATS_SINCE_CHARGED));
+                    idx++;
+                }
+            }
+        }
+
+        // Repeat the test when the screen is off.
+
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        final long[][] deltasMs = {
+                {3, 12, 55, 100, 32},
+                {3248327490475L, 232349349845043L, 123, 2398, 0},
+                {43, 3345, 2143, 123, 4554}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], deltasMs[i]);
+            }
+            return null;
+        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidFreqTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, true, null);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+
+            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
+                    sum(uidTimesMs[i], deltasMs[i]), u.getCpuFreqTimes(STATS_SINCE_CHARGED));
+            assertArrayEquals("Unexpected screen-off cpu times for uid=" + testUids[i],
+                    deltasMs[i], u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
+
+            int idx = 0;
+            for (int cluster = 0; cluster < clusterFreqs.length; ++cluster) {
+                for (int speed = 0; speed < clusterFreqs[cluster]; ++speed) {
+                    assertEquals("Unexpected time at cluster=" + cluster + ", speed=" + speed,
+                            (uidTimesMs[i][idx] + deltasMs[i][idx]) * 1000,
+                            u.getTimeAtCpuSpeed(cluster, speed, STATS_SINCE_CHARGED));
+                    idx++;
+                }
+            }
+        }
+    }
+
+    @Test
+    public void testReadKernelUidCpuFreqTimesLocked_partialTimers() {
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+
+        final int testUserId = 11;
+        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
+        final int[] testUids = getUids(testUserId, new int[]{
+                FIRST_APPLICATION_UID + 22,
+                FIRST_APPLICATION_UID + 27,
+                FIRST_APPLICATION_UID + 33
+        });
+        final int[] partialTimerUids = {
+                UserHandle.getUid(testUserId, FIRST_APPLICATION_UID + 48),
+                UserHandle.getUid(testUserId, FIRST_APPLICATION_UID + 10)
+        };
+        final ArrayList<BatteryStatsImpl.StopwatchTimer> partialTimers
+                = getPartialTimers(partialTimerUids);
+
+        CpuScalingPolicies scalingPolicies = new CpuScalingPolicies(
+                new SparseArray<>() {{
+                    put(0, new int[]{0});
+                    put(1, new int[]{1});
+                }},
+                new SparseArray<>() {{
+                    put(0, new int[]{1, 12, 123});
+                    put(1, new int[]{12, 1234});
+                }});
+        mBatteryStatsImpl.setCpuScalingPolicies(scalingPolicies);
+
+        // Derived from freqs above, 2 clusters with {3, 2} freqs in each of them.
+        final int[] clusterFreqs = {3, 2};
+
+        final long[][] uidTimesMs = {
+                {4, 10, 5, 9, 4},
+                {5, 1, 12, 2, 10},
+                {8, 25, 3, 0, 42}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
+            }
+            return null;
+        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidFreqTimeReader.Callback.class));
+        when(mCpuUidFreqTimeReader.perClusterTimesAvailable()).thenReturn(true);
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(partialTimers, true, false, null);
+
+        // VERIFY
+        final long[][] expectedWakeLockUidTimesUs = new long[2][];
+        for (int cluster = 0; cluster < clusterFreqs.length; ++cluster) {
+            expectedWakeLockUidTimesUs[cluster] = new long[clusterFreqs[cluster]];
+        }
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+
+            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
+                    uidTimesMs[i], u.getCpuFreqTimes(STATS_SINCE_CHARGED));
+            assertNull("Unexpected screen-off cpu times for uid=" + testUids[i],
+                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
+
+            int idx = 0;
+            for (int cluster = 0; cluster < clusterFreqs.length; ++cluster) {
+                for (int speed = 0; speed < clusterFreqs[cluster]; ++speed) {
+                    final long expectedTimeUs =
+                            (uidTimesMs[i][idx] * 1000 * WAKE_LOCK_WEIGHT) / 100;
+                    expectedWakeLockUidTimesUs[cluster][speed] += expectedTimeUs;
+                    assertEquals("Unexpected time for uid= " + testUids[i]
+                                    + " at cluster=" + cluster + ", speed=" + speed,
+                            expectedTimeUs,
+                            u.getTimeAtCpuSpeed(cluster, speed, STATS_SINCE_CHARGED));
+                    idx++;
+                }
+            }
+        }
+        for (int i = 0; i < partialTimerUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(partialTimerUids[i]);
+            assertNotNull("No entry for partial timer uid=" + partialTimerUids[i], u);
+
+            assertNull("Unexpected cpu times for partial timer uid=" + partialTimerUids[i],
+                    u.getCpuFreqTimes(STATS_SINCE_CHARGED));
+            assertNull("Unexpected screen-off cpu times for partial timer uid="
+                            + partialTimerUids[i],
+                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
+
+            for (int cluster = 0; cluster < clusterFreqs.length; ++cluster) {
+                for (int speed = 0; speed < clusterFreqs[cluster]; ++speed) {
+                    final long expectedTimeUs = expectedWakeLockUidTimesUs[cluster][speed]
+                            / (partialTimerUids.length - i);
+                    assertEquals("Unexpected time for partial timer uid= " + partialTimerUids[i]
+                                    + " at cluster=" + cluster + ", speed=" + speed,
+                            expectedTimeUs,
+                            u.getTimeAtCpuSpeed(cluster, speed, STATS_SINCE_CHARGED));
+                    expectedWakeLockUidTimesUs[cluster][speed] -= expectedTimeUs;
+                }
+            }
+        }
+        for (int cluster = 0; cluster < clusterFreqs.length; ++cluster) {
+            for (int speed = 0; speed < clusterFreqs[cluster]; ++speed) {
+                assertEquals("There shouldn't be any left-overs: "
+                                + Arrays.deepToString(expectedWakeLockUidTimesUs),
+                        0, expectedWakeLockUidTimesUs[cluster][speed]);
+            }
+        }
+    }
+
+    @Test
+    public void testReadKernelUidCpuFreqTimesLocked_freqsChanged() {
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+
+        final int testUserId = 11;
+        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
+        final int[] testUids = getUids(testUserId, new int[]{
+                FIRST_APPLICATION_UID + 22,
+                FIRST_APPLICATION_UID + 27,
+                FIRST_APPLICATION_UID + 33
+        });
+        final long[][] uidTimesMs = {
+                {4, 10, 5, 9, 4},
+                {5, 1, 12, 2, 10},
+                {8, 25, 3, 0, 42}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
+            }
+            return null;
+        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidFreqTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, false, null);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+
+            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
+                    uidTimesMs[i], u.getCpuFreqTimes(STATS_SINCE_CHARGED));
+            assertNull("Unexpected screen-off cpu times for uid=" + testUids[i],
+                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
+        }
+
+        // Repeat the test with the freqs from proc file changed.
+
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        final long[][] deltasMs = {
+                {3, 12, 55, 100, 32, 34984, 27983},
+                {3248327490475L, 232349349845043L, 123, 2398, 0, 398, 0},
+                {43, 3345, 2143, 123, 4554, 9374983794839L, 979875}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], deltasMs[i]);
+            }
+            return null;
+        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidFreqTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, true, null);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+
+            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
+                    deltasMs[i], u.getCpuFreqTimes(STATS_SINCE_CHARGED));
+            assertArrayEquals("Unexpected screen-off cpu times for uid=" + testUids[i],
+                    deltasMs[i], u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
+        }
+    }
+
+    @Test
+    public void testReadKernelUidCpuFreqTimesLocked_isolatedUid() {
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+
+        final int testUserId = 11;
+        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
+        final int isolatedAppId = FIRST_ISOLATED_UID + 27;
+        final int isolatedUid = UserHandle.getUid(testUserId, isolatedAppId);
+        final int[] testUids = getUids(testUserId, new int[]{
+                FIRST_APPLICATION_UID + 22,
+                isolatedAppId,
+                FIRST_APPLICATION_UID + 33
+        });
+        final long[][] uidTimesMs = {
+                {4, 10, 5, 9, 4},
+                {5, 1, 12, 2, 10},
+                {8, 25, 3, 0, 42}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
+            }
+            return null;
+        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidFreqTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, false, null);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            if (UserHandle.isIsolated(testUids[i])) {
+                assertNull("There shouldn't be an entry for isolated uid=" + testUids[i], u);
+                continue;
+            }
+            assertNotNull("No entry for uid=" + testUids[i], u);
+
+            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
+                    uidTimesMs[i], u.getCpuFreqTimes(STATS_SINCE_CHARGED));
+            assertNull("Unexpected screen-off cpu times for uid=" + testUids[i],
+                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
+        }
+
+
+        // Add an isolated uid mapping and repeat the test.
+
+        // PRECONDITIONS
+        final int ownerUid = UserHandle.getUid(testUserId, FIRST_APPLICATION_UID + 42);
+        mBatteryStatsImpl.addIsolatedUidLocked(isolatedUid, ownerUid);
+        final long[][] deltasMs = {
+                {3, 12, 55, 100, 32},
+                {32483274, 232349349, 123, 2398, 0},
+                {43, 3345, 2143, 123, 4554}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], deltasMs[i]);
+            }
+            return null;
+        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidFreqTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, false, null);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            final long[] expectedTimes;
+            if (UserHandle.isIsolated(testUids[i])) {
+                assertNull("There shouldn't be an entry for isolated uid=" + testUids[i], u);
+                // Since we added a mapping, an entry should've been created for owner uid.
+                u = mBatteryStatsImpl.getUidStats().get(ownerUid);
+                expectedTimes = deltasMs[i];
+                assertNotNull("No entry for owner uid=" + ownerUid, u);
+            } else {
+                assertNotNull("No entry for uid=" + testUids[i], u);
+                expectedTimes = sum(uidTimesMs[i], deltasMs[i]);
+            }
+
+            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
+                    expectedTimes, u.getCpuFreqTimes(STATS_SINCE_CHARGED));
+            assertNull("Unexpected screen-off cpu times for uid=" + testUids[i],
+                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
+        }
+    }
+
+    @Test
+    public void testReadKernelUidCpuFreqTimesLocked_invalidUid() {
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+
+        final int testUserId = 11;
+        final int invalidUserId = 15;
+        final int invalidUid = UserHandle.getUid(invalidUserId, FIRST_APPLICATION_UID + 99);
+        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
+        when(mUserInfoProvider.exists(invalidUserId)).thenReturn(false);
+        final int[] testUids = getUids(testUserId, new int[]{
+                FIRST_APPLICATION_UID + 22,
+                FIRST_APPLICATION_UID + 27,
+                FIRST_APPLICATION_UID + 33
+        });
+        final long[][] uidTimesMs = {
+                {4, 10, 5, 9, 4},
+                {5, 1, 12, 2, 10},
+                {8, 25, 3, 0, 42}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
+            }
+            // And one for the invalid uid
+            callback.onUidCpuTime(invalidUid, new long[]{12, 839, 32, 34, 21});
+            return null;
+        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidFreqTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, false, null);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+
+            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
+                    uidTimesMs[i], u.getCpuFreqTimes(STATS_SINCE_CHARGED));
+            assertNull("Unexpected screen-off cpu times for uid=" + testUids[i],
+                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
+        }
+        assertNull("There shouldn't be an entry for invalid uid=" + invalidUid,
+                mBatteryStatsImpl.getUidStats().get(invalidUid));
+    }
+
+    @Test
+    public void testReadKernelUidCpuActiveTimesLocked() {
+        mClocks.realtime = 1000;
+
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+
+        final int testUserId = 11;
+        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
+        final int[] testUids = getUids(testUserId, new int[]{
+                FIRST_APPLICATION_UID + 22,
+                FIRST_APPLICATION_UID + 27,
+                FIRST_APPLICATION_UID + 33
+        });
+        final long[] initialTimesMs = {8000, 25000, 3000, 0, 42000};
+        doAnswer(invocation -> {
+            final KernelCpuUidActiveTimeReader.Callback<Long> callback =
+                    invocation.getArgument(0);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], initialTimesMs[i]);
+            }
+            return null;
+        }).when(mCpuUidActiveTimeReader).readAbsolute(
+                any(KernelCpuUidActiveTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuActiveTimesLocked(true);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+            assertEquals("Unexpected cpu active time for uid=" + testUids[i], 0,
+                    u.getCpuActiveTime());
+        }
+
+        // Some time passes
+        mClocks.realtime = 2000;
+
+        // PRECONDITIONS
+        final long[] cpuTimesAt2000 = {43000, 3345000, 2143000, 123000, 4554000};
+        doAnswer(invocation -> {
+            final KernelCpuUidActiveTimeReader.Callback<Long> callback =
+                    invocation.getArgument(0);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], cpuTimesAt2000[i]);
+            }
+            return null;
+        }).when(mCpuUidActiveTimeReader).readAbsolute(
+                any(KernelCpuUidActiveTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuActiveTimesLocked(true);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+            assertEquals("Unexpected cpu active time for uid=" + testUids[i],
+                    cpuTimesAt2000[i] - initialTimesMs[i], u.getCpuActiveTime());
+        }
+
+        // Give it another second
+        mClocks.realtime = 3000;
+
+        // Repeat the test when the screen is off.
+
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        final long[] cpuTimesAt3000 = {63000, 7345000, 8143000, 923000, 5554000};
+        doAnswer(invocation -> {
+            final KernelCpuUidActiveTimeReader.Callback<Long> callback =
+                    invocation.getArgument(0);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], cpuTimesAt3000[i]);
+            }
+            return null;
+        }).when(mCpuUidActiveTimeReader).readAbsolute(
+                any(KernelCpuUidActiveTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuActiveTimesLocked(true);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+            assertEquals("Unexpected cpu active time for uid=" + testUids[i],
+                    cpuTimesAt3000[i] - initialTimesMs[i], u.getCpuActiveTime());
+        }
+    }
+
+    @Test
+    public void testReadKernelUidCpuActiveTimesLocked_invalidUid() {
+        mClocks.realtime = 1000;
+
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+
+        final int testUserId = 11;
+        final int invalidUserId = 15;
+        final int invalidUid = UserHandle.getUid(invalidUserId, FIRST_APPLICATION_UID + 99);
+        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
+        when(mUserInfoProvider.exists(invalidUserId)).thenReturn(false);
+        final int[] testUids = getUids(testUserId, new int[]{
+                FIRST_APPLICATION_UID + 22,
+                FIRST_APPLICATION_UID + 27,
+                FIRST_APPLICATION_UID + 33
+        });
+        final long[] cpuTimesAt1000 = {8000, 25000, 3000, 0, 42000};
+        doAnswer(invocation -> {
+            final KernelCpuUidActiveTimeReader.Callback<Long> callback =
+                    invocation.getArgument(0);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], cpuTimesAt1000[i]);
+            }
+            // And one for the invalid uid
+            callback.onUidCpuTime(invalidUid, 1200L);
+            return null;
+        }).when(mCpuUidActiveTimeReader).readAbsolute(
+                any(KernelCpuUidActiveTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuActiveTimesLocked(true);
+
+        // Some time passes
+        mClocks.realtime = 2000;
+
+        // Run again to compute the delta
+        final long[] cpuTimesAt2000 = {18000, 225000, 33000, 40, 542000};
+        doAnswer(invocation -> {
+            final KernelCpuUidActiveTimeReader.Callback<Long> callback =
+                    invocation.getArgument(0);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], cpuTimesAt2000[i]);
+            }
+            // And one for the invalid uid
+            callback.onUidCpuTime(invalidUid, 1200L);
+            return null;
+        }).when(mCpuUidActiveTimeReader).readAbsolute(
+                any(KernelCpuUidActiveTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuActiveTimesLocked(true);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+            assertEquals("Unexpected cpu active time for uid=" + testUids[i],
+                    cpuTimesAt2000[i] - cpuTimesAt1000[i], u.getCpuActiveTime());
+        }
+        assertNull("There shouldn't be an entry for invalid uid=" + invalidUid,
+                mBatteryStatsImpl.getUidStats().get(invalidUid));
+    }
+
+    @Test
+    public void testReadKernelUidCpuClusterTimesLocked() {
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+
+        final int testUserId = 11;
+        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
+        final int[] testUids = getUids(testUserId, new int[]{
+                FIRST_APPLICATION_UID + 22,
+                FIRST_APPLICATION_UID + 27,
+                FIRST_APPLICATION_UID + 33
+        });
+        final long[][] uidTimesMs = {
+                {4000, 10000},
+                {5000, 1000},
+                {8000, 0}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidClusterTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
+            }
+            return null;
+        }).when(mCpuUidClusterTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidClusterTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuClusterTimesLocked(true, null);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+            assertArrayEquals("Unexpected cpu cluster time for uid=" + testUids[i], uidTimesMs[i],
+                    u.getCpuClusterTimes());
+        }
+
+        // Repeat the test when the screen is off.
+
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        final long[][] deltasMs = {
+                {3000, 12000},
+                {3248327490475L, 0},
+                {43000, 3345000}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidClusterTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], deltasMs[i]);
+            }
+            return null;
+        }).when(mCpuUidClusterTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidClusterTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuClusterTimesLocked(true, null);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+            assertArrayEquals("Unexpected cpu cluster time for uid=" + testUids[i],
+                    sum(uidTimesMs[i], deltasMs[i]),
+                    u.getCpuClusterTimes());
+        }
+    }
+
+    @Test
+    public void testReadKernelUidCpuClusterTimesLocked_invalidUid() {
+        // PRECONDITIONS
+        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+
+        final int testUserId = 11;
+        final int invalidUserId = 15;
+        final int invalidUid = UserHandle.getUid(invalidUserId, FIRST_APPLICATION_UID + 99);
+        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
+        when(mUserInfoProvider.exists(invalidUserId)).thenReturn(false);
+        final int[] testUids = getUids(testUserId, new int[]{
+                FIRST_APPLICATION_UID + 22,
+                FIRST_APPLICATION_UID + 27,
+                FIRST_APPLICATION_UID + 33
+        });
+        final long[][] uidTimesMs = {
+                {4000, 10000},
+                {5000, 1000},
+                {8000, 0}
+        };
+        doAnswer(invocation -> {
+            final KernelCpuUidClusterTimeReader.Callback<long[]> callback =
+                    invocation.getArgument(1);
+            for (int i = 0; i < testUids.length; ++i) {
+                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
+            }
+            // And one for the invalid uid
+            callback.onUidCpuTime(invalidUid, new long[]{400, 1000});
+            return null;
+        }).when(mCpuUidClusterTimeReader).readDelta(anyBoolean(),
+                any(KernelCpuUidClusterTimeReader.Callback.class));
+
+        // RUN
+        mBatteryStatsImpl.readKernelUidCpuClusterTimesLocked(true, null);
+
+        // VERIFY
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            assertNotNull("No entry for uid=" + testUids[i], u);
+            assertArrayEquals("Unexpected cpu cluster time for uid=" + testUids[i], uidTimesMs[i],
+                    u.getCpuClusterTimes());
+        }
+        assertNull("There shouldn't be an entry for invalid uid=" + invalidUid,
+                mBatteryStatsImpl.getUidStats().get(invalidUid));
+    }
+
+    @Test
+    public void testRemoveUidCpuTimes() {
+        mClocks.realtime = mClocks.uptime = 0;
+        mBatteryStatsImpl.getPendingRemovedUids().add(
+                mBatteryStatsImpl.new UidToRemove(1, mClocks.elapsedRealtime()));
+        mBatteryStatsImpl.getPendingRemovedUids().add(
+                mBatteryStatsImpl.new UidToRemove(5, 10, mClocks.elapsedRealtime()));
+        mBatteryStatsImpl.clearPendingRemovedUidsLocked();
+        assertEquals(2, mBatteryStatsImpl.getPendingRemovedUids().size());
+
+        mClocks.realtime = mClocks.uptime = 100_000;
+        mBatteryStatsImpl.clearPendingRemovedUidsLocked();
+        assertEquals(2, mBatteryStatsImpl.getPendingRemovedUids().size());
+
+        mClocks.realtime = mClocks.uptime = 200_000;
+        mBatteryStatsImpl.getPendingRemovedUids().add(
+                mBatteryStatsImpl.new UidToRemove(100, mClocks.elapsedRealtime()));
+        mBatteryStatsImpl.clearPendingRemovedUidsLocked();
+        assertEquals(3, mBatteryStatsImpl.getPendingRemovedUids().size());
+
+        mClocks.realtime = mClocks.uptime = 400_000;
+        mBatteryStatsImpl.clearPendingRemovedUidsLocked();
+        assertEquals(1, mBatteryStatsImpl.getPendingRemovedUids().size());
+        verify(mCpuUidActiveTimeReader).removeUid(1);
+        verify(mCpuUidActiveTimeReader).removeUidsInRange(5, 10);
+        verify(mCpuUidClusterTimeReader).removeUid(1);
+        verify(mCpuUidClusterTimeReader).removeUidsInRange(5, 10);
+        verify(mCpuUidFreqTimeReader).removeUid(1);
+        verify(mCpuUidFreqTimeReader).removeUidsInRange(5, 10);
+        verify(mCpuUidUserSysTimeReader).removeUid(1);
+        verify(mCpuUidUserSysTimeReader).removeUidsInRange(5, 10);
+
+        mClocks.realtime = mClocks.uptime = 800_000;
+        mBatteryStatsImpl.clearPendingRemovedUidsLocked();
+        assertEquals(0, mBatteryStatsImpl.getPendingRemovedUids().size());
+        verify(mCpuUidActiveTimeReader).removeUid(100);
+        verify(mCpuUidClusterTimeReader).removeUid(100);
+        verify(mCpuUidFreqTimeReader).removeUid(100);
+        verify(mCpuUidUserSysTimeReader).removeUid(100);
+
+        verifyNoMoreInteractions(mCpuUidActiveTimeReader, mCpuUidClusterTimeReader,
+                mCpuUidFreqTimeReader, mCpuUidUserSysTimeReader);
+    }
+
+    private void updateTimeBasesLocked(boolean unplugged, int screenState,
+            long upTime, long realTime) {
+        mBatteryStatsImpl.updateTimeBasesLocked(unplugged, screenState, upTime, realTime);
+    }
+
+    private void initKernelCpuSpeedReaders(int count) {
+        mKernelCpuSpeedReaders = new KernelCpuSpeedReader[count];
+        for (int i = 0; i < count; ++i) {
+            mKernelCpuSpeedReaders[i] = Mockito.mock(KernelCpuSpeedReader.class);
+        }
+        mBatteryStatsImpl.setKernelCpuSpeedReaders(mKernelCpuSpeedReaders);
+    }
+
+    private ArrayList<BatteryStatsImpl.StopwatchTimer> getPartialTimers(int... uids) {
+        final ArrayList<BatteryStatsImpl.StopwatchTimer> partialTimers = new ArrayList<>();
+        final BatteryStatsImpl.TimeBase timeBase = new BatteryStatsImpl.TimeBase();
+        for (int uid : uids) {
+            final BatteryStatsImpl.Uid u = mBatteryStatsImpl.getUidStatsLocked(uid);
+            final BatteryStatsImpl.StopwatchTimer timer = new BatteryStatsImpl.StopwatchTimer(
+                    mClocks, u, WAKE_TYPE_PARTIAL, null, timeBase);
+            partialTimers.add(timer);
+        }
+        return partialTimers;
+    }
+
+    private long[] sum(long[] a, long[] b) {
+        assertEquals("Arrays a: " + Arrays.toString(a) + ", b: " + Arrays.toString(b),
+                a.length, b.length);
+        final long[] result = new long[a.length];
+        for (int i = 0; i < a.length; ++i) {
+            result[i] = a[i] + b[i];
+        }
+        return result;
+    }
+
+    private int[] getUids(int userId, int[] appIds) {
+        final int[] uids = new int[appIds.length];
+        for (int i = appIds.length - 1; i >= 0; --i) {
+            uids[i] = UserHandle.getUid(userId, appIds[i]);
+        }
+        return uids;
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsDualTimerTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsDualTimerTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsDualTimerTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsDualTimerTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsDurationTimerTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsDurationTimerTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsDurationTimerTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsDurationTimerTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsHistoryIteratorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsHistoryIteratorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsHistoryIteratorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsHistoryIteratorTest.java
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsHistoryTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsHistoryTest.java
new file mode 100644
index 0000000..48ba765
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsHistoryTest.java
@@ -0,0 +1,560 @@
+/*
+ * 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.server.power.stats;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.BatteryManager;
+import android.os.BatteryStats;
+import android.os.BatteryStats.CpuUsageDetails;
+import android.os.BatteryStats.EnergyConsumerDetails;
+import android.os.BatteryStats.HistoryItem;
+import android.os.Parcel;
+import android.telephony.NetworkRegistrationInfo;
+import android.util.Log;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.internal.os.BatteryStatsHistory;
+import com.android.internal.os.BatteryStatsHistoryIterator;
+import com.android.internal.os.Clock;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InOrder;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Test BatteryStatsHistory.
+ */
+@RunWith(AndroidJUnit4.class)
+public class BatteryStatsHistoryTest {
+    private static final String TAG = "BatteryStatsHistoryTest";
+    private final Parcel mHistoryBuffer = Parcel.obtain();
+    private File mSystemDir;
+    private File mHistoryDir;
+    private final Clock mClock = new MockClock();
+    private BatteryStatsHistory mHistory;
+    private BatteryStats.HistoryPrinter mHistoryPrinter;
+    @Mock
+    private BatteryStatsHistory.TraceDelegate mTracer;
+    @Mock
+    private BatteryStatsHistory.HistoryStepDetailsCalculator mStepDetailsCalculator;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        Context context = InstrumentationRegistry.getContext();
+        mSystemDir = context.getDataDir();
+        mHistoryDir = new File(mSystemDir, "battery-history");
+        String[] files = mHistoryDir.list();
+        if (files != null) {
+            for (int i = 0; i < files.length; i++) {
+                new File(mHistoryDir, files[i]).delete();
+            }
+        }
+        mHistoryDir.delete();
+        mHistory = new BatteryStatsHistory(mHistoryBuffer, mSystemDir, 32, 1024,
+                mStepDetailsCalculator, mClock, mTracer);
+
+        when(mStepDetailsCalculator.getHistoryStepDetails())
+                .thenReturn(new BatteryStats.HistoryStepDetails());
+
+
+        mHistoryPrinter = new BatteryStats.HistoryPrinter();
+    }
+
+    @Test
+    public void testAtraceBinaryState1() {
+        InOrder inOrder = Mockito.inOrder(mTracer);
+        Mockito.when(mTracer.tracingEnabled()).thenReturn(true);
+
+        mHistory.recordStateStartEvent(mClock.elapsedRealtime(),
+                mClock.uptimeMillis(), HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG);
+        mHistory.recordStateStopEvent(mClock.elapsedRealtime(),
+                mClock.uptimeMillis(), HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG);
+        mHistory.recordStateStartEvent(mClock.elapsedRealtime(),
+                mClock.uptimeMillis(), HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG);
+
+        inOrder.verify(mTracer).traceCounter("battery_stats.mobile_radio", 1);
+        inOrder.verify(mTracer).traceCounter("battery_stats.mobile_radio", 0);
+        inOrder.verify(mTracer).traceCounter("battery_stats.mobile_radio", 1);
+    }
+
+    @Test
+    public void testAtraceBinaryState2() {
+        InOrder inOrder = Mockito.inOrder(mTracer);
+        Mockito.when(mTracer.tracingEnabled()).thenReturn(true);
+
+        mHistory.recordState2StartEvent(mClock.elapsedRealtime(),
+                mClock.uptimeMillis(), HistoryItem.STATE2_WIFI_ON_FLAG);
+        mHistory.recordState2StopEvent(mClock.elapsedRealtime(),
+                mClock.uptimeMillis(), HistoryItem.STATE2_WIFI_ON_FLAG);
+        mHistory.recordState2StartEvent(mClock.elapsedRealtime(),
+                mClock.uptimeMillis(), HistoryItem.STATE2_WIFI_ON_FLAG);
+
+        inOrder.verify(mTracer).traceCounter("battery_stats.wifi", 1);
+        inOrder.verify(mTracer).traceCounter("battery_stats.wifi", 0);
+        inOrder.verify(mTracer).traceCounter("battery_stats.wifi", 1);
+    }
+
+    @Test
+    public void testAtraceExcludedState() {
+        mHistory.forceRecordAllHistory();
+
+        Mockito.when(mTracer.tracingEnabled()).thenReturn(true);
+
+        mHistory.recordStateStartEvent(mClock.elapsedRealtime(),
+                mClock.uptimeMillis(), HistoryItem.STATE_WAKE_LOCK_FLAG);
+
+        Mockito.verify(mTracer, Mockito.never()).traceCounter(
+                Mockito.anyString(), Mockito.anyInt());
+    }
+
+    @Test
+    public void testAtraceNumericalState() {
+        InOrder inOrder = Mockito.inOrder(mTracer);
+        Mockito.when(mTracer.tracingEnabled()).thenReturn(true);
+
+        mHistory.recordDataConnectionTypeChangeEvent(mClock.elapsedRealtime(),
+                mClock.uptimeMillis(), 1);
+        mHistory.recordDataConnectionTypeChangeEvent(mClock.elapsedRealtime(),
+                mClock.uptimeMillis(), 2);
+        mHistory.recordDataConnectionTypeChangeEvent(mClock.elapsedRealtime(),
+                mClock.uptimeMillis(), 3);
+
+        inOrder.verify(mTracer).traceCounter("battery_stats.data_conn", 1);
+        inOrder.verify(mTracer).traceCounter("battery_stats.data_conn", 2);
+        inOrder.verify(mTracer).traceCounter("battery_stats.data_conn", 3);
+    }
+
+    @Test
+    public void testAtraceInstantEvent() {
+        InOrder inOrder = Mockito.inOrder(mTracer);
+        Mockito.when(mTracer.tracingEnabled()).thenReturn(true);
+
+        mHistory.recordEvent(mClock.elapsedRealtime(), mClock.uptimeMillis(),
+                HistoryItem.EVENT_WAKEUP_AP, "", 1234);
+        mHistory.recordEvent(mClock.elapsedRealtime(), mClock.uptimeMillis(),
+                HistoryItem.EVENT_JOB_START, "jobname", 2468);
+        mHistory.recordEvent(mClock.elapsedRealtime(), mClock.uptimeMillis(),
+                HistoryItem.EVENT_JOB_FINISH, "jobname", 2468);
+
+        inOrder.verify(mTracer).traceInstantEvent("battery_stats.wakeupap", "wakeupap=1234:\"\"");
+        inOrder.verify(mTracer).traceInstantEvent("battery_stats.job", "+job=2468:\"jobname\"");
+        inOrder.verify(mTracer).traceInstantEvent("battery_stats.job", "-job=2468:\"jobname\"");
+    }
+
+    @Test
+    public void testConstruct() {
+        createActiveFile(mHistory);
+        verifyFileNumbers(mHistory, Arrays.asList(0));
+        verifyActiveFile(mHistory, "0.bin");
+    }
+
+    @Test
+    public void testStartNextFile() {
+        List<Integer> fileList = new ArrayList<>();
+        fileList.add(0);
+        createActiveFile(mHistory);
+
+        // create file 1 to 31.
+        for (int i = 1; i < 32; i++) {
+            fileList.add(i);
+            mHistory.startNextFile();
+            createActiveFile(mHistory);
+            verifyFileNumbers(mHistory, fileList);
+            verifyActiveFile(mHistory, i + ".bin");
+        }
+
+        // create file 32
+        mHistory.startNextFile();
+        createActiveFile(mHistory);
+        fileList.add(32);
+        fileList.remove(0);
+        // verify file 0 is deleted.
+        verifyFileDeleted("0.bin");
+        verifyFileNumbers(mHistory, fileList);
+        verifyActiveFile(mHistory, "32.bin");
+
+        // create file 33
+        mHistory.startNextFile();
+        createActiveFile(mHistory);
+        // verify file 1 is deleted
+        fileList.add(33);
+        fileList.remove(0);
+        verifyFileDeleted("1.bin");
+        verifyFileNumbers(mHistory, fileList);
+        verifyActiveFile(mHistory, "33.bin");
+
+        assertEquals(0, mHistory.getHistoryUsedSize());
+
+        // create a new BatteryStatsHistory object, it will pick up existing history files.
+        BatteryStatsHistory history2 = new BatteryStatsHistory(mHistoryBuffer, mSystemDir, 32, 1024,
+                null, mClock, mTracer);
+        // verify constructor can pick up all files from file system.
+        verifyFileNumbers(history2, fileList);
+        verifyActiveFile(history2, "33.bin");
+
+        history2.reset();
+        createActiveFile(history2);
+        // verify all existing files are deleted.
+        for (int i = 2; i < 33; ++i) {
+            verifyFileDeleted(i + ".bin");
+        }
+
+        // verify file 0 is created
+        verifyFileNumbers(history2, Arrays.asList(0));
+        verifyActiveFile(history2, "0.bin");
+
+        // create file 1.
+        history2.startNextFile();
+        createActiveFile(history2);
+        verifyFileNumbers(history2, Arrays.asList(0, 1));
+        verifyActiveFile(history2, "1.bin");
+    }
+
+    private void verifyActiveFile(BatteryStatsHistory history, String file) {
+        final File expectedFile = new File(mHistoryDir, file);
+        assertEquals(expectedFile.getPath(), history.getActiveFile().getBaseFile().getPath());
+        assertTrue(expectedFile.exists());
+    }
+
+    private void verifyFileNumbers(BatteryStatsHistory history, List<Integer> fileList) {
+        assertEquals(fileList.size(), history.getFilesNumbers().size());
+        for (int i = 0; i < fileList.size(); i++) {
+            assertEquals(fileList.get(i), history.getFilesNumbers().get(i));
+            final File expectedFile =
+                    new File(mHistoryDir, fileList.get(i) + ".bin");
+            assertTrue(expectedFile.exists());
+        }
+    }
+
+    private void verifyFileDeleted(String file) {
+        assertFalse(new File(mHistoryDir, file).exists());
+    }
+
+    private void createActiveFile(BatteryStatsHistory history) {
+        final File file = history.getActiveFile().getBaseFile();
+        try {
+            file.createNewFile();
+        } catch (IOException e) {
+            Log.e(TAG, "Error creating history file " + file.getPath(), e);
+        }
+    }
+
+    @Test
+    public void testRecordMeasuredEnergyDetails() {
+        mHistory.forceRecordAllHistory();
+        mHistory.startRecordingHistory(0, 0, /* reset */ true);
+        mHistory.setBatteryState(true /* charging */, BatteryManager.BATTERY_STATUS_CHARGING, 80,
+                1234);
+
+        EnergyConsumerDetails details = new EnergyConsumerDetails();
+        EnergyConsumerDetails.EnergyConsumer consumer1 =
+                new EnergyConsumerDetails.EnergyConsumer();
+        consumer1.type = 42;
+        consumer1.ordinal = 0;
+        consumer1.name = "A";
+
+        EnergyConsumerDetails.EnergyConsumer consumer2 =
+                new EnergyConsumerDetails.EnergyConsumer();
+        consumer2.type = 777;
+        consumer2.ordinal = 0;
+        consumer2.name = "B/0";
+
+        EnergyConsumerDetails.EnergyConsumer consumer3 =
+                new EnergyConsumerDetails.EnergyConsumer();
+        consumer3.type = 777;
+        consumer3.ordinal = 1;
+        consumer3.name = "B/1";
+
+        EnergyConsumerDetails.EnergyConsumer consumer4 =
+                new EnergyConsumerDetails.EnergyConsumer();
+        consumer4.type = 314;
+        consumer4.ordinal = 1;
+        consumer4.name = "C";
+
+        details.consumers =
+                new EnergyConsumerDetails.EnergyConsumer[]{consumer1, consumer2, consumer3,
+                        consumer4};
+        details.chargeUC = new long[details.consumers.length];
+        for (int i = 0; i < details.chargeUC.length; i++) {
+            details.chargeUC[i] = 100L * i;
+        }
+        details.chargeUC[3] = BatteryStats.POWER_DATA_UNAVAILABLE;
+
+        mHistory.recordEnergyConsumerDetails(200, 200, details);
+
+        BatteryStatsHistoryIterator iterator = mHistory.iterate();
+        BatteryStats.HistoryItem item;
+        assertThat(item = iterator.next()).isNotNull(); // First item contains current time only
+
+        assertThat(item = iterator.next()).isNotNull();
+
+        String dump = toString(item, /* checkin */ false);
+        assertThat(dump).contains("+200ms");
+        assertThat(dump).contains("ext=energy:A=0 B/0=100 B/1=200");
+        assertThat(dump).doesNotContain("C=");
+
+        String checkin = toString(item, /* checkin */ true);
+        assertThat(checkin).contains("XE");
+        assertThat(checkin).contains("A=0,B/0=100,B/1=200");
+        assertThat(checkin).doesNotContain("C=");
+    }
+
+    @Test
+    public void cpuUsageDetails() {
+        mHistory.forceRecordAllHistory();
+        mHistory.startRecordingHistory(0, 0, /* reset */ true);
+        mHistory.setBatteryState(true /* charging */, BatteryManager.BATTERY_STATUS_CHARGING, 80,
+                1234);
+
+        CpuUsageDetails details = new CpuUsageDetails();
+        details.cpuBracketDescriptions = new String[] {"low", "Med", "HIGH"};
+        details.uid = 10123;
+        details.cpuUsageMs = new long[] { 100, 200, 300};
+        mHistory.recordCpuUsage(200, 200, details);
+
+        details.uid = 10321;
+        details.cpuUsageMs = new long[] { 400, 500, 600};
+        mHistory.recordCpuUsage(300, 300, details);
+
+        BatteryStatsHistoryIterator iterator = mHistory.iterate();
+        BatteryStats.HistoryItem item = new BatteryStats.HistoryItem();
+        assertThat(item = iterator.next()).isNotNull(); // First item contains current time only
+
+        assertThat(item = iterator.next()).isNotNull();
+
+        String dump = toString(item, /* checkin */ false);
+        assertThat(dump).contains("+200ms");
+        assertThat(dump).contains("ext=cpu:u0a123: 100, 200, 300");
+        assertThat(dump).contains("ext=cpu-bracket:0:low");
+        assertThat(dump).contains("ext=cpu-bracket:1:Med");
+        assertThat(dump).contains("ext=cpu-bracket:2:HIGH");
+
+        String checkin = toString(item, /* checkin */ true);
+        assertThat(checkin).contains("XB,3,0,low");
+        assertThat(checkin).contains("XB,3,1,Med");
+        assertThat(checkin).contains("XB,3,2,HIGH");
+        assertThat(checkin).contains("XC,10123,100,200,300");
+
+        assertThat(item = iterator.next()).isNotNull();
+
+        dump = toString(item, /* checkin */ false);
+        assertThat(dump).contains("+300ms");
+        assertThat(dump).contains("ext=cpu:u0a321: 400, 500, 600");
+        // Power bracket descriptions are written only once
+        assertThat(dump).doesNotContain("ext=cpu-bracket");
+
+        checkin = toString(item, /* checkin */ true);
+        assertThat(checkin).doesNotContain("XB");
+        assertThat(checkin).contains("XC,10321,400,500,600");
+    }
+
+    @Test
+    public void testNrState_dump() {
+        mHistory.forceRecordAllHistory();
+        mHistory.startRecordingHistory(0, 0, /* reset */ true);
+        mHistory.setBatteryState(true /* charging */, BatteryManager.BATTERY_STATUS_CHARGING, 80,
+                1234);
+
+        mHistory.recordNrStateChangeEvent(200, 200,
+                NetworkRegistrationInfo.NR_STATE_RESTRICTED);
+        mHistory.recordNrStateChangeEvent(300, 300,
+                NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED);
+        mHistory.recordNrStateChangeEvent(400, 400,
+                NetworkRegistrationInfo.NR_STATE_CONNECTED);
+        mHistory.recordNrStateChangeEvent(500, 500,
+                NetworkRegistrationInfo.NR_STATE_NONE);
+
+        BatteryStatsHistoryIterator iterator = mHistory.iterate();
+        BatteryStats.HistoryItem item = new BatteryStats.HistoryItem();
+        assertThat(item = iterator.next()).isNotNull(); // First item contains current time only
+
+        assertThat(item = iterator.next()).isNotNull();
+        String dump = toString(item, /* checkin */ false);
+        assertThat(dump).contains("+200ms");
+        assertThat(dump).contains("nr_state=restricted");
+
+        assertThat(item = iterator.next()).isNotNull();
+        dump = toString(item, /* checkin */ false);
+        assertThat(dump).contains("+300ms");
+        assertThat(dump).contains("nr_state=not_restricted");
+
+        assertThat(item = iterator.next()).isNotNull();
+        dump = toString(item, /* checkin */ false);
+        assertThat(dump).contains("+400ms");
+        assertThat(dump).contains("nr_state=connected");
+
+        assertThat(item = iterator.next()).isNotNull();
+        dump = toString(item, /* checkin */ false);
+        assertThat(dump).contains("+500ms");
+        assertThat(dump).contains("nr_state=none");
+    }
+
+    @Test
+    public void testNrState_checkin() {
+        mHistory.forceRecordAllHistory();
+        mHistory.startRecordingHistory(0, 0, /* reset */ true);
+        mHistory.setBatteryState(true /* charging */, BatteryManager.BATTERY_STATUS_CHARGING, 80,
+                1234);
+
+        mHistory.recordNrStateChangeEvent(200, 200,
+                NetworkRegistrationInfo.NR_STATE_RESTRICTED);
+        mHistory.recordNrStateChangeEvent(300, 300,
+                NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED);
+        mHistory.recordNrStateChangeEvent(400, 400,
+                NetworkRegistrationInfo.NR_STATE_CONNECTED);
+        mHistory.recordNrStateChangeEvent(500, 500,
+                NetworkRegistrationInfo.NR_STATE_NONE);
+
+        BatteryStatsHistoryIterator iterator = mHistory.iterate();
+        BatteryStats.HistoryItem item = new BatteryStats.HistoryItem();
+        assertThat(item = iterator.next()).isNotNull(); // First item contains current time only
+
+        assertThat(item = iterator.next()).isNotNull();
+        String dump = toString(item, /* checkin */ true);
+        assertThat(dump).contains("nrs=1");
+
+        assertThat(item = iterator.next()).isNotNull();
+        dump = toString(item, /* checkin */ true);
+        assertThat(dump).contains("nrs=2");
+
+        assertThat(item = iterator.next()).isNotNull();
+        dump = toString(item, /* checkin */ true);
+        assertThat(dump).contains("nrs=3");
+
+        assertThat(item = iterator.next()).isNotNull();
+        dump = toString(item, /* checkin */ true);
+        assertThat(dump).contains("nrs=0");
+    }
+
+    @Test
+    public void testNrState_aTrace() {
+        InOrder inOrder = Mockito.inOrder(mTracer);
+        Mockito.when(mTracer.tracingEnabled()).thenReturn(true);
+
+        mHistory.recordNrStateChangeEvent(mClock.elapsedRealtime(), mClock.uptimeMillis(),
+                NetworkRegistrationInfo.NR_STATE_RESTRICTED);
+        mHistory.recordNrStateChangeEvent(mClock.elapsedRealtime(), mClock.uptimeMillis(),
+                NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED);
+        mHistory.recordNrStateChangeEvent(mClock.elapsedRealtime(), mClock.uptimeMillis(),
+                NetworkRegistrationInfo.NR_STATE_CONNECTED);
+        mHistory.recordNrStateChangeEvent(mClock.elapsedRealtime(), mClock.uptimeMillis(),
+                NetworkRegistrationInfo.NR_STATE_NONE);
+
+        inOrder.verify(mTracer).traceCounter("battery_stats.nr_state",
+                NetworkRegistrationInfo.NR_STATE_RESTRICTED);
+        inOrder.verify(mTracer).traceCounter("battery_stats.nr_state",
+                NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED);
+        inOrder.verify(mTracer).traceCounter("battery_stats.nr_state",
+                NetworkRegistrationInfo.NR_STATE_CONNECTED);
+        inOrder.verify(mTracer).traceCounter("battery_stats.nr_state",
+                NetworkRegistrationInfo.NR_STATE_NONE);
+    }
+
+    private String toString(BatteryStats.HistoryItem item, boolean checkin) {
+        StringWriter writer = new StringWriter();
+        PrintWriter pw = new PrintWriter(writer);
+        mHistoryPrinter.printNextItem(pw, item, 0, checkin, /* verbose */ true);
+        pw.flush();
+        return writer.toString();
+    }
+
+    @Test
+    public void testVarintParceler() {
+        long[] values = {
+                0,
+                1,
+                42,
+                0x1234,
+                0x10000000,
+                0x12345678,
+                0x7fffffff,
+                0xffffffffL,
+                0x100000000000L,
+                0x123456789012L,
+                0x1000000000000000L,
+                0x1234567890123456L,
+                0x7fffffffffffffffL,
+                0xffffffffffffffffL};
+
+        // Parcel subarrays of different lengths and assert the size of the resulting parcel
+        testVarintParceler(Arrays.copyOfRange(values, 0, 1), 4);   // v. 8
+        testVarintParceler(Arrays.copyOfRange(values, 0, 2), 4);   // v. 16
+        testVarintParceler(Arrays.copyOfRange(values, 0, 3), 4);   // v. 24
+        testVarintParceler(Arrays.copyOfRange(values, 0, 4), 8);   // v. 32
+        testVarintParceler(Arrays.copyOfRange(values, 0, 5), 12);  // v. 40
+        testVarintParceler(Arrays.copyOfRange(values, 0, 6), 16);  // v. 48
+        testVarintParceler(Arrays.copyOfRange(values, 0, 7), 20);  // v. 56
+        testVarintParceler(Arrays.copyOfRange(values, 0, 8), 28);  // v. 64
+        testVarintParceler(Arrays.copyOfRange(values, 0, 9), 32);  // v. 72
+        testVarintParceler(Arrays.copyOfRange(values, 0, 10), 40); // v. 80
+        testVarintParceler(Arrays.copyOfRange(values, 0, 11), 48); // v. 88
+        testVarintParceler(Arrays.copyOfRange(values, 0, 12), 60); // v. 96
+        testVarintParceler(Arrays.copyOfRange(values, 0, 13), 68); // v. 104
+        testVarintParceler(Arrays.copyOfRange(values, 0, 14), 76); // v. 112
+    }
+
+    private void testVarintParceler(long[] values, int expectedLength) {
+        BatteryStatsHistory.VarintParceler parceler = new BatteryStatsHistory.VarintParceler();
+        Parcel parcel = Parcel.obtain();
+        parcel.writeString("begin");
+        int pos = parcel.dataPosition();
+        parceler.writeLongArray(parcel, values);
+        int length = parcel.dataPosition() - pos;
+        parcel.writeString("end");
+
+        byte[] bytes = parcel.marshall();
+        parcel.recycle();
+
+        parcel = Parcel.obtain();
+        parcel.unmarshall(bytes, 0, bytes.length);
+        parcel.setDataPosition(0);
+
+        assertThat(parcel.readString()).isEqualTo("begin");
+
+        long[] result = new long[values.length];
+        parceler.readLongArray(parcel, result);
+
+        assertThat(result).isEqualTo(values);
+        assertThat(length).isEqualTo(expectedLength);
+
+        assertThat(parcel.readString()).isEqualTo("end");
+
+        parcel.recycle();
+    }
+}
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsImplTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsImplTest.java
new file mode 100644
index 0000000..5ebc6ca
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsImplTest.java
@@ -0,0 +1,757 @@
+/*
+ * 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.server.power.stats;
+
+import static android.os.BatteryStats.Uid.NUM_PROCESS_STATE;
+import static android.os.BatteryStats.Uid.PROCESS_STATE_BACKGROUND;
+import static android.os.BatteryStats.Uid.PROCESS_STATE_CACHED;
+import static android.os.BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE;
+import static android.os.BatteryStats.Uid.PROCESS_STATE_TOP;
+
+import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.when;
+
+import android.app.ActivityManager;
+import android.bluetooth.BluetoothActivityEnergyInfo;
+import android.bluetooth.UidTraffic;
+import android.os.BatteryStats;
+import android.os.BluetoothBatteryStats;
+import android.os.Parcel;
+import android.os.WakeLockStats;
+import android.os.WorkSource;
+import android.util.SparseArray;
+import android.view.Display;
+
+import androidx.test.filters.LargeTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.internal.os.CpuScalingPolicies;
+import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader;
+import com.android.internal.os.KernelSingleUidTimeReader;
+import com.android.internal.os.LongArrayMultiStateCounter;
+import com.android.internal.os.PowerProfile;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.truth.LongSubject;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.List;
+
+@LargeTest
+@RunWith(AndroidJUnit4.class)
+@SuppressWarnings("GuardedBy")
+public class BatteryStatsImplTest {
+    @Mock
+    private KernelCpuUidFreqTimeReader mKernelUidCpuFreqTimeReader;
+    @Mock
+    private KernelSingleUidTimeReader mKernelSingleUidTimeReader;
+    @Mock
+    private PowerProfile mPowerProfile;
+    @Mock
+    private KernelWakelockReader mKernelWakelockReader;
+    private KernelWakelockStats mKernelWakelockStats = new KernelWakelockStats();
+
+    private static final int NUM_CPU_FREQS = 5;
+
+    private final CpuScalingPolicies mCpuScalingPolicies = new CpuScalingPolicies(
+            new SparseArray<>() {{
+                put(0, new int[1]);
+            }},
+            new SparseArray<>() {{
+                put(0, new int[NUM_CPU_FREQS]);
+            }});
+
+    private final MockClock mMockClock = new MockClock();
+    private MockBatteryStatsImpl mBatteryStatsImpl;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        when(mKernelUidCpuFreqTimeReader.isFastCpuTimesReader()).thenReturn(true);
+        when(mKernelUidCpuFreqTimeReader.allUidTimesAvailable()).thenReturn(true);
+        when(mKernelSingleUidTimeReader.singleUidCpuTimesAvailable()).thenReturn(true);
+        when(mKernelWakelockReader.readKernelWakelockStats(
+                any(KernelWakelockStats.class))).thenReturn(mKernelWakelockStats);
+        mBatteryStatsImpl = new MockBatteryStatsImpl(mMockClock)
+                .setPowerProfile(mPowerProfile)
+                .setCpuScalingPolicies(mCpuScalingPolicies)
+                .setKernelCpuUidFreqTimeReader(mKernelUidCpuFreqTimeReader)
+                .setKernelSingleUidTimeReader(mKernelSingleUidTimeReader)
+                .setKernelWakelockReader(mKernelWakelockReader);
+    }
+
+    @Test
+    public void testUpdateProcStateCpuTimes() {
+        mBatteryStatsImpl.setOnBatteryInternal(true);
+        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+
+        final int[] testUids = {10032, 10048, 10145, 10139};
+        final int[] activityManagerProcStates = {
+                ActivityManager.PROCESS_STATE_RECEIVER,
+                ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE,
+                ActivityManager.PROCESS_STATE_TOP,
+                ActivityManager.PROCESS_STATE_CACHED_EMPTY
+        };
+        final int[] testProcStates = {
+                PROCESS_STATE_BACKGROUND,
+                PROCESS_STATE_FOREGROUND_SERVICE,
+                PROCESS_STATE_TOP,
+                PROCESS_STATE_CACHED
+        };
+
+        // Initialize time-in-freq counters
+        mMockClock.realtime = 1000;
+        mMockClock.uptime = 1000;
+        for (int i = 0; i < testUids.length; ++i) {
+            mockKernelSingleUidTimeReader(testUids[i], new long[5]);
+            mBatteryStatsImpl.noteUidProcessStateLocked(testUids[i], activityManagerProcStates[i]);
+        }
+
+        final long[] timeInFreqs = new long[NUM_CPU_FREQS];
+
+        // Verify there are no cpu times initially.
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUids[i]);
+            for (int procState = 0; procState < NUM_PROCESS_STATE; ++procState) {
+                assertFalse(u.getCpuFreqTimes(timeInFreqs, procState));
+                assertFalse(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
+            }
+        }
+
+        // Obtain initial CPU time-in-freq counts
+        final long[][] cpuTimes = {
+                {349734983, 394982394832L, 909834, 348934, 9838},
+                {7498, 1239890, 988, 13298, 98980},
+                {989834, 384098, 98483, 23809, 4984},
+                {4859048, 348903, 4578967, 5973894, 298549}
+        };
+
+        mMockClock.realtime += 1000;
+        mMockClock.uptime += 1000;
+
+        for (int i = 0; i < testUids.length; ++i) {
+            mockKernelSingleUidTimeReader(testUids[i], cpuTimes[i]);
+            mBatteryStatsImpl.updateProcStateCpuTimesLocked(testUids[i],
+                    mMockClock.realtime, mMockClock.uptime);
+        }
+
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            for (int procState = 0; procState < NUM_PROCESS_STATE; ++procState) {
+                final boolean hasTimeInFreq = u.getCpuFreqTimes(timeInFreqs, procState);
+                if (procState == testProcStates[i]) {
+                    assertArrayEquals("Uid=" + testUids[i], cpuTimes[i], timeInFreqs);
+                } else {
+                    assertFalse(hasTimeInFreq);
+                }
+                assertFalse(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
+            }
+        }
+
+        // Accumulate CPU time-in-freq deltas
+        final long[][] delta1 = {
+                {9589, 148934, 309894, 3098493, 98754},
+                {21983, 94983, 4983, 9878493, 84854},
+                {945894, 9089432, 19478, 3834, 7845},
+                {843895, 43948, 949582, 99, 384}
+        };
+
+        mMockClock.realtime += 1000;
+        mMockClock.uptime += 1000;
+
+        for (int i = 0; i < testUids.length; ++i) {
+            long[] newCpuTimes = new long[cpuTimes[i].length];
+            for (int j = 0; j < cpuTimes[i].length; j++) {
+                newCpuTimes[j] = cpuTimes[i][j] + delta1[i][j];
+            }
+            mockKernelSingleUidTimeReader(testUids[i], newCpuTimes);
+            mBatteryStatsImpl.updateProcStateCpuTimesLocked(testUids[i],
+                    mMockClock.realtime, mMockClock.uptime);
+        }
+
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            for (int procState = 0; procState < NUM_PROCESS_STATE; ++procState) {
+                if (procState == testProcStates[i]) {
+                    long[] expectedCpuTimes = cpuTimes[i].clone();
+                    for (int j = 0; j < expectedCpuTimes.length; ++j) {
+                        expectedCpuTimes[j] += delta1[i][j];
+                    }
+                    assertTrue(u.getCpuFreqTimes(timeInFreqs, procState));
+                    assertArrayEquals("Uid=" + testUids[i], expectedCpuTimes, timeInFreqs);
+                } else {
+                    assertFalse(u.getCpuFreqTimes(timeInFreqs, procState));
+                }
+                assertFalse(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
+            }
+        }
+
+        // Validate the on-battery-screen-off counter
+        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, mMockClock.uptime * 1000,
+                mMockClock.realtime * 1000);
+
+        final long[][] delta2 = {
+                {95932, 2943, 49834, 89034, 139},
+                {349, 89605, 5896, 845, 98444},
+                {678, 7498, 9843, 889, 4894},
+                {488, 998, 8498, 394, 574}
+        };
+
+        mMockClock.realtime += 1000;
+        mMockClock.uptime += 1000;
+
+        for (int i = 0; i < testUids.length; ++i) {
+            long[] newCpuTimes = new long[cpuTimes[i].length];
+            for (int j = 0; j < cpuTimes[i].length; j++) {
+                newCpuTimes[j] = cpuTimes[i][j] + delta1[i][j] + delta2[i][j];
+            }
+            mockKernelSingleUidTimeReader(testUids[i], newCpuTimes);
+            mBatteryStatsImpl.updateProcStateCpuTimesLocked(testUids[i],
+                    mMockClock.realtime, mMockClock.uptime);
+        }
+
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            for (int procState = 0; procState < NUM_PROCESS_STATE; ++procState) {
+                if (procState == testProcStates[i]) {
+                    long[] expectedCpuTimes = cpuTimes[i].clone();
+                    for (int j = 0; j < expectedCpuTimes.length; ++j) {
+                        expectedCpuTimes[j] += delta1[i][j] + delta2[i][j];
+                    }
+                    assertTrue(u.getCpuFreqTimes(timeInFreqs, procState));
+                    assertArrayEquals("Uid=" + testUids[i], expectedCpuTimes, timeInFreqs);
+                    assertTrue(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
+                    assertArrayEquals("Uid=" + testUids[i], delta2[i], timeInFreqs);
+                } else {
+                    assertFalse(u.getCpuFreqTimes(timeInFreqs, procState));
+                    assertFalse(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
+                }
+            }
+        }
+
+        // Verify handling of isolated UIDs - their time-in-freq must be directly
+        // added to that of the parent UID's.  The proc state of the isolated UID is
+        // assumed to be the same as that of the parent UID, so there is no per-state
+        // data for isolated UIDs.
+        final long[][] delta3 = {
+                {98545, 95768795, 76586, 548945, 57846},
+                {788876, 586, 578459, 8776984, 9578923},
+                {3049509483598L, 4597834, 377654, 94589035, 7854},
+                {9493, 784, 99895, 8974893, 9879843}
+        };
+
+        mMockClock.realtime += 1000;
+        mMockClock.uptime += 1000;
+
+        final int parentUid = testUids[1];
+        final int childUid = 99099;
+        addIsolatedUid(parentUid, childUid);
+        final long[] isolatedUidCpuTimes = {495784, 398473, 4895, 4905, 30984093};
+        mockKernelSingleUidTimeReader(childUid, isolatedUidCpuTimes, isolatedUidCpuTimes);
+
+        for (int i = 0; i < testUids.length; ++i) {
+            long[] newCpuTimes = new long[cpuTimes[i].length];
+            for (int j = 0; j < cpuTimes[i].length; j++) {
+                newCpuTimes[j] = cpuTimes[i][j] + delta1[i][j] + delta2[i][j] + delta3[i][j];
+            }
+            mockKernelSingleUidTimeReader(testUids[i], newCpuTimes);
+            mBatteryStatsImpl.updateProcStateCpuTimesLocked(testUids[i],
+                    mMockClock.realtime, mMockClock.uptime);
+        }
+
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            for (int procState = 0; procState < NUM_PROCESS_STATE; ++procState) {
+                if (procState == testProcStates[i]) {
+                    long[] expectedCpuTimes = cpuTimes[i].clone();
+                    for (int j = 0; j < expectedCpuTimes.length; ++j) {
+                        expectedCpuTimes[j] += delta1[i][j] + delta2[i][j] + delta3[i][j]
+                                + (testUids[i] == parentUid ? isolatedUidCpuTimes[j] : 0);
+                    }
+                    assertTrue(u.getCpuFreqTimes(timeInFreqs, procState));
+                    assertArrayEquals("Uid=" + testUids[i], expectedCpuTimes, timeInFreqs);
+                    long[] expectedScreenOffTimes = delta2[i].clone();
+                    for (int j = 0; j < expectedScreenOffTimes.length; ++j) {
+                        expectedScreenOffTimes[j] += delta3[i][j]
+                                + (testUids[i] == parentUid ? isolatedUidCpuTimes[j] : 0);
+                    }
+                    assertTrue(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
+                    assertArrayEquals("Uid=" + testUids[i], expectedScreenOffTimes, timeInFreqs);
+                } else {
+                    assertFalse(u.getCpuFreqTimes(timeInFreqs, procState));
+                    assertFalse(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
+                }
+            }
+        }
+    }
+
+    @Test
+    public void testUpdateCpuTimesForAllUids() {
+        mBatteryStatsImpl.setOnBatteryInternal(false);
+        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+
+        mMockClock.realtime = 1000;
+        mMockClock.uptime = 1000;
+
+        final int[] testUids = {10032, 10048, 10145, 10139};
+        final int[] testProcStates = {
+                PROCESS_STATE_BACKGROUND,
+                PROCESS_STATE_FOREGROUND_SERVICE,
+                PROCESS_STATE_TOP,
+                PROCESS_STATE_CACHED
+        };
+
+        for (int i = 0; i < testUids.length; ++i) {
+            BatteryStatsImpl.Uid uid = mBatteryStatsImpl.getUidStatsLocked(testUids[i]);
+            uid.setProcessStateForTest(testProcStates[i], mMockClock.elapsedRealtime());
+            mockKernelSingleUidTimeReader(testUids[i], new long[NUM_CPU_FREQS]);
+            mBatteryStatsImpl.updateProcStateCpuTimesLocked(testUids[i],
+                    mMockClock.elapsedRealtime(), mMockClock.uptime);
+        }
+
+        final SparseArray<long[]> allUidCpuTimes = new SparseArray<>();
+        long[][] allCpuTimes = {
+                {938483, 4985984, 439893},
+                {499, 94904, 27694},
+                {302949085, 39789473, 34792839},
+                {9809485, 9083475, 347889834},
+        };
+        for (int i = 0; i < testUids.length; ++i) {
+            allUidCpuTimes.put(testUids[i], allCpuTimes[i]);
+        }
+        when(mKernelUidCpuFreqTimeReader.getAllUidCpuFreqTimeMs()).thenReturn(allUidCpuTimes);
+        long[][] expectedCpuTimes = {
+                {843598745, 397843, 32749, 99854, 23454},
+                {9834, 5885, 487589, 394, 93933},
+                {203984, 439, 9859, 30948, 49494},
+                {9389, 858, 239, 349, 50505}
+        };
+        for (int i = 0; i < testUids.length; ++i) {
+            mockKernelSingleUidTimeReader(testUids[i], expectedCpuTimes[i]);
+        }
+
+        mMockClock.realtime += 1000;
+        mMockClock.uptime += 1000;
+
+        mBatteryStatsImpl.updateCpuTimesForAllUids();
+
+        final long[] timeInFreqs = new long[NUM_CPU_FREQS];
+
+        for (int i = 0; i < testUids.length; ++i) {
+            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
+            for (int procState = 0; procState < NUM_PROCESS_STATE; ++procState) {
+                if (procState == testProcStates[i]) {
+                    assertTrue(u.getCpuFreqTimes(timeInFreqs, procState));
+                    assertArrayEquals("Uid=" + testUids[i], expectedCpuTimes[i], timeInFreqs);
+                } else {
+                    assertFalse(u.getCpuFreqTimes(timeInFreqs, procState));
+                }
+                assertFalse(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
+            }
+        }
+    }
+
+    private void mockKernelSingleUidTimeReader(int testUid, long[] cpuTimes) {
+        doAnswer(invocation -> {
+            LongArrayMultiStateCounter counter = invocation.getArgument(1);
+            long timestampMs = invocation.getArgument(2);
+            LongArrayMultiStateCounter.LongArrayContainer container =
+                    new LongArrayMultiStateCounter.LongArrayContainer(NUM_CPU_FREQS);
+            container.setValues(cpuTimes);
+            counter.updateValues(container, timestampMs);
+            return null;
+        }).when(mKernelSingleUidTimeReader).addDelta(eq(testUid),
+                any(LongArrayMultiStateCounter.class), anyLong());
+    }
+
+    private void mockKernelSingleUidTimeReader(int testUid, long[] cpuTimes, long[] delta) {
+        doAnswer(invocation -> {
+            LongArrayMultiStateCounter counter = invocation.getArgument(1);
+            long timestampMs = invocation.getArgument(2);
+            LongArrayMultiStateCounter.LongArrayContainer deltaContainer =
+                    invocation.getArgument(3);
+
+            LongArrayMultiStateCounter.LongArrayContainer container =
+                    new LongArrayMultiStateCounter.LongArrayContainer(NUM_CPU_FREQS);
+            container.setValues(cpuTimes);
+            counter.updateValues(container, timestampMs);
+            if (deltaContainer != null) {
+                deltaContainer.setValues(delta);
+            }
+            return null;
+        }).when(mKernelSingleUidTimeReader).addDelta(eq(testUid),
+                any(LongArrayMultiStateCounter.class), anyLong(),
+                any(LongArrayMultiStateCounter.LongArrayContainer.class));
+    }
+
+    @Test
+    public void testMulticastWakelockAcqRel() {
+        final int testUid = 10032;
+        final int acquireTimeMs = 1000;
+        final int releaseTimeMs = 1005;
+        final int currentTimeMs = 1011;
+
+        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+
+        // Create a Uid Object
+        final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid);
+        assertNotNull(u);
+
+        // Acquire and release the lock
+        u.noteWifiMulticastEnabledLocked(acquireTimeMs);
+        u.noteWifiMulticastDisabledLocked(releaseTimeMs);
+
+        // Get the total acquisition time
+        long totalTime = u.getWifiMulticastTime(currentTimeMs * 1000,
+                BatteryStats.STATS_SINCE_CHARGED);
+        assertEquals("Miscalculations of Multicast wakelock acquisition time",
+                (releaseTimeMs - acquireTimeMs) * 1000, totalTime);
+    }
+
+    @Test
+    public void testMulticastWakelockAcqNoRel() {
+        final int testUid = 10032;
+        final int acquireTimeMs = 1000;
+        final int currentTimeMs = 1011;
+
+        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+
+        // Create a Uid Object
+        final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid);
+        assertNotNull(u);
+
+        // Acquire the lock
+        u.noteWifiMulticastEnabledLocked(acquireTimeMs);
+
+        // Get the total acquisition time
+        long totalTime = u.getWifiMulticastTime(currentTimeMs * 1000,
+                BatteryStats.STATS_SINCE_CHARGED);
+        assertEquals("Miscalculations of Multicast wakelock acquisition time",
+                (currentTimeMs - acquireTimeMs) * 1000, totalTime);
+    }
+
+    @Test
+    public void testMulticastWakelockAcqAcqRelRel() {
+        final int testUid = 10032;
+        final int acquireTimeMs_1 = 1000;
+        final int acquireTimeMs_2 = 1002;
+
+        final int releaseTimeMs_1 = 1005;
+        final int releaseTimeMs_2 = 1009;
+        final int currentTimeMs = 1011;
+
+        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+
+        // Create a Uid Object
+        final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid);
+        assertNotNull(u);
+
+        // Acquire and release the lock (twice in nested way)
+        u.noteWifiMulticastEnabledLocked(acquireTimeMs_1);
+        u.noteWifiMulticastEnabledLocked(acquireTimeMs_2);
+
+        u.noteWifiMulticastDisabledLocked(releaseTimeMs_1);
+        u.noteWifiMulticastDisabledLocked(releaseTimeMs_2);
+
+        // Get the total acquisition time
+        long totalTime = u.getWifiMulticastTime(currentTimeMs * 1000,
+                BatteryStats.STATS_SINCE_CHARGED);
+        assertEquals("Miscalculations of Multicast wakelock acquisition time",
+                (releaseTimeMs_2 - acquireTimeMs_1) * 1000, totalTime);
+    }
+
+    @Test
+    public void testMulticastWakelockAcqRelAcqRel() {
+        final int testUid = 10032;
+        final int acquireTimeMs_1 = 1000;
+        final int acquireTimeMs_2 = 1005;
+
+        final int releaseTimeMs_1 = 1002;
+        final int releaseTimeMs_2 = 1009;
+        final int currentTimeMs = 1011;
+
+        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+
+        // Create a Uid Object
+        final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid);
+        assertNotNull(u);
+
+        // Acquire and release the lock (twice)
+        u.noteWifiMulticastEnabledLocked(acquireTimeMs_1);
+        u.noteWifiMulticastDisabledLocked(releaseTimeMs_1);
+
+        u.noteWifiMulticastEnabledLocked(acquireTimeMs_2);
+        u.noteWifiMulticastDisabledLocked(releaseTimeMs_2);
+
+        // Get the total acquisition time
+        long totalTime = u.getWifiMulticastTime(currentTimeMs * 1000,
+                BatteryStats.STATS_SINCE_CHARGED);
+        assertEquals("Miscalculations of Multicast wakelock acquisition time",
+                ((releaseTimeMs_1 - acquireTimeMs_1) + (releaseTimeMs_2 - acquireTimeMs_2))
+                        * 1000, totalTime);
+    }
+
+    private void addIsolatedUid(int parentUid, int childUid) {
+        final BatteryStatsImpl.Uid u = mBatteryStatsImpl.getUidStatsLocked(parentUid);
+        u.addIsolatedUid(childUid);
+    }
+
+    @Test
+    public void testGetWakeLockStats() {
+        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+
+        // First wakelock, acquired once, not currently held
+        mMockClock.realtime = 1000;
+        mBatteryStatsImpl.noteStartWakeLocked(10100, 100, null, "wakeLock1", null,
+                BatteryStats.WAKE_TYPE_PARTIAL, false);
+
+        mMockClock.realtime = 3000;
+        mBatteryStatsImpl.noteStopWakeLocked(10100, 100, null, "wakeLock1", null,
+                BatteryStats.WAKE_TYPE_PARTIAL);
+
+        // Second wakelock, acquired twice, still held
+        mMockClock.realtime = 4000;
+        mBatteryStatsImpl.noteStartWakeLocked(10200, 101, null, "wakeLock2", null,
+                BatteryStats.WAKE_TYPE_PARTIAL, false);
+
+        mMockClock.realtime = 5000;
+        mBatteryStatsImpl.noteStopWakeLocked(10200, 101, null, "wakeLock2", null,
+                BatteryStats.WAKE_TYPE_PARTIAL);
+
+        mMockClock.realtime = 6000;
+        mBatteryStatsImpl.noteStartWakeLocked(10200, 101, null, "wakeLock2", null,
+                BatteryStats.WAKE_TYPE_PARTIAL, false);
+
+        mMockClock.realtime = 9000;
+
+        List<WakeLockStats.WakeLock> wakeLockStats =
+                mBatteryStatsImpl.getWakeLockStats().getWakeLocks();
+        assertThat(wakeLockStats).hasSize(2);
+
+        WakeLockStats.WakeLock wakeLock1 = wakeLockStats.stream()
+                .filter(wl -> wl.uid == 10100 && wl.name.equals("wakeLock1")).findFirst().get();
+
+        assertThat(wakeLock1.timesAcquired).isEqualTo(1);
+        assertThat(wakeLock1.timeHeldMs).isEqualTo(0);  // Not currently held
+        assertThat(wakeLock1.totalTimeHeldMs).isEqualTo(2000); // 3000-1000
+
+        WakeLockStats.WakeLock wakeLock2 = wakeLockStats.stream()
+                .filter(wl -> wl.uid == 10200 && wl.name.equals("wakeLock2")).findFirst().get();
+
+        assertThat(wakeLock2.timesAcquired).isEqualTo(2);
+        assertThat(wakeLock2.timeHeldMs).isEqualTo(3000);  // 9000-6000
+        assertThat(wakeLock2.totalTimeHeldMs).isEqualTo(4000); // (5000-4000) + (9000-6000)
+    }
+
+    @Test
+    public void kernelWakelocks() {
+        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+
+        mKernelWakelockStats.put("lock1", new KernelWakelockStats.Entry(42, 1000, 314, 0));
+        mKernelWakelockStats.put("lock2", new KernelWakelockStats.Entry(6, 2000, 0, 0));
+
+        mMockClock.realtime = 5000;
+
+        // The fist call makes a snapshot of the initial state of the wakelocks
+        mBatteryStatsImpl.updateKernelWakelocksLocked(mMockClock.realtime * 1000);
+
+        assertThat(mBatteryStatsImpl.getKernelWakelockStats()).hasSize(2);
+
+        mMockClock.realtime += 2000;
+
+        assertThatKernelWakelockTotalTime("lock1").isEqualTo(314);  // active
+        assertThatKernelWakelockTotalTime("lock2").isEqualTo(0);        // inactive
+
+        mKernelWakelockStats.put("lock1", new KernelWakelockStats.Entry(43, 1100, 414, 0));
+        mKernelWakelockStats.put("lock2", new KernelWakelockStats.Entry(6, 2222, 0, 0));
+
+        mMockClock.realtime += 3000;
+
+        // Compute delta from the initial snapshot
+        mBatteryStatsImpl.updateKernelWakelocksLocked(mMockClock.realtime * 1000);
+
+        mMockClock.realtime += 4000;
+
+        assertThatKernelWakelockTotalTime("lock1").isEqualTo(414);
+
+        // Wake lock not active. Expect relative total time as reported by Kernel:
+        // 2_222 - 2_000 = 222
+        assertThatKernelWakelockTotalTime("lock2").isEqualTo(222);
+    }
+
+    private LongSubject assertThatKernelWakelockTotalTime(String name) {
+        return assertWithMessage("Kernel wakelock " + name + " at " + mMockClock.realtime)
+                .that(mBatteryStatsImpl.getKernelWakelockStats().get(name)
+                        .getTotalTimeLocked(mMockClock.realtime * 1000, 0));
+    }
+
+    @Test
+    public void testGetBluetoothBatteryStats() {
+        when(mPowerProfile.getAveragePower(
+                PowerProfile.POWER_BLUETOOTH_CONTROLLER_OPERATING_VOLTAGE)).thenReturn(3.0);
+        mBatteryStatsImpl.setOnBatteryInternal(true);
+        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+
+        final WorkSource ws = new WorkSource(10042);
+        mBatteryStatsImpl.noteBluetoothScanStartedFromSourceLocked(ws, false, 1000, 1000);
+        mBatteryStatsImpl.noteBluetoothScanStoppedFromSourceLocked(ws, false, 5000, 5000);
+        mBatteryStatsImpl.noteBluetoothScanStartedFromSourceLocked(ws, true, 6000, 6000);
+        mBatteryStatsImpl.noteBluetoothScanStoppedFromSourceLocked(ws, true, 9000, 9000);
+        mBatteryStatsImpl.noteBluetoothScanResultsFromSourceLocked(ws, 42, 9000, 9000);
+
+        BluetoothActivityEnergyInfo info = createBluetoothActivityEnergyInfo(
+                /* timestamp= */ 1000,
+                /* controllerTxTimeMs= */ 9000,
+                /* controllerRxTimeMs= */ 8000,
+                /* controllerIdleTimeMs= */ 12000,
+                /* controllerEnergyUsed= */ 0,
+                createUidTraffic(/* appUid= */ 10042, /* rxBytes= */ 3000, /* txBytes= */ 4000),
+                createUidTraffic(/* appUid= */ 10043, /* rxBytes= */ 5000, /* txBytes= */ 8000));
+
+        mBatteryStatsImpl.updateBluetoothStateLocked(info, -1, 1000, 1000);
+
+        BluetoothBatteryStats stats =
+                mBatteryStatsImpl.getBluetoothBatteryStats();
+        assertThat(stats.getUidStats()).hasSize(2);
+
+        final BluetoothBatteryStats.UidStats uidStats =
+                stats.getUidStats().stream().filter(u -> u.uid == 10042).findFirst().get();
+        assertThat(uidStats.scanTimeMs).isEqualTo(7000);  // 4000+3000
+        assertThat(uidStats.unoptimizedScanTimeMs).isEqualTo(3000);
+        assertThat(uidStats.scanResultCount).isEqualTo(42);
+        assertThat(uidStats.rxTimeMs).isEqualTo(7375);  // Some scan time is treated as RX
+        assertThat(uidStats.txTimeMs).isEqualTo(7666);  // Some scan time is treated as TX
+    }
+
+    /** A regression test for b/266128651 */
+    @Test
+    public void testGetNetworkActivityBytes_multipleUpdates() {
+        when(mPowerProfile.getAveragePower(
+                PowerProfile.POWER_BLUETOOTH_CONTROLLER_OPERATING_VOLTAGE)).thenReturn(3.0);
+        mBatteryStatsImpl.setOnBatteryInternal(true);
+        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+
+        BluetoothActivityEnergyInfo info1 = createBluetoothActivityEnergyInfo(
+                /* timestamp= */ 10000,
+                /* controllerTxTimeMs= */ 9000,
+                /* controllerRxTimeMs= */ 8000,
+                /* controllerIdleTimeMs= */ 2000,
+                /* controllerEnergyUsed= */ 0,
+                createUidTraffic(/* appUid= */ 10042, /* rxBytes= */ 3000, /* txBytes= */ 4000),
+                createUidTraffic(/* appUid= */ 10043, /* rxBytes= */ 5000, /* txBytes= */ 8000));
+
+        mBatteryStatsImpl.updateBluetoothStateLocked(info1, -1, 1000, 1000);
+
+        long totalRx1 = mBatteryStatsImpl.getNetworkActivityBytes(
+                BatteryStats.NETWORK_BT_RX_DATA, BatteryStats.STATS_SINCE_CHARGED);
+        long totalTx1 = mBatteryStatsImpl.getNetworkActivityBytes(
+                BatteryStats.NETWORK_BT_TX_DATA, BatteryStats.STATS_SINCE_CHARGED);
+
+        assertThat(totalRx1).isEqualTo(8000);  // 3000 + 5000
+        assertThat(totalTx1).isEqualTo(12000);  // 4000 + 8000
+
+        BluetoothActivityEnergyInfo info2 = createBluetoothActivityEnergyInfo(
+                /* timestamp= */ 20000,
+                /* controllerTxTimeMs= */ 19000,
+                /* controllerRxTimeMs= */ 18000,
+                /* controllerIdleTimeMs= */ 3000,
+                /* controllerEnergyUsed= */ 0,
+                createUidTraffic(/* appUid= */ 10043, /* rxBytes= */ 6000, /* txBytes= */ 9500),
+                createUidTraffic(/* appUid= */ 10044, /* rxBytes= */ 7000, /* txBytes= */ 9000));
+
+        mBatteryStatsImpl.updateBluetoothStateLocked(info2, -1, 2000, 2000);
+
+        long totalRx2 = mBatteryStatsImpl.getNetworkActivityBytes(
+                BatteryStats.NETWORK_BT_RX_DATA, BatteryStats.STATS_SINCE_CHARGED);
+        long totalTx2 = mBatteryStatsImpl.getNetworkActivityBytes(
+                BatteryStats.NETWORK_BT_TX_DATA, BatteryStats.STATS_SINCE_CHARGED);
+
+        assertThat(totalRx2).isEqualTo(16000);  // 3000 + 6000 (updated) + 7000 (new)
+        assertThat(totalTx2).isEqualTo(22500);  // 4000 + 9500 (updated) + 9000 (new)
+
+        BluetoothActivityEnergyInfo info3 = createBluetoothActivityEnergyInfo(
+                /* timestamp= */ 30000,
+                /* controllerTxTimeMs= */ 20000,
+                /* controllerRxTimeMs= */ 20000,
+                /* controllerIdleTimeMs= */ 4000,
+                /* controllerEnergyUsed= */ 0,
+                createUidTraffic(/* appUid= */ 10043, /* rxBytes= */ 7000, /* txBytes= */ 9900),
+                createUidTraffic(/* appUid= */ 10044, /* rxBytes= */ 8000, /* txBytes= */ 10000));
+
+        mBatteryStatsImpl.updateBluetoothStateLocked(info3, -1, 2000, 2000);
+
+        long totalRx3 = mBatteryStatsImpl.getNetworkActivityBytes(
+                BatteryStats.NETWORK_BT_RX_DATA, BatteryStats.STATS_SINCE_CHARGED);
+        long totalTx3 = mBatteryStatsImpl.getNetworkActivityBytes(
+                BatteryStats.NETWORK_BT_TX_DATA, BatteryStats.STATS_SINCE_CHARGED);
+
+        assertThat(totalRx3).isEqualTo(18000);  // 3000 + 7000 (updated) + 8000 (updated)
+        assertThat(totalTx3).isEqualTo(23900);  // 4000 + 9900 (updated) + 10000 (updated)
+    }
+
+    private UidTraffic createUidTraffic(int appUid, long rxBytes, long txBytes) {
+        final Parcel parcel = Parcel.obtain();
+        parcel.writeInt(appUid); // mAppUid
+        parcel.writeLong(rxBytes); // mRxBytes
+        parcel.writeLong(txBytes); // mTxBytes
+        parcel.setDataPosition(0);
+        UidTraffic uidTraffic = UidTraffic.CREATOR.createFromParcel(parcel);
+        parcel.recycle();
+        return uidTraffic;
+    }
+
+    private BluetoothActivityEnergyInfo createBluetoothActivityEnergyInfo(
+            long timestamp,
+            long controllerTxTimeMs,
+            long controllerRxTimeMs,
+            long controllerIdleTimeMs,
+            long controllerEnergyUsed,
+            UidTraffic... uidTraffic) {
+        Parcel parcel = Parcel.obtain();
+        parcel.writeLong(timestamp); // mTimestamp
+        parcel.writeInt(
+                BluetoothActivityEnergyInfo.BT_STACK_STATE_STATE_ACTIVE); // mBluetoothStackState
+        parcel.writeLong(controllerTxTimeMs); // mControllerTxTimeMs;
+        parcel.writeLong(controllerRxTimeMs); // mControllerRxTimeMs;
+        parcel.writeLong(controllerIdleTimeMs); // mControllerIdleTimeMs;
+        parcel.writeLong(controllerEnergyUsed); // mControllerEnergyUsed;
+        parcel.writeTypedList(ImmutableList.copyOf(uidTraffic)); // mUidTraffic
+        parcel.setDataPosition(0);
+
+        BluetoothActivityEnergyInfo info =
+                BluetoothActivityEnergyInfo.CREATOR.createFromParcel(parcel);
+        parcel.recycle();
+        return info;
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsManagerTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsManagerTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsManagerTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsManagerTest.java
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsNoteTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsNoteTest.java
new file mode 100644
index 0000000..88b9522
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsNoteTest.java
@@ -0,0 +1,2541 @@
+/*
+ * 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.server.power.stats;
+
+import static android.os.BatteryStats.NUM_SCREEN_BRIGHTNESS_BINS;
+import static android.os.BatteryStats.POWER_DATA_UNAVAILABLE;
+import static android.os.BatteryStats.RADIO_ACCESS_TECHNOLOGY_COUNT;
+import static android.os.BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR;
+import static android.os.BatteryStats.STATS_SINCE_CHARGED;
+import static android.os.BatteryStats.WAKE_TYPE_PARTIAL;
+
+import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_CPU;
+import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_DISPLAY;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+
+import android.app.ActivityManager;
+import android.app.usage.NetworkStatsManager;
+import android.os.BatteryStats;
+import android.os.BatteryStats.HistoryItem;
+import android.os.BatteryStats.Uid.Sensor;
+import android.os.Process;
+import android.os.UserHandle;
+import android.os.WorkSource;
+import android.telephony.AccessNetworkConstants;
+import android.telephony.ActivityStatsTechSpecificInfo;
+import android.telephony.Annotation;
+import android.telephony.CellSignalStrength;
+import android.telephony.DataConnectionRealTimeInfo;
+import android.telephony.ModemActivityInfo;
+import android.telephony.NetworkRegistrationInfo;
+import android.telephony.ServiceState;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+import android.util.MutableInt;
+import android.util.SparseIntArray;
+import android.util.SparseLongArray;
+import android.view.Display;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.internal.os.BatteryStatsHistoryIterator;
+import com.android.internal.os.PowerProfile;
+import com.android.internal.power.EnergyConsumerStats;
+import com.android.server.power.stats.BatteryStatsImpl.DualTimer;
+
+import junit.framework.TestCase;
+
+import org.mockito.Mock;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.IntConsumer;
+
+/**
+ * Test various BatteryStatsImpl noteStart methods.
+ */
+@SuppressWarnings("GuardedBy")
+public class BatteryStatsNoteTest extends TestCase {
+    private static final String TAG = BatteryStatsNoteTest.class.getSimpleName();
+
+    private static final int UID = 10500;
+    private static final int ISOLATED_APP_ID = Process.FIRST_ISOLATED_UID + 23;
+    private static final int ISOLATED_UID = UserHandle.getUid(0, ISOLATED_APP_ID);
+    private static final WorkSource WS = new WorkSource(UID);
+
+    enum ModemState {
+        SLEEP, IDLE, RECEIVING, TRANSMITTING
+    }
+
+    @Mock
+    NetworkStatsManager mNetworkStatsManager;
+
+    /**
+     * Test BatteryStatsImpl.Uid.noteBluetoothScanResultLocked.
+     */
+    @SmallTest
+    public void testNoteBluetoothScanResultLocked() throws Exception {
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(new MockClock());
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
+
+        bi.noteBluetoothScanResultsFromSourceLocked(WS, 1);
+        bi.noteBluetoothScanResultsFromSourceLocked(WS, 100);
+        assertEquals(101,
+                bi.getUidStats().get(UID).getBluetoothScanResultCounter()
+                        .getCountLocked(STATS_SINCE_CHARGED));
+        BatteryStats.Counter bgCntr = bi.getUidStats().get(UID).getBluetoothScanResultBgCounter();
+        if (bgCntr != null) {
+            assertEquals(0, bgCntr.getCountLocked(STATS_SINCE_CHARGED));
+        }
+
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
+        bi.noteBluetoothScanResultsFromSourceLocked(WS, 17);
+        assertEquals(101 + 17,
+                bi.getUidStats().get(UID).getBluetoothScanResultCounter()
+                        .getCountLocked(STATS_SINCE_CHARGED));
+        assertEquals(17,
+                bi.getUidStats().get(UID).getBluetoothScanResultBgCounter()
+                        .getCountLocked(STATS_SINCE_CHARGED));
+    }
+
+    /**
+     * Test BatteryStatsImpl.Uid.noteStartWakeLocked.
+     */
+    @SmallTest
+    public void testNoteStartWakeLocked() throws Exception {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+
+        int pid = 10;
+        String name = "name";
+
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
+        bi.getUidStatsLocked(UID)
+                .noteStartWakeLocked(pid, name, WAKE_TYPE_PARTIAL, clocks.realtime);
+
+        clocks.realtime = clocks.uptime = 100;
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
+
+        clocks.realtime = clocks.uptime = 220;
+        bi.getUidStatsLocked(UID).noteStopWakeLocked(pid, name, WAKE_TYPE_PARTIAL, clocks.realtime);
+
+        BatteryStats.Timer aggregTimer = bi.getUidStats().get(UID)
+                .getAggregatedPartialWakelockTimer();
+        long actualTime = aggregTimer.getTotalTimeLocked(300_000, STATS_SINCE_CHARGED);
+        long bgTime = aggregTimer.getSubTimer().getTotalTimeLocked(300_000, STATS_SINCE_CHARGED);
+        assertEquals(220_000, actualTime);
+        assertEquals(120_000, bgTime);
+    }
+
+    /**
+     * Test BatteryStatsImpl.Uid.noteStartWakeLocked for an isolated uid.
+     */
+    @SmallTest
+    public void testNoteStartWakeLocked_isolatedUid() throws Exception {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+
+        int pid = 10;
+        String name = "name";
+        String historyName = "historyName";
+
+        WorkSource.WorkChain isolatedWorkChain = new WorkSource.WorkChain();
+        isolatedWorkChain.addNode(ISOLATED_UID, name);
+
+        // Map ISOLATED_UID to UID.
+        bi.addIsolatedUidLocked(ISOLATED_UID, UID);
+
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
+        bi.noteStartWakeLocked(ISOLATED_UID, pid, isolatedWorkChain, name, historyName,
+                WAKE_TYPE_PARTIAL, false);
+
+        clocks.realtime = clocks.uptime = 100;
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
+
+        clocks.realtime = clocks.uptime = 220;
+        bi.noteStopWakeLocked(ISOLATED_UID, pid, isolatedWorkChain, name, historyName,
+                WAKE_TYPE_PARTIAL);
+
+        // ISOLATED_UID wakelock time should be attributed to UID.
+        BatteryStats.Timer aggregTimer = bi.getUidStats().get(UID)
+                .getAggregatedPartialWakelockTimer();
+        long actualTime = aggregTimer.getTotalTimeLocked(300_000, STATS_SINCE_CHARGED);
+        long bgTime = aggregTimer.getSubTimer().getTotalTimeLocked(300_000, STATS_SINCE_CHARGED);
+        assertEquals(220_000, actualTime);
+        assertEquals(120_000, bgTime);
+    }
+
+    /**
+     * Test BatteryStatsImpl.Uid.noteStartWakeLocked for an isolated uid, with a race where the
+     * isolated uid is removed from batterystats before the wakelock has been stopped.
+     */
+    @SmallTest
+    public void testNoteStartWakeLocked_isolatedUidRace() throws Exception {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+
+        int pid = 10;
+        String name = "name";
+        String historyName = "historyName";
+
+        WorkSource.WorkChain isolatedWorkChain = new WorkSource.WorkChain();
+        isolatedWorkChain.addNode(ISOLATED_UID, name);
+
+        // Map ISOLATED_UID to UID.
+        bi.addIsolatedUidLocked(ISOLATED_UID, UID);
+
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
+        bi.noteStartWakeLocked(ISOLATED_UID, pid, isolatedWorkChain, name, historyName,
+                WAKE_TYPE_PARTIAL, false);
+
+        clocks.realtime = clocks.uptime = 100;
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
+
+        clocks.realtime = clocks.uptime = 150;
+        bi.maybeRemoveIsolatedUidLocked(ISOLATED_UID, clocks.realtime, clocks.uptime);
+
+        clocks.realtime = clocks.uptime = 220;
+        bi.noteStopWakeLocked(ISOLATED_UID, pid, isolatedWorkChain, name, historyName,
+                WAKE_TYPE_PARTIAL);
+
+        // ISOLATED_UID wakelock time should be attributed to UID.
+        BatteryStats.Timer aggregTimer = bi.getUidStats().get(UID)
+                .getAggregatedPartialWakelockTimer();
+        long actualTime = aggregTimer.getTotalTimeLocked(300_000, STATS_SINCE_CHARGED);
+        long bgTime = aggregTimer.getSubTimer().getTotalTimeLocked(300_000, STATS_SINCE_CHARGED);
+        assertEquals(220_000, actualTime);
+        assertEquals(120_000, bgTime);
+    }
+
+    /**
+     * Test BatteryStatsImpl.Uid.noteLongPartialWakelockStart for an isolated uid.
+     */
+    @SmallTest
+    public void testNoteLongPartialWakelockStart_isolatedUid() throws Exception {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+
+
+        bi.setRecordAllHistoryLocked(true);
+        bi.forceRecordAllHistory();
+
+        int pid = 10;
+        String name = "name";
+        String historyName = "historyName";
+
+        WorkSource.WorkChain isolatedWorkChain = new WorkSource.WorkChain();
+        isolatedWorkChain.addNode(ISOLATED_UID, name);
+
+        // Map ISOLATED_UID to UID.
+        bi.addIsolatedUidLocked(ISOLATED_UID, UID);
+
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
+        bi.noteLongPartialWakelockStart(name, historyName, ISOLATED_UID);
+
+        clocks.realtime = clocks.uptime = 100;
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
+
+        clocks.realtime = clocks.uptime = 220;
+        bi.noteLongPartialWakelockFinish(name, historyName, ISOLATED_UID);
+
+        final BatteryStatsHistoryIterator iterator =  bi.iterateBatteryStatsHistory();
+
+        BatteryStats.HistoryItem item;
+
+        while ((item = iterator.next()) != null) {
+            if (item.eventCode == HistoryItem.EVENT_LONG_WAKE_LOCK_START) break;
+        }
+        assertThat(item.eventCode).isEqualTo(HistoryItem.EVENT_LONG_WAKE_LOCK_START);
+        assertThat(item.eventTag).isNotNull();
+        assertThat(item.eventTag.string).isEqualTo(historyName);
+        assertThat(item.eventTag.uid).isEqualTo(UID);
+
+        while ((item = iterator.next()) != null) {
+            if (item.eventCode == HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH) break;
+        }
+        assertThat(item.eventCode).isEqualTo(HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH);
+        assertThat(item.eventTag).isNotNull();
+        assertThat(item.eventTag.string).isEqualTo(historyName);
+        assertThat(item.eventTag.uid).isEqualTo(UID);
+    }
+
+    /**
+     * Test BatteryStatsImpl.Uid.noteLongPartialWakelockStart for an isolated uid.
+     */
+    @SmallTest
+    public void testNoteLongPartialWakelockStart_isolatedUidRace() throws Exception {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+
+
+        bi.setRecordAllHistoryLocked(true);
+        bi.forceRecordAllHistory();
+
+        int pid = 10;
+        String name = "name";
+        String historyName = "historyName";
+
+        WorkSource.WorkChain isolatedWorkChain = new WorkSource.WorkChain();
+        isolatedWorkChain.addNode(ISOLATED_UID, name);
+
+        // Map ISOLATED_UID to UID.
+        bi.addIsolatedUidLocked(ISOLATED_UID, UID);
+
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
+        bi.noteLongPartialWakelockStart(name, historyName, ISOLATED_UID);
+
+        clocks.realtime = clocks.uptime = 100;
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
+
+        clocks.realtime = clocks.uptime = 150;
+        bi.maybeRemoveIsolatedUidLocked(ISOLATED_UID, clocks.realtime, clocks.uptime);
+
+        clocks.realtime = clocks.uptime = 220;
+        bi.noteLongPartialWakelockFinish(name, historyName, ISOLATED_UID);
+
+        final BatteryStatsHistoryIterator iterator = bi.iterateBatteryStatsHistory();
+
+        BatteryStats.HistoryItem item;
+
+        while ((item = iterator.next()) != null) {
+            if (item.eventCode == HistoryItem.EVENT_LONG_WAKE_LOCK_START) break;
+        }
+        assertThat(item.eventCode).isEqualTo(HistoryItem.EVENT_LONG_WAKE_LOCK_START);
+        assertThat(item.eventTag).isNotNull();
+        assertThat(item.eventTag.string).isEqualTo(historyName);
+        assertThat(item.eventTag.uid).isEqualTo(UID);
+
+        while ((item = iterator.next()) != null) {
+            if (item.eventCode == HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH) break;
+        }
+        assertThat(item.eventCode).isEqualTo(HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH);
+        assertThat(item.eventTag).isNotNull();
+        assertThat(item.eventTag.string).isEqualTo(historyName);
+        assertThat(item.eventTag.uid).isEqualTo(UID);
+    }
+
+    /**
+     * Test BatteryStatsImpl.noteUidProcessStateLocked.
+     */
+    @SmallTest
+    public void testNoteUidProcessStateLocked() throws Exception {
+        final MockClock clocks = new MockClock();
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+
+        // map of ActivityManager process states and how long to simulate run time in each state
+        Map<Integer, Integer> stateRuntimeMap = new HashMap<Integer, Integer>();
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_TOP, 1111);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_BOUND_TOP, 7382);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE, 1234);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE, 2468);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_TOP_SLEEPING, 7531);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND, 4455);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND, 1337);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_BACKUP, 90210);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_HEAVY_WEIGHT, 911);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_SERVICE, 404);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_RECEIVER, 31459);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_HOME, 1123);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_LAST_ACTIVITY, 5813);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY, 867);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT, 5309);
+        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_CACHED_EMPTY, 42);
+
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+
+        for (Map.Entry<Integer, Integer> entry : stateRuntimeMap.entrySet()) {
+            bi.noteUidProcessStateLocked(UID, entry.getKey());
+            clocks.realtime += entry.getValue();
+            clocks.uptime = clocks.realtime;
+        }
+
+        long actualRunTimeUs;
+        long expectedRunTimeMs;
+        long elapsedTimeUs = clocks.realtime * 1000;
+        BatteryStats.Uid uid = bi.getUidStats().get(UID);
+
+        // compare runtime of process states to the Uid process states they map to
+        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_TOP, elapsedTimeUs,
+                STATS_SINCE_CHARGED);
+        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_TOP);
+        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
+
+        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE,
+                elapsedTimeUs, STATS_SINCE_CHARGED);
+        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE);
+        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
+
+        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_TOP_SLEEPING,
+                elapsedTimeUs, STATS_SINCE_CHARGED);
+        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_TOP_SLEEPING);
+        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
+
+        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_FOREGROUND,
+                elapsedTimeUs, STATS_SINCE_CHARGED);
+        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
+        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
+
+        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_BACKGROUND,
+                elapsedTimeUs, STATS_SINCE_CHARGED);
+        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_BACKUP)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_SERVICE)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_RECEIVER)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_BOUND_TOP);
+        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
+
+        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_CACHED,
+                elapsedTimeUs, STATS_SINCE_CHARGED);
+        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_HOME)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_LAST_ACTIVITY)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT)
+                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_CACHED_EMPTY);
+        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
+
+        // Special check for foreground service timer
+        actualRunTimeUs = uid.getForegroundServiceTimer().getTotalTimeLocked(elapsedTimeUs,
+                STATS_SINCE_CHARGED);
+        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE);
+        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
+    }
+
+    /**
+     * Test BatteryStatsImpl.updateTimeBasesLocked.
+     */
+    @SmallTest
+    public void testUpdateTimeBasesLocked() throws Exception {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+
+        bi.updateTimeBasesLocked(false, Display.STATE_OFF, 0, 0);
+        assertFalse(bi.getOnBatteryTimeBase().isRunning());
+        bi.updateTimeBasesLocked(false, Display.STATE_DOZE, 10, 10);
+        assertFalse(bi.getOnBatteryTimeBase().isRunning());
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, 20, 20);
+        assertFalse(bi.getOnBatteryTimeBase().isRunning());
+
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, 30, 30);
+        assertTrue(bi.getOnBatteryTimeBase().isRunning());
+        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        bi.updateTimeBasesLocked(true, Display.STATE_DOZE, 40, 40);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 40, 40);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+    }
+
+    /**
+     * Test BatteryStatsImpl.noteScreenStateLocked sets timebases and screen states correctly.
+     */
+    @SmallTest
+    public void testNoteScreenStateLocked() throws Exception {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.initMeasuredEnergyStats(new String[]{"FOO", "BAR"});
+
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+        bi.noteScreenStateLocked(0, Display.STATE_ON);
+
+        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_DOZE, bi.getScreenState());
+        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        bi.noteScreenStateLocked(0, Display.STATE_ON);
+        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_ON, bi.getScreenState());
+        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        bi.noteScreenStateLocked(0, Display.STATE_OFF);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_OFF, bi.getScreenState());
+        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        bi.noteScreenStateLocked(0, Display.STATE_DOZE_SUSPEND);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_DOZE_SUSPEND, bi.getScreenState());
+        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        // STATE_VR note should map to STATE_ON.
+        bi.noteScreenStateLocked(0, Display.STATE_VR);
+        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_ON, bi.getScreenState());
+        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        // STATE_ON_SUSPEND note should map to STATE_ON.
+        bi.noteScreenStateLocked(0, Display.STATE_ON_SUSPEND);
+        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_ON, bi.getScreenState());
+        // Transition from ON to ON state should not cause an External Sync
+        assertEquals(0, bi.getAndClearExternalStatsSyncFlags());
+    }
+
+    /**
+     * Test BatteryStatsImpl.noteScreenStateLocked sets timebases and screen states correctly for
+     * multi display devices
+     */
+    @SmallTest
+    public void testNoteScreenStateLocked_multiDisplay() throws Exception {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.setDisplayCountLocked(2);
+        bi.initMeasuredEnergyStats(new String[]{"FOO", "BAR"});
+
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        bi.noteScreenStateLocked(0, Display.STATE_OFF);
+        bi.noteScreenStateLocked(1, Display.STATE_OFF);
+
+        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_DOZE, bi.getScreenState());
+        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        bi.noteScreenStateLocked(0, Display.STATE_ON);
+        assertEquals(Display.STATE_ON, bi.getScreenState());
+        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        bi.noteScreenStateLocked(0, Display.STATE_OFF);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_OFF, bi.getScreenState());
+        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        bi.noteScreenStateLocked(0, Display.STATE_DOZE_SUSPEND);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_DOZE_SUSPEND, bi.getScreenState());
+        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        // STATE_VR note should map to STATE_ON.
+        bi.noteScreenStateLocked(0, Display.STATE_VR);
+        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_ON, bi.getScreenState());
+        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        // STATE_ON_SUSPEND note should map to STATE_ON.
+        bi.noteScreenStateLocked(0, Display.STATE_ON_SUSPEND);
+        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_ON, bi.getScreenState());
+        // Transition from ON to ON state should not cause an External Sync
+        assertEquals(0, bi.getAndClearExternalStatsSyncFlags());
+
+        bi.noteScreenStateLocked(1, Display.STATE_DOZE);
+        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        // Should remain STATE_ON since display0 is still on.
+        assertEquals(Display.STATE_ON, bi.getScreenState());
+        // Overall screen state did not change, so no need to sync CPU stats.
+        assertEquals(UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_DOZE, bi.getScreenState());
+        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        bi.noteScreenStateLocked(0, Display.STATE_ON);
+        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_ON, bi.getScreenState());
+        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        bi.noteScreenStateLocked(0, Display.STATE_OFF);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_DOZE, bi.getScreenState());
+        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        bi.noteScreenStateLocked(0, Display.STATE_DOZE_SUSPEND);
+        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_DOZE, bi.getScreenState());
+        // Overall screen state did not change, so no need to sync CPU stats.
+        assertEquals(UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        bi.noteScreenStateLocked(0, Display.STATE_VR);
+        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_ON, bi.getScreenState());
+        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
+
+        bi.noteScreenStateLocked(0, Display.STATE_ON_SUSPEND);
+        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
+        assertEquals(Display.STATE_ON, bi.getScreenState());
+        assertEquals(0, bi.getAndClearExternalStatsSyncFlags());
+    }
+
+    /*
+     * Test BatteryStatsImpl.noteScreenStateLocked updates timers correctly.
+     *
+     * Unknown and doze should both be subset of off state
+     *
+     * Timeline 0----100----200----310----400------------1000
+     * Unknown         -------
+     * On                     -------
+     * Off             -------       ----------------------
+     * Doze                                ----------------
+     */
+    @SmallTest
+    public void testNoteScreenStateTimersLocked() throws Exception {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+
+        clocks.realtime = clocks.uptime = 100;
+        // Device startup, setOnBatteryLocked calls updateTimebases
+        bi.updateTimeBasesLocked(true, Display.STATE_UNKNOWN, 100_000, 100_000);
+        // Turn on display at 200us
+        clocks.realtime = clocks.uptime = 200;
+        bi.noteScreenStateLocked(0, Display.STATE_ON);
+        assertEquals(150_000, bi.computeBatteryRealtime(250_000, STATS_SINCE_CHARGED));
+        assertEquals(100_000, bi.computeBatteryScreenOffRealtime(250_000, STATS_SINCE_CHARGED));
+        assertEquals(50_000, bi.getScreenOnTime(250_000, STATS_SINCE_CHARGED));
+        assertEquals(0, bi.getScreenDozeTime(250_000, STATS_SINCE_CHARGED));
+        assertEquals(50_000, bi.getDisplayScreenOnTime(0, 250_000));
+        assertEquals(0, bi.getDisplayScreenDozeTime(0, 250_000));
+
+        clocks.realtime = clocks.uptime = 310;
+        bi.noteScreenStateLocked(0, Display.STATE_OFF);
+        assertEquals(250_000, bi.computeBatteryRealtime(350_000, STATS_SINCE_CHARGED));
+        assertEquals(140_000, bi.computeBatteryScreenOffRealtime(350_000, STATS_SINCE_CHARGED));
+        assertEquals(110_000, bi.getScreenOnTime(350_000, STATS_SINCE_CHARGED));
+        assertEquals(0, bi.getScreenDozeTime(350_000, STATS_SINCE_CHARGED));
+        assertEquals(110_000, bi.getDisplayScreenOnTime(0, 350_000));
+        assertEquals(0, bi.getDisplayScreenDozeTime(0, 350_000));
+
+        clocks.realtime = clocks.uptime = 400;
+        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
+        assertEquals(400_000, bi.computeBatteryRealtime(500_000, STATS_SINCE_CHARGED));
+        assertEquals(290_000, bi.computeBatteryScreenOffRealtime(500_000, STATS_SINCE_CHARGED));
+        assertEquals(110_000, bi.getScreenOnTime(500_000, STATS_SINCE_CHARGED));
+        assertEquals(100_000, bi.getScreenDozeTime(500_000, STATS_SINCE_CHARGED));
+        assertEquals(110_000, bi.getDisplayScreenOnTime(0, 500_000));
+        assertEquals(100_000, bi.getDisplayScreenDozeTime(0, 500_000));
+
+        clocks.realtime = clocks.uptime = 1000;
+        bi.noteScreenStateLocked(0, Display.STATE_OFF);
+        assertEquals(1400_000, bi.computeBatteryRealtime(1500_000, STATS_SINCE_CHARGED));
+        assertEquals(1290_000, bi.computeBatteryScreenOffRealtime(1500_000, STATS_SINCE_CHARGED));
+        assertEquals(110_000, bi.getScreenOnTime(1500_000, STATS_SINCE_CHARGED));
+        assertEquals(600_000, bi.getScreenDozeTime(1500_000, STATS_SINCE_CHARGED));
+        assertEquals(110_000, bi.getDisplayScreenOnTime(0, 1500_000));
+        assertEquals(600_000, bi.getDisplayScreenDozeTime(0, 1500_000));
+    }
+
+    /*
+     * Test BatteryStatsImpl.noteScreenStateLocked updates timers correctly for multi display
+     * devices.
+     */
+    @SmallTest
+    public void testNoteScreenStateTimersLocked_multiDisplay() throws Exception {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.setDisplayCountLocked(2);
+
+        clocks.realtime = clocks.uptime = 100;
+        // Device startup, setOnBatteryLocked calls updateTimebases
+        bi.updateTimeBasesLocked(true, Display.STATE_UNKNOWN, 100_000, 100_000);
+        // Turn on display at 200us
+        clocks.realtime = clocks.uptime = 200;
+        bi.noteScreenStateLocked(0, Display.STATE_ON);
+        bi.noteScreenStateLocked(1, Display.STATE_OFF);
+        assertEquals(150_000, bi.computeBatteryRealtime(250_000, STATS_SINCE_CHARGED));
+        assertEquals(100_000, bi.computeBatteryScreenOffRealtime(250_000, STATS_SINCE_CHARGED));
+        assertEquals(50_000, bi.getScreenOnTime(250_000, STATS_SINCE_CHARGED));
+        assertEquals(0, bi.getScreenDozeTime(250_000, STATS_SINCE_CHARGED));
+        assertEquals(50_000, bi.getDisplayScreenOnTime(0, 250_000));
+        assertEquals(0, bi.getDisplayScreenDozeTime(0, 250_000));
+        assertEquals(0, bi.getDisplayScreenOnTime(1, 250_000));
+        assertEquals(0, bi.getDisplayScreenDozeTime(1, 250_000));
+
+        clocks.realtime = clocks.uptime = 310;
+        bi.noteScreenStateLocked(0, Display.STATE_OFF);
+        assertEquals(250_000, bi.computeBatteryRealtime(350_000, STATS_SINCE_CHARGED));
+        assertEquals(140_000, bi.computeBatteryScreenOffRealtime(350_000, STATS_SINCE_CHARGED));
+        assertEquals(110_000, bi.getScreenOnTime(350_000, STATS_SINCE_CHARGED));
+        assertEquals(0, bi.getScreenDozeTime(350_000, STATS_SINCE_CHARGED));
+        assertEquals(110_000, bi.getDisplayScreenOnTime(0, 350_000));
+        assertEquals(0, bi.getDisplayScreenDozeTime(0, 350_000));
+        assertEquals(0, bi.getDisplayScreenOnTime(1, 350_000));
+        assertEquals(0, bi.getDisplayScreenDozeTime(1, 350_000));
+
+        clocks.realtime = clocks.uptime = 400;
+        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
+        assertEquals(400_000, bi.computeBatteryRealtime(500_000, STATS_SINCE_CHARGED));
+        assertEquals(290_000, bi.computeBatteryScreenOffRealtime(500_000, STATS_SINCE_CHARGED));
+        assertEquals(110_000, bi.getScreenOnTime(500_000, STATS_SINCE_CHARGED));
+        assertEquals(100_000, bi.getScreenDozeTime(500_000, STATS_SINCE_CHARGED));
+        assertEquals(110_000, bi.getDisplayScreenOnTime(0, 500_000));
+        assertEquals(100_000, bi.getDisplayScreenDozeTime(0, 500_000));
+        assertEquals(0, bi.getDisplayScreenOnTime(1, 500_000));
+        assertEquals(0, bi.getDisplayScreenDozeTime(1, 500_000));
+
+        clocks.realtime = clocks.uptime = 1000;
+        bi.noteScreenStateLocked(0, Display.STATE_OFF);
+        assertEquals(1000_000, bi.computeBatteryRealtime(1100_000, STATS_SINCE_CHARGED));
+        assertEquals(890_000, bi.computeBatteryScreenOffRealtime(1100_000, STATS_SINCE_CHARGED));
+        assertEquals(110_000, bi.getScreenOnTime(1100_000, STATS_SINCE_CHARGED));
+        assertEquals(600_000, bi.getScreenDozeTime(1100_000, STATS_SINCE_CHARGED));
+        assertEquals(110_000, bi.getDisplayScreenOnTime(0, 1100_000));
+        assertEquals(600_000, bi.getDisplayScreenDozeTime(0, 1100_000));
+        assertEquals(0, bi.getDisplayScreenOnTime(1, 1100_000));
+        assertEquals(0, bi.getDisplayScreenDozeTime(1, 1100_000));
+
+        clocks.realtime = clocks.uptime = 1200;
+        // Change state of second display to doze
+        bi.noteScreenStateLocked(1, Display.STATE_DOZE);
+        assertEquals(1150_000, bi.computeBatteryRealtime(1250_000, STATS_SINCE_CHARGED));
+        assertEquals(1040_000, bi.computeBatteryScreenOffRealtime(1250_000, STATS_SINCE_CHARGED));
+        assertEquals(110_000, bi.getScreenOnTime(1250_000, STATS_SINCE_CHARGED));
+        assertEquals(650_000, bi.getScreenDozeTime(1250_000, STATS_SINCE_CHARGED));
+        assertEquals(110_000, bi.getDisplayScreenOnTime(0, 1250_000));
+        assertEquals(600_000, bi.getDisplayScreenDozeTime(0, 1250_000));
+        assertEquals(0, bi.getDisplayScreenOnTime(1, 1250_000));
+        assertEquals(50_000, bi.getDisplayScreenDozeTime(1, 1250_000));
+
+        clocks.realtime = clocks.uptime = 1310;
+        bi.noteScreenStateLocked(0, Display.STATE_ON);
+        assertEquals(1250_000, bi.computeBatteryRealtime(1350_000, STATS_SINCE_CHARGED));
+        assertEquals(1100_000, bi.computeBatteryScreenOffRealtime(1350_000, STATS_SINCE_CHARGED));
+        assertEquals(150_000, bi.getScreenOnTime(1350_000, STATS_SINCE_CHARGED));
+        assertEquals(710_000, bi.getScreenDozeTime(1350_000, STATS_SINCE_CHARGED));
+        assertEquals(150_000, bi.getDisplayScreenOnTime(0, 1350_000));
+        assertEquals(600_000, bi.getDisplayScreenDozeTime(0, 1350_000));
+        assertEquals(0, bi.getDisplayScreenOnTime(1, 1350_000));
+        assertEquals(150_000, bi.getDisplayScreenDozeTime(1, 1350_000));
+
+        clocks.realtime = clocks.uptime = 1400;
+        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
+        assertEquals(1400_000, bi.computeBatteryRealtime(1500_000, STATS_SINCE_CHARGED));
+        assertEquals(1200_000, bi.computeBatteryScreenOffRealtime(1500_000, STATS_SINCE_CHARGED));
+        assertEquals(200_000, bi.getScreenOnTime(1500_000, STATS_SINCE_CHARGED));
+        assertEquals(810_000, bi.getScreenDozeTime(1500_000, STATS_SINCE_CHARGED));
+        assertEquals(200_000, bi.getDisplayScreenOnTime(0, 1500_000));
+        assertEquals(700_000, bi.getDisplayScreenDozeTime(0, 1500_000));
+        assertEquals(0, bi.getDisplayScreenOnTime(1, 1500_000));
+        assertEquals(300_000, bi.getDisplayScreenDozeTime(1, 1500_000));
+
+        clocks.realtime = clocks.uptime = 2000;
+        bi.noteScreenStateLocked(0, Display.STATE_OFF);
+        assertEquals(2000_000, bi.computeBatteryRealtime(2100_000, STATS_SINCE_CHARGED));
+        assertEquals(1800_000, bi.computeBatteryScreenOffRealtime(2100_000, STATS_SINCE_CHARGED));
+        assertEquals(200_000, bi.getScreenOnTime(2100_000, STATS_SINCE_CHARGED));
+        assertEquals(1410_000, bi.getScreenDozeTime(2100_000, STATS_SINCE_CHARGED));
+        assertEquals(200_000, bi.getDisplayScreenOnTime(0, 2100_000));
+        assertEquals(1200_000, bi.getDisplayScreenDozeTime(0, 2100_000));
+        assertEquals(0, bi.getDisplayScreenOnTime(1, 2100_000));
+        assertEquals(900_000, bi.getDisplayScreenDozeTime(1, 2100_000));
+
+
+        clocks.realtime = clocks.uptime = 2200;
+        // Change state of second display to on
+        bi.noteScreenStateLocked(1, Display.STATE_ON);
+        assertEquals(2150_000, bi.computeBatteryRealtime(2250_000, STATS_SINCE_CHARGED));
+        assertEquals(1900_000, bi.computeBatteryScreenOffRealtime(2250_000, STATS_SINCE_CHARGED));
+        assertEquals(250_000, bi.getScreenOnTime(2250_000, STATS_SINCE_CHARGED));
+        assertEquals(1510_000, bi.getScreenDozeTime(2250_000, STATS_SINCE_CHARGED));
+        assertEquals(200_000, bi.getDisplayScreenOnTime(0, 2250_000));
+        assertEquals(1200_000, bi.getDisplayScreenDozeTime(0, 2250_000));
+        assertEquals(50_000, bi.getDisplayScreenOnTime(1, 2250_000));
+        assertEquals(1000_000, bi.getDisplayScreenDozeTime(1, 2250_000));
+
+        clocks.realtime = clocks.uptime = 2310;
+        bi.noteScreenStateLocked(0, Display.STATE_ON);
+        assertEquals(2250_000, bi.computeBatteryRealtime(2350_000, STATS_SINCE_CHARGED));
+        assertEquals(1900_000, bi.computeBatteryScreenOffRealtime(2350_000, STATS_SINCE_CHARGED));
+        assertEquals(350_000, bi.getScreenOnTime(2350_000, STATS_SINCE_CHARGED));
+        assertEquals(1510_000, bi.getScreenDozeTime(2350_000, STATS_SINCE_CHARGED));
+        assertEquals(240_000, bi.getDisplayScreenOnTime(0, 2350_000));
+        assertEquals(1200_000, bi.getDisplayScreenDozeTime(0, 2350_000));
+        assertEquals(150_000, bi.getDisplayScreenOnTime(1, 2350_000));
+        assertEquals(1000_000, bi.getDisplayScreenDozeTime(1, 2350_000));
+
+        clocks.realtime = clocks.uptime = 2400;
+        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
+        assertEquals(2400_000, bi.computeBatteryRealtime(2500_000, STATS_SINCE_CHARGED));
+        assertEquals(1900_000, bi.computeBatteryScreenOffRealtime(2500_000, STATS_SINCE_CHARGED));
+        assertEquals(500_000, bi.getScreenOnTime(2500_000, STATS_SINCE_CHARGED));
+        assertEquals(1510_000, bi.getScreenDozeTime(2500_000, STATS_SINCE_CHARGED));
+        assertEquals(290_000, bi.getDisplayScreenOnTime(0, 2500_000));
+        assertEquals(1300_000, bi.getDisplayScreenDozeTime(0, 2500_000));
+        assertEquals(300_000, bi.getDisplayScreenOnTime(1, 2500_000));
+        assertEquals(1000_000, bi.getDisplayScreenDozeTime(1, 2500_000));
+
+        clocks.realtime = clocks.uptime = 3000;
+        bi.noteScreenStateLocked(0, Display.STATE_OFF);
+        assertEquals(3000_000, bi.computeBatteryRealtime(3100_000, STATS_SINCE_CHARGED));
+        assertEquals(1900_000, bi.computeBatteryScreenOffRealtime(3100_000, STATS_SINCE_CHARGED));
+        assertEquals(1100_000, bi.getScreenOnTime(3100_000, STATS_SINCE_CHARGED));
+        assertEquals(1510_000, bi.getScreenDozeTime(3100_000, STATS_SINCE_CHARGED));
+        assertEquals(290_000, bi.getDisplayScreenOnTime(0, 3100_000));
+        assertEquals(1800_000, bi.getDisplayScreenDozeTime(0, 3100_000));
+        assertEquals(900_000, bi.getDisplayScreenOnTime(1, 3100_000));
+        assertEquals(1000_000, bi.getDisplayScreenDozeTime(1, 3100_000));
+    }
+
+
+    /**
+     * Test BatteryStatsImpl.noteScreenBrightnessLocked updates timers correctly.
+     */
+    @SmallTest
+    public void testScreenBrightnessLocked_multiDisplay() throws Exception {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+
+        final int numDisplay = 2;
+        bi.setDisplayCountLocked(numDisplay);
+
+
+        final long[] overallExpected = new long[NUM_SCREEN_BRIGHTNESS_BINS];
+        final long[][] perDisplayExpected = new long[numDisplay][NUM_SCREEN_BRIGHTNESS_BINS];
+        class Bookkeeper {
+            public long currentTimeMs = 100;
+            public int overallActiveBin = -1;
+            public int[] perDisplayActiveBin = new int[numDisplay];
+        }
+        final Bookkeeper bk = new Bookkeeper();
+        Arrays.fill(bk.perDisplayActiveBin, -1);
+
+        IntConsumer incrementTime = inc -> {
+            bk.currentTimeMs += inc;
+            if (bk.overallActiveBin >= 0) {
+                overallExpected[bk.overallActiveBin] += inc;
+            }
+            for (int i = 0; i < numDisplay; i++) {
+                final int bin = bk.perDisplayActiveBin[i];
+                if (bin >= 0) {
+                    perDisplayExpected[i][bin] += inc;
+                }
+            }
+            clocks.realtime = clocks.uptime = bk.currentTimeMs;
+        };
+
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
+        bi.noteScreenStateLocked(0, Display.STATE_ON);
+        bi.noteScreenStateLocked(1, Display.STATE_ON);
+
+        incrementTime.accept(100);
+        bi.noteScreenBrightnessLocked(0, 25);
+        bi.noteScreenBrightnessLocked(1, 25);
+        // floor(25/256*5) = bin 0
+        bk.overallActiveBin = 0;
+        bk.perDisplayActiveBin[0] = 0;
+        bk.perDisplayActiveBin[1] = 0;
+
+        incrementTime.accept(50);
+        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
+
+        incrementTime.accept(13);
+        bi.noteScreenBrightnessLocked(0, 100);
+        // floor(25/256*5) = bin 1
+        bk.overallActiveBin = 1;
+        bk.perDisplayActiveBin[0] = 1;
+
+        incrementTime.accept(44);
+        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
+
+        incrementTime.accept(22);
+        bi.noteScreenBrightnessLocked(1, 200);
+        // floor(200/256*5) = bin 3
+        bk.overallActiveBin = 3;
+        bk.perDisplayActiveBin[1] = 3;
+
+        incrementTime.accept(33);
+        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
+
+        incrementTime.accept(77);
+        bi.noteScreenBrightnessLocked(0, 150);
+        // floor(150/256*5) = bin 2
+        // Overall active bin should not change
+        bk.perDisplayActiveBin[0] = 2;
+
+        incrementTime.accept(88);
+        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
+
+        incrementTime.accept(11);
+        bi.noteScreenStateLocked(1, Display.STATE_OFF);
+        // Display 1 should timers should stop incrementing
+        // Overall active bin should fallback to display 0's bin
+        bk.overallActiveBin = 2;
+        bk.perDisplayActiveBin[1] = -1;
+
+        incrementTime.accept(99);
+        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
+
+        incrementTime.accept(200);
+        bi.noteScreenBrightnessLocked(0, 255);
+        // floor(150/256*5) = bin 4
+        bk.overallActiveBin = 4;
+        bk.perDisplayActiveBin[0] = 4;
+
+        incrementTime.accept(300);
+        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
+
+        incrementTime.accept(200);
+        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
+        // No displays are on. No brightness timers should be active.
+        bk.overallActiveBin = -1;
+        bk.perDisplayActiveBin[0] = -1;
+
+        incrementTime.accept(300);
+        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
+
+        incrementTime.accept(400);
+        bi.noteScreenStateLocked(1, Display.STATE_ON);
+        // Display 1 turned back on.
+        bk.overallActiveBin = 3;
+        bk.perDisplayActiveBin[1] = 3;
+
+        incrementTime.accept(500);
+        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
+
+        incrementTime.accept(600);
+        bi.noteScreenStateLocked(0, Display.STATE_ON);
+        // Display 0 turned back on.
+        bk.overallActiveBin = 4;
+        bk.perDisplayActiveBin[0] = 4;
+
+        incrementTime.accept(700);
+        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
+    }
+
+    @SmallTest
+    public void testAlarmStartAndFinishLocked() throws Exception {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.setRecordAllHistoryLocked(true);
+        bi.forceRecordAllHistory();
+
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
+
+        clocks.realtime = clocks.uptime = 100;
+        bi.noteAlarmStartLocked("foo", null, UID);
+        clocks.realtime = clocks.uptime = 5000;
+        bi.noteAlarmFinishLocked("foo", null, UID);
+
+        BatteryStatsHistoryIterator iterator = bi.iterateBatteryStatsHistory();
+        HistoryItem item;
+
+        assertThat(item = iterator.next()).isNotNull();
+        assertEquals(HistoryItem.CMD_RESET, item.cmd);
+        assertEquals(HistoryItem.EVENT_NONE, item.eventCode);
+
+        assertThat(item = iterator.next()).isNotNull();
+        assertEquals(HistoryItem.EVENT_ALARM_START, item.eventCode);
+        assertEquals("foo", item.eventTag.string);
+        assertEquals(UID, item.eventTag.uid);
+
+        assertThat(item = iterator.next()).isNotNull();
+        assertEquals(HistoryItem.EVENT_ALARM_FINISH, item.eventCode);
+        assertTrue(item.isDeltaData());
+        assertEquals("foo", item.eventTag.string);
+        assertEquals(UID, item.eventTag.uid);
+
+        assertThat(iterator.hasNext()).isFalse();
+        assertThat(iterator.next()).isNull();
+    }
+
+    @SmallTest
+    public void testAlarmStartAndFinishLocked_workSource() throws Exception {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.setRecordAllHistoryLocked(true);
+        bi.forceRecordAllHistory();
+
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
+
+        WorkSource ws = new WorkSource();
+        ws.add(100);
+        ws.createWorkChain().addNode(500, "tag");
+        bi.noteAlarmStartLocked("foo", ws, UID);
+        clocks.realtime = clocks.uptime = 5000;
+        bi.noteAlarmFinishLocked("foo", ws, UID);
+
+        BatteryStatsHistoryIterator iterator = bi.iterateBatteryStatsHistory();
+        HistoryItem item;
+
+        assertThat(item = iterator.next()).isNotNull();
+        assertEquals(HistoryItem.CMD_RESET, item.cmd);
+        assertEquals(HistoryItem.EVENT_NONE, item.eventCode);
+
+        assertThat(item = iterator.next()).isNotNull();
+        assertEquals(HistoryItem.EVENT_ALARM_START, item.eventCode);
+        assertEquals("foo", item.eventTag.string);
+        assertEquals(100, item.eventTag.uid);
+
+        assertThat(item = iterator.next()).isNotNull();
+        assertEquals(HistoryItem.EVENT_ALARM_START, item.eventCode);
+        assertEquals("foo", item.eventTag.string);
+        assertEquals(500, item.eventTag.uid);
+
+        assertThat(item = iterator.next()).isNotNull();
+        assertEquals(HistoryItem.EVENT_ALARM_FINISH, item.eventCode);
+        assertEquals("foo", item.eventTag.string);
+        assertEquals(100, item.eventTag.uid);
+
+        assertThat(item = iterator.next()).isNotNull();
+        assertEquals(HistoryItem.EVENT_ALARM_FINISH, item.eventCode);
+        assertEquals("foo", item.eventTag.string);
+        assertEquals(500, item.eventTag.uid);
+    }
+
+    @SmallTest
+    public void testNoteWakupAlarmLocked() {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.setRecordAllHistoryLocked(true);
+        bi.forceRecordAllHistory();
+        bi.mForceOnBattery = true;
+
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
+
+        bi.noteWakupAlarmLocked("com.foo.bar", UID, null, "tag");
+
+        BatteryStats.Uid.Pkg pkg = bi.getPackageStatsLocked(UID, "com.foo.bar");
+        assertEquals(1, pkg.getWakeupAlarmStats().get("tag").getCountLocked(STATS_SINCE_CHARGED));
+        assertEquals(1, pkg.getWakeupAlarmStats().size());
+    }
+
+    @SmallTest
+    public void testNoteWakupAlarmLocked_workSource_uid() {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.setRecordAllHistoryLocked(true);
+        bi.forceRecordAllHistory();
+        bi.mForceOnBattery = true;
+
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
+
+        WorkSource ws = new WorkSource();
+        ws.add(100);
+
+        // When a WorkSource is present, "UID" should not be used - only the uids present in the
+        // WorkSource should be reported.
+        bi.noteWakupAlarmLocked("com.foo.bar", UID, ws, "tag");
+        BatteryStats.Uid.Pkg pkg = bi.getPackageStatsLocked(UID, "com.foo.bar");
+        assertEquals(0, pkg.getWakeupAlarmStats().size());
+        pkg = bi.getPackageStatsLocked(100, "com.foo.bar");
+        assertEquals(1, pkg.getWakeupAlarmStats().size());
+
+        // If the WorkSource contains a "name", it should be interpreted as a package name and
+        // the packageName supplied as an argument must be ignored.
+        ws = new WorkSource();
+        ws.add(100, "com.foo.baz_alternate");
+        bi.noteWakupAlarmLocked("com.foo.baz", UID, ws, "tag");
+        pkg = bi.getPackageStatsLocked(100, "com.foo.baz");
+        assertEquals(0, pkg.getWakeupAlarmStats().size());
+        pkg = bi.getPackageStatsLocked(100, "com.foo.baz_alternate");
+        assertEquals(1, pkg.getWakeupAlarmStats().size());
+    }
+
+    @SmallTest
+    public void testNoteWakupAlarmLocked_workSource_workChain() {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.setRecordAllHistoryLocked(true);
+        bi.forceRecordAllHistory();
+        bi.mForceOnBattery = true;
+
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
+
+        WorkSource ws = new WorkSource();
+        ws.createWorkChain().addNode(100, "com.foo.baz_alternate");
+        bi.noteWakupAlarmLocked("com.foo.bar", UID, ws, "tag");
+
+        // For WorkChains, again we must only attribute to the uids present in the WorkSource
+        // (and not to "UID"). However, unlike the older "tags" we do not change the packagename
+        // supplied as an argument, given that we're logging the entire attribution chain.
+        BatteryStats.Uid.Pkg pkg = bi.getPackageStatsLocked(UID, "com.foo.bar");
+        assertEquals(0, pkg.getWakeupAlarmStats().size());
+        pkg = bi.getPackageStatsLocked(100, "com.foo.bar");
+        assertEquals(1, pkg.getWakeupAlarmStats().size());
+        pkg = bi.getPackageStatsLocked(100, "com.foo.baz_alternate");
+        assertEquals(0, pkg.getWakeupAlarmStats().size());
+    }
+
+    @SmallTest
+    public void testNoteGpsChanged() {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.setRecordAllHistoryLocked(true);
+        bi.forceRecordAllHistory();
+        bi.mForceOnBattery = true;
+
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
+
+        WorkSource ws = new WorkSource();
+        ws.add(UID);
+
+        bi.noteGpsChangedLocked(new WorkSource(), ws);
+        DualTimer t = bi.getUidStatsLocked(UID).getSensorTimerLocked(Sensor.GPS, false);
+        assertNotNull(t);
+        assertTrue(t.isRunningLocked());
+
+        bi.noteGpsChangedLocked(ws, new WorkSource());
+        t = bi.getUidStatsLocked(UID).getSensorTimerLocked(Sensor.GPS, false);
+        assertFalse(t.isRunningLocked());
+    }
+
+    @SmallTest
+    public void testNoteGpsChanged_workSource() {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.setRecordAllHistoryLocked(true);
+        bi.forceRecordAllHistory();
+        bi.mForceOnBattery = true;
+
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
+
+        WorkSource ws = new WorkSource();
+        ws.createWorkChain().addNode(UID, "com.foo");
+
+        bi.noteGpsChangedLocked(new WorkSource(), ws);
+        DualTimer t = bi.getUidStatsLocked(UID).getSensorTimerLocked(Sensor.GPS, false);
+        assertNotNull(t);
+        assertTrue(t.isRunningLocked());
+
+        bi.noteGpsChangedLocked(ws, new WorkSource());
+        t = bi.getUidStatsLocked(UID).getSensorTimerLocked(Sensor.GPS, false);
+        assertFalse(t.isRunningLocked());
+    }
+
+    @SmallTest
+    public void testUpdateDisplayMeasuredEnergyStatsLocked() {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.initMeasuredEnergyStats(new String[]{"FOO", "BAR"});
+
+        clocks.realtime = 0;
+        int[] screen = new int[]{Display.STATE_OFF};
+        boolean battery = false;
+
+        final int uid1 = 10500;
+        final int uid2 = 10501;
+        long blame1 = 0;
+        long blame2 = 0;
+        long globalDoze = 0;
+
+        // Case A: uid1 off, uid2 off, battery off, screen off
+        bi.updateTimeBasesLocked(battery, screen[0], clocks.realtime * 1000, 0);
+        bi.setOnBatteryInternal(battery);
+        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{500_000}, screen, clocks.realtime);
+        checkMeasuredCharge("A", uid1, blame1, uid2, blame2, globalDoze, bi);
+
+        // Case B: uid1 off, uid2 off, battery ON,  screen off
+        clocks.realtime += 17;
+        battery = true;
+        bi.updateTimeBasesLocked(battery, screen[0], clocks.realtime * 1000, 0);
+        bi.setOnBatteryInternal(battery);
+        clocks.realtime += 19;
+        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{510_000}, screen, clocks.realtime);
+        checkMeasuredCharge("B", uid1, blame1, uid2, blame2, globalDoze, bi);
+
+        // Case C: uid1 ON,  uid2 off, battery on,  screen off
+        clocks.realtime += 18;
+        setFgState(uid1, true, bi);
+        clocks.realtime += 18;
+        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{520_000}, screen, clocks.realtime);
+        checkMeasuredCharge("C", uid1, blame1, uid2, blame2, globalDoze, bi);
+
+        // Case D: uid1 on,  uid2 off, battery on,  screen ON
+        clocks.realtime += 17;
+        screen[0] = Display.STATE_ON;
+        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{521_000}, screen, clocks.realtime);
+        blame1 += 0; // Screen had been off during the measurement period
+        checkMeasuredCharge("D.1", uid1, blame1, uid2, blame2, globalDoze, bi);
+        clocks.realtime += 101;
+        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{530_000}, screen, clocks.realtime);
+        blame1 += 530_000;
+        checkMeasuredCharge("D.2", uid1, blame1, uid2, blame2, globalDoze, bi);
+
+        // Case E: uid1 on,  uid2 ON,  battery on,  screen on
+        clocks.realtime += 20;
+        setFgState(uid2, true, bi);
+        clocks.realtime += 40;
+        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{540_000}, screen, clocks.realtime);
+        // In the past 60ms, sum of fg is 20+40+40=100ms. uid1 is blamed for 60/100; uid2 for 40/100
+        blame1 += 540_000 * (20 + 40) / (20 + 40 + 40);
+        blame2 += 540_000 * (0 + 40) / (20 + 40 + 40);
+        checkMeasuredCharge("E", uid1, blame1, uid2, blame2, globalDoze, bi);
+
+        // Case F: uid1 on,  uid2 OFF, battery on,  screen on
+        clocks.realtime += 40;
+        setFgState(uid2, false, bi);
+        clocks.realtime += 120;
+        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{550_000}, screen, clocks.realtime);
+        // In the past 160ms, sum f fg is 200ms. uid1 is blamed for 40+120 of it; uid2 for 40 of it.
+        blame1 += 550_000 * (40 + 120) / (40 + 40 + 120);
+        blame2 += 550_000 * (40 + 0) / (40 + 40 + 120);
+        checkMeasuredCharge("F", uid1, blame1, uid2, blame2, globalDoze, bi);
+
+        // Case G: uid1 on,  uid2 off,  battery on, screen DOZE
+        clocks.realtime += 5;
+        screen[0] = Display.STATE_DOZE;
+        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{570_000}, screen, clocks.realtime);
+        blame1 += 570_000; // All of this pre-doze time is blamed on uid1.
+        checkMeasuredCharge("G", uid1, blame1, uid2, blame2, globalDoze, bi);
+
+        // Case H: uid1 on,  uid2 off,  battery on, screen ON
+        clocks.realtime += 6;
+        screen[0] = Display.STATE_ON;
+        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{580_000}, screen, clocks.realtime);
+        blame1 += 0; // The screen had been doze during the energy period
+        globalDoze += 580_000;
+        checkMeasuredCharge("H", uid1, blame1, uid2, blame2, globalDoze, bi);
+    }
+
+    @SmallTest
+    public void testUpdateCustomMeasuredEnergyStatsLocked_neverCalled() {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.initMeasuredEnergyStats(new String[]{"FOO", "BAR"});
+        bi.setOnBatteryInternal(true);
+
+        final int uid1 = 11500;
+        final int uid2 = 11501;
+
+        // Initially, all custom buckets report charge of 0.
+        checkCustomBatteryConsumption("0", 0, 0, uid1, 0, 0, uid2, 0, 0, bi);
+    }
+
+    @SmallTest
+    public void testUpdateCustomMeasuredEnergyStatsLocked() {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.initMeasuredEnergyStats(new String[]{"FOO", "BAR"});
+
+        final int bucketA = 0; // Custom bucket 0
+        final int bucketB = 1; // Custom bucket 1
+
+        long totalBlameA = 0; // Total charge consumption for bucketA (may exceed sum of uids)
+        long totalBlameB = 0; // Total charge consumption for bucketB (may exceed sum of uids)
+
+        final int uid1 = 10500;
+        long blame1A = 0; // Blame for uid1 in bucketA
+        long blame1B = 0; // Blame for uid1 in bucketB
+
+        final int uid2 = 10501;
+        long blame2A = 0; // Blame for uid2 in bucketA
+        long blame2B = 0; // Blame for uid2 in bucketB
+
+        final SparseLongArray newChargesA = new SparseLongArray(2);
+        final SparseLongArray newChargesB = new SparseLongArray(2);
+
+
+        // ----- Case A: battery off (so blame does not increase)
+        bi.setOnBatteryInternal(false);
+
+        newChargesA.put(uid1, 20_000);
+        // Implicit newChargesA.put(uid2, 0);
+        bi.updateCustomEnergyConsumerStatsLocked(bucketA, 500_000, newChargesA);
+
+        newChargesB.put(uid1, 60_000);
+        // Implicit newChargesB.put(uid2, 0);
+        bi.updateCustomEnergyConsumerStatsLocked(bucketB, 700_000, newChargesB);
+
+        checkCustomBatteryConsumption(
+                "A", totalBlameA, totalBlameB, uid1, blame1A, blame1B, uid2, blame2A, blame2B, bi);
+
+
+        // ----- Case B: battery on
+        bi.setOnBatteryInternal(true);
+
+        newChargesA.put(uid1, 7_000); blame1A += 7_000;
+        // Implicit newChargesA.put(uid2, 0); blame2A += 0;
+        bi.updateCustomEnergyConsumerStatsLocked(bucketA, 310_000, newChargesA);
+        totalBlameA += 310_000;
+
+        newChargesB.put(uid1, 63_000); blame1B += 63_000;
+        newChargesB.put(uid2, 15_000); blame2B += 15_000;
+        bi.updateCustomEnergyConsumerStatsLocked(bucketB, 790_000, newChargesB);
+        totalBlameB += 790_000;
+
+        checkCustomBatteryConsumption(
+                "B", totalBlameA, totalBlameB, uid1, blame1A, blame1B, uid2, blame2A, blame2B, bi);
+
+
+        // ----- Case C: battery still on
+        newChargesA.delete(uid1); blame1A += 0;
+        newChargesA.put(uid2, 16_000); blame2A += 16_000;
+        bi.updateCustomEnergyConsumerStatsLocked(bucketA, 560_000, newChargesA);
+        totalBlameA += 560_000;
+
+        bi.updateCustomEnergyConsumerStatsLocked(bucketB, 10_000, null);
+        totalBlameB += 10_000;
+
+        checkCustomBatteryConsumption(
+                "C", totalBlameA, totalBlameB, uid1, blame1A, blame1B, uid2, blame2A, blame2B, bi);
+
+
+        // ----- Case D: battery still on
+        bi.updateCustomEnergyConsumerStatsLocked(bucketA, 0, newChargesA);
+        bi.updateCustomEnergyConsumerStatsLocked(bucketB, 15_000, new SparseLongArray(1));
+        totalBlameB += 15_000;
+        checkCustomBatteryConsumption(
+                "D", totalBlameA, totalBlameB, uid1, blame1A, blame1B, uid2, blame2A, blame2B, bi);
+    }
+
+    @SmallTest
+    public void testGetPerStateActiveRadioDurationMs_noModemActivity() {
+        final MockClock clock = new MockClock(); // holds realtime and uptime in ms
+        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clock);
+        final int ratCount = RADIO_ACCESS_TECHNOLOGY_COUNT;
+        final int frequencyCount = ServiceState.FREQUENCY_RANGE_MMWAVE + 1;
+        final int txLevelCount = CellSignalStrength.getNumSignalStrengthLevels();
+
+        final long[][][] expectedDurationsMs = new long[ratCount][frequencyCount][txLevelCount];
+        final long[][] expectedRxDurationsMs = new long[ratCount][frequencyCount];
+        final long[][][] expectedTxDurationsMs = new long[ratCount][frequencyCount][txLevelCount];
+        for (int rat = 0; rat < ratCount; rat++) {
+            for (int freq = 0; freq < frequencyCount; freq++) {
+                // Should have no RX data without Modem Activity Info
+                expectedRxDurationsMs[rat][freq] = POWER_DATA_UNAVAILABLE;
+                for (int txLvl = 0; txLvl < txLevelCount; txLvl++) {
+                    expectedDurationsMs[rat][freq][txLvl] = 0;
+                    // Should have no TX data without Modem Activity Info
+                    expectedTxDurationsMs[rat][freq][txLvl] = POWER_DATA_UNAVAILABLE;
+                }
+            }
+        }
+
+        final ModemAndBatteryState state = new ModemAndBatteryState(bi, null, null);
+
+        IntConsumer incrementTime = inc -> {
+            state.currentTimeMs += inc;
+            clock.realtime = clock.uptime = state.currentTimeMs;
+
+            // If the device is not on battery, no timers should increment.
+            if (!state.onBattery) return;
+            // If the modem is not active, no timers should increment.
+            if (!state.modemActive) return;
+
+            final int currentRat = state.currentRat;
+            final int currentFrequencyRange =
+                    currentRat == RADIO_ACCESS_TECHNOLOGY_NR ? state.currentFrequencyRange : 0;
+            int currentSignalStrength = state.currentSignalStrengths.get(currentRat);
+            expectedDurationsMs[currentRat][currentFrequencyRange][currentSignalStrength] += inc;
+        };
+
+
+        state.setOnBattery(false);
+        state.setModemActive(false);
+        state.setRatType(TelephonyManager.NETWORK_TYPE_UNKNOWN,
+                BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER);
+        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_UNKNOWN);
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
+                CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // While not on battery, the timers should not increase.
+        state.setModemActive(true);
+        incrementTime.accept(100);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setRatType(TelephonyManager.NETWORK_TYPE_NR, BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR);
+        incrementTime.accept(200);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR,
+                CellSignalStrength.SIGNAL_STRENGTH_GOOD);
+        incrementTime.accept(500);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_MMWAVE);
+        incrementTime.accept(300);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setRatType(TelephonyManager.NETWORK_TYPE_LTE,
+                BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE);
+        incrementTime.accept(400);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_MODERATE);
+        incrementTime.accept(500);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // When set on battery, currently active state (RAT:LTE, Signal Strength:Moderate) should
+        // start counting up.
+        state.setOnBattery(true);
+        incrementTime.accept(600);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+        // Changing LTE signal strength should be tracked.
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_POOR);
+        incrementTime.accept(700);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        incrementTime.accept(800);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_GOOD);
+        incrementTime.accept(900);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_GREAT);
+        incrementTime.accept(1000);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Change in the signal strength of nonactive RAT should not affect anything.
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
+                CellSignalStrength.SIGNAL_STRENGTH_POOR);
+        incrementTime.accept(1100);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Changing to OTHER Rat should start tracking the poor signal strength.
+        state.setRatType(TelephonyManager.NETWORK_TYPE_CDMA,
+                BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER);
+        incrementTime.accept(1200);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Noting frequency change should not affect non NR Rat.
+        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_HIGH);
+        incrementTime.accept(1300);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Now the NR Rat, HIGH frequency range, good signal strength should start counting.
+        state.setRatType(TelephonyManager.NETWORK_TYPE_NR, BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR);
+        incrementTime.accept(1400);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Noting frequency change should not affect non NR Rat.
+        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_LOW);
+        incrementTime.accept(1500);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Modem no longer active, should not be tracking any more.
+        state.setModemActive(false);
+        incrementTime.accept(1500);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+    }
+
+    @SmallTest
+    public void testGetPerStateActiveRadioDurationMs_initialModemActivity() {
+        final MockClock clock = new MockClock(); // holds realtime and uptime in ms
+        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clock);
+        bi.setPowerProfile(mock(PowerProfile.class));
+
+        final int ratCount = RADIO_ACCESS_TECHNOLOGY_COUNT;
+        final int frequencyCount = ServiceState.FREQUENCY_RANGE_MMWAVE + 1;
+        final int txLevelCount = CellSignalStrength.getNumSignalStrengthLevels();
+
+        List<ActivityStatsTechSpecificInfo> specificInfoList = new ArrayList();
+
+        final long[][][] expectedDurationsMs = new long[ratCount][frequencyCount][txLevelCount];
+        final long[][] expectedRxDurationsMs = new long[ratCount][frequencyCount];
+        final long[][][] expectedTxDurationsMs = new long[ratCount][frequencyCount][txLevelCount];
+        for (int rat = 0; rat < ratCount; rat++) {
+            for (int freq = 0; freq < frequencyCount; freq++) {
+                if (rat == RADIO_ACCESS_TECHNOLOGY_NR
+                        || freq == ServiceState.FREQUENCY_RANGE_UNKNOWN) {
+                    // Only the NR RAT should have per frequency data.
+                    expectedRxDurationsMs[rat][freq] = 0;
+                } else {
+                    expectedRxDurationsMs[rat][freq] = POWER_DATA_UNAVAILABLE;
+                }
+                for (int txLvl = 0; txLvl < txLevelCount; txLvl++) {
+                    if (rat == RADIO_ACCESS_TECHNOLOGY_NR
+                            || freq == ServiceState.FREQUENCY_RANGE_UNKNOWN) {
+                        // Only the NR RAT should have per frequency data.
+                        expectedTxDurationsMs[rat][freq][txLvl] = 0;
+                    } else {
+                        expectedTxDurationsMs[rat][freq][txLvl] = POWER_DATA_UNAVAILABLE;
+                    }
+                }
+            }
+        }
+
+        // The first modem activity pulled from modem with activity stats for each RATs.
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.UNKNOWN,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 101));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.GERAN,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 202));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.UTRAN,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 303));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.EUTRAN,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[]{3, 9, 133, 48, 218}, 404));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.CDMA2000,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 505));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.IWLAN,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 606));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 707));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN,
+                ServiceState.FREQUENCY_RANGE_LOW, new int[txLevelCount], 808));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN,
+                ServiceState.FREQUENCY_RANGE_MID, new int[txLevelCount], 909));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN,
+                ServiceState.FREQUENCY_RANGE_HIGH, new int[txLevelCount], 1010));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN,
+                ServiceState.FREQUENCY_RANGE_MMWAVE, new int[txLevelCount], 1111));
+
+
+        final ActivityStatsTechSpecificInfo[] specificInfos = specificInfoList.toArray(
+                new ActivityStatsTechSpecificInfo[specificInfoList.size()]);
+        final ModemActivityInfo mai = new ModemActivityInfo(0L, 2002L, 3003L, specificInfos);
+        final ModemAndBatteryState state = new ModemAndBatteryState(bi, mai, specificInfos);
+
+
+        IntConsumer incrementTime = inc -> {
+            state.currentTimeMs += inc;
+            clock.realtime = clock.uptime = state.currentTimeMs;
+
+            final int currRat = state.currentRat;
+            final int currRant = state.currentRadioAccessNetworkType;
+            final int currFreqRange =
+                    currRat == RADIO_ACCESS_TECHNOLOGY_NR ? state.currentFrequencyRange : 0;
+            int currSignalStrength = state.currentSignalStrengths.get(currRat);
+
+            if (state.modemActive) {
+                // Don't count the duration if the modem is not active
+                expectedDurationsMs[currRat][currFreqRange][currSignalStrength] += inc;
+            }
+
+            // Evaluate the HAL provided time in states.
+            final ActivityStatsTechSpecificInfo info = state.getSpecificInfo(currRant,
+                    currFreqRange);
+            switch (state.modemState) {
+                case SLEEP:
+                    long sleepMs = state.modemActivityInfo.getSleepTimeMillis();
+                    state.modemActivityInfo.setSleepTimeMillis(sleepMs + inc);
+                    break;
+                case IDLE:
+                    long idleMs = state.modemActivityInfo.getIdleTimeMillis();
+                    state.modemActivityInfo.setIdleTimeMillis(idleMs + inc);
+                    break;
+                case RECEIVING:
+                    long rxMs = info.getReceiveTimeMillis();
+                    info.setReceiveTimeMillis(rxMs + inc);
+                    expectedRxDurationsMs[currRat][currFreqRange] += inc;
+                    break;
+                case TRANSMITTING:
+                    int[] txMs = info.getTransmitTimeMillis().clone();
+                    txMs[currSignalStrength] += inc;
+                    info.setTransmitTimeMillis(txMs);
+                    expectedTxDurationsMs[currRat][currFreqRange][currSignalStrength] += inc;
+                    break;
+            }
+        };
+
+        // On battery, but the modem is not active
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, state.currentTimeMs * 1000,
+                state.currentTimeMs * 1000);
+        bi.setOnBatteryInternal(true);
+        state.noteModemControllerActivity();
+        // Ensure the first modem activity should not be counted up.
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+        // Start counting.
+        state.setRatType(TelephonyManager.NETWORK_TYPE_NR, BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR,
+                AccessNetworkConstants.AccessNetworkType.NGRAN);
+        // Frequency changed to low.
+        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_LOW);
+        incrementTime.accept(300);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(500);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(600);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+    }
+
+    @SmallTest
+    public void testGetPerStateActiveRadioDurationMs_withModemActivity() {
+        final MockClock clock = new MockClock(); // holds realtime and uptime in ms
+        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clock);
+        bi.setPowerProfile(mock(PowerProfile.class));
+        final int ratCount = RADIO_ACCESS_TECHNOLOGY_COUNT;
+        final int frequencyCount = ServiceState.FREQUENCY_RANGE_MMWAVE + 1;
+        final int txLevelCount = CellSignalStrength.getNumSignalStrengthLevels();
+
+        final long[][][] expectedDurationsMs = new long[ratCount][frequencyCount][txLevelCount];
+        final long[][] expectedRxDurationsMs = new long[ratCount][frequencyCount];
+        final long[][][] expectedTxDurationsMs = new long[ratCount][frequencyCount][txLevelCount];
+        for (int rat = 0; rat < ratCount; rat++) {
+            for (int freq = 0; freq < frequencyCount; freq++) {
+                expectedRxDurationsMs[rat][freq] = POWER_DATA_UNAVAILABLE;
+
+                for (int txLvl = 0; txLvl < txLevelCount; txLvl++) {
+                    expectedTxDurationsMs[rat][freq][txLvl] = POWER_DATA_UNAVAILABLE;
+                }
+            }
+        }
+
+        final ModemActivityInfo mai = new ModemActivityInfo(0L, 0L, 0L, new int[txLevelCount], 0L);
+        final ModemAndBatteryState state = new ModemAndBatteryState(bi, mai, null);
+
+        IntConsumer incrementTime = inc -> {
+            state.currentTimeMs += inc;
+            clock.realtime = clock.uptime = state.currentTimeMs;
+
+            // If the device is not on battery, no timers should increment.
+            if (!state.onBattery) return;
+            // If the modem is not active, no timers should increment.
+            if (!state.modemActive) return;
+
+            final int currRat = state.currentRat;
+            final int currFreqRange =
+                    currRat == RADIO_ACCESS_TECHNOLOGY_NR ? state.currentFrequencyRange : 0;
+            int currSignalStrength = state.currentSignalStrengths.get(currRat);
+
+            expectedDurationsMs[currRat][currFreqRange][currSignalStrength] += inc;
+
+            // Evaluate the HAL provided time in states.
+            switch (state.modemState) {
+                case SLEEP:
+                    long sleepMs = state.modemActivityInfo.getSleepTimeMillis();
+                    state.modemActivityInfo.setSleepTimeMillis(sleepMs + inc);
+                    break;
+                case IDLE:
+                    long idleMs = state.modemActivityInfo.getIdleTimeMillis();
+                    state.modemActivityInfo.setIdleTimeMillis(idleMs + inc);
+                    break;
+                case RECEIVING:
+                    long rxMs = state.modemActivityInfo.getReceiveTimeMillis();
+                    state.modemActivityInfo.setReceiveTimeMillis(rxMs + inc);
+                    expectedRxDurationsMs[currRat][currFreqRange] += inc;
+                    break;
+                case TRANSMITTING:
+                    int[] txMs = state.modemActivityInfo.getTransmitTimeMillis();
+                    txMs[currSignalStrength] += inc;
+                    state.modemActivityInfo.setTransmitTimeMillis(txMs);
+                    expectedTxDurationsMs[currRat][currFreqRange][currSignalStrength] += inc;
+                    break;
+            }
+        };
+
+        state.setOnBattery(false);
+        state.setModemActive(false);
+        state.setRatType(TelephonyManager.NETWORK_TYPE_UNKNOWN,
+                BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER);
+        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_UNKNOWN);
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
+                CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // While not on battery, the timers should not increase.
+        state.setModemActive(true);
+        incrementTime.accept(100);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setRatType(TelephonyManager.NETWORK_TYPE_NR, BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR);
+        incrementTime.accept(200);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR,
+                CellSignalStrength.SIGNAL_STRENGTH_GOOD);
+        incrementTime.accept(500);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_MMWAVE);
+        incrementTime.accept(300);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setRatType(TelephonyManager.NETWORK_TYPE_LTE,
+                BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE);
+        incrementTime.accept(400);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_MODERATE);
+        incrementTime.accept(500);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Data will now be available.
+        for (int rat = 0; rat < ratCount; rat++) {
+            for (int freq = 0; freq < frequencyCount; freq++) {
+                if (rat == RADIO_ACCESS_TECHNOLOGY_NR
+                        || freq == ServiceState.FREQUENCY_RANGE_UNKNOWN) {
+                    // Only the NR RAT should have per frequency data.
+                    expectedRxDurationsMs[rat][freq] = 0;
+                }
+                for (int txLvl = 0; txLvl < txLevelCount; txLvl++) {
+                    if (rat == RADIO_ACCESS_TECHNOLOGY_NR
+                            || freq == ServiceState.FREQUENCY_RANGE_UNKNOWN) {
+                        // Only the NR RAT should have per frequency data.
+                        expectedTxDurationsMs[rat][freq][txLvl] = 0;
+                    }
+                }
+            }
+        }
+
+        // When set on battery, currently active state (RAT:LTE, Signal Strength:Moderate) should
+        // start counting up.
+        state.setOnBattery(true);
+        incrementTime.accept(300);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(500);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(600);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+        // Changing LTE signal strength should be tracked.
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_POOR);
+        incrementTime.accept(300);
+        state.setModemState(ModemState.SLEEP);
+        incrementTime.accept(1000);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(700);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        incrementTime.accept(800);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(222);
+        state.setModemState(ModemState.IDLE);
+        incrementTime.accept(111);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(7777);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_GOOD);
+        incrementTime.accept(88);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(900);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_GREAT);
+        incrementTime.accept(123);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(333);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(1000);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(555);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Change in the signal strength of nonactive RAT should not affect anything.
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
+                CellSignalStrength.SIGNAL_STRENGTH_POOR);
+        incrementTime.accept(631);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(321);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(99);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Changing to OTHER Rat should start tracking the poor signal strength.
+        state.setRatType(TelephonyManager.NETWORK_TYPE_CDMA,
+                BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER);
+        incrementTime.accept(1200);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Noting frequency change should not affect non NR Rat.
+        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_HIGH);
+        incrementTime.accept(444);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(1300);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Now the NR Rat, HIGH frequency range, good signal strength should start counting.
+        state.setRatType(TelephonyManager.NETWORK_TYPE_NR, BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR);
+        incrementTime.accept(1400);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Frequency changed to low.
+        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_LOW);
+        incrementTime.accept(852);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(157);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(1500);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Modem no longer active, should not be tracking any more.
+        state.setModemActive(false);
+        incrementTime.accept(1500);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+    }
+
+    @SmallTest
+    public void testGetPerStateActiveRadioDurationMs_withSpecificInfoModemActivity() {
+        final MockClock clock = new MockClock(); // holds realtime and uptime in ms
+        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clock);
+        bi.setPowerProfile(mock(PowerProfile.class));
+        final int ratCount = RADIO_ACCESS_TECHNOLOGY_COUNT;
+        final int frequencyCount = ServiceState.FREQUENCY_RANGE_MMWAVE + 1;
+        final int txLevelCount = CellSignalStrength.getNumSignalStrengthLevels();
+
+        List<ActivityStatsTechSpecificInfo> specificInfoList = new ArrayList();
+
+        final long[][][] expectedDurationsMs = new long[ratCount][frequencyCount][txLevelCount];
+        final long[][] expectedRxDurationsMs = new long[ratCount][frequencyCount];
+        final long[][][] expectedTxDurationsMs = new long[ratCount][frequencyCount][txLevelCount];
+        for (int rat = 0; rat < ratCount; rat++) {
+            for (int freq = 0; freq < frequencyCount; freq++) {
+                if (rat == RADIO_ACCESS_TECHNOLOGY_NR
+                        || freq == ServiceState.FREQUENCY_RANGE_UNKNOWN) {
+                    // Initialize available specific Modem info
+                    specificInfoList.add(
+                            new ActivityStatsTechSpecificInfo(rat, freq, new int[txLevelCount], 0));
+                }
+                expectedRxDurationsMs[rat][freq] = POWER_DATA_UNAVAILABLE;
+
+                for (int txLvl = 0; txLvl < txLevelCount; txLvl++) {
+                    expectedTxDurationsMs[rat][freq][txLvl] = POWER_DATA_UNAVAILABLE;
+                }
+            }
+        }
+
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.UNKNOWN,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 0));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.GERAN,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 0));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.UTRAN,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 0));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.EUTRAN,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 0));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.CDMA2000,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 0));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.IWLAN,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 0));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 0));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN,
+                ServiceState.FREQUENCY_RANGE_LOW, new int[txLevelCount], 0));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN,
+                ServiceState.FREQUENCY_RANGE_MID, new int[txLevelCount], 0));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN,
+                ServiceState.FREQUENCY_RANGE_HIGH, new int[txLevelCount], 0));
+        specificInfoList.add(new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN,
+                ServiceState.FREQUENCY_RANGE_MMWAVE, new int[txLevelCount], 0));
+
+        final ActivityStatsTechSpecificInfo[] specificInfos = specificInfoList.toArray(
+                new ActivityStatsTechSpecificInfo[specificInfoList.size()]);
+        final ModemActivityInfo mai = new ModemActivityInfo(0L, 0L, 0L, specificInfos);
+        final ModemAndBatteryState state = new ModemAndBatteryState(bi, mai, specificInfos);
+
+        IntConsumer incrementTime = inc -> {
+            state.currentTimeMs += inc;
+            clock.realtime = clock.uptime = state.currentTimeMs;
+
+            // If the device is not on battery, no timers should increment.
+            if (!state.onBattery) return;
+            // If the modem is not active, no timers should increment.
+            if (!state.modemActive) return;
+
+            final int currRat = state.currentRat;
+            final int currRant = state.currentRadioAccessNetworkType;
+            final int currFreqRange =
+                    currRat == RADIO_ACCESS_TECHNOLOGY_NR ? state.currentFrequencyRange : 0;
+            int currSignalStrength = state.currentSignalStrengths.get(currRat);
+
+            expectedDurationsMs[currRat][currFreqRange][currSignalStrength] += inc;
+
+            // Evaluate the HAL provided time in states.
+            final ActivityStatsTechSpecificInfo info = state.getSpecificInfo(currRant,
+                    currFreqRange);
+            switch (state.modemState) {
+                case SLEEP:
+                    long sleepMs = state.modemActivityInfo.getSleepTimeMillis();
+                    state.modemActivityInfo.setSleepTimeMillis(sleepMs + inc);
+                    break;
+                case IDLE:
+                    long idleMs = state.modemActivityInfo.getIdleTimeMillis();
+                    state.modemActivityInfo.setIdleTimeMillis(idleMs + inc);
+                    break;
+                case RECEIVING:
+                    long rxMs = info.getReceiveTimeMillis();
+                    info.setReceiveTimeMillis(rxMs + inc);
+                    expectedRxDurationsMs[currRat][currFreqRange] += inc;
+                    break;
+                case TRANSMITTING:
+                    int[] txMs = info.getTransmitTimeMillis().clone();
+                    txMs[currSignalStrength] += inc;
+                    info.setTransmitTimeMillis(txMs);
+                    expectedTxDurationsMs[currRat][currFreqRange][currSignalStrength] += inc;
+                    break;
+            }
+        };
+
+        state.setOnBattery(false);
+        state.setModemActive(false);
+        state.setRatType(TelephonyManager.NETWORK_TYPE_UNKNOWN,
+                BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
+                AccessNetworkConstants.AccessNetworkType.UNKNOWN);
+        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_UNKNOWN);
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
+                CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // While not on battery, the timers should not increase.
+        state.setModemActive(true);
+        incrementTime.accept(100);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setRatType(TelephonyManager.NETWORK_TYPE_NR, BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR,
+                AccessNetworkConstants.AccessNetworkType.NGRAN);
+        incrementTime.accept(200);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR,
+                CellSignalStrength.SIGNAL_STRENGTH_GOOD);
+        incrementTime.accept(500);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_MMWAVE);
+        incrementTime.accept(300);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setRatType(TelephonyManager.NETWORK_TYPE_LTE,
+                BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                AccessNetworkConstants.AccessNetworkType.EUTRAN);
+        incrementTime.accept(400);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_MODERATE);
+        incrementTime.accept(500);
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Data will now be available.
+        for (int rat = 0; rat < ratCount; rat++) {
+            for (int freq = 0; freq < frequencyCount; freq++) {
+                if (rat == RADIO_ACCESS_TECHNOLOGY_NR
+                        || freq == ServiceState.FREQUENCY_RANGE_UNKNOWN) {
+                    // Only the NR RAT should have per frequency data.
+                    expectedRxDurationsMs[rat][freq] = 0;
+                }
+                for (int txLvl = 0; txLvl < txLevelCount; txLvl++) {
+                    if (rat == RADIO_ACCESS_TECHNOLOGY_NR
+                            || freq == ServiceState.FREQUENCY_RANGE_UNKNOWN) {
+                        // Only the NR RAT should have per frequency data.
+                        expectedTxDurationsMs[rat][freq][txLvl] = 0;
+                    }
+                }
+            }
+        }
+
+        // When set on battery, currently active state (RAT:LTE, Signal Strength:Moderate) should
+        // start counting up.
+        state.setOnBattery(true);
+        state.noteModemControllerActivity();
+        incrementTime.accept(300);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(500);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(600);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+        // Changing LTE signal strength should be tracked.
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_POOR);
+        incrementTime.accept(300);
+        state.setModemState(ModemState.SLEEP);
+        incrementTime.accept(1000);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(700);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        incrementTime.accept(800);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(222);
+        state.setModemState(ModemState.IDLE);
+        incrementTime.accept(111);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(7777);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_GOOD);
+        incrementTime.accept(88);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(900);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
+                CellSignalStrength.SIGNAL_STRENGTH_GREAT);
+        incrementTime.accept(123);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(333);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(1000);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(555);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Change in the signal strength of nonactive RAT should not affect anything.
+        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
+                CellSignalStrength.SIGNAL_STRENGTH_POOR);
+        incrementTime.accept(631);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(321);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(99);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Changing to OTHER Rat should start tracking the poor signal strength.
+        state.setRatType(TelephonyManager.NETWORK_TYPE_CDMA,
+                BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
+                AccessNetworkConstants.AccessNetworkType.CDMA2000);
+        incrementTime.accept(1200);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Noting frequency change should not affect non NR Rat.
+        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_HIGH);
+        incrementTime.accept(444);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(1300);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Now the NR Rat, HIGH frequency range, good signal strength should start counting.
+        state.setRatType(TelephonyManager.NETWORK_TYPE_NR, BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR,
+                AccessNetworkConstants.AccessNetworkType.NGRAN);
+        incrementTime.accept(1400);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Frequency changed to low.
+        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_LOW);
+        incrementTime.accept(852);
+        state.setModemState(ModemState.RECEIVING);
+        incrementTime.accept(157);
+        state.setModemState(ModemState.TRANSMITTING);
+        incrementTime.accept(1500);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+
+        // Modem no longer active, should not be tracking any more.
+        state.setModemActive(false);
+        incrementTime.accept(1500);
+        state.noteModemControllerActivity();
+        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
+                expectedTxDurationsMs, bi, state.currentTimeMs);
+    }
+
+    @SmallTest
+    @SuppressWarnings("GuardedBy")
+    public void testProcStateSyncScheduling_mobileRadioActiveState() {
+        final MockClock clock = new MockClock(); // holds realtime and uptime in ms
+        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clock);
+        final MutableInt lastProcStateChangeFlags = new MutableInt(0);
+
+        MockBatteryStatsImpl.DummyExternalStatsSync externalStatsSync =
+                new MockBatteryStatsImpl.DummyExternalStatsSync() {
+                    @Override
+                    public void scheduleSyncDueToProcessStateChange(int flags,
+                            long delayMillis) {
+                        lastProcStateChangeFlags.value = flags;
+                    }
+                };
+
+        bi.setDummyExternalStatsSync(externalStatsSync);
+
+        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
+
+        // Note mobile radio is on.
+        long curr = 1000L * (clock.realtime = clock.uptime = 1001);
+        bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH, curr,
+                UID);
+
+        lastProcStateChangeFlags.value = 0;
+        clock.realtime = clock.uptime = 2002;
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
+
+        final int allProcFlags = BatteryStatsImpl.ExternalStatsSync.UPDATE_ON_PROC_STATE_CHANGE;
+        assertEquals(allProcFlags, lastProcStateChangeFlags.value);
+
+        // Note mobile radio is off.
+        curr = 1000L * (clock.realtime = clock.uptime = 3003);
+        bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_LOW, curr,
+                UID);
+
+        lastProcStateChangeFlags.value = 0;
+        clock.realtime = clock.uptime = 4004;
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_CACHED_EMPTY);
+
+        final int noRadioProcFlags = BatteryStatsImpl.ExternalStatsSync.UPDATE_ON_PROC_STATE_CHANGE
+                & ~BatteryStatsImpl.ExternalStatsSync.UPDATE_RADIO;
+        assertEquals(
+                "An inactive radio should not be queried on proc state change",
+                noRadioProcFlags, lastProcStateChangeFlags.value);
+    }
+
+    @SmallTest
+    public void testNoteMobileRadioPowerStateLocked() {
+        long curr;
+        boolean update;
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.setOnBatteryInternal(true);
+
+        // Note mobile radio is on.
+        curr = 1000L * (clocks.realtime = clocks.uptime = 1001);
+        bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH, curr,
+                UID);
+
+        // Note mobile radio is still on.
+        curr = 1000L * (clocks.realtime = clocks.uptime = 2001);
+        update = bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                curr, UID);
+        assertFalse(
+                "noteMobileRadioPowerStateLocked should not request an update when the power "
+                        + "state does not change from HIGH.",
+                update);
+
+        // Note mobile radio is off.
+        curr = 1000L * (clocks.realtime = clocks.uptime = 3001);
+        update = bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_LOW,
+                curr, UID);
+        assertTrue(
+                "noteMobileRadioPowerStateLocked should request an update when the power state "
+                        + "changes from HIGH to LOW.",
+                update);
+
+        // Note mobile radio is still off.
+        curr = 1000L * (clocks.realtime = clocks.uptime = 4001);
+        update = bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_LOW,
+                curr, UID);
+        assertFalse(
+                "noteMobileRadioPowerStateLocked should not request an update when the power "
+                        + "state does not change from LOW.",
+                update);
+
+        // Note mobile radio is on.
+        curr = 1000L * (clocks.realtime = clocks.uptime = 5001);
+        update = bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                curr, UID);
+        assertFalse(
+                "noteMobileRadioPowerStateLocked should not request an update when the power "
+                        + "state changes from LOW to HIGH.",
+                update);
+    }
+
+    @SmallTest
+    public void testNoteMobileRadioPowerStateLocked_rateLimited() {
+        long curr;
+        boolean update;
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.setPowerProfile(mock(PowerProfile.class));
+
+        final int txLevelCount = CellSignalStrength.getNumSignalStrengthLevels();
+        final ModemActivityInfo mai = new ModemActivityInfo(0L, 0L, 0L, new int[txLevelCount], 0L);
+
+        final long rateLimit = bi.getMobileRadioPowerStateUpdateRateLimit();
+        if (rateLimit < 0) {
+            Log.w(TAG, "Skipping testNoteMobileRadioPowerStateLocked_rateLimited, rateLimit = "
+                    + rateLimit);
+            return;
+        }
+        bi.setOnBatteryInternal(true);
+
+        // Note mobile radio is on.
+        curr = 1000L * (clocks.realtime = clocks.uptime = 1001);
+        bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH, curr,
+                UID);
+
+        clocks.realtime = clocks.uptime = 2001;
+        mai.setTimestamp(clocks.realtime);
+        bi.noteModemControllerActivity(mai, POWER_DATA_UNAVAILABLE,
+                clocks.realtime, clocks.uptime, mNetworkStatsManager);
+
+        // Note mobile radio is off within the rate limit duration.
+        clocks.realtime = clocks.uptime = clocks.realtime + (long) (rateLimit * 0.7);
+        curr = 1000L * clocks.realtime;
+        update = bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_LOW,
+                curr, UID);
+        assertFalse(
+                "noteMobileRadioPowerStateLocked should not request an update when the power "
+                        + "state so soon after a noteModemControllerActivity",
+                update);
+
+        // Note mobile radio is on.
+        clocks.realtime = clocks.uptime = clocks.realtime + (long) (rateLimit * 0.7);
+        curr = 1000L * clocks.realtime;
+        bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH, curr,
+                UID);
+
+        // Note mobile radio is off much later
+        clocks.realtime = clocks.uptime = clocks.realtime + rateLimit;
+        curr = 1000L * clocks.realtime;
+        update = bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_LOW,
+                curr, UID);
+        assertTrue(
+                "noteMobileRadioPowerStateLocked should request an update when the power state "
+                        + "changes from HIGH to LOW much later after a "
+                        + "noteModemControllerActivity.",
+                update);
+    }
+
+    private void setFgState(int uid, boolean fgOn, MockBatteryStatsImpl bi) {
+        // Note that noteUidProcessStateLocked uses ActivityManager process states.
+        if (fgOn) {
+            bi.noteActivityResumedLocked(uid);
+            bi.noteUidProcessStateLocked(uid, ActivityManager.PROCESS_STATE_TOP);
+        } else {
+            bi.noteActivityPausedLocked(uid);
+            bi.noteUidProcessStateLocked(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY);
+        }
+    }
+
+    private void checkMeasuredCharge(String caseName, int uid1, long blame1, int uid2, long blame2,
+            long globalDoze, MockBatteryStatsImpl bi) {
+        final int bucket = EnergyConsumerStats.POWER_BUCKET_SCREEN_ON;
+
+        assertEquals("Wrong uid1 blame for Case " + caseName, blame1,
+                bi.getUidStatsLocked(uid1).getEnergyConsumptionUC(bucket));
+
+        assertEquals("Wrong uid2 blame for Case " + caseName, blame2,
+                bi.getUidStatsLocked(uid2).getEnergyConsumptionUC(bucket));
+
+        assertEquals("Wrong total blame for Case " + caseName, blame1 + blame2,
+                bi.getScreenOnEnergyConsumptionUC());
+
+        assertEquals("Wrong doze for Case " + caseName, globalDoze,
+                bi.getScreenDozeEnergyConsumptionUC());
+    }
+
+    private void checkCustomBatteryConsumption(String caseName,
+            long totalBlameA, long totalBlameB,
+            int uid1, long blame1A, long blame1B,
+            int uid2, long blame2A, long blame2B,
+            MockBatteryStatsImpl bi) {
+
+        final long[] actualTotal = bi.getCustomEnergyConsumerBatteryConsumptionUC();
+        final long[] actualUid1 =
+                bi.getUidStatsLocked(uid1).getCustomEnergyConsumerBatteryConsumptionUC();
+        final long[] actualUid2 =
+                bi.getUidStatsLocked(uid2).getCustomEnergyConsumerBatteryConsumptionUC();
+
+        assertNotNull(actualTotal);
+        assertNotNull(actualUid1);
+        assertNotNull(actualUid2);
+
+        assertEquals("Wrong total blame in bucket 0 for Case " + caseName, totalBlameA,
+                actualTotal[0]);
+
+        assertEquals("Wrong total blame in bucket 1 for Case " + caseName, totalBlameB,
+                actualTotal[1]);
+
+        assertEquals("Wrong uid1 blame in bucket 0 for Case " + caseName, blame1A, actualUid1[0]);
+
+        assertEquals("Wrong uid1 blame in bucket 1 for Case " + caseName, blame1B, actualUid1[1]);
+
+        assertEquals("Wrong uid2 blame in bucket 0 for Case " + caseName, blame2A, actualUid2[0]);
+
+        assertEquals("Wrong uid2 blame in bucket 1 for Case " + caseName, blame2B, actualUid2[1]);
+    }
+
+    private void checkScreenBrightnesses(long[] overallExpected, long[][] perDisplayExpected,
+            BatteryStatsImpl bi, long currentTimeMs) {
+        final int numDisplay = bi.getDisplayCount();
+        for (int bin = 0; bin < NUM_SCREEN_BRIGHTNESS_BINS; bin++) {
+            for (int display = 0; display < numDisplay; display++) {
+                assertEquals("Failure for display " + display + " screen brightness bin " + bin,
+                        perDisplayExpected[display][bin] * 1000,
+                        bi.getDisplayScreenBrightnessTime(display, bin, currentTimeMs * 1000));
+            }
+            assertEquals("Failure for overall screen brightness bin " + bin,
+                    overallExpected[bin] * 1000,
+                    bi.getScreenBrightnessTime(bin, currentTimeMs * 1000, STATS_SINCE_CHARGED));
+        }
+    }
+
+    private void checkPerStateActiveRadioDurations(long[][][] expectedDurationsMs,
+            long[][] expectedRxDurationsMs, long[][][] expectedTxDurationsMs,
+            BatteryStatsImpl bi, long currentTimeMs) {
+        for (int rat = 0; rat < expectedDurationsMs.length; rat++) {
+            final long[][] expectedRatDurationsMs = expectedDurationsMs[rat];
+            for (int freq = 0; freq < expectedRatDurationsMs.length; freq++) {
+                final long expectedRxDurationMs = expectedRxDurationsMs[rat][freq];
+
+                // Build a verbose fail message, just in case.
+                final StringBuilder rxFailSb = new StringBuilder();
+                rxFailSb.append("Wrong time in Rx state for RAT:");
+                rxFailSb.append(BatteryStats.RADIO_ACCESS_TECHNOLOGY_NAMES[rat]);
+                rxFailSb.append(", frequency:");
+                rxFailSb.append(ServiceState.frequencyRangeToString(freq));
+                assertEquals(rxFailSb.toString(), expectedRxDurationMs,
+                        bi.getActiveRxRadioDurationMs(rat, freq, currentTimeMs));
+
+                final long[] expectedFreqDurationsMs = expectedRatDurationsMs[freq];
+                for (int strength = 0; strength < expectedFreqDurationsMs.length; strength++) {
+                    final long expectedSignalStrengthDurationMs = expectedFreqDurationsMs[strength];
+                    final long expectedTxDurationMs = expectedTxDurationsMs[rat][freq][strength];
+                    final long actualDurationMs = bi.getActiveRadioDurationMs(rat, freq,
+                            strength, currentTimeMs);
+
+                    final StringBuilder failSb = new StringBuilder();
+                    failSb.append("Wrong time in state for RAT:");
+                    failSb.append(BatteryStats.RADIO_ACCESS_TECHNOLOGY_NAMES[rat]);
+                    failSb.append(", frequency:");
+                    failSb.append(ServiceState.frequencyRangeToString(freq));
+                    failSb.append(", strength:");
+                    failSb.append(strength);
+                    assertEquals(failSb.toString(), expectedSignalStrengthDurationMs,
+                            actualDurationMs);
+
+                    final StringBuilder txFailSb = new StringBuilder();
+                    txFailSb.append("Wrong time in Tx state for RAT:");
+                    txFailSb.append(BatteryStats.RADIO_ACCESS_TECHNOLOGY_NAMES[rat]);
+                    txFailSb.append(", frequency:");
+                    txFailSb.append(ServiceState.frequencyRangeToString(freq));
+                    txFailSb.append(", strength:");
+                    txFailSb.append(strength);
+                    assertEquals(txFailSb.toString(), expectedTxDurationMs,
+                            bi.getActiveTxRadioDurationMs(rat, freq, strength, currentTimeMs));
+                }
+            }
+        }
+    }
+
+    private class ModemAndBatteryState {
+        public long currentTimeMs = 100;
+        public boolean onBattery = false;
+        public boolean modemActive = false;
+        @Annotation.NetworkType
+        public int currentNetworkDataType = TelephonyManager.NETWORK_TYPE_UNKNOWN;
+        @BatteryStats.RadioAccessTechnology
+        public int currentRat = BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER;
+        @AccessNetworkConstants.RadioAccessNetworkType
+        public int currentRadioAccessNetworkType = AccessNetworkConstants.AccessNetworkType.UNKNOWN;
+        @ServiceState.FrequencyRange
+        public int currentFrequencyRange = ServiceState.FREQUENCY_RANGE_UNKNOWN;
+        public SparseIntArray currentSignalStrengths = new SparseIntArray();
+        public ModemState modemState = ModemState.SLEEP;
+        public ModemActivityInfo modemActivityInfo;
+        public ActivityStatsTechSpecificInfo[] specificInfo;
+
+        private final MockBatteryStatsImpl mBsi;
+
+        ModemAndBatteryState(MockBatteryStatsImpl bsi, ModemActivityInfo mai,
+                ActivityStatsTechSpecificInfo[] astsi) {
+            mBsi = bsi;
+            modemActivityInfo = mai;
+            specificInfo = astsi;
+        }
+
+        void setOnBattery(boolean onBattery) {
+            this.onBattery = onBattery;
+            mBsi.updateTimeBasesLocked(onBattery, Display.STATE_OFF, currentTimeMs * 1000,
+                    currentTimeMs * 1000);
+            mBsi.setOnBatteryInternal(onBattery);
+            noteModemControllerActivity();
+        }
+
+        void setModemActive(boolean active) {
+            modemActive = active;
+            final int state = active ? DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH
+                    : DataConnectionRealTimeInfo.DC_POWER_STATE_LOW;
+            mBsi.noteMobileRadioPowerStateLocked(state, currentTimeMs * 1000_000L, UID);
+            noteModemControllerActivity();
+        }
+
+        void setRatType(@Annotation.NetworkType int dataType,
+                @BatteryStats.RadioAccessTechnology int rat,
+                @AccessNetworkConstants.RadioAccessNetworkType int halDataType) {
+            currentRadioAccessNetworkType = halDataType;
+            setRatType(dataType, rat);
+        }
+
+        void setRatType(@Annotation.NetworkType int dataType,
+                @BatteryStats.RadioAccessTechnology int rat) {
+            currentNetworkDataType = dataType;
+            currentRat = rat;
+            final int nrState;
+            if (currentNetworkDataType == TelephonyManager.NETWORK_TYPE_NR) {
+                nrState = NetworkRegistrationInfo.NR_STATE_CONNECTED;
+            } else {
+                nrState = NetworkRegistrationInfo.NR_STATE_NONE;
+            }
+            mBsi.notePhoneDataConnectionStateLocked(dataType, true, ServiceState.STATE_IN_SERVICE,
+                    nrState, currentFrequencyRange);
+        }
+
+        void setFrequencyRange(@ServiceState.FrequencyRange int frequency) {
+            currentFrequencyRange = frequency;
+            final int nrState;
+            if (currentNetworkDataType == TelephonyManager.NETWORK_TYPE_NR) {
+                nrState = NetworkRegistrationInfo.NR_STATE_CONNECTED;
+            } else {
+                nrState = NetworkRegistrationInfo.NR_STATE_NONE;
+            }
+            mBsi.notePhoneDataConnectionStateLocked(currentNetworkDataType, true,
+                    ServiceState.STATE_IN_SERVICE, nrState, frequency);
+        }
+
+        void setSignalStrength(@BatteryStats.RadioAccessTechnology int rat, int strength) {
+            currentSignalStrengths.put(rat, strength);
+            final int size = currentSignalStrengths.size();
+            final int newestGenSignalStrength = currentSignalStrengths.valueAt(size - 1);
+            mBsi.notePhoneSignalStrengthLocked(newestGenSignalStrength, currentSignalStrengths);
+        }
+
+        void setModemState(ModemState state) {
+            modemState = state;
+        }
+
+        ActivityStatsTechSpecificInfo getSpecificInfo(@BatteryStats.RadioAccessTechnology int rat,
+                @ServiceState.FrequencyRange int frequency) {
+            if (specificInfo == null) return null;
+            for (ActivityStatsTechSpecificInfo info : specificInfo) {
+                if (info.getRat() == rat && info.getFrequencyRange() == frequency) {
+                    return info;
+                }
+            }
+            return null;
+        }
+
+        void noteModemControllerActivity() {
+            if (modemActivityInfo == null) return;
+            modemActivityInfo.setTimestamp(currentTimeMs);
+            final ModemActivityInfo copy;
+            if (specificInfo == null) {
+                copy = new ModemActivityInfo(
+                        modemActivityInfo.getTimestampMillis(),
+                        modemActivityInfo.getSleepTimeMillis(),
+                        modemActivityInfo.getIdleTimeMillis(),
+                        modemActivityInfo.getTransmitTimeMillis().clone(),
+                        modemActivityInfo.getReceiveTimeMillis());
+            } else {
+                // Deep copy specificInfo
+                final ActivityStatsTechSpecificInfo[] infoCopies =
+                        new ActivityStatsTechSpecificInfo[specificInfo.length];
+                for (int i = 0; i < specificInfo.length; i++) {
+                    final ActivityStatsTechSpecificInfo info = specificInfo[i];
+                    infoCopies[i] = new ActivityStatsTechSpecificInfo(info.getRat(),
+                            info.getFrequencyRange(), info.getTransmitTimeMillis().clone(),
+                            (int) info.getReceiveTimeMillis());
+                }
+
+                copy = new ModemActivityInfo(
+                        modemActivityInfo.getTimestampMillis(),
+                        modemActivityInfo.getSleepTimeMillis(),
+                        modemActivityInfo.getIdleTimeMillis(),
+                        infoCopies);
+            }
+            mBsi.noteModemControllerActivity(copy, POWER_DATA_UNAVAILABLE,
+                    currentTimeMs, currentTimeMs, mNetworkStatsManager);
+        }
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsResetTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsResetTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsResetTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsResetTest.java
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsSamplingTimerTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsSamplingTimerTest.java
new file mode 100644
index 0000000..ee68bf8
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsSamplingTimerTest.java
@@ -0,0 +1,229 @@
+/*
+ * 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.server.power.stats;
+
+import android.os.BatteryStats;
+import android.os.Parcel;
+import android.os.SystemClock;
+
+import androidx.test.filters.SmallTest;
+
+import junit.framework.TestCase;
+
+import org.mockito.Mockito;
+
+public class BatteryStatsSamplingTimerTest extends TestCase {
+
+    @SmallTest
+    public void testSettingStalePreservesData() throws Exception {
+        final MockClock clocks = new MockClock();
+        final BatteryStatsImpl.SamplingTimer timer = new BatteryStatsImpl.SamplingTimer(clocks,
+                Mockito.mock(BatteryStatsImpl.TimeBase.class));
+
+        timer.onTimeStarted(100, 100, 100);
+
+        // First update is absorbed.
+        timer.update(10, 1, SystemClock.elapsedRealtime() * 1000);
+
+        timer.update(20, 2, SystemClock.elapsedRealtime() * 1000);
+
+        assertEquals(1, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(10, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
+
+        timer.endSample();
+
+        assertEquals(1, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(10, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
+
+        timer.onTimeStopped(200, 200, 200);
+
+        assertEquals(1, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(10, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
+    }
+
+    @SmallTest
+    public void testEndSampleAndContinueWhenTimeOrCountDecreases() throws Exception {
+        final MockClock clocks = new MockClock();
+        final BatteryStatsImpl.TimeBase timeBase = Mockito.mock(BatteryStatsImpl.TimeBase.class);
+        final BatteryStatsImpl.SamplingTimer timer = new BatteryStatsImpl.SamplingTimer(clocks,
+                timeBase);
+
+        // First once is absorbed.
+        timer.update(10, 1, SystemClock.elapsedRealtime() * 1000);
+
+        timer.add(10, 1);
+
+        assertEquals(0, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(0, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
+
+        // This is less than we currently have, so we will end the sample. Time isn't running, so
+        // nothing should happen, except that tracking will stop.
+        timer.update(0, 0, SystemClock.elapsedRealtime() * 1000);
+
+        // Start tracking again
+        timer.update(0, 0, SystemClock.elapsedRealtime() * 1000);
+
+        assertEquals(0, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(0, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
+
+        timer.onTimeStarted(100, 100, 100);
+
+        // This should add.
+        timer.add(100, 10);
+
+        assertEquals(100, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(10, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // This is less than we currently have, so we should end our sample.
+        timer.update(30, 3, SystemClock.elapsedRealtime() * 1000);
+
+        // Restart tracking
+        timer.update(30, 3, SystemClock.elapsedRealtime() * 1000);
+
+        timer.add(50, 5);
+
+        assertEquals(150, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(15, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        timer.onTimeStopped(200, 200, 200);
+
+        assertEquals(150, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(15, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+    }
+
+    @SmallTest
+    public void testFirstUpdateIsAbsorbed() throws Exception {
+        final MockClock clocks = new MockClock();
+        final BatteryStatsImpl.TimeBase timeBase = Mockito.mock(BatteryStatsImpl.TimeBase.class);
+
+        BatteryStatsImpl.SamplingTimer timer = new BatteryStatsImpl.SamplingTimer(clocks, timeBase);
+
+        // This should be absorbed because it is our first update and we don't know what
+        // was being counted before.
+        timer.update(10, 1, SystemClock.elapsedRealtime() * 1000);
+
+        assertEquals(0, timer.getTotalTimeLocked(10, BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(0, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        timer = new BatteryStatsImpl.SamplingTimer(clocks, timeBase);
+        timer.onTimeStarted(100, 100, 100);
+
+        // This should be absorbed.
+        timer.update(10, 1, SystemClock.elapsedRealtime() * 1000);
+
+        assertEquals(0, timer.getTotalTimeLocked(100, BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(0, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // This should NOT be aborbed, since we've already done that.
+        timer.add(10, 1);
+
+        assertEquals(10, timer.getTotalTimeLocked(100, BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(1, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        timer.onTimeStopped(200, 200, 200);
+        timer.onTimeStarted(300, 300, 300);
+
+        // This should NOT be absorbed.
+        timer.add(10, 1);
+
+        assertEquals(20, timer.getTotalTimeLocked(300, BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(2, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+    }
+
+    @SmallTest
+    public void testSampleTimerSummaryParceling() throws Exception {
+        final MockClock clocks = new MockClock();
+        clocks.realtime = 0;
+        clocks.uptime = 0;
+
+        final BatteryStatsImpl.TimeBase timeBase = new BatteryStatsImpl.TimeBase();
+        timeBase.init(clocks.uptimeMillis(), clocks.elapsedRealtime());
+
+        BatteryStatsImpl.SamplingTimer timer = new BatteryStatsImpl.SamplingTimer(clocks, timeBase);
+
+        // Start running on battery.
+        // (Note that the wrong units are used in this class. setRunning is actually supposed to
+        // take us, not the ms that clocks uses.)
+        timeBase.setRunning(true, clocks.uptimeMillis(), clocks.elapsedRealtime());
+
+        // The first update on battery consumes the values as a way of starting cleanly.
+        timer.add(10, 1);
+
+        timer.add(10, 1);
+
+        clocks.realtime = 20;
+        clocks.uptime = 20;
+
+        assertEquals(10, timer.getTotalTimeLocked(clocks.elapsedRealtime(),
+                BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(1, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // Grab a summary parcel while on battery.
+        final Parcel onBatterySummaryParcel = Parcel.obtain();
+        timer.writeSummaryFromParcelLocked(onBatterySummaryParcel, clocks.elapsedRealtime() * 1000);
+        onBatterySummaryParcel.setDataPosition(0);
+
+        // Stop running on battery.
+        timeBase.setRunning(false, clocks.uptimeMillis(), clocks.elapsedRealtime());
+
+        assertEquals(10, timer.getTotalTimeLocked(clocks.elapsedRealtime(),
+                BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(1, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // Grab a summary parcel while not on battery.
+        final Parcel offBatterySummaryParcel = Parcel.obtain();
+        timer.writeSummaryFromParcelLocked(offBatterySummaryParcel,
+                clocks.elapsedRealtime() * 1000);
+        offBatterySummaryParcel.setDataPosition(0);
+
+        // Set the timebase running again. That way any issues with tracking reported values
+        // get tested when we unparcel the timers below.
+        timeBase.setRunning(true, clocks.uptimeMillis(), clocks.elapsedRealtime());
+
+        // Read the on battery summary from the parcel.
+        BatteryStatsImpl.SamplingTimer unparceledOnBatteryTimer =
+                new BatteryStatsImpl.SamplingTimer(clocks, timeBase);
+        unparceledOnBatteryTimer.readSummaryFromParcelLocked(onBatterySummaryParcel);
+
+        assertEquals(10, unparceledOnBatteryTimer.getTotalTimeLocked(0,
+                BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(1, unparceledOnBatteryTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // Read the off battery summary from the parcel.
+        BatteryStatsImpl.SamplingTimer unparceledOffBatteryTimer =
+                new BatteryStatsImpl.SamplingTimer(clocks, timeBase);
+        unparceledOffBatteryTimer.readSummaryFromParcelLocked(offBatterySummaryParcel);
+
+        assertEquals(10, unparceledOffBatteryTimer.getTotalTimeLocked(0,
+                BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(1, unparceledOffBatteryTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // Now, just like with a fresh timer, the first update should be absorbed to account for
+        // data being collected when we weren't recording.
+        unparceledOnBatteryTimer.update(10, 10, SystemClock.elapsedRealtime() * 1000);
+
+        assertEquals(10, unparceledOnBatteryTimer.getTotalTimeLocked(0,
+                BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(1, unparceledOnBatteryTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        unparceledOffBatteryTimer.update(10, 10, SystemClock.elapsedRealtime() * 1000);
+
+        assertEquals(10, unparceledOffBatteryTimer.getTotalTimeLocked(0,
+                BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(1, unparceledOffBatteryTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+    }
+}
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsSensorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsSensorTest.java
new file mode 100644
index 0000000..9c70f37
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsSensorTest.java
@@ -0,0 +1,523 @@
+/*
+ * 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.server.power.stats;
+
+import android.app.ActivityManager;
+import android.os.BatteryStats;
+import android.view.Display;
+
+import androidx.test.filters.SmallTest;
+
+import junit.framework.TestCase;
+
+/**
+ * Test BatteryStatsImpl Sensor Timers.
+ */
+public class BatteryStatsSensorTest extends TestCase {
+
+    private static final int UID = 10500;
+    private static final int UID_2 = 10501; // second uid for testing pool usage
+    private static final int SENSOR_ID = -10000;
+
+    @SmallTest
+    public void testSensorStartStop() throws Exception {
+        final MockClock clocks = new MockClock();
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.mForceOnBattery = true;
+        clocks.realtime = 100;
+        clocks.uptime = 100;
+        bi.getOnBatteryTimeBase().setRunning(true, 100_000, 100_000);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_CACHED_EMPTY);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
+        bi.noteStartSensorLocked(UID, SENSOR_ID);
+        clocks.realtime = 200;
+        clocks.uptime = 200;
+        bi.noteStopSensorLocked(UID, SENSOR_ID);
+
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_RECEIVER);
+        bi.noteStartSensorLocked(UID, SENSOR_ID);
+        bi.noteStartSensorLocked(UID, SENSOR_ID);
+        clocks.realtime = 400;
+        clocks.uptime = 400;
+        bi.noteStopSensorLocked(UID, SENSOR_ID);
+        bi.noteStopSensorLocked(UID, SENSOR_ID);
+
+        BatteryStats.Timer sensorTimer = bi.getUidStats().get(UID).getSensorStats()
+                .get(SENSOR_ID).getSensorTime();
+        BatteryStats.Timer sensorBgTimer = bi.getUidStats().get(UID).getSensorStats()
+                .get(SENSOR_ID).getSensorBackgroundTime();
+
+        assertEquals(2, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(300_000, sensorTimer.getTotalTimeLocked(
+                clocks.realtime * 1000, BatteryStats.STATS_SINCE_CHARGED));
+
+        assertEquals(1, sensorBgTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(200_000, sensorBgTimer.getTotalTimeLocked(
+                clocks.realtime * 1000, BatteryStats.STATS_SINCE_CHARGED));
+    }
+
+    @SmallTest
+    public void testCountingWhileOffBattery() throws Exception {
+        final MockClock clocks = new MockClock();
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        long curr = 0; // realtime in us
+
+        // Plugged-in (battery=off, sensor=off)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 100);
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr);
+
+
+        // Start sensor (battery=off, sensor=on)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 200);
+        bi.noteStartSensorLocked(UID, SENSOR_ID);
+
+        // Test situation
+        curr = 1000 * (clocks.realtime = clocks.uptime = 215);
+        BatteryStats.Timer sensorTimer = bi.getUidStats().get(UID).getSensorStats()
+                .get(SENSOR_ID).getSensorTime();
+        assertEquals(0,
+                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(0, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // Stop sensor (battery=off, sensor=off)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 550);
+        bi.noteStopSensorLocked(UID, SENSOR_ID);
+
+        // Test situation
+        curr = 1000 * (clocks.realtime = clocks.uptime = 678);
+        sensorTimer = bi.getUidStats().get(UID).getSensorStats()
+                .get(SENSOR_ID).getSensorTime();
+        assertEquals(0,
+                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(0, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+    }
+
+    @SmallTest
+    public void testCountingWhileOnBattery() throws Exception {
+        final MockClock clocks = new MockClock();
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        long curr = 0; // realtime in us
+
+        // Unplugged (battery=on, sensor=off)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 100);
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr);
+
+        // Start sensor (battery=on, sensor=on)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 200);
+        bi.noteStartSensorLocked(UID, SENSOR_ID);
+
+        // Test situation
+        curr = 1000 * (clocks.realtime = clocks.uptime = 215);
+        BatteryStats.Timer sensorTimer = bi.getUidStats().get(UID).getSensorStats()
+                .get(SENSOR_ID).getSensorTime();
+        assertEquals((215-200)*1000,
+                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(1, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // Stop sensor (battery=on, sensor=off)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 550);
+        bi.noteStopSensorLocked(UID, SENSOR_ID);
+
+        // Test situation
+        curr = 1000 * (clocks.realtime = clocks.uptime = 678);
+        sensorTimer = bi.getUidStats().get(UID).getSensorStats()
+                .get(SENSOR_ID).getSensorTime();
+        assertEquals((550-200)*1000,
+                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(1, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+    }
+
+    @SmallTest
+    public void testBatteryStatusOnToOff() throws Exception {
+        final MockClock clocks = new MockClock();
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        long curr = 0; // realtime in us
+
+        // On battery (battery=on, sensor=off)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 100);
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
+
+        // Start sensor (battery=on, sensor=on)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 202);
+        bi.noteStartSensorLocked(UID, SENSOR_ID);
+
+        // Off battery (battery=off, sensor=on)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 305);
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr);
+
+        // Stop sensor while off battery (battery=off, sensor=off)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 409);
+        bi.noteStopSensorLocked(UID, SENSOR_ID);
+
+        // Start sensor while off battery (battery=off, sensor=on)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 519);
+        bi.noteStartSensorLocked(UID, SENSOR_ID);
+
+        // Test while still running (but off battery)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 657);
+        BatteryStats.Timer sensorTimer = bi.getUidStats().get(UID).getSensorStats()
+                .get(SENSOR_ID).getSensorTime();
+        assertEquals(1, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals((305-202)*1000,
+                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
+
+        // Now stop running (still off battery) (battery=off, sensor=off)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 693);
+        bi.noteStopSensorLocked(UID, SENSOR_ID);
+
+        sensorTimer = bi.getUidStats().get(UID).getSensorStats()
+                .get(SENSOR_ID).getSensorTime();
+        assertEquals(1, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals((305-202)*1000,
+                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
+    }
+
+    @SmallTest
+    public void testBatteryStatusOffToOn() throws Exception {
+        final MockClock clocks = new MockClock();
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        long curr = 0; // realtime in us
+
+        // Plugged-in (battery=off, sensor=off)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 100);
+        bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr);
+
+        // Start sensor (battery=off, sensor=on)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 200);
+        bi.noteStartSensorLocked(UID, SENSOR_ID);
+
+        // Test situation
+        curr = 1000 * (clocks.realtime = clocks.uptime = 215);
+        BatteryStats.Timer sensorTimer = bi.getUidStats().get(UID).getSensorStats()
+                .get(SENSOR_ID).getSensorTime();
+        // Time was entirely off battery, so time=0.
+        assertEquals(0,
+                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
+        // Acquired off battery, so count=0.
+        assertEquals(0, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // Unplug (battery=on, sensor=on)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 305);
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr);
+
+        //Test situation
+        curr = 1000 * (clocks.realtime = clocks.uptime = 410);
+        sensorTimer = bi.getUidStats().get(UID).getSensorStats().get(SENSOR_ID).getSensorTime();
+        // Part of the time it was on battery.
+        assertEquals((410-305)*1000,
+                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
+        // Only ever acquired off battery, so count=0.
+        assertEquals(0, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // Stop sensor (battery=on, sensor=off)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 550);
+        bi.noteStopSensorLocked(UID, SENSOR_ID);
+
+        // Test situation
+        curr = 1000 * (clocks.realtime = clocks.uptime = 678);
+        sensorTimer = bi.getUidStats().get(UID).getSensorStats().get(SENSOR_ID).getSensorTime();
+        // Part of the time it was on battery.
+        assertEquals((550-305)*1000,
+                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
+        // Only ever acquired off battery, so count=0.
+        assertEquals(0, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+    }
+
+    @SmallTest
+    public void testPooledBackgroundUsage() throws Exception {
+        final MockClock clocks = new MockClock();
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.mForceOnBattery = true;
+        long curr = 0; // realtime in us
+        // Entire test is on-battery
+        curr = 1000 * (clocks.realtime = clocks.uptime = 1000);
+        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr);
+
+        // See below for a diagram of events.
+
+        // UID in foreground
+        curr = 1000 * (clocks.realtime = clocks.uptime = 2002);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
+
+        // UID starts the sensor (foreground)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 3004);
+        bi.noteStartSensorLocked(UID, SENSOR_ID);
+
+        // UID_2 in background
+        curr = 1000 * (clocks.realtime = clocks.uptime = 4008);
+        bi.noteUidProcessStateLocked(UID_2, ActivityManager.PROCESS_STATE_RECEIVER); // background
+
+        // UID_2 starts the sensor (background)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 5016);
+        bi.noteStartSensorLocked(UID_2, SENSOR_ID);
+
+        // UID enters background
+        curr = 1000 * (clocks.realtime = clocks.uptime = 6032);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
+
+        // UID enters background again (from a different background state)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 7004);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_LAST_ACTIVITY);
+
+        // UID_2 stops the sensor (background), then starts it again, then stops again
+        curr = 1000 * (clocks.realtime = clocks.uptime = 8064);
+        bi.noteStopSensorLocked(UID_2, SENSOR_ID);
+        curr = 1000 * (clocks.realtime = clocks.uptime = 9128);
+        bi.noteStartSensorLocked(UID_2, SENSOR_ID);
+        curr = 1000 * (clocks.realtime = clocks.uptime = 10256);
+        bi.noteStopSensorLocked(UID_2, SENSOR_ID);
+
+        // UID re-enters foreground
+        curr = 1000 * (clocks.realtime = clocks.uptime = 11512);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
+
+        // UID starts the sensor a second time (foreground)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 12000);
+        bi.noteStartSensorLocked(UID, SENSOR_ID);
+
+        // UID re-enters background
+        curr = 1000 * (clocks.realtime = clocks.uptime = 13002);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
+
+        // UID stops the sensor completely (background)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 14004);
+        bi.noteStopSensorLocked(UID, SENSOR_ID);
+        curr = 1000 * (clocks.realtime = clocks.uptime = 14024);
+        bi.noteStopSensorLocked(UID, SENSOR_ID);
+
+        // UID starts the sensor anew (background)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 15010);
+        bi.noteStartSensorLocked(UID, SENSOR_ID);
+
+        // UID stops the sensor (background)
+        curr = 1000 * (clocks.realtime = clocks.uptime = 16020);
+        bi.noteStopSensorLocked(UID, SENSOR_ID);
+
+//      Summary
+//        UID
+//        foreground: 2002---6032,              11512---13002
+//        background:        6032---------------11512,  13002--------------------------
+//        sensor running: 3004-----------------------------14024, 15010-16020
+//
+//        UID2
+//        foreground:
+//        background:       4008-------------------------------------------------------
+//        sensor running:    5016--8064, 9128-10256
+
+        BatteryStats.Timer timer1 = bi.getUidStats().get(UID).getSensorStats()
+                .get(SENSOR_ID).getSensorTime();
+        BatteryStats.Timer bgTimer1 = bi.getUidStats().get(UID).getSensorStats()
+                .get(SENSOR_ID).getSensorBackgroundTime();
+
+        BatteryStats.Timer timer2 = bi.getUidStats().get(UID_2).getSensorStats()
+                .get(SENSOR_ID).getSensorTime();
+        BatteryStats.Timer bgTimer2 = bi.getUidStats().get(UID_2).getSensorStats()
+                .get(SENSOR_ID).getSensorBackgroundTime();
+
+        // Expected values
+        long expActualTime1 = (14024 - 3004) + (16020 - 15010);
+        long expBgTime1 = (11512 - 6032) + (14024 - 13002) + (16020 - 15010);
+
+        long expActualTime2 = (8064 - 5016) + (10256 - 9128);
+        long expBgTime2 = (8064 - 5016) + (10256 - 9128);
+
+        long expBlamedTime1 = (5016 - 3004) + (8064 - 5016)/2 + (9128 - 8064) + (10256 - 9128)/2
+                + (14024 - 10256) + (16020 - 15010);
+        long expBlamedTime2 = (8064 - 5016)/2 + (10256 - 9128)/2;
+
+        // Test: UID - blamed time
+        assertEquals(expBlamedTime1 * 1000,
+                timer1.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
+        // Test: UID - actual time
+        assertEquals(expActualTime1 * 1000,
+                timer1.getTotalDurationMsLocked(clocks.realtime) * 1000 );
+        // Test: UID - background time
+        // bg timer ignores pools, so both totalTime and totalDuration should give the same result
+        assertEquals(expBgTime1 * 1000,
+                bgTimer1.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(expBgTime1 * 1000,
+                bgTimer1.getTotalDurationMsLocked(clocks.realtime) * 1000 );
+        // Test: UID - count
+        assertEquals(2, timer1.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        // Test: UID - background count
+        assertEquals(1, bgTimer1.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // Test: UID_2 - blamed time
+        assertEquals(expBlamedTime2 * 1000,
+                timer2.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
+        // Test: UID_2 - actual time
+        assertEquals(expActualTime2 * 1000,
+                timer2.getTotalDurationMsLocked(clocks.realtime) * 1000);
+        // Test: UID_2 - background time
+        // bg timer ignores pools, so both totalTime and totalDuration should give the same result
+        assertEquals(expBgTime2 * 1000,
+                bgTimer2.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
+        assertEquals(expBgTime2 * 1000,
+                bgTimer2.getTotalDurationMsLocked(clocks.realtime) * 1000 );
+        // Test: UID_2 - count
+        assertEquals(2, timer2.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        // Test: UID_2 - background count
+        assertEquals(2, bgTimer2.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+    }
+
+    @SmallTest
+    public void testSensorReset() throws Exception {
+        final MockClock clocks = new MockClock();
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        bi.mForceOnBattery = true;
+        clocks.realtime = 100;
+        clocks.uptime = 100;
+        bi.getOnBatteryTimeBase().setRunning(true, 100_000, 100_000);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_RECEIVER);
+
+        clocks.realtime += 100;
+        clocks.uptime += 100;
+
+        bi.noteStartSensorLocked(UID, SENSOR_ID);
+
+        clocks.realtime += 100;
+        clocks.uptime += 100;
+
+        // The sensor is started and the timer has been created.
+        final BatteryStats.Uid uid = bi.getUidStats().get(UID);
+        assertNotNull(uid);
+
+        BatteryStats.Uid.Sensor sensor = uid.getSensorStats().get(SENSOR_ID);
+        assertNotNull(sensor);
+        assertNotNull(sensor.getSensorTime());
+        assertNotNull(sensor.getSensorBackgroundTime());
+
+        // Reset the stats. Since the sensor is still running, we should still see the timer
+        bi.getUidStatsLocked(UID).reset(clocks.uptime * 1000, clocks.realtime * 1000, 0);
+
+        sensor = uid.getSensorStats().get(SENSOR_ID);
+        assertNotNull(sensor);
+        assertNotNull(sensor.getSensorTime());
+        assertNotNull(sensor.getSensorBackgroundTime());
+
+        bi.noteStopSensorLocked(UID, SENSOR_ID);
+
+        // Now the sensor timer has stopped so this reset should also take out the sensor.
+        bi.getUidStatsLocked(UID).reset(clocks.uptime * 1000, clocks.realtime * 1000, 0);
+
+        sensor = uid.getSensorStats().get(SENSOR_ID);
+        assertNull(sensor);
+    }
+
+    @SmallTest
+    public void testSensorResetTimes() throws Exception {
+        final MockClock clocks = new MockClock();
+        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
+        final int which = BatteryStats.STATS_SINCE_CHARGED;
+        bi.mForceOnBattery = true;
+        clocks.realtime = 100; // in ms
+        clocks.uptime = 100; // in ms
+
+        // TimeBases are on for some time.
+        BatteryStatsImpl.TimeBase timeBase = bi.getOnBatteryTimeBase();
+        BatteryStatsImpl.TimeBase bgTimeBase = bi.getOnBatteryBackgroundTimeBase(UID);
+        timeBase.setRunning(true, clocks.uptime * 1000, clocks.realtime * 1000);
+        bgTimeBase.setRunning(true, clocks.uptime * 1000, clocks.realtime * 1000);
+        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
+
+        clocks.realtime += 100;
+        clocks.uptime += 100;
+
+        // TimeBases are turned off
+        timeBase.setRunning(false, clocks.uptime * 1000, clocks.realtime * 1000);
+        bgTimeBase.setRunning(false, clocks.uptime * 1000, clocks.realtime * 1000);
+
+        clocks.realtime += 100;
+        clocks.uptime += 100;
+
+        // Timer is turned on
+        bi.noteStartSensorLocked(UID, SENSOR_ID);
+
+        clocks.realtime += 100;
+        clocks.uptime += 100;
+
+        // Timebase was off so times are all 0.
+        BatteryStats.Uid.Sensor sensor = bi.getUidStats().get(UID).getSensorStats().get(SENSOR_ID);
+        BatteryStats.Timer timer = sensor.getSensorTime();
+        BatteryStats.Timer bgTimer = sensor.getSensorBackgroundTime();
+        assertEquals(0, timer.getTotalTimeLocked(1000*clocks.realtime, which));
+        assertEquals(0, timer.getTotalDurationMsLocked(clocks.realtime));
+        assertEquals(0, bgTimer.getTotalTimeLocked(1000*clocks.realtime, which));
+        assertEquals(0, bgTimer.getTotalDurationMsLocked(clocks.realtime));
+
+        clocks.realtime += 100;
+        clocks.uptime += 100;
+
+        // Reset the stats. Since the sensor is still running, we should still see the timer
+        // but still with 0 times.
+        bi.getUidStatsLocked(UID).reset(clocks.uptime * 1000, clocks.realtime * 1000, 0);
+        assertEquals(0, timer.getTotalTimeLocked(1000*clocks.realtime, which));
+        assertEquals(0, timer.getTotalDurationMsLocked(clocks.realtime));
+        assertEquals(0, bgTimer.getTotalTimeLocked(1000*clocks.realtime, which));
+        assertEquals(0, bgTimer.getTotalDurationMsLocked(clocks.realtime));
+
+        clocks.realtime += 100;
+        clocks.uptime += 100;
+
+        // Now stop the timer. The times should still be 0.
+        bi.noteStopSensorLocked(UID, SENSOR_ID);
+        assertEquals(0, timer.getTotalTimeLocked(1000*clocks.realtime, which));
+        assertEquals(0, timer.getTotalDurationMsLocked(clocks.realtime));
+        assertEquals(0, bgTimer.getTotalTimeLocked(1000*clocks.realtime, which));
+        assertEquals(0, bgTimer.getTotalDurationMsLocked(clocks.realtime));
+
+        // Now repeat with the TimeBases turned on the entire time.
+        timeBase.setRunning(true, clocks.uptime * 1000, clocks.realtime * 1000);
+        bgTimeBase.setRunning(true, clocks.uptime * 1000, clocks.realtime * 1000);
+        clocks.realtime += 100;
+        clocks.uptime += 100;
+
+        // Timer is turned on
+        bi.noteStartSensorLocked(UID, SENSOR_ID);
+
+        clocks.realtime += 111;
+        clocks.uptime += 111;
+
+        // Timebase and timer was on so times have increased.
+        assertEquals(111_000, timer.getTotalTimeLocked(1000*clocks.realtime, which));
+        assertEquals(111, timer.getTotalDurationMsLocked(clocks.realtime));
+        assertEquals(111_000, bgTimer.getTotalTimeLocked(1000*clocks.realtime, which));
+        assertEquals(111, bgTimer.getTotalDurationMsLocked(clocks.realtime));
+
+        clocks.realtime += 100;
+        clocks.uptime += 100;
+
+        // Reset the stats. Since the sensor is still running, we should still see the timer
+        // but with 0 times.
+        bi.getUidStatsLocked(UID).reset(clocks.uptime * 1000, clocks.realtime * 1000, 0);
+        assertEquals(0, timer.getTotalTimeLocked(1000*clocks.realtime, which));
+        assertEquals(0, timer.getTotalDurationMsLocked(clocks.realtime));
+        assertEquals(0, bgTimer.getTotalTimeLocked(1000*clocks.realtime, which));
+        assertEquals(0, bgTimer.getTotalDurationMsLocked(clocks.realtime));
+
+        clocks.realtime += 112;
+        clocks.uptime += 112;
+
+        // Now stop the timer. The times should have increased since the timebase was on.
+        bi.noteStopSensorLocked(UID, SENSOR_ID);
+        assertEquals(112_000, timer.getTotalTimeLocked(1000*clocks.realtime, which));
+        assertEquals(112, timer.getTotalDurationMsLocked(clocks.realtime));
+        assertEquals(112_000, bgTimer.getTotalTimeLocked(1000*clocks.realtime, which));
+        assertEquals(112, bgTimer.getTotalDurationMsLocked(clocks.realtime));
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsServTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsServTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsServTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsServTest.java
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsStopwatchTimerTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsStopwatchTimerTest.java
new file mode 100644
index 0000000..18a366c
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsStopwatchTimerTest.java
@@ -0,0 +1,148 @@
+/*
+ * 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.server.power.stats;
+
+import android.os.BatteryStats;
+
+import androidx.test.filters.SmallTest;
+
+import junit.framework.TestCase;
+
+/**
+ * Test BatteryStatsImpl.StopwatchTimer.
+ */
+public class BatteryStatsStopwatchTimerTest extends TestCase {
+
+    // Primarily testing previous bug that incremented count when timeBase was off and bug that gave
+    // negative values of count.
+    @SmallTest
+    public void testCount() throws Exception {
+        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
+        final BatteryStatsImpl.TimeBase timeBase = new BatteryStatsImpl.TimeBase();
+        timeBase.init(clocks.uptimeMillis(), clocks.elapsedRealtime());
+        final BatteryStatsImpl.StopwatchTimer timer = new BatteryStatsImpl.StopwatchTimer(clocks,
+                null, BatteryStats.SENSOR, null, timeBase);
+        int expectedCount = 0;
+
+        // for timeBase off tests
+        timeBase.setRunning(false, 1000 * clocks.realtime, 1000 * clocks.realtime);
+
+        // timeBase off, start, stop
+        timer.startRunningLocked(updateTime(clocks, 100)); // start
+        // Used to fail due to b/36730213 increasing count.
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        timer.startRunningLocked(updateTime(clocks, 110)); // start
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        timer.stopRunningLocked(updateTime(clocks, 120)); // stop
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        timer.stopRunningLocked(updateTime(clocks, 130)); // stop
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // timeBase off, start and immediately stop
+        timer.startRunningLocked(updateTime(clocks, 200)); // start
+        timer.stopRunningLocked(updateTime(clocks, 200)); // stop
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // timeBase off, start, reset, stop
+        timer.startRunningLocked(updateTime(clocks, 300)); // start
+        updateTime(clocks, 310);
+        timeBase.init(clocks.uptimeMillis(), clocks.elapsedRealtime());
+        timer.reset(false);
+        expectedCount = 0; // count will be reset by reset()
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        timer.stopRunningLocked(updateTime(clocks, 350)); // stop
+        // Used to fail due to b/30099724 giving -1.
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // timeBase off, start and immediately reset, stop
+        timer.startRunningLocked(updateTime(clocks, 400)); // start
+        timer.reset(false);
+        expectedCount = 0; // count will be reset by reset()
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        timer.stopRunningLocked(updateTime(clocks, 450)); // stop
+        // Used to fail due to b/30099724 giving -1.
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+
+        // for timeBase on tests
+        updateTime(clocks, 2000);
+        timeBase.setRunning(true, 1000 * clocks.realtime, 1000 * clocks.realtime);
+        assertFalse(timer.isRunningLocked());
+
+        // timeBase on, start, stop
+        timer.startRunningLocked(updateTime(clocks, 2100)); // start
+        expectedCount++;
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        timer.startRunningLocked(updateTime(clocks, 2110)); // start
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        timer.stopRunningLocked(updateTime(clocks, 2120)); // stop
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        timer.stopRunningLocked(updateTime(clocks, 2130)); // stop
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // timeBase on, start and immediately stop
+        timer.startRunningLocked(updateTime(clocks, 2200)); // start
+        timer.stopRunningLocked(updateTime(clocks, 2200)); // stop
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // timeBase on, start, reset, stop
+        timer.startRunningLocked(updateTime(clocks, 2300)); // start
+        updateTime(clocks, 2310);
+        timeBase.init(clocks.uptimeMillis(), clocks.elapsedRealtime());
+        timer.reset(false);
+        expectedCount = 0; // count will be reset by reset()
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        timer.stopRunningLocked(updateTime(clocks, 2350)); // stop
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // timeBase on, start and immediately reset, stop
+        timer.startRunningLocked(updateTime(clocks, 2400)); // start
+        timer.reset(false);
+        expectedCount = 0; // count will be reset by reset()
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        timer.stopRunningLocked(updateTime(clocks, 2450)); // stop
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+
+        // change timeBase tests
+        // timeBase off, start
+        updateTime(clocks, 3000);
+        timeBase.setRunning(false, 1000 * clocks.realtime, 1000 * clocks.realtime);
+        timer.startRunningLocked(updateTime(clocks, 3100)); // start
+        // Used to fail due to b/36730213 increasing count.
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        // timeBase on, stop
+        updateTime(clocks, 3200);
+        timeBase.setRunning(true, 1000 * clocks.realtime, 1000 * clocks.realtime);
+        timer.stopRunningLocked(updateTime(clocks, 3300)); // stop
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+        // timeBase on, start
+        timer.startRunningLocked(updateTime(clocks, 3400)); // start
+        expectedCount++;
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+        // timeBase off, stop
+        updateTime(clocks, 3500);
+        timeBase.setRunning(false, 1000 * clocks.realtime, 1000 * clocks.realtime);
+        timer.stopRunningLocked(updateTime(clocks, 3600)); // stop
+        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+    }
+
+    private static long updateTime(MockClock clocks, long time) {
+        return clocks.realtime = clocks.uptime = time;
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsTimeBaseTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsTimeBaseTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsTimeBaseTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsTimeBaseTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsTimerTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsTimerTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsTimerTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsTimerTest.java
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsUserLifecycleTests.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsUserLifecycleTests.java
new file mode 100644
index 0000000..face849
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsUserLifecycleTests.java
@@ -0,0 +1,173 @@
+/*
+ * 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.server.power.stats;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assume.assumeTrue;
+
+import android.app.ActivityManager;
+import android.app.IActivityManager;
+import android.app.IStopUserCallback;
+import android.content.Context;
+import android.content.pm.UserInfo;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.util.ArraySet;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.LargeTest;
+import androidx.test.runner.AndroidJUnit4;
+import androidx.test.uiautomator.UiDevice;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+@LargeTest
+@RunWith(AndroidJUnit4.class)
+public class BatteryStatsUserLifecycleTests {
+
+    private static final long POLL_INTERVAL_MS = 500;
+    private static final long USER_REMOVE_TIMEOUT_MS = 5_000;
+    private static final long STOP_USER_TIMEOUT_MS = 20_000;
+    private static final long USER_UIDS_REMOVE_TIMEOUT_MS = 20_000;
+    private static final long BATTERYSTATS_POLLING_TIMEOUT_MS = 5_000;
+
+    private static final String CPU_DATA_TAG = "cpu";
+    private static final String CPU_FREQ_DATA_TAG = "ctf";
+
+    private int mTestUserId = UserHandle.USER_NULL;
+    private Context mContext;
+    private UserManager mUm;
+    private IActivityManager mIam;
+
+    @BeforeClass
+    public static void setUpOnce() {
+        assumeTrue(UserManager.getMaxSupportedUsers() > 1);
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        mContext = InstrumentationRegistry.getTargetContext();
+        mUm = UserManager.get(mContext);
+        mIam = ActivityManager.getService();
+        final UserInfo user = mUm.createUser("Test_user_" + System.currentTimeMillis() / 1000, 0);
+        assertNotNull("Unable to create test user", user);
+        mTestUserId = user.id;
+        batteryOnScreenOff();
+    }
+
+    @Test
+    public void testNoCpuDataForRemovedUser() throws Exception {
+        mIam.startUserInBackground(mTestUserId);
+        waitUntilTrue("No uids for started user " + mTestUserId,
+                () -> getNumberOfUidsInBatteryStats() > 0, BATTERYSTATS_POLLING_TIMEOUT_MS);
+
+        final boolean[] userStopped = new boolean[1];
+        CountDownLatch stopUserLatch = new CountDownLatch(1);
+        mIam.stopUser(mTestUserId, true, new IStopUserCallback.Stub() {
+            @Override
+            public void userStopped(int userId) throws RemoteException {
+                userStopped[0] = true;
+                stopUserLatch.countDown();
+            }
+
+            @Override
+            public void userStopAborted(int userId) throws RemoteException {
+                stopUserLatch.countDown();
+            }
+        });
+        assertTrue("User " + mTestUserId + " could not be stopped in " + STOP_USER_TIMEOUT_MS,
+                stopUserLatch.await(STOP_USER_TIMEOUT_MS, TimeUnit.MILLISECONDS));
+        assertTrue("User " + mTestUserId + " could not be stopped", userStopped[0]);
+
+        mUm.removeUser(mTestUserId);
+        waitUntilTrue("Unable to remove user " + mTestUserId, () -> {
+            for (UserInfo user : mUm.getUsers()) {
+                if (user.id == mTestUserId) {
+                    return false;
+                }
+            }
+            return true;
+        }, USER_REMOVE_TIMEOUT_MS);
+        waitUntilTrue("Uids still found for removed user " + mTestUserId,
+                () -> getNumberOfUidsInBatteryStats() == 0, USER_UIDS_REMOVE_TIMEOUT_MS);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        batteryOffScreenOn();
+        if (mTestUserId != UserHandle.USER_NULL) {
+            mUm.removeUser(mTestUserId);
+        }
+    }
+
+    private int getNumberOfUidsInBatteryStats() throws Exception {
+        ArraySet<Integer> uids = new ArraySet<>();
+        final String dumpsys = executeShellCommand("dumpsys batterystats --checkin");
+        for (String line : dumpsys.split("\n")) {
+            final String[] parts = line.trim().split(",");
+            if (parts.length < 5 ||
+                    (!parts[3].equals(CPU_DATA_TAG) && !parts[3].equals(CPU_FREQ_DATA_TAG))) {
+                continue;
+            }
+            try {
+                final int uid = Integer.parseInt(parts[1]);
+                if (UserHandle.getUserId(uid) == mTestUserId) {
+                    uids.add(uid);
+                }
+            } catch (NumberFormatException nexc) {
+                // ignore
+            }
+        }
+        return uids.size();
+    }
+
+    protected void batteryOnScreenOff() throws Exception {
+        executeShellCommand("dumpsys battery unplug");
+        executeShellCommand("dumpsys batterystats enable pretend-screen-off");
+    }
+
+    protected void batteryOffScreenOn() throws Exception {
+        executeShellCommand("dumpsys battery reset");
+        executeShellCommand("dumpsys batterystats disable pretend-screen-off");
+    }
+
+    private String executeShellCommand(String cmd) throws Exception {
+        return UiDevice.getInstance(
+                InstrumentationRegistry.getInstrumentation()).executeShellCommand(cmd);
+    }
+
+    private void waitUntilTrue(String message, Condition condition, long timeout) throws Exception {
+        final long deadLine = System.currentTimeMillis() + timeout;
+        while (System.currentTimeMillis() <= deadLine && !condition.isTrue()) {
+            Thread.sleep(POLL_INTERVAL_MS);
+        }
+        assertTrue(message, condition.isTrue());
+    }
+
+    private interface Condition {
+        boolean isTrue() throws Exception;
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryUsageStatsProviderTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsProviderTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryUsageStatsProviderTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsProviderTest.java
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsRule.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsRule.java
new file mode 100644
index 0000000..534aa89
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsRule.java
@@ -0,0 +1,289 @@
+/*
+ * 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.server.power.stats;
+
+import static org.mockito.ArgumentMatchers.anyDouble;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.annotation.XmlRes;
+import android.content.Context;
+import android.net.NetworkStats;
+import android.os.BatteryConsumer;
+import android.os.BatteryStats;
+import android.os.BatteryUsageStats;
+import android.os.BatteryUsageStatsQuery;
+import android.os.UidBatteryConsumer;
+import android.os.UserBatteryConsumer;
+import android.util.SparseArray;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.os.CpuScalingPolicies;
+import com.android.internal.os.PowerProfile;
+import com.android.internal.power.EnergyConsumerStats;
+
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+import org.mockito.stubbing.Answer;
+
+import java.io.File;
+import java.util.Arrays;
+
+public class BatteryUsageStatsRule implements TestRule {
+    public static final BatteryUsageStatsQuery POWER_PROFILE_MODEL_ONLY =
+            new BatteryUsageStatsQuery.Builder()
+                    .powerProfileModeledOnly()
+                    .includePowerModels()
+                    .build();
+    private final Context mContext;
+
+    private final PowerProfile mPowerProfile;
+    private final MockClock mMockClock = new MockClock();
+    private final MockBatteryStatsImpl mBatteryStats;
+
+    private BatteryUsageStats mBatteryUsageStats;
+    private boolean mScreenOn;
+    private boolean mDefaultCpuScalingPolicy = true;
+    private SparseArray<int[]> mCpusByPolicy = new SparseArray<>();
+    private SparseArray<int[]> mFreqsByPolicy = new SparseArray<>();
+
+    public BatteryUsageStatsRule() {
+        this(0, null);
+    }
+
+    public BatteryUsageStatsRule(long currentTime) {
+        this(currentTime, null);
+    }
+
+    public BatteryUsageStatsRule(long currentTime, File historyDir) {
+        mContext = InstrumentationRegistry.getContext();
+        mPowerProfile = spy(new PowerProfile(mContext, true /* forTest */));
+        mMockClock.currentTime = currentTime;
+        mBatteryStats = new MockBatteryStatsImpl(mMockClock, historyDir);
+        mBatteryStats.setPowerProfile(mPowerProfile);
+
+        mCpusByPolicy.put(0, new int[]{0, 1, 2, 3});
+        mCpusByPolicy.put(4, new int[]{4, 5, 6, 7});
+        mFreqsByPolicy.put(0, new int[]{300000, 1000000, 2000000});
+        mFreqsByPolicy.put(4, new int[]{300000, 1000000, 2500000, 3000000});
+        mBatteryStats.setCpuScalingPolicies(new CpuScalingPolicies(mCpusByPolicy, mFreqsByPolicy));
+
+        mBatteryStats.onSystemReady();
+    }
+
+    public BatteryUsageStatsRule setTestPowerProfile(@XmlRes int xmlId) {
+        mPowerProfile.forceInitForTesting(mContext, xmlId);
+        return this;
+    }
+
+    public BatteryUsageStatsRule setCpuScalingPolicy(int policy, int[] relatedCpus,
+            int[] frequencies) {
+        if (mDefaultCpuScalingPolicy) {
+            mCpusByPolicy.clear();
+            mFreqsByPolicy.clear();
+            mDefaultCpuScalingPolicy = false;
+        }
+        mCpusByPolicy.put(policy, relatedCpus);
+        mFreqsByPolicy.put(policy, frequencies);
+        mBatteryStats.setCpuScalingPolicies(new CpuScalingPolicies(mCpusByPolicy, mFreqsByPolicy));
+        return this;
+    }
+
+    public BatteryUsageStatsRule setAveragePower(String key, double value) {
+        when(mPowerProfile.getAveragePower(key)).thenReturn(value);
+        when(mPowerProfile.getAveragePowerOrDefault(eq(key), anyDouble())).thenReturn(value);
+        return this;
+    }
+
+    public BatteryUsageStatsRule setAveragePowerUnspecified(String key) {
+        when(mPowerProfile.getAveragePower(key)).thenReturn(0.0);
+        when(mPowerProfile.getAveragePowerOrDefault(eq(key), anyDouble()))
+                .thenAnswer((Answer<Double>) invocation -> (Double) invocation.getArguments()[1]);
+        return this;
+    }
+
+    public BatteryUsageStatsRule setAveragePower(String key, double[] values) {
+        when(mPowerProfile.getNumElements(key)).thenReturn(values.length);
+        for (int i = 0; i < values.length; i++) {
+            when(mPowerProfile.getAveragePower(key, i)).thenReturn(values[i]);
+        }
+        return this;
+    }
+
+    public BatteryUsageStatsRule setAveragePowerForCpuScalingPolicy(int policy, double value) {
+        when(mPowerProfile.getAveragePowerForCpuScalingPolicy(policy)).thenReturn(value);
+        return this;
+    }
+
+    public BatteryUsageStatsRule setAveragePowerForCpuScalingStep(int policy, int step,
+            double value) {
+        when(mPowerProfile.getAveragePowerForCpuScalingStep(policy, step)).thenReturn(value);
+        return this;
+    }
+
+    public BatteryUsageStatsRule setAveragePowerForOrdinal(String group, int ordinal,
+            double value) {
+        when(mPowerProfile.getAveragePowerForOrdinal(group, ordinal)).thenReturn(value);
+        when(mPowerProfile.getAveragePowerForOrdinal(eq(group), eq(ordinal),
+                anyDouble())).thenReturn(value);
+        return this;
+    }
+
+    public BatteryUsageStatsRule setNumDisplays(int value) {
+        when(mPowerProfile.getNumDisplays()).thenReturn(value);
+        mBatteryStats.setDisplayCountLocked(value);
+        return this;
+    }
+
+    public BatteryUsageStatsRule setPerUidModemModel(int perUidModemModel) {
+        synchronized (mBatteryStats) {
+            mBatteryStats.setPerUidModemModel(perUidModemModel);
+        }
+        return this;
+    }
+
+    /** Call only after setting the power profile information. */
+    public BatteryUsageStatsRule initMeasuredEnergyStatsLocked() {
+        return initMeasuredEnergyStatsLocked(new String[0]);
+    }
+
+    /** Call only after setting the power profile information. */
+    public BatteryUsageStatsRule initMeasuredEnergyStatsLocked(
+            String[] customPowerComponentNames) {
+        final boolean[] supportedStandardBuckets =
+                new boolean[EnergyConsumerStats.NUMBER_STANDARD_POWER_BUCKETS];
+        Arrays.fill(supportedStandardBuckets, true);
+        synchronized (mBatteryStats) {
+            mBatteryStats.initEnergyConsumerStatsLocked(supportedStandardBuckets,
+                    customPowerComponentNames);
+            mBatteryStats.informThatAllExternalStatsAreFlushed();
+        }
+        return this;
+    }
+
+    public BatteryUsageStatsRule startWithScreenOn(boolean screenOn) {
+        mScreenOn = screenOn;
+        return this;
+    }
+
+    public void setNetworkStats(NetworkStats networkStats) {
+        mBatteryStats.setNetworkStats(networkStats);
+    }
+
+    @Override
+    public Statement apply(Statement base, Description description) {
+        return new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                noteOnBattery();
+                base.evaluate();
+            }
+        };
+    }
+
+    private void noteOnBattery() {
+        mBatteryStats.setOnBatteryInternal(true);
+        mBatteryStats.getOnBatteryTimeBase().setRunning(true, 0, 0);
+        mBatteryStats.getOnBatteryScreenOffTimeBase().setRunning(!mScreenOn, 0, 0);
+    }
+
+    public PowerProfile getPowerProfile() {
+        return mPowerProfile;
+    }
+
+    public CpuScalingPolicies getCpuScalingPolicies() {
+        synchronized (mBatteryStats) {
+            return mBatteryStats.getCpuScalingPolicies();
+        }
+    }
+
+    public MockBatteryStatsImpl getBatteryStats() {
+        return mBatteryStats;
+    }
+
+    public BatteryStatsImpl.Uid getUidStats(int uid) {
+        return mBatteryStats.getUidStatsLocked(uid);
+    }
+
+    public void setTime(long realtimeMs, long uptimeMs) {
+        mMockClock.currentTime = realtimeMs;
+        mMockClock.realtime = realtimeMs;
+        mMockClock.uptime = uptimeMs;
+    }
+
+    public void setCurrentTime(long currentTimeMs) {
+        mMockClock.currentTime = currentTimeMs;
+    }
+
+    BatteryUsageStats apply(PowerCalculator... calculators) {
+        return apply(new BatteryUsageStatsQuery.Builder().includePowerModels().build(),
+                calculators);
+    }
+
+    BatteryUsageStats apply(BatteryUsageStatsQuery query, PowerCalculator... calculators) {
+        final String[] customPowerComponentNames = mBatteryStats.getCustomEnergyConsumerNames();
+        final boolean includePowerModels = (query.getFlags()
+                & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_POWER_MODELS) != 0;
+        final boolean includeProcessStateData = (query.getFlags()
+                & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_PROCESS_STATE_DATA) != 0;
+        BatteryUsageStats.Builder builder = new BatteryUsageStats.Builder(
+                customPowerComponentNames, includePowerModels, includeProcessStateData);
+        SparseArray<? extends BatteryStats.Uid> uidStats = mBatteryStats.getUidStats();
+        for (int i = 0; i < uidStats.size(); i++) {
+            builder.getOrCreateUidBatteryConsumerBuilder(uidStats.valueAt(i));
+        }
+
+        for (PowerCalculator calculator : calculators) {
+            calculator.calculate(builder, mBatteryStats, mMockClock.realtime * 1000,
+                    mMockClock.uptime * 1000, query);
+        }
+
+        mBatteryUsageStats = builder.build();
+        return mBatteryUsageStats;
+    }
+
+    public BatteryConsumer getDeviceBatteryConsumer() {
+        return mBatteryUsageStats.getAggregateBatteryConsumer(
+                BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE);
+    }
+
+    public BatteryConsumer getAppsBatteryConsumer() {
+        return mBatteryUsageStats.getAggregateBatteryConsumer(
+                BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_ALL_APPS);
+    }
+
+    public UidBatteryConsumer getUidBatteryConsumer(int uid) {
+        for (UidBatteryConsumer ubc : mBatteryUsageStats.getUidBatteryConsumers()) {
+            if (ubc.getUid() == uid) {
+                return ubc;
+            }
+        }
+        return null;
+    }
+
+    public UserBatteryConsumer getUserBatteryConsumer(int userId) {
+        for (UserBatteryConsumer ubc : mBatteryUsageStats.getUserBatteryConsumers()) {
+            if (ubc.getUserId() == userId) {
+                return ubc;
+            }
+        }
+        return null;
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryUsageStatsStoreTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsStoreTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryUsageStatsStoreTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsStoreTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryUsageStatsTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BatteryUsageStatsTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BluetoothPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BluetoothPowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/BluetoothPowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/BluetoothPowerCalculatorTest.java
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BstatsCpuTimesValidationTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BstatsCpuTimesValidationTest.java
new file mode 100644
index 0000000..ccace40
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BstatsCpuTimesValidationTest.java
@@ -0,0 +1,902 @@
+/*
+ * 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.server.power.stats;
+
+import static android.os.BatteryStats.UID_TIMES_TYPE_ALL;
+import static android.os.BatteryStats.Uid.NUM_PROCESS_STATE;
+import static android.os.BatteryStats.Uid.PROCESS_STATE_BACKGROUND;
+import static android.os.BatteryStats.Uid.PROCESS_STATE_CACHED;
+import static android.os.BatteryStats.Uid.PROCESS_STATE_FOREGROUND;
+import static android.os.BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE;
+import static android.os.BatteryStats.Uid.PROCESS_STATE_TOP;
+import static android.os.BatteryStats.Uid.PROCESS_STATE_TOP_SLEEPING;
+import static android.os.BatteryStats.Uid.UID_PROCESS_TYPES;
+
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertNull;
+import static junit.framework.Assert.assertTrue;
+import static junit.framework.Assert.fail;
+
+import android.app.ActivityManager;
+import android.app.KeyguardManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
+import android.os.BatteryManager;
+import android.os.BatteryStats;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.PowerManager;
+import android.os.Process;
+import android.os.SystemClock;
+import android.provider.Settings;
+import android.util.ArrayMap;
+import android.util.DebugUtils;
+import android.util.KeyValueListParser;
+import android.util.Log;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.LargeTest;
+import androidx.test.runner.AndroidJUnit4;
+import androidx.test.uiautomator.UiDevice;
+
+import com.android.frameworks.coretests.aidl.ICmdCallback;
+import com.android.frameworks.coretests.aidl.ICmdReceiver;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+import org.junit.runner.RunWith;
+
+import java.util.Arrays;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+@LargeTest
+@RunWith(AndroidJUnit4.class)
+public class BstatsCpuTimesValidationTest {
+    private static final String TAG = BstatsCpuTimesValidationTest.class.getSimpleName();
+
+    private static final String TEST_PKG = "com.android.coretests.apps.bstatstestapp";
+    private static final String TEST_ACTIVITY = TEST_PKG + ".TestActivity";
+    private static final String TEST_SERVICE = TEST_PKG + ".TestService";
+    private static final String ISOLATED_TEST_SERVICE = TEST_PKG + ".IsolatedTestService";
+
+    private static final String EXTRA_KEY_CMD_RECEIVER = "cmd_receiver";
+    private static final int FLAG_START_FOREGROUND = 1;
+
+    private static final int BATTERY_STATE_TIMEOUT_MS = 2000;
+    private static final int BATTERY_STATE_CHECK_INTERVAL_MS = 200;
+
+    private static final int START_ACTIVITY_TIMEOUT_MS = 2000;
+    private static final int START_FG_SERVICE_TIMEOUT_MS = 2000;
+    private static final int START_SERVICE_TIMEOUT_MS = 2000;
+    private static final int START_ISOLATED_SERVICE_TIMEOUT_MS = 2000;
+
+    private static final int SETTING_UPDATE_TIMEOUT_MS = 2000;
+    private static final int SETTING_UPDATE_CHECK_INTERVAL_MS = 200;
+
+    private static final int GENERAL_TIMEOUT_MS = 4000;
+    private static final int GENERAL_INTERVAL_MS = 200;
+
+    private static final int WORK_DURATION_MS = 2000;
+
+    private static boolean sBatteryStatsConstsUpdated;
+    private static String sOriginalBatteryStatsConsts;
+
+    private static Context sContext;
+    private static UiDevice sUiDevice;
+    private static int sTestPkgUid;
+    private static boolean sCpuFreqTimesAvailable;
+    private static boolean sPerProcStateTimesAvailable;
+
+    @Rule public TestName testName = new TestName();
+
+    @BeforeClass
+    public static void setupOnce() throws Exception {
+        sContext = InstrumentationRegistry.getContext();
+        sUiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
+        sContext.getPackageManager().setApplicationEnabledSetting(TEST_PKG,
+                PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
+        sTestPkgUid = sContext.getPackageManager().getPackageUid(TEST_PKG, 0);
+        executeCmd("cmd deviceidle whitelist +" + TEST_PKG);
+        checkCpuTimesAvailability();
+    }
+
+    @AfterClass
+    public static void tearDownOnce() throws Exception {
+        executeCmd("cmd deviceidle whitelist -" + TEST_PKG);
+        if (sBatteryStatsConstsUpdated) {
+            Settings.Global.putString(sContext.getContentResolver(),
+                    Settings.Global.BATTERY_STATS_CONSTANTS, sOriginalBatteryStatsConsts);
+        }
+        batteryReset();
+    }
+
+    private static void updateBatteryStatsConstants(ArrayMap<String, String> desiredConstants) {
+        sOriginalBatteryStatsConsts = Settings.Global.getString(sContext.getContentResolver(),
+                Settings.Global.BATTERY_STATS_CONSTANTS);
+        final char delimiter = ',';
+        final KeyValueListParser parser = new KeyValueListParser(delimiter);
+        parser.setString(sOriginalBatteryStatsConsts);
+        final StringBuilder sb = new StringBuilder();
+        for (int i = 0, size = parser.size(); i < size; ++i) {
+            final String key = parser.keyAt(i);
+            final String value = desiredConstants.getOrDefault(key,
+                    parser.getString(key, null));
+            if (sb.length() > 0) {
+                sb.append(delimiter);
+            }
+            sb.append(key + "=" + value);
+            desiredConstants.remove(key);
+        }
+        desiredConstants.forEach((key, value) -> {
+            if (sb.length() > 0) {
+                sb.append(delimiter);
+            }
+            sb.append(key + '=' + value);
+        });
+        Settings.Global.putString(sContext.getContentResolver(),
+                Settings.Global.BATTERY_STATS_CONSTANTS, sb.toString());
+        Log.d(TAG, "Updated value of '" + Settings.Global.BATTERY_STATS_CONSTANTS + "': "
+                + sb.toString());
+        sBatteryStatsConstsUpdated = true;
+    }
+
+    // Checks cpu freq times of system uid as an indication of whether /proc/uid_time_in_state
+    // and /proc/uid/<uid>/time_in_state kernel nodes are available.
+    private static void checkCpuTimesAvailability() throws Exception {
+        batteryOn();
+        SystemClock.sleep(GENERAL_TIMEOUT_MS);
+        batteryOff();
+        final long[] totalCpuTimes = getAllCpuFreqTimes(Process.SYSTEM_UID);
+        sCpuFreqTimesAvailable = totalCpuTimes != null;
+        final long[] fgCpuTimes = getAllCpuFreqTimes(Process.SYSTEM_UID,
+                PROCESS_STATE_FOREGROUND);
+        final long[] topCpuTimes = getAllCpuFreqTimes(Process.SYSTEM_UID,
+                PROCESS_STATE_TOP);
+        sPerProcStateTimesAvailable = fgCpuTimes != null || topCpuTimes != null;
+    }
+
+    @Test
+    public void testCpuFreqTimes() throws Exception {
+        if (!sCpuFreqTimesAvailable) {
+            Log.w(TAG, "Skipping " + testName.getMethodName()
+                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
+                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
+            return;
+        }
+
+        batteryOnScreenOn();
+        forceStop();
+        resetBatteryStats();
+        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
+        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
+                initialSnapshot);
+        doSomeWork();
+        forceStop();
+
+        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid);
+        assertCpuTimesValid(cpuTimesMs);
+        long actualCpuTimeMs = 0;
+        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
+            actualCpuTimeMs += cpuTimesMs[i];
+        }
+        assertApproximateValue("Incorrect total cpu time", WORK_DURATION_MS, actualCpuTimeMs);
+        batteryOffScreenOn();
+    }
+
+    @Test
+    public void testCpuFreqTimes_screenOff() throws Exception {
+        if (!sCpuFreqTimesAvailable) {
+            Log.w(TAG, "Skipping " + testName.getMethodName()
+                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
+                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
+            return;
+        }
+
+        batteryOnScreenOff();
+        forceStop();
+        resetBatteryStats();
+        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
+        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
+                initialSnapshot);
+        doSomeWork();
+        forceStop();
+
+        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid);
+        assertCpuTimesValid(cpuTimesMs);
+        long actualTotalCpuTimeMs = 0;
+        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
+            actualTotalCpuTimeMs += cpuTimesMs[i];
+        }
+        assertApproximateValue("Incorrect total cpu time", WORK_DURATION_MS, actualTotalCpuTimeMs);
+        long actualScreenOffCpuTimeMs = 0;
+        for (int i = cpuTimesMs.length / 2; i < cpuTimesMs.length; ++i) {
+            actualScreenOffCpuTimeMs += cpuTimesMs[i];
+        }
+        assertApproximateValue("Incorrect screen-off cpu time",
+                WORK_DURATION_MS, actualScreenOffCpuTimeMs);
+        batteryOffScreenOn();
+    }
+
+    @Test
+    public void testCpuFreqTimes_isolatedProcess() throws Exception {
+        if (!sCpuFreqTimesAvailable) {
+            Log.w(TAG, "Skipping " + testName.getMethodName()
+                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
+                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
+            return;
+        }
+
+        batteryOnScreenOn();
+        forceStop();
+        resetBatteryStats();
+        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
+        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
+                initialSnapshot);
+        doSomeWorkInIsolatedProcess();
+        forceStop();
+
+        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid);
+        assertCpuTimesValid(cpuTimesMs);
+        long actualCpuTimeMs = 0;
+        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
+            actualCpuTimeMs += cpuTimesMs[i];
+        }
+        assertApproximateValue("Incorrect total cpu time", WORK_DURATION_MS, actualCpuTimeMs);
+        batteryOffScreenOn();
+    }
+
+    @Test
+    public void testCpuFreqTimes_stateTop() throws Exception {
+        if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
+            Log.w(TAG, "Skipping " + testName.getMethodName()
+                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
+                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
+            return;
+        }
+
+        batteryOnScreenOn();
+        forceStop();
+        resetBatteryStats();
+        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
+        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
+                initialSnapshot);
+        assertNull("Initial top state snapshot should be null",
+                getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_TOP));
+
+        doSomeWork(PROCESS_STATE_TOP);
+        forceStop();
+
+        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_TOP);
+        final String msgCpuTimes = getAllCpuTimesMsg();
+        assertCpuTimesValid(cpuTimesMs);
+        long actualCpuTimeMs = 0;
+        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
+            actualCpuTimeMs += cpuTimesMs[i];
+        }
+        assertApproximateValue("Incorrect total cpu time, " + msgCpuTimes,
+                WORK_DURATION_MS, actualCpuTimeMs);
+        batteryOffScreenOn();
+    }
+
+    @Test
+    public void testIsolatedCpuFreqTimes_stateService() throws Exception {
+        if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
+            Log.w(TAG, "Skipping " + testName.getMethodName()
+                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
+                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
+            return;
+        }
+
+        batteryOnScreenOn();
+        forceStop();
+        resetBatteryStats();
+        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
+        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
+                initialSnapshot);
+        assertNull("Initial top state snapshot should be null",
+                getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_TOP));
+
+        final ICmdReceiver activityReceiver = ICmdReceiver.Stub.asInterface(startActivity());
+        final ICmdReceiver isolatedReceiver = ICmdReceiver.Stub.asInterface(startIsolatedService());
+        try {
+            assertProcState(PROCESS_STATE_TOP);
+            isolatedReceiver.doSomeWork(WORK_DURATION_MS);
+        } finally {
+            activityReceiver.finishHost();
+            isolatedReceiver.finishHost();
+        }
+        forceStop();
+
+        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_TOP);
+        final String msgCpuTimes = getAllCpuTimesMsg();
+        assertCpuTimesValid(cpuTimesMs);
+        long actualCpuTimeMs = 0;
+        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
+            actualCpuTimeMs += cpuTimesMs[i];
+        }
+        assertApproximateValue("Incorrect total cpu time, " + msgCpuTimes,
+                WORK_DURATION_MS, actualCpuTimeMs);
+        batteryOffScreenOn();
+    }
+
+    @Test
+    public void testCpuFreqTimes_stateTopSleeping() throws Exception {
+        if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
+            Log.w(TAG, "Skipping " + testName.getMethodName()
+                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
+                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
+            return;
+        }
+
+        batteryOnScreenOff();
+        forceStop();
+        resetBatteryStats();
+        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
+        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
+                initialSnapshot);
+        assertNull("Initial top state snapshot should be null",
+                getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_TOP_SLEEPING));
+
+        doSomeWork(PROCESS_STATE_TOP_SLEEPING);
+        forceStop();
+
+        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_TOP_SLEEPING);
+        final String msgCpuTimes = getAllCpuTimesMsg();
+        assertCpuTimesValid(cpuTimesMs);
+        long actualCpuTimeMs = 0;
+        for (int i = cpuTimesMs.length / 2; i < cpuTimesMs.length; ++i) {
+            actualCpuTimeMs += cpuTimesMs[i];
+        }
+        assertApproximateValue("Incorrect total cpu time, " + msgCpuTimes,
+                WORK_DURATION_MS, actualCpuTimeMs);
+        batteryOffScreenOn();
+    }
+
+    @Test
+    public void testCpuFreqTimes_stateFgService() throws Exception {
+        if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
+            Log.w(TAG, "Skipping " + testName.getMethodName()
+                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
+                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
+            return;
+        }
+
+        batteryOnScreenOff();
+        forceStop();
+        resetBatteryStats();
+        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
+        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
+                initialSnapshot);
+        assertNull("Initial top state snapshot should be null",
+                getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_FOREGROUND_SERVICE));
+
+        doSomeWork(PROCESS_STATE_FOREGROUND_SERVICE);
+        forceStop();
+
+        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_FOREGROUND_SERVICE);
+        final String msgCpuTimes = getAllCpuTimesMsg();
+        assertCpuTimesValid(cpuTimesMs);
+        long actualCpuTimeMs = 0;
+        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
+            actualCpuTimeMs += cpuTimesMs[i];
+        }
+        assertApproximateValue("Incorrect total cpu time, " + msgCpuTimes,
+                WORK_DURATION_MS, actualCpuTimeMs);
+        batteryOffScreenOn();
+    }
+
+    @Test
+    public void testCpuFreqTimes_stateFg() throws Exception {
+        if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
+            Log.w(TAG, "Skipping " + testName.getMethodName()
+                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
+                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
+            return;
+        }
+
+        batteryOnScreenOn();
+        forceStop();
+        resetBatteryStats();
+        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
+        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
+                initialSnapshot);
+        assertNull("Initial top state snapshot should be null",
+                getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_FOREGROUND));
+
+        doSomeWork(PROCESS_STATE_FOREGROUND);
+        forceStop();
+
+        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_FOREGROUND);
+        final String msgCpuTimes = getAllCpuTimesMsg();
+        assertCpuTimesValid(cpuTimesMs);
+        long actualCpuTimeMs = 0;
+        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
+            actualCpuTimeMs += cpuTimesMs[i];
+        }
+        assertApproximateValue("Incorrect total cpu time, " + msgCpuTimes,
+                WORK_DURATION_MS, actualCpuTimeMs);
+        batteryOff();
+    }
+
+    @Test
+    public void testCpuFreqTimes_stateBg() throws Exception {
+        if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
+            Log.w(TAG, "Skipping " + testName.getMethodName()
+                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
+                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
+            return;
+        }
+
+        batteryOnScreenOff();
+        forceStop();
+        resetBatteryStats();
+        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
+        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
+                initialSnapshot);
+        assertNull("Initial top state snapshot should be null",
+                getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_BACKGROUND));
+
+        doSomeWork(PROCESS_STATE_BACKGROUND);
+        forceStop();
+
+        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_BACKGROUND);
+        final String msgCpuTimes = getAllCpuTimesMsg();
+        assertCpuTimesValid(cpuTimesMs);
+        long actualCpuTimeMs = 0;
+        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
+            actualCpuTimeMs += cpuTimesMs[i];
+        }
+        assertApproximateValue("Incorrect total cpu time, " + msgCpuTimes,
+                WORK_DURATION_MS, actualCpuTimeMs);
+        batteryOffScreenOn();
+    }
+
+    @Test
+    public void testCpuFreqTimes_stateCached() throws Exception {
+        if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
+            Log.w(TAG, "Skipping " + testName.getMethodName()
+                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
+                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
+            return;
+        }
+
+        batteryOnScreenOn();
+        forceStop();
+        resetBatteryStats();
+        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
+        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
+                initialSnapshot);
+        assertNull("Initial top state snapshot should be null",
+                getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_CACHED));
+
+        doSomeWork(PROCESS_STATE_CACHED);
+        forceStop();
+
+        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_CACHED);
+        final String msgCpuTimes = getAllCpuTimesMsg();
+        assertCpuTimesValid(cpuTimesMs);
+        long actualCpuTimeMs = 0;
+        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
+            actualCpuTimeMs += cpuTimesMs[i];
+        }
+        assertApproximateValue("Incorrect total cpu time, " + msgCpuTimes,
+                WORK_DURATION_MS, actualCpuTimeMs);
+        batteryOffScreenOn();
+    }
+
+    private void assertCpuTimesValid(long[] cpuTimes) {
+        assertNotNull(cpuTimes);
+        for (int i = 0; i < cpuTimes.length; ++i) {
+            if (cpuTimes[i] < 0) {
+                fail("Malformed cpu times data (-ve values): " + Arrays.toString(cpuTimes));
+            }
+        }
+        final int numFreqs = cpuTimes.length / 2;
+        for (int i = 0; i < numFreqs; ++i) {
+            if (cpuTimes[i] < cpuTimes[numFreqs + i]) {
+                fail("Malformed cpu times data (screen-off > total)" + Arrays.toString(cpuTimes));
+            }
+        }
+    }
+
+    private void assertApproximateValue(String errorPrefix, long expectedValueMs,
+            long actualValueMs) {
+        // Allow the actual value to be 1 second smaller than the expected.
+        // Also allow it to be up to 5 seconds larger, to accommodate the arbitrary
+        // latency introduced by BatteryExternalStatsWorker.scheduleReadProcStateCpuTimes
+        assertValueRange(errorPrefix, actualValueMs,
+                expectedValueMs - 1000,
+                expectedValueMs + 5000);
+    }
+
+    private void assertValueRange(String errorPrefix,
+            long actualvalue, double minValue, double maxValue) {
+        final String errorMsg = String.format(errorPrefix + "; actual=%s; min=%s; max=%s",
+                actualvalue, minValue, maxValue);
+        assertTrue(errorMsg, actualvalue < maxValue);
+        assertTrue(errorMsg, actualvalue > minValue);
+    }
+
+    private void doSomeWork() throws Exception {
+        final ICmdReceiver receiver = ICmdReceiver.Stub.asInterface(startActivity());
+        receiver.doSomeWork(WORK_DURATION_MS);
+        receiver.finishHost();
+    }
+
+    private void doSomeWorkInIsolatedProcess() throws Exception {
+        final ICmdReceiver receiver = ICmdReceiver.Stub.asInterface(startIsolatedService());
+        receiver.doSomeWork(WORK_DURATION_MS);
+        receiver.finishHost();
+    }
+
+    private void doSomeWork(int procState) throws Exception {
+        final ICmdReceiver receiver;
+        switch (procState) {
+            case PROCESS_STATE_TOP:
+                receiver = ICmdReceiver.Stub.asInterface(startActivity());
+                break;
+            case PROCESS_STATE_TOP_SLEEPING:
+                receiver = ICmdReceiver.Stub.asInterface(startActivity());
+                break;
+            case PROCESS_STATE_FOREGROUND_SERVICE:
+                receiver = ICmdReceiver.Stub.asInterface(startForegroundService());
+                break;
+            case PROCESS_STATE_FOREGROUND:
+                receiver = ICmdReceiver.Stub.asInterface(startService());
+                receiver.showApplicationOverlay();
+                break;
+            case PROCESS_STATE_BACKGROUND:
+                receiver = ICmdReceiver.Stub.asInterface(startService());
+                break;
+            case PROCESS_STATE_CACHED:
+                receiver = ICmdReceiver.Stub.asInterface(startActivity());
+                receiver.finishHost();
+                break;
+            default:
+                throw new IllegalArgumentException("Unknown state: " + procState);
+        }
+        try {
+            assertProcState(procState);
+            receiver.doSomeWork(WORK_DURATION_MS);
+        } finally {
+            receiver.finishHost();
+        }
+    }
+
+    private void assertProcState(String state) throws Exception {
+        final String expectedState = "(" + state + ")";
+        assertDelayedCondition("", () -> {
+            final String uidStateStr = executeCmd("cmd activity get-uid-state " + sTestPkgUid);
+            final String actualState = uidStateStr.split(" ")[1];
+            return expectedState.equals(actualState) ? null
+                    : "expected=" + expectedState + ", actual" + actualState;
+        });
+    }
+
+    private void assertProcState(int expectedState) throws Exception {
+        assertDelayedCondition("Unexpected proc state", () -> {
+            final String uidStateStr = executeCmd("cmd activity get-uid-state " + sTestPkgUid);
+            final int amProcState = Integer.parseInt(uidStateStr.split(" ")[0]);
+            final int actualState = BatteryStats.mapToInternalProcessState(amProcState);
+            return (actualState == expectedState) ? null
+                    : "expected=" + getStateName(BatteryStats.Uid.class, expectedState)
+                            + ", actual=" + getStateName(BatteryStats.Uid.class, actualState)
+                            + ", amState=" + getStateName(ActivityManager.class, amProcState);
+        });
+    }
+
+    private String getStateName(Class clazz, int procState) {
+        return DebugUtils.valueToString(clazz, "PROCESS_STATE_", procState);
+    }
+
+    private IBinder startIsolatedService() throws Exception {
+        final CountDownLatch latch = new CountDownLatch(1);
+        final IBinder[] binders = new IBinder[1];
+        final ServiceConnection connection = new ServiceConnection() {
+            @Override
+            public void onServiceConnected(ComponentName name, IBinder service) {
+                binders[0] = service;
+                latch.countDown();
+            }
+
+            @Override
+            public void onServiceDisconnected(ComponentName name) {
+            }
+        };
+        final Intent launchIntent = new Intent()
+                .setComponent(new ComponentName(TEST_PKG, ISOLATED_TEST_SERVICE));
+        sContext.bindService(launchIntent, connection, Context.BIND_AUTO_CREATE
+                | Context.BIND_ALLOW_OOM_MANAGEMENT | Context.BIND_NOT_FOREGROUND);
+        if (latch.await(START_ISOLATED_SERVICE_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
+            if (binders[0] == null) {
+                fail("Receiver binder should not be null");
+            }
+            return binders[0];
+        } else {
+            fail("Timed out waiting for the isolated test service to start");
+        }
+        return null;
+    }
+
+    private IBinder startForegroundService() throws Exception {
+        final CountDownLatch latch = new CountDownLatch(1);
+        final Intent launchIntent = new Intent()
+                .setComponent(new ComponentName(TEST_PKG, TEST_SERVICE))
+                .setFlags(FLAG_START_FOREGROUND);
+        final Bundle extras = new Bundle();
+        final IBinder[] binders = new IBinder[1];
+        extras.putBinder(EXTRA_KEY_CMD_RECEIVER, new ICmdCallback.Stub() {
+            @Override
+            public void onLaunched(IBinder receiver) {
+                binders[0] = receiver;
+                latch.countDown();
+            }
+        });
+        launchIntent.putExtras(extras);
+        sContext.startForegroundService(launchIntent);
+        if (latch.await(START_FG_SERVICE_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
+            if (binders[0] == null) {
+                fail("Receiver binder should not be null");
+            }
+            return binders[0];
+        } else {
+            fail("Timed out waiting for the test fg service to start; testUid=" + sTestPkgUid);
+        }
+        return null;
+    }
+
+    private IBinder startService() throws Exception {
+        final CountDownLatch latch = new CountDownLatch(1);
+        final Intent launchIntent = new Intent()
+                .setComponent(new ComponentName(TEST_PKG, TEST_SERVICE));
+        final Bundle extras = new Bundle();
+        final IBinder[] binders = new IBinder[1];
+        extras.putBinder(EXTRA_KEY_CMD_RECEIVER, new ICmdCallback.Stub() {
+            @Override
+            public void onLaunched(IBinder receiver) {
+                binders[0] = receiver;
+                latch.countDown();
+            }
+        });
+        launchIntent.putExtras(extras);
+        sContext.startService(launchIntent);
+        if (latch.await(START_SERVICE_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
+            if (binders[0] == null) {
+                fail("Receiver binder should not be null");
+            }
+            return binders[0];
+        } else {
+            fail("Timed out waiting for the test service to start; testUid=" + sTestPkgUid);
+        }
+        return null;
+    }
+
+    private IBinder startActivity() throws Exception {
+        final CountDownLatch latch = new CountDownLatch(1);
+        final Intent launchIntent = new Intent()
+                .setComponent(new ComponentName(TEST_PKG, TEST_ACTIVITY));
+        final Bundle extras = new Bundle();
+        final IBinder[] binders = new IBinder[1];
+        extras.putBinder(EXTRA_KEY_CMD_RECEIVER, new ICmdCallback.Stub() {
+            @Override
+            public void onLaunched(IBinder receiver) {
+                binders[0] = receiver;
+                latch.countDown();
+            }
+        });
+        launchIntent.putExtras(extras)
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        sContext.startActivity(launchIntent);
+        if (latch.await(START_ACTIVITY_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
+            if (binders[0] == null) {
+                fail("Receiver binder should not be null");
+            }
+            return binders[0];
+        } else {
+            fail("Timed out waiting for the test activity to start; testUid=" + sTestPkgUid);
+        }
+        return null;
+    }
+
+    private static String getAllCpuTimesMsg() throws Exception {
+        final StringBuilder sb = new StringBuilder();
+        sb.append("uid=" + sTestPkgUid + ";");
+        sb.append(UID_TIMES_TYPE_ALL + "=" + getMsgCpuTimesSum(getAllCpuFreqTimes(sTestPkgUid)));
+        for (int i = 0; i < NUM_PROCESS_STATE; ++i) {
+            sb.append("|");
+            sb.append(UID_PROCESS_TYPES[i] + "="
+                    + getMsgCpuTimesSum(getAllCpuFreqTimes(sTestPkgUid, i)));
+        }
+        return sb.toString();
+    }
+
+    private static String getMsgCpuTimesSum(long[] cpuTimes) throws Exception {
+        if (cpuTimes == null) {
+            return "(0,0)";
+        }
+        long totalTime = 0;
+        for (int i = 0; i < cpuTimes.length / 2; ++i) {
+            totalTime += cpuTimes[i];
+        }
+        long screenOffTime = 0;
+        for (int i = cpuTimes.length / 2; i < cpuTimes.length; ++i) {
+            screenOffTime += cpuTimes[i];
+        }
+        return "(" + totalTime + "," + screenOffTime + ")";
+    }
+
+    private static long[] getAllCpuFreqTimes(int uid) throws Exception {
+        final String checkinDump = executeCmdSilent("dumpsys batterystats --checkin");
+        final Pattern pattern = Pattern.compile(uid + ",l,ctf," + UID_TIMES_TYPE_ALL + ",(.*?)\n");
+        final Matcher matcher = pattern.matcher(checkinDump);
+        if (!matcher.find()) {
+            return null;
+        }
+        return parseCpuTimesStr(matcher.group(1));
+    }
+
+    private static long[] getAllCpuFreqTimes(int uid, int procState) throws Exception {
+        final String checkinDump = executeCmdSilent("dumpsys batterystats --checkin");
+        final Pattern pattern = Pattern.compile(
+                uid + ",l,ctf," + UID_PROCESS_TYPES[procState] + ",(.*?)\n");
+        final Matcher matcher = pattern.matcher(checkinDump);
+        if (!matcher.find()) {
+            return null;
+        }
+        return parseCpuTimesStr(matcher.group(1));
+    }
+
+    private static long[] parseCpuTimesStr(String str) {
+        final String[] cpuTimesStr = str.split(",");
+        final int freqCount = Integer.parseInt(cpuTimesStr[0]);
+        if (cpuTimesStr.length != (2 * freqCount + 1)) {
+            fail("Malformed data: " + Arrays.toString(cpuTimesStr));
+        }
+        final long[] cpuTimes = new long[freqCount * 2];
+        for (int i = 0; i < cpuTimes.length; ++i) {
+            cpuTimes[i] = Long.parseLong(cpuTimesStr[i + 1]);
+        }
+        return cpuTimes;
+    }
+
+    private void resetBatteryStats() throws Exception {
+        executeCmd("dumpsys batterystats --reset");
+    }
+
+    private void batteryOnScreenOn() throws Exception {
+        batteryOn();
+        screenOn();
+    }
+
+    private void batteryOnScreenOff() throws Exception {
+        batteryOn();
+        screenoff();
+    }
+
+    private void batteryOffScreenOn() throws Exception {
+        batteryOff();
+        screenOn();
+    }
+
+    private static void batteryOn() throws Exception {
+        executeCmd("dumpsys battery unplug");
+        assertBatteryState(false /* pluggedIn */);
+    }
+
+    private static void batteryOff() throws Exception {
+        executeCmd("dumpsys battery set ac " + BatteryManager.BATTERY_PLUGGED_AC);
+        assertBatteryState(true /* pluggedIn */);
+    }
+
+    private static void batteryReset() throws Exception {
+        executeCmd("dumpsys battery reset");
+    }
+
+    private void screenOn() throws Exception {
+        executeCmd("input keyevent KEYCODE_WAKEUP");
+        executeCmd("wm dismiss-keyguard");
+        assertKeyguardUnLocked();
+        assertScreenInteractive(true);
+    }
+
+    private void screenoff() throws Exception {
+        executeCmd("input keyevent KEYCODE_SLEEP");
+        assertScreenInteractive(false);
+    }
+
+    private void forceStop() throws Exception {
+        executeCmd("cmd activity force-stop " + TEST_PKG);
+        assertProcState("NONEXISTENT");
+    }
+
+    private void assertKeyguardUnLocked() throws Exception {
+        final KeyguardManager keyguardManager =
+                (KeyguardManager) sContext.getSystemService(Context.KEYGUARD_SERVICE);
+        assertDelayedCondition("Unexpected Keyguard state", () ->
+                keyguardManager.isKeyguardLocked() ? "expected=unlocked" : null
+        );
+    }
+
+    private void assertScreenInteractive(boolean interactive) throws Exception {
+        final PowerManager powerManager =
+                (PowerManager) sContext.getSystemService(Context.POWER_SERVICE);
+        assertDelayedCondition("Unexpected screen interactive state", () ->
+                interactive == powerManager.isInteractive() ? null : "expected=" + interactive
+        );
+    }
+
+    private void assertDelayedCondition(String errMsgPrefix, ExpectedCondition condition)
+            throws Exception {
+        assertDelayedCondition(errMsgPrefix, condition, GENERAL_TIMEOUT_MS, GENERAL_INTERVAL_MS);
+    }
+
+    private void assertDelayedCondition(String errMsgPrefix, ExpectedCondition condition,
+            long timeoutMs, long checkIntervalMs) throws Exception {
+        final long endTime = SystemClock.uptimeMillis() + timeoutMs;
+        while (SystemClock.uptimeMillis() <= endTime) {
+            if (condition.getErrIfNotTrue() == null) {
+                return;
+            }
+            SystemClock.sleep(checkIntervalMs);
+        }
+        final String errMsg = condition.getErrIfNotTrue();
+        if (errMsg != null) {
+            fail(errMsgPrefix + ": " + errMsg);
+        }
+    }
+
+    private static void assertBatteryState(boolean pluggedIn) throws Exception {
+        final long endTime = SystemClock.uptimeMillis() + BATTERY_STATE_TIMEOUT_MS;
+        while (isDevicePluggedIn() != pluggedIn && SystemClock.uptimeMillis() <= endTime) {
+            Thread.sleep(BATTERY_STATE_CHECK_INTERVAL_MS);
+        }
+        if (isDevicePluggedIn() != pluggedIn) {
+            fail("Timed out waiting for the plugged-in state to change,"
+                    + " expected pluggedIn: " + pluggedIn);
+        }
+    }
+
+    private static boolean isDevicePluggedIn() {
+        final Intent batteryIntent = sContext.registerReceiver(null,
+                new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+        return batteryIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) > 0;
+    }
+
+    private static String executeCmd(String cmd) throws Exception {
+        final String result = sUiDevice.executeShellCommand(cmd).trim();
+        Log.d(TAG, String.format("Result for '%s': %s", cmd, result));
+        return result;
+    }
+
+    private static String executeCmdSilent(String cmd) throws Exception {
+        return sUiDevice.executeShellCommand(cmd).trim();
+    }
+
+    private interface ExpectedCondition {
+        String getErrIfNotTrue() throws Exception;
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/CameraPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/CameraPowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/CameraPowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/CameraPowerCalculatorTest.java
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/CpuPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/CpuPowerCalculatorTest.java
new file mode 100644
index 0000000..888bc62
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/CpuPowerCalculatorTest.java
@@ -0,0 +1,491 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.power.stats;
+
+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.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.os.BatteryConsumer;
+import android.os.BatteryStats;
+import android.os.BatteryUsageStatsQuery;
+import android.os.Process;
+import android.os.UidBatteryConsumer;
+import android.util.SparseArray;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.internal.os.KernelCpuSpeedReader;
+import com.android.internal.os.KernelCpuUidTimeReader;
+import com.android.internal.os.KernelSingleUidTimeReader;
+import com.android.internal.os.LongArrayMultiStateCounter;
+import com.android.internal.os.PowerProfile;
+import com.android.internal.power.EnergyConsumerStats;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+@SuppressWarnings("GuardedBy")
+public class CpuPowerCalculatorTest {
+    private static final double PRECISION = 0.00001;
+
+    private static final int APP_UID1 = Process.FIRST_APPLICATION_UID + 42;
+    private static final int APP_UID2 = Process.FIRST_APPLICATION_UID + 272;
+
+    private static final int NUM_CPU_FREQS = 2 + 2;  // 2 clusters * 2 freqs each
+
+    @Rule
+    public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule()
+            .setAveragePower(PowerProfile.POWER_CPU_ACTIVE, 720)
+            .setCpuScalingPolicy(0, new int[]{0, 1}, new int[]{100, 200})
+            .setCpuScalingPolicy(2, new int[]{2, 3}, new int[]{300, 400})
+            .setAveragePowerForCpuScalingPolicy(0, 360)
+            .setAveragePowerForCpuScalingPolicy(2, 480)
+            .setAveragePowerForCpuScalingStep(0, 0, 300)
+            .setAveragePowerForCpuScalingStep(0, 1, 400)
+            .setAveragePowerForCpuScalingStep(2, 0, 500)
+            .setAveragePowerForCpuScalingStep(2, 1, 600);
+
+    private final KernelCpuSpeedReader[] mMockKernelCpuSpeedReaders = new KernelCpuSpeedReader[]{
+            mock(KernelCpuSpeedReader.class),
+            mock(KernelCpuSpeedReader.class),
+    };
+
+    @Mock
+    private BatteryStatsImpl.UserInfoProvider mMockUserInfoProvider;
+    @Mock
+    private KernelCpuUidTimeReader.KernelCpuUidClusterTimeReader mMockKernelCpuUidClusterTimeReader;
+    @Mock
+    private KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader mMockCpuUidFreqTimeReader;
+    @Mock
+    private KernelCpuUidTimeReader.KernelCpuUidUserSysTimeReader mMockKernelCpuUidUserSysTimeReader;
+    @Mock
+    private KernelCpuUidTimeReader.KernelCpuUidActiveTimeReader mMockKerneCpuUidActiveTimeReader;
+    @Mock
+    private SystemServerCpuThreadReader mMockSystemServerCpuThreadReader;
+    @Mock
+    private KernelSingleUidTimeReader mMockKernelSingleUidTimeReader;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        final boolean[] supportedPowerBuckets =
+                new boolean[EnergyConsumerStats.NUMBER_STANDARD_POWER_BUCKETS];
+        supportedPowerBuckets[EnergyConsumerStats.POWER_BUCKET_CPU] = true;
+
+        when(mMockCpuUidFreqTimeReader.isFastCpuTimesReader()).thenReturn(true);
+
+        mStatsRule.getBatteryStats()
+                .setUserInfoProvider(mMockUserInfoProvider)
+                .setKernelCpuSpeedReaders(mMockKernelCpuSpeedReaders)
+                .setKernelCpuUidFreqTimeReader(mMockCpuUidFreqTimeReader)
+                .setKernelCpuUidClusterTimeReader(mMockKernelCpuUidClusterTimeReader)
+                .setKernelCpuUidUserSysTimeReader(mMockKernelCpuUidUserSysTimeReader)
+                .setKernelCpuUidActiveTimeReader(mMockKerneCpuUidActiveTimeReader)
+                .setKernelSingleUidTimeReader(mMockKernelSingleUidTimeReader)
+                .setSystemServerCpuThreadReader(mMockSystemServerCpuThreadReader)
+                .initEnergyConsumerStatsLocked(supportedPowerBuckets, new String[0]);
+    }
+
+    @Test
+    public void testTimerBasedModel() {
+        when(mMockUserInfoProvider.exists(anyInt())).thenReturn(true);
+
+        when(mMockKernelCpuSpeedReaders[0].readDelta()).thenReturn(new long[]{1000, 2000});
+        when(mMockKernelCpuSpeedReaders[1].readDelta()).thenReturn(new long[]{3000, 4000});
+
+        when(mMockCpuUidFreqTimeReader.perClusterTimesAvailable()).thenReturn(false);
+
+        mStatsRule.setTime(1000, 1000);
+
+        // Initialize active CPU time
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<Long> callback = invocation.getArgument(0);
+            callback.onUidCpuTime(APP_UID1, 1000L);
+            callback.onUidCpuTime(APP_UID2, 3000L);
+            return null;
+        }).when(mMockKerneCpuUidActiveTimeReader).readAbsolute(any());
+
+        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, null);
+
+        mStatsRule.setTime(2000, 2000);
+
+        // User/System CPU time
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
+            // User/system time in microseconds
+            callback.onUidCpuTime(APP_UID1, new long[]{1111000, 2222000});
+            callback.onUidCpuTime(APP_UID2, new long[]{3333000, 4444000});
+            return null;
+        }).when(mMockKernelCpuUidUserSysTimeReader).readDelta(anyBoolean(), any());
+
+        // Active CPU time
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<Long> callback = invocation.getArgument(0);
+            callback.onUidCpuTime(APP_UID1, 2111L);
+            callback.onUidCpuTime(APP_UID2, 6333L);
+            return null;
+        }).when(mMockKerneCpuUidActiveTimeReader).readAbsolute(any());
+
+        // Per-cluster CPU time
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
+            callback.onUidCpuTime(APP_UID1, new long[]{1111, 2222});
+            callback.onUidCpuTime(APP_UID2, new long[]{3333, 4444});
+            return null;
+        }).when(mMockKernelCpuUidClusterTimeReader).readDelta(anyBoolean(), any());
+
+        // Per-frequency CPU time
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
+            callback.onUidCpuTime(APP_UID1, new long[]{1100, 11, 2200, 22});
+            callback.onUidCpuTime(APP_UID2, new long[]{3300, 33, 4400, 44});
+            return null;
+        }).when(mMockCpuUidFreqTimeReader).readDelta(anyBoolean(), any());
+
+        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, null);
+
+        mStatsRule.getUidStats(APP_UID1).getProcessStatsLocked("foo").addCpuTimeLocked(4321, 1234);
+        mStatsRule.getUidStats(APP_UID1).getProcessStatsLocked("bar").addCpuTimeLocked(5432, 2345);
+
+        CpuPowerCalculator calculator =
+                new CpuPowerCalculator(mStatsRule.getCpuScalingPolicies(),
+                        mStatsRule.getPowerProfile());
+
+        mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
+
+        UidBatteryConsumer uidConsumer1 = mStatsRule.getUidBatteryConsumer(APP_UID1);
+        assertThat(uidConsumer1.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isEqualTo(3333);
+        assertThat(uidConsumer1.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isWithin(PRECISION).of(1.031677);
+        assertThat(uidConsumer1.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+        assertThat(uidConsumer1.getPackageWithHighestDrain()).isEqualTo("bar");
+
+        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
+        assertThat(uidConsumer2.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isEqualTo(7777);
+        assertThat(uidConsumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isWithin(PRECISION).of(2.489544);
+        assertThat(uidConsumer2.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+        assertThat(uidConsumer2.getPackageWithHighestDrain()).isNull();
+
+        final BatteryConsumer deviceBatteryConsumer = mStatsRule.getDeviceBatteryConsumer();
+        assertThat(deviceBatteryConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isWithin(PRECISION).of(3.52122);
+        assertThat(deviceBatteryConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+
+        final BatteryConsumer appsBatteryConsumer = mStatsRule.getAppsBatteryConsumer();
+        assertThat(appsBatteryConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isWithin(PRECISION).of(3.52122);
+        assertThat(appsBatteryConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+    }
+
+    @Test
+    public void testMeasuredEnergyBasedModel() {
+        when(mMockUserInfoProvider.exists(anyInt())).thenReturn(true);
+
+        when(mMockKernelCpuSpeedReaders[0].readDelta()).thenReturn(new long[]{1000, 2000});
+        when(mMockKernelCpuSpeedReaders[1].readDelta()).thenReturn(new long[]{3000, 4000});
+
+        when(mMockCpuUidFreqTimeReader.perClusterTimesAvailable()).thenReturn(false);
+
+        // User/System CPU time
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
+            // User/system time in microseconds
+            callback.onUidCpuTime(APP_UID1, new long[]{1111000, 2222000});
+            callback.onUidCpuTime(APP_UID2, new long[]{3333000, 4444000});
+            return null;
+        }).when(mMockKernelCpuUidUserSysTimeReader).readDelta(anyBoolean(), any());
+
+        // Per-cluster CPU time
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
+            callback.onUidCpuTime(APP_UID1, new long[]{1111, 2222});
+            callback.onUidCpuTime(APP_UID2, new long[]{3333, 4444});
+            return null;
+        }).when(mMockKernelCpuUidClusterTimeReader).readDelta(anyBoolean(), any());
+
+        final long[] clusterChargesUC = new long[]{13577531, 24688642};
+        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, clusterChargesUC);
+
+        mStatsRule.getUidStats(APP_UID1).getProcessStatsLocked("foo").addCpuTimeLocked(4321, 1234);
+        mStatsRule.getUidStats(APP_UID1).getProcessStatsLocked("bar").addCpuTimeLocked(5432, 2345);
+
+        CpuPowerCalculator calculator = new CpuPowerCalculator(mStatsRule.getCpuScalingPolicies(),
+                mStatsRule.getPowerProfile());
+
+        mStatsRule.apply(calculator);
+
+        UidBatteryConsumer uidConsumer1 = mStatsRule.getUidBatteryConsumer(APP_UID1);
+        assertThat(uidConsumer1.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isEqualTo(3333);
+        assertThat(uidConsumer1.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isWithin(PRECISION).of(3.18877);
+        assertThat(uidConsumer1.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+        assertThat(uidConsumer1.getPackageWithHighestDrain()).isEqualTo("bar");
+
+        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
+        assertThat(uidConsumer2.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isEqualTo(7777);
+        assertThat(uidConsumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isWithin(PRECISION).of(7.44072);
+        assertThat(uidConsumer2.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+        assertThat(uidConsumer2.getPackageWithHighestDrain()).isNull();
+
+        final BatteryConsumer deviceBatteryConsumer = mStatsRule.getDeviceBatteryConsumer();
+        assertThat(deviceBatteryConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isWithin(PRECISION).of(10.62949);
+        assertThat(deviceBatteryConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+
+        final BatteryConsumer appsBatteryConsumer = mStatsRule.getDeviceBatteryConsumer();
+        assertThat(appsBatteryConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isWithin(PRECISION).of(10.62949);
+        assertThat(appsBatteryConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+    }
+
+    @Test
+    public void testTimerBasedModel_byProcessState() {
+        when(mMockUserInfoProvider.exists(anyInt())).thenReturn(true);
+
+        when(mMockCpuUidFreqTimeReader.allUidTimesAvailable()).thenReturn(true);
+
+        when(mMockKernelSingleUidTimeReader.singleUidCpuTimesAvailable()).thenReturn(true);
+
+        SparseArray<long[]> allUidCpuFreqTimeMs = new SparseArray<>();
+        allUidCpuFreqTimeMs.put(APP_UID1, new long[0]);
+        allUidCpuFreqTimeMs.put(APP_UID2, new long[0]);
+        when(mMockCpuUidFreqTimeReader.getAllUidCpuFreqTimeMs()).thenReturn(allUidCpuFreqTimeMs);
+
+        mStatsRule.setTime(1000, 1000);
+
+        mStatsRule.getUidStats(APP_UID1).setProcessStateForTest(
+                BatteryStats.Uid.PROCESS_STATE_FOREGROUND, 1000);
+        mStatsRule.getUidStats(APP_UID2).setProcessStateForTest(
+                BatteryStats.Uid.PROCESS_STATE_BACKGROUND, 1000);
+
+        // Initialize time-in-state counts to 0
+        mockSingleUidTimeReader(APP_UID1, new long[NUM_CPU_FREQS]);
+        mockSingleUidTimeReader(APP_UID2, new long[NUM_CPU_FREQS]);
+
+        // Active CPU time
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<Long> callback = invocation.getArgument(0);
+            callback.onUidCpuTime(APP_UID1, 1111L);
+            callback.onUidCpuTime(APP_UID2, 3333L);
+            return null;
+        }).when(mMockKerneCpuUidActiveTimeReader).readAbsolute(any());
+
+        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, null);
+        mStatsRule.getBatteryStats().updateCpuTimesForAllUids();
+
+        mockSingleUidTimeReader(APP_UID1, new long[]{1000, 2000, 3000, 4000});
+        mockSingleUidTimeReader(APP_UID2, new long[]{1111, 2222, 3333, 4444});
+
+        mStatsRule.setTime(2000, 2000);
+
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<Long> callback = invocation.getArgument(0);
+            callback.onUidCpuTime(APP_UID1, 2222L);
+            callback.onUidCpuTime(APP_UID2, 6666L);
+            return null;
+        }).when(mMockKerneCpuUidActiveTimeReader).readAbsolute(any());
+
+        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, null);
+        mStatsRule.getBatteryStats().updateCpuTimesForAllUids();
+
+        mockSingleUidTimeReader(APP_UID1, new long[] {5000, 6000, 7000, 8000});
+        mockSingleUidTimeReader(APP_UID2, new long[]{5555, 6666, 7777, 8888});
+
+        mStatsRule.getUidStats(APP_UID1).setProcessStateForTest(
+                BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE, 2000);
+        mStatsRule.getUidStats(APP_UID2).setProcessStateForTest(
+                BatteryStats.Uid.PROCESS_STATE_TOP, 2000);
+
+        mStatsRule.setTime(3000, 3000);
+
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<Long> callback = invocation.getArgument(0);
+            callback.onUidCpuTime(APP_UID1, 3333L);
+            callback.onUidCpuTime(APP_UID2, 8888L);
+            return null;
+        }).when(mMockKerneCpuUidActiveTimeReader).readAbsolute(any());
+
+        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, null);
+        mStatsRule.getBatteryStats().updateCpuTimesForAllUids();
+
+        CpuPowerCalculator calculator = new CpuPowerCalculator(mStatsRule.getCpuScalingPolicies(),
+                mStatsRule.getPowerProfile());
+
+        mStatsRule.apply(new BatteryUsageStatsQuery.Builder()
+                .powerProfileModeledOnly()
+                .includePowerModels()
+                .includeProcessStateData()
+                .build(), calculator);
+
+        UidBatteryConsumer uidConsumer1 = mStatsRule.getUidBatteryConsumer(APP_UID1);
+        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
+
+        final BatteryConsumer.Key foreground = uidConsumer1.getKey(
+                BatteryConsumer.POWER_COMPONENT_CPU,
+                BatteryConsumer.PROCESS_STATE_FOREGROUND);
+        final BatteryConsumer.Key background = uidConsumer1.getKey(
+                BatteryConsumer.POWER_COMPONENT_CPU,
+                BatteryConsumer.PROCESS_STATE_BACKGROUND);
+        final BatteryConsumer.Key fgs = uidConsumer1.getKey(
+                BatteryConsumer.POWER_COMPONENT_CPU,
+                BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE);
+
+        assertThat(uidConsumer1.getConsumedPower(foreground)).isWithin(PRECISION).of(1.611088);
+        assertThat(uidConsumer1.getConsumedPower(background)).isWithin(PRECISION).of(0);
+        assertThat(uidConsumer1.getConsumedPower(fgs)).isWithin(PRECISION).of(2.2222);
+        assertThat(uidConsumer2.getConsumedPower(foreground)).isWithin(PRECISION).of(2.6664);
+        assertThat(uidConsumer2.getConsumedPower(background)).isWithin(PRECISION).of(2.209655);
+        assertThat(uidConsumer2.getConsumedPower(fgs)).isWithin(PRECISION).of(0);
+    }
+
+    private void mockSingleUidTimeReader(int uid, long[] cpuTimes) {
+        doAnswer(invocation -> {
+            LongArrayMultiStateCounter counter = invocation.getArgument(1);
+            long timestampMs = invocation.getArgument(2);
+            LongArrayMultiStateCounter.LongArrayContainer container =
+                    new LongArrayMultiStateCounter.LongArrayContainer(NUM_CPU_FREQS);
+            container.setValues(cpuTimes);
+            counter.updateValues(container, timestampMs);
+            return null;
+        }).when(mMockKernelSingleUidTimeReader).addDelta(eq(uid),
+                any(LongArrayMultiStateCounter.class), anyLong());
+    }
+
+    @Test
+    public void testMeasuredEnergyBasedModel_perProcessState() {
+        when(mMockUserInfoProvider.exists(anyInt())).thenReturn(true);
+
+        when(mMockKernelCpuSpeedReaders[0].readDelta()).thenReturn(new long[]{1000, 2000});
+        when(mMockKernelCpuSpeedReaders[1].readDelta()).thenReturn(new long[]{3000, 4000});
+
+        when(mMockCpuUidFreqTimeReader.perClusterTimesAvailable()).thenReturn(false);
+
+        mStatsRule.setTime(1000, 1000);
+
+        mStatsRule.getUidStats(APP_UID1).setProcessStateForTest(
+                BatteryStats.Uid.PROCESS_STATE_FOREGROUND, 1000);
+        mStatsRule.getUidStats(APP_UID2).setProcessStateForTest(
+                BatteryStats.Uid.PROCESS_STATE_BACKGROUND, 1000);
+
+        // User/System CPU time
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
+            // User/system time in microseconds
+            callback.onUidCpuTime(APP_UID1, new long[]{1111000, 2222000});
+            callback.onUidCpuTime(APP_UID2, new long[]{3333000, 4444000});
+            return null;
+        }).when(mMockKernelCpuUidUserSysTimeReader).readDelta(anyBoolean(), any());
+
+        // Per-frequency CPU time
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
+            callback.onUidCpuTime(APP_UID1, new long[]{1100, 11, 2200, 22});
+            callback.onUidCpuTime(APP_UID2, new long[]{3300, 33, 4400, 44});
+            return null;
+        }).when(mMockCpuUidFreqTimeReader).readDelta(anyBoolean(), any());
+
+        mStatsRule.setTime(2000, 2000);
+        final long[] clusterChargesUC = new long[]{13577531, 24688642};
+        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, clusterChargesUC);
+
+        mStatsRule.getUidStats(APP_UID1).setProcessStateForTest(
+                BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE, 2000);
+        mStatsRule.getUidStats(APP_UID2).setProcessStateForTest(
+                BatteryStats.Uid.PROCESS_STATE_TOP, 2000);
+
+        // User/System CPU time
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
+            // User/system time in microseconds
+            callback.onUidCpuTime(APP_UID1, new long[]{5555000, 6666000});
+            callback.onUidCpuTime(APP_UID2, new long[]{7777000, 8888000});
+            return null;
+        }).when(mMockKernelCpuUidUserSysTimeReader).readDelta(anyBoolean(), any());
+
+        // Per-frequency CPU time
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
+            callback.onUidCpuTime(APP_UID1, new long[]{5500, 55, 6600, 66});
+            callback.onUidCpuTime(APP_UID2, new long[]{7700, 77, 8800, 88});
+            return null;
+        }).when(mMockCpuUidFreqTimeReader).readDelta(anyBoolean(), any());
+
+        mStatsRule.setTime(3000, 3000);
+
+        clusterChargesUC[0] += 10000000;
+        clusterChargesUC[1] += 20000000;
+        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, clusterChargesUC);
+
+        CpuPowerCalculator calculator = new CpuPowerCalculator(mStatsRule.getCpuScalingPolicies(),
+                mStatsRule.getPowerProfile());
+
+        mStatsRule.apply(new BatteryUsageStatsQuery.Builder()
+                .includePowerModels()
+                .includeProcessStateData()
+                .build(), calculator);
+
+        UidBatteryConsumer uidConsumer1 = mStatsRule.getUidBatteryConsumer(APP_UID1);
+        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
+
+        final BatteryConsumer.Key foreground = uidConsumer1.getKey(
+                BatteryConsumer.POWER_COMPONENT_CPU,
+                BatteryConsumer.PROCESS_STATE_FOREGROUND);
+        final BatteryConsumer.Key background = uidConsumer1.getKey(
+                BatteryConsumer.POWER_COMPONENT_CPU,
+                BatteryConsumer.PROCESS_STATE_BACKGROUND);
+        final BatteryConsumer.Key fgs = uidConsumer1.getKey(
+                BatteryConsumer.POWER_COMPONENT_CPU,
+                BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE);
+
+        assertThat(uidConsumer1.getConsumedPower(foreground)).isWithin(PRECISION).of(3.18884);
+        assertThat(uidConsumer1.getConsumedPower(background)).isWithin(PRECISION).of(0);
+        assertThat(uidConsumer1.getConsumedPower(fgs)).isWithin(PRECISION).of(8.02273);
+        assertThat(uidConsumer2.getConsumedPower(foreground)).isWithin(PRECISION).of(10.94009);
+        assertThat(uidConsumer2.getConsumedPower(background)).isWithin(PRECISION).of(7.44064);
+        assertThat(uidConsumer2.getConsumedPower(fgs)).isWithin(PRECISION).of(0);
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/CustomEnergyConsumerPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/CustomEnergyConsumerPowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/CustomEnergyConsumerPowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/CustomEnergyConsumerPowerCalculatorTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/EnergyConsumerSnapshotTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/EnergyConsumerSnapshotTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/EnergyConsumerSnapshotTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/EnergyConsumerSnapshotTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/FlashlightPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/FlashlightPowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/FlashlightPowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/FlashlightPowerCalculatorTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/GnssPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/GnssPowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/GnssPowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/GnssPowerCalculatorTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/IdlePowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/IdlePowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/IdlePowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/IdlePowerCalculatorTest.java
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/KernelWakelockReaderTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/KernelWakelockReaderTest.java
new file mode 100644
index 0000000..2edfc8e
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/KernelWakelockReaderTest.java
@@ -0,0 +1,427 @@
+/*
+ * 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.server.power.stats;
+
+import android.system.suspend.internal.WakeLockInfo;
+
+import androidx.test.filters.SmallTest;
+
+import junit.framework.TestCase;
+
+import java.nio.charset.Charset;
+
+public class KernelWakelockReaderTest extends TestCase {
+    /**
+     * Helper class that builds the mock Kernel module file /d/wakeup_sources.
+     */
+    private static class ProcFileBuilder {
+        private final static String sHeader = "name\t\tactive_count\tevent_count\twakeup_count\t" +
+                "expire_count\tactive_since\ttotal_time\tmax_time\tlast_change\t" +
+                "prevent_suspend_time\n";
+
+        private StringBuilder mStringBuilder;
+
+        private void ensureHeader() {
+            if (mStringBuilder == null) {
+                mStringBuilder = new StringBuilder();
+                mStringBuilder.append(sHeader);
+            }
+        }
+
+        public ProcFileBuilder addLine(String name, int count, long timeMillis) {
+            return addLine(name, count, timeMillis, 0);
+        }
+
+        public ProcFileBuilder addLine(String name, int count, long timeMillis, long activeTimeMs) {
+            ensureHeader();
+            mStringBuilder.append(name).append("\t").append(count).append("\t0\t0\t0\t")
+                    .append(activeTimeMs).append("\t")
+                    .append(timeMillis).append("\t0\t0\t0\n");
+            return this;
+        }
+
+        public byte[] getBytes() throws Exception {
+            ensureHeader();
+            byte[] data = mStringBuilder.toString().getBytes(Charset.forName("UTF-8"));
+
+            // The Kernel puts a \0 at the end of the data. Since each of our lines ends with \n,
+            // we override the last \n with a \0.
+            data[data.length - 1] = 0;
+            return data;
+        }
+    }
+
+    /**
+     * Helper method to create WakeLockInfo object.
+     * @param totalTime is time in microseconds.
+     * @return the created WakeLockInfo object.
+     */
+    private WakeLockInfo createWakeLockInfo(String name, int activeCount, long totalTime) {
+        return createWakeLockInfo(name, activeCount, totalTime, 0);
+    }
+
+    private WakeLockInfo createWakeLockInfo(String name, int activeCount, long totalTime,
+            long activeTimeMs) {
+        WakeLockInfo info = new WakeLockInfo();
+        info.name = name;
+        info.activeCount = activeCount;
+        info.totalTime = totalTime;
+        info.activeTime = activeTimeMs;
+        if (activeTimeMs != 0) {
+            info.isActive = true;
+        }
+        return info;
+    }
+
+    /**
+     * Helper method for KernelWakeLockReader::readKernelWakelockStats(...)
+     * @param staleStats existing stats to update.
+     * @param buffer representation of mock kernel module file /d/wakeup_sources.
+     * @param wlStats mock WakeLockInfo list returned from ISuspendControlService.
+     * @return the updated stats.
+     */
+    private KernelWakelockStats readKernelWakelockStats(KernelWakelockStats staleStats,
+                                                        byte[] buffer, WakeLockInfo[] wlStats) {
+        mReader.updateVersion(staleStats);
+        mReader.parseProcWakelocks(buffer, buffer.length, true, staleStats);
+        mReader.updateWakelockStats(wlStats, staleStats);
+        return mReader.removeOldStats(staleStats);
+    }
+
+    private KernelWakelockReader mReader;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        mReader = new KernelWakelockReader();
+    }
+
+// ------------------------- Legacy Wakelock Stats Test ------------------------
+    @SmallTest
+    public void testParseEmptyFile() throws Exception {
+        KernelWakelockStats staleStats = mReader.parseProcWakelocks(new byte[0], 0, true,
+                new KernelWakelockStats());
+
+        assertTrue(staleStats.isEmpty());
+    }
+
+    @SmallTest
+    public void testOnlyHeader() throws Exception {
+        byte[] buffer = new ProcFileBuilder().getBytes();
+
+        KernelWakelockStats staleStats = mReader.parseProcWakelocks(buffer, buffer.length, true,
+                new KernelWakelockStats());
+
+        assertTrue(staleStats.isEmpty());
+    }
+
+    @SmallTest
+    public void testOneWakelock() throws Exception {
+        byte[] buffer = new ProcFileBuilder()
+                .addLine("Wakelock", 34, 123, 456) // Milliseconds
+                .getBytes();
+
+        KernelWakelockStats staleStats = mReader.parseProcWakelocks(buffer, buffer.length, true,
+                new KernelWakelockStats());
+
+        assertEquals(1, staleStats.size());
+
+        assertTrue(staleStats.containsKey("Wakelock"));
+
+        KernelWakelockStats.Entry entry = staleStats.get("Wakelock");
+        assertEquals(34, entry.count);
+        assertEquals(123 * 1000, entry.totalTimeUs); // Microseconds
+        assertEquals(456 * 1000, entry.activeTimeUs); // Microseconds
+    }
+
+    @SmallTest
+    public void testTwoWakelocks() throws Exception {
+        byte[] buffer = new ProcFileBuilder()
+                .addLine("Wakelock", 1, 10)
+                .addLine("Fakelock", 2, 20)
+                .getBytes();
+
+        KernelWakelockStats staleStats = mReader.parseProcWakelocks(buffer, buffer.length, true,
+                new KernelWakelockStats());
+
+        assertEquals(2, staleStats.size());
+
+        assertTrue(staleStats.containsKey("Wakelock"));
+        assertTrue(staleStats.containsKey("Fakelock"));
+    }
+
+    @SmallTest
+    public void testDuplicateWakelocksAccumulate() throws Exception {
+        byte[] buffer = new ProcFileBuilder()
+                .addLine("Wakelock", 1, 10) // Milliseconds
+                .addLine("Wakelock", 1, 10) // Milliseconds
+                .getBytes();
+
+        KernelWakelockStats staleStats = mReader.parseProcWakelocks(buffer, buffer.length, true,
+                new KernelWakelockStats());
+
+        assertEquals(1, staleStats.size());
+        assertTrue(staleStats.containsKey("Wakelock"));
+
+        KernelWakelockStats.Entry entry = staleStats.get("Wakelock");
+        assertEquals(2, entry.count);
+        assertEquals(20 * 1000, entry.totalTimeUs); // Microseconds
+    }
+
+    @SmallTest
+    public void testWakelocksBecomeStale() throws Exception {
+        KernelWakelockStats staleStats = new KernelWakelockStats();
+
+        byte[] buffer = new ProcFileBuilder()
+                .addLine("Fakelock", 3, 30)
+                .getBytes();
+
+        readKernelWakelockStats(staleStats, buffer, new WakeLockInfo[0]);
+
+        assertEquals(1, staleStats.size());
+        assertTrue(staleStats.containsKey("Fakelock"));
+
+        buffer = new ProcFileBuilder()
+                .addLine("Wakelock", 1, 10)
+                .getBytes();
+
+        readKernelWakelockStats(staleStats, buffer, new WakeLockInfo[0]);
+
+        assertEquals(1, staleStats.size());
+        assertTrue(staleStats.containsKey("Wakelock"));
+        assertFalse(staleStats.containsKey("Fakelock"));
+    }
+
+// -------------------- SystemSuspend Wakelock Stats Test -------------------
+    @SmallTest
+    public void testEmptyWakeLockInfoList() {
+        KernelWakelockStats staleStats = mReader.updateWakelockStats(new WakeLockInfo[0],
+                new KernelWakelockStats());
+
+        assertTrue(staleStats.isEmpty());
+    }
+
+    @SmallTest
+    public void testOneWakeLockInfo() {
+        WakeLockInfo[] wlStats = new WakeLockInfo[1];
+        wlStats[0] = createWakeLockInfo("WakeLock", 20, 1000, 500);   // Milliseconds
+
+        KernelWakelockStats staleStats = mReader.updateWakelockStats(wlStats,
+                new KernelWakelockStats());
+
+        assertEquals(1, staleStats.size());
+
+        assertTrue(staleStats.containsKey("WakeLock"));
+
+        KernelWakelockStats.Entry entry = staleStats.get("WakeLock");
+        assertEquals(20, entry.count);
+        assertEquals(1000 * 1000, entry.totalTimeUs);   // Microseconds
+        assertEquals(500 * 1000, entry.activeTimeUs);   // Microseconds
+    }
+
+    @SmallTest
+    public void testTwoWakeLockInfos() {
+        WakeLockInfo[] wlStats = new WakeLockInfo[2];
+        wlStats[0] = createWakeLockInfo("WakeLock1", 10, 1000); // Milliseconds
+        wlStats[1] = createWakeLockInfo("WakeLock2", 20, 2000); // Milliseconds
+
+        KernelWakelockStats staleStats = mReader.updateWakelockStats(wlStats,
+                new KernelWakelockStats());
+
+        assertEquals(2, staleStats.size());
+
+        assertTrue(staleStats.containsKey("WakeLock1"));
+        assertTrue(staleStats.containsKey("WakeLock2"));
+
+        KernelWakelockStats.Entry entry1 = staleStats.get("WakeLock1");
+        assertEquals(10, entry1.count);
+        assertEquals(1000 * 1000, entry1.totalTimeUs); // Microseconds
+
+        KernelWakelockStats.Entry entry2 = staleStats.get("WakeLock2");
+        assertEquals(20, entry2.count);
+        assertEquals(2000 * 1000, entry2.totalTimeUs); // Microseconds
+    }
+
+    @SmallTest
+    public void testWakeLockInfosBecomeStale() {
+        WakeLockInfo[] wlStats = new WakeLockInfo[1];
+        wlStats[0] = createWakeLockInfo("WakeLock1", 10, 1000); // Milliseconds
+
+        KernelWakelockStats staleStats = new KernelWakelockStats();
+
+        readKernelWakelockStats(staleStats, new byte[0], wlStats);
+
+        assertEquals(1, staleStats.size());
+
+        assertTrue(staleStats.containsKey("WakeLock1"));
+        KernelWakelockStats.Entry entry = staleStats.get("WakeLock1");
+        assertEquals(10, entry.count);
+        assertEquals(1000 * 1000, entry.totalTimeUs);  // Microseconds
+
+        wlStats[0] = createWakeLockInfo("WakeLock2", 20, 2000); // Milliseconds
+
+        readKernelWakelockStats(staleStats, new byte[0], wlStats);
+
+        assertEquals(1, staleStats.size());
+
+        assertFalse(staleStats.containsKey("WakeLock1"));
+        assertTrue(staleStats.containsKey("WakeLock2"));
+        entry = staleStats.get("WakeLock2");
+        assertEquals(20, entry.count);
+        assertEquals(2000 * 1000, entry.totalTimeUs); // Micro seconds
+    }
+
+// -------------------- Aggregate  Wakelock Stats Tests --------------------
+    @SmallTest
+    public void testAggregateStatsEmpty() throws Exception {
+        KernelWakelockStats staleStats = new KernelWakelockStats();
+
+        byte[] buffer = new byte[0];
+        WakeLockInfo[] wlStats = new WakeLockInfo[0];
+
+        readKernelWakelockStats(staleStats, buffer, wlStats);
+
+        assertTrue(staleStats.isEmpty());
+    }
+
+    @SmallTest
+    public void testAggregateStatsNoNativeWakelocks() throws Exception {
+        KernelWakelockStats staleStats = new KernelWakelockStats();
+
+        byte[] buffer = new ProcFileBuilder()
+                .addLine("Wakelock", 34, 123) // Milliseconds
+                .getBytes();
+        WakeLockInfo[] wlStats = new WakeLockInfo[0];
+
+        readKernelWakelockStats(staleStats, buffer, wlStats);
+
+        assertEquals(1, staleStats.size());
+
+        assertTrue(staleStats.containsKey("Wakelock"));
+
+        KernelWakelockStats.Entry entry = staleStats.get("Wakelock");
+        assertEquals(34, entry.count);
+        assertEquals(1000 * 123, entry.totalTimeUs);  // Microseconds
+    }
+
+    @SmallTest
+    public void testAggregateStatsNoKernelWakelocks() throws Exception {
+        KernelWakelockStats staleStats = new KernelWakelockStats();
+
+        byte[] buffer = new byte[0];
+        WakeLockInfo[] wlStats = new WakeLockInfo[1];
+        wlStats[0] = createWakeLockInfo("WakeLock", 10, 1000);  // Milliseconds
+
+        readKernelWakelockStats(staleStats, buffer, wlStats);
+
+        assertEquals(1, staleStats.size());
+
+        assertTrue(staleStats.containsKey("WakeLock"));
+
+        KernelWakelockStats.Entry entry = staleStats.get("WakeLock");
+        assertEquals(10, entry.count);
+        assertEquals(1000 * 1000, entry.totalTimeUs);  // Microseconds
+    }
+
+    @SmallTest
+    public void testAggregateStatsBothKernelAndNativeWakelocks() throws Exception {
+        KernelWakelockStats staleStats = new KernelWakelockStats();
+
+        byte[] buffer = new ProcFileBuilder()
+                .addLine("WakeLock1", 34, 123)  // Milliseconds
+                .getBytes();
+        WakeLockInfo[] wlStats = new WakeLockInfo[1];
+        wlStats[0] = createWakeLockInfo("WakeLock2", 10, 1000); // Milliseconds
+
+        readKernelWakelockStats(staleStats, buffer, wlStats);
+
+        assertEquals(2, staleStats.size());
+
+        assertTrue(staleStats.containsKey("WakeLock1"));
+        KernelWakelockStats.Entry entry1 = staleStats.get("WakeLock1");
+        assertEquals(34, entry1.count);
+        assertEquals(123 * 1000, entry1.totalTimeUs);  // Microseconds
+
+        assertTrue(staleStats.containsKey("WakeLock2"));
+        KernelWakelockStats.Entry entry2 = staleStats.get("WakeLock2");
+        assertEquals(10, entry2.count);
+        assertEquals(1000 * 1000, entry2.totalTimeUs);  // Microseconds
+    }
+
+    @SmallTest
+    public void testAggregateStatsUpdate() throws Exception {
+        KernelWakelockStats staleStats = new KernelWakelockStats();
+
+        byte[] buffer = new ProcFileBuilder()
+                .addLine("WakeLock1", 34, 123)  // Milliseconds
+                .addLine("WakeLock2", 46, 345)  // Milliseconds
+                .getBytes();
+        WakeLockInfo[] wlStats = new WakeLockInfo[2];
+        wlStats[0] = createWakeLockInfo("WakeLock3", 10, 1000); // Milliseconds
+        wlStats[1] = createWakeLockInfo("WakeLock4", 20, 2000); // Milliseconds
+
+        readKernelWakelockStats(staleStats, buffer, wlStats);
+
+        assertEquals(4, staleStats.size());
+
+        assertTrue(staleStats.containsKey("WakeLock1"));
+        assertTrue(staleStats.containsKey("WakeLock2"));
+        assertTrue(staleStats.containsKey("WakeLock3"));
+        assertTrue(staleStats.containsKey("WakeLock4"));
+
+        KernelWakelockStats.Entry entry1 = staleStats.get("WakeLock1");
+        assertEquals(34, entry1.count);
+        assertEquals(123 * 1000, entry1.totalTimeUs); // Microseconds
+
+        KernelWakelockStats.Entry entry2 = staleStats.get("WakeLock2");
+        assertEquals(46, entry2.count);
+        assertEquals(345 * 1000, entry2.totalTimeUs); // Microseconds
+
+        KernelWakelockStats.Entry entry3 = staleStats.get("WakeLock3");
+        assertEquals(10, entry3.count);
+        assertEquals(1000 * 1000, entry3.totalTimeUs); // Microseconds
+
+        KernelWakelockStats.Entry entry4 = staleStats.get("WakeLock4");
+        assertEquals(20, entry4.count);
+        assertEquals(2000 * 1000, entry4.totalTimeUs); // Microseconds
+
+        buffer = new ProcFileBuilder()
+                .addLine("WakeLock1", 45, 789)  // Milliseconds
+                .addLine("WakeLock1", 56, 123)  // Milliseconds
+                .getBytes();
+        wlStats = new WakeLockInfo[1];
+        wlStats[0] = createWakeLockInfo("WakeLock4", 40, 4000); // Milliseconds
+
+        readKernelWakelockStats(staleStats, buffer, wlStats);
+
+        assertEquals(2, staleStats.size());
+
+        assertTrue(staleStats.containsKey("WakeLock1"));
+        assertTrue(staleStats.containsKey("WakeLock4"));
+
+        assertFalse(staleStats.containsKey("WakeLock2"));
+        assertFalse(staleStats.containsKey("WakeLock3"));
+
+        entry1 = staleStats.get("WakeLock1");
+        assertEquals(45 + 56, entry1.count);
+        assertEquals((789 + 123) * 1000, entry1.totalTimeUs);  // Microseconds
+
+        entry2 = staleStats.get("WakeLock4");
+        assertEquals(40, entry2.count);
+        assertEquals(4000 * 1000, entry4.totalTimeUs); // Microseconds
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/LongSamplingCounterArrayTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/LongSamplingCounterArrayTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/LongSamplingCounterArrayTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/LongSamplingCounterArrayTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/LongSamplingCounterTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/LongSamplingCounterTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/LongSamplingCounterTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/LongSamplingCounterTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/MemoryPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/MemoryPowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/MemoryPowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/MemoryPowerCalculatorTest.java
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/MobileRadioPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/MobileRadioPowerCalculatorTest.java
new file mode 100644
index 0000000..888a168
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/MobileRadioPowerCalculatorTest.java
@@ -0,0 +1,1050 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.power.stats;
+
+import static android.net.NetworkStats.DEFAULT_NETWORK_NO;
+import static android.net.NetworkStats.METERED_NO;
+import static android.net.NetworkStats.ROAMING_NO;
+import static android.os.BatteryStats.POWER_DATA_UNAVAILABLE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.app.usage.NetworkStatsManager;
+import android.net.NetworkCapabilities;
+import android.net.NetworkStats;
+import android.os.BatteryConsumer;
+import android.os.BatteryStats;
+import android.os.BatteryUsageStatsQuery;
+import android.os.Process;
+import android.os.UidBatteryConsumer;
+import android.telephony.AccessNetworkConstants;
+import android.telephony.ActivityStatsTechSpecificInfo;
+import android.telephony.CellSignalStrength;
+import android.telephony.DataConnectionRealTimeInfo;
+import android.telephony.ModemActivityInfo;
+import android.telephony.ServiceState;
+import android.telephony.SignalStrength;
+import android.telephony.TelephonyManager;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.frameworks.powerstatstests.R;
+
+import com.google.common.collect.Range;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+
+import java.util.ArrayList;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+@SuppressWarnings("GuardedBy")
+public class MobileRadioPowerCalculatorTest {
+    private static final double PRECISION = 0.00001;
+    private static final int APP_UID = Process.FIRST_APPLICATION_UID + 42;
+    private static final int APP_UID2 = Process.FIRST_APPLICATION_UID + 101;
+    @Mock
+    NetworkStatsManager mNetworkStatsManager;
+
+    @Rule
+    public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule();
+
+    @Test
+    public void testCounterBasedModel() {
+        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_modem_calculator)
+                .initMeasuredEnergyStatsLocked();
+        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
+
+        // The first ModemActivityInfo doesn't count up.
+        setInitialEmptyModemActivityInfo(stats);
+
+        // Scan for a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
+                TelephonyManager.SIM_STATE_READY,
+                2000, 2000);
+
+        // Found a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
+                5000, 5000);
+
+        ArrayList<CellSignalStrength> perRatCellStrength = new ArrayList();
+        CellSignalStrength gsmSignalStrength = mock(CellSignalStrength.class);
+        when(gsmSignalStrength.getLevel()).thenReturn(
+                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        perRatCellStrength.add(gsmSignalStrength);
+
+        // Note cell signal strength
+        SignalStrength signalStrength = mock(SignalStrength.class);
+        when(signalStrength.getCellSignalStrengths()).thenReturn(perRatCellStrength);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
+
+        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                8_000_000_000L, APP_UID, 8000, 8000);
+
+        // Note established network
+        stats.noteNetworkInterfaceForTransports("cellular",
+                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
+
+        // Spend some time in each signal strength level. It doesn't matter how long.
+        // The ModemActivityInfo reported level residency should be trusted over the BatteryStats
+        // timers.
+        when(gsmSignalStrength.getLevel()).thenReturn(
+                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8111, 8111);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_POOR);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8333, 8333);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8666, 8666);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GOOD);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 9110, 9110);
+
+        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                9_500_000_000L, APP_UID2, 9500, 9500);
+
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GREAT);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 9665, 9665);
+
+        // Note application network activity
+        NetworkStats networkStats = new NetworkStats(10000, 1)
+                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
+                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 150, 2000, 30, 100))
+                .addEntry(new NetworkStats.Entry("cellular", APP_UID2, 0, 0,
+                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 500, 50, 300, 10, 111));
+        mStatsRule.setNetworkStats(networkStats);
+
+        ModemActivityInfo mai = new ModemActivityInfo(10000, 2000, 3000,
+                new int[]{100, 200, 300, 400, 500}, 600);
+        stats.noteModemControllerActivity(mai, POWER_DATA_UNAVAILABLE, 10000, 10000,
+                mNetworkStatsManager);
+
+        mStatsRule.setTime(10_000, 10_000);
+
+        MobileRadioPowerCalculator calculator =
+                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
+
+        mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
+
+        BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer();
+        //    720 mA * 100 ms  (level 0 TX drain rate * level 0 TX duration)
+        // + 1080 mA * 200 ms  (level 1 TX drain rate * level 1 TX duration)
+        // + 1440 mA * 300 ms  (level 2 TX drain rate * level 2 TX duration)
+        // + 1800 mA * 400 ms  (level 3 TX drain rate * level 3 TX duration)
+        // + 2160 mA * 500 ms  (level 4 TX drain rate * level 4 TX duration)
+        // + 1440 mA * 600 ms  (RX drain rate * RX duration)
+        // +  360 mA * 3000 ms (idle drain rate * idle duration)
+        // +   70 mA * 2000 ms (sleep drain rate * sleep duration)
+        // _________________
+        // =    4604000 mA-ms or 1.27888 mA-h
+        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(1.27888);
+        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+
+        //    720 mA * 100 ms  (level 0 TX drain rate * level 0 TX duration)
+        // + 1080 mA * 200 ms  (level 1 TX drain rate * level 1 TX duration)
+        // + 1440 mA * 300 ms  (level 2 TX drain rate * level 2 TX duration)
+        // + 1800 mA * 400 ms  (level 3 TX drain rate * level 3 TX duration)
+        // + 2160 mA * 500 ms  (level 4 TX drain rate * level 4 TX duration)
+        // + 1440 mA * 600 ms  (RX drain rate * RX duration)
+        // _________________
+        // =    3384000 mA-ms or 0.94 mA-h
+        BatteryConsumer appsConsumer = mStatsRule.getAppsBatteryConsumer();
+        assertThat(appsConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(0.94);
+        assertThat(appsConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+
+        // 3/4 of total packets were sent by APP_UID so 75% of total
+        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
+        assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(0.705);
+        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+
+        // Rest should go to the other app
+        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
+        assertThat(uidConsumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(0.235);
+        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+    }
+
+    @Test
+    public void testCounterBasedModel_multipleDefinedRat() {
+        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_modem_calculator_multiactive)
+                .initMeasuredEnergyStatsLocked();
+        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
+
+        // The first ModemActivityInfo doesn't count up.
+        setInitialEmptyModemActivityInfo(stats);
+
+        // Scan for a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
+                TelephonyManager.SIM_STATE_READY,
+                2000, 2000);
+
+        // Found a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
+                5000, 5000);
+
+        ArrayList<CellSignalStrength> perRatCellStrength = new ArrayList();
+        CellSignalStrength gsmSignalStrength = mock(CellSignalStrength.class);
+        when(gsmSignalStrength.getLevel()).thenReturn(
+                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        perRatCellStrength.add(gsmSignalStrength);
+
+        // Note cell signal strength
+        SignalStrength signalStrength = mock(SignalStrength.class);
+        when(signalStrength.getCellSignalStrengths()).thenReturn(perRatCellStrength);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
+
+        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                8_000_000_000L, APP_UID, 8000, 8000);
+
+        // Note established network
+        stats.noteNetworkInterfaceForTransports("cellular",
+                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
+
+        // Spend some time in each signal strength level. It doesn't matter how long.
+        // The ModemActivityInfo reported level residency should be trusted over the BatteryStats
+        // timers.
+        when(gsmSignalStrength.getLevel()).thenReturn(
+                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8111, 8111);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_POOR);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8333, 8333);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8666, 8666);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GOOD);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 9110, 9110);
+
+        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                9_500_000_000L, APP_UID2, 9500, 9500);
+
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GREAT);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 9665, 9665);
+
+        // Note application network activity
+        NetworkStats networkStats = new NetworkStats(10000, 1)
+                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
+                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 150, 2000, 30, 100))
+                .addEntry(new NetworkStats.Entry("cellular", APP_UID2, 0, 0,
+                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 500, 50, 300, 10, 111));
+        mStatsRule.setNetworkStats(networkStats);
+
+        ActivityStatsTechSpecificInfo cdmaInfo = new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.CDMA2000,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN,
+                new int[]{10, 11, 12, 13, 14}, 15);
+        ActivityStatsTechSpecificInfo lteInfo = new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.EUTRAN,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN,
+                new int[]{20, 21, 22, 23, 24}, 25);
+        ActivityStatsTechSpecificInfo nrLowFreqInfo = new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN, ServiceState.FREQUENCY_RANGE_LOW,
+                new int[]{30, 31, 32, 33, 34}, 35);
+        ActivityStatsTechSpecificInfo nrMidFreqInfo = new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN, ServiceState.FREQUENCY_RANGE_MID,
+                new int[]{40, 41, 42, 43, 44}, 45);
+        ActivityStatsTechSpecificInfo nrHighFreqInfo = new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN, ServiceState.FREQUENCY_RANGE_HIGH,
+                new int[]{50, 51, 52, 53, 54}, 55);
+        ActivityStatsTechSpecificInfo nrMmwaveFreqInfo = new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN, ServiceState.FREQUENCY_RANGE_MMWAVE,
+                new int[]{60, 61, 62, 63, 64}, 65);
+
+        ActivityStatsTechSpecificInfo[] ratInfos =
+                new ActivityStatsTechSpecificInfo[]{cdmaInfo, lteInfo, nrLowFreqInfo, nrMidFreqInfo,
+                        nrHighFreqInfo, nrMmwaveFreqInfo};
+
+        ModemActivityInfo mai = new ModemActivityInfo(10000, 2000, 3000, ratInfos);
+        stats.noteModemControllerActivity(mai, POWER_DATA_UNAVAILABLE, 10000, 10000,
+                mNetworkStatsManager);
+
+        mStatsRule.setTime(10_000, 10_000);
+
+        MobileRadioPowerCalculator calculator =
+                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
+
+        mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
+
+        BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer();
+        // CDMA2000 [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
+        //   [720, 1080, 1440, 1800, 2160, 1440] mA . [10, 11, 12, 13, 14, 15] ms = 111600 mA-ms
+        // LTE [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
+        //   [800, 1200, 1600, 2000, 2400, 2000] mA . [20, 21, 22, 23, 24, 25] ms = 230000 mA-ms
+        // 5G Low Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
+        // (nrFrequency="LOW" values was not defined so fall back to nrFrequency="DEFAULT")
+        //   [999, 1333, 1888, 2222, 2666, 2222] mA . [30, 31, 32, 33, 34, 35] ms = 373449 mA-ms
+        // 5G Mid Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
+        // (nrFrequency="MID" values was not defined so fall back to nrFrequency="DEFAULT")
+        //   [999, 1333, 1888, 2222, 2666, 2222] mA . [40, 41, 42, 43, 44, 45] ms = 486749 mA-ms
+        // 5G High Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
+        //   [1818, 2727, 3636, 4545, 5454, 2727] mA . [50, 51, 52, 53, 54, 55] ms = 1104435 mA-ms
+        // 5G Mmwave Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
+        //   [2345, 3456, 4567, 5678, 6789, 3456] mA . [60, 61, 62, 63, 64, 65] ms = 1651520 mA-ms
+        // _________________
+        // =    3957753 mA-ms or 1.09938 mA-h active consumption
+        //
+        // Idle drain rate * idle duration
+        //   360 mA * 3000 ms = 1080000 mA-ms
+        // Sleep drain rate * sleep duration
+        //   70 mA * 2000 ms = 140000 mA-ms
+        // _________________
+        // =    5177753 mA-ms or 1.43826 mA-h total consumption
+        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(1.43826);
+        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+
+        //    720 mA * 100 ms  (level 0 TX drain rate * level 0 TX duration)
+        // + 1080 mA * 200 ms  (level 1 TX drain rate * level 1 TX duration)
+        // + 1440 mA * 300 ms  (level 2 TX drain rate * level 2 TX duration)
+        // + 1800 mA * 400 ms  (level 3 TX drain rate * level 3 TX duration)
+        // + 2160 mA * 500 ms  (level 4 TX drain rate * level 4 TX duration)
+        // + 1440 mA * 600 ms  (RX drain rate * RX duration)
+        // _________________
+        // =    3384000 mA-ms or 0.94 mA-h
+        BatteryConsumer appsConsumer = mStatsRule.getAppsBatteryConsumer();
+        assertThat(appsConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(1.09938);
+        assertThat(appsConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+
+        // 3/4 of total packets were sent by APP_UID so 75% of total
+        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
+        assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(0.82453);
+        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+
+        // Rest should go to the other app
+        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
+        assertThat(uidConsumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(0.27484);
+        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+    }
+
+    @Test
+    public void testCounterBasedModel_legacyPowerProfile() {
+        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_legacy_modem)
+                .initMeasuredEnergyStatsLocked();
+        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
+
+        // The first ModemActivityInfo doesn't count up.
+        setInitialEmptyModemActivityInfo(stats);
+
+        // Scan for a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
+                TelephonyManager.SIM_STATE_READY,
+                2000, 2000);
+
+        // Found a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
+                5000, 5000);
+
+        ArrayList<CellSignalStrength> perRatCellStrength = new ArrayList();
+        CellSignalStrength gsmSignalStrength = mock(CellSignalStrength.class);
+        when(gsmSignalStrength.getLevel()).thenReturn(
+                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        perRatCellStrength.add(gsmSignalStrength);
+
+        // Note cell signal strength
+        SignalStrength signalStrength = mock(SignalStrength.class);
+        when(signalStrength.getCellSignalStrengths()).thenReturn(perRatCellStrength);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
+
+        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                8_000_000_000L, APP_UID, 8000, 8000);
+
+        // Note established network
+        stats.noteNetworkInterfaceForTransports("cellular",
+                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
+
+        // Spend some time in each signal strength level. It doesn't matter how long.
+        // The ModemActivityInfo reported level residency should be trusted over the BatteryStats
+        // timers.
+        when(gsmSignalStrength.getLevel()).thenReturn(
+                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8111, 8111);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_POOR);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8333, 8333);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8666, 8666);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GOOD);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 9110, 9110);
+
+        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                9_500_000_000L, APP_UID2, 9500, 9500);
+
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GREAT);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 9665, 9665);
+
+        // Note application network activity
+        NetworkStats networkStats = new NetworkStats(10000, 1)
+                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
+                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 150, 2000, 30, 100))
+                .addEntry(new NetworkStats.Entry("cellular", APP_UID2, 0, 0,
+                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 500, 50, 300, 10, 111));
+        mStatsRule.setNetworkStats(networkStats);
+
+        ModemActivityInfo mai = new ModemActivityInfo(10000, 2000, 3000,
+                new int[]{100, 200, 300, 400, 500}, 600);
+        stats.noteModemControllerActivity(mai, POWER_DATA_UNAVAILABLE, 10000, 10000,
+                mNetworkStatsManager);
+
+        mStatsRule.setTime(10_000, 10_000);
+
+        MobileRadioPowerCalculator calculator =
+                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
+
+        mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
+
+        BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer();
+        //    720 mA * 100 ms  (level 0 TX drain rate * level 0 TX duration)
+        // + 1080 mA * 200 ms  (level 1 TX drain rate * level 1 TX duration)
+        // + 1440 mA * 300 ms  (level 2 TX drain rate * level 2 TX duration)
+        // + 1800 mA * 400 ms  (level 3 TX drain rate * level 3 TX duration)
+        // + 2160 mA * 500 ms  (level 4 TX drain rate * level 4 TX duration)
+        // + 1440 mA * 600 ms  (RX drain rate * RX duration)
+        // +  360 mA * 3000 ms (idle drain rate * idle duration)
+        // +   70 mA * 2000 ms (sleep drain rate * sleep duration)
+        // _________________
+        // =    4604000 mA-ms or 1.27888 mA-h
+        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(1.27888);
+        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+
+        //    720 mA * 100 ms  (level 0 TX drain rate * level 0 TX duration)
+        // + 1080 mA * 200 ms  (level 1 TX drain rate * level 1 TX duration)
+        // + 1440 mA * 300 ms  (level 2 TX drain rate * level 2 TX duration)
+        // + 1800 mA * 400 ms  (level 3 TX drain rate * level 3 TX duration)
+        // + 2160 mA * 500 ms  (level 4 TX drain rate * level 4 TX duration)
+        // + 1440 mA * 600 ms  (RX drain rate * RX duration)
+        // _________________
+        // =    3384000 mA-ms or 0.94 mA-h
+        BatteryConsumer appsConsumer = mStatsRule.getAppsBatteryConsumer();
+        assertThat(appsConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(0.94);
+        assertThat(appsConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+
+        // 3/4 of total packets were sent by APP_UID so 75% of total
+        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
+        assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(0.705);
+        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+
+        // Rest should go to the other app
+        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
+        assertThat(uidConsumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(0.235);
+        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+    }
+
+    @Test
+    public void testTimerBasedModel_byProcessState() {
+        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_legacy_modem)
+                .initMeasuredEnergyStatsLocked();
+        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
+        BatteryStatsImpl.Uid uid = stats.getUidStatsLocked(APP_UID);
+
+        mStatsRule.setTime(1000, 1000);
+        uid.setProcessStateForTest(
+                BatteryStats.Uid.PROCESS_STATE_FOREGROUND, 1000);
+
+        // Scan for a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
+                TelephonyManager.SIM_STATE_READY,
+                2000, 2000);
+
+        ArrayList<CellSignalStrength> perRatCellStrength = new ArrayList();
+        CellSignalStrength gsmSignalStrength = mock(CellSignalStrength.class);
+        when(gsmSignalStrength.getLevel()).thenReturn(
+                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        perRatCellStrength.add(gsmSignalStrength);
+
+        // Found a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
+                5000, 5000);
+
+        // Note cell signal strength
+        SignalStrength signalStrength = mock(SignalStrength.class);
+        when(signalStrength.getCellSignalStrengths()).thenReturn(perRatCellStrength);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
+
+        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                8_000_000_000L, APP_UID, 8000, 8000);
+
+        // Note established network
+        stats.noteNetworkInterfaceForTransports("cellular",
+                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
+
+        // Spend some time in each signal strength level. It doesn't matter how long.
+        // The ModemActivityInfo reported level residency should be trusted over the BatteryStats
+        // timers.
+        when(gsmSignalStrength.getLevel()).thenReturn(
+                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8111, 8111);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_POOR);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8333, 8333);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8666, 8666);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GOOD);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 9110, 9110);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GREAT);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 9665, 9665);
+
+        // Note application network activity
+        mStatsRule.setNetworkStats(new NetworkStats(10000, 1)
+                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
+                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 100, 2000, 20, 100)));
+
+        stats.noteModemControllerActivity(null, POWER_DATA_UNAVAILABLE, 10000, 10000,
+                mNetworkStatsManager);
+
+        uid.setProcessStateForTest(
+                BatteryStats.Uid.PROCESS_STATE_BACKGROUND, 11000);
+
+        mStatsRule.setNetworkStats(new NetworkStats(12000, 1)
+                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
+                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 250, 2000, 80, 200)));
+
+        stats.noteModemControllerActivity(null, POWER_DATA_UNAVAILABLE, 12000, 12000,
+                mNetworkStatsManager);
+
+        assertThat(uid.getMobileRadioEnergyConsumptionUC()).isAtMost(0);
+        // 12000-8000 = 4000 ms == 4_000_000 us
+        assertThat(uid.getMobileRadioActiveTimeInProcessState(BatteryConsumer.PROCESS_STATE_ANY))
+                .isEqualTo(4_000_000);
+        assertThat(uid.getMobileRadioActiveTimeInProcessState(
+                BatteryConsumer.PROCESS_STATE_FOREGROUND))
+                .isEqualTo(3_000_000);
+        assertThat(uid.getMobileRadioActiveTimeInProcessState(
+                BatteryConsumer.PROCESS_STATE_BACKGROUND))
+                .isEqualTo(1_000_000);
+        assertThat(uid.getMobileRadioActiveTimeInProcessState(
+                BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE))
+                .isEqualTo(0);
+
+        MobileRadioPowerCalculator calculator =
+                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
+
+        mStatsRule.setTime(12_000, 12_000);
+
+        mStatsRule.apply(new BatteryUsageStatsQuery.Builder()
+                .powerProfileModeledOnly()
+                .includePowerModels()
+                .includeProcessStateData()
+                .build(), calculator);
+
+        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
+
+        final BatteryConsumer.Key foreground = uidConsumer.getKey(
+                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
+                BatteryConsumer.PROCESS_STATE_FOREGROUND);
+        final BatteryConsumer.Key background = uidConsumer.getKey(
+                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
+                BatteryConsumer.PROCESS_STATE_BACKGROUND);
+        final BatteryConsumer.Key fgs = uidConsumer.getKey(
+                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
+                BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE);
+
+
+        assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(1.6);
+
+        assertThat(uidConsumer.getConsumedPower(foreground)).isWithin(PRECISION).of(1.2);
+        assertThat(uidConsumer.getConsumedPower(background)).isWithin(PRECISION).of(0.4);
+        assertThat(uidConsumer.getConsumedPower(fgs)).isWithin(PRECISION).of(0);
+    }
+
+    @Test
+    public void testMeasuredEnergyBasedModel_mobileRadioActiveTimeModel() {
+        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_legacy_modem)
+                .setPerUidModemModel(
+                        BatteryStatsImpl.PER_UID_MODEM_POWER_MODEL_MOBILE_RADIO_ACTIVE_TIME)
+                .initMeasuredEnergyStatsLocked();
+        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
+
+        // The first ModemActivityInfo doesn't count up.
+        setInitialEmptyModemActivityInfo(stats);
+
+        // Scan for a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
+                TelephonyManager.SIM_STATE_READY,
+                2000, 2000);
+
+        // Found a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
+                5000, 5000);
+
+        // Note cell signal strength
+        SignalStrength signalStrength = mock(SignalStrength.class);
+        when(signalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
+
+        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                8_000_000_000L, APP_UID, 8000, 8000);
+
+        // Note established network
+        stats.noteNetworkInterfaceForTransports("cellular",
+                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
+
+        stats.notePhoneOnLocked(9800, 9800);
+
+        // Note application network activity
+        NetworkStats networkStats = new NetworkStats(10000, 1)
+                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
+                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 100, 2000, 20, 100));
+        mStatsRule.setNetworkStats(networkStats);
+
+        ModemActivityInfo mai = new ModemActivityInfo(10000, 2000, 3000,
+                new int[]{100, 200, 300, 400, 500}, 600);
+        stats.noteModemControllerActivity(mai, 10_000_000, 10000, 10000, mNetworkStatsManager);
+
+        mStatsRule.setTime(12_000, 12_000);
+
+        MobileRadioPowerCalculator mobileRadioPowerCalculator =
+                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
+        PhonePowerCalculator phonePowerCalculator =
+                new PhonePowerCalculator(mStatsRule.getPowerProfile());
+        mStatsRule.apply(mobileRadioPowerCalculator, phonePowerCalculator);
+
+        BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer();
+        // 10_000_000 micro-Coulomb * 1/1000 milli/micro * 1/3600 hour/second = 2.77778 mAh
+        // 1800ms data duration / 2000 total duration *  2.77778 mAh = 2.5
+        // 200ms phone on duration / 2000 total duration *  2.77778 mAh = 0.27777
+        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(2.5);
+        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_PHONE))
+                .isWithin(PRECISION).of(0.27778);
+        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_PHONE))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+
+        BatteryConsumer appsConsumer = mStatsRule.getAppsBatteryConsumer();
+        assertThat(appsConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(1.38541);
+        assertThat(appsConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+
+        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
+        assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(1.38541);
+        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+    }
+
+
+
+    @Test
+    public void testMeasuredEnergyBasedModel_modemActivityInfoRxTxModel() {
+        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_modem_calculator_multiactive)
+                .setPerUidModemModel(
+                        BatteryStatsImpl.PER_UID_MODEM_POWER_MODEL_MODEM_ACTIVITY_INFO_RX_TX)
+                .initMeasuredEnergyStatsLocked();
+        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
+
+        // The first ModemActivityInfo doesn't count up.
+        setInitialEmptyModemActivityInfo(stats);
+
+        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH, 0, -1,
+                0, 0);
+
+        // Scan for a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
+                TelephonyManager.SIM_STATE_READY,
+                2000, 2000);
+
+        // Found a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
+                5000, 5000);
+
+        ArrayList<CellSignalStrength> perRatCellStrength = new ArrayList();
+        CellSignalStrength gsmSignalStrength = mock(CellSignalStrength.class);
+        when(gsmSignalStrength.getLevel()).thenReturn(
+                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        perRatCellStrength.add(gsmSignalStrength);
+
+        // Note cell signal strength
+        SignalStrength signalStrength = mock(SignalStrength.class);
+        when(signalStrength.getCellSignalStrengths()).thenReturn(perRatCellStrength);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
+
+        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                8_000_000_000L, APP_UID, 8000, 8000);
+
+        // Note established network
+        stats.noteNetworkInterfaceForTransports("cellular",
+                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
+
+        // Spend some time in each signal strength level. It doesn't matter how long.
+        // The ModemActivityInfo reported level residency should be trusted over the BatteryStats
+        // timers.
+        when(gsmSignalStrength.getLevel()).thenReturn(
+                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8111, 8111);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_POOR);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8333, 8333);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8666, 8666);
+
+        stats.notePhoneOnLocked(9000, 9000);
+
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GOOD);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 9110, 9110);
+
+        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                9_500_000_000L, APP_UID2, 9500, 9500);
+
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GREAT);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 9665, 9665);
+
+        // Note application network activity
+        NetworkStats networkStats = new NetworkStats(10000, 1)
+                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
+                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 150, 300, 10, 100))
+                .addEntry(new NetworkStats.Entry("cellular", APP_UID2, 0, 0,
+                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 500, 50, 2000, 30, 111));
+        mStatsRule.setNetworkStats(networkStats);
+
+        ActivityStatsTechSpecificInfo cdmaInfo = new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.CDMA2000,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN,
+                new int[]{10, 11, 12, 13, 14}, 15);
+        ActivityStatsTechSpecificInfo lteInfo = new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.EUTRAN,
+                ServiceState.FREQUENCY_RANGE_UNKNOWN,
+                new int[]{20, 21, 22, 23, 24}, 25);
+        ActivityStatsTechSpecificInfo nrLowFreqInfo = new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN, ServiceState.FREQUENCY_RANGE_LOW,
+                new int[]{30, 31, 32, 33, 34}, 35);
+        ActivityStatsTechSpecificInfo nrMidFreqInfo = new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN, ServiceState.FREQUENCY_RANGE_MID,
+                new int[]{40, 41, 42, 43, 44}, 45);
+        ActivityStatsTechSpecificInfo nrHighFreqInfo = new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN, ServiceState.FREQUENCY_RANGE_HIGH,
+                new int[]{50, 51, 52, 53, 54}, 55);
+        ActivityStatsTechSpecificInfo nrMmwaveFreqInfo = new ActivityStatsTechSpecificInfo(
+                AccessNetworkConstants.AccessNetworkType.NGRAN, ServiceState.FREQUENCY_RANGE_MMWAVE,
+                new int[]{60, 61, 62, 63, 64}, 65);
+
+        ActivityStatsTechSpecificInfo[] ratInfos =
+                new ActivityStatsTechSpecificInfo[]{cdmaInfo, lteInfo, nrLowFreqInfo, nrMidFreqInfo,
+                        nrHighFreqInfo, nrMmwaveFreqInfo};
+
+        ModemActivityInfo mai = new ModemActivityInfo(10000, 2000, 3000, ratInfos);
+        stats.noteModemControllerActivity(mai, 10_000_000, 10000, 10000,
+                mNetworkStatsManager);
+
+        mStatsRule.setTime(10_000, 10_000);
+
+        MobileRadioPowerCalculator mobileRadioPowerCalculator =
+                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
+        PhonePowerCalculator phonePowerCalculator =
+                new PhonePowerCalculator(mStatsRule.getPowerProfile());
+        mStatsRule.apply(mobileRadioPowerCalculator, phonePowerCalculator);
+
+        BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer();
+        // 10_000_000 micro-Coulomb * 1/1000 milli/micro * 1/3600 hour/second = 2.77778 mAh
+        // 9000ms data duration / 10000 total duration *  2.77778 mAh = 2.5
+        // 1000ms phone on duration / 10000 total duration *  2.77778 mAh = 0.27777
+        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(2.5);
+        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_PHONE))
+                .isWithin(PRECISION).of(0.27778);
+        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_PHONE))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+
+        // CDMA2000 [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
+        //   [720, 1080, 1440, 1800, 2160, 1440] mA . [10, 11, 12, 13, 14, 15] ms = 111600 mA-ms
+        // LTE [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
+        //   [800, 1200, 1600, 2000, 2400, 2000] mA . [20, 21, 22, 23, 24, 25] ms = 230000 mA-ms
+        // 5G Low Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
+        // (nrFrequency="LOW" values was not defined so fall back to nrFrequency="DEFAULT")
+        //   [999, 1333, 1888, 2222, 2666, 2222] mA . [30, 31, 32, 33, 34, 35] ms = 373449 mA-ms
+        // 5G Mid Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
+        // (nrFrequency="MID" values was not defined so fall back to nrFrequency="DEFAULT")
+        //   [999, 1333, 1888, 2222, 2666, 2222] mA . [40, 41, 42, 43, 44, 45] ms = 486749 mA-ms
+        // 5G High Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
+        //   [1818, 2727, 3636, 4545, 5454, 2727] mA . [50, 51, 52, 53, 54, 55] ms = 1104435 mA-ms
+        // 5G Mmwave Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
+        //   [2345, 3456, 4567, 5678, 6789, 3456] mA . [60, 61, 62, 63, 64, 65] ms = 1651520 mA-ms
+        // _________________
+        // =    3957753 mA-ms estimated active consumption
+        //
+        // Idle drain rate * idle duration
+        //   360 mA * 3000 ms = 1080000 mA-ms
+        // Sleep drain rate * sleep duration
+        //   70 mA * 2000 ms = 140000 mA-ms
+        // _________________
+        // =    5177753 mA-ms estimated total consumption
+        //
+        // 2.5 mA-h measured total consumption * 3957753 / 5177753 = 1.91094 mA-h
+        BatteryConsumer appsConsumer = mStatsRule.getAppsBatteryConsumer();
+        assertThat(appsConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(1.91094);
+        assertThat(appsConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+
+        // 240 ms Rx Time, 1110 ms Tx Time, 1350 ms active time
+        // 150 App 1 Rx Packets, 10 App 1 Tx packets
+        // 50 App 2 Rx Packets, 30 App 2 Tx packets
+        // 200 total Rx Packets, 40 total Tx packets
+        // 623985 mA-ms Rx consumption, 3333768 mA-ms Tx consumption
+        //
+        // Rx Power consumption * Ratio of App1 / Total Rx Packets:
+        // 623985 * 150 / 200 = 467988.75 mA-ms App 1 Rx Power Consumption
+        //
+        // App 1 Tx Packets + App 1 Rx Packets * Ratio of Tx / Total active time
+        // 10 + 150 * 1110 / 1350 = 133.3333 Estimated App 1 Rx/Tx Packets during Tx
+        // Total Tx Packets + Total Rx Packets * Ratio of Tx / Total active time
+        // 40 + 200 * 1110 / 1350 = 204.44444 Estimated Total Rx/Tx Packets during Tx
+        // Tx Power consumption * Ratio of App 1 / Total Estimated Tx Packets:
+        // 3333768 * 133.33333 / 204.44444 = 2174196.52174 mA-ms App 1 Tx Power Consumption
+        //
+        // Total App Power consumption * Ratio of App 1 / Total Estimated Power Consumption
+        // 1.91094 * (467988.75 + 2174196.52174) / 3957753 = 1.27574 App 1 Power Consumption
+        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
+        assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(1.27574);
+        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+
+        // Rest should go to the other app
+        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
+        assertThat(uidConsumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(0.63520);
+        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+    }
+
+    @Test
+    public void testMeasuredEnergyBasedModel_modemActivityInfoRxTxModel_legacyPowerProfile() {
+        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_legacy_modem)
+                .setPerUidModemModel(
+                        BatteryStatsImpl.PER_UID_MODEM_POWER_MODEL_MODEM_ACTIVITY_INFO_RX_TX)
+                .initMeasuredEnergyStatsLocked();
+        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
+
+        // The first ModemActivityInfo doesn't count up.
+        setInitialEmptyModemActivityInfo(stats);
+
+        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH, 0, -1,
+                0, 0);
+
+        // Scan for a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
+                TelephonyManager.SIM_STATE_READY,
+                2000, 2000);
+
+        ArrayList<CellSignalStrength> perRatCellStrength = new ArrayList();
+        CellSignalStrength gsmSignalStrength = mock(CellSignalStrength.class);
+        when(gsmSignalStrength.getLevel()).thenReturn(
+                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        perRatCellStrength.add(gsmSignalStrength);
+
+        // Found a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
+                5000, 5000);
+
+        // Note cell signal strength
+        SignalStrength signalStrength = mock(SignalStrength.class);
+        when(signalStrength.getCellSignalStrengths()).thenReturn(perRatCellStrength);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
+
+        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                8_000_000_000L, APP_UID, 8000, 8000);
+
+        // Note established network
+        stats.noteNetworkInterfaceForTransports("cellular",
+                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
+
+        // Spend some time in each signal strength level. It doesn't matter how long.
+        // The ModemActivityInfo reported level residency should be trusted over the BatteryStats
+        // timers.
+        when(gsmSignalStrength.getLevel()).thenReturn(
+                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8111, 8111);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_POOR);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8333, 8333);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 8666, 8666);
+
+        stats.notePhoneOnLocked(9000, 9000);
+
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GOOD);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 9110, 9110);
+        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GREAT);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 9665, 9665);
+
+        // Note application network activity
+        NetworkStats networkStats = new NetworkStats(10000, 1)
+                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
+                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 100, 2000, 20, 100));
+        mStatsRule.setNetworkStats(networkStats);
+
+        ModemActivityInfo mai = new ModemActivityInfo(10000, 2000, 3000,
+                new int[]{100, 200, 300, 400, 500}, 600);
+        stats.noteModemControllerActivity(mai, 10_000_000, 10000, 10000, mNetworkStatsManager);
+
+        mStatsRule.setTime(12_000, 12_000);
+
+
+        MobileRadioPowerCalculator mobileRadioPowerCalculator =
+                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
+        PhonePowerCalculator phonePowerCalculator =
+                new PhonePowerCalculator(mStatsRule.getPowerProfile());
+        mStatsRule.apply(mobileRadioPowerCalculator, phonePowerCalculator);
+
+        BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer();
+        // 10_000_000 micro-Coulomb * 1/1000 milli/micro * 1/3600 hour/second = 2.77778 mAh
+        // 9000ms data duration / 10000 total duration *  2.77778 mAh = 2.5
+        // 1000ms phone on duration / 10000 total duration *  2.77778 mAh = 0.27777
+        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(2.5);
+        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_PHONE))
+                .isWithin(PRECISION).of(0.27778);
+        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_PHONE))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+
+        BatteryConsumer appsConsumer = mStatsRule.getAppsBatteryConsumer();
+        // Estimated Rx/Tx modem consumption = 0.94 mAh
+        // Estimated total modem consumption = 1.27888 mAh
+        // 2.5 * 0.94 / 1.27888 = 1.83754 mAh
+        assertThat(appsConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(1.83754);
+        assertThat(appsConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+
+        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
+        assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isWithin(PRECISION).of(1.83754);
+        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
+    }
+
+    @Test
+    public void testMeasuredEnergyBasedModel_byProcessState() {
+        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_legacy_modem)
+                .initMeasuredEnergyStatsLocked();
+        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
+        BatteryStatsImpl.Uid uid = stats.getUidStatsLocked(APP_UID);
+
+        mStatsRule.setTime(1000, 1000);
+        uid.setProcessStateForTest(
+                BatteryStats.Uid.PROCESS_STATE_FOREGROUND, 1000);
+
+        // Scan for a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
+                TelephonyManager.SIM_STATE_READY,
+                2000, 2000);
+
+        // Found a cell
+        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
+                5000, 5000);
+
+        // Note cell signal strength
+        SignalStrength signalStrength = mock(SignalStrength.class);
+        when(signalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
+        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
+
+        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                8_000_000_000L, APP_UID, 8000, 8000);
+
+        // Note established network
+        stats.noteNetworkInterfaceForTransports("cellular",
+                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
+
+        // Note application network activity
+        mStatsRule.setNetworkStats(new NetworkStats(10000, 1)
+                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
+                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 100, 2000, 20, 100)));
+
+        stats.noteModemControllerActivity(null, 10_000_000, 10000, 10000, mNetworkStatsManager);
+
+        uid.setProcessStateForTest(
+                BatteryStats.Uid.PROCESS_STATE_BACKGROUND, 11000);
+
+        mStatsRule.setNetworkStats(new NetworkStats(12000, 1)
+                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
+                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 250, 2000, 80, 200)));
+
+        stats.noteModemControllerActivity(null, 15_000_000, 12000, 12000, mNetworkStatsManager);
+
+        mStatsRule.setTime(20000, 20000);
+
+        assertThat(uid.getMobileRadioEnergyConsumptionUC())
+                .isIn(Range.open(20_000_000L, 21_000_000L));
+        assertThat(uid.getMobileRadioEnergyConsumptionUC(
+                BatteryConsumer.PROCESS_STATE_FOREGROUND))
+                .isIn(Range.open(13_000_000L, 14_000_000L));
+        assertThat(uid.getMobileRadioEnergyConsumptionUC(
+                BatteryConsumer.PROCESS_STATE_BACKGROUND))
+                .isIn(Range.open(7_000_000L, 8_000_000L));
+        assertThat(uid.getMobileRadioEnergyConsumptionUC(
+                BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE))
+                .isEqualTo(0);
+
+        MobileRadioPowerCalculator calculator =
+                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
+
+        mStatsRule.apply(new BatteryUsageStatsQuery.Builder()
+                .includePowerModels()
+                .includeProcessStateData()
+                .build(), calculator);
+
+        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
+
+        final BatteryConsumer.Key foreground = uidConsumer.getKey(
+                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
+                BatteryConsumer.PROCESS_STATE_FOREGROUND);
+        final BatteryConsumer.Key background = uidConsumer.getKey(
+                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
+                BatteryConsumer.PROCESS_STATE_BACKGROUND);
+        final BatteryConsumer.Key fgs = uidConsumer.getKey(
+                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
+                BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE);
+
+        assertThat(uidConsumer.getConsumedPower(foreground)).isWithin(PRECISION).of(3.62064);
+        assertThat(uidConsumer.getConsumedPower(background)).isWithin(PRECISION).of(2.08130);
+        assertThat(uidConsumer.getConsumedPower(fgs)).isWithin(PRECISION).of(0);
+    }
+
+    public void setInitialEmptyModemActivityInfo(BatteryStatsImpl stats) {
+        // Initial empty ModemActivityInfo.
+        final ModemActivityInfo emptyMai = new ModemActivityInfo(0L, 0L, 0L, new int[5], 0L);
+        stats.noteModemControllerActivity(emptyMai, 0, 0, 0, mNetworkStatsManager);
+    }
+}
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/MockBatteryStatsImpl.java b/services/tests/powerstatstests/src/com/android/server/power/stats/MockBatteryStatsImpl.java
new file mode 100644
index 0000000..6d3f1f2
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/MockBatteryStatsImpl.java
@@ -0,0 +1,304 @@
+/*
+ * 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.server.power.stats;
+
+import static org.mockito.Mockito.mock;
+
+import android.annotation.NonNull;
+import android.app.usage.NetworkStatsManager;
+import android.net.NetworkStats;
+import android.os.Handler;
+import android.os.Looper;
+import android.util.SparseArray;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.os.Clock;
+import com.android.internal.os.CpuScalingPolicies;
+import com.android.internal.os.KernelCpuSpeedReader;
+import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidActiveTimeReader;
+import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidClusterTimeReader;
+import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader;
+import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidUserSysTimeReader;
+import com.android.internal.os.KernelSingleUidTimeReader;
+import com.android.internal.os.PowerProfile;
+import com.android.internal.power.EnergyConsumerStats;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Queue;
+import java.util.concurrent.Future;
+
+/**
+ * Mocks a BatteryStatsImpl object.
+ */
+public class MockBatteryStatsImpl extends BatteryStatsImpl {
+    public boolean mForceOnBattery;
+    // The mNetworkStats will be used for both wifi and mobile categories
+    private NetworkStats mNetworkStats;
+    private DummyExternalStatsSync mExternalStatsSync = new DummyExternalStatsSync();
+
+    MockBatteryStatsImpl() {
+        this(new MockClock());
+    }
+
+    MockBatteryStatsImpl(Clock clock) {
+        this(clock, null);
+    }
+
+    MockBatteryStatsImpl(Clock clock, File historyDirectory) {
+        super(clock, historyDirectory);
+        initTimersAndCounters();
+        setMaxHistoryBuffer(128 * 1024);
+
+        setExternalStatsSyncLocked(mExternalStatsSync);
+        informThatAllExternalStatsAreFlushed();
+
+        // A no-op handler.
+        mHandler = new Handler(Looper.getMainLooper()) {
+        };
+
+        mCpuUidFreqTimeReader = mock(KernelCpuUidFreqTimeReader.class);
+        mKernelWakelockReader = null;
+    }
+
+    public void initMeasuredEnergyStats(String[] customBucketNames) {
+        final boolean[] supportedStandardBuckets =
+                new boolean[EnergyConsumerStats.NUMBER_STANDARD_POWER_BUCKETS];
+        Arrays.fill(supportedStandardBuckets, true);
+        synchronized (this) {
+            mEnergyConsumerStatsConfig = new EnergyConsumerStats.Config(supportedStandardBuckets,
+                    customBucketNames, new int[0], new String[]{""});
+            mGlobalEnergyConsumerStats = new EnergyConsumerStats(mEnergyConsumerStatsConfig);
+        }
+    }
+
+    public TimeBase getOnBatteryTimeBase() {
+        return mOnBatteryTimeBase;
+    }
+
+    public TimeBase getOnBatteryScreenOffTimeBase() {
+        return mOnBatteryScreenOffTimeBase;
+    }
+
+    public int getScreenState() {
+        return mScreenState;
+    }
+
+    public Queue<UidToRemove> getPendingRemovedUids() {
+        return mPendingRemovedUids;
+    }
+
+    public boolean isOnBattery() {
+        return mForceOnBattery ? true : super.isOnBattery();
+    }
+
+    public TimeBase getOnBatteryBackgroundTimeBase(int uid) {
+        return getUidStatsLocked(uid).mOnBatteryBackgroundTimeBase;
+    }
+
+    public TimeBase getOnBatteryScreenOffBackgroundTimeBase(int uid) {
+        return getUidStatsLocked(uid).mOnBatteryScreenOffBackgroundTimeBase;
+    }
+
+    public long getMobileRadioPowerStateUpdateRateLimit() {
+        return MOBILE_RADIO_POWER_STATE_UPDATE_FREQ_MS;
+    }
+
+    public MockBatteryStatsImpl setNetworkStats(NetworkStats networkStats) {
+        mNetworkStats = networkStats;
+        return this;
+    }
+
+    @Override
+    protected NetworkStats readMobileNetworkStatsLocked(
+            @NonNull NetworkStatsManager networkStatsManager) {
+        return mNetworkStats;
+    }
+
+    @Override
+    protected NetworkStats readWifiNetworkStatsLocked(
+            @NonNull NetworkStatsManager networkStatsManager) {
+        return mNetworkStats;
+    }
+
+    public MockBatteryStatsImpl setPowerProfile(PowerProfile powerProfile) {
+        mPowerProfile = powerProfile;
+        setTestCpuScalingPolicies();
+        return this;
+    }
+
+    public MockBatteryStatsImpl setTestCpuScalingPolicies() {
+        SparseArray<int[]> cpusByPolicy = new SparseArray<>();
+        cpusByPolicy.put(0, new int[]{0});
+        SparseArray<int[]> freqsByPolicy = new SparseArray<>();
+        freqsByPolicy.put(0, new int[]{100, 200, 300});
+
+        setCpuScalingPolicies(new CpuScalingPolicies(freqsByPolicy, freqsByPolicy));
+        return this;
+    }
+
+    public MockBatteryStatsImpl setCpuScalingPolicies(CpuScalingPolicies cpuScalingPolicies) {
+        mCpuScalingPolicies = cpuScalingPolicies;
+        return this;
+    }
+
+    public MockBatteryStatsImpl setKernelCpuUidFreqTimeReader(KernelCpuUidFreqTimeReader reader) {
+        mCpuUidFreqTimeReader = reader;
+        return this;
+    }
+
+    public MockBatteryStatsImpl setKernelCpuUidActiveTimeReader(
+            KernelCpuUidActiveTimeReader reader) {
+        mCpuUidActiveTimeReader = reader;
+        return this;
+    }
+
+    public MockBatteryStatsImpl setKernelCpuUidClusterTimeReader(
+            KernelCpuUidClusterTimeReader reader) {
+        mCpuUidClusterTimeReader = reader;
+        return this;
+    }
+
+    public MockBatteryStatsImpl setKernelCpuUidUserSysTimeReader(
+            KernelCpuUidUserSysTimeReader reader) {
+        mCpuUidUserSysTimeReader = reader;
+        return this;
+    }
+
+    public MockBatteryStatsImpl setKernelSingleUidTimeReader(KernelSingleUidTimeReader reader) {
+        mKernelSingleUidTimeReader = reader;
+        return this;
+    }
+
+    public MockBatteryStatsImpl setKernelCpuSpeedReaders(KernelCpuSpeedReader[] readers) {
+        mKernelCpuSpeedReaders = readers;
+        return this;
+    }
+
+    public MockBatteryStatsImpl setKernelWakelockReader(KernelWakelockReader reader) {
+        mKernelWakelockReader = reader;
+        return this;
+    }
+
+    public MockBatteryStatsImpl setSystemServerCpuThreadReader(
+            SystemServerCpuThreadReader systemServerCpuThreadReader) {
+        mSystemServerCpuThreadReader = systemServerCpuThreadReader;
+        return this;
+    }
+
+    public MockBatteryStatsImpl setUserInfoProvider(UserInfoProvider provider) {
+        mUserInfoProvider = provider;
+        return this;
+    }
+
+    public MockBatteryStatsImpl setPartialTimers(ArrayList<StopwatchTimer> partialTimers) {
+        mPartialTimers = partialTimers;
+        return this;
+    }
+
+    public MockBatteryStatsImpl setLastPartialTimers(ArrayList<StopwatchTimer> lastPartialTimers) {
+        mLastPartialTimers = lastPartialTimers;
+        return this;
+    }
+
+    public MockBatteryStatsImpl setOnBatteryInternal(boolean onBatteryInternal) {
+        mOnBatteryInternal = onBatteryInternal;
+        return this;
+    }
+
+    @GuardedBy("this")
+    public MockBatteryStatsImpl setMaxHistoryFiles(int maxHistoryFiles) {
+        mConstants.MAX_HISTORY_FILES = maxHistoryFiles;
+        mConstants.onChange();
+        return this;
+    }
+
+    @GuardedBy("this")
+    public MockBatteryStatsImpl setMaxHistoryBuffer(int maxHistoryBuffer) {
+        mConstants.MAX_HISTORY_BUFFER = maxHistoryBuffer;
+        mConstants.onChange();
+        return this;
+    }
+
+    @GuardedBy("this")
+    public MockBatteryStatsImpl setPerUidModemModel(int perUidModemModel) {
+        mConstants.PER_UID_MODEM_MODEL = perUidModemModel;
+        mConstants.onChange();
+        return this;
+    }
+
+    public int getAndClearExternalStatsSyncFlags() {
+        final int flags = mExternalStatsSync.flags;
+        mExternalStatsSync.flags = 0;
+        return flags;
+    }
+
+    public void setDummyExternalStatsSync(DummyExternalStatsSync externalStatsSync) {
+        mExternalStatsSync = externalStatsSync;
+        setExternalStatsSyncLocked(mExternalStatsSync);
+    }
+
+    @Override
+    public void writeSyncLocked() {
+    }
+
+    public static class DummyExternalStatsSync implements ExternalStatsSync {
+        public int flags = 0;
+
+        @Override
+        public Future<?> scheduleSync(String reason, int flags) {
+            return null;
+        }
+
+        @Override
+        public Future<?> scheduleCleanupDueToRemovedUser(int userId) {
+            return null;
+        }
+
+        @Override
+        public Future<?> scheduleCpuSyncDueToRemovedUid(int uid) {
+            return null;
+        }
+
+        @Override
+        public Future<?> scheduleSyncDueToScreenStateChange(int flag, boolean onBattery,
+                boolean onBatteryScreenOff, int screenState, int[] perDisplayScreenStates) {
+            flags |= flag;
+            return null;
+        }
+
+        @Override
+        public Future<?> scheduleCpuSyncDueToWakelockChange(long delayMillis) {
+            return null;
+        }
+
+        @Override
+        public void cancelCpuSyncDueToWakelockChange() {
+        }
+
+        @Override
+        public Future<?> scheduleSyncDueToBatteryLevelChange(long delayMillis) {
+            return null;
+        }
+
+        @Override
+        public void scheduleSyncDueToProcessStateChange(int flags, long delayMillis) {
+        }
+    }
+}
+
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/MockClock.java b/services/tests/powerstatstests/src/com/android/server/power/stats/MockClock.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/MockClock.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/MockClock.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/OWNERS b/services/tests/powerstatstests/src/com/android/server/power/stats/OWNERS
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/OWNERS
rename to services/tests/powerstatstests/src/com/android/server/power/stats/OWNERS
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/ScreenPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/ScreenPowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/ScreenPowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/ScreenPowerCalculatorTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/SensorPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/SensorPowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/SensorPowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/SensorPowerCalculatorTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/SystemServerCpuThreadReaderTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/SystemServerCpuThreadReaderTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/SystemServerCpuThreadReaderTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/SystemServerCpuThreadReaderTest.java
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/SystemServicePowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/SystemServicePowerCalculatorTest.java
new file mode 100644
index 0000000..4dae2d5
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/SystemServicePowerCalculatorTest.java
@@ -0,0 +1,265 @@
+/*
+ * 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.server.power.stats;
+
+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.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.os.BatteryConsumer;
+import android.os.Binder;
+import android.os.Process;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.internal.os.BinderCallsStats;
+import com.android.internal.os.KernelCpuSpeedReader;
+import com.android.internal.os.KernelCpuUidTimeReader;
+import com.android.internal.os.KernelSingleUidTimeReader;
+import com.android.internal.os.PowerProfile;
+import com.android.internal.power.EnergyConsumerStats;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+@SuppressWarnings("GuardedBy")
+public class SystemServicePowerCalculatorTest {
+
+    private static final double PRECISION = 0.000001;
+    private static final int APP_UID1 = 100;
+    private static final int APP_UID2 = 200;
+
+    @Rule
+    public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule()
+            .setAveragePower(PowerProfile.POWER_CPU_ACTIVE, 720)
+            .setCpuScalingPolicy(0, new int[]{0, 1}, new int[]{100, 200})
+            .setCpuScalingPolicy(2, new int[]{2, 3}, new int[]{300, 400})
+            .setAveragePowerForCpuScalingPolicy(0, 360)
+            .setAveragePowerForCpuScalingPolicy(2, 480)
+            .setAveragePowerForCpuScalingStep(0, 0, 300)
+            .setAveragePowerForCpuScalingStep(0, 1, 400)
+            .setAveragePowerForCpuScalingStep(2, 0, 500)
+            .setAveragePowerForCpuScalingStep(2, 1, 600);
+
+    @Mock
+    private BatteryStatsImpl.UserInfoProvider mMockUserInfoProvider;
+    @Mock
+    private KernelCpuUidTimeReader.KernelCpuUidClusterTimeReader mMockKernelCpuUidClusterTimeReader;
+    @Mock
+    private KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader mMockCpuUidFreqTimeReader;
+    @Mock
+    private KernelCpuUidTimeReader.KernelCpuUidUserSysTimeReader mMockKernelCpuUidUserSysTimeReader;
+    @Mock
+    private KernelCpuUidTimeReader.KernelCpuUidActiveTimeReader mMockKerneCpuUidActiveTimeReader;
+    @Mock
+    private SystemServerCpuThreadReader mMockSystemServerCpuThreadReader;
+    @Mock
+    private KernelSingleUidTimeReader mMockKernelSingleUidTimeReader;
+
+    private final KernelCpuSpeedReader[] mMockKernelCpuSpeedReaders = new KernelCpuSpeedReader[]{
+            mock(KernelCpuSpeedReader.class),
+            mock(KernelCpuSpeedReader.class),
+    };
+
+    private MockBatteryStatsImpl mMockBatteryStats;
+
+    @Before
+    public void setUp() throws IOException {
+        MockitoAnnotations.initMocks(this);
+        mMockBatteryStats = mStatsRule.getBatteryStats()
+                .setUserInfoProvider(mMockUserInfoProvider)
+                .setKernelCpuSpeedReaders(mMockKernelCpuSpeedReaders)
+                .setKernelCpuUidFreqTimeReader(mMockCpuUidFreqTimeReader)
+                .setKernelCpuUidClusterTimeReader(mMockKernelCpuUidClusterTimeReader)
+                .setKernelCpuUidUserSysTimeReader(mMockKernelCpuUidUserSysTimeReader)
+                .setKernelCpuUidActiveTimeReader(mMockKerneCpuUidActiveTimeReader)
+                .setKernelSingleUidTimeReader(mMockKernelSingleUidTimeReader)
+                .setSystemServerCpuThreadReader(mMockSystemServerCpuThreadReader);
+    }
+
+    @Test
+    public void testPowerProfileBasedModel() {
+        prepareBatteryStats(null);
+
+        SystemServicePowerCalculator calculator = new SystemServicePowerCalculator(
+                mStatsRule.getCpuScalingPolicies(), mStatsRule.getPowerProfile());
+
+        mStatsRule.apply(new CpuPowerCalculator(mStatsRule.getCpuScalingPolicies(),
+                mStatsRule.getPowerProfile()), calculator);
+
+        assertThat(mStatsRule.getUidBatteryConsumer(APP_UID1)
+                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
+                .isWithin(PRECISION).of(1.888888);
+        assertThat(mStatsRule.getUidBatteryConsumer(APP_UID2)
+                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
+                .isWithin(PRECISION).of(17.0);
+        assertThat(mStatsRule.getUidBatteryConsumer(Process.SYSTEM_UID)
+                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_REATTRIBUTED_TO_OTHER_CONSUMERS))
+                .isWithin(PRECISION).of(-18.888888);
+        assertThat(mStatsRule.getDeviceBatteryConsumer()
+                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
+                .isWithin(PRECISION).of(18.888888);
+        assertThat(mStatsRule.getAppsBatteryConsumer()
+                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
+                .isWithin(PRECISION).of(18.888888);
+    }
+
+    @Test
+    public void testMeasuredEnergyBasedModel() {
+        final boolean[] supportedPowerBuckets =
+                new boolean[EnergyConsumerStats.NUMBER_STANDARD_POWER_BUCKETS];
+        supportedPowerBuckets[EnergyConsumerStats.POWER_BUCKET_CPU] = true;
+        mStatsRule.getBatteryStats()
+                .initEnergyConsumerStatsLocked(supportedPowerBuckets, new String[0]);
+
+        prepareBatteryStats(new long[]{50000000, 100000000});
+
+        SystemServicePowerCalculator calculator = new SystemServicePowerCalculator(
+                mStatsRule.getCpuScalingPolicies(), mStatsRule.getPowerProfile());
+
+        mStatsRule.apply(new CpuPowerCalculator(mStatsRule.getCpuScalingPolicies(),
+                mStatsRule.getPowerProfile()), calculator);
+
+        assertThat(mStatsRule.getUidBatteryConsumer(APP_UID1)
+                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
+                .isWithin(PRECISION).of(2.105425);
+        assertThat(mStatsRule.getUidBatteryConsumer(APP_UID2)
+                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
+                .isWithin(PRECISION).of(18.948825);
+        assertThat(mStatsRule.getUidBatteryConsumer(Process.SYSTEM_UID)
+                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_REATTRIBUTED_TO_OTHER_CONSUMERS))
+                .isWithin(PRECISION).of(-21.054250);
+        assertThat(mStatsRule.getDeviceBatteryConsumer()
+                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
+                .isWithin(PRECISION).of(21.054250);
+        assertThat(mStatsRule.getAppsBatteryConsumer()
+                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
+                .isWithin(PRECISION).of(21.054250);
+    }
+
+    private void prepareBatteryStats(long[] clusterChargesUc) {
+        when(mMockUserInfoProvider.exists(anyInt())).thenReturn(true);
+
+        when(mMockKernelCpuSpeedReaders[0].readDelta()).thenReturn(new long[]{1000, 2000});
+        when(mMockKernelCpuSpeedReaders[1].readDelta()).thenReturn(new long[]{3000, 4000});
+
+        when(mMockCpuUidFreqTimeReader.perClusterTimesAvailable()).thenReturn(false);
+
+        mStatsRule.setTime(1000, 1000);
+
+        // Initialize active CPU time
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<Long> callback = invocation.getArgument(0);
+            callback.onUidCpuTime(APP_UID1, 1000L);
+            callback.onUidCpuTime(APP_UID2, 3000L);
+            callback.onUidCpuTime(Process.SYSTEM_UID, 5000L);
+            return null;
+        }).when(mMockKerneCpuUidActiveTimeReader).readAbsolute(any());
+
+        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, null);
+
+        mStatsRule.setTime(2000, 2000);
+
+        // User/System CPU time in microseconds
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
+            callback.onUidCpuTime(APP_UID1, new long[]{1_000_000, 2_000_000});
+            callback.onUidCpuTime(APP_UID2, new long[]{3_000_000, 4_000_000});
+            callback.onUidCpuTime(Process.SYSTEM_UID, new long[]{60_000_000, 80_000_000});
+            return null;
+        }).when(mMockKernelCpuUidUserSysTimeReader).readDelta(anyBoolean(), any());
+
+        // Active CPU time in milliseconds
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<Long> callback = invocation.getArgument(0);
+            callback.onUidCpuTime(APP_UID1, 2111L);
+            callback.onUidCpuTime(APP_UID2, 6333L);
+            callback.onUidCpuTime(Process.SYSTEM_UID, 15000L);
+            return null;
+        }).when(mMockKerneCpuUidActiveTimeReader).readAbsolute(any());
+
+        // Per-cluster CPU time in milliseconds
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
+            callback.onUidCpuTime(APP_UID1, new long[]{1111, 2222});
+            callback.onUidCpuTime(APP_UID2, new long[]{3333, 4444});
+            callback.onUidCpuTime(Process.SYSTEM_UID, new long[]{50_000, 80_000});
+            return null;
+        }).when(mMockKernelCpuUidClusterTimeReader).readDelta(anyBoolean(), any());
+
+        when(mMockKernelSingleUidTimeReader.singleUidCpuTimesAvailable()).thenReturn(true);
+
+        // Per-frequency CPU time
+        doAnswer(invocation -> {
+            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
+            callback.onUidCpuTime(APP_UID1, new long[]{1100, 11, 2200, 22});
+            callback.onUidCpuTime(APP_UID2, new long[]{3300, 33, 4400, 44});
+            callback.onUidCpuTime(Process.SYSTEM_UID, new long[]{20_000, 30_000, 40_000, 40_000});
+            return null;
+        }).when(mMockCpuUidFreqTimeReader).readDelta(anyBoolean(), any());
+
+        // System service CPU time
+        final SystemServerCpuThreadReader.SystemServiceCpuThreadTimes threadTimes =
+                new SystemServerCpuThreadReader.SystemServiceCpuThreadTimes();
+        threadTimes.binderThreadCpuTimesUs =
+                new long[]{20_000_000, 30_000_000, 40_000_000, 50_000_000};
+
+        when(mMockSystemServerCpuThreadReader.readDelta()).thenReturn(threadTimes);
+
+        int transactionCode = 42;
+
+        Collection<BinderCallsStats.CallStat> callStats = new ArrayList<>();
+        BinderCallsStats.CallStat stat1 = new BinderCallsStats.CallStat(APP_UID1,
+                Binder.class, transactionCode, true /*screenInteractive */);
+        stat1.incrementalCallCount = 100;
+        stat1.recordedCallCount = 100;
+        stat1.cpuTimeMicros = 1_000_000;
+        callStats.add(stat1);
+
+        mMockBatteryStats.noteBinderCallStats(APP_UID1, 100, callStats);
+
+        callStats.clear();
+        BinderCallsStats.CallStat stat2 = new BinderCallsStats.CallStat(APP_UID2,
+                Binder.class, transactionCode, true /*screenInteractive */);
+        stat2.incrementalCallCount = 100;
+        stat2.recordedCallCount = 100;
+        stat2.cpuTimeMicros = 9_000_000;
+        callStats.add(stat2);
+
+        mMockBatteryStats.noteBinderCallStats(APP_UID2, 100, callStats);
+
+        mMockBatteryStats.updateCpuTimeLocked(true, true, clusterChargesUc);
+
+        mMockBatteryStats.prepareForDumpLocked();
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/UserPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/UserPowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/UserPowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/UserPowerCalculatorTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/VideoPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/VideoPowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/VideoPowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/VideoPowerCalculatorTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/WakelockPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/WakelockPowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/WakelockPowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/WakelockPowerCalculatorTest.java
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/WifiPowerCalculatorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerCalculatorTest.java
similarity index 100%
rename from services/tests/servicestests/src/com/android/server/power/stats/WifiPowerCalculatorTest.java
rename to services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerCalculatorTest.java
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/wakeups/CpuWakeupStatsTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/wakeups/CpuWakeupStatsTest.java
new file mode 100644
index 0000000..0dc836b
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/wakeups/CpuWakeupStatsTest.java
@@ -0,0 +1,499 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.wakeups;
+
+import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_ALARM;
+import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_CELLULAR_DATA;
+import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_SENSOR;
+import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER;
+import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_UNKNOWN;
+import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_WIFI;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.os.Handler;
+import android.util.IntArray;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.frameworks.powerstatstests.R;
+import com.android.server.power.stats.wakeups.CpuWakeupStats.Wakeup;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.ThreadLocalRandom;
+
+@RunWith(AndroidJUnit4.class)
+public class CpuWakeupStatsTest {
+    private static final String KERNEL_REASON_ALARM_IRQ = "120 test.alarm.device";
+    private static final String KERNEL_REASON_WIFI_IRQ = "130 test.wifi.device";
+    private static final String KERNEL_REASON_SOUND_TRIGGER_IRQ = "129 test.sound_trigger.device";
+    private static final String KERNEL_REASON_SENSOR_IRQ = "15 test.sensor.device";
+    private static final String KERNEL_REASON_CELLULAR_DATA_IRQ = "18 test.cellular_data.device";
+    private static final String KERNEL_REASON_UNKNOWN_IRQ = "140 test.unknown.device";
+    private static final String KERNEL_REASON_UNKNOWN_FORMAT = "free-form-reason test.alarm.device";
+    private static final String KERNEL_REASON_ALARM_ABNORMAL = "-1 test.alarm.device";
+    private static final String KERNEL_REASON_ABORT = "Abort: due to test.alarm.device";
+
+    private static final int TEST_UID_1 = 13239823;
+    private static final int TEST_UID_2 = 25268423;
+    private static final int TEST_UID_3 = 92261423;
+    private static final int TEST_UID_4 = 56926423;
+    private static final int TEST_UID_5 = 76421423;
+
+    private static final int TEST_PROC_STATE_1 = 72331;
+    private static final int TEST_PROC_STATE_2 = 792351;
+    private static final int TEST_PROC_STATE_3 = 138831;
+    private static final int TEST_PROC_STATE_4 = 23231;
+    private static final int TEST_PROC_STATE_5 = 42;
+
+    private static final Context sContext = InstrumentationRegistry.getTargetContext();
+    private final Handler mHandler = Mockito.mock(Handler.class);
+    private final ThreadLocalRandom mRandom = ThreadLocalRandom.current();
+
+    private void populateDefaultProcStates(CpuWakeupStats obj) {
+        obj.mUidProcStates.put(TEST_UID_1, TEST_PROC_STATE_1);
+        obj.mUidProcStates.put(TEST_UID_2, TEST_PROC_STATE_2);
+        obj.mUidProcStates.put(TEST_UID_3, TEST_PROC_STATE_3);
+        obj.mUidProcStates.put(TEST_UID_4, TEST_PROC_STATE_4);
+        obj.mUidProcStates.put(TEST_UID_5, TEST_PROC_STATE_5);
+    }
+
+    @Test
+    public void removesOldWakeups() {
+        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
+        final long retention = obj.mConfig.WAKEUP_STATS_RETENTION_MS;
+
+        final Set<Long> timestamps = new HashSet<>();
+        final long firstWakeup = 453192;
+
+        // Reasons do not matter for this test, as long as they map to known subsystems
+        obj.noteWakeupTimeAndReason(firstWakeup, 32, KERNEL_REASON_ALARM_IRQ);
+        timestamps.add(firstWakeup);
+        for (int i = 1; i < 1000; i++) {
+            final long delta = mRandom.nextLong(retention);
+            if (timestamps.add(firstWakeup + delta)) {
+                obj.noteWakeupTimeAndReason(firstWakeup + delta, i, KERNEL_REASON_SENSOR_IRQ);
+            }
+        }
+        assertThat(obj.mWakeupEvents.size()).isEqualTo(timestamps.size());
+
+        obj.noteWakeupTimeAndReason(firstWakeup + retention, 231, KERNEL_REASON_WIFI_IRQ);
+        assertThat(obj.mWakeupEvents.size()).isEqualTo(timestamps.size());
+
+        for (int i = 0; i < 100; i++) {
+            final long now = mRandom.nextLong(retention + 1, 100 * retention);
+            obj.noteWakeupTimeAndReason(now, i, KERNEL_REASON_SOUND_TRIGGER_IRQ);
+            assertThat(obj.mWakeupEvents.lastIndexOnOrBefore(now - retention)).isLessThan(0);
+        }
+    }
+
+    @Test
+    public void irqAttributionAllCombinations() {
+        final int[] subsystems = new int[] {
+                CPU_WAKEUP_SUBSYSTEM_ALARM,
+                CPU_WAKEUP_SUBSYSTEM_WIFI,
+                CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER,
+                CPU_WAKEUP_SUBSYSTEM_SENSOR,
+                CPU_WAKEUP_SUBSYSTEM_CELLULAR_DATA,
+        };
+
+        final String[] kernelReasons = new String[] {
+                KERNEL_REASON_ALARM_IRQ,
+                KERNEL_REASON_WIFI_IRQ,
+                KERNEL_REASON_SOUND_TRIGGER_IRQ,
+                KERNEL_REASON_SENSOR_IRQ,
+                KERNEL_REASON_CELLULAR_DATA_IRQ,
+        };
+
+        final int[] uids = new int[] {
+                TEST_UID_2, TEST_UID_3, TEST_UID_4, TEST_UID_1, TEST_UID_5
+        };
+
+        final int[] procStates = new int[] {
+                TEST_PROC_STATE_2,
+                TEST_PROC_STATE_3,
+                TEST_PROC_STATE_4,
+                TEST_PROC_STATE_1,
+                TEST_PROC_STATE_5
+        };
+
+        final int total = subsystems.length;
+        assertThat(kernelReasons.length).isEqualTo(total);
+        assertThat(uids.length).isEqualTo(total);
+        assertThat(procStates.length).isEqualTo(total);
+
+        for (int mask = 1; mask < (1 << total); mask++) {
+            final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3,
+                    mHandler);
+            populateDefaultProcStates(obj);
+
+            final long wakeupTime = mRandom.nextLong(123456);
+
+            String combinedKernelReason = null;
+            for (int i = 0; i < total; i++) {
+                if ((mask & (1 << i)) != 0) {
+                    combinedKernelReason = (combinedKernelReason == null)
+                            ? kernelReasons[i]
+                            : String.join(":", combinedKernelReason, kernelReasons[i]);
+                }
+
+                obj.noteWakingActivity(subsystems[i], wakeupTime + 2, uids[i]);
+            }
+            obj.noteWakeupTimeAndReason(wakeupTime, 1, combinedKernelReason);
+
+            assertThat(obj.mWakeupAttribution.size()).isEqualTo(1);
+
+            final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
+            assertThat(attribution.size()).isEqualTo(Integer.bitCount(mask));
+
+            for (int i = 0; i < total; i++) {
+                if ((mask & (1 << i)) == 0) {
+                    assertThat(attribution.contains(subsystems[i])).isFalse();
+                    continue;
+                }
+                assertThat(attribution.contains(subsystems[i])).isTrue();
+                assertThat(attribution.get(subsystems[i]).get(uids[i])).isEqualTo(procStates[i]);
+
+                for (int j = 0; j < total; j++) {
+                    if (i == j) {
+                        continue;
+                    }
+                    assertThat(attribution.get(subsystems[i]).indexOfKey(uids[j])).isLessThan(0);
+                }
+            }
+        }
+    }
+
+    @Test
+    public void alarmIrqAttributionSolo() {
+        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
+        final long wakeupTime = 12423121;
+
+        populateDefaultProcStates(obj);
+
+        obj.noteWakeupTimeAndReason(wakeupTime, 1, KERNEL_REASON_ALARM_IRQ);
+
+        // Outside the window, so should be ignored.
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM,
+                wakeupTime - obj.mConfig.WAKEUP_MATCHING_WINDOW_MS - 1, TEST_UID_1);
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM,
+                wakeupTime + obj.mConfig.WAKEUP_MATCHING_WINDOW_MS + 1, TEST_UID_2);
+        // Should be attributed
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime + 5, TEST_UID_3, TEST_UID_5);
+
+        final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
+        assertThat(attribution).isNotNull();
+        assertThat(attribution.size()).isEqualTo(1);
+        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_ALARM)).isTrue();
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_1)).isLessThan(
+                0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_2)).isLessThan(
+                0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_3)).isEqualTo(
+                TEST_PROC_STATE_3);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_4)).isLessThan(
+                0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_5)).isEqualTo(
+                TEST_PROC_STATE_5);
+    }
+
+    @Test
+    public void soundTriggerIrqAttributionSolo() {
+        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
+        final long wakeupTime = 1247121;
+
+        populateDefaultProcStates(obj);
+
+        obj.noteWakeupTimeAndReason(wakeupTime, 1, KERNEL_REASON_SOUND_TRIGGER_IRQ);
+
+        // Outside the window, so should be ignored.
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER,
+                wakeupTime - obj.mConfig.WAKEUP_MATCHING_WINDOW_MS - 1, TEST_UID_1);
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER,
+                wakeupTime + obj.mConfig.WAKEUP_MATCHING_WINDOW_MS + 1, TEST_UID_2);
+        // Should be attributed
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER, wakeupTime + 5, TEST_UID_3,
+                TEST_UID_5);
+
+        final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
+        assertThat(attribution).isNotNull();
+        assertThat(attribution.size()).isEqualTo(1);
+        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER)).isTrue();
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).indexOfKey(
+                TEST_UID_1)).isLessThan(0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).indexOfKey(
+                TEST_UID_2)).isLessThan(0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).get(TEST_UID_3)).isEqualTo(
+                TEST_PROC_STATE_3);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).indexOfKey(
+                TEST_UID_4)).isLessThan(0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).get(TEST_UID_5)).isEqualTo(
+                TEST_PROC_STATE_5);
+    }
+
+    @Test
+    public void wifiIrqAttributionSolo() {
+        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
+        final long wakeupTime = 12423121;
+
+        populateDefaultProcStates(obj);
+
+        obj.noteWakeupTimeAndReason(wakeupTime, 1, KERNEL_REASON_WIFI_IRQ);
+
+        // Outside the window, so should be ignored.
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI,
+                wakeupTime - obj.mConfig.WAKEUP_MATCHING_WINDOW_MS - 1, TEST_UID_1);
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI,
+                wakeupTime + obj.mConfig.WAKEUP_MATCHING_WINDOW_MS + 1, TEST_UID_2);
+        // Should be attributed
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime + 3, TEST_UID_4, TEST_UID_5);
+
+        final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
+        assertThat(attribution).isNotNull();
+        assertThat(attribution.size()).isEqualTo(1);
+        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_WIFI)).isTrue();
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).indexOfKey(TEST_UID_1)).isLessThan(0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).indexOfKey(TEST_UID_2)).isLessThan(0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).indexOfKey(TEST_UID_3)).isLessThan(0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_4)).isEqualTo(
+                TEST_PROC_STATE_4);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_5)).isEqualTo(
+                TEST_PROC_STATE_5);
+    }
+
+    @Test
+    public void alarmAndWifiIrqAttribution() {
+        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
+        final long wakeupTime = 92123210;
+
+        populateDefaultProcStates(obj);
+
+        obj.noteWakeupTimeAndReason(wakeupTime, 4,
+                KERNEL_REASON_WIFI_IRQ + ":" + KERNEL_REASON_ALARM_IRQ);
+
+        // Alarm activity
+        // Outside the window, so should be ignored.
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM,
+                wakeupTime - obj.mConfig.WAKEUP_MATCHING_WINDOW_MS - 1, TEST_UID_1);
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM,
+                wakeupTime + obj.mConfig.WAKEUP_MATCHING_WINDOW_MS + 1, TEST_UID_2);
+        // Should be attributed
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime + 5, TEST_UID_3);
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime - 3, TEST_UID_4,
+                TEST_UID_5);
+
+        // Wifi activity
+        // Outside the window, so should be ignored.
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI,
+                wakeupTime - obj.mConfig.WAKEUP_MATCHING_WINDOW_MS - 1, TEST_UID_4);
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI,
+                wakeupTime + obj.mConfig.WAKEUP_MATCHING_WINDOW_MS + 1, TEST_UID_3);
+        // Should be attributed
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime + 2, TEST_UID_1);
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime - 1, TEST_UID_2,
+                TEST_UID_5);
+
+        final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
+        assertThat(attribution).isNotNull();
+        assertThat(attribution.size()).isEqualTo(2);
+
+        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_ALARM)).isTrue();
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_1)).isLessThan(
+                0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_2)).isLessThan(
+                0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_3)).isEqualTo(
+                TEST_PROC_STATE_3);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_4)).isEqualTo(
+                TEST_PROC_STATE_4);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_5)).isEqualTo(
+                TEST_PROC_STATE_5);
+
+        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_WIFI)).isTrue();
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_1)).isEqualTo(
+                TEST_PROC_STATE_1);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_2)).isEqualTo(
+                TEST_PROC_STATE_2);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).indexOfKey(TEST_UID_3)).isLessThan(0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).indexOfKey(TEST_UID_4)).isLessThan(0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_5)).isEqualTo(
+                TEST_PROC_STATE_5);
+    }
+
+    @Test
+    public void unknownIrqSoloIgnored() {
+        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
+        final long wakeupTime = 92123410;
+
+        obj.noteWakeupTimeAndReason(wakeupTime, 24, KERNEL_REASON_UNKNOWN_IRQ);
+
+        assertThat(obj.mWakeupEvents.size()).isEqualTo(0);
+
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime + 5, TEST_UID_3);
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime - 3, TEST_UID_4,
+                TEST_UID_5);
+
+        // Any nearby activity should not end up in the attribution map.
+        assertThat(obj.mWakeupAttribution.size()).isEqualTo(0);
+    }
+
+    @Test
+    public void unknownAndWifiAttribution() {
+        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
+        final long wakeupTime = 92123410;
+
+        populateDefaultProcStates(obj);
+
+        obj.noteWakeupTimeAndReason(wakeupTime, 24,
+                KERNEL_REASON_UNKNOWN_IRQ + ":" + KERNEL_REASON_WIFI_IRQ);
+
+        // Wifi activity
+        // Outside the window, so should be ignored.
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI,
+                wakeupTime - obj.mConfig.WAKEUP_MATCHING_WINDOW_MS - 1, TEST_UID_4);
+        // Should be attributed
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime + 2, TEST_UID_1);
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime - 1, TEST_UID_3,
+                TEST_UID_5);
+
+        // Unrelated, should be ignored.
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime + 5, TEST_UID_3);
+
+        final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
+        assertThat(attribution).isNotNull();
+        assertThat(attribution.size()).isEqualTo(2);
+        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_WIFI)).isTrue();
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_1)).isEqualTo(
+                TEST_PROC_STATE_1);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).indexOfKey(TEST_UID_2)).isLessThan(0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_3)).isEqualTo(
+                TEST_PROC_STATE_3);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).indexOfKey(TEST_UID_4)).isLessThan(0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_5)).isEqualTo(
+                TEST_PROC_STATE_5);
+        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_UNKNOWN)).isTrue();
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_UNKNOWN)).isNull();
+        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_ALARM)).isFalse();
+    }
+
+    @Test
+    public void unknownFormatWakeupIgnored() {
+        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
+        final long wakeupTime = 72123210;
+
+        obj.noteWakeupTimeAndReason(wakeupTime, 34, KERNEL_REASON_UNKNOWN_FORMAT);
+
+        // Should be ignored as this type of wakeup is not known.
+        assertThat(obj.mWakeupEvents.size()).isEqualTo(0);
+
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime + 5, TEST_UID_3);
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime - 3, TEST_UID_4);
+
+        // Any nearby activity should not end up in the attribution map.
+        assertThat(obj.mWakeupAttribution.size()).isEqualTo(0);
+    }
+
+    @Test
+    public void abnormalAlarmAttribution() {
+        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
+        populateDefaultProcStates(obj);
+
+        long wakeupTime = 970934;
+        obj.noteWakeupTimeAndReason(wakeupTime, 34, KERNEL_REASON_ALARM_ABNORMAL);
+
+        assertThat(obj.mWakeupEvents.size()).isEqualTo(1);
+        assertThat(obj.mWakeupEvents.valueAt(0).mType).isEqualTo(Wakeup.TYPE_ABNORMAL);
+
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime + 5, TEST_UID_3);
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime - 3, TEST_UID_4);
+
+        final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
+        assertThat(attribution.size()).isEqualTo(1);
+        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_ALARM)).isTrue();
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_1)).isLessThan(
+                0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_2)).isLessThan(
+                0);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_3)).isEqualTo(
+                TEST_PROC_STATE_3);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_4)).isEqualTo(
+                TEST_PROC_STATE_4);
+        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_5)).isLessThan(
+                0);
+    }
+
+    @Test
+    public void abortIgnored() {
+        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
+
+        long wakeupTime = 883124;
+        obj.noteWakeupTimeAndReason(wakeupTime, 3, KERNEL_REASON_ABORT);
+
+        // Should be ignored as this type of wakeup is unsupported.
+        assertThat(obj.mWakeupEvents.size()).isEqualTo(0);
+
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime + 2, TEST_UID_1, TEST_UID_4);
+        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime - 5, TEST_UID_3);
+
+        // Any nearby activity should not end up in the attribution map.
+        assertThat(obj.mWakeupAttribution.size()).isEqualTo(0);
+    }
+
+    @Test
+    public void uidProcStateBookkeeping() {
+        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
+
+        assertThat(obj.mUidProcStates.size()).isEqualTo(0);
+
+        final IntArray uids = new IntArray(87);
+        for (int i = 0; i < 87; i++) {
+            final int uid = mRandom.nextInt(1 << 20);
+            if (uids.indexOf(uid) < 0) {
+                uids.add(uid);
+            }
+        }
+
+        for (int i = 0; i < uids.size(); i++) {
+            final int uid = uids.get(i);
+            for (int j = 0; j < 43; j++) {
+                final int procState = mRandom.nextInt(1 << 15);
+                obj.noteUidProcessState(uid, procState);
+                assertThat(obj.mUidProcStates.get(uid)).isEqualTo(procState);
+            }
+            assertThat(obj.mUidProcStates.size()).isEqualTo(i + 1);
+        }
+
+        for (int i = 0; i < uids.size(); i++) {
+            obj.onUidRemoved(uids.get(i));
+            assertThat(obj.mUidProcStates.indexOfKey(uids.get(i))).isLessThan(0);
+        }
+
+        assertThat(obj.mUidProcStates.size()).isEqualTo(0);
+
+        obj.onUidRemoved(213);
+        assertThat(obj.mUidProcStates.size()).isEqualTo(0);
+    }
+}
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/wakeups/IrqDeviceMapTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/wakeups/IrqDeviceMapTest.java
new file mode 100644
index 0000000..9af2884
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/wakeups/IrqDeviceMapTest.java
@@ -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.server.power.stats.wakeups;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.frameworks.powerstatstests.R;
+import com.android.internal.util.CollectionUtils;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+public class IrqDeviceMapTest {
+    private static final String TEST_DEVICE_1 = "test.device.1";
+    private static final String TEST_DEVICE_2 = "test.device.2";
+    private static final String TEST_DEVICE_3 = "test.device.3";
+    private static final String TEST_DEVICE_4 = "test.device.4";
+
+    private static final String TEST_SUBSYSTEM_1 = "test.subsystem.1";
+    private static final String TEST_SUBSYSTEM_2 = "test.subsystem.2";
+    private static final String TEST_SUBSYSTEM_3 = "test.subsystem.3";
+    private static final String TEST_SUBSYSTEM_4 = "test.subsystem.4";
+    private static final String TEST_SUBSYSTEM_5 = "test.subsystem.5";
+
+    private static final Context sContext = InstrumentationRegistry.getTargetContext();
+
+    @Test
+    public void cachesInstancesPerXml() {
+        IrqDeviceMap irqDeviceMap1 = IrqDeviceMap.getInstance(sContext, R.xml.irq_device_map_1);
+        IrqDeviceMap irqDeviceMap2 = IrqDeviceMap.getInstance(sContext, R.xml.irq_device_map_1);
+        assertThat(irqDeviceMap1).isSameInstanceAs(irqDeviceMap2);
+
+        irqDeviceMap2 = IrqDeviceMap.getInstance(sContext, R.xml.irq_device_map_2);
+        assertThat(irqDeviceMap1).isNotSameInstanceAs(irqDeviceMap2);
+
+        irqDeviceMap1 = IrqDeviceMap.getInstance(sContext, R.xml.irq_device_map_2);
+        assertThat(irqDeviceMap1).isSameInstanceAs(irqDeviceMap2);
+    }
+
+    @Test
+    public void simpleXml() {
+        IrqDeviceMap deviceMap = IrqDeviceMap.getInstance(sContext, R.xml.irq_device_map_1);
+
+        List<String> subsystems = deviceMap.getSubsystemsForDevice(TEST_DEVICE_1);
+        assertThat(subsystems).hasSize(2);
+        // No specific order is required.
+        assertThat(subsystems).containsExactly(TEST_SUBSYSTEM_2, TEST_SUBSYSTEM_1);
+
+        subsystems = deviceMap.getSubsystemsForDevice(TEST_DEVICE_2);
+        assertThat(subsystems).hasSize(2);
+        // No specific order is required.
+        assertThat(subsystems).containsExactly(TEST_SUBSYSTEM_2, TEST_SUBSYSTEM_3);
+    }
+
+    @Test
+    public void complexXml() {
+        IrqDeviceMap deviceMap = IrqDeviceMap.getInstance(sContext, R.xml.irq_device_map_2);
+
+        List<String> subsystems = deviceMap.getSubsystemsForDevice(TEST_DEVICE_1);
+        assertThat(CollectionUtils.isEmpty(subsystems)).isTrue();
+
+        subsystems = deviceMap.getSubsystemsForDevice(TEST_DEVICE_2);
+        assertThat(subsystems).hasSize(3);
+        // No specific order is required.
+        assertThat(subsystems).containsExactly(TEST_SUBSYSTEM_3, TEST_SUBSYSTEM_4,
+                TEST_SUBSYSTEM_5);
+
+        subsystems = deviceMap.getSubsystemsForDevice(TEST_DEVICE_3);
+        assertThat(CollectionUtils.isEmpty(subsystems)).isTrue();
+
+        subsystems = deviceMap.getSubsystemsForDevice(TEST_DEVICE_4);
+        assertThat(subsystems).hasSize(2);
+        // No specific order is required.
+        assertThat(subsystems).containsExactly(TEST_SUBSYSTEM_4, TEST_SUBSYSTEM_1);
+    }
+}
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/wakeups/WakingActivityHistoryTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/wakeups/WakingActivityHistoryTest.java
new file mode 100644
index 0000000..99bc25a
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/wakeups/WakingActivityHistoryTest.java
@@ -0,0 +1,273 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.power.stats.wakeups;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.util.LongSparseArray;
+import android.util.SparseIntArray;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.server.power.stats.wakeups.CpuWakeupStats.WakingActivityHistory;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.ThreadLocalRandom;
+
+@RunWith(AndroidJUnit4.class)
+public class WakingActivityHistoryTest {
+    private volatile long mTestRetention = 54;
+
+    private static boolean areSame(SparseIntArray a, SparseIntArray b) {
+        if (a == b) {
+            return true;
+        }
+        if (a == null || b == null) {
+            return false;
+        }
+        final int lenA = a.size();
+        if (b.size() != lenA) {
+            return false;
+        }
+        for (int i = 0; i < lenA; i++) {
+            if (a.keyAt(i) != b.keyAt(i)) {
+                return false;
+            }
+            if (a.valueAt(i) != b.valueAt(i)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Test
+    public void recordActivityAppendsUids() {
+        final WakingActivityHistory history = new WakingActivityHistory(() -> Long.MAX_VALUE);
+        final int subsystem = 42;
+        final long timestamp = 54;
+
+        final SparseIntArray uids = new SparseIntArray();
+        uids.put(1, 3);
+        uids.put(5, 2);
+
+        history.recordActivity(subsystem, timestamp, uids);
+
+        assertThat(history.mWakingActivity.size()).isEqualTo(1);
+        assertThat(history.mWakingActivity.contains(subsystem)).isTrue();
+        assertThat(history.mWakingActivity.contains(subsystem + 1)).isFalse();
+        assertThat(history.mWakingActivity.contains(subsystem - 1)).isFalse();
+
+        final LongSparseArray<SparseIntArray> recordedHistory = history.mWakingActivity.get(
+                subsystem);
+
+        assertThat(recordedHistory.size()).isEqualTo(1);
+        assertThat(recordedHistory.indexOfKey(timestamp - 1)).isLessThan(0);
+        assertThat(recordedHistory.indexOfKey(timestamp)).isAtLeast(0);
+        assertThat(recordedHistory.indexOfKey(timestamp + 1)).isLessThan(0);
+
+        SparseIntArray recordedUids = recordedHistory.get(timestamp);
+        assertThat(recordedUids).isNotSameInstanceAs(uids);
+        assertThat(areSame(recordedUids, uids)).isTrue();
+
+        uids.put(1, 7);
+        uids.clear();
+        uids.put(10, 12);
+        uids.put(17, 53);
+
+        history.recordActivity(subsystem, timestamp, uids);
+
+        recordedUids = recordedHistory.get(timestamp);
+
+        assertThat(recordedUids.size()).isEqualTo(4);
+        assertThat(recordedUids.indexOfKey(1)).isAtLeast(0);
+        assertThat(recordedUids.get(5, -1)).isEqualTo(2);
+        assertThat(recordedUids.get(10, -1)).isEqualTo(12);
+        assertThat(recordedUids.get(17, -1)).isEqualTo(53);
+    }
+
+    @Test
+    public void recordActivityDoesNotDeleteExistingUids() {
+        final WakingActivityHistory history = new WakingActivityHistory(() -> Long.MAX_VALUE);
+        final int subsystem = 42;
+        long timestamp = 101;
+
+        final SparseIntArray uids = new SparseIntArray();
+        uids.put(1, 17);
+        uids.put(15, 2);
+        uids.put(62, 31);
+
+        history.recordActivity(subsystem, timestamp, uids);
+
+        assertThat(history.mWakingActivity.size()).isEqualTo(1);
+        assertThat(history.mWakingActivity.contains(subsystem)).isTrue();
+        assertThat(history.mWakingActivity.contains(subsystem + 1)).isFalse();
+        assertThat(history.mWakingActivity.contains(subsystem - 1)).isFalse();
+
+        final LongSparseArray<SparseIntArray> recordedHistory = history.mWakingActivity.get(
+                subsystem);
+
+        assertThat(recordedHistory.size()).isEqualTo(1);
+        assertThat(recordedHistory.indexOfKey(timestamp - 1)).isLessThan(0);
+        assertThat(recordedHistory.indexOfKey(timestamp)).isAtLeast(0);
+        assertThat(recordedHistory.indexOfKey(timestamp + 1)).isLessThan(0);
+
+        SparseIntArray recordedUids = recordedHistory.get(timestamp);
+        assertThat(recordedUids).isNotSameInstanceAs(uids);
+        assertThat(areSame(recordedUids, uids)).isTrue();
+
+        uids.delete(1);
+        uids.delete(15);
+        uids.put(85, 39);
+
+        history.recordActivity(subsystem, timestamp, uids);
+        recordedUids = recordedHistory.get(timestamp);
+
+        assertThat(recordedUids.size()).isEqualTo(4);
+        assertThat(recordedUids.get(1, -1)).isEqualTo(17);
+        assertThat(recordedUids.get(15, -1)).isEqualTo(2);
+        assertThat(recordedUids.get(62, -1)).isEqualTo(31);
+        assertThat(recordedUids.get(85, -1)).isEqualTo(39);
+
+        uids.clear();
+        history.recordActivity(subsystem, timestamp, uids);
+        recordedUids = recordedHistory.get(timestamp);
+
+        assertThat(recordedUids.size()).isEqualTo(4);
+        assertThat(recordedUids.get(1, -1)).isEqualTo(17);
+        assertThat(recordedUids.get(15, -1)).isEqualTo(2);
+        assertThat(recordedUids.get(62, -1)).isEqualTo(31);
+        assertThat(recordedUids.get(85, -1)).isEqualTo(39);
+    }
+
+    @Test
+    public void removeBetween() {
+        final WakingActivityHistory history = new WakingActivityHistory(() -> Long.MAX_VALUE);
+
+        final int subsystem = 43;
+
+        final SparseIntArray uids = new SparseIntArray();
+        uids.put(1, 17);
+        uids.put(15, 2);
+        uids.put(62, 31);
+        history.recordActivity(subsystem, 123, uids);
+
+        uids.put(54, 91);
+        history.recordActivity(subsystem, 150, uids);
+
+        uids.put(101, 32);
+        uids.delete(1);
+        history.recordActivity(subsystem, 191, uids);
+
+        SparseIntArray removedUids = history.removeBetween(subsystem, 100, 122);
+        assertThat(removedUids).isNull();
+        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(3);
+
+        removedUids = history.removeBetween(subsystem, 124, 149);
+        assertThat(removedUids).isNull();
+        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(3);
+
+        removedUids = history.removeBetween(subsystem, 151, 190);
+        assertThat(removedUids).isNull();
+        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(3);
+
+        removedUids = history.removeBetween(subsystem, 192, 240);
+        assertThat(removedUids).isNull();
+        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(3);
+
+
+        // Removing from a different subsystem should do nothing.
+        removedUids = history.removeBetween(subsystem + 1, 0, 300);
+        assertThat(removedUids).isNull();
+        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(3);
+
+        removedUids = history.removeBetween(subsystem, 0, 300);
+        assertThat(removedUids.size()).isEqualTo(5);
+        assertThat(removedUids.get(1, -1)).isEqualTo(17);
+        assertThat(removedUids.get(15, -1)).isEqualTo(2);
+        assertThat(removedUids.get(62, -1)).isEqualTo(31);
+        assertThat(removedUids.get(54, -1)).isEqualTo(91);
+        assertThat(removedUids.get(101, -1)).isEqualTo(32);
+
+        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(0);
+
+        history.recordActivity(subsystem, 23, uids);
+        uids.put(31, 123);
+        history.recordActivity(subsystem, 49, uids);
+        uids.put(177, 432);
+        history.recordActivity(subsystem, 89, uids);
+
+        removedUids = history.removeBetween(subsystem, 23, 23);
+        assertThat(removedUids.size()).isEqualTo(4);
+        assertThat(removedUids.get(15, -1)).isEqualTo(2);
+        assertThat(removedUids.get(62, -1)).isEqualTo(31);
+        assertThat(removedUids.get(54, -1)).isEqualTo(91);
+        assertThat(removedUids.get(101, -1)).isEqualTo(32);
+
+        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(2);
+
+        removedUids = history.removeBetween(subsystem, 49, 54);
+        assertThat(removedUids.size()).isEqualTo(5);
+        assertThat(removedUids.get(15, -1)).isEqualTo(2);
+        assertThat(removedUids.get(62, -1)).isEqualTo(31);
+        assertThat(removedUids.get(54, -1)).isEqualTo(91);
+        assertThat(removedUids.get(101, -1)).isEqualTo(32);
+        assertThat(removedUids.get(31, -1)).isEqualTo(123);
+
+        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(1);
+
+        removedUids = history.removeBetween(subsystem, 23, 89);
+        assertThat(removedUids.size()).isEqualTo(6);
+        assertThat(removedUids.get(15, -1)).isEqualTo(2);
+        assertThat(removedUids.get(62, -1)).isEqualTo(31);
+        assertThat(removedUids.get(54, -1)).isEqualTo(91);
+        assertThat(removedUids.get(101, -1)).isEqualTo(32);
+        assertThat(removedUids.get(31, -1)).isEqualTo(123);
+        assertThat(removedUids.get(177, -1)).isEqualTo(432);
+
+        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(0);
+    }
+
+    @Test
+    public void deletesActivityPastRetention() {
+        final WakingActivityHistory history = new WakingActivityHistory(() -> mTestRetention);
+        final int subsystem = 49;
+
+        mTestRetention = 454;
+
+        final long firstTime = 342;
+        for (int i = 0; i < mTestRetention; i++) {
+            history.recordActivity(subsystem, firstTime + i, new SparseIntArray());
+        }
+        assertThat(history.mWakingActivity.get(subsystem)).isNotNull();
+        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(mTestRetention);
+
+        history.recordActivity(subsystem, firstTime + mTestRetention + 7, new SparseIntArray());
+        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(mTestRetention - 7);
+
+        final ThreadLocalRandom random = ThreadLocalRandom.current();
+
+        for (int i = 0; i < 100; i++) {
+            final long time = random.nextLong(firstTime + mTestRetention + 100,
+                    456 * mTestRetention);
+            history.recordActivity(subsystem, time, new SparseIntArray());
+            assertThat(history.mWakingActivity.get(subsystem).lastIndexOnOrBefore(
+                    time - mTestRetention)).isLessThan(0);
+        }
+    }
+}
diff --git a/services/tests/powerstatstests/src/com/android/server/powerstats/IntervalRandomNoiseGeneratorTest.java b/services/tests/powerstatstests/src/com/android/server/powerstats/IntervalRandomNoiseGeneratorTest.java
new file mode 100644
index 0000000..9962146
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/powerstats/IntervalRandomNoiseGeneratorTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.powerstats;
+
+import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
+
+import org.jetbrains.annotations.NotNull;
+import org.junit.Test;
+
+import java.util.function.Supplier;
+
+public class IntervalRandomNoiseGeneratorTest {
+
+    @Test
+    public void parameterizedDistribution() {
+         // Assert closeness to theoretical distribution
+        assertDistribution(3.0,
+                0.0392,
+                0.2617,
+                0.6990);
+
+        assertDistribution(5.0,
+                0.0003,
+                0.0098,
+                0.0676,
+                0.2502,
+                0.6720);
+
+        assertDistribution(9.0,
+                0.0000,
+                0.0002,
+                0.0097,
+                0.1242,
+                0.8658);
+    }
+
+    private void assertDistribution(double alpha, Double... expectedBuckets) {
+        IntervalRandomNoiseGenerator generator = new IntervalRandomNoiseGenerator(alpha);
+        generator.reseed(42);  // Make test repeatable
+        final int sampleCount = 1000;
+        final int bucketCount = expectedBuckets.length;
+        int[] histogram = buildHistogram(() -> {
+            generator.refresh();
+            return generator.addNoise(100, 200, 12345);
+        }, sampleCount, bucketCount, 100, 200);
+
+        for (int i = 0; i < expectedBuckets.length; i++) {
+            assertWithMessage("Bucket #" + i)
+                    .that((double) histogram[i] / sampleCount)
+                    .isWithin(0.05)
+                    .of(expectedBuckets[i]);
+        }
+    }
+
+    @NotNull
+    private int[] buildHistogram(Supplier<Long> generator, int sampleCount,
+            int bucketCount, int lowBound, int highBound) {
+        int[] buckets = new int[bucketCount];
+        for (int i = 0; i < sampleCount; i++) {
+            long sample = generator.get();
+            assertThat(sample).isAtLeast(lowBound);
+            assertThat(sample).isAtMost(highBound);
+            buckets[(int) ((double) (sample - lowBound) / (highBound - lowBound) * bucketCount)]++;
+        }
+        return buckets;
+    }
+
+    @Test
+    public void stickiness() {
+        IntervalRandomNoiseGenerator generator = new IntervalRandomNoiseGenerator(9);
+        generator.reseed(42);  // Make test repeatable
+
+        long value1a = generator.addNoise(1000, 5000, 123);
+        long value1b = generator.addNoise(1000, 5000, 123);
+        long value1c = generator.addNoise(1000, 5000, 123);
+        assertThat(value1b).isEqualTo(value1a);
+        assertThat(value1c).isEqualTo(value1a);
+
+        // Different stickyKey
+        long value2a = generator.addNoise(1000, 5000, 321);
+        long value2b = generator.addNoise(1000, 5000, 321);
+        assertThat(value2a).isNotEqualTo(value1a);
+        assertThat(value2b).isEqualTo(value2a);
+
+        generator.refresh();
+
+        // Same stickyKey after a refresh - different value
+        long value3 = generator.addNoise(1000, 5000, 123);
+        long value4 = generator.addNoise(1000, 5000, 321);
+        assertThat(value3).isNotEqualTo(value1a);
+        assertThat(value4).isNotEqualTo(value2a);
+    }
+}
diff --git a/services/tests/powerstatstests/src/com/android/server/powerstats/PowerStatsServiceTest.java b/services/tests/powerstatstests/src/com/android/server/powerstats/PowerStatsServiceTest.java
new file mode 100644
index 0000000..2ffe4aa
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/powerstats/PowerStatsServiceTest.java
@@ -0,0 +1,1201 @@
+/*
+ * 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.server.powerstats;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import android.content.Context;
+import android.hardware.power.stats.Channel;
+import android.hardware.power.stats.EnergyConsumer;
+import android.hardware.power.stats.EnergyConsumerAttribution;
+import android.hardware.power.stats.EnergyConsumerResult;
+import android.hardware.power.stats.EnergyMeasurement;
+import android.hardware.power.stats.PowerEntity;
+import android.hardware.power.stats.State;
+import android.hardware.power.stats.StateResidency;
+import android.hardware.power.stats.StateResidencyResult;
+import android.os.Bundle;
+import android.os.IPowerStatsService;
+import android.os.Looper;
+import android.os.PowerMonitor;
+import android.os.ResultReceiver;
+import android.provider.DeviceConfig;
+import android.provider.DeviceConfigInterface;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.os.Clock;
+import com.android.server.SystemService;
+import com.android.server.powerstats.PowerStatsHALWrapper.IPowerStatsHALWrapper;
+import com.android.server.powerstats.ProtoStreamUtils.ChannelUtils;
+import com.android.server.powerstats.ProtoStreamUtils.EnergyConsumerUtils;
+import com.android.server.powerstats.ProtoStreamUtils.PowerEntityUtils;
+import com.android.server.powerstats.nano.PowerEntityProto;
+import com.android.server.powerstats.nano.PowerStatsServiceMeterProto;
+import com.android.server.powerstats.nano.PowerStatsServiceModelProto;
+import com.android.server.powerstats.nano.PowerStatsServiceResidencyProto;
+import com.android.server.powerstats.nano.StateProto;
+import com.android.server.powerstats.nano.StateResidencyProto;
+import com.android.server.powerstats.nano.StateResidencyResultProto;
+import com.android.server.testutils.FakeDeviceConfigInterface;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.file.Files;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Random;
+import java.util.stream.Collectors;
+
+/**
+ * Tests for {@link com.android.server.powerstats.PowerStatsService}.
+ *
+ * Build/Install/Run:
+ * atest FrameworksServicesTests:PowerStatsServiceTest
+ */
+public class PowerStatsServiceTest {
+    private static final String TAG = PowerStatsServiceTest.class.getSimpleName();
+    private static final String DATA_STORAGE_SUBDIR = "powerstatstest";
+    private static final String METER_FILENAME = "log.powerstats.metertest.0";
+    private static final String MODEL_FILENAME = "log.powerstats.modeltest.0";
+    private static final String RESIDENCY_FILENAME = "log.powerstats.residencytest.0";
+    private static final String PROTO_OUTPUT_FILENAME = "powerstats.proto";
+    private static final String CHANNEL_NAME = "channelname";
+    private static final String CHANNEL_SUBSYSTEM = "channelsubsystem";
+    private static final String POWER_ENTITY_NAME = "powerentityinfo";
+    private static final String STATE_NAME = "stateinfo";
+    private static final String ENERGY_CONSUMER_NAME = "energyconsumer";
+    private static final String METER_CACHE_FILENAME = "meterCacheTest";
+    private static final String MODEL_CACHE_FILENAME = "modelCacheTest";
+    private static final String RESIDENCY_CACHE_FILENAME = "residencyCacheTest";
+    private static final int ENERGY_METER_COUNT = 8;
+    private static final int ENERGY_CONSUMER_COUNT = 2;
+    private static final int ENERGY_CONSUMER_ATTRIBUTION_COUNT = 5;
+    private static final int POWER_ENTITY_COUNT = 3;
+    private static final int STATE_INFO_COUNT = 5;
+    private static final int STATE_RESIDENCY_COUNT = 4;
+    private static final int APP_UID = 10042;
+
+    private final Context mContext = InstrumentationRegistry.getInstrumentation().getContext();
+    private PowerStatsService mService;
+    private TestPowerStatsHALWrapper mPowerStatsHALWrapper = new TestPowerStatsHALWrapper();
+    private File mDataStorageDir;
+    private TimerTrigger mTimerTrigger;
+    private BatteryTrigger mBatteryTrigger;
+    private PowerStatsLogger mPowerStatsLogger;
+    private MockClock mMockClock = new MockClock();
+    private DeviceConfigInterface mMockDeviceConfig = new FakeDeviceConfigInterface();
+    private IntervalRandomNoiseGenerator mMockNoiseGenerator = new IntervalRandomNoiseGenerator(42);
+
+    private class MockClock extends Clock {
+        public long realtime;
+
+        @Override
+        public long elapsedRealtime() {
+            return realtime;
+        }
+    }
+
+    private final PowerStatsService.Injector mInjector = new PowerStatsService.Injector() {
+
+        @Override
+        Clock getClock() {
+            return mMockClock;
+        }
+
+        @Override
+        File createDataStoragePath() {
+            if (mDataStorageDir == null) {
+                try {
+                    mDataStorageDir = Files.createTempDirectory(DATA_STORAGE_SUBDIR).toFile();
+                } catch (IOException e) {
+                    fail("Could not create temp directory.");
+                }
+            }
+
+            return mDataStorageDir;
+        }
+
+        @Override
+        String createMeterFilename() {
+            return METER_FILENAME;
+        }
+
+        @Override
+        String createModelFilename() {
+            return MODEL_FILENAME;
+        }
+
+        @Override
+        String createResidencyFilename() {
+            return RESIDENCY_FILENAME;
+        }
+
+        @Override
+        String createMeterCacheFilename() {
+            return METER_CACHE_FILENAME;
+        }
+
+        @Override
+        String createModelCacheFilename() {
+            return MODEL_CACHE_FILENAME;
+        }
+
+        @Override
+        String createResidencyCacheFilename() {
+            return RESIDENCY_CACHE_FILENAME;
+        }
+
+        @Override
+        IPowerStatsHALWrapper getPowerStatsHALWrapperImpl() {
+            return mPowerStatsHALWrapper;
+        }
+
+        @Override
+        PowerStatsLogger createPowerStatsLogger(Context context, Looper looper,
+                File dataStoragePath, String meterFilename, String meterCacheFilename,
+                String modelFilename, String modelCacheFilename,
+                String residencyFilename, String residencyCacheFilename,
+                IPowerStatsHALWrapper powerStatsHALWrapper) {
+            mPowerStatsLogger = new PowerStatsLogger(context, looper, dataStoragePath,
+                    meterFilename, meterCacheFilename,
+                    modelFilename, modelCacheFilename,
+                    residencyFilename, residencyCacheFilename,
+                    powerStatsHALWrapper);
+            return mPowerStatsLogger;
+        }
+
+        @Override
+        BatteryTrigger createBatteryTrigger(Context context, PowerStatsLogger powerStatsLogger) {
+            mBatteryTrigger = new BatteryTrigger(context, powerStatsLogger,
+                    false /* trigger enabled */);
+            return mBatteryTrigger;
+        }
+
+        @Override
+        TimerTrigger createTimerTrigger(Context context, PowerStatsLogger powerStatsLogger) {
+            mTimerTrigger = new TimerTrigger(context, powerStatsLogger,
+                    false /* trigger enabled */);
+            return mTimerTrigger;
+        }
+
+        DeviceConfigInterface getDeviceConfig() {
+            return mMockDeviceConfig;
+        }
+
+        @Override
+        IntervalRandomNoiseGenerator createIntervalRandomNoiseGenerator() {
+            return mMockNoiseGenerator;
+        }
+    };
+
+    public static final class TestPowerStatsHALWrapper implements IPowerStatsHALWrapper {
+        public EnergyConsumerResult[] energyConsumerResults;
+        public EnergyMeasurement[] energyMeasurements;
+
+        @Override
+        public PowerEntity[] getPowerEntityInfo() {
+            PowerEntity[] powerEntityList = new PowerEntity[POWER_ENTITY_COUNT];
+            for (int i = 0; i < powerEntityList.length; i++) {
+                powerEntityList[i] = new PowerEntity();
+                powerEntityList[i].id = i;
+                powerEntityList[i].name = new String(POWER_ENTITY_NAME + i);
+                powerEntityList[i].states = new State[STATE_INFO_COUNT];
+                for (int j = 0; j < powerEntityList[i].states.length; j++) {
+                    powerEntityList[i].states[j] = new State();
+                    powerEntityList[i].states[j].id = j;
+                    powerEntityList[i].states[j].name = new String(STATE_NAME + j);
+                }
+            }
+            return powerEntityList;
+        }
+
+        @Override
+        public StateResidencyResult[] getStateResidency(int[] powerEntityIds) {
+            StateResidencyResult[] stateResidencyResultList =
+                    new StateResidencyResult[POWER_ENTITY_COUNT];
+            for (int i = 0; i < stateResidencyResultList.length; i++) {
+                stateResidencyResultList[i] = new StateResidencyResult();
+                stateResidencyResultList[i].id = i;
+                stateResidencyResultList[i].stateResidencyData =
+                        new StateResidency[STATE_RESIDENCY_COUNT];
+                for (int j = 0; j < stateResidencyResultList[i].stateResidencyData.length; j++) {
+                    stateResidencyResultList[i].stateResidencyData[j] = new StateResidency();
+                    stateResidencyResultList[i].stateResidencyData[j].id = j;
+                    stateResidencyResultList[i].stateResidencyData[j].totalTimeInStateMs = j;
+                    stateResidencyResultList[i].stateResidencyData[j].totalStateEntryCount = j;
+                    stateResidencyResultList[i].stateResidencyData[j].lastEntryTimestampMs = j;
+                }
+            }
+
+            return stateResidencyResultList;
+        }
+
+        @Override
+        public EnergyConsumer[] getEnergyConsumerInfo() {
+            EnergyConsumer[] energyConsumerList = new EnergyConsumer[ENERGY_CONSUMER_COUNT];
+            for (int i = 0; i < energyConsumerList.length; i++) {
+                energyConsumerList[i] = new EnergyConsumer();
+                energyConsumerList[i].id = i;
+                energyConsumerList[i].ordinal = i;
+                energyConsumerList[i].type = (byte) i;
+                energyConsumerList[i].name = new String(ENERGY_CONSUMER_NAME + i);
+            }
+            return energyConsumerList;
+        }
+
+        private void buildEnergyConsumerResult() {
+            energyConsumerResults = new EnergyConsumerResult[ENERGY_CONSUMER_COUNT];
+            for (int i = 0; i < energyConsumerResults.length; i++) {
+                energyConsumerResults[i] = new EnergyConsumerResult();
+                energyConsumerResults[i].id = i;
+                energyConsumerResults[i].timestampMs = i;
+                energyConsumerResults[i].energyUWs = i;
+                energyConsumerResults[i].attribution =
+                        new EnergyConsumerAttribution[ENERGY_CONSUMER_ATTRIBUTION_COUNT];
+                for (int j = 0; j < energyConsumerResults[i].attribution.length; j++) {
+                    energyConsumerResults[i].attribution[j] = new EnergyConsumerAttribution();
+                    energyConsumerResults[i].attribution[j].uid = j;
+                    energyConsumerResults[i].attribution[j].energyUWs = j;
+                }
+            }
+        }
+
+        @Override
+        public EnergyConsumerResult[] getEnergyConsumed(int[] energyConsumerIds) {
+            return energyConsumerResults;
+        }
+
+        @Override
+        public Channel[] getEnergyMeterInfo() {
+            Channel[] energyMeterList = new Channel[ENERGY_METER_COUNT];
+            for (int i = 0; i < energyMeterList.length; i++) {
+                energyMeterList[i] = new Channel();
+                energyMeterList[i].id = i;
+                energyMeterList[i].name = new String(CHANNEL_NAME + i);
+                energyMeterList[i].subsystem = new String(CHANNEL_SUBSYSTEM + i);
+            }
+            return energyMeterList;
+        }
+
+        private void buildEnergyMeasurements() {
+            energyMeasurements = new EnergyMeasurement[ENERGY_METER_COUNT];
+            for (int i = 0; i < energyMeasurements.length; i++) {
+                energyMeasurements[i] = new EnergyMeasurement();
+                energyMeasurements[i].id = i;
+                energyMeasurements[i].timestampMs = i;
+                energyMeasurements[i].durationMs = i;
+                energyMeasurements[i].energyUWs = i;
+            }
+        }
+
+        @Override
+        public EnergyMeasurement[] readEnergyMeter(int[] channelIds) {
+            return energyMeasurements;
+        }
+
+        @Override
+        public boolean isInitialized() {
+            return true;
+        }
+    }
+
+    @Before
+    public void setUp() {
+        mService = new PowerStatsService(mContext, mInjector);
+    }
+
+    @Test
+    public void testWrittenMeterDataMatchesReadIncidentReportData()
+            throws InterruptedException, IOException {
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+        mPowerStatsHALWrapper.buildEnergyMeasurements();
+
+        // Write data to on-device storage.
+        mTimerTrigger.logPowerStatsData(PowerStatsLogger.MSG_LOG_TO_DATA_STORAGE_HIGH_FREQUENCY);
+
+        // The above call puts a message on a handler.  Wait for
+        // it to be processed.
+        Thread.sleep(100);
+
+        // Write on-device storage to an incident report.
+        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
+        FileOutputStream fos = new FileOutputStream(incidentReport);
+        mPowerStatsLogger.writeMeterDataToFile(fos.getFD());
+
+        // Read the incident report in to a byte array.
+        FileInputStream fis = new FileInputStream(incidentReport);
+        byte[] fileContent = new byte[(int) incidentReport.length()];
+        fis.read(fileContent);
+
+        // Parse the incident data into a PowerStatsServiceMeterProto object.
+        PowerStatsServiceMeterProto pssProto = PowerStatsServiceMeterProto.parseFrom(fileContent);
+
+        // Validate the channel array matches what was written to on-device storage.
+        assertTrue(pssProto.channel.length == ENERGY_METER_COUNT);
+        for (int i = 0; i < pssProto.channel.length; i++) {
+            assertTrue(pssProto.channel[i].id == i);
+            assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i));
+            assertTrue(pssProto.channel[i].subsystem.equals(CHANNEL_SUBSYSTEM + i));
+        }
+
+        // Validate the energyMeasurement array matches what was written to on-device storage.
+        assertTrue(pssProto.energyMeasurement.length == ENERGY_METER_COUNT);
+        for (int i = 0; i < pssProto.energyMeasurement.length; i++) {
+            assertTrue(pssProto.energyMeasurement[i].id == i);
+            assertTrue(pssProto.energyMeasurement[i].timestampMs ==
+                    i + mPowerStatsLogger.getStartWallTime());
+            assertTrue(pssProto.energyMeasurement[i].durationMs == i);
+            assertTrue(pssProto.energyMeasurement[i].energyUws == i);
+        }
+    }
+
+    @Test
+    public void testWrittenModelDataMatchesReadIncidentReportData()
+            throws InterruptedException, IOException {
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+
+        mPowerStatsHALWrapper.buildEnergyConsumerResult();
+
+        // Write data to on-device storage.
+        mTimerTrigger.logPowerStatsData(PowerStatsLogger.MSG_LOG_TO_DATA_STORAGE_LOW_FREQUENCY);
+
+        // The above call puts a message on a handler.  Wait for
+        // it to be processed.
+        Thread.sleep(100);
+
+        // Write on-device storage to an incident report.
+        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
+        FileOutputStream fos = new FileOutputStream(incidentReport);
+        mPowerStatsLogger.writeModelDataToFile(fos.getFD());
+
+        // Read the incident report in to a byte array.
+        FileInputStream fis = new FileInputStream(incidentReport);
+        byte[] fileContent = new byte[(int) incidentReport.length()];
+        fis.read(fileContent);
+
+        // Parse the incident data into a PowerStatsServiceModelProto object.
+        PowerStatsServiceModelProto pssProto = PowerStatsServiceModelProto.parseFrom(fileContent);
+
+        // Validate the energyConsumer array matches what was written to on-device storage.
+        assertTrue(pssProto.energyConsumer.length == ENERGY_CONSUMER_COUNT);
+        for (int i = 0; i < pssProto.energyConsumer.length; i++) {
+            assertTrue(pssProto.energyConsumer[i].id == i);
+        }
+
+        // Validate the energyConsumerResult array matches what was written to on-device storage.
+        assertTrue(pssProto.energyConsumerResult.length == ENERGY_CONSUMER_COUNT);
+        for (int i = 0; i < pssProto.energyConsumerResult.length; i++) {
+            assertTrue(pssProto.energyConsumerResult[i].id == i);
+            assertTrue(pssProto.energyConsumerResult[i].timestampMs ==
+                    i + mPowerStatsLogger.getStartWallTime());
+            assertTrue(pssProto.energyConsumerResult[i].energyUws == i);
+            assertTrue(pssProto.energyConsumerResult[i].attribution.length
+                    == ENERGY_CONSUMER_ATTRIBUTION_COUNT);
+            for (int j = 0; j < pssProto.energyConsumerResult[i].attribution.length; j++) {
+                assertTrue(pssProto.energyConsumerResult[i].attribution[j].uid == j);
+                assertTrue(pssProto.energyConsumerResult[i].attribution[j].energyUws == j);
+            }
+        }
+    }
+
+    @Test
+    public void testWrittenResidencyDataMatchesReadIncidentReportData()
+            throws InterruptedException, IOException {
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+
+        // Write data to on-device storage.
+        mBatteryTrigger.logPowerStatsData(PowerStatsLogger.MSG_LOG_TO_DATA_STORAGE_BATTERY_DROP);
+
+        // The above call puts a message on a handler.  Wait for
+        // it to be processed.
+        Thread.sleep(100);
+
+        // Write on-device storage to an incident report.
+        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
+        FileOutputStream fos = new FileOutputStream(incidentReport);
+        mPowerStatsLogger.writeResidencyDataToFile(fos.getFD());
+
+        // Read the incident report in to a byte array.
+        FileInputStream fis = new FileInputStream(incidentReport);
+        byte[] fileContent = new byte[(int) incidentReport.length()];
+        fis.read(fileContent);
+
+        // Parse the incident data into a PowerStatsServiceResidencyProto object.
+        PowerStatsServiceResidencyProto pssProto =
+                PowerStatsServiceResidencyProto.parseFrom(fileContent);
+
+        // Validate the powerEntity array matches what was written to on-device storage.
+        assertTrue(pssProto.powerEntity.length == POWER_ENTITY_COUNT);
+        for (int i = 0; i < pssProto.powerEntity.length; i++) {
+            PowerEntityProto powerEntity = pssProto.powerEntity[i];
+            assertTrue(powerEntity.id == i);
+            assertTrue(powerEntity.name.equals(POWER_ENTITY_NAME + i));
+            for (int j = 0; j < powerEntity.states.length; j++) {
+                StateProto state = powerEntity.states[j];
+                assertTrue(state.id == j);
+                assertTrue(state.name.equals(STATE_NAME + j));
+            }
+        }
+
+        // Validate the stateResidencyResult array matches what was written to on-device storage.
+        assertTrue(pssProto.stateResidencyResult.length == POWER_ENTITY_COUNT);
+        for (int i = 0; i < pssProto.stateResidencyResult.length; i++) {
+            StateResidencyResultProto stateResidencyResult = pssProto.stateResidencyResult[i];
+            assertTrue(stateResidencyResult.id == i);
+            assertTrue(stateResidencyResult.stateResidencyData.length == STATE_RESIDENCY_COUNT);
+            for (int j = 0; j < stateResidencyResult.stateResidencyData.length; j++) {
+                StateResidencyProto stateResidency = stateResidencyResult.stateResidencyData[j];
+                assertTrue(stateResidency.id == j);
+                assertTrue(stateResidency.totalTimeInStateMs == j);
+                assertTrue(stateResidency.totalStateEntryCount == j);
+                assertTrue(stateResidency.lastEntryTimestampMs ==
+                        j + mPowerStatsLogger.getStartWallTime());
+            }
+        }
+    }
+
+    @Test
+    public void testCorruptOnDeviceMeterStorage() throws IOException {
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+
+        // Generate random array of bytes to emulate corrupt data.
+        Random rd = new Random();
+        byte[] bytes = new byte[100];
+        rd.nextBytes(bytes);
+
+        // Store corrupt data in on-device storage.  Add fake timestamp to filename
+        // to match format expected by FileRotator.
+        File onDeviceStorageFile = new File(mDataStorageDir, METER_FILENAME + ".1234-2234");
+        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Write on-device storage to an incident report.
+        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
+        FileOutputStream incidentReportFos = new FileOutputStream(incidentReport);
+        mPowerStatsLogger.writeMeterDataToFile(incidentReportFos.getFD());
+
+        // Read the incident report in to a byte array.
+        FileInputStream fis = new FileInputStream(incidentReport);
+        byte[] fileContent = new byte[(int) incidentReport.length()];
+        fis.read(fileContent);
+
+        // Parse the incident data into a PowerStatsServiceMeterProto object.
+        PowerStatsServiceMeterProto pssProto = PowerStatsServiceMeterProto.parseFrom(fileContent);
+
+        // Valid channel data is written to the incident report in the call to
+        // mPowerStatsLogger.writeMeterDataToFile().
+        assertTrue(pssProto.channel.length == ENERGY_METER_COUNT);
+        for (int i = 0; i < pssProto.channel.length; i++) {
+            assertTrue(pssProto.channel[i].id == i);
+            assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i));
+            assertTrue(pssProto.channel[i].subsystem.equals(CHANNEL_SUBSYSTEM + i));
+        }
+
+        // No energyMeasurements should be written to the incident report since it
+        // is all corrupt (random bytes generated above).
+        assertTrue(pssProto.energyMeasurement.length == 0);
+    }
+
+    @Test
+    public void testCorruptOnDeviceModelStorage() throws IOException {
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+
+        // Generate random array of bytes to emulate corrupt data.
+        Random rd = new Random();
+        byte[] bytes = new byte[100];
+        rd.nextBytes(bytes);
+
+        // Store corrupt data in on-device storage.  Add fake timestamp to filename
+        // to match format expected by FileRotator.
+        File onDeviceStorageFile = new File(mDataStorageDir, MODEL_FILENAME + ".1234-2234");
+        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Write on-device storage to an incident report.
+        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
+        FileOutputStream incidentReportFos = new FileOutputStream(incidentReport);
+        mPowerStatsLogger.writeModelDataToFile(incidentReportFos.getFD());
+
+        // Read the incident report in to a byte array.
+        FileInputStream fis = new FileInputStream(incidentReport);
+        byte[] fileContent = new byte[(int) incidentReport.length()];
+        fis.read(fileContent);
+
+        // Parse the incident data into a PowerStatsServiceModelProto object.
+        PowerStatsServiceModelProto pssProto = PowerStatsServiceModelProto.parseFrom(fileContent);
+
+        // Valid energyConsumer data is written to the incident report in the call to
+        // mPowerStatsLogger.writeModelDataToFile().
+        assertTrue(pssProto.energyConsumer.length == ENERGY_CONSUMER_COUNT);
+        for (int i = 0; i < pssProto.energyConsumer.length; i++) {
+            assertTrue(pssProto.energyConsumer[i].id == i);
+        }
+
+        // No energyConsumerResults should be written to the incident report since it
+        // is all corrupt (random bytes generated above).
+        assertTrue(pssProto.energyConsumerResult.length == 0);
+    }
+
+    @Test
+    public void testCorruptOnDeviceResidencyStorage() throws IOException {
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+
+        // Generate random array of bytes to emulate corrupt data.
+        Random rd = new Random();
+        byte[] bytes = new byte[100];
+        rd.nextBytes(bytes);
+
+        // Store corrupt data in on-device storage.  Add fake timestamp to filename
+        // to match format expected by FileRotator.
+        File onDeviceStorageFile = new File(mDataStorageDir, RESIDENCY_FILENAME + ".1234-2234");
+        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Write on-device storage to an incident report.
+        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
+        FileOutputStream incidentReportFos = new FileOutputStream(incidentReport);
+        mPowerStatsLogger.writeResidencyDataToFile(incidentReportFos.getFD());
+
+        // Read the incident report in to a byte array.
+        FileInputStream fis = new FileInputStream(incidentReport);
+        byte[] fileContent = new byte[(int) incidentReport.length()];
+        fis.read(fileContent);
+
+        // Parse the incident data into a PowerStatsServiceResidencyProto object.
+        PowerStatsServiceResidencyProto pssProto =
+                PowerStatsServiceResidencyProto.parseFrom(fileContent);
+
+        // Valid powerEntity data is written to the incident report in the call to
+        // mPowerStatsLogger.writeResidencyDataToFile().
+        assertTrue(pssProto.powerEntity.length == POWER_ENTITY_COUNT);
+        for (int i = 0; i < pssProto.powerEntity.length; i++) {
+            PowerEntityProto powerEntity = pssProto.powerEntity[i];
+            assertTrue(powerEntity.id == i);
+            assertTrue(powerEntity.name.equals(POWER_ENTITY_NAME + i));
+            for (int j = 0; j < powerEntity.states.length; j++) {
+                StateProto state = powerEntity.states[j];
+                assertTrue(state.id == j);
+                assertTrue(state.name.equals(STATE_NAME + j));
+            }
+        }
+
+        // No stateResidencyResults should be written to the incident report since it
+        // is all corrupt (random bytes generated above).
+        assertTrue(pssProto.stateResidencyResult.length == 0);
+    }
+
+    @Test
+    public void testNotEnoughBytesAfterMeterLengthField() throws IOException {
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+
+        // Create corrupt data.
+        // Length field is correct, but there is no data following the length.
+        ByteArrayOutputStream data = new ByteArrayOutputStream();
+        data.write(ByteBuffer.allocate(4).putInt(50).array());
+        byte[] test = data.toByteArray();
+
+        // Store corrupt data in on-device storage.  Add fake timestamp to filename
+        // to match format expected by FileRotator.
+        File onDeviceStorageFile = new File(mDataStorageDir, METER_FILENAME + ".1234-2234");
+        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(data.toByteArray());
+        onDeviceStorageFos.close();
+
+        // Write on-device storage to an incident report.
+        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
+        FileOutputStream incidentReportFos = new FileOutputStream(incidentReport);
+        mPowerStatsLogger.writeMeterDataToFile(incidentReportFos.getFD());
+
+        // Read the incident report in to a byte array.
+        FileInputStream fis = new FileInputStream(incidentReport);
+        byte[] fileContent = new byte[(int) incidentReport.length()];
+        fis.read(fileContent);
+
+        // Parse the incident data into a PowerStatsServiceMeterProto object.
+        PowerStatsServiceMeterProto pssProto = PowerStatsServiceMeterProto.parseFrom(fileContent);
+
+        // Valid channel data is written to the incident report in the call to
+        // mPowerStatsLogger.writeMeterDataToFile().
+        assertTrue(pssProto.channel.length == ENERGY_METER_COUNT);
+        for (int i = 0; i < pssProto.channel.length; i++) {
+            assertTrue(pssProto.channel[i].id == i);
+            assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i));
+            assertTrue(pssProto.channel[i].subsystem.equals(CHANNEL_SUBSYSTEM + i));
+        }
+
+        // No energyMeasurements should be written to the incident report since the
+        // input buffer had only length and no data.
+        assertTrue(pssProto.energyMeasurement.length == 0);
+    }
+
+    @Test
+    public void testNotEnoughBytesAfterModelLengthField() throws IOException {
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+
+        // Create corrupt data.
+        // Length field is correct, but there is no data following the length.
+        ByteArrayOutputStream data = new ByteArrayOutputStream();
+        data.write(ByteBuffer.allocate(4).putInt(50).array());
+        byte[] test = data.toByteArray();
+
+        // Store corrupt data in on-device storage.  Add fake timestamp to filename
+        // to match format expected by FileRotator.
+        File onDeviceStorageFile = new File(mDataStorageDir, MODEL_FILENAME + ".1234-2234");
+        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(data.toByteArray());
+        onDeviceStorageFos.close();
+
+        // Write on-device storage to an incident report.
+        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
+        FileOutputStream incidentReportFos = new FileOutputStream(incidentReport);
+        mPowerStatsLogger.writeModelDataToFile(incidentReportFos.getFD());
+
+        // Read the incident report in to a byte array.
+        FileInputStream fis = new FileInputStream(incidentReport);
+        byte[] fileContent = new byte[(int) incidentReport.length()];
+        fis.read(fileContent);
+
+        // Parse the incident data into a PowerStatsServiceModelProto object.
+        PowerStatsServiceModelProto pssProto = PowerStatsServiceModelProto.parseFrom(fileContent);
+
+        // Valid energyConsumer data is written to the incident report in the call to
+        // mPowerStatsLogger.writeModelDataToFile().
+        assertTrue(pssProto.energyConsumer.length == ENERGY_CONSUMER_COUNT);
+        for (int i = 0; i < pssProto.energyConsumer.length; i++) {
+            assertTrue(pssProto.energyConsumer[i].id == i);
+        }
+
+        // No energyConsumerResults should be written to the incident report since the
+        // input buffer had only length and no data.
+        assertTrue(pssProto.energyConsumerResult.length == 0);
+    }
+
+    @Test
+    public void testNotEnoughBytesAfterResidencyLengthField() throws IOException {
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+
+        // Create corrupt data.
+        // Length field is correct, but there is no data following the length.
+        ByteArrayOutputStream data = new ByteArrayOutputStream();
+        data.write(ByteBuffer.allocate(4).putInt(50).array());
+        byte[] test = data.toByteArray();
+
+        // Store corrupt data in on-device storage.  Add fake timestamp to filename
+        // to match format expected by FileRotator.
+        File onDeviceStorageFile = new File(mDataStorageDir, RESIDENCY_FILENAME + ".1234-2234");
+        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(data.toByteArray());
+        onDeviceStorageFos.close();
+
+        // Write on-device storage to an incident report.
+        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
+        FileOutputStream incidentReportFos = new FileOutputStream(incidentReport);
+        mPowerStatsLogger.writeResidencyDataToFile(incidentReportFos.getFD());
+
+        // Read the incident report in to a byte array.
+        FileInputStream fis = new FileInputStream(incidentReport);
+        byte[] fileContent = new byte[(int) incidentReport.length()];
+        fis.read(fileContent);
+
+        // Parse the incident data into a PowerStatsServiceResidencyProto object.
+        PowerStatsServiceResidencyProto pssProto =
+                PowerStatsServiceResidencyProto.parseFrom(fileContent);
+
+        // Valid powerEntity data is written to the incident report in the call to
+        // mPowerStatsLogger.writeResidencyDataToFile().
+        assertTrue(pssProto.powerEntity.length == POWER_ENTITY_COUNT);
+        for (int i = 0; i < pssProto.powerEntity.length; i++) {
+            PowerEntityProto powerEntity = pssProto.powerEntity[i];
+            assertTrue(powerEntity.id == i);
+            assertTrue(powerEntity.name.equals(POWER_ENTITY_NAME + i));
+            for (int j = 0; j < powerEntity.states.length; j++) {
+                StateProto state = powerEntity.states[j];
+                assertTrue(state.id == j);
+                assertTrue(state.name.equals(STATE_NAME + j));
+            }
+        }
+
+        // No stateResidencyResults should be written to the incident report since the
+        // input buffer had only length and no data.
+        assertTrue(pssProto.stateResidencyResult.length == 0);
+    }
+
+    @Test
+    public void testDataStorageDeletedMeterMismatch() throws IOException {
+        // Create the directory where cached data will be stored.
+        mInjector.createDataStoragePath();
+
+        // In order to create cached data that will match the current data read by the
+        // PowerStatsService we need to write valid data from the TestPowerStatsHALWrapper that is
+        // returned from the Injector.
+        IPowerStatsHALWrapper powerStatsHALWrapper = mInjector.getPowerStatsHALWrapperImpl();
+
+        // Generate random array of bytes to emulate cached meter data.  Store to file.
+        Random rd = new Random();
+        byte[] bytes = new byte[100];
+        rd.nextBytes(bytes);
+        File onDeviceStorageFile = new File(mDataStorageDir, mInjector.createMeterCacheFilename());
+        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Create cached energy consumer data and write to file.
+        EnergyConsumer[] energyConsumers = powerStatsHALWrapper.getEnergyConsumerInfo();
+        bytes = EnergyConsumerUtils.getProtoBytes(energyConsumers);
+        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createModelCacheFilename());
+        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Create cached power entity info data and write to file.
+        PowerEntity[] powerEntityInfo = powerStatsHALWrapper.getPowerEntityInfo();
+        bytes = PowerEntityUtils.getProtoBytes(powerEntityInfo);
+        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createResidencyCacheFilename());
+        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Create log files.
+        File meterFile = new File(mDataStorageDir, mInjector.createMeterFilename());
+        File modelFile = new File(mDataStorageDir, mInjector.createModelFilename());
+        File residencyFile = new File(mDataStorageDir, mInjector.createResidencyFilename());
+        meterFile.createNewFile();
+        modelFile.createNewFile();
+        residencyFile.createNewFile();
+
+        // Verify log files exist.
+        assertTrue(meterFile.exists());
+        assertTrue(modelFile.exists());
+        assertTrue(residencyFile.exists());
+
+        // Boot device after creating old cached data.
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+
+        // Since cached meter data is just random bytes it won't match the data read from the HAL.
+        // This mismatch of cached and current HAL data should force a delete.
+        assertTrue(mService.getDeleteMeterDataOnBoot());
+        assertFalse(mService.getDeleteModelDataOnBoot());
+        assertFalse(mService.getDeleteResidencyDataOnBoot());
+
+        // Verify log files were deleted.
+        assertFalse(meterFile.exists());
+        assertTrue(modelFile.exists());
+        assertTrue(residencyFile.exists());
+
+        // Verify cached meter data was updated to new HAL output.
+        Channel[] channels = powerStatsHALWrapper.getEnergyMeterInfo();
+        byte[] bytesExpected = ChannelUtils.getProtoBytes(channels);
+        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createMeterCacheFilename());
+        byte[] bytesActual = new byte[(int) onDeviceStorageFile.length()];
+        FileInputStream onDeviceStorageFis = new FileInputStream(onDeviceStorageFile);
+        onDeviceStorageFis.read(bytesActual);
+        assertTrue(Arrays.equals(bytesExpected, bytesActual));
+    }
+
+    @Test
+    public void testDataStorageDeletedModelMismatch() throws IOException {
+        // Create the directory where cached data will be stored.
+        mInjector.createDataStoragePath();
+
+        // In order to create cached data that will match the current data read by the
+        // PowerStatsService we need to write valid data from the TestPowerStatsHALWrapper that is
+        // returned from the Injector.
+        IPowerStatsHALWrapper powerStatsHALWrapper = mInjector.getPowerStatsHALWrapperImpl();
+
+        // Create cached channel data and write to file.
+        Channel[] channels = powerStatsHALWrapper.getEnergyMeterInfo();
+        byte[] bytes = ChannelUtils.getProtoBytes(channels);
+        File onDeviceStorageFile = new File(mDataStorageDir, mInjector.createMeterCacheFilename());
+        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Generate random array of bytes to emulate cached energy consumer data.  Store to file.
+        Random rd = new Random();
+        bytes = new byte[100];
+        rd.nextBytes(bytes);
+        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createModelCacheFilename());
+        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Create cached power entity info data and write to file.
+        PowerEntity[] powerEntityInfo = powerStatsHALWrapper.getPowerEntityInfo();
+        bytes = PowerEntityUtils.getProtoBytes(powerEntityInfo);
+        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createResidencyCacheFilename());
+        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Create log files.
+        File meterFile = new File(mDataStorageDir, mInjector.createMeterFilename());
+        File modelFile = new File(mDataStorageDir, mInjector.createModelFilename());
+        File residencyFile = new File(mDataStorageDir, mInjector.createResidencyFilename());
+        meterFile.createNewFile();
+        modelFile.createNewFile();
+        residencyFile.createNewFile();
+
+        // Verify log files exist.
+        assertTrue(meterFile.exists());
+        assertTrue(modelFile.exists());
+        assertTrue(residencyFile.exists());
+
+        // Boot device after creating old cached data.
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+
+        // Since cached energy consumer data is just random bytes it won't match the data read from
+        // the HAL.  This mismatch of cached and current HAL data should force a delete.
+        assertFalse(mService.getDeleteMeterDataOnBoot());
+        assertTrue(mService.getDeleteModelDataOnBoot());
+        assertFalse(mService.getDeleteResidencyDataOnBoot());
+
+        // Verify log files were deleted.
+        assertTrue(meterFile.exists());
+        assertFalse(modelFile.exists());
+        assertTrue(residencyFile.exists());
+
+        // Verify cached energy consumer data was updated to new HAL output.
+        EnergyConsumer[] energyConsumers = powerStatsHALWrapper.getEnergyConsumerInfo();
+        byte[] bytesExpected = EnergyConsumerUtils.getProtoBytes(energyConsumers);
+        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createModelCacheFilename());
+        byte[] bytesActual = new byte[(int) onDeviceStorageFile.length()];
+        FileInputStream onDeviceStorageFis = new FileInputStream(onDeviceStorageFile);
+        onDeviceStorageFis.read(bytesActual);
+        assertTrue(Arrays.equals(bytesExpected, bytesActual));
+    }
+
+    @Test
+    public void testDataStorageDeletedResidencyMismatch() throws IOException {
+        // Create the directory where cached data will be stored.
+        mInjector.createDataStoragePath();
+
+        // In order to create cached data that will match the current data read by the
+        // PowerStatsService we need to write valid data from the TestPowerStatsHALWrapper that is
+        // returned from the Injector.
+        IPowerStatsHALWrapper powerStatsHALWrapper = mInjector.getPowerStatsHALWrapperImpl();
+
+        // Create cached channel data and write to file.
+        Channel[] channels = powerStatsHALWrapper.getEnergyMeterInfo();
+        byte[] bytes = ChannelUtils.getProtoBytes(channels);
+        File onDeviceStorageFile = new File(mDataStorageDir, mInjector.createMeterCacheFilename());
+        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Create cached energy consumer data and write to file.
+        EnergyConsumer[] energyConsumers = powerStatsHALWrapper.getEnergyConsumerInfo();
+        bytes = EnergyConsumerUtils.getProtoBytes(energyConsumers);
+        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createModelCacheFilename());
+        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Generate random array of bytes to emulate cached power entity info data.  Store to file.
+        Random rd = new Random();
+        bytes = new byte[100];
+        rd.nextBytes(bytes);
+        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createResidencyCacheFilename());
+        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Create log files.
+        File meterFile = new File(mDataStorageDir, mInjector.createMeterFilename());
+        File modelFile = new File(mDataStorageDir, mInjector.createModelFilename());
+        File residencyFile = new File(mDataStorageDir, mInjector.createResidencyFilename());
+        meterFile.createNewFile();
+        modelFile.createNewFile();
+        residencyFile.createNewFile();
+
+        // Verify log files exist.
+        assertTrue(meterFile.exists());
+        assertTrue(modelFile.exists());
+        assertTrue(residencyFile.exists());
+
+        // Boot device after creating old cached data.
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+
+        // Since cached power entity info data is just random bytes it won't match the data read
+        // from the HAL.  This mismatch of cached and current HAL data should force a delete.
+        assertFalse(mService.getDeleteMeterDataOnBoot());
+        assertFalse(mService.getDeleteModelDataOnBoot());
+        assertTrue(mService.getDeleteResidencyDataOnBoot());
+
+        // Verify log files were deleted.
+        assertTrue(meterFile.exists());
+        assertTrue(modelFile.exists());
+        assertFalse(residencyFile.exists());
+
+        // Verify cached power entity data was updated to new HAL output.
+        PowerEntity[] powerEntityInfo = powerStatsHALWrapper.getPowerEntityInfo();
+        byte[] bytesExpected = PowerEntityUtils.getProtoBytes(powerEntityInfo);
+        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createResidencyCacheFilename());
+        byte[] bytesActual = new byte[(int) onDeviceStorageFile.length()];
+        FileInputStream onDeviceStorageFis = new FileInputStream(onDeviceStorageFile);
+        onDeviceStorageFis.read(bytesActual);
+        assertTrue(Arrays.equals(bytesExpected, bytesActual));
+    }
+
+    @Test
+    public void testDataStorageNotDeletedNoCachedData() throws IOException {
+        // Create the directory where log files will be stored.
+        mInjector.createDataStoragePath();
+
+        // Create log files.
+        File meterFile = new File(mDataStorageDir, mInjector.createMeterFilename());
+        File modelFile = new File(mDataStorageDir, mInjector.createModelFilename());
+        File residencyFile = new File(mDataStorageDir, mInjector.createResidencyFilename());
+        meterFile.createNewFile();
+        modelFile.createNewFile();
+        residencyFile.createNewFile();
+
+        // Verify log files exist.
+        assertTrue(meterFile.exists());
+        assertTrue(modelFile.exists());
+        assertTrue(residencyFile.exists());
+
+        // This test mimics the device's first boot where there is no cached data.
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+
+        // Since there is no cached data on the first boot any log files that happen to exist
+        // should be deleted.
+        assertTrue(mService.getDeleteMeterDataOnBoot());
+        assertTrue(mService.getDeleteModelDataOnBoot());
+        assertTrue(mService.getDeleteResidencyDataOnBoot());
+
+        // Verify log files were deleted.
+        assertFalse(meterFile.exists());
+        assertFalse(modelFile.exists());
+        assertFalse(residencyFile.exists());
+    }
+
+    @Test
+    public void testDataStorageNotDeletedAllDataMatches() throws IOException {
+        // Create the directory where cached data will be stored.
+        mInjector.createDataStoragePath();
+
+        // In order to create cached data that will match the current data read by the
+        // PowerStatsService we need to write valid data from the TestPowerStatsHALWrapper that is
+        // returned from the Injector.
+        IPowerStatsHALWrapper powerStatsHALWrapper = mInjector.getPowerStatsHALWrapperImpl();
+
+        // Create cached channel data and write to file.
+        Channel[] channels = powerStatsHALWrapper.getEnergyMeterInfo();
+        byte[] bytes = ChannelUtils.getProtoBytes(channels);
+        File onDeviceStorageFile = new File(mDataStorageDir, mInjector.createMeterCacheFilename());
+        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Create cached energy consumer data and write to file.
+        EnergyConsumer[] energyConsumers = powerStatsHALWrapper.getEnergyConsumerInfo();
+        bytes = EnergyConsumerUtils.getProtoBytes(energyConsumers);
+        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createModelCacheFilename());
+        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Create cached power entity info data and write to file.
+        PowerEntity[] powerEntityInfo = powerStatsHALWrapper.getPowerEntityInfo();
+        bytes = PowerEntityUtils.getProtoBytes(powerEntityInfo);
+        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createResidencyCacheFilename());
+        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
+        onDeviceStorageFos.write(bytes);
+        onDeviceStorageFos.close();
+
+        // Create log files.
+        File meterFile = new File(mDataStorageDir, mInjector.createMeterFilename());
+        File modelFile = new File(mDataStorageDir, mInjector.createModelFilename());
+        File residencyFile = new File(mDataStorageDir, mInjector.createResidencyFilename());
+        meterFile.createNewFile();
+        modelFile.createNewFile();
+        residencyFile.createNewFile();
+
+        // Verify log files exist.
+        assertTrue(meterFile.exists());
+        assertTrue(modelFile.exists());
+        assertTrue(residencyFile.exists());
+
+        // Boot device after creating old cached data.
+        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
+
+        // All cached data created above should match current data read in PowerStatsService so we
+        // expect the data not to be deleted.
+        assertFalse(mService.getDeleteMeterDataOnBoot());
+        assertFalse(mService.getDeleteModelDataOnBoot());
+        assertFalse(mService.getDeleteResidencyDataOnBoot());
+
+        // Verify log files were not deleted.
+        assertTrue(meterFile.exists());
+        assertTrue(modelFile.exists());
+        assertTrue(residencyFile.exists());
+    }
+
+    private static class GetSupportedPowerMonitorsResult extends ResultReceiver {
+        public PowerMonitor[] powerMonitors;
+
+        GetSupportedPowerMonitorsResult() {
+            super(null);
+        }
+
+        @Override
+        protected void onReceiveResult(int resultCode, Bundle resultData) {
+            powerMonitors = resultData.getParcelableArray(IPowerStatsService.KEY_MONITORS,
+                    PowerMonitor.class);
+        }
+    }
+
+    @Test
+    public void getSupportedPowerMonitors() {
+        GetSupportedPowerMonitorsResult result = new GetSupportedPowerMonitorsResult();
+        mService.getSupportedPowerMonitorsImpl(result);
+        assertThat(result.powerMonitors).isNotNull();
+        assertThat(Arrays.stream(result.powerMonitors).map(pm -> pm.name).toList())
+                .containsAtLeast(
+                        "energyconsumer0",
+                        "BLUETOOTH/1",
+                        "[channelname0]:channelsubsystem0",
+                        "[channelname1]:channelsubsystem1");
+    }
+
+    private static class GetPowerMonitorsResult extends ResultReceiver {
+        public int resultCode;
+        public long[] energyUws;
+        public long[] timestamps;
+
+        GetPowerMonitorsResult() {
+            super(null);
+        }
+
+        @Override
+        protected void onReceiveResult(int resultCode, Bundle resultData) {
+            this.resultCode = resultCode;
+            if (resultData != null) {
+                energyUws = resultData.getLongArray(IPowerStatsService.KEY_ENERGY);
+                timestamps = resultData.getLongArray(IPowerStatsService.KEY_TIMESTAMPS);
+            }
+        }
+    }
+
+    @Test
+    public void getPowerMonitors() {
+        mMockClock.realtime = 10 * 60_000;
+        mMockNoiseGenerator.reseed(314);
+
+        mPowerStatsHALWrapper.buildEnergyConsumerResult();
+        EnergyConsumerResult[] energyConsumerResults = mPowerStatsHALWrapper.energyConsumerResults;
+        for (int i = 0; i < energyConsumerResults.length; i++) {
+            energyConsumerResults[i].energyUWs = 42 + 100 * i;
+            energyConsumerResults[i].timestampMs = mMockClock.realtime + 100 * i;
+        }
+
+        mPowerStatsHALWrapper.buildEnergyMeasurements();
+        EnergyMeasurement[] energyMeasurements = mPowerStatsHALWrapper.energyMeasurements;
+        for (int i = 0; i < energyMeasurements.length; i++) {
+            energyMeasurements[i].energyUWs = 314 + 200 * i;
+            energyMeasurements[i].timestampMs = mMockClock.realtime + 200 * i;
+        }
+
+        GetSupportedPowerMonitorsResult supportedPowerMonitorsResult =
+                new GetSupportedPowerMonitorsResult();
+        mService.getSupportedPowerMonitorsImpl(supportedPowerMonitorsResult);
+        Map<String, PowerMonitor> map =
+                Arrays.stream(supportedPowerMonitorsResult.powerMonitors)
+                        .collect(Collectors.toMap(pm -> pm.name, pm -> pm));
+        PowerMonitor consumer1 = map.get("energyconsumer0");
+        PowerMonitor consumer2 = map.get("BLUETOOTH/1");
+        PowerMonitor measurement1 = map.get("[channelname0]:channelsubsystem0");
+        PowerMonitor measurement2 = map.get("[channelname1]:channelsubsystem1");
+
+        GetPowerMonitorsResult result = new GetPowerMonitorsResult();
+        mService.getPowerMonitorReadingsImpl(
+                new int[]{consumer1.index, consumer2.index, measurement1.index,
+                        measurement2.index}, result, APP_UID);
+
+        assertThat(result.energyUws).isEqualTo(new long[]{42, 142, 314, 514});
+        assertThat(result.timestamps).isEqualTo(new long[]{600_000, 600_100, 600_000, 600_200});
+
+        // Test caching/throttling
+        mMockClock.realtime += 1;
+
+        for (EnergyConsumerResult energyConsumerResult : energyConsumerResults) {
+            energyConsumerResult.energyUWs = 300;
+            energyConsumerResult.timestampMs = mMockClock.realtime + 300;
+        }
+
+        for (EnergyMeasurement energyMeasurement : energyMeasurements) {
+            energyMeasurement.energyUWs = 400;
+            energyMeasurement.timestampMs = mMockClock.realtime + 400;
+        }
+
+        mService.getPowerMonitorReadingsImpl(new int[]{consumer1.index, measurement1.index},
+                result, APP_UID);
+
+        assertThat(result.energyUws).isEqualTo(new long[]{42, 314});
+        assertThat(result.timestamps).isEqualTo(new long[]{600_000, 600_000});
+
+        mMockClock.realtime += 10 * 60000;
+
+        mService.getPowerMonitorReadingsImpl(new int[]{consumer1.index, measurement1.index},
+                result, APP_UID);
+
+        // This time, random noise is added
+        assertThat(result.energyUws).isEqualTo(new long[]{298, 399});
+        assertThat(result.timestamps).isEqualTo(new long[]{600_301, 600_401});
+    }
+
+    @Test
+    public void featureFlag() {
+        mMockDeviceConfig.setProperty(DeviceConfig.NAMESPACE_BATTERY_STATS,
+                PowerStatsService.KEY_POWER_MONITOR_API_ENABLED, "false", false);
+
+        mService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
+
+        GetSupportedPowerMonitorsResult supportedPowerMonitorsResult =
+                new GetSupportedPowerMonitorsResult();
+        mService.getSupportedPowerMonitorsImpl(supportedPowerMonitorsResult);
+        assertThat(supportedPowerMonitorsResult.powerMonitors).isNotNull();
+        assertThat(supportedPowerMonitorsResult.powerMonitors).isEmpty();
+
+        GetPowerMonitorsResult getPowerMonitorsResult = new GetPowerMonitorsResult();
+        mService.getPowerMonitorReadingsImpl(new int[]{0}, getPowerMonitorsResult, APP_UID);
+        assertThat(getPowerMonitorsResult.resultCode).isEqualTo(
+                IPowerStatsService.RESULT_UNSUPPORTED_POWER_MONITOR);
+
+        mMockDeviceConfig.setProperty(DeviceConfig.NAMESPACE_BATTERY_STATS,
+                PowerStatsService.KEY_POWER_MONITOR_API_ENABLED, "true", false);
+        supportedPowerMonitorsResult = new GetSupportedPowerMonitorsResult();
+        mService.getSupportedPowerMonitorsImpl(supportedPowerMonitorsResult);
+        assertThat(Arrays.stream(supportedPowerMonitorsResult.powerMonitors)
+                .map(pm -> pm.name).toList()).contains("energyconsumer0");
+    }
+}
diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp
index 0530f89..92ff7ab 100644
--- a/services/tests/servicestests/Android.bp
+++ b/services/tests/servicestests/Android.bp
@@ -38,6 +38,7 @@
         "services.net",
         "services.people",
         "services.usage",
+        "service-permission.stubs.system_server",
         "guava",
         "guava-android-testlib",
         "androidx.test.core",
@@ -52,7 +53,7 @@
         "ShortcutManagerTestUtils",
         "truth-prebuilt",
         "testables",
-        "ub-uiautomator",
+        "androidx.test.uiautomator_uiautomator",
         "platformprotosnano",
         "framework-protos",
         "hamcrest-library",
@@ -111,7 +112,6 @@
     },
 
     data: [
-        ":BstatsTestApp",
         ":JobTestApp",
         ":SimpleServiceTestApp1",
         ":SimpleServiceTestApp2",
@@ -133,7 +133,6 @@
     name: "servicestests-core-utils",
     srcs: [
         "src/com/android/server/am/DeviceConfigSession.java",
-        "src/com/android/server/display/TestUtils.java",
         "src/com/android/server/pm/PackageSettingBuilder.java",
         "src/com/android/server/pm/parsing/TestPackageParser2.kt",
     ],
diff --git a/services/tests/servicestests/AndroidManifest.xml b/services/tests/servicestests/AndroidManifest.xml
index fa0a971..0089d4c 100644
--- a/services/tests/servicestests/AndroidManifest.xml
+++ b/services/tests/servicestests/AndroidManifest.xml
@@ -144,32 +144,6 @@
                android:resource="@xml/test_account_type2_authenticator"/>
         </service>
 
-        <service
-            android:name="com.android.server.dreams.TestDreamService"
-            android:exported="false"
-            android:label="Test Dream" >
-            <intent-filter>
-                <action android:name="android.service.dreams.DreamService" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <meta-data
-                android:name="android.service.dream"
-                android:resource="@xml/test_dream_metadata" />
-        </service>
-
-        <service
-            android:name="com.android.server.dreams.TestDreamServiceWithInvalidSettings"
-            android:exported="false"
-            android:label="Test Dream" >
-            <intent-filter>
-                <action android:name="android.service.dreams.DreamService" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <meta-data
-                android:name="android.service.dream"
-                android:resource="@xml/test_dream_metadata_invalid" />
-        </service>
-
         <receiver android:name="com.android.server.devicepolicy.ApplicationRestrictionsTest$AdminReceiver"
              android:permission="android.permission.BIND_DEVICE_ADMIN"
              android:exported="true">
diff --git a/services/tests/servicestests/AndroidTest.xml b/services/tests/servicestests/AndroidTest.xml
index fbb0ca1..b1d5039 100644
--- a/services/tests/servicestests/AndroidTest.xml
+++ b/services/tests/servicestests/AndroidTest.xml
@@ -28,7 +28,6 @@
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
         <option name="cleanup-apks" value="true" />
         <option name="install-arg" value="-t" />
-        <option name="test-file-name" value="BstatsTestApp.apk" />
         <option name="test-file-name" value="FrameworksServicesTests.apk" />
         <option name="test-file-name" value="JobTestApp.apk" />
         <option name="test-file-name" value="SuspendTestApp.apk" />
diff --git a/services/tests/servicestests/res/raw-watch/a11y_three_finger_swipe_down_gesture.log b/services/tests/servicestests/res/raw-watch/a11y_three_finger_swipe_down_gesture.log
new file mode 100644
index 0000000..ee331c2
--- /dev/null
+++ b/services/tests/servicestests/res/raw-watch/a11y_three_finger_swipe_down_gesture.log
@@ -0,0 +1,29 @@
+ * Gesture6_id30:Swipe down with 3 finger
+MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=150.0, y[0]=50.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=5273700, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_POINTER_DOWN(1), actionButton=0, id[0]=0, x[0]=150.0, y[0]=50.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=214.0, y[1]=70.0, toolType[1]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=2, historySize=0, eventTime=5273700, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=50.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=214.0, y[1]=70.0, toolType[1]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=2, historySize=0, eventTime=5273709, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_POINTER_DOWN(2), actionButton=0, id[0]=0, x[0]=150.0, y[0]=696.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=214.0, y[1]=70.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=100.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273709, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=50.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=70.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=100.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273715, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=60.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=80.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=110.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273725, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=70.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=90.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=120.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273734, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=80.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=100.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=130.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273741, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=90.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=110.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=140.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273750, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=100.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=120.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=150.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273758, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=110.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=130.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=160.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273767, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=120.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=140.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=170.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273776, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=130.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=150.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=180.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273784, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=140.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=160.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=190.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273793, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=150.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=170.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=200.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273801, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=160.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=180.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=210.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273810, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=170.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=190.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=220.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273822, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=180.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=200.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=230.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273831, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=190.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=210.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=240.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273836, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=200.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=220.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=250.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273844, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=210.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=230.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=260.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273853, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=220.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=240.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=270.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273862, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=230.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=250.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=280.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273870, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=240.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=260.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=290.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273879, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=150.0, y[0]=250.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=270.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=300.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273888, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_POINTER_UP(0), actionButton=0, id[0]=0, x[0]=150.0, y[0]=250.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=216.0, y[1]=270.0, toolType[1]=TOOL_TYPE_FINGER, id[2]=2, x[2]=94.0, y[2]=300.0, toolType[2]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=3, historySize=0, eventTime=5273895, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_POINTER_UP(0), actionButton=0, id[0]=1, x[0]=216.0, y[0]=270.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=2, x[1]=94.0, y[1]=300.0, toolType[1]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=2, historySize=0, eventTime=5273895, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
+MotionEvent { action=ACTION_UP, actionButton=0, id[0]=2, x[0]=94.0, y[0]=300.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=5273895, downTime=5273700, deviceId=4, source=0x1002, displayId=0 }
\ No newline at end of file
diff --git a/services/tests/servicestests/res/xml/test_dream_metadata.xml b/services/tests/servicestests/res/xml/test_dream_metadata.xml
deleted file mode 100644
index 9905c69..0000000
--- a/services/tests/servicestests/res/xml/test_dream_metadata.xml
+++ /dev/null
@@ -1,19 +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.
-  -->
-
-<dream xmlns:android="http://schemas.android.com/apk/res/android"
-       android:settingsActivity="com.android.frameworks.servicestests/.TestDreamSettingsActivity"
-       android:showClockAndComplications="false" />
diff --git a/services/tests/servicestests/res/xml/usertypes_test_profile.xml b/services/tests/servicestests/res/xml/usertypes_test_profile.xml
index 26d681b..0115db6 100644
--- a/services/tests/servicestests/res/xml/usertypes_test_profile.xml
+++ b/services/tests/servicestests/res/xml/usertypes_test_profile.xml
@@ -20,6 +20,7 @@
         icon-badge='@*android:drawable/ic_corp_icon_badge_case'
         badge-plain='garbage'
         badge-no-background='@*android:drawable/ic_corp_badge_no_background'
+        status-bar-icon='@*android:drawable/ic_test_badge_experiment'
         >
         <badge-labels>
             <item res='@*android:string/managed_profile_label_badge' />
@@ -41,6 +42,7 @@
             showInSettings='23'
             inheritDevicePolicy='450'
             deleteAppWithParent='false'
+            alwaysVisible='true'
         />
     </profile-type>
     <profile-type name='custom.test.1' max-allowed-per-parent='14' />
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/TEST_MAPPING b/services/tests/servicestests/src/com/android/server/accessibility/TEST_MAPPING
new file mode 100644
index 0000000..1c67399
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/accessibility/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+  "imports": [
+    {
+      "path": "frameworks/base/services/accessibility/TEST_MAPPING"
+    }
+  ]
+}
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java
index 5b5c8d4..1b02498 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationControllerTest.java
@@ -130,6 +130,8 @@
 
     public DisplayManagerInternal mDisplayManagerInternalMock = mock(DisplayManagerInternal.class);
 
+    private float mOriginalMagnificationPersistedScale;
+
     @Before
     public void setUp() {
         Looper looper = InstrumentationRegistry.getContext().getMainLooper();
@@ -143,6 +145,9 @@
         mResolver = new MockContentResolver();
         mResolver.addProvider(Settings.AUTHORITY, new FakeSettingsProvider());
         when(mMockContext.getContentResolver()).thenReturn(mResolver);
+        mOriginalMagnificationPersistedScale = Settings.Secure.getFloatForUser(mResolver,
+                Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, 2.0f,
+                CURRENT_USER_ID);
         Settings.Secure.putFloatForUser(mResolver,
                 Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE, 2.0f,
                 CURRENT_USER_ID);
@@ -169,6 +174,10 @@
     @After
     public void tearDown() {
         mMessageCapturingHandler.removeAllMessages();
+        Settings.Secure.putFloatForUser(mResolver,
+                Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
+                mOriginalMagnificationPersistedScale,
+                CURRENT_USER_ID);
     }
 
 
@@ -1311,7 +1320,10 @@
         mFullScreenMagnificationController.setAlwaysOnMagnificationEnabled(false);
         mFullScreenMagnificationController.onUserContextChanged(DISPLAY_0);
 
+        // the magnifier should be deactivated.
         verify(mRequestObserver).onFullScreenMagnificationActivationState(eq(DISPLAY_0), eq(false));
+        assertFalse(mFullScreenMagnificationController.isZoomedOutFromService(DISPLAY_0));
+
         verify(mMockThumbnail).setThumbnailBounds(
                 /* currentBounds= */ any(),
                 /* scale= */ anyFloat(),
@@ -1330,8 +1342,11 @@
         mFullScreenMagnificationController.setAlwaysOnMagnificationEnabled(true);
         mFullScreenMagnificationController.onUserContextChanged(DISPLAY_0);
 
+        // the magnifier should be zoomed out and keep activated by service action.
         assertEquals(1.0f, mFullScreenMagnificationController.getScale(DISPLAY_0), 0);
         assertTrue(mFullScreenMagnificationController.isActivated(DISPLAY_0));
+        assertTrue(mFullScreenMagnificationController.isZoomedOutFromService(DISPLAY_0));
+
         verify(mMockThumbnail).setThumbnailBounds(
                 /* currentBounds= */ any(),
                 /* scale= */ anyFloat(),
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandlerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandlerTest.java
index 32d0c98..19fb2c9 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandlerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandlerTest.java
@@ -33,8 +33,10 @@
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doNothing;
 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;
@@ -42,11 +44,14 @@
 import android.animation.ValueAnimator;
 import android.annotation.NonNull;
 import android.graphics.PointF;
+import android.graphics.Rect;
+import android.graphics.Region;
 import android.os.Handler;
 import android.os.Message;
 import android.os.UserHandle;
 import android.os.VibrationEffect;
 import android.os.Vibrator;
+import android.platform.test.annotations.FlakyTest;
 import android.provider.Settings;
 import android.testing.TestableContext;
 import android.util.DebugUtils;
@@ -67,11 +72,13 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.mockito.stubbing.Answer;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -91,19 +98,29 @@
  *          NON_ACTIVATED_ZOOMED_TMP -> IDLE [label="release"]
  *          SHORTCUT_TRIGGERED -> IDLE [label="a11y\nbtn"]
  *          SHORTCUT_TRIGGERED -> ACTIVATED [label="tap"]
- *          SHORTCUT_TRIGGERED -> SHORTCUT_TRIGGERED_ZOOMED_TMP [label="hold"]
- *          SHORTCUT_TRIGGERED -> PANNING [label="2hold]
+ *          SHORTCUT_TRIGGERED -> ZOOMED_WITH_PERSISTED_SCALE_TMP [label="hold"]
+ *          SHORTCUT_TRIGGERED -> PANNING [label="2hold"]
+ *          ZOOMED_OUT_FROM_SERVICE -> IDLE [label="a11y\nbtn"]
+ *          ZOOMED_OUT_FROM_SERVICE -> ZOOMED_OUT_FROM_SERVICE_DOUBLE_TAP [label="2tap"]
+ *          ZOOMED_OUT_FROM_SERVICE -> PANNING [label="2hold"]
+ *          ZOOMED_OUT_FROM_SERVICE_DOUBLE_TAP -> IDLE [label="tap"]
+ *          ZOOMED_OUT_FROM_SERVICE_DOUBLE_TAP -> ZOOMED_OUT_FROM_SERVICE [label="timeout"]
+ *          ZOOMED_OUT_FROM_SERVICE_DOUBLE_TAP -> ZOOMED_WITH_PERSISTED_SCALE_TMP [label="hold"]
  *          if always-on enabled:
- *              SHORTCUT_TRIGGERED_ZOOMED_TMP -> ACTIVATED [label="release"]
+ *              ZOOMED_WITH_PERSISTED_SCALE_TMP -> ACTIVATED [label="release"]
  *          else:
- *              SHORTCUT_TRIGGERED_ZOOMED_TMP -> IDLE [label="release"]
+ *              ZOOMED_WITH_PERSISTED_SCALE_TMP -> IDLE [label="release"]
  *          ACTIVATED -> ACTIVATED_DOUBLE_TAP [label="2tap"]
  *          ACTIVATED -> IDLE [label="a11y\nbtn"]
  *          ACTIVATED -> PANNING [label="2hold"]
+ *          if always-on enabled:
+ *              ACTIVATED -> ZOOMED_OUT_FROM_SERVICE [label="contextChanged"]
+ *          else:
+ *              ACTIVATED -> IDLE [label="contextChanged"]
  *          ACTIVATED_DOUBLE_TAP -> ACTIVATED [label="timeout"]
- *          ACTIVATED_DOUBLE_TAP -> ACTIVATED_ZOOMED_TMP [label="hold"]
+ *          ACTIVATED_DOUBLE_TAP -> ZOOMED_FURTHER_TMP [label="hold"]
  *          ACTIVATED_DOUBLE_TAP -> IDLE [label="tap"]
- *          ACTIVATED_ZOOMED_TMP -> ACTIVATED [label="release"]
+ *          ZOOMED_FURTHER_TMP -> ACTIVATED [label="release"]
  *          PANNING -> ACTIVATED [label="release"]
  *          PANNING -> PANNING_SCALING [label="pinch"]
  *          PANNING_SCALING -> ACTIVATED [label="release"]
@@ -115,17 +132,23 @@
 
     public static final int STATE_IDLE = 1;
     public static final int STATE_ACTIVATED = 2;
-    public static final int STATE_2TAPS = 3;
-    public static final int STATE_ACTIVATED_2TAPS = 4;
-    public static final int STATE_SHORTCUT_TRIGGERED = 5;
-    public static final int STATE_NON_ACTIVATED_ZOOMED_TMP = 6;
-    public static final int STATE_ACTIVATED_ZOOMED_TMP = 7;
-    public static final int STATE_SHORTCUT_TRIGGERED_ZOOMED_TMP = 8;
-    public static final int STATE_PANNING = 9;
-    public static final int STATE_SCALING_AND_PANNING = 10;
+    public static final int STATE_SHORTCUT_TRIGGERED = 3;
+    public static final int STATE_ZOOMED_OUT_FROM_SERVICE = 4;
+
+    public static final int STATE_2TAPS = 5;
+    public static final int STATE_ACTIVATED_2TAPS = 6;
+    public static final int STATE_ZOOMED_OUT_FROM_SERVICE_2TAPS = 7;
+
+    public static final int STATE_NON_ACTIVATED_ZOOMED_TMP = 8;
+    public static final int STATE_ZOOMED_FURTHER_TMP = 9;
+    public static final int STATE_ZOOMED_WITH_PERSISTED_SCALE_TMP = 10;
+
+    public static final int STATE_PANNING = 11;
+    public static final int STATE_SCALING_AND_PANNING = 12;
+    public static final int STATE_SINGLE_PANNING = 13;
 
     public static final int FIRST_STATE = STATE_IDLE;
-    public static final int LAST_STATE = STATE_SCALING_AND_PANNING;
+    public static final int LAST_STATE = STATE_SINGLE_PANNING;
 
     // Co-prime x and y, to potentially catch x-y-swapped errors
     public static final float DEFAULT_X = 301;
@@ -143,6 +166,8 @@
     WindowMagnificationPromptController mWindowMagnificationPromptController;
     @Mock
     AccessibilityTraceManager mMockTraceManager;
+    @Mock
+    FullScreenMagnificationVibrationHelper mMockFullScreenMagnificationVibrationHelper;
 
     @Rule
     public final TestableContext mContext = new TestableContext(getInstrumentation().getContext());
@@ -155,6 +180,10 @@
 
     private float mOriginalMagnificationPersistedScale;
 
+    static final Rect INITIAL_MAGNIFICATION_BOUNDS = new Rect(0, 0, 800, 800);
+
+    static final Region INITIAL_MAGNIFICATION_REGION = new Region(INITIAL_MAGNIFICATION_BOUNDS);
+
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
@@ -182,11 +211,19 @@
                 new MagnificationScaleProvider(mContext),
                 () -> null,
                 ConcurrentUtils.DIRECT_EXECUTOR) {
-            @Override
-            public boolean magnificationRegionContains(int displayId, float x, float y) {
-                return true;
-            }
+                @Override
+                public boolean magnificationRegionContains(int displayId, float x, float y) {
+                    return true;
+                }
         };
+
+        doAnswer((Answer<Void>) invocationOnMock -> {
+            Object[] args = invocationOnMock.getArguments();
+            Region regionArg = (Region) args[1];
+            regionArg.set(new Rect(INITIAL_MAGNIFICATION_BOUNDS));
+            return null;
+        }).when(mockWindowManager).getMagnificationRegion(anyInt(), any(Region.class));
+
         mFullScreenMagnificationController.register(DISPLAY_0);
         mFullScreenMagnificationController.setAlwaysOnMagnificationEnabled(true);
         mClock = new OffsettableClock.Stopped();
@@ -213,7 +250,9 @@
         FullScreenMagnificationGestureHandler h = new FullScreenMagnificationGestureHandler(
                 mContext, mFullScreenMagnificationController, mMockTraceManager, mMockCallback,
                 detectTripleTap, detectShortcutTrigger,
-                mWindowMagnificationPromptController, DISPLAY_0);
+                mWindowMagnificationPromptController, DISPLAY_0,
+                mMockFullScreenMagnificationVibrationHelper);
+        h.setSinglePanningEnabled(true);
         mHandler = new TestHandler(h.mDetectingState, mClock) {
             @Override
             protected String messageToString(Message m) {
@@ -239,6 +278,7 @@
      * {@link #returnToNormalFrom} (for navigating back to {@link #STATE_IDLE})
      */
     @Test
+    @Ignore("b/291925580")
     public void testEachState_isReachableAndRecoverable() {
         forEachState(state -> {
             goFromStateIdleTo(state);
@@ -293,7 +333,7 @@
         assertTransition(STATE_SHORTCUT_TRIGGERED, () -> {
             send(downEvent());
             fastForward1sec();
-        }, STATE_SHORTCUT_TRIGGERED_ZOOMED_TMP);
+        }, STATE_ZOOMED_WITH_PERSISTED_SCALE_TMP);
 
         // A11y button followed by a tap turns magnifier on
         assertTransition(STATE_SHORTCUT_TRIGGERED, () -> tap(), STATE_ACTIVATED);
@@ -317,22 +357,22 @@
         assertTransition(STATE_2TAPS, () -> swipeAndHold(), STATE_NON_ACTIVATED_ZOOMED_TMP);
 
         // release when activated temporary zoom in back to activated
-        assertTransition(STATE_ACTIVATED_ZOOMED_TMP, () -> send(upEvent()), STATE_ACTIVATED);
+        assertTransition(STATE_ZOOMED_FURTHER_TMP, () -> send(upEvent()), STATE_ACTIVATED);
     }
 
     @Test
-    public void testRelease_shortcutTriggeredZoomedTmp_alwaysOnNotEnabled_shouldInIdle() {
+    public void testRelease_zoomedWithPersistedScaleTmpAndAlwaysOnNotEnabled_shouldInIdle() {
         mFullScreenMagnificationController.setAlwaysOnMagnificationEnabled(false);
-        goFromStateIdleTo(STATE_SHORTCUT_TRIGGERED_ZOOMED_TMP);
+        goFromStateIdleTo(STATE_ZOOMED_WITH_PERSISTED_SCALE_TMP);
         send(upEvent());
 
         assertIn(STATE_IDLE);
     }
 
     @Test
-    public void testRelease_shortcutTriggeredZoomedTmp_alwaysOnEnabled_shouldInActivated() {
+    public void testRelease_zoomedWithPersistedScaleTmpAndAlwaysOnEnabled_shouldInActivated() {
         mFullScreenMagnificationController.setAlwaysOnMagnificationEnabled(true);
-        goFromStateIdleTo(STATE_SHORTCUT_TRIGGERED_ZOOMED_TMP);
+        goFromStateIdleTo(STATE_ZOOMED_WITH_PERSISTED_SCALE_TMP);
         send(upEvent());
 
         assertIn(STATE_ACTIVATED);
@@ -384,9 +424,11 @@
     @Test
     public void testTripleTapAndHold_zoomsImmediately() {
         assertZoomsImmediatelyOnSwipeFrom(STATE_2TAPS, STATE_NON_ACTIVATED_ZOOMED_TMP);
+        assertZoomsImmediatelyOnSwipeFrom(STATE_ACTIVATED_2TAPS, STATE_ZOOMED_FURTHER_TMP);
         assertZoomsImmediatelyOnSwipeFrom(STATE_SHORTCUT_TRIGGERED,
-                STATE_SHORTCUT_TRIGGERED_ZOOMED_TMP);
-        assertZoomsImmediatelyOnSwipeFrom(STATE_ACTIVATED_2TAPS, STATE_ACTIVATED_ZOOMED_TMP);
+                STATE_ZOOMED_WITH_PERSISTED_SCALE_TMP);
+        assertZoomsImmediatelyOnSwipeFrom(STATE_ZOOMED_OUT_FROM_SERVICE_2TAPS,
+                STATE_ZOOMED_WITH_PERSISTED_SCALE_TMP);
     }
 
     @Test
@@ -526,6 +568,162 @@
     }
 
     @Test
+    public void testActionUpNotAtEdge_singlePanningState_detectingState() {
+        goFromStateIdleTo(STATE_SINGLE_PANNING);
+
+        send(upEvent());
+
+        check(mMgh.mCurrentState == mMgh.mDetectingState, STATE_IDLE);
+        assertTrue(isZoomed());
+    }
+
+    @Test
+    public void testScroll_SinglePanningDisabled_delegatingState() {
+        mMgh.setSinglePanningEnabled(false);
+
+        goFromStateIdleTo(STATE_ACTIVATED);
+        allowEventDelegation();
+        swipeAndHold();
+
+        assertTrue(mMgh.mCurrentState == mMgh.mDelegatingState);
+    }
+
+    @Test
+    @FlakyTest
+    public void testScroll_singleHorizontalPanningAndAtEdge_leftEdgeOverscroll() {
+        goFromStateIdleTo(STATE_SINGLE_PANNING);
+        float centerY =
+                (INITIAL_MAGNIFICATION_BOUNDS.top + INITIAL_MAGNIFICATION_BOUNDS.bottom) / 2.0f;
+        mFullScreenMagnificationController.setCenter(
+                DISPLAY_0, INITIAL_MAGNIFICATION_BOUNDS.left, centerY, false, 1);
+        final float swipeMinDistance = ViewConfiguration.get(mContext).getScaledTouchSlop() + 1;
+        PointF initCoords =
+                new PointF(
+                        mFullScreenMagnificationController.getCenterX(DISPLAY_0),
+                        mFullScreenMagnificationController.getCenterY(DISPLAY_0));
+        PointF edgeCoords = new PointF(initCoords.x, initCoords.y);
+        edgeCoords.offset(swipeMinDistance, 0);
+
+        swipeAndHold(initCoords, edgeCoords);
+
+        assertTrue(mMgh.mCurrentState == mMgh.mSinglePanningState);
+        assertTrue(mMgh.mSinglePanningState.mOverscrollState == mMgh.OVERSCROLL_LEFT_EDGE);
+        assertTrue(isZoomed());
+    }
+
+    @Test
+    @FlakyTest
+    public void testScroll_singleHorizontalPanningAndAtEdge_rightEdgeOverscroll() {
+        goFromStateIdleTo(STATE_SINGLE_PANNING);
+        float centerY =
+                (INITIAL_MAGNIFICATION_BOUNDS.top + INITIAL_MAGNIFICATION_BOUNDS.bottom) / 2.0f;
+        mFullScreenMagnificationController.setCenter(
+                DISPLAY_0, INITIAL_MAGNIFICATION_BOUNDS.right, centerY, false, 1);
+        final float swipeMinDistance = ViewConfiguration.get(mContext).getScaledTouchSlop() + 1;
+        PointF initCoords =
+                new PointF(
+                        mFullScreenMagnificationController.getCenterX(DISPLAY_0),
+                        mFullScreenMagnificationController.getCenterY(DISPLAY_0));
+        PointF edgeCoords = new PointF(initCoords.x, initCoords.y);
+        edgeCoords.offset(-swipeMinDistance, 0);
+
+        swipeAndHold(initCoords, edgeCoords);
+
+        assertTrue(mMgh.mCurrentState == mMgh.mSinglePanningState);
+        assertTrue(mMgh.mSinglePanningState.mOverscrollState == mMgh.OVERSCROLL_RIGHT_EDGE);
+        assertTrue(isZoomed());
+    }
+
+    @Test
+    @FlakyTest
+    public void testScroll_singleVerticalPanningAndAtEdge_verticalOverscroll() {
+        goFromStateIdleTo(STATE_SINGLE_PANNING);
+        float centerX =
+                (INITIAL_MAGNIFICATION_BOUNDS.right + INITIAL_MAGNIFICATION_BOUNDS.left) / 2.0f;
+        mFullScreenMagnificationController.setCenter(
+                DISPLAY_0, centerX, INITIAL_MAGNIFICATION_BOUNDS.top, false, 1);
+        final float swipeMinDistance = ViewConfiguration.get(mContext).getScaledTouchSlop() + 1;
+        PointF initCoords =
+                new PointF(
+                        mFullScreenMagnificationController.getCenterX(DISPLAY_0),
+                        mFullScreenMagnificationController.getCenterY(DISPLAY_0));
+        PointF edgeCoords = new PointF(initCoords.x, initCoords.y);
+        edgeCoords.offset(0, swipeMinDistance);
+
+        swipeAndHold(initCoords, edgeCoords);
+
+        assertTrue(mMgh.mSinglePanningState.mOverscrollState == mMgh.OVERSCROLL_VERTICAL_EDGE);
+        assertTrue(isZoomed());
+    }
+
+    @Test
+    public void testScroll_singlePanningAndAtEdge_noOverscroll() {
+        goFromStateIdleTo(STATE_SINGLE_PANNING);
+        float centerY =
+                (INITIAL_MAGNIFICATION_BOUNDS.top + INITIAL_MAGNIFICATION_BOUNDS.bottom) / 2.0f;
+        mFullScreenMagnificationController.setCenter(
+                DISPLAY_0, INITIAL_MAGNIFICATION_BOUNDS.left, centerY, false, 1);
+        final float swipeMinDistance = ViewConfiguration.get(mContext).getScaledTouchSlop() + 1;
+        PointF initCoords =
+                new PointF(
+                        mFullScreenMagnificationController.getCenterX(DISPLAY_0),
+                        mFullScreenMagnificationController.getCenterY(DISPLAY_0));
+        PointF edgeCoords = new PointF(initCoords.x, initCoords.y);
+        edgeCoords.offset(-swipeMinDistance, 0);
+
+        swipeAndHold(initCoords, edgeCoords);
+
+        assertTrue(mMgh.mSinglePanningState.mOverscrollState == mMgh.OVERSCROLL_NONE);
+        assertTrue(isZoomed());
+    }
+
+    @Test
+    public void testScroll_singleHorizontalPanningAndAtEdge_vibrate() {
+        goFromStateIdleTo(STATE_SINGLE_PANNING);
+        mFullScreenMagnificationController.setCenter(
+                DISPLAY_0,
+                INITIAL_MAGNIFICATION_BOUNDS.left,
+                INITIAL_MAGNIFICATION_BOUNDS.top / 2,
+                false,
+                1);
+        final float swipeMinDistance = ViewConfiguration.get(mContext).getScaledTouchSlop() + 1;
+        PointF initCoords =
+                new PointF(
+                        mFullScreenMagnificationController.getCenterX(DISPLAY_0),
+                        mFullScreenMagnificationController.getCenterY(DISPLAY_0));
+        PointF endCoords = new PointF(initCoords.x, initCoords.y);
+        endCoords.offset(swipeMinDistance, 0);
+        allowEventDelegation();
+
+        swipeAndHold(initCoords, endCoords);
+
+        verify(mMockFullScreenMagnificationVibrationHelper).vibrateIfSettingEnabled();
+    }
+
+    @Test
+    public void testScroll_singleVerticalPanningAndAtEdge_doNotVibrate() {
+        goFromStateIdleTo(STATE_SINGLE_PANNING);
+        mFullScreenMagnificationController.setCenter(
+                DISPLAY_0,
+                INITIAL_MAGNIFICATION_BOUNDS.left,
+                INITIAL_MAGNIFICATION_BOUNDS.top,
+                false,
+                1);
+        final float swipeMinDistance = ViewConfiguration.get(mContext).getScaledTouchSlop() + 1;
+        PointF initCoords =
+                new PointF(
+                        mFullScreenMagnificationController.getCenterX(DISPLAY_0),
+                        mFullScreenMagnificationController.getCenterY(DISPLAY_0));
+        PointF endCoords = new PointF(initCoords.x, initCoords.y);
+        endCoords.offset(0, swipeMinDistance);
+        allowEventDelegation();
+
+        swipeAndHold(initCoords, endCoords);
+
+        verify(mMockFullScreenMagnificationVibrationHelper, never()).vibrateIfSettingEnabled();
+    }
+
+    @Test
     public void testShortcutTriggered_invokeShowWindowPromptAction() {
         goFromStateIdleTo(STATE_SHORTCUT_TRIGGERED);
 
@@ -666,6 +864,10 @@
         mHandler.timeAdvance();
     }
 
+    private void triggerContextChanged() {
+        mFullScreenMagnificationController.onUserContextChanged(DISPLAY_0);
+    }
+
     /**
      * Asserts that {@link #mMgh the handler} is in the given {@code state}
      */
@@ -674,43 +876,63 @@
 
             // Asserts on separate lines for accurate stack traces
 
-            case STATE_IDLE: {
+            case STATE_IDLE:
                 check(tapCount() < 2, state);
                 check(!mMgh.mDetectingState.mShortcutTriggered, state);
                 check(!isActivated(), state);
                 check(!isZoomed(), state);
-            } break;
-            case STATE_ACTIVATED: {
+                break;
+            case STATE_ACTIVATED:
                 check(isActivated(), state);
                 check(tapCount() < 2, state);
-            } break;
-            case STATE_2TAPS: {
+                break;
+            case STATE_SHORTCUT_TRIGGERED:
+                check(mMgh.mDetectingState.mShortcutTriggered, state);
+                check(isActivated(), state);
+                check(!isZoomed(), state);
+                break;
+            case STATE_ZOOMED_OUT_FROM_SERVICE:
+                // the always-on feature must be enabled then this state is reachable.
+                assertTrue(mFullScreenMagnificationController.isAlwaysOnMagnificationEnabled());
+                check(isActivated(), state);
+                check(!isZoomed(), state);
+                check(mMgh.mFullScreenMagnificationController.isZoomedOutFromService(DISPLAY_0),
+                        state);
+                break;
+            case STATE_2TAPS:
                 check(!isActivated(), state);
                 check(!isZoomed(), state);
                 check(tapCount() == 2, state);
-            } break;
-            case STATE_ACTIVATED_2TAPS: {
+                break;
+            case STATE_ACTIVATED_2TAPS:
                 check(isActivated(), state);
                 check(isZoomed(), state);
                 check(tapCount() == 2, state);
-            } break;
-            case STATE_NON_ACTIVATED_ZOOMED_TMP: {
+                break;
+            case STATE_ZOOMED_OUT_FROM_SERVICE_2TAPS:
+                check(isActivated(), state);
+                check(!isZoomed(), state);
+                check(mMgh.mFullScreenMagnificationController.isZoomedOutFromService(DISPLAY_0),
+                        state);
+                check(tapCount() == 2, state);
+                break;
+            case STATE_NON_ACTIVATED_ZOOMED_TMP:
                 check(isActivated(), state);
                 check(isZoomed(), state);
                 check(mMgh.mCurrentState == mMgh.mViewportDraggingState,
                         state);
                 check(Float.isNaN(mMgh.mViewportDraggingState.mScaleToRecoverAfterDraggingEnd),
                         state);
-            } break;
-            case STATE_ACTIVATED_ZOOMED_TMP: {
+                break;
+            case STATE_ZOOMED_FURTHER_TMP:
                 check(isActivated(), state);
                 check(isZoomed(), state);
                 check(mMgh.mCurrentState == mMgh.mViewportDraggingState,
                         state);
                 check(mMgh.mViewportDraggingState.mScaleToRecoverAfterDraggingEnd >= 1.0f,
                         state);
-            } break;
-            case STATE_SHORTCUT_TRIGGERED_ZOOMED_TMP: {
+                break;
+            case STATE_ZOOMED_WITH_PERSISTED_SCALE_TMP:
                 check(isActivated(), state);
                 check(isZoomed(), state);
                 check(mMgh.mCurrentState == mMgh.mViewportDraggingState,
@@ -722,25 +944,25 @@
                     check(Float.isNaN(mMgh.mViewportDraggingState.mScaleToRecoverAfterDraggingEnd),
                             state);
                 }
-            } break;
-            case STATE_SHORTCUT_TRIGGERED: {
-                check(mMgh.mDetectingState.mShortcutTriggered, state);
-                check(isActivated(), state);
-                check(!isZoomed(), state);
-            } break;
-            case STATE_PANNING: {
+                break;
+            case STATE_PANNING:
                 check(isActivated(), state);
                 check(mMgh.mCurrentState == mMgh.mPanningScalingState,
                         state);
                 check(!mMgh.mPanningScalingState.mScaling, state);
-            } break;
-            case STATE_SCALING_AND_PANNING: {
+                break;
+            case STATE_SCALING_AND_PANNING:
                 check(isActivated(), state);
                 check(mMgh.mCurrentState == mMgh.mPanningScalingState,
                         state);
                 check(mMgh.mPanningScalingState.mScaling, state);
-            } break;
-            default: throw new IllegalArgumentException("Illegal state: " + state);
+                break;
+            case STATE_SINGLE_PANNING:
+                check(isZoomed(), state);
+                check(mMgh.mCurrentState == mMgh.mSinglePanningState, state);
+                break;
+            default:
+                throw new IllegalArgumentException("Illegal state: " + state);
         }
     }
 
@@ -750,15 +972,10 @@
     private void goFromStateIdleTo(int state) {
         try {
             switch (state) {
-                case STATE_IDLE: {
+                case STATE_IDLE:
                     mMgh.clearAndTransitionToStateDetecting();
-                } break;
-                case STATE_2TAPS: {
-                    goFromStateIdleTo(STATE_IDLE);
-                    tap();
-                    tap();
-                } break;
-                case STATE_ACTIVATED: {
+                    break;
+                case STATE_ACTIVATED:
                     if (mMgh.mDetectTripleTap) {
                         goFromStateIdleTo(STATE_2TAPS);
                         tap();
@@ -766,43 +983,63 @@
                         goFromStateIdleTo(STATE_SHORTCUT_TRIGGERED);
                         tap();
                     }
-                } break;
-                case STATE_ACTIVATED_2TAPS: {
+                    break;
+                case STATE_SHORTCUT_TRIGGERED:
+                    goFromStateIdleTo(STATE_IDLE);
+                    triggerShortcut();
+                    break;
+                case STATE_ZOOMED_OUT_FROM_SERVICE:
+                    // the always-on feature must be enabled then this state is reachable.
+                    assertTrue(mFullScreenMagnificationController.isAlwaysOnMagnificationEnabled());
+                    goFromStateIdleTo(STATE_ACTIVATED);
+                    triggerContextChanged();
+                    break;
+                case STATE_2TAPS:
+                    goFromStateIdleTo(STATE_IDLE);
+                    tap();
+                    tap();
+                    break;
+                case STATE_ACTIVATED_2TAPS:
                     goFromStateIdleTo(STATE_ACTIVATED);
                     tap();
                     tap();
-                } break;
-                case STATE_NON_ACTIVATED_ZOOMED_TMP: {
+                    break;
+                case STATE_ZOOMED_OUT_FROM_SERVICE_2TAPS:
+                    goFromStateIdleTo(STATE_ZOOMED_OUT_FROM_SERVICE);
+                    tap();
+                    tap();
+                    break;
+                case STATE_NON_ACTIVATED_ZOOMED_TMP:
                     goFromStateIdleTo(STATE_2TAPS);
                     send(downEvent());
                     fastForward1sec();
-                } break;
-                case STATE_ACTIVATED_ZOOMED_TMP: {
+                    break;
+                case STATE_ZOOMED_FURTHER_TMP:
                     goFromStateIdleTo(STATE_ACTIVATED_2TAPS);
                     send(downEvent());
                     fastForward1sec();
-                } break;
-                case STATE_SHORTCUT_TRIGGERED_ZOOMED_TMP: {
+                    break;
+                case STATE_ZOOMED_WITH_PERSISTED_SCALE_TMP:
                     goFromStateIdleTo(STATE_SHORTCUT_TRIGGERED);
                     send(downEvent());
                     fastForward1sec();
-                } break;
-                case STATE_SHORTCUT_TRIGGERED: {
-                    goFromStateIdleTo(STATE_IDLE);
-                    triggerShortcut();
-                } break;
-                case STATE_PANNING: {
+                    break;
+                case STATE_PANNING:
                     goFromStateIdleTo(STATE_ACTIVATED);
                     send(downEvent());
                     send(pointerEvent(ACTION_POINTER_DOWN, DEFAULT_X * 2, DEFAULT_Y));
                     fastForward(ViewConfiguration.getTapTimeout());
-                } break;
-                case STATE_SCALING_AND_PANNING: {
+                    break;
+                case STATE_SCALING_AND_PANNING:
                     goFromStateIdleTo(STATE_PANNING);
                     send(pointerEvent(ACTION_MOVE, DEFAULT_X * 2, DEFAULT_Y * 3));
                     send(pointerEvent(ACTION_MOVE, DEFAULT_X * 2, DEFAULT_Y * 4));
                     send(pointerEvent(ACTION_MOVE, DEFAULT_X * 2, DEFAULT_Y * 5));
-                } break;
+                    break;
+                case STATE_SINGLE_PANNING:
+                    goFromStateIdleTo(STATE_ACTIVATED);
+                    swipeAndHold();
+                    break;
                 default:
                     throw new IllegalArgumentException("Illegal state: " + state);
             }
@@ -816,14 +1053,11 @@
      */
     private void returnToNormalFrom(int state) {
         switch (state) {
-            case STATE_IDLE: {
+            case STATE_IDLE:
                 // no op
-            } break;
-            case STATE_2TAPS: {
-                allowEventDelegation();
-                fastForward1sec();
-            } break;
-            case STATE_ACTIVATED: {
+                break;
+            case STATE_ACTIVATED:
+            case STATE_ZOOMED_OUT_FROM_SERVICE:
                 if (mMgh.mDetectTripleTap) {
                     tap();
                     tap();
@@ -831,35 +1065,45 @@
                 } else {
                     triggerShortcut();
                 }
-            } break;
-            case STATE_ACTIVATED_2TAPS: {
+                break;
+            case STATE_SHORTCUT_TRIGGERED:
+                triggerShortcut();
+                break;
+            case STATE_2TAPS:
+                allowEventDelegation();
+                fastForward1sec();
+                break;
+            case STATE_ACTIVATED_2TAPS:
+            case STATE_ZOOMED_OUT_FROM_SERVICE_2TAPS:
                 tap();
-            } break;
-            case STATE_NON_ACTIVATED_ZOOMED_TMP: {
+                break;
+            case STATE_NON_ACTIVATED_ZOOMED_TMP:
                 send(upEvent());
-            } break;
-            case STATE_ACTIVATED_ZOOMED_TMP: {
+                break;
+            case STATE_ZOOMED_FURTHER_TMP:
                 send(upEvent());
                 returnToNormalFrom(STATE_ACTIVATED);
-            } break;
-            case STATE_SHORTCUT_TRIGGERED_ZOOMED_TMP: {
+                break;
+            case STATE_ZOOMED_WITH_PERSISTED_SCALE_TMP:
                 send(upEvent());
                 if (mFullScreenMagnificationController.isAlwaysOnMagnificationEnabled()) {
                     returnToNormalFrom(STATE_ACTIVATED);
                 }
-            } break;
-            case STATE_SHORTCUT_TRIGGERED: {
-                triggerShortcut();
-            } break;
-            case STATE_PANNING: {
+                break;
+            case STATE_PANNING:
                 send(pointerEvent(ACTION_POINTER_UP, DEFAULT_X * 2, DEFAULT_Y));
                 send(upEvent());
                 returnToNormalFrom(STATE_ACTIVATED);
-            } break;
-            case STATE_SCALING_AND_PANNING: {
+                break;
+            case STATE_SCALING_AND_PANNING:
                 returnToNormalFrom(STATE_PANNING);
-            } break;
-            default: throw new IllegalArgumentException("Illegal state: " + state);
+                break;
+            case STATE_SINGLE_PANNING:
+                send(upEvent());
+                returnToNormalFrom(STATE_ACTIVATED);
+                break;
+            default:
+                throw new IllegalArgumentException("Illegal state: " + state);
         }
     }
 
@@ -901,11 +1145,21 @@
         send(upEvent());
     }
 
+    private void swipe(PointF start, PointF end) {
+        swipeAndHold(start, end);
+        send(upEvent(end.x, end.y));
+    }
+
     private void swipeAndHold() {
         send(downEvent());
         send(moveEvent(DEFAULT_X * 2, DEFAULT_Y * 2));
     }
 
+    private void swipeAndHold(PointF start, PointF end) {
+        send(downEvent(start.x, start.y));
+        send(moveEvent(end.x, end.y));
+    }
+
     private void longTap() {
         send(downEvent());
         fastForward(2000);
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationVibrationHelperTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationVibrationHelperTest.java
new file mode 100644
index 0000000..8563881
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationVibrationHelperTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.accessibility.magnification;
+
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
+
+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.os.VibrationEffect;
+import android.os.Vibrator;
+import android.provider.Settings;
+import android.testing.TestableContext;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Tests for {@link FullScreenMagnificationVibrationHelper}.
+ */
+public class FullScreenMagnificationVibrationHelperTest {
+    private static final long VIBRATION_DURATION_MS = 10L;
+    private static final int VIBRATION_AMPLITUDE = VibrationEffect.MAX_AMPLITUDE / 2;
+
+
+    @Rule
+    public final TestableContext mContext = new TestableContext(getInstrumentation().getContext());
+    @Mock
+    Vibrator mMockVibrator;
+
+    private FullScreenMagnificationVibrationHelper mFullScreenMagnificationVibrationHelper;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext.addMockSystemService(Vibrator.class, mMockVibrator);
+        mFullScreenMagnificationVibrationHelper = new FullScreenMagnificationVibrationHelper(
+                mContext);
+        mFullScreenMagnificationVibrationHelper.mIsVibrationEffectSupportedProvider = () -> true;
+    }
+
+    @Test
+    public void edgeHapticSettingEnabled_vibrate() {
+        setEdgeHapticSettingEnabled(true);
+        when(mMockVibrator.hasVibrator()).thenReturn(true);
+
+        mFullScreenMagnificationVibrationHelper.vibrateIfSettingEnabled();
+
+        verify(mMockVibrator).vibrate(any());
+    }
+
+    @Test
+    public void edgeHapticSettingDisabled_doNotVibrate() {
+        setEdgeHapticSettingEnabled(false);
+        when(mMockVibrator.hasVibrator()).thenReturn(true);
+
+        mFullScreenMagnificationVibrationHelper.vibrateIfSettingEnabled();
+
+        verify(mMockVibrator, never()).vibrate(any());
+    }
+
+    @Test
+    public void hasNoVibrator_doNotVibrate() {
+        setEdgeHapticSettingEnabled(true);
+        when(mMockVibrator.hasVibrator()).thenReturn(false);
+
+        mFullScreenMagnificationVibrationHelper.vibrateIfSettingEnabled();
+
+        verify(mMockVibrator, never()).vibrate(any());
+    }
+
+    @Test
+    public void notSupportVibrationEffect_vibrateOneShotEffect() {
+        setEdgeHapticSettingEnabled(true);
+        when(mMockVibrator.hasVibrator()).thenReturn(true);
+        mFullScreenMagnificationVibrationHelper.mIsVibrationEffectSupportedProvider = () -> false;
+
+        mFullScreenMagnificationVibrationHelper.vibrateIfSettingEnabled();
+
+        verify(mMockVibrator).vibrate(eq(VibrationEffect.createOneShot(VIBRATION_DURATION_MS,
+                VIBRATION_AMPLITUDE)));
+    }
+
+
+    private boolean setEdgeHapticSettingEnabled(boolean enabled) {
+        return Settings.Secure.putInt(
+                mContext.getContentResolver(),
+                Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_EDGE_HAPTIC_ENABLED,
+                enabled ? 1 : 0);
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java
index 27e6ef1..bbbab21 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/WindowMagnificationManagerTest.java
@@ -66,7 +66,6 @@
 import com.android.server.statusbar.StatusBarManagerInternal;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -308,7 +307,6 @@
                 MagnificationScaleProvider.MAX_SCALE);
     }
 
-    @Ignore("b/278816260: We could refer to b/182561174#comment4 for solution.")
     @Test
     public void logTrackingTypingFocus_processScroll_logDuration() {
         WindowMagnificationManager spyWindowMagnificationManager = spy(mWindowMagnificationManager);
diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityManagerTest.java b/services/tests/servicestests/src/com/android/server/am/ActivityManagerTest.java
index 327a80e..99eb047 100644
--- a/services/tests/servicestests/src/com/android/server/am/ActivityManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/ActivityManagerTest.java
@@ -52,7 +52,6 @@
 import android.provider.DeviceConfig;
 import android.provider.Settings;
 import android.server.wm.settings.SettingsSession;
-import android.support.test.uiautomator.UiDevice;
 import android.test.suitebuilder.annotation.LargeTest;
 import android.text.TextUtils;
 import android.util.KeyValueListParser;
@@ -61,6 +60,7 @@
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.FlakyTest;
+import androidx.test.uiautomator.UiDevice;
 
 import org.junit.Before;
 import org.junit.Ignore;
diff --git a/services/tests/servicestests/src/com/android/server/appop/AppOpsNotedWatcherTest.java b/services/tests/servicestests/src/com/android/server/appop/AppOpsNotedWatcherTest.java
index 47fdcb6..b5229d8 100644
--- a/services/tests/servicestests/src/com/android/server/appop/AppOpsNotedWatcherTest.java
+++ b/services/tests/servicestests/src/com/android/server/appop/AppOpsNotedWatcherTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.server.appops;
+package com.android.server.appop;
 
 import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.inOrder;
diff --git a/services/tests/servicestests/src/com/android/server/appop/OWNERS b/services/tests/servicestests/src/com/android/server/appop/OWNERS
index 999ea0e..2fe78c5 100644
--- a/services/tests/servicestests/src/com/android/server/appop/OWNERS
+++ b/services/tests/servicestests/src/com/android/server/appop/OWNERS
@@ -1 +1,2 @@
+#Bug component: 137825
 include /core/java/android/permission/OWNERS
diff --git a/services/tests/servicestests/src/com/android/server/attention/AttentionManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/attention/AttentionManagerServiceTest.java
index 897b91e..3475c8f 100644
--- a/services/tests/servicestests/src/com/android/server/attention/AttentionManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/attention/AttentionManagerServiceTest.java
@@ -71,6 +71,7 @@
 @SmallTest
 public class AttentionManagerServiceTest {
     private static final double PROXIMITY_SUCCESS_STATE = 1.0;
+
     private AttentionManagerService mSpyAttentionManager;
     private final int mTimeout = 1000;
     private final Object mLock = new Object();
@@ -125,8 +126,19 @@
     }
 
     @Test
+    public void testRegisterProximityUpdates_returnFalseWhenProximityDisabled() {
+        mSpyAttentionManager.mIsServiceEnabled = true;
+        mSpyAttentionManager.mIsProximityEnabled = false;
+
+        assertThat(mSpyAttentionManager.onStartProximityUpdates(
+                mMockProximityUpdateCallbackInternal))
+                .isFalse();
+    }
+
+    @Test
     public void testRegisterProximityUpdates_returnFalseWhenServiceUnavailable() {
         mSpyAttentionManager.mIsServiceEnabled = true;
+        mSpyAttentionManager.mIsProximityEnabled = true;
         doReturn(false).when(mSpyAttentionManager).isServiceAvailable();
 
         assertThat(mSpyAttentionManager.onStartProximityUpdates(
@@ -138,6 +150,7 @@
     public void testRegisterProximityUpdates_returnFalseWhenPowerManagerNotInteract()
             throws RemoteException {
         mSpyAttentionManager.mIsServiceEnabled = true;
+        mSpyAttentionManager.mIsProximityEnabled = true;
         doReturn(true).when(mSpyAttentionManager).isServiceAvailable();
         doReturn(false).when(mMockIPowerManager).isInteractive();
 
@@ -149,6 +162,7 @@
     @Test
     public void testRegisterProximityUpdates_callOnSuccess() throws RemoteException {
         mSpyAttentionManager.mIsServiceEnabled = true;
+        mSpyAttentionManager.mIsProximityEnabled = true;
         doReturn(true).when(mSpyAttentionManager).isServiceAvailable();
         doReturn(true).when(mMockIPowerManager).isInteractive();
 
@@ -162,6 +176,7 @@
     @Test
     public void testRegisterProximityUpdates_callOnSuccessTwiceInARow() throws RemoteException {
         mSpyAttentionManager.mIsServiceEnabled = true;
+        mSpyAttentionManager.mIsProximityEnabled = true;
         doReturn(true).when(mSpyAttentionManager).isServiceAvailable();
         doReturn(true).when(mMockIPowerManager).isInteractive();
 
@@ -188,6 +203,7 @@
     public void testUnregisterProximityUpdates_noCrashWhenCallbackMismatched()
             throws RemoteException {
         mSpyAttentionManager.mIsServiceEnabled = true;
+        mSpyAttentionManager.mIsProximityEnabled = true;
         doReturn(true).when(mSpyAttentionManager).isServiceAvailable();
         doReturn(true).when(mMockIPowerManager).isInteractive();
         mSpyAttentionManager.onStartProximityUpdates(mMockProximityUpdateCallbackInternal);
@@ -209,6 +225,7 @@
     public void testUnregisterProximityUpdates_cancelRegistrationWhenMatched()
             throws RemoteException {
         mSpyAttentionManager.mIsServiceEnabled = true;
+        mSpyAttentionManager.mIsProximityEnabled = true;
         doReturn(true).when(mSpyAttentionManager).isServiceAvailable();
         doReturn(true).when(mMockIPowerManager).isInteractive();
         mSpyAttentionManager.onStartProximityUpdates(mMockProximityUpdateCallbackInternal);
@@ -221,6 +238,7 @@
     public void testUnregisterProximityUpdates_noCrashWhenTwiceInARow() throws RemoteException {
         // Attention Service registers proximity updates.
         mSpyAttentionManager.mIsServiceEnabled = true;
+        mSpyAttentionManager.mIsProximityEnabled = true;
         doReturn(true).when(mSpyAttentionManager).isServiceAvailable();
         doReturn(true).when(mMockIPowerManager).isInteractive();
         mSpyAttentionManager.onStartProximityUpdates(mMockProximityUpdateCallbackInternal);
@@ -248,6 +266,7 @@
     @Test
     public void testCheckAttention_returnFalseWhenPowerManagerNotInteract() throws RemoteException {
         mSpyAttentionManager.mIsServiceEnabled = true;
+        mSpyAttentionManager.mIsProximityEnabled = true;
         doReturn(false).when(mMockIPowerManager).isInteractive();
         AttentionCallbackInternal callback = Mockito.mock(AttentionCallbackInternal.class);
         assertThat(mSpyAttentionManager.checkAttention(mTimeout, callback)).isFalse();
@@ -256,6 +275,7 @@
     @Test
     public void testCheckAttention_callOnSuccess() throws RemoteException {
         mSpyAttentionManager.mIsServiceEnabled = true;
+        mSpyAttentionManager.mIsProximityEnabled = true;
         doReturn(true).when(mSpyAttentionManager).isServiceAvailable();
         doReturn(true).when(mMockIPowerManager).isInteractive();
         mSpyAttentionManager.mCurrentAttentionCheck = null;
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 88d57ac..e565faa 100644
--- a/services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java
@@ -18,7 +18,7 @@
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.after;
 import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
@@ -42,10 +42,10 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
 import org.mockito.Mock;
 import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
 @MediumTest
 @RunWith(AndroidJUnit4.class)
@@ -58,7 +58,7 @@
     public final MockitoRule mockito = MockitoJUnit.rule();
 
     private Context mContext;
-    private AudioSystemAdapter mAudioSystem;
+    private AudioSystemAdapter mSpyAudioSystem;
     private SettingsAdapter mSettingsAdapter;
 
     @Spy private NoOpSystemServerAdapter mSpySystemServer;
@@ -78,11 +78,11 @@
             sLooperPrepared = true;
         }
         mContext = InstrumentationRegistry.getTargetContext();
-        mAudioSystem = new NoOpAudioSystemAdapter();
+        mSpyAudioSystem = spy(new NoOpAudioSystemAdapter());
         mSettingsAdapter = new NoOpSettingsAdapter();
         when(mMockAppOpsManager.noteOp(anyInt(), anyInt(), anyString(), anyString(), anyString()))
                 .thenReturn(AppOpsManager.MODE_ALLOWED);
-        mAudioService = new AudioService(mContext, mAudioSystem, mSpySystemServer,
+        mAudioService = new AudioService(mContext, mSpyAudioSystem, mSpySystemServer,
                 mSettingsAdapter, mMockAudioPolicy, null, mMockAppOpsManager,
                 mMockPermissionEnforcer);
     }
@@ -95,7 +95,7 @@
     public void testMuteMicrophone() throws Exception {
         Log.i(TAG, "running testMuteMicrophone");
         Assert.assertNotNull(mAudioService);
-        final NoOpAudioSystemAdapter testAudioSystem = (NoOpAudioSystemAdapter) mAudioSystem;
+        final NoOpAudioSystemAdapter testAudioSystem = (NoOpAudioSystemAdapter) mSpyAudioSystem;
         testAudioSystem.configureMuteMicrophoneToFail(false);
         for (boolean muted : new boolean[] { true, false}) {
             testAudioSystem.configureIsMicrophoneMuted(!muted);
@@ -120,7 +120,7 @@
     public void testMuteMicrophoneWhenFail() throws Exception {
         Log.i(TAG, "running testMuteMicrophoneWhenFail");
         Assert.assertNotNull(mAudioService);
-        final NoOpAudioSystemAdapter testAudioSystem = (NoOpAudioSystemAdapter) mAudioSystem;
+        final NoOpAudioSystemAdapter testAudioSystem = (NoOpAudioSystemAdapter) mSpyAudioSystem;
         testAudioSystem.configureMuteMicrophoneToFail(true);
         for (boolean muted : new boolean[] { true, false}) {
             testAudioSystem.configureIsMicrophoneMuted(!muted);
@@ -175,4 +175,28 @@
         Assert.assertEquals(false, mAudioService.isHotwordStreamSupported(false));
         Assert.assertEquals(false, mAudioService.isHotwordStreamSupported(true));
     }
+
+    /**
+     * Test master mute setter and getter
+     */
+    @Test
+    public void testMasterMute() throws Exception {
+        Log.i(TAG, "running testMasterMute");
+        Assert.assertNotNull(mAudioService);
+        for (boolean mute : new boolean[] { true, false}) {
+            boolean wasMute = mAudioService.isMasterMute();
+            mAudioService.setMasterMute(mute, 0 /* flags */, mContext.getOpPackageName(),
+                    UserHandle.getCallingUserId(), null);
+
+            Assert.assertEquals("master mute reporting wrong value",
+                    mute, mAudioService.isMasterMute());
+
+            verify(mSpyAudioSystem, times(wasMute == mute ? 0 : 1)).setMasterMute(mute);
+            // verify the intent for master mute changed is supposed to be fired
+            verify(mSpySystemServer,
+                    after(MAX_MESSAGE_HANDLING_DELAY_MS).times(wasMute == mute ? 0 : 1))
+                    .broadcastMasterMuteStatus(mute);
+            reset(mSpySystemServer);
+        }
+    }
 }
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 08a0878..0eac718 100644
--- a/services/tests/servicestests/src/com/android/server/audio/NoOpAudioSystemAdapter.java
+++ b/services/tests/servicestests/src/com/android/server/audio/NoOpAudioSystemAdapter.java
@@ -142,4 +142,9 @@
             @NonNull AudioAttributes attributes, boolean forVolume) {
         return new ArrayList<>();
     }
+
+    @Override
+    public int setMasterMute(boolean muted) {
+        return AudioSystem.AUDIO_STATUS_OK;
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/audio/NoOpSystemServerAdapter.java b/services/tests/servicestests/src/com/android/server/audio/NoOpSystemServerAdapter.java
index 83c5663..a715f51 100644
--- a/services/tests/servicestests/src/com/android/server/audio/NoOpSystemServerAdapter.java
+++ b/services/tests/servicestests/src/com/android/server/audio/NoOpSystemServerAdapter.java
@@ -39,4 +39,9 @@
     public void sendDeviceBecomingNoisyIntent() {
         // no-op
     }
+
+    @Override
+    public void broadcastMasterMuteStatus(boolean muted) {
+        // no-op
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/companion/utils/PackageUtilsTest.java b/services/tests/servicestests/src/com/android/server/companion/utils/PackageUtilsTest.java
index 56bb2eb..01159b1 100644
--- a/services/tests/servicestests/src/com/android/server/companion/utils/PackageUtilsTest.java
+++ b/services/tests/servicestests/src/com/android/server/companion/utils/PackageUtilsTest.java
@@ -13,7 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package com.android.server.companion.utils;
 
 import static org.junit.Assert.assertFalse;
@@ -42,19 +41,15 @@
 @Presubmit
 @RunWith(AndroidTestingRunner.class)
 public class PackageUtilsTest {
-
     private static final String[] ALLOWED_PACKAGE_NAMES = new String[]{
             "allowed_app",
     };
-
     private static final Signature[] ALLOWED_PACKAGE_SIGNATURES = new Signature[]{
             new Signature("001122"),
     };
-
     private static final String[] DISALLOWED_PACKAGE_NAMES = new String[]{
             "disallowed_app",
     };
-
     private static final Signature[] DISALLOWED_PACKAGE_SIGNATURES = new Signature[]{
             new Signature("778899"),
     };
@@ -71,7 +66,6 @@
                 ALLOWED_PACKAGE_SIGNATURES)).when(res).getStringArray(
                 com.android.internal.R.array.config_companionDeviceCerts);
         doReturn(res).when(context).getResources();
-
         PackageManagerInternal pm = mock(PackageManagerInternal.class);
         AndroidPackage ap = mock(AndroidPackage.class);
         SigningDetails sd = new SigningDetails(
@@ -81,7 +75,6 @@
                 null);
         doReturn(ap).when(pm).getPackage(ALLOWED_PACKAGE_NAMES[0]);
         doReturn(sd).when(ap).getSigningDetails();
-
         assertTrue(PackageUtils.isPackageAllowlisted(context, pm, ALLOWED_PACKAGE_NAMES[0]));
     }
 
@@ -97,7 +90,6 @@
                 ALLOWED_PACKAGE_SIGNATURES)).when(res).getStringArray(
                 com.android.internal.R.array.config_companionDeviceCerts);
         doReturn(res).when(context).getResources();
-
         PackageManagerInternal pm = mock(PackageManagerInternal.class);
         AndroidPackage ap = mock(AndroidPackage.class);
         SigningDetails sd = new SigningDetails(
@@ -107,7 +99,6 @@
                 null);
         doReturn(ap).when(pm).getPackage(DISALLOWED_PACKAGE_NAMES[0]);
         doReturn(sd).when(ap).getSigningDetails();
-
         assertFalse(PackageUtils.isPackageAllowlisted(context, pm, DISALLOWED_PACKAGE_NAMES[0]));
     }
 
@@ -123,7 +114,6 @@
                 ALLOWED_PACKAGE_SIGNATURES)).when(res).getStringArray(
                 com.android.internal.R.array.config_companionDeviceCerts);
         doReturn(res).when(context).getResources();
-
         PackageManagerInternal pm = mock(PackageManagerInternal.class);
         AndroidPackage ap = mock(AndroidPackage.class);
         SigningDetails sd = new SigningDetails(
@@ -133,7 +123,6 @@
                 null);
         doReturn(ap).when(pm).getPackage(ALLOWED_PACKAGE_NAMES[0]);
         doReturn(sd).when(ap).getSigningDetails();
-
         assertFalse(PackageUtils.isPackageAllowlisted(context, pm, ALLOWED_PACKAGE_NAMES[0]));
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/InputControllerTest.java b/services/tests/servicestests/src/com/android/server/companion/virtual/InputControllerTest.java
index 6c6b608..7e6883b 100644
--- a/services/tests/servicestests/src/com/android/server/companion/virtual/InputControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/companion/virtual/InputControllerTest.java
@@ -44,6 +44,7 @@
 import com.android.server.LocalServices;
 import com.android.server.input.InputManagerInternal;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -93,6 +94,11 @@
                 threadVerifier);
     }
 
+    @After
+    public void tearDown() {
+        mInputManagerMockHelper.tearDown();
+    }
+
     @Test
     public void registerInputDevice_deviceCreation_hasDeviceId() {
         final IBinder device1Token = new Binder("device1");
diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java b/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java
index 5cadc0a..3722247 100644
--- a/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java
+++ b/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java
@@ -46,6 +46,7 @@
     private final TestableLooper mTestableLooper;
     private final InputController.NativeWrapper mNativeWrapperMock;
     private final IInputManager mIInputManagerMock;
+    private final InputManagerGlobal.TestSession mInputManagerGlobalSession;
     private final List<InputDevice> mDevices = new ArrayList<>();
     private IInputDevicesChangedListener mDevicesChangedListener;
 
@@ -77,7 +78,13 @@
 
         // Set a new instance of InputManager for testing that uses the IInputManager mock as the
         // interface to the server.
-        InputManagerGlobal.resetInstance(mIInputManagerMock);
+        mInputManagerGlobalSession = InputManagerGlobal.createTestSession(mIInputManagerMock);
+    }
+
+    public void tearDown() {
+        if (mInputManagerGlobalSession != null) {
+            mInputManagerGlobalSession.close();
+        }
     }
 
     private long handleNativeOpenInputDevice(InvocationOnMock inv) {
diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/SensorControllerTest.java b/services/tests/servicestests/src/com/android/server/companion/virtual/SensorControllerTest.java
index 6a45d5f..faece4f 100644
--- a/services/tests/servicestests/src/com/android/server/companion/virtual/SensorControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/companion/virtual/SensorControllerTest.java
@@ -23,15 +23,19 @@
 import static org.mockito.ArgumentMatchers.anyFloat;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
 
+import android.companion.virtual.IVirtualDevice;
 import android.companion.virtual.sensor.IVirtualSensorCallback;
+import android.companion.virtual.sensor.VirtualSensor;
 import android.companion.virtual.sensor.VirtualSensorConfig;
 import android.companion.virtual.sensor.VirtualSensorEvent;
 import android.hardware.Sensor;
 import android.os.Binder;
 import android.os.IBinder;
+import android.os.RemoteException;
 import android.platform.test.annotations.Presubmit;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
@@ -39,12 +43,16 @@
 import com.android.server.LocalServices;
 import com.android.server.sensors.SensorManagerInternal;
 
+import com.google.common.collect.Iterables;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import java.util.List;
+
 @Presubmit
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper(setAsMainLooper = true)
@@ -54,14 +62,17 @@
     private static final String VIRTUAL_SENSOR_NAME = "VirtualAccelerometer";
     private static final int SENSOR_HANDLE = 7;
 
+    private static final int VIRTUAL_SENSOR_TYPE = Sensor.TYPE_ACCELEROMETER;
+
     @Mock
     private SensorManagerInternal mSensorManagerInternalMock;
     @Mock
     private IVirtualSensorCallback mVirtualSensorCallback;
-    private SensorController mSensorController;
+    @Mock
+    private IVirtualDevice mVirtualDevice;
+
     private VirtualSensorEvent mSensorEvent;
     private VirtualSensorConfig mVirtualSensorConfig;
-    private IBinder mSensorToken;
 
     @Before
     public void setUp() throws Exception {
@@ -70,12 +81,10 @@
         LocalServices.removeServiceForTest(SensorManagerInternal.class);
         LocalServices.addService(SensorManagerInternal.class, mSensorManagerInternalMock);
 
-        mSensorController = new SensorController(VIRTUAL_DEVICE_ID, mVirtualSensorCallback);
         mSensorEvent = new VirtualSensorEvent.Builder(new float[] { 1f, 2f, 3f}).build();
         mVirtualSensorConfig =
-                new VirtualSensorConfig.Builder(Sensor.TYPE_ACCELEROMETER, VIRTUAL_SENSOR_NAME)
+                new VirtualSensorConfig.Builder(VIRTUAL_SENSOR_TYPE, VIRTUAL_SENSOR_NAME)
                         .build();
-        mSensorToken = new Binder("sensorToken");
     }
 
     @Test
@@ -86,62 +95,84 @@
 
         Throwable thrown = assertThrows(
                 RuntimeException.class,
-                () -> mSensorController.createSensor(mSensorToken, mVirtualSensorConfig));
+                () -> new SensorController(mVirtualDevice, VIRTUAL_DEVICE_ID,
+                        mVirtualSensorCallback, List.of(mVirtualSensorConfig)));
 
         assertThat(thrown.getCause().getMessage())
                 .contains("Received an invalid virtual sensor handle");
     }
 
     @Test
-    public void createSensor_success() {
-        doCreateSensorSuccessfully();
+    public void createSensor_success() throws Exception {
+        SensorController sensorController = doCreateSensorSuccessfully();
 
-        assertThat(mSensorController.getSensorDescriptors()).isNotEmpty();
+        assertThat(sensorController.getSensorDescriptors()).isNotEmpty();
     }
 
     @Test
-    public void sendSensorEvent_invalidToken_throwsException() {
-        doCreateSensorSuccessfully();
+    public void getSensorByHandle_success() throws Exception {
+        SensorController sensorController = doCreateSensorSuccessfully();
+
+        VirtualSensor sensor = sensorController.getSensorByHandle(SENSOR_HANDLE);
+
+        assertThat(sensor).isNotNull();
+        assertThat(sensor.getHandle()).isEqualTo(SENSOR_HANDLE);
+        assertThat(sensor.getDeviceId()).isEqualTo(VIRTUAL_DEVICE_ID);
+        assertThat(sensor.getType()).isEqualTo(VIRTUAL_SENSOR_TYPE);
+    }
+
+    @Test
+    public void getSensorByHandle_invalidHandle_returnsNull() throws Exception {
+        SensorController sensorController = doCreateSensorSuccessfully();
+        final int invalidSensorHandle = 123456;
+
+        assertThat(sensorController.getSensorByHandle(invalidSensorHandle)).isNull();
+    }
+
+    @Test
+    public void sendSensorEvent_invalidToken_throwsException() throws Exception {
+        SensorController sensorController = doCreateSensorSuccessfully();
 
         assertThrows(
                 IllegalArgumentException.class,
-                () -> mSensorController.sendSensorEvent(
+                () -> sensorController.sendSensorEvent(
                         new Binder("invalidSensorToken"), mSensorEvent));
     }
 
     @Test
-    public void sendSensorEvent_success() {
-        doCreateSensorSuccessfully();
+    public void sendSensorEvent_success() throws Exception {
+        SensorController sensorController = doCreateSensorSuccessfully();
 
-        mSensorController.sendSensorEvent(mSensorToken, mSensorEvent);
+        clearInvocations(mSensorManagerInternalMock);
+        IBinder token = Iterables.getOnlyElement(sensorController.getSensorDescriptors().keySet());
+
+        sensorController.sendSensorEvent(token, mSensorEvent);
         verify(mSensorManagerInternalMock).sendSensorEvent(
                 SENSOR_HANDLE, Sensor.TYPE_ACCELEROMETER, mSensorEvent.getTimestampNanos(),
                 mSensorEvent.getValues());
     }
 
     @Test
-    public void unregisterSensor_invalidToken_throwsException() {
-        doCreateSensorSuccessfully();
+    public void close_unregistersSensors() throws Exception {
+        SensorController sensorController = doCreateSensorSuccessfully();
 
-        assertThrows(
-                IllegalArgumentException.class,
-                () -> mSensorController.unregisterSensor(new Binder("invalidSensorToken")));
-    }
-
-    @Test
-    public void unregisterSensor_success() {
-        doCreateSensorSuccessfully();
-
-        mSensorController.unregisterSensor(mSensorToken);
+        sensorController.close();
         verify(mSensorManagerInternalMock).removeRuntimeSensor(SENSOR_HANDLE);
-        assertThat(mSensorController.getSensorDescriptors()).isEmpty();
+        assertThat(sensorController.getSensorDescriptors()).isEmpty();
     }
 
-    private void doCreateSensorSuccessfully() {
+    private SensorController doCreateSensorSuccessfully() throws RemoteException {
         doReturn(SENSOR_HANDLE).when(mSensorManagerInternalMock).createRuntimeSensor(
                 anyInt(), anyInt(), anyString(), anyString(), anyFloat(), anyFloat(), anyFloat(),
                 anyInt(), anyInt(), anyInt(), any());
-        assertThat(mSensorController.createSensor(mSensorToken, mVirtualSensorConfig))
-                .isEqualTo(SENSOR_HANDLE);
+        doReturn(VIRTUAL_DEVICE_ID).when(mVirtualDevice).getDeviceId();
+
+        SensorController sensorController = new SensorController(mVirtualDevice, VIRTUAL_DEVICE_ID,
+                mVirtualSensorCallback, List.of(mVirtualSensorConfig));
+
+        List<VirtualSensor> sensors = sensorController.getSensorList();
+        assertThat(sensors).hasSize(1);
+        assertThat(sensors.get(0).getHandle()).isEqualTo(SENSOR_HANDLE);
+        return sensorController;
     }
 }
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 2336374..bcbbcd4 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
@@ -359,22 +359,24 @@
         mInputController = new InputController(mNativeWrapperMock,
                 new Handler(TestableLooper.get(this).getLooper()),
                 mContext.getSystemService(WindowManager.class), threadVerifier);
-        mSensorController = new SensorController(VIRTUAL_DEVICE_ID_1, mVirtualSensorCallback);
         mCameraAccessController =
                 new CameraAccessController(mContext, mLocalService, mCameraAccessBlockedCallback);
 
         mAssociationInfo = new AssociationInfo(/* associationId= */ 1, 0, null,
-                MacAddress.BROADCAST_ADDRESS, "", null, null, true, false, false, 0, 0, -1);
+                null, MacAddress.BROADCAST_ADDRESS, "", null, null, true, false, false,
+                0, 0, -1);
 
         mVdms = new VirtualDeviceManagerService(mContext);
         mLocalService = mVdms.getLocalServiceInstance();
         mVdm = mVdms.new VirtualDeviceManagerImpl();
         mDeviceImpl = createVirtualDevice(VIRTUAL_DEVICE_ID_1, DEVICE_OWNER_UID_1);
+        mSensorController = mDeviceImpl.getSensorControllerForTest();
     }
 
     @After
     public void tearDown() {
         mDeviceImpl.close();
+        mInputManagerMockHelper.tearDown();
     }
 
     @Test
@@ -1704,6 +1706,19 @@
         assertThat(displayIds).containsExactly(DISPLAY_ID_1, DISPLAY_ID_2);
     }
 
+    @Test
+    public void getPersistentIdForDevice_invalidDeviceId_returnsNull() {
+        assertThat(mLocalService.getPersistentIdForDevice(DEVICE_ID_INVALID)).isNull();
+        assertThat(mLocalService.getPersistentIdForDevice(DEVICE_ID_DEFAULT)).isNull();
+        assertThat(mLocalService.getPersistentIdForDevice(VIRTUAL_DEVICE_ID_2)).isNull();
+    }
+
+    @Test
+    public void getPersistentIdForDevice_returnsCorrectId() {
+        assertThat(mLocalService.getPersistentIdForDevice(VIRTUAL_DEVICE_ID_1))
+                .isEqualTo(mDeviceImpl.getPersistentDeviceId());
+    }
+
     private VirtualDeviceImpl createVirtualDevice(int virtualDeviceId, int ownerUid) {
         VirtualDeviceParams params = new VirtualDeviceParams.Builder()
                 .setBlockedActivities(getBlockedActivities())
@@ -1715,11 +1730,13 @@
             VirtualDeviceParams params) {
         VirtualDeviceImpl virtualDeviceImpl = new VirtualDeviceImpl(mContext,
                 mAssociationInfo, mVdms, new Binder(), ownerUid, virtualDeviceId,
-                mInputController, mSensorController, mCameraAccessController
-                /* onDeviceCloseListener= */ /*deviceId -> mVdms.removeVirtualDevice(deviceId)*/,
+                mInputController, mCameraAccessController,
                 mPendingTrampolineCallback, mActivityListener, mSoundEffectListener,
                 mRunningAppsChangedCallback, params, new DisplayManagerGlobal(mIDisplayManager));
         mVdms.addVirtualDevice(virtualDeviceImpl);
+        assertThat(virtualDeviceImpl.getAssociationId()).isEqualTo(mAssociationInfo.getId());
+        assertThat(virtualDeviceImpl.getPersistentDeviceId())
+                .isEqualTo("companion:" + mAssociationInfo.getId());
         return virtualDeviceImpl;
     }
 
diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceTest.java b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceTest.java
index a2e204d..28df24c 100644
--- a/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceTest.java
+++ b/services/tests/servicestests/src/com/android/server/companion/virtual/VirtualDeviceTest.java
@@ -37,34 +37,36 @@
 public class VirtualDeviceTest {
 
     private static final int VIRTUAL_DEVICE_ID = 42;
-    private static final String VIRTUAL_DEVICE_NAME = "VirtualDeviceName";
+    private static final String PERSISTENT_ID = "persistentId";
+    private static final String DEVICE_NAME = "VirtualDeviceName";
 
     @Test
     public void build_invalidId_shouldThrowIllegalArgumentException() {
         assertThrows(
                 IllegalArgumentException.class,
-                () -> new VirtualDevice(DEVICE_ID_INVALID, VIRTUAL_DEVICE_NAME));
+                () -> new VirtualDevice(DEVICE_ID_INVALID, PERSISTENT_ID, DEVICE_NAME));
     }
 
     @Test
     public void build_defaultId_shouldThrowIllegalArgumentException() {
         assertThrows(
                 IllegalArgumentException.class,
-                () -> new VirtualDevice(DEVICE_ID_DEFAULT, VIRTUAL_DEVICE_NAME));
+                () -> new VirtualDevice(DEVICE_ID_DEFAULT, PERSISTENT_ID, DEVICE_NAME));
     }
 
     @Test
-    public void build_nameIsOptional() {
+    public void build_onlyRequiredFields() {
         VirtualDevice virtualDevice =
-                new VirtualDevice(VIRTUAL_DEVICE_ID, /* name= */ null);
+                new VirtualDevice(VIRTUAL_DEVICE_ID, /*persistentId=*/null, /*name=*/null);
         assertThat(virtualDevice.getDeviceId()).isEqualTo(VIRTUAL_DEVICE_ID);
+        assertThat(virtualDevice.getPersistentDeviceId()).isNull();
         assertThat(virtualDevice.getName()).isNull();
     }
 
     @Test
     public void parcelable_shouldRecreateSuccessfully() {
         VirtualDevice originalDevice =
-                new VirtualDevice(VIRTUAL_DEVICE_ID, VIRTUAL_DEVICE_NAME);
+                new VirtualDevice(VIRTUAL_DEVICE_ID, PERSISTENT_ID, DEVICE_NAME);
         Parcel parcel = Parcel.obtain();
         originalDevice.writeToParcel(parcel, 0);
         parcel.setDataPosition(0);
@@ -72,6 +74,7 @@
         VirtualDevice device = VirtualDevice.CREATOR.createFromParcel(parcel);
         assertThat(device).isEqualTo(originalDevice);
         assertThat(device.getDeviceId()).isEqualTo(VIRTUAL_DEVICE_ID);
-        assertThat(device.getName()).isEqualTo(VIRTUAL_DEVICE_NAME);
+        assertThat(device.getPersistentDeviceId()).isEqualTo(PERSISTENT_ID);
+        assertThat(device.getName()).isEqualTo(DEVICE_NAME);
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
index 99a3b80..7478778 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
@@ -46,7 +46,6 @@
 import static android.app.admin.DevicePolicyManager.WIFI_SECURITY_OPEN;
 import static android.app.admin.DevicePolicyManager.WIFI_SECURITY_PERSONAL;
 import static android.app.admin.DevicePolicyManager.WIPE_EUICC;
-import static android.app.admin.PasswordMetrics.computeForPasswordOrPin;
 import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_DIRECT_BOOT_AWARE;
 import static android.location.LocationManager.FUSED_PROVIDER;
 import static android.location.LocationManager.GPS_PROVIDER;
@@ -5479,8 +5478,7 @@
 
         reset(mContext.spiedContext);
 
-        PasswordMetrics passwordMetricsNoSymbols = computeForPasswordOrPin(
-                "abcdXYZ5".getBytes(), /* isPin */ false);
+        PasswordMetrics passwordMetricsNoSymbols = metricsForPassword("abcdXYZ5");
 
         setActivePasswordState(passwordMetricsNoSymbols);
         assertThat(dpm.isActivePasswordSufficient()).isTrue();
@@ -5507,8 +5505,7 @@
         reset(mContext.spiedContext);
         assertThat(dpm.isActivePasswordSufficient()).isFalse();
 
-        PasswordMetrics passwordMetricsWithSymbols = computeForPasswordOrPin(
-                "abcd.XY5".getBytes(), /* isPin */ false);
+        PasswordMetrics passwordMetricsWithSymbols = metricsForPassword("abcd.XY5");
 
         setActivePasswordState(passwordMetricsWithSymbols);
         assertThat(dpm.isActivePasswordSufficient()).isTrue();
@@ -5564,7 +5561,7 @@
         parentDpm.setRequiredPasswordComplexity(PASSWORD_COMPLEXITY_MEDIUM);
 
         when(getServices().lockSettingsInternal.getUserPasswordMetrics(UserHandle.USER_SYSTEM))
-                .thenReturn(computeForPasswordOrPin("184342".getBytes(), /* isPin */ true));
+                .thenReturn(metricsForPin("184342"));
 
         // Numeric password is compliant with current requirement (QUALITY_NUMERIC set explicitly
         // on the parent admin)
@@ -5685,7 +5682,7 @@
 
         // Set a work challenge and verify profile.isActivePasswordSufficient is now true
         when(getServices().lockSettingsInternal.getUserPasswordMetrics(managedProfileUserId))
-                .thenReturn(computeForPasswordOrPin("abcdXYZ5".getBytes(), /* isPin */ false));
+                .thenReturn(metricsForPassword("abcdXYZ5"));
         assertThat(dpm.isActivePasswordSufficient()).isTrue();
         assertThat(parentDpm.isActivePasswordSufficient()).isTrue();
     }
@@ -5710,7 +5707,7 @@
 
         // Set a work challenge and verify profile.isActivePasswordSufficient is now true
         when(getServices().lockSettingsInternal.getUserPasswordMetrics(managedProfileUserId))
-                .thenReturn(computeForPasswordOrPin("5156".getBytes(), /* isPin */ true));
+                .thenReturn(metricsForPin("5156"));
         assertThat(dpm.isActivePasswordSufficient()).isTrue();
         assertThat(parentDpm.isActivePasswordSufficient()).isTrue();
     }
@@ -5735,7 +5732,7 @@
 
         // Set a device lockscreen and verify parent.isActivePasswordSufficient is now true
         when(getServices().lockSettingsInternal.getUserPasswordMetrics(UserHandle.USER_SYSTEM))
-                .thenReturn(computeForPasswordOrPin("acbdXYZ5".getBytes(), /* isPin */ false));
+                .thenReturn(metricsForPassword("acbdXYZ5"));
         assertThat(dpm.isActivePasswordSufficient()).isTrue();
         assertThat(parentDpm.isActivePasswordSufficient()).isTrue();
     }
@@ -5758,7 +5755,7 @@
 
         // Set a device lockscreen and verify parent.isActivePasswordSufficient is now true
         when(getServices().lockSettingsInternal.getUserPasswordMetrics(UserHandle.USER_SYSTEM))
-                .thenReturn(computeForPasswordOrPin("1234".getBytes(), /* isPin */ true));
+                .thenReturn(metricsForPin("1234"));
         assertThat(dpm.isActivePasswordSufficient()).isTrue();
         assertThat(parentDpm.isActivePasswordSufficient()).isTrue();
     }
@@ -5783,7 +5780,7 @@
 
         // Set a device lockscreen and verify {profile, parent}.isActivePasswordSufficient is true
         when(getServices().lockSettingsInternal.getUserPasswordMetrics(UserHandle.USER_SYSTEM))
-                .thenReturn(computeForPasswordOrPin("abcdXYZ5".getBytes(), /* isPin */ false));
+                .thenReturn(metricsForPassword("abcdXYZ5"));
         assertThat(dpm.isActivePasswordSufficient()).isTrue();
         assertThat(parentDpm.isActivePasswordSufficient()).isTrue();
     }
@@ -5806,7 +5803,7 @@
 
         // Set a device lockscreen and verify {profile, parent}.isActivePasswordSufficient is true
         when(getServices().lockSettingsInternal.getUserPasswordMetrics(UserHandle.USER_SYSTEM))
-                .thenReturn(computeForPasswordOrPin("51567548".getBytes(), /* isPin */ true));
+                .thenReturn(metricsForPin("51567548"));
         assertThat(dpm.isActivePasswordSufficient()).isTrue();
         assertThat(parentDpm.isActivePasswordSufficient()).isTrue();
     }
@@ -5831,7 +5828,7 @@
 
         // Set a device lockscreen and verify {profile, parent}.isActivePasswordSufficient is true
         when(getServices().lockSettingsInternal.getUserPasswordMetrics(UserHandle.USER_SYSTEM))
-                .thenReturn(computeForPasswordOrPin("abcdXYZ5".getBytes(), /* isPin */ false));
+                .thenReturn(metricsForPassword("abcdXYZ5"));
         assertThat(dpm.isActivePasswordSufficient()).isTrue();
         assertThat(parentDpm.isActivePasswordSufficient()).isTrue();
     }
@@ -5854,7 +5851,7 @@
 
         // Set a device lockscreen and verify {profile, parent}.isActivePasswordSufficient is true
         when(getServices().lockSettingsInternal.getUserPasswordMetrics(UserHandle.USER_SYSTEM))
-                .thenReturn(computeForPasswordOrPin("5156".getBytes(), /* isPin */ true));
+                .thenReturn(metricsForPin("5156"));
         assertThat(dpm.isActivePasswordSufficient()).isTrue();
         assertThat(parentDpm.isActivePasswordSufficient()).isTrue();
     }
@@ -6909,7 +6906,7 @@
                 .thenReturn(CALLER_USER_HANDLE);
         when(getServices().lockSettingsInternal
                 .getUserPasswordMetrics(CALLER_USER_HANDLE))
-                .thenReturn(computeForPasswordOrPin("asdf".getBytes(), /* isPin */ false));
+                .thenReturn(metricsForPassword("asdf"));
 
         assertThat(dpm.getPasswordComplexity()).isEqualTo(PASSWORD_COMPLEXITY_MEDIUM);
     }
@@ -6929,10 +6926,10 @@
 
         when(getServices().lockSettingsInternal
                 .getUserPasswordMetrics(CALLER_USER_HANDLE))
-                .thenReturn(computeForPasswordOrPin("asdf".getBytes(), /* isPin */ false));
+                .thenReturn(metricsForPassword("asdf"));
         when(getServices().lockSettingsInternal
                 .getUserPasswordMetrics(parentUser.id))
-                .thenReturn(computeForPasswordOrPin("parentUser".getBytes(), /* isPin */ false));
+                .thenReturn(metricsForPassword("parentUser"));
 
         assertThat(dpm.getPasswordComplexity()).isEqualTo(PASSWORD_COMPLEXITY_HIGH);
     }
@@ -7654,15 +7651,13 @@
         assertThat(dpm.getPasswordComplexity()).isEqualTo(PASSWORD_COMPLEXITY_NONE);
 
         reset(mContext.spiedContext);
-        PasswordMetrics passwordMetricsNoSymbols = computeForPasswordOrPin(
-                "1234".getBytes(), /* isPin */ true);
+        PasswordMetrics passwordMetricsNoSymbols = metricsForPin("1234");
         setActivePasswordState(passwordMetricsNoSymbols);
         assertThat(dpm.getPasswordComplexity()).isEqualTo(PASSWORD_COMPLEXITY_LOW);
         assertThat(dpm.isActivePasswordSufficient()).isFalse();
 
         reset(mContext.spiedContext);
-        passwordMetricsNoSymbols = computeForPasswordOrPin(
-                "84125312943a".getBytes(), /* isPin */ false);
+        passwordMetricsNoSymbols = metricsForPassword("84125312943a");
         setActivePasswordState(passwordMetricsNoSymbols);
         assertThat(dpm.getPasswordComplexity()).isEqualTo(PASSWORD_COMPLEXITY_HIGH);
         // using isActivePasswordSufficient
@@ -8125,14 +8120,13 @@
     }
 
     @Test
-    public void testIsUsbDataSignalingEnabledForUser_systemUser() throws Exception {
+    public void testIsUsbDataSignalingEnabledForUser() throws Exception {
         when(getServices().usbManager.enableUsbDataSignal(false)).thenReturn(true);
         when(getServices().usbManager.getUsbHalVersion()).thenReturn(UsbManager.USB_HAL_V1_3);
         setDeviceOwner();
         dpm.setUsbDataSignalingEnabled(false);
-        mContext.binder.callingUid = DpmMockContext.SYSTEM_UID;
 
-        assertThat(dpm.isUsbDataSignalingEnabledForUser(UserHandle.myUserId())).isFalse();
+        assertThat(dpm.isUsbDataSignalingEnabled()).isFalse();
     }
 
     @Test
@@ -8838,4 +8832,12 @@
         assumeTrue("device doesn't support deprecated password APIs",
                 isDeprecatedPasswordApisSupported());
     }
+
+    private static PasswordMetrics metricsForPassword(String password) {
+        return PasswordMetrics.computeForCredential(LockscreenCredential.createPassword(password));
+    }
+
+    private static PasswordMetrics metricsForPin(String pin) {
+        return PasswordMetrics.computeForCredential(LockscreenCredential.createPin(pin));
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java
index 9ff600a..e5fac7a 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java
@@ -251,6 +251,8 @@
                 return mMockSystemServices.roleManager;
             case Context.TELEPHONY_SUBSCRIPTION_SERVICE:
                 return mMockSystemServices.subscriptionManager;
+            case Context.USB_SERVICE:
+                return mMockSystemServices.usbManager;
         }
         throw new UnsupportedOperationException();
     }
diff --git a/services/tests/servicestests/src/com/android/server/display/TestUtils.java b/services/tests/servicestests/src/com/android/server/display/TestUtils.java
deleted file mode 100644
index 8b45145..0000000
--- a/services/tests/servicestests/src/com/android/server/display/TestUtils.java
+++ /dev/null
@@ -1,94 +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.server.display;
-
-import android.hardware.Sensor;
-import android.hardware.SensorEvent;
-import android.hardware.input.InputSensorInfo;
-import android.os.Parcel;
-import android.os.SystemClock;
-import android.view.DisplayAddress;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
-public final class TestUtils {
-
-    public static SensorEvent createSensorEvent(Sensor sensor, int value) throws Exception {
-        final Constructor<SensorEvent> constructor =
-                SensorEvent.class.getDeclaredConstructor(int.class);
-        constructor.setAccessible(true);
-        final SensorEvent event = constructor.newInstance(1);
-        event.sensor = sensor;
-        event.values[0] = value;
-        event.timestamp = SystemClock.elapsedRealtimeNanos();
-        return event;
-    }
-
-
-    public static void setSensorType(Sensor sensor, int type, String strType) throws Exception {
-        Method setter = Sensor.class.getDeclaredMethod("setType", Integer.TYPE);
-        setter.setAccessible(true);
-        setter.invoke(sensor, type);
-        if (strType != null) {
-            Field f = sensor.getClass().getDeclaredField("mStringType");
-            f.setAccessible(true);
-            f.set(sensor, strType);
-        }
-    }
-
-    public static void setMaximumRange(Sensor sensor, float maximumRange) throws Exception {
-        Method setter = Sensor.class.getDeclaredMethod("setRange", Float.TYPE, Float.TYPE);
-        setter.setAccessible(true);
-        setter.invoke(sensor, maximumRange, 1);
-    }
-
-    public static Sensor createSensor(int type, String strType) throws Exception {
-        Constructor<Sensor> constr = Sensor.class.getDeclaredConstructor();
-        constr.setAccessible(true);
-        Sensor sensor = constr.newInstance();
-        setSensorType(sensor, type, strType);
-        return sensor;
-    }
-
-    public static Sensor createSensor(int type, String strType, float maximumRange)
-            throws Exception {
-        Constructor<Sensor> constr = Sensor.class.getDeclaredConstructor();
-        constr.setAccessible(true);
-        Sensor sensor = constr.newInstance();
-        setSensorType(sensor, type, strType);
-        setMaximumRange(sensor, maximumRange);
-        return sensor;
-    }
-
-    public static Sensor createSensor(String type, String name) {
-        return new Sensor(new InputSensorInfo(
-                name, "vendor", 0, 0, 0, 1f, 1f, 1, 1, 1, 1,
-                type, "", 0, 0, 0));
-    }
-
-    /**
-     * Create a custom {@link DisplayAddress} to ensure we're not relying on any specific
-     * display-address implementation in our code. Intentionally uses default object (reference)
-     * equality rules.
-     */
-    public static class TestDisplayAddress extends DisplayAddress {
-        @Override
-        public void writeToParcel(Parcel out, int flags) { }
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/dreams/DreamControllerTest.java b/services/tests/servicestests/src/com/android/server/dreams/DreamControllerTest.java
deleted file mode 100644
index b5bf1ea..0000000
--- a/services/tests/servicestests/src/com/android/server/dreams/DreamControllerTest.java
+++ /dev/null
@@ -1,275 +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.server.dreams;
-
-import static android.os.PowerManager.USER_ACTIVITY_EVENT_OTHER;
-import static android.os.PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS;
-
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.clearInvocations;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.app.ActivityTaskManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.ServiceConnection;
-import android.os.Binder;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.IPowerManager;
-import android.os.IRemoteCallback;
-import android.os.PowerManager;
-import android.os.RemoteException;
-import android.os.test.TestLooper;
-import android.service.dreams.IDreamService;
-
-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.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class DreamControllerTest {
-    @Mock
-    private DreamController.Listener mListener;
-    @Mock
-    private Context mContext;
-
-    @Mock
-    private ActivityTaskManager mActivityTaskManager;
-    @Mock
-    private IPowerManager mPowerManager;
-
-    @Mock
-    private IBinder mIBinder;
-    @Mock
-    private IDreamService mIDreamService;
-
-    @Captor
-    private ArgumentCaptor<ServiceConnection> mServiceConnectionACaptor;
-    @Captor
-    private ArgumentCaptor<IBinder.DeathRecipient> mDeathRecipientCaptor;
-    @Captor
-    private ArgumentCaptor<IRemoteCallback> mRemoteCallbackCaptor;
-
-    private final TestLooper mLooper = new TestLooper();
-    private final Handler mHandler = new Handler(mLooper.getLooper());
-
-    private DreamController mDreamController;
-
-    private Binder mToken;
-    private ComponentName mDreamName;
-    private ComponentName mOverlayName;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-
-        when(mIDreamService.asBinder()).thenReturn(mIBinder);
-        when(mIBinder.queryLocalInterface(anyString())).thenReturn(mIDreamService);
-        when(mContext.bindServiceAsUser(any(), any(), anyInt(), any())).thenReturn(true);
-        when(mContext.getSystemService(Context.ACTIVITY_TASK_SERVICE))
-                .thenReturn(mActivityTaskManager);
-        when(mContext.getSystemServiceName(ActivityTaskManager.class))
-                .thenReturn(Context.ACTIVITY_TASK_SERVICE);
-
-        final PowerManager powerManager = new PowerManager(mContext, mPowerManager, null, null);
-        when(mContext.getSystemService(Context.POWER_SERVICE))
-                .thenReturn(powerManager);
-        when(mContext.getSystemServiceName(PowerManager.class))
-                .thenReturn(Context.POWER_SERVICE);
-
-        mToken = new Binder();
-        mDreamName = ComponentName.unflattenFromString("dream");
-        mOverlayName = ComponentName.unflattenFromString("dream_overlay");
-        mDreamController = new DreamController(mContext, mHandler, mListener);
-    }
-
-    @Test
-    public void startDream_attachOnServiceConnected() throws RemoteException {
-        // Call dream controller to start dreaming.
-        mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
-                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
-
-        // Mock service connected.
-        final ServiceConnection serviceConnection = captureServiceConnection();
-        serviceConnection.onServiceConnected(mDreamName, mIBinder);
-        mLooper.dispatchAll();
-
-        // Verify that dream service is called to attach.
-        verify(mIDreamService).attach(eq(mToken), eq(false) /*doze*/,
-                eq(false) /*preview*/, any());
-    }
-
-    @Test
-    public void startDream_dreamListenerNotified() {
-        // Call dream controller to start dreaming.
-        mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
-                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
-
-        // Mock service connected.
-        final ServiceConnection serviceConnection = captureServiceConnection();
-        serviceConnection.onServiceConnected(mDreamName, mIBinder);
-        mLooper.dispatchAll();
-
-        // Verify that dream service is called to attach.
-        verify(mListener).onDreamStarted(any());
-    }
-
-    @Test
-    public void stopDream_dreamListenerNotified() {
-        // Start dream.
-        mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
-                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
-        captureServiceConnection().onServiceConnected(mDreamName, mIBinder);
-        mLooper.dispatchAll();
-
-        // Stop dream.
-        mDreamController.stopDream(true /*immediate*/, "test stop dream" /*reason*/);
-        mLooper.dispatchAll();
-
-        // Verify that dream service is called to detach.
-        verify(mListener).onDreamStopped(any());
-    }
-
-    @Test
-    public void startDream_attachOnServiceConnectedInPreviewMode() throws RemoteException {
-        // Call dream controller to start dreaming.
-        mDreamController.startDream(mToken, mDreamName, true /*isPreview*/, false /*doze*/,
-                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
-
-        // Mock service connected.
-        final ServiceConnection serviceConnection = captureServiceConnection();
-        serviceConnection.onServiceConnected(mDreamName, mIBinder);
-        mLooper.dispatchAll();
-
-        // Verify that dream service is called to attach.
-        verify(mIDreamService).attach(eq(mToken), eq(false) /*doze*/,
-                eq(true) /*preview*/, any());
-    }
-
-    @Test
-    public void startDream_startASecondDream_detachOldDreamOnceNewDreamIsStarted()
-            throws RemoteException {
-        // Start first dream.
-        mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
-                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
-        captureServiceConnection().onServiceConnected(mDreamName, mIBinder);
-        mLooper.dispatchAll();
-        clearInvocations(mContext);
-
-        // Set up second dream.
-        final Binder newToken = new Binder();
-        final ComponentName newDreamName = ComponentName.unflattenFromString("new_dream");
-        final ComponentName newOverlayName = ComponentName.unflattenFromString("new_dream_overlay");
-        final IDreamService newDreamService = mock(IDreamService.class);
-        final IBinder newBinder = mock(IBinder.class);
-        when(newDreamService.asBinder()).thenReturn(newBinder);
-        when(newBinder.queryLocalInterface(anyString())).thenReturn(newDreamService);
-
-        // Start second dream.
-        mDreamController.startDream(newToken, newDreamName, false /*isPreview*/, false /*doze*/,
-                0 /*userId*/, null /*wakeLock*/, newOverlayName, "test" /*reason*/);
-        captureServiceConnection().onServiceConnected(newDreamName, newBinder);
-        mLooper.dispatchAll();
-
-        // Mock second dream started.
-        verify(newDreamService).attach(eq(newToken), eq(false) /*doze*/,
-                eq(false) /*preview*/, mRemoteCallbackCaptor.capture());
-        mRemoteCallbackCaptor.getValue().sendResult(null /*data*/);
-        mLooper.dispatchAll();
-
-        // Verify that the first dream is called to detach.
-        verify(mIDreamService).detach();
-    }
-
-    @Test
-    public void stopDream_detachFromService() throws RemoteException {
-        // Start dream.
-        mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
-                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
-        captureServiceConnection().onServiceConnected(mDreamName, mIBinder);
-        mLooper.dispatchAll();
-
-        // Stop dream.
-        mDreamController.stopDream(true /*immediate*/, "test stop dream" /*reason*/);
-
-        // Verify that dream service is called to detach.
-        verify(mIDreamService).detach();
-    }
-
-    @Test
-    public void serviceDisconnect_resetsScreenTimeout() throws RemoteException {
-        // Start dream.
-        mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
-                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
-        ServiceConnection serviceConnection = captureServiceConnection();
-        serviceConnection.onServiceConnected(mDreamName, mIBinder);
-        mLooper.dispatchAll();
-
-        // Dream disconnects unexpectedly.
-        serviceConnection.onServiceDisconnected(mDreamName);
-        mLooper.dispatchAll();
-
-        // Power manager receives user activity signal.
-        verify(mPowerManager).userActivity(/*displayId=*/ anyInt(), /*time=*/ anyLong(),
-                eq(USER_ACTIVITY_EVENT_OTHER),
-                eq(USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS));
-    }
-
-    @Test
-    public void binderDied_resetsScreenTimeout() throws RemoteException {
-        // Start dream.
-        mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
-                0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
-        captureServiceConnection().onServiceConnected(mDreamName, mIBinder);
-        mLooper.dispatchAll();
-
-        // Dream binder dies.
-        captureDeathRecipient().binderDied();
-        mLooper.dispatchAll();
-
-        // Power manager receives user activity signal.
-        verify(mPowerManager).userActivity(/*displayId=*/ anyInt(), /*time=*/ anyLong(),
-                eq(USER_ACTIVITY_EVENT_OTHER),
-                eq(USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS));
-    }
-
-    private ServiceConnection captureServiceConnection() {
-        verify(mContext).bindServiceAsUser(any(), mServiceConnectionACaptor.capture(), anyInt(),
-                any());
-        return mServiceConnectionACaptor.getValue();
-    }
-
-    private IBinder.DeathRecipient captureDeathRecipient() throws RemoteException {
-        verify(mIBinder).linkToDeath(mDeathRecipientCaptor.capture(), anyInt());
-        return mDeathRecipientCaptor.getValue();
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/dreams/DreamOverlayServiceTest.java b/services/tests/servicestests/src/com/android/server/dreams/DreamOverlayServiceTest.java
deleted file mode 100644
index f05fa65..0000000
--- a/services/tests/servicestests/src/com/android/server/dreams/DreamOverlayServiceTest.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.dreams;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-
-import android.content.ComponentName;
-import android.content.Intent;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.service.dreams.DreamOverlayService;
-import android.service.dreams.IDreamOverlay;
-import android.service.dreams.IDreamOverlayCallback;
-import android.service.dreams.IDreamOverlayClient;
-import android.service.dreams.IDreamOverlayClientCallback;
-import android.view.WindowManager;
-
-import androidx.annotation.NonNull;
-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.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-
-import java.util.concurrent.Executor;
-
-/**
- * A collection of tests to exercise {@link DreamOverlayService}.
- */
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class DreamOverlayServiceTest {
-    private static final ComponentName FIRST_DREAM_COMPONENT =
-            ComponentName.unflattenFromString("com.foo.bar/.DreamService");
-    private static final ComponentName SECOND_DREAM_COMPONENT =
-            ComponentName.unflattenFromString("com.foo.baz/.DreamService");
-
-    @Mock
-    WindowManager.LayoutParams mLayoutParams;
-
-    @Mock
-    IDreamOverlayCallback mOverlayCallback;
-
-    @Mock
-    Executor mExecutor;
-
-    /**
-     * {@link TestDreamOverlayService} is a simple {@link DreamOverlayService} implementation for
-     * tracking interactions across {@link IDreamOverlay} binder interface. The service reports
-     * interactions to a {@link Monitor} instance provided at construction.
-     */
-    private static class TestDreamOverlayService extends DreamOverlayService {
-        /**
-         * An interface implemented to be informed when the corresponding methods in
-         * {@link TestDreamOverlayService} are invoked.
-         */
-        interface Monitor {
-            void onStartDream();
-            void onEndDream();
-            void onWakeUp();
-        }
-
-        private final Monitor mMonitor;
-
-        TestDreamOverlayService(Monitor monitor, Executor executor) {
-            super(executor);
-            mMonitor = monitor;
-        }
-
-        @Override
-        public void onStartDream(@NonNull WindowManager.LayoutParams layoutParams) {
-            mMonitor.onStartDream();
-        }
-
-        @Override
-        public void onEndDream() {
-            mMonitor.onEndDream();
-            super.onEndDream();
-        }
-    }
-
-    /**
-     * A {@link IDreamOverlayClientCallback} implementation that captures the requested client.
-     */
-    private static class OverlayClientCallback extends IDreamOverlayClientCallback.Stub {
-        public IDreamOverlayClient retrievedClient;
-        @Override
-        public void onDreamOverlayClient(IDreamOverlayClient client) throws RemoteException {
-            retrievedClient = client;
-        }
-    }
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-    }
-
-    /**
-     * Verifies that callbacks for subclasses are run on the provided executor.
-     */
-    @Test
-    public void testCallbacksRunOnExecutor() throws RemoteException {
-        final TestDreamOverlayService.Monitor monitor = Mockito.mock(
-                TestDreamOverlayService.Monitor.class);
-        final TestDreamOverlayService service = new TestDreamOverlayService(monitor, mExecutor);
-        final IBinder binder = service.onBind(new Intent());
-        final IDreamOverlay overlay = IDreamOverlay.Stub.asInterface(binder);
-
-        final IDreamOverlayClient client = getClient(overlay);
-
-        // Start the dream.
-        client.startDream(mLayoutParams, mOverlayCallback,
-                FIRST_DREAM_COMPONENT.flattenToString(), false);
-
-        // The callback should not have run yet.
-        verify(monitor, never()).onStartDream();
-
-        // Run the Runnable sent to the executor.
-        ArgumentCaptor<Runnable> mRunnableCaptor = ArgumentCaptor.forClass(Runnable.class);
-        verify(mExecutor).execute(mRunnableCaptor.capture());
-        mRunnableCaptor.getValue().run();
-
-        // Callback is run.
-        verify(monitor).onStartDream();
-
-        // Verify onWakeUp is run on the executor.
-        client.wakeUp();
-        verify(monitor, never()).onWakeUp();
-        mRunnableCaptor = ArgumentCaptor.forClass(Runnable.class);
-        verify(mExecutor).execute(mRunnableCaptor.capture());
-        mRunnableCaptor.getValue().run();
-        verify(monitor).onWakeUp();
-
-        // Verify onEndDream is run on the executor.
-        client.endDream();
-        verify(monitor, never()).onEndDream();
-        mRunnableCaptor = ArgumentCaptor.forClass(Runnable.class);
-        verify(mExecutor).execute(mRunnableCaptor.capture());
-        mRunnableCaptor.getValue().run();
-        verify(monitor).onEndDream();
-    }
-
-    /**
-     * Verifies that only the currently started dream is able to affect the overlay.
-     */
-    @Test
-    public void testOverlayClientInteraction() throws RemoteException {
-        doAnswer(invocation -> {
-            ((Runnable) invocation.getArgument(0)).run();
-            return null;
-        }).when(mExecutor).execute(any());
-
-        final TestDreamOverlayService.Monitor monitor = Mockito.mock(
-                TestDreamOverlayService.Monitor.class);
-        final TestDreamOverlayService service = new TestDreamOverlayService(monitor, mExecutor);
-        final IBinder binder = service.onBind(new Intent());
-        final IDreamOverlay overlay = IDreamOverlay.Stub.asInterface(binder);
-
-        // Create two overlay clients and ensure they are unique.
-        final IDreamOverlayClient firstClient = getClient(overlay);
-        assertThat(firstClient).isNotNull();
-
-        final IDreamOverlayClient secondClient = getClient(overlay);
-        assertThat(secondClient).isNotNull();
-
-        assertThat(firstClient).isNotEqualTo(secondClient);
-
-        // Start a dream with the first client and ensure the dream is now active from the
-        // overlay's perspective.
-        firstClient.startDream(mLayoutParams, mOverlayCallback,
-                FIRST_DREAM_COMPONENT.flattenToString(), false);
-
-
-        verify(monitor).onStartDream();
-        assertThat(service.getDreamComponent()).isEqualTo(FIRST_DREAM_COMPONENT);
-
-        Mockito.clearInvocations(monitor);
-
-        // Start a dream from the second client and verify that the overlay has both cycled to
-        // the new dream (ended/started).
-        secondClient.startDream(mLayoutParams, mOverlayCallback,
-                SECOND_DREAM_COMPONENT.flattenToString(), false);
-
-        verify(monitor).onEndDream();
-        verify(monitor).onStartDream();
-        assertThat(service.getDreamComponent()).isEqualTo(SECOND_DREAM_COMPONENT);
-
-        Mockito.clearInvocations(monitor);
-
-        // Verify that interactions with the first, now inactive client don't affect the overlay.
-        firstClient.endDream();
-        verify(monitor, never()).onEndDream();
-
-        firstClient.wakeUp();
-        verify(monitor, never()).onWakeUp();
-    }
-
-    private static IDreamOverlayClient getClient(IDreamOverlay overlay) throws RemoteException {
-        final OverlayClientCallback callback = new OverlayClientCallback();
-        overlay.getClient(callback);
-        return callback.retrievedClient;
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/dreams/DreamServiceTest.java b/services/tests/servicestests/src/com/android/server/dreams/DreamServiceTest.java
deleted file mode 100644
index 0efd296..0000000
--- a/services/tests/servicestests/src/com/android/server/dreams/DreamServiceTest.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.server.dreams;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.junit.Assert.assertFalse;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.content.pm.ServiceInfo;
-import android.service.dreams.DreamService;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.platform.app.InstrumentationRegistry;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class DreamServiceTest {
-    private static final String TEST_PACKAGE_NAME = "com.android.frameworks.servicestests";
-
-    @Test
-    public void testMetadataParsing() throws PackageManager.NameNotFoundException {
-        final String testDreamClassName = "com.android.server.dreams.TestDreamService";
-        final String testSettingsActivity =
-                "com.android.frameworks.servicestests/.TestDreamSettingsActivity";
-        final DreamService.DreamMetadata metadata = getDreamMetadata(testDreamClassName);
-
-        assertThat(metadata.settingsActivity).isEqualTo(
-                ComponentName.unflattenFromString(testSettingsActivity));
-        assertFalse(metadata.showComplications);
-    }
-
-    @Test
-    public void testMetadataParsing_invalidSettingsActivity()
-            throws PackageManager.NameNotFoundException {
-        final String testDreamClassName =
-                "com.android.server.dreams.TestDreamServiceWithInvalidSettings";
-        final DreamService.DreamMetadata metadata = getDreamMetadata(testDreamClassName);
-
-        assertThat(metadata.settingsActivity).isNull();
-    }
-
-    private DreamService.DreamMetadata getDreamMetadata(String dreamClassName)
-            throws PackageManager.NameNotFoundException {
-        final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
-        final ServiceInfo si = context.getPackageManager().getServiceInfo(
-                new ComponentName(TEST_PACKAGE_NAME, dreamClassName),
-                PackageManager.ComponentInfoFlags.of(PackageManager.GET_META_DATA));
-        return DreamService.getDreamMetadata(context, si);
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/BaseAbsoluteVolumeBehaviorTest.java b/services/tests/servicestests/src/com/android/server/hdmi/BaseAbsoluteVolumeBehaviorTest.java
index bc09d4b..399655ffa 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/BaseAbsoluteVolumeBehaviorTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/BaseAbsoluteVolumeBehaviorTest.java
@@ -137,6 +137,20 @@
                     protected void writeStringSystemProperty(String key, String value) {
                         // do nothing
                     }
+
+                    /**
+                     * Override displayOsd to prevent it from broadcasting an intent, which
+                     * can trigger a SecurityException.
+                     */
+                    @Override
+                    void displayOsd(int messageId) {
+                        // do nothing
+                    }
+
+                    @Override
+                    void displayOsd(int messageId, int extra) {
+                        // do nothing
+                    }
                 };
 
         mLooper = mTestLooper.getLooper();
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromPlaybackTest.java b/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromPlaybackTest.java
index 5070b08..68ef80f 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromPlaybackTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromPlaybackTest.java
@@ -118,6 +118,11 @@
                     boolean isPowerStandbyOrTransient() {
                         return false;
                     }
+
+                    @Override
+                    boolean isPowerStandby() {
+                        return false;
+                    }
                 };
 
 
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java b/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java
index 49023c6..26b448a 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/DeviceSelectActionFromTvTest.java
@@ -127,6 +127,11 @@
                     boolean isPowerStandbyOrTransient() {
                         return false;
                     }
+
+                    @Override
+                    boolean isPowerStandby() {
+                        return false;
+                    }
                 };
 
 
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/FakeNativeWrapper.java b/services/tests/servicestests/src/com/android/server/hdmi/FakeNativeWrapper.java
index 3bde665..cb19029 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/FakeNativeWrapper.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/FakeNativeWrapper.java
@@ -61,6 +61,7 @@
     private HdmiPortInfo[] mHdmiPortInfo = null;
     private HdmiCecController.HdmiCecCallback mCallback = null;
     private int mCecVersion = HdmiControlManager.HDMI_CEC_VERSION_2_0;
+    private boolean mIsCecControlEnabled = true;
 
     @Override
     public String nativeInit() {
@@ -128,7 +129,9 @@
     public void enableCec(boolean enabled) {}
 
     @Override
-    public void enableSystemCecControl(boolean enabled) {}
+    public void enableSystemCecControl(boolean enabled) {
+        mIsCecControlEnabled = enabled;
+    }
 
     @Override
     public void nativeSetLanguage(String language) {}
@@ -154,6 +157,10 @@
         mPortConnectionStatus.put(port, connected);
     }
 
+    public boolean getIsCecControlEnabled() {
+        return mIsCecControlEnabled;
+    }
+
     public void setCecVersion(@HdmiControlManager.HdmiCecVersion int cecVersion) {
         mCecVersion = cecVersion;
     }
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/FakePowerManagerWrapper.java b/services/tests/servicestests/src/com/android/server/hdmi/FakePowerManagerWrapper.java
index 7c8a11e..04f921f 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/FakePowerManagerWrapper.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/FakePowerManagerWrapper.java
@@ -24,10 +24,18 @@
  */
 final class FakePowerManagerWrapper extends PowerManagerWrapper {
     private boolean mInteractive;
+    private WakeLockWrapper mWakeLock;
+    private boolean mWasWakeLockInstanceCreated = false;
+
 
     FakePowerManagerWrapper(@NonNull Context context) {
+        this(context, null);
+    }
+
+    FakePowerManagerWrapper(@NonNull Context context, WakeLockWrapper wakeLock) {
         super(context);
         mInteractive = true;
+        mWakeLock = wakeLock;
     }
 
     @Override
@@ -51,5 +59,48 @@
         return;
     }
 
-    // Don't stub WakeLock.
+    @Override
+    WakeLockWrapper newWakeLock(int levelAndFlags, String tag) {
+        if (mWakeLock == null) {
+            mWakeLock = new FakeWakeLockWrapper();
+        }
+        mWasWakeLockInstanceCreated = true;
+        return mWakeLock;
+    }
+
+    boolean wasWakeLockInstanceCreated() {
+        return mWasWakeLockInstanceCreated;
+    }
+
+    /**
+     * "Fake" wrapper for {@link PowerManager.WakeLock}, as opposed to a "Default" wrapper used by
+     * the framework - see {@link PowerManagerWrapper.DefaultWakeLockWrapper}.
+     */
+    public static class FakeWakeLockWrapper implements WakeLockWrapper {
+        private static final String TAG = "FakeWakeLockWrapper";
+        private boolean mWakeLockHeld = false;
+
+        @Override
+        public void acquire(long timeout) {
+            mWakeLockHeld = true;
+        }
+
+        @Override
+        public void acquire() {
+            mWakeLockHeld = true;
+        }
+
+        @Override
+        public void release() {
+            mWakeLockHeld = false;
+        }
+
+        @Override
+        public boolean isHeld() {
+            return mWakeLockHeld;
+        }
+
+        @Override
+        public void setReferenceCounted(boolean value) {}
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java
index 5e54d3b..a621055 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java
@@ -19,14 +19,17 @@
 import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1;
 import static com.android.server.hdmi.Constants.ADDR_TV;
 import static com.android.server.hdmi.Constants.PATH_RELATIONSHIP_ANCESTOR;
+import static com.android.server.hdmi.HdmiControlService.WAKE_UP_SCREEN_ON;
 
 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;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -76,6 +79,8 @@
     private TestLooper mTestLooper = new TestLooper();
     private int mPhysicalAddress = 0x1110;
     private HdmiPortInfo[] mHdmiPortInfo;
+    private HdmiEarcController mHdmiEarcController;
+    private FakeEarcNativeWrapper mEarcNativeWrapper;
 
     @Before
     public void setUp() throws RemoteException {
@@ -94,7 +99,6 @@
         doNothing().when(mHdmiControlServiceSpy)
                 .writeStringSystemProperty(anyString(), anyString());
         doReturn(mHdmiCecAtomWriterSpy).when(mHdmiControlServiceSpy).getAtomWriter();
-
         HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(mContextSpy);
         doReturn(hdmiCecConfig).when(mHdmiControlServiceSpy).getHdmiCecConfig();
 
@@ -118,6 +122,11 @@
         mHdmiControlServiceSpy.setHdmiCecNetwork(mHdmiCecNetwork);
         mHdmiControlServiceSpy.setDeviceConfig(new FakeDeviceConfigWrapper());
 
+        mEarcNativeWrapper = new FakeEarcNativeWrapper();
+        mHdmiEarcController = HdmiEarcController.createWithNativeWrapper(
+                mHdmiControlServiceSpy, mEarcNativeWrapper);
+        mHdmiControlServiceSpy.setEarcController(mHdmiEarcController);
+
         HdmiPortInfo[] hdmiPortInfos = new HdmiPortInfo[1];
         hdmiPortInfos[0] =
                 new HdmiPortInfo.Builder(1, HdmiPortInfo.PORT_OUTPUT, 0x0000)
@@ -301,4 +310,60 @@
                         HdmiCecAtomWriter.FEATURE_ABORT_OPCODE_UNKNOWN,
                         HdmiStatsEnums.FEATURE_ABORT_REASON_UNKNOWN);
     }
+
+    @Test
+    public void testDsmStatusChanged_toggleDsmStatus_ArcSupported_writesAtom() {
+        doReturn(true).when(mHdmiControlServiceSpy).isArcSupported();
+        mHdmiControlServiceSpy.setSoundbarMode(HdmiControlManager.SOUNDBAR_MODE_ENABLED);
+        mTestLooper.dispatchAll();
+
+        verify(mHdmiCecAtomWriterSpy, times(1))
+                .dsmStatusChanged(eq(true), eq(true),
+                        eq(HdmiStatsEnums.LOG_REASON_DSM_SETTING_TOGGLED));
+    }
+
+    @Test
+    public void testDsmStatusChanged_toggleDsmStatus_ArcNotSupported_writesAtom() {
+        doReturn(false).when(mHdmiControlServiceSpy).isArcSupported();
+        mHdmiControlServiceSpy.setSoundbarMode(HdmiControlManager.SOUNDBAR_MODE_ENABLED);
+        mTestLooper.dispatchAll();
+
+        verify(mHdmiCecAtomWriterSpy, times(1))
+                .dsmStatusChanged(eq(false), eq(true),
+                        eq(HdmiStatsEnums.LOG_REASON_DSM_SETTING_TOGGLED));
+    }
+
+    @Test
+    public void testDsmStatusChanged_onWakeUp_ArcSupported_writesAtom_logReasonWake() {
+        mHdmiControlServiceSpy.setSoundbarMode(HdmiControlManager.SOUNDBAR_MODE_DISABLED);
+        Mockito.clearInvocations(mHdmiCecAtomWriterSpy);
+
+        doReturn(true).when(mHdmiControlServiceSpy).isArcSupported();
+        mHdmiControlServiceSpy.onWakeUp(WAKE_UP_SCREEN_ON);
+        mTestLooper.dispatchAll();
+
+        verify(mHdmiCecAtomWriterSpy, times(1))
+                .dsmStatusChanged(eq(true), eq(false),
+                        eq(HdmiStatsEnums.LOG_REASON_DSM_WAKE));
+        verify(mHdmiCecAtomWriterSpy, never())
+                .dsmStatusChanged(anyBoolean(), anyBoolean(),
+                        eq(HdmiStatsEnums.LOG_REASON_DSM_SETTING_TOGGLED));
+    }
+
+    @Test
+    public void testDsmStatusChanged_onWakeUp_ArcNotSupported_writesAtom_logReasonWake() {
+        mHdmiControlServiceSpy.setSoundbarMode(HdmiControlManager.SOUNDBAR_MODE_DISABLED);
+        Mockito.clearInvocations(mHdmiCecAtomWriterSpy);
+
+        doReturn(false).when(mHdmiControlServiceSpy).isArcSupported();
+        mHdmiControlServiceSpy.onWakeUp(WAKE_UP_SCREEN_ON);
+        mTestLooper.dispatchAll();
+
+        verify(mHdmiCecAtomWriterSpy, times(1))
+                .dsmStatusChanged(eq(false), eq(false),
+                        eq(HdmiStatsEnums.LOG_REASON_DSM_WAKE));
+        verify(mHdmiCecAtomWriterSpy, never())
+                .dsmStatusChanged(anyBoolean(), anyBoolean(),
+                        eq(HdmiStatsEnums.LOG_REASON_DSM_SETTING_TOGGLED));
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTvTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTvTest.java
new file mode 100644
index 0000000..30ce961
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTvTest.java
@@ -0,0 +1,252 @@
+/*
+ * 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.server.hdmi;
+
+import static com.android.server.hdmi.Constants.HDMI_EARC_STATUS_EARC_PENDING;
+import static com.android.server.hdmi.Constants.HDMI_EARC_STATUS_UNKNOWN;
+import static com.android.server.hdmi.HdmiControlService.WAKE_UP_SCREEN_ON;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doNothing;
+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 android.content.Context;
+import android.content.ContextWrapper;
+import android.hardware.hdmi.HdmiControlManager;
+import android.hardware.hdmi.HdmiDeviceInfo;
+import android.hardware.hdmi.HdmiPortInfo;
+import android.os.Looper;
+import android.os.RemoteException;
+import android.os.test.TestLooper;
+import android.platform.test.annotations.Presubmit;
+import android.stats.hdmi.HdmiStatsEnums;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import com.android.server.SystemService;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import org.mockito.Mockito;
+
+import java.util.Collections;
+
+/**
+ * Tests for the {@link HdmiCecAtomWriter} class and its usage by the HDMI-CEC framework.
+ */
+@SmallTest
+@Presubmit
+@RunWith(JUnit4.class)
+public class HdmiCecAtomLoggingTvTest {
+    private HdmiCecAtomWriter mHdmiCecAtomWriterSpy;
+    private HdmiControlService mHdmiControlServiceSpy;
+    private HdmiCecController mHdmiCecController;
+    private HdmiMhlControllerStub mHdmiMhlControllerStub;
+    private FakeNativeWrapper mNativeWrapper;
+    private FakePowerManagerWrapper mPowerManager;
+    private HdmiCecNetwork mHdmiCecNetwork;
+    private Looper mLooper;
+    private Context mContextSpy;
+    private TestLooper mTestLooper = new TestLooper();
+    private int mPhysicalAddress = 0x0000;
+    private static final int EARC_PORT_ID = 1;
+    private HdmiEarcController mHdmiEarcController;
+    private FakeEarcNativeWrapper mEarcNativeWrapper;
+
+    @Before
+    public void setUp() throws RemoteException {
+        mHdmiCecAtomWriterSpy = spy(new HdmiCecAtomWriter());
+
+        mLooper = mTestLooper.getLooper();
+
+        mContextSpy = spy(new ContextWrapper(
+                InstrumentationRegistry.getInstrumentation().getTargetContext()));
+
+        FakeAudioFramework audioFramework = new FakeAudioFramework();
+
+        mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy,
+                Collections.singletonList(HdmiDeviceInfo.DEVICE_TV),
+                audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()));
+        doNothing().when(mHdmiControlServiceSpy)
+                .writeStringSystemProperty(anyString(), anyString());
+        doReturn(mHdmiCecAtomWriterSpy).when(mHdmiControlServiceSpy).getAtomWriter();
+
+        HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(mContextSpy);
+        doReturn(hdmiCecConfig).when(mHdmiControlServiceSpy).getHdmiCecConfig();
+
+        mHdmiControlServiceSpy.setIoLooper(mLooper);
+        mHdmiControlServiceSpy.setCecMessageBuffer(
+                new CecMessageBuffer(mHdmiControlServiceSpy));
+
+        mNativeWrapper = new FakeNativeWrapper();
+        mNativeWrapper.setPhysicalAddress(mPhysicalAddress);
+
+        mHdmiCecController = HdmiCecController.createWithNativeWrapper(
+                mHdmiControlServiceSpy, mNativeWrapper, mHdmiCecAtomWriterSpy);
+        mHdmiControlServiceSpy.setCecController(mHdmiCecController);
+
+        mHdmiMhlControllerStub = HdmiMhlControllerStub.create(mHdmiControlServiceSpy);
+        mHdmiControlServiceSpy.setHdmiMhlController(
+                mHdmiMhlControllerStub);
+
+        mHdmiCecNetwork = new HdmiCecNetwork(mHdmiControlServiceSpy,
+                mHdmiCecController, mHdmiMhlControllerStub);
+        mHdmiControlServiceSpy.setHdmiCecNetwork(mHdmiCecNetwork);
+        mHdmiControlServiceSpy.setDeviceConfig(new FakeDeviceConfigWrapper());
+
+        mEarcNativeWrapper = new FakeEarcNativeWrapper();
+        mHdmiEarcController = HdmiEarcController.createWithNativeWrapper(
+                mHdmiControlServiceSpy, mEarcNativeWrapper);
+        mHdmiControlServiceSpy.setEarcController(mHdmiEarcController);
+
+        HdmiPortInfo[] hdmiPortInfos = new HdmiPortInfo[1];
+        hdmiPortInfos[0] =
+                new HdmiPortInfo.Builder(EARC_PORT_ID, HdmiPortInfo.PORT_OUTPUT, 0x0000)
+                        .setCecSupported(true)
+                        .setMhlSupported(false)
+                        .setArcSupported(false)
+                        .setEarcSupported(true)
+                        .build();
+        mNativeWrapper.setPortInfo(hdmiPortInfos);
+        mNativeWrapper.setPortConnectionStatus(EARC_PORT_ID, true);
+
+        mHdmiControlServiceSpy.initService();
+        mPowerManager = new FakePowerManagerWrapper(mContextSpy);
+        mHdmiControlServiceSpy.setPowerManager(mPowerManager);
+        mHdmiControlServiceSpy.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
+        mHdmiControlServiceSpy.setEarcEnabled(HdmiControlManager.EARC_FEATURE_DISABLED);
+        mTestLooper.dispatchAll();
+
+        Mockito.reset(mHdmiCecAtomWriterSpy);
+    }
+
+    @Test
+    public void testEarcStatusChanged_handleEarcStateChange_writesAtom() {
+        mHdmiControlServiceSpy.setEarcEnabled(HdmiControlManager.EARC_FEATURE_ENABLED);
+        mTestLooper.dispatchAll();
+        Mockito.clearInvocations(mHdmiCecAtomWriterSpy);
+
+        mHdmiControlServiceSpy.handleEarcStateChange(HDMI_EARC_STATUS_EARC_PENDING,
+                EARC_PORT_ID);
+        verify(mHdmiCecAtomWriterSpy, times(1))
+                .earcStatusChanged(true, true, HDMI_EARC_STATUS_EARC_PENDING,
+                        HDMI_EARC_STATUS_EARC_PENDING,
+                        HdmiStatsEnums.LOG_REASON_EARC_STATUS_CHANGED);
+    }
+
+    @Test
+    public void testEarcStatusChanged_onWakeUp_earcSupported_earcEnabled_writesAtom() {
+        mHdmiControlServiceSpy.setEarcEnabled(HdmiControlManager.EARC_FEATURE_ENABLED);
+        Mockito.clearInvocations(mHdmiCecAtomWriterSpy);
+        mTestLooper.dispatchAll();
+
+        mHdmiControlServiceSpy.onWakeUp(WAKE_UP_SCREEN_ON);
+        verify(mHdmiCecAtomWriterSpy, times(1))
+                .earcStatusChanged(true, true, HDMI_EARC_STATUS_EARC_PENDING,
+                        HDMI_EARC_STATUS_EARC_PENDING, HdmiStatsEnums.LOG_REASON_WAKE);
+    }
+
+    @Test
+    public void testEarcStatusChanged_onWakeUp_earcSupported_earcDisabled_writesAtom() {
+        mHdmiControlServiceSpy.setEarcEnabled(HdmiControlManager.EARC_FEATURE_DISABLED);
+        Mockito.clearInvocations(mHdmiCecAtomWriterSpy);
+        mTestLooper.dispatchAll();
+
+        mHdmiControlServiceSpy.onWakeUp(WAKE_UP_SCREEN_ON);
+        verify(mHdmiCecAtomWriterSpy, times(1))
+                .earcStatusChanged(true, false, HDMI_EARC_STATUS_UNKNOWN,
+                        HDMI_EARC_STATUS_UNKNOWN, HdmiStatsEnums.LOG_REASON_WAKE);
+    }
+
+    @Test
+    public void testEarcStatusChanged_onWakeUp_earcNotSupported_earcEnabled_writesAtom() {
+        doReturn(false).when(mHdmiControlServiceSpy).isEarcSupported();
+        mTestLooper.dispatchAll();
+
+        mHdmiControlServiceSpy.setEarcEnabled(HdmiControlManager.EARC_FEATURE_ENABLED);
+        Mockito.clearInvocations(mHdmiCecAtomWriterSpy);
+        mTestLooper.dispatchAll();
+
+        mHdmiControlServiceSpy.onWakeUp(WAKE_UP_SCREEN_ON);
+        verify(mHdmiCecAtomWriterSpy, times(1))
+                .earcStatusChanged(false, true, HDMI_EARC_STATUS_UNKNOWN,
+                        HDMI_EARC_STATUS_UNKNOWN, HdmiStatsEnums.LOG_REASON_WAKE);
+    }
+
+    @Test
+    public void testEarcStatusChanged_onWakeUp_earcNotSupported_earcDisabled_writesAtom() {
+        doReturn(false).when(mHdmiControlServiceSpy).isEarcSupported();
+        mTestLooper.dispatchAll();
+
+        mHdmiControlServiceSpy.setEarcEnabled(HdmiControlManager.EARC_FEATURE_DISABLED);
+        Mockito.clearInvocations(mHdmiCecAtomWriterSpy);
+        mTestLooper.dispatchAll();
+
+        mHdmiControlServiceSpy.onWakeUp(WAKE_UP_SCREEN_ON);
+        verify(mHdmiCecAtomWriterSpy, times(1))
+                .earcStatusChanged(false, false, HDMI_EARC_STATUS_UNKNOWN,
+                        HDMI_EARC_STATUS_UNKNOWN, HdmiStatsEnums.LOG_REASON_WAKE);
+    }
+
+    @Test
+    public void testEarcStatusChanged_handleEarcStateChange_unSupportedPort_writesAtom() {
+        // Initialize HDMI port with eARC not supported.
+        HdmiPortInfo[] hdmiPortInfos = new HdmiPortInfo[1];
+        hdmiPortInfos[0] =
+                new HdmiPortInfo.Builder(EARC_PORT_ID, HdmiPortInfo.PORT_OUTPUT, 0x0000)
+                        .setCecSupported(true)
+                        .setMhlSupported(false)
+                        .setArcSupported(false)
+                        .setEarcSupported(false)
+                        .build();
+        mNativeWrapper.setPortInfo(hdmiPortInfos);
+        mNativeWrapper.setPortConnectionStatus(EARC_PORT_ID, true);
+        mHdmiControlServiceSpy.initService();
+        mTestLooper.dispatchAll();
+
+        mHdmiControlServiceSpy.setEarcEnabled(HdmiControlManager.EARC_FEATURE_ENABLED);
+        mTestLooper.dispatchAll();
+        Mockito.clearInvocations(mHdmiCecAtomWriterSpy);
+
+        mHdmiControlServiceSpy.handleEarcStateChange(HDMI_EARC_STATUS_EARC_PENDING, EARC_PORT_ID);
+        verify(mHdmiCecAtomWriterSpy, times(1))
+                .earcStatusChanged(eq(false), eq(true), anyInt(),
+                        eq(HDMI_EARC_STATUS_EARC_PENDING),
+                        eq(HdmiStatsEnums.LOG_REASON_EARC_STATUS_CHANGED_UNSUPPORTED_PORT));
+    }
+
+    @Test
+    public void testEarcStatusChanged_handleEarcStateChange_wrongState_writesAtom() {
+        mHdmiControlServiceSpy.setEarcEnabled(HdmiControlManager.EARC_FEATURE_DISABLED);
+        mTestLooper.dispatchAll();
+        Mockito.clearInvocations(mHdmiCecAtomWriterSpy);
+
+        // mEarcLocalDevice should be empty since eARC is disabled.
+        mHdmiControlServiceSpy.handleEarcStateChange(HDMI_EARC_STATUS_EARC_PENDING, EARC_PORT_ID);
+        verify(mHdmiCecAtomWriterSpy, times(1))
+                .earcStatusChanged(eq(true), eq(false), anyInt(),
+                        eq(HDMI_EARC_STATUS_EARC_PENDING),
+                        eq(HdmiStatsEnums.LOG_REASON_EARC_STATUS_CHANGED_WRONG_STATE));
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java
index 9882670..3dd8312 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java
@@ -504,6 +504,19 @@
     }
 
     @Test
+    public void handleUserControlPressed_ignoreAdditionalParameters() {
+        byte[] params = new byte[] {
+                (byte) (HdmiCecKeycode.CEC_KEYCODE_POWER_TOGGLE_FUNCTION & 0xFF), (byte) 0xFF};
+        mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY;
+        @Constants.HandleMessageResult int result = mHdmiLocalDevice.handleUserControlPressed(
+                HdmiCecMessageBuilder.buildUserControlPressed(ADDR_TV, ADDR_PLAYBACK_1, params));
+
+        assertEquals(Constants.HANDLED, result);
+        assertThat(mWakeupMessageReceived).isTrue();
+        assertThat(mStandbyMessageReceived).isFalse();
+    }
+
+    @Test
     public void handleVendorCommand_notHandled() {
         HdmiCecMessage vendorCommand = HdmiCecMessageBuilder.buildVendorCommand(ADDR_TV,
                 ADDR_PLAYBACK_1, new byte[]{0});
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java
index d52b7ea..55e5dbd 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java
@@ -1013,6 +1013,24 @@
     }
 
     @Test
+    public void receiveSetAudioVolumeLevel_volumeOutOfBounds_noVolumeChange() {
+        mAudioFramework.setStreamMaxVolume(AudioManager.STREAM_MUSIC, 25);
+
+        // Max volume of STREAM_MUSIC is retrieved on boot
+        mHdmiControlService.onBootPhase(PHASE_SYSTEM_SERVICES_READY);
+        mTestLooper.dispatchAll();
+
+        mNativeWrapper.onCecMessage(SetAudioVolumeLevelMessage.build(
+                ADDR_PLAYBACK_1,
+                ADDR_TV,
+                127));
+        mTestLooper.dispatchAll();
+
+        verify(mAudioManager, never()).setStreamVolume(eq(AudioManager.STREAM_MUSIC), anyInt(),
+                anyInt());
+    }
+
+    @Test
     public void tvSendRequestArcTerminationOnSleep() {
         // Emulate Audio device on port 0x2000 (supports ARC)
         mNativeWrapper.setPortConnectionStatus(2, true);
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java
index bdf3a5f..0aa72d0 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java
@@ -18,9 +18,6 @@
 
 import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM;
 import static com.android.server.hdmi.Constants.ADDR_BROADCAST;
-import static com.android.server.hdmi.Constants.ADDR_RECORDER_1;
-import static com.android.server.hdmi.Constants.ADDR_RECORDER_2;
-import static com.android.server.hdmi.Constants.ADDR_RECORDER_3;
 import static com.android.server.hdmi.HdmiCecMessageValidator.ERROR_DESTINATION;
 import static com.android.server.hdmi.HdmiCecMessageValidator.ERROR_PARAMETER;
 import static com.android.server.hdmi.HdmiCecMessageValidator.ERROR_PARAMETER_LONG;
@@ -43,9 +40,7 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-import java.util.Arrays;
 import java.util.Collections;
-import java.util.List;
 
 /** Tests for {@link com.android.server.hdmi.HdmiCecMessageValidator} class. */
 @SmallTest
@@ -651,13 +646,9 @@
 
     @Test
     public void isValid_activeSource() {
-        // Only source devices should broadcast <Active Source> messages.
-        List<Integer> nonSourceDevicesAddresses = Arrays.asList(ADDR_RECORDER_1, ADDR_RECORDER_2,
-                ADDR_AUDIO_SYSTEM, ADDR_RECORDER_3);
-
         for (int i = 0; i < ADDR_BROADCAST; ++i) {
             String message = Integer.toHexString(i) + "F:82:10:00";
-            if (nonSourceDevicesAddresses.contains(i)) {
+            if (i == ADDR_AUDIO_SYSTEM) {
                 assertMessageValidity(message).isEqualTo(ERROR_SOURCE);
             } else {
                 assertMessageValidity(message).isEqualTo(OK);
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java
index 39930bc..0d172fdb 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java
@@ -21,6 +21,7 @@
 
 import static com.android.server.SystemService.PHASE_BOOT_COMPLETED;
 import static com.android.server.SystemService.PHASE_SYSTEM_SERVICES_READY;
+import static com.android.server.hdmi.HdmiControlService.DEVICE_CLEANUP_TIMEOUT;
 import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC;
 import static com.android.server.hdmi.HdmiControlService.WAKE_UP_SCREEN_ON;
 
@@ -37,6 +38,7 @@
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -63,6 +65,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
+import org.mockito.InOrder;
 import org.mockito.Mockito;
 
 import java.util.ArrayList;
@@ -87,6 +90,7 @@
     private HdmiEarcController mHdmiEarcController;
     private FakeEarcNativeWrapper mEarcNativeWrapper;
     private FakePowerManagerWrapper mPowerManager;
+    private WakeLockWrapper mWakeLockSpy;
     private Looper mMyLooper;
     private TestLooper mTestLooper = new TestLooper();
     private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
@@ -164,7 +168,8 @@
                         .build();
         mNativeWrapper.setPortInfo(mHdmiPortInfo);
         mHdmiControlServiceSpy.initService();
-        mPowerManager = new FakePowerManagerWrapper(mContextSpy);
+        mWakeLockSpy = spy(new FakePowerManagerWrapper.FakeWakeLockWrapper());
+        mPowerManager = new FakePowerManagerWrapper(mContextSpy, mWakeLockSpy);
         mHdmiControlServiceSpy.setPowerManager(mPowerManager);
         mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
         mHdmiControlServiceSpy.setEarcSupported(true);
@@ -190,6 +195,7 @@
         doReturn(true).when(mHdmiControlServiceSpy).isStandbyMessageReceived();
 
         mHdmiControlServiceSpy.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
+
         assertTrue(mPlaybackDeviceSpy.isStandby());
         assertTrue(mAudioSystemDeviceSpy.isStandby());
         assertTrue(mPlaybackDeviceSpy.isDisabled());
@@ -197,6 +203,75 @@
     }
 
     @Test
+    public void playbackOnlyDevice_onStandbyCompleted_disableCecController() {
+        mLocalDevices.remove(mAudioSystemDeviceSpy);
+        mHdmiControlServiceSpy.clearCecLocalDevices();
+        mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
+        mTestLooper.dispatchAll();
+        mHdmiControlServiceSpy.setPowerStatus(HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY);
+
+        assertTrue(mNativeWrapper.getIsCecControlEnabled());
+        mHdmiControlServiceSpy.disableCecLocalDevices(
+                new HdmiCecLocalDevice.PendingActionClearedCallback() {
+                    @Override
+                    public void onCleared(HdmiCecLocalDevice device) {
+                        assertTrue(mNativeWrapper.getIsCecControlEnabled());
+                        mHdmiControlServiceSpy.onPendingActionsCleared(
+                                HdmiControlService.STANDBY_SCREEN_OFF);
+                    }
+                });
+        mTestLooper.dispatchAll();
+
+        verify(mPlaybackDeviceSpy, times(1)).invokeStandbyCompletedCallback(any());
+        assertFalse(mNativeWrapper.getIsCecControlEnabled());
+    }
+
+
+    @Test
+    public void playbackAndAudioDevice_onStandbyCompleted_doNotDisableCecController() {
+        mLocalDeviceTypes.add(HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM);
+        mHdmiControlServiceSpy.setPowerStatus(HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY);
+
+        assertTrue(mNativeWrapper.getIsCecControlEnabled());
+        mHdmiControlServiceSpy.disableCecLocalDevices(
+                new HdmiCecLocalDevice.PendingActionClearedCallback() {
+                    @Override
+                    public void onCleared(HdmiCecLocalDevice device) {
+                        assertTrue(mNativeWrapper.getIsCecControlEnabled());
+                        mHdmiControlServiceSpy.onPendingActionsCleared(
+                                HdmiControlService.STANDBY_SCREEN_OFF);
+                    }
+                });
+        mTestLooper.dispatchAll();
+
+        verify(mPlaybackDeviceSpy, times(1)).invokeStandbyCompletedCallback(any());
+        verify(mAudioSystemDeviceSpy, times(1)).invokeStandbyCompletedCallback(any());
+        assertTrue(mNativeWrapper.getIsCecControlEnabled());
+    }
+
+    @Test
+    public void onStandby_acquireAndReleaseWakeLockSuccessfully() {
+        mHdmiControlServiceSpy.getHdmiCecConfig().setStringValue(
+                HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE,
+                HdmiControlManager.POWER_CONTROL_MODE_TV_AND_AUDIO_SYSTEM);
+        mHdmiControlServiceSpy.setPowerStatus(HdmiControlManager.POWER_STATUS_ON);
+        doReturn(true).when(mHdmiControlServiceSpy).isStandbyMessageReceived();
+        mTestLooper.dispatchAll();
+
+        assertFalse(mPowerManager.wasWakeLockInstanceCreated());
+        mHdmiControlServiceSpy.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
+
+        InOrder inOrder = inOrder(mHdmiControlServiceSpy, mWakeLockSpy);
+        inOrder.verify(mWakeLockSpy, times(1)).acquire(DEVICE_CLEANUP_TIMEOUT);
+        inOrder.verify(mHdmiControlServiceSpy, times(1)).disableCecLocalDevices(any());
+        inOrder.verify(mHdmiControlServiceSpy, times(1))
+                .onPendingActionsCleared(HdmiControlService.STANDBY_SCREEN_OFF);
+        inOrder.verify(mWakeLockSpy, times(1)).release();
+
+        assertTrue(mPowerManager.wasWakeLockInstanceCreated());
+    }
+
+    @Test
     public void initialPowerStatus_normalBoot_isTransientToStandby() {
         assertThat(mHdmiControlServiceSpy.getInitialPowerStatus()).isEqualTo(
                 HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY);
@@ -903,6 +978,33 @@
         assertThat(vendorCmdListener.mVendorCommandCallbackReceived).isFalse();
     }
 
+    @Test
+    public void multipleVendorCommandListeners_receiveCallback() {
+        int destAddress = mHdmiControlServiceSpy.playback().getDeviceInfo().getLogicalAddress();
+        int sourceAddress = Constants.ADDR_TV;
+        byte[] params = {0x00, 0x01, 0x02, 0x03};
+        int vendorId = 0x123456;
+        mHdmiControlServiceSpy.setPowerStatus(HdmiControlManager.POWER_STATUS_ON);
+
+        VendorCommandListener vendorCmdListener =
+                new VendorCommandListener(sourceAddress, destAddress, params, vendorId);
+        VendorCommandListener secondVendorCmdListener =
+                new VendorCommandListener(sourceAddress, destAddress, params, vendorId);
+        mHdmiControlServiceSpy.addVendorCommandListener(vendorCmdListener, vendorId);
+        mHdmiControlServiceSpy.addVendorCommandListener(secondVendorCmdListener, vendorId);
+        mTestLooper.dispatchAll();
+
+        HdmiCecMessage vendorCommandNoId =
+                HdmiCecMessageBuilder.buildVendorCommand(sourceAddress, destAddress, params);
+        mNativeWrapper.onCecMessage(vendorCommandNoId);
+        mTestLooper.dispatchAll();
+        assertThat(vendorCmdListener.mVendorCommandCallbackReceived).isTrue();
+        assertThat(vendorCmdListener.mParamsCorrect).isTrue();
+
+        assertThat(secondVendorCmdListener.mVendorCommandCallbackReceived).isTrue();
+        assertThat(secondVendorCmdListener.mParamsCorrect).isTrue();
+    }
+
     private static class VendorCommandListener extends IHdmiVendorCommandListener.Stub {
         boolean mVendorCommandCallbackReceived = false;
         boolean mParamsCorrect = false;
@@ -1423,8 +1525,10 @@
         }
 
         @Override
-        protected void onStandby(boolean initiatedByCec, int standbyAction) {
+        protected void onStandby(boolean initiatedByCec, int standbyAction,
+                StandbyCompletedCallback callback) {
             mIsStandby = true;
+            invokeStandbyCompletedCallback(callback);
         }
 
         protected boolean isStandby() {
@@ -1476,8 +1580,10 @@
         }
 
         @Override
-        protected void onStandby(boolean initiatedByCec, int standbyAction) {
+        protected void onStandby(boolean initiatedByCec, int standbyAction,
+                StandbyCompletedCallback callback) {
             mIsStandby = true;
+            invokeStandbyCompletedCallback(callback);
         }
 
         protected boolean isStandby() {
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ResendCecCommandActionPlaybackTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ResendCecCommandActionPlaybackTest.java
new file mode 100644
index 0000000..061e1f9
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/hdmi/ResendCecCommandActionPlaybackTest.java
@@ -0,0 +1,378 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.hdmi;
+
+import static com.android.server.SystemService.PHASE_SYSTEM_SERVICES_READY;
+import static com.android.server.hdmi.ResendCecCommandAction.SEND_COMMAND_RETRY_MS;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.hardware.hdmi.HdmiControlManager;
+import android.hardware.hdmi.HdmiDeviceInfo;
+import android.hardware.tv.cec.V1_0.SendMessageResult;
+import android.os.Looper;
+import android.os.test.TestLooper;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.util.Collections;
+
+/** Tests for {@link ResendCecCommandAction} */
+@SmallTest
+@Presubmit
+@RunWith(JUnit4.class)
+public class ResendCecCommandActionPlaybackTest {
+    private static final String TAG = "SendCecCommandActionPlaybackTest";
+    private HdmiControlService mHdmiControlService;
+    private HdmiCecLocalDevice mPlaybackDevice;
+    private FakeNativeWrapper mNativeWrapper;
+    private FakePowerManagerWrapper mPowerManager;
+    private Looper mMyLooper;
+    private TestLooper mTestLooper = new TestLooper();
+    private int mPhysicalAddress;
+    private boolean mIsPowerStandby;
+
+    @Before
+    public void setUp() throws Exception {
+        Context context = InstrumentationRegistry.getTargetContext();
+        FakeAudioFramework audioFramework = new FakeAudioFramework();
+
+        mHdmiControlService = new HdmiControlService(context,
+                Collections.singletonList(HdmiDeviceInfo.DEVICE_PLAYBACK),
+                audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()) {
+
+            @Override
+            boolean isPowerStandby() {
+                return mIsPowerStandby;
+            }
+
+            @Override
+            protected void writeStringSystemProperty(String key, String value) {
+                // do nothing
+            }
+        };
+        mIsPowerStandby = false;
+
+        mMyLooper = mTestLooper.getLooper();
+        mHdmiControlService.setIoLooper(mMyLooper);
+        mHdmiControlService.setHdmiCecConfig(new FakeHdmiCecConfig(context));
+        mHdmiControlService.setDeviceConfig(new FakeDeviceConfigWrapper());
+        mNativeWrapper = new FakeNativeWrapper();
+        HdmiCecController hdmiCecController = HdmiCecController.createWithNativeWrapper(
+                this.mHdmiControlService, mNativeWrapper, mHdmiControlService.getAtomWriter());
+        mHdmiControlService.setCecController(hdmiCecController);
+        mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService));
+        mHdmiControlService.initService();
+        mHdmiControlService.onBootPhase(PHASE_SYSTEM_SERVICES_READY);
+        mPowerManager = new FakePowerManagerWrapper(context);
+        mHdmiControlService.setPowerManager(mPowerManager);
+        mPhysicalAddress = 0x2000;
+        mNativeWrapper.setPhysicalAddress(mPhysicalAddress);
+        mTestLooper.dispatchAll();
+        mPlaybackDevice = mHdmiControlService.playback();
+
+        mTestLooper.dispatchAll();
+        mNativeWrapper.clearResultMessages();
+    }
+
+    @Test
+    public void sendCecCommand_activeSource_sendMessageFails_resendMessage() {
+        mNativeWrapper.setMessageSendResult(Constants.MESSAGE_ACTIVE_SOURCE,
+                SendMessageResult.BUSY);
+        mTestLooper.dispatchAll();
+        HdmiCecMessage activeSource = HdmiCecMessageBuilder.buildActiveSource(
+                mPlaybackDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress);
+        mHdmiControlService.sendCecCommand(activeSource);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(activeSource);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(activeSource);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(activeSource);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(activeSource);
+    }
+
+    @Test
+    public void sendCecCommand_inactiveSource_sendMessageFails_resendMessage() {
+        mNativeWrapper.setMessageSendResult(Constants.MESSAGE_INACTIVE_SOURCE,
+                SendMessageResult.BUSY);
+        mTestLooper.dispatchAll();
+        HdmiCecMessage inactiveSourceMessage = HdmiCecMessageBuilder.buildInactiveSource(
+                mPlaybackDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress);
+        mHdmiControlService.sendCecCommand(inactiveSourceMessage);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(inactiveSourceMessage);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(inactiveSourceMessage);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(inactiveSourceMessage);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(inactiveSourceMessage);
+    }
+
+    @Test
+    public void sendCecCommand_inactiveSource_onStandby_powerControlModeNone_sendMessage() {
+        mPlaybackDevice.mService.getHdmiCecConfig().setStringValue(
+                HdmiControlManager.CEC_SETTING_NAME_POWER_CONTROL_MODE,
+                HdmiControlManager.POWER_CONTROL_MODE_NONE);
+        mPlaybackDevice.setActiveSource(mPlaybackDevice.getDeviceInfo().getLogicalAddress(),
+                mPhysicalAddress, "SendCecCommandActionPlaybackTest");
+        mIsPowerStandby = true;
+        mPlaybackDevice.onStandby(false, HdmiControlService.STANDBY_SCREEN_OFF);
+        mTestLooper.dispatchAll();
+        HdmiCecMessage inactiveSourceMessage = HdmiCecMessageBuilder.buildInactiveSource(
+                mPlaybackDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress);
+
+        assertThat(mNativeWrapper.getResultMessages()).contains(inactiveSourceMessage);
+    }
+
+    @Test
+    public void sendCecCommand_inactiveSource_onStandby_initiatedByCec_sendMessage() {
+        mPlaybackDevice.setActiveSource(mPlaybackDevice.getDeviceInfo().getLogicalAddress(),
+                mPhysicalAddress, "SendCecCommandActionPlaybackTest");
+        mIsPowerStandby = true;
+        mPlaybackDevice.onStandby(true, HdmiControlService.STANDBY_SCREEN_OFF);
+        mTestLooper.dispatchAll();
+        HdmiCecMessage inactiveSourceMessage = HdmiCecMessageBuilder.buildInactiveSource(
+                mPlaybackDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress);
+
+        assertThat(mNativeWrapper.getResultMessages()).contains(inactiveSourceMessage);
+    }
+
+    @Test
+    public void sendCecCommand_routingChange_sendMessageFails_resendMessage() {
+        mNativeWrapper.setMessageSendResult(Constants.MESSAGE_ROUTING_CHANGE,
+                SendMessageResult.BUSY);
+        mTestLooper.dispatchAll();
+        int otherPhysicalAddress = 0x3000;
+        HdmiCecMessage routingChange = HdmiCecMessageBuilder.buildRoutingChange(
+                mPlaybackDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress,
+                otherPhysicalAddress);
+        mHdmiControlService.sendCecCommand(routingChange);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(routingChange);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(routingChange);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(routingChange);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(routingChange);
+    }
+
+    @Test
+    public void sendCecCommand_setStreamPath_sendMessageFails_resendMessage() {
+        mNativeWrapper.setMessageSendResult(Constants.MESSAGE_SET_STREAM_PATH,
+                SendMessageResult.BUSY);
+        mTestLooper.dispatchAll();
+        int otherPhysicalAddress = 0x3000;
+        HdmiCecMessage setStreamPath = HdmiCecMessageBuilder.buildSetStreamPath(
+                mPlaybackDevice.getDeviceInfo().getLogicalAddress(), otherPhysicalAddress);
+        mHdmiControlService.sendCecCommand(setStreamPath);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(setStreamPath);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(setStreamPath);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(setStreamPath);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(setStreamPath);
+    }
+
+    @Test
+    public void sendCecCommand_textViewOn_sendMessageFails_resendMessage() {
+        mNativeWrapper.setMessageSendResult(Constants.MESSAGE_TEXT_VIEW_ON, SendMessageResult.BUSY);
+        mTestLooper.dispatchAll();
+        HdmiCecMessage textViewOn = HdmiCecMessageBuilder.buildTextViewOn(
+                mPlaybackDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress);
+        mHdmiControlService.sendCecCommand(textViewOn);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(textViewOn);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(textViewOn);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(textViewOn);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(textViewOn);
+    }
+
+    @Test
+    public void sendCecCommand_imageViewOn_sendMessageFails_resendMessage() {
+        mNativeWrapper.setMessageSendResult(Constants.MESSAGE_IMAGE_VIEW_ON,
+                SendMessageResult.BUSY);
+        mTestLooper.dispatchAll();
+        HdmiCecMessage imageViewOn = HdmiCecMessageBuilder.buildImageViewOn(
+                mPlaybackDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress);
+        mHdmiControlService.sendCecCommand(imageViewOn);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(imageViewOn);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(imageViewOn);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(imageViewOn);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(imageViewOn);
+    }
+
+    @Test
+    public void sendCecCommand_activeSource_sendMessageSuccess_noResendMessage() {
+        mNativeWrapper.setMessageSendResult(Constants.MESSAGE_ACTIVE_SOURCE,
+                SendMessageResult.SUCCESS);
+        mTestLooper.dispatchAll();
+        HdmiCecMessage activeSource = HdmiCecMessageBuilder.buildActiveSource(
+                mPlaybackDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress);
+        mHdmiControlService.sendCecCommand(activeSource);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(activeSource);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(activeSource);
+    }
+
+    @Test
+    public void sendCecCommand_reportPhysicalAddress_sendMessageFails_noResendMessage() {
+        mNativeWrapper.setMessageSendResult(Constants.MESSAGE_REPORT_PHYSICAL_ADDRESS,
+                SendMessageResult.BUSY);
+        mTestLooper.dispatchAll();
+        HdmiCecMessage reportPhysicalAddress = HdmiCecMessageBuilder
+                .buildReportPhysicalAddressCommand(
+                        mPlaybackDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress,
+                        Constants.ALL_DEVICE_TYPES_PLAYBACK);
+        mHdmiControlService.sendCecCommand(reportPhysicalAddress);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(reportPhysicalAddress);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(reportPhysicalAddress);
+    }
+
+    @Test
+    public void sendCecCommand_inactiveSource_sendMessageFails_afterStandby_noResendMessage() {
+        mNativeWrapper.setMessageSendResult(Constants.MESSAGE_INACTIVE_SOURCE,
+                SendMessageResult.BUSY);
+        mPlaybackDevice.setActiveSource(mPlaybackDevice.getDeviceInfo().getLogicalAddress(),
+                mPhysicalAddress, "SendCecCommandActionPlaybackTest");
+        mIsPowerStandby = true;
+        mPlaybackDevice.onStandby(true, HdmiControlService.STANDBY_SCREEN_OFF);
+        mTestLooper.dispatchAll();
+        HdmiCecMessage inactiveSourceMessage = HdmiCecMessageBuilder.buildInactiveSource(
+                mPlaybackDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress);
+        assertThat(mNativeWrapper.getResultMessages()).contains(inactiveSourceMessage);
+
+        mNativeWrapper.clearResultMessages();
+        mHdmiControlService.onWakeUp(HdmiControlService.WAKE_UP_SCREEN_ON);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(inactiveSourceMessage);
+
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(inactiveSourceMessage);
+    }
+
+    @Test
+    public void sendCecCommand_onStandby_removeAction_noResendMessage() {
+        mNativeWrapper.setMessageSendResult(Constants.MESSAGE_INACTIVE_SOURCE,
+                SendMessageResult.BUSY);
+        mTestLooper.dispatchAll();
+        HdmiCecMessage inactiveSourceMessage = HdmiCecMessageBuilder.buildInactiveSource(
+                mPlaybackDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress);
+        mHdmiControlService.sendCecCommand(inactiveSourceMessage);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(inactiveSourceMessage);
+        mHdmiControlService.onStandby(HdmiControlService.STANDBY_SCREEN_OFF);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(inactiveSourceMessage);
+
+        mTestLooper.dispatchAll();
+        mHdmiControlService.onWakeUp(HdmiControlService.WAKE_UP_SCREEN_ON);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(inactiveSourceMessage);
+
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(inactiveSourceMessage);
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ResendCecCommandActionTvTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ResendCecCommandActionTvTest.java
new file mode 100644
index 0000000..b25ea2c
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/hdmi/ResendCecCommandActionTvTest.java
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.hdmi;
+
+import static com.android.server.SystemService.PHASE_SYSTEM_SERVICES_READY;
+import static com.android.server.hdmi.ResendCecCommandAction.SEND_COMMAND_RETRY_MS;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.hardware.hdmi.HdmiDeviceInfo;
+import android.hardware.tv.cec.V1_0.SendMessageResult;
+import android.os.Looper;
+import android.os.test.TestLooper;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.util.Collections;
+
+/** Tests for {@link ResendCecCommandAction} */
+@SmallTest
+@Presubmit
+@RunWith(JUnit4.class)
+public class ResendCecCommandActionTvTest {
+    private static final String TAG = "SendCecCommandActionTvTest";
+    private HdmiControlService mHdmiControlService;
+    private HdmiCecLocalDevice mTvDevice;
+    private FakeNativeWrapper mNativeWrapper;
+    private FakePowerManagerWrapper mPowerManager;
+    private Looper mMyLooper;
+    private TestLooper mTestLooper = new TestLooper();
+    private int mPhysicalAddress;
+
+    @Before
+    public void setUp() throws Exception {
+        Context context = InstrumentationRegistry.getTargetContext();
+        FakeAudioFramework audioFramework = new FakeAudioFramework();
+
+        mHdmiControlService = new HdmiControlService(context,
+                Collections.singletonList(HdmiDeviceInfo.DEVICE_TV),
+                audioFramework.getAudioManager(), audioFramework.getAudioDeviceVolumeManager()) {
+
+            @Override
+            boolean isPowerStandby() {
+                return false;
+            }
+
+            @Override
+            protected void writeStringSystemProperty(String key, String value) {
+                // do nothing
+            }
+
+            @Override
+            boolean verifyPhysicalAddresses(HdmiCecMessage message) {
+                return true;
+            }
+        };
+
+        mMyLooper = mTestLooper.getLooper();
+        mHdmiControlService.setIoLooper(mMyLooper);
+        mHdmiControlService.setHdmiCecConfig(new FakeHdmiCecConfig(context));
+        mHdmiControlService.setDeviceConfig(new FakeDeviceConfigWrapper());
+        mNativeWrapper = new FakeNativeWrapper();
+        HdmiCecController hdmiCecController = HdmiCecController.createWithNativeWrapper(
+                this.mHdmiControlService, mNativeWrapper, mHdmiControlService.getAtomWriter());
+        mHdmiControlService.setCecController(hdmiCecController);
+        mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService));
+        mHdmiControlService.initService();
+        mHdmiControlService.onBootPhase(PHASE_SYSTEM_SERVICES_READY);
+        mPowerManager = new FakePowerManagerWrapper(context);
+        mHdmiControlService.setPowerManager(mPowerManager);
+        mPhysicalAddress = 0x0000;
+        mNativeWrapper.setPhysicalAddress(mPhysicalAddress);
+        mTestLooper.dispatchAll();
+        mTvDevice = mHdmiControlService.tv();
+
+        mTestLooper.dispatchAll();
+        mNativeWrapper.clearResultMessages();
+    }
+
+    @Test
+    public void sendCecCommand_activeSource_sendMessageFails_resendMessage() {
+        mNativeWrapper.setMessageSendResult(Constants.MESSAGE_ACTIVE_SOURCE,
+                SendMessageResult.BUSY);
+        mTestLooper.dispatchAll();
+        HdmiCecMessage activeSource = HdmiCecMessageBuilder.buildActiveSource(
+                mTvDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress);
+        mHdmiControlService.sendCecCommand(activeSource);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(activeSource);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(activeSource);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(activeSource);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(activeSource);
+    }
+
+    @Test
+    public void sendCecCommand_inactiveSource_sendMessageFails_resendMessage() {
+        mNativeWrapper.setMessageSendResult(Constants.MESSAGE_INACTIVE_SOURCE,
+                SendMessageResult.BUSY);
+        mTestLooper.dispatchAll();
+        HdmiCecMessage inactiveSourceMessage = HdmiCecMessageBuilder.buildInactiveSource(
+                mTvDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress);
+        mHdmiControlService.sendCecCommand(inactiveSourceMessage);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(inactiveSourceMessage);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(inactiveSourceMessage);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(inactiveSourceMessage);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(inactiveSourceMessage);
+    }
+
+    @Test
+    public void sendCecCommand_routingChange_sendMessageFails_resendMessage() {
+        mNativeWrapper.setMessageSendResult(Constants.MESSAGE_ROUTING_CHANGE,
+                SendMessageResult.BUSY);
+        mTestLooper.dispatchAll();
+        int otherPhysicalAddress = 0x3000;
+        HdmiCecMessage routingChange = HdmiCecMessageBuilder.buildRoutingChange(
+                mTvDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress,
+                otherPhysicalAddress);
+        mHdmiControlService.sendCecCommand(routingChange);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(routingChange);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(routingChange);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(routingChange);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(routingChange);
+    }
+
+    @Test
+    public void sendCecCommand_setStreamPath_sendMessageFails_resendMessage() {
+        mNativeWrapper.setMessageSendResult(Constants.MESSAGE_SET_STREAM_PATH,
+                SendMessageResult.BUSY);
+        mTestLooper.dispatchAll();
+        int otherPhysicalAddress = 0x3000;
+        HdmiCecMessage setStreamPath = HdmiCecMessageBuilder.buildSetStreamPath(
+                mTvDevice.getDeviceInfo().getLogicalAddress(), otherPhysicalAddress);
+        mHdmiControlService.sendCecCommand(setStreamPath);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(setStreamPath);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(setStreamPath);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).contains(setStreamPath);
+
+        mNativeWrapper.clearResultMessages();
+        mTestLooper.moveTimeForward(SEND_COMMAND_RETRY_MS);
+        mTestLooper.dispatchAll();
+        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(setStreamPath);
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/RoutingControlActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/RoutingControlActionTest.java
index 1bc99b6..f608c23 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/RoutingControlActionTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/RoutingControlActionTest.java
@@ -169,6 +169,11 @@
                     }
 
                     @Override
+                    boolean isPowerStandby() {
+                        return false;
+                    }
+
+                    @Override
                     protected HdmiCecConfig getHdmiCecConfig() {
                         return hdmiCecConfig;
                     }
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioAutoInitiationActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioAutoInitiationActionTest.java
index c3beff7..02bed22 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioAutoInitiationActionTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioAutoInitiationActionTest.java
@@ -81,6 +81,20 @@
             protected void writeStringSystemProperty(String key, String value) {
                 // do nothing
             }
+
+	    /**
+             * Override displayOsd to prevent it from broadcasting an intent, which
+             * can trigger a SecurityException.
+             */
+            @Override
+            void displayOsd(int messageId) {
+                // do nothing
+            }
+
+            @Override
+            void displayOsd(int messageId, int extra) {
+                // do nothing
+            }
         };
 
         mHdmiControlService.setIoLooper(myLooper);
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/TvToAudioSystemAvbTest.java b/services/tests/servicestests/src/com/android/server/hdmi/TvToAudioSystemAvbTest.java
index 079ef2e..024e36d 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/TvToAudioSystemAvbTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/TvToAudioSystemAvbTest.java
@@ -262,4 +262,63 @@
 
         assertThat(mNativeWrapper.getResultMessages()).isEmpty();
     }
+
+    @Test
+    public void adjustOnlyAvbEnabled_savlBecomesSupported_switchToAvb() {
+        enableAdjustOnlyAbsoluteVolumeBehavior();
+        mNativeWrapper.clearResultMessages();
+
+        // When the Audio System reports support for <Set Audio Volume Level>,
+        // the device should start the process for adopting AVB by sending <Give Audio Status>
+        receiveSetAudioVolumeLevelSupport(DeviceFeatures.FEATURE_SUPPORTED);
+        verifyGiveAudioStatusSent();
+
+        // The device should use adjust-only AVB while waiting for <Report Audio Status>
+        assertThat(mAudioManager.getDeviceVolumeBehavior(getAudioOutputDevice())).isEqualTo(
+                AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_ADJUST_ONLY);
+
+        // The device should switch to AVB upon receiving <Report Audio Status>
+        receiveReportAudioStatus(60, false);
+        assertThat(mAudioManager.getDeviceVolumeBehavior(getAudioOutputDevice())).isEqualTo(
+                AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE);
+
+    }
+
+    /**
+     * Tests that adjust-only AVB is not interrupted when a device's support for
+     * <Set Audio Volume Level> becomes unknown.
+     *
+     * This may currently occur when NewDeviceAction overwrites a device's info in HdmiCecNetwork.
+     * However, because replicating this scenario would be brittle and the behavior may change,
+     * this test does not simulate it and instead changes HdmiCecNetwork directly.
+     */
+    @Test
+    public void adjustOnlyAvbEnabled_savlSupportBecomesUnknown_keepUsingAdjustOnlyAvb() {
+        enableAdjustOnlyAbsoluteVolumeBehavior();
+        mNativeWrapper.clearResultMessages();
+
+        // Make sure the existing SetAudioVolumeLevelDiscoveryAction expires,
+        // so that we can check whether a new one is started.
+        mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS + 1);
+        mTestLooper.dispatchAll();
+
+        // Replace Audio System device info with one that has unknown support for all features
+        HdmiDeviceInfo updatedAudioSystemDeviceInfo =
+                mHdmiControlService.getHdmiCecNetwork().getDeviceInfo(Constants.ADDR_AUDIO_SYSTEM)
+                .toBuilder()
+                .setDeviceFeatures(DeviceFeatures.ALL_FEATURES_SUPPORT_UNKNOWN)
+                .build();
+        mHdmiControlService.getHdmiCecNetwork().addCecDevice(updatedAudioSystemDeviceInfo);
+        mTestLooper.dispatchAll();
+
+        // The device should not switch away from adjust-only AVB
+        assertThat(mAudioManager.getDeviceVolumeBehavior(getAudioOutputDevice())).isEqualTo(
+                AudioManager.DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_ADJUST_ONLY);
+
+        // The device should query support for <Set Audio Volume Level> again
+        assertThat(mNativeWrapper.getResultMessages()).contains(
+                SetAudioVolumeLevelMessage.build(
+                        getLogicalAddress(), getSystemAudioDeviceLogicalAddress(),
+                        Constants.AUDIO_VOLUME_STATUS_UNKNOWN));
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/input/AmbientKeyboardBacklightControllerTests.kt b/services/tests/servicestests/src/com/android/server/input/AmbientKeyboardBacklightControllerTests.kt
deleted file mode 100644
index 98b4628..0000000
--- a/services/tests/servicestests/src/com/android/server/input/AmbientKeyboardBacklightControllerTests.kt
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.input
-
-import android.content.Context
-import android.content.ContextWrapper
-import android.content.res.Resources
-import android.hardware.Sensor
-import android.hardware.SensorEvent
-import android.hardware.SensorEventListener
-import android.hardware.SensorManager
-import android.hardware.display.DisplayManagerInternal
-import android.hardware.input.InputSensorInfo
-import android.os.Handler
-import android.os.test.TestLooper
-import android.platform.test.annotations.Presubmit
-import android.util.TypedValue
-import android.view.Display
-import android.view.DisplayInfo
-import androidx.test.core.app.ApplicationProvider
-import com.android.internal.R
-import com.android.server.LocalServices
-import com.android.server.input.AmbientKeyboardBacklightController.HYSTERESIS_THRESHOLD
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertFalse
-import org.junit.Assert.assertThrows
-import org.junit.Assert.assertTrue
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.mockito.Mock
-import org.mockito.Mockito.any
-import org.mockito.Mockito.anyBoolean
-import org.mockito.Mockito.anyInt
-import org.mockito.Mockito.eq
-import org.mockito.Mockito.spy
-import org.mockito.Mockito.`when`
-import org.mockito.junit.MockitoJUnit
-
-/**
- * Tests for {@link AmbientKeyboardBacklightController}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:AmbientKeyboardBacklightControllerTests
- */
-@Presubmit
-class AmbientKeyboardBacklightControllerTests {
-
-    companion object {
-        const val DEFAULT_DISPLAY_UNIQUE_ID = "uniqueId_1"
-        const val SENSOR_NAME = "test_sensor_name"
-        const val SENSOR_TYPE = "test_sensor_type"
-    }
-
-    @get:Rule
-    val rule = MockitoJUnit.rule()!!
-
-    private lateinit var context: Context
-    private lateinit var testLooper: TestLooper
-    private lateinit var ambientController: AmbientKeyboardBacklightController
-
-    @Mock
-    private lateinit var resources: Resources
-
-    @Mock
-    private lateinit var lightSensorInfo: InputSensorInfo
-
-    @Mock
-    private lateinit var sensorManager: SensorManager
-
-    @Mock
-    private lateinit var displayManagerInternal: DisplayManagerInternal
-    private lateinit var lightSensor: Sensor
-
-    private var currentDisplayInfo = DisplayInfo()
-    private var lastBrightnessCallback: Int = 0
-    private var listenerRegistered: Boolean = false
-    private var listenerRegistrationCount: Int = 0
-
-    @Before
-    fun setup() {
-        context = spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
-        `when`(context.resources).thenReturn(resources)
-        setupBrightnessSteps()
-        setupSensor()
-        testLooper = TestLooper()
-        ambientController = AmbientKeyboardBacklightController(context, testLooper.looper)
-        ambientController.systemRunning()
-        testLooper.dispatchAll()
-    }
-
-    private fun setupBrightnessSteps() {
-        val brightnessValues = intArrayOf(100, 200, 0)
-        val decreaseThresholds = intArrayOf(-1, 900, 1900)
-        val increaseThresholds = intArrayOf(1000, 2000, -1)
-        `when`(resources.getIntArray(R.array.config_autoKeyboardBacklightBrightnessValues))
-            .thenReturn(brightnessValues)
-        `when`(resources.getIntArray(R.array.config_autoKeyboardBacklightDecreaseLuxThreshold))
-            .thenReturn(decreaseThresholds)
-        `when`(resources.getIntArray(R.array.config_autoKeyboardBacklightIncreaseLuxThreshold))
-            .thenReturn(increaseThresholds)
-        `when`(
-            resources.getValue(
-                eq(R.dimen.config_autoKeyboardBrightnessSmoothingConstant),
-                any(TypedValue::class.java),
-                anyBoolean()
-            )
-        ).then {
-            val args = it.arguments
-            val outValue = args[1] as TypedValue
-            outValue.data = java.lang.Float.floatToRawIntBits(1.0f)
-            Unit
-        }
-    }
-
-    private fun setupSensor() {
-        LocalServices.removeServiceForTest(DisplayManagerInternal::class.java)
-        LocalServices.addService(DisplayManagerInternal::class.java, displayManagerInternal)
-        currentDisplayInfo.uniqueId = DEFAULT_DISPLAY_UNIQUE_ID
-        `when`(displayManagerInternal.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(
-            currentDisplayInfo
-        )
-        val sensorData = DisplayManagerInternal.AmbientLightSensorData(SENSOR_NAME, SENSOR_TYPE)
-        `when`(displayManagerInternal.getAmbientLightSensorData(Display.DEFAULT_DISPLAY))
-            .thenReturn(sensorData)
-
-        `when`(lightSensorInfo.name).thenReturn(SENSOR_NAME)
-        `when`(lightSensorInfo.stringType).thenReturn(SENSOR_TYPE)
-        lightSensor = Sensor(lightSensorInfo)
-        `when`(context.getSystemService(eq(Context.SENSOR_SERVICE))).thenReturn(sensorManager)
-        `when`(sensorManager.getSensorList(anyInt())).thenReturn(listOf(lightSensor))
-        `when`(
-            sensorManager.registerListener(
-                any(),
-                eq(lightSensor),
-                anyInt(),
-                any(Handler::class.java)
-            )
-        ).then {
-            listenerRegistered = true
-            listenerRegistrationCount++
-            true
-        }
-        `when`(
-            sensorManager.unregisterListener(
-                any(SensorEventListener::class.java),
-                eq(lightSensor)
-            )
-        ).then {
-            listenerRegistered = false
-            Unit
-        }
-    }
-
-    private fun setupSensorWithInitialLux(luxValue: Float) {
-        ambientController.registerAmbientBacklightListener { brightnessValue: Int ->
-            lastBrightnessCallback = brightnessValue
-        }
-        sendAmbientLuxValue(luxValue)
-        testLooper.dispatchAll()
-    }
-
-    @Test
-    fun testInitialAmbientLux_sendsCallbackImmediately() {
-        setupSensorWithInitialLux(500F)
-
-        assertEquals(
-            "Should receive immediate callback for first lux change",
-            100,
-            lastBrightnessCallback
-        )
-    }
-
-    @Test
-    fun testBrightnessIncrease_afterInitialLuxChanges() {
-        setupSensorWithInitialLux(500F)
-
-        // Current state: Step 1 [value = 100, increaseThreshold = 1000, decreaseThreshold = -1]
-        repeat(HYSTERESIS_THRESHOLD) {
-            sendAmbientLuxValue(1500F)
-        }
-        testLooper.dispatchAll()
-
-        assertEquals(
-            "Should receive brightness change callback for increasing lux change",
-            200,
-            lastBrightnessCallback
-        )
-    }
-
-    @Test
-    fun testBrightnessDecrease_afterInitialLuxChanges() {
-        setupSensorWithInitialLux(1500F)
-
-        // Current state: Step 2 [value = 200, increaseThreshold = 2000, decreaseThreshold = 900]
-        repeat(HYSTERESIS_THRESHOLD) {
-            sendAmbientLuxValue(500F)
-        }
-        testLooper.dispatchAll()
-
-        assertEquals(
-            "Should receive brightness change callback for decreasing lux change",
-            100,
-            lastBrightnessCallback
-        )
-    }
-
-    @Test
-    fun testRegisterAmbientListener_throwsExceptionOnRegisteringDuplicate() {
-        val ambientListener =
-            AmbientKeyboardBacklightController.AmbientKeyboardBacklightListener { }
-        ambientController.registerAmbientBacklightListener(ambientListener)
-
-        assertThrows(IllegalStateException::class.java) {
-            ambientController.registerAmbientBacklightListener(
-                ambientListener
-            )
-        }
-    }
-
-    @Test
-    fun testUnregisterAmbientListener_throwsExceptionOnUnregisteringNonExistent() {
-        val ambientListener =
-            AmbientKeyboardBacklightController.AmbientKeyboardBacklightListener { }
-        assertThrows(IllegalStateException::class.java) {
-            ambientController.unregisterAmbientBacklightListener(
-                ambientListener
-            )
-        }
-    }
-
-    @Test
-    fun testSensorListenerRegistered_onRegisterUnregisterAmbientListener() {
-        assertEquals(
-            "Should not have a sensor listener registered at init",
-            0,
-            listenerRegistrationCount
-        )
-        assertFalse("Should not have a sensor listener registered at init", listenerRegistered)
-
-        val ambientListener1 =
-            AmbientKeyboardBacklightController.AmbientKeyboardBacklightListener { }
-        ambientController.registerAmbientBacklightListener(ambientListener1)
-        assertEquals(
-            "Should register a new sensor listener", 1, listenerRegistrationCount
-        )
-        assertTrue("Should have sensor listener registered", listenerRegistered)
-
-        val ambientListener2 =
-            AmbientKeyboardBacklightController.AmbientKeyboardBacklightListener { }
-        ambientController.registerAmbientBacklightListener(ambientListener2)
-        assertEquals(
-            "Should not register a new sensor listener when adding a second ambient listener",
-            1,
-            listenerRegistrationCount
-        )
-        assertTrue("Should have sensor listener registered", listenerRegistered)
-
-        ambientController.unregisterAmbientBacklightListener(ambientListener1)
-        assertTrue("Should have sensor listener registered", listenerRegistered)
-
-        ambientController.unregisterAmbientBacklightListener(ambientListener2)
-        assertFalse(
-            "Should not have sensor listener registered if there are no ambient listeners",
-            listenerRegistered
-        )
-    }
-
-    @Test
-    fun testDisplayChange_shouldNotReRegisterListener_ifUniqueIdSame() {
-        setupSensorWithInitialLux(0F)
-
-        val count = listenerRegistrationCount
-        ambientController.onDisplayChanged(Display.DEFAULT_DISPLAY)
-        testLooper.dispatchAll()
-
-        assertEquals(
-            "Should not re-register listener on display change if unique is same",
-            count,
-            listenerRegistrationCount
-        )
-    }
-
-    @Test
-    fun testDisplayChange_shouldReRegisterListener_ifUniqueIdChanges() {
-        setupSensorWithInitialLux(0F)
-
-        val count = listenerRegistrationCount
-        currentDisplayInfo.uniqueId = "xyz"
-        ambientController.onDisplayChanged(Display.DEFAULT_DISPLAY)
-        testLooper.dispatchAll()
-
-        assertEquals(
-            "Should re-register listener on display change if unique id changed",
-            count + 1,
-            listenerRegistrationCount
-        )
-    }
-
-    @Test
-    fun testBrightnessDoesntChange_betweenIncreaseAndDecreaseThresholds() {
-        setupSensorWithInitialLux(1001F)
-
-        // Previous state: Step 1 [value = 100, increaseThreshold = 1000, decreaseThreshold = -1]
-        // Current state: Step 2 [value = 200, increaseThreshold = 2000, decreaseThreshold = 900]
-        lastBrightnessCallback = -1
-        repeat(HYSTERESIS_THRESHOLD) {
-            sendAmbientLuxValue(999F)
-        }
-        testLooper.dispatchAll()
-
-        assertEquals(
-            "Should not receive any callback for brightness change",
-            -1,
-            lastBrightnessCallback
-        )
-    }
-
-    @Test
-    fun testBrightnessDoesntChange_onChangeOccurringLessThanHysteresisThreshold() {
-        setupSensorWithInitialLux(1001F)
-
-        // Previous state: Step 1 [value = 100, increaseThreshold = 1000, decreaseThreshold = -1]
-        // Current state: Step 2 [value = 200, increaseThreshold = 2000, decreaseThreshold = 900]
-        lastBrightnessCallback = -1
-        repeat(HYSTERESIS_THRESHOLD - 1) {
-            sendAmbientLuxValue(2001F)
-        }
-        testLooper.dispatchAll()
-
-        assertEquals(
-            "Should not receive any callback for brightness change",
-            -1,
-            lastBrightnessCallback
-        )
-    }
-
-    private fun sendAmbientLuxValue(luxValue: Float) {
-        ambientController.onSensorChanged(SensorEvent(lightSensor, 0, 0, floatArrayOf(luxValue)))
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/input/BatteryControllerTests.kt b/services/tests/servicestests/src/com/android/server/input/BatteryControllerTests.kt
deleted file mode 100644
index c36122b..0000000
--- a/services/tests/servicestests/src/com/android/server/input/BatteryControllerTests.kt
+++ /dev/null
@@ -1,895 +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.server.input
-
-import android.bluetooth.BluetoothAdapter
-import android.bluetooth.BluetoothDevice
-import android.bluetooth.BluetoothManager
-import android.hardware.BatteryState.STATUS_CHARGING
-import android.hardware.BatteryState.STATUS_DISCHARGING
-import android.hardware.BatteryState.STATUS_FULL
-import android.hardware.BatteryState.STATUS_UNKNOWN
-import android.hardware.input.HostUsiVersion
-import android.hardware.input.IInputDeviceBatteryListener
-import android.hardware.input.IInputDeviceBatteryState
-import android.hardware.input.IInputDevicesChangedListener
-import android.hardware.input.IInputManager
-import android.hardware.input.InputManager
-import android.hardware.input.InputManagerGlobal
-import android.os.Binder
-import android.os.IBinder
-import android.os.test.TestLooper
-import android.platform.test.annotations.Presubmit
-import android.testing.TestableContext
-import android.view.InputDevice
-import androidx.test.core.app.ApplicationProvider
-import com.android.server.input.BatteryController.BluetoothBatteryManager
-import com.android.server.input.BatteryController.BluetoothBatteryManager.BluetoothBatteryListener
-import com.android.server.input.BatteryController.POLLING_PERIOD_MILLIS
-import com.android.server.input.BatteryController.UEventBatteryListener
-import com.android.server.input.BatteryController.USI_BATTERY_VALIDITY_DURATION_MILLIS
-import org.hamcrest.Description
-import org.hamcrest.Matcher
-import org.hamcrest.MatcherAssert.assertThat
-import org.hamcrest.Matchers
-import org.hamcrest.TypeSafeMatcher
-import org.hamcrest.core.IsEqual.equalTo
-import org.junit.After
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertFalse
-import org.junit.Assert.assertTrue
-import org.junit.Assert.fail
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.mockito.ArgumentCaptor
-import org.mockito.ArgumentMatchers.any
-import org.mockito.ArgumentMatchers.notNull
-import org.mockito.Mock
-import org.mockito.Mockito.anyInt
-import org.mockito.Mockito.clearInvocations
-import org.mockito.Mockito.eq
-import org.mockito.Mockito.mock
-import org.mockito.Mockito.never
-import org.mockito.Mockito.times
-import org.mockito.Mockito.verify
-import org.mockito.Mockito.verifyNoMoreInteractions
-import org.mockito.Mockito.`when`
-import org.mockito.hamcrest.MockitoHamcrest
-import org.mockito.junit.MockitoJUnit
-import org.mockito.verification.VerificationMode
-
-private fun createInputDevice(
-    deviceId: Int,
-    hasBattery: Boolean = true,
-    supportsUsi: Boolean = false,
-    generation: Int = -1,
-): InputDevice =
-    InputDevice.Builder()
-        .setId(deviceId)
-        .setName("Device $deviceId")
-        .setDescriptor("descriptor $deviceId")
-        .setExternal(true)
-        .setHasBattery(hasBattery)
-        .setUsiVersion(if (supportsUsi) HostUsiVersion(1, 0) else null)
-        .setGeneration(generation)
-        .build()
-
-// Returns a matcher that helps match member variables of a class.
-private fun <T, U> memberMatcher(
-    member: String,
-    memberProvider: (T) -> U,
-    match: Matcher<U>
-): TypeSafeMatcher<T> =
-    object : TypeSafeMatcher<T>() {
-
-        override fun matchesSafely(item: T?): Boolean {
-            return match.matches(memberProvider(item!!))
-        }
-
-        override fun describeMismatchSafely(item: T?, mismatchDescription: Description?) {
-            match.describeMismatch(item, mismatchDescription)
-        }
-
-        override fun describeTo(description: Description?) {
-            match.describeTo(description?.appendText("matches member $member"))
-        }
-    }
-
-// Returns a matcher for IInputDeviceBatteryState that optionally matches some arguments.
-private fun matchesState(
-    deviceId: Int,
-    isPresent: Boolean = true,
-    status: Int? = null,
-    capacity: Float? = null,
-    eventTime: Long? = null
-): Matcher<IInputDeviceBatteryState> {
-    val batteryStateMatchers = mutableListOf<Matcher<IInputDeviceBatteryState>>(
-        memberMatcher("deviceId", { it.deviceId }, equalTo(deviceId)),
-        memberMatcher("isPresent", { it.isPresent }, equalTo(isPresent))
-    )
-    if (eventTime != null) {
-        batteryStateMatchers.add(memberMatcher("updateTime", { it.updateTime }, equalTo(eventTime)))
-    }
-    if (status != null) {
-        batteryStateMatchers.add(memberMatcher("status", { it.status }, equalTo(status)))
-    }
-    if (capacity != null) {
-        batteryStateMatchers.add(memberMatcher("capacity", { it.capacity }, equalTo(capacity)))
-    }
-    return Matchers.allOf(batteryStateMatchers)
-}
-
-private fun isInvalidBatteryState(deviceId: Int): Matcher<IInputDeviceBatteryState> =
-    matchesState(deviceId, isPresent = false, status = STATUS_UNKNOWN, capacity = Float.NaN)
-
-// Helpers used to verify interactions with a mocked battery listener.
-private fun IInputDeviceBatteryListener.verifyNotified(
-    deviceId: Int,
-    mode: VerificationMode = times(1),
-    isPresent: Boolean = true,
-    status: Int? = null,
-    capacity: Float? = null,
-    eventTime: Long? = null
-) {
-    verifyNotified(matchesState(deviceId, isPresent, status, capacity, eventTime), mode)
-}
-
-private fun IInputDeviceBatteryListener.verifyNotified(
-    matcher: Matcher<IInputDeviceBatteryState>,
-    mode: VerificationMode = times(1)
-) {
-    verify(this, mode).onBatteryStateChanged(MockitoHamcrest.argThat(matcher))
-}
-
-private fun createMockListener(): IInputDeviceBatteryListener {
-    val listener = mock(IInputDeviceBatteryListener::class.java)
-    val binder = mock(Binder::class.java)
-    `when`(listener.asBinder()).thenReturn(binder)
-    return listener
-}
-
-/**
- * Tests for {@link InputDeviceBatteryController}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:InputDeviceBatteryControllerTests
- */
-@Presubmit
-class BatteryControllerTests {
-    companion object {
-        const val PID = 42
-        const val DEVICE_ID = 13
-        const val SECOND_DEVICE_ID = 11
-        const val USI_DEVICE_ID = 101
-        const val SECOND_USI_DEVICE_ID = 102
-        const val BT_DEVICE_ID = 100001
-        const val SECOND_BT_DEVICE_ID = 100002
-        const val TIMESTAMP = 123456789L
-    }
-
-    @get:Rule
-    val rule = MockitoJUnit.rule()!!
-
-    @Mock
-    private lateinit var native: NativeInputManagerService
-    @Mock
-    private lateinit var iInputManager: IInputManager
-    @Mock
-    private lateinit var uEventManager: UEventManager
-    @Mock
-    private lateinit var bluetoothBatteryManager: BluetoothBatteryManager
-
-    private lateinit var batteryController: BatteryController
-    private lateinit var context: TestableContext
-    private lateinit var testLooper: TestLooper
-    private lateinit var devicesChangedListener: IInputDevicesChangedListener
-    private val deviceGenerationMap = mutableMapOf<Int /*deviceId*/, Int /*generation*/>()
-
-    @Before
-    fun setup() {
-        context = TestableContext(ApplicationProvider.getApplicationContext())
-        testLooper = TestLooper()
-        InputManagerGlobal.resetInstance(iInputManager)
-        val inputManager = InputManager(context)
-        context.addMockSystemService(InputManager::class.java, inputManager)
-        `when`(iInputManager.inputDeviceIds).then {
-            deviceGenerationMap.keys.toIntArray()
-        }
-        addInputDevice(DEVICE_ID)
-        addInputDevice(SECOND_DEVICE_ID)
-
-        batteryController = BatteryController(context, native, testLooper.looper, uEventManager,
-            bluetoothBatteryManager)
-        batteryController.systemRunning()
-        val listenerCaptor = ArgumentCaptor.forClass(IInputDevicesChangedListener::class.java)
-        verify(iInputManager).registerInputDevicesChangedListener(listenerCaptor.capture())
-        devicesChangedListener = listenerCaptor.value
-        testLooper.dispatchAll()
-    }
-
-    private fun notifyDeviceChanged(
-            deviceId: Int,
-        hasBattery: Boolean = true,
-        supportsUsi: Boolean = false
-    ) {
-        val generation = deviceGenerationMap[deviceId]?.plus(1)
-            ?: throw IllegalArgumentException("Device $deviceId was never added!")
-        deviceGenerationMap[deviceId] = generation
-
-        `when`(iInputManager.getInputDevice(deviceId))
-            .thenReturn(createInputDevice(deviceId, hasBattery, supportsUsi, generation))
-        val list = deviceGenerationMap.flatMap { listOf(it.key, it.value) }
-        if (::devicesChangedListener.isInitialized) {
-            devicesChangedListener.onInputDevicesChanged(list.toIntArray())
-        }
-    }
-
-    private fun addInputDevice(
-            deviceId: Int,
-        hasBattery: Boolean = true,
-        supportsUsi: Boolean = false,
-    ) {
-        deviceGenerationMap[deviceId] = 0
-        notifyDeviceChanged(deviceId, hasBattery, supportsUsi)
-    }
-
-    private fun createBluetoothDevice(address: String): BluetoothDevice {
-        return context.getSystemService(BluetoothManager::class.java)!!
-            .adapter.getRemoteDevice(address)
-    }
-
-    @After
-    fun tearDown() {
-        InputManagerGlobal.clearInstance()
-    }
-
-    @Test
-    fun testRegisterAndUnregisterBinderLifecycle() {
-        val listener = createMockListener()
-        // Ensure the binder lifecycle is tracked when registering a listener.
-        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
-        verify(listener.asBinder()).linkToDeath(notNull(), anyInt())
-        batteryController.registerBatteryListener(SECOND_DEVICE_ID, listener, PID)
-        verify(listener.asBinder(), times(1)).linkToDeath(notNull(), anyInt())
-
-        // Ensure the binder lifecycle stops being tracked when all devices stopped being monitored.
-        batteryController.unregisterBatteryListener(SECOND_DEVICE_ID, listener, PID)
-        verify(listener.asBinder(), never()).unlinkToDeath(notNull(), anyInt())
-        batteryController.unregisterBatteryListener(DEVICE_ID, listener, PID)
-        verify(listener.asBinder()).unlinkToDeath(notNull(), anyInt())
-    }
-
-    @Test
-    fun testOneListenerPerProcess() {
-        val listener1 = createMockListener()
-        batteryController.registerBatteryListener(DEVICE_ID, listener1, PID)
-        verify(listener1.asBinder()).linkToDeath(notNull(), anyInt())
-
-        // If a second listener is added for the same process, a security exception is thrown.
-        val listener2 = createMockListener()
-        try {
-            batteryController.registerBatteryListener(DEVICE_ID, listener2, PID)
-            fail("Expected security exception when registering more than one listener per process")
-        } catch (ignored: SecurityException) {
-        }
-    }
-
-    @Test
-    fun testProcessDeathRemovesListener() {
-        val deathRecipient = ArgumentCaptor.forClass(IBinder.DeathRecipient::class.java)
-        val listener = createMockListener()
-        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
-        verify(listener.asBinder()).linkToDeath(deathRecipient.capture(), anyInt())
-
-        // When the binder dies, the callback is unregistered.
-        deathRecipient.value!!.binderDied(listener.asBinder())
-        verify(listener.asBinder()).unlinkToDeath(notNull(), anyInt())
-
-        // It is now possible to register the same listener again.
-        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
-        verify(listener.asBinder(), times(2)).linkToDeath(notNull(), anyInt())
-    }
-
-    @Test
-    fun testRegisteringListenerNotifiesStateImmediately() {
-        `when`(native.getBatteryStatus(DEVICE_ID)).thenReturn(STATUS_FULL)
-        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(100)
-        val listener = createMockListener()
-        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
-        listener.verifyNotified(DEVICE_ID, status = STATUS_FULL, capacity = 1.0f)
-
-        `when`(native.getBatteryStatus(SECOND_DEVICE_ID)).thenReturn(STATUS_CHARGING)
-        `when`(native.getBatteryCapacity(SECOND_DEVICE_ID)).thenReturn(78)
-        batteryController.registerBatteryListener(SECOND_DEVICE_ID, listener, PID)
-        listener.verifyNotified(SECOND_DEVICE_ID, status = STATUS_CHARGING, capacity = 0.78f)
-    }
-
-    @Test
-    fun testListenersNotifiedOnUEventNotification() {
-        `when`(native.getBatteryDevicePath(DEVICE_ID)).thenReturn("/sys/dev/test/device1")
-        `when`(native.getBatteryStatus(DEVICE_ID)).thenReturn(STATUS_CHARGING)
-        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(78)
-        val listener = createMockListener()
-        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
-        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
-        // The device paths for UEvent notifications do not include the "/sys" prefix, so verify
-        // that the added listener is configured to match the path without that prefix.
-        verify(uEventManager)
-            .addListener(uEventListener.capture(), eq("DEVPATH=/dev/test/device1"))
-        listener.verifyNotified(DEVICE_ID, status = STATUS_CHARGING, capacity = 0.78f)
-
-        // If the battery state has changed when an UEvent is sent, the listeners are notified.
-        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(80)
-        uEventListener.value!!.onBatteryUEvent(TIMESTAMP)
-        listener.verifyNotified(DEVICE_ID, status = STATUS_CHARGING, capacity = 0.80f,
-            eventTime = TIMESTAMP)
-
-        // If the battery state has not changed when an UEvent is sent, the listeners are not
-        // notified.
-        clearInvocations(listener)
-        uEventListener.value!!.onBatteryUEvent(TIMESTAMP + 1)
-        verifyNoMoreInteractions(listener)
-
-        batteryController.unregisterBatteryListener(DEVICE_ID, listener, PID)
-        verify(uEventManager).removeListener(uEventListener.capture())
-        assertEquals("The same observer must be registered and unregistered",
-            uEventListener.allValues[0], uEventListener.allValues[1])
-    }
-
-    @Test
-    fun testBatteryPresenceChanged() {
-        `when`(native.getBatteryDevicePath(DEVICE_ID)).thenReturn("/test/device1")
-        `when`(native.getBatteryStatus(DEVICE_ID)).thenReturn(STATUS_CHARGING)
-        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(78)
-        val listener = createMockListener()
-        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
-        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
-        verify(uEventManager).addListener(uEventListener.capture(), eq("DEVPATH=/test/device1"))
-        listener.verifyNotified(DEVICE_ID, status = STATUS_CHARGING, capacity = 0.78f)
-
-        // If the battery presence for the InputDevice changes, the listener is notified.
-        notifyDeviceChanged(DEVICE_ID, hasBattery = false)
-        testLooper.dispatchNext()
-        listener.verifyNotified(isInvalidBatteryState(DEVICE_ID))
-        // Since the battery is no longer present, the UEventListener should be removed.
-        verify(uEventManager).removeListener(uEventListener.value)
-
-        // If the battery becomes present again, the listener is notified.
-        notifyDeviceChanged(DEVICE_ID, hasBattery = true)
-        testLooper.dispatchNext()
-        listener.verifyNotified(DEVICE_ID, mode = times(2), status = STATUS_CHARGING,
-            capacity = 0.78f)
-        // Ensure that a new UEventListener was added.
-        verify(uEventManager, times(2))
-            .addListener(uEventListener.capture(), eq("DEVPATH=/test/device1"))
-    }
-
-    @Test
-    fun testStartPollingWhenListenerIsRegistered() {
-        val listener = createMockListener()
-        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(78)
-        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
-        listener.verifyNotified(DEVICE_ID, capacity = 0.78f)
-
-        // Assume there is a change in the battery state. Ensure the listener is not notified
-        // while the polling period has not elapsed.
-        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(80)
-        testLooper.moveTimeForward(1)
-        testLooper.dispatchAll()
-        listener.verifyNotified(DEVICE_ID, mode = never(), capacity = 0.80f)
-
-        // Move the time forward so that the polling period has elapsed.
-        // The listener should be notified.
-        testLooper.moveTimeForward(POLLING_PERIOD_MILLIS - 1)
-        assertTrue("There should be a polling callbacks posted to the handler", testLooper.isIdle)
-        testLooper.dispatchNext()
-        listener.verifyNotified(DEVICE_ID, capacity = 0.80f)
-
-        // Move the time forward so that another polling period has elapsed.
-        // The battery should still be polled, but there is no change so listeners are not notified.
-        testLooper.moveTimeForward(POLLING_PERIOD_MILLIS)
-        assertTrue("There should be a polling callbacks posted to the handler", testLooper.isIdle)
-        testLooper.dispatchNext()
-        listener.verifyNotified(DEVICE_ID, mode = times(1), capacity = 0.80f)
-    }
-
-    @Test
-    fun testNoPollingWhenTheDeviceIsNotInteractive() {
-        batteryController.onInteractiveChanged(false /*interactive*/)
-
-        val listener = createMockListener()
-        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(78)
-        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
-        listener.verifyNotified(DEVICE_ID, capacity = 0.78f)
-
-        // The battery state changed, but we should not be polling for battery changes when the
-        // device is not interactive.
-        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(80)
-        testLooper.moveTimeForward(POLLING_PERIOD_MILLIS)
-        assertFalse("There should be no polling callbacks posted to the handler", testLooper.isIdle)
-        testLooper.dispatchAll()
-        listener.verifyNotified(DEVICE_ID, mode = never(), capacity = 0.80f)
-
-        // The device is now interactive. Battery state polling begins immediately.
-        batteryController.onInteractiveChanged(true /*interactive*/)
-        testLooper.dispatchNext()
-        listener.verifyNotified(DEVICE_ID, capacity = 0.80f)
-
-        // Ensure that we continue to poll for battery changes.
-        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(90)
-        testLooper.moveTimeForward(POLLING_PERIOD_MILLIS)
-        assertTrue("There should be a polling callbacks posted to the handler", testLooper.isIdle)
-        testLooper.dispatchNext()
-        listener.verifyNotified(DEVICE_ID, capacity = 0.90f)
-    }
-
-    @Test
-    fun testGetBatteryState() {
-        `when`(native.getBatteryStatus(DEVICE_ID)).thenReturn(STATUS_CHARGING)
-        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(78)
-        val batteryState = batteryController.getBatteryState(DEVICE_ID)
-        assertThat("battery state matches", batteryState,
-            matchesState(DEVICE_ID, status = STATUS_CHARGING, capacity = 0.78f))
-    }
-
-    @Test
-    fun testGetBatteryStateWithListener() {
-        val listener = createMockListener()
-        `when`(native.getBatteryStatus(DEVICE_ID)).thenReturn(STATUS_CHARGING)
-        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(78)
-        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
-        listener.verifyNotified(DEVICE_ID, status = STATUS_CHARGING, capacity = 0.78f)
-
-        // If getBatteryState() is called when a listener is monitoring the device and there is a
-        // change in the battery state, the listener is also notified.
-        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(80)
-        val batteryState = batteryController.getBatteryState(DEVICE_ID)
-        assertThat("battery matches state", batteryState,
-            matchesState(DEVICE_ID, status = STATUS_CHARGING, capacity = 0.80f))
-        listener.verifyNotified(DEVICE_ID, status = STATUS_CHARGING, capacity = 0.80f)
-    }
-
-    @Test
-    fun testUsiDeviceIsMonitoredPersistently() {
-        `when`(native.getBatteryDevicePath(USI_DEVICE_ID)).thenReturn("/sys/dev/usi_device")
-        addInputDevice(USI_DEVICE_ID, supportsUsi = true)
-        testLooper.dispatchNext()
-
-        // Even though there is no listener added for this device, it is being monitored.
-        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
-        verify(uEventManager)
-            .addListener(uEventListener.capture(), eq("DEVPATH=/dev/usi_device"))
-
-        // Add and remove a listener for the device.
-        val listener = createMockListener()
-        batteryController.registerBatteryListener(USI_DEVICE_ID, listener, PID)
-        batteryController.unregisterBatteryListener(USI_DEVICE_ID, listener, PID)
-
-        // The device is still being monitored.
-        verify(uEventManager, never()).removeListener(uEventListener.value)
-    }
-
-    @Test
-    fun testNoPollingWhenUsiDevicesAreMonitored() {
-        `when`(native.getBatteryDevicePath(USI_DEVICE_ID)).thenReturn("/sys/dev/usi_device")
-        addInputDevice(USI_DEVICE_ID, supportsUsi = true)
-        testLooper.dispatchNext()
-        `when`(native.getBatteryDevicePath(SECOND_USI_DEVICE_ID)).thenReturn("/sys/dev/usi_device2")
-        addInputDevice(SECOND_USI_DEVICE_ID, supportsUsi = true)
-        testLooper.dispatchNext()
-
-        testLooper.moveTimeForward(POLLING_PERIOD_MILLIS)
-        assertFalse("There should be no polling callbacks posted to the handler", testLooper.isIdle)
-
-        // Add a listener.
-        val listener = createMockListener()
-        batteryController.registerBatteryListener(USI_DEVICE_ID, listener, PID)
-
-        testLooper.moveTimeForward(POLLING_PERIOD_MILLIS)
-        assertFalse("There should be no polling callbacks posted to the handler", testLooper.isIdle)
-    }
-
-    @Test
-    fun testExpectedFlowForUsiBattery() {
-        `when`(native.getBatteryDevicePath(USI_DEVICE_ID)).thenReturn("/sys/dev/usi_device")
-        `when`(native.getBatteryStatus(USI_DEVICE_ID)).thenReturn(STATUS_DISCHARGING)
-        `when`(native.getBatteryCapacity(USI_DEVICE_ID)).thenReturn(78)
-
-        addInputDevice(USI_DEVICE_ID, supportsUsi = true)
-        testLooper.dispatchNext()
-        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
-        verify(uEventManager)
-            .addListener(uEventListener.capture(), eq("DEVPATH=/dev/usi_device"))
-
-        // A USI device's battery state is not valid until the first UEvent notification.
-        // Add a listener, and ensure it is notified that the battery state is not present.
-        val listener = createMockListener()
-        batteryController.registerBatteryListener(USI_DEVICE_ID, listener, PID)
-        listener.verifyNotified(isInvalidBatteryState(USI_DEVICE_ID))
-
-        // Ensure that querying for battery state also returns the same invalid result.
-        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
-            isInvalidBatteryState(USI_DEVICE_ID))
-
-        // There is a UEvent signaling a battery change. The battery state is now valid.
-        uEventListener.value!!.onBatteryUEvent(TIMESTAMP)
-        listener.verifyNotified(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.78f)
-        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
-            matchesState(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.78f))
-
-        // There is another UEvent notification. The battery state is now updated.
-        `when`(native.getBatteryCapacity(USI_DEVICE_ID)).thenReturn(64)
-        uEventListener.value!!.onBatteryUEvent(TIMESTAMP + 1)
-        listener.verifyNotified(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.64f)
-        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
-            matchesState(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.64f))
-
-        // The battery state is still valid after a millisecond.
-        testLooper.moveTimeForward(1)
-        testLooper.dispatchAll()
-        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
-            matchesState(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.64f))
-
-        // The battery is no longer present after the timeout expires.
-        testLooper.moveTimeForward(USI_BATTERY_VALIDITY_DURATION_MILLIS - 1)
-        testLooper.dispatchNext()
-        listener.verifyNotified(isInvalidBatteryState(USI_DEVICE_ID), times(2))
-        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
-            isInvalidBatteryState(USI_DEVICE_ID))
-    }
-
-    @Test
-    fun testStylusPresenceExtendsValidUsiBatteryState() {
-        `when`(native.getBatteryDevicePath(USI_DEVICE_ID)).thenReturn("/sys/dev/usi_device")
-        `when`(native.getBatteryStatus(USI_DEVICE_ID)).thenReturn(STATUS_DISCHARGING)
-        `when`(native.getBatteryCapacity(USI_DEVICE_ID)).thenReturn(78)
-
-        addInputDevice(USI_DEVICE_ID, supportsUsi = true)
-        testLooper.dispatchNext()
-        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
-        verify(uEventManager)
-            .addListener(uEventListener.capture(), eq("DEVPATH=/dev/usi_device"))
-
-        // There is a UEvent signaling a battery change. The battery state is now valid.
-        uEventListener.value!!.onBatteryUEvent(TIMESTAMP)
-        val listener = createMockListener()
-        batteryController.registerBatteryListener(USI_DEVICE_ID, listener, PID)
-        listener.verifyNotified(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.78f)
-        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
-            matchesState(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.78f))
-
-        // Stylus presence is detected before the validity timeout expires.
-        testLooper.moveTimeForward(100)
-        testLooper.dispatchAll()
-        batteryController.notifyStylusGestureStarted(USI_DEVICE_ID, TIMESTAMP)
-
-        // Ensure that timeout was extended, and the battery state is now valid for longer.
-        testLooper.moveTimeForward(USI_BATTERY_VALIDITY_DURATION_MILLIS - 100)
-        testLooper.dispatchAll()
-        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
-            matchesState(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.78f))
-
-        // Ensure the validity period expires after the expected amount of time.
-        testLooper.moveTimeForward(100)
-        testLooper.dispatchNext()
-        listener.verifyNotified(isInvalidBatteryState(USI_DEVICE_ID))
-        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
-            isInvalidBatteryState(USI_DEVICE_ID))
-    }
-
-    @Test
-    fun testStylusPresenceMakesUsiBatteryStateValid() {
-        `when`(native.getBatteryDevicePath(USI_DEVICE_ID)).thenReturn("/sys/dev/usi_device")
-        `when`(native.getBatteryStatus(USI_DEVICE_ID)).thenReturn(STATUS_DISCHARGING)
-        `when`(native.getBatteryCapacity(USI_DEVICE_ID)).thenReturn(78)
-
-        addInputDevice(USI_DEVICE_ID, supportsUsi = true)
-        testLooper.dispatchNext()
-        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
-        verify(uEventManager)
-            .addListener(uEventListener.capture(), eq("DEVPATH=/dev/usi_device"))
-
-        // The USI battery state is initially invalid.
-        val listener = createMockListener()
-        batteryController.registerBatteryListener(USI_DEVICE_ID, listener, PID)
-        listener.verifyNotified(isInvalidBatteryState(USI_DEVICE_ID))
-        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
-            isInvalidBatteryState(USI_DEVICE_ID))
-
-        // A stylus presence is detected. This validates the battery state.
-        batteryController.notifyStylusGestureStarted(USI_DEVICE_ID, TIMESTAMP)
-
-        listener.verifyNotified(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.78f)
-        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
-            matchesState(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.78f))
-    }
-
-    @Test
-    fun testStylusPresenceDoesNotMakeUsiBatteryStateValidAtBoot() {
-        `when`(native.getBatteryDevicePath(USI_DEVICE_ID)).thenReturn("/sys/dev/usi_device")
-        // At boot, the USI device always reports a capacity value of 0.
-        `when`(native.getBatteryStatus(USI_DEVICE_ID)).thenReturn(STATUS_UNKNOWN)
-        `when`(native.getBatteryCapacity(USI_DEVICE_ID)).thenReturn(0)
-
-        addInputDevice(USI_DEVICE_ID, supportsUsi = true)
-        testLooper.dispatchNext()
-        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
-        verify(uEventManager)
-            .addListener(uEventListener.capture(), eq("DEVPATH=/dev/usi_device"))
-
-        // The USI battery state is initially invalid.
-        val listener = createMockListener()
-        batteryController.registerBatteryListener(USI_DEVICE_ID, listener, PID)
-        listener.verifyNotified(isInvalidBatteryState(USI_DEVICE_ID))
-        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
-            isInvalidBatteryState(USI_DEVICE_ID))
-
-        // Since the capacity reported is 0, stylus presence does not validate the battery state.
-        batteryController.notifyStylusGestureStarted(USI_DEVICE_ID, TIMESTAMP)
-
-        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
-            isInvalidBatteryState(USI_DEVICE_ID))
-
-        // However, if a UEvent reports a battery capacity of 0, the battery state is now valid.
-        uEventListener.value!!.onBatteryUEvent(TIMESTAMP)
-        listener.verifyNotified(USI_DEVICE_ID, status = STATUS_UNKNOWN, capacity = 0f)
-        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
-            matchesState(USI_DEVICE_ID, status = STATUS_UNKNOWN, capacity = 0f))
-    }
-
-    @Test
-    fun testRegisterBluetoothListenerForMonitoredBluetoothDevices() {
-        `when`(iInputManager.getInputDeviceBluetoothAddress(BT_DEVICE_ID))
-            .thenReturn("AA:BB:CC:DD:EE:FF")
-        `when`(iInputManager.getInputDeviceBluetoothAddress(SECOND_BT_DEVICE_ID))
-            .thenReturn("11:22:33:44:55:66")
-        addInputDevice(BT_DEVICE_ID)
-        testLooper.dispatchNext()
-        addInputDevice(SECOND_BT_DEVICE_ID)
-        testLooper.dispatchNext()
-
-        // Listen to a non-Bluetooth device and ensure that the BT battery listener is not added
-        // when there are no monitored BT devices.
-        val listener = createMockListener()
-        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
-        verify(bluetoothBatteryManager, never()).addBatteryListener(any())
-
-        val bluetoothListener = ArgumentCaptor.forClass(BluetoothBatteryListener::class.java)
-
-        // The BT battery listener is added when the first BT input device is monitored.
-        batteryController.registerBatteryListener(BT_DEVICE_ID, listener, PID)
-        verify(bluetoothBatteryManager).addBatteryListener(bluetoothListener.capture())
-
-        // The BT listener is only added once for all BT devices.
-        batteryController.registerBatteryListener(SECOND_BT_DEVICE_ID, listener, PID)
-        verify(bluetoothBatteryManager, times(1)).addBatteryListener(any())
-
-        // The BT listener is only removed when there are no monitored BT devices.
-        batteryController.unregisterBatteryListener(BT_DEVICE_ID, listener, PID)
-        verify(bluetoothBatteryManager, never()).removeBatteryListener(any())
-
-        `when`(iInputManager.getInputDeviceBluetoothAddress(SECOND_BT_DEVICE_ID))
-            .thenReturn(null)
-        notifyDeviceChanged(SECOND_BT_DEVICE_ID)
-        testLooper.dispatchNext()
-        verify(bluetoothBatteryManager).removeBatteryListener(bluetoothListener.value)
-    }
-
-    @Test
-    fun testNotifiesBluetoothBatteryChanges() {
-        `when`(iInputManager.getInputDeviceBluetoothAddress(BT_DEVICE_ID))
-            .thenReturn("AA:BB:CC:DD:EE:FF")
-        `when`(bluetoothBatteryManager.getBatteryLevel(eq("AA:BB:CC:DD:EE:FF"))).thenReturn(21)
-        addInputDevice(BT_DEVICE_ID)
-        val bluetoothListener = ArgumentCaptor.forClass(BluetoothBatteryListener::class.java)
-        val listener = createMockListener()
-        batteryController.registerBatteryListener(BT_DEVICE_ID, listener, PID)
-        verify(bluetoothBatteryManager).addBatteryListener(bluetoothListener.capture())
-        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.21f)
-
-        // When the state has not changed, the listener is not notified again.
-        bluetoothListener.value!!.onBluetoothBatteryChanged(TIMESTAMP, "AA:BB:CC:DD:EE:FF", 21)
-        listener.verifyNotified(BT_DEVICE_ID, mode = times(1), capacity = 0.21f)
-
-        bluetoothListener.value!!.onBluetoothBatteryChanged(TIMESTAMP, "AA:BB:CC:DD:EE:FF", 25)
-        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.25f)
-    }
-
-    @Test
-    fun testBluetoothBatteryIsPrioritized() {
-        `when`(native.getBatteryDevicePath(BT_DEVICE_ID)).thenReturn("/sys/dev/bt_device")
-        `when`(iInputManager.getInputDeviceBluetoothAddress(BT_DEVICE_ID))
-            .thenReturn("AA:BB:CC:DD:EE:FF")
-        `when`(bluetoothBatteryManager.getBatteryLevel(eq("AA:BB:CC:DD:EE:FF"))).thenReturn(21)
-        `when`(native.getBatteryCapacity(BT_DEVICE_ID)).thenReturn(98)
-        addInputDevice(BT_DEVICE_ID)
-        val bluetoothListener = ArgumentCaptor.forClass(BluetoothBatteryListener::class.java)
-        val listener = createMockListener()
-        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
-
-        // When the device is first monitored and both native and BT battery is available,
-        // the latter is used.
-        batteryController.registerBatteryListener(BT_DEVICE_ID, listener, PID)
-        verify(bluetoothBatteryManager).addBatteryListener(bluetoothListener.capture())
-        verify(uEventManager).addListener(uEventListener.capture(), any())
-        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.21f)
-        assertThat("battery state matches", batteryController.getBatteryState(BT_DEVICE_ID),
-            matchesState(BT_DEVICE_ID, capacity = 0.21f))
-
-        // If only the native battery state changes the listener is not notified.
-        `when`(native.getBatteryCapacity(BT_DEVICE_ID)).thenReturn(97)
-        uEventListener.value!!.onBatteryUEvent(TIMESTAMP)
-        listener.verifyNotified(BT_DEVICE_ID, mode = times(1), capacity = 0.21f)
-        assertThat("battery state matches", batteryController.getBatteryState(BT_DEVICE_ID),
-            matchesState(BT_DEVICE_ID, capacity = 0.21f))
-    }
-
-    @Test
-    fun testFallBackToNativeBatteryStateWhenBluetoothStateInvalid() {
-        `when`(native.getBatteryDevicePath(BT_DEVICE_ID)).thenReturn("/sys/dev/bt_device")
-        `when`(iInputManager.getInputDeviceBluetoothAddress(BT_DEVICE_ID))
-            .thenReturn("AA:BB:CC:DD:EE:FF")
-        `when`(bluetoothBatteryManager.getBatteryLevel(eq("AA:BB:CC:DD:EE:FF"))).thenReturn(21)
-        `when`(native.getBatteryCapacity(BT_DEVICE_ID)).thenReturn(98)
-        addInputDevice(BT_DEVICE_ID)
-        val bluetoothListener = ArgumentCaptor.forClass(BluetoothBatteryListener::class.java)
-        val listener = createMockListener()
-        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
-
-        batteryController.registerBatteryListener(BT_DEVICE_ID, listener, PID)
-        verify(bluetoothBatteryManager).addBatteryListener(bluetoothListener.capture())
-        verify(uEventManager).addListener(uEventListener.capture(), any())
-        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.21f)
-
-        // Fall back to the native state when BT is off.
-        bluetoothListener.value!!.onBluetoothBatteryChanged(TIMESTAMP, "AA:BB:CC:DD:EE:FF",
-            BluetoothDevice.BATTERY_LEVEL_BLUETOOTH_OFF)
-        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.98f)
-
-        bluetoothListener.value!!.onBluetoothBatteryChanged(TIMESTAMP, "AA:BB:CC:DD:EE:FF", 22)
-        verify(bluetoothBatteryManager).addBatteryListener(bluetoothListener.capture())
-        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.22f)
-
-        // Fall back to the native state when BT battery is unknown.
-        bluetoothListener.value!!.onBluetoothBatteryChanged(TIMESTAMP, "AA:BB:CC:DD:EE:FF",
-            BluetoothDevice.BATTERY_LEVEL_UNKNOWN)
-        listener.verifyNotified(BT_DEVICE_ID, mode = times(2), capacity = 0.98f)
-    }
-
-    @Test
-    fun testRegisterBluetoothMetadataListenerForMonitoredBluetoothDevices() {
-        `when`(iInputManager.getInputDeviceBluetoothAddress(BT_DEVICE_ID))
-            .thenReturn("AA:BB:CC:DD:EE:FF")
-        `when`(iInputManager.getInputDeviceBluetoothAddress(SECOND_BT_DEVICE_ID))
-            .thenReturn("11:22:33:44:55:66")
-        addInputDevice(BT_DEVICE_ID)
-        testLooper.dispatchNext()
-        addInputDevice(SECOND_BT_DEVICE_ID)
-        testLooper.dispatchNext()
-
-        // Listen to a non-Bluetooth device and ensure that the metadata listener is not added when
-        // there are no monitored BT devices.
-        val listener = createMockListener()
-        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
-        verify(bluetoothBatteryManager, never()).addMetadataListener(any(), any())
-
-        val metadataListener1 = ArgumentCaptor.forClass(
-            BluetoothAdapter.OnMetadataChangedListener::class.java)
-        val metadataListener2 = ArgumentCaptor.forClass(
-            BluetoothAdapter.OnMetadataChangedListener::class.java)
-
-        // The metadata listener is added when the first BT input device is monitored.
-        batteryController.registerBatteryListener(BT_DEVICE_ID, listener, PID)
-        verify(bluetoothBatteryManager)
-            .addMetadataListener(eq("AA:BB:CC:DD:EE:FF"), metadataListener1.capture())
-
-        // There is one metadata listener added for each BT device.
-        batteryController.registerBatteryListener(SECOND_BT_DEVICE_ID, listener, PID)
-        verify(bluetoothBatteryManager)
-            .addMetadataListener(eq("11:22:33:44:55:66"), metadataListener2.capture())
-
-        // The metadata listener is removed when the device is no longer monitored.
-        batteryController.unregisterBatteryListener(BT_DEVICE_ID, listener, PID)
-        verify(bluetoothBatteryManager)
-            .removeMetadataListener("AA:BB:CC:DD:EE:FF", metadataListener1.value)
-
-        `when`(iInputManager.getInputDeviceBluetoothAddress(SECOND_BT_DEVICE_ID))
-            .thenReturn(null)
-        notifyDeviceChanged(SECOND_BT_DEVICE_ID)
-        testLooper.dispatchNext()
-        verify(bluetoothBatteryManager)
-            .removeMetadataListener("11:22:33:44:55:66", metadataListener2.value)
-    }
-
-    @Test
-    fun testNotifiesBluetoothMetadataBatteryChanges() {
-        `when`(iInputManager.getInputDeviceBluetoothAddress(BT_DEVICE_ID))
-            .thenReturn("AA:BB:CC:DD:EE:FF")
-        `when`(bluetoothBatteryManager.getMetadata("AA:BB:CC:DD:EE:FF",
-                BluetoothDevice.METADATA_MAIN_BATTERY))
-            .thenReturn("21".toByteArray())
-        addInputDevice(BT_DEVICE_ID)
-        val metadataListener = ArgumentCaptor.forClass(
-            BluetoothAdapter.OnMetadataChangedListener::class.java)
-        val listener = createMockListener()
-        val bluetoothDevice = createBluetoothDevice("AA:BB:CC:DD:EE:FF")
-        batteryController.registerBatteryListener(BT_DEVICE_ID, listener, PID)
-        verify(bluetoothBatteryManager)
-            .addMetadataListener(eq("AA:BB:CC:DD:EE:FF"), metadataListener.capture())
-        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.21f, status = STATUS_UNKNOWN)
-
-        // When the state has not changed, the listener is not notified again.
-        metadataListener.value!!.onMetadataChanged(
-            bluetoothDevice, BluetoothDevice.METADATA_MAIN_BATTERY, "21".toByteArray())
-        listener.verifyNotified(BT_DEVICE_ID, mode = times(1), capacity = 0.21f)
-
-        metadataListener.value!!.onMetadataChanged(
-            bluetoothDevice, BluetoothDevice.METADATA_MAIN_BATTERY, "25".toByteArray())
-        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.25f, status = STATUS_UNKNOWN)
-
-        metadataListener.value!!.onMetadataChanged(
-            bluetoothDevice, BluetoothDevice.METADATA_MAIN_CHARGING, "true".toByteArray())
-        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.25f, status = STATUS_CHARGING)
-
-        metadataListener.value!!.onMetadataChanged(
-            bluetoothDevice, BluetoothDevice.METADATA_MAIN_CHARGING, "false".toByteArray())
-        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.25f, status = STATUS_DISCHARGING)
-
-        metadataListener.value!!.onMetadataChanged(
-            bluetoothDevice, BluetoothDevice.METADATA_MAIN_CHARGING, null)
-        listener.verifyNotified(BT_DEVICE_ID, mode = times(2), capacity = 0.25f,
-            status = STATUS_UNKNOWN)
-    }
-
-    @Test
-    fun testBluetoothMetadataBatteryIsPrioritized() {
-        `when`(iInputManager.getInputDeviceBluetoothAddress(BT_DEVICE_ID))
-            .thenReturn("AA:BB:CC:DD:EE:FF")
-        `when`(bluetoothBatteryManager.getBatteryLevel(eq("AA:BB:CC:DD:EE:FF"))).thenReturn(21)
-        `when`(bluetoothBatteryManager.getMetadata("AA:BB:CC:DD:EE:FF",
-                BluetoothDevice.METADATA_MAIN_BATTERY))
-            .thenReturn("22".toByteArray())
-        addInputDevice(BT_DEVICE_ID)
-        val bluetoothListener = ArgumentCaptor.forClass(BluetoothBatteryListener::class.java)
-        val metadataListener = ArgumentCaptor.forClass(
-            BluetoothAdapter.OnMetadataChangedListener::class.java)
-        val listener = createMockListener()
-        val bluetoothDevice = createBluetoothDevice("AA:BB:CC:DD:EE:FF")
-        batteryController.registerBatteryListener(BT_DEVICE_ID, listener, PID)
-
-        verify(bluetoothBatteryManager).addBatteryListener(bluetoothListener.capture())
-        verify(bluetoothBatteryManager)
-            .addMetadataListener(eq("AA:BB:CC:DD:EE:FF"), metadataListener.capture())
-        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.22f)
-
-        // A change in the Bluetooth battery level has no effect while there is a valid battery
-        // level obtained through the metadata.
-        bluetoothListener.value!!.onBluetoothBatteryChanged(TIMESTAMP, "AA:BB:CC:DD:EE:FF", 23)
-        listener.verifyNotified(BT_DEVICE_ID, mode = never(), capacity = 0.23f)
-
-        metadataListener.value!!.onMetadataChanged(
-            bluetoothDevice, BluetoothDevice.METADATA_MAIN_BATTERY, "24".toByteArray())
-        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.24f)
-
-        // When the battery level from the metadata is no longer valid, we fall back to using the
-        // Bluetooth battery level.
-        metadataListener.value!!.onMetadataChanged(
-            bluetoothDevice, BluetoothDevice.METADATA_MAIN_BATTERY, null)
-        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.23f)
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/input/ConfigurationProcessorTest.java b/services/tests/servicestests/src/com/android/server/input/ConfigurationProcessorTest.java
deleted file mode 100644
index 2bd4a3a..0000000
--- a/services/tests/servicestests/src/com/android/server/input/ConfigurationProcessorTest.java
+++ /dev/null
@@ -1,91 +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.server.input;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-import android.content.Context;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.io.InputStream;
-import java.util.Map;
-
-/**
- * Build/Install/Run:
- * atest ConfigurationProcessorTest
- */
-@RunWith(AndroidJUnit4.class)
-public class ConfigurationProcessorTest {
-
-    private Context mContext;
-
-    @Before
-    public void setUp() throws Exception {
-        mContext = InstrumentationRegistry.getContext();
-    }
-
-    @Test
-    public void testGetInputPortAssociations() {
-        final int res = com.android.frameworks.servicestests.R.raw.input_port_associations;
-        InputStream xml = mContext.getResources().openRawResource(res);
-        Map<String, Integer> associations = null;
-        try {
-            associations = ConfigurationProcessor.processInputPortAssociations(xml);
-        } catch (Exception e) {
-            fail("Could not process xml file for input associations");
-        }
-        assertNotNull(associations);
-        assertEquals(2, associations.size());
-        assertEquals(0, associations.get("USB1").intValue());
-        assertEquals(1, associations.get("USB2").intValue());
-    }
-
-    @Test
-    public void testGetInputPortAssociationsBadDisplayport() {
-        final int res =
-                com.android.frameworks.servicestests.R.raw.input_port_associations_bad_displayport;
-        InputStream xml = mContext.getResources().openRawResource(res);
-        Map<String, Integer> associations = null;
-        try {
-            associations = ConfigurationProcessor.processInputPortAssociations(xml);
-        } catch (Exception e) {
-            fail("Could not process xml file for input associations");
-        }
-        assertNotNull(associations);
-        assertEquals(0, associations.size());
-    }
-
-    @Test
-    public void testGetInputPortAssociationsEmptyConfig() {
-        final int res = com.android.frameworks.servicestests.R.raw.input_port_associations_bad_xml;
-        InputStream xml = mContext.getResources().openRawResource(res);
-        try {
-            ConfigurationProcessor.processInputPortAssociations(xml);
-            fail("Parsing should fail, because xml contains bad data");
-        } catch (Exception e) {
-            // This is expected
-        }
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/input/InputManagerServiceTests.kt b/services/tests/servicestests/src/com/android/server/input/InputManagerServiceTests.kt
deleted file mode 100644
index 72066ea..0000000
--- a/services/tests/servicestests/src/com/android/server/input/InputManagerServiceTests.kt
+++ /dev/null
@@ -1,386 +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.server.input
-
-
-import android.content.Context
-import android.content.ContextWrapper
-import android.hardware.display.DisplayViewport
-import android.os.IInputConstants
-import android.os.test.TestLooper
-import android.platform.test.annotations.Presubmit
-import android.provider.Settings
-import android.test.mock.MockContentResolver
-import android.view.Display
-import android.view.PointerIcon
-import androidx.test.InstrumentationRegistry
-import com.android.internal.util.test.FakeSettingsProvider
-import com.google.common.truth.Truth.assertThat
-import org.junit.Assert.assertFalse
-import org.junit.Assert.assertTrue
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.mockito.ArgumentMatchers.any
-import org.mockito.ArgumentMatchers.anyBoolean
-import org.mockito.ArgumentMatchers.anyFloat
-import org.mockito.ArgumentMatchers.anyInt
-import org.mockito.ArgumentMatchers.eq
-import org.mockito.Mock
-import org.mockito.Mockito.`when`
-import org.mockito.Mockito.clearInvocations
-import org.mockito.Mockito.doAnswer
-import org.mockito.Mockito.never
-import org.mockito.Mockito.spy
-import org.mockito.Mockito.times
-import org.mockito.Mockito.verify
-import org.mockito.Mockito.verifyNoMoreInteractions
-import org.mockito.Mockito.verifyZeroInteractions
-import org.mockito.junit.MockitoJUnit
-import org.mockito.stubbing.OngoingStubbing
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-
-/**
- * Tests for {@link InputManagerService}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:InputManagerServiceTests
- */
-@Presubmit
-class InputManagerServiceTests {
-
-    @get:Rule
-    val mockitoRule = MockitoJUnit.rule()!!
-
-    @get:Rule
-    val fakeSettingsProviderRule = FakeSettingsProvider.rule()!!
-
-    @Mock
-    private lateinit var native: NativeInputManagerService
-
-    @Mock
-    private lateinit var wmCallbacks: InputManagerService.WindowManagerCallbacks
-
-    @Mock
-    private lateinit var uEventManager: UEventManager
-
-    private lateinit var service: InputManagerService
-    private lateinit var localService: InputManagerInternal
-    private lateinit var context: Context
-    private lateinit var testLooper: TestLooper
-    private lateinit var contentResolver: MockContentResolver
-
-    @Before
-    fun setup() {
-        context = spy(ContextWrapper(InstrumentationRegistry.getContext()))
-        contentResolver = MockContentResolver(context)
-        contentResolver.addProvider(Settings.AUTHORITY, FakeSettingsProvider())
-        whenever(context.contentResolver).thenReturn(contentResolver)
-        testLooper = TestLooper()
-        service =
-            InputManagerService(object : InputManagerService.Injector(
-                    context, testLooper.looper, uEventManager) {
-                override fun getNativeService(
-                    service: InputManagerService?
-                ): NativeInputManagerService {
-                    return native
-                }
-
-                override fun registerLocalService(service: InputManagerInternal?) {
-                    localService = service!!
-                }
-            })
-        assertTrue("Local service must be registered", this::localService.isInitialized)
-        service.setWindowManagerCallbacks(wmCallbacks)
-    }
-
-    @Test
-    fun testStart() {
-        verifyZeroInteractions(native)
-
-        service.start()
-        verify(native).start()
-    }
-
-    @Test
-    fun testInputSettingsUpdatedOnSystemRunning() {
-        verifyZeroInteractions(native)
-
-        service.systemRunning()
-
-        verify(native).setPointerSpeed(anyInt())
-        verify(native).setTouchpadPointerSpeed(anyInt())
-        verify(native).setTouchpadNaturalScrollingEnabled(anyBoolean())
-        verify(native).setTouchpadTapToClickEnabled(anyBoolean())
-        verify(native).setTouchpadRightClickZoneEnabled(anyBoolean())
-        verify(native).setShowTouches(anyBoolean())
-        verify(native).reloadPointerIcons()
-        verify(native).notifyKeyGestureTimeoutsChanged()
-        verify(native).setMotionClassifierEnabled(anyBoolean())
-        verify(native).setMaximumObscuringOpacityForTouch(anyFloat())
-        verify(native).setStylusPointerIconEnabled(anyBoolean())
-    }
-
-    @Test
-    fun testPointerDisplayUpdatesWhenDisplayViewportsChanged() {
-        val displayId = 123
-        whenever(wmCallbacks.pointerDisplayId).thenReturn(displayId)
-        val viewports = listOf<DisplayViewport>()
-        localService.setDisplayViewports(viewports)
-        verify(native).setDisplayViewports(any(Array<DisplayViewport>::class.java))
-        verify(native).setPointerDisplayId(displayId)
-
-        val x = 42f
-        val y = 314f
-        service.onPointerDisplayIdChanged(displayId, x, y)
-        testLooper.dispatchNext()
-        verify(wmCallbacks).notifyPointerDisplayIdChanged(displayId, x, y)
-    }
-
-    @Test
-    fun testSetVirtualMousePointerDisplayId() {
-        // Set the virtual mouse pointer displayId, and ensure that the calling thread is blocked
-        // until the native callback happens.
-        var countDownLatch = CountDownLatch(1)
-        val overrideDisplayId = 123
-        Thread {
-            assertTrue("Setting virtual pointer display should succeed",
-                localService.setVirtualMousePointerDisplayId(overrideDisplayId))
-            countDownLatch.countDown()
-        }.start()
-        assertFalse("Setting virtual pointer display should block",
-            countDownLatch.await(100, TimeUnit.MILLISECONDS))
-
-        val x = 42f
-        val y = 314f
-        service.onPointerDisplayIdChanged(overrideDisplayId, x, y)
-        testLooper.dispatchNext()
-        verify(wmCallbacks).notifyPointerDisplayIdChanged(overrideDisplayId, x, y)
-        assertTrue("Native callback unblocks calling thread",
-            countDownLatch.await(100, TimeUnit.MILLISECONDS))
-        verify(native).setPointerDisplayId(overrideDisplayId)
-
-        // Ensure that setting the same override again succeeds immediately.
-        assertTrue("Setting the same virtual mouse pointer displayId again should succeed",
-            localService.setVirtualMousePointerDisplayId(overrideDisplayId))
-
-        // Ensure that we did not query WM for the pointerDisplayId when setting the override
-        verify(wmCallbacks, never()).pointerDisplayId
-
-        // Unset the virtual mouse pointer displayId, and ensure that we query WM for the new
-        // pointer displayId and the calling thread is blocked until the native callback happens.
-        countDownLatch = CountDownLatch(1)
-        val pointerDisplayId = 42
-        `when`(wmCallbacks.pointerDisplayId).thenReturn(pointerDisplayId)
-        Thread {
-            assertTrue("Unsetting virtual mouse pointer displayId should succeed",
-                localService.setVirtualMousePointerDisplayId(Display.INVALID_DISPLAY))
-            countDownLatch.countDown()
-        }.start()
-        assertFalse("Unsetting virtual mouse pointer displayId should block",
-            countDownLatch.await(100, TimeUnit.MILLISECONDS))
-
-        service.onPointerDisplayIdChanged(pointerDisplayId, x, y)
-        testLooper.dispatchNext()
-        verify(wmCallbacks).notifyPointerDisplayIdChanged(pointerDisplayId, x, y)
-        assertTrue("Native callback unblocks calling thread",
-            countDownLatch.await(100, TimeUnit.MILLISECONDS))
-        verify(native).setPointerDisplayId(pointerDisplayId)
-    }
-
-    @Test
-    fun testSetVirtualMousePointerDisplayId_unsuccessfulUpdate() {
-        // Set the virtual mouse pointer displayId, and ensure that the calling thread is blocked
-        // until the native callback happens.
-        val countDownLatch = CountDownLatch(1)
-        val overrideDisplayId = 123
-        Thread {
-            assertFalse("Setting virtual pointer display should be unsuccessful",
-                localService.setVirtualMousePointerDisplayId(overrideDisplayId))
-            countDownLatch.countDown()
-        }.start()
-        assertFalse("Setting virtual pointer display should block",
-            countDownLatch.await(100, TimeUnit.MILLISECONDS))
-
-        val x = 42f
-        val y = 314f
-        // Assume the native callback updates the pointerDisplayId to the incorrect value.
-        service.onPointerDisplayIdChanged(Display.INVALID_DISPLAY, x, y)
-        testLooper.dispatchNext()
-        verify(wmCallbacks).notifyPointerDisplayIdChanged(Display.INVALID_DISPLAY, x, y)
-        assertTrue("Native callback unblocks calling thread",
-            countDownLatch.await(100, TimeUnit.MILLISECONDS))
-        verify(native).setPointerDisplayId(overrideDisplayId)
-    }
-
-    @Test
-    fun testSetVirtualMousePointerDisplayId_competingRequests() {
-        val firstRequestSyncLatch = CountDownLatch(1)
-        doAnswer {
-            firstRequestSyncLatch.countDown()
-        }.`when`(native).setPointerDisplayId(anyInt())
-
-        val firstRequestLatch = CountDownLatch(1)
-        val firstOverride = 123
-        Thread {
-            assertFalse("Setting virtual pointer display from thread 1 should be unsuccessful",
-                localService.setVirtualMousePointerDisplayId(firstOverride))
-            firstRequestLatch.countDown()
-        }.start()
-        assertFalse("Setting virtual pointer display should block",
-            firstRequestLatch.await(100, TimeUnit.MILLISECONDS))
-
-        assertTrue("Wait for first thread's request should succeed",
-            firstRequestSyncLatch.await(100, TimeUnit.MILLISECONDS))
-
-        val secondRequestLatch = CountDownLatch(1)
-        val secondOverride = 42
-        Thread {
-            assertTrue("Setting virtual mouse pointer from thread 2 should be successful",
-                localService.setVirtualMousePointerDisplayId(secondOverride))
-            secondRequestLatch.countDown()
-        }.start()
-        assertFalse("Setting virtual mouse pointer should block",
-            secondRequestLatch.await(100, TimeUnit.MILLISECONDS))
-
-        val x = 42f
-        val y = 314f
-        // Assume the native callback updates directly to the second request.
-        service.onPointerDisplayIdChanged(secondOverride, x, y)
-        testLooper.dispatchNext()
-        verify(wmCallbacks).notifyPointerDisplayIdChanged(secondOverride, x, y)
-        assertTrue("Native callback unblocks first thread",
-            firstRequestLatch.await(100, TimeUnit.MILLISECONDS))
-        assertTrue("Native callback unblocks second thread",
-            secondRequestLatch.await(100, TimeUnit.MILLISECONDS))
-        verify(native, times(2)).setPointerDisplayId(anyInt())
-    }
-
-    @Test
-    fun onDisplayRemoved_resetAllAdditionalInputProperties() {
-        setVirtualMousePointerDisplayIdAndVerify(10)
-
-        localService.setPointerIconVisible(false, 10)
-        verify(native).setPointerIconType(eq(PointerIcon.TYPE_NULL))
-        localService.setPointerAcceleration(5f, 10)
-        verify(native).setPointerAcceleration(eq(5f))
-
-        service.onDisplayRemoved(10)
-        verify(native).displayRemoved(eq(10))
-        verify(native).setPointerIconType(eq(PointerIcon.TYPE_NOT_SPECIFIED))
-        verify(native).setPointerAcceleration(
-            eq(IInputConstants.DEFAULT_POINTER_ACCELERATION.toFloat()))
-        verifyNoMoreInteractions(native)
-
-        // This call should not block because the virtual mouse pointer override was never removed.
-        localService.setVirtualMousePointerDisplayId(10)
-
-        verify(native).setPointerDisplayId(eq(10))
-        verifyNoMoreInteractions(native)
-    }
-
-    @Test
-    fun updateAdditionalInputPropertiesForOverrideDisplay() {
-        setVirtualMousePointerDisplayIdAndVerify(10)
-
-        localService.setPointerIconVisible(false, 10)
-        verify(native).setPointerIconType(eq(PointerIcon.TYPE_NULL))
-        localService.setPointerAcceleration(5f, 10)
-        verify(native).setPointerAcceleration(eq(5f))
-
-        localService.setPointerIconVisible(true, 10)
-        verify(native).setPointerIconType(eq(PointerIcon.TYPE_NOT_SPECIFIED))
-        localService.setPointerAcceleration(1f, 10)
-        verify(native).setPointerAcceleration(eq(1f))
-
-        // Verify that setting properties on a different display is not propagated until the
-        // pointer is moved to that display.
-        localService.setPointerIconVisible(false, 20)
-        localService.setPointerAcceleration(6f, 20)
-        verifyNoMoreInteractions(native)
-
-        clearInvocations(native)
-        setVirtualMousePointerDisplayIdAndVerify(20)
-
-        verify(native).setPointerIconType(eq(PointerIcon.TYPE_NULL))
-        verify(native).setPointerAcceleration(eq(6f))
-    }
-
-    @Test
-    fun setAdditionalInputPropertiesBeforeOverride() {
-        localService.setPointerIconVisible(false, 10)
-        localService.setPointerAcceleration(5f, 10)
-
-        verifyNoMoreInteractions(native)
-
-        setVirtualMousePointerDisplayIdAndVerify(10)
-
-        verify(native).setPointerIconType(eq(PointerIcon.TYPE_NULL))
-        verify(native).setPointerAcceleration(eq(5f))
-    }
-
-    @Test
-    fun setDeviceTypeAssociation_setsDeviceTypeAssociation() {
-        val inputPort = "inputPort"
-        val type = "type"
-
-        localService.setTypeAssociation(inputPort, type)
-
-        assertThat(service.getDeviceTypeAssociations()).asList().containsExactly(inputPort, type)
-            .inOrder()
-    }
-
-    @Test
-    fun setAndUnsetDeviceTypeAssociation_deviceTypeAssociationIsMissing() {
-        val inputPort = "inputPort"
-        val type = "type"
-
-        localService.setTypeAssociation(inputPort, type)
-        localService.unsetTypeAssociation(inputPort)
-
-        assertTrue(service.getDeviceTypeAssociations().isEmpty())
-    }
-
-    @Test
-    fun testAddAndRemoveVirtualmKeyboardLayoutAssociation() {
-        val inputPort = "input port"
-        val languageTag = "language"
-        val layoutType = "layoutType"
-        localService.addKeyboardLayoutAssociation(inputPort, languageTag, layoutType)
-        verify(native).changeKeyboardLayoutAssociation()
-
-        localService.removeKeyboardLayoutAssociation(inputPort)
-        verify(native, times(2)).changeKeyboardLayoutAssociation()
-    }
-
-    private fun setVirtualMousePointerDisplayIdAndVerify(overrideDisplayId: Int) {
-        val thread = Thread { localService.setVirtualMousePointerDisplayId(overrideDisplayId) }
-        thread.start()
-
-        // Allow some time for the set override call to park while waiting for the native callback.
-        Thread.sleep(100 /*millis*/)
-        verify(native).setPointerDisplayId(overrideDisplayId)
-
-        service.onPointerDisplayIdChanged(overrideDisplayId, 0f, 0f)
-        testLooper.dispatchNext()
-        verify(wmCallbacks).notifyPointerDisplayIdChanged(overrideDisplayId, 0f, 0f)
-        thread.join(100 /*millis*/)
-    }
-}
-
-private fun <T> whenever(methodCall: T): OngoingStubbing<T> = `when`(methodCall)
diff --git a/services/tests/servicestests/src/com/android/server/input/KeyRemapperTests.kt b/services/tests/servicestests/src/com/android/server/input/KeyRemapperTests.kt
deleted file mode 100644
index c10f651..0000000
--- a/services/tests/servicestests/src/com/android/server/input/KeyRemapperTests.kt
+++ /dev/null
@@ -1,190 +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.server.input
-
-import android.content.Context
-import android.content.ContextWrapper
-import android.hardware.input.IInputManager
-import android.hardware.input.InputManager
-import android.hardware.input.InputManagerGlobal
-import android.os.test.TestLooper
-import android.platform.test.annotations.Presubmit
-import android.provider.Settings
-import android.view.InputDevice
-import android.view.KeyEvent
-import androidx.test.core.app.ApplicationProvider
-import org.junit.After
-import org.junit.Assert.assertEquals
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.mockito.Mock
-import org.mockito.Mockito
-import org.mockito.junit.MockitoJUnit
-import java.io.FileNotFoundException
-import java.io.FileOutputStream
-import java.io.IOException
-import java.io.InputStream
-
-private fun createKeyboard(deviceId: Int): InputDevice =
-    InputDevice.Builder()
-        .setId(deviceId)
-        .setName("Device $deviceId")
-        .setDescriptor("descriptor $deviceId")
-        .setSources(InputDevice.SOURCE_KEYBOARD)
-        .setKeyboardType(InputDevice.KEYBOARD_TYPE_ALPHABETIC)
-        .setExternal(true)
-        .build()
-
-/**
- * Tests for {@link KeyRemapper}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:KeyRemapperTests
- */
-@Presubmit
-class KeyRemapperTests {
-
-    companion object {
-        const val DEVICE_ID = 1
-        val REMAPPABLE_KEYS = intArrayOf(
-            KeyEvent.KEYCODE_CTRL_LEFT, KeyEvent.KEYCODE_CTRL_RIGHT,
-            KeyEvent.KEYCODE_META_LEFT, KeyEvent.KEYCODE_META_RIGHT,
-            KeyEvent.KEYCODE_ALT_LEFT, KeyEvent.KEYCODE_ALT_RIGHT,
-            KeyEvent.KEYCODE_SHIFT_LEFT, KeyEvent.KEYCODE_SHIFT_RIGHT,
-            KeyEvent.KEYCODE_CAPS_LOCK
-        )
-    }
-
-    @get:Rule
-    val rule = MockitoJUnit.rule()!!
-
-    @Mock
-    private lateinit var iInputManager: IInputManager
-    @Mock
-    private lateinit var native: NativeInputManagerService
-    private lateinit var mKeyRemapper: KeyRemapper
-    private lateinit var context: Context
-    private lateinit var dataStore: PersistentDataStore
-    private lateinit var testLooper: TestLooper
-
-    @Before
-    fun setup() {
-        context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
-        dataStore = PersistentDataStore(object : PersistentDataStore.Injector() {
-            override fun openRead(): InputStream? {
-                throw FileNotFoundException()
-            }
-
-            override fun startWrite(): FileOutputStream? {
-                throw IOException()
-            }
-
-            override fun finishWrite(fos: FileOutputStream?, success: Boolean) {}
-        })
-        testLooper = TestLooper()
-        mKeyRemapper = KeyRemapper(
-            context,
-            native,
-            dataStore,
-            testLooper.looper
-        )
-        InputManagerGlobal.resetInstance(iInputManager)
-        val inputManager = InputManager(context)
-        Mockito.`when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE)))
-            .thenReturn(inputManager)
-        Mockito.`when`(iInputManager.inputDeviceIds).thenReturn(intArrayOf(DEVICE_ID))
-    }
-
-    @After
-    fun tearDown() {
-        InputManagerGlobal.clearInstance()
-    }
-
-    @Test
-    fun testKeyRemapping_whenRemappingEnabled() {
-        ModifierRemappingFlag(true).use {
-            val keyboard = createKeyboard(DEVICE_ID)
-            Mockito.`when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboard)
-
-            for (i in REMAPPABLE_KEYS.indices) {
-                val fromKeyCode = REMAPPABLE_KEYS[i]
-                val toKeyCode = REMAPPABLE_KEYS[(i + 1) % REMAPPABLE_KEYS.size]
-                mKeyRemapper.remapKey(fromKeyCode, toKeyCode)
-                testLooper.dispatchNext()
-            }
-
-            val remapping = mKeyRemapper.keyRemapping
-            val expectedSize = REMAPPABLE_KEYS.size
-            assertEquals("Remapping size should be $expectedSize", expectedSize, remapping.size)
-
-            for (i in REMAPPABLE_KEYS.indices) {
-                val fromKeyCode = REMAPPABLE_KEYS[i]
-                val toKeyCode = REMAPPABLE_KEYS[(i + 1) % REMAPPABLE_KEYS.size]
-                assertEquals(
-                    "Remapping should include mapping from $fromKeyCode to $toKeyCode",
-                    toKeyCode,
-                    remapping.getOrDefault(fromKeyCode, -1)
-                )
-            }
-
-            mKeyRemapper.clearAllKeyRemappings()
-            testLooper.dispatchNext()
-
-            assertEquals(
-                "Remapping size should be 0 after clearAllModifierKeyRemappings",
-                0,
-                mKeyRemapper.keyRemapping.size
-            )
-        }
-    }
-
-    @Test
-    fun testKeyRemapping_whenRemappingDisabled() {
-        ModifierRemappingFlag(false).use {
-            val keyboard = createKeyboard(DEVICE_ID)
-            Mockito.`when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboard)
-
-            mKeyRemapper.remapKey(REMAPPABLE_KEYS[0], REMAPPABLE_KEYS[1])
-            testLooper.dispatchAll()
-
-            val remapping = mKeyRemapper.keyRemapping
-            assertEquals(
-                "Remapping should not be done if modifier key remapping is disabled",
-                0,
-                remapping.size
-            )
-        }
-    }
-
-    private inner class ModifierRemappingFlag constructor(enabled: Boolean) : AutoCloseable {
-        init {
-            Settings.Global.putString(
-                context.contentResolver,
-                "settings_new_keyboard_modifier_key", enabled.toString()
-            )
-        }
-
-        override fun close() {
-            Settings.Global.putString(
-                context.contentResolver,
-                "settings_new_keyboard_modifier_key",
-                ""
-            )
-        }
-    }
-}
\ No newline at end of file
diff --git a/services/tests/servicestests/src/com/android/server/input/KeyboardBacklightControllerTests.kt b/services/tests/servicestests/src/com/android/server/input/KeyboardBacklightControllerTests.kt
deleted file mode 100644
index 3f4a4fb..0000000
--- a/services/tests/servicestests/src/com/android/server/input/KeyboardBacklightControllerTests.kt
+++ /dev/null
@@ -1,846 +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.server.input
-
-import android.animation.ValueAnimator
-import android.content.Context
-import android.content.ContextWrapper
-import android.graphics.Color
-import android.hardware.input.IInputManager
-import android.hardware.input.IKeyboardBacklightListener
-import android.hardware.input.IKeyboardBacklightState
-import android.hardware.input.InputManager
-import android.hardware.input.InputManagerGlobal
-import android.hardware.lights.Light
-import android.os.UEventObserver
-import android.os.test.TestLooper
-import android.platform.test.annotations.Presubmit
-import android.view.InputDevice
-import androidx.test.annotation.UiThreadTest
-import androidx.test.core.app.ApplicationProvider
-import com.android.server.input.KeyboardBacklightController.DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL
-import com.android.server.input.KeyboardBacklightController.MAX_BRIGHTNESS_CHANGE_STEPS
-import com.android.server.input.KeyboardBacklightController.USER_INACTIVITY_THRESHOLD_MILLIS
-import org.junit.After
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertFalse
-import org.junit.Assert.assertNotEquals
-import org.junit.Assert.assertNotNull
-import org.junit.Assert.assertNull
-import org.junit.Assert.assertTrue
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.mockito.Mock
-import org.mockito.Mockito.any
-import org.mockito.Mockito.anyInt
-import org.mockito.Mockito.eq
-import org.mockito.Mockito.spy
-import org.mockito.Mockito.`when`
-import org.mockito.junit.MockitoJUnit
-import java.io.FileNotFoundException
-import java.io.FileOutputStream
-import java.io.IOException
-import java.io.InputStream
-
-private fun createKeyboard(deviceId: Int): InputDevice =
-    InputDevice.Builder()
-        .setId(deviceId)
-        .setName("Device $deviceId")
-        .setDescriptor("descriptor $deviceId")
-        .setSources(InputDevice.SOURCE_KEYBOARD)
-        .setKeyboardType(InputDevice.KEYBOARD_TYPE_ALPHABETIC)
-        .setExternal(true)
-        .build()
-
-private fun createLight(lightId: Int, lightType: Int): Light =
-    createLight(
-        lightId,
-        lightType,
-        null
-    )
-
-private fun createLight(lightId: Int, lightType: Int, suggestedBrightnessLevels: IntArray?): Light =
-    Light(
-        lightId,
-        "Light $lightId",
-        1,
-        lightType,
-        Light.LIGHT_CAPABILITY_BRIGHTNESS,
-        suggestedBrightnessLevels
-    )
-/**
- * Tests for {@link KeyboardBacklightController}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:KeyboardBacklightControllerTests
- */
-@Presubmit
-class KeyboardBacklightControllerTests {
-    companion object {
-        const val DEVICE_ID = 1
-        const val LIGHT_ID = 2
-        const val SECOND_LIGHT_ID = 3
-        const val MAX_BRIGHTNESS = 255
-    }
-
-    @get:Rule
-    val rule = MockitoJUnit.rule()!!
-
-    @Mock
-    private lateinit var iInputManager: IInputManager
-    @Mock
-    private lateinit var native: NativeInputManagerService
-    @Mock
-    private lateinit var uEventManager: UEventManager
-    private lateinit var keyboardBacklightController: KeyboardBacklightController
-    private lateinit var context: Context
-    private lateinit var dataStore: PersistentDataStore
-    private lateinit var testLooper: TestLooper
-    private var lightColorMap: HashMap<Int, Int> = HashMap()
-    private var lastBacklightState: KeyboardBacklightState? = null
-    private var sysfsNodeChanges = 0
-    private var lastAnimationValues = IntArray(2)
-
-    @Before
-    fun setup() {
-        context = spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
-        dataStore = PersistentDataStore(object : PersistentDataStore.Injector() {
-            override fun openRead(): InputStream? {
-                throw FileNotFoundException()
-            }
-
-            override fun startWrite(): FileOutputStream? {
-                throw IOException()
-            }
-
-            override fun finishWrite(fos: FileOutputStream?, success: Boolean) {}
-        })
-        testLooper = TestLooper()
-        keyboardBacklightController = KeyboardBacklightController(context, native, dataStore,
-                testLooper.looper, FakeAnimatorFactory(), uEventManager)
-        InputManagerGlobal.resetInstance(iInputManager)
-        val inputManager = InputManager(context)
-        `when`(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(inputManager)
-        `when`(iInputManager.inputDeviceIds).thenReturn(intArrayOf(DEVICE_ID))
-        `when`(native.setLightColor(anyInt(), anyInt(), anyInt())).then {
-            val args = it.arguments
-            lightColorMap.put(args[1] as Int, args[2] as Int)
-        }
-        `when`(native.getLightColor(anyInt(), anyInt())).thenAnswer {
-            val args = it.arguments
-            lightColorMap.getOrDefault(args[1] as Int, 0)
-        }
-        lightColorMap.clear()
-        `when`(native.sysfsNodeChanged(any())).then {
-            sysfsNodeChanges++
-        }
-    }
-
-    @After
-    fun tearDown() {
-        InputManagerGlobal.clearInstance()
-    }
-
-    @Test
-    fun testKeyboardBacklightIncrementDecrement() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = false,
-            ambientControlEnabled = false
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-
-            assertIncrementDecrementForLevels(keyboardWithBacklight, keyboardBacklight,
-                    DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL)
-        }
-    }
-
-    @Test
-    fun testKeyboardWithoutBacklight() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = false,
-            ambientControlEnabled = false
-        ).use {
-            val keyboardWithoutBacklight = createKeyboard(DEVICE_ID)
-            val keyboardInputLight = createLight(LIGHT_ID, Light.LIGHT_TYPE_INPUT)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithoutBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardInputLight))
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-
-            incrementKeyboardBacklight(DEVICE_ID)
-            assertTrue("Non Keyboard backlights should not change", lightColorMap.isEmpty())
-        }
-    }
-
-    @Test
-    fun testKeyboardWithMultipleLight() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = false,
-            ambientControlEnabled = false
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
-            val keyboardInputLight = createLight(SECOND_LIGHT_ID, Light.LIGHT_TYPE_INPUT)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(
-                listOf(
-                    keyboardBacklight,
-                    keyboardInputLight
-                )
-            )
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-
-            incrementKeyboardBacklight(DEVICE_ID)
-            assertEquals("Only keyboard backlights should change", 1, lightColorMap.size)
-            assertNotNull("Keyboard backlight should change", lightColorMap[LIGHT_ID])
-            assertNull("Input lights should not change", lightColorMap[SECOND_LIGHT_ID])
-        }
-    }
-
-    @Test
-    fun testRestoreBacklightOnInputDeviceAdded() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = false,
-            ambientControlEnabled = false
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-
-            for (level in 1 until DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL.size) {
-                dataStore.setKeyboardBacklightBrightness(
-                    keyboardWithBacklight.descriptor,
-                    LIGHT_ID,
-                    DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[level] - 1
-                )
-
-                keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-                keyboardBacklightController.notifyUserActivity()
-                testLooper.dispatchNext()
-                assertEquals(
-                    "Keyboard backlight level should be restored to the level saved in the " +
-                            "data store",
-                    Color.argb(DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[level], 0, 0, 0),
-                    lightColorMap[LIGHT_ID]
-                )
-                keyboardBacklightController.onInputDeviceRemoved(DEVICE_ID)
-            }
-        }
-    }
-
-    @Test
-    fun testRestoreBacklightOnInputDeviceChanged() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = false,
-            ambientControlEnabled = false
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            dataStore.setKeyboardBacklightBrightness(
-                keyboardWithBacklight.descriptor,
-                LIGHT_ID,
-                MAX_BRIGHTNESS
-            )
-
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-            keyboardBacklightController.notifyUserActivity()
-            testLooper.dispatchNext()
-            assertTrue(
-                "Keyboard backlight should not be changed until its added",
-                lightColorMap.isEmpty()
-            )
-
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-            keyboardBacklightController.onInputDeviceChanged(DEVICE_ID)
-            keyboardBacklightController.notifyUserActivity()
-            testLooper.dispatchNext()
-            assertEquals(
-                "Keyboard backlight level should be restored to the level saved in the data store",
-                Color.argb(MAX_BRIGHTNESS, 0, 0, 0),
-                lightColorMap[LIGHT_ID]
-            )
-        }
-    }
-
-    @Test
-    fun testKeyboardBacklight_registerUnregisterListener() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = false,
-            ambientControlEnabled = false
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
-            val maxLevel = DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL.size - 1
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-
-            // Register backlight listener
-            val listener = KeyboardBacklightListener()
-            keyboardBacklightController.registerKeyboardBacklightListener(listener, 0)
-
-            lastBacklightState = null
-            keyboardBacklightController.incrementKeyboardBacklight(DEVICE_ID)
-            testLooper.dispatchNext()
-
-            assertEquals(
-                "Backlight state device Id should be $DEVICE_ID",
-                DEVICE_ID,
-                lastBacklightState!!.deviceId
-            )
-            assertEquals(
-                "Backlight state brightnessLevel should be 1",
-                1,
-                lastBacklightState!!.brightnessLevel
-            )
-            assertEquals(
-                "Backlight state maxBrightnessLevel should be $maxLevel",
-                maxLevel,
-                lastBacklightState!!.maxBrightnessLevel
-            )
-            assertEquals(
-                "Backlight state isTriggeredByKeyPress should be true",
-                true,
-                lastBacklightState!!.isTriggeredByKeyPress
-            )
-
-            // Unregister listener
-            keyboardBacklightController.unregisterKeyboardBacklightListener(listener, 0)
-
-            lastBacklightState = null
-            incrementKeyboardBacklight(DEVICE_ID)
-
-            assertNull("Listener should not receive any updates", lastBacklightState)
-        }
-    }
-
-    @Test
-    fun testKeyboardBacklight_userActivity() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = false,
-            ambientControlEnabled = false
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-            dataStore.setKeyboardBacklightBrightness(
-                keyboardWithBacklight.descriptor,
-                LIGHT_ID,
-                MAX_BRIGHTNESS
-            )
-
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-            keyboardBacklightController.notifyUserActivity()
-            testLooper.dispatchNext()
-            assertEquals(
-                "Keyboard backlight level should be restored to the level saved in the data store",
-                Color.argb(MAX_BRIGHTNESS, 0, 0, 0),
-                lightColorMap[LIGHT_ID]
-            )
-
-            testLooper.moveTimeForward(USER_INACTIVITY_THRESHOLD_MILLIS + 1000)
-            testLooper.dispatchNext()
-            assertEquals(
-                "Keyboard backlight level should be turned off after inactivity",
-                0,
-                lightColorMap[LIGHT_ID]
-            )
-        }
-    }
-
-    @Test
-    fun testKeyboardBacklight_displayOnOff() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = false,
-            ambientControlEnabled = false
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-            dataStore.setKeyboardBacklightBrightness(
-                keyboardWithBacklight.descriptor,
-                LIGHT_ID,
-                MAX_BRIGHTNESS
-            )
-
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-            keyboardBacklightController.handleInteractiveStateChange(true /* isDisplayOn */)
-            assertEquals(
-                "Keyboard backlight level should be restored to the level saved in the data " +
-                        "store when display turned on",
-                Color.argb(MAX_BRIGHTNESS, 0, 0, 0),
-                lightColorMap[LIGHT_ID]
-            )
-
-            keyboardBacklightController.handleInteractiveStateChange(false /* isDisplayOn */)
-            assertEquals(
-                "Keyboard backlight level should be turned off after display is turned off",
-                0,
-                lightColorMap[LIGHT_ID]
-            )
-        }
-    }
-
-    @Test
-    fun testKeyboardBacklightSysfsNodeAdded_AfterInputDeviceAdded() {
-        var counter = sysfsNodeChanges
-        keyboardBacklightController.onKeyboardBacklightUEvent(UEventObserver.UEvent(
-            "ACTION=add\u0000SUBSYSTEM=leds\u0000DEVPATH=/xyz/leds/abc::no_backlight\u0000"
-        ))
-        assertEquals(
-            "Should not reload sysfs node if UEvent path doesn't contain kbd_backlight",
-            counter,
-            sysfsNodeChanges
-        )
-
-        keyboardBacklightController.onKeyboardBacklightUEvent(UEventObserver.UEvent(
-            "ACTION=add\u0000SUBSYSTEM=power\u0000DEVPATH=/xyz/leds/abc::kbd_backlight\u0000"
-        ))
-        assertEquals(
-            "Should not reload sysfs node if UEvent doesn't belong to subsystem LED",
-            counter,
-            sysfsNodeChanges
-        )
-
-        keyboardBacklightController.onKeyboardBacklightUEvent(UEventObserver.UEvent(
-            "ACTION=remove\u0000SUBSYSTEM=leds\u0000DEVPATH=/xyz/leds/abc::kbd_backlight\u0000"
-        ))
-        assertEquals(
-            "Should not reload sysfs node if UEvent doesn't have ACTION(add)",
-            counter,
-            sysfsNodeChanges
-        )
-
-        keyboardBacklightController.onKeyboardBacklightUEvent(UEventObserver.UEvent(
-            "ACTION=add\u0000SUBSYSTEM=leds\u0000DEVPATH=/xyz/pqr/abc::kbd_backlight\u0000"
-        ))
-        assertEquals(
-            "Should not reload sysfs node if UEvent path doesn't belong to leds/ directory",
-            counter,
-            sysfsNodeChanges
-        )
-
-        keyboardBacklightController.onKeyboardBacklightUEvent(UEventObserver.UEvent(
-            "ACTION=add\u0000SUBSYSTEM=leds\u0000DEVPATH=/xyz/leds/abc::kbd_backlight\u0000"
-        ))
-        assertEquals(
-            "Should reload sysfs node if a valid Keyboard backlight LED UEvent occurs",
-            ++counter,
-            sysfsNodeChanges
-        )
-
-        keyboardBacklightController.onKeyboardBacklightUEvent(UEventObserver.UEvent(
-            "ACTION=add\u0000SUBSYSTEM=leds\u0000DEVPATH=/xyz/leds/abc:kbd_backlight:red\u0000"
-        ))
-        assertEquals(
-            "Should reload sysfs node if a valid Keyboard backlight LED UEvent occurs",
-            ++counter,
-            sysfsNodeChanges
-        )
-    }
-
-    @Test
-    @UiThreadTest
-    fun testKeyboardBacklightAnimation_onChangeLevels() {
-        KeyboardBacklightFlags(
-            animationEnabled = true,
-            customLevelsEnabled = false,
-            ambientControlEnabled = false
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-
-            incrementKeyboardBacklight(DEVICE_ID)
-            assertEquals(
-                "Should start animation from level 0",
-                DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[0],
-                lastAnimationValues[0]
-            )
-            assertEquals(
-                "Should start animation to level 1",
-                DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[1],
-                lastAnimationValues[1]
-            )
-        }
-    }
-
-    @Test
-    fun testKeyboardBacklightPreferredLevels() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = true,
-            ambientControlEnabled = false
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val suggestedLevels = intArrayOf(0, 22, 63, 135, 196, 255)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT,
-                    suggestedLevels)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-
-            assertIncrementDecrementForLevels(keyboardWithBacklight, keyboardBacklight,
-                    suggestedLevels)
-        }
-    }
-
-    @Test
-    fun testKeyboardBacklightPreferredLevels_moreThanMax_shouldUseDefault() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = true,
-            ambientControlEnabled = false
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val suggestedLevels = IntArray(MAX_BRIGHTNESS_CHANGE_STEPS + 1) { 10 * (it + 1) }
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT,
-                    suggestedLevels)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-
-            assertIncrementDecrementForLevels(keyboardWithBacklight, keyboardBacklight,
-                    DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL)
-        }
-    }
-
-    @Test
-    fun testKeyboardBacklightPreferredLevels_mustHaveZeroAndMaxBrightnessAsBounds() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = true,
-            ambientControlEnabled = false
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val suggestedLevels = intArrayOf(22, 63, 135, 196)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT,
-                    suggestedLevels)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-
-            // Framework will add the lowest and maximum levels if not provided via config
-            assertIncrementDecrementForLevels(keyboardWithBacklight, keyboardBacklight,
-                    intArrayOf(0, 22, 63, 135, 196, 255))
-        }
-    }
-
-    @Test
-    fun testKeyboardBacklightPreferredLevels_dropsOutOfBoundsLevels() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = true,
-            ambientControlEnabled = false
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val suggestedLevels = intArrayOf(22, 63, 135, 400, 196, 1000)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT,
-                    suggestedLevels)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-
-            // Framework will drop out of bound levels in the config
-            assertIncrementDecrementForLevels(keyboardWithBacklight, keyboardBacklight,
-                    intArrayOf(0, 22, 63, 135, 196, 255))
-        }
-    }
-
-    @Test
-    fun testAmbientBacklightControl_doesntRestoreBacklightLevel() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = false,
-            ambientControlEnabled = true
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-
-            dataStore.setKeyboardBacklightBrightness(
-                keyboardWithBacklight.descriptor,
-                LIGHT_ID,
-                DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[1]
-            )
-
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-            keyboardBacklightController.notifyUserActivity()
-            testLooper.dispatchNext()
-            assertNull(
-                "Keyboard backlight level should not be restored to the saved level",
-                lightColorMap[LIGHT_ID]
-            )
-        }
-    }
-
-    @Test
-    fun testAmbientBacklightControl_doesntBackupBacklightLevel() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = false,
-            ambientControlEnabled = true
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-            incrementKeyboardBacklight(DEVICE_ID)
-            assertFalse(
-                "Light value should not be backed up if ambient control is enabled",
-                dataStore.getKeyboardBacklightBrightness(
-                    keyboardWithBacklight.descriptor, LIGHT_ID
-                ).isPresent
-            )
-        }
-    }
-
-    @Test
-    fun testAmbientBacklightControl_incrementLevel_afterAmbientChange() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = false,
-            ambientControlEnabled = true
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-            sendAmbientBacklightValue(1)
-            assertEquals(
-                "Light value should be changed to ambient provided value",
-                Color.argb(1, 0, 0, 0),
-                lightColorMap[LIGHT_ID]
-            )
-
-            incrementKeyboardBacklight(DEVICE_ID)
-
-            assertEquals(
-                "Light value for level after increment post Ambient change is mismatched",
-                Color.argb(DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[1], 0, 0, 0),
-                lightColorMap[LIGHT_ID]
-            )
-        }
-    }
-
-    @Test
-    fun testAmbientBacklightControl_decrementLevel_afterAmbientChange() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = false,
-            ambientControlEnabled = true
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-            sendAmbientBacklightValue(254)
-            assertEquals(
-                "Light value should be changed to ambient provided value",
-                Color.argb(254, 0, 0, 0),
-                lightColorMap[LIGHT_ID]
-            )
-
-            decrementKeyboardBacklight(DEVICE_ID)
-
-            val numLevels = DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL.size
-            assertEquals(
-                "Light value for level after decrement post Ambient change is mismatched",
-                Color.argb(DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[numLevels - 2], 0, 0, 0),
-                lightColorMap[LIGHT_ID]
-            )
-        }
-    }
-
-    @Test
-    fun testAmbientBacklightControl_ambientChanges_afterManualChange() {
-        KeyboardBacklightFlags(
-            animationEnabled = false,
-            customLevelsEnabled = false,
-            ambientControlEnabled = true
-        ).use {
-            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
-            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
-            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
-            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
-            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
-            incrementKeyboardBacklight(DEVICE_ID)
-            assertEquals(
-                "Light value should be changed to the first level",
-                Color.argb(DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[1], 0, 0, 0),
-                lightColorMap[LIGHT_ID]
-            )
-
-            sendAmbientBacklightValue(100)
-            assertNotEquals(
-                "Light value should not change based on ambient changes after manual changes",
-                Color.argb(100, 0, 0, 0),
-                lightColorMap[LIGHT_ID]
-            )
-        }
-    }
-
-    private fun assertIncrementDecrementForLevels(
-        device: InputDevice,
-        light: Light,
-        expectedLevels: IntArray
-    ) {
-        val deviceId = device.id
-        val lightId = light.id
-        for (level in 1 until expectedLevels.size) {
-            incrementKeyboardBacklight(deviceId)
-            assertEquals(
-                "Light value for level $level mismatched",
-                Color.argb(expectedLevels[level], 0, 0, 0),
-                lightColorMap[lightId]
-            )
-            assertEquals(
-                "Light value for level $level must be correctly stored in the datastore",
-                expectedLevels[level],
-                dataStore.getKeyboardBacklightBrightness(device.descriptor, lightId).asInt
-            )
-        }
-
-        // Increment above max level
-        incrementKeyboardBacklight(deviceId)
-        assertEquals(
-            "Light value for max level mismatched",
-            Color.argb(MAX_BRIGHTNESS, 0, 0, 0),
-            lightColorMap[lightId]
-        )
-        assertEquals(
-            "Light value for max level must be correctly stored in the datastore",
-            MAX_BRIGHTNESS,
-            dataStore.getKeyboardBacklightBrightness(device.descriptor, lightId).asInt
-        )
-
-        for (level in expectedLevels.size - 2 downTo 0) {
-            decrementKeyboardBacklight(deviceId)
-            assertEquals(
-                "Light value for level $level mismatched",
-                Color.argb(expectedLevels[level], 0, 0, 0),
-                lightColorMap[lightId]
-            )
-            assertEquals(
-                "Light value for level $level must be correctly stored in the datastore",
-                expectedLevels[level],
-                dataStore.getKeyboardBacklightBrightness(device.descriptor, lightId).asInt
-            )
-        }
-
-        // Decrement below min level
-        decrementKeyboardBacklight(deviceId)
-        assertEquals(
-            "Light value for min level mismatched",
-            Color.argb(0, 0, 0, 0),
-            lightColorMap[lightId]
-        )
-        assertEquals(
-            "Light value for min level must be correctly stored in the datastore",
-            0,
-            dataStore.getKeyboardBacklightBrightness(device.descriptor, lightId).asInt
-        )
-    }
-
-    inner class KeyboardBacklightListener : IKeyboardBacklightListener.Stub() {
-        override fun onBrightnessChanged(
-            deviceId: Int,
-            state: IKeyboardBacklightState,
-            isTriggeredByKeyPress: Boolean
-        ) {
-            lastBacklightState = KeyboardBacklightState(
-                deviceId,
-                state.brightnessLevel,
-                state.maxBrightnessLevel,
-                isTriggeredByKeyPress
-            )
-        }
-    }
-
-    private fun incrementKeyboardBacklight(deviceId: Int) {
-        keyboardBacklightController.incrementKeyboardBacklight(deviceId)
-        keyboardBacklightController.notifyUserActivity()
-        testLooper.dispatchAll()
-    }
-
-    private fun decrementKeyboardBacklight(deviceId: Int) {
-        keyboardBacklightController.decrementKeyboardBacklight(deviceId)
-        keyboardBacklightController.notifyUserActivity()
-        testLooper.dispatchAll()
-    }
-
-    private fun sendAmbientBacklightValue(brightnessValue: Int) {
-        keyboardBacklightController.handleAmbientLightValueChanged(brightnessValue)
-        keyboardBacklightController.notifyUserActivity()
-        testLooper.dispatchAll()
-    }
-
-    class KeyboardBacklightState(
-        val deviceId: Int,
-        val brightnessLevel: Int,
-        val maxBrightnessLevel: Int,
-        val isTriggeredByKeyPress: Boolean
-    )
-
-    private inner class KeyboardBacklightFlags constructor(
-        animationEnabled: Boolean,
-        customLevelsEnabled: Boolean,
-        ambientControlEnabled: Boolean
-    ) : AutoCloseable {
-        init {
-            InputFeatureFlagProvider.setKeyboardBacklightAnimationEnabled(animationEnabled)
-            InputFeatureFlagProvider.setKeyboardBacklightCustomLevelsEnabled(customLevelsEnabled)
-            InputFeatureFlagProvider
-                .setAmbientKeyboardBacklightControlEnabled(ambientControlEnabled)
-        }
-
-        override fun close() {
-            InputFeatureFlagProvider.clearOverrides()
-        }
-    }
-
-    private inner class FakeAnimatorFactory : KeyboardBacklightController.AnimatorFactory {
-        override fun makeIntAnimator(from: Int, to: Int): ValueAnimator {
-            lastAnimationValues[0] = from
-            lastAnimationValues[1] = to
-            return ValueAnimator.ofInt(from, to)
-        }
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/input/KeyboardLayoutManagerTests.kt b/services/tests/servicestests/src/com/android/server/input/KeyboardLayoutManagerTests.kt
deleted file mode 100644
index 55c45df..0000000
--- a/services/tests/servicestests/src/com/android/server/input/KeyboardLayoutManagerTests.kt
+++ /dev/null
@@ -1,903 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.input
-
-import android.content.Context
-import android.content.ContextWrapper
-import android.content.pm.ActivityInfo
-import android.content.pm.ApplicationInfo
-import android.content.pm.PackageManager
-import android.content.pm.ResolveInfo
-import android.content.pm.ServiceInfo
-import android.hardware.input.IInputManager
-import android.hardware.input.InputManager
-import android.hardware.input.InputManagerGlobal
-import android.hardware.input.KeyboardLayout
-import android.icu.util.ULocale
-import android.os.Bundle
-import android.os.test.TestLooper
-import android.platform.test.annotations.Presubmit
-import android.provider.Settings
-import android.view.InputDevice
-import android.view.inputmethod.InputMethodInfo
-import android.view.inputmethod.InputMethodSubtype
-import androidx.test.core.R
-import androidx.test.core.app.ApplicationProvider
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertNotEquals
-import org.junit.Assert.assertNull
-import org.junit.Assert.assertTrue
-import org.junit.Assert.assertThrows
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.mockito.Mock
-import org.mockito.Mockito
-import org.mockito.junit.MockitoJUnit
-import java.io.FileNotFoundException
-import java.io.FileOutputStream
-import java.io.IOException
-import java.io.InputStream
-
-private fun createKeyboard(
-    deviceId: Int,
-    vendorId: Int,
-    productId: Int,
-    languageTag: String,
-    layoutType: String
-): InputDevice =
-    InputDevice.Builder()
-        .setId(deviceId)
-        .setName("Device $deviceId")
-        .setDescriptor("descriptor $deviceId")
-        .setSources(InputDevice.SOURCE_KEYBOARD)
-        .setKeyboardType(InputDevice.KEYBOARD_TYPE_ALPHABETIC)
-        .setExternal(true)
-        .setVendorId(vendorId)
-        .setProductId(productId)
-        .setKeyboardLanguageTag(languageTag)
-        .setKeyboardLayoutType(layoutType)
-        .build()
-
-/**
- * Tests for {@link Default UI} and {@link New UI}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:KeyboardLayoutManagerTests
- */
-@Presubmit
-class KeyboardLayoutManagerTests {
-    companion object {
-        const val DEVICE_ID = 1
-        const val VENDOR_SPECIFIC_DEVICE_ID = 2
-        const val ENGLISH_DVORAK_DEVICE_ID = 3
-        const val ENGLISH_QWERTY_DEVICE_ID = 4
-        const val DEFAULT_VENDOR_ID = 123
-        const val DEFAULT_PRODUCT_ID = 456
-        const val USER_ID = 4
-        const val IME_ID = "ime_id"
-        const val PACKAGE_NAME = "KeyboardLayoutManagerTests"
-        const val RECEIVER_NAME = "DummyReceiver"
-        private const val ENGLISH_US_LAYOUT_NAME = "keyboard_layout_english_us"
-        private const val ENGLISH_UK_LAYOUT_NAME = "keyboard_layout_english_uk"
-        private const val VENDOR_SPECIFIC_LAYOUT_NAME = "keyboard_layout_vendorId:1,productId:1"
-    }
-
-    private val ENGLISH_US_LAYOUT_DESCRIPTOR = createLayoutDescriptor(ENGLISH_US_LAYOUT_NAME)
-    private val ENGLISH_UK_LAYOUT_DESCRIPTOR = createLayoutDescriptor(ENGLISH_UK_LAYOUT_NAME)
-    private val VENDOR_SPECIFIC_LAYOUT_DESCRIPTOR =
-        createLayoutDescriptor(VENDOR_SPECIFIC_LAYOUT_NAME)
-
-    @get:Rule
-    val rule = MockitoJUnit.rule()!!
-
-    @Mock
-    private lateinit var iInputManager: IInputManager
-
-    @Mock
-    private lateinit var native: NativeInputManagerService
-
-    @Mock
-    private lateinit var packageManager: PackageManager
-    private lateinit var keyboardLayoutManager: KeyboardLayoutManager
-
-    private lateinit var imeInfo: InputMethodInfo
-    private var nextImeSubtypeId = 0
-    private lateinit var context: Context
-    private lateinit var dataStore: PersistentDataStore
-    private lateinit var testLooper: TestLooper
-
-    // Devices
-    private lateinit var keyboardDevice: InputDevice
-    private lateinit var vendorSpecificKeyboardDevice: InputDevice
-    private lateinit var englishDvorakKeyboardDevice: InputDevice
-    private lateinit var englishQwertyKeyboardDevice: InputDevice
-
-    @Before
-    fun setup() {
-        context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
-        dataStore = PersistentDataStore(object : PersistentDataStore.Injector() {
-            override fun openRead(): InputStream? {
-                throw FileNotFoundException()
-            }
-
-            override fun startWrite(): FileOutputStream? {
-                throw IOException()
-            }
-
-            override fun finishWrite(fos: FileOutputStream?, success: Boolean) {}
-        })
-        testLooper = TestLooper()
-        keyboardLayoutManager = KeyboardLayoutManager(context, native, dataStore, testLooper.looper)
-        setupInputDevices()
-        setupBroadcastReceiver()
-        setupIme()
-    }
-
-    private fun setupInputDevices() {
-        InputManagerGlobal.resetInstance(iInputManager)
-        val inputManager = InputManager(context)
-        Mockito.`when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE)))
-            .thenReturn(inputManager)
-
-        keyboardDevice = createKeyboard(DEVICE_ID, DEFAULT_VENDOR_ID, DEFAULT_PRODUCT_ID, "", "")
-        vendorSpecificKeyboardDevice = createKeyboard(VENDOR_SPECIFIC_DEVICE_ID, 1, 1, "", "")
-        englishDvorakKeyboardDevice = createKeyboard(ENGLISH_DVORAK_DEVICE_ID, DEFAULT_VENDOR_ID,
-                DEFAULT_PRODUCT_ID, "en", "dvorak")
-        englishQwertyKeyboardDevice = createKeyboard(ENGLISH_QWERTY_DEVICE_ID, DEFAULT_VENDOR_ID,
-                DEFAULT_PRODUCT_ID, "en", "qwerty")
-        Mockito.`when`(iInputManager.inputDeviceIds)
-            .thenReturn(intArrayOf(
-                DEVICE_ID,
-                VENDOR_SPECIFIC_DEVICE_ID,
-                ENGLISH_DVORAK_DEVICE_ID,
-                ENGLISH_QWERTY_DEVICE_ID
-            ))
-        Mockito.`when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardDevice)
-        Mockito.`when`(iInputManager.getInputDevice(VENDOR_SPECIFIC_DEVICE_ID))
-            .thenReturn(vendorSpecificKeyboardDevice)
-        Mockito.`when`(iInputManager.getInputDevice(ENGLISH_DVORAK_DEVICE_ID))
-            .thenReturn(englishDvorakKeyboardDevice)
-        Mockito.`when`(iInputManager.getInputDevice(ENGLISH_QWERTY_DEVICE_ID))
-                .thenReturn(englishQwertyKeyboardDevice)
-    }
-
-    private fun setupBroadcastReceiver() {
-        Mockito.`when`(context.packageManager).thenReturn(packageManager)
-
-        val info = createMockReceiver()
-        Mockito.`when`(packageManager.queryBroadcastReceiversAsUser(Mockito.any(), Mockito.anyInt(),
-                Mockito.anyInt())).thenReturn(listOf(info))
-        Mockito.`when`(packageManager.getReceiverInfo(Mockito.any(), Mockito.anyInt()))
-            .thenReturn(info.activityInfo)
-
-        val resources = context.resources
-        Mockito.`when`(
-            packageManager.getResourcesForApplication(
-                Mockito.any(
-                    ApplicationInfo::class.java
-                )
-            )
-        ).thenReturn(resources)
-    }
-
-    private fun setupIme() {
-        imeInfo = InputMethodInfo(PACKAGE_NAME, RECEIVER_NAME, "", "", 0)
-    }
-
-    @Test
-    fun testDefaultUi_getKeyboardLayouts() {
-        NewSettingsApiFlag(false).use {
-            val keyboardLayouts = keyboardLayoutManager.keyboardLayouts
-            assertNotEquals(
-                "Default UI: Keyboard layout API should not return empty array",
-                0,
-                keyboardLayouts.size
-            )
-            assertTrue(
-                "Default UI: Keyboard layout API should provide English(US) layout",
-                hasLayout(keyboardLayouts, ENGLISH_US_LAYOUT_DESCRIPTOR)
-            )
-        }
-    }
-
-    @Test
-    fun testNewUi_getKeyboardLayouts() {
-        NewSettingsApiFlag(true).use {
-            val keyboardLayouts = keyboardLayoutManager.keyboardLayouts
-            assertNotEquals(
-                "New UI: Keyboard layout API should not return empty array",
-                0,
-                keyboardLayouts.size
-            )
-            assertTrue(
-                "New UI: Keyboard layout API should provide English(US) layout",
-                hasLayout(keyboardLayouts, ENGLISH_US_LAYOUT_DESCRIPTOR)
-            )
-        }
-    }
-
-    @Test
-    fun testDefaultUi_getKeyboardLayoutsForInputDevice() {
-        NewSettingsApiFlag(false).use {
-            val keyboardLayouts =
-                keyboardLayoutManager.getKeyboardLayoutsForInputDevice(keyboardDevice.identifier)
-            assertNotEquals(
-                "Default UI: getKeyboardLayoutsForInputDevice API should not return empty array",
-                0,
-                keyboardLayouts.size
-            )
-            assertTrue(
-                "Default UI: getKeyboardLayoutsForInputDevice API should provide English(US) " +
-                        "layout",
-                hasLayout(keyboardLayouts, ENGLISH_US_LAYOUT_DESCRIPTOR)
-            )
-
-            val vendorSpecificKeyboardLayouts =
-                keyboardLayoutManager.getKeyboardLayoutsForInputDevice(
-                    vendorSpecificKeyboardDevice.identifier
-                )
-            assertEquals(
-                "Default UI: getKeyboardLayoutsForInputDevice API should return only vendor " +
-                        "specific layout",
-                1,
-                vendorSpecificKeyboardLayouts.size
-            )
-            assertEquals(
-                "Default UI: getKeyboardLayoutsForInputDevice API should return vendor specific " +
-                        "layout",
-                VENDOR_SPECIFIC_LAYOUT_DESCRIPTOR,
-                vendorSpecificKeyboardLayouts[0].descriptor
-            )
-        }
-    }
-
-    @Test
-    fun testNewUi_getKeyboardLayoutsForInputDevice() {
-        NewSettingsApiFlag(true).use {
-            val keyboardLayouts = keyboardLayoutManager.keyboardLayouts
-            assertNotEquals(
-                    "New UI: getKeyboardLayoutsForInputDevice API should not return empty array",
-                    0,
-                    keyboardLayouts.size
-            )
-            assertTrue(
-                    "New UI: getKeyboardLayoutsForInputDevice API should provide English(US) " +
-                            "layout",
-                    hasLayout(keyboardLayouts, ENGLISH_US_LAYOUT_DESCRIPTOR)
-            )
-        }
-    }
-
-    @Test
-    fun testDefaultUi_getSetCurrentKeyboardLayoutForInputDevice() {
-        NewSettingsApiFlag(false).use {
-            assertNull(
-                "Default UI: getCurrentKeyboardLayoutForInputDevice API should return null if " +
-                        "nothing was set",
-                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier
-                )
-            )
-
-            keyboardLayoutManager.setCurrentKeyboardLayoutForInputDevice(
-                keyboardDevice.identifier,
-                ENGLISH_US_LAYOUT_DESCRIPTOR
-            )
-            val keyboardLayout =
-                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier
-                )
-            assertEquals(
-                "Default UI: getCurrentKeyboardLayoutForInputDevice API should return the set " +
-                        "layout",
-                ENGLISH_US_LAYOUT_DESCRIPTOR,
-                keyboardLayout
-            )
-        }
-    }
-
-    @Test
-    fun testNewUi_getSetCurrentKeyboardLayoutForInputDevice() {
-        NewSettingsApiFlag(true).use {
-            keyboardLayoutManager.setCurrentKeyboardLayoutForInputDevice(
-                keyboardDevice.identifier,
-                ENGLISH_US_LAYOUT_DESCRIPTOR
-            )
-            assertNull(
-                "New UI: getCurrentKeyboardLayoutForInputDevice API should always return null " +
-                        "even after setCurrentKeyboardLayoutForInputDevice",
-                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier
-                )
-            )
-        }
-    }
-
-    @Test
-    fun testDefaultUi_getEnabledKeyboardLayoutsForInputDevice() {
-        NewSettingsApiFlag(false).use {
-            keyboardLayoutManager.addKeyboardLayoutForInputDevice(
-                keyboardDevice.identifier, ENGLISH_US_LAYOUT_DESCRIPTOR
-            )
-
-            val keyboardLayouts =
-                keyboardLayoutManager.getEnabledKeyboardLayoutsForInputDevice(
-                    keyboardDevice.identifier
-                )
-            assertEquals(
-                "Default UI: getEnabledKeyboardLayoutsForInputDevice API should return added " +
-                        "layout",
-                1,
-                keyboardLayouts.size
-            )
-            assertEquals(
-                "Default UI: getEnabledKeyboardLayoutsForInputDevice API should return " +
-                        "English(US) layout",
-                ENGLISH_US_LAYOUT_DESCRIPTOR,
-                keyboardLayouts[0]
-            )
-            assertEquals(
-                "Default UI: getCurrentKeyboardLayoutForInputDevice API should return " +
-                        "English(US) layout (Auto select the first enabled layout)",
-                ENGLISH_US_LAYOUT_DESCRIPTOR,
-                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier
-                )
-            )
-
-            keyboardLayoutManager.removeKeyboardLayoutForInputDevice(
-                keyboardDevice.identifier, ENGLISH_US_LAYOUT_DESCRIPTOR
-            )
-            assertEquals(
-                "Default UI: getKeyboardLayoutsForInputDevice API should return 0 layouts",
-                0,
-                keyboardLayoutManager.getEnabledKeyboardLayoutsForInputDevice(
-                    keyboardDevice.identifier
-                ).size
-            )
-            assertNull(
-                "Default UI: getCurrentKeyboardLayoutForInputDevice API should return null after " +
-                        "the enabled layout is removed",
-                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier
-                )
-            )
-        }
-    }
-
-    @Test
-    fun testNewUi_getEnabledKeyboardLayoutsForInputDevice() {
-        NewSettingsApiFlag(true).use {
-            keyboardLayoutManager.addKeyboardLayoutForInputDevice(
-                keyboardDevice.identifier, ENGLISH_US_LAYOUT_DESCRIPTOR
-            )
-
-            assertEquals(
-                "New UI: getEnabledKeyboardLayoutsForInputDevice API should return always return " +
-                        "an empty array",
-                0,
-                keyboardLayoutManager.getEnabledKeyboardLayoutsForInputDevice(
-                    keyboardDevice.identifier
-                ).size
-            )
-            assertNull(
-                "New UI: getCurrentKeyboardLayoutForInputDevice API should always return null",
-                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier
-                )
-            )
-        }
-    }
-
-    @Test
-    fun testDefaultUi_switchKeyboardLayout() {
-        NewSettingsApiFlag(false).use {
-            keyboardLayoutManager.addKeyboardLayoutForInputDevice(
-                keyboardDevice.identifier, ENGLISH_US_LAYOUT_DESCRIPTOR
-            )
-            keyboardLayoutManager.addKeyboardLayoutForInputDevice(
-                keyboardDevice.identifier, ENGLISH_UK_LAYOUT_DESCRIPTOR
-            )
-            assertEquals(
-                "Default UI: getCurrentKeyboardLayoutForInputDevice API should return " +
-                        "English(US) layout",
-                ENGLISH_US_LAYOUT_DESCRIPTOR,
-                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier
-                )
-            )
-
-            keyboardLayoutManager.switchKeyboardLayout(DEVICE_ID, 1)
-
-            // Throws null pointer because trying to show toast using TestLooper
-            assertThrows(NullPointerException::class.java) { testLooper.dispatchAll() }
-            assertEquals("Default UI: getCurrentKeyboardLayoutForInputDevice API should return " +
-                    "English(UK) layout",
-                ENGLISH_UK_LAYOUT_DESCRIPTOR,
-                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier
-                )
-            )
-        }
-    }
-
-    @Test
-    fun testNewUi_switchKeyboardLayout() {
-        NewSettingsApiFlag(true).use {
-            keyboardLayoutManager.addKeyboardLayoutForInputDevice(
-                keyboardDevice.identifier, ENGLISH_US_LAYOUT_DESCRIPTOR
-            )
-            keyboardLayoutManager.addKeyboardLayoutForInputDevice(
-                keyboardDevice.identifier, ENGLISH_UK_LAYOUT_DESCRIPTOR
-            )
-
-            keyboardLayoutManager.switchKeyboardLayout(DEVICE_ID, 1)
-            testLooper.dispatchAll()
-
-            assertNull("New UI: getCurrentKeyboardLayoutForInputDevice API should always return " +
-                    "null",
-                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier
-                )
-            )
-        }
-    }
-
-    @Test
-    fun testDefaultUi_getKeyboardLayout() {
-        NewSettingsApiFlag(false).use {
-            val keyboardLayout =
-                keyboardLayoutManager.getKeyboardLayout(ENGLISH_US_LAYOUT_DESCRIPTOR)
-            assertEquals("Default UI: getKeyboardLayout API should return correct Layout from " +
-                    "available layouts",
-                ENGLISH_US_LAYOUT_DESCRIPTOR,
-                keyboardLayout!!.descriptor
-            )
-        }
-    }
-
-    @Test
-    fun testNewUi_getKeyboardLayout() {
-        NewSettingsApiFlag(true).use {
-            val keyboardLayout =
-                keyboardLayoutManager.getKeyboardLayout(ENGLISH_US_LAYOUT_DESCRIPTOR)
-            assertEquals("New UI: getKeyboardLayout API should return correct Layout from " +
-                    "available layouts",
-                ENGLISH_US_LAYOUT_DESCRIPTOR,
-                keyboardLayout!!.descriptor
-            )
-        }
-    }
-
-    @Test
-    fun testDefaultUi_getSetKeyboardLayoutForInputDevice_WithImeInfo() {
-        NewSettingsApiFlag(false).use {
-            val imeSubtype = createImeSubtype()
-            keyboardLayoutManager.setKeyboardLayoutForInputDevice(
-                keyboardDevice.identifier, USER_ID, imeInfo, imeSubtype,
-                ENGLISH_UK_LAYOUT_DESCRIPTOR
-            )
-            val keyboardLayout =
-                keyboardLayoutManager.getKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier, USER_ID, imeInfo, imeSubtype
-                )
-            assertNull(
-                "Default UI: getKeyboardLayoutForInputDevice API should always return null",
-                keyboardLayout
-            )
-        }
-    }
-
-    @Test
-    fun testNewUi_getSetKeyboardLayoutForInputDevice_withImeInfo() {
-        NewSettingsApiFlag(true).use {
-            val imeSubtype = createImeSubtype()
-
-            keyboardLayoutManager.setKeyboardLayoutForInputDevice(
-                keyboardDevice.identifier, USER_ID, imeInfo, imeSubtype,
-                ENGLISH_UK_LAYOUT_DESCRIPTOR
-            )
-            assertEquals(
-                "New UI: getKeyboardLayoutForInputDevice API should return the set layout",
-                ENGLISH_UK_LAYOUT_DESCRIPTOR,
-                keyboardLayoutManager.getKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier, USER_ID, imeInfo, imeSubtype
-                )
-            )
-
-            // This should replace previously set layout
-            keyboardLayoutManager.setKeyboardLayoutForInputDevice(
-                keyboardDevice.identifier, USER_ID, imeInfo, imeSubtype,
-                ENGLISH_US_LAYOUT_DESCRIPTOR
-            )
-            assertEquals(
-                "New UI: getKeyboardLayoutForInputDevice API should return the last set layout",
-                ENGLISH_US_LAYOUT_DESCRIPTOR,
-                keyboardLayoutManager.getKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier, USER_ID, imeInfo, imeSubtype
-                )
-            )
-        }
-    }
-
-    @Test
-    fun testDefaultUi_getKeyboardLayoutListForInputDevice() {
-        NewSettingsApiFlag(false).use {
-            val keyboardLayouts =
-                keyboardLayoutManager.getKeyboardLayoutListForInputDevice(
-                    keyboardDevice.identifier, USER_ID, imeInfo,
-                    createImeSubtype()
-                )
-            assertEquals("Default UI: getKeyboardLayoutListForInputDevice API should always " +
-                    "return empty array",
-                0,
-                keyboardLayouts.size
-            )
-        }
-    }
-
-    @Test
-    fun testNewUi_getKeyboardLayoutListForInputDevice() {
-        NewSettingsApiFlag(true).use {
-            // Check Layouts for "hi-Latn". It should return all 'Latn' keyboard layouts
-            var keyboardLayouts =
-                keyboardLayoutManager.getKeyboardLayoutListForInputDevice(
-                    keyboardDevice.identifier, USER_ID, imeInfo,
-                    createImeSubtypeForLanguageTag("hi-Latn")
-                )
-            assertNotEquals(
-                "New UI: getKeyboardLayoutListForInputDevice API should return the list of " +
-                        "supported layouts with matching script code",
-                0,
-                keyboardLayouts.size
-            )
-            assertTrue("New UI: getKeyboardLayoutListForInputDevice API should return a list " +
-                    "containing English(US) layout for hi-Latn",
-                containsLayout(keyboardLayouts, ENGLISH_US_LAYOUT_DESCRIPTOR)
-            )
-            assertTrue("New UI: getKeyboardLayoutListForInputDevice API should return a list " +
-                    "containing English(No script code) layout for hi-Latn",
-                containsLayout(
-                    keyboardLayouts,
-                    createLayoutDescriptor("keyboard_layout_english_without_script_code")
-                )
-            )
-
-            // Check Layouts for "hi" which by default uses 'Deva' script.
-            keyboardLayouts =
-                keyboardLayoutManager.getKeyboardLayoutListForInputDevice(
-                    keyboardDevice.identifier, USER_ID, imeInfo,
-                    createImeSubtypeForLanguageTag("hi")
-                )
-            assertEquals("New UI: getKeyboardLayoutListForInputDevice API should return empty " +
-                    "list if no supported layouts available",
-                0,
-                keyboardLayouts.size
-            )
-
-            // If user manually selected some layout, always provide it in the layout list
-            val imeSubtype = createImeSubtypeForLanguageTag("hi")
-            keyboardLayoutManager.setKeyboardLayoutForInputDevice(
-                keyboardDevice.identifier, USER_ID, imeInfo, imeSubtype,
-                ENGLISH_US_LAYOUT_DESCRIPTOR
-            )
-            keyboardLayouts =
-                keyboardLayoutManager.getKeyboardLayoutListForInputDevice(
-                    keyboardDevice.identifier, USER_ID, imeInfo,
-                    imeSubtype
-                )
-            assertEquals("New UI: getKeyboardLayoutListForInputDevice API should return user " +
-                    "selected layout even if the script is incompatible with IME",
-                    1,
-                keyboardLayouts.size
-            )
-
-            // Special case Japanese: UScript ignores provided script code for certain language tags
-            // Should manually match provided script codes and then rely on Uscript to derive
-            // script from language tags and match those.
-            keyboardLayouts =
-                keyboardLayoutManager.getKeyboardLayoutListForInputDevice(
-                        keyboardDevice.identifier, USER_ID, imeInfo,
-                        createImeSubtypeForLanguageTag("ja-Latn-JP")
-                )
-            assertNotEquals(
-                "New UI: getKeyboardLayoutListForInputDevice API should return the list of " +
-                        "supported layouts with matching script code for ja-Latn-JP",
-                0,
-                keyboardLayouts.size
-            )
-            assertTrue("New UI: getKeyboardLayoutListForInputDevice API should return a list " +
-                    "containing English(US) layout for ja-Latn-JP",
-                containsLayout(keyboardLayouts, ENGLISH_US_LAYOUT_DESCRIPTOR)
-            )
-            assertTrue("New UI: getKeyboardLayoutListForInputDevice API should return a list " +
-                    "containing English(No script code) layout for ja-Latn-JP",
-                containsLayout(
-                    keyboardLayouts,
-                    createLayoutDescriptor("keyboard_layout_english_without_script_code")
-                )
-            )
-
-            // If script code not explicitly provided for Japanese should rely on Uscript to find
-            // derived script code and hence no suitable layout will be found.
-            keyboardLayouts =
-                keyboardLayoutManager.getKeyboardLayoutListForInputDevice(
-                        keyboardDevice.identifier, USER_ID, imeInfo,
-                        createImeSubtypeForLanguageTag("ja-JP")
-                )
-            assertEquals(
-                "New UI: getKeyboardLayoutListForInputDevice API should return empty list of " +
-                        "supported layouts with matching script code for ja-JP",
-                0,
-                keyboardLayouts.size
-            )
-
-            // If IME doesn't have a corresponding language tag, then should show all available
-            // layouts no matter the script code.
-            keyboardLayouts =
-                keyboardLayoutManager.getKeyboardLayoutListForInputDevice(
-                    keyboardDevice.identifier, USER_ID, imeInfo, null
-                )
-            assertNotEquals(
-                "New UI: getKeyboardLayoutListForInputDevice API should return all layouts if" +
-                    "language tag or subtype not provided",
-                0,
-                keyboardLayouts.size
-            )
-            assertTrue("New UI: getKeyboardLayoutListForInputDevice API should contain Latin " +
-                "layouts if language tag or subtype not provided",
-                containsLayout(keyboardLayouts, ENGLISH_US_LAYOUT_DESCRIPTOR)
-            )
-            assertTrue("New UI: getKeyboardLayoutListForInputDevice API should contain Cyrillic " +
-                "layouts if language tag or subtype not provided",
-                containsLayout(
-                    keyboardLayouts,
-                    createLayoutDescriptor("keyboard_layout_russian")
-                )
-            )
-        }
-    }
-
-    @Test
-    fun testNewUi_getDefaultKeyboardLayoutForInputDevice_withImeLanguageTag() {
-        NewSettingsApiFlag(true).use {
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTag("en-US"),
-                ENGLISH_US_LAYOUT_DESCRIPTOR
-            )
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTag("en-GB"),
-                ENGLISH_UK_LAYOUT_DESCRIPTOR
-            )
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTag("de"),
-                createLayoutDescriptor("keyboard_layout_german")
-            )
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTag("fr-FR"),
-                createLayoutDescriptor("keyboard_layout_french")
-            )
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTag("ru"),
-                createLayoutDescriptor("keyboard_layout_russian")
-            )
-            assertNull(
-                "New UI: getDefaultKeyboardLayoutForInputDevice should return null when no " +
-                        "layout available",
-                keyboardLayoutManager.getKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier, USER_ID, imeInfo,
-                    createImeSubtypeForLanguageTag("it")
-                )
-            )
-            assertNull(
-                "New UI: getDefaultKeyboardLayoutForInputDevice should return null when no " +
-                        "layout for script code is available",
-                keyboardLayoutManager.getKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier, USER_ID, imeInfo,
-                    createImeSubtypeForLanguageTag("en-Deva")
-                )
-            )
-        }
-    }
-
-    @Test
-    fun testNewUi_getDefaultKeyboardLayoutForInputDevice_withImeLanguageTagAndLayoutType() {
-        NewSettingsApiFlag(true).use {
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTagAndLayoutType("en-US", "qwerty"),
-                ENGLISH_US_LAYOUT_DESCRIPTOR
-            )
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTagAndLayoutType("en-US", "dvorak"),
-                createLayoutDescriptor("keyboard_layout_english_us_dvorak")
-            )
-            // Try to match layout type even if country doesn't match
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTagAndLayoutType("en-GB", "dvorak"),
-                createLayoutDescriptor("keyboard_layout_english_us_dvorak")
-            )
-            // Choose layout based on layout type priority, if layout type is not provided by IME
-            // (Qwerty > Dvorak > Extended)
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTagAndLayoutType("en-US", ""),
-                ENGLISH_US_LAYOUT_DESCRIPTOR
-            )
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTagAndLayoutType("en-GB", "qwerty"),
-                ENGLISH_UK_LAYOUT_DESCRIPTOR
-            )
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTagAndLayoutType("de", "qwertz"),
-                createLayoutDescriptor("keyboard_layout_german")
-            )
-            // Wrong layout type should match with language if provided layout type not available
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTagAndLayoutType("de", "qwerty"),
-                createLayoutDescriptor("keyboard_layout_german")
-            )
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTagAndLayoutType("fr-FR", "azerty"),
-                createLayoutDescriptor("keyboard_layout_french")
-            )
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTagAndLayoutType("ru", "qwerty"),
-                createLayoutDescriptor("keyboard_layout_russian_qwerty")
-            )
-            // If layout type is empty then prioritize KCM with empty layout type
-            assertCorrectLayout(
-                keyboardDevice,
-                createImeSubtypeForLanguageTagAndLayoutType("ru", ""),
-                createLayoutDescriptor("keyboard_layout_russian")
-            )
-            assertNull("New UI: getDefaultKeyboardLayoutForInputDevice should return null when " +
-                    "no layout for script code is available",
-                keyboardLayoutManager.getKeyboardLayoutForInputDevice(
-                    keyboardDevice.identifier, USER_ID, imeInfo,
-                    createImeSubtypeForLanguageTagAndLayoutType("en-Deva-US", "")
-                )
-            )
-        }
-    }
-
-    @Test
-    fun testNewUi_getDefaultKeyboardLayoutForInputDevice_withHwLanguageTagAndLayoutType() {
-        NewSettingsApiFlag(true).use {
-            val frenchSubtype = createImeSubtypeForLanguageTagAndLayoutType("fr", "azerty")
-            // Should return English dvorak even if IME current layout is French, since HW says the
-            // keyboard is a Dvorak keyboard
-            assertCorrectLayout(
-                englishDvorakKeyboardDevice,
-                frenchSubtype,
-                createLayoutDescriptor("keyboard_layout_english_us_dvorak")
-            )
-
-            // Back to back changing HW keyboards with same product and vendor ID but different
-            // language and layout type should configure the layouts correctly.
-            assertCorrectLayout(
-                englishQwertyKeyboardDevice,
-                frenchSubtype,
-                createLayoutDescriptor("keyboard_layout_english_us")
-            )
-
-            // Fallback to IME information if the HW provided layout script is incompatible with the
-            // provided IME subtype
-            assertCorrectLayout(
-                englishDvorakKeyboardDevice,
-                createImeSubtypeForLanguageTagAndLayoutType("ru", ""),
-                createLayoutDescriptor("keyboard_layout_russian")
-            )
-        }
-    }
-
-    private fun assertCorrectLayout(
-        device: InputDevice,
-        imeSubtype: InputMethodSubtype,
-        expectedLayout: String
-    ) {
-        assertEquals(
-            "New UI: getDefaultKeyboardLayoutForInputDevice should return $expectedLayout",
-            expectedLayout,
-            keyboardLayoutManager.getKeyboardLayoutForInputDevice(
-                device.identifier, USER_ID, imeInfo, imeSubtype
-            )
-        )
-    }
-
-    private fun createImeSubtype(): InputMethodSubtype =
-        InputMethodSubtype.InputMethodSubtypeBuilder().setSubtypeId(nextImeSubtypeId++).build()
-
-    private fun createImeSubtypeForLanguageTag(languageTag: String): InputMethodSubtype =
-        InputMethodSubtype.InputMethodSubtypeBuilder().setSubtypeId(nextImeSubtypeId++)
-            .setLanguageTag(languageTag).build()
-
-    private fun createImeSubtypeForLanguageTagAndLayoutType(
-        languageTag: String,
-        layoutType: String
-    ): InputMethodSubtype =
-        InputMethodSubtype.InputMethodSubtypeBuilder().setSubtypeId(nextImeSubtypeId++)
-            .setPhysicalKeyboardHint(ULocale.forLanguageTag(languageTag), layoutType).build()
-
-    private fun hasLayout(layoutList: Array<KeyboardLayout>, layoutDesc: String): Boolean {
-        for (kl in layoutList) {
-            if (kl.descriptor == layoutDesc) {
-                return true
-            }
-        }
-        return false
-    }
-
-    private fun createLayoutDescriptor(keyboardName: String): String =
-        "$PACKAGE_NAME/$RECEIVER_NAME/$keyboardName"
-
-    private fun containsLayout(layoutList: Array<KeyboardLayout>, layoutDesc: String): Boolean {
-        for (kl in layoutList) {
-            if (kl.descriptor.equals(layoutDesc)) {
-                return true
-            }
-        }
-        return false
-    }
-
-    private fun createMockReceiver(): ResolveInfo {
-        val info = ResolveInfo()
-        info.activityInfo = ActivityInfo()
-        info.activityInfo.packageName = PACKAGE_NAME
-        info.activityInfo.name = RECEIVER_NAME
-        info.activityInfo.applicationInfo = ApplicationInfo()
-        info.activityInfo.metaData = Bundle()
-        info.activityInfo.metaData.putInt(
-            InputManager.META_DATA_KEYBOARD_LAYOUTS,
-            R.xml.keyboard_layouts
-        )
-        info.serviceInfo = ServiceInfo()
-        info.serviceInfo.packageName = PACKAGE_NAME
-        info.serviceInfo.name = RECEIVER_NAME
-        return info
-    }
-
-    private inner class NewSettingsApiFlag constructor(enabled: Boolean) : AutoCloseable {
-        init {
-            Settings.Global.putString(
-                context.contentResolver,
-                "settings_new_keyboard_ui", enabled.toString()
-            )
-        }
-
-        override fun close() {
-            Settings.Global.putString(
-                context.contentResolver,
-                "settings_new_keyboard_ui",
-                ""
-            )
-        }
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/input/KeyboardMetricsCollectorTests.kt b/services/tests/servicestests/src/com/android/server/input/KeyboardMetricsCollectorTests.kt
deleted file mode 100644
index 84af9dd..0000000
--- a/services/tests/servicestests/src/com/android/server/input/KeyboardMetricsCollectorTests.kt
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.input
-
-import android.hardware.input.KeyboardLayout
-import android.icu.util.ULocale
-import android.platform.test.annotations.Presubmit
-import android.view.InputDevice
-import android.view.inputmethod.InputMethodSubtype
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertThrows
-import org.junit.Assert.assertTrue
-import org.junit.Test
-
-private fun createKeyboard(
-    deviceId: Int,
-    vendorId: Int,
-    productId: Int,
-    languageTag: String?,
-    layoutType: String?
-): InputDevice =
-    InputDevice.Builder()
-        .setId(deviceId)
-        .setName("Device $deviceId")
-        .setDescriptor("descriptor $deviceId")
-        .setSources(InputDevice.SOURCE_KEYBOARD)
-        .setKeyboardType(InputDevice.KEYBOARD_TYPE_ALPHABETIC)
-        .setExternal(true)
-        .setVendorId(vendorId)
-        .setProductId(productId)
-        .setKeyboardLanguageTag(languageTag)
-        .setKeyboardLayoutType(layoutType)
-        .build()
-
-private fun createImeSubtype(
-    imeSubtypeId: Int,
-    languageTag: ULocale?,
-    layoutType: String
-): InputMethodSubtype =
-    InputMethodSubtype.InputMethodSubtypeBuilder().setSubtypeId(imeSubtypeId)
-        .setPhysicalKeyboardHint(languageTag, layoutType).build()
-
-/**
- * Tests for {@link KeyboardMetricsCollector}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:KeyboardMetricsCollectorTests
- */
-@Presubmit
-class KeyboardMetricsCollectorTests {
-
-    companion object {
-        const val DEVICE_ID = 1
-        const val DEFAULT_VENDOR_ID = 123
-        const val DEFAULT_PRODUCT_ID = 456
-    }
-
-    @Test
-    fun testCreateKeyboardConfigurationEvent_throwsExceptionWithoutAnyLayoutConfiguration() {
-        assertThrows(IllegalStateException::class.java) {
-            KeyboardMetricsCollector.KeyboardConfigurationEvent.Builder(
-                createKeyboard(
-                    DEVICE_ID,
-                    DEFAULT_VENDOR_ID,
-                    DEFAULT_PRODUCT_ID,
-                    null,
-                    null
-                )
-            ).build()
-        }
-    }
-
-    @Test
-    fun testCreateKeyboardConfigurationEvent_throwsExceptionWithInvalidLayoutSelectionCriteria() {
-        assertThrows(IllegalStateException::class.java) {
-            KeyboardMetricsCollector.KeyboardConfigurationEvent.Builder(
-                createKeyboard(
-                    DEVICE_ID,
-                    DEFAULT_VENDOR_ID,
-                    DEFAULT_PRODUCT_ID,
-                    null,
-                    null
-                )
-            ).addLayoutSelection(createImeSubtype(1, ULocale.forLanguageTag("en-US"), "qwerty"),
-             null, 123).build()
-        }
-    }
-
-    @Test
-    fun testCreateKeyboardConfigurationEvent_withMultipleConfigurations() {
-        val builder = KeyboardMetricsCollector.KeyboardConfigurationEvent.Builder(
-            createKeyboard(
-                DEVICE_ID,
-                DEFAULT_VENDOR_ID,
-                DEFAULT_PRODUCT_ID,
-                "de-CH",
-                "qwertz"
-            )
-        )
-        val event = builder.addLayoutSelection(
-            createImeSubtype(1, ULocale.forLanguageTag("en-US"), "qwerty"),
-            KeyboardLayout(null, "English(US)(Qwerty)", null, 0, null, 0, 0, 0),
-            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_VIRTUAL_KEYBOARD
-        ).addLayoutSelection(
-            createImeSubtype(2, ULocale.forLanguageTag("en-US"), "azerty"),
-            null, // Default layout type
-            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_USER
-        ).addLayoutSelection(
-            createImeSubtype(3, ULocale.forLanguageTag("en-US"), "qwerty"),
-            KeyboardLayout(null, "German", null, 0, null, 0, 0, 0),
-            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_DEVICE
-        ).setIsFirstTimeConfiguration(true).build()
-
-        assertEquals(
-            "KeyboardConfigurationEvent should pick vendor ID from provided InputDevice",
-            DEFAULT_VENDOR_ID,
-            event.vendorId
-        )
-        assertEquals(
-            "KeyboardConfigurationEvent should pick product ID from provided InputDevice",
-            DEFAULT_PRODUCT_ID,
-            event.productId
-        )
-        assertTrue(event.isFirstConfiguration)
-
-        assertEquals(
-            "KeyboardConfigurationEvent should contain 3 configurations provided",
-            3,
-            event.layoutConfigurations.size
-        )
-        assertExpectedLayoutConfiguration(
-            event.layoutConfigurations[0],
-            "de-CH",
-            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("qwertz"),
-            "English(US)(Qwerty)",
-            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_VIRTUAL_KEYBOARD,
-            "en-US",
-            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("qwerty"),
-        )
-        assertExpectedLayoutConfiguration(
-            event.layoutConfigurations[1],
-            "de-CH",
-            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("qwertz"),
-            KeyboardMetricsCollector.DEFAULT_LAYOUT_NAME,
-            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_USER,
-            "en-US",
-            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("azerty"),
-        )
-        assertExpectedLayoutConfiguration(
-            event.layoutConfigurations[2],
-            "de-CH",
-            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("qwertz"),
-            "German",
-            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_DEVICE,
-            "en-US",
-            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("qwerty"),
-        )
-    }
-
-    @Test
-    fun testCreateKeyboardConfigurationEvent_withDefaultLanguageTag() {
-        val builder = KeyboardMetricsCollector.KeyboardConfigurationEvent.Builder(
-            createKeyboard(
-                DEVICE_ID,
-                DEFAULT_VENDOR_ID,
-                DEFAULT_PRODUCT_ID,
-                "und", // Undefined language tag
-                "azerty"
-            )
-        )
-        val event = builder.addLayoutSelection(
-            createImeSubtype(4, null, "qwerty"), // Default language tag
-            KeyboardLayout(null, "German", null, 0, null, 0, 0, 0),
-            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_DEVICE
-        ).build()
-
-        assertExpectedLayoutConfiguration(
-            event.layoutConfigurations[0],
-            KeyboardMetricsCollector.DEFAULT_LANGUAGE_TAG,
-            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("azerty"),
-            "German",
-            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_DEVICE,
-            KeyboardMetricsCollector.DEFAULT_LANGUAGE_TAG,
-            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("qwerty"),
-        )
-    }
-
-    private fun assertExpectedLayoutConfiguration(
-        configuration: KeyboardMetricsCollector.LayoutConfiguration,
-        expectedKeyboardLanguageTag: String,
-        expectedKeyboardLayoutType: Int,
-        expectedSelectedLayout: String,
-        expectedLayoutSelectionCriteria: Int,
-        expectedImeLanguageTag: String,
-        expectedImeLayoutType: Int
-    ) {
-        assertEquals(expectedKeyboardLanguageTag, configuration.keyboardLanguageTag)
-        assertEquals(expectedKeyboardLayoutType, configuration.keyboardLayoutType)
-        assertEquals(expectedSelectedLayout, configuration.keyboardLayoutName)
-        assertEquals(expectedLayoutSelectionCriteria, configuration.layoutSelectionCriteria)
-        assertEquals(expectedImeLanguageTag, configuration.imeLanguageTag)
-        assertEquals(expectedImeLayoutType, configuration.imeLayoutType)
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/input/OWNERS b/services/tests/servicestests/src/com/android/server/input/OWNERS
deleted file mode 100644
index 6e9aa1d..0000000
--- a/services/tests/servicestests/src/com/android/server/input/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-include /services/core/java/com/android/server/input/OWNERS
-
diff --git a/services/tests/servicestests/src/com/android/server/inputmethod/OWNERS b/services/tests/servicestests/src/com/android/server/inputmethod/OWNERS
index 5deb2ce..cbd94ba 100644
--- a/services/tests/servicestests/src/com/android/server/inputmethod/OWNERS
+++ b/services/tests/servicestests/src/com/android/server/inputmethod/OWNERS
@@ -1 +1,2 @@
+# Bug component: 34867
 include /core/java/android/view/inputmethod/OWNERS
diff --git a/services/tests/servicestests/src/com/android/server/job/BiasSchedulingTest.java b/services/tests/servicestests/src/com/android/server/job/BiasSchedulingTest.java
index 5e7dc33..1726ec1 100644
--- a/services/tests/servicestests/src/com/android/server/job/BiasSchedulingTest.java
+++ b/services/tests/servicestests/src/com/android/server/job/BiasSchedulingTest.java
@@ -24,6 +24,8 @@
 import android.os.DeviceIdleManager;
 import android.test.AndroidTestCase;
 
+import androidx.test.filters.FlakyTest;
+
 import com.android.server.job.MockBiasJobService.TestEnvironment;
 import com.android.server.job.MockBiasJobService.TestEnvironment.Event;
 
@@ -58,6 +60,7 @@
         super.tearDown();
     }
 
+    @FlakyTest(bugId = 293589359)
     public void testLowerBiasJobPreempted() throws Exception {
         for (int i = 0; i < JobConcurrencyManager.MAX_CONCURRENCY_LIMIT; ++i) {
             JobInfo job = new JobInfo.Builder(100 + i, sJobServiceComponent)
diff --git a/services/tests/servicestests/src/com/android/server/lights/LightsServiceTest.java b/services/tests/servicestests/src/com/android/server/lights/LightsServiceTest.java
index 75aacd1..392dcdb 100644
--- a/services/tests/servicestests/src/com/android/server/lights/LightsServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/lights/LightsServiceTest.java
@@ -24,6 +24,10 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
+
+import android.Manifest;
 import android.content.Context;
 import android.hardware.light.HwLight;
 import android.hardware.light.HwLightState;
@@ -33,6 +37,8 @@
 import android.hardware.lights.LightsManager;
 import android.hardware.lights.SystemLightsManager;
 import android.os.Looper;
+import android.os.PermissionEnforcer;
+import android.os.test.FakePermissionEnforcer;
 
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
@@ -92,6 +98,13 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        // The AIDL stub will use PermissionEnforcer to check permission from the caller.
+        FakePermissionEnforcer permissionEnforcer = new FakePermissionEnforcer();
+        permissionEnforcer.grant(Manifest.permission.CONTROL_DEVICE_LIGHTS);
+        doReturn(Context.PERMISSION_ENFORCER_SERVICE).when(mContext).getSystemServiceName(
+                eq(PermissionEnforcer.class));
+        doReturn(permissionEnforcer).when(mContext).getSystemService(
+                eq(Context.PERMISSION_ENFORCER_SERVICE));
     }
 
     @Test
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java
index 60a033f..5a62d92 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsServiceTests.java
@@ -77,6 +77,26 @@
         testSetCredentialFailsWithoutLockScreen(PRIMARY_USER_ID, newPassword("password"));
     }
 
+    @Test(expected = IllegalArgumentException.class)
+    public void testSetTooShortPatternFails() throws RemoteException {
+        mService.setLockCredential(newPattern("123"), nonePassword(), PRIMARY_USER_ID);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testSetTooShortPinFails() throws RemoteException {
+        mService.setLockCredential(newPin("123"), nonePassword(), PRIMARY_USER_ID);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testSetTooShortPassword() throws RemoteException {
+        mService.setLockCredential(newPassword("123"), nonePassword(), PRIMARY_USER_ID);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testSetPasswordWithInvalidChars() throws RemoteException {
+        mService.setLockCredential(newPassword("§µ¿¶¥£"), nonePassword(), PRIMARY_USER_ID);
+    }
+
     @Test
     public void testSetPatternPrimaryUser() throws RemoteException {
         setAndVerifyCredential(PRIMARY_USER_ID, newPattern("123456789"));
@@ -94,7 +114,7 @@
 
     @Test
     public void testChangePatternPrimaryUser() throws RemoteException {
-        testChangeCredential(PRIMARY_USER_ID, newPassword("!£$%^&*(())"), newPattern("1596321"));
+        testChangeCredential(PRIMARY_USER_ID, newPassword("password"), newPattern("1596321"));
     }
 
     @Test
@@ -185,7 +205,7 @@
         assertNotNull(mGateKeeperService.getAuthToken(MANAGED_PROFILE_USER_ID));
         assertEquals(profileSid, mGateKeeperService.getSecureUserId(MANAGED_PROFILE_USER_ID));
 
-        setCredential(PRIMARY_USER_ID, newPassword("pwd"), primaryPassword);
+        setCredential(PRIMARY_USER_ID, newPassword("password"), primaryPassword);
         assertEquals(VerifyCredentialResponse.RESPONSE_OK, mService.verifyCredential(
                 profilePassword, MANAGED_PROFILE_USER_ID, 0 /* flags */)
                 .getResponseCode());
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java b/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java
index ce0347d..dee7780 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java
@@ -215,12 +215,12 @@
     @Test
     public void testChangeCredentialKeepsAuthSecret() throws RemoteException {
         LockscreenCredential password = newPassword("password");
-        LockscreenCredential badPassword = newPassword("new");
+        LockscreenCredential newPassword = newPassword("newPassword");
 
         initSpAndSetCredential(PRIMARY_USER_ID, password);
-        mService.setLockCredential(badPassword, password, PRIMARY_USER_ID);
+        mService.setLockCredential(newPassword, password, PRIMARY_USER_ID);
         assertEquals(VerifyCredentialResponse.RESPONSE_OK, mService.verifyCredential(
-                badPassword, PRIMARY_USER_ID, 0 /* flags */).getResponseCode());
+                newPassword, PRIMARY_USER_ID, 0 /* flags */).getResponseCode());
 
         // Check the same secret was passed each time
         ArgumentCaptor<byte[]> secret = ArgumentCaptor.forClass(byte[].class);
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncTaskTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncTaskTest.java
index cc1100b..e5909a4 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncTaskTest.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/KeySyncTaskTest.java
@@ -36,6 +36,7 @@
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -297,13 +298,15 @@
                 TestData.getInsecureCertPathForEndpoint1());
         addApplicationKey(TEST_USER_ID, TEST_RECOVERY_AGENT_UID, appKeyAlias);
 
+        setExpectedScryptArgument(password.getBytes());
+
         mKeySyncTask.run();
 
         KeyChainSnapshot keyChainSnapshot = mRecoverySnapshotStorage.get(TEST_RECOVERY_AGENT_UID);
         assertThat(keyChainSnapshot.getKeyChainProtectionParams()).hasSize(1);
         assertThat(keyChainSnapshot.getKeyChainProtectionParams().get(0).getLockScreenUiFormat()).
                 isEqualTo(UI_FORMAT_PASSWORD);
-        verify(mMockScrypt).scrypt(eq(password.getBytes()), any(),
+        verify(mMockScrypt).scrypt(any(), any(),
                 eq(KeySyncTask.SCRYPT_PARAM_N), eq(KeySyncTask.SCRYPT_PARAM_R),
                 eq(KeySyncTask.SCRYPT_PARAM_P), eq(KeySyncTask.SCRYPT_PARAM_OUTLEN_BYTES));
         KeyDerivationParams keyDerivationParams =
@@ -314,6 +317,44 @@
     }
 
     @Test
+    public void run_zeroizedCredential() throws Exception {
+        String password = TrustedRootCertificates.INSECURE_PASSWORD_PREFIX + "123";
+        String appKeyAlias = TrustedRootCertificates.INSECURE_KEY_ALIAS_PREFIX + "alias";
+        byte[] zeroizedCredential = password.getBytes();
+        mKeySyncTask = new KeySyncTask(
+                mRecoverableKeyStoreDb,
+                mRecoverySnapshotStorage,
+                mSnapshotListenersStorage,
+                TEST_USER_ID,
+                CREDENTIAL_TYPE_PASSWORD,
+                /*credential=*/ zeroizedCredential,
+                /*credentialUpdated=*/ false,
+                mPlatformKeyManager,
+                mTestOnlyInsecureCertificateHelper,
+                mMockScrypt);
+        mRecoverableKeyStoreDb.setServerParams(
+                TEST_USER_ID, TEST_RECOVERY_AGENT_UID, TEST_VAULT_HANDLE);
+        mRecoverableKeyStoreDb.setPlatformKeyGenerationId(TEST_USER_ID, TEST_GENERATION_ID);
+        mRecoverableKeyStoreDb.setActiveRootOfTrust(TEST_USER_ID, TEST_RECOVERY_AGENT_UID,
+                TrustedRootCertificates.TEST_ONLY_INSECURE_CERTIFICATE_ALIAS);
+        mRecoverableKeyStoreDb.setRecoveryServiceCertPath(
+                TEST_USER_ID, TEST_RECOVERY_AGENT_UID,
+                TrustedRootCertificates.TEST_ONLY_INSECURE_CERTIFICATE_ALIAS,
+                TestData.getInsecureCertPathForEndpoint1());
+        addApplicationKey(TEST_USER_ID, TEST_RECOVERY_AGENT_UID, appKeyAlias);
+
+        // Need to check array value during method call since it is modified later.
+        setExpectedScryptArgument(password.getBytes());
+
+        Arrays.fill(zeroizedCredential, (byte) 0);
+        mKeySyncTask.run();
+
+        verify(mMockScrypt).scrypt(any(), any(),
+                eq(KeySyncTask.SCRYPT_PARAM_N), eq(KeySyncTask.SCRYPT_PARAM_R),
+                eq(KeySyncTask.SCRYPT_PARAM_P), eq(KeySyncTask.SCRYPT_PARAM_OUTLEN_BYTES));
+    }
+
+    @Test
     public void run_useSha256ToHashPatternInProdMode() throws Exception {
         String pattern = "123456";
         mKeySyncTask = new KeySyncTask(
@@ -368,13 +409,15 @@
         mRecoverableKeyStoreDb.setRecoveryServiceCertPath(
                 TEST_USER_ID, TEST_RECOVERY_AGENT_UID, TEST_ROOT_CERT_ALIAS, TestData.CERT_PATH_1);
 
+        setExpectedScryptArgument(shortPassword.getBytes());
+
         mKeySyncTask.run();
 
         KeyChainSnapshot keyChainSnapshot = mRecoverySnapshotStorage.get(TEST_RECOVERY_AGENT_UID);
         assertThat(keyChainSnapshot.getKeyChainProtectionParams()).hasSize(1);
         assertThat(keyChainSnapshot.getKeyChainProtectionParams().get(0).getLockScreenUiFormat()).
                 isEqualTo(UI_FORMAT_PASSWORD);
-        verify(mMockScrypt).scrypt(eq(shortPassword.getBytes()), any(),
+        verify(mMockScrypt).scrypt(any(), any(),
                 eq(KeySyncTask.SCRYPT_PARAM_N), eq(KeySyncTask.SCRYPT_PARAM_R),
                 eq(KeySyncTask.SCRYPT_PARAM_P), eq(KeySyncTask.SCRYPT_PARAM_OUTLEN_BYTES));
         KeyDerivationParams keyDerivationParams =
@@ -650,13 +693,15 @@
         when(mSnapshotListenersStorage.hasListener(TEST_RECOVERY_AGENT_UID)).thenReturn(true);
         addApplicationKey(TEST_USER_ID, TEST_RECOVERY_AGENT_UID, TEST_APP_KEY_ALIAS);
 
+        setExpectedScryptArgument(password.getBytes());
+
         mKeySyncTask.run();
 
         KeyChainSnapshot keyChainSnapshot = mRecoverySnapshotStorage.get(TEST_RECOVERY_AGENT_UID);
         assertThat(keyChainSnapshot.getKeyChainProtectionParams()).hasSize(1);
         assertThat(keyChainSnapshot.getKeyChainProtectionParams().get(0).getLockScreenUiFormat()).
                 isEqualTo(UI_FORMAT_PASSWORD);
-        verify(mMockScrypt).scrypt(eq(password.getBytes()), any(),
+        verify(mMockScrypt).scrypt(any(), any(),
                 eq(KeySyncTask.SCRYPT_PARAM_N), eq(KeySyncTask.SCRYPT_PARAM_R),
                 eq(KeySyncTask.SCRYPT_PARAM_P), eq(KeySyncTask.SCRYPT_PARAM_OUTLEN_BYTES));
     }
@@ -681,6 +726,8 @@
         when(mSnapshotListenersStorage.hasListener(TEST_RECOVERY_AGENT_UID)).thenReturn(true);
         addApplicationKey(TEST_USER_ID, TEST_RECOVERY_AGENT_UID, TEST_APP_KEY_ALIAS);
 
+        setExpectedScryptArgument(pin.getBytes());
+
         mKeySyncTask.run();
 
         KeyChainSnapshot keyChainSnapshot = mRecoverySnapshotStorage.get(TEST_RECOVERY_AGENT_UID);
@@ -688,7 +735,7 @@
         // Password with only digits is changed to pin.
         assertThat(keyChainSnapshot.getKeyChainProtectionParams().get(0).getLockScreenUiFormat()).
                 isEqualTo(UI_FORMAT_PIN);
-        verify(mMockScrypt).scrypt(eq(pin.getBytes()), any(),
+        verify(mMockScrypt).scrypt(any(), any(),
                 eq(KeySyncTask.SCRYPT_PARAM_N), eq(KeySyncTask.SCRYPT_PARAM_R),
                 eq(KeySyncTask.SCRYPT_PARAM_P), eq(KeySyncTask.SCRYPT_PARAM_OUTLEN_BYTES));
     }
@@ -868,4 +915,14 @@
         new Random().nextBytes(bytes);
         return bytes;
     }
+
+    private void setExpectedScryptArgument(byte[] credentials) {
+        doAnswer(invocation -> {
+            assertThat((byte[]) invocation.getArguments()[0]).isEqualTo(credentials);
+            return invocation.callRealMethod();
+        }).when(mMockScrypt).scrypt(any(), any(),
+                eq(KeySyncTask.SCRYPT_PARAM_N), eq(KeySyncTask.SCRYPT_PARAM_R),
+                eq(KeySyncTask.SCRYPT_PARAM_P), eq(KeySyncTask.SCRYPT_PARAM_OUTLEN_BYTES));
+
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/PlatformKeyManagerTest.java b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/PlatformKeyManagerTest.java
index c546a74..c09e09c 100644
--- a/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/PlatformKeyManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/locksettings/recoverablekeystore/PlatformKeyManagerTest.java
@@ -27,6 +27,7 @@
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertThrows;
 
 import android.app.KeyguardManager;
 import android.content.Context;
@@ -54,6 +55,7 @@
 
 import java.io.File;
 import java.security.KeyStore;
+import java.security.KeyStoreException;
 import java.security.UnrecoverableKeyException;
 import java.util.List;
 
@@ -393,6 +395,18 @@
     }
 
     @Test
+    public void getEncryptKey_noScreenlock() throws Exception {
+        when(mKeyguardManager.isDeviceSecure(USER_ID_FIXTURE)).thenReturn(false);
+        doThrow(new KeyStoreException()).when(mKeyStoreProxy).setEntry(
+                anyString(),
+                any(),
+                any());
+
+        assertThrows(InsecureUserException.class,
+                () -> mPlatformKeyManager.getEncryptKey(USER_ID_FIXTURE));
+    }
+
+    @Test
     public void getDecryptKey_generatesNewKeyIfOldOneIsInvalid() throws Exception {
         doThrow(new UnrecoverableKeyException()).when(mKeyStoreProxy).getKey(
                 eq(DECRYPTION_KEY_ALIAS_1),
diff --git a/services/tests/servicestests/src/com/android/server/people/PeopleServiceTest.java b/services/tests/servicestests/src/com/android/server/people/PeopleServiceTest.java
index 5066240..aed8491 100644
--- a/services/tests/servicestests/src/com/android/server/people/PeopleServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/people/PeopleServiceTest.java
@@ -41,8 +41,10 @@
 import android.app.prediction.AppTarget;
 import android.app.prediction.IPredictionCallback;
 import android.content.Context;
+import android.content.pm.PackageManagerInternal;
 import android.content.pm.ParceledListSlice;
 import android.content.pm.ShortcutInfo;
+import android.content.pm.ShortcutServiceInternal;
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.RemoteException;
@@ -56,6 +58,7 @@
 
 import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
 import com.android.server.LocalServices;
+import com.android.server.notification.NotificationManagerInternal;
 
 import org.junit.After;
 import org.junit.Before;
@@ -87,6 +90,13 @@
     private AppPredictionContext mPredictionContext;
 
     @Mock
+    ShortcutServiceInternal mShortcutServiceInternal;
+    @Mock
+    PackageManagerInternal mPackageManagerInternal;
+    @Mock
+    NotificationManagerInternal mNotificationManagerInternal;
+
+    @Mock
     private Context mMockContext;
 
     @Rule
@@ -110,6 +120,10 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
+        LocalServices.addService(ShortcutServiceInternal.class, mShortcutServiceInternal);
+        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternal);
+        LocalServices.addService(NotificationManagerInternal.class, mNotificationManagerInternal);
+
         mPeopleService = new TestablePeopleService(mContext);
         mTestableLooper = TestableLooper.get(this);
         mIPeopleManager = ((IPeopleManager) mPeopleService.mService);
@@ -137,6 +151,9 @@
     @After
     public void tearDown() {
         LocalServices.removeServiceForTest(PeopleServiceInternal.class);
+        LocalServices.removeServiceForTest(ShortcutServiceInternal.class);
+        LocalServices.removeServiceForTest(PackageManagerInternal.class);
+        LocalServices.removeServiceForTest(NotificationManagerInternal.class);
     }
 
     @Test
@@ -167,25 +184,29 @@
     @Test
     public void testRegisterConversationListener() throws Exception {
         assertEquals(0,
-                mPeopleService.mConversationListenerHelper.mListeners.getRegisteredCallbackCount());
+                mPeopleService.getConversationListenerHelper()
+                        .mListeners.getRegisteredCallbackCount());
 
         mIPeopleManager.registerConversationListener(TEST_PACKAGE_NAME, 0, CONVERSATION_ID_1,
                 new TestableConversationListener());
         mTestableLooper.processAllMessages();
         assertEquals(1,
-                mPeopleService.mConversationListenerHelper.mListeners.getRegisteredCallbackCount());
+                mPeopleService.getConversationListenerHelper()
+                        .mListeners.getRegisteredCallbackCount());
 
         mIPeopleManager.registerConversationListener(TEST_PACKAGE_NAME, 0, CONVERSATION_ID_1,
                 new TestableConversationListener());
         mTestableLooper.processAllMessages();
         assertEquals(2,
-                mPeopleService.mConversationListenerHelper.mListeners.getRegisteredCallbackCount());
+                mPeopleService.getConversationListenerHelper()
+                        .mListeners.getRegisteredCallbackCount());
 
         mIPeopleManager.registerConversationListener(TEST_PACKAGE_NAME, 0, CONVERSATION_ID_2,
                 new TestableConversationListener());
         mTestableLooper.processAllMessages();
         assertEquals(3,
-                mPeopleService.mConversationListenerHelper.mListeners.getRegisteredCallbackCount());
+                mPeopleService.getConversationListenerHelper()
+                        .mListeners.getRegisteredCallbackCount());
     }
 
     @Test
@@ -201,20 +222,24 @@
                 listener3);
         mTestableLooper.processAllMessages();
         assertEquals(3,
-                mPeopleService.mConversationListenerHelper.mListeners.getRegisteredCallbackCount());
+                mPeopleService.getConversationListenerHelper()
+                        .mListeners.getRegisteredCallbackCount());
 
         mIPeopleManager.unregisterConversationListener(
                 listener2);
         assertEquals(2,
-                mPeopleService.mConversationListenerHelper.mListeners.getRegisteredCallbackCount());
+                mPeopleService.getConversationListenerHelper()
+                        .mListeners.getRegisteredCallbackCount());
         mIPeopleManager.unregisterConversationListener(
                 listener1);
         assertEquals(1,
-                mPeopleService.mConversationListenerHelper.mListeners.getRegisteredCallbackCount());
+                mPeopleService.getConversationListenerHelper()
+                        .mListeners.getRegisteredCallbackCount());
         mIPeopleManager.unregisterConversationListener(
                 listener3);
         assertEquals(0,
-                mPeopleService.mConversationListenerHelper.mListeners.getRegisteredCallbackCount());
+                mPeopleService.getConversationListenerHelper()
+                        .mListeners.getRegisteredCallbackCount());
     }
 
     @Test
@@ -229,12 +254,13 @@
                 PeopleManager.ConversationListener.class);
         registerListener(CONVERSATION_ID_2, listenerForConversation2);
         assertEquals(3,
-                mPeopleService.mConversationListenerHelper.mListeners.getRegisteredCallbackCount());
+                mPeopleService.getConversationListenerHelper()
+                        .mListeners.getRegisteredCallbackCount());
 
         // Update conversation with two listeners.
         ConversationStatus status = new ConversationStatus.Builder(CONVERSATION_ID_1,
                 ACTIVITY_GAME).build();
-        mPeopleService.mConversationListenerHelper.onConversationsUpdate(
+        mPeopleService.getConversationListenerHelper().onConversationsUpdate(
                 Arrays.asList(getConversation(CONVERSATION_ID_1, status)));
         mTestLooper.dispatchAll();
 
diff --git a/services/tests/servicestests/src/com/android/server/pm/BackgroundInstallControlServiceTest.java b/services/tests/servicestests/src/com/android/server/pm/BackgroundInstallControlServiceTest.java
index ba91647..daf18ed 100644
--- a/services/tests/servicestests/src/com/android/server/pm/BackgroundInstallControlServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/BackgroundInstallControlServiceTest.java
@@ -402,7 +402,7 @@
         assertEquals(0,
                 mBackgroundInstallControlService.getInstallerForegroundTimeFrames().numMaps());
         doReturn(PackageManager.PERMISSION_DENIED).when(mPermissionManager).checkPermission(
-                anyString(), anyString(), anyInt());
+                anyString(), anyString(), anyInt(), anyInt());
         generateUsageEvent(UsageEvents.Event.ACTIVITY_RESUMED,
                 USER_ID_1, INSTALLER_NAME_1, 0);
         mTestLooper.dispatchAll();
@@ -415,7 +415,7 @@
         assertEquals(0,
                 mBackgroundInstallControlService.getInstallerForegroundTimeFrames().numMaps());
         doReturn(PackageManager.PERMISSION_GRANTED).when(mPermissionManager).checkPermission(
-                anyString(), anyString(), anyInt());
+                anyString(), anyString(), anyInt(), anyInt());
         generateUsageEvent(UsageEvents.Event.ACTIVITY_RESUMED,
                 USER_ID_1, INSTALLER_NAME_1, 0);
         mTestLooper.dispatchAll();
@@ -428,7 +428,7 @@
         assertEquals(0,
                 mBackgroundInstallControlService.getInstallerForegroundTimeFrames().numMaps());
         doReturn(PackageManager.PERMISSION_GRANTED).when(mPermissionManager).checkPermission(
-                anyString(), anyString(), anyInt());
+                anyString(), anyString(), anyInt(), anyInt());
         generateUsageEvent(UsageEvents.Event.USER_INTERACTION,
                 USER_ID_1, INSTALLER_NAME_1, 0);
         mTestLooper.dispatchAll();
@@ -441,7 +441,7 @@
         assertEquals(0,
                 mBackgroundInstallControlService.getInstallerForegroundTimeFrames().numMaps());
         doReturn(PackageManager.PERMISSION_GRANTED).when(mPermissionManager).checkPermission(
-                anyString(), anyString(), anyInt());
+                anyString(), anyString(), anyInt(), anyInt());
         generateUsageEvent(UsageEvents.Event.ACTIVITY_RESUMED,
                 USER_ID_1, INSTALLER_NAME_1, USAGE_EVENT_TIMESTAMP_1);
         mTestLooper.dispatchAll();
@@ -464,7 +464,7 @@
         assertEquals(0,
                 mBackgroundInstallControlService.getInstallerForegroundTimeFrames().numMaps());
         doReturn(PackageManager.PERMISSION_GRANTED).when(mPermissionManager).checkPermission(
-                anyString(), anyString(), anyInt());
+                anyString(), anyString(), anyInt(), anyInt());
         generateUsageEvent(UsageEvents.Event.ACTIVITY_RESUMED,
                 USER_ID_1, INSTALLER_NAME_1, USAGE_EVENT_TIMESTAMP_1);
         generateUsageEvent(Event.ACTIVITY_STOPPED,
@@ -489,7 +489,7 @@
         assertEquals(0,
                 mBackgroundInstallControlService.getInstallerForegroundTimeFrames().numMaps());
         doReturn(PackageManager.PERMISSION_GRANTED).when(mPermissionManager).checkPermission(
-                anyString(), anyString(), anyInt());
+                anyString(), anyString(), anyInt(), anyInt());
         generateUsageEvent(UsageEvents.Event.ACTIVITY_RESUMED,
                 USER_ID_1, INSTALLER_NAME_1, USAGE_EVENT_TIMESTAMP_1);
         generateUsageEvent(Event.ACTIVITY_STOPPED,
@@ -520,7 +520,7 @@
         assertEquals(0,
                 mBackgroundInstallControlService.getInstallerForegroundTimeFrames().numMaps());
         doReturn(PackageManager.PERMISSION_GRANTED).when(mPermissionManager).checkPermission(
-                anyString(), anyString(), anyInt());
+                anyString(), anyString(), anyInt(), anyInt());
         generateUsageEvent(Event.ACTIVITY_STOPPED,
                 USER_ID_1, INSTALLER_NAME_1, USAGE_EVENT_TIMESTAMP_1);
         mTestLooper.dispatchAll();
@@ -605,7 +605,7 @@
         // So it's not a background install. Thus, it's null for the return of
         // mBackgroundInstallControlService.getBackgroundInstalledPackages()
         doReturn(PackageManager.PERMISSION_GRANTED).when(mPermissionManager).checkPermission(
-                anyString(), anyString(), anyInt());
+                anyString(), anyString(), anyInt(), anyInt());
         generateUsageEvent(UsageEvents.Event.ACTIVITY_RESUMED,
                 USER_ID_1, INSTALLER_NAME_1, USAGE_EVENT_TIMESTAMP_1);
         generateUsageEvent(Event.ACTIVITY_STOPPED,
@@ -651,7 +651,7 @@
         // it's a background install. Thus, it's not null for the return of
         // mBackgroundInstallControlService.getBackgroundInstalledPackages()
         doReturn(PackageManager.PERMISSION_GRANTED).when(mPermissionManager).checkPermission(
-                anyString(), anyString(), anyInt());
+                anyString(), anyString(), anyInt(), anyInt());
         generateUsageEvent(UsageEvents.Event.ACTIVITY_RESUMED,
                 USER_ID_1, INSTALLER_NAME_1, USAGE_EVENT_TIMESTAMP_2);
         generateUsageEvent(Event.ACTIVITY_STOPPED,
@@ -701,7 +701,7 @@
         // it's a background install. Thus, it's not null for the return of
         // mBackgroundInstallControlService.getBackgroundInstalledPackages()
         doReturn(PackageManager.PERMISSION_GRANTED).when(mPermissionManager).checkPermission(
-                anyString(), anyString(), anyInt());
+                anyString(), anyString(), anyInt(), anyInt());
         generateUsageEvent(UsageEvents.Event.ACTIVITY_RESUMED,
                 USER_ID_2, INSTALLER_NAME_2, USAGE_EVENT_TIMESTAMP_2);
         generateUsageEvent(Event.ACTIVITY_STOPPED,
@@ -752,7 +752,7 @@
         // as a background install. Since we do not want to treat side-loaded apps as background
         // install getBackgroundInstalledPackages() is expected to return null
         doReturn(PackageManager.PERMISSION_GRANTED).when(mPermissionManager).checkPermission(
-                anyString(), anyString(), anyInt());
+                anyString(), anyString(), anyInt(), anyInt());
         generateUsageEvent(UsageEvents.Event.ACTIVITY_RESUMED,
                 USER_ID_1, INSTALLER_NAME_1, USAGE_EVENT_TIMESTAMP_2);
         generateUsageEvent(Event.ACTIVITY_STOPPED,
@@ -801,7 +801,7 @@
         // as a background install. Since we do not want to treat side-loaded apps as background
         // install getBackgroundInstalledPackages() is expected to return null
         doReturn(PackageManager.PERMISSION_GRANTED).when(mPermissionManager).checkPermission(
-                anyString(), anyString(), anyInt());
+                anyString(), anyString(), anyInt(), anyInt());
         generateUsageEvent(UsageEvents.Event.ACTIVITY_RESUMED,
                 USER_ID_1, INSTALLER_NAME_1, USAGE_EVENT_TIMESTAMP_2);
         generateUsageEvent(Event.ACTIVITY_STOPPED,
diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
index 7c1845f..0f5fb91 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
@@ -125,6 +125,8 @@
 import java.io.OutputStream;
 import java.io.Writer;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
@@ -4014,8 +4016,10 @@
 
         ShortcutUser user = new ShortcutUser(mService, 0);
 
-        File corruptedShortcutPackage = new File("/data/local/tmp/cts/content/",
+        File corruptedShortcutPackage = new File(getTestContext().getFilesDir(),
                 "broken_shortcut.xml");
+        Files.copy(new File("/data/local/tmp/cts/content/", "broken_shortcut.xml").toPath(),
+                corruptedShortcutPackage.toPath(), StandardCopyOption.REPLACE_EXISTING);
         assertNull(ShortcutPackage.loadFromFile(mService, user, corruptedShortcutPackage, false));
     }
 
@@ -4116,6 +4120,11 @@
         try (Writer os = new FileWriter(mService.getUserFile(USER_10).getBaseFile())) {
             os.write("<?xml version='1.0' encoding='utf");
         }
+        ShortcutPackage sp = mService.getUserShortcutsLocked(USER_0).getPackageShortcutsIfExists(
+                CALLING_PACKAGE_1);
+        try (Writer os = new FileWriter(sp.getShortcutPackageItemFile().getPath())) {
+            os.write("<?xml version='1.0' encoding='utf");
+        }
 
         // Restore.
         initService();
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserLifecycleStressTest.java b/services/tests/servicestests/src/com/android/server/pm/UserLifecycleStressTest.java
index c9f00d7..43bf537 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserLifecycleStressTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserLifecycleStressTest.java
@@ -16,16 +16,19 @@
 package com.android.server.pm;
 
 import static android.os.UserHandle.USER_NULL;
-import static android.os.UserHandle.USER_SYSTEM;
 
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assertWithMessage;
 
+import static org.junit.Assume.assumeFalse;
+
 import android.app.ActivityManager;
 import android.app.IStopUserCallback;
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.UserInfo;
 import android.os.RemoteException;
+import android.os.UserHandle;
 import android.os.UserManager;
 import android.platform.test.annotations.Postsubmit;
 import android.provider.Settings;
@@ -35,6 +38,8 @@
 import androidx.test.filters.LargeTest;
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.compatibility.common.util.BlockingBroadcastReceiver;
+import com.android.compatibility.common.util.ShellUtils;
 import com.android.internal.util.FunctionalUtils;
 
 import org.junit.After;
@@ -46,6 +51,7 @@
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 
 /**
  * To run the test:
@@ -58,14 +64,20 @@
     private static final String TAG = "UserLifecycleStressTest";
     // TODO: Make this smaller once we have improved it.
     private static final int TIMEOUT_IN_SECOND = 40;
+    private static final int CHECK_USER_REMOVED_INTERVAL_MS = 500;
+
     private static final int NUM_ITERATIONS = 8;
     private static final int WAIT_BEFORE_STOP_USER_IN_SECOND = 3;
 
+    /** Name of users/profiles in the test. Users with this name may be freely removed. */
+    private static final String TEST_USER_NAME = "UserLifecycleStressTest_test_user";
+
     private Context mContext;
     private UserManager mUserManager;
     private ActivityManager mActivityManager;
     private UserSwitchWaiter mUserSwitchWaiter;
     private String mRemoveGuestOnExitOriginalValue;
+    private int mOriginalCurrentUserId;
 
     @Before
     public void setup() throws RemoteException {
@@ -75,13 +87,17 @@
         mUserSwitchWaiter = new UserSwitchWaiter(TAG, TIMEOUT_IN_SECOND);
         mRemoveGuestOnExitOriginalValue = Settings.Global.getString(mContext.getContentResolver(),
                 Settings.Global.REMOVE_GUEST_ON_EXIT);
+        waitForBroadcastBarrier(); // isolate tests from each other
+        mOriginalCurrentUserId = ActivityManager.getCurrentUser();
     }
 
     @After
     public void tearDown() throws IOException {
+        switchUser(mOriginalCurrentUserId);
         mUserSwitchWaiter.close();
         Settings.Global.putString(mContext.getContentResolver(),
                 Settings.Global.REMOVE_GUEST_ON_EXIT, mRemoveGuestOnExitOriginalValue);
+        waitForBroadcastBarrier(); // isolate tests from each other
     }
 
     /**
@@ -90,9 +106,15 @@
      */
     @Test
     public void stopManagedProfileStressTest() throws RemoteException, InterruptedException {
+        UserHandle mainUser = mUserManager.getMainUser();
+        assumeFalse("There is no main user", mainUser == null);
+        switchUser(mainUser.getIdentifier());
+
         for (int i = 0; i < NUM_ITERATIONS; i++) {
-            final UserInfo userInfo = mUserManager.createProfileForUser("TestUser",
-                    UserManager.USER_TYPE_PROFILE_MANAGED, 0, mActivityManager.getCurrentUser());
+            logIteration(i, "stopManagedProfileStressTest");
+
+            final UserInfo userInfo = mUserManager.createProfileForUser(TEST_USER_NAME,
+                    UserManager.USER_TYPE_PROFILE_MANAGED, 0, ActivityManager.getCurrentUser());
             assertThat(userInfo).isNotNull();
             try {
                 assertWithMessage("Failed to start the profile")
@@ -109,6 +131,35 @@
     }
 
     /**
+     * Create a user, and then remove it immediately after starting it in background
+     * {@link #NUM_ITERATIONS} times in a row.
+     * Check device is not crashed when user data directory is deleted while some other processes
+     * might still be trying to access those deleted files.
+     */
+    @Test
+    public void removeRecentlyStartedUserStressTest() throws RemoteException, InterruptedException {
+        for (int i = 0; i < NUM_ITERATIONS; i++) {
+            logIteration(i, "removeRecentlyStartedUserStressTest");
+
+            Log.d(TAG, "Creating a new user");
+            final UserInfo userInfo = mUserManager.createUser(TEST_USER_NAME,
+                    UserManager.USER_TYPE_FULL_SECONDARY, 0);
+            assertWithMessage("Failed to create the user")
+                    .that(userInfo)
+                    .isNotNull();
+            try {
+                Log.d(TAG, "Starting user " + userInfo.id);
+                startUserInBackgroundAndWaitForUserStartedBroadcast(userInfo.id);
+            } finally {
+                Log.d(TAG, "Removing user " + userInfo.id);
+                assertWithMessage("Failed to remove the user " + userInfo.id)
+                        .that(removeUser(userInfo.id))
+                        .isTrue();
+            }
+        }
+    }
+
+    /**
      * Starts over the guest user {@link #NUM_ITERATIONS} times in a row.
      *
      * Starting over the guest means the following:
@@ -122,18 +173,13 @@
         Settings.Global.putString(mContext.getContentResolver(),
                 Settings.Global.REMOVE_GUEST_ON_EXIT, "0");
 
-        if (ActivityManager.getCurrentUser() != USER_SYSTEM) {
-            switchUser(USER_SYSTEM);
-        }
-
         final List<UserInfo> guestUsers = mUserManager.getGuestUsers();
         int nextGuestId = guestUsers.isEmpty() ? USER_NULL : guestUsers.get(0).id;
 
         for (int i = 0; i < NUM_ITERATIONS; i++) {
-            final int currentGuestId = nextGuestId;
+            logIteration(i, "switchToExistingGuestAndStartOverStressTest");
 
-            Log.d(TAG, "switchToExistingGuestAndStartOverStressTest"
-                    + " - Run " + (i + 1) + " / " + NUM_ITERATIONS);
+            final int currentGuestId = nextGuestId;
 
             if (currentGuestId != USER_NULL) {
                 Log.d(TAG, "Switching to the existing guest");
@@ -161,8 +207,8 @@
                         .isTrue();
             }
 
-            Log.d(TAG, "Switching back to the system user");
-            switchUser(USER_SYSTEM);
+            Log.d(TAG, "Switching back to the initial user");
+            switchUser(mOriginalCurrentUserId);
 
             nextGuestId = newGuest.id;
         }
@@ -173,6 +219,25 @@
         Log.d(TAG, "testSwitchToExistingGuestAndStartOver - End");
     }
 
+    private boolean removeUser(int userId) {
+        if (!mUserManager.removeUser(userId)) {
+            return false;
+        }
+        try {
+            final long startTime = System.currentTimeMillis();
+            final long timeoutInMs = TIMEOUT_IN_SECOND * 1000;
+            while (mUserManager.getUserInfo(userId) != null
+                    && System.currentTimeMillis() - startTime < timeoutInMs) {
+                TimeUnit.MILLISECONDS.sleep(CHECK_USER_REMOVED_INTERVAL_MS);
+            }
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+        } catch (Exception e) {
+            // Ignore
+        }
+        return mUserManager.getUserInfo(userId) == null;
+    }
+
     /** Stops the given user and waits for the stop to finish. */
     private void stopUser(int userId) throws RemoteException, InterruptedException {
         runWithLatch("stop user", countDownLatch -> {
@@ -193,6 +258,10 @@
 
     /** Starts the given user in the foreground and waits for the switch to finish. */
     private void switchUser(int userId) {
+        if (ActivityManager.getCurrentUser() == userId) {
+            Log.d(TAG, "No need to switch, current user is already user " + userId);
+            return;
+        }
         Log.d(TAG, "Switching to user " + userId);
 
         mUserSwitchWaiter.runThenWaitUntilSwitchCompleted(userId, () -> {
@@ -204,6 +273,40 @@
     }
 
     /**
+     * Start user in background and wait for {@link Intent#ACTION_USER_STARTED} broadcast.
+     * <p> To start in foreground instead, see {@link #switchUser(int)}.
+     * <p> This should always be used for profiles since profiles cannot be started in foreground.
+     */
+    private void startUserInBackgroundAndWaitForUserStartedBroadcast(int userId) {
+        runWithBlockingBroadcastReceiver("start user and wait for ACTION_USER_STARTED broadcast",
+                userId, Intent.ACTION_USER_STARTED,
+                () -> ActivityManager.getService().startUserInBackground(userId));
+    }
+
+    /**
+     * Calls the given runnable and expects the given broadcast to be received before timeout,
+     * or fails the test otherwise.
+     * @param tag tag for logging
+     * @param userId id of the user to register the broadcast receiver with
+     *               see {@link Context#registerReceiverAsUser}
+     * @param action action of the broadcast intent filter i.e. {@link Intent#ACTION_USER_STARTED}
+     * @param runnable this will be called after registering the broadcast receiver
+     */
+    private void runWithBlockingBroadcastReceiver(String tag, int userId, String action,
+            FunctionalUtils.ThrowingRunnable runnable) {
+        try (BlockingBroadcastReceiver blockingBroadcastReceiver = new BlockingBroadcastReceiver(
+                mContext, action,
+                intent -> intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL) == userId)) {
+            blockingBroadcastReceiver.setTimeout(TIMEOUT_IN_SECOND);
+            blockingBroadcastReceiver.registerForAllUsers();
+            runnable.run();
+            assertWithMessage("Took more than " + TIMEOUT_IN_SECOND + "s to " + tag)
+                    .that(blockingBroadcastReceiver.awaitForBroadcast())
+                    .isNotNull();
+        }
+    }
+
+    /**
      * Calls the given consumer with a CountDownLatch parameter, and expects it's countDown() method
      * to be called before timeout, or fails the test otherwise.
      */
@@ -222,5 +325,20 @@
         final long elapsedTime = System.currentTimeMillis() - startTime;
         Log.d(TAG, tag + " takes " + elapsedTime + " ms");
     }
+
+    private void logIteration(int iteration, String testMethodName) {
+        Log.d(TAG, testMethodName + " - Iteration " + (iteration + 1) + " / " + NUM_ITERATIONS);
+    }
+
+    private static void waitForBroadcastBarrier() {
+        try {
+            Log.d(TAG, "Starting to waitForBroadcastBarrier");
+            ShellUtils.runShellCommandWithTimeout("am wait-for-broadcast-barrier",
+                    TIMEOUT_IN_SECOND);
+            Log.d(TAG, "waitForBroadcastBarrier is finished");
+        } catch (TimeoutException e) {
+            Log.e(TAG, "Timeout while running waitForBroadcastBarrier", e);
+        }
+    }
 }
 
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java
index 592be2d..b4281d63c 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java
@@ -31,11 +31,11 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.platform.test.annotations.Postsubmit;
-import android.support.test.uiautomator.UiDevice;
 import android.util.AtomicFile;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
+import androidx.test.uiautomator.UiDevice;
 
 import com.android.server.LocalServices;
 
@@ -73,7 +73,6 @@
         // Put the current user to mUsers. UMS can't find userlist.xml, and fallbackToSingleUserLP.
         mUserManagerService.putUserInfo(
                 new UserInfo(ActivityManager.getCurrentUser(), "Current User", 0));
-
         restrictionsFile = new File(mContext.getCacheDir(), "restrictions.xml");
         restrictionsFile.delete();
     }
@@ -196,127 +195,8 @@
                 .isFalse();
     }
 
-    @Test
-    public void assertIsUserSwitcherEnabledOnMultiUserSettings() throws Exception {
-        int userId = ActivityManager.getCurrentUser();
-        resetUserSwitcherEnabled();
-
-        setUserSwitch(false);
-        assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isFalse();
-
-        setUserSwitch(true);
-        assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isTrue();
-    }
-
-    @Test
-    public void assertIsUserSwitcherEnabledOnMaxSupportedUsers()  throws Exception {
-        int userId = ActivityManager.getCurrentUser();
-        setMaxSupportedUsers(1);
-
-        assertThat(UserManager.supportsMultipleUsers()).isFalse();
-        assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isFalse();
-
-        setMaxSupportedUsers(8);
-
-        assertThat(UserManager.supportsMultipleUsers()).isTrue();
-        assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isTrue();
-    }
-
-    @Test
-    public void assertIsUserSwitcherEnabled()  throws Exception {
-        int userId = ActivityManager.getCurrentUser();
-        setMaxSupportedUsers(8);
-        assertThat(mUserManagerService.isUserSwitcherEnabled(true, userId)).isTrue();
-
-        setUserSwitch(false);
-        assertThat(mUserManagerService.isUserSwitcherEnabled(true, userId)).isFalse();
-
-        setUserSwitch(true);
-        assertThat(mUserManagerService.isUserSwitcherEnabled(false, userId)).isTrue();
-
-        mUserManagerService.setUserRestriction(UserManager.DISALLOW_ADD_USER, true, userId);
-        assertThat(mUserManagerService.isUserSwitcherEnabled(false, userId)).isFalse();
-
-        mUserManagerService.setUserRestriction(UserManager.DISALLOW_ADD_USER, false, userId);
-        setMaxSupportedUsers(1);
-        assertThat(mUserManagerService.isUserSwitcherEnabled(true, userId)).isFalse();
-    }
-
-    @Test
-    public void assertIsUserSwitcherEnabledOnShowMultiuserUI()  throws Exception {
-        int userId = ActivityManager.getCurrentUser();
-        setShowMultiuserUI(false);
-
-        assertThat(UserManager.supportsMultipleUsers()).isFalse();
-        assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isFalse();
-
-        setShowMultiuserUI(true);
-
-        assertThat(UserManager.supportsMultipleUsers()).isTrue();
-        assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isTrue();
-    }
-
-    @Test
-    public void assertIsUserSwitcherEnabledOnUserRestrictions() throws Exception {
-        int userId = ActivityManager.getCurrentUser();
-        resetUserSwitcherEnabled();
-
-        mUserManagerService.setUserRestriction(DISALLOW_USER_SWITCH, true, userId);
-        assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isFalse();
-
-        mUserManagerService.setUserRestriction(DISALLOW_USER_SWITCH, false, userId);
-        assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isTrue();
-    }
-
-    @Test
-    public void assertIsUserSwitcherEnabledOnDemoMode()  throws Exception {
-        int userId = ActivityManager.getCurrentUser();
-        resetUserSwitcherEnabled();
-
-        setDeviceDemoMode(true);
-        assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isFalse();
-
-        setDeviceDemoMode(false);
-        assertThat(mUserManagerService.isUserSwitcherEnabled(userId)).isTrue();
-    }
-
-    private void resetUserSwitcherEnabled() throws Exception {
-        int userId = ActivityManager.getCurrentUser();
-        setUserSwitch(true);
-        setShowMultiuserUI(true);
-        setDeviceDemoMode(false);
-        setMaxSupportedUsers(8);
-        mUserManagerService.setUserRestriction(DISALLOW_USER_SWITCH, false, userId);
-    }
-
-    private void setUserSwitch(boolean enabled) {
-        android.provider.Settings.Global.putInt(mContext.getContentResolver(),
-                android.provider.Settings.Global.USER_SWITCHER_ENABLED, enabled ? 1 : 0);
-    }
-
-    private void setDeviceDemoMode(boolean enabled) {
-        android.provider.Settings.Global.putInt(mContext.getContentResolver(),
-                android.provider.Settings.Global.DEVICE_DEMO_MODE, enabled ? 1 : 0);
-    }
-
-
     private static String runShellCommand(String cmd) throws Exception {
         return UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
                 .executeShellCommand(cmd);
     }
-
-    private static String setSystemProperty(String name, String value) throws Exception {
-        final String oldValue = runShellCommand("getprop " + name);
-        assertThat(runShellCommand("setprop " + name + " " + value))
-                .isEqualTo("");
-        return oldValue;
-    }
-
-    private static void setMaxSupportedUsers(int max) throws Exception {
-        setSystemProperty("fw.max_users", String.valueOf(max));
-    }
-
-    public static void setShowMultiuserUI(boolean show) throws Exception {
-        setSystemProperty("fw.show_multiuserui", String.valueOf(show));
-    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserPropertiesTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserPropertiesTest.java
index 2675f05..a54bc91 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserPropertiesTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserPropertiesTest.java
@@ -67,6 +67,7 @@
                 .setMediaSharedWithParent(false)
                 .setCredentialShareableWithParent(true)
                 .setDeleteAppWithParent(false)
+                .setAlwaysVisible(false)
                 .build();
         final UserProperties actualProps = new UserProperties(defaultProps);
         actualProps.setShowInLauncher(14);
@@ -78,6 +79,7 @@
         actualProps.setMediaSharedWithParent(true);
         actualProps.setCredentialShareableWithParent(false);
         actualProps.setDeleteAppWithParent(true);
+        actualProps.setAlwaysVisible(true);
 
         // Write the properties to xml.
         final ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -119,6 +121,7 @@
                 .setInheritDevicePolicy(1732)
                 .setMediaSharedWithParent(true)
                 .setDeleteAppWithParent(true)
+                .setAlwaysVisible(true)
                 .build();
         final UserProperties orig = new UserProperties(defaultProps);
         orig.setShowInLauncher(2841);
@@ -126,6 +129,7 @@
         orig.setShowInSettings(1437);
         orig.setInheritDevicePolicy(9456);
         orig.setDeleteAppWithParent(false);
+        orig.setAlwaysVisible(false);
 
         // Test every permission level. (Currently, it's linear so it's easy.)
         for (int permLevel = 0; permLevel < 4; permLevel++) {
@@ -169,6 +173,7 @@
                 copy::getCrossProfileIntentResolutionStrategy, exposeAll);
         assertEqualGetterOrThrows(orig::getDeleteAppWithParent,
                 copy::getDeleteAppWithParent, exposeAll);
+        assertEqualGetterOrThrows(orig::getAlwaysVisible, copy::getAlwaysVisible, exposeAll);
 
         // Items requiring hasManagePermission - put them here using hasManagePermission.
         assertEqualGetterOrThrows(orig::getShowInSettings, copy::getShowInSettings,
@@ -234,5 +239,6 @@
         assertThat(expected.isCredentialShareableWithParent())
                 .isEqualTo(actual.isCredentialShareableWithParent());
         assertThat(expected.getDeleteAppWithParent()).isEqualTo(actual.getDeleteAppWithParent());
+        assertThat(expected.getAlwaysVisible()).isEqualTo(actual.getAlwaysVisible());
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserTypeTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserTypeTest.java
index ff9a79e..e3579b4 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserTypeTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceUserTypeTest.java
@@ -91,7 +91,8 @@
                 .setCredentialShareableWithParent(false)
                 .setShowInSettings(900)
                 .setInheritDevicePolicy(340)
-                .setDeleteAppWithParent(true);
+                .setDeleteAppWithParent(true)
+                .setAlwaysVisible(true);
 
         final UserTypeDetails type = new UserTypeDetails.Builder()
                 .setName("a.name")
@@ -106,6 +107,7 @@
                 .setBadgeNoBackground(30)
                 .setLabel(31)
                 .setMaxAllowedPerParent(32)
+                .setStatusBarIcon(33)
                 .setDefaultRestrictions(restrictions)
                 .setDefaultSystemSettings(systemSettings)
                 .setDefaultSecureSettings(secureSettings)
@@ -122,6 +124,7 @@
         assertEquals(30, type.getBadgeNoBackground());
         assertEquals(31, type.getLabel());
         assertEquals(32, type.getMaxAllowedPerParent());
+        assertEquals(33, type.getStatusBarIcon());
 
         assertTrue(UserRestrictionsUtils.areEqual(restrictions, type.getDefaultRestrictions()));
         assertNotSame(restrictions, type.getDefaultRestrictions());
@@ -160,6 +163,7 @@
         assertEquals(340, type.getDefaultUserPropertiesReference()
                 .getInheritDevicePolicy());
         assertTrue(type.getDefaultUserPropertiesReference().getDeleteAppWithParent());
+        assertTrue(type.getDefaultUserPropertiesReference().getAlwaysVisible());
 
         assertEquals(23, type.getBadgeLabel(0));
         assertEquals(24, type.getBadgeLabel(1));
@@ -191,6 +195,7 @@
         assertEquals(Resources.ID_NULL, type.getIconBadge());
         assertEquals(Resources.ID_NULL, type.getBadgePlain());
         assertEquals(Resources.ID_NULL, type.getBadgeNoBackground());
+        assertEquals(Resources.ID_NULL, type.getStatusBarIcon());
         assertEquals(Resources.ID_NULL, type.getBadgeLabel(0));
         assertEquals(Resources.ID_NULL, type.getBadgeColor(0));
         assertEquals(Resources.ID_NULL, type.getLabel());
@@ -210,6 +215,8 @@
                 props.getCrossProfileIntentResolutionStrategy());
         assertFalse(props.isMediaSharedWithParent());
         assertFalse(props.isCredentialShareableWithParent());
+        assertFalse(props.getDeleteAppWithParent());
+        assertFalse(props.getAlwaysVisible());
 
         assertFalse(type.hasBadge());
     }
@@ -298,7 +305,8 @@
                 .setCredentialShareableWithParent(true)
                 .setShowInSettings(20)
                 .setInheritDevicePolicy(21)
-                .setDeleteAppWithParent(true);
+                .setDeleteAppWithParent(true)
+                .setAlwaysVisible(false);
 
         final ArrayMap<String, UserTypeDetails.Builder> builders = new ArrayMap<>();
         builders.put(userTypeAosp1, new UserTypeDetails.Builder()
@@ -339,6 +347,7 @@
         assertEquals(21, aospType.getDefaultUserPropertiesReference()
                 .getInheritDevicePolicy());
         assertTrue(aospType.getDefaultUserPropertiesReference().getDeleteAppWithParent());
+        assertFalse(aospType.getDefaultUserPropertiesReference().getAlwaysVisible());
 
         // userTypeAosp2 should be modified.
         aospType = builders.get(userTypeAosp2).createUserTypeDetails();
@@ -348,6 +357,8 @@
         assertEquals(Resources.ID_NULL, aospType.getBadgePlain()); // No resId for 'garbage'
         assertEquals(com.android.internal.R.drawable.ic_corp_badge_no_background,
                 aospType.getBadgeNoBackground());
+        assertEquals(com.android.internal.R.drawable.ic_test_badge_experiment,
+                aospType.getStatusBarIcon());
         assertEquals(com.android.internal.R.string.managed_profile_label_badge,
                 aospType.getBadgeLabel(0));
         assertEquals(com.android.internal.R.string.managed_profile_label_badge_2,
@@ -381,8 +392,8 @@
         assertEquals(23, aospType.getDefaultUserPropertiesReference().getShowInSettings());
         assertEquals(450, aospType.getDefaultUserPropertiesReference()
                 .getInheritDevicePolicy());
-        assertFalse(aospType.getDefaultUserPropertiesReference()
-                .getDeleteAppWithParent());
+        assertFalse(aospType.getDefaultUserPropertiesReference().getDeleteAppWithParent());
+        assertTrue(aospType.getDefaultUserPropertiesReference().getAlwaysVisible());
 
         // userTypeOem1 should be created.
         UserTypeDetails.Builder customType = builders.get(userTypeOem1);
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
index dc86e5f..dd681aa 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
@@ -120,10 +120,17 @@
 
     private void removeExistingUsers() {
         int currentUser = ActivityManager.getCurrentUser();
+
+        UserHandle communalProfile = mUserManager.getCommunalProfile();
+        int communalProfileId = communalProfile != null
+                ? communalProfile.getIdentifier() : UserHandle.USER_NULL;
+
         List<UserInfo> list = mUserManager.getUsers();
         for (UserInfo user : list) {
             // Keep system and current user
-            if (user.id != UserHandle.USER_SYSTEM && user.id != currentUser) {
+            if (user.id != UserHandle.USER_SYSTEM &&
+                    user.id != currentUser &&
+                    user.id != communalProfileId) {
                 removeUser(user.id);
             }
         }
@@ -208,6 +215,7 @@
         assertThat(typeProps.isCredentialShareableWithParent())
                 .isEqualTo(cloneUserProperties.isCredentialShareableWithParent());
         assertThrows(SecurityException.class, cloneUserProperties::getDeleteAppWithParent);
+        assertThrows(SecurityException.class, cloneUserProperties::getAlwaysVisible);
 
         // Verify clone user parent
         assertThat(mUserManager.getProfileParent(mainUserId)).isNull();
@@ -218,6 +226,91 @@
         assertThat(mUserManager.getProfileParent(mainUserId)).isNull();
     }
 
+    @Test
+    public void testCommunalProfile() throws Exception {
+        assumeTrue("Device doesn't support communal profiles ",
+                mUserManager.isUserTypeEnabled(UserManager.USER_TYPE_PROFILE_COMMUNAL));
+
+        // Create communal profile if needed
+        if (mUserManager.getCommunalProfile() == null) {
+            Slog.i(TAG, "Attempting to create a communal profile for a test");
+            createUser("Communal", UserManager.USER_TYPE_PROFILE_COMMUNAL, /*flags*/ 0);
+        }
+        final UserHandle communal = mUserManager.getCommunalProfile();
+        assertWithMessage("Couldn't create communal profile").that(communal).isNotNull();
+
+        final UserTypeDetails userTypeDetails =
+                UserTypeFactory.getUserTypes().get(UserManager.USER_TYPE_PROFILE_COMMUNAL);
+        assertWithMessage("No communal user type on device").that(userTypeDetails).isNotNull();
+
+        // Test that only one communal profile can be created
+        final UserInfo secondCommunalProfile =
+                createUser("Communal", UserManager.USER_TYPE_PROFILE_COMMUNAL, /*flags*/ 0);
+        assertThat(secondCommunalProfile).isNull();
+
+        // Verify that communal profile doesn't have a parent
+        assertThat(mUserManager.getProfileParent(communal.getIdentifier())).isNull();
+
+        // Make sure that, when switching users, the communal profile remains visible.
+        final boolean isStarted = mActivityManager.startProfile(communal);
+        assertWithMessage("Unable to start communal profile").that(isStarted).isTrue();
+        final UserManager umCommunal = (UserManager) mContext.createPackageContextAsUser(
+                        "android", 0, communal).getSystemService(Context.USER_SERVICE);
+        final int originalCurrent = ActivityManager.getCurrentUser();
+        final UserInfo testUser = createUser("TestUser", /* flags= */ 0);
+        assertWithMessage("Communal profile not visible").that(umCommunal.isUserVisible()).isTrue();
+        switchUser(testUser.id);
+        assertWithMessage("Communal profile not visible").that(umCommunal.isUserVisible()).isTrue();
+        switchUser(originalCurrent);
+        assertWithMessage("Communal profile not visible").that(umCommunal.isUserVisible()).isTrue();
+    }
+
+    @Test
+    public void testPrivateProfile() throws Exception {
+        UserHandle mainUser = mUserManager.getMainUser();
+        assumeTrue("Main user is null", mainUser != null);
+        // Get the default properties for private profile user type.
+        final UserTypeDetails userTypeDetails =
+                UserTypeFactory.getUserTypes().get(UserManager.USER_TYPE_PROFILE_PRIVATE);
+        assertWithMessage("No %s type on device", UserManager.USER_TYPE_PROFILE_PRIVATE)
+                .that(userTypeDetails).isNotNull();
+        final UserProperties typeProps = userTypeDetails.getDefaultUserPropertiesReference();
+
+        // Test that only one private profile  can be created
+        final int mainUserId = mainUser.getIdentifier();
+        UserInfo userInfo = createProfileForUser("Private profile1",
+                UserManager.USER_TYPE_PROFILE_PRIVATE,
+                mainUserId);
+        assertThat(userInfo).isNotNull();
+        UserInfo userInfo2 = createProfileForUser("Private profile2",
+                UserManager.USER_TYPE_PROFILE_PRIVATE,
+                mainUserId);
+        assertThat(userInfo2).isNull();
+
+        // Check that the new private profile has the expected properties (relative to the defaults)
+        // provided that the test caller has the necessary permissions.
+        UserProperties privateProfileUserProperties =
+                mUserManager.getUserProperties(UserHandle.of(userInfo.id));
+        assertThat(typeProps.getShowInLauncher())
+                .isEqualTo(privateProfileUserProperties.getShowInLauncher());
+        assertThrows(SecurityException.class, privateProfileUserProperties::getStartWithParent);
+        assertThrows(SecurityException.class,
+                privateProfileUserProperties::getCrossProfileIntentFilterAccessControl);
+        assertThat(typeProps.isMediaSharedWithParent())
+                .isEqualTo(privateProfileUserProperties.isMediaSharedWithParent());
+        assertThat(typeProps.isCredentialShareableWithParent())
+                .isEqualTo(privateProfileUserProperties.isCredentialShareableWithParent());
+        assertThrows(SecurityException.class, privateProfileUserProperties::getDeleteAppWithParent);
+
+        // Verify private profile parent
+        assertThat(mUserManager.getProfileParent(mainUserId)).isNull();
+        UserInfo parentProfileInfo = mUserManager.getProfileParent(userInfo.id);
+        assertThat(parentProfileInfo).isNotNull();
+        assertThat(mainUserId).isEqualTo(parentProfileInfo.id);
+        removeUser(userInfo.id);
+        assertThat(mUserManager.getProfileParent(mainUserId)).isNull();
+    }
+
     @MediumTest
     @Test
     public void testAdd2Users() throws Exception {
@@ -824,6 +917,8 @@
                 .isEqualTo(userTypeDetails.getBadgePlain());
         assertThat(mUserManager.getUserBadgeNoBackgroundResId(userId))
                 .isEqualTo(userTypeDetails.getBadgeNoBackground());
+        assertThat(mUserManager.getUserStatusBarIconResId(userId))
+                .isEqualTo(userTypeDetails.getStatusBarIcon());
 
         final int badgeIndex = userInfo.profileBadge;
         assertThat(mUserManager.getUserBadgeColor(userId)).isEqualTo(
@@ -875,6 +970,7 @@
         assertThat(userProps.isMediaSharedWithParent()).isFalse();
         assertThat(userProps.isCredentialShareableWithParent()).isTrue();
         assertThrows(SecurityException.class, userProps::getDeleteAppWithParent);
+        assertThrows(SecurityException.class, userProps::getAlwaysVisible);
     }
 
 
@@ -1299,6 +1395,24 @@
 
     @MediumTest
     @Test
+    public void testConcurrentUserSwitch() {
+        final int startUser = ActivityManager.getCurrentUser();
+        final UserInfo user1 = createUser("User 1", 0);
+        assertThat(user1).isNotNull();
+        final UserInfo user2 = createUser("User 2", 0);
+        assertThat(user2).isNotNull();
+        final UserInfo user3 = createUser("User 3", 0);
+        assertThat(user3).isNotNull();
+
+        // Switch to the users just created without waiting for the completion of the previous one.
+        switchUserThenRun(user1.id, () -> switchUserThenRun(user2.id, () -> switchUser(user3.id)));
+
+        // Switch back to the starting user.
+        switchUser(startUser);
+    }
+
+    @MediumTest
+    @Test
     public void testConcurrentUserCreate() throws Exception {
         int userCount = mUserManager.getUsers().size();
         int maxSupportedUsers = UserManager.getMaxSupportedUsers();
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserSystemPackageInstallerTest.java b/services/tests/servicestests/src/com/android/server/pm/UserSystemPackageInstallerTest.java
index cca924e..07d4065e 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserSystemPackageInstallerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserSystemPackageInstallerTest.java
@@ -44,7 +44,6 @@
 import android.os.SystemProperties;
 import android.os.UserManager;
 import android.platform.test.annotations.Postsubmit;
-import android.support.test.uiautomator.UiDevice;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.Log;
@@ -52,6 +51,7 @@
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.MediumTest;
 import androidx.test.runner.AndroidJUnit4;
+import androidx.test.uiautomator.UiDevice;
 
 import com.android.server.LocalServices;
 import com.android.server.SystemConfig;
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingValidationTest.kt b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingValidationTest.kt
new file mode 100644
index 0000000..560a919
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingValidationTest.kt
@@ -0,0 +1,678 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.pm.parsing
+
+import android.content.res.Validator
+import android.os.Environment
+import android.os.SystemProperties.PROP_VALUE_MAX
+import android.platform.test.annotations.Postsubmit
+import com.android.internal.R
+import com.android.server.pm.PackageManagerService
+import com.android.server.pm.pkg.parsing.ParsingPackageUtils
+import com.google.common.truth.Truth.assertThat
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertThrows
+import org.junit.Assert.fail
+import org.junit.Test
+import org.xmlpull.v1.XmlPullParser
+import org.xmlpull.v1.XmlPullParserFactory
+import java.io.ByteArrayInputStream
+import java.io.File
+
+@Postsubmit
+class AndroidPackageParsingValidationTest {
+    companion object {
+        private val parser2 = PackageParser2.forParsingFileWithDefaults()
+        private val apks = ((PackageManagerService.SYSTEM_PARTITIONS)
+                .flatMap {
+                    listOfNotNull(it.privAppFolder, it.appFolder, it.overlayFolder)
+                } + File(Environment.getRootDirectory(), "framework"))
+                .flatMap {
+                    it.walkTopDown()
+                            .filter { file -> file.name.endsWith(".apk") }
+                            .toList()
+                }
+                .distinct()
+        private val pullParser: XmlPullParser = run {
+            val factory = XmlPullParserFactory.newInstance()
+            factory.isNamespaceAware = true
+            factory.newPullParser()
+        }
+    }
+
+    @Test
+    fun parseExistingApks_NoParseFailures() {
+        val failedParsePackages = mutableListOf<File>()
+        for (apk in apks) {
+            try {
+                parser2.parsePackage(apk, ParsingPackageUtils.PARSE_IS_SYSTEM_DIR, false)
+            } catch (e: Exception) {
+                if (e.message!!.startsWith("Failed to parse")) {
+                    failedParsePackages.add(apk)
+                } else if (e.message!!.startsWith("Skipping target and overlay pair")) {
+                    // ignore
+                } else {
+                    throw e
+                }
+            }
+        }
+        assertThat(failedParsePackages).isEmpty()
+    }
+
+    @Test
+    fun parseManifestTag() {
+        val tag = "manifest"
+        validateTagAttr(tag, "package", null, 256)
+        validateTagAttr(tag, "sharedUserId", null, 256)
+        validateTagAttr(tag, "versionName", null, 1024)
+        validateTagCount("application", 100, tag)
+        validateTagCount("overlay", 100, tag)
+        validateTagCount("instrumentation", 100, tag)
+        validateTagCount("permission-group", 100, tag)
+        validateTagCount("permission-tree", 100, tag)
+        validateTagCount("supports-gl-texture", 100, tag)
+        validateTagCount("supports-screens", 100, tag)
+        validateTagCount("uses-configuration", 100, tag)
+        validateTagCount("uses-sdk", 100, tag)
+        validateTagCount("compatible-screens", 200, tag)
+        validateTagCount("queries", 200, tag)
+        validateTagCount("attribution", 400, tag)
+        validateTagCount("uses-feature", 400, tag)
+        validateTagCount("permission", 2000, tag)
+        validateTagCount("uses-permission", 20000, tag)
+    }
+
+    @Test
+    fun parseApplicationTag() {
+        val tag = "application"
+        validateTagAttr(
+            tag,
+            "backupAgent",
+            R.styleable.AndroidManifestApplication_backupAgent,
+            1024
+        )
+        validateTagAttrComponentName(
+            tag,
+            "backupAgent",
+            R.styleable.AndroidManifestApplication_backupAgent
+        )
+        validateTagAttr(
+            tag,
+            "manageSpaceActivity",
+            R.styleable.AndroidManifestApplication_manageSpaceActivity,
+            1024
+        )
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestApplication_name, 1024)
+        validateTagAttrComponentName(tag, "name", R.styleable.AndroidManifestApplication_name)
+        validateTagAttr(tag, "permission", R.styleable.AndroidManifestApplication_permission, 1024)
+        validateTagAttr(tag, "process", R.styleable.AndroidManifestApplication_process, 1024)
+        validateTagAttr(
+            tag,
+            "requiredAccountType",
+            R.styleable.AndroidManifestApplication_requiredAccountType,
+            1024
+        )
+        validateTagAttr(
+            tag,
+            "restrictedAccountType",
+            R.styleable.AndroidManifestApplication_restrictedAccountType,
+            1024
+        )
+        validateTagAttr(
+            tag,
+            "taskAffinity",
+            R.styleable.AndroidManifestApplication_taskAffinity,
+            1024
+        )
+        validateTagAttr(
+            tag,
+            "zygotePreloadName",
+            R.styleable.AndroidManifestApplication_zygotePreloadName,
+            1024
+        )
+        validateTagAttrComponentName(
+            tag,
+            "zygotePreloadName",
+            R.styleable.AndroidManifestApplication_zygotePreloadName
+        )
+        validateTagCount("profileable", 100, tag)
+        validateTagCount("uses-native-library", 100, tag)
+        validateTagCount("receiver", 1000, tag)
+        validateTagCount("service", 1000, tag)
+        validateTagCount("meta-data", 1000, tag)
+        validateTagCount("uses-library", 1000, tag)
+        validateTagCount("activity-alias", 4000, tag)
+        validateTagCount("provider", 8000, tag)
+        validateTagCount("activity", 40000, tag)
+    }
+
+    @Test
+    fun parseUsesNativeLibraryTag() {
+        val tag = "uses-native-library"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestUsesNativeLibrary_name, 1024)
+    }
+
+    @Test
+    fun parseReceiverTag() {
+        val tag = "receiver"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestReceiver_name, 1024)
+        validateTagAttrComponentName(tag, "name", R.styleable.AndroidManifestReceiver_name)
+        validateTagAttr(tag, "permission", R.styleable.AndroidManifestReceiver_permission, 1024)
+        validateTagAttr(tag, "process", R.styleable.AndroidManifestReceiver_process, 1024)
+        validateTagCount("meta-data", 1000, tag)
+        validateTagCount("intent-filter", 20000, tag)
+    }
+
+    @Test
+    fun parseServiceTag() {
+        val tag = "service"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestService_name, 1024)
+        validateTagAttrComponentName(tag, "name", R.styleable.AndroidManifestService_name)
+        validateTagAttr(tag, "permission", R.styleable.AndroidManifestService_permission, 1024)
+        validateTagAttr(tag, "process", R.styleable.AndroidManifestService_process, 1024)
+        validateTagCount("meta-data", 1000, tag)
+        validateTagCount("intent-filter", 20000, tag)
+    }
+
+    @Test
+    fun parseActivityAliasTag() {
+        val tag = "activity-alias"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestActivityAlias_name, 1024)
+        validateTagAttr(
+            tag,
+            "permission",
+            R.styleable.AndroidManifestActivityAlias_permission,
+            1024
+        )
+        validateTagAttr(
+            tag,
+            "targetActivity",
+            R.styleable.AndroidManifestActivityAlias_targetActivity,
+            1024
+        )
+        validateTagAttrComponentName(
+            tag,
+            "targetActivity",
+            R.styleable.AndroidManifestActivityAlias_targetActivity
+        )
+        validateTagCount("meta-data", 1000, tag)
+        validateTagCount("intent-filter", 20000, tag)
+    }
+
+    @Test
+    fun parseUsesLibraryTag() {
+        val tag = "uses-library"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestUsesLibrary_name, 1024)
+    }
+
+    @Test
+    fun parseActivityTag() {
+        val tag = "activity"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestActivity_name, 1024)
+        validateTagAttrComponentName(tag, "name", R.styleable.AndroidManifestActivity_name)
+        validateTagAttr(
+            tag,
+            "parentActivityName",
+            R.styleable.AndroidManifestActivity_parentActivityName,
+            1024
+        )
+        validateTagAttrComponentName(
+            tag,
+            "parentActivityName",
+            R.styleable.AndroidManifestActivity_parentActivityName
+        )
+        validateTagAttr(tag, "permission", R.styleable.AndroidManifestActivity_permission, 1024)
+        validateTagAttr(tag, "process", R.styleable.AndroidManifestActivity_process, 1024)
+        validateTagAttr(tag, "taskAffinity", R.styleable.AndroidManifestActivity_taskAffinity, 1024)
+        validateTagCount("layout", 1000, tag)
+        validateTagCount("meta-data", 1000, tag)
+        validateTagCount("intent-filter", 20000, tag)
+    }
+
+    @Test
+    fun parseOverlayTag() {
+        val tag = "overlay"
+        validateTagAttr(tag, "category", R.styleable.AndroidManifestResourceOverlay_category, 1024)
+        validateTagAttr(
+            tag,
+            "requiredSystemPropertyName",
+            R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyName,
+            1024
+        )
+        validateTagAttr(
+            tag,
+            "requiredSystemPropertyValue",
+            R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyValue,
+            PROP_VALUE_MAX
+        )
+        validateTagAttr(
+            tag,
+            "targetPackage",
+            R.styleable.AndroidManifestResourceOverlay_targetPackage,
+            256
+        )
+        validateTagAttr(
+            tag,
+            "targetName",
+            R.styleable.AndroidManifestResourceOverlay_targetName,
+            1024
+        )
+    }
+
+    @Test
+    fun parseInstrumentationTag() {
+        val tag = "instrumentation"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestInstrumentation_name, 1024)
+        validateTagAttrComponentName(tag, "name", R.styleable.AndroidManifestInstrumentation_name)
+        validateTagAttr(
+            tag,
+            "targetPackage",
+            R.styleable.AndroidManifestInstrumentation_targetPackage,
+            256
+        )
+        validateTagAttr(
+            tag,
+            "targetProcesses",
+            R.styleable.AndroidManifestInstrumentation_targetProcesses,
+            1024
+        )
+    }
+
+    @Test
+    fun parsePermissionGroupTag() {
+        val tag = "permission-group"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestPermissionGroup_name, 1024)
+    }
+
+    @Test
+    fun parsePermissionTreeTag() {
+        val tag = "permission-tree"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestPermissionTree_name, 1024)
+    }
+
+    @Test
+    fun parseSupportsGlTextureTag() {
+        val tag = "supports-gl-texture"
+        validateTagAttr(tag, "name", null, 1024)
+    }
+
+    @Test
+    fun parseUsesPermissionSdk23Tag() {
+        val tag = "uses-permission-sdk-23"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestUsesPermission_name, 1024)
+    }
+
+    @Test
+    fun parseCompatibleScreensTag() {
+        val tag = "compatible-screens"
+        validateTagCount("screen", 4000, tag)
+    }
+
+    @Test
+    fun parseQueriesTag() {
+        val tag = "queries"
+        validateTagCount("package", 1000, tag)
+        validateTagCount("intent", 2000, tag)
+        validateTagCount("provider", 8000, tag)
+    }
+
+    @Test
+    fun parsePackageTag() {
+        val tag = "package"
+        validateTagAttr(tag, "name", null, 1024)
+    }
+
+    @Test
+    fun parseIntentTag() {
+        val tag = "intent"
+        validateTagCount("action", 20000, tag)
+        validateTagCount("category", 40000, tag)
+        validateTagCount("data", 40000, tag)
+    }
+
+    @Test
+    fun parseProviderTag() {
+        val tag = "provider"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestProvider_name, 1024)
+        validateTagAttrComponentName(tag, "name", R.styleable.AndroidManifestProvider_name)
+        validateTagAttr(tag, "permission", R.styleable.AndroidManifestProvider_permission, 1024)
+        validateTagAttr(tag, "process", R.styleable.AndroidManifestProvider_process, 1024)
+        validateTagAttr(
+            tag,
+            "readPermission",
+            R.styleable.AndroidManifestProvider_readPermission,
+            1024
+        )
+        validateTagAttr(
+            tag,
+            "writePermission",
+            R.styleable.AndroidManifestProvider_writePermission,
+            1024
+        )
+        validateTagCount("grant-uri-permission", 100, tag)
+        validateTagCount("path-permission", 100, tag)
+        validateTagCount("meta-data", 1000, tag)
+        validateTagCount("intent-filter", 20000, tag)
+    }
+
+    @Test
+    fun parseGrantUriPermissionTag() {
+        val tag = "grant-uri-permission"
+        validateTagAttr(tag, "path", R.styleable.AndroidManifestGrantUriPermission_path, 4000)
+        validateTagAttr(
+            tag,
+            "pathPrefix",
+            R.styleable.AndroidManifestGrantUriPermission_pathPrefix,
+            4000
+        )
+        validateTagAttr(
+            tag,
+            "pathPattern",
+            R.styleable.AndroidManifestGrantUriPermission_pathPattern,
+            4000
+        )
+    }
+
+    @Test
+    fun parsePathPermissionTag() {
+        val tag = "path-permission"
+        validateTagAttr(tag, "path", R.styleable.AndroidManifestPathPermission_path, 4000)
+        validateTagAttr(
+            tag,
+            "pathPrefix",
+            R.styleable.AndroidManifestPathPermission_pathPrefix,
+            4000
+        )
+        validateTagAttr(
+            tag,
+            "pathPattern",
+            R.styleable.AndroidManifestPathPermission_pathPattern,
+            4000
+        )
+        validateTagAttr(
+            tag,
+            "permission",
+            R.styleable.AndroidManifestPathPermission_permission,
+            1024
+        )
+        validateTagAttr(
+            tag,
+            "readPermission",
+            R.styleable.AndroidManifestPathPermission_readPermission,
+            1024
+        )
+        validateTagAttr(
+            tag,
+            "writePermission",
+            R.styleable.AndroidManifestPathPermission_writePermission,
+            1024
+        )
+    }
+
+    @Test
+    fun parseMetaDataTag() {
+        val tag = "meta-data"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestMetaData_name, 1024)
+        validateTagAttr(tag, "value", R.styleable.AndroidManifestMetaData_value, 4000)
+    }
+
+    @Test
+    fun parseIntentFilterTag() {
+        val tag = "intent-filter"
+        validateTagCount("action", 20000, tag)
+        validateTagCount("category", 40000, tag)
+        validateTagCount("data", 40000, tag)
+    }
+
+    @Test
+    fun parseActionTag() {
+        val tag = "action"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestAction_name, 1024)
+    }
+
+    @Test
+    fun parseCategoryTag() {
+        val tag = "category"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestCategory_name, 1024)
+    }
+
+    @Test
+    fun parseDataTag() {
+        val tag = "data"
+        validateTagAttr(tag, "scheme", R.styleable.AndroidManifestData_scheme, 256)
+        validateTagAttr(tag, "host", R.styleable.AndroidManifestData_host, 256)
+        validateTagAttr(tag, "path", R.styleable.AndroidManifestData_path, 4000)
+        validateTagAttr(tag, "pathPattern", R.styleable.AndroidManifestData_pathPattern, 4000)
+        validateTagAttr(tag, "pathPrefix", R.styleable.AndroidManifestData_pathPrefix, 4000)
+        validateTagAttr(tag, "pathSuffix", R.styleable.AndroidManifestData_pathSuffix, 4000)
+        validateTagAttr(
+            tag,
+            "pathAdvancedPattern",
+            R.styleable.AndroidManifestData_pathAdvancedPattern,
+            4000
+        )
+        validateTagAttr(tag, "mimeType", R.styleable.AndroidManifestData_mimeType, 512)
+    }
+
+    @Test
+    fun parseUsesFeatureTag() {
+        val tag = "uses-feature"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestUsesFeature_name, 1024)
+    }
+
+    @Test
+    fun parsePermissionTag() {
+        val tag = "permission"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestPermission_name, 1024)
+        validateTagAttr(
+            tag,
+            "permissionGroup",
+            R.styleable.AndroidManifestPermission_permissionGroup,
+            256
+        )
+    }
+
+    @Test
+    fun parseUsesPermissionTag() {
+        val tag = "uses-permission"
+        validateTagAttr(tag, "name", R.styleable.AndroidManifestUsesPermission_name, 1024)
+    }
+
+    private fun validateTagAttrComponentName(tag: String, attr: String, index: Int) {
+        val passNames = arrayOf("com.android.TestClass", "TestClass", "_", "$", ".TestClass", "上")
+        for (name in passNames) {
+            val xml = "<$tag $attr=\"$name\" />"
+            pullParser.setInput(ByteArrayInputStream(xml.toByteArray()), null)
+            val validator = Validator()
+            pullParser.nextTag()
+            validator.validate(pullParser)
+            try {
+                validator.validateStrAttr(pullParser, attr, name)
+            } catch (e: SecurityException) {
+                fail(
+                    "Failed to parse attribute $attr in <$tag> as valid Java class name:" +
+                        " ${e.message}"
+                )
+            }
+            try {
+                validator.validateResStrAttr(pullParser, index, name)
+            } catch (e: SecurityException) {
+                fail(
+                    "Failed to parse attribute $attr in <$tag> as valid Java class name:" +
+                        " ${e.message}"
+                )
+            }
+        }
+
+        val badNames = arrayOf(
+            ";",
+            ",",
+            "[",
+            "]",
+            "(",
+            ")",
+            "{",
+            "}",
+            ":",
+            "?",
+            "-",
+            "%",
+            "^",
+            "*",
+            "|",
+            "/",
+            "\\"
+        )
+        for (name in badNames) {
+            val xml = "<$tag $attr=\"$name\" />"
+            pullParser.setInput(ByteArrayInputStream(xml.toByteArray()), null)
+            val validator = Validator()
+            pullParser.nextTag()
+            validator.validate(pullParser)
+            val e1 = assertThrows(
+                "$name is not valid Java class name",
+                SecurityException::class.java
+            ) {
+                validator.validateStrAttr(pullParser, attr, name)
+            }
+            assertEquals(expectedAttrComponentNameErrorMsg(name), e1.message)
+            val e2 = assertThrows(
+                "$name is not valid Java class name",
+                SecurityException::class.java
+            ) {
+                validator.validateResStrAttr(pullParser, index, name)
+            }
+            assertEquals(expectedAttrComponentNameErrorMsg(name), e2.message)
+        }
+    }
+
+    private fun validateTagAttr(tag: String, name: String, index: Int?, maxLen: Int) {
+        validateTagAttr_shouldPass(tag, name, index, maxLen)
+        validateTagAttr_shouldFail(tag, name, index, maxLen)
+    }
+
+    private fun validateTagAttr_shouldPass(
+        tag: String,
+        name: String,
+        index: Int?,
+        maxLen: Int
+    ) {
+        val value = "x".repeat(maxLen)
+        val xml = "<$tag $name=\"$value\" />"
+        pullParser.setInput(ByteArrayInputStream(xml.toByteArray()), null)
+        val validator = Validator()
+        pullParser.nextTag()
+        validator.validate(pullParser)
+        try {
+            validator.validateStrAttr(pullParser, name, value)
+        } catch (e: SecurityException) {
+            fail(
+                "Failed to parse valid <$tag> attribute $name with max length of $maxLen:" +
+                    " ${e.message}"
+            )
+        }
+        if (index != null) {
+            try {
+                validator.validateResStrAttr(pullParser, index, value)
+            } catch (e: SecurityException) {
+                fail(
+                    "Failed to parse valid <$tag> resource string attribute $name with max" +
+                        " length of $maxLen: ${e.message}"
+                )
+            }
+        }
+    }
+
+    private fun validateTagAttr_shouldFail(
+        tag: String,
+        name: String,
+        index: Int?,
+        maxLen: Int
+    ) {
+        val value = "x".repeat(maxLen + 1)
+        val xml = "<$tag $name=\"$value\" />"
+        pullParser.setInput(ByteArrayInputStream(xml.toByteArray()), null)
+        val validator = Validator()
+        pullParser.nextTag()
+        validator.validate(pullParser)
+        val e1 = assertThrows(SecurityException::class.java) {
+            validator.validateStrAttr(pullParser, name, value)
+        }
+        assertEquals(expectedAttrLengthErrorMsg(name, tag), e1.message)
+        if (index != null) {
+            val e2 = assertThrows(SecurityException::class.java) {
+                validator.validateResStrAttr(pullParser, index, value)
+            }
+            assertEquals(expectedResAttrLengthErrorMsg(tag), e2.message)
+        }
+    }
+
+    private fun validateTagCount(tag: String, maxNum: Int, parentTag: String) {
+        validateTagCount_shouldPass(tag, maxNum, parentTag)
+        validateTagCount_shouldFail(tag, maxNum, parentTag)
+    }
+
+    private fun validateTagCount_shouldPass(tag: String, maxNum: Int, parentTag: String) {
+        val tags = "<$tag />".repeat(maxNum)
+        val xml = "<$parentTag>$tags</$parentTag>"
+        try {
+            parseXmlStr(xml)
+        } catch (e: SecurityException) {
+            fail(
+                "Failed to parse <$tag> with max count limit of $maxNum under" +
+                        " <$parentTag>: ${e.message}"
+            )
+        }
+    }
+
+    private fun validateTagCount_shouldFail(tag: String, maxNum: Int, parentTag: String) {
+        val tags = "<$tag />".repeat(maxNum + 1)
+        val xml = "<$parentTag>$tags</$parentTag>"
+        val e = assertThrows(SecurityException::class.java) {
+            parseXmlStr(xml)
+        }
+        assertEquals(expectedCountErrorMsg(tag, parentTag), e.message)
+    }
+
+    @Test
+    fun parseUnexpectedTag_shouldSkip() {
+        val host = "x".repeat(256)
+        val dataTags = "<data host=\"$host\" />".repeat(2049)
+        val xml = "<manifest package=\"test\">$dataTags</manifest>"
+        parseXmlStr(xml)
+    }
+
+    fun parseXmlStr(manifestStr: String) {
+        pullParser.setInput(ByteArrayInputStream(manifestStr.toByteArray()), null)
+        val validator = Validator()
+        do {
+            val type = pullParser.next()
+            validator.validate(pullParser)
+        } while (type != XmlPullParser.END_DOCUMENT)
+    }
+
+    fun expectedCountErrorMsg(tag: String, parentTag: String) =
+            "The number of child $tag elements exceeded the max allowed in $parentTag"
+
+    fun expectedAttrLengthErrorMsg(attr: String, tag: String) =
+            "String length limit exceeded for attribute $attr in $tag"
+
+    fun expectedResAttrLengthErrorMsg(tag: String) =
+            "String length limit exceeded for attribute in $tag"
+
+    fun expectedAttrComponentNameErrorMsg(name: String) = "$name is not a valid Java class name"
+}
diff --git a/services/tests/servicestests/src/com/android/server/power/NotifierTest.java b/services/tests/servicestests/src/com/android/server/power/NotifierTest.java
deleted file mode 100644
index 2f03965..0000000
--- a/services/tests/servicestests/src/com/android/server/power/NotifierTest.java
+++ /dev/null
@@ -1,375 +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.server.power;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-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.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.Context;
-import android.content.res.Resources;
-import android.hardware.SensorManager;
-import android.hardware.display.AmbientDisplayConfiguration;
-import android.os.BatteryStats;
-import android.os.Handler;
-import android.os.IWakeLockCallback;
-import android.os.Looper;
-import android.os.PowerManager;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.VibrationAttributes;
-import android.os.Vibrator;
-import android.os.test.TestLooper;
-import android.provider.Settings;
-import android.testing.TestableContext;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.internal.app.IBatteryStats;
-import com.android.server.LocalServices;
-import com.android.server.policy.WindowManagerPolicy;
-import com.android.server.power.batterysaver.BatterySaverController;
-import com.android.server.power.batterysaver.BatterySaverPolicy;
-import com.android.server.power.batterysaver.BatterySavingStats;
-import com.android.server.power.stats.BatteryStatsImpl;
-import com.android.server.statusbar.StatusBarManagerInternal;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.concurrent.Executor;
-
-/**
- * Tests for {@link com.android.server.power.Notifier}
- */
-public class NotifierTest {
-    private static final String SYSTEM_PROPERTY_QUIESCENT = "ro.boot.quiescent";
-    private static final int USER_ID = 0;
-
-    @Mock private BatterySaverController mBatterySaverControllerMock;
-    @Mock private BatterySaverPolicy mBatterySaverPolicyMock;
-    @Mock private PowerManagerService.NativeWrapper mNativeWrapperMock;
-    @Mock private Notifier mNotifierMock;
-    @Mock private WirelessChargerDetector mWirelessChargerDetectorMock;
-    @Mock private AmbientDisplayConfiguration mAmbientDisplayConfigurationMock;
-    @Mock private SystemPropertiesWrapper mSystemPropertiesMock;
-    @Mock private InattentiveSleepWarningController mInattentiveSleepWarningControllerMock;
-    @Mock private BatteryStatsImpl mBatteryStats;
-    @Mock private Vibrator mVibrator;
-    @Mock private StatusBarManagerInternal mStatusBarManagerInternal;
-
-    private PowerManagerService mService;
-    private Context mContextSpy;
-    private Resources mResourcesSpy;
-    private TestLooper mTestLooper = new TestLooper();
-    private FakeExecutor mTestExecutor = new FakeExecutor();
-    private Notifier mNotifier;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-
-        LocalServices.removeServiceForTest(StatusBarManagerInternal.class);
-        LocalServices.addService(StatusBarManagerInternal.class, mStatusBarManagerInternal);
-
-        mContextSpy = spy(new TestableContext(InstrumentationRegistry.getContext()));
-        mResourcesSpy = spy(mContextSpy.getResources());
-        when(mContextSpy.getResources()).thenReturn(mResourcesSpy);
-        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_QUIESCENT), anyString())).thenReturn("");
-        when(mContextSpy.getSystemService(Vibrator.class)).thenReturn(mVibrator);
-
-        mService = new PowerManagerService(mContextSpy, mInjector);
-    }
-
-    @Test
-    public void testVibrateEnabled_wiredCharging() {
-        createNotifier();
-
-        // GIVEN the charging vibration is enabled
-        enableChargingVibration(true);
-
-        // WHEN wired charging starts
-        mNotifier.onWiredChargingStarted(USER_ID);
-        mTestLooper.dispatchAll();
-        mTestExecutor.simulateAsyncExecutionOfLastCommand();
-
-        // THEN the device vibrates once
-        verify(mVibrator, times(1)).vibrate(any(), any(VibrationAttributes.class));
-    }
-
-    @Test
-    public void testVibrateDisabled_wiredCharging() {
-        createNotifier();
-
-        // GIVEN the charging vibration is disabled
-        enableChargingVibration(false);
-
-        // WHEN wired charging starts
-        mNotifier.onWiredChargingStarted(USER_ID);
-        mTestLooper.dispatchAll();
-        mTestExecutor.simulateAsyncExecutionOfLastCommand();
-
-        // THEN the device doesn't vibrate
-        verify(mVibrator, never()).vibrate(any(), any(VibrationAttributes.class));
-    }
-
-    @Test
-    public void testVibrateEnabled_wirelessCharging() {
-        createNotifier();
-
-        // GIVEN the charging vibration is enabled
-        enableChargingVibration(true);
-
-        // WHEN wireless charging starts
-        mNotifier.onWirelessChargingStarted(5, USER_ID);
-        mTestLooper.dispatchAll();
-        mTestExecutor.simulateAsyncExecutionOfLastCommand();
-
-        // THEN the device vibrates once
-        verify(mVibrator, times(1)).vibrate(any(), any(VibrationAttributes.class));
-    }
-
-    @Test
-    public void testVibrateDisabled_wirelessCharging() {
-        createNotifier();
-
-        // GIVEN the charging vibration is disabeld
-        enableChargingVibration(false);
-
-        // WHEN wireless charging starts
-        mNotifier.onWirelessChargingStarted(5, USER_ID);
-        mTestLooper.dispatchAll();
-        mTestExecutor.simulateAsyncExecutionOfLastCommand();
-
-        // THEN the device doesn't vibrate
-        verify(mVibrator, never()).vibrate(any(), any(VibrationAttributes.class));
-    }
-
-    @Test
-    public void testVibrateEnabled_dndOn() {
-        createNotifier();
-
-        // GIVEN the charging vibration is enabled but dnd is on
-        enableChargingVibration(true);
-        enableChargingFeedback(
-                /* chargingFeedbackEnabled */ true,
-                /* dndOn */ true);
-
-        // WHEN wired charging starts
-        mNotifier.onWiredChargingStarted(USER_ID);
-        mTestLooper.dispatchAll();
-        mTestExecutor.simulateAsyncExecutionOfLastCommand();
-
-        // THEN the device doesn't vibrate
-        verify(mVibrator, never()).vibrate(any(), any(VibrationAttributes.class));
-    }
-
-    @Test
-    public void testWirelessAnimationEnabled() {
-        // GIVEN the wireless charging animation is enabled
-        when(mResourcesSpy.getBoolean(
-                com.android.internal.R.bool.config_showBuiltinWirelessChargingAnim))
-                .thenReturn(true);
-        createNotifier();
-
-        // WHEN wireless charging starts
-        mNotifier.onWirelessChargingStarted(5, USER_ID);
-        mTestLooper.dispatchAll();
-        mTestExecutor.simulateAsyncExecutionOfLastCommand();
-
-        // THEN the charging animation is triggered
-        verify(mStatusBarManagerInternal, times(1)).showChargingAnimation(5);
-    }
-
-    @Test
-    public void testWirelessAnimationDisabled() {
-        // GIVEN the wireless charging animation is disabled
-        when(mResourcesSpy.getBoolean(
-                com.android.internal.R.bool.config_showBuiltinWirelessChargingAnim))
-                .thenReturn(false);
-        createNotifier();
-
-        // WHEN wireless charging starts
-        mNotifier.onWirelessChargingStarted(5, USER_ID);
-        mTestLooper.dispatchAll();
-        mTestExecutor.simulateAsyncExecutionOfLastCommand();
-
-        // THEN the charging animation never gets called
-        verify(mStatusBarManagerInternal, never()).showChargingAnimation(anyInt());
-    }
-
-    @Test
-    public void testOnWakeLockListener_RemoteException_NoRethrow() {
-        createNotifier();
-
-        IWakeLockCallback exceptingCallback = new IWakeLockCallback.Stub() {
-            @Override public void onStateChanged(boolean enabled) throws RemoteException {
-                throw new RemoteException("Just testing");
-            }
-        };
-
-        final int uid = 1234;
-        final int pid = 5678;
-        mNotifier.onWakeLockReleased(PowerManager.PARTIAL_WAKE_LOCK, "wakelockTag",
-                "my.package.name", uid, pid, /* workSource= */ null, /* historyTag= */ null,
-                exceptingCallback);
-        mNotifier.onWakeLockAcquired(PowerManager.PARTIAL_WAKE_LOCK, "wakelockTag",
-                "my.package.name", uid, pid, /* workSource= */ null, /* historyTag= */ null,
-                exceptingCallback);
-        mNotifier.onWakeLockChanging(PowerManager.PARTIAL_WAKE_LOCK, "wakelockTag",
-                "my.package.name", uid, pid, /* workSource= */ null, /* historyTag= */ null,
-                exceptingCallback,
-                PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "wakelockTag",
-                "my.package.name", uid, pid, /* newWorkSource= */ null, /* newHistoryTag= */ null,
-                exceptingCallback);
-        mTestLooper.dispatchAll();
-        // If we didn't throw, we're good!
-    }
-
-    private final PowerManagerService.Injector mInjector = new PowerManagerService.Injector() {
-        @Override
-        Notifier createNotifier(Looper looper, Context context, IBatteryStats batteryStats,
-                SuspendBlocker suspendBlocker, WindowManagerPolicy policy,
-                FaceDownDetector faceDownDetector, ScreenUndimDetector screenUndimDetector,
-                Executor backgroundExecutor) {
-            return mNotifierMock;
-        }
-
-        @Override
-        SuspendBlocker createSuspendBlocker(PowerManagerService service, String name) {
-            return super.createSuspendBlocker(service, name);
-        }
-
-        @Override
-        BatterySaverPolicy createBatterySaverPolicy(
-                Object lock, Context context, BatterySavingStats batterySavingStats) {
-            return mBatterySaverPolicyMock;
-        }
-
-        @Override
-        BatterySaverController createBatterySaverController(
-                Object lock, Context context, BatterySaverPolicy batterySaverPolicy,
-                BatterySavingStats batterySavingStats) {
-            return mBatterySaverControllerMock;
-        }
-
-        @Override
-        PowerManagerService.NativeWrapper createNativeWrapper() {
-            return mNativeWrapperMock;
-        }
-
-        @Override
-        WirelessChargerDetector createWirelessChargerDetector(
-                SensorManager sensorManager, SuspendBlocker suspendBlocker, Handler handler) {
-            return mWirelessChargerDetectorMock;
-        }
-
-        @Override
-        AmbientDisplayConfiguration createAmbientDisplayConfiguration(Context context) {
-            return mAmbientDisplayConfigurationMock;
-        }
-
-        @Override
-        InattentiveSleepWarningController createInattentiveSleepWarningController() {
-            return mInattentiveSleepWarningControllerMock;
-        }
-
-        @Override
-        public SystemPropertiesWrapper createSystemPropertiesWrapper() {
-            return mSystemPropertiesMock;
-        }
-
-        @Override
-        void invalidateIsInteractiveCaches() {
-            // Avoids an SELinux denial.
-        }
-    };
-
-    private void enableChargingFeedback(boolean chargingFeedbackEnabled, boolean dndOn) {
-        // enable/disable charging feedback
-        Settings.Secure.putIntForUser(
-                mContextSpy.getContentResolver(),
-                Settings.Secure.CHARGING_SOUNDS_ENABLED,
-                chargingFeedbackEnabled ? 1 : 0,
-                USER_ID);
-
-        // toggle on/off dnd
-        Settings.Global.putInt(
-                mContextSpy.getContentResolver(),
-                Settings.Global.ZEN_MODE,
-                dndOn ? Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS
-                        : Settings.Global.ZEN_MODE_OFF);
-    }
-
-    private void enableChargingVibration(boolean enable) {
-        enableChargingFeedback(true, false);
-
-        Settings.Secure.putIntForUser(
-                mContextSpy.getContentResolver(),
-                Settings.Secure.CHARGING_VIBRATION_ENABLED,
-                enable ? 1 : 0,
-                USER_ID);
-    }
-
-    private void createNotifier() {
-        mNotifier = new Notifier(
-                mTestLooper.getLooper(),
-                mContextSpy,
-                IBatteryStats.Stub.asInterface(ServiceManager.getService(
-                        BatteryStats.SERVICE_NAME)),
-                mInjector.createSuspendBlocker(mService, "testBlocker"),
-                null,
-                null,
-                null,
-                mTestExecutor);
-    }
-
-    private static class FakeExecutor implements Executor {
-        private Runnable mLastCommand;
-
-        @Override
-        public void execute(Runnable command) {
-            assertNull(mLastCommand);
-            assertNotNull(command);
-            mLastCommand = command;
-        }
-
-        public Runnable getAndResetLastCommand() {
-            Runnable toReturn = mLastCommand;
-            mLastCommand = null;
-            return toReturn;
-        }
-
-        public void simulateAsyncExecutionOfLastCommand() {
-            Runnable toRun = getAndResetLastCommand();
-            if (toRun != null) {
-                toRun.run();
-            }
-        }
-    }
-
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
deleted file mode 100644
index 431d3a6..0000000
--- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
+++ /dev/null
@@ -1,2886 +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.server.power;
-
-import static android.app.ActivityManager.PROCESS_STATE_BOUND_TOP;
-import static android.app.ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE;
-import static android.app.ActivityManager.PROCESS_STATE_RECEIVER;
-import static android.app.ActivityManager.PROCESS_STATE_TOP_SLEEPING;
-import static android.os.PowerManager.USER_ACTIVITY_EVENT_BUTTON;
-import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP;
-import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE;
-import static android.os.PowerManagerInternal.WAKEFULNESS_DOZING;
-import static android.os.PowerManagerInternal.WAKEFULNESS_DREAMING;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.junit.Assert.assertFalse;
-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.anyLong;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.argThat;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.isA;
-import static org.mockito.ArgumentMatchers.isNull;
-import static org.mockito.ArgumentMatchers.same;
-import static org.mockito.Mockito.atLeastOnce;
-import static org.mockito.Mockito.atMost;
-import static org.mockito.Mockito.clearInvocations;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.doReturn;
-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.app.ActivityManagerInternal;
-import android.attention.AttentionManagerInternal;
-import android.compat.testing.PlatformCompatChangeRule;
-import android.content.AttributionSource;
-import android.content.Context;
-import android.content.ContextWrapper;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.PermissionChecker;
-import android.content.res.Resources;
-import android.hardware.SensorManager;
-import android.hardware.display.AmbientDisplayConfiguration;
-import android.hardware.display.DisplayManagerInternal;
-import android.hardware.display.DisplayManagerInternal.DisplayPowerRequest;
-import android.hardware.power.Boost;
-import android.hardware.power.Mode;
-import android.os.BatteryManager;
-import android.os.BatteryManagerInternal;
-import android.os.BatterySaverPolicyConfig;
-import android.os.Binder;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.IWakeLockCallback;
-import android.os.Looper;
-import android.os.PowerManager;
-import android.os.PowerManagerInternal;
-import android.os.PowerSaveState;
-import android.os.UserHandle;
-import android.os.test.TestLooper;
-import android.provider.DeviceConfig;
-import android.provider.Settings;
-import android.service.dreams.DreamManagerInternal;
-import android.sysprop.PowerProperties;
-import android.test.mock.MockContentResolver;
-import android.view.Display;
-import android.view.DisplayInfo;
-
-import androidx.test.core.app.ApplicationProvider;
-
-import com.android.internal.app.IBatteryStats;
-import com.android.internal.util.test.FakeSettingsProvider;
-import com.android.server.LocalServices;
-import com.android.server.SystemService;
-import com.android.server.display.feature.DeviceConfigParameterProvider;
-import com.android.server.lights.LightsManager;
-import com.android.server.policy.WindowManagerPolicy;
-import com.android.server.power.PowerManagerService.BatteryReceiver;
-import com.android.server.power.PowerManagerService.BinderService;
-import com.android.server.power.PowerManagerService.NativeWrapper;
-import com.android.server.power.PowerManagerService.UserSwitchedReceiver;
-import com.android.server.power.PowerManagerService.WakeLock;
-import com.android.server.power.batterysaver.BatterySaverController;
-import com.android.server.power.batterysaver.BatterySaverPolicy;
-import com.android.server.power.batterysaver.BatterySaverStateMachine;
-import com.android.server.power.batterysaver.BatterySavingStats;
-import com.android.server.testutils.OffsettableClock;
-
-import libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges;
-import libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TestRule;
-import org.mockito.ArgumentCaptor;
-import org.mockito.ArgumentMatcher;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-import org.mockito.stubbing.Answer;
-
-import java.time.Duration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.Executor;
-import java.util.concurrent.atomic.AtomicReference;
-
-/**
- * Tests for {@link com.android.server.power.PowerManagerService}.
- *
- * Build/Install/Run:
- *  atest FrameworksServicesTests:PowerManagerServiceTest
- */
-@SuppressWarnings("GuardedBy")
-public class PowerManagerServiceTest {
-    private static final String SYSTEM_PROPERTY_QUIESCENT = "ro.boot.quiescent";
-    private static final String SYSTEM_PROPERTY_REBOOT_REASON = "sys.boot.reason";
-
-    private static final float BRIGHTNESS_FACTOR = 0.7f;
-    private static final boolean BATTERY_SAVER_ENABLED = true;
-
-    @Mock private BatterySaverController mBatterySaverControllerMock;
-    @Mock private BatterySaverPolicy mBatterySaverPolicyMock;
-    @Mock private BatterySaverStateMachine mBatterySaverStateMachineMock;
-    @Mock private LightsManager mLightsManagerMock;
-    @Mock private DisplayManagerInternal mDisplayManagerInternalMock;
-    @Mock private BatteryManagerInternal mBatteryManagerInternalMock;
-    @Mock private ActivityManagerInternal mActivityManagerInternalMock;
-    @Mock private AttentionManagerInternal mAttentionManagerInternalMock;
-    @Mock private DreamManagerInternal mDreamManagerInternalMock;
-    @Mock private PowerManagerService.NativeWrapper mNativeWrapperMock;
-    @Mock private Notifier mNotifierMock;
-    @Mock private WirelessChargerDetector mWirelessChargerDetectorMock;
-    @Mock private AmbientDisplayConfiguration mAmbientDisplayConfigurationMock;
-    @Mock private SystemPropertiesWrapper mSystemPropertiesMock;
-    @Mock private LowPowerStandbyController mLowPowerStandbyControllerMock;
-    @Mock private Callable<Void> mInvalidateInteractiveCachesMock;
-    @Mock private InattentiveSleepWarningController mInattentiveSleepWarningControllerMock;
-    @Mock private PowerManagerService.PermissionCheckerWrapper mPermissionCheckerWrapperMock;
-    @Mock private PowerManagerService.PowerPropertiesWrapper mPowerPropertiesWrapper;
-    @Mock private DeviceConfigParameterProvider mDeviceParameterProvider;
-
-    @Rule public TestRule compatChangeRule = new PlatformCompatChangeRule();
-
-    private PowerManagerService mService;
-    private ContextWrapper mContextSpy;
-    private BatteryReceiver mBatteryReceiver;
-    private UserSwitchedReceiver mUserSwitchedReceiver;
-    private Resources mResourcesSpy;
-    private OffsettableClock mClock;
-    private long mLastElapsedRealtime;
-    private TestLooper mTestLooper;
-
-    private static class IntentFilterMatcher implements ArgumentMatcher<IntentFilter> {
-        private final IntentFilter mFilter;
-
-        IntentFilterMatcher(IntentFilter filter) {
-            mFilter = filter;
-        }
-
-        @Override
-        public boolean matches(IntentFilter other) {
-            if (other.countActions() != mFilter.countActions()) {
-                return false;
-            }
-            for (int i = 0; i < mFilter.countActions(); i++) {
-                if (!mFilter.getAction(i).equals(other.getAction(i))) {
-                    return false;
-                }
-            }
-            return true;
-        }
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
-        FakeSettingsProvider.clearSettingsProvider();
-
-        PowerSaveState powerSaveState = new PowerSaveState.Builder()
-                .setBatterySaverEnabled(BATTERY_SAVER_ENABLED)
-                .setBrightnessFactor(BRIGHTNESS_FACTOR)
-                .build();
-        when(mBatterySaverPolicyMock.getBatterySaverPolicy(
-                eq(PowerManager.ServiceType.SCREEN_BRIGHTNESS)))
-                .thenReturn(powerSaveState);
-        when(mBatteryManagerInternalMock.isPowered(anyInt())).thenReturn(false);
-        when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(false);
-        when(mDisplayManagerInternalMock.requestPowerState(anyInt(), any(), anyBoolean()))
-                .thenReturn(true);
-        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_QUIESCENT), anyString())).thenReturn("");
-        when(mAmbientDisplayConfigurationMock.ambientDisplayAvailable()).thenReturn(true);
-
-        addLocalServiceMock(LightsManager.class, mLightsManagerMock);
-        addLocalServiceMock(DisplayManagerInternal.class, mDisplayManagerInternalMock);
-        addLocalServiceMock(BatteryManagerInternal.class, mBatteryManagerInternalMock);
-        addLocalServiceMock(ActivityManagerInternal.class, mActivityManagerInternalMock);
-        addLocalServiceMock(AttentionManagerInternal.class, mAttentionManagerInternalMock);
-        addLocalServiceMock(DreamManagerInternal.class, mDreamManagerInternalMock);
-
-        mContextSpy = spy(new ContextWrapper(ApplicationProvider.getApplicationContext()));
-        mResourcesSpy = spy(mContextSpy.getResources());
-        when(mContextSpy.getResources()).thenReturn(mResourcesSpy);
-
-        MockContentResolver cr = new MockContentResolver(mContextSpy);
-        cr.addProvider(Settings.AUTHORITY, new FakeSettingsProvider());
-        when(mContextSpy.getContentResolver()).thenReturn(cr);
-
-        Settings.Global.putInt(mContextSpy.getContentResolver(),
-                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0);
-        Settings.Secure.putInt(mContextSpy.getContentResolver(),
-                Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 0);
-
-        mClock = new OffsettableClock.Stopped();
-        mTestLooper = new TestLooper(mClock::now);
-    }
-
-    private PowerManagerService createService() {
-        mService = new PowerManagerService(mContextSpy, new PowerManagerService.Injector() {
-            @Override
-            Notifier createNotifier(Looper looper, Context context, IBatteryStats batteryStats,
-                    SuspendBlocker suspendBlocker, WindowManagerPolicy policy,
-                    FaceDownDetector faceDownDetector, ScreenUndimDetector screenUndimDetector,
-                    Executor executor) {
-                return mNotifierMock;
-            }
-
-            @Override
-            SuspendBlocker createSuspendBlocker(PowerManagerService service, String name) {
-                return super.createSuspendBlocker(service, name);
-            }
-
-            @Override
-            BatterySaverPolicy createBatterySaverPolicy(
-                    Object lock, Context context, BatterySavingStats batterySavingStats) {
-                return mBatterySaverPolicyMock;
-            }
-
-            @Override
-            BatterySaverController createBatterySaverController(
-                    Object lock, Context context, BatterySaverPolicy batterySaverPolicy,
-                    BatterySavingStats batterySavingStats) {
-                return mBatterySaverControllerMock;
-            }
-
-            @Override
-            BatterySaverStateMachine createBatterySaverStateMachine(Object lock, Context context,
-                    BatterySaverController batterySaverController) {
-                return mBatterySaverStateMachineMock;
-            }
-
-            @Override
-            NativeWrapper createNativeWrapper() {
-                return mNativeWrapperMock;
-            }
-
-            @Override
-            WirelessChargerDetector createWirelessChargerDetector(
-                    SensorManager sensorManager, SuspendBlocker suspendBlocker, Handler handler) {
-                return mWirelessChargerDetectorMock;
-            }
-
-            @Override
-            AmbientDisplayConfiguration createAmbientDisplayConfiguration(Context context) {
-                return mAmbientDisplayConfigurationMock;
-            }
-
-            @Override
-            InattentiveSleepWarningController createInattentiveSleepWarningController() {
-                return mInattentiveSleepWarningControllerMock;
-            }
-
-            @Override
-            public SystemPropertiesWrapper createSystemPropertiesWrapper() {
-                return mSystemPropertiesMock;
-            }
-
-            @Override
-            PowerManagerService.Clock createClock() {
-                return new PowerManagerService.Clock() {
-                    @Override
-                    public long uptimeMillis() {
-                        return mClock.now();
-                    }
-
-                    @Override
-                    public long elapsedRealtime() {
-                        mLastElapsedRealtime = mClock.now();
-                        return mLastElapsedRealtime;
-                    }
-                };
-            }
-
-            @Override
-            Handler createHandler(Looper looper, Handler.Callback callback) {
-                return new Handler(mTestLooper.getLooper(), callback);
-            }
-
-            @Override
-            void invalidateIsInteractiveCaches() {
-                try {
-                    mInvalidateInteractiveCachesMock.call();
-                } catch (Exception e) {
-                    throw new RuntimeException(e);
-                }
-            }
-
-            @Override
-            LowPowerStandbyController createLowPowerStandbyController(Context context,
-                    Looper looper) {
-                return mLowPowerStandbyControllerMock;
-            }
-
-            @Override
-            PowerManagerService.PermissionCheckerWrapper createPermissionCheckerWrapper() {
-                return mPermissionCheckerWrapperMock;
-            }
-
-            @Override
-            PowerManagerService.PowerPropertiesWrapper createPowerPropertiesWrapper() {
-                return mPowerPropertiesWrapper;
-            }
-
-            @Override
-            DeviceConfigParameterProvider createDeviceConfigParameterProvider() {
-                return mDeviceParameterProvider;
-            }
-        });
-        return mService;
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        LocalServices.removeServiceForTest(LightsManager.class);
-        LocalServices.removeServiceForTest(DisplayManagerInternal.class);
-        LocalServices.removeServiceForTest(BatteryManagerInternal.class);
-        LocalServices.removeServiceForTest(ActivityManagerInternal.class);
-        FakeSettingsProvider.clearSettingsProvider();
-    }
-
-    /**
-     * Creates a mock and registers it to {@link LocalServices}.
-     */
-    private static <T> void addLocalServiceMock(Class<T> clazz, T mock) {
-        LocalServices.removeServiceForTest(clazz);
-        LocalServices.addService(clazz, mock);
-    }
-
-    private void startSystem() {
-        mService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
-
-        // Grab the BatteryReceiver
-        ArgumentCaptor<BatteryReceiver> batCaptor = ArgumentCaptor.forClass(BatteryReceiver.class);
-        IntentFilter batFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
-        batFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
-        verify(mContextSpy).registerReceiver(batCaptor.capture(),
-                argThat(new IntentFilterMatcher(batFilter)), isNull(), isA(Handler.class));
-        mBatteryReceiver = batCaptor.getValue();
-
-        // Grab the UserSwitchedReceiver
-        ArgumentCaptor<UserSwitchedReceiver> userSwitchedCaptor =
-                ArgumentCaptor.forClass(UserSwitchedReceiver.class);
-        IntentFilter usFilter = new IntentFilter(Intent.ACTION_USER_SWITCHED);
-        verify(mContextSpy).registerReceiver(userSwitchedCaptor.capture(),
-                argThat(new IntentFilterMatcher(usFilter)), isNull(), isA(Handler.class));
-        mUserSwitchedReceiver = userSwitchedCaptor.getValue();
-
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-    }
-
-    private void forceSleep() {
-        mService.getBinderServiceInstance().goToSleep(mClock.now(),
-                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
-    }
-
-    private void forceDream() {
-        mService.getBinderServiceInstance().nap(mClock.now());
-    }
-
-    private void forceAwake() {
-        mService.getBinderServiceInstance().wakeUp(mClock.now(),
-                PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name");
-    }
-
-    private void forceDozing() {
-        mService.getBinderServiceInstance().goToSleep(mClock.now(),
-                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0);
-    }
-
-    private void setPluggedIn(boolean isPluggedIn) {
-        // Set the callback to return the new state
-        when(mBatteryManagerInternalMock.isPowered(anyInt()))
-                .thenReturn(isPluggedIn);
-        // Trigger PowerManager to reread the plug-in state
-        mBatteryReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_BATTERY_CHANGED));
-    }
-
-    private void setBatteryLevel(int batteryLevel) {
-        when(mBatteryManagerInternalMock.getBatteryLevel())
-                .thenReturn(batteryLevel);
-        mBatteryReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_BATTERY_CHANGED));
-    }
-
-    private void setBatteryHealth(int batteryHealth) {
-        when(mBatteryManagerInternalMock.getBatteryHealth())
-                .thenReturn(batteryHealth);
-        mBatteryReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_BATTERY_CHANGED));
-    }
-
-    private void setAttentiveTimeout(int attentiveTimeoutMillis) {
-        Settings.Secure.putInt(
-                mContextSpy.getContentResolver(), Settings.Secure.ATTENTIVE_TIMEOUT,
-                attentiveTimeoutMillis);
-    }
-
-    private void setAttentiveWarningDuration(int attentiveWarningDurationMillis) {
-        when(mResourcesSpy.getInteger(
-                com.android.internal.R.integer.config_attentiveWarningDuration))
-                .thenReturn(attentiveWarningDurationMillis);
-    }
-
-    private void setMinimumScreenOffTimeoutConfig(int minimumScreenOffTimeoutConfigMillis) {
-        when(mResourcesSpy.getInteger(
-                com.android.internal.R.integer.config_minimumScreenOffTimeout))
-                .thenReturn(minimumScreenOffTimeoutConfigMillis);
-    }
-
-    private void setDreamsDisabledByAmbientModeSuppressionConfig(boolean disable) {
-        when(mResourcesSpy.getBoolean(
-                com.android.internal.R.bool.config_dreamsDisabledByAmbientModeSuppressionConfig))
-                .thenReturn(disable);
-    }
-
-    private void setDreamsBatteryLevelDrainConfig(int threshold) {
-        when(mResourcesSpy.getInteger(
-                com.android.internal.R.integer.config_dreamsBatteryLevelDrainCutoff)).thenReturn(
-                threshold);
-    }
-
-    private void advanceTime(long timeMs) {
-        mClock.fastForward(timeMs);
-        mTestLooper.dispatchAll();
-    }
-
-    @Test
-    public void testCreateService_initializesNativeServiceAndSetsPowerModes() {
-        PowerManagerService service = createService();
-        verify(mNativeWrapperMock).nativeInit(same(service));
-        verify(mNativeWrapperMock).nativeSetPowerMode(eq(Mode.INTERACTIVE), eq(true));
-        verify(mNativeWrapperMock).nativeSetPowerMode(eq(Mode.DOUBLE_TAP_TO_WAKE), eq(false));
-    }
-
-    @Test
-    public void testGetLastShutdownReasonInternal() {
-        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_REBOOT_REASON), any())).thenReturn(
-                "shutdown,thermal");
-        createService();
-        int reason = mService.getLastShutdownReasonInternal();
-        assertThat(reason).isEqualTo(PowerManager.SHUTDOWN_REASON_THERMAL_SHUTDOWN);
-    }
-
-    @Test
-    public void testWakefulnessAwake_InitialValue() {
-        createService();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-    }
-
-    @Test
-    public void testWakefulnessSleep_NoDozeSleepFlag() {
-        createService();
-        // Start with AWAKE state
-        startSystem();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        // Take a nap and verify.
-        mService.getBinderServiceInstance().goToSleep(mClock.now(),
-                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-    }
-
-    @Test
-    public void testWakefulnessSleep_SoftSleepFlag_NoWakelocks() {
-        createService();
-        // Start with AWAKE state
-        startSystem();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        // Take a nap and verify we go to sleep.
-        mService.getBinderServiceInstance().goToSleep(mClock.now(),
-                PowerManager.GO_TO_SLEEP_REASON_APPLICATION,
-                PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
-    }
-
-    @Test
-    public void testWakefulnessSleep_SoftSleepFlag_WithPartialWakelock() {
-        createService();
-        // Start with AWAKE state
-        startSystem();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        // Grab a wakelock
-        final String tag = "wakelock1";
-        final String packageName = "pkg.name";
-        final IBinder token = new Binder();
-        final int flags = PowerManager.PARTIAL_WAKE_LOCK;
-        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY,
-                null /* callback */);
-
-        // Take a nap and verify we stay awake.
-        mService.getBinderServiceInstance().goToSleep(mClock.now(),
-                PowerManager.GO_TO_SLEEP_REASON_APPLICATION,
-                PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
-    }
-
-    @Test
-    public void testWakefulnessSleep_SoftSleepFlag_WithFullWakelock() {
-        createService();
-        // Start with AWAKE state
-        startSystem();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        // Grab a wakelock
-        final String tag = "wakelock1";
-        final String packageName = "pkg.name";
-        final IBinder token = new Binder();
-        final int flags = PowerManager.FULL_WAKE_LOCK;
-        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY,
-                null /* callback */);
-
-        // Take a nap and verify we stay awake.
-        mService.getBinderServiceInstance().goToSleep(mClock.now(),
-                PowerManager.GO_TO_SLEEP_REASON_APPLICATION,
-                PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-    }
-
-    @Test
-    public void testWakefulnessSleep_SoftSleepFlag_WithScreenBrightWakelock() {
-        createService();
-        // Start with AWAKE state
-        startSystem();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        // Grab a wakelock
-        final String tag = "wakelock1";
-        final String packageName = "pkg.name";
-        final IBinder token = new Binder();
-        final int flags = PowerManager.SCREEN_BRIGHT_WAKE_LOCK;
-        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY,
-                null /* callback */);
-
-        // Take a nap and verify we stay awake.
-        mService.getBinderServiceInstance().goToSleep(mClock.now(),
-                PowerManager.GO_TO_SLEEP_REASON_APPLICATION,
-                PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-    }
-    @Test
-    public void testWakefulnessSleep_SoftSleepFlag_WithScreenDimWakelock() {
-        createService();
-        // Start with AWAKE state
-        startSystem();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        // Grab a wakelock
-        final String tag = "wakelock1";
-        final String packageName = "pkg.name";
-        final IBinder token = new Binder();
-        final int flags = PowerManager.SCREEN_DIM_WAKE_LOCK;
-        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY,
-                null /* callback */);
-
-        // Take a nap and verify we stay awake.
-        mService.getBinderServiceInstance().goToSleep(mClock.now(),
-                PowerManager.GO_TO_SLEEP_REASON_APPLICATION,
-                PowerManager.GO_TO_SLEEP_FLAG_SOFT_SLEEP);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-    }
-
-    @Test
-    @EnableCompatChanges({PowerManagerService.REQUIRE_TURN_SCREEN_ON_PERMISSION})
-    public void testWakefulnessAwake_AcquireCausesWakeup_turnScreenOnAllowed() {
-        createService();
-        startSystem();
-        forceSleep();
-
-        IBinder token = new Binder();
-        String tag = "acq_causes_wakeup";
-        String packageName = "pkg.name";
-        AttributionSource attrSrc = new AttributionSource(Binder.getCallingUid(),
-                packageName, /* attributionTag= */ null);
-
-        doReturn(PermissionChecker.PERMISSION_GRANTED).when(
-                mPermissionCheckerWrapperMock).checkPermissionForDataDelivery(any(),
-                eq(android.Manifest.permission.TURN_SCREEN_ON), anyInt(), eq(attrSrc), anyString());
-
-        // First, ensure that a normal full wake lock does not cause a wakeup
-        int flags = PowerManager.FULL_WAKE_LOCK;
-        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-        mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
-
-        // Ensure that the flag does *NOT* work with a partial wake lock.
-        flags = PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
-        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-        mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
-
-        // Verify that flag forces a wakeup when paired to a FULL_WAKE_LOCK
-        flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
-        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
-    }
-
-    @Test
-    @DisableCompatChanges({PowerManagerService.REQUIRE_TURN_SCREEN_ON_PERMISSION})
-    public void testWakefulnessAwake_AcquireCausesWakeupOldSdk_turnScreenOnAllowed() {
-        createService();
-        startSystem();
-        forceSleep();
-
-        IBinder token = new Binder();
-        String tag = "acq_causes_wakeup";
-        String packageName = "pkg.name";
-        AttributionSource attrSrc = new AttributionSource(Binder.getCallingUid(),
-                packageName, /* attributionTag= */ null);
-
-        // verify that the wakeup is allowed for apps targeting older sdks, and therefore won't have
-        // the TURN_SCREEN_ON permission granted
-        doReturn(PermissionChecker.PERMISSION_HARD_DENIED).when(
-                mPermissionCheckerWrapperMock).checkPermissionForDataDelivery(any(),
-                eq(android.Manifest.permission.TURN_SCREEN_ON), anyInt(), eq(attrSrc), anyString());
-
-        doReturn(false).when(mPowerPropertiesWrapper).waive_target_sdk_check_for_turn_screen_on();
-
-        int flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
-        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
-    }
-
-    @Test
-    @EnableCompatChanges({PowerManagerService.REQUIRE_TURN_SCREEN_ON_PERMISSION})
-    public void testWakefulnessAwake_AcquireCausesWakeup_turnScreenOnDenied() {
-        createService();
-        startSystem();
-        forceSleep();
-
-        IBinder token = new Binder();
-        String tag = "acq_causes_wakeup";
-        String packageName = "pkg.name";
-        AttributionSource attrSrc = new AttributionSource(Binder.getCallingUid(),
-                packageName, /* attributionTag= */ null);
-        doReturn(PermissionChecker.PERMISSION_HARD_DENIED).when(
-                mPermissionCheckerWrapperMock).checkPermissionForDataDelivery(any(),
-                eq(android.Manifest.permission.TURN_SCREEN_ON), anyInt(), eq(attrSrc), anyString());
-
-        doReturn(false).when(mPowerPropertiesWrapper).waive_target_sdk_check_for_turn_screen_on();
-        doReturn(false).when(mPowerPropertiesWrapper).permissionless_turn_screen_on();
-
-        // Verify that flag has no effect when TURN_SCREEN_ON is not allowed for apps targeting U+
-        int flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
-        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-        mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
-    }
-
-    @Test
-    @EnableCompatChanges({PowerManagerService.REQUIRE_TURN_SCREEN_ON_PERMISSION})
-    public void testWakefulnessAwake_AcquireCausesWakeupOldSdk_turnScreenOnDenied() {
-        createService();
-        startSystem();
-        forceSleep();
-
-        IBinder token = new Binder();
-        String tag = "acq_causes_wakeup";
-        String packageName = "pkg.name";
-        AttributionSource attrSrc = new AttributionSource(Binder.getCallingUid(),
-                packageName, /* attributionTag= */ null);
-        doReturn(PermissionChecker.PERMISSION_HARD_DENIED).when(
-                mPermissionCheckerWrapperMock).checkPermissionForDataDelivery(any(),
-                eq(android.Manifest.permission.TURN_SCREEN_ON), anyInt(), eq(attrSrc), anyString());
-
-        doReturn(true).when(mPowerPropertiesWrapper).waive_target_sdk_check_for_turn_screen_on();
-
-        // Verify that flag has no effect when TURN_SCREEN_ON is not allowed for apps targeting U+
-        int flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
-        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
-        if (PowerProperties.permissionless_turn_screen_on().orElse(false)) {
-            assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        } else {
-            assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-        }
-        mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
-    }
-
-    @Test
-    public void testWakefulnessAwake_IPowerManagerWakeUp() {
-        createService();
-        startSystem();
-        forceSleep();
-        mService.getBinderServiceInstance().wakeUp(mClock.now(),
-                PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name");
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-    }
-
-    /**
-     * Tests a series of variants that control whether a device wakes-up when it is plugged in
-     * or docked.
-     */
-    @Test
-    public void testWakefulnessAwake_ShouldWakeUpWhenPluggedIn() {
-        createService();
-        startSystem();
-        forceSleep();
-
-        // Test 1:
-        // Set config to prevent it wake up, test, verify, reset config value.
-        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
-                .thenReturn(false);
-        mService.readConfigurationLocked();
-        setPluggedIn(true);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
-                .thenReturn(true);
-        mService.readConfigurationLocked();
-
-        // Test 2:
-        // Turn the power off, sleep, then plug into a wireless charger.
-        // Verify that we do not wake up if the phone is being plugged into a wireless charger.
-        setPluggedIn(false);
-        forceSleep();
-        when(mBatteryManagerInternalMock.getPlugType())
-                .thenReturn(BatteryManager.BATTERY_PLUGGED_WIRELESS);
-        when(mWirelessChargerDetectorMock.update(true /* isPowered */,
-                BatteryManager.BATTERY_PLUGGED_WIRELESS)).thenReturn(false);
-        setPluggedIn(true);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-
-        // Test 3:
-        // Do not wake up if the phone is being REMOVED from a wireless charger
-        when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0);
-        setPluggedIn(false);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-
-        // Test 4:
-        // Do not wake if we are dreaming.
-        forceAwake();  // Needs to be awake first before it can dream.
-        forceDream();
-        setPluggedIn(true);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
-        forceSleep();
-
-        // Test 5:
-        // Don't wake if the device is configured not to wake up in theater mode (and theater
-        // mode is enabled).
-        Settings.Global.putInt(
-                mContextSpy.getContentResolver(), Settings.Global.THEATER_MODE_ON, 1);
-        mUserSwitchedReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_USER_SWITCHED));
-        when(mResourcesSpy.getBoolean(
-                com.android.internal.R.bool.config_allowTheaterModeWakeFromUnplug))
-                .thenReturn(false);
-        setPluggedIn(false);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-        Settings.Global.putInt(
-                mContextSpy.getContentResolver(), Settings.Global.THEATER_MODE_ON, 0);
-        mUserSwitchedReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_USER_SWITCHED));
-
-        // Test 6:
-        // Don't wake up if we are Dozing away and always-on is enabled.
-        when(mAmbientDisplayConfigurationMock.alwaysOnEnabled(UserHandle.USER_CURRENT))
-                .thenReturn(true);
-        mUserSwitchedReceiver.onReceive(mContextSpy, new Intent(Intent.ACTION_USER_SWITCHED));
-        forceAwake();
-        forceDozing();
-        setPluggedIn(true);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
-
-        // Test 7:
-        // Finally, take away all the factors above and ensure the device wakes up!
-        forceAwake();
-        forceSleep();
-        setPluggedIn(false);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-    }
-
-    /**
-     * Tests that dreaming stops when undocking and not configured to keep dreaming.
-     */
-    @Test
-    public void testWakefulnessDream_shouldStopDreamingWhenUndocked_whenNotConfigured() {
-        // Make sure "unplug turns on screen" is configured to true.
-        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
-                .thenReturn(true);
-
-        createService();
-        startSystem();
-
-        ArgumentCaptor<DreamManagerInternal.DreamManagerStateListener> dreamManagerStateListener =
-                ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class);
-        verify(mDreamManagerInternalMock).registerDreamManagerStateListener(
-                dreamManagerStateListener.capture());
-        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(false);
-
-        when(mBatteryManagerInternalMock.getPlugType())
-                .thenReturn(BatteryManager.BATTERY_PLUGGED_DOCK);
-        setPluggedIn(true);
-
-        forceAwake();  // Needs to be awake first before it can dream.
-        forceDream();
-        when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0);
-        setPluggedIn(false);
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-    }
-
-    /**
-     * Tests that dreaming continues when undocking and configured to do so.
-     */
-    @Test
-    public void testWakefulnessDream_shouldKeepDreamingWhenUndocked_whenConfigured() {
-        // Make sure "unplug turns on screen" is configured to true.
-        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
-                .thenReturn(true);
-
-        createService();
-        startSystem();
-
-        ArgumentCaptor<DreamManagerInternal.DreamManagerStateListener> dreamManagerStateListener =
-                ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class);
-        verify(mDreamManagerInternalMock).registerDreamManagerStateListener(
-                dreamManagerStateListener.capture());
-        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(true);
-
-        when(mBatteryManagerInternalMock.getPlugType())
-                .thenReturn(BatteryManager.BATTERY_PLUGGED_DOCK);
-        setPluggedIn(true);
-
-        forceAwake();  // Needs to be awake first before it can dream.
-        forceDream();
-        when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0);
-        setPluggedIn(false);
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
-    }
-
-    /**
-     * Tests that dreaming stops when undocking while showing a dream that prevents it.
-     */
-    @Test
-    public void testWakefulnessDream_shouldStopDreamingWhenUndocked_whenDreamPrevents() {
-        // Make sure "unplug turns on screen" is configured to true.
-        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
-                .thenReturn(true);
-
-        createService();
-        startSystem();
-
-        ArgumentCaptor<DreamManagerInternal.DreamManagerStateListener> dreamManagerStateListener =
-                ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class);
-        verify(mDreamManagerInternalMock).registerDreamManagerStateListener(
-                dreamManagerStateListener.capture());
-        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(true);
-
-        when(mBatteryManagerInternalMock.getPlugType())
-                .thenReturn(BatteryManager.BATTERY_PLUGGED_DOCK);
-        setPluggedIn(true);
-
-        forceAwake();  // Needs to be awake first before it can dream.
-        forceDream();
-        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(false);
-        when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0);
-        setPluggedIn(false);
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-    }
-
-    @Test
-    public void testWakefulnessDream_shouldStopDreamingWhenUnplugging_whenDreamPrevents() {
-        // Make sure "unplug turns on screen" is configured to true.
-        when(mResourcesSpy.getBoolean(com.android.internal.R.bool.config_unplugTurnsOnScreen))
-                .thenReturn(true);
-
-        createService();
-        startSystem();
-
-        ArgumentCaptor<DreamManagerInternal.DreamManagerStateListener> dreamManagerStateListener =
-                ArgumentCaptor.forClass(DreamManagerInternal.DreamManagerStateListener.class);
-        verify(mDreamManagerInternalMock).registerDreamManagerStateListener(
-                dreamManagerStateListener.capture());
-
-        when(mBatteryManagerInternalMock.getPlugType())
-                .thenReturn(BatteryManager.BATTERY_PLUGGED_AC);
-        setPluggedIn(true);
-
-        forceAwake();  // Needs to be awake first before it can dream.
-        forceDream();
-        dreamManagerStateListener.getValue().onKeepDreamingWhenUnpluggingChanged(false);
-        when(mBatteryManagerInternalMock.getPlugType()).thenReturn(0);
-        setPluggedIn(false);
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-    }
-
-
-    @Test
-    public void testWakefulnessDoze_goToSleep() {
-        createService();
-        // Start with AWAKE state
-        startSystem();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        // Take a nap and verify.
-        mService.getBinderServiceInstance().goToSleep(mClock.now(),
-                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
-    }
-
-    @Test
-    public void testWasDeviceIdleFor_true() {
-        int interval = 1000;
-        createService();
-        startSystem();
-        mService.onUserActivity();
-        advanceTime(interval + 1 /* just a little more */);
-        assertThat(mService.wasDeviceIdleForInternal(interval)).isTrue();
-    }
-
-    @Test
-    public void testWasDeviceIdleFor_false() {
-        int interval = 1000;
-        createService();
-        startSystem();
-        mService.onUserActivity();
-        assertThat(mService.wasDeviceIdleForInternal(interval)).isFalse();
-    }
-
-    @Test
-    public void testForceSuspend_putsDeviceToSleep() {
-        createService();
-        startSystem();
-
-        // Verify that we start awake
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        // Grab the wakefulness value when PowerManager finally calls into the
-        // native component to actually perform the suspend.
-        when(mNativeWrapperMock.nativeForceSuspend()).then(inv -> {
-            assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-            return true;
-        });
-
-        boolean retval = mService.getBinderServiceInstance().forceSuspend();
-        assertThat(retval).isTrue();
-
-        // Still asleep when the function returns.
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-    }
-
-    @Test
-    public void testForceSuspend_wakeLocksDisabled() {
-        final String tag = "TestWakelockTag_098213";
-        final int flags = PowerManager.PARTIAL_WAKE_LOCK;
-        final String pkg = mContextSpy.getOpPackageName();
-
-        createService();
-
-        // Set up the Notification mock to keep track of the wakelocks that are currently
-        // active or disabled. We'll use this to verify that wakelocks are disabled when
-        // they should be.
-        final Map<String, Integer> wakelockMap = new HashMap<>(1);
-        doAnswer(inv -> {
-            wakelockMap.put((String) inv.getArguments()[1], (int) inv.getArguments()[0]);
-            return null;
-        }).when(mNotifierMock).onWakeLockAcquired(anyInt(), anyString(), anyString(), anyInt(),
-                anyInt(), any(), any(), any());
-        doAnswer(inv -> {
-            wakelockMap.remove((String) inv.getArguments()[1]);
-            return null;
-        }).when(mNotifierMock).onWakeLockReleased(anyInt(), anyString(), anyString(), anyInt(),
-                anyInt(), any(), any(), any());
-
-        //
-        // TEST STARTS HERE
-        //
-        startSystem();
-
-        // Verify that we start awake
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        // Create a wakelock
-        mService.getBinderServiceInstance().acquireWakeLock(new Binder(), flags, tag, pkg,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
-        assertThat(wakelockMap.get(tag)).isEqualTo(flags);  // Verify wakelock is active.
-
-        // Confirm that the wakelocks have been disabled when the forceSuspend is in flight.
-        when(mNativeWrapperMock.nativeForceSuspend()).then(inv -> {
-            // Verify that the wakelock is disabled by the time we get to the native force
-            // suspend call.
-            assertThat(wakelockMap.containsKey(tag)).isFalse();
-            return true;
-        });
-
-        assertThat(mService.getBinderServiceInstance().forceSuspend()).isTrue();
-        assertThat(wakelockMap.get(tag)).isEqualTo(flags);
-
-    }
-
-    @Test
-    public void testForceSuspend_forceSuspendFailurePropagated() {
-        createService();
-        startSystem();
-        when(mNativeWrapperMock.nativeForceSuspend()).thenReturn(false);
-        assertThat(mService.getBinderServiceInstance().forceSuspend()).isFalse();
-    }
-
-    @SuppressWarnings("GuardedBy")
-    @Test
-    public void testScreensaverActivateOnSleepDisabled_powered_afterTimeout_goesToDozing() {
-        when(mBatteryManagerInternalMock.isPowered(anyInt())).thenReturn(true);
-
-        doAnswer(inv -> {
-            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
-            return null;
-        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
-
-        setMinimumScreenOffTimeoutConfig(5);
-        createService();
-        startSystem();
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        advanceTime(15000);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
-    }
-
-    @SuppressWarnings("GuardedBy")
-    @Test
-    public void testScreensaverActivateOnSleepEnabled_powered_afterTimeout_goesToDreaming() {
-        when(mBatteryManagerInternalMock.isPowered(anyInt())).thenReturn(true);
-        Settings.Secure.putInt(mContextSpy.getContentResolver(),
-                Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 1);
-
-        doAnswer(inv -> {
-            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
-            return null;
-        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
-
-        setMinimumScreenOffTimeoutConfig(5);
-        createService();
-        startSystem();
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        advanceTime(15000);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
-    }
-
-    @SuppressWarnings("GuardedBy")
-    @Test
-    public void testAmbientSuppression_disablesDreamingAndWakesDevice() {
-        Settings.Secure.putInt(mContextSpy.getContentResolver(),
-                Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 1);
-        Settings.Secure.putInt(mContextSpy.getContentResolver(),
-                Settings.Secure.SCREENSAVER_ENABLED, 1);
-
-        setDreamsDisabledByAmbientModeSuppressionConfig(true);
-        setMinimumScreenOffTimeoutConfig(10000);
-        createService();
-        startSystem();
-
-        doAnswer(inv -> {
-            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
-            return null;
-        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
-
-        setPluggedIn(true);
-        // Allow asynchronous sandman calls to execute.
-        advanceTime(10000);
-
-        forceDream();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test", true);
-        advanceTime(50);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-    }
-
-    @SuppressWarnings("GuardedBy")
-    @Test
-    public void testAmbientSuppressionDisabled_shouldNotWakeDevice() {
-        Settings.Secure.putInt(mContextSpy.getContentResolver(),
-                Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 1);
-        Settings.Secure.putInt(mContextSpy.getContentResolver(),
-                Settings.Secure.SCREENSAVER_ENABLED, 1);
-
-        setDreamsDisabledByAmbientModeSuppressionConfig(false);
-        setMinimumScreenOffTimeoutConfig(10000);
-        createService();
-        startSystem();
-
-        doAnswer(inv -> {
-            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
-            return null;
-        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
-
-        setPluggedIn(true);
-        // Allow asynchronous sandman calls to execute.
-        advanceTime(10000);
-
-        forceDream();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test", true);
-        advanceTime(50);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
-    }
-
-    @Test
-    public void testAmbientSuppression_doesNotAffectDreamForcing() {
-        Settings.Secure.putInt(mContextSpy.getContentResolver(),
-                Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 1);
-        Settings.Secure.putInt(mContextSpy.getContentResolver(),
-                Settings.Secure.SCREENSAVER_ENABLED, 1);
-
-        setDreamsDisabledByAmbientModeSuppressionConfig(true);
-        setMinimumScreenOffTimeoutConfig(10000);
-        createService();
-        startSystem();
-
-        doAnswer(inv -> {
-            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
-            return null;
-        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
-
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test", true);
-        setPluggedIn(true);
-        // Allow asynchronous sandman calls to execute.
-        advanceTime(10000);
-
-        // Verify that forcing dream still works even though ambient display is suppressed
-        forceDream();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
-    }
-
-    @Test
-    public void testBatteryDrainDuringDream() {
-        Settings.Secure.putInt(mContextSpy.getContentResolver(),
-                Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, 1);
-        Settings.Secure.putInt(mContextSpy.getContentResolver(),
-                Settings.Secure.SCREENSAVER_ENABLED, 1);
-
-        setMinimumScreenOffTimeoutConfig(100);
-        setDreamsBatteryLevelDrainConfig(5);
-        createService();
-        startSystem();
-
-        doAnswer(inv -> {
-            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
-            return null;
-        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
-
-        setBatteryLevel(100);
-        setPluggedIn(true);
-
-        forceAwake();  // Needs to be awake first before it can dream.
-        forceDream();
-        advanceTime(10); // Allow async calls to happen
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
-        setBatteryLevel(90);
-        advanceTime(10); // Allow async calls to happen
-        assertThat(mService.getDreamsBatteryLevelDrain()).isEqualTo(10);
-
-        // If battery overheat protection is enabled, we shouldn't count battery drain
-        setBatteryHealth(BatteryManager.BATTERY_HEALTH_OVERHEAT);
-        setBatteryLevel(70);
-        advanceTime(10); // Allow async calls to happen
-        assertThat(mService.getDreamsBatteryLevelDrain()).isEqualTo(10);
-    }
-
-    @Test
-    public void testSetDozeOverrideFromDreamManager_triggersSuspendBlocker() {
-        final String suspendBlockerName = "PowerManagerService.Display";
-        final String tag = "acq_causes_wakeup";
-        final String packageName = "pkg.name";
-        final IBinder token = new Binder();
-
-        final boolean[] isAcquired = new boolean[1];
-        doAnswer(inv -> {
-            if (suspendBlockerName.equals(inv.getArguments()[0])) {
-                isAcquired[0] = false;
-            }
-            return null;
-        }).when(mNativeWrapperMock).nativeReleaseSuspendBlocker(any());
-
-        doAnswer(inv -> {
-            if (suspendBlockerName.equals(inv.getArguments()[0])) {
-                isAcquired[0] = true;
-            }
-            return null;
-        }).when(mNativeWrapperMock).nativeAcquireSuspendBlocker(any());
-
-        // Need to create the service after we stub the mocks for this test because some of the
-        // mocks are used during the constructor.
-        createService();
-
-        // Start with AWAKE state
-        startSystem();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        assertTrue(isAcquired[0]);
-
-        // Take a nap and verify we no longer hold the blocker
-        int flags = PowerManager.DOZE_WAKE_LOCK;
-        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
-        when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
-        mService.getBinderServiceInstance().goToSleep(mClock.now(),
-                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
-        assertFalse(isAcquired[0]);
-
-        // Override the display state by DreamManager and verify is reacquires the blocker.
-        mService.getLocalServiceInstance()
-                .setDozeOverrideFromDreamManager(Display.STATE_ON, PowerManager.BRIGHTNESS_DEFAULT);
-        assertTrue(isAcquired[0]);
-    }
-
-    @Test
-    public void testSuspendBlockerHeldDuringBoot() {
-        final String suspendBlockerName = "PowerManagerService.Booting";
-
-        final boolean[] isAcquired = new boolean[1];
-        doAnswer(inv -> {
-            isAcquired[0] = false;
-            return null;
-        }).when(mNativeWrapperMock).nativeReleaseSuspendBlocker(eq(suspendBlockerName));
-
-        doAnswer(inv -> {
-            isAcquired[0] = true;
-            return null;
-        }).when(mNativeWrapperMock).nativeAcquireSuspendBlocker(eq(suspendBlockerName));
-
-        // Need to create the service after we stub the mocks for this test because some of the
-        // mocks are used during the constructor.
-        createService();
-        assertTrue(isAcquired[0]);
-
-        mService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
-        assertTrue(isAcquired[0]);
-
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-        assertFalse(isAcquired[0]);
-    }
-
-    @Test
-    public void testInattentiveSleep_hideWarningIfStayOnIsEnabledAndPluggedIn() {
-        setMinimumScreenOffTimeoutConfig(5);
-        setAttentiveWarningDuration(120);
-        setAttentiveTimeout(100);
-
-        Settings.Global.putInt(mContextSpy.getContentResolver(),
-                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, BatteryManager.BATTERY_PLUGGED_AC);
-
-        createService();
-        startSystem();
-
-        verify(mInattentiveSleepWarningControllerMock, times(1)).show();
-        verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean());
-        when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
-
-        setPluggedIn(true);
-        verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss(true);
-    }
-
-    @Test
-    public void testInattentiveSleep_hideWarningIfInattentiveSleepIsDisabled() {
-        setMinimumScreenOffTimeoutConfig(5);
-        setAttentiveWarningDuration(120);
-        setAttentiveTimeout(100);
-
-        createService();
-        startSystem();
-
-        verify(mInattentiveSleepWarningControllerMock, times(1)).show();
-        verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean());
-        when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
-
-        setAttentiveTimeout(-1);
-        mService.handleSettingsChangedLocked();
-
-        verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss(true);
-    }
-
-    @Test
-    public void testInattentiveSleep_userActivityDismissesWarning() {
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
-        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info);
-        setMinimumScreenOffTimeoutConfig(5);
-        setAttentiveWarningDuration(1900);
-        setAttentiveTimeout(2000);
-
-        createService();
-        startSystem();
-
-        mService.getBinderServiceInstance().userActivity(Display.DEFAULT_DISPLAY, mClock.now(),
-                PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0);
-        verify(mInattentiveSleepWarningControllerMock, never()).show();
-
-        advanceTime(150);
-        verify(mInattentiveSleepWarningControllerMock, times(1)).show();
-        verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean());
-        when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
-
-        mService.getBinderServiceInstance().userActivity(Display.DEFAULT_DISPLAY, mClock.now(),
-                PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0);
-        verify(mInattentiveSleepWarningControllerMock, times(1)).dismiss(true);
-    }
-
-    @Test
-    public void testInattentiveSleep_warningHiddenAfterWakingUp() {
-        setMinimumScreenOffTimeoutConfig(5);
-        setAttentiveWarningDuration(70);
-        setAttentiveTimeout(100);
-
-        createService();
-        startSystem();
-        advanceTime(50);
-        verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).show();
-        when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
-        advanceTime(70);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-        forceAwake();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss(false);
-    }
-
-    @Test
-    public void testInattentiveSleep_warningStaysWhenDreaming() {
-        setMinimumScreenOffTimeoutConfig(5);
-        setAttentiveWarningDuration(70);
-        setAttentiveTimeout(100);
-        createService();
-        startSystem();
-        advanceTime(50);
-        verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).show();
-        when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
-
-        forceDream();
-        when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
-
-        advanceTime(10);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
-        verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean());
-    }
-
-    @Test
-    public void testInattentiveSleep_warningNotShownWhenSleeping() {
-        setMinimumScreenOffTimeoutConfig(5);
-        setAttentiveWarningDuration(70);
-        setAttentiveTimeout(100);
-        createService();
-        startSystem();
-
-        advanceTime(10);
-        forceSleep();
-
-        advanceTime(50);
-        verify(mInattentiveSleepWarningControllerMock, never()).show();
-    }
-
-    @Test
-    public void testInattentiveSleep_noWarningShownIfInattentiveSleepDisabled() {
-        setAttentiveTimeout(-1);
-        createService();
-        startSystem();
-        verify(mInattentiveSleepWarningControllerMock, never()).show();
-    }
-
-    @Test
-    public void testInattentiveSleep_goesToSleepAfterTimeout() {
-        setMinimumScreenOffTimeoutConfig(5);
-        setAttentiveTimeout(5);
-        createService();
-        startSystem();
-        advanceTime(20);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-        assertThat(mService.getBinderServiceInstance().getLastSleepReason()).isEqualTo(
-                PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE);
-    }
-
-    @Test
-    public void testInattentiveSleep_goesToSleepWithWakeLock() {
-        final String pkg = mContextSpy.getOpPackageName();
-        final Binder token = new Binder();
-        final String tag = "testInattentiveSleep_goesToSleepWithWakeLock";
-
-        setMinimumScreenOffTimeoutConfig(5);
-        setAttentiveTimeout(30);
-        createService();
-        startSystem();
-
-        mService.getBinderServiceInstance().acquireWakeLock(token,
-                PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        advanceTime(60);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-        assertThat(mService.getBinderServiceInstance().getLastSleepReason()).isEqualTo(
-                PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE);
-    }
-
-    @Test
-    public void testInattentiveSleep_dreamEnds_goesToSleepAfterTimeout() {
-        setMinimumScreenOffTimeoutConfig(5);
-        setAttentiveTimeout(30000);
-        createService();
-        startSystem();
-
-        advanceTime(10000);
-        forceDream();
-        advanceTime(10000);
-        final String pkg = mContextSpy.getOpPackageName();
-        mService.getBinderServiceInstance().wakeUp(mClock.now(),
-                PowerManager.WAKE_REASON_DREAM_FINISHED, "PowerManagerServiceTest:DREAM_FINISHED",
-                pkg);
-        advanceTime(10001);
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-        assertThat(mService.getBinderServiceInstance().getLastSleepReason()).isEqualTo(
-                PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE);
-    }
-
-    @Test
-    public void testInattentiveSleep_wakeLockOnAfterRelease_inattentiveSleepTimeoutNotAffected() {
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
-        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info);
-
-        final String pkg = mContextSpy.getOpPackageName();
-        final Binder token = new Binder();
-        final String tag = "testInattentiveSleep_wakeLockOnAfterRelease";
-
-        setMinimumScreenOffTimeoutConfig(5);
-        setAttentiveTimeout(2000);
-        createService();
-        startSystem();
-
-        mService.getBinderServiceInstance().acquireWakeLock(token,
-                PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, tag, pkg,
-                null /* workSource */, null /* historyTag */, Display.DEFAULT_DISPLAY, null);
-
-        advanceTime(1500);
-        mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */);
-
-        advanceTime(520);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-        assertThat(mService.getBinderServiceInstance().getLastSleepReason()).isEqualTo(
-                PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE);
-    }
-
-    @Test
-    public void testInattentiveSleep_userActivityNoChangeLights_inattentiveSleepTimeoutNotAffected() {
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
-        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info);
-
-        setMinimumScreenOffTimeoutConfig(5);
-        setAttentiveTimeout(2000);
-        createService();
-        startSystem();
-
-        advanceTime(1500);
-        mService.getBinderServiceInstance().userActivity(Display.DEFAULT_DISPLAY, mClock.now(),
-                PowerManager.USER_ACTIVITY_EVENT_OTHER,
-                PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS);
-
-        advanceTime(520);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-        assertThat(mService.getBinderServiceInstance().getLastSleepReason()).isEqualTo(
-                PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE);
-    }
-
-    @Test
-    public void testInattentiveSleep_userActivity_inattentiveSleepTimeoutExtended() {
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
-        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info);
-
-        setMinimumScreenOffTimeoutConfig(5);
-        setAttentiveTimeout(2000);
-        createService();
-        startSystem();
-
-        advanceTime(1500);
-        mService.getBinderServiceInstance().userActivity(Display.DEFAULT_DISPLAY, mClock.now(),
-                PowerManager.USER_ACTIVITY_EVENT_OTHER, 0 /* flags */);
-
-        advanceTime(520);
-        assertThat(mService.getGlobalWakefulnessLocked()).isNotEqualTo(WAKEFULNESS_ASLEEP);
-    }
-
-
-    @SuppressWarnings("GuardedBy")
-    @Test
-    public void testInattentiveSleep_goesToSleepFromDream() {
-        setAttentiveTimeout(20000);
-        createService();
-        startSystem();
-        setPluggedIn(true);
-        forceAwake();
-        forceDream();
-        when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
-
-        advanceTime(20500);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-    }
-
-    @Test
-    public void testWakeLock_affectsProperDisplayGroup() {
-        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
-        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info);
-
-        final String pkg = mContextSpy.getOpPackageName();
-        final Binder token = new Binder();
-        final String tag = "testWakeLock_affectsProperDisplayGroup";
-
-        setMinimumScreenOffTimeoutConfig(5);
-        createService();
-        startSystem();
-        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-
-        mService.getBinderServiceInstance().acquireWakeLock(token,
-                PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg,
-                null /* workSource */, null /* historyTag */, Display.DEFAULT_DISPLAY, null);
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-
-        advanceTime(15000);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
-                WAKEFULNESS_DOZING);
-    }
-
-    @Test
-    public void testInvalidDisplayGroupWakeLock_affectsAllDisplayGroups() {
-        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
-        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(info);
-
-        final String pkg = mContextSpy.getOpPackageName();
-        final Binder token = new Binder();
-        final String tag = "testInvalidDisplayGroupWakeLock_affectsAllDisplayGroups";
-
-        setMinimumScreenOffTimeoutConfig(5);
-        createService();
-        startSystem();
-        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-
-        mService.getBinderServiceInstance().acquireWakeLock(token,
-                PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null);
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-
-        advanceTime(15000);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-    }
-
-    @Test
-    public void testRemovedDisplayGroupWakeLock_affectsNoDisplayGroups() {
-        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = nonDefaultDisplayGroupId;
-        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
-
-        doAnswer(inv -> {
-            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
-            return null;
-        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
-
-        final String pkg = mContextSpy.getOpPackageName();
-        final Binder token = new Binder();
-        final String tag = "testRemovedDisplayGroupWakeLock_affectsNoDisplayGroups";
-
-        setMinimumScreenOffTimeoutConfig(5);
-        createService();
-        startSystem();
-        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-
-        mService.getBinderServiceInstance().acquireWakeLock(token,
-                PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg,
-                null /* workSource */, null /* historyTag */, nonDefaultDisplay, null);
-
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        listener.get().onDisplayGroupRemoved(nonDefaultDisplayGroupId);
-
-        advanceTime(15000);
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_DOZING);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
-    }
-
-    @Test
-    public void testBoot_ShouldBeAwake() {
-        createService();
-        startSystem();
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        verify(mNotifierMock, never()).onGlobalWakefulnessChangeStarted(anyInt(), anyInt(),
-                anyLong());
-    }
-
-    @Test
-    public void testBoot_DesiredScreenPolicyShouldBeBright() {
-        createService();
-        startSystem();
-
-        assertThat(mService.getDesiredScreenPolicyLocked(Display.DEFAULT_DISPLAY)).isEqualTo(
-                DisplayPowerRequest.POLICY_BRIGHT);
-    }
-
-    @Test
-    public void testQuiescentBoot_ShouldBeAsleep() {
-        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_QUIESCENT), any())).thenReturn("1");
-        createService();
-        startSystem();
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-        verify(mNotifierMock).onGlobalWakefulnessChangeStarted(eq(WAKEFULNESS_ASLEEP), anyInt(),
-                anyLong());
-    }
-
-    @Test
-    public void testQuiescentBoot_DesiredScreenPolicyShouldBeOff() {
-        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_QUIESCENT), any())).thenReturn("1");
-        createService();
-        startSystem();
-        assertThat(mService.getDesiredScreenPolicyLocked(Display.DEFAULT_DISPLAY)).isEqualTo(
-                DisplayPowerRequest.POLICY_OFF);
-    }
-
-    @Test
-    public void testQuiescentBoot_WakeUp_DesiredScreenPolicyShouldBeBright() {
-        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_QUIESCENT), any())).thenReturn("1");
-        createService();
-        startSystem();
-        forceAwake();
-        assertThat(mService.getDesiredScreenPolicyLocked(Display.DEFAULT_DISPLAY)).isEqualTo(
-                DisplayPowerRequest.POLICY_BRIGHT);
-    }
-
-    @Test
-    public void testQuiescentBoot_WakeKeyBeforeBootCompleted_AwakeAfterBootCompleted() {
-        when(mSystemPropertiesMock.get(eq(SYSTEM_PROPERTY_QUIESCENT), any())).thenReturn("1");
-        createService();
-        startSystem();
-
-        mService.getBinderServiceInstance().wakeUp(mClock.now(),
-                PowerManager.WAKE_REASON_UNKNOWN, "testing IPowerManager.wakeUp()", "pkg.name");
-
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        assertThat(mService.getDesiredScreenPolicyLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                DisplayPowerRequest.POLICY_BRIGHT);
-    }
-
-    @Test
-    public void testIsAmbientDisplayAvailable_available() {
-        createService();
-        when(mAmbientDisplayConfigurationMock.ambientDisplayAvailable()).thenReturn(true);
-
-        assertThat(mService.getBinderServiceInstance().isAmbientDisplayAvailable()).isTrue();
-    }
-
-    @Test
-    public void testIsAmbientDisplayAvailable_unavailable() {
-        createService();
-        when(mAmbientDisplayConfigurationMock.ambientDisplayAvailable()).thenReturn(false);
-
-        assertThat(mService.getBinderServiceInstance().isAmbientDisplayAvailable()).isFalse();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressed_default_notSuppressed() {
-        createService();
-
-        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressed()).isFalse();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressed_suppressed() {
-        createService();
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test", true);
-
-        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressed()).isTrue();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressed_notSuppressed() {
-        createService();
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test", false);
-
-        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressed()).isFalse();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressed_multipleTokens_suppressed() {
-        createService();
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test1", false);
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test2", true);
-
-        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressed()).isTrue();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressed_multipleTokens_notSuppressed() {
-        createService();
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test1", false);
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test2", false);
-
-        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressed()).isFalse();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressedForToken_default_notSuppressed() {
-        createService();
-
-        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressedForToken("test"))
-            .isFalse();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressedForToken_suppressed() {
-        createService();
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test", true);
-
-        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressedForToken("test"))
-            .isTrue();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressedForToken_notSuppressed() {
-        createService();
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test", false);
-
-        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressedForToken("test"))
-            .isFalse();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressedForToken_multipleTokens_suppressed() {
-        createService();
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test1", true);
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test2", true);
-
-        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressedForToken("test1"))
-            .isTrue();
-        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressedForToken("test2"))
-            .isTrue();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressedForToken_multipleTokens_notSuppressed() {
-        createService();
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test1", true);
-        mService.getBinderServiceInstance().suppressAmbientDisplay("test2", false);
-
-        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressedForToken("test1"))
-            .isTrue();
-        assertThat(mService.getBinderServiceInstance().isAmbientDisplaySuppressedForToken("test2"))
-            .isFalse();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressedForTokenByApp_ambientDisplayUnavailable() {
-        createService();
-        when(mAmbientDisplayConfigurationMock.ambientDisplayAvailable()).thenReturn(false);
-
-        BinderService service = mService.getBinderServiceInstance();
-        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test", Binder.getCallingUid()))
-            .isFalse();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressedForTokenByApp_default() {
-        createService();
-
-        BinderService service = mService.getBinderServiceInstance();
-        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test", Binder.getCallingUid()))
-            .isFalse();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressedForTokenByApp_suppressedByCallingApp() {
-        createService();
-        BinderService service = mService.getBinderServiceInstance();
-        service.suppressAmbientDisplay("test", true);
-
-        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test", Binder.getCallingUid()))
-            .isTrue();
-        // Check that isAmbientDisplaySuppressedForTokenByApp doesn't return true for another app.
-        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test", /* appUid= */ 123))
-            .isFalse();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressedForTokenByApp_notSuppressedByCallingApp() {
-        createService();
-        BinderService service = mService.getBinderServiceInstance();
-        service.suppressAmbientDisplay("test", false);
-
-        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test", Binder.getCallingUid()))
-            .isFalse();
-        // Check that isAmbientDisplaySuppressedForTokenByApp doesn't return true for another app.
-        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test", /* appUid= */ 123))
-            .isFalse();
-    }
-
-    @Test
-    public void testIsAmbientDisplaySuppressedForTokenByApp_multipleTokensSuppressedByCallingApp() {
-        createService();
-        BinderService service = mService.getBinderServiceInstance();
-        service.suppressAmbientDisplay("test1", true);
-        service.suppressAmbientDisplay("test2", true);
-
-        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test1", Binder.getCallingUid()))
-            .isTrue();
-        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test2", Binder.getCallingUid()))
-            .isTrue();
-        // Check that isAmbientDisplaySuppressedForTokenByApp doesn't return true for another app.
-        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test1", /* appUid= */ 123))
-            .isFalse();
-        assertThat(service.isAmbientDisplaySuppressedForTokenByApp("test2", /* appUid= */ 123))
-            .isFalse();
-    }
-
-    @Test
-    public void testGetAmbientDisplaySuppressionTokens_default() {
-        createService();
-        BinderService service = mService.getBinderServiceInstance();
-
-        assertThat(service.getAmbientDisplaySuppressionTokens()).isEmpty();
-    }
-
-    @Test
-    public void testGetAmbientDisplaySuppressionTokens_singleToken() {
-        createService();
-        BinderService service = mService.getBinderServiceInstance();
-        service.suppressAmbientDisplay("test1", true);
-        service.suppressAmbientDisplay("test2", false);
-
-        assertThat(service.getAmbientDisplaySuppressionTokens()).containsExactly("test1");
-    }
-
-    @Test
-    public void testGetAmbientDisplaySuppressionTokens_multipleTokens() {
-        createService();
-        BinderService service = mService.getBinderServiceInstance();
-        service.suppressAmbientDisplay("test1", true);
-        service.suppressAmbientDisplay("test2", true);
-
-        assertThat(service.getAmbientDisplaySuppressionTokens())
-                .containsExactly("test1", "test2");
-    }
-
-    @Test
-    public void testSetPowerBoost_redirectsCallToNativeWrapper() {
-        createService();
-        startSystem();
-
-        mService.getBinderServiceInstance().setPowerBoost(Boost.INTERACTION, 1234);
-
-        verify(mNativeWrapperMock).nativeSetPowerBoost(eq(Boost.INTERACTION), eq(1234));
-    }
-
-    @Test
-    public void testSetPowerMode_redirectsCallToNativeWrapper() {
-        createService();
-        startSystem();
-
-        // Enabled launch boost in BatterySaverController to allow setting launch mode.
-        when(mBatterySaverControllerMock.isLaunchBoostDisabled()).thenReturn(false);
-        when(mNativeWrapperMock.nativeSetPowerMode(anyInt(), anyBoolean())).thenReturn(true);
-
-        mService.getBinderServiceInstance().setPowerMode(Mode.LAUNCH, true);
-
-        verify(mNativeWrapperMock).nativeSetPowerMode(eq(Mode.LAUNCH), eq(true));
-    }
-
-    @Test
-    public void testSetPowerMode_withLaunchBoostDisabledAndModeLaunch_ignoresCallToEnable() {
-        createService();
-        startSystem();
-
-        // Disables launch boost in BatterySaverController.
-        when(mBatterySaverControllerMock.isLaunchBoostDisabled()).thenReturn(true);
-        when(mNativeWrapperMock.nativeSetPowerMode(anyInt(), anyBoolean())).thenReturn(true);
-
-        mService.getBinderServiceInstance().setPowerMode(Mode.LAUNCH, true);
-        mService.getBinderServiceInstance().setPowerMode(Mode.LAUNCH, false);
-
-        verify(mNativeWrapperMock, never()).nativeSetPowerMode(eq(Mode.LAUNCH), eq(true));
-        verify(mNativeWrapperMock).nativeSetPowerMode(eq(Mode.LAUNCH), eq(false));
-    }
-
-    @Test
-    public void testSetPowerModeChecked_returnsNativeCallResult() {
-        createService();
-        startSystem();
-
-        // Disables launch boost in BatterySaverController.
-        when(mBatterySaverControllerMock.isLaunchBoostDisabled()).thenReturn(true);
-        when(mNativeWrapperMock.nativeSetPowerMode(anyInt(), anyBoolean())).thenReturn(true);
-        when(mNativeWrapperMock.nativeSetPowerMode(eq(Mode.INTERACTIVE), anyBoolean()))
-            .thenReturn(false);
-
-        // Ignored because isLaunchBoostDisabled is true. Should return false.
-        assertFalse(mService.getBinderServiceInstance().setPowerModeChecked(Mode.LAUNCH, true));
-        // Native calls return true.
-        assertTrue(mService.getBinderServiceInstance().setPowerModeChecked(Mode.LAUNCH, false));
-        assertTrue(mService.getBinderServiceInstance().setPowerModeChecked(Mode.LOW_POWER, true));
-        // Native call for interactive returns false.
-        assertFalse(
-                mService.getBinderServiceInstance().setPowerModeChecked(Mode.INTERACTIVE, false));
-    }
-
-    @Test
-    public void testMultiDisplay_wakefulnessUpdates() {
-        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-
-        createService();
-        startSystem();
-        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_ASLEEP, 0, 0, 0, 0,
-                null, null);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        mService.setWakefulnessLocked(nonDefaultDisplayGroupId, WAKEFULNESS_ASLEEP, 0, 0, 0, 0,
-                null, null);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-
-        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_AWAKE, 0, 0, 0, 0,
-                null, null);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-    }
-
-    @Test
-    public void testMultiDisplay_addDisplayGroup_wakesDeviceUp() {
-        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-
-        createService();
-        startSystem();
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_ASLEEP, 0, 0, 0, 0,
-                null, null);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-
-        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-    }
-
-    @Test
-    public void testMultiDisplay_removeDisplayGroup_updatesWakefulness() {
-        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-
-        createService();
-        startSystem();
-        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_ASLEEP, 0, 0, 0, 0,
-                null, null);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        listener.get().onDisplayGroupRemoved(nonDefaultDisplayGroupId);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-
-        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_AWAKE, 0, 0, 0, 0,
-                null, null);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-    }
-
-    @Test
-    public void testMultiDisplay_updatesLastGlobalWakeTime() {
-        final int nonDefaultPowerGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        long eventTime1 = 10;
-        long eventTime2 = eventTime1 + 1;
-        long eventTime3 = eventTime2 + 1;
-        long eventTime4 = eventTime3 + 1;
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-
-        createService();
-        startSystem();
-        listener.get().onDisplayGroupAdded(nonDefaultPowerGroupId);
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_DOZING, eventTime1,
-                0, PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE, 0, null, null);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        mService.setWakefulnessLocked(nonDefaultPowerGroupId, WAKEFULNESS_DOZING, eventTime2,
-                0, PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
-        long eventElapsedRealtime1 = mLastElapsedRealtime;
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
-        assertThat(mService.getBinderServiceInstance().getLastSleepReason()).isEqualTo(
-                PowerManager.GO_TO_SLEEP_REASON_APPLICATION);
-
-        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_AWAKE,
-                eventTime3, /* uid= */ 0, PowerManager.WAKE_REASON_PLUGGED_IN, /* opUid= */
-                0, /* opPackageName= */ null, /* details= */ null);
-        long eventElapsedRealtime2 = mLastElapsedRealtime;
-        PowerManager.WakeData wakeData = mService.getLocalServiceInstance().getLastWakeup();
-        assertThat(wakeData.wakeTime).isEqualTo(eventTime3);
-        assertThat(wakeData.wakeReason).isEqualTo(PowerManager.WAKE_REASON_PLUGGED_IN);
-        assertThat(wakeData.sleepDurationRealtime)
-                .isEqualTo(eventElapsedRealtime2 - eventElapsedRealtime1);
-
-        // The global wake time and reason as well as sleep duration shouldn't change when another
-        // PowerGroup wakes up.
-        mService.setWakefulnessLocked(nonDefaultPowerGroupId, WAKEFULNESS_AWAKE,
-                eventTime4, /* uid= */ 0, PowerManager.WAKE_REASON_CAMERA_LAUNCH, /* opUid= */
-                0, /* opPackageName= */ null, /* details= */ null);
-        PowerManager.WakeData wakeData2 = mService.getLocalServiceInstance().getLastWakeup();
-        assertThat(wakeData2).isEqualTo(wakeData);
-    }
-
-    @Test
-    public void testMultiDisplay_defaultDisplayCanDoze() {
-        createService();
-        startSystem();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-
-        forceDozing();
-        // Allow handleSandman() to be called asynchronously
-        advanceTime(500);
-        verify(mDreamManagerInternalMock).startDream(eq(true), anyString());
-    }
-
-    @Test
-    public void testMultiDisplay_twoDisplays_defaultDisplayCanDoze() {
-        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = nonDefaultDisplayGroupId;
-        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
-
-        createService();
-        startSystem();
-
-        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        forceDozing();
-
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_DOZING);
-        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        // Allow handleSandman() to be called asynchronously
-        advanceTime(500);
-        verify(mDreamManagerInternalMock).startDream(eq(true), anyString());
-    }
-
-    @Test
-    public void testMultiDisplay_addNewDisplay_becomeGloballyAwakeButDefaultRemainsDozing() {
-        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = nonDefaultDisplayGroupId;
-        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
-
-        doAnswer(inv -> {
-            when(mDreamManagerInternalMock.isDreaming()).thenReturn(true);
-            return null;
-        }).when(mDreamManagerInternalMock).startDream(anyBoolean(), anyString());
-
-        createService();
-        startSystem();
-
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-
-        forceDozing();
-        advanceTime(500);
-
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_DOZING);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DOZING);
-        verify(mDreamManagerInternalMock).stopDream(anyBoolean(), anyString());
-        verify(mDreamManagerInternalMock).startDream(eq(true), anyString());
-
-        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-        advanceTime(500);
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_DOZING);
-
-        // Make sure there were no additional calls to stopDream or startDream
-        verify(mDreamManagerInternalMock, atMost(1)).stopDream(anyBoolean(), anyString());
-        verify(mDreamManagerInternalMock, atMost(1)).startDream(eq(true), anyString());
-    }
-
-    @Test
-    public void testLastSleepTime_notUpdatedWhenDreaming() {
-        createService();
-        startSystem();
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        PowerManager.WakeData initialWakeData = mService.getLocalServiceInstance().getLastWakeup();
-
-        forceDream();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_DREAMING);
-        assertThat(mService.getLocalServiceInstance().getLastWakeup()).isEqualTo(initialWakeData);
-    }
-
-    @Test
-    public void testMultiDisplay_onlyOneDisplaySleeps_onWakefulnessChangedEventsFire() {
-        createService();
-        startSystem();
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        forceSleep();
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_ASLEEP);
-
-        verify(mNotifierMock).onGroupWakefulnessChangeStarted(eq(Display.DEFAULT_DISPLAY_GROUP),
-                eq(WAKEFULNESS_ASLEEP), eq(PowerManager.GO_TO_SLEEP_REASON_APPLICATION), anyLong());
-        verify(mNotifierMock).onGlobalWakefulnessChangeStarted(eq(WAKEFULNESS_ASLEEP),
-                eq(PowerManager.GO_TO_SLEEP_REASON_APPLICATION), anyLong());
-    }
-
-    @Test
-    public void testMultiDisplay_bothDisplaysSleep_onWakefulnessChangedEventsFireCorrectly() {
-        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = nonDefaultDisplayGroupId;
-        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
-
-        createService();
-        startSystem();
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-
-        mService.setWakefulnessLocked(nonDefaultDisplayGroupId, WAKEFULNESS_ASLEEP, 0, 0,
-                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
-        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_ASLEEP, 0, 0,
-                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP);
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_ASLEEP);
-        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
-                WAKEFULNESS_ASLEEP);
-
-        verify(mNotifierMock).onGroupWakefulnessChangeStarted(eq(nonDefaultDisplayGroupId),
-                eq(WAKEFULNESS_ASLEEP), eq(PowerManager.GO_TO_SLEEP_REASON_APPLICATION), anyLong());
-        verify(mNotifierMock).onGroupWakefulnessChangeStarted(eq(Display.DEFAULT_DISPLAY_GROUP),
-                eq(WAKEFULNESS_ASLEEP), eq(PowerManager.GO_TO_SLEEP_REASON_APPLICATION), anyLong());
-        verify(mNotifierMock).onGlobalWakefulnessChangeStarted(eq(WAKEFULNESS_ASLEEP),
-                eq(PowerManager.GO_TO_SLEEP_REASON_APPLICATION), anyLong());
-    }
-
-    @Test
-    public void testMultiDisplay_separateWakeStates_onWakefulnessChangedEventsFireCorrectly() {
-        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = nonDefaultDisplayGroupId;
-        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
-
-        createService();
-        startSystem();
-
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-
-        final String pkg = mContextSpy.getOpPackageName();
-        final Binder token = new Binder();
-        final String tag =
-                "testMultiDisplay_separateWakeStates_onWakefulnessChangedEventFiresCorrectly";
-        mService.getBinderServiceInstance().acquireWakeLock(token,
-                PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg,
-                null /* workSource */, null /* historyTag */, nonDefaultDisplay, null);
-
-        forceSleep();
-
-        // The wakelock should have kept the second display awake, and we should notify that the
-        // default display went to sleep.
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_ASLEEP);
-        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-        verify(mNotifierMock).onGroupWakefulnessChangeStarted(eq(nonDefaultDisplayGroupId),
-                eq(WAKEFULNESS_AWAKE), eq(PowerManager.WAKE_REASON_DISPLAY_GROUP_ADDED), anyLong());
-        verify(mNotifierMock).onGroupWakefulnessChangeStarted(eq(Display.DEFAULT_DISPLAY_GROUP),
-                eq(WAKEFULNESS_ASLEEP), eq(PowerManager.GO_TO_SLEEP_REASON_APPLICATION), anyLong());
-        verify(mNotifierMock, never()).onGlobalWakefulnessChangeStarted(eq(WAKEFULNESS_ASLEEP),
-                anyInt(), anyLong());
-    }
-
-    @Test
-    public void testMultiDisplay_oneDisplayGroupChanges_globalDoesNotChange() {
-        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = nonDefaultDisplayGroupId;
-        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
-
-        createService();
-        startSystem();
-
-        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-
-        long eventTime = mClock.now();
-        mService.setWakefulnessLocked(nonDefaultDisplayGroupId, WAKEFULNESS_ASLEEP, eventTime, 0,
-                PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
-
-        assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
-                WAKEFULNESS_AWAKE);
-        assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
-                WAKEFULNESS_ASLEEP);
-        assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
-        verify(mNotifierMock, never()).onGlobalWakefulnessChangeStarted(anyInt(), anyInt(),
-                anyLong());
-        verify(mNotifierMock, atMost(1)).onGroupWakefulnessChangeStarted(
-                eq(nonDefaultDisplayGroupId), eq(WAKEFULNESS_ASLEEP),
-                eq(PowerManager.GO_TO_SLEEP_REASON_APPLICATION), eq(eventTime));
-    }
-
-    @Test
-    public void testMultiDisplay_isInteractive_nonExistentGroup() {
-        createService();
-        startSystem();
-
-        int nonExistentDisplayGroup = 999;
-        BinderService binderService = mService.getBinderServiceInstance();
-        assertThat(binderService.isDisplayInteractive(nonExistentDisplayGroup)).isFalse();
-    }
-
-    private void testMultiDisplay_isInteractive_returnsCorrectValue(
-            boolean defaultDisplayAwake, boolean secondGroupDisplayAwake) {
-        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        // We use a display id that does not match the group id, to make sure we aren't accidentally
-        // confusing display id's and display group id's in the implementation.
-        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 17;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-
-        final DisplayInfo defaultDisplayInfo = new DisplayInfo();
-        defaultDisplayInfo.displayGroupId = Display.DEFAULT_DISPLAY_GROUP;
-        when(mDisplayManagerInternalMock.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(
-                defaultDisplayInfo);
-
-        final DisplayInfo secondDisplayInfo = new DisplayInfo();
-        secondDisplayInfo.displayGroupId = nonDefaultDisplayGroupId;
-        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(
-                secondDisplayInfo);
-
-        createService();
-        startSystem();
-        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-
-        if (!defaultDisplayAwake) {
-            mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_ASLEEP,
-                    mClock.now(), 0, PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
-        }
-        if (!secondGroupDisplayAwake) {
-            mService.setWakefulnessLocked(nonDefaultDisplayGroupId, WAKEFULNESS_ASLEEP,
-                    mClock.now(), 0,
-                    PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
-        }
-        assertThat(PowerManagerInternal.isInteractive(
-                mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP))).isEqualTo(
-                defaultDisplayAwake);
-        assertThat(PowerManagerInternal.isInteractive(
-                mService.getWakefulnessLocked(nonDefaultDisplayGroupId))).isEqualTo(
-                secondGroupDisplayAwake);
-
-        BinderService binderService = mService.getBinderServiceInstance();
-        assertThat(binderService.isInteractive()).isEqualTo(
-                defaultDisplayAwake || secondGroupDisplayAwake);
-        assertThat(binderService.isDisplayInteractive(Display.DEFAULT_DISPLAY)).isEqualTo(
-                defaultDisplayAwake);
-        assertThat(binderService.isDisplayInteractive(nonDefaultDisplay)).isEqualTo(
-                secondGroupDisplayAwake);
-    }
-
-    @Test
-    public void testMultiDisplay_isInteractive_defaultGroupIsAwakeSecondGroupIsAwake() {
-        testMultiDisplay_isInteractive_returnsCorrectValue(true, true);
-    }
-
-    @Test
-    public void testMultiDisplay_isInteractive_defaultGroupIsAwakeSecondGroupIsAsleep() {
-        testMultiDisplay_isInteractive_returnsCorrectValue(true, false);
-    }
-
-    @Test
-    public void testMultiDisplay_isInteractive_defaultGroupIsAsleepSecondGroupIsAwake() {
-        testMultiDisplay_isInteractive_returnsCorrectValue(false, true);
-    }
-
-    @Test
-    public void testMultiDisplay_isInteractive_bothGroupsAreAsleep() {
-        testMultiDisplay_isInteractive_returnsCorrectValue(false, false);
-    }
-
-    @Test
-    public void testMultiDisplay_defaultGroupWakefulnessChange_causesIsInteractiveInvalidate()
-            throws Exception {
-        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = nonDefaultDisplayGroupId;
-        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
-        createService();
-        startSystem();
-        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-
-        verify(mInvalidateInteractiveCachesMock).call();
-
-        mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_ASLEEP,
-                mClock.now(), 0, PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
-
-        verify(mInvalidateInteractiveCachesMock, times(2)).call();
-    }
-
-    @Test
-    public void testMultiDisplay_secondGroupWakefulness_causesIsInteractiveInvalidate()
-            throws Exception {
-        final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
-        final int nonDefaultDisplay = Display.DEFAULT_DISPLAY + 1;
-        final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
-                new AtomicReference<>();
-        doAnswer((Answer<Void>) invocation -> {
-            listener.set(invocation.getArgument(0));
-            return null;
-        }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
-        final DisplayInfo info = new DisplayInfo();
-        info.displayGroupId = nonDefaultDisplayGroupId;
-        when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
-        createService();
-        startSystem();
-        listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-
-        verify(mInvalidateInteractiveCachesMock).call();
-
-        mService.setWakefulnessLocked(nonDefaultDisplayGroupId, WAKEFULNESS_ASLEEP, mClock.now(),
-                0, PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
-
-        verify(mInvalidateInteractiveCachesMock, times(2)).call();
-    }
-
-    @Test
-    public void testGetFullPowerSavePolicy_returnsStateMachineResult() {
-        createService();
-        startSystem();
-        BatterySaverPolicyConfig mockReturnConfig = new BatterySaverPolicyConfig.Builder().build();
-        when(mBatterySaverStateMachineMock.getFullBatterySaverPolicy())
-                .thenReturn(mockReturnConfig);
-
-        mService.getBinderServiceInstance().setPowerSaveModeEnabled(true);
-        BatterySaverPolicyConfig policyConfig =
-                mService.getBinderServiceInstance().getFullPowerSavePolicy();
-        assertThat(mockReturnConfig).isEqualTo(policyConfig);
-        verify(mBatterySaverStateMachineMock).getFullBatterySaverPolicy();
-    }
-
-    @Test
-    public void testSetFullPowerSavePolicy_callsStateMachine() {
-        createService();
-        startSystem();
-        BatterySaverPolicyConfig mockSetPolicyConfig =
-                new BatterySaverPolicyConfig.Builder().build();
-        when(mBatterySaverStateMachineMock.setFullBatterySaverPolicy(any())).thenReturn(true);
-
-        mService.getBinderServiceInstance().setPowerSaveModeEnabled(true);
-        assertThat(mService.getBinderServiceInstance()
-                .setFullPowerSavePolicy(mockSetPolicyConfig)).isTrue();
-        verify(mBatterySaverStateMachineMock).setFullBatterySaverPolicy(eq(mockSetPolicyConfig));
-    }
-
-    @Test
-    public void testLowPowerStandby_whenInactive_FgsWakeLockEnabled() {
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("fgsWakeLock", PowerManager.PARTIAL_WAKE_LOCK);
-        mService.updateUidProcStateInternal(wakeLock.mOwnerUid, PROCESS_STATE_FOREGROUND_SERVICE);
-        mService.setDeviceIdleModeInternal(true);
-
-        assertThat(wakeLock.mDisabled).isFalse();
-    }
-
-    @Test
-    public void testLowPowerStandby_whenActive_FgsWakeLockDisabled() {
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("fgsWakeLock", PowerManager.PARTIAL_WAKE_LOCK);
-        mService.updateUidProcStateInternal(wakeLock.mOwnerUid, PROCESS_STATE_FOREGROUND_SERVICE);
-        mService.setDeviceIdleModeInternal(true);
-        mService.setLowPowerStandbyActiveInternal(true);
-
-        assertThat(wakeLock.mDisabled).isTrue();
-    }
-
-    @Test
-    public void testLowPowerStandby_whenActive_FgsWakeLockEnabledIfAllowlisted() {
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("fgsWakeLock", PowerManager.PARTIAL_WAKE_LOCK);
-        mService.updateUidProcStateInternal(wakeLock.mOwnerUid, PROCESS_STATE_FOREGROUND_SERVICE);
-        mService.setDeviceIdleModeInternal(true);
-        mService.setLowPowerStandbyActiveInternal(true);
-        mService.setLowPowerStandbyAllowlistInternal(new int[]{wakeLock.mOwnerUid});
-
-        assertThat(wakeLock.mDisabled).isFalse();
-    }
-
-    @Test
-    public void testLowPowerStandby_whenActive_BoundTopWakeLockDisabled() {
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("BoundTopWakeLock", PowerManager.PARTIAL_WAKE_LOCK);
-        mService.updateUidProcStateInternal(wakeLock.mOwnerUid, PROCESS_STATE_BOUND_TOP);
-        mService.setDeviceIdleModeInternal(true);
-        mService.setLowPowerStandbyActiveInternal(true);
-
-        assertThat(wakeLock.mDisabled).isFalse();
-    }
-
-    @Test
-    public void testSetLowPowerStandbyActiveDuringMaintenance_redirectsCallToNativeWrapper() {
-        createService();
-        startSystem();
-
-        mService.getBinderServiceInstance().setLowPowerStandbyActiveDuringMaintenance(true);
-        verify(mLowPowerStandbyControllerMock).setActiveDuringMaintenance(true);
-
-        mService.getBinderServiceInstance().setLowPowerStandbyActiveDuringMaintenance(false);
-        verify(mLowPowerStandbyControllerMock).setActiveDuringMaintenance(false);
-    }
-
-    private WakeLock acquireWakeLock(String tag, int flags) {
-        IBinder token = new Binder();
-        String packageName = "pkg.name";
-        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY,
-                null /* callback */);
-        return mService.findWakeLockLocked(token);
-    }
-
-    /**
-     * Test IPowerManager.acquireWakeLock() with a IWakeLockCallback.
-     */
-    @Test
-    public void testNotifyWakeLockCallback() {
-        createService();
-        startSystem();
-        final String tag = "wakelock1";
-        final String packageName = "pkg.name";
-        final IBinder token = new Binder();
-        final int flags = PowerManager.PARTIAL_WAKE_LOCK;
-        final IWakeLockCallback callback = Mockito.mock(IWakeLockCallback.class);
-        final IBinder callbackBinder = Mockito.mock(Binder.class);
-        when(callback.asBinder()).thenReturn(callbackBinder);
-        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, callback);
-        verify(mNotifierMock).onWakeLockAcquired(anyInt(), eq(tag), eq(packageName), anyInt(),
-                anyInt(), any(), any(), same(callback));
-
-        mService.getBinderServiceInstance().releaseWakeLock(token, 0);
-        verify(mNotifierMock).onWakeLockReleased(anyInt(), eq(tag), eq(packageName), anyInt(),
-                anyInt(), any(), any(), same(callback));
-    }
-
-    /**
-     * Test IPowerManager.updateWakeLockCallback() with a new IWakeLockCallback.
-     */
-    @Test
-    public void testNotifyWakeLockCallbackChange() {
-        createService();
-        startSystem();
-        final String tag = "wakelock1";
-        final String packageName = "pkg.name";
-        final IBinder token = new Binder();
-        int flags = PowerManager.PARTIAL_WAKE_LOCK;
-        final IWakeLockCallback callback1 = Mockito.mock(IWakeLockCallback.class);
-        final IBinder callbackBinder1 = Mockito.mock(Binder.class);
-        when(callback1.asBinder()).thenReturn(callbackBinder1);
-        mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName,
-                null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, callback1);
-        verify(mNotifierMock).onWakeLockAcquired(anyInt(), eq(tag), eq(packageName), anyInt(),
-                anyInt(), any(), any(), same(callback1));
-
-        final IWakeLockCallback callback2 = Mockito.mock(IWakeLockCallback.class);
-        final IBinder callbackBinder2 = Mockito.mock(Binder.class);
-        when(callback2.asBinder()).thenReturn(callbackBinder2);
-        mService.getBinderServiceInstance().updateWakeLockCallback(token, callback2);
-        verify(mNotifierMock).onWakeLockChanging(anyInt(), eq(tag), eq(packageName),
-                anyInt(), anyInt(), any(), any(), same(callback1),
-                anyInt(), eq(tag), eq(packageName), anyInt(), anyInt(), any(), any(),
-                same(callback2));
-
-        mService.getBinderServiceInstance().releaseWakeLock(token, 0);
-        verify(mNotifierMock).onWakeLockReleased(anyInt(), eq(tag), eq(packageName), anyInt(),
-                anyInt(), any(), any(), same(callback2));
-    }
-
-    @Test
-    public void testUserActivity_futureEventsAreIgnored() {
-        createService();
-        startSystem();
-        // Starting the system triggers a user activity event, so clear that before calling
-        // userActivity() directly.
-        clearInvocations(mNotifierMock);
-        final long eventTime = mClock.now() + Duration.ofHours(10).toMillis();
-        mService.getBinderServiceInstance().userActivity(Display.DEFAULT_DISPLAY, eventTime,
-                USER_ACTIVITY_EVENT_BUTTON, /* flags= */ 0);
-        verify(mNotifierMock, never()).onUserActivity(anyInt(),  anyInt(), anyInt());
-    }
-
-    @Test
-    public void testFeatureEnabledProcStateUncachedToCached_fullWakeLockDisabled() {
-        doReturn(true).when(mDeviceParameterProvider)
-                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("fullWakeLock", PowerManager.FULL_WAKE_LOCK);
-        setUncachedUidProcState(wakeLock.mOwnerUid);
-
-        setCachedUidProcState(wakeLock.mOwnerUid);
-        assertThat(wakeLock.mDisabled).isTrue();
-    }
-
-    @Test
-    public void testFeatureDisabledProcStateUncachedToCached_fullWakeLockEnabled() {
-        doReturn(false).when(mDeviceParameterProvider)
-                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("fullWakeLock", PowerManager.FULL_WAKE_LOCK);
-        setUncachedUidProcState(wakeLock.mOwnerUid);
-
-        setCachedUidProcState(wakeLock.mOwnerUid);
-        assertThat(wakeLock.mDisabled).isFalse();
-    }
-
-    @Test
-    public void testFeatureEnabledProcStateUncachedToCached_screenBrightWakeLockDisabled() {
-        doReturn(true).when(mDeviceParameterProvider)
-                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("screenBrightWakeLock",
-                PowerManager.SCREEN_BRIGHT_WAKE_LOCK);
-        setUncachedUidProcState(wakeLock.mOwnerUid);
-
-        setCachedUidProcState(wakeLock.mOwnerUid);
-        assertThat(wakeLock.mDisabled).isTrue();
-    }
-
-    @Test
-    public void testFeatureDisabledProcStateUncachedToCached_screenBrightWakeLockEnabled() {
-        doReturn(false).when(mDeviceParameterProvider)
-                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("screenBrightWakeLock",
-                PowerManager.SCREEN_BRIGHT_WAKE_LOCK);
-        setUncachedUidProcState(wakeLock.mOwnerUid);
-
-        setCachedUidProcState(wakeLock.mOwnerUid);
-        assertThat(wakeLock.mDisabled).isFalse();
-    }
-
-    @Test
-    public void testFeatureEnabledProcStateUncachedToCached_screenDimWakeLockDisabled() {
-        doReturn(true).when(mDeviceParameterProvider)
-                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("screenDimWakeLock",
-                PowerManager.SCREEN_DIM_WAKE_LOCK);
-        setUncachedUidProcState(wakeLock.mOwnerUid);
-
-        setCachedUidProcState(wakeLock.mOwnerUid);
-        assertThat(wakeLock.mDisabled).isTrue();
-    }
-
-    @Test
-    public void testFeatureDisabledProcStateUncachedToCached_screenDimWakeLockEnabled() {
-        doReturn(false).when(mDeviceParameterProvider)
-                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("screenDimWakeLock",
-                PowerManager.SCREEN_DIM_WAKE_LOCK);
-        setUncachedUidProcState(wakeLock.mOwnerUid);
-
-        setCachedUidProcState(wakeLock.mOwnerUid);
-        assertThat(wakeLock.mDisabled).isFalse();
-    }
-
-    @Test
-    public void testFeatureEnabledProcStateCachedToUncached_fullWakeLockEnabled() {
-        doReturn(true).when(mDeviceParameterProvider)
-                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("fullWakeLock", PowerManager.FULL_WAKE_LOCK);
-        setCachedUidProcState(wakeLock.mOwnerUid);
-
-        setUncachedUidProcState(wakeLock.mOwnerUid);
-        assertThat(wakeLock.mDisabled).isFalse();
-    }
-
-    @Test
-    public void testFeatureDisabledProcStateCachedToUncached_fullWakeLockEnabled() {
-        doReturn(false).when(mDeviceParameterProvider)
-                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("fullWakeLock", PowerManager.FULL_WAKE_LOCK);
-        setCachedUidProcState(wakeLock.mOwnerUid);
-
-        setUncachedUidProcState(wakeLock.mOwnerUid);
-        assertThat(wakeLock.mDisabled).isFalse();
-    }
-
-    @Test
-    public void testFeatureEnabledProcStateCachedToUncached_screenBrightWakeLockEnabled() {
-        doReturn(true).when(mDeviceParameterProvider)
-                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("screenBrightWakeLock",
-                PowerManager.SCREEN_BRIGHT_WAKE_LOCK);
-        setCachedUidProcState(wakeLock.mOwnerUid);
-
-        setUncachedUidProcState(wakeLock.mOwnerUid);
-        assertThat(wakeLock.mDisabled).isFalse();
-    }
-
-    @Test
-    public void testFeatureDisabledProcStateCachedToUncached_screenBrightWakeLockEnabled() {
-        doReturn(false).when(mDeviceParameterProvider)
-                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("screenBrightWakeLock",
-                PowerManager.SCREEN_BRIGHT_WAKE_LOCK);
-        setCachedUidProcState(wakeLock.mOwnerUid);
-
-        setUncachedUidProcState(wakeLock.mOwnerUid);
-        assertThat(wakeLock.mDisabled).isFalse();
-    }
-
-    @Test
-    public void testFeatureEnabledProcStateCachedToUncached_screenDimWakeLockEnabled() {
-        doReturn(true).when(mDeviceParameterProvider)
-                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("screenDimWakeLock",
-                PowerManager.SCREEN_DIM_WAKE_LOCK);
-        setCachedUidProcState(wakeLock.mOwnerUid);
-
-        setUncachedUidProcState(wakeLock.mOwnerUid);
-        assertThat(wakeLock.mDisabled).isFalse();
-    }
-
-    @Test
-    public void testFeatureDisabledProcStateCachedToUncached_screenDimWakeLockEnabled() {
-        doReturn(false).when(mDeviceParameterProvider)
-                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
-        createService();
-        startSystem();
-        WakeLock wakeLock = acquireWakeLock("screenDimWakeLock",
-                PowerManager.SCREEN_DIM_WAKE_LOCK);
-        setCachedUidProcState(wakeLock.mOwnerUid);
-
-        setUncachedUidProcState(wakeLock.mOwnerUid);
-        assertThat(wakeLock.mDisabled).isFalse();
-    }
-
-    @Test
-    public void testFeatureDynamicallyDisabledProcStateUncachedToCached_fullWakeLockEnabled() {
-        doReturn(true).when(mDeviceParameterProvider)
-                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
-        ArgumentCaptor<DeviceConfig.OnPropertiesChangedListener> listenerCaptor =
-                ArgumentCaptor.forClass(DeviceConfig.OnPropertiesChangedListener.class);
-        createService();
-        startSystem();
-        verify(mDeviceParameterProvider, times(1))
-                .addOnPropertiesChangedListener(any(), listenerCaptor.capture());
-        WakeLock wakeLock = acquireWakeLock("fullWakeLock", PowerManager.FULL_WAKE_LOCK);
-        setUncachedUidProcState(wakeLock.mOwnerUid);
-        // dynamically disable the feature
-        doReturn(false).when(mDeviceParameterProvider)
-                .isDisableScreenWakeLocksWhileCachedFeatureEnabled();
-        listenerCaptor.getValue().onPropertiesChanged(
-                new DeviceConfig.Properties("ignored_namespace", null));
-
-        setUncachedUidProcState(wakeLock.mOwnerUid);
-        assertThat(wakeLock.mDisabled).isFalse();
-    }
-
-    private void setCachedUidProcState(int uid) {
-        mService.updateUidProcStateInternal(uid, PROCESS_STATE_TOP_SLEEPING);
-    }
-
-    private void setUncachedUidProcState(int uid) {
-        mService.updateUidProcStateInternal(uid, PROCESS_STATE_RECEIVER);
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/ShutdownCheckPointsTest.java b/services/tests/servicestests/src/com/android/server/power/ShutdownCheckPointsTest.java
deleted file mode 100644
index 2bde51b..0000000
--- a/services/tests/servicestests/src/com/android/server/power/ShutdownCheckPointsTest.java
+++ /dev/null
@@ -1,414 +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.server.power;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.when;
-
-import android.app.ActivityManager;
-import android.app.IActivityManager;
-import android.os.Process;
-import android.os.RemoteException;
-import android.platform.test.annotations.Presubmit;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Locale;
-import java.util.TimeZone;
-
-/**
- * Run: atest FrameworksServicesTests:ShutdownCheckPointsTest
- */
-@Presubmit
-public class ShutdownCheckPointsTest {
-
-    @Rule
-    public MockitoRule rule = MockitoJUnit.rule();
-
-    @Mock
-    private IActivityManager mActivityManager;
-
-    private TestInjector mTestInjector;
-    private ShutdownCheckPoints mInstance;
-
-    @Before
-    public void setUp() {
-        Locale.setDefault(Locale.UK);
-        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
-        mTestInjector = new TestInjector(mActivityManager);
-        mInstance = new ShutdownCheckPoints(mTestInjector);
-    }
-
-    @Test
-    public void testSystemServerEntry() {
-        mTestInjector.setCurrentTime(1000);
-        mInstance.recordCheckPointInternal("reason1");
-
-        assertTrue(dumpToString().startsWith(
-                "Shutdown request from SYSTEM for reason reason1 "
-                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
-                        + "com.android.server.power.ShutdownCheckPointsTest"
-                        + ".testSystemServerEntry\n at "));
-    }
-
-    @Test
-    public void testSystemServerEntryWithoutReason() {
-        mTestInjector.setCurrentTime(1000);
-        mInstance.recordCheckPointInternal(null);
-
-        assertTrue(dumpToString().startsWith(
-                "Shutdown request from SYSTEM at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"));
-    }
-
-    @Test
-    public void testSystemServiceBinderEntry() {
-        mTestInjector.setCurrentTime(1000);
-        mInstance.recordCheckPointInternal(Process.myPid(), "reason1");
-
-        assertTrue(dumpToString().startsWith(
-                "Shutdown request from SYSTEM for reason reason1 "
-                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
-                        + "com.android.server.power.ShutdownCheckPointsTest"
-                        + ".testSystemServiceBinderEntry\n at "));
-    }
-
-    @Test
-    public void testCallerProcessBinderEntries() throws RemoteException {
-        List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfos = new ArrayList<>();
-        runningAppProcessInfos.add(
-                new ActivityManager.RunningAppProcessInfo("process_name", 1, new String[0]));
-        when(mActivityManager.getRunningAppProcesses()).thenReturn(runningAppProcessInfos);
-
-        mTestInjector.setCurrentTime(1000);
-        // Matching pid in getRunningAppProcesses
-        mInstance.recordCheckPointInternal(1, "reason1");
-        // Mising pid in getRunningAppProcesses
-        mInstance.recordCheckPointInternal(2, "reason2");
-
-        assertEquals(
-                "Shutdown request from BINDER for reason reason1 "
-                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
-                        + "com.android.server.power.ShutdownCheckPointsTest"
-                        + ".testCallerProcessBinderEntries\n"
-                        + "From process process_name (pid=1)\n\n"
-                        + "Shutdown request from BINDER for reason reason2 "
-                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
-                        + "com.android.server.power.ShutdownCheckPointsTest"
-                        + ".testCallerProcessBinderEntries\n"
-                        + "From process ? (pid=2)\n\n",
-                dumpToString());
-    }
-
-    @Test
-    public void testNullCallerProcessBinderEntries() throws RemoteException {
-        when(mActivityManager.getRunningAppProcesses()).thenReturn(null);
-
-        mTestInjector.setCurrentTime(1000);
-        mInstance.recordCheckPointInternal(1, "reason1");
-
-        assertEquals(
-                "Shutdown request from BINDER for reason reason1 "
-                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
-                        + "com.android.server.power.ShutdownCheckPointsTest"
-                        + ".testNullCallerProcessBinderEntries\n"
-                        + "From process ? (pid=1)\n\n",
-                dumpToString());
-    }
-
-    @Test
-    public void testRemoteExceptionOnBinderEntry() throws RemoteException {
-        when(mActivityManager.getRunningAppProcesses()).thenThrow(new RemoteException("Error"));
-
-        mTestInjector.setCurrentTime(1000);
-        mInstance.recordCheckPointInternal(1, "reason1");
-
-        assertEquals(
-                "Shutdown request from BINDER for reason reason1 "
-                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
-                        + "com.android.server.power.ShutdownCheckPointsTest"
-                        + ".testRemoteExceptionOnBinderEntry\n"
-                        + "From process ? (pid=1)\n\n",
-                dumpToString());
-    }
-
-    @Test
-    public void testUnknownProcessBinderEntry() {
-        mTestInjector.setCurrentTime(1000);
-        mInstance.recordCheckPointInternal(1, "reason1");
-
-        assertEquals(
-                "Shutdown request from BINDER for reason reason1 "
-                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
-                        + "com.android.server.power.ShutdownCheckPointsTest"
-                        + ".testUnknownProcessBinderEntry\n"
-                        + "From process ? (pid=1)\n\n",
-                dumpToString());
-    }
-
-    @Test
-    public void testBinderEntryWithoutReason() throws RemoteException {
-        mTestInjector.setCurrentTime(1000);
-        mInstance.recordCheckPointInternal(1, null);
-
-        assertTrue(dumpToString().startsWith(
-                "Shutdown request from BINDER at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"));
-    }
-
-    @Test
-    public void testSystemServiceIntentEntry() {
-        mTestInjector.setCurrentTime(1000);
-        mInstance.recordCheckPointInternal("some.intent", "android", "reason1");
-
-        assertTrue(dumpToString().startsWith(
-                "Shutdown request from SYSTEM for reason reason1 "
-                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
-                        + "com.android.server.power.ShutdownCheckPointsTest"
-                        + ".testSystemServiceIntentEntry\n at "));
-    }
-
-    @Test
-    public void testIntentEntry() {
-        mTestInjector.setCurrentTime(1000);
-        mInstance.recordCheckPointInternal("some.intent", "some.app", "reason1");
-
-        assertEquals(
-                "Shutdown request from INTENT for reason reason1 "
-                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
-                        + "Intent: some.intent\n"
-                        + "Package: some.app\n\n",
-                dumpToString());
-    }
-
-    @Test
-    public void testIntentEntryWithoutReason() {
-        mTestInjector.setCurrentTime(1000);
-        mInstance.recordCheckPointInternal("some.intent", "some.app", null);
-
-        assertTrue(dumpToString().startsWith(
-                "Shutdown request from INTENT at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"));
-    }
-
-    @Test
-    public void testMultipleEntries() {
-        mTestInjector.setCurrentTime(1000);
-        mInstance.recordCheckPointInternal(1, "reason1");
-        mTestInjector.setCurrentTime(2000);
-        mInstance.recordCheckPointInternal(2, "reason2");
-        mTestInjector.setCurrentTime(3000);
-        mInstance.recordCheckPointInternal("intent", "app", "reason3");
-
-        assertEquals(
-                "Shutdown request from BINDER for reason reason1 "
-                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
-                        + "com.android.server.power.ShutdownCheckPointsTest.testMultipleEntries\n"
-                        + "From process ? (pid=1)\n\n"
-                        + "Shutdown request from BINDER for reason reason2 "
-                        + "at 1970-01-01 00:00:02.000 UTC (epoch=2000)\n"
-                        + "com.android.server.power.ShutdownCheckPointsTest.testMultipleEntries\n"
-                        + "From process ? (pid=2)\n\n"
-                        + "Shutdown request from INTENT for reason reason3 "
-                        + "at 1970-01-01 00:00:03.000 UTC (epoch=3000)\n"
-                        + "Intent: intent\n"
-                        + "Package: app\n\n",
-                dumpToString());
-    }
-
-    @Test
-    public void testTooManyEntriesDropsOlderOnes() {
-        mTestInjector.setCheckPointsLimit(2);
-        ShutdownCheckPoints limitedInstance = new ShutdownCheckPoints(mTestInjector);
-
-        mTestInjector.setCurrentTime(1000);
-        limitedInstance.recordCheckPointInternal("intent.1", "app.1", "reason1");
-        mTestInjector.setCurrentTime(2000);
-        limitedInstance.recordCheckPointInternal("intent.2", "app.2", "reason2");
-        mTestInjector.setCurrentTime(3000);
-        limitedInstance.recordCheckPointInternal("intent.3", "app.3", "reason3");
-
-        // Drops first intent.
-        assertEquals(
-                "Shutdown request from INTENT for reason reason2 "
-                        + "at 1970-01-01 00:00:02.000 UTC (epoch=2000)\n"
-                        + "Intent: intent.2\n"
-                        + "Package: app.2\n\n"
-                        + "Shutdown request from INTENT for reason reason3 "
-                        + "at 1970-01-01 00:00:03.000 UTC (epoch=3000)\n"
-                        + "Intent: intent.3\n"
-                        + "Package: app.3\n\n",
-                dumpToString(limitedInstance));
-    }
-
-    @Test
-    public void testDumpToFile() throws Exception {
-        File tempDir = createTempDir();
-        File baseFile = new File(tempDir, "checkpoints");
-
-        mTestInjector.setCurrentTime(1000);
-        mInstance.recordCheckPointInternal("first.intent", "first.app", "reason1");
-        dumpToFile(baseFile);
-
-        mTestInjector.setCurrentTime(2000);
-        mInstance.recordCheckPointInternal("second.intent", "second.app", "reason2");
-        dumpToFile(baseFile);
-
-        File[] dumpFiles = tempDir.listFiles();
-        Arrays.sort(dumpFiles);
-
-        assertEquals(2, dumpFiles.length);
-        assertEquals(
-                "Shutdown request from INTENT for reason reason1 "
-                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
-                        + "Intent: first.intent\n"
-                        + "Package: first.app\n\n",
-                readFileAsString(dumpFiles[0].getAbsolutePath()));
-        assertEquals(
-                "Shutdown request from INTENT for reason reason1 "
-                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
-                        + "Intent: first.intent\n"
-                        + "Package: first.app\n\n"
-                        + "Shutdown request from INTENT for reason reason2 "
-                        + "at 1970-01-01 00:00:02.000 UTC (epoch=2000)\n"
-                        + "Intent: second.intent\n"
-                        + "Package: second.app\n\n",
-                readFileAsString(dumpFiles[1].getAbsolutePath()));
-    }
-
-    @Test
-    public void testTooManyFilesDropsOlderOnes() throws Exception {
-        mTestInjector.setDumpFilesLimit(1);
-        ShutdownCheckPoints instance = new ShutdownCheckPoints(mTestInjector);
-        File tempDir = createTempDir();
-        File baseFile = new File(tempDir, "checkpoints");
-
-        mTestInjector.setCurrentTime(1000);
-        instance.recordCheckPointInternal("first.intent", "first.app", "reason1");
-        dumpToFile(instance, baseFile);
-
-        mTestInjector.setCurrentTime(2000);
-        instance.recordCheckPointInternal("second.intent", "second.app", "reason2");
-        dumpToFile(instance, baseFile);
-
-        File[] dumpFiles = tempDir.listFiles();
-        assertEquals(1, dumpFiles.length);
-        assertEquals(
-                "Shutdown request from INTENT for reason reason1 "
-                        + "at 1970-01-01 00:00:01.000 UTC (epoch=1000)\n"
-                        + "Intent: first.intent\n"
-                        + "Package: first.app\n\n"
-                        + "Shutdown request from INTENT for reason reason2 "
-                        + "at 1970-01-01 00:00:02.000 UTC (epoch=2000)\n"
-                        + "Intent: second.intent\n"
-                        + "Package: second.app\n\n",
-                readFileAsString(dumpFiles[0].getAbsolutePath()));
-    }
-
-    private String dumpToString() {
-        return dumpToString(mInstance);
-    }
-
-    private String dumpToString(ShutdownCheckPoints instance) {
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        instance.dumpInternal(pw);
-        return sw.toString();
-    }
-
-    private void dumpToFile(File baseFile) throws InterruptedException {
-        dumpToFile(mInstance, baseFile);
-    }
-
-    private void dumpToFile(ShutdownCheckPoints instance, File baseFile)
-            throws InterruptedException {
-        Thread dumpThread = instance.newDumpThreadInternal(baseFile);
-        dumpThread.start();
-        dumpThread.join();
-    }
-
-    private String readFileAsString(String absolutePath) throws IOException {
-        return new String(Files.readAllBytes(Paths.get(absolutePath)), StandardCharsets.UTF_8);
-    }
-
-    private File createTempDir() throws IOException {
-        File tempDir = File.createTempFile("checkpoints", "out");
-        tempDir.delete();
-        tempDir.mkdir();
-        return tempDir;
-    }
-
-    /** Fake system dependencies for testing. */
-    private final class TestInjector implements ShutdownCheckPoints.Injector {
-        private long mNow;
-        private int mCheckPointsLimit;
-        private int mDumpFilesLimit;
-        private IActivityManager mActivityManager;
-
-        TestInjector(IActivityManager activityManager) {
-            mNow = 0;
-            mCheckPointsLimit = 100;
-            mDumpFilesLimit = 2;
-            mActivityManager = activityManager;
-        }
-
-        @Override
-        public long currentTimeMillis() {
-            return mNow;
-        }
-
-        @Override
-        public int maxCheckPoints() {
-            return mCheckPointsLimit;
-        }
-
-        @Override
-        public int maxDumpFiles() {
-            return mDumpFilesLimit;
-        }
-
-        @Override
-        public IActivityManager activityManager() {
-            return mActivityManager;
-        }
-
-        void setCurrentTime(long time) {
-            mNow = time;
-        }
-
-        void setCheckPointsLimit(int limit) {
-            mCheckPointsLimit = limit;
-        }
-
-        void setDumpFilesLimit(int dumpFilesLimit) {
-            mDumpFilesLimit = dumpFilesLimit;
-        }
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/WakeLockLogTest.java b/services/tests/servicestests/src/com/android/server/power/WakeLockLogTest.java
deleted file mode 100644
index a73fcb8..0000000
--- a/services/tests/servicestests/src/com/android/server/power/WakeLockLogTest.java
+++ /dev/null
@@ -1,266 +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.server.power;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.os.PowerManager;
-
-import org.junit.Test;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.text.SimpleDateFormat;
-import java.util.TimeZone;
-
-/**
- * Tests for {@link WakeLockLog}.
- */
-public class WakeLockLogTest {
-
-    @Test
-    public void testAddTwoItems() {
-        final int tagDatabaseSize = 128;
-        final int logSize = 20;
-        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
-        WakeLockLog log = new WakeLockLog(injectorSpy);
-
-        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
-        log.onWakeLockAcquired("TagPartial", 101,
-                PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE);
-
-        when(injectorSpy.currentTimeMillis()).thenReturn(1150L);
-        log.onWakeLockAcquired("TagFull", 102,
-                PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP);
-
-        assertEquals("Wake Lock Log\n"
-                + "  01-01 00:00:01.000 - 101 - ACQ TagPartial (partial,on-after-release)\n"
-                + "  01-01 00:00:01.150 - 102 - ACQ TagFull (full,acq-causes-wake)\n"
-                + "  -\n"
-                + "  Events: 2, Time-Resets: 0\n"
-                + "  Buffer, Bytes used: 6\n",
-                dumpLog(log, false));
-    }
-
-    @Test
-    public void testAddTwoItemsWithTimeReset() {
-        final int tagDatabaseSize = 128;
-        final int logSize = 20;
-        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
-        WakeLockLog log = new WakeLockLog(injectorSpy);
-
-        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
-        log.onWakeLockAcquired("TagPartial", 101, PowerManager.PARTIAL_WAKE_LOCK);
-
-        when(injectorSpy.currentTimeMillis()).thenReturn(1350L);
-        log.onWakeLockAcquired("TagFull", 102, PowerManager.FULL_WAKE_LOCK);
-
-        assertEquals("Wake Lock Log\n"
-                + "  01-01 00:00:01.000 - 101 - ACQ TagPartial (partial)\n"
-                + "  01-01 00:00:01.350 - 102 - ACQ TagFull (full)\n"
-                + "  -\n"
-                + "  Events: 2, Time-Resets: 1\n"
-                + "  Buffer, Bytes used: 15\n",
-                dumpLog(log, false));
-    }
-
-    @Test
-    public void testAddTwoItemsWithTagOverwrite() {
-        final int tagDatabaseSize = 2;
-        final int logSize = 20;
-        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
-        WakeLockLog log = new WakeLockLog(injectorSpy);
-
-        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
-        log.onWakeLockAcquired("TagPartial", 101, PowerManager.PARTIAL_WAKE_LOCK);
-
-        when(injectorSpy.currentTimeMillis()).thenReturn(1150L);
-        log.onWakeLockAcquired("TagFull", 102, PowerManager.FULL_WAKE_LOCK);
-
-        assertEquals("Wake Lock Log\n"
-                + "  01-01 00:00:01.000 - --- - ACQ UNKNOWN (partial)\n"
-                + "  01-01 00:00:01.150 - 102 - ACQ TagFull (full)\n"
-                + "  -\n"
-                + "  Events: 2, Time-Resets: 0\n"
-                + "  Buffer, Bytes used: 6\n",
-                dumpLog(log, false));
-    }
-
-    @Test
-    public void testAddFourItemsWithRingBufferOverflow() {
-        final int tagDatabaseSize = 6;
-        final int logSize = 10;
-        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
-        WakeLockLog log = new WakeLockLog(injectorSpy);
-
-        // This first item will get deleted when ring buffer loops around
-        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
-        log.onWakeLockAcquired("TagPartial", 101, PowerManager.PARTIAL_WAKE_LOCK);
-
-        when(injectorSpy.currentTimeMillis()).thenReturn(1150L);
-        log.onWakeLockAcquired("TagFull", 102, PowerManager.FULL_WAKE_LOCK);
-        when(injectorSpy.currentTimeMillis()).thenReturn(1151L);
-        log.onWakeLockAcquired("TagThree", 101, PowerManager.PARTIAL_WAKE_LOCK);
-        when(injectorSpy.currentTimeMillis()).thenReturn(1152L);
-        log.onWakeLockAcquired("TagFour", 101, PowerManager.PARTIAL_WAKE_LOCK);
-
-        assertEquals("Wake Lock Log\n"
-                + "  01-01 00:00:01.150 - 102 - ACQ TagFull (full)\n"
-                + "  01-01 00:00:01.151 - 101 - ACQ TagThree (partial)\n"
-                + "  01-01 00:00:01.152 - 101 - ACQ TagFour (partial)\n"
-                + "  -\n"
-                + "  Events: 3, Time-Resets: 0\n"
-                + "  Buffer, Bytes used: 9\n",
-                dumpLog(log, false));
-    }
-
-    @Test
-    public void testAddItemWithBadTag() {
-        final int tagDatabaseSize = 6;
-        final int logSize = 10;
-        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
-        WakeLockLog log = new WakeLockLog(injectorSpy);
-
-        // Bad tag means it wont get written
-        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
-        log.onWakeLockAcquired(null /* tag */, 0 /* ownerUid */, PowerManager.PARTIAL_WAKE_LOCK);
-
-        assertEquals("Wake Lock Log\n"
-                + "  -\n"
-                + "  Events: 0, Time-Resets: 0\n"
-                + "  Buffer, Bytes used: 0\n",
-                dumpLog(log, false));
-    }
-
-    @Test
-    public void testAddItemWithReducedTagName() {
-        final int tagDatabaseSize = 6;
-        final int logSize = 10;
-        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
-        WakeLockLog log = new WakeLockLog(injectorSpy);
-
-        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
-        log.onWakeLockAcquired("*job*/com.one.two.3hree/.one..Last", 101,
-                PowerManager.PARTIAL_WAKE_LOCK);
-
-        assertEquals("Wake Lock Log\n"
-                + "  01-01 00:00:01.000 - 101 - ACQ *job*/c.o.t.3/.o..Last (partial)\n"
-                + "  -\n"
-                + "  Events: 1, Time-Resets: 0\n"
-                + "  Buffer, Bytes used: 3\n",
-                dumpLog(log, false));
-    }
-
-    @Test
-    public void testAddAcquireAndReleaseWithRepeatTagName() {
-        final int tagDatabaseSize = 6;
-        final int logSize = 10;
-        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
-        WakeLockLog log = new WakeLockLog(injectorSpy);
-
-        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
-        log.onWakeLockAcquired("HowdyTag", 101, PowerManager.PARTIAL_WAKE_LOCK);
-        when(injectorSpy.currentTimeMillis()).thenReturn(1001L);
-        log.onWakeLockReleased("HowdyTag", 101);
-
-        assertEquals("Wake Lock Log\n"
-                + "  01-01 00:00:01.000 - 101 - ACQ HowdyTag (partial)\n"
-                + "  01-01 00:00:01.001 - 101 - REL HowdyTag\n"
-                + "  -\n"
-                + "  Events: 2, Time-Resets: 0\n"
-                + "  Buffer, Bytes used: 5\n"
-                + "  Tag Database: size(5), entries: 1, Bytes used: 80\n",
-                dumpLog(log, true));
-    }
-
-    @Test
-    public void testAddAcquireAndReleaseWithTimeTravel() {
-        final int tagDatabaseSize = 6;
-        final int logSize = 10;
-        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
-        WakeLockLog log = new WakeLockLog(injectorSpy);
-
-        when(injectorSpy.currentTimeMillis()).thenReturn(1100L);
-        log.onWakeLockAcquired("HowdyTag", 101, PowerManager.PARTIAL_WAKE_LOCK);
-
-        // New element goes back in time...should not be written to log.
-        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
-        log.onWakeLockReleased("HowdyTag", 101);
-
-        assertEquals("Wake Lock Log\n"
-                + "  01-01 00:00:01.100 - 101 - ACQ HowdyTag (partial)\n"
-                + "  -\n"
-                + "  Events: 1, Time-Resets: 0\n"
-                + "  Buffer, Bytes used: 3\n",
-                dumpLog(log, false));
-    }
-
-    @Test
-    public void testAddSystemWakelock() {
-        final int tagDatabaseSize = 6;
-        final int logSize = 10;
-        TestInjector injectorSpy = spy(new TestInjector(tagDatabaseSize, logSize));
-        WakeLockLog log = new WakeLockLog(injectorSpy);
-
-        when(injectorSpy.currentTimeMillis()).thenReturn(1000L);
-        log.onWakeLockAcquired("TagPartial", 101,
-                PowerManager.PARTIAL_WAKE_LOCK | PowerManager.SYSTEM_WAKELOCK);
-
-        assertEquals("Wake Lock Log\n"
-                        + "  01-01 00:00:01.000 - 101 - ACQ TagPartial (partial,system-wakelock)\n"
-                        + "  -\n"
-                        + "  Events: 1, Time-Resets: 0\n"
-                        + "  Buffer, Bytes used: 3\n",
-                dumpLog(log, false));
-    }
-
-    private String dumpLog(WakeLockLog log, boolean includeTagDb) {
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        log.dump(pw, includeTagDb);
-        return sw.toString();
-    }
-
-    public class TestInjector extends WakeLockLog.Injector {
-        private final int mTagDatabaseSize;
-        private final int mLogSize;
-
-        public TestInjector(int tagDatabaseSize, int logSize) {
-            mTagDatabaseSize = tagDatabaseSize;
-            mLogSize = logSize;
-        }
-
-        @Override
-        public int getTagDatabaseSize() {
-            return mTagDatabaseSize;
-        }
-
-        @Override
-        public int getLogSize() {
-            return mLogSize;
-        }
-
-        @Override
-        public SimpleDateFormat getDateFormat() {
-            SimpleDateFormat format = new SimpleDateFormat(super.getDateFormat().toPattern());
-            format.setTimeZone(TimeZone.getTimeZone("UTC"));
-            return format;
-        }
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java b/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java
index 5f84e9e..835ccf0 100644
--- a/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java
@@ -48,11 +48,7 @@
     private static final float DEFAULT_BRIGHTNESS_FACTOR = 0.5f;
     private static final float PRECISION = 0.001f;
     private static final int GPS_MODE = 0; // LOCATION_MODE_NO_CHANGE
-    private static final int DEFAULT_GPS_MODE =
-            PowerManager.LOCATION_MODE_FOREGROUND_ONLY;
     private static final int SOUND_TRIGGER_MODE = 0; // SOUND_TRIGGER_MODE_ALL_ENABLED
-    private static final int DEFAULT_SOUND_TRIGGER_MODE =
-            PowerManager.SOUND_TRIGGER_MODE_CRITICAL_ONLY;
     private static final String BATTERY_SAVER_CONSTANTS = "disable_vibration=false,"
             + "advertise_is_enabled=true,"
             + "disable_animation=false,"
@@ -119,7 +115,9 @@
     @Suppress
     @SmallTest
     public void testGetBatterySaverPolicy_PolicyVibration_DefaultValueCorrect() {
-        testServiceDefaultValue_Off(ServiceType.VIBRATION);
+        testDefaultValue(
+                com.android.internal.R.bool.config_batterySaver_full_disableVibration,
+                ServiceType.VIBRATION);
     }
 
     @SmallTest
@@ -130,27 +128,39 @@
 
     @SmallTest
     public void testGetBatterySaverPolicy_PolicySound_DefaultValueCorrect() {
-        testServiceDefaultValue_On(ServiceType.SOUND);
+        final int defaultMode = getContext().getResources().getInteger(
+                com.android.internal.R.integer.config_batterySaver_full_soundTriggerMode);
+        if (defaultMode == PowerManager.SOUND_TRIGGER_MODE_ALL_ENABLED) {
+            testServiceDefaultValue_Off(ServiceType.SOUND);
+        } else {
+            testServiceDefaultValue_On(ServiceType.SOUND);
+        }
 
         mBatterySaverPolicy.setPolicyLevel(POLICY_LEVEL_FULL);
         PowerSaveState stateOn =
                 mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.SOUND);
-        assertThat(stateOn.soundTriggerMode).isEqualTo(DEFAULT_SOUND_TRIGGER_MODE);
+        assertThat(stateOn.soundTriggerMode).isEqualTo(defaultMode);
     }
 
     @SmallTest
     public void testGetBatterySaverPolicy_PolicyFullBackup_DefaultValueCorrect() {
-        testServiceDefaultValue_On(ServiceType.FULL_BACKUP);
+        testDefaultValue(
+                com.android.internal.R.bool.config_batterySaver_full_deferFullBackup,
+                ServiceType.FULL_BACKUP);
     }
 
     @SmallTest
     public void testGetBatterySaverPolicy_PolicyKeyValueBackup_DefaultValueCorrect() {
-        testServiceDefaultValue_On(ServiceType.KEYVALUE_BACKUP);
+        testDefaultValue(
+                com.android.internal.R.bool.config_batterySaver_full_deferKeyValueBackup,
+                ServiceType.KEYVALUE_BACKUP);
     }
 
     @SmallTest
     public void testGetBatterySaverPolicy_PolicyAnimation_DefaultValueCorrect() {
-        testServiceDefaultValue_Off(ServiceType.ANIMATION);
+        testDefaultValue(
+                com.android.internal.R.bool.config_batterySaver_full_disableAnimation,
+                ServiceType.ANIMATION);
     }
 
     @SmallTest
@@ -160,46 +170,53 @@
 
     @SmallTest
     public void testGetBatterySaverPolicy_PolicyNetworkFirewall_DefaultValueCorrect() {
-        testServiceDefaultValue_On(ServiceType.NETWORK_FIREWALL);
+        testDefaultValue(
+                com.android.internal.R.bool.config_batterySaver_full_enableFirewall,
+                ServiceType.NETWORK_FIREWALL);
     }
 
     @SmallTest
     public void testGetBatterySaverPolicy_PolicyNightMode_DefaultValueCorrect() {
-        testServiceDefaultValue_On(ServiceType.NIGHT_MODE);
+        testDefaultValue(
+                com.android.internal.R.bool.config_batterySaver_full_enableNightMode,
+                ServiceType.NIGHT_MODE);
     }
 
     @SmallTest
     public void testGetBatterySaverPolicy_PolicyDataSaver_DefaultValueCorrect() {
-        mBatterySaverPolicy.updateConstantsLocked("", "");
-        mBatterySaverPolicy.setPolicyLevel(POLICY_LEVEL_FULL);
-        final PowerSaveState batterySaverStateOn =
-                mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.DATA_SAVER);
-        assertThat(batterySaverStateOn.batterySaverEnabled).isFalse();
-
-        mBatterySaverPolicy.setPolicyLevel(POLICY_LEVEL_OFF);
-        final PowerSaveState batterySaverStateOff = mBatterySaverPolicy.getBatterySaverPolicy(
+        testDefaultValue(
+                com.android.internal.R.bool.config_batterySaver_full_enableDataSaver,
                 ServiceType.DATA_SAVER);
-        assertThat(batterySaverStateOff.batterySaverEnabled).isFalse();
     }
 
     @SmallTest
     public void testGetBatterySaverPolicy_PolicyScreenBrightness_DefaultValueCorrect() {
-        testServiceDefaultValue_Off(ServiceType.SCREEN_BRIGHTNESS);
+        testDefaultValue(
+                com.android.internal.R.bool.config_batterySaver_full_enableAdjustBrightness,
+                ServiceType.SCREEN_BRIGHTNESS);
     }
 
     @SmallTest
-    public void testGetBatterySaverPolicy_PolicyGps_DefaultValueCorrect() {
-        testServiceDefaultValue_On(ServiceType.LOCATION);
+    public void testGetBatterySaverPolicy_PolicyLocation_DefaultValueCorrect() {
+        final int defaultMode = getContext().getResources()
+                .getInteger(com.android.internal.R.integer.config_batterySaver_full_locationMode);
+        if (defaultMode == PowerManager.LOCATION_MODE_NO_CHANGE) {
+            testServiceDefaultValue_Off(ServiceType.LOCATION);
+        } else {
+            testServiceDefaultValue_On(ServiceType.LOCATION);
+        }
 
         mBatterySaverPolicy.setPolicyLevel(POLICY_LEVEL_FULL);
         PowerSaveState stateOn =
                 mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.LOCATION);
-        assertThat(stateOn.locationMode).isEqualTo(DEFAULT_GPS_MODE);
+        assertThat(stateOn.locationMode).isEqualTo(defaultMode);
     }
 
     @SmallTest
     public void testGetBatterySaverPolicy_PolicyQuickDoze_DefaultValueCorrect() {
-        testServiceDefaultValue_On(ServiceType.QUICK_DOZE);
+        testDefaultValue(
+                com.android.internal.R.bool.config_batterySaver_full_enableQuickDoze,
+                ServiceType.QUICK_DOZE);
     }
 
     @Suppress
@@ -267,6 +284,14 @@
         mBatterySaverPolicy.updateConstantsLocked(null, "");
     }
 
+    private void testDefaultValue(int boolResId, @ServiceType int type) {
+        if (getContext().getResources().getBoolean(boolResId)) {
+            testServiceDefaultValue_On(type);
+        } else {
+            testServiceDefaultValue_Off(type);
+        }
+    }
+
     private void testServiceDefaultValue_On(@ServiceType int type) {
         mBatterySaverPolicy.updateConstantsLocked("", "");
         mBatterySaverPolicy.setPolicyLevel(POLICY_LEVEL_FULL);
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryExternalStatsWorkerTest.java b/services/tests/servicestests/src/com/android/server/power/stats/BatteryExternalStatsWorkerTest.java
deleted file mode 100644
index cff4cc7..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/BatteryExternalStatsWorkerTest.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.power.stats;
-
-import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_ALL;
-import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_BT;
-import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_CAMERA;
-import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_CPU;
-import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_DISPLAY;
-import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_RADIO;
-import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_WIFI;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import android.content.Context;
-import android.hardware.power.stats.Channel;
-import android.hardware.power.stats.EnergyConsumer;
-import android.hardware.power.stats.EnergyConsumerResult;
-import android.hardware.power.stats.EnergyConsumerType;
-import android.hardware.power.stats.EnergyMeasurement;
-import android.hardware.power.stats.PowerEntity;
-import android.hardware.power.stats.StateResidencyResult;
-import android.power.PowerStatsInternal;
-import android.util.IntArray;
-import android.util.SparseArray;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.internal.os.PowerProfile;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.Arrays;
-import java.util.concurrent.CompletableFuture;
-
-/**
- * Tests for {@link BatteryExternalStatsWorker}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:BatteryExternalStatsWorkerTest
- */
-@SuppressWarnings("GuardedBy")
-public class BatteryExternalStatsWorkerTest {
-    private BatteryExternalStatsWorker mBatteryExternalStatsWorker;
-    private TestBatteryStatsImpl mBatteryStatsImpl;
-    private TestPowerStatsInternal mPowerStatsInternal;
-
-    @Before
-    public void setUp() {
-        final Context context = InstrumentationRegistry.getContext();
-
-        mBatteryStatsImpl = new TestBatteryStatsImpl(context);
-        mPowerStatsInternal = new TestPowerStatsInternal();
-        mBatteryExternalStatsWorker = new BatteryExternalStatsWorker(new TestInjector(context),
-                mBatteryStatsImpl);
-    }
-
-    @Test
-    public void testTargetedEnergyConsumerQuerying() {
-        final int numCpuClusters = 4;
-        final int numDisplays = 5;
-        final int numOther = 3;
-
-        // Add some energy consumers used by BatteryExternalStatsWorker.
-        final IntArray tempAllIds = new IntArray();
-
-        final int[] displayIds = new int[numDisplays];
-        for (int i = 0; i < numDisplays; i++) {
-            displayIds[i] = mPowerStatsInternal.addEnergyConsumer(
-                    EnergyConsumerType.DISPLAY, i, "display" + i);
-            tempAllIds.add(displayIds[i]);
-            mPowerStatsInternal.incrementEnergyConsumption(displayIds[i], 12345 + i);
-        }
-        Arrays.sort(displayIds);
-
-        final int wifiId = mPowerStatsInternal.addEnergyConsumer(EnergyConsumerType.WIFI, 0,
-                "wifi");
-        tempAllIds.add(wifiId);
-        mPowerStatsInternal.incrementEnergyConsumption(wifiId, 23456);
-
-        final int btId = mPowerStatsInternal.addEnergyConsumer(EnergyConsumerType.BLUETOOTH, 0,
-                "bt");
-        tempAllIds.add(btId);
-        mPowerStatsInternal.incrementEnergyConsumption(btId, 34567);
-
-        final int gnssId = mPowerStatsInternal.addEnergyConsumer(EnergyConsumerType.GNSS, 0,
-                "gnss");
-        tempAllIds.add(gnssId);
-        mPowerStatsInternal.incrementEnergyConsumption(gnssId, 787878);
-
-        final int cameraId =
-                mPowerStatsInternal.addEnergyConsumer(EnergyConsumerType.CAMERA, 0, "camera");
-        tempAllIds.add(cameraId);
-        mPowerStatsInternal.incrementEnergyConsumption(cameraId, 901234);
-
-        final int mobileRadioId = mPowerStatsInternal.addEnergyConsumer(
-                EnergyConsumerType.MOBILE_RADIO, 0, "mobile_radio");
-        tempAllIds.add(mobileRadioId);
-        mPowerStatsInternal.incrementEnergyConsumption(mobileRadioId, 62626);
-
-        final int[] cpuClusterIds = new int[numCpuClusters];
-        for (int i = 0; i < numCpuClusters; i++) {
-            cpuClusterIds[i] = mPowerStatsInternal.addEnergyConsumer(
-                    EnergyConsumerType.CPU_CLUSTER, i, "cpu_cluster" + i);
-            tempAllIds.add(cpuClusterIds[i]);
-            mPowerStatsInternal.incrementEnergyConsumption(cpuClusterIds[i], 1111 + i);
-        }
-        Arrays.sort(cpuClusterIds);
-
-        final int[] otherIds = new int[numOther];
-        for (int i = 0; i < numOther; i++) {
-            otherIds[i] = mPowerStatsInternal.addEnergyConsumer(
-                    EnergyConsumerType.OTHER, i, "other" + i);
-            tempAllIds.add(otherIds[i]);
-            mPowerStatsInternal.incrementEnergyConsumption(otherIds[i], 3000 + i);
-        }
-        Arrays.sort(otherIds);
-
-        final int[] allIds = tempAllIds.toArray();
-        Arrays.sort(allIds);
-
-        // Inform BESW that PowerStatsInternal is ready to query
-        mBatteryExternalStatsWorker.systemServicesReady();
-
-        final EnergyConsumerResult[] displayResults =
-                mBatteryExternalStatsWorker.getEnergyConsumersLocked(UPDATE_DISPLAY).getNow(null);
-        // Results should only have the cpu cluster energy consumers
-        final int[] receivedDisplayIds = new int[displayResults.length];
-        for (int i = 0; i < displayResults.length; i++) {
-            receivedDisplayIds[i] = displayResults[i].id;
-        }
-        Arrays.sort(receivedDisplayIds);
-        assertArrayEquals(displayIds, receivedDisplayIds);
-
-        final EnergyConsumerResult[] wifiResults =
-                mBatteryExternalStatsWorker.getEnergyConsumersLocked(UPDATE_WIFI).getNow(null);
-        // Results should only have the wifi energy consumer
-        assertEquals(1, wifiResults.length);
-        assertEquals(wifiId, wifiResults[0].id);
-
-        final EnergyConsumerResult[] bluetoothResults =
-                mBatteryExternalStatsWorker.getEnergyConsumersLocked(UPDATE_BT).getNow(null);
-        // Results should only have the bluetooth energy consumer
-        assertEquals(1, bluetoothResults.length);
-        assertEquals(btId, bluetoothResults[0].id);
-
-        final EnergyConsumerResult[] mobileRadioResults =
-                mBatteryExternalStatsWorker.getEnergyConsumersLocked(UPDATE_RADIO).getNow(null);
-        // Results should only have the mobile radio energy consumer
-        assertEquals(1, mobileRadioResults.length);
-        assertEquals(mobileRadioId, mobileRadioResults[0].id);
-
-        final EnergyConsumerResult[] cpuResults =
-                mBatteryExternalStatsWorker.getEnergyConsumersLocked(UPDATE_CPU).getNow(null);
-        // Results should only have the cpu cluster energy consumers
-        final int[] receivedCpuIds = new int[cpuResults.length];
-        for (int i = 0; i < cpuResults.length; i++) {
-            receivedCpuIds[i] = cpuResults[i].id;
-        }
-        Arrays.sort(receivedCpuIds);
-        assertArrayEquals(cpuClusterIds, receivedCpuIds);
-
-        final EnergyConsumerResult[] cameraResults =
-                mBatteryExternalStatsWorker.getEnergyConsumersLocked(UPDATE_CAMERA).getNow(null);
-        // Results should only have the camera energy consumer
-        assertEquals(1, cameraResults.length);
-        assertEquals(cameraId, cameraResults[0].id);
-
-        final EnergyConsumerResult[] allResults =
-                mBatteryExternalStatsWorker.getEnergyConsumersLocked(UPDATE_ALL).getNow(null);
-        // All energy consumer results should be available
-        final int[] receivedAllIds = new int[allResults.length];
-        for (int i = 0; i < allResults.length; i++) {
-            receivedAllIds[i] = allResults[i].id;
-        }
-        Arrays.sort(receivedAllIds);
-        assertArrayEquals(allIds, receivedAllIds);
-    }
-
-    public class TestInjector extends BatteryExternalStatsWorker.Injector {
-        public TestInjector(Context context) {
-            super(context);
-        }
-
-        public <T> T getSystemService(Class<T> serviceClass) {
-            return null;
-        }
-
-        public <T> T getLocalService(Class<T> serviceClass) {
-            if (serviceClass == PowerStatsInternal.class) {
-                return (T) mPowerStatsInternal;
-            }
-            return null;
-        }
-    }
-
-    public class TestBatteryStatsImpl extends BatteryStatsImpl {
-        public TestBatteryStatsImpl(Context context) {
-            mPowerProfile = new PowerProfile(context, true /* forTest */);
-            initTimersAndCounters();
-        }
-    }
-
-    public class TestPowerStatsInternal extends PowerStatsInternal {
-        private final SparseArray<EnergyConsumer> mEnergyConsumers = new SparseArray();
-        private final SparseArray<EnergyConsumerResult> mEnergyConsumerResults = new SparseArray();
-        private final int mTimeSinceBoot = 0;
-
-        @Override
-        public EnergyConsumer[] getEnergyConsumerInfo() {
-            final int size = mEnergyConsumers.size();
-            final EnergyConsumer[] consumers = new EnergyConsumer[size];
-            for (int i = 0; i < size; i++) {
-                consumers[i] = mEnergyConsumers.valueAt(i);
-            }
-            return consumers;
-        }
-
-        @Override
-        public CompletableFuture<EnergyConsumerResult[]> getEnergyConsumedAsync(
-                int[] energyConsumerIds) {
-            final CompletableFuture<EnergyConsumerResult[]> future = new CompletableFuture();
-            final EnergyConsumerResult[] results;
-            final int length = energyConsumerIds.length;
-            if (length == 0) {
-                final int size = mEnergyConsumerResults.size();
-                results = new EnergyConsumerResult[size];
-                for (int i = 0; i < size; i++) {
-                    results[i] = mEnergyConsumerResults.valueAt(i);
-                }
-            } else {
-                results = new EnergyConsumerResult[length];
-                for (int i = 0; i < length; i++) {
-                    results[i] = mEnergyConsumerResults.get(energyConsumerIds[i]);
-                }
-            }
-            future.complete(results);
-            return future;
-        }
-
-        @Override
-        public PowerEntity[] getPowerEntityInfo() {
-            return new PowerEntity[0];
-        }
-
-        @Override
-        public CompletableFuture<StateResidencyResult[]> getStateResidencyAsync(
-                int[] powerEntityIds) {
-            return new CompletableFuture<>();
-        }
-
-        @Override
-        public Channel[] getEnergyMeterInfo() {
-            return new Channel[0];
-        }
-
-        @Override
-        public CompletableFuture<EnergyMeasurement[]> readEnergyMeterAsync(
-                int[] channelIds) {
-            return new CompletableFuture<>();
-        }
-
-        /**
-         * Util method to add a new EnergyConsumer for testing
-         *
-         * @return the EnergyConsumer id of the new EnergyConsumer
-         */
-        public int addEnergyConsumer(@EnergyConsumerType byte type, int ordinal, String name) {
-            final EnergyConsumer consumer = new EnergyConsumer();
-            final int id = getNextAvailableId();
-            consumer.id = id;
-            consumer.type = type;
-            consumer.ordinal = ordinal;
-            consumer.name = name;
-            mEnergyConsumers.put(id, consumer);
-
-            final EnergyConsumerResult result = new EnergyConsumerResult();
-            result.id = id;
-            result.timestampMs = mTimeSinceBoot;
-            result.energyUWs = 0;
-            mEnergyConsumerResults.put(id, result);
-            return id;
-        }
-
-        public void incrementEnergyConsumption(int id, long energyUWs) {
-            EnergyConsumerResult result = mEnergyConsumerResults.get(id, null);
-            assertNotNull(result);
-            result.energyUWs += energyUWs;
-        }
-
-        private int getNextAvailableId() {
-            final int size = mEnergyConsumers.size();
-            // Just return the first index that does not match the key (aka the EnergyConsumer id)
-            for (int i = size - 1; i >= 0; i--) {
-                if (mEnergyConsumers.keyAt(i) == i) return i + 1;
-            }
-            // Otherwise return the lowest id
-            return 0;
-        }
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsCpuTimesTest.java b/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsCpuTimesTest.java
deleted file mode 100644
index f48a296..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsCpuTimesTest.java
+++ /dev/null
@@ -1,1404 +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.server.power.stats;
-
-import static android.os.BatteryStats.STATS_SINCE_CHARGED;
-import static android.os.BatteryStats.WAKE_TYPE_PARTIAL;
-import static android.os.Process.FIRST_APPLICATION_UID;
-import static android.os.Process.FIRST_ISOLATED_UID;
-
-import static com.android.server.power.stats.BatteryStatsImpl.WAKE_LOCK_WEIGHT;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-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.anyBoolean;
-import static org.mockito.ArgumentMatchers.isNull;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
-
-import android.os.BatteryStats;
-import android.os.UserHandle;
-import android.util.SparseLongArray;
-import android.view.Display;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.internal.os.KernelCpuSpeedReader;
-import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidActiveTimeReader;
-import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidClusterTimeReader;
-import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader;
-import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidUserSysTimeReader;
-import com.android.internal.os.PowerProfile;
-import com.android.internal.util.ArrayUtils;
-
-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.ArrayList;
-import java.util.Arrays;
-
-/**
- * To run the tests, use
- *
- * runtest -c BatteryStatsCpuTimesTest frameworks-core
- *
- * or
- *
- * Build: m FrameworksCoreTests
- * Install: adb install -r \
- * ${ANDROID_PRODUCT_OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
- * Run: adb shell am instrument -e class BatteryStatsCpuTimesTest -w \
- * com.android.frameworks.coretests/androidx.test.runner.AndroidJUnitRunner
- *
- * or
- *
- * atest FrameworksCoreTests:BatteryStatsCpuTimesTest
- */
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class BatteryStatsCpuTimesTest {
-    @Mock
-    KernelCpuUidUserSysTimeReader mCpuUidUserSysTimeReader;
-    @Mock
-    KernelCpuUidFreqTimeReader mCpuUidFreqTimeReader;
-    @Mock
-    KernelCpuUidActiveTimeReader mCpuUidActiveTimeReader;
-    @Mock
-    KernelCpuUidClusterTimeReader mCpuUidClusterTimeReader;
-    @Mock
-    SystemServerCpuThreadReader mSystemServerCpuThreadReader;
-    @Mock
-    BatteryStatsImpl.UserInfoProvider mUserInfoProvider;
-    @Mock
-    PowerProfile mPowerProfile;
-
-    private MockClock mClocks;
-    private MockBatteryStatsImpl mBatteryStatsImpl;
-    private KernelCpuSpeedReader[] mKernelCpuSpeedReaders;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-
-        mClocks = new MockClock();
-        mBatteryStatsImpl = new MockBatteryStatsImpl(mClocks)
-                .setKernelCpuUidUserSysTimeReader(mCpuUidUserSysTimeReader)
-                .setKernelCpuUidFreqTimeReader(mCpuUidFreqTimeReader)
-                .setKernelCpuUidActiveTimeReader(mCpuUidActiveTimeReader)
-                .setKernelCpuUidClusterTimeReader(mCpuUidClusterTimeReader)
-                .setSystemServerCpuThreadReader(mSystemServerCpuThreadReader)
-                .setUserInfoProvider(mUserInfoProvider);
-    }
-
-    @Test
-    public void testUpdateCpuTimeLocked() {
-        // PRECONDITIONS
-        mBatteryStatsImpl.setPowerProfile(mPowerProfile);
-        mBatteryStatsImpl.setOnBatteryInternal(false);
-        final int numClusters = 3;
-        initKernelCpuSpeedReaders(numClusters);
-        final long[] freqs = {1, 12, 123, 12, 1234};
-        when(mCpuUidFreqTimeReader.readFreqs(mPowerProfile)).thenReturn(freqs);
-
-        // RUN
-        mBatteryStatsImpl.updateCpuTimeLocked(false, false, null);
-
-        // VERIFY
-        assertArrayEquals("Unexpected cpu freqs", freqs, mBatteryStatsImpl.getCpuFreqs());
-        verify(mCpuUidUserSysTimeReader).readDelta(anyBoolean(), isNull());
-        verify(mCpuUidFreqTimeReader).readDelta(anyBoolean(), isNull());
-        for (int i = 0; i < numClusters; ++i) {
-            verify(mKernelCpuSpeedReaders[i]).readDelta();
-        }
-
-        // Prepare for next test
-        Mockito.reset(mUserInfoProvider, mCpuUidFreqTimeReader, mCpuUidUserSysTimeReader);
-        for (int i = 0; i < numClusters; ++i) {
-            Mockito.reset(mKernelCpuSpeedReaders[i]);
-        }
-
-        // PRECONDITIONS
-        mBatteryStatsImpl.setOnBatteryInternal(true);
-
-        // RUN
-        mBatteryStatsImpl.updateCpuTimeLocked(true, false, null);
-
-        // VERIFY
-        verify(mUserInfoProvider).refreshUserIds();
-        verify(mCpuUidUserSysTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidUserSysTimeReader.Callback.class));
-        // perClusterTimesAvailable is called twice, once in updateCpuTimeLocked() and the other
-        // in readKernelUidCpuFreqTimesLocked.
-        verify(mCpuUidFreqTimeReader, times(2)).perClusterTimesAvailable();
-        verify(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidFreqTimeReader.Callback.class));
-        verify(mCpuUidActiveTimeReader).readAbsolute(
-                any(KernelCpuUidActiveTimeReader.Callback.class));
-        verify(mCpuUidClusterTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidClusterTimeReader.Callback.class));
-        verifyNoMoreInteractions(mCpuUidFreqTimeReader);
-        for (int i = 0; i < numClusters; ++i) {
-            verify(mKernelCpuSpeedReaders[i]).readDelta();
-        }
-    }
-
-    @Test
-    public void testMarkPartialTimersAsEligible() {
-        // PRECONDITIONS
-        final ArrayList<BatteryStatsImpl.StopwatchTimer> partialTimers = getPartialTimers(
-                10032, 10042, 10052);
-        final ArrayList<BatteryStatsImpl.StopwatchTimer> lastPartialTimers
-                = new ArrayList<>(partialTimers);
-        mBatteryStatsImpl.setPartialTimers(partialTimers);
-        mBatteryStatsImpl.setLastPartialTimers(lastPartialTimers);
-        final boolean[] inList = {false, true, false};
-        for (int i = 0; i < partialTimers.size(); ++i) {
-            partialTimers.get(i).mInList = inList[i];
-        }
-
-        // RUN
-        mBatteryStatsImpl.markPartialTimersAsEligible();
-
-        // VERIFY
-        assertTrue(ArrayUtils.referenceEquals(partialTimers, lastPartialTimers));
-        for (int i = 0; i < partialTimers.size(); ++i) {
-            assertTrue("Timer id=" + i, partialTimers.get(i).mInList);
-        }
-
-        // PRECONDITIONS
-        partialTimers.addAll(getPartialTimers(10077, 10099));
-        partialTimers.remove(1 /* index */);
-
-        // RUN
-        mBatteryStatsImpl.markPartialTimersAsEligible();
-
-        // VERIFY
-        assertTrue(ArrayUtils.referenceEquals(partialTimers, lastPartialTimers));
-        for (int i = 0; i < partialTimers.size(); ++i) {
-            assertTrue("Timer id=" + i, partialTimers.get(i).mInList);
-        }
-    }
-
-    @Test
-    public void testUpdateClusterSpeedTimes() {
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-        final long[][] clusterSpeedTimesMs = {{20, 30}, {40, 50, 60}};
-        initKernelCpuSpeedReaders(clusterSpeedTimesMs.length);
-        for (int i = 0; i < clusterSpeedTimesMs.length; ++i) {
-            when(mKernelCpuSpeedReaders[i].readDelta()).thenReturn(clusterSpeedTimesMs[i]);
-        }
-        when(mPowerProfile.getNumCpuClusters()).thenReturn(clusterSpeedTimesMs.length);
-        for (int i = 0; i < clusterSpeedTimesMs.length; ++i) {
-            when(mPowerProfile.getNumSpeedStepsInCpuCluster(i))
-                    .thenReturn(clusterSpeedTimesMs[i].length);
-        }
-        final SparseLongArray updatedUids = new SparseLongArray();
-        final int[] testUids = {10012, 10014, 10016};
-        final int[] cpuTimeUs = {89, 31, 43};
-        for (int i = 0; i < testUids.length; ++i) {
-            updatedUids.put(testUids[i], cpuTimeUs[i]);
-        }
-
-        // RUN
-        mBatteryStatsImpl.updateClusterSpeedTimes(updatedUids, true, null);
-
-        // VERIFY
-        int totalClustersTimeMs = 0;
-        for (int i = 0; i < clusterSpeedTimesMs.length; ++i) {
-            for (int j = 0; j < clusterSpeedTimesMs[i].length; ++j) {
-                totalClustersTimeMs += clusterSpeedTimesMs[i][j];
-            }
-        }
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-            for (int cluster = 0; cluster < clusterSpeedTimesMs.length; ++cluster) {
-                for (int speed = 0; speed < clusterSpeedTimesMs[cluster].length; ++speed) {
-                    assertEquals("Uid=" + testUids[i] + ", cluster=" + cluster + ", speed=" + speed,
-                            cpuTimeUs[i] * clusterSpeedTimesMs[cluster][speed]
-                                    / totalClustersTimeMs,
-                            u.getTimeAtCpuSpeed(cluster, speed, STATS_SINCE_CHARGED));
-                }
-            }
-        }
-    }
-
-    @Test
-    public void testReadKernelUidCpuTimesLocked() {
-        //PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-        final int testUserId = 11;
-        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
-        final int[] testUids = getUids(testUserId, new int[]{
-                FIRST_APPLICATION_UID + 22,
-                FIRST_APPLICATION_UID + 27,
-                FIRST_APPLICATION_UID + 33
-        });
-        final long[][] uidTimesUs = {
-                {12, 34}, {34897394, 3123983}, {79775429834L, 8430434903489L}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidUserSysTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], uidTimesUs[i]);
-            }
-            return null;
-        }).when(mCpuUidUserSysTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidUserSysTimeReader.Callback.class));
-
-        // RUN
-        final SparseLongArray updatedUids = new SparseLongArray();
-        mBatteryStatsImpl.readKernelUidCpuTimesLocked(null, updatedUids, true);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-            assertEquals("Unexpected user cpu time for uid=" + testUids[i],
-                    uidTimesUs[i][0], u.getUserCpuTimeUs(STATS_SINCE_CHARGED));
-            assertEquals("Unexpected system cpu time for uid=" + testUids[i],
-                    uidTimesUs[i][1], u.getSystemCpuTimeUs(STATS_SINCE_CHARGED));
-
-            assertEquals("Unexpected entry in updated uids for uid=" + testUids[i],
-                    uidTimesUs[i][0] + uidTimesUs[i][1], updatedUids.get(testUids[i]));
-            updatedUids.delete(testUids[i]);
-        }
-        assertEquals("Updated uids: " + updatedUids, 0, updatedUids.size());
-
-        // Repeat the test with a null updatedUids
-
-        // PRECONDITIONS
-        final long[][] deltasUs = {
-                {9379, 3332409833484L}, {493247, 723234}, {3247819, 123348}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidUserSysTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], deltasUs[i]);
-            }
-            return null;
-        }).when(mCpuUidUserSysTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidUserSysTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuTimesLocked(null, null, true);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-            assertEquals("Unexpected user cpu time for uid=" + testUids[i],
-                    uidTimesUs[i][0] + deltasUs[i][0], u.getUserCpuTimeUs(STATS_SINCE_CHARGED));
-            assertEquals("Unexpected system cpu time for uid=" + testUids[i],
-                    uidTimesUs[i][1] + deltasUs[i][1], u.getSystemCpuTimeUs(STATS_SINCE_CHARGED));
-        }
-    }
-
-    @Test
-    public void testReadKernelUidCpuTimesLocked_isolatedUid() {
-        //PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-        final int testUserId = 11;
-        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
-        final int isolatedAppId = FIRST_ISOLATED_UID + 27;
-        final int isolatedUid = UserHandle.getUid(testUserId, isolatedAppId);
-        final int[] testUids = getUids(testUserId, new int[]{
-                FIRST_APPLICATION_UID + 22,
-                isolatedAppId,
-                FIRST_APPLICATION_UID + 33
-        });
-        final long[][] uidTimesUs = {
-                {12, 34}, {34897394, 3123983}, {79775429834L, 8430434903489L}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidUserSysTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], uidTimesUs[i]);
-            }
-            return null;
-        }).when(mCpuUidUserSysTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidUserSysTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuTimesLocked(null, null, true);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            if (UserHandle.isIsolated(testUids[i])) {
-                assertNull("There shouldn't be an entry for isolated uid=" + testUids[i], u);
-                continue;
-            }
-            assertNotNull("No entry for uid=" + testUids[i], u);
-            assertEquals("Unexpected user cpu time for uid=" + testUids[i],
-                    uidTimesUs[i][0], u.getUserCpuTimeUs(STATS_SINCE_CHARGED));
-            assertEquals("Unexpected system cpu time for uid=" + testUids[i],
-                    uidTimesUs[i][1], u.getSystemCpuTimeUs(STATS_SINCE_CHARGED));
-        }
-
-        // Add an isolated uid mapping and repeat the test.
-
-        // PRECONDITIONS
-        final int ownerUid = UserHandle.getUid(testUserId, FIRST_APPLICATION_UID + 42);
-        mBatteryStatsImpl.addIsolatedUidLocked(isolatedUid, ownerUid);
-        final long[][] deltasUs = {
-                {9379, 3332409833484L}, {493247, 723234}, {3247819, 123348}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidUserSysTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], deltasUs[i]);
-            }
-            return null;
-        }).when(mCpuUidUserSysTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidUserSysTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuTimesLocked(null, null, true);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            final long expectedUserTimeUs;
-            final long expectedSystemTimeUs;
-            if (UserHandle.isIsolated(testUids[i])) {
-                assertNull("There shouldn't be an entry for isolated uid=" + testUids[i], u);
-                // Since we added a mapping, an entry should've been created for owner uid.
-                u = mBatteryStatsImpl.getUidStats().get(ownerUid);
-                expectedUserTimeUs = deltasUs[i][0];
-                expectedSystemTimeUs = deltasUs[i][1];
-                assertNotNull("No entry for owner uid=" + ownerUid, u);
-            } else {
-                assertNotNull("No entry for uid=" + testUids[i], u);
-                expectedUserTimeUs = uidTimesUs[i][0] + deltasUs[i][0];
-                expectedSystemTimeUs = uidTimesUs[i][1] + deltasUs[i][1];
-            }
-            assertEquals("Unexpected user cpu time for uid=" + testUids[i],
-                    expectedUserTimeUs, u.getUserCpuTimeUs(STATS_SINCE_CHARGED));
-            assertEquals("Unexpected system cpu time for uid=" + testUids[i],
-                    expectedSystemTimeUs, u.getSystemCpuTimeUs(STATS_SINCE_CHARGED));
-        }
-    }
-
-    @Test
-    public void testReadKernelUidCpuTimesLocked_invalidUid() {
-        //PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-        final int testUserId = 11;
-        final int invalidUserId = 15;
-        final int invalidUid = UserHandle.getUid(invalidUserId, FIRST_APPLICATION_UID + 99);
-        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
-        when(mUserInfoProvider.exists(invalidUserId)).thenReturn(false);
-        final int[] testUids = getUids(testUserId, new int[]{
-                FIRST_APPLICATION_UID + 22,
-                FIRST_APPLICATION_UID + 27,
-                FIRST_APPLICATION_UID + 33
-        });
-        final long[][] uidTimesUs = {
-                {12, 34}, {34897394, 3123983}, {79775429834L, 8430434903489L}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidUserSysTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], uidTimesUs[i]);
-            }
-            // And one for the invalid uid
-            callback.onUidCpuTime(invalidUid, new long[]{3879, 239});
-            return null;
-        }).when(mCpuUidUserSysTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidUserSysTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuTimesLocked(null, null, true);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-            assertEquals("Unexpected user cpu time for uid=" + testUids[i],
-                    uidTimesUs[i][0], u.getUserCpuTimeUs(STATS_SINCE_CHARGED));
-            assertEquals("Unexpected system cpu time for uid=" + testUids[i],
-                    uidTimesUs[i][1], u.getSystemCpuTimeUs(STATS_SINCE_CHARGED));
-        }
-        assertNull("There shouldn't be an entry for invalid uid=" + invalidUid,
-                mBatteryStatsImpl.getUidStats().get(invalidUid));
-    }
-
-    @Test
-    public void testReadKernelUidCpuTimesLocked_withPartialTimers() {
-        //PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-        final int testUserId = 11;
-        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
-        final int[] testUids = getUids(testUserId, new int[]{
-                FIRST_APPLICATION_UID + 22,
-                FIRST_APPLICATION_UID + 27,
-                FIRST_APPLICATION_UID + 33
-        });
-        final int[] partialTimerUids = {
-                UserHandle.getUid(testUserId, FIRST_APPLICATION_UID + 48),
-                UserHandle.getUid(testUserId, FIRST_APPLICATION_UID + 10)
-        };
-        final ArrayList<BatteryStatsImpl.StopwatchTimer> partialTimers
-                = getPartialTimers(partialTimerUids);
-        final long[][] uidTimesUs = {
-                {12, 34}, {3394, 3123}, {7977, 80434}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidUserSysTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], uidTimesUs[i]);
-            }
-            return null;
-        }).when(mCpuUidUserSysTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidUserSysTimeReader.Callback.class));
-
-        // RUN
-        final SparseLongArray updatedUids = new SparseLongArray();
-        mBatteryStatsImpl.readKernelUidCpuTimesLocked(partialTimers, updatedUids, true);
-
-        // VERIFY
-        long totalUserTimeUs = 0;
-        long totalSystemTimeUs = 0;
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-            final long expectedUserTimeUs = uidTimesUs[i][0] * WAKE_LOCK_WEIGHT / 100;
-            final long expectedSystemTimeUs = uidTimesUs[i][1] * WAKE_LOCK_WEIGHT / 100;
-            assertEquals("Unexpected user cpu time for uid=" + testUids[i],
-                    expectedUserTimeUs, u.getUserCpuTimeUs(STATS_SINCE_CHARGED));
-            assertEquals("Unexpected system cpu time for uid=" + testUids[i],
-                    expectedSystemTimeUs, u.getSystemCpuTimeUs(STATS_SINCE_CHARGED));
-            assertEquals("Unexpected entry in updated uids for uid=" + testUids[i],
-                    expectedUserTimeUs + expectedSystemTimeUs, updatedUids.get(testUids[i]));
-            updatedUids.delete(testUids[i]);
-            totalUserTimeUs += uidTimesUs[i][0];
-            totalSystemTimeUs += uidTimesUs[i][1];
-        }
-
-        totalUserTimeUs = totalUserTimeUs * (100 - WAKE_LOCK_WEIGHT) / 100;
-        totalSystemTimeUs = totalSystemTimeUs * (100 - WAKE_LOCK_WEIGHT) / 100;
-        for (int i = 0; i < partialTimerUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(partialTimerUids[i]);
-            assertNotNull("No entry for partial timer uid=" + partialTimerUids[i], u);
-            final long expectedUserTimeUs = totalUserTimeUs / (partialTimerUids.length - i);
-            final long expectedSystemTimeUs = totalSystemTimeUs / (partialTimerUids.length - i);
-            assertEquals("Unexpected user cpu time for partial timer uid=" + partialTimerUids[i],
-                    expectedUserTimeUs, u.getUserCpuTimeUs(STATS_SINCE_CHARGED));
-            assertEquals("Unexpected system cpu time for partial timer uid=" + partialTimerUids[i],
-                    expectedSystemTimeUs, u.getSystemCpuTimeUs(STATS_SINCE_CHARGED));
-            assertEquals("Unexpected entry in updated uids for partial timer uid="
-                            + partialTimerUids[i],
-                    expectedUserTimeUs + expectedSystemTimeUs,
-                    updatedUids.get(partialTimerUids[i]));
-            updatedUids.delete(partialTimerUids[i]);
-            totalUserTimeUs -= expectedUserTimeUs;
-            totalSystemTimeUs -= expectedSystemTimeUs;
-
-            final BatteryStats.Uid.Proc proc = u.getProcessStats().get("*wakelock*");
-            assertEquals("Unexpected user cpu time for *wakelock* in uid=" + partialTimerUids[i],
-                    expectedUserTimeUs / 1000, proc.getUserTime(STATS_SINCE_CHARGED));
-            assertEquals("Unexpected system cpu time for *wakelock* in uid=" + partialTimerUids[i],
-                    expectedSystemTimeUs / 1000, proc.getSystemTime(STATS_SINCE_CHARGED));
-        }
-        assertEquals(0, totalUserTimeUs);
-        assertEquals(0, totalSystemTimeUs);
-        assertEquals("Updated uids: " + updatedUids, 0, updatedUids.size());
-    }
-
-    @Test
-    public void testReadKernelUidCpuFreqTimesLocked() {
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-
-        final int testUserId = 11;
-        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
-        final int[] testUids = getUids(testUserId, new int[]{
-                FIRST_APPLICATION_UID + 22,
-                FIRST_APPLICATION_UID + 27,
-                FIRST_APPLICATION_UID + 33
-        });
-        final long[][] uidTimesMs = {
-                {4, 10, 5, 9, 4},
-                {5, 1, 12, 2, 10},
-                {8, 25, 3, 0, 42}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
-            }
-            return null;
-        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidFreqTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, false, null);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-
-            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
-                    uidTimesMs[i], u.getCpuFreqTimes(STATS_SINCE_CHARGED));
-            assertNull("Unexpected screen-off cpu times for uid=" + testUids[i],
-                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
-        }
-
-        // Repeat the test when the screen is off.
-
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        final long[][] deltasMs = {
-                {3, 12, 55, 100, 32},
-                {3248327490475L, 232349349845043L, 123, 2398, 0},
-                {43, 3345, 2143, 123, 4554}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], deltasMs[i]);
-            }
-            return null;
-        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidFreqTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, true, null);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-
-            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
-                    sum(uidTimesMs[i], deltasMs[i]), u.getCpuFreqTimes(STATS_SINCE_CHARGED));
-            assertArrayEquals("Unexpected screen-off cpu times for uid=" + testUids[i],
-                    deltasMs[i], u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
-        }
-    }
-
-    @Test
-    public void testReadKernelUidCpuFreqTimesLocked_perClusterTimesAvailable() {
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-
-        final int testUserId = 11;
-        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
-        final int[] testUids = getUids(testUserId, new int[]{
-                FIRST_APPLICATION_UID + 22,
-                FIRST_APPLICATION_UID + 27,
-                FIRST_APPLICATION_UID + 33
-        });
-        final long[] freqs = {1, 12, 123, 12, 1234};
-        // Derived from freqs above, 2 clusters with {3, 2} freqs in each of them.
-        final int[] clusterFreqs = {3, 2};
-        when(mPowerProfile.getNumCpuClusters()).thenReturn(clusterFreqs.length);
-        for (int i = 0; i < clusterFreqs.length; ++i) {
-            when(mPowerProfile.getNumSpeedStepsInCpuCluster(i))
-                    .thenReturn(clusterFreqs[i]);
-        }
-        final long[][] uidTimesMs = {
-                {4, 10, 5, 9, 4},
-                {5, 1, 12, 2, 10},
-                {8, 25, 3, 0, 42}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
-            }
-            return null;
-        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidFreqTimeReader.Callback.class));
-        when(mCpuUidFreqTimeReader.perClusterTimesAvailable()).thenReturn(true);
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, false, null);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-
-            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
-                    uidTimesMs[i], u.getCpuFreqTimes(STATS_SINCE_CHARGED));
-            assertNull("Unexpected screen-off cpu times for uid=" + testUids[i],
-                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
-
-            int idx = 0;
-            for (int cluster = 0; cluster < clusterFreqs.length; ++cluster) {
-                for (int speed = 0; speed < clusterFreqs[cluster]; ++speed) {
-                    assertEquals("Unexpected time at cluster=" + cluster + ", speed=" + speed,
-                            uidTimesMs[i][idx] * 1000,
-                            u.getTimeAtCpuSpeed(cluster, speed, STATS_SINCE_CHARGED));
-                    idx++;
-                }
-            }
-        }
-
-        // Repeat the test when the screen is off.
-
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        final long[][] deltasMs = {
-                {3, 12, 55, 100, 32},
-                {3248327490475L, 232349349845043L, 123, 2398, 0},
-                {43, 3345, 2143, 123, 4554}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], deltasMs[i]);
-            }
-            return null;
-        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidFreqTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, true, null);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-
-            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
-                    sum(uidTimesMs[i], deltasMs[i]), u.getCpuFreqTimes(STATS_SINCE_CHARGED));
-            assertArrayEquals("Unexpected screen-off cpu times for uid=" + testUids[i],
-                    deltasMs[i], u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
-
-            int idx = 0;
-            for (int cluster = 0; cluster < clusterFreqs.length; ++cluster) {
-                for (int speed = 0; speed < clusterFreqs[cluster]; ++speed) {
-                    assertEquals("Unexpected time at cluster=" + cluster + ", speed=" + speed,
-                            (uidTimesMs[i][idx] + deltasMs[i][idx]) * 1000,
-                            u.getTimeAtCpuSpeed(cluster, speed, STATS_SINCE_CHARGED));
-                    idx++;
-                }
-            }
-        }
-    }
-
-    @Test
-    public void testReadKernelUidCpuFreqTimesLocked_partialTimers() {
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-
-        final int testUserId = 11;
-        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
-        final int[] testUids = getUids(testUserId, new int[]{
-                FIRST_APPLICATION_UID + 22,
-                FIRST_APPLICATION_UID + 27,
-                FIRST_APPLICATION_UID + 33
-        });
-        final int[] partialTimerUids = {
-                UserHandle.getUid(testUserId, FIRST_APPLICATION_UID + 48),
-                UserHandle.getUid(testUserId, FIRST_APPLICATION_UID + 10)
-        };
-        final ArrayList<BatteryStatsImpl.StopwatchTimer> partialTimers
-                = getPartialTimers(partialTimerUids);
-        final long[] freqs = {1, 12, 123, 12, 1234};
-        // Derived from freqs above, 2 clusters with {3, 2} freqs in each of them.
-        final int[] clusterFreqs = {3, 2};
-        when(mPowerProfile.getNumCpuClusters()).thenReturn(clusterFreqs.length);
-        for (int i = 0; i < clusterFreqs.length; ++i) {
-            when(mPowerProfile.getNumSpeedStepsInCpuCluster(i))
-                    .thenReturn(clusterFreqs[i]);
-        }
-        final long[][] uidTimesMs = {
-                {4, 10, 5, 9, 4},
-                {5, 1, 12, 2, 10},
-                {8, 25, 3, 0, 42}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
-            }
-            return null;
-        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidFreqTimeReader.Callback.class));
-        when(mCpuUidFreqTimeReader.perClusterTimesAvailable()).thenReturn(true);
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(partialTimers, true, false, null);
-
-        // VERIFY
-        final long[][] expectedWakeLockUidTimesUs = new long[clusterFreqs.length][];
-        for (int cluster = 0; cluster < clusterFreqs.length; ++cluster) {
-            expectedWakeLockUidTimesUs[cluster] = new long[clusterFreqs[cluster]];
-        }
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-
-            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
-                    uidTimesMs[i], u.getCpuFreqTimes(STATS_SINCE_CHARGED));
-            assertNull("Unexpected screen-off cpu times for uid=" + testUids[i],
-                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
-
-            int idx = 0;
-            for (int cluster = 0; cluster < clusterFreqs.length; ++cluster) {
-                for (int speed = 0; speed < clusterFreqs[cluster]; ++speed) {
-                    final long expectedTimeUs =
-                            (uidTimesMs[i][idx] * 1000 * WAKE_LOCK_WEIGHT) / 100;
-                    expectedWakeLockUidTimesUs[cluster][speed] += expectedTimeUs;
-                    assertEquals("Unexpected time for uid= " + testUids[i]
-                                    + " at cluster=" + cluster + ", speed=" + speed,
-                            expectedTimeUs,
-                            u.getTimeAtCpuSpeed(cluster, speed, STATS_SINCE_CHARGED));
-                    idx++;
-                }
-            }
-        }
-        for (int i = 0; i < partialTimerUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(partialTimerUids[i]);
-            assertNotNull("No entry for partial timer uid=" + partialTimerUids[i], u);
-
-            assertNull("Unexpected cpu times for partial timer uid=" + partialTimerUids[i],
-                    u.getCpuFreqTimes(STATS_SINCE_CHARGED));
-            assertNull("Unexpected screen-off cpu times for partial timer uid="
-                            + partialTimerUids[i],
-                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
-
-            for (int cluster = 0; cluster < clusterFreqs.length; ++cluster) {
-                for (int speed = 0; speed < clusterFreqs[cluster]; ++speed) {
-                    final long expectedTimeUs = expectedWakeLockUidTimesUs[cluster][speed]
-                            / (partialTimerUids.length - i);
-                    assertEquals("Unexpected time for partial timer uid= " + partialTimerUids[i]
-                                    + " at cluster=" + cluster + ", speed=" + speed,
-                            expectedTimeUs,
-                            u.getTimeAtCpuSpeed(cluster, speed, STATS_SINCE_CHARGED));
-                    expectedWakeLockUidTimesUs[cluster][speed] -= expectedTimeUs;
-                }
-            }
-        }
-        for (int cluster = 0; cluster < clusterFreqs.length; ++cluster) {
-            for (int speed = 0; speed < clusterFreqs[cluster]; ++speed) {
-                assertEquals("There shouldn't be any left-overs: "
-                                + Arrays.deepToString(expectedWakeLockUidTimesUs),
-                        0, expectedWakeLockUidTimesUs[cluster][speed]);
-            }
-        }
-    }
-
-    @Test
-    public void testReadKernelUidCpuFreqTimesLocked_freqsChanged() {
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-
-        final int testUserId = 11;
-        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
-        final int[] testUids = getUids(testUserId, new int[]{
-                FIRST_APPLICATION_UID + 22,
-                FIRST_APPLICATION_UID + 27,
-                FIRST_APPLICATION_UID + 33
-        });
-        final long[][] uidTimesMs = {
-                {4, 10, 5, 9, 4},
-                {5, 1, 12, 2, 10},
-                {8, 25, 3, 0, 42}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
-            }
-            return null;
-        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidFreqTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, false, null);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-
-            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
-                    uidTimesMs[i], u.getCpuFreqTimes(STATS_SINCE_CHARGED));
-            assertNull("Unexpected screen-off cpu times for uid=" + testUids[i],
-                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
-        }
-
-        // Repeat the test with the freqs from proc file changed.
-
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        final long[][] deltasMs = {
-                {3, 12, 55, 100, 32, 34984, 27983},
-                {3248327490475L, 232349349845043L, 123, 2398, 0, 398, 0},
-                {43, 3345, 2143, 123, 4554, 9374983794839L, 979875}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], deltasMs[i]);
-            }
-            return null;
-        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidFreqTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, true, null);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-
-            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
-                    deltasMs[i], u.getCpuFreqTimes(STATS_SINCE_CHARGED));
-            assertArrayEquals("Unexpected screen-off cpu times for uid=" + testUids[i],
-                    deltasMs[i], u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
-        }
-    }
-
-    @Test
-    public void testReadKernelUidCpuFreqTimesLocked_isolatedUid() {
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-
-        final int testUserId = 11;
-        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
-        final int isolatedAppId = FIRST_ISOLATED_UID + 27;
-        final int isolatedUid = UserHandle.getUid(testUserId, isolatedAppId);
-        final int[] testUids = getUids(testUserId, new int[]{
-                FIRST_APPLICATION_UID + 22,
-                isolatedAppId,
-                FIRST_APPLICATION_UID + 33
-        });
-        final long[][] uidTimesMs = {
-                {4, 10, 5, 9, 4},
-                {5, 1, 12, 2, 10},
-                {8, 25, 3, 0, 42}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
-            }
-            return null;
-        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidFreqTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, false, null);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            if (UserHandle.isIsolated(testUids[i])) {
-                assertNull("There shouldn't be an entry for isolated uid=" + testUids[i], u);
-                continue;
-            }
-            assertNotNull("No entry for uid=" + testUids[i], u);
-
-            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
-                    uidTimesMs[i], u.getCpuFreqTimes(STATS_SINCE_CHARGED));
-            assertNull("Unexpected screen-off cpu times for uid=" + testUids[i],
-                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
-        }
-
-
-        // Add an isolated uid mapping and repeat the test.
-
-        // PRECONDITIONS
-        final int ownerUid = UserHandle.getUid(testUserId, FIRST_APPLICATION_UID + 42);
-        mBatteryStatsImpl.addIsolatedUidLocked(isolatedUid, ownerUid);
-        final long[][] deltasMs = {
-                {3, 12, 55, 100, 32},
-                {32483274, 232349349, 123, 2398, 0},
-                {43, 3345, 2143, 123, 4554}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], deltasMs[i]);
-            }
-            return null;
-        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidFreqTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, false, null);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            final long[] expectedTimes;
-            if (UserHandle.isIsolated(testUids[i])) {
-                assertNull("There shouldn't be an entry for isolated uid=" + testUids[i], u);
-                // Since we added a mapping, an entry should've been created for owner uid.
-                u = mBatteryStatsImpl.getUidStats().get(ownerUid);
-                expectedTimes = deltasMs[i];
-                assertNotNull("No entry for owner uid=" + ownerUid, u);
-            } else {
-                assertNotNull("No entry for uid=" + testUids[i], u);
-                expectedTimes = sum(uidTimesMs[i], deltasMs[i]);
-            }
-
-            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
-                    expectedTimes, u.getCpuFreqTimes(STATS_SINCE_CHARGED));
-            assertNull("Unexpected screen-off cpu times for uid=" + testUids[i],
-                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
-        }
-    }
-
-    @Test
-    public void testReadKernelUidCpuFreqTimesLocked_invalidUid() {
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-
-        final int testUserId = 11;
-        final int invalidUserId = 15;
-        final int invalidUid = UserHandle.getUid(invalidUserId, FIRST_APPLICATION_UID + 99);
-        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
-        when(mUserInfoProvider.exists(invalidUserId)).thenReturn(false);
-        final int[] testUids = getUids(testUserId, new int[]{
-                FIRST_APPLICATION_UID + 22,
-                FIRST_APPLICATION_UID + 27,
-                FIRST_APPLICATION_UID + 33
-        });
-        final long[][] uidTimesMs = {
-                {4, 10, 5, 9, 4},
-                {5, 1, 12, 2, 10},
-                {8, 25, 3, 0, 42}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidFreqTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
-            }
-            // And one for the invalid uid
-            callback.onUidCpuTime(invalidUid, new long[]{12, 839, 32, 34, 21});
-            return null;
-        }).when(mCpuUidFreqTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidFreqTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuFreqTimesLocked(null, true, false, null);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-
-            assertArrayEquals("Unexpected cpu times for uid=" + testUids[i],
-                    uidTimesMs[i], u.getCpuFreqTimes(STATS_SINCE_CHARGED));
-            assertNull("Unexpected screen-off cpu times for uid=" + testUids[i],
-                    u.getScreenOffCpuFreqTimes(STATS_SINCE_CHARGED));
-        }
-        assertNull("There shouldn't be an entry for invalid uid=" + invalidUid,
-                mBatteryStatsImpl.getUidStats().get(invalidUid));
-    }
-
-    @Test
-    public void testReadKernelUidCpuActiveTimesLocked() {
-        mClocks.realtime = 1000;
-
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-
-        final int testUserId = 11;
-        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
-        final int[] testUids = getUids(testUserId, new int[]{
-                FIRST_APPLICATION_UID + 22,
-                FIRST_APPLICATION_UID + 27,
-                FIRST_APPLICATION_UID + 33
-        });
-        final long[] initialTimesMs = {8000, 25000, 3000, 0, 42000};
-        doAnswer(invocation -> {
-            final KernelCpuUidActiveTimeReader.Callback<Long> callback =
-                    invocation.getArgument(0);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], initialTimesMs[i]);
-            }
-            return null;
-        }).when(mCpuUidActiveTimeReader).readAbsolute(
-                any(KernelCpuUidActiveTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuActiveTimesLocked(true);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-            assertEquals("Unexpected cpu active time for uid=" + testUids[i], 0,
-                    u.getCpuActiveTime());
-        }
-
-        // Some time passes
-        mClocks.realtime = 2000;
-
-        // PRECONDITIONS
-        final long[] cpuTimesAt2000 = {43000, 3345000, 2143000, 123000, 4554000};
-        doAnswer(invocation -> {
-            final KernelCpuUidActiveTimeReader.Callback<Long> callback =
-                    invocation.getArgument(0);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], cpuTimesAt2000[i]);
-            }
-            return null;
-        }).when(mCpuUidActiveTimeReader).readAbsolute(
-                any(KernelCpuUidActiveTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuActiveTimesLocked(true);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-            assertEquals("Unexpected cpu active time for uid=" + testUids[i],
-                    cpuTimesAt2000[i] - initialTimesMs[i], u.getCpuActiveTime());
-        }
-
-        // Give it another second
-        mClocks.realtime = 3000;
-
-        // Repeat the test when the screen is off.
-
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        final long[] cpuTimesAt3000 = {63000, 7345000, 8143000, 923000, 5554000};
-        doAnswer(invocation -> {
-            final KernelCpuUidActiveTimeReader.Callback<Long> callback =
-                    invocation.getArgument(0);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], cpuTimesAt3000[i]);
-            }
-            return null;
-        }).when(mCpuUidActiveTimeReader).readAbsolute(
-                any(KernelCpuUidActiveTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuActiveTimesLocked(true);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-            assertEquals("Unexpected cpu active time for uid=" + testUids[i],
-                    cpuTimesAt3000[i] - initialTimesMs[i], u.getCpuActiveTime());
-        }
-    }
-
-    @Test
-    public void testReadKernelUidCpuActiveTimesLocked_invalidUid() {
-        mClocks.realtime = 1000;
-
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-
-        final int testUserId = 11;
-        final int invalidUserId = 15;
-        final int invalidUid = UserHandle.getUid(invalidUserId, FIRST_APPLICATION_UID + 99);
-        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
-        when(mUserInfoProvider.exists(invalidUserId)).thenReturn(false);
-        final int[] testUids = getUids(testUserId, new int[]{
-                FIRST_APPLICATION_UID + 22,
-                FIRST_APPLICATION_UID + 27,
-                FIRST_APPLICATION_UID + 33
-        });
-        final long[] cpuTimesAt1000 = {8000, 25000, 3000, 0, 42000};
-        doAnswer(invocation -> {
-            final KernelCpuUidActiveTimeReader.Callback<Long> callback =
-                    invocation.getArgument(0);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], cpuTimesAt1000[i]);
-            }
-            // And one for the invalid uid
-            callback.onUidCpuTime(invalidUid, 1200L);
-            return null;
-        }).when(mCpuUidActiveTimeReader).readAbsolute(
-                any(KernelCpuUidActiveTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuActiveTimesLocked(true);
-
-        // Some time passes
-        mClocks.realtime = 2000;
-
-        // Run again to compute the delta
-        final long[] cpuTimesAt2000 = {18000, 225000, 33000, 40, 542000};
-        doAnswer(invocation -> {
-            final KernelCpuUidActiveTimeReader.Callback<Long> callback =
-                    invocation.getArgument(0);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], cpuTimesAt2000[i]);
-            }
-            // And one for the invalid uid
-            callback.onUidCpuTime(invalidUid, 1200L);
-            return null;
-        }).when(mCpuUidActiveTimeReader).readAbsolute(
-                any(KernelCpuUidActiveTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuActiveTimesLocked(true);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-            assertEquals("Unexpected cpu active time for uid=" + testUids[i],
-                    cpuTimesAt2000[i] - cpuTimesAt1000[i], u.getCpuActiveTime());
-        }
-        assertNull("There shouldn't be an entry for invalid uid=" + invalidUid,
-                mBatteryStatsImpl.getUidStats().get(invalidUid));
-    }
-
-    @Test
-    public void testReadKernelUidCpuClusterTimesLocked() {
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-
-        final int testUserId = 11;
-        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
-        final int[] testUids = getUids(testUserId, new int[]{
-                FIRST_APPLICATION_UID + 22,
-                FIRST_APPLICATION_UID + 27,
-                FIRST_APPLICATION_UID + 33
-        });
-        final long[][] uidTimesMs = {
-                {4000, 10000},
-                {5000, 1000},
-                {8000, 0}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidClusterTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
-            }
-            return null;
-        }).when(mCpuUidClusterTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidClusterTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuClusterTimesLocked(true, null);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-            assertArrayEquals("Unexpected cpu cluster time for uid=" + testUids[i], uidTimesMs[i],
-                    u.getCpuClusterTimes());
-        }
-
-        // Repeat the test when the screen is off.
-
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        final long[][] deltasMs = {
-                {3000, 12000},
-                {3248327490475L, 0},
-                {43000, 3345000}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidClusterTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], deltasMs[i]);
-            }
-            return null;
-        }).when(mCpuUidClusterTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidClusterTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuClusterTimesLocked(true, null);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-            assertArrayEquals("Unexpected cpu cluster time for uid=" + testUids[i],
-                    sum(uidTimesMs[i], deltasMs[i]),
-                    u.getCpuClusterTimes());
-        }
-    }
-
-    @Test
-    public void testReadKernelUidCpuClusterTimesLocked_invalidUid() {
-        // PRECONDITIONS
-        updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-
-        final int testUserId = 11;
-        final int invalidUserId = 15;
-        final int invalidUid = UserHandle.getUid(invalidUserId, FIRST_APPLICATION_UID + 99);
-        when(mUserInfoProvider.exists(testUserId)).thenReturn(true);
-        when(mUserInfoProvider.exists(invalidUserId)).thenReturn(false);
-        final int[] testUids = getUids(testUserId, new int[]{
-                FIRST_APPLICATION_UID + 22,
-                FIRST_APPLICATION_UID + 27,
-                FIRST_APPLICATION_UID + 33
-        });
-        final long[][] uidTimesMs = {
-                {4000, 10000},
-                {5000, 1000},
-                {8000, 0}
-        };
-        doAnswer(invocation -> {
-            final KernelCpuUidClusterTimeReader.Callback<long[]> callback =
-                    invocation.getArgument(1);
-            for (int i = 0; i < testUids.length; ++i) {
-                callback.onUidCpuTime(testUids[i], uidTimesMs[i]);
-            }
-            // And one for the invalid uid
-            callback.onUidCpuTime(invalidUid, new long[]{400, 1000});
-            return null;
-        }).when(mCpuUidClusterTimeReader).readDelta(anyBoolean(),
-                any(KernelCpuUidClusterTimeReader.Callback.class));
-
-        // RUN
-        mBatteryStatsImpl.readKernelUidCpuClusterTimesLocked(true, null);
-
-        // VERIFY
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            assertNotNull("No entry for uid=" + testUids[i], u);
-            assertArrayEquals("Unexpected cpu cluster time for uid=" + testUids[i], uidTimesMs[i],
-                    u.getCpuClusterTimes());
-        }
-        assertNull("There shouldn't be an entry for invalid uid=" + invalidUid,
-                mBatteryStatsImpl.getUidStats().get(invalidUid));
-    }
-
-    @Test
-    public void testRemoveUidCpuTimes() {
-        mClocks.realtime = mClocks.uptime = 0;
-        mBatteryStatsImpl.getPendingRemovedUids().add(
-                mBatteryStatsImpl.new UidToRemove(1, mClocks.elapsedRealtime()));
-        mBatteryStatsImpl.getPendingRemovedUids().add(
-                mBatteryStatsImpl.new UidToRemove(5, 10, mClocks.elapsedRealtime()));
-        mBatteryStatsImpl.clearPendingRemovedUidsLocked();
-        assertEquals(2, mBatteryStatsImpl.getPendingRemovedUids().size());
-
-        mClocks.realtime = mClocks.uptime = 100_000;
-        mBatteryStatsImpl.clearPendingRemovedUidsLocked();
-        assertEquals(2, mBatteryStatsImpl.getPendingRemovedUids().size());
-
-        mClocks.realtime = mClocks.uptime = 200_000;
-        mBatteryStatsImpl.getPendingRemovedUids().add(
-                mBatteryStatsImpl.new UidToRemove(100, mClocks.elapsedRealtime()));
-        mBatteryStatsImpl.clearPendingRemovedUidsLocked();
-        assertEquals(3, mBatteryStatsImpl.getPendingRemovedUids().size());
-
-        mClocks.realtime = mClocks.uptime = 400_000;
-        mBatteryStatsImpl.clearPendingRemovedUidsLocked();
-        assertEquals(1, mBatteryStatsImpl.getPendingRemovedUids().size());
-        verify(mCpuUidActiveTimeReader).removeUid(1);
-        verify(mCpuUidActiveTimeReader).removeUidsInRange(5, 10);
-        verify(mCpuUidClusterTimeReader).removeUid(1);
-        verify(mCpuUidClusterTimeReader).removeUidsInRange(5, 10);
-        verify(mCpuUidFreqTimeReader).removeUid(1);
-        verify(mCpuUidFreqTimeReader).removeUidsInRange(5, 10);
-        verify(mCpuUidUserSysTimeReader).removeUid(1);
-        verify(mCpuUidUserSysTimeReader).removeUidsInRange(5, 10);
-
-        mClocks.realtime = mClocks.uptime = 800_000;
-        mBatteryStatsImpl.clearPendingRemovedUidsLocked();
-        assertEquals(0, mBatteryStatsImpl.getPendingRemovedUids().size());
-        verify(mCpuUidActiveTimeReader).removeUid(100);
-        verify(mCpuUidClusterTimeReader).removeUid(100);
-        verify(mCpuUidFreqTimeReader).removeUid(100);
-        verify(mCpuUidUserSysTimeReader).removeUid(100);
-
-        verifyNoMoreInteractions(mCpuUidActiveTimeReader, mCpuUidClusterTimeReader,
-                mCpuUidFreqTimeReader, mCpuUidUserSysTimeReader);
-    }
-
-    private void updateTimeBasesLocked(boolean unplugged, int screenState,
-            long upTime, long realTime) {
-        // Set PowerProfile=null before calling updateTimeBasesLocked to avoid execution of
-        // BatteryStatsImpl.updateCpuTimeLocked
-        mBatteryStatsImpl.setPowerProfile(null);
-        mBatteryStatsImpl.updateTimeBasesLocked(unplugged, screenState, upTime, realTime);
-        mBatteryStatsImpl.setPowerProfile(mPowerProfile);
-    }
-
-    private void initKernelCpuSpeedReaders(int count) {
-        mKernelCpuSpeedReaders = new KernelCpuSpeedReader[count];
-        for (int i = 0; i < count; ++i) {
-            mKernelCpuSpeedReaders[i] = Mockito.mock(KernelCpuSpeedReader.class);
-        }
-        mBatteryStatsImpl.setKernelCpuSpeedReaders(mKernelCpuSpeedReaders);
-    }
-
-    private ArrayList<BatteryStatsImpl.StopwatchTimer> getPartialTimers(int... uids) {
-        final ArrayList<BatteryStatsImpl.StopwatchTimer> partialTimers = new ArrayList<>();
-        final BatteryStatsImpl.TimeBase timeBase = new BatteryStatsImpl.TimeBase();
-        for (int uid : uids) {
-            final BatteryStatsImpl.Uid u = mBatteryStatsImpl.getUidStatsLocked(uid);
-            final BatteryStatsImpl.StopwatchTimer timer = new BatteryStatsImpl.StopwatchTimer(
-                    mClocks, u, WAKE_TYPE_PARTIAL, null, timeBase);
-            partialTimers.add(timer);
-        }
-        return partialTimers;
-    }
-
-    private long[] sum(long[] a, long[] b) {
-        assertEquals("Arrays a: " + Arrays.toString(a) + ", b: " + Arrays.toString(b),
-                a.length, b.length);
-        final long[] result = new long[a.length];
-        for (int i = 0; i < a.length; ++i) {
-            result[i] = a[i] + b[i];
-        }
-        return result;
-    }
-
-    private int[] getUids(int userId, int[] appIds) {
-        final int[] uids = new int[appIds.length];
-        for (int i = appIds.length - 1; i >= 0; --i) {
-            uids[i] = UserHandle.getUid(userId, appIds[i]);
-        }
-        return uids;
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsHistoryTest.java b/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsHistoryTest.java
deleted file mode 100644
index 1ba1462..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsHistoryTest.java
+++ /dev/null
@@ -1,441 +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.server.power.stats;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.os.BatteryManager;
-import android.os.BatteryStats;
-import android.os.BatteryStats.CpuUsageDetails;
-import android.os.BatteryStats.EnergyConsumerDetails;
-import android.os.BatteryStats.HistoryItem;
-import android.os.Parcel;
-import android.util.Log;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.internal.os.BatteryStatsHistory;
-import com.android.internal.os.BatteryStatsHistoryIterator;
-import com.android.internal.os.Clock;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.InOrder;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Test BatteryStatsHistory.
- */
-@RunWith(AndroidJUnit4.class)
-public class BatteryStatsHistoryTest {
-    private static final String TAG = "BatteryStatsHistoryTest";
-    private final Parcel mHistoryBuffer = Parcel.obtain();
-    private File mSystemDir;
-    private File mHistoryDir;
-    private final Clock mClock = new MockClock();
-    private BatteryStatsHistory mHistory;
-    @Mock
-    private BatteryStatsHistory.TraceDelegate mTracer;
-    @Mock
-    private BatteryStatsHistory.HistoryStepDetailsCalculator mStepDetailsCalculator;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        Context context = InstrumentationRegistry.getContext();
-        mSystemDir = context.getDataDir();
-        mHistoryDir = new File(mSystemDir, "battery-history");
-        String[] files = mHistoryDir.list();
-        if (files != null) {
-            for (int i = 0; i < files.length; i++) {
-                new File(mHistoryDir, files[i]).delete();
-            }
-        }
-        mHistoryDir.delete();
-        mHistory = new BatteryStatsHistory(mHistoryBuffer, mSystemDir, 32, 1024,
-                mStepDetailsCalculator, mClock, mTracer);
-
-        when(mStepDetailsCalculator.getHistoryStepDetails())
-                .thenReturn(new BatteryStats.HistoryStepDetails());
-    }
-
-    @Test
-    public void testAtraceBinaryState1() {
-        InOrder inOrder = Mockito.inOrder(mTracer);
-        Mockito.when(mTracer.tracingEnabled()).thenReturn(true);
-
-        mHistory.recordStateStartEvent(mClock.elapsedRealtime(),
-                mClock.uptimeMillis(), HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG);
-        mHistory.recordStateStopEvent(mClock.elapsedRealtime(),
-                mClock.uptimeMillis(), HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG);
-        mHistory.recordStateStartEvent(mClock.elapsedRealtime(),
-                mClock.uptimeMillis(), HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG);
-
-        inOrder.verify(mTracer).traceCounter("battery_stats.mobile_radio", 1);
-        inOrder.verify(mTracer).traceCounter("battery_stats.mobile_radio", 0);
-        inOrder.verify(mTracer).traceCounter("battery_stats.mobile_radio", 1);
-    }
-
-    @Test
-    public void testAtraceBinaryState2() {
-        InOrder inOrder = Mockito.inOrder(mTracer);
-        Mockito.when(mTracer.tracingEnabled()).thenReturn(true);
-
-        mHistory.recordState2StartEvent(mClock.elapsedRealtime(),
-                mClock.uptimeMillis(), HistoryItem.STATE2_WIFI_ON_FLAG);
-        mHistory.recordState2StopEvent(mClock.elapsedRealtime(),
-                mClock.uptimeMillis(), HistoryItem.STATE2_WIFI_ON_FLAG);
-        mHistory.recordState2StartEvent(mClock.elapsedRealtime(),
-                mClock.uptimeMillis(), HistoryItem.STATE2_WIFI_ON_FLAG);
-
-        inOrder.verify(mTracer).traceCounter("battery_stats.wifi", 1);
-        inOrder.verify(mTracer).traceCounter("battery_stats.wifi", 0);
-        inOrder.verify(mTracer).traceCounter("battery_stats.wifi", 1);
-    }
-
-    @Test
-    public void testAtraceNumericalState() {
-        InOrder inOrder = Mockito.inOrder(mTracer);
-        Mockito.when(mTracer.tracingEnabled()).thenReturn(true);
-
-        mHistory.recordDataConnectionTypeChangeEvent(mClock.elapsedRealtime(),
-                mClock.uptimeMillis(), 1);
-        mHistory.recordDataConnectionTypeChangeEvent(mClock.elapsedRealtime(),
-                mClock.uptimeMillis(), 2);
-        mHistory.recordDataConnectionTypeChangeEvent(mClock.elapsedRealtime(),
-                mClock.uptimeMillis(), 3);
-
-        inOrder.verify(mTracer).traceCounter("battery_stats.data_conn", 1);
-        inOrder.verify(mTracer).traceCounter("battery_stats.data_conn", 2);
-        inOrder.verify(mTracer).traceCounter("battery_stats.data_conn", 3);
-    }
-
-    @Test
-    public void testAtraceInstantEvent() {
-        InOrder inOrder = Mockito.inOrder(mTracer);
-        Mockito.when(mTracer.tracingEnabled()).thenReturn(true);
-
-        mHistory.recordEvent(mClock.elapsedRealtime(), mClock.uptimeMillis(),
-                HistoryItem.EVENT_WAKEUP_AP, "", 1234);
-        mHistory.recordEvent(mClock.elapsedRealtime(), mClock.uptimeMillis(),
-                HistoryItem.EVENT_JOB_START, "jobname", 2468);
-        mHistory.recordEvent(mClock.elapsedRealtime(), mClock.uptimeMillis(),
-                HistoryItem.EVENT_JOB_FINISH, "jobname", 2468);
-
-        inOrder.verify(mTracer).traceInstantEvent("battery_stats.wakeupap", "wakeupap=1234:\"\"");
-        inOrder.verify(mTracer).traceInstantEvent("battery_stats.job", "+job=2468:\"jobname\"");
-        inOrder.verify(mTracer).traceInstantEvent("battery_stats.job", "-job=2468:\"jobname\"");
-    }
-
-    @Test
-    public void testConstruct() {
-        createActiveFile(mHistory);
-        verifyFileNumbers(mHistory, Arrays.asList(0));
-        verifyActiveFile(mHistory, "0.bin");
-    }
-
-    @Test
-    public void testStartNextFile() {
-        List<Integer> fileList = new ArrayList<>();
-        fileList.add(0);
-        createActiveFile(mHistory);
-
-        // create file 1 to 31.
-        for (int i = 1; i < 32; i++) {
-            fileList.add(i);
-            mHistory.startNextFile();
-            createActiveFile(mHistory);
-            verifyFileNumbers(mHistory, fileList);
-            verifyActiveFile(mHistory, i + ".bin");
-        }
-
-        // create file 32
-        mHistory.startNextFile();
-        createActiveFile(mHistory);
-        fileList.add(32);
-        fileList.remove(0);
-        // verify file 0 is deleted.
-        verifyFileDeleted("0.bin");
-        verifyFileNumbers(mHistory, fileList);
-        verifyActiveFile(mHistory, "32.bin");
-
-        // create file 33
-        mHistory.startNextFile();
-        createActiveFile(mHistory);
-        // verify file 1 is deleted
-        fileList.add(33);
-        fileList.remove(0);
-        verifyFileDeleted("1.bin");
-        verifyFileNumbers(mHistory, fileList);
-        verifyActiveFile(mHistory, "33.bin");
-
-        assertEquals(0, mHistory.getHistoryUsedSize());
-
-        // create a new BatteryStatsHistory object, it will pick up existing history files.
-        BatteryStatsHistory history2 = new BatteryStatsHistory(mHistoryBuffer, mSystemDir, 32, 1024,
-                null, mClock, mTracer);
-        // verify constructor can pick up all files from file system.
-        verifyFileNumbers(history2, fileList);
-        verifyActiveFile(history2, "33.bin");
-
-        history2.reset();
-        createActiveFile(history2);
-        // verify all existing files are deleted.
-        for (int i = 2; i < 33; ++i) {
-            verifyFileDeleted(i + ".bin");
-        }
-
-        // verify file 0 is created
-        verifyFileNumbers(history2, Arrays.asList(0));
-        verifyActiveFile(history2, "0.bin");
-
-        // create file 1.
-        history2.startNextFile();
-        createActiveFile(history2);
-        verifyFileNumbers(history2, Arrays.asList(0, 1));
-        verifyActiveFile(history2, "1.bin");
-    }
-
-    private void verifyActiveFile(BatteryStatsHistory history, String file) {
-        final File expectedFile = new File(mHistoryDir, file);
-        assertEquals(expectedFile.getPath(), history.getActiveFile().getBaseFile().getPath());
-        assertTrue(expectedFile.exists());
-    }
-
-    private void verifyFileNumbers(BatteryStatsHistory history, List<Integer> fileList) {
-        assertEquals(fileList.size(), history.getFilesNumbers().size());
-        for (int i = 0; i < fileList.size(); i++) {
-            assertEquals(fileList.get(i), history.getFilesNumbers().get(i));
-            final File expectedFile =
-                    new File(mHistoryDir, fileList.get(i) + ".bin");
-            assertTrue(expectedFile.exists());
-        }
-    }
-
-    private void verifyFileDeleted(String file) {
-        assertFalse(new File(mHistoryDir, file).exists());
-    }
-
-    private void createActiveFile(BatteryStatsHistory history) {
-        final File file = history.getActiveFile().getBaseFile();
-        try {
-            file.createNewFile();
-        } catch (IOException e) {
-            Log.e(TAG, "Error creating history file " + file.getPath(), e);
-        }
-    }
-
-    @Test
-    public void testRecordMeasuredEnergyDetails() {
-        mHistory.forceRecordAllHistory();
-        mHistory.startRecordingHistory(0, 0, /* reset */ true);
-        mHistory.setBatteryState(true /* charging */, BatteryManager.BATTERY_STATUS_CHARGING, 80,
-                1234);
-
-        EnergyConsumerDetails details = new EnergyConsumerDetails();
-        EnergyConsumerDetails.EnergyConsumer consumer1 =
-                new EnergyConsumerDetails.EnergyConsumer();
-        consumer1.type = 42;
-        consumer1.ordinal = 0;
-        consumer1.name = "A";
-
-        EnergyConsumerDetails.EnergyConsumer consumer2 =
-                new EnergyConsumerDetails.EnergyConsumer();
-        consumer2.type = 777;
-        consumer2.ordinal = 0;
-        consumer2.name = "B/0";
-
-        EnergyConsumerDetails.EnergyConsumer consumer3 =
-                new EnergyConsumerDetails.EnergyConsumer();
-        consumer3.type = 777;
-        consumer3.ordinal = 1;
-        consumer3.name = "B/1";
-
-        EnergyConsumerDetails.EnergyConsumer consumer4 =
-                new EnergyConsumerDetails.EnergyConsumer();
-        consumer4.type = 314;
-        consumer4.ordinal = 1;
-        consumer4.name = "C";
-
-        details.consumers =
-                new EnergyConsumerDetails.EnergyConsumer[]{consumer1, consumer2, consumer3,
-                        consumer4};
-        details.chargeUC = new long[details.consumers.length];
-        for (int i = 0; i < details.chargeUC.length; i++) {
-            details.chargeUC[i] = 100L * i;
-        }
-        details.chargeUC[3] = BatteryStats.POWER_DATA_UNAVAILABLE;
-
-        mHistory.recordEnergyConsumerDetails(200, 200, details);
-
-        BatteryStatsHistoryIterator iterator = mHistory.iterate();
-        BatteryStats.HistoryItem item;
-        assertThat(item = iterator.next()).isNotNull(); // First item contains current time only
-
-        assertThat(item = iterator.next()).isNotNull();
-
-        String dump = toString(item, /* checkin */ false);
-        assertThat(dump).contains("+200ms");
-        assertThat(dump).contains("ext=energy:A=0 B/0=100 B/1=200");
-        assertThat(dump).doesNotContain("C=");
-
-        String checkin = toString(item, /* checkin */ true);
-        assertThat(checkin).contains("XE");
-        assertThat(checkin).contains("A=0,B/0=100,B/1=200");
-        assertThat(checkin).doesNotContain("C=");
-    }
-
-    @Test
-    public void cpuUsageDetails() {
-        mHistory.forceRecordAllHistory();
-        mHistory.startRecordingHistory(0, 0, /* reset */ true);
-        mHistory.setBatteryState(true /* charging */, BatteryManager.BATTERY_STATUS_CHARGING, 80,
-                1234);
-
-        CpuUsageDetails details = new CpuUsageDetails();
-        details.cpuBracketDescriptions = new String[] {"low", "Med", "HIGH"};
-        details.uid = 10123;
-        details.cpuUsageMs = new long[] { 100, 200, 300};
-        mHistory.recordCpuUsage(200, 200, details);
-
-        details.uid = 10321;
-        details.cpuUsageMs = new long[] { 400, 500, 600};
-        mHistory.recordCpuUsage(300, 300, details);
-
-        BatteryStatsHistoryIterator iterator = mHistory.iterate();
-        BatteryStats.HistoryItem item = new BatteryStats.HistoryItem();
-        assertThat(item = iterator.next()).isNotNull(); // First item contains current time only
-
-        assertThat(item = iterator.next()).isNotNull();
-
-        String dump = toString(item, /* checkin */ false);
-        assertThat(dump).contains("+200ms");
-        assertThat(dump).contains("ext=cpu:u0a123: 100, 200, 300");
-        assertThat(dump).contains("ext=cpu-bracket:0:low");
-        assertThat(dump).contains("ext=cpu-bracket:1:Med");
-        assertThat(dump).contains("ext=cpu-bracket:2:HIGH");
-
-        String checkin = toString(item, /* checkin */ true);
-        assertThat(checkin).contains("XB,3,0,low");
-        assertThat(checkin).contains("XB,3,1,Med");
-        assertThat(checkin).contains("XB,3,2,HIGH");
-        assertThat(checkin).contains("XC,10123,100,200,300");
-
-        assertThat(item = iterator.next()).isNotNull();
-
-        dump = toString(item, /* checkin */ false);
-        assertThat(dump).contains("+300ms");
-        assertThat(dump).contains("ext=cpu:u0a321: 400, 500, 600");
-        // Power bracket descriptions are written only once
-        assertThat(dump).doesNotContain("ext=cpu-bracket");
-
-        checkin = toString(item, /* checkin */ true);
-        assertThat(checkin).doesNotContain("XB");
-        assertThat(checkin).contains("XC,10321,400,500,600");
-    }
-
-    private String toString(BatteryStats.HistoryItem item, boolean checkin) {
-        BatteryStats.HistoryPrinter printer = new BatteryStats.HistoryPrinter();
-        StringWriter writer = new StringWriter();
-        PrintWriter pw = new PrintWriter(writer);
-        printer.printNextItem(pw, item, 0, checkin, /* verbose */ true);
-        pw.flush();
-        return writer.toString();
-    }
-
-    @Test
-    public void testVarintParceler() {
-        long[] values = {
-                0,
-                1,
-                42,
-                0x1234,
-                0x10000000,
-                0x12345678,
-                0x7fffffff,
-                0xffffffffL,
-                0x100000000000L,
-                0x123456789012L,
-                0x1000000000000000L,
-                0x1234567890123456L,
-                0x7fffffffffffffffL,
-                0xffffffffffffffffL};
-
-        // Parcel subarrays of different lengths and assert the size of the resulting parcel
-        testVarintParceler(Arrays.copyOfRange(values, 0, 1), 4);   // v. 8
-        testVarintParceler(Arrays.copyOfRange(values, 0, 2), 4);   // v. 16
-        testVarintParceler(Arrays.copyOfRange(values, 0, 3), 4);   // v. 24
-        testVarintParceler(Arrays.copyOfRange(values, 0, 4), 8);   // v. 32
-        testVarintParceler(Arrays.copyOfRange(values, 0, 5), 12);  // v. 40
-        testVarintParceler(Arrays.copyOfRange(values, 0, 6), 16);  // v. 48
-        testVarintParceler(Arrays.copyOfRange(values, 0, 7), 20);  // v. 56
-        testVarintParceler(Arrays.copyOfRange(values, 0, 8), 28);  // v. 64
-        testVarintParceler(Arrays.copyOfRange(values, 0, 9), 32);  // v. 72
-        testVarintParceler(Arrays.copyOfRange(values, 0, 10), 40); // v. 80
-        testVarintParceler(Arrays.copyOfRange(values, 0, 11), 48); // v. 88
-        testVarintParceler(Arrays.copyOfRange(values, 0, 12), 60); // v. 96
-        testVarintParceler(Arrays.copyOfRange(values, 0, 13), 68); // v. 104
-        testVarintParceler(Arrays.copyOfRange(values, 0, 14), 76); // v. 112
-    }
-
-    private void testVarintParceler(long[] values, int expectedLength) {
-        BatteryStatsHistory.VarintParceler parceler = new BatteryStatsHistory.VarintParceler();
-        Parcel parcel = Parcel.obtain();
-        parcel.writeString("begin");
-        int pos = parcel.dataPosition();
-        parceler.writeLongArray(parcel, values);
-        int length = parcel.dataPosition() - pos;
-        parcel.writeString("end");
-
-        byte[] bytes = parcel.marshall();
-        parcel.recycle();
-
-        parcel = Parcel.obtain();
-        parcel.unmarshall(bytes, 0, bytes.length);
-        parcel.setDataPosition(0);
-
-        assertThat(parcel.readString()).isEqualTo("begin");
-
-        long[] result = new long[values.length];
-        parceler.readLongArray(parcel, result);
-
-        assertThat(result).isEqualTo(values);
-        assertThat(length).isEqualTo(expectedLength);
-
-        assertThat(parcel.readString()).isEqualTo("end");
-
-        parcel.recycle();
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsImplTest.java b/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsImplTest.java
deleted file mode 100644
index ee4b839..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsImplTest.java
+++ /dev/null
@@ -1,699 +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.server.power.stats;
-
-import static android.os.BatteryStats.Uid.NUM_PROCESS_STATE;
-import static android.os.BatteryStats.Uid.PROCESS_STATE_BACKGROUND;
-import static android.os.BatteryStats.Uid.PROCESS_STATE_CACHED;
-import static android.os.BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE;
-import static android.os.BatteryStats.Uid.PROCESS_STATE_TOP;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.when;
-
-import android.app.ActivityManager;
-import android.bluetooth.BluetoothActivityEnergyInfo;
-import android.bluetooth.UidTraffic;
-import android.os.BatteryStats;
-import android.os.BluetoothBatteryStats;
-import android.os.Parcel;
-import android.os.WakeLockStats;
-import android.os.WorkSource;
-import android.util.SparseArray;
-import android.view.Display;
-
-import androidx.test.filters.LargeTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader;
-import com.android.internal.os.KernelSingleUidTimeReader;
-import com.android.internal.os.LongArrayMultiStateCounter;
-import com.android.internal.os.PowerProfile;
-
-import com.google.common.collect.ImmutableList;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.List;
-
-@LargeTest
-@RunWith(AndroidJUnit4.class)
-@SuppressWarnings("GuardedBy")
-public class BatteryStatsImplTest {
-    private static final long[] CPU_FREQS = {1, 2, 3, 4, 5};
-    private static final int NUM_CPU_FREQS = CPU_FREQS.length;
-
-    @Mock
-    private KernelCpuUidFreqTimeReader mKernelUidCpuFreqTimeReader;
-    @Mock
-    private KernelSingleUidTimeReader mKernelSingleUidTimeReader;
-    @Mock
-    private PowerProfile mPowerProfile;
-
-    private final MockClock mMockClock = new MockClock();
-    private MockBatteryStatsImpl mBatteryStatsImpl;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-
-        when(mKernelUidCpuFreqTimeReader.isFastCpuTimesReader()).thenReturn(true);
-        when(mKernelUidCpuFreqTimeReader.readFreqs(any())).thenReturn(CPU_FREQS);
-        when(mKernelUidCpuFreqTimeReader.allUidTimesAvailable()).thenReturn(true);
-        when(mKernelSingleUidTimeReader.singleUidCpuTimesAvailable()).thenReturn(true);
-        mBatteryStatsImpl = new MockBatteryStatsImpl(mMockClock)
-                .setPowerProfile(mPowerProfile)
-                .setKernelCpuUidFreqTimeReader(mKernelUidCpuFreqTimeReader)
-                .setKernelSingleUidTimeReader(mKernelSingleUidTimeReader);
-    }
-
-    @Test
-    public void testUpdateProcStateCpuTimes() {
-        mBatteryStatsImpl.setOnBatteryInternal(true);
-        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-
-        final int[] testUids = {10032, 10048, 10145, 10139};
-        final int[] activityManagerProcStates = {
-                ActivityManager.PROCESS_STATE_RECEIVER,
-                ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE,
-                ActivityManager.PROCESS_STATE_TOP,
-                ActivityManager.PROCESS_STATE_CACHED_EMPTY
-        };
-        final int[] testProcStates = {
-                PROCESS_STATE_BACKGROUND,
-                PROCESS_STATE_FOREGROUND_SERVICE,
-                PROCESS_STATE_TOP,
-                PROCESS_STATE_CACHED
-        };
-
-        // Initialize time-in-freq counters
-        mMockClock.realtime = 1000;
-        mMockClock.uptime = 1000;
-        for (int i = 0; i < testUids.length; ++i) {
-            mockKernelSingleUidTimeReader(testUids[i], new long[5]);
-            mBatteryStatsImpl.noteUidProcessStateLocked(testUids[i], activityManagerProcStates[i]);
-        }
-
-        final long[] timeInFreqs = new long[NUM_CPU_FREQS];
-
-        // Verify there are no cpu times initially.
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUids[i]);
-            for (int procState = 0; procState < NUM_PROCESS_STATE; ++procState) {
-                assertFalse(u.getCpuFreqTimes(timeInFreqs, procState));
-                assertFalse(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
-            }
-        }
-
-        // Obtain initial CPU time-in-freq counts
-        final long[][] cpuTimes = {
-                {349734983, 394982394832L, 909834, 348934, 9838},
-                {7498, 1239890, 988, 13298, 98980},
-                {989834, 384098, 98483, 23809, 4984},
-                {4859048, 348903, 4578967, 5973894, 298549}
-        };
-
-        mMockClock.realtime += 1000;
-        mMockClock.uptime += 1000;
-
-        for (int i = 0; i < testUids.length; ++i) {
-            mockKernelSingleUidTimeReader(testUids[i], cpuTimes[i]);
-            mBatteryStatsImpl.updateProcStateCpuTimesLocked(testUids[i],
-                    mMockClock.realtime, mMockClock.uptime);
-        }
-
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            for (int procState = 0; procState < NUM_PROCESS_STATE; ++procState) {
-                final boolean hasTimeInFreq = u.getCpuFreqTimes(timeInFreqs, procState);
-                if (procState == testProcStates[i]) {
-                    assertArrayEquals("Uid=" + testUids[i], cpuTimes[i], timeInFreqs);
-                } else {
-                    assertFalse(hasTimeInFreq);
-                }
-                assertFalse(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
-            }
-        }
-
-        // Accumulate CPU time-in-freq deltas
-        final long[][] delta1 = {
-                {9589, 148934, 309894, 3098493, 98754},
-                {21983, 94983, 4983, 9878493, 84854},
-                {945894, 9089432, 19478, 3834, 7845},
-                {843895, 43948, 949582, 99, 384}
-        };
-
-        mMockClock.realtime += 1000;
-        mMockClock.uptime += 1000;
-
-        for (int i = 0; i < testUids.length; ++i) {
-            long[] newCpuTimes = new long[cpuTimes[i].length];
-            for (int j = 0; j < cpuTimes[i].length; j++) {
-                newCpuTimes[j] = cpuTimes[i][j] + delta1[i][j];
-            }
-            mockKernelSingleUidTimeReader(testUids[i], newCpuTimes);
-            mBatteryStatsImpl.updateProcStateCpuTimesLocked(testUids[i],
-                    mMockClock.realtime, mMockClock.uptime);
-        }
-
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            for (int procState = 0; procState < NUM_PROCESS_STATE; ++procState) {
-                if (procState == testProcStates[i]) {
-                    long[] expectedCpuTimes = cpuTimes[i].clone();
-                    for (int j = 0; j < expectedCpuTimes.length; ++j) {
-                        expectedCpuTimes[j] += delta1[i][j];
-                    }
-                    assertTrue(u.getCpuFreqTimes(timeInFreqs, procState));
-                    assertArrayEquals("Uid=" + testUids[i], expectedCpuTimes, timeInFreqs);
-                } else {
-                    assertFalse(u.getCpuFreqTimes(timeInFreqs, procState));
-                }
-                assertFalse(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
-            }
-        }
-
-        // Validate the on-battery-screen-off counter
-        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, mMockClock.uptime * 1000,
-                mMockClock.realtime * 1000);
-
-        final long[][] delta2 = {
-                {95932, 2943, 49834, 89034, 139},
-                {349, 89605, 5896, 845, 98444},
-                {678, 7498, 9843, 889, 4894},
-                {488, 998, 8498, 394, 574}
-        };
-
-        mMockClock.realtime += 1000;
-        mMockClock.uptime += 1000;
-
-        for (int i = 0; i < testUids.length; ++i) {
-            long[] newCpuTimes = new long[cpuTimes[i].length];
-            for (int j = 0; j < cpuTimes[i].length; j++) {
-                newCpuTimes[j] = cpuTimes[i][j] + delta1[i][j] + delta2[i][j];
-            }
-            mockKernelSingleUidTimeReader(testUids[i], newCpuTimes);
-            mBatteryStatsImpl.updateProcStateCpuTimesLocked(testUids[i],
-                    mMockClock.realtime, mMockClock.uptime);
-        }
-
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            for (int procState = 0; procState < NUM_PROCESS_STATE; ++procState) {
-                if (procState == testProcStates[i]) {
-                    long[] expectedCpuTimes = cpuTimes[i].clone();
-                    for (int j = 0; j < expectedCpuTimes.length; ++j) {
-                        expectedCpuTimes[j] += delta1[i][j] + delta2[i][j];
-                    }
-                    assertTrue(u.getCpuFreqTimes(timeInFreqs, procState));
-                    assertArrayEquals("Uid=" + testUids[i], expectedCpuTimes, timeInFreqs);
-                    assertTrue(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
-                    assertArrayEquals("Uid=" + testUids[i], delta2[i], timeInFreqs);
-                } else {
-                    assertFalse(u.getCpuFreqTimes(timeInFreqs, procState));
-                    assertFalse(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
-                }
-            }
-        }
-
-        // Verify handling of isolated UIDs - their time-in-freq must be directly
-        // added to that of the parent UID's.  The proc state of the isolated UID is
-        // assumed to be the same as that of the parent UID, so there is no per-state
-        // data for isolated UIDs.
-        final long[][] delta3 = {
-                {98545, 95768795, 76586, 548945, 57846},
-                {788876, 586, 578459, 8776984, 9578923},
-                {3049509483598l, 4597834, 377654, 94589035, 7854},
-                {9493, 784, 99895, 8974893, 9879843}
-        };
-
-        mMockClock.realtime += 1000;
-        mMockClock.uptime += 1000;
-
-        final int parentUid = testUids[1];
-        final int childUid = 99099;
-        addIsolatedUid(parentUid, childUid);
-        final long[] isolatedUidCpuTimes = {495784, 398473, 4895, 4905, 30984093};
-        mockKernelSingleUidTimeReader(childUid, isolatedUidCpuTimes, isolatedUidCpuTimes);
-
-        for (int i = 0; i < testUids.length; ++i) {
-            long[] newCpuTimes = new long[cpuTimes[i].length];
-            for (int j = 0; j < cpuTimes[i].length; j++) {
-                newCpuTimes[j] = cpuTimes[i][j] + delta1[i][j] + delta2[i][j] + delta3[i][j];
-            }
-            mockKernelSingleUidTimeReader(testUids[i], newCpuTimes);
-            mBatteryStatsImpl.updateProcStateCpuTimesLocked(testUids[i],
-                    mMockClock.realtime, mMockClock.uptime);
-        }
-
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            for (int procState = 0; procState < NUM_PROCESS_STATE; ++procState) {
-                if (procState == testProcStates[i]) {
-                    long[] expectedCpuTimes = cpuTimes[i].clone();
-                    for (int j = 0; j < expectedCpuTimes.length; ++j) {
-                        expectedCpuTimes[j] += delta1[i][j] + delta2[i][j] + delta3[i][j]
-                                + (testUids[i] == parentUid ? isolatedUidCpuTimes[j] : 0);
-                    }
-                    assertTrue(u.getCpuFreqTimes(timeInFreqs, procState));
-                    assertArrayEquals("Uid=" + testUids[i], expectedCpuTimes, timeInFreqs);
-                    long[] expectedScreenOffTimes = delta2[i].clone();
-                    for (int j = 0; j < expectedScreenOffTimes.length; ++j) {
-                        expectedScreenOffTimes[j] += delta3[i][j]
-                                + (testUids[i] == parentUid ? isolatedUidCpuTimes[j] : 0);
-                    }
-                    assertTrue(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
-                    assertArrayEquals("Uid=" + testUids[i], expectedScreenOffTimes, timeInFreqs);
-                } else {
-                    assertFalse(u.getCpuFreqTimes(timeInFreqs, procState));
-                    assertFalse(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
-                }
-            }
-        }
-    }
-
-    @Test
-    public void testUpdateCpuTimesForAllUids() {
-        mBatteryStatsImpl.setOnBatteryInternal(false);
-        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-
-        mMockClock.realtime = 1000;
-        mMockClock.uptime = 1000;
-
-        final int[] testUids = {10032, 10048, 10145, 10139};
-        final int[] testProcStates = {
-                PROCESS_STATE_BACKGROUND,
-                PROCESS_STATE_FOREGROUND_SERVICE,
-                PROCESS_STATE_TOP,
-                PROCESS_STATE_CACHED
-        };
-
-        for (int i = 0; i < testUids.length; ++i) {
-            BatteryStatsImpl.Uid uid = mBatteryStatsImpl.getUidStatsLocked(testUids[i]);
-            uid.setProcessStateForTest(testProcStates[i], mMockClock.elapsedRealtime());
-            mockKernelSingleUidTimeReader(testUids[i], new long[NUM_CPU_FREQS]);
-            mBatteryStatsImpl.updateProcStateCpuTimesLocked(testUids[i],
-                    mMockClock.elapsedRealtime(), mMockClock.uptime);
-        }
-
-        final SparseArray<long[]> allUidCpuTimes = new SparseArray<>();
-        long[][] allCpuTimes = {
-                {938483, 4985984, 439893},
-                {499, 94904, 27694},
-                {302949085, 39789473, 34792839},
-                {9809485, 9083475, 347889834},
-        };
-        for (int i = 0; i < testUids.length; ++i) {
-            allUidCpuTimes.put(testUids[i], allCpuTimes[i]);
-        }
-        when(mKernelUidCpuFreqTimeReader.getAllUidCpuFreqTimeMs()).thenReturn(allUidCpuTimes);
-        long[][] expectedCpuTimes = {
-                {843598745, 397843, 32749, 99854, 23454},
-                {9834, 5885, 487589, 394, 93933},
-                {203984, 439, 9859, 30948, 49494},
-                {9389, 858, 239, 349, 50505}
-        };
-        for (int i = 0; i < testUids.length; ++i) {
-            mockKernelSingleUidTimeReader(testUids[i], expectedCpuTimes[i]);
-        }
-
-        mMockClock.realtime += 1000;
-        mMockClock.uptime += 1000;
-
-        mBatteryStatsImpl.updateCpuTimesForAllUids();
-
-        final long[] timeInFreqs = new long[NUM_CPU_FREQS];
-
-        for (int i = 0; i < testUids.length; ++i) {
-            final BatteryStats.Uid u = mBatteryStatsImpl.getUidStats().get(testUids[i]);
-            for (int procState = 0; procState < NUM_PROCESS_STATE; ++procState) {
-                if (procState == testProcStates[i]) {
-                    assertTrue(u.getCpuFreqTimes(timeInFreqs, procState));
-                    assertArrayEquals("Uid=" + testUids[i], expectedCpuTimes[i], timeInFreqs);
-                } else {
-                    assertFalse(u.getCpuFreqTimes(timeInFreqs, procState));
-                }
-                assertFalse(u.getScreenOffCpuFreqTimes(timeInFreqs, procState));
-            }
-        }
-    }
-
-    private void mockKernelSingleUidTimeReader(int testUid, long[] cpuTimes) {
-        doAnswer(invocation -> {
-            LongArrayMultiStateCounter counter = invocation.getArgument(1);
-            long timestampMs = invocation.getArgument(2);
-            LongArrayMultiStateCounter.LongArrayContainer container =
-                    new LongArrayMultiStateCounter.LongArrayContainer(NUM_CPU_FREQS);
-            container.setValues(cpuTimes);
-            counter.updateValues(container, timestampMs);
-            return null;
-        }).when(mKernelSingleUidTimeReader).addDelta(eq(testUid),
-                any(LongArrayMultiStateCounter.class), anyLong());
-    }
-
-    private void mockKernelSingleUidTimeReader(int testUid, long[] cpuTimes, long[] delta) {
-        doAnswer(invocation -> {
-            LongArrayMultiStateCounter counter = invocation.getArgument(1);
-            long timestampMs = invocation.getArgument(2);
-            LongArrayMultiStateCounter.LongArrayContainer deltaContainer =
-                    invocation.getArgument(3);
-
-            LongArrayMultiStateCounter.LongArrayContainer container =
-                    new LongArrayMultiStateCounter.LongArrayContainer(NUM_CPU_FREQS);
-            container.setValues(cpuTimes);
-            counter.updateValues(container, timestampMs);
-            if (deltaContainer != null) {
-                deltaContainer.setValues(delta);
-            }
-            return null;
-        }).when(mKernelSingleUidTimeReader).addDelta(eq(testUid),
-                any(LongArrayMultiStateCounter.class), anyLong(),
-                any(LongArrayMultiStateCounter.LongArrayContainer.class));
-    }
-
-    @Test
-    public void testMulticastWakelockAcqRel() {
-        final int testUid = 10032;
-        final int acquireTimeMs = 1000;
-        final int releaseTimeMs = 1005;
-        final int currentTimeMs = 1011;
-
-        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-
-        // Create a Uid Object
-        final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid);
-        assertNotNull(u);
-
-        // Acquire and release the lock
-        u.noteWifiMulticastEnabledLocked(acquireTimeMs);
-        u.noteWifiMulticastDisabledLocked(releaseTimeMs);
-
-        // Get the total acquisition time
-        long totalTime = u.getWifiMulticastTime(currentTimeMs * 1000,
-                BatteryStats.STATS_SINCE_CHARGED);
-        assertEquals("Miscalculations of Multicast wakelock acquisition time",
-                (releaseTimeMs - acquireTimeMs) * 1000, totalTime);
-    }
-
-    @Test
-    public void testMulticastWakelockAcqNoRel() {
-        final int testUid = 10032;
-        final int acquireTimeMs = 1000;
-        final int currentTimeMs = 1011;
-
-        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-
-        // Create a Uid Object
-        final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid);
-        assertNotNull(u);
-
-        // Acquire the lock
-        u.noteWifiMulticastEnabledLocked(acquireTimeMs);
-
-        // Get the total acquisition time
-        long totalTime = u.getWifiMulticastTime(currentTimeMs * 1000,
-                BatteryStats.STATS_SINCE_CHARGED);
-        assertEquals("Miscalculations of Multicast wakelock acquisition time",
-                (currentTimeMs - acquireTimeMs) * 1000, totalTime);
-    }
-
-    @Test
-    public void testMulticastWakelockAcqAcqRelRel() {
-        final int testUid = 10032;
-        final int acquireTimeMs_1 = 1000;
-        final int acquireTimeMs_2 = 1002;
-
-        final int releaseTimeMs_1 = 1005;
-        final int releaseTimeMs_2 = 1009;
-        final int currentTimeMs = 1011;
-
-        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-
-        // Create a Uid Object
-        final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid);
-        assertNotNull(u);
-
-        // Acquire and release the lock (twice in nested way)
-        u.noteWifiMulticastEnabledLocked(acquireTimeMs_1);
-        u.noteWifiMulticastEnabledLocked(acquireTimeMs_2);
-
-        u.noteWifiMulticastDisabledLocked(releaseTimeMs_1);
-        u.noteWifiMulticastDisabledLocked(releaseTimeMs_2);
-
-        // Get the total acquisition time
-        long totalTime = u.getWifiMulticastTime(currentTimeMs * 1000,
-                BatteryStats.STATS_SINCE_CHARGED);
-        assertEquals("Miscalculations of Multicast wakelock acquisition time",
-                (releaseTimeMs_2 - acquireTimeMs_1) * 1000, totalTime);
-    }
-
-    @Test
-    public void testMulticastWakelockAcqRelAcqRel() {
-        final int testUid = 10032;
-        final int acquireTimeMs_1 = 1000;
-        final int acquireTimeMs_2 = 1005;
-
-        final int releaseTimeMs_1 = 1002;
-        final int releaseTimeMs_2 = 1009;
-        final int currentTimeMs = 1011;
-
-        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-
-        // Create a Uid Object
-        final BatteryStats.Uid u = mBatteryStatsImpl.getUidStatsLocked(testUid);
-        assertNotNull(u);
-
-        // Acquire and release the lock (twice)
-        u.noteWifiMulticastEnabledLocked(acquireTimeMs_1);
-        u.noteWifiMulticastDisabledLocked(releaseTimeMs_1);
-
-        u.noteWifiMulticastEnabledLocked(acquireTimeMs_2);
-        u.noteWifiMulticastDisabledLocked(releaseTimeMs_2);
-
-        // Get the total acquisition time
-        long totalTime = u.getWifiMulticastTime(currentTimeMs * 1000,
-                BatteryStats.STATS_SINCE_CHARGED);
-        assertEquals("Miscalculations of Multicast wakelock acquisition time",
-                ((releaseTimeMs_1 - acquireTimeMs_1) + (releaseTimeMs_2 - acquireTimeMs_2))
-                        * 1000, totalTime);
-    }
-
-    private void addIsolatedUid(int parentUid, int childUid) {
-        final BatteryStatsImpl.Uid u = mBatteryStatsImpl.getUidStatsLocked(parentUid);
-        u.addIsolatedUid(childUid);
-    }
-
-    @Test
-    public void testGetWakeLockStats() {
-        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-
-        // First wakelock, acquired once, not currently held
-        mMockClock.realtime = 1000;
-        mBatteryStatsImpl.noteStartWakeLocked(10100, 100, null, "wakeLock1", null,
-                BatteryStats.WAKE_TYPE_PARTIAL, false);
-
-        mMockClock.realtime = 3000;
-        mBatteryStatsImpl.noteStopWakeLocked(10100, 100, null, "wakeLock1", null,
-                BatteryStats.WAKE_TYPE_PARTIAL);
-
-        // Second wakelock, acquired twice, still held
-        mMockClock.realtime = 4000;
-        mBatteryStatsImpl.noteStartWakeLocked(10200, 101, null, "wakeLock2", null,
-                BatteryStats.WAKE_TYPE_PARTIAL, false);
-
-        mMockClock.realtime = 5000;
-        mBatteryStatsImpl.noteStopWakeLocked(10200, 101, null, "wakeLock2", null,
-                BatteryStats.WAKE_TYPE_PARTIAL);
-
-        mMockClock.realtime = 6000;
-        mBatteryStatsImpl.noteStartWakeLocked(10200, 101, null, "wakeLock2", null,
-                BatteryStats.WAKE_TYPE_PARTIAL, false);
-
-        mMockClock.realtime = 9000;
-
-        List<WakeLockStats.WakeLock> wakeLockStats =
-                mBatteryStatsImpl.getWakeLockStats().getWakeLocks();
-        assertThat(wakeLockStats).hasSize(2);
-
-        WakeLockStats.WakeLock wakeLock1 = wakeLockStats.stream()
-                .filter(wl -> wl.uid == 10100 && wl.name.equals("wakeLock1")).findFirst().get();
-
-        assertThat(wakeLock1.timesAcquired).isEqualTo(1);
-        assertThat(wakeLock1.timeHeldMs).isEqualTo(0);  // Not currently held
-        assertThat(wakeLock1.totalTimeHeldMs).isEqualTo(2000); // 3000-1000
-
-        WakeLockStats.WakeLock wakeLock2 = wakeLockStats.stream()
-                .filter(wl -> wl.uid == 10200 && wl.name.equals("wakeLock2")).findFirst().get();
-
-        assertThat(wakeLock2.timesAcquired).isEqualTo(2);
-        assertThat(wakeLock2.timeHeldMs).isEqualTo(3000);  // 9000-6000
-        assertThat(wakeLock2.totalTimeHeldMs).isEqualTo(4000); // (5000-4000) + (9000-6000)
-    }
-
-    @Test
-    public void testGetBluetoothBatteryStats() {
-        when(mPowerProfile.getAveragePower(
-                PowerProfile.POWER_BLUETOOTH_CONTROLLER_OPERATING_VOLTAGE)).thenReturn(3.0);
-        mBatteryStatsImpl.setOnBatteryInternal(true);
-        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-
-        final WorkSource ws = new WorkSource(10042);
-        mBatteryStatsImpl.noteBluetoothScanStartedFromSourceLocked(ws, false, 1000, 1000);
-        mBatteryStatsImpl.noteBluetoothScanStoppedFromSourceLocked(ws, false, 5000, 5000);
-        mBatteryStatsImpl.noteBluetoothScanStartedFromSourceLocked(ws, true, 6000, 6000);
-        mBatteryStatsImpl.noteBluetoothScanStoppedFromSourceLocked(ws, true, 9000, 9000);
-        mBatteryStatsImpl.noteBluetoothScanResultsFromSourceLocked(ws, 42, 9000, 9000);
-
-        BluetoothActivityEnergyInfo info = createBluetoothActivityEnergyInfo(
-                /* timestamp= */ 1000,
-                /* controllerTxTimeMs= */ 9000,
-                /* controllerRxTimeMs= */ 8000,
-                /* controllerIdleTimeMs= */ 12000,
-                /* controllerEnergyUsed= */ 0,
-                createUidTraffic(/* appUid= */ 10042, /* rxBytes= */ 3000, /* txBytes= */ 4000),
-                createUidTraffic(/* appUid= */ 10043, /* rxBytes= */ 5000, /* txBytes= */ 8000));
-
-        mBatteryStatsImpl.updateBluetoothStateLocked(info, -1, 1000, 1000);
-
-        BluetoothBatteryStats stats =
-                mBatteryStatsImpl.getBluetoothBatteryStats();
-        assertThat(stats.getUidStats()).hasSize(2);
-
-        final BluetoothBatteryStats.UidStats uidStats =
-                stats.getUidStats().stream().filter(u -> u.uid == 10042).findFirst().get();
-        assertThat(uidStats.scanTimeMs).isEqualTo(7000);  // 4000+3000
-        assertThat(uidStats.unoptimizedScanTimeMs).isEqualTo(3000);
-        assertThat(uidStats.scanResultCount).isEqualTo(42);
-        assertThat(uidStats.rxTimeMs).isEqualTo(7375);  // Some scan time is treated as RX
-        assertThat(uidStats.txTimeMs).isEqualTo(7666);  // Some scan time is treated as TX
-    }
-
-    /** A regression test for b/266128651 */
-    @Test
-    public void testGetNetworkActivityBytes_multipleUpdates() {
-        when(mPowerProfile.getAveragePower(
-                PowerProfile.POWER_BLUETOOTH_CONTROLLER_OPERATING_VOLTAGE)).thenReturn(3.0);
-        mBatteryStatsImpl.setOnBatteryInternal(true);
-        mBatteryStatsImpl.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-
-        BluetoothActivityEnergyInfo info1 = createBluetoothActivityEnergyInfo(
-                /* timestamp= */ 10000,
-                /* controllerTxTimeMs= */ 9000,
-                /* controllerRxTimeMs= */ 8000,
-                /* controllerIdleTimeMs= */ 2000,
-                /* controllerEnergyUsed= */ 0,
-                createUidTraffic(/* appUid= */ 10042, /* rxBytes= */ 3000, /* txBytes= */ 4000),
-                createUidTraffic(/* appUid= */ 10043, /* rxBytes= */ 5000, /* txBytes= */ 8000));
-
-        mBatteryStatsImpl.updateBluetoothStateLocked(info1, -1, 1000, 1000);
-
-        long totalRx1 = mBatteryStatsImpl.getNetworkActivityBytes(
-                BatteryStats.NETWORK_BT_RX_DATA, BatteryStats.STATS_SINCE_CHARGED);
-        long totalTx1 = mBatteryStatsImpl.getNetworkActivityBytes(
-                BatteryStats.NETWORK_BT_TX_DATA, BatteryStats.STATS_SINCE_CHARGED);
-
-        assertThat(totalRx1).isEqualTo(8000);  // 3000 + 5000
-        assertThat(totalTx1).isEqualTo(12000);  // 4000 + 8000
-
-        BluetoothActivityEnergyInfo info2 = createBluetoothActivityEnergyInfo(
-                /* timestamp= */ 20000,
-                /* controllerTxTimeMs= */ 19000,
-                /* controllerRxTimeMs= */ 18000,
-                /* controllerIdleTimeMs= */ 3000,
-                /* controllerEnergyUsed= */ 0,
-                createUidTraffic(/* appUid= */ 10043, /* rxBytes= */ 6000, /* txBytes= */ 9500),
-                createUidTraffic(/* appUid= */ 10044, /* rxBytes= */ 7000, /* txBytes= */ 9000));
-
-        mBatteryStatsImpl.updateBluetoothStateLocked(info2, -1, 2000, 2000);
-
-        long totalRx2 = mBatteryStatsImpl.getNetworkActivityBytes(
-                BatteryStats.NETWORK_BT_RX_DATA, BatteryStats.STATS_SINCE_CHARGED);
-        long totalTx2 = mBatteryStatsImpl.getNetworkActivityBytes(
-                BatteryStats.NETWORK_BT_TX_DATA, BatteryStats.STATS_SINCE_CHARGED);
-
-        assertThat(totalRx2).isEqualTo(16000);  // 3000 + 6000 (updated) + 7000 (new)
-        assertThat(totalTx2).isEqualTo(22500);  // 4000 + 9500 (updated) + 9000 (new)
-
-        BluetoothActivityEnergyInfo info3 = createBluetoothActivityEnergyInfo(
-                /* timestamp= */ 30000,
-                /* controllerTxTimeMs= */ 20000,
-                /* controllerRxTimeMs= */ 20000,
-                /* controllerIdleTimeMs= */ 4000,
-                /* controllerEnergyUsed= */ 0,
-                createUidTraffic(/* appUid= */ 10043, /* rxBytes= */ 7000, /* txBytes= */ 9900),
-                createUidTraffic(/* appUid= */ 10044, /* rxBytes= */ 8000, /* txBytes= */ 10000));
-
-        mBatteryStatsImpl.updateBluetoothStateLocked(info3, -1, 2000, 2000);
-
-        long totalRx3 = mBatteryStatsImpl.getNetworkActivityBytes(
-                BatteryStats.NETWORK_BT_RX_DATA, BatteryStats.STATS_SINCE_CHARGED);
-        long totalTx3 = mBatteryStatsImpl.getNetworkActivityBytes(
-                BatteryStats.NETWORK_BT_TX_DATA, BatteryStats.STATS_SINCE_CHARGED);
-
-        assertThat(totalRx3).isEqualTo(18000);  // 3000 + 7000 (updated) + 8000 (updated)
-        assertThat(totalTx3).isEqualTo(23900);  // 4000 + 9900 (updated) + 10000 (updated)
-    }
-
-    private UidTraffic createUidTraffic(int appUid, long rxBytes, long txBytes) {
-        final Parcel parcel = Parcel.obtain();
-        parcel.writeInt(appUid); // mAppUid
-        parcel.writeLong(rxBytes); // mRxBytes
-        parcel.writeLong(txBytes); // mTxBytes
-        parcel.setDataPosition(0);
-        UidTraffic uidTraffic = UidTraffic.CREATOR.createFromParcel(parcel);
-        parcel.recycle();
-        return uidTraffic;
-    }
-
-    private BluetoothActivityEnergyInfo createBluetoothActivityEnergyInfo(
-            long timestamp,
-            long controllerTxTimeMs,
-            long controllerRxTimeMs,
-            long controllerIdleTimeMs,
-            long controllerEnergyUsed,
-            UidTraffic... uidTraffic) {
-        Parcel parcel = Parcel.obtain();
-        parcel.writeLong(timestamp); // mTimestamp
-        parcel.writeInt(
-                BluetoothActivityEnergyInfo.BT_STACK_STATE_STATE_ACTIVE); // mBluetoothStackState
-        parcel.writeLong(controllerTxTimeMs); // mControllerTxTimeMs;
-        parcel.writeLong(controllerRxTimeMs); // mControllerRxTimeMs;
-        parcel.writeLong(controllerIdleTimeMs); // mControllerIdleTimeMs;
-        parcel.writeLong(controllerEnergyUsed); // mControllerEnergyUsed;
-        parcel.writeTypedList(ImmutableList.copyOf(uidTraffic)); // mUidTraffic
-        parcel.setDataPosition(0);
-
-        BluetoothActivityEnergyInfo info =
-                BluetoothActivityEnergyInfo.CREATOR.createFromParcel(parcel);
-        parcel.recycle();
-        return info;
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsNoteTest.java b/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsNoteTest.java
deleted file mode 100644
index 6b21eb0..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsNoteTest.java
+++ /dev/null
@@ -1,2376 +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.server.power.stats;
-
-import static android.os.BatteryStats.NUM_SCREEN_BRIGHTNESS_BINS;
-import static android.os.BatteryStats.POWER_DATA_UNAVAILABLE;
-import static android.os.BatteryStats.RADIO_ACCESS_TECHNOLOGY_COUNT;
-import static android.os.BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR;
-import static android.os.BatteryStats.STATS_SINCE_CHARGED;
-import static android.os.BatteryStats.WAKE_TYPE_PARTIAL;
-
-import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_CPU;
-import static com.android.server.power.stats.BatteryStatsImpl.ExternalStatsSync.UPDATE_DISPLAY;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.mock;
-
-import android.app.ActivityManager;
-import android.app.usage.NetworkStatsManager;
-import android.hardware.radio.V1_5.AccessNetwork;
-import android.os.BatteryStats;
-import android.os.BatteryStats.HistoryItem;
-import android.os.BatteryStats.Uid.Sensor;
-import android.os.Process;
-import android.os.UserHandle;
-import android.os.WorkSource;
-import android.telephony.AccessNetworkConstants;
-import android.telephony.ActivityStatsTechSpecificInfo;
-import android.telephony.Annotation;
-import android.telephony.CellSignalStrength;
-import android.telephony.DataConnectionRealTimeInfo;
-import android.telephony.ModemActivityInfo;
-import android.telephony.ServiceState;
-import android.telephony.TelephonyManager;
-import android.util.Log;
-import android.util.MutableInt;
-import android.util.SparseIntArray;
-import android.util.SparseLongArray;
-import android.view.Display;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.internal.os.BatteryStatsHistoryIterator;
-import com.android.internal.os.PowerProfile;
-import com.android.internal.power.EnergyConsumerStats;
-import com.android.server.power.stats.BatteryStatsImpl.DualTimer;
-
-import junit.framework.TestCase;
-
-import org.mockito.Mock;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.function.IntConsumer;
-
-/**
- * Test various BatteryStatsImpl noteStart methods.
- */
-@SuppressWarnings("GuardedBy")
-public class BatteryStatsNoteTest extends TestCase {
-    private static final String TAG = BatteryStatsNoteTest.class.getSimpleName();
-
-    private static final int UID = 10500;
-    private static final int ISOLATED_APP_ID = Process.FIRST_ISOLATED_UID + 23;
-    private static final int ISOLATED_UID = UserHandle.getUid(0, ISOLATED_APP_ID);
-    private static final WorkSource WS = new WorkSource(UID);
-
-    enum ModemState {
-        SLEEP, IDLE, RECEIVING, TRANSMITTING
-    }
-
-    @Mock
-    NetworkStatsManager mNetworkStatsManager;
-
-    /**
-     * Test BatteryStatsImpl.Uid.noteBluetoothScanResultLocked.
-     */
-    @SmallTest
-    public void testNoteBluetoothScanResultLocked() throws Exception {
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(new MockClock());
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
-
-        bi.noteBluetoothScanResultsFromSourceLocked(WS, 1);
-        bi.noteBluetoothScanResultsFromSourceLocked(WS, 100);
-        assertEquals(101,
-                bi.getUidStats().get(UID).getBluetoothScanResultCounter()
-                        .getCountLocked(STATS_SINCE_CHARGED));
-        BatteryStats.Counter bgCntr = bi.getUidStats().get(UID).getBluetoothScanResultBgCounter();
-        if (bgCntr != null) {
-            assertEquals(0, bgCntr.getCountLocked(STATS_SINCE_CHARGED));
-        }
-
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
-        bi.noteBluetoothScanResultsFromSourceLocked(WS, 17);
-        assertEquals(101 + 17,
-                bi.getUidStats().get(UID).getBluetoothScanResultCounter()
-                        .getCountLocked(STATS_SINCE_CHARGED));
-        assertEquals(17,
-                bi.getUidStats().get(UID).getBluetoothScanResultBgCounter()
-                        .getCountLocked(STATS_SINCE_CHARGED));
-    }
-
-    /**
-     * Test BatteryStatsImpl.Uid.noteStartWakeLocked.
-     */
-    @SmallTest
-    public void testNoteStartWakeLocked() throws Exception {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-
-        int pid = 10;
-        String name = "name";
-
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
-        bi.getUidStatsLocked(UID)
-                .noteStartWakeLocked(pid, name, WAKE_TYPE_PARTIAL, clocks.realtime);
-
-        clocks.realtime = clocks.uptime = 100;
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
-
-        clocks.realtime = clocks.uptime = 220;
-        bi.getUidStatsLocked(UID).noteStopWakeLocked(pid, name, WAKE_TYPE_PARTIAL, clocks.realtime);
-
-        BatteryStats.Timer aggregTimer = bi.getUidStats().get(UID)
-                .getAggregatedPartialWakelockTimer();
-        long actualTime = aggregTimer.getTotalTimeLocked(300_000, STATS_SINCE_CHARGED);
-        long bgTime = aggregTimer.getSubTimer().getTotalTimeLocked(300_000, STATS_SINCE_CHARGED);
-        assertEquals(220_000, actualTime);
-        assertEquals(120_000, bgTime);
-    }
-
-    /**
-     * Test BatteryStatsImpl.Uid.noteStartWakeLocked for an isolated uid.
-     */
-    @SmallTest
-    public void testNoteStartWakeLocked_isolatedUid() throws Exception {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-
-        int pid = 10;
-        String name = "name";
-        String historyName = "historyName";
-
-        WorkSource.WorkChain isolatedWorkChain = new WorkSource.WorkChain();
-        isolatedWorkChain.addNode(ISOLATED_UID, name);
-
-        // Map ISOLATED_UID to UID.
-        bi.addIsolatedUidLocked(ISOLATED_UID, UID);
-
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
-        bi.noteStartWakeLocked(ISOLATED_UID, pid, isolatedWorkChain, name, historyName,
-                WAKE_TYPE_PARTIAL, false);
-
-        clocks.realtime = clocks.uptime = 100;
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
-
-        clocks.realtime = clocks.uptime = 220;
-        bi.noteStopWakeLocked(ISOLATED_UID, pid, isolatedWorkChain, name, historyName,
-                WAKE_TYPE_PARTIAL);
-
-        // ISOLATED_UID wakelock time should be attributed to UID.
-        BatteryStats.Timer aggregTimer = bi.getUidStats().get(UID)
-                .getAggregatedPartialWakelockTimer();
-        long actualTime = aggregTimer.getTotalTimeLocked(300_000, STATS_SINCE_CHARGED);
-        long bgTime = aggregTimer.getSubTimer().getTotalTimeLocked(300_000, STATS_SINCE_CHARGED);
-        assertEquals(220_000, actualTime);
-        assertEquals(120_000, bgTime);
-    }
-
-    /**
-     * Test BatteryStatsImpl.Uid.noteStartWakeLocked for an isolated uid, with a race where the
-     * isolated uid is removed from batterystats before the wakelock has been stopped.
-     */
-    @SmallTest
-    public void testNoteStartWakeLocked_isolatedUidRace() throws Exception {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-
-        int pid = 10;
-        String name = "name";
-        String historyName = "historyName";
-
-        WorkSource.WorkChain isolatedWorkChain = new WorkSource.WorkChain();
-        isolatedWorkChain.addNode(ISOLATED_UID, name);
-
-        // Map ISOLATED_UID to UID.
-        bi.addIsolatedUidLocked(ISOLATED_UID, UID);
-
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
-        bi.noteStartWakeLocked(ISOLATED_UID, pid, isolatedWorkChain, name, historyName,
-                WAKE_TYPE_PARTIAL, false);
-
-        clocks.realtime = clocks.uptime = 100;
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
-
-        clocks.realtime = clocks.uptime = 150;
-        bi.maybeRemoveIsolatedUidLocked(ISOLATED_UID, clocks.realtime, clocks.uptime);
-
-        clocks.realtime = clocks.uptime = 220;
-        bi.noteStopWakeLocked(ISOLATED_UID, pid, isolatedWorkChain, name, historyName,
-                WAKE_TYPE_PARTIAL);
-
-        // ISOLATED_UID wakelock time should be attributed to UID.
-        BatteryStats.Timer aggregTimer = bi.getUidStats().get(UID)
-                .getAggregatedPartialWakelockTimer();
-        long actualTime = aggregTimer.getTotalTimeLocked(300_000, STATS_SINCE_CHARGED);
-        long bgTime = aggregTimer.getSubTimer().getTotalTimeLocked(300_000, STATS_SINCE_CHARGED);
-        assertEquals(220_000, actualTime);
-        assertEquals(120_000, bgTime);
-    }
-
-    /**
-     * Test BatteryStatsImpl.Uid.noteLongPartialWakelockStart for an isolated uid.
-     */
-    @SmallTest
-    public void testNoteLongPartialWakelockStart_isolatedUid() throws Exception {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-
-
-        bi.setRecordAllHistoryLocked(true);
-        bi.forceRecordAllHistory();
-
-        int pid = 10;
-        String name = "name";
-        String historyName = "historyName";
-
-        WorkSource.WorkChain isolatedWorkChain = new WorkSource.WorkChain();
-        isolatedWorkChain.addNode(ISOLATED_UID, name);
-
-        // Map ISOLATED_UID to UID.
-        bi.addIsolatedUidLocked(ISOLATED_UID, UID);
-
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
-        bi.noteLongPartialWakelockStart(name, historyName, ISOLATED_UID);
-
-        clocks.realtime = clocks.uptime = 100;
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
-
-        clocks.realtime = clocks.uptime = 220;
-        bi.noteLongPartialWakelockFinish(name, historyName, ISOLATED_UID);
-
-        final BatteryStatsHistoryIterator iterator =  bi.iterateBatteryStatsHistory();
-
-        BatteryStats.HistoryItem item;
-
-        while ((item = iterator.next()) != null) {
-            if (item.eventCode == HistoryItem.EVENT_LONG_WAKE_LOCK_START) break;
-        }
-        assertThat(item.eventCode).isEqualTo(HistoryItem.EVENT_LONG_WAKE_LOCK_START);
-        assertThat(item.eventTag).isNotNull();
-        assertThat(item.eventTag.string).isEqualTo(historyName);
-        assertThat(item.eventTag.uid).isEqualTo(UID);
-
-        while ((item = iterator.next()) != null) {
-            if (item.eventCode == HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH) break;
-        }
-        assertThat(item.eventCode).isEqualTo(HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH);
-        assertThat(item.eventTag).isNotNull();
-        assertThat(item.eventTag.string).isEqualTo(historyName);
-        assertThat(item.eventTag.uid).isEqualTo(UID);
-    }
-
-    /**
-     * Test BatteryStatsImpl.Uid.noteLongPartialWakelockStart for an isolated uid.
-     */
-    @SmallTest
-    public void testNoteLongPartialWakelockStart_isolatedUidRace() throws Exception {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-
-
-        bi.setRecordAllHistoryLocked(true);
-        bi.forceRecordAllHistory();
-
-        int pid = 10;
-        String name = "name";
-        String historyName = "historyName";
-
-        WorkSource.WorkChain isolatedWorkChain = new WorkSource.WorkChain();
-        isolatedWorkChain.addNode(ISOLATED_UID, name);
-
-        // Map ISOLATED_UID to UID.
-        bi.addIsolatedUidLocked(ISOLATED_UID, UID);
-
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
-        bi.noteLongPartialWakelockStart(name, historyName, ISOLATED_UID);
-
-        clocks.realtime = clocks.uptime = 100;
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
-
-        clocks.realtime = clocks.uptime = 150;
-        bi.maybeRemoveIsolatedUidLocked(ISOLATED_UID, clocks.realtime, clocks.uptime);
-
-        clocks.realtime = clocks.uptime = 220;
-        bi.noteLongPartialWakelockFinish(name, historyName, ISOLATED_UID);
-
-        final BatteryStatsHistoryIterator iterator = bi.iterateBatteryStatsHistory();
-
-        BatteryStats.HistoryItem item;
-
-        while ((item = iterator.next()) != null) {
-            if (item.eventCode == HistoryItem.EVENT_LONG_WAKE_LOCK_START) break;
-        }
-        assertThat(item.eventCode).isEqualTo(HistoryItem.EVENT_LONG_WAKE_LOCK_START);
-        assertThat(item.eventTag).isNotNull();
-        assertThat(item.eventTag.string).isEqualTo(historyName);
-        assertThat(item.eventTag.uid).isEqualTo(UID);
-
-        while ((item = iterator.next()) != null) {
-            if (item.eventCode == HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH) break;
-        }
-        assertThat(item.eventCode).isEqualTo(HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH);
-        assertThat(item.eventTag).isNotNull();
-        assertThat(item.eventTag.string).isEqualTo(historyName);
-        assertThat(item.eventTag.uid).isEqualTo(UID);
-    }
-
-    /**
-     * Test BatteryStatsImpl.noteUidProcessStateLocked.
-     */
-    @SmallTest
-    public void testNoteUidProcessStateLocked() throws Exception {
-        final MockClock clocks = new MockClock();
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-
-        // map of ActivityManager process states and how long to simulate run time in each state
-        Map<Integer, Integer> stateRuntimeMap = new HashMap<Integer, Integer>();
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_TOP, 1111);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_BOUND_TOP, 7382);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE, 1234);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE, 2468);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_TOP_SLEEPING, 7531);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND, 4455);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND, 1337);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_BACKUP, 90210);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_HEAVY_WEIGHT, 911);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_SERVICE, 404);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_RECEIVER, 31459);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_HOME, 1123);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_LAST_ACTIVITY, 5813);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY, 867);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT, 5309);
-        stateRuntimeMap.put(ActivityManager.PROCESS_STATE_CACHED_EMPTY, 42);
-
-        bi.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-
-        for (Map.Entry<Integer, Integer> entry : stateRuntimeMap.entrySet()) {
-            bi.noteUidProcessStateLocked(UID, entry.getKey());
-            clocks.realtime += entry.getValue();
-            clocks.uptime = clocks.realtime;
-        }
-
-        long actualRunTimeUs;
-        long expectedRunTimeMs;
-        long elapsedTimeUs = clocks.realtime * 1000;
-        BatteryStats.Uid uid = bi.getUidStats().get(UID);
-
-        // compare runtime of process states to the Uid process states they map to
-        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_TOP, elapsedTimeUs,
-                STATS_SINCE_CHARGED);
-        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_TOP);
-        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
-
-        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE,
-                elapsedTimeUs, STATS_SINCE_CHARGED);
-        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE)
-                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE);
-        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
-
-        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_TOP_SLEEPING,
-                elapsedTimeUs, STATS_SINCE_CHARGED);
-        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_TOP_SLEEPING);
-        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
-
-        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_FOREGROUND,
-                elapsedTimeUs, STATS_SINCE_CHARGED);
-        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
-        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
-
-        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_BACKGROUND,
-                elapsedTimeUs, STATS_SINCE_CHARGED);
-        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND)
-                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_BACKUP)
-                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_SERVICE)
-                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_RECEIVER)
-                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_BOUND_TOP);
-        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
-
-        actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_CACHED,
-                elapsedTimeUs, STATS_SINCE_CHARGED);
-        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_HOME)
-                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_LAST_ACTIVITY)
-                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY)
-                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT)
-                + stateRuntimeMap.get(ActivityManager.PROCESS_STATE_CACHED_EMPTY);
-        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
-
-        // Special check for foreground service timer
-        actualRunTimeUs = uid.getForegroundServiceTimer().getTotalTimeLocked(elapsedTimeUs,
-                STATS_SINCE_CHARGED);
-        expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE);
-        assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
-    }
-
-    /**
-     * Test BatteryStatsImpl.updateTimeBasesLocked.
-     */
-    @SmallTest
-    public void testUpdateTimeBasesLocked() throws Exception {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-
-        bi.updateTimeBasesLocked(false, Display.STATE_OFF, 0, 0);
-        assertFalse(bi.getOnBatteryTimeBase().isRunning());
-        bi.updateTimeBasesLocked(false, Display.STATE_DOZE, 10, 10);
-        assertFalse(bi.getOnBatteryTimeBase().isRunning());
-        bi.updateTimeBasesLocked(false, Display.STATE_ON, 20, 20);
-        assertFalse(bi.getOnBatteryTimeBase().isRunning());
-
-        bi.updateTimeBasesLocked(true, Display.STATE_ON, 30, 30);
-        assertTrue(bi.getOnBatteryTimeBase().isRunning());
-        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        bi.updateTimeBasesLocked(true, Display.STATE_DOZE, 40, 40);
-        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 40, 40);
-        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
-    }
-
-    /**
-     * Test BatteryStatsImpl.noteScreenStateLocked sets timebases and screen states correctly.
-     */
-    @SmallTest
-    public void testNoteScreenStateLocked() throws Exception {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.initMeasuredEnergyStats(new String[]{"FOO", "BAR"});
-
-        bi.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-        bi.noteScreenStateLocked(0, Display.STATE_ON);
-
-        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
-        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_DOZE, bi.getScreenState());
-        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        bi.noteScreenStateLocked(0, Display.STATE_ON);
-        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_ON, bi.getScreenState());
-        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        bi.noteScreenStateLocked(0, Display.STATE_OFF);
-        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_OFF, bi.getScreenState());
-        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        bi.noteScreenStateLocked(0, Display.STATE_DOZE_SUSPEND);
-        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_DOZE_SUSPEND, bi.getScreenState());
-        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        // STATE_VR note should map to STATE_ON.
-        bi.noteScreenStateLocked(0, Display.STATE_VR);
-        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_ON, bi.getScreenState());
-        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        // STATE_ON_SUSPEND note should map to STATE_ON.
-        bi.noteScreenStateLocked(0, Display.STATE_ON_SUSPEND);
-        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_ON, bi.getScreenState());
-        // Transition from ON to ON state should not cause an External Sync
-        assertEquals(0, bi.getAndClearExternalStatsSyncFlags());
-    }
-
-    /**
-     * Test BatteryStatsImpl.noteScreenStateLocked sets timebases and screen states correctly for
-     * multi display devices
-     */
-    @SmallTest
-    public void testNoteScreenStateLocked_multiDisplay() throws Exception {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.setDisplayCountLocked(2);
-        bi.initMeasuredEnergyStats(new String[]{"FOO", "BAR"});
-
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        bi.noteScreenStateLocked(0, Display.STATE_OFF);
-        bi.noteScreenStateLocked(1, Display.STATE_OFF);
-
-        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
-        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_DOZE, bi.getScreenState());
-        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        bi.noteScreenStateLocked(0, Display.STATE_ON);
-        assertEquals(Display.STATE_ON, bi.getScreenState());
-        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        bi.noteScreenStateLocked(0, Display.STATE_OFF);
-        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_OFF, bi.getScreenState());
-        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        bi.noteScreenStateLocked(0, Display.STATE_DOZE_SUSPEND);
-        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_DOZE_SUSPEND, bi.getScreenState());
-        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        // STATE_VR note should map to STATE_ON.
-        bi.noteScreenStateLocked(0, Display.STATE_VR);
-        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_ON, bi.getScreenState());
-        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        // STATE_ON_SUSPEND note should map to STATE_ON.
-        bi.noteScreenStateLocked(0, Display.STATE_ON_SUSPEND);
-        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_ON, bi.getScreenState());
-        // Transition from ON to ON state should not cause an External Sync
-        assertEquals(0, bi.getAndClearExternalStatsSyncFlags());
-
-        bi.noteScreenStateLocked(1, Display.STATE_DOZE);
-        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        // Should remain STATE_ON since display0 is still on.
-        assertEquals(Display.STATE_ON, bi.getScreenState());
-        // Overall screen state did not change, so no need to sync CPU stats.
-        assertEquals(UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
-        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_DOZE, bi.getScreenState());
-        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        bi.noteScreenStateLocked(0, Display.STATE_ON);
-        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_ON, bi.getScreenState());
-        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        bi.noteScreenStateLocked(0, Display.STATE_OFF);
-        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_DOZE, bi.getScreenState());
-        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        bi.noteScreenStateLocked(0, Display.STATE_DOZE_SUSPEND);
-        assertTrue(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_DOZE, bi.getScreenState());
-        // Overall screen state did not change, so no need to sync CPU stats.
-        assertEquals(UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        bi.noteScreenStateLocked(0, Display.STATE_VR);
-        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_ON, bi.getScreenState());
-        assertEquals(UPDATE_CPU | UPDATE_DISPLAY, bi.getAndClearExternalStatsSyncFlags());
-
-        bi.noteScreenStateLocked(0, Display.STATE_ON_SUSPEND);
-        assertFalse(bi.getOnBatteryScreenOffTimeBase().isRunning());
-        assertEquals(Display.STATE_ON, bi.getScreenState());
-        assertEquals(0, bi.getAndClearExternalStatsSyncFlags());
-    }
-
-    /*
-     * Test BatteryStatsImpl.noteScreenStateLocked updates timers correctly.
-     *
-     * Unknown and doze should both be subset of off state
-     *
-     * Timeline 0----100----200----310----400------------1000
-     * Unknown         -------
-     * On                     -------
-     * Off             -------       ----------------------
-     * Doze                                ----------------
-     */
-    @SmallTest
-    public void testNoteScreenStateTimersLocked() throws Exception {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-
-        clocks.realtime = clocks.uptime = 100;
-        // Device startup, setOnBatteryLocked calls updateTimebases
-        bi.updateTimeBasesLocked(true, Display.STATE_UNKNOWN, 100_000, 100_000);
-        // Turn on display at 200us
-        clocks.realtime = clocks.uptime = 200;
-        bi.noteScreenStateLocked(0, Display.STATE_ON);
-        assertEquals(150_000, bi.computeBatteryRealtime(250_000, STATS_SINCE_CHARGED));
-        assertEquals(100_000, bi.computeBatteryScreenOffRealtime(250_000, STATS_SINCE_CHARGED));
-        assertEquals(50_000, bi.getScreenOnTime(250_000, STATS_SINCE_CHARGED));
-        assertEquals(0, bi.getScreenDozeTime(250_000, STATS_SINCE_CHARGED));
-        assertEquals(50_000, bi.getDisplayScreenOnTime(0, 250_000));
-        assertEquals(0, bi.getDisplayScreenDozeTime(0, 250_000));
-
-        clocks.realtime = clocks.uptime = 310;
-        bi.noteScreenStateLocked(0, Display.STATE_OFF);
-        assertEquals(250_000, bi.computeBatteryRealtime(350_000, STATS_SINCE_CHARGED));
-        assertEquals(140_000, bi.computeBatteryScreenOffRealtime(350_000, STATS_SINCE_CHARGED));
-        assertEquals(110_000, bi.getScreenOnTime(350_000, STATS_SINCE_CHARGED));
-        assertEquals(0, bi.getScreenDozeTime(350_000, STATS_SINCE_CHARGED));
-        assertEquals(110_000, bi.getDisplayScreenOnTime(0, 350_000));
-        assertEquals(0, bi.getDisplayScreenDozeTime(0, 350_000));
-
-        clocks.realtime = clocks.uptime = 400;
-        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
-        assertEquals(400_000, bi.computeBatteryRealtime(500_000, STATS_SINCE_CHARGED));
-        assertEquals(290_000, bi.computeBatteryScreenOffRealtime(500_000, STATS_SINCE_CHARGED));
-        assertEquals(110_000, bi.getScreenOnTime(500_000, STATS_SINCE_CHARGED));
-        assertEquals(100_000, bi.getScreenDozeTime(500_000, STATS_SINCE_CHARGED));
-        assertEquals(110_000, bi.getDisplayScreenOnTime(0, 500_000));
-        assertEquals(100_000, bi.getDisplayScreenDozeTime(0, 500_000));
-
-        clocks.realtime = clocks.uptime = 1000;
-        bi.noteScreenStateLocked(0, Display.STATE_OFF);
-        assertEquals(1400_000, bi.computeBatteryRealtime(1500_000, STATS_SINCE_CHARGED));
-        assertEquals(1290_000, bi.computeBatteryScreenOffRealtime(1500_000, STATS_SINCE_CHARGED));
-        assertEquals(110_000, bi.getScreenOnTime(1500_000, STATS_SINCE_CHARGED));
-        assertEquals(600_000, bi.getScreenDozeTime(1500_000, STATS_SINCE_CHARGED));
-        assertEquals(110_000, bi.getDisplayScreenOnTime(0, 1500_000));
-        assertEquals(600_000, bi.getDisplayScreenDozeTime(0, 1500_000));
-    }
-
-    /*
-     * Test BatteryStatsImpl.noteScreenStateLocked updates timers correctly for multi display
-     * devices.
-     */
-    @SmallTest
-    public void testNoteScreenStateTimersLocked_multiDisplay() throws Exception {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.setDisplayCountLocked(2);
-
-        clocks.realtime = clocks.uptime = 100;
-        // Device startup, setOnBatteryLocked calls updateTimebases
-        bi.updateTimeBasesLocked(true, Display.STATE_UNKNOWN, 100_000, 100_000);
-        // Turn on display at 200us
-        clocks.realtime = clocks.uptime = 200;
-        bi.noteScreenStateLocked(0, Display.STATE_ON);
-        bi.noteScreenStateLocked(1, Display.STATE_OFF);
-        assertEquals(150_000, bi.computeBatteryRealtime(250_000, STATS_SINCE_CHARGED));
-        assertEquals(100_000, bi.computeBatteryScreenOffRealtime(250_000, STATS_SINCE_CHARGED));
-        assertEquals(50_000, bi.getScreenOnTime(250_000, STATS_SINCE_CHARGED));
-        assertEquals(0, bi.getScreenDozeTime(250_000, STATS_SINCE_CHARGED));
-        assertEquals(50_000, bi.getDisplayScreenOnTime(0, 250_000));
-        assertEquals(0, bi.getDisplayScreenDozeTime(0, 250_000));
-        assertEquals(0, bi.getDisplayScreenOnTime(1, 250_000));
-        assertEquals(0, bi.getDisplayScreenDozeTime(1, 250_000));
-
-        clocks.realtime = clocks.uptime = 310;
-        bi.noteScreenStateLocked(0, Display.STATE_OFF);
-        assertEquals(250_000, bi.computeBatteryRealtime(350_000, STATS_SINCE_CHARGED));
-        assertEquals(140_000, bi.computeBatteryScreenOffRealtime(350_000, STATS_SINCE_CHARGED));
-        assertEquals(110_000, bi.getScreenOnTime(350_000, STATS_SINCE_CHARGED));
-        assertEquals(0, bi.getScreenDozeTime(350_000, STATS_SINCE_CHARGED));
-        assertEquals(110_000, bi.getDisplayScreenOnTime(0, 350_000));
-        assertEquals(0, bi.getDisplayScreenDozeTime(0, 350_000));
-        assertEquals(0, bi.getDisplayScreenOnTime(1, 350_000));
-        assertEquals(0, bi.getDisplayScreenDozeTime(1, 350_000));
-
-        clocks.realtime = clocks.uptime = 400;
-        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
-        assertEquals(400_000, bi.computeBatteryRealtime(500_000, STATS_SINCE_CHARGED));
-        assertEquals(290_000, bi.computeBatteryScreenOffRealtime(500_000, STATS_SINCE_CHARGED));
-        assertEquals(110_000, bi.getScreenOnTime(500_000, STATS_SINCE_CHARGED));
-        assertEquals(100_000, bi.getScreenDozeTime(500_000, STATS_SINCE_CHARGED));
-        assertEquals(110_000, bi.getDisplayScreenOnTime(0, 500_000));
-        assertEquals(100_000, bi.getDisplayScreenDozeTime(0, 500_000));
-        assertEquals(0, bi.getDisplayScreenOnTime(1, 500_000));
-        assertEquals(0, bi.getDisplayScreenDozeTime(1, 500_000));
-
-        clocks.realtime = clocks.uptime = 1000;
-        bi.noteScreenStateLocked(0, Display.STATE_OFF);
-        assertEquals(1000_000, bi.computeBatteryRealtime(1100_000, STATS_SINCE_CHARGED));
-        assertEquals(890_000, bi.computeBatteryScreenOffRealtime(1100_000, STATS_SINCE_CHARGED));
-        assertEquals(110_000, bi.getScreenOnTime(1100_000, STATS_SINCE_CHARGED));
-        assertEquals(600_000, bi.getScreenDozeTime(1100_000, STATS_SINCE_CHARGED));
-        assertEquals(110_000, bi.getDisplayScreenOnTime(0, 1100_000));
-        assertEquals(600_000, bi.getDisplayScreenDozeTime(0, 1100_000));
-        assertEquals(0, bi.getDisplayScreenOnTime(1, 1100_000));
-        assertEquals(0, bi.getDisplayScreenDozeTime(1, 1100_000));
-
-        clocks.realtime = clocks.uptime = 1200;
-        // Change state of second display to doze
-        bi.noteScreenStateLocked(1, Display.STATE_DOZE);
-        assertEquals(1150_000, bi.computeBatteryRealtime(1250_000, STATS_SINCE_CHARGED));
-        assertEquals(1040_000, bi.computeBatteryScreenOffRealtime(1250_000, STATS_SINCE_CHARGED));
-        assertEquals(110_000, bi.getScreenOnTime(1250_000, STATS_SINCE_CHARGED));
-        assertEquals(650_000, bi.getScreenDozeTime(1250_000, STATS_SINCE_CHARGED));
-        assertEquals(110_000, bi.getDisplayScreenOnTime(0, 1250_000));
-        assertEquals(600_000, bi.getDisplayScreenDozeTime(0, 1250_000));
-        assertEquals(0, bi.getDisplayScreenOnTime(1, 1250_000));
-        assertEquals(50_000, bi.getDisplayScreenDozeTime(1, 1250_000));
-
-        clocks.realtime = clocks.uptime = 1310;
-        bi.noteScreenStateLocked(0, Display.STATE_ON);
-        assertEquals(1250_000, bi.computeBatteryRealtime(1350_000, STATS_SINCE_CHARGED));
-        assertEquals(1100_000, bi.computeBatteryScreenOffRealtime(1350_000, STATS_SINCE_CHARGED));
-        assertEquals(150_000, bi.getScreenOnTime(1350_000, STATS_SINCE_CHARGED));
-        assertEquals(710_000, bi.getScreenDozeTime(1350_000, STATS_SINCE_CHARGED));
-        assertEquals(150_000, bi.getDisplayScreenOnTime(0, 1350_000));
-        assertEquals(600_000, bi.getDisplayScreenDozeTime(0, 1350_000));
-        assertEquals(0, bi.getDisplayScreenOnTime(1, 1350_000));
-        assertEquals(150_000, bi.getDisplayScreenDozeTime(1, 1350_000));
-
-        clocks.realtime = clocks.uptime = 1400;
-        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
-        assertEquals(1400_000, bi.computeBatteryRealtime(1500_000, STATS_SINCE_CHARGED));
-        assertEquals(1200_000, bi.computeBatteryScreenOffRealtime(1500_000, STATS_SINCE_CHARGED));
-        assertEquals(200_000, bi.getScreenOnTime(1500_000, STATS_SINCE_CHARGED));
-        assertEquals(810_000, bi.getScreenDozeTime(1500_000, STATS_SINCE_CHARGED));
-        assertEquals(200_000, bi.getDisplayScreenOnTime(0, 1500_000));
-        assertEquals(700_000, bi.getDisplayScreenDozeTime(0, 1500_000));
-        assertEquals(0, bi.getDisplayScreenOnTime(1, 1500_000));
-        assertEquals(300_000, bi.getDisplayScreenDozeTime(1, 1500_000));
-
-        clocks.realtime = clocks.uptime = 2000;
-        bi.noteScreenStateLocked(0, Display.STATE_OFF);
-        assertEquals(2000_000, bi.computeBatteryRealtime(2100_000, STATS_SINCE_CHARGED));
-        assertEquals(1800_000, bi.computeBatteryScreenOffRealtime(2100_000, STATS_SINCE_CHARGED));
-        assertEquals(200_000, bi.getScreenOnTime(2100_000, STATS_SINCE_CHARGED));
-        assertEquals(1410_000, bi.getScreenDozeTime(2100_000, STATS_SINCE_CHARGED));
-        assertEquals(200_000, bi.getDisplayScreenOnTime(0, 2100_000));
-        assertEquals(1200_000, bi.getDisplayScreenDozeTime(0, 2100_000));
-        assertEquals(0, bi.getDisplayScreenOnTime(1, 2100_000));
-        assertEquals(900_000, bi.getDisplayScreenDozeTime(1, 2100_000));
-
-
-        clocks.realtime = clocks.uptime = 2200;
-        // Change state of second display to on
-        bi.noteScreenStateLocked(1, Display.STATE_ON);
-        assertEquals(2150_000, bi.computeBatteryRealtime(2250_000, STATS_SINCE_CHARGED));
-        assertEquals(1900_000, bi.computeBatteryScreenOffRealtime(2250_000, STATS_SINCE_CHARGED));
-        assertEquals(250_000, bi.getScreenOnTime(2250_000, STATS_SINCE_CHARGED));
-        assertEquals(1510_000, bi.getScreenDozeTime(2250_000, STATS_SINCE_CHARGED));
-        assertEquals(200_000, bi.getDisplayScreenOnTime(0, 2250_000));
-        assertEquals(1200_000, bi.getDisplayScreenDozeTime(0, 2250_000));
-        assertEquals(50_000, bi.getDisplayScreenOnTime(1, 2250_000));
-        assertEquals(1000_000, bi.getDisplayScreenDozeTime(1, 2250_000));
-
-        clocks.realtime = clocks.uptime = 2310;
-        bi.noteScreenStateLocked(0, Display.STATE_ON);
-        assertEquals(2250_000, bi.computeBatteryRealtime(2350_000, STATS_SINCE_CHARGED));
-        assertEquals(1900_000, bi.computeBatteryScreenOffRealtime(2350_000, STATS_SINCE_CHARGED));
-        assertEquals(350_000, bi.getScreenOnTime(2350_000, STATS_SINCE_CHARGED));
-        assertEquals(1510_000, bi.getScreenDozeTime(2350_000, STATS_SINCE_CHARGED));
-        assertEquals(240_000, bi.getDisplayScreenOnTime(0, 2350_000));
-        assertEquals(1200_000, bi.getDisplayScreenDozeTime(0, 2350_000));
-        assertEquals(150_000, bi.getDisplayScreenOnTime(1, 2350_000));
-        assertEquals(1000_000, bi.getDisplayScreenDozeTime(1, 2350_000));
-
-        clocks.realtime = clocks.uptime = 2400;
-        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
-        assertEquals(2400_000, bi.computeBatteryRealtime(2500_000, STATS_SINCE_CHARGED));
-        assertEquals(1900_000, bi.computeBatteryScreenOffRealtime(2500_000, STATS_SINCE_CHARGED));
-        assertEquals(500_000, bi.getScreenOnTime(2500_000, STATS_SINCE_CHARGED));
-        assertEquals(1510_000, bi.getScreenDozeTime(2500_000, STATS_SINCE_CHARGED));
-        assertEquals(290_000, bi.getDisplayScreenOnTime(0, 2500_000));
-        assertEquals(1300_000, bi.getDisplayScreenDozeTime(0, 2500_000));
-        assertEquals(300_000, bi.getDisplayScreenOnTime(1, 2500_000));
-        assertEquals(1000_000, bi.getDisplayScreenDozeTime(1, 2500_000));
-
-        clocks.realtime = clocks.uptime = 3000;
-        bi.noteScreenStateLocked(0, Display.STATE_OFF);
-        assertEquals(3000_000, bi.computeBatteryRealtime(3100_000, STATS_SINCE_CHARGED));
-        assertEquals(1900_000, bi.computeBatteryScreenOffRealtime(3100_000, STATS_SINCE_CHARGED));
-        assertEquals(1100_000, bi.getScreenOnTime(3100_000, STATS_SINCE_CHARGED));
-        assertEquals(1510_000, bi.getScreenDozeTime(3100_000, STATS_SINCE_CHARGED));
-        assertEquals(290_000, bi.getDisplayScreenOnTime(0, 3100_000));
-        assertEquals(1800_000, bi.getDisplayScreenDozeTime(0, 3100_000));
-        assertEquals(900_000, bi.getDisplayScreenOnTime(1, 3100_000));
-        assertEquals(1000_000, bi.getDisplayScreenDozeTime(1, 3100_000));
-    }
-
-
-    /**
-     * Test BatteryStatsImpl.noteScreenBrightnessLocked updates timers correctly.
-     */
-    @SmallTest
-    public void testScreenBrightnessLocked_multiDisplay() throws Exception {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-
-        final int numDisplay = 2;
-        bi.setDisplayCountLocked(numDisplay);
-
-
-        final long[] overallExpected = new long[NUM_SCREEN_BRIGHTNESS_BINS];
-        final long[][] perDisplayExpected = new long[numDisplay][NUM_SCREEN_BRIGHTNESS_BINS];
-        class Bookkeeper {
-            public long currentTimeMs = 100;
-            public int overallActiveBin = -1;
-            public int[] perDisplayActiveBin = new int[numDisplay];
-        }
-        final Bookkeeper bk = new Bookkeeper();
-        Arrays.fill(bk.perDisplayActiveBin, -1);
-
-        IntConsumer incrementTime = inc -> {
-            bk.currentTimeMs += inc;
-            if (bk.overallActiveBin >= 0) {
-                overallExpected[bk.overallActiveBin] += inc;
-            }
-            for (int i = 0; i < numDisplay; i++) {
-                final int bin = bk.perDisplayActiveBin[i];
-                if (bin >= 0) {
-                    perDisplayExpected[i][bin] += inc;
-                }
-            }
-            clocks.realtime = clocks.uptime = bk.currentTimeMs;
-        };
-
-        bi.updateTimeBasesLocked(true, Display.STATE_ON, 0, 0);
-        bi.noteScreenStateLocked(0, Display.STATE_ON);
-        bi.noteScreenStateLocked(1, Display.STATE_ON);
-
-        incrementTime.accept(100);
-        bi.noteScreenBrightnessLocked(0, 25);
-        bi.noteScreenBrightnessLocked(1, 25);
-        // floor(25/256*5) = bin 0
-        bk.overallActiveBin = 0;
-        bk.perDisplayActiveBin[0] = 0;
-        bk.perDisplayActiveBin[1] = 0;
-
-        incrementTime.accept(50);
-        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
-
-        incrementTime.accept(13);
-        bi.noteScreenBrightnessLocked(0, 100);
-        // floor(25/256*5) = bin 1
-        bk.overallActiveBin = 1;
-        bk.perDisplayActiveBin[0] = 1;
-
-        incrementTime.accept(44);
-        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
-
-        incrementTime.accept(22);
-        bi.noteScreenBrightnessLocked(1, 200);
-        // floor(200/256*5) = bin 3
-        bk.overallActiveBin = 3;
-        bk.perDisplayActiveBin[1] = 3;
-
-        incrementTime.accept(33);
-        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
-
-        incrementTime.accept(77);
-        bi.noteScreenBrightnessLocked(0, 150);
-        // floor(150/256*5) = bin 2
-        // Overall active bin should not change
-        bk.perDisplayActiveBin[0] = 2;
-
-        incrementTime.accept(88);
-        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
-
-        incrementTime.accept(11);
-        bi.noteScreenStateLocked(1, Display.STATE_OFF);
-        // Display 1 should timers should stop incrementing
-        // Overall active bin should fallback to display 0's bin
-        bk.overallActiveBin = 2;
-        bk.perDisplayActiveBin[1] = -1;
-
-        incrementTime.accept(99);
-        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
-
-        incrementTime.accept(200);
-        bi.noteScreenBrightnessLocked(0, 255);
-        // floor(150/256*5) = bin 4
-        bk.overallActiveBin = 4;
-        bk.perDisplayActiveBin[0] = 4;
-
-        incrementTime.accept(300);
-        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
-
-        incrementTime.accept(200);
-        bi.noteScreenStateLocked(0, Display.STATE_DOZE);
-        // No displays are on. No brightness timers should be active.
-        bk.overallActiveBin = -1;
-        bk.perDisplayActiveBin[0] = -1;
-
-        incrementTime.accept(300);
-        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
-
-        incrementTime.accept(400);
-        bi.noteScreenStateLocked(1, Display.STATE_ON);
-        // Display 1 turned back on.
-        bk.overallActiveBin = 3;
-        bk.perDisplayActiveBin[1] = 3;
-
-        incrementTime.accept(500);
-        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
-
-        incrementTime.accept(600);
-        bi.noteScreenStateLocked(0, Display.STATE_ON);
-        // Display 0 turned back on.
-        bk.overallActiveBin = 4;
-        bk.perDisplayActiveBin[0] = 4;
-
-        incrementTime.accept(700);
-        checkScreenBrightnesses(overallExpected, perDisplayExpected, bi, bk.currentTimeMs);
-    }
-
-    @SmallTest
-    public void testAlarmStartAndFinishLocked() throws Exception {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.setRecordAllHistoryLocked(true);
-        bi.forceRecordAllHistory();
-
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
-
-        clocks.realtime = clocks.uptime = 100;
-        bi.noteAlarmStartLocked("foo", null, UID);
-        clocks.realtime = clocks.uptime = 5000;
-        bi.noteAlarmFinishLocked("foo", null, UID);
-
-        BatteryStatsHistoryIterator iterator = bi.iterateBatteryStatsHistory();
-        HistoryItem item;
-
-        assertThat(item = iterator.next()).isNotNull();
-        assertEquals(HistoryItem.CMD_RESET, item.cmd);
-        assertEquals(HistoryItem.EVENT_NONE, item.eventCode);
-
-        assertThat(item = iterator.next()).isNotNull();
-        assertEquals(HistoryItem.EVENT_ALARM_START, item.eventCode);
-        assertEquals("foo", item.eventTag.string);
-        assertEquals(UID, item.eventTag.uid);
-
-        assertThat(item = iterator.next()).isNotNull();
-        assertEquals(HistoryItem.EVENT_ALARM_FINISH, item.eventCode);
-        assertTrue(item.isDeltaData());
-        assertEquals("foo", item.eventTag.string);
-        assertEquals(UID, item.eventTag.uid);
-
-        assertThat(iterator.hasNext()).isFalse();
-        assertThat(iterator.next()).isNull();
-    }
-
-    @SmallTest
-    public void testAlarmStartAndFinishLocked_workSource() throws Exception {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.setRecordAllHistoryLocked(true);
-        bi.forceRecordAllHistory();
-
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
-
-        WorkSource ws = new WorkSource();
-        ws.add(100);
-        ws.createWorkChain().addNode(500, "tag");
-        bi.noteAlarmStartLocked("foo", ws, UID);
-        clocks.realtime = clocks.uptime = 5000;
-        bi.noteAlarmFinishLocked("foo", ws, UID);
-
-        BatteryStatsHistoryIterator iterator = bi.iterateBatteryStatsHistory();
-        HistoryItem item;
-
-        assertThat(item = iterator.next()).isNotNull();
-        assertEquals(HistoryItem.CMD_RESET, item.cmd);
-        assertEquals(HistoryItem.EVENT_NONE, item.eventCode);
-
-        assertThat(item = iterator.next()).isNotNull();
-        assertEquals(HistoryItem.EVENT_ALARM_START, item.eventCode);
-        assertEquals("foo", item.eventTag.string);
-        assertEquals(100, item.eventTag.uid);
-
-        assertThat(item = iterator.next()).isNotNull();
-        assertEquals(HistoryItem.EVENT_ALARM_START, item.eventCode);
-        assertEquals("foo", item.eventTag.string);
-        assertEquals(500, item.eventTag.uid);
-
-        assertThat(item = iterator.next()).isNotNull();
-        assertEquals(HistoryItem.EVENT_ALARM_FINISH, item.eventCode);
-        assertEquals("foo", item.eventTag.string);
-        assertEquals(100, item.eventTag.uid);
-
-        assertThat(item = iterator.next()).isNotNull();
-        assertEquals(HistoryItem.EVENT_ALARM_FINISH, item.eventCode);
-        assertEquals("foo", item.eventTag.string);
-        assertEquals(500, item.eventTag.uid);
-    }
-
-    @SmallTest
-    public void testNoteWakupAlarmLocked() {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.setRecordAllHistoryLocked(true);
-        bi.forceRecordAllHistory();
-        bi.mForceOnBattery = true;
-
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
-
-        bi.noteWakupAlarmLocked("com.foo.bar", UID, null, "tag");
-
-        BatteryStats.Uid.Pkg pkg = bi.getPackageStatsLocked(UID, "com.foo.bar");
-        assertEquals(1, pkg.getWakeupAlarmStats().get("tag").getCountLocked(STATS_SINCE_CHARGED));
-        assertEquals(1, pkg.getWakeupAlarmStats().size());
-    }
-
-    @SmallTest
-    public void testNoteWakupAlarmLocked_workSource_uid() {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.setRecordAllHistoryLocked(true);
-        bi.forceRecordAllHistory();
-        bi.mForceOnBattery = true;
-
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
-
-        WorkSource ws = new WorkSource();
-        ws.add(100);
-
-        // When a WorkSource is present, "UID" should not be used - only the uids present in the
-        // WorkSource should be reported.
-        bi.noteWakupAlarmLocked("com.foo.bar", UID, ws, "tag");
-        BatteryStats.Uid.Pkg pkg = bi.getPackageStatsLocked(UID, "com.foo.bar");
-        assertEquals(0, pkg.getWakeupAlarmStats().size());
-        pkg = bi.getPackageStatsLocked(100, "com.foo.bar");
-        assertEquals(1, pkg.getWakeupAlarmStats().size());
-
-        // If the WorkSource contains a "name", it should be interpreted as a package name and
-        // the packageName supplied as an argument must be ignored.
-        ws = new WorkSource();
-        ws.add(100, "com.foo.baz_alternate");
-        bi.noteWakupAlarmLocked("com.foo.baz", UID, ws, "tag");
-        pkg = bi.getPackageStatsLocked(100, "com.foo.baz");
-        assertEquals(0, pkg.getWakeupAlarmStats().size());
-        pkg = bi.getPackageStatsLocked(100, "com.foo.baz_alternate");
-        assertEquals(1, pkg.getWakeupAlarmStats().size());
-    }
-
-    @SmallTest
-    public void testNoteWakupAlarmLocked_workSource_workChain() {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.setRecordAllHistoryLocked(true);
-        bi.forceRecordAllHistory();
-        bi.mForceOnBattery = true;
-
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
-
-        WorkSource ws = new WorkSource();
-        ws.createWorkChain().addNode(100, "com.foo.baz_alternate");
-        bi.noteWakupAlarmLocked("com.foo.bar", UID, ws, "tag");
-
-        // For WorkChains, again we must only attribute to the uids present in the WorkSource
-        // (and not to "UID"). However, unlike the older "tags" we do not change the packagename
-        // supplied as an argument, given that we're logging the entire attribution chain.
-        BatteryStats.Uid.Pkg pkg = bi.getPackageStatsLocked(UID, "com.foo.bar");
-        assertEquals(0, pkg.getWakeupAlarmStats().size());
-        pkg = bi.getPackageStatsLocked(100, "com.foo.bar");
-        assertEquals(1, pkg.getWakeupAlarmStats().size());
-        pkg = bi.getPackageStatsLocked(100, "com.foo.baz_alternate");
-        assertEquals(0, pkg.getWakeupAlarmStats().size());
-    }
-
-    @SmallTest
-    public void testNoteGpsChanged() {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.setRecordAllHistoryLocked(true);
-        bi.forceRecordAllHistory();
-        bi.mForceOnBattery = true;
-
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
-
-        WorkSource ws = new WorkSource();
-        ws.add(UID);
-
-        bi.noteGpsChangedLocked(new WorkSource(), ws);
-        DualTimer t = bi.getUidStatsLocked(UID).getSensorTimerLocked(Sensor.GPS, false);
-        assertNotNull(t);
-        assertTrue(t.isRunningLocked());
-
-        bi.noteGpsChangedLocked(ws, new WorkSource());
-        t = bi.getUidStatsLocked(UID).getSensorTimerLocked(Sensor.GPS, false);
-        assertFalse(t.isRunningLocked());
-    }
-
-    @SmallTest
-    public void testNoteGpsChanged_workSource() {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.setRecordAllHistoryLocked(true);
-        bi.forceRecordAllHistory();
-        bi.mForceOnBattery = true;
-
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
-
-        WorkSource ws = new WorkSource();
-        ws.createWorkChain().addNode(UID, "com.foo");
-
-        bi.noteGpsChangedLocked(new WorkSource(), ws);
-        DualTimer t = bi.getUidStatsLocked(UID).getSensorTimerLocked(Sensor.GPS, false);
-        assertNotNull(t);
-        assertTrue(t.isRunningLocked());
-
-        bi.noteGpsChangedLocked(ws, new WorkSource());
-        t = bi.getUidStatsLocked(UID).getSensorTimerLocked(Sensor.GPS, false);
-        assertFalse(t.isRunningLocked());
-    }
-
-    @SmallTest
-    public void testUpdateDisplayMeasuredEnergyStatsLocked() {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.initMeasuredEnergyStats(new String[]{"FOO", "BAR"});
-
-        clocks.realtime = 0;
-        int[] screen = new int[]{Display.STATE_OFF};
-        boolean battery = false;
-
-        final int uid1 = 10500;
-        final int uid2 = 10501;
-        long blame1 = 0;
-        long blame2 = 0;
-        long globalDoze = 0;
-
-        // Case A: uid1 off, uid2 off, battery off, screen off
-        bi.updateTimeBasesLocked(battery, screen[0], clocks.realtime * 1000, 0);
-        bi.setOnBatteryInternal(battery);
-        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{500_000}, screen, clocks.realtime);
-        checkMeasuredCharge("A", uid1, blame1, uid2, blame2, globalDoze, bi);
-
-        // Case B: uid1 off, uid2 off, battery ON,  screen off
-        clocks.realtime += 17;
-        battery = true;
-        bi.updateTimeBasesLocked(battery, screen[0], clocks.realtime * 1000, 0);
-        bi.setOnBatteryInternal(battery);
-        clocks.realtime += 19;
-        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{510_000}, screen, clocks.realtime);
-        checkMeasuredCharge("B", uid1, blame1, uid2, blame2, globalDoze, bi);
-
-        // Case C: uid1 ON,  uid2 off, battery on,  screen off
-        clocks.realtime += 18;
-        setFgState(uid1, true, bi);
-        clocks.realtime += 18;
-        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{520_000}, screen, clocks.realtime);
-        checkMeasuredCharge("C", uid1, blame1, uid2, blame2, globalDoze, bi);
-
-        // Case D: uid1 on,  uid2 off, battery on,  screen ON
-        clocks.realtime += 17;
-        screen[0] = Display.STATE_ON;
-        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{521_000}, screen, clocks.realtime);
-        blame1 += 0; // Screen had been off during the measurement period
-        checkMeasuredCharge("D.1", uid1, blame1, uid2, blame2, globalDoze, bi);
-        clocks.realtime += 101;
-        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{530_000}, screen, clocks.realtime);
-        blame1 += 530_000;
-        checkMeasuredCharge("D.2", uid1, blame1, uid2, blame2, globalDoze, bi);
-
-        // Case E: uid1 on,  uid2 ON,  battery on,  screen on
-        clocks.realtime += 20;
-        setFgState(uid2, true, bi);
-        clocks.realtime += 40;
-        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{540_000}, screen, clocks.realtime);
-        // In the past 60ms, sum of fg is 20+40+40=100ms. uid1 is blamed for 60/100; uid2 for 40/100
-        blame1 += 540_000 * (20 + 40) / (20 + 40 + 40);
-        blame2 += 540_000 * (0 + 40) / (20 + 40 + 40);
-        checkMeasuredCharge("E", uid1, blame1, uid2, blame2, globalDoze, bi);
-
-        // Case F: uid1 on,  uid2 OFF, battery on,  screen on
-        clocks.realtime += 40;
-        setFgState(uid2, false, bi);
-        clocks.realtime += 120;
-        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{550_000}, screen, clocks.realtime);
-        // In the past 160ms, sum f fg is 200ms. uid1 is blamed for 40+120 of it; uid2 for 40 of it.
-        blame1 += 550_000 * (40 + 120) / (40 + 40 + 120);
-        blame2 += 550_000 * (40 + 0) / (40 + 40 + 120);
-        checkMeasuredCharge("F", uid1, blame1, uid2, blame2, globalDoze, bi);
-
-        // Case G: uid1 on,  uid2 off,  battery on, screen DOZE
-        clocks.realtime += 5;
-        screen[0] = Display.STATE_DOZE;
-        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{570_000}, screen, clocks.realtime);
-        blame1 += 570_000; // All of this pre-doze time is blamed on uid1.
-        checkMeasuredCharge("G", uid1, blame1, uid2, blame2, globalDoze, bi);
-
-        // Case H: uid1 on,  uid2 off,  battery on, screen ON
-        clocks.realtime += 6;
-        screen[0] = Display.STATE_ON;
-        bi.updateDisplayEnergyConsumerStatsLocked(new long[]{580_000}, screen, clocks.realtime);
-        blame1 += 0; // The screen had been doze during the energy period
-        globalDoze += 580_000;
-        checkMeasuredCharge("H", uid1, blame1, uid2, blame2, globalDoze, bi);
-    }
-
-    @SmallTest
-    public void testUpdateCustomMeasuredEnergyStatsLocked_neverCalled() {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.initMeasuredEnergyStats(new String[]{"FOO", "BAR"});
-        bi.setOnBatteryInternal(true);
-
-        final int uid1 = 11500;
-        final int uid2 = 11501;
-
-        // Initially, all custom buckets report charge of 0.
-        checkCustomBatteryConsumption("0", 0, 0, uid1, 0, 0, uid2, 0, 0, bi);
-    }
-
-    @SmallTest
-    public void testUpdateCustomMeasuredEnergyStatsLocked() {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.initMeasuredEnergyStats(new String[]{"FOO", "BAR"});
-
-        final int bucketA = 0; // Custom bucket 0
-        final int bucketB = 1; // Custom bucket 1
-
-        long totalBlameA = 0; // Total charge consumption for bucketA (may exceed sum of uids)
-        long totalBlameB = 0; // Total charge consumption for bucketB (may exceed sum of uids)
-
-        final int uid1 = 10500;
-        long blame1A = 0; // Blame for uid1 in bucketA
-        long blame1B = 0; // Blame for uid1 in bucketB
-
-        final int uid2 = 10501;
-        long blame2A = 0; // Blame for uid2 in bucketA
-        long blame2B = 0; // Blame for uid2 in bucketB
-
-        final SparseLongArray newChargesA = new SparseLongArray(2);
-        final SparseLongArray newChargesB = new SparseLongArray(2);
-
-
-        // ----- Case A: battery off (so blame does not increase)
-        bi.setOnBatteryInternal(false);
-
-        newChargesA.put(uid1, 20_000);
-        // Implicit newChargesA.put(uid2, 0);
-        bi.updateCustomEnergyConsumerStatsLocked(bucketA, 500_000, newChargesA);
-
-        newChargesB.put(uid1, 60_000);
-        // Implicit newChargesB.put(uid2, 0);
-        bi.updateCustomEnergyConsumerStatsLocked(bucketB, 700_000, newChargesB);
-
-        checkCustomBatteryConsumption(
-                "A", totalBlameA, totalBlameB, uid1, blame1A, blame1B, uid2, blame2A, blame2B, bi);
-
-
-        // ----- Case B: battery on
-        bi.setOnBatteryInternal(true);
-
-        newChargesA.put(uid1, 7_000); blame1A += 7_000;
-        // Implicit newChargesA.put(uid2, 0); blame2A += 0;
-        bi.updateCustomEnergyConsumerStatsLocked(bucketA, 310_000, newChargesA);
-        totalBlameA += 310_000;
-
-        newChargesB.put(uid1, 63_000); blame1B += 63_000;
-        newChargesB.put(uid2, 15_000); blame2B += 15_000;
-        bi.updateCustomEnergyConsumerStatsLocked(bucketB, 790_000, newChargesB);
-        totalBlameB += 790_000;
-
-        checkCustomBatteryConsumption(
-                "B", totalBlameA, totalBlameB, uid1, blame1A, blame1B, uid2, blame2A, blame2B, bi);
-
-
-        // ----- Case C: battery still on
-        newChargesA.delete(uid1); blame1A += 0;
-        newChargesA.put(uid2, 16_000); blame2A += 16_000;
-        bi.updateCustomEnergyConsumerStatsLocked(bucketA, 560_000, newChargesA);
-        totalBlameA += 560_000;
-
-        bi.updateCustomEnergyConsumerStatsLocked(bucketB, 10_000, null);
-        totalBlameB += 10_000;
-
-        checkCustomBatteryConsumption(
-                "C", totalBlameA, totalBlameB, uid1, blame1A, blame1B, uid2, blame2A, blame2B, bi);
-
-
-        // ----- Case D: battery still on
-        bi.updateCustomEnergyConsumerStatsLocked(bucketA, 0, newChargesA);
-        bi.updateCustomEnergyConsumerStatsLocked(bucketB, 15_000, new SparseLongArray(1));
-        totalBlameB += 15_000;
-        checkCustomBatteryConsumption(
-                "D", totalBlameA, totalBlameB, uid1, blame1A, blame1B, uid2, blame2A, blame2B, bi);
-    }
-
-    @SmallTest
-    public void testGetPerStateActiveRadioDurationMs_noModemActivity() {
-        final MockClock clock = new MockClock(); // holds realtime and uptime in ms
-        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clock);
-        final int ratCount = RADIO_ACCESS_TECHNOLOGY_COUNT;
-        final int frequencyCount = ServiceState.FREQUENCY_RANGE_MMWAVE + 1;
-        final int txLevelCount = CellSignalStrength.getNumSignalStrengthLevels();
-
-        final long[][][] expectedDurationsMs = new long[ratCount][frequencyCount][txLevelCount];
-        final long[][] expectedRxDurationsMs = new long[ratCount][frequencyCount];
-        final long[][][] expectedTxDurationsMs = new long[ratCount][frequencyCount][txLevelCount];
-        for (int rat = 0; rat < ratCount; rat++) {
-            for (int freq = 0; freq < frequencyCount; freq++) {
-                // Should have no RX data without Modem Activity Info
-                expectedRxDurationsMs[rat][freq] = POWER_DATA_UNAVAILABLE;
-                for (int txLvl = 0; txLvl < txLevelCount; txLvl++) {
-                    expectedDurationsMs[rat][freq][txLvl] = 0;
-                    // Should have no TX data without Modem Activity Info
-                    expectedTxDurationsMs[rat][freq][txLvl] = POWER_DATA_UNAVAILABLE;
-                }
-            }
-        }
-
-        final ModemAndBatteryState state = new ModemAndBatteryState(bi, null, null);
-
-        IntConsumer incrementTime = inc -> {
-            state.currentTimeMs += inc;
-            clock.realtime = clock.uptime = state.currentTimeMs;
-
-            // If the device is not on battery, no timers should increment.
-            if (!state.onBattery) return;
-            // If the modem is not active, no timers should increment.
-            if (!state.modemActive) return;
-
-            final int currentRat = state.currentRat;
-            final int currentFrequencyRange =
-                    currentRat == RADIO_ACCESS_TECHNOLOGY_NR ? state.currentFrequencyRange : 0;
-            int currentSignalStrength = state.currentSignalStrengths.get(currentRat);
-            expectedDurationsMs[currentRat][currentFrequencyRange][currentSignalStrength] += inc;
-        };
-
-
-        state.setOnBattery(false);
-        state.setModemActive(false);
-        state.setRatType(TelephonyManager.NETWORK_TYPE_UNKNOWN,
-                BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER);
-        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_UNKNOWN);
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
-                CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // While not on battery, the timers should not increase.
-        state.setModemActive(true);
-        incrementTime.accept(100);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setRatType(TelephonyManager.NETWORK_TYPE_NR, BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR);
-        incrementTime.accept(200);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR,
-                CellSignalStrength.SIGNAL_STRENGTH_GOOD);
-        incrementTime.accept(500);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_MMWAVE);
-        incrementTime.accept(300);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setRatType(TelephonyManager.NETWORK_TYPE_LTE,
-                BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE);
-        incrementTime.accept(400);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_MODERATE);
-        incrementTime.accept(500);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // When set on battery, currently active state (RAT:LTE, Signal Strength:Moderate) should
-        // start counting up.
-        state.setOnBattery(true);
-        incrementTime.accept(600);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-        // Changing LTE signal strength should be tracked.
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_POOR);
-        incrementTime.accept(700);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        incrementTime.accept(800);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_GOOD);
-        incrementTime.accept(900);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_GREAT);
-        incrementTime.accept(1000);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Change in the signal strength of nonactive RAT should not affect anything.
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
-                CellSignalStrength.SIGNAL_STRENGTH_POOR);
-        incrementTime.accept(1100);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Changing to OTHER Rat should start tracking the poor signal strength.
-        state.setRatType(TelephonyManager.NETWORK_TYPE_CDMA,
-                BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER);
-        incrementTime.accept(1200);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Noting frequency change should not affect non NR Rat.
-        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_HIGH);
-        incrementTime.accept(1300);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Now the NR Rat, HIGH frequency range, good signal strength should start counting.
-        state.setRatType(TelephonyManager.NETWORK_TYPE_NR, BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR);
-        incrementTime.accept(1400);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Noting frequency change should not affect non NR Rat.
-        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_LOW);
-        incrementTime.accept(1500);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Modem no longer active, should not be tracking any more.
-        state.setModemActive(false);
-        incrementTime.accept(1500);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-    }
-
-    @SmallTest
-    public void testGetPerStateActiveRadioDurationMs_withModemActivity() {
-        final MockClock clock = new MockClock(); // holds realtime and uptime in ms
-        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clock);
-        bi.setPowerProfile(mock(PowerProfile.class));
-        final int ratCount = RADIO_ACCESS_TECHNOLOGY_COUNT;
-        final int frequencyCount = ServiceState.FREQUENCY_RANGE_MMWAVE + 1;
-        final int txLevelCount = CellSignalStrength.getNumSignalStrengthLevels();
-
-        final long[][][] expectedDurationsMs = new long[ratCount][frequencyCount][txLevelCount];
-        final long[][] expectedRxDurationsMs = new long[ratCount][frequencyCount];
-        final long[][][] expectedTxDurationsMs = new long[ratCount][frequencyCount][txLevelCount];
-        for (int rat = 0; rat < ratCount; rat++) {
-            for (int freq = 0; freq < frequencyCount; freq++) {
-                expectedRxDurationsMs[rat][freq] = POWER_DATA_UNAVAILABLE;
-
-                for (int txLvl = 0; txLvl < txLevelCount; txLvl++) {
-                    expectedTxDurationsMs[rat][freq][txLvl] = POWER_DATA_UNAVAILABLE;
-                }
-            }
-        }
-
-        final ModemActivityInfo mai = new ModemActivityInfo(0L, 0L, 0L, new int[txLevelCount], 0L);
-        final ModemAndBatteryState state = new ModemAndBatteryState(bi, mai, null);
-
-        IntConsumer incrementTime = inc -> {
-            state.currentTimeMs += inc;
-            clock.realtime = clock.uptime = state.currentTimeMs;
-
-            // If the device is not on battery, no timers should increment.
-            if (!state.onBattery) return;
-            // If the modem is not active, no timers should increment.
-            if (!state.modemActive) return;
-
-            final int currRat = state.currentRat;
-            final int currFreqRange =
-                    currRat == RADIO_ACCESS_TECHNOLOGY_NR ? state.currentFrequencyRange : 0;
-            int currSignalStrength = state.currentSignalStrengths.get(currRat);
-
-            expectedDurationsMs[currRat][currFreqRange][currSignalStrength] += inc;
-
-            // Evaluate the HAL provided time in states.
-            switch (state.modemState) {
-                case SLEEP:
-                    long sleepMs = state.modemActivityInfo.getSleepTimeMillis();
-                    state.modemActivityInfo.setSleepTimeMillis(sleepMs + inc);
-                    break;
-                case IDLE:
-                    long idleMs = state.modemActivityInfo.getIdleTimeMillis();
-                    state.modemActivityInfo.setIdleTimeMillis(idleMs + inc);
-                    break;
-                case RECEIVING:
-                    long rxMs = state.modemActivityInfo.getReceiveTimeMillis();
-                    state.modemActivityInfo.setReceiveTimeMillis(rxMs + inc);
-                    expectedRxDurationsMs[currRat][currFreqRange] += inc;
-                    break;
-                case TRANSMITTING:
-                    int[] txMs = state.modemActivityInfo.getTransmitTimeMillis();
-                    txMs[currSignalStrength] += inc;
-                    state.modemActivityInfo.setTransmitTimeMillis(txMs);
-                    expectedTxDurationsMs[currRat][currFreqRange][currSignalStrength] += inc;
-                    break;
-            }
-        };
-
-        state.setOnBattery(false);
-        state.setModemActive(false);
-        state.setRatType(TelephonyManager.NETWORK_TYPE_UNKNOWN,
-                BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER);
-        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_UNKNOWN);
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
-                CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // While not on battery, the timers should not increase.
-        state.setModemActive(true);
-        incrementTime.accept(100);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setRatType(TelephonyManager.NETWORK_TYPE_NR, BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR);
-        incrementTime.accept(200);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR,
-                CellSignalStrength.SIGNAL_STRENGTH_GOOD);
-        incrementTime.accept(500);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_MMWAVE);
-        incrementTime.accept(300);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setRatType(TelephonyManager.NETWORK_TYPE_LTE,
-                BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE);
-        incrementTime.accept(400);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_MODERATE);
-        incrementTime.accept(500);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Data will now be available.
-        for (int rat = 0; rat < ratCount; rat++) {
-            for (int freq = 0; freq < frequencyCount; freq++) {
-                if (rat == RADIO_ACCESS_TECHNOLOGY_NR
-                        || freq == ServiceState.FREQUENCY_RANGE_UNKNOWN) {
-                    // Only the NR RAT should have per frequency data.
-                    expectedRxDurationsMs[rat][freq] = 0;
-                }
-                for (int txLvl = 0; txLvl < txLevelCount; txLvl++) {
-                    if (rat == RADIO_ACCESS_TECHNOLOGY_NR
-                            || freq == ServiceState.FREQUENCY_RANGE_UNKNOWN) {
-                        // Only the NR RAT should have per frequency data.
-                        expectedTxDurationsMs[rat][freq][txLvl] = 0;
-                    }
-                }
-            }
-        }
-
-        // When set on battery, currently active state (RAT:LTE, Signal Strength:Moderate) should
-        // start counting up.
-        state.setOnBattery(true);
-        incrementTime.accept(300);
-        state.setModemState(ModemState.RECEIVING);
-        incrementTime.accept(500);
-        state.setModemState(ModemState.TRANSMITTING);
-        incrementTime.accept(600);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-        // Changing LTE signal strength should be tracked.
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_POOR);
-        incrementTime.accept(300);
-        state.setModemState(ModemState.SLEEP);
-        incrementTime.accept(1000);
-        state.setModemState(ModemState.RECEIVING);
-        incrementTime.accept(700);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        incrementTime.accept(800);
-        state.setModemState(ModemState.TRANSMITTING);
-        incrementTime.accept(222);
-        state.setModemState(ModemState.IDLE);
-        incrementTime.accept(111);
-        state.setModemState(ModemState.RECEIVING);
-        incrementTime.accept(7777);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_GOOD);
-        incrementTime.accept(88);
-        state.setModemState(ModemState.TRANSMITTING);
-        incrementTime.accept(900);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_GREAT);
-        incrementTime.accept(123);
-        state.setModemState(ModemState.RECEIVING);
-        incrementTime.accept(333);
-        state.setModemState(ModemState.TRANSMITTING);
-        incrementTime.accept(1000);
-        state.setModemState(ModemState.RECEIVING);
-        incrementTime.accept(555);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Change in the signal strength of nonactive RAT should not affect anything.
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
-                CellSignalStrength.SIGNAL_STRENGTH_POOR);
-        incrementTime.accept(631);
-        state.setModemState(ModemState.TRANSMITTING);
-        incrementTime.accept(321);
-        state.setModemState(ModemState.RECEIVING);
-        incrementTime.accept(99);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Changing to OTHER Rat should start tracking the poor signal strength.
-        state.setRatType(TelephonyManager.NETWORK_TYPE_CDMA,
-                BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER);
-        incrementTime.accept(1200);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Noting frequency change should not affect non NR Rat.
-        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_HIGH);
-        incrementTime.accept(444);
-        state.setModemState(ModemState.TRANSMITTING);
-        incrementTime.accept(1300);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Now the NR Rat, HIGH frequency range, good signal strength should start counting.
-        state.setRatType(TelephonyManager.NETWORK_TYPE_NR, BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR);
-        incrementTime.accept(1400);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Frequency changed to low.
-        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_LOW);
-        incrementTime.accept(852);
-        state.setModemState(ModemState.RECEIVING);
-        incrementTime.accept(157);
-        state.setModemState(ModemState.TRANSMITTING);
-        incrementTime.accept(1500);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Modem no longer active, should not be tracking any more.
-        state.setModemActive(false);
-        incrementTime.accept(1500);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-    }
-
-    @SmallTest
-    public void testGetPerStateActiveRadioDurationMs_withSpecificInfoModemActivity() {
-        final MockClock clock = new MockClock(); // holds realtime and uptime in ms
-        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clock);
-        bi.setPowerProfile(mock(PowerProfile.class));
-        final int ratCount = RADIO_ACCESS_TECHNOLOGY_COUNT;
-        final int frequencyCount = ServiceState.FREQUENCY_RANGE_MMWAVE + 1;
-        final int txLevelCount = CellSignalStrength.getNumSignalStrengthLevels();
-
-        List<ActivityStatsTechSpecificInfo> specificInfoList = new ArrayList();
-
-        final long[][][] expectedDurationsMs = new long[ratCount][frequencyCount][txLevelCount];
-        final long[][] expectedRxDurationsMs = new long[ratCount][frequencyCount];
-        final long[][][] expectedTxDurationsMs = new long[ratCount][frequencyCount][txLevelCount];
-        for (int rat = 0; rat < ratCount; rat++) {
-            for (int freq = 0; freq < frequencyCount; freq++) {
-                if (rat == RADIO_ACCESS_TECHNOLOGY_NR
-                        || freq == ServiceState.FREQUENCY_RANGE_UNKNOWN) {
-                    // Initialize available specific Modem info
-                    specificInfoList.add(
-                            new ActivityStatsTechSpecificInfo(rat, freq, new int[txLevelCount], 0));
-                }
-                expectedRxDurationsMs[rat][freq] = POWER_DATA_UNAVAILABLE;
-
-                for (int txLvl = 0; txLvl < txLevelCount; txLvl++) {
-                    expectedTxDurationsMs[rat][freq][txLvl] = POWER_DATA_UNAVAILABLE;
-                }
-            }
-        }
-
-        specificInfoList.add(new ActivityStatsTechSpecificInfo(AccessNetwork.UNKNOWN,
-                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 0));
-        specificInfoList.add(new ActivityStatsTechSpecificInfo(AccessNetwork.GERAN,
-                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 0));
-        specificInfoList.add(new ActivityStatsTechSpecificInfo(AccessNetwork.UTRAN,
-                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 0));
-        specificInfoList.add(new ActivityStatsTechSpecificInfo(AccessNetwork.EUTRAN,
-                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 0));
-        specificInfoList.add(new ActivityStatsTechSpecificInfo(AccessNetwork.CDMA2000,
-                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 0));
-        specificInfoList.add(new ActivityStatsTechSpecificInfo(AccessNetwork.IWLAN,
-                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 0));
-        specificInfoList.add(new ActivityStatsTechSpecificInfo(AccessNetwork.NGRAN,
-                ServiceState.FREQUENCY_RANGE_UNKNOWN, new int[txLevelCount], 0));
-        specificInfoList.add(new ActivityStatsTechSpecificInfo(AccessNetwork.NGRAN,
-                ServiceState.FREQUENCY_RANGE_LOW, new int[txLevelCount], 0));
-        specificInfoList.add(new ActivityStatsTechSpecificInfo(AccessNetwork.NGRAN,
-                ServiceState.FREQUENCY_RANGE_MID, new int[txLevelCount], 0));
-        specificInfoList.add(new ActivityStatsTechSpecificInfo(AccessNetwork.NGRAN,
-                ServiceState.FREQUENCY_RANGE_HIGH, new int[txLevelCount], 0));
-        specificInfoList.add(new ActivityStatsTechSpecificInfo(AccessNetwork.NGRAN,
-                ServiceState.FREQUENCY_RANGE_MMWAVE, new int[txLevelCount], 0));
-
-        final ActivityStatsTechSpecificInfo[] specificInfos = specificInfoList.toArray(
-                new ActivityStatsTechSpecificInfo[specificInfoList.size()]);
-        final ModemActivityInfo mai = new ModemActivityInfo(0L, 0L, 0L, specificInfos);
-        final ModemAndBatteryState state = new ModemAndBatteryState(bi, mai, specificInfos);
-
-        IntConsumer incrementTime = inc -> {
-            state.currentTimeMs += inc;
-            clock.realtime = clock.uptime = state.currentTimeMs;
-
-            // If the device is not on battery, no timers should increment.
-            if (!state.onBattery) return;
-            // If the modem is not active, no timers should increment.
-            if (!state.modemActive) return;
-
-            final int currRat = state.currentRat;
-            final int currRant = state.currentRadioAccessNetworkType;
-            final int currFreqRange =
-                    currRat == RADIO_ACCESS_TECHNOLOGY_NR ? state.currentFrequencyRange : 0;
-            int currSignalStrength = state.currentSignalStrengths.get(currRat);
-
-            expectedDurationsMs[currRat][currFreqRange][currSignalStrength] += inc;
-
-            // Evaluate the HAL provided time in states.
-            final ActivityStatsTechSpecificInfo info = state.getSpecificInfo(currRant,
-                    currFreqRange);
-            switch (state.modemState) {
-                case SLEEP:
-                    long sleepMs = state.modemActivityInfo.getSleepTimeMillis();
-                    state.modemActivityInfo.setSleepTimeMillis(sleepMs + inc);
-                    break;
-                case IDLE:
-                    long idleMs = state.modemActivityInfo.getIdleTimeMillis();
-                    state.modemActivityInfo.setIdleTimeMillis(idleMs + inc);
-                    break;
-                case RECEIVING:
-                    long rxMs = info.getReceiveTimeMillis();
-                    info.setReceiveTimeMillis(rxMs + inc);
-                    expectedRxDurationsMs[currRat][currFreqRange] += inc;
-                    break;
-                case TRANSMITTING:
-                    int[] txMs = info.getTransmitTimeMillis().clone();
-                    txMs[currSignalStrength] += inc;
-                    info.setTransmitTimeMillis(txMs);
-                    expectedTxDurationsMs[currRat][currFreqRange][currSignalStrength] += inc;
-                    break;
-            }
-        };
-
-        state.setOnBattery(false);
-        state.setModemActive(false);
-        state.setRatType(TelephonyManager.NETWORK_TYPE_UNKNOWN,
-                BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
-                AccessNetworkConstants.AccessNetworkType.UNKNOWN);
-        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_UNKNOWN);
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
-                CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // While not on battery, the timers should not increase.
-        state.setModemActive(true);
-        incrementTime.accept(100);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setRatType(TelephonyManager.NETWORK_TYPE_NR, BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR,
-                AccessNetworkConstants.AccessNetworkType.NGRAN);
-        incrementTime.accept(200);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR,
-                CellSignalStrength.SIGNAL_STRENGTH_GOOD);
-        incrementTime.accept(500);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_MMWAVE);
-        incrementTime.accept(300);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setRatType(TelephonyManager.NETWORK_TYPE_LTE,
-                BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                AccessNetworkConstants.AccessNetworkType.EUTRAN);
-        incrementTime.accept(400);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_MODERATE);
-        incrementTime.accept(500);
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Data will now be available.
-        for (int rat = 0; rat < ratCount; rat++) {
-            for (int freq = 0; freq < frequencyCount; freq++) {
-                if (rat == RADIO_ACCESS_TECHNOLOGY_NR
-                        || freq == ServiceState.FREQUENCY_RANGE_UNKNOWN) {
-                    // Only the NR RAT should have per frequency data.
-                    expectedRxDurationsMs[rat][freq] = 0;
-                }
-                for (int txLvl = 0; txLvl < txLevelCount; txLvl++) {
-                    if (rat == RADIO_ACCESS_TECHNOLOGY_NR
-                            || freq == ServiceState.FREQUENCY_RANGE_UNKNOWN) {
-                        // Only the NR RAT should have per frequency data.
-                        expectedTxDurationsMs[rat][freq][txLvl] = 0;
-                    }
-                }
-            }
-        }
-
-        // When set on battery, currently active state (RAT:LTE, Signal Strength:Moderate) should
-        // start counting up.
-        state.setOnBattery(true);
-        state.noteModemControllerActivity();
-        incrementTime.accept(300);
-        state.setModemState(ModemState.RECEIVING);
-        incrementTime.accept(500);
-        state.setModemState(ModemState.TRANSMITTING);
-        incrementTime.accept(600);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-        // Changing LTE signal strength should be tracked.
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_POOR);
-        incrementTime.accept(300);
-        state.setModemState(ModemState.SLEEP);
-        incrementTime.accept(1000);
-        state.setModemState(ModemState.RECEIVING);
-        incrementTime.accept(700);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        incrementTime.accept(800);
-        state.setModemState(ModemState.TRANSMITTING);
-        incrementTime.accept(222);
-        state.setModemState(ModemState.IDLE);
-        incrementTime.accept(111);
-        state.setModemState(ModemState.RECEIVING);
-        incrementTime.accept(7777);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_GOOD);
-        incrementTime.accept(88);
-        state.setModemState(ModemState.TRANSMITTING);
-        incrementTime.accept(900);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_LTE,
-                CellSignalStrength.SIGNAL_STRENGTH_GREAT);
-        incrementTime.accept(123);
-        state.setModemState(ModemState.RECEIVING);
-        incrementTime.accept(333);
-        state.setModemState(ModemState.TRANSMITTING);
-        incrementTime.accept(1000);
-        state.setModemState(ModemState.RECEIVING);
-        incrementTime.accept(555);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Change in the signal strength of nonactive RAT should not affect anything.
-        state.setSignalStrength(BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
-                CellSignalStrength.SIGNAL_STRENGTH_POOR);
-        incrementTime.accept(631);
-        state.setModemState(ModemState.TRANSMITTING);
-        incrementTime.accept(321);
-        state.setModemState(ModemState.RECEIVING);
-        incrementTime.accept(99);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Changing to OTHER Rat should start tracking the poor signal strength.
-        state.setRatType(TelephonyManager.NETWORK_TYPE_CDMA,
-                BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER,
-                AccessNetworkConstants.AccessNetworkType.CDMA2000);
-        incrementTime.accept(1200);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Noting frequency change should not affect non NR Rat.
-        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_HIGH);
-        incrementTime.accept(444);
-        state.setModemState(ModemState.TRANSMITTING);
-        incrementTime.accept(1300);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Now the NR Rat, HIGH frequency range, good signal strength should start counting.
-        state.setRatType(TelephonyManager.NETWORK_TYPE_NR, BatteryStats.RADIO_ACCESS_TECHNOLOGY_NR,
-                AccessNetworkConstants.AccessNetworkType.NGRAN);
-        incrementTime.accept(1400);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Frequency changed to low.
-        state.setFrequencyRange(ServiceState.FREQUENCY_RANGE_LOW);
-        incrementTime.accept(852);
-        state.setModemState(ModemState.RECEIVING);
-        incrementTime.accept(157);
-        state.setModemState(ModemState.TRANSMITTING);
-        incrementTime.accept(1500);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-
-        // Modem no longer active, should not be tracking any more.
-        state.setModemActive(false);
-        incrementTime.accept(1500);
-        state.noteModemControllerActivity();
-        checkPerStateActiveRadioDurations(expectedDurationsMs, expectedRxDurationsMs,
-                expectedTxDurationsMs, bi, state.currentTimeMs);
-    }
-
-    @SmallTest
-    @SuppressWarnings("GuardedBy")
-    public void testProcStateSyncScheduling_mobileRadioActiveState() {
-        final MockClock clock = new MockClock(); // holds realtime and uptime in ms
-        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clock);
-        final MutableInt lastProcStateChangeFlags = new MutableInt(0);
-
-        MockBatteryStatsImpl.DummyExternalStatsSync externalStatsSync =
-                new MockBatteryStatsImpl.DummyExternalStatsSync() {
-                    @Override
-                    public void scheduleSyncDueToProcessStateChange(int flags,
-                            long delayMillis) {
-                        lastProcStateChangeFlags.value = flags;
-                    }
-                };
-
-        bi.setDummyExternalStatsSync(externalStatsSync);
-
-        bi.updateTimeBasesLocked(true, Display.STATE_OFF, 0, 0);
-
-        // Note mobile radio is on.
-        long curr = 1000L * (clock.realtime = clock.uptime = 1001);
-        bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH, curr,
-                UID);
-
-        lastProcStateChangeFlags.value = 0;
-        clock.realtime = clock.uptime = 2002;
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
-
-        final int allProcFlags = BatteryStatsImpl.ExternalStatsSync.UPDATE_ON_PROC_STATE_CHANGE;
-        assertEquals(allProcFlags, lastProcStateChangeFlags.value);
-
-        // Note mobile radio is off.
-        curr = 1000L * (clock.realtime = clock.uptime = 3003);
-        bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_LOW, curr,
-                UID);
-
-        lastProcStateChangeFlags.value = 0;
-        clock.realtime = clock.uptime = 4004;
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_CACHED_EMPTY);
-
-        final int noRadioProcFlags = BatteryStatsImpl.ExternalStatsSync.UPDATE_ON_PROC_STATE_CHANGE
-                & ~BatteryStatsImpl.ExternalStatsSync.UPDATE_RADIO;
-        assertEquals(
-                "An inactive radio should not be queried on proc state change",
-                noRadioProcFlags, lastProcStateChangeFlags.value);
-    }
-
-    @SmallTest
-    public void testNoteMobileRadioPowerStateLocked() {
-        long curr;
-        boolean update;
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.setOnBatteryInternal(true);
-
-        // Note mobile radio is on.
-        curr = 1000L * (clocks.realtime = clocks.uptime = 1001);
-        bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH, curr,
-                UID);
-
-        // Note mobile radio is still on.
-        curr = 1000L * (clocks.realtime = clocks.uptime = 2001);
-        update = bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                curr, UID);
-        assertFalse(
-                "noteMobileRadioPowerStateLocked should not request an update when the power "
-                        + "state does not change from HIGH.",
-                update);
-
-        // Note mobile radio is off.
-        curr = 1000L * (clocks.realtime = clocks.uptime = 3001);
-        update = bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_LOW,
-                curr, UID);
-        assertTrue(
-                "noteMobileRadioPowerStateLocked should request an update when the power state "
-                        + "changes from HIGH to LOW.",
-                update);
-
-        // Note mobile radio is still off.
-        curr = 1000L * (clocks.realtime = clocks.uptime = 4001);
-        update = bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_LOW,
-                curr, UID);
-        assertFalse(
-                "noteMobileRadioPowerStateLocked should not request an update when the power "
-                        + "state does not change from LOW.",
-                update);
-
-        // Note mobile radio is on.
-        curr = 1000L * (clocks.realtime = clocks.uptime = 5001);
-        update = bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                curr, UID);
-        assertFalse(
-                "noteMobileRadioPowerStateLocked should not request an update when the power "
-                        + "state changes from LOW to HIGH.",
-                update);
-    }
-
-    @SmallTest
-    public void testNoteMobileRadioPowerStateLocked_rateLimited() {
-        long curr;
-        boolean update;
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        final MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.setPowerProfile(mock(PowerProfile.class));
-
-        final int txLevelCount = CellSignalStrength.getNumSignalStrengthLevels();
-        final ModemActivityInfo mai = new ModemActivityInfo(0L, 0L, 0L, new int[txLevelCount], 0L);
-
-        final long rateLimit = bi.getMobileRadioPowerStateUpdateRateLimit();
-        if (rateLimit < 0) {
-            Log.w(TAG, "Skipping testNoteMobileRadioPowerStateLocked_rateLimited, rateLimit = "
-                    + rateLimit);
-            return;
-        }
-        bi.setOnBatteryInternal(true);
-
-        // Note mobile radio is on.
-        curr = 1000L * (clocks.realtime = clocks.uptime = 1001);
-        bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH, curr,
-                UID);
-
-        clocks.realtime = clocks.uptime = 2001;
-        mai.setTimestamp(clocks.realtime);
-        bi.noteModemControllerActivity(mai, POWER_DATA_UNAVAILABLE,
-                clocks.realtime, clocks.uptime, mNetworkStatsManager);
-
-        // Note mobile radio is off within the rate limit duration.
-        clocks.realtime = clocks.uptime = clocks.realtime + (long) (rateLimit * 0.7);
-        curr = 1000L * clocks.realtime;
-        update = bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_LOW,
-                curr, UID);
-        assertFalse(
-                "noteMobileRadioPowerStateLocked should not request an update when the power "
-                        + "state so soon after a noteModemControllerActivity",
-                update);
-
-        // Note mobile radio is on.
-        clocks.realtime = clocks.uptime = clocks.realtime + (long) (rateLimit * 0.7);
-        curr = 1000L * clocks.realtime;
-        bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH, curr,
-                UID);
-
-        // Note mobile radio is off much later
-        clocks.realtime = clocks.uptime = clocks.realtime + rateLimit;
-        curr = 1000L * clocks.realtime;
-        update = bi.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_LOW,
-                curr, UID);
-        assertTrue(
-                "noteMobileRadioPowerStateLocked should request an update when the power state "
-                        + "changes from HIGH to LOW much later after a "
-                        + "noteModemControllerActivity.",
-                update);
-    }
-
-    private void setFgState(int uid, boolean fgOn, MockBatteryStatsImpl bi) {
-        // Note that noteUidProcessStateLocked uses ActivityManager process states.
-        if (fgOn) {
-            bi.noteActivityResumedLocked(uid);
-            bi.noteUidProcessStateLocked(uid, ActivityManager.PROCESS_STATE_TOP);
-        } else {
-            bi.noteActivityPausedLocked(uid);
-            bi.noteUidProcessStateLocked(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY);
-        }
-    }
-
-    private void checkMeasuredCharge(String caseName, int uid1, long blame1, int uid2, long blame2,
-            long globalDoze, MockBatteryStatsImpl bi) {
-        final int bucket = EnergyConsumerStats.POWER_BUCKET_SCREEN_ON;
-
-        assertEquals("Wrong uid1 blame for Case " + caseName, blame1,
-                bi.getUidStatsLocked(uid1).getEnergyConsumptionUC(bucket));
-
-        assertEquals("Wrong uid2 blame for Case " + caseName, blame2,
-                bi.getUidStatsLocked(uid2).getEnergyConsumptionUC(bucket));
-
-        assertEquals("Wrong total blame for Case " + caseName, blame1 + blame2,
-                bi.getScreenOnEnergyConsumptionUC());
-
-        assertEquals("Wrong doze for Case " + caseName, globalDoze,
-                bi.getScreenDozeEnergyConsumptionUC());
-    }
-
-    private void checkCustomBatteryConsumption(String caseName,
-            long totalBlameA, long totalBlameB,
-            int uid1, long blame1A, long blame1B,
-            int uid2, long blame2A, long blame2B,
-            MockBatteryStatsImpl bi) {
-
-        final long[] actualTotal = bi.getCustomEnergyConsumerBatteryConsumptionUC();
-        final long[] actualUid1 =
-                bi.getUidStatsLocked(uid1).getCustomEnergyConsumerBatteryConsumptionUC();
-        final long[] actualUid2 =
-                bi.getUidStatsLocked(uid2).getCustomEnergyConsumerBatteryConsumptionUC();
-
-        assertNotNull(actualTotal);
-        assertNotNull(actualUid1);
-        assertNotNull(actualUid2);
-
-        assertEquals("Wrong total blame in bucket 0 for Case " + caseName, totalBlameA,
-                actualTotal[0]);
-
-        assertEquals("Wrong total blame in bucket 1 for Case " + caseName, totalBlameB,
-                actualTotal[1]);
-
-        assertEquals("Wrong uid1 blame in bucket 0 for Case " + caseName, blame1A, actualUid1[0]);
-
-        assertEquals("Wrong uid1 blame in bucket 1 for Case " + caseName, blame1B, actualUid1[1]);
-
-        assertEquals("Wrong uid2 blame in bucket 0 for Case " + caseName, blame2A, actualUid2[0]);
-
-        assertEquals("Wrong uid2 blame in bucket 1 for Case " + caseName, blame2B, actualUid2[1]);
-    }
-
-    private void checkScreenBrightnesses(long[] overallExpected, long[][] perDisplayExpected,
-            BatteryStatsImpl bi, long currentTimeMs) {
-        final int numDisplay = bi.getDisplayCount();
-        for (int bin = 0; bin < NUM_SCREEN_BRIGHTNESS_BINS; bin++) {
-            for (int display = 0; display < numDisplay; display++) {
-                assertEquals("Failure for display " + display + " screen brightness bin " + bin,
-                        perDisplayExpected[display][bin] * 1000,
-                        bi.getDisplayScreenBrightnessTime(display, bin, currentTimeMs * 1000));
-            }
-            assertEquals("Failure for overall screen brightness bin " + bin,
-                    overallExpected[bin] * 1000,
-                    bi.getScreenBrightnessTime(bin, currentTimeMs * 1000, STATS_SINCE_CHARGED));
-        }
-    }
-
-    private void checkPerStateActiveRadioDurations(long[][][] expectedDurationsMs,
-            long[][] expectedRxDurationsMs, long[][][] expectedTxDurationsMs,
-            BatteryStatsImpl bi, long currentTimeMs) {
-        for (int rat = 0; rat < expectedDurationsMs.length; rat++) {
-            final long[][] expectedRatDurationsMs = expectedDurationsMs[rat];
-            for (int freq = 0; freq < expectedRatDurationsMs.length; freq++) {
-                final long expectedRxDurationMs = expectedRxDurationsMs[rat][freq];
-
-                // Build a verbose fail message, just in case.
-                final StringBuilder rxFailSb = new StringBuilder();
-                rxFailSb.append("Wrong time in Rx state for RAT:");
-                rxFailSb.append(BatteryStats.RADIO_ACCESS_TECHNOLOGY_NAMES[rat]);
-                rxFailSb.append(", frequency:");
-                rxFailSb.append(ServiceState.frequencyRangeToString(freq));
-                assertEquals(rxFailSb.toString(), expectedRxDurationMs,
-                        bi.getActiveRxRadioDurationMs(rat, freq, currentTimeMs));
-
-                final long[] expectedFreqDurationsMs = expectedRatDurationsMs[freq];
-                for (int strength = 0; strength < expectedFreqDurationsMs.length; strength++) {
-                    final long expectedSignalStrengthDurationMs = expectedFreqDurationsMs[strength];
-                    final long expectedTxDurationMs = expectedTxDurationsMs[rat][freq][strength];
-                    final long actualDurationMs = bi.getActiveRadioDurationMs(rat, freq,
-                            strength, currentTimeMs);
-
-                    final StringBuilder failSb = new StringBuilder();
-                    failSb.append("Wrong time in state for RAT:");
-                    failSb.append(BatteryStats.RADIO_ACCESS_TECHNOLOGY_NAMES[rat]);
-                    failSb.append(", frequency:");
-                    failSb.append(ServiceState.frequencyRangeToString(freq));
-                    failSb.append(", strength:");
-                    failSb.append(strength);
-                    assertEquals(failSb.toString(), expectedSignalStrengthDurationMs,
-                            actualDurationMs);
-
-                    final StringBuilder txFailSb = new StringBuilder();
-                    txFailSb.append("Wrong time in Tx state for RAT:");
-                    txFailSb.append(BatteryStats.RADIO_ACCESS_TECHNOLOGY_NAMES[rat]);
-                    txFailSb.append(", frequency:");
-                    txFailSb.append(ServiceState.frequencyRangeToString(freq));
-                    txFailSb.append(", strength:");
-                    txFailSb.append(strength);
-                    assertEquals(txFailSb.toString(), expectedTxDurationMs,
-                            bi.getActiveTxRadioDurationMs(rat, freq, strength, currentTimeMs));
-                }
-            }
-        }
-    }
-
-    private class ModemAndBatteryState {
-        public long currentTimeMs = 100;
-        public boolean onBattery = false;
-        public boolean modemActive = false;
-        @Annotation.NetworkType
-        public int currentNetworkDataType = TelephonyManager.NETWORK_TYPE_UNKNOWN;
-        @BatteryStats.RadioAccessTechnology
-        public int currentRat = BatteryStats.RADIO_ACCESS_TECHNOLOGY_OTHER;
-        @AccessNetworkConstants.RadioAccessNetworkType
-        public int currentRadioAccessNetworkType = AccessNetworkConstants.AccessNetworkType.UNKNOWN;
-        @ServiceState.FrequencyRange
-        public int currentFrequencyRange = ServiceState.FREQUENCY_RANGE_UNKNOWN;
-        public SparseIntArray currentSignalStrengths = new SparseIntArray();
-        public ModemState modemState = ModemState.SLEEP;
-        public ModemActivityInfo modemActivityInfo;
-        public ActivityStatsTechSpecificInfo[] specificInfo;
-
-        private final MockBatteryStatsImpl mBsi;
-
-        ModemAndBatteryState(MockBatteryStatsImpl bsi, ModemActivityInfo mai,
-                ActivityStatsTechSpecificInfo[] astsi) {
-            mBsi = bsi;
-            modemActivityInfo = mai;
-            specificInfo = astsi;
-        }
-
-        void setOnBattery(boolean onBattery) {
-            this.onBattery = onBattery;
-            mBsi.updateTimeBasesLocked(onBattery, Display.STATE_OFF, currentTimeMs * 1000,
-                    currentTimeMs * 1000);
-            mBsi.setOnBatteryInternal(onBattery);
-            noteModemControllerActivity();
-        }
-
-        void setModemActive(boolean active) {
-            modemActive = active;
-            final int state = active ? DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH
-                    : DataConnectionRealTimeInfo.DC_POWER_STATE_LOW;
-            mBsi.noteMobileRadioPowerStateLocked(state, currentTimeMs * 1000_000L, UID);
-            noteModemControllerActivity();
-        }
-
-        void setRatType(@Annotation.NetworkType int dataType,
-                @BatteryStats.RadioAccessTechnology int rat,
-                @AccessNetworkConstants.RadioAccessNetworkType int halDataType) {
-            currentRadioAccessNetworkType = halDataType;
-            setRatType(dataType, rat);
-        }
-
-        void setRatType(@Annotation.NetworkType int dataType,
-                @BatteryStats.RadioAccessTechnology int rat) {
-            currentNetworkDataType = dataType;
-            currentRat = rat;
-            mBsi.notePhoneDataConnectionStateLocked(dataType, true, ServiceState.STATE_IN_SERVICE,
-                    currentFrequencyRange);
-        }
-
-        void setFrequencyRange(@ServiceState.FrequencyRange int frequency) {
-            currentFrequencyRange = frequency;
-            mBsi.notePhoneDataConnectionStateLocked(currentNetworkDataType, true,
-                    ServiceState.STATE_IN_SERVICE, frequency);
-        }
-
-        void setSignalStrength(@BatteryStats.RadioAccessTechnology int rat, int strength) {
-            currentSignalStrengths.put(rat, strength);
-            final int size = currentSignalStrengths.size();
-            final int newestGenSignalStrength = currentSignalStrengths.valueAt(size - 1);
-            mBsi.notePhoneSignalStrengthLocked(newestGenSignalStrength, currentSignalStrengths);
-        }
-
-        void setModemState(ModemState state) {
-            modemState = state;
-        }
-
-        ActivityStatsTechSpecificInfo getSpecificInfo(@BatteryStats.RadioAccessTechnology int rat,
-                @ServiceState.FrequencyRange int frequency) {
-            if (specificInfo == null) return null;
-            for (ActivityStatsTechSpecificInfo info : specificInfo) {
-                if (info.getRat() == rat && info.getFrequencyRange() == frequency) {
-                    return info;
-                }
-            }
-            return null;
-        }
-
-        void noteModemControllerActivity() {
-            if (modemActivityInfo == null) return;
-            modemActivityInfo.setTimestamp(currentTimeMs);
-            final ModemActivityInfo copy;
-            if (specificInfo == null) {
-                copy = new ModemActivityInfo(
-                        modemActivityInfo.getTimestampMillis(),
-                        modemActivityInfo.getSleepTimeMillis(),
-                        modemActivityInfo.getIdleTimeMillis(),
-                        modemActivityInfo.getTransmitTimeMillis().clone(),
-                        modemActivityInfo.getReceiveTimeMillis());
-            } else {
-                // Deep copy specificInfo
-                final ActivityStatsTechSpecificInfo[] infoCopies =
-                        new ActivityStatsTechSpecificInfo[specificInfo.length];
-                for (int i = 0; i < specificInfo.length; i++) {
-                    final ActivityStatsTechSpecificInfo info = specificInfo[i];
-                    infoCopies[i] = new ActivityStatsTechSpecificInfo(info.getRat(),
-                            info.getFrequencyRange(), info.getTransmitTimeMillis().clone(),
-                            (int) info.getReceiveTimeMillis());
-                }
-
-                copy = new ModemActivityInfo(
-                        modemActivityInfo.getTimestampMillis(),
-                        modemActivityInfo.getSleepTimeMillis(),
-                        modemActivityInfo.getIdleTimeMillis(),
-                        infoCopies);
-            }
-            mBsi.noteModemControllerActivity(copy, POWER_DATA_UNAVAILABLE,
-                    currentTimeMs, currentTimeMs, mNetworkStatsManager);
-        }
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsSamplingTimerTest.java b/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsSamplingTimerTest.java
deleted file mode 100644
index 784d673..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsSamplingTimerTest.java
+++ /dev/null
@@ -1,229 +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.server.power.stats;
-
-import android.os.BatteryStats;
-import android.os.Parcel;
-import android.os.SystemClock;
-
-import androidx.test.filters.SmallTest;
-
-import junit.framework.TestCase;
-
-import org.mockito.Mockito;
-
-public class BatteryStatsSamplingTimerTest extends TestCase {
-
-    @SmallTest
-    public void testSettingStalePreservesData() throws Exception {
-        final MockClock clocks = new MockClock();
-        final BatteryStatsImpl.SamplingTimer timer = new BatteryStatsImpl.SamplingTimer(clocks,
-                Mockito.mock(BatteryStatsImpl.TimeBase.class));
-
-        timer.onTimeStarted(100, 100, 100);
-
-        // First update is absorbed.
-        timer.update(10, 1, SystemClock.elapsedRealtime() * 1000);
-
-        timer.update(20, 2, SystemClock.elapsedRealtime() * 1000);
-
-        assertEquals(1, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(10, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
-
-        timer.endSample();
-
-        assertEquals(1, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(10, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
-
-        timer.onTimeStopped(200, 200, 200);
-
-        assertEquals(1, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(10, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
-    }
-
-    @SmallTest
-    public void testEndSampleAndContinueWhenTimeOrCountDecreases() throws Exception {
-        final MockClock clocks = new MockClock();
-        final BatteryStatsImpl.TimeBase timeBase = Mockito.mock(BatteryStatsImpl.TimeBase.class);
-        final BatteryStatsImpl.SamplingTimer timer = new BatteryStatsImpl.SamplingTimer(clocks,
-                timeBase);
-
-        // First once is absorbed.
-        timer.update(10, 1, SystemClock.elapsedRealtime() * 1000);
-
-        timer.add(10, 1);
-
-        assertEquals(0, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(0, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
-
-        // This is less than we currently have, so we will end the sample. Time isn't running, so
-        // nothing should happen, except that tracking will stop.
-        timer.update(0, 0, SystemClock.elapsedRealtime() * 1000);
-
-        // Start tracking again
-        timer.update(0, 0, SystemClock.elapsedRealtime() * 1000);
-
-        assertEquals(0, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(0, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
-
-        timer.onTimeStarted(100, 100, 100);
-
-        // This should add.
-        timer.add(100, 10);
-
-        assertEquals(100, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(10, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // This is less than we currently have, so we should end our sample.
-        timer.update(30, 3, SystemClock.elapsedRealtime() * 1000);
-
-        // Restart tracking
-        timer.update(30, 3, SystemClock.elapsedRealtime() * 1000);
-
-        timer.add(50, 5);
-
-        assertEquals(150, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(15, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        timer.onTimeStopped(200, 200, 200);
-
-        assertEquals(150, timer.getTotalTimeLocked(200, BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(15, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-    }
-
-    @SmallTest
-    public void testFirstUpdateIsAbsorbed() throws Exception {
-        final MockClock clocks = new MockClock();
-        final BatteryStatsImpl.TimeBase timeBase = Mockito.mock(BatteryStatsImpl.TimeBase.class);
-
-        BatteryStatsImpl.SamplingTimer timer = new BatteryStatsImpl.SamplingTimer(clocks, timeBase);
-
-        // This should be absorbed because it is our first update and we don't know what
-        // was being counted before.
-        timer.update(10, 1, SystemClock.elapsedRealtime() * 1000);
-
-        assertEquals(0, timer.getTotalTimeLocked(10, BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(0, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        timer = new BatteryStatsImpl.SamplingTimer(clocks, timeBase);
-        timer.onTimeStarted(100, 100, 100);
-
-        // This should be absorbed.
-        timer.update(10, 1, SystemClock.elapsedRealtime() * 1000);
-
-        assertEquals(0, timer.getTotalTimeLocked(100, BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(0, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // This should NOT be aborbed, since we've already done that.
-        timer.add(10, 1);
-
-        assertEquals(10, timer.getTotalTimeLocked(100, BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(1, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        timer.onTimeStopped(200, 200, 200);
-        timer.onTimeStarted(300, 300, 300);
-
-        // This should NOT be absorbed.
-        timer.add(10, 1);
-
-        assertEquals(20, timer.getTotalTimeLocked(300, BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(2, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-    }
-
-    @SmallTest
-    public void testSampleTimerSummaryParceling() throws Exception {
-        final MockClock clocks = new MockClock();
-        clocks.realtime = 0;
-        clocks.uptime = 0;
-
-        final BatteryStatsImpl.TimeBase timeBase = new BatteryStatsImpl.TimeBase();
-        timeBase.init(clocks.uptimeMillis(), clocks.elapsedRealtime());
-
-        BatteryStatsImpl.SamplingTimer timer = new BatteryStatsImpl.SamplingTimer(clocks, timeBase);
-
-        // Start running on battery.
-        // (Note that the wrong units are used in this class. setRunning is actually supposed to
-        // take us, not the ms that clocks uses.)
-        timeBase.setRunning(true, clocks.uptimeMillis(), clocks.elapsedRealtime());
-
-        // The first update on battery consumes the values as a way of starting cleanly.
-        timer.add(10, 1);
-
-        timer.add(10, 1);
-
-        clocks.realtime = 20;
-        clocks.uptime = 20;
-
-        assertEquals(10, timer.getTotalTimeLocked(clocks.elapsedRealtime(),
-                BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(1, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // Grab a summary parcel while on battery.
-        final Parcel onBatterySummaryParcel = Parcel.obtain();
-        timer.writeSummaryFromParcelLocked(onBatterySummaryParcel, clocks.elapsedRealtime() * 1000);
-        onBatterySummaryParcel.setDataPosition(0);
-
-        // Stop running on battery.
-        timeBase.setRunning(false, clocks.uptimeMillis(), clocks.elapsedRealtime());
-
-        assertEquals(10, timer.getTotalTimeLocked(clocks.elapsedRealtime(),
-                BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(1, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // Grab a summary parcel while not on battery.
-        final Parcel offBatterySummaryParcel = Parcel.obtain();
-        timer.writeSummaryFromParcelLocked(offBatterySummaryParcel,
-                clocks.elapsedRealtime() * 1000);
-        offBatterySummaryParcel.setDataPosition(0);
-
-        // Set the timebase running again. That way any issues with tracking reported values
-        // get tested when we unparcel the timers below.
-        timeBase.setRunning(true, clocks.uptimeMillis(), clocks.elapsedRealtime());
-
-        // Read the on battery summary from the parcel.
-        BatteryStatsImpl.SamplingTimer unparceledOnBatteryTimer =
-                new BatteryStatsImpl.SamplingTimer(clocks, timeBase);
-        unparceledOnBatteryTimer.readSummaryFromParcelLocked(onBatterySummaryParcel);
-
-        assertEquals(10, unparceledOnBatteryTimer.getTotalTimeLocked(0,
-                BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(1, unparceledOnBatteryTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // Read the off battery summary from the parcel.
-        BatteryStatsImpl.SamplingTimer unparceledOffBatteryTimer =
-                new BatteryStatsImpl.SamplingTimer(clocks, timeBase);
-        unparceledOffBatteryTimer.readSummaryFromParcelLocked(offBatterySummaryParcel);
-
-        assertEquals(10, unparceledOffBatteryTimer.getTotalTimeLocked(0,
-                BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(1, unparceledOffBatteryTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // Now, just like with a fresh timer, the first update should be absorbed to account for
-        // data being collected when we weren't recording.
-        unparceledOnBatteryTimer.update(10, 10, SystemClock.elapsedRealtime() * 1000);
-
-        assertEquals(10, unparceledOnBatteryTimer.getTotalTimeLocked(0,
-                BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(1, unparceledOnBatteryTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        unparceledOffBatteryTimer.update(10, 10, SystemClock.elapsedRealtime() * 1000);
-
-        assertEquals(10, unparceledOffBatteryTimer.getTotalTimeLocked(0,
-                BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(1, unparceledOffBatteryTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsSensorTest.java b/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsSensorTest.java
deleted file mode 100644
index b8f0ce3..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsSensorTest.java
+++ /dev/null
@@ -1,523 +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.server.power.stats;
-
-import android.app.ActivityManager;
-import android.os.BatteryStats;
-import android.view.Display;
-
-import androidx.test.filters.SmallTest;
-
-import junit.framework.TestCase;
-
-/**
- * Test BatteryStatsImpl Sensor Timers.
- */
-public class BatteryStatsSensorTest extends TestCase {
-
-    private static final int UID = 10500;
-    private static final int UID_2 = 10501; // second uid for testing pool usage
-    private static final int SENSOR_ID = -10000;
-
-    @SmallTest
-    public void testSensorStartStop() throws Exception {
-        final MockClock clocks = new MockClock();
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.mForceOnBattery = true;
-        clocks.realtime = 100;
-        clocks.uptime = 100;
-        bi.getOnBatteryTimeBase().setRunning(true, 100_000, 100_000);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_CACHED_EMPTY);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
-        bi.noteStartSensorLocked(UID, SENSOR_ID);
-        clocks.realtime = 200;
-        clocks.uptime = 200;
-        bi.noteStopSensorLocked(UID, SENSOR_ID);
-
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_RECEIVER);
-        bi.noteStartSensorLocked(UID, SENSOR_ID);
-        bi.noteStartSensorLocked(UID, SENSOR_ID);
-        clocks.realtime = 400;
-        clocks.uptime = 400;
-        bi.noteStopSensorLocked(UID, SENSOR_ID);
-        bi.noteStopSensorLocked(UID, SENSOR_ID);
-
-        BatteryStats.Timer sensorTimer = bi.getUidStats().get(UID).getSensorStats()
-                .get(SENSOR_ID).getSensorTime();
-        BatteryStats.Timer sensorBgTimer = bi.getUidStats().get(UID).getSensorStats()
-                .get(SENSOR_ID).getSensorBackgroundTime();
-
-        assertEquals(2, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(300_000, sensorTimer.getTotalTimeLocked(
-                clocks.realtime * 1000, BatteryStats.STATS_SINCE_CHARGED));
-
-        assertEquals(1, sensorBgTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(200_000, sensorBgTimer.getTotalTimeLocked(
-                clocks.realtime * 1000, BatteryStats.STATS_SINCE_CHARGED));
-    }
-
-    @SmallTest
-    public void testCountingWhileOffBattery() throws Exception {
-        final MockClock clocks = new MockClock();
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        long curr = 0; // realtime in us
-
-        // Plugged-in (battery=off, sensor=off)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 100);
-        bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr);
-
-
-        // Start sensor (battery=off, sensor=on)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 200);
-        bi.noteStartSensorLocked(UID, SENSOR_ID);
-
-        // Test situation
-        curr = 1000 * (clocks.realtime = clocks.uptime = 215);
-        BatteryStats.Timer sensorTimer = bi.getUidStats().get(UID).getSensorStats()
-                .get(SENSOR_ID).getSensorTime();
-        assertEquals(0,
-                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(0, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // Stop sensor (battery=off, sensor=off)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 550);
-        bi.noteStopSensorLocked(UID, SENSOR_ID);
-
-        // Test situation
-        curr = 1000 * (clocks.realtime = clocks.uptime = 678);
-        sensorTimer = bi.getUidStats().get(UID).getSensorStats()
-                .get(SENSOR_ID).getSensorTime();
-        assertEquals(0,
-                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(0, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-    }
-
-    @SmallTest
-    public void testCountingWhileOnBattery() throws Exception {
-        final MockClock clocks = new MockClock();
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        long curr = 0; // realtime in us
-
-        // Unplugged (battery=on, sensor=off)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 100);
-        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr);
-
-        // Start sensor (battery=on, sensor=on)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 200);
-        bi.noteStartSensorLocked(UID, SENSOR_ID);
-
-        // Test situation
-        curr = 1000 * (clocks.realtime = clocks.uptime = 215);
-        BatteryStats.Timer sensorTimer = bi.getUidStats().get(UID).getSensorStats()
-                .get(SENSOR_ID).getSensorTime();
-        assertEquals((215-200)*1000,
-                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(1, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // Stop sensor (battery=on, sensor=off)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 550);
-        bi.noteStopSensorLocked(UID, SENSOR_ID);
-
-        // Test situation
-        curr = 1000 * (clocks.realtime = clocks.uptime = 678);
-        sensorTimer = bi.getUidStats().get(UID).getSensorStats()
-                .get(SENSOR_ID).getSensorTime();
-        assertEquals((550-200)*1000,
-                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(1, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-    }
-
-    @SmallTest
-    public void testBatteryStatusOnToOff() throws Exception {
-        final MockClock clocks = new MockClock();
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        long curr = 0; // realtime in us
-
-        // On battery (battery=on, sensor=off)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 100);
-        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
-
-        // Start sensor (battery=on, sensor=on)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 202);
-        bi.noteStartSensorLocked(UID, SENSOR_ID);
-
-        // Off battery (battery=off, sensor=on)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 305);
-        bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr);
-
-        // Stop sensor while off battery (battery=off, sensor=off)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 409);
-        bi.noteStopSensorLocked(UID, SENSOR_ID);
-
-        // Start sensor while off battery (battery=off, sensor=on)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 519);
-        bi.noteStartSensorLocked(UID, SENSOR_ID);
-
-        // Test while still running (but off battery)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 657);
-        BatteryStats.Timer sensorTimer = bi.getUidStats().get(UID).getSensorStats()
-                .get(SENSOR_ID).getSensorTime();
-        assertEquals(1, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals((305-202)*1000,
-                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
-
-        // Now stop running (still off battery) (battery=off, sensor=off)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 693);
-        bi.noteStopSensorLocked(UID, SENSOR_ID);
-
-        sensorTimer = bi.getUidStats().get(UID).getSensorStats()
-                .get(SENSOR_ID).getSensorTime();
-        assertEquals(1, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals((305-202)*1000,
-                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
-    }
-
-    @SmallTest
-    public void testBatteryStatusOffToOn() throws Exception {
-        final MockClock clocks = new MockClock();
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        long curr = 0; // realtime in us
-
-        // Plugged-in (battery=off, sensor=off)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 100);
-        bi.updateTimeBasesLocked(false, Display.STATE_ON, curr, curr);
-
-        // Start sensor (battery=off, sensor=on)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 200);
-        bi.noteStartSensorLocked(UID, SENSOR_ID);
-
-        // Test situation
-        curr = 1000 * (clocks.realtime = clocks.uptime = 215);
-        BatteryStats.Timer sensorTimer = bi.getUidStats().get(UID).getSensorStats()
-                .get(SENSOR_ID).getSensorTime();
-        // Time was entirely off battery, so time=0.
-        assertEquals(0,
-                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
-        // Acquired off battery, so count=0.
-        assertEquals(0, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // Unplug (battery=on, sensor=on)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 305);
-        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr);
-
-        //Test situation
-        curr = 1000 * (clocks.realtime = clocks.uptime = 410);
-        sensorTimer = bi.getUidStats().get(UID).getSensorStats().get(SENSOR_ID).getSensorTime();
-        // Part of the time it was on battery.
-        assertEquals((410-305)*1000,
-                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
-        // Only ever acquired off battery, so count=0.
-        assertEquals(0, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // Stop sensor (battery=on, sensor=off)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 550);
-        bi.noteStopSensorLocked(UID, SENSOR_ID);
-
-        // Test situation
-        curr = 1000 * (clocks.realtime = clocks.uptime = 678);
-        sensorTimer = bi.getUidStats().get(UID).getSensorStats().get(SENSOR_ID).getSensorTime();
-        // Part of the time it was on battery.
-        assertEquals((550-305)*1000,
-                sensorTimer.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
-        // Only ever acquired off battery, so count=0.
-        assertEquals(0, sensorTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-    }
-
-    @SmallTest
-    public void testPooledBackgroundUsage() throws Exception {
-        final MockClock clocks = new MockClock();
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.mForceOnBattery = true;
-        long curr = 0; // realtime in us
-        // Entire test is on-battery
-        curr = 1000 * (clocks.realtime = clocks.uptime = 1000);
-        bi.updateTimeBasesLocked(true, Display.STATE_ON, curr, curr);
-
-        // See below for a diagram of events.
-
-        // UID in foreground
-        curr = 1000 * (clocks.realtime = clocks.uptime = 2002);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
-
-        // UID starts the sensor (foreground)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 3004);
-        bi.noteStartSensorLocked(UID, SENSOR_ID);
-
-        // UID_2 in background
-        curr = 1000 * (clocks.realtime = clocks.uptime = 4008);
-        bi.noteUidProcessStateLocked(UID_2, ActivityManager.PROCESS_STATE_RECEIVER); // background
-
-        // UID_2 starts the sensor (background)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 5016);
-        bi.noteStartSensorLocked(UID_2, SENSOR_ID);
-
-        // UID enters background
-        curr = 1000 * (clocks.realtime = clocks.uptime = 6032);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
-
-        // UID enters background again (from a different background state)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 7004);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_LAST_ACTIVITY);
-
-        // UID_2 stops the sensor (background), then starts it again, then stops again
-        curr = 1000 * (clocks.realtime = clocks.uptime = 8064);
-        bi.noteStopSensorLocked(UID_2, SENSOR_ID);
-        curr = 1000 * (clocks.realtime = clocks.uptime = 9128);
-        bi.noteStartSensorLocked(UID_2, SENSOR_ID);
-        curr = 1000 * (clocks.realtime = clocks.uptime = 10256);
-        bi.noteStopSensorLocked(UID_2, SENSOR_ID);
-
-        // UID re-enters foreground
-        curr = 1000 * (clocks.realtime = clocks.uptime = 11512);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
-
-        // UID starts the sensor a second time (foreground)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 12000);
-        bi.noteStartSensorLocked(UID, SENSOR_ID);
-
-        // UID re-enters background
-        curr = 1000 * (clocks.realtime = clocks.uptime = 13002);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
-
-        // UID stops the sensor completely (background)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 14004);
-        bi.noteStopSensorLocked(UID, SENSOR_ID);
-        curr = 1000 * (clocks.realtime = clocks.uptime = 14024);
-        bi.noteStopSensorLocked(UID, SENSOR_ID);
-
-        // UID starts the sensor anew (background)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 15010);
-        bi.noteStartSensorLocked(UID, SENSOR_ID);
-
-        // UID stops the sensor (background)
-        curr = 1000 * (clocks.realtime = clocks.uptime = 16020);
-        bi.noteStopSensorLocked(UID, SENSOR_ID);
-
-//      Summary
-//        UID
-//        foreground: 2002---6032,              11512---13002
-//        background:        6032---------------11512,  13002--------------------------
-//        sensor running: 3004-----------------------------14024, 15010-16020
-//
-//        UID2
-//        foreground:
-//        background:       4008-------------------------------------------------------
-//        sensor running:    5016--8064, 9128-10256
-
-        BatteryStats.Timer timer1 = bi.getUidStats().get(UID).getSensorStats()
-                .get(SENSOR_ID).getSensorTime();
-        BatteryStats.Timer bgTimer1 = bi.getUidStats().get(UID).getSensorStats()
-                .get(SENSOR_ID).getSensorBackgroundTime();
-
-        BatteryStats.Timer timer2 = bi.getUidStats().get(UID_2).getSensorStats()
-                .get(SENSOR_ID).getSensorTime();
-        BatteryStats.Timer bgTimer2 = bi.getUidStats().get(UID_2).getSensorStats()
-                .get(SENSOR_ID).getSensorBackgroundTime();
-
-        // Expected values
-        long expActualTime1 = (14024 - 3004) + (16020 - 15010);
-        long expBgTime1 = (11512 - 6032) + (14024 - 13002) + (16020 - 15010);
-
-        long expActualTime2 = (8064 - 5016) + (10256 - 9128);
-        long expBgTime2 = (8064 - 5016) + (10256 - 9128);
-
-        long expBlamedTime1 = (5016 - 3004) + (8064 - 5016)/2 + (9128 - 8064) + (10256 - 9128)/2
-                + (14024 - 10256) + (16020 - 15010);
-        long expBlamedTime2 = (8064 - 5016)/2 + (10256 - 9128)/2;
-
-        // Test: UID - blamed time
-        assertEquals(expBlamedTime1 * 1000,
-                timer1.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
-        // Test: UID - actual time
-        assertEquals(expActualTime1 * 1000,
-                timer1.getTotalDurationMsLocked(clocks.realtime) * 1000 );
-        // Test: UID - background time
-        // bg timer ignores pools, so both totalTime and totalDuration should give the same result
-        assertEquals(expBgTime1 * 1000,
-                bgTimer1.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(expBgTime1 * 1000,
-                bgTimer1.getTotalDurationMsLocked(clocks.realtime) * 1000 );
-        // Test: UID - count
-        assertEquals(2, timer1.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        // Test: UID - background count
-        assertEquals(1, bgTimer1.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // Test: UID_2 - blamed time
-        assertEquals(expBlamedTime2 * 1000,
-                timer2.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
-        // Test: UID_2 - actual time
-        assertEquals(expActualTime2 * 1000,
-                timer2.getTotalDurationMsLocked(clocks.realtime) * 1000);
-        // Test: UID_2 - background time
-        // bg timer ignores pools, so both totalTime and totalDuration should give the same result
-        assertEquals(expBgTime2 * 1000,
-                bgTimer2.getTotalTimeLocked(curr, BatteryStats.STATS_SINCE_CHARGED));
-        assertEquals(expBgTime2 * 1000,
-                bgTimer2.getTotalDurationMsLocked(clocks.realtime) * 1000 );
-        // Test: UID_2 - count
-        assertEquals(2, timer2.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        // Test: UID_2 - background count
-        assertEquals(2, bgTimer2.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-    }
-
-    @SmallTest
-    public void testSensorReset() throws Exception {
-        final MockClock clocks = new MockClock();
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        bi.mForceOnBattery = true;
-        clocks.realtime = 100;
-        clocks.uptime = 100;
-        bi.getOnBatteryTimeBase().setRunning(true, 100_000, 100_000);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_RECEIVER);
-
-        clocks.realtime += 100;
-        clocks.uptime += 100;
-
-        bi.noteStartSensorLocked(UID, SENSOR_ID);
-
-        clocks.realtime += 100;
-        clocks.uptime += 100;
-
-        // The sensor is started and the timer has been created.
-        final BatteryStats.Uid uid = bi.getUidStats().get(UID);
-        assertNotNull(uid);
-
-        BatteryStats.Uid.Sensor sensor = uid.getSensorStats().get(SENSOR_ID);
-        assertNotNull(sensor);
-        assertNotNull(sensor.getSensorTime());
-        assertNotNull(sensor.getSensorBackgroundTime());
-
-        // Reset the stats. Since the sensor is still running, we should still see the timer
-        bi.getUidStatsLocked(UID).reset(clocks.uptime * 1000, clocks.realtime * 1000, 0);
-
-        sensor = uid.getSensorStats().get(SENSOR_ID);
-        assertNotNull(sensor);
-        assertNotNull(sensor.getSensorTime());
-        assertNotNull(sensor.getSensorBackgroundTime());
-
-        bi.noteStopSensorLocked(UID, SENSOR_ID);
-
-        // Now the sensor timer has stopped so this reset should also take out the sensor.
-        bi.getUidStatsLocked(UID).reset(clocks.uptime * 1000, clocks.realtime * 1000, 0);
-
-        sensor = uid.getSensorStats().get(SENSOR_ID);
-        assertNull(sensor);
-    }
-
-    @SmallTest
-    public void testSensorResetTimes() throws Exception {
-        final MockClock clocks = new MockClock();
-        MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks);
-        final int which = BatteryStats.STATS_SINCE_CHARGED;
-        bi.mForceOnBattery = true;
-        clocks.realtime = 100; // in ms
-        clocks.uptime = 100; // in ms
-
-        // TimeBases are on for some time.
-        BatteryStatsImpl.TimeBase timeBase = bi.getOnBatteryTimeBase();
-        BatteryStatsImpl.TimeBase bgTimeBase = bi.getOnBatteryBackgroundTimeBase(UID);
-        timeBase.setRunning(true, clocks.uptime * 1000, clocks.realtime * 1000);
-        bgTimeBase.setRunning(true, clocks.uptime * 1000, clocks.realtime * 1000);
-        bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
-
-        clocks.realtime += 100;
-        clocks.uptime += 100;
-
-        // TimeBases are turned off
-        timeBase.setRunning(false, clocks.uptime * 1000, clocks.realtime * 1000);
-        bgTimeBase.setRunning(false, clocks.uptime * 1000, clocks.realtime * 1000);
-
-        clocks.realtime += 100;
-        clocks.uptime += 100;
-
-        // Timer is turned on
-        bi.noteStartSensorLocked(UID, SENSOR_ID);
-
-        clocks.realtime += 100;
-        clocks.uptime += 100;
-
-        // Timebase was off so times are all 0.
-        BatteryStats.Uid.Sensor sensor = bi.getUidStats().get(UID).getSensorStats().get(SENSOR_ID);
-        BatteryStats.Timer timer = sensor.getSensorTime();
-        BatteryStats.Timer bgTimer = sensor.getSensorBackgroundTime();
-        assertEquals(0, timer.getTotalTimeLocked(1000*clocks.realtime, which));
-        assertEquals(0, timer.getTotalDurationMsLocked(clocks.realtime));
-        assertEquals(0, bgTimer.getTotalTimeLocked(1000*clocks.realtime, which));
-        assertEquals(0, bgTimer.getTotalDurationMsLocked(clocks.realtime));
-
-        clocks.realtime += 100;
-        clocks.uptime += 100;
-
-        // Reset the stats. Since the sensor is still running, we should still see the timer
-        // but still with 0 times.
-        bi.getUidStatsLocked(UID).reset(clocks.uptime * 1000, clocks.realtime * 1000, 0);
-        assertEquals(0, timer.getTotalTimeLocked(1000*clocks.realtime, which));
-        assertEquals(0, timer.getTotalDurationMsLocked(clocks.realtime));
-        assertEquals(0, bgTimer.getTotalTimeLocked(1000*clocks.realtime, which));
-        assertEquals(0, bgTimer.getTotalDurationMsLocked(clocks.realtime));
-
-        clocks.realtime += 100;
-        clocks.uptime += 100;
-
-        // Now stop the timer. The times should still be 0.
-        bi.noteStopSensorLocked(UID, SENSOR_ID);
-        assertEquals(0, timer.getTotalTimeLocked(1000*clocks.realtime, which));
-        assertEquals(0, timer.getTotalDurationMsLocked(clocks.realtime));
-        assertEquals(0, bgTimer.getTotalTimeLocked(1000*clocks.realtime, which));
-        assertEquals(0, bgTimer.getTotalDurationMsLocked(clocks.realtime));
-
-        // Now repeat with the TimeBases turned on the entire time.
-        timeBase.setRunning(true, clocks.uptime * 1000, clocks.realtime * 1000);
-        bgTimeBase.setRunning(true, clocks.uptime * 1000, clocks.realtime * 1000);
-        clocks.realtime += 100;
-        clocks.uptime += 100;
-
-        // Timer is turned on
-        bi.noteStartSensorLocked(UID, SENSOR_ID);
-
-        clocks.realtime += 111;
-        clocks.uptime += 111;
-
-        // Timebase and timer was on so times have increased.
-        assertEquals(111_000, timer.getTotalTimeLocked(1000*clocks.realtime, which));
-        assertEquals(111, timer.getTotalDurationMsLocked(clocks.realtime));
-        assertEquals(111_000, bgTimer.getTotalTimeLocked(1000*clocks.realtime, which));
-        assertEquals(111, bgTimer.getTotalDurationMsLocked(clocks.realtime));
-
-        clocks.realtime += 100;
-        clocks.uptime += 100;
-
-        // Reset the stats. Since the sensor is still running, we should still see the timer
-        // but with 0 times.
-        bi.getUidStatsLocked(UID).reset(clocks.uptime * 1000, clocks.realtime * 1000, 0);
-        assertEquals(0, timer.getTotalTimeLocked(1000*clocks.realtime, which));
-        assertEquals(0, timer.getTotalDurationMsLocked(clocks.realtime));
-        assertEquals(0, bgTimer.getTotalTimeLocked(1000*clocks.realtime, which));
-        assertEquals(0, bgTimer.getTotalDurationMsLocked(clocks.realtime));
-
-        clocks.realtime += 112;
-        clocks.uptime += 112;
-
-        // Now stop the timer. The times should have increased since the timebase was on.
-        bi.noteStopSensorLocked(UID, SENSOR_ID);
-        assertEquals(112_000, timer.getTotalTimeLocked(1000*clocks.realtime, which));
-        assertEquals(112, timer.getTotalDurationMsLocked(clocks.realtime));
-        assertEquals(112_000, bgTimer.getTotalTimeLocked(1000*clocks.realtime, which));
-        assertEquals(112, bgTimer.getTotalDurationMsLocked(clocks.realtime));
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsStopwatchTimerTest.java b/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsStopwatchTimerTest.java
deleted file mode 100644
index fcae42a..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsStopwatchTimerTest.java
+++ /dev/null
@@ -1,148 +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.server.power.stats;
-
-import android.os.BatteryStats;
-
-import androidx.test.filters.SmallTest;
-
-import junit.framework.TestCase;
-
-/**
- * Test BatteryStatsImpl.StopwatchTimer.
- */
-public class BatteryStatsStopwatchTimerTest extends TestCase {
-
-    // Primarily testing previous bug that incremented count when timeBase was off and bug that gave
-    // negative values of count.
-    @SmallTest
-    public void testCount() throws Exception {
-        final MockClock clocks = new MockClock(); // holds realtime and uptime in ms
-        final BatteryStatsImpl.TimeBase timeBase = new BatteryStatsImpl.TimeBase();
-        timeBase.init(clocks.uptimeMillis(), clocks.elapsedRealtime());
-        final BatteryStatsImpl.StopwatchTimer timer = new BatteryStatsImpl.StopwatchTimer(clocks,
-                null, BatteryStats.SENSOR, null, timeBase);
-        int expectedCount = 0;
-
-        // for timeBase off tests
-        timeBase.setRunning(false, 1000 * clocks.realtime, 1000 * clocks.realtime);
-
-        // timeBase off, start, stop
-        timer.startRunningLocked(updateTime(clocks, 100)); // start
-        // Used to fail due to b/36730213 increasing count.
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        timer.startRunningLocked(updateTime(clocks, 110)); // start
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        timer.stopRunningLocked(updateTime(clocks, 120)); // stop
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        timer.stopRunningLocked(updateTime(clocks, 130)); // stop
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // timeBase off, start and immediately stop
-        timer.startRunningLocked(updateTime(clocks, 200)); // start
-        timer.stopRunningLocked(updateTime(clocks, 200)); // stop
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // timeBase off, start, reset, stop
-        timer.startRunningLocked(updateTime(clocks, 300)); // start
-        updateTime(clocks, 310);
-        timeBase.init(clocks.uptimeMillis(), clocks.elapsedRealtime());
-        timer.reset(false);
-        expectedCount = 0; // count will be reset by reset()
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        timer.stopRunningLocked(updateTime(clocks, 350)); // stop
-        // Used to fail due to b/30099724 giving -1.
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // timeBase off, start and immediately reset, stop
-        timer.startRunningLocked(updateTime(clocks, 400)); // start
-        timer.reset(false);
-        expectedCount = 0; // count will be reset by reset()
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        timer.stopRunningLocked(updateTime(clocks, 450)); // stop
-        // Used to fail due to b/30099724 giving -1.
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-
-        // for timeBase on tests
-        updateTime(clocks, 2000);
-        timeBase.setRunning(true, 1000 * clocks.realtime, 1000 * clocks.realtime);
-        assertFalse(timer.isRunningLocked());
-
-        // timeBase on, start, stop
-        timer.startRunningLocked(updateTime(clocks, 2100)); // start
-        expectedCount++;
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        timer.startRunningLocked(updateTime(clocks, 2110)); // start
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        timer.stopRunningLocked(updateTime(clocks, 2120)); // stop
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        timer.stopRunningLocked(updateTime(clocks, 2130)); // stop
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // timeBase on, start and immediately stop
-        timer.startRunningLocked(updateTime(clocks, 2200)); // start
-        timer.stopRunningLocked(updateTime(clocks, 2200)); // stop
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // timeBase on, start, reset, stop
-        timer.startRunningLocked(updateTime(clocks, 2300)); // start
-        updateTime(clocks, 2310);
-        timeBase.init(clocks.uptimeMillis(), clocks.elapsedRealtime());
-        timer.reset(false);
-        expectedCount = 0; // count will be reset by reset()
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        timer.stopRunningLocked(updateTime(clocks, 2350)); // stop
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // timeBase on, start and immediately reset, stop
-        timer.startRunningLocked(updateTime(clocks, 2400)); // start
-        timer.reset(false);
-        expectedCount = 0; // count will be reset by reset()
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        timer.stopRunningLocked(updateTime(clocks, 2450)); // stop
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-
-        // change timeBase tests
-        // timeBase off, start
-        updateTime(clocks, 3000);
-        timeBase.setRunning(false, 1000 * clocks.realtime, 1000 * clocks.realtime);
-        timer.startRunningLocked(updateTime(clocks, 3100)); // start
-        // Used to fail due to b/36730213 increasing count.
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        // timeBase on, stop
-        updateTime(clocks, 3200);
-        timeBase.setRunning(true, 1000 * clocks.realtime, 1000 * clocks.realtime);
-        timer.stopRunningLocked(updateTime(clocks, 3300)); // stop
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-
-        // timeBase on, start
-        timer.startRunningLocked(updateTime(clocks, 3400)); // start
-        expectedCount++;
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-        // timeBase off, stop
-        updateTime(clocks, 3500);
-        timeBase.setRunning(false, 1000 * clocks.realtime, 1000 * clocks.realtime);
-        timer.stopRunningLocked(updateTime(clocks, 3600)); // stop
-        assertEquals(expectedCount, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
-    }
-
-    private static long updateTime(MockClock clocks, long time) {
-        return clocks.realtime = clocks.uptime = time;
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsTests.java b/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsTests.java
deleted file mode 100644
index 48290e5..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsTests.java
+++ /dev/null
@@ -1,72 +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.server.power.stats;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
-        AmbientDisplayPowerCalculatorTest.class,
-        AudioPowerCalculatorTest.class,
-        BatteryChargeCalculatorTest.class,
-        BatteryExternalStatsWorkerTest.class,
-        BatteryStatsCpuTimesTest.class,
-        BatteryStatsBackgroundStatsTest.class,
-        BatteryStatsBinderCallStatsTest.class,
-        BatteryStatsCounterTest.class,
-        BatteryStatsDualTimerTest.class,
-        BatteryStatsDurationTimerTest.class,
-        BatteryStatsHistoryIteratorTest.class,
-        BatteryStatsHistoryTest.class,
-        BatteryStatsImplTest.class,
-        BatteryStatsManagerTest.class,
-        BatteryStatsNoteTest.class,
-        BatteryStatsSamplingTimerTest.class,
-        BatteryStatsSensorTest.class,
-        BatteryStatsServTest.class,
-        BatteryStatsStopwatchTimerTest.class,
-        BatteryStatsTimeBaseTest.class,
-        BatteryStatsTimerTest.class,
-        BatteryUsageStatsProviderTest.class,
-        BatteryUsageStatsTest.class,
-        BatteryUsageStatsStoreTest.class,
-        BatteryStatsUserLifecycleTests.class,
-        BluetoothPowerCalculatorTest.class,
-        BstatsCpuTimesValidationTest.class,
-        CameraPowerCalculatorTest.class,
-        CpuPowerCalculatorTest.class,
-        CustomEnergyConsumerPowerCalculatorTest.class,
-        FlashlightPowerCalculatorTest.class,
-        GnssPowerCalculatorTest.class,
-        IdlePowerCalculatorTest.class,
-        KernelWakelockReaderTest.class,
-        LongSamplingCounterTest.class,
-        LongSamplingCounterArrayTest.class,
-        EnergyConsumerSnapshotTest.class,
-        MobileRadioPowerCalculatorTest.class,
-        ScreenPowerCalculatorTest.class,
-        SensorPowerCalculatorTest.class,
-        SystemServerCpuThreadReaderTest.class,
-        SystemServicePowerCalculatorTest.class,
-        UserPowerCalculatorTest.class,
-        VideoPowerCalculatorTest.class,
-        WakelockPowerCalculatorTest.class,
-        WifiPowerCalculatorTest.class,
-})
-public class BatteryStatsTests {
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsUserLifecycleTests.java b/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsUserLifecycleTests.java
deleted file mode 100644
index b27ba88..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsUserLifecycleTests.java
+++ /dev/null
@@ -1,173 +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.server.power.stats;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.assumeTrue;
-
-import android.app.ActivityManager;
-import android.app.IActivityManager;
-import android.app.IStopUserCallback;
-import android.content.Context;
-import android.content.pm.UserInfo;
-import android.os.RemoteException;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.support.test.uiautomator.UiDevice;
-import android.util.ArraySet;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.filters.LargeTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-@LargeTest
-@RunWith(AndroidJUnit4.class)
-public class BatteryStatsUserLifecycleTests {
-
-    private static final long POLL_INTERVAL_MS = 500;
-    private static final long USER_REMOVE_TIMEOUT_MS = 5_000;
-    private static final long STOP_USER_TIMEOUT_MS = 20_000;
-    private static final long USER_UIDS_REMOVE_TIMEOUT_MS = 20_000;
-    private static final long BATTERYSTATS_POLLING_TIMEOUT_MS = 5_000;
-
-    private static final String CPU_DATA_TAG = "cpu";
-    private static final String CPU_FREQ_DATA_TAG = "ctf";
-
-    private int mTestUserId = UserHandle.USER_NULL;
-    private Context mContext;
-    private UserManager mUm;
-    private IActivityManager mIam;
-
-    @BeforeClass
-    public static void setUpOnce() {
-        assumeTrue(UserManager.getMaxSupportedUsers() > 1);
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        mContext = InstrumentationRegistry.getTargetContext();
-        mUm = UserManager.get(mContext);
-        mIam = ActivityManager.getService();
-        final UserInfo user = mUm.createUser("Test_user_" + System.currentTimeMillis() / 1000, 0);
-        assertNotNull("Unable to create test user", user);
-        mTestUserId = user.id;
-        batteryOnScreenOff();
-    }
-
-    @Test
-    public void testNoCpuDataForRemovedUser() throws Exception {
-        mIam.startUserInBackground(mTestUserId);
-        waitUntilTrue("No uids for started user " + mTestUserId,
-                () -> getNumberOfUidsInBatteryStats() > 0, BATTERYSTATS_POLLING_TIMEOUT_MS);
-
-        final boolean[] userStopped = new boolean[1];
-        CountDownLatch stopUserLatch = new CountDownLatch(1);
-        mIam.stopUser(mTestUserId, true, new IStopUserCallback.Stub() {
-            @Override
-            public void userStopped(int userId) throws RemoteException {
-                userStopped[0] = true;
-                stopUserLatch.countDown();
-            }
-
-            @Override
-            public void userStopAborted(int userId) throws RemoteException {
-                stopUserLatch.countDown();
-            }
-        });
-        assertTrue("User " + mTestUserId + " could not be stopped in " + STOP_USER_TIMEOUT_MS,
-                stopUserLatch.await(STOP_USER_TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        assertTrue("User " + mTestUserId + " could not be stopped", userStopped[0]);
-
-        mUm.removeUser(mTestUserId);
-        waitUntilTrue("Unable to remove user " + mTestUserId, () -> {
-            for (UserInfo user : mUm.getUsers()) {
-                if (user.id == mTestUserId) {
-                    return false;
-                }
-            }
-            return true;
-        }, USER_REMOVE_TIMEOUT_MS);
-        waitUntilTrue("Uids still found for removed user " + mTestUserId,
-                () -> getNumberOfUidsInBatteryStats() == 0, USER_UIDS_REMOVE_TIMEOUT_MS);
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        batteryOffScreenOn();
-        if (mTestUserId != UserHandle.USER_NULL) {
-            mUm.removeUser(mTestUserId);
-        }
-    }
-
-    private int getNumberOfUidsInBatteryStats() throws Exception {
-        ArraySet<Integer> uids = new ArraySet<>();
-        final String dumpsys = executeShellCommand("dumpsys batterystats --checkin");
-        for (String line : dumpsys.split("\n")) {
-            final String[] parts = line.trim().split(",");
-            if (parts.length < 5 ||
-                    (!parts[3].equals(CPU_DATA_TAG) && !parts[3].equals(CPU_FREQ_DATA_TAG))) {
-                continue;
-            }
-            try {
-                final int uid = Integer.parseInt(parts[1]);
-                if (UserHandle.getUserId(uid) == mTestUserId) {
-                    uids.add(uid);
-                }
-            } catch (NumberFormatException nexc) {
-                // ignore
-            }
-        }
-        return uids.size();
-    }
-
-    protected void batteryOnScreenOff() throws Exception {
-        executeShellCommand("dumpsys battery unplug");
-        executeShellCommand("dumpsys batterystats enable pretend-screen-off");
-    }
-
-    protected void batteryOffScreenOn() throws Exception {
-        executeShellCommand("dumpsys battery reset");
-        executeShellCommand("dumpsys batterystats disable pretend-screen-off");
-    }
-
-    private String executeShellCommand(String cmd) throws Exception {
-        return UiDevice.getInstance(
-                InstrumentationRegistry.getInstrumentation()).executeShellCommand(cmd);
-    }
-
-    private void waitUntilTrue(String message, Condition condition, long timeout) throws Exception {
-        final long deadLine = System.currentTimeMillis() + timeout;
-        while (System.currentTimeMillis() <= deadLine && !condition.isTrue()) {
-            Thread.sleep(POLL_INTERVAL_MS);
-        }
-        assertTrue(message, condition.isTrue());
-    }
-
-    private interface Condition {
-        boolean isTrue() throws Exception;
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryUsageStatsRule.java b/services/tests/servicestests/src/com/android/server/power/stats/BatteryUsageStatsRule.java
deleted file mode 100644
index 3135215..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/BatteryUsageStatsRule.java
+++ /dev/null
@@ -1,268 +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.server.power.stats;
-
-import static org.mockito.ArgumentMatchers.anyDouble;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.annotation.XmlRes;
-import android.content.Context;
-import android.net.NetworkStats;
-import android.os.BatteryConsumer;
-import android.os.BatteryStats;
-import android.os.BatteryUsageStats;
-import android.os.BatteryUsageStatsQuery;
-import android.os.UidBatteryConsumer;
-import android.os.UserBatteryConsumer;
-import android.util.SparseArray;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.internal.os.PowerProfile;
-import com.android.internal.power.EnergyConsumerStats;
-
-import org.junit.rules.TestRule;
-import org.junit.runner.Description;
-import org.junit.runners.model.Statement;
-import org.mockito.stubbing.Answer;
-
-import java.io.File;
-import java.util.Arrays;
-
-public class BatteryUsageStatsRule implements TestRule {
-    public static final BatteryUsageStatsQuery POWER_PROFILE_MODEL_ONLY =
-            new BatteryUsageStatsQuery.Builder()
-                    .powerProfileModeledOnly()
-                    .includePowerModels()
-                    .build();
-    private final Context mContext;
-
-    private final PowerProfile mPowerProfile;
-    private final MockClock mMockClock = new MockClock();
-    private final MockBatteryStatsImpl mBatteryStats;
-
-    private BatteryUsageStats mBatteryUsageStats;
-    private boolean mScreenOn;
-
-    public BatteryUsageStatsRule() {
-        this(0, null);
-    }
-
-    public BatteryUsageStatsRule(long currentTime) {
-        this(currentTime, null);
-    }
-
-    public BatteryUsageStatsRule(long currentTime, File historyDir) {
-        mContext = InstrumentationRegistry.getContext();
-        mPowerProfile = spy(new PowerProfile(mContext, true /* forTest */));
-        mMockClock.currentTime = currentTime;
-        mBatteryStats = new MockBatteryStatsImpl(mMockClock, historyDir);
-        mBatteryStats.setPowerProfile(mPowerProfile);
-        mBatteryStats.onSystemReady();
-    }
-
-    public BatteryUsageStatsRule setTestPowerProfile(@XmlRes int xmlId) {
-        mPowerProfile.forceInitForTesting(mContext, xmlId);
-        return this;
-    }
-
-    public BatteryUsageStatsRule setAveragePower(String key, double value) {
-        when(mPowerProfile.getAveragePower(key)).thenReturn(value);
-        when(mPowerProfile.getAveragePowerOrDefault(eq(key), anyDouble())).thenReturn(value);
-        return this;
-    }
-
-    public BatteryUsageStatsRule setAveragePowerUnspecified(String key) {
-        when(mPowerProfile.getAveragePower(key)).thenReturn(0.0);
-        when(mPowerProfile.getAveragePowerOrDefault(eq(key), anyDouble()))
-                .thenAnswer((Answer<Double>) invocation -> (Double) invocation.getArguments()[1]);
-        return this;
-    }
-
-    public BatteryUsageStatsRule setAveragePower(String key, double[] values) {
-        when(mPowerProfile.getNumElements(key)).thenReturn(values.length);
-        for (int i = 0; i < values.length; i++) {
-            when(mPowerProfile.getAveragePower(key, i)).thenReturn(values[i]);
-        }
-        return this;
-    }
-
-    public BatteryUsageStatsRule setNumCpuClusters(int number) {
-        when(mPowerProfile.getNumCpuClusters()).thenReturn(number);
-        return this;
-    }
-
-    public BatteryUsageStatsRule setNumSpeedStepsInCpuCluster(int cluster, int speeds) {
-        when(mPowerProfile.getNumSpeedStepsInCpuCluster(cluster)).thenReturn(speeds);
-        return this;
-    }
-
-    public BatteryUsageStatsRule setAveragePowerForCpuCluster(int cluster, double value) {
-        when(mPowerProfile.getAveragePowerForCpuCluster(cluster)).thenReturn(value);
-        return this;
-    }
-
-    public BatteryUsageStatsRule setAveragePowerForCpuCore(int cluster, int step, double value) {
-        when(mPowerProfile.getAveragePowerForCpuCore(cluster, step)).thenReturn(value);
-        return this;
-    }
-
-    public BatteryUsageStatsRule setAveragePowerForOrdinal(String group, int ordinal,
-            double value) {
-        when(mPowerProfile.getAveragePowerForOrdinal(group, ordinal)).thenReturn(value);
-        when(mPowerProfile.getAveragePowerForOrdinal(eq(group), eq(ordinal),
-                anyDouble())).thenReturn(value);
-        return this;
-    }
-
-    public BatteryUsageStatsRule setNumDisplays(int value) {
-        when(mPowerProfile.getNumDisplays()).thenReturn(value);
-        mBatteryStats.setDisplayCountLocked(value);
-        return this;
-    }
-
-    public BatteryUsageStatsRule setPerUidModemModel(int perUidModemModel) {
-        synchronized (mBatteryStats) {
-            mBatteryStats.setPerUidModemModel(perUidModemModel);
-        }
-        return this;
-    }
-
-    /** Call only after setting the power profile information. */
-    public BatteryUsageStatsRule initMeasuredEnergyStatsLocked() {
-        return initMeasuredEnergyStatsLocked(new String[0]);
-    }
-
-    /** Call only after setting the power profile information. */
-    public BatteryUsageStatsRule initMeasuredEnergyStatsLocked(
-            String[] customPowerComponentNames) {
-        final boolean[] supportedStandardBuckets =
-                new boolean[EnergyConsumerStats.NUMBER_STANDARD_POWER_BUCKETS];
-        Arrays.fill(supportedStandardBuckets, true);
-        synchronized (mBatteryStats) {
-            mBatteryStats.initEnergyConsumerStatsLocked(supportedStandardBuckets,
-                    customPowerComponentNames);
-            mBatteryStats.informThatAllExternalStatsAreFlushed();
-        }
-        return this;
-    }
-
-    public BatteryUsageStatsRule startWithScreenOn(boolean screenOn) {
-        mScreenOn = screenOn;
-        return this;
-    }
-
-    public void setNetworkStats(NetworkStats networkStats) {
-        mBatteryStats.setNetworkStats(networkStats);
-    }
-
-    @Override
-    public Statement apply(Statement base, Description description) {
-        return new Statement() {
-            @Override
-            public void evaluate() throws Throwable {
-                noteOnBattery();
-                base.evaluate();
-            }
-        };
-    }
-
-    private void noteOnBattery() {
-        mBatteryStats.setOnBatteryInternal(true);
-        mBatteryStats.getOnBatteryTimeBase().setRunning(true, 0, 0);
-        mBatteryStats.getOnBatteryScreenOffTimeBase().setRunning(!mScreenOn, 0, 0);
-    }
-
-    public PowerProfile getPowerProfile() {
-        return mPowerProfile;
-    }
-
-    public MockBatteryStatsImpl getBatteryStats() {
-        return mBatteryStats;
-    }
-
-    public BatteryStatsImpl.Uid getUidStats(int uid) {
-        return mBatteryStats.getUidStatsLocked(uid);
-    }
-
-    public void setTime(long realtimeMs, long uptimeMs) {
-        mMockClock.currentTime = realtimeMs;
-        mMockClock.realtime = realtimeMs;
-        mMockClock.uptime = uptimeMs;
-    }
-
-    public void setCurrentTime(long currentTimeMs) {
-        mMockClock.currentTime = currentTimeMs;
-    }
-
-    BatteryUsageStats apply(PowerCalculator... calculators) {
-        return apply(new BatteryUsageStatsQuery.Builder().includePowerModels().build(),
-                calculators);
-    }
-
-    BatteryUsageStats apply(BatteryUsageStatsQuery query, PowerCalculator... calculators) {
-        final String[] customPowerComponentNames = mBatteryStats.getCustomEnergyConsumerNames();
-        final boolean includePowerModels = (query.getFlags()
-                & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_POWER_MODELS) != 0;
-        final boolean includeProcessStateData = (query.getFlags()
-                & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_PROCESS_STATE_DATA) != 0;
-        BatteryUsageStats.Builder builder = new BatteryUsageStats.Builder(
-                customPowerComponentNames, includePowerModels, includeProcessStateData);
-        SparseArray<? extends BatteryStats.Uid> uidStats = mBatteryStats.getUidStats();
-        for (int i = 0; i < uidStats.size(); i++) {
-            builder.getOrCreateUidBatteryConsumerBuilder(uidStats.valueAt(i));
-        }
-
-        for (PowerCalculator calculator : calculators) {
-            calculator.calculate(builder, mBatteryStats, mMockClock.realtime * 1000,
-                    mMockClock.uptime * 1000, query);
-        }
-
-        mBatteryUsageStats = builder.build();
-        return mBatteryUsageStats;
-    }
-
-    public BatteryConsumer getDeviceBatteryConsumer() {
-        return mBatteryUsageStats.getAggregateBatteryConsumer(
-                BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE);
-    }
-
-    public BatteryConsumer getAppsBatteryConsumer() {
-        return mBatteryUsageStats.getAggregateBatteryConsumer(
-                BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_ALL_APPS);
-    }
-
-    public UidBatteryConsumer getUidBatteryConsumer(int uid) {
-        for (UidBatteryConsumer ubc : mBatteryUsageStats.getUidBatteryConsumers()) {
-            if (ubc.getUid() == uid) {
-                return ubc;
-            }
-        }
-        return null;
-    }
-
-    public UserBatteryConsumer getUserBatteryConsumer(int userId) {
-        for (UserBatteryConsumer ubc : mBatteryUsageStats.getUserBatteryConsumers()) {
-            if (ubc.getUserId() == userId) {
-                return ubc;
-            }
-        }
-        return null;
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BstatsCpuTimesValidationTest.java b/services/tests/servicestests/src/com/android/server/power/stats/BstatsCpuTimesValidationTest.java
deleted file mode 100644
index 25a5b29..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/BstatsCpuTimesValidationTest.java
+++ /dev/null
@@ -1,902 +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.server.power.stats;
-
-import static android.os.BatteryStats.UID_TIMES_TYPE_ALL;
-import static android.os.BatteryStats.Uid.NUM_PROCESS_STATE;
-import static android.os.BatteryStats.Uid.PROCESS_STATE_BACKGROUND;
-import static android.os.BatteryStats.Uid.PROCESS_STATE_CACHED;
-import static android.os.BatteryStats.Uid.PROCESS_STATE_FOREGROUND;
-import static android.os.BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE;
-import static android.os.BatteryStats.Uid.PROCESS_STATE_TOP;
-import static android.os.BatteryStats.Uid.PROCESS_STATE_TOP_SLEEPING;
-import static android.os.BatteryStats.Uid.UID_PROCESS_TYPES;
-
-import static junit.framework.Assert.assertNotNull;
-import static junit.framework.Assert.assertNull;
-import static junit.framework.Assert.assertTrue;
-import static junit.framework.Assert.fail;
-
-import android.app.ActivityManager;
-import android.app.KeyguardManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.content.pm.PackageManager;
-import android.os.BatteryManager;
-import android.os.BatteryStats;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.PowerManager;
-import android.os.Process;
-import android.os.SystemClock;
-import android.provider.Settings;
-import android.support.test.uiautomator.UiDevice;
-import android.util.ArrayMap;
-import android.util.DebugUtils;
-import android.util.KeyValueListParser;
-import android.util.Log;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.filters.LargeTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.frameworks.coretests.aidl.ICmdCallback;
-import com.android.frameworks.coretests.aidl.ICmdReceiver;
-
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TestName;
-import org.junit.runner.RunWith;
-
-import java.util.Arrays;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-@LargeTest
-@RunWith(AndroidJUnit4.class)
-public class BstatsCpuTimesValidationTest {
-    private static final String TAG = BstatsCpuTimesValidationTest.class.getSimpleName();
-
-    private static final String TEST_PKG = "com.android.coretests.apps.bstatstestapp";
-    private static final String TEST_ACTIVITY = TEST_PKG + ".TestActivity";
-    private static final String TEST_SERVICE = TEST_PKG + ".TestService";
-    private static final String ISOLATED_TEST_SERVICE = TEST_PKG + ".IsolatedTestService";
-
-    private static final String EXTRA_KEY_CMD_RECEIVER = "cmd_receiver";
-    private static final int FLAG_START_FOREGROUND = 1;
-
-    private static final int BATTERY_STATE_TIMEOUT_MS = 2000;
-    private static final int BATTERY_STATE_CHECK_INTERVAL_MS = 200;
-
-    private static final int START_ACTIVITY_TIMEOUT_MS = 2000;
-    private static final int START_FG_SERVICE_TIMEOUT_MS = 2000;
-    private static final int START_SERVICE_TIMEOUT_MS = 2000;
-    private static final int START_ISOLATED_SERVICE_TIMEOUT_MS = 2000;
-
-    private static final int SETTING_UPDATE_TIMEOUT_MS = 2000;
-    private static final int SETTING_UPDATE_CHECK_INTERVAL_MS = 200;
-
-    private static final int GENERAL_TIMEOUT_MS = 4000;
-    private static final int GENERAL_INTERVAL_MS = 200;
-
-    private static final int WORK_DURATION_MS = 2000;
-
-    private static boolean sBatteryStatsConstsUpdated;
-    private static String sOriginalBatteryStatsConsts;
-
-    private static Context sContext;
-    private static UiDevice sUiDevice;
-    private static int sTestPkgUid;
-    private static boolean sCpuFreqTimesAvailable;
-    private static boolean sPerProcStateTimesAvailable;
-
-    @Rule public TestName testName = new TestName();
-
-    @BeforeClass
-    public static void setupOnce() throws Exception {
-        sContext = InstrumentationRegistry.getContext();
-        sUiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
-        sContext.getPackageManager().setApplicationEnabledSetting(TEST_PKG,
-                PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
-        sTestPkgUid = sContext.getPackageManager().getPackageUid(TEST_PKG, 0);
-        executeCmd("cmd deviceidle whitelist +" + TEST_PKG);
-        checkCpuTimesAvailability();
-    }
-
-    @AfterClass
-    public static void tearDownOnce() throws Exception {
-        executeCmd("cmd deviceidle whitelist -" + TEST_PKG);
-        if (sBatteryStatsConstsUpdated) {
-            Settings.Global.putString(sContext.getContentResolver(),
-                    Settings.Global.BATTERY_STATS_CONSTANTS, sOriginalBatteryStatsConsts);
-        }
-        batteryReset();
-    }
-
-    private static void updateBatteryStatsConstants(ArrayMap<String, String> desiredConstants) {
-        sOriginalBatteryStatsConsts = Settings.Global.getString(sContext.getContentResolver(),
-                Settings.Global.BATTERY_STATS_CONSTANTS);
-        final char delimiter = ',';
-        final KeyValueListParser parser = new KeyValueListParser(delimiter);
-        parser.setString(sOriginalBatteryStatsConsts);
-        final StringBuilder sb = new StringBuilder();
-        for (int i = 0, size = parser.size(); i < size; ++i) {
-            final String key = parser.keyAt(i);
-            final String value = desiredConstants.getOrDefault(key,
-                    parser.getString(key, null));
-            if (sb.length() > 0) {
-                sb.append(delimiter);
-            }
-            sb.append(key + "=" + value);
-            desiredConstants.remove(key);
-        }
-        desiredConstants.forEach((key, value) -> {
-            if (sb.length() > 0) {
-                sb.append(delimiter);
-            }
-            sb.append(key + '=' + value);
-        });
-        Settings.Global.putString(sContext.getContentResolver(),
-                Settings.Global.BATTERY_STATS_CONSTANTS, sb.toString());
-        Log.d(TAG, "Updated value of '" + Settings.Global.BATTERY_STATS_CONSTANTS + "': "
-                + sb.toString());
-        sBatteryStatsConstsUpdated = true;
-    }
-
-    // Checks cpu freq times of system uid as an indication of whether /proc/uid_time_in_state
-    // and /proc/uid/<uid>/time_in_state kernel nodes are available.
-    private static void checkCpuTimesAvailability() throws Exception {
-        batteryOn();
-        SystemClock.sleep(GENERAL_TIMEOUT_MS);
-        batteryOff();
-        final long[] totalCpuTimes = getAllCpuFreqTimes(Process.SYSTEM_UID);
-        sCpuFreqTimesAvailable = totalCpuTimes != null;
-        final long[] fgCpuTimes = getAllCpuFreqTimes(Process.SYSTEM_UID,
-                PROCESS_STATE_FOREGROUND);
-        final long[] topCpuTimes = getAllCpuFreqTimes(Process.SYSTEM_UID,
-                PROCESS_STATE_TOP);
-        sPerProcStateTimesAvailable = fgCpuTimes != null || topCpuTimes != null;
-    }
-
-    @Test
-    public void testCpuFreqTimes() throws Exception {
-        if (!sCpuFreqTimesAvailable) {
-            Log.w(TAG, "Skipping " + testName.getMethodName()
-                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
-                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
-            return;
-        }
-
-        batteryOnScreenOn();
-        forceStop();
-        resetBatteryStats();
-        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
-        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
-                initialSnapshot);
-        doSomeWork();
-        forceStop();
-
-        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid);
-        assertCpuTimesValid(cpuTimesMs);
-        long actualCpuTimeMs = 0;
-        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
-            actualCpuTimeMs += cpuTimesMs[i];
-        }
-        assertApproximateValue("Incorrect total cpu time", WORK_DURATION_MS, actualCpuTimeMs);
-        batteryOffScreenOn();
-    }
-
-    @Test
-    public void testCpuFreqTimes_screenOff() throws Exception {
-        if (!sCpuFreqTimesAvailable) {
-            Log.w(TAG, "Skipping " + testName.getMethodName()
-                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
-                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
-            return;
-        }
-
-        batteryOnScreenOff();
-        forceStop();
-        resetBatteryStats();
-        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
-        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
-                initialSnapshot);
-        doSomeWork();
-        forceStop();
-
-        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid);
-        assertCpuTimesValid(cpuTimesMs);
-        long actualTotalCpuTimeMs = 0;
-        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
-            actualTotalCpuTimeMs += cpuTimesMs[i];
-        }
-        assertApproximateValue("Incorrect total cpu time", WORK_DURATION_MS, actualTotalCpuTimeMs);
-        long actualScreenOffCpuTimeMs = 0;
-        for (int i = cpuTimesMs.length / 2; i < cpuTimesMs.length; ++i) {
-            actualScreenOffCpuTimeMs += cpuTimesMs[i];
-        }
-        assertApproximateValue("Incorrect screen-off cpu time",
-                WORK_DURATION_MS, actualScreenOffCpuTimeMs);
-        batteryOffScreenOn();
-    }
-
-    @Test
-    public void testCpuFreqTimes_isolatedProcess() throws Exception {
-        if (!sCpuFreqTimesAvailable) {
-            Log.w(TAG, "Skipping " + testName.getMethodName()
-                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
-                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
-            return;
-        }
-
-        batteryOnScreenOn();
-        forceStop();
-        resetBatteryStats();
-        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
-        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
-                initialSnapshot);
-        doSomeWorkInIsolatedProcess();
-        forceStop();
-
-        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid);
-        assertCpuTimesValid(cpuTimesMs);
-        long actualCpuTimeMs = 0;
-        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
-            actualCpuTimeMs += cpuTimesMs[i];
-        }
-        assertApproximateValue("Incorrect total cpu time", WORK_DURATION_MS, actualCpuTimeMs);
-        batteryOffScreenOn();
-    }
-
-    @Test
-    public void testCpuFreqTimes_stateTop() throws Exception {
-        if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
-            Log.w(TAG, "Skipping " + testName.getMethodName()
-                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
-                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
-            return;
-        }
-
-        batteryOnScreenOn();
-        forceStop();
-        resetBatteryStats();
-        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
-        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
-                initialSnapshot);
-        assertNull("Initial top state snapshot should be null",
-                getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_TOP));
-
-        doSomeWork(PROCESS_STATE_TOP);
-        forceStop();
-
-        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_TOP);
-        final String msgCpuTimes = getAllCpuTimesMsg();
-        assertCpuTimesValid(cpuTimesMs);
-        long actualCpuTimeMs = 0;
-        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
-            actualCpuTimeMs += cpuTimesMs[i];
-        }
-        assertApproximateValue("Incorrect total cpu time, " + msgCpuTimes,
-                WORK_DURATION_MS, actualCpuTimeMs);
-        batteryOffScreenOn();
-    }
-
-    @Test
-    public void testIsolatedCpuFreqTimes_stateService() throws Exception {
-        if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
-            Log.w(TAG, "Skipping " + testName.getMethodName()
-                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
-                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
-            return;
-        }
-
-        batteryOnScreenOn();
-        forceStop();
-        resetBatteryStats();
-        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
-        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
-                initialSnapshot);
-        assertNull("Initial top state snapshot should be null",
-                getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_TOP));
-
-        final ICmdReceiver activityReceiver = ICmdReceiver.Stub.asInterface(startActivity());
-        final ICmdReceiver isolatedReceiver = ICmdReceiver.Stub.asInterface(startIsolatedService());
-        try {
-            assertProcState(PROCESS_STATE_TOP);
-            isolatedReceiver.doSomeWork(WORK_DURATION_MS);
-        } finally {
-            activityReceiver.finishHost();
-            isolatedReceiver.finishHost();
-        }
-        forceStop();
-
-        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_TOP);
-        final String msgCpuTimes = getAllCpuTimesMsg();
-        assertCpuTimesValid(cpuTimesMs);
-        long actualCpuTimeMs = 0;
-        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
-            actualCpuTimeMs += cpuTimesMs[i];
-        }
-        assertApproximateValue("Incorrect total cpu time, " + msgCpuTimes,
-                WORK_DURATION_MS, actualCpuTimeMs);
-        batteryOffScreenOn();
-    }
-
-    @Test
-    public void testCpuFreqTimes_stateTopSleeping() throws Exception {
-        if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
-            Log.w(TAG, "Skipping " + testName.getMethodName()
-                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
-                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
-            return;
-        }
-
-        batteryOnScreenOff();
-        forceStop();
-        resetBatteryStats();
-        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
-        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
-                initialSnapshot);
-        assertNull("Initial top state snapshot should be null",
-                getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_TOP_SLEEPING));
-
-        doSomeWork(PROCESS_STATE_TOP_SLEEPING);
-        forceStop();
-
-        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_TOP_SLEEPING);
-        final String msgCpuTimes = getAllCpuTimesMsg();
-        assertCpuTimesValid(cpuTimesMs);
-        long actualCpuTimeMs = 0;
-        for (int i = cpuTimesMs.length / 2; i < cpuTimesMs.length; ++i) {
-            actualCpuTimeMs += cpuTimesMs[i];
-        }
-        assertApproximateValue("Incorrect total cpu time, " + msgCpuTimes,
-                WORK_DURATION_MS, actualCpuTimeMs);
-        batteryOffScreenOn();
-    }
-
-    @Test
-    public void testCpuFreqTimes_stateFgService() throws Exception {
-        if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
-            Log.w(TAG, "Skipping " + testName.getMethodName()
-                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
-                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
-            return;
-        }
-
-        batteryOnScreenOff();
-        forceStop();
-        resetBatteryStats();
-        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
-        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
-                initialSnapshot);
-        assertNull("Initial top state snapshot should be null",
-                getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_FOREGROUND_SERVICE));
-
-        doSomeWork(PROCESS_STATE_FOREGROUND_SERVICE);
-        forceStop();
-
-        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_FOREGROUND_SERVICE);
-        final String msgCpuTimes = getAllCpuTimesMsg();
-        assertCpuTimesValid(cpuTimesMs);
-        long actualCpuTimeMs = 0;
-        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
-            actualCpuTimeMs += cpuTimesMs[i];
-        }
-        assertApproximateValue("Incorrect total cpu time, " + msgCpuTimes,
-                WORK_DURATION_MS, actualCpuTimeMs);
-        batteryOffScreenOn();
-    }
-
-    @Test
-    public void testCpuFreqTimes_stateFg() throws Exception {
-        if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
-            Log.w(TAG, "Skipping " + testName.getMethodName()
-                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
-                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
-            return;
-        }
-
-        batteryOnScreenOn();
-        forceStop();
-        resetBatteryStats();
-        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
-        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
-                initialSnapshot);
-        assertNull("Initial top state snapshot should be null",
-                getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_FOREGROUND));
-
-        doSomeWork(PROCESS_STATE_FOREGROUND);
-        forceStop();
-
-        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_FOREGROUND);
-        final String msgCpuTimes = getAllCpuTimesMsg();
-        assertCpuTimesValid(cpuTimesMs);
-        long actualCpuTimeMs = 0;
-        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
-            actualCpuTimeMs += cpuTimesMs[i];
-        }
-        assertApproximateValue("Incorrect total cpu time, " + msgCpuTimes,
-                WORK_DURATION_MS, actualCpuTimeMs);
-        batteryOff();
-    }
-
-    @Test
-    public void testCpuFreqTimes_stateBg() throws Exception {
-        if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
-            Log.w(TAG, "Skipping " + testName.getMethodName()
-                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
-                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
-            return;
-        }
-
-        batteryOnScreenOff();
-        forceStop();
-        resetBatteryStats();
-        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
-        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
-                initialSnapshot);
-        assertNull("Initial top state snapshot should be null",
-                getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_BACKGROUND));
-
-        doSomeWork(PROCESS_STATE_BACKGROUND);
-        forceStop();
-
-        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_BACKGROUND);
-        final String msgCpuTimes = getAllCpuTimesMsg();
-        assertCpuTimesValid(cpuTimesMs);
-        long actualCpuTimeMs = 0;
-        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
-            actualCpuTimeMs += cpuTimesMs[i];
-        }
-        assertApproximateValue("Incorrect total cpu time, " + msgCpuTimes,
-                WORK_DURATION_MS, actualCpuTimeMs);
-        batteryOffScreenOn();
-    }
-
-    @Test
-    public void testCpuFreqTimes_stateCached() throws Exception {
-        if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
-            Log.w(TAG, "Skipping " + testName.getMethodName()
-                    + "; freqTimesAvailable=" + sCpuFreqTimesAvailable
-                    + ", procStateTimesAvailable=" + sPerProcStateTimesAvailable);
-            return;
-        }
-
-        batteryOnScreenOn();
-        forceStop();
-        resetBatteryStats();
-        final long[] initialSnapshot = getAllCpuFreqTimes(sTestPkgUid);
-        assertNull("Initial snapshot should be null, initial=" + Arrays.toString(initialSnapshot),
-                initialSnapshot);
-        assertNull("Initial top state snapshot should be null",
-                getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_CACHED));
-
-        doSomeWork(PROCESS_STATE_CACHED);
-        forceStop();
-
-        final long[] cpuTimesMs = getAllCpuFreqTimes(sTestPkgUid, PROCESS_STATE_CACHED);
-        final String msgCpuTimes = getAllCpuTimesMsg();
-        assertCpuTimesValid(cpuTimesMs);
-        long actualCpuTimeMs = 0;
-        for (int i = 0; i < cpuTimesMs.length / 2; ++i) {
-            actualCpuTimeMs += cpuTimesMs[i];
-        }
-        assertApproximateValue("Incorrect total cpu time, " + msgCpuTimes,
-                WORK_DURATION_MS, actualCpuTimeMs);
-        batteryOffScreenOn();
-    }
-
-    private void assertCpuTimesValid(long[] cpuTimes) {
-        assertNotNull(cpuTimes);
-        for (int i = 0; i < cpuTimes.length; ++i) {
-            if (cpuTimes[i] < 0) {
-                fail("Malformed cpu times data (-ve values): " + Arrays.toString(cpuTimes));
-            }
-        }
-        final int numFreqs = cpuTimes.length / 2;
-        for (int i = 0; i < numFreqs; ++i) {
-            if (cpuTimes[i] < cpuTimes[numFreqs + i]) {
-                fail("Malformed cpu times data (screen-off > total)" + Arrays.toString(cpuTimes));
-            }
-        }
-    }
-
-    private void assertApproximateValue(String errorPrefix, long expectedValueMs,
-            long actualValueMs) {
-        // Allow the actual value to be 1 second smaller than the expected.
-        // Also allow it to be up to 5 seconds larger, to accommodate the arbitrary
-        // latency introduced by BatteryExternalStatsWorker.scheduleReadProcStateCpuTimes
-        assertValueRange(errorPrefix, actualValueMs,
-                expectedValueMs - 1000,
-                expectedValueMs + 5000);
-    }
-
-    private void assertValueRange(String errorPrefix,
-            long actualvalue, double minValue, double maxValue) {
-        final String errorMsg = String.format(errorPrefix + "; actual=%s; min=%s; max=%s",
-                actualvalue, minValue, maxValue);
-        assertTrue(errorMsg, actualvalue < maxValue);
-        assertTrue(errorMsg, actualvalue > minValue);
-    }
-
-    private void doSomeWork() throws Exception {
-        final ICmdReceiver receiver = ICmdReceiver.Stub.asInterface(startActivity());
-        receiver.doSomeWork(WORK_DURATION_MS);
-        receiver.finishHost();
-    }
-
-    private void doSomeWorkInIsolatedProcess() throws Exception {
-        final ICmdReceiver receiver = ICmdReceiver.Stub.asInterface(startIsolatedService());
-        receiver.doSomeWork(WORK_DURATION_MS);
-        receiver.finishHost();
-    }
-
-    private void doSomeWork(int procState) throws Exception {
-        final ICmdReceiver receiver;
-        switch (procState) {
-            case PROCESS_STATE_TOP:
-                receiver = ICmdReceiver.Stub.asInterface(startActivity());
-                break;
-            case PROCESS_STATE_TOP_SLEEPING:
-                receiver = ICmdReceiver.Stub.asInterface(startActivity());
-                break;
-            case PROCESS_STATE_FOREGROUND_SERVICE:
-                receiver = ICmdReceiver.Stub.asInterface(startForegroundService());
-                break;
-            case PROCESS_STATE_FOREGROUND:
-                receiver = ICmdReceiver.Stub.asInterface(startService());
-                receiver.showApplicationOverlay();
-                break;
-            case PROCESS_STATE_BACKGROUND:
-                receiver = ICmdReceiver.Stub.asInterface(startService());
-                break;
-            case PROCESS_STATE_CACHED:
-                receiver = ICmdReceiver.Stub.asInterface(startActivity());
-                receiver.finishHost();
-                break;
-            default:
-                throw new IllegalArgumentException("Unknown state: " + procState);
-        }
-        try {
-            assertProcState(procState);
-            receiver.doSomeWork(WORK_DURATION_MS);
-        } finally {
-            receiver.finishHost();
-        }
-    }
-
-    private void assertProcState(String state) throws Exception {
-        final String expectedState = "(" + state + ")";
-        assertDelayedCondition("", () -> {
-            final String uidStateStr = executeCmd("cmd activity get-uid-state " + sTestPkgUid);
-            final String actualState = uidStateStr.split(" ")[1];
-            return expectedState.equals(actualState) ? null
-                    : "expected=" + expectedState + ", actual" + actualState;
-        });
-    }
-
-    private void assertProcState(int expectedState) throws Exception {
-        assertDelayedCondition("Unexpected proc state", () -> {
-            final String uidStateStr = executeCmd("cmd activity get-uid-state " + sTestPkgUid);
-            final int amProcState = Integer.parseInt(uidStateStr.split(" ")[0]);
-            final int actualState = BatteryStats.mapToInternalProcessState(amProcState);
-            return (actualState == expectedState) ? null
-                    : "expected=" + getStateName(BatteryStats.Uid.class, expectedState)
-                            + ", actual=" + getStateName(BatteryStats.Uid.class, actualState)
-                            + ", amState=" + getStateName(ActivityManager.class, amProcState);
-        });
-    }
-
-    private String getStateName(Class clazz, int procState) {
-        return DebugUtils.valueToString(clazz, "PROCESS_STATE_", procState);
-    }
-
-    private IBinder startIsolatedService() throws Exception {
-        final CountDownLatch latch = new CountDownLatch(1);
-        final IBinder[] binders = new IBinder[1];
-        final ServiceConnection connection = new ServiceConnection() {
-            @Override
-            public void onServiceConnected(ComponentName name, IBinder service) {
-                binders[0] = service;
-                latch.countDown();
-            }
-
-            @Override
-            public void onServiceDisconnected(ComponentName name) {
-            }
-        };
-        final Intent launchIntent = new Intent()
-                .setComponent(new ComponentName(TEST_PKG, ISOLATED_TEST_SERVICE));
-        sContext.bindService(launchIntent, connection, Context.BIND_AUTO_CREATE
-                | Context.BIND_ALLOW_OOM_MANAGEMENT | Context.BIND_NOT_FOREGROUND);
-        if (latch.await(START_ISOLATED_SERVICE_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
-            if (binders[0] == null) {
-                fail("Receiver binder should not be null");
-            }
-            return binders[0];
-        } else {
-            fail("Timed out waiting for the isolated test service to start");
-        }
-        return null;
-    }
-
-    private IBinder startForegroundService() throws Exception {
-        final CountDownLatch latch = new CountDownLatch(1);
-        final Intent launchIntent = new Intent()
-                .setComponent(new ComponentName(TEST_PKG, TEST_SERVICE))
-                .setFlags(FLAG_START_FOREGROUND);
-        final Bundle extras = new Bundle();
-        final IBinder[] binders = new IBinder[1];
-        extras.putBinder(EXTRA_KEY_CMD_RECEIVER, new ICmdCallback.Stub() {
-            @Override
-            public void onLaunched(IBinder receiver) {
-                binders[0] = receiver;
-                latch.countDown();
-            }
-        });
-        launchIntent.putExtras(extras);
-        sContext.startForegroundService(launchIntent);
-        if (latch.await(START_FG_SERVICE_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
-            if (binders[0] == null) {
-                fail("Receiver binder should not be null");
-            }
-            return binders[0];
-        } else {
-            fail("Timed out waiting for the test fg service to start; testUid=" + sTestPkgUid);
-        }
-        return null;
-    }
-
-    private IBinder startService() throws Exception {
-        final CountDownLatch latch = new CountDownLatch(1);
-        final Intent launchIntent = new Intent()
-                .setComponent(new ComponentName(TEST_PKG, TEST_SERVICE));
-        final Bundle extras = new Bundle();
-        final IBinder[] binders = new IBinder[1];
-        extras.putBinder(EXTRA_KEY_CMD_RECEIVER, new ICmdCallback.Stub() {
-            @Override
-            public void onLaunched(IBinder receiver) {
-                binders[0] = receiver;
-                latch.countDown();
-            }
-        });
-        launchIntent.putExtras(extras);
-        sContext.startService(launchIntent);
-        if (latch.await(START_SERVICE_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
-            if (binders[0] == null) {
-                fail("Receiver binder should not be null");
-            }
-            return binders[0];
-        } else {
-            fail("Timed out waiting for the test service to start; testUid=" + sTestPkgUid);
-        }
-        return null;
-    }
-
-    private IBinder startActivity() throws Exception {
-        final CountDownLatch latch = new CountDownLatch(1);
-        final Intent launchIntent = new Intent()
-                .setComponent(new ComponentName(TEST_PKG, TEST_ACTIVITY));
-        final Bundle extras = new Bundle();
-        final IBinder[] binders = new IBinder[1];
-        extras.putBinder(EXTRA_KEY_CMD_RECEIVER, new ICmdCallback.Stub() {
-            @Override
-            public void onLaunched(IBinder receiver) {
-                binders[0] = receiver;
-                latch.countDown();
-            }
-        });
-        launchIntent.putExtras(extras)
-                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        sContext.startActivity(launchIntent);
-        if (latch.await(START_ACTIVITY_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
-            if (binders[0] == null) {
-                fail("Receiver binder should not be null");
-            }
-            return binders[0];
-        } else {
-            fail("Timed out waiting for the test activity to start; testUid=" + sTestPkgUid);
-        }
-        return null;
-    }
-
-    private static String getAllCpuTimesMsg() throws Exception {
-        final StringBuilder sb = new StringBuilder();
-        sb.append("uid=" + sTestPkgUid + ";");
-        sb.append(UID_TIMES_TYPE_ALL + "=" + getMsgCpuTimesSum(getAllCpuFreqTimes(sTestPkgUid)));
-        for (int i = 0; i < NUM_PROCESS_STATE; ++i) {
-            sb.append("|");
-            sb.append(UID_PROCESS_TYPES[i] + "="
-                    + getMsgCpuTimesSum(getAllCpuFreqTimes(sTestPkgUid, i)));
-        }
-        return sb.toString();
-    }
-
-    private static String getMsgCpuTimesSum(long[] cpuTimes) throws Exception {
-        if (cpuTimes == null) {
-            return "(0,0)";
-        }
-        long totalTime = 0;
-        for (int i = 0; i < cpuTimes.length / 2; ++i) {
-            totalTime += cpuTimes[i];
-        }
-        long screenOffTime = 0;
-        for (int i = cpuTimes.length / 2; i < cpuTimes.length; ++i) {
-            screenOffTime += cpuTimes[i];
-        }
-        return "(" + totalTime + "," + screenOffTime + ")";
-    }
-
-    private static long[] getAllCpuFreqTimes(int uid) throws Exception {
-        final String checkinDump = executeCmdSilent("dumpsys batterystats --checkin");
-        final Pattern pattern = Pattern.compile(uid + ",l,ctf," + UID_TIMES_TYPE_ALL + ",(.*?)\n");
-        final Matcher matcher = pattern.matcher(checkinDump);
-        if (!matcher.find()) {
-            return null;
-        }
-        return parseCpuTimesStr(matcher.group(1));
-    }
-
-    private static long[] getAllCpuFreqTimes(int uid, int procState) throws Exception {
-        final String checkinDump = executeCmdSilent("dumpsys batterystats --checkin");
-        final Pattern pattern = Pattern.compile(
-                uid + ",l,ctf," + UID_PROCESS_TYPES[procState] + ",(.*?)\n");
-        final Matcher matcher = pattern.matcher(checkinDump);
-        if (!matcher.find()) {
-            return null;
-        }
-        return parseCpuTimesStr(matcher.group(1));
-    }
-
-    private static long[] parseCpuTimesStr(String str) {
-        final String[] cpuTimesStr = str.split(",");
-        final int freqCount = Integer.parseInt(cpuTimesStr[0]);
-        if (cpuTimesStr.length != (2 * freqCount + 1)) {
-            fail("Malformed data: " + Arrays.toString(cpuTimesStr));
-        }
-        final long[] cpuTimes = new long[freqCount * 2];
-        for (int i = 0; i < cpuTimes.length; ++i) {
-            cpuTimes[i] = Long.parseLong(cpuTimesStr[i + 1]);
-        }
-        return cpuTimes;
-    }
-
-    private void resetBatteryStats() throws Exception {
-        executeCmd("dumpsys batterystats --reset");
-    }
-
-    private void batteryOnScreenOn() throws Exception {
-        batteryOn();
-        screenOn();
-    }
-
-    private void batteryOnScreenOff() throws Exception {
-        batteryOn();
-        screenoff();
-    }
-
-    private void batteryOffScreenOn() throws Exception {
-        batteryOff();
-        screenOn();
-    }
-
-    private static void batteryOn() throws Exception {
-        executeCmd("dumpsys battery unplug");
-        assertBatteryState(false /* pluggedIn */);
-    }
-
-    private static void batteryOff() throws Exception {
-        executeCmd("dumpsys battery set ac " + BatteryManager.BATTERY_PLUGGED_AC);
-        assertBatteryState(true /* pluggedIn */);
-    }
-
-    private static void batteryReset() throws Exception {
-        executeCmd("dumpsys battery reset");
-    }
-
-    private void screenOn() throws Exception {
-        executeCmd("input keyevent KEYCODE_WAKEUP");
-        executeCmd("wm dismiss-keyguard");
-        assertKeyguardUnLocked();
-        assertScreenInteractive(true);
-    }
-
-    private void screenoff() throws Exception {
-        executeCmd("input keyevent KEYCODE_SLEEP");
-        assertScreenInteractive(false);
-    }
-
-    private void forceStop() throws Exception {
-        executeCmd("cmd activity force-stop " + TEST_PKG);
-        assertProcState("NONEXISTENT");
-    }
-
-    private void assertKeyguardUnLocked() throws Exception {
-        final KeyguardManager keyguardManager =
-                (KeyguardManager) sContext.getSystemService(Context.KEYGUARD_SERVICE);
-        assertDelayedCondition("Unexpected Keyguard state", () ->
-                keyguardManager.isKeyguardLocked() ? "expected=unlocked" : null
-        );
-    }
-
-    private void assertScreenInteractive(boolean interactive) throws Exception {
-        final PowerManager powerManager =
-                (PowerManager) sContext.getSystemService(Context.POWER_SERVICE);
-        assertDelayedCondition("Unexpected screen interactive state", () ->
-                interactive == powerManager.isInteractive() ? null : "expected=" + interactive
-        );
-    }
-
-    private void assertDelayedCondition(String errMsgPrefix, ExpectedCondition condition)
-            throws Exception {
-        assertDelayedCondition(errMsgPrefix, condition, GENERAL_TIMEOUT_MS, GENERAL_INTERVAL_MS);
-    }
-
-    private void assertDelayedCondition(String errMsgPrefix, ExpectedCondition condition,
-            long timeoutMs, long checkIntervalMs) throws Exception {
-        final long endTime = SystemClock.uptimeMillis() + timeoutMs;
-        while (SystemClock.uptimeMillis() <= endTime) {
-            if (condition.getErrIfNotTrue() == null) {
-                return;
-            }
-            SystemClock.sleep(checkIntervalMs);
-        }
-        final String errMsg = condition.getErrIfNotTrue();
-        if (errMsg != null) {
-            fail(errMsgPrefix + ": " + errMsg);
-        }
-    }
-
-    private static void assertBatteryState(boolean pluggedIn) throws Exception {
-        final long endTime = SystemClock.uptimeMillis() + BATTERY_STATE_TIMEOUT_MS;
-        while (isDevicePluggedIn() != pluggedIn && SystemClock.uptimeMillis() <= endTime) {
-            Thread.sleep(BATTERY_STATE_CHECK_INTERVAL_MS);
-        }
-        if (isDevicePluggedIn() != pluggedIn) {
-            fail("Timed out waiting for the plugged-in state to change,"
-                    + " expected pluggedIn: " + pluggedIn);
-        }
-    }
-
-    private static boolean isDevicePluggedIn() {
-        final Intent batteryIntent = sContext.registerReceiver(null,
-                new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
-        return batteryIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) > 0;
-    }
-
-    private static String executeCmd(String cmd) throws Exception {
-        final String result = sUiDevice.executeShellCommand(cmd).trim();
-        Log.d(TAG, String.format("Result for '%s': %s", cmd, result));
-        return result;
-    }
-
-    private static String executeCmdSilent(String cmd) throws Exception {
-        return sUiDevice.executeShellCommand(cmd).trim();
-    }
-
-    private interface ExpectedCondition {
-        String getErrIfNotTrue() throws Exception;
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/CpuPowerCalculatorTest.java b/services/tests/servicestests/src/com/android/server/power/stats/CpuPowerCalculatorTest.java
deleted file mode 100644
index ced996f3..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/CpuPowerCalculatorTest.java
+++ /dev/null
@@ -1,492 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.power.stats;
-
-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.doAnswer;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import android.os.BatteryConsumer;
-import android.os.BatteryStats;
-import android.os.BatteryUsageStatsQuery;
-import android.os.Process;
-import android.os.UidBatteryConsumer;
-import android.util.SparseArray;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.internal.os.KernelCpuSpeedReader;
-import com.android.internal.os.KernelCpuUidTimeReader;
-import com.android.internal.os.KernelSingleUidTimeReader;
-import com.android.internal.os.LongArrayMultiStateCounter;
-import com.android.internal.os.PowerProfile;
-import com.android.internal.power.EnergyConsumerStats;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-@SuppressWarnings("GuardedBy")
-public class CpuPowerCalculatorTest {
-    private static final double PRECISION = 0.00001;
-
-    private static final int APP_UID1 = Process.FIRST_APPLICATION_UID + 42;
-    private static final int APP_UID2 = Process.FIRST_APPLICATION_UID + 272;
-
-    private static final int NUM_CPU_FREQS = 2 + 2;  // 2 clusters * 2 freqs each
-
-    @Rule
-    public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule()
-            .setAveragePower(PowerProfile.POWER_CPU_ACTIVE, 720)
-            .setNumCpuClusters(2)
-            .setNumSpeedStepsInCpuCluster(0, 2)
-            .setNumSpeedStepsInCpuCluster(1, 2)
-            .setAveragePowerForCpuCluster(0, 360)
-            .setAveragePowerForCpuCluster(1, 480)
-            .setAveragePowerForCpuCore(0, 0, 300)
-            .setAveragePowerForCpuCore(0, 1, 400)
-            .setAveragePowerForCpuCore(1, 0, 500)
-            .setAveragePowerForCpuCore(1, 1, 600);
-
-    private final KernelCpuSpeedReader[] mMockKernelCpuSpeedReaders = new KernelCpuSpeedReader[]{
-            mock(KernelCpuSpeedReader.class),
-            mock(KernelCpuSpeedReader.class),
-    };
-
-    @Mock
-    private BatteryStatsImpl.UserInfoProvider mMockUserInfoProvider;
-    @Mock
-    private KernelCpuUidTimeReader.KernelCpuUidClusterTimeReader mMockKernelCpuUidClusterTimeReader;
-    @Mock
-    private KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader mMockCpuUidFreqTimeReader;
-    @Mock
-    private KernelCpuUidTimeReader.KernelCpuUidUserSysTimeReader mMockKernelCpuUidUserSysTimeReader;
-    @Mock
-    private KernelCpuUidTimeReader.KernelCpuUidActiveTimeReader mMockKerneCpuUidActiveTimeReader;
-    @Mock
-    private SystemServerCpuThreadReader mMockSystemServerCpuThreadReader;
-    @Mock
-    private KernelSingleUidTimeReader mMockKernelSingleUidTimeReader;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-
-        final boolean[] supportedPowerBuckets =
-                new boolean[EnergyConsumerStats.NUMBER_STANDARD_POWER_BUCKETS];
-        supportedPowerBuckets[EnergyConsumerStats.POWER_BUCKET_CPU] = true;
-
-        when(mMockCpuUidFreqTimeReader.isFastCpuTimesReader()).thenReturn(true);
-
-        mStatsRule.getBatteryStats()
-                .setUserInfoProvider(mMockUserInfoProvider)
-                .setKernelCpuSpeedReaders(mMockKernelCpuSpeedReaders)
-                .setKernelCpuUidFreqTimeReader(mMockCpuUidFreqTimeReader)
-                .setKernelCpuUidClusterTimeReader(mMockKernelCpuUidClusterTimeReader)
-                .setKernelCpuUidUserSysTimeReader(mMockKernelCpuUidUserSysTimeReader)
-                .setKernelCpuUidActiveTimeReader(mMockKerneCpuUidActiveTimeReader)
-                .setKernelSingleUidTimeReader(mMockKernelSingleUidTimeReader)
-                .setSystemServerCpuThreadReader(mMockSystemServerCpuThreadReader)
-                .initEnergyConsumerStatsLocked(supportedPowerBuckets, new String[0]);
-    }
-
-    @Test
-    public void testTimerBasedModel() {
-        when(mMockUserInfoProvider.exists(anyInt())).thenReturn(true);
-
-        when(mMockKernelCpuSpeedReaders[0].readDelta()).thenReturn(new long[]{1000, 2000});
-        when(mMockKernelCpuSpeedReaders[1].readDelta()).thenReturn(new long[]{3000, 4000});
-
-        when(mMockCpuUidFreqTimeReader.perClusterTimesAvailable()).thenReturn(false);
-
-        mStatsRule.setTime(1000, 1000);
-
-        // Initialize active CPU time
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<Long> callback = invocation.getArgument(0);
-            callback.onUidCpuTime(APP_UID1, 1000L);
-            callback.onUidCpuTime(APP_UID2, 3000L);
-            return null;
-        }).when(mMockKerneCpuUidActiveTimeReader).readAbsolute(any());
-
-        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, null);
-
-        mStatsRule.setTime(2000, 2000);
-
-        // User/System CPU time
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
-            // User/system time in microseconds
-            callback.onUidCpuTime(APP_UID1, new long[]{1111000, 2222000});
-            callback.onUidCpuTime(APP_UID2, new long[]{3333000, 4444000});
-            return null;
-        }).when(mMockKernelCpuUidUserSysTimeReader).readDelta(anyBoolean(), any());
-
-        // Active CPU time
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<Long> callback = invocation.getArgument(0);
-            callback.onUidCpuTime(APP_UID1, 2111L);
-            callback.onUidCpuTime(APP_UID2, 6333L);
-            return null;
-        }).when(mMockKerneCpuUidActiveTimeReader).readAbsolute(any());
-
-        // Per-cluster CPU time
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
-            callback.onUidCpuTime(APP_UID1, new long[]{1111, 2222});
-            callback.onUidCpuTime(APP_UID2, new long[]{3333, 4444});
-            return null;
-        }).when(mMockKernelCpuUidClusterTimeReader).readDelta(anyBoolean(), any());
-
-        // Per-frequency CPU time
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
-            callback.onUidCpuTime(APP_UID1, new long[]{1100, 11, 2200, 22});
-            callback.onUidCpuTime(APP_UID2, new long[]{3300, 33, 4400, 44});
-            return null;
-        }).when(mMockCpuUidFreqTimeReader).readDelta(anyBoolean(), any());
-
-        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, null);
-
-        mStatsRule.getUidStats(APP_UID1).getProcessStatsLocked("foo").addCpuTimeLocked(4321, 1234);
-        mStatsRule.getUidStats(APP_UID1).getProcessStatsLocked("bar").addCpuTimeLocked(5432, 2345);
-
-        CpuPowerCalculator calculator =
-                new CpuPowerCalculator(mStatsRule.getPowerProfile());
-
-        mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
-
-        UidBatteryConsumer uidConsumer1 = mStatsRule.getUidBatteryConsumer(APP_UID1);
-        assertThat(uidConsumer1.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isEqualTo(3333);
-        assertThat(uidConsumer1.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isWithin(PRECISION).of(1.031677);
-        assertThat(uidConsumer1.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-        assertThat(uidConsumer1.getPackageWithHighestDrain()).isEqualTo("bar");
-
-        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
-        assertThat(uidConsumer2.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isEqualTo(7777);
-        assertThat(uidConsumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isWithin(PRECISION).of(2.489544);
-        assertThat(uidConsumer2.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-        assertThat(uidConsumer2.getPackageWithHighestDrain()).isNull();
-
-        final BatteryConsumer deviceBatteryConsumer = mStatsRule.getDeviceBatteryConsumer();
-        assertThat(deviceBatteryConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isWithin(PRECISION).of(3.52122);
-        assertThat(deviceBatteryConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-
-        final BatteryConsumer appsBatteryConsumer = mStatsRule.getAppsBatteryConsumer();
-        assertThat(appsBatteryConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isWithin(PRECISION).of(3.52122);
-        assertThat(appsBatteryConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-    }
-
-    @Test
-    public void testMeasuredEnergyBasedModel() {
-        when(mMockUserInfoProvider.exists(anyInt())).thenReturn(true);
-
-        when(mMockKernelCpuSpeedReaders[0].readDelta()).thenReturn(new long[]{1000, 2000});
-        when(mMockKernelCpuSpeedReaders[1].readDelta()).thenReturn(new long[]{3000, 4000});
-
-        when(mMockCpuUidFreqTimeReader.perClusterTimesAvailable()).thenReturn(false);
-
-        // User/System CPU time
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
-            // User/system time in microseconds
-            callback.onUidCpuTime(APP_UID1, new long[]{1111000, 2222000});
-            callback.onUidCpuTime(APP_UID2, new long[]{3333000, 4444000});
-            return null;
-        }).when(mMockKernelCpuUidUserSysTimeReader).readDelta(anyBoolean(), any());
-
-        // Per-cluster CPU time
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
-            callback.onUidCpuTime(APP_UID1, new long[]{1111, 2222});
-            callback.onUidCpuTime(APP_UID2, new long[]{3333, 4444});
-            return null;
-        }).when(mMockKernelCpuUidClusterTimeReader).readDelta(anyBoolean(), any());
-
-        final long[] clusterChargesUC = new long[]{13577531, 24688642};
-        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, clusterChargesUC);
-
-        mStatsRule.getUidStats(APP_UID1).getProcessStatsLocked("foo").addCpuTimeLocked(4321, 1234);
-        mStatsRule.getUidStats(APP_UID1).getProcessStatsLocked("bar").addCpuTimeLocked(5432, 2345);
-
-        CpuPowerCalculator calculator =
-                new CpuPowerCalculator(mStatsRule.getPowerProfile());
-
-        mStatsRule.apply(calculator);
-
-        UidBatteryConsumer uidConsumer1 = mStatsRule.getUidBatteryConsumer(APP_UID1);
-        assertThat(uidConsumer1.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isEqualTo(3333);
-        assertThat(uidConsumer1.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isWithin(PRECISION).of(3.18877);
-        assertThat(uidConsumer1.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-        assertThat(uidConsumer1.getPackageWithHighestDrain()).isEqualTo("bar");
-
-        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
-        assertThat(uidConsumer2.getUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isEqualTo(7777);
-        assertThat(uidConsumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isWithin(PRECISION).of(7.44072);
-        assertThat(uidConsumer2.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-        assertThat(uidConsumer2.getPackageWithHighestDrain()).isNull();
-
-        final BatteryConsumer deviceBatteryConsumer = mStatsRule.getDeviceBatteryConsumer();
-        assertThat(deviceBatteryConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isWithin(PRECISION).of(10.62949);
-        assertThat(deviceBatteryConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-
-        final BatteryConsumer appsBatteryConsumer = mStatsRule.getDeviceBatteryConsumer();
-        assertThat(appsBatteryConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isWithin(PRECISION).of(10.62949);
-        assertThat(appsBatteryConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-    }
-
-    @Test
-    public void testTimerBasedModel_byProcessState() {
-        when(mMockUserInfoProvider.exists(anyInt())).thenReturn(true);
-
-        when(mMockCpuUidFreqTimeReader.allUidTimesAvailable()).thenReturn(true);
-        when(mMockCpuUidFreqTimeReader.readFreqs(any())).thenReturn(new long[]{100, 200, 300, 400});
-
-        when(mMockKernelSingleUidTimeReader.singleUidCpuTimesAvailable()).thenReturn(true);
-
-        SparseArray<long[]> allUidCpuFreqTimeMs = new SparseArray<>();
-        allUidCpuFreqTimeMs.put(APP_UID1, new long[0]);
-        allUidCpuFreqTimeMs.put(APP_UID2, new long[0]);
-        when(mMockCpuUidFreqTimeReader.getAllUidCpuFreqTimeMs()).thenReturn(allUidCpuFreqTimeMs);
-
-        mStatsRule.setTime(1000, 1000);
-
-        mStatsRule.getUidStats(APP_UID1).setProcessStateForTest(
-                BatteryStats.Uid.PROCESS_STATE_FOREGROUND, 1000);
-        mStatsRule.getUidStats(APP_UID2).setProcessStateForTest(
-                BatteryStats.Uid.PROCESS_STATE_BACKGROUND, 1000);
-
-        // Initialize time-in-state counts to 0
-        mockSingleUidTimeReader(APP_UID1, new long[NUM_CPU_FREQS]);
-        mockSingleUidTimeReader(APP_UID2, new long[NUM_CPU_FREQS]);
-
-        // Active CPU time
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<Long> callback = invocation.getArgument(0);
-            callback.onUidCpuTime(APP_UID1, 1111L);
-            callback.onUidCpuTime(APP_UID2, 3333L);
-            return null;
-        }).when(mMockKerneCpuUidActiveTimeReader).readAbsolute(any());
-
-        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, null);
-        mStatsRule.getBatteryStats().updateCpuTimesForAllUids();
-
-        mockSingleUidTimeReader(APP_UID1, new long[]{1000, 2000, 3000, 4000});
-        mockSingleUidTimeReader(APP_UID2, new long[]{1111, 2222, 3333, 4444});
-
-        mStatsRule.setTime(2000, 2000);
-
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<Long> callback = invocation.getArgument(0);
-            callback.onUidCpuTime(APP_UID1, 2222L);
-            callback.onUidCpuTime(APP_UID2, 6666L);
-            return null;
-        }).when(mMockKerneCpuUidActiveTimeReader).readAbsolute(any());
-
-        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, null);
-        mStatsRule.getBatteryStats().updateCpuTimesForAllUids();
-
-        mockSingleUidTimeReader(APP_UID1, new long[] {5000, 6000, 7000, 8000});
-        mockSingleUidTimeReader(APP_UID2, new long[]{5555, 6666, 7777, 8888});
-
-        mStatsRule.getUidStats(APP_UID1).setProcessStateForTest(
-                BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE, 2000);
-        mStatsRule.getUidStats(APP_UID2).setProcessStateForTest(
-                BatteryStats.Uid.PROCESS_STATE_TOP, 2000);
-
-        mStatsRule.setTime(3000, 3000);
-
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<Long> callback = invocation.getArgument(0);
-            callback.onUidCpuTime(APP_UID1, 3333L);
-            callback.onUidCpuTime(APP_UID2, 8888L);
-            return null;
-        }).when(mMockKerneCpuUidActiveTimeReader).readAbsolute(any());
-
-        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, null);
-        mStatsRule.getBatteryStats().updateCpuTimesForAllUids();
-
-        CpuPowerCalculator calculator =
-                new CpuPowerCalculator(mStatsRule.getPowerProfile());
-
-        mStatsRule.apply(new BatteryUsageStatsQuery.Builder()
-                .powerProfileModeledOnly()
-                .includePowerModels()
-                .includeProcessStateData()
-                .build(), calculator);
-
-        UidBatteryConsumer uidConsumer1 = mStatsRule.getUidBatteryConsumer(APP_UID1);
-        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
-
-        final BatteryConsumer.Key foreground = uidConsumer1.getKey(
-                BatteryConsumer.POWER_COMPONENT_CPU,
-                BatteryConsumer.PROCESS_STATE_FOREGROUND);
-        final BatteryConsumer.Key background = uidConsumer1.getKey(
-                BatteryConsumer.POWER_COMPONENT_CPU,
-                BatteryConsumer.PROCESS_STATE_BACKGROUND);
-        final BatteryConsumer.Key fgs = uidConsumer1.getKey(
-                BatteryConsumer.POWER_COMPONENT_CPU,
-                BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE);
-
-        assertThat(uidConsumer1.getConsumedPower(foreground)).isWithin(PRECISION).of(1.611088);
-        assertThat(uidConsumer1.getConsumedPower(background)).isWithin(PRECISION).of(0);
-        assertThat(uidConsumer1.getConsumedPower(fgs)).isWithin(PRECISION).of(2.2222);
-        assertThat(uidConsumer2.getConsumedPower(foreground)).isWithin(PRECISION).of(2.6664);
-        assertThat(uidConsumer2.getConsumedPower(background)).isWithin(PRECISION).of(2.209655);
-        assertThat(uidConsumer2.getConsumedPower(fgs)).isWithin(PRECISION).of(0);
-    }
-
-    private void mockSingleUidTimeReader(int uid, long[] cpuTimes) {
-        doAnswer(invocation -> {
-            LongArrayMultiStateCounter counter = invocation.getArgument(1);
-            long timestampMs = invocation.getArgument(2);
-            LongArrayMultiStateCounter.LongArrayContainer container =
-                    new LongArrayMultiStateCounter.LongArrayContainer(NUM_CPU_FREQS);
-            container.setValues(cpuTimes);
-            counter.updateValues(container, timestampMs);
-            return null;
-        }).when(mMockKernelSingleUidTimeReader).addDelta(eq(uid),
-                any(LongArrayMultiStateCounter.class), anyLong());
-    }
-
-    @Test
-    public void testMeasuredEnergyBasedModel_perProcessState() {
-        when(mMockUserInfoProvider.exists(anyInt())).thenReturn(true);
-
-        when(mMockKernelCpuSpeedReaders[0].readDelta()).thenReturn(new long[]{1000, 2000});
-        when(mMockKernelCpuSpeedReaders[1].readDelta()).thenReturn(new long[]{3000, 4000});
-
-        when(mMockCpuUidFreqTimeReader.perClusterTimesAvailable()).thenReturn(false);
-
-        mStatsRule.setTime(1000, 1000);
-
-        mStatsRule.getUidStats(APP_UID1).setProcessStateForTest(
-                BatteryStats.Uid.PROCESS_STATE_FOREGROUND, 1000);
-        mStatsRule.getUidStats(APP_UID2).setProcessStateForTest(
-                BatteryStats.Uid.PROCESS_STATE_BACKGROUND, 1000);
-
-        // User/System CPU time
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
-            // User/system time in microseconds
-            callback.onUidCpuTime(APP_UID1, new long[]{1111000, 2222000});
-            callback.onUidCpuTime(APP_UID2, new long[]{3333000, 4444000});
-            return null;
-        }).when(mMockKernelCpuUidUserSysTimeReader).readDelta(anyBoolean(), any());
-
-        // Per-frequency CPU time
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
-            callback.onUidCpuTime(APP_UID1, new long[]{1100, 11, 2200, 22});
-            callback.onUidCpuTime(APP_UID2, new long[]{3300, 33, 4400, 44});
-            return null;
-        }).when(mMockCpuUidFreqTimeReader).readDelta(anyBoolean(), any());
-
-        mStatsRule.setTime(2000, 2000);
-        final long[] clusterChargesUC = new long[]{13577531, 24688642};
-        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, clusterChargesUC);
-
-        mStatsRule.getUidStats(APP_UID1).setProcessStateForTest(
-                BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE, 2000);
-        mStatsRule.getUidStats(APP_UID2).setProcessStateForTest(
-                BatteryStats.Uid.PROCESS_STATE_TOP, 2000);
-
-        // User/System CPU time
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
-            // User/system time in microseconds
-            callback.onUidCpuTime(APP_UID1, new long[]{5555000, 6666000});
-            callback.onUidCpuTime(APP_UID2, new long[]{7777000, 8888000});
-            return null;
-        }).when(mMockKernelCpuUidUserSysTimeReader).readDelta(anyBoolean(), any());
-
-        // Per-frequency CPU time
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
-            callback.onUidCpuTime(APP_UID1, new long[]{5500, 55, 6600, 66});
-            callback.onUidCpuTime(APP_UID2, new long[]{7700, 77, 8800, 88});
-            return null;
-        }).when(mMockCpuUidFreqTimeReader).readDelta(anyBoolean(), any());
-
-        mStatsRule.setTime(3000, 3000);
-
-        clusterChargesUC[0] += 10000000;
-        clusterChargesUC[1] += 20000000;
-        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, clusterChargesUC);
-
-        CpuPowerCalculator calculator =
-                new CpuPowerCalculator(mStatsRule.getPowerProfile());
-
-        mStatsRule.apply(new BatteryUsageStatsQuery.Builder()
-                .includePowerModels()
-                .includeProcessStateData()
-                .build(), calculator);
-
-        UidBatteryConsumer uidConsumer1 = mStatsRule.getUidBatteryConsumer(APP_UID1);
-        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
-
-        final BatteryConsumer.Key foreground = uidConsumer1.getKey(
-                BatteryConsumer.POWER_COMPONENT_CPU,
-                BatteryConsumer.PROCESS_STATE_FOREGROUND);
-        final BatteryConsumer.Key background = uidConsumer1.getKey(
-                BatteryConsumer.POWER_COMPONENT_CPU,
-                BatteryConsumer.PROCESS_STATE_BACKGROUND);
-        final BatteryConsumer.Key fgs = uidConsumer1.getKey(
-                BatteryConsumer.POWER_COMPONENT_CPU,
-                BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE);
-
-        assertThat(uidConsumer1.getConsumedPower(foreground)).isWithin(PRECISION).of(3.18884);
-        assertThat(uidConsumer1.getConsumedPower(background)).isWithin(PRECISION).of(0);
-        assertThat(uidConsumer1.getConsumedPower(fgs)).isWithin(PRECISION).of(8.02273);
-        assertThat(uidConsumer2.getConsumedPower(foreground)).isWithin(PRECISION).of(10.94009);
-        assertThat(uidConsumer2.getConsumedPower(background)).isWithin(PRECISION).of(7.44064);
-        assertThat(uidConsumer2.getConsumedPower(fgs)).isWithin(PRECISION).of(0);
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/KernelWakelockReaderTest.java b/services/tests/servicestests/src/com/android/server/power/stats/KernelWakelockReaderTest.java
deleted file mode 100644
index 70643d9..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/KernelWakelockReaderTest.java
+++ /dev/null
@@ -1,411 +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.server.power.stats;
-
-import android.system.suspend.internal.WakeLockInfo;
-
-import androidx.test.filters.SmallTest;
-
-import junit.framework.TestCase;
-
-import java.nio.charset.Charset;
-
-public class KernelWakelockReaderTest extends TestCase {
-    /**
-     * Helper class that builds the mock Kernel module file /d/wakeup_sources.
-     */
-    private static class ProcFileBuilder {
-        private final static String sHeader = "name\t\tactive_count\tevent_count\twakeup_count\t" +
-                "expire_count\tactive_since\ttotal_time\tmax_time\tlast_change\t" +
-                "prevent_suspend_time\n";
-
-        private StringBuilder mStringBuilder;
-
-        private void ensureHeader() {
-            if (mStringBuilder == null) {
-                mStringBuilder = new StringBuilder();
-                mStringBuilder.append(sHeader);
-            }
-        }
-
-        public ProcFileBuilder addLine(String name, int count, long timeMillis) {
-            ensureHeader();
-            mStringBuilder.append(name).append("\t").append(count).append("\t0\t0\t0\t0\t")
-                    .append(timeMillis).append("\t0\t0\t0\n");
-            return this;
-        }
-
-        public byte[] getBytes() throws Exception {
-            ensureHeader();
-            byte[] data = mStringBuilder.toString().getBytes(Charset.forName("UTF-8"));
-
-            // The Kernel puts a \0 at the end of the data. Since each of our lines ends with \n,
-            // we override the last \n with a \0.
-            data[data.length - 1] = 0;
-            return data;
-        }
-    }
-
-    /**
-     * Helper method to create WakeLockInfo object.
-     * @param totalTime is time in microseconds.
-     * @return the created WakeLockInfo object.
-     */
-    private WakeLockInfo createWakeLockInfo(String name, int activeCount, long totalTime) {
-        WakeLockInfo info = new WakeLockInfo();
-        info.name = name;
-        info.activeCount = activeCount;
-        info.totalTime = totalTime;
-        return info;
-    }
-
-    /**
-     * Helper method for KernelWakeLockReader::readKernelWakelockStats(...)
-     * @param staleStats existing stats to update.
-     * @param buffer representation of mock kernel module file /d/wakeup_sources.
-     * @param wlStats mock WakeLockInfo list returned from ISuspendControlService.
-     * @return the updated stats.
-     */
-    private KernelWakelockStats readKernelWakelockStats(KernelWakelockStats staleStats,
-                                                        byte[] buffer, WakeLockInfo[] wlStats) {
-        mReader.updateVersion(staleStats);
-        mReader.parseProcWakelocks(buffer, buffer.length, true, staleStats);
-        mReader.updateWakelockStats(wlStats, staleStats);
-        return mReader.removeOldStats(staleStats);
-    }
-
-    private KernelWakelockReader mReader;
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        mReader = new KernelWakelockReader();
-    }
-
-// ------------------------- Legacy Wakelock Stats Test ------------------------
-    @SmallTest
-    public void testParseEmptyFile() throws Exception {
-        KernelWakelockStats staleStats = mReader.parseProcWakelocks(new byte[0], 0, true,
-                new KernelWakelockStats());
-
-        assertTrue(staleStats.isEmpty());
-    }
-
-    @SmallTest
-    public void testOnlyHeader() throws Exception {
-        byte[] buffer = new ProcFileBuilder().getBytes();
-
-        KernelWakelockStats staleStats = mReader.parseProcWakelocks(buffer, buffer.length, true,
-                new KernelWakelockStats());
-
-        assertTrue(staleStats.isEmpty());
-    }
-
-    @SmallTest
-    public void testOneWakelock() throws Exception {
-        byte[] buffer = new ProcFileBuilder()
-                .addLine("Wakelock", 34, 123) // Milliseconds
-                .getBytes();
-
-        KernelWakelockStats staleStats = mReader.parseProcWakelocks(buffer, buffer.length, true,
-                new KernelWakelockStats());
-
-        assertEquals(1, staleStats.size());
-
-        assertTrue(staleStats.containsKey("Wakelock"));
-
-        KernelWakelockStats.Entry entry = staleStats.get("Wakelock");
-        assertEquals(34, entry.mCount);
-        assertEquals(123 * 1000, entry.mTotalTime); // Microseconds
-    }
-
-    @SmallTest
-    public void testTwoWakelocks() throws Exception {
-        byte[] buffer = new ProcFileBuilder()
-                .addLine("Wakelock", 1, 10)
-                .addLine("Fakelock", 2, 20)
-                .getBytes();
-
-        KernelWakelockStats staleStats = mReader.parseProcWakelocks(buffer, buffer.length, true,
-                new KernelWakelockStats());
-
-        assertEquals(2, staleStats.size());
-
-        assertTrue(staleStats.containsKey("Wakelock"));
-        assertTrue(staleStats.containsKey("Fakelock"));
-    }
-
-    @SmallTest
-    public void testDuplicateWakelocksAccumulate() throws Exception {
-        byte[] buffer = new ProcFileBuilder()
-                .addLine("Wakelock", 1, 10) // Milliseconds
-                .addLine("Wakelock", 1, 10) // Milliseconds
-                .getBytes();
-
-        KernelWakelockStats staleStats = mReader.parseProcWakelocks(buffer, buffer.length, true,
-                new KernelWakelockStats());
-
-        assertEquals(1, staleStats.size());
-        assertTrue(staleStats.containsKey("Wakelock"));
-
-        KernelWakelockStats.Entry entry = staleStats.get("Wakelock");
-        assertEquals(2, entry.mCount);
-        assertEquals(20 * 1000, entry.mTotalTime); // Microseconds
-    }
-
-    @SmallTest
-    public void testWakelocksBecomeStale() throws Exception {
-        KernelWakelockStats staleStats = new KernelWakelockStats();
-
-        byte[] buffer = new ProcFileBuilder()
-                .addLine("Fakelock", 3, 30)
-                .getBytes();
-
-        readKernelWakelockStats(staleStats, buffer, new WakeLockInfo[0]);
-
-        assertEquals(1, staleStats.size());
-        assertTrue(staleStats.containsKey("Fakelock"));
-
-        buffer = new ProcFileBuilder()
-                .addLine("Wakelock", 1, 10)
-                .getBytes();
-
-        readKernelWakelockStats(staleStats, buffer, new WakeLockInfo[0]);
-
-        assertEquals(1, staleStats.size());
-        assertTrue(staleStats.containsKey("Wakelock"));
-        assertFalse(staleStats.containsKey("Fakelock"));
-    }
-
-// -------------------- SystemSuspend Wakelock Stats Test -------------------
-    @SmallTest
-    public void testEmptyWakeLockInfoList() {
-        KernelWakelockStats staleStats = mReader.updateWakelockStats(new WakeLockInfo[0],
-                new KernelWakelockStats());
-
-        assertTrue(staleStats.isEmpty());
-    }
-
-    @SmallTest
-    public void testOneWakeLockInfo() {
-        WakeLockInfo[] wlStats = new WakeLockInfo[1];
-        wlStats[0] = createWakeLockInfo("WakeLock", 20, 1000);   // Milliseconds
-
-        KernelWakelockStats staleStats = mReader.updateWakelockStats(wlStats,
-                new KernelWakelockStats());
-
-        assertEquals(1, staleStats.size());
-
-        assertTrue(staleStats.containsKey("WakeLock"));
-
-        KernelWakelockStats.Entry entry = staleStats.get("WakeLock");
-        assertEquals(20, entry.mCount);
-        assertEquals(1000 * 1000, entry.mTotalTime);   // Microseconds
-    }
-
-    @SmallTest
-    public void testTwoWakeLockInfos() {
-        WakeLockInfo[] wlStats = new WakeLockInfo[2];
-        wlStats[0] = createWakeLockInfo("WakeLock1", 10, 1000); // Milliseconds
-        wlStats[1] = createWakeLockInfo("WakeLock2", 20, 2000); // Milliseconds
-
-        KernelWakelockStats staleStats = mReader.updateWakelockStats(wlStats,
-                new KernelWakelockStats());
-
-        assertEquals(2, staleStats.size());
-
-        assertTrue(staleStats.containsKey("WakeLock1"));
-        assertTrue(staleStats.containsKey("WakeLock2"));
-
-        KernelWakelockStats.Entry entry1 = staleStats.get("WakeLock1");
-        assertEquals(10, entry1.mCount);
-        assertEquals(1000 * 1000, entry1.mTotalTime); // Microseconds
-
-        KernelWakelockStats.Entry entry2 = staleStats.get("WakeLock2");
-        assertEquals(20, entry2.mCount);
-        assertEquals(2000 * 1000, entry2.mTotalTime); // Microseconds
-    }
-
-    @SmallTest
-    public void testWakeLockInfosBecomeStale() {
-        WakeLockInfo[] wlStats = new WakeLockInfo[1];
-        wlStats[0] = createWakeLockInfo("WakeLock1", 10, 1000); // Milliseconds
-
-        KernelWakelockStats staleStats = new KernelWakelockStats();
-
-        readKernelWakelockStats(staleStats, new byte[0], wlStats);
-
-        assertEquals(1, staleStats.size());
-
-        assertTrue(staleStats.containsKey("WakeLock1"));
-        KernelWakelockStats.Entry entry = staleStats.get("WakeLock1");
-        assertEquals(10, entry.mCount);
-        assertEquals(1000 * 1000, entry.mTotalTime);  // Microseconds
-
-        wlStats[0] = createWakeLockInfo("WakeLock2", 20, 2000); // Milliseconds
-
-        readKernelWakelockStats(staleStats, new byte[0], wlStats);
-
-        assertEquals(1, staleStats.size());
-
-        assertFalse(staleStats.containsKey("WakeLock1"));
-        assertTrue(staleStats.containsKey("WakeLock2"));
-        entry = staleStats.get("WakeLock2");
-        assertEquals(20, entry.mCount);
-        assertEquals(2000 * 1000, entry.mTotalTime); // Micro seconds
-    }
-
-// -------------------- Aggregate  Wakelock Stats Tests --------------------
-    @SmallTest
-    public void testAggregateStatsEmpty() throws Exception {
-        KernelWakelockStats staleStats = new KernelWakelockStats();
-
-        byte[] buffer = new byte[0];
-        WakeLockInfo[] wlStats = new WakeLockInfo[0];
-
-        readKernelWakelockStats(staleStats, buffer, wlStats);
-
-        assertTrue(staleStats.isEmpty());
-    }
-
-    @SmallTest
-    public void testAggregateStatsNoNativeWakelocks() throws Exception {
-        KernelWakelockStats staleStats = new KernelWakelockStats();
-
-        byte[] buffer = new ProcFileBuilder()
-                .addLine("Wakelock", 34, 123) // Milliseconds
-                .getBytes();
-        WakeLockInfo[] wlStats = new WakeLockInfo[0];
-
-        readKernelWakelockStats(staleStats, buffer, wlStats);
-
-        assertEquals(1, staleStats.size());
-
-        assertTrue(staleStats.containsKey("Wakelock"));
-
-        KernelWakelockStats.Entry entry = staleStats.get("Wakelock");
-        assertEquals(34, entry.mCount);
-        assertEquals(1000 * 123, entry.mTotalTime);  // Microseconds
-    }
-
-    @SmallTest
-    public void testAggregateStatsNoKernelWakelocks() throws Exception {
-        KernelWakelockStats staleStats = new KernelWakelockStats();
-
-        byte[] buffer = new byte[0];
-        WakeLockInfo[] wlStats = new WakeLockInfo[1];
-        wlStats[0] = createWakeLockInfo("WakeLock", 10, 1000);  // Milliseconds
-
-        readKernelWakelockStats(staleStats, buffer, wlStats);
-
-        assertEquals(1, staleStats.size());
-
-        assertTrue(staleStats.containsKey("WakeLock"));
-
-        KernelWakelockStats.Entry entry = staleStats.get("WakeLock");
-        assertEquals(10, entry.mCount);
-        assertEquals(1000 * 1000, entry.mTotalTime);  // Microseconds
-    }
-
-    @SmallTest
-    public void testAggregateStatsBothKernelAndNativeWakelocks() throws Exception {
-        KernelWakelockStats staleStats = new KernelWakelockStats();
-
-        byte[] buffer = new ProcFileBuilder()
-                .addLine("WakeLock1", 34, 123)  // Milliseconds
-                .getBytes();
-        WakeLockInfo[] wlStats = new WakeLockInfo[1];
-        wlStats[0] = createWakeLockInfo("WakeLock2", 10, 1000); // Milliseconds
-
-        readKernelWakelockStats(staleStats, buffer, wlStats);
-
-        assertEquals(2, staleStats.size());
-
-        assertTrue(staleStats.containsKey("WakeLock1"));
-        KernelWakelockStats.Entry entry1 = staleStats.get("WakeLock1");
-        assertEquals(34, entry1.mCount);
-        assertEquals(123 * 1000, entry1.mTotalTime);  // Microseconds
-
-        assertTrue(staleStats.containsKey("WakeLock2"));
-        KernelWakelockStats.Entry entry2 = staleStats.get("WakeLock2");
-        assertEquals(10, entry2.mCount);
-        assertEquals(1000 * 1000, entry2.mTotalTime);  // Microseconds
-    }
-
-    @SmallTest
-    public void testAggregateStatsUpdate() throws Exception {
-        KernelWakelockStats staleStats = new KernelWakelockStats();
-
-        byte[] buffer = new ProcFileBuilder()
-                .addLine("WakeLock1", 34, 123)  // Milliseconds
-                .addLine("WakeLock2", 46, 345)  // Milliseconds
-                .getBytes();
-        WakeLockInfo[] wlStats = new WakeLockInfo[2];
-        wlStats[0] = createWakeLockInfo("WakeLock3", 10, 1000); // Milliseconds
-        wlStats[1] = createWakeLockInfo("WakeLock4", 20, 2000); // Milliseconds
-
-        readKernelWakelockStats(staleStats, buffer, wlStats);
-
-        assertEquals(4, staleStats.size());
-
-        assertTrue(staleStats.containsKey("WakeLock1"));
-        assertTrue(staleStats.containsKey("WakeLock2"));
-        assertTrue(staleStats.containsKey("WakeLock3"));
-        assertTrue(staleStats.containsKey("WakeLock4"));
-
-        KernelWakelockStats.Entry entry1 = staleStats.get("WakeLock1");
-        assertEquals(34, entry1.mCount);
-        assertEquals(123 * 1000, entry1.mTotalTime); // Microseconds
-
-        KernelWakelockStats.Entry entry2 = staleStats.get("WakeLock2");
-        assertEquals(46, entry2.mCount);
-        assertEquals(345 * 1000, entry2.mTotalTime); // Microseconds
-
-        KernelWakelockStats.Entry entry3 = staleStats.get("WakeLock3");
-        assertEquals(10, entry3.mCount);
-        assertEquals(1000 * 1000, entry3.mTotalTime); // Microseconds
-
-        KernelWakelockStats.Entry entry4 = staleStats.get("WakeLock4");
-        assertEquals(20, entry4.mCount);
-        assertEquals(2000 * 1000, entry4.mTotalTime); // Microseconds
-
-        buffer = new ProcFileBuilder()
-                .addLine("WakeLock1", 45, 789)  // Milliseconds
-                .addLine("WakeLock1", 56, 123)  // Milliseconds
-                .getBytes();
-        wlStats = new WakeLockInfo[1];
-        wlStats[0] = createWakeLockInfo("WakeLock4", 40, 4000); // Milliseconds
-
-        readKernelWakelockStats(staleStats, buffer, wlStats);
-
-        assertEquals(2, staleStats.size());
-
-        assertTrue(staleStats.containsKey("WakeLock1"));
-        assertTrue(staleStats.containsKey("WakeLock4"));
-
-        assertFalse(staleStats.containsKey("WakeLock2"));
-        assertFalse(staleStats.containsKey("WakeLock3"));
-
-        entry1 = staleStats.get("WakeLock1");
-        assertEquals(45 + 56, entry1.mCount);
-        assertEquals((789 + 123) * 1000, entry1.mTotalTime);  // Microseconds
-
-        entry2 = staleStats.get("WakeLock4");
-        assertEquals(40, entry2.mCount);
-        assertEquals(4000 * 1000, entry4.mTotalTime); // Microseconds
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/MobileRadioPowerCalculatorTest.java b/services/tests/servicestests/src/com/android/server/power/stats/MobileRadioPowerCalculatorTest.java
deleted file mode 100644
index 2e647c4..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/MobileRadioPowerCalculatorTest.java
+++ /dev/null
@@ -1,1022 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.power.stats;
-
-import static android.net.NetworkStats.DEFAULT_NETWORK_NO;
-import static android.net.NetworkStats.METERED_NO;
-import static android.net.NetworkStats.ROAMING_NO;
-import static android.os.BatteryStats.POWER_DATA_UNAVAILABLE;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import android.app.usage.NetworkStatsManager;
-import android.hardware.radio.V1_5.AccessNetwork;
-import android.net.NetworkCapabilities;
-import android.net.NetworkStats;
-import android.os.BatteryConsumer;
-import android.os.BatteryStats;
-import android.os.BatteryUsageStatsQuery;
-import android.os.Process;
-import android.os.UidBatteryConsumer;
-import android.telephony.ActivityStatsTechSpecificInfo;
-import android.telephony.CellSignalStrength;
-import android.telephony.DataConnectionRealTimeInfo;
-import android.telephony.ModemActivityInfo;
-import android.telephony.ServiceState;
-import android.telephony.SignalStrength;
-import android.telephony.TelephonyManager;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.frameworks.servicestests.R;
-
-import com.google.common.collect.Range;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-
-import java.util.ArrayList;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-@SuppressWarnings("GuardedBy")
-public class MobileRadioPowerCalculatorTest {
-    private static final double PRECISION = 0.00001;
-    private static final int APP_UID = Process.FIRST_APPLICATION_UID + 42;
-    private static final int APP_UID2 = Process.FIRST_APPLICATION_UID + 101;
-    @Mock
-    NetworkStatsManager mNetworkStatsManager;
-
-    @Rule
-    public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule();
-
-    @Test
-    public void testCounterBasedModel() {
-        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_modem_calculator)
-                .initMeasuredEnergyStatsLocked();
-        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
-
-        // Scan for a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
-                TelephonyManager.SIM_STATE_READY,
-                2000, 2000);
-
-        // Found a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
-                5000, 5000);
-
-        ArrayList<CellSignalStrength> perRatCellStrength = new ArrayList();
-        CellSignalStrength gsmSignalStrength = mock(CellSignalStrength.class);
-        when(gsmSignalStrength.getLevel()).thenReturn(
-                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        perRatCellStrength.add(gsmSignalStrength);
-
-        // Note cell signal strength
-        SignalStrength signalStrength = mock(SignalStrength.class);
-        when(signalStrength.getCellSignalStrengths()).thenReturn(perRatCellStrength);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
-
-        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                8_000_000_000L, APP_UID, 8000, 8000);
-
-        // Note established network
-        stats.noteNetworkInterfaceForTransports("cellular",
-                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
-
-        // Spend some time in each signal strength level. It doesn't matter how long.
-        // The ModemActivityInfo reported level residency should be trusted over the BatteryStats
-        // timers.
-        when(gsmSignalStrength.getLevel()).thenReturn(
-                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8111, 8111);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_POOR);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8333, 8333);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8666, 8666);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GOOD);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 9110, 9110);
-
-        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                9_500_000_000L, APP_UID2, 9500, 9500);
-
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GREAT);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 9665, 9665);
-
-        // Note application network activity
-        NetworkStats networkStats = new NetworkStats(10000, 1)
-                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
-                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 150, 2000, 30, 100))
-                .addEntry(new NetworkStats.Entry("cellular", APP_UID2, 0, 0,
-                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 500, 50, 300, 10, 111));
-        mStatsRule.setNetworkStats(networkStats);
-
-        ModemActivityInfo mai = new ModemActivityInfo(10000, 2000, 3000,
-                new int[]{100, 200, 300, 400, 500}, 600);
-        stats.noteModemControllerActivity(mai, POWER_DATA_UNAVAILABLE, 10000, 10000,
-                mNetworkStatsManager);
-
-        mStatsRule.setTime(10_000, 10_000);
-
-        MobileRadioPowerCalculator calculator =
-                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
-
-        mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
-
-        BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer();
-        //    720 mA * 100 ms  (level 0 TX drain rate * level 0 TX duration)
-        // + 1080 mA * 200 ms  (level 1 TX drain rate * level 1 TX duration)
-        // + 1440 mA * 300 ms  (level 2 TX drain rate * level 2 TX duration)
-        // + 1800 mA * 400 ms  (level 3 TX drain rate * level 3 TX duration)
-        // + 2160 mA * 500 ms  (level 4 TX drain rate * level 4 TX duration)
-        // + 1440 mA * 600 ms  (RX drain rate * RX duration)
-        // +  360 mA * 3000 ms (idle drain rate * idle duration)
-        // +   70 mA * 2000 ms (sleep drain rate * sleep duration)
-        // _________________
-        // =    4604000 mA-ms or 1.27888 mA-h
-        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(1.27888);
-        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-
-        //    720 mA * 100 ms  (level 0 TX drain rate * level 0 TX duration)
-        // + 1080 mA * 200 ms  (level 1 TX drain rate * level 1 TX duration)
-        // + 1440 mA * 300 ms  (level 2 TX drain rate * level 2 TX duration)
-        // + 1800 mA * 400 ms  (level 3 TX drain rate * level 3 TX duration)
-        // + 2160 mA * 500 ms  (level 4 TX drain rate * level 4 TX duration)
-        // + 1440 mA * 600 ms  (RX drain rate * RX duration)
-        // _________________
-        // =    3384000 mA-ms or 0.94 mA-h
-        BatteryConsumer appsConsumer = mStatsRule.getAppsBatteryConsumer();
-        assertThat(appsConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(0.94);
-        assertThat(appsConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-
-        // 3/4 of total packets were sent by APP_UID so 75% of total
-        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
-        assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(0.705);
-        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-
-        // Rest should go to the other app
-        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
-        assertThat(uidConsumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(0.235);
-        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-    }
-
-    @Test
-    public void testCounterBasedModel_multipleDefinedRat() {
-        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_modem_calculator_multiactive)
-                .initMeasuredEnergyStatsLocked();
-        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
-
-        // Scan for a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
-                TelephonyManager.SIM_STATE_READY,
-                2000, 2000);
-
-        // Found a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
-                5000, 5000);
-
-        ArrayList<CellSignalStrength> perRatCellStrength = new ArrayList();
-        CellSignalStrength gsmSignalStrength = mock(CellSignalStrength.class);
-        when(gsmSignalStrength.getLevel()).thenReturn(
-                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        perRatCellStrength.add(gsmSignalStrength);
-
-        // Note cell signal strength
-        SignalStrength signalStrength = mock(SignalStrength.class);
-        when(signalStrength.getCellSignalStrengths()).thenReturn(perRatCellStrength);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
-
-        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                8_000_000_000L, APP_UID, 8000, 8000);
-
-        // Note established network
-        stats.noteNetworkInterfaceForTransports("cellular",
-                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
-
-        // Spend some time in each signal strength level. It doesn't matter how long.
-        // The ModemActivityInfo reported level residency should be trusted over the BatteryStats
-        // timers.
-        when(gsmSignalStrength.getLevel()).thenReturn(
-                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8111, 8111);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_POOR);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8333, 8333);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8666, 8666);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GOOD);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 9110, 9110);
-
-        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                9_500_000_000L, APP_UID2, 9500, 9500);
-
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GREAT);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 9665, 9665);
-
-        // Note application network activity
-        NetworkStats networkStats = new NetworkStats(10000, 1)
-                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
-                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 150, 2000, 30, 100))
-                .addEntry(new NetworkStats.Entry("cellular", APP_UID2, 0, 0,
-                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 500, 50, 300, 10, 111));
-        mStatsRule.setNetworkStats(networkStats);
-
-        ActivityStatsTechSpecificInfo cdmaInfo = new ActivityStatsTechSpecificInfo(
-                AccessNetwork.CDMA2000, ServiceState.FREQUENCY_RANGE_UNKNOWN,
-                new int[]{10, 11, 12, 13, 14}, 15);
-        ActivityStatsTechSpecificInfo lteInfo = new ActivityStatsTechSpecificInfo(
-                AccessNetwork.EUTRAN, ServiceState.FREQUENCY_RANGE_UNKNOWN,
-                new int[]{20, 21, 22, 23, 24}, 25);
-        ActivityStatsTechSpecificInfo nrLowFreqInfo = new ActivityStatsTechSpecificInfo(
-                AccessNetwork.NGRAN, ServiceState.FREQUENCY_RANGE_LOW,
-                new int[]{30, 31, 32, 33, 34}, 35);
-        ActivityStatsTechSpecificInfo nrMidFreqInfo = new ActivityStatsTechSpecificInfo(
-                AccessNetwork.NGRAN, ServiceState.FREQUENCY_RANGE_MID,
-                new int[]{40, 41, 42, 43, 44}, 45);
-        ActivityStatsTechSpecificInfo nrHighFreqInfo = new ActivityStatsTechSpecificInfo(
-                AccessNetwork.NGRAN, ServiceState.FREQUENCY_RANGE_HIGH,
-                new int[]{50, 51, 52, 53, 54}, 55);
-        ActivityStatsTechSpecificInfo nrMmwaveFreqInfo = new ActivityStatsTechSpecificInfo(
-                AccessNetwork.NGRAN, ServiceState.FREQUENCY_RANGE_MMWAVE,
-                new int[]{60, 61, 62, 63, 64}, 65);
-
-        ActivityStatsTechSpecificInfo[] ratInfos =
-                new ActivityStatsTechSpecificInfo[]{cdmaInfo, lteInfo, nrLowFreqInfo, nrMidFreqInfo,
-                        nrHighFreqInfo, nrMmwaveFreqInfo};
-
-        ModemActivityInfo mai = new ModemActivityInfo(10000, 2000, 3000, ratInfos);
-        stats.noteModemControllerActivity(mai, POWER_DATA_UNAVAILABLE, 10000, 10000,
-                mNetworkStatsManager);
-
-        mStatsRule.setTime(10_000, 10_000);
-
-        MobileRadioPowerCalculator calculator =
-                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
-
-        mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
-
-        BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer();
-        // CDMA2000 [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
-        //   [720, 1080, 1440, 1800, 2160, 1440] mA . [10, 11, 12, 13, 14, 15] ms = 111600 mA-ms
-        // LTE [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
-        //   [800, 1200, 1600, 2000, 2400, 2000] mA . [20, 21, 22, 23, 24, 25] ms = 230000 mA-ms
-        // 5G Low Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
-        // (nrFrequency="LOW" values was not defined so fall back to nrFrequency="DEFAULT")
-        //   [999, 1333, 1888, 2222, 2666, 2222] mA . [30, 31, 32, 33, 34, 35] ms = 373449 mA-ms
-        // 5G Mid Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
-        // (nrFrequency="MID" values was not defined so fall back to nrFrequency="DEFAULT")
-        //   [999, 1333, 1888, 2222, 2666, 2222] mA . [40, 41, 42, 43, 44, 45] ms = 486749 mA-ms
-        // 5G High Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
-        //   [1818, 2727, 3636, 4545, 5454, 2727] mA . [50, 51, 52, 53, 54, 55] ms = 1104435 mA-ms
-        // 5G Mmwave Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
-        //   [2345, 3456, 4567, 5678, 6789, 3456] mA . [60, 61, 62, 63, 64, 65] ms = 1651520 mA-ms
-        // _________________
-        // =    3957753 mA-ms or 1.09938 mA-h active consumption
-        //
-        // Idle drain rate * idle duration
-        //   360 mA * 3000 ms = 1080000 mA-ms
-        // Sleep drain rate * sleep duration
-        //   70 mA * 2000 ms = 140000 mA-ms
-        // _________________
-        // =    5177753 mA-ms or 1.43826 mA-h total consumption
-        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(1.43826);
-        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-
-        //    720 mA * 100 ms  (level 0 TX drain rate * level 0 TX duration)
-        // + 1080 mA * 200 ms  (level 1 TX drain rate * level 1 TX duration)
-        // + 1440 mA * 300 ms  (level 2 TX drain rate * level 2 TX duration)
-        // + 1800 mA * 400 ms  (level 3 TX drain rate * level 3 TX duration)
-        // + 2160 mA * 500 ms  (level 4 TX drain rate * level 4 TX duration)
-        // + 1440 mA * 600 ms  (RX drain rate * RX duration)
-        // _________________
-        // =    3384000 mA-ms or 0.94 mA-h
-        BatteryConsumer appsConsumer = mStatsRule.getAppsBatteryConsumer();
-        assertThat(appsConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(1.09938);
-        assertThat(appsConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-
-        // 3/4 of total packets were sent by APP_UID so 75% of total
-        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
-        assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(0.82453);
-        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-
-        // Rest should go to the other app
-        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
-        assertThat(uidConsumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(0.27484);
-        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-    }
-
-    @Test
-    public void testCounterBasedModel_legacyPowerProfile() {
-        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_legacy_modem)
-                .initMeasuredEnergyStatsLocked();
-        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
-
-        // Scan for a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
-                TelephonyManager.SIM_STATE_READY,
-                2000, 2000);
-
-        // Found a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
-                5000, 5000);
-
-        ArrayList<CellSignalStrength> perRatCellStrength = new ArrayList();
-        CellSignalStrength gsmSignalStrength = mock(CellSignalStrength.class);
-        when(gsmSignalStrength.getLevel()).thenReturn(
-                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        perRatCellStrength.add(gsmSignalStrength);
-
-        // Note cell signal strength
-        SignalStrength signalStrength = mock(SignalStrength.class);
-        when(signalStrength.getCellSignalStrengths()).thenReturn(perRatCellStrength);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
-
-        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                8_000_000_000L, APP_UID, 8000, 8000);
-
-        // Note established network
-        stats.noteNetworkInterfaceForTransports("cellular",
-                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
-
-        // Spend some time in each signal strength level. It doesn't matter how long.
-        // The ModemActivityInfo reported level residency should be trusted over the BatteryStats
-        // timers.
-        when(gsmSignalStrength.getLevel()).thenReturn(
-                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8111, 8111);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_POOR);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8333, 8333);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8666, 8666);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GOOD);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 9110, 9110);
-
-        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                9_500_000_000L, APP_UID2, 9500, 9500);
-
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GREAT);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 9665, 9665);
-
-        // Note application network activity
-        NetworkStats networkStats = new NetworkStats(10000, 1)
-                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
-                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 150, 2000, 30, 100))
-                .addEntry(new NetworkStats.Entry("cellular", APP_UID2, 0, 0,
-                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 500, 50, 300, 10, 111));
-        mStatsRule.setNetworkStats(networkStats);
-
-        ModemActivityInfo mai = new ModemActivityInfo(10000, 2000, 3000,
-                new int[]{100, 200, 300, 400, 500}, 600);
-        stats.noteModemControllerActivity(mai, POWER_DATA_UNAVAILABLE, 10000, 10000,
-                mNetworkStatsManager);
-
-        mStatsRule.setTime(10_000, 10_000);
-
-        MobileRadioPowerCalculator calculator =
-                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
-
-        mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
-
-        BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer();
-        //    720 mA * 100 ms  (level 0 TX drain rate * level 0 TX duration)
-        // + 1080 mA * 200 ms  (level 1 TX drain rate * level 1 TX duration)
-        // + 1440 mA * 300 ms  (level 2 TX drain rate * level 2 TX duration)
-        // + 1800 mA * 400 ms  (level 3 TX drain rate * level 3 TX duration)
-        // + 2160 mA * 500 ms  (level 4 TX drain rate * level 4 TX duration)
-        // + 1440 mA * 600 ms  (RX drain rate * RX duration)
-        // +  360 mA * 3000 ms (idle drain rate * idle duration)
-        // +   70 mA * 2000 ms (sleep drain rate * sleep duration)
-        // _________________
-        // =    4604000 mA-ms or 1.27888 mA-h
-        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(1.27888);
-        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-
-        //    720 mA * 100 ms  (level 0 TX drain rate * level 0 TX duration)
-        // + 1080 mA * 200 ms  (level 1 TX drain rate * level 1 TX duration)
-        // + 1440 mA * 300 ms  (level 2 TX drain rate * level 2 TX duration)
-        // + 1800 mA * 400 ms  (level 3 TX drain rate * level 3 TX duration)
-        // + 2160 mA * 500 ms  (level 4 TX drain rate * level 4 TX duration)
-        // + 1440 mA * 600 ms  (RX drain rate * RX duration)
-        // _________________
-        // =    3384000 mA-ms or 0.94 mA-h
-        BatteryConsumer appsConsumer = mStatsRule.getAppsBatteryConsumer();
-        assertThat(appsConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(0.94);
-        assertThat(appsConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-
-        // 3/4 of total packets were sent by APP_UID so 75% of total
-        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
-        assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(0.705);
-        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-
-        // Rest should go to the other app
-        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
-        assertThat(uidConsumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(0.235);
-        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
-    }
-
-    @Test
-    public void testTimerBasedModel_byProcessState() {
-        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_legacy_modem)
-                .initMeasuredEnergyStatsLocked();
-        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
-        BatteryStatsImpl.Uid uid = stats.getUidStatsLocked(APP_UID);
-
-        mStatsRule.setTime(1000, 1000);
-        uid.setProcessStateForTest(
-                BatteryStats.Uid.PROCESS_STATE_FOREGROUND, 1000);
-
-        // Scan for a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
-                TelephonyManager.SIM_STATE_READY,
-                2000, 2000);
-
-        ArrayList<CellSignalStrength> perRatCellStrength = new ArrayList();
-        CellSignalStrength gsmSignalStrength = mock(CellSignalStrength.class);
-        when(gsmSignalStrength.getLevel()).thenReturn(
-                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        perRatCellStrength.add(gsmSignalStrength);
-
-        // Found a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
-                5000, 5000);
-
-        // Note cell signal strength
-        SignalStrength signalStrength = mock(SignalStrength.class);
-        when(signalStrength.getCellSignalStrengths()).thenReturn(perRatCellStrength);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
-
-        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                8_000_000_000L, APP_UID, 8000, 8000);
-
-        // Note established network
-        stats.noteNetworkInterfaceForTransports("cellular",
-                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
-
-        // Spend some time in each signal strength level. It doesn't matter how long.
-        // The ModemActivityInfo reported level residency should be trusted over the BatteryStats
-        // timers.
-        when(gsmSignalStrength.getLevel()).thenReturn(
-                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8111, 8111);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_POOR);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8333, 8333);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8666, 8666);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GOOD);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 9110, 9110);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GREAT);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 9665, 9665);
-
-        // Note application network activity
-        mStatsRule.setNetworkStats(new NetworkStats(10000, 1)
-                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
-                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 100, 2000, 20, 100)));
-
-        stats.noteModemControllerActivity(null, POWER_DATA_UNAVAILABLE, 10000, 10000,
-                mNetworkStatsManager);
-
-        uid.setProcessStateForTest(
-                BatteryStats.Uid.PROCESS_STATE_BACKGROUND, 11000);
-
-        mStatsRule.setNetworkStats(new NetworkStats(12000, 1)
-                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
-                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 250, 2000, 80, 200)));
-
-        stats.noteModemControllerActivity(null, POWER_DATA_UNAVAILABLE, 12000, 12000,
-                mNetworkStatsManager);
-
-        assertThat(uid.getMobileRadioEnergyConsumptionUC()).isAtMost(0);
-        // 12000-8000 = 4000 ms == 4_000_000 us
-        assertThat(uid.getMobileRadioActiveTimeInProcessState(BatteryConsumer.PROCESS_STATE_ANY))
-                .isEqualTo(4_000_000);
-        assertThat(uid.getMobileRadioActiveTimeInProcessState(
-                BatteryConsumer.PROCESS_STATE_FOREGROUND))
-                .isEqualTo(3_000_000);
-        assertThat(uid.getMobileRadioActiveTimeInProcessState(
-                BatteryConsumer.PROCESS_STATE_BACKGROUND))
-                .isEqualTo(1_000_000);
-        assertThat(uid.getMobileRadioActiveTimeInProcessState(
-                BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE))
-                .isEqualTo(0);
-
-        MobileRadioPowerCalculator calculator =
-                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
-
-        mStatsRule.setTime(12_000, 12_000);
-
-        mStatsRule.apply(new BatteryUsageStatsQuery.Builder()
-                .powerProfileModeledOnly()
-                .includePowerModels()
-                .includeProcessStateData()
-                .build(), calculator);
-
-        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
-
-        final BatteryConsumer.Key foreground = uidConsumer.getKey(
-                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
-                BatteryConsumer.PROCESS_STATE_FOREGROUND);
-        final BatteryConsumer.Key background = uidConsumer.getKey(
-                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
-                BatteryConsumer.PROCESS_STATE_BACKGROUND);
-        final BatteryConsumer.Key fgs = uidConsumer.getKey(
-                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
-                BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE);
-
-
-        assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(1.6);
-
-        assertThat(uidConsumer.getConsumedPower(foreground)).isWithin(PRECISION).of(1.2);
-        assertThat(uidConsumer.getConsumedPower(background)).isWithin(PRECISION).of(0.4);
-        assertThat(uidConsumer.getConsumedPower(fgs)).isWithin(PRECISION).of(0);
-    }
-
-    @Test
-    public void testMeasuredEnergyBasedModel_mobileRadioActiveTimeModel() {
-        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_legacy_modem)
-                .setPerUidModemModel(
-                        BatteryStatsImpl.PER_UID_MODEM_POWER_MODEL_MOBILE_RADIO_ACTIVE_TIME)
-                .initMeasuredEnergyStatsLocked();
-        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
-
-        // Scan for a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
-                TelephonyManager.SIM_STATE_READY,
-                2000, 2000);
-
-        // Found a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
-                5000, 5000);
-
-        // Note cell signal strength
-        SignalStrength signalStrength = mock(SignalStrength.class);
-        when(signalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
-
-        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                8_000_000_000L, APP_UID, 8000, 8000);
-
-        // Note established network
-        stats.noteNetworkInterfaceForTransports("cellular",
-                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
-
-        stats.notePhoneOnLocked(9800, 9800);
-
-        // Note application network activity
-        NetworkStats networkStats = new NetworkStats(10000, 1)
-                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
-                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 100, 2000, 20, 100));
-        mStatsRule.setNetworkStats(networkStats);
-
-        ModemActivityInfo mai = new ModemActivityInfo(10000, 2000, 3000,
-                new int[]{100, 200, 300, 400, 500}, 600);
-        stats.noteModemControllerActivity(mai, 10_000_000, 10000, 10000, mNetworkStatsManager);
-
-        mStatsRule.setTime(12_000, 12_000);
-
-        MobileRadioPowerCalculator mobileRadioPowerCalculator =
-                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
-        PhonePowerCalculator phonePowerCalculator =
-                new PhonePowerCalculator(mStatsRule.getPowerProfile());
-        mStatsRule.apply(mobileRadioPowerCalculator, phonePowerCalculator);
-
-        BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer();
-        // 10_000_000 micro-Coulomb * 1/1000 milli/micro * 1/3600 hour/second = 2.77778 mAh
-        // 1800ms data duration / 2000 total duration *  2.77778 mAh = 2.5
-        // 200ms phone on duration / 2000 total duration *  2.77778 mAh = 0.27777
-        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(2.5);
-        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_PHONE))
-                .isWithin(PRECISION).of(0.27778);
-        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_PHONE))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-
-        BatteryConsumer appsConsumer = mStatsRule.getAppsBatteryConsumer();
-        assertThat(appsConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(1.38541);
-        assertThat(appsConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-
-        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
-        assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(1.38541);
-        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-    }
-
-
-
-    @Test
-    public void testMeasuredEnergyBasedModel_modemActivityInfoRxTxModel() {
-        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_modem_calculator_multiactive)
-                .setPerUidModemModel(
-                        BatteryStatsImpl.PER_UID_MODEM_POWER_MODEL_MODEM_ACTIVITY_INFO_RX_TX)
-                .initMeasuredEnergyStatsLocked();
-        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
-
-        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH, 0, -1,
-                0, 0);
-
-        // Scan for a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
-                TelephonyManager.SIM_STATE_READY,
-                2000, 2000);
-
-        // Found a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
-                5000, 5000);
-
-        ArrayList<CellSignalStrength> perRatCellStrength = new ArrayList();
-        CellSignalStrength gsmSignalStrength = mock(CellSignalStrength.class);
-        when(gsmSignalStrength.getLevel()).thenReturn(
-                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        perRatCellStrength.add(gsmSignalStrength);
-
-        // Note cell signal strength
-        SignalStrength signalStrength = mock(SignalStrength.class);
-        when(signalStrength.getCellSignalStrengths()).thenReturn(perRatCellStrength);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
-
-        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                8_000_000_000L, APP_UID, 8000, 8000);
-
-        // Note established network
-        stats.noteNetworkInterfaceForTransports("cellular",
-                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
-
-        // Spend some time in each signal strength level. It doesn't matter how long.
-        // The ModemActivityInfo reported level residency should be trusted over the BatteryStats
-        // timers.
-        when(gsmSignalStrength.getLevel()).thenReturn(
-                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8111, 8111);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_POOR);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8333, 8333);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8666, 8666);
-
-        stats.notePhoneOnLocked(9000, 9000);
-
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GOOD);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 9110, 9110);
-
-        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                9_500_000_000L, APP_UID2, 9500, 9500);
-
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GREAT);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 9665, 9665);
-
-        // Note application network activity
-        NetworkStats networkStats = new NetworkStats(10000, 1)
-                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
-                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 150, 300, 10, 100))
-                .addEntry(new NetworkStats.Entry("cellular", APP_UID2, 0, 0,
-                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 500, 50, 2000, 30, 111));
-        mStatsRule.setNetworkStats(networkStats);
-
-        ActivityStatsTechSpecificInfo cdmaInfo = new ActivityStatsTechSpecificInfo(
-                AccessNetwork.CDMA2000, ServiceState.FREQUENCY_RANGE_UNKNOWN,
-                new int[]{10, 11, 12, 13, 14}, 15);
-        ActivityStatsTechSpecificInfo lteInfo = new ActivityStatsTechSpecificInfo(
-                AccessNetwork.EUTRAN, ServiceState.FREQUENCY_RANGE_UNKNOWN,
-                new int[]{20, 21, 22, 23, 24}, 25);
-        ActivityStatsTechSpecificInfo nrLowFreqInfo = new ActivityStatsTechSpecificInfo(
-                AccessNetwork.NGRAN, ServiceState.FREQUENCY_RANGE_LOW,
-                new int[]{30, 31, 32, 33, 34}, 35);
-        ActivityStatsTechSpecificInfo nrMidFreqInfo = new ActivityStatsTechSpecificInfo(
-                AccessNetwork.NGRAN, ServiceState.FREQUENCY_RANGE_MID,
-                new int[]{40, 41, 42, 43, 44}, 45);
-        ActivityStatsTechSpecificInfo nrHighFreqInfo = new ActivityStatsTechSpecificInfo(
-                AccessNetwork.NGRAN, ServiceState.FREQUENCY_RANGE_HIGH,
-                new int[]{50, 51, 52, 53, 54}, 55);
-        ActivityStatsTechSpecificInfo nrMmwaveFreqInfo = new ActivityStatsTechSpecificInfo(
-                AccessNetwork.NGRAN, ServiceState.FREQUENCY_RANGE_MMWAVE,
-                new int[]{60, 61, 62, 63, 64}, 65);
-
-        ActivityStatsTechSpecificInfo[] ratInfos =
-                new ActivityStatsTechSpecificInfo[]{cdmaInfo, lteInfo, nrLowFreqInfo, nrMidFreqInfo,
-                        nrHighFreqInfo, nrMmwaveFreqInfo};
-
-        ModemActivityInfo mai = new ModemActivityInfo(10000, 2000, 3000, ratInfos);
-        stats.noteModemControllerActivity(mai, 10_000_000, 10000, 10000,
-                mNetworkStatsManager);
-
-        mStatsRule.setTime(10_000, 10_000);
-
-        MobileRadioPowerCalculator mobileRadioPowerCalculator =
-                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
-        PhonePowerCalculator phonePowerCalculator =
-                new PhonePowerCalculator(mStatsRule.getPowerProfile());
-        mStatsRule.apply(mobileRadioPowerCalculator, phonePowerCalculator);
-
-        BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer();
-        // 10_000_000 micro-Coulomb * 1/1000 milli/micro * 1/3600 hour/second = 2.77778 mAh
-        // 9000ms data duration / 10000 total duration *  2.77778 mAh = 2.5
-        // 1000ms phone on duration / 10000 total duration *  2.77778 mAh = 0.27777
-        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(2.5);
-        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_PHONE))
-                .isWithin(PRECISION).of(0.27778);
-        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_PHONE))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-
-        // CDMA2000 [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
-        //   [720, 1080, 1440, 1800, 2160, 1440] mA . [10, 11, 12, 13, 14, 15] ms = 111600 mA-ms
-        // LTE [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
-        //   [800, 1200, 1600, 2000, 2400, 2000] mA . [20, 21, 22, 23, 24, 25] ms = 230000 mA-ms
-        // 5G Low Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
-        // (nrFrequency="LOW" values was not defined so fall back to nrFrequency="DEFAULT")
-        //   [999, 1333, 1888, 2222, 2666, 2222] mA . [30, 31, 32, 33, 34, 35] ms = 373449 mA-ms
-        // 5G Mid Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
-        // (nrFrequency="MID" values was not defined so fall back to nrFrequency="DEFAULT")
-        //   [999, 1333, 1888, 2222, 2666, 2222] mA . [40, 41, 42, 43, 44, 45] ms = 486749 mA-ms
-        // 5G High Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
-        //   [1818, 2727, 3636, 4545, 5454, 2727] mA . [50, 51, 52, 53, 54, 55] ms = 1104435 mA-ms
-        // 5G Mmwave Frequency [Tx0, Tx1, Tx2, Tx3, Tx4, Rx] drain * duration
-        //   [2345, 3456, 4567, 5678, 6789, 3456] mA . [60, 61, 62, 63, 64, 65] ms = 1651520 mA-ms
-        // _________________
-        // =    3957753 mA-ms estimated active consumption
-        //
-        // Idle drain rate * idle duration
-        //   360 mA * 3000 ms = 1080000 mA-ms
-        // Sleep drain rate * sleep duration
-        //   70 mA * 2000 ms = 140000 mA-ms
-        // _________________
-        // =    5177753 mA-ms estimated total consumption
-        //
-        // 2.5 mA-h measured total consumption * 3957753 / 5177753 = 1.91094 mA-h
-        BatteryConsumer appsConsumer = mStatsRule.getAppsBatteryConsumer();
-        assertThat(appsConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(1.91094);
-        assertThat(appsConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-
-        // 240 ms Rx Time, 1110 ms Tx Time, 1350 ms active time
-        // 150 App 1 Rx Packets, 10 App 1 Tx packets
-        // 50 App 2 Rx Packets, 30 App 2 Tx packets
-        // 200 total Rx Packets, 40 total Tx packets
-        // 623985 mA-ms Rx consumption, 3333768 mA-ms Tx consumption
-        //
-        // Rx Power consumption * Ratio of App1 / Total Rx Packets:
-        // 623985 * 150 / 200 = 467988.75 mA-ms App 1 Rx Power Consumption
-        //
-        // App 1 Tx Packets + App 1 Rx Packets * Ratio of Tx / Total active time
-        // 10 + 150 * 1110 / 1350 = 133.3333 Estimated App 1 Rx/Tx Packets during Tx
-        // Total Tx Packets + Total Rx Packets * Ratio of Tx / Total active time
-        // 40 + 200 * 1110 / 1350 = 204.44444 Estimated Total Rx/Tx Packets during Tx
-        // Tx Power consumption * Ratio of App 1 / Total Estimated Tx Packets:
-        // 3333768 * 133.33333 / 204.44444 = 2174196.52174 mA-ms App 1 Tx Power Consumption
-        //
-        // Total App Power consumption * Ratio of App 1 / Total Estimated Power Consumption
-        // 1.91094 * (467988.75 + 2174196.52174) / 3957753 = 1.27574 App 1 Power Consumption
-        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
-        assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(1.27574);
-        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-
-        // Rest should go to the other app
-        UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
-        assertThat(uidConsumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(0.63520);
-        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-    }
-
-    @Test
-    public void testMeasuredEnergyBasedModel_modemActivityInfoRxTxModel_legacyPowerProfile() {
-        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_legacy_modem)
-                .setPerUidModemModel(
-                        BatteryStatsImpl.PER_UID_MODEM_POWER_MODEL_MODEM_ACTIVITY_INFO_RX_TX)
-                .initMeasuredEnergyStatsLocked();
-        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
-
-        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH, 0, -1,
-                0, 0);
-
-        // Scan for a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
-                TelephonyManager.SIM_STATE_READY,
-                2000, 2000);
-
-        ArrayList<CellSignalStrength> perRatCellStrength = new ArrayList();
-        CellSignalStrength gsmSignalStrength = mock(CellSignalStrength.class);
-        when(gsmSignalStrength.getLevel()).thenReturn(
-                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        perRatCellStrength.add(gsmSignalStrength);
-
-        // Found a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
-                5000, 5000);
-
-        // Note cell signal strength
-        SignalStrength signalStrength = mock(SignalStrength.class);
-        when(signalStrength.getCellSignalStrengths()).thenReturn(perRatCellStrength);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
-
-        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                8_000_000_000L, APP_UID, 8000, 8000);
-
-        // Note established network
-        stats.noteNetworkInterfaceForTransports("cellular",
-                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
-
-        // Spend some time in each signal strength level. It doesn't matter how long.
-        // The ModemActivityInfo reported level residency should be trusted over the BatteryStats
-        // timers.
-        when(gsmSignalStrength.getLevel()).thenReturn(
-                SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8111, 8111);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_POOR);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8333, 8333);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 8666, 8666);
-
-        stats.notePhoneOnLocked(9000, 9000);
-
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GOOD);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 9110, 9110);
-        when(gsmSignalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_GREAT);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 9665, 9665);
-
-        // Note application network activity
-        NetworkStats networkStats = new NetworkStats(10000, 1)
-                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
-                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 100, 2000, 20, 100));
-        mStatsRule.setNetworkStats(networkStats);
-
-        ModemActivityInfo mai = new ModemActivityInfo(10000, 2000, 3000,
-                new int[]{100, 200, 300, 400, 500}, 600);
-        stats.noteModemControllerActivity(mai, 10_000_000, 10000, 10000, mNetworkStatsManager);
-
-        mStatsRule.setTime(12_000, 12_000);
-
-
-        MobileRadioPowerCalculator mobileRadioPowerCalculator =
-                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
-        PhonePowerCalculator phonePowerCalculator =
-                new PhonePowerCalculator(mStatsRule.getPowerProfile());
-        mStatsRule.apply(mobileRadioPowerCalculator, phonePowerCalculator);
-
-        BatteryConsumer deviceConsumer = mStatsRule.getDeviceBatteryConsumer();
-        // 10_000_000 micro-Coulomb * 1/1000 milli/micro * 1/3600 hour/second = 2.77778 mAh
-        // 9000ms data duration / 10000 total duration *  2.77778 mAh = 2.5
-        // 1000ms phone on duration / 10000 total duration *  2.77778 mAh = 0.27777
-        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(2.5);
-        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_PHONE))
-                .isWithin(PRECISION).of(0.27778);
-        assertThat(deviceConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_PHONE))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-
-        BatteryConsumer appsConsumer = mStatsRule.getAppsBatteryConsumer();
-        // Estimated Rx/Tx modem consumption = 0.94 mAh
-        // Estimated total modem consumption = 1.27888 mAh
-        // 2.5 * 0.94 / 1.27888 = 1.83754 mAh
-        assertThat(appsConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(1.83754);
-        assertThat(appsConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-
-        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
-        assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isWithin(PRECISION).of(1.83754);
-        assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
-                .isEqualTo(BatteryConsumer.POWER_MODEL_ENERGY_CONSUMPTION);
-    }
-
-    @Test
-    public void testMeasuredEnergyBasedModel_byProcessState() {
-        mStatsRule.setTestPowerProfile(R.xml.power_profile_test_legacy_modem)
-                .initMeasuredEnergyStatsLocked();
-        BatteryStatsImpl stats = mStatsRule.getBatteryStats();
-        BatteryStatsImpl.Uid uid = stats.getUidStatsLocked(APP_UID);
-
-        mStatsRule.setTime(1000, 1000);
-        uid.setProcessStateForTest(
-                BatteryStats.Uid.PROCESS_STATE_FOREGROUND, 1000);
-
-        // Scan for a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_OUT_OF_SERVICE,
-                TelephonyManager.SIM_STATE_READY,
-                2000, 2000);
-
-        // Found a cell
-        stats.notePhoneStateLocked(ServiceState.STATE_IN_SERVICE, TelephonyManager.SIM_STATE_READY,
-                5000, 5000);
-
-        // Note cell signal strength
-        SignalStrength signalStrength = mock(SignalStrength.class);
-        when(signalStrength.getLevel()).thenReturn(SignalStrength.SIGNAL_STRENGTH_MODERATE);
-        stats.notePhoneSignalStrengthLocked(signalStrength, 5000, 5000);
-
-        stats.noteMobileRadioPowerStateLocked(DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
-                8_000_000_000L, APP_UID, 8000, 8000);
-
-        // Note established network
-        stats.noteNetworkInterfaceForTransports("cellular",
-                new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
-
-        // Note application network activity
-        mStatsRule.setNetworkStats(new NetworkStats(10000, 1)
-                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
-                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 100, 2000, 20, 100)));
-
-        stats.noteModemControllerActivity(null, 10_000_000, 10000, 10000, mNetworkStatsManager);
-
-        uid.setProcessStateForTest(
-                BatteryStats.Uid.PROCESS_STATE_BACKGROUND, 11000);
-
-        mStatsRule.setNetworkStats(new NetworkStats(12000, 1)
-                .addEntry(new NetworkStats.Entry("cellular", APP_UID, 0, 0,
-                        METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 1000, 250, 2000, 80, 200)));
-
-        stats.noteModemControllerActivity(null, 15_000_000, 12000, 12000, mNetworkStatsManager);
-
-        mStatsRule.setTime(20000, 20000);
-
-        assertThat(uid.getMobileRadioEnergyConsumptionUC())
-                .isIn(Range.open(20_000_000L, 21_000_000L));
-        assertThat(uid.getMobileRadioEnergyConsumptionUC(
-                BatteryConsumer.PROCESS_STATE_FOREGROUND))
-                .isIn(Range.open(13_000_000L, 14_000_000L));
-        assertThat(uid.getMobileRadioEnergyConsumptionUC(
-                BatteryConsumer.PROCESS_STATE_BACKGROUND))
-                .isIn(Range.open(7_000_000L, 8_000_000L));
-        assertThat(uid.getMobileRadioEnergyConsumptionUC(
-                BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE))
-                .isEqualTo(0);
-
-        MobileRadioPowerCalculator calculator =
-                new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
-
-        mStatsRule.apply(new BatteryUsageStatsQuery.Builder()
-                .includePowerModels()
-                .includeProcessStateData()
-                .build(), calculator);
-
-        UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
-
-        final BatteryConsumer.Key foreground = uidConsumer.getKey(
-                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
-                BatteryConsumer.PROCESS_STATE_FOREGROUND);
-        final BatteryConsumer.Key background = uidConsumer.getKey(
-                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
-                BatteryConsumer.PROCESS_STATE_BACKGROUND);
-        final BatteryConsumer.Key fgs = uidConsumer.getKey(
-                BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
-                BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE);
-
-        assertThat(uidConsumer.getConsumedPower(foreground)).isWithin(PRECISION).of(3.62064);
-        assertThat(uidConsumer.getConsumedPower(background)).isWithin(PRECISION).of(2.08130);
-        assertThat(uidConsumer.getConsumedPower(fgs)).isWithin(PRECISION).of(0);
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/MockBatteryStatsImpl.java b/services/tests/servicestests/src/com/android/server/power/stats/MockBatteryStatsImpl.java
deleted file mode 100644
index d78ab867..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/MockBatteryStatsImpl.java
+++ /dev/null
@@ -1,282 +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.server.power.stats;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import android.annotation.NonNull;
-import android.app.usage.NetworkStatsManager;
-import android.net.NetworkStats;
-import android.os.Handler;
-import android.os.Looper;
-
-import com.android.internal.annotations.GuardedBy;
-import com.android.internal.os.Clock;
-import com.android.internal.os.KernelCpuSpeedReader;
-import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidActiveTimeReader;
-import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidClusterTimeReader;
-import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader;
-import com.android.internal.os.KernelCpuUidTimeReader.KernelCpuUidUserSysTimeReader;
-import com.android.internal.os.KernelSingleUidTimeReader;
-import com.android.internal.os.PowerProfile;
-import com.android.internal.power.EnergyConsumerStats;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Queue;
-import java.util.concurrent.Future;
-
-/**
- * Mocks a BatteryStatsImpl object.
- */
-public class MockBatteryStatsImpl extends BatteryStatsImpl {
-    public boolean mForceOnBattery;
-    // The mNetworkStats will be used for both wifi and mobile categories
-    private NetworkStats mNetworkStats;
-    private DummyExternalStatsSync mExternalStatsSync = new DummyExternalStatsSync();
-
-    MockBatteryStatsImpl() {
-        this(new MockClock());
-    }
-
-    MockBatteryStatsImpl(Clock clock) {
-        this(clock, null);
-    }
-
-    MockBatteryStatsImpl(Clock clock, File historyDirectory) {
-        super(clock, historyDirectory);
-        initTimersAndCounters();
-        setMaxHistoryBuffer(128 * 1024);
-
-        setExternalStatsSyncLocked(mExternalStatsSync);
-        informThatAllExternalStatsAreFlushed();
-
-        // A no-op handler.
-        mHandler = new Handler(Looper.getMainLooper()) {
-        };
-
-        mCpuUidFreqTimeReader = mock(KernelCpuUidFreqTimeReader.class);
-        when(mCpuUidFreqTimeReader.readFreqs(any())).thenReturn(new long[]{100, 200});
-    }
-
-    public void initMeasuredEnergyStats(String[] customBucketNames) {
-        final boolean[] supportedStandardBuckets =
-                new boolean[EnergyConsumerStats.NUMBER_STANDARD_POWER_BUCKETS];
-        Arrays.fill(supportedStandardBuckets, true);
-        synchronized (this) {
-            mEnergyConsumerStatsConfig = new EnergyConsumerStats.Config(supportedStandardBuckets,
-                    customBucketNames, new int[0], new String[]{""});
-            mGlobalEnergyConsumerStats = new EnergyConsumerStats(mEnergyConsumerStatsConfig);
-        }
-    }
-
-    public TimeBase getOnBatteryTimeBase() {
-        return mOnBatteryTimeBase;
-    }
-
-    public TimeBase getOnBatteryScreenOffTimeBase() {
-        return mOnBatteryScreenOffTimeBase;
-    }
-
-    public int getScreenState() {
-        return mScreenState;
-    }
-
-    public Queue<UidToRemove> getPendingRemovedUids() {
-        return mPendingRemovedUids;
-    }
-
-    public boolean isOnBattery() {
-        return mForceOnBattery ? true : super.isOnBattery();
-    }
-
-    public TimeBase getOnBatteryBackgroundTimeBase(int uid) {
-        return getUidStatsLocked(uid).mOnBatteryBackgroundTimeBase;
-    }
-
-    public TimeBase getOnBatteryScreenOffBackgroundTimeBase(int uid) {
-        return getUidStatsLocked(uid).mOnBatteryScreenOffBackgroundTimeBase;
-    }
-
-    public long getMobileRadioPowerStateUpdateRateLimit() {
-        return MOBILE_RADIO_POWER_STATE_UPDATE_FREQ_MS;
-    }
-
-    public MockBatteryStatsImpl setNetworkStats(NetworkStats networkStats) {
-        mNetworkStats = networkStats;
-        return this;
-    }
-
-    @Override
-    protected NetworkStats readMobileNetworkStatsLocked(
-            @NonNull NetworkStatsManager networkStatsManager) {
-        return mNetworkStats;
-    }
-
-    @Override
-    protected NetworkStats readWifiNetworkStatsLocked(
-            @NonNull NetworkStatsManager networkStatsManager) {
-        return mNetworkStats;
-    }
-    public MockBatteryStatsImpl setPowerProfile(PowerProfile powerProfile) {
-        mPowerProfile = powerProfile;
-        return this;
-    }
-
-    public MockBatteryStatsImpl setKernelCpuUidFreqTimeReader(KernelCpuUidFreqTimeReader reader) {
-        mCpuUidFreqTimeReader = reader;
-        return this;
-    }
-
-    public MockBatteryStatsImpl setKernelCpuUidActiveTimeReader(
-            KernelCpuUidActiveTimeReader reader) {
-        mCpuUidActiveTimeReader = reader;
-        return this;
-    }
-
-    public MockBatteryStatsImpl setKernelCpuUidClusterTimeReader(
-            KernelCpuUidClusterTimeReader reader) {
-        mCpuUidClusterTimeReader = reader;
-        return this;
-    }
-
-    public MockBatteryStatsImpl setKernelCpuUidUserSysTimeReader(
-            KernelCpuUidUserSysTimeReader reader) {
-        mCpuUidUserSysTimeReader = reader;
-        return this;
-    }
-
-    public MockBatteryStatsImpl setKernelSingleUidTimeReader(KernelSingleUidTimeReader reader) {
-        mKernelSingleUidTimeReader = reader;
-        return this;
-    }
-
-    public MockBatteryStatsImpl setKernelCpuSpeedReaders(KernelCpuSpeedReader[] readers) {
-        mKernelCpuSpeedReaders = readers;
-        return this;
-    }
-
-    public MockBatteryStatsImpl setSystemServerCpuThreadReader(
-            SystemServerCpuThreadReader systemServerCpuThreadReader) {
-        mSystemServerCpuThreadReader = systemServerCpuThreadReader;
-        return this;
-    }
-
-    public MockBatteryStatsImpl setUserInfoProvider(UserInfoProvider provider) {
-        mUserInfoProvider = provider;
-        return this;
-    }
-
-    public MockBatteryStatsImpl setPartialTimers(ArrayList<StopwatchTimer> partialTimers) {
-        mPartialTimers = partialTimers;
-        return this;
-    }
-
-    public MockBatteryStatsImpl setLastPartialTimers(ArrayList<StopwatchTimer> lastPartialTimers) {
-        mLastPartialTimers = lastPartialTimers;
-        return this;
-    }
-
-    public MockBatteryStatsImpl setOnBatteryInternal(boolean onBatteryInternal) {
-        mOnBatteryInternal = onBatteryInternal;
-        return this;
-    }
-
-    @GuardedBy("this")
-    public MockBatteryStatsImpl setMaxHistoryFiles(int maxHistoryFiles) {
-        mConstants.MAX_HISTORY_FILES = maxHistoryFiles;
-        mConstants.onChange();
-        return this;
-    }
-
-    @GuardedBy("this")
-    public MockBatteryStatsImpl setMaxHistoryBuffer(int maxHistoryBuffer) {
-        mConstants.MAX_HISTORY_BUFFER = maxHistoryBuffer;
-        mConstants.onChange();
-        return this;
-    }
-
-    @GuardedBy("this")
-    public MockBatteryStatsImpl setPerUidModemModel(int perUidModemModel) {
-        mConstants.PER_UID_MODEM_MODEL = perUidModemModel;
-        mConstants.onChange();
-        return this;
-    }
-
-    public int getAndClearExternalStatsSyncFlags() {
-        final int flags = mExternalStatsSync.flags;
-        mExternalStatsSync.flags = 0;
-        return flags;
-    }
-
-    public void setDummyExternalStatsSync(DummyExternalStatsSync externalStatsSync) {
-        mExternalStatsSync = externalStatsSync;
-        setExternalStatsSyncLocked(mExternalStatsSync);
-    }
-
-    @Override
-    public void writeSyncLocked() {
-    }
-
-    public static class DummyExternalStatsSync implements ExternalStatsSync {
-        public int flags = 0;
-
-        @Override
-        public Future<?> scheduleSync(String reason, int flags) {
-            return null;
-        }
-
-        @Override
-        public Future<?> scheduleCleanupDueToRemovedUser(int userId) {
-            return null;
-        }
-
-        @Override
-        public Future<?> scheduleCpuSyncDueToRemovedUid(int uid) {
-            return null;
-        }
-
-        @Override
-        public Future<?> scheduleSyncDueToScreenStateChange(int flag, boolean onBattery,
-                boolean onBatteryScreenOff, int screenState, int[] perDisplayScreenStates) {
-            flags |= flag;
-            return null;
-        }
-
-        @Override
-        public Future<?> scheduleCpuSyncDueToWakelockChange(long delayMillis) {
-            return null;
-        }
-
-        @Override
-        public void cancelCpuSyncDueToWakelockChange() {
-        }
-
-        @Override
-        public Future<?> scheduleSyncDueToBatteryLevelChange(long delayMillis) {
-            return null;
-        }
-
-        @Override
-        public void scheduleSyncDueToProcessStateChange(int flags, long delayMillis) {
-        }
-    }
-}
-
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/SystemServicePowerCalculatorTest.java b/services/tests/servicestests/src/com/android/server/power/stats/SystemServicePowerCalculatorTest.java
deleted file mode 100644
index 3c5c0a3..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/SystemServicePowerCalculatorTest.java
+++ /dev/null
@@ -1,264 +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.server.power.stats;
-
-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.Mockito.doAnswer;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import android.os.BatteryConsumer;
-import android.os.Binder;
-import android.os.Process;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.internal.os.BinderCallsStats;
-import com.android.internal.os.KernelCpuSpeedReader;
-import com.android.internal.os.KernelCpuUidTimeReader;
-import com.android.internal.os.KernelSingleUidTimeReader;
-import com.android.internal.os.PowerProfile;
-import com.android.internal.power.EnergyConsumerStats;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-@SuppressWarnings("GuardedBy")
-public class SystemServicePowerCalculatorTest {
-
-    private static final double PRECISION = 0.000001;
-    private static final int APP_UID1 = 100;
-    private static final int APP_UID2 = 200;
-
-    @Rule
-    public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule()
-            .setAveragePower(PowerProfile.POWER_CPU_ACTIVE, 720)
-            .setNumCpuClusters(2)
-            .setNumSpeedStepsInCpuCluster(0, 2)
-            .setNumSpeedStepsInCpuCluster(1, 2)
-            .setAveragePowerForCpuCluster(0, 360)
-            .setAveragePowerForCpuCluster(1, 480)
-            .setAveragePowerForCpuCore(0, 0, 300)
-            .setAveragePowerForCpuCore(0, 1, 400)
-            .setAveragePowerForCpuCore(1, 0, 500)
-            .setAveragePowerForCpuCore(1, 1, 600);
-
-    @Mock
-    private BatteryStatsImpl.UserInfoProvider mMockUserInfoProvider;
-    @Mock
-    private KernelCpuUidTimeReader.KernelCpuUidClusterTimeReader mMockKernelCpuUidClusterTimeReader;
-    @Mock
-    private KernelCpuUidTimeReader.KernelCpuUidFreqTimeReader mMockCpuUidFreqTimeReader;
-    @Mock
-    private KernelCpuUidTimeReader.KernelCpuUidUserSysTimeReader mMockKernelCpuUidUserSysTimeReader;
-    @Mock
-    private KernelCpuUidTimeReader.KernelCpuUidActiveTimeReader mMockKerneCpuUidActiveTimeReader;
-    @Mock
-    private SystemServerCpuThreadReader mMockSystemServerCpuThreadReader;
-    @Mock
-    private KernelSingleUidTimeReader mMockKernelSingleUidTimeReader;
-
-    private final KernelCpuSpeedReader[] mMockKernelCpuSpeedReaders = new KernelCpuSpeedReader[]{
-            mock(KernelCpuSpeedReader.class),
-            mock(KernelCpuSpeedReader.class),
-    };
-
-    private MockBatteryStatsImpl mMockBatteryStats;
-
-    @Before
-    public void setUp() throws IOException {
-        MockitoAnnotations.initMocks(this);
-        mMockBatteryStats = mStatsRule.getBatteryStats()
-                .setUserInfoProvider(mMockUserInfoProvider)
-                .setKernelCpuSpeedReaders(mMockKernelCpuSpeedReaders)
-                .setKernelCpuUidFreqTimeReader(mMockCpuUidFreqTimeReader)
-                .setKernelCpuUidClusterTimeReader(mMockKernelCpuUidClusterTimeReader)
-                .setKernelCpuUidUserSysTimeReader(mMockKernelCpuUidUserSysTimeReader)
-                .setKernelCpuUidActiveTimeReader(mMockKerneCpuUidActiveTimeReader)
-                .setKernelSingleUidTimeReader(mMockKernelSingleUidTimeReader)
-                .setSystemServerCpuThreadReader(mMockSystemServerCpuThreadReader);
-    }
-
-    @Test
-    public void testPowerProfileBasedModel() {
-        prepareBatteryStats(null);
-
-        SystemServicePowerCalculator calculator = new SystemServicePowerCalculator(
-                mStatsRule.getPowerProfile());
-
-        mStatsRule.apply(new CpuPowerCalculator(mStatsRule.getPowerProfile()), calculator);
-
-        assertThat(mStatsRule.getUidBatteryConsumer(APP_UID1)
-                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
-                .isWithin(PRECISION).of(1.888888);
-        assertThat(mStatsRule.getUidBatteryConsumer(APP_UID2)
-                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
-                .isWithin(PRECISION).of(17.0);
-        assertThat(mStatsRule.getUidBatteryConsumer(Process.SYSTEM_UID)
-                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_REATTRIBUTED_TO_OTHER_CONSUMERS))
-                .isWithin(PRECISION).of(-18.888888);
-        assertThat(mStatsRule.getDeviceBatteryConsumer()
-                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
-                .isWithin(PRECISION).of(18.888888);
-        assertThat(mStatsRule.getAppsBatteryConsumer()
-                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
-                .isWithin(PRECISION).of(18.888888);
-    }
-
-    @Test
-    public void testMeasuredEnergyBasedModel() {
-        final boolean[] supportedPowerBuckets =
-                new boolean[EnergyConsumerStats.NUMBER_STANDARD_POWER_BUCKETS];
-        supportedPowerBuckets[EnergyConsumerStats.POWER_BUCKET_CPU] = true;
-        mStatsRule.getBatteryStats()
-                .initEnergyConsumerStatsLocked(supportedPowerBuckets, new String[0]);
-
-        prepareBatteryStats(new long[]{50000000, 100000000});
-
-        SystemServicePowerCalculator calculator = new SystemServicePowerCalculator(
-                mStatsRule.getPowerProfile());
-
-        mStatsRule.apply(new CpuPowerCalculator(mStatsRule.getPowerProfile()), calculator);
-
-        assertThat(mStatsRule.getUidBatteryConsumer(APP_UID1)
-                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
-                .isWithin(PRECISION).of(2.105425);
-        assertThat(mStatsRule.getUidBatteryConsumer(APP_UID2)
-                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
-                .isWithin(PRECISION).of(18.948825);
-        assertThat(mStatsRule.getUidBatteryConsumer(Process.SYSTEM_UID)
-                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_REATTRIBUTED_TO_OTHER_CONSUMERS))
-                .isWithin(PRECISION).of(-21.054250);
-        assertThat(mStatsRule.getDeviceBatteryConsumer()
-                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
-                .isWithin(PRECISION).of(21.054250);
-        assertThat(mStatsRule.getAppsBatteryConsumer()
-                .getConsumedPower(BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES))
-                .isWithin(PRECISION).of(21.054250);
-    }
-
-    private void prepareBatteryStats(long[] clusterChargesUc) {
-        when(mMockUserInfoProvider.exists(anyInt())).thenReturn(true);
-
-        when(mMockKernelCpuSpeedReaders[0].readDelta()).thenReturn(new long[]{1000, 2000});
-        when(mMockKernelCpuSpeedReaders[1].readDelta()).thenReturn(new long[]{3000, 4000});
-
-        when(mMockCpuUidFreqTimeReader.perClusterTimesAvailable()).thenReturn(false);
-
-        mStatsRule.setTime(1000, 1000);
-
-        // Initialize active CPU time
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<Long> callback = invocation.getArgument(0);
-            callback.onUidCpuTime(APP_UID1, 1000L);
-            callback.onUidCpuTime(APP_UID2, 3000L);
-            callback.onUidCpuTime(Process.SYSTEM_UID, 5000L);
-            return null;
-        }).when(mMockKerneCpuUidActiveTimeReader).readAbsolute(any());
-
-        mStatsRule.getBatteryStats().updateCpuTimeLocked(true, true, null);
-
-        mStatsRule.setTime(2000, 2000);
-
-        // User/System CPU time in microseconds
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
-            callback.onUidCpuTime(APP_UID1, new long[]{1_000_000, 2_000_000});
-            callback.onUidCpuTime(APP_UID2, new long[]{3_000_000, 4_000_000});
-            callback.onUidCpuTime(Process.SYSTEM_UID, new long[]{60_000_000, 80_000_000});
-            return null;
-        }).when(mMockKernelCpuUidUserSysTimeReader).readDelta(anyBoolean(), any());
-
-        // Active CPU time in milliseconds
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<Long> callback = invocation.getArgument(0);
-            callback.onUidCpuTime(APP_UID1, 2111L);
-            callback.onUidCpuTime(APP_UID2, 6333L);
-            callback.onUidCpuTime(Process.SYSTEM_UID, 15000L);
-            return null;
-        }).when(mMockKerneCpuUidActiveTimeReader).readAbsolute(any());
-
-        // Per-cluster CPU time in milliseconds
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
-            callback.onUidCpuTime(APP_UID1, new long[]{1111, 2222});
-            callback.onUidCpuTime(APP_UID2, new long[]{3333, 4444});
-            callback.onUidCpuTime(Process.SYSTEM_UID, new long[]{50_000, 80_000});
-            return null;
-        }).when(mMockKernelCpuUidClusterTimeReader).readDelta(anyBoolean(), any());
-
-        when(mMockKernelSingleUidTimeReader.singleUidCpuTimesAvailable()).thenReturn(true);
-
-        // Per-frequency CPU time
-        doAnswer(invocation -> {
-            final KernelCpuUidTimeReader.Callback<long[]> callback = invocation.getArgument(1);
-            callback.onUidCpuTime(APP_UID1, new long[]{1100, 11, 2200, 22});
-            callback.onUidCpuTime(APP_UID2, new long[]{3300, 33, 4400, 44});
-            callback.onUidCpuTime(Process.SYSTEM_UID, new long[]{20_000, 30_000, 40_000, 40_000});
-            return null;
-        }).when(mMockCpuUidFreqTimeReader).readDelta(anyBoolean(), any());
-
-        // System service CPU time
-        final SystemServerCpuThreadReader.SystemServiceCpuThreadTimes threadTimes =
-                new SystemServerCpuThreadReader.SystemServiceCpuThreadTimes();
-        threadTimes.binderThreadCpuTimesUs =
-                new long[]{20_000_000, 30_000_000, 40_000_000, 50_000_000};
-
-        when(mMockSystemServerCpuThreadReader.readDelta()).thenReturn(threadTimes);
-
-        int transactionCode = 42;
-
-        Collection<BinderCallsStats.CallStat> callStats = new ArrayList<>();
-        BinderCallsStats.CallStat stat1 = new BinderCallsStats.CallStat(APP_UID1,
-                Binder.class, transactionCode, true /*screenInteractive */);
-        stat1.incrementalCallCount = 100;
-        stat1.recordedCallCount = 100;
-        stat1.cpuTimeMicros = 1_000_000;
-        callStats.add(stat1);
-
-        mMockBatteryStats.noteBinderCallStats(APP_UID1, 100, callStats);
-
-        callStats.clear();
-        BinderCallsStats.CallStat stat2 = new BinderCallsStats.CallStat(APP_UID2,
-                Binder.class, transactionCode, true /*screenInteractive */);
-        stat2.incrementalCallCount = 100;
-        stat2.recordedCallCount = 100;
-        stat2.cpuTimeMicros = 9_000_000;
-        callStats.add(stat2);
-
-        mMockBatteryStats.noteBinderCallStats(APP_UID2, 100, callStats);
-
-        mMockBatteryStats.updateCpuTimeLocked(true, true, clusterChargesUc);
-
-        mMockBatteryStats.prepareForDumpLocked();
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/wakeups/CpuWakeupStatsTest.java b/services/tests/servicestests/src/com/android/server/power/stats/wakeups/CpuWakeupStatsTest.java
deleted file mode 100644
index d181419..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/wakeups/CpuWakeupStatsTest.java
+++ /dev/null
@@ -1,499 +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.server.power.stats.wakeups;
-
-import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_ALARM;
-import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_CELLULAR_DATA;
-import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_SENSOR;
-import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER;
-import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_UNKNOWN;
-import static android.os.BatteryStatsInternal.CPU_WAKEUP_SUBSYSTEM_WIFI;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.content.Context;
-import android.os.Handler;
-import android.util.IntArray;
-import android.util.SparseArray;
-import android.util.SparseIntArray;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import com.android.frameworks.servicestests.R;
-import com.android.server.power.stats.wakeups.CpuWakeupStats.Wakeup;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.ThreadLocalRandom;
-
-@RunWith(AndroidJUnit4.class)
-public class CpuWakeupStatsTest {
-    private static final String KERNEL_REASON_ALARM_IRQ = "120 test.alarm.device";
-    private static final String KERNEL_REASON_WIFI_IRQ = "130 test.wifi.device";
-    private static final String KERNEL_REASON_SOUND_TRIGGER_IRQ = "129 test.sound_trigger.device";
-    private static final String KERNEL_REASON_SENSOR_IRQ = "15 test.sensor.device";
-    private static final String KERNEL_REASON_CELLULAR_DATA_IRQ = "18 test.cellular_data.device";
-    private static final String KERNEL_REASON_UNKNOWN_IRQ = "140 test.unknown.device";
-    private static final String KERNEL_REASON_UNKNOWN_FORMAT = "free-form-reason test.alarm.device";
-    private static final String KERNEL_REASON_ALARM_ABNORMAL = "-1 test.alarm.device";
-    private static final String KERNEL_REASON_ABORT = "Abort: due to test.alarm.device";
-
-    private static final int TEST_UID_1 = 13239823;
-    private static final int TEST_UID_2 = 25268423;
-    private static final int TEST_UID_3 = 92261423;
-    private static final int TEST_UID_4 = 56926423;
-    private static final int TEST_UID_5 = 76421423;
-
-    private static final int TEST_PROC_STATE_1 = 72331;
-    private static final int TEST_PROC_STATE_2 = 792351;
-    private static final int TEST_PROC_STATE_3 = 138831;
-    private static final int TEST_PROC_STATE_4 = 23231;
-    private static final int TEST_PROC_STATE_5 = 42;
-
-    private static final Context sContext = InstrumentationRegistry.getTargetContext();
-    private final Handler mHandler = Mockito.mock(Handler.class);
-    private final ThreadLocalRandom mRandom = ThreadLocalRandom.current();
-
-    private void populateDefaultProcStates(CpuWakeupStats obj) {
-        obj.mUidProcStates.put(TEST_UID_1, TEST_PROC_STATE_1);
-        obj.mUidProcStates.put(TEST_UID_2, TEST_PROC_STATE_2);
-        obj.mUidProcStates.put(TEST_UID_3, TEST_PROC_STATE_3);
-        obj.mUidProcStates.put(TEST_UID_4, TEST_PROC_STATE_4);
-        obj.mUidProcStates.put(TEST_UID_5, TEST_PROC_STATE_5);
-    }
-
-    @Test
-    public void removesOldWakeups() {
-        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
-        final long retention = obj.mConfig.WAKEUP_STATS_RETENTION_MS;
-
-        final Set<Long> timestamps = new HashSet<>();
-        final long firstWakeup = 453192;
-
-        // Reasons do not matter for this test, as long as they map to known subsystems
-        obj.noteWakeupTimeAndReason(firstWakeup, 32, KERNEL_REASON_ALARM_IRQ);
-        timestamps.add(firstWakeup);
-        for (int i = 1; i < 1000; i++) {
-            final long delta = mRandom.nextLong(retention);
-            if (timestamps.add(firstWakeup + delta)) {
-                obj.noteWakeupTimeAndReason(firstWakeup + delta, i, KERNEL_REASON_SENSOR_IRQ);
-            }
-        }
-        assertThat(obj.mWakeupEvents.size()).isEqualTo(timestamps.size());
-
-        obj.noteWakeupTimeAndReason(firstWakeup + retention, 231, KERNEL_REASON_WIFI_IRQ);
-        assertThat(obj.mWakeupEvents.size()).isEqualTo(timestamps.size());
-
-        for (int i = 0; i < 100; i++) {
-            final long now = mRandom.nextLong(retention + 1, 100 * retention);
-            obj.noteWakeupTimeAndReason(now, i, KERNEL_REASON_SOUND_TRIGGER_IRQ);
-            assertThat(obj.mWakeupEvents.closestIndexOnOrBefore(now - retention)).isLessThan(0);
-        }
-    }
-
-    @Test
-    public void irqAttributionAllCombinations() {
-        final int[] subsystems = new int[] {
-                CPU_WAKEUP_SUBSYSTEM_ALARM,
-                CPU_WAKEUP_SUBSYSTEM_WIFI,
-                CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER,
-                CPU_WAKEUP_SUBSYSTEM_SENSOR,
-                CPU_WAKEUP_SUBSYSTEM_CELLULAR_DATA,
-        };
-
-        final String[] kernelReasons = new String[] {
-                KERNEL_REASON_ALARM_IRQ,
-                KERNEL_REASON_WIFI_IRQ,
-                KERNEL_REASON_SOUND_TRIGGER_IRQ,
-                KERNEL_REASON_SENSOR_IRQ,
-                KERNEL_REASON_CELLULAR_DATA_IRQ,
-        };
-
-        final int[] uids = new int[] {
-                TEST_UID_2, TEST_UID_3, TEST_UID_4, TEST_UID_1, TEST_UID_5
-        };
-
-        final int[] procStates = new int[] {
-                TEST_PROC_STATE_2,
-                TEST_PROC_STATE_3,
-                TEST_PROC_STATE_4,
-                TEST_PROC_STATE_1,
-                TEST_PROC_STATE_5
-        };
-
-        final int total = subsystems.length;
-        assertThat(kernelReasons.length).isEqualTo(total);
-        assertThat(uids.length).isEqualTo(total);
-        assertThat(procStates.length).isEqualTo(total);
-
-        for (int mask = 1; mask < (1 << total); mask++) {
-            final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3,
-                    mHandler);
-            populateDefaultProcStates(obj);
-
-            final long wakeupTime = mRandom.nextLong(123456);
-
-            String combinedKernelReason = null;
-            for (int i = 0; i < total; i++) {
-                if ((mask & (1 << i)) != 0) {
-                    combinedKernelReason = (combinedKernelReason == null)
-                            ? kernelReasons[i]
-                            : String.join(":", combinedKernelReason, kernelReasons[i]);
-                }
-
-                obj.noteWakingActivity(subsystems[i], wakeupTime + 2, uids[i]);
-            }
-            obj.noteWakeupTimeAndReason(wakeupTime, 1, combinedKernelReason);
-
-            assertThat(obj.mWakeupAttribution.size()).isEqualTo(1);
-
-            final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
-            assertThat(attribution.size()).isEqualTo(Integer.bitCount(mask));
-
-            for (int i = 0; i < total; i++) {
-                if ((mask & (1 << i)) == 0) {
-                    assertThat(attribution.contains(subsystems[i])).isFalse();
-                    continue;
-                }
-                assertThat(attribution.contains(subsystems[i])).isTrue();
-                assertThat(attribution.get(subsystems[i]).get(uids[i])).isEqualTo(procStates[i]);
-
-                for (int j = 0; j < total; j++) {
-                    if (i == j) {
-                        continue;
-                    }
-                    assertThat(attribution.get(subsystems[i]).indexOfKey(uids[j])).isLessThan(0);
-                }
-            }
-        }
-    }
-
-    @Test
-    public void alarmIrqAttributionSolo() {
-        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
-        final long wakeupTime = 12423121;
-
-        populateDefaultProcStates(obj);
-
-        obj.noteWakeupTimeAndReason(wakeupTime, 1, KERNEL_REASON_ALARM_IRQ);
-
-        // Outside the window, so should be ignored.
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM,
-                wakeupTime - obj.mConfig.WAKEUP_MATCHING_WINDOW_MS - 1, TEST_UID_1);
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM,
-                wakeupTime + obj.mConfig.WAKEUP_MATCHING_WINDOW_MS + 1, TEST_UID_2);
-        // Should be attributed
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime + 5, TEST_UID_3, TEST_UID_5);
-
-        final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
-        assertThat(attribution).isNotNull();
-        assertThat(attribution.size()).isEqualTo(1);
-        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_ALARM)).isTrue();
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_1)).isLessThan(
-                0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_2)).isLessThan(
-                0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_3)).isEqualTo(
-                TEST_PROC_STATE_3);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_4)).isLessThan(
-                0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_5)).isEqualTo(
-                TEST_PROC_STATE_5);
-    }
-
-    @Test
-    public void soundTriggerIrqAttributionSolo() {
-        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
-        final long wakeupTime = 1247121;
-
-        populateDefaultProcStates(obj);
-
-        obj.noteWakeupTimeAndReason(wakeupTime, 1, KERNEL_REASON_SOUND_TRIGGER_IRQ);
-
-        // Outside the window, so should be ignored.
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER,
-                wakeupTime - obj.mConfig.WAKEUP_MATCHING_WINDOW_MS - 1, TEST_UID_1);
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER,
-                wakeupTime + obj.mConfig.WAKEUP_MATCHING_WINDOW_MS + 1, TEST_UID_2);
-        // Should be attributed
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER, wakeupTime + 5, TEST_UID_3,
-                TEST_UID_5);
-
-        final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
-        assertThat(attribution).isNotNull();
-        assertThat(attribution.size()).isEqualTo(1);
-        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER)).isTrue();
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).indexOfKey(
-                TEST_UID_1)).isLessThan(0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).indexOfKey(
-                TEST_UID_2)).isLessThan(0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).get(TEST_UID_3)).isEqualTo(
-                TEST_PROC_STATE_3);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).indexOfKey(
-                TEST_UID_4)).isLessThan(0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_SOUND_TRIGGER).get(TEST_UID_5)).isEqualTo(
-                TEST_PROC_STATE_5);
-    }
-
-    @Test
-    public void wifiIrqAttributionSolo() {
-        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
-        final long wakeupTime = 12423121;
-
-        populateDefaultProcStates(obj);
-
-        obj.noteWakeupTimeAndReason(wakeupTime, 1, KERNEL_REASON_WIFI_IRQ);
-
-        // Outside the window, so should be ignored.
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI,
-                wakeupTime - obj.mConfig.WAKEUP_MATCHING_WINDOW_MS - 1, TEST_UID_1);
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI,
-                wakeupTime + obj.mConfig.WAKEUP_MATCHING_WINDOW_MS + 1, TEST_UID_2);
-        // Should be attributed
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime + 3, TEST_UID_4, TEST_UID_5);
-
-        final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
-        assertThat(attribution).isNotNull();
-        assertThat(attribution.size()).isEqualTo(1);
-        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_WIFI)).isTrue();
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).indexOfKey(TEST_UID_1)).isLessThan(0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).indexOfKey(TEST_UID_2)).isLessThan(0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).indexOfKey(TEST_UID_3)).isLessThan(0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_4)).isEqualTo(
-                TEST_PROC_STATE_4);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_5)).isEqualTo(
-                TEST_PROC_STATE_5);
-    }
-
-    @Test
-    public void alarmAndWifiIrqAttribution() {
-        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
-        final long wakeupTime = 92123210;
-
-        populateDefaultProcStates(obj);
-
-        obj.noteWakeupTimeAndReason(wakeupTime, 4,
-                KERNEL_REASON_WIFI_IRQ + ":" + KERNEL_REASON_ALARM_IRQ);
-
-        // Alarm activity
-        // Outside the window, so should be ignored.
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM,
-                wakeupTime - obj.mConfig.WAKEUP_MATCHING_WINDOW_MS - 1, TEST_UID_1);
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM,
-                wakeupTime + obj.mConfig.WAKEUP_MATCHING_WINDOW_MS + 1, TEST_UID_2);
-        // Should be attributed
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime + 5, TEST_UID_3);
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime - 3, TEST_UID_4,
-                TEST_UID_5);
-
-        // Wifi activity
-        // Outside the window, so should be ignored.
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI,
-                wakeupTime - obj.mConfig.WAKEUP_MATCHING_WINDOW_MS - 1, TEST_UID_4);
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI,
-                wakeupTime + obj.mConfig.WAKEUP_MATCHING_WINDOW_MS + 1, TEST_UID_3);
-        // Should be attributed
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime + 2, TEST_UID_1);
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime - 1, TEST_UID_2,
-                TEST_UID_5);
-
-        final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
-        assertThat(attribution).isNotNull();
-        assertThat(attribution.size()).isEqualTo(2);
-
-        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_ALARM)).isTrue();
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_1)).isLessThan(
-                0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_2)).isLessThan(
-                0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_3)).isEqualTo(
-                TEST_PROC_STATE_3);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_4)).isEqualTo(
-                TEST_PROC_STATE_4);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_5)).isEqualTo(
-                TEST_PROC_STATE_5);
-
-        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_WIFI)).isTrue();
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_1)).isEqualTo(
-                TEST_PROC_STATE_1);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_2)).isEqualTo(
-                TEST_PROC_STATE_2);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).indexOfKey(TEST_UID_3)).isLessThan(0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).indexOfKey(TEST_UID_4)).isLessThan(0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_5)).isEqualTo(
-                TEST_PROC_STATE_5);
-    }
-
-    @Test
-    public void unknownIrqSoloIgnored() {
-        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
-        final long wakeupTime = 92123410;
-
-        obj.noteWakeupTimeAndReason(wakeupTime, 24, KERNEL_REASON_UNKNOWN_IRQ);
-
-        assertThat(obj.mWakeupEvents.size()).isEqualTo(0);
-
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime + 5, TEST_UID_3);
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime - 3, TEST_UID_4,
-                TEST_UID_5);
-
-        // Any nearby activity should not end up in the attribution map.
-        assertThat(obj.mWakeupAttribution.size()).isEqualTo(0);
-    }
-
-    @Test
-    public void unknownAndWifiAttribution() {
-        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
-        final long wakeupTime = 92123410;
-
-        populateDefaultProcStates(obj);
-
-        obj.noteWakeupTimeAndReason(wakeupTime, 24,
-                KERNEL_REASON_UNKNOWN_IRQ + ":" + KERNEL_REASON_WIFI_IRQ);
-
-        // Wifi activity
-        // Outside the window, so should be ignored.
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI,
-                wakeupTime - obj.mConfig.WAKEUP_MATCHING_WINDOW_MS - 1, TEST_UID_4);
-        // Should be attributed
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime + 2, TEST_UID_1);
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime - 1, TEST_UID_3,
-                TEST_UID_5);
-
-        // Unrelated, should be ignored.
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime + 5, TEST_UID_3);
-
-        final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
-        assertThat(attribution).isNotNull();
-        assertThat(attribution.size()).isEqualTo(2);
-        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_WIFI)).isTrue();
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_1)).isEqualTo(
-                TEST_PROC_STATE_1);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).indexOfKey(TEST_UID_2)).isLessThan(0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_3)).isEqualTo(
-                TEST_PROC_STATE_3);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).indexOfKey(TEST_UID_4)).isLessThan(0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_WIFI).get(TEST_UID_5)).isEqualTo(
-                TEST_PROC_STATE_5);
-        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_UNKNOWN)).isTrue();
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_UNKNOWN)).isNull();
-        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_ALARM)).isFalse();
-    }
-
-    @Test
-    public void unknownFormatWakeupIgnored() {
-        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
-        final long wakeupTime = 72123210;
-
-        obj.noteWakeupTimeAndReason(wakeupTime, 34, KERNEL_REASON_UNKNOWN_FORMAT);
-
-        // Should be ignored as this type of wakeup is not known.
-        assertThat(obj.mWakeupEvents.size()).isEqualTo(0);
-
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime + 5, TEST_UID_3);
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime - 3, TEST_UID_4);
-
-        // Any nearby activity should not end up in the attribution map.
-        assertThat(obj.mWakeupAttribution.size()).isEqualTo(0);
-    }
-
-    @Test
-    public void abnormalAlarmAttribution() {
-        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
-        populateDefaultProcStates(obj);
-
-        long wakeupTime = 970934;
-        obj.noteWakeupTimeAndReason(wakeupTime, 34, KERNEL_REASON_ALARM_ABNORMAL);
-
-        assertThat(obj.mWakeupEvents.size()).isEqualTo(1);
-        assertThat(obj.mWakeupEvents.valueAt(0).mType).isEqualTo(Wakeup.TYPE_ABNORMAL);
-
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime + 5, TEST_UID_3);
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_ALARM, wakeupTime - 3, TEST_UID_4);
-
-        final SparseArray<SparseIntArray> attribution = obj.mWakeupAttribution.get(wakeupTime);
-        assertThat(attribution.size()).isEqualTo(1);
-        assertThat(attribution.contains(CPU_WAKEUP_SUBSYSTEM_ALARM)).isTrue();
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_1)).isLessThan(
-                0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_2)).isLessThan(
-                0);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_3)).isEqualTo(
-                TEST_PROC_STATE_3);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).get(TEST_UID_4)).isEqualTo(
-                TEST_PROC_STATE_4);
-        assertThat(attribution.get(CPU_WAKEUP_SUBSYSTEM_ALARM).indexOfKey(TEST_UID_5)).isLessThan(
-                0);
-    }
-
-    @Test
-    public void abortIgnored() {
-        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
-
-        long wakeupTime = 883124;
-        obj.noteWakeupTimeAndReason(wakeupTime, 3, KERNEL_REASON_ABORT);
-
-        // Should be ignored as this type of wakeup is unsupported.
-        assertThat(obj.mWakeupEvents.size()).isEqualTo(0);
-
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime + 2, TEST_UID_1, TEST_UID_4);
-        obj.noteWakingActivity(CPU_WAKEUP_SUBSYSTEM_WIFI, wakeupTime - 5, TEST_UID_3);
-
-        // Any nearby activity should not end up in the attribution map.
-        assertThat(obj.mWakeupAttribution.size()).isEqualTo(0);
-    }
-
-    @Test
-    public void uidProcStateBookkeeping() {
-        final CpuWakeupStats obj = new CpuWakeupStats(sContext, R.xml.irq_device_map_3, mHandler);
-
-        assertThat(obj.mUidProcStates.size()).isEqualTo(0);
-
-        final IntArray uids = new IntArray(87);
-        for (int i = 0; i < 87; i++) {
-            final int uid = mRandom.nextInt(1 << 20);
-            if (uids.indexOf(uid) < 0) {
-                uids.add(uid);
-            }
-        }
-
-        for (int i = 0; i < uids.size(); i++) {
-            final int uid = uids.get(i);
-            for (int j = 0; j < 43; j++) {
-                final int procState = mRandom.nextInt(1 << 15);
-                obj.noteUidProcessState(uid, procState);
-                assertThat(obj.mUidProcStates.get(uid)).isEqualTo(procState);
-            }
-            assertThat(obj.mUidProcStates.size()).isEqualTo(i + 1);
-        }
-
-        for (int i = 0; i < uids.size(); i++) {
-            obj.onUidRemoved(uids.get(i));
-            assertThat(obj.mUidProcStates.indexOfKey(uids.get(i))).isLessThan(0);
-        }
-
-        assertThat(obj.mUidProcStates.size()).isEqualTo(0);
-
-        obj.onUidRemoved(213);
-        assertThat(obj.mUidProcStates.size()).isEqualTo(0);
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/wakeups/IrqDeviceMapTest.java b/services/tests/servicestests/src/com/android/server/power/stats/wakeups/IrqDeviceMapTest.java
deleted file mode 100644
index 47a8f49..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/wakeups/IrqDeviceMapTest.java
+++ /dev/null
@@ -1,98 +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.server.power.stats.wakeups;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.content.Context;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import com.android.frameworks.servicestests.R;
-import com.android.internal.util.CollectionUtils;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.List;
-
-@RunWith(AndroidJUnit4.class)
-public class IrqDeviceMapTest {
-    private static final String TEST_DEVICE_1 = "test.device.1";
-    private static final String TEST_DEVICE_2 = "test.device.2";
-    private static final String TEST_DEVICE_3 = "test.device.3";
-    private static final String TEST_DEVICE_4 = "test.device.4";
-
-    private static final String TEST_SUBSYSTEM_1 = "test.subsystem.1";
-    private static final String TEST_SUBSYSTEM_2 = "test.subsystem.2";
-    private static final String TEST_SUBSYSTEM_3 = "test.subsystem.3";
-    private static final String TEST_SUBSYSTEM_4 = "test.subsystem.4";
-    private static final String TEST_SUBSYSTEM_5 = "test.subsystem.5";
-
-    private static final Context sContext = InstrumentationRegistry.getTargetContext();
-
-    @Test
-    public void cachesInstancesPerXml() {
-        IrqDeviceMap irqDeviceMap1 = IrqDeviceMap.getInstance(sContext, R.xml.irq_device_map_1);
-        IrqDeviceMap irqDeviceMap2 = IrqDeviceMap.getInstance(sContext, R.xml.irq_device_map_1);
-        assertThat(irqDeviceMap1).isSameInstanceAs(irqDeviceMap2);
-
-        irqDeviceMap2 = IrqDeviceMap.getInstance(sContext, R.xml.irq_device_map_2);
-        assertThat(irqDeviceMap1).isNotSameInstanceAs(irqDeviceMap2);
-
-        irqDeviceMap1 = IrqDeviceMap.getInstance(sContext, R.xml.irq_device_map_2);
-        assertThat(irqDeviceMap1).isSameInstanceAs(irqDeviceMap2);
-    }
-
-    @Test
-    public void simpleXml() {
-        IrqDeviceMap deviceMap = IrqDeviceMap.getInstance(sContext, R.xml.irq_device_map_1);
-
-        List<String> subsystems = deviceMap.getSubsystemsForDevice(TEST_DEVICE_1);
-        assertThat(subsystems).hasSize(2);
-        // No specific order is required.
-        assertThat(subsystems).containsExactly(TEST_SUBSYSTEM_2, TEST_SUBSYSTEM_1);
-
-        subsystems = deviceMap.getSubsystemsForDevice(TEST_DEVICE_2);
-        assertThat(subsystems).hasSize(2);
-        // No specific order is required.
-        assertThat(subsystems).containsExactly(TEST_SUBSYSTEM_2, TEST_SUBSYSTEM_3);
-    }
-
-    @Test
-    public void complexXml() {
-        IrqDeviceMap deviceMap = IrqDeviceMap.getInstance(sContext, R.xml.irq_device_map_2);
-
-        List<String> subsystems = deviceMap.getSubsystemsForDevice(TEST_DEVICE_1);
-        assertThat(CollectionUtils.isEmpty(subsystems)).isTrue();
-
-        subsystems = deviceMap.getSubsystemsForDevice(TEST_DEVICE_2);
-        assertThat(subsystems).hasSize(3);
-        // No specific order is required.
-        assertThat(subsystems).containsExactly(TEST_SUBSYSTEM_3, TEST_SUBSYSTEM_4,
-                TEST_SUBSYSTEM_5);
-
-        subsystems = deviceMap.getSubsystemsForDevice(TEST_DEVICE_3);
-        assertThat(CollectionUtils.isEmpty(subsystems)).isTrue();
-
-        subsystems = deviceMap.getSubsystemsForDevice(TEST_DEVICE_4);
-        assertThat(subsystems).hasSize(2);
-        // No specific order is required.
-        assertThat(subsystems).containsExactly(TEST_SUBSYSTEM_4, TEST_SUBSYSTEM_1);
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/wakeups/WakingActivityHistoryTest.java b/services/tests/servicestests/src/com/android/server/power/stats/wakeups/WakingActivityHistoryTest.java
deleted file mode 100644
index b02618e..0000000
--- a/services/tests/servicestests/src/com/android/server/power/stats/wakeups/WakingActivityHistoryTest.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.power.stats.wakeups;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.util.SparseIntArray;
-import android.util.TimeSparseArray;
-
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import com.android.server.power.stats.wakeups.CpuWakeupStats.WakingActivityHistory;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.concurrent.ThreadLocalRandom;
-
-@RunWith(AndroidJUnit4.class)
-public class WakingActivityHistoryTest {
-    private volatile long mTestRetention = 54;
-
-    private static boolean areSame(SparseIntArray a, SparseIntArray b) {
-        if (a == b) {
-            return true;
-        }
-        if (a == null || b == null) {
-            return false;
-        }
-        final int lenA = a.size();
-        if (b.size() != lenA) {
-            return false;
-        }
-        for (int i = 0; i < lenA; i++) {
-            if (a.keyAt(i) != b.keyAt(i)) {
-                return false;
-            }
-            if (a.valueAt(i) != b.valueAt(i)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    @Test
-    public void recordActivityAppendsUids() {
-        final WakingActivityHistory history = new WakingActivityHistory(() -> Long.MAX_VALUE);
-        final int subsystem = 42;
-        final long timestamp = 54;
-
-        final SparseIntArray uids = new SparseIntArray();
-        uids.put(1, 3);
-        uids.put(5, 2);
-
-        history.recordActivity(subsystem, timestamp, uids);
-
-        assertThat(history.mWakingActivity.size()).isEqualTo(1);
-        assertThat(history.mWakingActivity.contains(subsystem)).isTrue();
-        assertThat(history.mWakingActivity.contains(subsystem + 1)).isFalse();
-        assertThat(history.mWakingActivity.contains(subsystem - 1)).isFalse();
-
-        final TimeSparseArray<SparseIntArray> recordedHistory = history.mWakingActivity.get(
-                subsystem);
-
-        assertThat(recordedHistory.size()).isEqualTo(1);
-        assertThat(recordedHistory.indexOfKey(timestamp - 1)).isLessThan(0);
-        assertThat(recordedHistory.indexOfKey(timestamp)).isAtLeast(0);
-        assertThat(recordedHistory.indexOfKey(timestamp + 1)).isLessThan(0);
-
-        SparseIntArray recordedUids = recordedHistory.get(timestamp);
-        assertThat(recordedUids).isNotSameInstanceAs(uids);
-        assertThat(areSame(recordedUids, uids)).isTrue();
-
-        uids.put(1, 7);
-        uids.clear();
-        uids.put(10, 12);
-        uids.put(17, 53);
-
-        history.recordActivity(subsystem, timestamp, uids);
-
-        recordedUids = recordedHistory.get(timestamp);
-
-        assertThat(recordedUids.size()).isEqualTo(4);
-        assertThat(recordedUids.indexOfKey(1)).isAtLeast(0);
-        assertThat(recordedUids.get(5, -1)).isEqualTo(2);
-        assertThat(recordedUids.get(10, -1)).isEqualTo(12);
-        assertThat(recordedUids.get(17, -1)).isEqualTo(53);
-    }
-
-    @Test
-    public void recordActivityDoesNotDeleteExistingUids() {
-        final WakingActivityHistory history = new WakingActivityHistory(() -> Long.MAX_VALUE);
-        final int subsystem = 42;
-        long timestamp = 101;
-
-        final SparseIntArray uids = new SparseIntArray();
-        uids.put(1, 17);
-        uids.put(15, 2);
-        uids.put(62, 31);
-
-        history.recordActivity(subsystem, timestamp, uids);
-
-        assertThat(history.mWakingActivity.size()).isEqualTo(1);
-        assertThat(history.mWakingActivity.contains(subsystem)).isTrue();
-        assertThat(history.mWakingActivity.contains(subsystem + 1)).isFalse();
-        assertThat(history.mWakingActivity.contains(subsystem - 1)).isFalse();
-
-        final TimeSparseArray<SparseIntArray> recordedHistory = history.mWakingActivity.get(
-                subsystem);
-
-        assertThat(recordedHistory.size()).isEqualTo(1);
-        assertThat(recordedHistory.indexOfKey(timestamp - 1)).isLessThan(0);
-        assertThat(recordedHistory.indexOfKey(timestamp)).isAtLeast(0);
-        assertThat(recordedHistory.indexOfKey(timestamp + 1)).isLessThan(0);
-
-        SparseIntArray recordedUids = recordedHistory.get(timestamp);
-        assertThat(recordedUids).isNotSameInstanceAs(uids);
-        assertThat(areSame(recordedUids, uids)).isTrue();
-
-        uids.delete(1);
-        uids.delete(15);
-        uids.put(85, 39);
-
-        history.recordActivity(subsystem, timestamp, uids);
-        recordedUids = recordedHistory.get(timestamp);
-
-        assertThat(recordedUids.size()).isEqualTo(4);
-        assertThat(recordedUids.get(1, -1)).isEqualTo(17);
-        assertThat(recordedUids.get(15, -1)).isEqualTo(2);
-        assertThat(recordedUids.get(62, -1)).isEqualTo(31);
-        assertThat(recordedUids.get(85, -1)).isEqualTo(39);
-
-        uids.clear();
-        history.recordActivity(subsystem, timestamp, uids);
-        recordedUids = recordedHistory.get(timestamp);
-
-        assertThat(recordedUids.size()).isEqualTo(4);
-        assertThat(recordedUids.get(1, -1)).isEqualTo(17);
-        assertThat(recordedUids.get(15, -1)).isEqualTo(2);
-        assertThat(recordedUids.get(62, -1)).isEqualTo(31);
-        assertThat(recordedUids.get(85, -1)).isEqualTo(39);
-    }
-
-    @Test
-    public void removeBetween() {
-        final WakingActivityHistory history = new WakingActivityHistory(() -> Long.MAX_VALUE);
-
-        final int subsystem = 43;
-
-        final SparseIntArray uids = new SparseIntArray();
-        uids.put(1, 17);
-        uids.put(15, 2);
-        uids.put(62, 31);
-        history.recordActivity(subsystem, 123, uids);
-
-        uids.put(54, 91);
-        history.recordActivity(subsystem, 150, uids);
-
-        uids.put(101, 32);
-        uids.delete(1);
-        history.recordActivity(subsystem, 191, uids);
-
-        SparseIntArray removedUids = history.removeBetween(subsystem, 100, 122);
-        assertThat(removedUids).isNull();
-        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(3);
-
-        removedUids = history.removeBetween(subsystem, 124, 149);
-        assertThat(removedUids).isNull();
-        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(3);
-
-        removedUids = history.removeBetween(subsystem, 151, 190);
-        assertThat(removedUids).isNull();
-        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(3);
-
-        removedUids = history.removeBetween(subsystem, 192, 240);
-        assertThat(removedUids).isNull();
-        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(3);
-
-
-        // Removing from a different subsystem should do nothing.
-        removedUids = history.removeBetween(subsystem + 1, 0, 300);
-        assertThat(removedUids).isNull();
-        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(3);
-
-        removedUids = history.removeBetween(subsystem, 0, 300);
-        assertThat(removedUids.size()).isEqualTo(5);
-        assertThat(removedUids.get(1, -1)).isEqualTo(17);
-        assertThat(removedUids.get(15, -1)).isEqualTo(2);
-        assertThat(removedUids.get(62, -1)).isEqualTo(31);
-        assertThat(removedUids.get(54, -1)).isEqualTo(91);
-        assertThat(removedUids.get(101, -1)).isEqualTo(32);
-
-        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(0);
-
-        history.recordActivity(subsystem, 23, uids);
-        uids.put(31, 123);
-        history.recordActivity(subsystem, 49, uids);
-        uids.put(177, 432);
-        history.recordActivity(subsystem, 89, uids);
-
-        removedUids = history.removeBetween(subsystem, 23, 23);
-        assertThat(removedUids.size()).isEqualTo(4);
-        assertThat(removedUids.get(15, -1)).isEqualTo(2);
-        assertThat(removedUids.get(62, -1)).isEqualTo(31);
-        assertThat(removedUids.get(54, -1)).isEqualTo(91);
-        assertThat(removedUids.get(101, -1)).isEqualTo(32);
-
-        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(2);
-
-        removedUids = history.removeBetween(subsystem, 49, 54);
-        assertThat(removedUids.size()).isEqualTo(5);
-        assertThat(removedUids.get(15, -1)).isEqualTo(2);
-        assertThat(removedUids.get(62, -1)).isEqualTo(31);
-        assertThat(removedUids.get(54, -1)).isEqualTo(91);
-        assertThat(removedUids.get(101, -1)).isEqualTo(32);
-        assertThat(removedUids.get(31, -1)).isEqualTo(123);
-
-        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(1);
-
-        removedUids = history.removeBetween(subsystem, 23, 89);
-        assertThat(removedUids.size()).isEqualTo(6);
-        assertThat(removedUids.get(15, -1)).isEqualTo(2);
-        assertThat(removedUids.get(62, -1)).isEqualTo(31);
-        assertThat(removedUids.get(54, -1)).isEqualTo(91);
-        assertThat(removedUids.get(101, -1)).isEqualTo(32);
-        assertThat(removedUids.get(31, -1)).isEqualTo(123);
-        assertThat(removedUids.get(177, -1)).isEqualTo(432);
-
-        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(0);
-    }
-
-    @Test
-    public void deletesActivityPastRetention() {
-        final WakingActivityHistory history = new WakingActivityHistory(() -> mTestRetention);
-        final int subsystem = 49;
-
-        mTestRetention = 454;
-
-        final long firstTime = 342;
-        for (int i = 0; i < mTestRetention; i++) {
-            history.recordActivity(subsystem, firstTime + i, new SparseIntArray());
-        }
-        assertThat(history.mWakingActivity.get(subsystem)).isNotNull();
-        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(mTestRetention);
-
-        history.recordActivity(subsystem, firstTime + mTestRetention + 7, new SparseIntArray());
-        assertThat(history.mWakingActivity.get(subsystem).size()).isEqualTo(mTestRetention - 7);
-
-        final ThreadLocalRandom random = ThreadLocalRandom.current();
-
-        for (int i = 0; i < 100; i++) {
-            final long time = random.nextLong(firstTime + mTestRetention + 100,
-                    456 * mTestRetention);
-            history.recordActivity(subsystem, time, new SparseIntArray());
-            assertThat(history.mWakingActivity.get(subsystem).closestIndexOnOrBefore(
-                    time - mTestRetention)).isLessThan(0);
-        }
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/powerstats/OWNERS b/services/tests/servicestests/src/com/android/server/powerstats/OWNERS
deleted file mode 100644
index 12f13ea..0000000
--- a/services/tests/servicestests/src/com/android/server/powerstats/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-include /services/core/java/com/android/server/powerstats/OWNERS
diff --git a/services/tests/servicestests/src/com/android/server/powerstats/PowerStatsServiceTest.java b/services/tests/servicestests/src/com/android/server/powerstats/PowerStatsServiceTest.java
deleted file mode 100644
index 304fe5a..0000000
--- a/services/tests/servicestests/src/com/android/server/powerstats/PowerStatsServiceTest.java
+++ /dev/null
@@ -1,1011 +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.server.powerstats;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import android.content.Context;
-import android.hardware.power.stats.Channel;
-import android.hardware.power.stats.EnergyConsumer;
-import android.hardware.power.stats.EnergyConsumerAttribution;
-import android.hardware.power.stats.EnergyConsumerResult;
-import android.hardware.power.stats.EnergyMeasurement;
-import android.hardware.power.stats.PowerEntity;
-import android.hardware.power.stats.State;
-import android.hardware.power.stats.StateResidency;
-import android.hardware.power.stats.StateResidencyResult;
-import android.os.Looper;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.server.SystemService;
-import com.android.server.powerstats.PowerStatsHALWrapper.IPowerStatsHALWrapper;
-import com.android.server.powerstats.ProtoStreamUtils.ChannelUtils;
-import com.android.server.powerstats.ProtoStreamUtils.EnergyConsumerUtils;
-import com.android.server.powerstats.ProtoStreamUtils.PowerEntityUtils;
-import com.android.server.powerstats.nano.PowerEntityProto;
-import com.android.server.powerstats.nano.PowerStatsServiceMeterProto;
-import com.android.server.powerstats.nano.PowerStatsServiceModelProto;
-import com.android.server.powerstats.nano.PowerStatsServiceResidencyProto;
-import com.android.server.powerstats.nano.StateProto;
-import com.android.server.powerstats.nano.StateResidencyProto;
-import com.android.server.powerstats.nano.StateResidencyResultProto;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.file.Files;
-import java.util.Arrays;
-import java.util.Random;
-
-/**
- * Tests for {@link com.android.server.powerstats.PowerStatsService}.
- *
- * Build/Install/Run:
- *  atest FrameworksServicesTests:PowerStatsServiceTest
- */
-public class PowerStatsServiceTest {
-    private static final String TAG = PowerStatsServiceTest.class.getSimpleName();
-    private static final String DATA_STORAGE_SUBDIR = "powerstatstest";
-    private static final String METER_FILENAME = "log.powerstats.metertest.0";
-    private static final String MODEL_FILENAME = "log.powerstats.modeltest.0";
-    private static final String RESIDENCY_FILENAME = "log.powerstats.residencytest.0";
-    private static final String PROTO_OUTPUT_FILENAME = "powerstats.proto";
-    private static final String CHANNEL_NAME = "channelname";
-    private static final String CHANNEL_SUBSYSTEM = "channelsubsystem";
-    private static final String POWER_ENTITY_NAME = "powerentityinfo";
-    private static final String STATE_NAME = "stateinfo";
-    private static final String ENERGY_CONSUMER_NAME = "energyconsumer";
-    private static final String METER_CACHE_FILENAME = "meterCacheTest";
-    private static final String MODEL_CACHE_FILENAME = "modelCacheTest";
-    private static final String RESIDENCY_CACHE_FILENAME = "residencyCacheTest";
-    private static final int ENERGY_METER_COUNT = 8;
-    private static final int ENERGY_CONSUMER_COUNT = 2;
-    private static final int ENERGY_CONSUMER_ATTRIBUTION_COUNT = 5;
-    private static final int POWER_ENTITY_COUNT = 3;
-    private static final int STATE_INFO_COUNT = 5;
-    private static final int STATE_RESIDENCY_COUNT = 4;
-
-    private final Context mContext = InstrumentationRegistry.getInstrumentation().getContext();
-    private PowerStatsService mService;
-    private File mDataStorageDir;
-    private TimerTrigger mTimerTrigger;
-    private BatteryTrigger mBatteryTrigger;
-    private PowerStatsLogger mPowerStatsLogger;
-
-    private final PowerStatsService.Injector mInjector = new PowerStatsService.Injector() {
-        private TestPowerStatsHALWrapper mTestPowerStatsHALWrapper = new TestPowerStatsHALWrapper();
-        @Override
-        File createDataStoragePath() {
-            if (mDataStorageDir == null) {
-                try {
-                    mDataStorageDir = Files.createTempDirectory(DATA_STORAGE_SUBDIR).toFile();
-                } catch (IOException e) {
-                    fail("Could not create temp directory.");
-                }
-            }
-
-            return mDataStorageDir;
-        }
-
-        @Override
-        String createMeterFilename() {
-            return METER_FILENAME;
-        }
-
-        @Override
-        String createModelFilename() {
-            return MODEL_FILENAME;
-        }
-
-        @Override
-        String createResidencyFilename() {
-            return RESIDENCY_FILENAME;
-        }
-
-        @Override
-        String createMeterCacheFilename() {
-            return METER_CACHE_FILENAME;
-        }
-
-        @Override
-        String createModelCacheFilename() {
-            return MODEL_CACHE_FILENAME;
-        }
-
-        @Override
-        String createResidencyCacheFilename() {
-            return RESIDENCY_CACHE_FILENAME;
-        }
-
-        @Override
-        IPowerStatsHALWrapper getPowerStatsHALWrapperImpl() {
-            return mTestPowerStatsHALWrapper;
-        }
-
-        @Override
-        PowerStatsLogger createPowerStatsLogger(Context context, Looper looper,
-                File dataStoragePath, String meterFilename, String meterCacheFilename,
-                String modelFilename, String modelCacheFilename,
-                String residencyFilename, String residencyCacheFilename,
-                IPowerStatsHALWrapper powerStatsHALWrapper) {
-            mPowerStatsLogger = new PowerStatsLogger(context, looper, dataStoragePath,
-                meterFilename, meterCacheFilename,
-                modelFilename, modelCacheFilename,
-                residencyFilename, residencyCacheFilename,
-                powerStatsHALWrapper);
-            return mPowerStatsLogger;
-        }
-
-        @Override
-        BatteryTrigger createBatteryTrigger(Context context, PowerStatsLogger powerStatsLogger) {
-            mBatteryTrigger = new BatteryTrigger(context, powerStatsLogger,
-                false /* trigger enabled */);
-            return mBatteryTrigger;
-        }
-
-        @Override
-        TimerTrigger createTimerTrigger(Context context, PowerStatsLogger powerStatsLogger) {
-            mTimerTrigger = new TimerTrigger(context, powerStatsLogger,
-                false /* trigger enabled */);
-            return mTimerTrigger;
-        }
-    };
-
-    public static final class TestPowerStatsHALWrapper implements IPowerStatsHALWrapper {
-        @Override
-        public PowerEntity[] getPowerEntityInfo() {
-            PowerEntity[] powerEntityList = new PowerEntity[POWER_ENTITY_COUNT];
-            for (int i = 0; i < powerEntityList.length; i++) {
-                powerEntityList[i] = new PowerEntity();
-                powerEntityList[i].id = i;
-                powerEntityList[i].name = new String(POWER_ENTITY_NAME + i);
-                powerEntityList[i].states = new State[STATE_INFO_COUNT];
-                for (int j = 0; j < powerEntityList[i].states.length; j++) {
-                    powerEntityList[i].states[j] = new State();
-                    powerEntityList[i].states[j].id = j;
-                    powerEntityList[i].states[j].name = new String(STATE_NAME + j);
-                }
-            }
-            return powerEntityList;
-        }
-
-        @Override
-        public StateResidencyResult[] getStateResidency(int[] powerEntityIds) {
-            StateResidencyResult[] stateResidencyResultList =
-                new StateResidencyResult[POWER_ENTITY_COUNT];
-            for (int i = 0; i < stateResidencyResultList.length; i++) {
-                stateResidencyResultList[i] = new StateResidencyResult();
-                stateResidencyResultList[i].id = i;
-                stateResidencyResultList[i].stateResidencyData =
-                    new StateResidency[STATE_RESIDENCY_COUNT];
-                for (int j = 0; j < stateResidencyResultList[i].stateResidencyData.length; j++) {
-                    stateResidencyResultList[i].stateResidencyData[j] = new StateResidency();
-                    stateResidencyResultList[i].stateResidencyData[j].id = j;
-                    stateResidencyResultList[i].stateResidencyData[j].totalTimeInStateMs = j;
-                    stateResidencyResultList[i].stateResidencyData[j].totalStateEntryCount = j;
-                    stateResidencyResultList[i].stateResidencyData[j].lastEntryTimestampMs = j;
-                }
-            }
-
-            return stateResidencyResultList;
-        }
-
-        @Override
-        public EnergyConsumer[] getEnergyConsumerInfo() {
-            EnergyConsumer[] energyConsumerList = new EnergyConsumer[ENERGY_CONSUMER_COUNT];
-            for (int i = 0; i < energyConsumerList.length; i++) {
-                energyConsumerList[i] = new EnergyConsumer();
-                energyConsumerList[i].id = i;
-                energyConsumerList[i].ordinal = i;
-                energyConsumerList[i].type = (byte) i;
-                energyConsumerList[i].name = new String(ENERGY_CONSUMER_NAME + i);
-            }
-            return energyConsumerList;
-        }
-
-        @Override
-        public EnergyConsumerResult[] getEnergyConsumed(int[] energyConsumerIds) {
-            EnergyConsumerResult[] energyConsumedList =
-                new EnergyConsumerResult[ENERGY_CONSUMER_COUNT];
-            for (int i = 0; i < energyConsumedList.length; i++) {
-                energyConsumedList[i] = new EnergyConsumerResult();
-                energyConsumedList[i].id = i;
-                energyConsumedList[i].timestampMs = i;
-                energyConsumedList[i].energyUWs = i;
-                energyConsumedList[i].attribution =
-                    new EnergyConsumerAttribution[ENERGY_CONSUMER_ATTRIBUTION_COUNT];
-                for (int j = 0; j < energyConsumedList[i].attribution.length; j++) {
-                    energyConsumedList[i].attribution[j] = new EnergyConsumerAttribution();
-                    energyConsumedList[i].attribution[j].uid = j;
-                    energyConsumedList[i].attribution[j].energyUWs = j;
-                }
-            }
-            return energyConsumedList;
-        }
-
-        @Override
-        public Channel[] getEnergyMeterInfo() {
-            Channel[] energyMeterList = new Channel[ENERGY_METER_COUNT];
-            for (int i = 0; i < energyMeterList.length; i++) {
-                energyMeterList[i] = new Channel();
-                energyMeterList[i].id = i;
-                energyMeterList[i].name = new String(CHANNEL_NAME + i);
-                energyMeterList[i].subsystem = new String(CHANNEL_SUBSYSTEM + i);
-            }
-            return energyMeterList;
-        }
-
-        @Override
-        public EnergyMeasurement[] readEnergyMeter(int[] channelIds) {
-            EnergyMeasurement[] energyMeasurementList = new EnergyMeasurement[ENERGY_METER_COUNT];
-            for (int i = 0; i < energyMeasurementList.length; i++) {
-                energyMeasurementList[i] = new EnergyMeasurement();
-                energyMeasurementList[i].id = i;
-                energyMeasurementList[i].timestampMs = i;
-                energyMeasurementList[i].durationMs = i;
-                energyMeasurementList[i].energyUWs = i;
-            }
-            return energyMeasurementList;
-        }
-
-        @Override
-        public boolean isInitialized() {
-            return true;
-        }
-    }
-
-    @Before
-    public void setUp() {
-        mService = new PowerStatsService(mContext, mInjector);
-    }
-
-    @Test
-    public void testWrittenMeterDataMatchesReadIncidentReportData()
-            throws InterruptedException, IOException {
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        // Write data to on-device storage.
-        mTimerTrigger.logPowerStatsData(PowerStatsLogger.MSG_LOG_TO_DATA_STORAGE_HIGH_FREQUENCY);
-
-        // The above call puts a message on a handler.  Wait for
-        // it to be processed.
-        Thread.sleep(100);
-
-        // Write on-device storage to an incident report.
-        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
-        FileOutputStream fos = new FileOutputStream(incidentReport);
-        mPowerStatsLogger.writeMeterDataToFile(fos.getFD());
-
-        // Read the incident report in to a byte array.
-        FileInputStream fis = new FileInputStream(incidentReport);
-        byte[] fileContent = new byte[(int) incidentReport.length()];
-        fis.read(fileContent);
-
-        // Parse the incident data into a PowerStatsServiceMeterProto object.
-        PowerStatsServiceMeterProto pssProto = PowerStatsServiceMeterProto.parseFrom(fileContent);
-
-        // Validate the channel array matches what was written to on-device storage.
-        assertTrue(pssProto.channel.length == ENERGY_METER_COUNT);
-        for (int i = 0; i < pssProto.channel.length; i++) {
-            assertTrue(pssProto.channel[i].id == i);
-            assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i));
-            assertTrue(pssProto.channel[i].subsystem.equals(CHANNEL_SUBSYSTEM + i));
-        }
-
-        // Validate the energyMeasurement array matches what was written to on-device storage.
-        assertTrue(pssProto.energyMeasurement.length == ENERGY_METER_COUNT);
-        for (int i = 0; i < pssProto.energyMeasurement.length; i++) {
-            assertTrue(pssProto.energyMeasurement[i].id == i);
-            assertTrue(pssProto.energyMeasurement[i].timestampMs ==
-                    i + mPowerStatsLogger.getStartWallTime());
-            assertTrue(pssProto.energyMeasurement[i].durationMs == i);
-            assertTrue(pssProto.energyMeasurement[i].energyUws == i);
-        }
-    }
-
-    @Test
-    public void testWrittenModelDataMatchesReadIncidentReportData()
-            throws InterruptedException, IOException {
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        // Write data to on-device storage.
-        mTimerTrigger.logPowerStatsData(PowerStatsLogger.MSG_LOG_TO_DATA_STORAGE_LOW_FREQUENCY);
-
-        // The above call puts a message on a handler.  Wait for
-        // it to be processed.
-        Thread.sleep(100);
-
-        // Write on-device storage to an incident report.
-        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
-        FileOutputStream fos = new FileOutputStream(incidentReport);
-        mPowerStatsLogger.writeModelDataToFile(fos.getFD());
-
-        // Read the incident report in to a byte array.
-        FileInputStream fis = new FileInputStream(incidentReport);
-        byte[] fileContent = new byte[(int) incidentReport.length()];
-        fis.read(fileContent);
-
-        // Parse the incident data into a PowerStatsServiceModelProto object.
-        PowerStatsServiceModelProto pssProto = PowerStatsServiceModelProto.parseFrom(fileContent);
-
-        // Validate the energyConsumer array matches what was written to on-device storage.
-        assertTrue(pssProto.energyConsumer.length == ENERGY_CONSUMER_COUNT);
-        for (int i = 0; i < pssProto.energyConsumer.length; i++) {
-            assertTrue(pssProto.energyConsumer[i].id == i);
-        }
-
-        // Validate the energyConsumerResult array matches what was written to on-device storage.
-        assertTrue(pssProto.energyConsumerResult.length == ENERGY_CONSUMER_COUNT);
-        for (int i = 0; i < pssProto.energyConsumerResult.length; i++) {
-            assertTrue(pssProto.energyConsumerResult[i].id == i);
-            assertTrue(pssProto.energyConsumerResult[i].timestampMs ==
-                    i + mPowerStatsLogger.getStartWallTime());
-            assertTrue(pssProto.energyConsumerResult[i].energyUws == i);
-            assertTrue(pssProto.energyConsumerResult[i].attribution.length
-                    == ENERGY_CONSUMER_ATTRIBUTION_COUNT);
-            for (int j = 0; j < pssProto.energyConsumerResult[i].attribution.length; j++) {
-                assertTrue(pssProto.energyConsumerResult[i].attribution[j].uid == j);
-                assertTrue(pssProto.energyConsumerResult[i].attribution[j].energyUws  == j);
-            }
-        }
-    }
-
-    @Test
-    public void testWrittenResidencyDataMatchesReadIncidentReportData()
-            throws InterruptedException, IOException {
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        // Write data to on-device storage.
-        mBatteryTrigger.logPowerStatsData(PowerStatsLogger.MSG_LOG_TO_DATA_STORAGE_BATTERY_DROP);
-
-        // The above call puts a message on a handler.  Wait for
-        // it to be processed.
-        Thread.sleep(100);
-
-        // Write on-device storage to an incident report.
-        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
-        FileOutputStream fos = new FileOutputStream(incidentReport);
-        mPowerStatsLogger.writeResidencyDataToFile(fos.getFD());
-
-        // Read the incident report in to a byte array.
-        FileInputStream fis = new FileInputStream(incidentReport);
-        byte[] fileContent = new byte[(int) incidentReport.length()];
-        fis.read(fileContent);
-
-        // Parse the incident data into a PowerStatsServiceResidencyProto object.
-        PowerStatsServiceResidencyProto pssProto =
-                PowerStatsServiceResidencyProto.parseFrom(fileContent);
-
-        // Validate the powerEntity array matches what was written to on-device storage.
-        assertTrue(pssProto.powerEntity.length == POWER_ENTITY_COUNT);
-        for (int i = 0; i < pssProto.powerEntity.length; i++) {
-            PowerEntityProto powerEntity = pssProto.powerEntity[i];
-            assertTrue(powerEntity.id == i);
-            assertTrue(powerEntity.name.equals(POWER_ENTITY_NAME + i));
-            for (int j = 0; j < powerEntity.states.length; j++) {
-                StateProto state = powerEntity.states[j];
-                assertTrue(state.id == j);
-                assertTrue(state.name.equals(STATE_NAME + j));
-            }
-        }
-
-        // Validate the stateResidencyResult array matches what was written to on-device storage.
-        assertTrue(pssProto.stateResidencyResult.length == POWER_ENTITY_COUNT);
-        for (int i = 0; i < pssProto.stateResidencyResult.length; i++) {
-            StateResidencyResultProto stateResidencyResult = pssProto.stateResidencyResult[i];
-            assertTrue(stateResidencyResult.id == i);
-            assertTrue(stateResidencyResult.stateResidencyData.length == STATE_RESIDENCY_COUNT);
-            for (int j = 0; j < stateResidencyResult.stateResidencyData.length; j++) {
-                StateResidencyProto stateResidency = stateResidencyResult.stateResidencyData[j];
-                assertTrue(stateResidency.id == j);
-                assertTrue(stateResidency.totalTimeInStateMs == j);
-                assertTrue(stateResidency.totalStateEntryCount == j);
-                assertTrue(stateResidency.lastEntryTimestampMs ==
-                        j + mPowerStatsLogger.getStartWallTime());
-            }
-        }
-    }
-
-    @Test
-    public void testCorruptOnDeviceMeterStorage() throws IOException {
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        // Generate random array of bytes to emulate corrupt data.
-        Random rd = new Random();
-        byte[] bytes = new byte[100];
-        rd.nextBytes(bytes);
-
-        // Store corrupt data in on-device storage.  Add fake timestamp to filename
-        // to match format expected by FileRotator.
-        File onDeviceStorageFile = new File(mDataStorageDir, METER_FILENAME + ".1234-2234");
-        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Write on-device storage to an incident report.
-        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
-        FileOutputStream incidentReportFos = new FileOutputStream(incidentReport);
-        mPowerStatsLogger.writeMeterDataToFile(incidentReportFos.getFD());
-
-        // Read the incident report in to a byte array.
-        FileInputStream fis = new FileInputStream(incidentReport);
-        byte[] fileContent = new byte[(int) incidentReport.length()];
-        fis.read(fileContent);
-
-        // Parse the incident data into a PowerStatsServiceMeterProto object.
-        PowerStatsServiceMeterProto pssProto = PowerStatsServiceMeterProto.parseFrom(fileContent);
-
-        // Valid channel data is written to the incident report in the call to
-        // mPowerStatsLogger.writeMeterDataToFile().
-        assertTrue(pssProto.channel.length == ENERGY_METER_COUNT);
-        for (int i = 0; i < pssProto.channel.length; i++) {
-            assertTrue(pssProto.channel[i].id == i);
-            assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i));
-            assertTrue(pssProto.channel[i].subsystem.equals(CHANNEL_SUBSYSTEM + i));
-        }
-
-        // No energyMeasurements should be written to the incident report since it
-        // is all corrupt (random bytes generated above).
-        assertTrue(pssProto.energyMeasurement.length == 0);
-    }
-
-    @Test
-    public void testCorruptOnDeviceModelStorage() throws IOException {
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        // Generate random array of bytes to emulate corrupt data.
-        Random rd = new Random();
-        byte[] bytes = new byte[100];
-        rd.nextBytes(bytes);
-
-        // Store corrupt data in on-device storage.  Add fake timestamp to filename
-        // to match format expected by FileRotator.
-        File onDeviceStorageFile = new File(mDataStorageDir, MODEL_FILENAME + ".1234-2234");
-        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Write on-device storage to an incident report.
-        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
-        FileOutputStream incidentReportFos = new FileOutputStream(incidentReport);
-        mPowerStatsLogger.writeModelDataToFile(incidentReportFos.getFD());
-
-        // Read the incident report in to a byte array.
-        FileInputStream fis = new FileInputStream(incidentReport);
-        byte[] fileContent = new byte[(int) incidentReport.length()];
-        fis.read(fileContent);
-
-        // Parse the incident data into a PowerStatsServiceModelProto object.
-        PowerStatsServiceModelProto pssProto = PowerStatsServiceModelProto.parseFrom(fileContent);
-
-        // Valid energyConsumer data is written to the incident report in the call to
-        // mPowerStatsLogger.writeModelDataToFile().
-        assertTrue(pssProto.energyConsumer.length == ENERGY_CONSUMER_COUNT);
-        for (int i = 0; i < pssProto.energyConsumer.length; i++) {
-            assertTrue(pssProto.energyConsumer[i].id == i);
-        }
-
-        // No energyConsumerResults should be written to the incident report since it
-        // is all corrupt (random bytes generated above).
-        assertTrue(pssProto.energyConsumerResult.length == 0);
-    }
-
-    @Test
-    public void testCorruptOnDeviceResidencyStorage() throws IOException {
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        // Generate random array of bytes to emulate corrupt data.
-        Random rd = new Random();
-        byte[] bytes = new byte[100];
-        rd.nextBytes(bytes);
-
-        // Store corrupt data in on-device storage.  Add fake timestamp to filename
-        // to match format expected by FileRotator.
-        File onDeviceStorageFile = new File(mDataStorageDir, RESIDENCY_FILENAME + ".1234-2234");
-        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Write on-device storage to an incident report.
-        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
-        FileOutputStream incidentReportFos = new FileOutputStream(incidentReport);
-        mPowerStatsLogger.writeResidencyDataToFile(incidentReportFos.getFD());
-
-        // Read the incident report in to a byte array.
-        FileInputStream fis = new FileInputStream(incidentReport);
-        byte[] fileContent = new byte[(int) incidentReport.length()];
-        fis.read(fileContent);
-
-        // Parse the incident data into a PowerStatsServiceResidencyProto object.
-        PowerStatsServiceResidencyProto pssProto =
-                PowerStatsServiceResidencyProto.parseFrom(fileContent);
-
-        // Valid powerEntity data is written to the incident report in the call to
-        // mPowerStatsLogger.writeResidencyDataToFile().
-        assertTrue(pssProto.powerEntity.length == POWER_ENTITY_COUNT);
-        for (int i = 0; i < pssProto.powerEntity.length; i++) {
-            PowerEntityProto powerEntity = pssProto.powerEntity[i];
-            assertTrue(powerEntity.id == i);
-            assertTrue(powerEntity.name.equals(POWER_ENTITY_NAME + i));
-            for (int j = 0; j < powerEntity.states.length; j++) {
-                StateProto state = powerEntity.states[j];
-                assertTrue(state.id == j);
-                assertTrue(state.name.equals(STATE_NAME + j));
-            }
-        }
-
-        // No stateResidencyResults should be written to the incident report since it
-        // is all corrupt (random bytes generated above).
-        assertTrue(pssProto.stateResidencyResult.length == 0);
-    }
-
-    @Test
-    public void testNotEnoughBytesAfterMeterLengthField() throws IOException {
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        // Create corrupt data.
-        // Length field is correct, but there is no data following the length.
-        ByteArrayOutputStream data = new ByteArrayOutputStream();
-        data.write(ByteBuffer.allocate(4).putInt(50).array());
-        byte[] test = data.toByteArray();
-
-        // Store corrupt data in on-device storage.  Add fake timestamp to filename
-        // to match format expected by FileRotator.
-        File onDeviceStorageFile = new File(mDataStorageDir, METER_FILENAME + ".1234-2234");
-        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(data.toByteArray());
-        onDeviceStorageFos.close();
-
-        // Write on-device storage to an incident report.
-        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
-        FileOutputStream incidentReportFos = new FileOutputStream(incidentReport);
-        mPowerStatsLogger.writeMeterDataToFile(incidentReportFos.getFD());
-
-        // Read the incident report in to a byte array.
-        FileInputStream fis = new FileInputStream(incidentReport);
-        byte[] fileContent = new byte[(int) incidentReport.length()];
-        fis.read(fileContent);
-
-        // Parse the incident data into a PowerStatsServiceMeterProto object.
-        PowerStatsServiceMeterProto pssProto = PowerStatsServiceMeterProto.parseFrom(fileContent);
-
-        // Valid channel data is written to the incident report in the call to
-        // mPowerStatsLogger.writeMeterDataToFile().
-        assertTrue(pssProto.channel.length == ENERGY_METER_COUNT);
-        for (int i = 0; i < pssProto.channel.length; i++) {
-            assertTrue(pssProto.channel[i].id == i);
-            assertTrue(pssProto.channel[i].name.equals(CHANNEL_NAME + i));
-            assertTrue(pssProto.channel[i].subsystem.equals(CHANNEL_SUBSYSTEM + i));
-        }
-
-        // No energyMeasurements should be written to the incident report since the
-        // input buffer had only length and no data.
-        assertTrue(pssProto.energyMeasurement.length == 0);
-    }
-
-    @Test
-    public void testNotEnoughBytesAfterModelLengthField() throws IOException {
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        // Create corrupt data.
-        // Length field is correct, but there is no data following the length.
-        ByteArrayOutputStream data = new ByteArrayOutputStream();
-        data.write(ByteBuffer.allocate(4).putInt(50).array());
-        byte[] test = data.toByteArray();
-
-        // Store corrupt data in on-device storage.  Add fake timestamp to filename
-        // to match format expected by FileRotator.
-        File onDeviceStorageFile = new File(mDataStorageDir, MODEL_FILENAME + ".1234-2234");
-        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(data.toByteArray());
-        onDeviceStorageFos.close();
-
-        // Write on-device storage to an incident report.
-        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
-        FileOutputStream incidentReportFos = new FileOutputStream(incidentReport);
-        mPowerStatsLogger.writeModelDataToFile(incidentReportFos.getFD());
-
-        // Read the incident report in to a byte array.
-        FileInputStream fis = new FileInputStream(incidentReport);
-        byte[] fileContent = new byte[(int) incidentReport.length()];
-        fis.read(fileContent);
-
-        // Parse the incident data into a PowerStatsServiceModelProto object.
-        PowerStatsServiceModelProto pssProto = PowerStatsServiceModelProto.parseFrom(fileContent);
-
-        // Valid energyConsumer data is written to the incident report in the call to
-        // mPowerStatsLogger.writeModelDataToFile().
-        assertTrue(pssProto.energyConsumer.length == ENERGY_CONSUMER_COUNT);
-        for (int i = 0; i < pssProto.energyConsumer.length; i++) {
-            assertTrue(pssProto.energyConsumer[i].id == i);
-        }
-
-        // No energyConsumerResults should be written to the incident report since the
-        // input buffer had only length and no data.
-        assertTrue(pssProto.energyConsumerResult.length == 0);
-    }
-
-    @Test
-    public void testNotEnoughBytesAfterResidencyLengthField() throws IOException {
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        // Create corrupt data.
-        // Length field is correct, but there is no data following the length.
-        ByteArrayOutputStream data = new ByteArrayOutputStream();
-        data.write(ByteBuffer.allocate(4).putInt(50).array());
-        byte[] test = data.toByteArray();
-
-        // Store corrupt data in on-device storage.  Add fake timestamp to filename
-        // to match format expected by FileRotator.
-        File onDeviceStorageFile = new File(mDataStorageDir, RESIDENCY_FILENAME + ".1234-2234");
-        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(data.toByteArray());
-        onDeviceStorageFos.close();
-
-        // Write on-device storage to an incident report.
-        File incidentReport = new File(mDataStorageDir, PROTO_OUTPUT_FILENAME);
-        FileOutputStream incidentReportFos = new FileOutputStream(incidentReport);
-        mPowerStatsLogger.writeResidencyDataToFile(incidentReportFos.getFD());
-
-        // Read the incident report in to a byte array.
-        FileInputStream fis = new FileInputStream(incidentReport);
-        byte[] fileContent = new byte[(int) incidentReport.length()];
-        fis.read(fileContent);
-
-        // Parse the incident data into a PowerStatsServiceResidencyProto object.
-        PowerStatsServiceResidencyProto pssProto =
-                PowerStatsServiceResidencyProto.parseFrom(fileContent);
-
-        // Valid powerEntity data is written to the incident report in the call to
-        // mPowerStatsLogger.writeResidencyDataToFile().
-        assertTrue(pssProto.powerEntity.length == POWER_ENTITY_COUNT);
-        for (int i = 0; i < pssProto.powerEntity.length; i++) {
-            PowerEntityProto powerEntity = pssProto.powerEntity[i];
-            assertTrue(powerEntity.id == i);
-            assertTrue(powerEntity.name.equals(POWER_ENTITY_NAME + i));
-            for (int j = 0; j < powerEntity.states.length; j++) {
-                StateProto state = powerEntity.states[j];
-                assertTrue(state.id == j);
-                assertTrue(state.name.equals(STATE_NAME + j));
-            }
-        }
-
-        // No stateResidencyResults should be written to the incident report since the
-        // input buffer had only length and no data.
-        assertTrue(pssProto.stateResidencyResult.length == 0);
-    }
-
-    @Test
-    public void testDataStorageDeletedMeterMismatch() throws IOException {
-        // Create the directory where cached data will be stored.
-        mInjector.createDataStoragePath();
-
-        // In order to create cached data that will match the current data read by the
-        // PowerStatsService we need to write valid data from the TestPowerStatsHALWrapper that is
-        // returned from the Injector.
-        IPowerStatsHALWrapper powerStatsHALWrapper = mInjector.getPowerStatsHALWrapperImpl();
-
-        // Generate random array of bytes to emulate cached meter data.  Store to file.
-        Random rd = new Random();
-        byte[] bytes = new byte[100];
-        rd.nextBytes(bytes);
-        File onDeviceStorageFile = new File(mDataStorageDir, mInjector.createMeterCacheFilename());
-        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Create cached energy consumer data and write to file.
-        EnergyConsumer[] energyConsumers = powerStatsHALWrapper.getEnergyConsumerInfo();
-        bytes = EnergyConsumerUtils.getProtoBytes(energyConsumers);
-        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createModelCacheFilename());
-        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Create cached power entity info data and write to file.
-        PowerEntity[] powerEntityInfo = powerStatsHALWrapper.getPowerEntityInfo();
-        bytes = PowerEntityUtils.getProtoBytes(powerEntityInfo);
-        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createResidencyCacheFilename());
-        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Create log files.
-        File meterFile = new File(mDataStorageDir, mInjector.createMeterFilename());
-        File modelFile = new File(mDataStorageDir, mInjector.createModelFilename());
-        File residencyFile = new File(mDataStorageDir, mInjector.createResidencyFilename());
-        meterFile.createNewFile();
-        modelFile.createNewFile();
-        residencyFile.createNewFile();
-
-        // Verify log files exist.
-        assertTrue(meterFile.exists());
-        assertTrue(modelFile.exists());
-        assertTrue(residencyFile.exists());
-
-        // Boot device after creating old cached data.
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        // Since cached meter data is just random bytes it won't match the data read from the HAL.
-        // This mismatch of cached and current HAL data should force a delete.
-        assertTrue(mService.getDeleteMeterDataOnBoot());
-        assertFalse(mService.getDeleteModelDataOnBoot());
-        assertFalse(mService.getDeleteResidencyDataOnBoot());
-
-        // Verify log files were deleted.
-        assertFalse(meterFile.exists());
-        assertTrue(modelFile.exists());
-        assertTrue(residencyFile.exists());
-
-        // Verify cached meter data was updated to new HAL output.
-        Channel[] channels = powerStatsHALWrapper.getEnergyMeterInfo();
-        byte[] bytesExpected = ChannelUtils.getProtoBytes(channels);
-        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createMeterCacheFilename());
-        byte[] bytesActual = new byte[(int) onDeviceStorageFile.length()];
-        FileInputStream onDeviceStorageFis = new FileInputStream(onDeviceStorageFile);
-        onDeviceStorageFis.read(bytesActual);
-        assertTrue(Arrays.equals(bytesExpected, bytesActual));
-    }
-
-    @Test
-    public void testDataStorageDeletedModelMismatch() throws IOException {
-        // Create the directory where cached data will be stored.
-        mInjector.createDataStoragePath();
-
-        // In order to create cached data that will match the current data read by the
-        // PowerStatsService we need to write valid data from the TestPowerStatsHALWrapper that is
-        // returned from the Injector.
-        IPowerStatsHALWrapper powerStatsHALWrapper = mInjector.getPowerStatsHALWrapperImpl();
-
-        // Create cached channel data and write to file.
-        Channel[] channels = powerStatsHALWrapper.getEnergyMeterInfo();
-        byte[] bytes = ChannelUtils.getProtoBytes(channels);
-        File onDeviceStorageFile = new File(mDataStorageDir, mInjector.createMeterCacheFilename());
-        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Generate random array of bytes to emulate cached energy consumer data.  Store to file.
-        Random rd = new Random();
-        bytes = new byte[100];
-        rd.nextBytes(bytes);
-        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createModelCacheFilename());
-        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Create cached power entity info data and write to file.
-        PowerEntity[] powerEntityInfo = powerStatsHALWrapper.getPowerEntityInfo();
-        bytes = PowerEntityUtils.getProtoBytes(powerEntityInfo);
-        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createResidencyCacheFilename());
-        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Create log files.
-        File meterFile = new File(mDataStorageDir, mInjector.createMeterFilename());
-        File modelFile = new File(mDataStorageDir, mInjector.createModelFilename());
-        File residencyFile = new File(mDataStorageDir, mInjector.createResidencyFilename());
-        meterFile.createNewFile();
-        modelFile.createNewFile();
-        residencyFile.createNewFile();
-
-        // Verify log files exist.
-        assertTrue(meterFile.exists());
-        assertTrue(modelFile.exists());
-        assertTrue(residencyFile.exists());
-
-        // Boot device after creating old cached data.
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        // Since cached energy consumer data is just random bytes it won't match the data read from
-        // the HAL.  This mismatch of cached and current HAL data should force a delete.
-        assertFalse(mService.getDeleteMeterDataOnBoot());
-        assertTrue(mService.getDeleteModelDataOnBoot());
-        assertFalse(mService.getDeleteResidencyDataOnBoot());
-
-        // Verify log files were deleted.
-        assertTrue(meterFile.exists());
-        assertFalse(modelFile.exists());
-        assertTrue(residencyFile.exists());
-
-        // Verify cached energy consumer data was updated to new HAL output.
-        EnergyConsumer[] energyConsumers = powerStatsHALWrapper.getEnergyConsumerInfo();
-        byte[] bytesExpected = EnergyConsumerUtils.getProtoBytes(energyConsumers);
-        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createModelCacheFilename());
-        byte[] bytesActual = new byte[(int) onDeviceStorageFile.length()];
-        FileInputStream onDeviceStorageFis = new FileInputStream(onDeviceStorageFile);
-        onDeviceStorageFis.read(bytesActual);
-        assertTrue(Arrays.equals(bytesExpected, bytesActual));
-    }
-
-    @Test
-    public void testDataStorageDeletedResidencyMismatch() throws IOException {
-        // Create the directory where cached data will be stored.
-        mInjector.createDataStoragePath();
-
-        // In order to create cached data that will match the current data read by the
-        // PowerStatsService we need to write valid data from the TestPowerStatsHALWrapper that is
-        // returned from the Injector.
-        IPowerStatsHALWrapper powerStatsHALWrapper = mInjector.getPowerStatsHALWrapperImpl();
-
-        // Create cached channel data and write to file.
-        Channel[] channels = powerStatsHALWrapper.getEnergyMeterInfo();
-        byte[] bytes = ChannelUtils.getProtoBytes(channels);
-        File onDeviceStorageFile = new File(mDataStorageDir, mInjector.createMeterCacheFilename());
-        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Create cached energy consumer data and write to file.
-        EnergyConsumer[] energyConsumers = powerStatsHALWrapper.getEnergyConsumerInfo();
-        bytes = EnergyConsumerUtils.getProtoBytes(energyConsumers);
-        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createModelCacheFilename());
-        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Generate random array of bytes to emulate cached power entity info data.  Store to file.
-        Random rd = new Random();
-        bytes = new byte[100];
-        rd.nextBytes(bytes);
-        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createResidencyCacheFilename());
-        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Create log files.
-        File meterFile = new File(mDataStorageDir, mInjector.createMeterFilename());
-        File modelFile = new File(mDataStorageDir, mInjector.createModelFilename());
-        File residencyFile = new File(mDataStorageDir, mInjector.createResidencyFilename());
-        meterFile.createNewFile();
-        modelFile.createNewFile();
-        residencyFile.createNewFile();
-
-        // Verify log files exist.
-        assertTrue(meterFile.exists());
-        assertTrue(modelFile.exists());
-        assertTrue(residencyFile.exists());
-
-        // Boot device after creating old cached data.
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        // Since cached power entity info data is just random bytes it won't match the data read
-        // from the HAL.  This mismatch of cached and current HAL data should force a delete.
-        assertFalse(mService.getDeleteMeterDataOnBoot());
-        assertFalse(mService.getDeleteModelDataOnBoot());
-        assertTrue(mService.getDeleteResidencyDataOnBoot());
-
-        // Verify log files were deleted.
-        assertTrue(meterFile.exists());
-        assertTrue(modelFile.exists());
-        assertFalse(residencyFile.exists());
-
-        // Verify cached power entity data was updated to new HAL output.
-        PowerEntity[] powerEntityInfo = powerStatsHALWrapper.getPowerEntityInfo();
-        byte[] bytesExpected = PowerEntityUtils.getProtoBytes(powerEntityInfo);
-        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createResidencyCacheFilename());
-        byte[] bytesActual = new byte[(int) onDeviceStorageFile.length()];
-        FileInputStream onDeviceStorageFis = new FileInputStream(onDeviceStorageFile);
-        onDeviceStorageFis.read(bytesActual);
-        assertTrue(Arrays.equals(bytesExpected, bytesActual));
-    }
-
-    @Test
-    public void testDataStorageNotDeletedNoCachedData() throws IOException {
-        // Create the directory where log files will be stored.
-        mInjector.createDataStoragePath();
-
-        // Create log files.
-        File meterFile = new File(mDataStorageDir, mInjector.createMeterFilename());
-        File modelFile = new File(mDataStorageDir, mInjector.createModelFilename());
-        File residencyFile = new File(mDataStorageDir, mInjector.createResidencyFilename());
-        meterFile.createNewFile();
-        modelFile.createNewFile();
-        residencyFile.createNewFile();
-
-        // Verify log files exist.
-        assertTrue(meterFile.exists());
-        assertTrue(modelFile.exists());
-        assertTrue(residencyFile.exists());
-
-        // This test mimics the device's first boot where there is no cached data.
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        // Since there is no cached data on the first boot any log files that happen to exist
-        // should be deleted.
-        assertTrue(mService.getDeleteMeterDataOnBoot());
-        assertTrue(mService.getDeleteModelDataOnBoot());
-        assertTrue(mService.getDeleteResidencyDataOnBoot());
-
-        // Verify log files were deleted.
-        assertFalse(meterFile.exists());
-        assertFalse(modelFile.exists());
-        assertFalse(residencyFile.exists());
-    }
-
-    @Test
-    public void testDataStorageNotDeletedAllDataMatches() throws IOException {
-        // Create the directory where cached data will be stored.
-        mInjector.createDataStoragePath();
-
-        // In order to create cached data that will match the current data read by the
-        // PowerStatsService we need to write valid data from the TestPowerStatsHALWrapper that is
-        // returned from the Injector.
-        IPowerStatsHALWrapper powerStatsHALWrapper = mInjector.getPowerStatsHALWrapperImpl();
-
-        // Create cached channel data and write to file.
-        Channel[] channels = powerStatsHALWrapper.getEnergyMeterInfo();
-        byte[] bytes = ChannelUtils.getProtoBytes(channels);
-        File onDeviceStorageFile = new File(mDataStorageDir, mInjector.createMeterCacheFilename());
-        FileOutputStream onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Create cached energy consumer data and write to file.
-        EnergyConsumer[] energyConsumers = powerStatsHALWrapper.getEnergyConsumerInfo();
-        bytes = EnergyConsumerUtils.getProtoBytes(energyConsumers);
-        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createModelCacheFilename());
-        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Create cached power entity info data and write to file.
-        PowerEntity[] powerEntityInfo = powerStatsHALWrapper.getPowerEntityInfo();
-        bytes = PowerEntityUtils.getProtoBytes(powerEntityInfo);
-        onDeviceStorageFile = new File(mDataStorageDir, mInjector.createResidencyCacheFilename());
-        onDeviceStorageFos = new FileOutputStream(onDeviceStorageFile);
-        onDeviceStorageFos.write(bytes);
-        onDeviceStorageFos.close();
-
-        // Create log files.
-        File meterFile = new File(mDataStorageDir, mInjector.createMeterFilename());
-        File modelFile = new File(mDataStorageDir, mInjector.createModelFilename());
-        File residencyFile = new File(mDataStorageDir, mInjector.createResidencyFilename());
-        meterFile.createNewFile();
-        modelFile.createNewFile();
-        residencyFile.createNewFile();
-
-        // Verify log files exist.
-        assertTrue(meterFile.exists());
-        assertTrue(modelFile.exists());
-        assertTrue(residencyFile.exists());
-
-        // Boot device after creating old cached data.
-        mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
-
-        // All cached data created above should match current data read in PowerStatsService so we
-        // expect the data not to be deleted.
-        assertFalse(mService.getDeleteMeterDataOnBoot());
-        assertFalse(mService.getDeleteModelDataOnBoot());
-        assertFalse(mService.getDeleteResidencyDataOnBoot());
-
-        // Verify log files were not deleted.
-        assertTrue(meterFile.exists());
-        assertTrue(modelFile.exists());
-        assertTrue(residencyFile.exists());
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/timedetector/FakeServiceConfigAccessor.java b/services/tests/servicestests/src/com/android/server/timedetector/FakeServiceConfigAccessor.java
index 93464cd..d9bc74d 100644
--- a/services/tests/servicestests/src/com/android/server/timedetector/FakeServiceConfigAccessor.java
+++ b/services/tests/servicestests/src/com/android/server/timedetector/FakeServiceConfigAccessor.java
@@ -35,7 +35,7 @@
 
     private final List<StateChangeListener> mConfigurationInternalChangeListeners =
             new ArrayList<>();
-    private ConfigurationInternal mConfigurationInternal;
+    private ConfigurationInternal mCurrentUserConfigurationInternal;
 
     @Override
     public void addConfigurationInternalChangeListener(StateChangeListener listener) {
@@ -49,21 +49,23 @@
 
     @Override
     public ConfigurationInternal getCurrentUserConfigurationInternal() {
-        return mConfigurationInternal;
+        return mCurrentUserConfigurationInternal;
     }
 
     @Override
     public boolean updateConfiguration(
-            @UserIdInt int userID, @NonNull TimeConfiguration requestedChanges,
+            @UserIdInt int userId, @NonNull TimeConfiguration requestedChanges,
             boolean bypassUserPolicyChecks) {
-        assertNotNull(mConfigurationInternal);
+        assertNotNull(mCurrentUserConfigurationInternal);
         assertNotNull(requestedChanges);
 
+        ConfigurationInternal toUpdate = getConfigurationInternal(userId);
+
         // Simulate the real strategy's behavior: the new configuration will be updated to be the
         // old configuration merged with the new if the user has the capability to up the settings.
         // Then, if the configuration changed, the change listener is invoked.
         TimeCapabilitiesAndConfig capabilitiesAndConfig =
-                mConfigurationInternal.createCapabilitiesAndConfig(bypassUserPolicyChecks);
+                toUpdate.createCapabilitiesAndConfig(bypassUserPolicyChecks);
         TimeCapabilities capabilities = capabilitiesAndConfig.getCapabilities();
         TimeConfiguration configuration = capabilitiesAndConfig.getConfiguration();
         TimeConfiguration newConfiguration =
@@ -73,28 +75,36 @@
         }
 
         if (!newConfiguration.equals(capabilitiesAndConfig.getConfiguration())) {
-            mConfigurationInternal = mConfigurationInternal.merge(newConfiguration);
+            mCurrentUserConfigurationInternal = toUpdate.merge(newConfiguration);
 
             // Note: Unlike the real strategy, the listeners are invoked synchronously.
-            simulateConfigurationChangeForTests();
+            notifyConfigurationChange();
         }
         return true;
     }
 
-    void initializeConfiguration(ConfigurationInternal configurationInternal) {
-        mConfigurationInternal = configurationInternal;
+
+    void initializeCurrentUserConfiguration(ConfigurationInternal configurationInternal) {
+        mCurrentUserConfigurationInternal = configurationInternal;
     }
 
-    void simulateConfigurationChangeForTests() {
-        for (StateChangeListener listener : mConfigurationInternalChangeListeners) {
-            listener.onChange();
-        }
+    void simulateCurrentUserConfigurationInternalChange(
+            ConfigurationInternal configurationInternal) {
+        mCurrentUserConfigurationInternal = configurationInternal;
+        // Note: Unlike the real strategy, the listeners are invoked synchronously.
+        notifyConfigurationChange();
     }
 
     @Override
     public ConfigurationInternal getConfigurationInternal(int userId) {
         assertEquals("Multi-user testing not supported currently",
-                userId, mConfigurationInternal.getUserId());
-        return mConfigurationInternal;
+                userId, mCurrentUserConfigurationInternal.getUserId());
+        return mCurrentUserConfigurationInternal;
+    }
+
+    private void notifyConfigurationChange() {
+        for (StateChangeListener listener : mConfigurationInternalChangeListeners) {
+            listener.onChange();
+        }
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/timedetector/FakeTimeDetectorStrategy.java b/services/tests/servicestests/src/com/android/server/timedetector/FakeTimeDetectorStrategy.java
index 87aa272..a7a9c0c 100644
--- a/services/tests/servicestests/src/com/android/server/timedetector/FakeTimeDetectorStrategy.java
+++ b/services/tests/servicestests/src/com/android/server/timedetector/FakeTimeDetectorStrategy.java
@@ -18,6 +18,8 @@
 
 import android.annotation.UserIdInt;
 import android.app.time.ExternalTimeSuggestion;
+import android.app.time.TimeCapabilitiesAndConfig;
+import android.app.time.TimeConfiguration;
 import android.app.time.TimeState;
 import android.app.time.UnixEpochTime;
 import android.app.timedetector.ManualTimeSuggestion;
@@ -31,10 +33,20 @@
  * in tests.
  */
 public class FakeTimeDetectorStrategy implements TimeDetectorStrategy {
+    private final FakeServiceConfigAccessor mFakeServiceConfigAccessor;
+
     // State
     private TimeState mTimeState;
     private NetworkTimeSuggestion mLatestNetworkTimeSuggestion;
 
+    FakeTimeDetectorStrategy() {
+        mFakeServiceConfigAccessor = new FakeServiceConfigAccessor();
+    }
+
+    void initializeConfiguration(ConfigurationInternal configuration) {
+        mFakeServiceConfigAccessor.initializeCurrentUserConfiguration(configuration);
+    }
+
     @Override
     public TimeState getTimeState() {
         return mTimeState;
@@ -51,6 +63,26 @@
     }
 
     @Override
+    public void addChangeListener(StateChangeListener listener) {
+        mFakeServiceConfigAccessor.addConfigurationInternalChangeListener(listener);
+    }
+
+    @Override
+    public TimeCapabilitiesAndConfig getCapabilitiesAndConfig(int userId,
+            boolean bypassUserPolicyChecks) {
+        ConfigurationInternal configurationInternal =
+                mFakeServiceConfigAccessor.getConfigurationInternal(userId);
+        return configurationInternal.createCapabilitiesAndConfig(bypassUserPolicyChecks);
+    }
+
+    @Override
+    public boolean updateConfiguration(int userId, TimeConfiguration configuration,
+            boolean bypassUserPolicyChecks) {
+        return mFakeServiceConfigAccessor.updateConfiguration(
+                userId, configuration, bypassUserPolicyChecks);
+    }
+
+    @Override
     public void suggestTelephonyTime(TelephonyTimeSuggestion suggestion) {
     }
 
diff --git a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorInternalImplTest.java b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorInternalImplTest.java
index a0845a6..de5a37b 100644
--- a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorInternalImplTest.java
+++ b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorInternalImplTest.java
@@ -89,7 +89,7 @@
     public void testGetCapabilitiesAndConfigForDpm() throws Exception {
         final boolean autoDetectionEnabled = true;
         ConfigurationInternal testConfig = createConfigurationInternal(autoDetectionEnabled);
-        mFakeServiceConfigAccessorSpy.initializeConfiguration(testConfig);
+        mFakeServiceConfigAccessorSpy.initializeCurrentUserConfiguration(testConfig);
 
         TimeCapabilitiesAndConfig actualCapabilitiesAndConfig =
                 mTimeDetectorInternal.getCapabilitiesAndConfigForDpm();
@@ -108,7 +108,8 @@
         final boolean autoDetectionEnabled = false;
         ConfigurationInternal initialConfigurationInternal =
                 createConfigurationInternal(autoDetectionEnabled);
-        mFakeServiceConfigAccessorSpy.initializeConfiguration(initialConfigurationInternal);
+        mFakeServiceConfigAccessorSpy.initializeCurrentUserConfiguration(
+                initialConfigurationInternal);
 
         TimeConfiguration timeConfiguration = new TimeConfiguration.Builder()
                 .setAutoDetectionEnabled(true)
diff --git a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java
index daa6823..6b2d4b0 100644
--- a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java
@@ -83,7 +83,6 @@
     private HandlerThread mHandlerThread;
     private TestHandler mTestHandler;
     private TestCallerIdentityInjector mTestCallerIdentityInjector;
-    private FakeServiceConfigAccessor mFakeServiceConfigAccessorSpy;
     private FakeTimeDetectorStrategy mFakeTimeDetectorStrategySpy;
 
     private NtpTrustedTime mMockNtpTrustedTime;
@@ -101,13 +100,12 @@
         mTestCallerIdentityInjector = new TestCallerIdentityInjector();
         mTestCallerIdentityInjector.initializeCallingUserId(ARBITRARY_USER_ID);
 
-        mFakeServiceConfigAccessorSpy = spy(new FakeServiceConfigAccessor());
         mFakeTimeDetectorStrategySpy = spy(new FakeTimeDetectorStrategy());
         mMockNtpTrustedTime = mock(NtpTrustedTime.class);
 
         mTimeDetectorService = new TimeDetectorService(
                 mMockContext, mTestHandler, mTestCallerIdentityInjector,
-                mFakeServiceConfigAccessorSpy, mFakeTimeDetectorStrategySpy, mMockNtpTrustedTime);
+                mFakeTimeDetectorStrategySpy, mMockNtpTrustedTime);
     }
 
     @After
@@ -132,14 +130,14 @@
 
         ConfigurationInternal configuration =
                 createConfigurationInternal(true /* autoDetectionEnabled*/);
-        mFakeServiceConfigAccessorSpy.initializeConfiguration(configuration);
+        mFakeTimeDetectorStrategySpy.initializeConfiguration(configuration);
 
         TimeCapabilitiesAndConfig actualCapabilitiesAndConfig =
                 mTimeDetectorService.getCapabilitiesAndConfig();
         verify(mMockContext).enforceCallingPermission(
                 eq(android.Manifest.permission.MANAGE_TIME_AND_ZONE_DETECTION), anyString());
         int expectedUserId = mTestCallerIdentityInjector.getCallingUserId();
-        verify(mFakeServiceConfigAccessorSpy).getConfigurationInternal(expectedUserId);
+        verify(mFakeTimeDetectorStrategySpy).getCapabilitiesAndConfig(expectedUserId, false);
 
         boolean bypassUserPolicyChecks = false;
         TimeCapabilitiesAndConfig expectedCapabilitiesAndConfig =
@@ -174,7 +172,7 @@
     public void testListenerRegistrationAndCallbacks() throws Exception {
         ConfigurationInternal initialConfiguration =
                 createConfigurationInternal(false /* autoDetectionEnabled */);
-        mFakeServiceConfigAccessorSpy.initializeConfiguration(initialConfiguration);
+        mFakeTimeDetectorStrategySpy.initializeConfiguration(initialConfiguration);
 
         IBinder mockListenerBinder = mock(IBinder.class);
         ITimeDetectorListener mockListener = mock(ITimeDetectorListener.class);
diff --git a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java
index 4df21e0..dd58135 100644
--- a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java
+++ b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java
@@ -29,14 +29,22 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 
 import android.annotation.UserIdInt;
 import android.app.time.ExternalTimeSuggestion;
+import android.app.time.TimeCapabilitiesAndConfig;
+import android.app.time.TimeConfiguration;
 import android.app.time.TimeState;
 import android.app.time.UnixEpochTime;
 import android.app.timedetector.ManualTimeSuggestion;
 import android.app.timedetector.TelephonyTimeSuggestion;
 import android.os.TimestampedValue;
+import android.util.IndentingPrintWriter;
 
 import com.android.server.SystemClockTime.TimeConfidence;
 import com.android.server.timedetector.TimeDetectorStrategy.Origin;
@@ -47,14 +55,12 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import java.io.PrintWriter;
 import java.time.Duration;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Objects;
 
 import junitparams.JUnitParamsRunner;
 import junitparams.Parameters;
@@ -120,13 +126,108 @@
                     .build();
 
     private FakeEnvironment mFakeEnvironment;
+    private FakeServiceConfigAccessor mFakeServiceConfigAccessorSpy;
+    private TimeDetectorStrategyImpl mTimeDetectorStrategy;
 
     @Before
     public void setUp() {
         mFakeEnvironment = new FakeEnvironment();
-        mFakeEnvironment.initializeConfig(CONFIG_AUTO_DISABLED);
         mFakeEnvironment.initializeFakeClocks(
                 ARBITRARY_CLOCK_INITIALIZATION_INFO, TIME_CONFIDENCE_LOW);
+
+        mFakeServiceConfigAccessorSpy = spy(new FakeServiceConfigAccessor());
+        mFakeServiceConfigAccessorSpy.initializeCurrentUserConfiguration(CONFIG_AUTO_DISABLED);
+
+        mTimeDetectorStrategy = new TimeDetectorStrategyImpl(
+                mFakeEnvironment, mFakeServiceConfigAccessorSpy);
+    }
+
+    @Test
+    public void testChangeListenerBehavior() throws Exception {
+        TestStateChangeListener stateChangeListener = new TestStateChangeListener();
+        mTimeDetectorStrategy.addChangeListener(stateChangeListener);
+
+        boolean bypassUserPolicyChecks = false;
+
+        // Report a config change, but not one that actually changes anything.
+        {
+            mFakeServiceConfigAccessorSpy.simulateCurrentUserConfigurationInternalChange(
+                    CONFIG_AUTO_DISABLED);
+            assertStateChangeNotificationsSent(stateChangeListener, 0);
+            assertEquals(CONFIG_AUTO_DISABLED,
+                    mTimeDetectorStrategy.getCachedCapabilitiesAndConfigForTests());
+        }
+
+        // Report a config change that actually changes something.
+        {
+            mFakeServiceConfigAccessorSpy.simulateCurrentUserConfigurationInternalChange(
+                    CONFIG_AUTO_ENABLED);
+            assertStateChangeNotificationsSent(stateChangeListener, 1);
+            assertEquals(CONFIG_AUTO_ENABLED,
+                    mTimeDetectorStrategy.getCachedCapabilitiesAndConfigForTests());
+        }
+
+        // Perform a (current user) update via the strategy.
+        {
+            TimeConfiguration requestedChanges =
+                    new TimeConfiguration.Builder().setAutoDetectionEnabled(false).build();
+            mTimeDetectorStrategy.updateConfiguration(
+                    ARBITRARY_USER_ID, requestedChanges, bypassUserPolicyChecks);
+            assertStateChangeNotificationsSent(stateChangeListener, 1);
+        }
+    }
+
+    // Current user behavior: the strategy caches and returns the latest configuration.
+    @Test
+    public void testReadAndWriteConfiguration() throws Exception {
+        ConfigurationInternal currentUserConfig = CONFIG_AUTO_ENABLED;
+        mFakeServiceConfigAccessorSpy.simulateCurrentUserConfigurationInternalChange(
+                currentUserConfig);
+
+        final boolean bypassUserPolicyChecks = false;
+
+        ConfigurationInternal cachedConfigurationInternal =
+                mTimeDetectorStrategy.getCachedCapabilitiesAndConfigForTests();
+        assertEquals(currentUserConfig, cachedConfigurationInternal);
+
+        // Confirm getCapabilitiesAndConfig() does not call through to the ServiceConfigAccessor.
+        {
+            reset(mFakeServiceConfigAccessorSpy);
+            TimeCapabilitiesAndConfig actualCapabilitiesAndConfig =
+                    mTimeDetectorStrategy.getCapabilitiesAndConfig(
+                            currentUserConfig.getUserId(), bypassUserPolicyChecks);
+            verify(mFakeServiceConfigAccessorSpy, never()).getConfigurationInternal(
+                    currentUserConfig.getUserId());
+
+            TimeCapabilitiesAndConfig expectedCapabilitiesAndConfig =
+                    currentUserConfig.createCapabilitiesAndConfig(bypassUserPolicyChecks);
+            assertEquals(expectedCapabilitiesAndConfig.getCapabilities(),
+                    actualCapabilitiesAndConfig.getCapabilities());
+            assertEquals(expectedCapabilitiesAndConfig.getConfiguration(),
+                    actualCapabilitiesAndConfig.getConfiguration());
+        }
+
+        // Confirm updateConfiguration() calls through to the ServiceConfigAccessor and updates
+        // the cached copy.
+        {
+            boolean newAutoDetectionEnabled =
+                    !cachedConfigurationInternal.getAutoDetectionEnabledBehavior();
+            TimeConfiguration requestedChanges = new TimeConfiguration.Builder()
+                    .setAutoDetectionEnabled(newAutoDetectionEnabled)
+                    .build();
+            ConfigurationInternal expectedConfigAfterChange =
+                    new ConfigurationInternal.Builder(cachedConfigurationInternal)
+                            .setAutoDetectionEnabledSetting(newAutoDetectionEnabled)
+                            .build();
+
+            reset(mFakeServiceConfigAccessorSpy);
+            mTimeDetectorStrategy.updateConfiguration(
+                    currentUserConfig.getUserId(), requestedChanges, bypassUserPolicyChecks);
+            verify(mFakeServiceConfigAccessorSpy, times(1)).updateConfiguration(
+                    currentUserConfig.getUserId(), requestedChanges, bypassUserPolicyChecks);
+            assertEquals(expectedConfigAfterChange,
+                    mTimeDetectorStrategy.getCachedCapabilitiesAndConfigForTests());
+        }
     }
 
     @Test
@@ -1939,20 +2040,14 @@
 
         private final List<Runnable> mAsyncRunnables = new ArrayList<>();
 
-        private ConfigurationInternal mConfigurationInternal;
         private boolean mWakeLockAcquired;
         private long mElapsedRealtimeMillis;
         private long mSystemClockMillis;
         private int mSystemClockConfidence = TIME_CONFIDENCE_LOW;
-        private StateChangeListener mConfigurationInternalChangeListener;
 
         // Tracking operations.
         private boolean mSystemClockWasSet;
 
-        void initializeConfig(ConfigurationInternal configurationInternal) {
-            mConfigurationInternal = configurationInternal;
-        }
-
         public void initializeFakeClocks(
                 TimestampedValue<Instant> timeInfo, @TimeConfidence int timeConfidence) {
             pokeElapsedRealtimeMillis(timeInfo.getReferenceTimeMillis());
@@ -1960,16 +2055,6 @@
         }
 
         @Override
-        public void setConfigurationInternalChangeListener(StateChangeListener listener) {
-            mConfigurationInternalChangeListener = Objects.requireNonNull(listener);
-        }
-
-        @Override
-        public ConfigurationInternal getCurrentUserConfigurationInternal() {
-            return mConfigurationInternal;
-        }
-
-        @Override
         public void acquireWakeLock() {
             if (mWakeLockAcquired) {
                 fail("Wake lock already acquired");
@@ -2019,7 +2104,7 @@
         }
 
         @Override
-        public void dumpDebugLog(PrintWriter printWriter) {
+        public void dumpDebugLog(IndentingPrintWriter pw) {
             // No-op for tests
         }
 
@@ -2037,11 +2122,6 @@
             mAsyncRunnables.clear();
         }
 
-        void simulateConfigurationInternalChange(ConfigurationInternal configurationInternal) {
-            mConfigurationInternal = configurationInternal;
-            mConfigurationInternalChangeListener.onChange();
-        }
-
         void pokeElapsedRealtimeMillis(long elapsedRealtimeMillis) {
             mElapsedRealtimeMillis = elapsedRealtimeMillis;
         }
@@ -2095,13 +2175,6 @@
      */
     private class Script {
 
-        private final TimeDetectorStrategyImpl mTimeDetectorStrategy;
-
-        Script() {
-            mFakeEnvironment = new FakeEnvironment();
-            mTimeDetectorStrategy = new TimeDetectorStrategyImpl(mFakeEnvironment);
-        }
-
         Script pokeFakeClocks(TimestampedValue<Instant> initialClockTime,
                 @TimeConfidence int timeConfidence) {
             mFakeEnvironment.pokeElapsedRealtimeMillis(initialClockTime.getReferenceTimeMillis());
@@ -2122,7 +2195,8 @@
          * Simulates the user / user's configuration changing.
          */
         Script simulateConfigurationInternalChange(ConfigurationInternal configurationInternal) {
-            mFakeEnvironment.simulateConfigurationInternalChange(configurationInternal);
+            mFakeServiceConfigAccessorSpy.simulateCurrentUserConfigurationInternalChange(
+                    configurationInternal);
             return this;
         }
 
@@ -2167,14 +2241,15 @@
 
         Script simulateAutoTimeDetectionToggle() {
             ConfigurationInternal configurationInternal =
-                    mFakeEnvironment.getCurrentUserConfigurationInternal();
+                    mFakeServiceConfigAccessorSpy.getCurrentUserConfigurationInternal();
             boolean autoDetectionEnabledSetting =
                     !configurationInternal.getAutoDetectionEnabledSetting();
             ConfigurationInternal newConfigurationInternal =
                     new ConfigurationInternal.Builder(configurationInternal)
                             .setAutoDetectionEnabledSetting(autoDetectionEnabledSetting)
                             .build();
-            mFakeEnvironment.simulateConfigurationInternalChange(newConfigurationInternal);
+            mFakeServiceConfigAccessorSpy.simulateCurrentUserConfigurationInternalChange(
+                    newConfigurationInternal);
             return this;
         }
 
@@ -2389,4 +2464,12 @@
         return LocalDateTime.of(year, monthInYear, day, hourOfDay, minute, second)
                 .toInstant(ZoneOffset.UTC);
     }
+
+    private void assertStateChangeNotificationsSent(
+            TestStateChangeListener stateChangeListener, int expectedCount) {
+        // The fake environment needs to be told to run posted work.
+        mFakeEnvironment.runAsyncRunnables();
+
+        stateChangeListener.assertNotificationsReceivedAndReset(expectedCount);
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/timezonedetector/location/LocationTimeZoneProviderControllerTest.java b/services/tests/servicestests/src/com/android/server/timezonedetector/location/LocationTimeZoneProviderControllerTest.java
index aeb8ec8..7ff015d 100644
--- a/services/tests/servicestests/src/com/android/server/timezonedetector/location/LocationTimeZoneProviderControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/timezonedetector/location/LocationTimeZoneProviderControllerTest.java
@@ -88,18 +88,21 @@
     private static final long ARBITRARY_TIME_MILLIS = 12345L;
 
     private static final TimeZoneProviderEvent USER1_SUCCESS_LOCATION_TIME_ZONE_EVENT1 =
-            createSuggestionEvent(asList("Europe/London"));
+            createSuggestionEvent(ARBITRARY_TIME_MILLIS, asList("Europe/London"));
     private static final TimeZoneProviderEvent USER1_SUCCESS_LOCATION_TIME_ZONE_EVENT2 =
-            createSuggestionEvent(asList("Europe/Paris"));
+            createSuggestionEvent(ARBITRARY_TIME_MILLIS + 1, asList("Europe/Paris"));
     private static final TimeZoneProviderStatus UNCERTAIN_PROVIDER_STATUS =
             new TimeZoneProviderStatus.Builder()
                     .setLocationDetectionDependencyStatus(DEPENDENCY_STATUS_TEMPORARILY_UNAVAILABLE)
                     .setConnectivityDependencyStatus(DEPENDENCY_STATUS_OK)
                     .setTimeZoneResolutionOperationStatus(OPERATION_STATUS_UNKNOWN)
                     .build();
-    private static final TimeZoneProviderEvent USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT =
+    private static final TimeZoneProviderEvent USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1 =
             TimeZoneProviderEvent.createUncertainEvent(
                     ARBITRARY_TIME_MILLIS, UNCERTAIN_PROVIDER_STATUS);
+    private static final TimeZoneProviderEvent USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT2 =
+            TimeZoneProviderEvent.createUncertainEvent(
+                    ARBITRARY_TIME_MILLIS + 1, UNCERTAIN_PROVIDER_STATUS);
     private static final TimeZoneProviderEvent USER1_PERM_FAILURE_LOCATION_TIME_ZONE_EVENT =
             TimeZoneProviderEvent.createPermanentFailureEvent(ARBITRARY_TIME_MILLIS, "Test");
 
@@ -328,7 +331,7 @@
 
         // Finally, the uncertainty timeout should cause the controller to make an uncertain
         // suggestion.
-        mTestThreadingDomain.executeNext();
+        mTestThreadingDomain.executeAll();
 
         assertControllerState(controller, STATE_UNCERTAIN);
         mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
@@ -649,7 +652,7 @@
         // cause a suggestion to be made straight away, but the uncertainty timeout should be
         // started and the secondary should be started.
         mTestPrimaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
-                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT);
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1);
 
         assertControllerState(controller, STATE_CERTAIN);
         mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
@@ -680,7 +683,7 @@
         // cause a suggestion to be made straight away, but the uncertainty timeout should be
         // started. Both providers are now started, with no initialization timeout set.
         mTestSecondaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
-                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT);
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1);
 
         assertControllerState(controller, STATE_CERTAIN);
         mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
@@ -693,7 +696,7 @@
 
         // Simulate time passing. This means the uncertainty timeout should fire and the uncertain
         // suggestion should be made.
-        mTestThreadingDomain.executeNext();
+        mTestThreadingDomain.executeAll();
 
         assertControllerState(controller, STATE_UNCERTAIN);
         mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
@@ -702,7 +705,7 @@
                 PROVIDER_STATE_STARTED_UNCERTAIN, USER1_CONFIG_GEO_DETECTION_ENABLED);
         mTestMetricsLogger.assertStateChangesAndCommit(STATE_UNCERTAIN);
         mTestCallback.assertEventWithUncertainSuggestionReportedAndCommit(
-                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT);
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1);
         assertFalse(controller.isUncertaintyTimeoutSet());
     }
 
@@ -744,7 +747,7 @@
         // Uncertainty should not cause a suggestion to be made straight away, but the uncertainty
         // timeout should be started and the secondary should be started.
         mTestPrimaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
-                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT);
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1);
 
         assertControllerState(controller, STATE_CERTAIN);
         mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
@@ -772,6 +775,147 @@
     }
 
     @Test
+    public void enabled_uncertaintyDuringUncertaintyTimeoutTriggersNoSuggestion() {
+        LocationTimeZoneProviderController controller = new LocationTimeZoneProviderController(
+                mTestThreadingDomain, mTestMetricsLogger, mTestPrimaryLocationTimeZoneProvider,
+                mTestSecondaryLocationTimeZoneProvider, false /* recordStateChanges */);
+        TestEnvironment testEnvironment = new TestEnvironment(
+                mTestThreadingDomain, controller, USER1_CONFIG_GEO_DETECTION_ENABLED);
+
+        // Initialize and check initial state.
+        controller.initialize(testEnvironment, mTestCallback);
+
+        assertControllerState(controller, STATE_INITIALIZING);
+        mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
+                PROVIDER_STATE_STARTED_INITIALIZING, USER1_CONFIG_GEO_DETECTION_ENABLED);
+        mTestSecondaryLocationTimeZoneProvider.assertIsStoppedAndCommit();
+        mTestMetricsLogger.assertStateChangesAndCommit(
+                STATE_PROVIDERS_INITIALIZING, STATE_STOPPED, STATE_INITIALIZING);
+        mTestCallback.assertEventWithNoSuggestionReportedAndCommit(
+                DETECTION_ALGORITHM_STATUS_RUNNING);
+        assertFalse(controller.isUncertaintyTimeoutSet());
+
+        // Simulate a location event being received from the primary provider. This should cause a
+        // suggestion to be made.
+        mTestPrimaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
+                USER1_SUCCESS_LOCATION_TIME_ZONE_EVENT1);
+
+        assertControllerState(controller, STATE_CERTAIN);
+        mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
+                PROVIDER_STATE_STARTED_CERTAIN, USER1_CONFIG_GEO_DETECTION_ENABLED);
+        mTestSecondaryLocationTimeZoneProvider.assertIsStoppedAndCommit();
+        mTestMetricsLogger.assertStateChangesAndCommit(STATE_CERTAIN);
+        mTestCallback.assertEventWithCertainSuggestionReportedAndCommit(
+                USER1_SUCCESS_LOCATION_TIME_ZONE_EVENT1);
+        assertFalse(controller.isUncertaintyTimeoutSet());
+
+        // Uncertainty should not cause a suggestion to be made straight away, but the uncertainty
+        // timeout should be started and the secondary should be started.
+        mTestPrimaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1);
+
+        assertControllerState(controller, STATE_CERTAIN);
+        mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
+                PROVIDER_STATE_STARTED_UNCERTAIN, USER1_CONFIG_GEO_DETECTION_ENABLED);
+        mTestSecondaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
+                PROVIDER_STATE_STARTED_INITIALIZING, USER1_CONFIG_GEO_DETECTION_ENABLED);
+        mTestMetricsLogger.assertStateChangesAndCommit();
+        mTestCallback.assertNoEventReported();
+        assertUncertaintyTimeoutSet(testEnvironment, controller);
+
+        // Another uncertain suggestion from the primary during the uncertainty timeout should have
+        // no effect.
+        mTestPrimaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1);
+        assertControllerState(controller, STATE_CERTAIN);
+        mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
+                PROVIDER_STATE_STARTED_UNCERTAIN, USER1_CONFIG_GEO_DETECTION_ENABLED);
+        mTestSecondaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
+                PROVIDER_STATE_STARTED_INITIALIZING, USER1_CONFIG_GEO_DETECTION_ENABLED);
+        mTestMetricsLogger.assertStateChangesAndCommit();
+        mTestCallback.assertNoEventReported();
+        assertUncertaintyTimeoutSet(testEnvironment, controller);
+    }
+
+    @Test
+    public void enabled_uncertaintyAfterUncertaintyTimeoutTriggersImmediateSuggestion() {
+        LocationTimeZoneProviderController controller = new LocationTimeZoneProviderController(
+                mTestThreadingDomain, mTestMetricsLogger, mTestPrimaryLocationTimeZoneProvider,
+                mTestSecondaryLocationTimeZoneProvider, false /* recordStateChanges */);
+        TestEnvironment testEnvironment = new TestEnvironment(
+                mTestThreadingDomain, controller, USER1_CONFIG_GEO_DETECTION_ENABLED);
+
+        // Initialize and check initial state.
+        controller.initialize(testEnvironment, mTestCallback);
+
+        assertControllerState(controller, STATE_INITIALIZING);
+        mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
+                PROVIDER_STATE_STARTED_INITIALIZING, USER1_CONFIG_GEO_DETECTION_ENABLED);
+        mTestSecondaryLocationTimeZoneProvider.assertIsStoppedAndCommit();
+        mTestMetricsLogger.assertStateChangesAndCommit(
+                STATE_PROVIDERS_INITIALIZING, STATE_STOPPED, STATE_INITIALIZING);
+        mTestCallback.assertEventWithNoSuggestionReportedAndCommit(
+                DETECTION_ALGORITHM_STATUS_RUNNING);
+        assertFalse(controller.isUncertaintyTimeoutSet());
+
+        // Simulate a location event being received from the primary provider. This should cause a
+        // suggestion to be made.
+        mTestPrimaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
+                USER1_SUCCESS_LOCATION_TIME_ZONE_EVENT1);
+
+        assertControllerState(controller, STATE_CERTAIN);
+        mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
+                PROVIDER_STATE_STARTED_CERTAIN, USER1_CONFIG_GEO_DETECTION_ENABLED);
+        mTestSecondaryLocationTimeZoneProvider.assertIsStoppedAndCommit();
+        mTestMetricsLogger.assertStateChangesAndCommit(STATE_CERTAIN);
+        mTestCallback.assertEventWithCertainSuggestionReportedAndCommit(
+                USER1_SUCCESS_LOCATION_TIME_ZONE_EVENT1);
+        assertFalse(controller.isUncertaintyTimeoutSet());
+
+        // Uncertainty should not cause a suggestion to be made straight away, but the uncertainty
+        // timeout should be started and the secondary should be started.
+        mTestPrimaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1);
+
+        assertControllerState(controller, STATE_CERTAIN);
+        mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
+                PROVIDER_STATE_STARTED_UNCERTAIN, USER1_CONFIG_GEO_DETECTION_ENABLED);
+        mTestSecondaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
+                PROVIDER_STATE_STARTED_INITIALIZING, USER1_CONFIG_GEO_DETECTION_ENABLED);
+        mTestMetricsLogger.assertStateChangesAndCommit();
+        mTestCallback.assertNoEventReported();
+        assertUncertaintyTimeoutSet(testEnvironment, controller);
+
+        // Simulate time passing. This means the uncertainty timeout should fire and the uncertain
+        // suggestion should be made.
+        mTestThreadingDomain.executeAll();
+
+        assertControllerState(controller, STATE_UNCERTAIN);
+        mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
+                PROVIDER_STATE_STARTED_UNCERTAIN, USER1_CONFIG_GEO_DETECTION_ENABLED);
+        mTestSecondaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
+                PROVIDER_STATE_STARTED_UNCERTAIN, USER1_CONFIG_GEO_DETECTION_ENABLED);
+        mTestMetricsLogger.assertStateChangesAndCommit(STATE_UNCERTAIN);
+        mTestCallback.assertEventWithUncertainSuggestionReportedAndCommit(
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1);
+        assertFalse(controller.isUncertaintyTimeoutSet());
+
+        // Another uncertain suggestion from the primary should cause an immediate suggestion.
+        mTestPrimaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT2);
+
+        assertControllerState(controller, STATE_UNCERTAIN);
+        mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
+                PROVIDER_STATE_STARTED_UNCERTAIN, USER1_CONFIG_GEO_DETECTION_ENABLED);
+        mTestSecondaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
+                PROVIDER_STATE_STARTED_UNCERTAIN, USER1_CONFIG_GEO_DETECTION_ENABLED);
+        mTestMetricsLogger.assertStateChangesAndCommit();
+        mTestCallback.assertEventWithUncertainSuggestionReportedAndCommit(
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT2);
+        assertFalse(controller.isUncertaintyTimeoutSet());
+    }
+
+    @Test
     public void configChanges_enableAndDisableWithNoPreviousSuggestion() {
         LocationTimeZoneProviderController controller = new LocationTimeZoneProviderController(
                 mTestThreadingDomain, mTestMetricsLogger, mTestPrimaryLocationTimeZoneProvider,
@@ -965,7 +1109,7 @@
 
         // Simulate uncertainty from the secondary.
         mTestSecondaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
-                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT);
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1);
 
         assertControllerState(controller, STATE_INITIALIZING);
         mTestPrimaryLocationTimeZoneProvider.assertIsPermFailedAndCommit();
@@ -991,7 +1135,7 @@
 
         // Simulate uncertainty from the secondary.
         mTestSecondaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
-                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT);
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1);
 
         assertControllerState(controller, STATE_CERTAIN);
         mTestPrimaryLocationTimeZoneProvider.assertIsPermFailedAndCommit();
@@ -1085,7 +1229,7 @@
         // give this test the opportunity to simulate its failure. Then it will be possible to
         // demonstrate controller behavior with only the primary working.
         mTestPrimaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
-                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT);
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1);
 
         assertControllerState(controller, STATE_INITIALIZING);
         mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
@@ -1124,7 +1268,7 @@
 
         // Simulate uncertainty from the primary. The secondary cannot be started.
         mTestPrimaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
-                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT);
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1);
 
         assertControllerState(controller, STATE_CERTAIN);
         mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
@@ -1160,7 +1304,7 @@
         // give this test the opportunity to simulate its failure. Then it will be possible to
         // demonstrate controller behavior with only the primary working.
         mTestPrimaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
-                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT);
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1);
 
         assertControllerState(controller, STATE_INITIALIZING);
         mTestPrimaryLocationTimeZoneProvider.assertStateEnumAndConfigAndCommit(
@@ -1282,7 +1426,7 @@
 
         // Simulate an uncertain event from the primary. This will start the secondary.
         mTestPrimaryLocationTimeZoneProvider.simulateTimeZoneProviderEvent(
-                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT);
+                USER1_UNCERTAIN_LOCATION_TIME_ZONE_EVENT1);
 
         {
             LocationTimeZoneManagerServiceState state = controller.getStateForTests();
@@ -1471,18 +1615,19 @@
                 controller.getUncertaintyTimeoutDelayMillis());
     }
 
-    private static TimeZoneProviderEvent createSuggestionEvent(@NonNull List<String> timeZoneIds) {
+    private static TimeZoneProviderEvent createSuggestionEvent(
+            long elapsedRealtimeMillis, @NonNull List<String> timeZoneIds) {
         TimeZoneProviderStatus providerStatus = new TimeZoneProviderStatus.Builder()
                 .setLocationDetectionDependencyStatus(DEPENDENCY_STATUS_NOT_APPLICABLE)
                 .setConnectivityDependencyStatus(DEPENDENCY_STATUS_NOT_APPLICABLE)
                 .setTimeZoneResolutionOperationStatus(OPERATION_STATUS_OK)
                 .build();
         TimeZoneProviderSuggestion suggestion = new TimeZoneProviderSuggestion.Builder()
-                .setElapsedRealtimeMillis(ARBITRARY_TIME_MILLIS)
+                .setElapsedRealtimeMillis(elapsedRealtimeMillis)
                 .setTimeZoneIds(timeZoneIds)
                 .build();
         return TimeZoneProviderEvent.createSuggestionEvent(
-                ARBITRARY_TIME_MILLIS, suggestion, providerStatus);
+                elapsedRealtimeMillis, suggestion, providerStatus);
     }
 
     private static void assertControllerState(LocationTimeZoneProviderController controller,
diff --git a/services/tests/servicestests/src/com/android/server/timezonedetector/location/TestThreadingDomain.java b/services/tests/servicestests/src/com/android/server/timezonedetector/location/TestThreadingDomain.java
index e08fea0..a3fb5e6 100644
--- a/services/tests/servicestests/src/com/android/server/timezonedetector/location/TestThreadingDomain.java
+++ b/services/tests/servicestests/src/com/android/server/timezonedetector/location/TestThreadingDomain.java
@@ -142,4 +142,10 @@
         mCurrentTimeMillis = queued.executionTimeMillis;
         queued.runnable.run();
     }
+
+    void executeAll() {
+        while (!mQueue.isEmpty()) {
+            executeNext();
+        }
+    }
 }
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 3adee0f..83fa29a 100644
--- a/services/tests/servicestests/src/com/android/server/usage/UsageStatsDatabaseTest.java
+++ b/services/tests/servicestests/src/com/android/server/usage/UsageStatsDatabaseTest.java
@@ -31,7 +31,7 @@
 import android.content.res.Configuration;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.util.AtomicFile;
-import android.util.TimeSparseArray;
+import android.util.LongSparseArray;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
@@ -568,7 +568,7 @@
         mUsageStatsDatabase.forceIndexFiles();
         final int len = mUsageStatsDatabase.mSortedStatFiles.length;
         for (int i = 0; i < len; i++) {
-            final TimeSparseArray<AtomicFile> files =  mUsageStatsDatabase.mSortedStatFiles[i];
+            final LongSparseArray<AtomicFile> files =  mUsageStatsDatabase.mSortedStatFiles[i];
             // The stats file for each interval type equals to max allowed.
             assertEquals(UsageStatsDatabase.MAX_FILES_PER_INTERVAL_TYPE[i],
                     files.size());
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/DeviceVibrationEffectAdapterTest.java b/services/tests/servicestests/src/com/android/server/vibrator/DeviceVibrationEffectAdapterTest.java
deleted file mode 100644
index 1a146f6..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/DeviceVibrationEffectAdapterTest.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.server.vibrator;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.when;
-
-import android.content.ComponentName;
-import android.content.pm.PackageManagerInternal;
-import android.hardware.vibrator.IVibrator;
-import android.os.Handler;
-import android.os.VibrationEffect;
-import android.os.VibratorInfo;
-import android.os.test.TestLooper;
-import android.os.vibrator.PrebakedSegment;
-import android.os.vibrator.PrimitiveSegment;
-import android.os.vibrator.RampSegment;
-import android.os.vibrator.StepSegment;
-import android.os.vibrator.VibrationEffectSegment;
-import android.platform.test.annotations.Presubmit;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.server.LocalServices;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
-
-import java.util.Arrays;
-import java.util.stream.IntStream;
-
-/**
- * Tests for {@link DeviceVibrationEffectAdapter}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:DeviceVibrationEffectAdapterTest
- */
-@Presubmit
-public class DeviceVibrationEffectAdapterTest {
-    private static final float TEST_MIN_FREQUENCY = 50;
-    private static final float TEST_RESONANT_FREQUENCY = 150;
-    private static final float TEST_FREQUENCY_RESOLUTION = 25;
-    private static final float[] TEST_AMPLITUDE_MAP = new float[]{
-            /* 50Hz= */ 0.1f, 0.2f, 0.4f, 0.8f, /* 150Hz= */ 1f, 0.9f, /* 200Hz= */ 0.8f};
-
-    private static final VibratorInfo.FrequencyProfile EMPTY_FREQUENCY_PROFILE =
-            new VibratorInfo.FrequencyProfile(Float.NaN, Float.NaN, Float.NaN, null);
-    private static final VibratorInfo.FrequencyProfile TEST_FREQUENCY_PROFILE =
-            new VibratorInfo.FrequencyProfile(TEST_RESONANT_FREQUENCY, TEST_MIN_FREQUENCY,
-                    TEST_FREQUENCY_RESOLUTION, TEST_AMPLITUDE_MAP);
-
-    @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
-
-    @Mock private PackageManagerInternal mPackageManagerInternalMock;
-
-    private DeviceVibrationEffectAdapter mAdapter;
-
-    @Before
-    public void setUp() throws Exception {
-        when(mPackageManagerInternalMock.getSystemUiServiceComponent())
-                .thenReturn(new ComponentName("", ""));
-        LocalServices.removeServiceForTest(PackageManagerInternal.class);
-        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternalMock);
-
-        VibrationSettings vibrationSettings = new VibrationSettings(
-                InstrumentationRegistry.getContext(), new Handler(new TestLooper().getLooper()));
-        mAdapter = new DeviceVibrationEffectAdapter(vibrationSettings);
-    }
-
-    @Test
-    public void testPrebakedAndPrimitiveSegments_returnsOriginalSegment() {
-        VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList(
-                new PrebakedSegment(
-                        VibrationEffect.EFFECT_CLICK, false, VibrationEffect.EFFECT_STRENGTH_LIGHT),
-                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10),
-                new PrebakedSegment(
-                        VibrationEffect.EFFECT_THUD, true, VibrationEffect.EFFECT_STRENGTH_STRONG),
-                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_SPIN, 0.5f, 100)),
-                /* repeatIndex= */ -1);
-
-        assertEquals(effect, mAdapter.apply(effect, createVibratorInfo(EMPTY_FREQUENCY_PROFILE)));
-        assertEquals(effect, mAdapter.apply(effect, createVibratorInfo(TEST_FREQUENCY_PROFILE)));
-    }
-
-    @Test
-    public void testStepAndRampSegments_withoutPwleCapability_convertsRampsToSteps() {
-        VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 200, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 150, /* duration= */ 100),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 0.2f,
-                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 300, /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
-                        /* startFrequencyHz= */ 0, /* endFrequencyHz= */ 0, /* duration= */ 100),
-                new RampSegment(/* startAmplitude= */ 0.65f, /* endAmplitude= */ 0.65f,
-                        /* startFrequencyHz= */ 0, /* endFrequencyHz= */ 1, /* duration= */ 1000)),
-                /* repeatIndex= */ 3);
-
-        VibrationEffect.Composed adaptedEffect = (VibrationEffect.Composed) mAdapter.apply(effect,
-                createVibratorInfo(EMPTY_FREQUENCY_PROFILE));
-        assertTrue(adaptedEffect.getSegments().size() > effect.getSegments().size());
-        assertTrue(adaptedEffect.getRepeatIndex() >= effect.getRepeatIndex());
-
-        for (VibrationEffectSegment adaptedSegment : adaptedEffect.getSegments()) {
-            assertTrue(adaptedSegment instanceof StepSegment);
-        }
-    }
-
-    @Test
-    public void testStepAndRampSegments_withPwleCapability_convertsStepsToRamps() {
-        VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 175, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 150, /* duration= */ 60),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 50, /* endFrequencyHz= */ 200, /* duration= */ 50),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
-                        /* startFrequencyHz= */ 1000, /* endFrequencyHz= */ 1, /* duration= */ 20)),
-                /* repeatIndex= */ 2);
-
-        VibrationEffect.Composed expected = new VibrationEffect.Composed(Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude*/ 0,
-                        /* startFrequencyHz= */ 175, /* endFrequencyHz= */ 175, /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.5f,
-                        /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 150, /* duration= */ 60),
-                new RampSegment(/* startAmplitude= */ 0.1f, /* endAmplitude= */ 0.8f,
-                        /* startFrequencyHz= */ 50, /* endFrequencyHz= */ 200, /* duration= */ 50),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.1f,
-                        /* startFrequencyHz= */ 200, /* endFrequencyHz= */ 50, /* duration= */ 20)),
-                /* repeatIndex= */ 2);
-
-        VibratorInfo info = createVibratorInfo(TEST_FREQUENCY_PROFILE,
-                IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
-        assertEquals(expected, mAdapter.apply(effect, info));
-    }
-
-    @Test
-    public void testStepAndRampSegments_withEmptyFreqMapping_returnsAmplitudesWithResonantFreq() {
-        VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 175, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 100),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 50, /* endFrequencyHz= */ 200, /* duration= */ 50),
-                new RampSegment(/* startAmplitude= */ 0.7f, /* endAmplitude= */ 0.5f,
-                        /* startFrequencyHz= */ 1000, /* endFrequencyHz= */ 1, /* duration= */ 20)),
-                /* repeatIndex= */ 2);
-
-        VibrationEffect.Composed expected = new VibrationEffect.Composed(Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0,
-                        /* startFrequencyHz= */ Float.NaN, /* endFrequencyHz= */ Float.NaN,
-                        /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.5f,
-                        /* startFrequencyHz= */ Float.NaN, /* endFrequencyHz= */ Float.NaN,
-                        /* duration= */ 100),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ Float.NaN, /* endFrequencyHz= */ Float.NaN,
-                        /* duration= */ 50),
-                new RampSegment(/* startAmplitude= */ 0.7f, /* endAmplitude= */ 0.5f,
-                        /* startFrequencyHz= */ Float.NaN, /* endFrequencyHz= */ Float.NaN,
-                        /* duration= */ 20)),
-                /* repeatIndex= */ 2);
-
-        VibratorInfo info = createVibratorInfo(EMPTY_FREQUENCY_PROFILE,
-                IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
-        assertEquals(expected, mAdapter.apply(effect, info));
-    }
-
-    @Test
-    public void testStepAndRampSegments_withValidFreqMapping_returnsClippedValues() {
-        VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 125, /* duration= */ 100),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 50, /* endFrequencyHz= */ 200, /* duration= */ 50),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
-                        /* startFrequencyHz= */ 1000, /* endFrequencyHz= */ 1, /* duration= */ 20)),
-                /* repeatIndex= */ 2);
-
-        VibrationEffect.Composed expected = new VibrationEffect.Composed(Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.5f,
-                        /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 150,
-                        /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.8f,
-                        /* startFrequencyHz= */ 125, /* endFrequencyHz= */ 125,
-                        /* duration= */ 100),
-                new RampSegment(/* startAmplitude= */ 0.1f, /* endAmplitude= */ 0.8f,
-                        /* startFrequencyHz= */ 50, /* endFrequencyHz= */ 200, /* duration= */ 50),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.1f,
-                        /* startFrequencyHz= */ 200, /* endFrequencyHz= */ 50, /* duration= */ 20)),
-                /* repeatIndex= */ 2);
-
-        VibratorInfo info = createVibratorInfo(TEST_FREQUENCY_PROFILE,
-                IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
-        assertEquals(expected, mAdapter.apply(effect, info));
-    }
-
-    private static VibratorInfo createVibratorInfo(VibratorInfo.FrequencyProfile frequencyProfile,
-            int... capabilities) {
-        int cap = IntStream.of(capabilities).reduce((a, b) -> a | b).orElse(0);
-        return new VibratorInfo.Builder(0)
-                .setCapabilities(cap)
-                .setFrequencyProfile(frequencyProfile)
-                .build();
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/FakeVibrator.java b/services/tests/servicestests/src/com/android/server/vibrator/FakeVibrator.java
deleted file mode 100644
index 4556a4a..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/FakeVibrator.java
+++ /dev/null
@@ -1,54 +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.server.vibrator;
-
-import android.annotation.NonNull;
-import android.content.Context;
-import android.os.VibrationAttributes;
-import android.os.VibrationEffect;
-import android.os.Vibrator;
-
-/** Fake implementation of {@link Vibrator} for service tests. */
-final class FakeVibrator extends Vibrator {
-
-    FakeVibrator(Context context) {
-        super(context);
-    }
-
-    @Override
-    public boolean hasVibrator() {
-        return true;
-    }
-
-    @Override
-    public boolean hasAmplitudeControl() {
-        return true;
-    }
-
-    @Override
-    public void vibrate(int uid, String opPkg, @NonNull VibrationEffect vibe, String reason,
-            @NonNull VibrationAttributes attributes) {
-    }
-
-    @Override
-    public void cancel() {
-    }
-
-    @Override
-    public void cancel(int usageFilter) {
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/FakeVibratorControllerProvider.java b/services/tests/servicestests/src/com/android/server/vibrator/FakeVibratorControllerProvider.java
deleted file mode 100644
index c484f45..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/FakeVibratorControllerProvider.java
+++ /dev/null
@@ -1,379 +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.server.vibrator;
-
-import android.annotation.Nullable;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.VibrationEffect;
-import android.os.VibratorInfo;
-import android.os.vibrator.PrebakedSegment;
-import android.os.vibrator.PrimitiveSegment;
-import android.os.vibrator.RampSegment;
-import android.os.vibrator.StepSegment;
-import android.os.vibrator.VibrationEffectSegment;
-
-import com.android.server.vibrator.VibratorController.OnVibrationCompleteListener;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-/**
- * Provides {@link VibratorController} with controlled vibrator hardware capabilities and
- * interactions.
- */
-final class FakeVibratorControllerProvider {
-    private static final int EFFECT_DURATION = 20;
-
-    private final Map<Long, PrebakedSegment> mEnabledAlwaysOnEffects = new HashMap<>();
-    private final Map<Long, List<VibrationEffectSegment>> mEffectSegments = new TreeMap<>();
-    private final Map<Long, List<Integer>> mBraking = new HashMap<>();
-    private final List<Float> mAmplitudes = new ArrayList<>();
-    private final List<Boolean> mExternalControlStates = new ArrayList<>();
-    private final Handler mHandler;
-    private final FakeNativeWrapper mNativeWrapper;
-
-    private boolean mIsAvailable = true;
-    private boolean mIsInfoLoadSuccessful = true;
-    private long mOnLatency;
-    private long mOffLatency;
-    private int mOffCount;
-
-    private int mCapabilities;
-    private int[] mSupportedEffects;
-    private int[] mSupportedBraking;
-    private int[] mSupportedPrimitives;
-    private int mCompositionSizeMax;
-    private int mPwleSizeMax;
-    private float mMinFrequency = Float.NaN;
-    private float mResonantFrequency = Float.NaN;
-    private float mFrequencyResolution = Float.NaN;
-    private float mQFactor = Float.NaN;
-    private float[] mMaxAmplitudes;
-
-    void recordEffectSegment(long vibrationId, VibrationEffectSegment segment) {
-        mEffectSegments.computeIfAbsent(vibrationId, k -> new ArrayList<>()).add(segment);
-    }
-
-    void recordBraking(long vibrationId, int braking) {
-        mBraking.computeIfAbsent(vibrationId, k -> new ArrayList<>()).add(braking);
-    }
-
-    private final class FakeNativeWrapper extends VibratorController.NativeWrapper {
-        public int vibratorId;
-        public OnVibrationCompleteListener listener;
-        public boolean isInitialized;
-
-        @Override
-        public void init(int vibratorId, OnVibrationCompleteListener listener) {
-            isInitialized = true;
-            this.vibratorId = vibratorId;
-            this.listener = listener;
-        }
-
-        @Override
-        public boolean isAvailable() {
-            return mIsAvailable;
-        }
-
-        @Override
-        public long on(long milliseconds, long vibrationId) {
-            recordEffectSegment(vibrationId, new StepSegment(VibrationEffect.DEFAULT_AMPLITUDE,
-                    /* frequencyHz= */ 0, (int) milliseconds));
-            applyLatency(mOnLatency);
-            scheduleListener(milliseconds, vibrationId);
-            return milliseconds;
-        }
-
-        @Override
-        public void off() {
-            mOffCount++;
-            applyLatency(mOffLatency);
-        }
-
-        @Override
-        public void setAmplitude(float amplitude) {
-            mAmplitudes.add(amplitude);
-            applyLatency(mOnLatency);
-        }
-
-        @Override
-        public long perform(long effect, long strength, long vibrationId) {
-            if (mSupportedEffects == null
-                    || Arrays.binarySearch(mSupportedEffects, (int) effect) < 0) {
-                return 0;
-            }
-            recordEffectSegment(vibrationId,
-                    new PrebakedSegment((int) effect, false, (int) strength));
-            applyLatency(mOnLatency);
-            scheduleListener(EFFECT_DURATION, vibrationId);
-            return EFFECT_DURATION;
-        }
-
-        @Override
-        public long compose(PrimitiveSegment[] primitives, long vibrationId) {
-            if (mSupportedPrimitives == null) {
-                return 0;
-            }
-            for (PrimitiveSegment primitive : primitives) {
-                if (Arrays.binarySearch(mSupportedPrimitives, primitive.getPrimitiveId()) < 0) {
-                    return 0;
-                }
-            }
-            long duration = 0;
-            for (PrimitiveSegment primitive : primitives) {
-                duration += EFFECT_DURATION + primitive.getDelay();
-                recordEffectSegment(vibrationId, primitive);
-            }
-            applyLatency(mOnLatency);
-            scheduleListener(duration, vibrationId);
-            return duration;
-        }
-
-        @Override
-        public long composePwle(RampSegment[] primitives, int braking, long vibrationId) {
-            long duration = 0;
-            for (RampSegment primitive : primitives) {
-                duration += primitive.getDuration();
-                recordEffectSegment(vibrationId, primitive);
-            }
-            recordBraking(vibrationId, braking);
-            applyLatency(mOnLatency);
-            scheduleListener(duration, vibrationId);
-            return duration;
-        }
-
-        @Override
-        public void setExternalControl(boolean enabled) {
-            mExternalControlStates.add(enabled);
-        }
-
-        @Override
-        public void alwaysOnEnable(long id, long effect, long strength) {
-            PrebakedSegment prebaked = new PrebakedSegment((int) effect, false, (int) strength);
-            mEnabledAlwaysOnEffects.put(id, prebaked);
-        }
-
-        @Override
-        public void alwaysOnDisable(long id) {
-            mEnabledAlwaysOnEffects.remove(id);
-        }
-
-        @Override
-        public boolean getInfo(VibratorInfo.Builder infoBuilder) {
-            infoBuilder.setCapabilities(mCapabilities);
-            infoBuilder.setSupportedBraking(mSupportedBraking);
-            infoBuilder.setPwleSizeMax(mPwleSizeMax);
-            infoBuilder.setSupportedEffects(mSupportedEffects);
-            if (mSupportedPrimitives != null) {
-                for (int primitive : mSupportedPrimitives) {
-                    infoBuilder.setSupportedPrimitive(primitive, EFFECT_DURATION);
-                }
-            }
-            infoBuilder.setCompositionSizeMax(mCompositionSizeMax);
-            infoBuilder.setQFactor(mQFactor);
-            infoBuilder.setFrequencyProfile(new VibratorInfo.FrequencyProfile(
-                    mResonantFrequency, mMinFrequency, mFrequencyResolution, mMaxAmplitudes));
-            return mIsInfoLoadSuccessful;
-        }
-
-        private void applyLatency(long latencyMillis) {
-            try {
-                if (latencyMillis > 0) {
-                    Thread.sleep(latencyMillis);
-                }
-            } catch (InterruptedException e) {
-            }
-        }
-
-        private void scheduleListener(long vibrationDuration, long vibrationId) {
-            mHandler.postDelayed(() -> listener.onComplete(vibratorId, vibrationId),
-                    vibrationDuration);
-        }
-    }
-
-    public FakeVibratorControllerProvider(Looper looper) {
-        mHandler = new Handler(looper);
-        mNativeWrapper = new FakeNativeWrapper();
-    }
-
-    public VibratorController newVibratorController(
-            int vibratorId, OnVibrationCompleteListener listener) {
-        return new VibratorController(vibratorId, listener, mNativeWrapper);
-    }
-
-    /** Return {@code true} if this controller was initialized. */
-    public boolean isInitialized() {
-        return mNativeWrapper.isInitialized;
-    }
-
-    /**
-     * Disable fake vibrator hardware, mocking a state where the underlying service is unavailable.
-     */
-    public void disableVibrators() {
-        mIsAvailable = false;
-    }
-
-    /**
-     * Sets the result for the method that loads the {@link VibratorInfo}, for faking a vibrator
-     * that fails to load some of the hardware data.
-     */
-    public void setVibratorInfoLoadSuccessful(boolean successful) {
-        mIsInfoLoadSuccessful = successful;
-    }
-
-    /**
-     * Sets the latency this controller should fake for turning the vibrator hardware on or setting
-     * the vibration amplitude.
-     */
-    public void setOnLatency(long millis) {
-        mOnLatency = millis;
-    }
-
-    /** Sets the latency this controller should fake for turning the vibrator off. */
-    public void setOffLatency(long millis) {
-        mOffLatency = millis;
-    }
-
-    /** Set the capabilities of the fake vibrator hardware. */
-    public void setCapabilities(int... capabilities) {
-        mCapabilities = Arrays.stream(capabilities).reduce(0, (a, b) -> a | b);
-    }
-
-    /** Set the effects supported by the fake vibrator hardware. */
-    public void setSupportedEffects(int... effects) {
-        if (effects != null) {
-            effects = Arrays.copyOf(effects, effects.length);
-            Arrays.sort(effects);
-        }
-        mSupportedEffects = effects;
-    }
-
-    /** Set the effects supported by the fake vibrator hardware. */
-    public void setSupportedBraking(int... braking) {
-        if (braking != null) {
-            braking = Arrays.copyOf(braking, braking.length);
-            Arrays.sort(braking);
-        }
-        mSupportedBraking = braking;
-    }
-
-    /** Set the primitives supported by the fake vibrator hardware. */
-    public void setSupportedPrimitives(int... primitives) {
-        if (primitives != null) {
-            primitives = Arrays.copyOf(primitives, primitives.length);
-            Arrays.sort(primitives);
-        }
-        mSupportedPrimitives = primitives;
-    }
-
-    /** Set the max number of primitives allowed in a composition by the fake vibrator hardware. */
-    public void setCompositionSizeMax(int compositionSizeMax) {
-        mCompositionSizeMax = compositionSizeMax;
-    }
-
-    /** Set the max number of PWLEs allowed in a composition by the fake vibrator hardware. */
-    public void setPwleSizeMax(int pwleSizeMax) {
-        mPwleSizeMax = pwleSizeMax;
-    }
-
-    /** Set the resonant frequency of the fake vibrator hardware. */
-    public void setResonantFrequency(float frequencyHz) {
-        mResonantFrequency = frequencyHz;
-    }
-
-    /** Set the minimum frequency of the fake vibrator hardware. */
-    public void setMinFrequency(float frequencyHz) {
-        mMinFrequency = frequencyHz;
-    }
-
-    /** Set the frequency resolution of the fake vibrator hardware. */
-    public void setFrequencyResolution(float frequencyHz) {
-        mFrequencyResolution = frequencyHz;
-    }
-
-    /** Set the Q factor of the fake vibrator hardware. */
-    public void setQFactor(float qFactor) {
-        mQFactor = qFactor;
-    }
-
-    /** Set the max amplitude supported for each frequency f the fake vibrator hardware. */
-    public void setMaxAmplitudes(float... maxAmplitudes) {
-        mMaxAmplitudes = maxAmplitudes;
-    }
-
-    /**
-     * Return the amplitudes set by this controller, including zeroes for each time the vibrator was
-     * turned off.
-     */
-    public List<Float> getAmplitudes() {
-        return new ArrayList<>(mAmplitudes);
-    }
-
-    /** Return the braking values passed to the compose PWLE method. */
-    public List<Integer> getBraking(long vibrationId) {
-        if (mBraking.containsKey(vibrationId)) {
-            return new ArrayList<>(mBraking.get(vibrationId));
-        } else {
-            return new ArrayList<>();
-        }
-    }
-
-    /** Return list of {@link VibrationEffectSegment} played by this controller, in order. */
-    public List<VibrationEffectSegment> getEffectSegments(long vibrationId) {
-        if (mEffectSegments.containsKey(vibrationId)) {
-            return new ArrayList<>(mEffectSegments.get(vibrationId));
-        } else {
-            return new ArrayList<>();
-        }
-    }
-
-    /**
-     * Returns a list of all vibrations' effect segments, for external-use where vibration IDs
-     * aren't exposed.
-     */
-    public List<VibrationEffectSegment> getAllEffectSegments() {
-        // Returns segments in order of vibrationId, which increases over time. TreeMap gives order.
-        ArrayList<VibrationEffectSegment> result = new ArrayList<>();
-        for (List<VibrationEffectSegment> subList : mEffectSegments.values()) {
-            result.addAll(subList);
-        }
-        return result;
-    }
-    /** Return list of states set for external control to the fake vibrator hardware. */
-    public List<Boolean> getExternalControlStates() {
-        return mExternalControlStates;
-    }
-
-    /** Returns the number of times the vibrator was turned off. */
-    public int getOffCount() {
-        return mOffCount;
-    }
-
-    /**
-     * Return the {@link PrebakedSegment} effect enabled with given id, or {@code null} if
-     * missing or disabled.
-     */
-    @Nullable
-    public PrebakedSegment getAlwaysOnEffect(int id) {
-        return mEnabledAlwaysOnEffects.get((long) id);
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/InputDeviceDelegateTest.java b/services/tests/servicestests/src/com/android/server/vibrator/InputDeviceDelegateTest.java
deleted file mode 100644
index 2ab79fc..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/InputDeviceDelegateTest.java
+++ /dev/null
@@ -1,343 +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.server.vibrator;
-
-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.ArgumentMatchers.same;
-import static org.mockito.Mockito.doAnswer;
-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.Context;
-import android.content.ContextWrapper;
-import android.hardware.input.IInputDevicesChangedListener;
-import android.hardware.input.IInputManager;
-import android.hardware.input.InputManager;
-import android.hardware.input.InputManagerGlobal;
-import android.os.CombinedVibration;
-import android.os.Handler;
-import android.os.Process;
-import android.os.VibrationAttributes;
-import android.os.VibrationEffect;
-import android.os.test.TestLooper;
-import android.platform.test.annotations.Presubmit;
-import android.view.InputDevice;
-
-import androidx.test.InstrumentationRegistry;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
-
-/**
- * Tests for {@link InputDeviceDelegate}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:InputDeviceDelegateTest
- */
-@Presubmit
-public class InputDeviceDelegateTest {
-
-    private static final int UID = Process.ROOT_UID;
-    private static final String PACKAGE_NAME = "package";
-    private static final String REASON = "some reason";
-    private static final VibrationAttributes VIBRATION_ATTRIBUTES =
-            new VibrationAttributes.Builder().setUsage(VibrationAttributes.USAGE_ALARM).build();
-    private static final CombinedVibration SYNCED_EFFECT =
-            CombinedVibration.createParallel(VibrationEffect.createOneShot(100, 255));
-
-    @Rule public MockitoRule rule = MockitoJUnit.rule();
-
-    @Mock private IInputManager mIInputManagerMock;
-
-    private TestLooper mTestLooper;
-    private ContextWrapper mContextSpy;
-    private InputManager mInputManager;
-    private InputDeviceDelegate mInputDeviceDelegate;
-    private IInputDevicesChangedListener mIInputDevicesChangedListener;
-
-    @Before
-    public void setUp() throws Exception {
-        mTestLooper = new TestLooper();
-        InputManagerGlobal.resetInstance(mIInputManagerMock);
-        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
-
-        mInputManager = new InputManager(mContextSpy);
-        when(mContextSpy.getSystemService(eq(Context.INPUT_SERVICE)))
-                .thenReturn(mInputManager);
-        doAnswer(invocation -> mIInputDevicesChangedListener = invocation.getArgument(0))
-                .when(mIInputManagerMock).registerInputDevicesChangedListener(any());
-
-        mInputDeviceDelegate = new InputDeviceDelegate(
-                mContextSpy, new Handler(mTestLooper.getLooper()));
-        mInputDeviceDelegate.onSystemReady();
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        InputManagerGlobal.clearInstance();
-    }
-
-    @Test
-    public void beforeSystemReady_ignoresAnyUpdate() throws Exception {
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[0]);
-        InputDeviceDelegate inputDeviceDelegate = new InputDeviceDelegate(
-                mContextSpy, new Handler(mTestLooper.getLooper()));
-
-        inputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
-        assertFalse(inputDeviceDelegate.isAvailable());
-
-        inputDeviceDelegate.onInputDeviceAdded(1);
-        assertFalse(inputDeviceDelegate.isAvailable());
-
-        updateInputDevices(new int[]{1});
-        assertFalse(inputDeviceDelegate.isAvailable());
-
-        verify(mIInputManagerMock, never()).getInputDevice(anyInt());
-    }
-
-    @Test
-    public void onInputDeviceAdded_withSettingsDisabled_ignoresNewDevice() throws Exception {
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[0]);
-        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ false);
-        assertFalse(mInputDeviceDelegate.isAvailable());
-
-        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(createInputDeviceWithVibrator(1));
-        mInputDeviceDelegate.onInputDeviceAdded(1);
-
-        assertFalse(mInputDeviceDelegate.isAvailable());
-        verify(mIInputManagerMock, never()).getInputDevice(anyInt());
-    }
-
-    @Test
-    public void onInputDeviceAdded_withDeviceWithoutVibrator_ignoresNewDevice() throws Exception {
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[0]);
-        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
-        assertFalse(mInputDeviceDelegate.isAvailable());
-
-        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[0]);
-        when(mIInputManagerMock.getInputDevice(eq(1)))
-                .thenReturn(createInputDeviceWithoutVibrator(1));
-        updateInputDevices(new int[]{1});
-
-        assertFalse(mInputDeviceDelegate.isAvailable());
-        verify(mIInputManagerMock).getInputDevice(eq(1));
-    }
-
-    @Test
-    public void onInputDeviceAdded_withDeviceWithVibrator_addsNewDevice() throws Exception {
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[0]);
-        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
-        assertFalse(mInputDeviceDelegate.isAvailable());
-
-        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(createInputDeviceWithVibrator(1));
-        updateInputDevices(new int[]{1});
-
-        assertTrue(mInputDeviceDelegate.isAvailable());
-        verify(mIInputManagerMock).getInputDevice(eq(1));
-    }
-
-    @Test
-    public void onInputDeviceChanged_withSettingsDisabled_ignoresDevice() throws Exception {
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(createInputDeviceWithVibrator(1));
-        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ false);
-
-        updateInputDevices(new int[]{1});
-        assertFalse(mInputDeviceDelegate.isAvailable());
-        verify(mIInputManagerMock, never()).getInputDevice(anyInt());
-    }
-
-    @Test
-    public void onInputDeviceChanged_deviceLosesVibrator_removesDevice() throws Exception {
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1}, new int[0]);
-        when(mIInputManagerMock.getInputDevice(eq(1)))
-                .thenReturn(createInputDeviceWithVibrator(1), createInputDeviceWithoutVibrator(1));
-
-        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
-        assertTrue(mInputDeviceDelegate.isAvailable());
-
-        updateInputDevices(new int[]{1});
-        assertFalse(mInputDeviceDelegate.isAvailable());
-        verify(mIInputManagerMock, times(2)).getInputDevice(eq(1));
-    }
-
-    @Test
-    public void onInputDeviceChanged_deviceLost_removesDevice() throws Exception {
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1}, new int[0]);
-        when(mIInputManagerMock.getInputDevice(eq(1)))
-                .thenReturn(createInputDeviceWithVibrator(1), (InputDevice) null);
-
-        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
-        assertTrue(mInputDeviceDelegate.isAvailable());
-
-        updateInputDevices(new int[]{1});
-        assertFalse(mInputDeviceDelegate.isAvailable());
-        verify(mIInputManagerMock, times(2)).getInputDevice(eq(1));
-    }
-
-    @Test
-    public void onInputDeviceChanged_deviceAddsVibrator_addsDevice() throws Exception {
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[0], new int[]{1});
-        when(mIInputManagerMock.getInputDevice(eq(1)))
-                .thenReturn(createInputDeviceWithoutVibrator(1), createInputDeviceWithVibrator(1));
-
-        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
-        assertFalse(mInputDeviceDelegate.isAvailable());
-
-        updateInputDevices(new int[]{1});
-        assertTrue(mInputDeviceDelegate.isAvailable());
-        verify(mIInputManagerMock, times(2)).getInputDevice(eq(1));
-    }
-
-    @Test
-    public void onInputDeviceRemoved_removesDevice() throws Exception {
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1, 2});
-        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[0]);
-        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(
-                createInputDeviceWithoutVibrator(1));
-        when(mIInputManagerMock.getVibratorIds(eq(2))).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getInputDevice(eq(2))).thenReturn(createInputDeviceWithVibrator(2));
-
-        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
-        assertTrue(mInputDeviceDelegate.isAvailable());
-
-        updateInputDevices(new int[]{1});
-        assertFalse(mInputDeviceDelegate.isAvailable());
-    }
-
-    @Test
-    public void updateInputDeviceVibrators_usesFlagToLoadDeviceList() throws Exception {
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1, 2});
-        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(createInputDeviceWithVibrator(1));
-        when(mIInputManagerMock.getVibratorIds(eq(2))).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getInputDevice(eq(2))).thenReturn(createInputDeviceWithVibrator(2));
-
-        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
-        assertTrue(mInputDeviceDelegate.isAvailable());
-
-        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ false);
-        assertFalse(mInputDeviceDelegate.isAvailable());
-    }
-
-    @Test
-    public void updateInputDeviceVibrators_withDeviceWithoutVibrator_deviceIsIgnored()
-            throws Exception {
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[0]);
-        when(mIInputManagerMock.getInputDevice(eq(1)))
-                .thenReturn(createInputDeviceWithoutVibrator(1));
-        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
-        assertFalse(mInputDeviceDelegate.isAvailable());
-    }
-
-    @Test
-    public void vibrateIfAvailable_withNoInputDevice_returnsFalse() {
-        assertFalse(mInputDeviceDelegate.isAvailable());
-        assertFalse(mInputDeviceDelegate.vibrateIfAvailable(
-                new Vibration.CallerInfo(VIBRATION_ATTRIBUTES, UID, -1, PACKAGE_NAME, REASON),
-                SYNCED_EFFECT));
-    }
-
-    @Test
-    public void vibrateIfAvailable_withInputDevices_returnsTrueAndVibratesAllDevices()
-            throws Exception {
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1, 2});
-        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(createInputDeviceWithVibrator(1));
-        when(mIInputManagerMock.getVibratorIds(eq(2))).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getInputDevice(eq(2))).thenReturn(createInputDeviceWithVibrator(2));
-        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
-
-        assertTrue(mInputDeviceDelegate.vibrateIfAvailable(
-                new Vibration.CallerInfo(VIBRATION_ATTRIBUTES, UID, -1, PACKAGE_NAME, REASON),
-                SYNCED_EFFECT));
-        verify(mIInputManagerMock).vibrateCombined(eq(1), same(SYNCED_EFFECT), any());
-        verify(mIInputManagerMock).vibrateCombined(eq(2), same(SYNCED_EFFECT), any());
-    }
-
-    @Test
-    public void cancelVibrateIfAvailable_withNoInputDevice_returnsFalse() throws Exception {
-        assertFalse(mInputDeviceDelegate.isAvailable());
-        assertFalse(mInputDeviceDelegate.cancelVibrateIfAvailable());
-        verify(mIInputManagerMock, never()).cancelVibrate(anyInt(), any());
-    }
-
-    @Test
-    public void cancelVibrateIfAvailable_withInputDevices_returnsTrueAndStopsAllDevices()
-            throws Exception {
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1, 2});
-        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(createInputDeviceWithVibrator(1));
-        when(mIInputManagerMock.getVibratorIds(eq(2))).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getInputDevice(eq(2))).thenReturn(createInputDeviceWithVibrator(2));
-        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
-
-        assertTrue(mInputDeviceDelegate.isAvailable());
-        assertTrue(mInputDeviceDelegate.cancelVibrateIfAvailable());
-        verify(mIInputManagerMock).cancelVibrate(eq(1), any());
-        verify(mIInputManagerMock).cancelVibrate(eq(2), any());
-    }
-
-    private void updateInputDevices(int[] deviceIds) throws Exception {
-        int[] deviceIdsAndGenerations = new int[deviceIds.length * 2];
-        for (int i = 0; i < deviceIdsAndGenerations.length; i += 2) {
-            deviceIdsAndGenerations[i] = deviceIds[i / 2];
-            deviceIdsAndGenerations[i + 1] = 2; // update by increasing it's generation to 2.
-        }
-        // Force initialization of mIInputDevicesChangedListener, if it still haven't
-        InputManagerGlobal.getInstance().getInputDeviceIds();
-        mIInputDevicesChangedListener.onInputDevicesChanged(deviceIdsAndGenerations);
-        // Makes sure all callbacks from InputDeviceDelegate are executed.
-        mTestLooper.dispatchAll();
-    }
-
-    private InputDevice createInputDeviceWithVibrator(int id) {
-        return createInputDevice(id, /* hasVibrator= */ true);
-    }
-
-    private InputDevice createInputDeviceWithoutVibrator(int id) {
-        return createInputDevice(id, /* hasVibrator= */ false);
-    }
-
-    private InputDevice createInputDevice(int id, boolean hasVibrator) {
-        return new InputDevice.Builder()
-                .setId(id)
-                .setName("name")
-                .setDescriptor("descriptor")
-                .setHasVibrator(hasVibrator)
-                .build();
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/OWNERS b/services/tests/servicestests/src/com/android/server/vibrator/OWNERS
deleted file mode 100644
index cc63ceb..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-include /services/core/java/com/android/server/vibrator/OWNERS
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/RampDownAdapterTest.java b/services/tests/servicestests/src/com/android/server/vibrator/RampDownAdapterTest.java
deleted file mode 100644
index a3edf23..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/RampDownAdapterTest.java
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.vibrator;
-
-import static org.junit.Assert.assertEquals;
-
-import android.os.VibrationEffect;
-import android.os.VibratorInfo;
-import android.os.vibrator.PrebakedSegment;
-import android.os.vibrator.PrimitiveSegment;
-import android.os.vibrator.RampSegment;
-import android.os.vibrator.StepSegment;
-import android.os.vibrator.VibrationEffectSegment;
-import android.platform.test.annotations.Presubmit;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Tests for {@link RampDownAdapter}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:RampDownAdapterTest
- */
-@Presubmit
-public class RampDownAdapterTest {
-    private static final int TEST_RAMP_DOWN_DURATION = 20;
-    private static final int TEST_STEP_DURATION = 5;
-    private static final VibratorInfo TEST_VIBRATOR_INFO = new VibratorInfo.Builder(0).build();
-
-    private RampDownAdapter mAdapter;
-
-    @Before
-    public void setUp() throws Exception {
-        mAdapter = new RampDownAdapter(TEST_RAMP_DOWN_DURATION, TEST_STEP_DURATION);
-    }
-
-    @Test
-    public void testPrebakedAndPrimitiveSegments_keepsListUnchanged() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new PrebakedSegment(
-                        VibrationEffect.EFFECT_CLICK, false, VibrationEffect.EFFECT_STRENGTH_LIGHT),
-                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10)));
-        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
-
-        assertEquals(-1, mAdapter.apply(segments, -1, TEST_VIBRATOR_INFO));
-        assertEquals(1, mAdapter.apply(segments, 1, TEST_VIBRATOR_INFO));
-
-        assertEquals(originalSegments, segments);
-    }
-
-    @Test
-    public void testRampAndStepSegments_withNoOffSegment_keepsListUnchanged() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 100),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
-                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 50, /* duration= */ 20)));
-        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
-
-        assertEquals(-1, mAdapter.apply(segments, -1, TEST_VIBRATOR_INFO));
-        assertEquals(0, mAdapter.apply(segments, 0, TEST_VIBRATOR_INFO));
-
-        assertEquals(originalSegments, segments);
-    }
-
-    @Test
-    public void testRampAndStepSegments_withNoRampDownDuration_keepsOriginalSteps() {
-        mAdapter = new RampDownAdapter(/* rampDownDuration= */ 0, TEST_STEP_DURATION);
-
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 100),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
-                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 50, /* duration= */ 20),
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0,
-                        /* startFrequencyHz= */ 0, /* endFrequencyHz= */ 0, /* duration= */ 50)));
-        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
-
-        assertEquals(-1, mAdapter.apply(segments, -1, TEST_VIBRATOR_INFO));
-        assertEquals(2, mAdapter.apply(segments, 2, TEST_VIBRATOR_INFO));
-        assertEquals(originalSegments, segments);
-    }
-
-    @Test
-    public void testStepSegments_withShortZeroSegment_replaceWithStepsDown() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 10)));
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 5));
-
-        assertEquals(-1, mAdapter.apply(segments, -1, TEST_VIBRATOR_INFO));
-        assertEquals(expectedSegments, segments);
-    }
-
-    @Test
-    public void testStepSegments_withLongZeroSegment_replaceWithStepsDownWithRemainingOffSegment() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0,
-                        /* startFrequencyHz= */ 0, /* endFrequencyHz= */ 0, /* duration= */ 50),
-                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 0, /* duration= */ 100)));
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.75f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0.25f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 35),
-                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 0, /* duration= */ 100));
-
-        assertEquals(-1, mAdapter.apply(segments, -1, TEST_VIBRATOR_INFO));
-        assertEquals(expectedSegments, segments);
-    }
-
-    @Test
-    public void testStepSegments_withZeroSegmentBeforeRepeat_fixesRepeat() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 50),
-                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 0, /* duration= */ 100)));
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.75f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0.25f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 35),
-                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 0, /* duration= */ 100));
-
-        // Repeat index fixed after intermediate steps added
-        assertEquals(5, mAdapter.apply(segments, 2, TEST_VIBRATOR_INFO));
-        assertEquals(expectedSegments, segments);
-    }
-
-    @Test
-    public void testStepSegments_withZeroSegmentAfterRepeat_preservesRepeat() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 0, /* duration= */ 100)));
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 0, /* duration= */ 100));
-
-        assertEquals(3, mAdapter.apply(segments, 2, TEST_VIBRATOR_INFO));
-        assertEquals(expectedSegments, segments);
-    }
-
-    @Test
-    public void testStepSegments_withZeroSegmentAtRepeat_fixesRepeatAndAppendOriginalToListEnd() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 50),
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 100)));
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.75f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0.25f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 35),
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 100),
-                // Original zero segment appended to the end of new looping vibration,
-                // then converted to ramp down as well.
-                new StepSegment(/* amplitude= */ 0.75f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0.25f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 35));
-
-        // Repeat index fixed after intermediate steps added
-        assertEquals(5, mAdapter.apply(segments, 1, TEST_VIBRATOR_INFO));
-        assertEquals(expectedSegments, segments);
-    }
-
-    @Test
-    public void testStepSegments_withRepeatToNonZeroSegment_keepsOriginalSteps() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 100)));
-        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
-
-        assertEquals(0, mAdapter.apply(segments, 0, TEST_VIBRATOR_INFO));
-
-        assertEquals(originalSegments, segments);
-    }
-
-    @Test
-    public void testStepSegments_withRepeatToShortZeroSegment_skipAndAppendRampDown() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0,
-                        /* startfrequencyHz= */ 0, /* endfrequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 30)));
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0,
-                        /* startfrequencyHz= */ 0, /* endfrequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 30),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 5));
-
-        // Shift repeat index to the right to use append instead of zero segment.
-        assertEquals(1, mAdapter.apply(segments, 0, TEST_VIBRATOR_INFO));
-
-        assertEquals(expectedSegments, segments);
-    }
-
-    @Test
-    public void testStepSegments_withRepeatToLongZeroSegment_splitAndAppendRampDown() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 120),
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 30)));
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                // Split long zero segment to skip part of it.
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 20),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 100),
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 30),
-                new StepSegment(/* amplitude= */ 0.75f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0.25f, /* frequencyHz= */ 0, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 5));
-
-        // Shift repeat index to the right to use append with part of the zero segment.
-        assertEquals(1, mAdapter.apply(segments, 0, TEST_VIBRATOR_INFO));
-
-        assertEquals(expectedSegments, segments);
-    }
-
-    @Test
-    public void testRampSegments_withShortZeroSegment_replaceWithRampDown() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude*/ 0.5f,
-                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0,
-                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 20),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 200, /* endFrequencyHz= */ 200,
-                        /* duration= */ 30)));
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude*/ 0.5f,
-                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0,
-                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 20),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 200, /* endFrequencyHz= */ 200,
-                        /* duration= */ 30));
-
-        assertEquals(2, mAdapter.apply(segments, 2, TEST_VIBRATOR_INFO));
-
-        assertEquals(expectedSegments, segments);
-    }
-
-    @Test
-    public void testRampSegments_withLongZeroSegment_splitAndAddRampDown() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.5f,
-                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 150, /* duration= */ 150),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 200, /* endFrequencyHz= */ 200,
-                        /* duration= */ 30)));
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude*/ 0.5f,
-                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0,
-                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 20),
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0,
-                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100,
-                        /* duration= */ 130),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 200, /* endFrequencyHz= */ 200,
-                        /* duration= */ 30));
-
-        // Repeat index fixed after intermediate steps added
-        assertEquals(3, mAdapter.apply(segments, 2, TEST_VIBRATOR_INFO));
-
-        assertEquals(expectedSegments, segments);
-    }
-
-    @Test
-    public void testRampSegments_withRepeatToNonZeroSegment_keepsOriginalSteps() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude*/ 0.5f,
-                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 200, /* endFrequencyHz= */ 200,
-                        /* duration= */ 30)));
-        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
-
-        assertEquals(0, mAdapter.apply(segments, 0, TEST_VIBRATOR_INFO));
-
-        assertEquals(originalSegments, segments);
-    }
-
-    @Test
-    public void testRampSegments_withRepeatToShortZeroSegment_skipAndAppendRampDown() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 200, /* duration= */ 20),
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude*/ 1,
-                        /* startFrequencyHz= */ 40, /* endFrequencyHz= */ 80, /* duration= */ 20)));
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 200, /* duration= */ 20),
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 40, /* endFrequencyHz= */ 80, /* duration= */ 20),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 0,
-                        /* startFrequencyHz= */ 80, /* endFrequencyHz= */ 80, /* duration= */ 20));
-
-        // Shift repeat index to the right to use append instead of zero segment.
-        assertEquals(1, mAdapter.apply(segments, 0, TEST_VIBRATOR_INFO));
-
-        assertEquals(expectedSegments, segments);
-    }
-
-    @Test
-    public void testRampSegments_withRepeatToLongZeroSegment_splitAndAppendRampDown() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude*/ 0,
-                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 1, /* duration= */ 70),
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 1, /* duration= */ 30)));
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                // Split long zero segment to skip part of it.
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude*/ 0,
-                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 1, /* duration= */ 20),
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude*/ 0,
-                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 1, /* duration= */ 50),
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 1, /* duration= */ 30),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 0,
-                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 1, /* duration= */ 20));
-
-        // Shift repeat index to the right to use append with part of the zero segment.
-        assertEquals(1, mAdapter.apply(segments, 0, TEST_VIBRATOR_INFO));
-
-        assertEquals(expectedSegments, segments);
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/RampToStepAdapterTest.java b/services/tests/servicestests/src/com/android/server/vibrator/RampToStepAdapterTest.java
deleted file mode 100644
index a9f37f3..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/RampToStepAdapterTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.vibrator;
-
-import static org.junit.Assert.assertEquals;
-
-import android.hardware.vibrator.IVibrator;
-import android.os.VibrationEffect;
-import android.os.VibratorInfo;
-import android.os.vibrator.PrebakedSegment;
-import android.os.vibrator.PrimitiveSegment;
-import android.os.vibrator.RampSegment;
-import android.os.vibrator.StepSegment;
-import android.os.vibrator.VibrationEffectSegment;
-import android.platform.test.annotations.Presubmit;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.IntStream;
-
-/**
- * Tests for {@link RampToStepAdapter}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:RampToStepAdapterTest
- */
-@Presubmit
-public class RampToStepAdapterTest {
-    private static final int TEST_STEP_DURATION = 5;
-    private static final float[] TEST_AMPLITUDE_MAP = new float[]{
-            /* 50Hz= */ 0.1f, 0.2f, 0.4f, 0.8f, /* 150Hz= */ 1f, 0.9f, /* 200Hz= */ 0.8f};
-    private static final VibratorInfo.FrequencyProfile TEST_FREQUENCY_PROFILE =
-            new VibratorInfo.FrequencyProfile(
-                    /* resonantFrequencyHz= */ 150f, /* minFrequencyHz= */ 50f,
-                    /* frequencyResolutionHz= */ 25f, TEST_AMPLITUDE_MAP);
-
-    private RampToStepAdapter mAdapter;
-
-    @Before
-    public void setUp() throws Exception {
-        mAdapter = new RampToStepAdapter(TEST_STEP_DURATION);
-    }
-
-    @Test
-    public void testStepAndPrebakedAndPrimitiveSegments_keepsListUnchanged() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 1, /* duration= */ 10),
-                new PrebakedSegment(
-                        VibrationEffect.EFFECT_CLICK, false, VibrationEffect.EFFECT_STRENGTH_LIGHT),
-                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10)));
-        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
-
-        assertEquals(-1, mAdapter.apply(segments, -1, createVibratorInfo()));
-        assertEquals(1, mAdapter.apply(segments, 1, createVibratorInfo()));
-
-        assertEquals(originalSegments, segments);
-    }
-
-    @Test
-    public void testRampSegments_withPwleCapability_keepsListUnchanged() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 100),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
-                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 1, /* duration= */ 20)));
-        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
-
-        VibratorInfo vibratorInfo = createVibratorInfo(IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
-        assertEquals(-1, mAdapter.apply(segments, -1, vibratorInfo));
-        assertEquals(0, mAdapter.apply(segments, 0, vibratorInfo));
-
-        assertEquals(originalSegments, segments);
-    }
-
-    @Test
-    public void testRampSegments_withoutPwleCapability_convertsRampsToSteps() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 1, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 10, /* duration= */ 100),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 0.2f,
-                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 0, /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
-                        /* startFrequencyHz= */ 30, /* endFrequencyHz= */ 60, /* duration= */ 11),
-                new RampSegment(/* startAmplitude= */ 0.65f, /* endAmplitude= */ 0.65f,
-                        /* startFrequencyHz= */ 0, /* endFrequencyHz= */ 1, /* duration= */ 200)));
-
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 1, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 10, /* duration= */ 100),
-                // 10ms ramp becomes 2 steps
-                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 10, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0.2f, /* frequencyHz= */ 150, /* duration= */ 5),
-                // 11ms ramp becomes 3 steps
-                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 30, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0.6f, /* frequencyHz= */ 40, /* duration= */ 5),
-                new StepSegment(/* amplitude= */ 0.2f, /* frequencyHz= */ 60, /* duration= */ 1),
-                // 200ms ramp with same amplitude becomes a single step
-                new StepSegment(/* amplitude= */ 0.65f, /* frequencyHz= */ 150,
-                        /* duration= */ 200));
-
-        // Repeat index fixed after intermediate steps added
-        assertEquals(4, mAdapter.apply(segments, 3, createVibratorInfo()));
-
-        assertEquals(expectedSegments, segments);
-    }
-
-    private static VibratorInfo createVibratorInfo(int... capabilities) {
-        return new VibratorInfo.Builder(0)
-                .setCapabilities(IntStream.of(capabilities).reduce((a, b) -> a | b).orElse(0))
-                .setFrequencyProfile(TEST_FREQUENCY_PROFILE)
-                .build();
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/StepToRampAdapterTest.java b/services/tests/servicestests/src/com/android/server/vibrator/StepToRampAdapterTest.java
deleted file mode 100644
index 54627c4..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/StepToRampAdapterTest.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.vibrator;
-
-import static org.junit.Assert.assertEquals;
-
-import android.hardware.vibrator.IVibrator;
-import android.os.VibrationEffect;
-import android.os.VibratorInfo;
-import android.os.vibrator.PrebakedSegment;
-import android.os.vibrator.PrimitiveSegment;
-import android.os.vibrator.RampSegment;
-import android.os.vibrator.StepSegment;
-import android.os.vibrator.VibrationEffectSegment;
-import android.platform.test.annotations.Presubmit;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.IntStream;
-
-/**
- * Tests for {@link StepToRampAdapter}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:StepToRampAdapterTest
- */
-@Presubmit
-public class StepToRampAdapterTest {
-    private static final float[] TEST_AMPLITUDE_MAP = new float[]{
-            /* 50Hz= */ 0.1f, 0.2f, 0.4f, 0.8f, /* 150Hz= */ 1f, 0.9f, /* 200Hz= */ 0.8f};
-    private static final VibratorInfo.FrequencyProfile TEST_FREQUENCY_PROFILE =
-            new VibratorInfo.FrequencyProfile(
-                    /* resonantFrequencyHz= */ 150f, /* minFrequencyHz= */ 50f,
-                    /* frequencyResolutionHz= */ 25f, TEST_AMPLITUDE_MAP);
-
-    private StepToRampAdapter mAdapter;
-
-    @Before
-    public void setUp() throws Exception {
-        mAdapter = new StepToRampAdapter();
-    }
-
-    @Test
-    public void testRampAndPrebakedAndPrimitiveSegments_returnsOriginalSegments() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 0.2f,
-                        /* startFrequencyHz= */ 40f, /* endFrequencyHz= */ 20f, /* duration= */ 10),
-                new PrebakedSegment(
-                        VibrationEffect.EFFECT_CLICK, false, VibrationEffect.EFFECT_STRENGTH_LIGHT),
-                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10)));
-        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
-
-        assertEquals(-1, mAdapter.apply(segments, -1, createVibratorInfo()));
-        assertEquals(1, mAdapter.apply(segments, 1, createVibratorInfo()));
-
-        assertEquals(originalSegments, segments);
-    }
-
-    @Test
-    public void testRampSegments_withPwleDurationLimit_splitsLongRamps() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude*/ 0.5f,
-                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 10, /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 0, /* endFrequencyHz= */ 50, /* duration= */ 25),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude*/ 1,
-                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 20, /* duration= */ 5)));
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude*/ 0.5f,
-                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 10, /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0.32f,
-                        /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 118f, /* duration= */ 8),
-                new RampSegment(/* startAmplitude= */ 0.32f, /* endAmplitude= */ 0.64f,
-                        /* startFrequencyHz= */ 118f, /* endFrequencyHz= */ 86f,
-                        /* duration= */ 8),
-                new RampSegment(/* startAmplitude= */ 0.64f, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 86f, /* endFrequencyHz= */ 50f, /* duration= */ 9),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude*/ 1,
-                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 20, /* duration= */ 5));
-
-        VibratorInfo vibratorInfo = new VibratorInfo.Builder(0)
-                .setCapabilities(IVibrator.CAP_COMPOSE_PWLE_EFFECTS)
-                .setPwlePrimitiveDurationMax(10)
-                .setFrequencyProfile(TEST_FREQUENCY_PROFILE)
-                .build();
-
-        // Update repeat index to skip the ramp splits.
-        assertEquals(4, mAdapter.apply(segments, 2, vibratorInfo));
-        assertEquals(expectedSegments, segments);
-    }
-
-    @Test
-    public void testStepAndRampSegments_withoutPwleCapability_keepsListUnchanged() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 1, /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
-                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 50, /* duration= */ 20)));
-        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
-
-        assertEquals(-1, mAdapter.apply(segments, -1, createVibratorInfo()));
-        assertEquals(0, mAdapter.apply(segments, 0, createVibratorInfo()));
-
-        assertEquals(originalSegments, segments);
-    }
-
-    @Test
-    public void testStepAndRampSegments_withPwleCapabilityAndNoFrequency_keepsOriginalSteps() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 100),
-                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 40, /* endFrequencyHz= */ 200, /* duration= */ 50),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
-                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 1, /* duration= */ 20)));
-        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
-
-        VibratorInfo vibratorInfo = createVibratorInfo(IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
-        assertEquals(-1, mAdapter.apply(segments, -1, vibratorInfo));
-        assertEquals(3, mAdapter.apply(segments, 3, vibratorInfo));
-
-        assertEquals(originalSegments, segments);
-    }
-
-    @Test
-    public void testStepAndRampSegments_withPwleCapabilityAndStepNextToRamp_convertsStepsToRamps() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 200, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 150, /* duration= */ 60),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 300, /* duration= */ 50),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
-                        /* startFrequencyHz= */ 1000, /* endFrequencyHz= */ 1, /* duration= */ 20),
-                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 10, /* duration= */ 60)));
-
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude*/ 0,
-                        /* startFrequencyHz= */ 200, /* endFrequencyHz= */ 200, /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.5f,
-                        /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 150, /* duration= */ 60),
-                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 300, /* duration= */ 50),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
-                        /* startFrequencyHz= */ 1000, /* endFrequencyHz= */ 1, /* duration= */ 20),
-                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.8f,
-                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 10, /* duration= */ 60));
-
-        VibratorInfo vibratorInfo = createVibratorInfo(IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
-        assertEquals(-1, mAdapter.apply(segments, -1, vibratorInfo));
-        assertEquals(2, mAdapter.apply(segments, 2, vibratorInfo));
-
-        assertEquals(expectedSegments, segments);
-    }
-
-    @Test
-    public void testStepSegments_withPwleCapabilityAndFrequency_convertsStepsToRamps() {
-        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
-                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 100, /* duration= */ 10),
-                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 6)));
-        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude*/ 0,
-                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 10),
-                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.5f,
-                        /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 150, /* duration= */ 6));
-
-        VibratorInfo vibratorInfo = createVibratorInfo(IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
-        assertEquals(-1, mAdapter.apply(segments, -1, vibratorInfo));
-        assertEquals(0, mAdapter.apply(segments, 0, vibratorInfo));
-
-        assertEquals(expectedSegments, segments);
-    }
-
-    private static VibratorInfo createVibratorInfo(int... capabilities) {
-        return new VibratorInfo.Builder(0)
-                .setCapabilities(IntStream.of(capabilities).reduce((a, b) -> a | b).orElse(0))
-                .setFrequencyProfile(TEST_FREQUENCY_PROFILE)
-                .build();
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibrationScalerTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibrationScalerTest.java
deleted file mode 100644
index 64950aa..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/VibrationScalerTest.java
+++ /dev/null
@@ -1,282 +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.server.vibrator;
-
-import static android.os.VibrationAttributes.USAGE_NOTIFICATION;
-import static android.os.VibrationAttributes.USAGE_RINGTONE;
-import static android.os.VibrationAttributes.USAGE_TOUCH;
-import static android.os.Vibrator.VIBRATION_INTENSITY_HIGH;
-import static android.os.Vibrator.VIBRATION_INTENSITY_LOW;
-import static android.os.Vibrator.VIBRATION_INTENSITY_MEDIUM;
-import static android.os.Vibrator.VIBRATION_INTENSITY_OFF;
-
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertTrue;
-
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.content.ComponentName;
-import android.content.ContentResolver;
-import android.content.ContextWrapper;
-import android.content.pm.PackageManagerInternal;
-import android.os.Handler;
-import android.os.IExternalVibratorService;
-import android.os.PowerManagerInternal;
-import android.os.UserHandle;
-import android.os.VibrationAttributes;
-import android.os.VibrationEffect;
-import android.os.Vibrator;
-import android.os.test.TestLooper;
-import android.os.vibrator.PrebakedSegment;
-import android.os.vibrator.PrimitiveSegment;
-import android.os.vibrator.StepSegment;
-import android.os.vibrator.VibrationConfig;
-import android.os.vibrator.VibrationEffectSegment;
-import android.platform.test.annotations.Presubmit;
-import android.provider.Settings;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.internal.util.test.FakeSettingsProvider;
-import com.android.internal.util.test.FakeSettingsProviderRule;
-import com.android.server.LocalServices;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
-
-/**
- * Tests for {@link VibrationScaler}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:VibrationScalerTest
- */
-@Presubmit
-public class VibrationScalerTest {
-
-    @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
-    @Rule public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule();
-
-    @Mock private PowerManagerInternal mPowerManagerInternalMock;
-    @Mock private PackageManagerInternal mPackageManagerInternalMock;
-    @Mock private VibrationConfig mVibrationConfigMock;
-
-    private TestLooper mTestLooper;
-    private ContextWrapper mContextSpy;
-    private VibrationSettings mVibrationSettings;
-    private VibrationScaler mVibrationScaler;
-
-    @Before
-    public void setUp() throws Exception {
-        mTestLooper = new TestLooper();
-        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
-
-        ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy);
-        when(mContextSpy.getContentResolver()).thenReturn(contentResolver);
-        when(mPackageManagerInternalMock.getSystemUiServiceComponent())
-                .thenReturn(new ComponentName("", ""));
-
-        LocalServices.removeServiceForTest(PackageManagerInternal.class);
-        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternalMock);
-        LocalServices.removeServiceForTest(PowerManagerInternal.class);
-        LocalServices.addService(PowerManagerInternal.class, mPowerManagerInternalMock);
-
-        Settings.System.putInt(contentResolver, Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);
-        Settings.System.putInt(contentResolver, Settings.System.VIBRATE_WHEN_RINGING, 1);
-
-        mVibrationSettings = new VibrationSettings(
-                mContextSpy, new Handler(mTestLooper.getLooper()), mVibrationConfigMock);
-        mVibrationScaler = new VibrationScaler(mContextSpy, mVibrationSettings);
-
-        mVibrationSettings.onSystemReady();
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        LocalServices.removeServiceForTest(PowerManagerInternal.class);
-    }
-
-    @Test
-    public void testGetExternalVibrationScale() {
-        setDefaultIntensity(USAGE_TOUCH, Vibrator.VIBRATION_INTENSITY_LOW);
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_HIGH);
-        assertEquals(IExternalVibratorService.SCALE_VERY_HIGH,
-                mVibrationScaler.getExternalVibrationScale(USAGE_TOUCH));
-
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_MEDIUM);
-        assertEquals(IExternalVibratorService.SCALE_HIGH,
-                mVibrationScaler.getExternalVibrationScale(USAGE_TOUCH));
-
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_LOW);
-        assertEquals(IExternalVibratorService.SCALE_NONE,
-                mVibrationScaler.getExternalVibrationScale(USAGE_TOUCH));
-
-        setDefaultIntensity(USAGE_TOUCH, VIBRATION_INTENSITY_MEDIUM);
-        assertEquals(IExternalVibratorService.SCALE_LOW,
-                mVibrationScaler.getExternalVibrationScale(USAGE_TOUCH));
-
-        setDefaultIntensity(USAGE_TOUCH, VIBRATION_INTENSITY_HIGH);
-        assertEquals(IExternalVibratorService.SCALE_VERY_LOW,
-                mVibrationScaler.getExternalVibrationScale(USAGE_TOUCH));
-
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
-        // Vibration setting being bypassed will use default setting and not scale.
-        assertEquals(IExternalVibratorService.SCALE_NONE,
-                mVibrationScaler.getExternalVibrationScale(USAGE_TOUCH));
-    }
-
-    @Test
-    public void scale_withPrebakedSegment_setsEffectStrengthBasedOnSettings() {
-        setDefaultIntensity(USAGE_NOTIFICATION, VIBRATION_INTENSITY_MEDIUM);
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_HIGH);
-        PrebakedSegment effect = new PrebakedSegment(VibrationEffect.EFFECT_CLICK,
-                /* shouldFallback= */ false, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-
-        PrebakedSegment scaled = mVibrationScaler.scale(effect, USAGE_NOTIFICATION);
-        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_STRONG);
-
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
-                VIBRATION_INTENSITY_MEDIUM);
-        scaled = mVibrationScaler.scale(effect, USAGE_NOTIFICATION);
-        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
-        scaled = mVibrationScaler.scale(effect, USAGE_NOTIFICATION);
-        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_LIGHT);
-
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
-        scaled = mVibrationScaler.scale(effect, USAGE_NOTIFICATION);
-        // Vibration setting being bypassed will use default setting.
-        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-    }
-
-    @Test
-    public void scale_withPrebakedEffect_setsEffectStrengthBasedOnSettings() {
-        setDefaultIntensity(USAGE_NOTIFICATION, VIBRATION_INTENSITY_LOW);
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_HIGH);
-        VibrationEffect effect = VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK);
-
-        PrebakedSegment scaled =
-                getFirstSegment(mVibrationScaler.scale(effect, USAGE_NOTIFICATION));
-        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_STRONG);
-
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
-                VIBRATION_INTENSITY_MEDIUM);
-        scaled = getFirstSegment(mVibrationScaler.scale(effect, USAGE_NOTIFICATION));
-        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
-        scaled = getFirstSegment(mVibrationScaler.scale(effect, USAGE_NOTIFICATION));
-        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_LIGHT);
-
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
-        scaled = getFirstSegment(mVibrationScaler.scale(effect, USAGE_NOTIFICATION));
-        // Vibration setting being bypassed will use default setting.
-        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_LIGHT);
-    }
-
-    @Test
-    public void scale_withOneShotAndWaveform_resolvesAmplitude() {
-        // No scale, default amplitude still resolved
-        setDefaultIntensity(USAGE_RINGTONE, VIBRATION_INTENSITY_LOW);
-        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
-
-        StepSegment resolved = getFirstSegment(mVibrationScaler.scale(
-                VibrationEffect.createOneShot(10, VibrationEffect.DEFAULT_AMPLITUDE),
-                USAGE_RINGTONE));
-        assertTrue(resolved.getAmplitude() > 0);
-
-        resolved = getFirstSegment(mVibrationScaler.scale(
-                VibrationEffect.createWaveform(new long[]{10},
-                        new int[]{VibrationEffect.DEFAULT_AMPLITUDE}, -1),
-                USAGE_RINGTONE));
-        assertTrue(resolved.getAmplitude() > 0);
-    }
-
-    @Test
-    public void scale_withOneShotAndWaveform_scalesAmplitude() {
-        setDefaultIntensity(USAGE_RINGTONE, VIBRATION_INTENSITY_LOW);
-        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_HIGH);
-        setDefaultIntensity(USAGE_NOTIFICATION, VIBRATION_INTENSITY_HIGH);
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
-        setDefaultIntensity(USAGE_TOUCH, VIBRATION_INTENSITY_MEDIUM);
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_MEDIUM);
-
-        StepSegment scaled = getFirstSegment(mVibrationScaler.scale(
-                VibrationEffect.createOneShot(128, 128), USAGE_RINGTONE));
-        // Ringtone scales up.
-        assertTrue(scaled.getAmplitude() > 0.5);
-
-        scaled = getFirstSegment(mVibrationScaler.scale(
-                VibrationEffect.createWaveform(new long[]{128}, new int[]{128}, -1),
-                USAGE_NOTIFICATION));
-        // Notification scales down.
-        assertTrue(scaled.getAmplitude() < 0.5);
-
-        scaled = getFirstSegment(mVibrationScaler.scale(VibrationEffect.createOneShot(128, 128),
-                USAGE_TOUCH));
-        // Haptic feedback does not scale.
-        assertEquals(128f / 255, scaled.getAmplitude(), 1e-5);
-    }
-
-    @Test
-    public void scale_withComposed_scalesPrimitives() {
-        setDefaultIntensity(USAGE_RINGTONE, VIBRATION_INTENSITY_LOW);
-        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_HIGH);
-        setDefaultIntensity(USAGE_NOTIFICATION, VIBRATION_INTENSITY_HIGH);
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
-        setDefaultIntensity(USAGE_TOUCH, VIBRATION_INTENSITY_MEDIUM);
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_MEDIUM);
-
-        VibrationEffect composed = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 0.5f).compose();
-
-        PrimitiveSegment scaled = getFirstSegment(mVibrationScaler.scale(composed, USAGE_RINGTONE));
-        // Ringtone scales up.
-        assertTrue(scaled.getScale() > 0.5f);
-
-        scaled = getFirstSegment(mVibrationScaler.scale(composed, USAGE_NOTIFICATION));
-        // Notification scales down.
-        assertTrue(scaled.getScale() < 0.5f);
-
-        scaled = getFirstSegment(mVibrationScaler.scale(composed, USAGE_TOUCH));
-        // Haptic feedback does not scale.
-        assertEquals(0.5, scaled.getScale(), 1e-5);
-    }
-
-    private void setDefaultIntensity(@VibrationAttributes.Usage int usage,
-            @Vibrator.VibrationIntensity int intensity) {
-        when(mVibrationConfigMock.getDefaultVibrationIntensity(eq(usage))).thenReturn(intensity);
-    }
-
-    private <T extends VibrationEffectSegment> T getFirstSegment(VibrationEffect.Composed effect) {
-        return (T) effect.getSegments().get(0);
-    }
-
-    private void setUserSetting(String settingName, int value) {
-        Settings.System.putIntForUser(
-                mContextSpy.getContentResolver(), settingName, value, UserHandle.USER_CURRENT);
-        // FakeSettingsProvider don't support testing triggering ContentObserver yet.
-        mVibrationSettings.mSettingObserver.onChange(false);
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibrationSettingsTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibrationSettingsTest.java
deleted file mode 100644
index 2efd9fc..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/VibrationSettingsTest.java
+++ /dev/null
@@ -1,851 +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.server.vibrator;
-
-import static android.os.VibrationAttributes.USAGE_ACCESSIBILITY;
-import static android.os.VibrationAttributes.USAGE_ALARM;
-import static android.os.VibrationAttributes.USAGE_COMMUNICATION_REQUEST;
-import static android.os.VibrationAttributes.USAGE_HARDWARE_FEEDBACK;
-import static android.os.VibrationAttributes.USAGE_MEDIA;
-import static android.os.VibrationAttributes.USAGE_NOTIFICATION;
-import static android.os.VibrationAttributes.USAGE_PHYSICAL_EMULATION;
-import static android.os.VibrationAttributes.USAGE_RINGTONE;
-import static android.os.VibrationAttributes.USAGE_TOUCH;
-import static android.os.VibrationAttributes.USAGE_UNKNOWN;
-import static android.os.Vibrator.VIBRATION_INTENSITY_HIGH;
-import static android.os.Vibrator.VIBRATION_INTENSITY_LOW;
-import static android.os.Vibrator.VIBRATION_INTENSITY_MEDIUM;
-import static android.os.Vibrator.VIBRATION_INTENSITY_OFF;
-
-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.eq;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
-
-import android.app.ActivityManager;
-import android.content.ComponentName;
-import android.content.ContentResolver;
-import android.content.ContextWrapper;
-import android.content.Intent;
-import android.content.pm.PackageManagerInternal;
-import android.media.AudioManager;
-import android.os.Handler;
-import android.os.PowerManager;
-import android.os.PowerManagerInternal;
-import android.os.PowerSaveState;
-import android.os.Process;
-import android.os.UserHandle;
-import android.os.VibrationAttributes;
-import android.os.VibrationEffect;
-import android.os.Vibrator;
-import android.os.test.TestLooper;
-import android.os.vibrator.VibrationConfig;
-import android.platform.test.annotations.Presubmit;
-import android.provider.Settings;
-import android.util.ArraySet;
-import android.view.Display;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.internal.util.test.FakeSettingsProvider;
-import com.android.internal.util.test.FakeSettingsProviderRule;
-import com.android.server.LocalServices;
-import com.android.server.companion.virtual.VirtualDeviceManagerInternal;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Tests for {@link VibrationSettings}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:VibrationSettingsTest
- */
-@Presubmit
-public class VibrationSettingsTest {
-
-    private static final int UID = 1;
-    private static final int VIRTUAL_DISPLAY_ID = 1;
-    private static final String SYSUI_PACKAGE_NAME = "sysui";
-    private static final PowerSaveState NORMAL_POWER_STATE = new PowerSaveState.Builder().build();
-    private static final PowerSaveState LOW_POWER_STATE = new PowerSaveState.Builder()
-            .setBatterySaverEnabled(true).build();
-
-    private static final int[] ALL_USAGES = new int[] {
-            USAGE_UNKNOWN,
-            USAGE_ACCESSIBILITY,
-            USAGE_ALARM,
-            USAGE_COMMUNICATION_REQUEST,
-            USAGE_HARDWARE_FEEDBACK,
-            USAGE_MEDIA,
-            USAGE_NOTIFICATION,
-            USAGE_PHYSICAL_EMULATION,
-            USAGE_RINGTONE,
-            USAGE_TOUCH,
-    };
-
-    @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
-    @Rule public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule();
-
-    @Mock private VibrationSettings.OnVibratorSettingsChanged mListenerMock;
-    @Mock
-    private PowerManagerInternal mPowerManagerInternalMock;
-    @Mock
-    private VirtualDeviceManagerInternal mVirtualDeviceManagerInternalMock;
-    @Mock
-    private PackageManagerInternal mPackageManagerInternalMock;
-    @Mock
-    private VibrationConfig mVibrationConfigMock;
-
-    private TestLooper mTestLooper;
-    private ContextWrapper mContextSpy;
-    private AudioManager mAudioManager;
-    private VibrationSettings mVibrationSettings;
-    private PowerManagerInternal.LowPowerModeListener mRegisteredPowerModeListener;
-    private VirtualDeviceManagerInternal.VirtualDisplayListener mRegisteredVirtualDisplayListener;
-    private VirtualDeviceManagerInternal.AppsOnVirtualDeviceListener
-            mRegisteredAppsOnVirtualDeviceListener;
-
-    @Before
-    public void setUp() throws Exception {
-        mTestLooper = new TestLooper();
-        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
-
-        ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy);
-        when(mContextSpy.getContentResolver()).thenReturn(contentResolver);
-        doAnswer(invocation -> {
-            mRegisteredPowerModeListener = invocation.getArgument(0);
-            return null;
-        }).when(mPowerManagerInternalMock).registerLowPowerModeObserver(any());
-        when(mPackageManagerInternalMock.getSystemUiServiceComponent())
-                .thenReturn(new ComponentName(SYSUI_PACKAGE_NAME, ""));
-        doAnswer(invocation -> {
-            mRegisteredVirtualDisplayListener = invocation.getArgument(0);
-            return null;
-        }).when(mVirtualDeviceManagerInternalMock).registerVirtualDisplayListener(any());
-        doAnswer(invocation -> {
-            mRegisteredAppsOnVirtualDeviceListener = invocation.getArgument(0);
-            return null;
-        }).when(mVirtualDeviceManagerInternalMock).registerAppsOnVirtualDeviceListener(any());
-
-        removeServicesForTest();
-        addServicesForTest();
-
-        setDefaultIntensity(VIBRATION_INTENSITY_MEDIUM);
-        mAudioManager = mContextSpy.getSystemService(AudioManager.class);
-        mVibrationSettings = new VibrationSettings(mContextSpy,
-                new Handler(mTestLooper.getLooper()), mVibrationConfigMock);
-
-        mockGoToSleep(/* goToSleepTime= */ 0, PowerManager.GO_TO_SLEEP_REASON_TIMEOUT);
-
-        // Simulate System defaults.
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);
-        setUserSetting(Settings.System.VIBRATE_INPUT_DEVICES, 0);
-        setUserSetting(Settings.System.VIBRATE_WHEN_RINGING, 1);
-        setUserSetting(Settings.System.APPLY_RAMPING_RINGER, 0);
-        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
-        mVibrationSettings.onSystemReady();
-    }
-
-    private void removeServicesForTest() {
-        LocalServices.removeServiceForTest(PowerManagerInternal.class);
-        LocalServices.removeServiceForTest(PackageManagerInternal.class);
-        LocalServices.removeServiceForTest(VirtualDeviceManagerInternal.class);
-    }
-
-    private void addServicesForTest() {
-        LocalServices.addService(PowerManagerInternal.class, mPowerManagerInternalMock);
-        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternalMock);
-        LocalServices.addService(VirtualDeviceManagerInternal.class,
-                mVirtualDeviceManagerInternalMock);
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        removeServicesForTest();
-    }
-
-    @Test
-    public void create_withOnlyRequiredSystemServices() {
-        // The only core services that we depend on are PowerManager and PackageManager
-        removeServicesForTest();
-        LocalServices.addService(PowerManagerInternal.class, mPowerManagerInternalMock);
-        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternalMock);
-
-        VibrationSettings minimalVibrationSettings = new VibrationSettings(mContextSpy,
-                new Handler(mTestLooper.getLooper()), mVibrationConfigMock);
-        minimalVibrationSettings.onSystemReady();
-    }
-
-    @Test
-    public void addListener_settingsChangeTriggerListener() {
-        mVibrationSettings.addListener(mListenerMock);
-
-        mVibrationSettings.mSettingObserver.onChange(false);
-        mVibrationSettings.mSettingObserver.onChange(false);
-
-        verify(mListenerMock, times(2)).onChange();
-    }
-
-    @Test
-    public void addListener_lowPowerModeChangeTriggerListener() {
-        mVibrationSettings.addListener(mListenerMock);
-
-        mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE);
-        mRegisteredPowerModeListener.onLowPowerModeChanged(NORMAL_POWER_STATE);
-        mRegisteredPowerModeListener.onLowPowerModeChanged(NORMAL_POWER_STATE); // No change.
-
-        verify(mListenerMock, times(2)).onChange();
-    }
-
-    @Test
-    public void removeListener_noMoreCallbacksToListener() {
-        mVibrationSettings.addListener(mListenerMock);
-
-        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, 0);
-        verify(mListenerMock).onChange();
-
-        mVibrationSettings.removeListener(mListenerMock);
-
-        verifyNoMoreInteractions(mListenerMock);
-        setUserSetting(Settings.System.VIBRATE_INPUT_DEVICES, 1);
-    }
-
-    @Test
-    public void shouldIgnoreVibration_fromBackground_doesNotIgnoreUsagesFromAllowlist() {
-        Set<Integer> expectedAllowedVibrations = new HashSet<>(Arrays.asList(
-                USAGE_RINGTONE,
-                USAGE_ALARM,
-                USAGE_NOTIFICATION,
-                USAGE_COMMUNICATION_REQUEST,
-                USAGE_HARDWARE_FEEDBACK,
-                USAGE_PHYSICAL_EMULATION
-        ));
-
-        mVibrationSettings.mUidObserver.onUidStateChanged(
-                UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND, 0, 0);
-
-        for (int usage : ALL_USAGES) {
-            if (expectedAllowedVibrations.contains(usage)) {
-                assertVibrationNotIgnoredForUsage(usage);
-            } else {
-                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_BACKGROUND);
-            }
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_fromForeground_allowsAnyUsage() {
-        mVibrationSettings.mUidObserver.onUidStateChanged(
-                UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND, 0, 0);
-
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsage(usage);
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_inBatterySaverMode_doesNotIgnoreUsagesFromAllowlist() {
-        Set<Integer> expectedAllowedVibrations = new HashSet<>(Arrays.asList(
-                USAGE_RINGTONE,
-                USAGE_ALARM,
-                USAGE_COMMUNICATION_REQUEST,
-                USAGE_PHYSICAL_EMULATION,
-                USAGE_HARDWARE_FEEDBACK
-        ));
-
-        mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE);
-
-        for (int usage : ALL_USAGES) {
-            if (expectedAllowedVibrations.contains(usage)) {
-                assertVibrationNotIgnoredForUsage(usage);
-            } else {
-                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_POWER);
-            }
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_notInBatterySaverMode_allowsAnyUsage() {
-        mRegisteredPowerModeListener.onLowPowerModeChanged(NORMAL_POWER_STATE);
-
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsage(usage);
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_withRingerModeSilent_ignoresRingtoneAndNotification() {
-        // Vibrating settings on are overruled by ringer mode.
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);
-        setRingerMode(AudioManager.RINGER_MODE_SILENT);
-
-        for (int usage : ALL_USAGES) {
-            if (usage == USAGE_RINGTONE || usage == USAGE_NOTIFICATION) {
-                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_RINGER_MODE);
-            } else {
-                assertVibrationNotIgnoredForUsage(usage);
-            }
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_withRingerModeSilentAndBypassFlag_allowsAllVibrations() {
-        setRingerMode(AudioManager.RINGER_MODE_SILENT);
-
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsageAndFlags(usage,
-                    VibrationAttributes.FLAG_BYPASS_INTERRUPTION_POLICY);
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_withRingerModeVibrate_allowsAllVibrations() {
-        setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
-
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsage(usage);
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_withRingerModeNormal_allowsAllVibrations() {
-        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
-
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsage(usage);
-        }
-    }
-
-
-    @Test
-    public void shouldIgnoreVibration_vibrateOnDisabled_ignoresUsagesNotAccessibility() {
-        setUserSetting(Settings.System.VIBRATE_ON, 0);
-
-        for (int usage : ALL_USAGES) {
-            if (usage == USAGE_ACCESSIBILITY) {
-                assertVibrationNotIgnoredForUsage(usage);
-            } else {
-                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_SETTINGS);
-            }
-            assertVibrationNotIgnoredForUsageAndFlags(usage,
-                    VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF);
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_vibrateOnEnabledOrUnset_allowsAnyUsage() {
-        deleteUserSetting(Settings.System.VIBRATE_ON);
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsage(usage);
-        }
-
-        setUserSetting(Settings.System.VIBRATE_ON, 1);
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsage(usage);
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_withRingSettingsOff_allowsAllVibrations() {
-        // VIBRATE_WHEN_RINGING is deprecated and should have no effect on the ring vibration
-        // setting. The ramping ringer is also independent now, instead of a 3-state setting.
-        setUserSetting(Settings.System.VIBRATE_WHEN_RINGING, 0);
-        setUserSetting(Settings.System.APPLY_RAMPING_RINGER, 0);
-
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsage(usage);
-            assertVibrationNotIgnoredForUsageAndFlags(usage,
-                    VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF);
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_withHapticFeedbackDisabled_ignoresTouchVibration() {
-        // HAPTIC_FEEDBACK_ENABLED is deprecated but it was the only setting used to disable touch
-        // feedback vibrations. Continue to apply this on top of the intensity setting.
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_ENABLED, 0);
-
-        for (int usage : ALL_USAGES) {
-            if (usage == USAGE_TOUCH) {
-                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_SETTINGS);
-            } else {
-                assertVibrationNotIgnoredForUsage(usage);
-            }
-            assertVibrationNotIgnoredForUsageAndFlags(usage,
-                    VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF);
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_withHapticFeedbackSettingsOff_ignoresTouchVibration() {
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
-
-        for (int usage : ALL_USAGES) {
-            if (usage == USAGE_TOUCH) {
-                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_SETTINGS);
-            } else {
-                assertVibrationNotIgnoredForUsage(usage);
-            }
-            assertVibrationNotIgnoredForUsageAndFlags(usage,
-                    VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF);
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_withHardwareFeedbackSettingsOff_ignoresHardwareVibrations() {
-        setUserSetting(Settings.System.HARDWARE_HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
-
-        for (int usage : ALL_USAGES) {
-            if (usage == USAGE_HARDWARE_FEEDBACK || usage == USAGE_PHYSICAL_EMULATION) {
-                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_SETTINGS);
-            } else {
-                assertVibrationNotIgnoredForUsage(usage);
-            }
-            assertVibrationNotIgnoredForUsageAndFlags(usage,
-                    VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF);
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_withNotificationSettingsOff_ignoresNotificationVibrations() {
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
-
-        for (int usage : ALL_USAGES) {
-            if (usage == USAGE_NOTIFICATION) {
-                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_SETTINGS);
-            } else {
-                assertVibrationNotIgnoredForUsage(usage);
-            }
-            assertVibrationNotIgnoredForUsageAndFlags(usage,
-                    VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF);
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_withRingSettingsOff_ignoresRingtoneVibrations() {
-        // Vibrating settings on are overruled by ring intensity setting.
-        setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
-        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
-
-        for (int usage : ALL_USAGES) {
-            if (usage == USAGE_RINGTONE) {
-                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_SETTINGS);
-            } else {
-                assertVibrationNotIgnoredForUsage(usage);
-            }
-            assertVibrationNotIgnoredForUsageAndFlags(usage,
-                    VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF);
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibration_updateTriggeredAfterInternalRingerModeChanged() {
-        // Vibrating settings on are overruled by ringer mode.
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);
-        setUserSetting(Settings.System.APPLY_RAMPING_RINGER, 1);
-        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
-
-        assertVibrationNotIgnoredForUsage(USAGE_RINGTONE);
-
-        // Testing the broadcast flow manually.
-        mAudioManager.setRingerModeInternal(AudioManager.RINGER_MODE_SILENT);
-        mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy,
-                new Intent(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION));
-
-        assertVibrationIgnoredForUsage(USAGE_RINGTONE, Vibration.Status.IGNORED_FOR_RINGER_MODE);
-    }
-
-    @Test
-    public void shouldIgnoreVibrationFromVirtualDisplays_displayNonVirtual_neverIgnored() {
-        // Vibrations from the primary display is never ignored regardless of the creation and
-        // removal of virtual displays and of the changes of apps running on virtual displays.
-        mRegisteredVirtualDisplayListener.onVirtualDisplayCreated(VIRTUAL_DISPLAY_ID);
-        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(
-                new ArraySet<>(Arrays.asList(UID)));
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsageAndDisplay(usage, Display.DEFAULT_DISPLAY);
-        }
-
-        mRegisteredVirtualDisplayListener.onVirtualDisplayRemoved(VIRTUAL_DISPLAY_ID);
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsageAndDisplay(usage, Display.DEFAULT_DISPLAY);
-        }
-
-        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(new ArraySet<>());
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsageAndDisplay(usage, Display.DEFAULT_DISPLAY);
-        }
-    }
-
-    @Test
-    public void shouldIgnoreVibrationFromVirtualDisplays_displayVirtual() {
-        // Ignore the vibration when the coming display id represents a virtual display.
-        mRegisteredVirtualDisplayListener.onVirtualDisplayCreated(VIRTUAL_DISPLAY_ID);
-
-        for (int usage : ALL_USAGES) {
-            assertVibrationIgnoredForUsageAndDisplay(usage, VIRTUAL_DISPLAY_ID,
-                    Vibration.Status.IGNORED_FROM_VIRTUAL_DEVICE);
-        }
-
-        // Stop ignoring when the virtual display is removed.
-        mRegisteredVirtualDisplayListener.onVirtualDisplayRemoved(VIRTUAL_DISPLAY_ID);
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsageAndDisplay(usage, VIRTUAL_DISPLAY_ID);
-        }
-    }
-
-
-    @Test
-    public void shouldIgnoreVibrationFromVirtualDisplays_appsOnVirtualDisplay() {
-        // Ignore when the passed-in display id is invalid and the calling uid is on a virtual
-        // display.
-        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(
-                new ArraySet<>(Arrays.asList(UID)));
-        for (int usage : ALL_USAGES) {
-            assertVibrationIgnoredForUsageAndDisplay(usage, Display.INVALID_DISPLAY,
-                    Vibration.Status.IGNORED_FROM_VIRTUAL_DEVICE);
-        }
-
-        // Stop ignoring when the app is no longer on virtual display.
-        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(new ArraySet<>());
-        for (int usage : ALL_USAGES) {
-            assertVibrationNotIgnoredForUsageAndDisplay(usage, Display.INVALID_DISPLAY);
-        }
-
-    }
-
-    @Test
-    public void shouldVibrateInputDevices_returnsSettingsValue() {
-        setUserSetting(Settings.System.VIBRATE_INPUT_DEVICES, 1);
-        assertTrue(mVibrationSettings.shouldVibrateInputDevices());
-
-        setUserSetting(Settings.System.VIBRATE_INPUT_DEVICES, 0);
-        assertFalse(mVibrationSettings.shouldVibrateInputDevices());
-    }
-
-    @Test
-    public void shouldCancelVibrationOnScreenOff_withEventBeforeVibration_returnsAlwaysFalse() {
-        long vibrateStartTime = 100;
-        mockGoToSleep(vibrateStartTime - 10, PowerManager.GO_TO_SLEEP_REASON_APPLICATION);
-
-        for (int usage : ALL_USAGES) {
-            // Non-system vibration
-            assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(createCallerInfo(
-                    UID, "some.app", usage), vibrateStartTime));
-            // Vibration with UID zero
-            assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
-                    createCallerInfo(/* uid= */ 0, "", usage), vibrateStartTime));
-            // System vibration
-            assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
-                    createCallerInfo(Process.SYSTEM_UID, "", usage), vibrateStartTime));
-            // SysUI vibration
-            assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
-                    createCallerInfo(UID, SYSUI_PACKAGE_NAME, usage), vibrateStartTime));
-        }
-    }
-
-    @Test
-    public void shouldCancelVibrationOnScreenOff_withSleepReasonInAllowlist_returnsAlwaysFalse() {
-        long vibrateStartTime = 100;
-        int[] allowedSleepReasons = new int[]{
-                PowerManager.GO_TO_SLEEP_REASON_TIMEOUT,
-                PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE,
-        };
-
-        for (int sleepReason : allowedSleepReasons) {
-            mockGoToSleep(vibrateStartTime + 10, sleepReason);
-
-            for (int usage : ALL_USAGES) {
-                // Non-system vibration
-                assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
-                        createCallerInfo(UID, "some.app", usage), vibrateStartTime));
-                // Vibration with UID zero
-                assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
-                        createCallerInfo(/* uid= */ 0, "", usage), vibrateStartTime));
-                // System vibration
-                assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
-                        createCallerInfo(Process.SYSTEM_UID, "", usage), vibrateStartTime));
-                // SysUI vibration
-                assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
-                        createCallerInfo(UID, SYSUI_PACKAGE_NAME, usage), vibrateStartTime));
-            }
-        }
-    }
-
-    @Test
-    public void shouldCancelVibrationOnScreenOff_withNonSystem_returnsTrueIfReasonNotInAllowlist() {
-        long vibrateStartTime = 100;
-        mockGoToSleep(vibrateStartTime + 10, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON);
-
-        for (int usage : ALL_USAGES) {
-            assertTrue(mVibrationSettings.shouldCancelVibrationOnScreenOff(
-                    createCallerInfo(UID, "some.app", usage), vibrateStartTime));
-        }
-    }
-
-    @Test
-    public void shouldCancelVibrationOnScreenOff_withUidZero_returnsFalseForUsagesInAllowlist() {
-        long vibrateStartTime = 100;
-        mockGoToSleep(vibrateStartTime + 10, PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN);
-
-        Set<Integer> expectedAllowedVibrations = new HashSet<>(Arrays.asList(
-                USAGE_TOUCH,
-                USAGE_ACCESSIBILITY,
-                USAGE_PHYSICAL_EMULATION,
-                USAGE_HARDWARE_FEEDBACK
-        ));
-
-        for (int usage : ALL_USAGES) {
-            if (expectedAllowedVibrations.contains(usage)) {
-                assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
-                        createCallerInfo(/* uid= */ 0, "", usage), vibrateStartTime));
-            } else {
-                assertTrue(mVibrationSettings.shouldCancelVibrationOnScreenOff(
-                        createCallerInfo(/* uid= */ 0, "", usage), vibrateStartTime));
-            }
-        }
-    }
-
-    @Test
-    public void shouldCancelVibrationOnScreenOff_withSystemUid__returnsFalseForUsagesInAllowlist() {
-        long vibrateStartTime = 100;
-        mockGoToSleep(vibrateStartTime + 10, PowerManager.GO_TO_SLEEP_REASON_DEVICE_FOLD);
-
-        Set<Integer> expectedAllowedVibrations = new HashSet<>(Arrays.asList(
-                USAGE_TOUCH,
-                USAGE_ACCESSIBILITY,
-                USAGE_PHYSICAL_EMULATION,
-                USAGE_HARDWARE_FEEDBACK
-        ));
-
-        for (int usage : ALL_USAGES) {
-            if (expectedAllowedVibrations.contains(usage)) {
-                assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
-                        createCallerInfo(Process.SYSTEM_UID, "", usage), vibrateStartTime));
-            } else {
-                assertTrue(mVibrationSettings.shouldCancelVibrationOnScreenOff(
-                        createCallerInfo(Process.SYSTEM_UID, "", usage), vibrateStartTime));
-            }
-        }
-    }
-
-    @Test
-    public void shouldCancelVibrationOnScreenOff_withSysUiPkg_returnsFalseForUsagesInAllowlist() {
-        long vibrateStartTime = 100;
-        mockGoToSleep(vibrateStartTime + 10, PowerManager.GO_TO_SLEEP_REASON_HDMI);
-
-        Set<Integer> expectedAllowedVibrations = new HashSet<>(Arrays.asList(
-                USAGE_TOUCH,
-                USAGE_ACCESSIBILITY,
-                USAGE_PHYSICAL_EMULATION,
-                USAGE_HARDWARE_FEEDBACK
-        ));
-
-        for (int usage : ALL_USAGES) {
-            if (expectedAllowedVibrations.contains(usage)) {
-                assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
-                        createCallerInfo(UID, SYSUI_PACKAGE_NAME, usage), vibrateStartTime));
-            } else {
-                assertTrue(mVibrationSettings.shouldCancelVibrationOnScreenOff(
-                        createCallerInfo(UID, SYSUI_PACKAGE_NAME, usage), vibrateStartTime));
-            }
-        }
-    }
-
-    @Test
-    public void getDefaultIntensity_returnsIntensityFromVibratorConfig() {
-        setDefaultIntensity(VIBRATION_INTENSITY_HIGH);
-        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
-        setUserSetting(Settings.System.HARDWARE_HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
-        setUserSetting(Settings.System.MEDIA_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
-        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
-
-        for (int usage : ALL_USAGES) {
-            assertEquals(VIBRATION_INTENSITY_HIGH, mVibrationSettings.getDefaultIntensity(usage));
-        }
-    }
-
-    @Test
-    public void getCurrentIntensity_returnsIntensityFromSettings() {
-        setDefaultIntensity(VIBRATION_INTENSITY_OFF);
-        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_LOW);
-        setUserSetting(Settings.System.HARDWARE_HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_LOW);
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
-        setUserSetting(Settings.System.MEDIA_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
-        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
-
-        for (int usage : ALL_USAGES) {
-            assertEquals(errorMessageForUsage(usage),
-                    VIBRATION_INTENSITY_LOW,
-                    mVibrationSettings.getCurrentIntensity(usage));
-        }
-    }
-
-    @Test
-    public void getCurrentIntensity_updateTriggeredAfterUserSwitched() {
-        setDefaultIntensity(USAGE_RINGTONE, VIBRATION_INTENSITY_OFF);
-        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_HIGH);
-        assertEquals(VIBRATION_INTENSITY_HIGH,
-                mVibrationSettings.getCurrentIntensity(USAGE_RINGTONE));
-
-        // Switching user is not working with FakeSettingsProvider.
-        // Testing the broadcast flow manually.
-        Settings.System.putIntForUser(mContextSpy.getContentResolver(),
-                Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW,
-                UserHandle.USER_CURRENT);
-        mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy,
-                new Intent(Intent.ACTION_USER_SWITCHED));
-        assertEquals(VIBRATION_INTENSITY_LOW,
-                mVibrationSettings.getCurrentIntensity(USAGE_RINGTONE));
-    }
-
-    @Test
-    public void getCurrentIntensity_noHardwareFeedbackValueUsesHapticFeedbackValue() {
-        setDefaultIntensity(USAGE_HARDWARE_FEEDBACK, VIBRATION_INTENSITY_MEDIUM);
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
-        assertEquals(VIBRATION_INTENSITY_OFF, mVibrationSettings.getCurrentIntensity(USAGE_TOUCH));
-        // If haptic feedback is off, fallback to default value.
-        assertEquals(VIBRATION_INTENSITY_MEDIUM,
-                mVibrationSettings.getCurrentIntensity(USAGE_HARDWARE_FEEDBACK));
-        assertEquals(VIBRATION_INTENSITY_MEDIUM,
-                mVibrationSettings.getCurrentIntensity(USAGE_PHYSICAL_EMULATION));
-
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_HIGH);
-        assertEquals(VIBRATION_INTENSITY_HIGH,
-                mVibrationSettings.getCurrentIntensity(USAGE_TOUCH));
-        // If haptic feedback is on, fallback to that value.
-        assertEquals(VIBRATION_INTENSITY_HIGH,
-                mVibrationSettings.getCurrentIntensity(USAGE_HARDWARE_FEEDBACK));
-        assertEquals(VIBRATION_INTENSITY_HIGH,
-                mVibrationSettings.getCurrentIntensity(USAGE_PHYSICAL_EMULATION));
-    }
-
-    @Test
-    public void getFallbackEffect_returnsEffectsFromSettings() {
-        assertNotNull(mVibrationSettings.getFallbackEffect(VibrationEffect.EFFECT_TICK));
-        assertNotNull(mVibrationSettings.getFallbackEffect(VibrationEffect.EFFECT_TEXTURE_TICK));
-        assertNotNull(mVibrationSettings.getFallbackEffect(VibrationEffect.EFFECT_CLICK));
-        assertNotNull(mVibrationSettings.getFallbackEffect(VibrationEffect.EFFECT_HEAVY_CLICK));
-        assertNotNull(mVibrationSettings.getFallbackEffect(VibrationEffect.EFFECT_DOUBLE_CLICK));
-    }
-
-    private void assertVibrationIgnoredForUsage(@VibrationAttributes.Usage int usage,
-            Vibration.Status expectedStatus) {
-        assertVibrationIgnoredForUsageAndDisplay(usage, Display.DEFAULT_DISPLAY, expectedStatus);
-    }
-
-    private void assertVibrationIgnoredForUsageAndDisplay(@VibrationAttributes.Usage int usage,
-            int displayId, Vibration.Status expectedStatus) {
-        Vibration.CallerInfo callerInfo = new Vibration.CallerInfo(
-                VibrationAttributes.createForUsage(usage), UID, displayId, null, null);
-        assertEquals(errorMessageForUsage(usage), expectedStatus,
-                mVibrationSettings.shouldIgnoreVibration(callerInfo));
-    }
-
-    private void assertVibrationNotIgnoredForUsage(@VibrationAttributes.Usage int usage) {
-        assertVibrationNotIgnoredForUsageAndFlags(usage, /* flags= */ 0);
-    }
-
-    private void assertVibrationNotIgnoredForUsageAndFlags(@VibrationAttributes.Usage int usage,
-            @VibrationAttributes.Flag int flags) {
-        assertVibrationNotIgnoredForUsageAndFlagsAndDisplay(usage, Display.DEFAULT_DISPLAY, flags);
-    }
-
-    private void assertVibrationNotIgnoredForUsageAndDisplay(@VibrationAttributes.Usage int usage,
-            int displayId) {
-        assertVibrationNotIgnoredForUsageAndFlagsAndDisplay(usage, displayId, /* flags= */ 0);
-    }
-
-    private void assertVibrationNotIgnoredForUsageAndFlagsAndDisplay(
-            @VibrationAttributes.Usage int usage, int displayId,
-            @VibrationAttributes.Flag int flags) {
-        Vibration.CallerInfo callerInfo = new Vibration.CallerInfo(
-                new VibrationAttributes.Builder().setUsage(usage).setFlags(flags).build(), UID,
-                displayId, null, null);
-        assertNull(errorMessageForUsage(usage),
-                mVibrationSettings.shouldIgnoreVibration(callerInfo));
-    }
-
-
-    private String errorMessageForUsage(int usage) {
-        return "Error for usage " + VibrationAttributes.usageToString(usage);
-    }
-
-    private void setDefaultIntensity(@Vibrator.VibrationIntensity int intensity) {
-        when(mVibrationConfigMock.getDefaultVibrationIntensity(anyInt())).thenReturn(intensity);
-    }
-
-    private void setDefaultIntensity(@VibrationAttributes.Usage int usage,
-            @Vibrator.VibrationIntensity int intensity) {
-        when(mVibrationConfigMock.getDefaultVibrationIntensity(eq(usage))).thenReturn(intensity);
-    }
-
-    private void deleteUserSetting(String settingName) {
-        Settings.System.putStringForUser(
-                mContextSpy.getContentResolver(), settingName, null, UserHandle.USER_CURRENT);
-        // FakeSettingsProvider doesn't support testing triggering ContentObserver yet.
-        mVibrationSettings.mSettingObserver.onChange(false);
-    }
-
-    private void setUserSetting(String settingName, int value) {
-        Settings.System.putIntForUser(
-                mContextSpy.getContentResolver(), settingName, value, UserHandle.USER_CURRENT);
-        // FakeSettingsProvider doesn't support testing triggering ContentObserver yet.
-        mVibrationSettings.mSettingObserver.onChange(false);
-    }
-
-    private void setRingerMode(int ringerMode) {
-        mAudioManager.setRingerModeInternal(ringerMode);
-        assertEquals(ringerMode, mAudioManager.getRingerModeInternal());
-        mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy,
-                new Intent(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION));
-    }
-
-    private void mockGoToSleep(long sleepTime, int reason) {
-        when(mPowerManagerInternalMock.getLastGoToSleep()).thenReturn(
-                new PowerManager.SleepData(sleepTime, reason));
-    }
-
-    private Vibration.CallerInfo createCallerInfo(int uid, String opPkg,
-            @VibrationAttributes.Usage int usage) {
-        VibrationAttributes attrs = VibrationAttributes.createForUsage(usage);
-        return new Vibration.CallerInfo(attrs, uid, VIRTUAL_DISPLAY_ID, opPkg, null);
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibrationTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibrationTest.java
deleted file mode 100644
index b469299..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/VibrationTest.java
+++ /dev/null
@@ -1,46 +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.server.vibrator;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static java.util.stream.Collectors.toList;
-
-import android.platform.test.annotations.Presubmit;
-
-import org.junit.Test;
-
-import java.util.Arrays;
-
-/**
- * Tests for {@link Vibration}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:VibrationTest
- */
-@Presubmit
-public class VibrationTest {
-
-    @Test
-    public void status_hasUniqueProtoEnumValues() {
-        assertThat(
-                Arrays.stream(Vibration.Status.values())
-                        .map(Vibration.Status::getProtoEnumValue)
-                        .collect(toList()))
-                .containsNoDuplicates();
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibrationThreadTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibrationThreadTest.java
deleted file mode 100644
index 12810bb..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/VibrationThreadTest.java
+++ /dev/null
@@ -1,1707 +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.server.vibrator;
-
-import static android.os.VibrationEffect.VibrationParameter.targetAmplitude;
-import static android.os.VibrationEffect.VibrationParameter.targetFrequency;
-
-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.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.same;
-import static org.mockito.Mockito.atLeast;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.inOrder;
-import static org.mockito.Mockito.never;
-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.content.ComponentName;
-import android.content.Context;
-import android.content.pm.PackageManagerInternal;
-import android.hardware.vibrator.Braking;
-import android.hardware.vibrator.IVibrator;
-import android.hardware.vibrator.IVibratorManager;
-import android.os.CombinedVibration;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.PowerManager;
-import android.os.Process;
-import android.os.SystemClock;
-import android.os.VibrationAttributes;
-import android.os.VibrationEffect;
-import android.os.Vibrator;
-import android.os.test.TestLooper;
-import android.os.vibrator.PrebakedSegment;
-import android.os.vibrator.PrimitiveSegment;
-import android.os.vibrator.RampSegment;
-import android.os.vibrator.StepSegment;
-import android.os.vibrator.VibrationConfig;
-import android.os.vibrator.VibrationEffectSegment;
-import android.platform.test.annotations.LargeTest;
-import android.platform.test.annotations.Presubmit;
-import android.util.SparseArray;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.server.LocalServices;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.mockito.InOrder;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
-
-import java.time.Duration;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.function.BooleanSupplier;
-import java.util.stream.Collectors;
-
-/**
- * Tests for {@link VibrationThread}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:VibrationThreadTest
- */
-@Presubmit
-public class VibrationThreadTest {
-
-    private static final int TEST_TIMEOUT_MILLIS = 900;
-    private static final int UID = Process.ROOT_UID;
-    private static final int DISPLAY_ID = 10;
-    private static final int VIBRATOR_ID = 1;
-    private static final String PACKAGE_NAME = "package";
-    private static final VibrationAttributes ATTRS = new VibrationAttributes.Builder().build();
-    private static final int TEST_RAMP_STEP_DURATION = 5;
-
-    @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
-
-    @Mock private PackageManagerInternal mPackageManagerInternalMock;
-    @Mock private VibrationThread.VibratorManagerHooks mManagerHooks;
-    @Mock private VibratorController.OnVibrationCompleteListener mControllerCallbacks;
-    @Mock private IBinder mVibrationToken;
-    @Mock private VibrationConfig mVibrationConfigMock;
-
-    private final Map<Integer, FakeVibratorControllerProvider> mVibratorProviders = new HashMap<>();
-    private VibrationSettings mVibrationSettings;
-    private DeviceVibrationEffectAdapter mEffectAdapter;
-    private TestLooper mTestLooper;
-    private TestLooperAutoDispatcher mCustomTestLooperDispatcher;
-    private VibrationThread mThread;
-
-    // Setup from the providers when VibrationThread is initialized.
-    private SparseArray<VibratorController> mControllers;
-
-    @Before
-    public void setUp() throws Exception {
-        mTestLooper = new TestLooper();
-
-        when(mVibrationConfigMock.getDefaultVibrationIntensity(anyInt()))
-                .thenReturn(Vibrator.VIBRATION_INTENSITY_MEDIUM);
-        when(mVibrationConfigMock.getRampStepDurationMs()).thenReturn(TEST_RAMP_STEP_DURATION);
-        when(mPackageManagerInternalMock.getSystemUiServiceComponent())
-                .thenReturn(new ComponentName("", ""));
-
-        LocalServices.removeServiceForTest(PackageManagerInternal.class);
-        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternalMock);
-
-        Context context = InstrumentationRegistry.getContext();
-        mVibrationSettings = new VibrationSettings(context, new Handler(mTestLooper.getLooper()),
-                mVibrationConfigMock);
-
-        mockVibrators(VIBRATOR_ID);
-
-        mEffectAdapter = new DeviceVibrationEffectAdapter(mVibrationSettings);
-        PowerManager.WakeLock wakeLock = context.getSystemService(
-                PowerManager.class).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "*vibrator*");
-        mThread = new VibrationThread(wakeLock, mManagerHooks);
-        mThread.start();
-    }
-
-    @After
-    public void tearDown() {
-        if (mCustomTestLooperDispatcher != null) {
-            mCustomTestLooperDispatcher.cancel();
-        }
-    }
-
-    @Test
-    public void vibrate_noVibrator_ignoresVibration() {
-        mVibratorProviders.clear();
-        CombinedVibration effect = CombinedVibration.createParallel(
-                VibrationEffect.get(VibrationEffect.EFFECT_CLICK));
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mControllerCallbacks, never()).onComplete(anyInt(), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.IGNORED_UNSUPPORTED);
-    }
-
-    @Test
-    public void vibrate_missingVibrators_ignoresVibration() {
-        CombinedVibration effect = CombinedVibration.startSequential()
-                .addNext(2, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addNext(3, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
-                .combine();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mControllerCallbacks, never()).onComplete(anyInt(), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.IGNORED_UNSUPPORTED);
-    }
-
-    @Test
-    public void vibrate_singleVibratorOneShot_runsVibrationAndSetsAmplitude() throws Exception {
-        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        VibrationEffect effect = VibrationEffect.createOneShot(10, 100);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L));
-        verify(mManagerHooks).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-
-        assertEquals(Arrays.asList(expectedOneShot(10)),
-                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
-        assertEquals(expectedAmplitudes(100), mVibratorProviders.get(VIBRATOR_ID).getAmplitudes());
-    }
-
-    @Test
-    public void vibrate_oneShotWithoutAmplitudeControl_runsVibrationWithDefaultAmplitude()
-            throws Exception {
-        VibrationEffect effect = VibrationEffect.createOneShot(10, 100);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L));
-        verify(mManagerHooks).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-
-        assertEquals(Arrays.asList(expectedOneShot(10)),
-                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
-        assertTrue(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes().isEmpty());
-    }
-
-    @Test
-    public void vibrate_singleVibratorWaveform_runsVibrationAndChangesAmplitudes()
-            throws Exception {
-        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                new long[]{5, 5, 5}, new int[]{1, 2, 3}, -1);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(15L));
-        verify(mManagerHooks).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-
-        assertEquals(Arrays.asList(expectedOneShot(15)),
-                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
-        assertEquals(expectedAmplitudes(1, 2, 3),
-                mVibratorProviders.get(VIBRATOR_ID).getAmplitudes());
-    }
-
-    @Test
-    public void vibrate_singleVibratorRepeatingWaveform_runsVibrationUntilThreadCancelled()
-            throws Exception {
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        int[] amplitudes = new int[]{1, 2, 3};
-        VibrationEffect effect = VibrationEffect.createWaveform(new long[]{5, 5, 5}, amplitudes, 0);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        assertTrue(
-                waitUntil(() -> fakeVibrator.getAmplitudes().size() > 2 * amplitudes.length,
-                        TEST_TIMEOUT_MILLIS));
-        // Vibration still running after 2 cycles.
-        assertTrue(mThread.isRunningVibrationId(vibrationId));
-        assertTrue(mControllers.get(VIBRATOR_ID).isVibrating());
-
-        Vibration.EndInfo cancelVibrationInfo = new Vibration.EndInfo(
-                Vibration.Status.CANCELLED_SUPERSEDED, new Vibration.CallerInfo(
-                VibrationAttributes.createForUsage(VibrationAttributes.USAGE_ALARM), /* uid= */
-                1, /* displayId= */ -1, /* opPkg= */ null, /* reason= */ null));
-        conductor.notifyCancelled(
-                cancelVibrationInfo,
-                /* immediate= */ false);
-        waitForCompletion();
-        assertFalse(mThread.isRunningVibrationId(vibrationId));
-
-        verify(mManagerHooks).noteVibratorOn(eq(UID), anyLong());
-        verify(mManagerHooks).noteVibratorOff(eq(UID));
-        verifyCallbacksTriggered(vibrationId, cancelVibrationInfo);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-
-        List<Float> playedAmplitudes = fakeVibrator.getAmplitudes();
-        assertFalse(fakeVibrator.getEffectSegments(vibrationId).isEmpty());
-        assertFalse(playedAmplitudes.isEmpty());
-
-        for (int i = 0; i < playedAmplitudes.size(); i++) {
-            assertEquals(amplitudes[i % amplitudes.length] / 255f, playedAmplitudes.get(i), 1e-5);
-        }
-    }
-
-    @Test
-    public void vibrate_singleVibratorRepeatingShortAlwaysOnWaveform_turnsVibratorOnForLonger()
-            throws Exception {
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        int[] amplitudes = new int[]{1, 2, 3};
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                new long[]{1, 10, 100}, amplitudes, 0);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        assertTrue(waitUntil(() -> !fakeVibrator.getAmplitudes().isEmpty(), TEST_TIMEOUT_MILLIS));
-        conductor.notifyCancelled(
-                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
-                /* immediate= */ false);
-        waitForCompletion();
-
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_USER);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-        assertEquals(Arrays.asList(expectedOneShot(5000)),
-                fakeVibrator.getEffectSegments(vibrationId));
-    }
-
-    @Test
-    public void vibrate_singleVibratorRepeatingPwle_generatesLargestPwles() throws Exception {
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
-        fakeVibrator.setMinFrequency(100);
-        fakeVibrator.setResonantFrequency(150);
-        fakeVibrator.setFrequencyResolution(50);
-        fakeVibrator.setMaxAmplitudes(1, 1, 1);
-        fakeVibrator.setPwleSizeMax(10);
-
-        VibrationEffect effect = VibrationEffect.startWaveform(targetAmplitude(1))
-                // Very long segment so thread will be cancelled after first PWLE is triggered.
-                .addTransition(Duration.ofMillis(100), targetFrequency(100))
-                .build();
-        VibrationEffect repeatingEffect = VibrationEffect.startComposition()
-                .repeatEffectIndefinitely(effect)
-                .compose();
-        VibrationStepConductor conductor = startThreadAndDispatcher(repeatingEffect);
-        long vibrationId = conductor.getVibration().id;
-
-        assertTrue(waitUntil(() -> !fakeVibrator.getEffectSegments(vibrationId).isEmpty(),
-                TEST_TIMEOUT_MILLIS));
-        conductor.notifyCancelled(
-                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
-                /* immediate= */ false);
-        waitForCompletion();
-
-        // PWLE size max was used to generate a single vibrate call with 10 segments.
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_USER);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-        assertEquals(10, fakeVibrator.getEffectSegments(vibrationId).size());
-    }
-
-    @Test
-    public void vibrate_singleVibratorRepeatingPrimitives_generatesLargestComposition()
-            throws Exception {
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        fakeVibrator.setSupportedPrimitives(VibrationEffect.Composition.PRIMITIVE_CLICK);
-        fakeVibrator.setCompositionSizeMax(10);
-
-        VibrationEffect effect = VibrationEffect.startComposition()
-                // Very long delay so thread will be cancelled after first PWLE is triggered.
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 100)
-                .compose();
-        VibrationEffect repeatingEffect = VibrationEffect.startComposition()
-                .repeatEffectIndefinitely(effect)
-                .compose();
-        VibrationStepConductor conductor = startThreadAndDispatcher(repeatingEffect);
-        long vibrationId = conductor.getVibration().id;
-
-        assertTrue(waitUntil(() -> !fakeVibrator.getEffectSegments(vibrationId).isEmpty(),
-                TEST_TIMEOUT_MILLIS));
-        conductor.notifyCancelled(
-                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_SCREEN_OFF),
-                /* immediate= */ false);
-        waitForCompletion();
-
-        // Composition size max was used to generate a single vibrate call with 10 primitives.
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_SCREEN_OFF);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-        assertEquals(10, fakeVibrator.getEffectSegments(vibrationId).size());
-    }
-
-    @Test
-    public void vibrate_singleVibratorRepeatingLongAlwaysOnWaveform_turnsVibratorOnForACycle()
-            throws Exception {
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        int[] amplitudes = new int[]{1, 2, 3};
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                new long[]{5000, 500, 50}, amplitudes, 0);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        assertTrue(waitUntil(() -> !fakeVibrator.getAmplitudes().isEmpty(), TEST_TIMEOUT_MILLIS));
-        conductor.notifyCancelled(
-                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
-                /* immediate= */ false);
-        waitForCompletion();
-
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_USER);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-        assertEquals(Arrays.asList(expectedOneShot(5550)),
-                fakeVibrator.getEffectSegments(vibrationId));
-    }
-
-    @LargeTest
-    @Test
-    public void vibrate_singleVibratorRepeatingAlwaysOnWaveform_turnsVibratorBackOn()
-            throws Exception {
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        int[] amplitudes = new int[]{1, 2};
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                new long[]{4900, 50}, amplitudes, 0);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        assertTrue(waitUntil(() -> fakeVibrator.getEffectSegments(vibrationId).size() > 1,
-                5000 + TEST_TIMEOUT_MILLIS));
-        conductor.notifyCancelled(
-                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
-                /* immediate= */ false);
-        waitForCompletion();
-
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_USER);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-        // First time turn vibrator ON for minimum of 5s.
-        assertEquals(5000L, fakeVibrator.getEffectSegments(vibrationId).get(0).getDuration());
-        // Vibrator turns off in the middle of the second execution of first step, turn it back ON
-        // for another 5s + remaining of 850ms.
-        assertEquals(4900 + 50 + 4900,
-                fakeVibrator.getEffectSegments(vibrationId).get(1).getDuration(), /* delta= */ 20);
-        // Set amplitudes for a cycle {1, 2}, start second loop then turn it back on to same value.
-        assertEquals(expectedAmplitudes(1, 2, 1, 1),
-                mVibratorProviders.get(VIBRATOR_ID).getAmplitudes().subList(0, 4));
-    }
-
-    @Test
-    public void vibrate_singleVibratorPredefinedCancel_cancelsVibrationImmediately()
-            throws Exception {
-        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        mVibratorProviders.get(VIBRATOR_ID).setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK);
-
-        VibrationEffect effect = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 100)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 100)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 100)
-                .compose();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        assertTrue(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
-                TEST_TIMEOUT_MILLIS));
-        assertTrue(mThread.isRunningVibrationId(vibrationId));
-
-        // Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
-        // fail at waitForCompletion(vibrationThread) if the vibration not cancelled immediately.
-        Thread cancellingThread =
-                new Thread(() -> conductor.notifyCancelled(
-                        new Vibration.EndInfo(
-                                Vibration.Status.CANCELLED_BY_SETTINGS_UPDATE),
-                        /* immediate= */ false));
-        cancellingThread.start();
-
-        waitForCompletion(/* timeout= */ 50);
-        cancellingThread.join();
-
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_SETTINGS_UPDATE);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-    }
-
-    @Test
-    public void vibrate_singleVibratorWaveformCancel_cancelsVibrationImmediately()
-            throws Exception {
-        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-
-        VibrationEffect effect = VibrationEffect.createWaveform(new long[]{100}, new int[]{100}, 0);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        assertTrue(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
-                TEST_TIMEOUT_MILLIS));
-        assertTrue(mThread.isRunningVibrationId(vibrationId));
-
-        // Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
-        // fail at waitForCompletion(vibrationThread) if the vibration not cancelled immediately.
-        Thread cancellingThread =
-                new Thread(() -> conductor.notifyCancelled(
-                        new Vibration.EndInfo(
-                                Vibration.Status.CANCELLED_BY_SCREEN_OFF),
-                        /* immediate= */ false));
-        cancellingThread.start();
-
-        waitForCompletion(/* timeout= */ 50);
-        cancellingThread.join();
-
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_SCREEN_OFF);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-    }
-
-    @Test
-    public void vibrate_singleVibratorPrebaked_runsVibration() throws Exception {
-        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_THUD);
-
-        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_THUD);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L));
-        verify(mManagerHooks).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-
-        assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_THUD)),
-                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
-    }
-
-    @Test
-    public void vibrate_singleVibratorPrebakedAndUnsupportedEffectWithFallback_runsFallback()
-            throws Exception {
-        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        VibrationEffect fallback = VibrationEffect.createOneShot(10, 100);
-        HalVibration vibration = createVibration(CombinedVibration.createParallel(
-                VibrationEffect.get(VibrationEffect.EFFECT_CLICK)));
-        vibration.addFallback(VibrationEffect.EFFECT_CLICK, fallback);
-        VibrationStepConductor conductor = startThreadAndDispatcher(vibration);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L));
-        verify(mManagerHooks).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-
-        assertEquals(Arrays.asList(expectedOneShot(10)),
-                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
-        assertEquals(expectedAmplitudes(100), mVibratorProviders.get(VIBRATOR_ID).getAmplitudes());
-    }
-
-    @Test
-    public void vibrate_singleVibratorPrebakedAndUnsupportedEffect_ignoresVibration()
-            throws Exception {
-        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(0L));
-        verify(mManagerHooks, never()).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks, never()).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.IGNORED_UNSUPPORTED);
-        assertTrue(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId).isEmpty());
-    }
-
-    @Test
-    public void vibrate_singleVibratorComposed_runsVibration() throws Exception {
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        fakeVibrator.setSupportedPrimitives(VibrationEffect.Composition.PRIMITIVE_CLICK,
-                VibrationEffect.Composition.PRIMITIVE_TICK);
-
-        VibrationEffect effect = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f)
-                .compose();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(40L));
-        verify(mManagerHooks).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-        assertEquals(Arrays.asList(
-                expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0),
-                expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f, 0)),
-                fakeVibrator.getEffectSegments(vibrationId));
-    }
-
-    @Test
-    public void vibrate_singleVibratorComposedAndNoCapability_ignoresVibration() {
-        VibrationEffect effect = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f)
-                .compose();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(0L));
-        verify(mManagerHooks, never()).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks, never()).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.IGNORED_UNSUPPORTED);
-        assertTrue(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId).isEmpty());
-    }
-
-    @Test
-    public void vibrate_singleVibratorLargeComposition_splitsVibratorComposeCalls() {
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        fakeVibrator.setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK,
-                VibrationEffect.Composition.PRIMITIVE_TICK,
-                VibrationEffect.Composition.PRIMITIVE_SPIN);
-        fakeVibrator.setCompositionSizeMax(2);
-
-        VibrationEffect effect = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SPIN, 0.8f)
-                .compose();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        // Vibrator compose called twice.
-        verify(mControllerCallbacks, times(2)).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        assertEquals(3, fakeVibrator.getEffectSegments(vibrationId).size());
-    }
-
-    @Test
-    public void vibrate_singleVibratorComposedEffects_runsDifferentVibrations() throws Exception {
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        fakeVibrator.setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK,
-                VibrationEffect.Composition.PRIMITIVE_TICK);
-        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS,
-                IVibrator.CAP_COMPOSE_PWLE_EFFECTS, IVibrator.CAP_AMPLITUDE_CONTROL);
-        fakeVibrator.setMinFrequency(100);
-        fakeVibrator.setResonantFrequency(150);
-        fakeVibrator.setFrequencyResolution(50);
-        fakeVibrator.setMaxAmplitudes(
-                0.5f /* 100Hz*/, 1 /* 150Hz */, 0.6f /* 200Hz */);
-
-        VibrationEffect effect = VibrationEffect.startComposition()
-                .addEffect(VibrationEffect.createOneShot(10, 100))
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f)
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f)
-                .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addEffect(VibrationEffect.startWaveform()
-                        .addTransition(Duration.ofMillis(10),
-                                targetAmplitude(1), targetFrequency(100))
-                        .addTransition(Duration.ofMillis(20), targetFrequency(120))
-                        .build())
-                .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .compose();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        // Use first duration the vibrator is turned on since we cannot estimate the clicks.
-        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L));
-        verify(mManagerHooks).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks, times(5)).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-        assertEquals(Arrays.asList(
-                expectedOneShot(10),
-                expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0),
-                expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f, 0),
-                expectedPrebaked(VibrationEffect.EFFECT_CLICK),
-                expectedRamp(/* startAmplitude= */ 0, /* endAmplitude= */ 0.5f,
-                        /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 100, /* duration= */ 10),
-                expectedRamp(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.7f,
-                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 120, /* duration= */ 20),
-                expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
-                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
-        assertEquals(expectedAmplitudes(100), mVibratorProviders.get(VIBRATOR_ID).getAmplitudes());
-    }
-
-    @Test
-    public void vibrate_singleVibratorComposedWithFallback_replacedInTheMiddleOfComposition() {
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        fakeVibrator.setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK,
-                VibrationEffect.Composition.PRIMITIVE_TICK);
-        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-
-        VibrationEffect fallback = VibrationEffect.createOneShot(10, 100);
-        VibrationEffect effect = VibrationEffect.startComposition()
-                .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f)
-                .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_TICK))
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f)
-                .compose();
-        HalVibration vib = createVibration(CombinedVibration.createParallel(effect));
-        vib.addFallback(VibrationEffect.EFFECT_TICK, fallback);
-        VibrationStepConductor conductor = startThreadAndDispatcher(vib);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        // Use first duration the vibrator is turned on since we cannot estimate the clicks.
-        verify(mManagerHooks).noteVibratorOn(eq(UID), anyLong());
-        verify(mManagerHooks).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks, times(4)).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-
-        List<VibrationEffectSegment> segments =
-                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId);
-        assertTrue("Wrong segments: " + segments, segments.size() >= 4);
-        assertTrue(segments.get(0) instanceof PrebakedSegment);
-        assertTrue(segments.get(1) instanceof PrimitiveSegment);
-        for (int i = 2; i < segments.size() - 1; i++) {
-            // One or more step segments as fallback for the EFFECT_TICK.
-            assertTrue(segments.get(i) instanceof StepSegment);
-        }
-        assertTrue(segments.get(segments.size() - 1) instanceof PrimitiveSegment);
-    }
-
-    @Test
-    public void vibrate_singleVibratorPwle_runsComposePwle() throws Exception {
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
-        fakeVibrator.setSupportedBraking(Braking.CLAB);
-        fakeVibrator.setMinFrequency(100);
-        fakeVibrator.setResonantFrequency(150);
-        fakeVibrator.setFrequencyResolution(50);
-        fakeVibrator.setMaxAmplitudes(
-                0.5f /* 100Hz*/, 1 /* 150Hz */, 0.6f /* 200Hz */);
-
-        VibrationEffect effect = VibrationEffect.startWaveform(targetAmplitude(1))
-                .addSustain(Duration.ofMillis(10))
-                .addTransition(Duration.ofMillis(20), targetAmplitude(0))
-                .addTransition(Duration.ZERO, targetAmplitude(0.8f), targetFrequency(100))
-                .addSustain(Duration.ofMillis(30))
-                .addTransition(Duration.ofMillis(40), targetAmplitude(0.6f), targetFrequency(200))
-                .build();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(100L));
-        verify(mManagerHooks).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-        assertEquals(Arrays.asList(
-                expectedRamp(/* amplitude= */ 1, /* frequencyHz= */ 150, /* duration= */ 10),
-                expectedRamp(/* startAmplitude= */ 1, /* endAmplitude= */ 0,
-                        /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 150, /* duration= */ 20),
-                expectedRamp(/* amplitude= */ 0.5f, /* frequencyHz= */ 100, /* duration= */ 30),
-                expectedRamp(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.6f,
-                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 200,
-                        /* duration= */ 40)),
-                fakeVibrator.getEffectSegments(vibrationId));
-        assertEquals(Arrays.asList(Braking.CLAB), fakeVibrator.getBraking(vibrationId));
-    }
-
-    @Test
-    public void vibrate_singleVibratorLargePwle_splitsComposeCallWhenAmplitudeIsLowest() {
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
-        fakeVibrator.setMinFrequency(100);
-        fakeVibrator.setResonantFrequency(150);
-        fakeVibrator.setFrequencyResolution(50);
-        fakeVibrator.setMaxAmplitudes(1, 1, 1);
-        fakeVibrator.setPwleSizeMax(3);
-
-        VibrationEffect effect = VibrationEffect.startWaveform(targetAmplitude(1))
-                .addSustain(Duration.ofMillis(10))
-                .addTransition(Duration.ofMillis(20), targetAmplitude(0))
-                // Waveform will be split here, after vibration goes to zero amplitude
-                .addTransition(Duration.ZERO, targetAmplitude(0.8f), targetFrequency(100))
-                .addSustain(Duration.ofMillis(30))
-                .addTransition(Duration.ofMillis(40), targetAmplitude(0.6f), targetFrequency(200))
-                // Waveform will be split here at lowest amplitude.
-                .addTransition(Duration.ofMillis(40), targetAmplitude(0.7f), targetFrequency(200))
-                .addTransition(Duration.ofMillis(40), targetAmplitude(0.6f), targetFrequency(200))
-                .build();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-
-        // Vibrator compose called 3 times with 2 segments instead of 2 times with 3 segments.
-        // Using best split points instead of max-packing PWLEs.
-        verify(mControllerCallbacks, times(3)).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        assertEquals(6, fakeVibrator.getEffectSegments(vibrationId).size());
-    }
-
-    @Test
-    public void vibrate_singleVibratorCancelled_vibratorStopped() throws Exception {
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        VibrationEffect effect = VibrationEffect.createWaveform(new long[]{5}, new int[]{100}, 0);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        assertTrue(waitUntil(() -> fakeVibrator.getAmplitudes().size() > 2, TEST_TIMEOUT_MILLIS));
-        // Vibration still running after 2 cycles.
-        assertTrue(mThread.isRunningVibrationId(vibrationId));
-        assertTrue(mControllers.get(VIBRATOR_ID).isVibrating());
-
-        conductor.binderDied();
-        waitForCompletion();
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BINDER_DIED);
-    }
-
-    @Test
-    public void vibrate_singleVibrator_skipsSyncedCallbacks() {
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        VibrationStepConductor conductor = startThreadAndDispatcher(
-                VibrationEffect.createOneShot(10, 100));
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        verify(mManagerHooks, never()).prepareSyncedVibration(anyLong(), any());
-        verify(mManagerHooks, never()).triggerSyncedVibration(anyLong());
-        verify(mManagerHooks, never()).cancelSyncedVibration();
-    }
-
-    @Test
-    public void vibrate_multipleExistingAndMissingVibrators_vibratesOnlyExistingOnes()
-            throws Exception {
-        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_TICK);
-
-        CombinedVibration effect = CombinedVibration.startParallel()
-                .addVibrator(VIBRATOR_ID, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
-                .addVibrator(2, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
-                .combine();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L));
-        verify(mManagerHooks).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verify(mControllerCallbacks, never()).onComplete(eq(2), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-
-        assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_TICK)),
-                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
-    }
-
-    @Test
-    public void vibrate_multipleMono_runsSameEffectInAllVibrators() throws Exception {
-        mockVibrators(1, 2, 3);
-        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        mVibratorProviders.get(2).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        mVibratorProviders.get(3).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-
-        CombinedVibration effect = CombinedVibration.createParallel(
-                VibrationEffect.get(VibrationEffect.EFFECT_CLICK));
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L));
-        verify(mManagerHooks).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks).onComplete(eq(1), eq(vibrationId));
-        verify(mControllerCallbacks).onComplete(eq(2), eq(vibrationId));
-        verify(mControllerCallbacks).onComplete(eq(3), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        assertFalse(mControllers.get(1).isVibrating());
-        assertFalse(mControllers.get(2).isVibrating());
-        assertFalse(mControllers.get(3).isVibrating());
-
-        VibrationEffectSegment expected = expectedPrebaked(VibrationEffect.EFFECT_CLICK);
-        assertEquals(Arrays.asList(expected),
-                mVibratorProviders.get(1).getEffectSegments(vibrationId));
-        assertEquals(Arrays.asList(expected),
-                mVibratorProviders.get(2).getEffectSegments(vibrationId));
-        assertEquals(Arrays.asList(expected),
-                mVibratorProviders.get(3).getEffectSegments(vibrationId));
-    }
-
-    @Test
-    public void vibrate_multipleStereo_runsVibrationOnRightVibrators() throws Exception {
-        mockVibrators(1, 2, 3, 4);
-        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        mVibratorProviders.get(3).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        mVibratorProviders.get(4).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        mVibratorProviders.get(4).setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK);
-
-        VibrationEffect composed = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                .compose();
-        CombinedVibration effect = CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addVibrator(2, VibrationEffect.createOneShot(10, 100))
-                .addVibrator(3, VibrationEffect.createWaveform(
-                        new long[]{10, 10}, new int[]{1, 2}, -1))
-                .addVibrator(4, composed)
-                .combine();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L));
-        verify(mManagerHooks).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks).onComplete(eq(1), eq(vibrationId));
-        verify(mControllerCallbacks).onComplete(eq(2), eq(vibrationId));
-        verify(mControllerCallbacks).onComplete(eq(3), eq(vibrationId));
-        verify(mControllerCallbacks).onComplete(eq(4), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        assertFalse(mControllers.get(1).isVibrating());
-        assertFalse(mControllers.get(2).isVibrating());
-        assertFalse(mControllers.get(3).isVibrating());
-        assertFalse(mControllers.get(4).isVibrating());
-
-        assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
-                mVibratorProviders.get(1).getEffectSegments(vibrationId));
-        assertEquals(Arrays.asList(expectedOneShot(10)),
-                mVibratorProviders.get(2).getEffectSegments(vibrationId));
-        assertEquals(expectedAmplitudes(100), mVibratorProviders.get(2).getAmplitudes());
-        assertEquals(Arrays.asList(expectedOneShot(20)),
-                mVibratorProviders.get(3).getEffectSegments(vibrationId));
-        assertEquals(expectedAmplitudes(1, 2), mVibratorProviders.get(3).getAmplitudes());
-        assertEquals(Arrays.asList(
-                expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0)),
-                mVibratorProviders.get(4).getEffectSegments(vibrationId));
-    }
-
-    @Test
-    public void vibrate_multipleSequential_runsVibrationInOrderWithDelays() throws Exception {
-        mockVibrators(1, 2, 3);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        mVibratorProviders.get(2).setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK);
-        mVibratorProviders.get(3).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-
-        VibrationEffect composed = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                .compose();
-        CombinedVibration effect = CombinedVibration.startSequential()
-                .addNext(3, VibrationEffect.get(VibrationEffect.EFFECT_CLICK), /* delay= */ 50)
-                .addNext(1, VibrationEffect.createOneShot(10, 100), /* delay= */ 50)
-                .addNext(2, composed, /* delay= */ 50)
-                .combine();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        waitForCompletion();
-        InOrder controllerVerifier = inOrder(mControllerCallbacks);
-        controllerVerifier.verify(mControllerCallbacks).onComplete(eq(3), eq(vibrationId));
-        controllerVerifier.verify(mControllerCallbacks).onComplete(eq(1), eq(vibrationId));
-        controllerVerifier.verify(mControllerCallbacks).onComplete(eq(2), eq(vibrationId));
-
-        InOrder batteryVerifier = inOrder(mManagerHooks);
-        batteryVerifier.verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L));
-        batteryVerifier.verify(mManagerHooks).noteVibratorOff(eq(UID));
-        batteryVerifier.verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L));
-        batteryVerifier.verify(mManagerHooks).noteVibratorOff(eq(UID));
-        batteryVerifier.verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L));
-        batteryVerifier.verify(mManagerHooks).noteVibratorOff(eq(UID));
-
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        assertFalse(mControllers.get(1).isVibrating());
-        assertFalse(mControllers.get(2).isVibrating());
-        assertFalse(mControllers.get(3).isVibrating());
-
-        assertEquals(Arrays.asList(expectedOneShot(10)),
-                mVibratorProviders.get(1).getEffectSegments(vibrationId));
-        assertEquals(expectedAmplitudes(100), mVibratorProviders.get(1).getAmplitudes());
-        assertEquals(Arrays.asList(
-                expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0)),
-                mVibratorProviders.get(2).getEffectSegments(vibrationId));
-        assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
-                mVibratorProviders.get(3).getEffectSegments(vibrationId));
-    }
-
-    @Test
-    public void vibrate_multipleSyncedCallbackTriggered_finishSteps() throws Exception {
-        int[] vibratorIds = new int[]{1, 2};
-        mockVibrators(vibratorIds);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        mVibratorProviders.get(1).setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK);
-        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        mVibratorProviders.get(2).setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK);
-        when(mManagerHooks.prepareSyncedVibration(anyLong(), eq(vibratorIds))).thenReturn(true);
-
-        VibrationEffect composed = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 100)
-                .compose();
-        CombinedVibration effect = CombinedVibration.createParallel(composed);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        when(mManagerHooks.triggerSyncedVibration(eq(vibrationId))).thenReturn(true);
-
-        assertTrue(waitUntil(
-                () -> !mVibratorProviders.get(1).getEffectSegments(vibrationId).isEmpty()
-                        && !mVibratorProviders.get(2).getEffectSegments(vibrationId).isEmpty(),
-                TEST_TIMEOUT_MILLIS));
-        conductor.notifySyncedVibrationComplete();
-        waitForCompletion();
-
-        long expectedCap = IVibratorManager.CAP_SYNC | IVibratorManager.CAP_PREPARE_COMPOSE;
-        verify(mManagerHooks).prepareSyncedVibration(eq(expectedCap), eq(vibratorIds));
-        verify(mManagerHooks).triggerSyncedVibration(eq(vibrationId));
-        verify(mManagerHooks, never()).cancelSyncedVibration();
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-
-        VibrationEffectSegment expected = expectedPrimitive(
-                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 100);
-        assertEquals(Arrays.asList(expected),
-                mVibratorProviders.get(1).getEffectSegments(vibrationId));
-        assertEquals(Arrays.asList(expected),
-                mVibratorProviders.get(2).getEffectSegments(vibrationId));
-    }
-
-    @Test
-    public void vibrate_multipleSynced_callsPrepareAndTriggerCallbacks() {
-        int[] vibratorIds = new int[]{1, 2, 3, 4};
-        mockVibrators(vibratorIds);
-        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        mVibratorProviders.get(4).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        mVibratorProviders.get(4).setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK);
-        when(mManagerHooks.prepareSyncedVibration(anyLong(), any())).thenReturn(true);
-        when(mManagerHooks.triggerSyncedVibration(anyLong())).thenReturn(true);
-
-        VibrationEffect composed = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                .compose();
-        CombinedVibration effect = CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addVibrator(2, VibrationEffect.createOneShot(10, 100))
-                .addVibrator(3, VibrationEffect.createWaveform(new long[]{10}, new int[]{100}, -1))
-                .addVibrator(4, composed)
-                .combine();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        long expectedCap = IVibratorManager.CAP_SYNC
-                | IVibratorManager.CAP_PREPARE_ON
-                | IVibratorManager.CAP_PREPARE_PERFORM
-                | IVibratorManager.CAP_PREPARE_COMPOSE
-                | IVibratorManager.CAP_MIXED_TRIGGER_ON
-                | IVibratorManager.CAP_MIXED_TRIGGER_PERFORM
-                | IVibratorManager.CAP_MIXED_TRIGGER_COMPOSE;
-        verify(mManagerHooks).prepareSyncedVibration(eq(expectedCap), eq(vibratorIds));
-        verify(mManagerHooks).triggerSyncedVibration(eq(vibrationId));
-        verify(mManagerHooks, never()).cancelSyncedVibration();
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-    }
-
-    @Test
-    public void vibrate_multipleSyncedPrepareFailed_skipTriggerStepAndVibrates() {
-        int[] vibratorIds = new int[]{1, 2};
-        mockVibrators(vibratorIds);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        when(mManagerHooks.prepareSyncedVibration(anyLong(), any())).thenReturn(false);
-
-        CombinedVibration effect = CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.createOneShot(10, 100))
-                .addVibrator(2, VibrationEffect.createWaveform(new long[]{5}, new int[]{200}, -1))
-                .combine();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        long expectedCap = IVibratorManager.CAP_SYNC | IVibratorManager.CAP_PREPARE_ON;
-        verify(mManagerHooks).prepareSyncedVibration(eq(expectedCap), eq(vibratorIds));
-        verify(mManagerHooks, never()).triggerSyncedVibration(eq(vibrationId));
-        verify(mManagerHooks, never()).cancelSyncedVibration();
-
-        assertEquals(Arrays.asList(expectedOneShot(10)),
-                mVibratorProviders.get(1).getEffectSegments(vibrationId));
-        assertEquals(expectedAmplitudes(100), mVibratorProviders.get(1).getAmplitudes());
-        assertEquals(Arrays.asList(expectedOneShot(5)),
-                mVibratorProviders.get(2).getEffectSegments(vibrationId));
-        assertEquals(expectedAmplitudes(200), mVibratorProviders.get(2).getAmplitudes());
-    }
-
-    @Test
-    public void vibrate_multipleSyncedTriggerFailed_cancelPreparedVibrationAndSkipSetAmplitude() {
-        int[] vibratorIds = new int[]{1, 2};
-        mockVibrators(vibratorIds);
-        mVibratorProviders.get(2).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        when(mManagerHooks.prepareSyncedVibration(anyLong(), any())).thenReturn(true);
-        when(mManagerHooks.triggerSyncedVibration(anyLong())).thenReturn(false);
-
-        CombinedVibration effect = CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.createOneShot(10, 100))
-                .addVibrator(2, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .combine();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        long expectedCap = IVibratorManager.CAP_SYNC
-                | IVibratorManager.CAP_PREPARE_ON
-                | IVibratorManager.CAP_PREPARE_PERFORM
-                | IVibratorManager.CAP_MIXED_TRIGGER_ON
-                | IVibratorManager.CAP_MIXED_TRIGGER_PERFORM;
-        verify(mManagerHooks).prepareSyncedVibration(eq(expectedCap), eq(vibratorIds));
-        verify(mManagerHooks).triggerSyncedVibration(eq(vibrationId));
-        verify(mManagerHooks).cancelSyncedVibration();
-        assertTrue(mVibratorProviders.get(1).getAmplitudes().isEmpty());
-    }
-
-    @Test
-    public void vibrate_multipleWaveforms_playsWaveformsInParallel() throws Exception {
-        mockVibrators(1, 2, 3);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        mVibratorProviders.get(3).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        CombinedVibration effect = CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.createWaveform(
-                        new long[]{5, 10, 10}, new int[]{1, 2, 3}, -1))
-                .addVibrator(2, VibrationEffect.createWaveform(
-                        new long[]{20, 60}, new int[]{4, 5}, -1))
-                .addVibrator(3, VibrationEffect.createWaveform(
-                        new long[]{60}, new int[]{6}, -1))
-                .combine();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        // All vibrators are turned on in parallel.
-        assertTrue(waitUntil(
-                () -> mControllers.get(1).isVibrating()
-                        && mControllers.get(2).isVibrating()
-                        && mControllers.get(3).isVibrating(),
-                TEST_TIMEOUT_MILLIS));
-
-        waitForCompletion();
-
-        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(80L));
-        verify(mManagerHooks).noteVibratorOff(eq(UID));
-        verify(mControllerCallbacks).onComplete(eq(1), eq(vibrationId));
-        verify(mControllerCallbacks).onComplete(eq(2), eq(vibrationId));
-        verify(mControllerCallbacks).onComplete(eq(3), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-        assertFalse(mControllers.get(1).isVibrating());
-        assertFalse(mControllers.get(2).isVibrating());
-        assertFalse(mControllers.get(3).isVibrating());
-
-        assertEquals(Arrays.asList(expectedOneShot(25)),
-                mVibratorProviders.get(1).getEffectSegments(vibrationId));
-        assertEquals(Arrays.asList(expectedOneShot(80)),
-                mVibratorProviders.get(2).getEffectSegments(vibrationId));
-        assertEquals(Arrays.asList(expectedOneShot(60)),
-                mVibratorProviders.get(3).getEffectSegments(vibrationId));
-        assertEquals(expectedAmplitudes(1, 2, 3), mVibratorProviders.get(1).getAmplitudes());
-        assertEquals(expectedAmplitudes(4, 5), mVibratorProviders.get(2).getAmplitudes());
-        assertEquals(expectedAmplitudes(6), mVibratorProviders.get(3).getAmplitudes());
-    }
-
-    @LargeTest
-    @Test
-    public void vibrate_withWaveform_totalVibrationTimeRespected() {
-        int totalDuration = 10_000; // 10s
-        int stepDuration = 25; // 25ms
-
-        // 25% of the first waveform step will be spent on the native on() call.
-        // 25% of each waveform step will be spent on the native setAmplitude() call..
-        mVibratorProviders.get(VIBRATOR_ID).setOnLatency(stepDuration / 4);
-        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        int stepCount = totalDuration / stepDuration;
-        long[] timings = new long[stepCount];
-        int[] amplitudes = new int[stepCount];
-        Arrays.fill(timings, stepDuration);
-        Arrays.fill(amplitudes, VibrationEffect.DEFAULT_AMPLITUDE);
-        VibrationEffect effect = VibrationEffect.createWaveform(timings, amplitudes, -1);
-
-        startThreadAndDispatcher(effect);
-        long startTime = SystemClock.elapsedRealtime();
-
-        waitForCompletion(totalDuration + TEST_TIMEOUT_MILLIS);
-        long delay = Math.abs(SystemClock.elapsedRealtime() - startTime - totalDuration);
-
-        // Allow some delay for thread scheduling and callback triggering.
-        int maxDelay = (int) (0.05 * totalDuration); // < 5% of total duration
-        assertTrue("Waveform with perceived delay of " + delay + "ms,"
-                        + " expected less than " + maxDelay + "ms",
-                delay < maxDelay);
-    }
-
-    @LargeTest
-    @Test
-    public void vibrate_cancelSlowVibrator_cancelIsNotBlockedByVibrationThread() throws Exception {
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-
-        long latency = 5_000; // 5s
-        fakeVibrator.setOnLatency(latency);
-
-        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        assertTrue(waitUntil(() -> !fakeVibrator.getEffectSegments(vibrationId).isEmpty(),
-                TEST_TIMEOUT_MILLIS));
-        assertTrue(mThread.isRunningVibrationId(vibrationId));
-
-        // Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
-        // fail at waitForCompletion(cancellingThread).
-        Thread cancellingThread = new Thread(
-                () -> conductor.notifyCancelled(
-                        new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
-                        /* immediate= */ false));
-        cancellingThread.start();
-
-        // Cancelling the vibration should be fast and return right away, even if the thread is
-        // stuck at the slow call to the vibrator.
-        waitForCompletion(/* timeout= */ 50);
-
-        // After the vibrator call ends the vibration is cancelled and the vibrator is turned off.
-        waitForCompletion(/* timeout= */ latency + TEST_TIMEOUT_MILLIS);
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_USER);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-    }
-
-    @Test
-    public void vibrate_multiplePredefinedCancel_cancelsVibrationImmediately() throws Exception {
-        mockVibrators(1, 2);
-        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        mVibratorProviders.get(2).setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK);
-
-        CombinedVibration effect = CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addVibrator(2, VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 100)
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 100)
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 100)
-                        .compose())
-                .combine();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        assertTrue(waitUntil(() -> mControllers.get(2).isVibrating(),
-                TEST_TIMEOUT_MILLIS));
-        assertTrue(mThread.isRunningVibrationId(vibrationId));
-
-        // Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
-        // fail at waitForCompletion(vibrationThread) if the vibration not cancelled immediately.
-        Thread cancellingThread = new Thread(
-                () -> conductor.notifyCancelled(
-                        new Vibration.EndInfo(
-                                Vibration.Status.CANCELLED_BY_SCREEN_OFF),
-                        /* immediate= */ false));
-        cancellingThread.start();
-
-        waitForCompletion(/* timeout= */ 50);
-        cancellingThread.join();
-
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_SCREEN_OFF);
-        assertFalse(mControllers.get(1).isVibrating());
-        assertFalse(mControllers.get(2).isVibrating());
-    }
-
-    @Test
-    public void vibrate_multipleWaveformCancel_cancelsVibrationImmediately() throws Exception {
-        mockVibrators(1, 2);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        CombinedVibration effect = CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.createWaveform(
-                        new long[]{100, 100}, new int[]{1, 2}, 0))
-                .addVibrator(2, VibrationEffect.createOneShot(100, 100))
-                .combine();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        assertTrue(waitUntil(() -> mControllers.get(1).isVibrating()
-                        && mControllers.get(2).isVibrating(),
-                TEST_TIMEOUT_MILLIS));
-        assertTrue(mThread.isRunningVibrationId(vibrationId));
-
-        // Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
-        // fail at waitForCompletion(vibrationThread) if the vibration not cancelled immediately.
-        Thread cancellingThread = new Thread(
-                () -> conductor.notifyCancelled(
-                        new Vibration.EndInfo(
-                                Vibration.Status.CANCELLED_BY_SCREEN_OFF),
-                        /* immediate= */ false));
-        cancellingThread.start();
-
-        waitForCompletion(/* timeout= */ 50);
-        cancellingThread.join();
-
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_SCREEN_OFF);
-        assertFalse(mControllers.get(1).isVibrating());
-        assertFalse(mControllers.get(2).isVibrating());
-    }
-
-    @Test
-    public void vibrate_binderDied_cancelsVibration() throws Exception {
-        VibrationEffect effect = VibrationEffect.createWaveform(new long[]{5}, new int[]{100}, 0);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        assertTrue(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
-                TEST_TIMEOUT_MILLIS));
-        assertTrue(mThread.isRunningVibrationId(vibrationId));
-
-        conductor.binderDied();
-        waitForCompletion();
-
-        verify(mVibrationToken).linkToDeath(same(conductor), eq(0));
-        verify(mVibrationToken).unlinkToDeath(same(conductor), eq(0));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BINDER_DIED);
-        assertFalse(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId).isEmpty());
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-    }
-
-    @Test
-    public void vibrate_waveformWithRampDown_addsRampDownAfterVibrationCompleted() {
-        when(mVibrationConfigMock.getRampDownDurationMs()).thenReturn(15);
-        mEffectAdapter = new DeviceVibrationEffectAdapter(mVibrationSettings);
-        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                new long[]{5, 5, 5}, new int[]{60, 120, 240}, -1);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-
-        // Duration extended for 5 + 5 + 5 + 15.
-        assertEquals(Arrays.asList(expectedOneShot(30)),
-                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
-        List<Float> amplitudes = mVibratorProviders.get(VIBRATOR_ID).getAmplitudes();
-        assertTrue(amplitudes.size() > 3);
-        assertEquals(expectedAmplitudes(60, 120, 240), amplitudes.subList(0, 3));
-        for (int i = 3; i < amplitudes.size(); i++) {
-            assertTrue(amplitudes.get(i) < amplitudes.get(i - 1));
-        }
-    }
-
-    @Test
-    public void vibrate_waveformWithRampDown_triggersCallbackWhenOriginalVibrationEnds() {
-        when(mVibrationConfigMock.getRampDownDurationMs()).thenReturn(10_000);
-        mEffectAdapter = new DeviceVibrationEffectAdapter(mVibrationSettings);
-        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        VibrationEffect effect = VibrationEffect.createOneShot(10, 200);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-
-        // Vibration completed but vibrator not yet released.
-        verify(mManagerHooks, timeout(TEST_TIMEOUT_MILLIS)).onVibrationCompleted(eq(vibrationId),
-                eq(new Vibration.EndInfo(Vibration.Status.FINISHED)));
-        verify(mManagerHooks, never()).onVibrationThreadReleased(anyLong());
-
-        // Thread still running ramp down.
-        assertTrue(mThread.isRunningVibrationId(vibrationId));
-
-        // Duration extended for 10 + 10000.
-        assertEquals(Arrays.asList(expectedOneShot(10_010)),
-                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
-
-        // Will stop the ramp down right away.
-        conductor.notifyCancelled(
-                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_SETTINGS_UPDATE),
-                /* immediate= */ true);
-        waitForCompletion();
-
-        // Does not cancel already finished vibration, but releases vibrator.
-        verify(mManagerHooks, never()).onVibrationCompleted(eq(vibrationId),
-                eq(new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_SETTINGS_UPDATE)));
-        verify(mManagerHooks).onVibrationThreadReleased(vibrationId);
-    }
-
-    @Test
-    public void vibrate_waveformCancelledWithRampDown_addsRampDownAfterVibrationCancelled()
-            throws Exception {
-        when(mVibrationConfigMock.getRampDownDurationMs()).thenReturn(15);
-        mEffectAdapter = new DeviceVibrationEffectAdapter(mVibrationSettings);
-        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        VibrationEffect effect = VibrationEffect.createOneShot(10_000, 240);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        assertTrue(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
-                TEST_TIMEOUT_MILLIS));
-        conductor.notifyCancelled(
-                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
-                /* immediate= */ false);
-        waitForCompletion();
-
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_USER);
-
-        // Duration extended for 10000 + 15.
-        assertEquals(Arrays.asList(expectedOneShot(10_015)),
-                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
-        List<Float> amplitudes = mVibratorProviders.get(VIBRATOR_ID).getAmplitudes();
-        assertTrue(amplitudes.size() > 1);
-        for (int i = 1; i < amplitudes.size(); i++) {
-            assertTrue(amplitudes.get(i) < amplitudes.get(i - 1));
-        }
-    }
-
-    @Test
-    public void vibrate_predefinedWithRampDown_doesNotAddRampDown() {
-        when(mVibrationConfigMock.getRampDownDurationMs()).thenReturn(15);
-        mEffectAdapter = new DeviceVibrationEffectAdapter(mVibrationSettings);
-        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        mVibratorProviders.get(VIBRATOR_ID).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-
-        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-
-        assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
-                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
-        assertTrue(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes().isEmpty());
-    }
-
-    @Test
-    public void vibrate_composedWithRampDown_doesNotAddRampDown() {
-        when(mVibrationConfigMock.getRampDownDurationMs()).thenReturn(15);
-        mEffectAdapter = new DeviceVibrationEffectAdapter(mVibrationSettings);
-        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL,
-                IVibrator.CAP_COMPOSE_EFFECTS);
-        mVibratorProviders.get(VIBRATOR_ID).setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK);
-
-        VibrationEffect effect = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                .compose();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-
-        assertEquals(
-                Arrays.asList(expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0)),
-                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
-        assertTrue(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes().isEmpty());
-    }
-
-    @Test
-    public void vibrate_pwleWithRampDown_doesNotAddRampDown() {
-        when(mVibrationConfigMock.getRampDownDurationMs()).thenReturn(15);
-        mEffectAdapter = new DeviceVibrationEffectAdapter(mVibrationSettings);
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL,
-                IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
-        fakeVibrator.setMinFrequency(100);
-        fakeVibrator.setResonantFrequency(150);
-        fakeVibrator.setFrequencyResolution(50);
-        fakeVibrator.setMaxAmplitudes(1, 1, 1);
-        fakeVibrator.setPwleSizeMax(2);
-
-        VibrationEffect effect = VibrationEffect.startWaveform()
-                .addTransition(Duration.ofMillis(1), targetAmplitude(1))
-                .build();
-        VibrationStepConductor conductor = startThreadAndDispatcher(effect);
-        long vibrationId = conductor.getVibration().id;
-        waitForCompletion();
-
-        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
-        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
-
-        assertEquals(Arrays.asList(expectedRamp(0, 1, 150, 150, 1)),
-                fakeVibrator.getEffectSegments(vibrationId));
-        assertTrue(fakeVibrator.getAmplitudes().isEmpty());
-    }
-
-    @Test
-    public void vibrate_multipleVibrations_withCancel() throws Exception {
-        mVibratorProviders.get(VIBRATOR_ID).setSupportedEffects(
-                VibrationEffect.EFFECT_CLICK, VibrationEffect.EFFECT_TICK);
-        mVibratorProviders.get(VIBRATOR_ID).setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK);
-        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL,
-                IVibrator.CAP_COMPOSE_EFFECTS);
-
-        // A simple effect, followed by a repeating effect that gets cancelled, followed by another
-        // simple effect.
-        VibrationEffect effect1 = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
-        VibrationEffect effect2 = VibrationEffect.startComposition()
-                .repeatEffectIndefinitely(VibrationEffect.get(VibrationEffect.EFFECT_TICK))
-                .compose();
-        VibrationEffect effect3 = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                .compose();
-        VibrationEffect effect4 = VibrationEffect.createOneShot(8000, 100);
-        VibrationEffect effect5 = VibrationEffect.createOneShot(20, 222);
-
-        VibrationStepConductor conductor1 = startThreadAndDispatcher(effect1);
-        long vibrationId1 = conductor1.getVibration().id;
-        waitForCompletion();
-        verify(mControllerCallbacks).onComplete(VIBRATOR_ID, vibrationId1);
-        verifyCallbacksTriggered(vibrationId1, Vibration.Status.FINISHED);
-
-        VibrationStepConductor conductor2 = startThreadAndDispatcher(effect2);
-        long vibrationId2 = conductor2.getVibration().id;
-        // Effect2 won't complete on its own. Cancel it after a couple of repeats.
-        Thread.sleep(150);  // More than two TICKs.
-        conductor2.notifyCancelled(
-                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
-                /* immediate= */ false);
-        waitForCompletion();
-
-        VibrationStepConductor conductor3 = startThreadAndDispatcher(effect3);
-        long vibrationId3 = conductor3.getVibration().id;
-        waitForCompletion();
-
-        // Effect4 is a long oneshot, but it gets cancelled as fast as possible.
-        long start4 = System.currentTimeMillis();
-        VibrationStepConductor conductor4 = startThreadAndDispatcher(effect4);
-        long vibrationId4 = conductor4.getVibration().id;
-        conductor4.notifyCancelled(
-                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_SCREEN_OFF),
-                /* immediate= */ true);
-        waitForCompletion();
-        long duration4 = System.currentTimeMillis() - start4;
-
-        // Effect5 is to show that things keep going after the immediate cancel.
-        VibrationStepConductor conductor5 = startThreadAndDispatcher(effect5);
-        long vibrationId5 = conductor5.getVibration().id;
-        waitForCompletion();
-
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
-        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-
-        // Effect1
-        verify(mControllerCallbacks).onComplete(VIBRATOR_ID, vibrationId1);
-        verifyCallbacksTriggered(vibrationId1, Vibration.Status.FINISHED);
-
-        assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
-                fakeVibrator.getEffectSegments(vibrationId1));
-
-        // Effect2: repeating, cancelled.
-        verify(mControllerCallbacks, atLeast(2)).onComplete(VIBRATOR_ID, vibrationId2);
-        verifyCallbacksTriggered(vibrationId2, Vibration.Status.CANCELLED_BY_USER);
-
-        // The exact count of segments might vary, so just check that there's more than 2 and
-        // all elements are the same segment.
-        List<VibrationEffectSegment> actualSegments2 = fakeVibrator.getEffectSegments(vibrationId2);
-        assertTrue(actualSegments2.size() + " > 2", actualSegments2.size() > 2);
-        for (VibrationEffectSegment segment : actualSegments2) {
-            assertEquals(expectedPrebaked(VibrationEffect.EFFECT_TICK), segment);
-        }
-
-        // Effect3
-        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId3));
-        verifyCallbacksTriggered(vibrationId3, Vibration.Status.FINISHED);
-        assertEquals(Arrays.asList(
-                        expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0)),
-                fakeVibrator.getEffectSegments(vibrationId3));
-
-        // Effect4: cancelled quickly.
-        verifyCallbacksTriggered(vibrationId4, Vibration.Status.CANCELLED_BY_SCREEN_OFF);
-        assertTrue("Tested duration=" + duration4, duration4 < 2000);
-
-        // Effect5: normal oneshot. Don't worry about amplitude, as effect4 may or may not have
-        // started.
-
-        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId5));
-        verifyCallbacksTriggered(vibrationId5, Vibration.Status.FINISHED);
-
-        assertEquals(Arrays.asList(expectedOneShot(20)),
-                fakeVibrator.getEffectSegments(vibrationId5));
-    }
-
-    private void mockVibrators(int... vibratorIds) {
-        for (int vibratorId : vibratorIds) {
-            mVibratorProviders.put(vibratorId,
-                    new FakeVibratorControllerProvider(mTestLooper.getLooper()));
-        }
-    }
-
-    private VibrationStepConductor startThreadAndDispatcher(VibrationEffect effect) {
-        return startThreadAndDispatcher(CombinedVibration.createParallel(effect));
-    }
-
-    private VibrationStepConductor startThreadAndDispatcher(CombinedVibration effect) {
-        return startThreadAndDispatcher(createVibration(effect));
-    }
-
-    private VibrationStepConductor startThreadAndDispatcher(HalVibration vib) {
-        mControllers = createVibratorControllers();
-        VibrationStepConductor conductor = new VibrationStepConductor(vib, mVibrationSettings,
-                mEffectAdapter, mControllers, mManagerHooks);
-        doAnswer(answer -> {
-            conductor.notifyVibratorComplete(answer.getArgument(0));
-            return null;
-        }).when(mControllerCallbacks).onComplete(anyInt(), eq(vib.id));
-        assertTrue(mThread.runVibrationOnVibrationThread(conductor));
-        return conductor;
-    }
-
-    private boolean waitUntil(BooleanSupplier predicate, long timeout)
-            throws InterruptedException {
-        long timeoutTimestamp = SystemClock.uptimeMillis() + timeout;
-        boolean predicateResult = false;
-        while (!predicateResult && SystemClock.uptimeMillis() < timeoutTimestamp) {
-            Thread.sleep(10);
-            predicateResult = predicate.getAsBoolean();
-        }
-        return predicateResult;
-    }
-
-    private void waitForCompletion() {
-        waitForCompletion(TEST_TIMEOUT_MILLIS);
-    }
-
-    private void waitForCompletion(long timeout) {
-        mThread.waitForThreadIdle(timeout);
-        mTestLooper.dispatchAll();  // Flush callbacks
-    }
-
-    private HalVibration createVibration(CombinedVibration effect) {
-        return new HalVibration(mVibrationToken, effect,
-                new Vibration.CallerInfo(ATTRS, UID, DISPLAY_ID, PACKAGE_NAME, "reason"));
-    }
-
-    private SparseArray<VibratorController> createVibratorControllers() {
-        SparseArray<VibratorController> array = new SparseArray<>();
-        for (Map.Entry<Integer, FakeVibratorControllerProvider> e : mVibratorProviders.entrySet()) {
-            int id = e.getKey();
-            array.put(id, e.getValue().newVibratorController(id, mControllerCallbacks));
-        }
-        // Start a looper for the vibrationcontrollers if it's not already running.
-        // TestLooper.AutoDispatchThread has a fixed 1s duration. Use a custom auto-dispatcher.
-        if (mCustomTestLooperDispatcher == null) {
-            mCustomTestLooperDispatcher = new TestLooperAutoDispatcher(mTestLooper);
-            mCustomTestLooperDispatcher.start();
-        }
-        return array;
-    }
-
-    private VibrationEffectSegment expectedOneShot(long millis) {
-        return new StepSegment(VibrationEffect.DEFAULT_AMPLITUDE,
-                /* frequencyHz= */ 0, (int) millis);
-    }
-
-    private VibrationEffectSegment expectedPrebaked(int effectId) {
-        return new PrebakedSegment(effectId, false, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-    }
-
-    private VibrationEffectSegment expectedPrimitive(int primitiveId, float scale, int delay) {
-        return new PrimitiveSegment(primitiveId, scale, delay);
-    }
-
-    private VibrationEffectSegment expectedRamp(float amplitude, float frequencyHz, int duration) {
-        return expectedRamp(amplitude, amplitude, frequencyHz, frequencyHz, duration);
-    }
-
-    private VibrationEffectSegment expectedRamp(float startAmplitude, float endAmplitude,
-            float startFrequencyHz, float endFrequencyHz, int duration) {
-        return new RampSegment(startAmplitude, endAmplitude, startFrequencyHz, endFrequencyHz,
-                duration);
-    }
-
-    private List<Float> expectedAmplitudes(int... amplitudes) {
-        return Arrays.stream(amplitudes)
-                .mapToObj(amplitude -> amplitude / 255f)
-                .collect(Collectors.toList());
-    }
-
-    private void verifyCallbacksTriggered(long vibrationId, Vibration.Status expectedStatus) {
-        verifyCallbacksTriggered(vibrationId, new Vibration.EndInfo(expectedStatus));
-    }
-
-    private void verifyCallbacksTriggered(long vibrationId, Vibration.EndInfo expectedEndInfo) {
-        verify(mManagerHooks).onVibrationCompleted(eq(vibrationId), eq(expectedEndInfo));
-        verify(mManagerHooks).onVibrationThreadReleased(vibrationId);
-    }
-
-    private static final class TestLooperAutoDispatcher extends Thread {
-        private final TestLooper mTestLooper;
-        private boolean mCancelled;
-
-        TestLooperAutoDispatcher(TestLooper testLooper) {
-            mTestLooper = testLooper;
-        }
-
-        @Override
-        public void run() {
-            while (!mCancelled) {
-                mTestLooper.dispatchAll();
-                try {
-                    Thread.sleep(10);
-                } catch (InterruptedException e) {
-                    return;
-                }
-            }
-        }
-
-        public void cancel() {
-            mCancelled = true;
-        }
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibratorControllerTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibratorControllerTest.java
deleted file mode 100644
index f2c1874..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/VibratorControllerTest.java
+++ /dev/null
@@ -1,327 +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.server.vibrator;
-
-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.ArgumentMatchers.anyBoolean;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.notNull;
-import static org.mockito.Mockito.inOrder;
-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.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
-
-import android.content.ContentResolver;
-import android.content.ContextWrapper;
-import android.hardware.vibrator.Braking;
-import android.hardware.vibrator.IVibrator;
-import android.os.IBinder;
-import android.os.IVibratorStateListener;
-import android.os.VibrationEffect;
-import android.os.VibratorInfo;
-import android.os.test.TestLooper;
-import android.os.vibrator.PrebakedSegment;
-import android.os.vibrator.PrimitiveSegment;
-import android.os.vibrator.RampSegment;
-import android.platform.test.annotations.Presubmit;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.internal.util.test.FakeSettingsProvider;
-import com.android.internal.util.test.FakeSettingsProviderRule;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.mockito.InOrder;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
-
-/**
- * Tests for {@link VibratorController}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:VibratorControllerTest
- */
-@Presubmit
-public class VibratorControllerTest {
-    private static final int VIBRATOR_ID = 0;
-
-    @Rule public MockitoRule rule = MockitoJUnit.rule();
-    @Rule public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule();
-
-    @Mock private VibratorController.OnVibrationCompleteListener mOnCompleteListenerMock;
-    @Mock private VibratorController.NativeWrapper mNativeWrapperMock;
-    @Mock private IVibratorStateListener mVibratorStateListenerMock;
-    @Mock private IBinder mVibratorStateListenerBinderMock;
-
-    private TestLooper mTestLooper;
-    private ContextWrapper mContextSpy;
-
-    @Before
-    public void setUp() throws Exception {
-        mTestLooper = new TestLooper();
-        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
-
-        ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy);
-        when(mContextSpy.getContentResolver()).thenReturn(contentResolver);
-        when(mVibratorStateListenerMock.asBinder()).thenReturn(mVibratorStateListenerBinderMock);
-        mockVibratorCapabilities(0);
-    }
-
-    private VibratorController createController() {
-        return new VibratorController(VIBRATOR_ID, mOnCompleteListenerMock, mNativeWrapperMock);
-    }
-
-    @Test
-    public void createController_initializesNativeWrapper() {
-        VibratorController controller = createController();
-        assertEquals(VIBRATOR_ID, controller.getVibratorInfo().getId());
-        verify(mNativeWrapperMock).init(eq(VIBRATOR_ID), notNull());
-    }
-
-    @Test
-    public void isAvailable_withVibratorHalPresent_returnsTrue() {
-        when(mNativeWrapperMock.isAvailable()).thenReturn(true);
-        assertTrue(createController().isAvailable());
-    }
-
-    @Test
-    public void isAvailable_withNoVibratorHalPresent_returnsFalse() {
-        when(mNativeWrapperMock.isAvailable()).thenReturn(false);
-        assertFalse(createController().isAvailable());
-    }
-
-    @Test
-    public void hasCapability_withSupport_returnsTrue() {
-        mockVibratorCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        assertTrue(createController().hasCapability(IVibrator.CAP_AMPLITUDE_CONTROL));
-    }
-
-    @Test
-    public void hasCapability_withNoSupport_returnsFalse() {
-        assertFalse(createController().hasCapability(IVibrator.CAP_ALWAYS_ON_CONTROL));
-        assertFalse(createController().hasCapability(IVibrator.CAP_AMPLITUDE_CONTROL));
-        assertFalse(createController().hasCapability(IVibrator.CAP_COMPOSE_EFFECTS));
-        assertFalse(createController().hasCapability(IVibrator.CAP_EXTERNAL_CONTROL));
-        assertFalse(createController().hasCapability(IVibrator.CAP_ON_CALLBACK));
-    }
-
-    @Test
-    public void setExternalControl_withCapability_enablesExternalControl() {
-        mockVibratorCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
-        VibratorController controller = createController();
-        assertFalse(controller.isUnderExternalControl());
-
-        controller.setExternalControl(true);
-        assertTrue(controller.isUnderExternalControl());
-
-        controller.setExternalControl(false);
-        assertFalse(controller.isUnderExternalControl());
-
-        InOrder inOrderVerifier = inOrder(mNativeWrapperMock);
-        inOrderVerifier.verify(mNativeWrapperMock).setExternalControl(eq(true));
-        inOrderVerifier.verify(mNativeWrapperMock).setExternalControl(eq(false));
-    }
-
-    @Test
-    public void setExternalControl_withNoCapability_ignoresExternalControl() {
-        VibratorController controller = createController();
-        assertFalse(controller.isUnderExternalControl());
-
-        controller.setExternalControl(true);
-        assertFalse(controller.isUnderExternalControl());
-
-        verify(mNativeWrapperMock, never()).setExternalControl(anyBoolean());
-    }
-
-    @Test
-    public void updateAlwaysOn_withCapability_enablesAlwaysOnEffect() {
-        mockVibratorCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
-        PrebakedSegment prebaked = createPrebaked(VibrationEffect.EFFECT_CLICK,
-                VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-        createController().updateAlwaysOn(1, prebaked);
-
-        verify(mNativeWrapperMock).alwaysOnEnable(
-                eq(1L), eq((long) VibrationEffect.EFFECT_CLICK),
-                eq((long) VibrationEffect.EFFECT_STRENGTH_MEDIUM));
-    }
-
-    @Test
-    public void updateAlwaysOn_withNullEffect_disablesAlwaysOnEffect() {
-        mockVibratorCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
-        createController().updateAlwaysOn(1, null);
-        verify(mNativeWrapperMock).alwaysOnDisable(eq(1L));
-    }
-
-    @Test
-    public void updateAlwaysOn_withoutCapability_ignoresEffect() {
-        PrebakedSegment prebaked = createPrebaked(VibrationEffect.EFFECT_CLICK,
-                VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-        createController().updateAlwaysOn(1, prebaked);
-
-        verify(mNativeWrapperMock, never()).alwaysOnDisable(anyLong());
-        verify(mNativeWrapperMock, never()).alwaysOnEnable(anyLong(), anyLong(), anyLong());
-    }
-
-    @Test
-    public void on_withDuration_turnsVibratorOn() {
-        when(mNativeWrapperMock.on(anyLong(), anyLong())).thenAnswer(args -> args.getArgument(0));
-        VibratorController controller = createController();
-        controller.on(100, 10);
-
-        assertTrue(controller.isVibrating());
-        verify(mNativeWrapperMock).on(eq(100L), eq(10L));
-    }
-
-    @Test
-    public void on_withPrebaked_performsEffect() {
-        when(mNativeWrapperMock.perform(anyLong(), anyLong(), anyLong())).thenReturn(10L);
-        VibratorController controller = createController();
-
-        PrebakedSegment prebaked = createPrebaked(VibrationEffect.EFFECT_CLICK,
-                VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-        assertEquals(10L, controller.on(prebaked, 11));
-
-        assertTrue(controller.isVibrating());
-        verify(mNativeWrapperMock).perform(eq((long) VibrationEffect.EFFECT_CLICK),
-                eq((long) VibrationEffect.EFFECT_STRENGTH_MEDIUM), eq(11L));
-    }
-
-    @Test
-    public void on_withComposed_performsEffect() {
-        mockVibratorCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        when(mNativeWrapperMock.compose(any(), anyLong())).thenReturn(15L);
-        VibratorController controller = createController();
-
-        PrimitiveSegment[] primitives = new PrimitiveSegment[]{
-                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_CLICK, 0.5f, 10)
-        };
-        assertEquals(15L, controller.on(primitives, 12));
-
-        assertTrue(controller.isVibrating());
-        verify(mNativeWrapperMock).compose(eq(primitives), eq(12L));
-    }
-
-    @Test
-    public void on_withComposedPwle_performsEffect() {
-        mockVibratorCapabilities(IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
-        when(mNativeWrapperMock.composePwle(any(), anyInt(), anyLong())).thenReturn(15L);
-        VibratorController controller = createController();
-
-        RampSegment[] primitives = new RampSegment[]{
-                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 1,
-                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 200, /* duration= */ 10)
-        };
-        assertEquals(15L, controller.on(primitives, 12));
-        assertTrue(controller.isVibrating());
-
-        verify(mNativeWrapperMock).composePwle(eq(primitives), eq(Braking.NONE), eq(12L));
-    }
-
-    @Test
-    public void off_turnsOffVibrator() {
-        when(mNativeWrapperMock.on(anyLong(), anyLong())).thenAnswer(args -> args.getArgument(0));
-        VibratorController controller = createController();
-
-        controller.on(100, 1);
-        assertTrue(controller.isVibrating());
-
-        controller.off();
-        controller.off();
-        assertFalse(controller.isVibrating());
-        verify(mNativeWrapperMock, times(2)).off();
-    }
-
-    @Test
-    public void reset_turnsOffVibratorAndDisablesExternalControl() {
-        mockVibratorCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
-        when(mNativeWrapperMock.on(anyLong(), anyLong())).thenAnswer(args -> args.getArgument(0));
-        VibratorController controller = createController();
-
-        controller.on(100, 1);
-        assertTrue(controller.isVibrating());
-
-        controller.reset();
-        assertFalse(controller.isVibrating());
-        verify(mNativeWrapperMock).setExternalControl(eq(false));
-        verify(mNativeWrapperMock).off();
-    }
-
-    @Test
-    public void registerVibratorStateListener_callbacksAreTriggered() throws Exception {
-        when(mNativeWrapperMock.on(anyLong(), anyLong())).thenAnswer(args -> args.getArgument(0));
-        VibratorController controller = createController();
-
-        controller.registerVibratorStateListener(mVibratorStateListenerMock);
-        controller.on(10, 1);
-        controller.on(100, 2);
-        controller.off();
-        controller.off();
-
-        InOrder inOrderVerifier = inOrder(mVibratorStateListenerMock);
-        // First notification done when listener is registered.
-        inOrderVerifier.verify(mVibratorStateListenerMock).onVibrating(false);
-        inOrderVerifier.verify(mVibratorStateListenerMock).onVibrating(eq(true));
-        inOrderVerifier.verify(mVibratorStateListenerMock).onVibrating(eq(false));
-        inOrderVerifier.verifyNoMoreInteractions();
-    }
-
-    @Test
-    public void unregisterVibratorStateListener_callbackNotTriggeredAfter() throws Exception {
-        when(mNativeWrapperMock.on(anyLong(), anyLong())).thenAnswer(args -> args.getArgument(0));
-        VibratorController controller = createController();
-
-        controller.registerVibratorStateListener(mVibratorStateListenerMock);
-        verify(mVibratorStateListenerMock).onVibrating(false);
-
-        controller.on(10, 1);
-        verify(mVibratorStateListenerMock).onVibrating(true);
-
-        controller.unregisterVibratorStateListener(mVibratorStateListenerMock);
-        Mockito.clearInvocations(mVibratorStateListenerMock);
-
-        controller.on(10, 1);
-        verifyNoMoreInteractions(mVibratorStateListenerMock);
-    }
-
-    private void mockVibratorCapabilities(int capabilities) {
-        VibratorInfo.FrequencyProfile frequencyProfile = new VibratorInfo.FrequencyProfile(
-                Float.NaN, Float.NaN, Float.NaN, null);
-        when(mNativeWrapperMock.getInfo(any(VibratorInfo.Builder.class)))
-                .then(invocation -> {
-                    ((VibratorInfo.Builder) invocation.getArgument(0))
-                            .setCapabilities(capabilities)
-                            .setFrequencyProfile(frequencyProfile);
-                    return true;
-                });
-    }
-
-    private PrebakedSegment createPrebaked(int effectId, int effectStrength) {
-        return new PrebakedSegment(effectId, /* shouldFallback= */ false, effectStrength);
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibratorFrameworkStatsLoggerTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibratorFrameworkStatsLoggerTest.java
deleted file mode 100644
index c1ab1db..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/VibratorFrameworkStatsLoggerTest.java
+++ /dev/null
@@ -1,127 +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.server.vibrator;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import android.os.Handler;
-import android.os.test.TestLooper;
-import android.platform.test.annotations.Presubmit;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
-
-/**
- * Tests for {@link VibratorFrameworkStatsLogger}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:VibratorFrameworkStatsLoggerTest
- */
-@Presubmit
-public class VibratorFrameworkStatsLoggerTest {
-
-    @Rule public MockitoRule rule = MockitoJUnit.rule();
-
-    private TestLooper mTestLooper;
-    private VibratorFrameworkStatsLogger mLogger;
-
-    @Before
-    public void setUp() {
-        mTestLooper = new TestLooper();
-    }
-
-    @Test
-    public void writeVibrationReportedAsync_afterMinInterval_writesRightAway() {
-        setUpLogger(/* minIntervalMillis= */ 10, /* queueMaxSize= */ 10);
-
-        VibrationStats.StatsInfo firstStats = newEmptyStatsInfo();
-        assertFalse(firstStats.isWritten());
-
-        mLogger.writeVibrationReportedAsync(firstStats);
-        mTestLooper.dispatchAll();
-        assertTrue(firstStats.isWritten());
-    }
-
-    @Test
-    public void writeVibrationReportedAsync_rightAfterLogging_schedulesToRunAfterRemainingDelay() {
-        setUpLogger(/* minIntervalMillis= */ 100, /* queueMaxSize= */ 10);
-
-        VibrationStats.StatsInfo firstStats = newEmptyStatsInfo();
-        VibrationStats.StatsInfo secondStats = newEmptyStatsInfo();
-        assertFalse(firstStats.isWritten());
-        assertFalse(secondStats.isWritten());
-
-        // Write first message at current SystemClock.uptimeMillis
-        mLogger.writeVibrationReportedAsync(firstStats);
-        mTestLooper.dispatchAll();
-        assertTrue(firstStats.isWritten());
-
-        // Second message is not written right away, it needs to wait the configured interval.
-        mLogger.writeVibrationReportedAsync(secondStats);
-        mTestLooper.dispatchAll();
-        assertFalse(secondStats.isWritten());
-
-        // Second message is written after delay passes.
-        mTestLooper.moveTimeForward(100);
-        mTestLooper.dispatchAll();
-        assertTrue(secondStats.isWritten());
-    }
-
-    @Test
-    public void writeVibrationReportedAsync_tooFast_logsUsingIntervalAndDropsMessagesFromQueue() {
-        setUpLogger(/* minIntervalMillis= */ 100, /* queueMaxSize= */ 2);
-
-        VibrationStats.StatsInfo firstStats = newEmptyStatsInfo();
-        VibrationStats.StatsInfo secondStats = newEmptyStatsInfo();
-        VibrationStats.StatsInfo thirdStats = newEmptyStatsInfo();
-
-        mLogger.writeVibrationReportedAsync(firstStats);
-        mLogger.writeVibrationReportedAsync(secondStats);
-        mLogger.writeVibrationReportedAsync(thirdStats);
-
-        // Only first message is logged.
-        mTestLooper.dispatchAll();
-        assertTrue(firstStats.isWritten());
-        assertFalse(secondStats.isWritten());
-        assertFalse(thirdStats.isWritten());
-
-        // Wait one interval to check only the second one is logged.
-        mTestLooper.moveTimeForward(100);
-        mTestLooper.dispatchAll();
-        assertTrue(secondStats.isWritten());
-        assertFalse(thirdStats.isWritten());
-
-        // Wait a long interval to check the third one was dropped and will never be logged.
-        mTestLooper.moveTimeForward(1_000);
-        mTestLooper.dispatchAll();
-        assertFalse(thirdStats.isWritten());
-    }
-
-    private void setUpLogger(int minIntervalMillis, int queueMaxSize) {
-        mLogger = new VibratorFrameworkStatsLogger(new Handler(mTestLooper.getLooper()),
-                minIntervalMillis, queueMaxSize);
-    }
-
-    private static VibrationStats.StatsInfo newEmptyStatsInfo() {
-        return new VibrationStats.StatsInfo(
-                0, 0, 0, Vibration.Status.FINISHED, new VibrationStats(), 0L);
-    }
-}
diff --git a/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java
deleted file mode 100644
index f158ce1..0000000
--- a/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java
+++ /dev/null
@@ -1,2278 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.vibrator;
-
-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.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.atLeastOnce;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.inOrder;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
-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.AppOpsManager;
-import android.content.ComponentName;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.ContextWrapper;
-import android.content.pm.PackageManagerInternal;
-import android.hardware.input.IInputManager;
-import android.hardware.input.InputManager;
-import android.hardware.input.InputManagerGlobal;
-import android.hardware.vibrator.IVibrator;
-import android.hardware.vibrator.IVibratorManager;
-import android.media.AudioAttributes;
-import android.media.AudioManager;
-import android.os.CombinedVibration;
-import android.os.ExternalVibration;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.IExternalVibrationController;
-import android.os.IExternalVibratorService;
-import android.os.IVibratorStateListener;
-import android.os.Looper;
-import android.os.PowerManager;
-import android.os.PowerManagerInternal;
-import android.os.PowerSaveState;
-import android.os.Process;
-import android.os.SystemClock;
-import android.os.UserHandle;
-import android.os.VibrationAttributes;
-import android.os.VibrationEffect;
-import android.os.Vibrator;
-import android.os.VibratorInfo;
-import android.os.test.TestLooper;
-import android.os.vibrator.PrebakedSegment;
-import android.os.vibrator.PrimitiveSegment;
-import android.os.vibrator.StepSegment;
-import android.os.vibrator.VibrationConfig;
-import android.os.vibrator.VibrationEffectSegment;
-import android.platform.test.annotations.Presubmit;
-import android.provider.Settings;
-import android.util.ArraySet;
-import android.util.SparseBooleanArray;
-import android.view.Display;
-import android.view.InputDevice;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.internal.app.IBatteryStats;
-import com.android.internal.util.FrameworkStatsLog;
-import com.android.internal.util.test.FakeSettingsProvider;
-import com.android.internal.util.test.FakeSettingsProviderRule;
-import com.android.server.LocalServices;
-import com.android.server.companion.virtual.VirtualDeviceManagerInternal;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.InOrder;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
-
-import java.time.Duration;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Predicate;
-
-/**
- * Tests for {@link VibratorManagerService}.
- *
- * Build/Install/Run:
- * atest FrameworksServicesTests:VibratorManagerServiceTest
- */
-@Presubmit
-public class VibratorManagerServiceTest {
-
-    private static final int TEST_TIMEOUT_MILLIS = 1_000;
-    // Time to allow for a cancellation to complete (notably including system ramp down), but not so
-    // long that tests easily get really slow or flaky. If a vibration is close to this, it should
-    // be cancelled in the body of the individual test.
-    private static final int CLEANUP_TIMEOUT_MILLIS = 100;
-    private static final int UID = Process.ROOT_UID;
-    private static final int VIRTUAL_DISPLAY_ID = 1;
-    private static final String PACKAGE_NAME = "package";
-    private static final PowerSaveState NORMAL_POWER_STATE = new PowerSaveState.Builder().build();
-    private static final PowerSaveState LOW_POWER_STATE = new PowerSaveState.Builder()
-            .setBatterySaverEnabled(true).build();
-    private static final AudioAttributes AUDIO_ALARM_ATTRS =
-            new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_ALARM).build();
-    private static final AudioAttributes AUDIO_NOTIFICATION_ATTRS =
-            new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION).build();
-    private static final VibrationAttributes ALARM_ATTRS =
-            new VibrationAttributes.Builder().setUsage(VibrationAttributes.USAGE_ALARM).build();
-    private static final VibrationAttributes HAPTIC_FEEDBACK_ATTRS =
-            new VibrationAttributes.Builder().setUsage(VibrationAttributes.USAGE_TOUCH).build();
-    private static final VibrationAttributes NOTIFICATION_ATTRS =
-            new VibrationAttributes.Builder().setUsage(
-                    VibrationAttributes.USAGE_NOTIFICATION).build();
-    private static final VibrationAttributes RINGTONE_ATTRS =
-            new VibrationAttributes.Builder().setUsage(
-                    VibrationAttributes.USAGE_RINGTONE).build();
-    private static final VibrationAttributes UNKNOWN_ATTRS =
-            new VibrationAttributes.Builder().setUsage(VibrationAttributes.USAGE_UNKNOWN).build();
-
-    @Rule
-    public MockitoRule rule = MockitoJUnit.rule();
-    @Rule
-    public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule();
-
-    @Mock
-    private VibratorManagerService.NativeWrapper mNativeWrapperMock;
-    @Mock
-    private PackageManagerInternal mPackageManagerInternalMock;
-    @Mock
-    private PowerManagerInternal mPowerManagerInternalMock;
-    @Mock
-    private PowerSaveState mPowerSaveStateMock;
-    @Mock
-    private AppOpsManager mAppOpsManagerMock;
-    @Mock
-    private IInputManager mIInputManagerMock;
-    @Mock
-    private IBatteryStats mBatteryStatsMock;
-    @Mock
-    private VibratorFrameworkStatsLogger mVibratorFrameworkStatsLoggerMock;
-    @Mock
-    private VirtualDeviceManagerInternal mVirtualDeviceManagerInternalMock;
-
-    private final Map<Integer, FakeVibratorControllerProvider> mVibratorProviders = new HashMap<>();
-
-    private VibratorManagerService mService;
-    private Context mContextSpy;
-    private TestLooper mTestLooper;
-    private FakeVibrator mVibrator;
-    private PowerManagerInternal.LowPowerModeListener mRegisteredPowerModeListener;
-    private VibratorManagerService.ExternalVibratorService mExternalVibratorService;
-    private VibrationConfig mVibrationConfig;
-    private VirtualDeviceManagerInternal.VirtualDisplayListener mRegisteredVirtualDisplayListener;
-    private VirtualDeviceManagerInternal.AppsOnVirtualDeviceListener
-            mRegisteredAppsOnVirtualDeviceListener;
-
-    private InputManager mInputManager;
-
-    @Before
-    public void setUp() throws Exception {
-        mTestLooper = new TestLooper();
-        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
-        InputManagerGlobal.resetInstance(mIInputManagerMock);
-        mVibrationConfig = new VibrationConfig(mContextSpy.getResources());
-
-        ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy);
-        when(mContextSpy.getContentResolver()).thenReturn(contentResolver);
-
-        mVibrator = new FakeVibrator(mContextSpy);
-        when(mContextSpy.getSystemService(eq(Context.VIBRATOR_SERVICE))).thenReturn(mVibrator);
-
-        mInputManager = new InputManager(mContextSpy);
-        when(mContextSpy.getSystemService(eq(Context.INPUT_SERVICE)))
-                .thenReturn(mInputManager);
-        when(mContextSpy.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(mAppOpsManagerMock);
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[0]);
-        when(mPackageManagerInternalMock.getSystemUiServiceComponent())
-                .thenReturn(new ComponentName("", ""));
-        when(mPowerManagerInternalMock.getLowPowerState(PowerManager.ServiceType.VIBRATION))
-                .thenReturn(mPowerSaveStateMock);
-        doAnswer(invocation -> {
-            mRegisteredPowerModeListener = invocation.getArgument(0);
-            return null;
-        }).when(mPowerManagerInternalMock).registerLowPowerModeObserver(any());
-        doAnswer(invocation -> {
-            mRegisteredVirtualDisplayListener = invocation.getArgument(0);
-            return null;
-        }).when(mVirtualDeviceManagerInternalMock).registerVirtualDisplayListener(any());
-        doAnswer(invocation -> {
-            mRegisteredAppsOnVirtualDeviceListener = invocation.getArgument(0);
-            return null;
-        }).when(mVirtualDeviceManagerInternalMock).registerAppsOnVirtualDeviceListener(any());
-
-        setUserSetting(Settings.System.VIBRATE_WHEN_RINGING, 1);
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);
-        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY,
-                Vibrator.VIBRATION_INTENSITY_MEDIUM);
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
-                Vibrator.VIBRATION_INTENSITY_MEDIUM);
-        setUserSetting(Settings.System.MEDIA_VIBRATION_INTENSITY,
-                Vibrator.VIBRATION_INTENSITY_MEDIUM);
-        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY,
-                Vibrator.VIBRATION_INTENSITY_MEDIUM);
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY,
-                Vibrator.VIBRATION_INTENSITY_MEDIUM);
-
-        addLocalServiceMock(PackageManagerInternal.class, mPackageManagerInternalMock);
-        addLocalServiceMock(PowerManagerInternal.class, mPowerManagerInternalMock);
-        addLocalServiceMock(VirtualDeviceManagerInternal.class, mVirtualDeviceManagerInternalMock);
-
-        mTestLooper.startAutoDispatch();
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        if (mService != null) {
-            // Wait until all vibrators have stopped vibrating, with a bit of flexibility for tests
-            // that just do a click or have cancelled at the end (waiting for ramp-down).
-            //
-            // Note: if a test is flaky here, check whether a VibrationEffect duration is close to
-            // CLEANUP_TIMEOUT_MILLIS - in which case it's probably best to just cancel that effect
-            // explicitly at the end of the test case (rather than letting it run and race flakily).
-            assertTrue(waitUntil(s -> {
-                for (int vibratorId : mService.getVibratorIds()) {
-                    if (s.isVibrating(vibratorId)) {
-                        return false;
-                    }
-                }
-                return true;
-            }, mService, CLEANUP_TIMEOUT_MILLIS));
-        }
-
-        LocalServices.removeServiceForTest(PackageManagerInternal.class);
-        LocalServices.removeServiceForTest(PowerManagerInternal.class);
-        // Ignore potential exceptions about the looper having never dispatched any messages.
-        mTestLooper.stopAutoDispatchAndIgnoreExceptions();
-        InputManagerGlobal.clearInstance();
-    }
-
-    private VibratorManagerService createSystemReadyService() {
-        VibratorManagerService service = createService();
-        service.systemReady();
-        return service;
-    }
-
-    private VibratorManagerService createService() {
-        mService = new VibratorManagerService(
-                mContextSpy,
-                new VibratorManagerService.Injector() {
-                    @Override
-                    VibratorManagerService.NativeWrapper getNativeWrapper() {
-                        return mNativeWrapperMock;
-                    }
-
-                    @Override
-                    Handler createHandler(Looper looper) {
-                        return new Handler(mTestLooper.getLooper());
-                    }
-
-                    @Override
-                    IBatteryStats getBatteryStatsService() {
-                        return mBatteryStatsMock;
-                    }
-
-                    @Override
-                    VibratorFrameworkStatsLogger getFrameworkStatsLogger(Handler handler) {
-                        return mVibratorFrameworkStatsLoggerMock;
-                    }
-
-                    @Override
-                    VibratorController createVibratorController(int vibratorId,
-                            VibratorController.OnVibrationCompleteListener listener) {
-                        return mVibratorProviders.get(vibratorId)
-                                .newVibratorController(vibratorId, listener);
-                    }
-
-                    @Override
-                    void addService(String name, IBinder service) {
-                        Object serviceInstance = service;
-                        mExternalVibratorService =
-                                (VibratorManagerService.ExternalVibratorService) serviceInstance;
-                    }
-                });
-        return mService;
-    }
-
-    @Test
-    public void createService_initializesNativeManagerServiceAndVibrators() {
-        mockVibrators(1, 2);
-        createService();
-        verify(mNativeWrapperMock).init(any());
-        assertTrue(mVibratorProviders.get(1).isInitialized());
-        assertTrue(mVibratorProviders.get(2).isInitialized());
-    }
-
-    @Test
-    public void createService_resetsVibrators() {
-        mockVibrators(1, 2);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
-        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
-
-        createService();
-        assertEquals(1, mVibratorProviders.get(1).getOffCount());
-        assertEquals(1, mVibratorProviders.get(2).getOffCount());
-        assertEquals(Arrays.asList(false), mVibratorProviders.get(1).getExternalControlStates());
-        assertEquals(Arrays.asList(false), mVibratorProviders.get(2).getExternalControlStates());
-    }
-
-    @Test
-    public void createService_doNotCrashIfUsedBeforeSystemReady() {
-        mockVibrators(1, 2);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
-        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
-        VibratorManagerService service = createService();
-
-        assertNotNull(service.getVibratorIds());
-        assertNotNull(service.getVibratorInfo(1));
-        assertFalse(service.isVibrating(1));
-
-        CombinedVibration effect = CombinedVibration.createParallel(
-                VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
-        vibrate(service, effect, HAPTIC_FEEDBACK_ATTRS);
-        service.cancelVibrate(VibrationAttributes.USAGE_FILTER_MATCH_ALL, service);
-
-        assertTrue(service.setAlwaysOnEffect(UID, PACKAGE_NAME, 1, effect, ALARM_ATTRS));
-
-        IVibratorStateListener listener = mockVibratorStateListener();
-        assertTrue(service.registerVibratorStateListener(1, listener));
-        assertTrue(service.unregisterVibratorStateListener(1, listener));
-    }
-
-    @Test
-    public void getVibratorIds_withNullResultFromNative_returnsEmptyArray() {
-        when(mNativeWrapperMock.getVibratorIds()).thenReturn(null);
-        assertArrayEquals(new int[0], createSystemReadyService().getVibratorIds());
-    }
-
-    @Test
-    public void getVibratorIds_withNonEmptyResultFromNative_returnsSameArray() {
-        mockVibrators(2, 1);
-        assertArrayEquals(new int[]{2, 1}, createSystemReadyService().getVibratorIds());
-    }
-
-    @Test
-    public void getVibratorInfo_withMissingVibratorId_returnsNull() {
-        mockVibrators(1);
-        assertNull(createSystemReadyService().getVibratorInfo(2));
-    }
-
-    @Test
-    public void getVibratorInfo_vibratorFailedLoadBeforeSystemReady_returnsNull() {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setVibratorInfoLoadSuccessful(false);
-        assertNull(createService().getVibratorInfo(1));
-    }
-
-    @Test
-    public void getVibratorInfo_vibratorFailedLoadAfterSystemReady_returnsInfoForVibrator() {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setVibratorInfoLoadSuccessful(false);
-        mVibratorProviders.get(1).setResonantFrequency(123.f);
-        VibratorInfo info = createSystemReadyService().getVibratorInfo(1);
-
-        assertNotNull(info);
-        assertEquals(1, info.getId());
-        assertEquals(123.f, info.getResonantFrequencyHz(), 0.01 /*tolerance*/);
-    }
-
-    @Test
-    public void getVibratorInfo_vibratorSuccessfulLoadBeforeSystemReady_returnsInfoForVibrator() {
-        mockVibrators(1);
-        FakeVibratorControllerProvider vibrator = mVibratorProviders.get(1);
-        vibrator.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS, IVibrator.CAP_AMPLITUDE_CONTROL);
-        vibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        vibrator.setSupportedPrimitives(VibrationEffect.Composition.PRIMITIVE_CLICK);
-        vibrator.setResonantFrequency(123.f);
-        vibrator.setQFactor(Float.NaN);
-        VibratorInfo info = createService().getVibratorInfo(1);
-
-        assertNotNull(info);
-        assertEquals(1, info.getId());
-        assertTrue(info.hasAmplitudeControl());
-        assertTrue(info.hasCapability(IVibrator.CAP_COMPOSE_EFFECTS));
-        assertFalse(info.hasCapability(IVibrator.CAP_ON_CALLBACK));
-        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_YES,
-                info.isEffectSupported(VibrationEffect.EFFECT_CLICK));
-        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_NO,
-                info.isEffectSupported(VibrationEffect.EFFECT_TICK));
-        assertTrue(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_CLICK));
-        assertFalse(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_TICK));
-        assertEquals(123.f, info.getResonantFrequencyHz(), 0.01 /*tolerance*/);
-        assertTrue(Float.isNaN(info.getQFactor()));
-    }
-
-    @Test
-    public void getVibratorInfo_vibratorFailedThenSuccessfulLoad_returnsNullThenInfo() {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setVibratorInfoLoadSuccessful(false);
-
-        VibratorManagerService service = createService();
-        assertNull(createService().getVibratorInfo(1));
-
-        mVibratorProviders.get(1).setVibratorInfoLoadSuccessful(true);
-        mVibratorProviders.get(1).setResonantFrequency(123.f);
-        service.systemReady();
-
-        VibratorInfo info = createService().getVibratorInfo(1);
-        assertNotNull(info);
-        assertEquals(1, info.getId());
-        assertEquals(123.f, info.getResonantFrequencyHz(), 0.01 /*tolerance*/);
-    }
-
-    @Test
-    public void registerVibratorStateListener_callbacksAreTriggered() throws Exception {
-        mockVibrators(1);
-        VibratorManagerService service = createSystemReadyService();
-        IVibratorStateListener listenerMock = mockVibratorStateListener();
-        service.registerVibratorStateListener(1, listenerMock);
-
-        long oneShotDuration = 20;
-        vibrateAndWaitUntilFinished(service,
-                VibrationEffect.createOneShot(oneShotDuration, VibrationEffect.DEFAULT_AMPLITUDE),
-                ALARM_ATTRS);
-
-        InOrder inOrderVerifier = inOrder(listenerMock);
-        // First notification done when listener is registered.
-        inOrderVerifier.verify(listenerMock).onVibrating(eq(false));
-        inOrderVerifier.verify(listenerMock).onVibrating(eq(true));
-        // The last notification is after the vibration has completed.
-        inOrderVerifier.verify(listenerMock, timeout(TEST_TIMEOUT_MILLIS)).onVibrating(eq(false));
-        inOrderVerifier.verifyNoMoreInteractions();
-
-        InOrder batteryVerifier = inOrder(mBatteryStatsMock);
-        batteryVerifier.verify(mBatteryStatsMock)
-                .noteVibratorOn(UID, oneShotDuration + mVibrationConfig.getRampDownDurationMs());
-        batteryVerifier.verify(mBatteryStatsMock).noteVibratorOff(UID);
-    }
-
-    @Test
-    public void unregisterVibratorStateListener_callbackNotTriggeredAfter() throws Exception {
-        mockVibrators(1);
-        VibratorManagerService service = createSystemReadyService();
-        IVibratorStateListener listenerMock = mockVibratorStateListener();
-        service.registerVibratorStateListener(1, listenerMock);
-
-        vibrate(service, VibrationEffect.createOneShot(40, 100), ALARM_ATTRS);
-
-        // Wait until service knows vibrator is on.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        service.unregisterVibratorStateListener(1, listenerMock);
-
-        // Wait until vibrator is off.
-        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        InOrder inOrderVerifier = inOrder(listenerMock);
-        // First notification done when listener is registered.
-        inOrderVerifier.verify(listenerMock).onVibrating(eq(false));
-        inOrderVerifier.verify(listenerMock).onVibrating(eq(true));
-        inOrderVerifier.verify(listenerMock, atLeastOnce()).asBinder(); // unregister
-        inOrderVerifier.verifyNoMoreInteractions();
-    }
-
-    @Test
-    public void registerVibratorStateListener_multipleVibratorsAreTriggered() throws Exception {
-        mockVibrators(0, 1, 2);
-        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        VibratorManagerService service = createSystemReadyService();
-        IVibratorStateListener[] listeners = new IVibratorStateListener[3];
-        for (int i = 0; i < 3; i++) {
-            listeners[i] = mockVibratorStateListener();
-            service.registerVibratorStateListener(i, listeners[i]);
-        }
-
-        vibrate(service, CombinedVibration.startParallel()
-                .addVibrator(0, VibrationEffect.createOneShot(40, 100))
-                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .combine(), ALARM_ATTRS);
-        // Wait until service knows vibrator is on.
-        assertTrue(waitUntil(s -> s.isVibrating(0), service, TEST_TIMEOUT_MILLIS));
-
-        verify(listeners[0]).onVibrating(eq(true));
-        verify(listeners[1]).onVibrating(eq(true));
-        verify(listeners[2], never()).onVibrating(eq(true));
-        cancelVibrate(service);
-    }
-
-    @Test
-    public void setAlwaysOnEffect_withMono_enablesAlwaysOnEffectToAllVibratorsWithCapability() {
-        mockVibrators(1, 2, 3);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
-        mVibratorProviders.get(3).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
-
-        CombinedVibration effect = CombinedVibration.createParallel(
-                VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
-        assertTrue(createSystemReadyService().setAlwaysOnEffect(
-                UID, PACKAGE_NAME, 1, effect, ALARM_ATTRS));
-
-        PrebakedSegment expected = new PrebakedSegment(
-                VibrationEffect.EFFECT_CLICK, false, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-
-        // Only vibrators 1 and 3 have always-on capabilities.
-        assertEquals(mVibratorProviders.get(1).getAlwaysOnEffect(1), expected);
-        assertNull(mVibratorProviders.get(2).getAlwaysOnEffect(1));
-        assertEquals(mVibratorProviders.get(3).getAlwaysOnEffect(1), expected);
-    }
-
-    @Test
-    public void setAlwaysOnEffect_withStereo_enablesAlwaysOnEffectToAllVibratorsWithCapability() {
-        mockVibrators(1, 2, 3, 4);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
-        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
-        mVibratorProviders.get(4).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
-
-        CombinedVibration effect = CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
-                .addVibrator(2, VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK))
-                .addVibrator(3, VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
-                .combine();
-        assertTrue(createSystemReadyService().setAlwaysOnEffect(
-                UID, PACKAGE_NAME, 1, effect, ALARM_ATTRS));
-
-        PrebakedSegment expectedClick = new PrebakedSegment(
-                VibrationEffect.EFFECT_CLICK, false, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-
-        PrebakedSegment expectedTick = new PrebakedSegment(
-                VibrationEffect.EFFECT_TICK, false, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-
-        // Enables click on vibrator 1 and tick on vibrator 2 only.
-        assertEquals(mVibratorProviders.get(1).getAlwaysOnEffect(1), expectedClick);
-        assertEquals(mVibratorProviders.get(2).getAlwaysOnEffect(1), expectedTick);
-        assertNull(mVibratorProviders.get(3).getAlwaysOnEffect(1));
-        assertNull(mVibratorProviders.get(4).getAlwaysOnEffect(1));
-    }
-
-    @Test
-    public void setAlwaysOnEffect_withNullEffect_disablesAlwaysOnEffects() {
-        mockVibrators(1, 2, 3);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
-        mVibratorProviders.get(3).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
-
-        CombinedVibration effect = CombinedVibration.createParallel(
-                VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
-        assertTrue(createSystemReadyService().setAlwaysOnEffect(
-                UID, PACKAGE_NAME, 1, effect, ALARM_ATTRS));
-
-        assertTrue(createSystemReadyService().setAlwaysOnEffect(
-                UID, PACKAGE_NAME, 1, null, ALARM_ATTRS));
-
-        assertNull(mVibratorProviders.get(1).getAlwaysOnEffect(1));
-        assertNull(mVibratorProviders.get(2).getAlwaysOnEffect(1));
-        assertNull(mVibratorProviders.get(3).getAlwaysOnEffect(1));
-    }
-
-    @Test
-    public void setAlwaysOnEffect_withNonPrebakedEffect_ignoresEffect() {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
-
-        CombinedVibration effect = CombinedVibration.createParallel(
-                VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE));
-        assertFalse(createSystemReadyService().setAlwaysOnEffect(
-                UID, PACKAGE_NAME, 1, effect, ALARM_ATTRS));
-
-        assertNull(mVibratorProviders.get(1).getAlwaysOnEffect(1));
-    }
-
-    @Test
-    public void setAlwaysOnEffect_withNonSyncedEffect_ignoresEffect() {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
-
-        CombinedVibration effect = CombinedVibration.startSequential()
-                .addNext(0, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .combine();
-        assertFalse(createSystemReadyService().setAlwaysOnEffect(
-                UID, PACKAGE_NAME, 1, effect, ALARM_ATTRS));
-
-        assertNull(mVibratorProviders.get(1).getAlwaysOnEffect(1));
-    }
-
-    @Test
-    public void setAlwaysOnEffect_withNoVibratorWithCapability_ignoresEffect() {
-        mockVibrators(1);
-        VibratorManagerService service = createSystemReadyService();
-
-        CombinedVibration mono = CombinedVibration.createParallel(
-                VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
-        CombinedVibration stereo = CombinedVibration.startParallel()
-                .addVibrator(0, VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
-                .combine();
-        assertFalse(service.setAlwaysOnEffect(UID, PACKAGE_NAME, 1, mono, ALARM_ATTRS));
-        assertFalse(service.setAlwaysOnEffect(UID, PACKAGE_NAME, 2, stereo, ALARM_ATTRS));
-
-        assertNull(mVibratorProviders.get(1).getAlwaysOnEffect(1));
-    }
-
-    @Test
-    public void vibrate_withRingtone_usesRingerModeSettings() throws Exception {
-        mockVibrators(1);
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(1);
-        fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK,
-                VibrationEffect.EFFECT_HEAVY_CLICK, VibrationEffect.EFFECT_DOUBLE_CLICK);
-
-        setRingerMode(AudioManager.RINGER_MODE_SILENT);
-        VibratorManagerService service = createSystemReadyService();
-        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                RINGTONE_ATTRS);
-
-        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
-        service = createSystemReadyService();
-        vibrateAndWaitUntilFinished(
-                service, VibrationEffect.get(VibrationEffect.EFFECT_HEAVY_CLICK), RINGTONE_ATTRS);
-
-        setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
-        service = createSystemReadyService();
-        vibrateAndWaitUntilFinished(
-                service, VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK), RINGTONE_ATTRS);
-
-        assertEquals(
-                Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_HEAVY_CLICK),
-                        expectedPrebaked(VibrationEffect.EFFECT_DOUBLE_CLICK)),
-                mVibratorProviders.get(1).getAllEffectSegments());
-    }
-
-    @Test
-    public void vibrate_withPowerMode_usesPowerModeState() throws Exception {
-        mockVibrators(1);
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(1);
-        fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_TICK, VibrationEffect.EFFECT_CLICK,
-                VibrationEffect.EFFECT_HEAVY_CLICK, VibrationEffect.EFFECT_DOUBLE_CLICK);
-        VibratorManagerService service = createSystemReadyService();
-
-        mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE);
-        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_TICK),
-                HAPTIC_FEEDBACK_ATTRS);
-        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                RINGTONE_ATTRS);
-
-        mRegisteredPowerModeListener.onLowPowerModeChanged(NORMAL_POWER_STATE);
-        vibrateAndWaitUntilFinished(service,
-                VibrationEffect.get(VibrationEffect.EFFECT_HEAVY_CLICK), /* attrs= */ null);
-        vibrateAndWaitUntilFinished(service,
-                VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK), NOTIFICATION_ATTRS);
-
-        assertEquals(
-                Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK),
-                        expectedPrebaked(VibrationEffect.EFFECT_HEAVY_CLICK),
-                        expectedPrebaked(VibrationEffect.EFFECT_DOUBLE_CLICK)),
-                mVibratorProviders.get(1).getAllEffectSegments());
-    }
-
-    @Test
-    public void vibrate_withAudioAttributes_usesOriginalAudioUsageInAppOpsManager() {
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
-        AudioAttributes audioAttributes = new AudioAttributes.Builder()
-                .setUsage(AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY).build();
-        VibrationAttributes vibrationAttributes =
-                new VibrationAttributes.Builder(audioAttributes).build();
-
-        vibrate(service, effect, vibrationAttributes);
-
-        verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
-                eq(AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY), anyInt(), anyString());
-    }
-
-    @Test
-    public void vibrate_withVibrationAttributes_usesCorrespondingAudioUsageInAppOpsManager() {
-        VibratorManagerService service = createSystemReadyService();
-
-        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK), ALARM_ATTRS);
-        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_TICK), NOTIFICATION_ATTRS);
-        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK), RINGTONE_ATTRS);
-        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_TICK), HAPTIC_FEEDBACK_ATTRS);
-        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                new VibrationAttributes.Builder().setUsage(
-                        VibrationAttributes.USAGE_COMMUNICATION_REQUEST).build());
-        vibrate(service, VibrationEffect.createOneShot(2000, 200),
-                new VibrationAttributes.Builder().setUsage(
-                        VibrationAttributes.USAGE_UNKNOWN).build());
-
-        InOrder inOrderVerifier = inOrder(mAppOpsManagerMock);
-        inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
-                eq(AudioAttributes.USAGE_ALARM), anyInt(), anyString());
-        inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
-                eq(AudioAttributes.USAGE_NOTIFICATION), anyInt(), anyString());
-        inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
-                eq(AudioAttributes.USAGE_NOTIFICATION_RINGTONE), anyInt(), anyString());
-        inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
-                eq(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION), anyInt(), anyString());
-        inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
-                eq(AudioAttributes.USAGE_VOICE_COMMUNICATION),
-                anyInt(), anyString());
-        inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
-                eq(AudioAttributes.USAGE_UNKNOWN), anyInt(), anyString());
-    }
-
-    @Test
-    public void vibrate_withVibrationAttributesEnforceFreshSettings_refreshesVibrationSettings()
-            throws Exception {
-        mockVibrators(0);
-        mVibratorProviders.get(0).setSupportedEffects(VibrationEffect.EFFECT_CLICK,
-                VibrationEffect.EFFECT_TICK);
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
-                Vibrator.VIBRATION_INTENSITY_HIGH);
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationAttributes notificationWithFreshAttrs = new VibrationAttributes.Builder()
-                .setUsage(VibrationAttributes.USAGE_NOTIFICATION)
-                .setFlags(VibrationAttributes.FLAG_INVALIDATE_SETTINGS_CACHE)
-                .build();
-
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
-                Vibrator.VIBRATION_INTENSITY_LOW);
-        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                NOTIFICATION_ATTRS);
-        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_TICK),
-                notificationWithFreshAttrs);
-
-        assertEquals(
-                Arrays.asList(
-                        expectedPrebaked(VibrationEffect.EFFECT_CLICK,
-                                VibrationEffect.EFFECT_STRENGTH_STRONG),
-                        expectedPrebaked(VibrationEffect.EFFECT_TICK,
-                                VibrationEffect.EFFECT_STRENGTH_LIGHT)),
-                mVibratorProviders.get(0).getAllEffectSegments());
-    }
-
-    @Test
-    public void vibrate_withAttributesUnknownUsage_usesEffectToIdentifyTouchUsage() {
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationAttributes unknownAttributes = VibrationAttributes.createForUsage(
-                VibrationAttributes.USAGE_UNKNOWN);
-        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK), unknownAttributes);
-        vibrate(service, VibrationEffect.createOneShot(200, 200), unknownAttributes);
-        vibrate(service, VibrationEffect.createWaveform(
-                new long[] { 100, 200, 300 }, new int[] {1, 2, 3}, -1), unknownAttributes);
-        vibrate(service,
-                VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_RISE)
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_FALL)
-                        .compose(),
-                unknownAttributes);
-
-        verify(mAppOpsManagerMock, times(4))
-                .checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
-                        eq(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION), anyInt(), anyString());
-        verify(mAppOpsManagerMock, never())
-                .checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
-                        eq(AudioAttributes.USAGE_UNKNOWN), anyInt(), anyString());
-    }
-
-    @Test
-    public void vibrate_withAttributesUnknownUsage_ignoresEffectIfNotHapticFeedbackCandidate() {
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationAttributes unknownAttributes = VibrationAttributes.createForUsage(
-                VibrationAttributes.USAGE_UNKNOWN);
-        vibrate(service, VibrationEffect.get(VibrationEffect.RINGTONES[0]), unknownAttributes);
-        vibrate(service, VibrationEffect.createOneShot(2000, 200), unknownAttributes);
-        vibrate(service, VibrationEffect.createWaveform(
-                new long[] { 100, 200, 300 }, new int[] {1, 2, 3}, 0), unknownAttributes);
-        vibrate(service,
-                VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_RISE)
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_FALL)
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SPIN)
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD)
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
-                        .compose(),
-                unknownAttributes);
-
-        verify(mAppOpsManagerMock, never())
-                .checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
-                        eq(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION), anyInt(), anyString());
-        verify(mAppOpsManagerMock, times(4))
-                .checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
-                        eq(AudioAttributes.USAGE_UNKNOWN), anyInt(), anyString());
-    }
-
-    @Test
-    public void vibrate_withOngoingRepeatingVibration_ignoresEffect() throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
-                new long[]{10_000, 10_000}, new int[]{128, 255}, 1);
-        vibrate(service, repeatingEffect, new VibrationAttributes.Builder().setUsage(
-                VibrationAttributes.USAGE_UNKNOWN).build());
-
-        // VibrationThread will start this vibration async, wait until it has started.
-        assertTrue(waitUntil(s -> !mVibratorProviders.get(1).getAllEffectSegments().isEmpty(),
-                service, TEST_TIMEOUT_MILLIS));
-
-        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                HAPTIC_FEEDBACK_ATTRS);
-
-        // The time estimate is recorded when the vibration starts, repeating vibrations
-        // are capped at BATTERY_STATS_REPEATING_VIBRATION_DURATION (=5000).
-        verify(mBatteryStatsMock).noteVibratorOn(UID, 5000);
-        // The second vibration shouldn't have recorded that the vibrators were turned on.
-        verify(mBatteryStatsMock, times(1)).noteVibratorOn(anyInt(), anyLong());
-        // No segment played is the prebaked CLICK from the second vibration.
-        assertFalse(mVibratorProviders.get(1).getAllEffectSegments().stream()
-                .anyMatch(PrebakedSegment.class::isInstance));
-        cancelVibrate(service);  // Clean up repeating effect.
-    }
-
-    @Test
-    public void vibrate_withOngoingRepeatingVibrationBeingCancelled_playsAfterPreviousIsCancelled()
-            throws Exception {
-        mockVibrators(1);
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(1);
-        fakeVibrator.setOffLatency(50); // Add latency so cancellation is slow.
-        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
-                new long[]{10, 10_000}, new int[]{255, 0}, 1);
-        vibrate(service, repeatingEffect, ALARM_ATTRS);
-
-        // VibrationThread will start this vibration async, wait until the off waveform step.
-        assertTrue(waitUntil(s -> fakeVibrator.getOffCount() > 0, service, TEST_TIMEOUT_MILLIS));
-
-        // Cancel vibration right before requesting a new one.
-        // This should trigger slow IVibrator.off before setting the vibration status to cancelled.
-        cancelVibrate(service);
-        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                ALARM_ATTRS);
-
-        // Check that second vibration was played.
-        assertTrue(fakeVibrator.getAllEffectSegments().stream()
-                .anyMatch(PrebakedSegment.class::isInstance));
-    }
-
-    @Test
-    public void vibrate_withNewSameImportanceVibrationAndBothRepeating_cancelsOngoingEffect()
-            throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
-                new long[]{10_000, 10_000}, new int[]{128, 255}, 1);
-        vibrate(service, repeatingEffect, ALARM_ATTRS);
-
-        // VibrationThread will start this vibration async, wait until it has started.
-        assertTrue(waitUntil(s -> !mVibratorProviders.get(1).getAllEffectSegments().isEmpty(),
-                service, TEST_TIMEOUT_MILLIS));
-
-        VibrationEffect repeatingEffect2 = VibrationEffect.createWaveform(
-                new long[]{10_000, 10_000}, new int[]{128, 255}, 1);
-        vibrate(service, repeatingEffect2, ALARM_ATTRS);
-
-        // VibrationThread will start this vibration async, so wait before checking it started.
-        assertTrue(waitUntil(s -> mVibratorProviders.get(1).getAllEffectSegments().size() == 2,
-                service, TEST_TIMEOUT_MILLIS));
-
-        // The second vibration should have recorded that the vibrators were turned on.
-        verify(mBatteryStatsMock, times(2)).noteVibratorOn(anyInt(), anyLong());
-
-        cancelVibrate(service);  // Clean up repeating effect.
-    }
-
-    @Test
-    public void vibrate_withNewSameImportanceVibrationButOngoingIsRepeating_ignoreNewVibration()
-            throws Exception {
-        mockVibrators(1);
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(1);
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
-                new long[]{10, 10_000}, new int[]{255, 0}, 1);
-        vibrate(service, repeatingEffect, ALARM_ATTRS);
-
-        // VibrationThread will start this vibration async, wait until the off waveform step.
-        assertTrue(waitUntil(s -> fakeVibrator.getOffCount() > 0, service, TEST_TIMEOUT_MILLIS));
-
-        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                ALARM_ATTRS);
-
-        // The second vibration shouldn't have recorded that the vibrators were turned on.
-        verify(mBatteryStatsMock, times(1)).noteVibratorOn(anyInt(), anyLong());
-        // The second vibration shouldn't have played any prebaked segment.
-        assertFalse(mVibratorProviders.get(1).getAllEffectSegments().stream()
-                .anyMatch(PrebakedSegment.class::isInstance));
-        cancelVibrate(service);  // Clean up long effect.
-    }
-
-    @Test
-    public void vibrate_withNewUnknownUsageVibrationAndRepeating_cancelsOngoingEffect()
-            throws Exception {
-        mockVibrators(1);
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
-                new long[]{10_000, 10_000}, new int[]{128, 255}, 1);
-        vibrate(service, repeatingEffect, ALARM_ATTRS);
-
-        // VibrationThread will start this vibration async, wait until it has started.
-        assertTrue(waitUntil(s -> !mVibratorProviders.get(1).getAllEffectSegments().isEmpty(),
-                service, TEST_TIMEOUT_MILLIS));
-
-        VibrationEffect repeatingEffect2 = VibrationEffect.createWaveform(
-                new long[]{10_000, 10_000}, new int[]{128, 255}, 1);
-        vibrate(service, repeatingEffect2, UNKNOWN_ATTRS);
-
-        // VibrationThread will start this vibration async, so wait before checking it started.
-        assertTrue(waitUntil(s -> mVibratorProviders.get(1).getAllEffectSegments().size() == 2,
-                service, TEST_TIMEOUT_MILLIS));
-
-        // The second vibration should have recorded that the vibrators were turned on.
-        verify(mBatteryStatsMock, times(2)).noteVibratorOn(anyInt(), anyLong());
-
-        cancelVibrate(service);  // Clean up repeating effect.
-    }
-
-    @Test
-    public void vibrate_withNewUnknownUsageVibrationAndNotRepeating_ignoreNewVibration()
-            throws Exception {
-        mockVibrators(1);
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(1);
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationEffect alarmEffect = VibrationEffect.createWaveform(
-                new long[]{10, 10_000}, new int[]{255, 0}, -1);
-        vibrate(service, alarmEffect, ALARM_ATTRS);
-
-        // VibrationThread will start this vibration async, wait until the off waveform step.
-        assertTrue(waitUntil(s -> fakeVibrator.getOffCount() > 0, service, TEST_TIMEOUT_MILLIS));
-
-        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                UNKNOWN_ATTRS);
-
-        // The second vibration shouldn't have recorded that the vibrators were turned on.
-        verify(mBatteryStatsMock, times(1)).noteVibratorOn(anyInt(), anyLong());
-        // The second vibration shouldn't have played any prebaked segment.
-        assertFalse(mVibratorProviders.get(1).getAllEffectSegments().stream()
-                .anyMatch(PrebakedSegment.class::isInstance));
-        cancelVibrate(service);  // Clean up long effect.
-    }
-
-    @Test
-    public void vibrate_withOngoingHigherImportanceVibration_ignoresEffect() 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, 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));
-
-        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                HAPTIC_FEEDBACK_ATTRS);
-
-        // The second vibration shouldn't have recorded that the vibrators were turned on.
-        verify(mBatteryStatsMock, times(1)).noteVibratorOn(anyInt(), anyLong());
-        // The second vibration shouldn't have played any prebaked segment.
-        assertFalse(mVibratorProviders.get(1).getAllEffectSegments().stream()
-                .anyMatch(PrebakedSegment.class::isInstance));
-        cancelVibrate(service);  // Clean up long effect.
-    }
-
-    @Test
-    public void vibrate_withOngoingLowerImportanceVibration_cancelsOngoingEffect()
-            throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        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));
-
-        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                RINGTONE_ATTRS);
-
-        // The second vibration should have recorded that the vibrators were turned on.
-        verify(mBatteryStatsMock, times(2)).noteVibratorOn(anyInt(), anyLong());
-        // One segment played is the prebaked CLICK from the second vibration.
-        assertEquals(1,
-                mVibratorProviders.get(1).getAllEffectSegments().stream()
-                        .filter(PrebakedSegment.class::isInstance)
-                        .count());
-    }
-
-    @Test
-    public void vibrate_withOngoingLowerImportanceExternalVibration_cancelsOngoingVibration()
-            throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
-        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
-        VibratorManagerService service = createSystemReadyService();
-
-        IBinder firstToken = mock(IBinder.class);
-        IExternalVibrationController controller = mock(IExternalVibrationController.class);
-        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
-                AUDIO_ALARM_ATTRS,
-                controller, firstToken);
-        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
-
-        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                RINGTONE_ATTRS);
-
-        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
-        // The external vibration should have been cancelled
-        verify(controller).mute();
-        assertEquals(Arrays.asList(false, true, false),
-                mVibratorProviders.get(1).getExternalControlStates());
-        // The new vibration should have recorded that the vibrators were turned on.
-        verify(mBatteryStatsMock, times(1)).noteVibratorOn(anyInt(), anyLong());
-        // One segment played is the prebaked CLICK from the new vibration.
-        assertEquals(1,
-                mVibratorProviders.get(1).getAllEffectSegments().stream()
-                        .filter(PrebakedSegment.class::isInstance)
-                        .count());
-    }
-
-    @Test
-    public void vibrate_withOngoingSameImportancePipelinedVibration_continuesOngoingEffect()
-            throws Exception {
-        VibrationAttributes pipelineAttrs = new VibrationAttributes.Builder(HAPTIC_FEEDBACK_ATTRS)
-                .setFlags(VibrationAttributes.FLAG_PIPELINED_EFFECT)
-                .build();
-
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationEffect effect = VibrationEffect.createWaveform(
-                new long[]{100, 100}, new int[]{128, 255}, -1);
-        vibrate(service, effect, pipelineAttrs);
-        // This vibration will be enqueued, but evicted by the EFFECT_CLICK.
-        vibrate(service, VibrationEffect.startComposition()
-                .addOffDuration(Duration.ofSeconds(10))
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SLOW_RISE)
-                .compose(), pipelineAttrs);  // This will queue and be evicted for the click.
-
-        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                pipelineAttrs);
-
-        // The second vibration should have recorded that the vibrators were turned on.
-        verify(mBatteryStatsMock, times(2)).noteVibratorOn(anyInt(), anyLong());
-        // One step segment (with several amplitudes) and one click should have played. Notably
-        // there is no primitive segment.
-        List<VibrationEffectSegment> played = mVibratorProviders.get(1).getAllEffectSegments();
-        assertEquals(2, played.size());
-        assertEquals(1, played.stream().filter(StepSegment.class::isInstance).count());
-        assertEquals(1, played.stream().filter(PrebakedSegment.class::isInstance).count());
-    }
-
-    @Test
-    public void vibrate_withInputDevices_vibratesInputDevices() throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1});
-        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(createInputDeviceWithVibrator(1));
-        setUserSetting(Settings.System.VIBRATE_INPUT_DEVICES, 1);
-        // Mock alarm intensity equals to default value to avoid scaling in this test.
-        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY,
-                mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_ALARM));
-        VibratorManagerService service = createSystemReadyService();
-
-        CombinedVibration effect = CombinedVibration.createParallel(
-                VibrationEffect.createOneShot(10, 10));
-        vibrateAndWaitUntilFinished(service, effect, ALARM_ATTRS);
-
-        verify(mIInputManagerMock).vibrateCombined(eq(1), eq(effect), any());
-        assertTrue(mVibratorProviders.get(1).getAllEffectSegments().isEmpty());
-    }
-
-    @Test
-    public void vibrate_withNativeCallbackTriggered_finishesVibration() throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        VibratorManagerService service = createSystemReadyService();
-        // The native callback will be dispatched manually in this test.
-        mTestLooper.stopAutoDispatchAndIgnoreExceptions();
-
-        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK), ALARM_ATTRS);
-
-        // VibrationThread will start this vibration async, so wait before triggering callbacks.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        // Trigger callbacks from controller.
-        mTestLooper.moveTimeForward(50);
-        mTestLooper.dispatchAll();
-
-        // VibrationThread needs some time to react to native callbacks and stop the vibrator.
-        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-    }
-
-    @Test
-    public void vibrate_withTriggerCallback_finishesVibration() throws Exception {
-        mockCapabilities(IVibratorManager.CAP_SYNC, IVibratorManager.CAP_PREPARE_COMPOSE);
-        mockVibrators(1, 2);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        mVibratorProviders.get(1).setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK);
-        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        mVibratorProviders.get(2).setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK);
-        // Mock alarm intensity equals to default value to avoid scaling in this test.
-        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY,
-                mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_ALARM));
-        VibratorManagerService service = createSystemReadyService();
-        // The native callback will be dispatched manually in this test.
-        mTestLooper.stopAutoDispatchAndIgnoreExceptions();
-
-        ArgumentCaptor<VibratorManagerService.OnSyncedVibrationCompleteListener> listenerCaptor =
-                ArgumentCaptor.forClass(
-                        VibratorManagerService.OnSyncedVibrationCompleteListener.class);
-        verify(mNativeWrapperMock).init(listenerCaptor.capture());
-
-        CountDownLatch triggerCountDown = new CountDownLatch(1);
-        // Mock trigger callback on registered listener right after the synced vibration starts.
-        when(mNativeWrapperMock.prepareSynced(eq(new int[]{1, 2}))).thenReturn(true);
-        when(mNativeWrapperMock.triggerSynced(anyLong())).then(answer -> {
-            listenerCaptor.getValue().onComplete(answer.getArgument(0));
-            triggerCountDown.countDown();
-            return true;
-        });
-
-        VibrationEffect composed = VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 100)
-                .compose();
-        CombinedVibration effect = CombinedVibration.createParallel(composed);
-
-        vibrate(service, effect, ALARM_ATTRS);
-        // VibrationThread will start this vibration async, so wait until vibration is triggered.
-        triggerCountDown.await(TEST_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
-
-        verify(mNativeWrapperMock).prepareSynced(eq(new int[]{1, 2}));
-        verify(mNativeWrapperMock).triggerSynced(anyLong());
-        PrimitiveSegment expected = new PrimitiveSegment(
-                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 100);
-        assertEquals(Arrays.asList(expected), mVibratorProviders.get(1).getAllEffectSegments());
-        assertEquals(Arrays.asList(expected), mVibratorProviders.get(2).getAllEffectSegments());
-
-        // VibrationThread needs some time to react to native callbacks and stop the vibrator.
-        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-    }
-
-    @Test
-    public void vibrate_withMultipleVibratorsAndCapabilities_prepareAndTriggerCalled()
-            throws Exception {
-        mockCapabilities(IVibratorManager.CAP_SYNC, IVibratorManager.CAP_PREPARE_PERFORM,
-                IVibratorManager.CAP_PREPARE_COMPOSE, IVibratorManager.CAP_MIXED_TRIGGER_PERFORM,
-                IVibratorManager.CAP_MIXED_TRIGGER_COMPOSE);
-        mockVibrators(1, 2);
-        when(mNativeWrapperMock.prepareSynced(eq(new int[]{1, 2}))).thenReturn(true);
-        when(mNativeWrapperMock.triggerSynced(anyLong())).thenReturn(true);
-        FakeVibratorControllerProvider fakeVibrator1 = mVibratorProviders.get(1);
-        fakeVibrator1.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        VibratorManagerService service = createSystemReadyService();
-
-        CombinedVibration effect = CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addVibrator(2, VibrationEffect.startComposition()
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                        .compose())
-                .combine();
-        vibrateAndWaitUntilFinished(service, effect, ALARM_ATTRS);
-
-        verify(mNativeWrapperMock).prepareSynced(eq(new int[]{1, 2}));
-        verify(mNativeWrapperMock).triggerSynced(anyLong());
-        verify(mNativeWrapperMock).cancelSynced(); // Trigger on service creation only.
-    }
-
-    @Test
-    public void vibrate_withMultipleVibratorsWithoutCapabilities_skipPrepareAndTrigger()
-            throws Exception {
-        // Missing CAP_MIXED_TRIGGER_ON and CAP_MIXED_TRIGGER_PERFORM.
-        mockCapabilities(IVibratorManager.CAP_SYNC, IVibratorManager.CAP_PREPARE_ON,
-                IVibratorManager.CAP_PREPARE_PERFORM);
-        mockVibrators(1, 2);
-        FakeVibratorControllerProvider fakeVibrator1 = mVibratorProviders.get(1);
-        fakeVibrator1.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        VibratorManagerService service = createSystemReadyService();
-
-        CombinedVibration effect = CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
-                .addVibrator(2, VibrationEffect.createOneShot(10, 100))
-                .combine();
-        vibrateAndWaitUntilFinished(service, effect, ALARM_ATTRS);
-
-        verify(mNativeWrapperMock, never()).prepareSynced(any());
-        verify(mNativeWrapperMock, never()).triggerSynced(anyLong());
-        verify(mNativeWrapperMock).cancelSynced(); // Trigger on service creation only.
-    }
-
-    @Test
-    public void vibrate_withMultipleVibratorsPrepareFailed_skipTrigger() throws Exception {
-        mockCapabilities(IVibratorManager.CAP_SYNC, IVibratorManager.CAP_PREPARE_ON);
-        mockVibrators(1, 2);
-        when(mNativeWrapperMock.prepareSynced(any())).thenReturn(false);
-        VibratorManagerService service = createSystemReadyService();
-
-        CombinedVibration effect = CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.createOneShot(10, 50))
-                .addVibrator(2, VibrationEffect.createOneShot(10, 100))
-                .combine();
-        vibrateAndWaitUntilFinished(service, effect, ALARM_ATTRS);
-
-        verify(mNativeWrapperMock).prepareSynced(eq(new int[]{1, 2}));
-        verify(mNativeWrapperMock, never()).triggerSynced(anyLong());
-        verify(mNativeWrapperMock).cancelSynced(); // Trigger on service creation only.
-    }
-
-    @Test
-    public void vibrate_withMultipleVibratorsTriggerFailed_cancelPreparedSynced() throws Exception {
-        mockCapabilities(IVibratorManager.CAP_SYNC, IVibratorManager.CAP_PREPARE_ON);
-        mockVibrators(1, 2);
-        when(mNativeWrapperMock.prepareSynced(eq(new int[]{1, 2}))).thenReturn(true);
-        when(mNativeWrapperMock.triggerSynced(anyLong())).thenReturn(false);
-        VibratorManagerService service = createSystemReadyService();
-
-        CombinedVibration effect = CombinedVibration.startParallel()
-                .addVibrator(1, VibrationEffect.createOneShot(10, 50))
-                .addVibrator(2, VibrationEffect.createOneShot(10, 100))
-                .combine();
-        vibrateAndWaitUntilFinished(service, effect, ALARM_ATTRS);
-
-        verify(mNativeWrapperMock).prepareSynced(eq(new int[]{1, 2}));
-        verify(mNativeWrapperMock).triggerSynced(anyLong());
-        verify(mNativeWrapperMock, times(2)).cancelSynced(); // Trigger on service creation too.
-    }
-
-    @Test
-    public void vibrate_withIntensitySettings_appliesSettingsToScaleVibrations() throws Exception {
-        int defaultNotificationIntensity =
-                mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_NOTIFICATION);
-        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
-                defaultNotificationIntensity < Vibrator.VIBRATION_INTENSITY_HIGH
-                        ? defaultNotificationIntensity + 1
-                        : defaultNotificationIntensity);
-
-        int defaultTouchIntensity =
-                mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_TOUCH);
-        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY,
-                defaultTouchIntensity > Vibrator.VIBRATION_INTENSITY_LOW
-                        ? defaultTouchIntensity - 1
-                        : defaultTouchIntensity);
-
-        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY,
-                mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_ALARM));
-        setUserSetting(Settings.System.MEDIA_VIBRATION_INTENSITY,
-                Vibrator.VIBRATION_INTENSITY_HIGH);
-        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_OFF);
-
-        mockVibrators(1);
-        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(1);
-        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL,
-                IVibrator.CAP_COMPOSE_EFFECTS);
-        fakeVibrator.setSupportedPrimitives(VibrationEffect.Composition.PRIMITIVE_CLICK,
-                VibrationEffect.Composition.PRIMITIVE_TICK);
-        VibratorManagerService service = createSystemReadyService();
-
-        vibrateAndWaitUntilFinished(service, VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f)
-                .compose(), HAPTIC_FEEDBACK_ATTRS);
-
-        vibrateAndWaitUntilFinished(service, CombinedVibration.startSequential()
-                .addNext(1, VibrationEffect.createOneShot(100, 125))
-                .combine(), NOTIFICATION_ATTRS);
-
-        vibrateAndWaitUntilFinished(service, VibrationEffect.startComposition()
-                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f)
-                .compose(), ALARM_ATTRS);
-
-        // Ring vibrations have intensity OFF and are not played.
-        vibrateAndWaitUntilFinished(service, VibrationEffect.createOneShot(100, 125),
-                RINGTONE_ATTRS);
-
-        // 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));
-
-        // Alarm vibration will be scaled with SCALE_NONE.
-        assertEquals(1f,
-                ((PrimitiveSegment) fakeVibrator.getAllEffectSegments().get(2)).getScale(), 1e-5);
-    }
-
-    @Test
-    public void vibrate_withPowerModeChange_cancelVibrationIfNotAllowed() throws Exception {
-        mockVibrators(1, 2);
-        VibratorManagerService service = createSystemReadyService();
-        vibrate(service,
-                CombinedVibration.startParallel()
-                        .addVibrator(1, VibrationEffect.createOneShot(1000, 100))
-                        .combine(),
-                HAPTIC_FEEDBACK_ATTRS);
-
-        // VibrationThread will start this vibration async, so wait until vibration is triggered.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE);
-
-        // Haptic feedback cancelled on low power mode.
-        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-    }
-
-    @Test
-    public void vibrate_withSettingsChange_doNotCancelVibration() throws Exception {
-        mockVibrators(1);
-        VibratorManagerService service = createSystemReadyService();
-
-        vibrate(service, VibrationEffect.createOneShot(1000, 100), HAPTIC_FEEDBACK_ATTRS);
-
-        // VibrationThread will start this vibration async, so wait until vibration is triggered.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        service.updateServiceState();
-
-        // Vibration is not stopped nearly after updating service.
-        assertFalse(waitUntil(s -> !s.isVibrating(1), service, 50));
-        cancelVibrate(service);
-    }
-
-    @Test
-    public void vibrate_withVirtualDisplayChange_ignoreVibrationFromVirtualDisplay()
-            throws Exception {
-        mockVibrators(1);
-        VibratorManagerService service = createSystemReadyService();
-        mRegisteredVirtualDisplayListener.onVirtualDisplayCreated(VIRTUAL_DISPLAY_ID);
-
-        vibrateWithDisplay(service,
-                VIRTUAL_DISPLAY_ID,
-                CombinedVibration.startParallel()
-                        .addVibrator(1, VibrationEffect.createOneShot(1000, 100))
-                        .combine(),
-                HAPTIC_FEEDBACK_ATTRS);
-
-        // Haptic feedback ignored when it's from a virtual display.
-        assertFalse(waitUntil(s -> s.isVibrating(1), service, /* timeout= */ 50));
-
-        mRegisteredVirtualDisplayListener.onVirtualDisplayRemoved(VIRTUAL_DISPLAY_ID);
-        vibrateWithDisplay(service,
-                VIRTUAL_DISPLAY_ID,
-                CombinedVibration.startParallel()
-                        .addVibrator(1, VibrationEffect.createOneShot(1000, 100))
-                        .combine(),
-                HAPTIC_FEEDBACK_ATTRS);
-        // Haptic feedback played normally when the virtual display is removed.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        cancelVibrate(service);  // Clean up long-ish effect.
-    }
-
-    @Test
-    public void vibrate_withAppsOnVirtualDisplayChange_ignoreVibrationFromVirtualDisplay()
-            throws Exception {
-        mockVibrators(1);
-        VibratorManagerService service = createSystemReadyService();
-        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(
-                new ArraySet<>(Arrays.asList(UID)));
-        vibrateWithDisplay(service,
-                Display.INVALID_DISPLAY,
-                CombinedVibration.startParallel()
-                        .addVibrator(1, VibrationEffect.createOneShot(1000, 100))
-                        .combine(),
-                HAPTIC_FEEDBACK_ATTRS);
-
-        // Haptic feedback ignored when it's from an app running virtual display.
-        assertFalse(waitUntil(s -> s.isVibrating(1), service, /* timeout= */ 50));
-
-        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(new ArraySet<>());
-        vibrateWithDisplay(service,
-                Display.INVALID_DISPLAY,
-                CombinedVibration.startParallel()
-                        .addVibrator(1, VibrationEffect.createOneShot(1000, 100))
-                        .combine(),
-                HAPTIC_FEEDBACK_ATTRS);
-        // Haptic feedback played normally when the same app no long runs on a virtual display.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-        cancelVibrate(service);  // Clean up long-ish effect.
-    }
-
-    @Test
-    public void vibrate_prebakedAndComposedVibrationsWithFallbacks_playsFallbackOnlyForPredefined()
-            throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        mVibratorProviders.get(1).setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_CLICK);
-
-        VibratorManagerService service = createSystemReadyService();
-        vibrateAndWaitUntilFinished(service,
-                VibrationEffect.startComposition()
-                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
-                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK))
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                        .compose(),
-                ALARM_ATTRS);
-
-        List<VibrationEffectSegment> segments = mVibratorProviders.get(1).getAllEffectSegments();
-        // At least one step segment played as fallback for unusupported vibration effect
-        assertTrue(segments.size() > 2);
-        // 0: Supported effect played
-        assertTrue(segments.get(0) instanceof PrebakedSegment);
-        // 1: No segment for unsupported primitive
-        // 2: One or more intermediate step segments as fallback for unsupported effect
-        for (int i = 1; i < segments.size() - 1; i++) {
-            assertTrue(segments.get(i) instanceof StepSegment);
-        }
-        // 3: Supported primitive played
-        assertTrue(segments.get(segments.size() - 1) instanceof PrimitiveSegment);
-    }
-
-    @Test
-    public void cancelVibrate_withoutUsageFilter_stopsVibrating() throws Exception {
-        mockVibrators(1);
-        VibratorManagerService service = createSystemReadyService();
-
-        service.cancelVibrate(VibrationAttributes.USAGE_FILTER_MATCH_ALL, service);
-        assertFalse(service.isVibrating(1));
-
-        vibrate(service, VibrationEffect.createOneShot(10 * TEST_TIMEOUT_MILLIS, 100), ALARM_ATTRS);
-
-        // VibrationThread will start this vibration async, so wait until vibration is triggered.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        service.cancelVibrate(VibrationAttributes.USAGE_FILTER_MATCH_ALL, service);
-
-        // Alarm cancelled on filter match all.
-        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-    }
-
-    @Test
-    public void cancelVibrate_withFilter_onlyCancelsVibrationWithFilteredUsage() throws Exception {
-        mockVibrators(1);
-        VibratorManagerService service = createSystemReadyService();
-
-        vibrate(service, VibrationEffect.createOneShot(10 * TEST_TIMEOUT_MILLIS, 100), ALARM_ATTRS);
-
-        // VibrationThread will start this vibration async, so wait until vibration is triggered.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        // Vibration is not cancelled with a different usage.
-        service.cancelVibrate(VibrationAttributes.USAGE_RINGTONE, service);
-        assertFalse(waitUntil(s -> !s.isVibrating(1), service, /* timeout= */ 50));
-
-        // Vibration is not cancelled with a different usage class used as filter.
-        service.cancelVibrate(
-                VibrationAttributes.USAGE_CLASS_FEEDBACK | ~VibrationAttributes.USAGE_CLASS_MASK,
-                service);
-        assertFalse(waitUntil(s -> !s.isVibrating(1), service, /* timeout= */ 50));
-
-        // Vibration is cancelled with usage class as filter.
-        service.cancelVibrate(
-                VibrationAttributes.USAGE_CLASS_ALARM | ~VibrationAttributes.USAGE_CLASS_MASK,
-                service);
-        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-    }
-
-    @Test
-    public void cancelVibrate_withoutUnknownUsage_onlyStopsIfFilteringUnknownOrAllUsages()
-            throws Exception {
-        mockVibrators(1);
-        VibrationAttributes attrs = new VibrationAttributes.Builder()
-                .setUsage(VibrationAttributes.USAGE_UNKNOWN)
-                .build();
-        VibratorManagerService service = createSystemReadyService();
-
-        vibrate(service, VibrationEffect.createOneShot(10 * TEST_TIMEOUT_MILLIS, 100), attrs);
-
-        // VibrationThread will start this vibration async, so wait until vibration is triggered.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        // Do not cancel UNKNOWN vibration when filter is being applied for other usages.
-        service.cancelVibrate(VibrationAttributes.USAGE_RINGTONE, service);
-        assertFalse(waitUntil(s -> !s.isVibrating(1), service, /* timeout= */ 50));
-
-        service.cancelVibrate(
-                VibrationAttributes.USAGE_CLASS_ALARM | ~VibrationAttributes.USAGE_CLASS_MASK,
-                service);
-        assertFalse(waitUntil(s -> !s.isVibrating(1), service, /* timeout= */ 50));
-
-        // Cancel UNKNOWN vibration when filtered for that vibration specifically.
-        service.cancelVibrate(VibrationAttributes.USAGE_UNKNOWN, service);
-        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        vibrate(service, VibrationEffect.createOneShot(10 * TEST_TIMEOUT_MILLIS, 100), attrs);
-
-        // VibrationThread will start this vibration async, so wait until vibration is triggered.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        // Cancel UNKNOWN vibration when all vibrations are being cancelled.
-        service.cancelVibrate(VibrationAttributes.USAGE_FILTER_MATCH_ALL, service);
-        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-    }
-
-    @Test
-    public void onExternalVibration_ignoreVibrationFromVirtualDevices() throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
-        createSystemReadyService();
-
-        IBinder binderToken = mock(IBinder.class);
-        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
-                AUDIO_ALARM_ATTRS,
-                mock(IExternalVibrationController.class), binderToken);
-        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
-        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
-
-        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(
-                new ArraySet<>(Arrays.asList(UID)));
-        scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
-        assertEquals(IExternalVibratorService.SCALE_MUTE, scale);
-    }
-
-    @Test
-    public void onExternalVibration_setsExternalControl() throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
-        createSystemReadyService();
-
-        IBinder binderToken = mock(IBinder.class);
-        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
-                AUDIO_ALARM_ATTRS,
-                mock(IExternalVibrationController.class), binderToken);
-        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
-        mExternalVibratorService.onExternalVibrationStop(externalVibration);
-
-        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
-        assertEquals(Arrays.asList(false, true, false),
-                mVibratorProviders.get(1).getExternalControlStates());
-
-        verify(binderToken).linkToDeath(any(), eq(0));
-        verify(binderToken).unlinkToDeath(any(), eq(0));
-    }
-
-    @Test
-    public void onExternalVibration_withOngoingExternalVibration_mutesPreviousVibration()
-            throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
-        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
-        createSystemReadyService();
-
-        IBinder firstToken = mock(IBinder.class);
-        IBinder secondToken = mock(IBinder.class);
-        IExternalVibrationController firstController = mock(IExternalVibrationController.class);
-        IExternalVibrationController secondController = mock(IExternalVibrationController.class);
-        ExternalVibration firstVibration = new ExternalVibration(UID, PACKAGE_NAME,
-                AUDIO_ALARM_ATTRS,
-                firstController, firstToken);
-        int firstScale = mExternalVibratorService.onExternalVibrationStart(firstVibration);
-
-        AudioAttributes ringtoneAudioAttrs = new AudioAttributes.Builder()
-                .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
-                .build();
-        ExternalVibration secondVibration = new ExternalVibration(UID, PACKAGE_NAME,
-                ringtoneAudioAttrs, secondController, secondToken);
-        int secondScale = mExternalVibratorService.onExternalVibrationStart(secondVibration);
-
-        assertNotEquals(IExternalVibratorService.SCALE_MUTE, firstScale);
-        assertNotEquals(IExternalVibratorService.SCALE_MUTE, secondScale);
-        verify(firstController).mute();
-        verify(secondController, never()).mute();
-        // Set external control called only once.
-        assertEquals(Arrays.asList(false, true),
-                mVibratorProviders.get(1).getExternalControlStates());
-
-        mExternalVibratorService.onExternalVibrationStop(secondVibration);
-        mExternalVibratorService.onExternalVibrationStop(firstVibration);
-        assertEquals(Arrays.asList(false, true, false),
-                mVibratorProviders.get(1).getExternalControlStates());
-
-        verify(firstToken).linkToDeath(any(), eq(0));
-        verify(firstToken).unlinkToDeath(any(), eq(0));
-
-        verify(secondToken).linkToDeath(any(), eq(0));
-        verify(secondToken).unlinkToDeath(any(), eq(0));
-    }
-
-    @Test
-    public void onExternalVibration_withOngoingVibration_cancelsOngoingVibrationImmediately()
-            throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL,
-                IVibrator.CAP_AMPLITUDE_CONTROL);
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationEffect effect = VibrationEffect.createOneShot(10 * TEST_TIMEOUT_MILLIS, 100);
-        vibrate(service, effect, HAPTIC_FEEDBACK_ATTRS);
-
-        // VibrationThread will start this vibration async, so wait until vibration is triggered.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
-                AUDIO_ALARM_ATTRS,
-                mock(IExternalVibrationController.class));
-        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
-        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
-
-        // Vibration is cancelled.
-        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-        assertEquals(Arrays.asList(false, true),
-                mVibratorProviders.get(1).getExternalControlStates());
-    }
-
-    @Test
-    public void onExternalVibration_withOngoingHigherImportanceVibration_ignoreNewVibration()
-            throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL,
-                IVibrator.CAP_AMPLITUDE_CONTROL);
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationEffect effect = VibrationEffect.createOneShot(10 * TEST_TIMEOUT_MILLIS, 100);
-        vibrate(service, effect, RINGTONE_ATTRS);
-
-        // VibrationThread will start this vibration async, so wait until vibration is triggered.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
-                AUDIO_ALARM_ATTRS,
-                mock(IExternalVibrationController.class));
-        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
-        // External vibration is ignored.
-        assertEquals(IExternalVibratorService.SCALE_MUTE, scale);
-
-        // Vibration is not cancelled.
-        assertFalse(waitUntil(s -> !s.isVibrating(1), service, CLEANUP_TIMEOUT_MILLIS));
-        assertEquals(Arrays.asList(false), mVibratorProviders.get(1).getExternalControlStates());
-        cancelVibrate(service);  // Clean up long effect.
-    }
-
-    @Test
-    public void onExternalVibration_withNewSameImportanceButRepeating_cancelsOngoingVibration()
-            throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL,
-                IVibrator.CAP_AMPLITUDE_CONTROL);
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
-                new long[]{10, 10_000}, new int[]{255, 0}, 1);
-        vibrate(service, repeatingEffect, ALARM_ATTRS);
-
-        // VibrationThread will start this vibration async, so wait until vibration is triggered.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
-                AUDIO_ALARM_ATTRS, mock(IExternalVibrationController.class));
-        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
-        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
-
-        // Vibration is cancelled.
-        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-        assertEquals(Arrays.asList(false, true),
-                mVibratorProviders.get(1).getExternalControlStates());
-    }
-
-    @Test
-    public void onExternalVibration_withNewSameImportanceButOngoingIsRepeating_ignoreNewVibration()
-            throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL,
-                IVibrator.CAP_AMPLITUDE_CONTROL);
-        VibratorManagerService service = createSystemReadyService();
-
-        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
-                new long[]{10_000, 10_000}, new int[]{128, 255}, 1);
-        vibrate(service, repeatingEffect, NOTIFICATION_ATTRS);
-
-        // VibrationThread will start this vibration async, so wait until vibration is triggered.
-        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
-
-        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
-                AUDIO_NOTIFICATION_ATTRS,
-                mock(IExternalVibrationController.class));
-        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
-        // New vibration is ignored.
-        assertEquals(IExternalVibratorService.SCALE_MUTE, scale);
-
-        // Vibration is not cancelled.
-        assertFalse(waitUntil(s -> !s.isVibrating(1), service, CLEANUP_TIMEOUT_MILLIS));
-        assertEquals(Arrays.asList(false), mVibratorProviders.get(1).getExternalControlStates());
-        cancelVibrate(service);  // Clean up long effect.
-    }
-
-    @Test
-    public void onExternalVibration_withRingtone_usesRingerModeSettings() {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
-        AudioAttributes audioAttrs = new AudioAttributes.Builder()
-                .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
-                .build();
-        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME, audioAttrs,
-                mock(IExternalVibrationController.class));
-
-        setRingerMode(AudioManager.RINGER_MODE_SILENT);
-        createSystemReadyService();
-        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
-        assertEquals(IExternalVibratorService.SCALE_MUTE, scale);
-
-        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
-        createSystemReadyService();
-        scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
-        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
-
-        setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
-        createSystemReadyService();
-        scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
-        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
-    }
-
-    @Test
-    public void onExternalVibration_withBypassMuteAudioFlag_ignoresUserSettings() {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
-        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY,
-                Vibrator.VIBRATION_INTENSITY_OFF);
-        AudioAttributes audioAttrs = new AudioAttributes.Builder()
-                .setUsage(AudioAttributes.USAGE_ALARM)
-                .build();
-        AudioAttributes flaggedAudioAttrs = new AudioAttributes.Builder()
-                .setUsage(AudioAttributes.USAGE_ALARM)
-                .setFlags(AudioAttributes.FLAG_BYPASS_MUTE)
-                .build();
-        createSystemReadyService();
-
-        int scale = mExternalVibratorService.onExternalVibrationStart(
-                new ExternalVibration(UID, PACKAGE_NAME, audioAttrs,
-                        mock(IExternalVibrationController.class)));
-        assertEquals(IExternalVibratorService.SCALE_MUTE, scale);
-
-        createSystemReadyService();
-        scale = mExternalVibratorService.onExternalVibrationStart(
-                new ExternalVibration(UID, PACKAGE_NAME, flaggedAudioAttrs,
-                        mock(IExternalVibrationController.class)));
-        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
-    }
-
-    @Test
-    public void onExternalVibration_withUnknownUsage_appliesMediaSettings() {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
-        setUserSetting(Settings.System.MEDIA_VIBRATION_INTENSITY,
-                Vibrator.VIBRATION_INTENSITY_OFF);
-        AudioAttributes flaggedAudioAttrs = new AudioAttributes.Builder()
-                .setUsage(AudioAttributes.USAGE_UNKNOWN)
-                .setFlags(AudioAttributes.FLAG_BYPASS_MUTE)
-                .build();
-        createSystemReadyService();
-
-        int scale = mExternalVibratorService.onExternalVibrationStart(
-                new ExternalVibration(/* uid= */ 123, PACKAGE_NAME, flaggedAudioAttrs,
-                        mock(IExternalVibrationController.class)));
-        assertEquals(IExternalVibratorService.SCALE_MUTE, scale);
-    }
-
-    @Test
-    public void frameworkStats_externalVibration_reportsAllMetrics() throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
-        createSystemReadyService();
-
-        AudioAttributes audioAttrs = new AudioAttributes.Builder()
-                .setUsage(AudioAttributes.USAGE_ALARM)
-                .build();
-
-        ExternalVibration vib = new ExternalVibration(UID, PACKAGE_NAME, audioAttrs,
-                mock(IExternalVibrationController.class));
-        mExternalVibratorService.onExternalVibrationStart(vib);
-
-        Thread.sleep(10);
-        mExternalVibratorService.onExternalVibrationStop(vib);
-
-        ArgumentCaptor<VibrationStats.StatsInfo> argumentCaptor =
-                ArgumentCaptor.forClass(VibrationStats.StatsInfo.class);
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
-                .writeVibrationReportedAsync(argumentCaptor.capture());
-
-        VibrationStats.StatsInfo statsInfo = argumentCaptor.getValue();
-        assertEquals(UID, statsInfo.uid);
-        assertEquals(FrameworkStatsLog.VIBRATION_REPORTED__VIBRATION_TYPE__EXTERNAL,
-                statsInfo.vibrationType);
-        assertEquals(VibrationAttributes.USAGE_ALARM, statsInfo.usage);
-        assertEquals(Vibration.Status.FINISHED.getProtoEnumValue(), statsInfo.status);
-        assertTrue(statsInfo.totalDurationMillis > 0);
-        assertTrue(
-                "Expected vibrator ON for at least 10ms, got " + statsInfo.vibratorOnMillis + "ms",
-                statsInfo.vibratorOnMillis >= 10);
-        assertEquals(2, statsInfo.halSetExternalControlCount);
-    }
-
-    @Test
-    public void frameworkStats_waveformVibration_reportsAllMetrics() throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        VibratorManagerService service = createSystemReadyService();
-        vibrateAndWaitUntilFinished(service,
-                VibrationEffect.createWaveform(new long[] {0, 10, 20, 10}, -1), RINGTONE_ATTRS);
-
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
-                .writeVibratorStateOnAsync(eq(UID), anyLong());
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
-                .writeVibratorStateOffAsync(eq(UID));
-
-        ArgumentCaptor<VibrationStats.StatsInfo> argumentCaptor =
-                ArgumentCaptor.forClass(VibrationStats.StatsInfo.class);
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
-                .writeVibrationReportedAsync(argumentCaptor.capture());
-
-        VibrationStats.StatsInfo metrics = argumentCaptor.getValue();
-        assertEquals(UID, metrics.uid);
-        assertEquals(FrameworkStatsLog.VIBRATION_REPORTED__VIBRATION_TYPE__SINGLE,
-                metrics.vibrationType);
-        assertEquals(VibrationAttributes.USAGE_RINGTONE, metrics.usage);
-        assertEquals(Vibration.Status.FINISHED.getProtoEnumValue(), metrics.status);
-        assertTrue("Total duration was too low, " + metrics.totalDurationMillis + "ms",
-                metrics.totalDurationMillis >= 20);
-        assertTrue("Vibrator ON duration was too low, " + metrics.vibratorOnMillis + "ms",
-                metrics.vibratorOnMillis >= 20);
-
-        // All unrelated metrics are empty.
-        assertEquals(0, metrics.repeatCount);
-        assertEquals(0, metrics.halComposeCount);
-        assertEquals(0, metrics.halComposePwleCount);
-        assertEquals(0, metrics.halPerformCount);
-        assertEquals(0, metrics.halSetExternalControlCount);
-        assertEquals(0, metrics.halCompositionSize);
-        assertEquals(0, metrics.halPwleSize);
-        assertNull(metrics.halSupportedCompositionPrimitivesUsed);
-        assertNull(metrics.halSupportedEffectsUsed);
-        assertNull(metrics.halUnsupportedCompositionPrimitivesUsed);
-        assertNull(metrics.halUnsupportedEffectsUsed);
-
-        // Accommodate for ramping off config that might add extra setAmplitudes.
-        assertEquals(2, metrics.halOnCount);
-        assertTrue(metrics.halOffCount > 0);
-        assertTrue(metrics.halSetAmplitudeCount >= 2);
-    }
-
-    @Test
-    public void frameworkStats_repeatingVibration_reportsAllMetrics() throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
-
-        VibratorManagerService service = createSystemReadyService();
-        vibrate(service, VibrationEffect.createWaveform(new long[] {10, 100}, 1), RINGTONE_ATTRS);
-
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
-                .writeVibratorStateOnAsync(eq(UID), anyLong());
-
-        // Wait for at least one loop before cancelling it.
-        Thread.sleep(100);
-        service.cancelVibrate(VibrationAttributes.USAGE_RINGTONE, service);
-
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
-                .writeVibratorStateOffAsync(eq(UID));
-
-        ArgumentCaptor<VibrationStats.StatsInfo> argumentCaptor =
-                ArgumentCaptor.forClass(VibrationStats.StatsInfo.class);
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
-                .writeVibrationReportedAsync(argumentCaptor.capture());
-
-        VibrationStats.StatsInfo metrics = argumentCaptor.getValue();
-        assertEquals(UID, metrics.uid);
-        assertEquals(FrameworkStatsLog.VIBRATION_REPORTED__VIBRATION_TYPE__REPEATED,
-                metrics.vibrationType);
-        assertEquals(VibrationAttributes.USAGE_RINGTONE, metrics.usage);
-        assertEquals(Vibration.Status.CANCELLED_BY_USER.getProtoEnumValue(), metrics.status);
-        assertTrue("Total duration was too low, " + metrics.totalDurationMillis + "ms",
-                metrics.totalDurationMillis >= 100);
-        assertTrue("Vibrator ON duration was too low, " + metrics.vibratorOnMillis + "ms",
-                metrics.vibratorOnMillis >= 100);
-
-        // All unrelated metrics are empty.
-        assertTrue(metrics.repeatCount > 0);
-        assertEquals(0, metrics.halComposeCount);
-        assertEquals(0, metrics.halComposePwleCount);
-        assertEquals(0, metrics.halPerformCount);
-        assertEquals(0, metrics.halSetExternalControlCount);
-        assertEquals(0, metrics.halCompositionSize);
-        assertEquals(0, metrics.halPwleSize);
-        assertNull(metrics.halSupportedCompositionPrimitivesUsed);
-        assertNull(metrics.halSupportedEffectsUsed);
-        assertNull(metrics.halUnsupportedCompositionPrimitivesUsed);
-        assertNull(metrics.halUnsupportedEffectsUsed);
-
-        // Accommodate for ramping off config that might add extra setAmplitudes.
-        assertTrue(metrics.halOnCount > 0);
-        assertTrue(metrics.halOffCount > 0);
-        assertTrue(metrics.halSetAmplitudeCount > 0);
-    }
-
-    @Test
-    public void frameworkStats_prebakedAndComposedVibrations_reportsAllMetrics() throws Exception {
-        mockVibrators(1);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
-        mVibratorProviders.get(1).setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_TICK);
-
-        VibratorManagerService service = createSystemReadyService();
-        vibrateAndWaitUntilFinished(service,
-                VibrationEffect.startComposition()
-                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
-                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
-                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK))
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
-                        .compose(),
-                ALARM_ATTRS);
-
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
-                .writeVibratorStateOnAsync(eq(UID), anyLong());
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
-                .writeVibratorStateOffAsync(eq(UID));
-
-        ArgumentCaptor<VibrationStats.StatsInfo> argumentCaptor =
-                ArgumentCaptor.forClass(VibrationStats.StatsInfo.class);
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
-                .writeVibrationReportedAsync(argumentCaptor.capture());
-
-        VibrationStats.StatsInfo metrics = argumentCaptor.getValue();
-        assertEquals(UID, metrics.uid);
-        assertEquals(FrameworkStatsLog.VIBRATION_REPORTED__VIBRATION_TYPE__SINGLE,
-                metrics.vibrationType);
-        assertEquals(VibrationAttributes.USAGE_ALARM, metrics.usage);
-        assertEquals(Vibration.Status.FINISHED.getProtoEnumValue(), metrics.status);
-
-        // At least 4 effect/primitive played, 20ms each, plus configured fallback.
-        assertTrue("Total duration was too low, " + metrics.totalDurationMillis + "ms",
-                metrics.totalDurationMillis >= 80);
-        assertTrue("Vibrator ON duration was too low, " + metrics.vibratorOnMillis + "ms",
-                metrics.vibratorOnMillis >= 80);
-
-        // Related metrics were collected.
-        assertEquals(2, metrics.halComposeCount); // TICK+TICK, then CLICK+CLICK
-        assertEquals(3, metrics.halPerformCount); // CLICK, TICK, then CLICK
-        assertEquals(4, metrics.halCompositionSize); // 2*TICK + 2*CLICK
-        // No repetitions in reported effect/primitive IDs.
-        assertArrayEquals(new int[] {VibrationEffect.Composition.PRIMITIVE_TICK},
-                metrics.halSupportedCompositionPrimitivesUsed);
-        assertArrayEquals(new int[] {VibrationEffect.Composition.PRIMITIVE_CLICK},
-                metrics.halUnsupportedCompositionPrimitivesUsed);
-        assertArrayEquals(new int[] {VibrationEffect.EFFECT_CLICK},
-                metrics.halSupportedEffectsUsed);
-        assertArrayEquals(new int[] {VibrationEffect.EFFECT_TICK},
-                metrics.halUnsupportedEffectsUsed);
-
-        // All unrelated metrics are empty.
-        assertEquals(0, metrics.repeatCount);
-        assertEquals(0, metrics.halComposePwleCount);
-        assertEquals(0, metrics.halSetExternalControlCount);
-        assertEquals(0, metrics.halPwleSize);
-
-        // Accommodate for ramping off config that might add extra setAmplitudes
-        // for the effect that plays the fallback instead of "perform".
-        assertTrue(metrics.halOnCount > 0);
-        assertTrue(metrics.halOffCount > 0);
-        assertTrue(metrics.halSetAmplitudeCount > 0);
-    }
-
-    @Test
-    public void frameworkStats_interruptingVibrations_reportsAllMetrics() throws Exception {
-        mockVibrators(1);
-        VibratorManagerService service = createSystemReadyService();
-
-        vibrate(service, VibrationEffect.createOneShot(1_000, 128), HAPTIC_FEEDBACK_ATTRS);
-
-        // VibrationThread will start this vibration async, so wait until vibration is triggered.
-        assertTrue(waitUntil(s -> !mVibratorProviders.get(1).getAllEffectSegments().isEmpty(),
-                service, TEST_TIMEOUT_MILLIS));
-
-        vibrateAndWaitUntilFinished(service, VibrationEffect.createOneShot(10, 255), ALARM_ATTRS);
-
-        ArgumentCaptor<VibrationStats.StatsInfo> argumentCaptor =
-                ArgumentCaptor.forClass(VibrationStats.StatsInfo.class);
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS).times(2))
-                .writeVibrationReportedAsync(argumentCaptor.capture());
-
-        VibrationStats.StatsInfo touchMetrics = argumentCaptor.getAllValues().get(0);
-        assertEquals(UID, touchMetrics.uid);
-        assertEquals(VibrationAttributes.USAGE_TOUCH, touchMetrics.usage);
-        assertEquals(Vibration.Status.CANCELLED_SUPERSEDED.getProtoEnumValue(),
-                touchMetrics.status);
-        assertTrue(touchMetrics.endedBySameUid);
-        assertEquals(VibrationAttributes.USAGE_ALARM, touchMetrics.endedByUsage);
-        assertEquals(-1, touchMetrics.interruptedUsage);
-
-        VibrationStats.StatsInfo alarmMetrics = argumentCaptor.getAllValues().get(1);
-        assertEquals(UID, alarmMetrics.uid);
-        assertEquals(VibrationAttributes.USAGE_ALARM, alarmMetrics.usage);
-        assertEquals(Vibration.Status.FINISHED.getProtoEnumValue(), alarmMetrics.status);
-        assertFalse(alarmMetrics.endedBySameUid);
-        assertEquals(-1, alarmMetrics.endedByUsage);
-        assertEquals(VibrationAttributes.USAGE_TOUCH, alarmMetrics.interruptedUsage);
-    }
-
-    @Test
-    public void frameworkStats_ignoredVibration_reportsStatus() throws Exception {
-        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY,
-                Vibrator.VIBRATION_INTENSITY_OFF);
-
-        mockVibrators(1);
-        VibratorManagerService service = createSystemReadyService();
-        mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE);
-
-        // Haptic feedback ignored in low power state
-        vibrateAndWaitUntilFinished(service, VibrationEffect.createOneShot(100, 128),
-                HAPTIC_FEEDBACK_ATTRS);
-        // Ringtone vibration user settings are off
-        vibrateAndWaitUntilFinished(service, VibrationEffect.createOneShot(200, 128),
-                RINGTONE_ATTRS);
-
-        ArgumentCaptor<VibrationStats.StatsInfo> argumentCaptor =
-                ArgumentCaptor.forClass(VibrationStats.StatsInfo.class);
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS).times(2))
-                .writeVibrationReportedAsync(argumentCaptor.capture());
-
-        VibrationStats.StatsInfo touchMetrics = argumentCaptor.getAllValues().get(0);
-        assertEquals(UID, touchMetrics.uid);
-        assertEquals(VibrationAttributes.USAGE_TOUCH, touchMetrics.usage);
-        assertEquals(Vibration.Status.IGNORED_FOR_POWER.getProtoEnumValue(), touchMetrics.status);
-
-        VibrationStats.StatsInfo ringtoneMetrics = argumentCaptor.getAllValues().get(1);
-        assertEquals(UID, ringtoneMetrics.uid);
-        assertEquals(VibrationAttributes.USAGE_RINGTONE, ringtoneMetrics.usage);
-        assertEquals(Vibration.Status.IGNORED_FOR_SETTINGS.getProtoEnumValue(),
-                ringtoneMetrics.status);
-
-        for (VibrationStats.StatsInfo metrics : argumentCaptor.getAllValues()) {
-            // Latencies are empty since vibrations never started
-            assertEquals(0, metrics.startLatencyMillis);
-            assertEquals(0, metrics.endLatencyMillis);
-            assertEquals(0, metrics.vibratorOnMillis);
-
-            // All unrelated metrics are empty.
-            assertEquals(0, metrics.repeatCount);
-            assertEquals(0, metrics.halComposeCount);
-            assertEquals(0, metrics.halComposePwleCount);
-            assertEquals(0, metrics.halOffCount);
-            assertEquals(0, metrics.halOnCount);
-            assertEquals(0, metrics.halPerformCount);
-            assertEquals(0, metrics.halSetExternalControlCount);
-            assertEquals(0, metrics.halCompositionSize);
-            assertEquals(0, metrics.halPwleSize);
-            assertNull(metrics.halSupportedCompositionPrimitivesUsed);
-            assertNull(metrics.halSupportedEffectsUsed);
-            assertNull(metrics.halUnsupportedCompositionPrimitivesUsed);
-            assertNull(metrics.halUnsupportedEffectsUsed);
-        }
-    }
-
-    @Test
-    public void frameworkStats_multiVibrators_reportsAllMetrics() throws Exception {
-        mockVibrators(1, 2);
-        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
-        mVibratorProviders.get(1).setSupportedPrimitives(
-                VibrationEffect.Composition.PRIMITIVE_TICK);
-        mVibratorProviders.get(2).setSupportedEffects(VibrationEffect.EFFECT_TICK);
-
-        VibratorManagerService service = createSystemReadyService();
-        vibrateAndWaitUntilFinished(service,
-                CombinedVibration.startParallel()
-                        .addVibrator(1,
-                                VibrationEffect.startComposition()
-                                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
-                                        .compose())
-                        .addVibrator(2,
-                                VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK))
-                        .combine(),
-                NOTIFICATION_ATTRS);
-
-        SparseBooleanArray expectedEffectsUsed = new SparseBooleanArray();
-        expectedEffectsUsed.put(VibrationEffect.EFFECT_TICK, true);
-
-        SparseBooleanArray expectedPrimitivesUsed = new SparseBooleanArray();
-        expectedPrimitivesUsed.put(VibrationEffect.Composition.PRIMITIVE_TICK, true);
-
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
-                .writeVibratorStateOnAsync(eq(UID), anyLong());
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
-                .writeVibratorStateOffAsync(eq(UID));
-
-        ArgumentCaptor<VibrationStats.StatsInfo> argumentCaptor =
-                ArgumentCaptor.forClass(VibrationStats.StatsInfo.class);
-        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
-                .writeVibrationReportedAsync(argumentCaptor.capture());
-
-        VibrationStats.StatsInfo metrics = argumentCaptor.getValue();
-        assertEquals(UID, metrics.uid);
-        assertEquals(FrameworkStatsLog.VIBRATION_REPORTED__VIBRATION_TYPE__SINGLE,
-                metrics.vibrationType);
-        assertEquals(VibrationAttributes.USAGE_NOTIFICATION, metrics.usage);
-        assertEquals(Vibration.Status.FINISHED.getProtoEnumValue(), metrics.status);
-        assertTrue(metrics.totalDurationMillis >= 20);
-
-        // vibratorOnMillis accumulates both vibrators, it's 20 for each constant.
-        assertEquals(40, metrics.vibratorOnMillis);
-
-        // Related metrics were collected.
-        assertEquals(1, metrics.halComposeCount);
-        assertEquals(1, metrics.halPerformCount);
-        assertEquals(1, metrics.halCompositionSize);
-        assertEquals(2, metrics.halOffCount);
-        assertArrayEquals(new int[] {VibrationEffect.Composition.PRIMITIVE_TICK},
-                metrics.halSupportedCompositionPrimitivesUsed);
-        assertArrayEquals(new int[] {VibrationEffect.EFFECT_TICK},
-                metrics.halSupportedEffectsUsed);
-
-        // All unrelated metrics are empty.
-        assertEquals(0, metrics.repeatCount);
-        assertEquals(0, metrics.halComposePwleCount);
-        assertEquals(0, metrics.halOnCount);
-        assertEquals(0, metrics.halSetAmplitudeCount);
-        assertEquals(0, metrics.halSetExternalControlCount);
-        assertEquals(0, metrics.halPwleSize);
-        assertNull(metrics.halUnsupportedCompositionPrimitivesUsed);
-        assertNull(metrics.halUnsupportedEffectsUsed);
-    }
-
-    private VibrationEffectSegment expectedPrebaked(int effectId) {
-        return expectedPrebaked(effectId, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-    }
-
-    private VibrationEffectSegment expectedPrebaked(int effectId, int effectStrength) {
-        return new PrebakedSegment(effectId, false, effectStrength);
-    }
-
-    private void mockCapabilities(long... capabilities) {
-        when(mNativeWrapperMock.getCapabilities()).thenReturn(
-                Arrays.stream(capabilities).reduce(0, (a, b) -> a | b));
-    }
-
-    private void mockVibrators(int... vibratorIds) {
-        for (int vibratorId : vibratorIds) {
-            mVibratorProviders.put(vibratorId,
-                    new FakeVibratorControllerProvider(mTestLooper.getLooper()));
-        }
-        when(mNativeWrapperMock.getVibratorIds()).thenReturn(vibratorIds);
-    }
-
-    private void cancelVibrate(VibratorManagerService service) {
-        service.cancelVibrate(VibrationAttributes.USAGE_FILTER_MATCH_ALL, service);
-    }
-
-    private IVibratorStateListener mockVibratorStateListener() {
-        IVibratorStateListener listenerMock = mock(IVibratorStateListener.class);
-        IBinder binderMock = mock(IBinder.class);
-        when(listenerMock.asBinder()).thenReturn(binderMock);
-        return listenerMock;
-    }
-
-    private InputDevice createInputDeviceWithVibrator(int id) {
-        return new InputDevice.Builder()
-                .setId(id)
-                .setName("Test Device " + id)
-                .setHasVibrator(true)
-                .build();
-    }
-
-    private static <T> void addLocalServiceMock(Class<T> clazz, T mock) {
-        LocalServices.removeServiceForTest(clazz);
-        LocalServices.addService(clazz, mock);
-    }
-
-    private void setRingerMode(int ringerMode) {
-        AudioManager audioManager = mContextSpy.getSystemService(AudioManager.class);
-        audioManager.setRingerModeInternal(ringerMode);
-        assertEquals(ringerMode, audioManager.getRingerModeInternal());
-    }
-
-    private void setUserSetting(String settingName, int value) {
-        Settings.System.putIntForUser(
-                mContextSpy.getContentResolver(), settingName, value, UserHandle.USER_CURRENT);
-    }
-
-    private void vibrateAndWaitUntilFinished(VibratorManagerService service, VibrationEffect effect,
-            VibrationAttributes attrs) throws InterruptedException {
-        vibrateAndWaitUntilFinished(service, CombinedVibration.createParallel(effect), attrs);
-    }
-
-    private void vibrateAndWaitUntilFinished(VibratorManagerService service,
-            CombinedVibration effect, VibrationAttributes attrs) throws InterruptedException {
-        HalVibration vib =
-                service.vibrateInternal(UID, Display.DEFAULT_DISPLAY, PACKAGE_NAME, effect, attrs,
-                        "some reason", service);
-        if (vib != null) {
-            vib.waitForEnd();
-        }
-    }
-
-    private void vibrate(VibratorManagerService service, VibrationEffect effect,
-            VibrationAttributes attrs) {
-        vibrate(service, CombinedVibration.createParallel(effect), attrs);
-    }
-
-    private void vibrate(VibratorManagerService service, CombinedVibration effect,
-            VibrationAttributes attrs) {
-        vibrateWithDisplay(service, Display.DEFAULT_DISPLAY, effect, attrs);
-    }
-
-    private void vibrateWithDisplay(VibratorManagerService service, int displayId,
-            CombinedVibration effect, VibrationAttributes attrs) {
-        service.vibrate(UID, displayId, PACKAGE_NAME, effect, attrs, "some reason", service);
-    }
-
-    private boolean waitUntil(Predicate<VibratorManagerService> predicate,
-            VibratorManagerService service, long timeout) throws InterruptedException {
-        long timeoutTimestamp = SystemClock.uptimeMillis() + timeout;
-        boolean predicateResult = false;
-        while (!predicateResult && SystemClock.uptimeMillis() < timeoutTimestamp) {
-            Thread.sleep(10);
-            predicateResult = predicate.test(service);
-        }
-        return predicateResult;
-    }
-}
diff --git a/services/tests/servicestests/test-apps/SuspendTestApp/Android.bp b/services/tests/servicestests/test-apps/SuspendTestApp/Android.bp
index 5e77498..60cb529 100644
--- a/services/tests/servicestests/test-apps/SuspendTestApp/Android.bp
+++ b/services/tests/servicestests/test-apps/SuspendTestApp/Android.bp
@@ -28,7 +28,7 @@
 
     static_libs: [
         "androidx.test.runner",
-        "ub-uiautomator",
+        "androidx.test.uiautomator_uiautomator",
     ],
 
     srcs: [
diff --git a/services/tests/uiservicestests/Android.bp b/services/tests/uiservicestests/Android.bp
index 94f2d2e..4b65895 100644
--- a/services/tests/uiservicestests/Android.bp
+++ b/services/tests/uiservicestests/Android.bp
@@ -26,6 +26,7 @@
         "services.devicepolicy",
         "services.net",
         "services.usage",
+        "service-permission.stubs.system_server",
         "guava",
         "androidx.test.rules",
         "hamcrest-library",
diff --git a/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java
index 8e81e2d..8a0a764 100644
--- a/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java
@@ -27,14 +27,10 @@
 import static android.app.UiModeManager.PROJECTION_TYPE_ALL;
 import static android.app.UiModeManager.PROJECTION_TYPE_AUTOMOTIVE;
 import static android.app.UiModeManager.PROJECTION_TYPE_NONE;
-
 import static com.android.server.UiModeManagerService.SUPPORTED_NIGHT_MODE_CUSTOM_TYPES;
-
 import static com.google.common.truth.Truth.assertThat;
-
 import static junit.framework.TestCase.assertFalse;
 import static junit.framework.TestCase.assertTrue;
-
 import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.empty;
 import static org.junit.Assert.assertEquals;
@@ -83,6 +79,7 @@
 import android.os.Process;
 import android.os.RemoteException;
 import android.os.UserHandle;
+import android.os.test.FakePermissionEnforcer;
 import android.provider.Settings;
 import android.test.mock.MockContentResolver;
 import android.testing.AndroidTestingRunner;
@@ -151,11 +148,16 @@
     private AlarmManager.OnAlarmListener mCustomListener;
     private Consumer<PowerSaveState> mPowerSaveConsumer;
     private TwilightListener mTwilightListener;
+    private FakePermissionEnforcer mPermissionEnforcer;
 
     @Before
     public void setUp() {
-        when(mContext.checkCallingOrSelfPermission(anyString()))
-                .thenReturn(PackageManager.PERMISSION_GRANTED);
+        // The AIDL stub will use PermissionEnforcer to check permission from the caller.
+        mPermissionEnforcer = new FakePermissionEnforcer();
+        mPermissionEnforcer.grant(Manifest.permission.MODIFY_DAY_NIGHT_MODE);
+        mPermissionEnforcer.grant(Manifest.permission.READ_PROJECTION_STATE);
+        doReturn(mPermissionEnforcer).when(mContext).getSystemService(
+                eq(Context.PERMISSION_ENFORCER_SERVICE));
         doAnswer(inv -> {
             mTwilightListener = (TwilightListener) inv.getArgument(0);
             return null;
@@ -312,8 +314,7 @@
 
     @Test
     public void setNightModeCustomType_noPermission_shouldThrow() throws RemoteException {
-        when(mContext.checkCallingOrSelfPermission(eq(MODIFY_DAY_NIGHT_MODE)))
-                .thenReturn(PackageManager.PERMISSION_DENIED);
+        mPermissionEnforcer.revoke(MODIFY_DAY_NIGHT_MODE);
 
         assertThrows(SecurityException.class,
                 () -> mService.setNightModeCustomType(MODE_NIGHT_CUSTOM_TYPE_BEDTIME));
@@ -753,8 +754,7 @@
     @Test
     public void getNightModeCustomType_permissionNotGranted_shouldThrow()
             throws RemoteException {
-        when(mContext.checkCallingOrSelfPermission(eq(MODIFY_DAY_NIGHT_MODE)))
-                .thenReturn(PackageManager.PERMISSION_DENIED);
+        mPermissionEnforcer.revoke(MODIFY_DAY_NIGHT_MODE);
 
         assertThrows(SecurityException.class, () -> mService.getNightModeCustomType());
     }
@@ -1116,8 +1116,7 @@
 
     @Test
     public void addOnProjectionStateChangedListener_enforcesReadProjStatePermission() {
-        doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission(
-                eq(android.Manifest.permission.READ_PROJECTION_STATE), any());
+        mPermissionEnforcer.revoke(android.Manifest.permission.READ_PROJECTION_STATE);
         IOnProjectionStateChangedListener listener = mock(IOnProjectionStateChangedListener.class);
 
         assertThrows(SecurityException.class, () -> mService.addOnProjectionStateChangedListener(
@@ -1141,8 +1140,7 @@
 
     @Test
     public void removeOnProjectionStateChangedListener_enforcesReadProjStatePermission() {
-        doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission(
-                eq(android.Manifest.permission.READ_PROJECTION_STATE), any());
+        mPermissionEnforcer.revoke(android.Manifest.permission.READ_PROJECTION_STATE);
         IOnProjectionStateChangedListener listener = mock(IOnProjectionStateChangedListener.class);
 
         assertThrows(SecurityException.class, () -> mService.removeOnProjectionStateChangedListener(
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ConditionProvidersTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ConditionProvidersTest.java
index b94ed01..d04c518 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ConditionProvidersTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ConditionProvidersTest.java
@@ -18,10 +18,14 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
 
 import android.content.ComponentName;
 import android.content.ServiceConnection;
@@ -51,6 +55,7 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        mContext.ensureTestableResources();
 
         mProviders = new ConditionProviders(mContext, mUserProfiles, mIpm);
         mProviders.setCallback(mCallback);
@@ -131,4 +136,21 @@
         verify(mCallback).onConditionChanged(eq(Uri.parse("b")), eq(conditionsToNotify[3]));
         verifyNoMoreInteractions(mCallback);
     }
+
+    @Test
+    public void testRemoveDefaultFromConfig() {
+        final int userId = 0;
+        ComponentName oldDefaultComponent = ComponentName.unflattenFromString("package/Component1");
+
+        when(mContext.getResources().getString(
+                com.android.internal.R.string.config_defaultDndDeniedPackages))
+                .thenReturn("package");
+        mProviders.setPackageOrComponentEnabled(oldDefaultComponent.flattenToString(),
+                userId, true, true /*enabled*/, false /*userSet*/);
+        assertEquals("package", mProviders.getApproved(userId, true));
+
+        mProviders.removeDefaultFromConfig(userId);
+
+        assertTrue(mProviders.getApproved(userId, true).isEmpty());
+    }
 }
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 bdee99b..e1f3c2b 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -117,6 +117,7 @@
 import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.mock;
@@ -12431,6 +12432,21 @@
         verify(mDevicePolicyManager).isActiveDeviceOwner(uid);
     }
 
+    @Test
+    public void testResetDefaultDnd() {
+        TestableNotificationManagerService service = spy(mService);
+        UserInfo user = new UserInfo(0, "owner", 0);
+        when(mUm.getAliveUsers()).thenReturn(List.of(user));
+        doReturn(false).when(service).isDNDMigrationDone(anyInt());
+
+        service.resetDefaultDndIfNecessary();
+
+        verify(mConditionProviders, times(1)).removeDefaultFromConfig(user.id);
+        verify(mConditionProviders, times(1)).resetDefaultFromConfig();
+        verify(service, times(1)).allowDndPackages(user.id);
+        verify(service, times(1)).setDNDMigrationDone(user.id);
+    }
+
     private static <T extends Parcelable> T parcelAndUnparcel(T source,
             Parcelable.Creator<T> creator) {
         Parcel parcel = Parcel.obtain();
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 539f329..318f932 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java
@@ -246,10 +246,10 @@
         mPermissionHelper.setNotificationPermission("pkg", 10, true, true);
 
         verify(mPermManager).grantRuntimePermission(
-                "pkg", Manifest.permission.POST_NOTIFICATIONS, 10);
+                "pkg", Manifest.permission.POST_NOTIFICATIONS, Context.DEVICE_ID_DEFAULT, 10);
         verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
                 USER_FLAG_MASK | FLAG_PERMISSION_GRANTED_BY_DEFAULT,
-                FLAG_PERMISSION_USER_SET, true, 10);
+                FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, 10);
     }
 
     @Test
@@ -259,16 +259,16 @@
                 .thenReturn(PERMISSION_DENIED);
         when(mPermManager.getPermissionFlags(anyString(),
                 eq(Manifest.permission.POST_NOTIFICATIONS),
-                anyInt())).thenReturn(FLAG_PERMISSION_GRANTED_BY_DEFAULT);
+                anyInt(), anyInt())).thenReturn(FLAG_PERMISSION_GRANTED_BY_DEFAULT);
         PermissionHelper.PackagePermission pkgPerm = new PermissionHelper.PackagePermission(
                 "pkg", 10, true, false);
 
         mPermissionHelper.setNotificationPermission(pkgPerm);
         verify(mPermManager).grantRuntimePermission(
-                "pkg", Manifest.permission.POST_NOTIFICATIONS, 10);
+                "pkg", Manifest.permission.POST_NOTIFICATIONS, Context.DEVICE_ID_DEFAULT, 10);
         verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
                 USER_FLAG_MASK | FLAG_PERMISSION_GRANTED_BY_DEFAULT,
-                FLAG_PERMISSION_USER_SET, true, 10);
+                FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, 10);
     }
 
     @Test
@@ -279,10 +279,11 @@
         mPermissionHelper.setNotificationPermission("pkg", 10, false, true);
 
         verify(mPermManager).revokeRuntimePermission(
-                eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS), eq(10), anyString());
+                eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS),
+                eq(Context.DEVICE_ID_DEFAULT), eq(10), anyString());
         verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
                 USER_FLAG_MASK | FLAG_PERMISSION_GRANTED_BY_DEFAULT,
-                FLAG_PERMISSION_USER_SET, true, 10);
+                FLAG_PERMISSION_USER_SET, true, Context.DEVICE_ID_DEFAULT, 10);
     }
 
     @Test
@@ -293,9 +294,9 @@
         mPermissionHelper.setNotificationPermission("pkg", 10, true, false);
 
         verify(mPermManager).grantRuntimePermission(
-                "pkg", Manifest.permission.POST_NOTIFICATIONS, 10);
+                "pkg", Manifest.permission.POST_NOTIFICATIONS, Context.DEVICE_ID_DEFAULT, 10);
         verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
-                USER_FLAG_MASK, 0, true, 10);
+                USER_FLAG_MASK, 0, true, Context.DEVICE_ID_DEFAULT, 10);
     }
 
     @Test
@@ -306,36 +307,37 @@
         mPermissionHelper.setNotificationPermission("pkg", 10, false, false);
 
         verify(mPermManager).revokeRuntimePermission(
-                eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS), eq(10), anyString());
+                eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS),
+                eq(Context.DEVICE_ID_DEFAULT), eq(10), anyString());
         verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
                 USER_FLAG_MASK | FLAG_PERMISSION_GRANTED_BY_DEFAULT, 0,
-                true, 10);
+                true, Context.DEVICE_ID_DEFAULT, 10);
     }
 
     @Test
     public void testSetNotificationPermission_SystemFixedPermNotSet() throws Exception {
         when(mPermManager.getPermissionFlags(anyString(),
                 eq(Manifest.permission.POST_NOTIFICATIONS),
-                anyInt())).thenReturn(FLAG_PERMISSION_SYSTEM_FIXED);
+                anyInt(), anyInt())).thenReturn(FLAG_PERMISSION_SYSTEM_FIXED);
 
         mPermissionHelper.setNotificationPermission("pkg", 10, false, true);
         verify(mPermManager, never()).revokeRuntimePermission(
-                anyString(), anyString(), anyInt(), anyString());
+                anyString(), anyString(), anyInt(), anyInt(), anyString());
         verify(mPermManager, never()).updatePermissionFlags(
-                anyString(), anyString(), anyInt(), anyInt(), anyBoolean(), anyInt());
+                anyString(), anyString(), anyInt(), anyInt(), anyBoolean(), anyInt(), anyInt());
     }
 
     @Test
     public void testSetNotificationPermission_PolicyFixedPermNotSet() throws Exception {
         when(mPermManager.getPermissionFlags(anyString(),
                 eq(Manifest.permission.POST_NOTIFICATIONS),
-                anyInt())).thenReturn(FLAG_PERMISSION_POLICY_FIXED);
+                anyInt(), anyInt())).thenReturn(FLAG_PERMISSION_POLICY_FIXED);
 
         mPermissionHelper.setNotificationPermission("pkg", 10, false, true);
         verify(mPermManager, never()).revokeRuntimePermission(
-                anyString(), anyString(), anyInt(), anyString());
+                anyString(), anyString(), anyInt(), anyInt(), anyString());
         verify(mPermManager, never()).updatePermissionFlags(
-                anyString(), anyString(), anyInt(), anyInt(), anyBoolean(), anyInt());
+                anyString(), anyString(), anyInt(), anyInt(), anyBoolean(), anyInt(), anyInt());
     }
 
     @Test
@@ -345,7 +347,7 @@
         mPermissionHelper.setNotificationPermission("pkg", 10, true, false);
 
         verify(mPermManager, never()).grantRuntimePermission(
-                "pkg", Manifest.permission.POST_NOTIFICATIONS, 10);
+                "pkg", Manifest.permission.POST_NOTIFICATIONS, Context.DEVICE_ID_DEFAULT, 10);
     }
 
     @Test
@@ -355,7 +357,8 @@
         mPermissionHelper.setNotificationPermission("pkg", 10, false, false);
 
         verify(mPermManager, never()).revokeRuntimePermission(
-                eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS), eq(10), anyString());
+                eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS),
+                eq(Context.DEVICE_ID_DEFAULT), eq(10), anyString());
     }
 
     @Test
@@ -374,26 +377,27 @@
         verify(mContext, never()).checkPermission(
                 eq(Manifest.permission.POST_NOTIFICATIONS), eq(-1), eq(testUid));
         verify(mPermManager, never()).revokeRuntimePermission(
-                eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS), eq(10), anyString());
+                eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS),
+                eq(Context.DEVICE_ID_DEFAULT), eq(10), anyString());
     }
 
     @Test
     public void testIsPermissionFixed() throws Exception {
         when(mPermManager.getPermissionFlags(anyString(),
                 eq(Manifest.permission.POST_NOTIFICATIONS),
-                anyInt())).thenReturn(FLAG_PERMISSION_USER_SET);
+                anyInt(), anyInt())).thenReturn(FLAG_PERMISSION_USER_SET);
 
         assertThat(mPermissionHelper.isPermissionFixed("pkg", 0)).isFalse();
 
         when(mPermManager.getPermissionFlags(anyString(),
-                eq(Manifest.permission.POST_NOTIFICATIONS),
+                eq(Manifest.permission.POST_NOTIFICATIONS), anyInt(),
                 anyInt())).thenReturn(FLAG_PERMISSION_USER_SET|FLAG_PERMISSION_POLICY_FIXED);
 
         assertThat(mPermissionHelper.isPermissionFixed("pkg", 0)).isTrue();
 
         when(mPermManager.getPermissionFlags(anyString(),
                 eq(Manifest.permission.POST_NOTIFICATIONS),
-                anyInt())).thenReturn(FLAG_PERMISSION_SYSTEM_FIXED);
+                anyInt(), anyInt())).thenReturn(FLAG_PERMISSION_SYSTEM_FIXED);
 
         assertThat(mPermissionHelper.isPermissionFixed("pkg", 0)).isTrue();
     }
@@ -434,13 +438,14 @@
                 .thenReturn(requesting);
 
         // 2 and 3 are user-set permissions
-        when(mPermManager.getPermissionFlags(
-                "first", Manifest.permission.POST_NOTIFICATIONS, userId)).thenReturn(0);
-        when(mPermManager.getPermissionFlags(
-                "second", Manifest.permission.POST_NOTIFICATIONS, userId))
+        when(mPermManager.getPermissionFlags("first", Manifest.permission.POST_NOTIFICATIONS,
+                Context.DEVICE_ID_DEFAULT, userId))
+                .thenReturn(0);
+        when(mPermManager.getPermissionFlags("second", Manifest.permission.POST_NOTIFICATIONS,
+                Context.DEVICE_ID_DEFAULT, userId))
                 .thenReturn(FLAG_PERMISSION_USER_SET);
-        when(mPermManager.getPermissionFlags(
-                "third", Manifest.permission.POST_NOTIFICATIONS, userId))
+        when(mPermManager.getPermissionFlags("third", Manifest.permission.POST_NOTIFICATIONS,
+                Context.DEVICE_ID_DEFAULT, userId))
                 .thenReturn(FLAG_PERMISSION_USER_SET);
 
         Map<Pair<Integer, String>, Pair<Boolean, Boolean>> expected =
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
index c242554..81d939f 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
@@ -600,7 +600,7 @@
         NotificationChannel channel2 =
                 new NotificationChannel("id2", "name2", IMPORTANCE_LOW);
         channel2.setDescription("descriptions for all");
-        channel2.setSound(SOUND_URI, mAudioAttributes);
+        channel2.setSound(CANONICAL_SOUND_URI, mAudioAttributes);
         channel2.enableLights(true);
         channel2.setBypassDnd(true);
         channel2.setLockscreenVisibility(VISIBILITY_SECRET);
@@ -1374,6 +1374,8 @@
                 .when(mTestIContentProvider).uncanonicalize(any(), eq(CANONICAL_SOUND_URI));
         doReturn(localUri)
                 .when(mTestIContentProvider).uncanonicalize(any(), eq(canonicalBasedOnLocal));
+        doReturn(canonicalBasedOnLocal)
+                .when(mTestIContentProvider).canonicalize(any(), eq(localUri));
 
         NotificationChannel channel =
                 new NotificationChannel("id", "name", IMPORTANCE_LOW);
@@ -1387,7 +1389,7 @@
 
         NotificationChannel actualChannel = mHelper.getNotificationChannel(
                 PKG_N_MR1, UID_N_MR1, channel.getId(), false);
-        assertEquals(localUri, actualChannel.getSound());
+        assertEquals(canonicalBasedOnLocal, actualChannel.getSound());
     }
 
     @Test
diff --git a/services/tests/vibrator/Android.bp b/services/tests/vibrator/Android.bp
new file mode 100644
index 0000000..ca5cfa5
--- /dev/null
+++ b/services/tests/vibrator/Android.bp
@@ -0,0 +1,62 @@
+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_test {
+    name: "FrameworksVibratorServicesTests",
+
+    srcs: [
+        "src/**/*.java",
+    ],
+
+    libs: [
+        "android.hardware.vibrator-V2-java",
+        "android.test.mock",
+        "android.test.base",
+        "android.test.runner",
+    ],
+
+    static_libs: [
+        "androidx.test.core",
+        "androidx.test.ext.truth",
+        "androidx.test.runner",
+        "androidx.test.rules",
+        "androidx.test.ext.junit",
+        "frameworks-base-testutils",
+        "frameworks-services-vibrator-testutils",
+        "junit",
+        "mockito-target-minus-junit4",
+        "platform-test-annotations",
+        "service-permission.stubs.system_server",
+        "services.core",
+    ],
+
+    platform_apis: true,
+    certificate: "platform",
+    dxflags: ["--multi-dex"],
+
+    test_suites: [
+        "device-tests",
+        "automotive-tests",
+    ],
+
+    optimize: {
+        enabled: false,
+    },
+}
+
+java_library {
+    name: "frameworks-services-vibrator-testutils",
+    visibility: [":__subpackages__"],
+    srcs: [
+        "utils/**/*.java",
+    ],
+    static_libs: [
+        "services.core",
+    ],
+}
diff --git a/services/tests/vibrator/AndroidManifest.xml b/services/tests/vibrator/AndroidManifest.xml
new file mode 100644
index 0000000..a14ea55
--- /dev/null
+++ b/services/tests/vibrator/AndroidManifest.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+     package="com.android.framework.services.tests.vibrator">
+
+    <!-- Required to set user settings -->
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
+    <!-- Required to register uid observer -->
+    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
+    <!-- Required to acquire wake locks during vibrations -->
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
+    <!-- Required to request vibrations -->
+    <uses-permission android:name="android.permission.VIBRATE" />
+    <!-- Required to listen to the vibrator state -->
+    <uses-permission android:name="android.permission.ACCESS_VIBRATOR_STATE" />
+    <!-- Required to set always-on vibrations -->
+    <uses-permission android:name="android.permission.VIBRATE_ALWAYS_ON" />
+
+    <application android:debuggable="true">
+        <uses-library android:name="android.test.mock" android:required="true" />
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation
+        android:name="androidx.test.runner.AndroidJUnitRunner"
+        android:label="Vibrator Service Tests"
+        android:targetPackage="com.android.framework.services.tests.vibrator" />
+
+</manifest>
diff --git a/services/tests/vibrator/OWNERS b/services/tests/vibrator/OWNERS
new file mode 100644
index 0000000..93b44f4
--- /dev/null
+++ b/services/tests/vibrator/OWNERS
@@ -0,0 +1,3 @@
+# Bug component: 345036
+
+include /services/core/java/com/android/server/vibrator/OWNERS
diff --git a/services/tests/vibrator/TEST_MAPPING b/services/tests/vibrator/TEST_MAPPING
new file mode 100644
index 0000000..f0a7e47
--- /dev/null
+++ b/services/tests/vibrator/TEST_MAPPING
@@ -0,0 +1,21 @@
+{
+  "presubmit": [
+    {
+      "name": "FrameworksVibratorServicesTests",
+      "options": [
+        {"exclude-annotation": "android.platform.test.annotations.LargeTest"},
+        {"exclude-annotation": "android.platform.test.annotations.FlakyTest"},
+        {"exclude-annotation": "androidx.test.filters.FlakyTest"},
+        {"exclude-annotation": "org.junit.Ignore"}
+      ]
+    }
+  ],
+  "postsubmit": [
+    {
+      "name": "FrameworksVibratorServicesTests",
+      "options": [
+        {"exclude-annotation": "org.junit.Ignore"}
+      ]
+    }
+  ]
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/DeviceAdapterTest.java b/services/tests/vibrator/src/com/android/server/vibrator/DeviceAdapterTest.java
new file mode 100644
index 0000000..3013ed0
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/DeviceAdapterTest.java
@@ -0,0 +1,300 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.vibrator;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.ComponentName;
+import android.content.pm.PackageManagerInternal;
+import android.hardware.vibrator.IVibrator;
+import android.os.CombinedVibration;
+import android.os.Handler;
+import android.os.VibrationEffect;
+import android.os.test.TestLooper;
+import android.os.vibrator.PrebakedSegment;
+import android.os.vibrator.PrimitiveSegment;
+import android.os.vibrator.RampSegment;
+import android.os.vibrator.StepSegment;
+import android.os.vibrator.VibrationEffectSegment;
+import android.util.SparseArray;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.server.LocalServices;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import java.util.Arrays;
+
+public class DeviceAdapterTest {
+    private static final int EMPTY_VIBRATOR_ID = 1;
+    private static final int PWLE_VIBRATOR_ID = 2;
+    private static final int PWLE_WITHOUT_FREQUENCIES_VIBRATOR_ID = 3;
+    private static final float TEST_MIN_FREQUENCY = 50;
+    private static final float TEST_RESONANT_FREQUENCY = 150;
+    private static final float TEST_FREQUENCY_RESOLUTION = 25;
+    private static final float[] TEST_AMPLITUDE_MAP = new float[]{
+            /* 50Hz= */ 0.08f, 0.16f, 0.32f, 0.64f, /* 150Hz= */ 0.8f, 0.72f, /* 200Hz= */ 0.64f};
+
+    @Rule
+    public MockitoRule mMockitoRule = MockitoJUnit.rule();
+
+    @Mock
+    private PackageManagerInternal mPackageManagerInternalMock;
+
+    private TestLooper mTestLooper;
+    private VibrationSettings mVibrationSettings;
+    private DeviceAdapter mAdapter;
+
+    @Before
+    public void setUp() throws Exception {
+        when(mPackageManagerInternalMock.getSystemUiServiceComponent())
+                .thenReturn(new ComponentName("", ""));
+        LocalServices.removeServiceForTest(PackageManagerInternal.class);
+        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternalMock);
+
+        mTestLooper = new TestLooper();
+        mVibrationSettings = new VibrationSettings(
+                InstrumentationRegistry.getContext(), new Handler(mTestLooper.getLooper()));
+
+        SparseArray<VibratorController> vibrators = new SparseArray<>();
+        vibrators.put(EMPTY_VIBRATOR_ID, createEmptyVibratorController(EMPTY_VIBRATOR_ID));
+        vibrators.put(PWLE_VIBRATOR_ID, createPwleVibratorController(PWLE_VIBRATOR_ID));
+        vibrators.put(PWLE_WITHOUT_FREQUENCIES_VIBRATOR_ID,
+                createPwleWithoutFrequenciesVibratorController(
+                        PWLE_WITHOUT_FREQUENCIES_VIBRATOR_ID));
+        mAdapter = new DeviceAdapter(mVibrationSettings, vibrators);
+    }
+
+    @Test
+    public void testPrebakedAndPrimitiveSegments_returnsOriginalSegment() {
+        VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList(
+                new PrebakedSegment(
+                        VibrationEffect.EFFECT_CLICK, false, VibrationEffect.EFFECT_STRENGTH_LIGHT),
+                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10),
+                new PrebakedSegment(
+                        VibrationEffect.EFFECT_THUD, true, VibrationEffect.EFFECT_STRENGTH_STRONG),
+                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_SPIN, 0.5f, 100)),
+                /* repeatIndex= */ -1);
+
+        assertThat(mAdapter.adaptToVibrator(EMPTY_VIBRATOR_ID, effect)).isEqualTo(effect);
+        assertThat(mAdapter.adaptToVibrator(PWLE_VIBRATOR_ID, effect)).isEqualTo(effect);
+    }
+
+    @Test
+    public void testStepAndRampSegments_withoutPwleCapability_convertsRampsToSteps() {
+        VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList(
+                // Step(amplitude, frequencyHz, duration)
+                new StepSegment(0, 200, 10),
+                new StepSegment(0.5f, 150, 100),
+                // Ramp(startAmplitude, endAmplitude, startFrequencyHz, endFrequencyHz, duration)
+                new RampSegment(1, 0.2f, 1, 300, 10),
+                new RampSegment(0.8f, 0.2f, 0, 0, 100),
+                new RampSegment(0.65f, 0.65f, 0, 1, 1000)),
+                /* repeatIndex= */ 3);
+
+        VibrationEffect.Composed adaptedEffect =
+                (VibrationEffect.Composed) mAdapter.adaptToVibrator(EMPTY_VIBRATOR_ID, effect);
+        assertThat(adaptedEffect.getSegments().size()).isGreaterThan(effect.getSegments().size());
+        assertThat(adaptedEffect.getRepeatIndex()).isAtLeast(effect.getRepeatIndex());
+
+        for (VibrationEffectSegment adaptedSegment : adaptedEffect.getSegments()) {
+            assertThat(adaptedSegment).isInstanceOf(StepSegment.class);
+        }
+    }
+
+    @Test
+    public void testStepAndRampSegments_withPwleCapability_convertsStepsToRamps() {
+        VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList(
+                // Step(amplitude, frequencyHz, duration)
+                new StepSegment(0, 175, 10),
+                new StepSegment(0.5f, 150, 60),
+                // Ramp(startAmplitude, endAmplitude, startFrequencyHz, endFrequencyHz, duration)
+                new RampSegment(1, 1, 50, 200, 50),
+                new RampSegment(0.8f, 0.2f, 1000, 1, 20)),
+                /* repeatIndex= */ 2);
+
+        VibrationEffect.Composed expected = new VibrationEffect.Composed(Arrays.asList(
+                // Ramp(startAmplitude, endAmplitude, startFrequencyHz, endFrequencyHz, duration)
+                new RampSegment(0, 0, 175, 175, 10),
+                new RampSegment(0.5f, 0.5f, 150, 150, 60),
+                new RampSegment(0.08f, 0.64f, 50, 200, 50),
+                new RampSegment(0.64f, 0.08f, 200, 50, 20)),
+                /* repeatIndex= */ 2);
+
+        assertThat(mAdapter.adaptToVibrator(PWLE_VIBRATOR_ID, effect)).isEqualTo(expected);
+    }
+
+    @Test
+    public void testStepAndRampSegments_withEmptyFreqMapping_returnsAmplitudesWithResonantFreq() {
+        VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList(
+                // Step(amplitude, frequencyHz, duration)
+                new StepSegment(0, 175, 10),
+                new StepSegment(0.5f, 0, 100),
+                // Ramp(startAmplitude, endAmplitude, startFrequencyHz, endFrequencyHz, duration)
+                new RampSegment(0.8f, 1, 50, 200, 50),
+                new RampSegment(0.7f, 0.5f, 1000, 1, 20)),
+                /* repeatIndex= */ 2);
+
+        VibrationEffect.Composed expected = new VibrationEffect.Composed(Arrays.asList(
+                // Ramp(startAmplitude, endAmplitude, startFrequencyHz, endFrequencyHz, duration)
+                new RampSegment(0, 0, 0, 0, 10),
+                new RampSegment(0.5f, 0.5f, 0, 0, 100),
+                new RampSegment(0.8f, 1, 0, 0, 50),
+                new RampSegment(0.7f, 0.5f, 0, 0, 20)),
+                /* repeatIndex= */ 2);
+
+        assertThat(mAdapter.adaptToVibrator(PWLE_WITHOUT_FREQUENCIES_VIBRATOR_ID, effect))
+                .isEqualTo(expected);
+    }
+
+    @Test
+    public void testStepAndRampSegments_withValidFreqMapping_returnsClippedValuesOnlyInRamps() {
+        VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList(
+                // Individual step without frequency control, will not use PWLE composition
+                // Step(amplitude, frequencyHz, duration)
+                new StepSegment(1, 0, 10),
+                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10),
+                // Step with frequency control and followed by ramps, will use PWLE composition
+                // Step(amplitude, frequencyHz, duration)
+                new StepSegment(0.5f, 0, 10),
+                new StepSegment(1, 125, 100),
+                // Ramp(startAmplitude, endAmplitude, startFrequencyHz, endFrequencyHz, duration)
+                new RampSegment(1, 1, 50, 200, 50),
+                new RampSegment(0.8f, 0.2f, 1000, 1, 20)),
+                /* repeatIndex= */ 2);
+
+        VibrationEffect.Composed expected = new VibrationEffect.Composed(Arrays.asList(
+                // Step(amplitude, frequencyHz, duration)
+                new StepSegment(1, 0, 10),
+                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10),
+                // Ramp(startAmplitude, endAmplitude, startFrequencyHz, endFrequencyHz, duration)
+                new RampSegment(0.5f, 0.5f, 150, 150, 10),
+                new RampSegment(0.64f, 0.64f, 125, 125, 100),
+                new RampSegment(0.08f, 0.64f, 50, 200, 50),
+                new RampSegment(0.64f, 0.08f, 200, 50, 20)),
+                /* repeatIndex= */ 2);
+
+        assertThat(mAdapter.adaptToVibrator(PWLE_VIBRATOR_ID, effect)).isEqualTo(expected);
+    }
+
+    @Test
+    public void testMonoCombinedVibration_returnsSameVibrationWhenEffectsUnchanged() {
+        VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList(
+                new PrebakedSegment(
+                        VibrationEffect.EFFECT_CLICK, false, VibrationEffect.EFFECT_STRENGTH_LIGHT),
+                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10),
+                new PrebakedSegment(
+                        VibrationEffect.EFFECT_THUD, true, VibrationEffect.EFFECT_STRENGTH_STRONG),
+                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_SPIN, 0.5f, 100)),
+                /* repeatIndex= */ -1);
+
+        CombinedVibration expected = CombinedVibration.createParallel(effect);
+
+        assertThat(expected.adapt(mAdapter)).isEqualTo(expected);
+    }
+
+    @Test
+    public void testMonoCombinedVibration_mapsEffectsToAllVibrators() {
+        VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList(
+                // Step(amplitude, frequencyHz, duration)
+                new StepSegment(1, 175, 10),
+                // Ramp(startAmplitude, endAmplitude, startFrequencyHz, endFrequencyHz, duration)
+                new RampSegment(1, 1, 50, 200, 50)),
+                /* repeatIndex= */ 1);
+
+        CombinedVibration expected = CombinedVibration.startParallel()
+                .addVibrator(EMPTY_VIBRATOR_ID, new VibrationEffect.Composed(Arrays.asList(
+                        // Step(amplitude, frequencyHz, duration)
+                        new StepSegment(1, 175, 10),
+                        new StepSegment(1, 0, 50)),
+                        /* repeatIndex= */ 1))
+                .addVibrator(PWLE_VIBRATOR_ID, new VibrationEffect.Composed(Arrays.asList(
+                // Ramp(startAmplitude, endAmplitude, startFrequencyHz, endFrequencyHz, duration)
+                        new RampSegment(0.72f, 0.72f, 175, 175, 10),
+                        new RampSegment(0.08f, 0.64f, 50, 200, 50)),
+                        /* repeatIndex= */ 1))
+                .addVibrator(PWLE_WITHOUT_FREQUENCIES_VIBRATOR_ID,
+                        new VibrationEffect.Composed(Arrays.asList(
+                // Ramp(startAmplitude, endAmplitude, startFrequencyHz, endFrequencyHz, duration)
+                                new RampSegment(1, 1, 0, 0, 10),
+                                new RampSegment(1, 1, 0, 0, 50)),
+                                /* repeatIndex= */ 1))
+                .combine();
+
+        assertThat(CombinedVibration.createParallel(effect).adapt(mAdapter)).isEqualTo(expected);
+    }
+
+    @Test
+    public void testStereoCombinedVibration_adaptMappedEffectsAndLeaveUnmappedOnesUnchanged() {
+        VibrationEffect.Composed effect = new VibrationEffect.Composed(Arrays.asList(
+                // Step(amplitude, frequencyHz, duration)
+                new StepSegment(1, 175, 10)),
+                /* repeatIndex= */ -1);
+
+        int missingVibratorId = 1234;
+        CombinedVibration vibration = CombinedVibration.startParallel()
+                .addVibrator(missingVibratorId, effect)
+                .addVibrator(EMPTY_VIBRATOR_ID, effect)
+                .addVibrator(PWLE_VIBRATOR_ID, effect)
+                .combine();
+
+        CombinedVibration expected = CombinedVibration.startParallel()
+                .addVibrator(missingVibratorId, effect) // unchanged
+                .addVibrator(EMPTY_VIBRATOR_ID, new VibrationEffect.Composed(Arrays.asList(
+                        // Step(amplitude, frequencyHz, duration)
+                        new StepSegment(1, 175, 10)),
+                        /* repeatIndex= */ -1))
+                .addVibrator(PWLE_VIBRATOR_ID, new VibrationEffect.Composed(Arrays.asList(
+                // Ramp(startAmplitude, endAmplitude, startFrequencyHz, endFrequencyHz, duration)
+                        new RampSegment(0.72f, 0.72f, 175, 175, 10)),
+                        /* repeatIndex= */ -1))
+                .combine();
+
+        assertThat(vibration.adapt(mAdapter)).isEqualTo(expected);
+    }
+
+    private VibratorController createEmptyVibratorController(int vibratorId) {
+        return new FakeVibratorControllerProvider(mTestLooper.getLooper())
+                .newVibratorController(vibratorId, (id, vibrationId)  -> {});
+    }
+
+    private VibratorController createPwleWithoutFrequenciesVibratorController(int vibratorId) {
+        FakeVibratorControllerProvider provider = new FakeVibratorControllerProvider(
+                mTestLooper.getLooper());
+        provider.setCapabilities(IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
+        return provider.newVibratorController(vibratorId, (id, vibrationId)  -> {});
+    }
+
+    private VibratorController createPwleVibratorController(int vibratorId) {
+        FakeVibratorControllerProvider provider = new FakeVibratorControllerProvider(
+                mTestLooper.getLooper());
+        provider.setCapabilities(IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
+        provider.setResonantFrequency(TEST_RESONANT_FREQUENCY);
+        provider.setMinFrequency(TEST_MIN_FREQUENCY);
+        provider.setFrequencyResolution(TEST_FREQUENCY_RESOLUTION);
+        provider.setMaxAmplitudes(TEST_AMPLITUDE_MAP);
+        return provider.newVibratorController(vibratorId, (id, vibrationId)  -> {});
+    }
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/HapticFeedbackCustomizationTest.java b/services/tests/vibrator/src/com/android/server/vibrator/HapticFeedbackCustomizationTest.java
new file mode 100644
index 0000000..a81898d
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/HapticFeedbackCustomizationTest.java
@@ -0,0 +1,295 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.vibrator;
+
+
+import static android.os.VibrationEffect.Composition.PRIMITIVE_TICK;
+import static android.os.VibrationEffect.EFFECT_CLICK;
+
+import static com.android.server.vibrator.HapticFeedbackCustomization.CustomizationParserException;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertThrows;
+import static org.mockito.Mockito.when;
+
+import android.content.res.Resources;
+import android.os.VibrationEffect;
+import android.util.AtomicFile;
+import android.util.SparseArray;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.R;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import java.io.File;
+import java.io.FileOutputStream;
+
+public class HapticFeedbackCustomizationTest {
+    @Rule public MockitoRule rule = MockitoJUnit.rule();
+
+    // Pairs of valid vibration XML along with their equivalent VibrationEffect.
+    private static final String COMPOSITION_VIBRATION_XML = "<vibration>"
+            + "<primitive-effect name=\"tick\" scale=\"0.2497\"/>"
+            + "</vibration>";
+    private static final VibrationEffect COMPOSITION_VIBRATION =
+            VibrationEffect.startComposition().addPrimitive(PRIMITIVE_TICK, 0.2497f).compose();
+
+    private static final String PREDEFINED_VIBRATION_XML =
+            "<vibration><predefined-effect name=\"click\"/></vibration>";
+    private static final VibrationEffect PREDEFINED_VIBRATION =
+            VibrationEffect.createPredefined(EFFECT_CLICK);
+
+    @Mock private Resources mResourcesMock;
+
+    @Test
+    public void testParseCustomizations_noCustomization_success() throws Exception {
+        assertParseCustomizationsSucceeds(
+                /* xml= */ "<haptic-feedback-constants></haptic-feedback-constants>",
+                /* expectedCustomizations= */ new SparseArray<>());
+    }
+
+    @Test
+    public void testParseCustomizations_oneCustomization_success() throws Exception {
+        String xml = "<haptic-feedback-constants>"
+                + "<constant id=\"10\">"
+                + COMPOSITION_VIBRATION_XML
+                + "</constant>"
+                + "</haptic-feedback-constants>";
+        SparseArray<VibrationEffect> expectedMapping = new SparseArray<>();
+        expectedMapping.put(10, COMPOSITION_VIBRATION);
+
+        assertParseCustomizationsSucceeds(xml, expectedMapping);
+    }
+
+    @Test
+    public void testParseCustomizations_multipleCustomizations_success() throws Exception {
+        String xml = "<haptic-feedback-constants>"
+                + "<constant id=\"1\">"
+                + COMPOSITION_VIBRATION_XML
+                + "</constant>"
+                + "<constant id=\"12\">"
+                + PREDEFINED_VIBRATION_XML
+                + "</constant>"
+                + "<constant id=\"150\">"
+                + PREDEFINED_VIBRATION_XML
+                + "</constant>"
+                + "</haptic-feedback-constants>";
+        SparseArray<VibrationEffect> expectedMapping = new SparseArray<>();
+        expectedMapping.put(1, COMPOSITION_VIBRATION);
+        expectedMapping.put(12, PREDEFINED_VIBRATION);
+        expectedMapping.put(150, PREDEFINED_VIBRATION);
+
+        assertParseCustomizationsSucceeds(xml, expectedMapping);
+    }
+
+    @Test
+    public void testParseCustomizations_noCustomizationFile_returnsNull() throws Exception {
+        setCustomizationFilePath("");
+
+        assertThat(HapticFeedbackCustomization.loadVibrations(mResourcesMock)).isNull();
+
+        setCustomizationFilePath(null);
+
+        assertThat(HapticFeedbackCustomization.loadVibrations(mResourcesMock)).isNull();
+
+        setCustomizationFilePath("non_existent_file.xml");
+
+        assertThat(HapticFeedbackCustomization.loadVibrations(mResourcesMock)).isNull();
+    }
+
+    @Test
+    public void testParseCustomizations_disallowedVibrationForHapticFeedback_throwsException()
+            throws Exception {
+        // The XML content is good, but the serialized vibration is not supported for haptic
+        // feedback usage (i.e. repeating vibration).
+        assertParseCustomizationsFails(
+                "<haptic-feedback-constants>"
+                + "<constant id=\"10\">"
+                + "<vibration>"
+                + "<waveform-effect>"
+                + "<repeating>"
+                + "<waveform-entry durationMs=\"10\" amplitude=\"100\"/>"
+                + "</repeating>"
+                + "</waveform-effect>"
+                + "</vibration>"
+                + "</constant>"
+                + "</haptic-feedback-constants>");
+    }
+
+    @Test
+    public void testParseCustomizations_emptyXml_throwsException() throws Exception {
+        assertParseCustomizationsFails("");
+    }
+
+    @Test
+    public void testParseCustomizations_noVibrationXml_throwsException() throws Exception {
+        assertParseCustomizationsFails(
+                "<haptic-feedback-constants>"
+                + "<constant id=\"1\">"
+                + "</constant>"
+                + "</haptic-feedback-constants>");
+    }
+
+    @Test
+    public void testParseCustomizations_badEffectId_throwsException() throws Exception {
+        // Negative id
+        assertParseCustomizationsFails(
+                "<haptic-feedback-constants>"
+                + "<constant id=\"-10\">"
+                + COMPOSITION_VIBRATION_XML
+                + "</constant>"
+                + "</haptic-feedback-constants>");
+
+        // Non-numeral id
+        assertParseCustomizationsFails(
+                "<haptic-feedback-constants>"
+                + "<constant id=\"xyz\">"
+                + COMPOSITION_VIBRATION_XML
+                + "</constant>"
+                + "</haptic-feedback-constants>");
+    }
+
+    @Test
+    public void testParseCustomizations_malformedXml_throwsException() throws Exception {
+        // No start "<constant>" tag
+        assertParseCustomizationsFails(
+                "<haptic-feedback-constants>"
+                + COMPOSITION_VIBRATION_XML
+                + "</constant>"
+                + "</haptic-feedback-constants>");
+
+        // No end "<constant>" tag
+        assertParseCustomizationsFails(
+                "<haptic-feedback-constants>"
+                + "<constant id=\"10\">"
+                + COMPOSITION_VIBRATION_XML
+                + "</haptic-feedback-constants>");
+
+        // No start "<haptic-feedback-constants>" tag
+        assertParseCustomizationsFails(
+                "<constant id=\"10\">"
+                + COMPOSITION_VIBRATION_XML
+                + "</constant>"
+                + "</haptic-feedback-constants>");
+
+        // No end "<haptic-feedback-constants>" tag
+        assertParseCustomizationsFails(
+                "<haptic-feedback-constants>"
+                + "<constant id=\"10\">"
+                + COMPOSITION_VIBRATION_XML
+                + "</constant>");
+    }
+
+    @Test
+    public void testParseCustomizations_badVibrationXml_throwsException() throws Exception {
+        assertParseCustomizationsFails(
+                "<haptic-feedback-constants>"
+                + "<constant id=\"10\">"
+                + "<bad-vibration></bad-vibration>"
+                + "</constant>"
+                + "</haptic-feedback-constants>");
+
+        assertParseCustomizationsFails(
+                "<haptic-feedback-constants>"
+                + "<constant id=\"10\">"
+                + "<vibration><predefined-effect name=\"bad-effect-name\"/></vibration>"
+                + "</constant>"
+                + "</haptic-feedback-constants>");
+    }
+
+    @Test
+    public void testParseCustomizations_badConstantAttribute_throwsException() throws Exception {
+        assertParseCustomizationsFails(
+                "<haptic-feedback-constants>"
+                + "<constant iddddd=\"10\">"
+                + COMPOSITION_VIBRATION_XML
+                + "</constant>"
+                + "</haptic-feedback-constants>");
+
+        assertParseCustomizationsFails(
+                "<haptic-feedback-constants>"
+                + "<constant id=\"10\" unwanted-attr=\"1\">"
+                + COMPOSITION_VIBRATION_XML
+                + "</constant>"
+                + "</haptic-feedback-constants>");
+    }
+
+    @Test
+    public void testParseCustomizations_duplicateEffects_throwsException() throws Exception {
+        assertParseCustomizationsFails(
+                "<haptic-feedback-constants>"
+                + "<constant id=\"10\">"
+                + COMPOSITION_VIBRATION_XML
+                + "</constant>"
+                + "<constant id=\"10\">"
+                + PREDEFINED_VIBRATION_XML
+                + "</constant>"
+                + "<constant id=\"11\">"
+                + PREDEFINED_VIBRATION_XML
+                + "</constant>"
+                + "</haptic-feedback-constants>");
+    }
+
+    private void assertParseCustomizationsSucceeds(
+            String xml, SparseArray<VibrationEffect> expectedCustomizations) throws Exception {
+        setupCustomizationFile(xml);
+        assertThat(expectedCustomizations.contentEquals(
+                HapticFeedbackCustomization.loadVibrations(mResourcesMock))).isTrue();
+    }
+
+    private void assertParseCustomizationsFails(String xml) throws Exception {
+        setupCustomizationFile(xml);
+        assertThrows("Expected haptic feedback customization to fail for " + xml,
+                CustomizationParserException.class,
+                () ->  HapticFeedbackCustomization.loadVibrations(mResourcesMock));
+    }
+
+    private void assertParseCustomizationsFails() throws Exception {
+        assertThrows("Expected haptic feedback customization to fail",
+                CustomizationParserException.class,
+                () ->  HapticFeedbackCustomization.loadVibrations(mResourcesMock));
+    }
+
+    private void setupCustomizationFile(String xml) throws Exception {
+        File file = createFile(xml);
+        setCustomizationFilePath(file.getAbsolutePath());
+    }
+
+    private void setCustomizationFilePath(String path) {
+        when(mResourcesMock.getString(R.string.config_hapticFeedbackCustomizationFile))
+                .thenReturn(path);
+    }
+
+    private static File createFile(String contents) throws Exception {
+        File file = new File(InstrumentationRegistry.getContext().getCacheDir(), "test.xml");
+        file.createNewFile();
+
+        AtomicFile testAtomicXmlFile = new AtomicFile(file);
+        FileOutputStream fos = testAtomicXmlFile.startWrite();
+        fos.write(contents.getBytes());
+        testAtomicXmlFile.finishWrite(fos);
+
+        return file;
+    }
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/HapticFeedbackVibrationProviderTest.java b/services/tests/vibrator/src/com/android/server/vibrator/HapticFeedbackVibrationProviderTest.java
new file mode 100644
index 0000000..cae811e
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/HapticFeedbackVibrationProviderTest.java
@@ -0,0 +1,261 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.vibrator;
+
+import static android.os.VibrationEffect.Composition.PRIMITIVE_CLICK;
+import static android.os.VibrationEffect.Composition.PRIMITIVE_TICK;
+import static android.os.VibrationEffect.EFFECT_TEXTURE_TICK;
+import static android.os.VibrationEffect.EFFECT_TICK;
+import static android.view.HapticFeedbackConstants.CLOCK_TICK;
+import static android.view.HapticFeedbackConstants.CONTEXT_CLICK;
+import static android.view.HapticFeedbackConstants.SAFE_MODE_ENABLED;
+import static android.view.HapticFeedbackConstants.TEXT_HANDLE_MOVE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.os.VibrationEffect;
+import android.os.test.FakeVibrator;
+import android.util.AtomicFile;
+import android.util.SparseArray;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.R;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import java.io.File;
+import java.io.FileOutputStream;
+
+public class HapticFeedbackVibrationProviderTest {
+    @Rule public MockitoRule rule = MockitoJUnit.rule();
+
+    private static final VibrationEffect PRIMITIVE_TICK_EFFECT =
+            VibrationEffect.startComposition().addPrimitive(PRIMITIVE_TICK, 0.2497f).compose();
+    private static final VibrationEffect PRIMITIVE_CLICK_EFFECT =
+            VibrationEffect.startComposition().addPrimitive(PRIMITIVE_CLICK, 0.3497f).compose();
+
+    private Context mContext = InstrumentationRegistry.getContext();
+    private FakeVibrator mVibrator = new FakeVibrator(mContext);
+
+    @Mock private Resources mResourcesMock;
+
+    @Test
+    public void testNonExistentCustomization_useDefault() throws Exception {
+        // No customization file is set.
+        HapticFeedbackVibrationProvider hapticProvider =
+                new HapticFeedbackVibrationProvider(mResourcesMock, mVibrator);
+
+        assertThat(hapticProvider.getVibrationForHapticFeedback(CONTEXT_CLICK))
+                .isEqualTo(VibrationEffect.get(EFFECT_TICK));
+
+        // The customization file specifies no customization.
+        setupCustomizationFile("<haptic-feedback-constants></haptic-feedback-constants>");
+        hapticProvider = new HapticFeedbackVibrationProvider(mResourcesMock, mVibrator);
+
+        assertThat(hapticProvider.getVibrationForHapticFeedback(CONTEXT_CLICK))
+                .isEqualTo(VibrationEffect.get(EFFECT_TICK));
+    }
+
+    @Test
+    public void testExceptionParsingCustomizations_useDefault() throws Exception {
+        setupCustomizationFile("<bad-xml></bad-xml>");
+        HapticFeedbackVibrationProvider hapticProvider =
+                new HapticFeedbackVibrationProvider(mResourcesMock, mVibrator);
+
+        assertThat(hapticProvider.getVibrationForHapticFeedback(CONTEXT_CLICK))
+                .isEqualTo(VibrationEffect.get(EFFECT_TICK));
+    }
+
+    @Test
+    public void testUseValidCustomizedVibration() throws Exception {
+        mockVibratorPrimitiveSupport(PRIMITIVE_CLICK);
+        SparseArray<VibrationEffect> customizations = new SparseArray<>();
+        customizations.put(CONTEXT_CLICK, PRIMITIVE_CLICK_EFFECT);
+
+        HapticFeedbackVibrationProvider hapticProvider =
+                new HapticFeedbackVibrationProvider(mResourcesMock, mVibrator, customizations);
+
+        // The override for `CONTEXT_CLICK` is used.
+        assertThat(hapticProvider.getVibrationForHapticFeedback(CONTEXT_CLICK))
+                .isEqualTo(PRIMITIVE_CLICK_EFFECT);
+        // `CLOCK_TICK` has no override, so the default vibration is used.
+        assertThat(hapticProvider.getVibrationForHapticFeedback(CLOCK_TICK))
+                .isEqualTo(VibrationEffect.get(EFFECT_TEXTURE_TICK));
+    }
+
+    @Test
+    public void testDoNotUseInvalidCustomizedVibration() throws Exception {
+        mockVibratorPrimitiveSupport(new int[] {});
+        SparseArray<VibrationEffect> customizations = new SparseArray<>();
+        customizations.put(CONTEXT_CLICK, PRIMITIVE_CLICK_EFFECT);
+
+        HapticFeedbackVibrationProvider hapticProvider =
+                new HapticFeedbackVibrationProvider(mResourcesMock, mVibrator, customizations);
+
+        // The override for `CONTEXT_CLICK` is not used because the vibration is not supported.
+        assertThat(hapticProvider.getVibrationForHapticFeedback(CONTEXT_CLICK))
+                .isEqualTo(VibrationEffect.get(EFFECT_TICK));
+        // `CLOCK_TICK` has no override, so the default vibration is used.
+        assertThat(hapticProvider.getVibrationForHapticFeedback(CLOCK_TICK))
+                .isEqualTo(VibrationEffect.get(EFFECT_TEXTURE_TICK));
+    }
+
+    @Test
+    public void testHapticTextDisabled_noVibrationReturnedForTextHandleMove() throws Exception {
+        mockHapticTextSupport(false);
+        mockVibratorPrimitiveSupport(PRIMITIVE_CLICK);
+        SparseArray<VibrationEffect> customizations = new SparseArray<>();
+        customizations.put(TEXT_HANDLE_MOVE, PRIMITIVE_CLICK_EFFECT);
+
+        // Test with a customization available for `TEXT_HANDLE_MOVE`.
+        HapticFeedbackVibrationProvider hapticProvider =
+                new HapticFeedbackVibrationProvider(mResourcesMock, mVibrator, customizations);
+
+        assertThat(hapticProvider.getVibrationForHapticFeedback(TEXT_HANDLE_MOVE)).isNull();
+
+        // Test with no customization available for `TEXT_HANDLE_MOVE`.
+        hapticProvider =
+                new HapticFeedbackVibrationProvider(
+                        mResourcesMock, mVibrator, /* hapticCustomizations= */ null);
+
+        assertThat(hapticProvider.getVibrationForHapticFeedback(TEXT_HANDLE_MOVE)).isNull();
+    }
+
+    @Test
+    public void testHapticTextEnabled_vibrationReturnedForTextHandleMove() throws Exception {
+        mockHapticTextSupport(true);
+        mockVibratorPrimitiveSupport(PRIMITIVE_CLICK);
+        SparseArray<VibrationEffect> customizations = new SparseArray<>();
+        customizations.put(TEXT_HANDLE_MOVE, PRIMITIVE_CLICK_EFFECT);
+
+        // Test with a customization available for `TEXT_HANDLE_MOVE`.
+        HapticFeedbackVibrationProvider hapticProvider =
+                new HapticFeedbackVibrationProvider(mResourcesMock, mVibrator, customizations);
+
+        assertThat(hapticProvider.getVibrationForHapticFeedback(TEXT_HANDLE_MOVE))
+                .isEqualTo(PRIMITIVE_CLICK_EFFECT);
+
+        // Test with no customization available for `TEXT_HANDLE_MOVE`.
+        hapticProvider =
+                new HapticFeedbackVibrationProvider(
+                        mResourcesMock, mVibrator, /* hapticCustomizations= */ null);
+
+        assertThat(hapticProvider.getVibrationForHapticFeedback(TEXT_HANDLE_MOVE))
+                .isEqualTo(VibrationEffect.get(EFFECT_TEXTURE_TICK));
+    }
+
+    @Test
+    public void testValidCustomizationPresentForSafeModeEnabled_usedRegardlessOfVibrationResource()
+                throws Exception {
+        mockSafeModeEnabledVibration(10, 20, 30, 40);
+        mockVibratorPrimitiveSupport(PRIMITIVE_CLICK);
+        SparseArray<VibrationEffect> customizations = new SparseArray<>();
+        customizations.put(SAFE_MODE_ENABLED, PRIMITIVE_CLICK_EFFECT);
+
+        HapticFeedbackVibrationProvider hapticProvider =
+                new HapticFeedbackVibrationProvider(mResourcesMock, mVibrator, customizations);
+
+        assertThat(hapticProvider.getVibrationForHapticFeedback(SAFE_MODE_ENABLED))
+                .isEqualTo(PRIMITIVE_CLICK_EFFECT);
+
+        mockSafeModeEnabledVibration(null);
+        hapticProvider =
+                new HapticFeedbackVibrationProvider(mResourcesMock, mVibrator, customizations);
+
+        assertThat(hapticProvider.getVibrationForHapticFeedback(SAFE_MODE_ENABLED))
+                .isEqualTo(PRIMITIVE_CLICK_EFFECT);
+    }
+
+    @Test
+    public void testNoValidCustomizationPresentForSafeModeEnabled_resourceBasedVibrationUsed()
+                throws Exception {
+        mockSafeModeEnabledVibration(10, 20, 30, 40);
+        SparseArray<VibrationEffect> customizations = new SparseArray<>();
+        customizations.put(SAFE_MODE_ENABLED, PRIMITIVE_CLICK_EFFECT);
+
+        // Test with a customization that is not supported by the vibrator.
+        HapticFeedbackVibrationProvider hapticProvider =
+                new HapticFeedbackVibrationProvider(mResourcesMock, mVibrator, customizations);
+
+        assertThat(hapticProvider.getVibrationForHapticFeedback(SAFE_MODE_ENABLED))
+                .isEqualTo(VibrationEffect.createWaveform(new long[] {10, 20, 30, 40}, -1));
+
+        // Test with no customizations.
+        hapticProvider =
+                new HapticFeedbackVibrationProvider(
+                        mResourcesMock, mVibrator, /* hapticCustomizations= */ null);
+
+        assertThat(hapticProvider.getVibrationForHapticFeedback(SAFE_MODE_ENABLED))
+                .isEqualTo(VibrationEffect.createWaveform(new long[] {10, 20, 30, 40}, -1));
+    }
+
+    @Test
+    public void testNoValidCustomizationAndResourcePresentForSafeModeEnabled_noVibrationUsed()
+                throws Exception {
+        mockSafeModeEnabledVibration(null);
+        SparseArray<VibrationEffect> customizations = new SparseArray<>();
+        customizations.put(SAFE_MODE_ENABLED, PRIMITIVE_CLICK_EFFECT);
+
+        // Test with a customization that is not supported by the vibrator.
+        HapticFeedbackVibrationProvider hapticProvider =
+                new HapticFeedbackVibrationProvider(mResourcesMock, mVibrator, customizations);
+
+        assertThat(hapticProvider.getVibrationForHapticFeedback(SAFE_MODE_ENABLED)).isNull();
+
+        // Test with no customizations.
+        hapticProvider =
+                new HapticFeedbackVibrationProvider(
+                        mResourcesMock, mVibrator, /* hapticCustomizations= */ null);
+
+        assertThat(hapticProvider.getVibrationForHapticFeedback(SAFE_MODE_ENABLED)).isNull();
+    }
+
+    private void mockVibratorPrimitiveSupport(int... supportedPrimitives) {
+        mVibrator = new FakeVibrator(mContext, supportedPrimitives);
+    }
+
+    private void mockHapticTextSupport(boolean supported) {
+        when(mResourcesMock.getBoolean(R.bool.config_enableHapticTextHandle)).thenReturn(supported);
+    }
+
+    private void mockSafeModeEnabledVibration(int... vibrationPattern) {
+        when(mResourcesMock.getIntArray(R.array.config_safeModeEnabledVibePattern))
+                .thenReturn(vibrationPattern);
+    }
+
+    private void setupCustomizationFile(String xml) throws Exception {
+        File file = new File(mContext.getCacheDir(), "test.xml");
+        file.createNewFile();
+
+        AtomicFile atomicXmlFile = new AtomicFile(file);
+        FileOutputStream fos = atomicXmlFile.startWrite();
+        fos.write(xml.getBytes());
+        atomicXmlFile.finishWrite(fos);
+
+        when(mResourcesMock.getString(R.string.config_hapticFeedbackCustomizationFile))
+                .thenReturn(file.getAbsolutePath());
+    }
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/InputDeviceDelegateTest.java b/services/tests/vibrator/src/com/android/server/vibrator/InputDeviceDelegateTest.java
new file mode 100644
index 0000000..f3ecfcc
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/InputDeviceDelegateTest.java
@@ -0,0 +1,338 @@
+/*
+ * 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.server.vibrator;
+
+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.ArgumentMatchers.same;
+import static org.mockito.Mockito.doAnswer;
+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.Context;
+import android.content.ContextWrapper;
+import android.hardware.input.IInputDevicesChangedListener;
+import android.hardware.input.IInputManager;
+import android.hardware.input.InputManager;
+import android.hardware.input.InputManagerGlobal;
+import android.os.CombinedVibration;
+import android.os.Handler;
+import android.os.Process;
+import android.os.VibrationAttributes;
+import android.os.VibrationEffect;
+import android.os.test.TestLooper;
+import android.view.InputDevice;
+
+import androidx.test.InstrumentationRegistry;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+public class InputDeviceDelegateTest {
+
+    private static final int UID = Process.ROOT_UID;
+    private static final String PACKAGE_NAME = "package";
+    private static final String REASON = "some reason";
+    private static final VibrationAttributes VIBRATION_ATTRIBUTES =
+            new VibrationAttributes.Builder().setUsage(VibrationAttributes.USAGE_ALARM).build();
+    private static final CombinedVibration SYNCED_EFFECT =
+            CombinedVibration.createParallel(VibrationEffect.createOneShot(100, 255));
+
+    @Rule public MockitoRule rule = MockitoJUnit.rule();
+
+    @Mock private IInputManager mIInputManagerMock;
+
+    private TestLooper mTestLooper;
+    private ContextWrapper mContextSpy;
+    private InputManagerGlobal.TestSession mInputManagerGlobalSession;
+    private InputManager mInputManager;
+    private InputDeviceDelegate mInputDeviceDelegate;
+    private IInputDevicesChangedListener mIInputDevicesChangedListener;
+
+    @Before
+    public void setUp() throws Exception {
+        mTestLooper = new TestLooper();
+        mInputManagerGlobalSession = InputManagerGlobal.createTestSession(mIInputManagerMock);
+        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
+
+        mInputManager = new InputManager(mContextSpy);
+        when(mContextSpy.getSystemService(eq(Context.INPUT_SERVICE)))
+                .thenReturn(mInputManager);
+        doAnswer(invocation -> mIInputDevicesChangedListener = invocation.getArgument(0))
+                .when(mIInputManagerMock).registerInputDevicesChangedListener(any());
+
+        mInputDeviceDelegate = new InputDeviceDelegate(
+                mContextSpy, new Handler(mTestLooper.getLooper()));
+        mInputDeviceDelegate.onSystemReady();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        if (mInputManagerGlobalSession != null) {
+            mInputManagerGlobalSession.close();
+        }
+    }
+
+    @Test
+    public void beforeSystemReady_ignoresAnyUpdate() throws Exception {
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[0]);
+        InputDeviceDelegate inputDeviceDelegate = new InputDeviceDelegate(
+                mContextSpy, new Handler(mTestLooper.getLooper()));
+
+        inputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
+        assertFalse(inputDeviceDelegate.isAvailable());
+
+        inputDeviceDelegate.onInputDeviceAdded(1);
+        assertFalse(inputDeviceDelegate.isAvailable());
+
+        updateInputDevices(new int[]{1});
+        assertFalse(inputDeviceDelegate.isAvailable());
+
+        verify(mIInputManagerMock, never()).getInputDevice(anyInt());
+    }
+
+    @Test
+    public void onInputDeviceAdded_withSettingsDisabled_ignoresNewDevice() throws Exception {
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[0]);
+        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ false);
+        assertFalse(mInputDeviceDelegate.isAvailable());
+
+        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(createInputDeviceWithVibrator(1));
+        mInputDeviceDelegate.onInputDeviceAdded(1);
+
+        assertFalse(mInputDeviceDelegate.isAvailable());
+        verify(mIInputManagerMock, never()).getInputDevice(anyInt());
+    }
+
+    @Test
+    public void onInputDeviceAdded_withDeviceWithoutVibrator_ignoresNewDevice() throws Exception {
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[0]);
+        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
+        assertFalse(mInputDeviceDelegate.isAvailable());
+
+        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[0]);
+        when(mIInputManagerMock.getInputDevice(eq(1)))
+                .thenReturn(createInputDeviceWithoutVibrator(1));
+        updateInputDevices(new int[]{1});
+
+        assertFalse(mInputDeviceDelegate.isAvailable());
+        verify(mIInputManagerMock).getInputDevice(eq(1));
+    }
+
+    @Test
+    public void onInputDeviceAdded_withDeviceWithVibrator_addsNewDevice() throws Exception {
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[0]);
+        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
+        assertFalse(mInputDeviceDelegate.isAvailable());
+
+        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(createInputDeviceWithVibrator(1));
+        updateInputDevices(new int[]{1});
+
+        assertTrue(mInputDeviceDelegate.isAvailable());
+        verify(mIInputManagerMock).getInputDevice(eq(1));
+    }
+
+    @Test
+    public void onInputDeviceChanged_withSettingsDisabled_ignoresDevice() throws Exception {
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(createInputDeviceWithVibrator(1));
+        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ false);
+
+        updateInputDevices(new int[]{1});
+        assertFalse(mInputDeviceDelegate.isAvailable());
+        verify(mIInputManagerMock, never()).getInputDevice(anyInt());
+    }
+
+    @Test
+    public void onInputDeviceChanged_deviceLosesVibrator_removesDevice() throws Exception {
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1}, new int[0]);
+        when(mIInputManagerMock.getInputDevice(eq(1)))
+                .thenReturn(createInputDeviceWithVibrator(1), createInputDeviceWithoutVibrator(1));
+
+        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
+        assertTrue(mInputDeviceDelegate.isAvailable());
+
+        updateInputDevices(new int[]{1});
+        assertFalse(mInputDeviceDelegate.isAvailable());
+        verify(mIInputManagerMock, times(2)).getInputDevice(eq(1));
+    }
+
+    @Test
+    public void onInputDeviceChanged_deviceLost_removesDevice() throws Exception {
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1}, new int[0]);
+        when(mIInputManagerMock.getInputDevice(eq(1)))
+                .thenReturn(createInputDeviceWithVibrator(1), (InputDevice) null);
+
+        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
+        assertTrue(mInputDeviceDelegate.isAvailable());
+
+        updateInputDevices(new int[]{1});
+        assertFalse(mInputDeviceDelegate.isAvailable());
+        verify(mIInputManagerMock, times(2)).getInputDevice(eq(1));
+    }
+
+    @Test
+    public void onInputDeviceChanged_deviceAddsVibrator_addsDevice() throws Exception {
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[0], new int[]{1});
+        when(mIInputManagerMock.getInputDevice(eq(1)))
+                .thenReturn(createInputDeviceWithoutVibrator(1), createInputDeviceWithVibrator(1));
+
+        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
+        assertFalse(mInputDeviceDelegate.isAvailable());
+
+        updateInputDevices(new int[]{1});
+        assertTrue(mInputDeviceDelegate.isAvailable());
+        verify(mIInputManagerMock, times(2)).getInputDevice(eq(1));
+    }
+
+    @Test
+    public void onInputDeviceRemoved_removesDevice() throws Exception {
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1, 2});
+        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[0]);
+        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(
+                createInputDeviceWithoutVibrator(1));
+        when(mIInputManagerMock.getVibratorIds(eq(2))).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getInputDevice(eq(2))).thenReturn(createInputDeviceWithVibrator(2));
+
+        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
+        assertTrue(mInputDeviceDelegate.isAvailable());
+
+        updateInputDevices(new int[]{1});
+        assertFalse(mInputDeviceDelegate.isAvailable());
+    }
+
+    @Test
+    public void updateInputDeviceVibrators_usesFlagToLoadDeviceList() throws Exception {
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1, 2});
+        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(createInputDeviceWithVibrator(1));
+        when(mIInputManagerMock.getVibratorIds(eq(2))).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getInputDevice(eq(2))).thenReturn(createInputDeviceWithVibrator(2));
+
+        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
+        assertTrue(mInputDeviceDelegate.isAvailable());
+
+        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ false);
+        assertFalse(mInputDeviceDelegate.isAvailable());
+    }
+
+    @Test
+    public void updateInputDeviceVibrators_withDeviceWithoutVibrator_deviceIsIgnored()
+            throws Exception {
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[0]);
+        when(mIInputManagerMock.getInputDevice(eq(1)))
+                .thenReturn(createInputDeviceWithoutVibrator(1));
+        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
+        assertFalse(mInputDeviceDelegate.isAvailable());
+    }
+
+    @Test
+    public void vibrateIfAvailable_withNoInputDevice_returnsFalse() {
+        assertFalse(mInputDeviceDelegate.isAvailable());
+        assertFalse(mInputDeviceDelegate.vibrateIfAvailable(
+                new Vibration.CallerInfo(VIBRATION_ATTRIBUTES, UID, -1, PACKAGE_NAME, REASON),
+                SYNCED_EFFECT));
+    }
+
+    @Test
+    public void vibrateIfAvailable_withInputDevices_returnsTrueAndVibratesAllDevices()
+            throws Exception {
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1, 2});
+        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(createInputDeviceWithVibrator(1));
+        when(mIInputManagerMock.getVibratorIds(eq(2))).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getInputDevice(eq(2))).thenReturn(createInputDeviceWithVibrator(2));
+        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
+
+        assertTrue(mInputDeviceDelegate.vibrateIfAvailable(
+                new Vibration.CallerInfo(VIBRATION_ATTRIBUTES, UID, -1, PACKAGE_NAME, REASON),
+                SYNCED_EFFECT));
+        verify(mIInputManagerMock).vibrateCombined(eq(1), same(SYNCED_EFFECT), any());
+        verify(mIInputManagerMock).vibrateCombined(eq(2), same(SYNCED_EFFECT), any());
+    }
+
+    @Test
+    public void cancelVibrateIfAvailable_withNoInputDevice_returnsFalse() throws Exception {
+        assertFalse(mInputDeviceDelegate.isAvailable());
+        assertFalse(mInputDeviceDelegate.cancelVibrateIfAvailable());
+        verify(mIInputManagerMock, never()).cancelVibrate(anyInt(), any());
+    }
+
+    @Test
+    public void cancelVibrateIfAvailable_withInputDevices_returnsTrueAndStopsAllDevices()
+            throws Exception {
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1, 2});
+        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(createInputDeviceWithVibrator(1));
+        when(mIInputManagerMock.getVibratorIds(eq(2))).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getInputDevice(eq(2))).thenReturn(createInputDeviceWithVibrator(2));
+        mInputDeviceDelegate.updateInputDeviceVibrators(/* vibrateInputDevices= */ true);
+
+        assertTrue(mInputDeviceDelegate.isAvailable());
+        assertTrue(mInputDeviceDelegate.cancelVibrateIfAvailable());
+        verify(mIInputManagerMock).cancelVibrate(eq(1), any());
+        verify(mIInputManagerMock).cancelVibrate(eq(2), any());
+    }
+
+    private void updateInputDevices(int[] deviceIds) throws Exception {
+        int[] deviceIdsAndGenerations = new int[deviceIds.length * 2];
+        for (int i = 0; i < deviceIdsAndGenerations.length; i += 2) {
+            deviceIdsAndGenerations[i] = deviceIds[i / 2];
+            deviceIdsAndGenerations[i + 1] = 2; // update by increasing it's generation to 2.
+        }
+        // Force initialization of mIInputDevicesChangedListener, if it still haven't
+        InputManagerGlobal.getInstance().getInputDeviceIds();
+        mIInputDevicesChangedListener.onInputDevicesChanged(deviceIdsAndGenerations);
+        // Makes sure all callbacks from InputDeviceDelegate are executed.
+        mTestLooper.dispatchAll();
+    }
+
+    private InputDevice createInputDeviceWithVibrator(int id) {
+        return createInputDevice(id, /* hasVibrator= */ true);
+    }
+
+    private InputDevice createInputDeviceWithoutVibrator(int id) {
+        return createInputDevice(id, /* hasVibrator= */ false);
+    }
+
+    private InputDevice createInputDevice(int id, boolean hasVibrator) {
+        return new InputDevice.Builder()
+                .setId(id)
+                .setName("name")
+                .setDescriptor("descriptor")
+                .setHasVibrator(hasVibrator)
+                .build();
+    }
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/RampDownAdapterTest.java b/services/tests/vibrator/src/com/android/server/vibrator/RampDownAdapterTest.java
new file mode 100644
index 0000000..141da7cb
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/RampDownAdapterTest.java
@@ -0,0 +1,347 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.vibrator;
+
+import static org.junit.Assert.assertEquals;
+
+import android.os.VibrationEffect;
+import android.os.VibratorInfo;
+import android.os.vibrator.PrebakedSegment;
+import android.os.vibrator.PrimitiveSegment;
+import android.os.vibrator.RampSegment;
+import android.os.vibrator.StepSegment;
+import android.os.vibrator.VibrationEffectSegment;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class RampDownAdapterTest {
+    private static final int TEST_RAMP_DOWN_DURATION = 20;
+    private static final int TEST_STEP_DURATION = 5;
+    private static final VibratorInfo EMPTY_VIBRATOR_INFO = new VibratorInfo.Builder(0).build();
+
+    private RampDownAdapter mAdapter;
+
+    @Before
+    public void setUp() throws Exception {
+        mAdapter = new RampDownAdapter(TEST_RAMP_DOWN_DURATION, TEST_STEP_DURATION);
+    }
+
+    @Test
+    public void testPrebakedAndPrimitiveSegments_keepsListUnchanged() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new PrebakedSegment(
+                        VibrationEffect.EFFECT_CLICK, false, VibrationEffect.EFFECT_STRENGTH_LIGHT),
+                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10)));
+        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
+
+        assertEquals(-1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, -1));
+        assertEquals(1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 1));
+
+        assertEquals(originalSegments, segments);
+    }
+
+    @Test
+    public void testRampAndStepSegments_withNoOffSegment_keepsListUnchanged() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 100),
+                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
+                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 50, /* duration= */ 20)));
+        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
+
+        assertEquals(-1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, -1));
+        assertEquals(0, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 0));
+
+        assertEquals(originalSegments, segments);
+    }
+
+    @Test
+    public void testRampAndStepSegments_withNoRampDownDuration_keepsOriginalSteps() {
+        mAdapter = new RampDownAdapter(/* rampDownDuration= */ 0, TEST_STEP_DURATION);
+
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 100),
+                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
+                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 50, /* duration= */ 20),
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0,
+                        /* startFrequencyHz= */ 0, /* endFrequencyHz= */ 0, /* duration= */ 50)));
+        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
+
+        assertEquals(-1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, -1));
+        assertEquals(2, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 2));
+        assertEquals(originalSegments, segments);
+    }
+
+    @Test
+    public void testStepSegments_withShortZeroSegment_replaceWithStepsDown() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 10)));
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 5));
+
+        assertEquals(-1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, -1));
+        assertEquals(expectedSegments, segments);
+    }
+
+    @Test
+    public void testStepSegments_withLongZeroSegment_replaceWithStepsDownWithRemainingOffSegment() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0,
+                        /* startFrequencyHz= */ 0, /* endFrequencyHz= */ 0, /* duration= */ 50),
+                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 0, /* duration= */ 100)));
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0.75f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0.25f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 35),
+                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 0, /* duration= */ 100));
+
+        assertEquals(-1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, -1));
+        assertEquals(expectedSegments, segments);
+    }
+
+    @Test
+    public void testStepSegments_withZeroSegmentBeforeRepeat_fixesRepeat() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 50),
+                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 0, /* duration= */ 100)));
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0.75f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0.25f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 35),
+                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 0, /* duration= */ 100));
+
+        // Repeat index fixed after intermediate steps added
+        assertEquals(5, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 2));
+        assertEquals(expectedSegments, segments);
+    }
+
+    @Test
+    public void testStepSegments_withZeroSegmentAfterRepeat_preservesRepeat() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 0, /* duration= */ 100)));
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 0, /* duration= */ 100));
+
+        assertEquals(3, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 2));
+        assertEquals(expectedSegments, segments);
+    }
+
+    @Test
+    public void testStepSegments_withZeroSegmentAtRepeat_fixesRepeatAndAppendOriginalToListEnd() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 50),
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 100)));
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0.75f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0.25f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 35),
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 100),
+                // Original zero segment appended to the end of new looping vibration,
+                // then converted to ramp down as well.
+                new StepSegment(/* amplitude= */ 0.75f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0.25f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 35));
+
+        // Repeat index fixed after intermediate steps added
+        assertEquals(5, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 1));
+        assertEquals(expectedSegments, segments);
+    }
+
+    @Test
+    public void testStepSegments_withRepeatToNonZeroSegment_keepsOriginalSteps() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 100)));
+        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
+
+        assertEquals(0, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 0));
+
+        assertEquals(originalSegments, segments);
+    }
+
+    @Test
+    public void testStepSegments_withRepeatToShortZeroSegment_skipAndAppendRampDown() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0,
+                        /* startfrequencyHz= */ 0, /* endfrequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 30)));
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0,
+                        /* startfrequencyHz= */ 0, /* endfrequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 30),
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 5));
+
+        // Shift repeat index to the right to use append instead of zero segment.
+        assertEquals(1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 0));
+
+        assertEquals(expectedSegments, segments);
+    }
+
+    @Test
+    public void testStepSegments_withRepeatToLongZeroSegment_splitAndAppendRampDown() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 120),
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 30)));
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                // Split long zero segment to skip part of it.
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 20),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 100),
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 0, /* duration= */ 30),
+                new StepSegment(/* amplitude= */ 0.75f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0.25f, /* frequencyHz= */ 0, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 5));
+
+        // Shift repeat index to the right to use append with part of the zero segment.
+        assertEquals(1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 0));
+
+        assertEquals(expectedSegments, segments);
+    }
+
+    @Test
+    public void testRampSegments_withShortZeroSegment_replaceWithRampDown() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude*/ 0.5f,
+                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 10),
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0,
+                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 20),
+                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
+                        /* startFrequencyHz= */ 200, /* endFrequencyHz= */ 200,
+                        /* duration= */ 30)));
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude*/ 0.5f,
+                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 10),
+                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0,
+                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 20),
+                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
+                        /* startFrequencyHz= */ 200, /* endFrequencyHz= */ 200,
+                        /* duration= */ 30));
+
+        assertEquals(2, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 2));
+
+        assertEquals(expectedSegments, segments);
+    }
+
+    @Test
+    public void testRampSegments_withLongZeroSegment_splitAndAddRampDown() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.5f,
+                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 150, /* duration= */ 150),
+                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
+                        /* startFrequencyHz= */ 200, /* endFrequencyHz= */ 200,
+                        /* duration= */ 30)));
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude*/ 0.5f,
+                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 10),
+                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0,
+                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 20),
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0,
+                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100,
+                        /* duration= */ 130),
+                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
+                        /* startFrequencyHz= */ 200, /* endFrequencyHz= */ 200,
+                        /* duration= */ 30));
+
+        // Repeat index fixed after intermediate steps added
+        assertEquals(3, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 2));
+
+        assertEquals(expectedSegments, segments);
+    }
+
+    @Test
+    public void testRampSegments_withRepeatToNonZeroSegment_keepsOriginalSteps() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude*/ 0.5f,
+                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 10),
+                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
+                        /* startFrequencyHz= */ 200, /* endFrequencyHz= */ 200,
+                        /* duration= */ 30)));
+        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
+
+        assertEquals(0, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 0));
+
+        assertEquals(originalSegments, segments);
+    }
+
+    @Test
+    public void testRampSegments_withRepeatToShortZeroSegment_skipAndAppendRampDown() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 200, /* duration= */ 20),
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude*/ 1,
+                        /* startFrequencyHz= */ 40, /* endFrequencyHz= */ 80, /* duration= */ 20)));
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 200, /* duration= */ 20),
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 1,
+                        /* startFrequencyHz= */ 40, /* endFrequencyHz= */ 80, /* duration= */ 20),
+                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 0,
+                        /* startFrequencyHz= */ 80, /* endFrequencyHz= */ 80, /* duration= */ 20));
+
+        // Shift repeat index to the right to use append instead of zero segment.
+        assertEquals(1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 0));
+
+        assertEquals(expectedSegments, segments);
+    }
+
+    @Test
+    public void testRampSegments_withRepeatToLongZeroSegment_splitAndAppendRampDown() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude*/ 0,
+                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 1, /* duration= */ 70),
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 1,
+                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 1, /* duration= */ 30)));
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                // Split long zero segment to skip part of it.
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude*/ 0,
+                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 1, /* duration= */ 20),
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude*/ 0,
+                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 1, /* duration= */ 50),
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 1,
+                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 1, /* duration= */ 30),
+                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 0,
+                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 1, /* duration= */ 20));
+
+        // Shift repeat index to the right to use append with part of the zero segment.
+        assertEquals(1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 0));
+
+        assertEquals(expectedSegments, segments);
+    }
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/RampToStepAdapterTest.java b/services/tests/vibrator/src/com/android/server/vibrator/RampToStepAdapterTest.java
new file mode 100644
index 0000000..867c061
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/RampToStepAdapterTest.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.vibrator;
+
+import static org.junit.Assert.assertEquals;
+
+import android.hardware.vibrator.IVibrator;
+import android.os.VibrationEffect;
+import android.os.VibratorInfo;
+import android.os.vibrator.PrebakedSegment;
+import android.os.vibrator.PrimitiveSegment;
+import android.os.vibrator.RampSegment;
+import android.os.vibrator.StepSegment;
+import android.os.vibrator.VibrationEffectSegment;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.IntStream;
+
+public class RampToStepAdapterTest {
+    private static final int TEST_STEP_DURATION = 5;
+    private static final float[] TEST_AMPLITUDE_MAP = new float[]{
+            /* 50Hz= */ 0.1f, 0.2f, 0.4f, 0.8f, /* 150Hz= */ 1f, 0.9f, /* 200Hz= */ 0.8f};
+    private static final VibratorInfo.FrequencyProfile TEST_FREQUENCY_PROFILE =
+            new VibratorInfo.FrequencyProfile(
+                    /* resonantFrequencyHz= */ 150f, /* minFrequencyHz= */ 50f,
+                    /* frequencyResolutionHz= */ 25f, TEST_AMPLITUDE_MAP);
+    private static final VibratorInfo EMPTY_VIBRATOR_INFO = createVibratorInfo();
+    private static final VibratorInfo PWLE_VIBRATOR_INFO = createVibratorInfo(
+            IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
+
+    private RampToStepAdapter mAdapter;
+
+    @Before
+    public void setUp() throws Exception {
+        mAdapter = new RampToStepAdapter(TEST_STEP_DURATION);
+    }
+
+    @Test
+    public void testStepAndPrebakedAndPrimitiveSegments_keepsListUnchanged() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 1, /* duration= */ 10),
+                new PrebakedSegment(
+                        VibrationEffect.EFFECT_CLICK, false, VibrationEffect.EFFECT_STRENGTH_LIGHT),
+                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10)));
+        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
+
+        assertEquals(-1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, -1));
+        assertEquals(1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 1));
+
+        assertEquals(-1, mAdapter.adaptToVibrator(PWLE_VIBRATOR_INFO, segments, -1));
+        assertEquals(1, mAdapter.adaptToVibrator(PWLE_VIBRATOR_INFO, segments, 1));
+
+        assertEquals(originalSegments, segments);
+    }
+
+    @Test
+    public void testRampSegments_withPwleCapability_keepsListUnchanged() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 100),
+                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
+                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 1, /* duration= */ 20)));
+        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
+
+        assertEquals(-1, mAdapter.adaptToVibrator(PWLE_VIBRATOR_INFO, segments, -1));
+        assertEquals(0, mAdapter.adaptToVibrator(PWLE_VIBRATOR_INFO, segments, 0));
+
+        assertEquals(originalSegments, segments);
+    }
+
+    @Test
+    public void testRampSegments_withoutPwleCapability_convertsRampsToSteps() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 1, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 10, /* duration= */ 100),
+                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 0.2f,
+                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 0, /* duration= */ 10),
+                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
+                        /* startFrequencyHz= */ 30, /* endFrequencyHz= */ 60, /* duration= */ 11),
+                new RampSegment(/* startAmplitude= */ 0.65f, /* endAmplitude= */ 0.65f,
+                        /* startFrequencyHz= */ 0, /* endFrequencyHz= */ 1, /* duration= */ 200)));
+
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 1, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 10, /* duration= */ 100),
+                // 10ms ramp becomes 2 steps
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 10, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0.2f, /* frequencyHz= */ 150, /* duration= */ 5),
+                // 11ms ramp becomes 3 steps
+                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 30, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0.6f, /* frequencyHz= */ 40, /* duration= */ 5),
+                new StepSegment(/* amplitude= */ 0.2f, /* frequencyHz= */ 60, /* duration= */ 1),
+                // 200ms ramp with same amplitude becomes a single step
+                new StepSegment(/* amplitude= */ 0.65f, /* frequencyHz= */ 150,
+                        /* duration= */ 200));
+
+        // Repeat index fixed after intermediate steps added
+        assertEquals(4, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 3));
+
+        assertEquals(expectedSegments, segments);
+    }
+
+    private static VibratorInfo createVibratorInfo(int... capabilities) {
+        return new VibratorInfo.Builder(0)
+                .setCapabilities(IntStream.of(capabilities).reduce((a, b) -> a | b).orElse(0))
+                .setFrequencyProfile(TEST_FREQUENCY_PROFILE)
+                .build();
+    }
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/SplitSegmentsAdapterTest.java b/services/tests/vibrator/src/com/android/server/vibrator/SplitSegmentsAdapterTest.java
new file mode 100644
index 0000000..6630cca
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/SplitSegmentsAdapterTest.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.vibrator;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.hardware.vibrator.IVibrator;
+import android.os.VibrationEffect;
+import android.os.VibratorInfo;
+import android.os.vibrator.PrebakedSegment;
+import android.os.vibrator.PrimitiveSegment;
+import android.os.vibrator.RampSegment;
+import android.os.vibrator.StepSegment;
+import android.os.vibrator.VibrationEffectSegment;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.IntStream;
+
+public class SplitSegmentsAdapterTest {
+    private static final int PWLE_COMPOSITION_PRIMITIVE_DURATION_MAX = 10;
+
+    private static final float[] TEST_AMPLITUDE_MAP = new float[]{
+            /* 50Hz= */ 0.1f, 0.2f, 0.4f, 0.8f, /* 150Hz= */ 1f, 0.9f, /* 200Hz= */ 0.8f};
+
+    private static final VibratorInfo.FrequencyProfile TEST_FREQUENCY_PROFILE =
+            new VibratorInfo.FrequencyProfile(
+                    /* resonantFrequencyHz= */ 150f, /* minFrequencyHz= */ 50f,
+                    /* frequencyResolutionHz= */ 25f, TEST_AMPLITUDE_MAP);
+
+    private static final VibratorInfo EMPTY_VIBRATOR_INFO = createVibratorInfo();
+    private static final VibratorInfo PWLE_VIBRATOR_INFO = createVibratorInfo(
+            IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
+
+    private SplitSegmentsAdapter mAdapter;
+
+    @Before
+    public void setUp() throws Exception {
+        mAdapter = new SplitSegmentsAdapter();
+    }
+
+    @Test
+    public void testStepAndPrebakedAndPrimitiveSegments_returnsOriginalSegments() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 40f, /* duration= */ 100),
+                new PrebakedSegment(
+                        VibrationEffect.EFFECT_CLICK, false, VibrationEffect.EFFECT_STRENGTH_LIGHT),
+                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10)));
+        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
+
+        assertThat(mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, /*repeatIndex= */ -1))
+                .isEqualTo(-1);
+        assertThat(mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, /*repeatIndex= */ 1))
+                .isEqualTo(1);
+
+        assertThat(mAdapter.adaptToVibrator(PWLE_VIBRATOR_INFO, segments, /*repeatIndex= */ -1))
+                .isEqualTo(-1);
+        assertThat(mAdapter.adaptToVibrator(PWLE_VIBRATOR_INFO, segments, /*repeatIndex= */ 1))
+                .isEqualTo(1);
+
+        assertThat(segments).isEqualTo(originalSegments);
+    }
+
+    @Test
+    public void testRampSegments_noPwleCapabilities_returnsOriginalSegments() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude*/ 0.5f,
+                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 10, /* duration= */ 10),
+                new RampSegment(/* startAmplitude= */ 0.2f, /* endAmplitude*/ 0.8f,
+                        /* startFrequencyHz= */ 60, /* endFrequencyHz= */ 90, /* duration= */ 10)));
+        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
+
+        assertThat(mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, /*repeatIndex= */ -1))
+                .isEqualTo(-1);
+        assertThat(mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, /*repeatIndex= */ 1))
+                .isEqualTo(1);
+
+        assertThat(segments).isEqualTo(originalSegments);
+    }
+
+    @Test
+    public void testRampSegments_withPwleDurationLimit_splitsLongRampsAndPreserveOtherSegments() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 40f, /* duration= */ 100),
+                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude*/ 0.5f,
+                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 10, /* duration= */ 10),
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 1,
+                        /* startFrequencyHz= */ 0, /* endFrequencyHz= */ 50, /* duration= */ 25),
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 40f, /* duration= */ 100),
+                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude*/ 1,
+                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 20, /* duration= */ 5)));
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 40f, /* duration= */ 100),
+                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude*/ 0.5f,
+                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 10, /* duration= */ 10),
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 0.32f,
+                        /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 118f, /* duration= */ 8),
+                new RampSegment(/* startAmplitude= */ 0.32f, /* endAmplitude= */ 0.64f,
+                        /* startFrequencyHz= */ 118f, /* endFrequencyHz= */ 86f,
+                        /* duration= */ 8),
+                new RampSegment(/* startAmplitude= */ 0.64f, /* endAmplitude= */ 1,
+                        /* startFrequencyHz= */ 86f, /* endFrequencyHz= */ 50f, /* duration= */ 9),
+                new StepSegment(/* amplitude= */ 1, /* frequencyHz= */ 40f, /* duration= */ 100),
+                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude*/ 1,
+                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 20, /* duration= */ 5));
+
+        VibratorInfo vibratorInfo = new VibratorInfo.Builder(0)
+                .setCapabilities(IVibrator.CAP_COMPOSE_PWLE_EFFECTS)
+                .setPwlePrimitiveDurationMax(10)
+                .setFrequencyProfile(TEST_FREQUENCY_PROFILE)
+                .build();
+
+        // Update repeat index to skip the ramp splits.
+        assertThat(mAdapter.adaptToVibrator(vibratorInfo, segments, /*repeatIndex= */ 3))
+                .isEqualTo(5);
+        assertThat(segments).isEqualTo(expectedSegments);
+    }
+
+    private static VibratorInfo createVibratorInfo(int... capabilities) {
+        return new VibratorInfo.Builder(0)
+                .setCapabilities(IntStream.of(capabilities).reduce((a, b) -> a | b).orElse(0))
+                .setFrequencyProfile(TEST_FREQUENCY_PROFILE)
+                .setPwlePrimitiveDurationMax(PWLE_COMPOSITION_PRIMITIVE_DURATION_MAX)
+                .build();
+    }
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/StepToRampAdapterTest.java b/services/tests/vibrator/src/com/android/server/vibrator/StepToRampAdapterTest.java
new file mode 100644
index 0000000..82deff0
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/StepToRampAdapterTest.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.vibrator;
+
+import static org.junit.Assert.assertEquals;
+
+import android.hardware.vibrator.IVibrator;
+import android.os.VibrationEffect;
+import android.os.VibratorInfo;
+import android.os.vibrator.PrebakedSegment;
+import android.os.vibrator.PrimitiveSegment;
+import android.os.vibrator.RampSegment;
+import android.os.vibrator.StepSegment;
+import android.os.vibrator.VibrationEffectSegment;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.IntStream;
+
+public class StepToRampAdapterTest {
+    private static final float[] TEST_AMPLITUDE_MAP = new float[]{
+            /* 50Hz= */ 0.1f, 0.2f, 0.4f, 0.8f, /* 150Hz= */ 1f, 0.9f, /* 200Hz= */ 0.8f};
+    private static final VibratorInfo.FrequencyProfile TEST_FREQUENCY_PROFILE =
+            new VibratorInfo.FrequencyProfile(
+                    /* resonantFrequencyHz= */ 150f, /* minFrequencyHz= */ 50f,
+                    /* frequencyResolutionHz= */ 25f, TEST_AMPLITUDE_MAP);
+    private static final VibratorInfo EMPTY_VIBRATOR_INFO = createVibratorInfo();
+    private static final VibratorInfo PWLE_VIBRATOR_INFO = createVibratorInfo(
+            IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
+
+    private StepToRampAdapter mAdapter;
+
+    @Before
+    public void setUp() throws Exception {
+        mAdapter = new StepToRampAdapter();
+    }
+
+    @Test
+    public void testRampAndPrebakedAndPrimitiveSegments_returnsOriginalSegments() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 0.2f,
+                        /* startFrequencyHz= */ 40f, /* endFrequencyHz= */ 20f, /* duration= */ 10),
+                new PrebakedSegment(
+                        VibrationEffect.EFFECT_CLICK, false, VibrationEffect.EFFECT_STRENGTH_LIGHT),
+                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10)));
+        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
+
+        assertEquals(-1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, -1));
+        assertEquals(1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 1));
+
+        assertEquals(-1, mAdapter.adaptToVibrator(PWLE_VIBRATOR_INFO, segments, -1));
+        assertEquals(1, mAdapter.adaptToVibrator(PWLE_VIBRATOR_INFO, segments, 1));
+
+        assertEquals(originalSegments, segments);
+    }
+
+    @Test
+    public void testStepAndRampSegments_withoutPwleCapability_keepsListUnchanged() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 1, /* duration= */ 10),
+                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
+                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 50, /* duration= */ 20)));
+        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
+
+        assertEquals(-1, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, -1));
+        assertEquals(0, mAdapter.adaptToVibrator(EMPTY_VIBRATOR_INFO, segments, 0));
+
+        assertEquals(originalSegments, segments);
+    }
+
+    @Test
+    public void testStepAndRampSegments_withPwleCapabilityAndNoFrequency_keepsOriginalSteps() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 0, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 100),
+                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_TICK, 1, 10),
+                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
+                        /* startFrequencyHz= */ 40, /* endFrequencyHz= */ 200, /* duration= */ 50),
+                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
+                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 1, /* duration= */ 20)));
+        List<VibrationEffectSegment> originalSegments = new ArrayList<>(segments);
+
+        assertEquals(-1, mAdapter.adaptToVibrator(PWLE_VIBRATOR_INFO, segments, -1));
+        assertEquals(3, mAdapter.adaptToVibrator(PWLE_VIBRATOR_INFO, segments, 3));
+
+        assertEquals(originalSegments, segments);
+    }
+
+    @Test
+    public void testStepAndRampSegments_withPwleCapabilityAndStepNextToRamp_convertsStepsToRamps() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 200, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 150, /* duration= */ 60),
+                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
+                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 300, /* duration= */ 50),
+                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
+                        /* startFrequencyHz= */ 1000, /* endFrequencyHz= */ 1, /* duration= */ 20),
+                new StepSegment(/* amplitude= */ 0.8f, /* frequencyHz= */ 10, /* duration= */ 60)));
+
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude*/ 0,
+                        /* startFrequencyHz= */ 200, /* endFrequencyHz= */ 200, /* duration= */ 10),
+                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.5f,
+                        /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 150, /* duration= */ 60),
+                new RampSegment(/* startAmplitude= */ 1, /* endAmplitude= */ 1,
+                        /* startFrequencyHz= */ 1, /* endFrequencyHz= */ 300, /* duration= */ 50),
+                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.2f,
+                        /* startFrequencyHz= */ 1000, /* endFrequencyHz= */ 1, /* duration= */ 20),
+                new RampSegment(/* startAmplitude= */ 0.8f, /* endAmplitude= */ 0.8f,
+                        /* startFrequencyHz= */ 10, /* endFrequencyHz= */ 10, /* duration= */ 60));
+
+        assertEquals(-1, mAdapter.adaptToVibrator(PWLE_VIBRATOR_INFO, segments, -1));
+        assertEquals(2, mAdapter.adaptToVibrator(PWLE_VIBRATOR_INFO, segments, 2));
+
+        assertEquals(expectedSegments, segments);
+    }
+
+    @Test
+    public void testStepSegments_withPwleCapabilityAndFrequency_convertsStepsToRamps() {
+        List<VibrationEffectSegment> segments = new ArrayList<>(Arrays.asList(
+                new StepSegment(/* amplitude= */ 0, /* frequencyHz= */ 100, /* duration= */ 10),
+                new StepSegment(/* amplitude= */ 0.5f, /* frequencyHz= */ 0, /* duration= */ 6)));
+        List<VibrationEffectSegment> expectedSegments = Arrays.asList(
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude*/ 0,
+                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 100, /* duration= */ 10),
+                new RampSegment(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.5f,
+                        /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 150, /* duration= */ 6));
+
+        assertEquals(-1, mAdapter.adaptToVibrator(PWLE_VIBRATOR_INFO, segments, -1));
+        assertEquals(0, mAdapter.adaptToVibrator(PWLE_VIBRATOR_INFO, segments, 0));
+
+        assertEquals(expectedSegments, segments);
+    }
+
+    private static VibratorInfo createVibratorInfo(int... capabilities) {
+        return new VibratorInfo.Builder(0)
+                .setCapabilities(IntStream.of(capabilities).reduce((a, b) -> a | b).orElse(0))
+                .setFrequencyProfile(TEST_FREQUENCY_PROFILE)
+                .build();
+    }
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/VibrationScalerTest.java b/services/tests/vibrator/src/com/android/server/vibrator/VibrationScalerTest.java
new file mode 100644
index 0000000..bbca704e
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/VibrationScalerTest.java
@@ -0,0 +1,275 @@
+/*
+ * 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.server.vibrator;
+
+import static android.os.VibrationAttributes.USAGE_NOTIFICATION;
+import static android.os.VibrationAttributes.USAGE_RINGTONE;
+import static android.os.VibrationAttributes.USAGE_TOUCH;
+import static android.os.Vibrator.VIBRATION_INTENSITY_HIGH;
+import static android.os.Vibrator.VIBRATION_INTENSITY_LOW;
+import static android.os.Vibrator.VIBRATION_INTENSITY_MEDIUM;
+import static android.os.Vibrator.VIBRATION_INTENSITY_OFF;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.ContextWrapper;
+import android.content.pm.PackageManagerInternal;
+import android.os.Handler;
+import android.os.IExternalVibratorService;
+import android.os.PowerManagerInternal;
+import android.os.UserHandle;
+import android.os.VibrationAttributes;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.os.test.TestLooper;
+import android.os.vibrator.PrebakedSegment;
+import android.os.vibrator.PrimitiveSegment;
+import android.os.vibrator.StepSegment;
+import android.os.vibrator.VibrationConfig;
+import android.os.vibrator.VibrationEffectSegment;
+import android.provider.Settings;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.util.test.FakeSettingsProvider;
+import com.android.internal.util.test.FakeSettingsProviderRule;
+import com.android.server.LocalServices;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+public class VibrationScalerTest {
+
+    @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
+    @Rule public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule();
+
+    @Mock private PowerManagerInternal mPowerManagerInternalMock;
+    @Mock private PackageManagerInternal mPackageManagerInternalMock;
+    @Mock private VibrationConfig mVibrationConfigMock;
+
+    private TestLooper mTestLooper;
+    private ContextWrapper mContextSpy;
+    private VibrationSettings mVibrationSettings;
+    private VibrationScaler mVibrationScaler;
+
+    @Before
+    public void setUp() throws Exception {
+        mTestLooper = new TestLooper();
+        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
+
+        ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy);
+        when(mContextSpy.getContentResolver()).thenReturn(contentResolver);
+        when(mPackageManagerInternalMock.getSystemUiServiceComponent())
+                .thenReturn(new ComponentName("", ""));
+
+        LocalServices.removeServiceForTest(PackageManagerInternal.class);
+        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternalMock);
+        LocalServices.removeServiceForTest(PowerManagerInternal.class);
+        LocalServices.addService(PowerManagerInternal.class, mPowerManagerInternalMock);
+
+        Settings.System.putInt(contentResolver, Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);
+        Settings.System.putInt(contentResolver, Settings.System.VIBRATE_WHEN_RINGING, 1);
+
+        mVibrationSettings = new VibrationSettings(
+                mContextSpy, new Handler(mTestLooper.getLooper()), mVibrationConfigMock);
+        mVibrationScaler = new VibrationScaler(mContextSpy, mVibrationSettings);
+
+        mVibrationSettings.onSystemReady();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        LocalServices.removeServiceForTest(PowerManagerInternal.class);
+    }
+
+    @Test
+    public void testGetExternalVibrationScale() {
+        setDefaultIntensity(USAGE_TOUCH, Vibrator.VIBRATION_INTENSITY_LOW);
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_HIGH);
+        assertEquals(IExternalVibratorService.SCALE_VERY_HIGH,
+                mVibrationScaler.getExternalVibrationScale(USAGE_TOUCH));
+
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_MEDIUM);
+        assertEquals(IExternalVibratorService.SCALE_HIGH,
+                mVibrationScaler.getExternalVibrationScale(USAGE_TOUCH));
+
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_LOW);
+        assertEquals(IExternalVibratorService.SCALE_NONE,
+                mVibrationScaler.getExternalVibrationScale(USAGE_TOUCH));
+
+        setDefaultIntensity(USAGE_TOUCH, VIBRATION_INTENSITY_MEDIUM);
+        assertEquals(IExternalVibratorService.SCALE_LOW,
+                mVibrationScaler.getExternalVibrationScale(USAGE_TOUCH));
+
+        setDefaultIntensity(USAGE_TOUCH, VIBRATION_INTENSITY_HIGH);
+        assertEquals(IExternalVibratorService.SCALE_VERY_LOW,
+                mVibrationScaler.getExternalVibrationScale(USAGE_TOUCH));
+
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
+        // Vibration setting being bypassed will use default setting and not scale.
+        assertEquals(IExternalVibratorService.SCALE_NONE,
+                mVibrationScaler.getExternalVibrationScale(USAGE_TOUCH));
+    }
+
+    @Test
+    public void scale_withPrebakedSegment_setsEffectStrengthBasedOnSettings() {
+        setDefaultIntensity(USAGE_NOTIFICATION, VIBRATION_INTENSITY_MEDIUM);
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_HIGH);
+        PrebakedSegment effect = new PrebakedSegment(VibrationEffect.EFFECT_CLICK,
+                /* shouldFallback= */ false, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+
+        PrebakedSegment scaled = mVibrationScaler.scale(effect, USAGE_NOTIFICATION);
+        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_STRONG);
+
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
+                VIBRATION_INTENSITY_MEDIUM);
+        scaled = mVibrationScaler.scale(effect, USAGE_NOTIFICATION);
+        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
+        scaled = mVibrationScaler.scale(effect, USAGE_NOTIFICATION);
+        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_LIGHT);
+
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
+        scaled = mVibrationScaler.scale(effect, USAGE_NOTIFICATION);
+        // Vibration setting being bypassed will use default setting.
+        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+    }
+
+    @Test
+    public void scale_withPrebakedEffect_setsEffectStrengthBasedOnSettings() {
+        setDefaultIntensity(USAGE_NOTIFICATION, VIBRATION_INTENSITY_LOW);
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_HIGH);
+        VibrationEffect effect = VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK);
+
+        PrebakedSegment scaled =
+                getFirstSegment(mVibrationScaler.scale(effect, USAGE_NOTIFICATION));
+        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_STRONG);
+
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
+                VIBRATION_INTENSITY_MEDIUM);
+        scaled = getFirstSegment(mVibrationScaler.scale(effect, USAGE_NOTIFICATION));
+        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
+        scaled = getFirstSegment(mVibrationScaler.scale(effect, USAGE_NOTIFICATION));
+        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_LIGHT);
+
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
+        scaled = getFirstSegment(mVibrationScaler.scale(effect, USAGE_NOTIFICATION));
+        // Vibration setting being bypassed will use default setting.
+        assertEquals(scaled.getEffectStrength(), VibrationEffect.EFFECT_STRENGTH_LIGHT);
+    }
+
+    @Test
+    public void scale_withOneShotAndWaveform_resolvesAmplitude() {
+        // No scale, default amplitude still resolved
+        setDefaultIntensity(USAGE_RINGTONE, VIBRATION_INTENSITY_LOW);
+        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
+
+        StepSegment resolved = getFirstSegment(mVibrationScaler.scale(
+                VibrationEffect.createOneShot(10, VibrationEffect.DEFAULT_AMPLITUDE),
+                USAGE_RINGTONE));
+        assertTrue(resolved.getAmplitude() > 0);
+
+        resolved = getFirstSegment(mVibrationScaler.scale(
+                VibrationEffect.createWaveform(new long[]{10},
+                        new int[]{VibrationEffect.DEFAULT_AMPLITUDE}, -1),
+                USAGE_RINGTONE));
+        assertTrue(resolved.getAmplitude() > 0);
+    }
+
+    @Test
+    public void scale_withOneShotAndWaveform_scalesAmplitude() {
+        setDefaultIntensity(USAGE_RINGTONE, VIBRATION_INTENSITY_LOW);
+        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_HIGH);
+        setDefaultIntensity(USAGE_NOTIFICATION, VIBRATION_INTENSITY_HIGH);
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
+        setDefaultIntensity(USAGE_TOUCH, VIBRATION_INTENSITY_MEDIUM);
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_MEDIUM);
+
+        StepSegment scaled = getFirstSegment(mVibrationScaler.scale(
+                VibrationEffect.createOneShot(128, 128), USAGE_RINGTONE));
+        // Ringtone scales up.
+        assertTrue(scaled.getAmplitude() > 0.5);
+
+        scaled = getFirstSegment(mVibrationScaler.scale(
+                VibrationEffect.createWaveform(new long[]{128}, new int[]{128}, -1),
+                USAGE_NOTIFICATION));
+        // Notification scales down.
+        assertTrue(scaled.getAmplitude() < 0.5);
+
+        scaled = getFirstSegment(mVibrationScaler.scale(VibrationEffect.createOneShot(128, 128),
+                USAGE_TOUCH));
+        // Haptic feedback does not scale.
+        assertEquals(128f / 255, scaled.getAmplitude(), 1e-5);
+    }
+
+    @Test
+    public void scale_withComposed_scalesPrimitives() {
+        setDefaultIntensity(USAGE_RINGTONE, VIBRATION_INTENSITY_LOW);
+        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_HIGH);
+        setDefaultIntensity(USAGE_NOTIFICATION, VIBRATION_INTENSITY_HIGH);
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
+        setDefaultIntensity(USAGE_TOUCH, VIBRATION_INTENSITY_MEDIUM);
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_MEDIUM);
+
+        VibrationEffect composed = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 0.5f).compose();
+
+        PrimitiveSegment scaled = getFirstSegment(mVibrationScaler.scale(composed, USAGE_RINGTONE));
+        // Ringtone scales up.
+        assertTrue(scaled.getScale() > 0.5f);
+
+        scaled = getFirstSegment(mVibrationScaler.scale(composed, USAGE_NOTIFICATION));
+        // Notification scales down.
+        assertTrue(scaled.getScale() < 0.5f);
+
+        scaled = getFirstSegment(mVibrationScaler.scale(composed, USAGE_TOUCH));
+        // Haptic feedback does not scale.
+        assertEquals(0.5, scaled.getScale(), 1e-5);
+    }
+
+    private void setDefaultIntensity(@VibrationAttributes.Usage int usage,
+            @Vibrator.VibrationIntensity int intensity) {
+        when(mVibrationConfigMock.getDefaultVibrationIntensity(eq(usage))).thenReturn(intensity);
+    }
+
+    private <T extends VibrationEffectSegment> T getFirstSegment(VibrationEffect effect) {
+        assertTrue(effect instanceof VibrationEffect.Composed);
+        return (T) ((VibrationEffect.Composed) effect).getSegments().get(0);
+    }
+
+    private void setUserSetting(String settingName, int value) {
+        Settings.System.putIntForUser(
+                mContextSpy.getContentResolver(), settingName, value, UserHandle.USER_CURRENT);
+        // FakeSettingsProvider don't support testing triggering ContentObserver yet.
+        mVibrationSettings.mSettingObserver.onChange(false);
+    }
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/VibrationSettingsTest.java b/services/tests/vibrator/src/com/android/server/vibrator/VibrationSettingsTest.java
new file mode 100644
index 0000000..1ae0966
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/VibrationSettingsTest.java
@@ -0,0 +1,984 @@
+/*
+ * 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.server.vibrator;
+
+import static android.os.BatteryManager.BATTERY_PLUGGED_USB;
+import static android.os.BatteryManager.BATTERY_PLUGGED_WIRELESS;
+import static android.os.BatteryManager.EXTRA_PLUGGED;
+import static android.os.VibrationAttributes.USAGE_ACCESSIBILITY;
+import static android.os.VibrationAttributes.USAGE_ALARM;
+import static android.os.VibrationAttributes.USAGE_COMMUNICATION_REQUEST;
+import static android.os.VibrationAttributes.USAGE_HARDWARE_FEEDBACK;
+import static android.os.VibrationAttributes.USAGE_MEDIA;
+import static android.os.VibrationAttributes.USAGE_NOTIFICATION;
+import static android.os.VibrationAttributes.USAGE_PHYSICAL_EMULATION;
+import static android.os.VibrationAttributes.USAGE_RINGTONE;
+import static android.os.VibrationAttributes.USAGE_TOUCH;
+import static android.os.VibrationAttributes.USAGE_UNKNOWN;
+import static android.os.Vibrator.VIBRATION_INTENSITY_HIGH;
+import static android.os.Vibrator.VIBRATION_INTENSITY_LOW;
+import static android.os.Vibrator.VIBRATION_INTENSITY_MEDIUM;
+import static android.os.Vibrator.VIBRATION_INTENSITY_OFF;
+
+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.argThat;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import android.app.ActivityManager;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.Intent;
+import android.content.pm.PackageManagerInternal;
+import android.media.AudioManager;
+import android.os.Handler;
+import android.os.PowerManager;
+import android.os.PowerManagerInternal;
+import android.os.PowerSaveState;
+import android.os.Process;
+import android.os.UserHandle;
+import android.os.VibrationAttributes;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.os.test.TestLooper;
+import android.os.vibrator.VibrationConfig;
+import android.provider.Settings;
+import android.util.ArraySet;
+import android.view.Display;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.util.test.FakeSettingsProvider;
+import com.android.internal.util.test.FakeSettingsProviderRule;
+import com.android.server.LocalServices;
+import com.android.server.companion.virtual.VirtualDeviceManagerInternal;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+public class VibrationSettingsTest {
+
+    private static final int UID = 1;
+    private static final int VIRTUAL_DISPLAY_ID = 1;
+    private static final String SYSUI_PACKAGE_NAME = "sysui";
+    private static final PowerSaveState NORMAL_POWER_STATE = new PowerSaveState.Builder().build();
+    private static final PowerSaveState LOW_POWER_STATE = new PowerSaveState.Builder()
+            .setBatterySaverEnabled(true).build();
+
+    private static final int[] ALL_USAGES = new int[] {
+            USAGE_UNKNOWN,
+            USAGE_ACCESSIBILITY,
+            USAGE_ALARM,
+            USAGE_COMMUNICATION_REQUEST,
+            USAGE_HARDWARE_FEEDBACK,
+            USAGE_MEDIA,
+            USAGE_NOTIFICATION,
+            USAGE_PHYSICAL_EMULATION,
+            USAGE_RINGTONE,
+            USAGE_TOUCH,
+    };
+
+    @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
+    @Rule public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule();
+
+    @Mock private VibrationSettings.OnVibratorSettingsChanged mListenerMock;
+    @Mock private PowerManagerInternal mPowerManagerInternalMock;
+    @Mock private VirtualDeviceManagerInternal mVirtualDeviceManagerInternalMock;
+    @Mock private PackageManagerInternal mPackageManagerInternalMock;
+    @Mock private AudioManager mAudioManagerMock;
+    @Mock private VibrationConfig mVibrationConfigMock;
+
+    private TestLooper mTestLooper;
+    private ContextWrapper mContextSpy;
+    private VibrationSettings mVibrationSettings;
+    private PowerManagerInternal.LowPowerModeListener mRegisteredPowerModeListener;
+    private BroadcastReceiver mRegisteredBatteryBroadcastReceiver;
+    private VirtualDeviceManagerInternal.VirtualDisplayListener mRegisteredVirtualDisplayListener;
+    private VirtualDeviceManagerInternal.AppsOnVirtualDeviceListener
+            mRegisteredAppsOnVirtualDeviceListener;
+
+    @Before
+    public void setUp() throws Exception {
+        mTestLooper = new TestLooper();
+        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
+
+        ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy);
+        when(mContextSpy.getContentResolver()).thenReturn(contentResolver);
+        when(mContextSpy.getSystemService(eq(Context.AUDIO_SERVICE))).thenReturn(mAudioManagerMock);
+        doAnswer(invocation -> {
+            mRegisteredPowerModeListener = invocation.getArgument(0);
+            return null;
+        }).when(mPowerManagerInternalMock).registerLowPowerModeObserver(any());
+        when(mPackageManagerInternalMock.getSystemUiServiceComponent())
+                .thenReturn(new ComponentName(SYSUI_PACKAGE_NAME, ""));
+        doAnswer(invocation -> {
+            mRegisteredVirtualDisplayListener = invocation.getArgument(0);
+            return null;
+        }).when(mVirtualDeviceManagerInternalMock).registerVirtualDisplayListener(any());
+        doAnswer(invocation -> {
+            mRegisteredAppsOnVirtualDeviceListener = invocation.getArgument(0);
+            return null;
+        }).when(mVirtualDeviceManagerInternalMock).registerAppsOnVirtualDeviceListener(any());
+
+        removeServicesForTest();
+        addServicesForTest();
+
+        setDefaultIntensity(VIBRATION_INTENSITY_MEDIUM);
+
+        setIgnoreVibrationsOnWirelessCharger(false);
+        createSystemReadyVibrationSettings();
+
+        mockGoToSleep(/* goToSleepTime= */ 0, PowerManager.GO_TO_SLEEP_REASON_TIMEOUT);
+    }
+
+    private void createSystemReadyVibrationSettings() {
+        mVibrationSettings = new VibrationSettings(mContextSpy,
+                new Handler(mTestLooper.getLooper()), mVibrationConfigMock);
+
+        // Simulate System defaults.
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);
+        setUserSetting(Settings.System.VIBRATE_INPUT_DEVICES, 0);
+        setUserSetting(Settings.System.VIBRATE_WHEN_RINGING, 1);
+        setUserSetting(Settings.System.APPLY_RAMPING_RINGER, 0);
+        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
+
+        mVibrationSettings.onSystemReady();
+    }
+
+    private void removeServicesForTest() {
+        LocalServices.removeServiceForTest(PowerManagerInternal.class);
+        LocalServices.removeServiceForTest(PackageManagerInternal.class);
+        LocalServices.removeServiceForTest(VirtualDeviceManagerInternal.class);
+    }
+
+    private void addServicesForTest() {
+        LocalServices.addService(PowerManagerInternal.class, mPowerManagerInternalMock);
+        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternalMock);
+        LocalServices.addService(VirtualDeviceManagerInternal.class,
+                mVirtualDeviceManagerInternalMock);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        removeServicesForTest();
+    }
+
+    @Test
+    public void create_withOnlyRequiredSystemServices() {
+        // The only core services that we depend on are PowerManager and PackageManager
+        removeServicesForTest();
+        LocalServices.addService(PowerManagerInternal.class, mPowerManagerInternalMock);
+        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternalMock);
+
+        VibrationSettings minimalVibrationSettings = new VibrationSettings(mContextSpy,
+                new Handler(mTestLooper.getLooper()), mVibrationConfigMock);
+        minimalVibrationSettings.onSystemReady();
+    }
+
+    @Test
+    public void addListener_switchUserTriggerListener() {
+        mVibrationSettings.addListener(mListenerMock);
+
+        // Testing the broadcast flow manually.
+        mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy,
+                new Intent(Intent.ACTION_USER_SWITCHED));
+
+        verify(mListenerMock).onChange();
+    }
+
+    @Test
+    public void addListener_ringerModeChangeTriggerListener() {
+        mVibrationSettings.addListener(mListenerMock);
+
+        // Testing the broadcast flow manually.
+        mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy,
+                new Intent(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION));
+        mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy,
+                new Intent(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION));
+
+        verify(mListenerMock, times(2)).onChange();
+    }
+
+    @Test
+    public void addListener_settingsChangeTriggerListener() {
+        mVibrationSettings.addListener(mListenerMock);
+
+        // Testing the broadcast flow manually.
+        mVibrationSettings.mSettingObserver.onChange(false);
+        mVibrationSettings.mSettingObserver.onChange(false);
+
+        verify(mListenerMock, times(2)).onChange();
+    }
+
+    @Test
+    public void addListener_lowPowerModeChangeTriggerListener() {
+        mVibrationSettings.addListener(mListenerMock);
+
+        // Testing the broadcast flow manually.
+        mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE);
+        mRegisteredPowerModeListener.onLowPowerModeChanged(NORMAL_POWER_STATE);
+        mRegisteredPowerModeListener.onLowPowerModeChanged(NORMAL_POWER_STATE); // No change.
+
+        verify(mListenerMock, times(2)).onChange();
+    }
+
+    @Test
+    public void removeListener_noMoreCallbacksToListener() {
+        mVibrationSettings.addListener(mListenerMock);
+
+        mVibrationSettings.mSettingObserver.onChange(false);
+        verify(mListenerMock).onChange();
+
+        mVibrationSettings.removeListener(mListenerMock);
+
+        // Trigger multiple observers manually.
+        mVibrationSettings.mSettingObserver.onChange(false);
+        mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE);
+        mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy,
+                new Intent(Intent.ACTION_USER_SWITCHED));
+        mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy,
+                new Intent(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION));
+
+        verifyNoMoreInteractions(mListenerMock);
+    }
+
+    @Test
+    public void shouldIgnoreVibration_fromBackground_doesNotIgnoreUsagesFromAllowlist() {
+        Set<Integer> expectedAllowedVibrations = new HashSet<>(Arrays.asList(
+                USAGE_RINGTONE,
+                USAGE_ALARM,
+                USAGE_NOTIFICATION,
+                USAGE_COMMUNICATION_REQUEST,
+                USAGE_HARDWARE_FEEDBACK,
+                USAGE_PHYSICAL_EMULATION
+        ));
+
+        mVibrationSettings.mUidObserver.onUidStateChanged(
+                UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND, 0, 0);
+
+        for (int usage : ALL_USAGES) {
+            if (expectedAllowedVibrations.contains(usage)) {
+                assertVibrationNotIgnoredForUsage(usage);
+            } else {
+                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_BACKGROUND);
+            }
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_fromForeground_allowsAnyUsage() {
+        mVibrationSettings.mUidObserver.onUidStateChanged(
+                UID, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND, 0, 0);
+
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsage(usage);
+        }
+    }
+
+    @Test
+    public void wirelessChargingVibrationsEnabled_doesNotRegisterBatteryReceiver_allowsAnyUsage() {
+        setBatteryReceiverRegistrationResult(getBatteryChangedIntent(BATTERY_PLUGGED_WIRELESS));
+        setIgnoreVibrationsOnWirelessCharger(false);
+        createSystemReadyVibrationSettings();
+
+        assertNull(mRegisteredBatteryBroadcastReceiver);
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsage(usage);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_noBatteryIntentWhenSystemReady_allowsAnyUsage() {
+        setBatteryReceiverRegistrationResult(null);
+        setIgnoreVibrationsOnWirelessCharger(true);
+        createSystemReadyVibrationSettings();
+
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsage(usage);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_onNonWirelessChargerWhenSystemReady_allowsAnyUsage() {
+        Intent nonWirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_USB);
+        setBatteryReceiverRegistrationResult(nonWirelessChargingIntent);
+        setIgnoreVibrationsOnWirelessCharger(true);
+        createSystemReadyVibrationSettings();
+
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsage(usage);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_onWirelessChargerWhenSystemReady_doesNotAllowFromAnyUsage() {
+        Intent wirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_WIRELESS);
+        setBatteryReceiverRegistrationResult(wirelessChargingIntent);
+        setIgnoreVibrationsOnWirelessCharger(true);
+        createSystemReadyVibrationSettings();
+
+        for (int usage : ALL_USAGES) {
+            assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_ON_WIRELESS_CHARGER);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_receivesWirelessChargingIntent_doesNotAllowFromAnyUsage() {
+        Intent nonWirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_USB);
+        setBatteryReceiverRegistrationResult(nonWirelessChargingIntent);
+        setIgnoreVibrationsOnWirelessCharger(true);
+        createSystemReadyVibrationSettings();
+
+        Intent wirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_WIRELESS);
+        mRegisteredBatteryBroadcastReceiver.onReceive(mContextSpy, wirelessChargingIntent);
+
+        for (int usage : ALL_USAGES) {
+            assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_ON_WIRELESS_CHARGER);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_receivesNonWirelessChargingIntent_allowsAnyUsage() {
+        Intent wirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_WIRELESS);
+        setBatteryReceiverRegistrationResult(wirelessChargingIntent);
+        setIgnoreVibrationsOnWirelessCharger(true);
+        createSystemReadyVibrationSettings();
+        // Check that initially, all usages are ignored due to the wireless charging.
+        for (int usage : ALL_USAGES) {
+            assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_ON_WIRELESS_CHARGER);
+        }
+
+        Intent nonWirelessChargingIntent = getBatteryChangedIntent(BATTERY_PLUGGED_USB);
+        mRegisteredBatteryBroadcastReceiver.onReceive(mContextSpy, nonWirelessChargingIntent);
+
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsage(usage);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_inBatterySaverMode_doesNotIgnoreUsagesFromAllowlist() {
+        Set<Integer> expectedAllowedVibrations = new HashSet<>(Arrays.asList(
+                USAGE_RINGTONE,
+                USAGE_ALARM,
+                USAGE_COMMUNICATION_REQUEST,
+                USAGE_PHYSICAL_EMULATION,
+                USAGE_HARDWARE_FEEDBACK
+        ));
+
+        mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE);
+
+        for (int usage : ALL_USAGES) {
+            if (expectedAllowedVibrations.contains(usage)) {
+                assertVibrationNotIgnoredForUsage(usage);
+            } else {
+                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_POWER);
+            }
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_notInBatterySaverMode_allowsAnyUsage() {
+        mRegisteredPowerModeListener.onLowPowerModeChanged(NORMAL_POWER_STATE);
+
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsage(usage);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_withRingerModeSilent_ignoresRingtoneAndNotification() {
+        // Vibrating settings on are overruled by ringer mode.
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);
+        setRingerMode(AudioManager.RINGER_MODE_SILENT);
+
+        for (int usage : ALL_USAGES) {
+            if (usage == USAGE_RINGTONE || usage == USAGE_NOTIFICATION) {
+                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_RINGER_MODE);
+            } else {
+                assertVibrationNotIgnoredForUsage(usage);
+            }
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_withRingerModeSilentAndBypassFlag_allowsAllVibrations() {
+        setRingerMode(AudioManager.RINGER_MODE_SILENT);
+
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsageAndFlags(usage,
+                    VibrationAttributes.FLAG_BYPASS_INTERRUPTION_POLICY);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_withRingerModeVibrate_allowsAllVibrations() {
+        setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
+
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsage(usage);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_withRingerModeNormal_allowsAllVibrations() {
+        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
+
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsage(usage);
+        }
+    }
+
+
+    @Test
+    public void shouldIgnoreVibration_vibrateOnDisabled_ignoresUsagesNotAccessibility() {
+        setUserSetting(Settings.System.VIBRATE_ON, 0);
+
+        for (int usage : ALL_USAGES) {
+            if (usage == USAGE_ACCESSIBILITY) {
+                assertVibrationNotIgnoredForUsage(usage);
+            } else {
+                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_SETTINGS);
+            }
+            assertVibrationNotIgnoredForUsageAndFlags(usage,
+                    VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_vibrateOnEnabledOrUnset_allowsAnyUsage() {
+        deleteUserSetting(Settings.System.VIBRATE_ON);
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsage(usage);
+        }
+
+        setUserSetting(Settings.System.VIBRATE_ON, 1);
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsage(usage);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_withRingSettingsOff_allowsAllVibrations() {
+        // VIBRATE_WHEN_RINGING is deprecated and should have no effect on the ring vibration
+        // setting. The ramping ringer is also independent now, instead of a 3-state setting.
+        setUserSetting(Settings.System.VIBRATE_WHEN_RINGING, 0);
+        setUserSetting(Settings.System.APPLY_RAMPING_RINGER, 0);
+
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsage(usage);
+            assertVibrationNotIgnoredForUsageAndFlags(usage,
+                    VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_withHapticFeedbackDisabled_ignoresTouchVibration() {
+        // HAPTIC_FEEDBACK_ENABLED is deprecated but it was the only setting used to disable touch
+        // feedback vibrations. Continue to apply this on top of the intensity setting.
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_ENABLED, 0);
+
+        for (int usage : ALL_USAGES) {
+            if (usage == USAGE_TOUCH) {
+                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_SETTINGS);
+            } else {
+                assertVibrationNotIgnoredForUsage(usage);
+            }
+            assertVibrationNotIgnoredForUsageAndFlags(usage,
+                    VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_withHapticFeedbackSettingsOff_ignoresTouchVibration() {
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
+
+        for (int usage : ALL_USAGES) {
+            if (usage == USAGE_TOUCH) {
+                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_SETTINGS);
+            } else {
+                assertVibrationNotIgnoredForUsage(usage);
+            }
+            assertVibrationNotIgnoredForUsageAndFlags(usage,
+                    VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_withHardwareFeedbackSettingsOff_ignoresHardwareVibrations() {
+        setUserSetting(Settings.System.HARDWARE_HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
+
+        for (int usage : ALL_USAGES) {
+            if (usage == USAGE_HARDWARE_FEEDBACK || usage == USAGE_PHYSICAL_EMULATION) {
+                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_SETTINGS);
+            } else {
+                assertVibrationNotIgnoredForUsage(usage);
+            }
+            assertVibrationNotIgnoredForUsageAndFlags(usage,
+                    VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_withNotificationSettingsOff_ignoresNotificationVibrations() {
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
+
+        for (int usage : ALL_USAGES) {
+            if (usage == USAGE_NOTIFICATION) {
+                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_SETTINGS);
+            } else {
+                assertVibrationNotIgnoredForUsage(usage);
+            }
+            assertVibrationNotIgnoredForUsageAndFlags(usage,
+                    VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_withRingSettingsOff_ignoresRingtoneVibrations() {
+        // Vibrating settings on are overruled by ring intensity setting.
+        setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
+        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
+
+        for (int usage : ALL_USAGES) {
+            if (usage == USAGE_RINGTONE) {
+                assertVibrationIgnoredForUsage(usage, Vibration.Status.IGNORED_FOR_SETTINGS);
+            } else {
+                assertVibrationNotIgnoredForUsage(usage);
+            }
+            assertVibrationNotIgnoredForUsageAndFlags(usage,
+                    VibrationAttributes.FLAG_BYPASS_USER_VIBRATION_INTENSITY_OFF);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibration_updateTriggeredAfterInternalRingerModeChanged() {
+        // Vibrating settings on are overruled by ringer mode.
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);
+        setUserSetting(Settings.System.APPLY_RAMPING_RINGER, 1);
+        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
+
+        assertVibrationNotIgnoredForUsage(USAGE_RINGTONE);
+
+        // Testing the broadcast flow manually.
+        when(mAudioManagerMock.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_SILENT);
+        mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy,
+                new Intent(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION));
+
+        assertVibrationIgnoredForUsage(USAGE_RINGTONE, Vibration.Status.IGNORED_FOR_RINGER_MODE);
+    }
+
+    @Test
+    public void shouldIgnoreVibrationFromVirtualDisplays_displayNonVirtual_neverIgnored() {
+        // Vibrations from the primary display is never ignored regardless of the creation and
+        // removal of virtual displays and of the changes of apps running on virtual displays.
+        mRegisteredVirtualDisplayListener.onVirtualDisplayCreated(VIRTUAL_DISPLAY_ID);
+        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(
+                new ArraySet<>(Arrays.asList(UID)));
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsageAndDisplay(usage, Display.DEFAULT_DISPLAY);
+        }
+
+        mRegisteredVirtualDisplayListener.onVirtualDisplayRemoved(VIRTUAL_DISPLAY_ID);
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsageAndDisplay(usage, Display.DEFAULT_DISPLAY);
+        }
+
+        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(new ArraySet<>());
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsageAndDisplay(usage, Display.DEFAULT_DISPLAY);
+        }
+    }
+
+    @Test
+    public void shouldIgnoreVibrationFromVirtualDisplays_displayVirtual() {
+        // Ignore the vibration when the coming display id represents a virtual display.
+        mRegisteredVirtualDisplayListener.onVirtualDisplayCreated(VIRTUAL_DISPLAY_ID);
+
+        for (int usage : ALL_USAGES) {
+            assertVibrationIgnoredForUsageAndDisplay(usage, VIRTUAL_DISPLAY_ID,
+                    Vibration.Status.IGNORED_FROM_VIRTUAL_DEVICE);
+        }
+
+        // Stop ignoring when the virtual display is removed.
+        mRegisteredVirtualDisplayListener.onVirtualDisplayRemoved(VIRTUAL_DISPLAY_ID);
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsageAndDisplay(usage, VIRTUAL_DISPLAY_ID);
+        }
+    }
+
+
+    @Test
+    public void shouldIgnoreVibrationFromVirtualDisplays_appsOnVirtualDisplay() {
+        // Ignore when the passed-in display id is invalid and the calling uid is on a virtual
+        // display.
+        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(
+                new ArraySet<>(Arrays.asList(UID)));
+        for (int usage : ALL_USAGES) {
+            assertVibrationIgnoredForUsageAndDisplay(usage, Display.INVALID_DISPLAY,
+                    Vibration.Status.IGNORED_FROM_VIRTUAL_DEVICE);
+        }
+
+        // Stop ignoring when the app is no longer on virtual display.
+        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(new ArraySet<>());
+        for (int usage : ALL_USAGES) {
+            assertVibrationNotIgnoredForUsageAndDisplay(usage, Display.INVALID_DISPLAY);
+        }
+
+    }
+
+    @Test
+    public void shouldVibrateInputDevices_returnsSettingsValue() {
+        setUserSetting(Settings.System.VIBRATE_INPUT_DEVICES, 1);
+        assertTrue(mVibrationSettings.shouldVibrateInputDevices());
+
+        setUserSetting(Settings.System.VIBRATE_INPUT_DEVICES, 0);
+        assertFalse(mVibrationSettings.shouldVibrateInputDevices());
+    }
+
+    @Test
+    public void shouldCancelVibrationOnScreenOff_withEventBeforeVibration_returnsAlwaysFalse() {
+        long vibrateStartTime = 100;
+        mockGoToSleep(vibrateStartTime - 10, PowerManager.GO_TO_SLEEP_REASON_APPLICATION);
+
+        for (int usage : ALL_USAGES) {
+            // Non-system vibration
+            assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(createCallerInfo(
+                    UID, "some.app", usage), vibrateStartTime));
+            // Vibration with UID zero
+            assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
+                    createCallerInfo(/* uid= */ 0, "", usage), vibrateStartTime));
+            // System vibration
+            assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
+                    createCallerInfo(Process.SYSTEM_UID, "", usage), vibrateStartTime));
+            // SysUI vibration
+            assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
+                    createCallerInfo(UID, SYSUI_PACKAGE_NAME, usage), vibrateStartTime));
+        }
+    }
+
+    @Test
+    public void shouldCancelVibrationOnScreenOff_withSleepReasonInAllowlist_returnsAlwaysFalse() {
+        long vibrateStartTime = 100;
+        int[] allowedSleepReasons = new int[]{
+                PowerManager.GO_TO_SLEEP_REASON_TIMEOUT,
+                PowerManager.GO_TO_SLEEP_REASON_INATTENTIVE,
+        };
+
+        for (int sleepReason : allowedSleepReasons) {
+            mockGoToSleep(vibrateStartTime + 10, sleepReason);
+
+            for (int usage : ALL_USAGES) {
+                // Non-system vibration
+                assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
+                        createCallerInfo(UID, "some.app", usage), vibrateStartTime));
+                // Vibration with UID zero
+                assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
+                        createCallerInfo(/* uid= */ 0, "", usage), vibrateStartTime));
+                // System vibration
+                assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
+                        createCallerInfo(Process.SYSTEM_UID, "", usage), vibrateStartTime));
+                // SysUI vibration
+                assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
+                        createCallerInfo(UID, SYSUI_PACKAGE_NAME, usage), vibrateStartTime));
+            }
+        }
+    }
+
+    @Test
+    public void shouldCancelVibrationOnScreenOff_withNonSystem_returnsTrueIfReasonNotInAllowlist() {
+        long vibrateStartTime = 100;
+        mockGoToSleep(vibrateStartTime + 10, PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON);
+
+        for (int usage : ALL_USAGES) {
+            assertTrue(mVibrationSettings.shouldCancelVibrationOnScreenOff(
+                    createCallerInfo(UID, "some.app", usage), vibrateStartTime));
+        }
+    }
+
+    @Test
+    public void shouldCancelVibrationOnScreenOff_withUidZero_returnsFalseForUsagesInAllowlist() {
+        long vibrateStartTime = 100;
+        mockGoToSleep(vibrateStartTime + 10, PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN);
+
+        Set<Integer> expectedAllowedVibrations = new HashSet<>(Arrays.asList(
+                USAGE_TOUCH,
+                USAGE_ACCESSIBILITY,
+                USAGE_PHYSICAL_EMULATION,
+                USAGE_HARDWARE_FEEDBACK
+        ));
+
+        for (int usage : ALL_USAGES) {
+            if (expectedAllowedVibrations.contains(usage)) {
+                assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
+                        createCallerInfo(/* uid= */ 0, "", usage), vibrateStartTime));
+            } else {
+                assertTrue(mVibrationSettings.shouldCancelVibrationOnScreenOff(
+                        createCallerInfo(/* uid= */ 0, "", usage), vibrateStartTime));
+            }
+        }
+    }
+
+    @Test
+    public void shouldCancelVibrationOnScreenOff_withSystemUid__returnsFalseForUsagesInAllowlist() {
+        long vibrateStartTime = 100;
+        mockGoToSleep(vibrateStartTime + 10, PowerManager.GO_TO_SLEEP_REASON_DEVICE_FOLD);
+
+        Set<Integer> expectedAllowedVibrations = new HashSet<>(Arrays.asList(
+                USAGE_TOUCH,
+                USAGE_ACCESSIBILITY,
+                USAGE_PHYSICAL_EMULATION,
+                USAGE_HARDWARE_FEEDBACK
+        ));
+
+        for (int usage : ALL_USAGES) {
+            if (expectedAllowedVibrations.contains(usage)) {
+                assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
+                        createCallerInfo(Process.SYSTEM_UID, "", usage), vibrateStartTime));
+            } else {
+                assertTrue(mVibrationSettings.shouldCancelVibrationOnScreenOff(
+                        createCallerInfo(Process.SYSTEM_UID, "", usage), vibrateStartTime));
+            }
+        }
+    }
+
+    @Test
+    public void shouldCancelVibrationOnScreenOff_withSysUiPkg_returnsFalseForUsagesInAllowlist() {
+        long vibrateStartTime = 100;
+        mockGoToSleep(vibrateStartTime + 10, PowerManager.GO_TO_SLEEP_REASON_HDMI);
+
+        Set<Integer> expectedAllowedVibrations = new HashSet<>(Arrays.asList(
+                USAGE_TOUCH,
+                USAGE_ACCESSIBILITY,
+                USAGE_PHYSICAL_EMULATION,
+                USAGE_HARDWARE_FEEDBACK
+        ));
+
+        for (int usage : ALL_USAGES) {
+            if (expectedAllowedVibrations.contains(usage)) {
+                assertFalse(mVibrationSettings.shouldCancelVibrationOnScreenOff(
+                        createCallerInfo(UID, SYSUI_PACKAGE_NAME, usage), vibrateStartTime));
+            } else {
+                assertTrue(mVibrationSettings.shouldCancelVibrationOnScreenOff(
+                        createCallerInfo(UID, SYSUI_PACKAGE_NAME, usage), vibrateStartTime));
+            }
+        }
+    }
+
+    @Test
+    public void getDefaultIntensity_returnsIntensityFromVibratorConfig() {
+        setDefaultIntensity(VIBRATION_INTENSITY_HIGH);
+        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
+        setUserSetting(Settings.System.HARDWARE_HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
+        setUserSetting(Settings.System.MEDIA_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
+        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_OFF);
+
+        for (int usage : ALL_USAGES) {
+            assertEquals(VIBRATION_INTENSITY_HIGH, mVibrationSettings.getDefaultIntensity(usage));
+        }
+    }
+
+    @Test
+    public void getCurrentIntensity_returnsIntensityFromSettings() {
+        setDefaultIntensity(VIBRATION_INTENSITY_OFF);
+        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_LOW);
+        setUserSetting(Settings.System.HARDWARE_HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_LOW);
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
+        setUserSetting(Settings.System.MEDIA_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
+        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW);
+
+        for (int usage : ALL_USAGES) {
+            assertEquals(errorMessageForUsage(usage),
+                    VIBRATION_INTENSITY_LOW,
+                    mVibrationSettings.getCurrentIntensity(usage));
+        }
+    }
+
+    @Test
+    public void getCurrentIntensity_updateTriggeredAfterUserSwitched() {
+        setDefaultIntensity(USAGE_RINGTONE, VIBRATION_INTENSITY_OFF);
+        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_HIGH);
+        assertEquals(VIBRATION_INTENSITY_HIGH,
+                mVibrationSettings.getCurrentIntensity(USAGE_RINGTONE));
+
+        // Switching user is not working with FakeSettingsProvider.
+        // Testing the broadcast flow manually.
+        Settings.System.putIntForUser(mContextSpy.getContentResolver(),
+                Settings.System.RING_VIBRATION_INTENSITY, VIBRATION_INTENSITY_LOW,
+                UserHandle.USER_CURRENT);
+        mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy,
+                new Intent(Intent.ACTION_USER_SWITCHED));
+        assertEquals(VIBRATION_INTENSITY_LOW,
+                mVibrationSettings.getCurrentIntensity(USAGE_RINGTONE));
+    }
+
+    @Test
+    public void getCurrentIntensity_noHardwareFeedbackValueUsesHapticFeedbackValue() {
+        setDefaultIntensity(USAGE_HARDWARE_FEEDBACK, VIBRATION_INTENSITY_MEDIUM);
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_OFF);
+        assertEquals(VIBRATION_INTENSITY_OFF, mVibrationSettings.getCurrentIntensity(USAGE_TOUCH));
+        // If haptic feedback is off, fallback to default value.
+        assertEquals(VIBRATION_INTENSITY_MEDIUM,
+                mVibrationSettings.getCurrentIntensity(USAGE_HARDWARE_FEEDBACK));
+        assertEquals(VIBRATION_INTENSITY_MEDIUM,
+                mVibrationSettings.getCurrentIntensity(USAGE_PHYSICAL_EMULATION));
+
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY, VIBRATION_INTENSITY_HIGH);
+        assertEquals(VIBRATION_INTENSITY_HIGH,
+                mVibrationSettings.getCurrentIntensity(USAGE_TOUCH));
+        // If haptic feedback is on, fallback to that value.
+        assertEquals(VIBRATION_INTENSITY_HIGH,
+                mVibrationSettings.getCurrentIntensity(USAGE_HARDWARE_FEEDBACK));
+        assertEquals(VIBRATION_INTENSITY_HIGH,
+                mVibrationSettings.getCurrentIntensity(USAGE_PHYSICAL_EMULATION));
+    }
+
+    @Test
+    public void getFallbackEffect_returnsEffectsFromSettings() {
+        assertNotNull(mVibrationSettings.getFallbackEffect(VibrationEffect.EFFECT_TICK));
+        assertNotNull(mVibrationSettings.getFallbackEffect(VibrationEffect.EFFECT_TEXTURE_TICK));
+        assertNotNull(mVibrationSettings.getFallbackEffect(VibrationEffect.EFFECT_CLICK));
+        assertNotNull(mVibrationSettings.getFallbackEffect(VibrationEffect.EFFECT_HEAVY_CLICK));
+        assertNotNull(mVibrationSettings.getFallbackEffect(VibrationEffect.EFFECT_DOUBLE_CLICK));
+    }
+
+    private void assertVibrationIgnoredForUsage(@VibrationAttributes.Usage int usage,
+            Vibration.Status expectedStatus) {
+        assertVibrationIgnoredForUsageAndDisplay(usage, Display.DEFAULT_DISPLAY, expectedStatus);
+    }
+
+    private void assertVibrationIgnoredForUsageAndDisplay(@VibrationAttributes.Usage int usage,
+            int displayId, Vibration.Status expectedStatus) {
+        Vibration.CallerInfo callerInfo = new Vibration.CallerInfo(
+                VibrationAttributes.createForUsage(usage), UID, displayId, null, null);
+        assertEquals(errorMessageForUsage(usage), expectedStatus,
+                mVibrationSettings.shouldIgnoreVibration(callerInfo));
+    }
+
+    private void assertVibrationNotIgnoredForUsage(@VibrationAttributes.Usage int usage) {
+        assertVibrationNotIgnoredForUsageAndFlags(usage, /* flags= */ 0);
+    }
+
+    private void assertVibrationNotIgnoredForUsageAndFlags(@VibrationAttributes.Usage int usage,
+            @VibrationAttributes.Flag int flags) {
+        assertVibrationNotIgnoredForUsageAndFlagsAndDisplay(usage, Display.DEFAULT_DISPLAY, flags);
+    }
+
+    private void assertVibrationNotIgnoredForUsageAndDisplay(@VibrationAttributes.Usage int usage,
+            int displayId) {
+        assertVibrationNotIgnoredForUsageAndFlagsAndDisplay(usage, displayId, /* flags= */ 0);
+    }
+
+    private void assertVibrationNotIgnoredForUsageAndFlagsAndDisplay(
+            @VibrationAttributes.Usage int usage, int displayId,
+            @VibrationAttributes.Flag int flags) {
+        Vibration.CallerInfo callerInfo = new Vibration.CallerInfo(
+                new VibrationAttributes.Builder().setUsage(usage).setFlags(flags).build(), UID,
+                displayId, null, null);
+        assertNull(errorMessageForUsage(usage),
+                mVibrationSettings.shouldIgnoreVibration(callerInfo));
+    }
+
+    private String errorMessageForUsage(int usage) {
+        return "Error for usage " + VibrationAttributes.usageToString(usage);
+    }
+
+    private void setDefaultIntensity(@Vibrator.VibrationIntensity int intensity) {
+        when(mVibrationConfigMock.getDefaultVibrationIntensity(anyInt())).thenReturn(intensity);
+    }
+
+    private void setDefaultIntensity(@VibrationAttributes.Usage int usage,
+            @Vibrator.VibrationIntensity int intensity) {
+        when(mVibrationConfigMock.getDefaultVibrationIntensity(eq(usage))).thenReturn(intensity);
+    }
+
+    private void setIgnoreVibrationsOnWirelessCharger(boolean ignore) {
+        when(mVibrationConfigMock.ignoreVibrationsOnWirelessCharger()).thenReturn(ignore);
+    }
+
+    private void deleteUserSetting(String settingName) {
+        Settings.System.putStringForUser(
+                mContextSpy.getContentResolver(), settingName, null, UserHandle.USER_CURRENT);
+        // FakeSettingsProvider doesn't support testing triggering ContentObserver yet.
+        mVibrationSettings.mSettingObserver.onChange(false);
+    }
+
+    private void setUserSetting(String settingName, int value) {
+        Settings.System.putIntForUser(
+                mContextSpy.getContentResolver(), settingName, value, UserHandle.USER_CURRENT);
+        // FakeSettingsProvider doesn't support testing triggering ContentObserver yet.
+        mVibrationSettings.mSettingObserver.onChange(false);
+    }
+
+    private void setRingerMode(int ringerMode) {
+        when(mAudioManagerMock.getRingerModeInternal()).thenReturn(ringerMode);
+        // Mock AudioManager broadcast of internal ringer mode change.
+        mVibrationSettings.mSettingChangeReceiver.onReceive(mContextSpy,
+                new Intent(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION));
+    }
+
+    private void mockGoToSleep(long sleepTime, int reason) {
+        when(mPowerManagerInternalMock.getLastGoToSleep()).thenReturn(
+                new PowerManager.SleepData(sleepTime, reason));
+    }
+
+    private Vibration.CallerInfo createCallerInfo(int uid, String opPkg,
+            @VibrationAttributes.Usage int usage) {
+        VibrationAttributes attrs = VibrationAttributes.createForUsage(usage);
+        return new Vibration.CallerInfo(attrs, uid, VIRTUAL_DISPLAY_ID, opPkg, null);
+    }
+
+    private void setBatteryReceiverRegistrationResult(Intent result) {
+        doAnswer(invocation -> {
+            mRegisteredBatteryBroadcastReceiver = invocation.getArgument(0);
+            return result;
+        }).when(mContextSpy).registerReceiver(any(BroadcastReceiver.class),
+                argThat(filter -> filter.matchAction(Intent.ACTION_BATTERY_CHANGED)), anyInt());
+    }
+
+    private Intent getBatteryChangedIntent(int extraPluggedValue) {
+        Intent batteryIntent = new Intent(Intent.ACTION_BATTERY_CHANGED);
+        batteryIntent.putExtra(EXTRA_PLUGGED, extraPluggedValue);
+        return batteryIntent;
+    }
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/VibrationTest.java b/services/tests/vibrator/src/com/android/server/vibrator/VibrationTest.java
new file mode 100644
index 0000000..84f8412
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/VibrationTest.java
@@ -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.server.vibrator;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static java.util.stream.Collectors.toList;
+
+import org.junit.Test;
+
+import java.util.Arrays;
+
+public class VibrationTest {
+
+    @Test
+    public void status_hasUniqueProtoEnumValues() {
+        assertThat(
+                Arrays.stream(Vibration.Status.values())
+                        .map(Vibration.Status::getProtoEnumValue)
+                        .collect(toList()))
+                .containsNoDuplicates();
+    }
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/VibrationThreadTest.java b/services/tests/vibrator/src/com/android/server/vibrator/VibrationThreadTest.java
new file mode 100644
index 0000000..edc5df2
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/VibrationThreadTest.java
@@ -0,0 +1,1732 @@
+/*
+ * 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.server.vibrator;
+
+import static android.os.VibrationEffect.VibrationParameter.targetAmplitude;
+import static android.os.VibrationEffect.VibrationParameter.targetFrequency;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.same;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.never;
+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.content.ComponentName;
+import android.content.Context;
+import android.content.pm.PackageManagerInternal;
+import android.hardware.vibrator.Braking;
+import android.hardware.vibrator.IVibrator;
+import android.hardware.vibrator.IVibratorManager;
+import android.os.CombinedVibration;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.PowerManager;
+import android.os.Process;
+import android.os.SystemClock;
+import android.os.VibrationAttributes;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.os.test.TestLooper;
+import android.os.vibrator.PrebakedSegment;
+import android.os.vibrator.PrimitiveSegment;
+import android.os.vibrator.RampSegment;
+import android.os.vibrator.StepSegment;
+import android.os.vibrator.VibrationConfig;
+import android.os.vibrator.VibrationEffectSegment;
+import android.platform.test.annotations.FlakyTest;
+import android.platform.test.annotations.LargeTest;
+import android.util.SparseArray;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.server.LocalServices;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.InOrder;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import java.time.Duration;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.BooleanSupplier;
+import java.util.stream.Collectors;
+
+public class VibrationThreadTest {
+
+    private static final int TEST_TIMEOUT_MILLIS = 900;
+    private static final int UID = Process.ROOT_UID;
+    private static final int DISPLAY_ID = 10;
+    private static final int VIBRATOR_ID = 1;
+    private static final String PACKAGE_NAME = "package";
+    private static final VibrationAttributes ATTRS = new VibrationAttributes.Builder().build();
+    private static final int TEST_RAMP_STEP_DURATION = 5;
+
+    @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
+
+    @Mock private PackageManagerInternal mPackageManagerInternalMock;
+    @Mock private VibrationThread.VibratorManagerHooks mManagerHooks;
+    @Mock private VibratorController.OnVibrationCompleteListener mControllerCallbacks;
+    @Mock private IBinder mVibrationToken;
+    @Mock private VibrationConfig mVibrationConfigMock;
+
+    private final Map<Integer, FakeVibratorControllerProvider> mVibratorProviders = new HashMap<>();
+    private VibrationSettings mVibrationSettings;
+    private TestLooper mTestLooper;
+    private TestLooperAutoDispatcher mCustomTestLooperDispatcher;
+    private VibrationThread mThread;
+
+    // Setup every time a new vibration is dispatched to the VibrationThread.
+    private SparseArray<VibratorController> mControllers;
+    private VibrationStepConductor mVibrationConductor;
+
+    @Before
+    public void setUp() throws Exception {
+        mTestLooper = new TestLooper();
+
+        when(mVibrationConfigMock.getDefaultVibrationIntensity(anyInt()))
+                .thenReturn(Vibrator.VIBRATION_INTENSITY_MEDIUM);
+        when(mVibrationConfigMock.getRampStepDurationMs()).thenReturn(TEST_RAMP_STEP_DURATION);
+        when(mPackageManagerInternalMock.getSystemUiServiceComponent())
+                .thenReturn(new ComponentName("", ""));
+        doAnswer(answer -> {
+            mVibrationConductor.notifyVibratorComplete(answer.getArgument(0));
+            return null;
+        }).when(mControllerCallbacks).onComplete(anyInt(), anyLong());
+
+        LocalServices.removeServiceForTest(PackageManagerInternal.class);
+        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternalMock);
+
+        Context context = InstrumentationRegistry.getContext();
+        mVibrationSettings = new VibrationSettings(context, new Handler(mTestLooper.getLooper()),
+                mVibrationConfigMock);
+
+        mockVibrators(VIBRATOR_ID);
+
+        PowerManager.WakeLock wakeLock = context.getSystemService(
+                PowerManager.class).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "*vibrator*");
+        mThread = new VibrationThread(wakeLock, mManagerHooks);
+        mThread.start();
+    }
+
+    @After
+    public void tearDown() {
+        if (mCustomTestLooperDispatcher != null) {
+            mCustomTestLooperDispatcher.cancel();
+        }
+    }
+
+    @Test
+    public void vibrate_noVibrator_ignoresVibration() {
+        mVibratorProviders.clear();
+        CombinedVibration effect = CombinedVibration.createParallel(
+                VibrationEffect.get(VibrationEffect.EFFECT_CLICK));
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mControllerCallbacks, never()).onComplete(anyInt(), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.IGNORED_UNSUPPORTED);
+    }
+
+    @Test
+    public void vibrate_missingVibrators_ignoresVibration() {
+        CombinedVibration effect = CombinedVibration.startSequential()
+                .addNext(2, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addNext(3, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
+                .combine();
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mControllerCallbacks, never()).onComplete(anyInt(), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.IGNORED_UNSUPPORTED);
+    }
+
+    @Test
+    public void vibrate_singleVibratorOneShot_runsVibrationAndSetsAmplitude() {
+        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        VibrationEffect effect = VibrationEffect.createOneShot(10, 100);
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L));
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+
+        assertEquals(Arrays.asList(expectedOneShot(10)),
+                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
+        assertEquals(expectedAmplitudes(100), mVibratorProviders.get(VIBRATOR_ID).getAmplitudes());
+    }
+
+    @Test
+    public void vibrate_oneShotWithoutAmplitudeControl_runsVibrationWithDefaultAmplitude() {
+        VibrationEffect effect = VibrationEffect.createOneShot(10, 100);
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L));
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+
+        assertEquals(Arrays.asList(expectedOneShot(10)),
+                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
+        assertTrue(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes().isEmpty());
+    }
+
+    @Test
+    public void vibrate_singleVibratorWaveform_runsVibrationAndChangesAmplitudes() {
+        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                new long[]{5, 5, 5}, new int[]{1, 2, 3}, -1);
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(15L));
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+
+        assertEquals(Arrays.asList(expectedOneShot(15)),
+                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
+        assertEquals(expectedAmplitudes(1, 2, 3),
+                mVibratorProviders.get(VIBRATOR_ID).getAmplitudes());
+    }
+
+    @Test
+    public void vibrate_singleVibratorRepeatingWaveform_runsVibrationUntilThreadCancelled()
+            throws Exception {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        int[] amplitudes = new int[]{1, 2, 3};
+        VibrationEffect effect = VibrationEffect.createWaveform(new long[]{5, 5, 5}, amplitudes, 0);
+        long vibrationId = startThreadAndDispatcher(effect);
+
+        assertTrue(
+                waitUntil(() -> fakeVibrator.getAmplitudes().size() > 2 * amplitudes.length,
+                        TEST_TIMEOUT_MILLIS));
+        // Vibration still running after 2 cycles.
+        assertTrue(mThread.isRunningVibrationId(vibrationId));
+        assertTrue(mControllers.get(VIBRATOR_ID).isVibrating());
+
+        Vibration.EndInfo cancelVibrationInfo = new Vibration.EndInfo(
+                Vibration.Status.CANCELLED_SUPERSEDED, new Vibration.CallerInfo(
+                VibrationAttributes.createForUsage(VibrationAttributes.USAGE_ALARM), /* uid= */
+                1, /* displayId= */ -1, /* opPkg= */ null, /* reason= */ null));
+        mVibrationConductor.notifyCancelled(
+                cancelVibrationInfo,
+                /* immediate= */ false);
+        waitForCompletion();
+        assertFalse(mThread.isRunningVibrationId(vibrationId));
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), anyLong());
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+        verifyCallbacksTriggered(vibrationId, cancelVibrationInfo);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+
+        List<Float> playedAmplitudes = fakeVibrator.getAmplitudes();
+        assertFalse(fakeVibrator.getEffectSegments(vibrationId).isEmpty());
+        assertFalse(playedAmplitudes.isEmpty());
+
+        for (int i = 0; i < playedAmplitudes.size(); i++) {
+            assertEquals(amplitudes[i % amplitudes.length] / 255f, playedAmplitudes.get(i), 1e-5);
+        }
+    }
+
+    @Test
+    public void vibrate_singleVibratorRepeatingShortAlwaysOnWaveform_turnsVibratorOnForLonger()
+            throws Exception {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        int[] amplitudes = new int[]{1, 2, 3};
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                new long[]{1, 10, 100}, amplitudes, 0);
+        long vibrationId = startThreadAndDispatcher(effect);
+
+        assertTrue(waitUntil(() -> !fakeVibrator.getAmplitudes().isEmpty(), TEST_TIMEOUT_MILLIS));
+        mVibrationConductor.notifyCancelled(
+                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
+                /* immediate= */ false);
+        waitForCompletion();
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_USER);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+        assertEquals(Arrays.asList(expectedOneShot(5000)),
+                fakeVibrator.getEffectSegments(vibrationId));
+    }
+
+    @Test
+    public void vibrate_singleVibratorPatternWithZeroDurationSteps_skipsZeroDurationSteps() {
+        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[]{0, 100, 50, 100, 0, 0, 0, 50}, /* repeat= */ -1);
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(300L));
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
+
+        assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId))
+                .isEqualTo(expectedOneShots(100L, 150L));
+    }
+
+    @Test
+    public void vibrate_singleVibratorPatternWithZeroDurationAndAmplitude_skipsZeroDurationSteps() {
+        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        int[] amplitudes = new int[]{1, 2, 0, 3, 4, 5, 0, 6};
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[]{0, 100, 0, 50, 50, 0, 100, 50}, amplitudes,
+                /* repeat= */ -1);
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(350L));
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
+
+        assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId))
+                .isEqualTo(expectedOneShots(200L, 50L));
+    }
+
+    @LargeTest
+    @Test
+    public void vibrate_singleVibratorRepeatingPatternWithZeroDurationSteps_repeatsEffectCorrectly()
+            throws Exception {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[]{0, 200, 50, 100, 0, 50, 50, 100}, /* repeat= */ 0);
+        long vibrationId = startThreadAndDispatcher(effect);
+        // We are expect this test to repeat the vibration effect twice, which would result in 5
+        // segments being played:
+        // 200ms ON
+        // 150ms ON (100ms + 50ms, skips 0ms)
+        // 300ms ON (100ms + 200ms looping to the start and skipping first 0ms)
+        // 150ms ON (100ms + 50ms, skips 0ms)
+        // 300ms ON (100ms + 200ms looping to the start and skipping first 0ms)
+        assertTrue(waitUntil(() -> fakeVibrator.getEffectSegments(vibrationId).size() >= 5,
+                5000L + TEST_TIMEOUT_MILLIS));
+        mVibrationConductor.notifyCancelled(
+                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
+                /* immediate= */ false);
+        waitForCompletion();
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_USER);
+        assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
+
+        assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId).subList(0, 5))
+                .isEqualTo(expectedOneShots(200L, 150L, 300L, 150L, 300L));
+    }
+
+    @Test
+    public void vibrate_singleVibratorRepeatingPwle_generatesLargestPwles() throws Exception {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
+        fakeVibrator.setMinFrequency(100);
+        fakeVibrator.setResonantFrequency(150);
+        fakeVibrator.setFrequencyResolution(50);
+        fakeVibrator.setMaxAmplitudes(1, 1, 1);
+        fakeVibrator.setPwleSizeMax(10);
+
+        VibrationEffect effect = VibrationEffect.startWaveform(targetAmplitude(1))
+                // Very long segment so thread will be cancelled after first PWLE is triggered.
+                .addTransition(Duration.ofMillis(100), targetFrequency(100))
+                .build();
+        VibrationEffect repeatingEffect = VibrationEffect.startComposition()
+                .repeatEffectIndefinitely(effect)
+                .compose();
+        long vibrationId = startThreadAndDispatcher(repeatingEffect);
+
+        assertTrue(waitUntil(() -> !fakeVibrator.getEffectSegments(vibrationId).isEmpty(),
+                TEST_TIMEOUT_MILLIS));
+        mVibrationConductor.notifyCancelled(
+                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
+                /* immediate= */ false);
+        waitForCompletion();
+
+        // PWLE size max was used to generate a single vibrate call with 10 segments.
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_USER);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+        assertEquals(10, fakeVibrator.getEffectSegments(vibrationId).size());
+    }
+
+    @Test
+    public void vibrate_singleVibratorRepeatingPrimitives_generatesLargestComposition()
+            throws Exception {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        fakeVibrator.setSupportedPrimitives(VibrationEffect.Composition.PRIMITIVE_CLICK);
+        fakeVibrator.setCompositionSizeMax(10);
+
+        VibrationEffect effect = VibrationEffect.startComposition()
+                // Very long delay so thread will be cancelled after first PWLE is triggered.
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 100)
+                .compose();
+        VibrationEffect repeatingEffect = VibrationEffect.startComposition()
+                .repeatEffectIndefinitely(effect)
+                .compose();
+        long vibrationId = startThreadAndDispatcher(repeatingEffect);
+
+        assertTrue(waitUntil(() -> !fakeVibrator.getEffectSegments(vibrationId).isEmpty(),
+                TEST_TIMEOUT_MILLIS));
+        mVibrationConductor.notifyCancelled(
+                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_SCREEN_OFF),
+                /* immediate= */ false);
+        waitForCompletion();
+
+        // Composition size max was used to generate a single vibrate call with 10 primitives.
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_SCREEN_OFF);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+        assertEquals(10, fakeVibrator.getEffectSegments(vibrationId).size());
+    }
+
+    @Test
+    public void vibrate_singleVibratorRepeatingLongAlwaysOnWaveform_turnsVibratorOnForACycle()
+            throws Exception {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        int[] amplitudes = new int[]{1, 2, 3};
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                new long[]{5000, 500, 50}, amplitudes, 0);
+        long vibrationId = startThreadAndDispatcher(effect);
+
+        assertTrue(waitUntil(() -> !fakeVibrator.getAmplitudes().isEmpty(), TEST_TIMEOUT_MILLIS));
+        mVibrationConductor.notifyCancelled(
+                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
+                /* immediate= */ false);
+        waitForCompletion();
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_USER);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+        assertEquals(Arrays.asList(expectedOneShot(5550)),
+                fakeVibrator.getEffectSegments(vibrationId));
+    }
+
+    @LargeTest
+    @Test
+    public void vibrate_singleVibratorRepeatingAlwaysOnWaveform_turnsVibratorBackOn()
+            throws Exception {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        int expectedOnDuration = SetAmplitudeVibratorStep.REPEATING_EFFECT_ON_DURATION;
+
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                /* timings= */ new long[]{expectedOnDuration - 100, 50},
+                /* amplitudes= */ new int[]{1, 2}, /* repeat= */ 0);
+        long vibrationId = startThreadAndDispatcher(effect);
+
+        assertTrue(waitUntil(() -> fakeVibrator.getEffectSegments(vibrationId).size() > 1,
+                expectedOnDuration + TEST_TIMEOUT_MILLIS));
+        mVibrationConductor.notifyCancelled(
+                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
+                /* immediate= */ false);
+        waitForCompletion();
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_USER);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+        List<VibrationEffectSegment> effectSegments = fakeVibrator.getEffectSegments(vibrationId);
+        // First time, turn vibrator ON for the expected fixed duration.
+        assertEquals(expectedOnDuration, effectSegments.get(0).getDuration());
+        // Vibrator turns off in the middle of the second execution of the first step. Expect it to
+        // be turned back ON at least for the fixed duration + the remaining duration of the step.
+        assertTrue(expectedOnDuration < effectSegments.get(1).getDuration());
+        // Set amplitudes for a cycle {1, 2}, start second loop then turn it back on to same value.
+        assertEquals(expectedAmplitudes(1, 2, 1, 1),
+                mVibratorProviders.get(VIBRATOR_ID).getAmplitudes().subList(0, 4));
+    }
+
+    @Test
+    public void vibrate_singleVibratorPredefinedCancel_cancelsVibrationImmediately()
+            throws Exception {
+        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        mVibratorProviders.get(VIBRATOR_ID).setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK);
+
+        VibrationEffect effect = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 100)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 100)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 100)
+                .compose();
+        long vibrationId = startThreadAndDispatcher(effect);
+
+        assertTrue(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
+                TEST_TIMEOUT_MILLIS));
+        assertTrue(mThread.isRunningVibrationId(vibrationId));
+
+        // Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
+        // fail at waitForCompletion(vibrationThread) if the vibration not cancelled immediately.
+        Thread cancellingThread =
+                new Thread(() -> mVibrationConductor.notifyCancelled(
+                        new Vibration.EndInfo(
+                                Vibration.Status.CANCELLED_BY_SETTINGS_UPDATE),
+                        /* immediate= */ false));
+        cancellingThread.start();
+
+        waitForCompletion(/* timeout= */ 50);
+        cancellingThread.join();
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_SETTINGS_UPDATE);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+    }
+
+    @Test
+    public void vibrate_singleVibratorWaveformCancel_cancelsVibrationImmediately()
+            throws Exception {
+        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+
+        VibrationEffect effect = VibrationEffect.createWaveform(new long[]{100}, new int[]{100}, 0);
+        long vibrationId = startThreadAndDispatcher(effect);
+
+        assertTrue(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
+                TEST_TIMEOUT_MILLIS));
+        assertTrue(mThread.isRunningVibrationId(vibrationId));
+
+        // Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
+        // fail at waitForCompletion(vibrationThread) if the vibration not cancelled immediately.
+        Thread cancellingThread =
+                new Thread(() -> mVibrationConductor.notifyCancelled(
+                        new Vibration.EndInfo(
+                                Vibration.Status.CANCELLED_BY_SCREEN_OFF),
+                        /* immediate= */ false));
+        cancellingThread.start();
+
+        waitForCompletion(/* timeout= */ 50);
+        cancellingThread.join();
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_SCREEN_OFF);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+    }
+
+    @Test
+    public void vibrate_singleVibratorPrebaked_runsVibration() {
+        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_THUD);
+
+        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_THUD);
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L));
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+
+        assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_THUD)),
+                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
+    }
+
+    @Test
+    public void vibrate_singleVibratorPrebakedAndUnsupportedEffectWithFallback_runsFallback() {
+        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        VibrationEffect fallback = VibrationEffect.createOneShot(10, 100);
+        HalVibration vibration = createVibration(CombinedVibration.createParallel(
+                VibrationEffect.get(VibrationEffect.EFFECT_CLICK)));
+        vibration.addFallback(VibrationEffect.EFFECT_CLICK, fallback);
+        long vibrationId = startThreadAndDispatcher(vibration);
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L));
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+
+        assertEquals(Arrays.asList(expectedOneShot(10)),
+                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
+        assertEquals(expectedAmplitudes(100), mVibratorProviders.get(VIBRATOR_ID).getAmplitudes());
+    }
+
+    @Test
+    public void vibrate_singleVibratorPrebakedAndUnsupportedEffect_ignoresVibration() {
+        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(0L));
+        verify(mManagerHooks, never()).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks, never()).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.IGNORED_UNSUPPORTED);
+        assertTrue(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId).isEmpty());
+    }
+
+    @Test
+    public void vibrate_singleVibratorComposed_runsVibration() {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        fakeVibrator.setSupportedPrimitives(VibrationEffect.Composition.PRIMITIVE_CLICK,
+                VibrationEffect.Composition.PRIMITIVE_TICK);
+
+        VibrationEffect effect = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f)
+                .compose();
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(40L));
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+        assertEquals(Arrays.asList(
+                expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0),
+                expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f, 0)),
+                fakeVibrator.getEffectSegments(vibrationId));
+    }
+
+    @Test
+    public void vibrate_singleVibratorComposedAndNoCapability_ignoresVibration() {
+        VibrationEffect effect = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f)
+                .compose();
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(0L));
+        verify(mManagerHooks, never()).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks, never()).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.IGNORED_UNSUPPORTED);
+        assertTrue(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId).isEmpty());
+    }
+
+    @Test
+    public void vibrate_singleVibratorLargeComposition_splitsVibratorComposeCalls() {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        fakeVibrator.setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK,
+                VibrationEffect.Composition.PRIMITIVE_TICK,
+                VibrationEffect.Composition.PRIMITIVE_SPIN);
+        fakeVibrator.setCompositionSizeMax(2);
+
+        VibrationEffect effect = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SPIN, 0.8f)
+                .compose();
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        // Vibrator compose called twice.
+        verify(mControllerCallbacks, times(2)).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        assertEquals(3, fakeVibrator.getEffectSegments(vibrationId).size());
+    }
+
+    @Test
+    public void vibrate_singleVibratorComposedEffects_runsDifferentVibrations() {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        fakeVibrator.setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK,
+                VibrationEffect.Composition.PRIMITIVE_TICK);
+        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS,
+                IVibrator.CAP_COMPOSE_PWLE_EFFECTS, IVibrator.CAP_AMPLITUDE_CONTROL);
+        fakeVibrator.setMinFrequency(100);
+        fakeVibrator.setResonantFrequency(150);
+        fakeVibrator.setFrequencyResolution(50);
+        fakeVibrator.setMaxAmplitudes(
+                0.5f /* 100Hz*/, 1 /* 150Hz */, 0.6f /* 200Hz */);
+
+        VibrationEffect effect = VibrationEffect.startComposition()
+                .addEffect(VibrationEffect.createOneShot(10, 100))
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f)
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f)
+                .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addEffect(VibrationEffect.startWaveform()
+                        .addTransition(Duration.ofMillis(10),
+                                targetAmplitude(1), targetFrequency(100))
+                        .addTransition(Duration.ofMillis(20), targetFrequency(120))
+                        .build())
+                .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .compose();
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        // Use first duration the vibrator is turned on since we cannot estimate the clicks.
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L));
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks, times(5)).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+        assertEquals(Arrays.asList(
+                expectedOneShot(10),
+                expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0),
+                expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f, 0),
+                expectedPrebaked(VibrationEffect.EFFECT_CLICK),
+                expectedRamp(/* startAmplitude= */ 0, /* endAmplitude= */ 0.5f,
+                        /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 100, /* duration= */ 10),
+                expectedRamp(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.7f,
+                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 120, /* duration= */ 20),
+                expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
+                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
+        assertEquals(expectedAmplitudes(100), mVibratorProviders.get(VIBRATOR_ID).getAmplitudes());
+    }
+
+    @Test
+    public void vibrate_singleVibratorComposedWithFallback_replacedInTheMiddleOfComposition() {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        fakeVibrator.setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK,
+                VibrationEffect.Composition.PRIMITIVE_TICK);
+        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+
+        VibrationEffect fallback = VibrationEffect.createOneShot(10, 100);
+        VibrationEffect effect = VibrationEffect.startComposition()
+                .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f)
+                .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_TICK))
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f)
+                .compose();
+        HalVibration vibration = createVibration(CombinedVibration.createParallel(effect));
+        vibration.addFallback(VibrationEffect.EFFECT_TICK, fallback);
+        long vibrationId = startThreadAndDispatcher(vibration);
+        waitForCompletion();
+
+        // Use first duration the vibrator is turned on since we cannot estimate the clicks.
+        verify(mManagerHooks).noteVibratorOn(eq(UID), anyLong());
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks, times(4)).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+
+        List<VibrationEffectSegment> segments =
+                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId);
+        assertTrue("Wrong segments: " + segments, segments.size() >= 4);
+        assertTrue(segments.get(0) instanceof PrebakedSegment);
+        assertTrue(segments.get(1) instanceof PrimitiveSegment);
+        for (int i = 2; i < segments.size() - 1; i++) {
+            // One or more step segments as fallback for the EFFECT_TICK.
+            assertTrue(segments.get(i) instanceof StepSegment);
+        }
+        assertTrue(segments.get(segments.size() - 1) instanceof PrimitiveSegment);
+    }
+
+    @Test
+    public void vibrate_singleVibratorPwle_runsComposePwle() {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
+        fakeVibrator.setSupportedBraking(Braking.CLAB);
+        fakeVibrator.setMinFrequency(100);
+        fakeVibrator.setResonantFrequency(150);
+        fakeVibrator.setFrequencyResolution(50);
+        fakeVibrator.setMaxAmplitudes(
+                0.5f /* 100Hz*/, 1 /* 150Hz */, 0.6f /* 200Hz */);
+
+        VibrationEffect effect = VibrationEffect.startWaveform(targetAmplitude(1))
+                .addSustain(Duration.ofMillis(10))
+                .addTransition(Duration.ofMillis(20), targetAmplitude(0))
+                .addTransition(Duration.ZERO, targetAmplitude(0.8f), targetFrequency(100))
+                .addSustain(Duration.ofMillis(30))
+                .addTransition(Duration.ofMillis(40), targetAmplitude(0.6f), targetFrequency(200))
+                .build();
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(100L));
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+        assertEquals(Arrays.asList(
+                expectedRamp(/* amplitude= */ 1, /* frequencyHz= */ 150, /* duration= */ 10),
+                expectedRamp(/* startAmplitude= */ 1, /* endAmplitude= */ 0,
+                        /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 150, /* duration= */ 20),
+                expectedRamp(/* amplitude= */ 0.5f, /* frequencyHz= */ 100, /* duration= */ 30),
+                expectedRamp(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.6f,
+                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 200,
+                        /* duration= */ 40)),
+                fakeVibrator.getEffectSegments(vibrationId));
+        assertEquals(Arrays.asList(Braking.CLAB), fakeVibrator.getBraking(vibrationId));
+    }
+
+    @Test
+    public void vibrate_singleVibratorLargePwle_splitsComposeCallWhenAmplitudeIsLowest() {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
+        fakeVibrator.setMinFrequency(100);
+        fakeVibrator.setResonantFrequency(150);
+        fakeVibrator.setFrequencyResolution(50);
+        fakeVibrator.setMaxAmplitudes(1, 1, 1);
+        fakeVibrator.setPwleSizeMax(3);
+
+        VibrationEffect effect = VibrationEffect.startWaveform(targetAmplitude(1))
+                .addSustain(Duration.ofMillis(10))
+                .addTransition(Duration.ofMillis(20), targetAmplitude(0))
+                // Waveform will be split here, after vibration goes to zero amplitude
+                .addTransition(Duration.ZERO, targetAmplitude(0.8f), targetFrequency(100))
+                .addSustain(Duration.ofMillis(30))
+                .addTransition(Duration.ofMillis(40), targetAmplitude(0.6f), targetFrequency(200))
+                // Waveform will be split here at lowest amplitude.
+                .addTransition(Duration.ofMillis(40), targetAmplitude(0.7f), targetFrequency(200))
+                .addTransition(Duration.ofMillis(40), targetAmplitude(0.6f), targetFrequency(200))
+                .build();
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+
+        // Vibrator compose called 3 times with 2 segments instead of 2 times with 3 segments.
+        // Using best split points instead of max-packing PWLEs.
+        verify(mControllerCallbacks, times(3)).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        assertEquals(6, fakeVibrator.getEffectSegments(vibrationId).size());
+    }
+
+    @Test
+    public void vibrate_singleVibratorCancelled_vibratorStopped() throws Exception {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        VibrationEffect effect = VibrationEffect.createWaveform(new long[]{5}, new int[]{100}, 0);
+        long vibrationId = startThreadAndDispatcher(effect);
+
+        assertTrue(waitUntil(() -> fakeVibrator.getAmplitudes().size() > 2, TEST_TIMEOUT_MILLIS));
+        // Vibration still running after 2 cycles.
+        assertTrue(mThread.isRunningVibrationId(vibrationId));
+        assertTrue(mControllers.get(VIBRATOR_ID).isVibrating());
+
+        mVibrationConductor.binderDied();
+        waitForCompletion();
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BINDER_DIED);
+    }
+
+    @Test
+    public void vibrate_singleVibrator_skipsSyncedCallbacks() {
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        long vibrationId = startThreadAndDispatcher(VibrationEffect.createOneShot(10, 100));
+        waitForCompletion();
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        verify(mManagerHooks, never()).prepareSyncedVibration(anyLong(), any());
+        verify(mManagerHooks, never()).triggerSyncedVibration(anyLong());
+        verify(mManagerHooks, never()).cancelSyncedVibration();
+    }
+
+    @Test
+    public void vibrate_multipleExistingAndMissingVibrators_vibratesOnlyExistingOnes() {
+        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_TICK);
+
+        CombinedVibration effect = CombinedVibration.startParallel()
+                .addVibrator(VIBRATOR_ID, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
+                .addVibrator(2, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
+                .combine();
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L));
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verify(mControllerCallbacks, never()).onComplete(eq(2), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+
+        assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_TICK)),
+                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
+    }
+
+    @Test
+    public void vibrate_multipleMono_runsSameEffectInAllVibrators() {
+        mockVibrators(1, 2, 3);
+        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        mVibratorProviders.get(2).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        mVibratorProviders.get(3).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+
+        CombinedVibration effect = CombinedVibration.createParallel(
+                VibrationEffect.get(VibrationEffect.EFFECT_CLICK));
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L));
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks).onComplete(eq(1), eq(vibrationId));
+        verify(mControllerCallbacks).onComplete(eq(2), eq(vibrationId));
+        verify(mControllerCallbacks).onComplete(eq(3), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertFalse(mControllers.get(1).isVibrating());
+        assertFalse(mControllers.get(2).isVibrating());
+        assertFalse(mControllers.get(3).isVibrating());
+
+        VibrationEffectSegment expected = expectedPrebaked(VibrationEffect.EFFECT_CLICK);
+        assertEquals(Arrays.asList(expected),
+                mVibratorProviders.get(1).getEffectSegments(vibrationId));
+        assertEquals(Arrays.asList(expected),
+                mVibratorProviders.get(2).getEffectSegments(vibrationId));
+        assertEquals(Arrays.asList(expected),
+                mVibratorProviders.get(3).getEffectSegments(vibrationId));
+    }
+
+    @Test
+    public void vibrate_multipleStereo_runsVibrationOnRightVibrators() {
+        mockVibrators(1, 2, 3, 4);
+        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        mVibratorProviders.get(3).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        mVibratorProviders.get(4).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        mVibratorProviders.get(4).setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK);
+
+        VibrationEffect composed = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                .compose();
+        CombinedVibration effect = CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addVibrator(2, VibrationEffect.createOneShot(10, 100))
+                .addVibrator(3, VibrationEffect.createWaveform(
+                        new long[]{10, 10}, new int[]{1, 2}, -1))
+                .addVibrator(4, composed)
+                .combine();
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L));
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks).onComplete(eq(1), eq(vibrationId));
+        verify(mControllerCallbacks).onComplete(eq(2), eq(vibrationId));
+        verify(mControllerCallbacks).onComplete(eq(3), eq(vibrationId));
+        verify(mControllerCallbacks).onComplete(eq(4), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertFalse(mControllers.get(1).isVibrating());
+        assertFalse(mControllers.get(2).isVibrating());
+        assertFalse(mControllers.get(3).isVibrating());
+        assertFalse(mControllers.get(4).isVibrating());
+
+        assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
+                mVibratorProviders.get(1).getEffectSegments(vibrationId));
+        assertEquals(Arrays.asList(expectedOneShot(10)),
+                mVibratorProviders.get(2).getEffectSegments(vibrationId));
+        assertEquals(expectedAmplitudes(100), mVibratorProviders.get(2).getAmplitudes());
+        assertEquals(Arrays.asList(expectedOneShot(20)),
+                mVibratorProviders.get(3).getEffectSegments(vibrationId));
+        assertEquals(expectedAmplitudes(1, 2), mVibratorProviders.get(3).getAmplitudes());
+        assertEquals(Arrays.asList(
+                expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0)),
+                mVibratorProviders.get(4).getEffectSegments(vibrationId));
+    }
+
+    @Test
+    public void vibrate_multipleSequential_runsVibrationInOrderWithDelays() {
+        mockVibrators(1, 2, 3);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        mVibratorProviders.get(2).setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK);
+        mVibratorProviders.get(3).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+
+        VibrationEffect composed = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                .compose();
+        CombinedVibration effect = CombinedVibration.startSequential()
+                .addNext(3, VibrationEffect.get(VibrationEffect.EFFECT_CLICK), /* delay= */ 50)
+                .addNext(1, VibrationEffect.createOneShot(10, 100), /* delay= */ 50)
+                .addNext(2, composed, /* delay= */ 50)
+                .combine();
+        long vibrationId = startThreadAndDispatcher(effect);
+
+        waitForCompletion();
+        InOrder controllerVerifier = inOrder(mControllerCallbacks);
+        controllerVerifier.verify(mControllerCallbacks).onComplete(eq(3), eq(vibrationId));
+        controllerVerifier.verify(mControllerCallbacks).onComplete(eq(1), eq(vibrationId));
+        controllerVerifier.verify(mControllerCallbacks).onComplete(eq(2), eq(vibrationId));
+
+        InOrder batteryVerifier = inOrder(mManagerHooks);
+        batteryVerifier.verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L));
+        batteryVerifier.verify(mManagerHooks).noteVibratorOff(eq(UID));
+        batteryVerifier.verify(mManagerHooks).noteVibratorOn(eq(UID), eq(10L));
+        batteryVerifier.verify(mManagerHooks).noteVibratorOff(eq(UID));
+        batteryVerifier.verify(mManagerHooks).noteVibratorOn(eq(UID), eq(20L));
+        batteryVerifier.verify(mManagerHooks).noteVibratorOff(eq(UID));
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertFalse(mControllers.get(1).isVibrating());
+        assertFalse(mControllers.get(2).isVibrating());
+        assertFalse(mControllers.get(3).isVibrating());
+
+        assertEquals(Arrays.asList(expectedOneShot(10)),
+                mVibratorProviders.get(1).getEffectSegments(vibrationId));
+        assertEquals(expectedAmplitudes(100), mVibratorProviders.get(1).getAmplitudes());
+        assertEquals(Arrays.asList(
+                expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0)),
+                mVibratorProviders.get(2).getEffectSegments(vibrationId));
+        assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
+                mVibratorProviders.get(3).getEffectSegments(vibrationId));
+    }
+
+    @FlakyTest
+    @Test
+    public void vibrate_multipleSyncedCallbackTriggered_finishSteps() throws Exception {
+        int[] vibratorIds = new int[]{1, 2};
+        mockVibrators(vibratorIds);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        mVibratorProviders.get(1).setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK);
+        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        mVibratorProviders.get(2).setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK);
+        when(mManagerHooks.prepareSyncedVibration(anyLong(), eq(vibratorIds))).thenReturn(true);
+
+        VibrationEffect composed = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 100)
+                .compose();
+        CombinedVibration effect = CombinedVibration.createParallel(composed);
+        // We create the HalVibration here to obtain the vibration id and use it to mock the
+        // required response when calling triggerSyncedVibration.
+        HalVibration halVibration = createVibration(effect);
+        long vibrationId = halVibration.id;
+        when(mManagerHooks.triggerSyncedVibration(eq(vibrationId))).thenReturn(true);
+        startThreadAndDispatcher(halVibration);
+
+        assertTrue(waitUntil(
+                () -> !mVibratorProviders.get(1).getEffectSegments(vibrationId).isEmpty()
+                        && !mVibratorProviders.get(2).getEffectSegments(vibrationId).isEmpty(),
+                TEST_TIMEOUT_MILLIS));
+        mVibrationConductor.notifySyncedVibrationComplete();
+        waitForCompletion();
+
+        long expectedCap = IVibratorManager.CAP_SYNC | IVibratorManager.CAP_PREPARE_COMPOSE;
+        verify(mManagerHooks).prepareSyncedVibration(eq(expectedCap), eq(vibratorIds));
+        verify(mManagerHooks).triggerSyncedVibration(eq(vibrationId));
+        verify(mManagerHooks, never()).cancelSyncedVibration();
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+
+        VibrationEffectSegment expected = expectedPrimitive(
+                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 100);
+        assertEquals(Arrays.asList(expected),
+                mVibratorProviders.get(1).getEffectSegments(vibrationId));
+        assertEquals(Arrays.asList(expected),
+                mVibratorProviders.get(2).getEffectSegments(vibrationId));
+    }
+
+    @Test
+    public void vibrate_multipleSynced_callsPrepareAndTriggerCallbacks() {
+        int[] vibratorIds = new int[]{1, 2, 3, 4};
+        mockVibrators(vibratorIds);
+        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        mVibratorProviders.get(4).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        mVibratorProviders.get(4).setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK);
+        when(mManagerHooks.prepareSyncedVibration(anyLong(), any())).thenReturn(true);
+
+        VibrationEffect composed = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                .compose();
+        CombinedVibration effect = CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addVibrator(2, VibrationEffect.createOneShot(10, 100))
+                .addVibrator(3, VibrationEffect.createWaveform(new long[]{10}, new int[]{100}, -1))
+                .addVibrator(4, composed)
+                .combine();
+        // We create the HalVibration here to obtain the vibration id and use it to mock the
+        // required response when calling triggerSyncedVibration.
+        HalVibration halVibration = createVibration(effect);
+        long vibrationId = halVibration.id;
+        when(mManagerHooks.triggerSyncedVibration(eq(vibrationId))).thenReturn(true);
+        startThreadAndDispatcher(halVibration);
+        waitForCompletion();
+
+        long expectedCap = IVibratorManager.CAP_SYNC
+                | IVibratorManager.CAP_PREPARE_ON
+                | IVibratorManager.CAP_PREPARE_PERFORM
+                | IVibratorManager.CAP_PREPARE_COMPOSE
+                | IVibratorManager.CAP_MIXED_TRIGGER_ON
+                | IVibratorManager.CAP_MIXED_TRIGGER_PERFORM
+                | IVibratorManager.CAP_MIXED_TRIGGER_COMPOSE;
+        verify(mManagerHooks).prepareSyncedVibration(eq(expectedCap), eq(vibratorIds));
+        verify(mManagerHooks).triggerSyncedVibration(eq(vibrationId));
+        verify(mManagerHooks, never()).cancelSyncedVibration();
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+    }
+
+    @Test
+    public void vibrate_multipleSyncedPrepareFailed_skipTriggerStepAndVibrates() {
+        int[] vibratorIds = new int[]{1, 2};
+        mockVibrators(vibratorIds);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        when(mManagerHooks.prepareSyncedVibration(anyLong(), any())).thenReturn(false);
+
+        CombinedVibration effect = CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.createOneShot(10, 100))
+                .addVibrator(2, VibrationEffect.createWaveform(new long[]{5}, new int[]{200}, -1))
+                .combine();
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        long expectedCap = IVibratorManager.CAP_SYNC | IVibratorManager.CAP_PREPARE_ON;
+        verify(mManagerHooks).prepareSyncedVibration(eq(expectedCap), eq(vibratorIds));
+        verify(mManagerHooks, never()).triggerSyncedVibration(eq(vibrationId));
+        verify(mManagerHooks, never()).cancelSyncedVibration();
+
+        assertEquals(Arrays.asList(expectedOneShot(10)),
+                mVibratorProviders.get(1).getEffectSegments(vibrationId));
+        assertEquals(expectedAmplitudes(100), mVibratorProviders.get(1).getAmplitudes());
+        assertEquals(Arrays.asList(expectedOneShot(5)),
+                mVibratorProviders.get(2).getEffectSegments(vibrationId));
+        assertEquals(expectedAmplitudes(200), mVibratorProviders.get(2).getAmplitudes());
+    }
+
+    @Test
+    public void vibrate_multipleSyncedTriggerFailed_cancelPreparedVibrationAndSkipSetAmplitude() {
+        int[] vibratorIds = new int[]{1, 2};
+        mockVibrators(vibratorIds);
+        mVibratorProviders.get(2).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        when(mManagerHooks.prepareSyncedVibration(anyLong(), any())).thenReturn(true);
+
+        CombinedVibration effect = CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.createOneShot(10, 100))
+                .addVibrator(2, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .combine();
+        // We create the HalVibration here to obtain the vibration id and use it to mock the
+        // required response when calling triggerSyncedVibration.
+        HalVibration halVibration = createVibration(effect);
+        long vibrationId = halVibration.id;
+        when(mManagerHooks.triggerSyncedVibration(eq(vibrationId))).thenReturn(false);
+        startThreadAndDispatcher(halVibration);
+        waitForCompletion();
+
+        long expectedCap = IVibratorManager.CAP_SYNC
+                | IVibratorManager.CAP_PREPARE_ON
+                | IVibratorManager.CAP_PREPARE_PERFORM
+                | IVibratorManager.CAP_MIXED_TRIGGER_ON
+                | IVibratorManager.CAP_MIXED_TRIGGER_PERFORM;
+        verify(mManagerHooks).prepareSyncedVibration(eq(expectedCap), eq(vibratorIds));
+        verify(mManagerHooks).triggerSyncedVibration(eq(vibrationId));
+        verify(mManagerHooks).cancelSyncedVibration();
+        assertTrue(mVibratorProviders.get(1).getAmplitudes().isEmpty());
+    }
+
+    @Test
+    public void vibrate_multipleWaveforms_playsWaveformsInParallel() throws Exception {
+        mockVibrators(1, 2, 3);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        mVibratorProviders.get(3).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        CombinedVibration effect = CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.createWaveform(
+                        new long[]{5, 10, 10}, new int[]{1, 2, 3}, -1))
+                .addVibrator(2, VibrationEffect.createWaveform(
+                        new long[]{20, 60}, new int[]{4, 5}, -1))
+                .addVibrator(3, VibrationEffect.createWaveform(
+                        new long[]{60}, new int[]{6}, -1))
+                .combine();
+        long vibrationId = startThreadAndDispatcher(effect);
+
+        // All vibrators are turned on in parallel.
+        assertTrue(waitUntil(
+                () -> mControllers.get(1).isVibrating()
+                        && mControllers.get(2).isVibrating()
+                        && mControllers.get(3).isVibrating(),
+                TEST_TIMEOUT_MILLIS));
+
+        waitForCompletion();
+
+        verify(mManagerHooks).noteVibratorOn(eq(UID), eq(80L));
+        verify(mManagerHooks).noteVibratorOff(eq(UID));
+        verify(mControllerCallbacks).onComplete(eq(1), eq(vibrationId));
+        verify(mControllerCallbacks).onComplete(eq(2), eq(vibrationId));
+        verify(mControllerCallbacks).onComplete(eq(3), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+        assertFalse(mControllers.get(1).isVibrating());
+        assertFalse(mControllers.get(2).isVibrating());
+        assertFalse(mControllers.get(3).isVibrating());
+
+        assertEquals(Arrays.asList(expectedOneShot(25)),
+                mVibratorProviders.get(1).getEffectSegments(vibrationId));
+        assertEquals(Arrays.asList(expectedOneShot(80)),
+                mVibratorProviders.get(2).getEffectSegments(vibrationId));
+        assertEquals(Arrays.asList(expectedOneShot(60)),
+                mVibratorProviders.get(3).getEffectSegments(vibrationId));
+        assertEquals(expectedAmplitudes(1, 2, 3), mVibratorProviders.get(1).getAmplitudes());
+        assertEquals(expectedAmplitudes(4, 5), mVibratorProviders.get(2).getAmplitudes());
+        assertEquals(expectedAmplitudes(6), mVibratorProviders.get(3).getAmplitudes());
+    }
+
+    @LargeTest
+    @Test
+    public void vibrate_withWaveform_totalVibrationTimeRespected() {
+        int totalDuration = 10_000; // 10s
+        int stepDuration = 25; // 25ms
+
+        // 25% of the first waveform step will be spent on the native on() call.
+        // 25% of each waveform step will be spent on the native setAmplitude() call..
+        mVibratorProviders.get(VIBRATOR_ID).setOnLatency(stepDuration / 4);
+        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        int stepCount = totalDuration / stepDuration;
+        long[] timings = new long[stepCount];
+        int[] amplitudes = new int[stepCount];
+        Arrays.fill(timings, stepDuration);
+        Arrays.fill(amplitudes, VibrationEffect.DEFAULT_AMPLITUDE);
+        VibrationEffect effect = VibrationEffect.createWaveform(timings, amplitudes, -1);
+
+        startThreadAndDispatcher(effect);
+        long startTime = SystemClock.elapsedRealtime();
+
+        waitForCompletion(totalDuration + TEST_TIMEOUT_MILLIS);
+        long delay = Math.abs(SystemClock.elapsedRealtime() - startTime - totalDuration);
+
+        // Allow some delay for thread scheduling and callback triggering.
+        int maxDelay = (int) (0.05 * totalDuration); // < 5% of total duration
+        assertTrue("Waveform with perceived delay of " + delay + "ms,"
+                        + " expected less than " + maxDelay + "ms",
+                delay < maxDelay);
+    }
+
+    @LargeTest
+    @Test
+    public void vibrate_cancelSlowVibrator_cancelIsNotBlockedByVibrationThread() throws Exception {
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+
+        long latency = 5_000; // 5s
+        fakeVibrator.setOnLatency(latency);
+
+        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+        long vibrationId = startThreadAndDispatcher(effect);
+
+        assertTrue(waitUntil(() -> !fakeVibrator.getEffectSegments(vibrationId).isEmpty(),
+                TEST_TIMEOUT_MILLIS));
+        assertTrue(mThread.isRunningVibrationId(vibrationId));
+
+        // Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
+        // fail at waitForCompletion(cancellingThread).
+        Thread cancellingThread = new Thread(
+                () -> mVibrationConductor.notifyCancelled(
+                        new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
+                        /* immediate= */ false));
+        cancellingThread.start();
+
+        // Cancelling the vibration should be fast and return right away, even if the thread is
+        // stuck at the slow call to the vibrator.
+        cancellingThread.join(/* timeout= */ 50);
+
+        // After the vibrator call ends the vibration is cancelled and the vibrator is turned off.
+        waitForCompletion(/* timeout= */ latency + TEST_TIMEOUT_MILLIS);
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_USER);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+    }
+
+    @Test
+    public void vibrate_multiplePredefinedCancel_cancelsVibrationImmediately() throws Exception {
+        mockVibrators(1, 2);
+        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        mVibratorProviders.get(2).setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK);
+
+        CombinedVibration effect = CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addVibrator(2, VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 100)
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 100)
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, 100)
+                        .compose())
+                .combine();
+        long vibrationId = startThreadAndDispatcher(effect);
+
+        assertTrue(waitUntil(() -> mControllers.get(2).isVibrating(),
+                TEST_TIMEOUT_MILLIS));
+        assertTrue(mThread.isRunningVibrationId(vibrationId));
+
+        // Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
+        // fail at waitForCompletion(vibrationThread) if the vibration not cancelled immediately.
+        Thread cancellingThread = new Thread(
+                () -> mVibrationConductor.notifyCancelled(
+                        new Vibration.EndInfo(
+                                Vibration.Status.CANCELLED_BY_SCREEN_OFF),
+                        /* immediate= */ false));
+        cancellingThread.start();
+
+        waitForCompletion(/* timeout= */ 50);
+        cancellingThread.join();
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_SCREEN_OFF);
+        assertFalse(mControllers.get(1).isVibrating());
+        assertFalse(mControllers.get(2).isVibrating());
+    }
+
+    @Test
+    public void vibrate_multipleWaveformCancel_cancelsVibrationImmediately() throws Exception {
+        mockVibrators(1, 2);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        CombinedVibration effect = CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.createWaveform(
+                        new long[]{100, 100}, new int[]{1, 2}, 0))
+                .addVibrator(2, VibrationEffect.createOneShot(100, 100))
+                .combine();
+        long vibrationId = startThreadAndDispatcher(effect);
+
+        assertTrue(waitUntil(() -> mControllers.get(1).isVibrating()
+                        && mControllers.get(2).isVibrating(),
+                TEST_TIMEOUT_MILLIS));
+        assertTrue(mThread.isRunningVibrationId(vibrationId));
+
+        // Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
+        // fail at waitForCompletion(vibrationThread) if the vibration not cancelled immediately.
+        Thread cancellingThread = new Thread(
+                () -> mVibrationConductor.notifyCancelled(
+                        new Vibration.EndInfo(
+                                Vibration.Status.CANCELLED_BY_SCREEN_OFF),
+                        /* immediate= */ false));
+        cancellingThread.start();
+
+        waitForCompletion(/* timeout= */ 50);
+        cancellingThread.join();
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_SCREEN_OFF);
+        assertFalse(mControllers.get(1).isVibrating());
+        assertFalse(mControllers.get(2).isVibrating());
+    }
+
+    @Test
+    public void vibrate_binderDied_cancelsVibration() throws Exception {
+        VibrationEffect effect = VibrationEffect.createWaveform(new long[]{5}, new int[]{100}, 0);
+        long vibrationId = startThreadAndDispatcher(effect);
+
+        assertTrue(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
+                TEST_TIMEOUT_MILLIS));
+        assertTrue(mThread.isRunningVibrationId(vibrationId));
+
+        mVibrationConductor.binderDied();
+        waitForCompletion();
+
+        verify(mVibrationToken).linkToDeath(same(mVibrationConductor), eq(0));
+        verify(mVibrationToken).unlinkToDeath(same(mVibrationConductor), eq(0));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BINDER_DIED);
+        assertFalse(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId).isEmpty());
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+    }
+
+    @Test
+    public void vibrate_waveformWithRampDown_addsRampDownAfterVibrationCompleted() {
+        when(mVibrationConfigMock.getRampDownDurationMs()).thenReturn(15);
+        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                new long[]{5, 5, 5}, new int[]{60, 120, 240}, -1);
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+
+        // Duration extended for 5 + 5 + 5 + 15.
+        assertEquals(Arrays.asList(expectedOneShot(30)),
+                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
+        List<Float> amplitudes = mVibratorProviders.get(VIBRATOR_ID).getAmplitudes();
+        assertTrue(amplitudes.size() > 3);
+        assertEquals(expectedAmplitudes(60, 120, 240), amplitudes.subList(0, 3));
+        for (int i = 3; i < amplitudes.size(); i++) {
+            assertTrue(amplitudes.get(i) < amplitudes.get(i - 1));
+        }
+    }
+
+    @Test
+    public void vibrate_waveformWithRampDown_triggersCallbackWhenOriginalVibrationEnds() {
+        when(mVibrationConfigMock.getRampDownDurationMs()).thenReturn(10_000);
+        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        VibrationEffect effect = VibrationEffect.createOneShot(10, 200);
+        long vibrationId = startThreadAndDispatcher(effect);
+
+        // Vibration completed but vibrator not yet released.
+        verify(mManagerHooks, timeout(TEST_TIMEOUT_MILLIS)).onVibrationCompleted(eq(vibrationId),
+                eq(new Vibration.EndInfo(Vibration.Status.FINISHED)));
+        verify(mManagerHooks, never()).onVibrationThreadReleased(anyLong());
+
+        // Thread still running ramp down.
+        assertTrue(mThread.isRunningVibrationId(vibrationId));
+
+        // Duration extended for 10 + 10000.
+        assertEquals(Arrays.asList(expectedOneShot(10_010)),
+                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
+
+        // Will stop the ramp down right away.
+        mVibrationConductor.notifyCancelled(
+                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_SETTINGS_UPDATE),
+                /* immediate= */ true);
+        waitForCompletion();
+
+        // Does not cancel already finished vibration, but releases vibrator.
+        verify(mManagerHooks, never()).onVibrationCompleted(eq(vibrationId),
+                eq(new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_SETTINGS_UPDATE)));
+        verify(mManagerHooks).onVibrationThreadReleased(vibrationId);
+    }
+
+    @Test
+    public void vibrate_waveformCancelledWithRampDown_addsRampDownAfterVibrationCancelled()
+            throws Exception {
+        when(mVibrationConfigMock.getRampDownDurationMs()).thenReturn(15);
+        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        VibrationEffect effect = VibrationEffect.createOneShot(10_000, 240);
+        long vibrationId = startThreadAndDispatcher(effect);
+        assertTrue(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
+                TEST_TIMEOUT_MILLIS));
+        mVibrationConductor.notifyCancelled(
+                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
+                /* immediate= */ false);
+        waitForCompletion();
+
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.CANCELLED_BY_USER);
+
+        // Duration extended for 10000 + 15.
+        assertEquals(Arrays.asList(expectedOneShot(10_015)),
+                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
+        List<Float> amplitudes = mVibratorProviders.get(VIBRATOR_ID).getAmplitudes();
+        assertTrue(amplitudes.size() > 1);
+        for (int i = 1; i < amplitudes.size(); i++) {
+            assertTrue(amplitudes.get(i) < amplitudes.get(i - 1));
+        }
+    }
+
+    @Test
+    public void vibrate_predefinedWithRampDown_doesNotAddRampDown() {
+        when(mVibrationConfigMock.getRampDownDurationMs()).thenReturn(15);
+        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        mVibratorProviders.get(VIBRATOR_ID).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+
+        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+
+        assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
+                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
+        assertTrue(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes().isEmpty());
+    }
+
+    @Test
+    public void vibrate_composedWithRampDown_doesNotAddRampDown() {
+        when(mVibrationConfigMock.getRampDownDurationMs()).thenReturn(15);
+        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL,
+                IVibrator.CAP_COMPOSE_EFFECTS);
+        mVibratorProviders.get(VIBRATOR_ID).setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK);
+
+        VibrationEffect effect = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                .compose();
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+
+        assertEquals(
+                Arrays.asList(expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0)),
+                mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibrationId));
+        assertTrue(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes().isEmpty());
+    }
+
+    @Test
+    public void vibrate_pwleWithRampDown_doesNotAddRampDown() {
+        when(mVibrationConfigMock.getRampDownDurationMs()).thenReturn(15);
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL,
+                IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
+        fakeVibrator.setMinFrequency(100);
+        fakeVibrator.setResonantFrequency(150);
+        fakeVibrator.setFrequencyResolution(50);
+        fakeVibrator.setMaxAmplitudes(1, 1, 1);
+        fakeVibrator.setPwleSizeMax(2);
+
+        VibrationEffect effect = VibrationEffect.startWaveform()
+                .addTransition(Duration.ofMillis(1), targetAmplitude(1))
+                .build();
+        long vibrationId = startThreadAndDispatcher(effect);
+        waitForCompletion();
+
+        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId));
+        verifyCallbacksTriggered(vibrationId, Vibration.Status.FINISHED);
+
+        assertEquals(Arrays.asList(expectedRamp(0, 1, 150, 150, 1)),
+                fakeVibrator.getEffectSegments(vibrationId));
+        assertTrue(fakeVibrator.getAmplitudes().isEmpty());
+    }
+
+    @Test
+    public void vibrate_multipleVibrations_withCancel() throws Exception {
+        mVibratorProviders.get(VIBRATOR_ID).setSupportedEffects(
+                VibrationEffect.EFFECT_CLICK, VibrationEffect.EFFECT_TICK);
+        mVibratorProviders.get(VIBRATOR_ID).setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK);
+        mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL,
+                IVibrator.CAP_COMPOSE_EFFECTS);
+
+        // A simple effect, followed by a repeating effect that gets cancelled, followed by another
+        // simple effect.
+        VibrationEffect effect1 = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+        VibrationEffect effect2 = VibrationEffect.startComposition()
+                .repeatEffectIndefinitely(VibrationEffect.get(VibrationEffect.EFFECT_TICK))
+                .compose();
+        VibrationEffect effect3 = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                .compose();
+        VibrationEffect effect4 = VibrationEffect.createOneShot(8000, 100);
+        VibrationEffect effect5 = VibrationEffect.createOneShot(20, 222);
+
+        long vibrationId1 = startThreadAndDispatcher(effect1);
+        waitForCompletion();
+        verify(mControllerCallbacks).onComplete(VIBRATOR_ID, vibrationId1);
+        verifyCallbacksTriggered(vibrationId1, Vibration.Status.FINISHED);
+
+        long vibrationId2 = startThreadAndDispatcher(effect2);
+        // Effect2 won't complete on its own. Cancel it after a couple of repeats.
+        Thread.sleep(150);  // More than two TICKs.
+        mVibrationConductor.notifyCancelled(
+                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_USER),
+                /* immediate= */ false);
+        waitForCompletion();
+
+        long vibrationId3 = startThreadAndDispatcher(effect3);
+        waitForCompletion();
+
+        // Effect4 is a long oneshot, but it gets cancelled as fast as possible.
+        long start4 = System.currentTimeMillis();
+        long vibrationId4 = startThreadAndDispatcher(effect4);
+        mVibrationConductor.notifyCancelled(
+                new Vibration.EndInfo(Vibration.Status.CANCELLED_BY_SCREEN_OFF),
+                /* immediate= */ true);
+        waitForCompletion();
+        long duration4 = System.currentTimeMillis() - start4;
+
+        // Effect5 is to show that things keep going after the immediate cancel.
+        long vibrationId5 = startThreadAndDispatcher(effect5);
+        waitForCompletion();
+
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
+        assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+
+        // Effect1
+        verify(mControllerCallbacks).onComplete(VIBRATOR_ID, vibrationId1);
+        verifyCallbacksTriggered(vibrationId1, Vibration.Status.FINISHED);
+
+        assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
+                fakeVibrator.getEffectSegments(vibrationId1));
+
+        // Effect2: repeating, cancelled.
+        verify(mControllerCallbacks, atLeast(2)).onComplete(VIBRATOR_ID, vibrationId2);
+        verifyCallbacksTriggered(vibrationId2, Vibration.Status.CANCELLED_BY_USER);
+
+        // The exact count of segments might vary, so just check that there's more than 2 and
+        // all elements are the same segment.
+        List<VibrationEffectSegment> actualSegments2 = fakeVibrator.getEffectSegments(vibrationId2);
+        assertTrue(actualSegments2.size() + " > 2", actualSegments2.size() > 2);
+        for (VibrationEffectSegment segment : actualSegments2) {
+            assertEquals(expectedPrebaked(VibrationEffect.EFFECT_TICK), segment);
+        }
+
+        // Effect3
+        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId3));
+        verifyCallbacksTriggered(vibrationId3, Vibration.Status.FINISHED);
+        assertEquals(Arrays.asList(
+                        expectedPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 0)),
+                fakeVibrator.getEffectSegments(vibrationId3));
+
+        // Effect4: cancelled quickly.
+        verifyCallbacksTriggered(vibrationId4, Vibration.Status.CANCELLED_BY_SCREEN_OFF);
+        assertTrue("Tested duration=" + duration4, duration4 < 2000);
+
+        // Effect5: normal oneshot. Don't worry about amplitude, as effect4 may or may not have
+        // started.
+
+        verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibrationId5));
+        verifyCallbacksTriggered(vibrationId5, Vibration.Status.FINISHED);
+
+        assertEquals(Arrays.asList(expectedOneShot(20)),
+                fakeVibrator.getEffectSegments(vibrationId5));
+    }
+
+    private void mockVibrators(int... vibratorIds) {
+        for (int vibratorId : vibratorIds) {
+            mVibratorProviders.put(vibratorId,
+                    new FakeVibratorControllerProvider(mTestLooper.getLooper()));
+        }
+    }
+
+    private long startThreadAndDispatcher(VibrationEffect effect) {
+        return startThreadAndDispatcher(CombinedVibration.createParallel(effect));
+    }
+
+    private long startThreadAndDispatcher(CombinedVibration effect) {
+        return startThreadAndDispatcher(createVibration(effect));
+    }
+
+    private long startThreadAndDispatcher(HalVibration vib) {
+        mControllers = createVibratorControllers();
+        DeviceAdapter deviceAdapter = new DeviceAdapter(mVibrationSettings, mControllers);
+        mVibrationConductor =
+                new VibrationStepConductor(vib, mVibrationSettings, deviceAdapter, mManagerHooks);
+        assertTrue(mThread.runVibrationOnVibrationThread(mVibrationConductor));
+        return mVibrationConductor.getVibration().id;
+    }
+
+    private boolean waitUntil(BooleanSupplier predicate, long timeout)
+            throws InterruptedException {
+        long timeoutTimestamp = SystemClock.uptimeMillis() + timeout;
+        boolean predicateResult = false;
+        while (!predicateResult && SystemClock.uptimeMillis() < timeoutTimestamp) {
+            Thread.sleep(10);
+            predicateResult = predicate.getAsBoolean();
+        }
+        return predicateResult;
+    }
+
+    private void waitForCompletion() {
+        waitForCompletion(TEST_TIMEOUT_MILLIS);
+    }
+
+    private void waitForCompletion(long timeout) {
+        assertTrue("Timed out waiting for VibrationThread to become idle",
+                mThread.waitForThreadIdle(timeout));
+        mTestLooper.dispatchAll();  // Flush callbacks
+    }
+
+    private HalVibration createVibration(CombinedVibration effect) {
+        return new HalVibration(mVibrationToken, effect,
+                new Vibration.CallerInfo(ATTRS, UID, DISPLAY_ID, PACKAGE_NAME, "reason"));
+    }
+
+    private SparseArray<VibratorController> createVibratorControllers() {
+        SparseArray<VibratorController> array = new SparseArray<>();
+        for (Map.Entry<Integer, FakeVibratorControllerProvider> e : mVibratorProviders.entrySet()) {
+            int id = e.getKey();
+            array.put(id, e.getValue().newVibratorController(id, mControllerCallbacks));
+        }
+        // Start a looper for the vibrationcontrollers if it's not already running.
+        // TestLooper.AutoDispatchThread has a fixed 1s duration. Use a custom auto-dispatcher.
+        if (mCustomTestLooperDispatcher == null) {
+            mCustomTestLooperDispatcher = new TestLooperAutoDispatcher(mTestLooper);
+            mCustomTestLooperDispatcher.start();
+        }
+        return array;
+    }
+
+    private VibrationEffectSegment expectedOneShot(long millis) {
+        return new StepSegment(VibrationEffect.DEFAULT_AMPLITUDE,
+                /* frequencyHz= */ 0, (int) millis);
+    }
+
+    private List<VibrationEffectSegment> expectedOneShots(long... millis) {
+        return Arrays.stream(millis)
+                .mapToObj(this::expectedOneShot)
+                .collect(Collectors.toList());
+    }
+
+    private VibrationEffectSegment expectedPrebaked(int effectId) {
+        return new PrebakedSegment(effectId, false, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+    }
+
+    private VibrationEffectSegment expectedPrimitive(int primitiveId, float scale, int delay) {
+        return new PrimitiveSegment(primitiveId, scale, delay);
+    }
+
+    private VibrationEffectSegment expectedRamp(float amplitude, float frequencyHz, int duration) {
+        return expectedRamp(amplitude, amplitude, frequencyHz, frequencyHz, duration);
+    }
+
+    private VibrationEffectSegment expectedRamp(float startAmplitude, float endAmplitude,
+            float startFrequencyHz, float endFrequencyHz, int duration) {
+        return new RampSegment(startAmplitude, endAmplitude, startFrequencyHz, endFrequencyHz,
+                duration);
+    }
+
+    private List<Float> expectedAmplitudes(int... amplitudes) {
+        return Arrays.stream(amplitudes)
+                .mapToObj(amplitude -> amplitude / 255f)
+                .collect(Collectors.toList());
+    }
+
+    private void verifyCallbacksTriggered(long vibrationId, Vibration.Status expectedStatus) {
+        verifyCallbacksTriggered(vibrationId, new Vibration.EndInfo(expectedStatus));
+    }
+
+    private void verifyCallbacksTriggered(long vibrationId, Vibration.EndInfo expectedEndInfo) {
+        verify(mManagerHooks).onVibrationCompleted(eq(vibrationId), eq(expectedEndInfo));
+        verify(mManagerHooks).onVibrationThreadReleased(vibrationId);
+    }
+
+    private static final class TestLooperAutoDispatcher extends Thread {
+        private final TestLooper mTestLooper;
+        private boolean mCancelled;
+
+        TestLooperAutoDispatcher(TestLooper testLooper) {
+            mTestLooper = testLooper;
+        }
+
+        @Override
+        public void run() {
+            while (!mCancelled) {
+                mTestLooper.dispatchAll();
+                try {
+                    Thread.sleep(10);
+                } catch (InterruptedException e) {
+                    return;
+                }
+            }
+        }
+
+        public void cancel() {
+            mCancelled = true;
+        }
+    }
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/VibratorControllerTest.java b/services/tests/vibrator/src/com/android/server/vibrator/VibratorControllerTest.java
new file mode 100644
index 0000000..0d13be6
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/VibratorControllerTest.java
@@ -0,0 +1,319 @@
+/*
+ * 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.server.vibrator;
+
+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.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.notNull;
+import static org.mockito.Mockito.inOrder;
+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.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import android.content.ContentResolver;
+import android.content.ContextWrapper;
+import android.hardware.vibrator.Braking;
+import android.hardware.vibrator.IVibrator;
+import android.os.IBinder;
+import android.os.IVibratorStateListener;
+import android.os.VibrationEffect;
+import android.os.VibratorInfo;
+import android.os.test.TestLooper;
+import android.os.vibrator.PrebakedSegment;
+import android.os.vibrator.PrimitiveSegment;
+import android.os.vibrator.RampSegment;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.util.test.FakeSettingsProvider;
+import com.android.internal.util.test.FakeSettingsProviderRule;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.InOrder;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+public class VibratorControllerTest {
+    private static final int VIBRATOR_ID = 0;
+
+    @Rule public MockitoRule rule = MockitoJUnit.rule();
+    @Rule public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule();
+
+    @Mock private VibratorController.OnVibrationCompleteListener mOnCompleteListenerMock;
+    @Mock private VibratorController.NativeWrapper mNativeWrapperMock;
+    @Mock private IVibratorStateListener mVibratorStateListenerMock;
+    @Mock private IBinder mVibratorStateListenerBinderMock;
+
+    private TestLooper mTestLooper;
+    private ContextWrapper mContextSpy;
+
+    @Before
+    public void setUp() throws Exception {
+        mTestLooper = new TestLooper();
+        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
+
+        ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy);
+        when(mContextSpy.getContentResolver()).thenReturn(contentResolver);
+        when(mVibratorStateListenerMock.asBinder()).thenReturn(mVibratorStateListenerBinderMock);
+        mockVibratorCapabilities(0);
+    }
+
+    private VibratorController createController() {
+        return new VibratorController(VIBRATOR_ID, mOnCompleteListenerMock, mNativeWrapperMock);
+    }
+
+    @Test
+    public void createController_initializesNativeWrapper() {
+        VibratorController controller = createController();
+        assertEquals(VIBRATOR_ID, controller.getVibratorInfo().getId());
+        verify(mNativeWrapperMock).init(eq(VIBRATOR_ID), notNull());
+    }
+
+    @Test
+    public void isAvailable_withVibratorHalPresent_returnsTrue() {
+        when(mNativeWrapperMock.isAvailable()).thenReturn(true);
+        assertTrue(createController().isAvailable());
+    }
+
+    @Test
+    public void isAvailable_withNoVibratorHalPresent_returnsFalse() {
+        when(mNativeWrapperMock.isAvailable()).thenReturn(false);
+        assertFalse(createController().isAvailable());
+    }
+
+    @Test
+    public void hasCapability_withSupport_returnsTrue() {
+        mockVibratorCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        assertTrue(createController().hasCapability(IVibrator.CAP_AMPLITUDE_CONTROL));
+    }
+
+    @Test
+    public void hasCapability_withNoSupport_returnsFalse() {
+        assertFalse(createController().hasCapability(IVibrator.CAP_ALWAYS_ON_CONTROL));
+        assertFalse(createController().hasCapability(IVibrator.CAP_AMPLITUDE_CONTROL));
+        assertFalse(createController().hasCapability(IVibrator.CAP_COMPOSE_EFFECTS));
+        assertFalse(createController().hasCapability(IVibrator.CAP_EXTERNAL_CONTROL));
+        assertFalse(createController().hasCapability(IVibrator.CAP_ON_CALLBACK));
+    }
+
+    @Test
+    public void setExternalControl_withCapability_enablesExternalControl() {
+        mockVibratorCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
+        VibratorController controller = createController();
+        assertFalse(controller.isUnderExternalControl());
+
+        controller.setExternalControl(true);
+        assertTrue(controller.isUnderExternalControl());
+
+        controller.setExternalControl(false);
+        assertFalse(controller.isUnderExternalControl());
+
+        InOrder inOrderVerifier = inOrder(mNativeWrapperMock);
+        inOrderVerifier.verify(mNativeWrapperMock).setExternalControl(eq(true));
+        inOrderVerifier.verify(mNativeWrapperMock).setExternalControl(eq(false));
+    }
+
+    @Test
+    public void setExternalControl_withNoCapability_ignoresExternalControl() {
+        VibratorController controller = createController();
+        assertFalse(controller.isUnderExternalControl());
+
+        controller.setExternalControl(true);
+        assertFalse(controller.isUnderExternalControl());
+
+        verify(mNativeWrapperMock, never()).setExternalControl(anyBoolean());
+    }
+
+    @Test
+    public void updateAlwaysOn_withCapability_enablesAlwaysOnEffect() {
+        mockVibratorCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
+        PrebakedSegment prebaked = createPrebaked(VibrationEffect.EFFECT_CLICK,
+                VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+        createController().updateAlwaysOn(1, prebaked);
+
+        verify(mNativeWrapperMock).alwaysOnEnable(
+                eq(1L), eq((long) VibrationEffect.EFFECT_CLICK),
+                eq((long) VibrationEffect.EFFECT_STRENGTH_MEDIUM));
+    }
+
+    @Test
+    public void updateAlwaysOn_withNullEffect_disablesAlwaysOnEffect() {
+        mockVibratorCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
+        createController().updateAlwaysOn(1, null);
+        verify(mNativeWrapperMock).alwaysOnDisable(eq(1L));
+    }
+
+    @Test
+    public void updateAlwaysOn_withoutCapability_ignoresEffect() {
+        PrebakedSegment prebaked = createPrebaked(VibrationEffect.EFFECT_CLICK,
+                VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+        createController().updateAlwaysOn(1, prebaked);
+
+        verify(mNativeWrapperMock, never()).alwaysOnDisable(anyLong());
+        verify(mNativeWrapperMock, never()).alwaysOnEnable(anyLong(), anyLong(), anyLong());
+    }
+
+    @Test
+    public void on_withDuration_turnsVibratorOn() {
+        when(mNativeWrapperMock.on(anyLong(), anyLong())).thenAnswer(args -> args.getArgument(0));
+        VibratorController controller = createController();
+        controller.on(100, 10);
+
+        assertTrue(controller.isVibrating());
+        verify(mNativeWrapperMock).on(eq(100L), eq(10L));
+    }
+
+    @Test
+    public void on_withPrebaked_performsEffect() {
+        when(mNativeWrapperMock.perform(anyLong(), anyLong(), anyLong())).thenReturn(10L);
+        VibratorController controller = createController();
+
+        PrebakedSegment prebaked = createPrebaked(VibrationEffect.EFFECT_CLICK,
+                VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+        assertEquals(10L, controller.on(prebaked, 11));
+
+        assertTrue(controller.isVibrating());
+        verify(mNativeWrapperMock).perform(eq((long) VibrationEffect.EFFECT_CLICK),
+                eq((long) VibrationEffect.EFFECT_STRENGTH_MEDIUM), eq(11L));
+    }
+
+    @Test
+    public void on_withComposed_performsEffect() {
+        mockVibratorCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        when(mNativeWrapperMock.compose(any(), anyLong())).thenReturn(15L);
+        VibratorController controller = createController();
+
+        PrimitiveSegment[] primitives = new PrimitiveSegment[]{
+                new PrimitiveSegment(VibrationEffect.Composition.PRIMITIVE_CLICK, 0.5f, 10)
+        };
+        assertEquals(15L, controller.on(primitives, 12));
+
+        assertTrue(controller.isVibrating());
+        verify(mNativeWrapperMock).compose(eq(primitives), eq(12L));
+    }
+
+    @Test
+    public void on_withComposedPwle_performsEffect() {
+        mockVibratorCapabilities(IVibrator.CAP_COMPOSE_PWLE_EFFECTS);
+        when(mNativeWrapperMock.composePwle(any(), anyInt(), anyLong())).thenReturn(15L);
+        VibratorController controller = createController();
+
+        RampSegment[] primitives = new RampSegment[]{
+                new RampSegment(/* startAmplitude= */ 0, /* endAmplitude= */ 1,
+                        /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 200, /* duration= */ 10)
+        };
+        assertEquals(15L, controller.on(primitives, 12));
+        assertTrue(controller.isVibrating());
+
+        verify(mNativeWrapperMock).composePwle(eq(primitives), eq(Braking.NONE), eq(12L));
+    }
+
+    @Test
+    public void off_turnsOffVibrator() {
+        when(mNativeWrapperMock.on(anyLong(), anyLong())).thenAnswer(args -> args.getArgument(0));
+        VibratorController controller = createController();
+
+        controller.on(100, 1);
+        assertTrue(controller.isVibrating());
+
+        controller.off();
+        controller.off();
+        assertFalse(controller.isVibrating());
+        verify(mNativeWrapperMock, times(2)).off();
+    }
+
+    @Test
+    public void reset_turnsOffVibratorAndDisablesExternalControl() {
+        mockVibratorCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
+        when(mNativeWrapperMock.on(anyLong(), anyLong())).thenAnswer(args -> args.getArgument(0));
+        VibratorController controller = createController();
+
+        controller.on(100, 1);
+        assertTrue(controller.isVibrating());
+
+        controller.reset();
+        assertFalse(controller.isVibrating());
+        verify(mNativeWrapperMock).setExternalControl(eq(false));
+        verify(mNativeWrapperMock).off();
+    }
+
+    @Test
+    public void registerVibratorStateListener_callbacksAreTriggered() throws Exception {
+        when(mNativeWrapperMock.on(anyLong(), anyLong())).thenAnswer(args -> args.getArgument(0));
+        VibratorController controller = createController();
+
+        controller.registerVibratorStateListener(mVibratorStateListenerMock);
+        controller.on(10, 1);
+        controller.on(100, 2);
+        controller.off();
+        controller.off();
+
+        InOrder inOrderVerifier = inOrder(mVibratorStateListenerMock);
+        // First notification done when listener is registered.
+        inOrderVerifier.verify(mVibratorStateListenerMock).onVibrating(false);
+        inOrderVerifier.verify(mVibratorStateListenerMock).onVibrating(eq(true));
+        inOrderVerifier.verify(mVibratorStateListenerMock).onVibrating(eq(false));
+        inOrderVerifier.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void unregisterVibratorStateListener_callbackNotTriggeredAfter() throws Exception {
+        when(mNativeWrapperMock.on(anyLong(), anyLong())).thenAnswer(args -> args.getArgument(0));
+        VibratorController controller = createController();
+
+        controller.registerVibratorStateListener(mVibratorStateListenerMock);
+        verify(mVibratorStateListenerMock).onVibrating(false);
+
+        controller.on(10, 1);
+        verify(mVibratorStateListenerMock).onVibrating(true);
+
+        controller.unregisterVibratorStateListener(mVibratorStateListenerMock);
+        Mockito.clearInvocations(mVibratorStateListenerMock);
+
+        controller.on(10, 1);
+        verifyNoMoreInteractions(mVibratorStateListenerMock);
+    }
+
+    private void mockVibratorCapabilities(int capabilities) {
+        VibratorInfo.FrequencyProfile frequencyProfile = new VibratorInfo.FrequencyProfile(
+                Float.NaN, Float.NaN, Float.NaN, null);
+        when(mNativeWrapperMock.getInfo(any(VibratorInfo.Builder.class)))
+                .then(invocation -> {
+                    ((VibratorInfo.Builder) invocation.getArgument(0))
+                            .setCapabilities(capabilities)
+                            .setFrequencyProfile(frequencyProfile);
+                    return true;
+                });
+    }
+
+    private PrebakedSegment createPrebaked(int effectId, int effectStrength) {
+        return new PrebakedSegment(effectId, /* shouldFallback= */ false, effectStrength);
+    }
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/VibratorFrameworkStatsLoggerTest.java b/services/tests/vibrator/src/com/android/server/vibrator/VibratorFrameworkStatsLoggerTest.java
new file mode 100644
index 0000000..3466bbb
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/VibratorFrameworkStatsLoggerTest.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.vibrator;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.os.Handler;
+import android.os.test.TestLooper;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+public class VibratorFrameworkStatsLoggerTest {
+
+    @Rule public MockitoRule rule = MockitoJUnit.rule();
+
+    private TestLooper mTestLooper;
+    private VibratorFrameworkStatsLogger mLogger;
+
+    @Before
+    public void setUp() {
+        mTestLooper = new TestLooper();
+    }
+
+    @Test
+    public void writeVibrationReportedAsync_afterMinInterval_writesRightAway() {
+        setUpLogger(/* minIntervalMillis= */ 10, /* queueMaxSize= */ 10);
+
+        VibrationStats.StatsInfo firstStats = newEmptyStatsInfo();
+        assertFalse(firstStats.isWritten());
+
+        mLogger.writeVibrationReportedAsync(firstStats);
+        mTestLooper.dispatchAll();
+        assertTrue(firstStats.isWritten());
+    }
+
+    @Test
+    public void writeVibrationReportedAsync_rightAfterLogging_schedulesToRunAfterRemainingDelay() {
+        setUpLogger(/* minIntervalMillis= */ 100, /* queueMaxSize= */ 10);
+
+        VibrationStats.StatsInfo firstStats = newEmptyStatsInfo();
+        VibrationStats.StatsInfo secondStats = newEmptyStatsInfo();
+        assertFalse(firstStats.isWritten());
+        assertFalse(secondStats.isWritten());
+
+        // Write first message at current SystemClock.uptimeMillis
+        mLogger.writeVibrationReportedAsync(firstStats);
+        mTestLooper.dispatchAll();
+        assertTrue(firstStats.isWritten());
+
+        // Second message is not written right away, it needs to wait the configured interval.
+        mLogger.writeVibrationReportedAsync(secondStats);
+        mTestLooper.dispatchAll();
+        assertFalse(secondStats.isWritten());
+
+        // Second message is written after delay passes.
+        mTestLooper.moveTimeForward(100);
+        mTestLooper.dispatchAll();
+        assertTrue(secondStats.isWritten());
+    }
+
+    @Test
+    public void writeVibrationReportedAsync_tooFast_logsUsingIntervalAndDropsMessagesFromQueue() {
+        setUpLogger(/* minIntervalMillis= */ 100, /* queueMaxSize= */ 2);
+
+        VibrationStats.StatsInfo firstStats = newEmptyStatsInfo();
+        VibrationStats.StatsInfo secondStats = newEmptyStatsInfo();
+        VibrationStats.StatsInfo thirdStats = newEmptyStatsInfo();
+
+        mLogger.writeVibrationReportedAsync(firstStats);
+        mLogger.writeVibrationReportedAsync(secondStats);
+        mLogger.writeVibrationReportedAsync(thirdStats);
+
+        // Only first message is logged.
+        mTestLooper.dispatchAll();
+        assertTrue(firstStats.isWritten());
+        assertFalse(secondStats.isWritten());
+        assertFalse(thirdStats.isWritten());
+
+        // Wait one interval to check only the second one is logged.
+        mTestLooper.moveTimeForward(100);
+        mTestLooper.dispatchAll();
+        assertTrue(secondStats.isWritten());
+        assertFalse(thirdStats.isWritten());
+
+        // Wait a long interval to check the third one was dropped and will never be logged.
+        mTestLooper.moveTimeForward(1_000);
+        mTestLooper.dispatchAll();
+        assertFalse(thirdStats.isWritten());
+    }
+
+    private void setUpLogger(int minIntervalMillis, int queueMaxSize) {
+        mLogger = new VibratorFrameworkStatsLogger(new Handler(mTestLooper.getLooper()),
+                minIntervalMillis, queueMaxSize);
+    }
+
+    private static VibrationStats.StatsInfo newEmptyStatsInfo() {
+        return new VibrationStats.StatsInfo(
+                0, 0, 0, Vibration.Status.FINISHED, new VibrationStats(), 0L);
+    }
+}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/VibratorManagerServiceTest.java b/services/tests/vibrator/src/com/android/server/vibrator/VibratorManagerServiceTest.java
new file mode 100644
index 0000000..4e3a893
--- /dev/null
+++ b/services/tests/vibrator/src/com/android/server/vibrator/VibratorManagerServiceTest.java
@@ -0,0 +1,2274 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.vibrator;
+
+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.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+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.AppOpsManager;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.pm.PackageManagerInternal;
+import android.hardware.input.IInputManager;
+import android.hardware.input.InputManager;
+import android.hardware.input.InputManagerGlobal;
+import android.hardware.vibrator.IVibrator;
+import android.hardware.vibrator.IVibratorManager;
+import android.media.AudioAttributes;
+import android.media.AudioManager;
+import android.os.CombinedVibration;
+import android.os.ExternalVibration;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.IExternalVibrationController;
+import android.os.IExternalVibratorService;
+import android.os.IVibratorStateListener;
+import android.os.Looper;
+import android.os.PowerManager;
+import android.os.PowerManagerInternal;
+import android.os.PowerSaveState;
+import android.os.Process;
+import android.os.SystemClock;
+import android.os.UserHandle;
+import android.os.VibrationAttributes;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.os.VibratorInfo;
+import android.os.test.FakeVibrator;
+import android.os.test.TestLooper;
+import android.os.vibrator.PrebakedSegment;
+import android.os.vibrator.PrimitiveSegment;
+import android.os.vibrator.StepSegment;
+import android.os.vibrator.VibrationConfig;
+import android.os.vibrator.VibrationEffectSegment;
+import android.provider.Settings;
+import android.util.ArraySet;
+import android.util.SparseBooleanArray;
+import android.view.Display;
+import android.view.InputDevice;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.internal.app.IBatteryStats;
+import com.android.internal.util.FrameworkStatsLog;
+import com.android.internal.util.test.FakeSettingsProvider;
+import com.android.internal.util.test.FakeSettingsProviderRule;
+import com.android.server.LocalServices;
+import com.android.server.companion.virtual.VirtualDeviceManagerInternal;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.InOrder;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import java.time.Duration;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Predicate;
+
+public class VibratorManagerServiceTest {
+
+    private static final int TEST_TIMEOUT_MILLIS = 1_000;
+    // Time to allow for a cancellation to complete (notably including system ramp down), but not so
+    // long that tests easily get really slow or flaky. If a vibration is close to this, it should
+    // be cancelled in the body of the individual test.
+    private static final int CLEANUP_TIMEOUT_MILLIS = 100;
+    private static final int UID = Process.ROOT_UID;
+    private static final int VIRTUAL_DISPLAY_ID = 1;
+    private static final String PACKAGE_NAME = "package";
+    private static final PowerSaveState NORMAL_POWER_STATE = new PowerSaveState.Builder().build();
+    private static final PowerSaveState LOW_POWER_STATE = new PowerSaveState.Builder()
+            .setBatterySaverEnabled(true).build();
+    private static final AudioAttributes AUDIO_ALARM_ATTRS =
+            new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_ALARM).build();
+    private static final AudioAttributes AUDIO_NOTIFICATION_ATTRS =
+            new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION).build();
+    private static final VibrationAttributes ALARM_ATTRS =
+            new VibrationAttributes.Builder().setUsage(VibrationAttributes.USAGE_ALARM).build();
+    private static final VibrationAttributes HAPTIC_FEEDBACK_ATTRS =
+            new VibrationAttributes.Builder().setUsage(VibrationAttributes.USAGE_TOUCH).build();
+    private static final VibrationAttributes NOTIFICATION_ATTRS =
+            new VibrationAttributes.Builder().setUsage(
+                    VibrationAttributes.USAGE_NOTIFICATION).build();
+    private static final VibrationAttributes RINGTONE_ATTRS =
+            new VibrationAttributes.Builder().setUsage(
+                    VibrationAttributes.USAGE_RINGTONE).build();
+    private static final VibrationAttributes UNKNOWN_ATTRS =
+            new VibrationAttributes.Builder().setUsage(VibrationAttributes.USAGE_UNKNOWN).build();
+
+    @Rule
+    public MockitoRule rule = MockitoJUnit.rule();
+    @Rule
+    public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule();
+
+    @Mock
+    private VibratorManagerService.NativeWrapper mNativeWrapperMock;
+    @Mock
+    private PackageManagerInternal mPackageManagerInternalMock;
+    @Mock
+    private PowerManagerInternal mPowerManagerInternalMock;
+    @Mock
+    private PowerSaveState mPowerSaveStateMock;
+    @Mock
+    private AppOpsManager mAppOpsManagerMock;
+    @Mock
+    private IInputManager mIInputManagerMock;
+    @Mock
+    private IBatteryStats mBatteryStatsMock;
+    @Mock
+    private VibratorFrameworkStatsLogger mVibratorFrameworkStatsLoggerMock;
+    @Mock
+    private VirtualDeviceManagerInternal mVirtualDeviceManagerInternalMock;
+    @Mock
+    private AudioManager mAudioManagerMock;
+
+    private final Map<Integer, FakeVibratorControllerProvider> mVibratorProviders = new HashMap<>();
+
+    private VibratorManagerService mService;
+    private Context mContextSpy;
+    private TestLooper mTestLooper;
+    private FakeVibrator mVibrator;
+    private PowerManagerInternal.LowPowerModeListener mRegisteredPowerModeListener;
+    private VibratorManagerService.ExternalVibratorService mExternalVibratorService;
+    private VibrationConfig mVibrationConfig;
+    private VirtualDeviceManagerInternal.VirtualDisplayListener mRegisteredVirtualDisplayListener;
+    private VirtualDeviceManagerInternal.AppsOnVirtualDeviceListener
+            mRegisteredAppsOnVirtualDeviceListener;
+    private InputManagerGlobal.TestSession mInputManagerGlobalSession;
+    private InputManager mInputManager;
+
+    @Before
+    public void setUp() throws Exception {
+        mTestLooper = new TestLooper();
+        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getContext()));
+        mInputManagerGlobalSession = InputManagerGlobal.createTestSession(mIInputManagerMock);
+        mVibrationConfig = new VibrationConfig(mContextSpy.getResources());
+
+        ContentResolver contentResolver = mSettingsProviderRule.mockContentResolver(mContextSpy);
+        when(mContextSpy.getContentResolver()).thenReturn(contentResolver);
+
+        mVibrator = new FakeVibrator(mContextSpy);
+        when(mContextSpy.getSystemService(eq(Context.VIBRATOR_SERVICE))).thenReturn(mVibrator);
+
+        mInputManager = new InputManager(mContextSpy);
+        when(mContextSpy.getSystemService(eq(Context.INPUT_SERVICE)))
+                .thenReturn(mInputManager);
+        when(mContextSpy.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(mAppOpsManagerMock);
+        when(mContextSpy.getSystemService(eq(Context.AUDIO_SERVICE))).thenReturn(mAudioManagerMock);
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[0]);
+        when(mPackageManagerInternalMock.getSystemUiServiceComponent())
+                .thenReturn(new ComponentName("", ""));
+        when(mPowerManagerInternalMock.getLowPowerState(PowerManager.ServiceType.VIBRATION))
+                .thenReturn(mPowerSaveStateMock);
+        doAnswer(invocation -> {
+            mRegisteredPowerModeListener = invocation.getArgument(0);
+            return null;
+        }).when(mPowerManagerInternalMock).registerLowPowerModeObserver(any());
+        doAnswer(invocation -> {
+            mRegisteredVirtualDisplayListener = invocation.getArgument(0);
+            return null;
+        }).when(mVirtualDeviceManagerInternalMock).registerVirtualDisplayListener(any());
+        doAnswer(invocation -> {
+            mRegisteredAppsOnVirtualDeviceListener = invocation.getArgument(0);
+            return null;
+        }).when(mVirtualDeviceManagerInternalMock).registerAppsOnVirtualDeviceListener(any());
+
+        setUserSetting(Settings.System.VIBRATE_WHEN_RINGING, 1);
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);
+        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY,
+                Vibrator.VIBRATION_INTENSITY_MEDIUM);
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
+                Vibrator.VIBRATION_INTENSITY_MEDIUM);
+        setUserSetting(Settings.System.MEDIA_VIBRATION_INTENSITY,
+                Vibrator.VIBRATION_INTENSITY_MEDIUM);
+        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY,
+                Vibrator.VIBRATION_INTENSITY_MEDIUM);
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY,
+                Vibrator.VIBRATION_INTENSITY_MEDIUM);
+        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
+        addLocalServiceMock(PackageManagerInternal.class, mPackageManagerInternalMock);
+        addLocalServiceMock(PowerManagerInternal.class, mPowerManagerInternalMock);
+        addLocalServiceMock(VirtualDeviceManagerInternal.class, mVirtualDeviceManagerInternalMock);
+
+        mTestLooper.startAutoDispatch();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        if (mService != null) {
+            // Wait until all vibrators have stopped vibrating, with a bit of flexibility for tests
+            // that just do a click or have cancelled at the end (waiting for ramp-down).
+            //
+            // Note: if a test is flaky here, check whether a VibrationEffect duration is close to
+            // CLEANUP_TIMEOUT_MILLIS - in which case it's probably best to just cancel that effect
+            // explicitly at the end of the test case (rather than letting it run and race flakily).
+            assertTrue(waitUntil(s -> {
+                for (int vibratorId : mService.getVibratorIds()) {
+                    if (s.isVibrating(vibratorId)) {
+                        return false;
+                    }
+                }
+                return true;
+            }, mService, CLEANUP_TIMEOUT_MILLIS));
+        }
+
+        LocalServices.removeServiceForTest(PackageManagerInternal.class);
+        LocalServices.removeServiceForTest(PowerManagerInternal.class);
+        // Ignore potential exceptions about the looper having never dispatched any messages.
+        mTestLooper.stopAutoDispatchAndIgnoreExceptions();
+        if (mInputManagerGlobalSession != null) {
+            mInputManagerGlobalSession.close();
+        }
+    }
+
+    private VibratorManagerService createSystemReadyService() {
+        VibratorManagerService service = createService();
+        service.systemReady();
+        return service;
+    }
+
+    private VibratorManagerService createService() {
+        mService = new VibratorManagerService(
+                mContextSpy,
+                new VibratorManagerService.Injector() {
+                    @Override
+                    VibratorManagerService.NativeWrapper getNativeWrapper() {
+                        return mNativeWrapperMock;
+                    }
+
+                    @Override
+                    Handler createHandler(Looper looper) {
+                        return new Handler(mTestLooper.getLooper());
+                    }
+
+                    @Override
+                    IBatteryStats getBatteryStatsService() {
+                        return mBatteryStatsMock;
+                    }
+
+                    @Override
+                    VibratorFrameworkStatsLogger getFrameworkStatsLogger(Handler handler) {
+                        return mVibratorFrameworkStatsLoggerMock;
+                    }
+
+                    @Override
+                    VibratorController createVibratorController(int vibratorId,
+                            VibratorController.OnVibrationCompleteListener listener) {
+                        return mVibratorProviders.get(vibratorId)
+                                .newVibratorController(vibratorId, listener);
+                    }
+
+                    @Override
+                    void addService(String name, IBinder service) {
+                        Object serviceInstance = service;
+                        mExternalVibratorService =
+                                (VibratorManagerService.ExternalVibratorService) serviceInstance;
+                    }
+                });
+        return mService;
+    }
+
+    @Test
+    public void createService_initializesNativeManagerServiceAndVibrators() {
+        mockVibrators(1, 2);
+        createService();
+        verify(mNativeWrapperMock).init(any());
+        assertTrue(mVibratorProviders.get(1).isInitialized());
+        assertTrue(mVibratorProviders.get(2).isInitialized());
+    }
+
+    @Test
+    public void createService_resetsVibrators() {
+        mockVibrators(1, 2);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
+        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
+
+        createService();
+        assertEquals(1, mVibratorProviders.get(1).getOffCount());
+        assertEquals(1, mVibratorProviders.get(2).getOffCount());
+        assertEquals(Arrays.asList(false), mVibratorProviders.get(1).getExternalControlStates());
+        assertEquals(Arrays.asList(false), mVibratorProviders.get(2).getExternalControlStates());
+    }
+
+    @Test
+    public void createService_doNotCrashIfUsedBeforeSystemReady() {
+        mockVibrators(1, 2);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
+        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
+        VibratorManagerService service = createService();
+
+        assertNotNull(service.getVibratorIds());
+        assertNotNull(service.getVibratorInfo(1));
+        assertFalse(service.isVibrating(1));
+
+        CombinedVibration effect = CombinedVibration.createParallel(
+                VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
+        vibrate(service, effect, HAPTIC_FEEDBACK_ATTRS);
+        service.cancelVibrate(VibrationAttributes.USAGE_FILTER_MATCH_ALL, service);
+
+        assertTrue(service.setAlwaysOnEffect(UID, PACKAGE_NAME, 1, effect, ALARM_ATTRS));
+
+        IVibratorStateListener listener = mockVibratorStateListener();
+        assertTrue(service.registerVibratorStateListener(1, listener));
+        assertTrue(service.unregisterVibratorStateListener(1, listener));
+    }
+
+    @Test
+    public void getVibratorIds_withNullResultFromNative_returnsEmptyArray() {
+        when(mNativeWrapperMock.getVibratorIds()).thenReturn(null);
+        assertArrayEquals(new int[0], createSystemReadyService().getVibratorIds());
+    }
+
+    @Test
+    public void getVibratorIds_withNonEmptyResultFromNative_returnsSameArray() {
+        mockVibrators(2, 1);
+        assertArrayEquals(new int[]{2, 1}, createSystemReadyService().getVibratorIds());
+    }
+
+    @Test
+    public void getVibratorInfo_withMissingVibratorId_returnsNull() {
+        mockVibrators(1);
+        assertNull(createSystemReadyService().getVibratorInfo(2));
+    }
+
+    @Test
+    public void getVibratorInfo_vibratorFailedLoadBeforeSystemReady_returnsNull() {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setVibratorInfoLoadSuccessful(false);
+        assertNull(createService().getVibratorInfo(1));
+    }
+
+    @Test
+    public void getVibratorInfo_vibratorFailedLoadAfterSystemReady_returnsInfoForVibrator() {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setVibratorInfoLoadSuccessful(false);
+        mVibratorProviders.get(1).setResonantFrequency(123.f);
+        VibratorInfo info = createSystemReadyService().getVibratorInfo(1);
+
+        assertNotNull(info);
+        assertEquals(1, info.getId());
+        assertEquals(123.f, info.getResonantFrequencyHz(), 0.01 /*tolerance*/);
+    }
+
+    @Test
+    public void getVibratorInfo_vibratorSuccessfulLoadBeforeSystemReady_returnsInfoForVibrator() {
+        mockVibrators(1);
+        FakeVibratorControllerProvider vibrator = mVibratorProviders.get(1);
+        vibrator.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS, IVibrator.CAP_AMPLITUDE_CONTROL);
+        vibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        vibrator.setSupportedPrimitives(VibrationEffect.Composition.PRIMITIVE_CLICK);
+        vibrator.setResonantFrequency(123.f);
+        vibrator.setQFactor(Float.NaN);
+        VibratorInfo info = createService().getVibratorInfo(1);
+
+        assertNotNull(info);
+        assertEquals(1, info.getId());
+        assertTrue(info.hasAmplitudeControl());
+        assertTrue(info.hasCapability(IVibrator.CAP_COMPOSE_EFFECTS));
+        assertFalse(info.hasCapability(IVibrator.CAP_ON_CALLBACK));
+        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_YES,
+                info.isEffectSupported(VibrationEffect.EFFECT_CLICK));
+        assertEquals(Vibrator.VIBRATION_EFFECT_SUPPORT_NO,
+                info.isEffectSupported(VibrationEffect.EFFECT_TICK));
+        assertTrue(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_CLICK));
+        assertFalse(info.isPrimitiveSupported(VibrationEffect.Composition.PRIMITIVE_TICK));
+        assertEquals(123.f, info.getResonantFrequencyHz(), 0.01 /*tolerance*/);
+        assertTrue(Float.isNaN(info.getQFactor()));
+    }
+
+    @Test
+    public void getVibratorInfo_vibratorFailedThenSuccessfulLoad_returnsNullThenInfo() {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setVibratorInfoLoadSuccessful(false);
+
+        VibratorManagerService service = createService();
+        assertNull(createService().getVibratorInfo(1));
+
+        mVibratorProviders.get(1).setVibratorInfoLoadSuccessful(true);
+        mVibratorProviders.get(1).setResonantFrequency(123.f);
+        service.systemReady();
+
+        VibratorInfo info = createService().getVibratorInfo(1);
+        assertNotNull(info);
+        assertEquals(1, info.getId());
+        assertEquals(123.f, info.getResonantFrequencyHz(), 0.01 /*tolerance*/);
+    }
+
+    @Test
+    public void registerVibratorStateListener_callbacksAreTriggered() throws Exception {
+        mockVibrators(1);
+        VibratorManagerService service = createSystemReadyService();
+        IVibratorStateListener listenerMock = mockVibratorStateListener();
+        service.registerVibratorStateListener(1, listenerMock);
+
+        long oneShotDuration = 20;
+        vibrateAndWaitUntilFinished(service,
+                VibrationEffect.createOneShot(oneShotDuration, VibrationEffect.DEFAULT_AMPLITUDE),
+                ALARM_ATTRS);
+
+        InOrder inOrderVerifier = inOrder(listenerMock);
+        // First notification done when listener is registered.
+        inOrderVerifier.verify(listenerMock).onVibrating(eq(false));
+        inOrderVerifier.verify(listenerMock).onVibrating(eq(true));
+        // The last notification is after the vibration has completed.
+        inOrderVerifier.verify(listenerMock, timeout(TEST_TIMEOUT_MILLIS)).onVibrating(eq(false));
+        inOrderVerifier.verifyNoMoreInteractions();
+
+        InOrder batteryVerifier = inOrder(mBatteryStatsMock);
+        batteryVerifier.verify(mBatteryStatsMock)
+                .noteVibratorOn(UID, oneShotDuration + mVibrationConfig.getRampDownDurationMs());
+        batteryVerifier.verify(mBatteryStatsMock).noteVibratorOff(UID);
+    }
+
+    @Test
+    public void unregisterVibratorStateListener_callbackNotTriggeredAfter() throws Exception {
+        mockVibrators(1);
+        VibratorManagerService service = createSystemReadyService();
+        IVibratorStateListener listenerMock = mockVibratorStateListener();
+        service.registerVibratorStateListener(1, listenerMock);
+
+        vibrate(service, VibrationEffect.createOneShot(40, 100), ALARM_ATTRS);
+
+        // Wait until service knows vibrator is on.
+        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        service.unregisterVibratorStateListener(1, listenerMock);
+
+        // Wait until vibrator is off.
+        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        InOrder inOrderVerifier = inOrder(listenerMock);
+        // First notification done when listener is registered.
+        inOrderVerifier.verify(listenerMock).onVibrating(eq(false));
+        inOrderVerifier.verify(listenerMock).onVibrating(eq(true));
+        inOrderVerifier.verify(listenerMock, atLeastOnce()).asBinder(); // unregister
+        inOrderVerifier.verifyNoMoreInteractions();
+    }
+
+    @Test
+    public void registerVibratorStateListener_multipleVibratorsAreTriggered() throws Exception {
+        mockVibrators(0, 1, 2);
+        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        VibratorManagerService service = createSystemReadyService();
+        IVibratorStateListener[] listeners = new IVibratorStateListener[3];
+        for (int i = 0; i < 3; i++) {
+            listeners[i] = mockVibratorStateListener();
+            service.registerVibratorStateListener(i, listeners[i]);
+        }
+
+        vibrateAndWaitUntilFinished(service, CombinedVibration.startParallel()
+                .addVibrator(0, VibrationEffect.createOneShot(40, 100))
+                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .combine(), ALARM_ATTRS);
+
+        verify(listeners[0]).onVibrating(eq(true));
+        verify(listeners[1]).onVibrating(eq(true));
+        verify(listeners[2], never()).onVibrating(eq(true));
+        cancelVibrate(service); // Clean up long-ish effect.
+    }
+
+    @Test
+    public void setAlwaysOnEffect_withMono_enablesAlwaysOnEffectToAllVibratorsWithCapability() {
+        mockVibrators(1, 2, 3);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
+        mVibratorProviders.get(3).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
+
+        CombinedVibration effect = CombinedVibration.createParallel(
+                VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
+        assertTrue(createSystemReadyService().setAlwaysOnEffect(
+                UID, PACKAGE_NAME, 1, effect, ALARM_ATTRS));
+
+        PrebakedSegment expected = new PrebakedSegment(
+                VibrationEffect.EFFECT_CLICK, false, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+
+        // Only vibrators 1 and 3 have always-on capabilities.
+        assertEquals(mVibratorProviders.get(1).getAlwaysOnEffect(1), expected);
+        assertNull(mVibratorProviders.get(2).getAlwaysOnEffect(1));
+        assertEquals(mVibratorProviders.get(3).getAlwaysOnEffect(1), expected);
+    }
+
+    @Test
+    public void setAlwaysOnEffect_withStereo_enablesAlwaysOnEffectToAllVibratorsWithCapability() {
+        mockVibrators(1, 2, 3, 4);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
+        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
+        mVibratorProviders.get(4).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
+
+        CombinedVibration effect = CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
+                .addVibrator(2, VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK))
+                .addVibrator(3, VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
+                .combine();
+        assertTrue(createSystemReadyService().setAlwaysOnEffect(
+                UID, PACKAGE_NAME, 1, effect, ALARM_ATTRS));
+
+        PrebakedSegment expectedClick = new PrebakedSegment(
+                VibrationEffect.EFFECT_CLICK, false, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+
+        PrebakedSegment expectedTick = new PrebakedSegment(
+                VibrationEffect.EFFECT_TICK, false, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+
+        // Enables click on vibrator 1 and tick on vibrator 2 only.
+        assertEquals(mVibratorProviders.get(1).getAlwaysOnEffect(1), expectedClick);
+        assertEquals(mVibratorProviders.get(2).getAlwaysOnEffect(1), expectedTick);
+        assertNull(mVibratorProviders.get(3).getAlwaysOnEffect(1));
+        assertNull(mVibratorProviders.get(4).getAlwaysOnEffect(1));
+    }
+
+    @Test
+    public void setAlwaysOnEffect_withNullEffect_disablesAlwaysOnEffects() {
+        mockVibrators(1, 2, 3);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
+        mVibratorProviders.get(3).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
+
+        CombinedVibration effect = CombinedVibration.createParallel(
+                VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
+        assertTrue(createSystemReadyService().setAlwaysOnEffect(
+                UID, PACKAGE_NAME, 1, effect, ALARM_ATTRS));
+
+        assertTrue(createSystemReadyService().setAlwaysOnEffect(
+                UID, PACKAGE_NAME, 1, null, ALARM_ATTRS));
+
+        assertNull(mVibratorProviders.get(1).getAlwaysOnEffect(1));
+        assertNull(mVibratorProviders.get(2).getAlwaysOnEffect(1));
+        assertNull(mVibratorProviders.get(3).getAlwaysOnEffect(1));
+    }
+
+    @Test
+    public void setAlwaysOnEffect_withNonPrebakedEffect_ignoresEffect() {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
+
+        CombinedVibration effect = CombinedVibration.createParallel(
+                VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE));
+        assertFalse(createSystemReadyService().setAlwaysOnEffect(
+                UID, PACKAGE_NAME, 1, effect, ALARM_ATTRS));
+
+        assertNull(mVibratorProviders.get(1).getAlwaysOnEffect(1));
+    }
+
+    @Test
+    public void setAlwaysOnEffect_withNonSyncedEffect_ignoresEffect() {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_ALWAYS_ON_CONTROL);
+
+        CombinedVibration effect = CombinedVibration.startSequential()
+                .addNext(0, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .combine();
+        assertFalse(createSystemReadyService().setAlwaysOnEffect(
+                UID, PACKAGE_NAME, 1, effect, ALARM_ATTRS));
+
+        assertNull(mVibratorProviders.get(1).getAlwaysOnEffect(1));
+    }
+
+    @Test
+    public void setAlwaysOnEffect_withNoVibratorWithCapability_ignoresEffect() {
+        mockVibrators(1);
+        VibratorManagerService service = createSystemReadyService();
+
+        CombinedVibration mono = CombinedVibration.createParallel(
+                VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
+        CombinedVibration stereo = CombinedVibration.startParallel()
+                .addVibrator(0, VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
+                .combine();
+        assertFalse(service.setAlwaysOnEffect(UID, PACKAGE_NAME, 1, mono, ALARM_ATTRS));
+        assertFalse(service.setAlwaysOnEffect(UID, PACKAGE_NAME, 2, stereo, ALARM_ATTRS));
+
+        assertNull(mVibratorProviders.get(1).getAlwaysOnEffect(1));
+    }
+
+    @Test
+    public void vibrate_withRingtone_usesRingerModeSettings() throws Exception {
+        mockVibrators(1);
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(1);
+        fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK,
+                VibrationEffect.EFFECT_HEAVY_CLICK, VibrationEffect.EFFECT_DOUBLE_CLICK);
+
+        setRingerMode(AudioManager.RINGER_MODE_SILENT);
+        VibratorManagerService service = createSystemReadyService();
+        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
+                RINGTONE_ATTRS);
+
+        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
+        service = createSystemReadyService();
+        vibrateAndWaitUntilFinished(
+                service, VibrationEffect.get(VibrationEffect.EFFECT_HEAVY_CLICK), RINGTONE_ATTRS);
+
+        setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
+        service = createSystemReadyService();
+        vibrateAndWaitUntilFinished(
+                service, VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK), RINGTONE_ATTRS);
+
+        assertEquals(
+                Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_HEAVY_CLICK),
+                        expectedPrebaked(VibrationEffect.EFFECT_DOUBLE_CLICK)),
+                mVibratorProviders.get(1).getAllEffectSegments());
+    }
+
+    @Test
+    public void vibrate_withPowerMode_usesPowerModeState() throws Exception {
+        mockVibrators(1);
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(1);
+        fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_TICK, VibrationEffect.EFFECT_CLICK,
+                VibrationEffect.EFFECT_HEAVY_CLICK, VibrationEffect.EFFECT_DOUBLE_CLICK);
+        VibratorManagerService service = createSystemReadyService();
+
+        mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE);
+        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_TICK),
+                HAPTIC_FEEDBACK_ATTRS);
+        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
+                RINGTONE_ATTRS);
+
+        mRegisteredPowerModeListener.onLowPowerModeChanged(NORMAL_POWER_STATE);
+        vibrateAndWaitUntilFinished(service,
+                VibrationEffect.get(VibrationEffect.EFFECT_HEAVY_CLICK), /* attrs= */ null);
+        vibrateAndWaitUntilFinished(service,
+                VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK), NOTIFICATION_ATTRS);
+
+        assertEquals(
+                Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK),
+                        expectedPrebaked(VibrationEffect.EFFECT_HEAVY_CLICK),
+                        expectedPrebaked(VibrationEffect.EFFECT_DOUBLE_CLICK)),
+                mVibratorProviders.get(1).getAllEffectSegments());
+    }
+
+    @Test
+    public void vibrate_withAudioAttributes_usesOriginalAudioUsageInAppOpsManager() {
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+        AudioAttributes audioAttributes = new AudioAttributes.Builder()
+                .setUsage(AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY).build();
+        VibrationAttributes vibrationAttributes =
+                new VibrationAttributes.Builder(audioAttributes).build();
+
+        vibrate(service, effect, vibrationAttributes);
+
+        verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
+                eq(AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY), anyInt(), anyString());
+    }
+
+    @Test
+    public void vibrate_withVibrationAttributes_usesCorrespondingAudioUsageInAppOpsManager() {
+        VibratorManagerService service = createSystemReadyService();
+
+        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK), ALARM_ATTRS);
+        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_TICK), NOTIFICATION_ATTRS);
+        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK), RINGTONE_ATTRS);
+        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_TICK), HAPTIC_FEEDBACK_ATTRS);
+        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
+                new VibrationAttributes.Builder().setUsage(
+                        VibrationAttributes.USAGE_COMMUNICATION_REQUEST).build());
+        vibrate(service, VibrationEffect.createOneShot(2000, 200),
+                new VibrationAttributes.Builder().setUsage(
+                        VibrationAttributes.USAGE_UNKNOWN).build());
+
+        InOrder inOrderVerifier = inOrder(mAppOpsManagerMock);
+        inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
+                eq(AudioAttributes.USAGE_ALARM), anyInt(), anyString());
+        inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
+                eq(AudioAttributes.USAGE_NOTIFICATION), anyInt(), anyString());
+        inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
+                eq(AudioAttributes.USAGE_NOTIFICATION_RINGTONE), anyInt(), anyString());
+        inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
+                eq(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION), anyInt(), anyString());
+        inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
+                eq(AudioAttributes.USAGE_VOICE_COMMUNICATION),
+                anyInt(), anyString());
+        inOrderVerifier.verify(mAppOpsManagerMock).checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
+                eq(AudioAttributes.USAGE_UNKNOWN), anyInt(), anyString());
+    }
+
+    @Test
+    public void vibrate_withVibrationAttributesEnforceFreshSettings_refreshesVibrationSettings()
+            throws Exception {
+        mockVibrators(0);
+        mVibratorProviders.get(0).setSupportedEffects(VibrationEffect.EFFECT_CLICK,
+                VibrationEffect.EFFECT_TICK);
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
+                Vibrator.VIBRATION_INTENSITY_HIGH);
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationAttributes notificationWithFreshAttrs = new VibrationAttributes.Builder()
+                .setUsage(VibrationAttributes.USAGE_NOTIFICATION)
+                .setFlags(VibrationAttributes.FLAG_INVALIDATE_SETTINGS_CACHE)
+                .build();
+
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
+                Vibrator.VIBRATION_INTENSITY_LOW);
+        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
+                NOTIFICATION_ATTRS);
+        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_TICK),
+                notificationWithFreshAttrs);
+
+        assertEquals(
+                Arrays.asList(
+                        expectedPrebaked(VibrationEffect.EFFECT_CLICK,
+                                VibrationEffect.EFFECT_STRENGTH_STRONG),
+                        expectedPrebaked(VibrationEffect.EFFECT_TICK,
+                                VibrationEffect.EFFECT_STRENGTH_LIGHT)),
+                mVibratorProviders.get(0).getAllEffectSegments());
+    }
+
+    @Test
+    public void vibrate_withAttributesUnknownUsage_usesEffectToIdentifyTouchUsage() {
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationAttributes unknownAttributes = VibrationAttributes.createForUsage(
+                VibrationAttributes.USAGE_UNKNOWN);
+        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK), unknownAttributes);
+        vibrate(service, VibrationEffect.createOneShot(200, 200), unknownAttributes);
+        vibrate(service, VibrationEffect.createWaveform(
+                new long[] { 100, 200, 300 }, new int[] {1, 2, 3}, -1), unknownAttributes);
+        vibrate(service,
+                VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_RISE)
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_FALL)
+                        .compose(),
+                unknownAttributes);
+
+        verify(mAppOpsManagerMock, times(4))
+                .checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
+                        eq(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION), anyInt(), anyString());
+        verify(mAppOpsManagerMock, never())
+                .checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
+                        eq(AudioAttributes.USAGE_UNKNOWN), anyInt(), anyString());
+    }
+
+    @Test
+    public void vibrate_withAttributesUnknownUsage_ignoresEffectIfNotHapticFeedbackCandidate() {
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationAttributes unknownAttributes = VibrationAttributes.createForUsage(
+                VibrationAttributes.USAGE_UNKNOWN);
+        vibrate(service, VibrationEffect.get(VibrationEffect.RINGTONES[0]), unknownAttributes);
+        vibrate(service, VibrationEffect.createOneShot(2000, 200), unknownAttributes);
+        vibrate(service, VibrationEffect.createWaveform(
+                new long[] { 100, 200, 300 }, new int[] {1, 2, 3}, 0), unknownAttributes);
+        vibrate(service,
+                VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_RISE)
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_FALL)
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SPIN)
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_THUD)
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
+                        .compose(),
+                unknownAttributes);
+
+        verify(mAppOpsManagerMock, never())
+                .checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
+                        eq(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION), anyInt(), anyString());
+        verify(mAppOpsManagerMock, times(4))
+                .checkAudioOpNoThrow(eq(AppOpsManager.OP_VIBRATE),
+                        eq(AudioAttributes.USAGE_UNKNOWN), anyInt(), anyString());
+    }
+
+    @Test
+    public void vibrate_withOngoingRepeatingVibration_ignoresEffect() throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
+                new long[]{10_000, 10_000}, new int[]{128, 255}, 1);
+        vibrate(service, repeatingEffect, new VibrationAttributes.Builder().setUsage(
+                VibrationAttributes.USAGE_UNKNOWN).build());
+
+        // VibrationThread will start this vibration async, wait until it has started.
+        assertTrue(waitUntil(s -> !mVibratorProviders.get(1).getAllEffectSegments().isEmpty(),
+                service, TEST_TIMEOUT_MILLIS));
+
+        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
+                HAPTIC_FEEDBACK_ATTRS);
+
+        // The time estimate is recorded when the vibration starts, repeating vibrations
+        // are capped at BATTERY_STATS_REPEATING_VIBRATION_DURATION (=5000).
+        verify(mBatteryStatsMock).noteVibratorOn(UID, 5000);
+        // The second vibration shouldn't have recorded that the vibrators were turned on.
+        verify(mBatteryStatsMock, times(1)).noteVibratorOn(anyInt(), anyLong());
+        // No segment played is the prebaked CLICK from the second vibration.
+        assertFalse(mVibratorProviders.get(1).getAllEffectSegments().stream()
+                .anyMatch(PrebakedSegment.class::isInstance));
+        cancelVibrate(service);  // Clean up repeating effect.
+    }
+
+    @Test
+    public void vibrate_withOngoingRepeatingVibrationBeingCancelled_playsAfterPreviousIsCancelled()
+            throws Exception {
+        mockVibrators(1);
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(1);
+        fakeVibrator.setOffLatency(50); // Add latency so cancellation is slow.
+        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
+                new long[]{10, 10_000}, new int[]{255, 0}, 1);
+        vibrate(service, repeatingEffect, ALARM_ATTRS);
+
+        // VibrationThread will start this vibration async, wait until the off waveform step.
+        assertTrue(waitUntil(s -> fakeVibrator.getOffCount() > 0, service, TEST_TIMEOUT_MILLIS));
+
+        // Cancel vibration right before requesting a new one.
+        // This should trigger slow IVibrator.off before setting the vibration status to cancelled.
+        cancelVibrate(service);
+        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
+                ALARM_ATTRS);
+
+        // Check that second vibration was played.
+        assertTrue(fakeVibrator.getAllEffectSegments().stream()
+                .anyMatch(PrebakedSegment.class::isInstance));
+    }
+
+    @Test
+    public void vibrate_withNewSameImportanceVibrationAndBothRepeating_cancelsOngoingEffect()
+            throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
+                new long[]{10_000, 10_000}, new int[]{128, 255}, 1);
+        vibrate(service, repeatingEffect, ALARM_ATTRS);
+
+        // VibrationThread will start this vibration async, wait until it has started.
+        assertTrue(waitUntil(s -> !mVibratorProviders.get(1).getAllEffectSegments().isEmpty(),
+                service, TEST_TIMEOUT_MILLIS));
+
+        VibrationEffect repeatingEffect2 = VibrationEffect.createWaveform(
+                new long[]{10_000, 10_000}, new int[]{128, 255}, 1);
+        vibrate(service, repeatingEffect2, ALARM_ATTRS);
+
+        // VibrationThread will start this vibration async, so wait before checking it started.
+        assertTrue(waitUntil(s -> mVibratorProviders.get(1).getAllEffectSegments().size() == 2,
+                service, TEST_TIMEOUT_MILLIS));
+
+        // The second vibration should have recorded that the vibrators were turned on.
+        verify(mBatteryStatsMock, times(2)).noteVibratorOn(anyInt(), anyLong());
+
+        cancelVibrate(service);  // Clean up repeating effect.
+    }
+
+    @Test
+    public void vibrate_withNewSameImportanceVibrationButOngoingIsRepeating_ignoreNewVibration()
+            throws Exception {
+        mockVibrators(1);
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(1);
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
+                new long[]{10, 10_000}, new int[]{255, 0}, 1);
+        vibrate(service, repeatingEffect, ALARM_ATTRS);
+
+        // VibrationThread will start this vibration async, wait until the off waveform step.
+        assertTrue(waitUntil(s -> fakeVibrator.getOffCount() > 0, service, TEST_TIMEOUT_MILLIS));
+
+        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
+                ALARM_ATTRS);
+
+        // The second vibration shouldn't have recorded that the vibrators were turned on.
+        verify(mBatteryStatsMock, times(1)).noteVibratorOn(anyInt(), anyLong());
+        // The second vibration shouldn't have played any prebaked segment.
+        assertFalse(mVibratorProviders.get(1).getAllEffectSegments().stream()
+                .anyMatch(PrebakedSegment.class::isInstance));
+        cancelVibrate(service);  // Clean up long effect.
+    }
+
+    @Test
+    public void vibrate_withNewUnknownUsageVibrationAndRepeating_cancelsOngoingEffect()
+            throws Exception {
+        mockVibrators(1);
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
+                new long[]{10_000, 10_000}, new int[]{128, 255}, 1);
+        vibrate(service, repeatingEffect, ALARM_ATTRS);
+
+        // VibrationThread will start this vibration async, wait until it has started.
+        assertTrue(waitUntil(s -> !mVibratorProviders.get(1).getAllEffectSegments().isEmpty(),
+                service, TEST_TIMEOUT_MILLIS));
+
+        VibrationEffect repeatingEffect2 = VibrationEffect.createWaveform(
+                new long[]{10_000, 10_000}, new int[]{128, 255}, 1);
+        vibrate(service, repeatingEffect2, UNKNOWN_ATTRS);
+
+        // VibrationThread will start this vibration async, so wait before checking it started.
+        assertTrue(waitUntil(s -> mVibratorProviders.get(1).getAllEffectSegments().size() == 2,
+                service, TEST_TIMEOUT_MILLIS));
+
+        // The second vibration should have recorded that the vibrators were turned on.
+        verify(mBatteryStatsMock, times(2)).noteVibratorOn(anyInt(), anyLong());
+
+        cancelVibrate(service);  // Clean up repeating effect.
+    }
+
+    @Test
+    public void vibrate_withNewUnknownUsageVibrationAndNotRepeating_ignoreNewVibration()
+            throws Exception {
+        mockVibrators(1);
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(1);
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationEffect alarmEffect = VibrationEffect.createWaveform(
+                new long[]{10, 10_000}, new int[]{255, 0}, -1);
+        vibrate(service, alarmEffect, ALARM_ATTRS);
+
+        // VibrationThread will start this vibration async, wait until the off waveform step.
+        assertTrue(waitUntil(s -> fakeVibrator.getOffCount() > 0, service, TEST_TIMEOUT_MILLIS));
+
+        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
+                UNKNOWN_ATTRS);
+
+        // The second vibration shouldn't have recorded that the vibrators were turned on.
+        verify(mBatteryStatsMock, times(1)).noteVibratorOn(anyInt(), anyLong());
+        // The second vibration shouldn't have played any prebaked segment.
+        assertFalse(mVibratorProviders.get(1).getAllEffectSegments().stream()
+                .anyMatch(PrebakedSegment.class::isInstance));
+        cancelVibrate(service);  // Clean up long effect.
+    }
+
+    @Test
+    public void vibrate_withOngoingHigherImportanceVibration_ignoresEffect() 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, 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));
+
+        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
+                HAPTIC_FEEDBACK_ATTRS);
+
+        // The second vibration shouldn't have recorded that the vibrators were turned on.
+        verify(mBatteryStatsMock, times(1)).noteVibratorOn(anyInt(), anyLong());
+        // The second vibration shouldn't have played any prebaked segment.
+        assertFalse(mVibratorProviders.get(1).getAllEffectSegments().stream()
+                .anyMatch(PrebakedSegment.class::isInstance));
+        cancelVibrate(service);  // Clean up long effect.
+    }
+
+    @Test
+    public void vibrate_withOngoingLowerImportanceVibration_cancelsOngoingEffect()
+            throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        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));
+
+        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
+                RINGTONE_ATTRS);
+
+        // The second vibration should have recorded that the vibrators were turned on.
+        verify(mBatteryStatsMock, times(2)).noteVibratorOn(anyInt(), anyLong());
+        // One segment played is the prebaked CLICK from the second vibration.
+        assertEquals(1,
+                mVibratorProviders.get(1).getAllEffectSegments().stream()
+                        .filter(PrebakedSegment.class::isInstance)
+                        .count());
+    }
+
+    @Test
+    public void vibrate_withOngoingLowerImportanceExternalVibration_cancelsOngoingVibration()
+            throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
+        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
+        VibratorManagerService service = createSystemReadyService();
+
+        IBinder firstToken = mock(IBinder.class);
+        IExternalVibrationController controller = mock(IExternalVibrationController.class);
+        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
+                AUDIO_ALARM_ATTRS,
+                controller, firstToken);
+        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
+
+        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
+                RINGTONE_ATTRS);
+
+        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
+        // The external vibration should have been cancelled
+        verify(controller).mute();
+        assertEquals(Arrays.asList(false, true, false),
+                mVibratorProviders.get(1).getExternalControlStates());
+        // The new vibration should have recorded that the vibrators were turned on.
+        verify(mBatteryStatsMock, times(1)).noteVibratorOn(anyInt(), anyLong());
+        // One segment played is the prebaked CLICK from the new vibration.
+        assertEquals(1,
+                mVibratorProviders.get(1).getAllEffectSegments().stream()
+                        .filter(PrebakedSegment.class::isInstance)
+                        .count());
+    }
+
+    @Test
+    public void vibrate_withOngoingSameImportancePipelinedVibration_continuesOngoingEffect()
+            throws Exception {
+        VibrationAttributes pipelineAttrs = new VibrationAttributes.Builder(HAPTIC_FEEDBACK_ATTRS)
+                .setFlags(VibrationAttributes.FLAG_PIPELINED_EFFECT)
+                .build();
+
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                new long[]{100, 100}, new int[]{128, 255}, -1);
+        vibrate(service, effect, pipelineAttrs);
+        // This vibration will be enqueued, but evicted by the EFFECT_CLICK.
+        vibrate(service, VibrationEffect.startComposition()
+                .addOffDuration(Duration.ofSeconds(10))
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_SLOW_RISE)
+                .compose(), pipelineAttrs);  // This will queue and be evicted for the click.
+
+        vibrateAndWaitUntilFinished(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
+                pipelineAttrs);
+
+        // The second vibration should have recorded that the vibrators were turned on.
+        verify(mBatteryStatsMock, times(2)).noteVibratorOn(anyInt(), anyLong());
+        // One step segment (with several amplitudes) and one click should have played. Notably
+        // there is no primitive segment.
+        List<VibrationEffectSegment> played = mVibratorProviders.get(1).getAllEffectSegments();
+        assertEquals(2, played.size());
+        assertEquals(1, played.stream().filter(StepSegment.class::isInstance).count());
+        assertEquals(1, played.stream().filter(PrebakedSegment.class::isInstance).count());
+    }
+
+    @Test
+    public void vibrate_withInputDevices_vibratesInputDevices() throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getVibratorIds(eq(1))).thenReturn(new int[]{1});
+        when(mIInputManagerMock.getInputDevice(eq(1))).thenReturn(createInputDeviceWithVibrator(1));
+        setUserSetting(Settings.System.VIBRATE_INPUT_DEVICES, 1);
+        // Mock alarm intensity equals to default value to avoid scaling in this test.
+        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY,
+                mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_ALARM));
+        VibratorManagerService service = createSystemReadyService();
+
+        CombinedVibration effect = CombinedVibration.createParallel(
+                VibrationEffect.createOneShot(10, 10));
+        vibrateAndWaitUntilFinished(service, effect, ALARM_ATTRS);
+
+        verify(mIInputManagerMock).vibrateCombined(eq(1), eq(effect), any());
+        assertTrue(mVibratorProviders.get(1).getAllEffectSegments().isEmpty());
+    }
+
+    @Test
+    public void vibrate_withNativeCallbackTriggered_finishesVibration() throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        VibratorManagerService service = createSystemReadyService();
+        // The native callback will be dispatched manually in this test.
+        mTestLooper.stopAutoDispatchAndIgnoreExceptions();
+
+        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK), ALARM_ATTRS);
+
+        // VibrationThread will start this vibration async, so wait before triggering callbacks.
+        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        // Trigger callbacks from controller.
+        mTestLooper.moveTimeForward(50);
+        mTestLooper.dispatchAll();
+
+        // VibrationThread needs some time to react to native callbacks and stop the vibrator.
+        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+    }
+
+    @Test
+    public void vibrate_withTriggerCallback_finishesVibration() throws Exception {
+        mockCapabilities(IVibratorManager.CAP_SYNC, IVibratorManager.CAP_PREPARE_COMPOSE);
+        mockVibrators(1, 2);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        mVibratorProviders.get(1).setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK);
+        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        mVibratorProviders.get(2).setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK);
+        // Mock alarm intensity equals to default value to avoid scaling in this test.
+        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY,
+                mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_ALARM));
+        VibratorManagerService service = createSystemReadyService();
+        // The native callback will be dispatched manually in this test.
+        mTestLooper.stopAutoDispatchAndIgnoreExceptions();
+
+        ArgumentCaptor<VibratorManagerService.OnSyncedVibrationCompleteListener> listenerCaptor =
+                ArgumentCaptor.forClass(
+                        VibratorManagerService.OnSyncedVibrationCompleteListener.class);
+        verify(mNativeWrapperMock).init(listenerCaptor.capture());
+
+        CountDownLatch triggerCountDown = new CountDownLatch(1);
+        // Mock trigger callback on registered listener right after the synced vibration starts.
+        when(mNativeWrapperMock.prepareSynced(eq(new int[]{1, 2}))).thenReturn(true);
+        when(mNativeWrapperMock.triggerSynced(anyLong())).then(answer -> {
+            listenerCaptor.getValue().onComplete(answer.getArgument(0));
+            triggerCountDown.countDown();
+            return true;
+        });
+
+        VibrationEffect composed = VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 100)
+                .compose();
+        CombinedVibration effect = CombinedVibration.createParallel(composed);
+
+        vibrate(service, effect, ALARM_ATTRS);
+        // VibrationThread will start this vibration async, so wait until vibration is triggered.
+        triggerCountDown.await(TEST_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
+
+        verify(mNativeWrapperMock).prepareSynced(eq(new int[]{1, 2}));
+        verify(mNativeWrapperMock).triggerSynced(anyLong());
+        PrimitiveSegment expected = new PrimitiveSegment(
+                VibrationEffect.Composition.PRIMITIVE_CLICK, 1, 100);
+        assertEquals(Arrays.asList(expected), mVibratorProviders.get(1).getAllEffectSegments());
+        assertEquals(Arrays.asList(expected), mVibratorProviders.get(2).getAllEffectSegments());
+
+        // VibrationThread needs some time to react to native callbacks and stop the vibrator.
+        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+    }
+
+    @Test
+    public void vibrate_withMultipleVibratorsAndCapabilities_prepareAndTriggerCalled()
+            throws Exception {
+        mockCapabilities(IVibratorManager.CAP_SYNC, IVibratorManager.CAP_PREPARE_PERFORM,
+                IVibratorManager.CAP_PREPARE_COMPOSE, IVibratorManager.CAP_MIXED_TRIGGER_PERFORM,
+                IVibratorManager.CAP_MIXED_TRIGGER_COMPOSE);
+        mockVibrators(1, 2);
+        when(mNativeWrapperMock.prepareSynced(eq(new int[]{1, 2}))).thenReturn(true);
+        when(mNativeWrapperMock.triggerSynced(anyLong())).thenReturn(true);
+        FakeVibratorControllerProvider fakeVibrator1 = mVibratorProviders.get(1);
+        fakeVibrator1.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        VibratorManagerService service = createSystemReadyService();
+
+        CombinedVibration effect = CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addVibrator(2, VibrationEffect.startComposition()
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                        .compose())
+                .combine();
+        vibrateAndWaitUntilFinished(service, effect, ALARM_ATTRS);
+
+        verify(mNativeWrapperMock).prepareSynced(eq(new int[]{1, 2}));
+        verify(mNativeWrapperMock).triggerSynced(anyLong());
+        verify(mNativeWrapperMock).cancelSynced(); // Trigger on service creation only.
+    }
+
+    @Test
+    public void vibrate_withMultipleVibratorsWithoutCapabilities_skipPrepareAndTrigger()
+            throws Exception {
+        // Missing CAP_MIXED_TRIGGER_ON and CAP_MIXED_TRIGGER_PERFORM.
+        mockCapabilities(IVibratorManager.CAP_SYNC, IVibratorManager.CAP_PREPARE_ON,
+                IVibratorManager.CAP_PREPARE_PERFORM);
+        mockVibrators(1, 2);
+        FakeVibratorControllerProvider fakeVibrator1 = mVibratorProviders.get(1);
+        fakeVibrator1.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        VibratorManagerService service = createSystemReadyService();
+
+        CombinedVibration effect = CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+                .addVibrator(2, VibrationEffect.createOneShot(10, 100))
+                .combine();
+        vibrateAndWaitUntilFinished(service, effect, ALARM_ATTRS);
+
+        verify(mNativeWrapperMock, never()).prepareSynced(any());
+        verify(mNativeWrapperMock, never()).triggerSynced(anyLong());
+        verify(mNativeWrapperMock).cancelSynced(); // Trigger on service creation only.
+    }
+
+    @Test
+    public void vibrate_withMultipleVibratorsPrepareFailed_skipTrigger() throws Exception {
+        mockCapabilities(IVibratorManager.CAP_SYNC, IVibratorManager.CAP_PREPARE_ON);
+        mockVibrators(1, 2);
+        when(mNativeWrapperMock.prepareSynced(any())).thenReturn(false);
+        VibratorManagerService service = createSystemReadyService();
+
+        CombinedVibration effect = CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.createOneShot(10, 50))
+                .addVibrator(2, VibrationEffect.createOneShot(10, 100))
+                .combine();
+        vibrateAndWaitUntilFinished(service, effect, ALARM_ATTRS);
+
+        verify(mNativeWrapperMock).prepareSynced(eq(new int[]{1, 2}));
+        verify(mNativeWrapperMock, never()).triggerSynced(anyLong());
+        verify(mNativeWrapperMock).cancelSynced(); // Trigger on service creation only.
+    }
+
+    @Test
+    public void vibrate_withMultipleVibratorsTriggerFailed_cancelPreparedSynced() throws Exception {
+        mockCapabilities(IVibratorManager.CAP_SYNC, IVibratorManager.CAP_PREPARE_ON);
+        mockVibrators(1, 2);
+        when(mNativeWrapperMock.prepareSynced(eq(new int[]{1, 2}))).thenReturn(true);
+        when(mNativeWrapperMock.triggerSynced(anyLong())).thenReturn(false);
+        VibratorManagerService service = createSystemReadyService();
+
+        CombinedVibration effect = CombinedVibration.startParallel()
+                .addVibrator(1, VibrationEffect.createOneShot(10, 50))
+                .addVibrator(2, VibrationEffect.createOneShot(10, 100))
+                .combine();
+        vibrateAndWaitUntilFinished(service, effect, ALARM_ATTRS);
+
+        verify(mNativeWrapperMock).prepareSynced(eq(new int[]{1, 2}));
+        verify(mNativeWrapperMock).triggerSynced(anyLong());
+        verify(mNativeWrapperMock, times(2)).cancelSynced(); // Trigger on service creation too.
+    }
+
+    @Test
+    public void vibrate_withIntensitySettings_appliesSettingsToScaleVibrations() throws Exception {
+        int defaultNotificationIntensity =
+                mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_NOTIFICATION);
+        setUserSetting(Settings.System.NOTIFICATION_VIBRATION_INTENSITY,
+                defaultNotificationIntensity < Vibrator.VIBRATION_INTENSITY_HIGH
+                        ? defaultNotificationIntensity + 1
+                        : defaultNotificationIntensity);
+
+        int defaultTouchIntensity =
+                mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_TOUCH);
+        setUserSetting(Settings.System.HAPTIC_FEEDBACK_INTENSITY,
+                defaultTouchIntensity > Vibrator.VIBRATION_INTENSITY_LOW
+                        ? defaultTouchIntensity - 1
+                        : defaultTouchIntensity);
+
+        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY,
+                mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_ALARM));
+        setUserSetting(Settings.System.MEDIA_VIBRATION_INTENSITY,
+                Vibrator.VIBRATION_INTENSITY_HIGH);
+        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY, Vibrator.VIBRATION_INTENSITY_OFF);
+
+        mockVibrators(1);
+        FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(1);
+        fakeVibrator.setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL,
+                IVibrator.CAP_COMPOSE_EFFECTS);
+        fakeVibrator.setSupportedPrimitives(VibrationEffect.Composition.PRIMITIVE_CLICK,
+                VibrationEffect.Composition.PRIMITIVE_TICK);
+        VibratorManagerService service = createSystemReadyService();
+
+        vibrateAndWaitUntilFinished(service, VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f)
+                .compose(), HAPTIC_FEEDBACK_ATTRS);
+
+        vibrateAndWaitUntilFinished(service, CombinedVibration.startSequential()
+                .addNext(1, VibrationEffect.createOneShot(100, 125))
+                .combine(), NOTIFICATION_ATTRS);
+
+        vibrateAndWaitUntilFinished(service, VibrationEffect.startComposition()
+                .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK, 1f)
+                .compose(), ALARM_ATTRS);
+
+        // Ring vibrations have intensity OFF and are not played.
+        vibrateAndWaitUntilFinished(service, VibrationEffect.createOneShot(100, 125),
+                RINGTONE_ATTRS);
+
+        // 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));
+
+        // Alarm vibration will be scaled with SCALE_NONE.
+        assertEquals(1f,
+                ((PrimitiveSegment) fakeVibrator.getAllEffectSegments().get(2)).getScale(), 1e-5);
+
+        cancelVibrate(service); // Clean up long-ish effect.
+    }
+
+    @Test
+    public void vibrate_withPowerModeChange_cancelVibrationIfNotAllowed() throws Exception {
+        mockVibrators(1, 2);
+        VibratorManagerService service = createSystemReadyService();
+        vibrate(service,
+                CombinedVibration.startParallel()
+                        .addVibrator(1, VibrationEffect.createOneShot(1000, 100))
+                        .combine(),
+                HAPTIC_FEEDBACK_ATTRS);
+
+        // VibrationThread will start this vibration async, so wait until vibration is triggered.
+        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE);
+
+        // Haptic feedback cancelled on low power mode.
+        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+    }
+
+    @Test
+    public void vibrate_withSettingsChange_doNotCancelVibration() throws Exception {
+        mockVibrators(1);
+        VibratorManagerService service = createSystemReadyService();
+
+        vibrate(service, VibrationEffect.createOneShot(1000, 100), HAPTIC_FEEDBACK_ATTRS);
+
+        // VibrationThread will start this vibration async, so wait until vibration is triggered.
+        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        service.updateServiceState();
+
+        // Vibration is not stopped nearly after updating service.
+        assertFalse(waitUntil(s -> !s.isVibrating(1), service, 50));
+        cancelVibrate(service); // Clean up long effect.
+    }
+
+    @Test
+    public void vibrate_withVirtualDisplayChange_ignoreVibrationFromVirtualDisplay()
+            throws Exception {
+        mockVibrators(1);
+        VibratorManagerService service = createSystemReadyService();
+        mRegisteredVirtualDisplayListener.onVirtualDisplayCreated(VIRTUAL_DISPLAY_ID);
+
+        vibrateWithDisplay(service,
+                VIRTUAL_DISPLAY_ID,
+                CombinedVibration.startParallel()
+                        .addVibrator(1, VibrationEffect.createOneShot(1000, 100))
+                        .combine(),
+                HAPTIC_FEEDBACK_ATTRS);
+
+        // Haptic feedback ignored when it's from a virtual display.
+        assertFalse(waitUntil(s -> s.isVibrating(1), service, /* timeout= */ 50));
+
+        mRegisteredVirtualDisplayListener.onVirtualDisplayRemoved(VIRTUAL_DISPLAY_ID);
+        vibrateWithDisplay(service,
+                VIRTUAL_DISPLAY_ID,
+                CombinedVibration.startParallel()
+                        .addVibrator(1, VibrationEffect.createOneShot(1000, 100))
+                        .combine(),
+                HAPTIC_FEEDBACK_ATTRS);
+        // Haptic feedback played normally when the virtual display is removed.
+        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        cancelVibrate(service);  // Clean up long-ish effect.
+    }
+
+    @Test
+    public void vibrate_withAppsOnVirtualDisplayChange_ignoreVibrationFromVirtualDisplay()
+            throws Exception {
+        mockVibrators(1);
+        VibratorManagerService service = createSystemReadyService();
+        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(
+                new ArraySet<>(Arrays.asList(UID)));
+        vibrateWithDisplay(service,
+                Display.INVALID_DISPLAY,
+                CombinedVibration.startParallel()
+                        .addVibrator(1, VibrationEffect.createOneShot(1000, 100))
+                        .combine(),
+                HAPTIC_FEEDBACK_ATTRS);
+
+        // Haptic feedback ignored when it's from an app running virtual display.
+        assertFalse(waitUntil(s -> s.isVibrating(1), service, /* timeout= */ 50));
+
+        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(new ArraySet<>());
+        vibrateWithDisplay(service,
+                Display.INVALID_DISPLAY,
+                CombinedVibration.startParallel()
+                        .addVibrator(1, VibrationEffect.createOneShot(1000, 100))
+                        .combine(),
+                HAPTIC_FEEDBACK_ATTRS);
+        // Haptic feedback played normally when the same app no long runs on a virtual display.
+        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+        cancelVibrate(service);  // Clean up long-ish effect.
+    }
+
+    @Test
+    public void vibrate_prebakedAndComposedVibrationsWithFallbacks_playsFallbackOnlyForPredefined()
+            throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        mVibratorProviders.get(1).setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_CLICK);
+
+        VibratorManagerService service = createSystemReadyService();
+        vibrateAndWaitUntilFinished(service,
+                VibrationEffect.startComposition()
+                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
+                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK))
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                        .compose(),
+                ALARM_ATTRS);
+
+        List<VibrationEffectSegment> segments = mVibratorProviders.get(1).getAllEffectSegments();
+        // At least one step segment played as fallback for unusupported vibration effect
+        assertTrue(segments.size() > 2);
+        // 0: Supported effect played
+        assertTrue(segments.get(0) instanceof PrebakedSegment);
+        // 1: No segment for unsupported primitive
+        // 2: One or more intermediate step segments as fallback for unsupported effect
+        for (int i = 1; i < segments.size() - 1; i++) {
+            assertTrue(segments.get(i) instanceof StepSegment);
+        }
+        // 3: Supported primitive played
+        assertTrue(segments.get(segments.size() - 1) instanceof PrimitiveSegment);
+    }
+
+    @Test
+    public void cancelVibrate_withoutUsageFilter_stopsVibrating() throws Exception {
+        mockVibrators(1);
+        VibratorManagerService service = createSystemReadyService();
+
+        service.cancelVibrate(VibrationAttributes.USAGE_FILTER_MATCH_ALL, service);
+        assertFalse(service.isVibrating(1));
+
+        vibrate(service, VibrationEffect.createOneShot(10 * TEST_TIMEOUT_MILLIS, 100), ALARM_ATTRS);
+
+        // VibrationThread will start this vibration async, so wait until vibration is triggered.
+        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        service.cancelVibrate(VibrationAttributes.USAGE_FILTER_MATCH_ALL, service);
+
+        // Alarm cancelled on filter match all.
+        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+    }
+
+    @Test
+    public void cancelVibrate_withFilter_onlyCancelsVibrationWithFilteredUsage() throws Exception {
+        mockVibrators(1);
+        VibratorManagerService service = createSystemReadyService();
+
+        vibrate(service, VibrationEffect.createOneShot(10 * TEST_TIMEOUT_MILLIS, 100), ALARM_ATTRS);
+
+        // VibrationThread will start this vibration async, so wait until vibration is triggered.
+        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        // Vibration is not cancelled with a different usage.
+        service.cancelVibrate(VibrationAttributes.USAGE_RINGTONE, service);
+        assertFalse(waitUntil(s -> !s.isVibrating(1), service, /* timeout= */ 50));
+
+        // Vibration is not cancelled with a different usage class used as filter.
+        service.cancelVibrate(
+                VibrationAttributes.USAGE_CLASS_FEEDBACK | ~VibrationAttributes.USAGE_CLASS_MASK,
+                service);
+        assertFalse(waitUntil(s -> !s.isVibrating(1), service, /* timeout= */ 50));
+
+        // Vibration is cancelled with usage class as filter.
+        service.cancelVibrate(
+                VibrationAttributes.USAGE_CLASS_ALARM | ~VibrationAttributes.USAGE_CLASS_MASK,
+                service);
+        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+    }
+
+    @Test
+    public void cancelVibrate_withoutUnknownUsage_onlyStopsIfFilteringUnknownOrAllUsages()
+            throws Exception {
+        mockVibrators(1);
+        VibrationAttributes attrs = new VibrationAttributes.Builder()
+                .setUsage(VibrationAttributes.USAGE_UNKNOWN)
+                .build();
+        VibratorManagerService service = createSystemReadyService();
+
+        vibrate(service, VibrationEffect.createOneShot(10 * TEST_TIMEOUT_MILLIS, 100), attrs);
+
+        // VibrationThread will start this vibration async, so wait until vibration is triggered.
+        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        // Do not cancel UNKNOWN vibration when filter is being applied for other usages.
+        service.cancelVibrate(VibrationAttributes.USAGE_RINGTONE, service);
+        assertFalse(waitUntil(s -> !s.isVibrating(1), service, /* timeout= */ 50));
+
+        service.cancelVibrate(
+                VibrationAttributes.USAGE_CLASS_ALARM | ~VibrationAttributes.USAGE_CLASS_MASK,
+                service);
+        assertFalse(waitUntil(s -> !s.isVibrating(1), service, /* timeout= */ 50));
+
+        // Cancel UNKNOWN vibration when filtered for that vibration specifically.
+        service.cancelVibrate(VibrationAttributes.USAGE_UNKNOWN, service);
+        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        vibrate(service, VibrationEffect.createOneShot(10 * TEST_TIMEOUT_MILLIS, 100), attrs);
+
+        // VibrationThread will start this vibration async, so wait until vibration is triggered.
+        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        // Cancel UNKNOWN vibration when all vibrations are being cancelled.
+        service.cancelVibrate(VibrationAttributes.USAGE_FILTER_MATCH_ALL, service);
+        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+    }
+
+    @Test
+    public void onExternalVibration_ignoreVibrationFromVirtualDevices() throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
+        createSystemReadyService();
+
+        IBinder binderToken = mock(IBinder.class);
+        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
+                AUDIO_ALARM_ATTRS,
+                mock(IExternalVibrationController.class), binderToken);
+        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
+        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
+
+        mRegisteredAppsOnVirtualDeviceListener.onAppsOnAnyVirtualDeviceChanged(
+                new ArraySet<>(Arrays.asList(UID)));
+        scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
+        assertEquals(IExternalVibratorService.SCALE_MUTE, scale);
+    }
+
+    @Test
+    public void onExternalVibration_setsExternalControl() throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
+        createSystemReadyService();
+
+        IBinder binderToken = mock(IBinder.class);
+        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
+                AUDIO_ALARM_ATTRS,
+                mock(IExternalVibrationController.class), binderToken);
+        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
+        mExternalVibratorService.onExternalVibrationStop(externalVibration);
+
+        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
+        assertEquals(Arrays.asList(false, true, false),
+                mVibratorProviders.get(1).getExternalControlStates());
+
+        verify(binderToken).linkToDeath(any(), eq(0));
+        verify(binderToken).unlinkToDeath(any(), eq(0));
+    }
+
+    @Test
+    public void onExternalVibration_withOngoingExternalVibration_mutesPreviousVibration()
+            throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
+        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
+        createSystemReadyService();
+
+        IBinder firstToken = mock(IBinder.class);
+        IBinder secondToken = mock(IBinder.class);
+        IExternalVibrationController firstController = mock(IExternalVibrationController.class);
+        IExternalVibrationController secondController = mock(IExternalVibrationController.class);
+        ExternalVibration firstVibration = new ExternalVibration(UID, PACKAGE_NAME,
+                AUDIO_ALARM_ATTRS,
+                firstController, firstToken);
+        int firstScale = mExternalVibratorService.onExternalVibrationStart(firstVibration);
+
+        AudioAttributes ringtoneAudioAttrs = new AudioAttributes.Builder()
+                .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
+                .build();
+        ExternalVibration secondVibration = new ExternalVibration(UID, PACKAGE_NAME,
+                ringtoneAudioAttrs, secondController, secondToken);
+        int secondScale = mExternalVibratorService.onExternalVibrationStart(secondVibration);
+
+        assertNotEquals(IExternalVibratorService.SCALE_MUTE, firstScale);
+        assertNotEquals(IExternalVibratorService.SCALE_MUTE, secondScale);
+        verify(firstController).mute();
+        verify(secondController, never()).mute();
+        // Set external control called only once.
+        assertEquals(Arrays.asList(false, true),
+                mVibratorProviders.get(1).getExternalControlStates());
+
+        mExternalVibratorService.onExternalVibrationStop(secondVibration);
+        mExternalVibratorService.onExternalVibrationStop(firstVibration);
+        assertEquals(Arrays.asList(false, true, false),
+                mVibratorProviders.get(1).getExternalControlStates());
+
+        verify(firstToken).linkToDeath(any(), eq(0));
+        verify(firstToken).unlinkToDeath(any(), eq(0));
+
+        verify(secondToken).linkToDeath(any(), eq(0));
+        verify(secondToken).unlinkToDeath(any(), eq(0));
+    }
+
+    @Test
+    public void onExternalVibration_withOngoingVibration_cancelsOngoingVibrationImmediately()
+            throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL,
+                IVibrator.CAP_AMPLITUDE_CONTROL);
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationEffect effect = VibrationEffect.createOneShot(10 * TEST_TIMEOUT_MILLIS, 100);
+        vibrate(service, effect, HAPTIC_FEEDBACK_ATTRS);
+
+        // VibrationThread will start this vibration async, so wait until vibration is triggered.
+        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
+                AUDIO_ALARM_ATTRS,
+                mock(IExternalVibrationController.class));
+        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
+        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
+
+        // Vibration is cancelled.
+        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+        assertEquals(Arrays.asList(false, true),
+                mVibratorProviders.get(1).getExternalControlStates());
+    }
+
+    @Test
+    public void onExternalVibration_withOngoingHigherImportanceVibration_ignoreNewVibration()
+            throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL,
+                IVibrator.CAP_AMPLITUDE_CONTROL);
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationEffect effect = VibrationEffect.createOneShot(10 * TEST_TIMEOUT_MILLIS, 100);
+        vibrate(service, effect, RINGTONE_ATTRS);
+
+        // VibrationThread will start this vibration async, so wait until vibration is triggered.
+        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
+                AUDIO_ALARM_ATTRS,
+                mock(IExternalVibrationController.class));
+        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
+        // External vibration is ignored.
+        assertEquals(IExternalVibratorService.SCALE_MUTE, scale);
+
+        // Vibration is not cancelled.
+        assertFalse(waitUntil(s -> !s.isVibrating(1), service, CLEANUP_TIMEOUT_MILLIS));
+        assertEquals(Arrays.asList(false), mVibratorProviders.get(1).getExternalControlStates());
+        cancelVibrate(service);  // Clean up long effect.
+    }
+
+    @Test
+    public void onExternalVibration_withNewSameImportanceButRepeating_cancelsOngoingVibration()
+            throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL,
+                IVibrator.CAP_AMPLITUDE_CONTROL);
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
+                new long[]{100, 200, 300}, new int[]{128, 255, 255}, 1);
+        vibrate(service, repeatingEffect, ALARM_ATTRS);
+
+        // VibrationThread will start this vibration async, so wait until vibration is triggered.
+        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
+                AUDIO_ALARM_ATTRS, mock(IExternalVibrationController.class));
+        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
+        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
+
+        // Vibration is cancelled.
+        assertTrue(waitUntil(s -> !s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+        assertEquals(Arrays.asList(false, true),
+                mVibratorProviders.get(1).getExternalControlStates());
+    }
+
+    @Test
+    public void onExternalVibration_withNewSameImportanceButOngoingIsRepeating_ignoreNewVibration()
+            throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL,
+                IVibrator.CAP_AMPLITUDE_CONTROL);
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
+                new long[]{10_000, 10_000}, new int[]{128, 255}, 1);
+        vibrate(service, repeatingEffect, NOTIFICATION_ATTRS);
+
+        // VibrationThread will start this vibration async, so wait until vibration is triggered.
+        assertTrue(waitUntil(s -> s.isVibrating(1), service, TEST_TIMEOUT_MILLIS));
+
+        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME,
+                AUDIO_NOTIFICATION_ATTRS,
+                mock(IExternalVibrationController.class));
+        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
+        // New vibration is ignored.
+        assertEquals(IExternalVibratorService.SCALE_MUTE, scale);
+
+        // Vibration is not cancelled.
+        assertFalse(waitUntil(s -> !s.isVibrating(1), service, CLEANUP_TIMEOUT_MILLIS));
+        assertEquals(Arrays.asList(false), mVibratorProviders.get(1).getExternalControlStates());
+        cancelVibrate(service);  // Clean up long effect.
+    }
+
+    @Test
+    public void onExternalVibration_withRingtone_usesRingerModeSettings() {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
+        AudioAttributes audioAttrs = new AudioAttributes.Builder()
+                .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
+                .build();
+        ExternalVibration externalVibration = new ExternalVibration(UID, PACKAGE_NAME, audioAttrs,
+                mock(IExternalVibrationController.class));
+
+        setRingerMode(AudioManager.RINGER_MODE_SILENT);
+        createSystemReadyService();
+        int scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
+        assertEquals(IExternalVibratorService.SCALE_MUTE, scale);
+
+        setRingerMode(AudioManager.RINGER_MODE_NORMAL);
+        createSystemReadyService();
+        scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
+        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
+
+        setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
+        createSystemReadyService();
+        scale = mExternalVibratorService.onExternalVibrationStart(externalVibration);
+        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
+    }
+
+    @Test
+    public void onExternalVibration_withBypassMuteAudioFlag_ignoresUserSettings() {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
+        setUserSetting(Settings.System.ALARM_VIBRATION_INTENSITY,
+                Vibrator.VIBRATION_INTENSITY_OFF);
+        AudioAttributes audioAttrs = new AudioAttributes.Builder()
+                .setUsage(AudioAttributes.USAGE_ALARM)
+                .build();
+        AudioAttributes flaggedAudioAttrs = new AudioAttributes.Builder()
+                .setUsage(AudioAttributes.USAGE_ALARM)
+                .setFlags(AudioAttributes.FLAG_BYPASS_MUTE)
+                .build();
+        createSystemReadyService();
+
+        int scale = mExternalVibratorService.onExternalVibrationStart(
+                new ExternalVibration(UID, PACKAGE_NAME, audioAttrs,
+                        mock(IExternalVibrationController.class)));
+        assertEquals(IExternalVibratorService.SCALE_MUTE, scale);
+
+        createSystemReadyService();
+        scale = mExternalVibratorService.onExternalVibrationStart(
+                new ExternalVibration(UID, PACKAGE_NAME, flaggedAudioAttrs,
+                        mock(IExternalVibrationController.class)));
+        assertNotEquals(IExternalVibratorService.SCALE_MUTE, scale);
+    }
+
+    @Test
+    public void onExternalVibration_withUnknownUsage_appliesMediaSettings() {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
+        setUserSetting(Settings.System.MEDIA_VIBRATION_INTENSITY,
+                Vibrator.VIBRATION_INTENSITY_OFF);
+        AudioAttributes flaggedAudioAttrs = new AudioAttributes.Builder()
+                .setUsage(AudioAttributes.USAGE_UNKNOWN)
+                .setFlags(AudioAttributes.FLAG_BYPASS_MUTE)
+                .build();
+        createSystemReadyService();
+
+        int scale = mExternalVibratorService.onExternalVibrationStart(
+                new ExternalVibration(/* uid= */ 123, PACKAGE_NAME, flaggedAudioAttrs,
+                        mock(IExternalVibrationController.class)));
+        assertEquals(IExternalVibratorService.SCALE_MUTE, scale);
+    }
+
+    @Test
+    public void frameworkStats_externalVibration_reportsAllMetrics() throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_EXTERNAL_CONTROL);
+        createSystemReadyService();
+
+        AudioAttributes audioAttrs = new AudioAttributes.Builder()
+                .setUsage(AudioAttributes.USAGE_ALARM)
+                .build();
+
+        ExternalVibration vib = new ExternalVibration(UID, PACKAGE_NAME, audioAttrs,
+                mock(IExternalVibrationController.class));
+        mExternalVibratorService.onExternalVibrationStart(vib);
+
+        Thread.sleep(10);
+        mExternalVibratorService.onExternalVibrationStop(vib);
+
+        ArgumentCaptor<VibrationStats.StatsInfo> argumentCaptor =
+                ArgumentCaptor.forClass(VibrationStats.StatsInfo.class);
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
+                .writeVibrationReportedAsync(argumentCaptor.capture());
+
+        VibrationStats.StatsInfo statsInfo = argumentCaptor.getValue();
+        assertEquals(UID, statsInfo.uid);
+        assertEquals(FrameworkStatsLog.VIBRATION_REPORTED__VIBRATION_TYPE__EXTERNAL,
+                statsInfo.vibrationType);
+        assertEquals(VibrationAttributes.USAGE_ALARM, statsInfo.usage);
+        assertEquals(Vibration.Status.FINISHED.getProtoEnumValue(), statsInfo.status);
+        assertTrue(statsInfo.totalDurationMillis > 0);
+        assertTrue(
+                "Expected vibrator ON for at least 10ms, got " + statsInfo.vibratorOnMillis + "ms",
+                statsInfo.vibratorOnMillis >= 10);
+        assertEquals(2, statsInfo.halSetExternalControlCount);
+    }
+
+    @Test
+    public void frameworkStats_waveformVibration_reportsAllMetrics() throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        VibratorManagerService service = createSystemReadyService();
+        vibrateAndWaitUntilFinished(service,
+                VibrationEffect.createWaveform(new long[] {0, 10, 20, 10}, -1), RINGTONE_ATTRS);
+
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
+                .writeVibratorStateOnAsync(eq(UID), anyLong());
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
+                .writeVibratorStateOffAsync(eq(UID));
+
+        ArgumentCaptor<VibrationStats.StatsInfo> argumentCaptor =
+                ArgumentCaptor.forClass(VibrationStats.StatsInfo.class);
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
+                .writeVibrationReportedAsync(argumentCaptor.capture());
+
+        VibrationStats.StatsInfo metrics = argumentCaptor.getValue();
+        assertEquals(UID, metrics.uid);
+        assertEquals(FrameworkStatsLog.VIBRATION_REPORTED__VIBRATION_TYPE__SINGLE,
+                metrics.vibrationType);
+        assertEquals(VibrationAttributes.USAGE_RINGTONE, metrics.usage);
+        assertEquals(Vibration.Status.FINISHED.getProtoEnumValue(), metrics.status);
+        assertTrue("Total duration was too low, " + metrics.totalDurationMillis + "ms",
+                metrics.totalDurationMillis >= 20);
+        assertTrue("Vibrator ON duration was too low, " + metrics.vibratorOnMillis + "ms",
+                metrics.vibratorOnMillis >= 20);
+
+        // All unrelated metrics are empty.
+        assertEquals(0, metrics.repeatCount);
+        assertEquals(0, metrics.halComposeCount);
+        assertEquals(0, metrics.halComposePwleCount);
+        assertEquals(0, metrics.halPerformCount);
+        assertEquals(0, metrics.halSetExternalControlCount);
+        assertEquals(0, metrics.halCompositionSize);
+        assertEquals(0, metrics.halPwleSize);
+        assertNull(metrics.halSupportedCompositionPrimitivesUsed);
+        assertNull(metrics.halSupportedEffectsUsed);
+        assertNull(metrics.halUnsupportedCompositionPrimitivesUsed);
+        assertNull(metrics.halUnsupportedEffectsUsed);
+
+        // Accommodate for ramping off config that might add extra setAmplitudes.
+        assertEquals(2, metrics.halOnCount);
+        assertTrue(metrics.halOffCount > 0);
+        assertTrue(metrics.halSetAmplitudeCount >= 2);
+    }
+
+    @Test
+    public void frameworkStats_repeatingVibration_reportsAllMetrics() throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+
+        VibratorManagerService service = createSystemReadyService();
+        vibrate(service, VibrationEffect.createWaveform(new long[] {10, 100}, 1), RINGTONE_ATTRS);
+
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
+                .writeVibratorStateOnAsync(eq(UID), anyLong());
+
+        // Wait for at least one loop before cancelling it.
+        Thread.sleep(100);
+        service.cancelVibrate(VibrationAttributes.USAGE_RINGTONE, service);
+
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
+                .writeVibratorStateOffAsync(eq(UID));
+
+        ArgumentCaptor<VibrationStats.StatsInfo> argumentCaptor =
+                ArgumentCaptor.forClass(VibrationStats.StatsInfo.class);
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
+                .writeVibrationReportedAsync(argumentCaptor.capture());
+
+        VibrationStats.StatsInfo metrics = argumentCaptor.getValue();
+        assertEquals(UID, metrics.uid);
+        assertEquals(FrameworkStatsLog.VIBRATION_REPORTED__VIBRATION_TYPE__REPEATED,
+                metrics.vibrationType);
+        assertEquals(VibrationAttributes.USAGE_RINGTONE, metrics.usage);
+        assertEquals(Vibration.Status.CANCELLED_BY_USER.getProtoEnumValue(), metrics.status);
+        assertTrue("Total duration was too low, " + metrics.totalDurationMillis + "ms",
+                metrics.totalDurationMillis >= 100);
+        assertTrue("Vibrator ON duration was too low, " + metrics.vibratorOnMillis + "ms",
+                metrics.vibratorOnMillis >= 100);
+
+        // All unrelated metrics are empty.
+        assertTrue(metrics.repeatCount > 0);
+        assertEquals(0, metrics.halComposeCount);
+        assertEquals(0, metrics.halComposePwleCount);
+        assertEquals(0, metrics.halPerformCount);
+        assertEquals(0, metrics.halSetExternalControlCount);
+        assertEquals(0, metrics.halCompositionSize);
+        assertEquals(0, metrics.halPwleSize);
+        assertNull(metrics.halSupportedCompositionPrimitivesUsed);
+        assertNull(metrics.halSupportedEffectsUsed);
+        assertNull(metrics.halUnsupportedCompositionPrimitivesUsed);
+        assertNull(metrics.halUnsupportedEffectsUsed);
+
+        // Accommodate for ramping off config that might add extra setAmplitudes.
+        assertTrue(metrics.halOnCount > 0);
+        assertTrue(metrics.halOffCount > 0);
+        assertTrue(metrics.halSetAmplitudeCount > 0);
+    }
+
+    @Test
+    public void frameworkStats_prebakedAndComposedVibrations_reportsAllMetrics() throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+        mVibratorProviders.get(1).setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_TICK);
+
+        VibratorManagerService service = createSystemReadyService();
+        vibrateAndWaitUntilFinished(service,
+                VibrationEffect.startComposition()
+                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
+                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK))
+                        .addEffect(VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK))
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_CLICK)
+                        .compose(),
+                ALARM_ATTRS);
+
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
+                .writeVibratorStateOnAsync(eq(UID), anyLong());
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
+                .writeVibratorStateOffAsync(eq(UID));
+
+        ArgumentCaptor<VibrationStats.StatsInfo> argumentCaptor =
+                ArgumentCaptor.forClass(VibrationStats.StatsInfo.class);
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
+                .writeVibrationReportedAsync(argumentCaptor.capture());
+
+        VibrationStats.StatsInfo metrics = argumentCaptor.getValue();
+        assertEquals(UID, metrics.uid);
+        assertEquals(FrameworkStatsLog.VIBRATION_REPORTED__VIBRATION_TYPE__SINGLE,
+                metrics.vibrationType);
+        assertEquals(VibrationAttributes.USAGE_ALARM, metrics.usage);
+        assertEquals(Vibration.Status.FINISHED.getProtoEnumValue(), metrics.status);
+
+        // At least 4 effect/primitive played, 20ms each, plus configured fallback.
+        assertTrue("Total duration was too low, " + metrics.totalDurationMillis + "ms",
+                metrics.totalDurationMillis >= 80);
+        assertTrue("Vibrator ON duration was too low, " + metrics.vibratorOnMillis + "ms",
+                metrics.vibratorOnMillis >= 80);
+
+        // Related metrics were collected.
+        assertEquals(2, metrics.halComposeCount); // TICK+TICK, then CLICK+CLICK
+        assertEquals(3, metrics.halPerformCount); // CLICK, TICK, then CLICK
+        assertEquals(4, metrics.halCompositionSize); // 2*TICK + 2*CLICK
+        // No repetitions in reported effect/primitive IDs.
+        assertArrayEquals(new int[] {VibrationEffect.Composition.PRIMITIVE_TICK},
+                metrics.halSupportedCompositionPrimitivesUsed);
+        assertArrayEquals(new int[] {VibrationEffect.Composition.PRIMITIVE_CLICK},
+                metrics.halUnsupportedCompositionPrimitivesUsed);
+        assertArrayEquals(new int[] {VibrationEffect.EFFECT_CLICK},
+                metrics.halSupportedEffectsUsed);
+        assertArrayEquals(new int[] {VibrationEffect.EFFECT_TICK},
+                metrics.halUnsupportedEffectsUsed);
+
+        // All unrelated metrics are empty.
+        assertEquals(0, metrics.repeatCount);
+        assertEquals(0, metrics.halComposePwleCount);
+        assertEquals(0, metrics.halSetExternalControlCount);
+        assertEquals(0, metrics.halPwleSize);
+
+        // Accommodate for ramping off config that might add extra setAmplitudes
+        // for the effect that plays the fallback instead of "perform".
+        assertTrue(metrics.halOnCount > 0);
+        assertTrue(metrics.halOffCount > 0);
+        assertTrue(metrics.halSetAmplitudeCount > 0);
+    }
+
+    @Test
+    public void frameworkStats_interruptingVibrations_reportsAllMetrics() throws Exception {
+        mockVibrators(1);
+        VibratorManagerService service = createSystemReadyService();
+
+        vibrate(service, VibrationEffect.createOneShot(1_000, 128), HAPTIC_FEEDBACK_ATTRS);
+
+        // VibrationThread will start this vibration async, so wait until vibration is triggered.
+        assertTrue(waitUntil(s -> !mVibratorProviders.get(1).getAllEffectSegments().isEmpty(),
+                service, TEST_TIMEOUT_MILLIS));
+
+        vibrateAndWaitUntilFinished(service, VibrationEffect.createOneShot(10, 255), ALARM_ATTRS);
+
+        ArgumentCaptor<VibrationStats.StatsInfo> argumentCaptor =
+                ArgumentCaptor.forClass(VibrationStats.StatsInfo.class);
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS).times(2))
+                .writeVibrationReportedAsync(argumentCaptor.capture());
+
+        VibrationStats.StatsInfo touchMetrics = argumentCaptor.getAllValues().get(0);
+        assertEquals(UID, touchMetrics.uid);
+        assertEquals(VibrationAttributes.USAGE_TOUCH, touchMetrics.usage);
+        assertEquals(Vibration.Status.CANCELLED_SUPERSEDED.getProtoEnumValue(),
+                touchMetrics.status);
+        assertTrue(touchMetrics.endedBySameUid);
+        assertEquals(VibrationAttributes.USAGE_ALARM, touchMetrics.endedByUsage);
+        assertEquals(-1, touchMetrics.interruptedUsage);
+
+        VibrationStats.StatsInfo alarmMetrics = argumentCaptor.getAllValues().get(1);
+        assertEquals(UID, alarmMetrics.uid);
+        assertEquals(VibrationAttributes.USAGE_ALARM, alarmMetrics.usage);
+        assertEquals(Vibration.Status.FINISHED.getProtoEnumValue(), alarmMetrics.status);
+        assertFalse(alarmMetrics.endedBySameUid);
+        assertEquals(-1, alarmMetrics.endedByUsage);
+        assertEquals(VibrationAttributes.USAGE_TOUCH, alarmMetrics.interruptedUsage);
+    }
+
+    @Test
+    public void frameworkStats_ignoredVibration_reportsStatus() throws Exception {
+        setUserSetting(Settings.System.RING_VIBRATION_INTENSITY,
+                Vibrator.VIBRATION_INTENSITY_OFF);
+
+        mockVibrators(1);
+        VibratorManagerService service = createSystemReadyService();
+        mRegisteredPowerModeListener.onLowPowerModeChanged(LOW_POWER_STATE);
+
+        // Haptic feedback ignored in low power state
+        vibrateAndWaitUntilFinished(service, VibrationEffect.createOneShot(100, 128),
+                HAPTIC_FEEDBACK_ATTRS);
+        // Ringtone vibration user settings are off
+        vibrateAndWaitUntilFinished(service, VibrationEffect.createOneShot(200, 128),
+                RINGTONE_ATTRS);
+
+        ArgumentCaptor<VibrationStats.StatsInfo> argumentCaptor =
+                ArgumentCaptor.forClass(VibrationStats.StatsInfo.class);
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS).times(2))
+                .writeVibrationReportedAsync(argumentCaptor.capture());
+
+        VibrationStats.StatsInfo touchMetrics = argumentCaptor.getAllValues().get(0);
+        assertEquals(UID, touchMetrics.uid);
+        assertEquals(VibrationAttributes.USAGE_TOUCH, touchMetrics.usage);
+        assertEquals(Vibration.Status.IGNORED_FOR_POWER.getProtoEnumValue(), touchMetrics.status);
+
+        VibrationStats.StatsInfo ringtoneMetrics = argumentCaptor.getAllValues().get(1);
+        assertEquals(UID, ringtoneMetrics.uid);
+        assertEquals(VibrationAttributes.USAGE_RINGTONE, ringtoneMetrics.usage);
+        assertEquals(Vibration.Status.IGNORED_FOR_SETTINGS.getProtoEnumValue(),
+                ringtoneMetrics.status);
+
+        for (VibrationStats.StatsInfo metrics : argumentCaptor.getAllValues()) {
+            // Latencies are empty since vibrations never started
+            assertEquals(0, metrics.startLatencyMillis);
+            assertEquals(0, metrics.endLatencyMillis);
+            assertEquals(0, metrics.vibratorOnMillis);
+
+            // All unrelated metrics are empty.
+            assertEquals(0, metrics.repeatCount);
+            assertEquals(0, metrics.halComposeCount);
+            assertEquals(0, metrics.halComposePwleCount);
+            assertEquals(0, metrics.halOffCount);
+            assertEquals(0, metrics.halOnCount);
+            assertEquals(0, metrics.halPerformCount);
+            assertEquals(0, metrics.halSetExternalControlCount);
+            assertEquals(0, metrics.halCompositionSize);
+            assertEquals(0, metrics.halPwleSize);
+            assertNull(metrics.halSupportedCompositionPrimitivesUsed);
+            assertNull(metrics.halSupportedEffectsUsed);
+            assertNull(metrics.halUnsupportedCompositionPrimitivesUsed);
+            assertNull(metrics.halUnsupportedEffectsUsed);
+        }
+    }
+
+    @Test
+    public void frameworkStats_multiVibrators_reportsAllMetrics() throws Exception {
+        mockVibrators(1, 2);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        mVibratorProviders.get(1).setSupportedPrimitives(
+                VibrationEffect.Composition.PRIMITIVE_TICK);
+        mVibratorProviders.get(2).setSupportedEffects(VibrationEffect.EFFECT_TICK);
+
+        VibratorManagerService service = createSystemReadyService();
+        vibrateAndWaitUntilFinished(service,
+                CombinedVibration.startParallel()
+                        .addVibrator(1,
+                                VibrationEffect.startComposition()
+                                        .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK)
+                                        .compose())
+                        .addVibrator(2,
+                                VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK))
+                        .combine(),
+                NOTIFICATION_ATTRS);
+
+        SparseBooleanArray expectedEffectsUsed = new SparseBooleanArray();
+        expectedEffectsUsed.put(VibrationEffect.EFFECT_TICK, true);
+
+        SparseBooleanArray expectedPrimitivesUsed = new SparseBooleanArray();
+        expectedPrimitivesUsed.put(VibrationEffect.Composition.PRIMITIVE_TICK, true);
+
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
+                .writeVibratorStateOnAsync(eq(UID), anyLong());
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
+                .writeVibratorStateOffAsync(eq(UID));
+
+        ArgumentCaptor<VibrationStats.StatsInfo> argumentCaptor =
+                ArgumentCaptor.forClass(VibrationStats.StatsInfo.class);
+        verify(mVibratorFrameworkStatsLoggerMock, timeout(TEST_TIMEOUT_MILLIS))
+                .writeVibrationReportedAsync(argumentCaptor.capture());
+
+        VibrationStats.StatsInfo metrics = argumentCaptor.getValue();
+        assertEquals(UID, metrics.uid);
+        assertEquals(FrameworkStatsLog.VIBRATION_REPORTED__VIBRATION_TYPE__SINGLE,
+                metrics.vibrationType);
+        assertEquals(VibrationAttributes.USAGE_NOTIFICATION, metrics.usage);
+        assertEquals(Vibration.Status.FINISHED.getProtoEnumValue(), metrics.status);
+        assertTrue(metrics.totalDurationMillis >= 20);
+
+        // vibratorOnMillis accumulates both vibrators, it's 20 for each constant.
+        assertEquals(40, metrics.vibratorOnMillis);
+
+        // Related metrics were collected.
+        assertEquals(1, metrics.halComposeCount);
+        assertEquals(1, metrics.halPerformCount);
+        assertEquals(1, metrics.halCompositionSize);
+        assertEquals(2, metrics.halOffCount);
+        assertArrayEquals(new int[] {VibrationEffect.Composition.PRIMITIVE_TICK},
+                metrics.halSupportedCompositionPrimitivesUsed);
+        assertArrayEquals(new int[] {VibrationEffect.EFFECT_TICK},
+                metrics.halSupportedEffectsUsed);
+
+        // All unrelated metrics are empty.
+        assertEquals(0, metrics.repeatCount);
+        assertEquals(0, metrics.halComposePwleCount);
+        assertEquals(0, metrics.halOnCount);
+        assertEquals(0, metrics.halSetAmplitudeCount);
+        assertEquals(0, metrics.halSetExternalControlCount);
+        assertEquals(0, metrics.halPwleSize);
+        assertNull(metrics.halUnsupportedCompositionPrimitivesUsed);
+        assertNull(metrics.halUnsupportedEffectsUsed);
+    }
+
+    private VibrationEffectSegment expectedPrebaked(int effectId) {
+        return expectedPrebaked(effectId, VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+    }
+
+    private VibrationEffectSegment expectedPrebaked(int effectId, int effectStrength) {
+        return new PrebakedSegment(effectId, false, effectStrength);
+    }
+
+    private void mockCapabilities(long... capabilities) {
+        when(mNativeWrapperMock.getCapabilities()).thenReturn(
+                Arrays.stream(capabilities).reduce(0, (a, b) -> a | b));
+    }
+
+    private void mockVibrators(int... vibratorIds) {
+        for (int vibratorId : vibratorIds) {
+            mVibratorProviders.put(vibratorId,
+                    new FakeVibratorControllerProvider(mTestLooper.getLooper()));
+        }
+        when(mNativeWrapperMock.getVibratorIds()).thenReturn(vibratorIds);
+    }
+
+    private void cancelVibrate(VibratorManagerService service) {
+        service.cancelVibrate(VibrationAttributes.USAGE_FILTER_MATCH_ALL, service);
+    }
+
+    private IVibratorStateListener mockVibratorStateListener() {
+        IVibratorStateListener listenerMock = mock(IVibratorStateListener.class);
+        IBinder binderMock = mock(IBinder.class);
+        when(listenerMock.asBinder()).thenReturn(binderMock);
+        return listenerMock;
+    }
+
+    private InputDevice createInputDeviceWithVibrator(int id) {
+        return new InputDevice.Builder()
+                .setId(id)
+                .setName("Test Device " + id)
+                .setHasVibrator(true)
+                .build();
+    }
+
+    private static <T> void addLocalServiceMock(Class<T> clazz, T mock) {
+        LocalServices.removeServiceForTest(clazz);
+        LocalServices.addService(clazz, mock);
+    }
+
+    private void setRingerMode(int ringerMode) {
+        when(mAudioManagerMock.getRingerModeInternal()).thenReturn(ringerMode);
+    }
+
+    private void setUserSetting(String settingName, int value) {
+        Settings.System.putIntForUser(
+                mContextSpy.getContentResolver(), settingName, value, UserHandle.USER_CURRENT);
+    }
+
+    private void vibrateAndWaitUntilFinished(VibratorManagerService service, VibrationEffect effect,
+            VibrationAttributes attrs) throws InterruptedException {
+        vibrateAndWaitUntilFinished(service, CombinedVibration.createParallel(effect), attrs);
+    }
+
+    private void vibrateAndWaitUntilFinished(VibratorManagerService service,
+            CombinedVibration effect, VibrationAttributes attrs) throws InterruptedException {
+        HalVibration vib =
+                service.vibrateInternal(UID, Display.DEFAULT_DISPLAY, PACKAGE_NAME, effect, attrs,
+                        "some reason", service);
+        if (vib != null) {
+            vib.waitForEnd();
+        }
+    }
+
+    private void vibrate(VibratorManagerService service, VibrationEffect effect,
+            VibrationAttributes attrs) {
+        vibrate(service, CombinedVibration.createParallel(effect), attrs);
+    }
+
+    private void vibrate(VibratorManagerService service, CombinedVibration effect,
+            VibrationAttributes attrs) {
+        vibrateWithDisplay(service, Display.DEFAULT_DISPLAY, effect, attrs);
+    }
+
+    private void vibrateWithDisplay(VibratorManagerService service, int displayId,
+            CombinedVibration effect, VibrationAttributes attrs) {
+        service.vibrate(UID, displayId, PACKAGE_NAME, effect, attrs, "some reason", service);
+    }
+
+    private boolean waitUntil(Predicate<VibratorManagerService> predicate,
+            VibratorManagerService service, long timeout) throws InterruptedException {
+        long timeoutTimestamp = SystemClock.uptimeMillis() + timeout;
+        boolean predicateResult = false;
+        while (!predicateResult && SystemClock.uptimeMillis() < timeoutTimestamp) {
+            Thread.sleep(10);
+            predicateResult = predicate.test(service);
+        }
+        return predicateResult;
+    }
+}
diff --git a/services/tests/vibrator/utils/android/os/test/FakeVibrator.java b/services/tests/vibrator/utils/android/os/test/FakeVibrator.java
new file mode 100644
index 0000000..23398e6
--- /dev/null
+++ b/services/tests/vibrator/utils/android/os/test/FakeVibrator.java
@@ -0,0 +1,79 @@
+/*
+ * 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 android.os.test;
+
+import android.annotation.NonNull;
+import android.content.Context;
+import android.hardware.vibrator.IVibrator;
+import android.os.VibrationAttributes;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.os.VibratorInfo;
+
+/** Fake implementation of {@link Vibrator} for service tests. */
+public final class FakeVibrator extends Vibrator {
+    private final VibratorInfo mVibratorInfo;
+
+    public FakeVibrator(Context context) {
+        this(context, /* supportedPrimitives= */ null);
+    }
+
+    public FakeVibrator(Context context, int[] supportedPrimitives) {
+        super(context);
+        mVibratorInfo = buildInfoSupportingPrimitives(supportedPrimitives);
+    }
+
+    @Override
+    public boolean hasVibrator() {
+        return true;
+    }
+
+    @Override
+    public boolean hasAmplitudeControl() {
+        return true;
+    }
+
+    @Override
+    public VibratorInfo getInfo() {
+        return mVibratorInfo;
+    }
+
+    @Override
+    public void vibrate(int uid, String opPkg, @NonNull VibrationEffect vibe, String reason,
+            @NonNull VibrationAttributes attributes) {
+    }
+
+    @Override
+    public void cancel() {
+    }
+
+    @Override
+    public void cancel(int usageFilter) {
+    }
+
+    private static VibratorInfo buildInfoSupportingPrimitives(int... primitives) {
+        if (primitives == null || primitives.length == 0) {
+            return VibratorInfo.EMPTY_VIBRATOR_INFO;
+        }
+        VibratorInfo.Builder builder = new VibratorInfo.Builder(/* id= */ 1)
+                .setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
+        for (int primitive : primitives) {
+            builder.setSupportedPrimitive(primitive, 10);
+        }
+        return builder.build();
+    }
+}
diff --git a/services/tests/vibrator/utils/com/android/server/vibrator/FakeVibratorControllerProvider.java b/services/tests/vibrator/utils/com/android/server/vibrator/FakeVibratorControllerProvider.java
new file mode 100644
index 0000000..12815fa
--- /dev/null
+++ b/services/tests/vibrator/utils/com/android/server/vibrator/FakeVibratorControllerProvider.java
@@ -0,0 +1,379 @@
+/*
+ * 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.server.vibrator;
+
+import android.annotation.Nullable;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.VibrationEffect;
+import android.os.VibratorInfo;
+import android.os.vibrator.PrebakedSegment;
+import android.os.vibrator.PrimitiveSegment;
+import android.os.vibrator.RampSegment;
+import android.os.vibrator.StepSegment;
+import android.os.vibrator.VibrationEffectSegment;
+
+import com.android.server.vibrator.VibratorController.OnVibrationCompleteListener;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * Provides {@link VibratorController} with configurable vibrator hardware capabilities and
+ * fake interactions for tests.
+ */
+public final class FakeVibratorControllerProvider {
+    private static final int EFFECT_DURATION = 20;
+
+    private final Map<Long, PrebakedSegment> mEnabledAlwaysOnEffects = new HashMap<>();
+    private final Map<Long, List<VibrationEffectSegment>> mEffectSegments = new TreeMap<>();
+    private final Map<Long, List<Integer>> mBraking = new HashMap<>();
+    private final List<Float> mAmplitudes = new ArrayList<>();
+    private final List<Boolean> mExternalControlStates = new ArrayList<>();
+    private final Handler mHandler;
+    private final FakeNativeWrapper mNativeWrapper;
+
+    private boolean mIsAvailable = true;
+    private boolean mIsInfoLoadSuccessful = true;
+    private long mOnLatency;
+    private long mOffLatency;
+    private int mOffCount;
+
+    private int mCapabilities;
+    private int[] mSupportedEffects;
+    private int[] mSupportedBraking;
+    private int[] mSupportedPrimitives;
+    private int mCompositionSizeMax;
+    private int mPwleSizeMax;
+    private float mMinFrequency = Float.NaN;
+    private float mResonantFrequency = Float.NaN;
+    private float mFrequencyResolution = Float.NaN;
+    private float mQFactor = Float.NaN;
+    private float[] mMaxAmplitudes;
+
+    void recordEffectSegment(long vibrationId, VibrationEffectSegment segment) {
+        mEffectSegments.computeIfAbsent(vibrationId, k -> new ArrayList<>()).add(segment);
+    }
+
+    void recordBraking(long vibrationId, int braking) {
+        mBraking.computeIfAbsent(vibrationId, k -> new ArrayList<>()).add(braking);
+    }
+
+    private final class FakeNativeWrapper extends VibratorController.NativeWrapper {
+        public int vibratorId;
+        public OnVibrationCompleteListener listener;
+        public boolean isInitialized;
+
+        @Override
+        public void init(int vibratorId, OnVibrationCompleteListener listener) {
+            isInitialized = true;
+            this.vibratorId = vibratorId;
+            this.listener = listener;
+        }
+
+        @Override
+        public boolean isAvailable() {
+            return mIsAvailable;
+        }
+
+        @Override
+        public long on(long milliseconds, long vibrationId) {
+            recordEffectSegment(vibrationId, new StepSegment(VibrationEffect.DEFAULT_AMPLITUDE,
+                    /* frequencyHz= */ 0, (int) milliseconds));
+            applyLatency(mOnLatency);
+            scheduleListener(milliseconds, vibrationId);
+            return milliseconds;
+        }
+
+        @Override
+        public void off() {
+            mOffCount++;
+            applyLatency(mOffLatency);
+        }
+
+        @Override
+        public void setAmplitude(float amplitude) {
+            mAmplitudes.add(amplitude);
+            applyLatency(mOnLatency);
+        }
+
+        @Override
+        public long perform(long effect, long strength, long vibrationId) {
+            if (mSupportedEffects == null
+                    || Arrays.binarySearch(mSupportedEffects, (int) effect) < 0) {
+                return 0;
+            }
+            recordEffectSegment(vibrationId,
+                    new PrebakedSegment((int) effect, false, (int) strength));
+            applyLatency(mOnLatency);
+            scheduleListener(EFFECT_DURATION, vibrationId);
+            return EFFECT_DURATION;
+        }
+
+        @Override
+        public long compose(PrimitiveSegment[] primitives, long vibrationId) {
+            if (mSupportedPrimitives == null) {
+                return 0;
+            }
+            for (PrimitiveSegment primitive : primitives) {
+                if (Arrays.binarySearch(mSupportedPrimitives, primitive.getPrimitiveId()) < 0) {
+                    return 0;
+                }
+            }
+            long duration = 0;
+            for (PrimitiveSegment primitive : primitives) {
+                duration += EFFECT_DURATION + primitive.getDelay();
+                recordEffectSegment(vibrationId, primitive);
+            }
+            applyLatency(mOnLatency);
+            scheduleListener(duration, vibrationId);
+            return duration;
+        }
+
+        @Override
+        public long composePwle(RampSegment[] primitives, int braking, long vibrationId) {
+            long duration = 0;
+            for (RampSegment primitive : primitives) {
+                duration += primitive.getDuration();
+                recordEffectSegment(vibrationId, primitive);
+            }
+            recordBraking(vibrationId, braking);
+            applyLatency(mOnLatency);
+            scheduleListener(duration, vibrationId);
+            return duration;
+        }
+
+        @Override
+        public void setExternalControl(boolean enabled) {
+            mExternalControlStates.add(enabled);
+        }
+
+        @Override
+        public void alwaysOnEnable(long id, long effect, long strength) {
+            PrebakedSegment prebaked = new PrebakedSegment((int) effect, false, (int) strength);
+            mEnabledAlwaysOnEffects.put(id, prebaked);
+        }
+
+        @Override
+        public void alwaysOnDisable(long id) {
+            mEnabledAlwaysOnEffects.remove(id);
+        }
+
+        @Override
+        public boolean getInfo(VibratorInfo.Builder infoBuilder) {
+            infoBuilder.setCapabilities(mCapabilities);
+            infoBuilder.setSupportedBraking(mSupportedBraking);
+            infoBuilder.setPwleSizeMax(mPwleSizeMax);
+            infoBuilder.setSupportedEffects(mSupportedEffects);
+            if (mSupportedPrimitives != null) {
+                for (int primitive : mSupportedPrimitives) {
+                    infoBuilder.setSupportedPrimitive(primitive, EFFECT_DURATION);
+                }
+            }
+            infoBuilder.setCompositionSizeMax(mCompositionSizeMax);
+            infoBuilder.setQFactor(mQFactor);
+            infoBuilder.setFrequencyProfile(new VibratorInfo.FrequencyProfile(
+                    mResonantFrequency, mMinFrequency, mFrequencyResolution, mMaxAmplitudes));
+            return mIsInfoLoadSuccessful;
+        }
+
+        private void applyLatency(long latencyMillis) {
+            try {
+                if (latencyMillis > 0) {
+                    Thread.sleep(latencyMillis);
+                }
+            } catch (InterruptedException e) {
+            }
+        }
+
+        private void scheduleListener(long vibrationDuration, long vibrationId) {
+            mHandler.postDelayed(() -> listener.onComplete(vibratorId, vibrationId),
+                    vibrationDuration);
+        }
+    }
+
+    public FakeVibratorControllerProvider(Looper looper) {
+        mHandler = new Handler(looper);
+        mNativeWrapper = new FakeNativeWrapper();
+    }
+
+    public VibratorController newVibratorController(
+            int vibratorId, OnVibrationCompleteListener listener) {
+        return new VibratorController(vibratorId, listener, mNativeWrapper);
+    }
+
+    /** Return {@code true} if this controller was initialized. */
+    public boolean isInitialized() {
+        return mNativeWrapper.isInitialized;
+    }
+
+    /**
+     * Disable fake vibrator hardware, mocking a state where the underlying service is unavailable.
+     */
+    public void disableVibrators() {
+        mIsAvailable = false;
+    }
+
+    /**
+     * Sets the result for the method that loads the {@link VibratorInfo}, for faking a vibrator
+     * that fails to load some of the hardware data.
+     */
+    public void setVibratorInfoLoadSuccessful(boolean successful) {
+        mIsInfoLoadSuccessful = successful;
+    }
+
+    /**
+     * Sets the latency this controller should fake for turning the vibrator hardware on or setting
+     * the vibration amplitude.
+     */
+    public void setOnLatency(long millis) {
+        mOnLatency = millis;
+    }
+
+    /** Sets the latency this controller should fake for turning the vibrator off. */
+    public void setOffLatency(long millis) {
+        mOffLatency = millis;
+    }
+
+    /** Set the capabilities of the fake vibrator hardware. */
+    public void setCapabilities(int... capabilities) {
+        mCapabilities = Arrays.stream(capabilities).reduce(0, (a, b) -> a | b);
+    }
+
+    /** Set the effects supported by the fake vibrator hardware. */
+    public void setSupportedEffects(int... effects) {
+        if (effects != null) {
+            effects = Arrays.copyOf(effects, effects.length);
+            Arrays.sort(effects);
+        }
+        mSupportedEffects = effects;
+    }
+
+    /** Set the effects supported by the fake vibrator hardware. */
+    public void setSupportedBraking(int... braking) {
+        if (braking != null) {
+            braking = Arrays.copyOf(braking, braking.length);
+            Arrays.sort(braking);
+        }
+        mSupportedBraking = braking;
+    }
+
+    /** Set the primitives supported by the fake vibrator hardware. */
+    public void setSupportedPrimitives(int... primitives) {
+        if (primitives != null) {
+            primitives = Arrays.copyOf(primitives, primitives.length);
+            Arrays.sort(primitives);
+        }
+        mSupportedPrimitives = primitives;
+    }
+
+    /** Set the max number of primitives allowed in a composition by the fake vibrator hardware. */
+    public void setCompositionSizeMax(int compositionSizeMax) {
+        mCompositionSizeMax = compositionSizeMax;
+    }
+
+    /** Set the max number of PWLEs allowed in a composition by the fake vibrator hardware. */
+    public void setPwleSizeMax(int pwleSizeMax) {
+        mPwleSizeMax = pwleSizeMax;
+    }
+
+    /** Set the resonant frequency of the fake vibrator hardware. */
+    public void setResonantFrequency(float frequencyHz) {
+        mResonantFrequency = frequencyHz;
+    }
+
+    /** Set the minimum frequency of the fake vibrator hardware. */
+    public void setMinFrequency(float frequencyHz) {
+        mMinFrequency = frequencyHz;
+    }
+
+    /** Set the frequency resolution of the fake vibrator hardware. */
+    public void setFrequencyResolution(float frequencyHz) {
+        mFrequencyResolution = frequencyHz;
+    }
+
+    /** Set the Q factor of the fake vibrator hardware. */
+    public void setQFactor(float qFactor) {
+        mQFactor = qFactor;
+    }
+
+    /** Set the max amplitude supported for each frequency f the fake vibrator hardware. */
+    public void setMaxAmplitudes(float... maxAmplitudes) {
+        mMaxAmplitudes = maxAmplitudes;
+    }
+
+    /**
+     * Return the amplitudes set by this controller, including zeroes for each time the vibrator was
+     * turned off.
+     */
+    public List<Float> getAmplitudes() {
+        return new ArrayList<>(mAmplitudes);
+    }
+
+    /** Return the braking values passed to the compose PWLE method. */
+    public List<Integer> getBraking(long vibrationId) {
+        if (mBraking.containsKey(vibrationId)) {
+            return new ArrayList<>(mBraking.get(vibrationId));
+        } else {
+            return new ArrayList<>();
+        }
+    }
+
+    /** Return list of {@link VibrationEffectSegment} played by this controller, in order. */
+    public List<VibrationEffectSegment> getEffectSegments(long vibrationId) {
+        if (mEffectSegments.containsKey(vibrationId)) {
+            return new ArrayList<>(mEffectSegments.get(vibrationId));
+        } else {
+            return new ArrayList<>();
+        }
+    }
+
+    /**
+     * Returns a list of all vibrations' effect segments, for external-use where vibration IDs
+     * aren't exposed.
+     */
+    public List<VibrationEffectSegment> getAllEffectSegments() {
+        // Returns segments in order of vibrationId, which increases over time. TreeMap gives order.
+        ArrayList<VibrationEffectSegment> result = new ArrayList<>();
+        for (List<VibrationEffectSegment> subList : mEffectSegments.values()) {
+            result.addAll(subList);
+        }
+        return result;
+    }
+    /** Return list of states set for external control to the fake vibrator hardware. */
+    public List<Boolean> getExternalControlStates() {
+        return mExternalControlStates;
+    }
+
+    /** Returns the number of times the vibrator was turned off. */
+    public int getOffCount() {
+        return mOffCount;
+    }
+
+    /**
+     * Return the {@link PrebakedSegment} effect enabled with given id, or {@code null} if
+     * missing or disabled.
+     */
+    @Nullable
+    public PrebakedSegment getAlwaysOnEffect(int id) {
+        return mEnabledAlwaysOnEffects.get((long) id);
+    }
+}
diff --git a/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLoggingLatencyTest.java b/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLoggingLatencyTest.java
index 63b8e17..efe1af3 100644
--- a/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLoggingLatencyTest.java
+++ b/services/tests/voiceinteractiontests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLoggingLatencyTest.java
@@ -42,6 +42,7 @@
 import androidx.test.platform.app.InstrumentationRegistry;
 
 import com.android.internal.util.FakeLatencyTracker;
+import com.android.modules.utils.testing.TestableDeviceConfig.TestableDeviceConfigRule;
 
 import org.junit.After;
 import org.junit.Before;
@@ -59,6 +60,8 @@
 public class SoundTriggerMiddlewareLoggingLatencyTest {
 
     @Rule
+    public TestableDeviceConfigRule mDeviceConfigRule = new TestableDeviceConfigRule();
+    @Rule
     public Timeout mGlobalTimeout = Timeout.seconds(30);
 
     private FakeLatencyTracker mLatencyTracker;
diff --git a/services/tests/wmtests/Android.bp b/services/tests/wmtests/Android.bp
index 6aa5989..c2812a1 100644
--- a/services/tests/wmtests/Android.bp
+++ b/services/tests/wmtests/Android.bp
@@ -49,6 +49,7 @@
     static_libs: [
         "frameworks-base-testutils",
         "services.core",
+        "service-permission.stubs.system_server",
         "androidx.test.runner",
         "androidx.test.rules",
         "junit-params",
@@ -58,7 +59,6 @@
         "testng",
         "truth-prebuilt",
         "testables",
-        "ub-uiautomator",
         "hamcrest-library",
         "platform-compat-test-rules",
         "CtsSurfaceValidatorLib",
diff --git a/services/tests/wmtests/AndroidManifest.xml b/services/tests/wmtests/AndroidManifest.xml
index 9c79375..42e3383 100644
--- a/services/tests/wmtests/AndroidManifest.xml
+++ b/services/tests/wmtests/AndroidManifest.xml
@@ -58,11 +58,14 @@
         <activity android:name="com.android.server.wm.TaskStackChangedListenerTest$ActivityA" />
         <activity android:name="com.android.server.wm.TaskStackChangedListenerTest$ActivityB" />
         <activity android:name="com.android.server.wm.TaskStackChangedListenerTest$ActivityRequestedOrientationChange" />
-        <activity android:name="com.android.server.wm.TaskStackChangedListenerTest$ActivityTaskChangeCallbacks" />
+        <activity android:name="com.android.server.wm.TaskStackChangedListenerTest$ActivityTaskChangeCallbacks"
+                  android:showWhenLocked="true"
+                  android:turnScreenOn="true" />
         <activity android:name="com.android.server.wm.TaskStackChangedListenerTest$ActivityTaskDescriptionChange" />
         <activity android:name="com.android.server.wm.TaskStackChangedListenerTest$ActivityInVirtualDisplay"
                   android:resizeableActivity="true" />
         <activity android:name="com.android.server.wm.TaskStackChangedListenerTest$LandscapeActivity"
+                  android:configChanges="screenLayout|screenSize|smallestScreenSize|orientation"
                   android:screenOrientation="sensorLandscape"
                   android:showWhenLocked="true"
                   android:turnScreenOn="true" />
@@ -90,7 +93,7 @@
 
         <activity android:name="com.android.server.wm.SurfaceControlViewHostTests$TestActivity" />
 
-        <activity android:name="android.server.wm.scvh.SurfaceSyncGroupActivity"
+        <activity android:name="com.android.server.wm.SurfaceSyncGroupTests$TestActivity"
             android:screenOrientation="locked"
             android:turnScreenOn="true"
             android:theme="@style/WhiteBackgroundTheme"
@@ -109,10 +112,6 @@
             </intent-filter>
         </activity>
 
-        <service android:name="android.view.cts.surfacevalidator.LocalMediaProjectionService"
-            android:foregroundServiceType="mediaProjection"
-            android:enabled="true">
-        </service>
     </application>
 
     <instrumentation
diff --git a/services/tests/wmtests/OWNERS b/services/tests/wmtests/OWNERS
index cece37f..78b867f 100644
--- a/services/tests/wmtests/OWNERS
+++ b/services/tests/wmtests/OWNERS
@@ -3,3 +3,5 @@
 
 # Voice Interaction
 per-file *Assist* = file:/core/java/android/service/voice/OWNERS
+
+natanieljr@google.com
\ No newline at end of file
diff --git a/services/tests/wmtests/src/com/android/server/policy/CombinationKeyTests.java b/services/tests/wmtests/src/com/android/server/policy/CombinationKeyTests.java
index 62875e5..896edff 100644
--- a/services/tests/wmtests/src/com/android/server/policy/CombinationKeyTests.java
+++ b/services/tests/wmtests/src/com/android/server/policy/CombinationKeyTests.java
@@ -27,6 +27,7 @@
 import androidx.test.filters.MediumTest;
 import androidx.test.runner.AndroidJUnit4;
 
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -41,6 +42,11 @@
 public class CombinationKeyTests extends ShortcutKeyTestBase {
     private static final long A11Y_KEY_HOLD_MILLIS = 3500;
 
+    @Before
+    public void setUp() {
+        setUpPhoneWindowManager();
+    }
+
     /**
      * Power-VolDown to take screenshot.
      */
diff --git a/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java b/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java
index 9029bc4..2c35cf0 100644
--- a/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java
+++ b/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java
@@ -44,6 +44,7 @@
 
 import androidx.test.filters.SmallTest;
 
+import org.junit.Before;
 import org.junit.Test;
 
 @Presubmit
@@ -61,6 +62,11 @@
         META_SHORTCUTS.append(KEYCODE_S, Intent.CATEGORY_APP_MESSAGING);
     }
 
+    @Before
+    public void setUp() {
+        setUpPhoneWindowManager();
+    }
+
     /**
      * Test meta+ shortcuts defined in bookmarks.xml.
      */
diff --git a/services/tests/wmtests/src/com/android/server/policy/PowerKeyGestureTests.java b/services/tests/wmtests/src/com/android/server/policy/PowerKeyGestureTests.java
index 6a9f283..6f65406 100644
--- a/services/tests/wmtests/src/com/android/server/policy/PowerKeyGestureTests.java
+++ b/services/tests/wmtests/src/com/android/server/policy/PowerKeyGestureTests.java
@@ -21,10 +21,12 @@
 import static com.android.server.policy.PhoneWindowManager.LONG_PRESS_POWER_ASSISTANT;
 import static com.android.server.policy.PhoneWindowManager.LONG_PRESS_POWER_GLOBAL_ACTIONS;
 import static com.android.server.policy.PhoneWindowManager.SHORT_PRESS_POWER_DREAM_OR_SLEEP;
+import static com.android.server.policy.PhoneWindowManager.SHORT_PRESS_POWER_GO_TO_SLEEP;
 
 import android.provider.Settings;
 import android.view.Display;
 
+import org.junit.Before;
 import org.junit.Test;
 
 /**
@@ -34,11 +36,17 @@
  *  atest WmTests:PowerKeyGestureTests
  */
 public class PowerKeyGestureTests extends ShortcutKeyTestBase {
+    @Before
+    public void setUp() {
+        setUpPhoneWindowManager();
+    }
+
     /**
      * Power single press to turn screen on/off.
      */
     @Test
     public void testPowerSinglePress() {
+        mPhoneWindowManager.overrideShortPressOnPower(SHORT_PRESS_POWER_GO_TO_SLEEP);
         sendKey(KEYCODE_POWER);
         mPhoneWindowManager.assertPowerSleep();
 
diff --git a/services/tests/wmtests/src/com/android/server/policy/ShortcutKeyTestBase.java b/services/tests/wmtests/src/com/android/server/policy/ShortcutKeyTestBase.java
index bf88ce4..f83aecb 100644
--- a/services/tests/wmtests/src/com/android/server/policy/ShortcutKeyTestBase.java
+++ b/services/tests/wmtests/src/com/android/server/policy/ShortcutKeyTestBase.java
@@ -39,6 +39,7 @@
 
 import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
 
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.spy;
 import static com.android.server.policy.WindowManagerPolicy.ACTION_PASS_TO_USER;
 
@@ -53,12 +54,17 @@
 import android.view.KeyEvent;
 import android.view.ViewConfiguration;
 
+import com.android.internal.util.test.FakeSettingsProvider;
+import com.android.internal.util.test.FakeSettingsProviderRule;
+
 import org.junit.After;
-import org.junit.Before;
+import org.junit.Rule;
 
 import java.util.Map;
 
 class ShortcutKeyTestBase {
+    @Rule public FakeSettingsProviderRule mSettingsProviderRule = FakeSettingsProvider.rule();
+
     TestPhoneWindowManager mPhoneWindowManager;
     final Context mContext = spy(getInstrumentation().getTargetContext());
 
@@ -78,18 +84,35 @@
         MODIFIER = unmodifiableMap(map);
     }
 
-    @Before
-    public void setUp() {
+    /** Same as {@link setUpPhoneWindowManager(boolean)}, without supporting settings update. */
+    protected final void setUpPhoneWindowManager() {
+        setUpPhoneWindowManager(/* supportSettingsUpdate= */ false);
+    }
+
+    /**
+     * Creates and sets up a {@link TestPhoneWindowManager} instance.
+     *
+     * <p>Subclasses must call this at the start of the test if they intend to interact with phone
+     * window manager.
+     *
+     * @param supportSettingsUpdate {@code true} if this test should read and listen to provider
+     *      settings values.
+     */
+    protected final void setUpPhoneWindowManager(boolean supportSettingsUpdate) {
         if (Looper.myLooper() == null) {
             Looper.prepare();
         }
 
-        mPhoneWindowManager = new TestPhoneWindowManager(mContext);
+        doReturn(mSettingsProviderRule.mockContentResolver(mContext))
+                .when(mContext).getContentResolver();
+        mPhoneWindowManager = new TestPhoneWindowManager(mContext, supportSettingsUpdate);
     }
 
     @After
     public void tearDown() {
-        mPhoneWindowManager.tearDown();
+        if (mPhoneWindowManager != null) {
+            mPhoneWindowManager.tearDown();
+        }
     }
 
     void sendKeyCombination(int[] keyCodes, long duration) {
diff --git a/services/tests/wmtests/src/com/android/server/policy/ShortcutLoggingTests.java b/services/tests/wmtests/src/com/android/server/policy/ShortcutLoggingTests.java
index feca326..8fadecd 100644
--- a/services/tests/wmtests/src/com/android/server/policy/ShortcutLoggingTests.java
+++ b/services/tests/wmtests/src/com/android/server/policy/ShortcutLoggingTests.java
@@ -19,7 +19,7 @@
 import android.platform.test.annotations.Presubmit;
 import android.view.KeyEvent;
 
-import androidx.test.filters.SmallTest;
+import androidx.test.filters.MediumTest;
 
 import com.android.internal.annotations.Keep;
 import com.android.server.input.KeyboardMetricsCollector.KeyboardLogEvent;
@@ -32,7 +32,7 @@
 import junitparams.Parameters;
 
 @Presubmit
-@SmallTest
+@MediumTest
 @RunWith(JUnitParamsRunner.class)
 public class ShortcutLoggingTests extends ShortcutKeyTestBase {
 
@@ -221,9 +221,8 @@
     }
 
     @Before
-    @Override
     public void setUp() {
-        super.setUp();
+        setUpPhoneWindowManager(/*supportSettingsUpdate*/ true);
         mPhoneWindowManager.overrideKeyEventSource(VENDOR_ID, PRODUCT_ID);
         mPhoneWindowManager.overrideLaunchHome();
         mPhoneWindowManager.overrideSearchKeyBehavior(
diff --git a/services/tests/wmtests/src/com/android/server/policy/StemKeyGestureTests.java b/services/tests/wmtests/src/com/android/server/policy/StemKeyGestureTests.java
index fe8017e..c433e64 100644
--- a/services/tests/wmtests/src/com/android/server/policy/StemKeyGestureTests.java
+++ b/services/tests/wmtests/src/com/android/server/policy/StemKeyGestureTests.java
@@ -16,21 +16,14 @@
 
 package com.android.server.policy;
 
+import static android.provider.Settings.Global.STEM_PRIMARY_BUTTON_SHORT_PRESS;
 import static android.view.KeyEvent.KEYCODE_STEM_PRIMARY;
 
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
 import static com.android.server.policy.PhoneWindowManager.SHORT_PRESS_PRIMARY_LAUNCH_ALL_APPS;
 
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.eq;
-
-import android.content.Context;
-import android.content.res.Resources;
+import android.provider.Settings;
 
 import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.Mockito;
 
 /**
  * Test class for stem key gesture.
@@ -39,17 +32,13 @@
  * atest WmTests:StemKeyGestureTests
  */
 public class StemKeyGestureTests extends ShortcutKeyTestBase {
-    @Mock private Resources mResources;
-
     /**
      * Stem single key should not launch behavior during set up.
      */
     @Test
     public void stemSingleKey_duringSetup_doNothing() {
-        stemKeySetup(
-                () -> overrideBehavior(
-                        com.android.internal.R.integer.config_shortPressOnStemPrimaryBehavior,
-                        SHORT_PRESS_PRIMARY_LAUNCH_ALL_APPS));
+        overrideBehavior(STEM_PRIMARY_BUTTON_SHORT_PRESS, SHORT_PRESS_PRIMARY_LAUNCH_ALL_APPS);
+        setUpPhoneWindowManager(/* supportSettingsUpdate= */ true);
         mPhoneWindowManager.setKeyguardServiceDelegateIsShowing(false);
         mPhoneWindowManager.overrideIsUserSetupComplete(false);
 
@@ -63,10 +52,9 @@
      */
     @Test
     public void stemSingleKey_AfterSetup_openAllApp() {
-        stemKeySetup(
-                () -> overrideBehavior(
-                        com.android.internal.R.integer.config_shortPressOnStemPrimaryBehavior,
-                        SHORT_PRESS_PRIMARY_LAUNCH_ALL_APPS));
+        overrideBehavior(STEM_PRIMARY_BUTTON_SHORT_PRESS, SHORT_PRESS_PRIMARY_LAUNCH_ALL_APPS);
+        setUpPhoneWindowManager(/* supportSettingsUpdate= */ true);
+        mPhoneWindowManager.overrideStartActivity();
         mPhoneWindowManager.setKeyguardServiceDelegateIsShowing(false);
         mPhoneWindowManager.overrideIsUserSetupComplete(true);
 
@@ -75,28 +63,7 @@
         mPhoneWindowManager.assertOpenAllAppView();
     }
 
-    private void stemKeySetup(Runnable behaviorOverrideRunnable) {
-        super.tearDown();
-        setupResourcesMock();
-        behaviorOverrideRunnable.run();
-        super.setUp();
-    }
-
-    private void setupResourcesMock() {
-        Resources realResources = mContext.getResources();
-
-        mResources = Mockito.mock(Resources.class);
-        doReturn(mResources).when(mContext).getResources();
-
-        doAnswer(invocation -> realResources.getXml((Integer) invocation.getArguments()[0]))
-                .when(mResources).getXml(anyInt());
-        doAnswer(invocation -> realResources.getString((Integer) invocation.getArguments()[0]))
-                .when(mResources).getString(anyInt());
-        doAnswer(invocation -> realResources.getBoolean((Integer) invocation.getArguments()[0]))
-                .when(mResources).getBoolean(anyInt());
-    }
-
-    private void overrideBehavior(int resId, int expectedBehavior) {
-        doReturn(expectedBehavior).when(mResources).getInteger(eq(resId));
+    private void overrideBehavior(String key, int expectedBehavior) {
+        Settings.Global.putLong(mContext.getContentResolver(), key, expectedBehavior);
     }
 }
diff --git a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
index 1866767..ef3a6ed 100644
--- a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
+++ b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
@@ -27,6 +27,7 @@
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyLong;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyString;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.description;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.eq;
@@ -177,18 +178,17 @@
         }
     }
 
-    TestPhoneWindowManager(Context context) {
+    TestPhoneWindowManager(Context context, boolean supportSettingsUpdate) {
         MockitoAnnotations.initMocks(this);
         mHandlerThread = new HandlerThread("fake window manager");
         mHandlerThread.start();
         mHandler = new Handler(mHandlerThread.getLooper());
         mContext = mockingDetails(context).isSpy() ? context : spy(context);
-        mHandler.runWithScissors(this::setUp,  0 /* timeout */);
+        mHandler.runWithScissors(() -> setUp(supportSettingsUpdate),  0 /* timeout */);
+        waitForIdle();
     }
 
-    private void setUp() {
-        mPhoneWindowManager = spy(new PhoneWindowManager());
-
+    private void setUp(boolean supportSettingsUpdate) {
         // Use stubOnly() to reduce memory usage if it doesn't need verification.
         final MockSettings spyStubOnly = withSettings().stubOnly()
                 .defaultAnswer(CALLS_REAL_METHODS);
@@ -199,6 +199,8 @@
                 .strictness(Strictness.LENIENT)
                 .startMocking();
 
+        mPhoneWindowManager = spy(new PhoneWindowManager());
+
         doReturn(mWindowManagerInternal).when(
                 () -> LocalServices.getService(eq(WindowManagerInternal.class)));
         doReturn(mActivityManagerInternal).when(
@@ -266,7 +268,15 @@
         });
 
         doNothing().when(mPhoneWindowManager).initializeHdmiState();
-        doNothing().when(mPhoneWindowManager).updateSettings();
+        if (supportSettingsUpdate) {
+            doAnswer(inv -> {
+                // Make any call to updateSettings run synchronously for tests.
+                mPhoneWindowManager.updateSettings(null);
+                return null;
+            }).when(mPhoneWindowManager).updateSettings(any(Handler.class));
+        } else {
+            doNothing().when(mPhoneWindowManager).updateSettings(any());
+        }
         doNothing().when(mPhoneWindowManager).screenTurningOn(anyInt(), any());
         doNothing().when(mPhoneWindowManager).screenTurnedOn(anyInt());
         doNothing().when(mPhoneWindowManager).startedWakingUp(anyInt(), anyInt());
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityLeakTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityLeakTests.java
index bd6ac58..71d40de 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityLeakTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityLeakTests.java
@@ -34,6 +34,8 @@
 import android.os.strictmode.InstanceCountViolation;
 import android.util.Log;
 
+import com.android.server.wm.utils.CommonUtils;
+
 import org.junit.After;
 import org.junit.Test;
 
@@ -63,6 +65,10 @@
                 activity.finish();
             }
         }
+        if (!mStartedActivityList.isEmpty()) {
+            CommonUtils.waitUntilActivityRemoved(
+                    mStartedActivityList.get(mStartedActivityList.size() - 1));
+        }
         mStartedActivityList.clear();
     }
 
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityOptionsTest.java b/services/tests/wmtests/src/com/android/server/wm/ActivityOptionsTest.java
index fe1ea0d..93adddb 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityOptionsTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityOptionsTest.java
@@ -22,11 +22,17 @@
 
 import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
 
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 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.Mockito.atLeastOnce;
+import static org.mockito.Mockito.verify;
 
 import android.app.Activity;
 import android.app.ActivityManager.RunningTaskInfo;
@@ -41,14 +47,20 @@
 import android.os.Bundle;
 import android.os.IBinder;
 import android.platform.test.annotations.Presubmit;
+import android.util.Log;
 import android.util.Rational;
 import android.view.SurfaceControl;
 import android.window.TaskOrganizer;
 
 import androidx.test.filters.MediumTest;
 
-import org.junit.Test;
+import com.android.server.wm.utils.CommonUtils;
 
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+
+import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -162,10 +174,127 @@
             instrumentation.removeMonitor(monitor);
             if (mainActivity != null) {
                 mainActivity.finish();
+                CommonUtils.waitUntilActivityRemoved(mainActivity);
             }
         }
     }
 
+    /**
+     * Tests if any unknown key is being used in the ActivityOptions bundle. If so, please review
+     * if the newly added bundle should be protected with permissions to avoid malicious attacks.
+     *
+     * @see SafeActivityOptionsTest#test_getOptions
+     */
+    @Test
+    public void testActivityOptionsFromBundle() {
+        // Spy on a bundle that is generated from a basic ActivityOptions.
+        final ActivityOptions options = ActivityOptions.makeBasic();
+        Bundle bundle = options.toBundle();
+        spyOn(bundle);
+
+        // Create a new ActivityOptions from the bundle
+        new ActivityOptions(bundle);
+
+        // Verify the keys that are being used.
+        final ArgumentCaptor<String> stringCaptor =  ArgumentCaptor.forClass(String.class);
+        verify(bundle, atLeastOnce()).getString(stringCaptor.capture());
+        verify(bundle, atLeastOnce()).getBoolean(stringCaptor.capture());
+        verify(bundle, atLeastOnce()).getParcelable(stringCaptor.capture(), any());
+        verify(bundle, atLeastOnce()).getInt(stringCaptor.capture(), anyInt());
+        verify(bundle, atLeastOnce()).getBinder(stringCaptor.capture());
+        verify(bundle, atLeastOnce()).getBundle(stringCaptor.capture());
+        final List<String> keys = stringCaptor.getAllValues();
+        final List<String> unknownKeys = new ArrayList<>();
+        for (String key : keys) {
+            switch (key) {
+                case ActivityOptions.KEY_PACKAGE_NAME:
+                case ActivityOptions.KEY_LAUNCH_BOUNDS:
+                case ActivityOptions.KEY_ANIM_TYPE:
+                case ActivityOptions.KEY_ANIM_ENTER_RES_ID:
+                case ActivityOptions.KEY_ANIM_EXIT_RES_ID:
+                case ActivityOptions.KEY_ANIM_IN_PLACE_RES_ID:
+                case ActivityOptions.KEY_ANIM_BACKGROUND_COLOR:
+                case ActivityOptions.KEY_ANIM_THUMBNAIL:
+                case ActivityOptions.KEY_ANIM_START_X:
+                case ActivityOptions.KEY_ANIM_START_Y:
+                case ActivityOptions.KEY_ANIM_WIDTH:
+                case ActivityOptions.KEY_ANIM_HEIGHT:
+                case ActivityOptions.KEY_ANIM_START_LISTENER:
+                case ActivityOptions.KEY_SPLASH_SCREEN_THEME:
+                case ActivityOptions.KEY_LEGACY_PERMISSION_PROMPT_ELIGIBLE:
+                case ActivityOptions.KEY_LAUNCH_ROOT_TASK_TOKEN:
+                case ActivityOptions.KEY_LAUNCH_TASK_FRAGMENT_TOKEN:
+                case ActivityOptions.KEY_TRANSIENT_LAUNCH:
+                case "android:activity.animationFinishedListener":
+                    // KEY_ANIMATION_FINISHED_LISTENER
+                case "android:activity.animSpecs": // KEY_ANIM_SPECS
+                case "android:activity.lockTaskMode": // KEY_LOCK_TASK_MODE
+                case "android:activity.shareIdentity": // KEY_SHARE_IDENTITY
+                case "android.activity.launchDisplayId": // KEY_LAUNCH_DISPLAY_ID
+                case "android.activity.callerDisplayId": // KEY_CALLER_DISPLAY_ID
+                case "android.activity.launchTaskDisplayAreaToken":
+                    // KEY_LAUNCH_TASK_DISPLAY_AREA_TOKEN
+                case "android.activity.launchTaskDisplayAreaFeatureId":
+                    // KEY_LAUNCH_TASK_DISPLAY_AREA_FEATURE_ID
+                case "android.activity.windowingMode": // KEY_LAUNCH_WINDOWING_MODE
+                case "android.activity.activityType": // KEY_LAUNCH_ACTIVITY_TYPE
+                case "android.activity.launchTaskId": // KEY_LAUNCH_TASK_ID
+                case "android.activity.disableStarting": // KEY_DISABLE_STARTING_WINDOW
+                case "android.activity.pendingIntentLaunchFlags":
+                    // KEY_PENDING_INTENT_LAUNCH_FLAGS
+                case "android.activity.alwaysOnTop": // KEY_TASK_ALWAYS_ON_TOP
+                case "android.activity.taskOverlay": // KEY_TASK_OVERLAY
+                case "android.activity.taskOverlayCanResume": // KEY_TASK_OVERLAY_CAN_RESUME
+                case "android.activity.avoidMoveToFront": // KEY_AVOID_MOVE_TO_FRONT
+                case "android.activity.freezeRecentTasksReordering":
+                    // KEY_FREEZE_RECENT_TASKS_REORDERING
+                case "android:activity.disallowEnterPictureInPictureWhileLaunching":
+                    // KEY_DISALLOW_ENTER_PICTURE_IN_PICTURE_WHILE_LAUNCHING
+                case "android:activity.applyActivityFlagsForBubbles":
+                    // KEY_APPLY_ACTIVITY_FLAGS_FOR_BUBBLES
+                case "android:activity.applyMultipleTaskFlagForShortcut":
+                    // KEY_APPLY_MULTIPLE_TASK_FLAG_FOR_SHORTCUT
+                case "android:activity.applyNoUserActionFlagForShortcut":
+                    // KEY_APPLY_NO_USER_ACTION_FLAG_FOR_SHORTCUT
+                case "android:activity.transitionCompleteListener":
+                    // KEY_TRANSITION_COMPLETE_LISTENER
+                case "android:activity.transitionIsReturning": // KEY_TRANSITION_IS_RETURNING
+                case "android:activity.sharedElementNames": // KEY_TRANSITION_SHARED_ELEMENTS
+                case "android:activity.resultData": // KEY_RESULT_DATA
+                case "android:activity.resultCode": // KEY_RESULT_CODE
+                case "android:activity.exitCoordinatorIndex": // KEY_EXIT_COORDINATOR_INDEX
+                case "android.activity.sourceInfo": // KEY_SOURCE_INFO
+                case "android:activity.usageTimeReport": // KEY_USAGE_TIME_REPORT
+                case "android:activity.rotationAnimationHint": // KEY_ROTATION_ANIMATION_HINT
+                case "android:instantapps.installerbundle": // KEY_INSTANT_APP_VERIFICATION_BUNDLE
+                case "android:activity.specsFuture": // KEY_SPECS_FUTURE
+                case "android:activity.remoteAnimationAdapter": // KEY_REMOTE_ANIMATION_ADAPTER
+                case "android:activity.remoteTransition": // KEY_REMOTE_TRANSITION
+                case "android:activity.overrideTaskTransition": // KEY_OVERRIDE_TASK_TRANSITION
+                case "android.activity.removeWithTaskOrganizer": // KEY_REMOVE_WITH_TASK_ORGANIZER
+                case "android.activity.launchTypeBubble": // KEY_LAUNCHED_FROM_BUBBLE
+                case "android.activity.splashScreenStyle": // KEY_SPLASH_SCREEN_STYLE
+                case "android.activity.launchIntoPipParams": // KEY_LAUNCH_INTO_PIP_PARAMS
+                case "android.activity.dismissKeyguard": // KEY_DISMISS_KEYGUARD
+                case "android.activity.pendingIntentCreatorBackgroundActivityStartMode":
+                    // KEY_PENDING_INTENT_CREATOR_BACKGROUND_ACTIVITY_START_MODE
+                case "android.activity.launchCookie": // KEY_LAUNCH_COOKIE
+                    // Existing keys
+                    break;
+                default:
+                    unknownKeys.add(key);
+                    break;
+            }
+        }
+
+        // Report if any unknown key exists.
+        for (String key : unknownKeys) {
+            Log.e("ActivityOptionsTests", "Unknown key " + key + " is found. "
+                    + "Please review if the given bundle should be protected with permissions.");
+        }
+        assertTrue(unknownKeys.isEmpty());
+    }
+
     public static class TrampolineActivity extends Activity {
         static int sTaskId;
 
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 1ba8f7d..858a384 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
@@ -74,6 +74,7 @@
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -102,7 +103,6 @@
 import android.os.IBinder;
 import android.os.Process;
 import android.os.RemoteException;
-import android.os.UserHandle;
 import android.platform.test.annotations.Presubmit;
 import android.provider.DeviceConfig;
 import android.service.voice.IVoiceInteractionSession;
@@ -159,9 +159,6 @@
     private static final String FAKE_CALLING_PACKAGE = "com.whatever.dude";
     private static final int UNIMPORTANT_UID = 12345;
     private static final int UNIMPORTANT_UID2 = 12346;
-    private static final int SDK_SANDBOX_UID = Process.toSdkSandboxUid(UNIMPORTANT_UID);
-    private static final int SECONDARY_USER_SDK_SANDBOX_UID =
-            UserHandle.getUid(10, SDK_SANDBOX_UID);
     private static final int CURRENT_IME_UID = 12347;
 
     protected final DeviceConfigStateHelper mDeviceConfig = new DeviceConfigStateHelper(
@@ -961,48 +958,6 @@
         mockingSession.finishMocking();
     }
 
-
-    @Test
-    public void testBackgroundActivityStartsAllowed_sdkSandboxClientAppHasVisibleWindow() {
-        doReturn(false).when(mAtm).isBackgroundActivityStartsEnabled();
-        // The SDK's associated client app has a visible window
-        doReturn(true).when(mAtm).hasActiveVisibleWindow(
-                Process.getAppUidForSdkSandboxUid(SDK_SANDBOX_UID));
-        runAndVerifyBackgroundActivityStartsSubtest(
-                "allowed_sdkSandboxClientAppHasVisibleWindow", false, SDK_SANDBOX_UID,
-                false, PROCESS_STATE_TOP, SDK_SANDBOX_UID, false,
-                PROCESS_STATE_TOP, true, false, false,
-                false, false, false, false, false);
-    }
-
-    @Test
-    public void testBackgroundActivityStartsDisallowed_sdkSandboxClientHasNoVisibleWindow() {
-        doReturn(false).when(mAtm).isBackgroundActivityStartsEnabled();
-        // The SDK's associated client app does not have a visible window
-        doReturn(false).when(mAtm).hasActiveVisibleWindow(
-                Process.getAppUidForSdkSandboxUid(SDK_SANDBOX_UID));
-        runAndVerifyBackgroundActivityStartsSubtest(
-                "disallowed_sdkSandboxClientHasNoVisibleWindow", true, SDK_SANDBOX_UID,
-                false, PROCESS_STATE_TOP, SDK_SANDBOX_UID, false,
-                PROCESS_STATE_TOP, true, false, false,
-                false, false, false, false, false);
-
-    }
-
-    @Test
-    public void testBackgroundActivityStartsAllowed_sdkSandboxMultiUserClientHasVisibleWindow() {
-        doReturn(false).when(mAtm).isBackgroundActivityStartsEnabled();
-        // The SDK's associated client app has a visible window
-        doReturn(true).when(mAtm).hasActiveVisibleWindow(
-                Process.getAppUidForSdkSandboxUid(SECONDARY_USER_SDK_SANDBOX_UID));
-        runAndVerifyBackgroundActivityStartsSubtest(
-                "allowed_sdkSandboxMultiUserClientHasVisibleWindow", false,
-                SECONDARY_USER_SDK_SANDBOX_UID, false, PROCESS_STATE_TOP,
-                SECONDARY_USER_SDK_SANDBOX_UID, false, PROCESS_STATE_TOP,
-                false, false, false, false,
-                false, false, false, false);
-    }
-
     private void runAndVerifyBackgroundActivityStartsSubtest(String name, boolean shouldHaveAborted,
             int callingUid, boolean callingUidHasVisibleWindow, int callingUidProcState,
             int realCallingUid, boolean realCallingUidHasVisibleWindow, int realCallingUidProcState,
@@ -1377,6 +1332,10 @@
         starter.setReason("testNoActivityInfo").setIntent(intent)
                 .setActivityInfo(null).execute();
         verify(starter.mRequest).resolveActivity(any());
+
+        // Also verifies the value of Request#componentSpecified should be true even the
+        // ActivityStarter#setComponentSpecified is not explicitly set.
+        assertTrue(starter.mRequest.componentSpecified);
     }
 
     @Test
@@ -1470,6 +1429,30 @@
     }
 
     @Test
+    public void testTransientLaunchWithKeyguard() {
+        final ActivityStarter starter = prepareStarter(0 /* flags */);
+        final ActivityRecord target = new ActivityBuilder(mAtm).setCreateTask(true).build();
+        final ActivityRecord top = new ActivityBuilder(mAtm).setCreateTask(true).build();
+        final KeyguardController keyguard = mSupervisor.getKeyguardController();
+        doReturn(true).when(keyguard).isKeyguardLocked(anyInt());
+        doReturn(true).when(keyguard).isDisplayOccluded(anyInt());
+        registerTestTransitionPlayer();
+        starter.setReason("testTransientLaunchWithKeyguard")
+                .setActivityOptions(ActivityOptions.makeBasic().setTransientLaunch().toBundle())
+                .setIntent(target.intent)
+                .execute();
+        final TransitionController controller = mRootWindowContainer.mTransitionController;
+        final Transition transition = controller.getCollectingTransition();
+        final Transition.ChangeInfo targetChangeInfo = transition.mChanges.get(target);
+
+        assertThat(targetChangeInfo).isNotNull();
+        assertThat(targetChangeInfo.hasChanged()).isTrue();
+        assertThat(controller.isCollecting(top.getTask())).isTrue();
+        assertThat(transition.isTransientLaunch(target)).isTrue();
+        assertThat(transition.isInTransientHide(top.getTask())).isTrue();
+    }
+
+    @Test
     public void testActivityStart_expectAddedToRecentTask() {
         RecentTasks recentTasks = mock(RecentTasks.class);
         mAtm.mTaskSupervisor.setRecentTasks(recentTasks);
@@ -1790,8 +1773,7 @@
     public void testLaunchActivityWithoutDisplayCategory() {
         final ActivityInfo info = new ActivityInfo();
         info.applicationInfo = new ApplicationInfo();
-        info.taskAffinity = ActivityRecord.computeTaskAffinity("test", DEFAULT_FAKE_UID,
-                0 /* launchMode */, null /* componentName */);
+        info.taskAffinity = ActivityRecord.computeTaskAffinity("test", DEFAULT_FAKE_UID);
         info.requiredDisplayCategory = "automotive";
         final Task task = new TaskBuilder(mSupervisor).setCreateActivity(true).setActivityInfo(info)
                 .build();
@@ -1816,8 +1798,7 @@
     public void testLaunchActivityWithDifferentDisplayCategory() {
         final ActivityInfo info = new ActivityInfo();
         info.applicationInfo = new ApplicationInfo();
-        info.taskAffinity = ActivityRecord.computeTaskAffinity("test", DEFAULT_FAKE_UID,
-                0 /* launchMode */, null /* componentName */);
+        info.taskAffinity = ActivityRecord.computeTaskAffinity("test", DEFAULT_FAKE_UID);
         info.requiredDisplayCategory = "automotive";
         final Task task = new TaskBuilder(mSupervisor).setCreateActivity(true).setActivityInfo(info)
                 .build();
@@ -1842,8 +1823,7 @@
     public void testLaunchActivityWithSameDisplayCategory() {
         final ActivityInfo info = new ActivityInfo();
         info.applicationInfo = new ApplicationInfo();
-        info.taskAffinity = ActivityRecord.computeTaskAffinity("test", DEFAULT_FAKE_UID,
-                0 /* launchMode */, null /* componentName */);
+        info.taskAffinity = ActivityRecord.computeTaskAffinity("test", DEFAULT_FAKE_UID);
         info.requiredDisplayCategory = "automotive";
         final Task task = new TaskBuilder(mSupervisor).setCreateActivity(true).setActivityInfo(info)
                 .build();
diff --git a/services/tests/wmtests/src/com/android/server/wm/AssistDataRequesterTest.java b/services/tests/wmtests/src/com/android/server/wm/AssistDataRequesterTest.java
index 7b4392b..56c3ec0 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AssistDataRequesterTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AssistDataRequesterTest.java
@@ -317,7 +317,8 @@
         assertEquals("Expected " + numPendingScreenshots + " pending screenshots, got "
                         + mDataRequester.getPendingScreenshotCount(),
                 numPendingScreenshots, mDataRequester.getPendingScreenshotCount());
-        assertFalse("Expected request NOT completed", mCallbacks.mRequestCompleted);
+        assertEquals("Expected request NOT completed, unless no pending data",
+                numPendingData == 0 && numPendingScreenshots == 0, mCallbacks.mRequestCompleted);
         mGate.countDown();
         waitForIdle(mHandler);
         assertEquals("Expected " + numReceivedData + " data, received "
@@ -376,14 +377,7 @@
 
         @Override
         public void onAssistRequestCompleted() {
-            mHandler.post(() -> {
-                try {
-                    mGate.await(10, TimeUnit.SECONDS);
-                    mRequestCompleted = true;
-                } catch (InterruptedException e) {
-                    Log.e(TAG, "Failed to wait", e);
-                }
-            });
+            mRequestCompleted = true;
         }
     }
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/ContentRecorderTests.java b/services/tests/wmtests/src/com/android/server/wm/ContentRecorderTests.java
index bbec091..41c0caae 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ContentRecorderTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ContentRecorderTests.java
@@ -453,6 +453,78 @@
                 displayAreaBounds.width(), displayAreaBounds.height());
     }
 
+    @Test
+    public void testDisplayContentUpdatesRecording_withoutSurface() {
+        // GIVEN MediaProjection has already initialized the WindowToken of the DisplayArea to
+        // mirror.
+        setUpDefaultTaskDisplayAreaWindowToken();
+
+        // WHEN getting the DisplayContent for the new virtual display without providing a valid
+        // size from getDisplaySurfaceDefaultSize, i.e. the case of null surface.
+        final DisplayContent virtualDisplay =
+                mRootWindowContainer.getDisplayContent(mDisplaySession.getVirtualDisplayId());
+        doReturn(null).when(mWm.mDisplayManagerInternal).getDisplaySurfaceDefaultSize(anyInt());
+        mWm.mContentRecordingController.setContentRecordingSessionLocked(mDisplaySession, mWm);
+        virtualDisplay.updateRecording();
+
+        // THEN mirroring is not started, since a null surface indicates the VirtualDisplay is off.
+        assertThat(virtualDisplay.isCurrentlyRecording()).isFalse();
+    }
+
+    @Test
+    public void testDisplayContentUpdatesRecording_withSurface() {
+        // GIVEN MediaProjection has already initialized the WindowToken of the DisplayArea to
+        // mirror.
+        setUpDefaultTaskDisplayAreaWindowToken();
+
+        // WHEN getting the DisplayContent for the virtual display with a valid size from
+        // getDisplaySurfaceDefaultSize (done by surfaceControlMirrors in setUp).
+        final DisplayContent virtualDisplay =
+                mRootWindowContainer.getDisplayContent(mDisplaySession.getVirtualDisplayId());
+        mWm.mContentRecordingController.setContentRecordingSessionLocked(mDisplaySession, mWm);
+        virtualDisplay.updateRecording();
+
+        // THEN mirroring is initiated for the default display's DisplayArea.
+        assertThat(virtualDisplay.isCurrentlyRecording()).isTrue();
+    }
+
+    @Test
+    public void testDisplayContentUpdatesRecording_displayMirroring() {
+        // GIVEN MediaProjection has already initialized the WindowToken of the DisplayArea to
+        // mirror.
+        setUpDefaultTaskDisplayAreaWindowToken();
+
+        // GIVEN SurfaceControl can successfully mirror the provided surface.
+        surfaceControlMirrors(sSurfaceSize);
+        // Initially disable getDisplayIdToMirror since the DMS may create the DC outside the direct
+        // call in the test. We need to spy on the DC before updateRecording is called or we can't
+        // verify setDisplayMirroring is called
+        doReturn(INVALID_DISPLAY).when(mWm.mDisplayManagerInternal).getDisplayIdToMirror(anyInt());
+
+        // WHEN getting the DisplayContent for the new virtual display.
+        final DisplayContent virtualDisplay =
+                mRootWindowContainer.getDisplayContent(mDisplaySession.getVirtualDisplayId());
+        // Return the default display as the value to mirror to ensure the VD with flag mirroring
+        // creates a ContentRecordingSession automatically.
+        doReturn(DEFAULT_DISPLAY).when(mWm.mDisplayManagerInternal).getDisplayIdToMirror(anyInt());
+        virtualDisplay.updateRecording();
+
+        // THEN mirroring is initiated for the default display's DisplayArea.
+        verify(virtualDisplay).setDisplayMirroring();
+        assertThat(virtualDisplay.isCurrentlyRecording()).isTrue();
+    }
+
+    /**
+     * Creates a WindowToken associated with the default task DisplayArea, in order for that
+     * DisplayArea to be mirrored.
+     */
+    private void setUpDefaultTaskDisplayAreaWindowToken() {
+        // GIVEN the default task display area is represented by the WindowToken.
+        spyOn(mWm.mWindowContextListenerController);
+        doReturn(mDefaultDisplay.getDefaultTaskDisplayArea()).when(
+                mWm.mWindowContextListenerController).getContainer(any());
+    }
+
     /**
      * Creates a {@link android.window.WindowContainerToken} associated with a task, in order for
      * that task to be recorded.
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 bdd178b..d015ca3 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
@@ -27,12 +27,10 @@
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
-import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR;
 import static android.os.Build.VERSION_CODES.P;
 import static android.os.Build.VERSION_CODES.Q;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.Display.FLAG_PRIVATE;
-import static android.view.Display.INVALID_DISPLAY;
 import static android.view.DisplayCutout.BOUNDS_POSITION_TOP;
 import static android.view.DisplayCutout.fromBoundingRect;
 import static android.view.Surface.ROTATION_0;
@@ -112,11 +110,9 @@
 import android.app.WindowConfiguration;
 import android.content.res.Configuration;
 import android.graphics.Insets;
-import android.graphics.Point;
 import android.graphics.Rect;
 import android.graphics.Region;
 import android.hardware.HardwareBuffer;
-import android.hardware.display.VirtualDisplay;
 import android.metrics.LogMaker;
 import android.os.Binder;
 import android.os.RemoteException;
@@ -124,7 +120,6 @@
 import android.platform.test.annotations.Presubmit;
 import android.util.ArraySet;
 import android.util.DisplayMetrics;
-import android.view.ContentRecordingSession;
 import android.view.Display;
 import android.view.DisplayCutout;
 import android.view.DisplayInfo;
@@ -2655,138 +2650,6 @@
     }
 
     @Test
-    public void testVirtualDisplayContent_withoutSurface() {
-        // GIVEN MediaProjection has already initialized the WindowToken of the DisplayArea to
-        // mirror.
-        setUpDefaultTaskDisplayAreaWindowToken();
-
-        // GIVEN SurfaceControl does not mirror a null surface.
-        Point surfaceSize = new Point(
-                mDefaultDisplay.getDefaultTaskDisplayArea().getBounds().width(),
-                mDefaultDisplay.getDefaultTaskDisplayArea().getBounds().height());
-
-        // GIVEN a new VirtualDisplay with an associated surface.
-        final VirtualDisplay display = createVirtualDisplay(surfaceSize, null /* surface */);
-        final int displayId = display.getDisplay().getDisplayId();
-        mWm.mRoot.onDisplayAdded(displayId);
-
-        // WHEN getting the DisplayContent for the new virtual display.
-        DisplayContent actualDC = mWm.mRoot.getDisplayContent(displayId);
-        ContentRecordingSession session = ContentRecordingSession.createDisplaySession(
-                DEFAULT_DISPLAY);
-        session.setVirtualDisplayId(displayId);
-        mWm.mContentRecordingController.setContentRecordingSessionLocked(session, mWm);
-        actualDC.updateRecording();
-
-        // THEN mirroring is not started, since a null surface indicates the VirtualDisplay is off.
-        assertThat(actualDC.isCurrentlyRecording()).isFalse();
-
-        display.release();
-    }
-
-    @Test
-    public void testVirtualDisplayContent_withSurface() {
-        // GIVEN MediaProjection has already initialized the WindowToken of the DisplayArea to
-        // mirror.
-        setUpDefaultTaskDisplayAreaWindowToken();
-
-        // GIVEN SurfaceControl can successfully mirror the provided surface.
-        Point surfaceSize = new Point(
-                mDefaultDisplay.getDefaultTaskDisplayArea().getBounds().width(),
-                mDefaultDisplay.getDefaultTaskDisplayArea().getBounds().height());
-        surfaceControlMirrors(surfaceSize);
-
-        // GIVEN a new VirtualDisplay with an associated surface.
-        final VirtualDisplay display = createVirtualDisplay(surfaceSize, new Surface());
-        final int displayId = display.getDisplay().getDisplayId();
-
-        // GIVEN a session for this display.
-        ContentRecordingSession session = ContentRecordingSession.createDisplaySession(
-                DEFAULT_DISPLAY);
-        session.setVirtualDisplayId(displayId);
-        mWm.mContentRecordingController.setContentRecordingSessionLocked(session, mWm);
-        mWm.mRoot.onDisplayAdded(displayId);
-
-        // WHEN getting the DisplayContent for the new virtual display.
-        DisplayContent actualDC = mWm.mRoot.getDisplayContent(displayId);
-        actualDC.updateRecording();
-
-        // THEN mirroring is initiated for the default display's DisplayArea.
-        assertThat(actualDC.isCurrentlyRecording()).isTrue();
-
-        display.release();
-    }
-
-    @Test
-    public void testVirtualDisplayContent_displayMirroring() {
-        // GIVEN MediaProjection has already initialized the WindowToken of the DisplayArea to
-        // mirror.
-        setUpDefaultTaskDisplayAreaWindowToken();
-
-        // GIVEN SurfaceControl can successfully mirror the provided surface.
-        Point surfaceSize = new Point(
-                mDefaultDisplay.getDefaultTaskDisplayArea().getBounds().width(),
-                mDefaultDisplay.getDefaultTaskDisplayArea().getBounds().height());
-        surfaceControlMirrors(surfaceSize);
-        // Initially disable getDisplayIdToMirror since the DMS may create the DC outside the direct
-        // call in the test. We need to spy on the DC before updateRecording is called or we can't
-        // verify setDisplayMirroring is called
-        doReturn(INVALID_DISPLAY).when(mWm.mDisplayManagerInternal).getDisplayIdToMirror(anyInt());
-
-        // GIVEN a new VirtualDisplay with an associated surface.
-        final VirtualDisplay display = createVirtualDisplay(surfaceSize, new Surface());
-        final int displayId = display.getDisplay().getDisplayId();
-
-        // GIVEN a session for this display.
-        mWm.mRoot.onDisplayAdded(displayId);
-
-        // WHEN getting the DisplayContent for the new virtual display.
-        DisplayContent actualDC = mWm.mRoot.getDisplayContent(displayId);
-        spyOn(actualDC);
-        // Return the default display as the value to mirror to ensure the VD with flag mirroring
-        // creates a ContentRecordingSession automatically.
-        doReturn(DEFAULT_DISPLAY).when(mWm.mDisplayManagerInternal).getDisplayIdToMirror(anyInt());
-        actualDC.updateRecording();
-
-        // THEN mirroring is initiated for the default display's DisplayArea.
-        verify(actualDC).setDisplayMirroring();
-        assertThat(actualDC.isCurrentlyRecording()).isTrue();
-        display.release();
-    }
-
-    /**
-     * Creates a WindowToken associated with the default task DisplayArea, in order for that
-     * DisplayArea to be mirrored.
-     */
-    private void setUpDefaultTaskDisplayAreaWindowToken() {
-        // GIVEN the default task display area is represented by the WindowToken.
-        spyOn(mWm.mWindowContextListenerController);
-        doReturn(mDefaultDisplay.getDefaultTaskDisplayArea()).when(
-                mWm.mWindowContextListenerController).getContainer(any());
-    }
-
-    /**
-     * SurfaceControl successfully creates a mirrored surface of the given size.
-     */
-    private SurfaceControl surfaceControlMirrors(Point surfaceSize) {
-        // Do not set the parent, since the mirrored surface is the root of a new surface hierarchy.
-        SurfaceControl mirroredSurface = new SurfaceControl.Builder()
-                .setName("mirroredSurface")
-                .setBufferSize(surfaceSize.x, surfaceSize.y)
-                .setCallsite("mirrorSurface")
-                .build();
-        doReturn(mirroredSurface).when(() -> SurfaceControl.mirrorSurface(any()));
-        doReturn(surfaceSize).when(mWm.mDisplayManagerInternal).getDisplaySurfaceDefaultSize(
-                anyInt());
-        return mirroredSurface;
-    }
-
-    private VirtualDisplay createVirtualDisplay(Point size, Surface surface) {
-        return mWm.mDisplayManager.createVirtualDisplay("VirtualDisplay", size.x, size.y,
-                DisplayMetrics.DENSITY_140, surface, VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR);
-    }
-
-    @Test
     public void testKeepClearAreasMultipleWindows() {
         final WindowState w1 = createWindow(null, TYPE_NAVIGATION_BAR, mDisplayContent, "w1");
         final Rect rect1 = new Rect(0, 0, 10, 10);
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java
index f757330..c4302db 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java
@@ -26,6 +26,7 @@
 import static android.view.IWindowManager.FIXED_TO_USER_ROTATION_DEFAULT;
 import static android.view.IWindowManager.FIXED_TO_USER_ROTATION_DISABLED;
 import static android.view.IWindowManager.FIXED_TO_USER_ROTATION_ENABLED;
+import static android.view.IWindowManager.FIXED_TO_USER_ROTATION_IF_NO_AUTO_ROTATION;
 
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.anyBoolean;
@@ -1156,6 +1157,22 @@
                 SCREEN_ORIENTATION_UNSPECIFIED, Surface.ROTATION_0));
     }
 
+    @Test
+    public void testReturnsUserRotation_FixedToUserRotationIfNoAutoRotation_AutoRotationNotSupport()
+            throws Exception {
+        mBuilder.setSupportAutoRotation(false).build();
+        configureDisplayRotation(SCREEN_ORIENTATION_PORTRAIT, false, false);
+        mTarget.setFixedToUserRotation(FIXED_TO_USER_ROTATION_IF_NO_AUTO_ROTATION);
+
+        freezeRotation(Surface.ROTATION_180);
+
+        assertEquals(WindowManagerPolicy.USER_ROTATION_LOCKED, mTarget.getUserRotationMode());
+        assertEquals(Surface.ROTATION_180, mTarget.getUserRotation());
+
+        assertEquals(Surface.ROTATION_180, mTarget.rotationForOrientation(
+                SCREEN_ORIENTATION_UNSPECIFIED, Surface.ROTATION_0));
+    }
+
     // ========================
     // Non-rotation API Tests
     // ========================
@@ -1176,6 +1193,24 @@
                 + " fixed to user rotation.", mTarget.isFixedToUserRotation());
     }
 
+    @Test
+    public void testIsFixedToUserRotation_displayContentOrientationFixed() throws Exception {
+        mBuilder.build();
+        when(mMockDisplayContent.isDisplayOrientationFixed()).thenReturn(true);
+
+        assertFalse("Display rotation should respect app requested orientation if"
+                + " the display has fixed orientation.", mTarget.isFixedToUserRotation());
+    }
+
+    @Test
+    public void testIsFixedToUserRotation_FixedToUserRotationIfNoAutoRotation() throws Exception {
+        mBuilder.build();
+        mTarget.setFixedToUserRotation(FIXED_TO_USER_ROTATION_IF_NO_AUTO_ROTATION);
+
+        assertFalse("Display rotation should respect app requested orientation if"
+                + " fixed to user rotation if no auto rotation.", mTarget.isFixedToUserRotation());
+    }
+
     private void moveTimeForward(long timeMillis) {
         sCurrentUptimeMillis += timeMillis;
         sClock.fastForward(timeMillis);
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsProviderTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsProviderTests.java
index 9d839fc..7d9fdd5 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsProviderTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsProviderTests.java
@@ -19,6 +19,7 @@
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
 import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
+import static android.view.Display.TYPE_VIRTUAL;
 import static android.view.WindowManager.DISPLAY_IME_POLICY_LOCAL;
 
 import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
@@ -26,6 +27,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertTrue;
+import static org.testng.Assert.assertFalse;
 
 import android.annotation.Nullable;
 import android.platform.test.annotations.Presubmit;
@@ -233,6 +235,22 @@
     }
 
     @Test
+    public void testDoNotWriteVirtualDisplaySettingsToStorage() throws Exception {
+        final DisplayInfo secondaryDisplayInfo = mSecondaryDisplay.getDisplayInfo();
+        secondaryDisplayInfo.type = TYPE_VIRTUAL;
+
+        // No write to storage on virtual display change.
+        final DisplayWindowSettingsProvider provider = new DisplayWindowSettingsProvider(
+                mDefaultVendorSettingsStorage, mOverrideSettingsStorage);
+        final SettingsEntry virtualSettings = provider.getOverrideSettings(secondaryDisplayInfo);
+        virtualSettings.mShouldShowSystemDecors = true;
+        virtualSettings.mImePolicy = DISPLAY_IME_POLICY_LOCAL;
+        virtualSettings.mDontMoveToTop = true;
+        provider.updateOverrideSettings(secondaryDisplayInfo, virtualSettings);
+        assertFalse(mOverrideSettingsStorage.wasWriteSuccessful());
+    }
+
+    @Test
     public void testWritingDisplaySettingsToStorage_UsePortAsId() throws Exception {
         prepareOverrideDisplaySettings(null /* displayIdentifier */, true /* usePortAsId */);
 
@@ -260,6 +278,54 @@
                 getStoredDisplayAttributeValue(mOverrideSettingsStorage, "imePolicy"));
     }
 
+    @Test
+    public void testCleanUpEmptyDisplaySettingsOnDisplayRemoved() {
+        final DisplayWindowSettingsProvider provider = new DisplayWindowSettingsProvider(
+                mDefaultVendorSettingsStorage, mOverrideSettingsStorage);
+        final int initialSize = provider.getOverrideSettingsSize();
+
+        // Size + 1 when query for a new display.
+        final DisplayInfo secondaryDisplayInfo = mSecondaryDisplay.getDisplayInfo();
+        final SettingsEntry overrideSettings = provider.getOverrideSettings(secondaryDisplayInfo);
+
+        assertEquals(initialSize + 1, provider.getOverrideSettingsSize());
+
+        // When a display is removed, its override Settings is not removed if there is any override.
+        overrideSettings.mShouldShowSystemDecors = true;
+        provider.updateOverrideSettings(secondaryDisplayInfo, overrideSettings);
+        provider.onDisplayRemoved(secondaryDisplayInfo);
+
+        assertEquals(initialSize + 1, provider.getOverrideSettingsSize());
+
+        // When a display is removed, its override Settings is removed if there is no override.
+        provider.updateOverrideSettings(secondaryDisplayInfo, new SettingsEntry());
+        provider.onDisplayRemoved(secondaryDisplayInfo);
+
+        assertEquals(initialSize, provider.getOverrideSettingsSize());
+    }
+
+    @Test
+    public void testCleanUpVirtualDisplaySettingsOnDisplayRemoved() {
+        final DisplayWindowSettingsProvider provider = new DisplayWindowSettingsProvider(
+                mDefaultVendorSettingsStorage, mOverrideSettingsStorage);
+        final int initialSize = provider.getOverrideSettingsSize();
+
+        // Size + 1 when query for a new display.
+        final DisplayInfo secondaryDisplayInfo = mSecondaryDisplay.getDisplayInfo();
+        secondaryDisplayInfo.type = TYPE_VIRTUAL;
+        final SettingsEntry overrideSettings = provider.getOverrideSettings(secondaryDisplayInfo);
+
+        assertEquals(initialSize + 1, provider.getOverrideSettingsSize());
+
+        // When a virtual display is removed, its override Settings is removed even if it has
+        // override.
+        overrideSettings.mShouldShowSystemDecors = true;
+        provider.updateOverrideSettings(secondaryDisplayInfo, overrideSettings);
+        provider.onDisplayRemoved(secondaryDisplayInfo);
+
+        assertEquals(initialSize, provider.getOverrideSettingsSize());
+    }
+
     /**
      * Prepares display settings and stores in {@link #mOverrideSettingsStorage}. Uses provided
      * display identifier and stores windowingMode=WINDOWING_MODE_PINNED.
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java
index 1cec0ef..e54b8e5 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java
@@ -484,6 +484,18 @@
         assertTrue(dcIgnoreOrientation.getIgnoreOrientationRequest());
     }
 
+    @Test
+    public void testDisplayRemoval() {
+        spyOn(mWm.mDisplayWindowSettings);
+        spyOn(mWm.mDisplayWindowSettingsProvider);
+
+        mPrivateDisplay.removeImmediately();
+
+        verify(mWm.mDisplayWindowSettings).onDisplayRemoved(mPrivateDisplay);
+        verify(mWm.mDisplayWindowSettingsProvider).onDisplayRemoved(
+                mPrivateDisplay.getDisplayInfo());
+    }
+
     public final class TestSettingsProvider implements DisplayWindowSettings.SettingsProvider {
         Map<DisplayInfo, SettingsEntry> mOverrideSettingsCache = new HashMap<>();
 
@@ -513,5 +525,10 @@
 
             overrideSettings.setTo(settings);
         }
+
+        @Override
+        public void onDisplayRemoved(@NonNull DisplayInfo info) {
+            mOverrideSettingsCache.remove(info);
+        }
     }
 }
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 d1a41ae..83ad7b1 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DualDisplayAreaGroupPolicyTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DualDisplayAreaGroupPolicyTest.java
@@ -34,6 +34,7 @@
 import static android.window.DisplayAreaOrganizer.FEATURE_VENDOR_FIRST;
 import static android.window.DisplayAreaOrganizer.FEATURE_WINDOWED_MAGNIFICATION;
 
+import static com.android.compatibility.common.util.PackageUtil.supportsRotation;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
 import static com.android.server.wm.SizeCompatTests.prepareLimitedBounds;
 import static com.android.server.wm.SizeCompatTests.prepareUnresizable;
@@ -41,6 +42,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.junit.Assume.assumeTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
@@ -128,6 +130,8 @@
 
     @Test
     public void testNotIgnoreOrientationRequest_differentOrientationFromDisplay_reversesRequest() {
+        assumeTrue(supportsRotation());
+
         mFirstRoot.setIgnoreOrientationRequest(false /* ignoreOrientationRequest */);
         mDisplay.onLastFocusedTaskDisplayAreaChanged(mFirstTda);
 
@@ -144,6 +148,8 @@
 
     @Test
     public void testNotIgnoreOrientationRequest_onlyRespectsFocusedTaskDisplayArea() {
+        assumeTrue(supportsRotation());
+
         mFirstRoot.setIgnoreOrientationRequest(false /* ignoreOrientationRequest */);
         mSecondRoot.setIgnoreOrientationRequest(false /* ignoreOrientationRequest */);
         mDisplay.onLastFocusedTaskDisplayAreaChanged(mFirstTda);
@@ -249,6 +255,8 @@
 
     @Test
     public void testLaunchNoSensorApp_noSizeCompatAfterRotation() {
+        assumeTrue(supportsRotation());
+
         mFirstRoot.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
         mSecondRoot.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
         mDisplay.onLastFocusedTaskDisplayAreaChanged(mFirstTda);
@@ -285,6 +293,8 @@
 
     @Test
     public void testLaunchNoSensorApp_activityIsNotLetterboxForFixedOrientationDisplayAreaGroup() {
+        assumeTrue(supportsRotation());
+
         mFirstRoot.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
         mSecondRoot.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
         mDisplay.onLastFocusedTaskDisplayAreaChanged(mFirstTda);
@@ -334,6 +344,8 @@
 
     @Test
     public void testLaunchNoSensorApp_fixedOrientationLetterboxBecomesSizeCompatAfterRotation() {
+        assumeTrue(supportsRotation());
+
         mFirstRoot.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
         mSecondRoot.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
         mDisplay.onLastFocusedTaskDisplayAreaChanged(mFirstTda);
@@ -496,6 +508,8 @@
 
     @Test
     public void testResizableFixedOrientationApp_fixedOrientationLetterboxing() {
+        assumeTrue(supportsRotation());
+
         mFirstRoot.setIgnoreOrientationRequest(false /* ignoreOrientationRequest */);
         mSecondRoot.setIgnoreOrientationRequest(false /* ignoreOrientationRequest */);
 
diff --git a/services/tests/wmtests/src/com/android/server/wm/InputMethodDialogWindowContextTest.java b/services/tests/wmtests/src/com/android/server/wm/InputMethodDialogWindowContextTest.java
index 3090590..c3db241 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InputMethodDialogWindowContextTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InputMethodDialogWindowContextTest.java
@@ -36,6 +36,7 @@
 import static org.mockito.Mockito.verify;
 
 import android.app.ActivityThread;
+import android.app.IApplicationThread;
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Rect;
@@ -46,6 +47,7 @@
 import android.view.IWindowManager;
 import android.view.WindowManager;
 import android.view.WindowManagerGlobal;
+import android.window.WindowContextInfo;
 import android.window.WindowTokenClient;
 
 import com.android.server.inputmethod.InputMethodDialogWindowContext;
@@ -91,14 +93,15 @@
         spyOn(mIWindowManager);
         doAnswer(invocation -> {
             Object[] args = invocation.getArguments();
-            IBinder clientToken = (IBinder) args[0];
-            int displayId = (int) args[2];
+            IApplicationThread appThread = (IApplicationThread) args[0];
+            IBinder clientToken = (IBinder) args[1];
+            int displayId = (int) args[3];
             DisplayContent dc = mWm.mRoot.getDisplayContent(displayId);
-            mWm.mWindowContextListenerController.registerWindowContainerListener(clientToken,
-                    dc.getImeContainer(), 1000 /* ownerUid */, TYPE_INPUT_METHOD_DIALOG,
-                    null /* options */);
-            return dc.getImeContainer().getConfiguration();
-        }).when(mIWindowManager).attachWindowContextToDisplayArea(any(),
+            final WindowProcessController wpc = mAtm.getProcessController(appThread);
+            mWm.mWindowContextListenerController.registerWindowContainerListener(wpc, clientToken,
+                    dc.getImeContainer(), TYPE_INPUT_METHOD_DIALOG, null /* options */);
+            return new WindowContextInfo(dc.getImeContainer().getConfiguration(), displayId);
+        }).when(mIWindowManager).attachWindowContextToDisplayArea(any(), any(),
                 eq(TYPE_INPUT_METHOD_DIALOG), anyInt(), any());
         mDisplayManagerGlobal = DisplayManagerGlobal.getInstance();
         spyOn(mDisplayManagerGlobal);
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 df0808f..77d5908 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
@@ -27,8 +27,6 @@
 import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
 import static android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT;
 import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
-import static android.content.pm.ActivityInfo.LAUNCH_MULTIPLE;
-import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_INSTANCE;
 import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
 import static android.os.Process.NOBODY_UID;
 
@@ -451,25 +449,15 @@
         final int uid = 10123;
         final Task task1 = createTaskBuilder(".Task1").build();
         final ComponentName componentName = getUniqueComponentName();
-        task1.affinity = ActivityRecord.computeTaskAffinity(taskAffinity, uid, LAUNCH_MULTIPLE,
-                componentName);
+        task1.affinity = ActivityRecord.computeTaskAffinity(taskAffinity, uid);
         mRecentTasks.add(task1);
 
         // Add another task to recents, and make sure the previous task was removed.
         final Task task2 = createTaskBuilder(".Task2").build();
-        task2.affinity = ActivityRecord.computeTaskAffinity(taskAffinity, uid, LAUNCH_MULTIPLE,
-                componentName);
+        task2.affinity = ActivityRecord.computeTaskAffinity(taskAffinity, uid);
         mRecentTasks.add(task2);
         assertEquals(1, mRecentTasks.getRecentTasks(MAX_VALUE, 0 /* flags */,
                 true /* getTasksAllowed */, TEST_USER_0_ID, 0).getList().size());
-
-        // Add another single-instance task to recents, and make sure no task is removed.
-        final Task task3 = createTaskBuilder(".Task3").build();
-        task3.affinity = ActivityRecord.computeTaskAffinity(taskAffinity, uid,
-                LAUNCH_SINGLE_INSTANCE, componentName);
-        mRecentTasks.add(task3);
-        assertEquals(2, mRecentTasks.getRecentTasks(MAX_VALUE, 0 /* flags */,
-                true /* getTasksAllowed */, TEST_USER_0_ID, 0).getList().size());
     }
 
     @Test
@@ -1050,6 +1038,13 @@
         top.setState(ActivityRecord.State.DESTROYING, "test");
         top.destroyed("test");
         assertFalse(task.mKillProcessesOnDestroyed);
+
+        // If the process is died, the state should be cleared.
+        final Task lastTask = tasks.get(0);
+        lastTask.addChild(top);
+        lastTask.mKillProcessesOnDestroyed = true;
+        top.handleAppDied();
+        assertFalse(lastTask.mKillProcessesOnDestroyed);
     }
 
     @Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java b/services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java
index 24e932f..6c48a69 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java
@@ -16,17 +16,36 @@
 
 package com.android.server.wm;
 
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
+import static android.content.pm.PackageManager.PERMISSION_DENIED;
+import static android.view.Display.DEFAULT_DISPLAY;
+
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
+
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.mock;
 
 import android.app.ActivityOptions;
+import android.content.pm.ActivityInfo;
+import android.os.Looper;
 import android.platform.test.annotations.Presubmit;
+import android.view.RemoteAnimationAdapter;
+import android.window.RemoteTransition;
 import android.window.WindowContainerToken;
 
 import androidx.test.filters.MediumTest;
 
 import org.junit.Test;
+import org.mockito.MockitoSession;
+import org.mockito.quality.Strictness;
 
 /**
  * Build/Install/Run:
@@ -73,4 +92,119 @@
 
         assertSame(clone.getOriginalOptions().getLaunchRootTask(), token);
     }
+
+    @Test
+    public void test_getOptions() {
+        // Mock everything necessary
+        MockitoSession mockingSession = mockitoSession()
+                .mockStatic(ActivityTaskManagerService.class)
+                .strictness(Strictness.LENIENT)
+                .startMocking();
+        doReturn(PERMISSION_DENIED).when(() -> ActivityTaskManagerService.checkPermission(
+                any(), anyInt(), anyInt()));
+
+        final LockTaskController lockTaskController = mock(LockTaskController.class);
+        doReturn(false).when(lockTaskController).isPackageAllowlisted(anyInt(), any());
+
+        final ActivityTaskManagerService atm = mock(ActivityTaskManagerService.class);
+        doReturn(lockTaskController).when(atm).getLockTaskController();
+
+        final ActivityTaskSupervisor taskSupervisor =
+                new ActivityTaskSupervisor(atm, mock(Looper.class));
+        spyOn(taskSupervisor);
+        doReturn(false).when(taskSupervisor).isCallerAllowedToLaunchOnDisplay(anyInt(),
+                anyInt(), anyInt(), any());
+        doReturn(false).when(taskSupervisor).isCallerAllowedToLaunchOnTaskDisplayArea(anyInt(),
+                anyInt(), any(), any());
+
+        taskSupervisor.mRecentTasks = mock(RecentTasks.class);
+        doReturn(false).when(taskSupervisor.mRecentTasks).isCallerRecents(anyInt());
+
+        // Ensure exceptions are thrown when lack of permissions.
+        ActivityOptions activityOptions = ActivityOptions.makeBasic();
+        try {
+            activityOptions.setLaunchTaskId(100);
+            verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
+            activityOptions = ActivityOptions.makeBasic();
+            activityOptions.setDisableStartingWindow(true);
+            verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
+            activityOptions = ActivityOptions.makeBasic();
+            activityOptions.setTransientLaunch();
+            verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
+            activityOptions = ActivityOptions.makeBasic();
+            activityOptions.setDismissKeyguard();
+            verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
+            activityOptions = ActivityOptions.makeBasic();
+            activityOptions.setLaunchActivityType(ACTIVITY_TYPE_STANDARD);
+            verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
+            activityOptions = ActivityOptions.makeBasic();
+            activityOptions.setLaunchedFromBubble(true);
+            verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
+            activityOptions = ActivityOptions.makeBasic();
+            activityOptions.setLaunchDisplayId(DEFAULT_DISPLAY);
+            verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
+            activityOptions = ActivityOptions.makeBasic();
+            activityOptions.setLockTaskEnabled(true);
+            verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
+            activityOptions = ActivityOptions.makeCustomTaskAnimation(
+                    getInstrumentation().getContext(), 0, 0, null, null, null);
+            verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
+            RemoteAnimationAdapter remoteAnimationAdapter = mock(RemoteAnimationAdapter.class);
+            RemoteTransition remoteTransition = mock(RemoteTransition.class);
+            activityOptions = ActivityOptions.makeRemoteAnimation(remoteAnimationAdapter);
+            verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
+            activityOptions = ActivityOptions.makeRemoteAnimation(remoteAnimationAdapter,
+                    remoteTransition);
+            verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
+            activityOptions = ActivityOptions.makeBasic();
+            activityOptions.setRemoteAnimationAdapter(remoteAnimationAdapter);
+            verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
+            activityOptions = ActivityOptions.makeRemoteTransition(remoteTransition);
+            verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
+            activityOptions = ActivityOptions.makeBasic();
+            activityOptions.setRemoteTransition(remoteTransition);
+            verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
+            verifySecureExceptionThrown(activityOptions, taskSupervisor,
+                    mock(TaskDisplayArea.class));
+        } finally {
+            mockingSession.finishMocking();
+        }
+    }
+
+    private void verifySecureExceptionThrown(ActivityOptions activityOptions,
+            ActivityTaskSupervisor taskSupervisor) {
+        verifySecureExceptionThrown(activityOptions, taskSupervisor, null /* mockTda */);
+    }
+
+    private void verifySecureExceptionThrown(ActivityOptions activityOptions,
+            ActivityTaskSupervisor taskSupervisor, TaskDisplayArea mockTda) {
+        SafeActivityOptions safeActivityOptions = new SafeActivityOptions(activityOptions);
+        if (mockTda != null) {
+            spyOn(safeActivityOptions);
+            doReturn(mockTda).when(safeActivityOptions).getLaunchTaskDisplayArea(any(), any());
+        }
+
+        boolean isExceptionThrow = false;
+        final ActivityInfo aInfo = mock(ActivityInfo.class);
+        try {
+            safeActivityOptions.getOptions(null, aInfo, null, taskSupervisor);
+        } catch (SecurityException ex) {
+            isExceptionThrow = true;
+        }
+        assertTrue(isExceptionThrow);
+    }
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/ScreenshotTests.java b/services/tests/wmtests/src/com/android/server/wm/ScreenshotTests.java
index b181213..0fcae92 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ScreenshotTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ScreenshotTests.java
@@ -56,6 +56,9 @@
 import androidx.test.filters.SmallTest;
 import androidx.test.rule.ActivityTestRule;
 
+import com.android.server.wm.utils.CommonUtils;
+
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -90,8 +93,13 @@
         mInstrumentation.waitForIdleSync();
     }
 
+    @After
+    public void tearDown() {
+        CommonUtils.waitUntilActivityRemoved(mActivity);
+    }
+
     @Test
-    public void testScreenshotSecureLayers() {
+    public void testScreenshotSecureLayers() throws InterruptedException {
         SurfaceControl secureSC = new SurfaceControl.Builder()
                 .setName("SecureChildSurfaceControl")
                 .setBLASTLayer()
@@ -197,6 +205,8 @@
         private static final long WAIT_TIMEOUT_S = 5;
         private final Handler mHandler = new Handler(Looper.getMainLooper());
 
+        private final CountDownLatch mAttachedLatch = new CountDownLatch(1);
+
         @Override
         protected void onCreate(@Nullable Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
@@ -204,7 +214,16 @@
                     PointerIcon.getSystemIcon(this, PointerIcon.TYPE_NULL));
         }
 
-        SurfaceControl.Transaction addChildSc(SurfaceControl surfaceControl) {
+        @Override
+        public void onAttachedToWindow() {
+            super.onAttachedToWindow();
+            mAttachedLatch.countDown();
+        }
+
+        SurfaceControl.Transaction addChildSc(SurfaceControl surfaceControl)
+                throws InterruptedException {
+            assertTrue("Failed to wait for onAttachedToWindow",
+                    mAttachedLatch.await(WAIT_TIMEOUT_S, TimeUnit.SECONDS));
             SurfaceControl.Transaction t = new SurfaceControl.Transaction();
             CountDownLatch countDownLatch = new CountDownLatch(1);
             mHandler.post(() -> {
diff --git a/services/tests/wmtests/src/com/android/server/wm/SurfaceControlTests.java b/services/tests/wmtests/src/com/android/server/wm/SurfaceControlTests.java
index 4f45d5c..e3f8e8c 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SurfaceControlTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SurfaceControlTests.java
@@ -39,6 +39,8 @@
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.server.wm.utils.CommonUtils;
+
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -123,6 +125,7 @@
 
     @Test
     public void testSurfaceChangedOnRotation() {
+        CommonUtils.dismissKeyguard();
         final Instrumentation instrumentation = getInstrumentation();
         final Context context = instrumentation.getContext();
         final Intent intent = new Intent().setComponent(
@@ -131,18 +134,34 @@
         final Activity activity = instrumentation.startActivitySync(intent);
         final SurfaceView sv = new SurfaceView(activity);
         final AtomicInteger surfaceChangedCount = new AtomicInteger();
+        final boolean[] unexpectedTransformHint = new boolean[1];
         instrumentation.runOnMainSync(() -> activity.setContentView(sv));
         sv.getHolder().addCallback(new SurfaceHolder.Callback() {
+            int mInitialTransformHint = -1;
+            int mInitialW;
+            int mInitialH;
+
             @Override
             public void surfaceCreated(@NonNull SurfaceHolder holder) {
             }
             @Override
             public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width,
                     int height) {
+                final int transformHint =
+                        sv.getViewRootImpl().getSurfaceControl().getTransformHint();
+                if (mInitialTransformHint == -1) {
+                    mInitialTransformHint = transformHint;
+                    mInitialW = width;
+                    mInitialH = height;
+                } else if (mInitialTransformHint == transformHint
+                        && (width > height) != (mInitialW > mInitialH)) {
+                    // For example, the initial hint is from portrait, so the later changes from
+                    // landscape should not receive the same hint.
+                    unexpectedTransformHint[0] = true;
+                }
                 surfaceChangedCount.getAndIncrement();
                 Log.i("surfaceChanged", "width=" + width + " height=" + height
-                        + " getTransformHint="
-                        + sv.getViewRootImpl().getSurfaceControl().getTransformHint());
+                        + " transformHint=" + transformHint);
             }
             @Override
             public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
@@ -160,7 +179,7 @@
                 .windowConfiguration.getRotation();
         if (rotation == newRotation) {
             // The device might not support requested orientation.
-            activity.finishAndRemoveTask();
+            CommonUtils.waitUntilActivityRemoved(activity);
             return;
         }
         final int count = surfaceChangedCount.get();
@@ -169,11 +188,12 @@
         context.startActivity(intent);
         instrumentation.getUiAutomation().syncInputTransactions();
         final int countAfterToFront = count - surfaceChangedCount.get();
-        activity.finishAndRemoveTask();
+        CommonUtils.waitUntilActivityRemoved(activity);
 
         // The first count is triggered from creation, so the target number is 2.
-        if (count > 2) {
-            fail("More than once surfaceChanged for rotation change: " + count);
+        if (count > 2 && unexpectedTransformHint[0]) {
+            fail("Received transform hint in previous orientation with more than once"
+                    + " surfaceChanged for rotation change: " + count);
         }
         if (countAfterToFront > 1) {
             fail("More than once surfaceChanged for app transition with rotation change: "
diff --git a/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java b/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java
index 41bfc80..ce1a46b 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java
@@ -52,6 +52,8 @@
 import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.rule.ActivityTestRule;
 
+import com.android.server.wm.utils.CommonUtils;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -87,6 +89,7 @@
     @After
     public void tearDown() {
         mInstrumentation.getUiAutomation().dropShellPermissionIdentity();
+        CommonUtils.waitUntilActivityRemoved(mActivity);
     }
 
     @Test
@@ -98,7 +101,7 @@
         mView1 = new Button(mActivity);
         mView2 = new Button(mActivity);
 
-        mActivity.runOnUiThread(() -> {
+        mInstrumentation.runOnMainSync(() -> {
             TestWindowlessWindowManager wwm = new TestWindowlessWindowManager(
                     mActivity.getResources().getConfiguration(), sc, null);
 
diff --git a/services/tests/wmtests/src/com/android/server/wm/SurfaceSyncGroupTests.java b/services/tests/wmtests/src/com/android/server/wm/SurfaceSyncGroupTests.java
index 89d7252..77290e3 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SurfaceSyncGroupTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SurfaceSyncGroupTests.java
@@ -23,25 +23,33 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import android.app.Activity;
 import android.app.Instrumentation;
+import android.app.KeyguardManager;
 import android.graphics.Bitmap;
 import android.graphics.Color;
 import android.graphics.PixelFormat;
 import android.graphics.Rect;
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.platform.test.annotations.Presubmit;
-import android.server.wm.scvh.SurfaceSyncGroupActivity;
 import android.view.SurfaceControl;
 import android.view.View;
+import android.view.ViewGroup;
 import android.view.ViewTreeObserver;
 import android.view.WindowManager;
 import android.view.cts.surfacevalidator.BitmapPixelChecker;
+import android.widget.FrameLayout;
 import android.window.SurfaceSyncGroup;
 
+import androidx.annotation.Nullable;
 import androidx.test.InstrumentationRegistry;
 import androidx.test.rule.ActivityTestRule;
 
+import com.android.server.wm.utils.CommonUtils;
+
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -56,10 +64,10 @@
     private static final long TIMEOUT_S = HW_TIMEOUT_MULTIPLIER * 5L;
 
     @Rule
-    public ActivityTestRule<SurfaceSyncGroupActivity> mActivityRule = new ActivityTestRule<>(
-            SurfaceSyncGroupActivity.class);
+    public ActivityTestRule<TestActivity> mActivityRule = new ActivityTestRule<>(
+            TestActivity.class);
 
-    private SurfaceSyncGroupActivity mActivity;
+    private TestActivity mActivity;
 
     Instrumentation mInstrumentation;
 
@@ -74,6 +82,12 @@
         mHandler = mHandlerThread.getThreadHandler();
     }
 
+    @After
+    public void tearDown() {
+        mHandlerThread.quitSafely();
+        CommonUtils.waitUntilActivityRemoved(mActivity);
+    }
+
     @Test
     public void testOverlappingSyncsEnsureOrder_WhenTimeout() throws InterruptedException {
         WindowManager.LayoutParams params = new WindowManager.LayoutParams();
@@ -187,4 +201,24 @@
 
         swBitmap.recycle();
     }
+
+    public static class TestActivity extends Activity {
+        private ViewGroup mParentView;
+
+        @Override
+        public void onCreate(@Nullable Bundle savedInstanceState) {
+            super.onCreate(savedInstanceState);
+
+
+            mParentView = new FrameLayout(this);
+            setContentView(mParentView);
+
+            KeyguardManager km = getSystemService(KeyguardManager.class);
+            km.requestDismissKeyguard(this, null);
+        }
+
+        public View getBackgroundView() {
+            return mParentView;
+        }
+    }
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/SurfaceViewSyncContinuousTest.java b/services/tests/wmtests/src/com/android/server/wm/SurfaceViewSyncContinuousTest.java
index ad7314c..c59a04b 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SurfaceViewSyncContinuousTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SurfaceViewSyncContinuousTest.java
@@ -18,7 +18,6 @@
 
 import static android.server.wm.UiDeviceUtils.pressUnlockButton;
 import static android.server.wm.UiDeviceUtils.pressWakeupButton;
-import static android.server.wm.WindowManagerState.getLogicalDisplaySize;
 
 import android.app.KeyguardManager;
 import android.os.PowerManager;
@@ -26,6 +25,9 @@
 
 import androidx.test.rule.ActivityTestRule;
 
+import com.android.server.wm.utils.CommonUtils;
+
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -46,7 +48,6 @@
     @Before
     public void setup() {
         mCapturedActivity = mActivityRule.getActivity();
-        mCapturedActivity.setLogicalDisplaySize(getLogicalDisplaySize());
 
         final KeyguardManager km = mCapturedActivity.getSystemService(KeyguardManager.class);
         if (km != null && km.isKeyguardLocked() || !Objects.requireNonNull(
@@ -56,6 +57,11 @@
         }
     }
 
+    @After
+    public void tearDown() {
+        CommonUtils.waitUntilActivityRemoved(mCapturedActivity);
+    }
+
     @Test
     public void testSurfaceViewSyncDuringResize() throws Throwable {
         mCapturedActivity.verifyTest(new SurfaceViewSyncValidatorTestCase(), mName);
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 7edfd9a..be436bf 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
@@ -43,6 +43,7 @@
 import static org.mockito.Mockito.withSettings;
 
 import android.app.ActivityManagerInternal;
+import android.app.ActivityThread;
 import android.app.AppOpsManager;
 import android.app.IApplicationThread;
 import android.app.usage.UsageStatsManagerInternal;
@@ -208,7 +209,11 @@
         spyOn(mContext);
 
         doReturn(null).when(mContext)
-                .registerReceiver(nullable(BroadcastReceiver.class), any(IntentFilter.class));
+                .registerReceiver(nullable(BroadcastReceiver.class), any(IntentFilter.class),
+                        nullable(String.class), nullable(Handler.class));
+        doReturn(null).when(mContext)
+                .registerReceiver(nullable(BroadcastReceiver.class), any(IntentFilter.class),
+                        nullable(String.class), nullable(Handler.class), anyInt());
         doReturn(null).when(mContext)
                 .registerReceiverAsUser(any(BroadcastReceiver.class), any(UserHandle.class),
                         any(IntentFilter.class), nullable(String.class), nullable(Handler.class));
@@ -317,6 +322,10 @@
                 mock(ActivityManagerService.class, withSettings().stubOnly());
         mAtmService = new TestActivityTaskManagerService(mContext, amService);
         LocalServices.addService(ActivityTaskManagerInternal.class, mAtmService.getAtmInternal());
+        // Create a fake WindowProcessController for the system process.
+        final WindowProcessController wpc =
+                addProcess("android", "system", 1485 /* pid */, 1000 /* uid */);
+        wpc.setThread(ActivityThread.currentActivityThread().getApplicationThread());
     }
 
     private void setUpWindowManagerService() {
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskPositioningControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskPositioningControllerTests.java
index 8bc4ced..db08eab 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskPositioningControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskPositioningControllerTests.java
@@ -34,6 +34,7 @@
 import android.platform.test.annotations.Presubmit;
 import android.view.InputChannel;
 
+import androidx.test.filters.FlakyTest;
 import androidx.test.filters.SmallTest;
 
 import org.junit.Before;
@@ -72,6 +73,7 @@
         doReturn(mock(InputMonitor.class)).when(mDisplayContent).getInputMonitor();
     }
 
+    @FlakyTest(bugId = 291067614)
     @Test
     public void testStartAndFinishPositioning() {
         assertFalse(mTarget.isPositioningLocked());
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java
index 453e468..16c38ac 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java
@@ -54,9 +54,13 @@
 
 import androidx.test.filters.MediumTest;
 
+import com.android.server.wm.utils.CommonUtils;
+
 import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.CountDownLatch;
@@ -73,10 +77,16 @@
     private ITaskStackListener mTaskStackListener;
     private VirtualDisplay mVirtualDisplay;
     private ImageReader mImageReader;
+    private final ArrayList<Activity> mStartedActivities = new ArrayList<>();
 
     private static final int WAIT_TIMEOUT_MS = 5000;
     private static final Object sLock = new Object();
 
+    @Before
+    public void setUp() {
+        CommonUtils.dismissKeyguard();
+    }
+
     @After
     public void tearDown() throws Exception {
         if (mTaskStackListener != null) {
@@ -86,6 +96,19 @@
             mVirtualDisplay.release();
             mImageReader.close();
         }
+        // Finish from bottom to top.
+        final int size = mStartedActivities.size();
+        for (int i = 0; i < size; i++) {
+            final Activity activity = mStartedActivities.get(i);
+            if (!activity.isFinishing()) {
+                activity.finish();
+            }
+        }
+        // Wait for the last launched activity to be removed.
+        if (size > 0) {
+            CommonUtils.waitUntilActivityRemoved(mStartedActivities.get(size - 1));
+        }
+        mStartedActivities.clear();
     }
 
     private VirtualDisplay createVirtualDisplay() {
@@ -373,6 +396,7 @@
             throw new RuntimeException("Timed out waiting for Activity");
         }
         activity.waitForResumeStateChange(true);
+        mStartedActivities.add(activity);
         return activity;
     }
 
diff --git a/services/tests/wmtests/src/com/android/server/wm/TestDisplayWindowSettingsProvider.java b/services/tests/wmtests/src/com/android/server/wm/TestDisplayWindowSettingsProvider.java
index b2e44b1..e11df98 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TestDisplayWindowSettingsProvider.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TestDisplayWindowSettingsProvider.java
@@ -52,6 +52,12 @@
         overrideSettings.setTo(overrides);
     }
 
+    @Override
+    public void onDisplayRemoved(@NonNull DisplayInfo info) {
+        final String identifier = getIdentifier(info);
+        mOverrideSettingsMap.remove(identifier);
+    }
+
     @NonNull
     private SettingsEntry getOrCreateOverrideSettingsEntry(DisplayInfo info) {
         final String identifier = getIdentifier(info);
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 ca5d8fe..40b1521 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
@@ -115,7 +115,11 @@
     private BLASTSyncEngine mSyncEngine;
 
     private Transition createTestTransition(int transitType, TransitionController controller) {
-        return new Transition(transitType, 0 /* flags */, controller, controller.mSyncEngine);
+        final Transition transition = new Transition(transitType, 0 /* flags */, controller,
+                controller.mSyncEngine);
+        spyOn(transition.mLogger);
+        doNothing().when(transition.mLogger).logOnSendAsync(any());
+        return transition;
     }
 
     private Transition createTestTransition(int transitType) {
@@ -1401,7 +1405,8 @@
                 .mTaskSnapshotController;
         final ITransitionPlayer player = new ITransitionPlayer.Default();
         controller.registerTransitionPlayer(player, null /* playerProc */);
-        final Transition openTransition = controller.createTransition(TRANSIT_OPEN);
+        final Transition openTransition = createTestTransition(TRANSIT_OPEN, controller);
+        controller.moveToCollecting(openTransition);
 
         // Start out with task2 visible and set up a transition that closes task2 and opens task1
         final Task task1 = createTask(mDisplayContent);
@@ -1433,7 +1438,8 @@
         controller.finishTransition(openTransition);
 
         // We are now going to simulate closing task1 to return back to (open) task2.
-        final Transition closeTransition = controller.createTransition(TRANSIT_CLOSE);
+        final Transition closeTransition = createTestTransition(TRANSIT_CLOSE, controller);
+        controller.moveToCollecting(closeTransition);
 
         closeTransition.collectExistenceChange(task2);
         closeTransition.collectExistenceChange(activity2);
diff --git a/services/tests/wmtests/src/com/android/server/wm/TrustedPresentationCallbackTest.java b/services/tests/wmtests/src/com/android/server/wm/TrustedPresentationCallbackTest.java
index df11a44..f173d66 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TrustedPresentationCallbackTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TrustedPresentationCallbackTest.java
@@ -30,6 +30,9 @@
 
 import androidx.test.ext.junit.rules.ActivityScenarioRule;
 
+import com.android.server.wm.utils.CommonUtils;
+
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -61,6 +64,11 @@
         mActivityRule.getScenario().onActivity(activity -> mActivity = activity);
     }
 
+    @After
+    public void tearDown() {
+        CommonUtils.waitUntilActivityRemoved(mActivity);
+    }
+
     @Test
     public void testAddTrustedPresentationListenerOnWindow() throws InterruptedException {
         boolean[] results = new boolean[1];
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 e3d1b9c..6305bb6 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java
@@ -47,7 +47,6 @@
 
 import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
-import android.content.res.Resources;
 import android.graphics.Rect;
 import android.os.IBinder;
 import android.os.RemoteException;
@@ -65,9 +64,9 @@
 
 import androidx.test.filters.SmallTest;
 
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.AdditionalMatchers;
 
 import java.util.List;
 
@@ -85,14 +84,6 @@
     private static final int INITIAL_HEIGHT = 900;
     private static final int SECOND_WIDTH = 300;
 
-    @Before
-    public void setup() {
-        Resources resources = mWm.mContext.getResources();
-        spyOn(resources);
-        doReturn(false).when(resources).getBoolean(
-                com.android.internal.R.bool.config_offsetWallpaperToCenterOfLargestDisplay);
-    }
-
     @Test
     public void testWallpaperScreenshot() {
         WindowSurfaceController windowSurfaceController = mock(WindowSurfaceController.class);
@@ -190,16 +181,24 @@
 
         spyOn(dc.mWallpaperController);
         doReturn(true).when(dc.mWallpaperController).isWallpaperVisible();
-
+        dc.mWallpaperController.setMinWallpaperScale(.6f);
+        dc.mWallpaperController.setMaxWallpaperScale(1.2f);
         dc.mWallpaperController.adjustWallpaperWindows();
 
+        spyOn(wallpaperWindow);
         spyOn(wallpaperWindow.mClient);
 
         float zoom = .5f;
+        float zoomScale = .9f;
+        wallpaperWindow.mShouldScaleWallpaper = true;
+
         dc.mWallpaperController.setWallpaperZoomOut(homeWindow, zoom);
         assertEquals(zoom, wallpaperWindow.mWallpaperZoomOut, .01f);
-        verify(wallpaperWindow.mClient).dispatchWallpaperOffsets(anyFloat(), anyFloat(), anyFloat(),
-                anyFloat(), eq(zoom), anyBoolean());
+        verify(wallpaperWindow.mClient)
+                .dispatchWallpaperOffsets(
+                        anyFloat(), anyFloat(), anyFloat(), anyFloat(), eq(zoom), anyBoolean());
+        verify(wallpaperWindow)
+                .setWallpaperOffset(anyInt(), anyInt(), AdditionalMatchers.eq(zoomScale, .01f));
     }
 
     @Test
@@ -213,9 +212,12 @@
 
         spyOn(dc.mWallpaperController);
         doReturn(true).when(dc.mWallpaperController).isWallpaperVisible();
+        dc.mWallpaperController.setMinWallpaperScale(.6f);
+        dc.mWallpaperController.setMaxWallpaperScale(1.2f);
 
         dc.mWallpaperController.adjustWallpaperWindows();
 
+        spyOn(wallpaperWindow);
         spyOn(wallpaperWindow.mClient);
 
         float newZoom = .5f;
@@ -227,6 +229,9 @@
         assertEquals(1f, wallpaperWindow.mWallpaperScale, .01f);
         verify(wallpaperWindow.mClient).dispatchWallpaperOffsets(anyFloat(), anyFloat(), anyFloat(),
                 anyFloat(), eq(newZoom), anyBoolean());
+        // As the expected scale is .9 with a zoom of .5f and min and max scale of .6 and 1.2,
+        // if it's passing a scale of 1 it's not scaling the wallpaper.
+        verify(wallpaperWindow).setWallpaperOffset(anyInt(), anyInt(), eq(1f));
     }
 
     @Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java
index f6d0bf1..d85d9b5 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowContextListenerControllerTests.java
@@ -34,25 +34,30 @@
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
+import static org.mockito.MockitoAnnotations.initMocks;
 
-import android.app.IWindowToken;
+import android.app.ClientTransactionHandler;
+import android.app.servertransaction.ClientTransactionItem;
+import android.app.servertransaction.WindowContextInfoChangeItem;
 import android.content.res.Configuration;
 import android.graphics.Rect;
-import android.os.Binder;
 import android.os.Bundle;
-import android.os.IBinder;
 import android.platform.test.annotations.Presubmit;
 import android.view.Display;
 import android.view.DisplayInfo;
+import android.window.WindowContextInfo;
+import android.window.WindowTokenClient;
 
 import androidx.test.filters.SmallTest;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
 import org.mockito.Mockito;
 
 /**
@@ -68,34 +73,65 @@
     private static final int TEST_UID = 12345;
     private static final int ANOTHER_UID = 1000;
 
-    private final IBinder mClientToken = new Binder();
+    @Mock
+    private ClientTransactionHandler mHandler;
+    @Mock
+    private WindowTokenClient mClientToken;
+
+    private WindowProcessController mWpc;
     private WindowContainer<?> mContainer;
 
     @Before
     public void setUp() {
+        initMocks(this);
         mController = new WindowContextListenerController();
         mContainer = createTestWindowToken(TYPE_APPLICATION_OVERLAY, mDisplayContent);
         // Make display on to verify configuration propagation.
         mDefaultDisplay.getDisplayInfo().state = STATE_ON;
         mDisplayContent.getDisplayInfo().state = STATE_ON;
+
+        mWpc = mSystemServicesTestRule.addProcess(
+                DEFAULT_COMPONENT_PACKAGE_NAME, DEFAULT_COMPONENT_PACKAGE_NAME, 0 /* pid */,
+                TEST_UID);
+        // Mock the behaviors on ClientTransaction
+        spyOn(mWpc);
+        doAnswer(invocation -> {
+            // Mock ActivityThread
+            final Object[] args = invocation.getArguments();
+            final WindowTokenClient clientToken = (WindowTokenClient) args[0];
+            final WindowContextInfo info = (WindowContextInfo) args[1];
+            clientToken.onConfigurationChanged(info.getConfiguration(), info.getDisplayId());
+            return null;
+        }).when(mHandler).handleWindowContextInfoChanged(any(), any());
+        doAnswer(invocation -> {
+            // Mock WindowProcessController
+            final Object[] args = invocation.getArguments();
+            final ClientTransactionItem item = (ClientTransactionItem) args[0];
+            if (!(item instanceof WindowContextInfoChangeItem)) {
+                return null;
+            }
+            final WindowContextInfoChangeItem infoChangeItem = (WindowContextInfoChangeItem) item;
+            infoChangeItem.execute(mHandler, null, null);
+            return null;
+        }).when(mWpc).scheduleClientTransactionItem(any());
     }
 
     @Test
     public void testRegisterWindowContextListener() {
-        mController.registerWindowContainerListener(mClientToken, mContainer, -1,
+        mController.registerWindowContainerListener(mWpc, mClientToken, mContainer,
                 TYPE_APPLICATION_OVERLAY, null /* options */);
 
         assertEquals(1, mController.mListeners.size());
 
-        final IBinder clientToken = mock(IBinder.class);
-        mController.registerWindowContainerListener(clientToken, mContainer, -1,
+        final WindowTokenClient clientToken = mock(WindowTokenClient.class);
+        mController.registerWindowContainerListener(mWpc, clientToken, mContainer,
                 TYPE_APPLICATION_OVERLAY, null /* options */);
 
         assertEquals(2, mController.mListeners.size());
 
         final WindowContainer<?> container = createTestWindowToken(TYPE_APPLICATION_OVERLAY,
                 mDefaultDisplay);
-        mController.registerWindowContainerListener(mClientToken, container, -1,
+        mController.registerWindowContainerListener(mWpc, mClientToken, container,
                 TYPE_APPLICATION_OVERLAY, null /* options */);
 
         // The number of listeners doesn't increase since the listener just gets updated.
@@ -121,7 +157,7 @@
         config1.densityDpi = 100;
         mContainer.onRequestedOverrideConfigurationChanged(config1);
 
-        mController.registerWindowContainerListener(clientToken, mContainer, -1,
+        mController.registerWindowContainerListener(mWpc, clientToken, mContainer,
                 TYPE_APPLICATION_OVERLAY, null /* options */);
 
         assertEquals(bounds1, clientToken.mConfiguration.windowConfiguration.getBounds());
@@ -137,7 +173,7 @@
         config2.densityDpi = 200;
         container.onRequestedOverrideConfigurationChanged(config2);
 
-        mController.registerWindowContainerListener(clientToken, container, -1,
+        mController.registerWindowContainerListener(mWpc, clientToken, container,
                 TYPE_APPLICATION_OVERLAY, null /* options */);
 
         assertEquals(bounds2, clientToken.mConfiguration.windowConfiguration.getBounds());
@@ -164,7 +200,7 @@
 
     @Test
     public void testAssertCallerCanModifyListener_CanManageAppTokens_ReturnTrue() {
-        mController.registerWindowContainerListener(mClientToken, mContainer, TEST_UID,
+        mController.registerWindowContainerListener(mWpc, mClientToken, mContainer,
                 TYPE_APPLICATION_OVERLAY, null /* options */);
 
         assertTrue(mController.assertCallerCanModifyListener(mClientToken,
@@ -173,7 +209,7 @@
 
     @Test
     public void testAssertCallerCanModifyListener_SameUid_ReturnTrue() {
-        mController.registerWindowContainerListener(mClientToken, mContainer, TEST_UID,
+        mController.registerWindowContainerListener(mWpc, mClientToken, mContainer,
                 TYPE_APPLICATION_OVERLAY, null /* options */);
 
         assertTrue(mController.assertCallerCanModifyListener(mClientToken,
@@ -182,7 +218,7 @@
 
     @Test(expected = UnsupportedOperationException.class)
     public void testAssertCallerCanModifyListener_DifferentUid_ThrowException() {
-        mController.registerWindowContainerListener(mClientToken, mContainer, TEST_UID,
+        mController.registerWindowContainerListener(mWpc, mClientToken, mContainer,
                 TYPE_APPLICATION_OVERLAY, null /* options */);
 
         mController.assertCallerCanModifyListener(mClientToken,
@@ -198,8 +234,8 @@
                 .build();
         final DisplayArea<?> da = windowContextCreatedToken.getDisplayArea();
 
-        mController.registerWindowContainerListener(mClientToken, windowContextCreatedToken,
-                TEST_UID, TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY, null /* options */);
+        mController.registerWindowContainerListener(mWpc, mClientToken, windowContextCreatedToken,
+                TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY, null /* options */);
 
         assertThat(mController.getContainer(mClientToken)).isEqualTo(windowContextCreatedToken);
 
@@ -233,8 +269,8 @@
                 .setDisplayContent(dualDisplayContent)
                 .setFromClientToken(true)
                 .build();
-        mController.registerWindowContainerListener(mClientToken, windowContextCreatedToken,
-                TEST_UID, TYPE_INPUT_METHOD_DIALOG, null /* options */);
+        mController.registerWindowContainerListener(mWpc, mClientToken, windowContextCreatedToken,
+                TYPE_INPUT_METHOD_DIALOG, null /* options */);
 
         assertThat(mController.getContainer(mClientToken)).isEqualTo(windowContextCreatedToken);
 
@@ -258,7 +294,7 @@
         config1.densityDpi = 100;
         mContainer.onRequestedOverrideConfigurationChanged(config1);
 
-        mController.registerWindowContainerListener(mockToken, mContainer, -1,
+        mController.registerWindowContainerListener(mWpc, mockToken, mContainer,
                 TYPE_APPLICATION_OVERLAY, null /* options */);
 
         verify(mockToken, never()).onConfigurationChanged(any(), anyInt());
@@ -293,14 +329,14 @@
         config1.densityDpi = 100;
         mContainer.onRequestedOverrideConfigurationChanged(config1);
 
-        mController.registerWindowContainerListener(clientToken, mContainer, -1,
+        mController.registerWindowContainerListener(mWpc, clientToken, mContainer,
                 TYPE_APPLICATION_OVERLAY, options);
 
         assertThat(clientToken.mConfiguration).isEqualTo(config1);
         assertThat(clientToken.mDisplayId).isEqualTo(mDisplayContent.mDisplayId);
     }
 
-    private static class TestWindowTokenClient extends IWindowToken.Stub {
+    private static class TestWindowTokenClient extends WindowTokenClient {
         private Configuration mConfiguration;
         private int mDisplayId;
         private boolean mRemoved;
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 b77e4cf..55fda05 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
@@ -21,11 +21,9 @@
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_FOCUS;
-import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC;
-import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_TRUSTED;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.Display.FLAG_OWN_FOCUS;
+import static android.view.Display.INVALID_DISPLAY;
 import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
 import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
 import static android.view.WindowManager.LayoutParams.INPUT_FEATURE_SPY;
@@ -62,15 +60,17 @@
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.argThat;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.description;
 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.ActivityThread;
+import android.app.IApplicationThread;
 import android.content.pm.ActivityInfo;
-import android.graphics.Point;
 import android.graphics.Rect;
-import android.hardware.display.VirtualDisplay;
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.IBinder;
@@ -79,7 +79,6 @@
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.platform.test.annotations.Presubmit;
-import android.util.DisplayMetrics;
 import android.util.MergedConfiguration;
 import android.view.ContentRecordingSession;
 import android.view.IWindow;
@@ -87,7 +86,6 @@
 import android.view.InputChannel;
 import android.view.InsetsSourceControl;
 import android.view.InsetsState;
-import android.view.Surface;
 import android.view.SurfaceControl;
 import android.view.View;
 import android.view.WindowInsets;
@@ -118,6 +116,9 @@
 @RunWith(WindowTestRunner.class)
 public class WindowManagerServiceTests extends WindowTestsBase {
 
+    private final IApplicationThread mAppThread = ActivityThread.currentActivityThread()
+            .getApplicationThread();
+
     @Rule
     public AdoptShellPermissionsRule mAdoptShellPermissionsRule = new AdoptShellPermissionsRule(
             InstrumentationRegistry.getInstrumentation().getUiAutomation(),
@@ -427,7 +428,7 @@
     public void testAttachWindowContextToWindowToken_InvalidToken_EarlyReturn() {
         spyOn(mWm.mWindowContextListenerController);
 
-        mWm.attachWindowContextToWindowToken(new Binder(), new Binder());
+        mWm.attachWindowContextToWindowToken(mAppThread, new Binder(), new Binder());
 
         verify(mWm.mWindowContextListenerController, never()).getWindowType(any());
     }
@@ -440,7 +441,7 @@
         doReturn(INVALID_WINDOW_TYPE).when(mWm.mWindowContextListenerController)
                 .getWindowType(any());
 
-        mWm.attachWindowContextToWindowToken(new Binder(), windowToken.token);
+        mWm.attachWindowContextToWindowToken(mAppThread, new Binder(), windowToken.token);
     }
 
     @Test(expected = IllegalArgumentException.class)
@@ -451,7 +452,7 @@
         doReturn(TYPE_APPLICATION).when(mWm.mWindowContextListenerController)
                 .getWindowType(any());
 
-        mWm.attachWindowContextToWindowToken(new Binder(), windowToken.token);
+        mWm.attachWindowContextToWindowToken(mAppThread, new Binder(), windowToken.token);
     }
 
     @Test
@@ -464,10 +465,10 @@
         doReturn(false).when(mWm.mWindowContextListenerController)
                 .assertCallerCanModifyListener(any(), anyBoolean(), anyInt());
 
-        mWm.attachWindowContextToWindowToken(new Binder(), windowToken.token);
+        mWm.attachWindowContextToWindowToken(mAppThread, new Binder(), windowToken.token);
 
         verify(mWm.mWindowContextListenerController, never()).registerWindowContainerListener(
-                any(), any(), anyInt(), anyInt(), any());
+                any(), any(), any(), anyInt(), any(), anyBoolean());
     }
 
     @Test
@@ -481,11 +482,11 @@
                 .assertCallerCanModifyListener(any(), anyBoolean(), anyInt());
 
         final IBinder clientToken = new Binder();
-        mWm.attachWindowContextToWindowToken(clientToken, windowToken.token);
-
-        verify(mWm.mWindowContextListenerController).registerWindowContainerListener(
-                eq(clientToken), eq(windowToken), anyInt(), eq(TYPE_INPUT_METHOD),
-                eq(windowToken.mOptions));
+        mWm.attachWindowContextToWindowToken(mAppThread, clientToken, windowToken.token);
+        final WindowProcessController wpc = mAtm.getProcessController(mAppThread);
+        verify(mWm.mWindowContextListenerController).registerWindowContainerListener(wpc,
+                clientToken, windowToken, TYPE_INPUT_METHOD, windowToken.mOptions,
+                false /* shouldDispatchConfigWhenRegistering */);
     }
 
     @Test
@@ -513,7 +514,14 @@
                 new InsetsSourceControl.Array(), new Rect(), new float[1]);
 
         verify(mWm.mWindowContextListenerController, never()).registerWindowContainerListener(any(),
-                any(), anyInt(), anyInt(), any());
+                any(), any(), anyInt(), any(), anyBoolean());
+    }
+
+    @Test
+    public void testIsInTouchMode_returnsDefaultInTouchModeForinexistingDisplay() {
+        assertThat(mWm.isInTouchMode(INVALID_DISPLAY)).isEqualTo(
+                mContext.getResources().getBoolean(
+                        com.android.internal.R.bool.config_defaultInTouchMode));
     }
 
     @Test
@@ -562,13 +570,14 @@
         mWm.mPerDisplayFocusEnabled = false;
 
         // Create one extra display
-        final VirtualDisplay virtualDisplay = createVirtualDisplay(/* ownFocus= */ false);
-        final VirtualDisplay virtualDisplayOwnTouchMode =
-                createVirtualDisplay(/* ownFocus= */ true);
+        final DisplayContent display = createMockSimulatedDisplay();
+        display.getDisplayInfo().flags &= ~FLAG_OWN_FOCUS;
+        final DisplayContent displayOwnTouchMode = createMockSimulatedDisplay();
+        displayOwnTouchMode.getDisplayInfo().flags |= FLAG_OWN_FOCUS;
         final int numberOfDisplays = mWm.mRoot.mChildren.size();
         assertThat(numberOfDisplays).isAtLeast(3);
         final int numberOfGlobalTouchModeDisplays = (int) mWm.mRoot.mChildren.stream()
-                .filter(d -> (d.getDisplay().getFlags() & FLAG_OWN_FOCUS) == 0)
+                .filter(d -> (d.getDisplayInfo().flags & FLAG_OWN_FOCUS) == 0)
                 .count();
         assertThat(numberOfGlobalTouchModeDisplays).isAtLeast(2);
 
@@ -588,12 +597,13 @@
     }
 
     @Test
-    public void testSetInTouchMode_multiDisplay_perDisplayFocus_singleDisplayTouchModeUpdate() {
+    public void testSetInTouchMode_multiDisplay_singleDisplayTouchModeUpdate() {
         // Enable global touch mode
         mWm.mPerDisplayFocusEnabled = true;
 
         // Create one extra display
-        final VirtualDisplay virtualDisplay = createVirtualDisplay(/* ownFocus= */ false);
+        final DisplayContent virtualDisplay = createMockSimulatedDisplay();
+        virtualDisplay.getDisplayInfo().flags &= ~FLAG_OWN_FOCUS;
         final int numberOfDisplays = mWm.mRoot.mChildren.size();
         assertThat(numberOfDisplays).isAtLeast(2);
 
@@ -605,99 +615,64 @@
         when(mWm.mAtmService.instrumentationSourceHasPermission(callingPid,
                 android.Manifest.permission.MODIFY_TOUCH_MODE_STATE)).thenReturn(true);
 
-        mWm.setInTouchMode(!currentTouchMode, virtualDisplay.getDisplay().getDisplayId());
+        mWm.setInTouchMode(!currentTouchMode, virtualDisplay.mDisplayId);
 
         // Ensure that new display touch mode state has changed.
         verify(mWm.mInputManager).setInTouchMode(
                 !currentTouchMode, callingPid, callingUid, /* hasPermission= */ true,
-                virtualDisplay.getDisplay().getDisplayId());
-    }
+                virtualDisplay.mDisplayId);
 
-    @Test
-    public void testSetInTouchMode_multiDisplay_ownTouchMode_singleDisplayTouchModeUpdate() {
-        // Disable global touch mode
+        // Disable global touch mode and make the virtual display own focus.
         mWm.mPerDisplayFocusEnabled = false;
-
-        // Create one extra display
-        final VirtualDisplay virtualDisplay = createVirtualDisplay(/* ownFocus= */ true);
-        final int numberOfDisplays = mWm.mRoot.mChildren.size();
-        assertThat(numberOfDisplays).isAtLeast(2);
-
-        // Get current touch mode state and setup WMS to run setInTouchMode
-        boolean currentTouchMode = mWm.isInTouchMode(DEFAULT_DISPLAY);
-        int callingPid = Binder.getCallingPid();
-        int callingUid = Binder.getCallingUid();
-        doReturn(false).when(mWm).checkCallingPermission(anyString(), anyString(), anyBoolean());
-        when(mWm.mAtmService.instrumentationSourceHasPermission(callingPid,
-                android.Manifest.permission.MODIFY_TOUCH_MODE_STATE)).thenReturn(true);
-
-        mWm.setInTouchMode(!currentTouchMode, virtualDisplay.getDisplay().getDisplayId());
+        virtualDisplay.getDisplayInfo().flags |= FLAG_OWN_FOCUS;
+        clearInvocations(mWm.mInputManager);
+        mWm.setInTouchMode(!currentTouchMode, virtualDisplay.mDisplayId);
 
         // Ensure that new display touch mode state has changed.
         verify(mWm.mInputManager).setInTouchMode(
                 !currentTouchMode, callingPid, callingUid, /* hasPermission= */ true,
-                virtualDisplay.getDisplay().getDisplayId());
+                virtualDisplay.mDisplayId);
     }
 
     @Test
-    public void testSetInTouchModeOnAllDisplays_perDisplayFocusDisabled() {
-        testSetInTouchModeOnAllDisplays(/* perDisplayFocusEnabled= */ false);
-    }
-
-    @Test
-    public void testSetInTouchModeOnAllDisplays_perDisplayFocusEnabled() {
-        testSetInTouchModeOnAllDisplays(/* perDisplayFocusEnabled= */ true);
-    }
-
-    private void testSetInTouchModeOnAllDisplays(boolean perDisplayFocusEnabled) {
-        // Set global touch mode with the value passed as argument.
-        mWm.mPerDisplayFocusEnabled = perDisplayFocusEnabled;
-
+    public void testSetInTouchModeOnAllDisplays() {
         // Create a couple of extra displays.
         // setInTouchModeOnAllDisplays should ignore the ownFocus setting.
-        final VirtualDisplay virtualDisplay = createVirtualDisplay(/* ownFocus= */ false);
-        final VirtualDisplay virtualDisplayOwnFocus = createVirtualDisplay(/* ownFocus= */ true);
+        final DisplayContent display = createMockSimulatedDisplay();
+        display.getDisplayInfo().flags &= ~FLAG_OWN_FOCUS;
+        final DisplayContent displayOwnTouchMode = createMockSimulatedDisplay();
+        displayOwnTouchMode.getDisplayInfo().flags |= FLAG_OWN_FOCUS;
 
         int callingPid = Binder.getCallingPid();
         int callingUid = Binder.getCallingUid();
+        doReturn(true).when(mWm.mInputManager).setInTouchMode(anyBoolean(), anyInt(),
+                anyInt(), anyBoolean(), anyInt());
         doReturn(false).when(mWm).checkCallingPermission(anyString(), anyString(), anyBoolean());
         when(mWm.mAtmService.instrumentationSourceHasPermission(callingPid,
                 android.Manifest.permission.MODIFY_TOUCH_MODE_STATE)).thenReturn(true);
 
-        for (boolean inTouchMode : new boolean[]{true, false}) {
-            mWm.setInTouchModeOnAllDisplays(inTouchMode);
-            for (int i = 0; i < mWm.mRoot.mChildren.size(); ++i) {
-                DisplayContent dc = mWm.mRoot.mChildren.get(i);
-                // All displays that are not already in the desired touch mode are requested to
-                // change their touch mode.
-                if (dc.isInTouchMode() != inTouchMode) {
-                    verify(mWm.mInputManager).setInTouchMode(
-                            true, callingPid, callingUid, /* hasPermission= */ true,
-                            dc.getDisplay().getDisplayId());
+        final Runnable verification = () -> {
+            for (boolean inTouchMode : new boolean[] { true, false }) {
+                mWm.setInTouchModeOnAllDisplays(inTouchMode);
+                for (int i = 0; i < mRootWindowContainer.getChildCount(); ++i) {
+                    final DisplayContent dc = mRootWindowContainer.getChildAt(i);
+                    // All displays that are not already in the desired touch mode are requested to
+                    // change their touch mode.
+                    if (dc.isInTouchMode() != inTouchMode) {
+                        verify(mWm.mInputManager, description("perDisplayFocusEnabled="
+                                + mWm.mPerDisplayFocusEnabled)).setInTouchMode(true,
+                                callingPid, callingUid, /* hasPermission= */ true, dc.mDisplayId);
+                    }
                 }
             }
-        }
-    }
+        };
 
-    private VirtualDisplay createVirtualDisplay(boolean ownFocus) {
-        // Create virtual display
-        Point surfaceSize = new Point(
-                mDefaultDisplay.getDefaultTaskDisplayArea().getBounds().width(),
-                mDefaultDisplay.getDefaultTaskDisplayArea().getBounds().height());
-        int flags = VIRTUAL_DISPLAY_FLAG_PUBLIC;
-        if (ownFocus) {
-            flags |= VIRTUAL_DISPLAY_FLAG_OWN_FOCUS | VIRTUAL_DISPLAY_FLAG_TRUSTED;
-        }
-        VirtualDisplay virtualDisplay = mWm.mDisplayManager.createVirtualDisplay("VirtualDisplay",
-                surfaceSize.x, surfaceSize.y, DisplayMetrics.DENSITY_140, new Surface(), flags);
-        final int displayId = virtualDisplay.getDisplay().getDisplayId();
-        mWm.mRoot.onDisplayAdded(displayId);
+        mWm.mPerDisplayFocusEnabled = false;
+        verification.run();
 
-        // Ensure that virtual display was properly created and stored in WRC
-        assertThat(mWm.mRoot.getDisplayContent(
-                virtualDisplay.getDisplay().getDisplayId())).isNotNull();
-
-        return virtualDisplay;
+        clearInvocations(mWm.mInputManager);
+        mWm.mPerDisplayFocusEnabled = true;
+        verification.run();
     }
 
     @Test
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 873c7f4..62de67a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
@@ -901,6 +901,7 @@
         DisplayInfo displayInfo = new DisplayInfo();
         displayInfo.copyFrom(mDisplayInfo);
         displayInfo.type = Display.TYPE_VIRTUAL;
+        displayInfo.state = Display.STATE_ON;
         displayInfo.ownerUid = SYSTEM_UID;
         return createNewDisplay(displayInfo, DISPLAY_IME_POLICY_FALLBACK_DISPLAY, overrideSettings);
     }
diff --git a/services/tests/wmtests/src/com/android/server/wm/utils/CommonUtils.java b/services/tests/wmtests/src/com/android/server/wm/utils/CommonUtils.java
index 99d73cf..ed23296 100644
--- a/services/tests/wmtests/src/com/android/server/wm/utils/CommonUtils.java
+++ b/services/tests/wmtests/src/com/android/server/wm/utils/CommonUtils.java
@@ -18,10 +18,23 @@
 
 import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
 
+import android.app.Activity;
+import android.app.KeyguardManager;
 import android.app.UiAutomation;
+import android.os.SystemClock;
+import android.util.Log;
+import android.view.KeyEvent;
+
+import androidx.test.uiautomator.UiDevice;
+
+import java.io.IOException;
 
 /** Provides common utility functions. */
 public class CommonUtils {
+    private static final String TAG = "CommonUtils";
+    private static final long REMOVAL_TIMEOUT_MS = 3000;
+    private static final long TIMEOUT_INTERVAL_MS = 200;
+
     public static UiAutomation getUiAutomation() {
         return getInstrumentation().getUiAutomation();
     }
@@ -34,4 +47,38 @@
             getUiAutomation().dropShellPermissionIdentity();
         }
     }
+
+    /** Dismisses the Keyguard if it is locked. */
+    public static void dismissKeyguard() {
+        final KeyguardManager keyguardManager = getInstrumentation().getContext().getSystemService(
+                KeyguardManager.class);
+        if (keyguardManager == null || !keyguardManager.isKeyguardLocked()) {
+            return;
+        }
+        final UiDevice device = UiDevice.getInstance(getInstrumentation());
+        device.pressKeyCode(KeyEvent.KEYCODE_WAKEUP);
+        device.pressKeyCode(KeyEvent.KEYCODE_MENU);
+    }
+
+    public static void waitUntilActivityRemoved(Activity activity) {
+        if (!activity.isFinishing()) {
+            activity.finish();
+        }
+        final UiDevice uiDevice = UiDevice.getInstance(getInstrumentation());
+        final String classPattern = activity.getComponentName().flattenToShortString();
+        final long startTime = SystemClock.uptimeMillis();
+        while (SystemClock.uptimeMillis() - startTime <= REMOVAL_TIMEOUT_MS) {
+            SystemClock.sleep(TIMEOUT_INTERVAL_MS);
+            final String windowTokenDump;
+            try {
+                windowTokenDump = uiDevice.executeShellCommand("dumpsys window tokens");
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+            if (!windowTokenDump.contains(classPattern)) {
+                return;
+            }
+        }
+        Log.i(TAG, "Removal timeout of " + classPattern);
+    }
 }
diff --git a/services/texttospeech/java/com/android/server/texttospeech/TextToSpeechManagerService.java b/services/texttospeech/java/com/android/server/texttospeech/TextToSpeechManagerService.java
index 9015563..2411498 100644
--- a/services/texttospeech/java/com/android/server/texttospeech/TextToSpeechManagerService.java
+++ b/services/texttospeech/java/com/android/server/texttospeech/TextToSpeechManagerService.java
@@ -63,6 +63,12 @@
         public void createSession(String engine,
                 ITextToSpeechSessionCallback sessionCallback) {
             synchronized (mLock) {
+                if (engine == null) {
+                    runSessionCallbackMethod(
+                            () -> sessionCallback.onError("Engine cannot be null"));
+                    return;
+                }
+
                 TextToSpeechManagerPerUserService perUserService = getServiceForUserLocked(
                         UserHandle.getCallingUserId());
                 if (perUserService != null) {
diff --git a/services/usage/java/com/android/server/usage/BroadcastResponseStatsTracker.java b/services/usage/java/com/android/server/usage/BroadcastResponseStatsTracker.java
index 7d5be8e..d9cbea9 100644
--- a/services/usage/java/com/android/server/usage/BroadcastResponseStatsTracker.java
+++ b/services/usage/java/com/android/server/usage/BroadcastResponseStatsTracker.java
@@ -28,9 +28,9 @@
 import android.app.usage.BroadcastResponseStats;
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.os.Process;
 import android.os.SystemClock;
 import android.os.UserHandle;
-import android.permission.PermissionManager;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.LongArrayQueue;
@@ -94,9 +94,12 @@
     private AppStandbyInternal mAppStandby;
     private BroadcastResponseStatsLogger mLogger;
     private RoleManager mRoleManager;
+    private final Context mContext;
 
-    BroadcastResponseStatsTracker(@NonNull AppStandbyInternal appStandby) {
+    BroadcastResponseStatsTracker(@NonNull AppStandbyInternal appStandby,
+            @NonNull Context context) {
         mAppStandby = appStandby;
+        mContext = context;
         mLogger = new BroadcastResponseStatsLogger();
     }
 
@@ -289,6 +292,19 @@
         }
     }
 
+    boolean isPackageExemptedFromBroadcastResponseStats(@NonNull String packageName,
+            @NonNull UserHandle user) {
+        synchronized (mLock) {
+            if (doesPackageHoldExemptedPermission(packageName, user)) {
+                return true;
+            }
+            if (doesPackageHoldExemptedRole(packageName, user)) {
+                return true;
+            }
+            return false;
+        }
+    }
+
     boolean doesPackageHoldExemptedRole(@NonNull String packageName, @NonNull UserHandle user) {
         final List<String> exemptedRoles = mAppStandby.getBroadcastResponseExemptedRoles();
         synchronized (mLock) {
@@ -305,12 +321,19 @@
 
     boolean doesPackageHoldExemptedPermission(@NonNull String packageName,
             @NonNull UserHandle user) {
-        final List<String> exemptedPermissions = mAppStandby
-                .getBroadcastResponseExemptedPermissions();
+        int uid;
+        try {
+            uid = mContext.getPackageManager().getPackageUidAsUser(
+                    packageName, user.getIdentifier());
+        } catch (PackageManager.NameNotFoundException e) {
+            return false;
+        }
+        final List<String> exemptedPermissions =
+                mAppStandby.getBroadcastResponseExemptedPermissions();
         for (int i = exemptedPermissions.size() - 1; i >= 0; --i) {
             final String permissionName = exemptedPermissions.get(i);
-            if (PermissionManager.checkPackageNamePermission(permissionName, packageName,
-                    user.getIdentifier()) == PackageManager.PERMISSION_GRANTED) {
+            if (mContext.checkPermission(permissionName, Process.INVALID_PID, uid)
+                    == PackageManager.PERMISSION_GRANTED) {
                 return true;
             }
         }
diff --git a/services/usage/java/com/android/server/usage/StorageStatsService.java b/services/usage/java/com/android/server/usage/StorageStatsService.java
index 0d88a0d..befc4a0 100644
--- a/services/usage/java/com/android/server/usage/StorageStatsService.java
+++ b/services/usage/java/com/android/server/usage/StorageStatsService.java
@@ -364,8 +364,10 @@
             if (appInfo.isSystemApp() && !appInfo.isUpdatedSystemApp()) {
                 // We don't count code baked into system image
             } else {
-                codePaths = ArrayUtils.appendElement(String.class, codePaths,
+                if (appInfo.getCodePath() != null) {
+                    codePaths = ArrayUtils.appendElement(String.class, codePaths,
                         appInfo.getCodePath());
+                }
             }
 
             final PackageStats stats = new PackageStats(TAG);
@@ -418,8 +420,10 @@
                 if (appInfo.isSystemApp() && !appInfo.isUpdatedSystemApp()) {
                     // We don't count code baked into system image
                 } else {
-                    codePaths = ArrayUtils.appendElement(String.class, codePaths,
-                            appInfo.getCodePath());
+                    if (appInfo.getCodePath() != null) {
+                        codePaths = ArrayUtils.appendElement(String.class, codePaths,
+                                appInfo.getCodePath());
+                    }
                 }
             } catch (NameNotFoundException e) {
                 throw new ParcelableException(e);
diff --git a/services/usage/java/com/android/server/usage/TEST_MAPPING b/services/usage/java/com/android/server/usage/TEST_MAPPING
index a3fe6f2..6e84543 100644
--- a/services/usage/java/com/android/server/usage/TEST_MAPPING
+++ b/services/usage/java/com/android/server/usage/TEST_MAPPING
@@ -20,22 +20,13 @@
       ]
     },
     {
-      "name": "CtsUsageStatsTestCases",
+      "name": "CtsBRSTestCases",
       "options": [
         {
-          "include-filter": "android.app.usage.cts.BroadcastResponseStatsTest"
-        },
-        {
           "exclude-annotation": "androidx.test.filters.FlakyTest"
         },
         {
-          "exclude-annotation": "android.platform.test.annotations.FlakyTest"
-        },
-        {
-          "exclude-annotation": "androidx.test.filters.MediumTest"
-        },
-        {
-          "exclude-annotation": "androidx.test.filters.LargeTest"
+          "exclude-annotation": "org.junit.Ignore"
         }
       ]
     }
diff --git a/services/usage/java/com/android/server/usage/UsageStatsDatabase.java b/services/usage/java/com/android/server/usage/UsageStatsDatabase.java
index 361b1c0..f1c5865 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsDatabase.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsDatabase.java
@@ -26,9 +26,9 @@
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.AtomicFile;
+import android.util.LongSparseArray;
 import android.util.Slog;
 import android.util.SparseArray;
-import android.util.TimeSparseArray;
 import android.util.TimeUtils;
 
 import com.android.internal.annotations.VisibleForTesting;
@@ -117,8 +117,8 @@
 
     private final Object mLock = new Object();
     private final File[] mIntervalDirs;
-    @VisibleForTesting
-    final TimeSparseArray<AtomicFile>[] mSortedStatFiles;
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    final LongSparseArray<AtomicFile>[] mSortedStatFiles;
     private final UnixCalendar mCal;
     private final File mVersionFile;
     private final File mBackupsDir;
@@ -155,7 +155,7 @@
         mVersionFile = new File(dir, "version");
         mBackupsDir = new File(dir, "backups");
         mUpdateBreadcrumb = new File(dir, "breadcrumb");
-        mSortedStatFiles = new TimeSparseArray[mIntervalDirs.length];
+        mSortedStatFiles = new LongSparseArray[mIntervalDirs.length];
         mPackageMappingsFile = new File(dir, "mappings");
         mCal = new UnixCalendar(0);
     }
@@ -178,11 +178,16 @@
             }
 
             checkVersionAndBuildLocked();
-            indexFilesLocked();
+            // Perform a pruning of older files if there was an upgrade, otherwise do indexing.
+            if (mUpgradePerformed) {
+                prune(currentTimeMillis); // prune performs an indexing when done
+            } else {
+                indexFilesLocked();
+            }
 
             // Delete files that are in the future.
-            for (TimeSparseArray<AtomicFile> files : mSortedStatFiles) {
-                final int startIndex = files.closestIndexOnOrAfter(currentTimeMillis);
+            for (LongSparseArray<AtomicFile> files : mSortedStatFiles) {
+                final int startIndex = files.firstIndexOnOrAfter(currentTimeMillis);
                 if (startIndex < 0) {
                     continue;
                 }
@@ -216,7 +221,7 @@
      */
     public boolean checkinDailyFiles(CheckinAction checkinAction) {
         synchronized (mLock) {
-            final TimeSparseArray<AtomicFile> files =
+            final LongSparseArray<AtomicFile> files =
                     mSortedStatFiles[UsageStatsManager.INTERVAL_DAILY];
             final int fileCount = files.size();
 
@@ -287,7 +292,7 @@
         // Index the available usage stat files on disk.
         for (int i = 0; i < mSortedStatFiles.length; i++) {
             if (mSortedStatFiles[i] == null) {
-                mSortedStatFiles[i] = new TimeSparseArray<>();
+                mSortedStatFiles[i] = new LongSparseArray<>();
             } else {
                 mSortedStatFiles[i].clear();
             }
@@ -695,7 +700,7 @@
             int filesDeleted = 0;
             int filesMoved = 0;
 
-            for (TimeSparseArray<AtomicFile> files : mSortedStatFiles) {
+            for (LongSparseArray<AtomicFile> files : mSortedStatFiles) {
                 final int fileCount = files.size();
                 for (int i = 0; i < fileCount; i++) {
                     final AtomicFile file = files.valueAt(i);
@@ -829,9 +834,9 @@
         }
 
         synchronized (mLock) {
-            final TimeSparseArray<AtomicFile> intervalStats = mSortedStatFiles[intervalType];
+            final LongSparseArray<AtomicFile> intervalStats = mSortedStatFiles[intervalType];
 
-            int endIndex = intervalStats.closestIndexOnOrBefore(endTime);
+            int endIndex = intervalStats.lastIndexOnOrBefore(endTime);
             if (endIndex < 0) {
                 // All the stats start after this range ends, so nothing matches.
                 if (DEBUG) {
@@ -852,7 +857,7 @@
                 }
             }
 
-            int startIndex = intervalStats.closestIndexOnOrBefore(beginTime);
+            int startIndex = intervalStats.lastIndexOnOrBefore(beginTime);
             if (startIndex < 0) {
                 // All the stats available have timestamps after beginTime, which means they all
                 // match.
@@ -894,7 +899,7 @@
             int bestBucket = -1;
             long smallestDiff = Long.MAX_VALUE;
             for (int i = mSortedStatFiles.length - 1; i >= 0; i--) {
-                final int index = mSortedStatFiles[i].closestIndexOnOrBefore(beginTimeStamp);
+                final int index = mSortedStatFiles[i].lastIndexOnOrBefore(beginTimeStamp);
                 int size = mSortedStatFiles[i].size();
                 if (index >= 0 && index < size) {
                     // We have some results here, check if they are better than our current match.
@@ -914,26 +919,31 @@
      */
     public void prune(final long currentTimeMillis) {
         synchronized (mLock) {
+            // prune all files older than 2 years in the yearly directory
             mCal.setTimeInMillis(currentTimeMillis);
-            mCal.addYears(-3);
+            mCal.addYears(-2);
             pruneFilesOlderThan(mIntervalDirs[UsageStatsManager.INTERVAL_YEARLY],
                     mCal.getTimeInMillis());
 
+            // prune all files older than 6 months in the monthly directory
             mCal.setTimeInMillis(currentTimeMillis);
             mCal.addMonths(-6);
             pruneFilesOlderThan(mIntervalDirs[UsageStatsManager.INTERVAL_MONTHLY],
                     mCal.getTimeInMillis());
 
+            // prune all files older than 4 weeks in the weekly directory
             mCal.setTimeInMillis(currentTimeMillis);
             mCal.addWeeks(-4);
             pruneFilesOlderThan(mIntervalDirs[UsageStatsManager.INTERVAL_WEEKLY],
                     mCal.getTimeInMillis());
 
+            // prune all files older than 10 days in the weekly directory
             mCal.setTimeInMillis(currentTimeMillis);
             mCal.addDays(-10);
             pruneFilesOlderThan(mIntervalDirs[UsageStatsManager.INTERVAL_DAILY],
                     mCal.getTimeInMillis());
 
+            // prune chooser counts for all usage stats older than the defined period
             mCal.setTimeInMillis(currentTimeMillis);
             mCal.addDays(-SELECTION_LOG_RETENTION_LEN);
             for (int i = 0; i < mIntervalDirs.length; ++i) {
@@ -1513,7 +1523,7 @@
             pw.println("Database Summary:");
             pw.increaseIndent();
             for (int i = 0; i < mSortedStatFiles.length; i++) {
-                final TimeSparseArray<AtomicFile> files = mSortedStatFiles[i];
+                final LongSparseArray<AtomicFile> files = mSortedStatFiles[i];
                 final int size = files.size();
                 pw.print(UserUsageStatsService.intervalToString(i));
                 pw.print(" stats files: ");
diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java
index cf236dd..e738d29 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsService.java
@@ -300,7 +300,7 @@
         mHandler = new H(BackgroundThread.get().getLooper());
 
         mAppStandby = mInjector.getAppStandbyController(getContext());
-        mResponseStatsTracker = new BroadcastResponseStatsTracker(mAppStandby);
+        mResponseStatsTracker = new BroadcastResponseStatsTracker(mAppStandby, getContext());
 
         mAppTimeLimit = new AppTimeLimitController(getContext(),
                 new AppTimeLimitController.TimeLimitCallbackListener() {
@@ -2867,6 +2867,18 @@
         }
 
         @Override
+        public boolean isPackageExemptedFromBroadcastResponseStats(@NonNull String callingPackage,
+                @UserIdInt int userId) {
+            Objects.requireNonNull(callingPackage);
+
+            getContext().enforceCallingOrSelfPermission(
+                    android.Manifest.permission.DUMP,
+                    "isPackageExemptedFromBroadcastResponseStats");
+            return mResponseStatsTracker.isPackageExemptedFromBroadcastResponseStats(
+                    callingPackage, UserHandle.of(userId));
+        }
+
+        @Override
         @Nullable
         public String getAppStandbyConstant(@NonNull String key) {
             Objects.requireNonNull(key);
diff --git a/services/usage/java/com/android/server/usage/UserUsageStatsService.java b/services/usage/java/com/android/server/usage/UserUsageStatsService.java
index 9203208..fd56b6e 100644
--- a/services/usage/java/com/android/server/usage/UserUsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UserUsageStatsService.java
@@ -46,10 +46,10 @@
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.AtomicFile;
+import android.util.LongSparseArray;
 import android.util.Slog;
 import android.util.SparseArrayMap;
 import android.util.SparseIntArray;
-import android.util.TimeSparseArray;
 
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.CollectionUtils;
@@ -1024,7 +1024,7 @@
     }
 
     private void dumpFileDetailsForInterval(IndentingPrintWriter ipw, int interval) {
-        final TimeSparseArray<AtomicFile> files = mDatabase.mSortedStatFiles[interval];
+        final LongSparseArray<AtomicFile> files = mDatabase.mSortedStatFiles[interval];
         final int numFiles = files.size();
         for (int i = 0; i < numFiles; i++) {
             final long filename = files.keyAt(i);
diff --git a/services/usb/java/com/android/server/usb/UsbAlsaManager.java b/services/usb/java/com/android/server/usb/UsbAlsaManager.java
index fd0d540..5ef0fe3 100644
--- a/services/usb/java/com/android/server/usb/UsbAlsaManager.java
+++ b/services/usb/java/com/android/server/usb/UsbAlsaManager.java
@@ -304,7 +304,9 @@
         AlsaCardsParser.AlsaCardRecord cardRec =
                 mCardsParser.findCardNumFor(deviceAddress);
         if (cardRec == null) {
-            Slog.e(TAG, "usbDeviceAdded(): cannot find sound card for " + deviceAddress);
+            if (parser.hasAudioInterface()) {
+                Slog.e(TAG, "usbDeviceAdded(): cannot find sound card for " + deviceAddress);
+            }
             return;
         }
 
diff --git a/services/usb/java/com/android/server/usb/UsbService.java b/services/usb/java/com/android/server/usb/UsbService.java
index cad1f6f..5d2f27d 100644
--- a/services/usb/java/com/android/server/usb/UsbService.java
+++ b/services/usb/java/com/android/server/usb/UsbService.java
@@ -347,10 +347,11 @@
         return null;
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.ACCESS_MTP)
     /* Returns a dup of the control file descriptor for the given function. */
     @Override
     public ParcelFileDescriptor getControlFd(long function) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_MTP, null);
+        getControlFd_enforcePermission();
         return mDeviceManager.getControlFd(function);
     }
 
@@ -507,10 +508,11 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USB)
     @Override
     public boolean hasDevicePermissionWithIdentity(UsbDevice device, String packageName,
             int pid, int uid) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        hasDevicePermissionWithIdentity_enforcePermission();
 
         final int userId = UserHandle.getUserId(uid);
         return getPermissionsForUser(userId).hasPermission(device, packageName, pid, uid);
@@ -530,9 +532,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USB)
     @Override
     public boolean hasAccessoryPermissionWithIdentity(UsbAccessory accessory, int pid, int uid) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        hasAccessoryPermissionWithIdentity_enforcePermission();
 
         final int userId = UserHandle.getUserId(uid);
         return getPermissionsForUser(userId).hasPermission(accessory, pid, uid);
@@ -567,9 +570,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USB)
     @Override
     public void grantDevicePermission(UsbDevice device, int uid) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        grantDevicePermission_enforcePermission();
         final int userId = UserHandle.getUserId(uid);
 
         final long token = Binder.clearCallingIdentity();
@@ -580,9 +584,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USB)
     @Override
     public void grantAccessoryPermission(UsbAccessory accessory, int uid) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        grantAccessoryPermission_enforcePermission();
         final int userId = UserHandle.getUserId(uid);
 
         final long token = Binder.clearCallingIdentity();
@@ -625,9 +630,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USB)
     @Override
     public void setCurrentFunctions(long functions, int operationId) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        setCurrentFunctions_enforcePermission();
         Preconditions.checkArgument(UsbManager.areSettableFunctions(functions));
         Preconditions.checkState(mDeviceManager != null);
         mDeviceManager.setCurrentFunctions(functions, operationId);
@@ -643,32 +649,36 @@
         return (getCurrentFunctions() & UsbManager.usbFunctionsFromString(function)) != 0;
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USB)
     @Override
     public long getCurrentFunctions() {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        getCurrentFunctions_enforcePermission();
         Preconditions.checkState(mDeviceManager != null);
         return mDeviceManager.getCurrentFunctions();
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USB)
     @Override
     public void setScreenUnlockedFunctions(long functions) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        setScreenUnlockedFunctions_enforcePermission();
         Preconditions.checkArgument(UsbManager.areSettableFunctions(functions));
         Preconditions.checkState(mDeviceManager != null);
 
         mDeviceManager.setScreenUnlockedFunctions(functions);
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USB)
     @Override
     public long getScreenUnlockedFunctions() {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        getScreenUnlockedFunctions_enforcePermission();
         Preconditions.checkState(mDeviceManager != null);
         return mDeviceManager.getScreenUnlockedFunctions();
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USB)
     @Override
     public int getCurrentUsbSpeed() {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        getCurrentUsbSpeed_enforcePermission();
         Preconditions.checkNotNull(mDeviceManager, "DeviceManager must not be null");
 
         final long ident = Binder.clearCallingIdentity();
@@ -679,9 +689,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USB)
     @Override
     public int getGadgetHalVersion() {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        getGadgetHalVersion_enforcePermission();
         Preconditions.checkNotNull(mDeviceManager, "DeviceManager must not be null");
 
         final long ident = Binder.clearCallingIdentity();
@@ -692,9 +703,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USB)
     @Override
     public void resetUsbGadget() {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        resetUsbGadget_enforcePermission();
         Preconditions.checkNotNull(mDeviceManager, "DeviceManager must not be null");
 
         final long ident = Binder.clearCallingIdentity();
@@ -731,9 +743,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USB)
     @Override
     public List<ParcelableUsbPort> getPorts() {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        getPorts_enforcePermission();
 
         final long ident = Binder.clearCallingIdentity();
         try {
@@ -822,9 +835,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USB)
     @Override
     public int getUsbHalVersion() {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        getUsbHalVersion_enforcePermission();
 
         final long ident = Binder.clearCallingIdentity();
         try {
@@ -891,9 +905,10 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MANAGE_USB)
     @Override
     public void setUsbDeviceConnectionHandler(ComponentName usbDeviceConnectionHandler) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
+        setUsbDeviceConnectionHandler_enforcePermission();
         synchronized (mLock) {
             if (mCurrentUserId == UserHandle.getCallingUserId()) {
                 if (mHostManager != null) {
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/DetectorSession.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/DetectorSession.java
index 7598952..42b08e3 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/DetectorSession.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/DetectorSession.java
@@ -233,7 +233,8 @@
 
         if (ENABLE_PROXIMITY_RESULT) {
             mAttentionManagerInternal = LocalServices.getService(AttentionManagerInternal.class);
-            if (mAttentionManagerInternal != null) {
+            if (mAttentionManagerInternal != null
+                    && mAttentionManagerInternal.isProximitySupported()) {
                 mAttentionManagerInternal.onStartProximityUpdates(mProximityCallbackInternal);
             }
         }
@@ -752,11 +753,11 @@
                                 "Failed to obtain permission RECORD_AUDIO for identity "
                                         + mVoiceInteractorIdentity);
                     }
-                    int hotwordOp = AppOpsManager.strOpToOp(
-                            AppOpsManager.OPSTR_RECORD_AUDIO_HOTWORD);
-                    mAppOpsManager.noteOpNoThrow(hotwordOp,
+                    mAppOpsManager.noteOpNoThrow(
+                            AppOpsPolicy.getVoiceActivationOp(),
                             mVoiceInteractorIdentity.uid, mVoiceInteractorIdentity.packageName,
-                            mVoiceInteractorIdentity.attributionTag, HOTWORD_DETECTION_OP_MESSAGE);
+                            mVoiceInteractorIdentity.attributionTag,
+                                    HOTWORD_DETECTION_OP_MESSAGE);
                 } else {
                     enforcePermissionForDataDelivery(mContext, mVoiceInteractorIdentity,
                             RECORD_AUDIO, HOTWORD_DETECTION_OP_MESSAGE);
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
index 3574ef8..3502a3f 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -2361,8 +2361,7 @@
                     }
                 }
                 if (hitInt && doit) {
-                    // The user is force stopping our current interactor.
-                    // Clear the current settings and restore default state.
+                    // The user is force stopping our current interactor, restart the service.
                     synchronized (VoiceInteractionManagerServiceStub.this) {
                         Slog.i(TAG, "Force stopping current voice interactor: "
                                 + getCurInteractor(userHandle));
@@ -2371,28 +2370,7 @@
                             mImpl.shutdownLocked();
                             setImplLocked(null);
                         }
-
-                        setCurInteractor(null, userHandle);
-                        // TODO: should not reset null here. But even remove this line, the
-                        // initForUser() still reset it because the interactor will be null. Keep
-                        // it now but we should still need to fix it.
-                        setCurRecognizer(null, userHandle);
-                        resetCurAssistant(userHandle);
-                        initForUser(userHandle);
                         switchImplementationIfNeededLocked(true);
-
-                        // When resetting the interactor, the recognizer and the assistant settings
-                        // value, we also need to reset the assistant role to keep the values
-                        // consistent. Clear the assistant role will reset to the default value.
-                        Context context = getContext();
-                        context.getSystemService(RoleManager.class).clearRoleHoldersAsUser(
-                                RoleManager.ROLE_ASSISTANT, 0, UserHandle.of(userHandle),
-                                context.getMainExecutor(), successful -> {
-                                    if (!successful) {
-                                        Slog.e(TAG,
-                                                "Failed to clear default assistant for force stop");
-                                    }
-                                });
                     }
                 } else if (hitRec && doit) {
                     // We are just force-stopping the current recognizer, which is not
diff --git a/services/wallpapereffectsgeneration/OWNERS b/services/wallpapereffectsgeneration/OWNERS
index d2d3e2c0..a351032 100644
--- a/services/wallpapereffectsgeneration/OWNERS
+++ b/services/wallpapereffectsgeneration/OWNERS
@@ -1,4 +1,3 @@
 susharon@google.com
 shanh@google.com
-huiwu@google.com
 srazdan@google.com
diff --git a/startop/view_compiler/Android.bp b/startop/view_compiler/Android.bp
index 9023921..e172090 100644
--- a/startop/view_compiler/Android.bp
+++ b/startop/view_compiler/Android.bp
@@ -40,7 +40,7 @@
         "libziparchive",
         "libz",
     ],
-    cppflags: ["-std=c++17"],
+    cpp_std: "gnu++2b",
     target: {
         android: {
             shared_libs: [
@@ -80,7 +80,7 @@
         "libgflags",
         "libviewcompiler",
     ],
-    host_supported: true
+    host_supported: true,
 }
 
 cc_test_host {
diff --git a/startop/view_compiler/apk_layout_compiler.cc b/startop/view_compiler/apk_layout_compiler.cc
index 1d3b6481..5f5652c 100644
--- a/startop/view_compiler/apk_layout_compiler.cc
+++ b/startop/view_compiler/apk_layout_compiler.cc
@@ -80,10 +80,10 @@
 }
 
 namespace {
-void CompileApkAssetsLayouts(const std::unique_ptr<android::ApkAssets>& assets,
-                             CompilationTarget target, std::ostream& target_out) {
+void CompileApkAssetsLayouts(const android::ApkAssetsPtr& assets, CompilationTarget target,
+                             std::ostream& target_out) {
   android::AssetManager2 resources;
-  resources.SetApkAssets({assets.get()});
+  resources.SetApkAssets({assets});
 
   std::string package_name;
 
diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java
index c152a41..5bdcdf4 100644
--- a/telecomm/java/android/telecom/Call.java
+++ b/telecomm/java/android/telecom/Call.java
@@ -24,6 +24,7 @@
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.pm.ServiceInfo;
 import android.net.Uri;
+import android.os.BadParcelableException;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
@@ -935,6 +936,12 @@
             return mState;
         }
 
+        /**
+         * @return the Telecom identifier associated with this {@link Call} . This is not a stable
+         * identifier and is not guaranteed to be unique across device reboots.
+         */
+        public @NonNull String getId() { return mTelecomCallId; }
+
         /** {@hide} */
         @TestApi
         public String getTelecomCallId() {
@@ -2654,7 +2661,9 @@
         // remove ourselves from the Phone. Note that we do this after completing all state updates
         // so a client can cleanly transition all their UI to the state appropriate for a
         // DISCONNECTED Call while still relying on the existence of that Call in the Phone's list.
-        if (mState == STATE_DISCONNECTED) {
+        // Check if the original state is already disconnected, otherwise onCallRemoved will be
+        // triggered before onCallAdded.
+        if (mState == STATE_DISCONNECTED && stateChanged) {
             fireCallDestroyed();
         }
     }
@@ -2951,21 +2960,27 @@
 
         for(String key : bundle.keySet()) {
             if (key != null) {
-                final Object value = bundle.get(key);
-                final Object newValue = newBundle.get(key);
                 if (!newBundle.containsKey(key)) {
                     return false;
                 }
-                if (value instanceof Bundle && newValue instanceof Bundle) {
-                    if (!areBundlesEqual((Bundle) value, (Bundle) newValue)) {
+                // In case new call extra contains non-framework class objects, return false to
+                // force update the call extra
+                try {
+                    final Object value = bundle.get(key);
+                    final Object newValue = newBundle.get(key);
+                    if (value instanceof Bundle && newValue instanceof Bundle) {
+                        if (!areBundlesEqual((Bundle) value, (Bundle) newValue)) {
+                            return false;
+                        }
+                    }
+                    if (value instanceof byte[] && newValue instanceof byte[]) {
+                        if (!Arrays.equals((byte[]) value, (byte[]) newValue)) {
+                            return false;
+                        }
+                    } else if (!Objects.equals(value, newValue)) {
                         return false;
                     }
-                }
-                if (value instanceof byte[] && newValue instanceof byte[]) {
-                    if (!Arrays.equals((byte[]) value, (byte[]) newValue)) {
-                        return false;
-                    }
-                } else if (!Objects.equals(value, newValue)) {
+                } catch (BadParcelableException e) {
                     return false;
                 }
             }
diff --git a/telecomm/java/android/telecom/CallEndpoint.java b/telecomm/java/android/telecom/CallEndpoint.java
index 0b2211d..ed4bf40 100644
--- a/telecomm/java/android/telecom/CallEndpoint.java
+++ b/telecomm/java/android/telecom/CallEndpoint.java
@@ -61,6 +61,13 @@
     /** Indicates that the type of endpoint through which call media flows is an external. */
     public static final int TYPE_STREAMING     = 5;
 
+    /**
+     * Error message attached to IllegalArgumentException when the endpoint name or id is null.
+     * @hide
+     */
+    private static final String CALLENDPOINT_NAME_ID_NULL_ERROR =
+            "CallEndpoint name cannot be null.";
+
     private final CharSequence mName;
     private final int mType;
     private final ParcelUuid mIdentifier;
@@ -81,6 +88,11 @@
      */
     public CallEndpoint(@NonNull CharSequence name, @EndpointType int type,
             @NonNull ParcelUuid id) {
+        // Ensure that endpoint name and id are non-null.
+        if (name == null || id == null) {
+            throw new IllegalArgumentException(CALLENDPOINT_NAME_ID_NULL_ERROR);
+        }
+
         this.mName = name;
         this.mType = type;
         this.mIdentifier = id;
@@ -93,6 +105,11 @@
 
     /** @hide */
     public CallEndpoint(CallEndpoint endpoint) {
+        // Ensure that endpoint name and id are non-null.
+        if (endpoint.getEndpointName() == null || endpoint.getIdentifier() == null) {
+            throw new IllegalArgumentException(CALLENDPOINT_NAME_ID_NULL_ERROR);
+        }
+
         mName = endpoint.getEndpointName();
         mType = endpoint.getEndpointType();
         mIdentifier = endpoint.getIdentifier();
diff --git a/telecomm/java/android/telecom/Phone.java b/telecomm/java/android/telecom/Phone.java
index 95a8e16..61e829e7 100644
--- a/telecomm/java/android/telecom/Phone.java
+++ b/telecomm/java/android/telecom/Phone.java
@@ -174,6 +174,9 @@
             checkCallTree(parcelableCall);
             call.internalUpdate(parcelableCall, mCallByTelecomCallId);
             fireCallAdded(call);
+            if (call.getState() == Call.STATE_DISCONNECTED) {
+                internalRemoveCall(call);
+            }
         } else {
             Log.w(this, "Call %s added, but it was already present", call.internalGetCallId());
             checkCallTree(parcelableCall);
diff --git a/telecomm/java/android/telecom/StreamingCall.java b/telecomm/java/android/telecom/StreamingCall.java
index 3319fc1..29f436d 100644
--- a/telecomm/java/android/telecom/StreamingCall.java
+++ b/telecomm/java/android/telecom/StreamingCall.java
@@ -56,7 +56,6 @@
 
     /**
      * The ID associated with this call.  This is the same value as {@link CallControl#getCallId()}.
-     * @hide
      */
     public static final String EXTRA_CALL_ID = "android.telecom.extra.CALL_ID";
 
diff --git a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
index fdcb974..53154e6 100644
--- a/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
+++ b/telecomm/java/com/android/internal/telecom/ITelecomService.aidl
@@ -358,6 +358,8 @@
 
     int cleanupOrphanPhoneAccounts();
 
+    boolean isNonUiInCallServiceBound(in String packageName);
+
     void resetCarMode();
 
     void setTestDefaultCallRedirectionApp(String packageName);
diff --git a/telephony/java/android/telephony/AccessNetworkConstants.java b/telephony/java/android/telephony/AccessNetworkConstants.java
index 27ba676..35721f1 100644
--- a/telephony/java/android/telephony/AccessNetworkConstants.java
+++ b/telephony/java/android/telephony/AccessNetworkConstants.java
@@ -19,7 +19,7 @@
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
-import android.hardware.radio.V1_5.AccessNetwork;
+import android.hardware.radio.AccessNetwork;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -134,20 +134,22 @@
      * http://www.etsi.org/deliver/etsi_ts/145000_145099/145005/14.00.00_60/ts_145005v140000p.pdf
      */
     public static final class GeranBand {
-        public static final int BAND_T380 = android.hardware.radio.V1_1.GeranBands.BAND_T380;
-        public static final int BAND_T410 = android.hardware.radio.V1_1.GeranBands.BAND_T410;
-        public static final int BAND_450 = android.hardware.radio.V1_1.GeranBands.BAND_450;
-        public static final int BAND_480 = android.hardware.radio.V1_1.GeranBands.BAND_480;
-        public static final int BAND_710 = android.hardware.radio.V1_1.GeranBands.BAND_710;
-        public static final int BAND_750 = android.hardware.radio.V1_1.GeranBands.BAND_750;
-        public static final int BAND_T810 = android.hardware.radio.V1_1.GeranBands.BAND_T810;
-        public static final int BAND_850 = android.hardware.radio.V1_1.GeranBands.BAND_850;
-        public static final int BAND_P900 = android.hardware.radio.V1_1.GeranBands.BAND_P900;
-        public static final int BAND_E900 = android.hardware.radio.V1_1.GeranBands.BAND_E900;
-        public static final int BAND_R900 = android.hardware.radio.V1_1.GeranBands.BAND_R900;
-        public static final int BAND_DCS1800 = android.hardware.radio.V1_1.GeranBands.BAND_DCS1800;
-        public static final int BAND_PCS1900 = android.hardware.radio.V1_1.GeranBands.BAND_PCS1900;
-        public static final int BAND_ER900 = android.hardware.radio.V1_1.GeranBands.BAND_ER900;
+        public static final int BAND_T380 = android.hardware.radio.network.GeranBands.BAND_T380;
+        public static final int BAND_T410 = android.hardware.radio.network.GeranBands.BAND_T410;
+        public static final int BAND_450 = android.hardware.radio.network.GeranBands.BAND_450;
+        public static final int BAND_480 = android.hardware.radio.network.GeranBands.BAND_480;
+        public static final int BAND_710 = android.hardware.radio.network.GeranBands.BAND_710;
+        public static final int BAND_750 = android.hardware.radio.network.GeranBands.BAND_750;
+        public static final int BAND_T810 = android.hardware.radio.network.GeranBands.BAND_T810;
+        public static final int BAND_850 = android.hardware.radio.network.GeranBands.BAND_850;
+        public static final int BAND_P900 = android.hardware.radio.network.GeranBands.BAND_P900;
+        public static final int BAND_E900 = android.hardware.radio.network.GeranBands.BAND_E900;
+        public static final int BAND_R900 = android.hardware.radio.network.GeranBands.BAND_R900;
+        public static final int BAND_DCS1800 =
+                android.hardware.radio.network.GeranBands.BAND_DCS1800;
+        public static final int BAND_PCS1900 =
+                android.hardware.radio.network.GeranBands.BAND_PCS1900;
+        public static final int BAND_ER900 = android.hardware.radio.network.GeranBands.BAND_ER900;
 
         /**
          * GeranBand
@@ -226,28 +228,28 @@
      * http://www.etsi.org/deliver/etsi_ts/125100_125199/125104/13.03.00_60/ts_125104v130p.pdf
      */
     public static final class UtranBand {
-        public static final int BAND_1 = android.hardware.radio.V1_5.UtranBands.BAND_1;
-        public static final int BAND_2 = android.hardware.radio.V1_5.UtranBands.BAND_2;
-        public static final int BAND_3 = android.hardware.radio.V1_5.UtranBands.BAND_3;
-        public static final int BAND_4 = android.hardware.radio.V1_5.UtranBands.BAND_4;
-        public static final int BAND_5 = android.hardware.radio.V1_5.UtranBands.BAND_5;
-        public static final int BAND_6 = android.hardware.radio.V1_5.UtranBands.BAND_6;
-        public static final int BAND_7 = android.hardware.radio.V1_5.UtranBands.BAND_7;
-        public static final int BAND_8 = android.hardware.radio.V1_5.UtranBands.BAND_8;
-        public static final int BAND_9 = android.hardware.radio.V1_5.UtranBands.BAND_9;
-        public static final int BAND_10 = android.hardware.radio.V1_5.UtranBands.BAND_10;
-        public static final int BAND_11 = android.hardware.radio.V1_5.UtranBands.BAND_11;
-        public static final int BAND_12 = android.hardware.radio.V1_5.UtranBands.BAND_12;
-        public static final int BAND_13 = android.hardware.radio.V1_5.UtranBands.BAND_13;
-        public static final int BAND_14 = android.hardware.radio.V1_5.UtranBands.BAND_14;
+        public static final int BAND_1 = android.hardware.radio.network.UtranBands.BAND_1;
+        public static final int BAND_2 = android.hardware.radio.network.UtranBands.BAND_2;
+        public static final int BAND_3 = android.hardware.radio.network.UtranBands.BAND_3;
+        public static final int BAND_4 = android.hardware.radio.network.UtranBands.BAND_4;
+        public static final int BAND_5 = android.hardware.radio.network.UtranBands.BAND_5;
+        public static final int BAND_6 = android.hardware.radio.network.UtranBands.BAND_6;
+        public static final int BAND_7 = android.hardware.radio.network.UtranBands.BAND_7;
+        public static final int BAND_8 = android.hardware.radio.network.UtranBands.BAND_8;
+        public static final int BAND_9 = android.hardware.radio.network.UtranBands.BAND_9;
+        public static final int BAND_10 = android.hardware.radio.network.UtranBands.BAND_10;
+        public static final int BAND_11 = android.hardware.radio.network.UtranBands.BAND_11;
+        public static final int BAND_12 = android.hardware.radio.network.UtranBands.BAND_12;
+        public static final int BAND_13 = android.hardware.radio.network.UtranBands.BAND_13;
+        public static final int BAND_14 = android.hardware.radio.network.UtranBands.BAND_14;
         // band 15, 16, 17, 18 are reserved
-        public static final int BAND_19 = android.hardware.radio.V1_5.UtranBands.BAND_19;
-        public static final int BAND_20 = android.hardware.radio.V1_5.UtranBands.BAND_20;
-        public static final int BAND_21 = android.hardware.radio.V1_5.UtranBands.BAND_21;
-        public static final int BAND_22 = android.hardware.radio.V1_5.UtranBands.BAND_22;
+        public static final int BAND_19 = android.hardware.radio.network.UtranBands.BAND_19;
+        public static final int BAND_20 = android.hardware.radio.network.UtranBands.BAND_20;
+        public static final int BAND_21 = android.hardware.radio.network.UtranBands.BAND_21;
+        public static final int BAND_22 = android.hardware.radio.network.UtranBands.BAND_22;
         // band 23, 24 are reserved
-        public static final int BAND_25 = android.hardware.radio.V1_5.UtranBands.BAND_25;
-        public static final int BAND_26 = android.hardware.radio.V1_5.UtranBands.BAND_26;
+        public static final int BAND_25 = android.hardware.radio.network.UtranBands.BAND_25;
+        public static final int BAND_26 = android.hardware.radio.network.UtranBands.BAND_26;
 
         // Frequency bands for TD-SCDMA. Defined in 3GPP TS 25.102, Table 5.2.
 
@@ -256,38 +258,38 @@
          * 1900 - 1920 MHz: Uplink and downlink transmission
          * 2010 - 2025 MHz: Uplink and downlink transmission
          */
-        public static final int BAND_A = android.hardware.radio.V1_5.UtranBands.BAND_A;
+        public static final int BAND_A = android.hardware.radio.network.UtranBands.BAND_A;
 
         /**
          * Band B
          * 1850 - 1910 MHz: Uplink and downlink transmission
          * 1930 - 1990 MHz: Uplink and downlink transmission
          */
-        public static final int BAND_B = android.hardware.radio.V1_5.UtranBands.BAND_B;
+        public static final int BAND_B = android.hardware.radio.network.UtranBands.BAND_B;
 
         /**
          * Band C
          * 1910 - 1930 MHz: Uplink and downlink transmission
          */
-        public static final int BAND_C = android.hardware.radio.V1_5.UtranBands.BAND_C;
+        public static final int BAND_C = android.hardware.radio.network.UtranBands.BAND_C;
 
         /**
          * Band D
          * 2570 - 2620 MHz: Uplink and downlink transmission
          */
-        public static final int BAND_D = android.hardware.radio.V1_5.UtranBands.BAND_D;
+        public static final int BAND_D = android.hardware.radio.network.UtranBands.BAND_D;
 
         /**
          * Band E
          * 2300—2400 MHz: Uplink and downlink transmission
          */
-        public static final int BAND_E = android.hardware.radio.V1_5.UtranBands.BAND_E;
+        public static final int BAND_E = android.hardware.radio.network.UtranBands.BAND_E;
 
         /**
          * Band F
          * 1880 - 1920 MHz: Uplink and downlink transmission
          */
-        public static final int BAND_F = android.hardware.radio.V1_5.UtranBands.BAND_F;
+        public static final int BAND_F = android.hardware.radio.network.UtranBands.BAND_F;
 
         /**
          * UtranBand
@@ -389,66 +391,66 @@
      * https://www.etsi.org/deliver/etsi_ts/136100_136199/136101/15.09.00_60/ts_136101v150900p.pdf
      */
     public static final class EutranBand {
-        public static final int BAND_1 = android.hardware.radio.V1_5.EutranBands.BAND_1;
-        public static final int BAND_2 = android.hardware.radio.V1_5.EutranBands.BAND_2;
-        public static final int BAND_3 = android.hardware.radio.V1_5.EutranBands.BAND_3;
-        public static final int BAND_4 = android.hardware.radio.V1_5.EutranBands.BAND_4;
-        public static final int BAND_5 = android.hardware.radio.V1_5.EutranBands.BAND_5;
-        public static final int BAND_6 = android.hardware.radio.V1_5.EutranBands.BAND_6;
-        public static final int BAND_7 = android.hardware.radio.V1_5.EutranBands.BAND_7;
-        public static final int BAND_8 = android.hardware.radio.V1_5.EutranBands.BAND_8;
-        public static final int BAND_9 = android.hardware.radio.V1_5.EutranBands.BAND_9;
-        public static final int BAND_10 = android.hardware.radio.V1_5.EutranBands.BAND_10;
-        public static final int BAND_11 = android.hardware.radio.V1_5.EutranBands.BAND_11;
-        public static final int BAND_12 = android.hardware.radio.V1_5.EutranBands.BAND_12;
-        public static final int BAND_13 = android.hardware.radio.V1_5.EutranBands.BAND_13;
-        public static final int BAND_14 = android.hardware.radio.V1_5.EutranBands.BAND_14;
-        public static final int BAND_17 = android.hardware.radio.V1_5.EutranBands.BAND_17;
-        public static final int BAND_18 = android.hardware.radio.V1_5.EutranBands.BAND_18;
-        public static final int BAND_19 = android.hardware.radio.V1_5.EutranBands.BAND_19;
-        public static final int BAND_20 = android.hardware.radio.V1_5.EutranBands.BAND_20;
-        public static final int BAND_21 = android.hardware.radio.V1_5.EutranBands.BAND_21;
-        public static final int BAND_22 = android.hardware.radio.V1_5.EutranBands.BAND_22;
-        public static final int BAND_23 = android.hardware.radio.V1_5.EutranBands.BAND_23;
-        public static final int BAND_24 = android.hardware.radio.V1_5.EutranBands.BAND_24;
-        public static final int BAND_25 = android.hardware.radio.V1_5.EutranBands.BAND_25;
-        public static final int BAND_26 = android.hardware.radio.V1_5.EutranBands.BAND_26;
-        public static final int BAND_27 = android.hardware.radio.V1_5.EutranBands.BAND_27;
-        public static final int BAND_28 = android.hardware.radio.V1_5.EutranBands.BAND_28;
-        public static final int BAND_30 = android.hardware.radio.V1_5.EutranBands.BAND_30;
-        public static final int BAND_31 = android.hardware.radio.V1_5.EutranBands.BAND_31;
-        public static final int BAND_33 = android.hardware.radio.V1_5.EutranBands.BAND_33;
-        public static final int BAND_34 = android.hardware.radio.V1_5.EutranBands.BAND_34;
-        public static final int BAND_35 = android.hardware.radio.V1_5.EutranBands.BAND_35;
-        public static final int BAND_36 = android.hardware.radio.V1_5.EutranBands.BAND_36;
-        public static final int BAND_37 = android.hardware.radio.V1_5.EutranBands.BAND_37;
-        public static final int BAND_38 = android.hardware.radio.V1_5.EutranBands.BAND_38;
-        public static final int BAND_39 = android.hardware.radio.V1_5.EutranBands.BAND_39;
-        public static final int BAND_40 = android.hardware.radio.V1_5.EutranBands.BAND_40;
-        public static final int BAND_41 = android.hardware.radio.V1_5.EutranBands.BAND_41;
-        public static final int BAND_42 = android.hardware.radio.V1_5.EutranBands.BAND_42;
-        public static final int BAND_43 = android.hardware.radio.V1_5.EutranBands.BAND_43;
-        public static final int BAND_44 = android.hardware.radio.V1_5.EutranBands.BAND_44;
-        public static final int BAND_45 = android.hardware.radio.V1_5.EutranBands.BAND_45;
-        public static final int BAND_46 = android.hardware.radio.V1_5.EutranBands.BAND_46;
-        public static final int BAND_47 = android.hardware.radio.V1_5.EutranBands.BAND_47;
-        public static final int BAND_48 = android.hardware.radio.V1_5.EutranBands.BAND_48;
-        public static final int BAND_49 = android.hardware.radio.V1_5.EutranBands.BAND_49;
-        public static final int BAND_50 = android.hardware.radio.V1_5.EutranBands.BAND_50;
-        public static final int BAND_51 = android.hardware.radio.V1_5.EutranBands.BAND_51;
-        public static final int BAND_52 = android.hardware.radio.V1_5.EutranBands.BAND_52;
-        public static final int BAND_53 = android.hardware.radio.V1_5.EutranBands.BAND_53;
-        public static final int BAND_65 = android.hardware.radio.V1_5.EutranBands.BAND_65;
-        public static final int BAND_66 = android.hardware.radio.V1_5.EutranBands.BAND_66;
-        public static final int BAND_68 = android.hardware.radio.V1_5.EutranBands.BAND_68;
-        public static final int BAND_70 = android.hardware.radio.V1_5.EutranBands.BAND_70;
-        public static final int BAND_71 = android.hardware.radio.V1_5.EutranBands.BAND_71;
-        public static final int BAND_72 = android.hardware.radio.V1_5.EutranBands.BAND_72;
-        public static final int BAND_73 = android.hardware.radio.V1_5.EutranBands.BAND_73;
-        public static final int BAND_74 = android.hardware.radio.V1_5.EutranBands.BAND_74;
-        public static final int BAND_85 = android.hardware.radio.V1_5.EutranBands.BAND_85;
-        public static final int BAND_87 = android.hardware.radio.V1_5.EutranBands.BAND_87;
-        public static final int BAND_88 = android.hardware.radio.V1_5.EutranBands.BAND_88;
+        public static final int BAND_1 = android.hardware.radio.network.EutranBands.BAND_1;
+        public static final int BAND_2 = android.hardware.radio.network.EutranBands.BAND_2;
+        public static final int BAND_3 = android.hardware.radio.network.EutranBands.BAND_3;
+        public static final int BAND_4 = android.hardware.radio.network.EutranBands.BAND_4;
+        public static final int BAND_5 = android.hardware.radio.network.EutranBands.BAND_5;
+        public static final int BAND_6 = android.hardware.radio.network.EutranBands.BAND_6;
+        public static final int BAND_7 = android.hardware.radio.network.EutranBands.BAND_7;
+        public static final int BAND_8 = android.hardware.radio.network.EutranBands.BAND_8;
+        public static final int BAND_9 = android.hardware.radio.network.EutranBands.BAND_9;
+        public static final int BAND_10 = android.hardware.radio.network.EutranBands.BAND_10;
+        public static final int BAND_11 = android.hardware.radio.network.EutranBands.BAND_11;
+        public static final int BAND_12 = android.hardware.radio.network.EutranBands.BAND_12;
+        public static final int BAND_13 = android.hardware.radio.network.EutranBands.BAND_13;
+        public static final int BAND_14 = android.hardware.radio.network.EutranBands.BAND_14;
+        public static final int BAND_17 = android.hardware.radio.network.EutranBands.BAND_17;
+        public static final int BAND_18 = android.hardware.radio.network.EutranBands.BAND_18;
+        public static final int BAND_19 = android.hardware.radio.network.EutranBands.BAND_19;
+        public static final int BAND_20 = android.hardware.radio.network.EutranBands.BAND_20;
+        public static final int BAND_21 = android.hardware.radio.network.EutranBands.BAND_21;
+        public static final int BAND_22 = android.hardware.radio.network.EutranBands.BAND_22;
+        public static final int BAND_23 = android.hardware.radio.network.EutranBands.BAND_23;
+        public static final int BAND_24 = android.hardware.radio.network.EutranBands.BAND_24;
+        public static final int BAND_25 = android.hardware.radio.network.EutranBands.BAND_25;
+        public static final int BAND_26 = android.hardware.radio.network.EutranBands.BAND_26;
+        public static final int BAND_27 = android.hardware.radio.network.EutranBands.BAND_27;
+        public static final int BAND_28 = android.hardware.radio.network.EutranBands.BAND_28;
+        public static final int BAND_30 = android.hardware.radio.network.EutranBands.BAND_30;
+        public static final int BAND_31 = android.hardware.radio.network.EutranBands.BAND_31;
+        public static final int BAND_33 = android.hardware.radio.network.EutranBands.BAND_33;
+        public static final int BAND_34 = android.hardware.radio.network.EutranBands.BAND_34;
+        public static final int BAND_35 = android.hardware.radio.network.EutranBands.BAND_35;
+        public static final int BAND_36 = android.hardware.radio.network.EutranBands.BAND_36;
+        public static final int BAND_37 = android.hardware.radio.network.EutranBands.BAND_37;
+        public static final int BAND_38 = android.hardware.radio.network.EutranBands.BAND_38;
+        public static final int BAND_39 = android.hardware.radio.network.EutranBands.BAND_39;
+        public static final int BAND_40 = android.hardware.radio.network.EutranBands.BAND_40;
+        public static final int BAND_41 = android.hardware.radio.network.EutranBands.BAND_41;
+        public static final int BAND_42 = android.hardware.radio.network.EutranBands.BAND_42;
+        public static final int BAND_43 = android.hardware.radio.network.EutranBands.BAND_43;
+        public static final int BAND_44 = android.hardware.radio.network.EutranBands.BAND_44;
+        public static final int BAND_45 = android.hardware.radio.network.EutranBands.BAND_45;
+        public static final int BAND_46 = android.hardware.radio.network.EutranBands.BAND_46;
+        public static final int BAND_47 = android.hardware.radio.network.EutranBands.BAND_47;
+        public static final int BAND_48 = android.hardware.radio.network.EutranBands.BAND_48;
+        public static final int BAND_49 = android.hardware.radio.network.EutranBands.BAND_49;
+        public static final int BAND_50 = android.hardware.radio.network.EutranBands.BAND_50;
+        public static final int BAND_51 = android.hardware.radio.network.EutranBands.BAND_51;
+        public static final int BAND_52 = android.hardware.radio.network.EutranBands.BAND_52;
+        public static final int BAND_53 = android.hardware.radio.network.EutranBands.BAND_53;
+        public static final int BAND_65 = android.hardware.radio.network.EutranBands.BAND_65;
+        public static final int BAND_66 = android.hardware.radio.network.EutranBands.BAND_66;
+        public static final int BAND_68 = android.hardware.radio.network.EutranBands.BAND_68;
+        public static final int BAND_70 = android.hardware.radio.network.EutranBands.BAND_70;
+        public static final int BAND_71 = android.hardware.radio.network.EutranBands.BAND_71;
+        public static final int BAND_72 = android.hardware.radio.network.EutranBands.BAND_72;
+        public static final int BAND_73 = android.hardware.radio.network.EutranBands.BAND_73;
+        public static final int BAND_74 = android.hardware.radio.network.EutranBands.BAND_74;
+        public static final int BAND_85 = android.hardware.radio.network.EutranBands.BAND_85;
+        public static final int BAND_87 = android.hardware.radio.network.EutranBands.BAND_87;
+        public static final int BAND_88 = android.hardware.radio.network.EutranBands.BAND_88;
 
         /**
          * EutranBands
@@ -714,61 +716,61 @@
      */
     public static final class NgranBands {
         /** 3GPP TS 38.101-1, Version 16.5.0, Table 5.2-1: FR1 bands */
-        public static final int BAND_1 = android.hardware.radio.V1_5.NgranBands.BAND_1;
-        public static final int BAND_2 = android.hardware.radio.V1_5.NgranBands.BAND_2;
-        public static final int BAND_3 = android.hardware.radio.V1_5.NgranBands.BAND_3;
-        public static final int BAND_5 = android.hardware.radio.V1_5.NgranBands.BAND_5;
-        public static final int BAND_7 = android.hardware.radio.V1_5.NgranBands.BAND_7;
-        public static final int BAND_8 = android.hardware.radio.V1_5.NgranBands.BAND_8;
-        public static final int BAND_12 = android.hardware.radio.V1_5.NgranBands.BAND_12;
-        public static final int BAND_14 = android.hardware.radio.V1_5.NgranBands.BAND_14;
-        public static final int BAND_18 = android.hardware.radio.V1_5.NgranBands.BAND_18;
-        public static final int BAND_20 = android.hardware.radio.V1_5.NgranBands.BAND_20;
-        public static final int BAND_25 = android.hardware.radio.V1_5.NgranBands.BAND_25;
-        public static final int BAND_26 = android.hardware.radio.V1_6.NgranBands.BAND_26;
-        public static final int BAND_28 = android.hardware.radio.V1_5.NgranBands.BAND_28;
-        public static final int BAND_29 = android.hardware.radio.V1_5.NgranBands.BAND_29;
-        public static final int BAND_30 = android.hardware.radio.V1_5.NgranBands.BAND_30;
-        public static final int BAND_34 = android.hardware.radio.V1_5.NgranBands.BAND_34;
-        public static final int BAND_38 = android.hardware.radio.V1_5.NgranBands.BAND_38;
-        public static final int BAND_39 = android.hardware.radio.V1_5.NgranBands.BAND_39;
-        public static final int BAND_40 = android.hardware.radio.V1_5.NgranBands.BAND_40;
-        public static final int BAND_41 = android.hardware.radio.V1_5.NgranBands.BAND_41;
-        public static final int BAND_46 = android.hardware.radio.V1_6.NgranBands.BAND_46;
-        public static final int BAND_48 = android.hardware.radio.V1_5.NgranBands.BAND_48;
-        public static final int BAND_50 = android.hardware.radio.V1_5.NgranBands.BAND_50;
-        public static final int BAND_51 = android.hardware.radio.V1_5.NgranBands.BAND_51;
-        public static final int BAND_53 = android.hardware.radio.V1_6.NgranBands.BAND_53;
-        public static final int BAND_65 = android.hardware.radio.V1_5.NgranBands.BAND_65;
-        public static final int BAND_66 = android.hardware.radio.V1_5.NgranBands.BAND_66;
-        public static final int BAND_70 = android.hardware.radio.V1_5.NgranBands.BAND_70;
-        public static final int BAND_71 = android.hardware.radio.V1_5.NgranBands.BAND_71;
-        public static final int BAND_74 = android.hardware.radio.V1_5.NgranBands.BAND_74;
-        public static final int BAND_75 = android.hardware.radio.V1_5.NgranBands.BAND_75;
-        public static final int BAND_76 = android.hardware.radio.V1_5.NgranBands.BAND_76;
-        public static final int BAND_77 = android.hardware.radio.V1_5.NgranBands.BAND_77;
-        public static final int BAND_78 = android.hardware.radio.V1_5.NgranBands.BAND_78;
-        public static final int BAND_79 = android.hardware.radio.V1_5.NgranBands.BAND_79;
-        public static final int BAND_80 = android.hardware.radio.V1_5.NgranBands.BAND_80;
-        public static final int BAND_81 = android.hardware.radio.V1_5.NgranBands.BAND_81;
-        public static final int BAND_82 = android.hardware.radio.V1_5.NgranBands.BAND_82;
-        public static final int BAND_83 = android.hardware.radio.V1_5.NgranBands.BAND_83;
-        public static final int BAND_84 = android.hardware.radio.V1_5.NgranBands.BAND_84;
-        public static final int BAND_86 = android.hardware.radio.V1_5.NgranBands.BAND_86;
-        public static final int BAND_89 = android.hardware.radio.V1_5.NgranBands.BAND_89;
-        public static final int BAND_90 = android.hardware.radio.V1_5.NgranBands.BAND_90;
-        public static final int BAND_91 = android.hardware.radio.V1_5.NgranBands.BAND_91;
-        public static final int BAND_92 = android.hardware.radio.V1_5.NgranBands.BAND_92;
-        public static final int BAND_93 = android.hardware.radio.V1_5.NgranBands.BAND_93;
-        public static final int BAND_94 = android.hardware.radio.V1_5.NgranBands.BAND_94;
-        public static final int BAND_95 = android.hardware.radio.V1_5.NgranBands.BAND_95;
-        public static final int BAND_96 = android.hardware.radio.V1_6.NgranBands.BAND_96;
+        public static final int BAND_1 = android.hardware.radio.network.NgranBands.BAND_1;
+        public static final int BAND_2 = android.hardware.radio.network.NgranBands.BAND_2;
+        public static final int BAND_3 = android.hardware.radio.network.NgranBands.BAND_3;
+        public static final int BAND_5 = android.hardware.radio.network.NgranBands.BAND_5;
+        public static final int BAND_7 = android.hardware.radio.network.NgranBands.BAND_7;
+        public static final int BAND_8 = android.hardware.radio.network.NgranBands.BAND_8;
+        public static final int BAND_12 = android.hardware.radio.network.NgranBands.BAND_12;
+        public static final int BAND_14 = android.hardware.radio.network.NgranBands.BAND_14;
+        public static final int BAND_18 = android.hardware.radio.network.NgranBands.BAND_18;
+        public static final int BAND_20 = android.hardware.radio.network.NgranBands.BAND_20;
+        public static final int BAND_25 = android.hardware.radio.network.NgranBands.BAND_25;
+        public static final int BAND_26 = android.hardware.radio.network.NgranBands.BAND_26;
+        public static final int BAND_28 = android.hardware.radio.network.NgranBands.BAND_28;
+        public static final int BAND_29 = android.hardware.radio.network.NgranBands.BAND_29;
+        public static final int BAND_30 = android.hardware.radio.network.NgranBands.BAND_30;
+        public static final int BAND_34 = android.hardware.radio.network.NgranBands.BAND_34;
+        public static final int BAND_38 = android.hardware.radio.network.NgranBands.BAND_38;
+        public static final int BAND_39 = android.hardware.radio.network.NgranBands.BAND_39;
+        public static final int BAND_40 = android.hardware.radio.network.NgranBands.BAND_40;
+        public static final int BAND_41 = android.hardware.radio.network.NgranBands.BAND_41;
+        public static final int BAND_46 = android.hardware.radio.network.NgranBands.BAND_46;
+        public static final int BAND_48 = android.hardware.radio.network.NgranBands.BAND_48;
+        public static final int BAND_50 = android.hardware.radio.network.NgranBands.BAND_50;
+        public static final int BAND_51 = android.hardware.radio.network.NgranBands.BAND_51;
+        public static final int BAND_53 = android.hardware.radio.network.NgranBands.BAND_53;
+        public static final int BAND_65 = android.hardware.radio.network.NgranBands.BAND_65;
+        public static final int BAND_66 = android.hardware.radio.network.NgranBands.BAND_66;
+        public static final int BAND_70 = android.hardware.radio.network.NgranBands.BAND_70;
+        public static final int BAND_71 = android.hardware.radio.network.NgranBands.BAND_71;
+        public static final int BAND_74 = android.hardware.radio.network.NgranBands.BAND_74;
+        public static final int BAND_75 = android.hardware.radio.network.NgranBands.BAND_75;
+        public static final int BAND_76 = android.hardware.radio.network.NgranBands.BAND_76;
+        public static final int BAND_77 = android.hardware.radio.network.NgranBands.BAND_77;
+        public static final int BAND_78 = android.hardware.radio.network.NgranBands.BAND_78;
+        public static final int BAND_79 = android.hardware.radio.network.NgranBands.BAND_79;
+        public static final int BAND_80 = android.hardware.radio.network.NgranBands.BAND_80;
+        public static final int BAND_81 = android.hardware.radio.network.NgranBands.BAND_81;
+        public static final int BAND_82 = android.hardware.radio.network.NgranBands.BAND_82;
+        public static final int BAND_83 = android.hardware.radio.network.NgranBands.BAND_83;
+        public static final int BAND_84 = android.hardware.radio.network.NgranBands.BAND_84;
+        public static final int BAND_86 = android.hardware.radio.network.NgranBands.BAND_86;
+        public static final int BAND_89 = android.hardware.radio.network.NgranBands.BAND_89;
+        public static final int BAND_90 = android.hardware.radio.network.NgranBands.BAND_90;
+        public static final int BAND_91 = android.hardware.radio.network.NgranBands.BAND_91;
+        public static final int BAND_92 = android.hardware.radio.network.NgranBands.BAND_92;
+        public static final int BAND_93 = android.hardware.radio.network.NgranBands.BAND_93;
+        public static final int BAND_94 = android.hardware.radio.network.NgranBands.BAND_94;
+        public static final int BAND_95 = android.hardware.radio.network.NgranBands.BAND_95;
+        public static final int BAND_96 = android.hardware.radio.network.NgranBands.BAND_96;
 
         /** 3GPP TS 38.101-2, Version 16.2.0, Table 5.2-1: FR2 bands */
-        public static final int BAND_257 = android.hardware.radio.V1_5.NgranBands.BAND_257;
-        public static final int BAND_258 = android.hardware.radio.V1_5.NgranBands.BAND_258;
-        public static final int BAND_260 = android.hardware.radio.V1_5.NgranBands.BAND_260;
-        public static final int BAND_261 = android.hardware.radio.V1_5.NgranBands.BAND_261;
+        public static final int BAND_257 = android.hardware.radio.network.NgranBands.BAND_257;
+        public static final int BAND_258 = android.hardware.radio.network.NgranBands.BAND_258;
+        public static final int BAND_260 = android.hardware.radio.network.NgranBands.BAND_260;
+        public static final int BAND_261 = android.hardware.radio.network.NgranBands.BAND_261;
 
         /**
          * NR Bands
diff --git a/telephony/java/android/telephony/BarringInfo.java b/telephony/java/android/telephony/BarringInfo.java
index 29152f1..971fc78 100644
--- a/telephony/java/android/telephony/BarringInfo.java
+++ b/telephony/java/android/telephony/BarringInfo.java
@@ -58,41 +58,41 @@
             BARRING_SERVICE_TYPE_SMS})
     public @interface BarringServiceType {}
 
-    /* Applicabe to UTRAN */
+    /* Applicable to UTRAN */
     /** Barring indicator for circuit-switched service; applicable to UTRAN */
     public static final int BARRING_SERVICE_TYPE_CS_SERVICE =
-            android.hardware.radio.V1_5.BarringInfo.ServiceType.CS_SERVICE;
+            android.hardware.radio.network.BarringInfo.SERVICE_TYPE_CS_SERVICE;
     /** Barring indicator for packet-switched service; applicable to UTRAN */
     public static final int BARRING_SERVICE_TYPE_PS_SERVICE =
-            android.hardware.radio.V1_5.BarringInfo.ServiceType.PS_SERVICE;
+            android.hardware.radio.network.BarringInfo.SERVICE_TYPE_PS_SERVICE;
     /** Barring indicator for circuit-switched voice service; applicable to UTRAN */
     public static final int BARRING_SERVICE_TYPE_CS_VOICE =
-            android.hardware.radio.V1_5.BarringInfo.ServiceType.CS_VOICE;
+            android.hardware.radio.network.BarringInfo.SERVICE_TYPE_CS_VOICE;
 
     /* Applicable to EUTRAN, NGRAN */
     /** Barring indicator for mobile-originated signalling; applicable to EUTRAN and NGRAN */
     public static final int BARRING_SERVICE_TYPE_MO_SIGNALLING =
-            android.hardware.radio.V1_5.BarringInfo.ServiceType.MO_SIGNALLING;
+            android.hardware.radio.network.BarringInfo.SERVICE_TYPE_MO_SIGNALLING;
     /** Barring indicator for mobile-originated data traffic; applicable to EUTRAN and NGRAN */
     public static final int BARRING_SERVICE_TYPE_MO_DATA =
-            android.hardware.radio.V1_5.BarringInfo.ServiceType.MO_DATA;
+            android.hardware.radio.network.BarringInfo.SERVICE_TYPE_MO_DATA;
     /** Barring indicator for circuit-switched fallback for voice; applicable to EUTRAN and NGRAN */
     public static final int BARRING_SERVICE_TYPE_CS_FALLBACK =
-            android.hardware.radio.V1_5.BarringInfo.ServiceType.CS_FALLBACK;
+            android.hardware.radio.network.BarringInfo.SERVICE_TYPE_CS_FALLBACK;
     /** Barring indicator for MMTEL (IMS) voice; applicable to EUTRAN and NGRAN */
     public static final int BARRING_SERVICE_TYPE_MMTEL_VOICE =
-            android.hardware.radio.V1_5.BarringInfo.ServiceType.MMTEL_VOICE;
+            android.hardware.radio.network.BarringInfo.SERVICE_TYPE_MMTEL_VOICE;
     /** Barring indicator for MMTEL (IMS) video; applicable to EUTRAN and NGRAN */
     public static final int BARRING_SERVICE_TYPE_MMTEL_VIDEO =
-            android.hardware.radio.V1_5.BarringInfo.ServiceType.MMTEL_VIDEO;
+            android.hardware.radio.network.BarringInfo.SERVICE_TYPE_MMTEL_VIDEO;
 
     /* Applicable to UTRAN, EUTRAN, NGRAN */
     /** Barring indicator for emergency services; applicable to UTRAN, EUTRAN, and NGRAN */
     public static final int BARRING_SERVICE_TYPE_EMERGENCY =
-            android.hardware.radio.V1_5.BarringInfo.ServiceType.EMERGENCY;
+            android.hardware.radio.network.BarringInfo.SERVICE_TYPE_EMERGENCY;
     /** Barring indicator for SMS sending; applicable to UTRAN, EUTRAN, and NGRAN */
     public static final int BARRING_SERVICE_TYPE_SMS =
-            android.hardware.radio.V1_5.BarringInfo.ServiceType.SMS;
+            android.hardware.radio.network.BarringInfo.SERVICE_TYPE_SMS;
 
     //TODO: add barring constants for Operator-Specific barring codes
 
@@ -112,13 +112,13 @@
 
         /** Barring is inactive */
         public static final int BARRING_TYPE_NONE =
-                android.hardware.radio.V1_5.BarringInfo.BarringType.NONE;
+                android.hardware.radio.network.BarringInfo.BARRING_TYPE_NONE;
         /** The service is barred */
         public static final int BARRING_TYPE_UNCONDITIONAL =
-                android.hardware.radio.V1_5.BarringInfo.BarringType.UNCONDITIONAL;
+                android.hardware.radio.network.BarringInfo.BARRING_TYPE_UNCONDITIONAL;
         /** The service may be barred based on additional factors */
         public static final int BARRING_TYPE_CONDITIONAL =
-                android.hardware.radio.V1_5.BarringInfo.BarringType.CONDITIONAL;
+                android.hardware.radio.network.BarringInfo.BARRING_TYPE_CONDITIONAL;
 
         /** If a modem does not report barring info, then the barring type will be UNKNOWN */
         public static final int BARRING_TYPE_UNKNOWN = -1;
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 3703349..4907134 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -569,6 +569,13 @@
             "editable_voicemail_number_bool";
 
     /**
+     * Determine whether the voicemail number in Settings is hidden.
+     * @hide
+     */
+    public static final String KEY_HIDE_VOICEMAIL_NUMBER_SETTING_BOOL =
+            "hide_voicemail_number_setting_bool";
+
+    /**
      * Determine whether the voicemail notification is persistent in the notification bar. If true,
      * the voicemail notifications cannot be dismissed from the notification bar.
      */
@@ -9400,34 +9407,50 @@
             "missed_incoming_call_sms_pattern_string_array";
 
     /**
-     * Indicate the satellite services supported per provider by a carrier.
-     *
-     * Key is the PLMN of a satellite provider. Value should be an integer array of supported
-     * services with the following value:
+     * A PersistableBundle that contains a list of key-value pairs, where the values are integer
+     * arrays.
+     * <p>
+     * Keys are the PLMNs of satellite providers as strings and values are integer arrays of
+     * supported services with the following value:
      * <ul>
      * <li>1 = {@link android.telephony.NetworkRegistrationInfo#SERVICE_TYPE_VOICE}</li>
      * <li>2 = {@link android.telephony.NetworkRegistrationInfo#SERVICE_TYPE_DATA}</li>
      * <li>3 = {@link android.telephony.NetworkRegistrationInfo#SERVICE_TYPE_SMS}</li>
      * <li>4 = {@link android.telephony.NetworkRegistrationInfo#SERVICE_TYPE_VIDEO}</li>
      * <li>5 = {@link android.telephony.NetworkRegistrationInfo#SERVICE_TYPE_EMERGENCY}</li>
+     * <li>6 = {@link android.telephony.NetworkRegistrationInfo#SERVICE_TYPE_MMS}</li>
      * </ul>
      * <p>
-     * If this carrier config is not present, the overlay config
+     * An example config for two PLMNs "123411" and "123412":
+     * <pre>{@code
+     * <carrier_config>
+     *   <pbundle_as_map name="carrier_supported_satellite_services_per_provider_bundle">
+     *     <int-array name = "123411" num = "2">
+     *       <item value = "3"/>
+     *       <item value = "5"/>
+     *     </int-array>
+     *     <int-array name = "123412" num = "1">
+     *       <item value = "3"/>
+     *     </int-array>
+     *   </pbundle_as_map>
+     * </carrier_config>
+     * }</pre>
+     * <p>
+     * If this carrier config is not present, the device overlay config
      * {@code config_satellite_services_supported_by_providers} will be used. If the carrier config
-     * is present, the supported satellite services will be identified as follows:
+     * is present, the supported services associated with the PLMNs listed in the carrier config
+     * will override that of the device overlay config. The supported satellite services will be
+     * identified as follows:
      * <ul>
-     * <li>For the PLMN that exists in both provider supported satellite services and carrier
-     * supported satellite services, the supported services will be the intersection of the two
-     * sets.</li>
-     * <li>For the PLMN that is present in provider supported satellite services but not in carrier
-     * supported satellite services, the provider supported satellite services will be used.</li>
-     * <li>For the PLMN that is present in carrier supported satellite services but not in provider
-     * supported satellite services, the PLMN will be ignored.</li>
+     * <li>For each PLMN that exists only in the carrier provided satellite services, use the
+     * carrier provided services as the supported services.</li>
+     * <li>For each PLMN that is present only in the device provided satellite services, use the
+     * device provided services as the supported services.</li>
+     * <li>For each PLMN that is present in both the carrier provided and device provided satellite
+     * services, use the carrier provided services as the supported services.</li>
      * </ul>
-     *
+     * <p>
      * This config is empty by default.
-     *
-     * @hide
      */
     public static final String KEY_CARRIER_SUPPORTED_SATELLITE_SERVICES_PER_PROVIDER_BUNDLE =
             "carrier_supported_satellite_services_per_provider_bundle";
@@ -9905,6 +9928,7 @@
         sDefaults.putBoolean(KEY_USE_HFA_FOR_PROVISIONING_BOOL, false);
         sDefaults.putBoolean(KEY_EDITABLE_VOICEMAIL_NUMBER_SETTING_BOOL, true);
         sDefaults.putBoolean(KEY_EDITABLE_VOICEMAIL_NUMBER_BOOL, false);
+        sDefaults.putBoolean(KEY_HIDE_VOICEMAIL_NUMBER_SETTING_BOOL, false);
         sDefaults.putBoolean(KEY_USE_OTASP_FOR_PROVISIONING_BOOL, false);
         sDefaults.putBoolean(KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL, false);
         sDefaults.putBoolean(KEY_VOICE_PRIVACY_DISABLE_UI_BOOL, false);
diff --git a/telephony/java/android/telephony/NetworkRegistrationInfo.java b/telephony/java/android/telephony/NetworkRegistrationInfo.java
index f012ab5..631013f 100644
--- a/telephony/java/android/telephony/NetworkRegistrationInfo.java
+++ b/telephony/java/android/telephony/NetworkRegistrationInfo.java
@@ -63,9 +63,9 @@
     /** Unknown / Unspecified domain */
     public static final int DOMAIN_UNKNOWN = 0;
     /** Circuit switched domain */
-    public static final int DOMAIN_CS = android.hardware.radio.V1_5.Domain.CS;
+    public static final int DOMAIN_CS = android.hardware.radio.network.Domain.CS;
     /** Packet switched domain */
-    public static final int DOMAIN_PS = android.hardware.radio.V1_5.Domain.PS;
+    public static final int DOMAIN_PS = android.hardware.radio.network.Domain.PS;
     /** Applicable to both CS and PS Domain */
     public static final int DOMAIN_CS_PS = DOMAIN_CS | DOMAIN_PS;
 
@@ -170,7 +170,7 @@
     @Retention(RetentionPolicy.SOURCE)
     @IntDef(prefix = "SERVICE_TYPE_",
             value = {SERVICE_TYPE_UNKNOWN, SERVICE_TYPE_VOICE, SERVICE_TYPE_DATA, SERVICE_TYPE_SMS,
-                    SERVICE_TYPE_VIDEO, SERVICE_TYPE_EMERGENCY})
+                    SERVICE_TYPE_VIDEO, SERVICE_TYPE_EMERGENCY, SERVICE_TYPE_MMS})
     public @interface ServiceType {}
 
     /**
@@ -203,11 +203,16 @@
      */
     public static final int SERVICE_TYPE_EMERGENCY  = 5;
 
+    /**
+     * MMS service
+     */
+    public static final int SERVICE_TYPE_MMS = 6;
+
     /** @hide  */
     public static final int FIRST_SERVICE_TYPE = SERVICE_TYPE_VOICE;
 
     /** @hide  */
-    public static final int LAST_SERVICE_TYPE = SERVICE_TYPE_EMERGENCY;
+    public static final int LAST_SERVICE_TYPE = SERVICE_TYPE_MMS;
 
     @Domain
     private final int mDomain;
@@ -696,7 +701,6 @@
      * Get whether the network is a non-terrestrial network.
      *
      * @return {@code true} if network is a non-terrestrial network else {@code false}.
-     * @hide
      */
     public boolean isNonTerrestrialNetwork() {
         return mIsNonTerrestrialNetwork;
@@ -740,6 +744,7 @@
             case SERVICE_TYPE_SMS: return "SMS";
             case SERVICE_TYPE_VIDEO: return "VIDEO";
             case SERVICE_TYPE_EMERGENCY: return "EMERGENCY";
+            case SERVICE_TYPE_MMS: return "MMS";
         }
         return "Unknown service type " + serviceType;
     }
@@ -789,6 +794,18 @@
         }
     }
 
+    /**
+     * Convert isNonTerrestrialNetwork to string
+     *
+     * @param isNonTerrestrialNetwork boolean indicating whether network is a non-terrestrial
+     *                                network
+     * @return string format of isNonTerrestrialNetwork.
+     * @hide
+     */
+    public static String isNonTerrestrialNetworkToString(boolean isNonTerrestrialNetwork) {
+        return isNonTerrestrialNetwork ? "NON-TERRESTRIAL" : "TERRESTRIAL";
+    }
+
     @NonNull
     @Override
     public String toString() {
@@ -814,7 +831,8 @@
                         ? nrStateToString(mNrState) : "****")
                 .append(" rRplmn=").append(mRplmn)
                 .append(" isUsingCarrierAggregation=").append(mIsUsingCarrierAggregation)
-                .append(" isNonTerrestrialNetwork=").append(mIsNonTerrestrialNetwork)
+                .append(" isNonTerrestrialNetwork=").append(
+                        isNonTerrestrialNetworkToString(mIsNonTerrestrialNetwork))
                 .append("}").toString();
     }
 
@@ -1167,7 +1185,6 @@
          * @param isNonTerrestrialNetwork {@code true} if network is a non-terrestrial network
          *                                            else {@code false}.
          * @return The builder.
-         * @hide
          */
         public @NonNull Builder setIsNonTerrestrialNetwork(boolean isNonTerrestrialNetwork) {
             mIsNonTerrestrialNetwork = isNonTerrestrialNetwork;
diff --git a/telephony/java/android/telephony/NetworkScanRequest.java b/telephony/java/android/telephony/NetworkScanRequest.java
index 65c2146..3285bc3 100644
--- a/telephony/java/android/telephony/NetworkScanRequest.java
+++ b/telephony/java/android/telephony/NetworkScanRequest.java
@@ -17,6 +17,8 @@
 package android.telephony;
 
 import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -24,6 +26,7 @@
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Objects;
 
 /**
  * Defines a request to perform a network scan.
@@ -108,6 +111,7 @@
     private int mIncrementalResultsPeriodicity;
 
     /** Describes the radio access technologies with bands or channels that need to be scanned. */
+    @Nullable
     private RadioAccessSpecifier[] mSpecifiers;
 
     /**
@@ -117,6 +121,7 @@
      * If list not sent, search to be completed till end and all PLMNs found to be reported.
      * Max size of array is MAX_MCC_MNC_LIST_SIZE
      */
+    @NonNull
     private ArrayList<String> mMccMncs;
 
     /**
@@ -240,27 +245,20 @@
     }
 
     @Override
-    public boolean equals (Object o) {
-        NetworkScanRequest nsr;
+    public boolean equals(Object other) {
+        if (this == other) return true;
 
-        try {
-            nsr = (NetworkScanRequest) o;
-        } catch (ClassCastException ex) {
-            return false;
-        }
+        if (!(other instanceof NetworkScanRequest)) return false;
 
-        if (o == null) {
-            return false;
-        }
+        NetworkScanRequest nsr = (NetworkScanRequest) other;
 
-        return (mScanType == nsr.mScanType
+        return mScanType == nsr.mScanType
                 && Arrays.equals(mSpecifiers, nsr.mSpecifiers)
                 && mSearchPeriodicity == nsr.mSearchPeriodicity
                 && mMaxSearchTime == nsr.mMaxSearchTime
                 && mIncrementalResults == nsr.mIncrementalResults
                 && mIncrementalResultsPeriodicity == nsr.mIncrementalResultsPeriodicity
-                && (((mMccMncs != null)
-                && mMccMncs.equals(nsr.mMccMncs))));
+                && Objects.equals(mMccMncs, nsr.mMccMncs);
     }
 
     @Override
diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java
index cf0561d..cee2efb 100644
--- a/telephony/java/android/telephony/PhoneNumberUtils.java
+++ b/telephony/java/android/telephony/PhoneNumberUtils.java
@@ -111,6 +111,14 @@
     private static final String BCD_EF_ADN_EXTENDED = "*#,N;";
     private static final String BCD_CALLED_PARTY_EXTENDED = "*#abc";
 
+    private static final String PREFIX_WPS = "*272";
+
+    // WPS prefix when CLIR is being activated for the call.
+    private static final String PREFIX_WPS_CLIR_ACTIVATE = "*31#*272";
+
+    // WPS prefix when CLIR is being deactivated for the call.
+    private static final String PREFIX_WPS_CLIR_DEACTIVATE = "#31#*272";
+
     /*
      * global-phone-number = ["+"] 1*( DIGIT / written-sep )
      * written-sep         = ("-"/".")
@@ -2943,4 +2951,15 @@
             return false;
         }
     }
+
+    /**
+     * Check if the number is for Wireless Priority Service call.
+     * @param number  The phone number used for WPS call.
+     * @return {@code true} if number matches WPS pattern and {@code false} otherwise.
+     */
+    public static boolean isWpsCallNumber(@Nullable String number) {
+        return (number != null) && (number.startsWith(PREFIX_WPS)
+                || number.startsWith(PREFIX_WPS_CLIR_ACTIVATE)
+                || number.startsWith(PREFIX_WPS_CLIR_DEACTIVATE));
+    }
 }
diff --git a/telephony/java/android/telephony/PreciseDataConnectionState.java b/telephony/java/android/telephony/PreciseDataConnectionState.java
index 2670b03..7f1c14b 100644
--- a/telephony/java/android/telephony/PreciseDataConnectionState.java
+++ b/telephony/java/android/telephony/PreciseDataConnectionState.java
@@ -35,6 +35,7 @@
 import android.telephony.Annotation.NetworkType;
 import android.telephony.data.ApnSetting;
 import android.telephony.data.DataCallResponse;
+import android.telephony.data.Qos;
 
 import com.android.internal.telephony.util.TelephonyUtils;
 
@@ -64,6 +65,7 @@
     private final @DataFailureCause int mFailCause;
     private final LinkProperties mLinkProperties;
     private final ApnSetting mApnSetting;
+    private final Qos mDefaultQos;
 
     /**
      * Constructor
@@ -85,7 +87,7 @@
                         .setApnTypeBitmask(apnTypes)
                         .setApnName(apn)
                         .setEntryName(apn)
-                        .build());
+                        .build(), null);
     }
 
 
@@ -101,11 +103,13 @@
      *        code indicating the cause of the failure.
      * @param apnSetting If there is a valid APN for this Data Connection, then the APN Settings;
      *        if there is no valid APN setting for the specific type, then this will be null
+     * @param defaultQos If there is a valid QoS for the default bearer supporting this data call,
+     *        (supported for LTE and NR), then this is specified. Otherwise it should be null.
      */
     private PreciseDataConnectionState(@TransportType int transportType, int id,
             @DataState int state, @NetworkType int networkType,
             @Nullable LinkProperties linkProperties, @DataFailureCause int failCause,
-            @Nullable ApnSetting apnSetting) {
+            @Nullable ApnSetting apnSetting, @Nullable Qos defaultQos) {
         mTransportType = transportType;
         mId = id;
         mState = state;
@@ -113,6 +117,7 @@
         mLinkProperties = linkProperties;
         mFailCause = failCause;
         mApnSetting = apnSetting;
+        mDefaultQos = defaultQos;
     }
 
     /**
@@ -125,9 +130,16 @@
         mId = in.readInt();
         mState = in.readInt();
         mNetworkType = in.readInt();
-        mLinkProperties = in.readParcelable(LinkProperties.class.getClassLoader(), android.net.LinkProperties.class);
+        mLinkProperties = in.readParcelable(
+                LinkProperties.class.getClassLoader(),
+                android.net.LinkProperties.class);
         mFailCause = in.readInt();
-        mApnSetting = in.readParcelable(ApnSetting.class.getClassLoader(), android.telephony.data.ApnSetting.class);
+        mApnSetting = in.readParcelable(
+                ApnSetting.class.getClassLoader(),
+                android.telephony.data.ApnSetting.class);
+        mDefaultQos = in.readParcelable(
+                Qos.class.getClassLoader(),
+                android.telephony.data.Qos.class);
     }
 
     /**
@@ -263,6 +275,20 @@
         return mApnSetting;
     }
 
+    /**
+     * Return the QoS for the default bearer of this data connection.
+     *
+     * @return the default QoS if known or {@code null} if it is unknown. If the value is reported
+     * for LTE, then it will be an {@link android.telephony.data.EpsQos EpsQos}. If the value is
+     * reported for 5G, then it will be an {@link android.telehpony.data.NrQos NrQos}. Otherwise it
+     * shall always be {@code null}.
+     *
+     * @hide
+     */
+    public @Nullable Qos getDefaultQos() {
+        return mDefaultQos;
+    }
+
     @Override
     public int describeContents() {
         return 0;
@@ -277,6 +303,7 @@
         out.writeParcelable(mLinkProperties, flags);
         out.writeInt(mFailCause);
         out.writeParcelable(mApnSetting, flags);
+        out.writeParcelable(mDefaultQos, flags);
     }
 
     public static final @NonNull Parcelable.Creator<PreciseDataConnectionState> CREATOR
@@ -294,7 +321,7 @@
     @Override
     public int hashCode() {
         return Objects.hash(mTransportType, mId, mState, mNetworkType, mFailCause,
-                mLinkProperties, mApnSetting);
+                mLinkProperties, mApnSetting, mDefaultQos);
     }
 
 
@@ -309,7 +336,8 @@
                 && mNetworkType == that.mNetworkType
                 && mFailCause == that.mFailCause
                 && Objects.equals(mLinkProperties, that.mLinkProperties)
-                && Objects.equals(mApnSetting, that.mApnSetting);
+                && Objects.equals(mApnSetting, that.mApnSetting)
+                && Objects.equals(mDefaultQos, that.mDefaultQos);
     }
 
     @NonNull
@@ -324,6 +352,7 @@
         sb.append(", network type: " + TelephonyManager.getNetworkTypeName(mNetworkType));
         sb.append(", APN Setting: " + mApnSetting);
         sb.append(", link properties: " + mLinkProperties);
+        sb.append(", default QoS: " + mDefaultQos);
         sb.append(", fail cause: " + DataFailCause.toString(mFailCause));
 
         return sb.toString();
@@ -351,7 +380,7 @@
         private @NetworkType int mNetworkType = TelephonyManager.NETWORK_TYPE_UNKNOWN;
 
         /** If the data connection is connected, the properties of the connection */
-        private @Nullable LinkProperties mLinkProperties = null;
+        private @Nullable LinkProperties mLinkProperties;
 
         /**
          * In case a procedure related to this data connection fails, a non-zero error code
@@ -360,7 +389,10 @@
         private @DataFailureCause int mFailCause = DataFailCause.NONE;
 
         /** The APN Setting for this data connection */
-        private @Nullable ApnSetting mApnSetting = null;
+        private @Nullable ApnSetting mApnSetting;
+
+        /** The Default QoS for this EPS/5GS bearer or null otherwise */
+        private @Nullable Qos mDefaultQos;
 
         /**
          * Set the transport type of the data connection.
@@ -441,13 +473,26 @@
         }
 
         /**
+         * Set the default QoS for this data connection.
+         *
+         * @param qos The qos information, if any, associated with the default bearer of the
+         * data connection.
+         * @return The builder
+         * @hide
+         */
+        public @NonNull Builder setDefaultQos(@Nullable Qos qos) {
+            mDefaultQos = qos;
+            return this;
+        }
+
+        /**
          * Build the {@link PreciseDataConnectionState} instance.
          *
          * @return The {@link PreciseDataConnectionState} instance
          */
         public PreciseDataConnectionState build() {
             return new PreciseDataConnectionState(mTransportType, mId, mState, mNetworkType,
-                    mLinkProperties, mFailCause, mApnSetting);
+                    mLinkProperties, mFailCause, mApnSetting, mDefaultQos);
         }
     }
 }
diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java
index 74cfbea..5b8848c 100644
--- a/telephony/java/android/telephony/ServiceState.java
+++ b/telephony/java/android/telephony/ServiceState.java
@@ -2255,7 +2255,6 @@
      * Get whether device is connected to a non-terrestrial network.
      *
      * @return {@code true} if device is connected to a non-terrestrial network else {@code false}.
-     * @hide
      */
     public boolean isUsingNonTerrestrialNetwork() {
         synchronized (mNetworkRegistrationInfos) {
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index 8e4ec09..040c5b0 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -35,6 +35,9 @@
 import android.annotation.SystemService;
 import android.app.PendingIntent;
 import android.app.PropertyInvalidatedCache;
+import android.compat.Compatibility;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.EnabledAfter;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
 import android.content.Intent;
@@ -85,6 +88,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executor;
 import java.util.function.Consumer;
@@ -1331,41 +1335,61 @@
      * for #onSubscriptionsChanged to be invoked.
      */
     public static class OnSubscriptionsChangedListener {
-        private class OnSubscriptionsChangedListenerHandler extends Handler {
-            OnSubscriptionsChangedListenerHandler() {
-                super();
-            }
-
-            OnSubscriptionsChangedListenerHandler(Looper looper) {
-                super(looper);
-            }
-        }
 
         /**
-         * Posted executor callback on the handler associated with a given looper.
-         * The looper can be the calling thread's looper or the looper passed from the
-         * constructor {@link #OnSubscriptionsChangedListener(Looper)}.
+         * After {@link Build.VERSION_CODES.Q}, it is no longer necessary to instantiate a
+         * Handler inside of the OnSubscriptionsChangedListener in all cases, so it will only
+         * be done for callers that do not supply an Executor.
          */
-        private final HandlerExecutor mExecutor;
+        @ChangeId
+        @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.Q)
+        private static final long LAZY_INITIALIZE_SUBSCRIPTIONS_CHANGED_HANDLER = 278814050L;
+
+        /**
+         * For backwards compatibility reasons, stashes the Looper associated with the thread
+         * context in which this listener was created.
+         */
+        private final Looper mCreatorLooper;
 
         /**
          * @hide
          */
-        public HandlerExecutor getHandlerExecutor() {
-            return mExecutor;
+        public Looper getCreatorLooper() {
+            return mCreatorLooper;
         }
 
+        /**
+         * Create an OnSubscriptionsChangedListener.
+         *
+         * For callers targeting {@link Build.VERSION_CODES.P} or earlier, this can only be called
+         * on a thread that already has a prepared Looper. Callers targeting Q or later should
+         * subsequently use {@link SubscriptionManager#addOnSubscriptionsChangedListener(
+         * Executor, OnSubscriptionsChangedListener)}.
+         *
+         * On OS versions prior to {@link Build.VERSION_CODES.V} callers should assume that this
+         * call will fail if invoked on a thread that does not already have a prepared looper.
+         */
         public OnSubscriptionsChangedListener() {
-            mExecutor = new HandlerExecutor(new OnSubscriptionsChangedListenerHandler());
+            mCreatorLooper = Looper.myLooper();
+            if (mCreatorLooper == null
+                    && !Compatibility.isChangeEnabled(
+                            LAZY_INITIALIZE_SUBSCRIPTIONS_CHANGED_HANDLER)) {
+                // matches the implementation of Handler
+                throw new RuntimeException(
+                        "Can't create handler inside thread "
+                        + Thread.currentThread()
+                        + " that has not called Looper.prepare()");
+            }
         }
 
         /**
          * Allow a listener to be created with a custom looper
-         * @param looper the looper that the underlining handler should run on
+         * @param looper the non-null Looper that the underlining handler should run on
          * @hide
          */
-        public OnSubscriptionsChangedListener(Looper looper) {
-            mExecutor = new HandlerExecutor(new OnSubscriptionsChangedListenerHandler(looper));
+        public OnSubscriptionsChangedListener(@NonNull Looper looper) {
+            Objects.requireNonNull(looper);
+            mCreatorLooper = looper;
         }
 
         /**
@@ -1432,7 +1456,9 @@
     @Deprecated
     public void addOnSubscriptionsChangedListener(OnSubscriptionsChangedListener listener) {
         if (listener == null) return;
-        addOnSubscriptionsChangedListener(listener.mExecutor, listener);
+
+        addOnSubscriptionsChangedListener(
+                new HandlerExecutor(new Handler(listener.getCreatorLooper())), listener);
     }
 
     /**
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 340e4ab..f1ee76e 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -5268,7 +5268,11 @@
         try {
             ITelephony telephony = getITelephony();
             if (telephony != null) {
-                return telephony.getMergedImsisFromGroup(getSubId(), getOpPackageName());
+                String[] mergedImsisFromGroup =
+                        telephony.getMergedImsisFromGroup(getSubId(), getOpPackageName());
+                if (mergedImsisFromGroup != null) {
+                    return mergedImsisFromGroup;
+                }
             }
         } catch (RemoteException ex) {
         }
@@ -10650,12 +10654,20 @@
      * no reason to power it off. When any of the voters want to power it off, it will be turned
      * off. In case of emergency, the radio will be turned on even if there are some reasons for
      * powering it off, and these radio off votes will be cleared.
-     * Multiple apps can vote for the same reason and the last vote will take effect. Each app is
-     * responsible for its vote. A powering-off vote of a reason will be maintained until it is
-     * cleared by calling {@link clearRadioPowerOffForReason} for that reason, or an emergency call
-     * is made, or the device is rebooted. When an app comes backup from a crash, it needs to make
-     * sure if its vote is as expected. An app can use the API {@link getRadioPowerOffReasons} to
-     * check its vote.
+     * <p>
+     * Each API call is for one reason. However, an app can call the API multiple times for multiple
+     * reasons. Multiple apps can vote for the same reason but the vote of one app does not affect
+     * the vote of another app.
+     * <p>
+     * Each app is responsible for its vote. A powering-off vote for a reason of an app will be
+     * maintained until it is cleared by calling {@link #clearRadioPowerOffForReason(int)} for that
+     * reason by the app, or an emergency call is made, or the device is rebooted. When an app
+     * comes backup from a crash, it needs to make sure if its vote is as expected. An app can use
+     * the API {@link #getRadioPowerOffReasons()} to check its votes. Votes won't be removed when
+     * an app crashes.
+     * <p>
+     * User setting for power state is persistent across device reboots. This applies to all users,
+     * callers must be careful to update the off reasons when the current user changes.
      *
      * @param reason The reason for powering off radio.
      * @throws SecurityException if the caller does not have MODIFY_PHONE_STATE permission.
@@ -10712,10 +10724,10 @@
     }
 
     /**
-     * Get reasons for powering off radio, as requested by {@link requestRadioPowerOffForReason}.
-     * If the reason set is empty, the radio is on in all cases.
+     * Get reasons for powering off radio of the calling app, as requested by
+     * {@link #requestRadioPowerOffForReason(int)}.
      *
-     * @return Set of reasons for powering off radio.
+     * @return Set of reasons for powering off radio of the calling app.
      * @throws SecurityException if the caller does not have READ_PRIVILEGED_PHONE_STATE permission.
      * @throws IllegalStateException if the Telephony service is not currently available.
      *
@@ -11279,29 +11291,6 @@
     }
 
     /**
-     * Returns the result and response from RIL for oem request
-     *
-     * @param oemReq the data is sent to ril.
-     * @param oemResp the respose data from RIL.
-     * @return negative value request was not handled or get error
-     *         0 request was handled succesfully, but no response data
-     *         positive value success, data length of response
-     * @hide
-     * @deprecated OEM needs a vendor-extension hal and their apps should use that instead
-     */
-    @Deprecated
-    public int invokeOemRilRequestRaw(byte[] oemReq, byte[] oemResp) {
-        try {
-            ITelephony telephony = getITelephony();
-            if (telephony != null)
-                return telephony.invokeOemRilRequestRaw(oemReq, oemResp);
-        } catch (RemoteException ex) {
-        } catch (NullPointerException ex) {
-        }
-        return -1;
-    }
-
-    /**
      * @deprecated Use {@link android.telephony.ims.ImsMmTelManager#setVtSettingEnabled(boolean)}
      * instead.
      * @hide
@@ -15163,6 +15152,14 @@
     @TestApi
     public static final int HAL_SERVICE_IMS = 7;
 
+    /**
+     * HAL service type that supports the HAL APIs implementation of IRadioSatellite
+     * {@link RadioSatelliteProxy}
+     * @hide
+     */
+    @TestApi
+    public static final int HAL_SERVICE_SATELLITE = 8;
+
     /** @hide */
     @Retention(RetentionPolicy.SOURCE)
     @IntDef(prefix = {"HAL_SERVICE_"},
@@ -15175,6 +15172,7 @@
                     HAL_SERVICE_SIM,
                     HAL_SERVICE_VOICE,
                     HAL_SERVICE_IMS,
+                    HAL_SERVICE_SATELLITE
             })
     public @interface HalService {}
 
@@ -17613,7 +17611,6 @@
      * {@link CarrierConfigManager
      * #KEY_PREMIUM_CAPABILITY_NOTIFICATION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG}
      * and return {@link #PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED}.
-     * @hide
      */
     public static final int PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_DISABLED = 16;
 
diff --git a/telephony/java/android/telephony/data/ApnSetting.java b/telephony/java/android/telephony/data/ApnSetting.java
index 28ea5a6..26c17a4 100644
--- a/telephony/java/android/telephony/data/ApnSetting.java
+++ b/telephony/java/android/telephony/data/ApnSetting.java
@@ -22,7 +22,7 @@
 import android.annotation.SystemApi;
 import android.content.ContentValues;
 import android.database.Cursor;
-import android.hardware.radio.V1_5.ApnTypes;
+import android.hardware.radio.data.ApnTypes;
 import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -116,12 +116,11 @@
     /** APN type for XCAP. */
     public static final int TYPE_XCAP = ApnTypes.XCAP;
     /** APN type for VSIM. */
-    public static final int TYPE_VSIM = 1 << 12;  // TODO: Refer to ApnTypes.VSIM
+    public static final int TYPE_VSIM = ApnTypes.VSIM;
     /** APN type for BIP. */
-    public static final int TYPE_BIP = 1 << 13;   // TODO: Refer to ApnTypes.BIP
+    public static final int TYPE_BIP = ApnTypes.BIP;
     /** APN type for ENTERPRISE. */
-    public static final int TYPE_ENTERPRISE = 1 << 14; //TODO: In future should be referenced from
-    // hardware.interfaces.radio.data.ApnTypes
+    public static final int TYPE_ENTERPRISE = ApnTypes.ENTERPRISE;
 
     /** @hide */
     @IntDef(flag = true, prefix = {"TYPE_"}, value = {
@@ -400,6 +399,11 @@
     public @interface ProtocolType {}
 
     // Possible values for MVNO type.
+    /**
+     * Default value for MVNO type if it's not set.
+     * @hide
+     */
+    public static final int MVNO_TYPE_UNKNOWN = -1;
     /** MVNO type for service provider name. */
     public static final int MVNO_TYPE_SPN = 0;
     /** MVNO type for IMSI. */
@@ -411,10 +415,11 @@
 
     /** @hide */
     @IntDef(prefix = { "MVNO_TYPE_" }, value = {
-        MVNO_TYPE_SPN,
-        MVNO_TYPE_IMSI,
-        MVNO_TYPE_GID,
-        MVNO_TYPE_ICCID,
+            MVNO_TYPE_UNKNOWN,
+            MVNO_TYPE_SPN,
+            MVNO_TYPE_IMSI,
+            MVNO_TYPE_GID,
+            MVNO_TYPE_ICCID,
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface MvnoType {}
@@ -1481,7 +1486,7 @@
         String mvnoTypeString = TextUtils.isEmpty(mvnoType)
                 ? mvnoType : mvnoType.toLowerCase(Locale.ROOT);
         Integer mvnoTypeInt = MVNO_TYPE_STRING_MAP.get(mvnoTypeString);
-        return  mvnoTypeInt == null ? UNSPECIFIED_INT : mvnoTypeInt;
+        return  mvnoTypeInt == null ? MVNO_TYPE_UNKNOWN : mvnoTypeInt;
     }
 
     /** @hide */
@@ -1756,7 +1761,7 @@
         private int mMaxConns;
         private int mWaitTime;
         private int mMaxConnsTime;
-        private int mMvnoType = UNSPECIFIED_INT;
+        private int mMvnoType = MVNO_TYPE_UNKNOWN;
         private String mMvnoMatchData;
         private int mApnSetId;
         private int mCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID;
diff --git a/telephony/java/android/telephony/data/DataCallResponse.java b/telephony/java/android/telephony/data/DataCallResponse.java
index a834e2bb..c7f0c5f 100644
--- a/telephony/java/android/telephony/data/DataCallResponse.java
+++ b/telephony/java/android/telephony/data/DataCallResponse.java
@@ -36,8 +36,10 @@
 import java.lang.annotation.RetentionPolicy;
 import java.net.InetAddress;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * Description of the response of a setup data call connection request.
@@ -172,63 +174,57 @@
                             @Nullable List<InetAddress> dnsAddresses,
                             @Nullable List<InetAddress> gatewayAddresses,
                             @Nullable List<InetAddress> pcscfAddresses, int mtu) {
-        mCause = cause;
-        mSuggestedRetryTime = suggestedRetryTime;
-        mId = id;
-        mLinkStatus = linkStatus;
-        mProtocolType = protocolType;
-        mInterfaceName = (interfaceName == null) ? "" : interfaceName;
-        mAddresses = (addresses == null)
-                ? new ArrayList<>() : new ArrayList<>(addresses);
-        mDnsAddresses = (dnsAddresses == null)
-                ? new ArrayList<>() : new ArrayList<>(dnsAddresses);
-        mGatewayAddresses = (gatewayAddresses == null)
-                ? new ArrayList<>() : new ArrayList<>(gatewayAddresses);
-        mPcscfAddresses = (pcscfAddresses == null)
-                ? new ArrayList<>() : new ArrayList<>(pcscfAddresses);
-        mMtu = mMtuV4 = mMtuV6 = mtu;
-        mHandoverFailureMode = HANDOVER_FAILURE_MODE_LEGACY;
-        mPduSessionId = PDU_SESSION_ID_NOT_SET;
-        mDefaultQos = null;
-        mQosBearerSessions = new ArrayList<>();
-        mSliceInfo = null;
-        mTrafficDescriptors = new ArrayList<>();
+        this(cause, suggestedRetryTime, id,
+                linkStatus, protocolType,
+                interfaceName == null ? "" : interfaceName,
+                addresses == null ? Collections.emptyList() : addresses,
+                dnsAddresses == null ? Collections.emptyList() : dnsAddresses,
+                gatewayAddresses == null ? Collections.emptyList() : gatewayAddresses,
+                pcscfAddresses == null ? Collections.emptyList() : pcscfAddresses,
+                mtu, mtu /* mtuV4 */, mtu /* mtuV6 */,
+                HANDOVER_FAILURE_MODE_LEGACY, PDU_SESSION_ID_NOT_SET,
+                null /* defaultQos */, Collections.emptyList() /* qosBearerSessions */,
+                null /* sliceInfo */,
+                Collections.emptyList() /* trafficDescriptors */);
     }
 
     private DataCallResponse(@DataFailureCause int cause, long suggestedRetryTime, int id,
             @LinkStatus int linkStatus, @ProtocolType int protocolType,
-            @Nullable String interfaceName, @Nullable List<LinkAddress> addresses,
-            @Nullable List<InetAddress> dnsAddresses, @Nullable List<InetAddress> gatewayAddresses,
-            @Nullable List<InetAddress> pcscfAddresses, int mtu, int mtuV4, int mtuV6,
+            @NonNull String interfaceName, @NonNull List<LinkAddress> addresses,
+            @NonNull List<InetAddress> dnsAddresses, @NonNull List<InetAddress> gatewayAddresses,
+            @NonNull List<InetAddress> pcscfAddresses, int mtu, int mtuV4, int mtuV6,
             @HandoverFailureMode int handoverFailureMode, int pduSessionId,
-            @Nullable Qos defaultQos, @Nullable List<QosBearerSession> qosBearerSessions,
+            @Nullable Qos defaultQos, @NonNull List<QosBearerSession> qosBearerSessions,
             @Nullable NetworkSliceInfo sliceInfo,
-            @Nullable List<TrafficDescriptor> trafficDescriptors) {
+            @NonNull List<TrafficDescriptor> trafficDescriptors) {
         mCause = cause;
         mSuggestedRetryTime = suggestedRetryTime;
         mId = id;
         mLinkStatus = linkStatus;
         mProtocolType = protocolType;
-        mInterfaceName = (interfaceName == null) ? "" : interfaceName;
-        mAddresses = (addresses == null)
-                ? new ArrayList<>() : new ArrayList<>(addresses);
-        mDnsAddresses = (dnsAddresses == null)
-                ? new ArrayList<>() : new ArrayList<>(dnsAddresses);
-        mGatewayAddresses = (gatewayAddresses == null)
-                ? new ArrayList<>() : new ArrayList<>(gatewayAddresses);
-        mPcscfAddresses = (pcscfAddresses == null)
-                ? new ArrayList<>() : new ArrayList<>(pcscfAddresses);
+        mInterfaceName = interfaceName;
+        mAddresses = new ArrayList<>(addresses);
+        mDnsAddresses = new ArrayList<>(dnsAddresses);
+        mGatewayAddresses = new ArrayList<>(gatewayAddresses);
+        mPcscfAddresses = new ArrayList<>(pcscfAddresses);
         mMtu = mtu;
         mMtuV4 = mtuV4;
         mMtuV6 = mtuV6;
         mHandoverFailureMode = handoverFailureMode;
         mPduSessionId = pduSessionId;
         mDefaultQos = defaultQos;
-        mQosBearerSessions = (qosBearerSessions == null)
-                ? new ArrayList<>() : new ArrayList<>(qosBearerSessions);
+        mQosBearerSessions = new ArrayList<>(qosBearerSessions);
         mSliceInfo = sliceInfo;
-        mTrafficDescriptors = (trafficDescriptors == null)
-                ? new ArrayList<>() : new ArrayList<>(trafficDescriptors);
+        mTrafficDescriptors = new ArrayList<>(trafficDescriptors);
+
+        if (mLinkStatus == LINK_STATUS_ACTIVE
+                || mLinkStatus == LINK_STATUS_DORMANT) {
+            Objects.requireNonNull(
+                    mInterfaceName, "Active data calls must be on a valid interface!");
+            if (mCause != DataFailCause.NONE) {
+                throw new IllegalStateException("Active data call must not have a failure!");
+            }
+        }
     }
 
     /** @hide */
@@ -241,24 +237,39 @@
         mProtocolType = source.readInt();
         mInterfaceName = source.readString();
         mAddresses = new ArrayList<>();
-        source.readList(mAddresses, LinkAddress.class.getClassLoader(), android.net.LinkAddress.class);
+        source.readList(mAddresses,
+                LinkAddress.class.getClassLoader(),
+                android.net.LinkAddress.class);
         mDnsAddresses = new ArrayList<>();
-        source.readList(mDnsAddresses, InetAddress.class.getClassLoader(), java.net.InetAddress.class);
+        source.readList(mDnsAddresses,
+                InetAddress.class.getClassLoader(),
+                java.net.InetAddress.class);
         mGatewayAddresses = new ArrayList<>();
-        source.readList(mGatewayAddresses, InetAddress.class.getClassLoader(), java.net.InetAddress.class);
+        source.readList(mGatewayAddresses,
+                InetAddress.class.getClassLoader(),
+                java.net.InetAddress.class);
         mPcscfAddresses = new ArrayList<>();
-        source.readList(mPcscfAddresses, InetAddress.class.getClassLoader(), java.net.InetAddress.class);
+        source.readList(mPcscfAddresses,
+                InetAddress.class.getClassLoader(),
+                java.net.InetAddress.class);
         mMtu = source.readInt();
         mMtuV4 = source.readInt();
         mMtuV6 = source.readInt();
         mHandoverFailureMode = source.readInt();
         mPduSessionId = source.readInt();
-        mDefaultQos = source.readParcelable(Qos.class.getClassLoader(), android.telephony.data.Qos.class);
+        mDefaultQos = source.readParcelable(Qos.class.getClassLoader(),
+                android.telephony.data.Qos.class);
         mQosBearerSessions = new ArrayList<>();
-        source.readList(mQosBearerSessions, QosBearerSession.class.getClassLoader(), android.telephony.data.QosBearerSession.class);
-        mSliceInfo = source.readParcelable(NetworkSliceInfo.class.getClassLoader(), android.telephony.data.NetworkSliceInfo.class);
+        source.readList(mQosBearerSessions,
+                QosBearerSession.class.getClassLoader(),
+                android.telephony.data.QosBearerSession.class);
+        mSliceInfo = source.readParcelable(
+                NetworkSliceInfo.class.getClassLoader(),
+                android.telephony.data.NetworkSliceInfo.class);
         mTrafficDescriptors = new ArrayList<>();
-        source.readList(mTrafficDescriptors, TrafficDescriptor.class.getClassLoader(), android.telephony.data.TrafficDescriptor.class);
+        source.readList(mTrafficDescriptors,
+                TrafficDescriptor.class.getClassLoader(),
+                android.telephony.data.TrafficDescriptor.class);
     }
 
     /**
@@ -322,28 +333,36 @@
      * @return A list of addresses of this data connection.
      */
     @NonNull
-    public List<LinkAddress> getAddresses() { return mAddresses; }
+    public List<LinkAddress> getAddresses() {
+        return Collections.unmodifiableList(mAddresses);
+    }
 
     /**
      * @return A list of DNS server addresses, e.g., "192.0.1.3" or
      * "192.0.1.11 2001:db8::1". Empty list if no dns server addresses returned.
      */
     @NonNull
-    public List<InetAddress> getDnsAddresses() { return mDnsAddresses; }
+    public List<InetAddress> getDnsAddresses() {
+        return Collections.unmodifiableList(mDnsAddresses);
+    }
 
     /**
      * @return A list of default gateway addresses, e.g., "192.0.1.3" or
      * "192.0.1.11 2001:db8::1". Empty list if the addresses represent point to point connections.
      */
     @NonNull
-    public List<InetAddress> getGatewayAddresses() { return mGatewayAddresses; }
+    public List<InetAddress> getGatewayAddresses() {
+        return Collections.unmodifiableList(mGatewayAddresses);
+    }
 
     /**
      * @return A list of Proxy Call State Control Function address via PCO (Protocol Configuration
      * Option) for IMS client.
      */
     @NonNull
-    public List<InetAddress> getPcscfAddresses() { return mPcscfAddresses; }
+    public List<InetAddress> getPcscfAddresses() {
+        return Collections.unmodifiableList(mPcscfAddresses);
+    }
 
     /**
      * @return MTU (maximum transmission unit) in bytes received from network. Zero or negative
@@ -404,7 +423,7 @@
      */
     @NonNull
     public List<QosBearerSession> getQosBearerSessions() {
-        return mQosBearerSessions;
+        return Collections.unmodifiableList(mQosBearerSessions);
     }
 
     /**
@@ -420,7 +439,7 @@
      */
     @NonNull
     public List<TrafficDescriptor> getTrafficDescriptors() {
-        return mTrafficDescriptors;
+        return Collections.unmodifiableList(mTrafficDescriptors);
     }
 
     @NonNull
@@ -461,22 +480,6 @@
 
         DataCallResponse other = (DataCallResponse) o;
 
-        final boolean isQosSame = (mDefaultQos == null || other.mDefaultQos == null)
-                ? mDefaultQos == other.mDefaultQos
-                : mDefaultQos.equals(other.mDefaultQos);
-
-        final boolean isQosBearerSessionsSame =
-                (mQosBearerSessions == null || other.mQosBearerSessions == null)
-                ? mQosBearerSessions == other.mQosBearerSessions
-                : (mQosBearerSessions.size() == other.mQosBearerSessions.size()
-                        && mQosBearerSessions.containsAll(other.mQosBearerSessions));
-
-        final boolean isTrafficDescriptorsSame =
-                (mTrafficDescriptors == null || other.mTrafficDescriptors == null)
-                ? mTrafficDescriptors == other.mTrafficDescriptors
-                : (mTrafficDescriptors.size() == other.mTrafficDescriptors.size()
-                        && mTrafficDescriptors.containsAll(other.mTrafficDescriptors));
-
         return mCause == other.mCause
                 && mSuggestedRetryTime == other.mSuggestedRetryTime
                 && mId == other.mId
@@ -496,43 +499,21 @@
                 && mMtuV6 == other.mMtuV6
                 && mHandoverFailureMode == other.mHandoverFailureMode
                 && mPduSessionId == other.mPduSessionId
-                && isQosSame
-                && isQosBearerSessionsSame
+                && Objects.equals(mDefaultQos, other.mDefaultQos)
+                && mQosBearerSessions.size() == other.mQosBearerSessions.size() // non-null
+                && mQosBearerSessions.containsAll(other.mQosBearerSessions) // non-null
                 && Objects.equals(mSliceInfo, other.mSliceInfo)
-                && isTrafficDescriptorsSame;
+                && mTrafficDescriptors.size() == other.mTrafficDescriptors.size() // non-null
+                && mTrafficDescriptors.containsAll(other.mTrafficDescriptors); // non-null
     }
 
     @Override
     public int hashCode() {
-        // Generate order-independent hashes for lists
-        int addressesHash = mAddresses.stream()
-                .map(LinkAddress::hashCode)
-                .mapToInt(Integer::intValue)
-                .sum();
-        int dnsAddressesHash = mDnsAddresses.stream()
-                .map(InetAddress::hashCode)
-                .mapToInt(Integer::intValue)
-                .sum();
-        int gatewayAddressesHash = mGatewayAddresses.stream()
-                .map(InetAddress::hashCode)
-                .mapToInt(Integer::intValue)
-                .sum();
-        int pcscfAddressesHash = mPcscfAddresses.stream()
-                .map(InetAddress::hashCode)
-                .mapToInt(Integer::intValue)
-                .sum();
-        int qosBearerSessionsHash = mQosBearerSessions.stream()
-                .map(QosBearerSession::hashCode)
-                .mapToInt(Integer::intValue)
-                .sum();
-        int trafficDescriptorsHash = mTrafficDescriptors.stream()
-                .map(TrafficDescriptor::hashCode)
-                .mapToInt(Integer::intValue)
-                .sum();
         return Objects.hash(mCause, mSuggestedRetryTime, mId, mLinkStatus, mProtocolType,
-                mInterfaceName, addressesHash, dnsAddressesHash, gatewayAddressesHash,
-                pcscfAddressesHash, mMtu, mMtuV4, mMtuV6, mHandoverFailureMode, mPduSessionId,
-                mDefaultQos, qosBearerSessionsHash, mSliceInfo, trafficDescriptorsHash);
+                mInterfaceName, Set.copyOf(mAddresses), Set.copyOf(mDnsAddresses),
+                Set.copyOf(mGatewayAddresses), Set.copyOf(mPcscfAddresses), mMtu, mMtuV4, mMtuV6,
+                mHandoverFailureMode, mPduSessionId, mDefaultQos, Set.copyOf(mQosBearerSessions),
+                mSliceInfo, Set.copyOf(mTrafficDescriptors));
     }
 
     @Override
@@ -557,15 +538,7 @@
         dest.writeInt(mMtuV6);
         dest.writeInt(mHandoverFailureMode);
         dest.writeInt(mPduSessionId);
-        if (mDefaultQos != null) {
-            if (mDefaultQos.getType() == Qos.QOS_TYPE_EPS) {
-                dest.writeParcelable((EpsQos) mDefaultQos, flags);
-            } else {
-                dest.writeParcelable((NrQos) mDefaultQos, flags);
-            }
-        } else {
-            dest.writeParcelable(null, flags);
-        }
+        dest.writeParcelable(mDefaultQos, flags);
         dest.writeList(mQosBearerSessions);
         dest.writeParcelable(mSliceInfo, flags);
         dest.writeList(mTrafficDescriptors);
@@ -628,15 +601,15 @@
 
         private @ProtocolType int mProtocolType;
 
-        private String mInterfaceName;
+        private String mInterfaceName = "";
 
-        private List<LinkAddress> mAddresses;
+        private List<LinkAddress> mAddresses = Collections.emptyList();
 
-        private List<InetAddress> mDnsAddresses;
+        private List<InetAddress> mDnsAddresses = Collections.emptyList();
 
-        private List<InetAddress> mGatewayAddresses;
+        private List<InetAddress> mGatewayAddresses = Collections.emptyList();
 
-        private List<InetAddress> mPcscfAddresses;
+        private List<InetAddress> mPcscfAddresses = Collections.emptyList();
 
         private int mMtu;
 
@@ -648,11 +621,11 @@
 
         private int mPduSessionId = PDU_SESSION_ID_NOT_SET;
 
-        private Qos mDefaultQos;
+        private @Nullable Qos mDefaultQos;
 
         private List<QosBearerSession> mQosBearerSessions = new ArrayList<>();
 
-        private NetworkSliceInfo mSliceInfo;
+        private @Nullable NetworkSliceInfo mSliceInfo;
 
         private List<TrafficDescriptor> mTrafficDescriptors = new ArrayList<>();
 
@@ -665,7 +638,9 @@
         /**
          * Set data call fail cause.
          *
-         * @param cause Data call fail cause. {@link DataFailCause#NONE} indicates no error.
+         * @param cause Data call fail cause. {@link DataFailCause#NONE} indicates no error, which
+         * is the only valid value for data calls that are {@link LINK_STATUS_ACTIVE} or
+         * {@link LINK_STATUS_DORMANT}.
          * @return The same instance of the builder.
          */
         public @NonNull Builder setCause(@DataFailureCause int cause) {
@@ -734,10 +709,13 @@
         /**
          * Set the network interface name.
          *
-         * @param interfaceName The network interface name (e.g. "rmnet_data1").
+         * @param interfaceName The network interface name (e.g. "rmnet_data1"). This value may not
+         * be null for valid data calls (those that are {@link LINK_STATUS_ACTIVE} or
+         * {@link LINK_STATUS_DORMANT}).
          * @return The same instance of the builder.
          */
-        public @NonNull Builder setInterfaceName(@NonNull String interfaceName) {
+        public @NonNull Builder setInterfaceName(@Nullable String interfaceName) {
+            if (interfaceName == null) interfaceName = "";
             mInterfaceName = interfaceName;
             return this;
         }
@@ -749,6 +727,7 @@
          * @return The same instance of the builder.
          */
         public @NonNull Builder setAddresses(@NonNull List<LinkAddress> addresses) {
+            Objects.requireNonNull(addresses);
             mAddresses = addresses;
             return this;
         }
@@ -760,6 +739,7 @@
          * @return The same instance of the builder.
          */
         public @NonNull Builder setDnsAddresses(@NonNull List<InetAddress> dnsAddresses) {
+            Objects.requireNonNull(dnsAddresses);
             mDnsAddresses = dnsAddresses;
             return this;
         }
@@ -771,6 +751,7 @@
          * @return The same instance of the builder.
          */
         public @NonNull Builder setGatewayAddresses(@NonNull List<InetAddress> gatewayAddresses) {
+            Objects.requireNonNull(gatewayAddresses);
             mGatewayAddresses = gatewayAddresses;
             return this;
         }
@@ -783,6 +764,7 @@
          * @return The same instance of the builder.
          */
         public @NonNull Builder setPcscfAddresses(@NonNull List<InetAddress> pcscfAddresses) {
+            Objects.requireNonNull(pcscfAddresses);
             mPcscfAddresses = pcscfAddresses;
             return this;
         }
diff --git a/telephony/java/android/telephony/data/Qos.java b/telephony/java/android/telephony/data/Qos.java
index 9c2a3bb..d7273b9 100644
--- a/telephony/java/android/telephony/data/Qos.java
+++ b/telephony/java/android/telephony/data/Qos.java
@@ -31,7 +31,7 @@
  *
  * @hide
  */
-public abstract class Qos {
+public abstract class Qos implements Parcelable {
 
     /** @hide */
     @Retention(RetentionPolicy.SOURCE)
@@ -136,8 +136,10 @@
 
     protected Qos(@NonNull Parcel source) {
         type = source.readInt();
-        downlink = source.readParcelable(QosBandwidth.class.getClassLoader(), android.telephony.data.Qos.QosBandwidth.class);
-        uplink = source.readParcelable(QosBandwidth.class.getClassLoader(), android.telephony.data.Qos.QosBandwidth.class);
+        downlink = source.readParcelable(
+                QosBandwidth.class.getClassLoader(), android.telephony.data.Qos.QosBandwidth.class);
+        uplink = source.readParcelable(
+                QosBandwidth.class.getClassLoader(), android.telephony.data.Qos.QosBandwidth.class);
     }
 
     /**
diff --git a/telephony/java/android/telephony/data/QosBearerFilter.java b/telephony/java/android/telephony/data/QosBearerFilter.java
index a0d9c1bd..baa160e 100644
--- a/telephony/java/android/telephony/data/QosBearerFilter.java
+++ b/telephony/java/android/telephony/data/QosBearerFilter.java
@@ -49,17 +49,13 @@
     public @interface QosProtocol {}
 
     public static final int QOS_PROTOCOL_UNSPECIFIED =
-            android.hardware.radio.V1_6.QosProtocol.UNSPECIFIED;
-    public static final int QOS_PROTOCOL_TCP = android.hardware.radio.V1_6.QosProtocol.TCP;
-    public static final int QOS_PROTOCOL_UDP = android.hardware.radio.V1_6.QosProtocol.UDP;
-    public static final int QOS_PROTOCOL_ESP = android.hardware.radio.V1_6.QosProtocol.ESP;
-    public static final int QOS_PROTOCOL_AH = android.hardware.radio.V1_6.QosProtocol.AH;
-    public static final int QOS_MIN_PORT = android.hardware.radio.V1_6.QosPortRange.MIN;
-    /**
-     * Hardcoded in place of android.hardware.radio.V1_6.QosPortRange.MAX as it
-     * returns -1 due to uint16_t to int conversion in java. (TODO: Fix the HAL)
-     */
-    public static final int QOS_MAX_PORT = 65535; // android.hardware.radio.V1_6.QosPortRange.MIN;
+            android.hardware.radio.data.QosFilter.PROTOCOL_UNSPECIFIED;
+    public static final int QOS_PROTOCOL_TCP = android.hardware.radio.data.QosFilter.PROTOCOL_TCP;
+    public static final int QOS_PROTOCOL_UDP = android.hardware.radio.data.QosFilter.PROTOCOL_UDP;
+    public static final int QOS_PROTOCOL_ESP = android.hardware.radio.data.QosFilter.PROTOCOL_ESP;
+    public static final int QOS_PROTOCOL_AH = android.hardware.radio.data.QosFilter.PROTOCOL_AH;
+    public static final int QOS_MIN_PORT = android.hardware.radio.data.PortRange.PORT_RANGE_MIN;
+    public static final int QOS_MAX_PORT = android.hardware.radio.data.PortRange.PORT_RANGE_MAX;
 
     private @QosProtocol int protocol;
 
@@ -78,11 +74,11 @@
     public @interface QosBearerFilterDirection {}
 
     public static final int QOS_FILTER_DIRECTION_DOWNLINK =
-            android.hardware.radio.V1_6.QosFilterDirection.DOWNLINK;
+            android.hardware.radio.data.QosFilter.DIRECTION_DOWNLINK;
     public static final int QOS_FILTER_DIRECTION_UPLINK =
-            android.hardware.radio.V1_6.QosFilterDirection.UPLINK;
+            android.hardware.radio.data.QosFilter.DIRECTION_UPLINK;
     public static final int QOS_FILTER_DIRECTION_BIDIRECTIONAL =
-            android.hardware.radio.V1_6.QosFilterDirection.BIDIRECTIONAL;
+            android.hardware.radio.data.QosFilter.DIRECTION_BIDIRECTIONAL;
 
     private @QosBearerFilterDirection int filterDirection;
 
diff --git a/telephony/java/android/telephony/emergency/EmergencyNumber.java b/telephony/java/android/telephony/emergency/EmergencyNumber.java
index 64bcf71..b429407 100644
--- a/telephony/java/android/telephony/emergency/EmergencyNumber.java
+++ b/telephony/java/android/telephony/emergency/EmergencyNumber.java
@@ -19,8 +19,7 @@
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.TestApi;
-import android.hardware.radio.V1_4.EmergencyNumberSource;
-import android.hardware.radio.V1_4.EmergencyServiceCategory;
+import android.hardware.radio.voice.EmergencyServiceCategory;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.telephony.CarrierConfigManager;
@@ -172,13 +171,14 @@
      * Reference: 3gpp 22.101, Section 10 - Emergency Calls
      */
     public static final int EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING =
-            EmergencyNumberSource.NETWORK_SIGNALING;
+            android.hardware.radio.voice.EmergencyNumber.SOURCE_NETWORK_SIGNALING;
     /**
      * Bit-field which indicates the number is from the sim.
      *
      * Reference: 3gpp 22.101, Section 10 - Emergency Calls
      */
-    public static final int EMERGENCY_NUMBER_SOURCE_SIM = EmergencyNumberSource.SIM;
+    public static final int EMERGENCY_NUMBER_SOURCE_SIM =
+            android.hardware.radio.voice.EmergencyNumber.SOURCE_SIM;
     /**
      * Bit-field which indicates the number is from the platform-maintained database.
      */
@@ -192,7 +192,7 @@
     public static final int EMERGENCY_NUMBER_SOURCE_TEST =  1 << 5;
     /** Bit-field which indicates the number is from the modem config. */
     public static final int EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG =
-            EmergencyNumberSource.MODEM_CONFIG;
+            android.hardware.radio.voice.EmergencyNumber.SOURCE_MODEM_CONFIG;
     /**
      * Bit-field which indicates the number is available as default.
      *
@@ -201,7 +201,8 @@
      *
      * Reference: 3gpp 22.101, Section 10 - Emergency Calls
      */
-    public static final int EMERGENCY_NUMBER_SOURCE_DEFAULT = EmergencyNumberSource.DEFAULT;
+    public static final int EMERGENCY_NUMBER_SOURCE_DEFAULT =
+            android.hardware.radio.voice.EmergencyNumber.SOURCE_DEFAULT;
 
     private static final Set<Integer> EMERGENCY_NUMBER_SOURCE_SET;
     static {
diff --git a/telephony/java/android/telephony/satellite/AntennaDirection.java b/telephony/java/android/telephony/satellite/AntennaDirection.java
index 02b0bc7..22412e6 100644
--- a/telephony/java/android/telephony/satellite/AntennaDirection.java
+++ b/telephony/java/android/telephony/satellite/AntennaDirection.java
@@ -17,7 +17,7 @@
 package android.telephony.satellite;
 
 import android.annotation.NonNull;
-import android.compat.annotation.UnsupportedAppUsage;
+import android.annotation.SystemApi;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -37,6 +37,7 @@
  * positive X and pointing away from back of the phone for negative X.
  * @hide
  */
+@SystemApi
 public final class AntennaDirection implements Parcelable {
     /** Antenna x axis direction. */
     private float mX;
@@ -50,7 +51,6 @@
     /**
      * @hide
      */
-    @UnsupportedAppUsage
     public AntennaDirection(float x, float y, float z) {
         mX = x;
         mY = y;
diff --git a/telephony/java/android/telephony/satellite/AntennaPosition.java b/telephony/java/android/telephony/satellite/AntennaPosition.java
index eefc8b0..588be6c 100644
--- a/telephony/java/android/telephony/satellite/AntennaPosition.java
+++ b/telephony/java/android/telephony/satellite/AntennaPosition.java
@@ -17,7 +17,7 @@
 package android.telephony.satellite;
 
 import android.annotation.NonNull;
-import android.compat.annotation.UnsupportedAppUsage;
+import android.annotation.SystemApi;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -28,6 +28,7 @@
  * direction to be used with satellite communication and suggested device hold positions.
  * @hide
  */
+@SystemApi
 public final class AntennaPosition implements Parcelable {
     /** Antenna direction used for satellite communication. */
     @NonNull AntennaDirection mAntennaDirection;
@@ -38,7 +39,6 @@
     /**
      * @hide
      */
-    @UnsupportedAppUsage
     public AntennaPosition(@NonNull AntennaDirection antennaDirection, int suggestedHoldPosition) {
         mAntennaDirection = antennaDirection;
         mSuggestedHoldPosition = suggestedHoldPosition;
diff --git a/telephony/java/android/telephony/satellite/PointingInfo.java b/telephony/java/android/telephony/satellite/PointingInfo.java
index a559b32..47dbdaf 100644
--- a/telephony/java/android/telephony/satellite/PointingInfo.java
+++ b/telephony/java/android/telephony/satellite/PointingInfo.java
@@ -17,12 +17,19 @@
 package android.telephony.satellite;
 
 import android.annotation.NonNull;
+import android.annotation.SystemApi;
 import android.os.Parcel;
 import android.os.Parcelable;
 
+import java.util.Objects;
+
 /**
+ * PointingInfo is used to store the position of satellite received from satellite modem.
+ * The position of satellite is represented by azimuth and elevation angles
+ * with degrees as unit of measurement.
  * @hide
  */
+@SystemApi
 public final class PointingInfo implements Parcelable {
     /** Satellite azimuth in degrees */
     private float mSatelliteAzimuthDegrees;
@@ -33,7 +40,6 @@
     /**
      * @hide
      */
-
     public PointingInfo(float satelliteAzimuthDegrees, float satelliteElevationDegrees) {
         mSatelliteAzimuthDegrees = satelliteAzimuthDegrees;
         mSatelliteElevationDegrees = satelliteElevationDegrees;
@@ -67,6 +73,20 @@
                 }
             };
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        PointingInfo that = (PointingInfo) o;
+        return mSatelliteAzimuthDegrees == that.mSatelliteAzimuthDegrees
+                && mSatelliteElevationDegrees == that.mSatelliteElevationDegrees;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mSatelliteAzimuthDegrees, mSatelliteElevationDegrees);
+    }
+
     @NonNull
     @Override
     public String toString() {
diff --git a/telephony/java/android/telephony/satellite/SatelliteCapabilities.java b/telephony/java/android/telephony/satellite/SatelliteCapabilities.java
index 6856cc0..bc45be1 100644
--- a/telephony/java/android/telephony/satellite/SatelliteCapabilities.java
+++ b/telephony/java/android/telephony/satellite/SatelliteCapabilities.java
@@ -17,6 +17,8 @@
 package android.telephony.satellite;
 
 import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.SystemApi;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -27,8 +29,11 @@
 import java.util.Set;
 
 /**
+ * SatelliteCapabilities is used to represent the capabilities of the satellite service
+ * received from satellite modem.
  * @hide
  */
+@SystemApi
 public final class SatelliteCapabilities implements Parcelable {
     /**
      * List of technologies supported by the satellite modem.
@@ -56,7 +61,7 @@
     /**
      * @hide
      */
-    public SatelliteCapabilities(Set<Integer> supportedRadioTechnologies,
+    public SatelliteCapabilities(@Nullable Set<Integer> supportedRadioTechnologies,
             boolean isPointingRequired, int maxBytesPerOutgoingDatagram,
             @NonNull Map<Integer, AntennaPosition> antennaPositionMap) {
         mSupportedRadioTechnologies = supportedRadioTechnologies == null
diff --git a/telephony/java/android/telephony/satellite/SatelliteDatagram.java b/telephony/java/android/telephony/satellite/SatelliteDatagram.java
index d3cb8a0..9037f0c 100644
--- a/telephony/java/android/telephony/satellite/SatelliteDatagram.java
+++ b/telephony/java/android/telephony/satellite/SatelliteDatagram.java
@@ -17,12 +17,16 @@
 package android.telephony.satellite;
 
 import android.annotation.NonNull;
+import android.annotation.SystemApi;
 import android.os.Parcel;
 import android.os.Parcelable;
 
 /**
+ * SatelliteDatagram is used to store data that is to be sent or received over satellite.
+ * Data is stored in byte array format.
  * @hide
  */
+@SystemApi
 public final class SatelliteDatagram implements Parcelable {
     /**
      * Datagram to be sent or received over satellite.
@@ -63,6 +67,12 @@
                 }
             };
 
+    /**
+     * Get satellite datagram.
+     * @return byte array. The format of the byte array is determined by the corresponding
+     * satellite provider. Client application should be aware of how to encode the datagram based
+     * upon the satellite provider.
+     */
     @NonNull public byte[] getSatelliteDatagram() {
         return mData;
     }
diff --git a/telephony/java/android/telephony/satellite/SatelliteDatagramCallback.java b/telephony/java/android/telephony/satellite/SatelliteDatagramCallback.java
index b2dec71..cb2920f 100644
--- a/telephony/java/android/telephony/satellite/SatelliteDatagramCallback.java
+++ b/telephony/java/android/telephony/satellite/SatelliteDatagramCallback.java
@@ -17,6 +17,7 @@
 package android.telephony.satellite;
 
 import android.annotation.NonNull;
+import android.annotation.SystemApi;
 
 import java.util.function.Consumer;
 
@@ -25,6 +26,7 @@
  *
  * @hide
  */
+@SystemApi
 public interface SatelliteDatagramCallback {
     /**
      * Called when there is an incoming datagram to be received.
diff --git a/telephony/java/android/telephony/satellite/SatelliteManager.java b/telephony/java/android/telephony/satellite/SatelliteManager.java
index 2021ac7..c498216 100644
--- a/telephony/java/android/telephony/satellite/SatelliteManager.java
+++ b/telephony/java/android/telephony/satellite/SatelliteManager.java
@@ -23,6 +23,7 @@
 import android.annotation.Nullable;
 import android.annotation.RequiresFeature;
 import android.annotation.RequiresPermission;
+import android.annotation.SystemApi;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.os.Binder;
@@ -55,6 +56,7 @@
  * @hide
  */
 @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SATELLITE)
+@SystemApi
 public class SatelliteManager {
     private static final String TAG = "SatelliteManager";
 
@@ -386,9 +388,16 @@
     public @interface DisplayMode {}
 
     /**
-     * Request to enable or disable the satellite modem and demo mode. If the satellite modem is
-     * enabled, this may also disable the cellular modem, and if the satellite modem is disabled,
-     * this may also re-enable the cellular modem.
+     * Request to enable or disable the satellite modem and demo mode.
+     * If satellite modem and cellular modem cannot work concurrently,
+     * then this will disable the cellular modem if satellite modem is enabled,
+     * and will re-enable the cellular modem if satellite modem is disabled.
+     *
+     * Demo mode is created to simulate the experience of sending and receiving messages over
+     * satellite. If user enters demo mode, a request should be sent to framework to enable
+     * satellite with enableDemoMode set to {code true}. Once satellite is enabled and device is
+     * aligned with the satellite, user can send a message and also receive a reply in demo mode.
+     * If enableSatellite is {@code false}, enableDemoMode has no impact on the behavior.
      *
      * @param enableSatellite {@code true} to enable the satellite modem and
      *                        {@code false} to disable.
@@ -911,8 +920,8 @@
      * Provision the device with a satellite provider.
      * This is needed if the provider allows dynamic registration.
      *
-     * @param token The token to be used as a unique identifier for provisioning with satellite
-     *              gateway.
+     * @param token The token is generated by the user which is used as a unique identifier for
+     *              provisioning with satellite gateway.
      * @param provisionData Data from the provisioning app that can be used by provisioning server
      * @param cancellationSignal The optional signal used by the caller to cancel the provision
      *                           request. Even when the cancellation is signaled, Telephony will
@@ -965,9 +974,12 @@
      * {@link SatelliteProvisionStateCallback#onSatelliteProvisionStateChanged(boolean)}
      * should report as deprovisioned.
      * For provisioning satellite service, refer to
-     * {@link #provisionSatelliteService(String, String, CancellationSignal, Executor, Consumer)}
+     * {@link #provisionSatelliteService(String, byte[], CancellationSignal, Executor, Consumer)}
      *
      * @param token The token of the device/subscription to be deprovisioned.
+     *              This should match with the token passed as input in
+     *              {@link #provisionSatelliteService(String, byte[], CancellationSignal, Executor,
+     *              Consumer)}
      * @param resultListener Listener for the {@link SatelliteError} result of the operation.
      *
      * @throws SecurityException if the caller doesn't have required permission.
@@ -1213,6 +1225,9 @@
     /**
      * Register to receive incoming datagrams over satellite.
      *
+     * To poll for pending satellite datagrams, refer to
+     * {@link #pollPendingSatelliteDatagrams(Executor, Consumer)}
+     *
      * @param executor The executor on which the callback will be called.
      * @param callback The callback to handle incoming datagrams over satellite.
      *                 This callback with be invoked when a new datagram is received from satellite.
@@ -1305,6 +1320,7 @@
     /**
      * Poll pending satellite datagrams over satellite.
      *
+     * This method should be called when user specifies to check incoming messages over satellite.
      * This method requests modem to check if there are any pending datagrams to be received over
      * satellite. If there are any incoming datagrams, they will be received via
      * {@link SatelliteDatagramCallback#onSatelliteDatagramReceived(long, SatelliteDatagram, int,
@@ -1518,6 +1534,9 @@
     /**
      * Inform whether the device is aligned with the satellite for demo mode.
      *
+     * Framework can send datagram to modem only when device is aligned with the satellite.
+     * This method helps framework to simulate the experience of sending datagram over satellite.
+     *
      * @param isAligned {@true} Device is aligned with the satellite for demo mode
      *                  {@false} Device is not aligned with the satellite for demo mode
      *
diff --git a/telephony/java/android/telephony/satellite/SatelliteProvisionStateCallback.java b/telephony/java/android/telephony/satellite/SatelliteProvisionStateCallback.java
index a62eb8b..7116876 100644
--- a/telephony/java/android/telephony/satellite/SatelliteProvisionStateCallback.java
+++ b/telephony/java/android/telephony/satellite/SatelliteProvisionStateCallback.java
@@ -16,17 +16,22 @@
 
 package android.telephony.satellite;
 
+import android.annotation.SystemApi;
+
 /**
  * A callback class for monitoring satellite provision state change events.
  *
  * @hide
  */
+@SystemApi
 public interface SatelliteProvisionStateCallback {
     /**
      * Called when satellite provision state changes.
      *
      * @param provisioned The new provision state. {@code true} means satellite is provisioned
      *                    {@code false} means satellite is not provisioned.
+     *                    It is generally expected that the provisioning app retries if
+     *                    provisioning fails.
      */
     void onSatelliteProvisionStateChanged(boolean provisioned);
 }
diff --git a/telephony/java/android/telephony/satellite/SatelliteStateCallback.java b/telephony/java/android/telephony/satellite/SatelliteStateCallback.java
index d9ecaa3..812ff2d 100644
--- a/telephony/java/android/telephony/satellite/SatelliteStateCallback.java
+++ b/telephony/java/android/telephony/satellite/SatelliteStateCallback.java
@@ -16,11 +16,14 @@
 
 package android.telephony.satellite;
 
+import android.annotation.SystemApi;
+
 /**
  * A callback class for monitoring satellite modem state change events.
  *
  * @hide
  */
+@SystemApi
 public interface SatelliteStateCallback {
     /**
      * Called when satellite modem state changes.
diff --git a/telephony/java/android/telephony/satellite/SatelliteTransmissionUpdateCallback.java b/telephony/java/android/telephony/satellite/SatelliteTransmissionUpdateCallback.java
index d4fe57a..d7d892a 100644
--- a/telephony/java/android/telephony/satellite/SatelliteTransmissionUpdateCallback.java
+++ b/telephony/java/android/telephony/satellite/SatelliteTransmissionUpdateCallback.java
@@ -17,6 +17,7 @@
 package android.telephony.satellite;
 
 import android.annotation.NonNull;
+import android.annotation.SystemApi;
 
 /**
  * A callback class for monitoring satellite position update and datagram transfer state change
@@ -24,6 +25,7 @@
  *
  * @hide
  */
+@SystemApi
 public interface SatelliteTransmissionUpdateCallback {
     /**
      * Called when the satellite position changed.
diff --git a/telephony/java/android/telephony/satellite/stub/SatelliteImplBase.java b/telephony/java/android/telephony/satellite/stub/SatelliteImplBase.java
index d606f87..17d026c 100644
--- a/telephony/java/android/telephony/satellite/stub/SatelliteImplBase.java
+++ b/telephony/java/android/telephony/satellite/stub/SatelliteImplBase.java
@@ -421,7 +421,7 @@
      *
      * @param token The token to be used as a unique identifier for provisioning with satellite
      *              gateway.
-     * @param provisionData Data from the provisioning app that can be used by provisioning 
+     * @param provisionData Data from the provisioning app that can be used by provisioning
      *                      server
      * @param errorCallback The callback to receive the error code result of the operation.
      *
diff --git a/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl b/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl
index 1788bda..f6849de 100644
--- a/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl
+++ b/telephony/java/com/android/internal/telephony/ICarrierConfigLoader.aidl
@@ -30,12 +30,15 @@
     PersistableBundle getConfigForSubIdWithFeature(int subId, String callingPackage,
             String callingFeatureId);
 
+    @EnforcePermission("MODIFY_PHONE_STATE")
     void overrideConfig(int subId, in PersistableBundle overrides, boolean persistent);
 
     void notifyConfigChangedForSubId(int subId);
 
+    @EnforcePermission("MODIFY_PHONE_STATE")
     void updateConfigForPhoneId(int phoneId, String simState);
 
+    @EnforcePermission("READ_PRIVILEGED_PHONE_STATE")
     String getDefaultCarrierServicePackageName();
 
     PersistableBundle getConfigSubsetForSubIdWithFeature(int subId, String callingPackage,
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index 23f4217..0c3991d 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -1192,17 +1192,6 @@
             in List<String> cdmaNonRoamingList);
 
     /**
-     * Returns the result and response from RIL for oem request
-     *
-     * @param oemReq the data is sent to ril.
-     * @param oemResp the respose data from RIL.
-     * @return negative value request was not handled or get error
-     *         0 request was handled succesfully, but no response data
-     *         positive value success, data length of response
-     */
-    int invokeOemRilRequestRaw(in byte[] oemReq, out byte[] oemResp);
-
-    /**
      * Check if any mobile Radios need to be shutdown.
      *
      * @return true is any mobile radio needs to be shutdown
diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java
index b273ba2..72e4389 100644
--- a/telephony/java/com/android/internal/telephony/RILConstants.java
+++ b/telephony/java/com/android/internal/telephony/RILConstants.java
@@ -323,11 +323,6 @@
     int SETUP_DATA_AUTH_CHAP      = 2;
     int SETUP_DATA_AUTH_PAP_CHAP  = 3;
 
-    /* LCE service related constants. */
-    int LCE_NOT_AVAILABLE = -1;
-    int LCE_STOPPED = 0;
-    int LCE_ACTIVE = 1;
-
     /**
      * No restriction at all including voice/SMS/USSD/SS/AV64
      * and packet data.
@@ -571,7 +566,24 @@
     int RIL_REQUEST_UPDATE_IMS_CALL_STATUS = 240;
     int RIL_REQUEST_SET_N1_MODE_ENABLED = 241;
     int RIL_REQUEST_IS_N1_MODE_ENABLED = 242;
+    int RIL_REQUEST_SET_LOCATION_PRIVACY_SETTING = 243;
+    int RIL_REQUEST_GET_LOCATION_PRIVACY_SETTING = 244;
+    int RIL_REQUEST_GET_SATELLITE_CAPABILITIES = 245;
+    int RIL_REQUEST_SET_SATELLITE_POWER = 246;
+    int RIL_REQUEST_GET_SATELLITE_POWER = 247;
+    int RIL_REQUEST_PROVISION_SATELLITE_SERVICE = 248;
+    int RIL_REQUEST_ADD_ALLOWED_SATELLITE_CONTACTS = 249;
+    int RIL_REQUEST_REMOVE_ALLOWED_SATELLITE_CONTACTS = 250;
+    int RIL_REQUEST_SEND_SATELLITE_MESSAGES = 251;
+    int RIL_REQUEST_GET_PENDING_SATELLITE_MESSAGES = 252;
+    int RIL_REQUEST_GET_SATELLITE_MODE = 253;
+    int RIL_REQUEST_SET_SATELLITE_INDICATION_FILTER = 254;
+    int RIL_REQUEST_START_SENDING_SATELLITE_POINTING_INFO = 255;
+    int RIL_REQUEST_STOP_SENDING_SATELLITE_POINTING_INFO = 256;
+    int RIL_REQUEST_GET_MAX_CHARACTERS_PER_SATELLITE_TEXT_MESSAGE = 257;
+    int RIL_REQUEST_GET_TIME_FOR_NEXT_SATELLITE_VISIBILITY = 258;
     int RIL_REQUEST_IS_NULL_CIPHER_AND_INTEGRITY_ENABLED = 259;
+    int RIL_REQUEST_SET_SATELLITE_PLMN = 260;
 
     /* Responses begin */
     int RIL_RESPONSE_ACKNOWLEDGEMENT = 800;
@@ -633,6 +645,13 @@
     int RIL_UNSOL_RESPONSE_SIM_PHONEBOOK_CHANGED = 1053;
     int RIL_UNSOL_RESPONSE_SIM_PHONEBOOK_RECORDS_RECEIVED = 1054;
     int RIL_UNSOL_SLICING_CONFIG_CHANGED = 1055;
+    int RIL_UNSOL_PENDING_SATELLITE_MESSAGE_COUNT = 1056;
+    int RIL_UNSOL_NEW_SATELLITE_MESSAGES = 1057;
+    int RIL_UNSOL_SATELLITE_MESSAGES_TRANSFER_COMPLETE = 1058;
+    int RIL_UNSOL_SATELLITE_POINTING_INFO_CHANGED = 1059;
+    int RIL_UNSOL_SATELLITE_MODE_CHANGED = 1060;
+    int RIL_UNSOL_SATELLITE_RADIO_TECHNOLOGY_CHANGED = 1061;
+    int RIL_UNSOL_SATELLITE_PROVISION_STATE_CHANGED = 1062;
 
     /* The following unsols are not defined in RIL.h */
     int RIL_UNSOL_HAL_NON_RIL_BASE = 1100;
diff --git a/telephony/java/com/android/telephony/Rlog.java b/telephony/java/com/android/telephony/Rlog.java
index 9d6c930..e3e6c60 100644
--- a/telephony/java/com/android/telephony/Rlog.java
+++ b/telephony/java/com/android/telephony/Rlog.java
@@ -15,6 +15,10 @@
  */
 package com.android.telephony;
 
+import android.net.Uri;
+import android.os.Build;
+import android.telecom.PhoneAccount;
+import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 import android.util.Base64;
 import android.util.Log;
@@ -128,6 +132,78 @@
     }
 
     /**
+     * Generates an obfuscated string for a calling handle in {@link Uri} format, or a raw phone
+     * phone number in {@link String} format.
+     * @param pii The information to obfuscate.
+     * @return The obfuscated string.
+     */
+    public static String piiHandle(Object pii) {
+        StringBuilder sb = new StringBuilder();
+        if (pii instanceof Uri) {
+            Uri uri = (Uri) pii;
+            String scheme = uri.getScheme();
+
+            if (!TextUtils.isEmpty(scheme)) {
+                sb.append(scheme).append(":");
+            }
+
+            String textToObfuscate = uri.getSchemeSpecificPart();
+            if (PhoneAccount.SCHEME_TEL.equals(scheme)) {
+                obfuscatePhoneNumber(sb, textToObfuscate);
+            } else if (PhoneAccount.SCHEME_SIP.equals(scheme)) {
+                for (int i = 0; i < textToObfuscate.length(); i++) {
+                    char c = textToObfuscate.charAt(i);
+                    if (c != '@' && c != '.') {
+                        c = '*';
+                    }
+                    sb.append(c);
+                }
+            } else {
+                sb.append("***");
+            }
+        } else if (pii instanceof String) {
+            String number = (String) pii;
+            obfuscatePhoneNumber(sb, number);
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Obfuscates a phone number, allowing NUM_DIALABLE_DIGITS_TO_LOG digits to be exposed for the
+     * phone number.
+     * @param sb String buffer to write obfuscated number to.
+     * @param phoneNumber The number to obfuscate.
+     */
+    private static void obfuscatePhoneNumber(StringBuilder sb, String phoneNumber) {
+        int numDigitsToLog = USER_BUILD ? 0 : 2;
+        int numDigitsToObfuscate = getDialableCount(phoneNumber) - numDigitsToLog;
+        for (int i = 0; i < phoneNumber.length(); i++) {
+            char c = phoneNumber.charAt(i);
+            boolean isDialable = PhoneNumberUtils.isDialable(c);
+            if (isDialable) {
+                numDigitsToObfuscate--;
+            }
+            sb.append(isDialable && numDigitsToObfuscate >= 0 ? "*" : c);
+        }
+    }
+
+    /**
+     * Determines the number of dialable characters in a string.
+     * @param toCount The string to count dialable characters in.
+     * @return The count of dialable characters.
+     */
+    private static int getDialableCount(String toCount) {
+        int numDialable = 0;
+        for (char c : toCount.toCharArray()) {
+            if (PhoneNumberUtils.isDialable(c)) {
+                numDialable++;
+            }
+        }
+        return numDialable;
+    }
+
+    /**
      * Returns a secure hash (using the SHA1 algorithm) of the provided input.
      *
      * @return "****" if the build type is user, otherwise the hash
diff --git a/tests/ApkVerityTest/src/com/android/apkverity/ApkVerityTest.java b/tests/ApkVerityTest/src/com/android/apkverity/ApkVerityTest.java
index 591ffeb..482f633 100644
--- a/tests/ApkVerityTest/src/com/android/apkverity/ApkVerityTest.java
+++ b/tests/ApkVerityTest/src/com/android/apkverity/ApkVerityTest.java
@@ -408,8 +408,7 @@
         damageFileAgainstBlockDevice(apkPath, offsetFirstByte);
 
         // Expect actual read from disk to fail but only at damaged page.
-        BlockDeviceWriter.dropCaches(mDevice);
-        assertFalse(BlockDeviceWriter.canReadByte(mDevice, apkPath, offsetFirstByte));
+        expectReadFromBlockDeviceToFail(apkPath, offsetFirstByte);
         if (apkSize > offsetFirstByte + FSVERITY_PAGE_SIZE) {
             long lastByteOfTheSamePage =
                     offsetFirstByte % FSVERITY_PAGE_SIZE + FSVERITY_PAGE_SIZE - 1;
@@ -437,8 +436,7 @@
         damageFileAgainstBlockDevice(apkPath, offsetOfLastByte);
 
         // Expect actual read from disk to fail but only at damaged page.
-        BlockDeviceWriter.dropCaches(mDevice);
-        assertFalse(BlockDeviceWriter.canReadByte(mDevice, apkPath, offsetOfLastByte));
+        expectReadFromBlockDeviceToFail(apkPath, offsetOfLastByte);
         if (offsetOfLastByte - FSVERITY_PAGE_SIZE > 0) {
             long firstByteOfTheSamePage = offsetOfLastByte - offsetOfLastByte % FSVERITY_PAGE_SIZE;
             assertFalse(BlockDeviceWriter.canReadByte(mDevice, apkPath, firstByteOfTheSamePage));
@@ -456,29 +454,34 @@
             String path = appDir + "/" + basename;
             damageFileAgainstBlockDevice(path, kTargetOffset);
 
-            // Retry is sometimes needed to pass the test. Package manager may have FD leaks
-            // (see b/122744005 as example) that prevents the file in question to be evicted
-            // from filesystem cache. Forcing GC workarounds the problem.
-            int retry = 5;
-            for (; retry > 0; retry--) {
-                BlockDeviceWriter.dropCaches(mDevice);
-                if (!BlockDeviceWriter.canReadByte(mDevice, path, kTargetOffset)) {
-                    break;
-                }
-                try {
-                    String openFiles = expectRemoteCommandToSucceed("lsof " + apkPath);
-                    CLog.d("lsof: " + openFiles);
-                    Thread.sleep(1000);
-                    forceGCOnOpenFilesProcess(getOpenFilesPIDs(openFiles));
-                } catch (InterruptedException e) {
-                    Thread.currentThread().interrupt();
-                    return;
-                }
-            }
-            assertTrue("Read from " + path + " should fail", retry > 0);
+            expectReadFromBlockDeviceToFail(path, kTargetOffset);
         }
     }
 
+    private void expectReadFromBlockDeviceToFail(String readPath, long offset)
+            throws DeviceNotAvailableException {
+        // Retry is sometimes needed to pass the test. Package manager may have FD leaks
+        // (see b/122744005 as example) that prevents the file in question to be evicted
+        // from filesystem cache. Forcing GC workarounds the problem.
+        int retry = 5;
+        for (; retry > 0; retry--) {
+            BlockDeviceWriter.dropCaches(mDevice);
+            if (!BlockDeviceWriter.canReadByte(mDevice, readPath, offset)) {
+                break;
+            }
+            try {
+                String openFiles = expectRemoteCommandToSucceed("lsof " + readPath);
+                CLog.d("lsof: " + openFiles);
+                Thread.sleep(1000);
+                forceGCOnOpenFilesProcess(getOpenFilesPIDs(openFiles));
+            } catch (InterruptedException e) {
+                Thread.currentThread().interrupt();
+                return;
+            }
+        }
+        assertTrue("Read from " + readPath + " should fail", retry > 0);
+    }
+
     /**
      * This is a helper method that parses the lsof output to get PIDs of process holding FD.
      * Here is an example output of lsof. This method extracts the second columns(PID).
diff --git a/tests/ChoreographerTests/src/main/java/android/view/choreographertests/AttachedChoreographerTest.java b/tests/ChoreographerTests/src/main/java/android/view/choreographertests/AttachedChoreographerTest.java
index 48d050c..bb0d30a 100644
--- a/tests/ChoreographerTests/src/main/java/android/view/choreographertests/AttachedChoreographerTest.java
+++ b/tests/ChoreographerTests/src/main/java/android/view/choreographertests/AttachedChoreographerTest.java
@@ -22,9 +22,9 @@
 import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
 
 import android.Manifest;
-import android.app.compat.CompatChanges;
 import android.hardware.display.DisplayManager;
 import android.os.Looper;
 import android.support.test.uiautomator.UiDevice;
@@ -34,6 +34,7 @@
 import android.view.SurfaceControl;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
+import android.view.WindowManager;
 
 import androidx.lifecycle.Lifecycle;
 import androidx.test.core.app.ActivityScenario;
@@ -52,7 +53,7 @@
 public class AttachedChoreographerTest {
     private static final String TAG = "AttachedChoreographerTest";
     private static final long DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE_CHANGEID = 170503758;
-    private static final long THRESHOLD_MS = 10;
+    private static final long THRESHOLD_MS = 4;
     private static final int FRAME_ITERATIONS = 21;
     private static final int CALLBACK_MISSED_THRESHOLD = 2;
 
@@ -66,7 +67,7 @@
     private SurfaceView mSurfaceView;
     private SurfaceHolder mSurfaceHolder;
     private Choreographer mChoreographer;
-    private boolean mIsFirstCallback = true;
+    private long mExpectedPresentTime;
     private int mCallbackMissedCounter = 0;
 
     @Before
@@ -74,6 +75,13 @@
         mScenario = ActivityScenario.launch(GraphicsActivity.class);
         mScenario.moveToState(Lifecycle.State.CREATED);
         mScenario.onActivity(activity -> {
+            // Lock the display frame rate. This will not allow SurfaceFlinger to use the frame rate
+            // override feature that throttles down the global choreographer for this test.
+            float refreshRate = activity.getDisplay().getMode().getRefreshRate();
+            WindowManager.LayoutParams attrs = activity.getWindow().getAttributes();
+            attrs.preferredRefreshRate = refreshRate;
+            activity.getWindow().setAttributes(attrs);
+
             mSurfaceView = activity.findViewById(R.id.surface);
             mSurfaceHolder = mSurfaceView.getHolder();
             mSurfaceHolder.addCallback(new SurfaceHolder.Callback() {
@@ -95,6 +103,12 @@
         });
 
         UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
+
+        // TODO(b/290634611): clean this up once SF new front end is enabled by default
+        boolean sfNewFeEnabled = uiDevice.executeShellCommand("dumpsys SurfaceFlinger")
+                .indexOf("SurfaceFlinger New Frontend Enabled:true") != -1;
+        assumeTrue(sfNewFeEnabled);
+
         uiDevice.wakeUp();
         uiDevice.executeShellCommand("wm dismiss-keyguard");
         mScenario.moveToState(Lifecycle.State.RESUMED);
@@ -112,18 +126,16 @@
             mDisplayManager.setRefreshRateSwitchingType(
                     DisplayManager.SWITCHING_TYPE_RENDER_FRAME_RATE_ONLY);
             mDisplayManager.setShouldAlwaysRespectAppRequestedMode(true);
-            boolean changeIsEnabled =
-                    CompatChanges.isChangeEnabled(
-                            DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE_CHANGEID);
-            Log.i(TAG, "DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE_CHANGE_ID is "
-                    + (changeIsEnabled ? "enabled" : "disabled"));
         });
     }
 
     @After
     public void tearDown() {
-        mDisplayManager.setRefreshRateSwitchingType(mInitialMatchContentFrameRate);
-        mDisplayManager.setShouldAlwaysRespectAppRequestedMode(false);
+        if (mDisplayManager != null) {
+            mDisplayManager.setRefreshRateSwitchingType(mInitialMatchContentFrameRate);
+            mDisplayManager.setShouldAlwaysRespectAppRequestedMode(false);
+        }
+
         InstrumentationRegistry.getInstrumentation().getUiAutomation()
                 .dropShellPermissionIdentity();
     }
@@ -407,18 +419,141 @@
         }
     }
 
+    @Test
+    public void testChoreographerAttachedAfterSetFrameRate() {
+        Log.i(TAG, "adyabr: starting testChoreographerAttachedAfterSetFrameRate");
+
+        class TransactionGenerator implements SurfaceControl.TransactionCommittedListener {
+            private SurfaceControl mSc;
+            private int mFrame;
+            private static final int NUM_FRAMES = 50;
+            private final CountDownLatch mCompleteLatch = new CountDownLatch(1);
+
+            TransactionGenerator(SurfaceControl sc) {
+                mSc = sc;
+
+            }
+
+            @Override
+            public void onTransactionCommitted() {
+                mFrame++;
+                if (mFrame >= NUM_FRAMES) {
+                    mCompleteLatch.countDown();
+                    return;
+                }
+
+                SurfaceControl.Transaction transaction = new SurfaceControl.Transaction();
+                transaction.setAlpha(mSc, 1.0f / mFrame)
+                        .addTransactionCommittedListener(Runnable::run, this)
+                        .apply();
+
+            }
+
+            public void startAndWaitForCompletion() {
+                onTransactionCommitted();
+                if (waitForCountDown(mCompleteLatch, /* timeoutInSeconds */ 10L)) {
+                    fail("failed to send new transactions");
+                }
+            }
+        }
+
+
+        for (int divisor : new int[]{2, 3}) {
+            CountDownLatch choreographerLatch = new CountDownLatch(1);
+            mScenario.onActivity(activity -> {
+                if (waitForCountDown(mSurfaceCreationCountDown, /* timeoutInSeconds */ 1L)) {
+                    fail("Unable to create surface within 1 Second");
+                }
+
+                SurfaceControl sc = mSurfaceView.getSurfaceControl();
+                SurfaceControl.Transaction transaction = new SurfaceControl.Transaction();
+                float displayRefreshRate = activity.getDisplay().getMode().getRefreshRate();
+                float fps = displayRefreshRate / divisor;
+                long callbackDurationMs = Math.round(1000 / fps);
+                mCallbackMissedCounter = 0;
+                transaction.setFrameRate(sc, fps, Surface.FRAME_RATE_COMPATIBILITY_FIXED_SOURCE)
+                        .apply();
+
+
+                new TransactionGenerator(sc).startAndWaitForCompletion();
+
+                Choreographer choreographer = sc.getChoreographer();
+                verifyVsyncCallbacks(choreographer, callbackDurationMs,
+                        choreographerLatch, FRAME_ITERATIONS);
+            });
+            // wait for the previous callbacks to finish before moving to the next divisor
+            if (waitForCountDown(choreographerLatch, /* timeoutInSeconds */ 5L)) {
+                fail("Test not finished in 5 Seconds");
+            }
+        }
+    }
+
+    @Test
+    public void testChoreographerNonDivisorFixedSourceRefreshRate() {
+        CountDownLatch continueLatch = new CountDownLatch(1);
+        mScenario.onActivity(activity -> {
+            if (waitForCountDown(mSurfaceCreationCountDown, /* timeoutInSeconds */ 1L)) {
+                fail("Unable to create surface within 1 Second");
+            }
+            SurfaceControl sc = mSurfaceView.getSurfaceControl();
+            Choreographer choreographer = sc.getChoreographer();
+            SurfaceControl.Transaction transaction = new SurfaceControl.Transaction();
+            float displayRefreshRate = activity.getDisplay().getMode().getRefreshRate();
+            float fps = 61.7f; // hopefully not a divisor
+            long callbackDurationMs = Math.round(1000 / displayRefreshRate);
+            mCallbackMissedCounter = 0;
+            transaction.setFrameRate(sc, fps, Surface.FRAME_RATE_COMPATIBILITY_FIXED_SOURCE)
+                    .addTransactionCommittedListener(Runnable::run,
+                            () -> verifyVsyncCallbacks(choreographer,
+                                    callbackDurationMs, continueLatch, FRAME_ITERATIONS))
+                    .apply();
+        });
+        // wait for the previous callbacks to finish before moving to the next divisor
+        if (waitForCountDown(continueLatch, /* timeoutInSeconds */ 5L)) {
+            fail("Test not finished in 5 Seconds");
+        }
+    }
+
+    @Test
+    public void testChoreographerNonDivisorRefreshRate() {
+        CountDownLatch continueLatch = new CountDownLatch(1);
+        mScenario.onActivity(activity -> {
+            if (waitForCountDown(mSurfaceCreationCountDown, /* timeoutInSeconds */ 1L)) {
+                fail("Unable to create surface within 1 Second");
+            }
+            SurfaceControl sc = mSurfaceView.getSurfaceControl();
+            Choreographer choreographer = sc.getChoreographer();
+            SurfaceControl.Transaction transaction = new SurfaceControl.Transaction();
+            float displayRefreshRate = activity.getDisplay().getMode().getRefreshRate();
+            float fps = 61.7f; // hopefully not a divisor
+            float expectedFps = displayRefreshRate / Math.round(displayRefreshRate / fps);
+            long callbackDurationMs = Math.round(1000 / expectedFps);
+            mCallbackMissedCounter = 0;
+            transaction.setFrameRate(sc, fps, Surface.FRAME_RATE_COMPATIBILITY_DEFAULT)
+                    .addTransactionCommittedListener(Runnable::run,
+                            () -> verifyVsyncCallbacks(choreographer,
+                                    callbackDurationMs, continueLatch, FRAME_ITERATIONS))
+                    .apply();
+        });
+        // wait for the previous callbacks to finish before moving to the next divisor
+        if (waitForCountDown(continueLatch, /* timeoutInSeconds */ 5L)) {
+            fail("Test not finished in 5 Seconds");
+        }
+    }
+
     private void verifyVsyncCallbacks(Choreographer choreographer, long callbackDurationMs,
             CountDownLatch continueLatch, int frameCount) {
-        long callbackRequestedTimeNs = System.nanoTime();
         choreographer.postVsyncCallback(frameData -> {
+            long expectedPresentTime =
+                    frameData.getPreferredFrameTimeline().getExpectedPresentationTimeNanos();
             if (frameCount > 0) {
-                if (!mIsFirstCallback) {
-                    // Skip the first callback as it takes 1 frame
-                    // to reflect the new refresh rate
-                    long callbackDurationDiffMs = getCallbackDurationDiffInMs(
-                            frameData.getFrameTimeNanos(),
-                            callbackRequestedTimeNs, callbackDurationMs);
-                    if (callbackDurationDiffMs < 0 || callbackDurationDiffMs > THRESHOLD_MS) {
+                if (mExpectedPresentTime > 0) {
+                    long callbackDurationDiffMs =
+                            TimeUnit.NANOSECONDS.toMillis(
+                                    expectedPresentTime - mExpectedPresentTime);
+                    if (callbackDurationDiffMs < 0
+                            || Math.abs(callbackDurationMs - callbackDurationDiffMs)
+                                > THRESHOLD_MS) {
                         mCallbackMissedCounter++;
                         Log.e(TAG, "Frame #" + Math.abs(frameCount - FRAME_ITERATIONS)
                                 + " vsync callback failed, expected callback in "
@@ -427,25 +562,19 @@
                                 + " but actual duration difference is " + callbackDurationDiffMs);
                     }
                 }
-                mIsFirstCallback = false;
+                mExpectedPresentTime = expectedPresentTime;
                 verifyVsyncCallbacks(choreographer, callbackDurationMs,
                         continueLatch, frameCount - 1);
             } else {
-                assertTrue("Missed timeline for " + mCallbackMissedCounter + " callbacks, while "
-                                + CALLBACK_MISSED_THRESHOLD + " missed callbacks are allowed",
+                assertTrue("Missed timeline for " + mCallbackMissedCounter
+                                + " callbacks, while " + CALLBACK_MISSED_THRESHOLD
+                                + " missed callbacks are allowed",
                         mCallbackMissedCounter <= CALLBACK_MISSED_THRESHOLD);
                 continueLatch.countDown();
             }
         });
     }
 
-    private long getCallbackDurationDiffInMs(long callbackTimeNs, long requestedTimeNs,
-            long expectedCallbackMs) {
-        long actualTimeMs = TimeUnit.NANOSECONDS.toMillis(callbackTimeNs)
-                - TimeUnit.NANOSECONDS.toMillis(requestedTimeNs);
-        return Math.abs(expectedCallbackMs - actualTimeMs);
-    }
-
     private boolean waitForCountDown(CountDownLatch countDownLatch, long timeoutInSeconds) {
         try {
             return !countDownLatch.await(timeoutInSeconds, TimeUnit.SECONDS);
diff --git a/tests/CompanionDeviceMultiDeviceTests/OWNERS b/tests/CompanionDeviceMultiDeviceTests/OWNERS
new file mode 100644
index 0000000..7517836
--- /dev/null
+++ b/tests/CompanionDeviceMultiDeviceTests/OWNERS
@@ -0,0 +1,6 @@
+# Bug component: 708992
+evanxinchen@google.com
+guojing@google.com
+jeremyns@google.com
+raphk@google.com
+yukl@google.com
diff --git a/tests/CompanionDeviceMultiDeviceTests/README.md b/tests/CompanionDeviceMultiDeviceTests/README.md
new file mode 100644
index 0000000..6cf735a
--- /dev/null
+++ b/tests/CompanionDeviceMultiDeviceTests/README.md
@@ -0,0 +1,17 @@
+## CDM Multi-device Tests
+
+### Device Setup
+To test on physical devices, connect _two_ devices locally and enable USB debugging setting on both devices.
+
+When running on a cloudtop or other remote setups, use pontis to connect the devices on remote set up by running `pontis start`.
+Verify that pontis client is connected via `pontis status` and confirm that both devices are in "connected" state via `adb devices`.
+
+See go/pontis for more details regarding this workflow.
+
+To test on virtual devices, follow instructions to [set up netsim on cuttlefish](https://g3doc.corp.google.com/ambient/d2di/sim/g3doc/guide/cuttlefish.md?cl=head).
+Launch _two_ instances of virtual devices by specifying `--num_instances=2` parameter.
+
+### Running the Test
+```
+atest CompanionDeviceManagerMultiDeviceTestCases
+```
diff --git a/tests/CompanionDeviceMultiDeviceTests/client/Android.bp b/tests/CompanionDeviceMultiDeviceTests/client/Android.bp
new file mode 100644
index 0000000..1e68c9d
--- /dev/null
+++ b/tests/CompanionDeviceMultiDeviceTests/client/Android.bp
@@ -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 {
+    // 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_test {
+    name: "cdm_snippet",
+    srcs: ["src/**/*.kt"],
+    manifest: "AndroidManifest.xml",
+
+    platform_apis: true,
+    target_sdk_version: "current",
+
+    static_libs: [
+        "androidx.test.ext.junit",
+        "androidx.test.uiautomator_uiautomator",
+        "compatibility-device-util-axt",
+        "cts-companion-common",
+        "cts-companion-uicommon",
+        "kotlin-stdlib",
+        "mobly-snippet-lib",
+    ],
+    libs: [
+        "android.test.base",
+        "android.test.runner",
+    ],
+
+    optimize: {
+        proguard_compatibility: true,
+        proguard_flags_files: ["proguard.flags"],
+    },
+}
diff --git a/tests/CompanionDeviceMultiDeviceTests/client/AndroidManifest.xml b/tests/CompanionDeviceMultiDeviceTests/client/AndroidManifest.xml
new file mode 100644
index 0000000..11dc763
--- /dev/null
+++ b/tests/CompanionDeviceMultiDeviceTests/client/AndroidManifest.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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="android.companion.multidevices">
+
+  <uses-permission android:name="android.permission.INTERNET" />
+  <uses-permission android:name="android.permission.REQUEST_COMPANION_SELF_MANAGED" />
+  <uses-permission android:name="android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE" />
+  <uses-permission android:name="android.permission.REQUEST_COMPANION_PROFILE_WATCH" />
+  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+  <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
+  <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
+  <uses-permission android:name="android.permission.DELIVER_COMPANION_MESSAGES" />
+
+  <uses-feature android:name="android.hardware.bluetooth" android:required="true"/>
+  <uses-feature android:name="android.software.companion_device_setup" />
+
+  <application>
+    <!-- Add any classes that implement the Snippet interface as meta-data, whose
+         value is a comma-separated string, each section being the package path
+         of a snippet class -->
+    <meta-data
+        android:name="mobly-snippets"
+        android:value="android.companion.multidevices.CompanionDeviceManagerSnippet" />
+  </application>
+
+  <!-- Add an instrumentation tag so that the app can be launched through an
+       instrument command. The runner `com.google.android.mobly.snippet.SnippetRunner`
+       is derived from `AndroidJUnitRunner`, and is required to use the
+       Mobly Snippet Lib. -->
+  <instrumentation
+      android:name="com.google.android.mobly.snippet.SnippetRunner"
+      android:targetPackage="android.companion.multidevices" />
+</manifest>
diff --git a/tests/CompanionDeviceMultiDeviceTests/client/proguard.flags b/tests/CompanionDeviceMultiDeviceTests/client/proguard.flags
new file mode 100644
index 0000000..1c70253a
--- /dev/null
+++ b/tests/CompanionDeviceMultiDeviceTests/client/proguard.flags
@@ -0,0 +1,24 @@
+# Keep all companion classes.
+-keep class android.companion.** {
+    *;
+}
+
+# Do not touch Mobly.
+-keep class com.google.android.mobly.** {
+    *;
+}
+
+# Keep names for easy debugging.
+-dontobfuscate
+
+# Necessary to allow debugging.
+-keepattributes *
+
+# By default, proguard leaves all classes in their original package, which
+# needlessly repeats com.google.android.apps.etc.
+-repackageclasses ""
+
+# Allows proguard to make private and protected methods and fields public as
+# part of optimization. This lets proguard inline trivial getter/setter
+# methods.
+-allowaccessmodification
\ No newline at end of file
diff --git a/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/CallbackUtils.kt b/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/CallbackUtils.kt
new file mode 100644
index 0000000..3e4944a
--- /dev/null
+++ b/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/CallbackUtils.kt
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.companion.multidevices
+
+import android.companion.AssociationInfo
+import android.companion.CompanionDeviceManager
+import android.companion.CompanionException
+import android.content.IntentSender
+import android.os.OutcomeReceiver
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit.SECONDS
+import java.util.concurrent.TimeoutException
+
+/** Blocking callbacks for Wi-Fi Aware and Connectivity Manager. */
+object CallbackUtils {
+    private const val TAG = "CDM_CallbackUtils"
+    private const val CALLBACK_TIMEOUT_SEC = 30L
+    private const val MESSAGE_CALLBACK_TIMEOUT_SEC = 5L
+
+    class AssociationCallback : CompanionDeviceManager.Callback() {
+        private val pending = CountDownLatch(1)
+        private val created = CountDownLatch(1)
+
+        private var pendingIntent: IntentSender? = null
+        private var associationInfo: AssociationInfo? = null
+        private var error: String? = null
+
+        override fun onAssociationPending(intentSender: IntentSender) {
+            this.pendingIntent = intentSender
+            pending.countDown()
+        }
+
+        override fun onAssociationCreated(associationInfo: AssociationInfo) {
+            this.associationInfo = associationInfo
+            created.countDown()
+        }
+
+        override fun onFailure(error: CharSequence?) {
+            this.error = error?.toString() ?: "There was an unexpected failure."
+            pending.countDown()
+            created.countDown()
+        }
+
+        fun waitForPendingIntent(): IntentSender? {
+            if (!pending.await(CALLBACK_TIMEOUT_SEC, SECONDS)) {
+                throw TimeoutException("Pending association request timed out.")
+            }
+
+            error?.let {
+                throw CompanionException(it)
+            }
+
+            return pendingIntent
+        }
+
+        fun waitForAssociation(): AssociationInfo? {
+            if (!created.await(CALLBACK_TIMEOUT_SEC, SECONDS)) {
+                throw TimeoutException("Association request timed out.")
+            }
+
+            error?.let {
+                throw CompanionException(it)
+            }
+
+            return associationInfo
+        }
+    }
+
+    class SystemDataTransferCallback : OutcomeReceiver<Void, CompanionException> {
+        private val completed = CountDownLatch(1)
+
+        private var error: CompanionException? = null
+
+        override fun onResult(result: Void?) {
+            completed.countDown()
+        }
+
+        override fun onError(error: CompanionException) {
+            this.error = error
+            completed.countDown()
+        }
+
+        fun waitForCompletion() {
+            if (!completed.await(CALLBACK_TIMEOUT_SEC, SECONDS)) {
+                throw TimeoutException("System data transfer timed out.")
+            }
+
+            error?.let {
+                throw it
+            }
+        }
+    }
+}
diff --git a/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/CompanionDeviceManagerSnippet.kt b/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/CompanionDeviceManagerSnippet.kt
new file mode 100644
index 0000000..ee587f5
--- /dev/null
+++ b/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/CompanionDeviceManagerSnippet.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 android.companion.multidevices
+
+import android.app.Instrumentation
+import android.bluetooth.BluetoothAdapter
+import android.bluetooth.BluetoothManager
+import android.companion.AssociationInfo
+import android.companion.AssociationRequest
+import android.companion.BluetoothDeviceFilter
+import android.companion.CompanionDeviceManager
+import android.companion.CompanionException
+import android.companion.cts.common.CompanionActivity
+import android.companion.multidevices.CallbackUtils.AssociationCallback
+import android.companion.multidevices.CallbackUtils.SystemDataTransferCallback
+import android.companion.multidevices.bluetooth.BluetoothConnector
+import android.companion.multidevices.bluetooth.BluetoothController
+import android.companion.cts.uicommon.CompanionDeviceManagerUi
+import android.content.Context
+import android.os.Handler
+import android.os.HandlerExecutor
+import android.os.HandlerThread
+import android.util.Log
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.uiautomator.UiDevice
+import com.google.android.mobly.snippet.Snippet
+import com.google.android.mobly.snippet.event.EventCache
+import com.google.android.mobly.snippet.rpc.Rpc
+import java.util.concurrent.Executor
+import java.util.regex.Pattern
+
+/**
+ * Snippet class that exposes Android APIs in CompanionDeviceManager.
+ */
+class CompanionDeviceManagerSnippet : Snippet {
+    private val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation()!!
+    private val context: Context = instrumentation.targetContext
+
+    private val btAdapter: BluetoothAdapter by lazy {
+        (context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager).adapter
+    }
+    private val companionDeviceManager: CompanionDeviceManager by lazy {
+        context.getSystemService(Context.COMPANION_DEVICE_SERVICE) as CompanionDeviceManager
+    }
+    private val btConnector: BluetoothConnector by lazy {
+        BluetoothConnector(btAdapter, companionDeviceManager)
+    }
+
+    private val uiDevice by lazy { UiDevice.getInstance(instrumentation) }
+    private val confirmationUi by lazy { CompanionDeviceManagerUi(uiDevice) }
+    private val btController by lazy { BluetoothController(context, btAdapter, uiDevice) }
+
+    private val eventCache = EventCache.getInstance()
+    private val handlerThread = HandlerThread("Snippet-Aware")
+    private val handler: Handler
+    private val executor: Executor
+
+    init {
+        handlerThread.start()
+        handler = Handler(handlerThread.looper)
+        executor = HandlerExecutor(handler)
+    }
+
+    /**
+     * Make device discoverable to other devices via BLE and return device name.
+     */
+    @Rpc(description = "Start advertising device to be discoverable.")
+    fun becomeDiscoverable(): String {
+        btController.becomeDiscoverable()
+        return btAdapter.name
+    }
+
+    /**
+     * Associate with a nearby device with given name and return newly-created association ID.
+     */
+    @Rpc(description = "Start device association flow.")
+    @Throws(Exception::class)
+    fun associate(deviceName: String): Int {
+        val filter = BluetoothDeviceFilter.Builder()
+            .setNamePattern(Pattern.compile(deviceName))
+            .build()
+        val request = AssociationRequest.Builder()
+            .setSingleDevice(true)
+            .addDeviceFilter(filter)
+            .build()
+        val callback = AssociationCallback()
+        companionDeviceManager.associate(request, callback, handler)
+        val pendingConfirmation = callback.waitForPendingIntent()
+            ?: throw CompanionException("Association is pending but intent sender is null.")
+        CompanionActivity.launchAndWait(context)
+        CompanionActivity.startIntentSender(pendingConfirmation)
+        confirmationUi.waitUntilVisible()
+        confirmationUi.waitUntilPositiveButtonIsEnabledAndClick()
+        confirmationUi.waitUntilGone()
+
+        val (_, result) = CompanionActivity.waitForActivityResult()
+        if (result == null) {
+            throw CompanionException("Association result can't be null.")
+        }
+
+        val association = result.getParcelableExtra(
+            CompanionDeviceManager.EXTRA_ASSOCIATION,
+            AssociationInfo::class.java
+        )
+        val remoteDevice = association.associatedDevice?.getBluetoothDevice()!!
+
+        // Register associated device
+        btConnector.registerDevice(association.id, remoteDevice)
+
+        return association.id
+    }
+
+    /**
+     * Disassociate an association with given ID.
+     */
+    @Rpc(description = "Disassociate device.")
+    @Throws(Exception::class)
+    fun disassociate(associationId: Int) {
+        companionDeviceManager.disassociate(associationId)
+    }
+
+    /**
+     * Consent to system data transfer and carry it out using Bluetooth socket.
+     */
+    @Rpc(description = "Start permissions sync.")
+    fun startPermissionsSync(associationId: Int) {
+        val pendingIntent = companionDeviceManager
+            .buildPermissionTransferUserConsentIntent(associationId)
+        CompanionActivity.launchAndWait(context)
+        CompanionActivity.startIntentSender(pendingIntent)
+        confirmationUi.waitUntilSystemDataTransferConfirmationVisible()
+        confirmationUi.clickPositiveButton()
+        confirmationUi.waitUntilGone()
+
+        CompanionActivity.waitForActivityResult()
+
+        val callback = SystemDataTransferCallback()
+        companionDeviceManager.startSystemDataTransfer(associationId, executor, callback)
+        callback.waitForCompletion()
+    }
+
+    @Rpc(description = "Attach transport to the BT client socket.")
+    fun attachClientSocket(id: Int) {
+        btConnector.attachClientSocket(id)
+    }
+
+    @Rpc(description = "Attach transport to the BT server socket.")
+    fun attachServerSocket(id: Int) {
+        btConnector.attachServerSocket(id)
+    }
+
+    @Rpc(description = "Close all open sockets.")
+    fun closeAllSockets() {
+        // Close all open sockets
+        btConnector.closeAllSockets()
+    }
+
+    @Rpc(description = "Disassociate all associations.")
+    fun disassociateAll() {
+        companionDeviceManager.myAssociations.forEach {
+            Log.d(TAG, "Disassociating id=${it.id}.")
+            companionDeviceManager.disassociate(it.id)
+        }
+    }
+
+    companion object {
+        private const val TAG = "CDM_CompanionDeviceManagerSnippet"
+    }
+}
diff --git a/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/bluetooth/BluetoothConnector.kt b/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/bluetooth/BluetoothConnector.kt
new file mode 100644
index 0000000..c7312d2
--- /dev/null
+++ b/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/bluetooth/BluetoothConnector.kt
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.companion.multidevices.bluetooth
+
+import android.bluetooth.BluetoothAdapter
+import android.bluetooth.BluetoothDevice
+import android.bluetooth.BluetoothServerSocket
+import android.bluetooth.BluetoothSocket
+import android.companion.CompanionDeviceManager
+import android.util.Log
+import java.io.IOException
+import java.util.UUID
+
+class BluetoothConnector(
+    private val adapter: BluetoothAdapter,
+    private val cdm: CompanionDeviceManager
+) {
+    companion object {
+        private const val TAG = "CDM_BluetoothServer"
+
+        private val SERVICE_NAME = "CDM_BluetoothChannel"
+        private val SERVICE_UUID = UUID.fromString("435fe1d9-56c5-455d-a516-d5e6b22c52f9")
+
+        // Registry of bluetooth server threads
+        private val serverThreads = mutableMapOf<Int, BluetoothServerThread>()
+
+        // Registry of remote bluetooth devices
+        private val remoteDevices = mutableMapOf<Int, BluetoothDevice>()
+
+        // Set of connected client sockets
+        private val clientSockets = mutableMapOf<Int, BluetoothSocket>()
+    }
+
+    fun attachClientSocket(associationId: Int) {
+        try {
+            val device = remoteDevices[associationId]!!
+            val socket = device.createRfcommSocketToServiceRecord(SERVICE_UUID)
+            if (clientSockets.containsKey(associationId)) {
+                detachClientSocket(associationId)
+                clientSockets[associationId] = socket
+            } else {
+                clientSockets += associationId to socket
+            }
+
+            socket.connect()
+            Log.d(TAG, "Attaching client socket $socket.")
+            cdm.attachSystemDataTransport(
+                    associationId,
+                    socket.inputStream,
+                    socket.outputStream
+            )
+        } catch (e: IOException) {
+            Log.e(TAG, "Failed to attach client socket.", e)
+            throw RuntimeException(e)
+        }
+    }
+
+    fun attachServerSocket(associationId: Int) {
+        val serverThread: BluetoothServerThread
+        if (serverThreads.containsKey(associationId)) {
+            serverThread = serverThreads[associationId]!!
+        } else {
+            serverThread = BluetoothServerThread(associationId)
+            serverThreads += associationId to serverThread
+        }
+
+        // Start thread
+        if (!serverThread.isOpen) {
+            serverThread.start()
+        }
+    }
+
+    fun closeAllSockets() {
+        val iter = clientSockets.keys.iterator()
+        while (iter.hasNext()) {
+            detachClientSocket(iter.next())
+        }
+        for (thread in serverThreads.values) {
+            thread.shutdown()
+        }
+        serverThreads.clear()
+    }
+
+    fun registerDevice(associationId: Int, remoteDevice: BluetoothDevice) {
+        remoteDevices[associationId] = remoteDevice
+    }
+
+    private fun detachClientSocket(associationId: Int) {
+        try {
+            Log.d(TAG, "Detaching client socket.")
+            cdm.detachSystemDataTransport(associationId)
+            clientSockets[associationId]?.close()
+        } catch (e: IOException) {
+            Log.e(TAG, "Failed to detach client socket.", e)
+            throw RuntimeException(e)
+        }
+    }
+
+    inner class BluetoothServerThread(
+        private val associationId: Int
+    ) : Thread() {
+        private lateinit var mServerSocket: BluetoothServerSocket
+
+        var isOpen = false
+
+        override fun run() {
+            try {
+                Log.d(TAG, "Listening for remote connections...")
+                mServerSocket = adapter.listenUsingRfcommWithServiceRecord(
+                        SERVICE_NAME,
+                        SERVICE_UUID
+                )
+                isOpen = true
+                do {
+                    val socket = mServerSocket.accept()
+                    Log.d(TAG, "Attaching server socket $socket.")
+                    cdm.attachSystemDataTransport(
+                            associationId,
+                            socket.inputStream,
+                            socket.outputStream
+                    )
+                } while (isOpen)
+            } catch (e: IOException) {
+                throw RuntimeException(e)
+            }
+        }
+
+        fun shutdown() {
+            if (!isOpen || !this::mServerSocket.isInitialized) return
+
+            try {
+                Log.d(TAG, "Closing server socket.")
+                cdm.detachSystemDataTransport(associationId)
+                mServerSocket.close()
+                isOpen = false
+            } catch (e: IOException) {
+                throw RuntimeException(e)
+            }
+        }
+    }
+}
diff --git a/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/bluetooth/BluetoothController.kt b/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/bluetooth/BluetoothController.kt
new file mode 100644
index 0000000..c4d2026
--- /dev/null
+++ b/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/bluetooth/BluetoothController.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 android.companion.multidevices.bluetooth
+
+import android.bluetooth.BluetoothAdapter
+import android.bluetooth.BluetoothDevice
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import android.os.SystemClock
+import android.util.Log
+import androidx.test.uiautomator.UiDevice
+import java.util.concurrent.TimeoutException
+import kotlin.time.Duration
+import kotlin.time.Duration.Companion.seconds
+
+/** Controls the local Bluetooth adapter for testing. */
+class BluetoothController(
+    private val context: Context,
+    private val adapter: BluetoothAdapter,
+    private val ui: UiDevice
+) {
+    companion object {
+        private const val TAG = "CDM_BluetoothController"
+    }
+
+    private val bluetoothUi by lazy { BluetoothUi(ui) }
+
+    init {
+        Log.d(TAG, "Registering pairing listener.")
+        context.registerReceiver(
+            PairingBroadcastReceiver(),
+            IntentFilter(BluetoothDevice.ACTION_PAIRING_REQUEST)
+        )
+    }
+
+    val isEnabled: Boolean
+        get() = adapter.isEnabled
+
+    /** Turns on the local Bluetooth adapter */
+    fun enableBluetooth() {
+        if (isEnabled) return
+
+        val intent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
+        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
+        context.startActivity(intent)
+        bluetoothUi.clickAllowButton()
+        waitFor { adapter.state == BluetoothAdapter.STATE_ON }
+    }
+
+    /** Become discoverable for specified duration */
+    fun becomeDiscoverable(duration: Duration = 15.seconds) {
+        enableBluetooth()
+
+        val intent = Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE)
+        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
+        intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, duration.inWholeSeconds)
+        context.startActivity(intent)
+        bluetoothUi.clickAllowButton()
+    }
+
+    /** Unpair all devices for cleanup */
+    fun unpairAllDevices() {
+        for (device in adapter.bondedDevices) {
+            Log.d(TAG, "Unpairing $device.")
+            if (!device.removeBond()) continue
+            waitFor { device.bondState == BluetoothDevice.BOND_NONE }
+        }
+    }
+
+    private fun waitFor(
+        interval: Duration = 1.seconds,
+        timeout: Duration = 5.seconds,
+        condition: () -> Boolean
+    ) {
+        var elapsed = 0L
+        while (elapsed < timeout.inWholeMilliseconds) {
+            if (condition.invoke()) return
+            SystemClock.sleep(interval.inWholeMilliseconds)
+            elapsed += interval.inWholeMilliseconds
+        }
+        throw TimeoutException("Bluetooth did not become an expected state.")
+    }
+
+    inner class PairingBroadcastReceiver : BroadcastReceiver() {
+        override fun onReceive(context: Context, intent: Intent) {
+            Log.d(TAG, "Received broadcast for ${intent.action}")
+
+            // onReceive() somehow blocks pairing prompt from launching
+            Thread { bluetoothUi.confirmPairingRequest() }.start()
+            context.unregisterReceiver(this)
+        }
+    }
+}
diff --git a/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/bluetooth/BluetoothUi.kt b/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/bluetooth/BluetoothUi.kt
new file mode 100644
index 0000000..6983cb0
--- /dev/null
+++ b/tests/CompanionDeviceMultiDeviceTests/client/src/android/companion/multidevices/bluetooth/BluetoothUi.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 android.companion.multidevices.bluetooth
+
+import android.companion.cts.uicommon.CompanionDeviceManagerUi
+import android.util.Log
+import androidx.test.uiautomator.By
+import androidx.test.uiautomator.UiDevice
+import androidx.test.uiautomator.Until
+import java.util.regex.Pattern
+
+class BluetoothUi(private val ui: UiDevice) : CompanionDeviceManagerUi(ui) {
+    fun clickAllowButton() = click(ALLOW_BUTTON, "Allow button")
+
+    fun confirmPairingRequest(): Boolean {
+        if (ui.hasObject(PAIRING_PIN_ENTRY)) {
+            // It is prompting for a custom user pin entry
+            Log.d(TAG, "Is user entry prompt.")
+            ui.findObject(PAIRING_PIN_ENTRY).text = "0000"
+            click(OK_BUTTON, "Ok button")
+        } else {
+            // It just needs user consent
+            Log.d(TAG, "Looking for pair button.")
+            val button = ui.wait(Until.findObject(PAIR_BUTTON), 1_000)
+            if (button != null) {
+                Log.d(TAG, "Pair button found.")
+                button.click()
+                return true
+            }
+            Log.d(TAG, "Pair button not found.")
+        }
+        return false
+    }
+
+    companion object {
+        private const val TAG = "CDM_BluetoothUi"
+
+        private val ALLOW_TEXT_PATTERN = caseInsensitive("allow")
+        private val ALLOW_BUTTON = By.text(ALLOW_TEXT_PATTERN).clickable(true)
+
+        private val PAIRING_PIN_ENTRY = By.clazz(".EditText")
+
+        private val OK_TEXT_PATTERN = caseInsensitive("ok")
+        private val OK_BUTTON = By.text(OK_TEXT_PATTERN).clickable(true)
+
+        private val PAIR_TEXT_PATTERN = caseInsensitive("pair")
+        private val PAIR_BUTTON = By.text(PAIR_TEXT_PATTERN).clickable(true)
+
+        private fun caseInsensitive(text: String): Pattern =
+            Pattern.compile(text, Pattern.CASE_INSENSITIVE)
+    }
+}
diff --git a/tests/CompanionDeviceMultiDeviceTests/host/Android.bp b/tests/CompanionDeviceMultiDeviceTests/host/Android.bp
new file mode 100644
index 0000000..03335c7
--- /dev/null
+++ b/tests/CompanionDeviceMultiDeviceTests/host/Android.bp
@@ -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 {
+    // 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"],
+}
+
+python_test_host {
+    name: "CompanionDeviceManagerMultiDeviceTestCases",
+    main: "cdm_transport_test.py",
+    srcs: ["*.py"],
+    libs: [
+        "mobly",
+    ],
+    test_suites: [
+        "general-tests",
+    ],
+    test_options: {
+        unit_test: false,
+        tags: ["mobly"],
+    },
+    data: [
+        ":cdm_snippet",
+    ],
+    version: {
+        py2: {
+            enabled: false,
+        },
+        py3: {
+            enabled: true,
+            embedded_launcher: true,
+        },
+    },
+}
diff --git a/tests/CompanionDeviceMultiDeviceTests/host/AndroidTest.xml b/tests/CompanionDeviceMultiDeviceTests/host/AndroidTest.xml
new file mode 100644
index 0000000..9d1813f
--- /dev/null
+++ b/tests/CompanionDeviceMultiDeviceTests/host/AndroidTest.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+          http://www.apache.org/licenses/LICENSE-2.0
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<configuration description="Config for CDM multi-device test cases">
+    <option name="test-tag" value="CompanionDeviceMultiDeviceTests" />
+    <option name="config-descriptor:metadata" key="component" value="framework" />
+    <option name="config-descriptor:metadata" key="parameter" value="not_instant_app" />
+    <option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
+    <option name="config-descriptor:metadata" key="parameter" value="secondary_user" />
+
+    <object class="com.android.tradefed.testtype.suite.module.DeviceFeatureModuleController"
+        type="module_controller">
+        <option name="required-feature" value="android.software.companion_device_setup" />
+    </object>
+
+    <device name="device1">
+        <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+            <option name="test-file-name" value="cdm_snippet.apk" />
+        </target_preparer>
+    </device>
+    <device name="device2">
+        <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+            <option name="test-file-name" value="cdm_snippet.apk" />
+        </target_preparer>
+    </device>
+
+    <test class="com.android.tradefed.testtype.mobly.MoblyBinaryHostTest">
+      <!-- The mobly-par-file-name should match the module name -->
+      <option name="mobly-par-file-name" value="CompanionDeviceManagerMultiDeviceTestCases" />
+      <!-- Timeout limit in milliseconds for all test cases of the python binary -->
+      <option name="mobly-test-timeout" value="60000" />
+    </test>
+</configuration>
diff --git a/tests/CompanionDeviceMultiDeviceTests/host/cdm_base_test.py b/tests/CompanionDeviceMultiDeviceTests/host/cdm_base_test.py
new file mode 100644
index 0000000..bb10658
--- /dev/null
+++ b/tests/CompanionDeviceMultiDeviceTests/host/cdm_base_test.py
@@ -0,0 +1,63 @@
+# Lint as: python3
+"""
+Base class for setting up devices for CDM functionalities.
+"""
+
+from mobly import base_test
+from mobly import utils
+from mobly.controllers import android_device
+
+CDM_SNIPPET_PACKAGE = 'android.companion.multidevices'
+
+
+class BaseTestClass(base_test.BaseTestClass):
+
+    def setup_class(self):
+        # Declare that two Android devices are needed.
+        self.sender, self.receiver = self.register_controller(
+            android_device, min_number=2)
+        self.sender_id = None
+        self.receiver_id = None
+
+        def _setup_device(device):
+            device.load_snippet('cdm', CDM_SNIPPET_PACKAGE)
+            device.adb.shell('input keyevent KEYCODE_WAKEUP')
+            device.adb.shell('input keyevent KEYCODE_MENU')
+            device.adb.shell('input keyevent KEYCODE_HOME')
+
+            # Clean up existing associations
+            device.cdm.disassociateAll()
+
+        # Sets up devices in parallel to save time.
+        utils.concurrent_exec(
+            _setup_device,
+            ((self.sender,), (self.receiver,)),
+            max_workers=2,
+            raise_on_exception=True)
+
+    def associate_devices(self) -> tuple[int, int]:
+        """Associate devices with each other and return association IDs for both"""
+        # If association already exists, don't need another
+        if self.sender_id and self.receiver_id:
+            return (self.sender_id, self.receiver_id)
+
+        receiver_name = self.receiver.cdm.becomeDiscoverable()
+        self.receiver_id = self.sender.cdm.associate(receiver_name)
+
+        sender_name = self.sender.cdm.becomeDiscoverable()
+        self.sender_id = self.receiver.cdm.associate(sender_name)
+
+        return (self.sender_id, self.receiver_id)
+
+    def attach_transports(self):
+        """Attach transports to both devices"""
+        self.associate_devices()
+
+        self.receiver.cdm.attachServerSocket(self.sender_id)
+        self.sender.cdm.attachClientSocket(self.receiver_id)
+
+    def teardown_class(self):
+        """Clean up the opened sockets"""
+        self.sender.cdm.closeAllSockets()
+        self.receiver.cdm.closeAllSockets()
+
diff --git a/tests/CompanionDeviceMultiDeviceTests/host/cdm_transport_test.py b/tests/CompanionDeviceMultiDeviceTests/host/cdm_transport_test.py
new file mode 100644
index 0000000..5516c0f
--- /dev/null
+++ b/tests/CompanionDeviceMultiDeviceTests/host/cdm_transport_test.py
@@ -0,0 +1,28 @@
+# Lint as: python3
+"""
+Test E2E CDM functions on mobly.
+"""
+
+import cdm_base_test
+import sys
+
+from mobly import asserts
+from mobly import test_runner
+
+CDM_SNIPPET_PACKAGE = 'android.companion.multidevices'
+
+
+class TransportTestClass(cdm_base_test.BaseTestClass):
+
+    def test_permissions_sync(self):
+        """This tests permissions sync from one device to another."""
+
+        # associate and attach transports
+        self.attach_transports()
+
+        # start permissions sync
+        self.sender.cdm.startPermissionsSync(self.receiver_id)
+
+
+if __name__ == '__main__':
+    test_runner.main()
\ No newline at end of file
diff --git a/tests/EnforcePermission/aidl/android/tests/enforcepermission/IProtected.aidl b/tests/EnforcePermission/aidl/android/tests/enforcepermission/IProtected.aidl
index 18e3aec..6e59b04 100644
--- a/tests/EnforcePermission/aidl/android/tests/enforcepermission/IProtected.aidl
+++ b/tests/EnforcePermission/aidl/android/tests/enforcepermission/IProtected.aidl
@@ -31,4 +31,31 @@
 
     @EnforcePermission("INTERNET")
     void ProtectedByInternetAndReadSyncSettingsImplicitly();
+
+    @EnforcePermission("TURN_SCREEN_ON")
+    void ProtectedByTurnScreenOn();
+
+    @EnforcePermission("READ_CONTACTS")
+    void ProtectedByReadContacts();
+
+    @EnforcePermission("READ_CALENDAR")
+    void ProtectedByReadCalendar();
+
+    @EnforcePermission(allOf={"INTERNET", "VIBRATE"})
+    void ProtectedByInternetAndVibrate();
+
+    @EnforcePermission(allOf={"INTERNET", "READ_SYNC_SETTINGS"})
+    void ProtectedByInternetAndReadSyncSettings();
+
+    @EnforcePermission(anyOf={"ACCESS_WIFI_STATE", "VIBRATE"})
+    void ProtectedByAccessWifiStateOrVibrate();
+
+    @EnforcePermission(anyOf={"INTERNET", "VIBRATE"})
+    void ProtectedByInternetOrVibrate();
+
+    @RequiresNoPermission
+    void NotProtected();
+
+    @PermissionManuallyEnforced
+    void ManuallyProtected();
 }
diff --git a/tests/EnforcePermission/perf-app/Android.bp b/tests/EnforcePermission/perf-app/Android.bp
new file mode 100644
index 0000000..b494bb7
--- /dev/null
+++ b/tests/EnforcePermission/perf-app/Android.bp
@@ -0,0 +1,45 @@
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package {
+    default_applicable_licenses: ["frameworks_base_license"],
+}
+
+android_test {
+    name: "EnforcePermissionPerfTests",
+    srcs: [
+        "src/**/*.java",
+        ":frameworks-enforce-permission-test-aidl",
+    ],
+    static_libs: [
+        "EnforcePermissionTestLib",
+        "androidx.benchmark_benchmark-common",
+        "androidx.benchmark_benchmark-junit4",
+        "apct-perftests-utils",
+        "collector-device-lib",
+        "androidx.test.rules",
+    ],
+    libs: [
+        "android.test.base",
+        "android.test.runner",
+    ],
+    data: [
+        ":EnforcePermissionTestHelper",
+        ":perfetto_artifacts",
+        "perfetto.textproto",
+    ],
+    platform_apis: true,
+    certificate: "platform",
+    test_suites: ["device-tests"],
+}
diff --git a/tests/EnforcePermission/perf-app/AndroidManifest.xml b/tests/EnforcePermission/perf-app/AndroidManifest.xml
new file mode 100644
index 0000000..900270d
--- /dev/null
+++ b/tests/EnforcePermission/perf-app/AndroidManifest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+  package="android.tests.enforcepermission.tests">
+
+    <uses-permission android:name="android.permission.INTERNET" />
+
+    <!-- Required by perfetto -->
+    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+
+    <queries>
+        <package android:name="android.tests.enforcepermission.service" />
+    </queries>
+
+    <application>
+      <uses-library android:name="android.test.runner" />
+      <profileable android:shell="true" />
+      <!-- Instance of the Service within the app. This is to test performance for same-process calls. -->
+      <service android:name=".TestService" />
+    </application>
+    <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner"
+                     android:targetPackage="android.tests.enforcepermission.tests"/>
+</manifest>
diff --git a/tests/EnforcePermission/perf-app/AndroidTest.xml b/tests/EnforcePermission/perf-app/AndroidTest.xml
new file mode 100644
index 0000000..3bc1d2d
--- /dev/null
+++ b/tests/EnforcePermission/perf-app/AndroidTest.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<configuration description="Runs EnforcePermission Perf Tests">
+
+    <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"/>
+    <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
+        <option name="push-file" key="perfetto.textproto" value="/data/misc/perfetto-traces/trace_config.textproto" />
+    </target_preparer>
+    <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
+      <option name="test-file-name" value="EnforcePermissionTestHelper.apk"/>
+      <option name="test-file-name" value="EnforcePermissionPerfTests.apk"/>
+      <option name="cleanup-apks" value="true" />
+    </target_preparer>
+
+    <option name="isolated-storage" value="false" />
+
+    <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
+        <option name="pull-pattern-keys" value="perfetto_file_path" />
+        <option name="collect-on-run-ended-only" value="false" />
+    </metrics_collector>
+
+    <option name="test-tag" value="EnforcePermissionTests"/>
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest">
+        <option name="package" value="android.tests.enforcepermission.tests"/>
+        <option name="device-listeners" value="android.device.collectors.PerfettoListener" />
+        <!-- PerfettoListener related arguments -->
+        <option name="instrumentation-arg" key="perfetto_config_text_proto" value="true" />
+        <option name="instrumentation-arg" key="perfetto_config_file" value="trace_config.textproto" />
+    </test>
+</configuration>
diff --git a/tests/EnforcePermission/perf-app/perfetto.textproto b/tests/EnforcePermission/perf-app/perfetto.textproto
new file mode 100644
index 0000000..8a3eea4
--- /dev/null
+++ b/tests/EnforcePermission/perf-app/perfetto.textproto
@@ -0,0 +1,154 @@
+# Copyright (C) 2023 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Based on trace_config_detailed.textproto
+# proto-message: TraceConfig
+
+# Enable periodic flushing of the trace buffer into the output file.
+write_into_file: true
+
+# Writes the userspace buffer into the file every 1s.
+file_write_period_ms: 1000
+
+# See b/126487238 - we need to guarantee ordering of events.
+flush_period_ms: 10000
+
+# The trace buffers needs to be big enough to hold |file_write_period_ms| of
+# trace data. The trace buffer sizing depends on the number of trace categories
+# enabled and the device activity.
+
+# RSS events
+buffers {
+  size_kb: 32768
+  fill_policy: RING_BUFFER
+}
+
+# procfs polling
+buffers {
+  size_kb: 8192
+  fill_policy: RING_BUFFER
+}
+
+# perf memory
+buffers {
+  size_kb: 65536
+  fill_policy: RING_BUFFER
+}
+
+data_sources {
+  config {
+    name: "linux.ftrace"
+    target_buffer: 0
+    ftrace_config {
+      throttle_rss_stat: true
+      # These parameters affect only the kernel trace buffer size and how
+      # frequently it gets moved into the userspace buffer defined above.
+      buffer_size_kb: 16384
+      drain_period_ms: 250
+
+      # Store certain high-volume "sched" ftrace events in a denser format
+      # (falling back to the default format if not supported by the tracer).
+      compact_sched {
+        enabled: true
+      }
+
+      # Enables symbol name resolution against /proc/kallsyms
+      symbolize_ksyms: true
+      # Parse kallsyms before acknowledging that the ftrace data source has been started. In
+      # combination with "perfetto --background-wait" as the consumer, it lets us defer the
+      # test we're tracing until after the cpu has quieted down from the cpu-bound kallsyms parsing.
+      initialize_ksyms_synchronously_for_testing: true
+      # Avoid re-parsing kallsyms on every test run, as it takes 200-500ms per run. See b/239951079
+      ksyms_mem_policy: KSYMS_RETAIN
+
+      # We need to do process tracking to ensure kernel ftrace events targeted at short-lived
+      # threads are associated correctly
+      ftrace_events: "task/task_newtask"
+      ftrace_events: "task/task_rename"
+      ftrace_events: "sched/sched_process_exit"
+      ftrace_events: "sched/sched_process_free"
+
+      # Memory events
+      ftrace_events: "rss_stat"
+      ftrace_events: "ion_heap_shrink"
+      ftrace_events: "ion_heap_grow"
+      ftrace_events: "ion/ion_stat"
+      ftrace_events: "dmabuf_heap/dma_heap_stat"
+      ftrace_events: "oom_score_adj_update"
+      ftrace_events: "gpu_mem/gpu_mem_total"
+      ftrace_events: "fastrpc/fastrpc_dma_stat"
+
+      # Power events
+      ftrace_events: "power/suspend_resume"
+      ftrace_events: "power/cpu_frequency"
+      ftrace_events: "power/cpu_idle"
+      ftrace_events: "power/gpu_frequency"
+
+      # Old (kernel) LMK
+      ftrace_events: "lowmemorykiller/lowmemory_kill"
+
+      atrace_apps: "*"
+
+      atrace_categories: "am"
+      atrace_categories: "aidl"
+      atrace_categories: "bionic"
+      atrace_categories: "camera"
+      atrace_categories: "wm"
+      atrace_categories: "dalvik"
+      atrace_categories: "sched"
+      atrace_categories: "freq"
+      atrace_categories: "gfx"
+      atrace_categories: "view"
+      atrace_categories: "webview"
+      atrace_categories: "input"
+      atrace_categories: "hal"
+      atrace_categories: "binder_driver"
+      atrace_categories: "sync"
+      atrace_categories: "workq"
+      atrace_categories: "res"
+      atrace_categories: "power"
+
+    }
+  }
+}
+
+data_sources {
+  config {
+    name: "linux.process_stats"
+    target_buffer: 1
+    process_stats_config {
+      proc_stats_poll_ms: 10000
+    }
+  }
+}
+
+data_sources {
+  config {
+    name: "linux.perf"
+    target_buffer: 2
+    perf_event_config {
+      timebase {
+        frequency: 80
+      }
+      callstack_sampling {
+        scope {
+          target_cmdline: "android.tests.enforcepermission.tests"
+          target_cmdline: "android.tests.enforcepermission.service"
+          target_cmdline: "system_server"
+        }
+        kernel_frames: true
+      }
+    }
+  }
+}
diff --git a/tests/EnforcePermission/perf-app/src/android/tests/enforcepermission/tests/ServicePerfTest.java b/tests/EnforcePermission/perf-app/src/android/tests/enforcepermission/tests/ServicePerfTest.java
new file mode 100644
index 0000000..7cbf567
--- /dev/null
+++ b/tests/EnforcePermission/perf-app/src/android/tests/enforcepermission/tests/ServicePerfTest.java
@@ -0,0 +1,169 @@
+/**
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.tests.enforcepermission.tests;
+
+import static org.junit.Assert.assertTrue;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+import android.perftests.utils.BenchmarkState;
+import android.perftests.utils.PerfStatusReporter;
+import android.tests.enforcepermission.IProtected;
+import android.util.Log;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/** Performance tests for EnforcePermission annotation.
+ *
+ * Permission check results are cached on the service side as it relies on
+ * PermissionManager. It means that only the first request will trigger a
+ * lookup to system_server. Subsequent requests will use the cached result. As
+ * this timing is similar to a permission check for a service hosted in
+ * system_server, we keep this cache active for the tests. The BenchmarkState
+ * used by PerfStatusReporter includes a warm-up stage. It means that the extra
+ * time taken by the first request will not be reflected in the outcome of the
+ * test.
+ */
+@RunWith(AndroidJUnit4.class)
+public class ServicePerfTest {
+
+    private static final String TAG = "EnforcePermission.PerfTests";
+    private static final String SERVICE_PACKAGE = "android.tests.enforcepermission.service";
+    private static final String LOCAL_SERVICE_PACKAGE = "android.tests.enforcepermission.tests";
+    private static final int SERVICE_TIMEOUT_SEC = 5;
+
+    @Rule public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();
+
+    private Context mContext;
+    private volatile ServiceConnection mServiceConnection;
+
+    private void bindService(Intent intent) throws Exception {
+        mContext = InstrumentationRegistry.getTargetContext();
+        mServiceConnection = new ServiceConnection();
+        assertTrue(mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE));
+    }
+
+    public void bindRemoteService() throws Exception {
+        Log.d(TAG, "bindRemoteService");
+        Intent intent = new Intent();
+        intent.setClassName(SERVICE_PACKAGE, SERVICE_PACKAGE + ".TestService");
+        bindService(intent);
+    }
+
+    public void bindLocalService() throws Exception {
+        Log.d(TAG, "bindLocalService");
+        Intent intent = new Intent();
+        intent.setClassName(LOCAL_SERVICE_PACKAGE, SERVICE_PACKAGE + ".TestService");
+        bindService(intent);
+    }
+
+    @After
+    public void unbindTestService() throws Exception {
+        mContext.unbindService(mServiceConnection);
+    }
+
+    private static final class ServiceConnection implements android.content.ServiceConnection {
+        private volatile CompletableFuture<IProtected> mFuture = new CompletableFuture<>();
+
+        @Override
+        public void onServiceConnected(ComponentName className, IBinder service) {
+            mFuture.complete(IProtected.Stub.asInterface(service));
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName className) {
+            mFuture = new CompletableFuture<>();
+        }
+
+        public IProtected get() {
+            try {
+                return mFuture.get(SERVICE_TIMEOUT_SEC, TimeUnit.SECONDS);
+            } catch (ExecutionException | InterruptedException | TimeoutException e) {
+                throw new RuntimeException("Unable to reach TestService: " + e.toString());
+            }
+        }
+    }
+
+    @Test
+    public void testAnnotatedPermission() throws Exception {
+        bindRemoteService();
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            mServiceConnection.get().ProtectedByInternet();
+        }
+    }
+
+    @Test
+    public void testNoPermission() throws Exception {
+        bindRemoteService();
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            mServiceConnection.get().NotProtected();
+        }
+    }
+
+    @Test
+    public void testManuallyProtected() throws Exception {
+        bindRemoteService();
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            mServiceConnection.get().ManuallyProtected();
+        }
+    }
+
+    @Test
+    public void testAnnotatedPermissionLocal()
+            throws Exception {
+        bindLocalService();
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            mServiceConnection.get().ProtectedByInternet();
+        }
+    }
+
+    @Test
+    public void testNoPermissionLocal() throws Exception {
+        bindLocalService();
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            mServiceConnection.get().NotProtected();
+        }
+    }
+
+    @Test
+    public void testManuallyProtectedLocal() throws Exception {
+        bindLocalService();
+        final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+        while (state.keepRunning()) {
+            mServiceConnection.get().ManuallyProtected();
+        }
+    }
+}
diff --git a/tests/EnforcePermission/service-app/Android.bp b/tests/EnforcePermission/service-app/Android.bp
index a4ac1d7..7878215 100644
--- a/tests/EnforcePermission/service-app/Android.bp
+++ b/tests/EnforcePermission/service-app/Android.bp
@@ -21,6 +21,14 @@
     default_applicable_licenses: ["frameworks_base_license"],
 }
 
+android_library {
+    name: "EnforcePermissionTestLib",
+    srcs: [
+        "src/**/*.java",
+        ":frameworks-enforce-permission-test-aidl",
+    ],
+}
+
 android_test_helper_app {
     name: "EnforcePermissionTestHelper",
     srcs: [
diff --git a/tests/EnforcePermission/service-app/AndroidManifest.xml b/tests/EnforcePermission/service-app/AndroidManifest.xml
index ddafe15..eba1230 100644
--- a/tests/EnforcePermission/service-app/AndroidManifest.xml
+++ b/tests/EnforcePermission/service-app/AndroidManifest.xml
@@ -15,6 +15,9 @@
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="android.tests.enforcepermission.service">
+
+    <uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
+
     <application>
         <service
           android:name=".TestService"
diff --git a/tests/EnforcePermission/service-app/src/android/tests/enforcepermission/service/NestedTestService.java b/tests/EnforcePermission/service-app/src/android/tests/enforcepermission/service/NestedTestService.java
index 7879a12..0f083c9 100644
--- a/tests/EnforcePermission/service-app/src/android/tests/enforcepermission/service/NestedTestService.java
+++ b/tests/EnforcePermission/service-app/src/android/tests/enforcepermission/service/NestedTestService.java
@@ -18,13 +18,21 @@
 
 import android.annotation.EnforcePermission;
 import android.app.Service;
+import android.content.Context;
 import android.content.Intent;
 import android.os.IBinder;
+import android.os.PermissionEnforcer;
 import android.tests.enforcepermission.INested;
 import android.util.Log;
 
 public class NestedTestService extends Service {
     private static final String TAG = "EnforcePermission.NestedTestService";
+    private INested.Stub mBinder;
+
+    @Override
+    public void onCreate() {
+        mBinder = new Stub(this);
+    }
 
     @Override
     public IBinder onBind(Intent intent) {
@@ -32,7 +40,12 @@
         return mBinder;
     }
 
-    private final INested.Stub mBinder = new INested.Stub() {
+    private static class Stub extends INested.Stub {
+
+        Stub(Context context) {
+            super(PermissionEnforcer.fromContext(context));
+        }
+
         @Override
         @EnforcePermission(android.Manifest.permission.ACCESS_NETWORK_STATE)
         public void ProtectedByAccessNetworkState() {
@@ -44,5 +57,5 @@
         public void ProtectedByReadSyncSettings() {
             ProtectedByReadSyncSettings_enforcePermission();
         }
-    };
+    }
 }
diff --git a/tests/EnforcePermission/service-app/src/android/tests/enforcepermission/service/TestService.java b/tests/EnforcePermission/service-app/src/android/tests/enforcepermission/service/TestService.java
index e9b897d..8b809cf 100644
--- a/tests/EnforcePermission/service-app/src/android/tests/enforcepermission/service/TestService.java
+++ b/tests/EnforcePermission/service-app/src/android/tests/enforcepermission/service/TestService.java
@@ -17,11 +17,13 @@
 package android.tests.enforcepermission.service;
 
 import android.annotation.EnforcePermission;
+import android.annotation.RequiresNoPermission;
 import android.app.Service;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.os.IBinder;
+import android.os.PermissionEnforcer;
 import android.os.RemoteException;
 import android.tests.enforcepermission.INested;
 import android.tests.enforcepermission.IProtected;
@@ -36,9 +38,11 @@
 
     private static final String TAG = "EnforcePermission.TestService";
     private volatile ServiceConnection mNestedServiceConnection;
+    private IProtected.Stub mBinder;
 
     @Override
     public void onCreate() {
+        mBinder = new Stub(this);
         mNestedServiceConnection = new ServiceConnection();
         Intent intent = new Intent(this, NestedTestService.class);
         boolean bound = bindService(intent, mNestedServiceConnection, Context.BIND_AUTO_CREATE);
@@ -78,7 +82,12 @@
         return mBinder;
     }
 
-    private final IProtected.Stub mBinder = new IProtected.Stub() {
+    private class Stub extends IProtected.Stub {
+
+        Stub(Context context) {
+            super(PermissionEnforcer.fromContext(context));
+        }
+
         @Override
         @EnforcePermission(android.Manifest.permission.INTERNET)
         public void ProtectedByInternet() {
@@ -105,7 +114,6 @@
             ProtectedByInternetAndAccessNetworkStateImplicitly_enforcePermission();
 
             mNestedServiceConnection.get().ProtectedByAccessNetworkState();
-
         }
 
         @Override
@@ -115,5 +123,65 @@
 
             mNestedServiceConnection.get().ProtectedByReadSyncSettings();
         }
-    };
+
+        @Override
+        @EnforcePermission(android.Manifest.permission.TURN_SCREEN_ON)
+        public void ProtectedByTurnScreenOn() {
+            ProtectedByTurnScreenOn_enforcePermission();
+        }
+
+        @Override
+        @EnforcePermission(android.Manifest.permission.READ_CONTACTS)
+        public void ProtectedByReadContacts() {
+            ProtectedByReadContacts_enforcePermission();
+        }
+
+        @Override
+        @EnforcePermission(android.Manifest.permission.READ_CALENDAR)
+        public void ProtectedByReadCalendar() {
+            ProtectedByReadCalendar_enforcePermission();
+        }
+
+        @Override
+        @EnforcePermission(allOf = {
+                android.Manifest.permission.INTERNET,
+                android.Manifest.permission.VIBRATE})
+        public void ProtectedByInternetAndVibrate() {
+            ProtectedByInternetAndVibrate_enforcePermission();
+        }
+
+        @Override
+        @EnforcePermission(allOf = {
+                android.Manifest.permission.INTERNET,
+                android.Manifest.permission.READ_SYNC_SETTINGS})
+        public void ProtectedByInternetAndReadSyncSettings() {
+            ProtectedByInternetAndReadSyncSettings_enforcePermission();
+        }
+
+        @Override
+        @EnforcePermission(anyOf = {
+                  android.Manifest.permission.ACCESS_WIFI_STATE,
+                  android.Manifest.permission.VIBRATE})
+        public void ProtectedByAccessWifiStateOrVibrate() {
+            ProtectedByAccessWifiStateOrVibrate_enforcePermission();
+        }
+
+        @Override
+        @EnforcePermission(anyOf = {
+                android.Manifest.permission.INTERNET,
+                android.Manifest.permission.VIBRATE})
+        public void ProtectedByInternetOrVibrate() {
+            ProtectedByInternetOrVibrate_enforcePermission();
+        }
+
+        @Override
+        @RequiresNoPermission
+        public void NotProtected() {
+        }
+
+        @Override
+        public void ManuallyProtected() {
+            enforceCallingOrSelfPermission(android.Manifest.permission.INTERNET, "access denied");
+        }
+    }
 }
diff --git a/tests/EnforcePermission/test-app/AndroidManifest.xml b/tests/EnforcePermission/test-app/AndroidManifest.xml
index 4a0c6a8..8bd05d7 100644
--- a/tests/EnforcePermission/test-app/AndroidManifest.xml
+++ b/tests/EnforcePermission/test-app/AndroidManifest.xml
@@ -16,9 +16,20 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="android.tests.enforcepermission.tests">
 
-    <!-- Expected for the tests (not actually used) -->
+    <!-- Expected permissions for the tests (not actually used). These
+         are granted automatically at runtime by Tradefed (see
+         GrantPermissionPreparer). -->
+    <!-- normal -->
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
+    <!-- normal|appops -->
+    <uses-permission android:name="android.permission.TURN_SCREEN_ON" />
+    <!-- dangerous -->
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
+
+    <!-- Used by the tests to activate/deactivate AppOps -->
+    <uses-permission android:name="android.permission.MANAGE_APP_OPS_MODES" />
+    <uses-permission android:name="android.permission.MANAGE_APPOPS" />
 
     <queries>
         <package android:name="android.tests.enforcepermission.service" />
diff --git a/tests/EnforcePermission/test-app/src/android/tests/enforcepermission/tests/ServiceTest.java b/tests/EnforcePermission/test-app/src/android/tests/enforcepermission/tests/ServiceTest.java
index d2a4a03..e09097c 100644
--- a/tests/EnforcePermission/test-app/src/android/tests/enforcepermission/tests/ServiceTest.java
+++ b/tests/EnforcePermission/test-app/src/android/tests/enforcepermission/tests/ServiceTest.java
@@ -21,11 +21,13 @@
 import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.assertTrue;
 
+import android.app.AppOpsManager;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
 import android.os.IBinder;
+import android.os.Process;
 import android.os.RemoteException;
 import android.tests.enforcepermission.IProtected;
 import android.util.Log;
@@ -126,4 +128,61 @@
             throws RemoteException {
         mServiceConnection.get().ProtectedByInternetAndReadSyncSettingsImplicitly();
     }
+
+    @Test
+    public void testAppOpPermissionGranted_succeeds() throws RemoteException {
+        AppOpsManager appOpsManager = mContext.getSystemService(AppOpsManager.class);
+        appOpsManager.setUidMode(AppOpsManager.OP_TURN_SCREEN_ON,
+                Process.myUid(), AppOpsManager.MODE_ALLOWED);
+
+        mServiceConnection.get().ProtectedByTurnScreenOn();
+    }
+
+    @Test
+    public void testAppOpPermissionDenied_fails() throws RemoteException {
+        AppOpsManager appOpsManager = mContext.getSystemService(AppOpsManager.class);
+        appOpsManager.setUidMode(AppOpsManager.OP_TURN_SCREEN_ON,
+                Process.myUid(), AppOpsManager.MODE_ERRORED);
+
+        final Exception ex = assertThrows(SecurityException.class,
+                () -> mServiceConnection.get().ProtectedByTurnScreenOn());
+        assertThat(ex.getMessage(), containsString("TURN_SCREEN_ON"));
+    }
+
+    @Test
+    public void testRuntimePermissionGranted_succeeds() throws RemoteException {
+        mServiceConnection.get().ProtectedByReadContacts();
+    }
+
+    @Test
+    public void testRuntimePermissionDenied_fails() throws RemoteException {
+        final Exception ex = assertThrows(SecurityException.class,
+                () -> mServiceConnection.get().ProtectedByReadCalendar());
+        assertThat(ex.getMessage(), containsString("READ_CALENDAR"));
+    }
+
+    @Test
+    public void testAllOfPermissionGranted_succeeds() throws RemoteException {
+        mServiceConnection.get().ProtectedByInternetAndReadSyncSettings();
+    }
+
+    @Test
+    public void testAllOfPermissionDenied_fails() throws RemoteException {
+        final Exception ex = assertThrows(SecurityException.class,
+                () -> mServiceConnection.get().ProtectedByInternetAndVibrate());
+        assertThat(ex.getMessage(), containsString("VIBRATE"));
+    }
+
+    @Test
+    public void testAnyOfPermissionGranted_succeeds() throws RemoteException {
+        mServiceConnection.get().ProtectedByInternetOrVibrate();
+    }
+
+    @Test
+    public void testAnyOfPermissionDenied_fails() throws RemoteException {
+        final Exception ex = assertThrows(SecurityException.class,
+                () -> mServiceConnection.get().ProtectedByAccessWifiStateOrVibrate());
+        assertThat(ex.getMessage(), containsString("VIBRATE"));
+        assertThat(ex.getMessage(), containsString("ACCESS_WIFI_STATE"));
+    }
 }
diff --git a/tests/FixVibrateSetting/Android.bp b/tests/FixVibrateSetting/Android.bp
deleted file mode 100644
index bd7c701..0000000
--- a/tests/FixVibrateSetting/Android.bp
+++ /dev/null
@@ -1,15 +0,0 @@
-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_app {
-    name: "FixVibrateSetting",
-    srcs: ["**/*.java"],
-    sdk_version: "current",
-    certificate: "platform",
-}
diff --git a/tests/FixVibrateSetting/AndroidManifest.xml b/tests/FixVibrateSetting/AndroidManifest.xml
deleted file mode 100644
index c2d5918..0000000
--- a/tests/FixVibrateSetting/AndroidManifest.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-     package="com.android.fixvibratesetting">
-    <uses-permission android:name="android.permission.VIBRATE"/>
-
-    <application>
-        <activity android:name="FixVibrateSetting"
-             android:label="@string/app_label"
-             android:exported="true">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN"/>
-                <category android:name="android.intent.category.DEFAULT"/>
-                <category android:name="android.intent.category.LAUNCHER"/>
-            </intent-filter>
-        </activity>
-    </application>
-</manifest>
diff --git a/tests/FixVibrateSetting/OWNERS b/tests/FixVibrateSetting/OWNERS
deleted file mode 100644
index cc63ceb..0000000
--- a/tests/FixVibrateSetting/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-include /services/core/java/com/android/server/vibrator/OWNERS
diff --git a/tests/FixVibrateSetting/res/drawable-hdpi/stat_sys_warning.png b/tests/FixVibrateSetting/res/drawable-hdpi/stat_sys_warning.png
deleted file mode 100644
index 37c8853..0000000
--- a/tests/FixVibrateSetting/res/drawable-hdpi/stat_sys_warning.png
+++ /dev/null
Binary files differ
diff --git a/tests/FixVibrateSetting/res/drawable-mdpi/stat_sys_warning.png b/tests/FixVibrateSetting/res/drawable-mdpi/stat_sys_warning.png
deleted file mode 100644
index be00f47..0000000
--- a/tests/FixVibrateSetting/res/drawable-mdpi/stat_sys_warning.png
+++ /dev/null
Binary files differ
diff --git a/tests/FixVibrateSetting/res/layout/fix_vibrate.xml b/tests/FixVibrateSetting/res/layout/fix_vibrate.xml
deleted file mode 100644
index c505e65..0000000
--- a/tests/FixVibrateSetting/res/layout/fix_vibrate.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical"
-    >
-
-    <TextView android:id="@+id/current_setting"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="left"
-        android:layout_marginTop="30dp"
-        android:layout_marginBottom="50dp"
-        android:paddingLeft="8dp"
-        android:paddingTop="4dp"
-        android:textSize="20sp"
-        android:textColor="#ffffffff"
-        />
-
-    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:gravity="center"
-        android:orientation="horizontal"
-        >
-        <Button android:id="@+id/fix"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/fix"
-            />
-
-        <Button android:id="@+id/unfix"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/unfix"
-            />
-    </LinearLayout>
-
-    <Button android:id="@+id/test"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:text="@string/test"
-        />
-
-</LinearLayout>
-
diff --git a/tests/FixVibrateSetting/res/values/strings.xml b/tests/FixVibrateSetting/res/values/strings.xml
deleted file mode 100644
index 269cef3..0000000
--- a/tests/FixVibrateSetting/res/values/strings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-  
-          http://www.apache.org/licenses/LICENSE-2.0
-  
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<resources>
-    <string name="app_label">Fix Vibrate</string>
-    <string name="title">Fix vibrate setting</string>
-    <string name="current_setting">"Ringer: %1$s\nNotification: %2$s"</string>
-    <string name="fix">Fix the setting</string>
-    <string name="unfix">Break the setting</string>
-    <string name="test">Test the setting</string>
-</resources>
-
diff --git a/tests/FixVibrateSetting/src/com/android/fixvibratesetting/FixVibrateSetting.java b/tests/FixVibrateSetting/src/com/android/fixvibratesetting/FixVibrateSetting.java
deleted file mode 100644
index 761efe4..0000000
--- a/tests/FixVibrateSetting/src/com/android/fixvibratesetting/FixVibrateSetting.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.fixvibratesetting;
-
-import android.app.Activity;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.content.Intent;
-import android.media.AudioManager;
-import android.util.Log;
-import android.view.View;
-import android.widget.TextView;
-import android.os.Bundle;
-
-public class FixVibrateSetting extends Activity implements View.OnClickListener
-{
-    AudioManager mAudioManager;
-    NotificationManager mNotificationManager;
-    TextView mCurrentSetting;
-    View mFix;
-    View mUnfix;
-    View mTest;
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
-        setContentView(R.layout.fix_vibrate);
-
-        mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);
-        mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
-
-        mCurrentSetting = (TextView)findViewById(R.id.current_setting);
-
-        mFix = findViewById(R.id.fix);
-        mFix.setOnClickListener(this);
-
-        mUnfix = findViewById(R.id.unfix);
-        mUnfix.setOnClickListener(this);
-
-        mTest = findViewById(R.id.test);
-        mTest.setOnClickListener(this);
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-
-        update();
-    }
-
-    private String getSettingValue(int vibrateType) {
-        int setting = mAudioManager.getVibrateSetting(vibrateType);
-        switch (setting) {
-            case AudioManager.VIBRATE_SETTING_OFF:
-                return "off";
-            case AudioManager.VIBRATE_SETTING_ON:
-                return "on";
-            case AudioManager.VIBRATE_SETTING_ONLY_SILENT:
-                return "silent-only";
-            default:
-                return "unknown";
-        }
-    }
-
-    public void onClick(View v) {
-        if (v == mFix) {
-            fix();
-            update();
-        } else if (v == mUnfix) {
-            unfix();
-            update();
-        } else if (v == mTest) {
-            test();
-            update();
-        }
-    }
-
-    private void update() {
-        String ringer = getSettingValue(AudioManager.VIBRATE_TYPE_RINGER);
-        String notification = getSettingValue(AudioManager.VIBRATE_TYPE_NOTIFICATION);
-        String text = getString(R.string.current_setting, ringer, notification);
-        mCurrentSetting.setText(text);
-    }
-
-    private void fix() {
-        mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,
-                AudioManager.VIBRATE_SETTING_ON);
-    }
-
-    private void unfix() {
-        mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,
-                AudioManager.VIBRATE_SETTING_OFF);
-    }
-
-    private void test() {
-        Intent intent = new Intent(this, FixVibrateSetting.class);
-        PendingIntent pending = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
-
-        Notification n = new Notification.Builder(this)
-                .setSmallIcon(R.drawable.stat_sys_warning)
-                .setTicker("Test notification")
-                .setWhen(System.currentTimeMillis())
-                .setContentTitle("Test notification")
-                .setContentText("Test notification")
-                .setContentIntent(pending)
-                .setVibrate(new long[] { 0, 700, 500, 1000 })
-                .setAutoCancel(true)
-                .build();
-
-        mNotificationManager.notify(1, n);
-    }
-}
-
diff --git a/tests/FlickerTests/Android.bp b/tests/FlickerTests/Android.bp
index 72b5159..3e67286 100644
--- a/tests/FlickerTests/Android.bp
+++ b/tests/FlickerTests/Android.bp
@@ -93,6 +93,7 @@
         "flickerlib-helpers",
         "platform-test-annotations",
         "wm-flicker-common-app-helpers",
+        "wm-shell-flicker-utils",
     ],
     data: [
         ":FlickerTestApp",
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 b18a1a8..4032121 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/CommonAssertions.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/CommonAssertions.kt
@@ -19,6 +19,8 @@
 package com.android.server.wm.flicker
 
 import android.tools.common.PlatformConsts
+import android.tools.common.Position
+import android.tools.common.flicker.subject.layers.LayerTraceEntrySubject
 import android.tools.common.flicker.subject.region.RegionSubject
 import android.tools.common.traces.component.ComponentNameMatcher
 import android.tools.common.traces.component.IComponentNameMatcher
@@ -168,14 +170,7 @@
  * the SF trace
  */
 fun LegacyFlickerTest.navBarLayerPositionAtStart() {
-    assertLayersStart {
-        val display =
-            this.entry.displays.firstOrNull { !it.isVirtual } ?: error("There is no display!")
-        this.visibleRegion(ComponentNameMatcher.NAV_BAR)
-            .coversExactly(
-                WindowUtils.getNavigationBarPosition(display, scenario.isGesturalNavigation)
-            )
-    }
+    assertLayersStart { assertNavBarPosition(this, scenario.isGesturalNavigation) }
 }
 
 /**
@@ -183,14 +178,39 @@
  * the SF trace
  */
 fun LegacyFlickerTest.navBarLayerPositionAtEnd() {
-    assertLayersEnd {
-        val display =
-            this.entry.displays.minByOrNull { it.id }
-                ?: throw RuntimeException("There is no display!")
-        this.visibleRegion(ComponentNameMatcher.NAV_BAR)
-            .coversExactly(
-                WindowUtils.getNavigationBarPosition(display, scenario.isGesturalNavigation)
-            )
+    assertLayersEnd { assertNavBarPosition(this, scenario.isGesturalNavigation) }
+}
+
+private fun assertNavBarPosition(sfState: LayerTraceEntrySubject, isGesturalNavigation: Boolean) {
+    val display =
+        sfState.entry.displays.filterNot { it.isOff }.minByOrNull { it.id }
+            ?: error("There is no display!")
+    val displayArea = display.layerStackSpace
+    val navBarPosition = display.navBarPosition(isGesturalNavigation)
+    val navBarRegion = sfState.visibleRegion(ComponentNameMatcher.NAV_BAR)
+
+    when (navBarPosition) {
+        Position.TOP ->
+            navBarRegion
+                .hasSameTopPosition(displayArea)
+                .hasSameLeftPosition(displayArea)
+                .hasSameRightPosition(displayArea)
+        Position.BOTTOM ->
+            navBarRegion
+                .hasSameBottomPosition(displayArea)
+                .hasSameLeftPosition(displayArea)
+                .hasSameRightPosition(displayArea)
+        Position.LEFT ->
+            navBarRegion
+                .hasSameLeftPosition(displayArea)
+                .hasSameTopPosition(displayArea)
+                .hasSameBottomPosition(displayArea)
+        Position.RIGHT ->
+            navBarRegion
+                .hasSameRightPosition(displayArea)
+                .hasSameTopPosition(displayArea)
+                .hasSameBottomPosition(displayArea)
+        else -> error("Unknown position $navBarPosition")
     }
 }
 
@@ -262,10 +282,10 @@
                 snapshotLayers
                     .mapNotNull { snapshotLayer -> snapshotLayer.layer.visibleRegion }
                     .toTypedArray()
-            val snapshotRegion = RegionSubject(visibleAreas, timestamp)
+            val snapshotRegion = RegionSubject(visibleAreas, it.timestamp)
+            val appVisibleRegion = it.visibleRegion(component)
             // Verify the size of snapshotRegion covers appVisibleRegion exactly in animation.
-            if (snapshotRegion.region.isNotEmpty) {
-                val appVisibleRegion = it.visibleRegion(component)
+            if (snapshotRegion.region.isNotEmpty && appVisibleRegion.region.isNotEmpty) {
                 snapshotRegion.coversExactly(appVisibleRegion.region)
             }
         }
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/ActivityEmbeddingTestBase.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/ActivityEmbeddingTestBase.kt
index 4517644..6209a08 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/ActivityEmbeddingTestBase.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/ActivityEmbeddingTestBase.kt
@@ -16,9 +16,9 @@
 
 package com.android.server.wm.flicker.activityembedding
 
-import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.platform.test.annotations.Presubmit
 import android.tools.common.traces.component.ComponentNameMatcher
+import android.tools.device.flicker.legacy.LegacyFlickerTest
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.ActivityEmbeddingAppHelper
 import org.junit.Before
@@ -36,10 +36,8 @@
     /** Asserts the background animation layer is never visible during bounds change transition. */
     @Presubmit
     @Test
-    fun backgroundLayerNeverVisible() {
+    open fun backgroundLayerNeverVisible() {
         val backgroundColorLayer = ComponentNameMatcher("", "Animation Background")
-        flicker.assertLayers {
-            isInvisible(backgroundColorLayer)
-        }
+        flicker.assertLayers { isInvisible(backgroundColorLayer) }
     }
 }
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/layoutchange/HorizontalSplitChangeRatioTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/layoutchange/HorizontalSplitChangeRatioTest.kt
index badd876..c3529ba 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/layoutchange/HorizontalSplitChangeRatioTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/layoutchange/HorizontalSplitChangeRatioTest.kt
@@ -16,14 +16,15 @@
 
 package com.android.server.wm.flicker.activityembedding
 
+import android.platform.test.annotations.FlakyTest
 import android.platform.test.annotations.Presubmit
 import android.tools.common.datatypes.Rect
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import com.android.server.wm.flicker.helpers.ActivityEmbeddingAppHelper
 import androidx.test.filters.RequiresDevice
+import com.android.server.wm.flicker.helpers.ActivityEmbeddingAppHelper
 import org.junit.FixMethodOrder
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -34,9 +35,8 @@
  * Test changing split ratio at runtime on a horizona split.
  *
  * Setup: Launch A|B in horizontal split with B being the secondary activity, by default A and B
- * windows are equal in size. B is on the top and A is on the bottom.
- * Transitions:
- * Change the split ratio to A:B=0.7:0.3, expect bounds change for both A and B.
+ * windows are equal in size. B is on the top and A is on the bottom. Transitions: Change the split
+ * ratio to A:B=0.7:0.3, expect bounds change for both A and B.
  *
  * To run this test: `atest FlickerTests:HorizontalSplitChangeRatioTest`
  */
@@ -45,7 +45,7 @@
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 class HorizontalSplitChangeRatioTest(flicker: LegacyFlickerTest) :
-        ActivityEmbeddingTestBase(flicker) {
+    ActivityEmbeddingTestBase(flicker) {
     /** {@inheritDoc} */
     override val transition: FlickerBuilder.() -> Unit = {
         setup {
@@ -53,18 +53,24 @@
             testApp.launchViaIntent(wmHelper)
             testApp.launchSecondaryActivityHorizontally(wmHelper)
             startDisplayBounds =
-                    wmHelper.currentState.layerState.physicalDisplayBounds
-                            ?: error("Display not found")
+                wmHelper.currentState.layerState.physicalDisplayBounds ?: error("Display not found")
         }
-        transitions {
-            testApp.changeSecondaryActivityRatio(wmHelper)
-        }
+        transitions { testApp.changeSecondaryActivityRatio(wmHelper) }
         teardown {
             tapl.goHome()
             testApp.exit(wmHelper)
         }
     }
 
+    @FlakyTest(bugId = 293075402)
+    @Test
+    override fun backgroundLayerNeverVisible() = super.backgroundLayerNeverVisible()
+
+    @FlakyTest(bugId = 293075402)
+    @Test
+    override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
+        super.visibleLayersShownMoreThanOneConsecutiveEntry()
+
     /** Assert the Main activity window is always visible. */
     @Presubmit
     @Test
@@ -84,7 +90,8 @@
     @Test
     fun secondaryActivityWindowIsAlwaysVisible() {
         flicker.assertWm {
-            isAppWindowVisible(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT) }
+            isAppWindowVisible(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
+        }
     }
 
     /** Assert the Secondary activity window is always visible. */
@@ -100,15 +107,17 @@
     fun secondaryActivityAdjustsHeightRuntime() {
         flicker.assertLayersStart {
             val topLayerRegion =
-                    this.visibleRegion(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
+                this.visibleRegion(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
             val bottomLayerRegion =
-                    this.visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
+                this.visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
             // Compare dimensions of two splits, given we're using default split attributes,
             // both activities take up the same visible size on the display.
             check { "height" }
-                    .that(topLayerRegion.region.height).isEqual(bottomLayerRegion.region.height)
+                .that(topLayerRegion.region.height)
+                .isEqual(bottomLayerRegion.region.height)
             check { "width" }
-                    .that(topLayerRegion.region.width).isEqual(bottomLayerRegion.region.width)
+                .that(topLayerRegion.region.width)
+                .isEqual(bottomLayerRegion.region.width)
             topLayerRegion.notOverlaps(bottomLayerRegion.region)
             // Layers of two activities sum to be fullscreen size on display.
             topLayerRegion.plus(bottomLayerRegion.region).coversExactly(startDisplayBounds)
@@ -116,20 +125,20 @@
 
         flicker.assertLayersEnd {
             val topLayerRegion =
-                    this.visibleRegion(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
+                this.visibleRegion(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
             val bottomLayerRegion =
-                    this.visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
+                this.visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
             // Compare dimensions of two splits, given we're using default split attributes,
             // both activities take up the same visible size on the display.
             check { "height" }
-                    .that(topLayerRegion.region.height).isLower(bottomLayerRegion.region.height)
+                .that(topLayerRegion.region.height)
+                .isLower(bottomLayerRegion.region.height)
             check { "height" }
-                    .that(
-                            topLayerRegion.region.height / 0.3f -
-                                    bottomLayerRegion.region.height / 0.7f)
-                    .isLower(0.1f)
+                .that(topLayerRegion.region.height / 0.3f - bottomLayerRegion.region.height / 0.7f)
+                .isLower(0.1f)
             check { "width" }
-                    .that(topLayerRegion.region.width).isEqual(bottomLayerRegion.region.width)
+                .that(topLayerRegion.region.width)
+                .isEqual(bottomLayerRegion.region.width)
             topLayerRegion.notOverlaps(bottomLayerRegion.region)
             // Layers of two activities sum to be fullscreen size on display.
             topLayerRegion.plus(bottomLayerRegion.region).coversExactly(startDisplayBounds)
@@ -149,4 +158,4 @@
         @JvmStatic
         fun getParams() = LegacyFlickerTestFactory.nonRotationTests()
     }
-}
\ No newline at end of file
+}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/open/MainActivityStartsSecondaryWithAlwaysExpandTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/open/MainActivityStartsSecondaryWithAlwaysExpandTest.kt
index 0f406fd..244c5dc 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/open/MainActivityStartsSecondaryWithAlwaysExpandTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/open/MainActivityStartsSecondaryWithAlwaysExpandTest.kt
@@ -70,6 +70,8 @@
 
     @Ignore("Not applicable to this CUJ.") override fun navBarWindowIsVisibleAtStartAndEnd() {}
 
+    @FlakyTest(bugId = 291575593) override fun entireScreenCovered() {}
+
     @Ignore("Not applicable to this CUJ.") override fun statusBarWindowIsAlwaysVisible() {}
 
     @Ignore("Not applicable to this CUJ.") override fun statusBarLayerPositionAtStartAndEnd() {}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/open/OpenThirdActivityOverSplitTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/open/OpenThirdActivityOverSplitTest.kt
index 404f329..4bb2246 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/open/OpenThirdActivityOverSplitTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/open/OpenThirdActivityOverSplitTest.kt
@@ -18,7 +18,6 @@
 
 import android.platform.test.annotations.Presubmit
 import android.tools.common.datatypes.Rect
-import android.tools.common.traces.component.ComponentNameMatcher
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/open/OpenTrampolineActivityTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/open/OpenTrampolineActivityTest.kt
index d3001d8..f409c4e 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/open/OpenTrampolineActivityTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/open/OpenTrampolineActivityTest.kt
@@ -14,19 +14,18 @@
  * limitations under the License.
  */
 
-package com.android.server.wm.flicker.activityembedding
+package com.android.server.wm.flicker.activityembedding.open
 
 import android.platform.test.annotations.FlakyTest
 import android.platform.test.annotations.Presubmit
 import android.tools.common.datatypes.Rect
-import android.tools.common.datatypes.Region
 import android.tools.common.flicker.subject.region.RegionSubject
-import android.tools.common.traces.component.ComponentNameMatcher
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import androidx.test.filters.RequiresDevice
+import com.android.server.wm.flicker.activityembedding.ActivityEmbeddingTestBase
 import com.android.server.wm.flicker.helpers.ActivityEmbeddingAppHelper
 import org.junit.FixMethodOrder
 import org.junit.Test
@@ -39,8 +38,8 @@
  *
  * Setup: Launch Activity A in fullscreen.
  *
- * Transitions: From A launch a trampoline Activity T, T launches secondary Activity B and
- * finishes itself, end up in split A|B.
+ * Transitions: From A launch a trampoline Activity T, T launches secondary Activity B and finishes
+ * itself, end up in split A|B.
  *
  * To run this test: `atest FlickerTests:OpenTrampolineActivityTest`
  */
@@ -54,12 +53,10 @@
             tapl.setExpectedRotationCheckEnabled(false)
             testApp.launchViaIntent(wmHelper)
             startDisplayBounds =
-                    wmHelper.currentState.layerState.physicalDisplayBounds
-                            ?: error("Can't get display bounds")
+                wmHelper.currentState.layerState.physicalDisplayBounds
+                    ?: error("Can't get display bounds")
         }
-        transitions {
-            testApp.launchTrampolineActivity(wmHelper)
-        }
+        transitions { testApp.launchTrampolineActivity(wmHelper) }
         teardown {
             tapl.goHome()
             testApp.exit(wmHelper)
@@ -87,9 +84,7 @@
     @Presubmit
     @Test
     fun mainActivityWindowAlwaysVisible() {
-        flicker.assertWm {
-            isAppWindowVisible(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
-        }
+        flicker.assertWm { isAppWindowVisible(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT) }
     }
 
     // TODO(b/289140963): After this is fixed, assert the main Activity window is visible
@@ -98,12 +93,8 @@
     @Presubmit
     @Test
     fun mainActivityLayerAlwaysVisible() {
-        flicker.assertLayersStart {
-            isVisible(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
-        }
-        flicker.assertLayersEnd {
-            isVisible(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
-        }
+        flicker.assertLayersStart { isVisible(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT) }
+        flicker.assertLayersEnd { isVisible(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT) }
     }
 
     /** Secondary activity is launched from the trampoline activity. */
@@ -112,10 +103,13 @@
     fun secondaryActivityWindowLaunchedFromTrampoline() {
         flicker.assertWm {
             notContains(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
-                    .then()
-                    .isAppWindowInvisible(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
-                    .then()
-                    .isAppWindowVisible(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
+                .then()
+                .isAppWindowInvisible(
+                    ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT,
+                    isOptional = true
+                )
+                .then()
+                .isAppWindowVisible(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
         }
     }
 
@@ -125,8 +119,8 @@
     fun secondaryActivityLayerLaunchedFromTrampoline() {
         flicker.assertLayers {
             isInvisible(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
-                    .then()
-                    .isVisible(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
+                .then()
+                .isVisible(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
         }
     }
 
@@ -136,73 +130,85 @@
     fun mainActivityWindowGoesFromFullscreenToSplit() {
         flicker.assertWm {
             this.invoke("mainActivityStartsInFullscreen") {
-                it.visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
+                    it.visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
                         .coversExactly(startDisplayBounds)
-            }
-                    // Begin of transition.
-                    .then()
-                    .isAppWindowInvisible(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
-                    .then()
-                    .invoke("mainAndSecondaryInSplit") {
-                        val mainActivityRegion =
-                                RegionSubject(
-                                        it.visibleRegion(
-                                                ActivityEmbeddingAppHelper
-                                                        .MAIN_ACTIVITY_COMPONENT).region,
-                                        it.timestamp)
-                        val secondaryActivityRegion =
-                                RegionSubject(
-                                        it.visibleRegion(
-                                                ActivityEmbeddingAppHelper
-                                                        .SECONDARY_ACTIVITY_COMPONENT).region,
-                                        it.timestamp)
-                        check { "height" }
-                                .that(mainActivityRegion.region.height)
-                                .isEqual(secondaryActivityRegion.region.height)
-                        check { "width" }
-                                .that(mainActivityRegion.region.width)
-                                .isEqual(secondaryActivityRegion.region.width)
-                        mainActivityRegion
-                                .plus(secondaryActivityRegion.region)
-                                .coversExactly(startDisplayBounds)
-                    }
+                }
+                // Begin of transition.
+                .then()
+                .isAppWindowInvisible(
+                    ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT,
+                    isOptional = true
+                )
+                .then()
+                .invoke("mainAndSecondaryInSplit") {
+                    val mainActivityRegion =
+                        RegionSubject(
+                            it.visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
+                                .region,
+                            it.timestamp
+                        )
+                    val secondaryActivityRegion =
+                        RegionSubject(
+                            it.visibleRegion(
+                                    ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT
+                                )
+                                .region,
+                            it.timestamp
+                        )
+                    check { "height" }
+                        .that(mainActivityRegion.region.height)
+                        .isEqual(secondaryActivityRegion.region.height)
+                    check { "width" }
+                        .that(mainActivityRegion.region.width)
+                        .isEqual(secondaryActivityRegion.region.width)
+                    mainActivityRegion
+                        .plus(secondaryActivityRegion.region)
+                        .coversExactly(startDisplayBounds)
+                }
         }
     }
 
     @FlakyTest(bugId = 290736037)
     /** Main activity should go from fullscreen to being a split with secondary activity. */
-    @Presubmit
     @Test
     fun mainActivityLayerGoesFromFullscreenToSplit() {
         flicker.assertLayers {
             this.invoke("mainActivityStartsInFullscreen") {
-                it.visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
+                    it.visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
                         .coversExactly(startDisplayBounds)
-            }
-                    .then()
-                    .isInvisible(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
-                    .then()
-                    .isVisible(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
+                }
+                .then()
+                .isInvisible(
+                    ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT,
+                    isOptional = true
+                )
+                .then()
+                .isVisible(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
         }
         flicker.assertLayersEnd {
-            val leftLayerRegion = visibleRegion(
-                    ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
+            val leftLayerRegion = visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
             val rightLayerRegion =
-                    visibleRegion(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
+                visibleRegion(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
             // Compare dimensions of two splits, given we're using default split attributes,
             // both activities take up the same visible size on the display.
             check { "height" }
-                    .that(leftLayerRegion.region.height)
-                    .isEqual(rightLayerRegion.region.height)
+                .that(leftLayerRegion.region.height)
+                .isEqual(rightLayerRegion.region.height)
             check { "width" }
-                    .that(leftLayerRegion.region.width)
-                    .isEqual(rightLayerRegion.region.width)
+                .that(leftLayerRegion.region.width)
+                .isEqual(rightLayerRegion.region.width)
             leftLayerRegion.notOverlaps(rightLayerRegion.region)
             // Layers of two activities sum to be fullscreen size on display.
             leftLayerRegion.plus(rightLayerRegion.region).coversExactly(startDisplayBounds)
         }
     }
 
+    @FlakyTest(bugId = 288591571)
+    @Test
+    override fun visibleLayersShownMoreThanOneConsecutiveEntry() {
+        super.visibleLayersShownMoreThanOneConsecutiveEntry()
+    }
+
     companion object {
         /** {@inheritDoc} */
         private var startDisplayBounds = Rect.EMPTY
@@ -217,4 +223,4 @@
         @JvmStatic
         fun getParams() = LegacyFlickerTestFactory.nonRotationTests()
     }
-}
\ No newline at end of file
+}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/pip/SecondaryActivityEnterPipTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/pip/SecondaryActivityEnterPipTest.kt
index 0417f9d..e4c35b2 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/pip/SecondaryActivityEnterPipTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/activityembedding/pip/SecondaryActivityEnterPipTest.kt
@@ -35,92 +35,84 @@
 /**
  * Test launching a secondary Activity into Picture-In-Picture mode.
  *
- * Setup: Start from a split A|B.
- * Transition: B enters PIP, observe the window shrink to the bottom right corner on screen.
+ * Setup: Start from a split A|B. Transition: B enters PIP, observe the window shrink to the bottom
+ * right corner on screen.
  *
  * To run this test: `atest FlickerTests:SecondaryActivityEnterPipTest`
- *
  */
 @RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class SecondaryActivityEnterPipTest (flicker: LegacyFlickerTest) :
-        ActivityEmbeddingTestBase(flicker) {
+class SecondaryActivityEnterPipTest(flicker: LegacyFlickerTest) :
+    ActivityEmbeddingTestBase(flicker) {
     override val transition: FlickerBuilder.() -> Unit = {
         setup {
             tapl.setExpectedRotationCheckEnabled(false)
             testApp.launchViaIntent(wmHelper)
             testApp.launchSecondaryActivity(wmHelper)
             startDisplayBounds =
-                    wmHelper.currentState.layerState.physicalDisplayBounds
-                            ?: error("Can't get display bounds")
+                wmHelper.currentState.layerState.physicalDisplayBounds
+                    ?: error("Can't get display bounds")
         }
-        transitions {
-            testApp.secondaryActivityEnterPip(wmHelper)
-        }
+        transitions { testApp.secondaryActivityEnterPip(wmHelper) }
         teardown {
             tapl.goHome()
             testApp.exit(wmHelper)
         }
     }
 
-    /**
-     * Main and secondary activity start from a split each taking half of the screen.
-     */
+    /** Main and secondary activity start from a split each taking half of the screen. */
     @Presubmit
     @Test
     fun layersStartFromEqualSplit() {
         flicker.assertLayersStart {
-            val leftLayerRegion =
-                    visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
+            val leftLayerRegion = visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
             val rightLayerRegion =
-                    visibleRegion(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
+                visibleRegion(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
             // Compare dimensions of two splits, given we're using default split attributes,
             // both activities take up the same visible size on the display.
             check { "height" }
-                    .that(leftLayerRegion.region.height).isEqual(rightLayerRegion.region.height)
+                .that(leftLayerRegion.region.height)
+                .isEqual(rightLayerRegion.region.height)
             check { "width" }
-                    .that(leftLayerRegion.region.width).isEqual(rightLayerRegion.region.width)
+                .that(leftLayerRegion.region.width)
+                .isEqual(rightLayerRegion.region.width)
             leftLayerRegion.notOverlaps(rightLayerRegion.region)
             leftLayerRegion.plus(rightLayerRegion.region).coversExactly(startDisplayBounds)
         }
         flicker.assertLayersEnd {
             visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
-                    .coversExactly(startDisplayBounds)
+                .coversExactly(startDisplayBounds)
         }
     }
 
-    /**
-     * Main Activity is visible throughout the transition and becomes fullscreen.
-     */
+    /** Main Activity is visible throughout the transition and becomes fullscreen. */
     @Presubmit
     @Test
     fun mainActivityWindowBecomesFullScreen() {
         flicker.assertWm { isAppWindowVisible(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT) }
         flicker.assertWmEnd {
             visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
-                    .coversExactly(startDisplayBounds)
+                .coversExactly(startDisplayBounds)
         }
     }
 
-    /**
-     * Main Activity is visible throughout the transition and becomes fullscreen.
-     */
+    /** Main Activity is visible throughout the transition and becomes fullscreen. */
     @Presubmit
     @Test
     fun mainActivityLayerBecomesFullScreen() {
         flicker.assertLayers {
             isVisible(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
-                    .then()
-                    .isVisible(TRANSITION_SNAPSHOT)
-                    .isInvisible(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
-                    .then()
-                    .isVisible(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
+                .then()
+                .isVisible(TRANSITION_SNAPSHOT)
+                .isInvisible(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
+                .then()
+                .isVisible(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
         }
         flicker.assertLayersEnd {
             visibleRegion(ActivityEmbeddingAppHelper.MAIN_ACTIVITY_COMPONENT)
-                    .coversExactly(startDisplayBounds)
+                .coversExactly(startDisplayBounds)
         }
     }
 
@@ -136,18 +128,15 @@
         }
         flicker.assertWmEnd {
             val pipWindowRegion =
-                    visibleRegion(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
-            check{"height"}
-                    .that(pipWindowRegion.region.height)
-                    .isLower(startDisplayBounds.height / 2)
-            check{"width"}
-                    .that(pipWindowRegion.region.width).isLower(startDisplayBounds.width)
+                visibleRegion(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
+            check { "height" }
+                .that(pipWindowRegion.region.height)
+                .isLower(startDisplayBounds.height / 2)
+            check { "width" }.that(pipWindowRegion.region.width).isLower(startDisplayBounds.width)
         }
     }
 
-    /**
-     * During the transition Secondary Activity shrinks to the bottom right corner.
-     */
+    /** During the transition Secondary Activity shrinks to the bottom right corner. */
     @Presubmit
     @Test
     fun secondaryLayerShrinks() {
@@ -162,13 +151,9 @@
             }
         }
         flicker.assertLayersEnd {
-            val pipRegion = visibleRegion(
-                    ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
-            check { "height" }
-                    .that(pipRegion.region.height)
-                    .isLower(startDisplayBounds.height / 2)
-            check { "width" }
-                    .that(pipRegion.region.width).isLower(startDisplayBounds.width)
+            val pipRegion = visibleRegion(ActivityEmbeddingAppHelper.SECONDARY_ACTIVITY_COMPONENT)
+            check { "height" }.that(pipRegion.region.height).isLower(startDisplayBounds.height / 2)
+            check { "width" }.that(pipRegion.region.width).isLower(startDisplayBounds.width)
         }
     }
 
@@ -185,4 +170,4 @@
         @JvmStatic
         fun getParams() = LegacyFlickerTestFactory.nonRotationTests()
     }
-}
\ No newline at end of file
+}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTest.kt
index dbbc771..71db76e 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTest.kt
@@ -22,7 +22,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import org.junit.FixMethodOrder
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -71,12 +70,11 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @FlickerServiceCompatible
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class CloseAppBackButtonTest(flicker: LegacyFlickerTest) : CloseAppTransition(flicker) {
+class CloseAppBackButtonTest(flicker: LegacyFlickerTest) : CloseAppTransition(flicker) {
     /** {@inheritDoc} */
     override val transition: FlickerBuilder.() -> Unit
         get() = {
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTestCfArm.kt
deleted file mode 100644
index 566f393..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppBackButtonTestCfArm.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.close
-
-import android.tools.common.flicker.annotation.FlickerServiceCompatible
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@FlickerServiceCompatible
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class CloseAppBackButtonTestCfArm(flicker: LegacyFlickerTest) : CloseAppBackButtonTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() = LegacyFlickerTestFactory.nonRotationTests()
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTest.kt
index ed930fc..8dd7e65 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTest.kt
@@ -22,7 +22,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import org.junit.FixMethodOrder
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -71,12 +70,11 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @FlickerServiceCompatible
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class CloseAppHomeButtonTest(flicker: LegacyFlickerTest) : CloseAppTransition(flicker) {
+class CloseAppHomeButtonTest(flicker: LegacyFlickerTest) : CloseAppTransition(flicker) {
     /** {@inheritDoc} */
     override val transition: FlickerBuilder.() -> Unit
         get() = {
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTestCfArm.kt
deleted file mode 100644
index 49ed183..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/close/CloseAppHomeButtonTestCfArm.kt
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.close
-
-import android.tools.common.flicker.annotation.FlickerServiceCompatible
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@FlickerServiceCompatible
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class CloseAppHomeButtonTestCfArm(flicker: LegacyFlickerTest) : CloseAppHomeButtonTest(flicker) {
-    companion object {
-        /** Creates the test configurations. */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() = LegacyFlickerTestFactory.nonRotationTests()
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ActivityEmbeddingAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ActivityEmbeddingAppHelper.kt
index 883c7e6..11e6bbe 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ActivityEmbeddingAppHelper.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ActivityEmbeddingAppHelper.kt
@@ -56,9 +56,7 @@
         launchSecondaryActivityFromButton(wmHelper, "launch_secondary_activity_rtl_button")
     }
 
-    /**
-     * Clicks the button to launch the secondary activity in a horizontal split.
-     */
+    /** Clicks the button to launch the secondary activity in a horizontal split. */
     fun launchSecondaryActivityHorizontally(wmHelper: WindowManagerStateHelper) {
         launchSecondaryActivityFromButton(wmHelper, "launch_secondary_activity_horizontally_button")
     }
@@ -67,7 +65,7 @@
     fun launchThirdActivity(wmHelper: WindowManagerStateHelper) {
         val launchButton =
             uiDevice.wait(
-                Until.findObject(By.res(getPackage(), "launch_third_activity_button")),
+                Until.findObject(By.res(packageName, "launch_third_activity_button")),
                 FIND_TIMEOUT
             )
         require(launchButton != null) { "Can't find launch third activity button on screen." }
@@ -86,17 +84,17 @@
      */
     fun launchTrampolineActivity(wmHelper: WindowManagerStateHelper) {
         val launchButton =
-                uiDevice.wait(
-                        Until.findObject(By.res(getPackage(), "launch_trampoline_button")),
-                        FIND_TIMEOUT
-                )
+            uiDevice.wait(
+                Until.findObject(By.res(packageName, "launch_trampoline_button")),
+                FIND_TIMEOUT
+            )
         require(launchButton != null) { "Can't find launch trampoline activity button on screen." }
         launchButton.click()
         wmHelper
-                .StateSyncBuilder()
-                .withActivityState(SECONDARY_ACTIVITY_COMPONENT, PlatformConsts.STATE_RESUMED)
-                .withActivityRemoved(TRAMPOLINE_ACTIVITY_COMPONENT)
-                .waitForAndVerify()
+            .StateSyncBuilder()
+            .withActivityState(SECONDARY_ACTIVITY_COMPONENT, PlatformConsts.STATE_RESUMED)
+            .withActivityRemoved(TRAMPOLINE_ACTIVITY_COMPONENT)
+            .waitForAndVerify()
     }
 
     /**
@@ -105,53 +103,45 @@
      */
     fun finishSecondaryActivity(wmHelper: WindowManagerStateHelper) {
         val finishButton =
-                uiDevice.wait(
-                        Until.findObject(By.res(getPackage(), "finish_secondary_activity_button")),
-                        FIND_TIMEOUT
-                )
+            uiDevice.wait(
+                Until.findObject(By.res(packageName, "finish_secondary_activity_button")),
+                FIND_TIMEOUT
+            )
         require(finishButton != null) { "Can't find finish secondary activity button on screen." }
         finishButton.click()
         wmHelper
-                .StateSyncBuilder()
-                .withActivityRemoved(SECONDARY_ACTIVITY_COMPONENT)
-                .waitForAndVerify()
-     }
+            .StateSyncBuilder()
+            .withActivityRemoved(SECONDARY_ACTIVITY_COMPONENT)
+            .waitForAndVerify()
+    }
 
-    /**
-     * Clicks the button to toggle the split ratio of secondary activity.
-     */
+    /** Clicks the button to toggle the split ratio of secondary activity. */
     fun changeSecondaryActivityRatio(wmHelper: WindowManagerStateHelper) {
         val launchButton =
-                uiDevice.wait(
-                        Until.findObject(
-                                By.res(getPackage(),
-                                        "toggle_split_ratio_button")),
-                        FIND_TIMEOUT
-                )
+            uiDevice.wait(
+                Until.findObject(By.res(packageName, "toggle_split_ratio_button")),
+                FIND_TIMEOUT
+            )
         require(launchButton != null) {
             "Can't find toggle ratio for secondary activity button on screen."
         }
         launchButton.click()
         wmHelper
-                .StateSyncBuilder()
-                .withAppTransitionIdle()
-                .withTransitionSnapshotGone()
-                .waitForAndVerify()
+            .StateSyncBuilder()
+            .withAppTransitionIdle()
+            .withTransitionSnapshotGone()
+            .waitForAndVerify()
     }
 
     fun secondaryActivityEnterPip(wmHelper: WindowManagerStateHelper) {
         val pipButton =
-                uiDevice.wait(
-                        Until.findObject(By.res(getPackage(), "secondary_enter_pip_button")),
-                        FIND_TIMEOUT
-                )
+            uiDevice.wait(
+                Until.findObject(By.res(packageName, "secondary_enter_pip_button")),
+                FIND_TIMEOUT
+            )
         require(pipButton != null) { "Can't find enter pip button on screen." }
         pipButton.click()
-        wmHelper
-                .StateSyncBuilder()
-                .withAppTransitionIdle()
-                .withPipShown()
-                .waitForAndVerify()
+        wmHelper.StateSyncBuilder().withAppTransitionIdle().withPipShown().waitForAndVerify()
     }
 
     /**
@@ -161,7 +151,7 @@
     fun launchAlwaysExpandActivity(wmHelper: WindowManagerStateHelper) {
         val launchButton =
             uiDevice.wait(
-                Until.findObject(By.res(getPackage(), "launch_always_expand_activity_button")),
+                Until.findObject(By.res(packageName, "launch_always_expand_activity_button")),
                 FIND_TIMEOUT
             )
         require(launchButton != null) {
@@ -171,23 +161,29 @@
         wmHelper
             .StateSyncBuilder()
             .withActivityState(ALWAYS_EXPAND_ACTIVITY_COMPONENT, PlatformConsts.STATE_RESUMED)
-            .withActivityState(MAIN_ACTIVITY_COMPONENT, PlatformConsts.STATE_PAUSED)
+            .withActivityState(
+                MAIN_ACTIVITY_COMPONENT,
+                PlatformConsts.STATE_PAUSED,
+                PlatformConsts.STATE_STOPPED
+            )
             .waitForAndVerify()
     }
 
     private fun launchSecondaryActivityFromButton(
-            wmHelper: WindowManagerStateHelper, buttonName: String) {
+        wmHelper: WindowManagerStateHelper,
+        buttonName: String
+    ) {
         val launchButton =
-                uiDevice.wait(Until.findObject(By.res(getPackage(), buttonName)), FIND_TIMEOUT)
+            uiDevice.wait(Until.findObject(By.res(packageName, buttonName)), FIND_TIMEOUT)
         require(launchButton != null) {
             "Can't find launch secondary activity button : " + buttonName + "on screen."
         }
         launchButton.click()
         wmHelper
-                .StateSyncBuilder()
-                .withActivityState(SECONDARY_ACTIVITY_COMPONENT, PlatformConsts.STATE_RESUMED)
-                .withActivityState(MAIN_ACTIVITY_COMPONENT, PlatformConsts.STATE_RESUMED)
-                .waitForAndVerify()
+            .StateSyncBuilder()
+            .withActivityState(SECONDARY_ACTIVITY_COMPONENT, PlatformConsts.STATE_RESUMED)
+            .withActivityState(MAIN_ACTIVITY_COMPONENT, PlatformConsts.STATE_RESUMED)
+            .waitForAndVerify()
     }
 
     /**
@@ -197,7 +193,7 @@
     fun launchPlaceholderSplit(wmHelper: WindowManagerStateHelper) {
         val launchButton =
             uiDevice.wait(
-                Until.findObject(By.res(getPackage(), "launch_placeholder_split_button")),
+                Until.findObject(By.res(packageName, "launch_placeholder_split_button")),
                 FIND_TIMEOUT
             )
         require(launchButton != null) { "Can't find launch placeholder split button on screen." }
@@ -216,7 +212,7 @@
     fun launchPlaceholderSplitRTL(wmHelper: WindowManagerStateHelper) {
         val launchButton =
             uiDevice.wait(
-                Until.findObject(By.res(getPackage(), "launch_placeholder_split_rtl_button")),
+                Until.findObject(By.res(packageName, "launch_placeholder_split_rtl_button")),
                 FIND_TIMEOUT
             )
         require(launchButton != null) { "Can't find launch placeholder split button on screen." }
@@ -252,7 +248,7 @@
                 .toFlickerComponent()
 
         val TRAMPOLINE_ACTIVITY_COMPONENT =
-                ActivityOptions.ActivityEmbedding.TrampolineActivity.COMPONENT.toFlickerComponent()
+            ActivityOptions.ActivityEmbedding.TrampolineActivity.COMPONENT.toFlickerComponent()
 
         @JvmStatic
         fun getWindowExtensions(): WindowExtensions? {
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/GameAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/GameAppHelper.kt
index 747cf37..3146139 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/GameAppHelper.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/GameAppHelper.kt
@@ -41,7 +41,7 @@
      */
     fun swipeDown(): Boolean {
         val gameView =
-            uiDevice.wait(Until.findObject(By.res(getPackage(), GAME_APP_VIEW_RES)), WAIT_TIME_MS)
+            uiDevice.wait(Until.findObject(By.res(packageName, GAME_APP_VIEW_RES)), WAIT_TIME_MS)
         require(gameView != null) { "Mock game app view not found." }
 
         val bound = gameView.getVisibleBounds()
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeAppHelper.kt
index d172252..252f7d3 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeAppHelper.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeAppHelper.kt
@@ -40,7 +40,7 @@
      */
     open fun openIME(wmHelper: WindowManagerStateHelper) {
         val editText =
-            uiDevice.wait(Until.findObject(By.res(getPackage(), "plain_text_input")), FIND_TIMEOUT)
+            uiDevice.wait(Until.findObject(By.res(packageName, "plain_text_input")), FIND_TIMEOUT)
 
         requireNotNull(editText) {
             "Text field not found, this usually happens when the device " +
@@ -67,7 +67,7 @@
     open fun finishActivity(wmHelper: WindowManagerStateHelper) {
         val finishButton =
             uiDevice.wait(
-                Until.findObject(By.res(getPackage(), "finish_activity_btn")),
+                Until.findObject(By.res(packageName, "finish_activity_btn")),
                 FIND_TIMEOUT
             )
         requireNotNull(finishButton) {
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeShownOnAppStartHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeShownOnAppStartHelper.kt
index 83a41ab..1a65611 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeShownOnAppStartHelper.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/ImeShownOnAppStartHelper.kt
@@ -71,7 +71,7 @@
             if (rotation.isRotated()) {
                 imePackageName
             } else {
-                getPackage()
+                packageName
             }
         open(expectedPackage)
     }
@@ -79,7 +79,7 @@
     fun startDialogThemedActivity(wmHelper: WindowManagerStateHelper) {
         val button =
             uiDevice.wait(
-                Until.findObject(By.res(getPackage(), "start_dialog_themed_activity_btn")),
+                Until.findObject(By.res(packageName, "start_dialog_themed_activity_btn")),
                 FIND_TIMEOUT
             )
 
@@ -132,7 +132,7 @@
     fun toggleFixPortraitOrientation(wmHelper: WindowManagerStateHelper) {
         val button =
             uiDevice.wait(
-                Until.findObject(By.res(getPackage(), "toggle_fixed_portrait_btn")),
+                Until.findObject(By.res(packageName, "toggle_fixed_portrait_btn")),
                 FIND_TIMEOUT
             )
         require(button != null) {
@@ -140,7 +140,7 @@
                 "was left in an unknown state (e.g. Screen turned off)"
         }
         button.click()
-        mInstrumentation.waitForIdleSync()
+        instrumentation.waitForIdleSync()
         // Ensure app relaunching transition finish and the IME has shown
         waitIMEShown(wmHelper)
     }
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/LetterboxAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/LetterboxAppHelper.kt
index d83b6d3..9b539c8 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/LetterboxAppHelper.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/LetterboxAppHelper.kt
@@ -38,7 +38,7 @@
         ActivityOptions.NonResizeablePortraitActivity.COMPONENT.toFlickerComponent()
 ) : StandardAppHelper(instr, launcherName, component) {
 
-    private val gestureHelper: GestureHelper = GestureHelper(mInstrumentation)
+    private val gestureHelper: GestureHelper = GestureHelper(instrumentation)
 
     fun clickRestart(wmHelper: WindowManagerStateHelper) {
         val restartButton =
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/MailAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/MailAppHelper.kt
index c98f1c4..9895bda 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/MailAppHelper.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/MailAppHelper.kt
@@ -37,7 +37,7 @@
 
     fun openMail(rowIdx: Int) {
         val rowSel =
-            By.res(getPackage(), "mail_row_item_text").textEndsWith(String.format("%04d", rowIdx))
+            By.res(packageName, "mail_row_item_text").textEndsWith(String.format("%04d", rowIdx))
         var row: UiObject2? = null
         for (i in 1..1000) {
             row = uiDevice.wait(Until.findObject(rowSel), SHORT_WAIT_TIME_MS)
@@ -46,7 +46,7 @@
         }
         require(row != null) { "" }
         row.click()
-        uiDevice.wait(Until.gone(By.res(getPackage(), MAIL_LIST_RES_ID)), FIND_TIMEOUT)
+        uiDevice.wait(Until.gone(By.res(packageName, MAIL_LIST_RES_ID)), FIND_TIMEOUT)
     }
 
     fun scrollDown() {
@@ -55,7 +55,7 @@
     }
 
     fun waitForMailList(): UiObject2 {
-        val sel = By.res(getPackage(), MAIL_LIST_RES_ID).scrollable(true)
+        val sel = By.res(packageName, MAIL_LIST_RES_ID).scrollable(true)
         val ret = uiDevice.wait(Until.findObject(sel), FIND_TIMEOUT)
         requireNotNull(ret) { "Unable to find $MAIL_LIST_RES_ID object" }
         return ret
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/NewTasksAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/NewTasksAppHelper.kt
index 5b3d308..b2f8d47 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/NewTasksAppHelper.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/NewTasksAppHelper.kt
@@ -36,7 +36,7 @@
 ) : StandardAppHelper(instr, launcherName, component) {
     fun openNewTask(device: UiDevice, wmHelper: WindowManagerStateHelper) {
         val button =
-            device.wait(Until.findObject(By.res(getPackage(), "launch_new_task")), FIND_TIMEOUT)
+            device.wait(Until.findObject(By.res(packageName, "launch_new_task")), FIND_TIMEOUT)
 
         requireNotNull(button) {
             "Button not found, this usually happens when the device " +
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/NotificationAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/NotificationAppHelper.kt
index 7665690..e60c20d 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/NotificationAppHelper.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/NotificationAppHelper.kt
@@ -35,7 +35,7 @@
 ) : StandardAppHelper(instr, launcherName, component) {
     fun postNotification(wmHelper: WindowManagerStateHelper) {
         val button =
-            uiDevice.wait(Until.findObject(By.res(getPackage(), "post_notification")), FIND_TIMEOUT)
+            uiDevice.wait(Until.findObject(By.res(packageName, "post_notification")), FIND_TIMEOUT)
 
         requireNotNull(button) {
             "Post notification button not found, this usually happens when the device " +
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/PipAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/PipAppHelper.kt
index c6b86f2..82d2ae0 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/PipAppHelper.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/PipAppHelper.kt
@@ -46,12 +46,14 @@
 
     private val mediaController: MediaController?
         get() =
-            mediaSessionManager.getActiveSessions(null).firstOrNull { it.packageName == `package` }
+            mediaSessionManager.getActiveSessions(null).firstOrNull {
+                it.packageName == packageName
+            }
 
-    private val gestureHelper: GestureHelper = GestureHelper(mInstrumentation)
+    private val gestureHelper: GestureHelper = GestureHelper(instrumentation)
 
     open fun clickObject(resId: String) {
-        val selector = By.res(`package`, resId)
+        val selector = By.res(packageName, resId)
         val obj = uiDevice.findObject(selector) ?: error("Could not find `$resId` object")
 
         obj.click()
@@ -250,13 +252,10 @@
             waitConditions = arrayOf(ConditionsFactory.hasPipWindow())
         )
 
-        val windowRegion = wmHelper.getWindowRegion(this)
-
         wmHelper
             .StateSyncBuilder()
             .withWindowSurfaceAppeared(this)
             .withPipShown()
-            .withSurfaceVisibleRegion(this, windowRegion)
             .waitForAndVerify()
     }
 
@@ -289,7 +288,7 @@
 
     fun checkWithCustomActionsCheckbox() =
         uiDevice
-            .findObject(By.res(`package`, WITH_CUSTOM_ACTIONS_BUTTON_ID))
+            .findObject(By.res(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")
@@ -305,7 +304,7 @@
         ReplaceWith("closePipWindow(wmHelper)")
     )
     open fun closePipWindow() {
-        closePipWindow(WindowManagerStateHelper(mInstrumentation))
+        closePipWindow(WindowManagerStateHelper(instrumentation))
     }
 
     /** Returns the pip window bounds. */
@@ -389,8 +388,10 @@
                 Log.d(TAG, "window " + pipAppWindow)
                 if (pipAppWindow == null) return@add false
                 val pipRegion = pipAppWindow.frameRegion
-                Log.d(TAG, "region " + pipRegion +
-                        " covers " + windowRect.coversMoreThan(pipRegion))
+                Log.d(
+                    TAG,
+                    "region " + pipRegion + " covers " + windowRect.coversMoreThan(pipRegion)
+                )
                 return@add windowRect.coversMoreThan(pipRegion)
             }
             .waitForAndVerify()
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/TransferSplashscreenAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/TransferSplashscreenAppHelper.kt
new file mode 100644
index 0000000..2a2b70e
--- /dev/null
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/TransferSplashscreenAppHelper.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.wm.flicker.helpers
+
+import android.app.Instrumentation
+import android.tools.common.traces.component.ComponentNameMatcher
+import android.tools.device.apphelpers.StandardAppHelper
+import android.tools.device.traces.parsers.toFlickerComponent
+import com.android.server.wm.flicker.testapp.ActivityOptions
+
+class TransferSplashscreenAppHelper
+@JvmOverloads
+constructor(
+    instr: Instrumentation,
+    launcherName: String = ActivityOptions.TransferSplashscreenActivity.LABEL,
+    component: ComponentNameMatcher =
+        ActivityOptions.TransferSplashscreenActivity.COMPONENT.toFlickerComponent()
+) : StandardAppHelper(instr, launcherName, component)
\ No newline at end of file
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/TwoActivitiesAppHelper.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/TwoActivitiesAppHelper.kt
index 895725c..8be5769 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/TwoActivitiesAppHelper.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/helpers/TwoActivitiesAppHelper.kt
@@ -40,7 +40,7 @@
         ActivityOptions.SimpleActivity.COMPONENT.toFlickerComponent()
 
     fun openSecondActivity(device: UiDevice, wmHelper: WindowManagerStateHelper) {
-        val launchActivityButton = By.res(getPackage(), LAUNCH_SECOND_ACTIVITY)
+        val launchActivityButton = By.res(packageName, LAUNCH_SECOND_ACTIVITY)
         val button = device.wait(Until.findObject(launchActivityButton), FIND_TIMEOUT)
 
         requireNotNull(button) {
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeOnDismissPopupDialogTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeOnDismissPopupDialogTest.kt
index 98446c1..47a1619 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeOnDismissPopupDialogTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeOnDismissPopupDialogTest.kt
@@ -24,7 +24,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.ImeEditorPopupDialogAppHelper
 import org.junit.FixMethodOrder
@@ -33,11 +32,10 @@
 import org.junit.runners.MethodSorters
 import org.junit.runners.Parameterized
 
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class CloseImeOnDismissPopupDialogTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
+class CloseImeOnDismissPopupDialogTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     private val imeTestApp = ImeEditorPopupDialogAppHelper(instrumentation)
 
     /** {@inheritDoc} */
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeOnDismissPopupDialogTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeOnDismissPopupDialogTestCfArm.kt
deleted file mode 100644
index d87a1da..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeOnDismissPopupDialogTestCfArm.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.ime
-
-import android.tools.common.Rotation
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class CloseImeOnDismissPopupDialogTestCfArm(flicker: LegacyFlickerTest) :
-    CloseImeOnDismissPopupDialogTest(flicker) {
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() =
-            LegacyFlickerTestFactory.nonRotationTests(
-                supportedRotations = listOf(Rotation.ROTATION_0)
-            )
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeOnGoHomeTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeOnGoHomeTest.kt
index b995d3df..48c54ea 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeOnGoHomeTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeOnGoHomeTest.kt
@@ -24,7 +24,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.ImeAppHelper
 import org.junit.FixMethodOrder
@@ -37,11 +36,10 @@
  * Test IME window closing to home transitions. To run this test: `atest
  * FlickerTests:CloseImeWindowToHomeTest`
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class CloseImeOnGoHomeTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
+class CloseImeOnGoHomeTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     private val testApp = ImeAppHelper(instrumentation)
 
     /** {@inheritDoc} */
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeOnGoHomeTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeOnGoHomeTestCfArm.kt
deleted file mode 100644
index 3b5bfa9..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeOnGoHomeTestCfArm.kt
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.ime
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class CloseImeOnGoHomeTestCfArm(flicker: LegacyFlickerTest) : CloseImeOnGoHomeTest(flicker)
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeShownOnAppStartOnGoHomeTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeShownOnAppStartOnGoHomeTest.kt
index 765bb4c..31d5d7f 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeShownOnAppStartOnGoHomeTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeShownOnAppStartOnGoHomeTest.kt
@@ -23,7 +23,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.ImeShownOnAppStartHelper
 import org.junit.FixMethodOrder
@@ -45,11 +44,10 @@
  *
  * To run this test: `atest FlickerTests:CloseImeAutoOpenWindowToHomeTest`
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class CloseImeShownOnAppStartOnGoHomeTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
+class CloseImeShownOnAppStartOnGoHomeTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     private val testApp = ImeShownOnAppStartHelper(instrumentation, flicker.scenario.startRotation)
 
     /** {@inheritDoc} */
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeShownOnAppStartOnGoHomeTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeShownOnAppStartOnGoHomeTestCfArm.kt
deleted file mode 100644
index 58411cc..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeShownOnAppStartOnGoHomeTestCfArm.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.ime
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class CloseImeShownOnAppStartOnGoHomeTestCfArm(flicker: LegacyFlickerTest) :
-    CloseImeShownOnAppStartOnGoHomeTest(flicker)
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeShownOnAppStartToAppOnPressBackTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeShownOnAppStartToAppOnPressBackTest.kt
index c87217b..180ae5d 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeShownOnAppStartToAppOnPressBackTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeShownOnAppStartToAppOnPressBackTest.kt
@@ -23,7 +23,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.ImeShownOnAppStartHelper
 import org.junit.FixMethodOrder
@@ -45,12 +44,10 @@
  *
  * To run this test: `atest FlickerTests:CloseImeAutoOpenWindowToAppTest`
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class CloseImeShownOnAppStartToAppOnPressBackTest(flicker: LegacyFlickerTest) :
-    BaseTest(flicker) {
+class CloseImeShownOnAppStartToAppOnPressBackTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     private val testApp = ImeShownOnAppStartHelper(instrumentation, flicker.scenario.startRotation)
 
     /** {@inheritDoc} */
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeShownOnAppStartToAppOnPressBackTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeShownOnAppStartToAppOnPressBackTestCfArm.kt
deleted file mode 100644
index 41b06c0..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeShownOnAppStartToAppOnPressBackTestCfArm.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.ime
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class CloseImeShownOnAppStartToAppOnPressBackTestCfArm(flicker: LegacyFlickerTest) :
-    CloseImeShownOnAppStartToAppOnPressBackTest(flicker)
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToAppOnPressBackTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToAppOnPressBackTest.kt
index c74870b..a0573b7 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToAppOnPressBackTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToAppOnPressBackTest.kt
@@ -23,7 +23,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.ImeAppHelper
 import com.android.server.wm.flicker.navBarLayerPositionAtStartAndEnd
@@ -38,11 +37,10 @@
  * Test IME window closing back to app window transitions. To run this test: `atest
  * FlickerTests:CloseImeWindowToAppTest`
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class CloseImeToAppOnPressBackTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
+class CloseImeToAppOnPressBackTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     private val testApp = ImeAppHelper(instrumentation)
 
     /** {@inheritDoc} */
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToAppOnPressBackTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToAppOnPressBackTestCfArm.kt
deleted file mode 100644
index 104af22..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToAppOnPressBackTestCfArm.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.ime
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class CloseImeToAppOnPressBackTestCfArm(flicker: LegacyFlickerTest) :
-    CloseImeToAppOnPressBackTest(flicker)
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToHomeOnFinishActivityTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToHomeOnFinishActivityTest.kt
index 21fd590..99858ce 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToHomeOnFinishActivityTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToHomeOnFinishActivityTest.kt
@@ -24,7 +24,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.ImeAppHelper
 import com.android.server.wm.flicker.helpers.SimpleAppHelper
@@ -40,11 +39,10 @@
  *
  * To run this test: `atest FlickerTests:OpenImeWindowAndCloseTest`
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class CloseImeToHomeOnFinishActivityTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
+class CloseImeToHomeOnFinishActivityTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     private val simpleApp = SimpleAppHelper(instrumentation)
     private val testApp = ImeAppHelper(instrumentation)
 
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToHomeOnFinishActivityTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToHomeOnFinishActivityTestCfArm.kt
deleted file mode 100644
index 0e18385..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeToHomeOnFinishActivityTestCfArm.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.ime
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class CloseImeToHomeOnFinishActivityTestCfArm(flicker: LegacyFlickerTest) :
-    CloseImeToHomeOnFinishActivityTest(flicker)
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppCfArmTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppCfArmTest.kt
deleted file mode 100644
index db80001..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppCfArmTest.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.ime
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class ShowImeOnAppStartWhenLaunchingAppCfArmTest(flicker: LegacyFlickerTest) :
-    ShowImeOnAppStartWhenLaunchingAppTest(flicker)
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromFixedOrientationTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromFixedOrientationTest.kt
index 44bd8c8..ea7c7c4 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromFixedOrientationTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromFixedOrientationTest.kt
@@ -19,15 +19,13 @@
 import android.platform.test.annotations.Postsubmit
 import android.platform.test.annotations.Presubmit
 import android.tools.common.Rotation
-import android.tools.common.Timestamp
-import android.tools.common.flicker.subject.exceptions.ExceptionMessageBuilder
-import android.tools.common.flicker.subject.exceptions.InvalidPropertyException
+import android.tools.common.flicker.subject.layers.LayerTraceEntrySubject
 import android.tools.common.traces.component.ComponentNameMatcher
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
+import androidx.test.filters.FlakyTest
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.ImeShownOnAppStartHelper
 import com.android.server.wm.flicker.helpers.setRotation
@@ -43,11 +41,10 @@
  * (e.g. Launcher activity). To run this test: `atest
  * FlickerTests:ShowImeOnAppStartWhenLaunchingAppFromFixedOrientationTest`
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ShowImeOnAppStartWhenLaunchingAppFromFixedOrientationTest(flicker: LegacyFlickerTest) :
+class ShowImeOnAppStartWhenLaunchingAppFromFixedOrientationTest(flicker: LegacyFlickerTest) :
     BaseTest(flicker) {
     private val imeTestApp =
         ImeShownOnAppStartHelper(instrumentation, flicker.scenario.startRotation)
@@ -82,47 +79,43 @@
         flicker.snapshotStartingWindowLayerCoversExactlyOnApp(imeTestApp)
     }
 
+    @FlakyTest(bugId = 290767483)
     @Postsubmit
     @Test
     fun imeLayerAlphaOneAfterSnapshotStartingWindowRemoval() {
-        // Check if the snapshot appeared during the trace
-        var imeSnapshotRemovedTimestamp: Timestamp? = null
+        val layerTrace = flicker.reader.readLayersTrace() ?: error("Unable to read layers trace")
 
-        val layerTrace = flicker.reader.readLayersTrace()
-        val layerTraceEntries = layerTrace?.entries?.toList() ?: emptyList()
+        // Find the entries immediately after the IME snapshot has disappeared
+        val imeSnapshotRemovedEntries =
+            layerTrace.entries
+                .asSequence()
+                .zipWithNext { prev, next ->
+                    if (
+                        ComponentNameMatcher.SNAPSHOT.layerMatchesAnyOf(prev.visibleLayers) &&
+                            !ComponentNameMatcher.SNAPSHOT.layerMatchesAnyOf(next.visibleLayers)
+                    ) {
+                        next
+                    } else {
+                        null
+                    }
+                }
+                .filterNotNull()
 
-        layerTraceEntries.zipWithNext { prev, next ->
-            val prevSnapshotLayerVisible =
-                ComponentNameMatcher.SNAPSHOT.layerMatchesAnyOf(prev.visibleLayers)
-            val nextSnapshotLayerVisible =
-                ComponentNameMatcher.SNAPSHOT.layerMatchesAnyOf(next.visibleLayers)
+        // If we find it, make sure the IME is visible and fully animated in.
+        imeSnapshotRemovedEntries.forEach { entry ->
+            val entrySubject = LayerTraceEntrySubject(entry)
+            val imeLayerSubjects =
+                entrySubject.subjects.filter {
+                    ComponentNameMatcher.IME.layerMatchesAnyOf(it.layer) && it.isVisible
+                }
 
-            if (
-                imeSnapshotRemovedTimestamp == null &&
-                    (prevSnapshotLayerVisible && !nextSnapshotLayerVisible)
-            ) {
-                imeSnapshotRemovedTimestamp = next.timestamp
-            }
-        }
+            entrySubject
+                .check { "InputMethod must exist and be visible" }
+                .that(imeLayerSubjects.isNotEmpty())
+                .isEqual(true)
 
-        // if so, make an assertion
-        imeSnapshotRemovedTimestamp?.let { timestamp ->
-            val stateAfterSnapshot =
-                layerTrace?.getEntryAt(timestamp) ?: error("State not found for $timestamp")
-
-            val imeLayers =
-                ComponentNameMatcher.IME.filterLayers(stateAfterSnapshot.visibleLayers.toList())
-
-            require(imeLayers.isNotEmpty()) { "IME layer not found" }
-            if (imeLayers.any { it.color.a != 1.0f }) {
-                val errorMsgBuilder =
-                    ExceptionMessageBuilder()
-                        .setTimestamp(timestamp)
-                        .forInvalidProperty("IME layer alpha")
-                        .setExpected("is 1.0")
-                        .setActual("not 1.0")
-                        .addExtraDescription("Filter", ComponentNameMatcher.IME.toLayerIdentifier())
-                throw InvalidPropertyException(errorMsgBuilder)
+            imeLayerSubjects.forEach { imeLayerSubject ->
+                imeLayerSubject.check { "alpha" }.that(imeLayerSubject.layer.color.a).isEqual(1.0f)
             }
         }
     }
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromFixedOrientationTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromFixedOrientationTestCfArm.kt
deleted file mode 100644
index 6d9ea22..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromFixedOrientationTestCfArm.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.ime
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class ShowImeOnAppStartWhenLaunchingAppFromFixedOrientationTestCfArm(flicker: LegacyFlickerTest) :
-    ShowImeOnAppStartWhenLaunchingAppFromFixedOrientationTest(flicker)
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromOverviewTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromOverviewTest.kt
index ae05e37..05babd67 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromOverviewTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromOverviewTest.kt
@@ -24,7 +24,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import android.tools.device.helpers.reopenAppFromOverview
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.ImeShownOnAppStartHelper
 import com.android.server.wm.flicker.helpers.setRotation
@@ -37,11 +36,10 @@
 /**
  * Test IME window opening transitions. To run this test: `atest FlickerTests:ReOpenImeWindowTest`
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ShowImeOnAppStartWhenLaunchingAppFromOverviewTest(flicker: LegacyFlickerTest) :
+class ShowImeOnAppStartWhenLaunchingAppFromOverviewTest(flicker: LegacyFlickerTest) :
     BaseTest(flicker) {
     private val testApp = ImeShownOnAppStartHelper(instrumentation, flicker.scenario.startRotation)
 
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromOverviewTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromOverviewTestCfArm.kt
deleted file mode 100644
index 92b3968..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromOverviewTestCfArm.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.ime
-
-import android.tools.common.Rotation
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class ShowImeOnAppStartWhenLaunchingAppFromOverviewTestCfArm(flicker: LegacyFlickerTest) :
-    ShowImeOnAppStartWhenLaunchingAppFromOverviewTest(flicker) {
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() =
-            LegacyFlickerTestFactory.nonRotationTests(
-                supportedRotations = listOf(Rotation.ROTATION_0)
-            )
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromQuickSwitchTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromQuickSwitchTest.kt
index c991651..aff8e65 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromQuickSwitchTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromQuickSwitchTest.kt
@@ -24,7 +24,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.ImeShownOnAppStartHelper
 import com.android.server.wm.flicker.helpers.SimpleAppHelper
@@ -39,12 +38,11 @@
  * Test IME windows switching with 2-Buttons or gestural navigation. To run this test: `atest
  * FlickerTests:SwitchImeWindowsFromGestureNavTest`
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 @Presubmit
-open class ShowImeOnAppStartWhenLaunchingAppFromQuickSwitchTest(flicker: LegacyFlickerTest) :
+class ShowImeOnAppStartWhenLaunchingAppFromQuickSwitchTest(flicker: LegacyFlickerTest) :
     BaseTest(flicker) {
     private val testApp = SimpleAppHelper(instrumentation)
     private val imeTestApp =
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromQuickSwitchTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromQuickSwitchTestCfArm.kt
deleted file mode 100644
index 09bfacc..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppFromQuickSwitchTestCfArm.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.ime
-
-import android.platform.test.annotations.Presubmit
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Presubmit
-open class ShowImeOnAppStartWhenLaunchingAppFromQuickSwitchTestCfArm(flicker: LegacyFlickerTest) :
-    ShowImeOnAppStartWhenLaunchingAppFromQuickSwitchTest(flicker)
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppTest.kt
index 9763521..4ffdcea 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeOnAppStartWhenLaunchingAppTest.kt
@@ -23,7 +23,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.ImeShownOnAppStartHelper
 import com.android.server.wm.flicker.helpers.ImeStateInitializeHelper
@@ -75,11 +74,10 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ShowImeOnAppStartWhenLaunchingAppTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
+class ShowImeOnAppStartWhenLaunchingAppTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     private val testApp = ImeShownOnAppStartHelper(instrumentation, flicker.scenario.startRotation)
     private val initializeApp = ImeStateInitializeHelper(instrumentation)
 
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhenFocusingOnInputFieldTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhenFocusingOnInputFieldTest.kt
index 7bd5825..918e1ea 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhenFocusingOnInputFieldTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhenFocusingOnInputFieldTest.kt
@@ -23,7 +23,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.ImeAppHelper
 import org.junit.FixMethodOrder
@@ -33,11 +32,10 @@
 import org.junit.runners.Parameterized
 
 /** Test IME window opening transitions. To run this test: `atest FlickerTests:OpenImeWindowTest` */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ShowImeWhenFocusingOnInputFieldTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
+class ShowImeWhenFocusingOnInputFieldTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     private val testApp = ImeAppHelper(instrumentation)
 
     /** {@inheritDoc} */
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhenFocusingOnInputFieldTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhenFocusingOnInputFieldTestCfArm.kt
deleted file mode 100644
index f8c8149..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhenFocusingOnInputFieldTestCfArm.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.ime
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class ShowImeWhenFocusingOnInputFieldTestCfArm(flicker: LegacyFlickerTest) :
-    ShowImeWhenFocusingOnInputFieldTest(flicker)
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhileDismissingThemedPopupDialogTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhileDismissingThemedPopupDialogTest.kt
index 0b168ba..6ad235c 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhileDismissingThemedPopupDialogTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhileDismissingThemedPopupDialogTest.kt
@@ -26,7 +26,6 @@
 import android.view.WindowInsets.Type.ime
 import android.view.WindowInsets.Type.navigationBars
 import android.view.WindowInsets.Type.statusBars
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.ImeShownOnAppStartHelper
 import org.junit.Assert.assertFalse
@@ -41,12 +40,10 @@
  * Test IME snapshot mechanism won't apply when transitioning from non-IME focused dialog activity.
  * To run this test: `atest FlickerTests:LaunchAppShowImeAndDialogThemeAppTest`
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ShowImeWhileDismissingThemedPopupDialogTest(flicker: LegacyFlickerTest) :
-    BaseTest(flicker) {
+class ShowImeWhileDismissingThemedPopupDialogTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     private val testApp = ImeShownOnAppStartHelper(instrumentation, flicker.scenario.startRotation)
 
     /** {@inheritDoc} */
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhileDismissingThemedPopupDialogTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhileDismissingThemedPopupDialogTestCfArm.kt
deleted file mode 100644
index ad41b81..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhileDismissingThemedPopupDialogTestCfArm.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.ime
-
-import android.tools.common.Rotation
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class ShowImeWhileDismissingThemedPopupDialogTestCfArm(flicker: LegacyFlickerTest) :
-    ShowImeWhileDismissingThemedPopupDialogTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() =
-            LegacyFlickerTestFactory.nonRotationTests(
-                supportedRotations = listOf(Rotation.ROTATION_0)
-            )
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhileEnteringOverviewTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhileEnteringOverviewTest.kt
index 7722c93..f1bc125 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhileEnteringOverviewTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhileEnteringOverviewTest.kt
@@ -24,7 +24,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import android.tools.device.traces.parsers.WindowManagerStateHelper
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.ImeShownOnAppStartHelper
 import com.android.server.wm.flicker.navBarLayerIsVisibleAtStartAndEnd
@@ -41,11 +40,10 @@
  * Test IME window layer will be associated with the app task when going to the overview screen. To
  * run this test: `atest FlickerTests:OpenImeWindowToOverViewTest`
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ShowImeWhileEnteringOverviewTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
+class ShowImeWhileEnteringOverviewTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     private val imeTestApp =
         ImeShownOnAppStartHelper(instrumentation, flicker.scenario.startRotation)
 
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhileEnteringOverviewTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhileEnteringOverviewTestCfArm.kt
deleted file mode 100644
index 90fbbf9..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/ShowImeWhileEnteringOverviewTestCfArm.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.ime
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class ShowImeWhileEnteringOverviewTestCfArm(flicker: LegacyFlickerTest) :
-    ShowImeWhileEnteringOverviewTest(flicker)
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/ActivityTransitionTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/ActivityTransitionTest.kt
index 3461907..89ab41e 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/ActivityTransitionTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/ActivityTransitionTest.kt
@@ -23,7 +23,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import android.tools.device.traces.parsers.toFlickerComponent
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.TwoActivitiesAppHelper
 import com.android.server.wm.flicker.testapp.ActivityOptions
@@ -53,11 +52,10 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ActivityTransitionTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
+class ActivityTransitionTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     private val testApp: TwoActivitiesAppHelper = TwoActivitiesAppHelper(instrumentation)
 
     /** {@inheritDoc} */
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/ActivityTransitionTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/ActivityTransitionTestCfArm.kt
deleted file mode 100644
index 6bbf40e..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/ActivityTransitionTestCfArm.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.launch
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class ActivityTransitionTestCfArm(flicker: LegacyFlickerTest) : ActivityTransitionTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() = LegacyFlickerTestFactory.nonRotationTests()
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIconColdTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIconColdTest.kt
index ae1f78a..ec792ca2 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIconColdTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIconColdTest.kt
@@ -23,7 +23,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import android.tools.device.flicker.rules.RemoveAllTasksButHomeRule
-import androidx.test.filters.RequiresDevice
 import org.junit.FixMethodOrder
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -51,12 +50,11 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 open class OpenAppFromIconColdTest(flicker: LegacyFlickerTest) :
-    OpenAppFromLauncherTransition(flicker) {
+        OpenAppFromLauncherTransition(flicker) {
     /** {@inheritDoc} */
     override val transition: FlickerBuilder.() -> Unit
         get() = {
@@ -73,8 +71,8 @@
                 tapl
                     .goHome()
                     .switchToAllApps()
-                    .getAppIcon(testApp.launcherName)
-                    .launch(testApp.`package`)
+                    .getAppIcon(testApp.appName)
+                    .launch(testApp.packageName)
             }
             teardown { testApp.exit(wmHelper) }
         }
@@ -90,6 +88,7 @@
     override fun appWindowReplacesLauncherAsTopWindow() {
         super.appWindowReplacesLauncherAsTopWindow()
     }
+
     @FlakyTest(bugId = 240916028)
     @Test
     override fun appWindowAsTopWindowAtEnd() {
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIconColdTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIconColdTestCfArm.kt
deleted file mode 100644
index 4fd4a61..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIconColdTestCfArm.kt
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.launch
-
-import android.platform.test.annotations.FlakyTest
-import android.tools.common.flicker.annotation.FlickerServiceCompatible
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/** Some assertions will fail because of b/264415996 */
-@FlickerServiceCompatible
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class OpenAppFromIconColdTestCfArm(flicker: LegacyFlickerTest) : OpenAppFromIconColdTest(flicker) {
-    @Test
-    @FlakyTest
-    override fun visibleLayersShownMoreThanOneConsecutiveEntry() {
-        super.visibleLayersShownMoreThanOneConsecutiveEntry()
-    }
-
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() = LegacyFlickerTestFactory.nonRotationTests()
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdAfterCameraTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdAfterCameraTest.kt
index c95c548..f575fcc 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdAfterCameraTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdAfterCameraTest.kt
@@ -21,7 +21,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import org.junit.FixMethodOrder
 import org.junit.runner.RunWith
 import org.junit.runners.MethodSorters
@@ -34,11 +33,10 @@
  *
  * Notes: Some default assertions are inherited [OpenAppTransition]
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class OpenAppFromIntentColdAfterCameraTest(flicker: LegacyFlickerTest) :
+class OpenAppFromIntentColdAfterCameraTest(flicker: LegacyFlickerTest) :
     OpenAppFromLauncherTransition(flicker) {
     private val cameraApp = CameraAppHelper(instrumentation)
     /** {@inheritDoc} */
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdAfterCameraTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdAfterCameraTestCfArm.kt
deleted file mode 100644
index 117cff2..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdAfterCameraTestCfArm.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.launch
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class OpenAppFromIntentColdAfterCameraTestCfArm(flicker: LegacyFlickerTest) :
-    OpenAppFromIntentColdAfterCameraTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() = LegacyFlickerTestFactory.nonRotationTests()
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdTest.kt
index e39a578..93d0520 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdTest.kt
@@ -24,7 +24,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import android.tools.device.flicker.rules.RemoveAllTasksButHomeRule.Companion.removeAllTasksButHome
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.helpers.setRotation
 import org.junit.FixMethodOrder
 import org.junit.Test
@@ -53,12 +52,11 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @FlickerServiceCompatible
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class OpenAppFromIntentColdTest(flicker: LegacyFlickerTest) :
+class OpenAppFromIntentColdTest(flicker: LegacyFlickerTest) :
     OpenAppFromLauncherTransition(flicker) {
     /** {@inheritDoc} */
     override val transition: FlickerBuilder.() -> Unit
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdTestCfArm.kt
deleted file mode 100644
index 6d0b6f4..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentColdTestCfArm.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.launch
-
-import android.platform.test.annotations.FlakyTest
-import android.tools.common.flicker.annotation.FlickerServiceCompatible
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@FlickerServiceCompatible
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class OpenAppFromIntentColdTestCfArm(flicker: LegacyFlickerTest) :
-    OpenAppFromIntentColdTest(flicker) {
-    @FlakyTest(bugId = 273696733)
-    @Test
-    override fun appLayerReplacesLauncher() = super.appLayerReplacesLauncher()
-
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() = LegacyFlickerTestFactory.nonRotationTests()
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentWarmTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentWarmTest.kt
index d2c3807..0197e66 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentWarmTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentWarmTest.kt
@@ -23,7 +23,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.helpers.setRotation
 import org.junit.FixMethodOrder
 import org.junit.Test
@@ -53,12 +52,11 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @FlickerServiceCompatible
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class OpenAppFromIntentWarmTest(flicker: LegacyFlickerTest) :
+class OpenAppFromIntentWarmTest(flicker: LegacyFlickerTest) :
     OpenAppFromLauncherTransition(flicker) {
     /** Defines the transition used to run the test */
     override val transition: FlickerBuilder.() -> Unit
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentWarmTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentWarmTestCfArm.kt
deleted file mode 100644
index 3e0958a..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromIntentWarmTestCfArm.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.launch
-
-import android.tools.common.flicker.annotation.FlickerServiceCompatible
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@FlickerServiceCompatible
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class OpenAppFromIntentWarmTestCfArm(flicker: LegacyFlickerTest) :
-    OpenAppFromIntentWarmTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() = LegacyFlickerTestFactory.nonRotationTests()
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLauncherTransition.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLauncherTransition.kt
index 62fb570..4fc9bcb 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLauncherTransition.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLauncherTransition.kt
@@ -30,7 +30,7 @@
     @Presubmit
     @Test
     open fun focusChanges() {
-        flicker.assertEventLog { this.focusChanges("NexusLauncherActivity", testApp.`package`) }
+        flicker.assertEventLog { this.focusChanges("NexusLauncherActivity", testApp.packageName) }
     }
 
     /**
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockscreenTransition.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockscreenTransition.kt
index 687bc19..36e66c7 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockscreenTransition.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockscreenTransition.kt
@@ -46,7 +46,7 @@
     @Presubmit
     @Test
     open fun focusChanges() {
-        flicker.assertEventLog { this.focusChanges("", testApp.`package`) }
+        flicker.assertEventLog { this.focusChanges("", testApp.packageName) }
     }
 
     /**
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockscreenViaIntentTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockscreenViaIntentTest.kt
index 7a16060..e0fb751 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockscreenViaIntentTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromLockscreenViaIntentTest.kt
@@ -71,7 +71,7 @@
      * Checks that the [ComponentNameMatcher.NAV_BAR] layer starts invisible, becomes visible during
      * unlocking animation and remains visible at the end
      */
-    @Presubmit
+    @FlakyTest(bugId = 288341660)
     @Test
     fun navBarLayerVisibilityChanges() {
         Assume.assumeFalse(flicker.scenario.isTablet)
@@ -93,7 +93,7 @@
      * Checks that the [ComponentNameMatcher.NAV_BAR] starts the transition invisible, then becomes
      * visible during the unlocking animation and remains visible at the end of the transition
      */
-    @Presubmit
+    @FlakyTest(bugId = 293581770)
     @Test
     fun navBarWindowsVisibilityChanges() {
         Assume.assumeFalse(flicker.scenario.isTablet)
@@ -200,7 +200,7 @@
     override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
         super.visibleWindowsShownMoreThanOneConsecutiveEntry()
 
-    @FlakyTest(bugId = 251217585)
+    @FlakyTest(bugId = 285980483)
     @Test
     override fun focusChanges() {
         super.focusChanges()
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTest.kt
index eec6bfd..f1cd69a 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTest.kt
@@ -24,7 +24,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.helpers.setRotation
 import org.junit.FixMethodOrder
 import org.junit.Test
@@ -55,13 +54,11 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @FlickerServiceCompatible
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class OpenAppFromOverviewTest(flicker: LegacyFlickerTest) :
-    OpenAppFromLauncherTransition(flicker) {
+class OpenAppFromOverviewTest(flicker: LegacyFlickerTest) : OpenAppFromLauncherTransition(flicker) {
 
     /** Defines the transition used to run the test */
     override val transition: FlickerBuilder.() -> Unit
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTestCfArm.kt
deleted file mode 100644
index ab6a1ea..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenAppFromOverviewTestCfArm.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.launch
-
-import android.tools.common.flicker.annotation.FlickerServiceCompatible
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/** Some assertions will fail because of b/264415996 */
-@FlickerServiceCompatible
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class OpenAppFromOverviewTestCfArm(flicker: LegacyFlickerTest) :
-    OpenAppFromOverviewTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() = LegacyFlickerTestFactory.nonRotationTests()
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenTransferSplashscreenAppFromLauncherTransition.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenTransferSplashscreenAppFromLauncherTransition.kt
new file mode 100644
index 0000000..1fdef3c
--- /dev/null
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/OpenTransferSplashscreenAppFromLauncherTransition.kt
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.wm.flicker.launch
+
+import android.platform.test.annotations.Presubmit
+import android.tools.common.traces.component.ComponentNameMatcher
+import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
+import android.tools.device.flicker.legacy.LegacyFlickerTest
+import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
+import androidx.test.filters.RequiresDevice
+import com.android.server.wm.flicker.helpers.TransferSplashscreenAppHelper
+import org.junit.FixMethodOrder
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.MethodSorters
+import org.junit.runners.Parameterized
+
+/**
+ * Test cold launching an app from launcher
+ *
+ * To run this test: `atest FlickerTests:OpenTransferSplashscreenAppFromLauncherTransition`
+ *
+ * Actions:
+ * ```
+ *     Inherit from OpenAppFromIconColdTest, Launch an app [testApp] with an animated splash screen
+ *     by clicking it's icon on all apps, and wait for transfer splash screen complete
+ * ```
+ *
+ * Notes:
+ * ```
+ *     1. Some default assertions (e.g., nav bar, status bar and screen covered)
+ *        are inherited [OpenAppTransition]
+ *     2. Verify no flickering when transfer splash screen to app window.
+ * ```
+ */
+
+@RequiresDevice
+@RunWith(Parameterized::class)
+@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+class OpenTransferSplashscreenAppFromLauncherTransition(flicker: LegacyFlickerTest) :
+        OpenAppFromIconColdTest(flicker) {
+    override val testApp = TransferSplashscreenAppHelper(instrumentation)
+
+    /**
+     * Checks that [ComponentNameMatcher.LAUNCHER] window is the top window at the start of the
+     * transition, and is replaced by [ComponentNameMatcher.SPLASH_SCREEN], then [testApp] remains
+     * visible until the end
+     */
+    @Presubmit
+    @Test
+    fun appWindowAfterSplash() {
+        flicker.assertWm {
+            this.isAppWindowOnTop(ComponentNameMatcher.LAUNCHER)
+                    .then()
+                    .isAppWindowOnTop(ComponentNameMatcher.SPLASH_SCREEN)
+                    .then()
+                    .isAppWindowOnTop(testApp)
+                    .isAppWindowInvisible(ComponentNameMatcher.SPLASH_SCREEN)
+        }
+    }
+
+    companion object {
+        /**
+         * Creates the test configurations.
+         *
+         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
+         * navigation modes.
+         */
+        @Parameterized.Parameters(name = "{0}")
+        @JvmStatic
+        fun getParams() = LegacyFlickerTestFactory.nonRotationTests()
+    }
+}
\ No newline at end of file
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/TaskTransitionTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/TaskTransitionTest.kt
index 39c8ca0..df9780e 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/launch/TaskTransitionTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/launch/TaskTransitionTest.kt
@@ -21,6 +21,7 @@
 import android.content.res.Resources
 import android.platform.test.annotations.FlakyTest
 import android.platform.test.annotations.Presubmit
+import android.tools.common.flicker.subject.layers.LayersTraceSubject.Companion.VISIBLE_FOR_MORE_THAN_ONE_ENTRY_IGNORE_LAYERS
 import android.tools.common.traces.component.ComponentNameMatcher
 import android.tools.common.traces.component.ComponentNameMatcher.Companion.SPLASH_SCREEN
 import android.tools.common.traces.component.ComponentNameMatcher.Companion.WALLPAPER_BBQ_WRAPPER
@@ -121,7 +122,7 @@
     @FlakyTest(bugId = 265007895)
     @Test
     fun transitionHasColorBackground() {
-        val backgroundColorLayer = ComponentNameMatcher("", "Animation Background")
+        val backgroundColorLayer = ComponentNameMatcher("", "animation-background")
         val displayBounds = WindowUtils.getDisplayBounds(flicker.scenario.startRotation)
         flicker.assertLayers {
             this.invoke("LAUNCH_NEW_TASK_ACTIVITY coversExactly displayBounds") {
@@ -190,6 +191,16 @@
         }
     }
 
+    @Presubmit
+    @Test
+    override fun visibleLayersShownMoreThanOneConsecutiveEntry() {
+        flicker.assertLayers {
+            this.visibleLayersShownMoreThanOneConsecutiveEntry(
+                VISIBLE_FOR_MORE_THAN_ONE_ENTRY_IGNORE_LAYERS + listOf(launchNewTaskApp)
+            )
+        }
+    }
+
     companion object {
         private fun getWallpaperPackage(instrumentation: Instrumentation): IComponentMatcher {
             val wallpaperManager = WallpaperManager.getInstance(instrumentation.targetContext)
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/Consts.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/Consts.kt
new file mode 100644
index 0000000..b81439e
--- /dev/null
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/Consts.kt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.wm.flicker.notification
+
+import android.tools.common.traces.component.ComponentNameMatcher
+
+object Consts {
+    val IMAGE_WALLPAPER = ComponentNameMatcher("", "com.android.systemui.wallpapers.ImageWallpaper")
+}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OWNERS b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OWNERS
new file mode 100644
index 0000000..68c37bd
--- /dev/null
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OWNERS
@@ -0,0 +1,2 @@
+# Android > Android OS & Apps > System UI > Internal Only > Notifications
+# https://b.corp.google.com/issues/new?component=181562&template=686802
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromLockscreenNotificationColdTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromLockscreenNotificationColdTest.kt
index 6f5daeb..6819a38 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromLockscreenNotificationColdTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromLockscreenNotificationColdTest.kt
@@ -17,8 +17,10 @@
 package com.android.server.wm.flicker.notification
 
 import android.platform.test.annotations.Postsubmit
+import android.platform.test.annotations.Presubmit
 import android.platform.test.rule.SettingOverrideRule
 import android.provider.Settings
+import android.tools.common.traces.component.ComponentNameMatcher
 import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
@@ -107,6 +109,21 @@
     override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
         super.visibleLayersShownMoreThanOneConsecutiveEntry()
 
+    @Presubmit
+    @Test
+    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() {
+        flicker.assertWm {
+            this.visibleWindowsShownMoreThanOneConsecutiveEntry(
+                listOf(
+                    ComponentNameMatcher.SPLASH_SCREEN,
+                    ComponentNameMatcher.SNAPSHOT,
+                    ComponentNameMatcher.SECONDARY_HOME_HANDLE,
+                    Consts.IMAGE_WALLPAPER
+                )
+            )
+        }
+    }
+
     companion object {
         /**
          * Creates the test configurations.
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromLockscreenNotificationWarmTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromLockscreenNotificationWarmTest.kt
index 483caa7..bf0f4ab 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromLockscreenNotificationWarmTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromLockscreenNotificationWarmTest.kt
@@ -139,6 +139,21 @@
     override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
         super.visibleLayersShownMoreThanOneConsecutiveEntry()
 
+    @Presubmit
+    @Test
+    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() {
+        flicker.assertWm {
+            this.visibleWindowsShownMoreThanOneConsecutiveEntry(
+                listOf(
+                    ComponentNameMatcher.SPLASH_SCREEN,
+                    ComponentNameMatcher.SNAPSHOT,
+                    ComponentNameMatcher.SECONDARY_HOME_HANDLE,
+                    Consts.IMAGE_WALLPAPER
+                )
+            )
+        }
+    }
+
     companion object {
         /**
          * Creates the test configurations.
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromLockscreenNotificationWithOverlayAppTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromLockscreenNotificationWithOverlayAppTest.kt
index 4e8a697..3f3542d 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromLockscreenNotificationWithOverlayAppTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromLockscreenNotificationWithOverlayAppTest.kt
@@ -59,6 +59,10 @@
         get() = {
             super.transition(this)
 
+            transitions {
+                wmHelper.StateSyncBuilder().withFullScreenApp(testApp).waitForAndVerify()
+            }
+
             setup {
                 device.wakeUpAndGoToHomeScreen()
 
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromNotificationColdTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromNotificationColdTest.kt
index 50dec3b..fbdba7b 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromNotificationColdTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromNotificationColdTest.kt
@@ -23,7 +23,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.statusBarLayerPositionAtEnd
 import org.junit.FixMethodOrder
 import org.junit.Ignore
@@ -37,7 +36,6 @@
  *
  * To run this test: `atest FlickerTests:OpenAppFromNotificationCold`
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromNotificationColdTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromNotificationColdTestCfArm.kt
deleted file mode 100644
index a147171..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromNotificationColdTestCfArm.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.notification
-
-import android.platform.test.annotations.Postsubmit
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Postsubmit
-class OpenAppFromNotificationColdTestCfArm(flicker: LegacyFlickerTest) :
-    OpenAppFromNotificationColdTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() = LegacyFlickerTestFactory.nonRotationTests()
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromNotificationWarmTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromNotificationWarmTest.kt
index 19a070b..2aa444e 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromNotificationWarmTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromNotificationWarmTest.kt
@@ -26,7 +26,6 @@
 import android.tools.device.helpers.wakeUpAndGoToHomeScreen
 import android.view.WindowInsets
 import android.view.WindowManager
-import androidx.test.filters.RequiresDevice
 import androidx.test.uiautomator.By
 import androidx.test.uiautomator.Until
 import com.android.server.wm.flicker.helpers.NotificationAppHelper
@@ -49,7 +48,6 @@
  *
  * To run this test: `atest FlickerTests:OpenAppFromNotificationWarm`
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
@@ -69,7 +67,11 @@
                 wmHelper.StateSyncBuilder().withFullScreenApp(testApp).waitForAndVerify()
                 testApp.postNotification(wmHelper)
                 device.pressHome()
-                wmHelper.StateSyncBuilder().withHomeActivityVisible().waitForAndVerify()
+                wmHelper
+                    .StateSyncBuilder()
+                    .withHomeActivityVisible()
+                    .withWindowSurfaceDisappeared(ComponentNameMatcher.NOTIFICATION_SHADE)
+                    .waitForAndVerify()
             }
 
             transitions {
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromNotificationWarmTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromNotificationWarmTestCfArm.kt
deleted file mode 100644
index 98356d7..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/notification/OpenAppFromNotificationWarmTestCfArm.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.notification
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class OpenAppFromNotificationWarmTestCfArm(flicker: LegacyFlickerTest) :
-    OpenAppFromNotificationWarmTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.nonRotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() = LegacyFlickerTestFactory.nonRotationTests()
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchBetweenTwoAppsBackTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchBetweenTwoAppsBackTest.kt
index 7883910..50ff62b 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchBetweenTwoAppsBackTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchBetweenTwoAppsBackTest.kt
@@ -25,7 +25,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.NonResizeableAppHelper
 import com.android.server.wm.flicker.helpers.SimpleAppHelper
@@ -48,11 +47,10 @@
  *     Swipe right from the bottom of the screen to quick switch back to the first app [testApp1]
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class QuickSwitchBetweenTwoAppsBackTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
+class QuickSwitchBetweenTwoAppsBackTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     private val testApp1 = SimpleAppHelper(instrumentation)
     private val testApp2 = NonResizeableAppHelper(instrumentation)
 
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchBetweenTwoAppsBackTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchBetweenTwoAppsBackTestCfArm.kt
deleted file mode 100644
index f68cd5c..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchBetweenTwoAppsBackTestCfArm.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.quickswitch
-
-import android.tools.common.NavBar
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class QuickSwitchBetweenTwoAppsBackTestCfArm(flicker: LegacyFlickerTest) :
-    QuickSwitchBetweenTwoAppsBackTest(flicker) {
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() =
-            LegacyFlickerTestFactory.nonRotationTests(
-                supportedNavigationModes = listOf(NavBar.MODE_GESTURAL)
-            )
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchBetweenTwoAppsForwardTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchBetweenTwoAppsForwardTest.kt
index 1c4c7cd..aee9163 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchBetweenTwoAppsForwardTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchBetweenTwoAppsForwardTest.kt
@@ -25,7 +25,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.NonResizeableAppHelper
 import com.android.server.wm.flicker.helpers.SimpleAppHelper
@@ -49,11 +48,10 @@
  *     Swipe left from the bottom of the screen to quick switch forward to the second app [testApp2]
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class QuickSwitchBetweenTwoAppsForwardTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
+class QuickSwitchBetweenTwoAppsForwardTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     private val testApp1 = SimpleAppHelper(instrumentation)
     private val testApp2 = NonResizeableAppHelper(instrumentation)
 
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchBetweenTwoAppsForwardTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchBetweenTwoAppsForwardTestCfArm.kt
deleted file mode 100644
index 3de58ac..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchBetweenTwoAppsForwardTestCfArm.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.quickswitch
-
-import android.tools.common.NavBar
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class QuickSwitchBetweenTwoAppsForwardTestCfArm(flicker: LegacyFlickerTest) :
-    QuickSwitchBetweenTwoAppsForwardTest(flicker) {
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() =
-            LegacyFlickerTestFactory.nonRotationTests(
-                supportedNavigationModes = listOf(NavBar.MODE_GESTURAL)
-            )
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchFromLauncherTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchFromLauncherTest.kt
index 6417456..d6a951d 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchFromLauncherTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchFromLauncherTest.kt
@@ -26,7 +26,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.BaseTest
 import com.android.server.wm.flicker.helpers.SimpleAppHelper
 import org.junit.FixMethodOrder
@@ -48,11 +47,10 @@
  *     Swipe right from the bottom of the screen to quick switch back to the app
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class QuickSwitchFromLauncherTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
+class QuickSwitchFromLauncherTest(flicker: LegacyFlickerTest) : BaseTest(flicker) {
     private val testApp = SimpleAppHelper(instrumentation)
 
     /** {@inheritDoc} */
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchFromLauncherTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchFromLauncherTestCfArm.kt
deleted file mode 100644
index 84fc754..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/quickswitch/QuickSwitchFromLauncherTestCfArm.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.quickswitch
-
-import android.tools.common.NavBar
-import android.tools.common.Rotation
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class QuickSwitchFromLauncherTestCfArm(flicker: LegacyFlickerTest) :
-    QuickSwitchFromLauncherTest(flicker) {
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() =
-            LegacyFlickerTestFactory.nonRotationTests(
-                supportedNavigationModes = listOf(NavBar.MODE_GESTURAL),
-                // TODO: Test with 90 rotation
-                supportedRotations = listOf(Rotation.ROTATION_0)
-            )
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTest.kt
index 842ece3..bdbf0d2 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTest.kt
@@ -23,7 +23,6 @@
 import android.tools.device.flicker.legacy.FlickerBuilder
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.helpers.SimpleAppHelper
 import org.junit.FixMethodOrder
 import org.junit.Test
@@ -81,11 +80,10 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class ChangeAppRotationTest(flicker: LegacyFlickerTest) : RotationTransition(flicker) {
+class ChangeAppRotationTest(flicker: LegacyFlickerTest) : RotationTransition(flicker) {
     override val testApp = SimpleAppHelper(instrumentation)
     override val transition: FlickerBuilder.() -> Unit
         get() = {
@@ -100,7 +98,7 @@
     @Presubmit
     @Test
     fun focusChanges() {
-        flicker.assertEventLog { this.focusChanges(testApp.`package`) }
+        flicker.assertEventLog { this.focusChanges(testApp.packageName) }
     }
 
     /**
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTestCfArm.kt
deleted file mode 100644
index 1ab5c5a..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/ChangeAppRotationTestCfArm.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.rotation
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class ChangeAppRotationTestCfArm(flicker: LegacyFlickerTest) : ChangeAppRotationTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations.
-         *
-         * See [LegacyFlickerTestFactory.rotationTests] for configuring screen orientation and
-         * navigation modes.
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() = LegacyFlickerTestFactory.rotationTests()
-    }
-}
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTest.kt
index b6ad3cc7..6d3ae43 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTest.kt
@@ -26,7 +26,6 @@
 import android.tools.device.flicker.legacy.LegacyFlickerTest
 import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
 import android.view.WindowManager
-import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.helpers.SeamlessRotationAppHelper
 import com.android.server.wm.flicker.testapp.ActivityOptions
 import org.junit.FixMethodOrder
@@ -88,11 +87,10 @@
  *        apps are running before setup
  * ```
  */
-@RequiresDevice
 @RunWith(Parameterized::class)
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class SeamlessAppRotationTest(flicker: LegacyFlickerTest) : RotationTransition(flicker) {
+class SeamlessAppRotationTest(flicker: LegacyFlickerTest) : RotationTransition(flicker) {
     override val testApp = SeamlessRotationAppHelper(instrumentation)
 
     /** {@inheritDoc} */
@@ -118,8 +116,8 @@
         flicker.assertWm {
             this.invoke("isFullScreen") {
                 val appWindow =
-                    it.windowState(testApp.`package`)
-                        ?: error("App window for package ${testApp.`package`} not found")
+                    it.windowState(testApp.packageName)
+                        ?: error("App window for package ${testApp.packageName} not found")
                 val flags = appWindow.windowState.attributes.flags
                 appWindow
                     .check { "isFullScreen" }
@@ -136,8 +134,8 @@
         flicker.assertWm {
             this.invoke("isRotationSeamless") {
                 val appWindow =
-                    it.windowState(testApp.`package`)
-                        ?: error("App window for package ${testApp.`package`} not found")
+                    it.windowState(testApp.packageName)
+                        ?: error("App window for package ${testApp.packageName} not found")
                 val rotationAnimation = appWindow.windowState.attributes.rotationAnimation
                 appWindow
                     .check { "isRotationSeamless" }
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTestCfArm.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTestCfArm.kt
deleted file mode 100644
index 592be05..0000000
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/rotation/SeamlessAppRotationTestCfArm.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm.flicker.rotation
-
-import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
-import android.tools.device.flicker.legacy.LegacyFlickerTest
-import android.tools.device.flicker.legacy.LegacyFlickerTestFactory
-import com.android.server.wm.flicker.testapp.ActivityOptions
-import org.junit.FixMethodOrder
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/** This test should fail because of b/264518826 */
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-open class SeamlessAppRotationTestCfArm(flicker: LegacyFlickerTest) :
-    SeamlessAppRotationTest(flicker) {
-    companion object {
-        /**
-         * Creates the test configurations for seamless rotation based on the default rotation tests
-         * from [LegacyFlickerTestFactory.rotationTests], but adding a flag (
-         * [ActivityOptions.SeamlessRotation.EXTRA_STARVE_UI_THREAD]) to indicate if the app should
-         * starve the UI thread of not
-         */
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams() =
-            LegacyFlickerTestFactory.rotationTests().flatMap { sourceCfg ->
-                val legacyCfg = sourceCfg as LegacyFlickerTest
-                val defaultRun = createConfig(legacyCfg, starveUiThread = false)
-                val busyUiRun = createConfig(legacyCfg, starveUiThread = true)
-                listOf(defaultRun, busyUiRun)
-            }
-    }
-}
diff --git a/tests/FlickerTests/test-apps/flickerapp/Android.bp b/tests/FlickerTests/test-apps/flickerapp/Android.bp
index 75e35ee..e3b23b9 100644
--- a/tests/FlickerTests/test-apps/flickerapp/Android.bp
+++ b/tests/FlickerTests/test-apps/flickerapp/Android.bp
@@ -24,6 +24,9 @@
 android_test {
     name: "FlickerTestApp",
     srcs: ["**/*.java"],
+    resource_dirs: [
+        "res",
+    ],
     sdk_version: "current",
     test_suites: ["device-tests"],
     static_libs: [
diff --git a/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml b/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml
index ff9799a..704798e 100644
--- a/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml
+++ b/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml
@@ -347,6 +347,17 @@
             android:exported="false"
             android:theme="@style/CutoutShortEdges"
             android:resizeableActivity="true"/>
+        <activity
+            android:name=".TransferSplashscreenActivity"
+            android:taskAffinity="com.android.server.wm.flicker.testapp.TransferSplashscreenActivity"
+            android:label="TransferSplashscreenActivity"
+            android:theme="@style/SplashscreenAppTheme"
+            android:exported="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
         <service
             android:name=".AssistantInteractionSessionService"
             android:exported="true"
diff --git a/tests/FlickerTests/test-apps/flickerapp/res/drawable/avd_anim.xml b/tests/FlickerTests/test-apps/flickerapp/res/drawable/avd_anim.xml
new file mode 100644
index 0000000..19205d4
--- /dev/null
+++ b/tests/FlickerTests/test-apps/flickerapp/res/drawable/avd_anim.xml
@@ -0,0 +1,94 @@
+<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="432dp" android:width="432dp" android:viewportHeight="432" android:viewportWidth="432">
+            <group android:name="_R_G">
+                <group android:name="_R_G_L_5_G" android:translateX="216" android:translateY="216" android:scaleX="1.5" android:scaleY="1.5">
+                    <path android:name="_R_G_L_5_G_D_0_P_0" android:fillColor="#555555" android:fillAlpha="1" android:fillType="nonZero" android:pathData=" M53.82 -56.7 C53.82,-56.7 43.64,-49.06 43.64,-49.06 C43.64,-49.06 0,-16.34 0,-16.34 C0,-16.34 -43.64,-49.06 -43.64,-49.06 C-43.64,-49.06 -53.82,-56.7 -53.82,-56.7 C-64.6,-64.79 -80,-57.09 -80,-43.61 C-80,-43.61 -80,-29.07 -80,-29.07 C-80,-29.07 -80,49.09 -80,49.09 C-80,55.12 -75.12,60 -69.09,60 C-69.09,60 -43.64,60 -43.64,60 C-43.64,60 -43.64,-1.8 -43.64,-1.8 C-43.64,-1.8 0,30.92 0,30.92 C0,30.92 43.64,-1.8 43.64,-1.8 C43.64,-1.8 43.64,60 43.64,60 C43.64,60 69.09,60 69.09,60 C75.12,60 80,55.12 80,49.09 C80,49.09 80,-29.07 80,-29.07 C80,-29.07 80,-43.61 80,-43.61 C80,-57.09 64.61,-64.79 53.82,-56.7c "/>
+                </group>
+                <group android:name="_R_G_L_4_G" android:translateX="216" android:translateY="216" android:scaleX="1.5" android:scaleY="1.5">
+                    <clip-path android:name="mask_x" android:pathData="M53.82 -56.7 C53.82,-56.7 43.64,-49.06 43.64,-49.06 C43.64,-49.06 0,-16.34 0,-16.34 C0,-16.34 -43.64,-49.06 -43.64,-49.06 C-43.64,-49.06 -53.82,-56.7 -53.82,-56.7 C-64.6,-64.79 -80,-57.09 -80,-43.61 C-80,-43.61 -80,-29.07 -80,-29.07 C-80,-29.07 -80,49.09 -80,49.09 C-80,55.12 -75.12,60 -69.09,60 C-69.09,60 -43.64,60 -43.64,60 C-43.64,60 -43.64,-1.8 -43.64,-1.8 C-43.64,-1.8 0,30.92 0,30.92 C0,30.92 43.64,-1.8 43.64,-1.8 C43.64,-1.8 43.64,60 43.64,60 C43.64,60 69.09,60 69.09,60 C75.12,60 80,55.12 80,49.09 C80,49.09 80,-29.07 80,-29.07 C80,-29.07 80,-43.61 80,-43.61 C80,-57.09 64.61,-64.79 53.82,-56.7c"/>
+                    <path android:name="_R_G_L_4_G_D_0_P_0" android:fillColor="#2684fc" android:fillAlpha="1" android:fillType="nonZero" android:pathData=" M-80.39 60 C-80.39,60 -105.84,60 -105.84,60 C-111.87,60 -116.75,55.12 -116.75,49.09 C-116.75,49.09 -116.75,-60 -116.75,-60 C-116.75,-60 -80.39,-60 -80.39,-60 C-80.39,-60 -80.39,60 -80.39,60c "/>
+                </group>
+                <group android:name="_R_G_L_3_G" android:translateX="216" android:translateY="216" android:scaleX="1.5" android:scaleY="1.5">
+                    <clip-path android:name="mask_x" android:pathData="M53.82 -56.7 C53.82,-56.7 43.64,-49.06 43.64,-49.06 C43.64,-49.06 0,-16.34 0,-16.34 C0,-16.34 -43.64,-49.06 -43.64,-49.06 C-43.64,-49.06 -53.82,-56.7 -53.82,-56.7 C-64.6,-64.79 -80,-57.09 -80,-43.61 C-80,-43.61 -80,-29.07 -80,-29.07 C-80,-29.07 -80,49.09 -80,49.09 C-80,55.12 -75.12,60 -69.09,60 C-69.09,60 -43.64,60 -43.64,60 C-43.64,60 -43.64,-1.8 -43.64,-1.8 C-43.64,-1.8 0,30.92 0,30.92 C0,30.92 43.64,-1.8 43.64,-1.8 C43.64,-1.8 43.64,60 43.64,60 C43.64,60 69.09,60 69.09,60 C75.12,60 80,55.12 80,49.09 C80,49.09 80,-29.07 80,-29.07 C80,-29.07 80,-43.61 80,-43.61 C80,-57.09 64.61,-64.79 53.82,-56.7c"/>
+                    <path android:name="_R_G_L_3_G_D_0_P_0" android:fillColor="#00ac47" android:fillAlpha="1" android:fillType="nonZero" android:pathData="M80.64 60 C80.64,60 106.09,60 106.09,60 C112.12,60 117,55.12 117,49.09 C117,49.09 117,-60 117,-60 C117,-60 80.64,-60 80.64,-60 C80.64,-60 80.64,60 80.64,60c "/>
+                </group>
+                <group android:name="_R_G_L_2_G" android:translateX="216" android:translateY="216" android:scaleX="1.5" android:scaleY="1.5">
+                    <clip-path android:name="mask_x" android:pathData="M53.82 -56.7 C53.82,-56.7 43.64,-49.06 43.64,-49.06 C43.64,-49.06 0,-16.34 0,-16.34 C0,-16.34 -43.64,-49.06 -43.64,-49.06 C-43.64,-49.06 -53.82,-56.7 -53.82,-56.7 C-64.6,-64.79 -80,-57.09 -80,-43.61 C-80,-43.61 -80,-29.07 -80,-29.07 C-80,-29.07 -80,49.09 -80,49.09 C-80,55.12 -75.12,60 -69.09,60 C-69.09,60 -43.64,60 -43.64,60 C-43.64,60 -43.64,-1.8 -43.64,-1.8 C-43.64,-1.8 0,30.92 0,30.92 C0,30.92 43.64,-1.8 43.64,-1.8 C43.64,-1.8 43.64,60 43.64,60 C43.64,60 69.09,60 69.09,60 C75.12,60 80,55.12 80,49.09 C80,49.09 80,-29.07 80,-29.07 C80,-29.07 80,-43.61 80,-43.61 C80,-57.09 64.61,-64.79 53.82,-56.7c"/>
+                    <path android:name="_R_G_L_2_G_D_0_P_0" android:fillColor="#fe2c25" android:fillAlpha="1" android:fillType="nonZero" android:pathData="M53.82 -104.7 C53.82,-104.7 0,-64.34 0,-64.34 C0,-64.34 -53.82,-104.7 -53.82,-104.7 C-64.6,-112.79 -80,-105.09 -80,-91.61 C-80,-91.61 -80,-77.07 -80,-77.07 C-80,-77.07 0,-17.08 0,-17.08 C0,-17.08 80,-77.07 80,-77.07 C80,-77.07 80,-91.61 80,-91.61 C80,-105.09 64.61,-112.79 53.82,-104.7c "/>
+                </group>
+                <group android:name="_R_G_L_1_G" android:translateX="216" android:translateY="216" android:scaleX="1.5" android:scaleY="1.5">
+                    <clip-path android:name="mask_x" android:pathData="M43.64 -1.8 C43.64,-1.8 43.64,-49.06 43.64,-49.06 C43.64,-49.06 53.82,-56.7 53.82,-56.7 C64.61,-64.79 80,-57.09 80,-43.61 C80,-43.61 80,-1.8 80,-1.8 C80,-1.8 43.64,-1.8 43.64,-1.8c"/>
+                    <path android:name="_R_G_L_1_G_D_0_P_0" android:fillColor="#ffba00" android:fillAlpha="1" android:fillType="nonZero" android:pathData="M80.64 -135 C80.64,-135 117,-135 117,-135 C117,-135 117,-104.07 117,-104.07 C117,-104.07 80.64,-76.8 80.64,-76.8 C80.64,-76.8 80.64,-135 80.64,-135c "/>
+                </group>
+                <group android:name="_R_G_L_0_G" android:translateX="216" android:translateY="216" android:scaleX="1.5" android:scaleY="1.5">
+                    <clip-path android:name="mask_x" android:pathData="M-43.64 -1.8 C-43.64,-1.8 -80,-1.8 -80,-1.8 C-80,-1.8 -80,-43.61 -80,-43.61 C-80,-57.09 -64.6,-64.79 -53.82,-56.7 C-53.82,-56.7 -43.64,-49.06 -43.64,-49.06 C-43.64,-49.06 -43.64,-1.8 -43.64,-1.8c"/>
+                    <path android:name="_R_G_L_0_G_D_0_P_0" android:fillColor="#d70007" android:fillAlpha="1" android:fillType="nonZero" android:pathData=" M-117 -104.07 C-117,-104.07 -117,-135 -117,-135 C-117,-135 -80.64,-135 -80.64,-135 C-80.64,-135 -80.64,-76.8 -80.64,-76.8 C-80.64,-76.8 -117,-104.07 -117,-104.07c "/>
+                </group>
+            </group>
+            <group android:name="time_group"/>
+        </vector>
+    </aapt:attr>
+    <target android:name="_R_G_L_4_G_D_0_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator android:propertyName="pathData" android:duration="1567" android:startOffset="233" android:valueFrom="M-80.39 60 C-80.39,60 -105.84,60 -105.84,60 C-111.87,60 -116.75,55.12 -116.75,49.09 C-116.75,49.09 -116.75,-60 -116.75,-60 C-116.75,-60 -80.39,-60 -80.39,-60 C-80.39,-60 -80.39,60 -80.39,60c " android:valueTo=" M-43.64 60 C-43.64,60 -69.09,60 -69.09,60 C-75.12,60 -80,55.12 -80,49.09 C-80,49.09 -80,-60 -80,-60 C-80,-60 -43.64,-60 -43.64,-60 C-43.64,-60 -43.64,60 -43.64,60c " android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0,1 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:propertyName="pathData" android:duration="1567" android:startOffset="233" android:valueFrom=" M80.64 60 C80.64,60 106.09,60 106.09,60 C112.12,60 117,55.12 117,49.09 C117,49.09 117,-60 117,-60 C117,-60 80.64,-60 80.64,-60 C80.64,-60 80.64,60 80.64,60c " android:valueTo=" M43.64 60 C43.64,60 69.09,60 69.09,60 C75.12,60 80,55.12 80,49.09 C80,49.09 80,-60 80,-60 C80,-60 43.64,-60 43.64,-60 C43.64,-60 43.64,60 43.64,60c " android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0,1 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:propertyName="pathData" android:duration="1567" android:startOffset="233" android:valueFrom="M53.82 -104.7 C53.82,-104.7 0,-64.34 0,-64.34 C0,-64.34 -53.82,-104.7 -53.82,-104.7 C-64.6,-112.79 -80,-105.09 -80,-91.61 C-80,-91.61 -80,-77.07 -80,-77.07 C-80,-77.07 0,-17.08 0,-17.08 C0,-17.08 80,-77.07 80,-77.07 C80,-77.07 80,-91.61 80,-91.61 C80,-105.09 64.61,-112.79 53.82,-104.7c" android:valueTo="M53.82 -56.7 C53.82,-56.7 0,-16.34 0,-16.34 C0,-16.34 -53.82,-56.7 -53.82,-56.7 C-64.6,-64.79 -80,-57.09 -80,-43.61 C-80,-43.61 -80,-29.07 -80,-29.07 C-80,-29.07 0,30.92 0,30.92 C0,30.92 80,-29.07 80,-29.07 C80,-29.07 80,-43.61 80,-43.61 C80,-57.09 64.61,-64.79 53.82,-56.7c " android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0,1 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:propertyName="pathData" android:duration="1567" android:startOffset="233" android:valueFrom=" M80.64 -135 C80.64,-135 117,-135 117,-135 C117,-135 117,-104.07 117,-104.07 C117,-104.07 80.64,-76.8 80.64,-76.8 C80.64,-76.8 80.64,-135 80.64,-135c " android:valueTo=" M43.64 -60 C43.64,-60 80,-60 80,-60 C80,-60 80,-29.07 80,-29.07 C80,-29.07 43.64,-1.8 43.64,-1.8 C43.64,-1.8 43.64,-60 43.64,-60c " android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 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:propertyName="pathData" android:duration="1567" android:startOffset="233" android:valueFrom=" M-117 -104.07 C-117,-104.07 -117,-135 -117,-135 C-117,-135 -80.64,-135 -80.64,-135 C-80.64,-135 -80.64,-76.8 -80.64,-76.8 C-80.64,-76.8 -117,-104.07 -117,-104.07c " android:valueTo=" M-80 -29.07 C-80,-29.07 -80,-60 -80,-60 C-80,-60 -43.64,-60 -43.64,-60 C-43.64,-60 -43.64,-1.8 -43.64,-1.8 C-43.64,-1.8 -80,-29.07 -80,-29.07c " android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 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:propertyName="translateX" android:duration="2017" android:startOffset="0" android:valueFrom="0" android:valueTo="1" android:valueType="floatType"/>
+            </set>
+        </aapt:attr>
+    </target>
+</animated-vector>
diff --git a/tests/FlickerTests/test-apps/flickerapp/res/values/styles.xml b/tests/FlickerTests/test-apps/flickerapp/res/values/styles.xml
index e51ed29..9b742d9 100644
--- a/tests/FlickerTests/test-apps/flickerapp/res/values/styles.xml
+++ b/tests/FlickerTests/test-apps/flickerapp/res/values/styles.xml
@@ -53,4 +53,11 @@
     <style name="no_starting_window" parent="@android:style/Theme.DeviceDefault">
         <item name="android:windowDisablePreview">true</item>
     </style>
+
+    <style name="SplashscreenAppTheme" parent="@android:style/Theme.DeviceDefault">
+        <!-- Splashscreen Attributes -->
+        <item name="android:windowSplashScreenAnimatedIcon">@drawable/avd_anim</item>
+        <!-- Here we want to match the duration of our AVD -->
+        <item name="android:windowSplashScreenAnimationDuration">900</item>
+    </style>
 </resources>
diff --git a/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/ActivityOptions.java b/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/ActivityOptions.java
index 2795a6c..7c5e9a3 100644
--- a/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/ActivityOptions.java
+++ b/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/ActivityOptions.java
@@ -178,6 +178,12 @@
                 FLICKER_APP_PACKAGE + ".LaunchNewActivity");
     }
 
+    public static class TransferSplashscreenActivity {
+        public static final String LABEL = "TransferSplashscreenActivity";
+        public static final ComponentName COMPONENT = new ComponentName(FLICKER_APP_PACKAGE,
+                FLICKER_APP_PACKAGE + ".TransferSplashscreenActivity");
+    }
+
     public static class Pip {
         // Test App > Pip Activity
         public static final String LABEL = "PipActivity";
diff --git a/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/TransferSplashscreenActivity.java b/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/TransferSplashscreenActivity.java
new file mode 100644
index 0000000..0323286
--- /dev/null
+++ b/tests/FlickerTests/test-apps/flickerapp/src/com/android/server/wm/flicker/testapp/TransferSplashscreenActivity.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.wm.flicker.testapp;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.os.SystemClock;
+import android.view.View;
+import android.view.ViewTreeObserver;
+import android.window.SplashScreen;
+import android.window.SplashScreenView;
+
+public class TransferSplashscreenActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        final SplashScreen splashScreen = getSplashScreen();
+        // Register setOnExitAnimationListener to transfer the splash screen window to client.
+        splashScreen.setOnExitAnimationListener(this::onSplashScreenExit);
+        final View content = findViewById(android.R.id.content);
+        // By register preDrawListener to defer app window draw signal about 500ms, which to ensure
+        // the splash screen must show when cold launch.
+        content.getViewTreeObserver().addOnPreDrawListener(
+                new ViewTreeObserver.OnPreDrawListener() {
+                    final long mCreateTime = SystemClock.uptimeMillis();
+                    @Override
+                    public boolean onPreDraw() {
+                        return SystemClock.uptimeMillis() - mCreateTime > 500;
+                    }
+                }
+        );
+    }
+
+    private void onSplashScreenExit(SplashScreenView view) {
+        view.remove();
+    }
+}
diff --git a/tests/HandwritingIme/src/com/google/android/test/handwritingime/HandwritingIme.java b/tests/HandwritingIme/src/com/google/android/test/handwritingime/HandwritingIme.java
index 8380dcf..d939d91 100644
--- a/tests/HandwritingIme/src/com/google/android/test/handwritingime/HandwritingIme.java
+++ b/tests/HandwritingIme/src/com/google/android/test/handwritingime/HandwritingIme.java
@@ -20,6 +20,8 @@
 import android.graphics.PointF;
 import android.graphics.RectF;
 import android.inputmethodservice.InputMethodService;
+import android.os.CancellationSignal;
+import android.os.Handler;
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
@@ -31,7 +33,9 @@
 import android.view.inputmethod.HandwritingGesture;
 import android.view.inputmethod.InputConnection;
 import android.view.inputmethod.InsertGesture;
+import android.view.inputmethod.InsertModeGesture;
 import android.view.inputmethod.JoinOrSplitGesture;
+import android.view.inputmethod.PreviewableHandwritingGesture;
 import android.view.inputmethod.RemoveSpaceGesture;
 import android.view.inputmethod.SelectGesture;
 import android.widget.AdapterView;
@@ -47,11 +51,14 @@
 
 public class HandwritingIme extends InputMethodService {
     private static final int OP_NONE = 0;
+    // ------- PreviewableHandwritingGesture BEGIN -----
     private static final int OP_SELECT = 1;
     private static final int OP_DELETE = 2;
+    // ------- PreviewableHandwritingGesture END -----
     private static final int OP_INSERT = 3;
     private static final int OP_REMOVE_SPACE = 4;
     private static final int OP_JOIN_OR_SPLIT = 5;
+    private static final int OP_INSERT_MODE = 6;
 
     private InkView mInk;
 
@@ -70,6 +77,10 @@
 
     private final IntConsumer mResultConsumer = value -> Log.d(TAG, "Gesture result: " + value);
 
+    private CancellationSignal mCancellationSignal = new CancellationSignal();
+    private boolean mUsePreview;
+    private CheckBox mGesturePreviewCheckbox;
+
     interface HandwritingFinisher {
         void finish();
     }
@@ -98,73 +109,107 @@
 
     private void onStylusEvent(@Nullable MotionEvent event) {
         // TODO Hookup recognizer here
+        HandwritingGesture gesture;
         switch (event.getAction()) {
-            case MotionEvent.ACTION_UP: {
-                if (areRichGesturesEnabled()) {
-                    HandwritingGesture gesture = null;
-                    switch (mRichGestureMode) {
-                        case OP_SELECT:
-                            gesture = new SelectGesture.Builder()
-                                    .setGranularity(mRichGestureGranularity)
-                                    .setSelectionArea(getSanitizedRectF(mRichGestureStartPoint.x,
-                                            mRichGestureStartPoint.y, event.getX(), event.getY()))
-                                    .setFallbackText("fallback text")
-                                    .build();
-                            break;
-                        case OP_DELETE:
-                            gesture = new DeleteGesture.Builder()
-                                    .setGranularity(mRichGestureGranularity)
-                                    .setDeletionArea(getSanitizedRectF(mRichGestureStartPoint.x,
-                                            mRichGestureStartPoint.y, event.getX(), event.getY()))
-                                    .setFallbackText("fallback text")
-                                    .build();
-                            break;
-                        case OP_INSERT:
-                            gesture = new InsertGesture.Builder()
-                                    .setInsertionPoint(new PointF(
-                                            mRichGestureStartPoint.x, mRichGestureStartPoint.y))
-                                    .setTextToInsert(" ")
-                                    .setFallbackText("fallback text")
-                                    .build();
-                            break;
-                        case OP_REMOVE_SPACE:
-                            gesture = new RemoveSpaceGesture.Builder()
-                                    .setPoints(
-                                            new PointF(mRichGestureStartPoint.x,
-                                                    mRichGestureStartPoint.y),
-                                            new PointF(event.getX(), event.getY()))
-                                    .setFallbackText("fallback text")
-                                    .build();
-                            break;
-                        case OP_JOIN_OR_SPLIT:
-                            gesture = new JoinOrSplitGesture.Builder()
-                                    .setJoinOrSplitPoint(new PointF(
-                                            mRichGestureStartPoint.x, mRichGestureStartPoint.y))
-                                    .setFallbackText("fallback text")
-                                    .build();
-                            break;
+            case MotionEvent.ACTION_MOVE:
+                if (mUsePreview && areRichGesturesEnabled()) {
+                    gesture = computeGesture(event, true /* isPreview */);
+                    if (gesture == null) {
+                        Log.e(TAG, "Preview not supported for gesture: " + mRichGestureMode);
+                        return;
                     }
+                    performGesture(gesture, true /* isPreview */);
+                }
+                break;
+            case MotionEvent.ACTION_UP:
+                if (areRichGesturesEnabled()) {
+                    gesture = computeGesture(event, false /* isPreview */);
                     if (gesture == null) {
                         // This shouldn't happen
                         Log.e(TAG, "Unrecognized gesture mode: " + mRichGestureMode);
                         return;
                     }
-                    performGesture(gesture);
+                    performGesture(gesture, false /* isPreview */);
                 } else {
                     // insert random ASCII char
                     sendKeyChar((char) (56 + new Random().nextInt(66)));
                 }
                 return;
-            }
             case MotionEvent.ACTION_DOWN: {
                 if (areRichGesturesEnabled()) {
                     mRichGestureStartPoint = new PointF(event.getX(), event.getY());
                 }
-                return;
             }
         }
     }
 
+    private HandwritingGesture computeGesture(MotionEvent event, boolean isPreview) {
+        HandwritingGesture gesture = null;
+        switch (mRichGestureMode) {
+            case OP_SELECT:
+                gesture = new SelectGesture.Builder()
+                        .setGranularity(mRichGestureGranularity)
+                        .setSelectionArea(getSanitizedRectF(mRichGestureStartPoint.x,
+                                mRichGestureStartPoint.y, event.getX(), event.getY()))
+                        .setFallbackText("fallback text")
+                        .build();
+                break;
+            case OP_DELETE:
+                gesture = new DeleteGesture.Builder()
+                        .setGranularity(mRichGestureGranularity)
+                        .setDeletionArea(getSanitizedRectF(mRichGestureStartPoint.x,
+                                mRichGestureStartPoint.y, event.getX(), event.getY()))
+                        .setFallbackText("fallback text")
+                        .build();
+                break;
+            case OP_INSERT:
+                gesture = new InsertGesture.Builder()
+                        .setInsertionPoint(new PointF(
+                                mRichGestureStartPoint.x, mRichGestureStartPoint.y))
+                        .setTextToInsert(" ")
+                        .setFallbackText("fallback text")
+                        .build();
+                break;
+            case OP_REMOVE_SPACE:
+                if (isPreview) {
+                    break;
+                }
+                gesture = new RemoveSpaceGesture.Builder()
+                        .setPoints(
+                                new PointF(mRichGestureStartPoint.x,
+                                        mRichGestureStartPoint.y),
+                                new PointF(event.getX(), event.getY()))
+                        .setFallbackText("fallback text")
+                        .build();
+                break;
+            case OP_JOIN_OR_SPLIT:
+                if (isPreview) {
+                    break;
+                }
+                gesture = new JoinOrSplitGesture.Builder()
+                        .setJoinOrSplitPoint(new PointF(
+                                mRichGestureStartPoint.x, mRichGestureStartPoint.y))
+                        .setFallbackText("fallback text")
+                        .build();
+                break;
+            case OP_INSERT_MODE:
+                if (isPreview) {
+                    break;
+                }
+                mCancellationSignal = new CancellationSignal();
+                InsertModeGesture img = new InsertModeGesture.Builder()
+                        .setInsertionPoint(new PointF(
+                                mRichGestureStartPoint.x, mRichGestureStartPoint.y))
+                        .setFallbackText("fallback text")
+                        .setCancellationSignal(mCancellationSignal)
+                        .build();
+                gesture = img;
+                new Handler().postDelayed(() -> img.getCancellationSignal().cancel(), 5000);
+                break;
+        }
+        return gesture;
+    }
+
     /**
      * sanitize values to support rectangles in all cases.
      */
@@ -193,10 +238,14 @@
         return rectF;
     }
 
-    private void performGesture(HandwritingGesture gesture) {
+    private void performGesture(HandwritingGesture gesture, boolean isPreview) {
         InputConnection ic = getCurrentInputConnection();
         if (getCurrentInputStarted() && ic != null) {
-            ic.performHandwritingGesture(gesture, Runnable::run, mResultConsumer);
+            if (isPreview) {
+                ic.previewHandwritingGesture((PreviewableHandwritingGesture) gesture, null);
+            } else {
+                ic.performHandwritingGesture(gesture, Runnable::run, mResultConsumer);
+            }
         } else {
             // This shouldn't happen
             Log.e(TAG, "No active InputConnection");
@@ -216,12 +265,21 @@
         layout.addView(getRichGestureActionsSpinner());
         layout.addView(getRichGestureGranularitySpinner());
         layout.addView(getBoundsInfoCheckBoxes());
+        layout.addView(getPreviewCheckBox());
         layout.setBackgroundColor(getColor(R.color.holo_green_light));
         view.addView(layout);
 
         return view;
     }
 
+    private View getPreviewCheckBox() {
+        mGesturePreviewCheckbox = new CheckBox(this);
+        mGesturePreviewCheckbox.setText("Use Gesture Previews (for Previewable Gestures)");
+        mGesturePreviewCheckbox.setOnCheckedChangeListener(
+                (buttonView, isChecked) -> mUsePreview = isChecked);
+        return mGesturePreviewCheckbox;
+    }
+
     private View getRichGestureActionsSpinner() {
         if (mRichGestureModeSpinner != null) {
             return mRichGestureModeSpinner;
@@ -236,6 +294,7 @@
                 "Rich gesture INSERT",
                 "Rich gesture REMOVE SPACE",
                 "Rich gesture JOIN OR SPLIT",
+                "Rich gesture INSERT MODE",
         };
         ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
                 android.R.layout.simple_spinner_dropdown_item, items);
@@ -245,8 +304,13 @@
             @Override
             public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                 mRichGestureMode = position;
-                mRichGestureGranularitySpinner.setEnabled(
-                        mRichGestureMode == OP_SELECT || mRichGestureMode == OP_DELETE);
+                boolean supportsGranularityAndPreview =
+                        mRichGestureMode == OP_SELECT || mRichGestureMode == OP_DELETE;
+                mRichGestureGranularitySpinner.setEnabled(supportsGranularityAndPreview);
+                mGesturePreviewCheckbox.setEnabled(supportsGranularityAndPreview);
+                if (!supportsGranularityAndPreview) {
+                    mUsePreview = false;
+                }
                 Log.d(TAG, "Setting RichGesture Mode " + mRichGestureMode);
             }
 
diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml
index 80c7a21..db3a992 100644
--- a/tests/HwAccelerationTest/AndroidManifest.xml
+++ b/tests/HwAccelerationTest/AndroidManifest.xml
@@ -789,6 +789,15 @@
             </intent-filter>
         </activity>
 
+        <activity android:name="BackdropBlurActivity"
+                  android:label="RenderEffect/BackdropBlur"
+                  android:exported="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="com.android.test.hwui.TEST"/>
+            </intent-filter>
+        </activity>
+
         <activity android:name="BlurActivity"
                   android:label="RenderEffect/Blur"
                   android:exported="true">
diff --git a/tests/HwAccelerationTest/res/drawable/robot_repeated.xml b/tests/HwAccelerationTest/res/drawable/robot_repeated.xml
new file mode 100644
index 0000000..bbb15b7
--- /dev/null
+++ b/tests/HwAccelerationTest/res/drawable/robot_repeated.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+        android:src="@drawable/robot"
+        android:tileMode="repeat" android:gravity="fill" />
\ No newline at end of file
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/BackdropBlurActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/BackdropBlurActivity.java
new file mode 100644
index 0000000..8086b29
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/BackdropBlurActivity.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.hwui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.ColorMatrix;
+import android.graphics.ColorMatrixColorFilter;
+import android.graphics.Outline;
+import android.graphics.RenderEffect;
+import android.graphics.Shader;
+import android.os.Bundle;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewOutlineProvider;
+import android.view.animation.DecelerateInterpolator;
+import android.widget.FrameLayout;
+import android.widget.ScrollView;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class BackdropBlurActivity extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        final ScrollView scrollView = new ScrollView(this);
+        final FrameLayout innerFrame = new FrameLayout(this);
+        final View backgroundView = new View(this);
+        backgroundView.setBackgroundResource(R.drawable.robot_repeated);
+        innerFrame.addView(backgroundView, ViewGroup.LayoutParams.MATCH_PARENT, 10000);
+        scrollView.addView(innerFrame,
+                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+
+        final FrameLayout contentView = new FrameLayout(this);
+        contentView.addView(scrollView,
+                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+        contentView.addView(new BackdropBlurView(this), 300, 300);
+        setContentView(contentView);
+    }
+
+    private static class BackdropBlurView extends View {
+        private final float mBlurRadius = 60f;
+        private final float mSaturation = 1.8f;
+
+        private float mDownOffsetX;
+        private float mDownOffsetY;
+
+        BackdropBlurView(Context c) {
+            super(c);
+
+            // init RenderEffect.
+            final RenderEffect blurEffect = RenderEffect.createBlurEffect(
+                    mBlurRadius, mBlurRadius,
+                    null, Shader.TileMode.MIRROR // TileMode.MIRROR is better for blur.
+            );
+
+            final ColorMatrix colorMatrix = new ColorMatrix();
+            colorMatrix.setSaturation(mSaturation);
+            final RenderEffect effect = RenderEffect.createColorFilterEffect(
+                    new ColorMatrixColorFilter(colorMatrix), blurEffect
+            );
+            setBackdropRenderEffect(effect);
+
+            // clip to a round outline.
+            setOutlineProvider(new ViewOutlineProvider() {
+                @Override
+                public void getOutline(View v, Outline outline) {
+                    outline.setOval(0, 0, v.getWidth(), v.getHeight());
+                }
+            });
+            setClipToOutline(true);
+
+            animate().setInterpolator(new DecelerateInterpolator(2.0f));
+        }
+
+        @Override
+        protected void onDraw(Canvas canvas) {
+            super.onDraw(canvas);
+
+            canvas.drawColor(0x99F0F0F0);
+        }
+
+        @Override
+        public boolean onTouchEvent(MotionEvent event) {
+            switch (event.getActionMasked()) {
+                case MotionEvent.ACTION_DOWN:
+                    mDownOffsetX = event.getRawX() - getTranslationX();
+                    mDownOffsetY = event.getRawY() - getTranslationY();
+                    animate().scaleX(1.5f).scaleY(1.5f).start();
+                    break;
+                case MotionEvent.ACTION_UP:
+                case MotionEvent.ACTION_CANCEL:
+                    animate().scaleX(1f).scaleY(1f).start();
+                    break;
+                case MotionEvent.ACTION_MOVE:
+                    setTranslationX(event.getRawX() - mDownOffsetX);
+                    setTranslationY(event.getRawY() - mDownOffsetY);
+                    break;
+            }
+            return true;
+        }
+    }
+}
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/BitmapsAlphaActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/BitmapsAlphaActivity.java
index ef49c7f..cb16191 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/BitmapsAlphaActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/BitmapsAlphaActivity.java
@@ -48,15 +48,15 @@
         BitmapsView(Context c) {
             super(c);
 
-            Log.d("OpenGLRenderer", "Loading sunset1, default options");
+            Log.d("HWUI", "Loading sunset1, default options");
             mBitmap1 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1);
-            Log.d("OpenGLRenderer", "Loading sunset2, default options");
+            Log.d("HWUI", "Loading sunset2, default options");
             mBitmap2 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset2);
-            Log.d("OpenGLRenderer", "Loading sunset3, forcing ARGB-8888");
+            Log.d("HWUI", "Loading sunset3, forcing ARGB-8888");
             BitmapFactory.Options opts = new BitmapFactory.Options();
             opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
             mBitmap3 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset3, opts);
-            Log.d("OpenGLRenderer", "    has bitmap alpha? " + mBitmap3.hasAlpha());
+            Log.d("HWUI", "    has bitmap alpha? " + mBitmap3.hasAlpha());
 
             mBitmapPaint = new Paint();
         }
@@ -65,7 +65,7 @@
         protected void onDraw(Canvas canvas) {
             super.onDraw(canvas);
             
-            Log.d("OpenGLRenderer", "================= Draw");
+            Log.d("HWUI", "================= Draw");
 
             canvas.translate(120.0f, 50.0f);
             canvas.drawBitmap(mBitmap1, 0.0f, 0.0f, mBitmapPaint);
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ClearActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ClearActivity.java
index 1c82e9b..dbfb4ca 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/ClearActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ClearActivity.java
@@ -77,7 +77,7 @@
                     canvas.drawPath(mPath, mClearPaint);
                 }
                 canvas.restore();
-                canvas.drawText("OpenGLRenderer", 50.0f, 50.0f, mClearPaint);
+                canvas.drawText("HWUI", 50.0f, 50.0f, mClearPaint);
                 mClearPaint.setColor(0xff000000);
                 canvas.drawRect(800.0f, 100.0f, 900.0f, 200.0f, mClearPaint);
                 mClearPaint.setColor(0x0000ff00);
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ColorBitmapActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ColorBitmapActivity.java
index e2d17cd..1f4c6c5 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/ColorBitmapActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ColorBitmapActivity.java
@@ -17,6 +17,7 @@
 package com.android.test.hwui;
 
 import android.app.Activity;
+import android.content.pm.ActivityInfo;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.ColorSpace;
@@ -72,6 +73,10 @@
     private int[] mGradientEndColors = {0xFFFFFFFF, 0xFFFF0000, 0xFF00FF00, 0xFF0000FF};
     private String[] mGradientColorNames = {"Grayscale", "Red", "Green", "Blue"};
 
+    private int mColorMode = ActivityInfo.COLOR_MODE_DEFAULT;
+    private int[] mColorModes = {ActivityInfo.COLOR_MODE_DEFAULT, ActivityInfo.COLOR_MODE_HDR};
+    private String[] mColorModeNames = {"DEFAULT", "HDR"};
+
     private final ExecutorService mBufferFenceExecutor = Executors.newFixedThreadPool(1);
     private final ExecutorService mBufferExecutor = Executors.newFixedThreadPool(1);
 
@@ -139,6 +144,15 @@
             gradientColorSpinner
                     .setOnItemSelectedListener(new GradientColorOnItemSelectedListener());
 
+            ArrayAdapter<String> colorModeAdapter = new ArrayAdapter<>(
+                    this, android.R.layout.simple_spinner_item, mColorModeNames);
+
+            colorModeAdapter
+                    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+            Spinner colorModeSpinner = new Spinner(this);
+            colorModeSpinner.setAdapter(colorModeAdapter);
+            colorModeSpinner.setOnItemSelectedListener(new ColorModeOnItemSelectedListener());
+
             mGradientBuffer = getGradientBuffer().get();
 
             LinearLayout linearLayout = new LinearLayout(this);
@@ -169,6 +183,10 @@
                     LinearLayout.LayoutParams.WRAP_CONTENT,
                     LinearLayout.LayoutParams.WRAP_CONTENT));
 
+            spinnerLayout.addView(colorModeSpinner, new LinearLayout.LayoutParams(
+                    LinearLayout.LayoutParams.WRAP_CONTENT,
+                    LinearLayout.LayoutParams.WRAP_CONTENT));
+
             linearLayout.addView(spinnerLayout, new LinearLayout.LayoutParams(
                     LinearLayout.LayoutParams.WRAP_CONTENT,
                     LinearLayout.LayoutParams.WRAP_CONTENT));
@@ -187,6 +205,8 @@
             linearLayout.addView(mSurfaceView, new LinearLayout.LayoutParams(WIDTH, HEIGHT));
 
             setContentView(linearLayout);
+
+            getWindow().setColorMode(mColorMode);
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -312,4 +332,22 @@
 
         }
     }
+
+    private final class ColorModeOnItemSelectedListener
+            implements AdapterView.OnItemSelectedListener {
+
+        @Override
+        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+            ColorBitmapActivity.this.mColorMode = ColorBitmapActivity.this.mColorModes[position];
+            ColorBitmapActivity.this.getMainExecutor()
+                    .execute(() -> {
+                        ColorBitmapActivity.this.getWindow().setColorMode(mColorMode);
+                    });
+        }
+
+        @Override
+        public void onNothingSelected(AdapterView<?> parent) {
+
+        }
+    }
 }
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/QuickRejectActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/QuickRejectActivity.java
index 5192bfe..11a2a41 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/QuickRejectActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/QuickRejectActivity.java
@@ -53,30 +53,30 @@
             super.onDraw(canvas);
 
             int count = canvas.getSaveCount();
-            Log.d("OpenGLRenderer", "count=" + count);
+            Log.d("HWUI", "count=" + count);
             count = canvas.save();
-            Log.d("OpenGLRenderer", "count after save=" + count);
+            Log.d("HWUI", "count after save=" + count);
             count = canvas.getSaveCount();
-            Log.d("OpenGLRenderer", "getSaveCount after save=" + count);
+            Log.d("HWUI", "getSaveCount after save=" + count);
             canvas.restore();
             count = canvas.getSaveCount();
-            Log.d("OpenGLRenderer", "count after restore=" + count);
+            Log.d("HWUI", "count after restore=" + count);
             canvas.save();
-            Log.d("OpenGLRenderer", "count after save=" + canvas.getSaveCount());
+            Log.d("HWUI", "count after save=" + canvas.getSaveCount());
             canvas.save();
-            Log.d("OpenGLRenderer", "count after save=" + canvas.getSaveCount());
+            Log.d("HWUI", "count after save=" + canvas.getSaveCount());
             canvas.save();
-            Log.d("OpenGLRenderer", "count after save=" + canvas.getSaveCount());
+            Log.d("HWUI", "count after save=" + canvas.getSaveCount());
             canvas.restoreToCount(count);
             count = canvas.getSaveCount();
-            Log.d("OpenGLRenderer", "count after restoreToCount=" + count);
+            Log.d("HWUI", "count after restoreToCount=" + count);
             count = canvas.saveLayer(0, 0, 10, 10, mBitmapPaint, Canvas.ALL_SAVE_FLAG);
-            Log.d("OpenGLRenderer", "count after saveLayer=" + count);
+            Log.d("HWUI", "count after saveLayer=" + count);
             count = canvas.getSaveCount();
-            Log.d("OpenGLRenderer", "getSaveCount after saveLayer=" + count);
+            Log.d("HWUI", "getSaveCount after saveLayer=" + count);
             canvas.restore();
             count = canvas.getSaveCount();
-            Log.d("OpenGLRenderer", "count after restore=" + count);
+            Log.d("HWUI", "count after restore=" + count);
 
             canvas.save();
             canvas.clipRect(0.0f, 0.0f, 40.0f, 40.0f);
diff --git a/tests/Input/Android.bp b/tests/Input/Android.bp
index 4fa6fbe..96b685d 100644
--- a/tests/Input/Android.bp
+++ b/tests/Input/Android.bp
@@ -19,13 +19,26 @@
     platform_apis: true,
     certificate: "platform",
     static_libs: [
+        "androidx.test.core",
         "androidx.test.ext.junit",
+        "androidx.test.ext.truth",
         "androidx.test.rules",
+        "androidx.test.runner",
+        "androidx.test.uiautomator_uiautomator",
+        "servicestests-utils",
+        "frameworks-base-testutils",
+        "hamcrest-library",
+        "kotlin-test",
         "mockito-target-minus-junit4",
+        "platform-test-annotations",
         "services.core.unboosted",
         "testables",
+        "testng",
         "truth-prebuilt",
-        "androidx.test.uiautomator_uiautomator",
+    ],
+    libs: [
+        "android.test.mock",
+        "android.test.base",
     ],
     test_suites: ["device-tests"],
 }
diff --git a/tests/Input/AndroidManifest.xml b/tests/Input/AndroidManifest.xml
index 20f564e..3b723dd 100644
--- a/tests/Input/AndroidManifest.xml
+++ b/tests/Input/AndroidManifest.xml
@@ -16,11 +16,14 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.android.test.input">
-    <uses-permission android:name="android.permission.MONITOR_INPUT"/>
-    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
-    <uses-permission android:name="android.permission.INJECT_EVENTS"/>
 
-    <application android:label="InputTest">
+    <uses-permission android:name="android.permission.INJECT_EVENTS"/>
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
+    <uses-permission android:name="android.permission.MONITOR_INPUT"/>
+    <uses-permission android:name="android.permission.READ_DEVICE_CONFIG"/>
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
+
+    <application android:label="InputTest" android:debuggable="true">
 
         <activity android:name=".UnresponsiveGestureMonitorActivity"
              android:label="Unresponsive gesture monitor"
diff --git a/services/tests/servicestests/res/raw/dummy_keyboard_layout.kcm b/tests/Input/res/raw/dummy_keyboard_layout.kcm
similarity index 100%
rename from services/tests/servicestests/res/raw/dummy_keyboard_layout.kcm
rename to tests/Input/res/raw/dummy_keyboard_layout.kcm
diff --git a/services/tests/servicestests/res/raw/input_port_associations.xml b/tests/Input/res/raw/input_port_associations.xml
similarity index 100%
rename from services/tests/servicestests/res/raw/input_port_associations.xml
rename to tests/Input/res/raw/input_port_associations.xml
diff --git a/services/tests/servicestests/res/raw/input_port_associations_bad_displayport.xml b/tests/Input/res/raw/input_port_associations_bad_displayport.xml
similarity index 100%
rename from services/tests/servicestests/res/raw/input_port_associations_bad_displayport.xml
rename to tests/Input/res/raw/input_port_associations_bad_displayport.xml
diff --git a/services/tests/servicestests/res/raw/input_port_associations_bad_xml.xml b/tests/Input/res/raw/input_port_associations_bad_xml.xml
similarity index 100%
rename from services/tests/servicestests/res/raw/input_port_associations_bad_xml.xml
rename to tests/Input/res/raw/input_port_associations_bad_xml.xml
diff --git a/services/tests/servicestests/res/xml/keyboard_layouts.xml b/tests/Input/res/xml/keyboard_layouts.xml
similarity index 100%
rename from services/tests/servicestests/res/xml/keyboard_layouts.xml
rename to tests/Input/res/xml/keyboard_layouts.xml
diff --git a/tests/Input/src/android/hardware/input/InputDeviceBatteryListenerTest.kt b/tests/Input/src/android/hardware/input/InputDeviceBatteryListenerTest.kt
new file mode 100644
index 0000000..90dff47
--- /dev/null
+++ b/tests/Input/src/android/hardware/input/InputDeviceBatteryListenerTest.kt
@@ -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 android.hardware.input
+
+import android.content.Context
+import android.content.ContextWrapper
+import android.hardware.BatteryState
+import android.os.Handler
+import android.os.HandlerExecutor
+import android.os.test.TestLooper
+import android.platform.test.annotations.Presubmit
+import androidx.test.core.app.ApplicationProvider
+import com.android.server.testutils.any
+import java.util.concurrent.Executor
+import kotlin.test.assertEquals
+import kotlin.test.assertNotNull
+import kotlin.test.assertTrue
+import kotlin.test.fail
+import org.junit.After
+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
+import org.mockito.Mockito.anyInt
+import org.mockito.Mockito.doAnswer
+import org.mockito.Mockito.`when`
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoJUnitRunner
+
+/**
+ * Tests for [InputManager.InputDeviceBatteryListener].
+ *
+ * Build/Install/Run:
+ * atest InputTests:InputDeviceBatteryListenerTest
+ */
+@Presubmit
+@RunWith(MockitoJUnitRunner::class)
+class InputDeviceBatteryListenerTest {
+    @get:Rule
+    val rule = MockitoJUnit.rule()!!
+
+    private lateinit var testLooper: TestLooper
+    private var registeredListener: IInputDeviceBatteryListener? = null
+    private val monitoredDevices = mutableListOf<Int>()
+    private lateinit var executor: Executor
+    private lateinit var context: Context
+    private lateinit var inputManager: InputManager
+
+    @Mock
+    private lateinit var iInputManagerMock: IInputManager
+    private lateinit var inputManagerGlobalSession: InputManagerGlobal.TestSession
+
+    @Before
+    fun setUp() {
+        context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
+        testLooper = TestLooper()
+        executor = HandlerExecutor(Handler(testLooper.looper))
+        registeredListener = null
+        monitoredDevices.clear()
+        inputManagerGlobalSession = InputManagerGlobal.createTestSession(iInputManagerMock)
+        inputManager = InputManager(context)
+        `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE)))
+                .thenReturn(inputManager)
+
+        // Handle battery listener registration.
+        doAnswer {
+            val deviceId = it.getArgument(0) as Int
+            val listener = it.getArgument(1) as IInputDeviceBatteryListener
+            if (registeredListener != null &&
+                    registeredListener!!.asBinder() != listener.asBinder()) {
+                // There can only be one registered battery listener per process.
+                fail("Trying to register a new listener when one already exists")
+            }
+            if (monitoredDevices.contains(deviceId)) {
+                fail("Trying to start monitoring a device that was already being monitored")
+            }
+            monitoredDevices.add(deviceId)
+            registeredListener = listener
+            null
+        }.`when`(iInputManagerMock).registerBatteryListener(anyInt(), any())
+
+        // Handle battery listener being unregistered.
+        doAnswer {
+            val deviceId = it.getArgument(0) as Int
+            val listener = it.getArgument(1) as IInputDeviceBatteryListener
+            if (registeredListener == null ||
+                    registeredListener!!.asBinder() != listener.asBinder()) {
+                fail("Trying to unregister a listener that is not registered")
+            }
+            if (!monitoredDevices.remove(deviceId)) {
+                fail("Trying to stop monitoring a device that is not being monitored")
+            }
+            if (monitoredDevices.isEmpty()) {
+                registeredListener = null
+            }
+        }.`when`(iInputManagerMock).unregisterBatteryListener(anyInt(), any())
+    }
+
+    @After
+    fun tearDown() {
+        if (this::inputManagerGlobalSession.isInitialized) {
+            inputManagerGlobalSession.close()
+        }
+    }
+
+    private fun notifyBatteryStateChanged(
+        deviceId: Int,
+        isPresent: Boolean = true,
+        status: Int = BatteryState.STATUS_FULL,
+        capacity: Float = 1.0f,
+        eventTime: Long = 12345L
+    ) {
+        registeredListener!!.onBatteryStateChanged(IInputDeviceBatteryState().apply {
+            this.deviceId = deviceId
+            this.updateTime = eventTime
+            this.isPresent = isPresent
+            this.status = status
+            this.capacity = capacity
+        })
+    }
+
+    @Test
+    fun testListenerIsNotifiedCorrectly() {
+        var callbackCount = 0
+
+        // Add a battery listener to monitor battery changes.
+        inputManager.addInputDeviceBatteryListener(1 /*deviceId*/, executor) {
+                deviceId: Int, eventTime: Long, batteryState: BatteryState ->
+            callbackCount++
+            assertEquals(1, deviceId)
+            assertEquals(true, batteryState.isPresent)
+            assertEquals(BatteryState.STATUS_DISCHARGING, batteryState.status)
+            assertEquals(0.5f, batteryState.capacity)
+            assertEquals(8675309L, eventTime)
+        }
+
+        // Adding the listener should register the callback with InputManagerService.
+        assertNotNull(registeredListener)
+        assertTrue(monitoredDevices.contains(1))
+
+        // Notifying battery change for a different device should not trigger the listener.
+        notifyBatteryStateChanged(deviceId = 2)
+        testLooper.dispatchAll()
+        assertEquals(0, callbackCount)
+
+        // Notifying battery change for the registered device will notify the listener.
+        notifyBatteryStateChanged(1 /*deviceId*/, true /*isPresent*/,
+            BatteryState.STATUS_DISCHARGING, 0.5f /*capacity*/, 8675309L /*eventTime*/)
+        testLooper.dispatchNext()
+        assertEquals(1, callbackCount)
+    }
+
+    @Test
+    fun testMultipleListeners() {
+        // Set up two callbacks.
+        var callbackCount1 = 0
+        var callbackCount2 = 0
+        val callback1 = InputManager.InputDeviceBatteryListener { _, _, _ -> callbackCount1++ }
+        val callback2 = InputManager.InputDeviceBatteryListener { _, _, _ -> callbackCount2++ }
+
+        // Monitor battery changes for three devices. The first callback monitors devices 1 and 3,
+        // while the second callback monitors devices 2 and 3.
+        inputManager.addInputDeviceBatteryListener(1 /*deviceId*/, executor, callback1)
+        assertEquals(1, monitoredDevices.size)
+        inputManager.addInputDeviceBatteryListener(2 /*deviceId*/, executor, callback2)
+        assertEquals(2, monitoredDevices.size)
+        inputManager.addInputDeviceBatteryListener(3 /*deviceId*/, executor, callback1)
+        assertEquals(3, monitoredDevices.size)
+        inputManager.addInputDeviceBatteryListener(3 /*deviceId*/, executor, callback2)
+        assertEquals(3, monitoredDevices.size)
+
+        // Notifying battery change for each of the devices should trigger the registered callbacks.
+        notifyBatteryStateChanged(deviceId = 1)
+        testLooper.dispatchNext()
+        assertEquals(1, callbackCount1)
+        assertEquals(0, callbackCount2)
+
+        notifyBatteryStateChanged(deviceId = 2)
+        testLooper.dispatchNext()
+        assertEquals(1, callbackCount1)
+        assertEquals(1, callbackCount2)
+
+        notifyBatteryStateChanged(deviceId = 3)
+        testLooper.dispatchNext()
+        testLooper.dispatchNext()
+        assertEquals(2, callbackCount1)
+        assertEquals(2, callbackCount2)
+
+        // Stop monitoring devices 1 and 2.
+        inputManager.removeInputDeviceBatteryListener(1 /*deviceId*/, callback1)
+        assertEquals(2, monitoredDevices.size)
+        inputManager.removeInputDeviceBatteryListener(2 /*deviceId*/, callback2)
+        assertEquals(1, monitoredDevices.size)
+
+        // Ensure device 3 continues to be monitored.
+        notifyBatteryStateChanged(deviceId = 3)
+        testLooper.dispatchNext()
+        testLooper.dispatchNext()
+        assertEquals(3, callbackCount1)
+        assertEquals(3, callbackCount2)
+
+        // Stop monitoring all devices.
+        inputManager.removeInputDeviceBatteryListener(3 /*deviceId*/, callback1)
+        assertEquals(1, monitoredDevices.size)
+        inputManager.removeInputDeviceBatteryListener(3 /*deviceId*/, callback2)
+        assertEquals(0, monitoredDevices.size)
+    }
+
+    @Test
+    fun testAdditionalListenersNotifiedImmediately() {
+        var callbackCount1 = 0
+        var callbackCount2 = 0
+        val callback1 = InputManager.InputDeviceBatteryListener { _, _, _ -> callbackCount1++ }
+        val callback2 = InputManager.InputDeviceBatteryListener { _, _, _ -> callbackCount2++ }
+
+        // Add a battery listener and send the latest battery state.
+        inputManager.addInputDeviceBatteryListener(1 /*deviceId*/, executor, callback1)
+        assertEquals(1, monitoredDevices.size)
+        notifyBatteryStateChanged(deviceId = 1)
+        testLooper.dispatchNext()
+        assertEquals(1, callbackCount1)
+
+        // Add a second listener for the same device that already has the latest battery state.
+        inputManager.addInputDeviceBatteryListener(1 /*deviceId*/, executor, callback2)
+        assertEquals(1, monitoredDevices.size)
+
+        // Ensure that this listener is notified immediately.
+        testLooper.dispatchNext()
+        assertEquals(1, callbackCount2)
+    }
+}
diff --git a/tests/Input/src/android/hardware/input/InputDeviceLightsManagerTest.java b/tests/Input/src/android/hardware/input/InputDeviceLightsManagerTest.java
new file mode 100644
index 0000000..080186e
--- /dev/null
+++ b/tests/Input/src/android/hardware/input/InputDeviceLightsManagerTest.java
@@ -0,0 +1,290 @@
+/*
+ * 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 android.hardware.input;
+
+import static android.hardware.lights.LightsRequest.Builder;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertNotNull;
+
+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.doAnswer;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.hardware.lights.Light;
+import android.hardware.lights.LightState;
+import android.hardware.lights.LightsManager;
+import android.hardware.lights.LightsRequest;
+import android.os.IBinder;
+import android.platform.test.annotations.Presubmit;
+import android.util.ArrayMap;
+import android.view.InputDevice;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.MockitoRule;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Tests for {@link InputDeviceLightsManager}.
+ *
+ * Build/Install/Run:
+ * atest InputTests:InputDeviceLightsManagerTest
+ */
+@Presubmit
+@RunWith(MockitoJUnitRunner.class)
+public class InputDeviceLightsManagerTest {
+    private static final String TAG = "InputDeviceLightsManagerTest";
+
+    private static final int DEVICE_ID = 1000;
+    private static final int PLAYER_ID = 3;
+
+    @Rule public final MockitoRule mockito = MockitoJUnit.rule();
+
+    private InputManager mInputManager;
+
+    @Mock private IInputManager mIInputManagerMock;
+    private InputManagerGlobal.TestSession mInputManagerGlobalSession;
+
+    @Before
+    public void setUp() throws Exception {
+        final Context context = spy(
+                new ContextWrapper(InstrumentationRegistry.getInstrumentation().getContext()));
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{DEVICE_ID});
+
+        when(mIInputManagerMock.getInputDevice(eq(DEVICE_ID))).thenReturn(
+                createInputDevice(DEVICE_ID));
+
+        mInputManagerGlobalSession = InputManagerGlobal.createTestSession(mIInputManagerMock);
+        mInputManager = new InputManager(context);
+        when(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(mInputManager);
+
+        ArrayMap<Integer, LightState> lightStatesById = new ArrayMap<>();
+        doAnswer(invocation -> {
+            final int[] lightIds = (int[]) invocation.getArguments()[1];
+            final LightState[] lightStates =
+                    (LightState[]) invocation.getArguments()[2];
+            for (int i = 0; i < lightIds.length; i++) {
+                lightStatesById.put(lightIds[i], lightStates[i]);
+            }
+            return null;
+        }).when(mIInputManagerMock).setLightStates(eq(DEVICE_ID),
+                any(int[].class), any(LightState[].class), any(IBinder.class));
+
+        doAnswer(invocation -> {
+            int lightId = (int) invocation.getArguments()[1];
+            if (lightStatesById.containsKey(lightId)) {
+                return lightStatesById.get(lightId);
+            }
+            return new LightState(0);
+        }).when(mIInputManagerMock).getLightState(eq(DEVICE_ID), anyInt());
+    }
+
+    @After
+    public void tearDown() {
+        if (mInputManagerGlobalSession != null) {
+            mInputManagerGlobalSession.close();
+        }
+    }
+
+    private InputDevice createInputDevice(int id) {
+        return new InputDevice.Builder()
+                .setId(id)
+                .setName("Test Device " + id)
+                .build();
+    }
+
+    private void mockLights(Light[] lights) throws Exception {
+        // Mock the Lights returned form InputManagerService
+        when(mIInputManagerMock.getLights(eq(DEVICE_ID))).thenReturn(
+                new ArrayList(Arrays.asList(lights)));
+    }
+
+    @Test
+    public void testGetInputDeviceLights() throws Exception {
+        InputDevice device = mInputManager.getInputDevice(DEVICE_ID);
+        assertNotNull(device);
+
+        Light[] mockedLights = {
+            new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
+                        Light.LIGHT_CAPABILITY_BRIGHTNESS),
+            new Light(2 /* id */, "Light2", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
+                        Light.LIGHT_CAPABILITY_COLOR_RGB),
+            new Light(3 /* id */, "Light3", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
+                        0 /* capabilities */)
+        };
+        mockLights(mockedLights);
+
+        LightsManager lightsManager = device.getLightsManager();
+        List<Light> lights = lightsManager.getLights();
+        verify(mIInputManagerMock).getLights(eq(DEVICE_ID));
+        assertEquals(lights, Arrays.asList(mockedLights));
+    }
+
+    @Test
+    public void testControlMultipleLights() throws Exception {
+        InputDevice device = mInputManager.getInputDevice(DEVICE_ID);
+        assertNotNull(device);
+
+        Light[] mockedLights = {
+            new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
+                        Light.LIGHT_CAPABILITY_COLOR_RGB),
+            new Light(2 /* id */, "Light2", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
+                        Light.LIGHT_CAPABILITY_COLOR_RGB),
+            new Light(3 /* id */, "Light3", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
+                        Light.LIGHT_CAPABILITY_COLOR_RGB),
+            new Light(4 /* id */, "Light4", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
+                        Light.LIGHT_CAPABILITY_COLOR_RGB)
+        };
+        mockLights(mockedLights);
+
+        LightsManager lightsManager = device.getLightsManager();
+        List<Light> lightList = lightsManager.getLights();
+        LightState[] states = new LightState[]{new LightState(0xf1), new LightState(0xf2),
+                new LightState(0xf3)};
+        // Open a session to request turn 3/4 lights on:
+        LightsManager.LightsSession session = lightsManager.openSession();
+        session.requestLights(new Builder()
+                .addLight(lightsManager.getLights().get(0), states[0])
+                .addLight(lightsManager.getLights().get(1), states[1])
+                .addLight(lightsManager.getLights().get(2), states[2])
+                .build());
+        IBinder token = session.getToken();
+
+        verify(mIInputManagerMock).openLightSession(eq(DEVICE_ID),
+                any(String.class), eq(token));
+        verify(mIInputManagerMock).setLightStates(eq(DEVICE_ID), eq(new int[]{1, 2, 3}),
+                eq(states), eq(token));
+
+        // Then all 3 should turn on.
+        assertThat(lightsManager.getLightState(lightsManager.getLights().get(0)).getColor())
+                .isEqualTo(0xf1);
+        assertThat(lightsManager.getLightState(lightsManager.getLights().get(1)).getColor())
+                .isEqualTo(0xf2);
+        assertThat(lightsManager.getLightState(lightsManager.getLights().get(2)).getColor())
+                .isEqualTo(0xf3);
+
+        // And the 4th should remain off.
+        assertThat(lightsManager.getLightState(lightsManager.getLights().get(3)).getColor())
+                .isEqualTo(0x00);
+
+        // close session
+        session.close();
+        verify(mIInputManagerMock).closeLightSession(eq(DEVICE_ID), eq(token));
+    }
+
+    @Test
+    public void testControlPlayerIdLight() throws Exception {
+        InputDevice device = mInputManager.getInputDevice(DEVICE_ID);
+        assertNotNull(device);
+
+        Light[] mockedLights = {
+                new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_PLAYER_ID,
+                            0 /* capabilities */),
+                new Light(2 /* id */, "Light2", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
+                            Light.LIGHT_CAPABILITY_COLOR_RGB | Light.LIGHT_CAPABILITY_BRIGHTNESS),
+                new Light(3 /* id */, "Light3", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
+                            Light.LIGHT_CAPABILITY_BRIGHTNESS)
+        };
+        mockLights(mockedLights);
+
+        LightsManager lightsManager = device.getLightsManager();
+        List<Light> lightList = lightsManager.getLights();
+        LightState[] states = new LightState[]{new LightState(0xf1, PLAYER_ID)};
+        // Open a session to request set Player ID light:
+        LightsManager.LightsSession session = lightsManager.openSession();
+        session.requestLights(new Builder()
+                .addLight(lightsManager.getLights().get(0), states[0])
+                .build());
+        IBinder token = session.getToken();
+
+        verify(mIInputManagerMock).openLightSession(eq(DEVICE_ID),
+                any(String.class), eq(token));
+        verify(mIInputManagerMock).setLightStates(eq(DEVICE_ID), eq(new int[]{1}),
+                eq(states), eq(token));
+
+        // Verify the light state
+        assertThat(lightsManager.getLightState(lightsManager.getLights().get(0)).getColor())
+                .isEqualTo(0xf1);
+        assertThat(lightsManager.getLightState(lightsManager.getLights().get(0)).getPlayerId())
+                .isEqualTo(PLAYER_ID);
+
+        // close session
+        session.close();
+        verify(mIInputManagerMock).closeLightSession(eq(DEVICE_ID), eq(token));
+    }
+
+    @Test
+    public void testLightCapabilities() throws Exception {
+        Light light = new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
+                Light.LIGHT_CAPABILITY_COLOR_RGB | Light.LIGHT_CAPABILITY_BRIGHTNESS);
+        assertThat(light.getType()).isEqualTo(Light.LIGHT_TYPE_INPUT);
+        assertThat(light.getCapabilities()).isEqualTo(Light.LIGHT_CAPABILITY_COLOR_RGB
+                | Light.LIGHT_CAPABILITY_BRIGHTNESS);
+        assertTrue(light.hasBrightnessControl());
+        assertTrue(light.hasRgbControl());
+    }
+
+    @Test
+    public void testLightsRequest() throws Exception {
+        Light light1 = new Light(1 /* id */, "Light1", 0 /* ordinal */, Light.LIGHT_TYPE_INPUT,
+                0 /* capabilities */);
+        Light light2 = new Light(2 /* id */, "Light2", 0 /* ordinal */, Light.LIGHT_TYPE_PLAYER_ID,
+                0 /* capabilities */);
+        LightState state1 = new LightState(0xf1);
+        LightState state2 = new LightState(0xf2, PLAYER_ID);
+        LightsRequest request = new Builder().addLight(light1, state1)
+                .addLight(light2, state2).build();
+
+        // Covers the LightsRequest.getLights
+        assertThat(request.getLights().size()).isEqualTo(2);
+        assertThat(request.getLights().get(0)).isEqualTo(1);
+        assertThat(request.getLights().get(1)).isEqualTo(2);
+
+        // Covers the LightsRequest.getLightStates
+        assertThat(request.getLightStates().size()).isEqualTo(2);
+        assertThat(request.getLightStates().get(0)).isEqualTo(state1);
+        assertThat(request.getLightStates().get(1)).isEqualTo(state2);
+
+        // Covers the LightsRequest.getLightsAndStates
+        assertThat(request.getLightsAndStates().size()).isEqualTo(2);
+        assertThat(request.getLightsAndStates().containsKey(light1)).isTrue();
+        assertThat(request.getLightsAndStates().get(light1)).isEqualTo(state1);
+        assertThat(request.getLightsAndStates().get(light2)).isEqualTo(state2);
+    }
+
+}
diff --git a/tests/Input/src/android/hardware/input/InputDeviceSensorManagerTest.java b/tests/Input/src/android/hardware/input/InputDeviceSensorManagerTest.java
new file mode 100644
index 0000000..0e3c200
--- /dev/null
+++ b/tests/Input/src/android/hardware/input/InputDeviceSensorManagerTest.java
@@ -0,0 +1,246 @@
+/*
+ * 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 android.hardware.input;
+
+import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertNotNull;
+import static junit.framework.TestCase.assertTrue;
+import static junit.framework.TestCase.fail;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+import android.platform.test.annotations.Presubmit;
+import android.view.InputDevice;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import com.android.internal.annotations.GuardedBy;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.MockitoRule;
+
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Tests for {@link InputDeviceSensorManager}.
+ *
+ * Build/Install/Run:
+ * atest InputTests:InputDeviceSensorManagerTest
+ */
+@Presubmit
+@RunWith(MockitoJUnitRunner.class)
+public class InputDeviceSensorManagerTest {
+    private static final String TAG = "InputDeviceSensorManagerTest";
+
+    private static final int DEVICE_ID = 1000;
+
+    @Rule public final MockitoRule mockito = MockitoJUnit.rule();
+
+    private InputManager mInputManager;
+    private IInputSensorEventListener mIInputSensorEventListener;
+    private final Object mLock = new Object();
+
+    @Mock private IInputManager mIInputManagerMock;
+    private InputManagerGlobal.TestSession mInputManagerGlobalSession;
+
+    @Before
+    public void setUp() throws Exception {
+        final Context context = spy(
+                new ContextWrapper(InstrumentationRegistry.getInstrumentation().getContext()));
+        mInputManagerGlobalSession = InputManagerGlobal.createTestSession(mIInputManagerMock);
+        mInputManager = new InputManager(context);
+        when(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(mInputManager);
+
+        when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[]{DEVICE_ID});
+
+        when(mIInputManagerMock.getInputDevice(eq(DEVICE_ID))).thenReturn(
+                createInputDeviceWithSensor(DEVICE_ID));
+
+        when(mIInputManagerMock.getSensorList(eq(DEVICE_ID))).thenReturn(new InputSensorInfo[] {
+                createInputSensorInfo(DEVICE_ID, Sensor.TYPE_ACCELEROMETER),
+                createInputSensorInfo(DEVICE_ID, Sensor.TYPE_GYROSCOPE)});
+
+        when(mIInputManagerMock.enableSensor(eq(DEVICE_ID), anyInt(), anyInt(), anyInt()))
+                .thenReturn(true);
+
+        when(mIInputManagerMock.registerSensorListener(any())).thenReturn(true);
+    }
+
+    @After
+    public void tearDown() {
+        if (mInputManagerGlobalSession != null) {
+            mInputManagerGlobalSession.close();
+        }
+    }
+
+    private class InputTestSensorEventListener implements SensorEventListener {
+        @GuardedBy("mLock")
+        private final BlockingQueue<SensorEvent> mEvents = new LinkedBlockingQueue<>();
+        InputTestSensorEventListener() {
+            super();
+        }
+
+        public SensorEvent waitForSensorEvent() {
+            try {
+                return mEvents.poll(5, TimeUnit.SECONDS);
+            } catch (InterruptedException e) {
+                fail("unexpectedly interrupted while waiting for SensorEvent");
+                return null;
+            }
+        }
+
+        @Override
+        public void onSensorChanged(SensorEvent event) {
+            synchronized (mLock) {
+                try {
+                    mEvents.put(event);
+                } catch (InterruptedException ex) {
+                    fail("interrupted while adding a SensorEvent to the queue");
+                }
+            }
+        }
+
+        @Override
+        public void onAccuracyChanged(Sensor sensor, int accuracy) {
+        }
+    }
+
+    private InputDevice createInputDeviceWithSensor(int id) {
+        return new InputDevice.Builder()
+                .setId(id)
+                .setName("Test Device " + id)
+                .setHasSensor(true)
+                .build();
+    }
+
+    private InputSensorInfo createInputSensorInfo(int id, int type) {
+        InputSensorInfo info = new InputSensorInfo("name", "vendor", 0 /* version */,
+                0 /* handle */, type, 100.0f /*maxRange */, 0.02f /* resolution */,
+                0.8f /* power */, 1000 /* minDelay */, 0 /* fifoReservedEventCount */,
+                0 /* fifoMaxEventCount */, "" /* stringType */, "" /* requiredPermission */,
+                0 /* maxDelay */, 0 /* flags */, id);
+        return info;
+    }
+
+    private InputDevice getSensorDevice(int[] deviceIds) {
+        for (int deviceId : deviceIds) {
+            InputDevice device = mInputManager.getInputDevice(deviceId);
+            if (device.hasSensor()) {
+                return device;
+            }
+        }
+        return null;
+    }
+
+    @Test
+    public void getInputDeviceSensors_withExpectedType() throws Exception {
+        InputDevice device = getSensorDevice(mInputManager.getInputDeviceIds());
+        assertNotNull(device);
+
+        SensorManager sensorManager = device.getSensorManager();
+        List<Sensor> accelList = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
+        verify(mIInputManagerMock).getSensorList(eq(DEVICE_ID));
+        assertEquals(1, accelList.size());
+        assertEquals(DEVICE_ID, accelList.get(0).getId());
+        assertEquals(Sensor.TYPE_ACCELEROMETER, accelList.get(0).getType());
+
+        List<Sensor> gyroList = sensorManager.getSensorList(Sensor.TYPE_GYROSCOPE);
+        verify(mIInputManagerMock).getSensorList(eq(DEVICE_ID));
+        assertEquals(1, gyroList.size());
+        assertEquals(DEVICE_ID, gyroList.get(0).getId());
+        assertEquals(Sensor.TYPE_GYROSCOPE, gyroList.get(0).getType());
+
+    }
+
+    @Test
+    public void getInputDeviceSensors_withUnexpectedType() throws Exception {
+        InputDevice device = getSensorDevice(mInputManager.getInputDeviceIds());
+
+        assertNotNull(device);
+        SensorManager sensorManager = device.getSensorManager();
+
+        List<Sensor> gameRotationList = sensorManager.getSensorList(
+                Sensor.TYPE_GAME_ROTATION_VECTOR);
+        verify(mIInputManagerMock).getSensorList(eq(DEVICE_ID));
+        assertEquals(0, gameRotationList.size());
+
+        List<Sensor> gravityList = sensorManager.getSensorList(Sensor.TYPE_GRAVITY);
+        verify(mIInputManagerMock).getSensorList(eq(DEVICE_ID));
+        assertEquals(0, gravityList.size());
+    }
+
+    @Test
+    public void testInputDeviceSensorListener() throws Exception {
+        InputDevice device = getSensorDevice(mInputManager.getInputDeviceIds());
+        assertNotNull(device);
+
+        SensorManager sensorManager = device.getSensorManager();
+        Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
+        assertEquals(Sensor.TYPE_ACCELEROMETER, sensor.getType());
+
+        doAnswer(invocation -> {
+            mIInputSensorEventListener = invocation.getArgument(0);
+            assertNotNull(mIInputSensorEventListener);
+            return true;
+        }).when(mIInputManagerMock).registerSensorListener(any());
+
+        InputTestSensorEventListener listener = new InputTestSensorEventListener();
+        assertTrue(sensorManager.registerListener(listener, sensor,
+                SensorManager.SENSOR_DELAY_NORMAL));
+        verify(mIInputManagerMock).registerSensorListener(any());
+        verify(mIInputManagerMock).enableSensor(eq(DEVICE_ID), eq(sensor.getType()),
+                anyInt(), anyInt());
+
+        float[] values = new float[] {0.12f, 9.8f, 0.2f};
+        mIInputSensorEventListener.onInputSensorChanged(DEVICE_ID, Sensor.TYPE_ACCELEROMETER,
+                SensorManager.SENSOR_STATUS_ACCURACY_HIGH,  /* timestamp */ 0x1234abcd, values);
+
+        SensorEvent event = listener.waitForSensorEvent();
+        assertNotNull(event);
+        assertEquals(0x1234abcd, event.timestamp);
+        assertEquals(values.length, event.values.length);
+        for (int i = 0; i < values.length; i++) {
+            assertEquals(values[i], event.values[i], 0.001f);
+        }
+
+        sensorManager.unregisterListener(listener);
+        verify(mIInputManagerMock).disableSensor(eq(DEVICE_ID), eq(sensor.getType()));
+    }
+
+}
diff --git a/tests/Input/src/android/hardware/input/InputManagerTest.kt b/tests/Input/src/android/hardware/input/InputManagerTest.kt
new file mode 100644
index 0000000..152dde9
--- /dev/null
+++ b/tests/Input/src/android/hardware/input/InputManagerTest.kt
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.hardware.input
+
+import android.content.Context
+import android.content.ContextWrapper
+import android.content.res.Resources
+import android.platform.test.annotations.Presubmit
+import android.view.Display
+import android.view.DisplayInfo
+import android.view.InputDevice
+import androidx.test.core.app.ApplicationProvider
+import org.junit.After
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertEquals
+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
+import org.mockito.Mockito.eq
+import org.mockito.Mockito.`when`
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoJUnitRunner
+
+/**
+ * Tests for [InputManager].
+ *
+ * Build/Install/Run:
+ * atest InputTests:InputManagerTest
+ */
+@Presubmit
+@RunWith(MockitoJUnitRunner::class)
+class InputManagerTest {
+
+    companion object {
+        const val DEVICE_ID = 42
+        const val SECOND_DEVICE_ID = 96
+        const val THIRD_DEVICE_ID = 99
+    }
+
+    @get:Rule
+    val rule = MockitoJUnit.rule()!!
+
+    private lateinit var devicesChangedListener: IInputDevicesChangedListener
+    private val deviceGenerationMap = mutableMapOf<Int /*deviceId*/, Int /*generation*/>()
+    private lateinit var context: Context
+    private lateinit var inputManager: InputManager
+
+    @Mock
+    private lateinit var iInputManager: IInputManager
+    private lateinit var inputManagerGlobalSession: InputManagerGlobal.TestSession
+
+    @Before
+    fun setUp() {
+        context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
+        inputManagerGlobalSession = InputManagerGlobal.createTestSession(iInputManager)
+        inputManager = InputManager(context)
+        `when`(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(inputManager)
+        `when`(iInputManager.inputDeviceIds).then {
+            deviceGenerationMap.keys.toIntArray()
+        }
+    }
+
+    @After
+    fun tearDown() {
+        if (this::inputManagerGlobalSession.isInitialized) {
+            inputManagerGlobalSession.close()
+        }
+    }
+
+    private fun notifyDeviceChanged(
+        deviceId: Int,
+        associatedDisplayId: Int,
+        usiVersion: HostUsiVersion?,
+    ) {
+        val generation = deviceGenerationMap[deviceId]?.plus(1)
+            ?: throw IllegalArgumentException("Device $deviceId was never added!")
+        deviceGenerationMap[deviceId] = generation
+
+        `when`(iInputManager.getInputDevice(deviceId))
+            .thenReturn(createInputDevice(deviceId, associatedDisplayId, usiVersion, generation))
+        val list = deviceGenerationMap.flatMap { listOf(it.key, it.value) }
+        if (::devicesChangedListener.isInitialized) {
+            devicesChangedListener.onInputDevicesChanged(list.toIntArray())
+        }
+    }
+
+    private fun addInputDevice(
+        deviceId: Int,
+        associatedDisplayId: Int,
+        usiVersion: HostUsiVersion?,
+    ) {
+        deviceGenerationMap[deviceId] = 0
+        notifyDeviceChanged(deviceId, associatedDisplayId, usiVersion)
+    }
+
+    @Test
+    fun testUsiVersionDisplayAssociation() {
+        addInputDevice(DEVICE_ID, Display.DEFAULT_DISPLAY, null)
+        addInputDevice(SECOND_DEVICE_ID, Display.INVALID_DISPLAY, HostUsiVersion(9, 8))
+        addInputDevice(THIRD_DEVICE_ID, 42, HostUsiVersion(3, 1))
+
+        val usiVersion = inputManager.getHostUsiVersion(createDisplay(42))
+        assertNotNull(usiVersion)
+        assertEquals(3, usiVersion!!.majorVersion)
+        assertEquals(1, usiVersion.minorVersion)
+    }
+
+    @Test
+    fun testUsiVersionFallBackToDisplayConfig() {
+        addInputDevice(DEVICE_ID, Display.DEFAULT_DISPLAY, null)
+
+        `when`(iInputManager.getHostUsiVersionFromDisplayConfig(eq(42)))
+            .thenReturn(HostUsiVersion(9, 8))
+        val usiVersion = inputManager.getHostUsiVersion(createDisplay(42))
+        assertEquals(HostUsiVersion(9, 8), usiVersion)
+    }
+}
+
+private fun createInputDevice(
+    deviceId: Int,
+    associatedDisplayId: Int,
+    usiVersion: HostUsiVersion? = null,
+    generation: Int = -1,
+): InputDevice =
+    InputDevice.Builder()
+        .setId(deviceId)
+        .setName("Device $deviceId")
+        .setDescriptor("descriptor $deviceId")
+        .setAssociatedDisplayId(associatedDisplayId)
+        .setUsiVersion(usiVersion)
+        .setGeneration(generation)
+        .build()
+
+private fun createDisplay(displayId: Int): Display {
+    val res: Resources? = null
+    return Display(null /* global */, displayId, DisplayInfo(), res)
+}
diff --git a/tests/Input/src/android/hardware/input/KeyboardBacklightListenerTest.kt b/tests/Input/src/android/hardware/input/KeyboardBacklightListenerTest.kt
new file mode 100644
index 0000000..23135b2
--- /dev/null
+++ b/tests/Input/src/android/hardware/input/KeyboardBacklightListenerTest.kt
@@ -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 android.hardware.input
+
+import android.content.Context
+import android.content.ContextWrapper
+import android.os.Handler
+import android.os.HandlerExecutor
+import android.os.test.TestLooper
+import android.platform.test.annotations.Presubmit
+import androidx.test.core.app.ApplicationProvider
+import com.android.server.testutils.any
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito
+import org.mockito.Mockito.doAnswer
+import org.mockito.Mockito.`when`
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoJUnitRunner
+import java.util.concurrent.Executor
+import kotlin.test.assertEquals
+import kotlin.test.assertNotNull
+import kotlin.test.assertNull
+import kotlin.test.fail
+
+/**
+ * Tests for [InputManager.KeyboardBacklightListener].
+ *
+ * Build/Install/Run:
+ * atest InputTests:KeyboardBacklightListenerTest
+ */
+@Presubmit
+@RunWith(MockitoJUnitRunner::class)
+class KeyboardBacklightListenerTest {
+    @get:Rule
+    val rule = MockitoJUnit.rule()!!
+
+    private lateinit var testLooper: TestLooper
+    private var registeredListener: IKeyboardBacklightListener? = null
+    private lateinit var executor: Executor
+    private lateinit var context: Context
+    private lateinit var inputManager: InputManager
+    private lateinit var inputManagerGlobalSession: InputManagerGlobal.TestSession
+
+    @Mock
+    private lateinit var iInputManagerMock: IInputManager
+
+    @Before
+    fun setUp() {
+        context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
+        inputManagerGlobalSession = InputManagerGlobal.createTestSession(iInputManagerMock)
+        testLooper = TestLooper()
+        executor = HandlerExecutor(Handler(testLooper.looper))
+        registeredListener = null
+        inputManager = InputManager(context)
+        `when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE)))
+                .thenReturn(inputManager)
+
+        // Handle keyboard backlight listener registration.
+        doAnswer {
+            val listener = it.getArgument(0) as IKeyboardBacklightListener
+            if (registeredListener != null &&
+                    registeredListener!!.asBinder() != listener.asBinder()) {
+                // There can only be one registered keyboard backlight listener per process.
+                fail("Trying to register a new listener when one already exists")
+            }
+            registeredListener = listener
+            null
+        }.`when`(iInputManagerMock).registerKeyboardBacklightListener(any())
+
+        // Handle keyboard backlight listener being unregistered.
+        doAnswer {
+            val listener = it.getArgument(0) as IKeyboardBacklightListener
+            if (registeredListener == null ||
+                    registeredListener!!.asBinder() != listener.asBinder()) {
+                fail("Trying to unregister a listener that is not registered")
+            }
+            registeredListener = null
+            null
+        }.`when`(iInputManagerMock).unregisterKeyboardBacklightListener(any())
+    }
+
+    @After
+    fun tearDown() {
+        if (this::inputManagerGlobalSession.isInitialized) {
+            inputManagerGlobalSession.close()
+        }
+    }
+
+    private fun notifyKeyboardBacklightChanged(
+        deviceId: Int,
+        brightnessLevel: Int,
+        maxBrightnessLevel: Int = 10,
+        isTriggeredByKeyPress: Boolean = true
+    ) {
+        registeredListener!!.onBrightnessChanged(deviceId, IKeyboardBacklightState().apply {
+            this.brightnessLevel = brightnessLevel
+            this.maxBrightnessLevel = maxBrightnessLevel
+        }, isTriggeredByKeyPress)
+    }
+
+    @Test
+    fun testListenerIsNotifiedCorrectly() {
+        var callbackCount = 0
+
+        // Add a keyboard backlight listener
+        inputManager.registerKeyboardBacklightListener(executor) {
+                deviceId: Int,
+                keyboardBacklightState: KeyboardBacklightState,
+                isTriggeredByKeyPress: Boolean ->
+            callbackCount++
+            assertEquals(1, deviceId)
+            assertEquals(2, keyboardBacklightState.brightnessLevel)
+            assertEquals(10, keyboardBacklightState.maxBrightnessLevel)
+            assertEquals(true, isTriggeredByKeyPress)
+        }
+
+        // Adding the listener should register the callback with InputManagerService.
+        assertNotNull(registeredListener)
+
+        // Notifying keyboard backlight change will notify the listener.
+        notifyKeyboardBacklightChanged(1 /*deviceId*/, 2 /* brightnessLevel */)
+        testLooper.dispatchNext()
+        assertEquals(1, callbackCount)
+    }
+
+    @Test
+    fun testMultipleListeners() {
+        // Set up two callbacks.
+        var callbackCount1 = 0
+        var callbackCount2 = 0
+        val callback1 = InputManager.KeyboardBacklightListener { _, _, _ -> callbackCount1++ }
+        val callback2 = InputManager.KeyboardBacklightListener { _, _, _ -> callbackCount2++ }
+
+        // Add both keyboard backlight listeners
+        inputManager.registerKeyboardBacklightListener(executor, callback1)
+        inputManager.registerKeyboardBacklightListener(executor, callback2)
+
+        // Adding the listeners should register the callback with InputManagerService.
+        assertNotNull(registeredListener)
+
+        // Notifying keyboard backlight change trigger the both callbacks.
+        notifyKeyboardBacklightChanged(1 /*deviceId*/, 1 /* brightnessLevel */)
+        testLooper.dispatchAll()
+        assertEquals(1, callbackCount1)
+        assertEquals(1, callbackCount2)
+
+        inputManager.unregisterKeyboardBacklightListener(callback2)
+        // Notifying keyboard backlight change should still trigger callback1.
+        notifyKeyboardBacklightChanged(1 /*deviceId*/, 2 /* brightnessLevel */)
+        testLooper.dispatchAll()
+        assertEquals(2, callbackCount1)
+
+        // Unregister all listeners, should remove registered listener from InputManagerService
+        inputManager.unregisterKeyboardBacklightListener(callback1)
+        assertNull(registeredListener)
+    }
+}
diff --git a/core/tests/coretests/src/android/hardware/input/VirtualKeyEventTest.java b/tests/Input/src/android/hardware/input/VirtualKeyEventTest.java
similarity index 100%
rename from core/tests/coretests/src/android/hardware/input/VirtualKeyEventTest.java
rename to tests/Input/src/android/hardware/input/VirtualKeyEventTest.java
diff --git a/core/tests/coretests/src/android/hardware/input/VirtualMouseButtonEventTest.java b/tests/Input/src/android/hardware/input/VirtualMouseButtonEventTest.java
similarity index 100%
rename from core/tests/coretests/src/android/hardware/input/VirtualMouseButtonEventTest.java
rename to tests/Input/src/android/hardware/input/VirtualMouseButtonEventTest.java
diff --git a/core/tests/coretests/src/android/hardware/input/VirtualMouseRelativeEventTest.java b/tests/Input/src/android/hardware/input/VirtualMouseRelativeEventTest.java
similarity index 100%
rename from core/tests/coretests/src/android/hardware/input/VirtualMouseRelativeEventTest.java
rename to tests/Input/src/android/hardware/input/VirtualMouseRelativeEventTest.java
diff --git a/core/tests/coretests/src/android/hardware/input/VirtualMouseScrollEventTest.java b/tests/Input/src/android/hardware/input/VirtualMouseScrollEventTest.java
similarity index 100%
rename from core/tests/coretests/src/android/hardware/input/VirtualMouseScrollEventTest.java
rename to tests/Input/src/android/hardware/input/VirtualMouseScrollEventTest.java
diff --git a/core/tests/coretests/src/android/hardware/input/VirtualTouchEventTest.java b/tests/Input/src/android/hardware/input/VirtualTouchEventTest.java
similarity index 100%
rename from core/tests/coretests/src/android/hardware/input/VirtualTouchEventTest.java
rename to tests/Input/src/android/hardware/input/VirtualTouchEventTest.java
diff --git a/tests/Input/src/com/android/server/input/AmbientKeyboardBacklightControllerTests.kt b/tests/Input/src/com/android/server/input/AmbientKeyboardBacklightControllerTests.kt
new file mode 100644
index 0000000..ad481df
--- /dev/null
+++ b/tests/Input/src/com/android/server/input/AmbientKeyboardBacklightControllerTests.kt
@@ -0,0 +1,355 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.input
+
+import android.content.Context
+import android.content.ContextWrapper
+import android.content.res.Resources
+import android.hardware.Sensor
+import android.hardware.SensorEvent
+import android.hardware.SensorEventListener
+import android.hardware.SensorManager
+import android.hardware.display.DisplayManagerInternal
+import android.hardware.input.InputSensorInfo
+import android.os.Handler
+import android.os.test.TestLooper
+import android.platform.test.annotations.Presubmit
+import android.util.TypedValue
+import android.view.Display
+import android.view.DisplayInfo
+import androidx.test.core.app.ApplicationProvider
+import com.android.internal.R
+import com.android.server.LocalServices
+import com.android.server.input.AmbientKeyboardBacklightController.HYSTERESIS_THRESHOLD
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertThrows
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.mockito.Mock
+import org.mockito.Mockito.any
+import org.mockito.Mockito.anyBoolean
+import org.mockito.Mockito.anyInt
+import org.mockito.Mockito.eq
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.`when`
+import org.mockito.junit.MockitoJUnit
+
+/**
+ * Tests for {@link AmbientKeyboardBacklightController}.
+ *
+ * Build/Install/Run:
+ * atest InputTests:AmbientKeyboardBacklightControllerTests
+ */
+@Presubmit
+class AmbientKeyboardBacklightControllerTests {
+
+    companion object {
+        const val DEFAULT_DISPLAY_UNIQUE_ID = "uniqueId_1"
+        const val SENSOR_NAME = "test_sensor_name"
+        const val SENSOR_TYPE = "test_sensor_type"
+    }
+
+    @get:Rule
+    val rule = MockitoJUnit.rule()!!
+
+    private lateinit var context: Context
+    private lateinit var testLooper: TestLooper
+    private lateinit var ambientController: AmbientKeyboardBacklightController
+
+    @Mock
+    private lateinit var resources: Resources
+
+    @Mock
+    private lateinit var lightSensorInfo: InputSensorInfo
+
+    @Mock
+    private lateinit var sensorManager: SensorManager
+
+    @Mock
+    private lateinit var displayManagerInternal: DisplayManagerInternal
+    private lateinit var lightSensor: Sensor
+
+    private var currentDisplayInfo = DisplayInfo()
+    private var lastBrightnessCallback: Int = 0
+    private var listenerRegistered: Boolean = false
+    private var listenerRegistrationCount: Int = 0
+
+    @Before
+    fun setup() {
+        context = spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
+        `when`(context.resources).thenReturn(resources)
+        setupBrightnessSteps()
+        setupSensor()
+        testLooper = TestLooper()
+        ambientController = AmbientKeyboardBacklightController(context, testLooper.looper)
+        ambientController.systemRunning()
+        testLooper.dispatchAll()
+    }
+
+    private fun setupBrightnessSteps() {
+        val brightnessValues = intArrayOf(100, 200, 0)
+        val decreaseThresholds = intArrayOf(-1, 900, 1900)
+        val increaseThresholds = intArrayOf(1000, 2000, -1)
+        `when`(resources.getIntArray(R.array.config_autoKeyboardBacklightBrightnessValues))
+            .thenReturn(brightnessValues)
+        `when`(resources.getIntArray(R.array.config_autoKeyboardBacklightDecreaseLuxThreshold))
+            .thenReturn(decreaseThresholds)
+        `when`(resources.getIntArray(R.array.config_autoKeyboardBacklightIncreaseLuxThreshold))
+            .thenReturn(increaseThresholds)
+        `when`(
+            resources.getValue(
+                eq(R.dimen.config_autoKeyboardBrightnessSmoothingConstant),
+                any(TypedValue::class.java),
+                anyBoolean()
+            )
+        ).then {
+            val args = it.arguments
+            val outValue = args[1] as TypedValue
+            outValue.data = java.lang.Float.floatToRawIntBits(1.0f)
+            Unit
+        }
+    }
+
+    private fun setupSensor() {
+        LocalServices.removeServiceForTest(DisplayManagerInternal::class.java)
+        LocalServices.addService(DisplayManagerInternal::class.java, displayManagerInternal)
+        currentDisplayInfo.uniqueId = DEFAULT_DISPLAY_UNIQUE_ID
+        `when`(displayManagerInternal.getDisplayInfo(Display.DEFAULT_DISPLAY)).thenReturn(
+            currentDisplayInfo
+        )
+        val sensorData = DisplayManagerInternal.AmbientLightSensorData(SENSOR_NAME, SENSOR_TYPE)
+        `when`(displayManagerInternal.getAmbientLightSensorData(Display.DEFAULT_DISPLAY))
+            .thenReturn(sensorData)
+
+        `when`(lightSensorInfo.name).thenReturn(SENSOR_NAME)
+        `when`(lightSensorInfo.stringType).thenReturn(SENSOR_TYPE)
+        lightSensor = Sensor(lightSensorInfo)
+        `when`(context.getSystemService(eq(Context.SENSOR_SERVICE))).thenReturn(sensorManager)
+        `when`(sensorManager.getSensorList(anyInt())).thenReturn(listOf(lightSensor))
+        `when`(
+            sensorManager.registerListener(
+                any(),
+                eq(lightSensor),
+                anyInt(),
+                any(Handler::class.java)
+            )
+        ).then {
+            listenerRegistered = true
+            listenerRegistrationCount++
+            true
+        }
+        `when`(
+            sensorManager.unregisterListener(
+                any(SensorEventListener::class.java),
+                eq(lightSensor)
+            )
+        ).then {
+            listenerRegistered = false
+            Unit
+        }
+    }
+
+    private fun setupSensorWithInitialLux(luxValue: Float) {
+        ambientController.registerAmbientBacklightListener { brightnessValue: Int ->
+            lastBrightnessCallback = brightnessValue
+        }
+        sendAmbientLuxValue(luxValue)
+        testLooper.dispatchAll()
+    }
+
+    @Test
+    fun testInitialAmbientLux_sendsCallbackImmediately() {
+        setupSensorWithInitialLux(500F)
+
+        assertEquals(
+            "Should receive immediate callback for first lux change",
+            100,
+            lastBrightnessCallback
+        )
+    }
+
+    @Test
+    fun testBrightnessIncrease_afterInitialLuxChanges() {
+        setupSensorWithInitialLux(500F)
+
+        // Current state: Step 1 [value = 100, increaseThreshold = 1000, decreaseThreshold = -1]
+        repeat(HYSTERESIS_THRESHOLD) {
+            sendAmbientLuxValue(1500F)
+        }
+        testLooper.dispatchAll()
+
+        assertEquals(
+            "Should receive brightness change callback for increasing lux change",
+            200,
+            lastBrightnessCallback
+        )
+    }
+
+    @Test
+    fun testBrightnessDecrease_afterInitialLuxChanges() {
+        setupSensorWithInitialLux(1500F)
+
+        // Current state: Step 2 [value = 200, increaseThreshold = 2000, decreaseThreshold = 900]
+        repeat(HYSTERESIS_THRESHOLD) {
+            sendAmbientLuxValue(500F)
+        }
+        testLooper.dispatchAll()
+
+        assertEquals(
+            "Should receive brightness change callback for decreasing lux change",
+            100,
+            lastBrightnessCallback
+        )
+    }
+
+    @Test
+    fun testRegisterAmbientListener_throwsExceptionOnRegisteringDuplicate() {
+        val ambientListener =
+            AmbientKeyboardBacklightController.AmbientKeyboardBacklightListener { }
+        ambientController.registerAmbientBacklightListener(ambientListener)
+
+        assertThrows(IllegalStateException::class.java) {
+            ambientController.registerAmbientBacklightListener(
+                ambientListener
+            )
+        }
+    }
+
+    @Test
+    fun testUnregisterAmbientListener_throwsExceptionOnUnregisteringNonExistent() {
+        val ambientListener =
+            AmbientKeyboardBacklightController.AmbientKeyboardBacklightListener { }
+        assertThrows(IllegalStateException::class.java) {
+            ambientController.unregisterAmbientBacklightListener(
+                ambientListener
+            )
+        }
+    }
+
+    @Test
+    fun testSensorListenerRegistered_onRegisterUnregisterAmbientListener() {
+        assertEquals(
+            "Should not have a sensor listener registered at init",
+            0,
+            listenerRegistrationCount
+        )
+        assertFalse("Should not have a sensor listener registered at init", listenerRegistered)
+
+        val ambientListener1 =
+            AmbientKeyboardBacklightController.AmbientKeyboardBacklightListener { }
+        ambientController.registerAmbientBacklightListener(ambientListener1)
+        assertEquals(
+            "Should register a new sensor listener", 1, listenerRegistrationCount
+        )
+        assertTrue("Should have sensor listener registered", listenerRegistered)
+
+        val ambientListener2 =
+            AmbientKeyboardBacklightController.AmbientKeyboardBacklightListener { }
+        ambientController.registerAmbientBacklightListener(ambientListener2)
+        assertEquals(
+            "Should not register a new sensor listener when adding a second ambient listener",
+            1,
+            listenerRegistrationCount
+        )
+        assertTrue("Should have sensor listener registered", listenerRegistered)
+
+        ambientController.unregisterAmbientBacklightListener(ambientListener1)
+        assertTrue("Should have sensor listener registered", listenerRegistered)
+
+        ambientController.unregisterAmbientBacklightListener(ambientListener2)
+        assertFalse(
+            "Should not have sensor listener registered if there are no ambient listeners",
+            listenerRegistered
+        )
+    }
+
+    @Test
+    fun testDisplayChange_shouldNotReRegisterListener_ifUniqueIdSame() {
+        setupSensorWithInitialLux(0F)
+
+        val count = listenerRegistrationCount
+        ambientController.onDisplayChanged(Display.DEFAULT_DISPLAY)
+        testLooper.dispatchAll()
+
+        assertEquals(
+            "Should not re-register listener on display change if unique is same",
+            count,
+            listenerRegistrationCount
+        )
+    }
+
+    @Test
+    fun testDisplayChange_shouldReRegisterListener_ifUniqueIdChanges() {
+        setupSensorWithInitialLux(0F)
+
+        val count = listenerRegistrationCount
+        currentDisplayInfo.uniqueId = "xyz"
+        ambientController.onDisplayChanged(Display.DEFAULT_DISPLAY)
+        testLooper.dispatchAll()
+
+        assertEquals(
+            "Should re-register listener on display change if unique id changed",
+            count + 1,
+            listenerRegistrationCount
+        )
+    }
+
+    @Test
+    fun testBrightnessDoesntChange_betweenIncreaseAndDecreaseThresholds() {
+        setupSensorWithInitialLux(1001F)
+
+        // Previous state: Step 1 [value = 100, increaseThreshold = 1000, decreaseThreshold = -1]
+        // Current state: Step 2 [value = 200, increaseThreshold = 2000, decreaseThreshold = 900]
+        lastBrightnessCallback = -1
+        repeat(HYSTERESIS_THRESHOLD) {
+            sendAmbientLuxValue(999F)
+        }
+        testLooper.dispatchAll()
+
+        assertEquals(
+            "Should not receive any callback for brightness change",
+            -1,
+            lastBrightnessCallback
+        )
+    }
+
+    @Test
+    fun testBrightnessDoesntChange_onChangeOccurringLessThanHysteresisThreshold() {
+        setupSensorWithInitialLux(1001F)
+
+        // Previous state: Step 1 [value = 100, increaseThreshold = 1000, decreaseThreshold = -1]
+        // Current state: Step 2 [value = 200, increaseThreshold = 2000, decreaseThreshold = 900]
+        lastBrightnessCallback = -1
+        repeat(HYSTERESIS_THRESHOLD - 1) {
+            sendAmbientLuxValue(2001F)
+        }
+        testLooper.dispatchAll()
+
+        assertEquals(
+            "Should not receive any callback for brightness change",
+            -1,
+            lastBrightnessCallback
+        )
+    }
+
+    private fun sendAmbientLuxValue(luxValue: Float) {
+        ambientController.onSensorChanged(SensorEvent(lightSensor, 0, 0, floatArrayOf(luxValue)))
+    }
+}
diff --git a/tests/Input/src/com/android/server/input/BatteryControllerTests.kt b/tests/Input/src/com/android/server/input/BatteryControllerTests.kt
new file mode 100644
index 0000000..f2724e6
--- /dev/null
+++ b/tests/Input/src/com/android/server/input/BatteryControllerTests.kt
@@ -0,0 +1,898 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.input
+
+import android.bluetooth.BluetoothAdapter
+import android.bluetooth.BluetoothDevice
+import android.bluetooth.BluetoothManager
+import android.hardware.BatteryState.STATUS_CHARGING
+import android.hardware.BatteryState.STATUS_DISCHARGING
+import android.hardware.BatteryState.STATUS_FULL
+import android.hardware.BatteryState.STATUS_UNKNOWN
+import android.hardware.input.HostUsiVersion
+import android.hardware.input.IInputDeviceBatteryListener
+import android.hardware.input.IInputDeviceBatteryState
+import android.hardware.input.IInputDevicesChangedListener
+import android.hardware.input.IInputManager
+import android.hardware.input.InputManager
+import android.hardware.input.InputManagerGlobal
+import android.os.Binder
+import android.os.IBinder
+import android.os.test.TestLooper
+import android.platform.test.annotations.Presubmit
+import android.testing.TestableContext
+import android.view.InputDevice
+import androidx.test.core.app.ApplicationProvider
+import com.android.server.input.BatteryController.BluetoothBatteryManager
+import com.android.server.input.BatteryController.BluetoothBatteryManager.BluetoothBatteryListener
+import com.android.server.input.BatteryController.POLLING_PERIOD_MILLIS
+import com.android.server.input.BatteryController.UEventBatteryListener
+import com.android.server.input.BatteryController.USI_BATTERY_VALIDITY_DURATION_MILLIS
+import org.hamcrest.Description
+import org.hamcrest.Matcher
+import org.hamcrest.MatcherAssert.assertThat
+import org.hamcrest.Matchers
+import org.hamcrest.TypeSafeMatcher
+import org.hamcrest.core.IsEqual.equalTo
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.mockito.ArgumentCaptor
+import org.mockito.ArgumentMatchers.any
+import org.mockito.ArgumentMatchers.notNull
+import org.mockito.Mock
+import org.mockito.Mockito.anyInt
+import org.mockito.Mockito.clearInvocations
+import org.mockito.Mockito.eq
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.never
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.`when`
+import org.mockito.hamcrest.MockitoHamcrest
+import org.mockito.junit.MockitoJUnit
+import org.mockito.verification.VerificationMode
+
+private fun createInputDevice(
+    deviceId: Int,
+    hasBattery: Boolean = true,
+    supportsUsi: Boolean = false,
+    generation: Int = -1,
+): InputDevice =
+    InputDevice.Builder()
+        .setId(deviceId)
+        .setName("Device $deviceId")
+        .setDescriptor("descriptor $deviceId")
+        .setExternal(true)
+        .setHasBattery(hasBattery)
+        .setUsiVersion(if (supportsUsi) HostUsiVersion(1, 0) else null)
+        .setGeneration(generation)
+        .build()
+
+// Returns a matcher that helps match member variables of a class.
+private fun <T, U> memberMatcher(
+    member: String,
+    memberProvider: (T) -> U,
+    match: Matcher<U>
+): TypeSafeMatcher<T> =
+    object : TypeSafeMatcher<T>() {
+
+        override fun matchesSafely(item: T?): Boolean {
+            return match.matches(memberProvider(item!!))
+        }
+
+        override fun describeMismatchSafely(item: T?, mismatchDescription: Description?) {
+            match.describeMismatch(item, mismatchDescription)
+        }
+
+        override fun describeTo(description: Description?) {
+            match.describeTo(description?.appendText("matches member $member"))
+        }
+    }
+
+// Returns a matcher for IInputDeviceBatteryState that optionally matches some arguments.
+private fun matchesState(
+    deviceId: Int,
+    isPresent: Boolean = true,
+    status: Int? = null,
+    capacity: Float? = null,
+    eventTime: Long? = null
+): Matcher<IInputDeviceBatteryState> {
+    val batteryStateMatchers = mutableListOf<Matcher<IInputDeviceBatteryState>>(
+        memberMatcher("deviceId", { it.deviceId }, equalTo(deviceId)),
+        memberMatcher("isPresent", { it.isPresent }, equalTo(isPresent))
+    )
+    if (eventTime != null) {
+        batteryStateMatchers.add(memberMatcher("updateTime", { it.updateTime }, equalTo(eventTime)))
+    }
+    if (status != null) {
+        batteryStateMatchers.add(memberMatcher("status", { it.status }, equalTo(status)))
+    }
+    if (capacity != null) {
+        batteryStateMatchers.add(memberMatcher("capacity", { it.capacity }, equalTo(capacity)))
+    }
+    return Matchers.allOf(batteryStateMatchers)
+}
+
+private fun isInvalidBatteryState(deviceId: Int): Matcher<IInputDeviceBatteryState> =
+    matchesState(deviceId, isPresent = false, status = STATUS_UNKNOWN, capacity = Float.NaN)
+
+// Helpers used to verify interactions with a mocked battery listener.
+private fun IInputDeviceBatteryListener.verifyNotified(
+    deviceId: Int,
+    mode: VerificationMode = times(1),
+    isPresent: Boolean = true,
+    status: Int? = null,
+    capacity: Float? = null,
+    eventTime: Long? = null
+) {
+    verifyNotified(matchesState(deviceId, isPresent, status, capacity, eventTime), mode)
+}
+
+private fun IInputDeviceBatteryListener.verifyNotified(
+    matcher: Matcher<IInputDeviceBatteryState>,
+    mode: VerificationMode = times(1)
+) {
+    verify(this, mode).onBatteryStateChanged(MockitoHamcrest.argThat(matcher))
+}
+
+private fun createMockListener(): IInputDeviceBatteryListener {
+    val listener = mock(IInputDeviceBatteryListener::class.java)
+    val binder = mock(Binder::class.java)
+    `when`(listener.asBinder()).thenReturn(binder)
+    return listener
+}
+
+/**
+ * Tests for {@link InputDeviceBatteryController}.
+ *
+ * Build/Install/Run:
+ * atest InputTests:InputDeviceBatteryControllerTests
+ */
+@Presubmit
+class BatteryControllerTests {
+    companion object {
+        const val PID = 42
+        const val DEVICE_ID = 13
+        const val SECOND_DEVICE_ID = 11
+        const val USI_DEVICE_ID = 101
+        const val SECOND_USI_DEVICE_ID = 102
+        const val BT_DEVICE_ID = 100001
+        const val SECOND_BT_DEVICE_ID = 100002
+        const val TIMESTAMP = 123456789L
+    }
+
+    @get:Rule
+    val rule = MockitoJUnit.rule()!!
+
+    @Mock
+    private lateinit var native: NativeInputManagerService
+    @Mock
+    private lateinit var iInputManager: IInputManager
+    @Mock
+    private lateinit var uEventManager: UEventManager
+    @Mock
+    private lateinit var bluetoothBatteryManager: BluetoothBatteryManager
+
+    private lateinit var batteryController: BatteryController
+    private lateinit var context: TestableContext
+    private lateinit var testLooper: TestLooper
+    private lateinit var devicesChangedListener: IInputDevicesChangedListener
+    private lateinit var inputManagerGlobalSession: InputManagerGlobal.TestSession
+    private val deviceGenerationMap = mutableMapOf<Int /*deviceId*/, Int /*generation*/>()
+
+    @Before
+    fun setup() {
+        context = TestableContext(ApplicationProvider.getApplicationContext())
+        testLooper = TestLooper()
+        inputManagerGlobalSession = InputManagerGlobal.createTestSession(iInputManager)
+        val inputManager = InputManager(context)
+        context.addMockSystemService(InputManager::class.java, inputManager)
+        `when`(iInputManager.inputDeviceIds).then {
+            deviceGenerationMap.keys.toIntArray()
+        }
+        addInputDevice(DEVICE_ID)
+        addInputDevice(SECOND_DEVICE_ID)
+
+        batteryController = BatteryController(context, native, testLooper.looper, uEventManager,
+            bluetoothBatteryManager)
+        batteryController.systemRunning()
+        val listenerCaptor = ArgumentCaptor.forClass(IInputDevicesChangedListener::class.java)
+        verify(iInputManager).registerInputDevicesChangedListener(listenerCaptor.capture())
+        devicesChangedListener = listenerCaptor.value
+        testLooper.dispatchAll()
+    }
+
+    @After
+    fun tearDown() {
+        if (this::inputManagerGlobalSession.isInitialized) {
+            inputManagerGlobalSession.close()
+        }
+    }
+
+    private fun notifyDeviceChanged(
+            deviceId: Int,
+        hasBattery: Boolean = true,
+        supportsUsi: Boolean = false
+    ) {
+        val generation = deviceGenerationMap[deviceId]?.plus(1)
+            ?: throw IllegalArgumentException("Device $deviceId was never added!")
+        deviceGenerationMap[deviceId] = generation
+
+        `when`(iInputManager.getInputDevice(deviceId))
+            .thenReturn(createInputDevice(deviceId, hasBattery, supportsUsi, generation))
+        val list = deviceGenerationMap.flatMap { listOf(it.key, it.value) }
+        if (::devicesChangedListener.isInitialized) {
+            devicesChangedListener.onInputDevicesChanged(list.toIntArray())
+        }
+    }
+
+    private fun addInputDevice(
+            deviceId: Int,
+        hasBattery: Boolean = true,
+        supportsUsi: Boolean = false,
+    ) {
+        deviceGenerationMap[deviceId] = 0
+        notifyDeviceChanged(deviceId, hasBattery, supportsUsi)
+    }
+
+    private fun createBluetoothDevice(address: String): BluetoothDevice {
+        return context.getSystemService(BluetoothManager::class.java)!!
+            .adapter.getRemoteDevice(address)
+    }
+
+    @Test
+    fun testRegisterAndUnregisterBinderLifecycle() {
+        val listener = createMockListener()
+        // Ensure the binder lifecycle is tracked when registering a listener.
+        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
+        verify(listener.asBinder()).linkToDeath(notNull(), anyInt())
+        batteryController.registerBatteryListener(SECOND_DEVICE_ID, listener, PID)
+        verify(listener.asBinder(), times(1)).linkToDeath(notNull(), anyInt())
+
+        // Ensure the binder lifecycle stops being tracked when all devices stopped being monitored.
+        batteryController.unregisterBatteryListener(SECOND_DEVICE_ID, listener, PID)
+        verify(listener.asBinder(), never()).unlinkToDeath(notNull(), anyInt())
+        batteryController.unregisterBatteryListener(DEVICE_ID, listener, PID)
+        verify(listener.asBinder()).unlinkToDeath(notNull(), anyInt())
+    }
+
+    @Test
+    fun testOneListenerPerProcess() {
+        val listener1 = createMockListener()
+        batteryController.registerBatteryListener(DEVICE_ID, listener1, PID)
+        verify(listener1.asBinder()).linkToDeath(notNull(), anyInt())
+
+        // If a second listener is added for the same process, a security exception is thrown.
+        val listener2 = createMockListener()
+        try {
+            batteryController.registerBatteryListener(DEVICE_ID, listener2, PID)
+            fail("Expected security exception when registering more than one listener per process")
+        } catch (ignored: SecurityException) {
+        }
+    }
+
+    @Test
+    fun testProcessDeathRemovesListener() {
+        val deathRecipient = ArgumentCaptor.forClass(IBinder.DeathRecipient::class.java)
+        val listener = createMockListener()
+        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
+        verify(listener.asBinder()).linkToDeath(deathRecipient.capture(), anyInt())
+
+        // When the binder dies, the callback is unregistered.
+        deathRecipient.value!!.binderDied(listener.asBinder())
+        verify(listener.asBinder()).unlinkToDeath(notNull(), anyInt())
+
+        // It is now possible to register the same listener again.
+        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
+        verify(listener.asBinder(), times(2)).linkToDeath(notNull(), anyInt())
+    }
+
+    @Test
+    fun testRegisteringListenerNotifiesStateImmediately() {
+        `when`(native.getBatteryStatus(DEVICE_ID)).thenReturn(STATUS_FULL)
+        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(100)
+        val listener = createMockListener()
+        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
+        listener.verifyNotified(DEVICE_ID, status = STATUS_FULL, capacity = 1.0f)
+
+        `when`(native.getBatteryStatus(SECOND_DEVICE_ID)).thenReturn(STATUS_CHARGING)
+        `when`(native.getBatteryCapacity(SECOND_DEVICE_ID)).thenReturn(78)
+        batteryController.registerBatteryListener(SECOND_DEVICE_ID, listener, PID)
+        listener.verifyNotified(SECOND_DEVICE_ID, status = STATUS_CHARGING, capacity = 0.78f)
+    }
+
+    @Test
+    fun testListenersNotifiedOnUEventNotification() {
+        `when`(native.getBatteryDevicePath(DEVICE_ID)).thenReturn("/sys/dev/test/device1")
+        `when`(native.getBatteryStatus(DEVICE_ID)).thenReturn(STATUS_CHARGING)
+        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(78)
+        val listener = createMockListener()
+        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
+        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
+        // The device paths for UEvent notifications do not include the "/sys" prefix, so verify
+        // that the added listener is configured to match the path without that prefix.
+        verify(uEventManager)
+            .addListener(uEventListener.capture(), eq("DEVPATH=/dev/test/device1"))
+        listener.verifyNotified(DEVICE_ID, status = STATUS_CHARGING, capacity = 0.78f)
+
+        // If the battery state has changed when an UEvent is sent, the listeners are notified.
+        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(80)
+        uEventListener.value!!.onBatteryUEvent(TIMESTAMP)
+        listener.verifyNotified(DEVICE_ID, status = STATUS_CHARGING, capacity = 0.80f,
+            eventTime = TIMESTAMP)
+
+        // If the battery state has not changed when an UEvent is sent, the listeners are not
+        // notified.
+        clearInvocations(listener)
+        uEventListener.value!!.onBatteryUEvent(TIMESTAMP + 1)
+        verifyNoMoreInteractions(listener)
+
+        batteryController.unregisterBatteryListener(DEVICE_ID, listener, PID)
+        verify(uEventManager).removeListener(uEventListener.capture())
+        assertEquals("The same observer must be registered and unregistered",
+            uEventListener.allValues[0], uEventListener.allValues[1])
+    }
+
+    @Test
+    fun testBatteryPresenceChanged() {
+        `when`(native.getBatteryDevicePath(DEVICE_ID)).thenReturn("/test/device1")
+        `when`(native.getBatteryStatus(DEVICE_ID)).thenReturn(STATUS_CHARGING)
+        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(78)
+        val listener = createMockListener()
+        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
+        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
+        verify(uEventManager).addListener(uEventListener.capture(), eq("DEVPATH=/test/device1"))
+        listener.verifyNotified(DEVICE_ID, status = STATUS_CHARGING, capacity = 0.78f)
+
+        // If the battery presence for the InputDevice changes, the listener is notified.
+        notifyDeviceChanged(DEVICE_ID, hasBattery = false)
+        testLooper.dispatchNext()
+        listener.verifyNotified(isInvalidBatteryState(DEVICE_ID))
+        // Since the battery is no longer present, the UEventListener should be removed.
+        verify(uEventManager).removeListener(uEventListener.value)
+
+        // If the battery becomes present again, the listener is notified.
+        notifyDeviceChanged(DEVICE_ID, hasBattery = true)
+        testLooper.dispatchNext()
+        listener.verifyNotified(DEVICE_ID, mode = times(2), status = STATUS_CHARGING,
+            capacity = 0.78f)
+        // Ensure that a new UEventListener was added.
+        verify(uEventManager, times(2))
+            .addListener(uEventListener.capture(), eq("DEVPATH=/test/device1"))
+    }
+
+    @Test
+    fun testStartPollingWhenListenerIsRegistered() {
+        val listener = createMockListener()
+        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(78)
+        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
+        listener.verifyNotified(DEVICE_ID, capacity = 0.78f)
+
+        // Assume there is a change in the battery state. Ensure the listener is not notified
+        // while the polling period has not elapsed.
+        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(80)
+        testLooper.moveTimeForward(1)
+        testLooper.dispatchAll()
+        listener.verifyNotified(DEVICE_ID, mode = never(), capacity = 0.80f)
+
+        // Move the time forward so that the polling period has elapsed.
+        // The listener should be notified.
+        testLooper.moveTimeForward(POLLING_PERIOD_MILLIS - 1)
+        assertTrue("There should be a polling callbacks posted to the handler", testLooper.isIdle)
+        testLooper.dispatchNext()
+        listener.verifyNotified(DEVICE_ID, capacity = 0.80f)
+
+        // Move the time forward so that another polling period has elapsed.
+        // The battery should still be polled, but there is no change so listeners are not notified.
+        testLooper.moveTimeForward(POLLING_PERIOD_MILLIS)
+        assertTrue("There should be a polling callbacks posted to the handler", testLooper.isIdle)
+        testLooper.dispatchNext()
+        listener.verifyNotified(DEVICE_ID, mode = times(1), capacity = 0.80f)
+    }
+
+    @Test
+    fun testNoPollingWhenTheDeviceIsNotInteractive() {
+        batteryController.onInteractiveChanged(false /*interactive*/)
+
+        val listener = createMockListener()
+        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(78)
+        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
+        listener.verifyNotified(DEVICE_ID, capacity = 0.78f)
+
+        // The battery state changed, but we should not be polling for battery changes when the
+        // device is not interactive.
+        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(80)
+        testLooper.moveTimeForward(POLLING_PERIOD_MILLIS)
+        assertFalse("There should be no polling callbacks posted to the handler", testLooper.isIdle)
+        testLooper.dispatchAll()
+        listener.verifyNotified(DEVICE_ID, mode = never(), capacity = 0.80f)
+
+        // The device is now interactive. Battery state polling begins immediately.
+        batteryController.onInteractiveChanged(true /*interactive*/)
+        testLooper.dispatchNext()
+        listener.verifyNotified(DEVICE_ID, capacity = 0.80f)
+
+        // Ensure that we continue to poll for battery changes.
+        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(90)
+        testLooper.moveTimeForward(POLLING_PERIOD_MILLIS)
+        assertTrue("There should be a polling callbacks posted to the handler", testLooper.isIdle)
+        testLooper.dispatchNext()
+        listener.verifyNotified(DEVICE_ID, capacity = 0.90f)
+    }
+
+    @Test
+    fun testGetBatteryState() {
+        `when`(native.getBatteryStatus(DEVICE_ID)).thenReturn(STATUS_CHARGING)
+        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(78)
+        val batteryState = batteryController.getBatteryState(DEVICE_ID)
+        assertThat("battery state matches", batteryState,
+            matchesState(DEVICE_ID, status = STATUS_CHARGING, capacity = 0.78f))
+    }
+
+    @Test
+    fun testGetBatteryStateWithListener() {
+        val listener = createMockListener()
+        `when`(native.getBatteryStatus(DEVICE_ID)).thenReturn(STATUS_CHARGING)
+        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(78)
+        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
+        listener.verifyNotified(DEVICE_ID, status = STATUS_CHARGING, capacity = 0.78f)
+
+        // If getBatteryState() is called when a listener is monitoring the device and there is a
+        // change in the battery state, the listener is also notified.
+        `when`(native.getBatteryCapacity(DEVICE_ID)).thenReturn(80)
+        val batteryState = batteryController.getBatteryState(DEVICE_ID)
+        assertThat("battery matches state", batteryState,
+            matchesState(DEVICE_ID, status = STATUS_CHARGING, capacity = 0.80f))
+        listener.verifyNotified(DEVICE_ID, status = STATUS_CHARGING, capacity = 0.80f)
+    }
+
+    @Test
+    fun testUsiDeviceIsMonitoredPersistently() {
+        `when`(native.getBatteryDevicePath(USI_DEVICE_ID)).thenReturn("/sys/dev/usi_device")
+        addInputDevice(USI_DEVICE_ID, supportsUsi = true)
+        testLooper.dispatchNext()
+
+        // Even though there is no listener added for this device, it is being monitored.
+        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
+        verify(uEventManager)
+            .addListener(uEventListener.capture(), eq("DEVPATH=/dev/usi_device"))
+
+        // Add and remove a listener for the device.
+        val listener = createMockListener()
+        batteryController.registerBatteryListener(USI_DEVICE_ID, listener, PID)
+        batteryController.unregisterBatteryListener(USI_DEVICE_ID, listener, PID)
+
+        // The device is still being monitored.
+        verify(uEventManager, never()).removeListener(uEventListener.value)
+    }
+
+    @Test
+    fun testNoPollingWhenUsiDevicesAreMonitored() {
+        `when`(native.getBatteryDevicePath(USI_DEVICE_ID)).thenReturn("/sys/dev/usi_device")
+        addInputDevice(USI_DEVICE_ID, supportsUsi = true)
+        testLooper.dispatchNext()
+        `when`(native.getBatteryDevicePath(SECOND_USI_DEVICE_ID)).thenReturn("/sys/dev/usi_device2")
+        addInputDevice(SECOND_USI_DEVICE_ID, supportsUsi = true)
+        testLooper.dispatchNext()
+
+        testLooper.moveTimeForward(POLLING_PERIOD_MILLIS)
+        assertFalse("There should be no polling callbacks posted to the handler", testLooper.isIdle)
+
+        // Add a listener.
+        val listener = createMockListener()
+        batteryController.registerBatteryListener(USI_DEVICE_ID, listener, PID)
+
+        testLooper.moveTimeForward(POLLING_PERIOD_MILLIS)
+        assertFalse("There should be no polling callbacks posted to the handler", testLooper.isIdle)
+    }
+
+    @Test
+    fun testExpectedFlowForUsiBattery() {
+        `when`(native.getBatteryDevicePath(USI_DEVICE_ID)).thenReturn("/sys/dev/usi_device")
+        `when`(native.getBatteryStatus(USI_DEVICE_ID)).thenReturn(STATUS_DISCHARGING)
+        `when`(native.getBatteryCapacity(USI_DEVICE_ID)).thenReturn(78)
+
+        addInputDevice(USI_DEVICE_ID, supportsUsi = true)
+        testLooper.dispatchNext()
+        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
+        verify(uEventManager)
+            .addListener(uEventListener.capture(), eq("DEVPATH=/dev/usi_device"))
+
+        // A USI device's battery state is not valid until the first UEvent notification.
+        // Add a listener, and ensure it is notified that the battery state is not present.
+        val listener = createMockListener()
+        batteryController.registerBatteryListener(USI_DEVICE_ID, listener, PID)
+        listener.verifyNotified(isInvalidBatteryState(USI_DEVICE_ID))
+
+        // Ensure that querying for battery state also returns the same invalid result.
+        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
+            isInvalidBatteryState(USI_DEVICE_ID))
+
+        // There is a UEvent signaling a battery change. The battery state is now valid.
+        uEventListener.value!!.onBatteryUEvent(TIMESTAMP)
+        listener.verifyNotified(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.78f)
+        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
+            matchesState(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.78f))
+
+        // There is another UEvent notification. The battery state is now updated.
+        `when`(native.getBatteryCapacity(USI_DEVICE_ID)).thenReturn(64)
+        uEventListener.value!!.onBatteryUEvent(TIMESTAMP + 1)
+        listener.verifyNotified(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.64f)
+        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
+            matchesState(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.64f))
+
+        // The battery state is still valid after a millisecond.
+        testLooper.moveTimeForward(1)
+        testLooper.dispatchAll()
+        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
+            matchesState(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.64f))
+
+        // The battery is no longer present after the timeout expires.
+        testLooper.moveTimeForward(USI_BATTERY_VALIDITY_DURATION_MILLIS - 1)
+        testLooper.dispatchNext()
+        listener.verifyNotified(isInvalidBatteryState(USI_DEVICE_ID), times(2))
+        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
+            isInvalidBatteryState(USI_DEVICE_ID))
+    }
+
+    @Test
+    fun testStylusPresenceExtendsValidUsiBatteryState() {
+        `when`(native.getBatteryDevicePath(USI_DEVICE_ID)).thenReturn("/sys/dev/usi_device")
+        `when`(native.getBatteryStatus(USI_DEVICE_ID)).thenReturn(STATUS_DISCHARGING)
+        `when`(native.getBatteryCapacity(USI_DEVICE_ID)).thenReturn(78)
+
+        addInputDevice(USI_DEVICE_ID, supportsUsi = true)
+        testLooper.dispatchNext()
+        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
+        verify(uEventManager)
+            .addListener(uEventListener.capture(), eq("DEVPATH=/dev/usi_device"))
+
+        // There is a UEvent signaling a battery change. The battery state is now valid.
+        uEventListener.value!!.onBatteryUEvent(TIMESTAMP)
+        val listener = createMockListener()
+        batteryController.registerBatteryListener(USI_DEVICE_ID, listener, PID)
+        listener.verifyNotified(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.78f)
+        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
+            matchesState(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.78f))
+
+        // Stylus presence is detected before the validity timeout expires.
+        testLooper.moveTimeForward(100)
+        testLooper.dispatchAll()
+        batteryController.notifyStylusGestureStarted(USI_DEVICE_ID, TIMESTAMP)
+
+        // Ensure that timeout was extended, and the battery state is now valid for longer.
+        testLooper.moveTimeForward(USI_BATTERY_VALIDITY_DURATION_MILLIS - 100)
+        testLooper.dispatchAll()
+        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
+            matchesState(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.78f))
+
+        // Ensure the validity period expires after the expected amount of time.
+        testLooper.moveTimeForward(100)
+        testLooper.dispatchNext()
+        listener.verifyNotified(isInvalidBatteryState(USI_DEVICE_ID))
+        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
+            isInvalidBatteryState(USI_DEVICE_ID))
+    }
+
+    @Test
+    fun testStylusPresenceMakesUsiBatteryStateValid() {
+        `when`(native.getBatteryDevicePath(USI_DEVICE_ID)).thenReturn("/sys/dev/usi_device")
+        `when`(native.getBatteryStatus(USI_DEVICE_ID)).thenReturn(STATUS_DISCHARGING)
+        `when`(native.getBatteryCapacity(USI_DEVICE_ID)).thenReturn(78)
+
+        addInputDevice(USI_DEVICE_ID, supportsUsi = true)
+        testLooper.dispatchNext()
+        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
+        verify(uEventManager)
+            .addListener(uEventListener.capture(), eq("DEVPATH=/dev/usi_device"))
+
+        // The USI battery state is initially invalid.
+        val listener = createMockListener()
+        batteryController.registerBatteryListener(USI_DEVICE_ID, listener, PID)
+        listener.verifyNotified(isInvalidBatteryState(USI_DEVICE_ID))
+        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
+            isInvalidBatteryState(USI_DEVICE_ID))
+
+        // A stylus presence is detected. This validates the battery state.
+        batteryController.notifyStylusGestureStarted(USI_DEVICE_ID, TIMESTAMP)
+
+        listener.verifyNotified(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.78f)
+        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
+            matchesState(USI_DEVICE_ID, status = STATUS_DISCHARGING, capacity = 0.78f))
+    }
+
+    @Test
+    fun testStylusPresenceDoesNotMakeUsiBatteryStateValidAtBoot() {
+        `when`(native.getBatteryDevicePath(USI_DEVICE_ID)).thenReturn("/sys/dev/usi_device")
+        // At boot, the USI device always reports a capacity value of 0.
+        `when`(native.getBatteryStatus(USI_DEVICE_ID)).thenReturn(STATUS_UNKNOWN)
+        `when`(native.getBatteryCapacity(USI_DEVICE_ID)).thenReturn(0)
+
+        addInputDevice(USI_DEVICE_ID, supportsUsi = true)
+        testLooper.dispatchNext()
+        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
+        verify(uEventManager)
+            .addListener(uEventListener.capture(), eq("DEVPATH=/dev/usi_device"))
+
+        // The USI battery state is initially invalid.
+        val listener = createMockListener()
+        batteryController.registerBatteryListener(USI_DEVICE_ID, listener, PID)
+        listener.verifyNotified(isInvalidBatteryState(USI_DEVICE_ID))
+        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
+            isInvalidBatteryState(USI_DEVICE_ID))
+
+        // Since the capacity reported is 0, stylus presence does not validate the battery state.
+        batteryController.notifyStylusGestureStarted(USI_DEVICE_ID, TIMESTAMP)
+
+        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
+            isInvalidBatteryState(USI_DEVICE_ID))
+
+        // However, if a UEvent reports a battery capacity of 0, the battery state is now valid.
+        uEventListener.value!!.onBatteryUEvent(TIMESTAMP)
+        listener.verifyNotified(USI_DEVICE_ID, status = STATUS_UNKNOWN, capacity = 0f)
+        assertThat("battery state matches", batteryController.getBatteryState(USI_DEVICE_ID),
+            matchesState(USI_DEVICE_ID, status = STATUS_UNKNOWN, capacity = 0f))
+    }
+
+    @Test
+    fun testRegisterBluetoothListenerForMonitoredBluetoothDevices() {
+        `when`(iInputManager.getInputDeviceBluetoothAddress(BT_DEVICE_ID))
+            .thenReturn("AA:BB:CC:DD:EE:FF")
+        `when`(iInputManager.getInputDeviceBluetoothAddress(SECOND_BT_DEVICE_ID))
+            .thenReturn("11:22:33:44:55:66")
+        addInputDevice(BT_DEVICE_ID)
+        testLooper.dispatchNext()
+        addInputDevice(SECOND_BT_DEVICE_ID)
+        testLooper.dispatchNext()
+
+        // Listen to a non-Bluetooth device and ensure that the BT battery listener is not added
+        // when there are no monitored BT devices.
+        val listener = createMockListener()
+        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
+        verify(bluetoothBatteryManager, never()).addBatteryListener(any())
+
+        val bluetoothListener = ArgumentCaptor.forClass(BluetoothBatteryListener::class.java)
+
+        // The BT battery listener is added when the first BT input device is monitored.
+        batteryController.registerBatteryListener(BT_DEVICE_ID, listener, PID)
+        verify(bluetoothBatteryManager).addBatteryListener(bluetoothListener.capture())
+
+        // The BT listener is only added once for all BT devices.
+        batteryController.registerBatteryListener(SECOND_BT_DEVICE_ID, listener, PID)
+        verify(bluetoothBatteryManager, times(1)).addBatteryListener(any())
+
+        // The BT listener is only removed when there are no monitored BT devices.
+        batteryController.unregisterBatteryListener(BT_DEVICE_ID, listener, PID)
+        verify(bluetoothBatteryManager, never()).removeBatteryListener(any())
+
+        `when`(iInputManager.getInputDeviceBluetoothAddress(SECOND_BT_DEVICE_ID))
+            .thenReturn(null)
+        notifyDeviceChanged(SECOND_BT_DEVICE_ID)
+        testLooper.dispatchNext()
+        verify(bluetoothBatteryManager).removeBatteryListener(bluetoothListener.value)
+    }
+
+    @Test
+    fun testNotifiesBluetoothBatteryChanges() {
+        `when`(iInputManager.getInputDeviceBluetoothAddress(BT_DEVICE_ID))
+            .thenReturn("AA:BB:CC:DD:EE:FF")
+        `when`(bluetoothBatteryManager.getBatteryLevel(eq("AA:BB:CC:DD:EE:FF"))).thenReturn(21)
+        addInputDevice(BT_DEVICE_ID)
+        val bluetoothListener = ArgumentCaptor.forClass(BluetoothBatteryListener::class.java)
+        val listener = createMockListener()
+        batteryController.registerBatteryListener(BT_DEVICE_ID, listener, PID)
+        verify(bluetoothBatteryManager).addBatteryListener(bluetoothListener.capture())
+        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.21f)
+
+        // When the state has not changed, the listener is not notified again.
+        bluetoothListener.value!!.onBluetoothBatteryChanged(TIMESTAMP, "AA:BB:CC:DD:EE:FF", 21)
+        listener.verifyNotified(BT_DEVICE_ID, mode = times(1), capacity = 0.21f)
+
+        bluetoothListener.value!!.onBluetoothBatteryChanged(TIMESTAMP, "AA:BB:CC:DD:EE:FF", 25)
+        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.25f)
+    }
+
+    @Test
+    fun testBluetoothBatteryIsPrioritized() {
+        `when`(native.getBatteryDevicePath(BT_DEVICE_ID)).thenReturn("/sys/dev/bt_device")
+        `when`(iInputManager.getInputDeviceBluetoothAddress(BT_DEVICE_ID))
+            .thenReturn("AA:BB:CC:DD:EE:FF")
+        `when`(bluetoothBatteryManager.getBatteryLevel(eq("AA:BB:CC:DD:EE:FF"))).thenReturn(21)
+        `when`(native.getBatteryCapacity(BT_DEVICE_ID)).thenReturn(98)
+        addInputDevice(BT_DEVICE_ID)
+        val bluetoothListener = ArgumentCaptor.forClass(BluetoothBatteryListener::class.java)
+        val listener = createMockListener()
+        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
+
+        // When the device is first monitored and both native and BT battery is available,
+        // the latter is used.
+        batteryController.registerBatteryListener(BT_DEVICE_ID, listener, PID)
+        verify(bluetoothBatteryManager).addBatteryListener(bluetoothListener.capture())
+        verify(uEventManager).addListener(uEventListener.capture(), any())
+        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.21f)
+        assertThat("battery state matches", batteryController.getBatteryState(BT_DEVICE_ID),
+            matchesState(BT_DEVICE_ID, capacity = 0.21f))
+
+        // If only the native battery state changes the listener is not notified.
+        `when`(native.getBatteryCapacity(BT_DEVICE_ID)).thenReturn(97)
+        uEventListener.value!!.onBatteryUEvent(TIMESTAMP)
+        listener.verifyNotified(BT_DEVICE_ID, mode = times(1), capacity = 0.21f)
+        assertThat("battery state matches", batteryController.getBatteryState(BT_DEVICE_ID),
+            matchesState(BT_DEVICE_ID, capacity = 0.21f))
+    }
+
+    @Test
+    fun testFallBackToNativeBatteryStateWhenBluetoothStateInvalid() {
+        `when`(native.getBatteryDevicePath(BT_DEVICE_ID)).thenReturn("/sys/dev/bt_device")
+        `when`(iInputManager.getInputDeviceBluetoothAddress(BT_DEVICE_ID))
+            .thenReturn("AA:BB:CC:DD:EE:FF")
+        `when`(bluetoothBatteryManager.getBatteryLevel(eq("AA:BB:CC:DD:EE:FF"))).thenReturn(21)
+        `when`(native.getBatteryCapacity(BT_DEVICE_ID)).thenReturn(98)
+        addInputDevice(BT_DEVICE_ID)
+        val bluetoothListener = ArgumentCaptor.forClass(BluetoothBatteryListener::class.java)
+        val listener = createMockListener()
+        val uEventListener = ArgumentCaptor.forClass(UEventBatteryListener::class.java)
+
+        batteryController.registerBatteryListener(BT_DEVICE_ID, listener, PID)
+        verify(bluetoothBatteryManager).addBatteryListener(bluetoothListener.capture())
+        verify(uEventManager).addListener(uEventListener.capture(), any())
+        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.21f)
+
+        // Fall back to the native state when BT is off.
+        bluetoothListener.value!!.onBluetoothBatteryChanged(TIMESTAMP, "AA:BB:CC:DD:EE:FF",
+            BluetoothDevice.BATTERY_LEVEL_BLUETOOTH_OFF)
+        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.98f)
+
+        bluetoothListener.value!!.onBluetoothBatteryChanged(TIMESTAMP, "AA:BB:CC:DD:EE:FF", 22)
+        verify(bluetoothBatteryManager).addBatteryListener(bluetoothListener.capture())
+        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.22f)
+
+        // Fall back to the native state when BT battery is unknown.
+        bluetoothListener.value!!.onBluetoothBatteryChanged(TIMESTAMP, "AA:BB:CC:DD:EE:FF",
+            BluetoothDevice.BATTERY_LEVEL_UNKNOWN)
+        listener.verifyNotified(BT_DEVICE_ID, mode = times(2), capacity = 0.98f)
+    }
+
+    @Test
+    fun testRegisterBluetoothMetadataListenerForMonitoredBluetoothDevices() {
+        `when`(iInputManager.getInputDeviceBluetoothAddress(BT_DEVICE_ID))
+            .thenReturn("AA:BB:CC:DD:EE:FF")
+        `when`(iInputManager.getInputDeviceBluetoothAddress(SECOND_BT_DEVICE_ID))
+            .thenReturn("11:22:33:44:55:66")
+        addInputDevice(BT_DEVICE_ID)
+        testLooper.dispatchNext()
+        addInputDevice(SECOND_BT_DEVICE_ID)
+        testLooper.dispatchNext()
+
+        // Listen to a non-Bluetooth device and ensure that the metadata listener is not added when
+        // there are no monitored BT devices.
+        val listener = createMockListener()
+        batteryController.registerBatteryListener(DEVICE_ID, listener, PID)
+        verify(bluetoothBatteryManager, never()).addMetadataListener(any(), any())
+
+        val metadataListener1 = ArgumentCaptor.forClass(
+            BluetoothAdapter.OnMetadataChangedListener::class.java)
+        val metadataListener2 = ArgumentCaptor.forClass(
+            BluetoothAdapter.OnMetadataChangedListener::class.java)
+
+        // The metadata listener is added when the first BT input device is monitored.
+        batteryController.registerBatteryListener(BT_DEVICE_ID, listener, PID)
+        verify(bluetoothBatteryManager)
+            .addMetadataListener(eq("AA:BB:CC:DD:EE:FF"), metadataListener1.capture())
+
+        // There is one metadata listener added for each BT device.
+        batteryController.registerBatteryListener(SECOND_BT_DEVICE_ID, listener, PID)
+        verify(bluetoothBatteryManager)
+            .addMetadataListener(eq("11:22:33:44:55:66"), metadataListener2.capture())
+
+        // The metadata listener is removed when the device is no longer monitored.
+        batteryController.unregisterBatteryListener(BT_DEVICE_ID, listener, PID)
+        verify(bluetoothBatteryManager)
+            .removeMetadataListener("AA:BB:CC:DD:EE:FF", metadataListener1.value)
+
+        `when`(iInputManager.getInputDeviceBluetoothAddress(SECOND_BT_DEVICE_ID))
+            .thenReturn(null)
+        notifyDeviceChanged(SECOND_BT_DEVICE_ID)
+        testLooper.dispatchNext()
+        verify(bluetoothBatteryManager)
+            .removeMetadataListener("11:22:33:44:55:66", metadataListener2.value)
+    }
+
+    @Test
+    fun testNotifiesBluetoothMetadataBatteryChanges() {
+        `when`(iInputManager.getInputDeviceBluetoothAddress(BT_DEVICE_ID))
+            .thenReturn("AA:BB:CC:DD:EE:FF")
+        `when`(bluetoothBatteryManager.getMetadata("AA:BB:CC:DD:EE:FF",
+                BluetoothDevice.METADATA_MAIN_BATTERY))
+            .thenReturn("21".toByteArray())
+        addInputDevice(BT_DEVICE_ID)
+        val metadataListener = ArgumentCaptor.forClass(
+            BluetoothAdapter.OnMetadataChangedListener::class.java)
+        val listener = createMockListener()
+        val bluetoothDevice = createBluetoothDevice("AA:BB:CC:DD:EE:FF")
+        batteryController.registerBatteryListener(BT_DEVICE_ID, listener, PID)
+        verify(bluetoothBatteryManager)
+            .addMetadataListener(eq("AA:BB:CC:DD:EE:FF"), metadataListener.capture())
+        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.21f, status = STATUS_UNKNOWN)
+
+        // When the state has not changed, the listener is not notified again.
+        metadataListener.value!!.onMetadataChanged(
+            bluetoothDevice, BluetoothDevice.METADATA_MAIN_BATTERY, "21".toByteArray())
+        listener.verifyNotified(BT_DEVICE_ID, mode = times(1), capacity = 0.21f)
+
+        metadataListener.value!!.onMetadataChanged(
+            bluetoothDevice, BluetoothDevice.METADATA_MAIN_BATTERY, "25".toByteArray())
+        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.25f, status = STATUS_UNKNOWN)
+
+        metadataListener.value!!.onMetadataChanged(
+            bluetoothDevice, BluetoothDevice.METADATA_MAIN_CHARGING, "true".toByteArray())
+        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.25f, status = STATUS_CHARGING)
+
+        metadataListener.value!!.onMetadataChanged(
+            bluetoothDevice, BluetoothDevice.METADATA_MAIN_CHARGING, "false".toByteArray())
+        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.25f, status = STATUS_DISCHARGING)
+
+        metadataListener.value!!.onMetadataChanged(
+            bluetoothDevice, BluetoothDevice.METADATA_MAIN_CHARGING, null)
+        listener.verifyNotified(BT_DEVICE_ID, mode = times(2), capacity = 0.25f,
+            status = STATUS_UNKNOWN)
+    }
+
+    @Test
+    fun testBluetoothMetadataBatteryIsPrioritized() {
+        `when`(iInputManager.getInputDeviceBluetoothAddress(BT_DEVICE_ID))
+            .thenReturn("AA:BB:CC:DD:EE:FF")
+        `when`(bluetoothBatteryManager.getBatteryLevel(eq("AA:BB:CC:DD:EE:FF"))).thenReturn(21)
+        `when`(bluetoothBatteryManager.getMetadata("AA:BB:CC:DD:EE:FF",
+                BluetoothDevice.METADATA_MAIN_BATTERY))
+            .thenReturn("22".toByteArray())
+        addInputDevice(BT_DEVICE_ID)
+        val bluetoothListener = ArgumentCaptor.forClass(BluetoothBatteryListener::class.java)
+        val metadataListener = ArgumentCaptor.forClass(
+            BluetoothAdapter.OnMetadataChangedListener::class.java)
+        val listener = createMockListener()
+        val bluetoothDevice = createBluetoothDevice("AA:BB:CC:DD:EE:FF")
+        batteryController.registerBatteryListener(BT_DEVICE_ID, listener, PID)
+
+        verify(bluetoothBatteryManager).addBatteryListener(bluetoothListener.capture())
+        verify(bluetoothBatteryManager)
+            .addMetadataListener(eq("AA:BB:CC:DD:EE:FF"), metadataListener.capture())
+        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.22f)
+
+        // A change in the Bluetooth battery level has no effect while there is a valid battery
+        // level obtained through the metadata.
+        bluetoothListener.value!!.onBluetoothBatteryChanged(TIMESTAMP, "AA:BB:CC:DD:EE:FF", 23)
+        listener.verifyNotified(BT_DEVICE_ID, mode = never(), capacity = 0.23f)
+
+        metadataListener.value!!.onMetadataChanged(
+            bluetoothDevice, BluetoothDevice.METADATA_MAIN_BATTERY, "24".toByteArray())
+        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.24f)
+
+        // When the battery level from the metadata is no longer valid, we fall back to using the
+        // Bluetooth battery level.
+        metadataListener.value!!.onMetadataChanged(
+            bluetoothDevice, BluetoothDevice.METADATA_MAIN_BATTERY, null)
+        listener.verifyNotified(BT_DEVICE_ID, capacity = 0.23f)
+    }
+}
diff --git a/tests/Input/src/com/android/server/input/ConfigurationProcessorTest.java b/tests/Input/src/com/android/server/input/ConfigurationProcessorTest.java
new file mode 100644
index 0000000..9a49d91
--- /dev/null
+++ b/tests/Input/src/com/android/server/input/ConfigurationProcessorTest.java
@@ -0,0 +1,91 @@
+/*
+ * 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.server.input;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.InputStream;
+import java.util.Map;
+
+/**
+ * Build/Install/Run:
+ * atest ConfigurationProcessorTest
+ */
+@RunWith(AndroidJUnit4.class)
+public class ConfigurationProcessorTest {
+
+    private Context mContext;
+
+    @Before
+    public void setUp() throws Exception {
+        mContext = InstrumentationRegistry.getInstrumentation().getContext();
+    }
+
+    @Test
+    public void testGetInputPortAssociations() {
+        final int res = com.android.test.input.R.raw.input_port_associations;
+        InputStream xml = mContext.getResources().openRawResource(res);
+        Map<String, Integer> associations = null;
+        try {
+            associations = ConfigurationProcessor.processInputPortAssociations(xml);
+        } catch (Exception e) {
+            fail("Could not process xml file for input associations");
+        }
+        assertNotNull(associations);
+        assertEquals(2, associations.size());
+        assertEquals(0, associations.get("USB1").intValue());
+        assertEquals(1, associations.get("USB2").intValue());
+    }
+
+    @Test
+    public void testGetInputPortAssociationsBadDisplayport() {
+        final int res =
+                com.android.test.input.R.raw.input_port_associations_bad_displayport;
+        InputStream xml = mContext.getResources().openRawResource(res);
+        Map<String, Integer> associations = null;
+        try {
+            associations = ConfigurationProcessor.processInputPortAssociations(xml);
+        } catch (Exception e) {
+            fail("Could not process xml file for input associations");
+        }
+        assertNotNull(associations);
+        assertEquals(0, associations.size());
+    }
+
+    @Test
+    public void testGetInputPortAssociationsEmptyConfig() {
+        final int res = com.android.test.input.R.raw.input_port_associations_bad_xml;
+        InputStream xml = mContext.getResources().openRawResource(res);
+        try {
+            ConfigurationProcessor.processInputPortAssociations(xml);
+            fail("Parsing should fail, because xml contains bad data");
+        } catch (Exception e) {
+            // This is expected
+        }
+    }
+}
diff --git a/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt b/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt
new file mode 100644
index 0000000..93a5582
--- /dev/null
+++ b/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt
@@ -0,0 +1,402 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.input
+
+
+import android.content.Context
+import android.content.ContextWrapper
+import android.hardware.display.DisplayViewport
+import android.hardware.input.InputManager
+import android.hardware.input.InputManagerGlobal
+import android.os.IInputConstants
+import android.os.test.TestLooper
+import android.platform.test.annotations.Presubmit
+import android.provider.Settings
+import android.test.mock.MockContentResolver
+import android.view.Display
+import android.view.PointerIcon
+import androidx.test.platform.app.InstrumentationRegistry
+import com.android.internal.util.test.FakeSettingsProvider
+import com.google.common.truth.Truth.assertThat
+import org.junit.After
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.mockito.ArgumentMatchers.any
+import org.mockito.ArgumentMatchers.anyBoolean
+import org.mockito.ArgumentMatchers.anyFloat
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.ArgumentMatchers.eq
+import org.mockito.Mock
+import org.mockito.Mockito.`when`
+import org.mockito.Mockito.clearInvocations
+import org.mockito.Mockito.doAnswer
+import org.mockito.Mockito.never
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.verifyZeroInteractions
+import org.mockito.junit.MockitoJUnit
+import org.mockito.stubbing.OngoingStubbing
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+
+/**
+ * Tests for {@link InputManagerService}.
+ *
+ * Build/Install/Run:
+ * atest InputTests:InputManagerServiceTests
+ */
+@Presubmit
+class InputManagerServiceTests {
+
+    @get:Rule
+    val mockitoRule = MockitoJUnit.rule()!!
+
+    @get:Rule
+    val fakeSettingsProviderRule = FakeSettingsProvider.rule()!!
+
+    @Mock
+    private lateinit var native: NativeInputManagerService
+
+    @Mock
+    private lateinit var wmCallbacks: InputManagerService.WindowManagerCallbacks
+
+    @Mock
+    private lateinit var uEventManager: UEventManager
+
+    private lateinit var service: InputManagerService
+    private lateinit var localService: InputManagerInternal
+    private lateinit var context: Context
+    private lateinit var testLooper: TestLooper
+    private lateinit var contentResolver: MockContentResolver
+    private lateinit var inputManagerGlobalSession: InputManagerGlobal.TestSession
+
+    @Before
+    fun setup() {
+        context = spy(ContextWrapper(InstrumentationRegistry.getInstrumentation().getContext()))
+        contentResolver = MockContentResolver(context)
+        contentResolver.addProvider(Settings.AUTHORITY, FakeSettingsProvider())
+        whenever(context.contentResolver).thenReturn(contentResolver)
+        testLooper = TestLooper()
+        service =
+            InputManagerService(object : InputManagerService.Injector(
+                    context, testLooper.looper, uEventManager) {
+                override fun getNativeService(
+                    service: InputManagerService?
+                ): NativeInputManagerService {
+                    return native
+                }
+
+                override fun registerLocalService(service: InputManagerInternal?) {
+                    localService = service!!
+                }
+            })
+        inputManagerGlobalSession = InputManagerGlobal.createTestSession(service)
+        val inputManager = InputManager(context)
+        whenever(context.getSystemService(InputManager::class.java)).thenReturn(inputManager)
+        whenever(context.getSystemService(Context.INPUT_SERVICE)).thenReturn(inputManager)
+
+        assertTrue("Local service must be registered", this::localService.isInitialized)
+        service.setWindowManagerCallbacks(wmCallbacks)
+    }
+
+    @After
+    fun tearDown() {
+        if (this::inputManagerGlobalSession.isInitialized) {
+            inputManagerGlobalSession.close()
+        }
+    }
+
+    @Test
+    fun testStart() {
+        verifyZeroInteractions(native)
+
+        service.start()
+        verify(native).start()
+    }
+
+    @Test
+    fun testInputSettingsUpdatedOnSystemRunning() {
+        verifyZeroInteractions(native)
+
+        service.systemRunning()
+
+        verify(native).setPointerSpeed(anyInt())
+        verify(native).setTouchpadPointerSpeed(anyInt())
+        verify(native).setTouchpadNaturalScrollingEnabled(anyBoolean())
+        verify(native).setTouchpadTapToClickEnabled(anyBoolean())
+        verify(native).setTouchpadRightClickZoneEnabled(anyBoolean())
+        verify(native).setShowTouches(anyBoolean())
+        verify(native).reloadPointerIcons()
+        verify(native).setMotionClassifierEnabled(anyBoolean())
+        verify(native).setMaximumObscuringOpacityForTouch(anyFloat())
+        verify(native).setStylusPointerIconEnabled(anyBoolean())
+        verify(native).setKeyRepeatConfiguration(anyInt(), anyInt())
+    }
+
+    @Test
+    fun testPointerDisplayUpdatesWhenDisplayViewportsChanged() {
+        val displayId = 123
+        whenever(wmCallbacks.pointerDisplayId).thenReturn(displayId)
+        val viewports = listOf<DisplayViewport>()
+        localService.setDisplayViewports(viewports)
+        verify(native).setDisplayViewports(any(Array<DisplayViewport>::class.java))
+        verify(native).setPointerDisplayId(displayId)
+
+        val x = 42f
+        val y = 314f
+        service.onPointerDisplayIdChanged(displayId, x, y)
+        testLooper.dispatchNext()
+        verify(wmCallbacks).notifyPointerDisplayIdChanged(displayId, x, y)
+    }
+
+    @Test
+    fun testSetVirtualMousePointerDisplayId() {
+        // Set the virtual mouse pointer displayId, and ensure that the calling thread is blocked
+        // until the native callback happens.
+        var countDownLatch = CountDownLatch(1)
+        val overrideDisplayId = 123
+        Thread {
+            assertTrue("Setting virtual pointer display should succeed",
+                localService.setVirtualMousePointerDisplayId(overrideDisplayId))
+            countDownLatch.countDown()
+        }.start()
+        assertFalse("Setting virtual pointer display should block",
+            countDownLatch.await(100, TimeUnit.MILLISECONDS))
+
+        val x = 42f
+        val y = 314f
+        service.onPointerDisplayIdChanged(overrideDisplayId, x, y)
+        testLooper.dispatchNext()
+        verify(wmCallbacks).notifyPointerDisplayIdChanged(overrideDisplayId, x, y)
+        assertTrue("Native callback unblocks calling thread",
+            countDownLatch.await(100, TimeUnit.MILLISECONDS))
+        verify(native).setPointerDisplayId(overrideDisplayId)
+
+        // Ensure that setting the same override again succeeds immediately.
+        assertTrue("Setting the same virtual mouse pointer displayId again should succeed",
+            localService.setVirtualMousePointerDisplayId(overrideDisplayId))
+
+        // Ensure that we did not query WM for the pointerDisplayId when setting the override
+        verify(wmCallbacks, never()).pointerDisplayId
+
+        // Unset the virtual mouse pointer displayId, and ensure that we query WM for the new
+        // pointer displayId and the calling thread is blocked until the native callback happens.
+        countDownLatch = CountDownLatch(1)
+        val pointerDisplayId = 42
+        `when`(wmCallbacks.pointerDisplayId).thenReturn(pointerDisplayId)
+        Thread {
+            assertTrue("Unsetting virtual mouse pointer displayId should succeed",
+                localService.setVirtualMousePointerDisplayId(Display.INVALID_DISPLAY))
+            countDownLatch.countDown()
+        }.start()
+        assertFalse("Unsetting virtual mouse pointer displayId should block",
+            countDownLatch.await(100, TimeUnit.MILLISECONDS))
+
+        service.onPointerDisplayIdChanged(pointerDisplayId, x, y)
+        testLooper.dispatchNext()
+        verify(wmCallbacks).notifyPointerDisplayIdChanged(pointerDisplayId, x, y)
+        assertTrue("Native callback unblocks calling thread",
+            countDownLatch.await(100, TimeUnit.MILLISECONDS))
+        verify(native).setPointerDisplayId(pointerDisplayId)
+    }
+
+    @Test
+    fun testSetVirtualMousePointerDisplayId_unsuccessfulUpdate() {
+        // Set the virtual mouse pointer displayId, and ensure that the calling thread is blocked
+        // until the native callback happens.
+        val countDownLatch = CountDownLatch(1)
+        val overrideDisplayId = 123
+        Thread {
+            assertFalse("Setting virtual pointer display should be unsuccessful",
+                localService.setVirtualMousePointerDisplayId(overrideDisplayId))
+            countDownLatch.countDown()
+        }.start()
+        assertFalse("Setting virtual pointer display should block",
+            countDownLatch.await(100, TimeUnit.MILLISECONDS))
+
+        val x = 42f
+        val y = 314f
+        // Assume the native callback updates the pointerDisplayId to the incorrect value.
+        service.onPointerDisplayIdChanged(Display.INVALID_DISPLAY, x, y)
+        testLooper.dispatchNext()
+        verify(wmCallbacks).notifyPointerDisplayIdChanged(Display.INVALID_DISPLAY, x, y)
+        assertTrue("Native callback unblocks calling thread",
+            countDownLatch.await(100, TimeUnit.MILLISECONDS))
+        verify(native).setPointerDisplayId(overrideDisplayId)
+    }
+
+    @Test
+    fun testSetVirtualMousePointerDisplayId_competingRequests() {
+        val firstRequestSyncLatch = CountDownLatch(1)
+        doAnswer {
+            firstRequestSyncLatch.countDown()
+        }.`when`(native).setPointerDisplayId(anyInt())
+
+        val firstRequestLatch = CountDownLatch(1)
+        val firstOverride = 123
+        Thread {
+            assertFalse("Setting virtual pointer display from thread 1 should be unsuccessful",
+                localService.setVirtualMousePointerDisplayId(firstOverride))
+            firstRequestLatch.countDown()
+        }.start()
+        assertFalse("Setting virtual pointer display should block",
+            firstRequestLatch.await(100, TimeUnit.MILLISECONDS))
+
+        assertTrue("Wait for first thread's request should succeed",
+            firstRequestSyncLatch.await(100, TimeUnit.MILLISECONDS))
+
+        val secondRequestLatch = CountDownLatch(1)
+        val secondOverride = 42
+        Thread {
+            assertTrue("Setting virtual mouse pointer from thread 2 should be successful",
+                localService.setVirtualMousePointerDisplayId(secondOverride))
+            secondRequestLatch.countDown()
+        }.start()
+        assertFalse("Setting virtual mouse pointer should block",
+            secondRequestLatch.await(100, TimeUnit.MILLISECONDS))
+
+        val x = 42f
+        val y = 314f
+        // Assume the native callback updates directly to the second request.
+        service.onPointerDisplayIdChanged(secondOverride, x, y)
+        testLooper.dispatchNext()
+        verify(wmCallbacks).notifyPointerDisplayIdChanged(secondOverride, x, y)
+        assertTrue("Native callback unblocks first thread",
+            firstRequestLatch.await(100, TimeUnit.MILLISECONDS))
+        assertTrue("Native callback unblocks second thread",
+            secondRequestLatch.await(100, TimeUnit.MILLISECONDS))
+        verify(native, times(2)).setPointerDisplayId(anyInt())
+    }
+
+    @Test
+    fun onDisplayRemoved_resetAllAdditionalInputProperties() {
+        setVirtualMousePointerDisplayIdAndVerify(10)
+
+        localService.setPointerIconVisible(false, 10)
+        verify(native).setPointerIconType(eq(PointerIcon.TYPE_NULL))
+        localService.setPointerAcceleration(5f, 10)
+        verify(native).setPointerAcceleration(eq(5f))
+
+        service.onDisplayRemoved(10)
+        verify(native).displayRemoved(eq(10))
+        verify(native).setPointerIconType(eq(PointerIcon.TYPE_NOT_SPECIFIED))
+        verify(native).setPointerAcceleration(
+            eq(IInputConstants.DEFAULT_POINTER_ACCELERATION.toFloat()))
+        verifyNoMoreInteractions(native)
+
+        // This call should not block because the virtual mouse pointer override was never removed.
+        localService.setVirtualMousePointerDisplayId(10)
+
+        verify(native).setPointerDisplayId(eq(10))
+        verifyNoMoreInteractions(native)
+    }
+
+    @Test
+    fun updateAdditionalInputPropertiesForOverrideDisplay() {
+        setVirtualMousePointerDisplayIdAndVerify(10)
+
+        localService.setPointerIconVisible(false, 10)
+        verify(native).setPointerIconType(eq(PointerIcon.TYPE_NULL))
+        localService.setPointerAcceleration(5f, 10)
+        verify(native).setPointerAcceleration(eq(5f))
+
+        localService.setPointerIconVisible(true, 10)
+        verify(native).setPointerIconType(eq(PointerIcon.TYPE_NOT_SPECIFIED))
+        localService.setPointerAcceleration(1f, 10)
+        verify(native).setPointerAcceleration(eq(1f))
+
+        // Verify that setting properties on a different display is not propagated until the
+        // pointer is moved to that display.
+        localService.setPointerIconVisible(false, 20)
+        localService.setPointerAcceleration(6f, 20)
+        verifyNoMoreInteractions(native)
+
+        clearInvocations(native)
+        setVirtualMousePointerDisplayIdAndVerify(20)
+
+        verify(native).setPointerIconType(eq(PointerIcon.TYPE_NULL))
+        verify(native).setPointerAcceleration(eq(6f))
+    }
+
+    @Test
+    fun setAdditionalInputPropertiesBeforeOverride() {
+        localService.setPointerIconVisible(false, 10)
+        localService.setPointerAcceleration(5f, 10)
+
+        verifyNoMoreInteractions(native)
+
+        setVirtualMousePointerDisplayIdAndVerify(10)
+
+        verify(native).setPointerIconType(eq(PointerIcon.TYPE_NULL))
+        verify(native).setPointerAcceleration(eq(5f))
+    }
+
+    @Test
+    fun setDeviceTypeAssociation_setsDeviceTypeAssociation() {
+        val inputPort = "inputPort"
+        val type = "type"
+
+        localService.setTypeAssociation(inputPort, type)
+
+        assertThat(service.getDeviceTypeAssociations()).asList().containsExactly(inputPort, type)
+            .inOrder()
+    }
+
+    @Test
+    fun setAndUnsetDeviceTypeAssociation_deviceTypeAssociationIsMissing() {
+        val inputPort = "inputPort"
+        val type = "type"
+
+        localService.setTypeAssociation(inputPort, type)
+        localService.unsetTypeAssociation(inputPort)
+
+        assertTrue(service.getDeviceTypeAssociations().isEmpty())
+    }
+
+    @Test
+    fun testAddAndRemoveVirtualmKeyboardLayoutAssociation() {
+        val inputPort = "input port"
+        val languageTag = "language"
+        val layoutType = "layoutType"
+        localService.addKeyboardLayoutAssociation(inputPort, languageTag, layoutType)
+        verify(native).changeKeyboardLayoutAssociation()
+
+        localService.removeKeyboardLayoutAssociation(inputPort)
+        verify(native, times(2)).changeKeyboardLayoutAssociation()
+    }
+
+    private fun setVirtualMousePointerDisplayIdAndVerify(overrideDisplayId: Int) {
+        val thread = Thread { localService.setVirtualMousePointerDisplayId(overrideDisplayId) }
+        thread.start()
+
+        // Allow some time for the set override call to park while waiting for the native callback.
+        Thread.sleep(100 /*millis*/)
+        verify(native).setPointerDisplayId(overrideDisplayId)
+
+        service.onPointerDisplayIdChanged(overrideDisplayId, 0f, 0f)
+        testLooper.dispatchNext()
+        verify(wmCallbacks).notifyPointerDisplayIdChanged(overrideDisplayId, 0f, 0f)
+        thread.join(100 /*millis*/)
+    }
+}
+
+private fun <T> whenever(methodCall: T): OngoingStubbing<T> = `when`(methodCall)
diff --git a/tests/Input/src/com/android/server/input/KeyRemapperTests.kt b/tests/Input/src/com/android/server/input/KeyRemapperTests.kt
new file mode 100644
index 0000000..f74fd72
--- /dev/null
+++ b/tests/Input/src/com/android/server/input/KeyRemapperTests.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.server.input
+
+import android.content.Context
+import android.content.ContextWrapper
+import android.hardware.input.IInputManager
+import android.hardware.input.InputManager
+import android.hardware.input.InputManagerGlobal
+import android.os.test.TestLooper
+import android.platform.test.annotations.Presubmit
+import android.provider.Settings
+import android.view.InputDevice
+import android.view.KeyEvent
+import androidx.test.core.app.ApplicationProvider
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.mockito.Mock
+import org.mockito.Mockito
+import org.mockito.junit.MockitoJUnit
+import java.io.FileNotFoundException
+import java.io.FileOutputStream
+import java.io.IOException
+import java.io.InputStream
+
+private fun createKeyboard(deviceId: Int): InputDevice =
+    InputDevice.Builder()
+        .setId(deviceId)
+        .setName("Device $deviceId")
+        .setDescriptor("descriptor $deviceId")
+        .setSources(InputDevice.SOURCE_KEYBOARD)
+        .setKeyboardType(InputDevice.KEYBOARD_TYPE_ALPHABETIC)
+        .setExternal(true)
+        .build()
+
+/**
+ * Tests for {@link KeyRemapper}.
+ *
+ * Build/Install/Run:
+ * atest InputTests:KeyRemapperTests
+ */
+@Presubmit
+class KeyRemapperTests {
+
+    companion object {
+        const val DEVICE_ID = 1
+        val REMAPPABLE_KEYS = intArrayOf(
+            KeyEvent.KEYCODE_CTRL_LEFT, KeyEvent.KEYCODE_CTRL_RIGHT,
+            KeyEvent.KEYCODE_META_LEFT, KeyEvent.KEYCODE_META_RIGHT,
+            KeyEvent.KEYCODE_ALT_LEFT, KeyEvent.KEYCODE_ALT_RIGHT,
+            KeyEvent.KEYCODE_SHIFT_LEFT, KeyEvent.KEYCODE_SHIFT_RIGHT,
+            KeyEvent.KEYCODE_CAPS_LOCK
+        )
+    }
+
+    @get:Rule
+    val rule = MockitoJUnit.rule()!!
+
+    @Mock
+    private lateinit var iInputManager: IInputManager
+    @Mock
+    private lateinit var native: NativeInputManagerService
+    private lateinit var mKeyRemapper: KeyRemapper
+    private lateinit var context: Context
+    private lateinit var dataStore: PersistentDataStore
+    private lateinit var testLooper: TestLooper
+    private lateinit var inputManagerGlobalSession: InputManagerGlobal.TestSession
+
+    @Before
+    fun setup() {
+        context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
+        dataStore = PersistentDataStore(object : PersistentDataStore.Injector() {
+            override fun openRead(): InputStream? {
+                throw FileNotFoundException()
+            }
+
+            override fun startWrite(): FileOutputStream? {
+                throw IOException()
+            }
+
+            override fun finishWrite(fos: FileOutputStream?, success: Boolean) {}
+        })
+        testLooper = TestLooper()
+        mKeyRemapper = KeyRemapper(
+            context,
+            native,
+            dataStore,
+            testLooper.looper
+        )
+        inputManagerGlobalSession = InputManagerGlobal.createTestSession(iInputManager)
+        val inputManager = InputManager(context)
+        Mockito.`when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE)))
+            .thenReturn(inputManager)
+        Mockito.`when`(iInputManager.inputDeviceIds).thenReturn(intArrayOf(DEVICE_ID))
+    }
+
+    @After
+    fun tearDown() {
+        if (this::inputManagerGlobalSession.isInitialized) {
+            inputManagerGlobalSession.close()
+        }
+    }
+
+    @Test
+    fun testKeyRemapping_whenRemappingEnabled() {
+        ModifierRemappingFlag(true).use {
+            val keyboard = createKeyboard(DEVICE_ID)
+            Mockito.`when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboard)
+
+            for (i in REMAPPABLE_KEYS.indices) {
+                val fromKeyCode = REMAPPABLE_KEYS[i]
+                val toKeyCode = REMAPPABLE_KEYS[(i + 1) % REMAPPABLE_KEYS.size]
+                mKeyRemapper.remapKey(fromKeyCode, toKeyCode)
+                testLooper.dispatchNext()
+            }
+
+            val remapping = mKeyRemapper.keyRemapping
+            val expectedSize = REMAPPABLE_KEYS.size
+            assertEquals("Remapping size should be $expectedSize", expectedSize, remapping.size)
+
+            for (i in REMAPPABLE_KEYS.indices) {
+                val fromKeyCode = REMAPPABLE_KEYS[i]
+                val toKeyCode = REMAPPABLE_KEYS[(i + 1) % REMAPPABLE_KEYS.size]
+                assertEquals(
+                    "Remapping should include mapping from $fromKeyCode to $toKeyCode",
+                    toKeyCode,
+                    remapping.getOrDefault(fromKeyCode, -1)
+                )
+            }
+
+            mKeyRemapper.clearAllKeyRemappings()
+            testLooper.dispatchNext()
+
+            assertEquals(
+                "Remapping size should be 0 after clearAllModifierKeyRemappings",
+                0,
+                mKeyRemapper.keyRemapping.size
+            )
+        }
+    }
+
+    @Test
+    fun testKeyRemapping_whenRemappingDisabled() {
+        ModifierRemappingFlag(false).use {
+            val keyboard = createKeyboard(DEVICE_ID)
+            Mockito.`when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboard)
+
+            mKeyRemapper.remapKey(REMAPPABLE_KEYS[0], REMAPPABLE_KEYS[1])
+            testLooper.dispatchAll()
+
+            val remapping = mKeyRemapper.keyRemapping
+            assertEquals(
+                "Remapping should not be done if modifier key remapping is disabled",
+                0,
+                remapping.size
+            )
+        }
+    }
+
+    private inner class ModifierRemappingFlag constructor(enabled: Boolean) : AutoCloseable {
+        init {
+            Settings.Global.putString(
+                context.contentResolver,
+                "settings_new_keyboard_modifier_key", enabled.toString()
+            )
+        }
+
+        override fun close() {
+            Settings.Global.putString(
+                context.contentResolver,
+                "settings_new_keyboard_modifier_key",
+                ""
+            )
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/Input/src/com/android/server/input/KeyboardBacklightControllerTests.kt b/tests/Input/src/com/android/server/input/KeyboardBacklightControllerTests.kt
new file mode 100644
index 0000000..59aa96c
--- /dev/null
+++ b/tests/Input/src/com/android/server/input/KeyboardBacklightControllerTests.kt
@@ -0,0 +1,849 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS 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.input
+
+import android.animation.ValueAnimator
+import android.content.Context
+import android.content.ContextWrapper
+import android.graphics.Color
+import android.hardware.input.IInputManager
+import android.hardware.input.IKeyboardBacklightListener
+import android.hardware.input.IKeyboardBacklightState
+import android.hardware.input.InputManager
+import android.hardware.input.InputManagerGlobal
+import android.hardware.lights.Light
+import android.os.UEventObserver
+import android.os.test.TestLooper
+import android.platform.test.annotations.Presubmit
+import android.view.InputDevice
+import androidx.test.annotation.UiThreadTest
+import androidx.test.core.app.ApplicationProvider
+import com.android.server.input.KeyboardBacklightController.DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL
+import com.android.server.input.KeyboardBacklightController.MAX_BRIGHTNESS_CHANGE_STEPS
+import com.android.server.input.KeyboardBacklightController.USER_INACTIVITY_THRESHOLD_MILLIS
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.mockito.Mock
+import org.mockito.Mockito.any
+import org.mockito.Mockito.anyInt
+import org.mockito.Mockito.eq
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.`when`
+import org.mockito.junit.MockitoJUnit
+import java.io.FileNotFoundException
+import java.io.FileOutputStream
+import java.io.IOException
+import java.io.InputStream
+
+private fun createKeyboard(deviceId: Int): InputDevice =
+    InputDevice.Builder()
+        .setId(deviceId)
+        .setName("Device $deviceId")
+        .setDescriptor("descriptor $deviceId")
+        .setSources(InputDevice.SOURCE_KEYBOARD)
+        .setKeyboardType(InputDevice.KEYBOARD_TYPE_ALPHABETIC)
+        .setExternal(true)
+        .build()
+
+private fun createLight(lightId: Int, lightType: Int): Light =
+    createLight(
+        lightId,
+        lightType,
+        null
+    )
+
+private fun createLight(lightId: Int, lightType: Int, suggestedBrightnessLevels: IntArray?): Light =
+    Light(
+        lightId,
+        "Light $lightId",
+        1,
+        lightType,
+        Light.LIGHT_CAPABILITY_BRIGHTNESS,
+        suggestedBrightnessLevels
+    )
+/**
+ * Tests for {@link KeyboardBacklightController}.
+ *
+ * Build/Install/Run:
+ * atest InputTests:KeyboardBacklightControllerTests
+ */
+@Presubmit
+class KeyboardBacklightControllerTests {
+    companion object {
+        const val DEVICE_ID = 1
+        const val LIGHT_ID = 2
+        const val SECOND_LIGHT_ID = 3
+        const val MAX_BRIGHTNESS = 255
+    }
+
+    @get:Rule
+    val rule = MockitoJUnit.rule()!!
+
+    @Mock
+    private lateinit var iInputManager: IInputManager
+    @Mock
+    private lateinit var native: NativeInputManagerService
+    @Mock
+    private lateinit var uEventManager: UEventManager
+    private lateinit var keyboardBacklightController: KeyboardBacklightController
+    private lateinit var context: Context
+    private lateinit var dataStore: PersistentDataStore
+    private lateinit var testLooper: TestLooper
+    private lateinit var inputManagerGlobalSession: InputManagerGlobal.TestSession
+    private var lightColorMap: HashMap<Int, Int> = HashMap()
+    private var lastBacklightState: KeyboardBacklightState? = null
+    private var sysfsNodeChanges = 0
+    private var lastAnimationValues = IntArray(2)
+
+    @Before
+    fun setup() {
+        context = spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
+        dataStore = PersistentDataStore(object : PersistentDataStore.Injector() {
+            override fun openRead(): InputStream? {
+                throw FileNotFoundException()
+            }
+
+            override fun startWrite(): FileOutputStream? {
+                throw IOException()
+            }
+
+            override fun finishWrite(fos: FileOutputStream?, success: Boolean) {}
+        })
+        testLooper = TestLooper()
+        keyboardBacklightController = KeyboardBacklightController(context, native, dataStore,
+                testLooper.looper, FakeAnimatorFactory(), uEventManager)
+        inputManagerGlobalSession = InputManagerGlobal.createTestSession(iInputManager)
+        val inputManager = InputManager(context)
+        `when`(context.getSystemService(eq(Context.INPUT_SERVICE))).thenReturn(inputManager)
+        `when`(iInputManager.inputDeviceIds).thenReturn(intArrayOf(DEVICE_ID))
+        `when`(native.setLightColor(anyInt(), anyInt(), anyInt())).then {
+            val args = it.arguments
+            lightColorMap.put(args[1] as Int, args[2] as Int)
+        }
+        `when`(native.getLightColor(anyInt(), anyInt())).thenAnswer {
+            val args = it.arguments
+            lightColorMap.getOrDefault(args[1] as Int, 0)
+        }
+        lightColorMap.clear()
+        `when`(native.sysfsNodeChanged(any())).then {
+            sysfsNodeChanges++
+        }
+    }
+
+    @After
+    fun tearDown() {
+        if (this::inputManagerGlobalSession.isInitialized) {
+            inputManagerGlobalSession.close()
+        }
+    }
+
+    @Test
+    fun testKeyboardBacklightIncrementDecrement() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = false,
+            ambientControlEnabled = false
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+
+            assertIncrementDecrementForLevels(keyboardWithBacklight, keyboardBacklight,
+                    DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL)
+        }
+    }
+
+    @Test
+    fun testKeyboardWithoutBacklight() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = false,
+            ambientControlEnabled = false
+        ).use {
+            val keyboardWithoutBacklight = createKeyboard(DEVICE_ID)
+            val keyboardInputLight = createLight(LIGHT_ID, Light.LIGHT_TYPE_INPUT)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithoutBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardInputLight))
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+
+            incrementKeyboardBacklight(DEVICE_ID)
+            assertTrue("Non Keyboard backlights should not change", lightColorMap.isEmpty())
+        }
+    }
+
+    @Test
+    fun testKeyboardWithMultipleLight() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = false,
+            ambientControlEnabled = false
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
+            val keyboardInputLight = createLight(SECOND_LIGHT_ID, Light.LIGHT_TYPE_INPUT)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(
+                listOf(
+                    keyboardBacklight,
+                    keyboardInputLight
+                )
+            )
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+
+            incrementKeyboardBacklight(DEVICE_ID)
+            assertEquals("Only keyboard backlights should change", 1, lightColorMap.size)
+            assertNotNull("Keyboard backlight should change", lightColorMap[LIGHT_ID])
+            assertNull("Input lights should not change", lightColorMap[SECOND_LIGHT_ID])
+        }
+    }
+
+    @Test
+    fun testRestoreBacklightOnInputDeviceAdded() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = false,
+            ambientControlEnabled = false
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+
+            for (level in 1 until DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL.size) {
+                dataStore.setKeyboardBacklightBrightness(
+                    keyboardWithBacklight.descriptor,
+                    LIGHT_ID,
+                    DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[level] - 1
+                )
+
+                keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+                keyboardBacklightController.notifyUserActivity()
+                testLooper.dispatchNext()
+                assertEquals(
+                    "Keyboard backlight level should be restored to the level saved in the " +
+                            "data store",
+                    Color.argb(DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[level], 0, 0, 0),
+                    lightColorMap[LIGHT_ID]
+                )
+                keyboardBacklightController.onInputDeviceRemoved(DEVICE_ID)
+            }
+        }
+    }
+
+    @Test
+    fun testRestoreBacklightOnInputDeviceChanged() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = false,
+            ambientControlEnabled = false
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            dataStore.setKeyboardBacklightBrightness(
+                keyboardWithBacklight.descriptor,
+                LIGHT_ID,
+                MAX_BRIGHTNESS
+            )
+
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+            keyboardBacklightController.notifyUserActivity()
+            testLooper.dispatchNext()
+            assertTrue(
+                "Keyboard backlight should not be changed until its added",
+                lightColorMap.isEmpty()
+            )
+
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+            keyboardBacklightController.onInputDeviceChanged(DEVICE_ID)
+            keyboardBacklightController.notifyUserActivity()
+            testLooper.dispatchNext()
+            assertEquals(
+                "Keyboard backlight level should be restored to the level saved in the data store",
+                Color.argb(MAX_BRIGHTNESS, 0, 0, 0),
+                lightColorMap[LIGHT_ID]
+            )
+        }
+    }
+
+    @Test
+    fun testKeyboardBacklight_registerUnregisterListener() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = false,
+            ambientControlEnabled = false
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
+            val maxLevel = DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL.size - 1
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+
+            // Register backlight listener
+            val listener = KeyboardBacklightListener()
+            keyboardBacklightController.registerKeyboardBacklightListener(listener, 0)
+
+            lastBacklightState = null
+            keyboardBacklightController.incrementKeyboardBacklight(DEVICE_ID)
+            testLooper.dispatchNext()
+
+            assertEquals(
+                "Backlight state device Id should be $DEVICE_ID",
+                DEVICE_ID,
+                lastBacklightState!!.deviceId
+            )
+            assertEquals(
+                "Backlight state brightnessLevel should be 1",
+                1,
+                lastBacklightState!!.brightnessLevel
+            )
+            assertEquals(
+                "Backlight state maxBrightnessLevel should be $maxLevel",
+                maxLevel,
+                lastBacklightState!!.maxBrightnessLevel
+            )
+            assertEquals(
+                "Backlight state isTriggeredByKeyPress should be true",
+                true,
+                lastBacklightState!!.isTriggeredByKeyPress
+            )
+
+            // Unregister listener
+            keyboardBacklightController.unregisterKeyboardBacklightListener(listener, 0)
+
+            lastBacklightState = null
+            incrementKeyboardBacklight(DEVICE_ID)
+
+            assertNull("Listener should not receive any updates", lastBacklightState)
+        }
+    }
+
+    @Test
+    fun testKeyboardBacklight_userActivity() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = false,
+            ambientControlEnabled = false
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+            dataStore.setKeyboardBacklightBrightness(
+                keyboardWithBacklight.descriptor,
+                LIGHT_ID,
+                MAX_BRIGHTNESS
+            )
+
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+            keyboardBacklightController.notifyUserActivity()
+            testLooper.dispatchNext()
+            assertEquals(
+                "Keyboard backlight level should be restored to the level saved in the data store",
+                Color.argb(MAX_BRIGHTNESS, 0, 0, 0),
+                lightColorMap[LIGHT_ID]
+            )
+
+            testLooper.moveTimeForward(USER_INACTIVITY_THRESHOLD_MILLIS + 1000)
+            testLooper.dispatchNext()
+            assertEquals(
+                "Keyboard backlight level should be turned off after inactivity",
+                0,
+                lightColorMap[LIGHT_ID]
+            )
+        }
+    }
+
+    @Test
+    fun testKeyboardBacklight_displayOnOff() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = false,
+            ambientControlEnabled = false
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+            dataStore.setKeyboardBacklightBrightness(
+                keyboardWithBacklight.descriptor,
+                LIGHT_ID,
+                MAX_BRIGHTNESS
+            )
+
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+            keyboardBacklightController.handleInteractiveStateChange(true /* isDisplayOn */)
+            assertEquals(
+                "Keyboard backlight level should be restored to the level saved in the data " +
+                        "store when display turned on",
+                Color.argb(MAX_BRIGHTNESS, 0, 0, 0),
+                lightColorMap[LIGHT_ID]
+            )
+
+            keyboardBacklightController.handleInteractiveStateChange(false /* isDisplayOn */)
+            assertEquals(
+                "Keyboard backlight level should be turned off after display is turned off",
+                0,
+                lightColorMap[LIGHT_ID]
+            )
+        }
+    }
+
+    @Test
+    fun testKeyboardBacklightSysfsNodeAdded_AfterInputDeviceAdded() {
+        var counter = sysfsNodeChanges
+        keyboardBacklightController.onKeyboardBacklightUEvent(UEventObserver.UEvent(
+            "ACTION=add\u0000SUBSYSTEM=leds\u0000DEVPATH=/xyz/leds/abc::no_backlight\u0000"
+        ))
+        assertEquals(
+            "Should not reload sysfs node if UEvent path doesn't contain kbd_backlight",
+            counter,
+            sysfsNodeChanges
+        )
+
+        keyboardBacklightController.onKeyboardBacklightUEvent(UEventObserver.UEvent(
+            "ACTION=add\u0000SUBSYSTEM=power\u0000DEVPATH=/xyz/leds/abc::kbd_backlight\u0000"
+        ))
+        assertEquals(
+            "Should not reload sysfs node if UEvent doesn't belong to subsystem LED",
+            counter,
+            sysfsNodeChanges
+        )
+
+        keyboardBacklightController.onKeyboardBacklightUEvent(UEventObserver.UEvent(
+            "ACTION=remove\u0000SUBSYSTEM=leds\u0000DEVPATH=/xyz/leds/abc::kbd_backlight\u0000"
+        ))
+        assertEquals(
+            "Should not reload sysfs node if UEvent doesn't have ACTION(add)",
+            counter,
+            sysfsNodeChanges
+        )
+
+        keyboardBacklightController.onKeyboardBacklightUEvent(UEventObserver.UEvent(
+            "ACTION=add\u0000SUBSYSTEM=leds\u0000DEVPATH=/xyz/pqr/abc::kbd_backlight\u0000"
+        ))
+        assertEquals(
+            "Should not reload sysfs node if UEvent path doesn't belong to leds/ directory",
+            counter,
+            sysfsNodeChanges
+        )
+
+        keyboardBacklightController.onKeyboardBacklightUEvent(UEventObserver.UEvent(
+            "ACTION=add\u0000SUBSYSTEM=leds\u0000DEVPATH=/xyz/leds/abc::kbd_backlight\u0000"
+        ))
+        assertEquals(
+            "Should reload sysfs node if a valid Keyboard backlight LED UEvent occurs",
+            ++counter,
+            sysfsNodeChanges
+        )
+
+        keyboardBacklightController.onKeyboardBacklightUEvent(UEventObserver.UEvent(
+            "ACTION=add\u0000SUBSYSTEM=leds\u0000DEVPATH=/xyz/leds/abc:kbd_backlight:red\u0000"
+        ))
+        assertEquals(
+            "Should reload sysfs node if a valid Keyboard backlight LED UEvent occurs",
+            ++counter,
+            sysfsNodeChanges
+        )
+    }
+
+    @Test
+    @UiThreadTest
+    fun testKeyboardBacklightAnimation_onChangeLevels() {
+        KeyboardBacklightFlags(
+            animationEnabled = true,
+            customLevelsEnabled = false,
+            ambientControlEnabled = false
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+
+            incrementKeyboardBacklight(DEVICE_ID)
+            assertEquals(
+                "Should start animation from level 0",
+                DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[0],
+                lastAnimationValues[0]
+            )
+            assertEquals(
+                "Should start animation to level 1",
+                DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[1],
+                lastAnimationValues[1]
+            )
+        }
+    }
+
+    @Test
+    fun testKeyboardBacklightPreferredLevels() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = true,
+            ambientControlEnabled = false
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val suggestedLevels = intArrayOf(0, 22, 63, 135, 196, 255)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT,
+                    suggestedLevels)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+
+            assertIncrementDecrementForLevels(keyboardWithBacklight, keyboardBacklight,
+                    suggestedLevels)
+        }
+    }
+
+    @Test
+    fun testKeyboardBacklightPreferredLevels_moreThanMax_shouldUseDefault() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = true,
+            ambientControlEnabled = false
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val suggestedLevels = IntArray(MAX_BRIGHTNESS_CHANGE_STEPS + 1) { 10 * (it + 1) }
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT,
+                    suggestedLevels)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+
+            assertIncrementDecrementForLevels(keyboardWithBacklight, keyboardBacklight,
+                    DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL)
+        }
+    }
+
+    @Test
+    fun testKeyboardBacklightPreferredLevels_mustHaveZeroAndMaxBrightnessAsBounds() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = true,
+            ambientControlEnabled = false
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val suggestedLevels = intArrayOf(22, 63, 135, 196)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT,
+                    suggestedLevels)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+
+            // Framework will add the lowest and maximum levels if not provided via config
+            assertIncrementDecrementForLevels(keyboardWithBacklight, keyboardBacklight,
+                    intArrayOf(0, 22, 63, 135, 196, 255))
+        }
+    }
+
+    @Test
+    fun testKeyboardBacklightPreferredLevels_dropsOutOfBoundsLevels() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = true,
+            ambientControlEnabled = false
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val suggestedLevels = intArrayOf(22, 63, 135, 400, 196, 1000)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT,
+                    suggestedLevels)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+
+            // Framework will drop out of bound levels in the config
+            assertIncrementDecrementForLevels(keyboardWithBacklight, keyboardBacklight,
+                    intArrayOf(0, 22, 63, 135, 196, 255))
+        }
+    }
+
+    @Test
+    fun testAmbientBacklightControl_doesntRestoreBacklightLevel() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = false,
+            ambientControlEnabled = true
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+
+            dataStore.setKeyboardBacklightBrightness(
+                keyboardWithBacklight.descriptor,
+                LIGHT_ID,
+                DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[1]
+            )
+
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+            keyboardBacklightController.notifyUserActivity()
+            testLooper.dispatchNext()
+            assertNull(
+                "Keyboard backlight level should not be restored to the saved level",
+                lightColorMap[LIGHT_ID]
+            )
+        }
+    }
+
+    @Test
+    fun testAmbientBacklightControl_doesntBackupBacklightLevel() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = false,
+            ambientControlEnabled = true
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+            incrementKeyboardBacklight(DEVICE_ID)
+            assertFalse(
+                "Light value should not be backed up if ambient control is enabled",
+                dataStore.getKeyboardBacklightBrightness(
+                    keyboardWithBacklight.descriptor, LIGHT_ID
+                ).isPresent
+            )
+        }
+    }
+
+    @Test
+    fun testAmbientBacklightControl_incrementLevel_afterAmbientChange() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = false,
+            ambientControlEnabled = true
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+            sendAmbientBacklightValue(1)
+            assertEquals(
+                "Light value should be changed to ambient provided value",
+                Color.argb(1, 0, 0, 0),
+                lightColorMap[LIGHT_ID]
+            )
+
+            incrementKeyboardBacklight(DEVICE_ID)
+
+            assertEquals(
+                "Light value for level after increment post Ambient change is mismatched",
+                Color.argb(DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[1], 0, 0, 0),
+                lightColorMap[LIGHT_ID]
+            )
+        }
+    }
+
+    @Test
+    fun testAmbientBacklightControl_decrementLevel_afterAmbientChange() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = false,
+            ambientControlEnabled = true
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+            sendAmbientBacklightValue(254)
+            assertEquals(
+                "Light value should be changed to ambient provided value",
+                Color.argb(254, 0, 0, 0),
+                lightColorMap[LIGHT_ID]
+            )
+
+            decrementKeyboardBacklight(DEVICE_ID)
+
+            val numLevels = DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL.size
+            assertEquals(
+                "Light value for level after decrement post Ambient change is mismatched",
+                Color.argb(DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[numLevels - 2], 0, 0, 0),
+                lightColorMap[LIGHT_ID]
+            )
+        }
+    }
+
+    @Test
+    fun testAmbientBacklightControl_ambientChanges_afterManualChange() {
+        KeyboardBacklightFlags(
+            animationEnabled = false,
+            customLevelsEnabled = false,
+            ambientControlEnabled = true
+        ).use {
+            val keyboardWithBacklight = createKeyboard(DEVICE_ID)
+            val keyboardBacklight = createLight(LIGHT_ID, Light.LIGHT_TYPE_KEYBOARD_BACKLIGHT)
+            `when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardWithBacklight)
+            `when`(iInputManager.getLights(DEVICE_ID)).thenReturn(listOf(keyboardBacklight))
+            keyboardBacklightController.onInputDeviceAdded(DEVICE_ID)
+            incrementKeyboardBacklight(DEVICE_ID)
+            assertEquals(
+                "Light value should be changed to the first level",
+                Color.argb(DEFAULT_BRIGHTNESS_VALUE_FOR_LEVEL[1], 0, 0, 0),
+                lightColorMap[LIGHT_ID]
+            )
+
+            sendAmbientBacklightValue(100)
+            assertNotEquals(
+                "Light value should not change based on ambient changes after manual changes",
+                Color.argb(100, 0, 0, 0),
+                lightColorMap[LIGHT_ID]
+            )
+        }
+    }
+
+    private fun assertIncrementDecrementForLevels(
+        device: InputDevice,
+        light: Light,
+        expectedLevels: IntArray
+    ) {
+        val deviceId = device.id
+        val lightId = light.id
+        for (level in 1 until expectedLevels.size) {
+            incrementKeyboardBacklight(deviceId)
+            assertEquals(
+                "Light value for level $level mismatched",
+                Color.argb(expectedLevels[level], 0, 0, 0),
+                lightColorMap[lightId]
+            )
+            assertEquals(
+                "Light value for level $level must be correctly stored in the datastore",
+                expectedLevels[level],
+                dataStore.getKeyboardBacklightBrightness(device.descriptor, lightId).asInt
+            )
+        }
+
+        // Increment above max level
+        incrementKeyboardBacklight(deviceId)
+        assertEquals(
+            "Light value for max level mismatched",
+            Color.argb(MAX_BRIGHTNESS, 0, 0, 0),
+            lightColorMap[lightId]
+        )
+        assertEquals(
+            "Light value for max level must be correctly stored in the datastore",
+            MAX_BRIGHTNESS,
+            dataStore.getKeyboardBacklightBrightness(device.descriptor, lightId).asInt
+        )
+
+        for (level in expectedLevels.size - 2 downTo 0) {
+            decrementKeyboardBacklight(deviceId)
+            assertEquals(
+                "Light value for level $level mismatched",
+                Color.argb(expectedLevels[level], 0, 0, 0),
+                lightColorMap[lightId]
+            )
+            assertEquals(
+                "Light value for level $level must be correctly stored in the datastore",
+                expectedLevels[level],
+                dataStore.getKeyboardBacklightBrightness(device.descriptor, lightId).asInt
+            )
+        }
+
+        // Decrement below min level
+        decrementKeyboardBacklight(deviceId)
+        assertEquals(
+            "Light value for min level mismatched",
+            Color.argb(0, 0, 0, 0),
+            lightColorMap[lightId]
+        )
+        assertEquals(
+            "Light value for min level must be correctly stored in the datastore",
+            0,
+            dataStore.getKeyboardBacklightBrightness(device.descriptor, lightId).asInt
+        )
+    }
+
+    inner class KeyboardBacklightListener : IKeyboardBacklightListener.Stub() {
+        override fun onBrightnessChanged(
+            deviceId: Int,
+            state: IKeyboardBacklightState,
+            isTriggeredByKeyPress: Boolean
+        ) {
+            lastBacklightState = KeyboardBacklightState(
+                deviceId,
+                state.brightnessLevel,
+                state.maxBrightnessLevel,
+                isTriggeredByKeyPress
+            )
+        }
+    }
+
+    private fun incrementKeyboardBacklight(deviceId: Int) {
+        keyboardBacklightController.incrementKeyboardBacklight(deviceId)
+        keyboardBacklightController.notifyUserActivity()
+        testLooper.dispatchAll()
+    }
+
+    private fun decrementKeyboardBacklight(deviceId: Int) {
+        keyboardBacklightController.decrementKeyboardBacklight(deviceId)
+        keyboardBacklightController.notifyUserActivity()
+        testLooper.dispatchAll()
+    }
+
+    private fun sendAmbientBacklightValue(brightnessValue: Int) {
+        keyboardBacklightController.handleAmbientLightValueChanged(brightnessValue)
+        keyboardBacklightController.notifyUserActivity()
+        testLooper.dispatchAll()
+    }
+
+    class KeyboardBacklightState(
+        val deviceId: Int,
+        val brightnessLevel: Int,
+        val maxBrightnessLevel: Int,
+        val isTriggeredByKeyPress: Boolean
+    )
+
+    private inner class KeyboardBacklightFlags constructor(
+        animationEnabled: Boolean,
+        customLevelsEnabled: Boolean,
+        ambientControlEnabled: Boolean
+    ) : AutoCloseable {
+        init {
+            InputFeatureFlagProvider.setKeyboardBacklightAnimationEnabled(animationEnabled)
+            InputFeatureFlagProvider.setKeyboardBacklightCustomLevelsEnabled(customLevelsEnabled)
+            InputFeatureFlagProvider
+                .setAmbientKeyboardBacklightControlEnabled(ambientControlEnabled)
+        }
+
+        override fun close() {
+            InputFeatureFlagProvider.clearOverrides()
+        }
+    }
+
+    private inner class FakeAnimatorFactory : KeyboardBacklightController.AnimatorFactory {
+        override fun makeIntAnimator(from: Int, to: Int): ValueAnimator {
+            lastAnimationValues[0] = from
+            lastAnimationValues[1] = to
+            return ValueAnimator.ofInt(from, to)
+        }
+    }
+}
diff --git a/tests/Input/src/com/android/server/input/KeyboardLayoutManagerTests.kt b/tests/Input/src/com/android/server/input/KeyboardLayoutManagerTests.kt
new file mode 100644
index 0000000..b6477510
--- /dev/null
+++ b/tests/Input/src/com/android/server/input/KeyboardLayoutManagerTests.kt
@@ -0,0 +1,912 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.input
+
+import android.content.Context
+import android.content.ContextWrapper
+import android.content.pm.ActivityInfo
+import android.content.pm.ApplicationInfo
+import android.content.pm.PackageManager
+import android.content.pm.ResolveInfo
+import android.content.pm.ServiceInfo
+import android.hardware.input.IInputManager
+import android.hardware.input.InputManager
+import android.hardware.input.InputManagerGlobal
+import android.hardware.input.KeyboardLayout
+import android.icu.util.ULocale
+import android.os.Bundle
+import android.os.test.TestLooper
+import android.platform.test.annotations.Presubmit
+import android.provider.Settings
+import android.view.InputDevice
+import android.view.inputmethod.InputMethodInfo
+import android.view.inputmethod.InputMethodSubtype
+import androidx.test.core.R
+import androidx.test.core.app.ApplicationProvider
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotEquals
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Assert.assertThrows
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.mockito.Mock
+import org.mockito.Mockito
+import org.mockito.junit.MockitoJUnit
+import java.io.FileNotFoundException
+import java.io.FileOutputStream
+import java.io.IOException
+import java.io.InputStream
+
+private fun createKeyboard(
+    deviceId: Int,
+    vendorId: Int,
+    productId: Int,
+    languageTag: String,
+    layoutType: String
+): InputDevice =
+    InputDevice.Builder()
+        .setId(deviceId)
+        .setName("Device $deviceId")
+        .setDescriptor("descriptor $deviceId")
+        .setSources(InputDevice.SOURCE_KEYBOARD)
+        .setKeyboardType(InputDevice.KEYBOARD_TYPE_ALPHABETIC)
+        .setExternal(true)
+        .setVendorId(vendorId)
+        .setProductId(productId)
+        .setKeyboardLanguageTag(languageTag)
+        .setKeyboardLayoutType(layoutType)
+        .build()
+
+/**
+ * Tests for {@link Default UI} and {@link New UI}.
+ *
+ * Build/Install/Run:
+ * atest InputTests:KeyboardLayoutManagerTests
+ */
+@Presubmit
+class KeyboardLayoutManagerTests {
+    companion object {
+        const val DEVICE_ID = 1
+        const val VENDOR_SPECIFIC_DEVICE_ID = 2
+        const val ENGLISH_DVORAK_DEVICE_ID = 3
+        const val ENGLISH_QWERTY_DEVICE_ID = 4
+        const val DEFAULT_VENDOR_ID = 123
+        const val DEFAULT_PRODUCT_ID = 456
+        const val USER_ID = 4
+        const val IME_ID = "ime_id"
+        const val PACKAGE_NAME = "KeyboardLayoutManagerTests"
+        const val RECEIVER_NAME = "DummyReceiver"
+        private const val ENGLISH_US_LAYOUT_NAME = "keyboard_layout_english_us"
+        private const val ENGLISH_UK_LAYOUT_NAME = "keyboard_layout_english_uk"
+        private const val VENDOR_SPECIFIC_LAYOUT_NAME = "keyboard_layout_vendorId:1,productId:1"
+    }
+
+    private val ENGLISH_US_LAYOUT_DESCRIPTOR = createLayoutDescriptor(ENGLISH_US_LAYOUT_NAME)
+    private val ENGLISH_UK_LAYOUT_DESCRIPTOR = createLayoutDescriptor(ENGLISH_UK_LAYOUT_NAME)
+    private val VENDOR_SPECIFIC_LAYOUT_DESCRIPTOR =
+        createLayoutDescriptor(VENDOR_SPECIFIC_LAYOUT_NAME)
+
+    @get:Rule
+    val rule = MockitoJUnit.rule()!!
+
+    @Mock
+    private lateinit var iInputManager: IInputManager
+
+    @Mock
+    private lateinit var native: NativeInputManagerService
+
+    @Mock
+    private lateinit var packageManager: PackageManager
+    private lateinit var keyboardLayoutManager: KeyboardLayoutManager
+
+    private lateinit var imeInfo: InputMethodInfo
+    private var nextImeSubtypeId = 0
+    private lateinit var context: Context
+    private lateinit var dataStore: PersistentDataStore
+    private lateinit var testLooper: TestLooper
+    private lateinit var inputManagerGlobalSession: InputManagerGlobal.TestSession
+
+    // Devices
+    private lateinit var keyboardDevice: InputDevice
+    private lateinit var vendorSpecificKeyboardDevice: InputDevice
+    private lateinit var englishDvorakKeyboardDevice: InputDevice
+    private lateinit var englishQwertyKeyboardDevice: InputDevice
+
+    @Before
+    fun setup() {
+        context = Mockito.spy(ContextWrapper(ApplicationProvider.getApplicationContext()))
+        inputManagerGlobalSession = InputManagerGlobal.createTestSession(iInputManager)
+        dataStore = PersistentDataStore(object : PersistentDataStore.Injector() {
+            override fun openRead(): InputStream? {
+                throw FileNotFoundException()
+            }
+
+            override fun startWrite(): FileOutputStream? {
+                throw IOException()
+            }
+
+            override fun finishWrite(fos: FileOutputStream?, success: Boolean) {}
+        })
+        testLooper = TestLooper()
+        keyboardLayoutManager = KeyboardLayoutManager(context, native, dataStore, testLooper.looper)
+        setupInputDevices()
+        setupBroadcastReceiver()
+        setupIme()
+    }
+
+    @After
+    fun tearDown() {
+        if (this::inputManagerGlobalSession.isInitialized) {
+            inputManagerGlobalSession.close()
+        }
+    }
+
+    private fun setupInputDevices() {
+        val inputManager = InputManager(context)
+        Mockito.`when`(context.getSystemService(Mockito.eq(Context.INPUT_SERVICE)))
+            .thenReturn(inputManager)
+
+        keyboardDevice = createKeyboard(DEVICE_ID, DEFAULT_VENDOR_ID, DEFAULT_PRODUCT_ID, "", "")
+        vendorSpecificKeyboardDevice = createKeyboard(VENDOR_SPECIFIC_DEVICE_ID, 1, 1, "", "")
+        englishDvorakKeyboardDevice = createKeyboard(ENGLISH_DVORAK_DEVICE_ID, DEFAULT_VENDOR_ID,
+                DEFAULT_PRODUCT_ID, "en", "dvorak")
+        englishQwertyKeyboardDevice = createKeyboard(ENGLISH_QWERTY_DEVICE_ID, DEFAULT_VENDOR_ID,
+                DEFAULT_PRODUCT_ID, "en", "qwerty")
+        Mockito.`when`(iInputManager.inputDeviceIds)
+            .thenReturn(intArrayOf(
+                DEVICE_ID,
+                VENDOR_SPECIFIC_DEVICE_ID,
+                ENGLISH_DVORAK_DEVICE_ID,
+                ENGLISH_QWERTY_DEVICE_ID
+            ))
+        Mockito.`when`(iInputManager.getInputDevice(DEVICE_ID)).thenReturn(keyboardDevice)
+        Mockito.`when`(iInputManager.getInputDevice(VENDOR_SPECIFIC_DEVICE_ID))
+            .thenReturn(vendorSpecificKeyboardDevice)
+        Mockito.`when`(iInputManager.getInputDevice(ENGLISH_DVORAK_DEVICE_ID))
+            .thenReturn(englishDvorakKeyboardDevice)
+        Mockito.`when`(iInputManager.getInputDevice(ENGLISH_QWERTY_DEVICE_ID))
+                .thenReturn(englishQwertyKeyboardDevice)
+    }
+
+    private fun setupBroadcastReceiver() {
+        Mockito.`when`(context.packageManager).thenReturn(packageManager)
+
+        val info = createMockReceiver()
+        Mockito.`when`(packageManager.queryBroadcastReceiversAsUser(Mockito.any(), Mockito.anyInt(),
+                Mockito.anyInt())).thenReturn(listOf(info))
+        Mockito.`when`(packageManager.getReceiverInfo(Mockito.any(), Mockito.anyInt()))
+            .thenReturn(info.activityInfo)
+
+        val resources = context.resources
+        Mockito.`when`(
+            packageManager.getResourcesForApplication(
+                Mockito.any(
+                    ApplicationInfo::class.java
+                )
+            )
+        ).thenReturn(resources)
+    }
+
+    private fun setupIme() {
+        imeInfo = InputMethodInfo(PACKAGE_NAME, RECEIVER_NAME, "", "", 0)
+    }
+
+    @Test
+    fun testDefaultUi_getKeyboardLayouts() {
+        NewSettingsApiFlag(false).use {
+            val keyboardLayouts = keyboardLayoutManager.keyboardLayouts
+            assertNotEquals(
+                "Default UI: Keyboard layout API should not return empty array",
+                0,
+                keyboardLayouts.size
+            )
+            assertTrue(
+                "Default UI: Keyboard layout API should provide English(US) layout",
+                hasLayout(keyboardLayouts, ENGLISH_US_LAYOUT_DESCRIPTOR)
+            )
+        }
+    }
+
+    @Test
+    fun testNewUi_getKeyboardLayouts() {
+        NewSettingsApiFlag(true).use {
+            val keyboardLayouts = keyboardLayoutManager.keyboardLayouts
+            assertNotEquals(
+                "New UI: Keyboard layout API should not return empty array",
+                0,
+                keyboardLayouts.size
+            )
+            assertTrue(
+                "New UI: Keyboard layout API should provide English(US) layout",
+                hasLayout(keyboardLayouts, ENGLISH_US_LAYOUT_DESCRIPTOR)
+            )
+        }
+    }
+
+    @Test
+    fun testDefaultUi_getKeyboardLayoutsForInputDevice() {
+        NewSettingsApiFlag(false).use {
+            val keyboardLayouts =
+                keyboardLayoutManager.getKeyboardLayoutsForInputDevice(keyboardDevice.identifier)
+            assertNotEquals(
+                "Default UI: getKeyboardLayoutsForInputDevice API should not return empty array",
+                0,
+                keyboardLayouts.size
+            )
+            assertTrue(
+                "Default UI: getKeyboardLayoutsForInputDevice API should provide English(US) " +
+                        "layout",
+                hasLayout(keyboardLayouts, ENGLISH_US_LAYOUT_DESCRIPTOR)
+            )
+
+            val vendorSpecificKeyboardLayouts =
+                keyboardLayoutManager.getKeyboardLayoutsForInputDevice(
+                    vendorSpecificKeyboardDevice.identifier
+                )
+            assertEquals(
+                "Default UI: getKeyboardLayoutsForInputDevice API should return only vendor " +
+                        "specific layout",
+                1,
+                vendorSpecificKeyboardLayouts.size
+            )
+            assertEquals(
+                "Default UI: getKeyboardLayoutsForInputDevice API should return vendor specific " +
+                        "layout",
+                VENDOR_SPECIFIC_LAYOUT_DESCRIPTOR,
+                vendorSpecificKeyboardLayouts[0].descriptor
+            )
+        }
+    }
+
+    @Test
+    fun testNewUi_getKeyboardLayoutsForInputDevice() {
+        NewSettingsApiFlag(true).use {
+            val keyboardLayouts = keyboardLayoutManager.keyboardLayouts
+            assertNotEquals(
+                    "New UI: getKeyboardLayoutsForInputDevice API should not return empty array",
+                    0,
+                    keyboardLayouts.size
+            )
+            assertTrue(
+                    "New UI: getKeyboardLayoutsForInputDevice API should provide English(US) " +
+                            "layout",
+                    hasLayout(keyboardLayouts, ENGLISH_US_LAYOUT_DESCRIPTOR)
+            )
+        }
+    }
+
+    @Test
+    fun testDefaultUi_getSetCurrentKeyboardLayoutForInputDevice() {
+        NewSettingsApiFlag(false).use {
+            assertNull(
+                "Default UI: getCurrentKeyboardLayoutForInputDevice API should return null if " +
+                        "nothing was set",
+                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier
+                )
+            )
+
+            keyboardLayoutManager.setCurrentKeyboardLayoutForInputDevice(
+                keyboardDevice.identifier,
+                ENGLISH_US_LAYOUT_DESCRIPTOR
+            )
+            val keyboardLayout =
+                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier
+                )
+            assertEquals(
+                "Default UI: getCurrentKeyboardLayoutForInputDevice API should return the set " +
+                        "layout",
+                ENGLISH_US_LAYOUT_DESCRIPTOR,
+                keyboardLayout
+            )
+        }
+    }
+
+    @Test
+    fun testNewUi_getSetCurrentKeyboardLayoutForInputDevice() {
+        NewSettingsApiFlag(true).use {
+            keyboardLayoutManager.setCurrentKeyboardLayoutForInputDevice(
+                keyboardDevice.identifier,
+                ENGLISH_US_LAYOUT_DESCRIPTOR
+            )
+            assertNull(
+                "New UI: getCurrentKeyboardLayoutForInputDevice API should always return null " +
+                        "even after setCurrentKeyboardLayoutForInputDevice",
+                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier
+                )
+            )
+        }
+    }
+
+    @Test
+    fun testDefaultUi_getEnabledKeyboardLayoutsForInputDevice() {
+        NewSettingsApiFlag(false).use {
+            keyboardLayoutManager.addKeyboardLayoutForInputDevice(
+                keyboardDevice.identifier, ENGLISH_US_LAYOUT_DESCRIPTOR
+            )
+
+            val keyboardLayouts =
+                keyboardLayoutManager.getEnabledKeyboardLayoutsForInputDevice(
+                    keyboardDevice.identifier
+                )
+            assertEquals(
+                "Default UI: getEnabledKeyboardLayoutsForInputDevice API should return added " +
+                        "layout",
+                1,
+                keyboardLayouts.size
+            )
+            assertEquals(
+                "Default UI: getEnabledKeyboardLayoutsForInputDevice API should return " +
+                        "English(US) layout",
+                ENGLISH_US_LAYOUT_DESCRIPTOR,
+                keyboardLayouts[0]
+            )
+            assertEquals(
+                "Default UI: getCurrentKeyboardLayoutForInputDevice API should return " +
+                        "English(US) layout (Auto select the first enabled layout)",
+                ENGLISH_US_LAYOUT_DESCRIPTOR,
+                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier
+                )
+            )
+
+            keyboardLayoutManager.removeKeyboardLayoutForInputDevice(
+                keyboardDevice.identifier, ENGLISH_US_LAYOUT_DESCRIPTOR
+            )
+            assertEquals(
+                "Default UI: getKeyboardLayoutsForInputDevice API should return 0 layouts",
+                0,
+                keyboardLayoutManager.getEnabledKeyboardLayoutsForInputDevice(
+                    keyboardDevice.identifier
+                ).size
+            )
+            assertNull(
+                "Default UI: getCurrentKeyboardLayoutForInputDevice API should return null after " +
+                        "the enabled layout is removed",
+                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier
+                )
+            )
+        }
+    }
+
+    @Test
+    fun testNewUi_getEnabledKeyboardLayoutsForInputDevice() {
+        NewSettingsApiFlag(true).use {
+            keyboardLayoutManager.addKeyboardLayoutForInputDevice(
+                keyboardDevice.identifier, ENGLISH_US_LAYOUT_DESCRIPTOR
+            )
+
+            assertEquals(
+                "New UI: getEnabledKeyboardLayoutsForInputDevice API should return always return " +
+                        "an empty array",
+                0,
+                keyboardLayoutManager.getEnabledKeyboardLayoutsForInputDevice(
+                    keyboardDevice.identifier
+                ).size
+            )
+            assertNull(
+                "New UI: getCurrentKeyboardLayoutForInputDevice API should always return null",
+                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier
+                )
+            )
+        }
+    }
+
+    @Test
+    fun testDefaultUi_switchKeyboardLayout() {
+        NewSettingsApiFlag(false).use {
+            keyboardLayoutManager.addKeyboardLayoutForInputDevice(
+                keyboardDevice.identifier, ENGLISH_US_LAYOUT_DESCRIPTOR
+            )
+            keyboardLayoutManager.addKeyboardLayoutForInputDevice(
+                keyboardDevice.identifier, ENGLISH_UK_LAYOUT_DESCRIPTOR
+            )
+            assertEquals(
+                "Default UI: getCurrentKeyboardLayoutForInputDevice API should return " +
+                        "English(US) layout",
+                ENGLISH_US_LAYOUT_DESCRIPTOR,
+                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier
+                )
+            )
+
+            keyboardLayoutManager.switchKeyboardLayout(DEVICE_ID, 1)
+
+            // Throws null pointer because trying to show toast using TestLooper
+            assertThrows(NullPointerException::class.java) { testLooper.dispatchAll() }
+            assertEquals("Default UI: getCurrentKeyboardLayoutForInputDevice API should return " +
+                    "English(UK) layout",
+                ENGLISH_UK_LAYOUT_DESCRIPTOR,
+                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier
+                )
+            )
+        }
+    }
+
+    @Test
+    fun testNewUi_switchKeyboardLayout() {
+        NewSettingsApiFlag(true).use {
+            keyboardLayoutManager.addKeyboardLayoutForInputDevice(
+                keyboardDevice.identifier, ENGLISH_US_LAYOUT_DESCRIPTOR
+            )
+            keyboardLayoutManager.addKeyboardLayoutForInputDevice(
+                keyboardDevice.identifier, ENGLISH_UK_LAYOUT_DESCRIPTOR
+            )
+
+            keyboardLayoutManager.switchKeyboardLayout(DEVICE_ID, 1)
+            testLooper.dispatchAll()
+
+            assertNull("New UI: getCurrentKeyboardLayoutForInputDevice API should always return " +
+                    "null",
+                keyboardLayoutManager.getCurrentKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier
+                )
+            )
+        }
+    }
+
+    @Test
+    fun testDefaultUi_getKeyboardLayout() {
+        NewSettingsApiFlag(false).use {
+            val keyboardLayout =
+                keyboardLayoutManager.getKeyboardLayout(ENGLISH_US_LAYOUT_DESCRIPTOR)
+            assertEquals("Default UI: getKeyboardLayout API should return correct Layout from " +
+                    "available layouts",
+                ENGLISH_US_LAYOUT_DESCRIPTOR,
+                keyboardLayout!!.descriptor
+            )
+        }
+    }
+
+    @Test
+    fun testNewUi_getKeyboardLayout() {
+        NewSettingsApiFlag(true).use {
+            val keyboardLayout =
+                keyboardLayoutManager.getKeyboardLayout(ENGLISH_US_LAYOUT_DESCRIPTOR)
+            assertEquals("New UI: getKeyboardLayout API should return correct Layout from " +
+                    "available layouts",
+                ENGLISH_US_LAYOUT_DESCRIPTOR,
+                keyboardLayout!!.descriptor
+            )
+        }
+    }
+
+    @Test
+    fun testDefaultUi_getSetKeyboardLayoutForInputDevice_WithImeInfo() {
+        NewSettingsApiFlag(false).use {
+            val imeSubtype = createImeSubtype()
+            keyboardLayoutManager.setKeyboardLayoutForInputDevice(
+                keyboardDevice.identifier, USER_ID, imeInfo, imeSubtype,
+                ENGLISH_UK_LAYOUT_DESCRIPTOR
+            )
+            val keyboardLayout =
+                keyboardLayoutManager.getKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier, USER_ID, imeInfo, imeSubtype
+                )
+            assertNull(
+                "Default UI: getKeyboardLayoutForInputDevice API should always return null",
+                keyboardLayout
+            )
+        }
+    }
+
+    @Test
+    fun testNewUi_getSetKeyboardLayoutForInputDevice_withImeInfo() {
+        NewSettingsApiFlag(true).use {
+            val imeSubtype = createImeSubtype()
+
+            keyboardLayoutManager.setKeyboardLayoutForInputDevice(
+                keyboardDevice.identifier, USER_ID, imeInfo, imeSubtype,
+                ENGLISH_UK_LAYOUT_DESCRIPTOR
+            )
+            assertEquals(
+                "New UI: getKeyboardLayoutForInputDevice API should return the set layout",
+                ENGLISH_UK_LAYOUT_DESCRIPTOR,
+                keyboardLayoutManager.getKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier, USER_ID, imeInfo, imeSubtype
+                )
+            )
+
+            // This should replace previously set layout
+            keyboardLayoutManager.setKeyboardLayoutForInputDevice(
+                keyboardDevice.identifier, USER_ID, imeInfo, imeSubtype,
+                ENGLISH_US_LAYOUT_DESCRIPTOR
+            )
+            assertEquals(
+                "New UI: getKeyboardLayoutForInputDevice API should return the last set layout",
+                ENGLISH_US_LAYOUT_DESCRIPTOR,
+                keyboardLayoutManager.getKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier, USER_ID, imeInfo, imeSubtype
+                )
+            )
+        }
+    }
+
+    @Test
+    fun testDefaultUi_getKeyboardLayoutListForInputDevice() {
+        NewSettingsApiFlag(false).use {
+            val keyboardLayouts =
+                keyboardLayoutManager.getKeyboardLayoutListForInputDevice(
+                    keyboardDevice.identifier, USER_ID, imeInfo,
+                    createImeSubtype()
+                )
+            assertEquals("Default UI: getKeyboardLayoutListForInputDevice API should always " +
+                    "return empty array",
+                0,
+                keyboardLayouts.size
+            )
+        }
+    }
+
+    @Test
+    fun testNewUi_getKeyboardLayoutListForInputDevice() {
+        NewSettingsApiFlag(true).use {
+            // Check Layouts for "hi-Latn". It should return all 'Latn' keyboard layouts
+            var keyboardLayouts =
+                keyboardLayoutManager.getKeyboardLayoutListForInputDevice(
+                    keyboardDevice.identifier, USER_ID, imeInfo,
+                    createImeSubtypeForLanguageTag("hi-Latn")
+                )
+            assertNotEquals(
+                "New UI: getKeyboardLayoutListForInputDevice API should return the list of " +
+                        "supported layouts with matching script code",
+                0,
+                keyboardLayouts.size
+            )
+            assertTrue("New UI: getKeyboardLayoutListForInputDevice API should return a list " +
+                    "containing English(US) layout for hi-Latn",
+                containsLayout(keyboardLayouts, ENGLISH_US_LAYOUT_DESCRIPTOR)
+            )
+            assertTrue("New UI: getKeyboardLayoutListForInputDevice API should return a list " +
+                    "containing English(No script code) layout for hi-Latn",
+                containsLayout(
+                    keyboardLayouts,
+                    createLayoutDescriptor("keyboard_layout_english_without_script_code")
+                )
+            )
+
+            // Check Layouts for "hi" which by default uses 'Deva' script.
+            keyboardLayouts =
+                keyboardLayoutManager.getKeyboardLayoutListForInputDevice(
+                    keyboardDevice.identifier, USER_ID, imeInfo,
+                    createImeSubtypeForLanguageTag("hi")
+                )
+            assertEquals("New UI: getKeyboardLayoutListForInputDevice API should return empty " +
+                    "list if no supported layouts available",
+                0,
+                keyboardLayouts.size
+            )
+
+            // If user manually selected some layout, always provide it in the layout list
+            val imeSubtype = createImeSubtypeForLanguageTag("hi")
+            keyboardLayoutManager.setKeyboardLayoutForInputDevice(
+                keyboardDevice.identifier, USER_ID, imeInfo, imeSubtype,
+                ENGLISH_US_LAYOUT_DESCRIPTOR
+            )
+            keyboardLayouts =
+                keyboardLayoutManager.getKeyboardLayoutListForInputDevice(
+                    keyboardDevice.identifier, USER_ID, imeInfo,
+                    imeSubtype
+                )
+            assertEquals("New UI: getKeyboardLayoutListForInputDevice API should return user " +
+                    "selected layout even if the script is incompatible with IME",
+                    1,
+                keyboardLayouts.size
+            )
+
+            // Special case Japanese: UScript ignores provided script code for certain language tags
+            // Should manually match provided script codes and then rely on Uscript to derive
+            // script from language tags and match those.
+            keyboardLayouts =
+                keyboardLayoutManager.getKeyboardLayoutListForInputDevice(
+                        keyboardDevice.identifier, USER_ID, imeInfo,
+                        createImeSubtypeForLanguageTag("ja-Latn-JP")
+                )
+            assertNotEquals(
+                "New UI: getKeyboardLayoutListForInputDevice API should return the list of " +
+                        "supported layouts with matching script code for ja-Latn-JP",
+                0,
+                keyboardLayouts.size
+            )
+            assertTrue("New UI: getKeyboardLayoutListForInputDevice API should return a list " +
+                    "containing English(US) layout for ja-Latn-JP",
+                containsLayout(keyboardLayouts, ENGLISH_US_LAYOUT_DESCRIPTOR)
+            )
+            assertTrue("New UI: getKeyboardLayoutListForInputDevice API should return a list " +
+                    "containing English(No script code) layout for ja-Latn-JP",
+                containsLayout(
+                    keyboardLayouts,
+                    createLayoutDescriptor("keyboard_layout_english_without_script_code")
+                )
+            )
+
+            // If script code not explicitly provided for Japanese should rely on Uscript to find
+            // derived script code and hence no suitable layout will be found.
+            keyboardLayouts =
+                keyboardLayoutManager.getKeyboardLayoutListForInputDevice(
+                        keyboardDevice.identifier, USER_ID, imeInfo,
+                        createImeSubtypeForLanguageTag("ja-JP")
+                )
+            assertEquals(
+                "New UI: getKeyboardLayoutListForInputDevice API should return empty list of " +
+                        "supported layouts with matching script code for ja-JP",
+                0,
+                keyboardLayouts.size
+            )
+
+            // If IME doesn't have a corresponding language tag, then should show all available
+            // layouts no matter the script code.
+            keyboardLayouts =
+                keyboardLayoutManager.getKeyboardLayoutListForInputDevice(
+                    keyboardDevice.identifier, USER_ID, imeInfo, null
+                )
+            assertNotEquals(
+                "New UI: getKeyboardLayoutListForInputDevice API should return all layouts if" +
+                    "language tag or subtype not provided",
+                0,
+                keyboardLayouts.size
+            )
+            assertTrue("New UI: getKeyboardLayoutListForInputDevice API should contain Latin " +
+                "layouts if language tag or subtype not provided",
+                containsLayout(keyboardLayouts, ENGLISH_US_LAYOUT_DESCRIPTOR)
+            )
+            assertTrue("New UI: getKeyboardLayoutListForInputDevice API should contain Cyrillic " +
+                "layouts if language tag or subtype not provided",
+                containsLayout(
+                    keyboardLayouts,
+                    createLayoutDescriptor("keyboard_layout_russian")
+                )
+            )
+        }
+    }
+
+    @Test
+    fun testNewUi_getDefaultKeyboardLayoutForInputDevice_withImeLanguageTag() {
+        NewSettingsApiFlag(true).use {
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTag("en-US"),
+                ENGLISH_US_LAYOUT_DESCRIPTOR
+            )
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTag("en-GB"),
+                ENGLISH_UK_LAYOUT_DESCRIPTOR
+            )
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTag("de"),
+                createLayoutDescriptor("keyboard_layout_german")
+            )
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTag("fr-FR"),
+                createLayoutDescriptor("keyboard_layout_french")
+            )
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTag("ru"),
+                createLayoutDescriptor("keyboard_layout_russian")
+            )
+            assertNull(
+                "New UI: getDefaultKeyboardLayoutForInputDevice should return null when no " +
+                        "layout available",
+                keyboardLayoutManager.getKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier, USER_ID, imeInfo,
+                    createImeSubtypeForLanguageTag("it")
+                )
+            )
+            assertNull(
+                "New UI: getDefaultKeyboardLayoutForInputDevice should return null when no " +
+                        "layout for script code is available",
+                keyboardLayoutManager.getKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier, USER_ID, imeInfo,
+                    createImeSubtypeForLanguageTag("en-Deva")
+                )
+            )
+        }
+    }
+
+    @Test
+    fun testNewUi_getDefaultKeyboardLayoutForInputDevice_withImeLanguageTagAndLayoutType() {
+        NewSettingsApiFlag(true).use {
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTagAndLayoutType("en-US", "qwerty"),
+                ENGLISH_US_LAYOUT_DESCRIPTOR
+            )
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTagAndLayoutType("en-US", "dvorak"),
+                createLayoutDescriptor("keyboard_layout_english_us_dvorak")
+            )
+            // Try to match layout type even if country doesn't match
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTagAndLayoutType("en-GB", "dvorak"),
+                createLayoutDescriptor("keyboard_layout_english_us_dvorak")
+            )
+            // Choose layout based on layout type priority, if layout type is not provided by IME
+            // (Qwerty > Dvorak > Extended)
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTagAndLayoutType("en-US", ""),
+                ENGLISH_US_LAYOUT_DESCRIPTOR
+            )
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTagAndLayoutType("en-GB", "qwerty"),
+                ENGLISH_UK_LAYOUT_DESCRIPTOR
+            )
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTagAndLayoutType("de", "qwertz"),
+                createLayoutDescriptor("keyboard_layout_german")
+            )
+            // Wrong layout type should match with language if provided layout type not available
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTagAndLayoutType("de", "qwerty"),
+                createLayoutDescriptor("keyboard_layout_german")
+            )
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTagAndLayoutType("fr-FR", "azerty"),
+                createLayoutDescriptor("keyboard_layout_french")
+            )
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTagAndLayoutType("ru", "qwerty"),
+                createLayoutDescriptor("keyboard_layout_russian_qwerty")
+            )
+            // If layout type is empty then prioritize KCM with empty layout type
+            assertCorrectLayout(
+                keyboardDevice,
+                createImeSubtypeForLanguageTagAndLayoutType("ru", ""),
+                createLayoutDescriptor("keyboard_layout_russian")
+            )
+            assertNull("New UI: getDefaultKeyboardLayoutForInputDevice should return null when " +
+                    "no layout for script code is available",
+                keyboardLayoutManager.getKeyboardLayoutForInputDevice(
+                    keyboardDevice.identifier, USER_ID, imeInfo,
+                    createImeSubtypeForLanguageTagAndLayoutType("en-Deva-US", "")
+                )
+            )
+        }
+    }
+
+    @Test
+    fun testNewUi_getDefaultKeyboardLayoutForInputDevice_withHwLanguageTagAndLayoutType() {
+        NewSettingsApiFlag(true).use {
+            val frenchSubtype = createImeSubtypeForLanguageTagAndLayoutType("fr", "azerty")
+            // Should return English dvorak even if IME current layout is French, since HW says the
+            // keyboard is a Dvorak keyboard
+            assertCorrectLayout(
+                englishDvorakKeyboardDevice,
+                frenchSubtype,
+                createLayoutDescriptor("keyboard_layout_english_us_dvorak")
+            )
+
+            // Back to back changing HW keyboards with same product and vendor ID but different
+            // language and layout type should configure the layouts correctly.
+            assertCorrectLayout(
+                englishQwertyKeyboardDevice,
+                frenchSubtype,
+                createLayoutDescriptor("keyboard_layout_english_us")
+            )
+
+            // Fallback to IME information if the HW provided layout script is incompatible with the
+            // provided IME subtype
+            assertCorrectLayout(
+                englishDvorakKeyboardDevice,
+                createImeSubtypeForLanguageTagAndLayoutType("ru", ""),
+                createLayoutDescriptor("keyboard_layout_russian")
+            )
+        }
+    }
+
+    private fun assertCorrectLayout(
+        device: InputDevice,
+        imeSubtype: InputMethodSubtype,
+        expectedLayout: String
+    ) {
+        assertEquals(
+            "New UI: getDefaultKeyboardLayoutForInputDevice should return $expectedLayout",
+            expectedLayout,
+            keyboardLayoutManager.getKeyboardLayoutForInputDevice(
+                device.identifier, USER_ID, imeInfo, imeSubtype
+            )
+        )
+    }
+
+    private fun createImeSubtype(): InputMethodSubtype =
+        InputMethodSubtype.InputMethodSubtypeBuilder().setSubtypeId(nextImeSubtypeId++).build()
+
+    private fun createImeSubtypeForLanguageTag(languageTag: String): InputMethodSubtype =
+        InputMethodSubtype.InputMethodSubtypeBuilder().setSubtypeId(nextImeSubtypeId++)
+            .setLanguageTag(languageTag).build()
+
+    private fun createImeSubtypeForLanguageTagAndLayoutType(
+        languageTag: String,
+        layoutType: String
+    ): InputMethodSubtype =
+        InputMethodSubtype.InputMethodSubtypeBuilder().setSubtypeId(nextImeSubtypeId++)
+            .setPhysicalKeyboardHint(ULocale.forLanguageTag(languageTag), layoutType).build()
+
+    private fun hasLayout(layoutList: Array<KeyboardLayout>, layoutDesc: String): Boolean {
+        for (kl in layoutList) {
+            if (kl.descriptor == layoutDesc) {
+                return true
+            }
+        }
+        return false
+    }
+
+    private fun createLayoutDescriptor(keyboardName: String): String =
+        "$PACKAGE_NAME/$RECEIVER_NAME/$keyboardName"
+
+    private fun containsLayout(layoutList: Array<KeyboardLayout>, layoutDesc: String): Boolean {
+        for (kl in layoutList) {
+            if (kl.descriptor.equals(layoutDesc)) {
+                return true
+            }
+        }
+        return false
+    }
+
+    private fun createMockReceiver(): ResolveInfo {
+        val info = ResolveInfo()
+        info.activityInfo = ActivityInfo()
+        info.activityInfo.packageName = PACKAGE_NAME
+        info.activityInfo.name = RECEIVER_NAME
+        info.activityInfo.applicationInfo = ApplicationInfo()
+        info.activityInfo.metaData = Bundle()
+        info.activityInfo.metaData.putInt(
+            InputManager.META_DATA_KEYBOARD_LAYOUTS,
+            R.xml.keyboard_layouts
+        )
+        info.serviceInfo = ServiceInfo()
+        info.serviceInfo.packageName = PACKAGE_NAME
+        info.serviceInfo.name = RECEIVER_NAME
+        return info
+    }
+
+    private inner class NewSettingsApiFlag constructor(enabled: Boolean) : AutoCloseable {
+        init {
+            Settings.Global.putString(
+                context.contentResolver,
+                "settings_new_keyboard_ui", enabled.toString()
+            )
+        }
+
+        override fun close() {
+            Settings.Global.putString(
+                context.contentResolver,
+                "settings_new_keyboard_ui",
+                ""
+            )
+        }
+    }
+}
diff --git a/tests/Input/src/com/android/server/input/KeyboardMetricsCollectorTests.kt b/tests/Input/src/com/android/server/input/KeyboardMetricsCollectorTests.kt
new file mode 100644
index 0000000..b39c932
--- /dev/null
+++ b/tests/Input/src/com/android/server/input/KeyboardMetricsCollectorTests.kt
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.input
+
+import android.hardware.input.KeyboardLayout
+import android.icu.util.ULocale
+import android.platform.test.annotations.Presubmit
+import android.view.InputDevice
+import android.view.inputmethod.InputMethodSubtype
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertThrows
+import org.junit.Assert.assertTrue
+import org.junit.Test
+
+private fun createKeyboard(
+    deviceId: Int,
+    vendorId: Int,
+    productId: Int,
+    languageTag: String?,
+    layoutType: String?
+): InputDevice =
+    InputDevice.Builder()
+        .setId(deviceId)
+        .setName("Device $deviceId")
+        .setDescriptor("descriptor $deviceId")
+        .setSources(InputDevice.SOURCE_KEYBOARD)
+        .setKeyboardType(InputDevice.KEYBOARD_TYPE_ALPHABETIC)
+        .setExternal(true)
+        .setVendorId(vendorId)
+        .setProductId(productId)
+        .setKeyboardLanguageTag(languageTag)
+        .setKeyboardLayoutType(layoutType)
+        .build()
+
+private fun createImeSubtype(
+    imeSubtypeId: Int,
+    languageTag: ULocale?,
+    layoutType: String
+): InputMethodSubtype =
+    InputMethodSubtype.InputMethodSubtypeBuilder().setSubtypeId(imeSubtypeId)
+        .setPhysicalKeyboardHint(languageTag, layoutType).build()
+
+/**
+ * Tests for {@link KeyboardMetricsCollector}.
+ *
+ * Build/Install/Run:
+ * atest InputTests:KeyboardMetricsCollectorTests
+ */
+@Presubmit
+class KeyboardMetricsCollectorTests {
+
+    companion object {
+        const val DEVICE_ID = 1
+        const val DEFAULT_VENDOR_ID = 123
+        const val DEFAULT_PRODUCT_ID = 456
+    }
+
+    @Test
+    fun testCreateKeyboardConfigurationEvent_throwsExceptionWithoutAnyLayoutConfiguration() {
+        assertThrows(IllegalStateException::class.java) {
+            KeyboardMetricsCollector.KeyboardConfigurationEvent.Builder(
+                createKeyboard(
+                    DEVICE_ID,
+                    DEFAULT_VENDOR_ID,
+                    DEFAULT_PRODUCT_ID,
+                    null,
+                    null
+                )
+            ).build()
+        }
+    }
+
+    @Test
+    fun testCreateKeyboardConfigurationEvent_throwsExceptionWithInvalidLayoutSelectionCriteria() {
+        assertThrows(IllegalStateException::class.java) {
+            KeyboardMetricsCollector.KeyboardConfigurationEvent.Builder(
+                createKeyboard(
+                    DEVICE_ID,
+                    DEFAULT_VENDOR_ID,
+                    DEFAULT_PRODUCT_ID,
+                    null,
+                    null
+                )
+            ).addLayoutSelection(createImeSubtype(1, ULocale.forLanguageTag("en-US"), "qwerty"),
+             null, 123).build()
+        }
+    }
+
+    @Test
+    fun testCreateKeyboardConfigurationEvent_withMultipleConfigurations() {
+        val builder = KeyboardMetricsCollector.KeyboardConfigurationEvent.Builder(
+            createKeyboard(
+                DEVICE_ID,
+                DEFAULT_VENDOR_ID,
+                DEFAULT_PRODUCT_ID,
+                "de-CH",
+                "qwertz"
+            )
+        )
+        val event = builder.addLayoutSelection(
+            createImeSubtype(1, ULocale.forLanguageTag("en-US"), "qwerty"),
+            KeyboardLayout(null, "English(US)(Qwerty)", null, 0, null, 0, 0, 0),
+            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_VIRTUAL_KEYBOARD
+        ).addLayoutSelection(
+            createImeSubtype(2, ULocale.forLanguageTag("en-US"), "azerty"),
+            null, // Default layout type
+            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_USER
+        ).addLayoutSelection(
+            createImeSubtype(3, ULocale.forLanguageTag("en-US"), "qwerty"),
+            KeyboardLayout(null, "German", null, 0, null, 0, 0, 0),
+            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_DEVICE
+        ).setIsFirstTimeConfiguration(true).build()
+
+        assertEquals(
+            "KeyboardConfigurationEvent should pick vendor ID from provided InputDevice",
+            DEFAULT_VENDOR_ID,
+            event.vendorId
+        )
+        assertEquals(
+            "KeyboardConfigurationEvent should pick product ID from provided InputDevice",
+            DEFAULT_PRODUCT_ID,
+            event.productId
+        )
+        assertTrue(event.isFirstConfiguration)
+
+        assertEquals(
+            "KeyboardConfigurationEvent should contain 3 configurations provided",
+            3,
+            event.layoutConfigurations.size
+        )
+        assertExpectedLayoutConfiguration(
+            event.layoutConfigurations[0],
+            "de-CH",
+            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("qwertz"),
+            "English(US)(Qwerty)",
+            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_VIRTUAL_KEYBOARD,
+            "en-US",
+            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("qwerty"),
+        )
+        assertExpectedLayoutConfiguration(
+            event.layoutConfigurations[1],
+            "de-CH",
+            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("qwertz"),
+            KeyboardMetricsCollector.DEFAULT_LAYOUT_NAME,
+            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_USER,
+            "en-US",
+            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("azerty"),
+        )
+        assertExpectedLayoutConfiguration(
+            event.layoutConfigurations[2],
+            "de-CH",
+            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("qwertz"),
+            "German",
+            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_DEVICE,
+            "en-US",
+            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("qwerty"),
+        )
+    }
+
+    @Test
+    fun testCreateKeyboardConfigurationEvent_withDefaultLanguageTag() {
+        val builder = KeyboardMetricsCollector.KeyboardConfigurationEvent.Builder(
+            createKeyboard(
+                DEVICE_ID,
+                DEFAULT_VENDOR_ID,
+                DEFAULT_PRODUCT_ID,
+                "und", // Undefined language tag
+                "azerty"
+            )
+        )
+        val event = builder.addLayoutSelection(
+            createImeSubtype(4, null, "qwerty"), // Default language tag
+            KeyboardLayout(null, "German", null, 0, null, 0, 0, 0),
+            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_DEVICE
+        ).build()
+
+        assertExpectedLayoutConfiguration(
+            event.layoutConfigurations[0],
+            KeyboardMetricsCollector.DEFAULT_LANGUAGE_TAG,
+            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("azerty"),
+            "German",
+            KeyboardMetricsCollector.LAYOUT_SELECTION_CRITERIA_DEVICE,
+            KeyboardMetricsCollector.DEFAULT_LANGUAGE_TAG,
+            KeyboardLayout.LayoutType.getLayoutTypeEnumValue("qwerty"),
+        )
+    }
+
+    private fun assertExpectedLayoutConfiguration(
+        configuration: KeyboardMetricsCollector.LayoutConfiguration,
+        expectedKeyboardLanguageTag: String,
+        expectedKeyboardLayoutType: Int,
+        expectedSelectedLayout: String,
+        expectedLayoutSelectionCriteria: Int,
+        expectedImeLanguageTag: String,
+        expectedImeLayoutType: Int
+    ) {
+        assertEquals(expectedKeyboardLanguageTag, configuration.keyboardLanguageTag)
+        assertEquals(expectedKeyboardLayoutType, configuration.keyboardLayoutType)
+        assertEquals(expectedSelectedLayout, configuration.keyboardLayoutName)
+        assertEquals(expectedLayoutSelectionCriteria, configuration.layoutSelectionCriteria)
+        assertEquals(expectedImeLanguageTag, configuration.imeLanguageTag)
+        assertEquals(expectedImeLayoutType, configuration.imeLayoutType)
+    }
+}
diff --git a/tests/Input/src/com/android/test/input/AnrTest.kt b/tests/Input/src/com/android/test/input/AnrTest.kt
index d185ee6..5719273 100644
--- a/tests/Input/src/com/android/test/input/AnrTest.kt
+++ b/tests/Input/src/com/android/test/input/AnrTest.kt
@@ -100,6 +100,7 @@
 
     private fun clickCloseAppOnAnrDialog() {
         // Find anr dialog and kill app
+        val timestamp = System.currentTimeMillis()
         val uiDevice: UiDevice = UiDevice.getInstance(instrumentation)
         val closeAppButton: UiObject2? =
                 uiDevice.wait(Until.findObject(By.res("android:id/aerr_close")), 20000)
@@ -107,7 +108,6 @@
             fail("Could not find anr dialog")
             return
         }
-        val initialReasons = getExitReasons()
         closeAppButton.click()
         /**
          * We must wait for the app to be fully closed before exiting this test. This is because
@@ -116,7 +116,7 @@
          * the killing logic will apply to the newly launched 'am start' instance, and the second
          * test will fail because the unresponsive activity will never be launched.
          */
-        waitForNewExitReason(initialReasons[0].timestamp)
+        waitForNewExitReasonAfter(timestamp)
     }
 
     private fun clickWaitOnAnrDialog() {
@@ -140,20 +140,20 @@
         return infos
     }
 
-    private fun waitForNewExitReason(previousExitTimestamp: Long) {
+    private fun waitForNewExitReasonAfter(timestamp: Long) {
         PollingCheck.waitFor {
-            getExitReasons()[0].timestamp > previousExitTimestamp
+            val reasons = getExitReasons()
+            !reasons.isEmpty() && reasons[0].timestamp >= timestamp
         }
         val reasons = getExitReasons()
-        assertTrue(reasons[0].timestamp > previousExitTimestamp)
+        assertTrue(reasons[0].timestamp > timestamp)
         assertEquals(ApplicationExitInfo.REASON_ANR, reasons[0].reason)
     }
 
     private fun triggerAnr() {
         startUnresponsiveActivity()
         val uiDevice: UiDevice = UiDevice.getInstance(instrumentation)
-        val obj: UiObject2? = uiDevice.wait(Until.findObject(
-                By.text("Unresponsive gesture monitor")), 10000)
+        val obj: UiObject2? = uiDevice.wait(Until.findObject(By.pkg(PACKAGE_NAME)), 10000)
 
         if (obj == null) {
             fail("Could not find unresponsive activity")
diff --git a/tests/Input/src/com/android/test/input/InputEventSenderAndReceiverTest.kt b/tests/Input/src/com/android/test/input/InputEventSenderAndReceiverTest.kt
index 37b67f4..075cf0c 100644
--- a/tests/Input/src/com/android/test/input/InputEventSenderAndReceiverTest.kt
+++ b/tests/Input/src/com/android/test/input/InputEventSenderAndReceiverTest.kt
@@ -113,13 +113,11 @@
         val sent = SpyInputEventSender.Timeline(
             inputEventId = 1, gpuCompletedTime = 3, presentTime = 2)
         mReceiver.reportTimeline(sent.inputEventId, sent.gpuCompletedTime, sent.presentTime)
-        val received = mSender.getTimeline()
-        assertEquals(null, received)
+        mSender.assertNoEvents()
         // Sender will no longer receive callbacks for this fd, even if receiver sends a valid
         // timeline later
         mReceiver.reportTimeline(2 /*inputEventId*/, 3 /*gpuCompletedTime*/, 4 /*presentTime*/)
-        val receivedSecondTimeline = mSender.getTimeline()
-        assertEquals(null, receivedSecondTimeline)
+        mSender.assertNoEvents()
     }
 
     /**
diff --git a/tests/Input/src/com/android/test/input/PointerEventDispatcherTest.kt b/tests/Input/src/com/android/test/input/PointerEventDispatcherTest.kt
index 1099878..f311bc2 100644
--- a/tests/Input/src/com/android/test/input/PointerEventDispatcherTest.kt
+++ b/tests/Input/src/com/android/test/input/PointerEventDispatcherTest.kt
@@ -25,7 +25,6 @@
 import com.android.server.UiThread
 import com.android.server.wm.PointerEventDispatcher
 import org.junit.Assert.assertEquals
-import org.junit.Assert.assertNull
 import org.junit.After
 import org.junit.Before
 import org.junit.Test
@@ -86,8 +85,7 @@
         // Since the listener raises an exception during the event handling, the event should be
         // marked as 'not handled'.
         assertEquals(SpyInputEventSender.FinishedSignal(seq, handled = false), finishedSignal)
-        // Ensure that there aren't double finish calls. This would crash if there's a call
-        // to finish twice.
-        assertNull(mSender.getFinishedSignal())
+        // Ensure that there aren't double finish calls.
+        mSender.assertNoEvents()
     }
 }
diff --git a/tests/Input/src/com/android/test/input/SpyInputEventSenderAndReceiver.kt b/tests/Input/src/com/android/test/input/SpyInputEventSenderAndReceiver.kt
index 2d9af9a..5cbfce5 100644
--- a/tests/Input/src/com/android/test/input/SpyInputEventSenderAndReceiver.kt
+++ b/tests/Input/src/com/android/test/input/SpyInputEventSenderAndReceiver.kt
@@ -27,10 +27,17 @@
 import java.util.concurrent.LinkedBlockingQueue
 import java.util.concurrent.TimeUnit
 
+import org.junit.Assert.assertNull
+
 private fun <T> getEvent(queue: LinkedBlockingQueue<T>): T? {
     return queue.poll(DEFAULT_DISPATCHING_TIMEOUT_MILLIS.toLong(), TimeUnit.MILLISECONDS)
 }
 
+private fun <T> assertNoEvents(queue: LinkedBlockingQueue<T>) {
+    // Poll the queue with a shorter timeout, to make the check faster.
+    assertNull(queue.poll(100L, TimeUnit.MILLISECONDS))
+}
+
 class SpyInputEventReceiver(channel: InputChannel, looper: Looper) :
         InputEventReceiver(channel, looper) {
     private val mInputEvents = LinkedBlockingQueue<InputEvent>()
@@ -72,4 +79,9 @@
     fun getTimeline(): Timeline? {
         return getEvent(mTimelines)
     }
+
+    fun assertNoEvents() {
+        assertNoEvents(mFinishedSignals)
+        assertNoEvents(mTimelines)
+    }
 }
diff --git a/tests/InputMethodStressTest/TEST_MAPPING b/tests/InputMethodStressTest/TEST_MAPPING
index 06e2ce8..d982dd8 100644
--- a/tests/InputMethodStressTest/TEST_MAPPING
+++ b/tests/InputMethodStressTest/TEST_MAPPING
@@ -1,5 +1,5 @@
 {
-  "presubmit-large": [
+  "postsubmit": [
     {
       "name": "InputMethodStressTest"
     }
diff --git a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/NotificationTest.java b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/NotificationTest.java
index f4a04a1..b6b9924 100644
--- a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/NotificationTest.java
+++ b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/NotificationTest.java
@@ -97,6 +97,8 @@
         assumeFalse(pm.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE));
         // Do not run on TV. Direct Reply isn't supported on TV.
         assumeFalse(pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK_ONLY));
+        // Do not run on Wear. Direct Reply isn't supported on Wear.
+        assumeFalse(pm.hasSystemFeature(PackageManager.FEATURE_WATCH));
     }
 
     @After
diff --git a/tests/Internal/src/com/android/internal/os/TimeoutRecordTest.java b/tests/Internal/src/com/android/internal/os/TimeoutRecordTest.java
index 7419ee1..00085f8 100644
--- a/tests/Internal/src/com/android/internal/os/TimeoutRecordTest.java
+++ b/tests/Internal/src/com/android/internal/os/TimeoutRecordTest.java
@@ -104,11 +104,11 @@
 
     @Test
     public void forServiceExec_returnsCorrectTimeoutRecord() {
-        TimeoutRecord record = TimeoutRecord.forServiceExec("Test ANR reason");
+        TimeoutRecord record = TimeoutRecord.forServiceExec("com.app.MyService", 1000L);
 
         assertNotNull(record);
         assertEquals(record.mKind, TimeoutRecord.TimeoutKind.SERVICE_EXEC);
-        assertEquals(record.mReason, "Test ANR reason");
+        assertEquals(record.mReason, "executing service com.app.MyService, waited 1000ms");
         assertTrue(record.mEndTakenBeforeLocks);
     }
 
diff --git a/tests/SilkFX/src/com/android/test/silkfx/hdr/GainmapImage.kt b/tests/SilkFX/src/com/android/test/silkfx/hdr/GainmapImage.kt
index 7cf69b7..31ea832 100644
--- a/tests/SilkFX/src/com/android/test/silkfx/hdr/GainmapImage.kt
+++ b/tests/SilkFX/src/com/android/test/silkfx/hdr/GainmapImage.kt
@@ -16,6 +16,10 @@
 
 package com.android.test.silkfx.hdr
 
+import android.animation.AnimatorSet
+import android.animation.ObjectAnimator
+import android.animation.ValueAnimator
+import android.animation.ValueAnimator.AnimatorUpdateListener
 import android.content.Context
 import android.graphics.Bitmap
 import android.graphics.Canvas
@@ -65,15 +69,9 @@
         findViewById<RadioGroup>(R.id.output_mode)!!.also {
             it.check(outputMode)
             it.setOnCheckedChangeListener { _, checkedId ->
-                val previousMode = outputMode
                 outputMode = checkedId
-                if (previousMode == R.id.output_sdr && checkedId == R.id.output_hdr) {
-                    animateToHdr()
-                } else if (previousMode == R.id.output_hdr && checkedId == R.id.output_sdr) {
-                    animateToSdr()
-                } else {
-                    updateDisplay()
-                }
+                // Intentionally don't do anything fancy so that mode A/B comparisons are easy
+                updateDisplay()
             }
         }
 
@@ -103,10 +101,41 @@
 
         imageView.apply {
             isClickable = true
+            // Example of animating between SDR and HDR using gainmap params; animates HDR->SDR->HDR
+            // with a brief pause on SDR. The key thing here is that the gainmap's
+            // minDisplayRatioForHdrTransition is animated between its original value (for full HDR)
+            // and displayRatioForFullHdr (for full SDR). The view must also be invalidated during
+            // the animation for the updates to take effect.
             setOnClickListener {
-                animate().alpha(.5f).withEndAction {
-                    animate().alpha(1f).start()
-                }.start()
+                if (gainmap != null && (outputMode == R.id.output_hdr ||
+                                        outputMode == R.id.output_hdr_test)) {
+                    val animationLengthMs: Long = 500
+                    val updateListener = object : AnimatorUpdateListener {
+                        override fun onAnimationUpdate(animation: ValueAnimator) {
+                            imageView.invalidate()
+                        }
+                    }
+                    val hdrToSdr = ObjectAnimator.ofFloat(
+                      gainmap, "minDisplayRatioForHdrTransition",
+                      gainmap!!.minDisplayRatioForHdrTransition,
+                      gainmap!!.displayRatioForFullHdr).apply {
+                        duration = animationLengthMs
+                        addUpdateListener(updateListener)
+                    }
+                    val sdrToHdr = ObjectAnimator.ofFloat(
+                      gainmap, "minDisplayRatioForHdrTransition",
+                      gainmap!!.displayRatioForFullHdr,
+                      gainmap!!.minDisplayRatioForHdrTransition).apply {
+                        duration = animationLengthMs
+                        addUpdateListener(updateListener)
+                    }
+
+                    AnimatorSet().apply {
+                        play(hdrToSdr)
+                        play(sdrToHdr).after(animationLengthMs)
+                        start()
+                    }
+                }
             }
         }
     }
@@ -164,20 +193,6 @@
         updateDisplay()
     }
 
-    private fun animateToHdr() {
-        if (bitmap == null || gainmap == null) return
-
-        // TODO: Trigger an animation
-        updateDisplay()
-    }
-
-    private fun animateToSdr() {
-        if (bitmap == null) return
-
-        // TODO: Trigger an animation
-        updateDisplay()
-    }
-
     private fun updateDisplay() {
         if (bitmap == null) return
 
diff --git a/tests/SurfaceViewBufferTests/AndroidManifest.xml b/tests/SurfaceViewBufferTests/AndroidManifest.xml
index c910ecd..78415e8 100644
--- a/tests/SurfaceViewBufferTests/AndroidManifest.xml
+++ b/tests/SurfaceViewBufferTests/AndroidManifest.xml
@@ -43,7 +43,7 @@
                 <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
         </activity>
-        <service android:name="android.view.cts.surfacevalidator.LocalMediaProjectionService"
+        <service android:name="com.android.test.LocalMediaProjectionService"
                  android:foregroundServiceType="mediaProjection"
                  android:enabled="true">
         </service>
diff --git a/tests/SurfaceViewBufferTests/src/com/android/test/InverseDisplayTransformTests.kt b/tests/SurfaceViewBufferTests/src/com/android/test/InverseDisplayTransformTests.kt
index e722ba5..1de965e 100644
--- a/tests/SurfaceViewBufferTests/src/com/android/test/InverseDisplayTransformTests.kt
+++ b/tests/SurfaceViewBufferTests/src/com/android/test/InverseDisplayTransformTests.kt
@@ -76,4 +76,4 @@
         }
         LayersTraceSubject(trace).layer("SurfaceView", 3).hasBufferSize(rotatedBufferSize)
     }
-}
+}
\ No newline at end of file
diff --git a/tests/SurfaceViewBufferTests/src/com/android/test/LocalMediaProjectionService.java b/tests/SurfaceViewBufferTests/src/com/android/test/LocalMediaProjectionService.java
new file mode 100644
index 0000000..7339a6b8
--- /dev/null
+++ b/tests/SurfaceViewBufferTests/src/com/android/test/LocalMediaProjectionService.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.test;
+
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.drawable.Icon;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
+
+public class LocalMediaProjectionService extends Service {
+
+    private Bitmap mTestBitmap;
+
+    private static final String NOTIFICATION_CHANNEL_ID = "Surfacevalidator";
+    private static final String CHANNEL_NAME = "ProjectionService";
+
+    static final int MSG_START_FOREGROUND_DONE = 1;
+    static final String EXTRA_MESSENGER = "messenger";
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        startForeground(intent);
+        return super.onStartCommand(intent, flags, startId);
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+
+    @Override
+    public void onDestroy() {
+        if (mTestBitmap != null) {
+            mTestBitmap.recycle();
+            mTestBitmap = null;
+        }
+        super.onDestroy();
+    }
+
+    private Icon createNotificationIcon() {
+        mTestBitmap = Bitmap.createBitmap(50, 50, Bitmap.Config.ARGB_8888);
+        final Canvas canvas = new Canvas(mTestBitmap);
+        canvas.drawColor(Color.BLUE);
+        return Icon.createWithBitmap(mTestBitmap);
+    }
+
+    private void startForeground(Intent intent) {
+        final NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID,
+                CHANNEL_NAME, NotificationManager.IMPORTANCE_NONE);
+        channel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
+
+        final NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+        notificationManager.createNotificationChannel(channel);
+
+        final Notification.Builder notificationBuilder =
+                new Notification.Builder(this, NOTIFICATION_CHANNEL_ID);
+
+        final Notification notification = notificationBuilder.setOngoing(true)
+                .setContentTitle("App is running")
+                .setSmallIcon(createNotificationIcon())
+                .setCategory(Notification.CATEGORY_SERVICE)
+                .setContentText("Context")
+                .build();
+
+        startForeground(2, notification);
+
+        final Messenger messenger = intent.getParcelableExtra(EXTRA_MESSENGER);
+        final Message msg = Message.obtain();
+        msg.what = MSG_START_FOREGROUND_DONE;
+        try {
+            messenger.send(msg);
+        } catch (RemoteException e) {
+        }
+    }
+
+}
diff --git a/tests/SurfaceViewBufferTests/src/com/android/test/ScreenRecordTestBase.kt b/tests/SurfaceViewBufferTests/src/com/android/test/ScreenRecordTestBase.kt
index df3d30e..e80dd8e 100644
--- a/tests/SurfaceViewBufferTests/src/com/android/test/ScreenRecordTestBase.kt
+++ b/tests/SurfaceViewBufferTests/src/com/android/test/ScreenRecordTestBase.kt
@@ -19,7 +19,6 @@
 import android.content.Context
 import android.content.Intent
 import android.graphics.Rect
-import android.server.wm.WindowManagerState.getLogicalDisplaySize
 import android.view.cts.surfacevalidator.CapturedActivity
 import android.view.cts.surfacevalidator.ISurfaceValidatorTestCase
 import android.view.cts.surfacevalidator.PixelChecker
@@ -44,8 +43,6 @@
         mActivity = mActivityRule.launchActivity(Intent())
         lateinit var surfaceReadyLatch: CountDownLatch
         runOnUiThread {
-            it.dismissPermissionDialog()
-            it.setLogicalDisplaySize(getLogicalDisplaySize())
             surfaceReadyLatch = it.addSurfaceView(defaultBufferSize)
         }
         surfaceReadyLatch.await()
diff --git a/tests/SurfaceViewBufferTests/src/com/android/test/SharedBufferModeTests.kt b/tests/SurfaceViewBufferTests/src/com/android/test/SharedBufferModeTests.kt
index be3ed71..4c5224a 100644
--- a/tests/SurfaceViewBufferTests/src/com/android/test/SharedBufferModeTests.kt
+++ b/tests/SurfaceViewBufferTests/src/com/android/test/SharedBufferModeTests.kt
@@ -87,4 +87,4 @@
             checkPixels(svBounds, Color.BLUE)
         }
     }
-}
+}
\ No newline at end of file
diff --git a/tests/SurfaceViewBufferTests/src/com/android/test/SurfaceTracingTestBase.kt b/tests/SurfaceViewBufferTests/src/com/android/test/SurfaceTracingTestBase.kt
index cf4cb8c..a38019d 100644
--- a/tests/SurfaceViewBufferTests/src/com/android/test/SurfaceTracingTestBase.kt
+++ b/tests/SurfaceViewBufferTests/src/com/android/test/SurfaceTracingTestBase.kt
@@ -116,4 +116,4 @@
         private const val TRACE_FLAGS =
                 (1 shl 0) or (1 shl 5) or (1 shl 6) // TRACE_CRITICAL | TRACE_BUFFERS | TRACE_SYNC
     }
-}
+}
\ No newline at end of file
diff --git a/tests/SurfaceViewBufferTests/src/com/android/test/SurfaceViewBufferTestBase.kt b/tests/SurfaceViewBufferTests/src/com/android/test/SurfaceViewBufferTestBase.kt
index bba9678..1770e32 100644
--- a/tests/SurfaceViewBufferTests/src/com/android/test/SurfaceViewBufferTestBase.kt
+++ b/tests/SurfaceViewBufferTests/src/com/android/test/SurfaceViewBufferTestBase.kt
@@ -100,4 +100,4 @@
             INVERSE_DISPLAY(0x08)
         }
     }
-}
+}
\ No newline at end of file
diff --git a/tests/UpdatableSystemFontTest/src/com/android/updatablesystemfont/UpdatableSystemFontTest.java b/tests/UpdatableSystemFontTest/src/com/android/updatablesystemfont/UpdatableSystemFontTest.java
index fa5b7c1..ba9e4a8 100644
--- a/tests/UpdatableSystemFontTest/src/com/android/updatablesystemfont/UpdatableSystemFontTest.java
+++ b/tests/UpdatableSystemFontTest/src/com/android/updatablesystemfont/UpdatableSystemFontTest.java
@@ -24,7 +24,6 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.junit.Assert.assertThrows;
-import static org.junit.Assume.assumeTrue;
 
 import static java.util.concurrent.TimeUnit.SECONDS;
 
@@ -36,7 +35,6 @@
 import android.graphics.fonts.FontStyle;
 import android.os.ParcelFileDescriptor;
 import android.platform.test.annotations.RootPermissionTest;
-import android.security.FileIntegrityManager;
 import android.text.FontConfig;
 import android.util.Log;
 import android.util.Pair;
@@ -139,10 +137,6 @@
     @Before
     public void setUp() throws Exception {
         Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
-        // Run tests only if updatable system font is enabled.
-        FileIntegrityManager fim = context.getSystemService(FileIntegrityManager.class);
-        assumeTrue(fim != null);
-        assumeTrue(fim.isApkVeritySupported());
         mKeyId = insertCert(CERT_PATH);
         mFontManager = context.getSystemService(FontManager.class);
         expectCommandToSucceed("cmd font clear");
diff --git a/tests/UsbTests/Android.bp b/tests/UsbTests/Android.bp
index 9328b67..c60c519 100644
--- a/tests/UsbTests/Android.bp
+++ b/tests/UsbTests/Android.bp
@@ -29,7 +29,7 @@
     static_libs: [
         "frameworks-base-testutils",
         "androidx.test.rules",
-        "mockito-target-inline-minus-junit4",
+        "mockito-target-extended-minus-junit4",
         "platform-test-annotations",
         "services.core",
         "services.net",
@@ -37,7 +37,12 @@
         "truth-prebuilt",
         "UsbManagerTestLib",
     ],
-    jni_libs: ["libdexmakerjvmtiagent"],
+    jni_libs: [
+        // Required for ExtendedMockito
+        "libdexmakerjvmtiagent",
+        "libmultiplejvmtiagentsinterferenceagent",
+        "libstaticjvmtiagent",
+    ],
     certificate: "platform",
     platform_apis: true,
     test_suites: ["device-tests"],
diff --git a/tests/UsbTests/src/com/android/server/usb/UsbHandlerTest.java b/tests/UsbTests/src/com/android/server/usb/UsbHandlerTest.java
index 210e3ea..c2d0f7c 100644
--- a/tests/UsbTests/src/com/android/server/usb/UsbHandlerTest.java
+++ b/tests/UsbTests/src/com/android/server/usb/UsbHandlerTest.java
@@ -19,6 +19,7 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -27,23 +28,29 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.debug.AdbManagerInternal;
+import android.debug.AdbTransportType;
 import android.hardware.usb.UsbManager;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
-import android.provider.Settings;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.dx.mockito.inline.extended.ExtendedMockito;
 import com.android.server.FgThread;
+import com.android.server.LocalServices;
 
+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.MockitoSession;
+import org.mockito.quality.Strictness;
 
 import java.util.HashMap;
 import java.util.Locale;
@@ -68,6 +75,8 @@
     private SharedPreferences mSharedPreferences;
     @Mock
     private SharedPreferences.Editor mEditor;
+    @Mock
+    private AdbManagerInternal mAdbManagerInternal;
 
     private MockUsbHandler mUsbHandler;
 
@@ -83,6 +92,7 @@
 
     private Map<String, String> mMockProperties;
     private Map<String, Integer> mMockGlobalSettings;
+    private MockitoSession mStaticMockSession;
 
     private class MockUsbHandler extends UsbDeviceManager.UsbHandler {
         boolean mIsUsbTransferAllowed;
@@ -157,6 +167,10 @@
     @Before
     public void before() {
         MockitoAnnotations.initMocks(this);
+        mStaticMockSession = ExtendedMockito.mockitoSession()
+                .mockStatic(LocalServices.class)
+                .strictness(Strictness.WARN)
+                .startMocking();
         mMockProperties = new HashMap<>();
         mMockGlobalSettings = new HashMap<>();
         when(mSharedPreferences.edit()).thenReturn(mEditor);
@@ -164,6 +178,16 @@
         mUsbHandler = new MockUsbHandler(FgThread.get().getLooper(),
                 InstrumentationRegistry.getContext(), mUsbDeviceManager, mUsbAlsaManager,
                 mUsbSettingsManager, mUsbPermissionManager);
+
+        when(LocalServices.getService(eq(AdbManagerInternal.class)))
+                .thenReturn(mAdbManagerInternal);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        if (mStaticMockSession != null) {
+            mStaticMockSession.finishMocking();
+        }
     }
 
     @SmallTest
@@ -234,8 +258,8 @@
         assertEquals(mUsbHandler.getEnabledFunctions(), UsbManager.FUNCTION_NONE);
         assertEquals(mMockProperties.get(UsbDeviceManager.UsbHandler
                 .USB_PERSISTENT_CONFIG_PROPERTY), UsbManager.USB_FUNCTION_ADB);
-        assertTrue(mUsbHandler.isAdbEnabled());
 
+        when(mAdbManagerInternal.isAdbEnabled(eq(AdbTransportType.USB))).thenReturn(true);
         mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_UPDATE_STATE, 1, 1));
 
         assertTrue(mUsbHandler.mBroadcastedIntent.getBooleanExtra(UsbManager.USB_CONNECTED, false));
@@ -271,20 +295,6 @@
 
     @SmallTest
     @Test
-    public void bootCompletedAdbEnabled() {
-        mMockProperties.put(UsbDeviceManager.UsbHandler.USB_PERSISTENT_CONFIG_PROPERTY, "adb");
-        mUsbHandler = new MockUsbHandler(FgThread.get().getLooper(),
-                InstrumentationRegistry.getContext(), mUsbDeviceManager, mUsbAlsaManager,
-                mUsbSettingsManager, mUsbPermissionManager);
-
-        sendBootCompleteMessages(mUsbHandler);
-        assertEquals(mUsbHandler.getEnabledFunctions(), UsbManager.FUNCTION_NONE);
-        assertEquals(mMockGlobalSettings.get(Settings.Global.ADB_ENABLED).intValue(), 1);
-        assertTrue(mUsbHandler.isAdbEnabled());
-    }
-
-    @SmallTest
-    @Test
     public void userSwitchedDisablesMtp() {
         mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_SET_CURRENT_FUNCTIONS,
                 UsbManager.FUNCTION_MTP));
diff --git a/tests/componentalias/Android.bp b/tests/componentalias/Android.bp
index 7af76e1..01d34e4 100644
--- a/tests/componentalias/Android.bp
+++ b/tests/componentalias/Android.bp
@@ -26,7 +26,6 @@
         "compatibility-device-util-axt",
         "mockito-target-extended-minus-junit4",
         "truth-prebuilt",
-        "ub-uiautomator",
     ],
     libs: ["android.test.base"],
     srcs: [
diff --git a/tests/permission/OWNERS b/tests/permission/OWNERS
index 999ea0e..2fe78c5 100644
--- a/tests/permission/OWNERS
+++ b/tests/permission/OWNERS
@@ -1 +1,2 @@
+#Bug component: 137825
 include /core/java/android/permission/OWNERS
diff --git a/tests/utils/testutils/TEST_MAPPING b/tests/utils/testutils/TEST_MAPPING
new file mode 100644
index 0000000..d9eb44f
--- /dev/null
+++ b/tests/utils/testutils/TEST_MAPPING
@@ -0,0 +1,32 @@
+{
+  "presubmit": [
+    {
+      "name": "frameworks-base-testutils-tests",
+      "options": [
+        {
+          "exclude-annotation": "android.platform.test.annotations.LargeTest"
+        },
+        {
+          "exclude-annotation": "android.platform.test.annotations.FlakyTest"
+        },
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        },
+        {
+          "exclude-annotation": "org.junit.Ignore"
+        }
+      ]
+    }
+  ],
+  "postsubmit": [
+    {
+      "name": "frameworks-base-testutils-tests",
+      "options": [
+        {
+          "exclude-annotation": "org.junit.Ignore"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/tests/utils/testutils/java/com/android/server/accessibility/TEST_MAPPING b/tests/utils/testutils/java/com/android/server/accessibility/TEST_MAPPING
new file mode 100644
index 0000000..1c67399
--- /dev/null
+++ b/tests/utils/testutils/java/com/android/server/accessibility/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+  "imports": [
+    {
+      "path": "frameworks/base/services/accessibility/TEST_MAPPING"
+    }
+  ]
+}
diff --git a/tests/utils/testutils/tests/Android.bp b/tests/utils/testutils/tests/Android.bp
new file mode 100644
index 0000000..b901b18
--- /dev/null
+++ b/tests/utils/testutils/tests/Android.bp
@@ -0,0 +1,47 @@
+//
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+package {
+    default_applicable_licenses: ["frameworks_base_license"],
+}
+
+android_test {
+    name: "frameworks-base-testutils-tests",
+
+    srcs: [
+        "src/**/*.java",
+    ],
+
+    static_libs: [
+        "junit",
+        "hamcrest-library",
+        "androidx.test.runner",
+        "mockito-target-minus-junit4",
+        "frameworks-base-testutils",
+    ],
+
+    libs: [
+        "android.test.runner",
+        "android.test.base",
+        "android.test.mock",
+    ],
+
+    certificate: "platform",
+    test_suites: [
+        "device-tests",
+        "automotive-tests",
+    ],
+}
diff --git a/tests/utils/testutils/tests/AndroidManifest.xml b/tests/utils/testutils/tests/AndroidManifest.xml
new file mode 100644
index 0000000..9e7e275
--- /dev/null
+++ b/tests/utils/testutils/tests/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.frameworks.tests.utils.testutils.tests">
+
+    <application>
+        <uses-library android:name="android.test.runner"/>
+    </application>
+
+    <instrumentation
+        android:name="androidx.test.runner.AndroidJUnitRunner"
+        android:targetPackage="com.frameworks.tests.utils.testutils.tests"
+        android:label="Test Utils Tests"/>
+</manifest>
diff --git a/tests/utils/testutils/java/android/os/test/TestLooperTest.java b/tests/utils/testutils/tests/src/android/os/test/TestLooperTest.java
similarity index 100%
rename from tests/utils/testutils/java/android/os/test/TestLooperTest.java
rename to tests/utils/testutils/tests/src/android/os/test/TestLooperTest.java
diff --git a/tests/utils/testutils/java/com/android/test/filters/SelectTestTests.java b/tests/utils/testutils/tests/src/com/android/test/filters/SelectTestTests.java
similarity index 100%
rename from tests/utils/testutils/java/com/android/test/filters/SelectTestTests.java
rename to tests/utils/testutils/tests/src/com/android/test/filters/SelectTestTests.java
diff --git a/tools/aapt2/Android.bp b/tools/aapt2/Android.bp
index 0d6dc35..7323b0f 100644
--- a/tools/aapt2/Android.bp
+++ b/tools/aapt2/Android.bp
@@ -47,6 +47,7 @@
         "-Wno-missing-field-initializers",
         "-fno-exceptions",
         "-fno-rtti",
+        "-Wno-deprecated-declarations",
     ],
     target: {
         windows: {
diff --git a/tools/aapt2/Debug.cpp b/tools/aapt2/Debug.cpp
index df87889..cac4edd 100644
--- a/tools/aapt2/Debug.cpp
+++ b/tools/aapt2/Debug.cpp
@@ -265,6 +265,16 @@
     ValueHeadlinePrinter headline_printer(package.name, printer);
     ValueBodyPrinter body_printer(package.name, printer);
 
+    auto& dynamicRefTable = table.GetReferencedPackages();
+    if (!dynamicRefTable.empty()) {
+      printer->Println(StringPrintf("DynamicRefTable entryCount=%d", int(dynamicRefTable.size())));
+      printer->Indent();
+      for (auto&& [id, name] : dynamicRefTable) {
+        printer->Println(StringPrintf("0x%02x -> %s", id, name.c_str()));
+      }
+      printer->Undent();
+    }
+
     printer->Print("Package name=");
     printer->Print(package.name);
     if (package.id) {
diff --git a/tools/aapt2/LoadedApk.h b/tools/aapt2/LoadedApk.h
index 4cd7eae..27c354a 100644
--- a/tools/aapt2/LoadedApk.h
+++ b/tools/aapt2/LoadedApk.h
@@ -40,10 +40,8 @@
 };
 
 // Info about an APK loaded in memory.
-class LoadedApk {
+class LoadedApk final {
  public:
-  virtual ~LoadedApk() = default;
-
   // Loads both binary and proto APKs from disk.
   static std::unique_ptr<LoadedApk> LoadApkFromPath(android::StringPiece path,
                                                     android::IDiagnostics* diag);
@@ -96,8 +94,8 @@
    * Writes the APK on disk at the given path, while also removing the resource
    * files that are not referenced in the resource table.
    */
-  virtual bool WriteToArchive(IAaptContext* context, const TableFlattenerOptions& options,
-                              IArchiveWriter* writer);
+  bool WriteToArchive(IAaptContext* context, const TableFlattenerOptions& options,
+                      IArchiveWriter* writer);
 
   /**
    * Writes the APK on disk at the given path, while also removing the resource files that are not
@@ -108,9 +106,9 @@
    * original manifest will be written. The manifest is only required if the contents of the new APK
    * have been modified in a way that require the AndroidManifest.xml to also be modified.
    */
-  virtual bool WriteToArchive(IAaptContext* context, ResourceTable* split_table,
-                              const TableFlattenerOptions& options, FilterChain* filters,
-                              IArchiveWriter* writer, xml::XmlResource* manifest = nullptr);
+  bool WriteToArchive(IAaptContext* context, ResourceTable* split_table,
+                      const TableFlattenerOptions& options, FilterChain* filters,
+                      IArchiveWriter* writer, xml::XmlResource* manifest = nullptr);
 
   /** Loads the file as an xml document. */
   std::unique_ptr<xml::XmlResource> LoadXml(const std::string& file_path,
diff --git a/tools/aapt2/ResourceParser.cpp b/tools/aapt2/ResourceParser.cpp
index fa9a98f..6af39b7 100644
--- a/tools/aapt2/ResourceParser.cpp
+++ b/tools/aapt2/ResourceParser.cpp
@@ -800,7 +800,7 @@
 
   // Process the raw value.
   std::unique_ptr<Item> processed_item = ResourceUtils::TryParseItemForAttribute(
-      xmlsub_tree.raw_value, type_mask, on_create_reference);
+      &diag, xmlsub_tree.raw_value, type_mask, on_create_reference);
   if (processed_item) {
     // Fix up the reference.
     if (auto ref = ValueCast<Reference>(processed_item.get())) {
diff --git a/tools/aapt2/ResourceTable.h b/tools/aapt2/ResourceTable.h
index bb286a8..61e399c 100644
--- a/tools/aapt2/ResourceTable.h
+++ b/tools/aapt2/ResourceTable.h
@@ -307,6 +307,11 @@
   // order.
   ResourceTableView GetPartitionedView(const ResourceTableViewOptions& options = {}) const;
 
+  using ReferencedPackages = std::map<uint8_t, std::string>;
+  const ReferencedPackages& GetReferencedPackages() const {
+    return included_packages_;
+  }
+
   struct SearchResult {
     ResourceTablePackage* package;
     ResourceTableType* type;
@@ -342,7 +347,7 @@
 
   // Set of dynamic packages that this table may reference. Their package names get encoded
   // into the resources.arsc along with their compile-time assigned IDs.
-  std::map<size_t, std::string> included_packages_;
+  ReferencedPackages included_packages_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(ResourceTable);
diff --git a/tools/aapt2/ResourceUtils.cpp b/tools/aapt2/ResourceUtils.cpp
index 5a118a9..d358df9 100644
--- a/tools/aapt2/ResourceUtils.cpp
+++ b/tools/aapt2/ResourceUtils.cpp
@@ -619,7 +619,7 @@
 }
 
 std::unique_ptr<Item> TryParseItemForAttribute(
-    StringPiece value, uint32_t type_mask,
+    android::IDiagnostics* diag, StringPiece value, uint32_t type_mask,
     const std::function<bool(const ResourceName&)>& on_create_reference) {
   using android::ResTable_map;
 
@@ -670,8 +670,32 @@
     // Try parsing this as a float.
     auto floating_point = TryParseFloat(value);
     if (floating_point) {
+      // Only check if the parsed result lost precision when the parsed item is
+      // android::Res_value::TYPE_FLOAT and there is other possible types saved in type_mask, like
+      // ResTable_map::TYPE_INTEGER.
       if (type_mask & AndroidTypeToAttributeTypeMask(floating_point->value.dataType)) {
-        return std::move(floating_point);
+        const bool mayOnlyBeFloat = (type_mask & ~float_mask) == 0;
+        const bool parsedAsFloat = floating_point->value.dataType == android::Res_value::TYPE_FLOAT;
+        if (!mayOnlyBeFloat && parsedAsFloat) {
+          float f = reinterpret_cast<float&>(floating_point->value.data);
+          std::u16string str16 = android::util::Utf8ToUtf16(util::TrimWhitespace(value));
+          double d;
+          if (android::ResTable::stringToDouble(str16.data(), str16.size(), d)) {
+            // Parse as a float only if the difference between float and double parsed from the
+            // same string is smaller than 1, otherwise return as raw string.
+            if (fabs(f - d) < 1) {
+              return std::move(floating_point);
+            } else {
+              if (diag->IsVerbose()) {
+                diag->Note(android::DiagMessage()
+                           << "precision lost greater than 1 while parsing float " << value
+                           << ", return a raw string");
+              }
+            }
+          }
+        } else {
+          return std::move(floating_point);
+        }
       }
     }
   }
@@ -683,12 +707,12 @@
  * allows.
  */
 std::unique_ptr<Item> TryParseItemForAttribute(
-    StringPiece str, const Attribute* attr,
+    android::IDiagnostics* diag, StringPiece str, const Attribute* attr,
     const std::function<bool(const ResourceName&)>& on_create_reference) {
   using android::ResTable_map;
 
   const uint32_t type_mask = attr->type_mask;
-  auto value = TryParseItemForAttribute(str, type_mask, on_create_reference);
+  auto value = TryParseItemForAttribute(diag, str, type_mask, on_create_reference);
   if (value) {
     return value;
   }
diff --git a/tools/aapt2/ResourceUtils.h b/tools/aapt2/ResourceUtils.h
index f30f4ac..50fc879 100644
--- a/tools/aapt2/ResourceUtils.h
+++ b/tools/aapt2/ResourceUtils.h
@@ -200,11 +200,11 @@
  * reference to an ID that must be created (@+id/foo).
  */
 std::unique_ptr<Item> TryParseItemForAttribute(
-    android::StringPiece value, const Attribute* attr,
+    android::IDiagnostics* diag, android::StringPiece value, const Attribute* attr,
     const std::function<bool(const ResourceName&)>& on_create_reference = {});
 
 std::unique_ptr<Item> TryParseItemForAttribute(
-    android::StringPiece value, uint32_t type_mask,
+    android::IDiagnostics* diag, android::StringPiece value, uint32_t type_mask,
     const std::function<bool(const ResourceName&)>& on_create_reference = {});
 
 uint32_t AndroidTypeToAttributeTypeMask(uint16_t type);
diff --git a/tools/aapt2/ResourceUtils_test.cpp b/tools/aapt2/ResourceUtils_test.cpp
index 568871a..4cba04d 100644
--- a/tools/aapt2/ResourceUtils_test.cpp
+++ b/tools/aapt2/ResourceUtils_test.cpp
@@ -217,17 +217,46 @@
 }
 
 TEST(ResourceUtilsTest, ItemsWithWhitespaceAreParsedCorrectly) {
-  EXPECT_THAT(ResourceUtils::TryParseItemForAttribute(" 12\n   ", ResTable_map::TYPE_INTEGER),
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  EXPECT_THAT(ResourceUtils::TryParseItemForAttribute(context->GetDiagnostics(), " 12\n   ",
+                                                      ResTable_map::TYPE_INTEGER),
               Pointee(ValueEq(BinaryPrimitive(Res_value::TYPE_INT_DEC, 12u))));
-  EXPECT_THAT(ResourceUtils::TryParseItemForAttribute(" true\n   ", ResTable_map::TYPE_BOOLEAN),
+  EXPECT_THAT(ResourceUtils::TryParseItemForAttribute(context->GetDiagnostics(), " true\n   ",
+                                                      ResTable_map::TYPE_BOOLEAN),
               Pointee(ValueEq(BinaryPrimitive(Res_value::TYPE_INT_BOOLEAN, 0xffffffffu))));
 
   const float expected_float = 12.0f;
   const uint32_t expected_float_flattened = *(uint32_t*)&expected_float;
-  EXPECT_THAT(ResourceUtils::TryParseItemForAttribute(" 12.0\n   ", ResTable_map::TYPE_FLOAT),
+  EXPECT_THAT(ResourceUtils::TryParseItemForAttribute(context->GetDiagnostics(), " 12.0\n   ",
+                                                      ResTable_map::TYPE_FLOAT),
               Pointee(ValueEq(BinaryPrimitive(Res_value::TYPE_FLOAT, expected_float_flattened))));
 }
 
+TEST(ResourceUtilsTest, FloatAndBigIntegerParsedCorrectly) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  const float expected_float = 0.125f;
+  const uint32_t expected_float_flattened = *(uint32_t*)&expected_float;
+  EXPECT_THAT(ResourceUtils::TryParseItemForAttribute(context->GetDiagnostics(), "0.125",
+                                                      ResTable_map::TYPE_FLOAT),
+              Pointee(ValueEq(BinaryPrimitive(Res_value::TYPE_FLOAT, expected_float_flattened))));
+
+  const float special_float = 1.0f;
+  const uint32_t special_float_flattened = *(uint32_t*)&special_float;
+  EXPECT_THAT(ResourceUtils::TryParseItemForAttribute(context->GetDiagnostics(), "1.0",
+                                                      ResTable_map::TYPE_FLOAT),
+              Pointee(ValueEq(BinaryPrimitive(Res_value::TYPE_FLOAT, special_float_flattened))));
+
+  EXPECT_EQ(ResourceUtils::TryParseItemForAttribute(context->GetDiagnostics(), "1099511627776",
+                                                    ResTable_map::TYPE_INTEGER),
+            std::unique_ptr<Item>(nullptr));
+
+  const float big_float = 1099511627776.0f;
+  const uint32_t big_flattened = *(uint32_t*)&big_float;
+  EXPECT_THAT(ResourceUtils::TryParseItemForAttribute(context->GetDiagnostics(), "1099511627776",
+                                                      ResTable_map::TYPE_FLOAT),
+              Pointee(ValueEq(BinaryPrimitive(Res_value::TYPE_FLOAT, big_flattened))));
+}
+
 TEST(ResourceUtilsTest, ParseSdkVersionWithCodename) {
   EXPECT_THAT(ResourceUtils::ParseSdkVersion("Q"), Eq(std::optional<int>(10000)));
   EXPECT_THAT(ResourceUtils::ParseSdkVersion("Q.fingerprint"), Eq(std::optional<int>(10000)));
diff --git a/tools/aapt2/ResourceValues.cpp b/tools/aapt2/ResourceValues.cpp
index a5754e0..166b01b 100644
--- a/tools/aapt2/ResourceValues.cpp
+++ b/tools/aapt2/ResourceValues.cpp
@@ -439,6 +439,21 @@
   return str;
 }
 
+// This function is designed to using different specifier to print different floats,
+// which can print more accurate format rather than using %g only.
+const char* BinaryPrimitive::DecideFormat(float f) {
+  // if the float is either too big or too tiny, print it in scientific notation.
+  // eg: "10995116277760000000000" to 1.099512e+22, "0.00000000001" to 1.000000e-11
+  if (fabs(f) > std::numeric_limits<int64_t>::max() || fabs(f) < 1e-10) {
+    return "%e";
+    // Else if the number is an integer exactly, print it without trailing zeros.
+    // eg: "1099511627776" to 1099511627776
+  } else if (int64_t(f) == f) {
+    return "%.0f";
+  }
+  return "%g";
+}
+
 void BinaryPrimitive::PrettyPrint(Printer* printer) const {
   using ::android::Res_value;
   switch (value.dataType) {
@@ -470,7 +485,9 @@
       break;
 
     case Res_value::TYPE_FLOAT:
-      printer->Print(StringPrintf("%g", *reinterpret_cast<const float*>(&value.data)));
+      float f;
+      f = *reinterpret_cast<const float*>(&value.data);
+      printer->Print(StringPrintf(DecideFormat(f), f));
       break;
 
     case Res_value::TYPE_DIMENSION:
diff --git a/tools/aapt2/ResourceValues.h b/tools/aapt2/ResourceValues.h
index 6f9dccb..5192c2b 100644
--- a/tools/aapt2/ResourceValues.h
+++ b/tools/aapt2/ResourceValues.h
@@ -284,6 +284,7 @@
   bool Equals(const Value* value) const override;
   bool Flatten(android::Res_value* out_value) const override;
   void Print(std::ostream* out) const override;
+  static const char* DecideFormat(float f);
   void PrettyPrint(text::Printer* printer) const override;
 };
 
diff --git a/tools/aapt2/SdkConstants.cpp b/tools/aapt2/SdkConstants.cpp
index a766bd4..83f2eb3 100644
--- a/tools/aapt2/SdkConstants.cpp
+++ b/tools/aapt2/SdkConstants.cpp
@@ -16,20 +16,24 @@
 
 #include "SdkConstants.h"
 
+#include <stdint.h>
+
 #include <algorithm>
 #include <string>
-#include <unordered_set>
-#include <vector>
+#include <string_view>
 
 using android::StringPiece;
+using namespace std::literals;
 
 namespace aapt {
 
-static ApiVersion sDevelopmentSdkLevel = 10000;
-static const auto sDevelopmentSdkCodeNames = std::unordered_set<StringPiece>(
-    {"Q", "R", "S", "Sv2", "Tiramisu", "UpsideDownCake", "VanillaIceCream"});
+static constexpr ApiVersion sDevelopmentSdkLevel = 10000;
+static constexpr StringPiece sDevelopmentSdkCodeNames[] = {
+    "Q"sv, "R"sv, "S"sv, "Sv2"sv, "Tiramisu"sv, "UpsideDownCake"sv, "VanillaIceCream"sv};
 
-static const std::vector<std::pair<uint16_t, ApiVersion>> sAttrIdMap = {
+static constexpr auto sPrivacySandboxSuffix = "PrivacySandbox"sv;
+
+static constexpr std::pair<uint16_t, ApiVersion> sAttrIdMap[] = {
     {0x021c, 1},
     {0x021d, 2},
     {0x0269, SDK_CUPCAKE},
@@ -62,25 +66,37 @@
     {0x064c, SDK_S_V2},
 };
 
-static bool less_entry_id(const std::pair<uint16_t, ApiVersion>& p, uint16_t entryId) {
-  return p.first < entryId;
-}
+static_assert(std::is_sorted(std::begin(sAttrIdMap), std::end(sAttrIdMap),
+                             [](auto&& l, auto&& r) { return l.first < r.first; }));
 
 ApiVersion FindAttributeSdkLevel(const ResourceId& id) {
   if (id.package_id() != 0x01 || id.type_id() != 0x01) {
     return 0;
   }
-  auto iter = std::lower_bound(sAttrIdMap.begin(), sAttrIdMap.end(), id.entry_id(), less_entry_id);
-  if (iter == sAttrIdMap.end()) {
+  const auto it =
+      std::lower_bound(std::begin(sAttrIdMap), std::end(sAttrIdMap), id.entry_id(),
+                       [](const auto& pair, uint16_t entryId) { return pair.first < entryId; });
+  if (it == std::end(sAttrIdMap)) {
     return SDK_LOLLIPOP_MR1;
   }
-  return iter->second;
+  return it->second;
 }
 
 std::optional<ApiVersion> GetDevelopmentSdkCodeNameVersion(StringPiece code_name) {
-  return (sDevelopmentSdkCodeNames.find(code_name) == sDevelopmentSdkCodeNames.end())
-             ? std::optional<ApiVersion>()
-             : sDevelopmentSdkLevel;
+  const auto it =
+      std::find_if(std::begin(sDevelopmentSdkCodeNames), std::end(sDevelopmentSdkCodeNames),
+                   [code_name](const auto& item) { return code_name.starts_with(item); });
+  if (it == std::end(sDevelopmentSdkCodeNames)) {
+    return {};
+  }
+  if (code_name.size() == it->size()) {
+    return sDevelopmentSdkLevel;
+  }
+  if (code_name.size() == it->size() + sPrivacySandboxSuffix.size() &&
+      code_name.ends_with(sPrivacySandboxSuffix)) {
+    return sDevelopmentSdkLevel;
+  }
+  return {};
 }
 
 }  // namespace aapt
diff --git a/tools/aapt2/SdkConstants_test.cpp b/tools/aapt2/SdkConstants_test.cpp
index 61f4d71..0f645ff 100644
--- a/tools/aapt2/SdkConstants_test.cpp
+++ b/tools/aapt2/SdkConstants_test.cpp
@@ -28,4 +28,24 @@
   EXPECT_EQ(0, FindAttributeSdkLevel(ResourceId(0x7f010345)));
 }
 
+TEST(SdkConstantsTest, GetDevelopmentSdkCodeNameVersionValid) {
+  EXPECT_EQ(std::optional<ApiVersion>(10000), GetDevelopmentSdkCodeNameVersion("Q"));
+  EXPECT_EQ(std::optional<ApiVersion>(10000), GetDevelopmentSdkCodeNameVersion("VanillaIceCream"));
+}
+
+TEST(SdkConstantsTest, GetDevelopmentSdkCodeNameVersionPrivacySandbox) {
+  EXPECT_EQ(std::optional<ApiVersion>(10000), GetDevelopmentSdkCodeNameVersion("QPrivacySandbox"));
+  EXPECT_EQ(std::optional<ApiVersion>(10000),
+            GetDevelopmentSdkCodeNameVersion("VanillaIceCreamPrivacySandbox"));
+}
+
+TEST(SdkConstantsTest, GetDevelopmentSdkCodeNameVersionInvalid) {
+  EXPECT_EQ(std::optional<ApiVersion>(), GetDevelopmentSdkCodeNameVersion("A"));
+  EXPECT_EQ(std::optional<ApiVersion>(), GetDevelopmentSdkCodeNameVersion("Sv3"));
+  EXPECT_EQ(std::optional<ApiVersion>(),
+            GetDevelopmentSdkCodeNameVersion("VanillaIceCream_PrivacySandbox"));
+  EXPECT_EQ(std::optional<ApiVersion>(), GetDevelopmentSdkCodeNameVersion("PrivacySandbox"));
+  EXPECT_EQ(std::optional<ApiVersion>(), GetDevelopmentSdkCodeNameVersion("QQQQQQQQQQQQQQQ"));
+}
+
 }  // namespace aapt
diff --git a/tools/aapt2/cmd/Compile.cpp b/tools/aapt2/cmd/Compile.cpp
index 03f9715..b5c290e 100644
--- a/tools/aapt2/cmd/Compile.cpp
+++ b/tools/aapt2/cmd/Compile.cpp
@@ -186,7 +186,20 @@
     // These are created as weak symbols, and are only generated from default
     // configuration
     // strings and plurals.
-    PseudolocaleGenerator pseudolocale_generator;
+    std::string grammatical_gender_values;
+    std::string grammatical_gender_ratio;
+    if (options.pseudo_localize_gender_values) {
+      grammatical_gender_values = options.pseudo_localize_gender_values.value();
+    } else {
+      grammatical_gender_values = "f,m,n";
+    }
+    if (options.pseudo_localize_gender_ratio) {
+      grammatical_gender_ratio = options.pseudo_localize_gender_ratio.value();
+    } else {
+      grammatical_gender_ratio = "1.0";
+    }
+    PseudolocaleGenerator pseudolocale_generator(grammatical_gender_values,
+                                                 grammatical_gender_ratio);
     if (!pseudolocale_generator.Consume(context, &table)) {
       return false;
     }
@@ -597,6 +610,7 @@
 
   void SetVerbose(bool val) {
     verbose_ = val;
+    diagnostics_->SetVerbose(val);
   }
 
   bool IsVerbose() override {
diff --git a/tools/aapt2/cmd/Compile.h b/tools/aapt2/cmd/Compile.h
index 14a730a..22890fc 100644
--- a/tools/aapt2/cmd/Compile.h
+++ b/tools/aapt2/cmd/Compile.h
@@ -35,6 +35,8 @@
   std::optional<std::string> res_dir;
   std::optional<std::string> res_zip;
   std::optional<std::string> generate_text_symbols_path;
+  std::optional<std::string> pseudo_localize_gender_values;
+  std::optional<std::string> pseudo_localize_gender_ratio;
   std::optional<Visibility::Level> visibility;
   bool pseudolocalize = false;
   bool no_png_crunch = false;
@@ -76,6 +78,15 @@
     AddOptionalFlag("--source-path",
                       "Sets the compiled resource file source file path to the given string.",
                       &options_.source_path);
+    AddOptionalFlag("--pseudo-localize-gender-values",
+                    "Sets the gender values to pick up for generating grammatical gender strings, "
+                    "gender values should be f, m, or n, which are shortcuts for feminine, "
+                    "masculine and neuter, and split with comma.",
+                    &options_.pseudo_localize_gender_values);
+    AddOptionalFlag("--pseudo-localize-gender-ratio",
+                    "Sets the ratio of resources to generate grammatical gender strings for. The "
+                    "ratio has to be a float number between 0 and 1.",
+                    &options_.pseudo_localize_gender_ratio);
   }
 
   int Action(const std::vector<std::string>& args) override;
diff --git a/tools/aapt2/cmd/Compile_test.cpp b/tools/aapt2/cmd/Compile_test.cpp
index 3464a76..8880089 100644
--- a/tools/aapt2/cmd/Compile_test.cpp
+++ b/tools/aapt2/cmd/Compile_test.cpp
@@ -236,9 +236,24 @@
   // The first string (000) is translatable, the second is not
   // ar-XB uses "\u200F\u202E...\u202C\u200F"
   std::vector<std::string> expected_translatable = {
-      "000", "111", // default locale
-      "[000 one]", // en-XA
-      "\xE2\x80\x8F\xE2\x80\xAE" "000" "\xE2\x80\xAC\xE2\x80\x8F", // ar-XB
+      "(F)[000 one]",  // en-XA-feminine
+      "(F)\xE2\x80\x8F\xE2\x80\xAE"
+      "000"
+      "\xE2\x80\xAC\xE2\x80\x8F",  // ar-XB-feminine
+      "(M)[000 one]",              // en-XA-masculine
+      "(M)\xE2\x80\x8F\xE2\x80\xAE"
+      "000"
+      "\xE2\x80\xAC\xE2\x80\x8F",  // ar-XB-masculine
+      "(N)[000 one]",              // en-XA-neuter
+      "(N)\xE2\x80\x8F\xE2\x80\xAE"
+      "000"
+      "\xE2\x80\xAC\xE2\x80\x8F",  // ar-XB-neuter
+      "000",                       // default locale
+      "111",                       // default locale
+      "[000 one]",                 // en-XA
+      "\xE2\x80\x8F\xE2\x80\xAE"
+      "000"
+      "\xE2\x80\xAC\xE2\x80\x8F",  // ar-XB
   };
   AssertTranslations(this, "foo", expected_translatable);
   AssertTranslations(this, "foo_donottranslate", expected_translatable);
diff --git a/tools/aapt2/cmd/Convert.cpp b/tools/aapt2/cmd/Convert.cpp
index 7381a85..387dcfe 100644
--- a/tools/aapt2/cmd/Convert.cpp
+++ b/tools/aapt2/cmd/Convert.cpp
@@ -425,6 +425,7 @@
   if (force_sparse_encoding_) {
     table_flattener_options_.sparse_entries = SparseEntriesMode::Forced;
   }
+  table_flattener_options_.use_compact_entries = enable_compact_entries_;
   if (resources_config_path_) {
     if (!ExtractResourceConfig(*resources_config_path_, &context, table_flattener_options_)) {
       return 1;
diff --git a/tools/aapt2/cmd/Convert.h b/tools/aapt2/cmd/Convert.h
index 15fe11f..9452e58 100644
--- a/tools/aapt2/cmd/Convert.h
+++ b/tools/aapt2/cmd/Convert.h
@@ -46,6 +46,10 @@
                       "This decreases APK size at the cost of resource retrieval performance.\n"
                       "Applies sparse encoding to all resources regardless of minSdk.",
                       &force_sparse_encoding_);
+    AddOptionalSwitch(
+        "--enable-compact-entries",
+        "This decreases APK size by using compact resource entries for simple data types.",
+        &enable_compact_entries_);
     AddOptionalSwitch("--keep-raw-values",
         android::base::StringPrintf("Preserve raw attribute values in xml files when using the"
             " '%s' output format", kOutputFormatBinary),
@@ -85,6 +89,7 @@
   bool verbose_ = false;
   bool enable_sparse_encoding_ = false;
   bool force_sparse_encoding_ = false;
+  bool enable_compact_entries_ = false;
   std::optional<std::string> resources_config_path_;
 };
 
diff --git a/tools/aapt2/cmd/Dump.cpp b/tools/aapt2/cmd/Dump.cpp
index 71b0802..864af06 100644
--- a/tools/aapt2/cmd/Dump.cpp
+++ b/tools/aapt2/cmd/Dump.cpp
@@ -112,6 +112,7 @@
 
   void SetVerbose(bool val) {
     verbose_ = val;
+    diagnostics_.SetVerbose(val);
   }
 
   int GetMinSdkVersion() override {
diff --git a/tools/aapt2/cmd/Link.cpp b/tools/aapt2/cmd/Link.cpp
index 97404fc..eb4e38c 100644
--- a/tools/aapt2/cmd/Link.cpp
+++ b/tools/aapt2/cmd/Link.cpp
@@ -148,6 +148,7 @@
 
   void SetVerbose(bool val) {
     verbose_ = val;
+    diagnostics_->SetVerbose(val);
   }
 
   int GetMinSdkVersion() override {
diff --git a/tools/aapt2/cmd/Link_test.cpp b/tools/aapt2/cmd/Link_test.cpp
index 28fcc1a..7096f5c 100644
--- a/tools/aapt2/cmd/Link_test.cpp
+++ b/tools/aapt2/cmd/Link_test.cpp
@@ -441,8 +441,8 @@
       R"(<resources>
           <public type="attr" name="finalized_res" id="0x01010001"/>
 
-          <!-- S staged attributes (support staged resources in the same type id) -->
-          <staging-public-group type="attr" first-id="0x01010050">
+          <!-- S staged attributes (Not support staged resources in the same type id) -->
+          <staging-public-group type="attr" first-id="0x01fc0050">
             <public name="staged_s_res" />
           </staging-public-group>
 
@@ -480,8 +480,8 @@
           <public type="attr" name="staged_s2_res" id="0x01010003"/>
           <public type="string" name="staged_s_string" id="0x01020000"/>
 
-          <!-- S staged attributes (support staged resources in the same type id) -->
-          <staging-public-group-final type="attr" first-id="0x01010050">
+          <!-- S staged attributes (Not support staged resources in the same type id) -->
+          <staging-public-group-final type="attr" first-id="0x01fc0050">
             <public name="staged_s_res" />
           </staging-public-group-final>
 
@@ -551,7 +551,7 @@
   EXPECT_THAT(android_r_contents, HasSubstr("public static final int finalized_res=0x01010001;"));
   EXPECT_THAT(
       android_r_contents,
-      HasSubstr("public static final int staged_s_res; static { staged_s_res=0x01010050; }"));
+      HasSubstr("public static final int staged_s_res; static { staged_s_res=0x01fc0050; }"));
   EXPECT_THAT(
       android_r_contents,
       HasSubstr("public static final int staged_s_string; static { staged_s_string=0x01fd0080; }"));
@@ -575,7 +575,7 @@
   android::AssetManager2 am;
   auto android_asset = android::ApkAssets::Load(android_apk);
   ASSERT_THAT(android_asset, NotNull());
-  ASSERT_TRUE(am.SetApkAssets({android_asset.get()}));
+  ASSERT_TRUE(am.SetApkAssets({android_asset}));
 
   auto result = am.GetResourceId("android:attr/finalized_res");
   ASSERT_TRUE(result.has_value());
@@ -583,7 +583,7 @@
 
   result = am.GetResourceId("android:attr/staged_s_res");
   ASSERT_TRUE(result.has_value());
-  EXPECT_THAT(*result, Eq(0x01010050));
+  EXPECT_THAT(*result, Eq(0x01fc0050));
 
   result = am.GetResourceId("android:string/staged_s_string");
   ASSERT_TRUE(result.has_value());
@@ -631,7 +631,7 @@
   auto app_against_non_final = android::ApkAssets::Load(app_apk);
   ASSERT_THAT(android_asset, NotNull());
   ASSERT_THAT(app_against_non_final, NotNull());
-  ASSERT_TRUE(am.SetApkAssets({android_asset.get(), app_against_non_final.get()}));
+  ASSERT_TRUE(am.SetApkAssets({android_asset, app_against_non_final}));
 
   auto result = am.GetResourceId("android:attr/finalized_res");
   ASSERT_TRUE(result.has_value());
@@ -667,7 +667,7 @@
 
   auto app_against_final = android::ApkAssets::Load(app_apk_respin);
   ASSERT_THAT(app_against_final, NotNull());
-  ASSERT_TRUE(am.SetApkAssets({android_asset.get(), app_against_final.get()}));
+  ASSERT_TRUE(am.SetApkAssets({android_asset, app_against_final}));
 
   {
     auto style = am.GetBag(0x7f020000);
diff --git a/tools/aapt2/cmd/Optimize.cpp b/tools/aapt2/cmd/Optimize.cpp
index dbe7970..f045dad 100644
--- a/tools/aapt2/cmd/Optimize.cpp
+++ b/tools/aapt2/cmd/Optimize.cpp
@@ -101,6 +101,7 @@
 
   void SetVerbose(bool val) {
     verbose_ = val;
+    diagnostics_.SetVerbose(val);
   }
 
   void SetMinSdkVersion(int sdk_version) {
diff --git a/tools/aapt2/compile/IdAssigner.cpp b/tools/aapt2/compile/IdAssigner.cpp
index b3f98a9..5421abd 100644
--- a/tools/aapt2/compile/IdAssigner.cpp
+++ b/tools/aapt2/compile/IdAssigner.cpp
@@ -37,6 +37,7 @@
 
 template <typename Id, typename Key>
 struct NextIdFinder {
+  std::map<Id, Key> pre_assigned_ids_;
   explicit NextIdFinder(Id start_id = 0u) : next_id_(start_id){};
 
   // Attempts to reserve an identifier for the specified key.
@@ -55,7 +56,6 @@
   Id next_id_;
   bool next_id_called_ = false;
   bool exhausted_ = false;
-  std::map<Id, Key> pre_assigned_ids_;
   typename std::map<Id, Key>::iterator next_preassigned_id_;
 };
 
@@ -158,7 +158,7 @@
   }
 
   if (assigned_id_map_) {
-    // Reserve all the IDs mentioned in the stable ID map. That way we won't assig IDs that were
+    // Reserve all the IDs mentioned in the stable ID map. That way we won't assign IDs that were
     // listed in the map if they don't exist in the table.
     for (const auto& stable_id_entry : *assigned_id_map_) {
       const ResourceName& pre_assigned_name = stable_id_entry.first;
@@ -191,6 +191,11 @@
 }
 
 namespace {
+static const std::string_view staged_type_overlap_error =
+    "Staged public resource type IDs have conflict with non staged public resources type "
+    "IDs, please restart staged resource type ID assignment at 0xff in public-staging.xml "
+    "and also delete all the overlapping groups in public-final.xml";
+
 template <typename Id, typename Key>
 Result<Id> NextIdFinder<Id, Key>::ReserveId(Key key, Id id) {
   CHECK(!next_id_called_) << "ReserveId cannot be called after NextId";
@@ -282,8 +287,20 @@
     // another type.
     auto assign_result = type_id_finder_.ReserveId(key, id.type_id());
     if (!assign_result.has_value()) {
-      diag->Error(android::DiagMessage() << "can't assign ID " << id << " to resource " << name
-                                         << " because type " << assign_result.error());
+      auto pre_assigned_type = type_id_finder_.pre_assigned_ids_[id.type_id()].type;
+      bool pre_assigned_type_staged =
+          non_staged_type_ids_.find(pre_assigned_type) == non_staged_type_ids_.end();
+      auto hex_type_id = fmt::format("{:#04x}", (int)id.type_id());
+      bool current_type_staged = visibility.staged_api;
+      diag->Error(android::DiagMessage()
+                  << "can't assign type ID " << hex_type_id << " to "
+                  << (current_type_staged ? "staged type " : "non staged type ") << name.type.type
+                  << " because this type ID have been assigned to "
+                  << (pre_assigned_type_staged ? "staged type " : "non staged type ")
+                  << pre_assigned_type);
+      if (pre_assigned_type_staged || current_type_staged) {
+        diag->Error(android::DiagMessage() << staged_type_overlap_error);
+      }
       return false;
     }
     type = types_.emplace(key, TypeGroup(package_id_, id.type_id())).first;
@@ -298,6 +315,20 @@
                   << " because type already has ID " << std::hex << (int)id.type_id());
       return false;
     }
+  } else {
+    // Ensure that staged public resources cannot have the same type name and type id with
+    // non staged public resources.
+    auto non_staged_type = non_staged_type_ids_.find(name.type.type);
+    if (non_staged_type != non_staged_type_ids_.end() && non_staged_type->second == id.type_id()) {
+      diag->Error(
+          android::DiagMessage()
+          << "can`t assign type ID " << fmt::format("{:#04x}", (int)id.type_id())
+          << " to staged type " << name.type.type << " because type ID "
+          << fmt::format("{:#04x}", (int)id.type_id())
+          << " already has been assigned to a non staged resource type with the same type name");
+      diag->Error(android::DiagMessage() << staged_type_overlap_error);
+      return false;
+    }
   }
 
   auto assign_result = type->second.ReserveId(name, id);
diff --git a/tools/aapt2/compile/IdAssigner_test.cpp b/tools/aapt2/compile/IdAssigner_test.cpp
index 8911dad..ce45b7c 100644
--- a/tools/aapt2/compile/IdAssigner_test.cpp
+++ b/tools/aapt2/compile/IdAssigner_test.cpp
@@ -117,14 +117,28 @@
 }
 
 TEST_F(IdAssignerTests, FailWhenTypeHasTwoNonStagedIdsRegardlessOfStagedId) {
-  auto table = test::ResourceTableBuilder()
-                   .AddSimple("android:attr/foo", ResourceId(0x01050000))
-                   .AddSimple("android:attr/bar", ResourceId(0x01ff0006))
-                   .Add(NewResourceBuilder("android:attr/staged_baz")
-                            .SetId(0x01ff0000)
-                            .SetVisibility({.staged_api = true})
-                            .Build())
-                   .Build();
+  auto table =
+      test::ResourceTableBuilder()
+          .AddSimple("android:attr/foo", ResourceId(0x01050000))
+          .AddSimple("android:attr/bar", ResourceId(0x01ff0006))
+          .Add(NewResourceBuilder("android:attr/staged_baz")
+                   .SetId(0x01ff0000)
+                   .SetVisibility({.staged_api = true, .level = Visibility::Level::kPublic})
+                   .Build())
+          .Build();
+  IdAssigner assigner;
+  ASSERT_FALSE(assigner.Consume(context.get(), table.get()));
+}
+
+TEST_F(IdAssignerTests, FailWhenTypeHaveBothStagedAndNonStagedIds) {
+  auto table =
+      test::ResourceTableBuilder()
+          .AddSimple("android:attr/foo", ResourceId(0x01010000))
+          .Add(NewResourceBuilder("android:bool/staged_baz")
+                   .SetId(0x01010001)
+                   .SetVisibility({.staged_api = true, .level = Visibility::Level::kPublic})
+                   .Build())
+          .Build();
   IdAssigner assigner;
   ASSERT_FALSE(assigner.Consume(context.get(), table.get()));
 }
diff --git a/tools/aapt2/compile/PseudolocaleGenerator.cpp b/tools/aapt2/compile/PseudolocaleGenerator.cpp
index 09a8560..8143052 100644
--- a/tools/aapt2/compile/PseudolocaleGenerator.cpp
+++ b/tools/aapt2/compile/PseudolocaleGenerator.cpp
@@ -16,11 +16,15 @@
 
 #include "compile/PseudolocaleGenerator.h"
 
+#include <stdint.h>
+
 #include <algorithm>
+#include <random>
 
 #include "ResourceTable.h"
 #include "ResourceValues.h"
 #include "ValueVisitor.h"
+#include "androidfw/ResourceTypes.h"
 #include "androidfw/Util.h"
 #include "compile/Pseudolocalizer.h"
 #include "util/Util.h"
@@ -293,8 +297,85 @@
   Pseudolocalizer localizer_;
 };
 
+class GrammaticalGenderVisitor : public ValueVisitor {
+ public:
+  std::unique_ptr<Value> value;
+  std::unique_ptr<Item> item;
+
+  GrammaticalGenderVisitor(android::StringPool* pool, uint8_t grammaticalInflection)
+      : pool_(pool), grammaticalInflection_(grammaticalInflection) {
+  }
+
+  void Visit(Plural* plural) override {
+    CloningValueTransformer cloner(pool_);
+    std::unique_ptr<Plural> grammatical_gendered = util::make_unique<Plural>();
+    for (size_t i = 0; i < plural->values.size(); i++) {
+      if (plural->values[i]) {
+        GrammaticalGenderVisitor sub_visitor(pool_, grammaticalInflection_);
+        plural->values[i]->Accept(&sub_visitor);
+        if (sub_visitor.item) {
+          grammatical_gendered->values[i] = std::move(sub_visitor.item);
+        } else {
+          grammatical_gendered->values[i] = plural->values[i]->Transform(cloner);
+        }
+      }
+    }
+    grammatical_gendered->SetSource(plural->GetSource());
+    grammatical_gendered->SetWeak(true);
+    value = std::move(grammatical_gendered);
+  }
+
+  std::string AddGrammaticalGenderPrefix(const std::string_view& original_string) {
+    std::string result;
+    switch (grammaticalInflection_) {
+      case android::ResTable_config::GRAMMATICAL_GENDER_MASCULINE:
+        result = std::string("(M)") + std::string(original_string);
+        break;
+      case android::ResTable_config::GRAMMATICAL_GENDER_FEMININE:
+        result = std::string("(F)") + std::string(original_string);
+        break;
+      case android::ResTable_config::GRAMMATICAL_GENDER_NEUTER:
+        result = std::string("(N)") + std::string(original_string);
+        break;
+      default:
+        result = std::string(original_string);
+        break;
+    }
+    return result;
+  }
+
+  void Visit(String* string) override {
+    std::string prefixed_string = AddGrammaticalGenderPrefix(std::string(*string->value));
+    std::unique_ptr<String> grammatical_gendered =
+        util::make_unique<String>(pool_->MakeRef(prefixed_string));
+    grammatical_gendered->SetSource(string->GetSource());
+    grammatical_gendered->SetWeak(true);
+    item = std::move(grammatical_gendered);
+  }
+
+  void Visit(StyledString* string) override {
+    std::string prefixed_string = AddGrammaticalGenderPrefix(std::string(string->value->value));
+    android::StyleString new_string;
+    new_string.str = std::move(prefixed_string);
+    for (const android::StringPool::Span& span : string->value->spans) {
+      new_string.spans.emplace_back(android::Span{*span.name, span.first_char, span.last_char});
+    }
+    std::unique_ptr<StyledString> grammatical_gendered =
+        util::make_unique<StyledString>(pool_->MakeRef(new_string));
+    grammatical_gendered->SetSource(string->GetSource());
+    grammatical_gendered->SetWeak(true);
+    item = std::move(grammatical_gendered);
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(GrammaticalGenderVisitor);
+  android::StringPool* pool_;
+  uint8_t grammaticalInflection_;
+};
+
 ConfigDescription ModifyConfigForPseudoLocale(const ConfigDescription& base,
-                                              Pseudolocalizer::Method m) {
+                                              Pseudolocalizer::Method m,
+                                              uint8_t grammaticalInflection) {
   ConfigDescription modified = base;
   switch (m) {
     case Pseudolocalizer::Method::kAccent:
@@ -313,12 +394,64 @@
     default:
       break;
   }
+  modified.grammaticalInflection = grammaticalInflection;
   return modified;
 }
 
+void GrammaticalGender(ResourceConfigValue* original_value,
+                       ResourceConfigValue* localized_config_value, android::StringPool* pool,
+                       ResourceEntry* entry, const Pseudolocalizer::Method method,
+                       uint8_t grammaticalInflection) {
+  GrammaticalGenderVisitor visitor(pool, grammaticalInflection);
+  localized_config_value->value->Accept(&visitor);
+
+  std::unique_ptr<Value> grammatical_gendered_value;
+  if (visitor.value) {
+    grammatical_gendered_value = std::move(visitor.value);
+  } else if (visitor.item) {
+    grammatical_gendered_value = std::move(visitor.item);
+  }
+  if (!grammatical_gendered_value) {
+    return;
+  }
+
+  ConfigDescription config =
+      ModifyConfigForPseudoLocale(original_value->config, method, grammaticalInflection);
+
+  ResourceConfigValue* grammatical_gendered_config_value =
+      entry->FindOrCreateValue(config, original_value->product);
+  if (!grammatical_gendered_config_value->value) {
+    // Only use auto-generated pseudo-localization if none is defined.
+    grammatical_gendered_config_value->value = std::move(grammatical_gendered_value);
+  }
+}
+
+const uint32_t MASK_MASCULINE = 1;  // Bit mask for masculine
+const uint32_t MASK_FEMININE = 2;   // Bit mask for feminine
+const uint32_t MASK_NEUTER = 4;     // Bit mask for neuter
+
+void GrammaticalGenderIfNeeded(ResourceConfigValue* original_value, ResourceConfigValue* new_value,
+                               android::StringPool* pool, ResourceEntry* entry,
+                               const Pseudolocalizer::Method method, uint32_t gender_state) {
+  if (gender_state & MASK_FEMININE) {
+    GrammaticalGender(original_value, new_value, pool, entry, method,
+                      android::ResTable_config::GRAMMATICAL_GENDER_FEMININE);
+  }
+
+  if (gender_state & MASK_MASCULINE) {
+    GrammaticalGender(original_value, new_value, pool, entry, method,
+                      android::ResTable_config::GRAMMATICAL_GENDER_MASCULINE);
+  }
+
+  if (gender_state & MASK_NEUTER) {
+    GrammaticalGender(original_value, new_value, pool, entry, method,
+                      android::ResTable_config::GRAMMATICAL_GENDER_NEUTER);
+  }
+}
+
 void PseudolocalizeIfNeeded(const Pseudolocalizer::Method method,
                             ResourceConfigValue* original_value, android::StringPool* pool,
-                            ResourceEntry* entry) {
+                            ResourceEntry* entry, uint32_t gender_state, bool gender_flag) {
   Visitor visitor(pool, method);
   original_value->value->Accept(&visitor);
 
@@ -333,8 +466,8 @@
     return;
   }
 
-  ConfigDescription config_with_accent =
-      ModifyConfigForPseudoLocale(original_value->config, method);
+  ConfigDescription config_with_accent = ModifyConfigForPseudoLocale(
+      original_value->config, method, android::ResTable_config::GRAMMATICAL_GENDER_ANY);
 
   ResourceConfigValue* new_config_value =
       entry->FindOrCreateValue(config_with_accent, original_value->product);
@@ -342,6 +475,9 @@
     // Only use auto-generated pseudo-localization if none is defined.
     new_config_value->value = std::move(localized_value);
   }
+  if (gender_flag) {
+    GrammaticalGenderIfNeeded(original_value, new_config_value, pool, entry, method, gender_state);
+  }
 }
 
 // A value is pseudolocalizable if it does not define a locale (or is the default locale) and is
@@ -356,16 +492,71 @@
 
 }  // namespace
 
+bool ParseGenderValuesAndSaveState(const std::string& grammatical_gender_values,
+                                   uint32_t* gender_state, android::IDiagnostics* diag) {
+  std::vector<std::string> values = util::SplitAndLowercase(grammatical_gender_values, ',');
+  for (size_t i = 0; i < values.size(); i++) {
+    if (values[i].length() != 0) {
+      if (values[i] == "f") {
+        *gender_state |= MASK_FEMININE;
+      } else if (values[i] == "m") {
+        *gender_state |= MASK_MASCULINE;
+      } else if (values[i] == "n") {
+        *gender_state |= MASK_NEUTER;
+      } else {
+        diag->Error(android::DiagMessage() << "Invalid grammatical gender value: " << values[i]);
+        return false;
+      }
+    }
+  }
+  return true;
+}
+
+bool ParseGenderRatio(const std::string& grammatical_gender_ratio, float* gender_ratio,
+                      android::IDiagnostics* diag) {
+  const char* input = grammatical_gender_ratio.c_str();
+  char* endPtr;
+  errno = 0;
+  *gender_ratio = strtof(input, &endPtr);
+  if (endPtr == input || *endPtr != '\0' || errno == ERANGE || *gender_ratio < 0 ||
+      *gender_ratio > 1) {
+    diag->Error(android::DiagMessage()
+                << "Invalid grammatical gender ratio: " << grammatical_gender_ratio
+                << ", must be a real number between 0 and 1");
+    return false;
+  }
+  return true;
+}
+
 bool PseudolocaleGenerator::Consume(IAaptContext* context, ResourceTable* table) {
+  uint32_t gender_state = 0;
+  if (!ParseGenderValuesAndSaveState(grammatical_gender_values_, &gender_state,
+                                     context->GetDiagnostics())) {
+    return false;
+  }
+
+  float gender_ratio = 0;
+  if (!ParseGenderRatio(grammatical_gender_ratio_, &gender_ratio, context->GetDiagnostics())) {
+    return false;
+  }
+
+  std::random_device rd;
+  std::mt19937 gen(rd());
+  std::uniform_real_distribution<> distrib(0.0, 1.0);
+
   for (auto& package : table->packages) {
     for (auto& type : package->types) {
       for (auto& entry : type->entries) {
+        bool gender_flag = false;
+        if (distrib(gen) < gender_ratio) {
+          gender_flag = true;
+        }
         std::vector<ResourceConfigValue*> values = entry->FindValuesIf(IsPseudolocalizable);
         for (ResourceConfigValue* value : values) {
           PseudolocalizeIfNeeded(Pseudolocalizer::Method::kAccent, value, &table->string_pool,
-                                 entry.get());
+                                 entry.get(), gender_state, gender_flag);
           PseudolocalizeIfNeeded(Pseudolocalizer::Method::kBidi, value, &table->string_pool,
-                                 entry.get());
+                                 entry.get(), gender_state, gender_flag);
         }
       }
     }
diff --git a/tools/aapt2/compile/PseudolocaleGenerator.h b/tools/aapt2/compile/PseudolocaleGenerator.h
index 44e6e3e..ce92008 100644
--- a/tools/aapt2/compile/PseudolocaleGenerator.h
+++ b/tools/aapt2/compile/PseudolocaleGenerator.h
@@ -27,8 +27,19 @@
                                                          Pseudolocalizer::Method method,
                                                          android::StringPool* pool);
 
-struct PseudolocaleGenerator : public IResourceTableConsumer {
-  bool Consume(IAaptContext* context, ResourceTable* table) override;
+class PseudolocaleGenerator : public IResourceTableConsumer {
+ public:
+  explicit PseudolocaleGenerator(std::string grammatical_gender_values,
+                                 std::string grammatical_gender_ratio)
+      : grammatical_gender_values_(std::move(grammatical_gender_values)),
+        grammatical_gender_ratio_(std::move(grammatical_gender_ratio)) {
+  }
+
+  bool Consume(IAaptContext* context, ResourceTable* table);
+
+ private:
+  std::string grammatical_gender_values_;
+  std::string grammatical_gender_ratio_;
 };
 
 }  // namespace aapt
diff --git a/tools/aapt2/compile/PseudolocaleGenerator_test.cpp b/tools/aapt2/compile/PseudolocaleGenerator_test.cpp
index 2f90cbf..1477ebf 100644
--- a/tools/aapt2/compile/PseudolocaleGenerator_test.cpp
+++ b/tools/aapt2/compile/PseudolocaleGenerator_test.cpp
@@ -197,7 +197,7 @@
   val->SetTranslatable(false);
 
   std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
-  PseudolocaleGenerator generator;
+  PseudolocaleGenerator generator(std::string("f,m,n"), std::string("1.0"));
   ASSERT_TRUE(generator.Consume(context.get(), table.get()));
 
   // Normal pseudolocalization should take place.
@@ -249,7 +249,7 @@
   expected->values = {util::make_unique<String>(table->string_pool.MakeRef("[žéŕö one]")),
                       util::make_unique<String>(table->string_pool.MakeRef("[öñé one]"))};
 
-  PseudolocaleGenerator generator;
+  PseudolocaleGenerator generator(std::string("f,m,n"), std::string("1.0"));
   ASSERT_TRUE(generator.Consume(context.get(), table.get()));
 
   const auto* actual = test::GetValueForConfig<Plural>(table.get(), "com.pkg:plurals/foo",
@@ -287,7 +287,7 @@
                                    context->GetDiagnostics()));
   }
 
-  PseudolocaleGenerator generator;
+  PseudolocaleGenerator generator(std::string("f,m,n"), std::string("1.0"));
   ASSERT_TRUE(generator.Consume(context.get(), table.get()));
 
   StyledString* new_styled_string = test::GetValueForConfig<StyledString>(
@@ -305,4 +305,213 @@
   EXPECT_NE(std::string::npos, new_string->value->find("world"));
 }
 
+TEST(PseudolocaleGeneratorTest, PseudolocalizeGrammaticalGenderForString) {
+  std::unique_ptr<ResourceTable> table =
+      test::ResourceTableBuilder().AddString("android:string/foo", "foo").Build();
+
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  PseudolocaleGenerator generator(std::string("f,m,n"), std::string("1.0"));
+  ASSERT_TRUE(generator.Consume(context.get(), table.get()));
+
+  String* locale = test::GetValueForConfig<String>(table.get(), "android:string/foo",
+                                                   test::ParseConfigOrDie("en-rXA"));
+  ASSERT_NE(nullptr, locale);
+
+  // Grammatical gendered string
+  auto config_feminine = test::ParseConfigOrDie("en-rXA-feminine");
+  config_feminine.sdkVersion = android::ResTable_config::SDKVERSION_ANY;
+  String* feminine =
+      test::GetValueForConfig<String>(table.get(), "android:string/foo", config_feminine);
+  ASSERT_NE(nullptr, feminine);
+  EXPECT_EQ(std::string("(F)") + *locale->value, *feminine->value);
+
+  auto config_masculine = test::ParseConfigOrDie("en-rXA-masculine");
+  config_masculine.sdkVersion = android::ResTable_config::SDKVERSION_ANY;
+  String* masculine =
+      test::GetValueForConfig<String>(table.get(), "android:string/foo", config_masculine);
+  ASSERT_NE(nullptr, masculine);
+  EXPECT_EQ(std::string("(M)") + *locale->value, *masculine->value);
+
+  auto config_neuter = test::ParseConfigOrDie("en-rXA-neuter");
+  config_neuter.sdkVersion = android::ResTable_config::SDKVERSION_ANY;
+  String* neuter =
+      test::GetValueForConfig<String>(table.get(), "android:string/foo", config_neuter);
+  ASSERT_NE(nullptr, neuter);
+  EXPECT_EQ(std::string("(N)") + *locale->value, *neuter->value);
+}
+
+TEST(PseudolocaleGeneratorTest, PseudolocalizeGrammaticalGenderForPlural) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder().Build();
+  std::unique_ptr<Plural> plural = util::make_unique<Plural>();
+  plural->values = {util::make_unique<String>(table->string_pool.MakeRef("zero")),
+                    util::make_unique<String>(table->string_pool.MakeRef("one"))};
+  ASSERT_TRUE(table->AddResource(NewResourceBuilder(test::ParseNameOrDie("com.pkg:plurals/foo"))
+                                     .SetValue(std::move(plural))
+                                     .Build(),
+                                 context->GetDiagnostics()));
+  PseudolocaleGenerator generator(std::string("f,m,n"), std::string("1.0"));
+  ASSERT_TRUE(generator.Consume(context.get(), table.get()));
+
+  Plural* actual = test::GetValueForConfig<Plural>(table.get(), "com.pkg:plurals/foo",
+                                                   test::ParseConfigOrDie("en-rXA"));
+  ASSERT_NE(nullptr, actual);
+
+  // Grammatical gendered Plural
+  auto config_feminine = test::ParseConfigOrDie("en-rXA-feminine");
+  config_feminine.sdkVersion = android::ResTable_config::SDKVERSION_ANY;
+  Plural* actual_feminine =
+      test::GetValueForConfig<Plural>(table.get(), "com.pkg:plurals/foo", config_feminine);
+  for (size_t i = 0; i < actual->values.size(); i++) {
+    if (actual->values[i]) {
+      String* locale = ValueCast<String>(actual->values[i].get());
+      String* feminine = ValueCast<String>(actual_feminine->values[i].get());
+      EXPECT_EQ(std::string("(F)") + *locale->value, *feminine->value);
+    }
+  }
+
+  auto config_masculine = test::ParseConfigOrDie("en-rXA-masculine");
+  config_masculine.sdkVersion = android::ResTable_config::SDKVERSION_ANY;
+  Plural* actual_masculine =
+      test::GetValueForConfig<Plural>(table.get(), "com.pkg:plurals/foo", config_masculine);
+  ASSERT_NE(nullptr, actual_masculine);
+  for (size_t i = 0; i < actual->values.size(); i++) {
+    if (actual->values[i]) {
+      String* locale = ValueCast<String>(actual->values[i].get());
+      String* masculine = ValueCast<String>(actual_masculine->values[i].get());
+      EXPECT_EQ(std::string("(M)") + *locale->value, *masculine->value);
+    }
+  }
+
+  auto config_neuter = test::ParseConfigOrDie("en-rXA-neuter");
+  config_neuter.sdkVersion = android::ResTable_config::SDKVERSION_ANY;
+  Plural* actual_neuter =
+      test::GetValueForConfig<Plural>(table.get(), "com.pkg:plurals/foo", config_neuter);
+  for (size_t i = 0; i < actual->values.size(); i++) {
+    if (actual->values[i]) {
+      String* locale = ValueCast<String>(actual->values[i].get());
+      String* neuter = ValueCast<String>(actual_neuter->values[i].get());
+      EXPECT_EQ(std::string("(N)") + *locale->value, *neuter->value);
+    }
+  }
+}
+
+TEST(PseudolocaleGeneratorTest, PseudolocalizeGrammaticalGenderForStyledString) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+  std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder().Build();
+  android::StyleString original_style;
+  original_style.str = "Hello world!";
+  original_style.spans = {android::Span{"i", 1, 10}};
+
+  std::unique_ptr<StyledString> original =
+      util::make_unique<StyledString>(table->string_pool.MakeRef(original_style));
+  ASSERT_TRUE(table->AddResource(NewResourceBuilder(test::ParseNameOrDie("android:string/foo"))
+                                     .SetValue(std::move(original))
+                                     .Build(),
+                                 context->GetDiagnostics()));
+  PseudolocaleGenerator generator(std::string("f,m,n"), std::string("1.0"));
+  ASSERT_TRUE(generator.Consume(context.get(), table.get()));
+
+  StyledString* locale = test::GetValueForConfig<StyledString>(table.get(), "android:string/foo",
+                                                               test::ParseConfigOrDie("en-rXA"));
+  ASSERT_NE(nullptr, locale);
+  EXPECT_EQ(1, locale->value->spans.size());
+  EXPECT_EQ(std::string("i"), *locale->value->spans[0].name);
+
+  // Grammatical gendered StyledString
+  auto config_feminine = test::ParseConfigOrDie("en-rXA-feminine");
+  config_feminine.sdkVersion = android::ResTable_config::SDKVERSION_ANY;
+  StyledString* feminine =
+      test::GetValueForConfig<StyledString>(table.get(), "android:string/foo", config_feminine);
+  ASSERT_NE(nullptr, feminine);
+  EXPECT_EQ(1, feminine->value->spans.size());
+  EXPECT_EQ(std::string("i"), *feminine->value->spans[0].name);
+  EXPECT_EQ(std::string("(F)") + locale->value->value, feminine->value->value);
+
+  auto config_masculine = test::ParseConfigOrDie("en-rXA-masculine");
+  config_masculine.sdkVersion = android::ResTable_config::SDKVERSION_ANY;
+  StyledString* masculine =
+      test::GetValueForConfig<StyledString>(table.get(), "android:string/foo", config_masculine);
+  ASSERT_NE(nullptr, masculine);
+  EXPECT_EQ(1, masculine->value->spans.size());
+  EXPECT_EQ(std::string("i"), *masculine->value->spans[0].name);
+  EXPECT_EQ(std::string("(M)") + locale->value->value, masculine->value->value);
+
+  auto config_neuter = test::ParseConfigOrDie("en-rXA-neuter");
+  config_neuter.sdkVersion = android::ResTable_config::SDKVERSION_ANY;
+  StyledString* neuter =
+      test::GetValueForConfig<StyledString>(table.get(), "android:string/foo", config_neuter);
+  ASSERT_NE(nullptr, neuter);
+  EXPECT_EQ(1, neuter->value->spans.size());
+  EXPECT_EQ(std::string("i"), *neuter->value->spans[0].name);
+  EXPECT_EQ(std::string("(N)") + locale->value->value, neuter->value->value);
+}
+
+TEST(PseudolocaleGeneratorTest, GrammaticalGenderForCertainValues) {
+  // single gender value
+  std::unique_ptr<ResourceTable> table_0 =
+      test::ResourceTableBuilder().AddString("android:string/foo", "foo").Build();
+
+  std::unique_ptr<IAaptContext> context_0 = test::ContextBuilder().Build();
+  PseudolocaleGenerator generator_0(std::string("f"), std::string("1.0"));
+  ASSERT_TRUE(generator_0.Consume(context_0.get(), table_0.get()));
+
+  String* locale_0 = test::GetValueForConfig<String>(table_0.get(), "android:string/foo",
+                                                     test::ParseConfigOrDie("en-rXA"));
+  ASSERT_NE(nullptr, locale_0);
+
+  auto config_feminine = test::ParseConfigOrDie("en-rXA-feminine");
+  config_feminine.sdkVersion = android::ResTable_config::SDKVERSION_ANY;
+  String* feminine_0 =
+      test::GetValueForConfig<String>(table_0.get(), "android:string/foo", config_feminine);
+  ASSERT_NE(nullptr, feminine_0);
+  EXPECT_EQ(std::string("(F)") + *locale_0->value, *feminine_0->value);
+
+  auto config_masculine = test::ParseConfigOrDie("en-rXA-masculine");
+  config_masculine.sdkVersion = android::ResTable_config::SDKVERSION_ANY;
+  String* masculine_0 =
+      test::GetValueForConfig<String>(table_0.get(), "android:string/foo", config_masculine);
+  EXPECT_EQ(nullptr, masculine_0);
+
+  auto config_neuter = test::ParseConfigOrDie("en-rXA-neuter");
+  config_neuter.sdkVersion = android::ResTable_config::SDKVERSION_ANY;
+  String* neuter_0 =
+      test::GetValueForConfig<String>(table_0.get(), "android:string/foo", config_neuter);
+  EXPECT_EQ(nullptr, neuter_0);
+
+  // multiple gender values
+  std::unique_ptr<ResourceTable> table_1 =
+      test::ResourceTableBuilder().AddString("android:string/foo", "foo").Build();
+
+  std::unique_ptr<IAaptContext> context_1 = test::ContextBuilder().Build();
+  PseudolocaleGenerator generator_1(std::string("f,n"), std::string("1.0"));
+  ASSERT_TRUE(generator_1.Consume(context_1.get(), table_1.get()));
+
+  String* locale_1 = test::GetValueForConfig<String>(table_1.get(), "android:string/foo",
+                                                     test::ParseConfigOrDie("en-rXA"));
+  ASSERT_NE(nullptr, locale_1);
+
+  String* feminine_1 =
+      test::GetValueForConfig<String>(table_1.get(), "android:string/foo", config_feminine);
+  ASSERT_NE(nullptr, feminine_1);
+  EXPECT_EQ(std::string("(F)") + *locale_1->value, *feminine_1->value);
+
+  String* masculine_1 =
+      test::GetValueForConfig<String>(table_1.get(), "android:string/foo", config_masculine);
+  EXPECT_EQ(nullptr, masculine_1);
+
+  String* neuter_1 =
+      test::GetValueForConfig<String>(table_1.get(), "android:string/foo", config_neuter);
+  ASSERT_NE(nullptr, neuter_1);
+  EXPECT_EQ(std::string("(N)") + *locale_1->value, *neuter_1->value);
+
+  // invalid gender value
+  std::unique_ptr<ResourceTable> table_2 =
+      test::ResourceTableBuilder().AddString("android:string/foo", "foo").Build();
+
+  std::unique_ptr<IAaptContext> context_2 = test::ContextBuilder().Build();
+  PseudolocaleGenerator generator_2(std::string("invald,"), std::string("1.0"));
+  ASSERT_FALSE(generator_2.Consume(context_2.get(), table_2.get()));
+}
+
 }  // namespace aapt
diff --git a/tools/aapt2/dump/DumpManifest.cpp b/tools/aapt2/dump/DumpManifest.cpp
index a43bf1b..6bf265d 100644
--- a/tools/aapt2/dump/DumpManifest.cpp
+++ b/tools/aapt2/dump/DumpManifest.cpp
@@ -837,9 +837,9 @@
 
   void Print(text::Printer* printer) override {
     if (min_sdk) {
-      printer->Print(StringPrintf("sdkVersion:'%d'\n", *min_sdk));
+      printer->Print(StringPrintf("minSdkVersion:'%d'\n", *min_sdk));
     } else if (min_sdk_name) {
-      printer->Print(StringPrintf("sdkVersion:'%s'\n", min_sdk_name->data()));
+      printer->Print(StringPrintf("minSdkVersion:'%s'\n", min_sdk_name->data()));
     }
     if (max_sdk) {
       printer->Print(StringPrintf("maxSdkVersion:'%d'\n", *max_sdk));
diff --git a/tools/aapt2/format/binary/TableFlattener.cpp b/tools/aapt2/format/binary/TableFlattener.cpp
index 8c594ba..f056110 100644
--- a/tools/aapt2/format/binary/TableFlattener.cpp
+++ b/tools/aapt2/format/binary/TableFlattener.cpp
@@ -68,9 +68,8 @@
 class PackageFlattener {
  public:
   PackageFlattener(IAaptContext* context, const ResourceTablePackageView& package,
-                   const std::map<size_t, std::string>* shared_libs,
-                   SparseEntriesMode sparse_entries,
-                   bool compact_entries,
+                   const ResourceTable::ReferencedPackages* shared_libs,
+                   SparseEntriesMode sparse_entries, bool compact_entries,
                    bool collapse_key_stringpool,
                    const std::set<ResourceName>& name_collapse_exemptions,
                    bool deduplicate_entry_values)
@@ -145,10 +144,9 @@
   // 2) the entries will be accessed on platforms U+, and
   // 3) all entry keys can be encoded in 16 bits
   bool UseCompactEntries(const ConfigDescription& config, std::vector<FlatEntry>* entries) const {
-    return compact_entries_ &&
-        (context_->GetMinSdkVersion() > SDK_TIRAMISU || config.sdkVersion > SDK_TIRAMISU) &&
-        std::none_of(entries->cbegin(), entries->cend(),
-          [](const auto& e) { return e.entry_key >= std::numeric_limits<uint16_t>::max(); });
+    return compact_entries_ && context_->GetMinSdkVersion() > SDK_TIRAMISU &&
+      std::none_of(entries->cbegin(), entries->cend(),
+        [](const auto& e) { return e.entry_key >= std::numeric_limits<uint16_t>::max(); });
   }
 
   std::unique_ptr<ResEntryWriter> GetResEntryWriter(bool dedup, bool compact, BigBuffer* buffer) {
@@ -548,7 +546,7 @@
   IAaptContext* context_;
   android::IDiagnostics* diag_;
   const ResourceTablePackageView package_;
-  const std::map<size_t, std::string>* shared_libs_;
+  const ResourceTable::ReferencedPackages* shared_libs_;
   SparseEntriesMode sparse_entries_;
   bool compact_entries_;
   android::StringPool type_pool_;
diff --git a/tools/aapt2/format/proto/ProtoDeserialize.cpp b/tools/aapt2/format/proto/ProtoDeserialize.cpp
index 09ef9bd..e1a3013 100644
--- a/tools/aapt2/format/proto/ProtoDeserialize.cpp
+++ b/tools/aapt2/format/proto/ProtoDeserialize.cpp
@@ -916,7 +916,7 @@
         } break;
         case pb::Primitive::kIntDecimalValue: {
           val.dataType = android::Res_value::TYPE_INT_DEC;
-          val.data = static_cast<uint32_t>(pb_prim.int_decimal_value());
+          val.data = static_cast<int32_t>(pb_prim.int_decimal_value());
         } break;
         case pb::Primitive::kIntHexadecimalValue: {
           val.dataType = android::Res_value::TYPE_INT_HEX;
diff --git a/tools/aapt2/format/proto/ProtoSerialize_test.cpp b/tools/aapt2/format/proto/ProtoSerialize_test.cpp
index afb8356..fa8860f 100644
--- a/tools/aapt2/format/proto/ProtoSerialize_test.cpp
+++ b/tools/aapt2/format/proto/ProtoSerialize_test.cpp
@@ -250,6 +250,7 @@
 }
 
 TEST(ProtoSerializeTest, SerializeAndDeserializeXml) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
   xml::Element element;
   element.line_number = 22;
   element.column_number = 23;
@@ -269,8 +270,8 @@
   attr.namespace_uri = xml::kSchemaAndroid;
   attr.value = "23dp";
   attr.compiled_attribute = xml::AaptAttribute(Attribute{}, ResourceId(0x01010000));
-  attr.compiled_value =
-      ResourceUtils::TryParseItemForAttribute(attr.value, android::ResTable_map::TYPE_DIMENSION);
+  attr.compiled_value = ResourceUtils::TryParseItemForAttribute(
+      context->GetDiagnostics(), attr.value, android::ResTable_map::TYPE_DIMENSION);
   attr.compiled_value->SetSource(android::Source().WithLine(25));
   element.attributes.push_back(std::move(attr));
 
diff --git a/tools/aapt2/integration-tests/DumpTest/built_with_aapt_expected.txt b/tools/aapt2/integration-tests/DumpTest/built_with_aapt_expected.txt
index cc0b3bf..d14e5fb5 100644
--- a/tools/aapt2/integration-tests/DumpTest/built_with_aapt_expected.txt
+++ b/tools/aapt2/integration-tests/DumpTest/built_with_aapt_expected.txt
@@ -1,5 +1,5 @@
 package: name='com.aapt.app' versionCode='222' versionName='222' platformBuildVersionName='12' platformBuildVersionCode='32' compileSdkVersion='32' compileSdkVersionCodename='12'
-sdkVersion:'22'
+minSdkVersion:'22'
 targetSdkVersion:'32'
 application: label='App' icon=''
 feature-group: label=''
diff --git a/tools/aapt2/integration-tests/DumpTest/components_expected.txt b/tools/aapt2/integration-tests/DumpTest/components_expected.txt
index 9c81fb8..93cce0a 100644
--- a/tools/aapt2/integration-tests/DumpTest/components_expected.txt
+++ b/tools/aapt2/integration-tests/DumpTest/components_expected.txt
@@ -1,5 +1,5 @@
 package: name='com.example.bundletool.minimal' versionCode='1' versionName='1.0' platformBuildVersionName='12' platformBuildVersionCode='31' compileSdkVersion='31' compileSdkVersionCodename='12'
-sdkVersion:'21'
+minSdkVersion:'21'
 targetSdkVersion:'31'
 uses-configuration: reqTouchScreen='3' reqKeyboardType='2' reqHardKeyboard='-1' reqNavigation='3' reqFiveWayNav='-1'
 supports-gl-texture:'GL_OES_compressed_paletted_texture'
diff --git a/tools/aapt2/integration-tests/DumpTest/minimal_expected.txt b/tools/aapt2/integration-tests/DumpTest/minimal_expected.txt
index 85ab5d8..aafca68 100644
--- a/tools/aapt2/integration-tests/DumpTest/minimal_expected.txt
+++ b/tools/aapt2/integration-tests/DumpTest/minimal_expected.txt
@@ -1,5 +1,5 @@
 package: name='com.lato.bubblegirl' versionCode='33' versionName='1.0.0' platformBuildVersionName='8.1.0' platformBuildVersionCode='27'
-sdkVersion:'19'
+minSdkVersion:'19'
 targetSdkVersion:'26'
 application-label:'Bubble Girl'
 application-label-ar:'Bubble Girl'
diff --git a/tools/aapt2/integration-tests/DumpTest/multiple_uses_sdk_expected.txt b/tools/aapt2/integration-tests/DumpTest/multiple_uses_sdk_expected.txt
index 85e8d0a..f48f381 100644
--- a/tools/aapt2/integration-tests/DumpTest/multiple_uses_sdk_expected.txt
+++ b/tools/aapt2/integration-tests/DumpTest/multiple_uses_sdk_expected.txt
@@ -1,5 +1,5 @@
 package: name='com.test.e17wmultiapknexus' versionCode='107' versionName='14' platformBuildVersionName='2.3.3' platformBuildVersionCode='10'
-sdkVersion:'1'
+minSdkVersion:'1'
 application-label:'w45wmultiapknexus_10'
 application-icon-120:'res/drawable-ldpi-v4/icon.png'
 application-icon-160:'res/drawable-mdpi-v4/icon.png'
diff --git a/tools/aapt2/link/ReferenceLinker.cpp b/tools/aapt2/link/ReferenceLinker.cpp
index 9dadfb2..c69b325 100644
--- a/tools/aapt2/link/ReferenceLinker.cpp
+++ b/tools/aapt2/link/ReferenceLinker.cpp
@@ -164,8 +164,8 @@
 std::unique_ptr<Item> ReferenceLinkerTransformer::ParseValueWithAttribute(
     std::unique_ptr<Item> value, const Attribute* attr) {
   if (RawString* raw_string = ValueCast<RawString>(value.get())) {
-    std::unique_ptr<Item> transformed =
-        ResourceUtils::TryParseItemForAttribute(*raw_string->value, attr);
+    std::unique_ptr<Item> transformed = ResourceUtils::TryParseItemForAttribute(
+        context_->GetDiagnostics(), *raw_string->value, attr);
 
     // If we could not parse as any specific type, try a basic STRING.
     if (!transformed && (attr->type_mask & android::ResTable_map::TYPE_STRING)) {
diff --git a/tools/aapt2/link/XmlReferenceLinker.cpp b/tools/aapt2/link/XmlReferenceLinker.cpp
index d2e9bd7..aec7ceb 100644
--- a/tools/aapt2/link/XmlReferenceLinker.cpp
+++ b/tools/aapt2/link/XmlReferenceLinker.cpp
@@ -90,7 +90,8 @@
         attribute = &attr.compiled_attribute.value().attribute;
       }
 
-      attr.compiled_value = ResourceUtils::TryParseItemForAttribute(attr.value, attribute);
+      attr.compiled_value = ResourceUtils::TryParseItemForAttribute(context_->GetDiagnostics(),
+                                                                    attr.value, attribute);
       if (attr.compiled_value) {
         // With a compiledValue, we must resolve the reference and assign it an ID.
         attr.compiled_value->SetSource(source);
diff --git a/tools/aapt2/optimize/Obfuscator.cpp b/tools/aapt2/optimize/Obfuscator.cpp
index 8f12f735..903cdf8 100644
--- a/tools/aapt2/optimize/Obfuscator.cpp
+++ b/tools/aapt2/optimize/Obfuscator.cpp
@@ -40,9 +40,9 @@
       collapse_key_stringpool_(optimizeOptions.table_flattener_options.collapse_key_stringpool) {
 }
 
-std::string ShortenFileName(android::StringPiece file_path, int output_length) {
+std::string Obfuscator::ShortenFileName(android::StringPiece file_path, int output_length) {
   std::size_t hash_num = std::hash<android::StringPiece>{}(file_path);
-  std::string result = "";
+  std::string result;
   // Convert to (modified) base64 so that it is a proper file path.
   for (int i = 0; i < output_length; i++) {
     uint8_t sextet = hash_num & 0x3f;
@@ -52,10 +52,33 @@
   return result;
 }
 
+static std::string RenameDisallowedFileNames(const std::string& file_name) {
+  // We are renaming shortened file names to make sure they not a reserved file name in Windows.
+  // See: https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file. We are renaming
+  // "COM" and "LPT" too because we are appending a number in case of hash collisions; "COM1",
+  // "COM2", etc. are reserved names.
+  static const char* const reserved_windows_names[] = {"CON", "PRN", "AUX", "NUL", "COM", "LPT"};
+  if (file_name.length() == 3) {
+    // Need to convert the file name to uppercase as Windows is case insensitive. E.g., "NuL",
+    // "nul", and "NUl" are also reserved.
+    std::string result_upper_cased(3, 0);
+    std::transform(file_name.begin(), file_name.end(), result_upper_cased.begin(),
+                   [](unsigned char c) { return std::toupper(c); });
+    for (auto reserved_windows_name : reserved_windows_names) {
+      if (result_upper_cased == reserved_windows_name) {
+        // Simple solution to make it a non-reserved name is to add an underscore
+        return "_" + file_name;
+      }
+    }
+  }
+
+  return file_name;
+}
+
 // Return the optimal hash length such that at most 10% of resources collide in
 // their shortened path.
 // Reference: http://matt.might.net/articles/counting-hash-collisions/
-int OptimalShortenedLength(int num_resources) {
+static int OptimalShortenedLength(int num_resources) {
   if (num_resources > 4000) {
     return 3;
   } else {
@@ -63,8 +86,8 @@
   }
 }
 
-std::string GetShortenedPath(android::StringPiece shortened_filename,
-                             android::StringPiece extension, int collision_count) {
+static std::string GetShortenedPath(android::StringPiece shortened_filename,
+                                    android::StringPiece extension, int collision_count) {
   std::string shortened_path = std::string("res/") += shortened_filename;
   if (collision_count > 0) {
     shortened_path += std::to_string(collision_count);
@@ -82,9 +105,9 @@
   }
 };
 
-static bool HandleShortenFilePaths(ResourceTable* table,
-                                   std::map<std::string, std::string>& shortened_path_map,
-                                   const std::set<ResourceName>& path_shorten_exemptions) {
+bool Obfuscator::HandleShortenFilePaths(ResourceTable* table,
+                                        std::map<std::string, std::string>& shortened_path_map,
+                                        const std::set<ResourceName>& path_shorten_exemptions) {
   // used to detect collisions
   std::unordered_set<std::string> shortened_paths;
   std::set<FileReference*, PathComparator> file_refs;
@@ -112,7 +135,8 @@
     // Android detects ColorStateLists via pathname, skip res/color*
     if (util::StartsWith(res_subdir, "res/color")) continue;
 
-    std::string shortened_filename = ShortenFileName(*file_ref->path, num_chars);
+    std::string shortened_filename =
+        RenameDisallowedFileNames(ShortenFileName(*file_ref->path, num_chars));
     int collision_count = 0;
     std::string shortened_path = GetShortenedPath(shortened_filename, extension, collision_count);
     while (shortened_paths.find(shortened_path) != shortened_paths.end()) {
diff --git a/tools/aapt2/optimize/Obfuscator.h b/tools/aapt2/optimize/Obfuscator.h
index 5ccf5438..79d7e08 100644
--- a/tools/aapt2/optimize/Obfuscator.h
+++ b/tools/aapt2/optimize/Obfuscator.h
@@ -53,7 +53,14 @@
       const ResourceNamedType& type_name, const ResourceTableEntryView& entry,
       const android::base::function_ref<void(Result, const ResourceName&)> onObfuscate);
 
+ protected:
+  virtual std::string ShortenFileName(android::StringPiece file_path, int output_length);
+
  private:
+  bool HandleShortenFilePaths(ResourceTable* table,
+                              std::map<std::string, std::string>& shortened_path_map,
+                              const std::set<ResourceName>& path_shorten_exemptions);
+
   TableFlattenerOptions& options_;
   const bool shorten_resource_paths_;
   const bool collapse_key_stringpool_;
diff --git a/tools/aapt2/optimize/Obfuscator_test.cpp b/tools/aapt2/optimize/Obfuscator_test.cpp
index 940cf10..c3429e0 100644
--- a/tools/aapt2/optimize/Obfuscator_test.cpp
+++ b/tools/aapt2/optimize/Obfuscator_test.cpp
@@ -19,6 +19,7 @@
 #include <map>
 #include <memory>
 #include <string>
+#include <utility>
 
 #include "ResourceTable.h"
 #include "android-base/file.h"
@@ -26,6 +27,7 @@
 
 using ::aapt::test::GetValue;
 using ::testing::AnyOf;
+using ::testing::Contains;
 using ::testing::Eq;
 using ::testing::HasSubstr;
 using ::testing::IsFalse;
@@ -33,6 +35,10 @@
 using ::testing::Not;
 using ::testing::NotNull;
 
+namespace aapt {
+
+namespace {
+
 android::StringPiece GetExtension(android::StringPiece path) {
   auto iter = std::find(path.begin(), path.end(), '.');
   return android::StringPiece(iter, path.end() - iter);
@@ -45,7 +51,22 @@
   }
 }
 
-namespace aapt {
+class FakeObfuscator : public Obfuscator {
+ public:
+  explicit FakeObfuscator(OptimizeOptions& optimize_options,
+                          const std::unordered_map<std::string, std::string>& shortened_name_map)
+      : Obfuscator(optimize_options), shortened_name_map_(shortened_name_map) {
+  }
+
+ protected:
+  std::string ShortenFileName(android::StringPiece file_path, int output_length) override {
+    return shortened_name_map_[std::string(file_path)];
+  }
+
+ private:
+  std::unordered_map<std::string, std::string> shortened_name_map_;
+  DISALLOW_COPY_AND_ASSIGN(FakeObfuscator);
+};
 
 TEST(ObfuscatorTest, FileRefPathsChangedInResourceTable) {
   std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
@@ -127,7 +148,7 @@
   EXPECT_THAT(path_map.find("res/drawables/xmlfile2.xml"), Not(Eq(path_map.end())));
 
   FileReference* ref = GetValue<FileReference>(table.get(), "android:drawable/xmlfile");
-  EXPECT_THAT(ref, NotNull());
+  ASSERT_THAT(ref, NotNull());
   ASSERT_THAT(HasFailure(), IsFalse());
   // The path of first drawable in exemption was not changed
   EXPECT_THAT("res/drawables/xmlfile.xml", Eq(*ref->path));
@@ -161,13 +182,78 @@
   ASSERT_THAT(path_map.find("res/drawable/xmlfile.xml"), Not(Eq(path_map.end())));
   ASSERT_THAT(path_map.find("res/drawable/pngfile.png"), Not(Eq(path_map.end())));
 
-  auto shortend_xml_path = path_map[original_xml_path];
-  auto shortend_png_path = path_map[original_png_path];
-
   EXPECT_THAT(GetExtension(path_map[original_xml_path]), Eq(android::StringPiece(".xml")));
   EXPECT_THAT(GetExtension(path_map[original_png_path]), Eq(android::StringPiece(".png")));
 }
 
+TEST(ObfuscatorTest, ShortenedToReservedWindowsNames) {
+  std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+
+  std::string original_path_1 = "res/drawable/pngfile_1.png";
+  std::string original_path_2 = "res/drawable/pngfile_2.png";
+  std::string original_path_3 = "res/drawable/pngfile_3.png";
+  std::string original_path_4 = "res/drawable/pngfile_4.png";
+  std::string original_path_5 = "res/drawable/pngfile_5.png";
+  std::string original_path_6 = "res/drawable/pngfile_6.png";
+  std::string original_path_7 = "res/drawable/pngfile_7.png";
+  std::string original_path_8 = "res/drawable/pngfile_8.png";
+  std::string original_path_9 = "res/drawable/pngfile_9.png";
+
+  std::unique_ptr<ResourceTable> table =
+      test::ResourceTableBuilder()
+          .AddFileReference("android:drawable/pngfile_1", original_path_1)
+          .AddFileReference("android:drawable/pngfile_2", original_path_2)
+          .AddFileReference("android:drawable/pngfile_3", original_path_3)
+          .AddFileReference("android:drawable/pngfile_4", original_path_4)
+          .AddFileReference("android:drawable/pngfile_5", original_path_5)
+          .AddFileReference("android:drawable/pngfile_6", original_path_6)
+          .AddFileReference("android:drawable/pngfile_7", original_path_7)
+          .AddFileReference("android:drawable/pngfile_8", original_path_8)
+          .AddFileReference("android:drawable/pngfile_9", original_path_9)
+          .Build();
+
+  OptimizeOptions options{.shorten_resource_paths = true};
+  std::map<std::string, std::string>& path_map = options.table_flattener_options.shortened_path_map;
+  auto obfuscator = FakeObfuscator(
+      options,
+      {
+          {original_path_1, "CON"},
+          {original_path_2, "Prn"},
+          {original_path_3, "AuX"},
+          {original_path_4, "nul"},
+          {original_path_5, "cOM"},
+          {original_path_6, "lPt"},
+          {original_path_7, "lPt"},
+          {original_path_8, "lPt"},  // 6, 7, and 8 will be appended with a number to disambiguate
+          {original_path_9, "F0o"},  // This one is not reserved
+      });
+  ASSERT_TRUE(obfuscator.Consume(context.get(), table.get()));
+
+  // Expect that the path map is populated
+  ASSERT_THAT(path_map.find(original_path_1), Not(Eq(path_map.end())));
+  ASSERT_THAT(path_map.find(original_path_2), Not(Eq(path_map.end())));
+  ASSERT_THAT(path_map.find(original_path_3), Not(Eq(path_map.end())));
+  ASSERT_THAT(path_map.find(original_path_4), Not(Eq(path_map.end())));
+  ASSERT_THAT(path_map.find(original_path_5), Not(Eq(path_map.end())));
+  ASSERT_THAT(path_map.find(original_path_6), Not(Eq(path_map.end())));
+  ASSERT_THAT(path_map.find(original_path_7), Not(Eq(path_map.end())));
+  ASSERT_THAT(path_map.find(original_path_8), Not(Eq(path_map.end())));
+  ASSERT_THAT(path_map.find(original_path_9), Not(Eq(path_map.end())));
+
+  EXPECT_THAT(path_map[original_path_1], Eq("res/_CON.png"));
+  EXPECT_THAT(path_map[original_path_2], Eq("res/_Prn.png"));
+  EXPECT_THAT(path_map[original_path_3], Eq("res/_AuX.png"));
+  EXPECT_THAT(path_map[original_path_4], Eq("res/_nul.png"));
+  EXPECT_THAT(path_map[original_path_5], Eq("res/_cOM.png"));
+  EXPECT_THAT(path_map[original_path_9], Eq("res/F0o.png"));
+
+  std::set<std::string> lpt_shortened_names{path_map[original_path_6], path_map[original_path_7],
+                                            path_map[original_path_8]};
+  EXPECT_THAT(lpt_shortened_names, Contains("res/_lPt.png"));
+  EXPECT_THAT(lpt_shortened_names, Contains("res/_lPt1.png"));
+  EXPECT_THAT(lpt_shortened_names, Contains("res/_lPt2.png"));
+}
+
 TEST(ObfuscatorTest, DeterministicallyHandleCollisions) {
   std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
 
@@ -247,7 +333,9 @@
   ASSERT_TRUE(Obfuscator(options).Consume(context.get(), table.get()));
 
   // Expect that the id resource name map is populated
+  ASSERT_THAT(id_resource_map.find(0x7f020000), Not(Eq(id_resource_map.end())));
   EXPECT_THAT(id_resource_map.at(0x7f020000), Eq("mycolor"));
+  ASSERT_THAT(id_resource_map.find(0x7f030000), Not(Eq(id_resource_map.end())));
   EXPECT_THAT(id_resource_map.at(0x7f030000), Eq("mystring"));
   EXPECT_THAT(id_resource_map.find(0x7f030001), Eq(id_resource_map.end()));
   EXPECT_THAT(id_resource_map.find(0x7f030002), Eq(id_resource_map.end()));
@@ -300,17 +388,18 @@
   ASSERT_TRUE(obfuscator.Consume(test::ContextBuilder().Build().get(),
                                  getProtocolBufferTableUnderTest().get()));
 
-  obfuscator.WriteObfuscationMap("obfuscated_map.pb");
+  const auto map_path = testing::TempDir() + "/obfuscated_map.pb";
+  ASSERT_TRUE(obfuscator.WriteObfuscationMap(map_path));
 
   std::string pbOut;
-  android::base::ReadFileToString("obfuscated_map.pb", &pbOut, false /* follow_symlinks */);
+  ASSERT_TRUE(android::base::ReadFileToString(map_path, &pbOut, false /* follow_symlinks */));
   EXPECT_THAT(pbOut, HasSubstr("drawable/xmlfile.xml"));
   EXPECT_THAT(pbOut, HasSubstr("drawable/pngfile.png"));
   EXPECT_THAT(pbOut, HasSubstr("mycolor"));
   EXPECT_THAT(pbOut, HasSubstr("mystring"));
   pb::ResourceMappings resourceMappings;
-  EXPECT_THAT(resourceMappings.ParseFromString(pbOut), IsTrue());
-  EXPECT_THAT(resourceMappings.collapsed_names().resource_names_size(), Eq(2));
+  ASSERT_THAT(resourceMappings.ParseFromString(pbOut), IsTrue());
+  ASSERT_THAT(resourceMappings.collapsed_names().resource_names_size(), Eq(2));
   auto& resource_names = resourceMappings.collapsed_names().resource_names();
   EXPECT_THAT(resource_names.at(0).name(), AnyOf(Eq("mycolor"), Eq("mystring")));
   EXPECT_THAT(resource_names.at(1).name(), AnyOf(Eq("mycolor"), Eq("mystring")));
@@ -328,11 +417,14 @@
   ASSERT_TRUE(obfuscator.Consume(test::ContextBuilder().Build().get(),
                                  getProtocolBufferTableUnderTest().get()));
 
-  obfuscator.WriteObfuscationMap("obfuscated_map.pb");
+  const auto map_path = testing::TempDir() + "/obfuscated_map.pb";
+  ASSERT_TRUE(obfuscator.WriteObfuscationMap(map_path));
 
   std::string pbOut;
-  android::base::ReadFileToString("obfuscated_map.pb", &pbOut, false /* follow_symlinks */);
+  ASSERT_TRUE(android::base::ReadFileToString(map_path, &pbOut, false /* follow_symlinks */));
   ASSERT_THAT(pbOut, Eq(""));
 }
 
+}  // namespace
+
 }  // namespace aapt
diff --git a/tools/aapt2/process/SymbolTable.cpp b/tools/aapt2/process/SymbolTable.cpp
index bca62da..d78baf9f 100644
--- a/tools/aapt2/process/SymbolTable.cpp
+++ b/tools/aapt2/process/SymbolTable.cpp
@@ -220,15 +220,9 @@
 
 bool AssetManagerSymbolSource::AddAssetPath(StringPiece path) {
   TRACE_CALL();
-  if (std::unique_ptr<const ApkAssets> apk = ApkAssets::Load(path.data())) {
+  if (auto apk = ApkAssets::Load(path.data())) {
     apk_assets_.push_back(std::move(apk));
-
-    std::vector<const ApkAssets*> apk_assets;
-    for (const std::unique_ptr<const ApkAssets>& apk_asset : apk_assets_) {
-      apk_assets.push_back(apk_asset.get());
-    }
-
-    asset_manager_.SetApkAssets(apk_assets);
+    asset_manager_.SetApkAssets(apk_assets_);
     return true;
   }
   return false;
@@ -251,7 +245,7 @@
     return true;
   }
 
-  for (const std::unique_ptr<const ApkAssets>& assets : apk_assets_) {
+  for (auto&& assets : apk_assets_) {
     for (const std::unique_ptr<const android::LoadedPackage>& loaded_package
          : assets->GetLoadedArsc()->GetPackages()) {
       if (package_name == loaded_package->GetPackageName() && loaded_package->IsDynamic()) {
@@ -266,10 +260,11 @@
 static std::unique_ptr<SymbolTable::Symbol> LookupAttributeInTable(
     android::AssetManager2& am, ResourceId id) {
   using namespace android;
-  if (am.GetApkAssets().empty()) {
+  if (am.GetApkAssetsCount() == 0) {
     return {};
   }
 
+  auto op = am.StartOperation();
   auto bag_result = am.GetBag(id.id);
   if (!bag_result.has_value()) {
     return nullptr;
diff --git a/tools/aapt2/process/SymbolTable.h b/tools/aapt2/process/SymbolTable.h
index b09ff70..36eb0ba 100644
--- a/tools/aapt2/process/SymbolTable.h
+++ b/tools/aapt2/process/SymbolTable.h
@@ -207,8 +207,8 @@
   }
 
  private:
+  std::vector<android::AssetManager2::ApkAssetsPtr> apk_assets_;
   android::AssetManager2 asset_manager_;
-  std::vector<std::unique_ptr<const android::ApkAssets>> apk_assets_;
 
   DISALLOW_COPY_AND_ASSIGN(AssetManagerSymbolSource);
 };
diff --git a/tools/aapt2/util/Util.cpp b/tools/aapt2/util/Util.cpp
index be87766..3d83caf2 100644
--- a/tools/aapt2/util/Util.cpp
+++ b/tools/aapt2/util/Util.cpp
@@ -21,6 +21,7 @@
 #include <string>
 #include <vector>
 
+#include "android-base/parseint.h"
 #include "android-base/stringprintf.h"
 #include "android-base/strings.h"
 #include "androidfw/BigBuffer.h"
@@ -229,14 +230,29 @@
   static const char* const sMinorVersion = "19";
 
   // The build id of aapt2 binary.
-  static std::string sBuildId = android::build::GetBuildNumber();
+  static const std::string sBuildId = [] {
+    std::string buildNumber = android::build::GetBuildNumber();
 
-  if (android::base::StartsWith(sBuildId, "eng.")) {
-    time_t now = time(0);
-    tm* ltm = localtime(&now);
+    if (android::base::StartsWith(buildNumber, "eng.")) {
+      // android::build::GetBuildNumber() returns something like "eng.user.20230725.214219" where
+      // the latter two parts are "yyyyMMdd.HHmmss" at build time. Use "yyyyMM" in the fingerprint.
+      std::vector<std::string> parts = util::Split(buildNumber, '.');
+      int buildYear;
+      int buildMonth;
+      if (parts.size() < 3 || parts[2].length() < 6 ||
+          !android::base::ParseInt(parts[2].substr(0, 4), &buildYear) ||
+          !android::base::ParseInt(parts[2].substr(4, 2), &buildMonth)) {
+        // Fallback to localtime() if GetBuildNumber() returns an unexpected output.
+        time_t now = time(0);
+        tm* ltm = localtime(&now);
+        buildYear = 1900 + ltm->tm_year;
+        buildMonth = 1 + ltm->tm_mon;
+      }
 
-    sBuildId = android::base::StringPrintf("eng.%d%d", 1900 + ltm->tm_year, 1 + ltm->tm_mon);
-  }
+      buildNumber = android::base::StringPrintf("eng.%04d%02d", buildYear, buildMonth);
+    }
+    return buildNumber;
+  }();
 
   return android::base::StringPrintf("%s.%s-%s", sMajorVersion, sMinorVersion, sBuildId.c_str());
 }
diff --git a/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/Constants.kt b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/Constants.kt
index e03d92ab..f1727b7 100644
--- a/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/Constants.kt
+++ b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/Constants.kt
@@ -30,6 +30,7 @@
 const val IINTERFACE_INTERFACE = "android.os.IInterface"
 
 const val AIDL_PERMISSION_HELPER_SUFFIX = "_enforcePermission"
+const val PERMISSION_PREFIX_LITERAL = "android.permission."
 
 /**
  * If a non java (e.g. c++) backend is enabled, the @EnforcePermission
diff --git a/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionDetector.kt b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionDetector.kt
index 0baac2c..3a95df9 100644
--- a/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionDetector.kt
+++ b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionDetector.kt
@@ -40,6 +40,8 @@
 import org.jetbrains.uast.UMethod
 import org.jetbrains.uast.toUElement
 
+import java.util.EnumSet
+
 /**
  * Lint Detector that ensures that any method overriding a method annotated
  * with @EnforcePermission is also annotated with the exact same annotation.
@@ -93,7 +95,7 @@
             val v1 = ConstantEvaluator.evaluate(context, value1)
             val v2 = ConstantEvaluator.evaluate(context, value2)
             if (v1 != null && v2 != null) {
-                if (v1 != v2) {
+                if (v1 != v2 && !isOneShortPermissionOfOther(v1, v2)) {
                     return false
                 }
             } else {
@@ -105,7 +107,7 @@
                 for (j in children1.indices) {
                     val c1 = ConstantEvaluator.evaluate(context, children1[j])
                     val c2 = ConstantEvaluator.evaluate(context, children2[j])
-                    if (c1 != c2) {
+                    if (c1 != c2 && !isOneShortPermissionOfOther(c1, c2)) {
                         return false
                     }
                 }
@@ -114,6 +116,12 @@
         return true
     }
 
+    private fun isOneShortPermissionOfOther(
+        permission1: Any?,
+        permission2: Any?
+    ): Boolean = permission1 == (permission2 as? String)?.removePrefix(PERMISSION_PREFIX_LITERAL) ||
+            permission2 == (permission1 as? String)?.removePrefix(PERMISSION_PREFIX_LITERAL)
+
     private fun compareMethods(
         context: JavaContext,
         element: UElement,
@@ -206,7 +214,7 @@
             severity = Severity.ERROR,
             implementation = Implementation(
                     EnforcePermissionDetector::class.java,
-                    Scope.JAVA_FILE_SCOPE
+                    EnumSet.of(Scope.JAVA_FILE, Scope.TEST_SOURCES)
             )
         )
 
@@ -219,7 +227,7 @@
             severity = Severity.ERROR,
             implementation = Implementation(
                     EnforcePermissionDetector::class.java,
-                    Scope.JAVA_FILE_SCOPE
+                    EnumSet.of(Scope.JAVA_FILE, Scope.TEST_SOURCES)
             )
         )
     }
diff --git a/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionHelperDetector.kt b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionHelperDetector.kt
index df13af5..cbbf91b4 100644
--- a/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionHelperDetector.kt
+++ b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionHelperDetector.kt
@@ -34,6 +34,8 @@
 import org.jetbrains.uast.UMethod
 import org.jetbrains.uast.skipParenthesizedExprDown
 
+import java.util.EnumSet
+
 class EnforcePermissionHelperDetector : Detector(), SourceCodeScanner {
     override fun getApplicableUastTypes(): List<Class<out UElement?>> =
             listOf(UMethod::class.java)
@@ -117,7 +119,7 @@
                 severity = Severity.ERROR,
                 implementation = Implementation(
                         EnforcePermissionHelperDetector::class.java,
-                        Scope.JAVA_FILE_SCOPE
+                        EnumSet.of(Scope.JAVA_FILE, Scope.TEST_SOURCES)
                 )
         )
 
@@ -130,7 +132,7 @@
                 severity = Severity.ERROR,
                 implementation = Implementation(
                         EnforcePermissionDetector::class.java,
-                        Scope.JAVA_FILE_SCOPE
+                        EnumSet.of(Scope.JAVA_FILE, Scope.TEST_SOURCES)
                 )
         )
 
diff --git a/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetector.kt b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetector.kt
index c7be36e..22f749e 100644
--- a/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetector.kt
+++ b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetector.kt
@@ -53,10 +53,9 @@
                 lintFix
         )
 
-        // TODO(b/265014041): turn on errors once all code that would cause one is fixed
-        // if (enforcePermissionFix.errorLevel) {
-        //     incident.overrideSeverity(Severity.ERROR)
-        // }
+        if (enforcePermissionFix.errorLevel) {
+            incident.overrideSeverity(Severity.ERROR)
+        }
 
         context.report(incident)
     }
diff --git a/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionDetectorTest.kt b/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionDetectorTest.kt
index 75b0073..b3dacbd 100644
--- a/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionDetectorTest.kt
+++ b/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionDetectorTest.kt
@@ -316,20 +316,55 @@
                 overrides the method Stub.testMethod which is annotated with @EnforcePermission. The same annotation must be used on Default.testMethod [MissingEnforcePermissionAnnotation]
                     public void testMethod() {}
                                 ~~~~~~~~~~
-                1 errors, 0 warnings 
+                1 errors, 0 warnings
                 """.addLineContinuation()
             )
     }
 
-    fun testDoesDetectIssuesShortStringsNotAllowed() {
+    fun testDoesNotDetectIssuesShortStringsAllowedInChildAndParent() {
         lint().files(java(
             """
             package test.pkg;
             import android.annotation.EnforcePermission;
             public class TestClass121 extends IFooMethod.Stub {
                 @Override
+                @EnforcePermission("READ_PHONE_STATE")
+                public void testMethod() {}
+                @Override
+                @EnforcePermission(android.Manifest.permission.READ_PHONE_STATE)
+                public void testMethodParentShortPermission() {}
+                @Override
                 @EnforcePermission(anyOf={"INTERNET", "READ_PHONE_STATE"})
                 public void testMethodAnyLiteral() {}
+                @Override
+                @EnforcePermission(anyOf={android.Manifest.permission.INTERNET, android.Manifest.permission.READ_PHONE_STATE})
+                public void testMethodAnyLiteralParentsShortPermission() {}
+            }
+            """).indented(),
+            *stubs
+        )
+            .run()
+            .expectClean()
+    }
+
+    fun testDoesDetectIssuesWrongShortStringsInChildAndParent() {
+        lint().files(java(
+            """
+            package test.pkg;
+            import android.annotation.EnforcePermission;
+            public class TestClass121 extends IFooMethod.Stub {
+                @Override
+                @EnforcePermission("READ_WRONG_PHONE_STATE")
+                public void testMethod() {}
+                @Override
+                @EnforcePermission(android.Manifest.permission.READ_WRONG_PHONE_STATE)
+                public void testMethodParentShortPermission() {}
+                @Override
+                @EnforcePermission(anyOf={"WRONG_INTERNET", "READ_PHONE_STATE"})
+                public void testMethodAnyLiteral() {}
+                @Override
+                @EnforcePermission(anyOf={android.Manifest.permission.INTERNET, android.Manifest.permission.READ_WRONG_PHONE_STATE})
+                public void testMethodAnyLiteralParentsShortPermission() {}
             }
             """).indented(),
             *stubs
@@ -337,14 +372,19 @@
             .run()
             .expect(
                 """
-                src/test/pkg/TestClass121.java:6: Error: The method \
-                TestClass121.testMethodAnyLiteral is annotated with @EnforcePermission(anyOf={"INTERNET", "READ_PHONE_STATE"}) \
-                which differs from the overridden method Stub.testMethodAnyLiteral: \
-                @android.annotation.EnforcePermission(anyOf={android.Manifest.permission.INTERNET, "android.permission.READ_PHONE_STATE"}). \
-                The same annotation must be used for both methods. [MismatchingEnforcePermissionAnnotation]
-                    public void testMethodAnyLiteral() {}
-                                ~~~~~~~~~~~~~~~~~~~~
-                1 errors, 0 warnings
+            src/test/pkg/TestClass121.java:6: Error: The method TestClass121.testMethod is annotated with @EnforcePermission("READ_WRONG_PHONE_STATE") which differs from the overridden method Stub.testMethod: @android.annotation.EnforcePermission(android.Manifest.permission.READ_PHONE_STATE). The same annotation must be used for both methods. [MismatchingEnforcePermissionAnnotation]
+                public void testMethod() {}
+                            ~~~~~~~~~~
+            src/test/pkg/TestClass121.java:9: Error: The method TestClass121.testMethodParentShortPermission is annotated with @EnforcePermission(android.Manifest.permission.READ_WRONG_PHONE_STATE) which differs from the overridden method Stub.testMethodParentShortPermission: @android.annotation.EnforcePermission("READ_PHONE_STATE"). The same annotation must be used for both methods. [MismatchingEnforcePermissionAnnotation]
+                public void testMethodParentShortPermission() {}
+                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+            src/test/pkg/TestClass121.java:12: Error: The method TestClass121.testMethodAnyLiteral is annotated with @EnforcePermission(anyOf={"WRONG_INTERNET", "READ_PHONE_STATE"}) which differs from the overridden method Stub.testMethodAnyLiteral: @android.annotation.EnforcePermission(anyOf={android.Manifest.permission.INTERNET, "android.permission.READ_PHONE_STATE"}). The same annotation must be used for both methods. [MismatchingEnforcePermissionAnnotation]
+                public void testMethodAnyLiteral() {}
+                            ~~~~~~~~~~~~~~~~~~~~
+            src/test/pkg/TestClass121.java:15: Error: The method TestClass121.testMethodAnyLiteralParentsShortPermission is annotated with @EnforcePermission(anyOf={android.Manifest.permission.INTERNET, android.Manifest.permission.READ_WRONG_PHONE_STATE}) which differs from the overridden method Stub.testMethodAnyLiteralParentsShortPermission: @android.annotation.EnforcePermission(anyOf={"INTERNET", "READ_PHONE_STATE"}). The same annotation must be used for both methods. [MismatchingEnforcePermissionAnnotation]
+                public void testMethodAnyLiteralParentsShortPermission() {}
+                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+            4 errors, 0 warnings
                 """.addLineContinuation()
             )
     }
@@ -360,12 +400,18 @@
             @android.annotation.EnforcePermission(android.Manifest.permission.READ_PHONE_STATE)
             public void testMethod() {}
             @Override
+            @android.annotation.EnforcePermission("READ_PHONE_STATE")
+            public void testMethodParentShortPermission() {}
+            @Override
             @android.annotation.EnforcePermission(anyOf={android.Manifest.permission.INTERNET, android.Manifest.permission.READ_PHONE_STATE})
             public void testMethodAny() {}
             @Override
             @android.annotation.EnforcePermission(anyOf={android.Manifest.permission.INTERNET, "android.permission.READ_PHONE_STATE"})
             public void testMethodAnyLiteral() {}
             @Override
+            @android.annotation.EnforcePermission(anyOf={"INTERNET", "READ_PHONE_STATE"})
+            public void testMethodAnyLiteralParentsShortPermission() {}
+            @Override
             @android.annotation.EnforcePermission(allOf={android.Manifest.permission.INTERNET, android.Manifest.permission.READ_PHONE_STATE})
             public void testMethodAll() {}
             @Override
@@ -374,10 +420,14 @@
           }
           @android.annotation.EnforcePermission(android.Manifest.permission.READ_PHONE_STATE)
           public void testMethod();
+          @android.annotation.EnforcePermission("READ_PHONE_STATE")
+          public void testMethodParentShortPermission();
           @android.annotation.EnforcePermission(anyOf={android.Manifest.permission.INTERNET, android.Manifest.permission.READ_PHONE_STATE})
           public void testMethodAny() {}
           @android.annotation.EnforcePermission(anyOf={android.Manifest.permission.INTERNET, "android.permission.READ_PHONE_STATE"})
           public void testMethodAnyLiteral() {}
+          @android.annotation.EnforcePermission(anyOf={"INTERNET", "READ_PHONE_STATE"})
+          public void testMethodAnyLiteralParentsShortPermission() {}
           @android.annotation.EnforcePermission(allOf={android.Manifest.permission.INTERNET, android.Manifest.permission.READ_PHONE_STATE})
           public void testMethodAll() {}
           @android.annotation.EnforcePermission(allOf={android.Manifest.permission.INTERNET, "android.permission.READ_PHONE_STATE"})
@@ -404,6 +454,7 @@
         package android.Manifest;
         class permission {
           public static final String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE";
+          public static final String READ_WRONG_PHONE_STATE = "android.permission.READ_WRONG_PHONE_STATE";
           public static final String NFC = "android.permission.NFC";
           public static final String INTERNET = "android.permission.INTERNET";
         }
diff --git a/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetectorTest.kt b/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetectorTest.kt
index 6b8e72cf..9170e75 100644
--- a/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetectorTest.kt
+++ b/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetectorTest.kt
@@ -51,10 +51,10 @@
             .run()
             .expect(
                 """
-                src/Foo.java:7: Warning: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
+                src/Foo.java:7: Error: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
                         mContext.enforceCallingOrSelfPermission("android.permission.READ_CONTACTS", "foo");
                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                0 errors, 1 warnings
+                1 errors, 0 warnings
                 """
             )
             .expectFixDiffs(
@@ -168,10 +168,10 @@
             .run()
             .expect(
                 """
-                src/Foo.java:8: Warning: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
+                src/Foo.java:8: Error: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
                             mContext.enforceCallingOrSelfPermission(
                             ^
-                0 errors, 1 warnings
+                1 errors, 0 warnings
                 """
             )
             .expectFixDiffs(
@@ -209,10 +209,10 @@
             .run()
             .expect(
                 """
-                src/Foo.java:8: Warning: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
+                src/Foo.java:8: Error: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
                         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.READ_CONTACTS, "foo");
                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                0 errors, 1 warnings
+                1 errors, 0 warnings
                 """
             )
             .expectFixDiffs(
@@ -252,10 +252,10 @@
             .run()
             .expect(
                 """
-                src/Foo.java:10: Warning: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
+                src/Foo.java:10: Error: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
                             mContext.enforceCallingOrSelfPermission(
                             ^
-                0 errors, 1 warnings
+                1 errors, 0 warnings
                 """
             )
             .expectFixDiffs(
@@ -414,10 +414,10 @@
             .run()
             .expect(
                 """
-                src/Foo.java:14: Warning: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
+                src/Foo.java:14: Error: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
                         helper();
                         ~~~~~~~~~
-                0 errors, 1 warnings
+                1 errors, 0 warnings
                 """
             )
             .expectFixDiffs(
@@ -506,10 +506,10 @@
             .run()
             .expect(
                 """
-                src/Foo.java:16: Warning: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
+                src/Foo.java:16: Error: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
                         mContext.enforceCallingOrSelfPermission("FOO", "foo");
                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                0 errors, 1 warnings
+                1 errors, 0 warnings
                 """
             )
             .expectFixDiffs(
@@ -558,10 +558,10 @@
             .run()
             .expect(
                 """
-                src/Foo.java:19: Warning: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
+                src/Foo.java:19: Error: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
                         helperHelper();
                         ~~~~~~~~~~~~~~~
-                0 errors, 1 warnings
+                1 errors, 0 warnings
                 """
             )
             .expectFixDiffs(
@@ -599,10 +599,10 @@
                 .run()
                 .expect(
                     """
-                    src/Foo.java:7: Warning: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
+                    src/Foo.java:7: Error: ITest permission check should be converted to @EnforcePermission annotation [SimpleManualPermissionEnforcement]
                             if (mContext.checkCallingOrSelfPermission("android.permission.READ_CONTACTS", "foo")
                             ^
-                    0 errors, 1 warnings
+                    1 errors, 0 warnings
                     """
                 )
                 .expectFixDiffs(
diff --git a/tools/streaming_proto/OWNERS b/tools/streaming_proto/OWNERS
new file mode 100644
index 0000000..5f6e59f
--- /dev/null
+++ b/tools/streaming_proto/OWNERS
@@ -0,0 +1 @@
+mwachens@google.com
diff --git a/tools/streaming_proto/cpp/main.cpp b/tools/streaming_proto/cpp/main.cpp
index fe9a438..905ed35 100644
--- a/tools/streaming_proto/cpp/main.cpp
+++ b/tools/streaming_proto/cpp/main.cpp
@@ -119,9 +119,8 @@
     text << endl;
 }
 
-static void
-write_header_file(CodeGeneratorResponse* response, const FileDescriptorProto& file_descriptor)
-{
+static void write_header_file(const string& request_parameter, CodeGeneratorResponse* response,
+                              const FileDescriptorProto& file_descriptor) {
     stringstream text;
 
     text << "// Generated by protoc-gen-cppstream. DO NOT MODIFY." << endl;
@@ -159,6 +158,9 @@
     text << endl;
     text << "#endif // " << header << endl;
 
+    if (request_parameter.find("experimental_allow_proto3_optional") != string::npos) {
+        response->set_supported_features(CodeGeneratorResponse::FEATURE_PROTO3_OPTIONAL);
+    }
     CodeGeneratorResponse::File* file_response = response->add_file();
     file_response->set_name(make_filename(file_descriptor));
     file_response->set_content(text.str());
@@ -182,7 +184,7 @@
     for (int i=0; i<N; i++) {
         const FileDescriptorProto& file_descriptor = request.proto_file(i);
         if (should_generate_for_file(request, file_descriptor.name())) {
-            write_header_file(&response, file_descriptor);
+            write_header_file(request.parameter(), &response, file_descriptor);
         }
     }
 
diff --git a/tools/xmlpersistence/Android.bp b/tools/xmlpersistence/Android.bp
deleted file mode 100644
index 0b6dba6..0000000
--- a/tools/xmlpersistence/Android.bp
+++ /dev/null
@@ -1,20 +0,0 @@
-package {
-    // See: http://go/android-license-faq
-    // A large-scale-change added 'default_applicable_licenses' to import
-    // all of the 'license_kinds' from "frameworks_base_license"
-    // to get the below license kinds:
-    //   SPDX-license-identifier-Apache-2.0
-    default_applicable_licenses: ["frameworks_base_license"],
-}
-
-java_binary_host {
-    name: "xmlpersistence_cli",
-    manifest: "manifest.txt",
-    srcs: [
-        "src/**/*.kt",
-    ],
-    static_libs: [
-        "javaparser-symbol-solver",
-        "javapoet",
-    ],
-}
diff --git a/tools/xmlpersistence/OWNERS b/tools/xmlpersistence/OWNERS
deleted file mode 100644
index 4f4d06a..0000000
--- a/tools/xmlpersistence/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-zhanghai@google.com
diff --git a/tools/xmlpersistence/manifest.txt b/tools/xmlpersistence/manifest.txt
deleted file mode 100644
index 6d97719..0000000
--- a/tools/xmlpersistence/manifest.txt
+++ /dev/null
@@ -1 +0,0 @@
-Main-class: MainKt
diff --git a/tools/xmlpersistence/src/main/kotlin/Generator.kt b/tools/xmlpersistence/src/main/kotlin/Generator.kt
deleted file mode 100644
index 8e62388..0000000
--- a/tools/xmlpersistence/src/main/kotlin/Generator.kt
+++ /dev/null
@@ -1,577 +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.
- */
-
-import com.squareup.javapoet.ClassName
-import com.squareup.javapoet.FieldSpec
-import com.squareup.javapoet.JavaFile
-import com.squareup.javapoet.MethodSpec
-import com.squareup.javapoet.NameAllocator
-import com.squareup.javapoet.ParameterSpec
-import com.squareup.javapoet.TypeSpec
-import java.io.File
-import java.io.FileInputStream
-import java.io.FileNotFoundException
-import java.io.FileOutputStream
-import java.io.IOException
-import java.nio.charset.StandardCharsets
-import java.time.Year
-import java.util.Objects
-import javax.lang.model.element.Modifier
-
-// JavaPoet only supports line comments, and can't add a newline after file level comments.
-val FILE_HEADER = """
-    /*
-     * Copyright (C) ${Year.now().value} The Android Open Source Project
-     *
-     * Licensed under the Apache License, Version 2.0 (the "License");
-     * you may not use this file except in compliance with the License.
-     * You may obtain a copy of the License at
-     *
-     *      http://www.apache.org/licenses/LICENSE-2.0
-     *
-     * Unless required by applicable law or agreed to in writing, software
-     * distributed under the License is distributed on an "AS IS" BASIS,
-     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     * See the License for the specific language governing permissions and
-     * limitations under the License.
-     */
-
-    // Generated by xmlpersistence. DO NOT MODIFY!
-    // CHECKSTYLE:OFF Generated code
-    // @formatter:off
-""".trimIndent() + "\n\n"
-
-private val atomicFileType = ClassName.get("android.util", "AtomicFile")
-
-fun generate(persistence: PersistenceInfo): JavaFile {
-    val distinctClassFields = persistence.root.allClassFields.distinctBy { it.type }
-    val type = TypeSpec.classBuilder(persistence.name)
-        .addJavadoc(
-            """
-                Generated class implementing XML persistence for${'$'}W{@link $1T}.
-                <p>
-                This class provides atomicity for persistence via {@link $2T}, however it does not provide
-                thread safety, so please bring your own synchronization mechanism.
-            """.trimIndent(), persistence.root.type, atomicFileType
-        )
-        .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
-        .addField(generateFileField())
-        .addMethod(generateConstructor())
-        .addMethod(generateReadMethod(persistence.root))
-        .addMethod(generateParseMethod(persistence.root))
-        .addMethods(distinctClassFields.map { generateParseClassMethod(it) })
-        .addMethod(generateWriteMethod(persistence.root))
-        .addMethod(generateSerializeMethod(persistence.root))
-        .addMethods(distinctClassFields.map { generateSerializeClassMethod(it) })
-        .addMethod(generateDeleteMethod())
-        .build()
-    return JavaFile.builder(persistence.root.type.packageName(), type)
-        .skipJavaLangImports(true)
-        .indent("    ")
-        .build()
-}
-
-private val nonNullType = ClassName.get("android.annotation", "NonNull")
-
-private fun generateFileField(): FieldSpec =
-    FieldSpec.builder(atomicFileType, "mFile", Modifier.PRIVATE, Modifier.FINAL)
-        .addAnnotation(nonNullType)
-        .build()
-
-private fun generateConstructor(): MethodSpec =
-    MethodSpec.constructorBuilder()
-        .addJavadoc(
-            """
-                Create an instance of this class.
-
-                @param file the XML file for persistence
-            """.trimIndent()
-        )
-        .addModifiers(Modifier.PUBLIC)
-        .addParameter(
-            ParameterSpec.builder(File::class.java, "file").addAnnotation(nonNullType).build()
-        )
-        .addStatement("mFile = new \$1T(file)", atomicFileType)
-        .build()
-
-private val nullableType = ClassName.get("android.annotation", "Nullable")
-
-private val xmlPullParserType = ClassName.get("org.xmlpull.v1", "XmlPullParser")
-
-private val xmlType = ClassName.get("android.util", "Xml")
-
-private val xmlPullParserExceptionType = ClassName.get("org.xmlpull.v1", "XmlPullParserException")
-
-private fun generateReadMethod(rootField: ClassFieldInfo): MethodSpec =
-    MethodSpec.methodBuilder("read")
-        .addJavadoc(
-            """
-                Read${'$'}W{@link $1T}${'$'}Wfrom${'$'}Wthe${'$'}WXML${'$'}Wfile.
-
-                @return the persisted${'$'}W{@link $1T},${'$'}Wor${'$'}W{@code null}${'$'}Wif${'$'}Wthe${'$'}WXML${'$'}Wfile${'$'}Wdoesn't${'$'}Wexist
-                @throws IllegalArgumentException if an error occurred while reading
-            """.trimIndent(), rootField.type
-        )
-        .addAnnotation(nullableType)
-        .addModifiers(Modifier.PUBLIC)
-        .returns(rootField.type)
-        .addControlFlow("try (\$1T inputStream = mFile.openRead())", FileInputStream::class.java) {
-            addStatement("final \$1T parser = \$2T.newPullParser()", xmlPullParserType, xmlType)
-            addStatement("parser.setInput(inputStream, null)")
-            addStatement("return parse(parser)")
-            nextControlFlow("catch (\$1T e)", FileNotFoundException::class.java)
-            addStatement("return null")
-            nextControlFlow(
-                "catch (\$1T | \$2T e)", IOException::class.java, xmlPullParserExceptionType
-            )
-            addStatement("throw new IllegalArgumentException(e)")
-        }
-        .build()
-
-private val ClassFieldInfo.allClassFields: List<ClassFieldInfo>
-    get() =
-        mutableListOf<ClassFieldInfo>().apply {
-            this += this@allClassFields
-            for (field in fields) {
-                when (field) {
-                    is ClassFieldInfo -> this += field.allClassFields
-                    is ListFieldInfo -> this += field.element.allClassFields
-                    else -> {}
-                }
-            }
-        }
-
-private fun generateParseMethod(rootField: ClassFieldInfo): MethodSpec =
-    MethodSpec.methodBuilder("parse")
-        .addAnnotation(nonNullType)
-        .addModifiers(Modifier.PRIVATE, Modifier.STATIC)
-        .returns(rootField.type)
-        .addParameter(
-            ParameterSpec.builder(xmlPullParserType, "parser").addAnnotation(nonNullType).build()
-        )
-        .addExceptions(listOf(ClassName.get(IOException::class.java), xmlPullParserExceptionType))
-        .apply {
-            addStatement("int type")
-            addStatement("int depth")
-            addStatement("int innerDepth = parser.getDepth() + 1")
-            addControlFlow(
-                "while ((type = parser.next()) != \$1T.END_DOCUMENT\$W"
-                    + "&& ((depth = parser.getDepth()) >= innerDepth || type != \$1T.END_TAG))",
-                xmlPullParserType
-            ) {
-                addControlFlow(
-                    "if (depth > innerDepth || type != \$1T.START_TAG)", xmlPullParserType
-                ) {
-                    addStatement("continue")
-                }
-                addControlFlow(
-                    "if (\$1T.equals(parser.getName(),\$W\$2S))", Objects::class.java,
-                    rootField.tagName
-                ) {
-                    addStatement("return \$1L(parser)", rootField.parseMethodName)
-                }
-            }
-            addStatement(
-                "throw new IllegalArgumentException(\$1S)",
-                "Missing root tag <${rootField.tagName}>"
-            )
-        }
-        .build()
-
-private fun generateParseClassMethod(classField: ClassFieldInfo): MethodSpec =
-    MethodSpec.methodBuilder(classField.parseMethodName)
-        .addAnnotation(nonNullType)
-        .addModifiers(Modifier.PRIVATE, Modifier.STATIC)
-        .returns(classField.type)
-        .addParameter(
-            ParameterSpec.builder(xmlPullParserType, "parser").addAnnotation(nonNullType).build()
-        )
-        .apply {
-            val (attributeFields, tagFields) = classField.fields
-                .partition { it is PrimitiveFieldInfo || it is StringFieldInfo }
-            if (tagFields.isNotEmpty()) {
-                addExceptions(
-                    listOf(ClassName.get(IOException::class.java), xmlPullParserExceptionType)
-                )
-            }
-            val nameAllocator = NameAllocator().apply {
-                newName("parser")
-                newName("type")
-                newName("depth")
-                newName("innerDepth")
-            }
-            for (field in attributeFields) {
-                val variableName = nameAllocator.newName(field.variableName, field)
-                when (field) {
-                    is PrimitiveFieldInfo -> {
-                        val stringVariableName =
-                            nameAllocator.newName("${field.variableName}String")
-                        addStatement(
-                            "final String \$1L =\$Wparser.getAttributeValue(null,\$W\$2S)",
-                            stringVariableName, field.attributeName
-                        )
-                        if (field.isRequired) {
-                            addControlFlow("if (\$1L == null)", stringVariableName) {
-                                addStatement(
-                                    "throw new IllegalArgumentException(\$1S)",
-                                    "Missing attribute \"${field.attributeName}\""
-                                )
-                            }
-                        }
-                        val boxedType = field.type.box()
-                        val parseTypeMethodName = if (field.type.isPrimitive) {
-                            "parse${field.type.toString().capitalize()}"
-                        } else {
-                            "valueOf"
-                        }
-                        if (field.isRequired) {
-                            addStatement(
-                                "final \$1T \$2L =\$W\$3T.\$4L($5L)", field.type, variableName,
-                                boxedType, parseTypeMethodName, stringVariableName
-                            )
-                        } else {
-                            addStatement(
-                                "final \$1T \$2L =\$W$3L != null ?\$W\$4T.\$5L($3L)\$W: null",
-                                field.type, variableName, stringVariableName, boxedType,
-                                parseTypeMethodName
-                            )
-                        }
-                    }
-                    is StringFieldInfo ->
-                        addStatement(
-                            "final String \$1L =\$Wparser.getAttributeValue(null,\$W\$2S)",
-                            variableName, field.attributeName
-                        )
-                    else -> error(field)
-                }
-            }
-            if (tagFields.isNotEmpty()) {
-                for (field in tagFields) {
-                    val variableName = nameAllocator.newName(field.variableName, field)
-                    when (field) {
-                        is ClassFieldInfo ->
-                            addStatement("\$1T \$2L =\$Wnull", field.type, variableName)
-                        is ListFieldInfo ->
-                            addStatement(
-                                "final \$1T \$2L =\$Wnew \$3T<>()", field.type, variableName,
-                                ArrayList::class.java
-                            )
-                        else -> error(field)
-                    }
-                }
-                addStatement("int type")
-                addStatement("int depth")
-                addStatement("int innerDepth = parser.getDepth() + 1")
-                addControlFlow(
-                    "while ((type = parser.next()) != \$1T.END_DOCUMENT\$W"
-                        + "&& ((depth = parser.getDepth()) >= innerDepth || type != \$1T.END_TAG))",
-                    xmlPullParserType
-                ) {
-                    addControlFlow(
-                        "if (depth > innerDepth || type != \$1T.START_TAG)", xmlPullParserType
-                    ) {
-                        addStatement("continue")
-                    }
-                    addControlFlow("switch (parser.getName())") {
-                        for (field in tagFields) {
-                            addControlFlow("case \$1S:", field.tagName) {
-                                val variableName = nameAllocator.get(field)
-                                when (field) {
-                                    is ClassFieldInfo -> {
-                                        addControlFlow("if (\$1L != null)", variableName) {
-                                            addStatement(
-                                                "throw new IllegalArgumentException(\$1S)",
-                                                "Duplicate tag \"${field.tagName}\""
-                                            )
-                                        }
-                                        addStatement(
-                                            "\$1L =\$W\$2L(parser)", variableName,
-                                            field.parseMethodName
-                                        )
-                                        addStatement("break")
-                                    }
-                                    is ListFieldInfo -> {
-                                        val elementNameAllocator = nameAllocator.clone()
-                                        val elementVariableName = elementNameAllocator.newName(
-                                            field.element.xmlName!!.toLowerCamelCase()
-                                        )
-                                        addStatement(
-                                            "final \$1T \$2L =\$W\$3L(parser)", field.element.type,
-                                            elementVariableName, field.element.parseMethodName
-                                        )
-                                        addStatement(
-                                            "\$1L.add(\$2L)", variableName, elementVariableName
-                                        )
-                                        addStatement("break")
-                                    }
-                                    else -> error(field)
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            for (field in tagFields.filter { it is ClassFieldInfo && it.isRequired }) {
-                addControlFlow("if ($1L == null)", nameAllocator.get(field)) {
-                    addStatement(
-                        "throw new IllegalArgumentException(\$1S)", "Missing tag <${field.tagName}>"
-                    )
-                }
-            }
-            addStatement(
-                classField.fields.joinToString(",\$W", "return new \$1T(", ")") {
-                    nameAllocator.get(it)
-                }, classField.type
-            )
-        }
-        .build()
-
-private val ClassFieldInfo.parseMethodName: String
-    get() = "parse${type.simpleName().toUpperCamelCase()}"
-
-private val xmlSerializerType = ClassName.get("org.xmlpull.v1", "XmlSerializer")
-
-private fun generateWriteMethod(rootField: ClassFieldInfo): MethodSpec =
-    MethodSpec.methodBuilder("write")
-        .apply {
-            val nameAllocator = NameAllocator().apply {
-                newName("outputStream")
-                newName("serializer")
-            }
-            val parameterName = nameAllocator.newName(rootField.variableName)
-            addJavadoc(
-                """
-                    Write${'$'}W{@link $1T}${'$'}Wto${'$'}Wthe${'$'}WXML${'$'}Wfile.
-
-                    @param $2L the${'$'}W{@link ${'$'}1T}${'$'}Wto${'$'}Wpersist
-                """.trimIndent(), rootField.type, parameterName
-            )
-            addAnnotation(nullableType)
-            addModifiers(Modifier.PUBLIC)
-            addParameter(
-                ParameterSpec.builder(rootField.type, parameterName)
-                    .addAnnotation(nonNullType)
-                    .build()
-            )
-            addStatement("\$1T outputStream = null", FileOutputStream::class.java)
-            addControlFlow("try") {
-                addStatement("outputStream = mFile.startWrite()")
-                addStatement(
-                    "final \$1T serializer =\$W\$2T.newSerializer()", xmlSerializerType, xmlType
-                )
-                addStatement(
-                    "serializer.setOutput(outputStream, \$1T.UTF_8.name())",
-                    StandardCharsets::class.java
-                )
-                addStatement(
-                    "serializer.setFeature(\$1S, true)",
-                    "http://xmlpull.org/v1/doc/features.html#indent-output"
-                )
-                addStatement("serializer.startDocument(null, true)")
-                addStatement("serialize(serializer,\$W\$1L)", parameterName)
-                addStatement("serializer.endDocument()")
-                addStatement("mFile.finishWrite(outputStream)")
-                nextControlFlow("catch (Exception e)")
-                addStatement("e.printStackTrace()")
-                addStatement("mFile.failWrite(outputStream)")
-            }
-        }
-        .build()
-
-private fun generateSerializeMethod(rootField: ClassFieldInfo): MethodSpec =
-    MethodSpec.methodBuilder("serialize")
-        .addModifiers(Modifier.PRIVATE, Modifier.STATIC)
-        .addParameter(
-            ParameterSpec.builder(xmlSerializerType, "serializer")
-                .addAnnotation(nonNullType)
-                .build()
-        )
-        .apply {
-            val nameAllocator = NameAllocator().apply { newName("serializer") }
-            val parameterName = nameAllocator.newName(rootField.variableName)
-            addParameter(
-                ParameterSpec.builder(rootField.type, parameterName)
-                    .addAnnotation(nonNullType)
-                    .build()
-            )
-            addException(IOException::class.java)
-            addStatement("serializer.startTag(null, \$1S)", rootField.tagName)
-            addStatement("\$1L(serializer, \$2L)", rootField.serializeMethodName, parameterName)
-            addStatement("serializer.endTag(null, \$1S)", rootField.tagName)
-        }
-        .build()
-
-private fun generateSerializeClassMethod(classField: ClassFieldInfo): MethodSpec =
-    MethodSpec.methodBuilder(classField.serializeMethodName)
-        .addModifiers(Modifier.PRIVATE, Modifier.STATIC)
-        .addParameter(
-            ParameterSpec.builder(xmlSerializerType, "serializer")
-                .addAnnotation(nonNullType)
-                .build()
-        )
-        .apply {
-            val nameAllocator = NameAllocator().apply {
-                newName("serializer")
-                newName("i")
-            }
-            val parameterName = nameAllocator.newName(classField.serializeParameterName)
-            addParameter(
-                ParameterSpec.builder(classField.type, parameterName)
-                    .addAnnotation(nonNullType)
-                    .build()
-            )
-            addException(IOException::class.java)
-            val (attributeFields, tagFields) = classField.fields
-                .partition { it is PrimitiveFieldInfo || it is StringFieldInfo }
-            for (field in attributeFields) {
-                val variableName = "$parameterName.${field.name}"
-                if (!field.isRequired) {
-                    beginControlFlow("if (\$1L != null)", variableName)
-                }
-                when (field) {
-                    is PrimitiveFieldInfo -> {
-                        if (field.isRequired && !field.type.isPrimitive) {
-                            addControlFlow("if (\$1L == null)", variableName) {
-                                addStatement(
-                                    "throw new IllegalArgumentException(\$1S)",
-                                    "Field \"${field.name}\" is null"
-                                )
-                            }
-                        }
-                        val stringVariableName =
-                            nameAllocator.newName("${field.variableName}String")
-                        addStatement(
-                            "final String \$1L =\$WString.valueOf(\$2L)", stringVariableName,
-                            variableName
-                        )
-                        addStatement(
-                            "serializer.attribute(null, \$1S, \$2L)", field.attributeName,
-                            stringVariableName
-                        )
-                    }
-                    is StringFieldInfo -> {
-                        if (field.isRequired) {
-                            addControlFlow("if (\$1L == null)", variableName) {
-                                addStatement(
-                                    "throw new IllegalArgumentException(\$1S)",
-                                    "Field \"${field.name}\" is null"
-                                )
-                            }
-                        }
-                        addStatement(
-                            "serializer.attribute(null, \$1S, \$2L)", field.attributeName,
-                            variableName
-                        )
-                    }
-                    else -> error(field)
-                }
-                if (!field.isRequired) {
-                    endControlFlow()
-                }
-            }
-            for (field in tagFields) {
-                val variableName = "$parameterName.${field.name}"
-                if (field.isRequired) {
-                    addControlFlow("if (\$1L == null)", variableName) {
-                        addStatement(
-                            "throw new IllegalArgumentException(\$1S)",
-                            "Field \"${field.name}\" is null"
-                        )
-                    }
-                }
-                when (field) {
-                    is ClassFieldInfo -> {
-                        addStatement("serializer.startTag(null, \$1S)", field.tagName)
-                        addStatement(
-                            "\$1L(serializer, \$2L)", field.serializeMethodName, variableName
-                        )
-                        addStatement("serializer.endTag(null, \$1S)", field.tagName)
-                    }
-                    is ListFieldInfo -> {
-                        val sizeVariableName = nameAllocator.newName("${field.variableName}Size")
-                        addStatement(
-                            "final int \$1L =\$W\$2L.size()", sizeVariableName, variableName
-                        )
-                        addControlFlow("for (int i = 0;\$Wi < \$1L;\$Wi++)", sizeVariableName) {
-                            val elementNameAllocator = nameAllocator.clone()
-                            val elementVariableName = elementNameAllocator.newName(
-                                field.element.xmlName!!.toLowerCamelCase()
-                            )
-                            addStatement(
-                                "final \$1T \$2L =\$W\$3L.get(i)", field.element.type,
-                                elementVariableName, variableName
-                            )
-                            addControlFlow("if (\$1L == null)", elementVariableName) {
-                                addStatement(
-                                    "throw new IllegalArgumentException(\$1S\$W+ i\$W+ \$2S)",
-                                    "Field element \"${field.name}[", "]\" is null"
-                                )
-                            }
-                            addStatement("serializer.startTag(null, \$1S)", field.element.tagName)
-                            addStatement(
-                                "\$1L(serializer,\$W\$2L)", field.element.serializeMethodName,
-                                elementVariableName
-                            )
-                            addStatement("serializer.endTag(null, \$1S)", field.element.tagName)
-                        }
-                    }
-                    else -> error(field)
-                }
-            }
-        }
-        .build()
-
-private val ClassFieldInfo.serializeMethodName: String
-    get() = "serialize${type.simpleName().toUpperCamelCase()}"
-
-private val ClassFieldInfo.serializeParameterName: String
-    get() = type.simpleName().toLowerCamelCase()
-
-private val FieldInfo.variableName: String
-    get() = name.toLowerCamelCase()
-
-private val FieldInfo.attributeName: String
-    get() {
-        check(this is PrimitiveFieldInfo || this is StringFieldInfo)
-        return xmlNameOrName.toLowerCamelCase()
-    }
-
-private val FieldInfo.tagName: String
-    get() {
-        check(this is ClassFieldInfo || this is ListFieldInfo)
-        return xmlNameOrName.toLowerKebabCase()
-    }
-
-private val FieldInfo.xmlNameOrName: String
-    get() = xmlName ?: name
-
-private fun generateDeleteMethod(): MethodSpec =
-    MethodSpec.methodBuilder("delete")
-        .addJavadoc("Delete the XML file, if any.")
-        .addModifiers(Modifier.PUBLIC)
-        .addStatement("mFile.delete()")
-        .build()
-
-private inline fun MethodSpec.Builder.addControlFlow(
-    controlFlow: String,
-    vararg args: Any,
-    block: MethodSpec.Builder.() -> Unit
-): MethodSpec.Builder {
-    beginControlFlow(controlFlow, *args)
-    block()
-    endControlFlow()
-    return this
-}
diff --git a/tools/xmlpersistence/src/main/kotlin/Main.kt b/tools/xmlpersistence/src/main/kotlin/Main.kt
deleted file mode 100644
index e271f8c..0000000
--- a/tools/xmlpersistence/src/main/kotlin/Main.kt
+++ /dev/null
@@ -1,45 +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.
- */
-
-import java.io.File
-import java.nio.file.Files
-
-fun main(args: Array<String>) {
-    val showUsage = args.isEmpty() || when (args.singleOrNull()) {
-        "-h", "--help" -> true
-        else -> false
-    }
-    if (showUsage) {
-        usage()
-        return
-    }
-
-    val files = args.flatMap {
-        File(it).walk().filter { it.isFile && it.extension == "java" }.map { it.toPath() }
-    }
-    val persistences = parse(files)
-    for (persistence in persistences) {
-        val file = generate(persistence)
-        Files.newBufferedWriter(persistence.path).use {
-            it.write(FILE_HEADER)
-            file.writeTo(it)
-        }
-    }
-}
-
-private fun usage() {
-    println("Usage: xmlpersistence <FILES>")
-}
diff --git a/tools/xmlpersistence/src/main/kotlin/Parser.kt b/tools/xmlpersistence/src/main/kotlin/Parser.kt
deleted file mode 100644
index 3ea12a9..0000000
--- a/tools/xmlpersistence/src/main/kotlin/Parser.kt
+++ /dev/null
@@ -1,248 +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.
- */
-
-import com.github.javaparser.JavaParser
-import com.github.javaparser.ParseProblemException
-import com.github.javaparser.ParseResult
-import com.github.javaparser.ParserConfiguration
-import com.github.javaparser.ast.Node
-import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration
-import com.github.javaparser.ast.body.FieldDeclaration
-import com.github.javaparser.ast.body.TypeDeclaration
-import com.github.javaparser.ast.expr.AnnotationExpr
-import com.github.javaparser.ast.expr.Expression
-import com.github.javaparser.ast.expr.NormalAnnotationExpr
-import com.github.javaparser.ast.expr.SingleMemberAnnotationExpr
-import com.github.javaparser.ast.expr.StringLiteralExpr
-import com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration
-import com.github.javaparser.resolution.types.ResolvedPrimitiveType
-import com.github.javaparser.resolution.types.ResolvedReferenceType
-import com.github.javaparser.symbolsolver.JavaSymbolSolver
-import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserClassDeclaration
-import com.github.javaparser.symbolsolver.resolution.typesolvers.CombinedTypeSolver
-import com.github.javaparser.symbolsolver.resolution.typesolvers.MemoryTypeSolver
-import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver
-import com.squareup.javapoet.ClassName
-import com.squareup.javapoet.ParameterizedTypeName
-import com.squareup.javapoet.TypeName
-import java.nio.file.Path
-import java.util.Optional
-
-class PersistenceInfo(
-    val name: String,
-    val root: ClassFieldInfo,
-    val path: Path
-)
-
-sealed class FieldInfo {
-    abstract val name: String
-    abstract val xmlName: String?
-    abstract val type: TypeName
-    abstract val isRequired: Boolean
-}
-
-class PrimitiveFieldInfo(
-    override val name: String,
-    override val xmlName: String?,
-    override val type: TypeName,
-    override val isRequired: Boolean
-) : FieldInfo()
-
-class StringFieldInfo(
-    override val name: String,
-    override val xmlName: String?,
-    override val isRequired: Boolean
-) : FieldInfo() {
-    override val type: TypeName = ClassName.get(String::class.java)
-}
-
-class ClassFieldInfo(
-    override val name: String,
-    override val xmlName: String?,
-    override val type: ClassName,
-    override val isRequired: Boolean,
-    val fields: List<FieldInfo>
-) : FieldInfo()
-
-class ListFieldInfo(
-    override val name: String,
-    override val xmlName: String?,
-    override val type: ParameterizedTypeName,
-    val element: ClassFieldInfo
-) : FieldInfo() {
-    override val isRequired: Boolean = true
-}
-
-fun parse(files: List<Path>): List<PersistenceInfo> {
-    val typeSolver = CombinedTypeSolver().apply { add(ReflectionTypeSolver()) }
-    val javaParser = JavaParser(ParserConfiguration()
-        .setSymbolResolver(JavaSymbolSolver(typeSolver)))
-    val compilationUnits = files.map { javaParser.parse(it).getOrThrow() }
-    val memoryTypeSolver = MemoryTypeSolver().apply {
-        for (compilationUnit in compilationUnits) {
-            for (typeDeclaration in compilationUnit.getNodesByClass<TypeDeclaration<*>>()) {
-                val name = typeDeclaration.fullyQualifiedName.getOrNull() ?: continue
-                addDeclaration(name, typeDeclaration.resolve())
-            }
-        }
-    }
-    typeSolver.add(memoryTypeSolver)
-    return mutableListOf<PersistenceInfo>().apply {
-        for (compilationUnit in compilationUnits) {
-            val classDeclarations = compilationUnit
-                .getNodesByClass<ClassOrInterfaceDeclaration>()
-                .filter { !it.isInterface && (!it.isNestedType || it.isStatic) }
-            this += classDeclarations.mapNotNull { parsePersistenceInfo(it) }
-        }
-    }
-}
-
-private fun parsePersistenceInfo(classDeclaration: ClassOrInterfaceDeclaration): PersistenceInfo? {
-    val annotation = classDeclaration.getAnnotationByName("XmlPersistence").getOrNull()
-        ?: return null
-    val rootClassName = classDeclaration.nameAsString
-    val name = annotation.getMemberValue("value")?.stringLiteralValue
-        ?: "${rootClassName}Persistence"
-    val rootXmlName = classDeclaration.getAnnotationByName("XmlName").getOrNull()
-        ?.getMemberValue("value")?.stringLiteralValue
-    val root = parseClassFieldInfo(
-        rootXmlName ?: rootClassName, rootXmlName, true, classDeclaration
-    )
-    val path = classDeclaration.findCompilationUnit().get().storage.get().path
-        .resolveSibling("$name.java")
-    return PersistenceInfo(name, root, path)
-}
-
-private fun parseClassFieldInfo(
-    name: String,
-    xmlName: String?,
-    isRequired: Boolean,
-    classDeclaration: ClassOrInterfaceDeclaration
-): ClassFieldInfo {
-    val fields = classDeclaration.fields.filterNot { it.isStatic }.map { parseFieldInfo(it) }
-    val type = classDeclaration.resolve().typeName
-    return ClassFieldInfo(name, xmlName, type, isRequired, fields)
-}
-
-private fun parseFieldInfo(field: FieldDeclaration): FieldInfo {
-    require(field.isPublic && field.isFinal)
-    val variable = field.variables.single()
-    val name = variable.nameAsString
-    val annotations = field.annotations + variable.type.annotations
-    val annotation = annotations.getByName("XmlName")
-    val xmlName = annotation?.getMemberValue("value")?.stringLiteralValue
-    val isRequired = annotations.getByName("NonNull") != null
-    return when (val type = variable.type.resolve()) {
-        is ResolvedPrimitiveType -> {
-            val primitiveType = type.typeName
-            PrimitiveFieldInfo(name, xmlName, primitiveType, true)
-        }
-        is ResolvedReferenceType -> {
-            when (type.qualifiedName) {
-                Boolean::class.javaObjectType.name, Byte::class.javaObjectType.name,
-                Short::class.javaObjectType.name, Char::class.javaObjectType.name,
-                Integer::class.javaObjectType.name, Long::class.javaObjectType.name,
-                Float::class.javaObjectType.name, Double::class.javaObjectType.name ->
-                    PrimitiveFieldInfo(name, xmlName, type.typeName, isRequired)
-                String::class.java.name -> StringFieldInfo(name, xmlName, isRequired)
-                List::class.java.name -> {
-                    requireNotNull(xmlName)
-                    val elementType = type.typeParametersValues().single()
-                    require(elementType is ResolvedReferenceType)
-                    val listType = ParameterizedTypeName.get(
-                        ClassName.get(List::class.java), elementType.typeName
-                    )
-                    val element = parseClassFieldInfo(
-                        "(element)", xmlName, true, elementType.classDeclaration
-                    )
-                    ListFieldInfo(name, xmlName, listType, element)
-                }
-                else -> parseClassFieldInfo(name, xmlName, isRequired, type.classDeclaration)
-            }
-        }
-        else -> error(type)
-    }
-}
-
-private fun <T> ParseResult<T>.getOrThrow(): T =
-    if (isSuccessful) {
-        result.get()
-    } else {
-        throw ParseProblemException(problems)
-    }
-
-private inline fun <reified T : Node> Node.getNodesByClass(): List<T> =
-    getNodesByClass(T::class.java)
-
-private fun <T : Node> Node.getNodesByClass(klass: Class<T>): List<T> = mutableListOf<T>().apply {
-    if (klass.isInstance(this@getNodesByClass)) {
-        this += klass.cast(this@getNodesByClass)
-    }
-    for (childNode in childNodes) {
-        this += childNode.getNodesByClass(klass)
-    }
-}
-
-private fun <T> Optional<T>.getOrNull(): T? = orElse(null)
-
-private fun List<AnnotationExpr>.getByName(name: String): AnnotationExpr? =
-    find { it.name.identifier == name }
-
-private fun AnnotationExpr.getMemberValue(name: String): Expression? =
-    when (this) {
-        is NormalAnnotationExpr -> pairs.find { it.nameAsString == name }?.value
-        is SingleMemberAnnotationExpr -> if (name == "value") memberValue else null
-        else -> null
-    }
-
-private val Expression.stringLiteralValue: String
-    get() {
-        require(this is StringLiteralExpr)
-        return value
-    }
-
-private val ResolvedReferenceType.classDeclaration: ClassOrInterfaceDeclaration
-    get() {
-        val resolvedClassDeclaration = typeDeclaration
-        require(resolvedClassDeclaration is JavaParserClassDeclaration)
-        return resolvedClassDeclaration.wrappedNode
-    }
-
-private val ResolvedPrimitiveType.typeName: TypeName
-    get() =
-        when (this) {
-            ResolvedPrimitiveType.BOOLEAN -> TypeName.BOOLEAN
-            ResolvedPrimitiveType.BYTE -> TypeName.BYTE
-            ResolvedPrimitiveType.SHORT -> TypeName.SHORT
-            ResolvedPrimitiveType.CHAR -> TypeName.CHAR
-            ResolvedPrimitiveType.INT -> TypeName.INT
-            ResolvedPrimitiveType.LONG -> TypeName.LONG
-            ResolvedPrimitiveType.FLOAT -> TypeName.FLOAT
-            ResolvedPrimitiveType.DOUBLE -> TypeName.DOUBLE
-        }
-
-// This doesn't support type parameters.
-private val ResolvedReferenceType.typeName: TypeName
-    get() = typeDeclaration.typeName
-
-private val ResolvedReferenceTypeDeclaration.typeName: ClassName
-    get() {
-        val packageName = packageName
-        val classNames = className.split(".")
-        val topLevelClassName = classNames.first()
-        val nestedClassNames = classNames.drop(1)
-        return ClassName.get(packageName, topLevelClassName, *nestedClassNames.toTypedArray())
-    }
diff --git a/tools/xmlpersistence/src/main/kotlin/StringCaseExtensions.kt b/tools/xmlpersistence/src/main/kotlin/StringCaseExtensions.kt
deleted file mode 100644
index b4bdbba..0000000
--- a/tools/xmlpersistence/src/main/kotlin/StringCaseExtensions.kt
+++ /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.
- */
-
-import java.util.Locale
-
-private val camelHumpBoundary = Regex(
-    "-"
-    + "|_"
-    + "|(?<=[0-9])(?=[^0-9])"
-    + "|(?<=[A-Z])(?=[^A-Za-z]|[A-Z][a-z])"
-    + "|(?<=[a-z])(?=[^a-z])"
-)
-
-private fun String.toCamelHumps(): List<String> = split(camelHumpBoundary)
-
-fun String.toUpperCamelCase(): String =
-    toCamelHumps().joinToString("") { it.toLowerCase(Locale.ROOT).capitalize(Locale.ROOT) }
-
-fun String.toLowerCamelCase(): String = toUpperCamelCase().decapitalize(Locale.ROOT)
-
-fun String.toUpperKebabCase(): String =
-    toCamelHumps().joinToString("-") { it.toUpperCase(Locale.ROOT) }
-
-fun String.toLowerKebabCase(): String =
-    toCamelHumps().joinToString("-") { it.toLowerCase(Locale.ROOT) }
-
-fun String.toUpperSnakeCase(): String =
-    toCamelHumps().joinToString("_") { it.toUpperCase(Locale.ROOT) }
-
-fun String.toLowerSnakeCase(): String =
-    toCamelHumps().joinToString("_") { it.toLowerCase(Locale.ROOT) }
diff --git a/wifi/java/src/android/net/wifi/sharedconnectivity/app/NetworkProviderInfo.java b/wifi/java/src/android/net/wifi/sharedconnectivity/app/NetworkProviderInfo.java
index e207b01..01f1591 100644
--- a/wifi/java/src/android/net/wifi/sharedconnectivity/app/NetworkProviderInfo.java
+++ b/wifi/java/src/android/net/wifi/sharedconnectivity/app/NetworkProviderInfo.java
@@ -84,17 +84,12 @@
     public @interface DeviceType {
     }
 
-    /**
-     * Key in extras bundle indicating that the device battery is charging.
-     * @hide
-     */
-    public static final String EXTRA_KEY_IS_BATTERY_CHARGING = "is_battery_charging";
-
     @DeviceType
     private final int mDeviceType;
     private final String mDeviceName;
     private final String mModelName;
     private final int mBatteryPercentage;
+    private final boolean mIsBatteryCharging;
     private final int mConnectionStrength;
     private final Bundle mExtras;
 
@@ -106,6 +101,7 @@
         private String mDeviceName;
         private String mModelName;
         private int mBatteryPercentage;
+        private boolean mIsBatteryCharging;
         private int mConnectionStrength;
         private Bundle mExtras = Bundle.EMPTY;
 
@@ -167,6 +163,18 @@
         }
 
         /**
+         * Sets if the battery of the remote device is charging.
+         *
+         * @param isBatteryCharging True if battery is charging.
+         * @return Returns the Builder object.
+         */
+        @NonNull
+        public Builder setBatteryCharging(boolean isBatteryCharging) {
+            mIsBatteryCharging = isBatteryCharging;
+            return this;
+        }
+
+        /**
          * Sets the displayed connection strength of the remote device to the internet.
          *
          * @param connectionStrength Connection strength in range 0 to 4.
@@ -198,7 +206,7 @@
         @NonNull
         public NetworkProviderInfo build() {
             return new NetworkProviderInfo(mDeviceType, mDeviceName, mModelName, mBatteryPercentage,
-                    mConnectionStrength, mExtras);
+                    mIsBatteryCharging, mConnectionStrength, mExtras);
         }
     }
 
@@ -218,13 +226,14 @@
     }
 
     private NetworkProviderInfo(@DeviceType int deviceType, @NonNull String deviceName,
-            @NonNull String modelName, int batteryPercentage, int connectionStrength,
-            @NonNull Bundle extras) {
+            @NonNull String modelName, int batteryPercentage, boolean isBatteryCharging,
+            int connectionStrength, @NonNull Bundle extras) {
         validate(deviceType, deviceName, modelName, batteryPercentage, connectionStrength);
         mDeviceType = deviceType;
         mDeviceName = deviceName;
         mModelName = modelName;
         mBatteryPercentage = batteryPercentage;
+        mIsBatteryCharging = isBatteryCharging;
         mConnectionStrength = connectionStrength;
         mExtras = extras;
     }
@@ -270,6 +279,15 @@
     }
 
     /**
+     * Gets the charging state of the battery on the remote device.
+     *
+     * @return Returns true if the battery of the remote device is charging.
+     */
+    public boolean isBatteryCharging() {
+        return mIsBatteryCharging;
+    }
+
+    /**
      * Gets the displayed connection strength of the remote device to the internet.
      *
      * @return Returns the connection strength in range 0 to 4.
@@ -297,13 +315,14 @@
                 && Objects.equals(mDeviceName, other.mDeviceName)
                 && Objects.equals(mModelName, other.mModelName)
                 && mBatteryPercentage == other.mBatteryPercentage
+                && mIsBatteryCharging == other.mIsBatteryCharging
                 && mConnectionStrength == other.mConnectionStrength;
     }
 
     @Override
     public int hashCode() {
         return Objects.hash(mDeviceType, mDeviceName, mModelName, mBatteryPercentage,
-                mConnectionStrength);
+                mIsBatteryCharging, mConnectionStrength);
     }
 
     @Override
@@ -312,6 +331,7 @@
         dest.writeString(mDeviceName);
         dest.writeString(mModelName);
         dest.writeInt(mBatteryPercentage);
+        dest.writeBoolean(mIsBatteryCharging);
         dest.writeInt(mConnectionStrength);
         dest.writeBundle(mExtras);
     }
@@ -329,7 +349,7 @@
     @NonNull
     public static NetworkProviderInfo readFromParcel(@NonNull Parcel in) {
         return new NetworkProviderInfo(in.readInt(), in.readString(), in.readString(), in.readInt(),
-                in.readInt(), in.readBundle());
+                in.readBoolean(), in.readInt(), in.readBundle());
     }
 
     @NonNull
@@ -352,6 +372,7 @@
                 .append(", deviceName=").append(mDeviceName)
                 .append(", modelName=").append(mModelName)
                 .append(", batteryPercentage=").append(mBatteryPercentage)
+                .append(", isBatteryCharging=").append(mIsBatteryCharging)
                 .append(", connectionStrength=").append(mConnectionStrength)
                 .append(", extras=").append(mExtras.toString())
                 .append("]").toString();